diff --git "a/demo/ort-phi3/dist/esm/ort.webgpu.js" "b/demo/ort-phi3/dist/esm/ort.webgpu.js" new file mode 100644--- /dev/null +++ "b/demo/ort-phi3/dist/esm/ort.webgpu.js" @@ -0,0 +1,19787 @@ +/*! + * ONNX Runtime Web v1.18.0 + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +}; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// common/dist/esm/backend-impl.js +var backends, backendsSortedByPriority, registerBackend, tryResolveAndInitializeBackend, resolveBackendAndExecutionProviders; +var init_backend_impl = __esm({ + "common/dist/esm/backend-impl.js"() { + "use strict"; + backends = /* @__PURE__ */ new Map(); + backendsSortedByPriority = []; + registerBackend = (name, backend, priority) => { + if (backend && typeof backend.init === "function" && typeof backend.createInferenceSessionHandler === "function") { + const currentBackend = backends.get(name); + if (currentBackend === void 0) { + backends.set(name, { backend, priority }); + } else if (currentBackend.priority > priority) { + return; + } else if (currentBackend.priority === priority) { + if (currentBackend.backend !== backend) { + throw new Error(`cannot register backend "${name}" using priority ${priority}`); + } + } + if (priority >= 0) { + const i = backendsSortedByPriority.indexOf(name); + if (i !== -1) { + backendsSortedByPriority.splice(i, 1); + } + for (let i2 = 0; i2 < backendsSortedByPriority.length; i2++) { + if (backends.get(backendsSortedByPriority[i2]).priority <= priority) { + backendsSortedByPriority.splice(i2, 0, name); + return; + } + } + backendsSortedByPriority.push(name); + } + return; + } + throw new TypeError("not a valid backend"); + }; + tryResolveAndInitializeBackend = async (backendName) => { + const backendInfo = backends.get(backendName); + if (!backendInfo) { + return "backend not found."; + } + if (backendInfo.initialized) { + return backendInfo.backend; + } else if (backendInfo.aborted) { + return backendInfo.error; + } else { + const isInitializing = !!backendInfo.initPromise; + try { + if (!isInitializing) { + backendInfo.initPromise = backendInfo.backend.init(backendName); + } + await backendInfo.initPromise; + backendInfo.initialized = true; + return backendInfo.backend; + } catch (e) { + if (!isInitializing) { + backendInfo.error = `${e}`; + backendInfo.aborted = true; + } + return backendInfo.error; + } finally { + delete backendInfo.initPromise; + } + } + }; + resolveBackendAndExecutionProviders = async (options) => { + const eps = options.executionProviders || []; + const backendHints = eps.map((i) => typeof i === "string" ? i : i.name); + const backendNames = backendHints.length === 0 ? backendsSortedByPriority : backendHints; + let backend; + const errors = []; + const availableBackendNames = /* @__PURE__ */ new Set(); + for (const backendName of backendNames) { + const resolveResult = await tryResolveAndInitializeBackend(backendName); + if (typeof resolveResult === "string") { + errors.push({ name: backendName, err: resolveResult }); + } else { + if (!backend) { + backend = resolveResult; + } + if (backend === resolveResult) { + availableBackendNames.add(backendName); + } + } + } + if (!backend) { + throw new Error(`no available backend found. ERR: ${errors.map((e) => `[${e.name}] ${e.err}`).join(", ")}`); + } + for (const { name, err } of errors) { + if (backendHints.includes(name)) { + console.warn(`removing requested execution provider "${name}" from session options because it is not available: ${err}`); + } + } + const filteredEps = eps.filter((i) => availableBackendNames.has(typeof i === "string" ? i : i.name)); + return [ + backend, + new Proxy(options, { + get: (target, prop) => { + if (prop === "executionProviders") { + return filteredEps; + } + return Reflect.get(target, prop); + } + }) + ]; + }; + } +}); + +// common/dist/esm/backend.js +var init_backend = __esm({ + "common/dist/esm/backend.js"() { + "use strict"; + init_backend_impl(); + } +}); + +// common/dist/esm/version.js +var version; +var init_version = __esm({ + "common/dist/esm/version.js"() { + "use strict"; + version = "1.18.0"; + } +}); + +// common/dist/esm/env-impl.js +var logLevelValue, env; +var init_env_impl = __esm({ + "common/dist/esm/env-impl.js"() { + "use strict"; + init_version(); + logLevelValue = "warning"; + env = { + wasm: {}, + webgl: {}, + webgpu: {}, + versions: { common: version }, + set logLevel(value) { + if (value === void 0) { + return; + } + if (typeof value !== "string" || ["verbose", "info", "warning", "error", "fatal"].indexOf(value) === -1) { + throw new Error(`Unsupported logging level: ${value}`); + } + logLevelValue = value; + }, + get logLevel() { + return logLevelValue; + } + }; + Object.defineProperty(env, "logLevel", { enumerable: true }); + } +}); + +// common/dist/esm/env.js +var env2; +var init_env = __esm({ + "common/dist/esm/env.js"() { + "use strict"; + init_env_impl(); + env2 = env; + } +}); + +// common/dist/esm/tensor-conversion-impl.js +var tensorToDataURL, tensorToImageData; +var init_tensor_conversion_impl = __esm({ + "common/dist/esm/tensor-conversion-impl.js"() { + "use strict"; + tensorToDataURL = (tensor, options) => { + const canvas = typeof document !== "undefined" ? document.createElement("canvas") : new OffscreenCanvas(1, 1); + canvas.width = tensor.dims[3]; + canvas.height = tensor.dims[2]; + const pixels2DContext = canvas.getContext("2d"); + if (pixels2DContext != null) { + let width; + let height; + if (options?.tensorLayout !== void 0 && options.tensorLayout === "NHWC") { + width = tensor.dims[2]; + height = tensor.dims[3]; + } else { + width = tensor.dims[3]; + height = tensor.dims[2]; + } + const inputformat = options?.format !== void 0 ? options.format : "RGB"; + const norm = options?.norm; + let normMean; + let normBias; + if (norm === void 0 || norm.mean === void 0) { + normMean = [255, 255, 255, 255]; + } else { + if (typeof norm.mean === "number") { + normMean = [norm.mean, norm.mean, norm.mean, norm.mean]; + } else { + normMean = [norm.mean[0], norm.mean[1], norm.mean[2], 0]; + if (norm.mean[3] !== void 0) { + normMean[3] = norm.mean[3]; + } + } + } + if (norm === void 0 || norm.bias === void 0) { + normBias = [0, 0, 0, 0]; + } else { + if (typeof norm.bias === "number") { + normBias = [norm.bias, norm.bias, norm.bias, norm.bias]; + } else { + normBias = [norm.bias[0], norm.bias[1], norm.bias[2], 0]; + if (norm.bias[3] !== void 0) { + normBias[3] = norm.bias[3]; + } + } + } + const stride = height * width; + let rTensorPointer = 0, gTensorPointer = stride, bTensorPointer = stride * 2, aTensorPointer = -1; + if (inputformat === "RGBA") { + rTensorPointer = 0; + gTensorPointer = stride; + bTensorPointer = stride * 2; + aTensorPointer = stride * 3; + } else if (inputformat === "RGB") { + rTensorPointer = 0; + gTensorPointer = stride; + bTensorPointer = stride * 2; + } else if (inputformat === "RBG") { + rTensorPointer = 0; + bTensorPointer = stride; + gTensorPointer = stride * 2; + } + for (let i = 0; i < height; i++) { + for (let j = 0; j < width; j++) { + const R = (tensor.data[rTensorPointer++] - normBias[0]) * normMean[0]; + const G = (tensor.data[gTensorPointer++] - normBias[1]) * normMean[1]; + const B = (tensor.data[bTensorPointer++] - normBias[2]) * normMean[2]; + const A = aTensorPointer === -1 ? 255 : (tensor.data[aTensorPointer++] - normBias[3]) * normMean[3]; + pixels2DContext.fillStyle = "rgba(" + R + "," + G + "," + B + "," + A + ")"; + pixels2DContext.fillRect(j, i, 1, 1); + } + } + if ("toDataURL" in canvas) { + return canvas.toDataURL(); + } else { + throw new Error("toDataURL is not supported"); + } + } else { + throw new Error("Can not access image data"); + } + }; + tensorToImageData = (tensor, options) => { + const pixels2DContext = typeof document !== "undefined" ? document.createElement("canvas").getContext("2d") : new OffscreenCanvas(1, 1).getContext("2d"); + let image; + if (pixels2DContext != null) { + let width; + let height; + let channels; + if (options?.tensorLayout !== void 0 && options.tensorLayout === "NHWC") { + width = tensor.dims[2]; + height = tensor.dims[1]; + channels = tensor.dims[3]; + } else { + width = tensor.dims[3]; + height = tensor.dims[2]; + channels = tensor.dims[1]; + } + const inputformat = options !== void 0 ? options.format !== void 0 ? options.format : "RGB" : "RGB"; + const norm = options?.norm; + let normMean; + let normBias; + if (norm === void 0 || norm.mean === void 0) { + normMean = [255, 255, 255, 255]; + } else { + if (typeof norm.mean === "number") { + normMean = [norm.mean, norm.mean, norm.mean, norm.mean]; + } else { + normMean = [norm.mean[0], norm.mean[1], norm.mean[2], 255]; + if (norm.mean[3] !== void 0) { + normMean[3] = norm.mean[3]; + } + } + } + if (norm === void 0 || norm.bias === void 0) { + normBias = [0, 0, 0, 0]; + } else { + if (typeof norm.bias === "number") { + normBias = [norm.bias, norm.bias, norm.bias, norm.bias]; + } else { + normBias = [norm.bias[0], norm.bias[1], norm.bias[2], 0]; + if (norm.bias[3] !== void 0) { + normBias[3] = norm.bias[3]; + } + } + } + const stride = height * width; + if (options !== void 0) { + if (options.format !== void 0 && (channels === 4 && options.format !== "RGBA") || channels === 3 && (options.format !== "RGB" && options.format !== "BGR")) { + throw new Error("Tensor format doesn't match input tensor dims"); + } + } + const step = 4; + let rImagePointer = 0, gImagePointer = 1, bImagePointer = 2, aImagePointer = 3; + let rTensorPointer = 0, gTensorPointer = stride, bTensorPointer = stride * 2, aTensorPointer = -1; + if (inputformat === "RGBA") { + rTensorPointer = 0; + gTensorPointer = stride; + bTensorPointer = stride * 2; + aTensorPointer = stride * 3; + } else if (inputformat === "RGB") { + rTensorPointer = 0; + gTensorPointer = stride; + bTensorPointer = stride * 2; + } else if (inputformat === "RBG") { + rTensorPointer = 0; + bTensorPointer = stride; + gTensorPointer = stride * 2; + } + image = pixels2DContext.createImageData(width, height); + for (let i = 0; i < height * width; rImagePointer += step, gImagePointer += step, bImagePointer += step, aImagePointer += step, i++) { + image.data[rImagePointer] = (tensor.data[rTensorPointer++] - normBias[0]) * normMean[0]; + image.data[gImagePointer] = (tensor.data[gTensorPointer++] - normBias[1]) * normMean[1]; + image.data[bImagePointer] = (tensor.data[bTensorPointer++] - normBias[2]) * normMean[2]; + image.data[aImagePointer] = aTensorPointer === -1 ? 255 : (tensor.data[aTensorPointer++] - normBias[3]) * normMean[3]; + } + } else { + throw new Error("Can not access image data"); + } + return image; + }; + } +}); + +// common/dist/esm/tensor-factory-impl.js +var bufferToTensor, tensorFromImage, tensorFromTexture, tensorFromGpuBuffer, tensorFromPinnedBuffer; +var init_tensor_factory_impl = __esm({ + "common/dist/esm/tensor-factory-impl.js"() { + "use strict"; + init_tensor_impl(); + bufferToTensor = (buffer, options) => { + if (buffer === void 0) { + throw new Error("Image buffer must be defined"); + } + if (options.height === void 0 || options.width === void 0) { + throw new Error("Image height and width must be defined"); + } + if (options.tensorLayout === "NHWC") { + throw new Error("NHWC Tensor layout is not supported yet"); + } + const { height, width } = options; + const norm = options.norm ?? { mean: 255, bias: 0 }; + let normMean; + let normBias; + if (typeof norm.mean === "number") { + normMean = [norm.mean, norm.mean, norm.mean, norm.mean]; + } else { + normMean = [norm.mean[0], norm.mean[1], norm.mean[2], norm.mean[3] ?? 255]; + } + if (typeof norm.bias === "number") { + normBias = [norm.bias, norm.bias, norm.bias, norm.bias]; + } else { + normBias = [norm.bias[0], norm.bias[1], norm.bias[2], norm.bias[3] ?? 0]; + } + const inputformat = options.format !== void 0 ? options.format : "RGBA"; + const outputformat = options.tensorFormat !== void 0 ? options.tensorFormat !== void 0 ? options.tensorFormat : "RGB" : "RGB"; + const stride = height * width; + const float32Data = outputformat === "RGBA" ? new Float32Array(stride * 4) : new Float32Array(stride * 3); + let step = 4, rImagePointer = 0, gImagePointer = 1, bImagePointer = 2, aImagePointer = 3; + let rTensorPointer = 0, gTensorPointer = stride, bTensorPointer = stride * 2, aTensorPointer = -1; + if (inputformat === "RGB") { + step = 3; + rImagePointer = 0; + gImagePointer = 1; + bImagePointer = 2; + aImagePointer = -1; + } + if (outputformat === "RGBA") { + aTensorPointer = stride * 3; + } else if (outputformat === "RBG") { + rTensorPointer = 0; + bTensorPointer = stride; + gTensorPointer = stride * 2; + } else if (outputformat === "BGR") { + bTensorPointer = 0; + gTensorPointer = stride; + rTensorPointer = stride * 2; + } + for (let i = 0; i < stride; i++, rImagePointer += step, bImagePointer += step, gImagePointer += step, aImagePointer += step) { + float32Data[rTensorPointer++] = (buffer[rImagePointer] + normBias[0]) / normMean[0]; + float32Data[gTensorPointer++] = (buffer[gImagePointer] + normBias[1]) / normMean[1]; + float32Data[bTensorPointer++] = (buffer[bImagePointer] + normBias[2]) / normMean[2]; + if (aTensorPointer !== -1 && aImagePointer !== -1) { + float32Data[aTensorPointer++] = (buffer[aImagePointer] + normBias[3]) / normMean[3]; + } + } + const outputTensor = outputformat === "RGBA" ? new Tensor("float32", float32Data, [1, 4, height, width]) : new Tensor("float32", float32Data, [1, 3, height, width]); + return outputTensor; + }; + tensorFromImage = async (image, options) => { + const isHTMLImageEle = typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement; + const isImageDataEle = typeof ImageData !== "undefined" && image instanceof ImageData; + const isImageBitmap = typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap; + const isString = typeof image === "string"; + let data; + let bufferToTensorOptions = options ?? {}; + const createCanvas = () => { + if (typeof document !== "undefined") { + return document.createElement("canvas"); + } else if (typeof OffscreenCanvas !== "undefined") { + return new OffscreenCanvas(1, 1); + } else { + throw new Error("Canvas is not supported"); + } + }; + const createCanvasContext = (canvas) => { + if (canvas instanceof HTMLCanvasElement) { + return canvas.getContext("2d"); + } else if (canvas instanceof OffscreenCanvas) { + return canvas.getContext("2d"); + } else { + return null; + } + }; + if (isHTMLImageEle) { + const canvas = createCanvas(); + canvas.width = image.width; + canvas.height = image.height; + const pixels2DContext = createCanvasContext(canvas); + if (pixels2DContext != null) { + let height = image.height; + let width = image.width; + if (options !== void 0 && options.resizedHeight !== void 0 && options.resizedWidth !== void 0) { + height = options.resizedHeight; + width = options.resizedWidth; + } + if (options !== void 0) { + bufferToTensorOptions = options; + if (options.tensorFormat !== void 0) { + throw new Error("Image input config format must be RGBA for HTMLImageElement"); + } else { + bufferToTensorOptions.tensorFormat = "RGBA"; + } + bufferToTensorOptions.height = height; + bufferToTensorOptions.width = width; + } else { + bufferToTensorOptions.tensorFormat = "RGBA"; + bufferToTensorOptions.height = height; + bufferToTensorOptions.width = width; + } + pixels2DContext.drawImage(image, 0, 0); + data = pixels2DContext.getImageData(0, 0, width, height).data; + } else { + throw new Error("Can not access image data"); + } + } else if (isImageDataEle) { + let height; + let width; + if (options !== void 0 && options.resizedWidth !== void 0 && options.resizedHeight !== void 0) { + height = options.resizedHeight; + width = options.resizedWidth; + } else { + height = image.height; + width = image.width; + } + if (options !== void 0) { + bufferToTensorOptions = options; + } + bufferToTensorOptions.format = "RGBA"; + bufferToTensorOptions.height = height; + bufferToTensorOptions.width = width; + if (options !== void 0) { + const tempCanvas = createCanvas(); + tempCanvas.width = width; + tempCanvas.height = height; + const pixels2DContext = createCanvasContext(tempCanvas); + if (pixels2DContext != null) { + pixels2DContext.putImageData(image, 0, 0); + data = pixels2DContext.getImageData(0, 0, width, height).data; + } else { + throw new Error("Can not access image data"); + } + } else { + data = image.data; + } + } else if (isImageBitmap) { + if (options === void 0) { + throw new Error("Please provide image config with format for Imagebitmap"); + } + const canvas = createCanvas(); + canvas.width = image.width; + canvas.height = image.height; + const pixels2DContext = createCanvasContext(canvas); + if (pixels2DContext != null) { + const height = image.height; + const width = image.width; + pixels2DContext.drawImage(image, 0, 0, width, height); + data = pixels2DContext.getImageData(0, 0, width, height).data; + bufferToTensorOptions.height = height; + bufferToTensorOptions.width = width; + return bufferToTensor(data, bufferToTensorOptions); + } else { + throw new Error("Can not access image data"); + } + } else if (isString) { + return new Promise((resolve, reject) => { + const canvas = createCanvas(); + const context = createCanvasContext(canvas); + if (!image || !context) { + return reject(); + } + const newImage = new Image(); + newImage.crossOrigin = "Anonymous"; + newImage.src = image; + newImage.onload = () => { + canvas.width = newImage.width; + canvas.height = newImage.height; + context.drawImage(newImage, 0, 0, canvas.width, canvas.height); + const img = context.getImageData(0, 0, canvas.width, canvas.height); + bufferToTensorOptions.height = canvas.height; + bufferToTensorOptions.width = canvas.width; + resolve(bufferToTensor(img.data, bufferToTensorOptions)); + }; + }); + } else { + throw new Error("Input data provided is not supported - aborted tensor creation"); + } + if (data !== void 0) { + return bufferToTensor(data, bufferToTensorOptions); + } else { + throw new Error("Input data provided is not supported - aborted tensor creation"); + } + }; + tensorFromTexture = (texture, options) => { + const { width, height, download, dispose } = options; + const dims = [1, height, width, 4]; + return new Tensor({ location: "texture", type: "float32", texture, dims, download, dispose }); + }; + tensorFromGpuBuffer = (gpuBuffer, options) => { + const { dataType, dims, download, dispose } = options; + return new Tensor({ location: "gpu-buffer", type: dataType ?? "float32", gpuBuffer, dims, download, dispose }); + }; + tensorFromPinnedBuffer = (type, buffer, dims) => new Tensor({ location: "cpu-pinned", type, data: buffer, dims: dims ?? [buffer.length] }); + } +}); + +// common/dist/esm/tensor-impl-type-mapping.js +var NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP, NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP, isTypedArrayChecked, checkTypedArray; +var init_tensor_impl_type_mapping = __esm({ + "common/dist/esm/tensor-impl-type-mapping.js"() { + "use strict"; + NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP = /* @__PURE__ */ new Map([ + ["float32", Float32Array], + ["uint8", Uint8Array], + ["int8", Int8Array], + ["uint16", Uint16Array], + ["int16", Int16Array], + ["int32", Int32Array], + ["bool", Uint8Array], + ["float64", Float64Array], + ["uint32", Uint32Array] + ]); + NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP = /* @__PURE__ */ new Map([ + [Float32Array, "float32"], + [Uint8Array, "uint8"], + [Int8Array, "int8"], + [Uint16Array, "uint16"], + [Int16Array, "int16"], + [Int32Array, "int32"], + [Float64Array, "float64"], + [Uint32Array, "uint32"] + ]); + isTypedArrayChecked = false; + checkTypedArray = () => { + if (!isTypedArrayChecked) { + isTypedArrayChecked = true; + const isBigInt64ArrayAvailable = typeof BigInt64Array !== "undefined" && BigInt64Array.from; + const isBigUint64ArrayAvailable = typeof BigUint64Array !== "undefined" && BigUint64Array.from; + const isFloat16ArrayAvailable = typeof Float16Array !== "undefined" && Float16Array.from; + if (isBigInt64ArrayAvailable) { + NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set("int64", BigInt64Array); + NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigInt64Array, "int64"); + } + if (isBigUint64ArrayAvailable) { + NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set("uint64", BigUint64Array); + NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigUint64Array, "uint64"); + } + if (isFloat16ArrayAvailable) { + NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set("float16", Float16Array); + NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(Float16Array, "float16"); + } else { + NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set("float16", Uint16Array); + } + } + }; + } +}); + +// common/dist/esm/tensor-utils-impl.js +var calculateSize, tensorReshape; +var init_tensor_utils_impl = __esm({ + "common/dist/esm/tensor-utils-impl.js"() { + "use strict"; + init_tensor_impl(); + calculateSize = (dims) => { + let size = 1; + for (let i = 0; i < dims.length; i++) { + const dim = dims[i]; + if (typeof dim !== "number" || !Number.isSafeInteger(dim)) { + throw new TypeError(`dims[${i}] must be an integer, got: ${dim}`); + } + if (dim < 0) { + throw new RangeError(`dims[${i}] must be a non-negative integer, got: ${dim}`); + } + size *= dim; + } + return size; + }; + tensorReshape = (tensor, dims) => { + switch (tensor.location) { + case "cpu": + return new Tensor(tensor.type, tensor.data, dims); + case "cpu-pinned": + return new Tensor({ + location: "cpu-pinned", + data: tensor.data, + type: tensor.type, + dims + }); + case "texture": + return new Tensor({ + location: "texture", + texture: tensor.texture, + type: tensor.type, + dims + }); + case "gpu-buffer": + return new Tensor({ + location: "gpu-buffer", + gpuBuffer: tensor.gpuBuffer, + type: tensor.type, + dims + }); + default: + throw new Error(`tensorReshape: tensor location ${tensor.location} is not supported`); + } + }; + } +}); + +// common/dist/esm/tensor-impl.js +var Tensor; +var init_tensor_impl = __esm({ + "common/dist/esm/tensor-impl.js"() { + "use strict"; + init_tensor_conversion_impl(); + init_tensor_factory_impl(); + init_tensor_impl_type_mapping(); + init_tensor_utils_impl(); + Tensor = class { + /** + * implementation. + */ + constructor(arg0, arg1, arg2) { + checkTypedArray(); + let type; + let dims; + if (typeof arg0 === "object" && "location" in arg0) { + this.dataLocation = arg0.location; + type = arg0.type; + dims = arg0.dims; + switch (arg0.location) { + case "cpu-pinned": { + const expectedTypedArrayConstructor = NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(type); + if (!expectedTypedArrayConstructor) { + throw new TypeError(`unsupported type "${type}" to create tensor from pinned buffer`); + } + if (!(arg0.data instanceof expectedTypedArrayConstructor)) { + throw new TypeError(`buffer should be of type ${expectedTypedArrayConstructor.name}`); + } + this.cpuData = arg0.data; + break; + } + case "texture": { + if (type !== "float32") { + throw new TypeError(`unsupported type "${type}" to create tensor from texture`); + } + this.gpuTextureData = arg0.texture; + this.downloader = arg0.download; + this.disposer = arg0.dispose; + break; + } + case "gpu-buffer": { + if (type !== "float32" && type !== "float16" && type !== "int32" && type !== "int64" && type !== "uint32" && type !== "uint8" && type !== "bool") { + throw new TypeError(`unsupported type "${type}" to create tensor from gpu buffer`); + } + this.gpuBufferData = arg0.gpuBuffer; + this.downloader = arg0.download; + this.disposer = arg0.dispose; + break; + } + default: + throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`); + } + } else { + let data; + let maybeDims; + if (typeof arg0 === "string") { + type = arg0; + maybeDims = arg2; + if (arg0 === "string") { + if (!Array.isArray(arg1)) { + throw new TypeError("A string tensor's data must be a string array."); + } + data = arg1; + } else { + const typedArrayConstructor = NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(arg0); + if (typedArrayConstructor === void 0) { + throw new TypeError(`Unsupported tensor type: ${arg0}.`); + } + if (Array.isArray(arg1)) { + if (arg0 === "float16" && typedArrayConstructor === Uint16Array) { + throw new TypeError("Creating a float16 tensor from number array is not supported. Please use Uint16Array as data."); + } else if (arg0 === "uint64" || arg0 === "int64") { + data = typedArrayConstructor.from(arg1, BigInt); + } else { + data = typedArrayConstructor.from(arg1); + } + } else if (arg1 instanceof typedArrayConstructor) { + data = arg1; + } else { + throw new TypeError(`A ${type} tensor's data must be type of ${typedArrayConstructor}`); + } + } + } else { + maybeDims = arg1; + if (Array.isArray(arg0)) { + if (arg0.length === 0) { + throw new TypeError("Tensor type cannot be inferred from an empty array."); + } + const firstElementType = typeof arg0[0]; + if (firstElementType === "string") { + type = "string"; + data = arg0; + } else if (firstElementType === "boolean") { + type = "bool"; + data = Uint8Array.from(arg0); + } else { + throw new TypeError(`Invalid element type of data array: ${firstElementType}.`); + } + } else { + const mappedType = NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.get(arg0.constructor); + if (mappedType === void 0) { + throw new TypeError(`Unsupported type for tensor data: ${arg0.constructor}.`); + } + type = mappedType; + data = arg0; + } + } + if (maybeDims === void 0) { + maybeDims = [data.length]; + } else if (!Array.isArray(maybeDims)) { + throw new TypeError("A tensor's dims must be a number array"); + } + dims = maybeDims; + this.cpuData = data; + this.dataLocation = "cpu"; + } + const size = calculateSize(dims); + if (this.cpuData && size !== this.cpuData.length) { + throw new Error(`Tensor's size(${size}) does not match data length(${this.cpuData.length}).`); + } + this.type = type; + this.dims = dims; + this.size = size; + } + // #endregion + // #region factory + static async fromImage(image, options) { + return tensorFromImage(image, options); + } + static fromTexture(texture, options) { + return tensorFromTexture(texture, options); + } + static fromGpuBuffer(gpuBuffer, options) { + return tensorFromGpuBuffer(gpuBuffer, options); + } + static fromPinnedBuffer(type, buffer, dims) { + return tensorFromPinnedBuffer(type, buffer, dims); + } + // #endregion + // #region conversions + toDataURL(options) { + return tensorToDataURL(this, options); + } + toImageData(options) { + return tensorToImageData(this, options); + } + // #endregion + // #region properties + get data() { + this.ensureValid(); + if (!this.cpuData) { + throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly."); + } + return this.cpuData; + } + get location() { + return this.dataLocation; + } + get texture() { + this.ensureValid(); + if (!this.gpuTextureData) { + throw new Error("The data is not stored as a WebGL texture."); + } + return this.gpuTextureData; + } + get gpuBuffer() { + this.ensureValid(); + if (!this.gpuBufferData) { + throw new Error("The data is not stored as a WebGPU buffer."); + } + return this.gpuBufferData; + } + // #endregion + // #region methods + async getData(releaseData) { + this.ensureValid(); + switch (this.dataLocation) { + case "cpu": + case "cpu-pinned": + return this.data; + case "texture": + case "gpu-buffer": { + if (!this.downloader) { + throw new Error("The current tensor is not created with a specified data downloader."); + } + if (this.isDownloading) { + throw new Error("The current tensor is being downloaded."); + } + try { + this.isDownloading = true; + const data = await this.downloader(); + this.downloader = void 0; + this.dataLocation = "cpu"; + this.cpuData = data; + if (releaseData && this.disposer) { + this.disposer(); + this.disposer = void 0; + } + return data; + } finally { + this.isDownloading = false; + } + } + default: + throw new Error(`cannot get data from location: ${this.dataLocation}`); + } + } + dispose() { + if (this.isDownloading) { + throw new Error("The current tensor is being downloaded."); + } + if (this.disposer) { + this.disposer(); + this.disposer = void 0; + } + this.cpuData = void 0; + this.gpuTextureData = void 0; + this.gpuBufferData = void 0; + this.downloader = void 0; + this.isDownloading = void 0; + this.dataLocation = "none"; + } + // #endregion + // #region tensor utilities + ensureValid() { + if (this.dataLocation === "none") { + throw new Error("The tensor is disposed."); + } + } + reshape(dims) { + this.ensureValid(); + if (this.downloader || this.disposer) { + throw new Error("Cannot reshape a tensor that owns GPU resource."); + } + return tensorReshape(this, dims); + } + }; + } +}); + +// common/dist/esm/tensor.js +var Tensor2; +var init_tensor = __esm({ + "common/dist/esm/tensor.js"() { + "use strict"; + init_tensor_impl(); + Tensor2 = Tensor; + } +}); + +// common/dist/esm/trace.js +var TRACE, TRACE_FUNC, TRACE_FUNC_BEGIN, TRACE_FUNC_END; +var init_trace = __esm({ + "common/dist/esm/trace.js"() { + "use strict"; + init_env_impl(); + TRACE = (deviceType, label) => { + if (typeof env.trace === "undefined" ? !env.wasm.trace : !env.trace) { + return; + } + console.timeStamp(`${deviceType}::ORT::${label}`); + }; + TRACE_FUNC = (msg, extraMsg) => { + const stack = new Error().stack?.split(/\r\n|\r|\n/g) || []; + let hasTraceFunc = false; + for (let i = 0; i < stack.length; i++) { + if (hasTraceFunc && !stack[i].includes("TRACE_FUNC")) { + let label = `FUNC_${msg}::${stack[i].trim().split(" ")[1]}`; + if (extraMsg) { + label += `::${extraMsg}`; + } + TRACE("CPU", label); + return; + } + if (stack[i].includes("TRACE_FUNC")) { + hasTraceFunc = true; + } + } + }; + TRACE_FUNC_BEGIN = (extraMsg) => { + if (typeof env.trace === "undefined" ? !env.wasm.trace : !env.trace) { + return; + } + TRACE_FUNC("BEGIN", extraMsg); + }; + TRACE_FUNC_END = (extraMsg) => { + if (typeof env.trace === "undefined" ? !env.wasm.trace : !env.trace) { + return; + } + TRACE_FUNC("END", extraMsg); + }; + } +}); + +// common/dist/esm/inference-session-impl.js +var InferenceSession; +var init_inference_session_impl = __esm({ + "common/dist/esm/inference-session-impl.js"() { + "use strict"; + init_backend_impl(); + init_tensor(); + init_trace(); + InferenceSession = class _InferenceSession { + constructor(handler) { + this.handler = handler; + } + async run(feeds, arg1, arg2) { + TRACE_FUNC_BEGIN(); + const fetches = {}; + let options = {}; + if (typeof feeds !== "object" || feeds === null || feeds instanceof Tensor2 || Array.isArray(feeds)) { + throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values."); + } + let isFetchesEmpty = true; + if (typeof arg1 === "object") { + if (arg1 === null) { + throw new TypeError("Unexpected argument[1]: cannot be null."); + } + if (arg1 instanceof Tensor2) { + throw new TypeError("'fetches' cannot be a Tensor"); + } + if (Array.isArray(arg1)) { + if (arg1.length === 0) { + throw new TypeError("'fetches' cannot be an empty array."); + } + isFetchesEmpty = false; + for (const name of arg1) { + if (typeof name !== "string") { + throw new TypeError("'fetches' must be a string array or an object."); + } + if (this.outputNames.indexOf(name) === -1) { + throw new RangeError(`'fetches' contains invalid output name: ${name}.`); + } + fetches[name] = null; + } + if (typeof arg2 === "object" && arg2 !== null) { + options = arg2; + } else if (typeof arg2 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else { + let isFetches = false; + const arg1Keys = Object.getOwnPropertyNames(arg1); + for (const name of this.outputNames) { + if (arg1Keys.indexOf(name) !== -1) { + const v = arg1[name]; + if (v === null || v instanceof Tensor2) { + isFetches = true; + isFetchesEmpty = false; + fetches[name] = v; + } + } + } + if (isFetches) { + if (typeof arg2 === "object" && arg2 !== null) { + options = arg2; + } else if (typeof arg2 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else { + options = arg1; + } + } + } else if (typeof arg1 !== "undefined") { + throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'."); + } + for (const name of this.inputNames) { + if (typeof feeds[name] === "undefined") { + throw new Error(`input '${name}' is missing in 'feeds'.`); + } + } + if (isFetchesEmpty) { + for (const name of this.outputNames) { + fetches[name] = null; + } + } + const results = await this.handler.run(feeds, fetches, options); + const returnValue = {}; + for (const key in results) { + if (Object.hasOwnProperty.call(results, key)) { + const result = results[key]; + if (result instanceof Tensor2) { + returnValue[key] = result; + } else { + returnValue[key] = new Tensor2(result.type, result.data, result.dims); + } + } + } + TRACE_FUNC_END(); + return returnValue; + } + async release() { + return this.handler.dispose(); + } + static async create(arg0, arg1, arg2, arg3) { + TRACE_FUNC_BEGIN(); + let filePathOrUint8Array; + let options = {}; + if (typeof arg0 === "string") { + filePathOrUint8Array = arg0; + if (typeof arg1 === "object" && arg1 !== null) { + options = arg1; + } else if (typeof arg1 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else if (arg0 instanceof Uint8Array) { + filePathOrUint8Array = arg0; + if (typeof arg1 === "object" && arg1 !== null) { + options = arg1; + } else if (typeof arg1 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else if (arg0 instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && arg0 instanceof SharedArrayBuffer) { + const buffer = arg0; + let byteOffset = 0; + let byteLength = arg0.byteLength; + if (typeof arg1 === "object" && arg1 !== null) { + options = arg1; + } else if (typeof arg1 === "number") { + byteOffset = arg1; + if (!Number.isSafeInteger(byteOffset)) { + throw new RangeError("'byteOffset' must be an integer."); + } + if (byteOffset < 0 || byteOffset >= buffer.byteLength) { + throw new RangeError(`'byteOffset' is out of range [0, ${buffer.byteLength}).`); + } + byteLength = arg0.byteLength - byteOffset; + if (typeof arg2 === "number") { + byteLength = arg2; + if (!Number.isSafeInteger(byteLength)) { + throw new RangeError("'byteLength' must be an integer."); + } + if (byteLength <= 0 || byteOffset + byteLength > buffer.byteLength) { + throw new RangeError(`'byteLength' is out of range (0, ${buffer.byteLength - byteOffset}].`); + } + if (typeof arg3 === "object" && arg3 !== null) { + options = arg3; + } else if (typeof arg3 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else if (typeof arg2 !== "undefined") { + throw new TypeError("'byteLength' must be a number."); + } + } else if (typeof arg1 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + filePathOrUint8Array = new Uint8Array(buffer, byteOffset, byteLength); + } else { + throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'."); + } + const [backend, optionsWithValidatedEPs] = await resolveBackendAndExecutionProviders(options); + const handler = await backend.createInferenceSessionHandler(filePathOrUint8Array, optionsWithValidatedEPs); + TRACE_FUNC_END(); + return new _InferenceSession(handler); + } + startProfiling() { + this.handler.startProfiling(); + } + endProfiling() { + this.handler.endProfiling(); + } + get inputNames() { + return this.handler.inputNames; + } + get outputNames() { + return this.handler.outputNames; + } + }; + } +}); + +// common/dist/esm/inference-session.js +var InferenceSession2; +var init_inference_session = __esm({ + "common/dist/esm/inference-session.js"() { + "use strict"; + init_inference_session_impl(); + InferenceSession2 = InferenceSession; + } +}); + +// common/dist/esm/tensor-conversion.js +var init_tensor_conversion = __esm({ + "common/dist/esm/tensor-conversion.js"() { + "use strict"; + } +}); + +// common/dist/esm/tensor-factory.js +var init_tensor_factory = __esm({ + "common/dist/esm/tensor-factory.js"() { + "use strict"; + } +}); + +// common/dist/esm/onnx-model.js +var init_onnx_model = __esm({ + "common/dist/esm/onnx-model.js"() { + "use strict"; + } +}); + +// common/dist/esm/onnx-value.js +var init_onnx_value = __esm({ + "common/dist/esm/onnx-value.js"() { + "use strict"; + } +}); + +// common/dist/esm/training-session-impl.js +var noBackendErrMsg, TrainingSession; +var init_training_session_impl = __esm({ + "common/dist/esm/training-session-impl.js"() { + "use strict"; + init_backend_impl(); + init_tensor(); + noBackendErrMsg = "Training backend could not be resolved. Make sure you're using the correct configuration & WebAssembly files."; + TrainingSession = class _TrainingSession { + constructor(handler, hasOptimizerModel, hasEvalModel) { + this.handler = handler; + this.hasOptimizerModel = hasOptimizerModel; + this.hasEvalModel = hasEvalModel; + } + get trainingInputNames() { + return this.handler.inputNames; + } + get trainingOutputNames() { + return this.handler.outputNames; + } + get evalInputNames() { + if (this.hasEvalModel) { + return this.handler.evalInputNames; + } else { + throw new Error("This training session has no evalModel loaded."); + } + } + get evalOutputNames() { + if (this.hasEvalModel) { + return this.handler.evalOutputNames; + } else { + throw new Error("This training session has no evalModel loaded."); + } + } + static async create(trainingOptions, sessionOptions) { + const evalModel = trainingOptions.evalModel || ""; + const optimizerModel = trainingOptions.optimizerModel || ""; + const options = sessionOptions || {}; + const [backend, optionsWithValidatedEPs] = await resolveBackendAndExecutionProviders(options); + if (backend.createTrainingSessionHandler) { + const handler = await backend.createTrainingSessionHandler(trainingOptions.checkpointState, trainingOptions.trainModel, evalModel, optimizerModel, optionsWithValidatedEPs); + return new _TrainingSession(handler, !!trainingOptions.optimizerModel, !!trainingOptions.evalModel); + } else { + throw new Error(noBackendErrMsg); + } + } + /** + * Helper function for runTrainStep and future runStep methods that handles the type-narrowing conversion from + * the given parameters to SessionHandler.FetchesType and RunOptions. + * + * @param inputNames the feeds object is checked that they contain all input names in the provided list of input + * names. + * @param outputNames the fetches object is checked that their keys match up with valid names in the list of output + * names. + * @param feeds the required input + * @param arg1 narrowed & converted into the SessionHandler.FetchesType or RunOptions object + * @param arg2 optional RunOptions object. + * @returns + */ + typeNarrowingForRunStep(inputNames, outputNames, feeds, arg1, arg2) { + const fetches = {}; + let options = {}; + if (typeof feeds !== "object" || feeds === null || feeds instanceof Tensor2 || Array.isArray(feeds)) { + throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values."); + } + let isFetchesEmpty = true; + if (typeof arg1 === "object") { + if (arg1 === null) { + throw new TypeError("Unexpected argument[1]: cannot be null."); + } + if (arg1 instanceof Tensor2) { + throw new TypeError("'fetches' cannot be a Tensor"); + } + if (Array.isArray(arg1)) { + if (arg1.length === 0) { + throw new TypeError("'fetches' cannot be an empty array."); + } + isFetchesEmpty = false; + for (const name of arg1) { + if (typeof name !== "string") { + throw new TypeError("'fetches' must be a string array or an object."); + } + if (outputNames.indexOf(name) === -1) { + throw new RangeError(`'fetches' contains invalid output name: ${name}.`); + } + fetches[name] = null; + } + if (typeof arg2 === "object" && arg2 !== null) { + options = arg2; + } else if (typeof arg2 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else { + let isFetches = false; + const arg1Keys = Object.getOwnPropertyNames(arg1); + for (const name of outputNames) { + if (arg1Keys.indexOf(name) !== -1) { + const v = arg1[name]; + if (v === null || v instanceof Tensor2) { + isFetches = true; + isFetchesEmpty = false; + fetches[name] = v; + } + } + } + if (isFetches) { + if (typeof arg2 === "object" && arg2 !== null) { + options = arg2; + } else if (typeof arg2 !== "undefined") { + throw new TypeError("'options' must be an object."); + } + } else { + options = arg1; + } + } + } else if (typeof arg1 !== "undefined") { + throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'."); + } + for (const name of inputNames) { + if (typeof feeds[name] === "undefined") { + throw new Error(`input '${name}' is missing in 'feeds'.`); + } + } + if (isFetchesEmpty) { + for (const name of outputNames) { + fetches[name] = null; + } + } + return [fetches, options]; + } + /** + * Helper method for runTrainStep and any other runStep methods. Takes the ReturnType result from the SessionHandler + * and changes it into a map of Tensors. + * + * @param results + * @returns + */ + convertHandlerReturnTypeToMapOfTensors(results) { + const returnValue = {}; + for (const key in results) { + if (Object.hasOwnProperty.call(results, key)) { + const result = results[key]; + if (result instanceof Tensor2) { + returnValue[key] = result; + } else { + returnValue[key] = new Tensor2(result.type, result.data, result.dims); + } + } + } + return returnValue; + } + async lazyResetGrad() { + await this.handler.lazyResetGrad(); + } + async runTrainStep(feeds, arg1, arg2) { + const [fetches, options] = this.typeNarrowingForRunStep(this.trainingInputNames, this.trainingOutputNames, feeds, arg1, arg2); + const results = await this.handler.runTrainStep(feeds, fetches, options); + return this.convertHandlerReturnTypeToMapOfTensors(results); + } + async runOptimizerStep(options) { + if (this.hasOptimizerModel) { + await this.handler.runOptimizerStep(options || {}); + } else { + throw new Error("This TrainingSession has no OptimizerModel loaded."); + } + } + async runEvalStep(feeds, arg1, arg2) { + if (this.hasEvalModel) { + const [fetches, options] = this.typeNarrowingForRunStep(this.evalInputNames, this.evalOutputNames, feeds, arg1, arg2); + const results = await this.handler.runEvalStep(feeds, fetches, options); + return this.convertHandlerReturnTypeToMapOfTensors(results); + } else { + throw new Error("This TrainingSession has no EvalModel loaded."); + } + } + async getParametersSize(trainableOnly = true) { + return this.handler.getParametersSize(trainableOnly); + } + async loadParametersBuffer(array, trainableOnly = true) { + const paramsSize = await this.getParametersSize(trainableOnly); + if (array.length !== 4 * paramsSize) { + throw new Error("Size of the buffer passed into loadParametersBuffer must match the number of parameters in the model. Please use getParametersSize method to check."); + } + return this.handler.loadParametersBuffer(array, trainableOnly); + } + async getContiguousParameters(trainableOnly = true) { + return this.handler.getContiguousParameters(trainableOnly); + } + async release() { + return this.handler.dispose(); + } + }; + } +}); + +// common/dist/esm/training-session.js +var TrainingSession2; +var init_training_session = __esm({ + "common/dist/esm/training-session.js"() { + "use strict"; + init_training_session_impl(); + TrainingSession2 = TrainingSession; + } +}); + +// common/dist/esm/index.js +var esm_exports = {}; +__export(esm_exports, { + InferenceSession: () => InferenceSession2, + TRACE: () => TRACE, + TRACE_FUNC_BEGIN: () => TRACE_FUNC_BEGIN, + TRACE_FUNC_END: () => TRACE_FUNC_END, + Tensor: () => Tensor2, + TrainingSession: () => TrainingSession2, + env: () => env2, + registerBackend: () => registerBackend +}); +var init_esm = __esm({ + "common/dist/esm/index.js"() { + "use strict"; + init_backend(); + init_env(); + init_inference_session(); + init_tensor(); + init_tensor_conversion(); + init_tensor_factory(); + init_trace(); + init_onnx_model(); + init_onnx_value(); + init_training_session(); + } +}); + +// nodejs-ignore:node:os +var cpus; +var init_node_os = __esm({ + "nodejs-ignore:node:os"() { + cpus = void 0; + } +}); + +// nodejs-ignore:node:path +var join; +var init_node_path = __esm({ + "nodejs-ignore:node:path"() { + join = void 0; + } +}); + +// nodejs-ignore:fs +var fs_exports = {}; +__export(fs_exports, { + createReadStream: () => createReadStream, + readFile: () => readFile, + readFileSync: () => readFileSync +}); +var readFile, readFileSync, createReadStream; +var init_fs = __esm({ + "nodejs-ignore:fs"() { + readFile = void 0; + readFileSync = void 0; + createReadStream = void 0; + } +}); + +// nodejs-ignore:path +var path_exports = {}; +__export(path_exports, { + join: () => join2 +}); +var join2; +var init_path = __esm({ + "nodejs-ignore:path"() { + join2 = void 0; + } +}); + +// web/lib/wasm/binding/ort-wasm-simd.jsep.js +var require_ort_wasm_simd_jsep = __commonJS({ + "web/lib/wasm/binding/ort-wasm-simd.jsep.js"(exports, module) { + "use strict"; + var ortWasm = (() => { + var _scriptDir = typeof document != "undefined" ? document.currentScript?.src : void 0; + if (typeof __filename != "undefined") + _scriptDir ||= __filename; + return function(moduleArg = {}) { + var g = moduleArg, aa, ba, readyPromise = new Promise((a, b) => { + aa = a; + ba = b; + }); + "use strict"; + g.mountExternalData = (a, b) => { + (g.Ph || (g.Ph = /* @__PURE__ */ new Map())).set(a, b); + }; + g.unmountExternalData = () => { + delete g.Ph; + }; + let da = () => { + const a = (c, d, e) => (...f) => { + const h = t, k = d?.(); + f = c(...f); + const l = d?.(); + k !== l && (c = l, e(k), d = e = null); + return t != h ? ca() : f; + }, b = (c) => async (...d) => { + try { + if (g.Oh) + throw Error("Session already started"); + const e = g.Oh = { gi: d[0], errors: [] }, f = await c(...d); + if (g.Oh !== e) + throw Error("Session mismatch"); + g.Uh?.flush(); + const h = e.errors; + if (0 < h.length) { + let k = await Promise.all(h); + k = k.filter((l) => l); + if (0 < k.length) + throw Error(k.join("\n")); + } + return f; + } finally { + g.Oh = null; + } + }; + g._OrtCreateSession = a( + g._OrtCreateSession, + () => g._OrtCreateSession, + (c) => g._OrtCreateSession = c + ); + g._OrtRun = b(a(g._OrtRun, () => g._OrtRun, (c) => g._OrtRun = c)); + g._OrtRunWithBinding = b(a(g._OrtRunWithBinding, () => g._OrtRunWithBinding, (c) => g._OrtRunWithBinding = c)); + g._OrtBindInput = a(g._OrtBindInput, () => g._OrtBindInput, (c) => g._OrtBindInput = c); + da = void 0; + }; + g.jsepInit = (a, b) => { + da?.(); + if ("webgpu" === a) { + [g.Uh, g.Zh, g.ci, g.Vh, g.bi, g.je, g.di, g.fi, g.$h, g.ai, g.ei] = b; + const c = g.Uh; + g.jsepRegisterBuffer = (d, e, f, h) => c.registerBuffer(d, e, f, h); + g.jsepGetBuffer = (d) => c.getBuffer(d); + g.jsepCreateDownloader = (d, e, f) => c.createDownloader(d, e, f); + g.jsepOnReleaseSession = (d) => { + c.onReleaseSession(d); + }; + g.jsepOnRunStart = (d) => c.onRunStart(d); + } + }; + var ea = Object.assign({}, g), fa = "./this.program", ha = (a, b) => { + throw b; + }, ia = "object" == typeof window, ja = "function" == typeof importScripts, ka = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, v = "", la, ma, na; + if (ka) { + var fs = (init_fs(), __toCommonJS(fs_exports)), oa = (init_path(), __toCommonJS(path_exports)); + v = ja ? oa.dirname(v) + "/" : __dirname + "/"; + la = (a, b) => { + a = pa(a) ? new URL(a) : oa.normalize(a); + return fs.readFileSync(a, b ? void 0 : "utf8"); + }; + na = (a) => { + a = la(a, true); + a.buffer || (a = new Uint8Array(a)); + return a; + }; + ma = (a, b, c, d = true) => { + a = pa(a) ? new URL(a) : oa.normalize(a); + fs.readFile(a, d ? void 0 : "utf8", (e, f) => { + e ? c(e) : b(d ? f.buffer : f); + }); + }; + !g.thisProgram && 1 < process.argv.length && (fa = process.argv[1].replace(/\\/g, "/")); + process.argv.slice(2); + ha = (a, b) => { + process.exitCode = a; + throw b; + }; + } else if (ia || ja) + ja ? v = self.location.href : "undefined" != typeof document && document.currentScript && (v = document.currentScript.src), _scriptDir && (v = _scriptDir), v.startsWith("blob:") ? v = "" : v = v.substr(0, v.replace(/[?#].*/, "").lastIndexOf("/") + 1), la = (a) => { + var b = new XMLHttpRequest(); + b.open("GET", a, false); + b.send(null); + return b.responseText; + }, ja && (na = (a) => { + var b = new XMLHttpRequest(); + b.open("GET", a, false); + b.responseType = "arraybuffer"; + b.send(null); + return new Uint8Array(b.response); + }), ma = (a, b, c) => { + var d = new XMLHttpRequest(); + d.open("GET", a, true); + d.responseType = "arraybuffer"; + d.onload = () => { + 200 == d.status || 0 == d.status && d.response ? b(d.response) : c(); + }; + d.onerror = c; + d.send(null); + }; + var qa = console.log.bind(console), w = console.error.bind(console); + Object.assign(g, ea); + ea = null; + var ra, x = false, sa, z, E, ta, ua, G, I, va, wa, xa, ya; + function za() { + var a = ra.buffer; + g.HEAP8 = z = new Int8Array(a); + g.HEAP16 = ta = new Int16Array(a); + g.HEAPU8 = E = new Uint8Array(a); + g.HEAPU16 = ua = new Uint16Array(a); + g.HEAP32 = G = new Int32Array(a); + g.HEAPU32 = I = new Uint32Array(a); + g.HEAPF32 = va = new Float32Array(a); + g.HEAPF64 = ya = new Float64Array(a); + g.HEAP64 = wa = new BigInt64Array(a); + g.HEAPU64 = xa = new BigUint64Array(a); + } + var Aa = [], Ba = [], Ca = [], Da = 0, Ea = null, Fa = null; + function Ga(a) { + a = "Aborted(" + a + ")"; + w(a); + x = true; + sa = 1; + a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info."); + ba(a); + throw a; + } + var Ha = (a) => a.startsWith("data:application/octet-stream;base64,"), pa = (a) => a.startsWith("file://"), Ia; + Ia = "ort-wasm-simd.wasm"; + if (!Ha(Ia)) { + var Ja = Ia; + Ia = g.locateFile ? g.locateFile(Ja, v) : v + Ja; + } + function Ka(a) { + if (na) + return na(a); + throw "both async and sync fetching of the wasm failed"; + } + function La(a) { + if (ia || ja) { + if ("function" == typeof fetch && !pa(a)) + return fetch(a, { credentials: "same-origin" }).then((b) => { + if (!b.ok) + throw `failed to load wasm binary file at '${a}'`; + return b.arrayBuffer(); + }).catch(() => Ka(a)); + if (ma) + return new Promise((b, c) => { + ma(a, (d) => b(new Uint8Array(d)), c); + }); + } + return Promise.resolve().then(() => Ka(a)); + } + function Ma(a, b, c) { + return La(a).then((d) => WebAssembly.instantiate(d, b)).then(c, (d) => { + w(`failed to asynchronously prepare wasm: ${d}`); + Ga(d); + }); + } + function Na(a, b) { + var c = Ia; + return "function" != typeof WebAssembly.instantiateStreaming || Ha(c) || pa(c) || ka || "function" != typeof fetch ? Ma(c, a, b) : fetch(c, { credentials: "same-origin" }).then((d) => WebAssembly.instantiateStreaming(d, a).then(b, function(e) { + w(`wasm streaming compile failed: ${e}`); + w("falling back to ArrayBuffer instantiation"); + return Ma(c, a, b); + })); + } + var Oa = { + 1261504: (a, b, c, d) => { + if ("undefined" == typeof g || !g.Ph) + return 1; + a = J(a >>> 0); + a.startsWith("./") && (a = a.substring(2)); + a = g.Ph.get(a); + if (!a) + return 2; + b >>>= 0; + c >>>= 0; + if (b + c > a.byteLength) + return 3; + try { + return E.set(a.subarray(b, b + c), d >>> 0 >>> 0), 0; + } catch { + return 4; + } + }, + 1262005: (a, b, c) => { + c = J(c); + const d = new Uint8Array(b); + d.set(E.subarray(a >>> 0, a + b >>> 0)); + "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node ? (init_fs(), __toCommonJS(fs_exports)).writeFileSync(c, d) : (a = new File([d], c, { type: "application/octet-stream" }), a = URL.createObjectURL(a), window.open(a, "_blank")); + }, + 1262513: () => { + g.$h(); + }, + 1262544: () => { + g.ai(); + }, + 1262573: () => { + g.ei(); + }, + 1262598: (a) => g.Zh(a), + 1262631: (a) => g.ci(a), + 1262663: (a, b, c) => { + g.Vh(a, b, c, true); + }, + 1262702: (a, b, c) => { + g.Vh(a, b, c); + }, + 1262735: (a) => { + g.je("Abs", a, void 0); + }, + 1262786: (a) => { + g.je("Neg", a, void 0); + }, + 1262837: (a) => { + g.je("Floor", a, void 0); + }, + 1262890: (a) => { + g.je("Ceil", a, void 0); + }, + 1262942: (a) => { + g.je("Reciprocal", a, void 0); + }, + 1263e3: (a) => { + g.je("Sqrt", a, void 0); + }, + 1263052: (a) => { + g.je("Exp", a, void 0); + }, + 1263103: (a) => { + g.je("Erf", a, void 0); + }, + 1263154: (a) => { + g.je("Sigmoid", a, void 0); + }, + 1263209: (a, b, c) => { + g.je("HardSigmoid", a, { alpha: b, beta: c }); + }, + 1263288: (a) => { + g.je("Log", a, void 0); + }, + 1263339: (a) => { + g.je("Sin", a, void 0); + }, + 1263390: (a) => { + g.je("Cos", a, void 0); + }, + 1263441: (a) => { + g.je("Tan", a, void 0); + }, + 1263492: (a) => { + g.je("Asin", a, void 0); + }, + 1263544: (a) => { + g.je("Acos", a, void 0); + }, + 1263596: (a) => { + g.je("Atan", a, void 0); + }, + 1263648: (a) => { + g.je("Sinh", a, void 0); + }, + 1263700: (a) => { + g.je("Cosh", a, void 0); + }, + 1263752: (a) => { + g.je("Asinh", a, void 0); + }, + 1263805: (a) => { + g.je("Acosh", a, void 0); + }, + 1263858: (a) => { + g.je("Atanh", a, void 0); + }, + 1263911: (a) => { + g.je("Tanh", a, void 0); + }, + 1263963: (a) => { + g.je("Not", a, void 0); + }, + 1264014: (a, b, c) => { + g.je("Clip", a, { min: b, max: c }); + }, + 1264083: (a) => { + g.je("Clip", a, void 0); + }, + 1264135: (a, b) => { + g.je("Elu", a, { alpha: b }); + }, + 1264193: (a) => { + g.je("Relu", a, void 0); + }, + 1264245: (a, b) => { + g.je("LeakyRelu", a, { alpha: b }); + }, + 1264309: (a, b) => { + g.je("ThresholdedRelu", a, { alpha: b }); + }, + 1264379: (a, b) => { + g.je("Cast", a, { to: b }); + }, + 1264437: (a) => { + g.je("Add", a, void 0); + }, + 1264488: (a) => { + g.je("Sub", a, void 0); + }, + 1264539: (a) => { + g.je("Mul", a, void 0); + }, + 1264590: (a) => { + g.je("Div", a, void 0); + }, + 1264641: (a) => { + g.je("Pow", a, void 0); + }, + 1264692: (a) => { + g.je("Equal", a, void 0); + }, + 1264745: (a) => { + g.je("Greater", a, void 0); + }, + 1264800: (a) => { + g.je("GreaterOrEqual", a, void 0); + }, + 1264862: (a) => { + g.je("Less", a, void 0); + }, + 1264914: (a) => { + g.je("LessOrEqual", a, void 0); + }, + 1264973: (a, b, c, d, e) => { + g.je("ReduceMean", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1265132: (a, b, c, d, e) => { + g.je("ReduceMax", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1265290: (a, b, c, d, e) => { + g.je("ReduceMin", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1265448: (a, b, c, d, e) => { + g.je("ReduceProd", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1265607: (a, b, c, d, e) => { + g.je("ReduceSum", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1265765: (a, b, c, d, e) => { + g.je("ReduceL1", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1265922: (a, b, c, d, e) => { + g.je("ReduceL2", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1266079: (a, b, c, d, e) => { + g.je("ReduceLogSum", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1266240: (a, b, c, d, e) => { + g.je("ReduceSumSquare", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1266404: (a, b, c, d, e) => { + g.je("ReduceLogSumExp", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1266568: (a) => { + g.je("Where", a, void 0); + }, + 1266621: (a, b, c) => { + g.je("Transpose", a, { perm: b ? Array.from(G.subarray(b >>> 0, c >>> 0)) : [] }); + }, + 1266729: (a, b, c, d) => { + g.je("DepthToSpace", a, { blocksize: b, mode: J(c), format: d ? "NHWC" : "NCHW" }); + }, + 1266862: (a, b, c, d) => { + g.je("DepthToSpace", a, { blocksize: b, mode: J(c), format: d ? "NHWC" : "NCHW" }); + }, + 1266995: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => { + g.je("ConvTranspose", a, { format: l ? "NHWC" : "NCHW", autoPad: b, dilations: [c], group: d, kernelShape: [e], pads: [f, h], strides: [k], wIsConst: () => !!z[m >>> 0], outputPadding: n ? Array.from(G.subarray(n >>> 0, q >>> 0)) : [], outputShape: r ? Array.from(G.subarray(r >>> 0, p >>> 0)) : [], activation: J(u) }); + }, + 1267396: (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => { + g.je("ConvTranspose", a, { format: k ? "NHWC" : "NCHW", autoPad: b, dilations: Array.from(G.subarray(c >>> 0, (c >>> 0) + 2 >>> 0)), group: d, kernelShape: Array.from(G.subarray(e >>> 0, (e >>> 0) + 2 >>> 0)), pads: Array.from(G.subarray(f >>> 0, (f >>> 0) + 4 >>> 0)), strides: Array.from(G.subarray(h >>> 0, (h >>> 0) + 2 >>> 0)), wIsConst: () => !!z[l >>> 0], outputPadding: m ? Array.from(G.subarray(m >>> 0, n >>> 0)) : [], outputShape: q ? Array.from(G.subarray(q >>> 0, r >>> 0)) : [], activation: J(p) }); + }, + 1267961: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => { + g.je("ConvTranspose", a, { format: l ? "NHWC" : "NCHW", autoPad: b, dilations: [c], group: d, kernelShape: [e], pads: [f, h], strides: [k], wIsConst: () => !!z[m >>> 0], outputPadding: n ? Array.from(G.subarray(n >>> 0, q >>> 0)) : [], outputShape: r ? Array.from(G.subarray(r >>> 0, p >>> 0)) : [], activation: J(u) }); + }, + 1268362: (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => { + g.je("ConvTranspose", a, { + format: k ? "NHWC" : "NCHW", + autoPad: b, + dilations: Array.from(G.subarray(c >>> 0, (c >>> 0) + 2 >>> 0)), + group: d, + kernelShape: Array.from(G.subarray(e >>> 0, (e >>> 0) + 2 >>> 0)), + pads: Array.from(G.subarray(f >>> 0, (f >>> 0) + 4 >>> 0)), + strides: Array.from(G.subarray(h >>> 0, (h >>> 0) + 2 >>> 0)), + wIsConst: () => !!z[l >>> 0], + outputPadding: m ? Array.from(G.subarray(m >>> 0, n >>> 0)) : [], + outputShape: q ? Array.from(G.subarray(q >>> 0, r >>> 0)) : [], + activation: J(p) + }); + }, + 1268927: (a, b) => { + g.je("GlobalAveragePool", a, { format: b ? "NHWC" : "NCHW" }); + }, + 1269018: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => { + g.je("AveragePool", a, { + format: y ? "NHWC" : "NCHW", + auto_pad: b, + ceil_mode: c, + count_include_pad: d, + storage_order: e, + dilations: [f, h], + kernel_shape: [k, l], + pads: [m, n, q, r], + strides: [p, u] + }); + }, + 1269302: (a, b) => { + g.je("GlobalAveragePool", a, { format: b ? "NHWC" : "NCHW" }); + }, + 1269393: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => { + g.je("AveragePool", a, { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: d, storage_order: e, dilations: [f, h], kernel_shape: [k, l], pads: [m, n, q, r], strides: [p, u] }); + }, + 1269677: (a, b) => { + g.je("GlobalMaxPool", a, { format: b ? "NHWC" : "NCHW" }); + }, + 1269764: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => { + g.je("MaxPool", a, { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: d, storage_order: e, dilations: [f, h], kernel_shape: [k, l], pads: [m, n, q, r], strides: [p, u] }); + }, + 1270044: (a, b) => { + g.je("GlobalMaxPool", a, { format: b ? "NHWC" : "NCHW" }); + }, + 1270131: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => { + g.je("MaxPool", a, { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: d, storage_order: e, dilations: [f, h], kernel_shape: [k, l], pads: [m, n, q, r], strides: [p, u] }); + }, + 1270411: (a, b, c, d, e) => { + g.je("Gemm", a, { alpha: b, beta: c, transA: d, transB: e }); + }, + 1270515: (a) => { + g.je("MatMul", a, void 0); + }, + 1270569: (a, b, c, d) => { + g.je("ArgMax", a, { keepDims: !!b, selectLastIndex: !!c, axis: d }); + }, + 1270677: (a, b, c, d) => { + g.je("ArgMin", a, { keepDims: !!b, selectLastIndex: !!c, axis: d }); + }, + 1270785: (a, b) => { + g.je("Softmax", a, { axis: b }); + }, + 1270848: (a, b) => { + g.je("Concat", a, { axis: b }); + }, + 1270908: (a, b, c, d, e) => { + g.je("Split", a, { axis: b, numOutputs: c, splitSizes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1271048: (a) => { + g.je("Expand", a, void 0); + }, + 1271102: (a, b) => { + g.je("Gather", a, { axis: Number(b) }); + }, + 1271173: (a, b) => { + g.je( + "GatherElements", + a, + { axis: Number(b) } + ); + }, + 1271252: (a, b, c, d, e, f, h, k, l, m, n) => { + g.je("Resize", a, { antialias: b, axes: c ? Array.from(G.subarray(c >>> 0, d >>> 0)) : [], coordinateTransformMode: J(e), cubicCoeffA: f, excludeOutside: h, extrapolationValue: k, keepAspectRatioPolicy: J(l), mode: J(m), nearestMode: J(n) }); + }, + 1271598: (a, b, c, d, e, f, h) => { + g.je("Slice", a, { starts: b ? Array.from(G.subarray(b >>> 0, c >>> 0)) : [], ends: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [], axes: f ? Array.from(G.subarray(f >>> 0, h >>> 0)) : [] }); + }, + 1271814: (a) => { + g.je("Tile", a, void 0); + }, + 1271866: (a, b, c, d) => { + g.je("LayerNormalization", a, { axis: b, epsilon: c, simplified: !!d }); + }, + 1271977: (a, b, c) => { + g.je("InstanceNormalization", a, { epsilon: b, format: c ? "NHWC" : "NCHW" }); + }, + 1272091: (a, b, c) => { + g.je("InstanceNormalization", a, { epsilon: b, format: c ? "NHWC" : "NCHW" }); + }, + 1272205: (a) => { + g.je("Range", a, void 0); + }, + 1272258: (a, b) => { + g.je("Einsum", a, { equation: J(b) }); + }, + 1272339: (a, b, c, d, e) => { + g.je("Pad", a, { mode: b, value: c, pads: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] }); + }, + 1272466: (a, b, c, d, e, f) => { + g.je("BatchNormalization", a, { + epsilon: b, + momentum: c, + spatial: !!e, + trainingMode: !!d, + format: f ? "NHWC" : "NCHW" + }); + }, + 1272635: (a, b, c, d, e, f) => { + g.je("BatchNormalization", a, { epsilon: b, momentum: c, spatial: !!e, trainingMode: !!d, format: f ? "NHWC" : "NCHW" }); + }, + 1272804: (a, b, c) => { + g.je("CumSum", a, { exclusive: Number(b), reverse: Number(c) }); + }, + 1272901: (a, b, c, d, e, f, h, k, l) => { + g.je("Attention", a, { numHeads: b, isUnidirectional: c, maskFilterValue: d, scale: e, doRotary: f, qkvHiddenSizes: h ? Array.from(G.subarray(Number(k) >>> 0, Number(k) + h >>> 0)) : [], pastPresentShareBuffer: !!l }); + }, + 1273173: (a) => { + g.je( + "BiasAdd", + a, + void 0 + ); + }, + 1273228: (a) => { + g.je("BiasSplitGelu", a, void 0); + }, + 1273289: (a) => { + g.je("FastGelu", a, void 0); + }, + 1273345: (a, b, c, d, e, f, h, k, l, m, n, q, r) => { + g.je("Conv", a, { format: l ? "NHWC" : "NCHW", auto_pad: b, dilations: [c], group: d, kernel_shape: [e], pads: f ? Array.from(G.subarray(f >>> 0, h >>> 0)) : [], strides: [k], w_is_const: () => !!z[m >>> 0], activation: J(n), activation_params: q ? Array.from(va.subarray(q >>> 0, r >>> 0)) : [] }); + }, + 1273715: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => { + g.je("Conv", a, { format: q ? "NHWC" : "NCHW", auto_pad: b, dilations: [c, d], group: e, kernel_shape: [ + f, + h + ], pads: k ? Array.from(G.subarray(k >>> 0, l >>> 0)) : [], strides: [m, n], w_is_const: () => !!z[r >>> 0], activation: J(p), activation_params: u ? Array.from(va.subarray(u >>> 0, y >>> 0)) : [] }); + }, + 1274106: (a) => { + g.je("Gelu", a, void 0); + }, + 1274158: (a, b, c, d, e, f) => { + g.je("MatMulNBits", a, { k: b, n: c, accuracyLevel: d, bits: e, blockSize: f }); + }, + 1274285: (a, b, c, d, e, f) => { + g.je("MultiHeadAttention", a, { numHeads: b, isUnidirectional: c, maskFilterValue: d, scale: e, doRotary: f }); + }, + 1274444: (a, b, c, d, e) => { + g.je("RotaryEmbedding", a, { + interleaved: !!b, + numHeads: c, + rotaryEmbeddingDim: d, + scale: e + }); + }, + 1274583: (a, b, c) => { + g.je("SkipLayerNormalization", a, { epsilon: b, simplified: !!c }); + }, + 1274685: (a, b, c) => { + g.je("SkipLayerNormalization", a, { epsilon: b, simplified: !!c }); + }, + 1274787: (a, b, c, d) => { + g.je("LayerNormalization", a, { axis: b, epsilon: c, simplified: !!d }); + }, + 1274898: (a) => { + g.di(a); + }, + 1274932: (a, b) => g.fi(a, b, g.Oh.gi, g.Oh.errors) + }; + function Pa(a) { + this.name = "ExitStatus"; + this.message = `Program terminated with exit(${a})`; + this.status = a; + } + var Qa = [], Ra = 0, L = 0; + class Sa { + constructor(a) { + this.Nh = a; + this.Ih = a - 24; + } + } + var Za = (a) => { + var b = L; + if (!b) + return Ta(0), 0; + var c = new Sa(b); + I[c.Ih + 16 >>> 2 >>> 0] = b; + var d = I[c.Ih + 4 >>> 2 >>> 0]; + if (!d) + return Ta(0), b; + for (var e in a) { + var f = a[e]; + if (0 === f || f === d) + break; + if (Ua(f, d, c.Ih + 16)) + return Ta(f), b; + } + Ta(d); + return b; + }, $a = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, ab = (a, b, c) => { + b >>>= 0; + var d = b + c; + for (c = b; a[c] && !(c >= d); ) + ++c; + if (16 < c - b && a.buffer && $a) + return $a.decode(a.subarray(b, c)); + for (d = ""; b < c; ) { + var e = a[b++]; + if (e & 128) { + var f = a[b++] & 63; + if (192 == (e & 224)) + d += String.fromCharCode((e & 31) << 6 | f); + else { + var h = a[b++] & 63; + e = 224 == (e & 240) ? (e & 15) << 12 | f << 6 | h : (e & 7) << 18 | f << 12 | h << 6 | a[b++] & 63; + 65536 > e ? d += String.fromCharCode(e) : (e -= 65536, d += String.fromCharCode(55296 | e >> 10, 56320 | e & 1023)); + } + } else + d += String.fromCharCode(e); + } + return d; + }, J = (a, b) => (a >>>= 0) ? ab(E, a, b) : "", bb = (a) => { + for (var b = 0, c = 0; c < a.length; ++c) { + var d = a.charCodeAt(c); + 127 >= d ? b++ : 2047 >= d ? b += 2 : 55296 <= d && 57343 >= d ? (b += 4, ++c) : b += 3; + } + return b; + }, M = (a, b, c, d) => { + c >>>= 0; + if (!(0 < d)) + return 0; + var e = c; + d = c + d - 1; + for (var f = 0; f < a.length; ++f) { + var h = a.charCodeAt(f); + if (55296 <= h && 57343 >= h) { + var k = a.charCodeAt(++f); + h = 65536 + ((h & 1023) << 10) | k & 1023; + } + if (127 >= h) { + if (c >= d) + break; + b[c++ >>> 0] = h; + } else { + if (2047 >= h) { + if (c + 1 >= d) + break; + b[c++ >>> 0] = 192 | h >> 6; + } else { + if (65535 >= h) { + if (c + 2 >= d) + break; + b[c++ >>> 0] = 224 | h >> 12; + } else { + if (c + 3 >= d) + break; + b[c++ >>> 0] = 240 | h >> 18; + b[c++ >>> 0] = 128 | h >> 12 & 63; + } + b[c++ >>> 0] = 128 | h >> 6 & 63; + } + b[c++ >>> 0] = 128 | h & 63; + } + } + b[c >>> 0] = 0; + return c - e; + }, cb, N = (a) => { + for (var b = ""; E[a >>> 0]; ) + b += cb[E[a++ >>> 0]]; + return b; + }, db = {}, eb = {}, fb = {}, O; + function gb(a, b, c = {}) { + var d = b.name; + if (!a) + throw new O(`type "${d}" must have a positive integer typeid pointer`); + if (eb.hasOwnProperty(a)) { + if (c.Xh) + return; + throw new O(`Cannot register type '${d}' twice`); + } + eb[a] = b; + delete fb[a]; + db.hasOwnProperty(a) && (b = db[a], delete db[a], b.forEach((e) => e())); + } + function P(a, b, c = {}) { + if (!("argPackAdvance" in b)) + throw new TypeError("registerType registeredInstance requires argPackAdvance"); + return gb(a, b, c); + } + var hb = (a, b, c) => { + switch (b) { + case 1: + return c ? (d) => z[d >>> 0] : (d) => E[d >>> 0]; + case 2: + return c ? (d) => ta[d >>> 1 >>> 0] : (d) => ua[d >>> 1 >>> 0]; + case 4: + return c ? (d) => G[d >>> 2 >>> 0] : (d) => I[d >>> 2 >>> 0]; + case 8: + return c ? (d) => wa[d >>> 3] : (d) => xa[d >>> 3]; + default: + throw new TypeError(`invalid integer width (${b}): ${a}`); + } + }, ib = [], Q = []; + function jb(a) { + a >>>= 0; + 9 < a && 0 === --Q[a + 1] && (Q[a] = void 0, ib.push(a)); + } + var R = (a) => { + if (!a) + throw new O("Cannot use deleted val. handle = " + a); + return Q[a]; + }, S = (a) => { + switch (a) { + case void 0: + return 2; + case null: + return 4; + case true: + return 6; + case false: + return 8; + default: + const b = ib.pop() || Q.length; + Q[b] = a; + Q[b + 1] = 1; + return b; + } + }; + function kb(a) { + return this.fromWireType(I[a >>> 2 >>> 0]); + } + var lb = { name: "emscripten::val", fromWireType: (a) => { + var b = R(a); + jb(a); + return b; + }, toWireType: (a, b) => S(b), argPackAdvance: 8, readValueFromPointer: kb, Mh: null }, mb = (a, b) => { + switch (b) { + case 4: + return function(c) { + return this.fromWireType(va[c >>> 2 >>> 0]); + }; + case 8: + return function(c) { + return this.fromWireType(ya[c >>> 3 >>> 0]); + }; + default: + throw new TypeError(`invalid float width (${b}): ${a}`); + } + }, nb = "undefined" != typeof TextDecoder ? new TextDecoder("utf-16le") : void 0, ob = (a, b) => { + var c = a >> 1; + for (var d = c + b / 2; !(c >= d) && ua[c >>> 0]; ) + ++c; + c <<= 1; + if (32 < c - a && nb) + return nb.decode(E.subarray(a >>> 0, c >>> 0)); + c = ""; + for (d = 0; !(d >= b / 2); ++d) { + var e = ta[a + 2 * d >>> 1 >>> 0]; + if (0 == e) + break; + c += String.fromCharCode(e); + } + return c; + }, pb = (a, b, c) => { + c ??= 2147483647; + if (2 > c) + return 0; + c -= 2; + var d = b; + c = c < 2 * a.length ? c / 2 : a.length; + for (var e = 0; e < c; ++e) + ta[b >>> 1 >>> 0] = a.charCodeAt(e), b += 2; + ta[b >>> 1 >>> 0] = 0; + return b - d; + }, qb = (a) => 2 * a.length, rb = (a, b) => { + for (var c = 0, d = ""; !(c >= b / 4); ) { + var e = G[a + 4 * c >>> 2 >>> 0]; + if (0 == e) + break; + ++c; + 65536 <= e ? (e -= 65536, d += String.fromCharCode(55296 | e >> 10, 56320 | e & 1023)) : d += String.fromCharCode(e); + } + return d; + }, sb = (a, b, c) => { + b >>>= 0; + c ??= 2147483647; + if (4 > c) + return 0; + var d = b; + c = d + c - 4; + for (var e = 0; e < a.length; ++e) { + var f = a.charCodeAt(e); + if (55296 <= f && 57343 >= f) { + var h = a.charCodeAt(++e); + f = 65536 + ((f & 1023) << 10) | h & 1023; + } + G[b >>> 2 >>> 0] = f; + b += 4; + if (b + 4 > c) + break; + } + G[b >>> 2 >>> 0] = 0; + return b - d; + }, tb = (a) => { + for (var b = 0, c = 0; c < a.length; ++c) { + var d = a.charCodeAt(c); + 55296 <= d && 57343 >= d && ++c; + b += 4; + } + return b; + }, vb = (a, b) => { + var c = eb[a]; + if (void 0 === c) + throw a = ub(a), c = N(a), T(a), new O(`${b} has unknown type ${c}`); + return c; + }, wb = (a, b, c) => { + var d = []; + a = a.toWireType(d, c); + d.length && (I[b >>> 2 >>> 0] = S(d)); + return a; + }, xb = (a) => { + try { + a(); + } catch (b) { + Ga(b); + } + }, yb = (a) => { + if (!x) + try { + a(); + try { + sa = sa = a = sa, g.onExit?.(a), x = true, ha(a, new Pa(a)); + } catch (b) { + b instanceof Pa || "unwind" == b || ha(1, b); + } + } catch (b) { + b instanceof Pa || "unwind" == b || ha(1, b); + } + }; + function zb() { + var a = U, b = {}; + for (let [c, d] of Object.entries(a)) + b[c] = "function" == typeof d ? (...e) => { + Ab.push(c); + try { + return d(...e); + } finally { + x || (Ab.pop(), t && 1 === V && 0 === Ab.length && (V = 0, xb(Bb), "undefined" != typeof Fibers && Fibers.mi())); + } + } : d; + return b; + } + var V = 0, t = null, Cb = 0, Ab = [], Db = {}, Eb = {}, Fb = 0, Gb = null, Hb = []; + function ca() { + return new Promise((a, b) => { + Gb = { resolve: a, reject: b }; + }); + } + function Ib() { + var a = Jb(65548), b = a + 12; + I[a >>> 2 >>> 0] = b; + I[a + 4 >>> 2 >>> 0] = b + 65536; + b = Ab[0]; + var c = Db[b]; + void 0 === c && (c = Fb++, Db[b] = c, Eb[c] = b); + G[a + 8 >>> 2 >>> 0] = c; + return a; + } + function Kb(a) { + if (!x) { + if (0 === V) { + var b = false, c = false; + a((d = 0) => { + if (!x && (Cb = d, b = true, c)) { + V = 2; + xb(() => Lb(t)); + "undefined" != typeof Browser && Browser.Sh.Wh && Browser.Sh.resume(); + d = false; + try { + var e = (0, U[Eb[G[t + 8 >>> 2 >>> 0]]])(); + } catch (k) { + e = k, d = true; + } + var f = false; + if (!t) { + var h = Gb; + h && (Gb = null, (d ? h.reject : h.resolve)(e), f = true); + } + if (d && !f) + throw e; + } + }); + c = true; + b || (V = 1, t = Ib(), "undefined" != typeof Browser && Browser.Sh.Wh && Browser.Sh.pause(), xb(() => Mb(t))); + } else + 2 === V ? (V = 0, xb(Nb), T(t), t = null, Hb.forEach(yb)) : Ga(`invalid state: ${V}`); + return Cb; + } + } + function Ob(a) { + return Kb((b) => { + a().then(b); + }); + } + var Pb = [], Qb = {}, Rb = (a) => { + var b = Qb[a]; + return void 0 === b ? N(a) : b; + }, Sb = () => "object" == typeof globalThis ? globalThis : Function("return this")(), Tb = (a) => { + var b = Pb.length; + Pb.push(a); + return b; + }, Ub = (a, b) => { + for (var c = Array(a), d = 0; d < a; ++d) + c[d] = vb(I[b + 4 * d >>> 2 >>> 0], "parameter " + d); + return c; + }, Vb = (a, b) => Object.defineProperty(b, "name", { value: a }); + function Wb(a) { + var b = Function; + if (!(b instanceof Function)) + throw new TypeError(`new_ called with constructor type ${typeof b} which is not a function`); + var c = Vb(b.name || "unknownFunctionName", function() { + }); + c.prototype = b.prototype; + c = new c(); + a = b.apply(c, a); + return a instanceof Object ? a : c; + } + var W = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400), Xb = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], Yb = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], Zb = [], $b = (a, b) => { + Zb.length = 0; + for (var c; c = E[a++ >>> 0]; ) { + var d = 105 != c; + d &= 112 != c; + b += d && b % 8 ? 4 : 0; + Zb.push(112 == c ? I[b >>> 2 >>> 0] : 106 == c ? wa[b >>> 3] : 105 == c ? G[b >>> 2 >>> 0] : ya[b >>> 3 >>> 0]); + b += d ? 8 : 4; + } + return Zb; + }, ac = {}, cc = () => { + if (!bc) { + var a = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", _: fa || "./this.program" }, b; + for (b in ac) + void 0 === ac[b] ? delete a[b] : a[b] = ac[b]; + var c = []; + for (b in a) + c.push(`${b}=${a[b]}`); + bc = c; + } + return bc; + }, bc, dc = [null, [], []], ec = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], fc = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + function gc(a) { + var b = Array(bb(a) + 1); + M(a, b, 0, b.length); + return b; + } + function hc(a, b, c, d) { + function e(p, u, y) { + for (p = "number" == typeof p ? p.toString() : p || ""; p.length < u; ) + p = y[0] + p; + return p; + } + function f(p, u) { + return e(p, u, "0"); + } + function h(p, u) { + function y(B) { + return 0 > B ? -1 : 0 < B ? 1 : 0; + } + var A; + 0 === (A = y(p.getFullYear() - u.getFullYear())) && 0 === (A = y(p.getMonth() - u.getMonth())) && (A = y(p.getDate() - u.getDate())); + return A; + } + function k(p) { + switch (p.getDay()) { + case 0: + return new Date(p.getFullYear() - 1, 11, 29); + case 1: + return p; + case 2: + return new Date(p.getFullYear(), 0, 3); + case 3: + return new Date( + p.getFullYear(), + 0, + 2 + ); + case 4: + return new Date(p.getFullYear(), 0, 1); + case 5: + return new Date(p.getFullYear() - 1, 11, 31); + case 6: + return new Date(p.getFullYear() - 1, 11, 30); + } + } + function l(p) { + var u = p.Kh; + for (p = new Date(new Date(p.Lh + 1900, 0, 1).getTime()); 0 < u; ) { + var y = p.getMonth(), A = (W(p.getFullYear()) ? ec : fc)[y]; + if (u > A - p.getDate()) + u -= A - p.getDate() + 1, p.setDate(1), 11 > y ? p.setMonth(y + 1) : (p.setMonth(0), p.setFullYear(p.getFullYear() + 1)); + else { + p.setDate(p.getDate() + u); + break; + } + } + y = new Date(p.getFullYear() + 1, 0, 4); + u = k(new Date( + p.getFullYear(), + 0, + 4 + )); + y = k(y); + return 0 >= h(u, p) ? 0 >= h(y, p) ? p.getFullYear() + 1 : p.getFullYear() : p.getFullYear() - 1; + } + a >>>= 0; + b >>>= 0; + c >>>= 0; + d >>>= 0; + var m = I[d + 40 >>> 2 >>> 0]; + d = { ji: G[d >>> 2 >>> 0], ii: G[d + 4 >>> 2 >>> 0], Qh: G[d + 8 >>> 2 >>> 0], Th: G[d + 12 >>> 2 >>> 0], Rh: G[d + 16 >>> 2 >>> 0], Lh: G[d + 20 >>> 2 >>> 0], Jh: G[d + 24 >>> 2 >>> 0], Kh: G[d + 28 >>> 2 >>> 0], li: G[d + 32 >>> 2 >>> 0], hi: G[d + 36 >>> 2 >>> 0], ki: m ? J(m) : "" }; + c = J(c); + m = { + "%c": "%a %b %d %H:%M:%S %Y", + "%D": "%m/%d/%y", + "%F": "%Y-%m-%d", + "%h": "%b", + "%r": "%I:%M:%S %p", + "%R": "%H:%M", + "%T": "%H:%M:%S", + "%x": "%m/%d/%y", + "%X": "%H:%M:%S", + "%Ec": "%c", + "%EC": "%C", + "%Ex": "%m/%d/%y", + "%EX": "%H:%M:%S", + "%Ey": "%y", + "%EY": "%Y", + "%Od": "%d", + "%Oe": "%e", + "%OH": "%H", + "%OI": "%I", + "%Om": "%m", + "%OM": "%M", + "%OS": "%S", + "%Ou": "%u", + "%OU": "%U", + "%OV": "%V", + "%Ow": "%w", + "%OW": "%W", + "%Oy": "%y" + }; + for (var n in m) + c = c.replace(new RegExp(n, "g"), m[n]); + var q = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), r = "January February March April May June July August September October November December".split(" "); + m = { "%a": (p) => q[p.Jh].substring(0, 3), "%A": (p) => q[p.Jh], "%b": (p) => r[p.Rh].substring(0, 3), "%B": (p) => r[p.Rh], "%C": (p) => f((p.Lh + 1900) / 100 | 0, 2), "%d": (p) => f(p.Th, 2), "%e": (p) => e(p.Th, 2, " "), "%g": (p) => l(p).toString().substring(2), "%G": l, "%H": (p) => f(p.Qh, 2), "%I": (p) => { + p = p.Qh; + 0 == p ? p = 12 : 12 < p && (p -= 12); + return f(p, 2); + }, "%j": (p) => { + for (var u = 0, y = 0; y <= p.Rh - 1; u += (W(p.Lh + 1900) ? ec : fc)[y++]) + ; + return f(p.Th + u, 3); + }, "%m": (p) => f(p.Rh + 1, 2), "%M": (p) => f(p.ii, 2), "%n": () => "\n", "%p": (p) => 0 <= p.Qh && 12 > p.Qh ? "AM" : "PM", "%S": (p) => f(p.ji, 2), "%t": () => " ", "%u": (p) => p.Jh || 7, "%U": (p) => f(Math.floor((p.Kh + 7 - p.Jh) / 7), 2), "%V": (p) => { + var u = Math.floor((p.Kh + 7 - (p.Jh + 6) % 7) / 7); + 2 >= (p.Jh + 371 - p.Kh - 2) % 7 && u++; + if (u) + 53 == u && (y = (p.Jh + 371 - p.Kh) % 7, 4 == y || 3 == y && W(p.Lh) || (u = 1)); + else { + u = 52; + var y = (p.Jh + 7 - p.Kh - 1) % 7; + (4 == y || 5 == y && W(p.Lh % 400 - 1)) && u++; + } + return f(u, 2); + }, "%w": (p) => p.Jh, "%W": (p) => f(Math.floor((p.Kh + 7 - (p.Jh + 6) % 7) / 7), 2), "%y": (p) => (p.Lh + 1900).toString().substring(2), "%Y": (p) => p.Lh + 1900, "%z": (p) => { + p = p.hi; + var u = 0 <= p; + p = Math.abs(p) / 60; + return (u ? "+" : "-") + String("0000" + (p / 60 * 100 + p % 60)).slice(-4); + }, "%Z": (p) => p.ki, "%%": () => "%" }; + c = c.replace(/%%/g, "\0\0"); + for (n in m) + c.includes(n) && (c = c.replace(new RegExp(n, "g"), m[n](d))); + c = c.replace(/\0\0/g, "%"); + n = gc(c); + if (n.length > b) + return 0; + z.set(n, a >>> 0); + return n.length - 1; + } + for (var ic = Array(256), jc = 0; 256 > jc; ++jc) + ic[jc] = String.fromCharCode(jc); + cb = ic; + O = g.BindingError = class extends Error { + constructor(a) { + super(a); + this.name = "BindingError"; + } + }; + g.InternalError = class extends Error { + constructor(a) { + super(a); + this.name = "InternalError"; + } + }; + Q.push(0, 1, void 0, 1, null, 1, true, 1, false, 1); + g.count_emval_handles = () => Q.length / 2 - 5 - ib.length; + var Cf = { + bd: function(a, b, c) { + return Ob(async () => { + await g.bi(a, b, c); + }); + }, + v: function(a) { + a = new Sa(a >>> 0); + 0 == z[a.Ih + 12 >>> 0] && (z[a.Ih + 12 >>> 0] = 1, Ra--); + z[a.Ih + 13 >>> 0] = 0; + Qa.push(a); + kc(a.Nh); + if (lc(I[a.Ih + 4 >>> 2 >>> 0])) + a = I[a.Nh >>> 2 >>> 0]; + else { + var b = I[a.Ih + 16 >>> 2 >>> 0]; + a = 0 !== b ? b : a.Nh; + } + return a; + }, + N: () => { + X(0, 0); + var a = Qa.pop(); + mc(a.Nh); + L = 0; + }, + a: function() { + return Za([]); + }, + m: function(a) { + return Za([a >>> 0]); + }, + x: function(a, b) { + return Za([a >>> 0, b >>> 0]); + }, + q: function(a, b, c) { + return Za([a >>> 0, b >>> 0, c >>> 0]); + }, + Bb: () => { + var a = Qa.pop(); + a || Ga("no exception to throw"); + var b = a.Nh; + 0 == z[a.Ih + 13 >>> 0] && (Qa.push(a), z[a.Ih + 13 >>> 0] = 1, z[a.Ih + 12 >>> 0] = 0, Ra++); + L = b; + throw L; + }, + s: function(a, b, c) { + a >>>= 0; + var d = new Sa(a); + I[d.Ih + 16 >>> 2 >>> 0] = 0; + I[d.Ih + 4 >>> 2 >>> 0] = b >>> 0; + I[d.Ih + 8 >>> 2 >>> 0] = c >>> 0; + L = a; + Ra++; + throw L; + }, + fb: () => Ra, + g: function(a) { + L ||= a >>> 0; + throw L; + }, + Cb: function() { + return 0; + }, + $c: function() { + }, + Mc: function() { + }, + Oc: function() { + }, + Gc: function() { + return 0; + }, + Zc: function() { + }, + Uc: function() { + }, + Yc: function() { + }, + _b: function() { + }, + Nc: function() { + }, + Kc: function() { + }, + _c: function() { + }, + Lc: function() { + }, + Wb: function(a, b, c) { + b = N(b >>> 0); + P(a >>> 0, { name: b, fromWireType: (d) => d, toWireType: function(d, e) { + if ("bigint" != typeof e && "number" != typeof e) + throw null === e ? e = "null" : (d = typeof e, e = "object" === d || "array" === d || "function" === d ? e.toString() : "" + e), new TypeError(`Cannot convert "${e}" to ${this.name}`); + "number" == typeof e && (e = BigInt(e)); + return e; + }, argPackAdvance: 8, readValueFromPointer: hb(b, c >>> 0, -1 == b.indexOf("u")), Mh: null }); + }, + Ec: function(a, b, c, d) { + b = N(b >>> 0); + P(a >>> 0, { name: b, fromWireType: function(e) { + return !!e; + }, toWireType: function(e, f) { + return f ? c : d; + }, argPackAdvance: 8, readValueFromPointer: function(e) { + return this.fromWireType(E[e >>> 0]); + }, Mh: null }); + }, + Cc: function(a) { + return P(a >>> 0, lb); + }, + Vb: function(a, b, c) { + b = N(b >>> 0); + P(a >>> 0, { name: b, fromWireType: (d) => d, toWireType: (d, e) => e, argPackAdvance: 8, readValueFromPointer: mb(b, c >>> 0), Mh: null }); + }, + Aa: function(a, b, c, d, e) { + a >>>= 0; + c >>>= 0; + b = N(b >>> 0); + -1 === e && (e = 4294967295); + e = (k) => k; + if (0 === d) { + var f = 32 - 8 * c; + e = (k) => k << f >>> f; + } + var h = b.includes("unsigned") ? function(k, l) { + return l >>> 0; + } : function(k, l) { + return l; + }; + P(a, { + name: b, + fromWireType: e, + toWireType: h, + argPackAdvance: 8, + readValueFromPointer: hb(b, c, 0 !== d), + Mh: null + }); + }, + _: function(a, b, c) { + function d(f) { + return new e(z.buffer, I[f + 4 >>> 2 >>> 0], I[f >>> 2 >>> 0]); + } + var e = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array, BigInt64Array, BigUint64Array][b]; + c = N(c >>> 0); + P(a >>> 0, { name: c, fromWireType: d, argPackAdvance: 8, readValueFromPointer: d }, { Xh: true }); + }, + Xb: function(a, b) { + b = N(b >>> 0); + var c = "std::string" === b; + P(a >>> 0, { name: b, fromWireType: function(d) { + var e = I[d >>> 2 >>> 0], f = d + 4; + if (c) + for (var h = f, k = 0; k <= e; ++k) { + var l = f + k; + if (k == e || 0 == E[l >>> 0]) { + h = J(h, l - h); + if (void 0 === m) + var m = h; + else + m += String.fromCharCode(0), m += h; + h = l + 1; + } + } + else { + m = Array(e); + for (k = 0; k < e; ++k) + m[k] = String.fromCharCode(E[f + k >>> 0]); + m = m.join(""); + } + T(d); + return m; + }, toWireType: function(d, e) { + e instanceof ArrayBuffer && (e = new Uint8Array(e)); + var f = "string" == typeof e; + if (!(f || e instanceof Uint8Array || e instanceof Uint8ClampedArray || e instanceof Int8Array)) + throw new O("Cannot pass non-string to std::string"); + var h = c && f ? bb(e) : e.length; + var k = Jb(4 + h + 1), l = k + 4; + I[k >>> 2 >>> 0] = h; + if (c && f) + M(e, E, l, h + 1); + else if (f) + for (f = 0; f < h; ++f) { + var m = e.charCodeAt(f); + if (255 < m) + throw T(l), new O("String has UTF-16 code units that do not fit in 8 bits"); + E[l + f >>> 0] = m; + } + else + for (f = 0; f < h; ++f) + E[l + f >>> 0] = e[f]; + null !== d && d.push(T, k); + return k; + }, argPackAdvance: 8, readValueFromPointer: kb, Mh(d) { + T(d); + } }); + }, + Ab: function(a, b, c) { + b >>>= 0; + c >>>= 0; + c = N(c); + if (2 === b) { + var d = ob; + var e = pb; + var f = qb; + var h = (k) => ua[k >>> 1 >>> 0]; + } else + 4 === b && (d = rb, e = sb, f = tb, h = (k) => I[k >>> 2 >>> 0]); + P(a >>> 0, { + name: c, + fromWireType: (k) => { + for (var l = I[k >>> 2 >>> 0], m, n = k + 4, q = 0; q <= l; ++q) { + var r = k + 4 + q * b; + if (q == l || 0 == h(r)) + n = d(n, r - n), void 0 === m ? m = n : (m += String.fromCharCode(0), m += n), n = r + b; + } + T(k); + return m; + }, + toWireType: (k, l) => { + if ("string" != typeof l) + throw new O(`Cannot pass non-string to C++ string type ${c}`); + var m = f(l), n = Jb(4 + m + b); + I[n >>> 2 >>> 0] = m / b; + e(l, n + 4, m + b); + null !== k && k.push(T, n); + return n; + }, + argPackAdvance: 8, + readValueFromPointer: kb, + Mh(k) { + T(k); + } + }); + }, + Fc: function(a, b) { + b = N(b >>> 0); + P(a >>> 0, { Yh: true, name: b, argPackAdvance: 0, fromWireType: () => { + }, toWireType: () => { + } }); + }, + ad: () => 1, + kd: function(a, b, c) { + b >>>= 0; + c >>>= 0; + a = R(a >>> 0); + b = vb(b, "emval::as"); + return wb(b, c, a); + }, + Cd: function(a) { + a >>>= 0; + return Ob(() => { + a = R(a); + return a.then(S); + }); + }, + ud: function(a, b, c, d) { + c >>>= 0; + d >>>= 0; + a = Pb[a >>> 0]; + b = R(b >>> 0); + return a(null, b, c, d); + }, + ia: function(a, b, c, d, e) { + c >>>= 0; + d >>>= 0; + e >>>= 0; + a = Pb[a >>> 0]; + b = R(b >>> 0); + c = Rb(c); + return a(b, b[c], d, e); + }, + Bc: jb, + qd: function(a, b) { + b >>>= 0; + a = R(a >>> 0); + b = R(b); + return a == b; + }, + zd: function(a) { + a >>>= 0; + if (0 === a) + return S(Sb()); + a = Rb(a); + return S(Sb()[a]); + }, + ha: function(a, b, c) { + b = Ub(a, b >>> 0); + var d = b.shift(); + a--; + var e = "return function (obj, func, destructorsRef, args) {\n", f = 0, h = []; + 0 === c && h.push("obj"); + for (var k = ["retType"], l = [d], m = 0; m < a; ++m) + h.push("arg" + m), k.push("argType" + m), l.push(b[m]), e += ` var arg${m} = argType${m}.readValueFromPointer(args${f ? "+" + f : ""}); +`, f += b[m].argPackAdvance; + e += ` var rv = ${1 === c ? "new func" : "func.call"}(${h.join(", ")}); +`; + d.Yh || (k.push("emval_returnValue"), l.push(wb), e += " return emval_returnValue(retType, destructorsRef, rv);\n"); + k.push(e + "};\n"); + a = Wb(k)(...l); + c = `methodCaller<(${b.map((n) => n.name).join(", ")}) => ${d.name}>`; + return Tb(Vb(c, a)); + }, + yd: function(a, b) { + b >>>= 0; + a = R(a >>> 0); + b = R(b); + return S(a[b]); + }, + ba: function(a) { + a >>>= 0; + 9 < a && (Q[a + 1] += 1); + }, + md: function() { + return S([]); + }, + hd: function(a) { + a = R(a >>> 0); + for (var b = Array(a.length), c = 0; c < a.length; c++) + b[c] = a[c]; + return S(b); + }, + U: function(a) { + return S(Rb(a >>> 0)); + }, + Xa: function() { + return S({}); + }, + vd: function(a) { + a >>>= 0; + for (var b = R(a); b.length; ) { + var c = b.pop(); + b.pop()(c); + } + jb(a); + }, + sd: function(a, b, c) { + b >>>= 0; + c >>>= 0; + a = R(a >>> 0); + b = R(b); + c = R(c); + a[b] = c; + }, + zb: function(a, b) { + b >>>= 0; + a = vb(a >>> 0, "_emval_take_value"); + a = a.readValueFromPointer(b); + return S(a); + }, + Rc: function(a, b) { + a = -9007199254740992 > a || 9007199254740992 < a ? NaN : Number(a); + b >>>= 0; + a = new Date(1e3 * a); + G[b >>> 2 >>> 0] = a.getUTCSeconds(); + G[b + 4 >>> 2 >>> 0] = a.getUTCMinutes(); + G[b + 8 >>> 2 >>> 0] = a.getUTCHours(); + G[b + 12 >>> 2 >>> 0] = a.getUTCDate(); + G[b + 16 >>> 2 >>> 0] = a.getUTCMonth(); + G[b + 20 >>> 2 >>> 0] = a.getUTCFullYear() - 1900; + G[b + 24 >>> 2 >>> 0] = a.getUTCDay(); + G[b + 28 >>> 2 >>> 0] = (a.getTime() - Date.UTC( + a.getUTCFullYear(), + 0, + 1, + 0, + 0, + 0, + 0 + )) / 864e5 | 0; + }, + Sc: function(a, b) { + a = -9007199254740992 > a || 9007199254740992 < a ? NaN : Number(a); + b >>>= 0; + a = new Date(1e3 * a); + G[b >>> 2 >>> 0] = a.getSeconds(); + G[b + 4 >>> 2 >>> 0] = a.getMinutes(); + G[b + 8 >>> 2 >>> 0] = a.getHours(); + G[b + 12 >>> 2 >>> 0] = a.getDate(); + G[b + 16 >>> 2 >>> 0] = a.getMonth(); + G[b + 20 >>> 2 >>> 0] = a.getFullYear() - 1900; + G[b + 24 >>> 2 >>> 0] = a.getDay(); + G[b + 28 >>> 2 >>> 0] = (W(a.getFullYear()) ? Xb : Yb)[a.getMonth()] + a.getDate() - 1 | 0; + G[b + 36 >>> 2 >>> 0] = -(60 * a.getTimezoneOffset()); + var c = new Date(a.getFullYear(), 6, 1).getTimezoneOffset(), d = new Date(a.getFullYear(), 0, 1).getTimezoneOffset(); + G[b + 32 >>> 2 >>> 0] = (c != d && a.getTimezoneOffset() == Math.min(d, c)) | 0; + }, + Tc: function(a) { + a >>>= 0; + var b = new Date(G[a + 20 >>> 2 >>> 0] + 1900, G[a + 16 >>> 2 >>> 0], G[a + 12 >>> 2 >>> 0], G[a + 8 >>> 2 >>> 0], G[a + 4 >>> 2 >>> 0], G[a >>> 2 >>> 0], 0), c = G[a + 32 >>> 2 >>> 0], d = b.getTimezoneOffset(), e = new Date(b.getFullYear(), 6, 1).getTimezoneOffset(), f = new Date(b.getFullYear(), 0, 1).getTimezoneOffset(), h = Math.min(f, e); + 0 > c ? G[a + 32 >>> 2 >>> 0] = Number(e != f && h == d) : 0 < c != (h == d) && (e = Math.max(f, e), b.setTime(b.getTime() + 6e4 * ((0 < c ? h : e) - d))); + G[a + 24 >>> 2 >>> 0] = b.getDay(); + G[a + 28 >>> 2 >>> 0] = (W(b.getFullYear()) ? Xb : Yb)[b.getMonth()] + b.getDate() - 1 | 0; + G[a >>> 2 >>> 0] = b.getSeconds(); + G[a + 4 >>> 2 >>> 0] = b.getMinutes(); + G[a + 8 >>> 2 >>> 0] = b.getHours(); + G[a + 12 >>> 2 >>> 0] = b.getDate(); + G[a + 16 >>> 2 >>> 0] = b.getMonth(); + G[a + 20 >>> 2 >>> 0] = b.getYear(); + a = b.getTime(); + return BigInt(isNaN(a) ? -1 : a / 1e3); + }, + Pc: function() { + return -52; + }, + Qc: function() { + }, + Ic: function(a, b, c, d) { + c >>>= 0; + d >>>= 0; + var e = (/* @__PURE__ */ new Date()).getFullYear(), f = new Date(e, 0, 1), h = new Date(e, 6, 1); + e = f.getTimezoneOffset(); + var k = h.getTimezoneOffset(); + I[a >>> 0 >>> 2 >>> 0] = 60 * Math.max(e, k); + G[b >>> 0 >>> 2 >>> 0] = Number(e != k); + a = (l) => l.toLocaleTimeString(void 0, { hour12: false, timeZoneName: "short" }).split(" ")[1]; + f = a(f); + h = a(h); + k < e ? (M(f, E, c, 17), M(h, E, d, 17)) : (M(f, E, d, 17), M(h, E, c, 17)); + }, + bb: () => { + Ga(""); + }, + A: function(a, b, c) { + a >>>= 0; + b = $b(b >>> 0, c >>> 0); + return Oa[a](...b); + }, + bc: function(a, b, c) { + a >>>= 0; + b = $b(b >>> 0, c >>> 0); + return Oa[a](...b); + }, + $b: () => Date.now(), + Jc: function() { + return 4294901760; + }, + ga: () => performance.now(), + Hc: function(a) { + a >>>= 0; + var b = E.length; + if (4294901760 < a) + return false; + for (var c = 1; 4 >= c; c *= 2) { + var d = b * (1 + 0.2 / c); + d = Math.min(d, a + 100663296); + var e = Math; + d = Math.max(a, d); + a: { + e = (e.min.call(e, 4294901760, d + (65536 - d % 65536) % 65536) - ra.buffer.byteLength + 65535) / 65536; + try { + ra.grow(e); + za(); + var f = 1; + break a; + } catch (h) { + } + f = void 0; + } + if (f) + return true; + } + return false; + }, + Wc: function(a, b) { + a >>>= 0; + b >>>= 0; + var c = 0; + cc().forEach((d, e) => { + var f = b + c; + e = I[a + 4 * e >>> 2 >>> 0] = f; + for (f = 0; f < d.length; ++f) + z[e++ >>> 0] = d.charCodeAt(f); + z[e >>> 0] = 0; + c += d.length + 1; + }); + return 0; + }, + Xc: function(a, b) { + a >>>= 0; + b >>>= 0; + var c = cc(); + I[a >>> 2 >>> 0] = c.length; + var d = 0; + c.forEach((e) => d += e.length + 1); + I[b >>> 2 >>> 0] = d; + return 0; + }, + Db: () => 52, + Zb: function() { + return 52; + }, + Vc: function() { + return 70; + }, + Yb: function(a, b, c, d) { + b >>>= 0; + c >>>= 0; + d >>>= 0; + for (var e = 0, f = 0; f < c; f++) { + var h = I[b >>> 2 >>> 0], k = I[b + 4 >>> 2 >>> 0]; + b += 8; + for (var l = 0; l < k; l++) { + var m = E[h + l >>> 0], n = dc[a]; + 0 === m || 10 === m ? ((1 === a ? qa : w)(ab(n, 0)), n.length = 0) : n.push(m); + } + e += k; + } + I[d >>> 2 >>> 0] = e; + return 0; + }, + xb: nc, + cd: oc, + ua: pc, + W: qc, + $: rc, + ra: sc, + ta: tc, + dd: uc, + ob: vc, + P: wc, + z: xc, + b: yc, + Ub: zc, + ya: Ac, + e: Bc, + kb: Cc, + h: Dc, + X: Ec, + i: Fc, + ed: Gc, + j: Hc, + t: Ic, + r: Jc, + o: Kc, + Wa: Lc, + Ca: Mc, + ma: Nc, + Qb: Oc, + db: Pc, + Ib: Qc, + mb: Rc, + kc: Sc, + xc: Tc, + hc: Uc, + ic: Vc, + ac: Wc, + oa: Xc, + yb: Yc, + Ba: Zc, + Eb: $c, + ea: ad, + jc: bd, + Ta: cd, + F: dd, + G: ed, + Gb: fd, + jd: gd, + qa: hd, + O: jd, + V: kd, + T: ld, + y: md, + Fb: nd, + gc: od, + D: pd, + Hb: qd, + id: rd, + Ua: sd, + wa: td, + lc: ud, + cc: vd, + Nb: wd, + aa: xd, + I: yd, + C: zd, + _a: Ad, + fc: Bd, + Q: Cd, + d: Dd, + ab: Ed, + n: Fd, + Ya: Gd, + va: Hd, + wb: Id, + f: Jd, + yc: Kd, + da: Ld, + gb: Md, + Da: Nd, + lb: Od, + hb: Pd, + c: Qd, + vc: Rd, + od: Sd, + k: Td, + tc: Ud, + l: Vd, + wc: Wd, + sc: Xd, + rd: Yd, + p: Zd, + Ra: $d, + tb: ae, + Qa: be, + Kb: ce, + B: de, + K: ee, + S: fe, + $a: ge, + pc: he, + ub: ie, + za: je, + ka: ke, + xa: le, + Sb: me, + La: ne, + jb: oe, + Ga: pe, + nc: qe, + Ha: re, + Ia: se, + fd: te, + xd: ue, + Z: ve, + pa: we, + pd: xe, + wd: ye, + Mb: ze, + Ma: Ae, + Ka: Be, + Tb: Ce, + rc: De, + Ja: Ee, + Na: Fe, + pb: Ge, + la: He, + Ea: Ie, + mc: Je, + qc: Ke, + Jb: Le, + Fa: Me, + ja: Ne, + Ad: Oe, + nd: Pe, + R: Qe, + eb: Re, + Za: Se, + ec: Te, + ib: Ue, + E: Ve, + M: We, + Va: Xe, + ld: Ye, + ca: Ze, + nb: $e, + na: af, + dc: bf, + Ac: cf, + u: df, + L: ef, + td: ff, + Pb: gf, + oc: hf, + Bd: jf, + Ob: kf, + Lb: lf, + cb: mf, + zc: nf, + Rb: of, + Oa: pf, + Y: qf, + uc: rf, + J: sf, + gd: tf, + vb: uf, + sa: vf, + H: wf, + rb: xf, + Pa: yf, + Sa: zf, + sb: Af, + qb: Bf, + w: function(a) { + return a >>> 0; + }, + Dc: hc, + fa: function(a, b, c, d) { + return hc(a >>> 0, b >>> 0, c >>> 0, d >>> 0); + } + }, U = function() { + function a(c) { + U = c.exports; + U = zb(); + U = Df(); + ra = U.Dd; + za(); + Ba.unshift(U.Ed); + Da--; + 0 == Da && (null !== Ea && (clearInterval(Ea), Ea = null), Fa && (c = Fa, Fa = null, c())); + return U; + } + var b = { a: Cf }; + Da++; + if (g.instantiateWasm) + try { + return g.instantiateWasm(b, a); + } catch (c) { + w(`Module.instantiateWasm callback failed with error: ${c}`), ba(c); + } + Na(b, function(c) { + a(c.instance); + }).catch(ba); + return {}; + }(), ub = (a) => (ub = U.Fd)(a); + g._OrtInit = (a, b) => (g._OrtInit = U.Gd)(a, b); + g._OrtGetLastError = (a, b) => (g._OrtGetLastError = U.Hd)(a, b); + g._OrtCreateSessionOptions = (a, b, c, d, e, f, h, k, l, m) => (g._OrtCreateSessionOptions = U.Id)(a, b, c, d, e, f, h, k, l, m); + g._OrtAppendExecutionProvider = (a, b) => (g._OrtAppendExecutionProvider = U.Jd)(a, b); + g._OrtAddFreeDimensionOverride = (a, b, c) => (g._OrtAddFreeDimensionOverride = U.Kd)(a, b, c); + g._OrtAddSessionConfigEntry = (a, b, c) => (g._OrtAddSessionConfigEntry = U.Ld)(a, b, c); + g._OrtReleaseSessionOptions = (a) => (g._OrtReleaseSessionOptions = U.Md)(a); + g._OrtCreateSession = (a, b, c) => (g._OrtCreateSession = U.Nd)(a, b, c); + g._OrtReleaseSession = (a) => (g._OrtReleaseSession = U.Od)(a); + g._OrtGetInputOutputCount = (a, b, c) => (g._OrtGetInputOutputCount = U.Pd)(a, b, c); + g._OrtGetInputName = (a, b) => (g._OrtGetInputName = U.Qd)(a, b); + g._OrtGetOutputName = (a, b) => (g._OrtGetOutputName = U.Rd)(a, b); + g._OrtFree = (a) => (g._OrtFree = U.Sd)(a); + g._OrtCreateTensor = (a, b, c, d, e, f) => (g._OrtCreateTensor = U.Td)(a, b, c, d, e, f); + g._OrtGetTensorData = (a, b, c, d, e) => (g._OrtGetTensorData = U.Ud)(a, b, c, d, e); + g._OrtReleaseTensor = (a) => (g._OrtReleaseTensor = U.Vd)(a); + g._OrtCreateRunOptions = (a, b, c, d) => (g._OrtCreateRunOptions = U.Wd)(a, b, c, d); + g._OrtAddRunConfigEntry = (a, b, c) => (g._OrtAddRunConfigEntry = U.Xd)(a, b, c); + g._OrtReleaseRunOptions = (a) => (g._OrtReleaseRunOptions = U.Yd)(a); + g._OrtCreateBinding = (a) => (g._OrtCreateBinding = U.Zd)(a); + g._OrtBindInput = (a, b, c) => (g._OrtBindInput = U._d)(a, b, c); + g._OrtBindOutput = (a, b, c, d) => (g._OrtBindOutput = U.$d)(a, b, c, d); + g._OrtClearBoundOutputs = (a) => (g._OrtClearBoundOutputs = U.ae)(a); + g._OrtReleaseBinding = (a) => (g._OrtReleaseBinding = U.be)(a); + g._OrtRunWithBinding = (a, b, c, d, e) => (g._OrtRunWithBinding = U.ce)(a, b, c, d, e); + g._OrtRun = (a, b, c, d, e, f, h, k) => (g._OrtRun = U.de)(a, b, c, d, e, f, h, k); + g._OrtEndProfiling = (a) => (g._OrtEndProfiling = U.ee)(a); + g._JsepOutput = (a, b, c) => (g._JsepOutput = U.fe)(a, b, c); + g._JsepGetNodeName = (a) => (g._JsepGetNodeName = U.ge)(a); + var Jb = g._malloc = (a) => (Jb = g._malloc = U.he)(a), T = g._free = (a) => (T = g._free = U.ie)(a), X = (a, b) => (X = U.ke)(a, b), Ta = (a) => (Ta = U.le)(a), Y = (a) => (Y = U.me)(a), Ef = (a) => (Ef = U.ne)(a), Z = () => (Z = U.oe)(), mc = (a) => (mc = U.pe)(a), kc = (a) => (kc = U.qe)(a), Ua = (a, b, c) => (Ua = U.re)(a, b, c), lc = (a) => (lc = U.se)(a), dynCall_vii = g.dynCall_vii = (a, b, c) => (dynCall_vii = g.dynCall_vii = U.te)(a, b, c), Ff = g.dynCall_iiii = (a, b, c, d) => (Ff = g.dynCall_iiii = U.ue)(a, b, c, d), dynCall_iii = g.dynCall_iii = (a, b, c) => (dynCall_iii = g.dynCall_iii = U.ve)(a, b, c), Gf = g.dynCall_ii = (a, b) => (Gf = g.dynCall_ii = U.we)(a, b), Hf = g.dynCall_iiiiiii = (a, b, c, d, e, f, h) => (Hf = g.dynCall_iiiiiii = U.xe)(a, b, c, d, e, f, h), dynCall_vi = g.dynCall_vi = (a, b) => (dynCall_vi = g.dynCall_vi = U.ye)(a, b), dynCall_v = g.dynCall_v = (a) => (dynCall_v = g.dynCall_v = U.ze)(a), If = g.dynCall_iiiiii = (a, b, c, d, e, f) => (If = g.dynCall_iiiiii = U.Ae)(a, b, c, d, e, f), Jf = g.dynCall_iiij = (a, b, c, d) => (Jf = g.dynCall_iiij = U.Be)(a, b, c, d), Kf = g.dynCall_iiiii = (a, b, c, d, e) => (Kf = g.dynCall_iiiii = U.Ce)(a, b, c, d, e), Lf = g.dynCall_viii = (a, b, c, d) => (Lf = g.dynCall_viii = U.De)(a, b, c, d), Mf = g.dynCall_viiiii = (a, b, c, d, e, f) => (Mf = g.dynCall_viiiii = U.Ee)(a, b, c, d, e, f), Nf = g.dynCall_viiii = (a, b, c, d, e) => (Nf = g.dynCall_viiii = U.Fe)(a, b, c, d, e), Of = g.dynCall_viiiiii = (a, b, c, d, e, f, h) => (Of = g.dynCall_viiiiii = U.Ge)(a, b, c, d, e, f, h), Pf = g.dynCall_viiji = (a, b, c, d, e) => (Pf = g.dynCall_viiji = U.He)(a, b, c, d, e), Qf = g.dynCall_viiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q) => (Qf = g.dynCall_viiiiiiiiiii = U.Ie)(a, b, c, d, e, f, h, k, l, m, n, q), Rf = g.dynCall_viiijjjii = (a, b, c, d, e, f, h, k, l) => (Rf = g.dynCall_viiijjjii = U.Je)(a, b, c, d, e, f, h, k, l), Sf = g.dynCall_iid = (a, b, c) => (Sf = g.dynCall_iid = U.Ke)(a, b, c), Tf = g.dynCall_iif = (a, b, c) => (Tf = g.dynCall_iif = U.Le)(a, b, c), Uf = g.dynCall_iij = (a, b, c) => (Uf = g.dynCall_iij = U.Me)(a, b, c), Vf = g.dynCall_jii = (a, b, c) => (Vf = g.dynCall_jii = U.Ne)(a, b, c), Wf = g.dynCall_i = (a) => (Wf = g.dynCall_i = U.Oe)(a), Xf = g.dynCall_viiiiiiii = (a, b, c, d, e, f, h, k, l) => (Xf = g.dynCall_viiiiiiii = U.Pe)(a, b, c, d, e, f, h, k, l), Yf = g.dynCall_viiiiij = (a, b, c, d, e, f, h) => (Yf = g.dynCall_viiiiij = U.Qe)(a, b, c, d, e, f, h), Zf = g.dynCall_ji = (a, b) => (Zf = g.dynCall_ji = U.Re)(a, b), $f = g.dynCall_viij = (a, b, c, d) => ($f = g.dynCall_viij = U.Se)(a, b, c, d), ag = g.dynCall_iiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q) => (ag = g.dynCall_iiiiiiiiiiii = U.Te)(a, b, c, d, e, f, h, k, l, m, n, q), bg = g.dynCall_viiiiiiiii = (a, b, c, d, e, f, h, k, l, m) => (bg = g.dynCall_viiiiiiiii = U.Ue)(a, b, c, d, e, f, h, k, l, m), cg = g.dynCall_ij = (a, b) => (cg = g.dynCall_ij = U.Ve)(a, b), dg = g.dynCall_iiiiij = (a, b, c, d, e, f) => (dg = g.dynCall_iiiiij = U.We)(a, b, c, d, e, f), eg = g.dynCall_j = (a) => (eg = g.dynCall_j = U.Xe)(a), fg = g.dynCall_vij = (a, b, c) => (fg = g.dynCall_vij = U.Ye)(a, b, c), gg = g.dynCall_viijjjiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q) => (gg = g.dynCall_viijjjiiiiii = U.Ze)(a, b, c, d, e, f, h, k, l, m, n, q), hg = g.dynCall_viiijiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q) => (hg = g.dynCall_viiijiiiiiii = U._e)(a, b, c, d, e, f, h, k, l, m, n, q), ig = g.dynCall_iiiiiiii = (a, b, c, d, e, f, h, k) => (ig = g.dynCall_iiiiiiii = U.$e)(a, b, c, d, e, f, h, k), jg = g.dynCall_viiiiiii = (a, b, c, d, e, f, h, k) => (jg = g.dynCall_viiiiiii = U.af)(a, b, c, d, e, f, h, k), kg = g.dynCall_iiiiiiiij = (a, b, c, d, e, f, h, k, l) => (kg = g.dynCall_iiiiiiiij = U.bf)(a, b, c, d, e, f, h, k, l), lg = g.dynCall_viiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (lg = g.dynCall_viiiiiiiiiiiii = U.cf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), mg = g.dynCall_iiiiiiiii = (a, b, c, d, e, f, h, k, l) => (mg = g.dynCall_iiiiiiiii = U.df)(a, b, c, d, e, f, h, k, l), ng = g.dynCall_iiiiijiiiii = (a, b, c, d, e, f, h, k, l, m, n) => (ng = g.dynCall_iiiiijiiiii = U.ef)(a, b, c, d, e, f, h, k, l, m, n), og = g.dynCall_vijjjiiij = (a, b, c, d, e, f, h, k, l) => (og = g.dynCall_vijjjiiij = U.ff)(a, b, c, d, e, f, h, k, l), pg = g.dynCall_fi = (a, b) => (pg = g.dynCall_fi = U.gf)(a, b), qg = g.dynCall_fii = (a, b, c) => (qg = g.dynCall_fii = U.hf)(a, b, c), rg = g.dynCall_di = (a, b) => (rg = g.dynCall_di = U.jf)(a, b), sg = g.dynCall_dii = (a, b, c) => (sg = g.dynCall_dii = U.kf)(a, b, c), tg = g.dynCall_vijj = (a, b, c, d) => (tg = g.dynCall_vijj = U.lf)(a, b, c, d), ug = g.dynCall_iiiiiiiiii = (a, b, c, d, e, f, h, k, l, m) => (ug = g.dynCall_iiiiiiiiii = U.mf)(a, b, c, d, e, f, h, k, l, m), vg = g.dynCall_viijiii = (a, b, c, d, e, f, h) => (vg = g.dynCall_viijiii = U.nf)(a, b, c, d, e, f, h), wg = g.dynCall_viid = (a, b, c, d) => (wg = g.dynCall_viid = U.of)(a, b, c, d), xg = g.dynCall_viffiii = (a, b, c, d, e, f, h) => (xg = g.dynCall_viffiii = U.pf)(a, b, c, d, e, f, h), yg = g.dynCall_viifiii = (a, b, c, d, e, f, h) => (yg = g.dynCall_viifiii = U.qf)(a, b, c, d, e, f, h), zg = g.dynCall_viiiiidiidi = (a, b, c, d, e, f, h, k, l, m, n) => (zg = g.dynCall_viiiiidiidi = U.rf)(a, b, c, d, e, f, h, k, l, m, n), Ag = g.dynCall_viiiiiiiiidi = (a, b, c, d, e, f, h, k, l, m, n, q) => (Ag = g.dynCall_viiiiiiiiidi = U.sf)(a, b, c, d, e, f, h, k, l, m, n, q), Bg = g.dynCall_jiii = (a, b, c, d) => (Bg = g.dynCall_jiii = U.tf)(a, b, c, d), Cg = g.dynCall_vjiiiiii = (a, b, c, d, e, f, h, k) => (Cg = g.dynCall_vjiiiiii = U.uf)(a, b, c, d, e, f, h, k), Dg = g.dynCall_viiid = (a, b, c, d, e) => (Dg = g.dynCall_viiid = U.vf)(a, b, c, d, e), Eg = g.dynCall_viiiiiiiiiji = (a, b, c, d, e, f, h, k, l, m, n, q) => (Eg = g.dynCall_viiiiiiiiiji = U.wf)(a, b, c, d, e, f, h, k, l, m, n, q), Fg = g.dynCall_viji = (a, b, c, d) => (Fg = g.dynCall_viji = U.xf)(a, b, c, d), Gg = g.dynCall_vijjjjjjjjjjjjji = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => (Gg = g.dynCall_vijjjjjjjjjjjjji = U.yf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y), Hg = g.dynCall_viiiji = (a, b, c, d, e, f) => (Hg = g.dynCall_viiiji = U.zf)(a, b, c, d, e, f), Ig = g.dynCall_vijjjiiji = (a, b, c, d, e, f, h, k, l) => (Ig = g.dynCall_vijjjiiji = U.Af)(a, b, c, d, e, f, h, k, l), Jg = g.dynCall_iiiji = (a, b, c, d, e) => (Jg = g.dynCall_iiiji = U.Bf)(a, b, c, d, e), Kg = g.dynCall_iiijiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (Kg = g.dynCall_iiijiiiiiiiiii = U.Cf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), Lg = g.dynCall_vj = (a, b) => (Lg = g.dynCall_vj = U.Df)(a, b), Mg = g.dynCall_jjj = (a, b, c) => (Mg = g.dynCall_jjj = U.Ef)(a, b, c), Ng = g.dynCall_iiijiiiiii = (a, b, c, d, e, f, h, k, l, m) => (Ng = g.dynCall_iiijiiiiii = U.Ff)(a, b, c, d, e, f, h, k, l, m), Og = g.dynCall_vfiii = (a, b, c, d, e) => (Og = g.dynCall_vfiii = U.Gf)(a, b, c, d, e), Pg = g.dynCall_viiiiff = (a, b, c, d, e, f, h) => (Pg = g.dynCall_viiiiff = U.Hf)(a, b, c, d, e, f, h), Qg = g.dynCall_viiiiiff = (a, b, c, d, e, f, h, k) => (Qg = g.dynCall_viiiiiff = U.If)(a, b, c, d, e, f, h, k), Rg = g.dynCall_viiff = (a, b, c, d, e) => (Rg = g.dynCall_viiff = U.Jf)(a, b, c, d, e), Sg = g.dynCall_viiiiiiiiifiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (Sg = g.dynCall_viiiiiiiiifiii = U.Kf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), Tg = g.dynCall_viiiiiiiijj = (a, b, c, d, e, f, h, k, l, m, n) => (Tg = g.dynCall_viiiiiiiijj = U.Lf)(a, b, c, d, e, f, h, k, l, m, n), Ug = g.dynCall_iiiiiiiiiiiiiifii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) => (Ug = g.dynCall_iiiiiiiiiiiiiifii = U.Mf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A), Vg = g.dynCall_viiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Vg = g.dynCall_viiiiiiiiiiii = U.Nf)(a, b, c, d, e, f, h, k, l, m, n, q, r), Wg = g.dynCall_iiiiiiiiiiiiiiiiifii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) => (Wg = g.dynCall_iiiiiiiiiiiiiiiiifii = U.Of)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D), Xg = g.dynCall_vijjiiiiii = (a, b, c, d, e, f, h, k, l, m) => (Xg = g.dynCall_vijjiiiiii = U.Pf)(a, b, c, d, e, f, h, k, l, m), Yg = g.dynCall_iiiijjj = (a, b, c, d, e, f, h) => (Yg = g.dynCall_iiiijjj = U.Qf)(a, b, c, d, e, f, h), Zg = g.dynCall_viiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n) => (Zg = g.dynCall_viiiiiiiiii = U.Rf)(a, b, c, d, e, f, h, k, l, m, n), $g = g.dynCall_iiijjj = (a, b, c, d, e, f) => ($g = g.dynCall_iiijjj = U.Sf)(a, b, c, d, e, f), ah = g.dynCall_fffffff = (a, b, c, d, e, f, h) => (ah = g.dynCall_fffffff = U.Tf)(a, b, c, d, e, f, h), bh = g.dynCall_viiiij = (a, b, c, d, e, f) => (bh = g.dynCall_viiiij = U.Uf)(a, b, c, d, e, f), ch = g.dynCall_viiiiiijiifiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (ch = g.dynCall_viiiiiijiifiii = U.Vf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), dh = g.dynCall_vjjjjjjffjifiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B) => (dh = g.dynCall_vjjjjjjffjifiiiiii = U.Wf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B), eh = g.dynCall_viiiiiiffjifiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) => (eh = g.dynCall_viiiiiiffjifiiiii = U.Xf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A), fh = g.dynCall_viiiiiiffjfiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => (fh = g.dynCall_viiiiiiffjfiiiii = U.Yf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y), gh = g.dynCall_viiiiiiffjiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => (gh = g.dynCall_viiiiiiffjiiiii = U.Zf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u), hh = g.dynCall_vjjjjjjjjfffiiifiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) => (hh = g.dynCall_vjjjjjjjjfffiiifiiiii = U._f)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F), ih = g.dynCall_vjjjjjjfffifijiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C) => (ih = g.dynCall_vjjjjjjfffifijiiiii = U.$f)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C), jh = g.dynCall_vjjjjjjfffifiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B) => (jh = g.dynCall_vjjjjjjfffifiiiiii = U.ag)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B), kh = g.dynCall_vjjjjjjjjfffjifiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) => (kh = g.dynCall_vjjjjjjjjfffjifiiiiii = U.bg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F), lh = g.dynCall_vijiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (lh = g.dynCall_vijiiiiiiiiii = U.cg)(a, b, c, d, e, f, h, k, l, m, n, q, r), mh = g.dynCall_vijjfffiii = (a, b, c, d, e, f, h, k, l, m) => (mh = g.dynCall_vijjfffiii = U.dg)(a, b, c, d, e, f, h, k, l, m), nh = g.dynCall_viiiiiiijiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (nh = g.dynCall_viiiiiiijiiii = U.eg)(a, b, c, d, e, f, h, k, l, m, n, q, r), oh = g.dynCall_vijjjjjjifiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => (oh = g.dynCall_vijjjjjjifiiiii = U.fg)( + a, + b, + c, + d, + e, + f, + h, + k, + l, + m, + n, + q, + r, + p, + u + ), ph = g.dynCall_viifi = (a, b, c, d, e) => (ph = g.dynCall_viifi = U.gg)(a, b, c, d, e), qh = g.dynCall_vjjjjjiiii = (a, b, c, d, e, f, h, k, l, m) => (qh = g.dynCall_vjjjjjiiii = U.hg)(a, b, c, d, e, f, h, k, l, m), rh = g.dynCall_vjjjjfiii = (a, b, c, d, e, f, h, k, l) => (rh = g.dynCall_vjjjjfiii = U.ig)(a, b, c, d, e, f, h, k, l), sh = g.dynCall_viiiiiijiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (sh = g.dynCall_viiiiiijiiiiii = U.jg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), th = g.dynCall_vijjii = (a, b, c, d, e, f) => (th = g.dynCall_vijjii = U.kg)(a, b, c, d, e, f), uh = g.dynCall_viiiiijjiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (uh = g.dynCall_viiiiijjiiiii = U.lg)(a, b, c, d, e, f, h, k, l, m, n, q, r), vh = g.dynCall_iiiiiji = (a, b, c, d, e, f, h) => (vh = g.dynCall_iiiiiji = U.mg)(a, b, c, d, e, f, h), wh = g.dynCall_iiiiji = (a, b, c, d, e, f) => (wh = g.dynCall_iiiiji = U.ng)(a, b, c, d, e, f), xh = g.dynCall_viiiiijiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (xh = g.dynCall_viiiiijiiiiii = U.og)(a, b, c, d, e, f, h, k, l, m, n, q, r), yh = g.dynCall_viiijiiiiii = (a, b, c, d, e, f, h, k, l, m, n) => (yh = g.dynCall_viiijiiiiii = U.pg)(a, b, c, d, e, f, h, k, l, m, n), zh = g.dynCall_viijj = (a, b, c, d, e) => (zh = g.dynCall_viijj = U.qg)(a, b, c, d, e), Ah = g.dynCall_viiiijii = (a, b, c, d, e, f, h, k) => (Ah = g.dynCall_viiiijii = U.rg)(a, b, c, d, e, f, h, k), Bh = g.dynCall_viijjiii = (a, b, c, d, e, f, h, k) => (Bh = g.dynCall_viijjiii = U.sg)(a, b, c, d, e, f, h, k), Ch = g.dynCall_ijii = (a, b, c, d) => (Ch = g.dynCall_ijii = U.tg)(a, b, c, d), Dh = g.dynCall_viiiiijjji = (a, b, c, d, e, f, h, k, l, m) => (Dh = g.dynCall_viiiiijjji = U.ug)(a, b, c, d, e, f, h, k, l, m), Eh = g.dynCall_vijjjjiij = (a, b, c, d, e, f, h, k, l) => (Eh = g.dynCall_vijjjjiij = U.vg)(a, b, c, d, e, f, h, k, l), Fh = g.dynCall_viiiiijij = (a, b, c, d, e, f, h, k, l) => (Fh = g.dynCall_viiiiijij = U.wg)(a, b, c, d, e, f, h, k, l), Gh = g.dynCall_viiiiiijij = (a, b, c, d, e, f, h, k, l, m) => (Gh = g.dynCall_viiiiiijij = U.xg)(a, b, c, d, e, f, h, k, l, m), Hh = g.dynCall_vijiii = (a, b, c, d, e, f) => (Hh = g.dynCall_vijiii = U.yg)(a, b, c, d, e, f), Ih = g.dynCall_viiiiiiiiifi = (a, b, c, d, e, f, h, k, l, m, n, q) => (Ih = g.dynCall_viiiiiiiiifi = U.zg)(a, b, c, d, e, f, h, k, l, m, n, q), Jh = g.dynCall_iiijiiii = (a, b, c, d, e, f, h, k) => (Jh = g.dynCall_iiijiiii = U.Ag)(a, b, c, d, e, f, h, k), Kh = g.dynCall_viiiiiijjiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (Kh = g.dynCall_viiiiiijjiiiii = U.Bg)( + a, + b, + c, + d, + e, + f, + h, + k, + l, + m, + n, + q, + r, + p + ), Lh = g.dynCall_viiiiiiijiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => (Lh = g.dynCall_viiiiiiijiiiiii = U.Cg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u), Mh = g.dynCall_vif = (a, b, c) => (Mh = g.dynCall_vif = U.Dg)(a, b, c), Nh = g.dynCall_viif = (a, b, c, d) => (Nh = g.dynCall_viif = U.Eg)(a, b, c, d), Oh = g.dynCall_fiii = (a, b, c, d) => (Oh = g.dynCall_fiii = U.Fg)(a, b, c, d), Ph = g.dynCall_diii = (a, b, c, d) => (Ph = g.dynCall_diii = U.Gg)(a, b, c, d), Qh = g.dynCall_viiiiiifii = (a, b, c, d, e, f, h, k, l, m) => (Qh = g.dynCall_viiiiiifii = U.Hg)(a, b, c, d, e, f, h, k, l, m), Rh = g.dynCall_viiiiijiiiiiiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F, H, K, Va, Wa, Xa) => (Rh = g.dynCall_viiiiijiiiiiiiiiiiiiiiiiii = U.Ig)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F, H, K, Va, Wa, Xa), Sh = g.dynCall_viijji = (a, b, c, d, e, f) => (Sh = g.dynCall_viijji = U.Jg)(a, b, c, d, e, f), Th = g.dynCall_iiiiiiiiiiiji = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Th = g.dynCall_iiiiiiiiiiiji = U.Kg)(a, b, c, d, e, f, h, k, l, m, n, q, r), Uh = g.dynCall_viifiifijjjii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Uh = g.dynCall_viifiifijjjii = U.Lg)(a, b, c, d, e, f, h, k, l, m, n, q, r), Vh = g.dynCall_viiiiiiiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) => (Vh = g.dynCall_viiiiiiiiiiiiiiiiiiii = U.Mg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F), Wh = g.dynCall_viiiiifiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Wh = g.dynCall_viiiiifiiiiii = U.Ng)(a, b, c, d, e, f, h, k, l, m, n, q, r), Xh = g.dynCall_vijiiiiiiijjii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (Xh = g.dynCall_vijiiiiiiijjii = U.Og)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), Yh = g.dynCall_viiiiiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C) => (Yh = g.dynCall_viiiiiiiiiiiiiiiiii = U.Pg)( + a, + b, + c, + d, + e, + f, + h, + k, + l, + m, + n, + q, + r, + p, + u, + y, + A, + B, + C + ), Zh = g.dynCall_viiiiiiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) => (Zh = g.dynCall_viiiiiiiiiiiiiiiiiii = U.Qg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D), $h = g.dynCall_viiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => ($h = g.dynCall_viiiiiiiiiiiiiii = U.Rg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y), ai = g.dynCall_viiiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) => (ai = g.dynCall_viiiiiiiiiiiiiiii = U.Sg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A), bi = g.dynCall_viiiijjj = (a, b, c, d, e, f, h, k) => (bi = g.dynCall_viiiijjj = U.Tg)(a, b, c, d, e, f, h, k), ci = g.dynCall_iiiiid = (a, b, c, d, e, f) => (ci = g.dynCall_iiiiid = U.Ug)(a, b, c, d, e, f), di = g.dynCall_viiiiiiijjj = (a, b, c, d, e, f, h, k, l, m, n) => (di = g.dynCall_viiiiiiijjj = U.Vg)(a, b, c, d, e, f, h, k, l, m, n), ei = g.dynCall_iiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n) => (ei = g.dynCall_iiiiiiiiiii = U.Wg)(a, b, c, d, e, f, h, k, l, m, n), fi = g.dynCall_iiiiiiiiiiiiiiiiiifi = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) => (fi = g.dynCall_iiiiiiiiiiiiiiiiiifi = U.Xg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D), gi = g.dynCall_viiif = (a, b, c, d, e) => (gi = g.dynCall_viiif = U.Yg)(a, b, c, d, e), hi = g.dynCall_viiijiiiii = (a, b, c, d, e, f, h, k, l, m) => (hi = g.dynCall_viiijiiiii = U.Zg)(a, b, c, d, e, f, h, k, l, m), ii = g.dynCall_viiij = (a, b, c, d, e) => (ii = g.dynCall_viiij = U._g)(a, b, c, d, e), ji = g.dynCall_iijjj = (a, b, c, d, e) => (ji = g.dynCall_iijjj = U.$g)(a, b, c, d, e), ki = g.dynCall_viiiiji = (a, b, c, d, e, f, h) => (ki = g.dynCall_viiiiji = U.ah)(a, b, c, d, e, f, h), li = g.dynCall_iijjji = (a, b, c, d, e, f) => (li = g.dynCall_iijjji = U.bh)(a, b, c, d, e, f), mi = g.dynCall_ijijji = (a, b, c, d, e, f) => (mi = g.dynCall_ijijji = U.ch)( + a, + b, + c, + d, + e, + f + ), ni = g.dynCall_viiijjiii = (a, b, c, d, e, f, h, k, l) => (ni = g.dynCall_viiijjiii = U.dh)(a, b, c, d, e, f, h, k, l), oi = g.dynCall_iiiiijji = (a, b, c, d, e, f, h, k) => (oi = g.dynCall_iiiiijji = U.eh)(a, b, c, d, e, f, h, k), pi = g.dynCall_iiiifi = (a, b, c, d, e, f) => (pi = g.dynCall_iiiifi = U.fh)(a, b, c, d, e, f), qi = g.dynCall_iiijii = (a, b, c, d, e, f) => (qi = g.dynCall_iiijii = U.gh)(a, b, c, d, e, f), ri = g.dynCall_iiiiiiiiijii = (a, b, c, d, e, f, h, k, l, m, n, q) => (ri = g.dynCall_iiiiiiiiijii = U.hh)(a, b, c, d, e, f, h, k, l, m, n, q), si = g.dynCall_iiiijjii = (a, b, c, d, e, f, h, k) => (si = g.dynCall_iiiijjii = U.ih)(a, b, c, d, e, f, h, k), ti = g.dynCall_iiiiiijjjii = (a, b, c, d, e, f, h, k, l, m, n) => (ti = g.dynCall_iiiiiijjjii = U.jh)(a, b, c, d, e, f, h, k, l, m, n), ui = g.dynCall_iiijiii = (a, b, c, d, e, f, h) => (ui = g.dynCall_iiijiii = U.kh)(a, b, c, d, e, f, h), vi = g.dynCall_iiiiiiiijjjfi = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (vi = g.dynCall_iiiiiiiijjjfi = U.lh)(a, b, c, d, e, f, h, k, l, m, n, q, r), wi = g.dynCall_iijiiii = (a, b, c, d, e, f, h) => (wi = g.dynCall_iijiiii = U.mh)(a, b, c, d, e, f, h), xi = g.dynCall_iijjjii = (a, b, c, d, e, f, h) => (xi = g.dynCall_iijjjii = U.nh)(a, b, c, d, e, f, h), yi = g.dynCall_jij = (a, b, c) => (yi = g.dynCall_jij = U.oh)(a, b, c), zi = g.dynCall_iiji = (a, b, c, d) => (zi = g.dynCall_iiji = U.ph)(a, b, c, d), Ai = g.dynCall_iiif = (a, b, c, d) => (Ai = g.dynCall_iiif = U.qh)(a, b, c, d), Bi = g.dynCall_vidi = (a, b, c, d) => (Bi = g.dynCall_vidi = U.rh)(a, b, c, d), Ci = g.dynCall_vjiii = (a, b, c, d, e) => (Ci = g.dynCall_vjiii = U.sh)(a, b, c, d, e), Di = g.dynCall_diiii = (a, b, c, d, e) => (Di = g.dynCall_diiii = U.th)(a, b, c, d, e), Ei = g.dynCall_diiiii = (a, b, c, d, e, f) => (Ei = g.dynCall_diiiii = U.uh)(a, b, c, d, e, f), Fi = g.dynCall_viiijjiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q) => (Fi = g.dynCall_viiijjiiiiii = U.vh)(a, b, c, d, e, f, h, k, l, m, n, q), Gi = g.dynCall_viijjijjjjiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Gi = g.dynCall_viijjijjjjiii = U.wh)(a, b, c, d, e, f, h, k, l, m, n, q, r), Hi = g.dynCall_iiiij = (a, b, c, d, e) => (Hi = g.dynCall_iiiij = U.xh)(a, b, c, d, e), Ii = g.dynCall_viiijii = (a, b, c, d, e, f, h) => (Ii = g.dynCall_viiijii = U.yh)(a, b, c, d, e, f, h), Ji = g.dynCall_viijiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Ji = g.dynCall_viijiiiiiiiii = U.zh)(a, b, c, d, e, f, h, k, l, m, n, q, r), Ki = g.dynCall_fiiii = (a, b, c, d, e) => (Ki = g.dynCall_fiiii = U.Ah)(a, b, c, d, e), Li = g.dynCall_jfi = (a, b, c) => (Li = g.dynCall_jfi = U.Bh)(a, b, c), Mi = g.dynCall_viiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => (Mi = g.dynCall_viiiiiiiiiiiiii = U.Ch)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u), Ni = g.dynCall_jiij = (a, b, c, d) => (Ni = g.dynCall_jiij = U.Dh)(a, b, c, d), Mb = (a) => (Mb = U.Eh)(a), Bb = () => (Bb = U.Fh)(), Lb = (a) => (Lb = U.Gh)(a), Nb = () => (Nb = U.Hh)(); + g.___start_em_js = 1275044; + g.___stop_em_js = 1275205; + function Dc(a, b, c, d) { + var e = Z(); + try { + return Ff(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function Bc(a, b, c) { + var d = Z(); + try { + return dynCall_iii(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + } + } + function Jd(a, b, c) { + var d = Z(); + try { + dynCall_vii(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + } + } + function yc(a, b) { + var c = Z(); + try { + return Gf(a, b); + } catch (d) { + Y(c); + if (d !== d + 0) + throw d; + X(1, 0); + } + } + function Fd(a, b) { + var c = Z(); + try { + dynCall_vi(a, b); + } catch (d) { + Y(c); + if (d !== d + 0) + throw d; + X(1, 0); + } + } + function dd(a, b, c, d) { + var e = Z(); + try { + return Jf(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function Dd(a) { + var b = Z(); + try { + dynCall_v(a); + } catch (c) { + Y(b); + if (c !== c + 0) + throw c; + X(1, 0); + } + } + function Ic(a, b, c, d, e, f, h) { + var k = Z(); + try { + return Hf(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function Hc(a, b, c, d, e, f) { + var h = Z(); + try { + return If(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function Fc(a, b, c, d, e) { + var f = Z(); + try { + return Kf(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function Qd(a, b, c, d) { + var e = Z(); + try { + Lf(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function Td(a, b, c, d, e) { + var f = Z(); + try { + Nf(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function Vd(a, b, c, d, e, f) { + var h = Z(); + try { + Mf(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function Zd(a, b, c, d, e, f, h) { + var k = Z(); + try { + Of(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function ke(a, b, c, d, e, f, h, k, l, m, n, q) { + var r = Z(); + try { + Qf(a, b, c, d, e, f, h, k, l, m, n, q); + } catch (p) { + Y(r); + if (p !== p + 0) + throw p; + X(1, 0); + } + } + function zc(a, b, c) { + var d = Z(); + try { + return Sf(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + } + } + function Ac(a, b, c) { + var d = Z(); + try { + return Tf(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + } + } + function md(a, b, c) { + var d = Z(); + try { + return Uf(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + } + } + function yd(a, b, c) { + var d = Z(); + try { + return Vf(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + return 0n; + } + } + function ee(a, b, c, d, e, f, h, k, l) { + var m = Z(); + try { + Xf(a, b, c, d, e, f, h, k, l); + } catch (n) { + Y(m); + if (n !== n + 0) + throw n; + X(1, 0); + } + } + function xc(a) { + var b = Z(); + try { + return Wf(a); + } catch (c) { + Y(b); + if (c !== c + 0) + throw c; + X(1, 0); + } + } + function df(a, b, c) { + var d = Z(); + try { + fg(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + } + } + function We(a, b, c, d, e) { + var f = Z(); + try { + Pf(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function Ce(a, b, c, d, e, f, h) { + var k = Z(); + try { + Yf(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function cf(a, b, c, d, e, f, h, k, l, m, n, q) { + var r = Z(); + try { + gg(a, b, c, d, e, f, h, k, l, m, n, q); + } catch (p) { + Y(r); + if (p !== p + 0) + throw p; + X(1, 0); + } + } + function Re(a, b, c, d, e, f, h, k, l, m, n, q) { + var r = Z(); + try { + hg(a, b, c, d, e, f, h, k, l, m, n, q); + } catch (p) { + Y(r); + if (p !== p + 0) + throw p; + X(1, 0); + } + } + function Jc(a, b, c, d, e, f, h, k) { + var l = Z(); + try { + return ig(a, b, c, d, e, f, h, k); + } catch (m) { + Y(l); + if (m !== m + 0) + throw m; + X(1, 0); + } + } + function de(a, b, c, d, e, f, h, k) { + var l = Z(); + try { + jg(a, b, c, d, e, f, h, k); + } catch (m) { + Y(l); + if (m !== m + 0) + throw m; + X(1, 0); + } + } + function Nc(a, b, c, d, e, f, h, k, l, m, n, q) { + var r = Z(); + try { + return ag(a, b, c, d, e, f, h, k, l, m, n, q); + } catch (p) { + Y(r); + if (p !== p + 0) + throw p; + X(1, 0); + } + } + function fe(a, b, c, d, e, f, h, k, l, m) { + var n = Z(); + try { + bg(a, b, c, d, e, f, h, k, l, m); + } catch (q) { + Y(n); + if (q !== q + 0) + throw q; + X(1, 0); + } + } + function me(a, b, c, d, e, f, h, k, l, m, n, q, r, p) { + var u = Z(); + try { + lg(a, b, c, d, e, f, h, k, l, m, n, q, r, p); + } catch (y) { + Y(u); + if (y !== y + 0) + throw y; + X(1, 0); + } + } + function Yc(a, b, c, d, e, f, h, k, l, m, n) { + var q = Z(); + try { + return ng(a, b, c, d, e, f, h, k, l, m, n); + } catch (r) { + Y(q); + if (r !== r + 0) + throw r; + X(1, 0); + } + } + function Kc(a, b, c, d, e, f, h, k, l) { + var m = Z(); + try { + return mg(a, b, c, d, e, f, h, k, l); + } catch (n) { + Y(m); + if (n !== n + 0) + throw n; + X(1, 0); + } + } + function nf(a, b, c, d, e, f, h, k, l) { + var m = Z(); + try { + og(a, b, c, d, e, f, h, k, l); + } catch (n) { + Y(m); + if (n !== n + 0) + throw n; + X(1, 0); + } + } + function Ve(a, b, c, d) { + var e = Z(); + try { + $f(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function tc(a, b) { + var c = Z(); + try { + return pg(a, b); + } catch (d) { + Y(c); + if (d !== d + 0) + throw d; + X(1, 0); + } + } + function xd(a, b) { + var c = Z(); + try { + return Zf(a, b); + } catch (d) { + Y(c); + if (d !== d + 0) + throw d; + X(1, 0); + return 0n; + } + } + function nc(a, b) { + var c = Z(); + try { + return rg(a, b); + } catch (d) { + Y(c); + if (d !== d + 0) + throw d; + X(1, 0); + } + } + function jf(a, b, c, d) { + var e = Z(); + try { + tg(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function Oe(a, b, c, d, e, f, h) { + var k = Z(); + try { + Ii(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function Ze(a, b, c, d, e) { + var f = Z(); + try { + zh(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function Lc(a, b, c, d, e, f, h, k, l, m) { + var n = Z(); + try { + return ug(a, b, c, d, e, f, h, k, l, m); + } catch (q) { + Y(n); + if (q !== q + 0) + throw q; + X(1, 0); + } + } + function Xe(a, b, c, d, e, f, h) { + var k = Z(); + try { + vg(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function Kd(a, b, c, d) { + var e = Z(); + try { + wg(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function Tc(a, b, c, d, e, f, h, k, l) { + var m = Z(); + try { + return kg(a, b, c, d, e, f, h, k, l); + } catch (n) { + Y(m); + if (n !== n + 0) + throw n; + X(1, 0); + } + } + function Id(a, b, c, d, e, f, h) { + var k = Z(); + try { + xg(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function Ue(a, b, c, d, e, f, h, k, l) { + var m = Z(); + try { + Rf(a, b, c, d, e, f, h, k, l); + } catch (n) { + Y(m); + if (n !== n + 0) + throw n; + X(1, 0); + } + } + function Pd(a, b, c, d, e, f, h) { + var k = Z(); + try { + yg(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function Wd(a, b, c, d, e, f, h, k, l, m, n) { + var q = Z(); + try { + zg(a, b, c, d, e, f, h, k, l, m, n); + } catch (r) { + Y(q); + if (r !== r + 0) + throw r; + X(1, 0); + } + } + function zd(a, b, c, d) { + var e = Z(); + try { + return Bg(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + return 0n; + } + } + function uf(a, b, c, d, e, f, h, k) { + var l = Z(); + try { + Cg(a, b, c, d, e, f, h, k); + } catch (m) { + Y(l); + if (m !== m + 0) + throw m; + X(1, 0); + } + } + function Rd(a, b, c, d, e) { + var f = Z(); + try { + Dg(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function ef(a, b, c, d) { + var e = Z(); + try { + Fg(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function rf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) { + var A = Z(); + try { + Gg(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y); + } catch (B) { + Y(A); + if (B !== B + 0) + throw B; + X(1, 0); + } + } + function Ne(a, b, c, d, e, f) { + var h = Z(); + try { + Hg(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function of(a, b, c, d, e, f, h, k, l) { + var m = Z(); + try { + Ig(a, b, c, d, e, f, h, k, l); + } catch (n) { + Y(m); + if (n !== n + 0) + throw n; + X(1, 0); + } + } + function ed(a, b, c, d, e) { + var f = Z(); + try { + return Jg(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function kd(a, b, c, d, e, f, h, k, l, m, n, q, r, p) { + var u = Z(); + try { + return Kg(a, b, c, d, e, f, h, k, l, m, n, q, r, p); + } catch (y) { + Y(u); + if (y !== y + 0) + throw y; + X(1, 0); + } + } + function sf(a, b) { + var c = Z(); + try { + Lg(a, b); + } catch (d) { + Y(c); + if (d !== d + 0) + throw d; + X(1, 0); + } + } + function Cd(a, b, c) { + var d = Z(); + try { + return Mg(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + return 0n; + } + } + function jd(a, b, c, d, e, f, h, k, l, m) { + var n = Z(); + try { + return Ng(a, b, c, d, e, f, h, k, l, m); + } catch (q) { + Y(n); + if (q !== q + 0) + throw q; + X(1, 0); + } + } + function ie(a, b, c, d, e, f, h, k, l, m, n, q, r, p) { + var u = Z(); + try { + Sg(a, b, c, d, e, f, h, k, l, m, n, q, r, p); + } catch (y) { + Y(u); + if (y !== y + 0) + throw y; + X(1, 0); + } + } + function Ed(a, b, c, d, e) { + var f = Z(); + try { + Og(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function Ud(a, b, c, d, e, f, h) { + var k = Z(); + try { + Pg(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function Md(a, b, c, d, e) { + var f = Z(); + try { + Rg(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function Xd(a, b, c, d, e, f, h, k) { + var l = Z(); + try { + Qg(a, b, c, d, e, f, h, k); + } catch (m) { + Y(l); + if (m !== m + 0) + throw m; + X(1, 0); + } + } + function ue(a, b, c, d, e, f, h, k, l, m, n) { + var q = Z(); + try { + Tg(a, b, c, d, e, f, h, k, l, m, n); + } catch (r) { + Y(q); + if (r !== r + 0) + throw r; + X(1, 0); + } + } + function Oc(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) { + var B = Z(); + try { + return Ug(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A); + } catch (C) { + Y(B); + if (C !== C + 0) + throw C; + X(1, 0); + } + } + function le(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + Vg(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function sd(a, b) { + var c = Z(); + try { + return cg(a, b); + } catch (d) { + Y(c); + if (d !== d + 0) + throw d; + X(1, 0); + } + } + function wc(a, b, c, d, e) { + var f = Z(); + try { + return Ki(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function Pc(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) { + var F = Z(); + try { + return Wg(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D); + } catch (H) { + Y(F); + if (H !== H + 0) + throw H; + X(1, 0); + } + } + function mf(a, b, c, d, e, f, h, k, l, m) { + var n = Z(); + try { + Xg(a, b, c, d, e, f, h, k, l, m); + } catch (q) { + Y(n); + if (q !== q + 0) + throw q; + X(1, 0); + } + } + function cd(a, b, c, d, e, f, h) { + var k = Z(); + try { + return Yg(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function je(a, b, c, d, e, f, h, k, l, m, n) { + var q = Z(); + try { + Zg(a, b, c, d, e, f, h, k, l, m, n); + } catch (r) { + Y(q); + if (r !== r + 0) + throw r; + X(1, 0); + } + } + function ld(a, b, c, d, e, f) { + var h = Z(); + try { + return $g(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function Ie(a, b, c, d, e, f) { + var h = Z(); + try { + bh(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function ye(a, b, c, d, e, f, h, k, l, m, n, q, r, p) { + var u = Z(); + try { + ch(a, b, c, d, e, f, h, k, l, m, n, q, r, p); + } catch (y) { + Y(u); + if (y !== y + 0) + throw y; + X(1, 0); + } + } + function zf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B) { + var C = Z(); + try { + dh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B); + } catch (D) { + Y(C); + if (D !== D + 0) + throw D; + X(1, 0); + } + } + function ae(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) { + var B = Z(); + try { + eh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A); + } catch (C) { + Y(B); + if (C !== C + 0) + throw C; + X(1, 0); + } + } + function $d(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) { + var A = Z(); + try { + fh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y); + } catch (B) { + Y(A); + if (B !== B + 0) + throw B; + X(1, 0); + } + } + function be(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) { + var y = Z(); + try { + gh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u); + } catch (A) { + Y(y); + if (A !== A + 0) + throw A; + X(1, 0); + } + } + function Af(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) { + var H = Z(); + try { + hh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F); + } catch (K) { + Y(H); + if (K !== K + 0) + throw K; + X(1, 0); + } + } + function yf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C) { + var D = Z(); + try { + ih(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C); + } catch (F) { + Y(D); + if (F !== F + 0) + throw F; + X(1, 0); + } + } + function xf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B) { + var C = Z(); + try { + jh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B); + } catch (D) { + Y(C); + if (D !== D + 0) + throw D; + X(1, 0); + } + } + function Bf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) { + var H = Z(); + try { + kh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F); + } catch (K) { + Y(H); + if (K !== K + 0) + throw K; + X(1, 0); + } + } + function gf(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + lh(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function kf(a, b, c, d, e, f, h, k, l, m) { + var n = Z(); + try { + mh(a, b, c, d, e, f, h, k, l, m); + } catch (q) { + Y(n); + if (q !== q + 0) + throw q; + X(1, 0); + } + } + function ve(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + nh(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function qf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) { + var y = Z(); + try { + oh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u); + } catch (A) { + Y(y); + if (A !== A + 0) + throw A; + X(1, 0); + } + } + function wf(a, b, c, d, e, f, h, k, l, m) { + var n = Z(); + try { + qh(a, b, c, d, e, f, h, k, l, m); + } catch (q) { + Y(n); + if (q !== q + 0) + throw q; + X(1, 0); + } + } + function vf(a, b, c, d, e, f, h, k, l) { + var m = Z(); + try { + rh(a, b, c, d, e, f, h, k, l); + } catch (n) { + Y(m); + if (n !== n + 0) + throw n; + X(1, 0); + } + } + function sc(a, b, c, d, e, f, h) { + var k = Z(); + try { + return ah(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function Nd(a, b, c, d, e) { + var f = Z(); + try { + ph(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function wd(a, b, c) { + var d = Z(); + try { + return Li(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + return 0n; + } + } + function ze(a, b, c, d, e, f, h, k, l, m, n, q, r, p) { + var u = Z(); + try { + sh(a, b, c, d, e, f, h, k, l, m, n, q, r, p); + } catch (y) { + Y(u); + if (y !== y + 0) + throw y; + X(1, 0); + } + } + function Ge(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + uh(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function Xc(a, b, c, d, e, f, h) { + var k = Z(); + try { + return vh(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function ad(a, b, c, d, e, f) { + var h = Z(); + try { + return wh(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function De(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + xh(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function lf(a, b, c, d, e, f) { + var h = Z(); + try { + th(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function Qe(a, b, c, d, e, f, h, k, l, m, n) { + var q = Z(); + try { + yh(a, b, c, d, e, f, h, k, l, m, n); + } catch (r) { + Y(q); + if (r !== r + 0) + throw r; + X(1, 0); + } + } + function Ke(a, b, c, d, e, f, h, k) { + var l = Z(); + try { + Ah(a, b, c, d, e, f, h, k); + } catch (m) { + Y(l); + if (m !== m + 0) + throw m; + X(1, 0); + } + } + function af(a, b, c, d, e, f, h, k) { + var l = Z(); + try { + Bh(a, b, c, d, e, f, h, k); + } catch (m) { + Y(l); + if (m !== m + 0) + throw m; + X(1, 0); + } + } + function td(a, b, c, d) { + var e = Z(); + try { + return Ch(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function He(a, b, c, d, e, f, h, k, l, m) { + var n = Z(); + try { + Dh(a, b, c, d, e, f, h, k, l, m); + } catch (q) { + Y(n); + if (q !== q + 0) + throw q; + X(1, 0); + } + } + function pf(a, b, c, d, e, f, h, k, l) { + var m = Z(); + try { + Eh(a, b, c, d, e, f, h, k, l); + } catch (n) { + Y(m); + if (n !== n + 0) + throw n; + X(1, 0); + } + } + function Fe(a, b, c, d, e, f, h, k, l) { + var m = Z(); + try { + Fh(a, b, c, d, e, f, h, k, l); + } catch (n) { + Y(m); + if (n !== n + 0) + throw n; + X(1, 0); + } + } + function Ae(a, b, c, d, e, f, h, k, l, m) { + var n = Z(); + try { + Gh(a, b, c, d, e, f, h, k, l, m); + } catch (q) { + Y(n); + if (q !== q + 0) + throw q; + X(1, 0); + } + } + function ff(a, b, c, d, e, f) { + var h = Z(); + try { + Hh(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function he(a, b, c, d, e, f, h, k, l, m, n, q) { + var r = Z(); + try { + Ih(a, b, c, d, e, f, h, k, l, m, n, q); + } catch (p) { + Y(r); + if (p !== p + 0) + throw p; + X(1, 0); + } + } + function hd(a, b, c, d, e, f, h, k) { + var l = Z(); + try { + return Jh(a, b, c, d, e, f, h, k); + } catch (m) { + Y(l); + if (m !== m + 0) + throw m; + X(1, 0); + } + } + function ne(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) { + var y = Z(); + try { + Mi(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u); + } catch (A) { + Y(y); + if (A !== A + 0) + throw A; + X(1, 0); + } + } + function Be(a, b, c, d, e, f, h, k, l, m, n, q, r, p) { + var u = Z(); + try { + Kh(a, b, c, d, e, f, h, k, l, m, n, q, r, p); + } catch (y) { + Y(u); + if (y !== y + 0) + throw y; + X(1, 0); + } + } + function we(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) { + var y = Z(); + try { + Lh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u); + } catch (A) { + Y(y); + if (A !== A + 0) + throw A; + X(1, 0); + } + } + function Hd(a, b, c) { + var d = Z(); + try { + Mh(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + } + } + function vc(a, b, c, d) { + var e = Z(); + try { + return Oh(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function pc(a, b, c, d) { + var e = Z(); + try { + return Ph(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function ce(a, b, c, d, e, f, h, k, l, m) { + var n = Z(); + try { + Qh(a, b, c, d, e, f, h, k, l, m); + } catch (q) { + Y(n); + if (q !== q + 0) + throw q; + X(1, 0); + } + } + function Ee(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F, H, K, Va, Wa, Xa) { + var Qi = Z(); + try { + Rh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F, H, K, Va, Wa, Xa); + } catch (Ya) { + Y(Qi); + if (Ya !== Ya + 0) + throw Ya; + X(1, 0); + } + } + function $e(a, b, c, d, e, f) { + var h = Z(); + try { + Sh(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function Rc(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + return Th(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function Od(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + Uh(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function se(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) { + var H = Z(); + try { + Vh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F); + } catch (K) { + Y(H); + if (K !== K + 0) + throw K; + X(1, 0); + } + } + function Yd(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + Wh(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function hf(a, b, c, d, e, f, h, k, l, m, n, q, r, p) { + var u = Z(); + try { + Xh(a, b, c, d, e, f, h, k, l, m, n, q, r, p); + } catch (y) { + Y(u); + if (y !== y + 0) + throw y; + X(1, 0); + } + } + function re(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) { + var F = Z(); + try { + Zh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D); + } catch (H) { + Y(F); + if (H !== H + 0) + throw H; + X(1, 0); + } + } + function pe(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) { + var B = Z(); + try { + ai(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A); + } catch (C) { + Y(B); + if (C !== C + 0) + throw C; + X(1, 0); + } + } + function qe(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C) { + var D = Z(); + try { + Yh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C); + } catch (F) { + Y(D); + if (F !== F + 0) + throw F; + X(1, 0); + } + } + function Le(a, b, c, d, e, f, h, k) { + var l = Z(); + try { + bi(a, b, c, d, e, f, h, k); + } catch (m) { + Y(l); + if (m !== m + 0) + throw m; + X(1, 0); + } + } + function xe(a, b, c, d, e, f, h, k, l, m, n) { + var q = Z(); + try { + di(a, b, c, d, e, f, h, k, l, m, n); + } catch (r) { + Y(q); + if (r !== r + 0) + throw r; + X(1, 0); + } + } + function Mc(a, b, c, d, e, f, h, k, l, m, n) { + var q = Z(); + try { + return ei(a, b, c, d, e, f, h, k, l, m, n); + } catch (r) { + Y(q); + if (r !== r + 0) + throw r; + X(1, 0); + } + } + function Qc(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) { + var F = Z(); + try { + return fi(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D); + } catch (H) { + Y(F); + if (H !== H + 0) + throw H; + X(1, 0); + } + } + function Sd(a, b, c, d, e) { + var f = Z(); + try { + gi(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function ge(a, b, c, d, e, f, h, k, l, m, n, q) { + var r = Z(); + try { + Ag(a, b, c, d, e, f, h, k, l, m, n, q); + } catch (p) { + Y(r); + if (p !== p + 0) + throw p; + X(1, 0); + } + } + function Pe(a, b, c, d, e, f, h, k, l, m) { + var n = Z(); + try { + hi(a, b, c, d, e, f, h, k, l, m); + } catch (q) { + Y(n); + if (q !== q + 0) + throw q; + X(1, 0); + } + } + function Me(a, b, c, d, e) { + var f = Z(); + try { + ii(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function Ye(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + Ji(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function pd(a, b, c, d, e) { + var f = Z(); + try { + return ji(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function Ad(a, b, c, d) { + var e = Z(); + try { + return Ni(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + return 0n; + } + } + function Je(a, b, c, d, e, f, h) { + var k = Z(); + try { + ki(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function qd(a, b, c, d, e, f) { + var h = Z(); + try { + return li(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function ud(a, b, c, d, e, f) { + var h = Z(); + try { + return mi(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function Se(a, b, c, d, e, f, h, k, l) { + var m = Z(); + try { + ni(a, b, c, d, e, f, h, k, l); + } catch (n) { + Y(m); + if (n !== n + 0) + throw n; + X(1, 0); + } + } + function Ld(a, b, c, d) { + var e = Z(); + try { + Nh(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function Zc(a, b, c, d, e, f, h, k) { + var l = Z(); + try { + return oi(a, b, c, d, e, f, h, k); + } catch (m) { + Y(l); + if (m !== m + 0) + throw m; + X(1, 0); + } + } + function Ec(a, b, c, d, e, f) { + var h = Z(); + try { + return pi(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function fd(a, b, c, d, e, f) { + var h = Z(); + try { + return qi(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function Sc(a, b, c, d, e, f, h, k, l, m, n, q) { + var r = Z(); + try { + return ri(a, b, c, d, e, f, h, k, l, m, n, q); + } catch (p) { + Y(r); + if (p !== p + 0) + throw p; + X(1, 0); + } + } + function bd(a, b, c, d, e, f, h, k) { + var l = Z(); + try { + return si(a, b, c, d, e, f, h, k); + } catch (m) { + Y(l); + if (m !== m + 0) + throw m; + X(1, 0); + } + } + function Vc(a, b, c, d, e, f, h, k, l, m, n) { + var q = Z(); + try { + return ti(a, b, c, d, e, f, h, k, l, m, n); + } catch (r) { + Y(q); + if (r !== r + 0) + throw r; + X(1, 0); + } + } + function gd(a, b, c, d, e, f, h) { + var k = Z(); + try { + return ui(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function Uc(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + return vi(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function od(a, b, c, d, e, f, h) { + var k = Z(); + try { + return wi(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function rd(a, b, c, d, e, f, h) { + var k = Z(); + try { + return xi(a, b, c, d, e, f, h); + } catch (l) { + Y(k); + if (l !== l + 0) + throw l; + X(1, 0); + } + } + function Bd(a, b, c) { + var d = Z(); + try { + return yi(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + return 0n; + } + } + function nd(a, b, c, d) { + var e = Z(); + try { + return zi(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function Gd(a, b, c, d) { + var e = Z(); + try { + Bi(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function Cc(a, b, c, d) { + var e = Z(); + try { + return Ai(a, b, c, d); + } catch (f) { + Y(e); + if (f !== f + 0) + throw f; + X(1, 0); + } + } + function tf(a, b, c, d, e) { + var f = Z(); + try { + Ci(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function qc(a, b, c, d, e) { + var f = Z(); + try { + return Di(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function rc(a, b, c, d, e, f) { + var h = Z(); + try { + return Ei(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function Te(a, b, c, d, e, f, h, k, l, m, n, q) { + var r = Z(); + try { + Fi(a, b, c, d, e, f, h, k, l, m, n, q); + } catch (p) { + Y(r); + if (p !== p + 0) + throw p; + X(1, 0); + } + } + function bf(a, b, c, d, e, f, h, k, l, m, n, q, r) { + var p = Z(); + try { + Gi(a, b, c, d, e, f, h, k, l, m, n, q, r); + } catch (u) { + Y(p); + if (u !== u + 0) + throw u; + X(1, 0); + } + } + function te(a, b, c, d, e, f, h, k, l, m, n, q) { + var r = Z(); + try { + Eg(a, b, c, d, e, f, h, k, l, m, n, q); + } catch (p) { + Y(r); + if (p !== p + 0) + throw p; + X(1, 0); + } + } + function $c(a, b, c, d, e) { + var f = Z(); + try { + return Hi(a, b, c, d, e); + } catch (h) { + Y(f); + if (h !== h + 0) + throw h; + X(1, 0); + } + } + function vd(a) { + var b = Z(); + try { + return eg(a); + } catch (c) { + Y(b); + if (c !== c + 0) + throw c; + X(1, 0); + return 0n; + } + } + function Wc(a, b, c, d, e, f) { + var h = Z(); + try { + return dg(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function Gc(a, b, c, d, e, f) { + var h = Z(); + try { + return ci(a, b, c, d, e, f); + } catch (k) { + Y(h); + if (k !== k + 0) + throw k; + X(1, 0); + } + } + function oe(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) { + var A = Z(); + try { + $h(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y); + } catch (B) { + Y(A); + if (B !== B + 0) + throw B; + X(1, 0); + } + } + function uc(a, b, c) { + var d = Z(); + try { + return qg(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + } + } + function oc(a, b, c) { + var d = Z(); + try { + return sg(a, b, c); + } catch (e) { + Y(d); + if (e !== e + 0) + throw e; + X(1, 0); + } + } + function Df() { + var a = U; + a = Object.assign({}, a); + var b = (c) => (d) => c(d) >>> 0; + a.Fd = b(a.Fd); + a.he = b(a.he); + a.ne = b(a.ne); + a.oe = ((c) => () => c() >>> 0)(a.oe); + return a; + } + g.stackSave = () => Z(); + g.stackRestore = (a) => Y(a); + g.stackAlloc = (a) => Ef(a); + g.UTF8ToString = J; + g.stringToUTF8 = (a, b, c) => M(a, E, b, c); + g.lengthBytesUTF8 = bb; + var Oi; + Fa = function Pi() { + Oi || Ri(); + Oi || (Fa = Pi); + }; + function Ri() { + if (!(0 < Da)) { + if (g.preRun) + for ("function" == typeof g.preRun && (g.preRun = [g.preRun]); g.preRun.length; ) { + var a = g.preRun.shift(); + Aa.unshift(a); + } + for (; 0 < Aa.length; ) + Aa.shift()(g); + if (!(0 < Da || Oi || (Oi = true, g.calledRun = true, x))) { + for (; 0 < Ba.length; ) + Ba.shift()(g); + for (aa(g); 0 < Ca.length; ) + Ca.shift()(g); + } + } + } + Ri(); + return readyPromise; + }; + })(); + if (typeof exports === "object" && typeof module === "object") + module.exports = ortWasm; + else if (typeof define === "function" && define["amd"]) + define([], () => ortWasm); + } +}); + +// nodejs-ignore:worker_threads +var require_worker_threads = __commonJS({ + "nodejs-ignore:worker_threads"() { + } +}); + +// nodejs-ignore:perf_hooks +var require_perf_hooks = __commonJS({ + "nodejs-ignore:perf_hooks"() { + } +}); + +// nodejs-ignore:os +var os_exports = {}; +__export(os_exports, { + cpus: () => cpus2 +}); +var cpus2; +var init_os = __esm({ + "nodejs-ignore:os"() { + cpus2 = void 0; + } +}); + +// web/lib/wasm/binding/ort-wasm-simd-threaded.jsep.js +var require_ort_wasm_simd_threaded_jsep = __commonJS({ + "web/lib/wasm/binding/ort-wasm-simd-threaded.jsep.js"(exports, module) { + "use strict"; + var ortWasmThreaded = (() => { + var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0; + if (typeof __filename !== "undefined") + _scriptDir = _scriptDir || __filename; + return function(moduleArg = {}) { + function d() { + l.buffer != p.buffer && t(); + return p; + } + function v() { + l.buffer != p.buffer && t(); + return aa; + } + function z() { + l.buffer != p.buffer && t(); + return ba; + } + function A() { + l.buffer != p.buffer && t(); + return ca; + } + function da() { + l.buffer != p.buffer && t(); + return ea; + } + var B = moduleArg, fa, C; + B.ready = new Promise((a, b) => { + fa = a; + C = b; + }); + "use strict"; + B.jsepInit = (a, b, c, e, f, h, k, q) => { + B.Qb = a; + B.wb = b; + B.yb = c; + B.jb = e; + B.xb = f; + B.Ea = h; + B.zb = k; + B.Ab = q; + b = (n, m, r) => (...w) => { + const x = D, g = m?.(); + w = n(...w); + const u = m?.(); + g !== u && (n = u, r(g), m = r = null); + return D != x ? ha() : w; + }; + c = (n) => async (...m) => { + try { + if (B.bb) + throw Error("Session already started"); + const r = B.bb = { Fb: m[0], errors: [] }, w = await n(...m); + if (B.bb !== r) + throw Error("Session mismatch"); + a.flush(); + const x = r.errors; + if (0 < x.length) { + let g = await Promise.all(x); + g = g.filter((u) => u); + if (0 < g.length) + throw Error(g.join("\n")); + } + return w; + } finally { + B.bb = null; + } + }; + B._OrtRun = c(b(B._OrtRun, () => B._OrtRun, (n) => B._OrtRun = n)); + B._OrtRunWithBinding = c(b(B._OrtRunWithBinding, () => B._OrtRunWithBinding, (n) => B._OrtRunWithBinding = n)); + B._OrtBindInput = b(B._OrtBindInput, () => B._OrtBindInput, (n) => B._OrtBindInput = n); + B.jsepRegisterBuffer = (n, m, r, w) => a.registerBuffer(n, m, r, w); + B.jsepUnregisterBuffers = (n) => { + a.unregisterBuffers(n); + }; + B.jsepGetBuffer = (n) => a.getBuffer(n); + B.jsepCreateDownloader = (n, m, r) => a.createDownloader(n, m, r); + }; + var ia = Object.assign({}, B), ja = "./this.program", E = (a, b) => { + throw b; + }, ka = "object" == typeof window, F = "function" == typeof importScripts, G = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, H = B.ENVIRONMENT_IS_PTHREAD || false, I = ""; + function la(a) { + return B.locateFile ? B.locateFile(a, I) : I + a; + } + var ma, J, na; + if (G) { + var fs = (init_fs(), __toCommonJS(fs_exports)), oa = (init_path(), __toCommonJS(path_exports)); + I = F ? oa.dirname(I) + "/" : __dirname + "/"; + ma = (b, c) => { + b = b.startsWith("file://") ? new URL(b) : oa.normalize(b); + return fs.readFileSync(b, c ? void 0 : "utf8"); + }; + na = (b) => { + b = ma(b, true); + b.buffer || (b = new Uint8Array(b)); + return b; + }; + J = (b, c, e, f = true) => { + b = b.startsWith("file://") ? new URL(b) : oa.normalize(b); + fs.readFile(b, f ? void 0 : "utf8", (h, k) => { + h ? e(h) : c(f ? k.buffer : k); + }); + }; + !B.thisProgram && 1 < process.argv.length && (ja = process.argv[1].replace(/\\/g, "/")); + process.argv.slice(2); + E = (b, c) => { + process.exitCode = b; + throw c; + }; + B.inspect = () => "[Emscripten Module object]"; + let a; + try { + a = require_worker_threads(); + } catch (b) { + throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'), b; + } + global.Worker = a.Worker; + } else if (ka || F) + F ? I = self.location.href : "undefined" != typeof document && document.currentScript && (I = document.currentScript.src), typeof _scriptDir !== "undefined" && _scriptDir && (I = _scriptDir), 0 !== I.indexOf("blob:") ? I = I.substr(0, I.replace(/[?#].*/, "").lastIndexOf("/") + 1) : I = "", G || (ma = (a) => { + var b = new XMLHttpRequest(); + b.open("GET", a, false); + b.send(null); + return b.responseText; + }, F && (na = (a) => { + var b = new XMLHttpRequest(); + b.open("GET", a, false); + b.responseType = "arraybuffer"; + b.send(null); + return new Uint8Array(b.response); + }), J = (a, b, c) => { + var e = new XMLHttpRequest(); + e.open("GET", a, true); + e.responseType = "arraybuffer"; + e.onload = () => { + 200 == e.status || 0 == e.status && e.response ? b(e.response) : c(); + }; + e.onerror = c; + e.send(null); + }); + G && "undefined" == typeof performance && (global.performance = require_perf_hooks().performance); + var pa = console.log.bind(console), qa = console.error.bind(console); + G && (pa = (...a) => fs.writeSync(1, a.join(" ") + "\n"), qa = (...a) => fs.writeSync(2, a.join(" ") + "\n")); + var ra = B.print || pa, K = B.printErr || qa; + Object.assign(B, ia); + ia = null; + B.thisProgram && (ja = B.thisProgram); + B.quit && (E = B.quit); + var L; + B.wasmBinary && (L = B.wasmBinary); + var noExitRuntime = B.noExitRuntime || true; + "object" != typeof WebAssembly && M("no native wasm support detected"); + var l, N, sa, P = false, Q, p, aa, ba, ca, ea; + function t() { + var a = l.buffer; + B.HEAP8 = p = new Int8Array(a); + B.HEAP16 = new Int16Array(a); + B.HEAP32 = ba = new Int32Array(a); + B.HEAPU8 = aa = new Uint8Array(a); + B.HEAPU16 = new Uint16Array(a); + B.HEAPU32 = ca = new Uint32Array(a); + B.HEAPF32 = new Float32Array(a); + B.HEAPF64 = ea = new Float64Array(a); + } + var ta = B.INITIAL_MEMORY || 16777216; + 5242880 <= ta || M("INITIAL_MEMORY should be larger than STACK_SIZE, was " + ta + "! (STACK_SIZE=5242880)"); + if (H) + l = B.wasmMemory; + else if (B.wasmMemory) + l = B.wasmMemory; + else if (l = new WebAssembly.Memory({ initial: ta / 65536, maximum: 65536, shared: true }), !(l.buffer instanceof SharedArrayBuffer)) + throw K("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"), G && K("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"), Error("bad memory"); + t(); + ta = l.buffer.byteLength; + var ua = [], va = [], wa = [], xa = 0; + function ya() { + return noExitRuntime || 0 < xa; + } + var R = 0, za = null, S = null; + function Aa() { + R++; + B.monitorRunDependencies && B.monitorRunDependencies(R); + } + function Ba() { + R--; + B.monitorRunDependencies && B.monitorRunDependencies(R); + if (0 == R && (null !== za && (clearInterval(za), za = null), S)) { + var a = S; + S = null; + a(); + } + } + function M(a) { + if (B.onAbort) + B.onAbort(a); + a = "Aborted(" + a + ")"; + K(a); + P = true; + Q = 1; + a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info."); + C(a); + throw a; + } + function Ca(a) { + return a.startsWith("data:application/octet-stream;base64,"); + } + var T; + T = "ort-wasm-simd-threaded.wasm"; + Ca(T) || (T = la(T)); + function Da(a) { + if (a == T && L) + return new Uint8Array(L); + if (na) + return na(a); + throw "both async and sync fetching of the wasm failed"; + } + function Ea(a) { + if (!L && (ka || F)) { + if ("function" == typeof fetch && !a.startsWith("file://")) + return fetch(a, { credentials: "same-origin" }).then((b) => { + if (!b.ok) + throw "failed to load wasm binary file at '" + a + "'"; + return b.arrayBuffer(); + }).catch(() => Da(a)); + if (J) + return new Promise((b, c) => { + J(a, (e) => b(new Uint8Array(e)), c); + }); + } + return Promise.resolve().then(() => Da(a)); + } + function Fa(a, b, c) { + return Ea(a).then((e) => WebAssembly.instantiate(e, b)).then((e) => e).then(c, (e) => { + K("failed to asynchronously prepare wasm: " + e); + M(e); + }); + } + function Ga(a, b) { + var c = T; + return L || "function" != typeof WebAssembly.instantiateStreaming || Ca(c) || c.startsWith("file://") || G || "function" != typeof fetch ? Fa(c, a, b) : fetch(c, { credentials: "same-origin" }).then((e) => WebAssembly.instantiateStreaming(e, a).then(b, function(f) { + K("wasm streaming compile failed: " + f); + K("falling back to ArrayBuffer instantiation"); + return Fa(c, a, b); + })); + } + var U, Ha = { + 906828: (a) => { + B.Ea("Abs", a, void 0); + }, + 906879: (a) => { + B.Ea("Neg", a, void 0); + }, + 906930: (a) => { + B.Ea("Floor", a, void 0); + }, + 906983: (a) => { + B.Ea("Ceil", a, void 0); + }, + 907035: (a) => { + B.Ea("Reciprocal", a, void 0); + }, + 907093: (a) => { + B.Ea("Sqrt", a, void 0); + }, + 907145: (a) => { + B.Ea("Exp", a, void 0); + }, + 907196: (a) => { + B.Ea("Erf", a, void 0); + }, + 907247: (a) => { + B.Ea("Sigmoid", a, void 0); + }, + 907302: (a) => { + B.Ea("Log", a, void 0); + }, + 907353: (a) => { + B.Ea("Sin", a, void 0); + }, + 907404: (a) => { + B.Ea("Cos", a, void 0); + }, + 907455: (a) => { + B.Ea("Tan", a, void 0); + }, + 907506: (a) => { + B.Ea("Asin", a, void 0); + }, + 907558: (a) => { + B.Ea( + "Acos", + a, + void 0 + ); + }, + 907610: (a) => { + B.Ea("Atan", a, void 0); + }, + 907662: (a) => { + B.Ea("Sinh", a, void 0); + }, + 907714: (a) => { + B.Ea("Cosh", a, void 0); + }, + 907766: (a) => { + B.Ea("Asinh", a, void 0); + }, + 907819: (a) => { + B.Ea("Acosh", a, void 0); + }, + 907872: (a) => { + B.Ea("Atanh", a, void 0); + }, + 907925: (a) => { + B.Ea("Tanh", a, void 0); + }, + 907977: (a) => { + B.Ea("Not", a, void 0); + }, + 908028: (a, b, c) => { + B.Ea("ClipV10", a, { min: b, max: c }); + }, + 908100: (a) => { + B.Ea("Clip", a, void 0); + }, + 908152: (a, b) => { + B.Ea("Elu", a, { alpha: b }); + }, + 908210: (a) => { + B.Ea("Relu", a, void 0); + }, + 908262: (a, b) => { + B.Ea("LeakyRelu", a, { alpha: b }); + }, + 908326: (a, b) => { + B.Ea("ThresholdedRelu", a, { alpha: b }); + }, + 908396: (a, b) => { + B.Ea("Cast", a, { to: b }); + }, + 908454: (a) => { + B.Ea("Add", a, void 0); + }, + 908505: (a) => { + B.Ea("Sub", a, void 0); + }, + 908556: (a) => { + B.Ea("Mul", a, void 0); + }, + 908607: (a) => { + B.Ea("Div", a, void 0); + }, + 908658: (a) => { + B.Ea("Pow", a, void 0); + }, + 908709: (a) => { + B.Ea("Equal", a, void 0); + }, + 908762: (a) => { + B.Ea("Greater", a, void 0); + }, + 908817: (a) => { + B.Ea("GreaterOrEqual", a, void 0); + }, + 908879: (a) => { + B.Ea("Less", a, void 0); + }, + 908931: (a) => { + B.Ea("LessOrEqual", a, void 0); + }, + 908990: (a, b, c, e, f) => { + B.Ea("ReduceMean", a, { + keepDims: !!b, + noopWithEmptyAxes: !!c, + axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] + }); + }, + 909154: (a, b, c, e, f) => { + B.Ea("ReduceMax", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] }); + }, + 909317: (a, b, c, e, f) => { + B.Ea("ReduceMin", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] }); + }, + 909480: (a, b, c, e, f) => { + B.Ea("ReduceProd", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] }); + }, + 909644: (a, b, c, e, f) => { + B.Ea("ReduceSum", a, { + keepDims: !!b, + noopWithEmptyAxes: !!c, + axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] + }); + }, + 909807: (a, b, c, e, f) => { + B.Ea("ReduceL1", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] }); + }, + 909969: (a, b, c, e, f) => { + B.Ea("ReduceL2", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] }); + }, + 910131: (a, b, c, e, f) => { + B.Ea("ReduceLogSum", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] }); + }, + 910297: (a, b, c, e, f) => { + B.Ea("ReduceSumSquare", a, { + keepDims: !!b, + noopWithEmptyAxes: !!c, + axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] + }); + }, + 910466: (a, b, c, e, f) => { + B.Ea("ReduceLogSumExp", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] }); + }, + 910635: (a) => { + B.Ea("Where", a, void 0); + }, + 910688: (a, b, c) => { + B.Ea("Transpose", a, { perm: b ? Array.from(z().subarray(c >>> 0, c + b >>> 0)) : [] }); + }, + 910801: (a, b, c, e, f, h, k, q, n, m) => { + B.Ea("Conv", a, { format: n ? "NHWC" : "NCHW", auto_pad: b, dilations: [c], group: e, kernel_shape: [f], pads: [h, k], strides: [q], w_is_const: () => !!d()[m >>> 0] }); + }, + 911029: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u) => { + B.Ea("Conv", a, { format: g ? "NHWC" : "NCHW", auto_pad: b, dilations: [c, e], group: f, kernel_shape: [h, k], pads: [q, n, m, r], strides: [w, x], w_is_const: () => !!d()[u >>> 0] }); + }, + 911288: (a, b, c, e, f, h, k, q, n, m) => { + B.Ea("Conv", a, { format: n ? "NHWC" : "NCHW", auto_pad: b, dilations: [c], group: e, kernel_shape: [f], pads: [h, k], strides: [q], w_is_const: () => !!d()[m >>> 0] }); + }, + 911516: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u) => { + B.Ea("Conv", a, { format: g ? "NHWC" : "NCHW", auto_pad: b, dilations: [c, e], group: f, kernel_shape: [ + h, + k + ], pads: [q, n, m, r], strides: [w, x], w_is_const: () => !!d()[u >>> 0] }); + }, + 911775: (a, b, c, e, f, h, k, q, n, m, r, w, x, g) => { + B.Ea("ConvTranspose", a, { format: n ? "NHWC" : "NCHW", autoPad: b, dilations: [c], group: e, kernel_shape: [f], pads: [h, k], strides: [q], wIsConst: () => !!d()[m >>> 0], outputPadding: r ? Array.from(z().subarray(w >>> 0, w + r >>> 0)) : [], outputShape: x ? Array.from(z().subarray(g >>> 0, g + x >>> 0)) : [] }); + }, + 912155: (a, b, c, e, f, h, k, q, n, m, r, w, x) => { + B.Ea("ConvTranspose", a, { format: q ? "NHWC" : "NCHW", autoPad: b, dilations: Array.from(z().subarray(c >>> 0, c + 2 >>> 0)), group: e, kernelShape: Array.from(z().subarray(f >>> 0, f + 2 >>> 0)), pads: Array.from(z().subarray(h >>> 0, h + 4 >>> 0)), strides: Array.from(z().subarray(k >>> 0, k + 2 >>> 0)), wIsConst: () => !!d()[n >>> 0], outputPadding: 0 < m ? Array.from(z().subarray(r >>> 0, r + m >>> 0)) : [], outputShape: 0 < w ? Array.from(z().subarray(x >>> 0, x + w >>> 0)) : [] }); + }, + 912678: (a, b, c, e, f, h, k, q, n, m, r, w, x, g) => { + B.Ea("ConvTranspose", a, { format: n ? "NHWC" : "NCHW", autoPad: b, dilations: [c], group: e, kernel_shape: [f], pads: [h, k], strides: [q], wIsConst: () => !!d()[m >>> 0], outputPadding: r ? Array.from(z().subarray(w >>> 0, w + r >>> 0)) : [], outputShape: x ? Array.from(z().subarray(g >>> 0, g + x >>> 0)) : [] }); + }, + 913058: (a, b, c, e, f, h, k, q, n, m, r, w, x) => { + B.Ea("ConvTranspose", a, { format: q ? "NHWC" : "NCHW", autoPad: b, dilations: Array.from(z().subarray(c >>> 0, c + 2 >>> 0)), group: e, kernelShape: Array.from(z().subarray(f >>> 0, f + 2 >>> 0)), pads: Array.from(z().subarray(h >>> 0, h + 4 >>> 0)), strides: Array.from(z().subarray(k >>> 0, k + 2 >>> 0)), wIsConst: () => !!d()[n >>> 0], outputPadding: 0 < m ? Array.from(z().subarray(r >>> 0, r + m >>> 0)) : [], outputShape: 0 < w ? Array.from(z().subarray(x >>> 0, x + w >>> 0)) : [] }); + }, + 913581: (a, b) => { + B.Ea("GlobalAveragePool", a, { format: b ? "NHWC" : "NCHW" }); + }, + 913672: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u, y) => { + B.Ea("AveragePool", a, { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: e, storage_order: f, dilations: [h, k], kernel_shape: [q, n], pads: [m, r, w, x], strides: [g, u] }); + }, + 913956: (a, b) => { + B.Ea("GlobalAveragePool", a, { format: b ? "NHWC" : "NCHW" }); + }, + 914047: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u, y) => { + B.Ea("AveragePool", a, { + format: y ? "NHWC" : "NCHW", + auto_pad: b, + ceil_mode: c, + count_include_pad: e, + storage_order: f, + dilations: [h, k], + kernel_shape: [q, n], + pads: [m, r, w, x], + strides: [g, u] + }); + }, + 914331: (a, b) => { + B.Ea("GlobalMaxPool", a, { format: b ? "NHWC" : "NCHW" }); + }, + 914418: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u, y) => { + B.Ea("MaxPool", a, { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: e, storage_order: f, dilations: [h, k], kernel_shape: [q, n], pads: [m, r, w, x], strides: [g, u] }); + }, + 914698: (a, b) => { + B.Ea("GlobalMaxPool", a, { format: b ? "NHWC" : "NCHW" }); + }, + 914785: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u, y) => { + B.Ea( + "MaxPool", + a, + { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: e, storage_order: f, dilations: [h, k], kernel_shape: [q, n], pads: [m, r, w, x], strides: [g, u] } + ); + }, + 915065: (a, b, c, e, f) => { + B.Ea("Gemm", a, { alpha: b, beta: c, transA: e, transB: f }); + }, + 915169: (a) => { + B.Ea("MatMul", a, void 0); + }, + 915223: (a, b, c, e) => { + B.Ea("ArgMax", a, { keepDims: !!b, selectLastIndex: !!c, axis: e }); + }, + 915331: (a, b, c, e) => { + B.Ea("ArgMin", a, { keepDims: !!b, selectLastIndex: !!c, axis: e }); + }, + 915439: (a, b) => { + B.Ea("Softmax", a, { axis: b }); + }, + 915502: (a, b) => { + B.Ea("Concat", a, { axis: b }); + }, + 915562: (a, b, c, e, f) => { + B.Ea("Split", a, { axis: b, numOutputs: c, splitSizes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] }); + }, + 915707: (a) => { + B.Ea("Expand", a, void 0); + }, + 915761: (a, b) => { + B.Ea("Gather", a, { axis: Number(b) }); + }, + 915832: (a, b) => { + B.Ea("GatherElements", a, { axis: Number(b) }); + }, + 915911: (a, b, c, e, f, h, k, q, n, m, r) => { + B.Ea("Resize", a, { antialias: b, axes: c ? Array.from(z().subarray(e >>> 0, e + c >>> 0)) : [], coordinateTransformMode: V(f), cubicCoeffA: h, excludeOutside: k, extrapolationValue: q, keepAspectRatioPolicy: V(n), mode: V(m), nearestMode: V(r) }); + }, + 916262: (a, b, c, e, f, h, k) => { + B.Ea("Slice", a, { starts: b ? Array.from(z().subarray(c >>> 0, c + b >>> 0)) : [], ends: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [], axes: h ? Array.from(z().subarray(k >>> 0, k + h >>> 0)) : [] }); + }, + 916493: (a) => { + B.Ea("Tile", a, void 0); + }, + 916545: (a, b, c) => { + B.Ea("LayerNormalization", a, { axis: Number(b), epsilon: Number(c) }); + }, + 916652: (a, b, c) => { + B.Ea("InstanceNormalization", a, { epsilon: b, format: c ? "NHWC" : "NCHW" }); + }, + 916766: (a, b, c) => { + B.Ea("InstanceNormalization", a, { epsilon: b, format: c ? "NHWC" : "NCHW" }); + }, + 916880: (a) => { + B.Ea( + "Range", + a, + void 0 + ); + }, + 916933: (a, b) => { + B.Ea("Einsum", a, { equation: V(b) }); + }, + 917014: (a, b, c, e, f) => { + B.Ea("Pad", a, { mode: b, value: c, pads: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] }); + }, + 917146: (a) => { + B.Ea("Gelu", a, void 0); + }, + 917198: (a) => { + B.Ea("BiasAdd", a, void 0); + }, + 917253: (a) => { + B.Ea("BiasSplitGelu", a, void 0); + }, + 917314: (a, b) => { + B.Ea("SkipLayerNormalization", a, { epsilon: b }); + }, + 917395: (a) => { + B.zb(a); + }, + 917429: (a, b) => B.Ab(a, b, B.bb.Fb, B.bb.errors), + 917541: (a) => B.wb(a), + 917574: (a) => B.yb(a), + 917606: (a, b, c) => { + B.jb(a, b, c, true); + }, + 917645: (a, b, c) => { + B.jb(a, b, c); + } + }; + function Ia(a) { + this.name = "ExitStatus"; + this.message = `Program terminated with exit(${a})`; + this.status = a; + } + function Ja(a) { + a.terminate(); + a.onmessage = () => { + }; + } + function Ka(a) { + (a = W.Qa[a]) || M(); + W.Eb(a); + } + function La(a) { + var b = W.tb(); + if (!b) + return 6; + W.Ya.push(b); + W.Qa[a.Xa] = b; + b.Xa = a.Xa; + var c = { cmd: "run", start_routine: a.Gb, arg: a.rb, pthread_ptr: a.Xa }; + G && b.unref(); + b.postMessage(c, a.Mb); + return 0; + } + var Ma = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, Na = (a, b, c) => { + b >>>= 0; + var e = b + c; + for (c = b; a[c] && !(c >= e); ) + ++c; + if (16 < c - b && a.buffer && Ma) + return Ma.decode(a.buffer instanceof SharedArrayBuffer ? a.slice(b, c) : a.subarray(b, c)); + for (e = ""; b < c; ) { + var f = a[b++]; + if (f & 128) { + var h = a[b++] & 63; + if (192 == (f & 224)) + e += String.fromCharCode((f & 31) << 6 | h); + else { + var k = a[b++] & 63; + f = 224 == (f & 240) ? (f & 15) << 12 | h << 6 | k : (f & 7) << 18 | h << 12 | k << 6 | a[b++] & 63; + 65536 > f ? e += String.fromCharCode(f) : (f -= 65536, e += String.fromCharCode(55296 | f >> 10, 56320 | f & 1023)); + } + } else + e += String.fromCharCode(f); + } + return e; + }, V = (a, b) => (a >>>= 0) ? Na(v(), a, b) : ""; + function Oa(a) { + if (H) + return X(1, 1, a); + Q = a; + if (!ya()) { + W.Hb(); + if (B.onExit) + B.onExit(a); + P = true; + } + E(a, new Ia(a)); + } + var Qa = (a) => { + Q = a; + if (H) + throw Pa(a), "unwind"; + Oa(a); + }, W = { + ab: [], + Ya: [], + mb: [], + Qa: {}, + gb: function() { + H ? W.vb() : W.ub(); + }, + ub: function() { + ua.unshift(() => { + Aa(); + W.Bb(() => Ba()); + }); + }, + vb: function() { + W.receiveObjectTransfer = W.Db; + W.threadInitTLS = W.lb; + W.setExitStatus = W.kb; + noExitRuntime = false; + }, + kb: function(a) { + Q = a; + }, + Sb: ["$terminateWorker"], + Hb: function() { + for (var a of W.Ya) + Ja(a); + for (a of W.ab) + Ja(a); + W.ab = []; + W.Ya = []; + W.Qa = []; + }, + Eb: function(a) { + var b = a.Xa; + delete W.Qa[b]; + W.ab.push(a); + W.Ya.splice(W.Ya.indexOf(a), 1); + a.Xa = 0; + Ra(b); + }, + Db: function() { + }, + lb: function() { + W.mb.forEach((a) => a()); + }, + Cb: (a) => new Promise((b) => { + a.onmessage = (h) => { + h = h.data; + var k = h.cmd; + if (h.targetThread && h.targetThread != Sa()) { + var q = W.Qa[h.Rb]; + q ? q.postMessage(h, h.transferList) : K('Internal error! Worker sent a message "' + k + '" to target pthread ' + h.targetThread + ", but that thread no longer exists!"); + } else if ("checkMailbox" === k) + Ta(); + else if ("spawnThread" === k) + La(h); + else if ("cleanupThread" === k) + Ka(h.thread); + else if ("killThread" === k) + h = h.thread, k = W.Qa[h], delete W.Qa[h], Ja(k), Ra(h), W.Ya.splice( + W.Ya.indexOf(k), + 1 + ), k.Xa = 0; + else if ("cancelThread" === k) + W.Qa[h.thread].postMessage({ cmd: "cancel" }); + else if ("loaded" === k) + a.loaded = true, b(a); + else if ("alert" === k) + alert("Thread " + h.threadId + ": " + h.text); + else if ("setimmediate" === h.target) + a.postMessage(h); + else if ("callHandler" === k) + B[h.handler](...h.args); + else + k && K("worker sent an unknown command " + k); + }; + a.onerror = (h) => { + K("worker sent an error! " + h.filename + ":" + h.lineno + ": " + h.message); + throw h; + }; + G && (a.on("message", function(h) { + a.onmessage({ data: h }); + }), a.on("error", function(h) { + a.onerror(h); + })); + var c = [], e = ["onExit", "onAbort", "print", "printErr"], f; + for (f of e) + B.hasOwnProperty(f) && c.push(f); + a.postMessage({ cmd: "load", handlers: c, urlOrBlob: B.mainScriptUrlOrBlob || _scriptDir, wasmMemory: l, wasmModule: sa }); + }), + Bb: function(a) { + a(); + }, + qb: function() { + var a = la("ort-wasm-simd-threaded.worker.js"); + a = new Worker(a); + W.ab.push(a); + }, + tb: function() { + 0 == W.ab.length && (W.qb(), W.Cb(W.ab[0])); + return W.ab.pop(); + } + }; + B.PThread = W; + var Ua = (a) => { + for (; 0 < a.length; ) + a.shift()(B); + }; + B.establishStackSpace = function() { + var a = Sa(), b = z()[a + 52 >> 2 >>> 0]; + a = z()[a + 56 >> 2 >>> 0]; + Va(b, b - a); + Wa(b); + }; + function Pa(a) { + if (H) + return X(2, 0, a); + Qa(a); + } + B.invokeEntryPoint = function(a, b) { + a = Xa.apply(null, [a, b]); + ya() ? W.kb(a) : Ya(a); + }; + function Za(a) { + this.fb = a - 24; + this.pb = function(b) { + A()[this.fb + 4 >> 2 >>> 0] = b; + }; + this.ob = function(b) { + A()[this.fb + 8 >> 2 >>> 0] = b; + }; + this.gb = function(b, c) { + this.nb(); + this.pb(b); + this.ob(c); + }; + this.nb = function() { + A()[this.fb + 16 >> 2 >>> 0] = 0; + }; + } + var $a = 0, ab = 0; + function bb(a, b, c, e) { + return H ? X(3, 1, a, b, c, e) : cb(a, b, c, e); + } + function cb(a, b, c, e) { + a >>>= 0; + b >>>= 0; + c >>>= 0; + e >>>= 0; + if ("undefined" == typeof SharedArrayBuffer) + return K("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6; + var f = []; + if (H && 0 === f.length) + return bb(a, b, c, e); + a = { Gb: c, Xa: a, rb: e, Mb: f }; + return H ? (a.Ob = "spawnThread", postMessage(a, f), 0) : La(a); + } + function db(a, b, c) { + return H ? X(4, 1, a, b, c) : 0; + } + function eb(a, b) { + if (H) + return X(5, 1, a, b); + } + var fb = (a) => { + for (var b = 0, c = 0; c < a.length; ++c) { + var e = a.charCodeAt(c); + 127 >= e ? b++ : 2047 >= e ? b += 2 : 55296 <= e && 57343 >= e ? (b += 4, ++c) : b += 3; + } + return b; + }, gb = (a, b, c, e) => { + c >>>= 0; + if (!(0 < e)) + return 0; + var f = c; + e = c + e - 1; + for (var h = 0; h < a.length; ++h) { + var k = a.charCodeAt(h); + if (55296 <= k && 57343 >= k) { + var q = a.charCodeAt(++h); + k = 65536 + ((k & 1023) << 10) | q & 1023; + } + if (127 >= k) { + if (c >= e) + break; + b[c++ >>> 0] = k; + } else { + if (2047 >= k) { + if (c + 1 >= e) + break; + b[c++ >>> 0] = 192 | k >> 6; + } else { + if (65535 >= k) { + if (c + 2 >= e) + break; + b[c++ >>> 0] = 224 | k >> 12; + } else { + if (c + 3 >= e) + break; + b[c++ >>> 0] = 240 | k >> 18; + b[c++ >>> 0] = 128 | k >> 12 & 63; + } + b[c++ >>> 0] = 128 | k >> 6 & 63; + } + b[c++ >>> 0] = 128 | k & 63; + } + } + b[c >>> 0] = 0; + return c - f; + }, hb = (a, b, c) => gb(a, v(), b, c); + function ib(a, b) { + if (H) + return X(6, 1, a, b); + } + function jb(a, b, c) { + if (H) + return X(7, 1, a, b, c); + } + function kb(a, b, c) { + return H ? X(8, 1, a, b, c) : 0; + } + function lb(a, b) { + if (H) + return X(9, 1, a, b); + } + function mb(a, b, c) { + if (H) + return X(10, 1, a, b, c); + } + function nb(a, b, c, e) { + if (H) + return X(11, 1, a, b, c, e); + } + function ob(a, b, c, e) { + if (H) + return X(12, 1, a, b, c, e); + } + function pb(a, b, c, e) { + if (H) + return X(13, 1, a, b, c, e); + } + function qb(a) { + if (H) + return X(14, 1, a); + } + function rb(a, b) { + if (H) + return X(15, 1, a, b); + } + function sb(a, b, c) { + if (H) + return X(16, 1, a, b, c); + } + var tb = (a) => { + if (!P) + try { + if (a(), !ya()) + try { + H ? Ya(Q) : Qa(Q); + } catch (b) { + b instanceof Ia || "unwind" == b || E(1, b); + } + } catch (b) { + b instanceof Ia || "unwind" == b || E(1, b); + } + }; + function ub(a) { + a >>>= 0; + "function" === typeof Atomics.Nb && (Atomics.Nb(z(), a >> 2, a).value.then(Ta), a += 128, Atomics.store(z(), a >> 2, 1)); + } + B.__emscripten_thread_mailbox_await = ub; + function Ta() { + var a = Sa(); + a && (ub(a), tb(() => vb())); + } + B.checkMailbox = Ta; + var Y = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400), wb = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], xb = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; + function yb(a, b, c, e, f, h, k, q) { + return H ? X(17, 1, a, b, c, e, f, h, k, q) : -52; + } + function zb(a, b, c, e, f, h, k) { + if (H) + return X(18, 1, a, b, c, e, f, h, k); + } + var Bb = (a) => { + var b = fb(a) + 1, c = Ab(b); + c && hb(a, c, b); + return c; + }, Cb = [], Db = (a, b) => { + Cb.length = 0; + var c; + for (b >>= 2; c = v()[a++ >>> 0]; ) + b += 105 != c & b, Cb.push(105 == c ? z()[b >>> 0] : da()[b++ >>> 1]), ++b; + return Cb; + }, Fb = (a) => { + var b = Eb(); + a = a(); + Wa(b); + return a; + }; + function X(a, b) { + var c = arguments.length - 2, e = arguments; + return Fb(() => { + for (var f = Gb(8 * c), h = f >> 3, k = 0; k < c; k++) { + var q = e[2 + k]; + da()[h + k >>> 0] = q; + } + return Hb(a, c, f, b); + }); + } + var Ib = [], Jb = {}, Lb = () => { + if (!Kb) { + var a = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", _: ja || "./this.program" }, b; + for (b in Jb) + void 0 === Jb[b] ? delete a[b] : a[b] = Jb[b]; + var c = []; + for (b in a) + c.push(`${b}=${a[b]}`); + Kb = c; + } + return Kb; + }, Kb; + function Mb(a, b) { + if (H) + return X(19, 1, a, b); + a >>>= 0; + b >>>= 0; + var c = 0; + Lb().forEach(function(e, f) { + var h = b + c; + f = A()[a + 4 * f >> 2 >>> 0] = h; + for (h = 0; h < e.length; ++h) + d()[f++ >> 0 >>> 0] = e.charCodeAt(h); + d()[f >> 0 >>> 0] = 0; + c += e.length + 1; + }); + return 0; + } + function Nb(a, b) { + if (H) + return X(20, 1, a, b); + a >>>= 0; + b >>>= 0; + var c = Lb(); + A()[a >> 2 >>> 0] = c.length; + var e = 0; + c.forEach(function(f) { + e += f.length + 1; + }); + A()[b >> 2 >>> 0] = e; + return 0; + } + function Ob(a) { + return H ? X(21, 1, a) : 52; + } + function Pb(a, b, c, e) { + return H ? X(22, 1, a, b, c, e) : 52; + } + function Qb(a, b, c, e, f) { + return H ? X(23, 1, a, b, c, e, f) : 70; + } + var Rb = [null, [], []]; + function Tb(a, b, c, e) { + if (H) + return X(24, 1, a, b, c, e); + b >>>= 0; + c >>>= 0; + e >>>= 0; + for (var f = 0, h = 0; h < c; h++) { + var k = A()[b >> 2 >>> 0], q = A()[b + 4 >> 2 >>> 0]; + b += 8; + for (var n = 0; n < q; n++) { + var m = v()[k + n >>> 0], r = Rb[a]; + 0 === m || 10 === m ? ((1 === a ? ra : K)(Na(r, 0)), r.length = 0) : r.push(m); + } + f += q; + } + A()[e >> 2 >>> 0] = f; + return 0; + } + var Ub = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Vb = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + function Wb(a) { + var b = Array(fb(a) + 1); + gb(a, b, 0, b.length); + return b; + } + var Xb = (a, b) => { + d().set(a, b >>> 0); + }; + function Yb(a, b, c, e) { + function f(g, u, y) { + for (g = "number" == typeof g ? g.toString() : g || ""; g.length < u; ) + g = y[0] + g; + return g; + } + function h(g, u) { + return f(g, u, "0"); + } + function k(g, u) { + function y(Sb) { + return 0 > Sb ? -1 : 0 < Sb ? 1 : 0; + } + var O; + 0 === (O = y(g.getFullYear() - u.getFullYear())) && 0 === (O = y(g.getMonth() - u.getMonth())) && (O = y(g.getDate() - u.getDate())); + return O; + } + function q(g) { + switch (g.getDay()) { + case 0: + return new Date(g.getFullYear() - 1, 11, 29); + case 1: + return g; + case 2: + return new Date(g.getFullYear(), 0, 3); + case 3: + return new Date( + g.getFullYear(), + 0, + 2 + ); + case 4: + return new Date(g.getFullYear(), 0, 1); + case 5: + return new Date(g.getFullYear() - 1, 11, 31); + case 6: + return new Date(g.getFullYear() - 1, 11, 30); + } + } + function n(g) { + var u = g.Za; + for (g = new Date(new Date(g.$a + 1900, 0, 1).getTime()); 0 < u; ) { + var y = g.getMonth(), O = (Y(g.getFullYear()) ? Ub : Vb)[y]; + if (u > O - g.getDate()) + u -= O - g.getDate() + 1, g.setDate(1), 11 > y ? g.setMonth(y + 1) : (g.setMonth(0), g.setFullYear(g.getFullYear() + 1)); + else { + g.setDate(g.getDate() + u); + break; + } + } + y = new Date(g.getFullYear() + 1, 0, 4); + u = q(new Date( + g.getFullYear(), + 0, + 4 + )); + y = q(y); + return 0 >= k(u, g) ? 0 >= k(y, g) ? g.getFullYear() + 1 : g.getFullYear() : g.getFullYear() - 1; + } + a >>>= 0; + b >>>= 0; + c >>>= 0; + e >>>= 0; + var m = z()[e + 40 >> 2 >>> 0]; + e = { Kb: z()[e >> 2 >>> 0], Jb: z()[e + 4 >> 2 >>> 0], cb: z()[e + 8 >> 2 >>> 0], ib: z()[e + 12 >> 2 >>> 0], eb: z()[e + 16 >> 2 >>> 0], $a: z()[e + 20 >> 2 >>> 0], Wa: z()[e + 24 >> 2 >>> 0], Za: z()[e + 28 >> 2 >>> 0], Tb: z()[e + 32 >> 2 >>> 0], Ib: z()[e + 36 >> 2 >>> 0], Lb: m ? V(m) : "" }; + c = V(c); + m = { + "%c": "%a %b %d %H:%M:%S %Y", + "%D": "%m/%d/%y", + "%F": "%Y-%m-%d", + "%h": "%b", + "%r": "%I:%M:%S %p", + "%R": "%H:%M", + "%T": "%H:%M:%S", + "%x": "%m/%d/%y", + "%X": "%H:%M:%S", + "%Ec": "%c", + "%EC": "%C", + "%Ex": "%m/%d/%y", + "%EX": "%H:%M:%S", + "%Ey": "%y", + "%EY": "%Y", + "%Od": "%d", + "%Oe": "%e", + "%OH": "%H", + "%OI": "%I", + "%Om": "%m", + "%OM": "%M", + "%OS": "%S", + "%Ou": "%u", + "%OU": "%U", + "%OV": "%V", + "%Ow": "%w", + "%OW": "%W", + "%Oy": "%y" + }; + for (var r in m) + c = c.replace(new RegExp(r, "g"), m[r]); + var w = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), x = "January February March April May June July August September October November December".split(" "); + m = { "%a": (g) => w[g.Wa].substring(0, 3), "%A": (g) => w[g.Wa], "%b": (g) => x[g.eb].substring(0, 3), "%B": (g) => x[g.eb], "%C": (g) => h((g.$a + 1900) / 100 | 0, 2), "%d": (g) => h(g.ib, 2), "%e": (g) => f(g.ib, 2, " "), "%g": (g) => n(g).toString().substring(2), "%G": (g) => n(g), "%H": (g) => h(g.cb, 2), "%I": (g) => { + g = g.cb; + 0 == g ? g = 12 : 12 < g && (g -= 12); + return h(g, 2); + }, "%j": (g) => { + for (var u = 0, y = 0; y <= g.eb - 1; u += (Y(g.$a + 1900) ? Ub : Vb)[y++]) + ; + return h(g.ib + u, 3); + }, "%m": (g) => h(g.eb + 1, 2), "%M": (g) => h(g.Jb, 2), "%n": () => "\n", "%p": (g) => 0 <= g.cb && 12 > g.cb ? "AM" : "PM", "%S": (g) => h(g.Kb, 2), "%t": () => " ", "%u": (g) => g.Wa || 7, "%U": (g) => h(Math.floor((g.Za + 7 - g.Wa) / 7), 2), "%V": (g) => { + var u = Math.floor((g.Za + 7 - (g.Wa + 6) % 7) / 7); + 2 >= (g.Wa + 371 - g.Za - 2) % 7 && u++; + if (u) + 53 == u && (y = (g.Wa + 371 - g.Za) % 7, 4 == y || 3 == y && Y(g.$a) || (u = 1)); + else { + u = 52; + var y = (g.Wa + 7 - g.Za - 1) % 7; + (4 == y || 5 == y && Y(g.$a % 400 - 1)) && u++; + } + return h(u, 2); + }, "%w": (g) => g.Wa, "%W": (g) => h(Math.floor((g.Za + 7 - (g.Wa + 6) % 7) / 7), 2), "%y": (g) => (g.$a + 1900).toString().substring(2), "%Y": (g) => g.$a + 1900, "%z": (g) => { + g = g.Ib; + var u = 0 <= g; + g = Math.abs(g) / 60; + return (u ? "+" : "-") + String("0000" + (g / 60 * 100 + g % 60)).slice(-4); + }, "%Z": (g) => g.Lb, "%%": () => "%" }; + c = c.replace(/%%/g, "\0\0"); + for (r in m) + c.includes(r) && (c = c.replace(new RegExp(r, "g"), m[r](e))); + c = c.replace(/\0\0/g, "%"); + r = Wb(c); + if (r.length > b) + return 0; + Xb(r, a); + return r.length - 1; + } + function Zb(a) { + try { + a(); + } catch (b) { + M(b); + } + } + function $b(a) { + var b = {}, c; + for (c in a) + (function(e) { + var f = a[e]; + b[e] = "function" == typeof f ? function() { + ac.push(e); + try { + return f.apply(null, arguments); + } finally { + P || (ac.pop() === e || M(), D && 1 === Z && 0 === ac.length && (Z = 0, xa += 1, Zb(bc), "undefined" != typeof Fibers && Fibers.Ub())); + } + } : f; + })(c); + return b; + } + var Z = 0, D = null, cc = 0, ac = [], dc = {}, ec = {}, fc = 0, gc = null, hc = []; + function ha() { + return new Promise((a, b) => { + gc = { resolve: a, reject: b }; + }); + } + function ic() { + var a = Ab(65548), b = a + 12; + A()[a >> 2 >>> 0] = b; + A()[a + 4 >> 2 >>> 0] = b + 65536; + b = ac[0]; + var c = dc[b]; + void 0 === c && (c = fc++, dc[b] = c, ec[c] = b); + b = c; + z()[a + 8 >> 2 >>> 0] = b; + return a; + } + function jc() { + var a = z()[D + 8 >> 2 >>> 0]; + a = N[ec[a]]; + --xa; + return a(); + } + function kc(a) { + if (!P) { + if (0 === Z) { + var b = false, c = false; + a((e = 0) => { + if (!P && (cc = e, b = true, c)) { + Z = 2; + Zb(() => lc(D)); + "undefined" != typeof Browser && Browser.hb.sb && Browser.hb.resume(); + e = false; + try { + var f = jc(); + } catch (q) { + f = q, e = true; + } + var h = false; + if (!D) { + var k = gc; + k && (gc = null, (e ? k.reject : k.resolve)(f), h = true); + } + if (e && !h) + throw f; + } + }); + c = true; + b || (Z = 1, D = ic(), "undefined" != typeof Browser && Browser.hb.sb && Browser.hb.pause(), Zb(() => mc(D))); + } else + 2 === Z ? (Z = 0, Zb(nc), oc(D), D = null, hc.forEach((e) => tb(e))) : M(`invalid state: ${Z}`); + return cc; + } + } + function pc(a) { + return kc((b) => { + a().then(b); + }); + } + W.gb(); + var qc = [null, Oa, Pa, bb, db, eb, ib, jb, kb, lb, mb, nb, ob, pb, qb, rb, sb, yb, zb, Mb, Nb, Ob, Pb, Qb, Tb], tc = { + r: function(a, b, c) { + return pc(async () => { + await B.xb(a, b, c); + }); + }, + b: function(a, b, c) { + a >>>= 0; + new Za(a).gb(b >>> 0, c >>> 0); + $a = a; + ab++; + throw $a; + }, + O: function(a) { + rc(a >>> 0, !F, 1, !ka, 131072, false); + W.lb(); + }, + l: function(a) { + a >>>= 0; + H ? postMessage({ cmd: "cleanupThread", thread: a }) : Ka(a); + }, + I: cb, + i: db, + U: eb, + E: ib, + G: jb, + V: kb, + S: lb, + K: mb, + R: nb, + p: ob, + F: pb, + C: qb, + T: rb, + D: sb, + q: () => true, + A: function(a, b) { + a >>>= 0; + a == b >>> 0 ? setTimeout(() => Ta()) : H ? postMessage({ + targetThread: a, + cmd: "checkMailbox" + }) : (a = W.Qa[a]) && a.postMessage({ cmd: "checkMailbox" }); + }, + M: function() { + return -1; + }, + N: ub, + X: function(a) { + G && W.Qa[a >>> 0].ref(); + }, + u: function(a, b, c) { + a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN; + c >>>= 0; + a = new Date(1e3 * a); + z()[c >> 2 >>> 0] = a.getUTCSeconds(); + z()[c + 4 >> 2 >>> 0] = a.getUTCMinutes(); + z()[c + 8 >> 2 >>> 0] = a.getUTCHours(); + z()[c + 12 >> 2 >>> 0] = a.getUTCDate(); + z()[c + 16 >> 2 >>> 0] = a.getUTCMonth(); + z()[c + 20 >> 2 >>> 0] = a.getUTCFullYear() - 1900; + z()[c + 24 >> 2 >>> 0] = a.getUTCDay(); + a = (a.getTime() - Date.UTC( + a.getUTCFullYear(), + 0, + 1, + 0, + 0, + 0, + 0 + )) / 864e5 | 0; + z()[c + 28 >> 2 >>> 0] = a; + }, + v: function(a, b, c) { + a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN; + c >>>= 0; + a = new Date(1e3 * a); + z()[c >> 2 >>> 0] = a.getSeconds(); + z()[c + 4 >> 2 >>> 0] = a.getMinutes(); + z()[c + 8 >> 2 >>> 0] = a.getHours(); + z()[c + 12 >> 2 >>> 0] = a.getDate(); + z()[c + 16 >> 2 >>> 0] = a.getMonth(); + z()[c + 20 >> 2 >>> 0] = a.getFullYear() - 1900; + z()[c + 24 >> 2 >>> 0] = a.getDay(); + b = (Y(a.getFullYear()) ? wb : xb)[a.getMonth()] + a.getDate() - 1 | 0; + z()[c + 28 >> 2 >>> 0] = b; + z()[c + 36 >> 2 >>> 0] = -(60 * a.getTimezoneOffset()); + b = new Date( + a.getFullYear(), + 6, + 1 + ).getTimezoneOffset(); + var e = new Date(a.getFullYear(), 0, 1).getTimezoneOffset(); + a = (b != e && a.getTimezoneOffset() == Math.min(e, b)) | 0; + z()[c + 32 >> 2 >>> 0] = a; + }, + w: function(a) { + a >>>= 0; + var b = new Date(z()[a + 20 >> 2 >>> 0] + 1900, z()[a + 16 >> 2 >>> 0], z()[a + 12 >> 2 >>> 0], z()[a + 8 >> 2 >>> 0], z()[a + 4 >> 2 >>> 0], z()[a >> 2 >>> 0], 0), c = z()[a + 32 >> 2 >>> 0], e = b.getTimezoneOffset(), f = new Date(b.getFullYear(), 6, 1).getTimezoneOffset(), h = new Date(b.getFullYear(), 0, 1).getTimezoneOffset(), k = Math.min(h, f); + 0 > c ? z()[a + 32 >> 2 >>> 0] = Number(f != h && k == e) : 0 < c != (k == e) && (f = Math.max(h, f), b.setTime(b.getTime() + 6e4 * ((0 < c ? k : f) - e))); + z()[a + 24 >> 2 >>> 0] = b.getDay(); + c = (Y(b.getFullYear()) ? wb : xb)[b.getMonth()] + b.getDate() - 1 | 0; + z()[a + 28 >> 2 >>> 0] = c; + z()[a >> 2 >>> 0] = b.getSeconds(); + z()[a + 4 >> 2 >>> 0] = b.getMinutes(); + z()[a + 8 >> 2 >>> 0] = b.getHours(); + z()[a + 12 >> 2 >>> 0] = b.getDate(); + z()[a + 16 >> 2 >>> 0] = b.getMonth(); + z()[a + 20 >> 2 >>> 0] = b.getYear(); + a = b.getTime() / 1e3; + return sc((U = a, 1 <= +Math.abs(U) ? 0 < U ? +Math.floor(U / 4294967296) >>> 0 : ~~+Math.ceil((U - +(~~U >>> 0)) / 4294967296) >>> 0 : 0)), a >>> 0; + }, + s: yb, + t: zb, + z: function(a, b, c) { + function e(m) { + return (m = m.toTimeString().match(/\(([A-Za-z ]+)\)$/)) ? m[1] : "GMT"; + } + a >>>= 0; + b >>>= 0; + c >>>= 0; + var f = (/* @__PURE__ */ new Date()).getFullYear(), h = new Date(f, 0, 1), k = new Date(f, 6, 1); + f = h.getTimezoneOffset(); + var q = k.getTimezoneOffset(), n = Math.max(f, q); + A()[a >> 2 >>> 0] = 60 * n; + z()[b >> 2 >>> 0] = Number(f != q); + a = e(h); + b = e(k); + a = Bb(a); + b = Bb(b); + q < f ? (A()[c >> 2 >>> 0] = a, A()[c + 4 >> 2 >>> 0] = b) : (A()[c >> 2 >>> 0] = b, A()[c + 4 >> 2 >>> 0] = a); + }, + d: () => { + M(""); + }, + c: function(a, b, c) { + a >>>= 0; + b = Db(b >>> 0, c >>> 0); + return Ha[a].apply(null, b); + }, + k: function(a, b, c) { + a >>>= 0; + b = Db(b >>> 0, c >>> 0); + return Ha[a].apply(null, b); + }, + m: function() { + }, + j: function() { + return Date.now(); + }, + W: () => { + xa += 1; + throw "unwind"; + }, + B: function() { + return 4294901760; + }, + f: () => performance.timeOrigin + performance.now(), + g: function() { + return G ? (init_os(), __toCommonJS(os_exports)).cpus().length : navigator.hardwareConcurrency; + }, + L: function(a, b, c, e) { + W.Pb = b >>> 0; + Ib.length = c; + b = e >>> 0 >> 3; + for (e = 0; e < c; e++) + Ib[e] = da()[b + e >>> 0]; + return (0 > a ? Ha[-a - 1] : qc[a]).apply(null, Ib); + }, + y: function(a) { + a >>>= 0; + var b = v().length; + if (a <= b || 4294901760 < a) + return false; + for (var c = 1; 4 >= c; c *= 2) { + var e = b * (1 + 0.2 / c); + e = Math.min(e, a + 100663296); + var f = Math; + e = Math.max(a, e); + a: { + f = f.min.call(f, 4294901760, e + (65536 - e % 65536) % 65536) - l.buffer.byteLength + 65535 >>> 16; + try { + l.grow(f); + t(); + var h = 1; + break a; + } catch (k) { + } + h = void 0; + } + if (h) + return true; + } + return false; + }, + P: Mb, + Q: Nb, + H: Qa, + h: Ob, + o: Pb, + x: Qb, + n: Tb, + a: l || B.wasmMemory, + J: Yb, + e: function(a, b, c, e) { + return Yb(a >>> 0, b >>> 0, c >>> 0, e >>> 0); + } + }; + (function() { + function a(c, e) { + c = c.exports; + c = $b(c); + N = c = uc(c); + W.mb.push(N.Da); + va.unshift(N.Y); + sa = e; + Ba(); + return c; + } + var b = { a: tc }; + Aa(); + if (B.instantiateWasm) + try { + return B.instantiateWasm(b, a); + } catch (c) { + K("Module.instantiateWasm callback failed with error: " + c), C(c); + } + Ga(b, function(c) { + a(c.instance, c.module); + }).catch(C); + return {}; + })(); + B._OrtInit = (a, b) => (B._OrtInit = N.Z)(a, b); + B._OrtGetLastError = (a, b) => (B._OrtGetLastError = N._)(a, b); + B._OrtCreateSessionOptions = (a, b, c, e, f, h, k, q, n, m) => (B._OrtCreateSessionOptions = N.$)(a, b, c, e, f, h, k, q, n, m); + B._OrtAppendExecutionProvider = (a, b) => (B._OrtAppendExecutionProvider = N.aa)(a, b); + B._OrtAddFreeDimensionOverride = (a, b, c) => (B._OrtAddFreeDimensionOverride = N.ba)(a, b, c); + B._OrtAddSessionConfigEntry = (a, b, c) => (B._OrtAddSessionConfigEntry = N.ca)(a, b, c); + B._OrtReleaseSessionOptions = (a) => (B._OrtReleaseSessionOptions = N.da)(a); + B._OrtCreateSession = (a, b, c) => (B._OrtCreateSession = N.ea)(a, b, c); + B._OrtReleaseSession = (a) => (B._OrtReleaseSession = N.fa)(a); + B._OrtGetInputOutputCount = (a, b, c) => (B._OrtGetInputOutputCount = N.ga)(a, b, c); + B._OrtGetInputName = (a, b) => (B._OrtGetInputName = N.ha)(a, b); + B._OrtGetOutputName = (a, b) => (B._OrtGetOutputName = N.ia)(a, b); + B._OrtFree = (a) => (B._OrtFree = N.ja)(a); + B._OrtCreateTensor = (a, b, c, e, f, h) => (B._OrtCreateTensor = N.ka)(a, b, c, e, f, h); + B._OrtGetTensorData = (a, b, c, e, f) => (B._OrtGetTensorData = N.la)(a, b, c, e, f); + B._OrtReleaseTensor = (a) => (B._OrtReleaseTensor = N.ma)(a); + B._OrtCreateRunOptions = (a, b, c, e) => (B._OrtCreateRunOptions = N.na)(a, b, c, e); + B._OrtAddRunConfigEntry = (a, b, c) => (B._OrtAddRunConfigEntry = N.oa)(a, b, c); + B._OrtReleaseRunOptions = (a) => (B._OrtReleaseRunOptions = N.pa)(a); + B._OrtCreateBinding = (a) => (B._OrtCreateBinding = N.qa)(a); + B._OrtBindInput = (a, b, c) => (B._OrtBindInput = N.ra)(a, b, c); + B._OrtBindOutput = (a, b, c, e) => (B._OrtBindOutput = N.sa)(a, b, c, e); + B._OrtClearBoundOutputs = (a) => (B._OrtClearBoundOutputs = N.ta)(a); + B._OrtReleaseBinding = (a) => (B._OrtReleaseBinding = N.ua)(a); + B._OrtRunWithBinding = (a, b, c, e, f) => (B._OrtRunWithBinding = N.va)(a, b, c, e, f); + B._OrtRun = (a, b, c, e, f, h, k, q) => (B._OrtRun = N.wa)(a, b, c, e, f, h, k, q); + B._OrtEndProfiling = (a) => (B._OrtEndProfiling = N.xa)(a); + B._JsepOutput = (a, b, c) => (B._JsepOutput = N.ya)(a, b, c); + B._JsepGetNodeName = (a) => (B._JsepGetNodeName = N.za)(a); + var Sa = B._pthread_self = () => (Sa = B._pthread_self = N.Aa)(), Ab = B._malloc = (a) => (Ab = B._malloc = N.Ba)(a), oc = B._free = (a) => (oc = B._free = N.Ca)(a); + B.__emscripten_tls_init = () => (B.__emscripten_tls_init = N.Da)(); + var rc = B.__emscripten_thread_init = (a, b, c, e, f, h) => (rc = B.__emscripten_thread_init = N.Fa)(a, b, c, e, f, h); + B.__emscripten_thread_crashed = () => (B.__emscripten_thread_crashed = N.Ga)(); + var Hb = (a, b, c, e) => (Hb = N.Ha)(a, b, c, e), Ra = (a) => (Ra = N.Ia)(a), Ya = B.__emscripten_thread_exit = (a) => (Ya = B.__emscripten_thread_exit = N.Ja)(a), vb = B.__emscripten_check_mailbox = () => (vb = B.__emscripten_check_mailbox = N.Ka)(), sc = (a) => (sc = N.La)(a), Va = (a, b) => (Va = N.Ma)(a, b), Eb = () => (Eb = N.Na)(), Wa = (a) => (Wa = N.Oa)(a), Gb = (a) => (Gb = N.Pa)(a), Xa = B.dynCall_ii = (a, b) => (Xa = B.dynCall_ii = N.Ra)(a, b), mc = (a) => (mc = N.Sa)(a), bc = () => (bc = N.Ta)(), lc = (a) => (lc = N.Ua)(a), nc = () => (nc = N.Va)(); + B.___start_em_js = 917678; + B.___stop_em_js = 917839; + function uc(a) { + a = Object.assign({}, a); + var b = (e) => () => e() >>> 0, c = (e) => (f) => e(f) >>> 0; + a.__errno_location = b(a.__errno_location); + a.pthread_self = b(a.pthread_self); + a.malloc = c(a.malloc); + a.stackSave = b(a.stackSave); + a.stackAlloc = c(a.stackAlloc); + return a; + } + B.keepRuntimeAlive = ya; + B.wasmMemory = l; + B.stackAlloc = Gb; + B.stackSave = Eb; + B.stackRestore = Wa; + B.UTF8ToString = V; + B.stringToUTF8 = hb; + B.lengthBytesUTF8 = fb; + B.ExitStatus = Ia; + B.PThread = W; + var vc; + S = function wc() { + vc || xc(); + vc || (S = wc); + }; + function xc() { + function a() { + if (!vc && (vc = true, B.calledRun = true, !P)) { + H || Ua(va); + fa(B); + if (B.onRuntimeInitialized) + B.onRuntimeInitialized(); + if (!H) { + if (B.postRun) + for ("function" == typeof B.postRun && (B.postRun = [B.postRun]); B.postRun.length; ) { + var b = B.postRun.shift(); + wa.unshift(b); + } + Ua(wa); + } + } + } + if (!(0 < R)) + if (H) + fa(B), H || Ua(va), startWorker(B); + else { + if (B.preRun) + for ("function" == typeof B.preRun && (B.preRun = [B.preRun]); B.preRun.length; ) + ua.unshift(B.preRun.shift()); + Ua(ua); + 0 < R || (B.setStatus ? (B.setStatus("Running..."), setTimeout(function() { + setTimeout( + function() { + B.setStatus(""); + }, + 1 + ); + a(); + }, 1)) : a()); + } + } + if (B.preInit) + for ("function" == typeof B.preInit && (B.preInit = [B.preInit]); 0 < B.preInit.length; ) + B.preInit.pop()(); + xc(); + return moduleArg.ready; + }; + })(); + if (typeof exports === "object" && typeof module === "object") + module.exports = ortWasmThreaded; + else if (typeof define === "function" && define["amd"]) + define([], () => ortWasmThreaded); + } +}); + +// web/lib/wasm/binding/ort-wasm-threaded.worker.js +var require_ort_wasm_threaded_worker = __commonJS({ + "web/lib/wasm/binding/ort-wasm-threaded.worker.js"(exports, module) { + module.exports = '"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}ortWasmThreaded(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,/*isMainBrowserThread=*/0,/*isMainRuntimeThread=*/0,/*canBlock=*/1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;\n'; + } +}); + +// web/lib/wasm/wasm-factory.ts +var ortWasmFactory, ortWasmFactoryThreaded, wasm, initialized, initializing, aborted, isMultiThreadSupported, isSimdSupported, getWasmFileName, initializeWebAssembly, getInstance; +var init_wasm_factory = __esm({ + "web/lib/wasm/wasm-factory.ts"() { + "use strict"; + init_node_path(); + if (false) { + ortWasmFactory = null; + } else { + ortWasmFactory = false ? null : require_ort_wasm_simd_jsep(); + } + ortWasmFactoryThreaded = true ? false ? null : require_ort_wasm_simd_threaded_jsep() : ortWasmFactory; + initialized = false; + initializing = false; + aborted = false; + isMultiThreadSupported = (numThreads) => { + if (numThreads === 1) { + return false; + } + if (typeof SharedArrayBuffer === "undefined") { + if (typeof self !== "undefined" && !self.crossOriginIsolated) { + console.warn( + "env.wasm.numThreads is set to " + numThreads + ", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info." + ); + } + return false; + } + if (typeof process !== "undefined" && process.versions && process.versions.node) { + console.warn( + "env.wasm.numThreads is set to " + numThreads + ", however, currently onnxruntime-web does not support multi-threads in Node.js. Please consider using onnxruntime-node for performance critical scenarios." + ); + } + try { + if (typeof MessageChannel !== "undefined") { + new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)); + } + return WebAssembly.validate(new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 4, + 1, + 96, + 0, + 0, + 3, + 2, + 1, + 0, + 5, + 4, + 1, + 3, + 1, + 1, + 10, + 11, + 1, + 9, + 0, + 65, + 0, + 254, + 16, + 2, + 0, + 26, + 11 + ])); + } catch (e) { + return false; + } + }; + isSimdSupported = () => { + try { + return WebAssembly.validate(new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 4, + 1, + 96, + 0, + 0, + 3, + 2, + 1, + 0, + 10, + 30, + 1, + 28, + 0, + 65, + 0, + 253, + 15, + 253, + 12, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 253, + 186, + 1, + 26, + 11 + ])); + } catch (e) { + return false; + } + }; + getWasmFileName = (useSimd, useThreads) => { + if (useSimd) { + if (false) { + return "ort-training-wasm-simd.wasm"; + } + return useThreads ? "ort-wasm-simd-threaded.wasm" : "ort-wasm-simd.wasm"; + } else { + return useThreads ? "ort-wasm-threaded.wasm" : "ort-wasm.wasm"; + } + }; + initializeWebAssembly = async (flags) => { + if (initialized) { + return Promise.resolve(); + } + if (initializing) { + throw new Error("multiple calls to 'initializeWebAssembly()' detected."); + } + if (aborted) { + throw new Error("previous call to 'initializeWebAssembly()' failed."); + } + initializing = true; + const timeout = flags.initTimeout; + const numThreads = flags.numThreads; + const simd = flags.simd; + const useThreads = isMultiThreadSupported(numThreads); + const useSimd = simd && isSimdSupported(); + const wasmPaths = flags.wasmPaths; + const wasmPrefixOverride = typeof wasmPaths === "string" ? wasmPaths : void 0; + const wasmFileName = getWasmFileName(useSimd, useThreads); + const wasmPathOverride = typeof wasmPaths === "object" ? wasmPaths[wasmFileName] : void 0; + let isTimeout = false; + const tasks = []; + if (timeout > 0) { + tasks.push(new Promise((resolve) => { + setTimeout(() => { + isTimeout = true; + resolve(); + }, timeout); + })); + } + tasks.push(new Promise((resolve, reject) => { + const factory = useThreads ? ortWasmFactoryThreaded : ortWasmFactory; + const config = { + locateFile: (fileName, scriptDirectory) => { + if (useThreads && fileName.endsWith(".worker.js") && typeof Blob !== "undefined") { + return URL.createObjectURL(new Blob( + [ + // This require() function is handled by esbuild plugin to load file content as string. + // eslint-disable-next-line @typescript-eslint/no-require-imports + require_ort_wasm_threaded_worker() + ], + { type: "text/javascript" } + )); + } + if (fileName.endsWith(".wasm")) { + if (wasmPathOverride) { + return wasmPathOverride; + } + const prefix = wasmPrefixOverride ?? scriptDirectory; + if (true) { + if (wasmFileName === "ort-wasm-simd.wasm") { + return prefix + "ort-wasm-simd.jsep.wasm"; + } else if (wasmFileName === "ort-wasm-simd-threaded.wasm") { + return prefix + "ort-wasm-simd-threaded.jsep.wasm"; + } + } + return prefix + wasmFileName; + } + return scriptDirectory + fileName; + } + }; + if (useThreads) { + config.numThreads = numThreads; + if (typeof Blob === "undefined") { + config.mainScriptUrlOrBlob = join(__dirname, "ort-wasm-threaded.js"); + } else { + const scriptSourceCode = `var ortWasmThreaded=${factory.toString()};`; + config.mainScriptUrlOrBlob = new Blob([scriptSourceCode], { type: "text/javascript" }); + } + } + factory(config).then( + // wasm module initialized successfully + (module) => { + initializing = false; + initialized = true; + wasm = module; + resolve(); + }, + // wasm module failed to initialize + (what) => { + initializing = false; + aborted = true; + reject(what); + } + ); + })); + await Promise.race(tasks); + if (isTimeout) { + throw new Error(`WebAssembly backend initializing failed due to timeout: ${timeout}ms`); + } + }; + getInstance = () => { + if (initialized && wasm) { + return wasm; + } + throw new Error("WebAssembly is not initialized yet."); + }; + } +}); + +// web/lib/wasm/wasm-utils.ts +var allocWasmString, iterateExtraOptions, checkLastError; +var init_wasm_utils = __esm({ + "web/lib/wasm/wasm-utils.ts"() { + "use strict"; + init_wasm_factory(); + allocWasmString = (data, allocs) => { + const wasm2 = getInstance(); + const dataLength = wasm2.lengthBytesUTF8(data) + 1; + const dataOffset = wasm2._malloc(dataLength); + wasm2.stringToUTF8(data, dataOffset, dataLength); + allocs.push(dataOffset); + return dataOffset; + }; + iterateExtraOptions = (options, prefix, seen, handler) => { + if (typeof options == "object" && options !== null) { + if (seen.has(options)) { + throw new Error("Circular reference in options"); + } else { + seen.add(options); + } + } + Object.entries(options).forEach(([key, value]) => { + const name = prefix ? prefix + key : key; + if (typeof value === "object") { + iterateExtraOptions(value, name + ".", seen, handler); + } else if (typeof value === "string" || typeof value === "number") { + handler(name, value.toString()); + } else if (typeof value === "boolean") { + handler(name, value ? "1" : "0"); + } else { + throw new Error(`Can't handle extra config type: ${typeof value}`); + } + }); + }; + checkLastError = (message) => { + const wasm2 = getInstance(); + const stack = wasm2.stackSave(); + try { + const paramsOffset = wasm2.stackAlloc(8); + wasm2._OrtGetLastError(paramsOffset, paramsOffset + 4); + const errorCode = wasm2.HEAP32[paramsOffset / 4]; + const errorMessagePointer = wasm2.HEAPU32[paramsOffset / 4 + 1]; + const errorMessage = errorMessagePointer ? wasm2.UTF8ToString(errorMessagePointer) : ""; + throw new Error(`${message} ERROR_CODE: ${errorCode}, ERROR_MESSAGE: ${errorMessage}`); + } finally { + wasm2.stackRestore(stack); + } + }; + } +}); + +// web/lib/wasm/run-options.ts +var setRunOptions; +var init_run_options = __esm({ + "web/lib/wasm/run-options.ts"() { + "use strict"; + init_wasm_factory(); + init_wasm_utils(); + setRunOptions = (options) => { + const wasm2 = getInstance(); + let runOptionsHandle = 0; + const allocs = []; + const runOptions = options || {}; + try { + if (options?.logSeverityLevel === void 0) { + runOptions.logSeverityLevel = 2; + } else if (typeof options.logSeverityLevel !== "number" || !Number.isInteger(options.logSeverityLevel) || options.logSeverityLevel < 0 || options.logSeverityLevel > 4) { + throw new Error(`log serverity level is not valid: ${options.logSeverityLevel}`); + } + if (options?.logVerbosityLevel === void 0) { + runOptions.logVerbosityLevel = 0; + } else if (typeof options.logVerbosityLevel !== "number" || !Number.isInteger(options.logVerbosityLevel)) { + throw new Error(`log verbosity level is not valid: ${options.logVerbosityLevel}`); + } + if (options?.terminate === void 0) { + runOptions.terminate = false; + } + let tagDataOffset = 0; + if (options?.tag !== void 0) { + tagDataOffset = allocWasmString(options.tag, allocs); + } + runOptionsHandle = wasm2._OrtCreateRunOptions( + runOptions.logSeverityLevel, + runOptions.logVerbosityLevel, + !!runOptions.terminate, + tagDataOffset + ); + if (runOptionsHandle === 0) { + checkLastError("Can't create run options."); + } + if (options?.extra !== void 0) { + iterateExtraOptions(options.extra, "", /* @__PURE__ */ new WeakSet(), (key, value) => { + const keyDataOffset = allocWasmString(key, allocs); + const valueDataOffset = allocWasmString(value, allocs); + if (wasm2._OrtAddRunConfigEntry(runOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError(`Can't set a run config entry: ${key} - ${value}.`); + } + }); + } + return [runOptionsHandle, allocs]; + } catch (e) { + if (runOptionsHandle !== 0) { + wasm2._OrtReleaseRunOptions(runOptionsHandle); + } + allocs.forEach((alloc) => wasm2._free(alloc)); + throw e; + } + }; + } +}); + +// web/lib/wasm/session-options.ts +var getGraphOptimzationLevel, getExecutionMode, appendDefaultOptions, setExecutionProviders, setSessionOptions; +var init_session_options = __esm({ + "web/lib/wasm/session-options.ts"() { + "use strict"; + init_wasm_factory(); + init_wasm_utils(); + getGraphOptimzationLevel = (graphOptimizationLevel) => { + switch (graphOptimizationLevel) { + case "disabled": + return 0; + case "basic": + return 1; + case "extended": + return 2; + case "all": + return 99; + default: + throw new Error(`unsupported graph optimization level: ${graphOptimizationLevel}`); + } + }; + getExecutionMode = (executionMode) => { + switch (executionMode) { + case "sequential": + return 0; + case "parallel": + return 1; + default: + throw new Error(`unsupported execution mode: ${executionMode}`); + } + }; + appendDefaultOptions = (options) => { + if (!options.extra) { + options.extra = {}; + } + if (!options.extra.session) { + options.extra.session = {}; + } + const session = options.extra.session; + if (!session.use_ort_model_bytes_directly) { + session.use_ort_model_bytes_directly = "1"; + } + if (options.executionProviders && options.executionProviders.some((ep) => (typeof ep === "string" ? ep : ep.name) === "webgpu")) { + options.enableMemPattern = false; + } + }; + setExecutionProviders = (sessionOptionsHandle, executionProviders, allocs) => { + for (const ep of executionProviders) { + let epName = typeof ep === "string" ? ep : ep.name; + switch (epName) { + case "webnn": + epName = "WEBNN"; + if (typeof ep !== "string") { + const webnnOptions = ep; + if (webnnOptions?.deviceType) { + const keyDataOffset = allocWasmString("deviceType", allocs); + const valueDataOffset = allocWasmString(webnnOptions.deviceType, allocs); + if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError(`Can't set a session config entry: 'deviceType' - ${webnnOptions.deviceType}.`); + } + } + if (webnnOptions?.numThreads) { + let numThreads = webnnOptions.numThreads; + if (typeof numThreads != "number" || !Number.isInteger(numThreads) || numThreads < 0) { + numThreads = 0; + } + const keyDataOffset = allocWasmString("numThreads", allocs); + const valueDataOffset = allocWasmString(numThreads.toString(), allocs); + if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError(`Can't set a session config entry: 'numThreads' - ${webnnOptions.numThreads}.`); + } + } + if (webnnOptions?.powerPreference) { + const keyDataOffset = allocWasmString("powerPreference", allocs); + const valueDataOffset = allocWasmString(webnnOptions.powerPreference, allocs); + if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError( + `Can't set a session config entry: 'powerPreference' - ${webnnOptions.powerPreference}.` + ); + } + } + } + break; + case "webgpu": + epName = "JS"; + if (typeof ep !== "string") { + const webgpuOptions = ep; + if (webgpuOptions?.preferredLayout) { + if (webgpuOptions.preferredLayout !== "NCHW" && webgpuOptions.preferredLayout !== "NHWC") { + throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${webgpuOptions.preferredLayout}`); + } + const keyDataOffset = allocWasmString("preferredLayout", allocs); + const valueDataOffset = allocWasmString(webgpuOptions.preferredLayout, allocs); + if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError( + `Can't set a session config entry: 'preferredLayout' - ${webgpuOptions.preferredLayout}.` + ); + } + } + } + break; + case "wasm": + case "cpu": + continue; + default: + throw new Error(`not supported execution provider: ${epName}`); + } + const epNameDataOffset = allocWasmString(epName, allocs); + if (getInstance()._OrtAppendExecutionProvider(sessionOptionsHandle, epNameDataOffset) !== 0) { + checkLastError(`Can't append execution provider: ${epName}.`); + } + } + }; + setSessionOptions = (options) => { + const wasm2 = getInstance(); + let sessionOptionsHandle = 0; + const allocs = []; + const sessionOptions = options || {}; + appendDefaultOptions(sessionOptions); + try { + const graphOptimizationLevel = getGraphOptimzationLevel(sessionOptions.graphOptimizationLevel ?? "all"); + const executionMode = getExecutionMode(sessionOptions.executionMode ?? "sequential"); + const logIdDataOffset = typeof sessionOptions.logId === "string" ? allocWasmString(sessionOptions.logId, allocs) : 0; + const logSeverityLevel = sessionOptions.logSeverityLevel ?? 2; + if (!Number.isInteger(logSeverityLevel) || logSeverityLevel < 0 || logSeverityLevel > 4) { + throw new Error(`log serverity level is not valid: ${logSeverityLevel}`); + } + const logVerbosityLevel = sessionOptions.logVerbosityLevel ?? 0; + if (!Number.isInteger(logVerbosityLevel) || logVerbosityLevel < 0 || logVerbosityLevel > 4) { + throw new Error(`log verbosity level is not valid: ${logVerbosityLevel}`); + } + const optimizedModelFilePathOffset = typeof sessionOptions.optimizedModelFilePath === "string" ? allocWasmString(sessionOptions.optimizedModelFilePath, allocs) : 0; + sessionOptionsHandle = wasm2._OrtCreateSessionOptions( + graphOptimizationLevel, + !!sessionOptions.enableCpuMemArena, + !!sessionOptions.enableMemPattern, + executionMode, + !!sessionOptions.enableProfiling, + 0, + logIdDataOffset, + logSeverityLevel, + logVerbosityLevel, + optimizedModelFilePathOffset + ); + if (sessionOptionsHandle === 0) { + checkLastError("Can't create session options."); + } + if (sessionOptions.executionProviders) { + setExecutionProviders(sessionOptionsHandle, sessionOptions.executionProviders, allocs); + } + if (sessionOptions.enableGraphCapture !== void 0) { + if (typeof sessionOptions.enableGraphCapture !== "boolean") { + throw new Error(`enableGraphCapture must be a boolean value: ${sessionOptions.enableGraphCapture}`); + } + const keyDataOffset = allocWasmString("enableGraphCapture", allocs); + const valueDataOffset = allocWasmString(sessionOptions.enableGraphCapture.toString(), allocs); + if (wasm2._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError( + `Can't set a session config entry: 'enableGraphCapture' - ${sessionOptions.enableGraphCapture}.` + ); + } + } + if (sessionOptions.freeDimensionOverrides) { + for (const [name, value] of Object.entries(sessionOptions.freeDimensionOverrides)) { + if (typeof name !== "string") { + throw new Error(`free dimension override name must be a string: ${name}`); + } + if (typeof value !== "number" || !Number.isInteger(value) || value < 0) { + throw new Error(`free dimension override value must be a non-negative integer: ${value}`); + } + const nameOffset = allocWasmString(name, allocs); + if (wasm2._OrtAddFreeDimensionOverride(sessionOptionsHandle, nameOffset, value) !== 0) { + checkLastError(`Can't set a free dimension override: ${name} - ${value}.`); + } + } + } + if (sessionOptions.extra !== void 0) { + iterateExtraOptions(sessionOptions.extra, "", /* @__PURE__ */ new WeakSet(), (key, value) => { + const keyDataOffset = allocWasmString(key, allocs); + const valueDataOffset = allocWasmString(value, allocs); + if (wasm2._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) { + checkLastError(`Can't set a session config entry: ${key} - ${value}.`); + } + }); + } + return [sessionOptionsHandle, allocs]; + } catch (e) { + if (sessionOptionsHandle !== 0) { + wasm2._OrtReleaseSessionOptions(sessionOptionsHandle); + } + allocs.forEach((alloc) => wasm2._free(alloc)); + throw e; + } + }; + } +}); + +// web/lib/wasm/wasm-common.ts +var tensorDataTypeStringToEnum, tensorDataTypeEnumToString, getTensorElementSize, tensorTypeToTypedArrayConstructor, logLevelStringToEnum, isGpuBufferSupportedType, dataLocationStringToEnum; +var init_wasm_common = __esm({ + "web/lib/wasm/wasm-common.ts"() { + "use strict"; + tensorDataTypeStringToEnum = (type) => { + switch (type) { + case "int8": + return 3 /* int8 */; + case "uint8": + return 2 /* uint8 */; + case "bool": + return 9 /* bool */; + case "int16": + return 5 /* int16 */; + case "uint16": + return 4 /* uint16 */; + case "int32": + return 6 /* int32 */; + case "uint32": + return 12 /* uint32 */; + case "float16": + return 10 /* float16 */; + case "float32": + return 1 /* float */; + case "float64": + return 11 /* double */; + case "string": + return 8 /* string */; + case "int64": + return 7 /* int64 */; + case "uint64": + return 13 /* uint64 */; + default: + throw new Error(`unsupported data type: ${type}`); + } + }; + tensorDataTypeEnumToString = (typeProto) => { + switch (typeProto) { + case 3 /* int8 */: + return "int8"; + case 2 /* uint8 */: + return "uint8"; + case 9 /* bool */: + return "bool"; + case 5 /* int16 */: + return "int16"; + case 4 /* uint16 */: + return "uint16"; + case 6 /* int32 */: + return "int32"; + case 12 /* uint32 */: + return "uint32"; + case 10 /* float16 */: + return "float16"; + case 1 /* float */: + return "float32"; + case 11 /* double */: + return "float64"; + case 8 /* string */: + return "string"; + case 7 /* int64 */: + return "int64"; + case 13 /* uint64 */: + return "uint64"; + default: + throw new Error(`unsupported data type: ${typeProto}`); + } + }; + getTensorElementSize = (dateType) => [void 0, 4, 1, 1, 2, 2, 4, 8, void 0, 1, 2, 8, 4, 8, void 0, void 0, void 0][dateType]; + tensorTypeToTypedArrayConstructor = (type) => { + switch (type) { + case "float16": + return typeof Float16Array !== "undefined" && Float16Array.from ? Float16Array : Uint16Array; + case "float32": + return Float32Array; + case "uint8": + return Uint8Array; + case "int8": + return Int8Array; + case "uint16": + return Uint16Array; + case "int16": + return Int16Array; + case "int32": + return Int32Array; + case "bool": + return Uint8Array; + case "float64": + return Float64Array; + case "uint32": + return Uint32Array; + case "int64": + return BigInt64Array; + case "uint64": + return BigUint64Array; + default: + throw new Error(`unsupported type: ${type}`); + } + }; + logLevelStringToEnum = (logLevel) => { + switch (logLevel) { + case "verbose": + return 0; + case "info": + return 1; + case "warning": + return 2; + case "error": + return 3; + case "fatal": + return 4; + default: + throw new Error(`unsupported logging level: ${logLevel}`); + } + }; + isGpuBufferSupportedType = (type) => type === "float32" || type === "float16" || type === "int32" || type === "int64" || type === "uint32" || type === "uint8" || type === "bool"; + dataLocationStringToEnum = (location) => { + switch (location) { + case "none": + return 0; + case "cpu": + return 1; + case "cpu-pinned": + return 2; + case "texture": + return 3; + case "gpu-buffer": + return 4; + default: + throw new Error(`unsupported data location: ${location}`); + } + }; + } +}); + +// nodejs-ignore:node:fs/promises +var readFile2; +var init_promises = __esm({ + "nodejs-ignore:node:fs/promises"() { + readFile2 = void 0; + } +}); + +// web/lib/wasm/wasm-utils-load-file.ts +var loadFile; +var init_wasm_utils_load_file = __esm({ + "web/lib/wasm/wasm-utils-load-file.ts"() { + "use strict"; + init_fs(); + init_promises(); + loadFile = async (file) => { + if (typeof file === "string") { + if (typeof process !== "undefined" && process.versions && process.versions.node) { + try { + return new Uint8Array(await readFile2(file)); + } catch (e) { + if (e.code === "ERR_FS_FILE_TOO_LARGE") { + const stream = createReadStream(file); + const chunks = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + return new Uint8Array(Buffer.concat(chunks)); + } + throw e; + } + } else { + const response = await fetch(file); + if (!response.ok) { + throw new Error(`failed to load external data file: ${file}`); + } + const contentLengthHeader = response.headers.get("Content-Length"); + const fileSize = contentLengthHeader ? parseInt(contentLengthHeader, 10) : 0; + if (fileSize < 1073741824) { + return new Uint8Array(await response.arrayBuffer()); + } else { + if (!response.body) { + throw new Error(`failed to load external data file: ${file}, no response body.`); + } + const reader = response.body.getReader(); + let buffer; + try { + buffer = new ArrayBuffer(fileSize); + } catch (e) { + if (e instanceof RangeError) { + const pages = Math.ceil(fileSize / 65536); + buffer = new WebAssembly.Memory({ initial: pages, maximum: pages }).buffer; + } else { + throw e; + } + } + let offset = 0; + while (true) { + const { done, value } = await reader.read(); + if (done) { + break; + } + const chunkSize = value.byteLength; + const chunk = new Uint8Array(buffer, offset, chunkSize); + chunk.set(value); + offset += chunkSize; + } + return new Uint8Array(buffer, 0, fileSize); + } + } + } else if (file instanceof Blob) { + return new Uint8Array(await file.arrayBuffer()); + } else if (file instanceof Uint8Array) { + return file; + } else { + return new Uint8Array(file); + } + }; + } +}); + +// web/lib/wasm/jsep/log.ts +var logLevelPrefix, doLog, configLogLevel, debug, configureLogger, LOG, LOG_DEBUG; +var init_log = __esm({ + "web/lib/wasm/jsep/log.ts"() { + "use strict"; + init_wasm_common(); + logLevelPrefix = ["V", "I", "W", "E", "F"]; + doLog = (level, message) => { + console.log(`[${logLevelPrefix[level]},${(/* @__PURE__ */ new Date()).toISOString()}]${message}`); + }; + configureLogger = ($configLogLevel, $debug) => { + configLogLevel = $configLogLevel; + debug = $debug; + }; + LOG = (logLevel, msg) => { + const messageLevel = logLevelStringToEnum(logLevel); + const configLevel = logLevelStringToEnum(configLogLevel); + if (messageLevel >= configLevel) { + doLog(messageLevel, typeof msg === "function" ? msg() : msg); + } + }; + LOG_DEBUG = (...args) => { + if (debug) { + LOG(...args); + } + }; + } +}); + +// web/lib/wasm/jsep/tensor-view.ts +var createView; +var init_tensor_view = __esm({ + "web/lib/wasm/jsep/tensor-view.ts"() { + "use strict"; + init_wasm_common(); + createView = (dataBuffer, type) => new (tensorTypeToTypedArrayConstructor(type))(dataBuffer); + } +}); + +// web/lib/wasm/jsep/webgpu/types.ts +var init_types = __esm({ + "web/lib/wasm/jsep/webgpu/types.ts"() { + "use strict"; + } +}); + +// web/lib/wasm/jsep/webgpu/gpu-data-manager.ts +var bucketFreelist, bucketArr, calcNormalizedBufferSize, calcBucketBufferSize, guid, createNewGpuDataId, downloadGpuData, GpuDataManagerImpl, createGpuDataManager; +var init_gpu_data_manager = __esm({ + "web/lib/wasm/jsep/webgpu/gpu-data-manager.ts"() { + "use strict"; + init_log(); + init_types(); + bucketFreelist = /* @__PURE__ */ new Map([ + [64, 250], + [128, 200], + [256, 200], + [512, 200], + [2048, 230], + [4096, 200], + [8192, 50], + [16384, 50], + [32768, 50], + [65536, 50], + [131072, 50], + [262144, 50], + [524288, 50], + [1048576, 50], + [2097152, 30], + [4194304, 20], + [8388608, 10], + [12582912, 10], + [16777216, 10], + [26214400, 15], + [33554432, 22], + [44236800, 2], + [58982400, 6], + // we don't want to cache the bucket sizes below but not caching them + // results in some major performance hits for models like sd-turbo. + [67108864, 6], + [134217728, 6], + [167772160, 6] + ]); + bucketArr = []; + calcNormalizedBufferSize = (size) => Math.ceil(size / 16) * 16; + calcBucketBufferSize = (size) => { + for (let idx = 0; idx < bucketArr.length; idx++) { + const sizeForBucket = bucketArr[idx]; + if (size <= sizeForBucket) { + return sizeForBucket; + } + } + return Math.ceil(size / 16) * 16; + }; + guid = 1; + createNewGpuDataId = () => guid++; + downloadGpuData = async (backend, gpuBuffer, originalSize, getTargetBuffer) => { + const bufferSize = calcNormalizedBufferSize(originalSize); + const gpuReadBuffer = backend.device.createBuffer( + // eslint-disable-next-line no-bitwise + { size: bufferSize, usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ } + ); + try { + const commandEncoder = backend.getCommandEncoder(); + backend.endComputePass(); + commandEncoder.copyBufferToBuffer( + gpuBuffer, + 0, + gpuReadBuffer, + 0, + bufferSize + /* size */ + ); + backend.flush(); + await gpuReadBuffer.mapAsync(GPUMapMode.READ); + const arrayBuffer = gpuReadBuffer.getMappedRange(); + if (getTargetBuffer) { + const targetBuffer = getTargetBuffer(); + targetBuffer.set(new Uint8Array(arrayBuffer, 0, originalSize)); + return targetBuffer; + } else { + return new Uint8Array(arrayBuffer.slice(0, originalSize)); + } + } finally { + gpuReadBuffer.destroy(); + } + }; + GpuDataManagerImpl = class { + constructor(backend) { + this.backend = backend; + this.storageCache = /* @__PURE__ */ new Map(); + this.freeBuffers = /* @__PURE__ */ new Map(); + this.freeUniformBuffers = /* @__PURE__ */ new Map(); + this.buffersForUploadingPending = []; + this.buffersPending = []; + this.externalBuffers = /* @__PURE__ */ new Map(); + this.capturedPendingBuffers = /* @__PURE__ */ new Map(); + for (const [key] of bucketFreelist) { + bucketArr.push(key); + this.freeBuffers.set(key, []); + this.freeUniformBuffers.set(key, []); + } + } + upload(id, data) { + const srcArrayBuffer = data.buffer; + const srcOffset = data.byteOffset; + const srcLength = data.byteLength; + const size = calcNormalizedBufferSize(srcLength); + const gpuDataCache = this.storageCache.get(id); + if (!gpuDataCache) { + throw new Error("gpu data for uploading does not exist"); + } + if (gpuDataCache.originalSize !== srcLength) { + throw new Error(`inconsistent data size. gpu data size=${gpuDataCache.originalSize}, data size=${srcLength}`); + } + const gpuBufferForUploading = this.backend.device.createBuffer( + // eslint-disable-next-line no-bitwise + { mappedAtCreation: true, size, usage: GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC } + ); + const arrayBuffer = gpuBufferForUploading.getMappedRange(); + new Uint8Array(arrayBuffer).set(new Uint8Array(srcArrayBuffer, srcOffset, srcLength)); + gpuBufferForUploading.unmap(); + const commandEncoder = this.backend.getCommandEncoder(); + this.backend.endComputePass(); + commandEncoder.copyBufferToBuffer(gpuBufferForUploading, 0, gpuDataCache.gpuData.buffer, 0, size); + LOG_DEBUG("verbose", () => `[WebGPU] GpuDataManager.upload(id=${id})`); + this.buffersForUploadingPending.push(gpuBufferForUploading); + } + memcpy(sourceId, destinationId) { + const sourceGpuDataCache = this.storageCache.get(sourceId); + if (!sourceGpuDataCache) { + throw new Error("source gpu data for memcpy does not exist"); + } + const destinationGpuDataCache = this.storageCache.get(destinationId); + if (!destinationGpuDataCache) { + throw new Error("destination gpu data for memcpy does not exist"); + } + if (sourceGpuDataCache.originalSize !== destinationGpuDataCache.originalSize) { + throw new Error("inconsistent source and destination gpu data size"); + } + const size = calcNormalizedBufferSize(sourceGpuDataCache.originalSize); + const commandEncoder = this.backend.getCommandEncoder(); + this.backend.endComputePass(); + commandEncoder.copyBufferToBuffer( + sourceGpuDataCache.gpuData.buffer, + 0, + destinationGpuDataCache.gpuData.buffer, + 0, + size + ); + } + registerExternalBuffer(buffer, originalSize, previousBuffer) { + let id; + if (previousBuffer) { + id = this.externalBuffers.get(previousBuffer); + if (id === void 0) { + throw new Error("previous buffer is not registered"); + } + if (buffer === previousBuffer) { + LOG_DEBUG( + "verbose", + () => `[WebGPU] GpuDataManager.registerExternalBuffer(size=${originalSize}) => id=${id}, buffer is the same, skip.` + ); + return id; + } else if (this.backend.capturedCommandList.has(this.backend.currentSessionId)) { + throw new Error(`Registering a different external buffer under graph capture mode is not supported yet. + Please use the previous external buffer!`); + } + this.externalBuffers.delete(previousBuffer); + } else { + id = createNewGpuDataId(); + } + this.storageCache.set(id, { gpuData: { id, type: 0 /* default */, buffer }, originalSize }); + this.externalBuffers.set(buffer, id); + LOG_DEBUG( + "verbose", + () => `[WebGPU] GpuDataManager.registerExternalBuffer(size=${originalSize}) => id=${id}, registered.` + ); + return id; + } + unregisterExternalBuffer(buffer) { + const id = this.externalBuffers.get(buffer); + if (id !== void 0) { + this.storageCache.delete(id); + this.externalBuffers.delete(buffer); + LOG_DEBUG("verbose", () => `[WebGPU] GpuDataManager.unregisterExternalBuffer() => id=${id}`); + } + } + // eslint-disable-next-line no-bitwise + create(size, usage = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST) { + const bufferSize = calcBucketBufferSize(size); + let gpuBuffer; + const isStorage = (usage & GPUBufferUsage.STORAGE) === GPUBufferUsage.STORAGE; + const isUniform = (usage & GPUBufferUsage.UNIFORM) === GPUBufferUsage.UNIFORM; + if (isStorage || isUniform) { + const freeBuffers = isStorage ? this.freeBuffers : this.freeUniformBuffers; + const buffers = freeBuffers.get(bufferSize); + if (!buffers) { + gpuBuffer = this.backend.device.createBuffer({ size: bufferSize, usage }); + } else { + if (buffers.length > 0) { + gpuBuffer = buffers.pop(); + } else { + gpuBuffer = this.backend.device.createBuffer({ size: bufferSize, usage }); + } + } + } else { + gpuBuffer = this.backend.device.createBuffer({ size: bufferSize, usage }); + } + const gpuData = { id: createNewGpuDataId(), type: 0 /* default */, buffer: gpuBuffer }; + this.storageCache.set(gpuData.id, { gpuData, originalSize: size }); + LOG_DEBUG("verbose", () => `[WebGPU] GpuDataManager.create(size=${size}) => id=${gpuData.id}`); + return gpuData; + } + get(id) { + return this.storageCache.get(id)?.gpuData; + } + release(id) { + const cachedData = this.storageCache.get(id); + if (!cachedData) { + throw new Error("releasing data does not exist"); + } + LOG_DEBUG("verbose", () => `[WebGPU] GpuDataManager.release(id=${id}), gpuDataId=${cachedData.gpuData.id}`); + this.storageCache.delete(id); + this.buffersPending.push(cachedData.gpuData.buffer); + return cachedData.originalSize; + } + async download(id, getTargetBuffer) { + const cachedData = this.storageCache.get(id); + if (!cachedData) { + throw new Error("data does not exist"); + } + await downloadGpuData(this.backend, cachedData.gpuData.buffer, cachedData.originalSize, getTargetBuffer); + } + refreshPendingBuffers() { + for (const buffer of this.buffersForUploadingPending) { + buffer.destroy(); + } + this.buffersForUploadingPending = []; + if (this.buffersPending.length === 0) { + return; + } + if (this.backend.sessionStatus === "default") { + for (const buffer of this.buffersPending) { + const maxInFreeList = bucketFreelist.get(buffer.size); + if ((buffer.usage & GPUBufferUsage.STORAGE) === GPUBufferUsage.STORAGE) { + const freelist = this.freeBuffers.get(buffer.size) || []; + if (maxInFreeList === void 0 || freelist.length >= maxInFreeList) { + buffer.destroy(); + } else { + freelist.push(buffer); + } + } else if ((buffer.usage & GPUBufferUsage.UNIFORM) === GPUBufferUsage.UNIFORM) { + const freelist = this.freeUniformBuffers.get(buffer.size) || []; + if (maxInFreeList === void 0 || freelist.length >= maxInFreeList) { + buffer.destroy(); + } else { + freelist.push(buffer); + } + } else { + buffer.destroy(); + } + } + this.buffersPending = []; + } else { + let capturedBuffers = this.capturedPendingBuffers.get(this.backend.currentSessionId); + if (!capturedBuffers) { + capturedBuffers = []; + this.capturedPendingBuffers.set(this.backend.currentSessionId, capturedBuffers); + } + for (const buffer of this.buffersPending) { + capturedBuffers.push(buffer); + } + this.buffersPending = []; + } + } + dispose() { + this.freeBuffers.forEach((buffers) => { + buffers.forEach((buffer) => { + buffer.destroy(); + }); + }); + this.freeUniformBuffers.forEach((buffers) => { + buffers.forEach((buffer) => { + buffer.destroy(); + }); + }); + this.storageCache.forEach((storage) => { + storage.gpuData.buffer.destroy(); + }); + this.capturedPendingBuffers.forEach((buffers) => { + buffers.forEach((buffer) => { + buffer.destroy(); + }); + }); + this.storageCache = /* @__PURE__ */ new Map(); + this.freeBuffers = /* @__PURE__ */ new Map(); + this.freeUniformBuffers = /* @__PURE__ */ new Map(); + this.capturedPendingBuffers = /* @__PURE__ */ new Map(); + } + onReleaseSession(sessionId) { + const pendingBuffers = this.capturedPendingBuffers.get(sessionId); + if (pendingBuffers) { + pendingBuffers.forEach((buffer) => { + buffer.destroy(); + }); + this.capturedPendingBuffers.delete(sessionId); + } + } + }; + createGpuDataManager = (...args) => new GpuDataManagerImpl(...args); + } +}); + +// web/lib/wasm/jsep/webgpu/attribute-with-cache-key.ts +var AttributeWithCacheKeyImpl, createAttributeWithCacheKey; +var init_attribute_with_cache_key = __esm({ + "web/lib/wasm/jsep/webgpu/attribute-with-cache-key.ts"() { + "use strict"; + AttributeWithCacheKeyImpl = class { + constructor(attribute) { + Object.assign(this, attribute); + } + get cacheKey() { + if (!this.key) { + this.key = Object.getOwnPropertyNames(this).sort().map((name) => `${this[name]}`).join(";"); + } + return this.key; + } + }; + createAttributeWithCacheKey = (attribute) => new AttributeWithCacheKeyImpl(attribute); + } +}); + +// web/lib/wasm/jsep/util.ts +var MatMulUtil, BroadcastUtil, ShapeUtil, PoolConvUtil, GemmUtil, MIN_CLIP, MAX_CLIP; +var init_util = __esm({ + "web/lib/wasm/jsep/util.ts"() { + "use strict"; + MatMulUtil = class { + /** + * Calculate the expected shape when matrix multiplication + * @param a The shape of tensor A. Should be a tuple of 2 positive integers + * @param b The shape of tensor B. Should be a tuple of 2 positive integers + * @returns The expected shape of the result, or undefined if N/A + */ + static calcMatMulShape(a, b) { + return a[1] !== b[0] ? void 0 : [a[0], b[1]]; + } + }; + BroadcastUtil = class { + /** + * Calculate the expected shape when broadcasting 2 tensors + * @param a The shape of tensor A. Should be an array of positive integers + * @param b The shape of tensor B. Should be an array of positive integers + * @param isMatMul Whether the operation is MatMul + * @returns The expected shape of the result, or undefined if N/A + */ + static calcShape(adims, bdims, isMatMul = false) { + const arank = adims.length; + const brank = bdims.length; + if (arank === 0) { + return bdims; + } + if (brank === 0) { + return adims; + } + const crank = Math.max(adims.length, bdims.length); + const cdims = new Array(crank); + if (isMatMul) { + if (arank < 2 || brank < 2) { + return void 0; + } + const cShapeMatMul = MatMulUtil.calcMatMulShape([adims[arank - 2], adims[arank - 1]], [bdims[brank - 2], bdims[brank - 1]]); + if (cShapeMatMul === void 0) { + return void 0; + } + [cdims[crank - 2], cdims[crank - 1]] = cShapeMatMul; + } + for (let i = isMatMul ? 3 : 1; i <= crank; i++) { + const aLen = arank - i < 0 ? 1 : adims[arank - i]; + const bLen = brank - i < 0 ? 1 : bdims[brank - i]; + if (aLen !== bLen && aLen > 1 && bLen > 1) { + return void 0; + } + const max = Math.max(aLen, bLen); + if (aLen && bLen) { + cdims[crank - i] = Math.max(aLen, bLen); + } else { + if (max > 1) { + return void 0; + } + cdims[crank - i] = 0; + } + } + return cdims; + } + /** + * Determine if a shape is unidirectional broadcastable to another shape + * @param shape The input shape + * @param finalShape The desired shape after broadcasting + */ + static isValidBroadcast(shape, finalShape) { + const inputRank = shape.length; + const finalRank = finalShape.length; + if (inputRank > finalRank) { + return false; + } + for (let i = 1; i <= inputRank; i++) { + if (shape[inputRank - i] !== 1 && shape[inputRank - i] !== finalShape[finalRank - i]) { + return false; + } + } + return true; + } + }; + ShapeUtil = class _ShapeUtil { + /** + * calculate the size (number of elements) + */ + static size(dims) { + return _ShapeUtil.getSizeFromDimensionRange(dims, 0, dims.length); + } + /** + * convert dims corresponding to type change to pack. ex. uint8 data to uint32 + */ + static convertShape(dims, size = 4) { + const rank = dims.length; + if (rank === 0) { + return []; + } + const newDims = new Array(rank); + let i = rank - 1; + while (i >= 0) { + if (dims[i] % size === 0) { + newDims[i] = dims[i] / size; + break; + } + if (size % dims[i] !== 0) { + throw new Error("cannot convert shape"); + } + newDims[i] = 1; + size /= dims[i]; + i--; + } + for (i--; i >= 0; i--) { + newDims[i] = dims[i]; + } + return newDims; + } + /** + * calculate the size (number of elements) from the given axis (inclusive) + */ + static sizeFromDimension(dims, axis) { + if (axis < 0 || axis > dims.length) { + throw new Error(`invalid dimension of ${axis} for sizeFromDimension as Tensor has ${dims.length} dimensions.`); + } + return _ShapeUtil.getSizeFromDimensionRange(dims, axis, dims.length); + } + /** + * calculate the size (number of elements) to the given axis (exclusive) + */ + static sizeToDimension(dims, axis) { + if (axis < 0 || axis > dims.length) { + throw new Error(`invalid dimension of ${axis} for sizeToDimension as Tensor has ${dims.length} dimensions.`); + } + return _ShapeUtil.getSizeFromDimensionRange(dims, 0, axis); + } + /** + * calculate the size (number of elements) from and to the given axis [start, end) + */ + static getSizeFromDimensionRange(dims, start, end) { + let size = 1; + for (let i = start; i < end; i++) { + if (dims[i] < 0) { + throw new Error( + // eslint-disable-next-line max-len + "cannot get valid size from specified dimension range. Most likely the range contains negative values in them." + ); + } + size *= dims[i]; + } + return size; + } + static computeStrides(dims) { + const rank = dims.length; + if (rank === 0) { + return []; + } else if (rank === 1) { + return [1]; + } + const strides = new Array(rank); + strides[rank - 1] = 1; + strides[rank - 2] = dims[rank - 1]; + for (let i = rank - 3; i >= 0; --i) { + strides[i] = strides[i + 1] * dims[i + 1]; + } + return strides; + } + /** + * normailze axis of range [-r, r) into [0, r). + */ + static normalizeAxis(axis, tensorRank) { + if (axis < -tensorRank && axis >= tensorRank) { + throw new Error("unsupported axis for this operation."); + } + return axis < 0 ? axis + tensorRank : axis; + } + static normalizeAxes(axes, tensorRank) { + return axes.map((x) => this.normalizeAxis(x, tensorRank ?? axes.length)); + } + /** + * Sorts a given array based on the indices in the Perm array + * Used in Transpose + * @param a Array to be sorted such as dims or strides + * @param perm Perm given; if null a will be reversed + */ + static sortBasedOnPerm(a, perm) { + if (perm) { + return perm.map((v) => a[v]); + } else { + return a.slice().reverse(); + } + } + /** + * Pads a given shape according to the padding values + * @param dims shape of the Tensor to be padded + * @param pad pad values + */ + static padShape(dims, pad2) { + const rank = dims.length; + return dims.map((v, i) => v + pad2[i] + pad2[i + rank]); + } + /** + * Determines if the two shapes are identical + * @param shape1 + * @param shape2 + */ + static areEqual(shape1, shape2) { + if (shape1.length !== shape2.length) { + return false; + } + return shape1.every((v, i) => v === shape2[i]); + } + }; + PoolConvUtil = class _PoolConvUtil { + /** + * Adjust the kernel, strides, pads to correct rank. Set to default value if not present + * @param isGlobalOperator If true, perform global pooling. + * @param inputDims The input tensor dimension. + * @param kernelShape The size of the kernel along each axis. + * @param strides Stride along each axis. + * @param dilations Dilation along each axis. + * @param pads Padding for the beginning and ending along each axis. + */ + static adjustPoolAttributes(isGlobalOperator, inputDims, kernelShape, strides, dilations, pads) { + if (!isGlobalOperator && kernelShape.length !== inputDims.length - 2) { + throw new Error("length of specified kernel shapes should be 2 less than length of input dimensions"); + } + if (isGlobalOperator) { + for (let dim = 0; dim < inputDims.length - 2; dim++) { + if (dim >= kernelShape.length) { + kernelShape.push(inputDims[dim + 2]); + } else { + kernelShape[dim] = inputDims[dim + 2]; + } + } + } + for (let dim = 0; dim < kernelShape.length; dim++) { + if (dim < strides.length) { + if (strides[dim] < 0) { + throw new Error("strides should be greater than or equal to 1"); + } + } else { + strides.push(1); + } + } + for (let dim = 0; dim < kernelShape.length; dim++) { + if (dim < dilations.length) { + if (dilations[dim] < 0) { + throw new Error("dilations should be greater than or equal to 1"); + } + } else { + dilations.push(1); + } + } + for (let dim = 0; dim < kernelShape.length * 2; dim++) { + if (dim < pads.length) { + if (pads[dim] < 0) { + throw new Error("pad should be greater than or equal to 1"); + } + } else { + pads.push(0); + } + } + for (let dim = 0; dim < kernelShape.length; dim++) { + if (kernelShape[dim] <= 0) { + throw new Error("kernel shapes need to be greater than 0"); + } + if (pads[dim] >= kernelShape[dim] || pads[dim + kernelShape.length] >= kernelShape[dim]) { + throw new Error("pads should be smaller than kernel"); + } + } + } + // adjust pad values based on 'autoPad' attribute + static adjustPadsBasedOnAutoPad(inputDims, strides, dilations, kernelShape, pads, isChannelLast, autoPad) { + if (!autoPad) { + return; + } + if (pads.length !== 2 * (inputDims.length - 2)) { + throw new Error("length of pads should be twice the length of data dimensions"); + } + if (strides.length !== inputDims.length - 2) { + throw new Error("length of strides should be the length of data dimensions"); + } + if (kernelShape.length !== inputDims.length - 2) { + throw new Error("length of kernel shapes should be the length of data dimensions"); + } + for (let dim = 0; dim < inputDims.length - 2; dim++) { + _PoolConvUtil.adjustPadAndReturnShape( + inputDims[dim + (isChannelLast ? 1 : 2)], + strides[dim], + dilations[dim], + kernelShape[dim], + pads, + dim, + dim + inputDims.length - 2, + autoPad + ); + } + } + /** + * Calculate the output shape for Pool ops based on input attributes. (Should be used only for Pool ops) + * @param isGlobalOperator If true, perform global pooling. + * @param inputDims The input tensor dimension. (inputs[0].dims) + * @param strides Stride along each axis. + * @param dilations Dilation along each axis. + * @param kernelShape The size of the kernel along each axis. + * @param pads Padding for the beginning and ending along each axis. + * @param autoPad DEPRECATED attribute supported for legacy models. Specifies how to implicitly calculate pads in each + * dimension. Can take values NOTSET, SAME_UPPER, SAME_LOWER, or VALID. + */ + static computePoolOutputShape(isGlobalOperator, inputDims, strides, dilations, kernelShape, pads, autoPad) { + if (inputDims.length <= 0) { + throw new Error("input shape must be of size greater than 0"); + } + const outputDims = [inputDims[0], inputDims[1]]; + _PoolConvUtil.computeShapeHelper( + isGlobalOperator, + inputDims, + outputDims, + strides, + dilations, + kernelShape, + pads, + autoPad + ); + return outputDims; + } + /** + * Calculate the output shape for Conv op based on input attributes. (Should be used only for Conv op) + * @param inputDims The input tensor dimension. (inputs[0].dims) + * @param filterDims The filter tensor dimension. (inputs[1].dims) + * @param strides Stride along each axis. + * @param kernelShape The size of the kernel along each axis. + * @param pads Padding for the beginning and ending along each axis. + * @param autoPad DEPRECATED attribute supported for legacy models. Specifies how to implicitly calculate pads in each + * dimension. Can take values NOTSET, SAME_UPPER, SAME_LOWER, or VALID. + */ + static computeConvOutputShape(inputDims, filterDims, strides, dilations, kernelShape, pads, autoPad) { + if (inputDims.length <= 0 || filterDims.length <= 0) { + throw new Error("invalid input tensor dims or invalid filter tensor dims"); + } + const outputDims = [inputDims[0], filterDims[0]]; + _PoolConvUtil.computeShapeHelper(false, inputDims, outputDims, strides, dilations, kernelShape, pads, autoPad); + return outputDims; + } + // will compute output shapes for data dimensions ONLY (i.e.) no batch size and channels + // called by computePoolOutputShape() and computeConvOutputShape() + // adjust pads based on 'autoPad' attribute prior to shape computation + static computeShapeHelper(isGlobalOperator, inputDims, outputDims, strides, dilations, kernelShape, pads, autoPad) { + if (isGlobalOperator) { + for (let dim = 0; dim < inputDims.length - 2; dim++) { + outputDims.push(1); + } + } else { + for (let dim = 0; dim < inputDims.length - 2; dim++) { + outputDims.push(_PoolConvUtil.adjustPadAndReturnShape( + inputDims[dim + 2], + strides[dim], + dilations[dim], + kernelShape[dim], + pads, + dim, + dim + inputDims.length - 2, + autoPad + )); + } + } + } + // helper for computeShapeHelper() and adjustPadsBasedOnAutoPad() + // adjusts pad value for given 'autoPad' string and computes output shape along a particular dimension + static adjustPadAndReturnShape(inSize, stride, dilation, kernel, pads, padHeadIndex, padTailIndex, autoPad) { + const dkernel = dilation * (kernel - 1) + 1; + if (autoPad && autoPad !== "NOTSET") { + switch (autoPad) { + case "VALID": + pads[padHeadIndex] = 0; + pads[padTailIndex] = 0; + return Math.floor((inSize - dkernel) / stride + 1); + case "SAME_LOWER": + case "SAME_UPPER": + if (dilation !== 1) { + throw new Error("Dilation not supported for SAME_UPPER or SAME_LOWER"); + } else { + const legacyTargetSize = (inSize + stride - 1) / stride; + const padNeeded = (legacyTargetSize - 1) * stride + kernel - inSize; + pads[padHeadIndex] = autoPad === "SAME_LOWER" ? Math.floor((padNeeded + 1) / 2) : Math.floor(padNeeded / 2); + pads[padTailIndex] = padNeeded - pads[padHeadIndex]; + return Math.floor((inSize + padNeeded - kernel) / stride + 1); + } + default: + throw new Error("Unsupported AutoPad type"); + } + } else { + return Math.floor((inSize + pads[padHeadIndex] + pads[padTailIndex] - dkernel) / stride + 1); + } + } + }; + GemmUtil = class { + // will make sure input shapes are compatible for this op + // and return back the shape of the output in the form of a tuple + // will throw exception if the input shapes are not compatible + static getShapeOfGemmResult(leftShape, transLeft, rightShape, transRight, biasShape) { + if (leftShape.length !== 2 || rightShape.length !== 2) { + throw new Error("shape need to be of size 2"); + } + let M; + let K; + let N; + if (transLeft) { + M = leftShape[1]; + K = leftShape[0]; + } else { + M = leftShape[0]; + K = leftShape[1]; + } + let kDim = -1; + if (transRight) { + N = rightShape[0]; + kDim = 1; + } else { + N = rightShape[1]; + kDim = 0; + } + if (rightShape[kDim] !== K) { + throw new Error("dimension mismatch"); + } + if (M <= 0 || N <= 0 || K <= 0) { + throw new Error("invalid shape specified"); + } + if (biasShape && !BroadcastUtil.isValidBroadcast(biasShape, [M, N])) { + throw new Error("gemm: invalid bias shape for broadcast"); + } + return [M, N, K]; + } + }; + MIN_CLIP = -34028234663852886e22; + MAX_CLIP = 34028234663852886e22; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/common.ts +var WORKGROUP_SIZE, getWgslMappedType, tensorTypeToWsglStorageType, tensorTypeToWsglValueType, createTensorShapeVariables, getMaxComponents, fillVector, castToF32, sumVector, getElementAt, createIndicesHelper, inputVariable, outputVariable, internalVariable, ShaderHelperImpl, createShaderHelper, getBroadcastDims; +var init_common = __esm({ + "web/lib/wasm/jsep/webgpu/ops/common.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + WORKGROUP_SIZE = 64; + getWgslMappedType = (type, components) => { + if (components === 3) { + throw new Error("vec3 has same alignment as vec4, use vec4 instead"); + } + switch (type) { + case 10 /* float16 */: + return components > 1 ? `vec${components}` : "f16"; + case 1 /* float */: + return components > 1 ? `vec${components}` : "f32"; + case 6 /* int32 */: + return components > 1 ? `vec${components}` : "i32"; + case 12 /* uint32 */: + return components > 1 ? `vec${components}` : "u32"; + case 7 /* int64 */: + if (components > 1) { + throw new Error("currently not supported vecX of uint64 yet"); + } + return ["vec2", "i32"]; + case 13 /* uint64 */: + if (components > 1) { + throw new Error("currently not supported vecX of uint64 yet"); + } + return ["vec2", "u32"]; + case 9 /* bool */: + if (components !== 4) { + throw new Error("bool must be vec4"); + } + return ["u32", "vec4"]; + default: + throw new Error(`Unknown data type: ${type}`); + } + }; + tensorTypeToWsglStorageType = (type, components = 1) => { + const mappedType = getWgslMappedType(type, components); + return typeof mappedType === "string" ? mappedType : mappedType[0]; + }; + tensorTypeToWsglValueType = (type, components = 1) => { + const mappedType = getWgslMappedType(type, components); + return typeof mappedType === "string" ? mappedType : mappedType[1]; + }; + createTensorShapeVariables = (...dims) => { + const programUniforms = []; + dims.forEach((dim) => { + if (dim.length !== 0) { + programUniforms.push( + { type: 12 /* uint32 */, data: dim }, + { type: 12 /* uint32 */, data: ShapeUtil.computeStrides(dim) } + ); + } + }); + return programUniforms; + }; + getMaxComponents = (size) => { + if (size % 4 === 0) { + return 4; + } else if (size % 2 === 0) { + return 2; + } + return 1; + }; + fillVector = (dataType = "f32", components, value = "0") => { + if (!components || components === 1) { + return `${dataType}(${value})`; + } + return `vec${components}<${dataType}>(${value})`; + }; + castToF32 = (dataType, components, value) => { + if (dataType === "f32") { + return value; + } + if (components === 1) { + return `f32(${value})`; + } + return `vec${components}(${value})`; + }; + sumVector = (name, components) => { + if (components === 4) { + return `(${name}.x + ${name}.y + ${name}.z + ${name}.w)`; + } else if (components === 2) { + return `(${name}.x + ${name}.y)`; + } else if (components === 3) { + return `(${name}.x + ${name}.y + ${name}.z)`; + } + return name; + }; + getElementAt = (name, index, length, type) => { + if (name.startsWith("uniforms.") && length > 4) { + if (typeof index === "string") { + if (type === "f16") { + return `${name}[(${index}) / 8][(${index}) % 8 / 4][(${index}) % 8 % 4]`; + } else { + return `${name}[(${index}) / 4][(${index}) % 4]`; + } + } else { + if (type === "f16") { + return `${name}[${Math.floor(index / 8)}][${Math.floor(index % 8 / 4)}][${index % 8 % 4}]`; + } else { + return `${name}[${Math.floor(index / 4)}][${index % 4}]`; + } + } + } else { + return length > 1 ? `${name}[${index}]` : name; + } + }; + createIndicesHelper = (name, tensorType, shapeOrRank, usage, components) => { + const useUniform = typeof shapeOrRank === "number"; + const rank = useUniform ? shapeOrRank : shapeOrRank.length; + const rankIdentity = [...new Array(rank).keys()]; + const indicesType = rank < 2 ? "u32" : rank <= 4 ? `vec${rank}` : `array`; + const mappedType = getWgslMappedType(tensorType, components); + const valueType = typeof mappedType === "string" ? mappedType : mappedType[1]; + const storageType = typeof mappedType === "string" ? mappedType : mappedType[0]; + const type = { indices: indicesType, value: valueType, storage: storageType, tensor: tensorType }; + const normalizeDim = (dim) => typeof dim === "string" ? dim : `${dim}u`; + const implementationUsed = { + offsetToIndices: false, + indicesToOffset: false, + broadcastedIndicesToOffset: false, + set: false, + setByIndices: false, + get: false, + getByIndices: false + }; + const uniformPrefix = useUniform ? "uniforms." : ""; + const shape = `${uniformPrefix}${name}_shape`; + const strides = `${uniformPrefix}${name}_strides`; + let o2iSnippet = ""; + for (let i = 0; i < rank - 1; i++) { + o2iSnippet += ` + let dim${i} = current / ${getElementAt(strides, i, rank)}; + let rest${i} = current % ${getElementAt(strides, i, rank)}; + indices[${i}] = dim${i}; + current = rest${i}; + `; + } + o2iSnippet += `indices[${rank - 1}] = current;`; + const offsetToIndicesImplementation = rank < 2 ? "" : ` + fn o2i_${name}(offset: u32) -> ${type.indices} { + var indices: ${type.indices}; + var current = offset; + ${o2iSnippet} + return indices; + }`; + const offsetToIndices = (varOffset) => { + implementationUsed.offsetToIndices = true; + return rank < 2 ? varOffset : `o2i_${name}(${varOffset})`; + }; + const offsets = []; + if (rank >= 2) { + for (let i = rank - 1; i >= 0; i--) { + offsets.push(`${getElementAt(strides, i, rank)} * (indices[${i}])`); + } + } + const indicesToOffsetImplementation = rank < 2 ? "" : ` + fn i2o_${name}(indices: ${type.indices}) -> u32 { + return ${offsets.join("+")}; + }`; + const indicesToOffset = (varIndices) => { + implementationUsed.indicesToOffset = true; + return rank < 2 ? varIndices : `i2o_${name}(${varIndices})`; + }; + const indices = (...init2) => rank === 0 ? "0u" : `${type.indices}(${init2.map(normalizeDim).join(",")})`; + const indicesGet = (varIndices, idx) => { + if (rank < 2) { + return `${varIndices}`; + } else { + return `${getElementAt(varIndices, idx, rank)}`; + } + }; + const indicesSet = (varIndices, idx, value) => { + if (rank < 2) { + return `${varIndices}=${value};`; + } else { + return `${getElementAt(varIndices, idx, rank)}=${value};`; + } + }; + const broadcastedIndicesToOffsetImplementation = {}; + const broadcastedIndicesToOffset = (varIndices, output) => { + implementationUsed.broadcastedIndicesToOffset = true; + const implKey = `${output.name}broadcastedIndicesTo${name}Offset`; + if (implKey in broadcastedIndicesToOffsetImplementation) { + return `${implKey}(${varIndices})`; + } + const offsets2 = []; + for (let i = rank - 1; i >= 0; i--) { + const idx = output.indicesGet("outputIndices", i + output.rank - rank); + offsets2.push(`${indicesGet(strides, i)} * (${idx} % ${indicesGet(shape, i)})`); + } + broadcastedIndicesToOffsetImplementation[implKey] = `fn ${implKey}(outputIndices: ${output.type.indices}) -> u32 { + return ${offsets2.length > 0 ? offsets2.join("+") : "0u"}; + }`; + return `${implKey}(${varIndices})`; + }; + const setByOffset = (offset, value) => (() => { + if (type.storage === type.value) { + return `${name}[${offset}]=${value};`; + } else if (type.storage === "vec2" && type.value === "i32") { + return `${name}[${offset}]=vec2(u32(${value}), select(0u, 0xFFFFFFFFu, ${value} < 0));`; + } else if (type.storage === "vec2" && type.value === "u32") { + return `${name}[${offset}]=vec2(u32(${value}), 0u);`; + } else if (type.storage === "u32" && type.value === "vec4") { + return `${name}[${offset}]=dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(${value}));`; + } else { + throw new Error(`not supported combination of storage type ${type.storage} and value type ${type.value} yet`); + } + })(); + const getByOffset = (offset) => (() => { + if (type.storage === type.value) { + return `${name}[${offset}]`; + } else if (type.storage === "vec2" && type.value === "i32") { + return `i32(${name}[${offset}].x)`; + } else if (type.storage === "vec2" && type.value === "u32") { + return `u32(${name}[${offset}].x)`; + } else if (type.storage === "u32" && type.value === "vec4") { + return `vec4(bool(${name}[${offset}] & 0xFFu), bool(${name}[${offset}] & 0xFF00u), bool(${name}[${offset}] & 0xFF0000u), bool(${name}[${offset}] & 0xFF000000u))`; + } else { + throw new Error(`not supported combination of storage type ${type.storage} and value type ${type.value} yet`); + } + })(); + const getByIndicesImplementation = rank < 2 ? "" : ` + fn get_${name}ByIndices(indices: ${type.indices}) -> ${valueType} { + return ${getByOffset(`i2o_${name}(indices)`)}; + }`; + const getImplementation = rank < 2 ? "" : (() => { + const functionParams = rankIdentity.map((i) => `d${i}: u32`).join(", "); + const dimsParams = rankIdentity.map((i) => `d${i}`).join(", "); + return ` + fn get_${name}(${functionParams}) -> ${valueType} { + return get_${name}ByIndices(${indices(dimsParams)}); + }`; + })(); + const get = (...indices2) => { + if (indices2.length !== rank) { + throw new Error(`indices length must be ${rank}`); + } + const normalizedIndices = indices2.map(normalizeDim).join(","); + if (rank === 0) { + return getByOffset("0u"); + } else if (rank === 1) { + return getByOffset(normalizedIndices[0]); + } else { + implementationUsed.get = true; + implementationUsed.getByIndices = true; + implementationUsed.indicesToOffset = true; + return `get_${name}(${normalizedIndices})`; + } + }; + const getByIndices = (varIndices) => { + if (rank < 2) { + return getByOffset(varIndices); + } else { + implementationUsed.getByIndices = true; + implementationUsed.indicesToOffset = true; + return `get_${name}ByIndices(${varIndices})`; + } + }; + const setByIndicesImplementation = rank < 2 ? "" : ` + fn set_${name}ByIndices(indices: ${type.indices}, value: ${valueType}) { + ${setByOffset(`i2o_${name}(indices)`, "value")} + }`; + const setImplementation = rank < 2 ? "" : (() => { + const functionParams = rankIdentity.map((i) => `d${i}: u32`).join(", "); + const dimsParams = rankIdentity.map((i) => `d${i}`).join(", "); + return ` + fn set_${name}(${functionParams}, value: ${valueType}) { + set_${name}ByIndices(${indices(dimsParams)}, value); + }`; + })(); + const set = (...indicesAndValue) => { + if (indicesAndValue.length !== rank + 1) { + throw new Error(`indices length must be ${rank}`); + } + const value = indicesAndValue[rank]; + if (typeof value !== "string") { + throw new Error("value must be string"); + } + const normalizedIndices = indicesAndValue.slice(0, rank).map(normalizeDim).join(","); + if (rank === 0) { + return setByOffset("0u", value); + } else if (rank === 1) { + return setByOffset(normalizedIndices[0], value); + } else { + implementationUsed.set = true; + implementationUsed.setByIndices = true; + implementationUsed.indicesToOffset = true; + return `set_${name}(${normalizedIndices}, ${value})`; + } + }; + const setByIndices = (varIndices, value) => { + if (rank < 2) { + return setByOffset(varIndices, value); + } else { + implementationUsed.setByIndices = true; + implementationUsed.indicesToOffset = true; + return `set_${name}ByIndices(${varIndices}, ${value});`; + } + }; + const impl = () => { + const impls = []; + let needShapeStrides = false; + if (implementationUsed.offsetToIndices) { + impls.push(offsetToIndicesImplementation); + needShapeStrides = true; + } + if (implementationUsed.indicesToOffset) { + impls.push(indicesToOffsetImplementation); + needShapeStrides = true; + } + if (implementationUsed.broadcastedIndicesToOffset) { + Object.values(broadcastedIndicesToOffsetImplementation).forEach((impl2) => impls.push(impl2)); + needShapeStrides = true; + } + if (implementationUsed.set) { + impls.push(setImplementation); + needShapeStrides = true; + } + if (implementationUsed.setByIndices) { + impls.push(setByIndicesImplementation); + needShapeStrides = true; + } + if (implementationUsed.get) { + impls.push(getImplementation); + needShapeStrides = true; + } + if (implementationUsed.getByIndices) { + impls.push(getByIndicesImplementation); + needShapeStrides = true; + } + if (!useUniform && needShapeStrides) { + impls.unshift( + `const ${shape} = ${type.indices}(${shapeOrRank.join(",")});`, + `const ${strides} = ${type.indices}(${ShapeUtil.computeStrides(shapeOrRank).join(",")});` + ); + } + return impls.join("\n"); + }; + return { + impl, + type, + offsetToIndices, + indicesToOffset, + broadcastedIndicesToOffset, + indices, + indicesGet, + indicesSet, + set, + setByOffset, + setByIndices, + get, + getByOffset, + getByIndices, + // isVec4, + usage, + name, + strides, + shape, + rank + }; + }; + inputVariable = (name, type, shapeOrRank, components = 1) => createIndicesHelper(name, type, shapeOrRank, "input", components); + outputVariable = (name, type, shapeOrRank, components = 1) => createIndicesHelper(name, type, shapeOrRank, "output", components); + internalVariable = (name, type, shapeOrRank, components = 1) => createIndicesHelper(name, type, shapeOrRank, "internal", components); + ShaderHelperImpl = class { + constructor(normalizedDispatchGroup, limits) { + this.normalizedDispatchGroup = normalizedDispatchGroup; + this.limits = limits; + this.internalVariables = []; + this.variables = []; + this.uniforms = []; + this.variableIndex = 0; + } + guardAgainstOutOfBoundsWorkgroupSizes(size) { + const sizeInCode = typeof size === "number" ? `${size}u` : size; + return `if (global_idx >= ${sizeInCode}) { return; }`; + } + mainStart(workgroupSize = WORKGROUP_SIZE) { + const workgroupSizeX = typeof workgroupSize === "number" ? workgroupSize : workgroupSize[0]; + const workgroupSizeY = typeof workgroupSize === "number" ? 1 : workgroupSize[1]; + const workgroupSizeZ = typeof workgroupSize === "number" ? 1 : workgroupSize[2]; + if (workgroupSizeX > this.limits.maxComputeWorkgroupSizeX || workgroupSizeY > this.limits.maxComputeWorkgroupSizeY || workgroupSizeZ > this.limits.maxComputeWorkgroupSizeZ) { + throw new Error(`workgroup size [${workgroupSizeX}, ${workgroupSizeY}, ${workgroupSizeZ}] exceeds the maximum workgroup size [${this.limits.maxComputeWorkgroupSizeX}, ${this.limits.maxComputeWorkgroupSizeY}, ${this.limits.maxComputeWorkgroupSizeZ}].`); + } + if (workgroupSizeX * workgroupSizeY * workgroupSizeZ > this.limits.maxComputeInvocationsPerWorkgroup) { + throw new Error(`workgroup size [${workgroupSizeX}, ${workgroupSizeY}, ${workgroupSizeZ}] exceeds the maximum workgroup invocations ${this.limits.maxComputeInvocationsPerWorkgroup}.`); + } + const is1DimensionDispatch = this.normalizedDispatchGroup[1] === 1 && this.normalizedDispatchGroup[2] === 1; + const paramList = is1DimensionDispatch ? `@builtin(global_invocation_id) global_id : vec3, + @builtin(workgroup_id) workgroup_id : vec3, + @builtin(local_invocation_id) local_id : vec3` : `@builtin(global_invocation_id) global_id : vec3, + @builtin(local_invocation_id) local_id : vec3, + @builtin(local_invocation_index) local_idx : u32, + @builtin(workgroup_id) workgroup_id : vec3, + @builtin(num_workgroups) num_workgroups : vec3`; + const globalIdxDefinition = is1DimensionDispatch ? "let global_idx = global_id.x; let local_idx = local_id.x;" : `let global_idx = (workgroup_id.z * num_workgroups[0] * num_workgroups[1] + + workgroup_id.y * num_workgroups[0] + workgroup_id.x) * ${workgroupSizeX * workgroupSizeY * workgroupSizeZ}u + local_idx;`; + return `@compute @workgroup_size(${workgroupSizeX}, ${workgroupSizeY}, ${workgroupSizeZ}) + fn main(${paramList}) { + ${globalIdxDefinition} + `; + } + appendVariableUniforms(variable) { + if (variable.rank !== 0) { + if (variable.shape.startsWith("uniforms.")) { + this.uniforms.push({ name: variable.shape.replace("uniforms.", ""), type: "u32", length: variable.rank }); + } + if (variable.strides.startsWith("uniforms.")) { + this.uniforms.push({ name: variable.strides.replace("uniforms.", ""), type: "u32", length: variable.rank }); + } + } + } + declareVariable(variable, bindingIndex) { + if (variable.usage === "internal") { + throw new Error("cannot use internal variable with declareVariable(). use registerInternalVariables() instead."); + } + this.variables.push(variable); + this.appendVariableUniforms(variable); + const access = variable.usage === "input" ? "read" : "read_write"; + const storageType = variable.type.storage; + return `@group(0) @binding(${bindingIndex}) var ${variable.name}: array<${storageType}>;`; + } + declareVariables(...variables) { + return variables.map((v) => this.declareVariable(v, this.variableIndex++)).join("\n"); + } + registerInternalVariable(variable) { + if (variable.usage !== "internal") { + throw new Error( + "cannot use input or output variable with registerInternalVariable(). use declareVariables() instead." + ); + } + this.internalVariables.push(variable); + this.appendVariableUniforms(variable); + } + registerInternalVariables(...variables) { + variables.forEach((v) => this.registerInternalVariable(v)); + return this; + } + registerUniform(name, type, length = 1) { + this.uniforms.push({ name, type, length }); + return this; + } + registerUniforms(additionalUniforms) { + this.uniforms = this.uniforms.concat(additionalUniforms); + return this; + } + uniformDeclaration() { + if (this.uniforms.length === 0) { + return ""; + } + const uniformSnippets = []; + for (const { name, type, length } of this.uniforms) { + if (length && length > 4) { + if (type === "f16") { + uniformSnippets.push(`@align(16) ${name}:array, ${Math.ceil(length / 8)}>`); + } else { + uniformSnippets.push(`${name}:array, ${Math.ceil(length / 4)}>`); + } + } else { + const typeTemp = length == null || length === 1 ? type : `vec${length}<${type}>`; + uniformSnippets.push(`${name}:${typeTemp}`); + } + } + return ` + struct Uniforms { ${uniformSnippets.join(", ")} }; + @group(0) @binding(${this.variableIndex}) var uniforms: Uniforms;`; + } + /** + * Get additional implementation that needs to be added to the shader source. + */ + get additionalImplementations() { + return this.uniformDeclaration() + this.variables.map((i) => i.impl()).join("\n") + this.internalVariables.map((i) => i.impl()).join("\n"); + } + /** + * Get the variable info of the shader program. + */ + get variablesInfo() { + if (this.uniforms.length === 0) { + return void 0; + } + const uniformWgslTypeToDataType = (type) => [ + 12 /* uint32 */, + 10 /* float16 */, + 1 /* float */, + 6 /* int32 */ + ][["u32", "f16", "f32", "i32"].indexOf(type)]; + return this.uniforms.map((u) => [uniformWgslTypeToDataType(u.type), u.length ?? 1]); + } + }; + createShaderHelper = (dispatchGroup, limits) => new ShaderHelperImpl(dispatchGroup, limits); + getBroadcastDims = (inShape, outShape) => { + const inRank = inShape.length; + const dims = []; + for (let i = 0; i < inRank; i++) { + const dim = inRank - 1 - i; + const a = inShape[dim] || 1; + const b = outShape[outShape.length - 1 - i] || 1; + if (b > 1 && a === 1) { + dims.unshift(dim); + } + } + return dims; + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/transpose.ts +var validateInputs, getAdjustedPerm, getOutputShape, permFunctionBody, createTransposeProgramInfo, transpose, parseTransposeAttributes; +var init_transpose = __esm({ + "web/lib/wasm/jsep/webgpu/ops/transpose.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs = (inputs) => { + if (!inputs || inputs.length !== 1) { + throw new Error("Transpose requires 1 input."); + } + }; + getAdjustedPerm = (inputRank, perm) => perm && perm.length !== inputRank ? [...new Array(inputRank).keys()].reverse() : perm; + getOutputShape = (inputShape, perm) => ShapeUtil.sortBasedOnPerm(inputShape, getAdjustedPerm(inputShape.length, perm)); + permFunctionBody = (perm, rank, input, output) => { + const reverseFunc = []; + reverseFunc.push(`fn perm(i: ${output.type.indices}) -> ${input.type.indices} { + var a: ${input.type.indices};`); + for (let i = 0; i < rank; ++i) { + reverseFunc.push(input.indicesSet("a", perm[i], `i[${i}]`)); + } + reverseFunc.push("return a;}"); + return reverseFunc.join("\n"); + }; + createTransposeProgramInfo = (inputTensor, permAttr) => { + const inputDataType = inputTensor.dataType; + const inputRank = inputTensor.dims.length; + const perm = getAdjustedPerm(inputRank, permAttr); + const outputShape = getOutputShape(inputTensor.dims, perm); + const output = outputVariable("output", inputDataType, outputShape.length); + const input = inputVariable("a", inputDataType, inputRank); + const getShaderSource = (shaderHelper) => ` + ${shaderHelper.registerUniform("output_size", "u32").declareVariables(input, output)} + + ${permFunctionBody(perm, inputRank, input, output)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + + let indices = ${output.offsetToIndices("global_idx")}; + let aIndices = perm(indices); + + ${output.setByOffset("global_idx", input.getByIndices("aIndices"))} + }`; + return { + name: "Transpose", + shaderCache: { hint: `${permAttr}`, inputDependencies: ["rank"] }, + getRunData: (inputs) => { + const outputSize = ShapeUtil.size(outputShape); + return { + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms: [{ type: 12 /* uint32 */, data: outputSize }, ...createTensorShapeVariables(inputs[0].dims, outputShape)] + }; + }, + getShaderSource + }; + }; + transpose = (context, attributes) => { + validateInputs(context.inputs); + context.compute(createTransposeProgramInfo(context.inputs[0], attributes.perm)); + }; + parseTransposeAttributes = (attributes) => createAttributeWithCacheKey({ perm: attributes.perm }); + } +}); + +// web/lib/wasm/jsep/webgpu/ops/reduce-shared.ts +var reduceOps, reduceSharedOps, reduceInitValues, reduceOutputValues, getInnerMostAxes, computeOutAndReduceShapes, expandShapeToKeepDim, areAxesInnerMostDims, getAxesPermutation, createReduceSharedProgramInfo, reduceCommon, reduceMeanShared, reduceL1Shared, reduceL2Shared, reduceLogSumExpShared, reduceMaxShared, reduceMinShared, reduceProdShared, reduceSumShared, reduceSumSquareShared, reduceLogSumShared; +var init_reduce_shared = __esm({ + "web/lib/wasm/jsep/webgpu/ops/reduce-shared.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + init_reduce(); + init_transpose(); + reduceOps = { + max: "select(bestValue, candidate, candidate > bestValue)", + min: "select(bestValue, candidate, candidate < bestValue)", + mean: "bestValue + candidate", + sum: "bestValue + candidate", + prod: "bestValue * candidate", + sumSquare: "bestValue + candidate * candidate", + logSumExp: "bestValue + exp(candidate)", + l1: "bestValue + abs(candidate)", + l2: "bestValue + candidate * candidate", + logSum: "bestValue + candidate" + }; + reduceSharedOps = { + max: "select(bestValue, candidate, candidate > bestValue)", + min: "select(bestValue, candidate, candidate < bestValue)", + mean: "bestValue + candidate", + sum: "bestValue + candidate", + prod: "bestValue * candidate", + sumSquare: "bestValue + candidate", + logSumExp: "bestValue + candidate", + l1: "bestValue + candidate", + l2: "bestValue + candidate", + logSum: "bestValue + candidate" + }; + reduceInitValues = { + max: "_A[offset]", + min: "_A[offset]", + mean: "0", + sum: "0", + prod: "1", + sumSquare: "0", + logSumExp: "0", + l1: "0", + l2: "0", + logSum: "0" + }; + reduceOutputValues = { + max: "bestValue", + min: "bestValue", + sum: "bestValue", + prod: "bestValue", + sumSquare: "bestValue", + logSumExp: "log(bestValue)", + l1: "bestValue", + l2: "sqrt(bestValue)", + logSum: "log(bestValue)" + }; + getInnerMostAxes = (numInnerAxes, rank) => { + const res = []; + for (let i = rank - numInnerAxes; i < rank; ++i) { + res.push(i); + } + return res; + }; + computeOutAndReduceShapes = (shape, axes) => { + const outputShape = []; + const rank = shape.length; + for (let dim = 0; dim < rank; dim++) { + if (axes.indexOf(dim) === -1) { + outputShape.push(shape[dim]); + } + } + const reduceShape = axes.map((dim) => shape[dim]); + return [outputShape, reduceShape]; + }; + expandShapeToKeepDim = (shape, axes) => { + const rank = shape.length + axes.length; + const expandShape = []; + let shapeIdx = 0; + for (let dim = 0; dim < rank; dim++) { + if (axes.indexOf(dim) === -1) { + expandShape.push(shape[shapeIdx++]); + } else { + expandShape.push(1); + } + } + return expandShape; + }; + areAxesInnerMostDims = (axes, rank) => { + for (let i = 0; i < axes.length; ++i) { + if (axes[axes.length - i - 1] !== rank - 1 - i) { + return false; + } + } + return true; + }; + getAxesPermutation = (axes, rank) => { + const res = []; + if (!areAxesInnerMostDims(axes, rank)) { + for (let i = 0; i < rank; ++i) { + if (axes.indexOf(i) === -1) { + res.push(i); + } + } + axes.forEach((axis) => res.push(axis)); + } + return res; + }; + createReduceSharedProgramInfo = (name, shaderCache, inputs, reduceType, outputDataType, outputShape, reduceShape) => { + const inputShape = inputs[0].dims; + const outputSize = ShapeUtil.size(outputShape); + const reduceSize = ShapeUtil.size(reduceShape); + const input = inputVariable("_A", inputs[0].dataType, inputShape); + const output = outputVariable("output", outputDataType, outputShape); + const workgroupSize = 32; + const sharedMemorySnippet = ` + var aBestValues : array; + `; + const getShaderSource = (shaderHelper) => ` + ${shaderHelper.registerUniform("reduceSize", "u32").declareVariables(input, output)} + ${sharedMemorySnippet} + fn DIV_CEIL(a : u32, b : u32) -> u32 { + return ((a - 1u) / b + 1u); + } + ${shaderHelper.mainStart(workgroupSize)} + + let outputIndex = global_idx / ${workgroupSize}; + let offset = outputIndex * uniforms.reduceSize; + + var bestValue = f32(${reduceInitValues[reduceType]}); + let Length = uniforms.reduceSize; + for (var k = local_idx; k < Length; k = k + ${workgroupSize}) { + let candidate = f32(${input.getByOffset("offset + k")}); + bestValue = ${reduceOps[reduceType]}; + } + aBestValues[local_idx] = bestValue; + workgroupBarrier(); + + var reduceSize = min(Length, ${workgroupSize}u); + for (var currentSize = reduceSize / 2u; reduceSize > 1u; + currentSize = reduceSize / 2u) { + let interval = DIV_CEIL(reduceSize, 2u); + if (local_idx < currentSize) { + let candidate = aBestValues[local_idx + interval]; + bestValue = ${reduceSharedOps[reduceType]}; + aBestValues[local_idx] = bestValue; + } + reduceSize = interval; + workgroupBarrier(); + } + + if (local_idx == 0u) { + ${output.setByOffset( + "outputIndex", + `${reduceType === "mean" ? `${output.type.storage}(bestValue / f32(uniforms.reduceSize))` : `${output.type.storage}(${reduceOutputValues[reduceType]})`}` + )}; + } + }`; + return { + name, + shaderCache, + getShaderSource, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: outputDataType }], + dispatchGroup: { x: outputSize }, + programUniforms: [{ type: 12 /* uint32 */, data: reduceSize }] + }) + }; + }; + reduceCommon = (context, name, attributes, reduceType) => { + const updatedAttributes = context.inputs.length === 1 ? attributes : createReduceAttributesFromInputs(context.inputs, attributes); + let updatedAxes = updatedAttributes.axes; + if (updatedAxes.length === 0 && !updatedAttributes.noopWithEmptyAxes) { + updatedAxes = context.inputs[0].dims.map((_dim, i) => i); + } + const normalizeAxes = ShapeUtil.normalizeAxes(updatedAxes, context.inputs[0].dims.length); + let axes = normalizeAxes; + let input = context.inputs[0]; + const permutedAxes = getAxesPermutation(axes, context.inputs[0].dims.length); + if (permutedAxes.length > 0) { + input = context.compute( + createTransposeProgramInfo(context.inputs[0], permutedAxes), + { inputs: [0], outputs: [-1] } + )[0]; + axes = getInnerMostAxes(axes.length, input.dims.length); + } + const [outputShape, reduceShape] = computeOutAndReduceShapes(input.dims, axes); + let finalOutputShape = outputShape; + if (updatedAttributes.keepDims) { + finalOutputShape = expandShapeToKeepDim(outputShape, normalizeAxes); + } + context.compute( + createReduceSharedProgramInfo( + name, + { hint: updatedAttributes.cacheKey, inputDependencies: ["type"] }, + [input], + reduceType, + context.inputs[0].dataType, + finalOutputShape, + reduceShape + ), + { inputs: [input] } + ); + }; + reduceMeanShared = (context, attributes) => { + reduceCommon(context, "ReduceMeanShared", attributes, "mean"); + }; + reduceL1Shared = (context, attributes) => { + reduceCommon(context, "ReduceL1Shared", attributes, "l1"); + }; + reduceL2Shared = (context, attributes) => { + reduceCommon(context, "ReduceL2Shared", attributes, "l2"); + }; + reduceLogSumExpShared = (context, attributes) => { + reduceCommon(context, "ReduceLogSumExpShared", attributes, "logSumExp"); + }; + reduceMaxShared = (context, attributes) => { + reduceCommon(context, "ReduceMaxShared", attributes, "max"); + }; + reduceMinShared = (context, attributes) => { + reduceCommon(context, "ReduceMinShared", attributes, "min"); + }; + reduceProdShared = (context, attributes) => { + reduceCommon(context, "ReduceProdShared", attributes, "prod"); + }; + reduceSumShared = (context, attributes) => { + reduceCommon(context, "ReduceSumShared", attributes, "sum"); + }; + reduceSumSquareShared = (context, attributes) => { + reduceCommon(context, "ReduceSumSquareShared", attributes, "sumSquare"); + }; + reduceLogSumShared = (context, attributes) => { + reduceCommon(context, "ReduceLogSumShared", attributes, "logSum"); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/reduce.ts +var validateInputs2, noOp, createReduceProgramInfo, createReduceAttributesFromInputs, runReduceProgram, reduceLogSumNaive, reduceL1Naive, reduceL2Naive, reduceLogSumExpNaive, reduceMaxNaive, reduceMeanNaive, reduceMinNaive, reduceProdNaive, reduceSumNaive, reduceSumSquareNaive, useNaiveReduceMethod, reduceMean, reduceL1, reduceL2, reduceLogSumExp, reduceMax, reduceMin, reduceProd, reduceSum, reduceSumSquare, reduceLogSum; +var init_reduce = __esm({ + "web/lib/wasm/jsep/webgpu/ops/reduce.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + init_reduce_shared(); + validateInputs2 = (inputs) => { + if (!inputs || inputs.length === 0 || inputs.length > 2) { + throw new Error("Reduce op requires 1 or 2 inputs."); + } + if (inputs.length === 2 && inputs[1].dims.length !== 1) { + throw new Error("Invalid axes input dims."); + } + }; + noOp = (input) => ["", "", `var value = ${input.getByIndices("input_indices")};`, ""]; + createReduceProgramInfo = (name, shaderCache, inputs, reduceOp, axesInput, outputDataType, keepDims = false, noopWithEmptyAxes = false) => { + const outputShape = []; + const inputShape = inputs[0].dims; + const inputRank = inputShape.length; + const axes = ShapeUtil.normalizeAxes(axesInput, inputRank); + const reduceOnAllAxes = !noopWithEmptyAxes && axes.length === 0; + inputShape.forEach((d, i) => { + if (reduceOnAllAxes || axes.indexOf(i) >= 0) { + if (keepDims) { + outputShape.push(1); + } + } else { + outputShape.push(d); + } + }); + const outputRank = outputShape.length; + const outputSize = ShapeUtil.size(outputShape); + const getShaderSource = (shaderHelper) => { + const idxCopy = []; + const input = inputVariable("_A", inputs[0].dataType, inputRank); + const output = outputVariable("output", outputDataType, outputRank); + const ops = reduceOp(input, output, axes); + let reduceOps2 = ops[2]; + for (let k = 0, l = 0; k < inputRank; k++) { + if (reduceOnAllAxes || axes.indexOf(k) >= 0) { + if (keepDims) { + l++; + } + reduceOps2 = `for(var j${k}: u32 = 0; j${k} < ${inputShape[k]}; j${k}++) { + ${ops[2].includes("last_index") ? `let last_index = j${k};` : ""} + ${input.indicesSet("input_indices", k, `j${k}`)} + ${reduceOps2} + }`; + } else { + idxCopy.push(`${input.indicesSet("input_indices", k, output.indicesGet("output_indices", l))};`); + l++; + } + } + return ` + + ${shaderHelper.registerUniform("output_size", "u32").declareVariables(input, output)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + var input_indices: ${input.type.indices}; + let output_indices = ${output.offsetToIndices("global_idx")}; + + ${idxCopy.join("\n")} + ${ops[0]} // init ops for reduce max/min + ${ops[1]} + ${reduceOps2} + ${ops[3]} + ${ops.length === 4 ? output.setByOffset("global_idx", "value") : ops.slice(4).join("\n")} + }`; + }; + return { + name, + shaderCache, + getShaderSource, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: outputDataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms: [{ type: 12 /* uint32 */, data: outputSize }, ...createTensorShapeVariables(inputShape, outputShape)] + }) + }; + }; + createReduceAttributesFromInputs = (inputs, attributes) => { + const axes = []; + if (inputs[1].dims[0] > 0) { + inputs[1].getBigInt64Array().forEach((v) => axes.push(Number(v))); + } + return createAttributeWithCacheKey( + { axes, keepDims: attributes.keepDims, noopWithEmptyAxes: attributes.noopWithEmptyAxes } + ); + }; + runReduceProgram = (context, name, attributes, reduceOp) => { + const inputs = context.inputs; + const updatedAttributes = inputs.length === 1 ? attributes : createReduceAttributesFromInputs(inputs, attributes); + context.compute( + createReduceProgramInfo( + name, + { hint: updatedAttributes.cacheKey, inputDependencies: ["rank"] }, + [inputs[0]], + updatedAttributes.noopWithEmptyAxes && updatedAttributes.axes.length === 0 ? noOp : reduceOp, + updatedAttributes.axes, + inputs[0].dataType, + updatedAttributes.keepDims, + updatedAttributes.noopWithEmptyAxes + ), + { inputs: [0] } + ); + }; + reduceLogSumNaive = (context, attributes) => { + validateInputs2(context.inputs); + const reduceOp = (input, output) => [ + `var value = ${output.type.storage}(0);`, + "", + `value += ${input.getByIndices("input_indices")};`, + "value = log(value);" + ]; + runReduceProgram(context, "ReduceLogSum", attributes, reduceOp); + }; + reduceL1Naive = (context, attributes) => { + validateInputs2(context.inputs); + const reduceOp = (input, output) => [ + `var value = ${output.type.storage}(0);`, + "", + `value += abs(${input.getByIndices("input_indices")});`, + "" + ]; + runReduceProgram(context, "ReduceL1", attributes, reduceOp); + }; + reduceL2Naive = (context, attributes) => { + validateInputs2(context.inputs); + const reduceOp = (input, output) => [ + `var t = ${output.type.value}(0); var value = ${output.type.value}(0);`, + "", + `t = ${input.getByIndices("input_indices")}; value += (t * t);`, + "value = sqrt(value);" + ]; + runReduceProgram(context, "ReduceL2", attributes, reduceOp); + }; + reduceLogSumExpNaive = (context, attributes) => { + validateInputs2(context.inputs); + const reduceOp = (input, output) => [ + `var value = ${output.type.storage}(0);`, + "", + `value += exp(${input.getByIndices("input_indices")});`, + "value = log(value);" + ]; + runReduceProgram(context, "ReduceLogSumExp", attributes, reduceOp); + }; + reduceMaxNaive = (context, attributes) => { + validateInputs2(context.inputs); + const reduceOp = (input, _output, axes) => { + const idxZero = []; + for (let k = 0; k < input.rank; k++) { + if (axes.indexOf(k) >= 0 || axes.length === 0) { + idxZero.push(input.indicesSet("input_indices", k, 0)); + } + } + return [ + `${idxZero.join("\n")}`, + `var value = ${input.getByIndices("input_indices")};`, + `value = max(value, ${input.getByIndices("input_indices")});`, + "" + ]; + }; + runReduceProgram(context, "ReduceMax", attributes, reduceOp); + }; + reduceMeanNaive = (context, attributes) => { + validateInputs2(context.inputs); + const reduceOp = (input, output, axes) => { + let size = 1; + for (let k = 0; k < input.rank; k++) { + if (axes.indexOf(k) >= 0 || axes.length === 0) { + size *= context.inputs[0].dims[k]; + } + } + return [ + "var sum = f32(0);", + "", + `sum += f32(${input.getByIndices("input_indices")});`, + `let value = ${output.type.value}(sum / ${size});` + ]; + }; + runReduceProgram(context, "ReduceMean", attributes, reduceOp); + }; + reduceMinNaive = (context, attributes) => { + validateInputs2(context.inputs); + const reduceOp = (input, _output, axes) => { + const idxZero = []; + for (let k = 0; k < input.rank; k++) { + if (axes.indexOf(k) >= 0 || axes.length === 0) { + idxZero.push(`input_indices[${k}] = 0;`); + } + } + return [ + `${idxZero.join("\n")}`, + `var value = ${input.getByIndices("input_indices")};`, + `value = min(value, ${input.getByIndices("input_indices")});`, + "" + ]; + }; + runReduceProgram(context, "ReduceMin", attributes, reduceOp); + }; + reduceProdNaive = (context, attributes) => { + validateInputs2(context.inputs); + const reduceOp = (input, output) => [ + `var value = ${output.type.storage}(1);`, + "", + `value *= ${input.getByIndices("input_indices")};`, + "" + ]; + runReduceProgram(context, "ReduceProd", attributes, reduceOp); + }; + reduceSumNaive = (context, attributes) => { + validateInputs2(context.inputs); + const reduceOp = (input, output) => [ + `var value = ${output.type.storage}(0);`, + "", + `value += ${input.getByIndices("input_indices")};`, + "" + ]; + runReduceProgram(context, "ReduceSum", attributes, reduceOp); + }; + reduceSumSquareNaive = (context, attributes) => { + validateInputs2(context.inputs); + const reduceOp = (input, output) => [ + `var t = ${output.type.value}(0); var value = ${output.type.value}(0);`, + "", + `t = ${input.getByIndices("input_indices")}; value += t * t;`, + "" + ]; + runReduceProgram(context, "ReduceSumSquare", attributes, reduceOp); + }; + useNaiveReduceMethod = (shape, axes, noopWithEmptyAxes) => { + if (axes.length === 0) { + return noopWithEmptyAxes; + } + let outputSize = 1; + let reduceSize = 1; + for (let dim = 0; dim < axes.length; dim++) { + if (axes.indexOf(dim) === -1) { + outputSize *= shape[dim]; + } else { + reduceSize *= shape[dim]; + } + } + return reduceSize < 32 && outputSize > 1024; + }; + reduceMean = (context, attributes) => { + if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) { + reduceMeanNaive(context, attributes); + } else { + reduceMeanShared(context, attributes); + } + }; + reduceL1 = (context, attributes) => { + if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) { + reduceL1Naive(context, attributes); + } else { + reduceL1Shared(context, attributes); + } + }; + reduceL2 = (context, attributes) => { + if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) { + reduceL2Naive(context, attributes); + } else { + reduceL2Shared(context, attributes); + } + }; + reduceLogSumExp = (context, attributes) => { + if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) { + reduceLogSumExpNaive(context, attributes); + } else { + reduceLogSumExpShared(context, attributes); + } + }; + reduceMax = (context, attributes) => { + if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) { + reduceMaxNaive(context, attributes); + } else { + reduceMaxShared(context, attributes); + } + }; + reduceMin = (context, attributes) => { + if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) { + reduceMinNaive(context, attributes); + } else { + reduceMinShared(context, attributes); + } + }; + reduceProd = (context, attributes) => { + if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) { + reduceProdNaive(context, attributes); + } else { + reduceProdShared(context, attributes); + } + }; + reduceSum = (context, attributes) => { + if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) { + reduceSumNaive(context, attributes); + } else { + reduceSumShared(context, attributes); + } + }; + reduceSumSquare = (context, attributes) => { + if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) { + reduceSumSquareNaive(context, attributes); + } else { + reduceSumSquareShared(context, attributes); + } + }; + reduceLogSum = (context, attributes) => { + if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) { + reduceLogSumNaive(context, attributes); + } else { + reduceLogSumShared(context, attributes); + } + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/argminmax.ts +var validateInputs3, argMin, argMax, parseArgMinMaxAttributes; +var init_argminmax = __esm({ + "web/lib/wasm/jsep/webgpu/ops/argminmax.ts"() { + "use strict"; + init_wasm_common(); + init_attribute_with_cache_key(); + init_reduce(); + validateInputs3 = (inputs) => { + if (!inputs || inputs.length === 0 || inputs.length > 2) { + throw new Error("ArgMinMaxOp op requires 1 or 2 inputs."); + } + if (inputs[0].dataType !== 1 /* float */) { + throw new Error("Invalid input type."); + } + }; + argMin = (context, attributes) => { + validateInputs3(context.inputs); + const argMinMaxOp = (input, output, axes) => { + const idxZero = []; + for (let k = 0; k < input.rank; k++) { + if (axes.indexOf(k) >= 0 || axes.length === 0) { + idxZero.push(`input_indices[${k}] = 0;`); + } + } + return [ + `${idxZero.join("\n")}`, + `var value = ${input.getByIndices("input_indices")}; +var best_index : i32 = 0;`, + `if (${input.getByIndices("input_indices")} ${attributes.selectLastIndex > 0 ? "<=" : "<"} value) { + value = ${input.getByIndices("input_indices")}; + best_index = i32(last_index); + }`, + "", + output.setByOffset("global_idx", "best_index") + ]; + }; + context.compute( + createReduceProgramInfo( + "ArgMin", + { hint: attributes.cacheKey, inputDependencies: ["rank"] }, + [context.inputs[0]], + argMinMaxOp, + [attributes.axis], + 7 /* int64 */, + attributes.keepDims + ), + { inputs: [0] } + ); + }; + argMax = (context, attributes) => { + validateInputs3(context.inputs); + const argMinMaxOp = (input, output, axes) => { + const idxZero = []; + for (let k = 0; k < input.rank; k++) { + if (axes.indexOf(k) >= 0 || axes.length === 0) { + idxZero.push(`input_indices[${k}] = 0;`); + } + } + return [ + `${idxZero.join("\n")}`, + `var value = ${input.getByIndices("input_indices")}; +var best_index : i32 = 0;`, + `if (${input.getByIndices("input_indices")} ${attributes.selectLastIndex > 0 ? ">=" : ">"} value) { + value = ${input.getByIndices("input_indices")}; + best_index = i32(last_index); + }`, + "", + output.setByOffset("global_idx", "best_index") + ]; + }; + context.compute( + createReduceProgramInfo( + "argMax", + { hint: attributes.cacheKey, inputDependencies: ["rank"] }, + [context.inputs[0]], + argMinMaxOp, + [attributes.axis], + 7 /* int64 */, + attributes.keepDims + ), + { inputs: [0] } + ); + }; + parseArgMinMaxAttributes = (attributes) => createAttributeWithCacheKey(attributes); + } +}); + +// web/lib/wasm/jsep/webgpu/ops/concat.ts +var validateInputs4, calculateInputIndexImpl, assignOutputData, createConcatProgramInfo, concat, parseConcatAttributes; +var init_concat = __esm({ + "web/lib/wasm/jsep/webgpu/ops/concat.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs4 = (inputs, axis) => { + if (!inputs || inputs.length < 1) { + throw new Error("too few inputs"); + } + const referenceIndex = 0; + const referenceInput = inputs[referenceIndex]; + const inputType = referenceInput.dataType; + const inputRank = referenceInput.dims.length; + inputs.forEach((input, i) => { + if (i === referenceIndex) { + return; + } + if (input.dataType !== inputType) { + throw new Error("input tensors should be one type"); + } + if (input.dims.length !== inputRank) { + throw new Error("input tensors should have the same shape"); + } + input.dims.forEach((dim, i2) => { + if (i2 !== axis && dim !== referenceInput.dims[i2]) { + throw new Error("non concat dimensions must match"); + } + }); + }); + }; + calculateInputIndexImpl = (numberOfTensors, sizeInConcatAxisStr) => ` + fn calculateInputIndex(index: u32) -> u32 { + let sizeInConcatAxis = array(${sizeInConcatAxisStr}); + for (var i: u32 = 0u; i < ${numberOfTensors}; i += 1u ) { + if (index < sizeInConcatAxis[i]) { + return i; + } + } + return ${numberOfTensors}u; + }`; + assignOutputData = (inputs, output) => { + const numberOfTensors = inputs.length; + const codeLines = []; + for (let i = 0; i < numberOfTensors; ++i) { + const returnSnippet = output.setByOffset("global_idx", inputs[i].getByIndices("indices")); + if (numberOfTensors === 1) { + codeLines.push(returnSnippet); + } else if (i === 0) { + codeLines.push(`if (inputIndex == ${i}u) { ${returnSnippet} }`); + } else if (i === numberOfTensors - 1) { + codeLines.push(`else { ${returnSnippet} }`); + } else { + codeLines.push(`else if (inputIndex == ${i}) { ${returnSnippet} }`); + } + } + return codeLines.join("\n"); + }; + createConcatProgramInfo = (inputs, adjustedAxis, outputShape, dataType) => { + const outputSize = ShapeUtil.size(outputShape); + const sizeInConcatAxis = new Array(inputs.length); + const inputVars = new Array(inputs.length); + let previousSum = 0; + const inputDependencies = []; + const inputRanks = []; + const programUniforms = [{ type: 12 /* uint32 */, data: outputSize }]; + for (let i = 0; i < inputs.length; ++i) { + previousSum += inputs[i].dims[adjustedAxis]; + sizeInConcatAxis[i] = previousSum; + inputRanks.push(inputs[i].dims.length); + inputVars[i] = inputVariable(`input${i}`, dataType, inputRanks[i]); + inputDependencies.push("rank"); + programUniforms.push({ type: 12 /* uint32 */, data: sizeInConcatAxis[i] }); + } + for (let i = 0; i < inputs.length; ++i) { + programUniforms.push(...createTensorShapeVariables(inputs[i].dims)); + } + programUniforms.push(...createTensorShapeVariables(outputShape)); + const output = outputVariable("output", dataType, outputShape.length); + const indicesAxis = output.indicesGet("indices", adjustedAxis); + const sizeInConcatAxisStr = Array.from(Array(sizeInConcatAxis.length).keys()).map((i) => `uniforms.sizeInConcatAxis${i}`).join(","); + const getShaderSource = (shaderHelper) => ` + + ${(() => { + shaderHelper.registerUniform("outputSize", "u32"); + for (let i = 0; i < inputs.length; i++) { + shaderHelper.registerUniform(`sizeInConcatAxis${i}`, "u32"); + } + return shaderHelper.declareVariables(...inputVars, output); + })()} + + ${calculateInputIndexImpl(sizeInConcatAxis.length, sizeInConcatAxisStr)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + + var indices = ${output.offsetToIndices("global_idx")}; + + let inputIndex = calculateInputIndex(${indicesAxis}); + if (inputIndex != 0u) { + let sizeInConcatAxis = array(${sizeInConcatAxisStr}); + ${indicesAxis} -= sizeInConcatAxis[inputIndex - 1u]; + } + + ${assignOutputData(inputVars, output)} + }`; + return { + name: "Concat", + shaderCache: { hint: `${adjustedAxis}`, inputDependencies }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }; + }; + concat = (context, attributes) => { + const inputs = context.inputs; + const inputShape = inputs[0].dims; + const adjustedAxis = ShapeUtil.normalizeAxis(attributes.axis, inputShape.length); + validateInputs4(inputs, adjustedAxis); + const outputShape = inputShape.slice(); + outputShape[adjustedAxis] = inputs.reduce((sum, input) => sum + (input.dims.length > adjustedAxis ? input.dims[adjustedAxis] : 0), 0); + const nonEmptyInputs = inputs.filter((input) => ShapeUtil.size(input.dims) > 0); + context.compute( + createConcatProgramInfo(nonEmptyInputs, adjustedAxis, outputShape, inputs[0].dataType), + { inputs: nonEmptyInputs } + ); + }; + parseConcatAttributes = (attributes) => createAttributeWithCacheKey({ axis: attributes.axis }); + } +}); + +// web/lib/wasm/jsep/webgpu/ops/attention.ts +var validateAttentionInputs, createInPlaceSoftmaxProgramInfo, createAttentionProbsProgramInfo, createVxAttentionScoreProgramInfo, applyAttention, prepare, attention; +var init_attention = __esm({ + "web/lib/wasm/jsep/webgpu/ops/attention.ts"() { + "use strict"; + init_wasm_common(); + init_types(); + init_common(); + init_concat(); + validateAttentionInputs = (inputs, attributes) => { + const input = inputs[0]; + const weights = inputs[1]; + const bias = inputs[2]; + const maskIndex = inputs[3]; + const past = inputs[4]; + const relativePositionBias = inputs[5]; + if (past && relativePositionBias) { + throw new Error("Attention cannot have both past and relative_position_bias"); + } + if (input.dims.length !== 3) { + throw new Error('Input "input" must have 3 dimensions'); + } + const batchSize = input.dims[0]; + const sequenceLength = input.dims[1]; + const inputHiddenSize = input.dims[2]; + if (bias.dims.length !== 1) { + throw new Error('Input "bias" is expected to have 1 dimensions'); + } + if (weights.dims.length !== 2) { + throw new Error('Input "weights" is expected to have 2 dimensions'); + } + if (weights.dims[0] !== inputHiddenSize) { + throw new Error("Input 1 dimension 0 should have same length as dimension 2 of input 0"); + } + if (bias.dims[0] !== weights.dims[1]) { + throw new Error('Input "bias" dimension 0 should have same length as dimension 1 of input "weights"'); + } + let qHiddenSize = bias.dims[0] / 3; + let kHiddenSize = qHiddenSize; + let vHiddenSize = kHiddenSize; + if (attributes.qkvHiddenSizes.length > 0) { + if (attributes.qkvHiddenSizes.length !== 3) { + throw new Error("qkv_hidden_sizes attribute should have 3 elements"); + } + for (const sz of attributes.qkvHiddenSizes) { + if (sz % attributes.numHeads !== 0) { + throw new Error("qkv_hidden_sizes should be divisible by num_heads"); + } + } + qHiddenSize = attributes.qkvHiddenSizes[0]; + kHiddenSize = attributes.qkvHiddenSizes[1]; + vHiddenSize = attributes.qkvHiddenSizes[2]; + } + const kvSequenceLength = sequenceLength; + if (qHiddenSize !== kHiddenSize) { + throw new Error("qkv_hidden_sizes first element should be same as the second"); + } + if (bias.dims[0] !== qHiddenSize + kHiddenSize + vHiddenSize) { + throw new Error('Input "bias" dimension 0 should have same length as sum of Q/K/V hidden sizes'); + } + let pastSequenceLength = 0; + if (past) { + if (kHiddenSize !== vHiddenSize) { + throw new Error('Input "past" expect k_hidden_size == v_hidden_size'); + } + if (past.dims.length !== 5) { + throw new Error('Input "past" must have 5 dimensions'); + } + if (past.dims[0] !== 2) { + throw new Error('Input "past" first dimension must be 2'); + } + if (past.dims[1] !== batchSize) { + throw new Error('Input "past" second dimension must be batch_size'); + } + if (past.dims[2] !== attributes.numHeads) { + throw new Error('Input "past" third dimension must be num_heads'); + } + if (past.dims[4] !== kHiddenSize / attributes.numHeads) { + throw new Error('Input "past" fifth dimension must be k_hidden_size / num_heads'); + } + if (!attributes.pastPresentShareBuffer) { + pastSequenceLength = past.dims[3]; + } + } + const totalSequenceLength = kvSequenceLength + pastSequenceLength; + const maxSequenceLength = -1; + const maskType = 0 /* none */; + if (maskIndex) { + throw new Error("Mask not supported"); + } + if (past) { + throw new Error("past is not supported"); + } + return { + batchSize, + sequenceLength, + pastSequenceLength, + kvSequenceLength, + totalSequenceLength, + maxSequenceLength, + inputHiddenSize, + hiddenSize: qHiddenSize, + vHiddenSize, + headSize: Math.floor(qHiddenSize / attributes.numHeads), + vHeadSize: Math.floor(vHiddenSize / attributes.numHeads), + numHeads: attributes.numHeads, + isUnidirectional: false, + pastPresentShareBuffer: false, + maskFilterValue: attributes.maskFilterValue, + maskType, + scale: attributes.scale, + broadcastResPosBias: false, + passPastInKv: false, + qkvFormat: 1 /* qkvBNSH */ + }; + }; + createInPlaceSoftmaxProgramInfo = (_context, input, n, d) => { + const components = getMaxComponents(d); + let WG = 64; + const dComp = d / components; + if (dComp < WG) { + WG = 1; + } else if (dComp / 8 < 64) { + WG = Math.ceil(dComp / 8); + } + const elementsPerThread = Math.ceil(d / components / WG); + const programUniforms = [ + { type: input.dataType, data: 1 / d }, + { type: 12 /* uint32 */, data: dComp }, + { type: 12 /* uint32 */, data: elementsPerThread } + ]; + const dataType = tensorTypeToWsglStorageType(input.dataType, components); + const f32Type = tensorTypeToWsglValueType(1 /* float */, components); + const getShaderSource = (shaderHelper) => { + const inputHelper = outputVariable("x", input.dataType, input.dims, components); + const elemValueType = tensorTypeToWsglValueType(input.dataType); + const uniforms = [ + { name: "d_inv", type: elemValueType }, + { name: "d_comp", type: "u32" }, + { name: "elements_per_thread", type: "u32" } + ]; + return ` + var thread_max: array; + var thread_sum: array; + ${shaderHelper.registerUniforms(uniforms).declareVariables(inputHelper)} + ${shaderHelper.mainStart([ + WG, + 1, + 1 + ])} + let local_offset = local_idx * uniforms.elements_per_thread; + let offset = workgroup_id.x * uniforms.d_comp + local_offset; + + var thread_max_vector = ${f32Type}(-3.402823e+38f); + for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < uniforms.d_comp; i++) { + thread_max_vector = max(${f32Type}(x[offset + i]), thread_max_vector); + } + thread_max[local_idx] = ${(() => { + switch (components) { + case 1: + return "thread_max_vector"; + case 2: + return "max(thread_max_vector.x, thread_max_vector.y)"; + case 4: + return "max(max(thread_max_vector.x, thread_max_vector.y), max(thread_max_vector.z, thread_max_vector.w))"; + default: + throw new Error(`Unsupported components: ${components}`); + } + })()}; + workgroupBarrier(); + + var max_value = f32(-3.402823e+38f); + for (var i = 0u; i < ${WG}; i++) { + max_value = max(thread_max[i], max_value); + } + + var sum_vector = ${f32Type}(0); + for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < uniforms.d_comp; i++) { + sum_vector += exp(${f32Type}(x[offset + i]) - max_value); + } + thread_sum[local_idx] = ${(() => { + switch (components) { + case 1: + return "sum_vector"; + case 2: + return "sum_vector.x + sum_vector.y"; + case 4: + return "sum_vector.x + sum_vector.y + sum_vector.z + sum_vector.w"; + default: + throw new Error(`Unsupported components: ${components}`); + } + })()}; + workgroupBarrier(); + + var sum: f32 = 0; + for (var i = 0u; i < ${WG}; i++) { + sum += thread_sum[i]; + } + + if (sum == 0) { + for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < uniforms.d_comp; i++) { + x[offset + i] = ${inputHelper.type.value}(uniforms.d_inv); + } + } else { + for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < uniforms.d_comp; i++) { + var f32input = ${f32Type}(x[offset + i]); + x[offset + i] = ${inputHelper.type.value}(exp(f32input - max_value) / sum); + } + } + }`; + }; + return { + name: "AttentionProbsSoftmax", + shaderCache: { hint: `${WG};${dataType};${components}` }, + getShaderSource, + getRunData: () => ({ outputs: [], dispatchGroup: { x: n }, programUniforms }) + }; + }; + createAttentionProbsProgramInfo = (_context, q, key, relativePositionBias, parameters, attributes, pastSequenceLength) => { + const totalSequenceLength = pastSequenceLength + parameters.kvSequenceLength; + const probsShape = [parameters.batchSize, parameters.numHeads, parameters.sequenceLength, totalSequenceLength]; + const alpha = attributes.scale === 0 ? 1 / Math.sqrt(parameters.headSize) : attributes.scale; + const components = getMaxComponents(parameters.headSize); + const vectorizedHeadSize = parameters.headSize / components; + const TILE_SIZE = 12; + const dispatch = { + x: Math.ceil(totalSequenceLength / TILE_SIZE), + y: Math.ceil(parameters.sequenceLength / TILE_SIZE), + z: parameters.batchSize * parameters.numHeads + }; + const programUniforms = [ + { type: 12 /* uint32 */, data: parameters.sequenceLength }, + { type: 12 /* uint32 */, data: vectorizedHeadSize }, + { type: 12 /* uint32 */, data: totalSequenceLength }, + { type: 12 /* uint32 */, data: parameters.numHeads }, + { type: 1 /* float */, data: alpha } + ]; + const inputDependencies = ["type", "type"]; + if (relativePositionBias) { + inputDependencies.push("rank"); + programUniforms.push(...createTensorShapeVariables(relativePositionBias.dims)); + } + const getShaderSource = (shaderHelper) => { + const qInput = inputVariable("q", q.dataType, q.dims, components); + const kInput = inputVariable("key", key.dataType, key.dims, components); + const inputVars = [qInput, kInput]; + const relativePositionBiasInput = relativePositionBias ? inputVariable("relative_position_bias", relativePositionBias.dataType, relativePositionBias.dims.length) : void 0; + if (relativePositionBiasInput) { + inputVars.push(relativePositionBiasInput); + } + const output = outputVariable("output", q.dataType, probsShape); + const f32Type = tensorTypeToWsglValueType(1 /* float */, components); + const uniforms = [ + { name: "M", type: "u32" }, + { name: "K", type: "u32" }, + { name: "N", type: "u32" }, + { name: "num_heads", type: "u32" }, + { name: "alpha", type: "f32" } + ]; + return ` + const TILE_SIZE = ${TILE_SIZE}u; + + var tileQ: array<${qInput.type.storage}, ${TILE_SIZE * TILE_SIZE}>; + var tileK: array<${qInput.type.storage}, ${TILE_SIZE * TILE_SIZE}>; + ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVars, output)} + ${shaderHelper.mainStart([ + TILE_SIZE, + TILE_SIZE, + 1 + ])} + // x holds the N and y holds the M + let headIdx = workgroup_id.z; + let m = workgroup_id.y * TILE_SIZE; + let n = workgroup_id.x * TILE_SIZE; + let qOffset = uniforms.M * uniforms.K * headIdx + m * uniforms.K; + let kOffset = uniforms.N * uniforms.K * headIdx + n * uniforms.K; + + var value = ${f32Type}(0); + for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) { + if (global_id.y < uniforms.M && w + local_id.x < uniforms.K) { + tileQ[TILE_SIZE * local_id.y + local_id.x] = q[qOffset + local_id.y * uniforms.K + w + local_id.x]; + } + if (n + local_id.y < uniforms.N && w + local_id.x < uniforms.K) { + tileK[TILE_SIZE * local_id.y + local_id.x] = key[kOffset + local_id.y * uniforms.K + w + local_id.x]; + } + workgroupBarrier(); + + for (var k: u32 = 0u; k < TILE_SIZE && w+k < uniforms.K; k++) { + value += ${f32Type}(tileQ[TILE_SIZE * local_id.y + k] * tileK[TILE_SIZE * local_id.x + k]); + } + + workgroupBarrier(); + } + + let headOffset = headIdx * uniforms.M * uniforms.N; + if (global_id.y < uniforms.M && global_id.x < uniforms.N) { + let outputIdx = headOffset + global_id.y * uniforms.N + global_id.x; + var sum: f32 = ${(() => { + switch (components) { + case 1: + return "value"; + case 2: + return "value.x + value.y"; + case 4: + return "value.x + value.y + value.z + value.w"; + default: + throw new Error(`Unsupported components: ${components}`); + } + })()}; + + ${(() => { + if (relativePositionBiasInput) { + return ` + let batch = workgroup_id.z / uniforms.num_heads; + let head = workgroup_id.z % uniforms.num_heads; + var indices = ${relativePositionBiasInput.type.indices}(batch, head, global_id.y, global_id.x); + output[outputIdx] = ${output.type.value}(sum * uniforms.alpha) + ${relativePositionBiasInput.getByIndices("indices")};`; + } + return `output[outputIdx] = ${output.type.value} (sum * uniforms.alpha);`; + })()} + } + }`; + }; + return { + name: "AttentionProbs", + shaderCache: { hint: `${components}`, inputDependencies }, + getRunData: () => ({ + outputs: [{ dims: probsShape, dataType: q.dataType, gpuDataType: 0 /* default */ }], + dispatchGroup: dispatch, + programUniforms + }), + getShaderSource + }; + }; + createVxAttentionScoreProgramInfo = (_context, probs, v, params, pastSequenceLength) => { + const totalSequenceLength = pastSequenceLength + params.kvSequenceLength; + const outputShape = [params.batchSize, params.sequenceLength, params.vHiddenSize]; + const TILE_SIZE = 12; + const dispatch = { + x: Math.ceil(params.vHeadSize / TILE_SIZE), + y: Math.ceil(params.sequenceLength / TILE_SIZE), + z: params.batchSize * params.numHeads + }; + const programUniforms = [ + { type: 12 /* uint32 */, data: params.sequenceLength }, + { type: 12 /* uint32 */, data: totalSequenceLength }, + { type: 12 /* uint32 */, data: params.vHeadSize }, + { type: 12 /* uint32 */, data: params.numHeads }, + { type: 12 /* uint32 */, data: params.vHiddenSize } + ]; + const inputDependencies = ["type", "type"]; + const getShaderSource = (shaderHelper) => { + const probsHelper = inputVariable("probs", probs.dataType, probs.dims); + const vHelper = inputVariable("v", v.dataType, v.dims); + const output = outputVariable("output", probs.dataType, outputShape); + const uniforms = [ + { name: "M", type: "u32" }, + { name: "K", type: "u32" }, + { name: "N", type: "u32" }, + { name: "num_heads", type: "u32" }, + { name: "v_hidden_size", type: "u32" } + ]; + return ` + const TILE_SIZE = ${TILE_SIZE}u; + var tileQ: array<${probsHelper.type.value}, ${TILE_SIZE * TILE_SIZE}>; + var tileK: array<${probsHelper.type.value}, ${TILE_SIZE * TILE_SIZE}>; + ${shaderHelper.registerUniforms(uniforms).declareVariables(probsHelper, vHelper, output)} + ${shaderHelper.mainStart([ + TILE_SIZE, + TILE_SIZE, + 1 + ])} + let headIdx = workgroup_id.z; + let m = global_id.y; + let n = global_id.x; + + let offsetA = headIdx * (uniforms.M * uniforms.K) + m * uniforms.K; + let offsetB = headIdx * (uniforms.N * uniforms.K) + n; + + var value = ${probsHelper.type.storage}(0); + for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) { + if (m < uniforms.M && w + local_id.x < uniforms.K) { + tileQ[TILE_SIZE * local_id.y + local_id.x] = probs[offsetA + w + local_id.x]; + } + if (n < uniforms.N && w + local_id.y < uniforms.K) { + tileK[TILE_SIZE * local_id.y + local_id.x] = v[offsetB + (w + local_id.y) * uniforms.N]; + } + workgroupBarrier(); + for (var k: u32 = 0u; k < TILE_SIZE && w+k < uniforms.K; k++) { + value += tileQ[TILE_SIZE * local_id.y + k] * tileK[TILE_SIZE * k + local_id.x]; + } + workgroupBarrier(); + } + + // we need to transpose output from BNSH_v to BSND_v + let batchIdx = workgroup_id.z / uniforms.num_heads; + let currentBatchHeadNumber = workgroup_id.z % uniforms.num_heads; + if (m < uniforms.M && n < uniforms.N) { + let outputIdx = batchIdx * uniforms.M * uniforms.v_hidden_size + m * uniforms.v_hidden_size + + currentBatchHeadNumber * uniforms.N + n; + output[outputIdx] = value; + } + }`; + }; + return { + name: "AttentionScore", + shaderCache: { inputDependencies }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: probs.dataType, gpuDataType: 0 /* default */ }], + dispatchGroup: dispatch, + programUniforms + }), + getShaderSource + }; + }; + applyAttention = (context, q, k, v, _maskIndex, _past, pastKey, pastValue, relativePositionBias, parameters, attributes) => { + const outputPresentKey = context.outputCount > 1; + const outputPresentValue = context.outputCount > 2; + const pastSequenceLength = outputPresentKey && outputPresentValue ? parameters.pastSequenceLength : 0; + const totalSequenceLength = pastSequenceLength + parameters.kvSequenceLength; + const presentKeyShape = [parameters.batchSize, parameters.numHeads, totalSequenceLength, parameters.headSize]; + const concatKeyInputs = pastKey ? [pastKey, k] : [k]; + const key = outputPresentKey ? context.compute( + createConcatProgramInfo(concatKeyInputs, 2, presentKeyShape, k.dataType), + { inputs: concatKeyInputs, outputs: [1] } + )[0] : k; + const presentValueShape = [parameters.batchSize, parameters.numHeads, totalSequenceLength, parameters.headSize]; + const concatValueInputs = pastValue ? [pastValue, v] : [v]; + const value = outputPresentValue ? context.compute( + createConcatProgramInfo(concatValueInputs, 2, presentValueShape, v.dataType), + { inputs: concatValueInputs, outputs: [2] } + )[0] : v; + const inputsK = [q, key]; + if (relativePositionBias) { + inputsK.push(relativePositionBias); + } + const probs = context.compute( + createAttentionProbsProgramInfo( + context, + q, + key, + relativePositionBias, + parameters, + attributes, + pastSequenceLength + ), + { inputs: inputsK, outputs: [-1] } + )[0]; + context.compute( + createInPlaceSoftmaxProgramInfo( + context, + probs, + parameters.batchSize * parameters.numHeads * parameters.sequenceLength, + totalSequenceLength + ), + { inputs: [probs], outputs: [] } + ); + const inputsV = [probs, value]; + context.compute( + createVxAttentionScoreProgramInfo(context, probs, value, parameters, pastSequenceLength), + { inputs: inputsV, outputs: [0] } + ); + }; + prepare = (context, parameters) => { + const outputShape = [ + parameters.batchSize, + parameters.numHeads, + parameters.sequenceLength, + parameters.headSize + ]; + const M = parameters.sequenceLength; + const K = parameters.inputHiddenSize; + const N = parameters.headSize; + const TILE_SIZE = 12; + const dispatch = { + x: Math.ceil(parameters.headSize / TILE_SIZE), + y: Math.ceil(parameters.sequenceLength / TILE_SIZE), + z: parameters.batchSize * parameters.numHeads + }; + const inputs = [context.inputs[0], context.inputs[1], context.inputs[2]]; + const programUniforms = [ + { type: 12 /* uint32 */, data: M }, + { type: 12 /* uint32 */, data: K }, + { type: 12 /* uint32 */, data: N }, + { type: 12 /* uint32 */, data: parameters.numHeads }, + { type: 12 /* uint32 */, data: parameters.headSize }, + { type: 12 /* uint32 */, data: parameters.hiddenSize }, + { type: 12 /* uint32 */, data: parameters.hiddenSize + parameters.hiddenSize + parameters.vHiddenSize } + ]; + const getShaderSource = (shaderHelper) => { + const outputQ = outputVariable("output_q", inputs[0].dataType, outputShape); + const outputK = outputVariable("output_k", inputs[0].dataType, outputShape); + const outputV = outputVariable("output_v", inputs[0].dataType, outputShape); + const input = inputVariable("input", inputs[0].dataType, inputs[0].dims); + const weight = inputVariable("weight", inputs[1].dataType, inputs[1].dims); + const bias = inputVariable("bias", inputs[2].dataType, inputs[2].dims); + const dataType = input.type.storage; + const uniforms = [ + { name: "M", type: "u32" }, + { name: "K", type: "u32" }, + { name: "N", type: "u32" }, + { name: "num_heads", type: "u32" }, + { name: "head_size", type: "u32" }, + { name: "hidden_size", type: "u32" }, + { name: "ldb", type: "u32" } + ]; + return ` + const TILE_SIZE = ${TILE_SIZE}u; + var tileInput: array<${dataType}, ${TILE_SIZE * TILE_SIZE}>; + var tileWeightQ: array<${dataType}, ${TILE_SIZE * TILE_SIZE}>; + var tileWeightK: array<${dataType}, ${TILE_SIZE * TILE_SIZE}>; + var tileWeightV: array<${dataType}, ${TILE_SIZE * TILE_SIZE}>; + ${shaderHelper.registerUniforms(uniforms).declareVariables(input, weight, bias, outputQ, outputK, outputV)} + ${shaderHelper.mainStart([ + TILE_SIZE, + TILE_SIZE, + 1 + ])} + let batchIndex = workgroup_id.z / uniforms.num_heads; + let headNumber = workgroup_id.z % uniforms.num_heads; + let m = global_id.y; + let n = global_id.x; + + let inputOffset = batchIndex * (uniforms.M * uniforms.K) + m * uniforms.K; + let biasOffsetQ = headNumber * uniforms.head_size; + let biasOffsetK = uniforms.hidden_size + biasOffsetQ; + let biasOffsetV = uniforms.hidden_size + biasOffsetK; + + var valueQ = ${dataType}(0); + var valueK = ${dataType}(0); + var valueV = ${dataType}(0); + for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) { + if (m < uniforms.M && w + local_id.x < uniforms.K) { + tileInput[TILE_SIZE * local_id.y + local_id.x] = input[inputOffset + w + local_id.x]; + } + if (n < uniforms.N && w + local_id.y < uniforms.K) { + let offset = n + (w + local_id.y) * uniforms.ldb; + tileWeightQ[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetQ + offset]; + tileWeightK[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetK + offset]; + tileWeightV[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetV + offset]; + } + workgroupBarrier(); + for (var k: u32 = 0u; k ({ + outputs: [ + { dims: outputShape, dataType: context.inputs[0].dataType, gpuDataType: 0 /* default */ }, + { dims: outputShape, dataType: context.inputs[0].dataType, gpuDataType: 0 /* default */ }, + { dims: outputShape, dataType: context.inputs[0].dataType, gpuDataType: 0 /* default */ } + ], + dispatchGroup: dispatch, + programUniforms + }), + getShaderSource + }, + { inputs, outputs: [-1, -1, -1] } + ); + }; + attention = (context, attributes) => { + const params = validateAttentionInputs(context.inputs, attributes); + const [q, k, v] = prepare(context, params); + return applyAttention( + context, + q, + k, + v, + context.inputs[4], + void 0, + void 0, + void 0, + context.inputs[5], + params, + attributes + ); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/batch-norm.ts +var validateInputs5, createBatchNormInferenceProgramInfo, parseBatchNormAttributes, batchNorm; +var init_batch_norm = __esm({ + "web/lib/wasm/jsep/webgpu/ops/batch-norm.ts"() { + "use strict"; + init_esm(); + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs5 = (inputs, attributes) => { + if (!inputs || inputs.length !== 5) { + throw new Error("BatchNormalization requires 5 inputs"); + } + const checkShapeEqual = (actual, expected, message) => { + const r = expected.length; + if (r !== actual.length) { + throw new Error(`${message}: num dimensions != ${r}`); + } + expected.forEach((v, i) => { + if (v !== actual[i]) { + throw new Error(`${message}: dim[${i}] do not match`); + } + }); + }; + if (inputs[0].dims.length > 1) { + const shape = attributes.format === "NHWC" ? attributes.spatial ? inputs[0].dims.slice(-1) : inputs[0].dims.slice(-1).concat(inputs[0].dims.slice(1, inputs[0].dims.length - 1)) : inputs[0].dims.slice(1, attributes.spatial ? 2 : void 0); + checkShapeEqual(inputs[1].dims, shape, "Invalid input scale"); + checkShapeEqual(inputs[2].dims, shape, "Invalid input B"); + checkShapeEqual(inputs[3].dims, shape, "Invalid input mean"); + checkShapeEqual(inputs[4].dims, shape, "Invalid input var"); + } else { + checkShapeEqual(inputs[1].dims, [1], "Invalid input scale"); + checkShapeEqual(inputs[2].dims, [1], "Invalid input B"); + checkShapeEqual(inputs[3].dims, [1], "Invalid input mean"); + checkShapeEqual(inputs[4].dims, [1], "Invalid input var"); + } + }; + createBatchNormInferenceProgramInfo = (inputs, attributes) => { + const { epsilon, spatial, format } = attributes; + const yShape = inputs[0].dims; + const components = spatial ? getMaxComponents(yShape[yShape.length - 1]) : 1; + const cComponents = format === "NHWC" && yShape.length > 1 ? components : 1; + const outputSize = ShapeUtil.size(yShape) / components; + const useShapesUniforms = spatial; + const shapeOrRank = useShapesUniforms ? yShape.length : yShape; + const x = inputVariable("x", inputs[0].dataType, inputs[0].dims, components); + const scale = inputVariable("scale", inputs[1].dataType, inputs[1].dims, cComponents); + const bias = inputVariable("bias", inputs[2].dataType, inputs[2].dims, cComponents); + const inputMean = inputVariable("inputMean", inputs[3].dataType, inputs[3].dims, cComponents); + const inputVar = inputVariable("inputVar", inputs[4].dataType, inputs[4].dims, cComponents); + const y = outputVariable("y", inputs[0].dataType, shapeOrRank, components); + const calcCOffset = () => { + let cOffset = ""; + if (spatial) { + cOffset = `let cOffset = ${yShape.length === 1 ? "0u" : format === "NHWC" ? `outputIndices[${yShape.length - 1}] / ${components}` : "outputIndices[1]"};`; + } else { + if (format === "NCHW") { + cOffset = ` + ${y.indicesSet("outputIndices", "0", "0")} + let cOffset = ${y.indicesToOffset("outputIndices")};`; + } else { + cOffset = `var cIndices = ${scale.type.indices}(0); + cIndices[0] = outputIndices[${yShape.length - 1}];`; + for (let i = 1; i < scale.rank; i++) { + cOffset += `cIndices[${i}] = outputIndices[${i}];`; + } + cOffset += `let cOffset = ${scale.indicesToOffset("cIndices")};`; + } + } + return cOffset; + }; + const getInferenceModeShaderSource = (helper) => ` + const epsilon = ${epsilon}; + ${helper.registerUniform("outputSize", "u32").declareVariables(x, scale, bias, inputMean, inputVar, y)} + ${helper.mainStart()} + ${helper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + var outputIndices = ${y.offsetToIndices(`global_idx * ${components}`)}; + ${calcCOffset()} + let scale = ${scale.getByOffset("cOffset")}; + let bias = ${bias.getByOffset("cOffset")}; + let inputMean = ${inputMean.getByOffset("cOffset")}; + let inputVar = ${inputVar.getByOffset("cOffset")}; + let x = ${x.getByOffset("global_idx")}; + let value = (x - inputMean) * inverseSqrt(inputVar + epsilon) * scale + bias; + ${y.setByOffset("global_idx", "value")} + }`; + return { + name: "BatchNormalization", + shaderCache: { + hint: `${attributes.epsilon}_${attributes.format}_${spatial}_${components}`, + inputDependencies: useShapesUniforms ? ["rank", "type", "type", "type", "type"] : void 0 + }, + getShaderSource: getInferenceModeShaderSource, + getRunData: () => ({ + outputs: [{ dims: inputs[0].dims, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms: useShapesUniforms ? [ + { type: 12 /* uint32 */, data: outputSize }, + ...createTensorShapeVariables(yShape) + ] : [ + { type: 12 /* uint32 */, data: outputSize } + ] + }) + }; + }; + parseBatchNormAttributes = (attributes) => createAttributeWithCacheKey(attributes); + batchNorm = (context, attributes) => { + const { inputs, outputCount } = context; + const updatedAttributes = parseBatchNormAttributes({ ...attributes, outputCount }); + if (env2.webgpu.validateInputContent) { + validateInputs5(inputs, updatedAttributes); + } + if (attributes.trainingMode) { + throw new Error("BatchNormalization trainingMode is not supported yet."); + } else { + context.compute(createBatchNormInferenceProgramInfo(inputs, updatedAttributes)); + } + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/bias-add.ts +var validateInputs6, createBiasAddProgramInfo, biasAdd; +var init_bias_add = __esm({ + "web/lib/wasm/jsep/webgpu/ops/bias-add.ts"() { + "use strict"; + init_util(); + init_common(); + validateInputs6 = (inputs) => { + if (inputs[0].dims.length !== 3) { + throw new Error("input should have 3 dimensions"); + } + if (![320, 640, 1280].includes(inputs[0].dims[2])) { + throw new Error("number of channels should be 320, 640 or 1280"); + } + if (inputs[1].dims.length !== 1) { + throw new Error("bias is expected to have 1 dimensions"); + } + if (inputs[0].dims[2] !== inputs[1].dims[0]) { + throw new Error("last dimension of input and bias are not the same"); + } + }; + createBiasAddProgramInfo = (inputs) => { + const outputShape = inputs[0].dims; + const channels = inputs[0].dims[2]; + const outputSize = ShapeUtil.size(outputShape) / 4; + const dataType = inputs[0].dataType; + const input = inputVariable("input", dataType, outputShape, 4); + const bias = inputVariable("bias", dataType, [channels], 4); + const residual = inputVariable("residual", dataType, outputShape, 4); + const output = outputVariable("output", dataType, outputShape, 4); + const getShaderSource = (shaderHelper) => ` + const channels = ${channels}u / 4; + ${shaderHelper.declareVariables(input, bias, residual, output)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes(outputSize)} + let value = ${input.getByOffset("global_idx")} + + ${bias.getByOffset("global_idx % channels")} + ${residual.getByOffset("global_idx")}; + ${output.setByOffset("global_idx", "value")} + }`; + return { + name: "BiasAdd", + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) } + }), + getShaderSource + }; + }; + biasAdd = (context) => { + validateInputs6(context.inputs); + context.compute(createBiasAddProgramInfo(context.inputs)); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/unary-op.ts +var createElementwiseProgramShader, createElementwiseProgramInfo, abs, acos, acosh, asin, asinh, atan, atanh, parseCastAttributes, cast, generateClipAttributesFromInputs, clip, ceil, cos, cosh, parseAlphaAttributes, elu, erfImpl, erf, exp, floor, gelu, leakyRelu, not, neg, reciprocal, relu, sigmoid, parseHardSigmoidAttributes, hardSigmoid, sin, sinh, sqrt, tan, tanhExpression, tanh, fastGeluImpl, fastGeluExpression, fastGelu, thresholdedRelu, log; +var init_unary_op = __esm({ + "web/lib/wasm/jsep/webgpu/ops/unary-op.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + createElementwiseProgramShader = (shaderHelper, datasize, inputDataType, outputDataType, funcCall, additionalImplementation) => { + const vecSize = Math.ceil(datasize / 4); + let expression = ""; + if (typeof funcCall === "string") { + expression = `${funcCall}(a)`; + } else { + expression = funcCall("a"); + } + const input = inputVariable("inputData", inputDataType, [vecSize], 4); + const output = outputVariable("outputData", outputDataType, [vecSize], 4); + return ` + ${shaderHelper.registerUniform("vec_size", "u32").declareVariables(input, output)} + + ${additionalImplementation ?? ""} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} + + let a = ${input.getByOffset("global_idx")}; + ${output.setByOffset("global_idx", expression)} + }`; + }; + createElementwiseProgramInfo = (input, name, funcCall, additionalImplementation, cacheKey, outputDataType = input.dataType) => ({ + name, + shaderCache: { hint: cacheKey, inputDependencies: ["type"] }, + getShaderSource: (shaderHelper) => createElementwiseProgramShader( + shaderHelper, + ShapeUtil.size(input.dims), + input.dataType, + outputDataType, + funcCall, + additionalImplementation + ), + getRunData: (inputTensors) => ({ + outputs: [{ dims: input.dims, dataType: outputDataType }], + dispatchGroup: { x: Math.ceil( + ShapeUtil.size(inputTensors[0].dims) / 64 / 4 + /* vec size */ + ) }, + programUniforms: [ + { type: 12 /* uint32 */, data: Math.ceil(ShapeUtil.size(input.dims) / 4) } + ] + }) + }); + abs = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Abs", "abs")); + }; + acos = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Acos", "acos")); + }; + acosh = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Acosh", "acosh")); + }; + asin = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Asin", "asin")); + }; + asinh = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Asinh", "asinh")); + }; + atan = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Atan", "atan")); + }; + atanh = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Atanh", "atanh")); + }; + parseCastAttributes = (attributes) => createAttributeWithCacheKey(attributes); + cast = (context, attributes) => { + let func; + switch (attributes.to) { + case 10 /* float16 */: + func = "vec4"; + break; + case 1 /* float */: + func = "vec4"; + break; + case 12 /* uint32 */: + func = "vec4"; + break; + case 6 /* int32 */: + func = "vec4"; + break; + case 9 /* bool */: + func = "vec4"; + break; + default: + throw new RangeError(`not supported type (specified in attribute 'to' from 'Cast' operator): ${attributes.to}`); + } + context.compute( + createElementwiseProgramInfo(context.inputs[0], "Cast", func, void 0, attributes.cacheKey, attributes.to) + ); + }; + generateClipAttributesFromInputs = (inputs) => { + const min = inputs.length >= 2 && inputs[1].data !== 0 ? inputs[1].getFloat32Array()[0] : MIN_CLIP; + const max = inputs.length >= 3 && inputs[2].data !== 0 ? inputs[2].getFloat32Array()[0] : MAX_CLIP; + return createAttributeWithCacheKey({ min, max }); + }; + clip = (context, clipAttributes) => { + const attributes = context.inputs.length === 1 ? clipAttributes : generateClipAttributesFromInputs(context.inputs); + const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType); + context.compute( + createElementwiseProgramInfo( + context.inputs[0], + "Clip", + (a) => `clamp(${a}, clip_min_, clip_max_)`, + ` + const clip_min_: vec4<${dataType}> = vec4(${dataType}(${attributes.min})); + const clip_max_: vec4<${dataType}> = vec4(${dataType}(${attributes.max})); +`, + attributes.cacheKey + ), + { inputs: [0] } + ); + }; + ceil = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Ceil", "ceil")); + }; + cos = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Cos", "cos")); + }; + cosh = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Cosh", "cosh")); + }; + parseAlphaAttributes = (attributes) => createAttributeWithCacheKey(attributes); + elu = (context, attributes) => { + const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType); + context.compute(createElementwiseProgramInfo( + context.inputs[0], + "Elu", + (a) => `elu_vf32(${a})`, + ` + const elu_alpha_ = ${dataType}(${attributes.alpha}); + + fn elu_f32(a: ${dataType}) -> ${dataType} { + return select((exp(a) - 1.0) * elu_alpha_, a, a >= 0.0); + } + + fn elu_vf32(v: vec4<${dataType}>) -> vec4<${dataType}> { + return vec4(elu_f32(v.x), elu_f32(v.y), elu_f32(v.z), elu_f32(v.w)); + }`, + attributes.cacheKey + )); + }; + erfImpl = (varType = "f32") => ` +const r0: ${varType} = 0.3275911; +const r1: ${varType} = 0.254829592; +const r2: ${varType} = -0.284496736; +const r3: ${varType} = 1.421413741; +const r4: ${varType} = -1.453152027; +const r5: ${varType} = 1.061405429; + +fn erf_vf32(v: vec4<${varType}>) -> vec4<${varType}> { + let absv = abs(v); + let x = 1.0 / (1.0 + r0 * absv); + return sign(v) * (1.0 - ((((r5 * x + r4) * x + r3) * x + r2) * x + r1) * x * exp(-absv * absv)); +}`; + erf = (context) => { + const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType); + context.compute(createElementwiseProgramInfo(context.inputs[0], "Erf", (a) => `erf_vf32(${a})`, erfImpl(dataType))); + }; + exp = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Exp", "exp")); + }; + floor = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Floor", "floor")); + }; + gelu = (context) => { + const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType); + context.compute(createElementwiseProgramInfo( + context.inputs[0], + "Gelu", + (a) => `0.5 * ${a} * (1.0 + erf_vf32(${a} * 0.7071067811865475))`, + erfImpl(dataType) + )); + }; + leakyRelu = (context, attributes) => { + const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType); + context.compute(createElementwiseProgramInfo( + context.inputs[0], + "LeakyRelu", + (a) => `select(leaky_relu_alpha_ * ${a}, ${a}, ${a} >= vec4<${dataType}>(0.0))`, + `const leaky_relu_alpha_ = ${dataType}(${attributes.alpha});`, + attributes.cacheKey + )); + }; + not = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Not", (a) => `!${a}`)); + }; + neg = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Neg", (a) => `-${a}`)); + }; + reciprocal = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Reciprocal", (a) => `1.0/${a}`)); + }; + relu = (context) => { + const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType); + context.compute(createElementwiseProgramInfo( + context.inputs[0], + "Relu", + (a) => `select(vec4<${dataType}>(0.0), ${a}, ${a} > vec4<${dataType}>(0.0))` + )); + }; + sigmoid = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Sigmoid", (a) => `(1.0 / (1.0 + exp(-${a})))`)); + }; + parseHardSigmoidAttributes = (attributes) => createAttributeWithCacheKey(attributes); + hardSigmoid = (context, attributes) => { + const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType); + context.compute(createElementwiseProgramInfo( + context.inputs[0], + "HardSigmoid", + (a) => `max(vec4<${dataType}>(0.0), min(vec4<${dataType}>(1.0), ${attributes.alpha} * ${a} + vec4<${dataType}>(${attributes.beta})))`, + void 0, + attributes.cacheKey + )); + }; + sin = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Sin", "sin")); + }; + sinh = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Sinh", "sinh")); + }; + sqrt = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Sqrt", "sqrt")); + }; + tan = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Tan", "tan")); + }; + tanhExpression = (a) => `sign(${a}) * (1 - exp(-2 * abs(${a}))) / (1 + exp(-2 * abs(${a})))`; + tanh = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Tanh", tanhExpression)); + }; + fastGeluImpl = (varType = "f32") => ` +const fast_gelu_a: ${varType} = 0.5; +const fast_gelu_b: ${varType} = 0.7978845608028654; +const fast_gelu_c: ${varType} = 0.035677408136300125; + +fn tanh_v(v: vec4<${varType}>) -> vec4<${varType}> { + return ${tanhExpression("v")}; +} +`; + fastGeluExpression = (x) => `(fast_gelu_a + fast_gelu_a * tanh_v(${x} * (fast_gelu_c * ${x} * ${x} + fast_gelu_b))) * ${x}`; + fastGelu = (context) => { + const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType); + context.compute(createElementwiseProgramInfo( + context.inputs[0], + "FastGelu", + fastGeluExpression, + fastGeluImpl(dataType), + void 0, + context.inputs[0].dataType + )); + }; + thresholdedRelu = (context, attributes) => { + const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType); + context.compute(createElementwiseProgramInfo( + context.inputs[0], + "ThresholdedRelu", + (a) => `select(vec4<${dataType}>(0.0), ${a}, ${a} > thresholded_relu_alpha_)`, + `const thresholded_relu_alpha_ = vec4<${dataType}>(${attributes.alpha});`, + attributes.cacheKey + )); + return 0; + }; + log = (context) => { + context.compute(createElementwiseProgramInfo(context.inputs[0], "Log", "log")); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/bias-split-gelu.ts +var validateInputs7, createBiasSplitGeluProgramInfo, biasSplitGelu; +var init_bias_split_gelu = __esm({ + "web/lib/wasm/jsep/webgpu/ops/bias-split-gelu.ts"() { + "use strict"; + init_util(); + init_common(); + init_unary_op(); + validateInputs7 = (inputs) => { + if (inputs[0].dims.length !== 3) { + throw new Error("input should have 3 dimensions"); + } + if (![2560, 5120, 10240].includes(inputs[0].dims[2])) { + throw new Error("hidden state should be 2560, 5120 or 10240"); + } + if (inputs[1].dims.length !== 1) { + throw new Error("bias is expected to have 1 dimensions"); + } + if (inputs[0].dims[2] !== inputs[1].dims[0]) { + throw new Error("last dimension of input and bias are not the same"); + } + }; + createBiasSplitGeluProgramInfo = (inputs) => { + const outputShape = inputs[0].dims.slice(); + outputShape[2] = outputShape[2] / 2; + const input = inputVariable("input", inputs[0].dataType, inputs[0].dims, 4); + const bias = inputVariable("bias", inputs[0].dataType, [inputs[0].dims[2]], 4); + const output = outputVariable("output", inputs[0].dataType, outputShape, 4); + const outputSize = ShapeUtil.size(outputShape) / 4; + const dataType = tensorTypeToWsglStorageType(inputs[0].dataType); + const getShaderSource = (shaderHelper) => ` + const M_SQRT2 = sqrt(2.0); + const halfChannels = ${inputs[0].dims[2] / 4 / 2}u; + + ${shaderHelper.declareVariables(input, bias, output)} + + ${erfImpl(dataType)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes(outputSize)} + let biasIdx = global_idx % halfChannels; + let batchIndex = global_idx / halfChannels; + let inputOffset = biasIdx + batchIndex * halfChannels * 2; + let valueLeft = input[inputOffset] + bias[biasIdx]; + let valueRight = input[inputOffset + halfChannels] + bias[biasIdx + halfChannels]; + let geluRight = valueRight * 0.5 * (erf_vf32(valueRight / M_SQRT2) + 1); + + ${output.setByOffset("global_idx", "valueLeft * geluRight")} + }`; + return { + name: "BiasSplitGelu", + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) } + }), + getShaderSource + }; + }; + biasSplitGelu = (context) => { + validateInputs7(context.inputs); + context.compute(createBiasSplitGeluProgramInfo(context.inputs)); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/binary-op.ts +var createBinaryOpProgramShader, createBinaryOpProgramInfo, runBinaryOp, add, div, equal, mul, pow, sub, greater, less, greaterOrEqual, lessOrEqual; +var init_binary_op = __esm({ + "web/lib/wasm/jsep/webgpu/ops/binary-op.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + createBinaryOpProgramShader = (shaderHelper, dimsA, dimsB, dimsOutput, vectorize, doBroadcast, sharedDimensionDivisibleBy4, funcCall, typeA, typeB, typeOutput, additionalImplementation) => { + let expressionScalar; + let expressionVector; + if (typeof funcCall === "string") { + expressionScalar = expressionVector = (a2, b2) => `${funcCall}((${a2}),(${b2}))`; + } else if (typeof funcCall === "function") { + expressionScalar = expressionVector = funcCall; + } else { + expressionScalar = funcCall.scalar; + expressionVector = funcCall.vector; + } + const output = outputVariable("outputData", typeOutput, dimsOutput.length, 4); + const a = inputVariable("aData", typeA, dimsA.length, 4); + const b = inputVariable("bData", typeB, dimsB.length, 4); + let assignment; + if (vectorize) { + if (doBroadcast) { + const isAOneElement = ShapeUtil.size(dimsA) === 1; + const isBOneElement = ShapeUtil.size(dimsB) === 1; + const aLastDimDivisibleBy4 = dimsA.length > 0 && dimsA[dimsA.length - 1] % 4 === 0; + const bLastDimDivisibleBy4 = dimsB.length > 0 && dimsB[dimsB.length - 1] % 4 === 0; + if (isAOneElement || isBOneElement) { + assignment = output.setByOffset( + "global_idx", + expressionVector( + isAOneElement ? `${a.type.value}(${a.getByOffset("0")}.x)` : a.getByOffset("global_idx"), + isBOneElement ? `${b.type.value}(${b.getByOffset("0")}.x)` : b.getByOffset("global_idx") + ) + ); + } else { + assignment = ` + let outputIndices = ${output.offsetToIndices("global_idx * 4u")}; + let offsetA = ${a.broadcastedIndicesToOffset("outputIndices", output)}; + let offsetB = ${b.broadcastedIndicesToOffset("outputIndices", output)}; + ${output.setByOffset( + "global_idx", + expressionVector( + sharedDimensionDivisibleBy4 || aLastDimDivisibleBy4 ? a.getByOffset("offsetA / 4u") : `${a.type.value}(${a.getByOffset("offsetA / 4u")}[offsetA % 4u])`, + sharedDimensionDivisibleBy4 || bLastDimDivisibleBy4 ? b.getByOffset("offsetB / 4u") : `${b.type.value}(${b.getByOffset("offsetB / 4u")}[offsetB % 4u])` + ) + )} + `; + } + } else { + assignment = output.setByOffset( + "global_idx", + expressionVector(a.getByOffset("global_idx"), b.getByOffset("global_idx")) + ); + } + } else { + if (!doBroadcast) { + throw new Error("no necessary to use scalar implementation for element-wise binary op implementation."); + } + const singleAssignment = (resStr, x, typeCast = "") => { + const expressionA = `aData[indexA${x}][componentA${x}]`; + const expressionB = `bData[indexB${x}][componentB${x}]`; + return ` + let outputIndices${x} = ${output.offsetToIndices(`global_idx * 4u + ${x}u`)}; + let offsetA${x} = ${a.broadcastedIndicesToOffset(`outputIndices${x}`, output)}; + let offsetB${x} = ${b.broadcastedIndicesToOffset(`outputIndices${x}`, output)}; + let indexA${x} = offsetA${x} / 4u; + let indexB${x} = offsetB${x} / 4u; + let componentA${x} = offsetA${x} % 4u; + let componentB${x} = offsetB${x} % 4u; + ${resStr}[${x}] = ${typeCast}(${expressionScalar(expressionA, expressionB)}); + `; + }; + if (typeOutput === 9 /* bool */) { + assignment = ` + var data = vec4(0); + ${singleAssignment("data", 0, "u32")} + ${singleAssignment("data", 1, "u32")} + ${singleAssignment("data", 2, "u32")} + ${singleAssignment("data", 3, "u32")} + outputData[global_idx] = dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(data));`; + } else { + assignment = ` + ${singleAssignment("outputData[global_idx]", 0)} + ${singleAssignment("outputData[global_idx]", 1)} + ${singleAssignment("outputData[global_idx]", 2)} + ${singleAssignment("outputData[global_idx]", 3)} + `; + } + } + return ` + ${shaderHelper.registerUniform("vec_size", "u32").declareVariables(a, b, output)} + + ${additionalImplementation ?? ""} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} + ${assignment} + }`; + }; + createBinaryOpProgramInfo = (name, cacheKey, a, b, funcCall, additionalImplementation, outputDataType = a.dataType) => { + const isBroadcast = !ShapeUtil.areEqual(a.dims, b.dims); + let outputShape = a.dims; + let outputSize = ShapeUtil.size(a.dims); + let vectorize = false; + let sharedDimensionDivisibleBy4 = false; + const cacheKeyAux = [isBroadcast]; + if (isBroadcast) { + const calculatedShape = BroadcastUtil.calcShape(a.dims, b.dims, false); + if (!calculatedShape) { + throw new Error("Can't perform binary op on the given tensors"); + } + outputShape = calculatedShape; + outputSize = ShapeUtil.size(outputShape); + const isAOneElement = ShapeUtil.size(a.dims) === 1; + const isBOneElement = ShapeUtil.size(b.dims) === 1; + const aLastDimDivisibleBy4 = a.dims.length > 0 && a.dims[a.dims.length - 1] % 4 === 0; + const bLastDimDivisibleBy4 = b.dims.length > 0 && b.dims[b.dims.length - 1] % 4 === 0; + cacheKeyAux.push(isAOneElement); + cacheKeyAux.push(isBOneElement); + cacheKeyAux.push(aLastDimDivisibleBy4); + cacheKeyAux.push(bLastDimDivisibleBy4); + let sharedDimension = 1; + for (let i = 1; i < outputShape.length; i++) { + const dimA = a.dims[a.dims.length - i] ?? 1; + const dimB = b.dims[b.dims.length - i] ?? 1; + if (dimA === dimB) { + sharedDimension *= dimA; + } else { + break; + } + } + if (sharedDimension % 4 === 0) { + sharedDimensionDivisibleBy4 = true; + vectorize = true; + } else if (isAOneElement || isBOneElement || aLastDimDivisibleBy4 || bLastDimDivisibleBy4) { + vectorize = true; + } + } else { + vectorize = true; + } + cacheKeyAux.push(vectorize); + return { + name, + shaderCache: { + hint: cacheKey + cacheKeyAux.map((x) => x.toString()).join("_"), + inputDependencies: ["rank", "rank"] + }, + getShaderSource: (shaderHelper) => createBinaryOpProgramShader( + shaderHelper, + a.dims, + b.dims, + outputShape, + vectorize, + isBroadcast, + sharedDimensionDivisibleBy4, + funcCall, + a.dataType, + b.dataType, + outputDataType, + additionalImplementation + ), + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: outputDataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 / 4 + /* component size */ + ) }, + programUniforms: [ + { type: 12 /* uint32 */, data: Math.ceil(ShapeUtil.size(outputShape) / 4) }, + ...createTensorShapeVariables(a.dims, b.dims, outputShape) + ] + }) + }; + }; + runBinaryOp = (context, name, funcCall, additionalImplementation, cacheKey, outputDataType) => { + context.compute(createBinaryOpProgramInfo( + name, + cacheKey ?? "", + context.inputs[0], + context.inputs[1], + funcCall, + additionalImplementation, + outputDataType + )); + }; + add = (context) => { + runBinaryOp(context, "Add", (a, b) => `${a}+${b}`); + }; + div = (context) => { + runBinaryOp(context, "Div", (a, b) => `${a}/${b}`); + }; + equal = (context) => { + runBinaryOp( + context, + "Equal", + { scalar: (a, b) => `u32(${a}==${b})`, vector: (a, b) => `vec4(${a}==${b})` }, + void 0, + void 0, + 9 /* bool */ + ); + }; + mul = (context) => { + runBinaryOp(context, "Mul", (a, b) => `${a}*${b}`); + }; + pow = (context) => { + const type = inputVariable("input", context.inputs[0].dataType, context.inputs[0].dims).type.value; + const roundStr = type === "i32" ? "round" : ""; + runBinaryOp( + context, + "Pow", + { scalar: (a, b) => `pow_custom(${a},${b})`, vector: (a, b) => `pow_vector_custom(${a},${b})` }, + ` + fn pow_custom(a : ${type}, b : ${type}) -> ${type} { + if (b == ${type}(0.0)) { + return ${type}(1.0); + } else if (a < ${type}(0.0) && f32(b) != floor(f32(b))) { + return ${type}(pow(f32(a), f32(b))); // NaN + } + return select(sign(a), ${type}(1.0), round(f32(abs(b) % ${type}(2.0))) != 1.0) * ${type}(${roundStr}(pow(f32(abs(a)), f32(b)))); + } + fn pow_vector_custom(a : vec4<${type}>, b : vec4<${type}>) -> vec4<${type}> { + // TODO: implement vectorized pow + return vec4<${type}>(pow_custom(a.x, b.x), pow_custom(a.y, b.y), pow_custom(a.z, b.z), pow_custom(a.w, b.w)); + } + ` + ); + }; + sub = (context) => { + runBinaryOp(context, "Sub", (a, b) => `${a}-${b}`); + }; + greater = (context) => { + runBinaryOp( + context, + "Greater", + { scalar: (a, b) => `u32(${a}>${b})`, vector: (a, b) => `vec4(${a}>${b})` }, + void 0, + void 0, + 9 /* bool */ + ); + }; + less = (context) => { + runBinaryOp( + context, + "Less", + { scalar: (a, b) => `u32(${a}<${b})`, vector: (a, b) => `vec4(${a}<${b})` }, + void 0, + void 0, + 9 /* bool */ + ); + }; + greaterOrEqual = (context) => { + runBinaryOp( + context, + "GreaterOrEqual", + { scalar: (a, b) => `u32(${a}>=${b})`, vector: (a, b) => `vec4(${a}>=${b})` }, + void 0, + void 0, + 9 /* bool */ + ); + }; + lessOrEqual = (context) => { + runBinaryOp( + context, + "LessOrEqual", + { scalar: (a, b) => `u32(${a}<=${b})`, vector: (a, b) => `vec4(${a}<=${b})` }, + void 0, + void 0, + 9 /* bool */ + ); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/fuse-utils.ts +var getActivationSnippet, appendActivationUniformsData, appendActivationUniforms, parseInternalActivationAttributes; +var init_fuse_utils = __esm({ + "web/lib/wasm/jsep/webgpu/ops/fuse-utils.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + getActivationSnippet = (attributes, valueType, baseType = "f32") => { + switch (attributes.activation) { + case "Relu": + return `value = max(value, ${valueType}(0.0));`; + case "Sigmoid": + return `value = (${valueType}(1.0) / (${valueType}(1.0) + exp(-value)));`; + case "Clip": + return `value = clamp(value, ${valueType}(${baseType}(uniforms.clip_min)), ${valueType}(${baseType}(uniforms.clip_max)));`; + case "HardSigmoid": + return `value = max(${valueType}(0.0), min(${valueType}(1.0), ${baseType}(uniforms.alpha) * value + ${baseType}(uniforms.beta)));`; + case "LeakyRelu": + return `value = select(${baseType}(uniforms.alpha) * value, value, value >= ${valueType}(0.0));`; + case "": + return ""; + default: + throw new Error(`Unsupported activation ${attributes.activation}`); + } + }; + appendActivationUniformsData = (attributes, programUniform) => { + if (attributes.activation === "Clip") { + programUniform.push( + { type: 1 /* float */, data: attributes.clipMax }, + { type: 1 /* float */, data: attributes.clipMin } + ); + } else if (attributes.activation === "HardSigmoid") { + programUniform.push( + { type: 1 /* float */, data: attributes.alpha }, + { type: 1 /* float */, data: attributes.beta } + ); + } else if (attributes.activation === "LeakyRelu") { + programUniform.push({ type: 1 /* float */, data: attributes.alpha }); + } + }; + appendActivationUniforms = (attributes, uniforms) => { + if (attributes.activation === "Clip") { + uniforms.push({ name: "clip_max", type: "f32" }, { name: "clip_min", type: "f32" }); + } else if (attributes.activation === "HardSigmoid") { + uniforms.push({ name: "alpha", type: "f32" }, { name: "beta", type: "f32" }); + } else if (attributes.activation === "LeakyRelu") { + uniforms.push({ name: "alpha", type: "f32" }); + } + }; + parseInternalActivationAttributes = (attributes) => { + const activation = attributes?.activation || ""; + if (activation === "HardSigmoid") { + const [alpha, beta] = attributes?.activation_params || [0.2, 0.5]; + return { activation, alpha, beta }; + } else if (activation === "Clip") { + const [clipMin, clipMax] = attributes?.activation_params || [MIN_CLIP, MAX_CLIP]; + return { activation, clipMax, clipMin }; + } else if (activation === "LeakyRelu") { + const [alpha] = attributes?.activation_params || [0.01]; + return { activation, alpha }; + } + return { activation }; + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/3rd-party/activation_util.ts +var typeSnippet, biasSnippet; +var init_activation_util = __esm({ + "web/lib/wasm/jsep/webgpu/ops/3rd-party/activation_util.ts"() { + "use strict"; + typeSnippet = (component, dataType) => { + switch (component) { + case 1: + return dataType; + case 2: + return `vec2<${dataType}>`; + case 3: + return `vec3<${dataType}>`; + case 4: + return `vec4<${dataType}>`; + default: + throw new Error(`${component}-component is not supported.`); + } + }; + biasSnippet = (hasBias) => ` + ${hasBias ? "value = value + getBiasByOutputCoords(coords);" : ""} + `; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_util.ts +var utilFunctions; +var init_conv_util = __esm({ + "web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_util.ts"() { + "use strict"; + utilFunctions = (strideStr) => ` +fn getIndexFromCoords4D(coords : vec4, shape : vec4) -> i32 { + return dot(coords, vec4( + shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1)); +} +fn getOutputIndexFromCoords(coords : vec4) -> i32 { + return dot(coords, vec4( + i32(${strideStr}.x), i32(${strideStr}.y), i32(${strideStr}.z), 1)); +} +`; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/3rd-party/matmul_packed_webgpu.ts +var writeDataToSubAVec4Snippet, calculateResultSnippet, makeMatMulPackedVec4Source, writeDataToSubASnippet, readDataFromSubASnippet, makeMatMulPackedSource, matMulReadWriteFnSource, createMatmulProgramInfo; +var init_matmul_packed_webgpu = __esm({ + "web/lib/wasm/jsep/webgpu/ops/3rd-party/matmul_packed_webgpu.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + init_fuse_utils(); + init_activation_util(); + writeDataToSubAVec4Snippet = (transpose2, batchDims) => { + if (transpose2) { + return ` + mm_Asub[inputRow][inputCol] = mm_readA(batch, + kStart + inputRow, + globalRowStart / innerElementSize + inputCol${batchDims ? ", batchIndices" : ""}); + `; + } else { + return ` + mm_Asub[inputRow][inputCol] = mm_readA(batch, + globalRow + innerRow, + kStart / innerElementSize + inputCol${batchDims ? ", batchIndices" : ""}); + `; + } + }; + calculateResultSnippet = (transposeA, innerElementSize) => { + if (transposeA) { + return ` + let ACached0 = mm_Asub[k * innerElementSize][localRow]; + let ACached1 = mm_Asub[k * innerElementSize + 1][localRow]; + let ACached2 = mm_Asub[k * innerElementSize + 2][localRow]; + ${innerElementSize === 3 ? "" : "let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];"} + for (var i = 0; i < rowPerThread; i = i + 1) { + acc[i] = BCached0 * ACached0[i] + acc[i]; + acc[i] = BCached1 * ACached1[i] + acc[i]; + acc[i] = BCached2 * ACached2[i] + acc[i]; + ${innerElementSize === 3 ? "" : "acc[i] = BCached3 * ACached3[i] + acc[i];"} + }`; + } else { + return ` + for (var i = 0; i < rowPerThread; i = i + 1) { + let ACached = mm_Asub[tileRow + i][k]; + acc[i] = BCached0 * ACached.x + acc[i]; + acc[i] = BCached1 * ACached.y + acc[i]; + acc[i] = BCached2 * ACached.z + acc[i]; + ${innerElementSize === 3 ? "" : "acc[i] = BCached3 * ACached.w + acc[i];"} + }`; + } + }; + makeMatMulPackedVec4Source = (workPerThread, workgroupSize, type = "f32", batchDims, transposeA = false, tileInner = 32, splitK = false, splitedDimInner = 32) => { + const tileAOuter = workgroupSize[1] * workPerThread[1]; + const tileBOuter = workgroupSize[0] * workPerThread[0]; + const tileAWidth = transposeA ? tileAOuter : tileInner; + const tileAHight = transposeA ? tileInner : tileAOuter; + const innerElementSize = tileAWidth / workgroupSize[0]; + const rowPerThreadB = tileInner / workgroupSize[1]; + if (!((transposeA && innerElementSize === 4 && workPerThread[1] === 4 || !transposeA && (innerElementSize === 3 || innerElementSize === 4)) && tileAWidth % workgroupSize[0] === 0 && tileInner % workgroupSize[1] === 0 && workPerThread[0] === 4)) { + throw new Error(`If transposeA ${transposeA} is true, innerElementSize ${innerElementSize} and workPerThread[1] ${workPerThread[1]} must be 4. + Otherwise, innerElementSize ${innerElementSize} must be 3 or 4. + tileAWidth ${tileAWidth} must be divisible by workgroupSize[0]${workgroupSize[0]}. tileInner ${tileInner} must be divisible by workgroupSize[1] ${workgroupSize[1]}. colPerThread ${workPerThread[0]} must be 4.`); + } + return ` +var mm_Asub: array, ${tileAWidth / innerElementSize}>, ${tileAHight}>; +var mm_Bsub: array, ${tileBOuter / workPerThread[0]}>, ${tileInner}>; + +const rowPerThread = ${workPerThread[1]}; +const colPerThread = ${workPerThread[0]}; +const innerElementSize = ${innerElementSize}; +const tileInner = ${tileInner}; + +@compute @workgroup_size(${workgroupSize[0]}, ${workgroupSize[1]}, ${workgroupSize[2]}) +fn main(@builtin(local_invocation_id) localId : vec3, + @builtin(global_invocation_id) globalId : vec3, + @builtin(workgroup_id) workgroupId : vec3) { + let localRow = i32(localId.y); + let tileRow = localRow * rowPerThread; + let tileCol = i32(localId.x); + + let globalRow =i32(globalId.y) * rowPerThread; + let globalCol = i32(globalId.x); + let batch = ${splitK ? "0" : "i32(globalId.z)"}; + ${batchDims ? `let batchIndices = ${batchDims.offsetToIndices("u32(batch)")};` : ""} + let globalRowStart = i32(workgroupId.y) * ${tileAOuter}; + + let num_tiles = ${splitK ? `${Math.ceil(splitedDimInner / tileInner)}` : "(uniforms.dim_inner - 1) / tileInner + 1"}; + var kStart = ${splitK ? `i32(globalId.z) * ${splitedDimInner}` : "0"}; + + var acc: array, rowPerThread>; + + // Loop over shared dimension. + let tileRowB = localRow * ${rowPerThreadB}; + for (var t = 0; t < num_tiles; t = t + 1) { + // Load one tile of A into local memory. + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + let inputRow = tileRow + innerRow; + let inputCol = tileCol; + ${writeDataToSubAVec4Snippet(transposeA, batchDims)} + } + + // Load one tile of B into local memory. + for (var innerRow = 0; innerRow < ${rowPerThreadB}; innerRow = innerRow + 1) { + let inputRow = tileRowB + innerRow; + let inputCol = tileCol; + mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol${batchDims ? ", batchIndices" : ""}); + } + kStart = kStart + tileInner; + workgroupBarrier(); + + // Compute acc values for a single thread. + for (var k = 0; k < tileInner / innerElementSize; k = k + 1) { + let BCached0 = mm_Bsub[k * innerElementSize][tileCol]; + let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol]; + let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol]; + ${innerElementSize === 3 ? "" : "let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];"} + + ${calculateResultSnippet(transposeA, innerElementSize)} + } + + workgroupBarrier(); + } + + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); + } +}`; + }; + writeDataToSubASnippet = (transpose2, batchDims) => { + if (transpose2) { + return ` + mm_Asub[inputRow][inputCol] = mm_readA(batch, + kStart + inputRow, + globalRowStart + inputCol${batchDims ? ", batchIndices" : ""}); + `; + } else { + return ` + mm_Asub[inputRow][inputCol] = mm_readA(batch, + globalRowStart + inputRow, + kStart + inputCol${batchDims ? ", batchIndices" : ""}); + `; + } + }; + readDataFromSubASnippet = (transposeA) => transposeA ? "let ACached = mm_Asub[k][tileRow + innerRow];" : "let ACached = mm_Asub[tileRow + innerRow][k];"; + makeMatMulPackedSource = (workPerThread, workgroupSize, type = "f32", batchDims, transposeA = false, tileInner = 32, splitK = false, splitedDimInner = 32, sequentialAccessByThreads = false) => { + const tileAOuter = workPerThread[1] * workgroupSize[1]; + const tileBOuter = workPerThread[0] * workgroupSize[0]; + const tileAWidth = transposeA ? tileAOuter : tileInner; + const tileAHight = transposeA ? tileInner : tileAOuter; + if (!(tileAHight % workgroupSize[1] === 0 && tileAWidth % workgroupSize[0] === 0 && tileInner % workgroupSize[1] === 0)) { + throw new Error(`tileAHight ${tileAHight} must be divisible by workgroupSize[1]${workgroupSize[1]}, tileAWidth ${tileAWidth} must be divisible by workgroupSize[0]${workgroupSize[0]}, tileInner ${tileInner} must be divisible by workgroupSize[1]${workgroupSize[1]}`); + } + const rowPerThreadA = tileAHight / workgroupSize[1]; + const colPerThreadA = tileAWidth / workgroupSize[0]; + const rowPerThreadB = tileInner / workgroupSize[1]; + const matmulSnippet = sequentialAccessByThreads ? ` + let localRow = i32(localId.y); + let localCol = i32(localId.x); + let globalRowStart = i32(workgroupId.y) * ${tileAOuter}; + let globalColStart = i32(workgroupId.x) * ${tileBOuter}; + + // Loop over shared dimension. + for (var t = 0; t < num_tiles; t = t + 1) { + // Load one tile of A into local memory. + for (var inputRow = localRow; inputRow < ${tileAHight}; inputRow = inputRow + ${workgroupSize[1]}) { + for (var inputCol = localCol; inputCol < ${tileAWidth}; inputCol = inputCol + ${workgroupSize[0]}) { + ${writeDataToSubASnippet(transposeA, batchDims)} + } + } + // Load one tile of B into local memory. + for (var inputRow = localRow; inputRow < ${tileInner}; inputRow = inputRow + ${workgroupSize[1]}) { + for (var inputCol = localCol; inputCol < ${tileBOuter}; inputCol = inputCol + ${workgroupSize[0]}) { + mm_Bsub[inputRow][inputCol] = mm_readB(batch, + kStart + inputRow, + globalColStart + inputCol${batchDims ? ", batchIndices" : ""}); + } + } + kStart = kStart + tileInner; + workgroupBarrier(); + + // Compute acc values for a single thread. + var BCached : array<${type}, colPerThread>; + for (var k = 0; k < tileInner; k = k + 1) { + for (var inner = 0; inner < colPerThread; inner = inner + 1) { + BCached[inner] = mm_Bsub[k][localCol + inner * ${workgroupSize[0]}]; + } + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + let ACached = ${transposeA ? `mm_Asub[k][localRow + innerRow * ${workgroupSize[1]}];` : `mm_Asub[localRow + innerRow * ${workgroupSize[1]}][k];`} + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + acc[innerRow][innerCol] = acc[innerRow][innerCol] + + ACached * BCached[innerCol]; + } + } + } + workgroupBarrier(); + } + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + let gRow = globalRowStart + localRow + innerRow * ${workgroupSize[1]}; + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + let gCol = globalColStart + localCol + innerCol * ${workgroupSize[0]}; + mm_write(batch, gRow, gCol, acc[innerRow][innerCol]); + } + } + ` : ` +let tileRow = i32(localId.y) * rowPerThread; +let tileCol = i32(localId.x) * colPerThread; + +let globalRow = i32(globalId.y) * rowPerThread; +let globalCol = i32(globalId.x) * colPerThread; +let globalRowStart = i32(workgroupId.y) * ${tileAOuter}; + +let tileRowA = i32(localId.y) * ${rowPerThreadA}; +let tileColA = i32(localId.x) * ${colPerThreadA}; +let tileRowB = i32(localId.y) * ${rowPerThreadB}; +// Loop over shared dimension. +for (var t = 0; t < num_tiles; t = t + 1) { + // Load one tile of A into local memory. + for (var innerRow = 0; innerRow < ${rowPerThreadA}; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < ${colPerThreadA}; innerCol = innerCol + 1) { + let inputRow = tileRowA + innerRow; + let inputCol = tileColA + innerCol; + ${writeDataToSubASnippet(transposeA, batchDims)} + } + } + + // Load one tile of B into local memory. + for (var innerRow = 0; innerRow < ${rowPerThreadB}; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + let inputRow = tileRowB + innerRow; + let inputCol = tileCol + innerCol; + mm_Bsub[inputRow][inputCol] = mm_readB(batch, + kStart + inputRow, + globalCol + innerCol${batchDims ? ", batchIndices" : ""}); + } + } + kStart = kStart + tileInner; + workgroupBarrier(); + + // Compute acc values for a single thread. + var BCached : array<${type}, colPerThread>; + for (var k = 0; k < tileInner; k = k + 1) { + for (var inner = 0; inner < colPerThread; inner = inner + 1) { + BCached[inner] = mm_Bsub[k][tileCol + inner]; + } + + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + ${readDataFromSubASnippet(transposeA)} + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol]; + } + } + } + + workgroupBarrier(); +} + +for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + mm_write(batch, globalRow + innerRow, globalCol + innerCol, + acc[innerRow][innerCol]); + } +} +`; + return ` + var mm_Asub : array, ${tileAHight}>; + var mm_Bsub : array, ${tileInner}>; + const rowPerThread = ${workPerThread[1]}; + const colPerThread = ${workPerThread[0]}; + const tileInner = ${tileInner}; + +@compute @workgroup_size(${workgroupSize[0]}, ${workgroupSize[1]}, ${workgroupSize[2]}) +fn main(@builtin(local_invocation_id) localId : vec3, + @builtin(global_invocation_id) globalId : vec3, + @builtin(workgroup_id) workgroupId : vec3) { + let batch = ${splitK ? "0" : "i32(globalId.z)"}; + ${batchDims ? `let batchIndices = ${batchDims.offsetToIndices("u32(batch)")};` : ""} + let num_tiles = ${splitK ? `${Math.ceil(splitedDimInner / tileInner)}` : "(uniforms.dim_inner - 1) / tileInner + 1"}; + var kStart = ${splitK ? `i32(globalId.z) * ${splitedDimInner}` : "0"}; + + var acc : array, rowPerThread>; + + // Without this initialization strange values show up in acc. + for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { + for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { + acc[innerRow][innerCol] = 0.0; + } + } + ${matmulSnippet} + } +`; + }; + matMulReadWriteFnSource = (component, hasBias, applyActivation, variables, batchShapes, isChannelsLast = false) => { + const [batchAShape, batchBShape, batchShape] = batchShapes; + const [batchVariable, aVariable, bVariable, outputVariable2] = variables; + const broadCastADims = getBroadcastDims(batchAShape, batchShape); + const broadCastBDims = getBroadcastDims(batchBShape, batchShape); + const dataType = tensorTypeToWsglStorageType(variables[0].type.tensor); + const getAIndices = () => { + const aRank = aVariable.rank; + const batchRank = batchVariable.rank; + let resStr = `var aIndices: ${aVariable.type.indices};`; + for (let i = aRank - 2 - 1, j = batchRank - 1; i >= 0; i--, j--) { + resStr += ` +aIndices[${i}] = ${batchRank > 1 ? `batchIndices[${j}]` : "batchIndices"};`; + } + broadCastADims.forEach((i) => { + resStr += ` +aIndices[${i}] = 0;`; + }); + resStr += ` +aIndices[${aRank - 2}] = u32(row); + aIndices[${aRank - 1}] = u32(colIn);`; + return resStr; + }; + const getBIndices = () => { + const bRank = bVariable.rank; + const batchRank = batchVariable.rank; + let resStr = `var bIndices: ${bVariable.type.indices};`; + for (let i = bRank - 2 - 1, j = batchRank - 1; i >= 0; i--, j--) { + resStr += ` +bIndices[${i}] = ${batchRank > 1 ? `batchIndices[${j}]` : "batchIndices"};`; + } + broadCastBDims.forEach((i) => { + resStr += ` +bIndices[${i}] = 0;`; + }); + resStr += ` +bIndices[${bRank - 2}] = u32(row); + bIndices[${bRank - 1}] = u32(colIn);`; + return resStr; + }; + const source = ` + fn mm_readA(batch: i32, row: i32, colIn: i32, batchIndices: ${batchVariable.type.indices}) -> ${typeSnippet(component, dataType)} { + var value = ${typeSnippet(component, dataType)}(0.0); + let col = colIn * ${component}; + if(row < uniforms.dim_a_outer && col < uniforms.dim_inner) + { + ${getAIndices()} + value = ${aVariable.getByIndices("aIndices")}; + } + return value; + } + + fn mm_readB(batch: i32, row: i32, colIn: i32, batchIndices: ${batchVariable.type.indices}) -> ${typeSnippet(component, dataType)} { + var value = ${typeSnippet(component, dataType)}(0.0); + let col = colIn * ${component}; + if(row < uniforms.dim_inner && col < uniforms.dim_b_outer) + { + ${getBIndices()} + value = ${bVariable.getByIndices("bIndices")}; + } + return value; + } + + fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${typeSnippet(component, dataType)}) { + let col = colIn * ${component}; + if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) { + var value = valueIn; + let coords = vec3(batch, row, colIn); + ${hasBias ? `value = value + ${isChannelsLast ? "bias[colIn]" : `${typeSnippet(component, dataType)}(bias[row])`};` : ""} + ${applyActivation} + ${outputVariable2.setByIndices("vec3(coords)", "value")} + } + } + `; + return source; + }; + createMatmulProgramInfo = (inputs, activationAttributes, outputShape, reshapedOutputShape, isChannelsLast = false) => { + const aShape = inputs[0].dims; + const bShape = inputs[1].dims; + const outerDimsA = aShape.slice(0, -2); + const outerDimsB = bShape.slice(0, -2); + const outerDims = reshapedOutputShape ? reshapedOutputShape.slice(0, -2) : outputShape.slice(0, -2); + const batchSize = ShapeUtil.size(outerDims); + const dimAOuter = aShape[aShape.length - 2]; + const dimInner = aShape[aShape.length - 1]; + const dimBOuter = bShape[bShape.length - 1]; + const isVec4 = dimInner % 4 === 0 && dimBOuter % 4 === 0; + const elementsPerThread = dimAOuter <= 8 ? [4, 1, 1] : [4, 4, 1]; + const workgroupSize = [8, 8, 1]; + const dispatch = [ + Math.ceil(dimBOuter / workgroupSize[0] / elementsPerThread[0]), + Math.ceil(dimAOuter / workgroupSize[1] / elementsPerThread[1]), + Math.ceil(batchSize / workgroupSize[2] / elementsPerThread[2]) + ]; + const components = isVec4 ? 4 : 1; + const aShapeTemp = [...outerDimsA, dimAOuter, dimInner / components]; + const aRank = aShapeTemp.length; + const bShapeTemp = [...outerDimsB, dimInner, dimBOuter / components]; + const bRank = bShapeTemp.length; + const outputShapeTemp = [batchSize, dimAOuter, dimBOuter / components]; + const programUniforms = [ + { type: 6 /* int32 */, data: dimAOuter }, + { type: 6 /* int32 */, data: dimBOuter }, + { type: 6 /* int32 */, data: dimInner } + ]; + appendActivationUniformsData(activationAttributes, programUniforms); + programUniforms.push(...createTensorShapeVariables(outerDims, aShapeTemp, bShapeTemp)); + const inputDependencies = ["rank", "rank"]; + const hasBias = inputs.length > 2; + if (hasBias) { + programUniforms.push(...createTensorShapeVariables(inputs[2].dims)); + inputDependencies.push("rank"); + } + programUniforms.push(...createTensorShapeVariables(outputShapeTemp)); + const getShaderSource = (shaderHelper) => { + const batchRank = outerDims.length; + const batchDims = internalVariable("batchDims", inputs[0].dataType, batchRank, 1); + const dataType = tensorTypeToWsglStorageType(inputs[0].dataType); + const A = inputVariable("a", inputs[0].dataType, aRank, components); + const B = inputVariable("b", inputs[1].dataType, bRank, components); + const output = outputVariable("result", inputs[0].dataType, outputShapeTemp.length, components); + const inputVariables = [A, B]; + if (hasBias) { + const biasComponents = isChannelsLast ? components : 1; + inputVariables.push(inputVariable("bias", inputs[2].dataType, inputs[2].dims.length, biasComponents)); + } + const uniforms = [{ name: "dim_a_outer", type: "i32" }, { name: "dim_b_outer", type: "i32" }, { name: "dim_inner", type: "i32" }]; + appendActivationUniforms(activationAttributes, uniforms); + const baseType = tensorTypeToWsglStorageType(output.type.tensor); + const applyActivation = getActivationSnippet(activationAttributes, output.type.value, baseType); + const declareFunctions = matMulReadWriteFnSource( + components, + hasBias, + applyActivation, + [batchDims, A, B, output], + [outerDimsA, outerDimsB, outerDims], + isChannelsLast + ); + return ` + ${shaderHelper.registerUniforms(uniforms).registerInternalVariables(batchDims).declareVariables( + ...inputVariables, + output + )} + ${declareFunctions} + ${isVec4 ? makeMatMulPackedVec4Source(elementsPerThread, workgroupSize, dataType, batchDims) : makeMatMulPackedSource(elementsPerThread, workgroupSize, dataType, batchDims)} + `; + }; + return { + name: "MatMul", + shaderCache: { + hint: `${elementsPerThread};${activationAttributes.activation};${isVec4};${isChannelsLast}`, + inputDependencies + }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: dispatch[0], y: dispatch[1], z: dispatch[2] }, + programUniforms + }), + getShaderSource + }; + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/3rd-party/conv2d_mm_webgpu.ts +var conv2dCommonSnippet, createConv2DMatMulProgramInfo; +var init_conv2d_mm_webgpu = __esm({ + "web/lib/wasm/jsep/webgpu/ops/3rd-party/conv2d_mm_webgpu.ts"() { + "use strict"; + init_wasm_common(); + init_log(); + init_common(); + init_fuse_utils(); + init_activation_util(); + init_conv_util(); + init_matmul_packed_webgpu(); + conv2dCommonSnippet = (isChannelsLast, fitAOuter, fitBOuter, fitInner, addBias = false, attributes, innerElementSizeX = 4, innerElementSizeW = 4, innerElementSize = 4, dataType = "f32") => { + const getXSnippet = (innerElementSize2) => { + switch (innerElementSize2) { + case 1: + return "resData = x[xIndex];"; + case 3: + return `resData = vec3<${dataType}>(x[xIndex], x[xIndex + 1], x[xIndex + 2]);`; + case 4: + return "resData = x[xIndex / 4];"; + default: + throw new Error(`innerElementSize ${innerElementSize2} is not supported.`); + } + }; + const getWSnippet = (innerElementSize2) => { + switch (innerElementSize2) { + case 1: + return "return w[row * i32(uniforms.w_shape[3]) + colIn];"; + case 4: + return "return w[row * i32(uniforms.w_shape[3]) / 4 + colIn];"; + default: + throw new Error(`innerElementSize ${innerElementSize2} is not supported.`); + } + }; + const coordASnippet = isChannelsLast ? ` + let coord = vec4(batch, xRow, xCol, xCh); + ` : ` + let coord = vec4(batch, xCh, xRow, xCol); + `; + const coordResSnippet = isChannelsLast ? ` + let coords = vec4( + batch, + row / outWidth, + row % outWidth, + col); + ` : ` + let coords = vec4( + batch, + row, + col / outWidth, + col % outWidth); + `; + const xHeight = isChannelsLast ? "i32(uniforms.x_shape[1])" : "i32(uniforms.x_shape[2])"; + const xWidth = isChannelsLast ? "i32(uniforms.x_shape[2])" : "i32(uniforms.x_shape[3])"; + const row = isChannelsLast ? "row" : "col"; + const col = isChannelsLast ? "col" : "row"; + const readXSnippet = ` + let inChannels = i32(uniforms.w_shape[2]); + let outWidth = ${isChannelsLast ? "i32(uniforms.result_shape[2])" : "i32(uniforms.result_shape[3])"}; + let outRow = ${row} / outWidth; + let outCol = ${row} % outWidth; + + let WRow = ${col} / (i32(uniforms.w_shape[1]) * inChannels); + let WCol = ${col} / inChannels % i32(uniforms.w_shape[1]); + let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0]; + let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1]; + let xCh = ${col} % inChannels; + var resData = ${typeSnippet(innerElementSizeX, dataType)}(0.0); + // The bounds checking is always needed since we use it to pad zero for + // the 'same' padding type. + if (xRow >= 0 && xRow < ${xHeight} && xCol >= 0 && xCol < ${xWidth}) { + ${coordASnippet} + let xIndex = getIndexFromCoords4D(coord, vec4(uniforms.x_shape)); + ${getXSnippet(innerElementSizeX)} + } + return resData;`; + const sampleX = isChannelsLast ? fitAOuter && fitInner ? ` + let col = colIn * ${innerElementSizeX}; + ${readXSnippet}` : ` + let col = colIn * ${innerElementSizeX}; + if (row < uniforms.dim_a_outer && col < uniforms.dim_inner) { + ${readXSnippet} + } + return ${typeSnippet(innerElementSizeX, dataType)}(0.0);` : fitInner && fitBOuter ? ` + let col = colIn * ${innerElementSizeX}; + ${readXSnippet}` : ` + let col = colIn * ${innerElementSizeX}; + if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) { + ${readXSnippet} + } + return ${typeSnippet(innerElementSizeX, dataType)}(0.0);`; + const sampleW = `${getWSnippet(innerElementSizeW)}`; + const resType = typeSnippet(innerElementSize, dataType); + const aType = isChannelsLast ? typeSnippet(innerElementSizeX, dataType) : typeSnippet(innerElementSizeW, dataType); + const bType = isChannelsLast ? typeSnippet(innerElementSizeW, dataType) : typeSnippet(innerElementSizeX, dataType); + const applyActivation = getActivationSnippet(attributes, resType, dataType); + const userCode = ` + fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${aType} { + ${isChannelsLast ? sampleX : sampleW} + } + + fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${bType} { + ${isChannelsLast ? sampleW : sampleX} + } + + fn mm_write(batch: i32, row : i32, colIn : i32, valueIn : ${resType}) { + let col = colIn * ${innerElementSize}; + if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) + { + var value = valueIn; + let outWidth = ${isChannelsLast ? "i32(uniforms.result_shape[2])" : "i32(uniforms.result_shape[3])"}; + ${coordResSnippet} + ${biasSnippet(addBias)} + ${applyActivation} + setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); + } + }`; + return userCode; + }; + createConv2DMatMulProgramInfo = (inputs, attributes, outputShape, dimAOuter, dimBOuter, dimInner, hasBias, sequentialAccessByThreads) => { + const isChannelsLast = attributes.format === "NHWC"; + const inChannels = isChannelsLast ? inputs[0].dims[3] : inputs[0].dims[1]; + const batchSize = outputShape[0]; + const outWidth = isChannelsLast ? outputShape[2] : outputShape[3]; + const outHeight = isChannelsLast ? outputShape[1] : outputShape[2]; + const outChannels = isChannelsLast ? outputShape[3] : outputShape[1]; + const isVec4 = isChannelsLast && (inChannels % 4 === 0 || inChannels % 3 === 0) && outChannels % 4 === 0; + const dispatchX = isChannelsLast ? outChannels : outWidth * outHeight; + const dispatchY = isChannelsLast ? outWidth * outHeight : outChannels; + const workGroupSize = [8, 8, 1]; + const elementsPerThread = dimAOuter <= 8 ? [4, 1, 1] : [4, 4, 1]; + const dispatch = [ + Math.ceil(dispatchX / workGroupSize[0] / elementsPerThread[0]), + Math.ceil(dispatchY / workGroupSize[1] / elementsPerThread[1]), + Math.ceil(batchSize / workGroupSize[2] / elementsPerThread[2]) + ]; + LOG_DEBUG("verbose", () => `[conv2d_mm_webgpu] dispatch = ${dispatch}`); + const innerElementSize = isVec4 ? isChannelsLast && inChannels % 4 !== 0 ? 3 : 4 : 1; + const tileAOuter = workGroupSize[1] * elementsPerThread[1]; + const tileBOuter = workGroupSize[0] * elementsPerThread[0]; + const tileInner = Math.max(workGroupSize[0] * innerElementSize, workGroupSize[1]); + const fitAOuter = dimAOuter % tileAOuter === 0; + const fitBOuter = dimBOuter % tileBOuter === 0; + const fitInner = dimInner % tileInner === 0; + const elementsSize = isVec4 ? [innerElementSize, 4, 4] : [1, 1, 1]; + const programUniforms = [ + { type: 6 /* int32 */, data: dimAOuter }, + { type: 6 /* int32 */, data: dimBOuter }, + { type: 6 /* int32 */, data: dimInner }, + { type: 6 /* int32 */, data: [attributes.pads[0], attributes.pads[1]] }, + { type: 6 /* int32 */, data: attributes.strides }, + { type: 6 /* int32 */, data: attributes.dilations } + ]; + appendActivationUniformsData(attributes, programUniforms); + programUniforms.push(...createTensorShapeVariables(inputs[0].dims, inputs[1].dims)); + const inputDependencies = ["rank", "rank"]; + if (hasBias) { + programUniforms.push(...createTensorShapeVariables(inputs[2].dims)); + inputDependencies.push("rank"); + } + programUniforms.push(...createTensorShapeVariables(outputShape)); + const getShaderSource = (shaderHelper) => { + const uniforms = [ + { name: "dim_a_outer", type: "i32" }, + { name: "dim_b_outer", type: "i32" }, + { name: "dim_inner", type: "i32" }, + { name: "pad", type: "i32", length: 2 }, + { name: "stride", type: "i32", length: 2 }, + { name: "dilation", type: "i32", length: 2 } + ]; + appendActivationUniforms(attributes, uniforms); + const components = isVec4 ? 4 : 1; + const t = tensorTypeToWsglStorageType(inputs[0].dataType); + let declareFunctions = ` + fn setOutputAtIndex(flatIndex : i32, value : ${isVec4 ? `vec4<${t}>` : t}) { + result[flatIndex] = ${isVec4 ? `vec4<${t}>` : t}(value); + } + fn setOutputAtCoords(d0 : i32, d1 : i32, d2 : i32, d3 : i32, value : ${isVec4 ? `vec4<${t}>` : t}) { + let flatIndex = getOutputIndexFromCoords(vec4(d0, d1, d2, d3)); + setOutputAtIndex(flatIndex ${isVec4 ? "/ 4" : ""}, value); + }`; + const x = inputVariable( + "x", + inputs[0].dataType, + inputs[0].dims.length, + innerElementSize === 3 ? 1 : innerElementSize + ); + const w = inputVariable("w", inputs[1].dataType, inputs[1].dims.length, components); + const inputVariables = [x, w]; + const output = outputVariable("result", inputs[0].dataType, outputShape.length, components); + if (hasBias) { + const bias = inputVariable("bias", inputs[2].dataType, inputs[2].dims.length, components); + inputVariables.push(bias); + declareFunctions += ` + fn getBiasByOutputCoords(coords : vec4) -> ${isVec4 ? `vec4<${t}>` : t} { + return bias[coords.${isChannelsLast ? "w" : "y"}${isVec4 ? "/ 4" : ""}]; + }`; + } + return ` + ${utilFunctions("uniforms.result_strides")} + //struct Uniforms { xShape : vec4, wShape : vec4, outShape : vec4, + // outShapeStrides: vec3, filterDims : vec2, pad : vec2, stride : vec2, + // dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32 }; + ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVariables, output)} + ${declareFunctions} + ${conv2dCommonSnippet( + isChannelsLast, + fitAOuter, + fitBOuter, + fitInner, + hasBias, + attributes, + elementsSize[0], + elementsSize[1], + elementsSize[2], + t + )} + ${isVec4 ? makeMatMulPackedVec4Source(elementsPerThread, workGroupSize, t, void 0, !isChannelsLast, tileInner) : makeMatMulPackedSource( + elementsPerThread, + workGroupSize, + t, + void 0, + !isChannelsLast, + tileInner, + false, + void 0, + sequentialAccessByThreads + )}`; + }; + return { + name: "Conv2DMatMul", + shaderCache: { + hint: `${attributes.cacheKey};${innerElementSize};${isVec4};${fitAOuter};${fitBOuter};${fitInner};${tileAOuter};${tileBOuter};${tileInner}`, + inputDependencies + }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: dispatch[0], y: dispatch[1], z: dispatch[2] }, + programUniforms + }), + getShaderSource + }; + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/conv-grouped.ts +var createGroupedConvProgramInfo, createGroupedConvVectorizeProgramInfo; +var init_conv_grouped = __esm({ + "web/lib/wasm/jsep/webgpu/ops/conv-grouped.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + init_conv(); + init_fuse_utils(); + createGroupedConvProgramInfo = (inputs, attributes, squeezeOutputShapeFunction) => { + const hasBias = inputs.length > 2; + const processBias = hasBias ? "value += b[output_channel];" : ""; + const xShape = inputs[0].dims; + const wShape = inputs[1].dims; + const outputChannelsPerGroup = wShape[0] / attributes.group; + const isChannelLast = attributes.format === "NHWC"; + const outputShape = calculateOutputShape( + xShape, + wShape, + attributes.dilations, + attributes.pads, + attributes.strides, + isChannelLast + ); + const outputSize = ShapeUtil.size(outputShape); + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 12 /* uint32 */, data: attributes.dilations }, + { type: 12 /* uint32 */, data: [attributes.strides[0], attributes.strides[1]] }, + { type: 12 /* uint32 */, data: [attributes.pads[0], attributes.pads[1]] }, + { type: 12 /* uint32 */, data: outputChannelsPerGroup } + ]; + appendActivationUniformsData(attributes, programUniforms); + programUniforms.push(...createTensorShapeVariables(xShape, wShape)); + const inputDependencies = ["rank", "rank"]; + if (hasBias) { + programUniforms.push(...createTensorShapeVariables(inputs[2].dims)); + inputDependencies.push("rank"); + } + programUniforms.push(...createTensorShapeVariables(outputShape)); + const getShaderSource = (shaderHelper) => { + const output = outputVariable("output", inputs[0].dataType, outputShape.length); + const baseType = tensorTypeToWsglStorageType(output.type.tensor); + const applyActivation = getActivationSnippet(attributes, output.type.value, baseType); + const x = inputVariable("x", inputs[0].dataType, xShape.length); + const w = inputVariable("w", inputs[1].dataType, wShape.length); + const inputVars = [x, w]; + if (hasBias) { + inputVars.push(inputVariable("b", inputs[2].dataType, inputs[2].dims.length)); + } + const uniforms = [ + { name: "output_size", type: "u32" }, + { name: "dilations", type: "u32", length: attributes.dilations.length }, + { name: "strides", type: "u32", length: 2 }, + { name: "pads", type: "u32", length: 2 }, + { name: "output_channels_per_group", type: "u32" } + ]; + appendActivationUniforms(attributes, uniforms); + return ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVars, output)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + + let outputIndices = ${output.offsetToIndices("global_idx")}; + let batch: u32 = outputIndices[0]; + let output_channel: u32 = outputIndices[${isChannelLast ? 3 : 1}]; + let xRCCorner: vec2 = vec2(outputIndices[${isChannelLast ? 1 : 2}], outputIndices[${isChannelLast ? 2 : 3}]) * uniforms.strides - uniforms.pads; + let group_id: u32 = output_channel / uniforms.output_channels_per_group; + + var value: ${output.type.value} = ${output.type.value}(0); + for (var wInChannel: u32 = 0u; wInChannel < uniforms.w_shape[1]; wInChannel++) { + let input_channel = group_id * uniforms.w_shape[1] + wInChannel; + for (var wHeight: u32 = 0u; wHeight < uniforms.w_shape[2]; wHeight++) { + let xHeight = xRCCorner.x + wHeight * uniforms.dilations[0]; + + if (xHeight < 0u || xHeight >= uniforms.x_shape[${isChannelLast ? 1 : 2}]) { + continue; + } + + for (var wWidth: u32 = 0u; wWidth < uniforms.w_shape[3]; wWidth++) { + let xWidth = xRCCorner.y + wWidth * uniforms.dilations[1]; + if (xWidth < 0u || xWidth >= uniforms.x_shape[${isChannelLast ? 2 : 3}]) { + continue; + } + + let xVal = ${isChannelLast ? x.get("batch", "xHeight", "xWidth", "input_channel") : x.get("batch", "input_channel", "xHeight", "xWidth")}; + let wVal = ${w.get("output_channel", "wInChannel", "wHeight", "wWidth")}; + value += xVal*wVal; + } + } + } + ${processBias} + ${applyActivation} + ${output.setByOffset("global_idx", "value")} + }`; + }; + return { + name: "GroupedConv", + shaderCache: { hint: attributes.cacheKey, inputDependencies }, + getRunData: () => ({ + outputs: [{ + dims: squeezeOutputShapeFunction ? squeezeOutputShapeFunction(outputShape) : outputShape, + dataType: inputs[0].dataType + }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }; + }; + createGroupedConvVectorizeProgramInfo = (inputs, attributes, outputShape) => { + const hasBias = inputs.length > 2; + const components = getMaxComponents(outputShape[3]); + const outputNumber = getMaxComponents(outputShape[2]); + const outputSize = ShapeUtil.size(outputShape) / components / outputNumber; + const xShape = [inputs[0].dims[0], inputs[0].dims[1], inputs[0].dims[2], inputs[0].dims[3] / components]; + const wShape = [inputs[1].dims[0], inputs[1].dims[1], inputs[1].dims[2], inputs[1].dims[3] / components]; + const outputShapeInShader = [outputShape[0], outputShape[1], outputShape[2], outputShape[3] / components]; + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 6 /* int32 */, data: [attributes.strides[0], attributes.strides[1]] }, + { type: 6 /* int32 */, data: [attributes.pads[0], attributes.pads[1]] } + ]; + appendActivationUniformsData(attributes, programUniforms); + programUniforms.push(...createTensorShapeVariables(xShape, wShape, outputShapeInShader)); + const xNumber = (outputNumber - 1) * attributes.strides[1] + wShape[1]; + const getShaderSource = (shaderHelper) => { + const output = outputVariable("output", inputs[0].dataType, outputShapeInShader.length, components); + const baseType = tensorTypeToWsglStorageType(output.type.tensor); + const applyActivation = getActivationSnippet(attributes, output.type.value, baseType); + const x = inputVariable("x", inputs[0].dataType, xShape.length, components); + const w = inputVariable("w", inputs[1].dataType, wShape.length, components); + const inputVars = [x, w]; + if (hasBias) { + inputVars.push(inputVariable("b", inputs[2].dataType, inputs[2].dims, components)); + } + const processBias = hasBias ? "value += b[output_channel];" : ""; + const uniforms = [ + { name: "output_size", type: "u32" }, + { name: "strides", type: "i32", length: 2 }, + { name: "pads", type: "i32", length: 2 } + ]; + appendActivationUniforms(attributes, uniforms); + return ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVars, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let width0 = uniforms.output_shape[3]; + let output_channel = global_idx % width0; + var index1 = global_idx / width0; + let width1 = uniforms.output_shape[2] / ${outputNumber}u; + let col = (index1 % width1) * ${outputNumber}u; + index1 = index1 / width1; + let row = index1 % uniforms.output_shape[1]; + let batch = index1 / uniforms.output_shape[1]; + + let x_corner = vec2(i32(row), i32(col)) * uniforms.strides - uniforms.pads; + + var x_vals: array<${x.type.value}, ${xNumber}>; + var values: array<${output.type.value}, ${outputNumber}>; + let input_channel = output_channel; + // Use constant instead of uniform can give better performance for w's height/width. + for (var w_height: u32 = 0u; w_height < ${wShape[0]}; w_height++) { + let x_height = x_corner.x + i32(w_height); + if (x_height >= 0 && u32(x_height) < uniforms.x_shape[1]) { + for (var i = 0; i < ${xNumber}; i++) { + let x_width = x_corner.y + i; + if (x_width >= 0 && u32(x_width) < uniforms.x_shape[2]) { + x_vals[i] = ${x.get("batch", "u32(x_height)", "u32(x_width)", "input_channel")}; + } else { + x_vals[i] = ${x.type.value}(0); + } + } + for (var w_width: u32 = 0u; w_width < ${wShape[1]}; w_width++) { + let w_val = ${w.get("w_height", "w_width", "0", "output_channel")}; + for (var i = 0u; i < ${outputNumber}u; i++) { + values[i] = fma(x_vals[i * u32(uniforms.strides[1]) + w_width], w_val, values[i]); + } + } + } + } + + for (var i = 0u; i < ${outputNumber}u; i++) { + var value = values[i]; + ${processBias} + ${applyActivation} + ${output.set("batch", "row", "col + i", "output_channel", "value")}; + } + }`; + }; + return { + name: "GroupedConv-Vectorize", + shaderCache: { + hint: `${attributes.cacheKey};${components};${outputNumber};${xNumber};${wShape[0]};${wShape[1]}`, + inputDependencies: hasBias ? ["rank", "rank", "type"] : ["rank", "rank"] + }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }; + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/matmul.ts +var createNaiveMatmulProgramInfo, validateInputs8, matMul; +var init_matmul = __esm({ + "web/lib/wasm/jsep/webgpu/ops/matmul.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_matmul_packed_webgpu(); + init_common(); + init_fuse_utils(); + createNaiveMatmulProgramInfo = (inputs, activationAttributes, outputShape, reshapedOutputShape, isChannelsLast = false) => { + const aShape = inputs[0].dims; + const bShape = inputs[1].dims; + const M = aShape[aShape.length - 2]; + const N = bShape[bShape.length - 1]; + const K = aShape[aShape.length - 1]; + const components = getMaxComponents(N); + const aComponents = getMaxComponents(K); + const outputNumber = getMaxComponents(M); + const outputSize = ShapeUtil.size(outputShape) / components / outputNumber; + const hasBias = inputs.length > 2; + const outerDims = reshapedOutputShape ? reshapedOutputShape.slice(0, -2) : outputShape.slice(0, -2); + const batchSize = ShapeUtil.size(outerDims); + const outputShapeInShader = [batchSize, M, N]; + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 12 /* uint32 */, data: M }, + { type: 12 /* uint32 */, data: N }, + { type: 12 /* uint32 */, data: K } + ]; + appendActivationUniformsData(activationAttributes, programUniforms); + programUniforms.push(...createTensorShapeVariables(outerDims, aShape, bShape)); + if (hasBias) { + programUniforms.push(...createTensorShapeVariables(inputs[2].dims)); + } + programUniforms.push(...createTensorShapeVariables(outputShapeInShader)); + const getShaderSource = (shaderHelper) => { + const batchDims = internalVariable("batch_dims", inputs[0].dataType, outerDims.length); + const a = inputVariable("a", inputs[0].dataType, aShape.length, aComponents); + const b = inputVariable("b", inputs[1].dataType, bShape.length, components); + const output = outputVariable("output", inputs[0].dataType, outputShapeInShader.length, components); + const baseType = tensorTypeToWsglStorageType(output.type.tensor); + const applyActivation = getActivationSnippet(activationAttributes, output.type.value, baseType); + const inputVariables = [a, b]; + let processBias = ""; + if (hasBias) { + const biasComponents = isChannelsLast ? components : 1; + inputVariables.push(inputVariable("bias", inputs[2].dataType, inputs[2].dims.length, biasComponents)); + processBias = `${isChannelsLast ? `value += bias[col / ${biasComponents}];` : `value += ${output.type.value}(bias[row + i]);`}`; + } + const outerDimsA = aShape.slice(0, -2); + const outerDimsB = bShape.slice(0, -2); + const broadCastADims = getBroadcastDims(outerDimsA, outerDims); + const broadCastBDims = getBroadcastDims(outerDimsB, outerDims); + const uniforms = [ + { name: "output_size", type: "u32" }, + { name: "M", type: "u32" }, + { name: "N", type: "u32" }, + { name: "K", type: "u32" } + ]; + appendActivationUniforms(activationAttributes, uniforms); + const getIndices = (variable, broadCastDims) => { + const rank = variable.rank; + const name = variable.name; + if (rank === 2) { + return `var ${name}_indices = ${variable.type.indices}(0u, 0u);`; + } + const batchRank = batchDims.rank; + let resStr = `var ${name}_indices: ${variable.type.indices};`; + for (let i = rank - 2 - 1, j = batchRank - 1; i >= 0; i--, j--) { + resStr += ` +${name}_indices[${i}] = ${batchRank > 1 ? `batch_indices[${j}]` : "batch_indices"};`; + } + broadCastDims.forEach((i) => { + resStr += ` +${name}_indices[${i}] = 0;`; + }); + resStr += `${name}_indices[${rank - 2}] = 0u; + ${name}_indices[${rank - 1}] = 0u;`; + return resStr; + }; + const calcResult = () => { + let calcStr = `var a_data: ${a.type.value};`; + for (let i = 0; i < aComponents; i++) { + calcStr += ` + let b_data${i} = b[(b_offset + (k + ${i}) * uniforms.N + col) / ${components}];`; + } + for (let i = 0; i < outputNumber; i++) { + calcStr += `a_data = a[(a_offset + (row + ${i}) * uniforms.K + k) / ${aComponents}];`; + for (let j = 0; j < aComponents; j++) { + calcStr += ` + values[${i}] = fma(${b.type.value}(a_data${aComponents === 1 ? "" : `[${j}]`}), b_data${j}, values[${i}]); +`; + } + } + return calcStr; + }; + return ` + ${shaderHelper.registerUniforms(uniforms).registerInternalVariables(batchDims).declareVariables( + ...inputVariables, + output + )} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let col = (global_idx % (uniforms.N / ${components})) * ${components}; + var index1 = global_idx / (uniforms.N / ${components}); + let stride1 = uniforms.M / ${outputNumber}; + let row = (index1 % stride1) * ${outputNumber}; + let batch = index1 / stride1; + + ${outputShape.length === 2 ? "" : `let batch_indices = ${batchDims.offsetToIndices("batch")};`} + ${getIndices(a, broadCastADims)} + let a_offset = ${a.indicesToOffset("a_indices")}; + ${getIndices(b, broadCastBDims)} + let b_offset = ${b.indicesToOffset("b_indices")}; + var values: array<${output.type.value}, ${outputNumber}>; + for (var k: u32 = 0u; k < uniforms.K; k = k + ${aComponents}) { + ${calcResult()} + } + for (var i = 0u; i < ${outputNumber}u; i++) { + var value = values[i]; + ${processBias} + ${applyActivation} + let cur_indices = ${output.type.indices}(batch, row + i, col); + let offset = ${output.indicesToOffset("cur_indices")}; + ${output.setByOffset(`offset / ${components}`, "value")}; + } + } + `; + }; + return { + name: "MatMulNaive", + shaderCache: { + hint: `${activationAttributes.activation};${components};${aComponents};${outputNumber};${isChannelsLast}`, + inputDependencies: hasBias ? ["rank", "rank", "rank"] : ["rank", "rank"] + }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }; + }; + validateInputs8 = (inputs) => { + if (!inputs || inputs.length !== 2) { + throw new Error("MatMul requires 2 inputs."); + } + if (inputs[0].dims[inputs[0].dims.length - 1] !== inputs[1].dims[inputs[1].dims.length - 2]) { + throw new Error("shared dimension does not match."); + } + }; + matMul = (context) => { + validateInputs8(context.inputs); + const outputShape = BroadcastUtil.calcShape(context.inputs[0].dims, context.inputs[1].dims, true); + if (!outputShape) { + throw new Error("Can't use matmul on the given tensors"); + } + const N = outputShape[outputShape.length - 1]; + const K = context.inputs[0].dims[context.inputs[0].dims.length - 1]; + if (N < 8 && K < 8) { + context.compute(createNaiveMatmulProgramInfo(context.inputs, { activation: "" }, outputShape)); + } else { + context.compute(createMatmulProgramInfo(context.inputs, { activation: "" }, outputShape)); + } + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/conv.ts +var calculateOutputShape, weightTransposeAttribute, validateInputs9, getAdjustedConvAttributes, parseConvAttributes, conv2d, conv1d, conv; +var init_conv = __esm({ + "web/lib/wasm/jsep/webgpu/ops/conv.ts"() { + "use strict"; + init_util(); + init_conv2d_mm_webgpu(); + init_matmul_packed_webgpu(); + init_conv_grouped(); + init_fuse_utils(); + init_matmul(); + init_transpose(); + calculateOutputShape = (inputShape, kernelShape, dilations, adjustPads, strides, isChannelLast) => { + const batchSize = inputShape[0]; + const inputSpatialShape = inputShape.slice(isChannelLast ? 1 : 2, isChannelLast ? 3 : 4); + const spatialRank = inputSpatialShape.length; + const outChannels = kernelShape[0]; + const kernelSpatialShape = kernelShape.slice(2); + const dilatedKernelShape = kernelSpatialShape.map((v, i) => v + (v - 1) * (dilations[i] - 1)); + const inputSpatialShapeWithPad = inputSpatialShape.map((v, i) => v + adjustPads[i] + adjustPads[i + spatialRank]); + const outputShape = inputSpatialShapeWithPad.map((v, i) => Math.floor((v - dilatedKernelShape[i] + strides[i]) / strides[i])); + outputShape.splice(0, 0, batchSize); + outputShape.splice(isChannelLast ? 3 : 1, 0, outChannels); + return outputShape; + }; + weightTransposeAttribute = [2, 3, 1, 0]; + validateInputs9 = (inputs, attributes) => { + if (!inputs || inputs.length !== 2 && inputs.length !== 3) { + throw new Error("Conv requires 2 or 3 inputs"); + } + if (inputs[0].dims.length !== 4 && inputs[0].dims.length !== 3) { + throw new Error("currently only support conv 1D and 2D"); + } + if (inputs[0].dims.length !== inputs[1].dims.length) { + throw new Error("filter does not have same dimension as input"); + } + const dataChannel = inputs[0].dims[attributes.format === "NHWC" ? inputs[0].dims.length - 1 : 1]; + const filterInChannel = inputs[1].dims[1] * attributes.group; + if (dataChannel !== filterInChannel) { + throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL"); + } + if (inputs.length === 3 && (inputs[2].dims.length !== 1 || inputs[1].dims[0] !== inputs[2].dims[0])) { + throw new Error("invalid bias"); + } + const spatialRank = inputs[0].dims.length - 2; + if (attributes.dilations.length !== spatialRank) { + throw new Error(`dilations should be ${spatialRank}D`); + } + if (attributes.strides.length !== spatialRank) { + throw new Error(`strides should be ${spatialRank}D`); + } + if (attributes.pads.length !== spatialRank * 2) { + throw new Error(`pads should be ${spatialRank * 2}D`); + } + if (attributes.kernelShape.length !== 0 && attributes.kernelShape.length !== inputs[1].dims.length - 2) { + throw new Error("invalid kernel shape"); + } + }; + getAdjustedConvAttributes = (attributes, inputs) => { + const kernelShape = attributes.kernelShape.slice(); + for (let i = 2; i < inputs[1].dims.length; ++i) { + if (kernelShape[i - 2] === 0) { + kernelShape[i - 2] = inputs[1].dims[i]; + } + } + const pads = attributes.pads.slice(); + PoolConvUtil.adjustPadsBasedOnAutoPad( + inputs[0].dims, + attributes.strides, + attributes.dilations, + kernelShape, + pads, + attributes.format === "NHWC", + attributes.autoPad + ); + const newAttributes = Object.assign({}, attributes); + Object.assign(newAttributes, { kernelShape, pads }); + return newAttributes; + }; + parseConvAttributes = (attributes) => { + const activationAttributes = parseInternalActivationAttributes(attributes); + const format = attributes.format; + const autoPad = ["NOTSET", "VALID", "SAME_UPPER", "SAME_LOWER"][attributes.auto_pad]; + const dilations = attributes.dilations; + const group = attributes.group; + const kernelShape = attributes.kernel_shape; + const pads = attributes.pads; + const strides = attributes.strides; + const wIsConst = attributes.w_is_const(); + return { + autoPad, + format, + dilations, + group, + kernelShape, + pads, + strides, + wIsConst, + ...activationAttributes, + cacheKey: `${attributes.format};${activationAttributes.activation};` + }; + }; + conv2d = (context, inputs, attributes) => { + const adjustedAttributes = getAdjustedConvAttributes(attributes, inputs); + const isChannelsLast = attributes.format === "NHWC"; + if (attributes.group !== 1) { + const enableGroupedConvVectorize = !context.adapterInfo.isArchitecture("ampere"); + if (enableGroupedConvVectorize && isChannelsLast && inputs[1].dims[0] === attributes.group && inputs[1].dims[1] === 1 && attributes.dilations[0] === 1 && attributes.dilations[1] === 1) { + const outputShape2 = calculateOutputShape( + inputs[0].dims, + inputs[1].dims, + attributes.dilations, + adjustedAttributes.pads, + attributes.strides, + isChannelsLast + ); + const transposedWeight2 = context.kernelCustomData.wT ?? context.compute( + createTransposeProgramInfo(inputs[1], weightTransposeAttribute), + { inputs: [1], outputs: [attributes.wIsConst ? -2 : -1] } + )[0]; + if (attributes.wIsConst && !context.kernelCustomData.wT) { + context.kernelCustomData.wT = transposedWeight2; + } + const convInputs2 = [inputs[0], transposedWeight2]; + if (inputs.length === 3) { + convInputs2.push(inputs[2]); + } + context.compute( + createGroupedConvVectorizeProgramInfo(convInputs2, adjustedAttributes, outputShape2), + { inputs: convInputs2 } + ); + } else { + context.compute(createGroupedConvProgramInfo(inputs, adjustedAttributes)); + } + return; + } + const hasBias = inputs.length === 3; + const inputHeight = inputs[0].dims[isChannelsLast ? 1 : 2]; + const inputWidth = inputs[0].dims[isChannelsLast ? 2 : 3]; + const inputChannels = inputs[0].dims[isChannelsLast ? 3 : 1]; + const weightHeight = inputs[1].dims[2]; + const weightWidth = inputs[1].dims[3]; + const outputShape = calculateOutputShape( + inputs[0].dims, + inputs[1].dims, + attributes.dilations, + adjustedAttributes.pads, + attributes.strides, + isChannelsLast + ); + const outHeight = outputShape[isChannelsLast ? 1 : 2]; + const outWidth = outputShape[isChannelsLast ? 2 : 3]; + const outChannels = outputShape[isChannelsLast ? 3 : 1]; + const sameSize = isChannelsLast && weightHeight === inputHeight && weightWidth === inputWidth && attributes.pads[0] === 0 && attributes.pads[1] === 0; + if (sameSize || weightHeight === 1 && weightWidth === 1 && attributes.dilations[0] === 1 && attributes.dilations[1] === 1 && attributes.strides[0] === 1 && attributes.strides[1] === 1 && attributes.pads[0] === 0 && attributes.pads[1] === 0) { + const batch = outputShape[0]; + let xReshaped, wReshaped, matmulOutputShape; + const matmulInputs = []; + if (isChannelsLast) { + const transposedWeight2 = context.kernelCustomData.wT ?? context.compute( + createTransposeProgramInfo(inputs[1], weightTransposeAttribute), + { inputs: [1], outputs: [attributes.wIsConst ? -2 : -1] } + )[0]; + if (attributes.wIsConst && !context.kernelCustomData.wT) { + context.kernelCustomData.wT = transposedWeight2; + } + if (sameSize) { + const sharedDim = inputHeight * inputWidth * inputChannels; + xReshaped = inputs[0].reshape([1, batch, sharedDim]); + wReshaped = transposedWeight2.reshape([1, sharedDim, outChannels]); + matmulOutputShape = [1, batch, outChannels]; + } else { + xReshaped = inputs[0].reshape([batch, inputHeight * inputWidth, inputChannels]); + wReshaped = transposedWeight2.reshape([1, inputChannels, outChannels]); + matmulOutputShape = [batch, outHeight * outWidth, outChannels]; + } + matmulInputs.push(xReshaped); + matmulInputs.push(wReshaped); + } else { + xReshaped = inputs[0].reshape([batch, inputChannels, inputHeight * inputWidth]); + wReshaped = inputs[1].reshape([1, outChannels, inputChannels]); + matmulOutputShape = [batch, outChannels, outHeight * outWidth]; + matmulInputs.push(wReshaped); + matmulInputs.push(xReshaped); + } + if (hasBias) { + matmulInputs.push(inputs[2]); + } + const N = matmulOutputShape[2]; + const K = matmulInputs[0].dims[matmulInputs[0].dims.length - 1]; + if (N < 8 && K < 8) { + context.compute( + createNaiveMatmulProgramInfo( + matmulInputs, + adjustedAttributes, + outputShape, + matmulOutputShape, + isChannelsLast + ), + { inputs: matmulInputs } + ); + } else { + context.compute( + createMatmulProgramInfo(matmulInputs, adjustedAttributes, outputShape, matmulOutputShape, isChannelsLast), + { inputs: matmulInputs } + ); + } + return; + } + const sequentialAccessByThreads = ( + /* backend.adapterInfo.isIntel() */ + true + ); + const transposedWeight = context.kernelCustomData.wT ?? context.compute( + createTransposeProgramInfo(inputs[1], weightTransposeAttribute), + { inputs: [1], outputs: [attributes.wIsConst ? -2 : -1] } + )[0]; + if (attributes.wIsConst && !context.kernelCustomData.wT) { + context.kernelCustomData.wT = transposedWeight; + } + const convInputs = [inputs[0], transposedWeight]; + if (hasBias) { + convInputs.push(inputs[2]); + } + const dimAOuter = isChannelsLast ? outHeight * outWidth : outChannels; + const dimBOuter = isChannelsLast ? outChannels : outHeight * outWidth; + const dimInner = weightHeight * weightWidth * inputChannels; + context.compute( + createConv2DMatMulProgramInfo( + convInputs, + adjustedAttributes, + outputShape, + dimAOuter, + dimBOuter, + dimInner, + hasBias, + sequentialAccessByThreads + ), + { inputs: convInputs } + ); + }; + conv1d = (context, attributes) => { + const isChannelLast = attributes.format === "NHWC"; + const inputs = [ + context.inputs[0].reshape( + isChannelLast ? ( + // [N, W, C] -> [N, H=1, W, C] + [context.inputs[0].dims[0], 1, context.inputs[0].dims[1], context.inputs[0].dims[2]] + ) : ( + // [N, C, W] -> [N, C, H=1, W] + [context.inputs[0].dims[0], context.inputs[0].dims[1], 1, context.inputs[0].dims[2]] + ) + ), + //[FILTER_OUT_CHANNEL, FILTER_IN_CHANNEL, kW] -> [FILTER_OUT_CHANNEL, FILTER_IN_CHANNEL, kH=1, kW] + context.inputs[1].reshape([context.inputs[1].dims[0], context.inputs[1].dims[1], 1, context.inputs[1].dims[2]]) + ]; + if (context.inputs.length === 3) { + inputs.push(context.inputs[2]); + } + const pads = [0, attributes.pads[0], 0, attributes.pads[1]]; + const strides = [1].concat(attributes.strides); + const dilations = [1].concat(attributes.dilations); + const kernelShape = [1].concat(attributes.kernelShape); + const adjustedAttributes = getAdjustedConvAttributes({ ...attributes, pads, strides, dilations, kernelShape }, inputs); + context.compute(createGroupedConvProgramInfo( + inputs, + adjustedAttributes, + (outputShape) => isChannelLast ? [outputShape[0], outputShape[2], outputShape[3]] : [] + )); + }; + conv = (context, attributes) => { + validateInputs9(context.inputs, attributes); + if (context.inputs[0].dims.length === 3) { + conv1d(context, attributes); + } else { + conv2d(context, context.inputs, attributes); + } + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_backprop_mm_webgpu.ts +var conv2dTransposeCommonSnippet, createConv2DTransposeMatMulProgramInfo; +var init_conv_backprop_mm_webgpu = __esm({ + "web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_backprop_mm_webgpu.ts"() { + "use strict"; + init_wasm_common(); + init_log(); + init_common(); + init_fuse_utils(); + init_activation_util(); + init_conv_util(); + init_matmul_packed_webgpu(); + conv2dTransposeCommonSnippet = (isChannelsLast, addBias = false, attributes, type, innerElementSize = 4) => { + const getWSnippet = (innerElementSize2) => { + switch (innerElementSize2) { + case 1: + return "return w[getIndexFromCoords4D(coord, vec4(uniforms.w_shape))];"; + case 4: + return ` + let coord1 = vec4(coordX, coordY, col + 1, rowInner); + let coord2 = vec4(coordX, coordY, col + 2, rowInner); + let coord3 = vec4(coordX, coordY, col + 3, rowInner); + let v0 = w[getIndexFromCoords4D(coord, vec4(uniforms.w_shape))]; + let v1 = w[getIndexFromCoords4D(coord1, vec4(uniforms.w_shape))]; + let v2 = w[getIndexFromCoords4D(coord2, vec4(uniforms.w_shape))]; + let v3 = w[getIndexFromCoords4D(coord3, vec4(uniforms.w_shape))]; + return ${type}(v0, v1, v2, v3); + `; + default: + throw new Error(`innerElementSize ${innerElementSize2} is not supported.`); + } + }; + const coordASnippet = isChannelsLast ? ` + let coord = vec4(batch, iXR, iXC, xCh); + ` : ` + let coord = vec4(batch, xCh, iXR, iXC); + `; + const coordResSnippet = isChannelsLast ? ` + let coords = vec4( + batch, + row / outWidth, + row % outWidth, + col); + ` : ` + let coords = vec4( + batch, + row, + col / outWidth, + col % outWidth); + `; + const xHeight = isChannelsLast ? "i32(uniforms.x_shape[1])" : "i32(uniforms.x_shape[2])"; + const xWidth = isChannelsLast ? "i32(uniforms.x_shape[2])" : "i32(uniforms.x_shape[3])"; + const row = isChannelsLast ? "row" : "col"; + const col = isChannelsLast ? "col" : "row"; + const readASnippet = ` + let inChannels = ${isChannelsLast ? "i32(uniforms.x_shape[3])" : "i32(uniforms.x_shape[1])"}; + let outWidth = ${isChannelsLast ? "i32(uniforms.result_shape[2])" : "i32(uniforms.result_shape[3])"}; + let outRow = ${row} / outWidth; + let outCol = ${row} % outWidth; + + let WRow = ${col} / (uniforms.filter_dims[1] * inChannels); + let WCol = ${col} / inChannels % uniforms.filter_dims[1]; + let xR = f32(outRow - uniforms.pads[0] + uniforms.dilations[0] * WRow) / f32(uniforms.strides[0]); + let xC = f32(outCol - uniforms.pads[1] + uniforms.dilations[1] * WCol) / f32(uniforms.strides[1]); + if (xR < 0.0 || xR >= f32(${xHeight}) || fract(xR) > 0.0) { + return ${type}(0.0); + } + if (xC < 0.0 || xC >= f32(${xWidth}) || fract(xC) > 0.0) { + return ${type}(0.0); + } + let iXR = i32(xR); + let iXC = i32(xC); + let xCh = ${col} % inChannels; + ${coordASnippet} + return x[getIndexFromCoords4D(coord, vec4(uniforms.x_shape))/${innerElementSize}];`; + const sampleA = isChannelsLast ? ` + let col = colIn * ${innerElementSize}; + if (row < uniforms.dim_a_outer && col < uniforms.dim_inner) { + ${readASnippet} + } + return ${type}(0.0);` : ` + let col = colIn * ${innerElementSize}; + if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) { + ${readASnippet} + } + return ${type}(0.0);`; + const sampleW = ` + let col = colIn * ${innerElementSize}; + let inChannels = ${isChannelsLast ? "i32(uniforms.x_shape[3])" : "i32(uniforms.x_shape[1])"}; + let coordX = uniforms.filter_dims[0] - 1 - row / (uniforms.filter_dims[1] * inChannels); + let coordY = uniforms.filter_dims[1] - 1 - (row / inChannels) % uniforms.filter_dims[1]; + if (${isChannelsLast ? "row < uniforms.dim_inner && col < uniforms.dim_b_outer" : "row < uniforms.dim_inner && col < uniforms.dim_a_outer"} && coordX >= 0 && coordY >= 0) { + let rowInner = row % inChannels; + let coord = vec4(coordX, coordY, col, rowInner); + ${getWSnippet(innerElementSize)} + } + return ${type}(0.0); + `; + const applyActivation = getActivationSnippet(attributes, type); + const userCode = ` + fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${type} { + ${isChannelsLast ? sampleA : sampleW} + } + + fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${type} { + ${isChannelsLast ? sampleW : sampleA} + } + + fn mm_write(batch: i32, row : i32, colIn : i32, valueInput : ${type}) { + let col = colIn * ${innerElementSize}; + if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) { + var value = valueInput; + let outWidth = ${isChannelsLast ? "i32(uniforms.result_shape[2])" : "i32(uniforms.result_shape[3])"}; + ${coordResSnippet} + ${biasSnippet(addBias)} + ${applyActivation} + result[getIndexFromCoords4D(coords, vec4(uniforms.result_shape))/${innerElementSize}] = value; + } + }`; + return userCode; + }; + createConv2DTransposeMatMulProgramInfo = (inputs, attributes, outputShape, dimAOuter, dimBOuter, dimInner, hasBias, sequentialAccessByThreads) => { + const isChannelsLast = attributes.format === "NHWC"; + const inChannels = isChannelsLast ? inputs[0].dims[3] : inputs[0].dims[1]; + const batchSize = outputShape[0]; + const outWidth = isChannelsLast ? outputShape[2] : outputShape[3]; + const outHeight = isChannelsLast ? outputShape[1] : outputShape[2]; + const outChannels = isChannelsLast ? outputShape[3] : outputShape[1]; + const isVec4 = isChannelsLast && (inChannels % 4 === 0 && inChannels % 3) && outChannels % 4 === 0; + const dispatchX = isChannelsLast ? outChannels : outWidth * outHeight; + const dispatchY = isChannelsLast ? outWidth * outHeight : outChannels; + const workGroupSize = [8, 8, 1]; + const elementsPerThread = dimAOuter <= 8 ? [4, 1, 1] : [4, 4, 1]; + const dispatch = [ + Math.ceil(dispatchX / workGroupSize[0] / elementsPerThread[0]), + Math.ceil(dispatchY / workGroupSize[1] / elementsPerThread[1]), + Math.ceil(batchSize / workGroupSize[2] / elementsPerThread[2]) + ]; + LOG_DEBUG("verbose", () => `[conv_backprop_mm_webgpu] dispatch = ${dispatch}`); + const innerElementSize = isVec4 ? 4 : 1; + const tileInner = Math.max(workGroupSize[0] * innerElementSize, workGroupSize[1]); + const components = isVec4 ? 4 : 1; + const filterDims = [attributes.kernelShape[isChannelsLast ? 1 : 2], attributes.kernelShape[isChannelsLast ? 2 : 3]]; + const effectiveFilterDims = [ + filterDims[0] + (attributes.dilations[0] <= 1 ? 0 : (filterDims[0] - 1) * (attributes.dilations[0] - 1)), + filterDims[1] + (attributes.dilations[1] <= 1 ? 0 : (filterDims[1] - 1) * (attributes.dilations[1] - 1)) + ]; + const pads = [ + effectiveFilterDims[0] - 1 - Math.floor((attributes.pads[0] + attributes.pads[2]) / 2), + effectiveFilterDims[1] - 1 - Math.floor((attributes.pads[1] + attributes.pads[3]) / 2) + ]; + const programUniforms = [ + { type: 6 /* int32 */, data: dimAOuter }, + { type: 6 /* int32 */, data: dimBOuter }, + { type: 6 /* int32 */, data: dimInner }, + { type: 6 /* int32 */, data: attributes.strides }, + { type: 6 /* int32 */, data: attributes.dilations }, + { type: 6 /* int32 */, data: filterDims }, + { type: 6 /* int32 */, data: pads } + ]; + appendActivationUniformsData(attributes, programUniforms); + programUniforms.push(...createTensorShapeVariables(inputs[0].dims, inputs[1].dims)); + const inputDependencies = ["rank", "rank"]; + if (hasBias) { + programUniforms.push(...createTensorShapeVariables(inputs[2].dims)); + inputDependencies.push("rank"); + } + programUniforms.push(...createTensorShapeVariables(outputShape)); + const getShaderSource = (shaderHelper) => { + const x = inputVariable("x", inputs[0].dataType, inputs[0].dims.length, components); + const w = inputVariable("w", inputs[1].dataType, inputs[1].dims.length, 1); + const output = outputVariable("result", inputs[0].dataType, outputShape.length, components); + const inputVariables = [x, w]; + let declareFunctions = ""; + if (hasBias) { + const bias = inputVariable("bias", inputs[2].dataType, inputs[2].dims.length, components); + inputVariables.push(bias); + declareFunctions += ` + fn getBiasByOutputCoords(coords : vec4) -> ${bias.type.value} { + return bias[coords.${isChannelsLast ? "w" : "y"}${isVec4 ? "/ 4" : ""}]; + }`; + } + const uniforms = [ + { name: "dim_a_outer", type: "i32" }, + { name: "dim_b_outer", type: "i32" }, + { name: "dim_inner", type: "i32" }, + { name: "strides", type: "i32", length: 2 }, + { name: "dilations", type: "i32", length: 2 }, + { name: "filter_dims", type: "i32", length: filterDims.length }, + { name: "pads", type: "i32", length: pads.length } + ]; + appendActivationUniforms(attributes, uniforms); + const elemType = tensorTypeToWsglStorageType(inputs[0].dataType, 1); + if (elemType !== "f16" && elemType !== "f32") { + throw new Error(`elemType ${elemType} is not supported.`); + } + return ` + ${utilFunctions("uniforms.result_strides")} + ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVariables, output)}; + ${declareFunctions} + ${conv2dTransposeCommonSnippet(isChannelsLast, hasBias, attributes, x.type.value, innerElementSize)} + ${isVec4 ? makeMatMulPackedVec4Source( + elementsPerThread, + workGroupSize, + elemType, + void 0, + !isChannelsLast, + tileInner + ) : makeMatMulPackedSource( + elementsPerThread, + workGroupSize, + elemType, + void 0, + !isChannelsLast, + tileInner, + false, + void 0, + sequentialAccessByThreads + )}`; + }; + return { + name: "Conv2DTransposeMatMul", + shaderCache: { hint: `${attributes.cacheKey};${elementsPerThread};${workGroupSize};${isVec4}`, inputDependencies }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: dispatch[0], y: dispatch[1], z: dispatch[2] }, + programUniforms + }), + getShaderSource + }; + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_backprop_webgpu.ts +var createConvTranspose2DOpProgramShaderSource, createConvTranspose2DProgramInfo; +var init_conv_backprop_webgpu = __esm({ + "web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_backprop_webgpu.ts"() { + "use strict"; + init_wasm_common(); + init_log(); + init_util(); + init_common(); + createConvTranspose2DOpProgramShaderSource = (shaderHelper, inputs, outputShape, hasBias, is1DimensionDispatch, isVec4 = false, dataType, uniforms, isChannelsLast = false) => { + const rowDim = isChannelsLast ? 1 : 2; + const colDim = isChannelsLast ? 2 : 3; + const channelDim = isChannelsLast ? 3 : 1; + const workPerThread = isVec4 ? 2 : 1; + let declareFunctions = ` + fn setOutputAtIndex(flatIndex : u32, value : ${isVec4 ? `vec4<${dataType}>` : dataType}) { + result[flatIndex] = ${isVec4 ? `vec4<${dataType}>` : dataType}(value); + }`; + if (hasBias) { + declareFunctions += ` + fn getBiasByOutputCoords(coords : vec4) -> ${isVec4 ? `vec4<${dataType}>` : dataType} { + return bias[coords.${isChannelsLast ? "w" : "y"}${isVec4 ? "/ 4" : ""}]; + }`; + } + const components = isVec4 ? 4 : 1; + const w = inputVariable("W", inputs[1].dataType, inputs[1].dims.length, components); + const dy = inputVariable("Dy", inputs[0].dataType, inputs[0].dims.length, components); + const inputVariables = [dy, w]; + if (hasBias) { + inputVariables.push(inputVariable("bias", inputs[2].dataType, [outputShape[channelDim]].length, components)); + } + const output = outputVariable("result", inputs[0].dataType, outputShape.length, components); + const codeSnippet4 = `{ + let batch: u32 = ${is1DimensionDispatch ? "global_id.z" : "workgroup_id.z"} / uniforms.result_shape[1]; + let r = ${is1DimensionDispatch ? "global_id.z" : "workgroup_id.z"} % uniforms.result_shape[1]; + let c = ${is1DimensionDispatch ? "global_id.y" : "workgroup_id.y"} * ${workPerThread}; + let d1: u32 = ${is1DimensionDispatch ? "global_id.x" : "workgroup_id.x"} * 4; + + let dyCorner = vec2(i32(r), i32(c)) - vec2(uniforms.pads); + + // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). + // ? = to be determined. : = across all values in that axis. + var dotProd: array, ${workPerThread}>; + for (var i = 0; i < ${workPerThread}; i++) { + dotProd[i] = vec4<${dataType}>(0.0); + } + for (var wR: u32 = 0; wR < uniforms.filter_dims[0]; wR = wR + 1) { + var dyR = (${dataType}(dyCorner.x) + ${dataType}(wR)) / ${dataType}(uniforms.strides.x); + let wRPerm = uniforms.filter_dims[0] - 1 - wR; + if (dyR < 0.0 || dyR >= ${dataType}(uniforms.Dy_shape[1]) || + fract(dyR) > 0.0 || wRPerm < 0) { + continue; + } + let idyR: u32 = u32(dyR); + + for (var wC: u32 = 0; wC < uniforms.filter_dims[1]; wC = wC + 1) { + let dyC = (${dataType}(dyCorner.y) + ${dataType}(wC)) / ${dataType}(uniforms.strides.y); + let dyC2 = (${dataType}(dyCorner.y) + 1.0 + ${dataType}(wC)) / ${dataType}(uniforms.strides.y); + let wCPerm = uniforms.filter_dims[1] - 1 - wC; + if (wCPerm < 0) { + continue; + } + var bDyCVal = true; + var bDyCVal2 = true; + if (dyC < 0.0 || dyC >= ${dataType}(uniforms.Dy_shape[2]) || + fract(dyC) > 0.0) { + bDyCVal = false; + } + if (dyC2 < 0.0 || dyC2 >= ${dataType}(uniforms.Dy_shape[2]) || + fract(dyC2) > 0.0) { + bDyCVal2 = false; + } + + let idyC: u32 = u32(dyC); + let idyC2: u32 = u32(dyC2); + if (bDyCVal && bDyCVal2) { + let d2Length = uniforms.Dy_shape[3]; + for (var d2 :u32 = 0; d2 < d2Length; d2 = d2 + 4) { + let wValue0 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1", "d2")}; + let wValue1 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 1", "d2")}; + let wValue2 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 2", "d2")}; + let wValue3 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 3", "d2")}; + + var xValue = ${dy.get("batch", "idyR", "idyC", "d2")}; + let tmpval = vec4<${dataType}>(dot(xValue, wValue0), + dot(xValue, wValue1), + dot(xValue, wValue2), + dot(xValue, wValue3)); + dotProd[0] = dotProd[0] + tmpval; + + xValue = ${dy.get("batch", "idyR", "idyC2", "d2")}; + + dotProd[1] = dotProd[1] + vec4<${dataType}>(dot(xValue, wValue0), + dot(xValue, wValue1), + dot(xValue, wValue2), + dot(xValue, wValue3)); + } + } else if (bDyCVal) { + let d2Length = uniforms.Dy_shape[${channelDim}]; + for (var d2: u32 = 0; d2 < d2Length; d2 = d2 + 4) { + let wValue0 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1", "d2")}; + let wValue1 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 1", "d2")}; + let wValue2 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 2", "d2")}; + let wValue3 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 3", "d2")}; + + var xValue = ${dy.get("batch", "idyR", "idyC", "d2")}; + let tmpval = vec4<${dataType}>(dot(xValue, wValue0), + dot(xValue, wValue1), + dot(xValue, wValue2), + dot(xValue, wValue3)); + dotProd[0] = dotProd[0] + tmpval; + } + } else if (bDyCVal2) { + let d2Length = uniforms.Dy_shape[3]; + for (var d2: u32 = 0; d2 < d2Length; d2 = d2 + 4) { + let wValue0 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1", "d2")}; + let wValue1 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 1", "d2")}; + let wValue2 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 2", "d2")}; + let wValue3 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 3", "d2")}; + + var xValue = ${dy.get("batch", "idyR", "idyC2", "d2")}; + let tmpval = vec4<${dataType}>(dot(xValue, wValue0), + dot(xValue, wValue1), + dot(xValue, wValue2), + dot(xValue, wValue3)); + dotProd[1] = dotProd[1] + tmpval; + } + } + } + } + + for (var i: u32 = 0; i < ${workPerThread}; i = i + 1) { + let value = dotProd[i] + ${hasBias ? "bias[c+i]" : `vec4<${dataType}>(0.0)`}; + ${output.set("batch", "r", "c + i", "d1", "value")}; + } + }`; + const codeSnippet = ` + let outputIndices = ${output.offsetToIndices("global_idx")}; + let batch = ${output.indicesGet("outputIndices", 0)}; + let d1 = ${output.indicesGet("outputIndices", channelDim)}; + let r = ${output.indicesGet("outputIndices", rowDim)}; + let c = ${output.indicesGet("outputIndices", colDim)}; + let dyCorner = vec2(i32(r), i32(c)) - uniforms.pads; + let dyRCorner = dyCorner.x; + let dyCCorner = dyCorner.y; + let groupId = d1 / uniforms.output_channels_per_group; + let wOutChannel = d1 - groupId * uniforms.output_channels_per_group; + // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). + // ? = to be determined. : = across all values in that axis. + var dotProd = ${dataType}(0.0); + for (var wR: u32 = 0; wR < uniforms.effective_filter_dims.x; wR = wR + 1) { + if (wR % uniforms.dilations.x != 0) { + continue; + } + let dyR = (${dataType}(dyRCorner) + ${dataType}(wR)) / ${dataType}(uniforms.strides[0]); + let wRPerm = uniforms.filter_dims.x - 1 - wR / uniforms.dilations.x; + if (dyR < 0.0 || dyR >= ${dataType}(uniforms.Dy_shape[${rowDim}]) || fract(dyR) > 0.0 || + wRPerm < 0) { + continue; + } + let idyR: u32 = u32(dyR); + + for (var wC: u32 = 0; wC < uniforms.effective_filter_dims.y; wC = wC + 1) { + if (wC % uniforms.dilations.y != 0) { + continue; + } + let dyC = (${dataType}(dyCCorner) + ${dataType}(wC)) / ${dataType}(uniforms.strides.y); + let wCPerm = uniforms.filter_dims.y - 1 - wC / uniforms.dilations.y; + if (dyC < 0.0 || dyC >= ${dataType}(uniforms.Dy_shape[${colDim}]) || + fract(dyC) > 0.0 || wCPerm < 0) { + continue; + } + let idyC: u32 = u32(dyC); + var inputChannel = groupId * uniforms.input_channels_per_group; + for (var d2: u32 = 0; d2 < uniforms.input_channels_per_group; d2 = d2 + 1) { + let xValue = ${isChannelsLast ? dy.get("batch", "idyR", "idyC", "inputChannel") : dy.get("batch", "inputChannel", "idyR", "idyC")}; + let wValue = ${w.get("inputChannel", "wOutChannel", "u32(wRPerm)", "u32(wCPerm)")}; + dotProd = dotProd + xValue * wValue; + inputChannel = inputChannel + 1; + } + } + } + let value = dotProd + ${hasBias ? "bias[d1]" : `${dataType}(0.0)`}; + ${output.setByOffset("global_idx", "value")}; + `; + return ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVariables, output)} + ${declareFunctions} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}; + ${isVec4 ? codeSnippet4 : codeSnippet}}`; + }; + createConvTranspose2DProgramInfo = (inputs, attributes, squeezeOutputShapeFunction) => { + const hasBias = inputs.length > 2; + const outputShape = attributes.outputShape; + const outputSize = ShapeUtil.size(outputShape); + const dispatch = [ + Math.ceil(outputSize / 64), + 1, + 1 + ]; + LOG_DEBUG("verbose", () => `[conv2d_backprop_webgpu] dispatch = ${dispatch}`); + const isChannelsLast = attributes.format === "NHWC"; + const inputDependencies = ["rank", "rank"]; + const strides = [attributes.strides[0], attributes.strides[1]]; + const filterDims = [attributes.kernelShape[isChannelsLast ? 1 : 2], attributes.kernelShape[isChannelsLast ? 2 : 3]]; + const dilations = [attributes.dilations[0], attributes.dilations[1]]; + const effectiveFilterDims = [ + filterDims[0] + (attributes.dilations[0] <= 1 ? 0 : (attributes.kernelShape[isChannelsLast ? 1 : 2] - 1) * (attributes.dilations[0] - 1)), + filterDims[1] + (attributes.dilations[1] <= 1 ? 0 : (attributes.kernelShape[isChannelsLast ? 2 : 3] - 1) * (attributes.dilations[1] - 1)) + ]; + const pads = [ + effectiveFilterDims[0] - 1 - Math.floor((attributes.pads[0] + attributes.pads[2]) / 2), + effectiveFilterDims[1] - 1 - Math.floor(attributes.pads[1] + attributes.pads[3]) / 2 + ]; + const isVec4 = false; + const group = attributes.group; + const wShape = inputs[1].dims; + const inputChannelsPerGroup = wShape[0] / group; + const outputChannelsPerGroup = wShape[1]; + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 12 /* uint32 */, data: strides }, + { type: 12 /* uint32 */, data: filterDims }, + { type: 12 /* uint32 */, data: dilations }, + { type: 12 /* uint32 */, data: effectiveFilterDims }, + { type: 6 /* int32 */, data: pads }, + { type: 12 /* uint32 */, data: inputChannelsPerGroup }, + { type: 12 /* uint32 */, data: outputChannelsPerGroup }, + ...createTensorShapeVariables(inputs[0].dims, inputs[1].dims) + ]; + if (hasBias) { + programUniforms.push(...createTensorShapeVariables(inputs[2].dims)); + inputDependencies.push("rank"); + } + programUniforms.push(...createTensorShapeVariables(outputShape)); + const is1DimensionDispatch = dispatch[1] === 1 && dispatch[2] === 1; + const getShaderSource = (shaderHelper) => { + const uniforms = [ + { name: "output_size", type: "u32" }, + { name: "strides", type: "u32", length: strides.length }, + { name: "filter_dims", type: "u32", length: filterDims.length }, + { name: "dilations", type: "u32", length: filterDims.length }, + { name: "effective_filter_dims", type: "u32", length: effectiveFilterDims.length }, + { name: "pads", type: "i32", length: pads.length }, + { name: "input_channels_per_group", type: "u32" }, + { name: "output_channels_per_group", type: "u32" } + ]; + const dataType = tensorTypeToWsglStorageType(inputs[0].dataType); + return `${createConvTranspose2DOpProgramShaderSource( + shaderHelper, + inputs, + outputShape, + hasBias, + is1DimensionDispatch, + isVec4, + dataType, + uniforms, + isChannelsLast + )}`; + }; + return { + name: "ConvTranspose2D", + shaderCache: { hint: `${attributes.cacheKey};`, inputDependencies }, + getRunData: () => ({ + dispatchGroup: { x: dispatch[0], y: dispatch[1], z: dispatch[2] }, + outputs: [{ + dims: squeezeOutputShapeFunction ? squeezeOutputShapeFunction(outputShape) : outputShape, + dataType: inputs[0].dataType + }], + programUniforms + }), + getShaderSource + }; + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/conv-transpose.ts +var computeTotalPad, distributePadding, calculateOutputShapeAndPads, getAdjustedConvTransposeAttributes, parseConvTransposeAttributes, validateInputs10, weightTransposePerm, convTranspose2d, convTranspose1d, convTranspose; +var init_conv_transpose = __esm({ + "web/lib/wasm/jsep/webgpu/ops/conv-transpose.ts"() { + "use strict"; + init_conv_backprop_mm_webgpu(); + init_conv_backprop_webgpu(); + init_fuse_utils(); + init_transpose(); + computeTotalPad = (inDim, stride, adj, kernel, dilation, outSize) => (inDim - 1) * stride + adj + (kernel - 1) * dilation + 1 - outSize; + distributePadding = (totalPad, autoPad, pads, head, tail) => { + const smallPad = Math.floor(totalPad / 2); + if (autoPad === "SAME_UPPER") { + pads[head] = smallPad; + pads[tail] = totalPad - smallPad; + } else if (autoPad === "SAME_LOWER") { + pads[head] = totalPad - smallPad; + pads[tail] = smallPad; + } + }; + calculateOutputShapeAndPads = (inputShape, kernelShape, dilations, autoPad, group, pads, strides, isChannelLast, outputPadding, outputShape) => { + const spatialRank = inputShape.length - 2; + const updateOutputShape = outputShape.length === 0; + if (outputPadding.length === 0) { + for (let i = 0; i < spatialRank; ++i) { + outputPadding.push(0); + } + } + const batchSize = inputShape[0]; + const outChannels = kernelShape[isChannelLast ? 3 : 1] * group; + for (let i = 0, j = inputShape.length - spatialRank - (isChannelLast ? 1 : 0); i < spatialRank; ++i, ++j) { + const inSize = inputShape[j]; + const outSize = updateOutputShape ? inSize * strides[i] : outputShape[i]; + const totalPad = computeTotalPad(inSize, strides[i], pads[i], kernelShape[j], dilations[i], outSize); + distributePadding(totalPad, autoPad, pads, i, i + spatialRank); + if (updateOutputShape) { + outputShape.push( + strides[i] * (inSize - 1) + outputPadding[i] + (kernelShape[j] - 1) * dilations[i] + 1 - pads[i] - pads[i + spatialRank] + ); + } + } + outputShape.splice(0, 0, batchSize); + outputShape.splice(isChannelLast ? 3 : 1, 0, outChannels); + }; + getAdjustedConvTransposeAttributes = (attributes, inputs) => { + const kernelShape = attributes.kernelShape.slice(); + if (attributes.kernelShape.length === 0 || attributes.kernelShape.reduce((a, b) => a * b, 1) === 0) { + kernelShape.length = 0; + for (let i = 2; i < inputs[1].dims.length; ++i) { + kernelShape.push(inputs[1].dims[i]); + } + } + const isChannelsLast = attributes.format === "NHWC"; + kernelShape.splice(0, 0, inputs[1].dims[0]); + kernelShape.splice(isChannelsLast ? 3 : 1, 0, inputs[1].dims[1]); + const pads = attributes.pads.slice(); + const outputShape = attributes.outputShape.slice(); + const outputPadding = attributes.outputPadding.slice(); + const inputShape = inputs[0].dims; + let dilations = attributes.dilations.slice(); + if (dilations.reduce((a, b) => a + b, 0) === 0) { + const spatialRank = inputs[0].dims.length - 2; + dilations = new Array(spatialRank).fill(1); + } + let strides = attributes.strides.slice(); + if (strides.reduce((a, b) => a + b, 0) === 0) { + const spatialRank = inputs[0].dims.length - 2; + strides = new Array(spatialRank).fill(1); + } + calculateOutputShapeAndPads( + inputShape, + kernelShape, + dilations, + attributes.autoPad, + attributes.group, + pads, + strides, + isChannelsLast, + outputPadding, + outputShape + ); + const newAttributes = Object.assign({}, attributes); + Object.assign(newAttributes, { kernelShape, pads, outputPadding, outputShape, dilations, strides }); + return newAttributes; + }; + parseConvTransposeAttributes = (attributes) => { + const activationAttributes = parseInternalActivationAttributes(attributes); + const format = attributes.format; + const autoPad = [ + "NOTSET", + "VALID", + "SAME_UPPER", + "SAME_LOWER" + ][typeof attributes.autoPad == "undefined" ? 0 : attributes.autoPad]; + const dilations = attributes.dilations; + const group = attributes.group; + const kernelShape = attributes.kernelShape; + const pads = attributes.pads; + const strides = attributes.strides; + const wIsConst = attributes.wIsConst(); + const outputPadding = attributes.outputPadding; + const outputShape = attributes.outputShape; + return { + autoPad, + format, + dilations, + group, + kernelShape, + outputPadding, + outputShape, + pads, + strides, + wIsConst, + ...activationAttributes, + cacheKey: `${attributes.format};${activationAttributes.activation};` + }; + }; + validateInputs10 = (inputs, attributes) => { + if (!inputs || inputs.length !== 2 && inputs.length !== 3) { + throw new Error("Conv requires 2 or 3 inputs"); + } + if (inputs[0].dims.length !== 4 && inputs[0].dims.length !== 3) { + throw new Error("currently only support 2-dimensional conv"); + } + if (inputs[0].dims.length !== inputs[1].dims.length) { + throw new Error("filter does not have same dimension as input"); + } + const dataChannel = inputs[0].dims[attributes.format === "NHWC" ? inputs[0].dims.length - 1 : 1]; + const filterInChannel = inputs[1].dims[0]; + if (dataChannel !== filterInChannel) { + throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL"); + } + const featureMaps = inputs[1].dims[1] * attributes.group; + if (inputs.length === 3 && (inputs[2].dims.length !== 1 || inputs[2].dims[0] !== featureMaps)) { + throw new Error("invalid bias"); + } + const spatialRank = inputs[0].dims.length - 2; + const dilationsSet = attributes.dilations.reduce((a, b) => a + b, 0) > 0; + if (dilationsSet && attributes.dilations.length !== spatialRank) { + throw new Error(`dilations should be ${spatialRank}D`); + } + const stridesSet = attributes.strides.reduce((a, b) => a + b, 0) > 0; + if (stridesSet && attributes.strides.length !== spatialRank) { + throw new Error(`strides should be ${spatialRank}D`); + } + const padsSet = attributes.pads.reduce((a, b) => a + b, 0) > 0; + if (padsSet && attributes.pads.length !== spatialRank * 2) { + throw new Error(`pads should be ${spatialRank * 2}D`); + } + if (attributes.outputPadding.length !== spatialRank && attributes.outputPadding.length !== 0) { + throw new Error(`output_padding should be ${spatialRank}D`); + } + const kernelShapeSet = attributes.kernelShape.reduce((a, b) => a + b, 0) > 0; + if (kernelShapeSet && attributes.kernelShape.length !== 0 && attributes.kernelShape.length !== inputs[1].dims.length - 2) { + throw new Error("invalid kernel shape"); + } + if (attributes.outputShape.length !== 0 && attributes.outputShape.length !== inputs[0].dims.length - 2) { + throw new Error("invalid output shape"); + } + }; + weightTransposePerm = [2, 3, 1, 0]; + convTranspose2d = (context, inputs, attributes) => { + const adjustedAttributes = getAdjustedConvTransposeAttributes(attributes, inputs); + const isChannelsLast = attributes.format === "NHWC"; + const outputShape = adjustedAttributes.outputShape; + const outChannels = outputShape[isChannelsLast ? 3 : 1]; + const inputChannels = inputs[0].dims[isChannelsLast ? 3 : 1]; + if (adjustedAttributes.group !== 1 || outChannels === 1 && inputChannels === 1) { + context.compute(createConvTranspose2DProgramInfo(inputs, adjustedAttributes)); + return; + } + const outHeight = outputShape[isChannelsLast ? 1 : 2]; + const outWidth = outputShape[isChannelsLast ? 2 : 3]; + const weightHeight = inputs[1].dims[2]; + const weightWidth = inputs[1].dims[3]; + const dimAOuter = isChannelsLast ? outHeight * outWidth : outChannels; + const dimBOuter = isChannelsLast ? outChannels : outHeight * outWidth; + const dimInner = weightHeight * weightWidth * inputChannels; + const sequentialAccessByThreads = ( + /* backend.adapterInfo.isIntel() */ + true + ); + const transposedWeight = context.kernelCustomData.wT ?? context.compute( + createTransposeProgramInfo(inputs[1], weightTransposePerm), + { inputs: [1], outputs: [attributes.wIsConst ? -2 : -1] } + )[0]; + if (attributes.wIsConst && !context.kernelCustomData.wT) { + context.kernelCustomData.wT = transposedWeight; + } + const convTransposeInputs = [inputs[0], transposedWeight]; + const hasBias = inputs.length === 3; + if (hasBias) { + if (!isChannelsLast && inputs[2].dims.length === 1) { + convTransposeInputs.push(inputs[2].reshape([inputs[2].dims[0], 1, 1])); + } else { + convTransposeInputs.push(inputs[2]); + } + } + context.compute( + createConv2DTransposeMatMulProgramInfo( + convTransposeInputs, + adjustedAttributes, + outputShape, + dimAOuter, + dimBOuter, + dimInner, + hasBias, + sequentialAccessByThreads + ), + { inputs: convTransposeInputs } + ); + }; + convTranspose1d = (context, attributes) => { + const isChannelLast = attributes.format === "NHWC"; + const inputs = [ + context.inputs[0].reshape( + isChannelLast ? ( + // [N, W, C] -> [N, H=1, W, C] + [context.inputs[0].dims[0], 1, context.inputs[0].dims[1], context.inputs[0].dims[2]] + ) : ( + // [N, C, W] -> [N, C, H=1, W] + [context.inputs[0].dims[0], context.inputs[0].dims[1], 1, context.inputs[0].dims[2]] + ) + ), + //[FILTER_OUT_CHANNEL, FILTER_IN_CHANNEL, kW] -> [FILTER_OUT_CHANNEL, FILTER_IN_CHANNEL, kH=1, kW] + context.inputs[1].reshape([context.inputs[1].dims[0], context.inputs[1].dims[1], 1, context.inputs[1].dims[2]]) + ]; + if (context.inputs.length === 3) { + inputs.push(context.inputs[2]); + } + let kernelShape = attributes.kernelShape; + if (kernelShape.length === 0 || kernelShape[0] === 0) { + kernelShape = [context.inputs[1].dims[2]]; + } + let dilations = attributes.dilations; + if (dilations.length === 0 || dilations[0] === 0) { + dilations = [1]; + } + let strides = attributes.strides; + if (strides.length === 0 || strides[0] === 0) { + strides = [1]; + } + let pads = attributes.pads; + if (pads.length === 0) { + pads = [0, 0]; + } + pads = [0, pads[0], 0, pads[1]]; + strides = [1].concat(strides); + dilations = [1].concat(dilations); + kernelShape = [1].concat(kernelShape); + const adjustedAttributes = getAdjustedConvTransposeAttributes({ ...attributes, pads, strides, dilations, kernelShape }, inputs); + context.compute(createConvTranspose2DProgramInfo( + inputs, + adjustedAttributes, + (outputShape) => isChannelLast ? [outputShape[0], outputShape[2], outputShape[3]] : [outputShape[0], outputShape[1], outputShape[3]] + )); + }; + convTranspose = (context, attributes) => { + validateInputs10(context.inputs, attributes); + if (context.inputs[0].dims.length === 3) { + convTranspose1d(context, attributes); + } else { + convTranspose2d(context, context.inputs, attributes); + } + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/cumsum.ts +var createCumsumProgramInfo, cumsum, parseCumSumAttributes; +var init_cumsum = __esm({ + "web/lib/wasm/jsep/webgpu/ops/cumsum.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + createCumsumProgramInfo = (inputType, inputShape, axisInput, attributes) => { + const outputSize = ShapeUtil.size(inputShape); + const rank = inputShape.length; + const input = inputVariable("input", inputType, rank); + const output = outputVariable("output", inputType, rank); + const axisValue = axisInput.dataType === 6 /* int32 */ ? axisInput.getInt32Array()[0] : Number(axisInput.getBigInt64Array()[0]); + const axis = ShapeUtil.normalizeAxis(axisValue, rank); + const getShaderSource = (shaderHelper) => { + const index = ` i32(${input.indicesGet("inputIndices", "uniforms.axis")}) `; + const max = getElementAt("uniforms.input_shape", "uniforms.axis", rank); + const lowerLimit = attributes.reverse ? index + (attributes.exclusive ? " + 1" : "") : "0"; + const upperLimit = attributes.reverse ? max : index + (attributes.exclusive ? "" : " + 1"); + return ` + ${shaderHelper.registerUniform("outputSize", "u32").registerUniform("axis", "u32").declareVariables(input, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + var inputIndices = ${output.offsetToIndices("global_idx")}; + var sum = ${output.type.value}(0); + let first : i32 = ${lowerLimit}; + let last : i32 = ${upperLimit}; + for (var i : i32 = first; i < last; i++) { + ${input.indicesSet("inputIndices", "uniforms.axis", "u32(i)")}; + sum = sum + ${input.getByIndices("inputIndices")}; + } + ${output.setByOffset("global_idx", "sum")}; + }`; + }; + return { + name: "CumSum", + shaderCache: { hint: attributes.cacheKey, inputDependencies: ["rank"] }, + getRunData: () => ({ + outputs: [{ dims: inputShape, dataType: inputType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms: [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 12 /* uint32 */, data: axis }, + ...createTensorShapeVariables(inputShape, inputShape) + ] + }), + getShaderSource + }; + }; + cumsum = (context, attributes) => { + const inputShape = context.inputs[0].dims; + const inputType = context.inputs[0].dataType; + const axis = context.inputs[1]; + context.compute(createCumsumProgramInfo(inputType, inputShape, axis, attributes), { inputs: [0] }); + }; + parseCumSumAttributes = (attributes) => { + const exclusive = attributes.exclusive === 1; + const reverse = attributes.reverse === 1; + return createAttributeWithCacheKey({ exclusive, reverse }); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/depth-to-space.ts +var validateInputs11, permFunctionBody2, createDepthToSpaceProgramInfo, depthToSpace, parseDepthToSpaceAttributes; +var init_depth_to_space = __esm({ + "web/lib/wasm/jsep/webgpu/ops/depth-to-space.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs11 = (inputs) => { + if (!inputs || inputs.length !== 1) { + throw new Error("DepthToSpace requires 1 input."); + } + if (inputs[0].dims.length !== 4) { + throw new Error("DepthToSpace requires 4D input."); + } + }; + permFunctionBody2 = (perm, rank, input, output) => { + const reverseFunc = []; + reverseFunc.push(`fn perm(i: ${output.type.indices}) -> ${input.type.indices} { + var a: ${input.type.indices};`); + for (let i = 0; i < rank; ++i) { + reverseFunc.push(input.indicesSet("a", perm[i], `i[${i}]`)); + } + reverseFunc.push("return a;}"); + return reverseFunc.join("\n"); + }; + createDepthToSpaceProgramInfo = (inputTensor, attributes) => { + let n, h, w, c; + let shape; + let perm; + const isChannelLast = attributes.format === "NHWC"; + const blocksize = attributes.blocksize; + const isDCRmode = attributes.mode === "DCR"; + if (isChannelLast) { + [n, h, w, c] = inputTensor.dims; + shape = isDCRmode ? [n, h, w, blocksize, blocksize, c / blocksize ** 2] : [n, h, w, c / blocksize ** 2, blocksize, blocksize]; + perm = isDCRmode ? [0, 1, 3, 2, 4, 5] : [0, 1, 4, 2, 5, 3]; + } else { + [n, h, w, c] = [inputTensor.dims[0], inputTensor.dims[2], inputTensor.dims[3], inputTensor.dims[1]]; + shape = isDCRmode ? [n, blocksize, blocksize, c / blocksize ** 2, h, w] : [n, c / blocksize ** 2, blocksize, blocksize, h, w]; + perm = isDCRmode ? [0, 3, 4, 1, 5, 2] : [0, 1, 4, 2, 5, 3]; + } + const reshapedInputTensor = inputTensor.reshape(shape); + const reshapedInputRank = reshapedInputTensor.dims.length; + const inputDataType = inputTensor.dataType; + const reshapedInput = inputVariable("a", inputDataType, reshapedInputRank); + const permedOutput = outputVariable("output", inputDataType, reshapedInputRank); + const getShaderSource = (shaderHelper) => ` + ${shaderHelper.registerUniform("output_size", "u32").declareVariables(reshapedInput, permedOutput)} + + ${permFunctionBody2(perm, reshapedInputRank, reshapedInput, permedOutput)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + + let indices = ${permedOutput.offsetToIndices("global_idx")}; + let aIndices = perm(indices); + + ${permedOutput.setByOffset("global_idx", reshapedInput.getByIndices("aIndices"))} + }`; + return { + name: "DepthToSpace", + shaderCache: { hint: `${inputTensor.dims};${attributes.blocksize};${attributes.mode}`, inputDependencies: ["rank"] }, + getRunData: (inputs) => { + const outputShape = isChannelLast ? [n, h * blocksize, w * blocksize, c / blocksize ** 2] : [n, c / blocksize ** 2, h * blocksize, w * blocksize]; + const outputSize = ShapeUtil.size(outputShape); + const shapeBeforePerm = reshapedInputTensor.dims; + const shapeAfterPerm = ShapeUtil.sortBasedOnPerm(shapeBeforePerm, perm); + return { + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms: [{ type: 12 /* uint32 */, data: outputSize }, ...createTensorShapeVariables(shapeBeforePerm, shapeAfterPerm)] + }; + }, + getShaderSource + }; + }; + depthToSpace = (context, attributes) => { + validateInputs11(context.inputs); + context.compute(createDepthToSpaceProgramInfo(context.inputs[0], attributes)); + }; + parseDepthToSpaceAttributes = (attributes) => createAttributeWithCacheKey({ + blocksize: attributes.blocksize, + mode: attributes.mode, + format: attributes.format + }); + } +}); + +// web/lib/wasm/jsep/webgpu/ops/einsum.ts +var symbolPattern, termPattern, termPatternOnly, lhsPattern, lhsPatternOnly, EinsumTerm, EinsumEquation, appendMax, createEinsumProgramInfo, einsum, parseEinsumAttributes; +var init_einsum = __esm({ + "web/lib/wasm/jsep/webgpu/ops/einsum.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + symbolPattern = "[a-zA-Z]|\\.\\.\\."; + termPattern = "(" + symbolPattern + ")+"; + termPatternOnly = "^" + termPattern + "$"; + lhsPattern = "(" + termPattern + ",)*" + termPattern; + lhsPatternOnly = "^" + lhsPattern + "$"; + EinsumTerm = class { + constructor(inputIndex = -1) { + this.symbolToIndices = /* @__PURE__ */ new Map(); + this.inputIndex = inputIndex; + } + // Add a symbol to the term + addSymbol(symbol, index) { + let value = this.symbolToIndices.get(symbol); + if (value === void 0) { + value = [index]; + } else { + value.push(index); + } + this.symbolToIndices.set(symbol, value); + } + // -1 for output and 0, 1, 2, ... for inputs + }; + EinsumEquation = class { + constructor(inputs, equation) { + this.equation = equation; + this.hasEllipsis = false; + this.symbolToInfo = /* @__PURE__ */ new Map(); + this.lhs = new Array(); + this.outputDims = []; + let [lhs, rhs] = equation.includes("->") ? equation.split("->", 2) : [equation, ""]; + if (!lhs.match(RegExp(lhsPatternOnly))) { + throw new Error("Invalid LHS term"); + } + const inputTerms = lhs.split(","); + inputTerms.forEach((inputTerm, index) => { + const dims = inputs[index].dims.slice(); + if (!inputTerm.match(RegExp(termPatternOnly))) { + throw new Error("Invalid LHS term"); + } + const einsumTerm = this.processTerm(inputTerm, true, dims, index); + this.lhs.push(einsumTerm); + }); + if (rhs === "") { + rhs += [...this.symbolToInfo.entries()].filter(([sym, info]) => info.count === 1 || sym === "...").map(([sym]) => sym).join(""); + } else { + if (!rhs.match(RegExp(termPattern))) { + throw new Error("Invalid RHS"); + } + } + const rhsSymbols = rhs.match(RegExp(symbolPattern, "g")); + rhsSymbols?.forEach((symbol) => { + if (symbol === "...") { + this.outputDims = this.outputDims.concat(this.ellipsisDims); + } else { + const info = this.symbolToInfo.get(symbol); + if (info === void 0) { + throw new Error("Invalid RHS symbol"); + } + this.outputDims.push(info.dimValue); + } + }); + this.rhs = this.processTerm(rhs, false, this.outputDims); + } + // End of EinsumEqation constructor + // Add a symbol to the equation + addSymbol(symbol, dimValue, inputIndex) { + let info = this.symbolToInfo.get(symbol); + if (info !== void 0) { + if (info.dimValue !== dimValue && info.count !== 1) { + throw new Error("Dimension mismatch"); + } else { + info.count++; + info.inputIndices.push(inputIndex); + } + } else { + info = { count: 1, dimValue, inputIndices: [inputIndex] }; + } + this.symbolToInfo.set(symbol, info); + } + // Process one input/output term + processTerm(term, isInput, dims, index = -1) { + const rank = dims.length; + let ellipsis = false; + let ellipsisDims = []; + let nextDim = 0; + if (!term.match(RegExp(termPatternOnly)) && (!isInput && term !== "")) { + throw new Error("Invalid LHS term"); + } + const indexSymbols = term.match(RegExp(symbolPattern, "g")); + const einsumTerm = new EinsumTerm(index); + indexSymbols?.forEach((symbol, i) => { + if (symbol === "...") { + if (ellipsis) { + throw new Error("Only one ellipsis is allowed per input term"); + } + ellipsis = true; + const ellipsisDimLength = rank - indexSymbols.length + 1; + if (ellipsisDimLength < 0) { + throw new Error("Ellipsis out of bounds"); + } + ellipsisDims = dims.slice(nextDim, nextDim + ellipsisDimLength); + if (this.hasEllipsis) { + if (this.ellipsisDims.length !== ellipsisDims.length || this.ellipsisDims.toString() !== ellipsisDims.toString()) { + throw new Error("Ellipsis dimensions mismatch"); + } + } else if (isInput) { + this.hasEllipsis = true; + this.ellipsisDims = ellipsisDims; + } else { + throw new Error("Ellipsis must be specified in the LHS"); + } + for (let j = 0; j < ellipsisDims.length; j++) { + const symbol2 = String.fromCharCode("0".charCodeAt(0) + j); + einsumTerm.addSymbol(symbol2, i + j); + this.addSymbol(symbol2, dims[nextDim++], index); + } + } else { + einsumTerm.addSymbol(symbol, i + (this.hasEllipsis ? this.ellipsisDims.length - 1 : 0)); + this.addSymbol(symbol, dims[nextDim++], index); + } + }); + return einsumTerm; + } + // Output dimensions of the equation + }; + appendMax = (name) => name + "_max"; + createEinsumProgramInfo = (inputShapes, dataType, einsumEquation, outputShape) => { + const ranks = inputShapes.map((dims) => dims.length); + const inputVars = ranks.map((rank, index) => inputVariable(`input${index}`, dataType, rank)); + const outputSize = ShapeUtil.size(outputShape); + const output = outputVariable("output", dataType, outputShape.length); + const uniformsSymbols = [...einsumEquation.symbolToInfo.keys()].filter((symbol) => !einsumEquation.rhs.symbolToIndices.has(symbol)); + const getShaderSource = (shaderHelper) => { + const idxCopy = []; + const initProd = "var prod = 1.0;"; + const initSum = "var sum = 0.0;"; + const updateSum = "sum += prod;"; + const reduceOpsSetIndices = []; + const reduceOpsLoopHeaders = []; + const reduceOpsLoopFooters = []; + const reduceOpCompute = []; + const isReduceOpsWithoutLoop = einsumEquation.symbolToInfo.size === einsumEquation.rhs.symbolToIndices.size; + einsumEquation.symbolToInfo.forEach((info, symbol) => { + if (einsumEquation.rhs.symbolToIndices.has(symbol)) { + const outputIndex = einsumEquation.rhs.symbolToIndices.get(symbol)?.[0]; + if (outputIndex !== void 0) { + einsumEquation.lhs.forEach((term, i) => { + if (info.inputIndices.includes(i)) { + const indices = term.symbolToIndices.get(symbol); + if (indices === void 0) { + throw new Error("Invalid symbol error"); + } + indices.forEach((index) => { + idxCopy.push(`${inputVars[i].indicesSet( + `input${i}Indices`, + index, + output.indicesGet("outputIndices", outputIndex) + )}`); + }); + } + }); + } + } else { + einsumEquation.lhs.forEach((term, i) => { + if (info.inputIndices.includes(i)) { + const indices = term.symbolToIndices.get(symbol); + if (indices === void 0) { + throw new Error("Invalid symbol error"); + } + indices.forEach((index) => { + reduceOpsSetIndices.push(`${inputVars[i].indicesSet(`input${i}Indices`, index, `${symbol}`)}`); + }); + reduceOpCompute.push(`prod *= ${inputVars[i].getByIndices(`input${i}Indices`)};`); + } + }); + reduceOpsLoopHeaders.push( + `for(var ${symbol}: u32 = 0; ${symbol} < uniforms.${appendMax(symbol)}; ${symbol}++) {` + ); + reduceOpsLoopFooters.push("}"); + } + }); + const reduceOps2 = isReduceOpsWithoutLoop ? [ + ...idxCopy, + `let sum = ${inputVars.map((inputVar, i) => inputVar.getByIndices(`input${i}Indices`)).join(" * ")};` + ] : [ + ...idxCopy, + initSum, + ...reduceOpsLoopHeaders, + ...reduceOpsSetIndices, + initProd, + ...reduceOpCompute, + updateSum, + ...reduceOpsLoopFooters + ]; + return ` + ${shaderHelper.registerUniforms(uniformsSymbols.map((symbol) => ({ name: `${appendMax(symbol)}`, type: "u32" }))).registerUniform("outputSize", "u32").declareVariables(...inputVars, output)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + var outputIndices = ${output.offsetToIndices("global_idx")}; + ${inputVars.map((_var, i) => `var input${i}Indices: ${inputVars[i].type.indices};`).join("\n")} + ${reduceOps2.join("\n")}; + ${output.setByOffset("global_idx", "sum")}; + }`; + }; + return { + name: "Einsum", + shaderCache: { hint: einsumEquation.equation, inputDependencies: inputShapes.map(() => "rank") }, + getRunData: () => { + const programUniformsInit = uniformsSymbols.filter((symbol) => einsumEquation.symbolToInfo.has(symbol)).map( + (symbol) => ({ type: 12 /* uint32 */, data: einsumEquation.symbolToInfo.get(symbol)?.dimValue || 0 }) + ); + programUniformsInit.push({ type: 12 /* uint32 */, data: outputSize }); + const programUniforms = inputShapes.map((dims, _) => [...createTensorShapeVariables(dims)]).reduce((acc, inputProgramUniforms) => acc.concat(inputProgramUniforms), programUniformsInit); + programUniforms.push(...createTensorShapeVariables(outputShape)); + return { + outputs: [{ dims: outputShape, dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }; + }, + getShaderSource + }; + }; + einsum = (context, attributes) => { + const einsumEquation = new EinsumEquation(context.inputs, attributes.equation); + const outputShape = einsumEquation.outputDims; + const inputShapes = context.inputs.map((input, _) => input.dims); + context.compute(createEinsumProgramInfo(inputShapes, context.inputs[0].dataType, einsumEquation, outputShape)); + }; + parseEinsumAttributes = (attributes) => { + const equation = attributes.equation.replace(/\s+/g, ""); + return createAttributeWithCacheKey({ equation }); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/expand.ts +var validateInputs12, getAdjustedShape, calculateOutputShape2, createExpandProgramInfo, expand; +var init_expand = __esm({ + "web/lib/wasm/jsep/webgpu/ops/expand.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + validateInputs12 = (inputs) => { + if (!inputs || inputs.length !== 2) { + throw new Error("Expand requires 2 input."); + } + const inputShape = inputs[0].dims; + const shape = Array.from(inputs[1].getBigInt64Array(), Number); + let shapeIndex = shape.length < inputShape.length ? 0 : shape.length - inputShape.length; + let inputShapeIndex = inputShape.length < shape.length ? 0 : inputShape.length - shape.length; + for (; shapeIndex < shape.length && inputShapeIndex < inputShape.length; ++shapeIndex, ++inputShapeIndex) { + if (shape[shapeIndex] !== inputShape[inputShapeIndex] && shape[shapeIndex] !== 1 && inputShape[inputShapeIndex] !== 1) { + throw new Error("Expand requires shape to be broadcastable to input"); + } + } + }; + getAdjustedShape = (shape1, shape2) => { + const diff = shape1.length - shape2.length; + const shape = []; + for (let i = 0; i < diff; ++i) { + shape.push(shape1[i]); + } + for (let i = 0; i < shape2.length; ++i) { + shape.push(shape2[i] === 1 ? shape1[i + diff] : shape2[i]); + } + return shape; + }; + calculateOutputShape2 = (inputShape, shape) => inputShape.length > shape.length ? getAdjustedShape(inputShape, shape) : getAdjustedShape(shape, inputShape); + createExpandProgramInfo = (inputs) => { + const inputShape = inputs[0].dims; + const shape = Array.from(inputs[1].getBigInt64Array(), Number); + const outputShape = calculateOutputShape2(inputShape, shape); + const dataType = inputs[0].dataType; + const components = dataType === 9 /* bool */ ? 4 : 1; + const outputSize = Math.ceil(ShapeUtil.size(outputShape) / components); + const getShaderSource = (shaderHelper) => { + const input = inputVariable("input", dataType, inputShape.length, components); + const output = outputVariable("output", dataType, outputShape.length, components); + let assignment; + if (dataType === 9 /* bool */) { + const singleAssignment = (resStr, x, typeCast = "") => ` + let outputIndices${x} = ${output.offsetToIndices(`outputOffset + ${x}u`)}; + let offset${x} = ${input.broadcastedIndicesToOffset(`outputIndices${x}`, output)}; + let index${x} = offset${x} / 4u; + let component${x} = offset${x} % 4u; + ${resStr}[${x}] = ${typeCast}(${input.getByOffset(`index${x}`)}[component${x}]); + `; + assignment = ` + let outputOffset = global_idx * ${components}; + var data = vec4(0); + ${singleAssignment("data", 0, "u32")} + ${singleAssignment("data", 1, "u32")} + ${singleAssignment("data", 2, "u32")} + ${singleAssignment("data", 3, "u32")} + ${output.setByOffset("global_idx", "data")} + }`; + } else { + assignment = ` + let outputIndices = ${output.offsetToIndices("global_idx")}; + let inputOffset = ${input.broadcastedIndicesToOffset("outputIndices", output)}; + ${output.setByOffset("global_idx", input.getByOffset("inputOffset"))} + }`; + } + return ` + ${shaderHelper.registerUniform("vec_size", "u32").declareVariables(input, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} + ${assignment}`; + }; + const programUniforms = [{ type: 12 /* uint32 */, data: outputSize }, ...createTensorShapeVariables(inputShape, outputShape)]; + return { + name: "Expand", + shaderCache: { hint: `${outputShape.length}`, inputDependencies: ["rank"] }, + getShaderSource, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }) + }; + }; + expand = (context) => { + validateInputs12(context.inputs); + context.compute(createExpandProgramInfo(context.inputs), { inputs: [0] }); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/fast-gelu.ts +var createFastGeluProgramInfo, fastGelu2; +var init_fast_gelu = __esm({ + "web/lib/wasm/jsep/webgpu/ops/fast-gelu.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + init_unary_op(); + createFastGeluProgramInfo = (inputTensors) => { + const dataType = inputTensors[0].dataType; + const outputSize = ShapeUtil.size(inputTensors[0].dims); + const biasLength = ShapeUtil.size(inputTensors[1].dims); + const useVec4 = biasLength % 4 === 0; + const getShaderSource = (shaderHelper) => { + const x = inputVariable("x", dataType, [1], 4); + const bias = inputVariable("bias", dataType, [1], 4); + const y = outputVariable("y", dataType, [1], 4); + const uniforms = [{ name: "output_vec_size", type: "u32" }, { name: "bias_size", type: "u32" }]; + const singleElementBias = (i) => ` + let bias${i}_offset: u32 = (global_idx * 4 + ${i}) % uniforms.bias_size; + let bias${i} = ${bias.getByOffset(`bias${i}_offset / 4`)}[bias${i}_offset % 4];`; + const biasGetExpression = useVec4 ? ` + let bias = ${bias.getByOffset("global_idx % (uniforms.bias_size / 4)")};` : `${singleElementBias(0)}${singleElementBias(1)}${singleElementBias(2)}${singleElementBias(3)} + let bias = ${x.type.value}(bias0, bias1, bias2, bias3);`; + return `${shaderHelper.registerUniforms(uniforms).declareVariables(x, bias, y)} + + ${fastGeluImpl(tensorTypeToWsglValueType(dataType))} + + ${shaderHelper.mainStart(WORKGROUP_SIZE)} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_vec_size")} + + let x = ${x.getByOffset("global_idx")}; + ${biasGetExpression} + let x_in = x + bias; + ${y.setByOffset("global_idx", fastGeluExpression("x_in"))} + }`; + }; + return { + name: "FastGeluWithBias", + shaderCache: { hint: `${useVec4}`, inputDependencies: ["type", "type"] }, + getShaderSource, + getRunData: (inputs) => ({ + outputs: [{ dims: inputs[0].dims, dataType: inputs[0].dataType }], + programUniforms: [{ type: 12 /* uint32 */, data: Math.ceil(outputSize / 4) }, { type: 12 /* uint32 */, data: biasLength }], + dispatchGroup: { x: Math.ceil(outputSize / WORKGROUP_SIZE / 4) } + }) + }; + }; + fastGelu2 = (context) => { + if (context.inputs.length < 2 || ShapeUtil.size(context.inputs[1].dims) === 0) { + fastGelu(context); + } else { + context.compute(createFastGeluProgramInfo(context.inputs)); + } + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/gather.ts +var validateInputs13, createGatherProgramInfo, parseGatherAttributes, gather; +var init_gather = __esm({ + "web/lib/wasm/jsep/webgpu/ops/gather.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs13 = (inputs) => { + if (!inputs || inputs.length !== 2) { + throw new Error("Gather requires 2 inputs."); + } + }; + createGatherProgramInfo = (inputs, attributes) => { + const inputShape = inputs[0].dims; + const indicesShape = inputs[1].dims; + const inputRank = inputShape.length; + const axis = ShapeUtil.normalizeAxis(attributes.axis, inputRank); + const outputShape = inputShape.slice(0); + outputShape.splice(axis, 1, ...indicesShape); + const axisDimLimit = inputShape[axis]; + const components = inputs[0].dataType === 9 /* bool */ ? 4 : 1; + const outputSize = Math.ceil(ShapeUtil.size(outputShape) / components); + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 6 /* int32 */, data: axisDimLimit }, + { type: 12 /* uint32 */, data: axis }, + ...createTensorShapeVariables(inputs[0].dims, inputs[1].dims, outputShape) + ]; + const getShaderSource = (shaderHelper) => { + const data = inputVariable("data", inputs[0].dataType, inputs[0].dims.length, components); + const indices = inputVariable("inputIndices", inputs[1].dataType, inputs[1].dims.length); + const output = outputVariable("output", inputs[0].dataType, outputShape.length, components); + const calcDataIndices = (x) => { + const indicesRank = indicesShape.length; + let calcStr = `var indicesIndices${x} = ${indices.type.indices}(0);`; + for (let i = 0; i < indicesRank; i++) { + calcStr += `${indicesRank > 1 ? `indicesIndices${x}[${i}]` : `indicesIndices${x}`} = ${outputShape.length > 1 ? `outputIndices${x}[uniforms.axis + ${i}]` : `outputIndices${x}`};`; + } + calcStr += ` + var idx${x} = ${indices.getByIndices(`indicesIndices${x}`)}; + if (idx${x} < 0) { + idx${x} = idx${x} + uniforms.axisDimLimit; + } + var dataIndices${x} : ${data.type.indices}; + `; + for (let i = 0, j = 0; i < inputRank; i++) { + if (i === axis) { + calcStr += `${inputRank > 1 ? `dataIndices${x}[${i}]` : `dataIndices${x}`} = u32(idx${x});`; + j += indicesRank; + } else { + calcStr += `${inputRank > 1 ? `dataIndices${x}[${i}]` : `dataIndices${x}`} = ${outputShape.length > 1 ? `outputIndices${x}[${j}]` : `outputIndices${x}`};`; + j++; + } + } + return calcStr; + }; + let assignment; + if (inputs[0].dataType === 9 /* bool */) { + const singleAssignment = (resStr, x, typeCast = "") => ` + let outputIndices${x} = ${output.offsetToIndices(`outputOffset + ${x}u`)}; + ${calcDataIndices(x)}; + let offset${x} = ${data.indicesToOffset(`dataIndices${x}`)}; + let index${x} = offset${x} / 4u; + let component${x} = offset${x} % 4u; + ${resStr}[${x}] = ${typeCast}(${data.getByOffset(`index${x}`)}[component${x}]); + `; + assignment = ` + let outputOffset = global_idx * ${components}; + var value = vec4(0); + ${singleAssignment("value", 0, "u32")} + ${singleAssignment("value", 1, "u32")} + ${singleAssignment("value", 2, "u32")} + ${singleAssignment("value", 3, "u32")} + ${output.setByOffset("global_idx", "value")} + `; + } else { + assignment = ` + let outputIndices = ${output.offsetToIndices("global_idx")}; + ${calcDataIndices("")}; + let value = ${data.getByIndices("dataIndices")}; + ${output.setByOffset("global_idx", "value")}; + `; + } + return ` + ${shaderHelper.registerUniform("outputSize", "u32").registerUniform("axisDimLimit", "i32").registerUniform("axis", "u32").declareVariables(data, indices, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + ${assignment} + }`; + }; + return { + name: "Gather", + shaderCache: { hint: attributes.cacheKey, inputDependencies: ["rank", "rank"] }, + getRunData: () => ({ + outputs: [ + { dims: outputShape, dataType: inputs[0].dataType } + ], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }; + }; + parseGatherAttributes = (attributes) => createAttributeWithCacheKey({ axis: attributes.axis }); + gather = (context, attributes) => { + const inputs = context.inputs; + validateInputs13(inputs); + context.compute(createGatherProgramInfo(context.inputs, attributes)); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/gather-elements.ts +var validateInputs14, createGatherElementsProgramInfo, parseGatherElementsAttributes, gatherElements; +var init_gather_elements = __esm({ + "web/lib/wasm/jsep/webgpu/ops/gather-elements.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs14 = (inputs) => { + if (!inputs || inputs.length !== 2) { + throw new Error("GatherElements requires 2 inputs."); + } + if (inputs[0].dims.length < 1) { + throw new Error("GatherElements requires that the data input be rank >= 1."); + } + if (inputs[0].dims.length !== inputs[1].dims.length) { + throw new Error(`GatherElements requires that the data input and + indices input tensors be of same rank.`); + } + }; + createGatherElementsProgramInfo = (inputs, attributes) => { + const inputShape = inputs[0].dims; + const inputOutputDataType = inputs[0].dataType; + const inputRank = inputShape.length; + const indicesShape = inputs[1].dims; + const indicesDataType = inputs[1].dataType; + const axis = ShapeUtil.normalizeAxis(attributes.axis, inputRank); + const axisDimLimit = inputShape[axis]; + const outputShape = indicesShape.slice(0); + const outputSize = ShapeUtil.size(outputShape); + const input = inputVariable("input", inputOutputDataType, inputRank); + const indices = inputVariable("indicesInput", indicesDataType, indicesShape.length); + const output = outputVariable("output", inputOutputDataType, outputShape.length); + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 6 /* int32 */, data: axisDimLimit }, + { type: 12 /* uint32 */, data: axis } + ]; + programUniforms.push(...createTensorShapeVariables(inputShape, indicesShape, outputShape)); + const inputDependencies = ["rank", "rank"]; + const getShaderSource = (shaderHelper) => ` + ${shaderHelper.registerUniform("outputSize", "u32").registerUniform("axisDimLimit", "i32").registerUniform("axis", "u32").declareVariables(input, indices, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + + let outputIndices = ${output.offsetToIndices("global_idx")}; + + var idx = ${indices.getByOffset("global_idx")}; + if (idx < 0) { + idx = idx + uniforms.axisDimLimit; + } + var inputIndices = ${input.type.indices}(outputIndices); + ${input.indicesSet("inputIndices", "uniforms.axis", "u32(idx)")}; + let value = ${input.getByIndices("inputIndices")}; + + ${output.setByOffset("global_idx", "value")}; + }`; + return { + name: "GatherElements", + shaderCache: { inputDependencies }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }; + }; + parseGatherElementsAttributes = (attributes) => createAttributeWithCacheKey({ axis: attributes.axis }); + gatherElements = (context, attributes) => { + const inputs = context.inputs; + validateInputs14(inputs); + context.compute(createGatherElementsProgramInfo(context.inputs, attributes)); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/gemm.ts +var validateInputs15, createGemmProgramInfo, parseGemmAttributes, gemm; +var init_gemm = __esm({ + "web/lib/wasm/jsep/webgpu/ops/gemm.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + validateInputs15 = (inputs) => { + if (!inputs) { + throw new Error("Input is missing"); + } + if (inputs.length < 2 || inputs.length > 3) { + throw new Error("Invaid input number."); + } + if (inputs.length === 3 && inputs[2].dims.length > 2) { + throw new Error("Invalid input shape of C"); + } + if (inputs[0].dataType !== inputs[1].dataType || inputs.length === 3 && inputs[0].dataType !== inputs[2].dataType) { + throw new Error("Input types are mismatched"); + } + }; + createGemmProgramInfo = (inputs, attributes) => { + const aShape = inputs[0].dims.slice(); + const bShape = inputs[1].dims.slice(); + const [M, N, K] = GemmUtil.getShapeOfGemmResult( + aShape, + attributes.transA, + bShape, + attributes.transB, + inputs.length === 3 ? inputs[2].dims : void 0 + ); + const outputShape = [M, N]; + if (!outputShape) { + throw new Error("Can't use gemm on the given tensors"); + } + const outputSize = ShapeUtil.size(outputShape); + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 12 /* uint32 */, data: M }, + { type: 12 /* uint32 */, data: N }, + { type: 12 /* uint32 */, data: K }, + { type: 1 /* float */, data: attributes.alpha }, + { type: 1 /* float */, data: attributes.beta } + ]; + const inputDependencies = ["type", "type"]; + if (inputs.length === 3) { + programUniforms.push(...createTensorShapeVariables(inputs[2].dims)); + inputDependencies.push("rank"); + } + programUniforms.push(...createTensorShapeVariables(outputShape)); + const getShaderSource = (shaderHelper) => { + let line = ""; + if (attributes.transA && attributes.transB) { + line = "value += a[k * uniforms.M + m] * b[n * uniforms.K + k];"; + } else if (attributes.transA && !attributes.transB) { + line = "value += a[k * uniforms.M + m] * b[k * uniforms.N + n];"; + } else if (!attributes.transA && attributes.transB) { + line = "value += a[m * uniforms.K + k] * b[n * uniforms.K + k];"; + } else if (!attributes.transA && !attributes.transB) { + line = "value += a[m * uniforms.K + k] * b[k * uniforms.N + n];"; + } + const calculateAlpha = attributes.alpha === 1 ? "" : "value *= uniforms.alpha;"; + const a = inputVariable("a", inputs[0].dataType, inputs[0].dims); + const b = inputVariable("b", inputs[1].dataType, inputs[1].dims); + const dataType = a.type.value; + let c = null; + const variables = [a, b]; + if (inputs.length === 3) { + c = inputVariable("c", inputs[2].dataType, inputs[2].dims.length); + variables.push(c); + } + const output = outputVariable("output", inputs[0].dataType, outputShape.length); + variables.push(output); + const uniforms = [ + { name: "output_size", type: "u32" }, + { name: "M", type: "u32" }, + { name: "N", type: "u32" }, + { name: "K", type: "u32" }, + { name: "alpha", type: "f32" }, + { name: "beta", type: "f32" } + ]; + return ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(...variables)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + + let m = global_idx / uniforms.N; + let n = global_idx % uniforms.N; + + var value = ${dataType}(0); + for (var k: u32 = 0u; k < uniforms.K; k++) { + ${line} + } + + ${calculateAlpha} + ${(() => { + if (c != null) { + return `let cOffset = ${c.broadcastedIndicesToOffset("vec2(m, n)", output)}; value += ${dataType}(uniforms.beta) * ${c.getByOffset("cOffset")};`; + } + return ""; + })()} + output[global_idx] = value; + }`; + }; + return { + name: "Gemm", + shaderCache: { hint: `${attributes.cacheKey}`, inputDependencies }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }; + }; + parseGemmAttributes = (attributes) => { + const transA = attributes.transA; + const transB = attributes.transB; + const alpha = attributes.alpha; + const beta = attributes.beta; + return { transA, transB, alpha, beta, cacheKey: `${attributes.transA};${attributes.transB};${attributes.alpha === 1}` }; + }; + gemm = (context, attributes) => { + validateInputs15(context.inputs); + context.compute(createGemmProgramInfo(context.inputs, attributes)); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/instance-norm.ts +var createInstanceNormProgramInfo, computeMean, createInstanceNormNHWCProgramInfo, instanceNorm; +var init_instance_norm = __esm({ + "web/lib/wasm/jsep/webgpu/ops/instance-norm.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + createInstanceNormProgramInfo = (inputs, attributes) => { + const xShape = inputs[0].dims; + const outputShape = xShape; + const axis = 2; + const normCount = ShapeUtil.sizeToDimension(xShape, axis); + const normSize = ShapeUtil.sizeFromDimension(xShape, axis); + const components = getMaxComponents(normSize); + const normPackedSize = normSize / components; + const inputShape = [xShape[0], xShape[1], normPackedSize]; + const inputDependencies = ["rank", "type", "type"]; + const programUniforms = [{ type: 12 /* uint32 */, data: normSize }, { type: 12 /* uint32 */, data: normPackedSize }]; + programUniforms.push(...createTensorShapeVariables(inputShape, inputShape)); + const getShaderSource = (shaderHelper) => { + const x = inputVariable("x", inputs[0].dataType, inputShape.length, components); + const scale = inputVariable("scale", inputs[1].dataType, inputs[1].dims); + const bias = inputVariable("bias", inputs[2].dataType, inputs[2].dims); + const output = outputVariable("output", inputs[0].dataType, inputShape.length, components); + const variables = [x, scale, bias, output]; + const dataType = x.type.value; + const f32Type = components === 1 ? "f32" : `vec${components}`; + const workgroupSize = 64; + const uniforms = [{ name: "normSize", type: "u32" }, { name: "normPackedSize", type: "u32" }]; + return ` + var meanShared : f32; + var squaredNormShared : f32; + var workgroupShared : array<${f32Type}, ${workgroupSize}>; + const workgroupSize = ${workgroupSize}u; + ${shaderHelper.registerUniforms(uniforms).declareVariables(...variables)} + ${shaderHelper.mainStart(workgroupSize)} + let norm = global_idx / workgroupSize; + let batch = norm / uniforms.x_shape[1]; + let channel = norm % uniforms.x_shape[1]; + let localIndex = local_id.x; + + // initialize workgroup memory + var initial = ${f32Type}(0); + for (var h = localIndex; h < uniforms.normPackedSize; h += workgroupSize) { + initial = initial + ${f32Type}(${x.get("batch", "channel", "h")}); + } + workgroupShared[localIndex] = initial; + workgroupBarrier(); + + // Calculate the mean of current channel data. + for (var currSize = workgroupSize >> 1; currSize > 0; currSize = currSize >> 1) { + if (localIndex < currSize) { + workgroupShared[localIndex] = workgroupShared[localIndex] + workgroupShared[localIndex + currSize]; + } + workgroupBarrier(); + } + if (localIndex == 0) { + meanShared = ${sumVector("workgroupShared[0]", components)} / f32(uniforms.normSize); + } + workgroupBarrier(); + + // reinitialize workgroup memory. + initial = ${f32Type}(0); + for (var h = localIndex; h < uniforms.normPackedSize; h += workgroupSize) { + let deviation = ${f32Type}(${x.get("batch", "channel", "h")}) - ${f32Type}(meanShared); + initial = initial + deviation * deviation; + } + workgroupShared[localIndex] = initial; + workgroupBarrier(); + + // Calculate the sum of square of deviation of current channel data. + for (var currSize = workgroupSize >> 1; currSize > 0; currSize = currSize >> 1) { + if (localIndex < currSize) { + workgroupShared[localIndex] = workgroupShared[localIndex] + workgroupShared[localIndex + currSize]; + } + workgroupBarrier(); + } + if (localIndex == 0) { + squaredNormShared = ${sumVector("workgroupShared[0]", components)}; + } + workgroupBarrier(); + + let invStdDev = inverseSqrt(squaredNormShared / f32(uniforms.normSize) + f32(${attributes.epsilon})); + let channelScale = invStdDev * f32(${scale.getByOffset("channel")}); + let channelShift = f32(${bias.getByOffset("channel")}) - meanShared * channelScale; + for (var h = localIndex; h < uniforms.normPackedSize; h += workgroupSize) { + let value = ${x.get("batch", "channel", "h")} * ${dataType}(${f32Type}(channelScale)) + ${dataType}(${f32Type}(channelShift)); + ${output.set("batch", "channel", "h", "value")}; + } + }`; + }; + return { + ...{ name: "InstanceNormalization" }, + // TODO: use epsilon as uniform. Currently epsilon as uniform fails test_instancenorm_epsilon. + shaderCache: { hint: `${attributes.epsilon};${components}`, inputDependencies }, + getRunData: () => ({ + outputs: [ + { dims: outputShape, dataType: inputs[0].dataType } + ], + dispatchGroup: { x: normCount }, + programUniforms + }), + getShaderSource + }; + }; + computeMean = (context, input, scale, bias, n, h, c, epsilon) => { + const components = getMaxComponents(c); + const WG = 64; + const outputType = components === 1 ? "vec2f" : `mat2x${components}f`; + const sumCastType = components === 1 ? "f32" : `vec${components}f`; + const setOutputValue = (var1, var2) => `${outputType}(${var1}, ${var2})`; + const unitsOfWork = n * c / components; + const wgSize = Math.ceil(h / WG); + const meanInputDependencies = ["type"]; + const meanProgramUniforms = [ + { type: 12 /* uint32 */, data: wgSize }, + { type: 12 /* uint32 */, data: h }, + { type: 12 /* uint32 */, data: Math.floor(c / components) }, + { type: 12 /* uint32 */, data: Math.floor(h * c / components) } + ]; + const getMeanShaderSource = (shaderHelper) => { + const inputHelper = inputVariable("input", input.dataType, input.dims, components); + return ` + ${shaderHelper.declareVariables(inputHelper)} + @group(0) @binding(1) var output : array<${outputType}>; + struct Uniforms {wg_size:u32, H:u32, C:u32, image_size:u32}; + @group(0) @binding(2) var uniforms: Uniforms; + + ${shaderHelper.mainStart(WG)} + let currentImageNumber = global_idx / ${WG} / uniforms.C; + let currentChannelNumber = (global_idx / ${WG}) % uniforms.C; + let wgOffset = local_id.x * uniforms.wg_size; + if (wgOffset >= uniforms.H) { + return; + } + let wgMax = min(wgOffset + uniforms.wg_size, uniforms.H); + + let offset = currentImageNumber * uniforms.image_size + currentChannelNumber; + var sum = ${fillVector("f32", components)}; + var squaredSum = ${fillVector("f32", components)}; + for (var i: u32 = wgOffset; i < wgMax; i++) { + let value = ${sumCastType}(input[offset + i * uniforms.C]); + sum += value; + squaredSum += value * value; + } + output[global_idx] = ${setOutputValue("sum", "squaredSum")}; + }`; + }; + const meanValues = context.compute( + { + name: "InstanceNormComputeMean", + shaderCache: { hint: `${components}`, inputDependencies: meanInputDependencies }, + getRunData: () => ({ + outputs: [ + { dims: [n, c, WG, 2], dataType: 1 /* float */ } + ], + dispatchGroup: { x: n * c / components }, + programUniforms: meanProgramUniforms + }), + getShaderSource: getMeanShaderSource + }, + { inputs: [input], outputs: [-1] } + )[0]; + const programUniforms = [ + { type: 12 /* uint32 */, data: unitsOfWork }, + { type: 12 /* uint32 */, data: h }, + { type: 12 /* uint32 */, data: Math.floor(c / components) }, + { type: 12 /* uint32 */, data: Math.floor(WG * c / components) } + ]; + const inputDependencies = ["type", "type", "type"]; + const getShaderSource = (shaderHelper) => { + const scaleHelper = inputVariable("scale", scale.dataType, scale.dims, components); + const biasHelper = inputVariable("bias", bias.dataType, bias.dims, components); + return ` + @group(0) @binding(0) var input : array<${outputType}>; + @group(0) @binding(1) var scale : array<${scaleHelper.type.storage}>; + @group(0) @binding(2) var bias : array<${biasHelper.type.storage}>; + @group(0) @binding(3) var output : array<${outputType}>; + struct Uniforms {units_of_work : u32, H: u32, C : u32, image_size : u32}; + @group(0) @binding(4) var uniforms: Uniforms; + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.units_of_work")} + let currentImageNumber = global_idx / uniforms.C; + let currentChannelNumber = global_idx % uniforms.C; + + let offset = currentImageNumber * uniforms.image_size; + var sum = ${fillVector("f32", components)}; + var squaredSum = ${fillVector("f32", components)}; + for (var i: u32 = 0; i < min(${WG}, uniforms.H); i++) { + let value = input[offset + i + currentChannelNumber * ${WG}]; + sum += value[0]; + squaredSum += value[1]; + } + sum = sum / f32(uniforms.H); + squaredSum = squaredSum / f32(uniforms.H); + let invStdDev = inverseSqrt(squaredSum - sum * sum + f32(${epsilon})); + let channelScale = invStdDev * ${sumCastType}(scale[currentChannelNumber]); + let channelShift = ${sumCastType}(bias[currentChannelNumber]) - sum * channelScale; + + output[global_idx] = ${setOutputValue("channelScale", "channelShift")}; + }`; + }; + return context.compute( + { + name: "InstanceNormComputeChannelScaleShift", + // TODO: use epsilon as uniform. Currently epsilon as uniform fails test_instancenorm_epsilon. + shaderCache: { hint: `${components};${epsilon}`, inputDependencies }, + getRunData: () => ({ + outputs: [ + { dims: [n, c, 2], dataType: 1 /* float */ } + ], + dispatchGroup: { x: Math.ceil( + unitsOfWork / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }, + { inputs: [meanValues, scale, bias], outputs: [-1] } + )[0]; + }; + createInstanceNormNHWCProgramInfo = (context, inputs, attributes) => { + const xShape = inputs[0].dims; + const outputShape = xShape; + const N = xShape[0]; + const C = xShape[xShape.length - 1]; + const H = ShapeUtil.sizeFromDimension(xShape, 1) / C; + const components = getMaxComponents(C); + const outputSize = ShapeUtil.size(outputShape) / components; + const programUniforms = [{ type: 12 /* uint32 */, data: H }, { type: 12 /* uint32 */, data: Math.floor(C / components) }]; + const inputDependencies = ["type", "type"]; + const channelScaleShift = computeMean(context, inputs[0], inputs[1], inputs[2], N, H, C, attributes.epsilon); + const getShaderSource = (shaderHelper) => { + const dataType = tensorTypeToWsglStorageType(inputs[0].dataType); + const scaleType = components === 1 ? "vec2f" : `mat2x${components}f`; + const scaleCastType = components === 1 ? dataType : `vec${components}<${dataType}>`; + const inputHelper = inputVariable("input", inputs[0].dataType, inputs[0].dims, components); + const outputHelper = outputVariable("output", inputs[0].dataType, outputShape, components); + return ` + @group(0) @binding(0) var input : array<${inputHelper.type.storage}>; + @group(0) @binding(1) var scaleInput : array<${scaleType}>; + @group(0) @binding(2) var output : array<${outputHelper.type.storage}>; + struct Uniforms {H: u32, C : u32}; + @group(0) @binding(3) var uniforms: Uniforms; + + ${shaderHelper.mainStart()} + let currentImageNumber = global_idx / (uniforms.C * uniforms.H); + let currentChannelNumber = global_idx % uniforms.C; + + let scaleOffset = currentImageNumber * uniforms.C + currentChannelNumber; + let scale = scaleInput[scaleOffset]; + output[global_idx] = fma(input[global_idx], ${scaleCastType}(scale[0]), ${scaleCastType}(scale[1])); + }`; + }; + context.compute( + { + name: "InstanceNormalizationNHWC", + shaderCache: { hint: `${components}`, inputDependencies }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }, + { inputs: [inputs[0], channelScaleShift] } + ); + }; + instanceNorm = (context, attributes) => { + if (attributes.format === "NHWC") { + createInstanceNormNHWCProgramInfo(context, context.inputs, attributes); + } else { + context.compute(createInstanceNormProgramInfo(context.inputs, attributes)); + } + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/layer-norm.ts +var validateInputs16, createLayerNormProgramInfo, layerNorm; +var init_layer_norm = __esm({ + "web/lib/wasm/jsep/webgpu/ops/layer-norm.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + validateInputs16 = (inputs) => { + if (!inputs || inputs.length < 2) { + throw new Error("layerNorm requires at least 2 inputs."); + } + }; + createLayerNormProgramInfo = (inputs, attributes, outputCount) => { + const simplified = attributes.simplified; + const xShape = inputs[0].dims; + const scale = inputs[1]; + const bias = !simplified && inputs[2]; + const outputShape = xShape; + const axis = ShapeUtil.normalizeAxis(attributes.axis, xShape.length); + const normCount = ShapeUtil.sizeToDimension(xShape, axis); + const normSize = ShapeUtil.sizeFromDimension(xShape, axis); + const scaleSize = ShapeUtil.size(scale.dims); + const biasSize = bias ? ShapeUtil.size(bias.dims) : 0; + if (scaleSize !== normSize || bias && biasSize !== normSize) { + throw new Error(`Size of X.shape()[axis:] == ${normSize}. + Size of scale and bias (if provided) must match this. + Got scale size of ${scaleSize} and bias size of ${biasSize}`); + } + const meanInvStdDevDim = []; + for (let i = 0; i < xShape.length; ++i) { + if (i < axis) { + meanInvStdDevDim.push(xShape[i]); + } else { + meanInvStdDevDim.push(1); + } + } + const components = getMaxComponents(normSize); + const inputDependencies = ["type", "type"]; + const programUniforms = [ + { type: 12 /* uint32 */, data: normCount }, + { type: 1 /* float */, data: normSize }, + { type: 12 /* uint32 */, data: Math.floor(normSize / components) }, + { type: 1 /* float */, data: attributes.epsilon } + ]; + if (bias) { + inputDependencies.push("type"); + } + const hasMeanDataOutput = outputCount > 1; + const hasInvStdOutput = outputCount > 2; + const getShaderSource = (shaderHelper) => { + const dataType = tensorTypeToWsglStorageType(inputs[0].dataType); + const variables = [ + inputVariable("x", inputs[0].dataType, inputs[0].dims, components), + inputVariable("scale", scale.dataType, scale.dims, components) + ]; + if (bias) { + variables.push(inputVariable("bias", bias.dataType, bias.dims, components)); + } + variables.push(outputVariable("output", inputs[0].dataType, outputShape, components)); + if (hasMeanDataOutput) { + variables.push(outputVariable("mean_data_output", 1 /* float */, meanInvStdDevDim)); + } + if (hasInvStdOutput) { + variables.push(outputVariable("inv_std_output", 1 /* float */, meanInvStdDevDim)); + } + const uniforms = [ + { name: "norm_count", type: "u32" }, + { name: "norm_size", type: "f32" }, + { name: "norm_size_vectorized", type: "u32" }, + { name: "epsilon", type: "f32" } + ]; + return ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(...variables)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.norm_count")} + let offset = global_idx * uniforms.norm_size_vectorized; + var mean_vector = ${fillVector("f32", components)}; + var mean_square_vector = ${fillVector("f32", components)}; + + for (var h: u32 = 0u; h < uniforms.norm_size_vectorized; h++) { + let value = ${castToF32(dataType, components, "x[h + offset]")}; + mean_vector += value; + mean_square_vector += value * value; + } + let mean = ${sumVector("mean_vector", components)} / uniforms.norm_size; + let inv_std_dev = inverseSqrt(${sumVector("mean_square_vector", components)} / uniforms.norm_size ${simplified ? "" : "- mean * mean"} + uniforms.epsilon); + + for (var j: u32 = 0; j < uniforms.norm_size_vectorized; j++) { + let f32input = ${castToF32(dataType, components, "x[j + offset]")}; + let f32scale = ${castToF32(dataType, components, "scale[j]")}; + output[j + offset] = ${variables[0].type.value}((f32input ${simplified ? "" : "- mean"}) * inv_std_dev * f32scale + ${bias ? `+ ${castToF32(dataType, components, "bias[j]")}` : ""} + ); + } + + ${hasMeanDataOutput ? "mean_data_output[global_idx] = mean" : ""}; + ${hasInvStdOutput ? "inv_std_output[global_idx] = inv_std_dev" : ""}; + }`; + }; + const outputs = [{ dims: outputShape, dataType: inputs[0].dataType }]; + if (hasMeanDataOutput) { + outputs.push({ dims: meanInvStdDevDim, dataType: 1 /* float */ }); + } + if (hasInvStdOutput) { + outputs.push({ dims: meanInvStdDevDim, dataType: 1 /* float */ }); + } + return { + name: "LayerNormalization", + shaderCache: { hint: `${components};${outputCount};${simplified}`, inputDependencies }, + getRunData: () => ({ outputs, dispatchGroup: { x: Math.ceil( + normCount / 64 + /* workgroup size */ + ) }, programUniforms }), + getShaderSource + }; + }; + layerNorm = (context, attributes) => { + validateInputs16(context.inputs); + context.compute(createLayerNormProgramInfo(context.inputs, attributes, context.outputCount)); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/matmulnbits.ts +var validateInputs17, createMatMulNBitsProgramInfo, matMulNBits, parseMatMulNBitsAttributes; +var init_matmulnbits = __esm({ + "web/lib/wasm/jsep/webgpu/ops/matmulnbits.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs17 = (inputs, attributes) => { + if (inputs.length < 3 || inputs.length > 4) { + throw new Error("MatMulNBits requires 3 or 4 inputs"); + } + const a = inputs[0]; + const aRank = a.dims.length; + if (a.dims[aRank - 1] !== attributes.k) { + throw new Error("The last dim of input shape does not match the k value"); + } + const nBlocksPerCol = Math.floor((attributes.k + attributes.blockSize - 1) / attributes.blockSize); + const blobSize = attributes.blockSize / 8 * attributes.bits; + const b = inputs[1]; + if (!ShapeUtil.areEqual(b.dims, [attributes.n, nBlocksPerCol, blobSize])) { + throw new Error("The second inputs must be 3D tensor with shape N X nBlocksPerCol X blobSize"); + } + const scales = inputs[2]; + const scalesShape = scales.dims; + if (ShapeUtil.size(scalesShape) !== attributes.n * nBlocksPerCol) { + throw new Error("scales input size error."); + } + if (inputs.length === 4) { + const zeroPoints = inputs[3]; + const zeroPointsShape = zeroPoints.dims; + const expectedZeroPointsSize = attributes.bits > 4 ? attributes.n * nBlocksPerCol : attributes.n * Math.floor((nBlocksPerCol + 1) / 2); + if (ShapeUtil.size(zeroPointsShape) !== expectedZeroPointsSize) { + throw new Error("zeroPoints input size error."); + } + } + }; + createMatMulNBitsProgramInfo = (inputs, attributes, maxComputeWorkgroupSizes, maxComputeWorkgroupStorageSize) => { + const inputShape = inputs[0].dims; + const aRank = inputShape.length; + const nBlocksPerCol = Math.floor((attributes.k + attributes.blockSize - 1) / attributes.blockSize); + const dimAOuter = inputShape[aRank - 2]; + const dimInner = attributes.k; + const dimBOuter = attributes.n; + const batchDims = inputShape.slice(0, aRank - 2); + const batchSize = ShapeUtil.size(batchDims); + const blobSize = attributes.blockSize / 8 * attributes.bits; + const blobSizeInWords = blobSize / 4; + const dataType = inputs[0].dataType; + const outputNumber = getMaxComponents(dimAOuter); + const aComponents = getMaxComponents(attributes.k); + const bComponents = getMaxComponents(blobSizeInWords); + const elementSize = getTensorElementSize(dataType); + const workgroupOutputSize = dimAOuter * nBlocksPerCol * elementSize; + const maxNumberOfComponents = Math.floor(maxComputeWorkgroupStorageSize / workgroupOutputSize); + const useBlockwiseMatMulNBits = nBlocksPerCol <= maxComputeWorkgroupSizes[0] && maxNumberOfComponents > 0; + const components = !useBlockwiseMatMulNBits || maxNumberOfComponents >= 4 ? getMaxComponents(dimBOuter) : maxNumberOfComponents >= 2 && getMaxComponents(dimBOuter) >= 2 ? 2 : 1; + const outputShape = batchDims.concat([dimAOuter, dimBOuter]); + const outputSize = ShapeUtil.size(outputShape) / components / outputNumber; + const programUniforms = useBlockwiseMatMulNBits ? [] : [{ type: 12 /* uint32 */, data: outputSize }, { type: 12 /* uint32 */, data: attributes.blockSize }]; + const inputShapeTemp = [batchSize, dimAOuter, dimInner / aComponents]; + const bShape = ShapeUtil.convertShape(inputs[1].dims).slice(); + bShape.splice(-1, 1, blobSizeInWords / bComponents); + programUniforms.push(...createTensorShapeVariables(inputShapeTemp)); + programUniforms.push(...createTensorShapeVariables(bShape)); + programUniforms.push(...createTensorShapeVariables(inputs[2].dims)); + if (inputs.length === 4) { + programUniforms.push(...createTensorShapeVariables(ShapeUtil.convertShape(inputs[3].dims))); + } + const outputShapeTemp = [batchSize, dimAOuter, dimBOuter / components]; + programUniforms.push(...createTensorShapeVariables(outputShapeTemp)); + const getShaderSource = (shaderHelper) => { + const inputRank = inputShapeTemp.length; + const a = inputVariable("a", inputs[0].dataType, inputRank, aComponents); + const b = inputVariable("b", 12 /* uint32 */, bShape.length, bComponents); + const scales = inputVariable("scales", inputs[2].dataType, inputs[2].dims.length); + const inputVariables = [a, b, scales]; + const zeroPoints = inputs.length === 4 ? inputVariable("zero_points", 12 /* uint32 */, inputs[3].dims.length) : void 0; + if (zeroPoints) { + inputVariables.push(zeroPoints); + } + const outputRank = outputShapeTemp.length; + const output = outputVariable("output", inputs[0].dataType, outputRank, components); + const uniforms = [{ name: "output_size", type: "u32" }, { name: "block_size", type: "u32" }]; + const dataType2 = tensorTypeToWsglStorageType(inputs[0].dataType); + const qDqDataType = (() => { + switch (aComponents) { + case 1: + return `array<${dataType2}, 8>`; + case 2: + return `mat4x2<${dataType2}>`; + case 4: + return `mat2x4<${dataType2}>`; + default: + throw new Error(`${aComponents}-component is not supported.`); + } + })(); + const processOneBlock = ` + for (var word: u32 = 0; word < ${blobSizeInWords}; word += ${bComponents}) { + ${b.indicesSet("b_indices", "2", "word")}; + let b_data = ${b.getByIndices("b_indices")}; + for (var i: u32 = 0; i < ${bComponents}; i++) { + let b_value: u32 = ${bComponents === 1 ? "b_data" : "b_data[word + i]"}; + let b_mask: u32 = 0x0F0F0F0Fu; + let b_value_lower: vec4 = unpack4xU8(b_value & b_mask); + let b_value_upper: vec4 = unpack4xU8((b_value >> 4) & b_mask); + let b_quantized_values = ${qDqDataType}(${Array.from({ length: 4 }, (_, i) => `${dataType2}(b_value_lower[${i}]), ${dataType2}(b_value_upper[${i}])`).join(", ")}); + let b_dequantized_values = ${(() => { + if (aComponents === 1) { + return `${qDqDataType}(${Array.from({ length: 8 }, (_, i) => `(b_quantized_values[${i}] - zero_point) * scale`).join(", ")});`; + } else { + return `(b_quantized_values - ${qDqDataType}(${Array(8).fill("zero_point").join(",")})) * scale;`; + } + })()}; + // Number of B elements per 32-bit word is 32/bits = 32/4 = 8 + for (var m: u32 = 0; m < ${useBlockwiseMatMulNBits ? dimAOuter : outputNumber}u; m++) { + ${a.indicesSet("a_indices", inputRank - 2, useBlockwiseMatMulNBits ? "m" : `row * ${outputNumber} + m`)}; + ${a.indicesSet("a_indices", inputRank - 1, "word_offset")}; + var input_offset = ${a.indicesToOffset("a_indices")}; + var a_data: ${qDqDataType}; + for (var j: u32 = 0; j < ${8 / aComponents}; j++) { + a_data[j] = ${a.getByOffset("input_offset")}; + input_offset++; + } + ${useBlockwiseMatMulNBits ? "workgroup_shared[workgroup_shared_offset + m]" : "output_values[m]"}${components > 1 ? "[c]" : ""} += ${Array.from( + { length: 8 / aComponents }, + (_, i) => `${aComponents === 1 ? `a_data[${i}] * b_dequantized_values[${i}]` : `dot(a_data[${i}], b_dequantized_values[${i}])`}` + ).join(" + ")}; + } + word_offset += ${8 / aComponents}; + } + }`; + const updateZeroPointIndex = zeroPoints ? ` + zero_point_offset += 4; + if (zero_point_offset == 32) { + zero_point_offset = 0; + zero_point_index++; + zero_point_word = ${zeroPoints.getByOffset("zero_point_index")}; + }` : ""; + return useBlockwiseMatMulNBits ? ` + var workgroup_shared: array<${output.type.value}, ${dimAOuter * nBlocksPerCol}>; + ${shaderHelper.declareVariables(...inputVariables, output)} + ${shaderHelper.mainStart([ + nBlocksPerCol, + 1, + 1 + ])} + var a_indices: ${a.type.indices}; + var block = local_id.x; + var col = workgroup_id.y; + var batch = workgroup_id.z; + ${a.indicesSet("a_indices", "0", "batch")}; + // Two zero points are packed into one byte when uniforms.bits is 4. + for (var c: u32 = 0; c < ${components}; c++) { + let col_times_components_plus_c = col * ${components} + c; + ${zeroPoints ? ` + var zero_point_bytes_per_col: u32 = (${nBlocksPerCol} + 1) / 2; + var zero_point_byte_count: u32 = col_times_components_plus_c * zero_point_bytes_per_col + (block >> 0x1u); + var zero_point_word_index: u32 = zero_point_byte_count >> 0x2u; + var zero_point_byte_offset: u32 = zero_point_byte_count & 0x3u; + var zero_point_nibble_offset: u32 = block & 0x1u; + var zero_point_bits_offset: u32 = (zero_point_byte_offset << 3) + (zero_point_nibble_offset << 2); + var zero_point_word: u32 = ${zeroPoints.getByOffset("zero_point_word_index")} >> zero_point_bits_offset;` : ""} + var b_indices: ${b.type.indices}; + ${b.indicesSet("b_indices", "0", "col_times_components_plus_c")}; + // The scale and zero points are computed per block. + var scales_index = col_times_components_plus_c * ${nBlocksPerCol} + block; + let scale = ${scales.getByOffset("scales_index")}; + // The default zero point is 8 for unsigned 4-bit quantization. + let zero_point = ${dataType2}(${zeroPoints ? "(zero_point_word) & 0xFu" : 8}); + ${b.indicesSet("b_indices", "1", "block")}; + var word_offset: u32 = block * ${attributes.blockSize / aComponents}; + var workgroup_shared_offset: u32 = block * ${dimAOuter}; + ${processOneBlock} + } + workgroupBarrier(); + if (local_id.x == 0u) { + var output_indices: ${output.type.indices}; + ${output.indicesSet("output_indices", "0", "batch")}; + ${output.indicesSet("output_indices", outputRank - 1, "col")}; + ${output.indicesSet("output_indices", outputRank - 2, "0")}; + var output_offset = ${output.indicesToOffset("output_indices")}; + for (var m: u32 = 0u; m < ${dimAOuter}u; m++) { + var output_value: ${output.type.value} = ${output.type.value}(0); + var workgroup_shared_offset: u32 = m; + for (var b: u32 = 0u; b < ${nBlocksPerCol}u; b++) { + output_value += workgroup_shared[workgroup_shared_offset]; + workgroup_shared_offset += ${dimAOuter}; + } + ${output.setByOffset("output_offset", "output_value")}; + output_offset += ${dimBOuter / components}; + } + } + }` : ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVariables, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + var output_values: array<${output.type.value}, ${outputNumber}>; + var output_indices = ${output.offsetToIndices("global_idx")}; + var col = ${output.indicesGet("output_indices", outputRank - 1)}; + var row = ${output.indicesGet("output_indices", outputRank - 2)}; + var a_indices: ${a.type.indices} = output_indices; + // Two zero points are packed into one byte because uniforms.bits <= 4. + // zero_point_offset is either 0 or 4. It is bit offset within one byte. + // TODO support zero_point_offset for bits > 4 + ${zeroPoints ? ` + var zero_point_abs_offset = col * ${components} * ((${nBlocksPerCol} + 1) / 2); + var zero_point_index: u32 = zero_point_abs_offset / 4; + var zero_point_word: u32 = ${zeroPoints.getByOffset("zero_point_index")}; + var zero_point_offset: u32 = (zero_point_abs_offset % 4) * 8;` : ""} + var scale_index = col * ${nBlocksPerCol * components}; + var b_indices: ${b.type.indices}; + for (var c: u32 = 0; c < ${components}; c++) { + ${b.indicesSet("b_indices", "0", `col * ${components} + c`)}; + var block_offset: u32 = 0; + for (var block: u32 = 0; block < ${nBlocksPerCol}; block++) { + // The scale and zero points are computed per block. + let scale = ${scales.getByOffset("scale_index")}; + // The default zero point is 8 for unsigned 4-bit quantization. + let zero_point = ${dataType2}(${zeroPoints ? "extractBits(zero_point_word, zero_point_offset, 4)" : 8}); + ${b.indicesSet("b_indices", "1", "block")}; + var word_offset: u32 = block_offset; + ${processOneBlock} + scale_index++; + ${updateZeroPointIndex} + block_offset += uniforms.block_size / ${aComponents}; + } + // Drop the trailing 4 bits if the zero_poit_offset is not a byte boundary to align with the next byte. + ${zeroPoints ? `if (zero_point_offset % 8 > 0) { + ${updateZeroPointIndex} + }` : ""} + } + for (var k: u32 = 0u; k < ${outputNumber}u; k++) { + ${output.indicesSet("output_indices", outputRank - 2, `${outputNumber} * row + k`)}; + ${output.setByIndices("output_indices", "output_values[k]")} + } + }`; + }; + return { + name: useBlockwiseMatMulNBits ? "BlockwiseMatMulNBits" : "MatMulNBits", + shaderCache: { + hint: `${attributes.cacheKey};${dimAOuter};${dataType};${inputs.length}`, + inputDependencies: Array(inputs.length).fill("rank") + }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType }], + name: useBlockwiseMatMulNBits ? "BlockwiseMatMulNBits" : "MatMulNBits", + dispatchGroup: useBlockwiseMatMulNBits ? { x: 1, y: Math.ceil(dimBOuter / components), z: batchSize } : { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }; + }; + matMulNBits = (context, attributes) => { + validateInputs17(context.inputs, attributes); + const maxComputeWorkgroupSizes = context.getMaxComputeWorkgroupSizes(); + const maxComputeWorkgroupStorageSize = context.getMaxComputeWorkgroupStoragesize(); + context.compute(createMatMulNBitsProgramInfo( + context.inputs, + attributes, + maxComputeWorkgroupSizes, + maxComputeWorkgroupStorageSize + )); + }; + parseMatMulNBitsAttributes = (attributes) => createAttributeWithCacheKey(attributes); + } +}); + +// web/lib/wasm/jsep/webgpu/ops/multihead-attentiion.ts +var getInput, validateInputs18, parseMultiHeadAttentionAttributes, weightTransposeAttribute2, addBiasTranspose, maybeTransposeToBNSHAndAddBias, multiHeadAttention; +var init_multihead_attentiion = __esm({ + "web/lib/wasm/jsep/webgpu/ops/multihead-attentiion.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_types(); + init_attention(); + init_common(); + init_transpose(); + getInput = (inputs, i) => inputs.length > i && inputs[i].dims.length > 0 && ShapeUtil.size(inputs[i].dims) > 0 ? inputs[i] : void 0; + validateInputs18 = (inputs, attributes) => { + const query = inputs[0]; + const key = getInput(inputs, 1); + const value = getInput(inputs, 2); + const bias = getInput(inputs, 3); + const keyPaddingMask = getInput(inputs, 4); + const relativePositionBias = getInput(inputs, 5); + const pastKey = getInput(inputs, 6); + const pastValue = getInput(inputs, 7); + if (query.dims.length !== 3 && query.dims.length !== 5) { + throw new Error("Input query is expected to have 3 or 5 dimensions"); + } + const dmmhaPacking = false; + const batchSize = query.dims[0]; + const sequenceLength = query.dims[1]; + const hiddenSize = query.dims.length === 3 ? dmmhaPacking ? query.dims[2] / 3 : query.dims[2] : attributes.numHeads * query.dims[4]; + let kvSequenceLength = sequenceLength; + let pastSequenceLength = 0; + let maxSequenceLength = 0; + const headSize = Math.floor(hiddenSize / attributes.numHeads); + if (pastKey && pastValue) { + if (pastKey.dims.length !== 4) { + throw new Error('Input "past_key" is expected to have 4 dimensions'); + } + if (pastKey.dims[0] !== batchSize || pastKey.dims[1] !== attributes.numHeads || pastKey.dims[3] !== headSize) { + throw new Error('Input "past_key" shape (batch_size, num_heads, past_sequence_length, head_size)'); + } + if (pastValue.dims[0] !== batchSize || pastValue.dims[1] !== attributes.numHeads || pastValue.dims[3] !== headSize) { + throw new Error('Input "past_value" shape (batch_size, num_heads, past_sequence_length, head_size)'); + } + if (pastKey.dims[2] !== pastValue.dims[2]) { + throw new Error('Input "past_key" and "past_value" shall have same dim 2 (past_sequence_length)'); + } + if (pastValue.dims.length !== 4) { + throw new Error('Input "past_value" is expected to have 4 dimensions'); + } + pastSequenceLength = pastKey.dims[2]; + maxSequenceLength = pastKey.dims[2]; + } else if (pastKey || pastValue) { + throw new Error('Input "past_key" and "past_value" shall be both present or both absent'); + } + let qkvFormat; + if (key) { + if (query.dims.length !== 3) { + throw new Error('Input "query" is expected to have 3 dimensions when key is given'); + } + if (key.dims.length < 3 || key.dims.length > 5) { + throw new Error('Input "key" is expected to have 3, 4, or 5 dimensions'); + } + if (query.dims[0] !== key.dims[0]) { + throw new Error('Input "query" and "key" shall have same dim 0 (batch size)'); + } + if (key.dims.length === 3) { + if (key.dims[2] !== query.dims[2]) { + throw new Error('Input "query" and "key" shall have same dim 2 (hidden_size)'); + } + qkvFormat = 2 /* qkvBSNH */; + kvSequenceLength = key.dims[1]; + } else if (key.dims.length === 5) { + if (key.dims[2] !== attributes.numHeads || key.dims[3] !== 2 || key.dims[4] !== headSize) { + throw new Error('Expect "key" shape (batch_size, kv_sequence_length, num_heads, 2, head_size) for packed kv'); + } + if (value) { + throw new Error('Expect "value" be none when "key" has packed kv format.'); + } + qkvFormat = 5 /* qKvBSNHxBSN2H */; + kvSequenceLength = key.dims[1]; + } else { + if (key.dims[1] !== attributes.numHeads || key.dims[3] !== headSize) { + throw new Error('Expect "key" shape (batch_size, num_heads, kv_sequence_length, head_size) for past_key'); + } + qkvFormat = 0 /* unknown */; + kvSequenceLength = key.dims[2]; + } + } else { + if (query.dims.length !== 3 && query.dims.length !== 5) { + throw new Error('Input "query" is expected to have 3 or 5 dimensions when key is empty'); + } + if (query.dims.length === 5 && (query.dims[2] !== attributes.numHeads || query.dims[3] !== 3)) { + throw new Error('Expect "query" shape (batch_size, kv_sequence_length, num_heads, 3, head_size) for packed kv'); + } + qkvFormat = 3 /* qkvBSN3H */; + } + if (bias) { + if (bias.dims.length !== 1) { + throw new Error('Input "bias" is expected to have 1 dimension'); + } + if (value) { + if (query.dims.length === 5 && query.dims[3] === 2) { + throw new Error("bias is not allowed for packed kv."); + } + } + } + let maskType = 0 /* none */; + if (keyPaddingMask) { + maskType = 8 /* maskUnknown */; + const maskDims = keyPaddingMask.dims; + if (maskDims.length === 1) { + if (maskDims[0] === batchSize) { + maskType = 1 /* mask1dKeySeqLen */; + } else if (maskDims[0] === 3 * batchSize + 2) { + maskType = 3 /* mask1DKeySeqLenStart */; + } + } else if (maskDims.length === 2 && maskDims[0] === batchSize && maskDims[1] === kvSequenceLength) { + maskType = 5 /* mask2dKeyPadding */; + } + if (maskType === 8 /* maskUnknown */) { + throw new Error('Input "key_padding_mask" shape shall be (batch_size) or (batch_size, kv_sequence_length)'); + } + throw new Error("Mask not supported"); + } + let passPastInKv = false; + let vHiddenSize = hiddenSize; + if (value) { + if (value.dims.length !== 3 && value.dims.length !== 4) { + throw new Error('Input "value" is expected to have 3 or 4 dimensions'); + } + if (query.dims[0] !== value.dims[0]) { + throw new Error('Input "query" and "value" shall have same dim 0 (batch_size)'); + } + if (value.dims.length === 3) { + if (kvSequenceLength !== value.dims[1]) { + throw new Error('Input "key" and "value" shall have the same dim 1 (kv_sequence_length)'); + } + vHiddenSize = value.dims[2]; + } else { + if (kvSequenceLength !== value.dims[2]) { + throw new Error('Input "past_key" and "past_value" shall have the same dim 2 (kv_sequence_length)'); + } + vHiddenSize = value.dims[1] * value.dims[3]; + passPastInKv = true; + } + } + const totalSequenceLength = pastSequenceLength + kvSequenceLength; + const broadcastResPosBias = false; + if (keyPaddingMask) { + throw new Error("Key padding mask is not supported"); + } + if (relativePositionBias) { + if (relativePositionBias.dims.length !== 4) { + throw new Error('Input "relative_position_bias" is expected to have 4 dimensions'); + } + if (relativePositionBias.dims[0] !== batchSize && relativePositionBias.dims[0] !== 1 || relativePositionBias.dims[1] !== attributes.numHeads || relativePositionBias.dims[2] !== sequenceLength || relativePositionBias.dims[3] !== totalSequenceLength) { + throw new Error('Input "relative_position_bias" shape (batch_size, 1, sequence_length, kv_sequence_length)'); + } + } + return { + batchSize, + sequenceLength, + pastSequenceLength, + kvSequenceLength, + totalSequenceLength, + maxSequenceLength, + inputHiddenSize: 0, + hiddenSize, + vHiddenSize, + headSize, + vHeadSize: Math.floor(vHiddenSize / attributes.numHeads), + numHeads: attributes.numHeads, + isUnidirectional: false, + pastPresentShareBuffer: false, + maskFilterValue: attributes.maskFilterValue, + maskType, + scale: attributes.scale, + broadcastResPosBias, + passPastInKv, + qkvFormat + }; + }; + parseMultiHeadAttentionAttributes = (attributes) => createAttributeWithCacheKey({ ...attributes }); + weightTransposeAttribute2 = createAttributeWithCacheKey({ perm: [0, 2, 1, 3] }); + addBiasTranspose = (context, qkv, bias, batchSize, sequenceLength, hiddenSize, biasOffset) => { + const outputShape = [batchSize, sequenceLength, hiddenSize]; + const outputSize = ShapeUtil.size(outputShape); + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 12 /* uint32 */, data: biasOffset }, + { type: 12 /* uint32 */, data: hiddenSize } + ]; + const getShaderSource = (shaderHelper) => { + const output = outputVariable("qkv_with_bias", qkv.dataType, outputShape); + const qkvInput = inputVariable("qkv", qkv.dataType, outputShape); + const biasInput = inputVariable("bias", bias.dataType, outputShape); + const uniforms = [ + { name: "output_size", type: "u32" }, + { name: "bias_offset", type: "u32" }, + { name: "hidden_size", type: "u32" } + ]; + return ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(qkvInput, biasInput, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let bias_offset_idx = (global_idx % uniforms.hidden_size) + uniforms.bias_offset; + + qkv_with_bias[global_idx] = qkv[global_idx] + bias[bias_offset_idx]; + }`; + }; + return context.compute( + { + name: "MultiHeadAttentionAddBias", + shaderCache: { inputDependencies: ["type", "type"] }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: qkv.dataType, gpuDataType: 0 /* default */ }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }, + { inputs: [qkv, bias], outputs: [-1] } + )[0]; + }; + maybeTransposeToBNSHAndAddBias = (context, batchSize, numHeads, sequenceLength, headSize, input, bias, biasOffset) => { + let reshapedInput = input; + if (!bias) { + if (input.dims.length === 3) { + reshapedInput = input.reshape([batchSize, sequenceLength, numHeads, headSize]); + } + return context.compute( + createTransposeProgramInfo(reshapedInput, weightTransposeAttribute2.perm), + { inputs: [reshapedInput], outputs: [-1] } + )[0]; + } else { + if (sequenceLength === 1) { + throw new Error("AddBiasReshape is not implemented. Please export your model with packed QKV or KV"); + } else { + reshapedInput = addBiasTranspose(context, input, bias, batchSize, sequenceLength, numHeads * headSize, biasOffset); + reshapedInput = reshapedInput.reshape([batchSize, sequenceLength, numHeads, headSize]); + return context.compute( + createTransposeProgramInfo(reshapedInput, weightTransposeAttribute2.perm), + { inputs: [reshapedInput], outputs: [-1] } + )[0]; + } + } + }; + multiHeadAttention = (context, attributes) => { + const params = validateInputs18(context.inputs, attributes); + const query = context.inputs[0]; + const key = getInput(context.inputs, 1); + const value = getInput(context.inputs, 2); + const bias = getInput(context.inputs, 3); + const keyPaddingMask = getInput(context.inputs, 4); + const relativePositionBias = getInput(context.inputs, 5); + const pastKey = getInput(context.inputs, 6); + const pastValue = getInput(context.inputs, 7); + if (query.dims.length === 5) { + throw new Error("Packed QKV is not implemented"); + } + if (key?.dims.length === 5) { + throw new Error("Packed KV is not implemented"); + } + const kvBNSH = key && value && key.dims.length === 4 && value.dims.length === 4; + const Q = maybeTransposeToBNSHAndAddBias( + context, + params.batchSize, + params.numHeads, + params.sequenceLength, + params.headSize, + query, + bias, + 0 + ); + if (kvBNSH) { + return applyAttention( + context, + Q, + key, + value, + keyPaddingMask, + void 0, + pastKey, + pastValue, + relativePositionBias, + params, + attributes + ); + } + if (!key || !value) { + throw new Error("key and value must be provided"); + } + const K = maybeTransposeToBNSHAndAddBias( + context, + params.batchSize, + params.numHeads, + params.kvSequenceLength, + params.headSize, + key, + bias, + params.hiddenSize + ); + const V = maybeTransposeToBNSHAndAddBias( + context, + params.batchSize, + params.numHeads, + params.kvSequenceLength, + params.vHeadSize, + value, + bias, + 2 * params.hiddenSize + ); + applyAttention( + context, + Q, + K, + V, + keyPaddingMask, + void 0, + pastKey, + pastValue, + relativePositionBias, + params, + attributes + ); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/pad.ts +var validateInputs19, getPadConstant, getPadReflect, getPadEdge, getPadWrap, getPadSnippet, createPadProgramInfo, createPadAttributesFromInputs, pad; +var init_pad = __esm({ + "web/lib/wasm/jsep/webgpu/ops/pad.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + validateInputs19 = (inputs) => { + if (!inputs || inputs.length < 1) { + throw new Error("Too few inputs"); + } + if (inputs[0].dataType !== 1 /* float */ && inputs[0].dataType !== 10 /* float16 */) { + throw new Error("Input type must be float or float16."); + } + if (inputs.length >= 2) { + let validPads = inputs[0].dims.length * 2 === inputs[1].dims[0]; + if (inputs.length === 4) { + validPads = inputs[3].dims[0] * 2 === inputs[1].dims[0]; + } + if (!validPads) { + throw new Error("The pads should be a 1D tensor of shape [2 * input_rank] or [2 * num_axes]."); + } + } + }; + getPadConstant = (output, inputRank, padsLength) => { + let block = ""; + for (let i = inputRank - 1; i >= 0; --i) { + block += ` + k = i32(${output.indicesGet("indices", i)}) - ${getElementAt("uniforms.pads", i, padsLength)}; + if (k < 0) { + break; + } + if (k >= i32(${getElementAt("uniforms.x_shape", i, inputRank)})) { + break; + } + offset += k * i32(${getElementAt("uniforms.x_strides", i, inputRank)}); + `; + } + return ` + value = ${output.type.value}(uniforms.constant_value); + for (var i = 0; i < 1; i++) { + var offset = 0; + var k = 0; + ${block} + value = x[offset]; + } + `; + }; + getPadReflect = (output, inputRank, padsLength) => { + let block = ""; + for (let i = inputRank - 1; i >= 0; --i) { + block += ` + k = i32(${output.indicesGet("indices", i)}) - ${getElementAt("uniforms.pads", i, padsLength)}; + if (k < 0) { + k = -k; + } + { + let _2n_1 = 2 * (i32(${getElementAt("uniforms.x_shape", i, inputRank)}) - 1); + k = k % _2n_1; + if(k >= i32(${getElementAt("uniforms.x_shape", i, inputRank)})) { + k = _2n_1 - k; + } + } + offset += k * i32(${getElementAt("uniforms.x_strides", i, inputRank)}); + `; + } + return ` + var offset = 0; + var k = 0; + ${block} + value = x[offset]; + `; + }; + getPadEdge = (output, inputRank, padsLength) => { + let block = ""; + for (let i = inputRank - 1; i >= 0; --i) { + block += ` + k = i32(${output.indicesGet("indices", i)}) - ${getElementAt("uniforms.pads", i, padsLength)}; + if (k < 0) { + k = 0; + } + if (k >= i32(${getElementAt("uniforms.x_shape", i, inputRank)})) { + k = i32(${getElementAt("uniforms.x_shape", i, inputRank)}) - 1; + } + offset += k * i32(${getElementAt("uniforms.x_strides", i, inputRank)}); + `; + } + return ` + var offset = 0; + var k = 0; + ${block} + value = x[offset]; + `; + }; + getPadWrap = (output, inputRank, padsLength) => { + let block = ""; + for (let i = inputRank - 1; i >= 0; --i) { + block += ` + k = i32(${output.indicesGet("indices", i)}) - ${getElementAt("uniforms.pads", i, padsLength)}; + if (k < 0) { + k += i32(${getElementAt("uniforms.x_shape", i, inputRank)}]); + } + if (k >= i32(${getElementAt("uniforms.x_shape", i, inputRank)})) { + k -= i32(${getElementAt("uniforms.x_shape", i, inputRank)}); + } + offset += k * i32(${getElementAt("uniforms.x_strides", i, inputRank)}); + `; + } + return ` + var offset = 0; + var k = 0; + ${block} + value = x[offset]; + `; + }; + getPadSnippet = (output, inputRank, attributes) => { + switch (attributes.mode) { + case 0: + return getPadConstant(output, inputRank, attributes.pads.length); + case 1: + return getPadReflect(output, inputRank, attributes.pads.length); + case 2: + return getPadEdge(output, inputRank, attributes.pads.length); + case 3: + return getPadWrap(output, inputRank, attributes.pads.length); + default: + throw new Error("Invalid mode"); + } + }; + createPadProgramInfo = (inputs, attributes) => { + const outputShape = ShapeUtil.padShape(inputs[0].dims.slice(), attributes.pads); + const inputDims = inputs[0].dims; + const outputSize = ShapeUtil.size(outputShape); + const programUniforms = [{ type: 12 /* uint32 */, data: outputSize }, { type: 6 /* int32 */, data: attributes.pads }]; + if (attributes.mode === 0) { + programUniforms.push({ type: inputs[0].dataType, data: attributes.value }); + } + programUniforms.push(...createTensorShapeVariables(inputs[0].dims, outputShape)); + const inputDependencies = ["rank"]; + const getShaderSource = (shaderHelper) => { + const output = outputVariable("output", inputs[0].dataType, outputShape.length); + const input = inputVariable("x", inputs[0].dataType, inputDims.length); + const dataType = input.type.value; + const padSnippet = getPadSnippet(output, inputDims.length, attributes); + const uniforms = [{ name: "output_size", type: "u32" }, { name: "pads", type: "i32", length: attributes.pads.length }]; + if (attributes.mode === 0) { + uniforms.push({ name: "constant_value", type: dataType }); + } + return ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(input, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + + let indices = ${output.offsetToIndices("global_idx")}; + + var value = ${dataType}(0); + ${padSnippet} + output[global_idx] = value; + }`; + }; + return { + name: "Pad", + shaderCache: { hint: `${attributes.mode}`, inputDependencies }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + ShapeUtil.size(outputShape) / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource + }; + }; + createPadAttributesFromInputs = (inputs, attributes) => { + if (inputs.length > 1) { + const bigInt64Pads = inputs[1].getBigInt64Array(); + const value = inputs.length >= 3 && inputs[2].data ? inputs[2].getFloat32Array()[0] : 0; + const inputRank = inputs[0].dims.length; + const updatePads = new Int32Array(2 * inputRank).fill(0); + if (inputs.length >= 4) { + const axes = inputs[3].getBigInt64Array(); + for (let i = 0; i < axes.length; i++) { + updatePads[Number(axes[i])] = Number(bigInt64Pads[i]); + updatePads[Number(axes[i]) + inputRank] = Number(bigInt64Pads[i + axes.length]); + } + } else { + bigInt64Pads.forEach((v, i) => updatePads[Number(i)] = Number(v)); + } + const pads = []; + updatePads.forEach((v) => pads.push(v)); + return { mode: attributes.mode, value, pads }; + } else { + return attributes; + } + }; + pad = (context, attributes) => { + validateInputs19(context.inputs); + const updatedAttributes = createPadAttributesFromInputs(context.inputs, attributes); + context.compute(createPadProgramInfo(context.inputs, updatedAttributes), { inputs: [0] }); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/pool.ts +var validateInputs20, getAdjustedPoolAttributesAndOutputShape, getUniformAndPadInfo, generatePoolingCode, createShaderKeyFromAttributes, createAveragePoolShaderKeyFromAttributes, createMaxPoolShaderKeyFromAttributes, parsePoolCommonAttributes, createAveragePoolProgramInfo, parseAveragePoolAttributes, averagePool, globalPoolAttributes, parseGlobalAveragePoolAttributes, globalAveragePool, createMaxPoolProgramInfo, maxPool, parseMaxPoolAttributes, parseGlobalMaxPoolAttributes, globalMaxPool; +var init_pool = __esm({ + "web/lib/wasm/jsep/webgpu/ops/pool.ts"() { + "use strict"; + init_esm(); + init_wasm_common(); + init_util(); + init_common(); + validateInputs20 = (inputs) => { + if (env2.webgpu.validateInputContent && (!inputs || inputs.length !== 1)) { + throw new Error("Pool ops requires 1 input."); + } + }; + getAdjustedPoolAttributesAndOutputShape = (input, attributes, isGlobalOperator) => { + const isChannelsLast = attributes.format === "NHWC"; + const inputShapeAsChannelFirst = input.dims.slice(); + if (isChannelsLast) { + inputShapeAsChannelFirst.splice(1, 0, inputShapeAsChannelFirst.pop()); + } + const hasDilations = Object.hasOwnProperty.call(attributes, "dilations"); + const kernelShape = attributes.kernelShape.slice(); + const strides = attributes.strides.slice(); + const dilations = hasDilations ? attributes.dilations.slice() : []; + const pads = attributes.pads.slice(); + PoolConvUtil.adjustPoolAttributes(isGlobalOperator, inputShapeAsChannelFirst, kernelShape, strides, dilations, pads); + const outputShapeAsChannelFirst = PoolConvUtil.computePoolOutputShape( + isGlobalOperator, + inputShapeAsChannelFirst, + strides, + dilations, + kernelShape, + pads, + attributes.autoPad + ); + const newAttributes = Object.assign({}, attributes); + if (hasDilations) { + Object.assign(newAttributes, { kernelShape, strides, pads, dilations, cacheKey: attributes.cacheKey }); + } else { + Object.assign(newAttributes, { kernelShape, strides, pads, cacheKey: attributes.cacheKey }); + } + const outputShapeAsChannelLast = outputShapeAsChannelFirst.slice(); + outputShapeAsChannelLast.push(outputShapeAsChannelLast.splice(1, 1)[0]); + return [newAttributes, isChannelsLast ? outputShapeAsChannelLast : outputShapeAsChannelFirst]; + }; + getUniformAndPadInfo = (outputShape, attributes) => { + const isChannelsLast = attributes.format === "NHWC"; + const outputSize = ShapeUtil.size(outputShape); + const kernelSize = ShapeUtil.size(attributes.kernelShape); + const programUniforms = [{ type: 12 /* uint32 */, data: outputSize }, { type: 12 /* uint32 */, data: kernelSize }]; + const uniforms = [{ name: "outputSize", type: "u32" }, { name: "kernelSize", type: "u32" }]; + if (attributes.kernelShape.length <= 2) { + const kw = attributes.kernelShape[attributes.kernelShape.length - 1]; + const sw = attributes.strides[attributes.strides.length - 1]; + const pwStart = attributes.pads[attributes.pads.length / 2 - 1]; + const pwEnd = attributes.pads[attributes.pads.length - 1]; + const pwStartEndNotZero = !!(pwStart + pwEnd); + programUniforms.push( + { type: 12 /* uint32 */, data: kw }, + { type: 12 /* uint32 */, data: sw }, + { type: 12 /* uint32 */, data: pwStart }, + { type: 12 /* uint32 */, data: pwEnd } + ); + uniforms.push( + { name: "kw", type: "u32" }, + { name: "sw", type: "u32" }, + { name: "pwStart", type: "u32" }, + { name: "pwEnd", type: "u32" } + ); + let phStartEndNotZero = false; + if (attributes.kernelShape.length === 2) { + const kh = attributes.kernelShape[attributes.kernelShape.length - 2]; + const sh = attributes.strides[attributes.strides.length - 2]; + const phStart = attributes.pads[attributes.pads.length / 2 - 2]; + const phEnd = attributes.pads[attributes.pads.length - 2]; + phStartEndNotZero = !!(phStart + phEnd); + programUniforms.push( + { type: 12 /* uint32 */, data: kh }, + { type: 12 /* uint32 */, data: sh }, + { type: 12 /* uint32 */, data: phStart }, + { type: 12 /* uint32 */, data: phEnd } + ); + uniforms.push( + { name: "kh", type: "u32" }, + { name: "sh", type: "u32" }, + { name: "phStart", type: "u32" }, + { name: "phEnd", type: "u32" } + ); + } + return [programUniforms, uniforms, true, pwStartEndNotZero, phStartEndNotZero]; + } else { + if (isChannelsLast) { + throw new Error("Pooling with kernelShape.length > 2 is not supported for NHWC format."); + } + const kernelStrides = ShapeUtil.computeStrides(attributes.kernelShape); + programUniforms.push( + { type: 12 /* uint32 */, data: kernelStrides }, + { type: 12 /* uint32 */, data: attributes.pads }, + { type: 12 /* uint32 */, data: attributes.strides } + ); + uniforms.push( + { name: "kernelStrides", type: "u32", length: kernelStrides.length }, + { name: "pads", type: "u32", length: attributes.pads.length }, + { name: "strides", type: "u32", length: attributes.strides.length } + ); + const hasPads = attributes.pads.reduce((sum, cur) => sum + cur); + return [programUniforms, uniforms, !!hasPads, false, false]; + } + }; + generatePoolingCode = (shaderHelper, x, rank, outputShapeRank, attributes, op1, op2, start, uniforms, hasPads, pwStartEndNotZero, phStartEndNotZero) => { + const isChannelsLast = attributes.format === "NHWC"; + const dataType = x.type.value; + const output = outputVariable("output", x.type.tensor, outputShapeRank); + if (attributes.kernelShape.length <= 2) { + let codeW = ""; + let codeH = ""; + let codeHEnd = ""; + const dimIdxW = rank - (isChannelsLast ? 2 : 1); + if (pwStartEndNotZero) { + codeW = ` + for (var i: u32 = 0u; i < uniforms.kw; i++) { + xIndices[${dimIdxW}] = indices[${dimIdxW}] * uniforms.sw - uniforms.pwStart + i; + if (xIndices[${dimIdxW}] < 0 || xIndices[${dimIdxW}] + >= uniforms.x_shape[${dimIdxW}]) { + pad++; + continue; + } + let x_val = x[${x.indicesToOffset("xIndices")}]; + ${op1} + }`; + } else { + codeW = ` + for (var i: u32 = 0u; i < uniforms.kw; i++) { + xIndices[${dimIdxW}] = indices[${dimIdxW}] * uniforms.sw - uniforms.pwStart + i; + let x_val = x[${x.indicesToOffset("xIndices")}]; + ${op1} + }`; + } + if (attributes.kernelShape.length === 2) { + const dimIdxH = rank - (isChannelsLast ? 3 : 2); + if (phStartEndNotZero) { + codeH = ` + for (var j: u32 = 0u; j < uniforms.kh; j++) { + xIndices[${dimIdxH}] = indices[${dimIdxH}] * uniforms.sh - uniforms.phStart + j; + if (xIndices[${dimIdxH}] < 0 || xIndices[${dimIdxH}] >= uniforms.x_shape[${dimIdxH}]) { + pad += i32(uniforms.kw); + continue; + } + `; + } else { + codeH = ` + for (var j: u32 = 0u; j < uniforms.kh; j++) { + xIndices[${dimIdxH}] = indices[${dimIdxH}] * uniforms.sh - uniforms.phStart + j; + `; + } + codeHEnd = ` + } + `; + } + const poolingCode = ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(x, output)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + + let indices = ${output.offsetToIndices("global_idx")}; + var xIndices = ${output.offsetToIndices("global_idx")}; + + var value = ${dataType}(${start}); + var pad = 0; + ${codeH} + ${codeW} + ${codeHEnd} + ${op2} + + output[global_idx] = value; + }`; + return poolingCode; + } else { + if (isChannelsLast) { + throw new Error("Pooling with kernelShape.length > 2 is not supported for NHWC format."); + } + const stridesRank = attributes.kernelShape.length; + const padsRank = attributes.pads.length; + let padCode = ""; + if (hasPads) { + padCode = ` + if (xIndices[j] >= uniforms.x_shape[j]) { + pad++; + isPad = true; + break; + } + } + if (!isPad) { + let x_val = x[${x.indicesToOffset("xIndices")}]; + ${op1} + }`; + } else { + padCode = ` + } + let x_val = x[${x.indicesToOffset("xIndices")}]; + ${op1} + `; + } + const poolingCode = ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(x, output)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + let indices = ${output.offsetToIndices("global_idx")}; + var xIndices = ${output.offsetToIndices("global_idx")}; + + var offsets: array; + + var value = ${dataType}(${start}); + var pad = 0; + var isPad = false; + + for (var i: u32 = 0u; i < uniforms.kernelSize; i++) { + var offset = i; + for (var j = 0u; j < ${stridesRank - 1}u; j++) { + offsets[j] = offset / ${getElementAt("uniforms.kernelStrides", "j", stridesRank)}; + offset -= offsets[j] * ${getElementAt("uniforms.kernelStrides", "j", stridesRank)}; + } + offsets[${stridesRank - 1}] = offset; + + isPad = false; + for (var j = ${rank - stridesRank}u; j < ${rank}u; j++) { + xIndices[j] = indices[j] * ${getElementAt("uniforms.strides", `j - ${rank - stridesRank}u`, stridesRank)} + + offsets[j - ${rank - stridesRank}u] - ${getElementAt("uniforms.pads", "j - 2u", padsRank)}; + ${padCode} + } + ${op2} + + output[global_idx] = value; + }`; + return poolingCode; + } + }; + createShaderKeyFromAttributes = (attributes) => `${attributes.format};${attributes.ceilMode};${attributes.autoPad};${attributes.kernelShape.length}`; + createAveragePoolShaderKeyFromAttributes = (attributes) => `${createShaderKeyFromAttributes(attributes)};${attributes.countIncludePad}`; + createMaxPoolShaderKeyFromAttributes = (attributes) => `${createShaderKeyFromAttributes(attributes)};${attributes.storageOrder};${attributes.dilations}`; + parsePoolCommonAttributes = (attributes) => ({ + format: attributes.format, + autoPad: ["NOTSET", "VALID", "SAME_UPPER", "SAME_LOWER"][attributes.auto_pad], + ceilMode: attributes.ceil_mode, + kernelShape: attributes.kernel_shape, + strides: attributes.strides, + pads: attributes.pads + }); + createAveragePoolProgramInfo = (name, input, isGlobalOperator, attributes) => { + const [adjustedAttributes, outputShape] = getAdjustedPoolAttributesAndOutputShape(input, attributes, isGlobalOperator); + const x = inputVariable("x", input.dataType, input.dims.length); + const dataType = x.type.value; + const op1 = "value += x_val;"; + let op2 = ""; + if (adjustedAttributes.countIncludePad) { + op2 += `value /= ${dataType}(uniforms.kernelSize);`; + } else { + op2 += `value /= ${dataType}(i32(uniforms.kernelSize) - pad);`; + } + const [programUniforms, uniforms, hasPads, pwStartEndNotZero, phStartEndNotZero] = getUniformAndPadInfo(outputShape, adjustedAttributes); + programUniforms.push(...createTensorShapeVariables(input.dims, outputShape)); + const inputDependencies = ["rank"]; + return { + name, + shaderCache: { hint: `${attributes.cacheKey};${hasPads};${pwStartEndNotZero};${phStartEndNotZero}`, inputDependencies }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: input.dataType }], + dispatchGroup: { x: Math.ceil( + ShapeUtil.size(outputShape) / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource: (shaderHelper) => generatePoolingCode( + shaderHelper, + x, + input.dims.length, + outputShape.length, + adjustedAttributes, + op1, + op2, + 0, + uniforms, + hasPads, + pwStartEndNotZero, + phStartEndNotZero + ) + }; + }; + parseAveragePoolAttributes = (attributes) => { + const countIncludePad = attributes.count_include_pad === 0 ? false : true; + const attr = parsePoolCommonAttributes(attributes); + if (attr.ceilMode !== 0) { + throw new Error("using ceil() in shape computation is not yet supported for AveragePool"); + } + const averagePoolAttributes = { countIncludePad, ...attr, cacheKey: "" }; + return { ...averagePoolAttributes, cacheKey: createAveragePoolShaderKeyFromAttributes(averagePoolAttributes) }; + }; + averagePool = (context, attributes) => { + validateInputs20(context.inputs); + context.compute(createAveragePoolProgramInfo("AveragePool", context.inputs[0], false, attributes)); + }; + globalPoolAttributes = { + autoPad: "", + ceilMode: 0, + countIncludePad: false, + kernelShape: [], + strides: [], + pads: [], + storageOrder: 0, + dilations: [] + }; + parseGlobalAveragePoolAttributes = (attributes) => { + const format = attributes.format; + return { format, ...globalPoolAttributes, cacheKey: format }; + }; + globalAveragePool = (context, attributes) => { + validateInputs20(context.inputs); + context.compute(createAveragePoolProgramInfo("GlobalAveragePool", context.inputs[0], true, attributes)); + }; + createMaxPoolProgramInfo = (name, input, isGlobalOperator, attributes) => { + const [adjustedAttributes, outputShape] = getAdjustedPoolAttributesAndOutputShape(input, attributes, isGlobalOperator); + const op1 = ` + value = max(x_val, value); + `; + const op2 = ""; + const x = inputVariable("x", input.dataType, input.dims.length); + const inputDependencies = ["rank"]; + const [programUniforms, uniforms, hasPads, pwStartEndNotZero, phStartEndNotZero] = getUniformAndPadInfo(outputShape, adjustedAttributes); + programUniforms.push(...createTensorShapeVariables(input.dims, outputShape)); + return { + name, + shaderCache: { hint: `${attributes.cacheKey};${hasPads};${pwStartEndNotZero};${phStartEndNotZero}`, inputDependencies }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: input.dataType }], + dispatchGroup: { x: Math.ceil( + ShapeUtil.size(outputShape) / 64 + /* workgroup size */ + ) }, + programUniforms + }), + getShaderSource: (shaderHelper) => generatePoolingCode( + shaderHelper, + x, + input.dims.length, + outputShape.length, + adjustedAttributes, + op1, + op2, + input.dataType === 10 /* float16 */ ? -65504 : -1e5, + uniforms, + hasPads, + pwStartEndNotZero, + phStartEndNotZero + ) + }; + }; + maxPool = (context, attributes) => { + validateInputs20(context.inputs); + context.compute(createMaxPoolProgramInfo("MaxPool", context.inputs[0], false, attributes)); + }; + parseMaxPoolAttributes = (attributes) => { + const storageOrder = attributes.storage_order; + const dilations = attributes.dilations; + const attr = parsePoolCommonAttributes(attributes); + if (storageOrder !== 0) { + throw new Error("column major storage order is not yet supported for MaxPool"); + } + if (attr.ceilMode !== 0) { + throw new Error("using ceil() in shape computation is not yet supported for MaxPool"); + } + const maxPoolAttributes = { storageOrder, dilations, ...attr, cacheKey: "" }; + return { ...maxPoolAttributes, cacheKey: createMaxPoolShaderKeyFromAttributes(maxPoolAttributes) }; + }; + parseGlobalMaxPoolAttributes = (attributes) => { + const format = attributes.format; + return { format, ...globalPoolAttributes, cacheKey: format }; + }; + globalMaxPool = (context, attributes) => { + validateInputs20(context.inputs); + context.compute(createMaxPoolProgramInfo("GlobalMaxPool", context.inputs[0], true, attributes)); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/range.ts +var validateInputsContent, createRangeProgramInfo, range; +var init_range = __esm({ + "web/lib/wasm/jsep/webgpu/ops/range.ts"() { + "use strict"; + init_esm(); + init_wasm_common(); + init_common(); + validateInputsContent = (start, limit, delta) => { + const sameStartLimit = start === limit; + const increasingRangeNegativeStep = start < limit && delta < 0; + const decreasingRangePositiveStep = start > limit && delta > 0; + if (sameStartLimit || increasingRangeNegativeStep || decreasingRangePositiveStep) { + throw new Error("Range these inputs' contents are invalid."); + } + }; + createRangeProgramInfo = (start, limit, delta, dataType) => { + const numElements = Math.abs(Math.ceil((limit - start) / delta)); + const outputShape = [numElements]; + const outputSize = numElements; + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: dataType, data: start }, + { type: dataType, data: delta }, + ...createTensorShapeVariables(outputShape) + ]; + const getShaderSource = (shaderHelper) => { + const output = outputVariable("output", dataType, outputShape.length); + const wgslType = output.type.value; + const uniforms = [ + { name: "outputSize", type: "u32" }, + { name: "start", type: wgslType }, + { name: "delta", type: wgslType } + ]; + return ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + output[global_idx] = uniforms.start + ${wgslType}(global_idx) * uniforms.delta; + }`; + }; + return { + name: "Range", + shaderCache: { hint: `${dataType}` }, + getShaderSource, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }) + }; + }; + range = (context) => { + let start = 0; + let limit = 0; + let delta = 0; + if (context.inputs[0].dataType === 6 /* int32 */) { + start = context.inputs[0].getInt32Array()[0]; + limit = context.inputs[1].getInt32Array()[0]; + delta = context.inputs[2].getInt32Array()[0]; + } else if (context.inputs[0].dataType === 1 /* float */) { + start = context.inputs[0].getFloat32Array()[0]; + limit = context.inputs[1].getFloat32Array()[0]; + delta = context.inputs[2].getFloat32Array()[0]; + } + if (env2.webgpu.validateInputContent) { + validateInputsContent(start, limit, delta); + } + context.compute(createRangeProgramInfo(start, limit, delta, context.inputs[0].dataType), { inputs: [] }); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/resize.ts +var validateScales, updateScales, validateInputs21, getOriginalCoordinateFromResizedCoordinate, getNearestPixelFromOriginal, updateRoI, initOutputShape, adjustOutputShape, calculateOriginalIndicesFromOutputIndices, calculateInputIndicesFromOutputIndices, checkInputIndices, setChannelAndBatchIndices, bilinearInterpolation, bicubicInterpolation, trilinearInterpolation, createResizeProgramInfo, getOpsetVersionFromCustomDataBuffer, resize, parseResizeAttributes; +var init_resize = __esm({ + "web/lib/wasm/jsep/webgpu/ops/resize.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateScales = (scales, attributes) => { + scales.every((value) => value > 0 || (() => { + throw new Error("Resize requires scales input values to be positive"); + })); + if (scales.length > 0) { + if (attributes.mode === "linear") { + if (!(scales.length === 2 || scales.length === 3 || scales.length === 4 && scales[0] === 1 && scales[1] === 1 || scales.length === 4 && scales[0] === 1 && scales[3] === 1 || scales.length === 5 && scales[0] === 1 && scales[1] === 1)) { + throw new Error( + `For linear mode, Resize requires scales to be 2D, 3D, 4D with either two outermost or one innermost and + one outermost scale values equal to 1, or 5D with two outermost scale values equal to 1` + ); + } + } else if (attributes.mode === "cubic") { + if (!(scales.length === 2 || scales.length === 4 && scales[0] === 1 && scales[1] === 1 || scales.length === 4 && scales[0] === 1 && scales[3] === 1)) { + throw new Error("Resize requires scales input size to be 2 or 4 for cubic mode"); + } + } + } + }; + updateScales = (scales, axes, rank) => { + axes.every((value) => value >= 0 && value < rank || (() => { + throw new Error("Resize requires axes input values to be positive and less than rank"); + })); + const newScales = new Array(rank).fill(1); + axes.forEach((value, index) => newScales[value] = scales[index]); + return newScales; + }; + validateInputs21 = (inputs, attributes, opsetVersion, scales, sizes, roi) => { + const [roiInputIndex, scalesInputIndex, sizesInputIndex] = opsetVersion > 10 ? [1, 2, 3] : [-1, inputs.length > 1 ? 1 : -1, -1]; + const rank = inputs[0].dims.length; + if (roiInputIndex > 0 && inputs.length > roiInputIndex && inputs[roiInputIndex].dims.length > 0) { + inputs[roiInputIndex].getFloat32Array().forEach((value) => roi.push(value)); + } else if (attributes.coordinateTransformMode === "tf_crop_and_resize") { + throw new Error("Resize requires RoI input to be specified when coordinateTransformMode is tfCropAndResize"); + } + if (scalesInputIndex > 0 && inputs.length > scalesInputIndex && inputs[scalesInputIndex].dims.length > 0) { + inputs[scalesInputIndex].getFloat32Array().forEach((value) => scales.push(value)); + if (scales.length !== 0 && (scales.length !== rank && (opsetVersion >= 18 && scales.length !== attributes.axes.length))) { + throw new Error( + "Resize requires scales input size to be same as input rank or axes size for opset 18 and up" + ); + } + validateScales(scales, attributes); + if (attributes.axes.length > 0) { + updateScales(scales, attributes.axes, rank).forEach((value, index) => scales[index] = value); + } + } + if (sizesInputIndex > 0 && inputs.length > sizesInputIndex) { + inputs[sizesInputIndex].getBigInt64Array().forEach((value) => sizes.push(Number(value))); + if (sizes.length !== rank || opsetVersion >= 18 && sizes.length === attributes.axes.length) { + throw new Error("Resize requires sizes input size to be same as input rank or axes size for opset 18 and up"); + } + } + if (attributes.axes.length > 0) { + if (scales.length !== attributes.axes.length) { + throw new Error('Resize requires "scales" input size to be of axes rank when axes attributes is specified'); + } + if (sizes.length !== attributes.axes.length) { + throw new Error( + 'Resize requires "sizes" input size to be of rank axes rank when axes attributes is specified' + ); + } + } + if (typeof scales !== "undefined" && typeof sizes !== "undefined" && scales.length > 0 && sizes.length > rank) { + throw new Error("Resize requires only of scales or sizes to be specified"); + } + }; + getOriginalCoordinateFromResizedCoordinate = (coordinateTransferMode, dType) => `fn getOriginalCoordinateFromResizedCoordinate(xResized: u32, xScale: f32, lengthResized: u32, + lengthOriginal: u32, roiStart: f32, roiEnd: f32) -> ${dType} { ` + (() => { + switch (coordinateTransferMode) { + case "asymmetric": + return `return ${dType}(xResized) / ${dType}(xScale);`; + case "pytorch_half_pixel": + return `if (lengthResized > 1) { + return (${dType}(xResized) + 0.5) / ${dType}(xScale) - 0.5; + } else { + return 0.0; + }`; + case "tf_half_pixel_for_nn": + return `return (${dType}(xResized) + 0.5) / ${dType}(xScale);`; + case "align_corners": + return `if (lengthResized == 1) { + return 0.0; + } else { + // The whole part and the fractional part are calculated separately due to inaccuracy of floating + // point division. As an example, f32(21) / f32(7) may evaluate to 2.99... instead of 3, causing an + // offset-by-one error later in floor(). + let whole = ${dType}(xResized * (lengthOriginal - 1) / (lengthResized - 1)); + let fract = + ${dType}(xResized * (lengthOriginal - 1) % (lengthResized - 1)) / ${dType}(lengthResized - 1); + return whole + fract; + }`; + case "tf_crop_and_resize": + return `if (lengthResized > 1) { + return ${dType}(roiStart) * ${dType}(lengthOriginal - 1) + + (${dType}(xResized) * ${dType}(roiEnd - roiStart) * ${dType}(lengthOriginal - 1)) / + ${dType}(lengthResized - 1); + } else { + return 0.5 * ${dType}(roiStart + roiEnd) * ${dType}(lengthOriginal - 1); + }`; + case "half_pixel_symmetric": + return `const outputWidth = ${dType}xScale * ${dType}(lengthResized); + const adjustment = ${dType}(lengthResized) / outputWidth; + const center = ${dType}(lengthOriginal) / 2; + const offset = center * (1 - adjustment); + return offset + ((${dType}(xResized) + 0.5) / ${dType}(xScale)) - 0.5;`; + case "half_pixel": + return `return ((${dType}(xResized) + 0.5) / ${dType}(xScale)) - 0.5;`; + default: + throw new Error(`Coordinate transform mode ${coordinateTransferMode} is not supported`); + } + })() + "}"; + getNearestPixelFromOriginal = (nearestMode, opsetVersion, dType) => `fn getNearestPixelFromOriginal(xOriginal: ${dType}, isDownSample: bool) -> ${dType} {` + (() => { + switch (nearestMode) { + case "round_prefer_ceil": + return "if (fract(xOriginal) == 0.5) { return ceil(xOriginal); } else { return round(xOriginal); }"; + case "floor": + return "return floor(xOriginal);"; + case "ceil": + return "return ceil(xOriginal);"; + case "round_prefer_floor": + return "if (fract(xOriginal) == 0.5) { return floor(xOriginal); } else { return round(xOriginal); }"; + case "simple": + default: + if (opsetVersion < 11) { + return "if (isDownSample) { return ceil(xOriginal); } else { return xOriginal; }"; + } + throw new Error(`Nearest mode ${nearestMode} is not supported`); + } + })() + "}"; + updateRoI = (roi, axes, rank) => { + const roiTmp = new Array(rank).fill(0).concat(new Array(rank).fill(1)); + const roiLocal = roi.length === 0 ? roiTmp : roi.slice(); + if (axes.length > 0) { + axes.forEach((v, i) => { + roiTmp[v] = roiLocal[i]; + roiTmp[i + rank] = roiLocal[axes.length + i]; + }); + return roiTmp; + } + return roiLocal; + }; + initOutputShape = (inputShape, scales, sizes, axes) => { + let outputShape = []; + if (sizes.length > 0) { + if (axes.length > 0) { + inputShape.forEach((v) => outputShape.push(v)); + if (Math.max(...axes) > inputShape.length) { + throw new Error("axes is out of bound"); + } + axes.forEach((v, i) => outputShape[v] = sizes[i]); + } else { + sizes.forEach((v) => outputShape.push(v)); + } + } else { + if (scales.length === 0) { + throw new Error("Resize requires either scales or sizes."); + } else { + outputShape = inputShape.map((value, index) => Math.round(value * scales[index])); + } + } + return outputShape; + }; + adjustOutputShape = (inputShape, scales, attributes) => { + const scaleInPolicy = (() => { + switch (attributes.keepAspectRatioPolicy) { + case "not_larger": + return attributes.axes.length > 0 ? Math.min(...attributes.axes.map((i) => scales[i]), Number.MAX_VALUE) : Math.min(...scales, Number.MAX_VALUE); + case "not_smaller": + return attributes.axes.length > 0 ? Math.max(...attributes.axes.map((i) => scales[i]), Number.MIN_VALUE) : Math.max(...scales, Number.MIN_VALUE); + default: + throw new Error(`Keep aspect ratio policy ${attributes.keepAspectRatioPolicy} is not supported`); + } + })(); + scales.fill(1, 0, scales.length); + const adjustedOutputShape = inputShape.slice(); + if (attributes.axes.length > 0) { + attributes.axes.forEach((v) => scales[v] = scaleInPolicy); + attributes.axes.forEach((v) => adjustedOutputShape[v] = Math.round(inputShape[v] * scales[v])); + } else { + scales.fill(scaleInPolicy, 0, scales.length); + adjustedOutputShape.forEach((v, i) => adjustedOutputShape[i] = Math.round(v * scales[i])); + } + return adjustedOutputShape; + }; + calculateOriginalIndicesFromOutputIndices = (output, inputShape, outputShape, scalesLength, roiLength) => ` + fn calculateOriginalIndicesFromOutputIndices(output_indices: ${output.type.indices}) -> array<${output.type.value}, ${outputShape.length}> { + var original_indices: array<${output.type.value}, ${outputShape.length}>; + for (var i:u32 = 0; i < ${outputShape.length}; i++) { + var output_index = ${output.indicesGet("output_indices", "i")}; + var scale = ${getElementAt("uniforms.scales", "i", scalesLength)}; + var roi_low = ${getElementAt("uniforms.roi", "i", roiLength)}; + var roi_hi = ${getElementAt("uniforms.roi", `i + ${inputShape.length}`, roiLength)}; + if (scale == 1.0) { + original_indices[i] = ${output.type.value}(output_index); + } else { + var input_shape_i = ${getElementAt("uniforms.input_shape", "i", inputShape.length)}; + var output_shape_i = ${getElementAt("uniforms.output_shape", "i", outputShape.length)}; + original_indices[i] = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i, + input_shape_i, roi_low, roi_hi); + } + } + return original_indices; + }`; + calculateInputIndicesFromOutputIndices = (input, output, inputShape, outputShape, scalesLength, roiLength, useExtrapolation) => ` + fn calculateInputIndicesFromOutputIndices(output_indices: ${output.type.indices}) -> ${input.type.indices} { + var input_indices: ${input.type.indices}; + for (var i:u32 = 0; i < ${outputShape.length}; i++) { + var output_index = ${output.indicesGet("output_indices", "i")}; + var input_index: u32; + var scale = ${getElementAt("uniforms.scales", "i", scalesLength)}; + if (scale == 1.0) { + input_index = output_index; + } else { + var roi_low = ${getElementAt("uniforms.roi", "i", roiLength)}; + var roi_hi = ${getElementAt("uniforms.roi", `i + ${inputShape.length}`, roiLength)}; + var input_shape_i = ${getElementAt("uniforms.input_shape", "i", inputShape.length)}; + var output_shape_i = ${getElementAt("uniforms.output_shape", "i", outputShape.length)}; + var original_idx = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i, + input_shape_i, roi_low, roi_hi); + if (!${useExtrapolation} || (original_idx >= 0 && original_idx < ${output.type.value}(input_shape_i))) { + if (original_idx < 0) { + input_index = 0; + } else if (original_idx > ${output.type.value}(input_shape_i - 1)) { + input_index = input_shape_i - 1; + } else { + input_index = u32(getNearestPixelFromOriginal(original_idx, scale < 1)); + } + } else { + input_index = u32(original_idx); + } + } + ${input.indicesSet("input_indices", "i", " input_index")} + } + return input_indices; + }`; + checkInputIndices = (input, inputShape) => ` + fn checkInputIndices(input_indices: ${input.type.indices}) -> bool { + for (var i:u32 = 0; i < ${inputShape.length}; i++) { + var input_index = ${input.indicesGet("input_indices", "i")}; + if (input_index < 0 || input_index >= ${getElementAt("uniforms.input_shape", "i", inputShape.length)}) { + return false; + } + } + return true; + }`; + setChannelAndBatchIndices = (input, channelIdx, batchIdx, spacialDims) => input.rank > spacialDims ? ` + ${input.indicesSet("input_indices", channelIdx, "channel")}; + ${input.indicesSet("input_indices", batchIdx, "batch")}; +` : ""; + bilinearInterpolation = (input, output, inputShape, useExtrapolation, extrapolationValue) => { + const isNchw = true; + const [batchIdx, heightIdx, widthIdx, channelIdx] = inputShape.length === 2 ? [-1, 0, 1, -1] : isNchw ? [0, 2, 3, 1] : [0, 1, 2, 3]; + const dType = input.type.value; + return ` + fn getInputValue(batch: u32, channel: u32, row: u32, col: u32) -> ${dType} { + var input_indices: ${input.type.indices}; + ${input.indicesSet("input_indices", heightIdx, `max(0, min(row, ${inputShape[heightIdx]} - 1))`)}; + ${input.indicesSet("input_indices", widthIdx, `max(0, min(col, ${inputShape[widthIdx]} - 1))`)}; + ${setChannelAndBatchIndices(input, channelIdx, batchIdx, 2)} + return ${input.getByIndices("input_indices")}; + } + + fn bilinearInterpolation(output_indices: ${output.type.indices}) -> ${dType} { + var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices); + var row:${dType} = originalIndices[${heightIdx}]; + var col:${dType} = originalIndices[${widthIdx}]; + ${useExtrapolation ? `if (row < 0 || row > (${inputShape[heightIdx]} - 1) || col < 0 || col > (${inputShape[widthIdx]} - 1)) { + return ${extrapolationValue}; + }` : ""}; + row = max(0, min(row, ${inputShape[heightIdx]} - 1)); + col = max(0, min(col, ${inputShape[widthIdx]} - 1)); + var row1: u32 = u32(row); + var col1: u32 = u32(col); + var row2: u32 = u32(row + 1); + var col2: u32 = u32(col + 1); + var channel: u32 = ${inputShape.length > 2 ? `u32(originalIndices[${channelIdx}])` : "0"}; + var batch: u32 = ${inputShape.length > 2 ? `u32(originalIndices[${batchIdx}])` : "0"}; + var x11: ${dType} = getInputValue(batch, channel, row1, col1); + var x12: ${dType} = getInputValue(batch, channel, row1, col2); + var x21: ${dType} = getInputValue(batch, channel, row2, col1); + var x22: ${dType} = getInputValue(batch, channel, row2, col2); + var dx1: ${dType} = abs(row - ${dType}(row1)); + var dx2: ${dType} = abs(${dType}(row2) - row); + var dy1: ${dType} = abs(col - ${dType}(col1)); + var dy2: ${dType} = abs(${dType}(col2) - col); + if (row1 == row2) { + dx1 = 0.5; + dx2 = 0.5; + } + if (col1 == col2) { + dy1 = 0.5; + dy2 = 0.5; + } + return (x11 * dx2 * dy2 + x12 * dx2 * dy1 + x21 * dx1 * dy2 + x22 * dx1 * dy1); + }`; + }; + bicubicInterpolation = (input, output, inputShape, outputShape, scales, roi, cubicCoeffA, useExtrapolation, extrapolationValue, excludeOutside) => { + const is2D = inputShape.length === 2; + const isNchw = true; + const [heightIdx, widthIdx] = is2D ? [0, 1] : isNchw ? [2, 3] : [1, 2]; + const dType = input.type.value; + const createCubicInterpolationFunction = (idx) => { + const direction = idx === heightIdx ? "row" : "col"; + return ` + fn ${direction}CubicInterpolation(input_indices: ${input.type.indices}, output_indices: ${output.type.indices}) -> ${dType} { + var output_index = ${output.indicesGet("output_indices", idx)}; + var originalIdx: ${dType} = getOriginalCoordinateFromResizedCoordinate(output_index, ${scales[idx]}, + ${outputShape[idx]}, ${inputShape[idx]}, ${roi[idx]}, ${roi[idx]} + ${inputShape.length}); + var fractOriginalIdx: ${dType} = originalIdx - floor(originalIdx); + var coefs = getCubicInterpolationCoefs(fractOriginalIdx); + + if (${useExtrapolation} && (originalIdx < 0 || originalIdx > (${inputShape[idx]} - 1))) { + return ${extrapolationValue}; + } + var data: array<${dType}, 4> = array<${dType}, 4>(0.0, 0.0, 0.0, 0.0); + for (var i: i32 = -1; i < 3; i++) { + var ${direction}: ${dType} = originalIdx + ${dType}(i); + if (${direction} < 0 || ${direction} >= ${inputShape[idx]}) { + ${(() => { + if (excludeOutside) { + return `coefs[i + 1] = 0.0; + continue;`; + } else if (useExtrapolation) { + return `return ${extrapolationValue};`; + } else { + return `${direction} = max(0, min(${direction}, ${inputShape[idx]} - 1));`; + } + })()}; + } + var input_indices_copy: ${input.type.indices} = input_indices; + ${input.indicesSet("input_indices_copy", idx, `u32(${direction})`)}; + data[i + 1] = ${idx === heightIdx ? input.getByIndices("input_indices_copy") : "rowCubicInterpolation(input_indices_copy, output_indices)"}; + } + return cubicInterpolation1D(data, coefs); + }`; + }; + return ` + ${createCubicInterpolationFunction(heightIdx)}; + ${createCubicInterpolationFunction(widthIdx)}; + fn getCubicInterpolationCoefs(s: ${dType}) -> array<${dType}, 4> { + var absS = abs(s); + var coeffs: array<${dType}, 4> = array<${dType}, 4>(0.0, 0.0, 0.0, 0.0); + var oneMinusAbsS: ${dType} = 1.0 - absS; + var twoMinusAbsS: ${dType} = 2.0 - absS; + var onePlusAbsS: ${dType} = 1.0 + absS; + coeffs[0] = ((${cubicCoeffA} * onePlusAbsS - 5 * ${cubicCoeffA}) * onePlusAbsS + 8 * ${cubicCoeffA}) * onePlusAbsS - 4 * ${cubicCoeffA}; + coeffs[1] = ((${cubicCoeffA} + 2) * absS - (${cubicCoeffA} + 3)) * absS * absS + 1; + coeffs[2] = ((${cubicCoeffA} + 2) * oneMinusAbsS - (${cubicCoeffA} + 3)) * oneMinusAbsS * oneMinusAbsS + 1; + coeffs[3] = ((${cubicCoeffA} * twoMinusAbsS - 5 * ${cubicCoeffA}) * twoMinusAbsS + 8 * ${cubicCoeffA}) * twoMinusAbsS - 4 * ${cubicCoeffA}; + return coeffs; + } + + fn cubicInterpolation1D(x: array<${dType}, 4>, coefs: array<${dType}, 4>) -> ${dType} { + var coefsSum: ${dType} = coefs[0] + coefs[1] + coefs[2] + coefs[3]; + return (x[0] * coefs[0] + x[1] * coefs[1]+ x[2] * coefs[2]+ x[3] * coefs[3]) / coefsSum; + } + + fn bicubicInterpolation(output_indices: ${output.type.indices}) -> ${dType} { + var input_indices: ${input.type.indices} = output_indices; + return colCubicInterpolation(input_indices, output_indices); + } + `; + }; + trilinearInterpolation = (input, output, inputShape, useExtrapolation, extrapolationValue) => { + const isNchw = true; + const [batchIdx, depthIdx, heightIdx, widthIdx, channelIdx] = inputShape.length === 3 ? [-1, 0, 1, 2, -1] : isNchw ? [0, 2, 3, 4, 1] : [0, 1, 2, 3, 4]; + const dType = input.type.value; + return ` + fn getInputValue(batch: u32, channel: u32, depth:u32, height: u32, width: u32) -> ${dType} { + var input_indices: ${input.type.indices}; + ${input.indicesSet("input_indices", depthIdx, `max(0, min(depth, ${inputShape[depthIdx]} - 1))`)}; + ${input.indicesSet("input_indices", heightIdx, `max(0, min(height, ${inputShape[heightIdx]} - 1))`)}; + ${input.indicesSet("input_indices", widthIdx, `max(0, min(width, ${inputShape[widthIdx]} - 1))`)}; + ${setChannelAndBatchIndices(input, channelIdx, batchIdx, 3)} + return ${input.getByIndices("input_indices")}; + } + + fn trilinearInterpolation(output_indices: ${output.type.indices}) -> ${dType} { + var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices); + var depth:${dType} = originalIndices[${depthIdx}]; + var height:${dType} = originalIndices[${heightIdx}]; + var width:${dType} = originalIndices[${widthIdx}]; + ${useExtrapolation ? `if (depth < 0 || depth > (${inputShape[depthIdx]} - 1) || height < 0 || height > (${inputShape[heightIdx]} - 1) || width < 0 || (width > ${inputShape[widthIdx]} - 1)) { + return ${extrapolationValue}; + }` : ""}; + + depth = max(0, min(depth, ${inputShape[depthIdx]} - 1)); + height = max(0, min(height, ${inputShape[heightIdx]} - 1)); + width = max(0, min(width, ${inputShape[widthIdx]} - 1)); + var depth1: u32 = u32(depth); + var height1: u32 = u32(height); + var width1: u32 = u32(width); + var depth2: u32 = u32(depth + 1); + var height2: u32 = u32(height + 1); + var width2: u32 = u32(width + 1); + var channel: u32 = ${inputShape.length > 3 ? `u32(originalIndices[${channelIdx}])` : "0"}; + var batch: u32 = ${inputShape.length > 3 ? `u32(originalIndices[${batchIdx}])` : "0"}; + + var x111: ${dType} = getInputValue(batch, channel, depth1, height1, width1); + var x112: ${dType} = getInputValue(batch, channel, depth1, height1, width2); + var x121: ${dType} = getInputValue(batch, channel, depth1, height2, width1); + var x122: ${dType} = getInputValue(batch, channel, depth1, height2, width2); + var x211: ${dType} = getInputValue(batch, channel, depth2, height1, width1); + var x212: ${dType} = getInputValue(batch, channel, depth2, height1, width2); + var x221: ${dType} = getInputValue(batch, channel, depth2, height2, width1); + var x222: ${dType} = getInputValue(batch, channel, depth2, height2, width2); + var dx1: ${dType} = abs(depth - ${dType}(depth1)); + var dx2: ${dType} = abs(${dType}(depth2) - depth); + var dy1: ${dType} = abs(height - ${dType}(height1)); + var dy2: ${dType} = abs(${dType}(height2) - height); + var dz1: ${dType} = abs(width - ${dType}(width1)); + var dz2: ${dType} = abs(${dType}(width2) - width); + if (depth1 == depth2) { + dx1 = 0.5; + dx2 = 0.5; + } + if (height1 == height2) { + dy1 = 0.5; + dy2 = 0.5; + } + if (width1 == width2) { + dz1 = 0.5; + dz2 = 0.5; + } + return (x111 * dx2 * dy2 * dz2 + x112 * dx2 * dy2 * dz1 + x121 * dx2 * dy1 *dz2 + x122 * dx2 * dy1 * dz1 + + x211 * dx1 * dy2 * dz2 + x212 * dx1 * dy2 * dz1 + x221 * dx1 * dy1 *dz2 + x222 * dx1 * dy1 * dz1); + }`; + }; + createResizeProgramInfo = (inputTensor, attributes, opsetVersion, scalesInput, sizes, roiInput) => { + const inputShape = inputTensor.dims; + const roi = updateRoI(roiInput, attributes.axes, inputShape.length); + let outputShape = initOutputShape(inputShape, scalesInput, sizes, attributes.axes); + let scales = scalesInput.slice(); + if (scalesInput.length === 0) { + scales = inputShape.map((value, index) => value === 0 ? 1 : outputShape[index] / value); + if (attributes.keepAspectRatioPolicy !== "stretch") { + outputShape = adjustOutputShape(inputShape, scales, attributes); + } + } + const output = outputVariable("output", inputTensor.dataType, outputShape.length); + const input = inputVariable("input", inputTensor.dataType, inputShape.length); + const outputSize = ShapeUtil.size(outputShape); + const noScale = inputShape.length === outputShape.length && inputShape.every((d, i) => d === outputShape[i]); + const useExtrapolation = attributes.coordinateTransformMode === "tf_crop_and_resize"; + const extrapolationValue = attributes.extrapolationValue; + const dataType = input.type.value; + const getShaderSource = (shaderHelper) => ` + ${noScale ? "" : ` + ${getOriginalCoordinateFromResizedCoordinate(attributes.coordinateTransformMode, dataType)}; + ${(() => { + switch (attributes.mode) { + case "nearest": + return ` + ${checkInputIndices(input, inputShape)}; + ${getNearestPixelFromOriginal(attributes.nearestMode, opsetVersion, dataType)}; + ${calculateInputIndicesFromOutputIndices( + input, + output, + inputShape, + outputShape, + scales.length, + roi.length, + useExtrapolation + )}; + `; + case "linear": + return ` + ${calculateOriginalIndicesFromOutputIndices(output, inputShape, outputShape, scales.length, roi.length)}; + ${(() => { + if (inputShape.length === 2 || inputShape.length === 4) { + return `${bilinearInterpolation(input, output, inputShape, useExtrapolation, extrapolationValue)}`; + } else if (inputShape.length === 3 || inputShape.length === 5) { + return `${trilinearInterpolation(input, output, inputShape, useExtrapolation, extrapolationValue)}`; + } else { + throw Error("Linear mode only supports input dims 2, 3, 4 and 5 are supported in linear mode."); + } + })()}; + `; + case "cubic": + return ` + ${(() => { + if (inputShape.length === 2 || inputShape.length === 4) { + return `${bicubicInterpolation( + input, + output, + inputShape, + outputShape, + scales, + roi, + attributes.cubicCoeffA, + useExtrapolation, + attributes.extrapolationValue, + attributes.excludeOutside + )}`; + } else { + throw Error("Cubic mode only supports input dims 2 and 4 are supported in linear mode."); + } + })()}; + `; + default: + throw Error("Invalid resize mode"); + } + })()}; + `} + ${shaderHelper.registerUniform("output_size", "u32").registerUniform("scales", "f32", scales.length).registerUniform("roi", "f32", roi.length).declareVariables(input, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + ${noScale ? "output[global_idx] = input[global_idx];" : ` + let output_indices = ${output.offsetToIndices("global_idx")}; + var input_indices: ${input.type.indices}; + ${(() => { + switch (attributes.mode) { + case "nearest": + return `input_indices = calculateInputIndicesFromOutputIndices(output_indices); + if (checkInputIndices(input_indices)) { + output[global_idx] = ${input.getByIndices("input_indices")}; + } else { + output[global_idx] = ${attributes.extrapolationValue}; + }`; + case "linear": + return `output[global_idx] = ${inputShape.length === 2 || inputShape.length === 4 ? "bilinearInterpolation" : "trilinearInterpolation"}(output_indices);`; + case "cubic": + return "output[global_idx] = bicubicInterpolation(output_indices);"; + default: + throw Error(`Unsupported resize mode: ${attributes.mode}`); + } + })()}; +`} + }`; + return { + name: "Resize", + shaderCache: { + hint: `${attributes.cacheKey}|${opsetVersion}|${scales.length > 0 ? scales : ""}|${sizes.length > 0 ? sizes : ""}|${roi.length > 0 ? roi : ""}|${noScale}|${inputShape}`, + inputDependencies: ["rank"] + }, + getShaderSource, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputTensor.dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms: [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 1 /* float */, data: scales }, + { type: 1 /* float */, data: roi }, + ...createTensorShapeVariables(inputShape, outputShape) + ] + }) + }; + }; + getOpsetVersionFromCustomDataBuffer = (context) => { + const customDataBuffer = context.customDataBuffer; + const customDataBuffer32 = new Uint32Array(customDataBuffer, customDataBuffer.byteOffset, 1); + const opsetVersion = customDataBuffer32[0]; + return opsetVersion; + }; + resize = (context, attributes) => { + const scales = []; + const sizes = []; + const roi = []; + const opsetVersion = getOpsetVersionFromCustomDataBuffer(context); + if (attributes.antialias !== 0) { + throw Error("Only default value (0) for Antialias attribute is supported"); + } + validateInputs21(context.inputs, attributes, opsetVersion, scales, sizes, roi); + context.compute( + createResizeProgramInfo(context.inputs[0], attributes, opsetVersion, scales, sizes, roi), + { inputs: [0] } + ); + }; + parseResizeAttributes = (attributes) => { + const antialias = attributes.antialias; + const axes = attributes.axes; + const coordinateTransformMode = attributes.coordinateTransformMode; + const cubicCoeffA = attributes.cubicCoeffA; + const excludeOutside = attributes.excludeOutside !== 0; + const extrapolationValue = attributes.extrapolationValue; + const keepAspectRatioPolicy = attributes.keepAspectRatioPolicy; + const mode = attributes.mode; + const nearestMode = attributes.nearestMode === "" ? "simple" : attributes.nearestMode; + return createAttributeWithCacheKey({ + antialias, + axes, + coordinateTransformMode, + cubicCoeffA, + excludeOutside, + extrapolationValue, + keepAspectRatioPolicy, + mode, + nearestMode + }); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/rotary-embedding.ts +var validateInputs22, createRotaryEmbeddingProgramInfo, rotaryEmbedding; +var init_rotary_embedding = __esm({ + "web/lib/wasm/jsep/webgpu/ops/rotary-embedding.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs22 = (inputs, attributes) => { + const [input, positionIds, cosCache, sinCache] = inputs; + const { numHeads, rotaryEmbeddingDim } = attributes; + if (input.dims.length !== 3 && input.dims.length !== 4) { + throw new Error(`Input 'x' is expected to have 3 or 4 dimensions, got ${input.dims.length}`); + } + if (!ShapeUtil.areEqual(positionIds.dims, []) && !ShapeUtil.areEqual(positionIds.dims, [1]) && positionIds.dims.length !== 2) { + throw new Error(`Input 'position_ids' is expected to have 0, 1, or 2 dimensions, got ${positionIds.dims.length}`); + } + if (cosCache.dims.length !== 2) { + throw new Error(`Input 'cos_cache' is expected to have 2 dimensions, got ${cosCache.dims.length}`); + } + if (sinCache.dims.length !== 2) { + throw new Error(`Input 'sin_cache' is expected to have 2 dimensions, got ${sinCache.dims.length}`); + } + if (!ShapeUtil.areEqual(cosCache.dims, sinCache.dims)) { + throw new Error("Inputs 'cos_cache' and 'sin_cache' are expected to have the same shape"); + } + if (rotaryEmbeddingDim > 0 && numHeads === 0) { + throw new Error("num_heads must be provided if rotary_embedding_dim is specified"); + } + const batchSize = input.dims[0]; + const sequenceLength = input.dims[input.dims.length - 2]; + const maxSequenceLength = cosCache.dims[0]; + const hiddenSize = ShapeUtil.sizeFromDimension(input.dims, 1) / sequenceLength; + const headSize = rotaryEmbeddingDim === 0 ? cosCache.dims[1] * 2 : hiddenSize / numHeads; + if (rotaryEmbeddingDim > headSize) { + throw new Error("rotary_embedding_dim must be less than or equal to head_size"); + } + if (positionIds.dims.length === 2) { + if (batchSize !== positionIds.dims[0]) { + throw new Error(`Input 'position_ids' dimension 0 should be of size batch_size, got ${positionIds.dims[0]}`); + } + if (sequenceLength !== positionIds.dims[1]) { + throw new Error(`Input 'position_ids' dimension 1 should be of size sequence_length, got ${positionIds.dims[1]}`); + } + } + if (headSize / 2 !== cosCache.dims[1] && rotaryEmbeddingDim / 2 !== cosCache.dims[1]) { + throw new Error(`Input 'cos_cache' dimension 1 should be same as head_size / 2 or rotary_embedding_dim / 2, got ${cosCache.dims[1]}`); + } + if (sequenceLength > maxSequenceLength) { + throw new Error("Updating cos_cache and sin_cache in RotaryEmbedding is not currently supported"); + } + }; + createRotaryEmbeddingProgramInfo = (inputs, attributes) => { + const { interleaved, numHeads, rotaryEmbeddingDim, scale } = attributes; + const batchSize = inputs[0].dims[0]; + const batchStride = ShapeUtil.sizeFromDimension(inputs[0].dims, 1); + const sequenceLength = inputs[0].dims[inputs[0].dims.length - 2]; + const hiddenSize = batchStride / sequenceLength; + const halfRotaryEmbeddingDim = inputs[2].dims[1]; + const headSize = rotaryEmbeddingDim === 0 ? halfRotaryEmbeddingDim * 2 : hiddenSize / numHeads; + const globalShape = new Array(batchSize, sequenceLength, hiddenSize / headSize, headSize - halfRotaryEmbeddingDim); + const globalStrides = ShapeUtil.computeStrides(globalShape); + const programUniforms = [ + { type: 1 /* float */, data: scale }, + { type: 12 /* uint32 */, data: globalShape }, + { type: 12 /* uint32 */, data: globalStrides }, + // strides for addressing the input/output tensor, in permutated order to align with the unfolded global index, + // i.e. BSNH + ...inputs[0].dims.length === 3 ? new Array({ type: 12 /* uint32 */, data: [batchStride, hiddenSize, headSize, 1] }) : [], + ...inputs[0].dims.length === 4 ? new Array( + { type: 12 /* uint32 */, data: [batchStride, headSize, sequenceLength * headSize, 1] } + ) : [], + ...createTensorShapeVariables(inputs[0].dims, inputs[1].dims, inputs[2].dims, inputs[3].dims, inputs[0].dims) + ]; + const getShaderSource = (shaderHelper) => { + const input = inputVariable("input", inputs[0].dataType, inputs[0].dims.length); + const positionIds = inputVariable("position_ids", inputs[1].dataType, inputs[1].dims.length); + const cosCache = inputVariable("cos_cache", inputs[2].dataType, inputs[2].dims.length); + const sinCache = inputVariable("sin_cache", inputs[3].dataType, inputs[3].dims.length); + const output = outputVariable("output", inputs[0].dataType, inputs[0].dims.length); + shaderHelper.registerUniforms([ + { name: "scale", type: "f32" }, + { name: "global_shape", type: "u32", length: globalShape.length }, + { name: "global_strides", type: "u32", length: globalStrides.length }, + { name: "input_output_strides", type: "u32", length: globalStrides.length } + ]); + return ` + ${shaderHelper.declareVariables(input, positionIds, cosCache, sinCache, output)} + + ${shaderHelper.mainStart(WORKGROUP_SIZE)} + let half_rotary_emb_dim = uniforms.${cosCache.name}_shape[1]; + let bsnh = global_idx / uniforms.global_strides % uniforms.global_shape; + let size = uniforms.global_shape[0] * uniforms.global_strides[0]; + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("size")} + + if (bsnh[3] < half_rotary_emb_dim) { + let position_ids_idx = + ${positionIds.broadcastedIndicesToOffset("bsnh.xy", outputVariable("", positionIds.type.tensor, 2))}; + let position_id = + u32(${positionIds.getByOffset("position_ids_idx")}) + select(0, bsnh[1], position_ids_idx == 0); + let i = dot(bsnh, uniforms.input_output_strides) + select(0, bsnh[3], ${interleaved}); + let j = i + select(half_rotary_emb_dim, 1, ${interleaved}); + let re = ${input.getByOffset("i")} * ${cosCache.get("position_id", "bsnh[3]")} - + ${input.getByOffset("j")} * ${sinCache.get("position_id", "bsnh[3]")}; + ${output.setByOffset("i", "re")} + let im = ${input.getByOffset("i")} * ${sinCache.get("position_id", "bsnh[3]")} + + ${input.getByOffset("j")} * ${cosCache.get("position_id", "bsnh[3]")}; + ${output.setByOffset("j", "im")} + } else { + let k = dot(bsnh, uniforms.input_output_strides) + half_rotary_emb_dim; + ${output.setByOffset("k", input.getByOffset("k"))} + } + }`; + }; + return { + name: "RotaryEmbedding", + shaderCache: { + hint: createAttributeWithCacheKey({ + interleaved + }).cacheKey, + inputDependencies: ["rank", "rank", "rank", "rank"] + }, + getShaderSource, + getRunData: () => ({ + outputs: [{ dims: inputs[0].dims, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil(ShapeUtil.size(globalShape) / WORKGROUP_SIZE) }, + programUniforms + }) + }; + }; + rotaryEmbedding = (context, attributes) => { + validateInputs22(context.inputs, attributes); + context.compute(createRotaryEmbeddingProgramInfo(context.inputs, attributes)); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/skip-layer-norm.ts +var validateInputs23, createSkipLayerNormProgramInfo, skipLayerNorm; +var init_skip_layer_norm = __esm({ + "web/lib/wasm/jsep/webgpu/ops/skip-layer-norm.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + validateInputs23 = (inputs) => { + if (!inputs || inputs.length < 3) { + throw new Error("layerNorm requires at least 3 inputs."); + } + const input = inputs[0]; + const skip = inputs[1]; + const gamma = inputs[2]; + if (input.dataType !== skip.dataType || input.dataType !== gamma.dataType) { + throw new Error("All inputs must have the same data type"); + } + if (input.dims.length !== 3 && input.dims.length !== 2) { + throw new Error("Input must be 2D or 3D"); + } + if (skip.dims.length !== 3 && skip.dims.length !== 2) { + throw new Error("Skip must be 2D or 3D"); + } + const hiddenSize = input.dims[input.dims.length - 1]; + const sequenceLength = input.dims[input.dims.length - 2]; + if (skip.dims[skip.dims.length - 1] !== hiddenSize) { + throw new Error("Skip must have the same hidden size as input"); + } + if (skip.dims[skip.dims.length - 2] !== sequenceLength) { + throw new Error("Skip must have the same sequence length as input"); + } + if (gamma.dims.length !== 1) { + throw new Error("Gamma must be 1D"); + } + if (gamma.dims[gamma.dims.length - 1] !== hiddenSize) { + throw new Error("Gamma must have the same hidden size as input"); + } + if (inputs.length > 3) { + const beta = inputs[3]; + if (beta.dims.length !== 1) { + throw new Error("Beta must be 1D"); + } + if (beta.dims[beta.dims.length - 1] !== hiddenSize) { + throw new Error("Beta must have the same hidden size as input"); + } + } + if (inputs.length > 4) { + const bias = inputs[4]; + if (bias.dims.length !== 1) { + throw new Error("Bias must be 1D"); + } + if (bias.dims[bias.dims.length - 1] !== hiddenSize) { + throw new Error("Bias must have the same hidden size as input"); + } + } + }; + createSkipLayerNormProgramInfo = (inputs, attributes, outputCount, isTraining) => { + const simplified = attributes.simplified; + const inputShape = inputs[0].dims; + const inputSize = ShapeUtil.size(inputShape); + const outputShape = inputShape; + const outputSize = inputSize; + const hiddenSize = inputShape.slice(-1)[0]; + const meanInvStdDevDim = isTraining ? inputShape.slice(0, -1).concat(1) : []; + const hasBetaInput = !simplified && inputs.length > 3; + const hasBiasInput = inputs.length > 4; + const hasMeanOutput = isTraining && outputCount > 1; + const hasInvStdDevOutput = isTraining && outputCount > 2; + const hasInputSkipBiasSumOutput = outputCount > 3; + const components = getMaxComponents(hiddenSize); + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 12 /* uint32 */, data: components }, + { type: 12 /* uint32 */, data: hiddenSize }, + { type: 1 /* float */, data: attributes.epsilon } + ]; + const getShaderSource = (shaderHelper) => { + const uniformsArray = [ + { name: "output_size", type: "u32" }, + { name: "components", type: "u32" }, + { name: "hidden_size", type: "u32" }, + { name: "epsilon", type: "f32" } + ]; + const variables = [ + inputVariable("x", inputs[0].dataType, inputs[0].dims, components), + inputVariable("skip", inputs[1].dataType, inputs[1].dims, components), + inputVariable("gamma", inputs[2].dataType, inputs[2].dims, components) + ]; + if (hasBetaInput) { + variables.push(inputVariable("beta", inputs[3].dataType, inputs[3].dims, components)); + } + if (hasBiasInput) { + variables.push(inputVariable("bias", inputs[4].dataType, inputs[4].dims, components)); + } + variables.push(outputVariable("output", inputs[0].dataType, outputShape, components)); + if (hasMeanOutput) { + variables.push(outputVariable("mean_output", 1 /* float */, meanInvStdDevDim)); + } + if (hasInvStdDevOutput) { + variables.push(outputVariable("inv_std_output", 1 /* float */, meanInvStdDevDim)); + } + if (hasInputSkipBiasSumOutput) { + variables.push(outputVariable("input_skip_bias_sum", inputs[0].dataType, outputShape, components)); + } + const dataType = tensorTypeToWsglStorageType(inputs[0].dataType); + return ` + + ${shaderHelper.registerUniforms(uniformsArray).declareVariables(...variables)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size / uniforms.hidden_size")} + let hidden_size_vectorized: u32 = uniforms.hidden_size / uniforms.components; + let offset = global_idx * hidden_size_vectorized; + var sum = ${fillVector("f32", components)}; + var squareSum = ${fillVector("f32", components)}; + for (var i: u32 = 0; i < hidden_size_vectorized; i++) { + let skip_value = skip[offset + i]; + let bias_value = ${hasBiasInput ? "bias[i]" : dataType + "(0.0)"}; + let input_value = x[offset + i]; + let value = input_value + skip_value + bias_value; + ${hasInputSkipBiasSumOutput ? "input_skip_bias_sum[offset + i] = value;" : ""} + output[offset + i] = value; + let f32_value = ${castToF32(dataType, components, "value")}; + sum += f32_value; + squareSum += f32_value * f32_value; + } + let mean = ${sumVector("sum", components)} / f32(uniforms.hidden_size); + let inv_std_dev = inverseSqrt(${sumVector("squareSum", components)} / f32(uniforms.hidden_size) ${simplified ? "" : "- mean * mean"} + uniforms.epsilon); + ${hasMeanOutput ? "mean_output[global_idx] = mean;" : ""} + ${hasInvStdDevOutput ? "inv_std_output[global_idx] = inv_std_dev;" : ""} + for (var i: u32 = 0; i < hidden_size_vectorized; i++) { + output[offset + i] = (output[offset + i] ${simplified ? "" : `- ${dataType}(mean)`}) * ${dataType}(inv_std_dev) * gamma[i] ${hasBetaInput ? "+ beta[i]" : ""}; + } + }`; + }; + const outputs = [{ dims: outputShape, dataType: inputs[0].dataType }]; + if (outputCount > 1) { + outputs.push({ dims: meanInvStdDevDim, dataType: 1 /* float */ }); + } + if (outputCount > 2) { + outputs.push({ dims: meanInvStdDevDim, dataType: 1 /* float */ }); + } + if (outputCount > 3) { + outputs.push({ dims: inputShape, dataType: inputs[0].dataType }); + } + return { + name: "SkipLayerNormalization", + shaderCache: { + hint: `${components};${hasMeanOutput};${hasInvStdDevOutput};${hasInputSkipBiasSumOutput}`, + inputDependencies: inputs.map((_input, _index) => "type") + }, + getShaderSource, + getRunData: () => ({ outputs, dispatchGroup: { x: Math.ceil(outputSize / hiddenSize / 64) }, programUniforms }) + }; + }; + skipLayerNorm = (context, attributes) => { + const isTraining = false; + validateInputs23(context.inputs); + const outputs = [0]; + if (context.outputCount > 1) { + outputs.push(isTraining ? 1 : -3); + } + if (context.outputCount > 2) { + outputs.push(isTraining ? 2 : -3); + } + if (context.outputCount > 3) { + outputs.push(3); + } + context.compute( + createSkipLayerNormProgramInfo(context.inputs, attributes, context.outputCount, isTraining), + { outputs } + ); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/slice.ts +var validateInputs24, readInput, createSliceAttributesFromInputs, fixStartEndValues, calculateInputIndicesImpl, createSliceProgramInfo, slice, parseSliceAttributes; +var init_slice = __esm({ + "web/lib/wasm/jsep/webgpu/ops/slice.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs24 = (inputs, attributes) => { + if (!inputs || inputs.length < 1) { + throw new Error("too few inputs"); + } + if (attributes.axes.length !== 0) { + if (attributes.axes.length !== attributes.starts.length || attributes.axes.length !== attributes.ends.length) { + throw new Error("axes, starts and ends must have the same length"); + } + } else if (attributes.starts.length !== attributes.ends.length) { + throw new Error("starts and ends must have the same length"); + } + inputs.slice(1).forEach((_, idx) => { + if (inputs[idx + 1].dataType !== 6 /* int32 */ && inputs[idx + 1].dataType !== 7 /* int64 */) { + throw new Error(`Input ${idx} must be an array of int32 or int64`); + } + }); + }; + readInput = (inputs, idx) => { + const input = []; + if (inputs.length > idx) { + if (inputs[idx].dataType === 7 /* int64 */) { + inputs[idx].getBigInt64Array().forEach((v) => input.push(Number(v))); + } else if (inputs[idx].dataType === 6 /* int32 */) { + inputs[idx].getInt32Array().forEach((v) => input.push(Number(v))); + } else { + throw new Error(`Input ${idx} must be an array of int32 or int64`); + } + } + return input; + }; + createSliceAttributesFromInputs = (inputs, attributes) => { + if (inputs.length > 1) { + const starts = readInput(inputs, 1); + const ends = readInput(inputs, 2); + let axes = readInput(inputs, 3); + if (axes.length === 0) { + axes = [...Array(inputs[0].dims.length).keys()]; + } + return createAttributeWithCacheKey({ starts, ends, axes }); + } else { + return attributes; + } + }; + fixStartEndValues = (value, index, inputShape, axes, steps) => { + let newValue = value; + if (value < 0) { + newValue += inputShape[axes[index]]; + } + if (steps[index] < 0) { + return Math.max(0, Math.min(newValue, inputShape[axes[index]] - 1)); + } else { + return Math.max(0, Math.min(newValue, inputShape[axes[index]])); + } + }; + calculateInputIndicesImpl = (input, output, inputShape) => `fn calculateInputIndices(output_indices: ${output.type.indices}) -> ${input.type.indices} { + var input_indices: ${input.type.indices}; + var carry = 0u; + for (var i = ${inputShape.length}; i >= 0; i--) { + let input_shape_i = ${getElementAt("uniforms.input_shape", "i", inputShape.length)}; + let steps_i = ${getElementAt("uniforms.steps", "i", inputShape.length)}; + let signs_i = ${getElementAt("uniforms.signs", "i", inputShape.length)}; + let starts_i = ${getElementAt("uniforms.starts", "i", inputShape.length)}; + var output_index = ${output.indicesGet("output_indices", "i")}; + var input_index = output_index * steps_i + starts_i + carry; + carry = input_index / input_shape_i; + input_index = input_index % input_shape_i; + if (signs_i < 0) { + input_index = input_shape_i - input_index - 1u + starts_i; + } + ${input.indicesSet("input_indices", "i", "input_index")}; + } + return input_indices; + }`; + createSliceProgramInfo = (inputs, attributes) => { + const inputShape = inputs[0].dims; + const inputSize = ShapeUtil.size(inputShape); + const axes = attributes.axes.length > 0 ? ShapeUtil.normalizeAxes(attributes.axes, inputShape.length) : [...Array(inputShape.length).keys()]; + let steps = readInput(inputs, 4); + steps.forEach((step) => step !== 0 || (() => { + throw new Error("step cannot be 0"); + })); + if (steps.length === 0) { + steps = Array(axes.length).fill(1); + } + const starts = attributes.starts.map((start, i) => fixStartEndValues(start, i, inputShape, axes, steps)); + const ends = attributes.ends.map((end, i) => fixStartEndValues(end, i, inputShape, axes, steps)); + if (axes.length !== starts.length || axes.length !== ends.length) { + throw new Error("start, ends and axes should have the same number of elements"); + } + if (axes.length !== inputShape.length) { + for (let i = 0; i < inputShape.length; ++i) { + if (!axes.includes(i)) { + starts.splice(i, 0, 0); + ends.splice(i, 0, inputShape[i]); + steps.splice(i, 0, 1); + } + } + } + const signs = steps.map((step) => Math.sign(step)); + steps.forEach((step, i, array) => { + if (step < 0) { + const numSteps = (ends[i] - starts[i]) / step; + const newEnd = starts[i]; + const newStart = newEnd + numSteps * steps[i]; + starts[i] = newStart; + ends[i] = newEnd; + array[i] = -step; + } + }); + const outputShape = inputShape.slice(0); + axes.forEach((axis, _) => { + outputShape[axis] = Math.ceil((ends[axis] - starts[axis]) / steps[axis]); + }); + const outputTensorInfo = { dims: outputShape, dataType: inputs[0].dataType }; + const output = outputVariable("output", inputs[0].dataType, outputShape.length); + const input = inputVariable("input", inputs[0].dataType, inputs[0].dims.length); + const outputSize = ShapeUtil.size(outputShape); + const uniforms = [ + { name: "outputSize", type: "u32" }, + { name: "starts", type: "u32", length: starts.length }, + { name: "signs", type: "i32", length: signs.length }, + { name: "steps", type: "u32", length: steps.length } + ]; + const programUniforms = [ + { type: 12 /* uint32 */, data: outputSize }, + { type: 12 /* uint32 */, data: starts }, + { type: 6 /* int32 */, data: signs }, + { type: 12 /* uint32 */, data: steps }, + ...createTensorShapeVariables(inputs[0].dims, outputShape) + ]; + const getShaderSource = (shaderHelper) => ` + ${shaderHelper.registerUniforms(uniforms).declareVariables(input, output)} + ${calculateInputIndicesImpl(input, output, inputShape)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} + let output_indices = ${output.offsetToIndices("global_idx")}; + let input_indices = calculateInputIndices(output_indices); + ${output.setByOffset("global_idx", input.getByIndices("input_indices"))} + }`; + return { + name: "Slice", + shaderCache: { hint: `${signs.length}_${starts.length}_${steps.length}`, inputDependencies: ["rank"] }, + getShaderSource, + getRunData: () => ({ + outputs: [outputTensorInfo], + dispatchGroup: { x: Math.ceil( + inputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }) + }; + }; + slice = (context, attributes) => { + validateInputs24(context.inputs, attributes); + const updatedAttributes = createSliceAttributesFromInputs(context.inputs, attributes); + context.compute(createSliceProgramInfo(context.inputs, updatedAttributes), { inputs: [0] }); + }; + parseSliceAttributes = (attributes) => { + const starts = attributes.starts; + const ends = attributes.ends; + const axes = attributes.axes; + return createAttributeWithCacheKey({ starts, ends, axes }); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/softmax.ts +var validateInputs25, createSoftmaxProgramInfo, softmax, parseSoftmaxAttributes; +var init_softmax = __esm({ + "web/lib/wasm/jsep/webgpu/ops/softmax.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs25 = (inputs) => { + if (!inputs || inputs.length !== 1) { + throw new Error("Softmax op requires 1 input."); + } + }; + createSoftmaxProgramInfo = (input, attributes) => { + const shape = input.dims; + const outputSize = ShapeUtil.size(shape); + const WG = 64; + let axis = attributes.axis; + if (axis < 0) { + axis = shape.length + axis; + } + if (axis < shape.length - 1) { + throw new Error("softmax only supports last axis for now."); + } + const cols = shape[axis]; + const rows = outputSize / cols; + const components = getMaxComponents(cols); + const packedCols = cols / components; + const maxVector = (name, components2) => { + if (components2 === 4) { + return `max(max(${name}.x, ${name}.y), max(${name}.z, ${name}.w))`; + } else if (components2 === 2) { + return `max(${name}.x, ${name}.y)`; + } else if (components2 === 3) { + return `max(max(${name}.x, ${name}.y), ${name}.z)`; + } + return name; + }; + const x = inputVariable("x", input.dataType, input.dims, components); + const output = outputVariable("result", input.dataType, input.dims, components); + const valueType = x.type.value; + const threadMaxDecl = tensorTypeToWsglStorageType(input.dataType) === "f32" ? `var threadMax = ${valueType}(-3.402823e+38f);` : `var threadMax = ${valueType}(-65504.0h);`; + const getShaderSource = (shaderHelper) => ` + var rowMaxShared : ${valueType}; + var rowSumShared : ${valueType}; + var threadShared : array<${valueType}, ${WG}>; + + fn getValue(row: i32, col: i32, row_stride: i32) -> ${valueType} { + let index = row * row_stride + col; + return x[index]; + } + + fn setValue(row: i32, col: i32, row_stride: i32, value: ${valueType}) { + let index = row * row_stride + col; + result[index] = value; + } + ${shaderHelper.registerUniform("packedCols", "i32").declareVariables(x, output)} + ${shaderHelper.mainStart()} + let gindex = i32(global_idx); + let lindex = i32(local_idx); + const wg = ${WG}; + let row = gindex / wg; + let cols = uniforms.packedCols; + let row_stride : i32 = uniforms.packedCols; + + // find the rows max + ${threadMaxDecl} + for (var col = lindex; col < cols; col += wg) { + let value = getValue(row, col, row_stride); + threadMax = max(threadMax, value); + } + if (lindex < cols) { + threadShared[lindex] = threadMax; + } + workgroupBarrier(); + + var reduceSize = min(cols, wg); + for (var currSize = reduceSize >> 1; currSize > 0; currSize = reduceSize >> 1) { + reduceSize = currSize + (reduceSize & 1); + if (lindex < currSize) { + threadShared[lindex] = max(threadShared[lindex], threadShared[lindex + reduceSize]); + } + workgroupBarrier(); + } + if (lindex == 0) { + rowMaxShared = ${valueType}(${maxVector("threadShared[0]", components)}); + } + workgroupBarrier(); + + // find the rows sum + var threadSum = ${valueType}(0.0); + for (var col = lindex; col < cols; col += wg) { + let subExp = exp(getValue(row, col, row_stride) - rowMaxShared); + threadSum += subExp; + } + threadShared[lindex] = threadSum; + workgroupBarrier(); + + for (var currSize = wg >> 1; currSize > 0; currSize = currSize >> 1) { + if (lindex < currSize) { + threadShared[lindex] = threadShared[lindex] + threadShared[lindex + currSize]; + } + workgroupBarrier(); + } + if (lindex == 0) { + rowSumShared = ${valueType}(${sumVector("threadShared[0]", components)}); + } + workgroupBarrier(); + + // calculate final value for each element in the row + for (var col = lindex; col < cols; col += wg) { + let value = exp(getValue(row, col, row_stride) - rowMaxShared) / rowSumShared; + setValue(row, col, row_stride, value); + } + }`; + return { + name: "Softmax", + shaderCache: { hint: `${components}`, inputDependencies: ["type"] }, + getRunData: () => ({ + outputs: [{ dims: shape, dataType: input.dataType }], + dispatchGroup: { x: rows }, + programUniforms: [{ type: 6 /* int32 */, data: packedCols }] + }), + getShaderSource + }; + }; + softmax = (context, attributes) => { + validateInputs25(context.inputs); + context.compute(createSoftmaxProgramInfo(context.inputs[0], attributes)); + }; + parseSoftmaxAttributes = (attributes) => createAttributeWithCacheKey({ axis: attributes.axis }); + } +}); + +// web/lib/wasm/jsep/webgpu/ops/split.ts +var validateInputs26, createSplitAttributesFromInputs, calculateOutputIndexImpl, writeBufferDataImpl, createSplitProgramInfo, split, parseSplitAttributes; +var init_split = __esm({ + "web/lib/wasm/jsep/webgpu/ops/split.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_attribute_with_cache_key(); + init_common(); + validateInputs26 = (inputs) => { + if (!inputs || inputs.length < 1) { + throw new Error("too few inputs"); + } + }; + createSplitAttributesFromInputs = (inputs, attributes) => { + const splitSizes = []; + let numOutputs = attributes.numOutputs; + if (inputs[1].dims[0] > 0) { + inputs[1].getBigInt64Array().forEach((v) => splitSizes.push(Number(v))); + numOutputs = splitSizes.length; + } + return createAttributeWithCacheKey({ numOutputs, axis: attributes.axis, splitSizes }); + }; + calculateOutputIndexImpl = (numberOfTensors) => ` +fn calculateOutputIndex(index: u32) -> u32 { + for (var i: u32 = 0u; i < ${numberOfTensors}u; i += 1u ) { + if (index < ${getElementAt("uniforms.size_in_split_axis", "i", numberOfTensors)}) { + return i; + } + } + return ${numberOfTensors}u; +}`; + writeBufferDataImpl = (outputs) => { + const numberOfTensors = outputs.length; + const codeLines = []; + for (let i = 0; i < numberOfTensors; ++i) { + const returnSnippet = outputs[i].setByIndices("indices", "input[global_idx]"); + if (numberOfTensors === 1) { + codeLines.push(returnSnippet); + } else if (i === 0) { + codeLines.push(`if (output_number == ${i}u) { ${returnSnippet} }`); + } else if (i === numberOfTensors - 1) { + codeLines.push(`else { ${returnSnippet} }`); + } else { + codeLines.push(`else if (output_number == ${i}) { ${returnSnippet} }`); + } + } + return ` + fn writeBufferData(output_number: u32, indices: ${outputs[0].type.indices}, global_idx: u32) { + ${codeLines.join("\n")} + }`; + }; + createSplitProgramInfo = (inputs, attributes) => { + const inputShape = inputs[0].dims; + const inputSize = ShapeUtil.size(inputShape); + const dataType = inputs[0].dataType; + const axis = ShapeUtil.normalizeAxis(attributes.axis, inputShape.length); + const outputs = new Array(attributes.numOutputs); + const input = inputVariable("input", dataType, inputShape.length); + const sizeInSplitAxis = new Array(attributes.numOutputs); + const outputsTensorInfo = []; + const outputShapes = []; + let previousSum = 0; + const programUniforms = [{ type: 12 /* uint32 */, data: inputSize }]; + for (let i = 0; i < attributes.numOutputs; i++) { + previousSum += attributes.splitSizes[i]; + sizeInSplitAxis[i] = previousSum; + const outputShape = inputShape.slice(); + outputShape[attributes.axis] = attributes.splitSizes[i]; + outputShapes.push(outputShape); + outputs[i] = outputVariable(`output${i}`, dataType, outputShape.length); + outputsTensorInfo.push({ dims: outputShapes[i], dataType: inputs[0].dataType }); + } + programUniforms.push( + { type: 12 /* uint32 */, data: sizeInSplitAxis }, + ...createTensorShapeVariables(inputShape, ...outputShapes) + ); + const getShaderSource = (shaderHelper) => ` + ${shaderHelper.registerUniform("input_size", "u32").registerUniform("size_in_split_axis", "u32", sizeInSplitAxis.length).declareVariables(input, ...outputs)} + ${calculateOutputIndexImpl(sizeInSplitAxis.length)} + ${writeBufferDataImpl(outputs)} + + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.input_size")} + + var indices = ${input.offsetToIndices("global_idx")}; + var index = ${input.indicesGet("indices", axis)}; + let output_number = calculateOutputIndex(index); + if (output_number != 0) { + index -= ${getElementAt("uniforms.size_in_split_axis", "output_number - 1u", sizeInSplitAxis.length)}; + ${input.indicesSet("indices", axis, "index")}; + } + writeBufferData(output_number, indices, global_idx); + }`; + return { + name: "Split", + shaderCache: { hint: attributes.cacheKey, inputDependencies: ["rank"] }, + getShaderSource, + getRunData: () => ({ + outputs: outputsTensorInfo, + dispatchGroup: { x: Math.ceil( + inputSize / 64 + /* workgroup size */ + ) }, + programUniforms + }) + }; + }; + split = (context, attributes) => { + validateInputs26(context.inputs); + const updatedAttributes = context.inputs.length === 1 ? attributes : createSplitAttributesFromInputs(context.inputs, attributes); + context.compute(createSplitProgramInfo(context.inputs, updatedAttributes), { inputs: [0] }); + }; + parseSplitAttributes = (attributes) => { + const axis = attributes.axis; + const splitSizes = attributes.splitSizes; + const numOutputs = attributes.numOutputs < 0 ? splitSizes.length : attributes.numOutputs; + if (numOutputs !== splitSizes.length) { + throw new Error("numOutputs and splitSizes lengh must be equal"); + } + return createAttributeWithCacheKey({ axis, numOutputs, splitSizes }); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/tile.ts +var getRepeats, validateInputs27, getOutputShape2, createTileProgramInfo, tile; +var init_tile = __esm({ + "web/lib/wasm/jsep/webgpu/ops/tile.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + getRepeats = (repeatsTensorView) => Array.from(repeatsTensorView.getBigInt64Array(), Number); + validateInputs27 = (inputs) => { + if (!inputs || inputs.length !== 2) { + throw new Error("Tile requires 2 inputs."); + } + if (inputs[0].dataType !== 1 /* float */ && inputs[0].dataType !== 6 /* int32 */ && inputs[0].dataType !== 12 /* uint32 */) { + throw new Error("Tile only support float, int32, and uint32 data types"); + } + if (inputs[1].dataType !== 7 /* int64 */) { + throw new Error("Tile `repeats` input should be of int64 data type"); + } + if (inputs[1].dims.length !== 1) { + throw new Error("Tile `repeats` input should be 1-D"); + } + const repeats = getRepeats(inputs[1]); + if (repeats.length !== inputs[0].dims.length) { + throw new Error("Tile `repeats` input should have same number of elements as rank of input data tensor"); + } + }; + getOutputShape2 = (inputShape, repeats) => { + const outputShape = []; + for (let i = 0; i < inputShape.length; ++i) { + outputShape.push(inputShape[i] * repeats[i]); + } + return outputShape; + }; + createTileProgramInfo = (inputs) => { + const inputShape = inputs[0].dims; + const repeats = getRepeats(inputs[1]); + const outputShape = getOutputShape2(inputShape, repeats); + const outputSize = ShapeUtil.size(outputShape); + const dataType = inputs[0].dataType; + const input = inputVariable("input", dataType, inputShape.length); + const output = outputVariable("output", dataType, outputShape.length); + const getShaderSource = (shaderHelper) => ` + const inputShape = ${input.indices(...inputShape)}; + ${shaderHelper.registerUniform("output_size", "u32").declareVariables(input, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} + let output_indices = ${output.offsetToIndices("global_idx")}; + var input_indices: ${input.type.indices}; + for (var i = 0; i < ${inputShape.length}; i++) { + let input_dim_i = ${input.indicesGet("uniforms.input_shape", "i")}; + let input_dim_value = ${output.indicesGet("output_indices", "i")} % input_dim_i; + + ${input.indicesSet("input_indices", "i", "input_dim_value")} + } + ${output.setByOffset("global_idx", input.getByIndices("input_indices"))} + }`; + return { + name: "Tile", + shaderCache: { hint: `${repeats}`, inputDependencies: ["rank"] }, + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: inputs[0].dataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 + /* workgroup size */ + ) }, + programUniforms: [{ type: 12 /* uint32 */, data: outputSize }, ...createTensorShapeVariables(inputs[0].dims, outputShape)] + }), + getShaderSource + }; + }; + tile = (context) => { + validateInputs27(context.inputs); + context.compute(createTileProgramInfo(context.inputs), { inputs: [0] }); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/ops/where.ts +var createWhereOpProgramShader, createWhereOpProgramInfo, where; +var init_where = __esm({ + "web/lib/wasm/jsep/webgpu/ops/where.ts"() { + "use strict"; + init_wasm_common(); + init_util(); + init_common(); + createWhereOpProgramShader = (shaderHelper, inputs, dimsOutput, isBroadcast, typeOutput) => { + const output = outputVariable("output_data", typeOutput, dimsOutput.length, 4); + const a = inputVariable("a_data", inputs[1].dataType, inputs[1].dims.length, 4); + const b = inputVariable("b_data", inputs[2].dataType, inputs[2].dims.length, 4); + const c = inputVariable("c_data", inputs[0].dataType, inputs[0].dims.length, 4); + let assignment; + const expression = (a2, b2, c2) => `select(${b2}, ${a2}, ${c2})`; + if (!isBroadcast) { + assignment = output.setByOffset( + "global_idx", + expression(a.getByOffset("global_idx"), b.getByOffset("global_idx"), c.getByOffset("global_idx")) + ); + } else { + const singleAssignment = (resStr, x, typeCast = "") => { + const expressionA = `a_data[index_a${x}][component_a${x}]`; + const expressionB = `b_data[index_b${x}][component_b${x}]`; + const expressionC = `bool(c_data[index_c${x}] & (0xffu << (component_c${x} * 8)))`; + return ` + let output_indices${x} = ${output.offsetToIndices(`global_idx * 4u + ${x}u`)}; + let offset_a${x} = ${a.broadcastedIndicesToOffset(`output_indices${x}`, output)}; + let offset_b${x} = ${b.broadcastedIndicesToOffset(`output_indices${x}`, output)}; + let offset_c${x} = ${c.broadcastedIndicesToOffset(`output_indices${x}`, output)}; + let index_a${x} = offset_a${x} / 4u; + let index_b${x} = offset_b${x} / 4u; + let index_c${x} = offset_c${x} / 4u; + let component_a${x} = offset_a${x} % 4u; + let component_b${x} = offset_b${x} % 4u; + let component_c${x} = offset_c${x} % 4u; + ${resStr}[${x}] = ${typeCast}(${expression(expressionA, expressionB, expressionC)}); + `; + }; + if (typeOutput === 9 /* bool */) { + assignment = ` + var data = vec4(0); + ${singleAssignment("data", 0, "u32")} + ${singleAssignment("data", 1, "u32")} + ${singleAssignment("data", 2, "u32")} + ${singleAssignment("data", 3, "u32")} + output_data[global_idx] = dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(data));`; + } else { + assignment = ` + ${singleAssignment("output_data[global_idx]", 0)} + ${singleAssignment("output_data[global_idx]", 1)} + ${singleAssignment("output_data[global_idx]", 2)} + ${singleAssignment("output_data[global_idx]", 3)} + `; + } + } + return ` + ${shaderHelper.registerUniform("vec_size", "u32").declareVariables(c, a, b, output)} + ${shaderHelper.mainStart()} + ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} + ${assignment} + }`; + }; + createWhereOpProgramInfo = (inputs) => { + const dimsA = inputs[1].dims; + const dimsB = inputs[2].dims; + const dimsC = inputs[0].dims; + const outputDataType = inputs[1].dataType; + const isBroadcast = !(ShapeUtil.areEqual(dimsA, dimsB) && ShapeUtil.areEqual(dimsB, dimsC)); + let outputShape = dimsA; + let outputSize = ShapeUtil.size(dimsA); + if (isBroadcast) { + const calculatedShape = BroadcastUtil.calcShape(BroadcastUtil.calcShape(dimsA, dimsB, false), dimsC, false); + if (!calculatedShape) { + throw new Error("Can't perform where op on the given tensors"); + } + outputShape = calculatedShape; + outputSize = ShapeUtil.size(outputShape); + } + const vecSize = Math.ceil(outputSize / 4); + return { + name: "Where", + shaderCache: { inputDependencies: ["rank", "rank", "rank"] }, + getShaderSource: (shaderHelper) => createWhereOpProgramShader(shaderHelper, inputs, outputShape, isBroadcast, outputDataType), + getRunData: () => ({ + outputs: [{ dims: outputShape, dataType: outputDataType }], + dispatchGroup: { x: Math.ceil( + outputSize / 64 / 4 + /* vec size */ + ) }, + programUniforms: [{ type: 12 /* uint32 */, data: vecSize }, ...createTensorShapeVariables(dimsC, dimsA, dimsB, outputShape)] + }) + }; + }; + where = (context) => { + context.compute(createWhereOpProgramInfo(context.inputs)); + }; + } +}); + +// web/lib/wasm/jsep/webgpu/op-resolve-rules.ts +var WEBGPU_OP_RESOLVE_RULES; +var init_op_resolve_rules = __esm({ + "web/lib/wasm/jsep/webgpu/op-resolve-rules.ts"() { + "use strict"; + init_argminmax(); + init_attention(); + init_batch_norm(); + init_bias_add(); + init_bias_split_gelu(); + init_binary_op(); + init_concat(); + init_conv(); + init_conv_transpose(); + init_cumsum(); + init_depth_to_space(); + init_einsum(); + init_expand(); + init_fast_gelu(); + init_gather(); + init_gather_elements(); + init_gemm(); + init_instance_norm(); + init_layer_norm(); + init_matmul(); + init_matmulnbits(); + init_multihead_attentiion(); + init_pad(); + init_pool(); + init_range(); + init_reduce(); + init_resize(); + init_rotary_embedding(); + init_skip_layer_norm(); + init_slice(); + init_softmax(); + init_split(); + init_tile(); + init_transpose(); + init_unary_op(); + init_where(); + WEBGPU_OP_RESOLVE_RULES = /* @__PURE__ */ new Map([ + ["Abs", [abs]], + ["Acos", [acos]], + ["Acosh", [acosh]], + ["Add", [add]], + ["ArgMax", [argMax, parseArgMinMaxAttributes]], + ["ArgMin", [argMin, parseArgMinMaxAttributes]], + ["Asin", [asin]], + ["Asinh", [asinh]], + ["Atan", [atan]], + ["Atanh", [atanh]], + ["Attention", [attention]], + // TODO: support new attributes for AveragePool-10 + ["AveragePool", [averagePool, parseAveragePoolAttributes]], + ["BatchNormalization", [batchNorm]], + ["BiasAdd", [biasAdd]], + ["BiasSplitGelu", [biasSplitGelu]], + ["Cast", [cast, parseCastAttributes]], + ["Ceil", [ceil]], + ["Clip", [clip]], + ["Concat", [concat, parseConcatAttributes]], + ["Conv", [conv, parseConvAttributes]], + ["ConvTranspose", [convTranspose, parseConvTransposeAttributes]], + ["Cos", [cos]], + ["Cosh", [cosh]], + ["CumSum", [cumsum, parseCumSumAttributes]], + ["DepthToSpace", [depthToSpace, parseDepthToSpaceAttributes]], + ["Div", [div]], + ["Einsum", [einsum, parseEinsumAttributes]], + ["Elu", [elu, parseAlphaAttributes]], + ["Equal", [equal]], + ["Erf", [erf]], + ["Exp", [exp]], + ["Expand", [expand]], + ["FastGelu", [fastGelu2]], + ["Floor", [floor]], + ["FusedConv", [conv, parseConvAttributes]], + ["Gather", [gather, parseGatherAttributes]], + ["GatherElements", [gatherElements, parseGatherElementsAttributes]], + ["Gelu", [gelu]], + ["Gemm", [gemm, parseGemmAttributes]], + ["GlobalAveragePool", [globalAveragePool, parseGlobalAveragePoolAttributes]], + ["GlobalMaxPool", [globalMaxPool, parseGlobalMaxPoolAttributes]], + ["Greater", [greater]], + ["GreaterOrEqual", [greaterOrEqual]], + ["HardSigmoid", [hardSigmoid, parseHardSigmoidAttributes]], + ["InstanceNormalization", [instanceNorm]], + ["LayerNormalization", [layerNorm]], + ["LeakyRelu", [leakyRelu, parseAlphaAttributes]], + ["Less", [less]], + ["LessOrEqual", [lessOrEqual]], + ["Log", [log]], + ["MatMul", [matMul]], + ["MatMulNBits", [matMulNBits, parseMatMulNBitsAttributes]], + // TODO: support new attributes for MaxPool-8 and MaxPool-10 + ["MaxPool", [maxPool, parseMaxPoolAttributes]], + ["Mul", [mul]], + ["MultiHeadAttention", [multiHeadAttention, parseMultiHeadAttentionAttributes]], + ["Neg", [neg]], + ["Not", [not]], + ["Pad", [pad]], + ["Pow", [pow]], + ["Range", [range]], + ["Reciprocal", [reciprocal]], + ["ReduceMin", [reduceMin]], + ["ReduceMean", [reduceMean]], + ["ReduceMax", [reduceMax]], + ["ReduceSum", [reduceSum]], + ["ReduceProd", [reduceProd]], + ["ReduceL1", [reduceL1]], + ["ReduceL2", [reduceL2]], + ["ReduceLogSum", [reduceLogSum]], + ["ReduceLogSumExp", [reduceLogSumExp]], + ["ReduceSumSquare", [reduceSumSquare]], + ["Relu", [relu]], + ["Resize", [resize, parseResizeAttributes]], + ["RotaryEmbedding", [rotaryEmbedding]], + ["Sigmoid", [sigmoid]], + ["Sin", [sin]], + ["Sinh", [sinh]], + ["Slice", [slice, parseSliceAttributes]], + ["SkipLayerNormalization", [skipLayerNorm]], + ["Split", [split, parseSplitAttributes]], + ["Sqrt", [sqrt]], + ["Softmax", [softmax, parseSoftmaxAttributes]], + ["Sub", [sub]], + ["Tan", [tan]], + ["Tanh", [tanh]], + ["ThresholdedRelu", [thresholdedRelu, parseAlphaAttributes]], + ["Tile", [tile]], + ["Transpose", [transpose, parseTransposeAttributes]], + ["Where", [where]] + ]); + } +}); + +// web/lib/wasm/jsep/webgpu/program-manager.ts +var ProgramManager; +var init_program_manager = __esm({ + "web/lib/wasm/jsep/webgpu/program-manager.ts"() { + "use strict"; + init_esm(); + init_log(); + init_common(); + ProgramManager = class { + constructor(backend) { + this.backend = backend; + this.repo = /* @__PURE__ */ new Map(); + this.attributesBound = false; + } + getArtifact(key) { + return this.repo.get(key); + } + setArtifact(key, artifact) { + this.repo.set(key, artifact); + } + run(buildArtifact, inputs, outputs, dispatchGroup, uniformBufferBinding) { + TRACE_FUNC_BEGIN(buildArtifact.programInfo.name); + const device = this.backend.device; + const computePassEncoder = this.backend.getComputePassEncoder(); + this.backend.writeTimestamp(this.backend.pendingDispatchNumber * 2); + const entries = []; + for (const input of inputs) { + entries.push({ binding: entries.length, resource: { buffer: input.buffer } }); + } + for (const output of outputs) { + entries.push({ binding: entries.length, resource: { buffer: output.buffer } }); + } + if (uniformBufferBinding) { + entries.push({ binding: entries.length, resource: uniformBufferBinding }); + } + const bindGroup = device.createBindGroup( + { layout: buildArtifact.computePipeline.getBindGroupLayout(0), entries, label: buildArtifact.programInfo.name } + ); + if (this.backend.sessionStatus === "capturing") { + const commandInfo = { + kernelId: this.backend.currentKernelId, + computePipeline: buildArtifact.computePipeline, + bindGroup, + dispatchGroup + }; + const sessionCommandList = this.backend.capturedCommandList.get(this.backend.currentSessionId); + sessionCommandList.push(commandInfo); + } + computePassEncoder.setPipeline(buildArtifact.computePipeline); + computePassEncoder.setBindGroup(0, bindGroup); + computePassEncoder.dispatchWorkgroups(...dispatchGroup); + this.backend.writeTimestamp(this.backend.pendingDispatchNumber * 2 + 1); + this.backend.pendingDispatchNumber++; + if (this.backend.pendingDispatchNumber >= this.backend.maxDispatchNumber || this.backend.queryType === "at-passes") { + this.backend.endComputePass(); + } + if (this.backend.pendingDispatchNumber >= this.backend.maxDispatchNumber) { + this.backend.flush(); + } + TRACE_FUNC_END(buildArtifact.programInfo.name); + } + dispose() { + } + build(programInfo, normalizedDispatchGroupSize) { + TRACE_FUNC_BEGIN(programInfo.name); + const device = this.backend.device; + const extensions = []; + if (device.features.has("shader-f16")) { + extensions.push("enable f16;"); + } + const shaderHelper = createShaderHelper(normalizedDispatchGroupSize, this.backend.device.limits); + const userCode = programInfo.getShaderSource(shaderHelper); + const code = `${extensions.join("\n")} +${shaderHelper.additionalImplementations} +${userCode}`; + const shaderModule = device.createShaderModule({ code, label: programInfo.name }); + LOG_DEBUG("verbose", () => `[WebGPU] ${programInfo.name} shader code: ${code}`); + const computePipeline = device.createComputePipeline( + { compute: { module: shaderModule, entryPoint: "main" }, layout: "auto", label: programInfo.name } + ); + TRACE_FUNC_END(programInfo.name); + return { programInfo, computePipeline, uniformVariablesInfo: shaderHelper.variablesInfo }; + } + normalizeDispatchGroupSize(dispatchGroup) { + const x = typeof dispatchGroup === "number" ? dispatchGroup : dispatchGroup.x; + const y = typeof dispatchGroup === "number" ? 1 : dispatchGroup.y || 1; + const z = typeof dispatchGroup === "number" ? 1 : dispatchGroup.z || 1; + const limitPerDimension = this.backend.device.limits.maxComputeWorkgroupsPerDimension; + if (x <= limitPerDimension && y <= limitPerDimension && z <= limitPerDimension) { + return [x, y, z]; + } + const size = x * y * z; + let dispatchAverage = Math.ceil(Math.sqrt(size)); + if (dispatchAverage > limitPerDimension) { + dispatchAverage = Math.ceil(Math.cbrt(size)); + if (dispatchAverage > limitPerDimension) { + throw new Error("Total dispatch size exceeds WebGPU maximum."); + } + return [dispatchAverage, dispatchAverage, dispatchAverage]; + } else { + return [dispatchAverage, dispatchAverage, 1]; + } + } + }; + } +}); + +// web/lib/wasm/jsep/backend-webgpu.ts +var getProgramInputTensorInfoDependencyKey, getProgramInfoUniqueKey, AdapterInfoImpl, WebGpuBackend; +var init_backend_webgpu = __esm({ + "web/lib/wasm/jsep/backend-webgpu.ts"() { + "use strict"; + init_esm(); + init_wasm_common(); + init_log(); + init_tensor_view(); + init_gpu_data_manager(); + init_op_resolve_rules(); + init_program_manager(); + getProgramInputTensorInfoDependencyKey = (inputTensors, inputDependencies) => { + if (inputDependencies.length !== inputTensors.length) { + throw new Error(`inputDependencies length ${inputDependencies.length} is not equal to inputTensors length ${inputTensors.length}.`); + } + const inputInfos = []; + for (let i = 0; i < inputTensors.length; ++i) { + const type = inputTensors[i].dataType; + switch (inputDependencies[i]) { + case "none": { + inputInfos.push(""); + break; + } + case "type": { + inputInfos.push(`${type}`); + break; + } + case "rank": { + const rank = inputTensors[i].dims.length; + inputInfos.push(`${type};${rank}`); + break; + } + case "dims": { + const dims = inputTensors[i].dims.join(","); + inputInfos.push(`${type};${dims}`); + break; + } + default: + throw new Error(`unsupported input dependency: ${inputDependencies[i]}`); + } + } + return inputInfos.join("|"); + }; + getProgramInfoUniqueKey = (programInfo, inputTensors, is1DimensionDispatch) => { + let key = programInfo.name; + if (programInfo.shaderCache?.hint) { + key += "[" + programInfo.shaderCache.hint + "]"; + } + key += ":" + is1DimensionDispatch + `:${getProgramInputTensorInfoDependencyKey( + inputTensors, + programInfo.shaderCache?.inputDependencies ?? new Array(inputTensors.length).fill("dims") + )}`; + return key; + }; + AdapterInfoImpl = class { + constructor(adapterInfo) { + if (adapterInfo) { + this.architecture = adapterInfo.architecture; + this.vendor = adapterInfo.vendor; + } + } + isArchitecture(architecture) { + return this.architecture === architecture; + } + isVendor(vendor) { + return this.vendor === vendor; + } + }; + WebGpuBackend = class { + constructor() { + /** + * representing the session ID of which is currently being run. + * `null` means no session is being run. + * only valid when session.run is executed. + */ + this.currentSessionId = null; + /** + * representing the kernel ID of which is currently being computed (CPU code perspective). + * `null` means no kernel is being computed. + * only one kernel can be computed at a moment. + */ + this.currentKernelId = null; + this.commandEncoder = null; + this.computePassEncoder = null; + this.maxDispatchNumber = 16; + this.pendingDispatchNumber = 0; + // info of kernels pending submission for a single batch + this.pendingKernels = []; + // queryReadBuffer -> pendingKernels mapping for all the batches + this.pendingQueries = /* @__PURE__ */ new Map(); + this.sessionStatus = "default"; + /** + * a SessionID -> CommandInfo[] mapping. It's used to record all GPU commands for corresponding session. + */ + this.capturedCommandList = /* @__PURE__ */ new Map(); + /** + * a SessionID -> PendingKernelInfo[] mapping for profiling. + */ + this.capturedPendingKernels = /* @__PURE__ */ new Map(); + /** + * a SessionID -> a Map of (InputOutputIndex -> [ID, GPUBuffer]) mapping. + */ + this.sessionExternalDataMapping = /* @__PURE__ */ new Map(); + } + /** + * get the custom data of the current kernel + */ + get currentKernelCustomData() { + if (this.currentKernelId === null) { + throw new Error("currentKernelCustomData(): currentKernelId is null. (should not happen)"); + } + let data = this.kernelCustomData.get(this.currentKernelId); + if (!data) { + data = {}; + this.kernelCustomData.set(this.currentKernelId, data); + } + return data; + } + async initialize(env3, adapter) { + this.env = env3; + const requiredFeatures = []; + const deviceDescriptor = { + requiredLimits: { + maxComputeWorkgroupStorageSize: adapter.limits.maxComputeWorkgroupStorageSize, + maxComputeWorkgroupsPerDimension: adapter.limits.maxComputeWorkgroupsPerDimension, + maxStorageBufferBindingSize: adapter.limits.maxStorageBufferBindingSize, + maxBufferSize: adapter.limits.maxBufferSize, + maxComputeInvocationsPerWorkgroup: adapter.limits.maxComputeInvocationsPerWorkgroup, + maxComputeWorkgroupSizeX: adapter.limits.maxComputeWorkgroupSizeX, + maxComputeWorkgroupSizeY: adapter.limits.maxComputeWorkgroupSizeY, + maxComputeWorkgroupSizeZ: adapter.limits.maxComputeWorkgroupSizeZ + }, + requiredFeatures + }; + if (adapter.features.has("chromium-experimental-timestamp-query-inside-passes")) { + requiredFeatures.push("chromium-experimental-timestamp-query-inside-passes"); + } else if (adapter.features.has("timestamp-query")) { + requiredFeatures.push("timestamp-query"); + } + if (adapter.features.has("shader-f16")) { + requiredFeatures.push("shader-f16"); + } + this.device = await adapter.requestDevice(deviceDescriptor); + this.adapterInfo = new AdapterInfoImpl(await adapter.requestAdapterInfo()); + this.gpuDataManager = createGpuDataManager(this); + this.programManager = new ProgramManager(this); + this.kernels = /* @__PURE__ */ new Map(); + this.kernelPersistentData = /* @__PURE__ */ new Map(); + this.kernelCustomData = /* @__PURE__ */ new Map(); + configureLogger(env3.logLevel, !!env3.debug); + this.device.onuncapturederror = (ev) => { + if (ev.error instanceof GPUValidationError) { + console.error(`An uncaught WebGPU validation error was raised: ${ev.error.message}`); + } + }; + Object.defineProperty( + this.env.webgpu, + "device", + { value: this.device, writable: false, enumerable: true, configurable: false } + ); + Object.defineProperty( + this.env.webgpu, + "adapter", + { value: adapter, writable: false, enumerable: true, configurable: false } + ); + this.setQueryType(); + } + dispose() { + if (typeof this.querySet !== "undefined") { + this.querySet.destroy(); + } + this.gpuDataManager.dispose(); + } + getCommandEncoder() { + if (!this.commandEncoder) { + this.commandEncoder = this.device.createCommandEncoder(); + } + return this.commandEncoder; + } + getComputePassEncoder() { + if (!this.computePassEncoder) { + const commandEncoder = this.getCommandEncoder(); + const computePassDescriptor = {}; + if (this.queryType === "at-passes") { + computePassDescriptor.timestampWrites = { + querySet: this.querySet, + beginningOfPassWriteIndex: this.pendingDispatchNumber * 2, + endOfPassWriteIndex: this.pendingDispatchNumber * 2 + 1 + }; + } + this.computePassEncoder = commandEncoder.beginComputePass(computePassDescriptor); + } + return this.computePassEncoder; + } + endComputePass() { + if (this.computePassEncoder) { + this.computePassEncoder.end(); + this.computePassEncoder = null; + } + } + flush() { + if (!this.commandEncoder) { + return; + } + TRACE_FUNC_BEGIN(); + this.endComputePass(); + let queryReadBuffer; + if (this.queryType !== "none") { + this.commandEncoder.resolveQuerySet( + this.querySet, + 0, + this.pendingDispatchNumber * 2, + this.queryResolveBuffer, + 0 + ); + queryReadBuffer = this.device.createBuffer( + // eslint-disable-next-line no-bitwise + { size: this.pendingDispatchNumber * 2 * 8, usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST } + ); + this.pendingQueries.set(queryReadBuffer, this.pendingKernels); + this.pendingKernels = []; + this.commandEncoder.copyBufferToBuffer( + this.queryResolveBuffer, + 0, + queryReadBuffer, + 0, + this.pendingDispatchNumber * 2 * 8 + ); + } + this.device.queue.submit([this.commandEncoder.finish()]); + this.gpuDataManager.refreshPendingBuffers(); + this.commandEncoder = null; + this.pendingDispatchNumber = 0; + if (this.queryType !== "none") { + void queryReadBuffer.mapAsync(GPUMapMode.READ).then(() => { + const mappedData = new BigUint64Array(queryReadBuffer.getMappedRange()); + const pendingKernels = this.pendingQueries.get(queryReadBuffer); + for (let i = 0; i < mappedData.length / 2; i++) { + const pendingKernelInfo = pendingKernels[i]; + const kernelId = pendingKernelInfo.kernelId; + const kernelInfo = this.kernels.get(kernelId); + const kernelType = kernelInfo.kernelType; + const kernelName = kernelInfo.kernelName; + const programName = pendingKernelInfo.programName; + const inputTensorViews = pendingKernelInfo.inputTensorViews; + const outputTensorViews = pendingKernelInfo.outputTensorViews; + const startTimeU64 = mappedData[i * 2]; + const endTimeU64 = mappedData[i * 2 + 1]; + if (typeof this.queryTimeBase === "undefined") { + this.queryTimeBase = startTimeU64; + } + const startTime = Number(startTimeU64 - this.queryTimeBase); + const endTime = Number(endTimeU64 - this.queryTimeBase); + if (!Number.isSafeInteger(startTime) || !Number.isSafeInteger(endTime)) { + throw new RangeError("incorrect timestamp range"); + } + if (this.env.webgpu.profiling?.ondata) { + this.env.webgpu.profiling.ondata({ + version: 1, + inputsMetadata: inputTensorViews.map( + (value) => ({ dims: value.dims, dataType: tensorDataTypeEnumToString(value.dataType) }) + ), + outputsMetadata: outputTensorViews.map( + (value) => ({ dims: value.dims, dataType: tensorDataTypeEnumToString(value.dataType) }) + ), + kernelId, + kernelType, + kernelName, + programName, + startTime, + endTime + }); + } else { + let inputShapes = ""; + inputTensorViews.forEach((value, i2) => { + inputShapes += `input[${i2}]: [${value.dims}] | ${tensorDataTypeEnumToString(value.dataType)}, `; + }); + let outputShapes = ""; + outputTensorViews.forEach((value, i2) => { + outputShapes += `output[${i2}]: [${value.dims}] | ${tensorDataTypeEnumToString(value.dataType)}, `; + }); + console.log(`[profiling] kernel "${kernelId}|${kernelType}|${kernelName}|${programName}" ${inputShapes}${outputShapes}execution time: ${endTime - startTime} ns`); + } + TRACE("GPU", `${programName}::${startTimeU64}::${endTimeU64}`); + } + queryReadBuffer.unmap(); + this.pendingQueries.delete(queryReadBuffer); + }); + } + TRACE_FUNC_END(); + } + /** + * run a WebGPU program. + * @param program a ProgramInfo instance + * @param inputTensorViews a TensorView array. each element represents a value already exists in GPU. + * @param outputIndices an indices array. each element can be either -1 (temporary data), -2 (persistent data) or an + * index to the kernel's output. + * @param createKernelOutput a callback function that create a value to kernel's output with the given index + * @param createIntermediateOutput a callback function that create a value as a intermediate value, either temporary + * or persistent (owned by the current kernel) + * @returns a TensorView array representing the result. + */ + run(program, inputTensorViews, outputIndices, createKernelOutput, createIntermediateOutput, outputCount) { + TRACE_FUNC_BEGIN(program.name); + const inputDatas = []; + for (let i = 0; i < inputTensorViews.length; ++i) { + const data = inputTensorViews[i].data; + if (data === 0) { + continue; + } + const gpuData = this.gpuDataManager.get(data); + if (!gpuData) { + throw new Error(`no GPU data for input: ${data}`); + } + inputDatas.push(gpuData); + } + const { outputs, dispatchGroup, programUniforms } = program.getRunData(inputTensorViews); + const validatedOutputIndices = outputIndices.length === 0 ? outputs.map((_, i) => i) : outputIndices; + if (validatedOutputIndices.length !== outputs.length) { + throw new Error(`Output size ${validatedOutputIndices.length} must be equal to ${outputs.length}.`); + } + const outputTensorViews = []; + const outputDatas = []; + for (let i = 0; i < outputs.length; ++i) { + if (!Number.isInteger(validatedOutputIndices[i]) || validatedOutputIndices[i] < -3 || validatedOutputIndices[i] >= outputCount) { + throw new Error(`Invalid output index: ${validatedOutputIndices[i]}`); + } + if (validatedOutputIndices[i] === -3) { + continue; + } + const isTemporary = validatedOutputIndices[i] === -1; + const isPersistent = validatedOutputIndices[i] === -2; + const tensorView = isTemporary || isPersistent ? createIntermediateOutput(outputs[i].dataType, outputs[i].dims) : createKernelOutput(validatedOutputIndices[i], outputs[i].dataType, outputs[i].dims); + outputTensorViews.push(tensorView); + if (tensorView.data === 0) { + continue; + } + const gpuData = this.gpuDataManager.get(tensorView.data); + if (!gpuData) { + throw new Error(`no GPU data for output: ${tensorView.data}`); + } + if (isTemporary) { + this.temporaryData.push(gpuData); + } + if (isPersistent) { + let persistentData = this.kernelPersistentData.get(this.currentKernelId); + if (!persistentData) { + persistentData = []; + this.kernelPersistentData.set(this.currentKernelId, persistentData); + } + persistentData.push(gpuData); + } + outputDatas.push(gpuData); + } + if (inputDatas.length !== inputTensorViews.length || outputDatas.length !== outputTensorViews.length) { + if (outputDatas.length === 0) { + TRACE_FUNC_END(program.name); + return outputTensorViews; + } + throw new Error( + `Program ${program.name} has zero-sized tensor(s) in inputs or outputs. This is not supported now.` + ); + } + let uniformBufferBinding; + if (programUniforms) { + let currentOffset = 0; + const offsets = []; + programUniforms.forEach((v) => { + const data = typeof v.data === "number" ? [v.data] : v.data; + if (data.length === 0) { + return; + } + const sizeOfElement = v.type === 10 /* float16 */ ? 2 : 4; + let sizeOfVecOrMat; + let baseAlignment; + if (v.type === 10 /* float16 */) { + baseAlignment = data.length > 4 ? 16 : data.length > 2 ? 8 : data.length * sizeOfElement; + sizeOfVecOrMat = data.length > 4 ? 16 : sizeOfElement * data.length; + } else { + baseAlignment = data.length <= 2 ? data.length * sizeOfElement : 16; + sizeOfVecOrMat = 16; + } + currentOffset = Math.ceil(currentOffset / baseAlignment) * baseAlignment; + offsets.push(currentOffset); + const elementPerVecOrMat = v.type === 10 /* float16 */ ? 8 : 4; + currentOffset += data.length > 4 ? Math.ceil(data.length / elementPerVecOrMat) * sizeOfVecOrMat : data.length * sizeOfElement; + }); + const maxAlignmentOfField = 16; + currentOffset = Math.ceil(currentOffset / maxAlignmentOfField) * maxAlignmentOfField; + const arrayBuffer = new ArrayBuffer(currentOffset); + programUniforms.forEach((v, i) => { + const offset = offsets[i]; + const data = typeof v.data === "number" ? [v.data] : v.data; + if (v.type === 6 /* int32 */) { + new Int32Array(arrayBuffer, offset, data.length).set(data); + } else if (v.type === 12 /* uint32 */) { + new Uint32Array(arrayBuffer, offset, data.length).set(data); + } else if (v.type === 10 /* float16 */) { + new Uint16Array(arrayBuffer, offset, data.length).set(data); + } else if (v.type === 1 /* float */) { + new Float32Array(arrayBuffer, offset, data.length).set(data); + } else { + throw new Error(`Unsupported uniform type: ${tensorDataTypeEnumToString(v.type)}`); + } + }); + const uniformBufferData = ( + // eslint-disable-next-line no-bitwise + this.gpuDataManager.create(currentOffset, GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM) + ); + this.device.queue.writeBuffer(uniformBufferData.buffer, 0, arrayBuffer, 0, currentOffset); + this.gpuDataManager.release(uniformBufferData.id); + uniformBufferBinding = { offset: 0, size: currentOffset, buffer: uniformBufferData.buffer }; + } + const normalizedDispatchGroup = this.programManager.normalizeDispatchGroupSize(dispatchGroup); + const is1DimensionDispatch = normalizedDispatchGroup[1] === 1 && normalizedDispatchGroup[2] === 1; + const key = getProgramInfoUniqueKey(program, inputTensorViews, is1DimensionDispatch); + let artifact = this.programManager.getArtifact(key); + if (!artifact) { + artifact = this.programManager.build(program, normalizedDispatchGroup); + this.programManager.setArtifact(key, artifact); + LOG_DEBUG("info", () => `[artifact] key: ${key}, programName: ${program.name}`); + } + if (programUniforms && artifact.uniformVariablesInfo) { + if (programUniforms.length !== artifact.uniformVariablesInfo.length) { + throw new Error(`Uniform variables count mismatch: expect ${artifact.uniformVariablesInfo.length}, got ${programUniforms.length} in program "${artifact.programInfo.name}".`); + } + for (let i = 0; i < programUniforms.length; i++) { + const uniform = programUniforms[i]; + const actualType = uniform.type; + const actualLength = typeof uniform.data === "number" ? 1 : uniform.data.length; + const [type, length] = artifact.uniformVariablesInfo[i]; + if (actualType !== type || actualLength !== length) { + throw new Error(`Uniform variable ${i} mismatch: expect type ${type} with size ${length}, got type ${actualType} with size ${actualLength} in program "${artifact.programInfo.name}".`); + } + } + } + LOG_DEBUG( + "info", + () => `[ProgramManager] run "${program.name}" (key=${key}) with ${normalizedDispatchGroup[0]}x${normalizedDispatchGroup[1]}x${normalizedDispatchGroup[2]}` + ); + if (this.queryType !== "none" || this.sessionStatus === "capturing") { + const pendingKernelInfo = { + kernelId: this.currentKernelId, + programName: artifact.programInfo.name, + inputTensorViews, + outputTensorViews + }; + this.pendingKernels.push(pendingKernelInfo); + if (this.sessionStatus === "capturing") { + const sessionPendingKernels = this.capturedPendingKernels.get(this.currentSessionId); + sessionPendingKernels.push(pendingKernelInfo); + } + } + this.programManager.run(artifact, inputDatas, outputDatas, normalizedDispatchGroup, uniformBufferBinding); + TRACE_FUNC_END(program.name); + return outputTensorViews; + } + upload(gpuDataId, data) { + this.gpuDataManager.upload(gpuDataId, data); + } + memcpy(src, dst) { + this.gpuDataManager.memcpy(src, dst); + } + async download(gpuDataId, getTargetBuffer) { + await this.gpuDataManager.download(gpuDataId, getTargetBuffer); + } + alloc(size) { + return this.gpuDataManager.create(size).id; + } + free(ptr) { + return this.gpuDataManager.release(ptr); + } + createKernel(kernelType, kernelId, attribute, kernelName) { + const op = WEBGPU_OP_RESOLVE_RULES.get(kernelType); + if (!op) { + throw new Error(`kernel not implemented: ${kernelType}`); + } + const kernelInfo = { + kernelType, + kernelName, + kernelEntry: op[0], + attributes: [op[1], attribute] + }; + this.kernels.set(kernelId, kernelInfo); + } + releaseKernel(kernelId) { + const persistentData = this.kernelPersistentData.get(kernelId); + if (persistentData) { + for (const data of persistentData) { + this.gpuDataManager.release(data.id); + } + this.kernelPersistentData.delete(kernelId); + } + this.kernelCustomData.delete(kernelId); + this.kernels.delete(kernelId); + } + computeKernel(kernelId, context, errors) { + const kernel = this.kernels.get(kernelId); + if (!kernel) { + throw new Error(`kernel not created: ${kernelId}`); + } + const kernelType = kernel.kernelType; + const kernelName = kernel.kernelName; + const kernelEntry = kernel.kernelEntry; + const attributes = kernel.attributes; + if (this.currentKernelId !== null) { + throw new Error(`kernel "[${kernelType}] ${kernelName}" is not allowed to be called recursively`); + } + this.currentKernelId = kernelId; + if (attributes[0]) { + attributes[1] = attributes[0](attributes[1]); + attributes[0] = void 0; + } + LOG_DEBUG("info", () => `[WebGPU] Start to run kernel "[${kernelType}] ${kernelName}"...`); + const useErrorScope = this.env.debug; + this.temporaryData = []; + try { + if (useErrorScope) { + this.device.pushErrorScope("validation"); + } + kernelEntry(context, attributes[1]); + return 0; + } catch (e) { + errors.push(Promise.resolve(`[WebGPU] Kernel "[${kernelType}] ${kernelName}" failed. ${e}`)); + return 1; + } finally { + if (useErrorScope) { + errors.push(this.device.popErrorScope().then( + (err) => err ? `GPU validation error for kernel "[${kernelType}] ${kernelName}": ${err.message}` : null + )); + } + for (const data of this.temporaryData) { + this.gpuDataManager.release(data.id); + } + this.temporaryData = []; + this.currentKernelId = null; + } + } + // #region external buffer + registerBuffer(sessionId, index, buffer, size) { + let sessionInputOutputMapping = this.sessionExternalDataMapping.get(sessionId); + if (!sessionInputOutputMapping) { + sessionInputOutputMapping = /* @__PURE__ */ new Map(); + this.sessionExternalDataMapping.set(sessionId, sessionInputOutputMapping); + } + const previousBuffer = sessionInputOutputMapping.get(index); + const id = this.gpuDataManager.registerExternalBuffer(buffer, size, previousBuffer?.[1]); + sessionInputOutputMapping.set(index, [id, buffer]); + return id; + } + unregisterBuffers(sessionId) { + const sessionInputOutputMapping = this.sessionExternalDataMapping.get(sessionId); + if (sessionInputOutputMapping) { + sessionInputOutputMapping.forEach((bufferInfo) => this.gpuDataManager.unregisterExternalBuffer(bufferInfo[1])); + this.sessionExternalDataMapping.delete(sessionId); + } + } + getBuffer(gpuDataId) { + const gpuData = this.gpuDataManager.get(gpuDataId); + if (!gpuData) { + throw new Error(`no GPU data for buffer: ${gpuDataId}`); + } + return gpuData.buffer; + } + createDownloader(gpuBuffer, size, type) { + return async () => { + const data = await downloadGpuData(this, gpuBuffer, size); + return createView(data.buffer, type); + }; + } + // #endregion + writeTimestamp(index) { + if (this.queryType !== "inside-passes") { + return; + } + this.computePassEncoder.writeTimestamp(this.querySet, index); + } + setQueryType() { + this.queryType = "none"; + if (this.env.webgpu.profiling?.mode === "default" || (typeof this.env.trace === "undefined" ? this.env.wasm.trace : this.env.trace)) { + if (this.device.features.has("chromium-experimental-timestamp-query-inside-passes")) { + this.queryType = "inside-passes"; + } else if (this.device.features.has("timestamp-query")) { + this.queryType = "at-passes"; + } + if (this.queryType !== "none" && typeof this.querySet === "undefined") { + this.querySet = this.device.createQuerySet({ + type: "timestamp", + count: this.maxDispatchNumber * 2 + }); + this.queryResolveBuffer = this.device.createBuffer( + // eslint-disable-next-line no-bitwise + { size: this.maxDispatchNumber * 2 * 8, usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.QUERY_RESOLVE } + ); + } + } + } + captureBegin() { + LOG_DEBUG("info", "captureBegin"); + if (!this.capturedCommandList.get(this.currentSessionId)) { + this.capturedCommandList.set(this.currentSessionId, []); + } + if (!this.capturedPendingKernels.get(this.currentSessionId)) { + this.capturedPendingKernels.set(this.currentSessionId, []); + } + this.flush(); + this.sessionStatus = "capturing"; + } + captureEnd() { + LOG_DEBUG("info", "captureEnd"); + this.flush(); + this.sessionStatus = "default"; + } + replay() { + LOG_DEBUG("info", "replay"); + this.sessionStatus = "replaying"; + const sessionCommandList = this.capturedCommandList.get(this.currentSessionId); + const sessionPendingKernels = this.capturedPendingKernels.get(this.currentSessionId); + const length = sessionCommandList.length; + this.pendingKernels = []; + for (let i = 0; i < length; i++) { + const computePassEncoder = this.getComputePassEncoder(); + const command = sessionCommandList[i]; + this.writeTimestamp(this.pendingDispatchNumber * 2); + computePassEncoder.setPipeline(command.computePipeline); + computePassEncoder.setBindGroup(0, command.bindGroup); + computePassEncoder.dispatchWorkgroups(...command.dispatchGroup); + this.writeTimestamp(this.pendingDispatchNumber * 2 + 1); + this.pendingDispatchNumber++; + if (this.queryType !== "none") { + this.pendingKernels.push(sessionPendingKernels[i]); + } + if (this.pendingDispatchNumber >= this.maxDispatchNumber || this.queryType === "at-passes") { + this.endComputePass(); + } + if (this.pendingDispatchNumber >= this.maxDispatchNumber) { + this.flush(); + } + } + this.flush(); + this.sessionStatus = "default"; + } + onReleaseSession(sessionId) { + this.unregisterBuffers(sessionId); + if (this.capturedCommandList.has(sessionId)) { + this.capturedCommandList.delete(sessionId); + } + if (this.capturedPendingKernels.has(sessionId)) { + this.capturedPendingKernels.delete(sessionId); + } + this.gpuDataManager.onReleaseSession(sessionId); + } + onRunStart(sessionId) { + this.currentSessionId = sessionId; + this.setQueryType(); + } + }; + } +}); + +// web/lib/wasm/jsep/init.ts +var init_exports = {}; +__export(init_exports, { + init: () => init +}); +var TensorViewImpl, ComputeContextImpl, init; +var init_init = __esm({ + "web/lib/wasm/jsep/init.ts"() { + "use strict"; + init_wasm_common(); + init_backend_webgpu(); + init_log(); + init_util(); + TensorViewImpl = class _TensorViewImpl { + constructor(module, dataType, data, dims) { + this.module = module; + this.dataType = dataType; + this.data = data; + this.dims = dims; + } + getFloat32Array() { + if (this.dataType !== 1 /* float */) { + throw new Error("Invalid data type"); + } + const elementCount = ShapeUtil.size(this.dims); + return elementCount === 0 ? new Float32Array() : new Float32Array(this.module.HEAP8.buffer, this.data, elementCount); + } + getBigInt64Array() { + if (this.dataType !== 7 /* int64 */) { + throw new Error("Invalid data type"); + } + const elementCount = ShapeUtil.size(this.dims); + return elementCount === 0 ? new BigInt64Array() : new BigInt64Array(this.module.HEAP8.buffer, this.data, elementCount); + } + getInt32Array() { + if (this.dataType !== 6 /* int32 */) { + throw new Error("Invalid data type"); + } + const elementCount = ShapeUtil.size(this.dims); + return elementCount === 0 ? new Int32Array() : new Int32Array(this.module.HEAP8.buffer, this.data, elementCount); + } + reshape(newDims) { + if (ShapeUtil.size(newDims) !== ShapeUtil.size(this.dims)) { + throw new Error("Invalid new shape"); + } + return new _TensorViewImpl(this.module, this.dataType, this.data, newDims); + } + }; + ComputeContextImpl = class { + constructor(module, backend, contextDataOffset) { + this.module = module; + this.backend = backend; + this.customDataOffset = 0; + this.customDataSize = 0; + this.adapterInfo = backend.adapterInfo; + const heapU32 = module.HEAPU32; + let dataIndex = contextDataOffset >>> 2; + this.opKernelContext = heapU32[dataIndex++]; + const inputCount = heapU32[dataIndex++]; + this.outputCount = heapU32[dataIndex++]; + this.customDataOffset = heapU32[dataIndex++]; + this.customDataSize = heapU32[dataIndex++]; + const inputs = []; + for (let i = 0; i < inputCount; i++) { + const dataType = heapU32[dataIndex++]; + const data = heapU32[dataIndex++]; + const dim = heapU32[dataIndex++]; + const dims = []; + for (let d = 0; d < dim; d++) { + dims.push(heapU32[dataIndex++]); + } + inputs.push(new TensorViewImpl(module, dataType, data, dims)); + } + this.inputs = inputs; + } + get kernelCustomData() { + return this.backend.currentKernelCustomData; + } + get customDataBuffer() { + return this.module.HEAPU8.subarray(this.customDataOffset, this.customDataOffset + this.customDataSize); + } + getMaxComputeWorkgroupSizes() { + return [ + this.backend.device.limits.maxComputeWorkgroupSizeX, + this.backend.device.limits.maxComputeWorkgroupSizeY, + this.backend.device.limits.maxComputeWorkgroupSizeZ + ]; + } + getMaxComputeWorkgroupStoragesize() { + return this.backend.device.limits.maxComputeWorkgroupStorageSize; + } + compute(program, inputsOutputsMapping) { + const mappedInputs = inputsOutputsMapping?.inputs?.map((i) => typeof i === "number" ? this.inputs[i] : i) ?? this.inputs; + const outputIndices = inputsOutputsMapping?.outputs ?? []; + const createKernelOutput = (index, dataType, dims) => new TensorViewImpl(this.module, dataType, this.output(index, dims), dims); + const createTemporaryOutput = (dataType, dims) => { + const elementSize = getTensorElementSize(dataType); + if (!elementSize) { + throw new Error(`Unsupported data type: ${dataType}`); + } + const bufferSize = elementSize * ShapeUtil.size(dims); + const gpuDataId = bufferSize > 0 ? this.backend.gpuDataManager.create(bufferSize).id : 0; + return new TensorViewImpl(this.module, dataType, gpuDataId, dims); + }; + return this.backend.run( + program, + mappedInputs, + outputIndices, + createKernelOutput, + createTemporaryOutput, + this.outputCount + ); + } + output(index, dims) { + const stack = this.module.stackSave(); + try { + const data = this.module.stackAlloc( + (1 + dims.length) * 4 + /* sizeof(size_t) */ + ); + let offset = data >> 2; + this.module.HEAPU32[offset++] = dims.length; + for (let i = 0; i < dims.length; i++) { + this.module.HEAPU32[offset++] = dims[i]; + } + return this.module._JsepOutput(this.opKernelContext, index, data); + } catch (e) { + throw new Error( + `Failed to generate kernel's output[${index}] with dims [${dims}]. If you are running with pre-allocated output, please make sure the output type/dims are correct. Error: ${e}` + ); + } finally { + this.module.stackRestore(stack); + } + } + }; + init = async (name, module, env3, gpuAdapter) => { + const jsepInit = module.jsepInit; + if (!jsepInit) { + throw new Error("Failed to initialize JSEP. The WebAssembly module is not built with JSEP support."); + } + if (name === "webgpu") { + const backend = new WebGpuBackend(); + await backend.initialize(env3, gpuAdapter); + jsepInit("webgpu", [ + // backend + backend, + // jsepAlloc() + (size) => backend.alloc(size), + // jsepFree() + (ptr) => backend.free(ptr), + // jsepCopy(src, dst, size, isSourceGpu) + (src, dst, size, isSourceGpu = false) => { + if (isSourceGpu) { + LOG_DEBUG("verbose", () => `[WebGPU] jsepCopyGpuToGpu: src=${src}, dst=${dst}, size=${size}`); + backend.memcpy(src, dst); + } else { + LOG_DEBUG("verbose", () => `[WebGPU] jsepCopyCpuToGpu: dataOffset=${src}, gpuDataId=${dst}, size=${size}`); + const data = module.HEAPU8.subarray(src >>> 0, (src >>> 0) + size); + backend.upload(dst, data); + } + }, + // jsepCopyAsync(src, dst, size) + async (gpuDataId, dataOffset, size) => { + LOG_DEBUG( + "verbose", + () => `[WebGPU] jsepCopyGpuToCpu: gpuDataId=${gpuDataId}, dataOffset=${dataOffset}, size=${size}` + ); + await backend.download( + gpuDataId, + () => module.HEAPU8.subarray(dataOffset >>> 0, (dataOffset >>> 0) + size) + ); + }, + // jsepCreateKernel + (kernelType, kernelId, attribute) => backend.createKernel( + kernelType, + kernelId, + attribute, + module.UTF8ToString(module._JsepGetNodeName(kernelId)) + ), + // jsepReleaseKernel + (kernel) => backend.releaseKernel(kernel), + // jsepRun + (kernel, contextDataOffset, sessionHandle, errors) => { + LOG_DEBUG( + "verbose", + () => `[WebGPU] jsepRun: sessionHandle=${sessionHandle}, kernel=${kernel}, contextDataOffset=${contextDataOffset}` + ); + const context = new ComputeContextImpl(module, backend, contextDataOffset); + return backend.computeKernel(kernel, context, errors); + }, + // jsepCaptureBegin + () => backend.captureBegin(), + // jsepCaptureEnd + () => backend.captureEnd(), + // jsepReplay + () => backend.replay() + ]); + } else { + jsepInit("webnn"); + } + }; + } +}); + +// web/lib/wasm/wasm-core-impl.ts +var initOrt, initRuntime, initEp, activeSessions, getSessionInputOutputCount, copyFromExternalBuffer, createSession, releaseSession, prepareInputOutputTensor, run, endProfiling, extractTransferableBuffers; +var init_wasm_core_impl = __esm({ + "web/lib/wasm/wasm-core-impl.ts"() { + "use strict"; + init_run_options(); + init_session_options(); + init_wasm_common(); + init_wasm_factory(); + init_wasm_utils(); + init_wasm_utils_load_file(); + initOrt = (numThreads, loggingLevel) => { + const errorCode = getInstance()._OrtInit(numThreads, loggingLevel); + if (errorCode !== 0) { + checkLastError("Can't initialize onnxruntime."); + } + }; + initRuntime = async (env3) => { + initOrt(env3.wasm.numThreads, logLevelStringToEnum(env3.logLevel)); + }; + initEp = async (env3, epName) => { + if (true) { + const initJsep = (init_init(), __toCommonJS(init_exports)).init; + if (epName === "webgpu") { + if (typeof navigator === "undefined" || !navigator.gpu) { + throw new Error("WebGPU is not supported in current environment"); + } + let adapter = env3.webgpu.adapter; + if (!adapter) { + const powerPreference = env3.webgpu.powerPreference; + if (powerPreference !== void 0 && powerPreference !== "low-power" && powerPreference !== "high-performance") { + throw new Error(`Invalid powerPreference setting: "${powerPreference}"`); + } + const forceFallbackAdapter = env3.webgpu.forceFallbackAdapter; + if (forceFallbackAdapter !== void 0 && typeof forceFallbackAdapter !== "boolean") { + throw new Error(`Invalid forceFallbackAdapter setting: "${forceFallbackAdapter}"`); + } + adapter = await navigator.gpu.requestAdapter({ powerPreference, forceFallbackAdapter }); + if (!adapter) { + throw new Error( + 'Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.' + ); + } + } else { + if (typeof adapter.limits !== "object" || typeof adapter.features !== "object" || typeof adapter.requestDevice !== "function") { + throw new Error("Invalid GPU adapter set in `env.webgpu.adapter`. It must be a GPUAdapter object."); + } + } + if (!env3.wasm.simd) { + throw new Error( + "Not supported for WebGPU=ON and SIMD=OFF. Please set `env.wasm.simd` to true when using `webgpu` EP" + ); + } + await initJsep("webgpu", getInstance(), env3, adapter); + } + if (epName === "webnn") { + if (typeof navigator === "undefined" || !navigator.ml) { + throw new Error("WebNN is not supported in current environment"); + } + await initJsep("webnn", getInstance(), env3); + } + } + }; + activeSessions = /* @__PURE__ */ new Map(); + getSessionInputOutputCount = (sessionHandle) => { + const wasm2 = getInstance(); + const stack = wasm2.stackSave(); + try { + const dataOffset = wasm2.stackAlloc(8); + const errorCode = wasm2._OrtGetInputOutputCount(sessionHandle, dataOffset, dataOffset + 4); + if (errorCode !== 0) { + checkLastError("Can't get session input/output count."); + } + return [wasm2.HEAP32[dataOffset / 4], wasm2.HEAP32[dataOffset / 4 + 1]]; + } finally { + wasm2.stackRestore(stack); + } + }; + copyFromExternalBuffer = (model) => { + const wasm2 = getInstance(); + const modelDataOffset = wasm2._malloc(model.byteLength); + if (modelDataOffset === 0) { + throw new Error(`Can't create a session. failed to allocate a buffer of size ${model.byteLength}.`); + } + wasm2.HEAPU8.set(model, modelDataOffset); + return [modelDataOffset, model.byteLength]; + }; + createSession = async (modelData, options) => { + let modelDataOffset, modelDataLength; + const wasm2 = getInstance(); + if (Array.isArray(modelData)) { + [modelDataOffset, modelDataLength] = modelData; + } else if (modelData.buffer === wasm2.HEAPU8.buffer) { + [modelDataOffset, modelDataLength] = [modelData.byteOffset, modelData.byteLength]; + } else { + [modelDataOffset, modelDataLength] = copyFromExternalBuffer(modelData); + } + let sessionHandle = 0; + let sessionOptionsHandle = 0; + let ioBindingHandle = 0; + let allocs = []; + const inputNamesUTF8Encoded = []; + const outputNamesUTF8Encoded = []; + try { + [sessionOptionsHandle, allocs] = setSessionOptions(options); + if (options?.externalData && wasm2.mountExternalData) { + const loadingPromises = []; + for (const file of options.externalData) { + const path = typeof file === "string" ? file : file.path; + loadingPromises.push(loadFile(typeof file === "string" ? file : file.data).then((data) => { + wasm2.mountExternalData(path, data); + })); + } + await Promise.all(loadingPromises); + } + sessionHandle = await wasm2._OrtCreateSession(modelDataOffset, modelDataLength, sessionOptionsHandle); + if (sessionHandle === 0) { + checkLastError("Can't create a session."); + } + const [inputCount, outputCount] = getSessionInputOutputCount(sessionHandle); + const enableGraphCapture = !!options?.enableGraphCapture; + const inputNames = []; + const outputNames = []; + const outputPreferredLocations = []; + for (let i = 0; i < inputCount; i++) { + const name = wasm2._OrtGetInputName(sessionHandle, i); + if (name === 0) { + checkLastError("Can't get an input name."); + } + inputNamesUTF8Encoded.push(name); + inputNames.push(wasm2.UTF8ToString(name)); + } + for (let i = 0; i < outputCount; i++) { + const name = wasm2._OrtGetOutputName(sessionHandle, i); + if (name === 0) { + checkLastError("Can't get an output name."); + } + outputNamesUTF8Encoded.push(name); + const nameString = wasm2.UTF8ToString(name); + outputNames.push(nameString); + if (true) { + if (enableGraphCapture && options?.preferredOutputLocation === void 0) { + outputPreferredLocations.push("gpu-buffer"); + continue; + } + const location = typeof options?.preferredOutputLocation === "string" ? options.preferredOutputLocation : options?.preferredOutputLocation?.[nameString] ?? "cpu"; + if (location !== "cpu" && location !== "cpu-pinned" && location !== "gpu-buffer") { + throw new Error(`Not supported preferred output location: ${location}.`); + } + if (enableGraphCapture && location !== "gpu-buffer") { + throw new Error(`Not supported preferred output location: ${location}. Only 'gpu-buffer' location is supported when enableGraphCapture is true.`); + } + outputPreferredLocations.push(location); + } + } + let bindingState = null; + if (outputPreferredLocations.some((l) => l === "gpu-buffer")) { + ioBindingHandle = wasm2._OrtCreateBinding(sessionHandle); + if (ioBindingHandle === 0) { + checkLastError("Can't create IO binding."); + } + bindingState = { + handle: ioBindingHandle, + outputPreferredLocations, + outputPreferredLocationsEncoded: outputPreferredLocations.map((l) => dataLocationStringToEnum(l)) + }; + } + activeSessions.set( + sessionHandle, + [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, bindingState, enableGraphCapture, false] + ); + return [sessionHandle, inputNames, outputNames]; + } catch (e) { + inputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf)); + outputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf)); + if (ioBindingHandle !== 0) { + wasm2._OrtReleaseBinding(ioBindingHandle); + } + if (sessionHandle !== 0) { + wasm2._OrtReleaseSession(sessionHandle); + } + throw e; + } finally { + wasm2._free(modelDataOffset); + if (sessionOptionsHandle !== 0) { + wasm2._OrtReleaseSessionOptions(sessionOptionsHandle); + } + allocs.forEach((alloc) => wasm2._free(alloc)); + wasm2.unmountExternalData?.(); + } + }; + releaseSession = (sessionId) => { + const wasm2 = getInstance(); + const session = activeSessions.get(sessionId); + if (!session) { + throw new Error(`cannot release session. invalid session id: ${sessionId}`); + } + const [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture] = session; + if (ioBindingState) { + if (enableGraphCapture) { + wasm2._OrtClearBoundOutputs(ioBindingState.handle); + } + wasm2._OrtReleaseBinding(ioBindingState.handle); + } + wasm2.jsepOnReleaseSession?.(sessionId); + inputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf)); + outputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf)); + wasm2._OrtReleaseSession(sessionHandle); + activeSessions.delete(sessionId); + }; + prepareInputOutputTensor = (tensor, tensorHandles, allocs, sessionId, index, enableGraphCapture = false) => { + if (!tensor) { + tensorHandles.push(0); + return; + } + const wasm2 = getInstance(); + const dataType = tensor[0]; + const dims = tensor[1]; + const location = tensor[3]; + let rawData; + let dataByteLength; + if (dataType === "string" && location === "gpu-buffer") { + throw new Error("String tensor is not supported on GPU."); + } + if (enableGraphCapture && location !== "gpu-buffer") { + throw new Error( + `External buffer must be provided for input/output index ${index} when enableGraphCapture is true.` + ); + } + if (location === "gpu-buffer") { + const gpuBuffer = tensor[2].gpuBuffer; + const elementSizeInBytes = getTensorElementSize(tensorDataTypeStringToEnum(dataType)); + dataByteLength = dims.reduce((a, b) => a * b, 1) * elementSizeInBytes; + const registerBuffer = wasm2.jsepRegisterBuffer; + if (!registerBuffer) { + throw new Error('Tensor location "gpu-buffer" is not supported without using WebGPU.'); + } + rawData = registerBuffer(sessionId, index, gpuBuffer, dataByteLength); + } else { + const data = tensor[2]; + if (Array.isArray(data)) { + dataByteLength = 4 * data.length; + rawData = wasm2._malloc(dataByteLength); + allocs.push(rawData); + let dataIndex = rawData / 4; + for (let i = 0; i < data.length; i++) { + if (typeof data[i] !== "string") { + throw new TypeError(`tensor data at index ${i} is not a string`); + } + wasm2.HEAPU32[dataIndex++] = allocWasmString(data[i], allocs); + } + } else { + dataByteLength = data.byteLength; + rawData = wasm2._malloc(dataByteLength); + allocs.push(rawData); + wasm2.HEAPU8.set(new Uint8Array(data.buffer, data.byteOffset, dataByteLength), rawData); + } + } + const stack = wasm2.stackSave(); + const dimsOffset = wasm2.stackAlloc(4 * dims.length); + try { + let dimIndex = dimsOffset / 4; + dims.forEach((d) => wasm2.HEAP32[dimIndex++] = d); + const tensor2 = wasm2._OrtCreateTensor( + tensorDataTypeStringToEnum(dataType), + rawData, + dataByteLength, + dimsOffset, + dims.length, + dataLocationStringToEnum(location) + ); + if (tensor2 === 0) { + checkLastError(`Can't create tensor for input/output. session=${sessionId}, index=${index}.`); + } + tensorHandles.push(tensor2); + } finally { + wasm2.stackRestore(stack); + } + }; + run = async (sessionId, inputIndices, inputTensors, outputIndices, outputTensors, options) => { + const wasm2 = getInstance(); + const session = activeSessions.get(sessionId); + if (!session) { + throw new Error(`cannot run inference. invalid session id: ${sessionId}`); + } + const sessionHandle = session[0]; + const inputNamesUTF8Encoded = session[1]; + const outputNamesUTF8Encoded = session[2]; + const ioBindingState = session[3]; + const enableGraphCapture = session[4]; + const inputOutputBound = session[5]; + const inputCount = inputIndices.length; + const outputCount = outputIndices.length; + let runOptionsHandle = 0; + let runOptionsAllocs = []; + const inputTensorHandles = []; + const outputTensorHandles = []; + const inputOutputAllocs = []; + const beforeRunStack = wasm2.stackSave(); + const inputValuesOffset = wasm2.stackAlloc(inputCount * 4); + const inputNamesOffset = wasm2.stackAlloc(inputCount * 4); + const outputValuesOffset = wasm2.stackAlloc(outputCount * 4); + const outputNamesOffset = wasm2.stackAlloc(outputCount * 4); + try { + [runOptionsHandle, runOptionsAllocs] = setRunOptions(options); + for (let i = 0; i < inputCount; i++) { + prepareInputOutputTensor( + inputTensors[i], + inputTensorHandles, + inputOutputAllocs, + sessionId, + inputIndices[i], + enableGraphCapture + ); + } + for (let i = 0; i < outputCount; i++) { + prepareInputOutputTensor( + outputTensors[i], + outputTensorHandles, + inputOutputAllocs, + sessionId, + inputCount + outputIndices[i], + enableGraphCapture + ); + } + let inputValuesIndex = inputValuesOffset / 4; + let inputNamesIndex = inputNamesOffset / 4; + let outputValuesIndex = outputValuesOffset / 4; + let outputNamesIndex = outputNamesOffset / 4; + for (let i = 0; i < inputCount; i++) { + wasm2.HEAPU32[inputValuesIndex++] = inputTensorHandles[i]; + wasm2.HEAPU32[inputNamesIndex++] = inputNamesUTF8Encoded[inputIndices[i]]; + } + for (let i = 0; i < outputCount; i++) { + wasm2.HEAPU32[outputValuesIndex++] = outputTensorHandles[i]; + wasm2.HEAPU32[outputNamesIndex++] = outputNamesUTF8Encoded[outputIndices[i]]; + } + if (ioBindingState && !inputOutputBound) { + const { handle, outputPreferredLocations, outputPreferredLocationsEncoded } = ioBindingState; + if (inputNamesUTF8Encoded.length !== inputCount) { + throw new Error(`input count from feeds (${inputCount}) is expected to be always equal to model's input count (${inputNamesUTF8Encoded.length}).`); + } + for (let i = 0; i < inputCount; i++) { + const index = inputIndices[i]; + const errorCode2 = await wasm2._OrtBindInput(handle, inputNamesUTF8Encoded[index], inputTensorHandles[i]); + if (errorCode2 !== 0) { + checkLastError(`Can't bind input[${i}] for session=${sessionId}.`); + } + } + for (let i = 0; i < outputCount; i++) { + const index = outputIndices[i]; + const location = outputTensors[i]?.[3]; + if (location) { + const errorCode2 = wasm2._OrtBindOutput(handle, outputNamesUTF8Encoded[index], outputTensorHandles[i], 0); + if (errorCode2 !== 0) { + checkLastError(`Can't bind pre-allocated output[${i}] for session=${sessionId}.`); + } + } else { + const errorCode2 = wasm2._OrtBindOutput(handle, outputNamesUTF8Encoded[index], 0, outputPreferredLocationsEncoded[index]); + if (errorCode2 !== 0) { + checkLastError(`Can't bind output[${i}] to ${outputPreferredLocations[i]} for session=${sessionId}.`); + } + } + } + activeSessions.set( + sessionId, + [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture, true] + ); + } + wasm2.jsepOnRunStart?.(sessionHandle); + let errorCode; + if (ioBindingState) { + errorCode = await wasm2._OrtRunWithBinding( + sessionHandle, + ioBindingState.handle, + outputCount, + outputValuesOffset, + runOptionsHandle + ); + } else { + errorCode = await wasm2._OrtRun( + sessionHandle, + inputNamesOffset, + inputValuesOffset, + inputCount, + outputNamesOffset, + outputCount, + outputValuesOffset, + runOptionsHandle + ); + } + if (errorCode !== 0) { + checkLastError("failed to call OrtRun()."); + } + const output = []; + for (let i = 0; i < outputCount; i++) { + const tensor = wasm2.HEAPU32[outputValuesOffset / 4 + i]; + if (tensor === outputTensorHandles[i]) { + output.push(outputTensors[i]); + continue; + } + const beforeGetTensorDataStack = wasm2.stackSave(); + const tensorDataOffset = wasm2.stackAlloc(4 * 4); + let keepOutputTensor = false; + let type, dataOffset = 0; + try { + const errorCode2 = wasm2._OrtGetTensorData( + tensor, + tensorDataOffset, + tensorDataOffset + 4, + tensorDataOffset + 8, + tensorDataOffset + 12 + ); + if (errorCode2 !== 0) { + checkLastError(`Can't access output tensor data on index ${i}.`); + } + let tensorDataIndex = tensorDataOffset / 4; + const dataType = wasm2.HEAPU32[tensorDataIndex++]; + dataOffset = wasm2.HEAPU32[tensorDataIndex++]; + const dimsOffset = wasm2.HEAPU32[tensorDataIndex++]; + const dimsLength = wasm2.HEAPU32[tensorDataIndex++]; + const dims = []; + for (let i2 = 0; i2 < dimsLength; i2++) { + dims.push(wasm2.HEAPU32[dimsOffset / 4 + i2]); + } + wasm2._OrtFree(dimsOffset); + const size = dims.reduce((a, b) => a * b, 1); + type = tensorDataTypeEnumToString(dataType); + const preferredLocation = ioBindingState?.outputPreferredLocations[outputIndices[i]]; + if (type === "string") { + if (preferredLocation === "gpu-buffer") { + throw new Error("String tensor is not supported on GPU."); + } + const stringData = []; + let dataIndex = dataOffset / 4; + for (let i2 = 0; i2 < size; i2++) { + const offset = wasm2.HEAPU32[dataIndex++]; + const maxBytesToRead = i2 === size - 1 ? void 0 : wasm2.HEAPU32[dataIndex] - offset; + stringData.push(wasm2.UTF8ToString(offset, maxBytesToRead)); + } + output.push([type, dims, stringData, "cpu"]); + } else { + if (preferredLocation === "gpu-buffer" && size > 0) { + const getBuffer = wasm2.jsepGetBuffer; + if (!getBuffer) { + throw new Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.'); + } + const gpuBuffer = getBuffer(dataOffset); + const elementSize = getTensorElementSize(dataType); + if (elementSize === void 0 || !isGpuBufferSupportedType(type)) { + throw new Error(`Unsupported data type: ${type}`); + } + keepOutputTensor = true; + output.push([ + type, + dims, + { + gpuBuffer, + download: wasm2.jsepCreateDownloader(gpuBuffer, size * elementSize, type), + dispose: () => { + wasm2._OrtReleaseTensor(tensor); + } + }, + "gpu-buffer" + ]); + } else { + const typedArrayConstructor = tensorTypeToTypedArrayConstructor(type); + const data = new typedArrayConstructor(size); + new Uint8Array(data.buffer, data.byteOffset, data.byteLength).set(wasm2.HEAPU8.subarray(dataOffset, dataOffset + data.byteLength)); + output.push([type, dims, data, "cpu"]); + } + } + } finally { + wasm2.stackRestore(beforeGetTensorDataStack); + if (type === "string" && dataOffset) { + wasm2._free(dataOffset); + } + if (!keepOutputTensor) { + wasm2._OrtReleaseTensor(tensor); + } + } + } + if (ioBindingState && !enableGraphCapture) { + wasm2._OrtClearBoundOutputs(ioBindingState.handle); + activeSessions.set( + sessionId, + [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture, false] + ); + } + return output; + } finally { + wasm2.stackRestore(beforeRunStack); + inputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v)); + outputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v)); + inputOutputAllocs.forEach((p) => wasm2._free(p)); + if (runOptionsHandle !== 0) { + wasm2._OrtReleaseRunOptions(runOptionsHandle); + } + runOptionsAllocs.forEach((p) => wasm2._free(p)); + } + }; + endProfiling = (sessionId) => { + const wasm2 = getInstance(); + const session = activeSessions.get(sessionId); + if (!session) { + throw new Error("invalid session id"); + } + const sessionHandle = session[0]; + const profileFileName = wasm2._OrtEndProfiling(sessionHandle); + if (profileFileName === 0) { + checkLastError("Can't get an profile file name."); + } + wasm2._OrtFree(profileFileName); + }; + extractTransferableBuffers = (tensors) => { + const buffers = []; + for (const tensor of tensors) { + const data = tensor[2]; + if (!Array.isArray(data) && "buffer" in data) { + buffers.push(data.buffer); + } + } + return buffers; + }; + } +}); + +// proxy-worker:./proxy-worker/main +var require_main = __commonJS({ + "proxy-worker:./proxy-worker/main"(exports, module) { + module.exports = '/*!\n * ONNX Runtime Web v1.18.0\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n"use strict";\n(() => {\n var __defProp = Object.defineProperty;\n var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n var __getOwnPropNames = Object.getOwnPropertyNames;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n var __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n };\n var __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n };\n var __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n };\n var __copyProps = (to, from, except, desc) => {\n if (from && typeof from === "object" || typeof from === "function") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n };\n var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);\n\n // nodejs-ignore:fs\n var fs_exports = {};\n __export(fs_exports, {\n createReadStream: () => createReadStream,\n readFile: () => readFile,\n readFileSync: () => readFileSync\n });\n var readFile, readFileSync, createReadStream;\n var init_fs = __esm({\n "nodejs-ignore:fs"() {\n readFile = void 0;\n readFileSync = void 0;\n createReadStream = void 0;\n }\n });\n\n // nodejs-ignore:path\n var path_exports = {};\n __export(path_exports, {\n join: () => join2\n });\n var join2;\n var init_path = __esm({\n "nodejs-ignore:path"() {\n join2 = void 0;\n }\n });\n\n // web/lib/wasm/binding/ort-wasm-simd.jsep.js\n var require_ort_wasm_simd_jsep = __commonJS({\n "web/lib/wasm/binding/ort-wasm-simd.jsep.js"(exports, module) {\n "use strict";\n var ortWasm = (() => {\n var _scriptDir = typeof document != "undefined" ? document.currentScript?.src : void 0;\n if (typeof __filename != "undefined")\n _scriptDir ||= __filename;\n return function(moduleArg = {}) {\n var g = moduleArg, aa, ba, readyPromise = new Promise((a, b) => {\n aa = a;\n ba = b;\n });\n "use strict";\n g.mountExternalData = (a, b) => {\n (g.Ph || (g.Ph = /* @__PURE__ */ new Map())).set(a, b);\n };\n g.unmountExternalData = () => {\n delete g.Ph;\n };\n let da = () => {\n const a = (c, d, e) => (...f) => {\n const h = t, k = d?.();\n f = c(...f);\n const l = d?.();\n k !== l && (c = l, e(k), d = e = null);\n return t != h ? ca() : f;\n }, b = (c) => async (...d) => {\n try {\n if (g.Oh)\n throw Error("Session already started");\n const e = g.Oh = { gi: d[0], errors: [] }, f = await c(...d);\n if (g.Oh !== e)\n throw Error("Session mismatch");\n g.Uh?.flush();\n const h = e.errors;\n if (0 < h.length) {\n let k = await Promise.all(h);\n k = k.filter((l) => l);\n if (0 < k.length)\n throw Error(k.join("\\n"));\n }\n return f;\n } finally {\n g.Oh = null;\n }\n };\n g._OrtCreateSession = a(\n g._OrtCreateSession,\n () => g._OrtCreateSession,\n (c) => g._OrtCreateSession = c\n );\n g._OrtRun = b(a(g._OrtRun, () => g._OrtRun, (c) => g._OrtRun = c));\n g._OrtRunWithBinding = b(a(g._OrtRunWithBinding, () => g._OrtRunWithBinding, (c) => g._OrtRunWithBinding = c));\n g._OrtBindInput = a(g._OrtBindInput, () => g._OrtBindInput, (c) => g._OrtBindInput = c);\n da = void 0;\n };\n g.jsepInit = (a, b) => {\n da?.();\n if ("webgpu" === a) {\n [g.Uh, g.Zh, g.ci, g.Vh, g.bi, g.je, g.di, g.fi, g.$h, g.ai, g.ei] = b;\n const c = g.Uh;\n g.jsepRegisterBuffer = (d, e, f, h) => c.registerBuffer(d, e, f, h);\n g.jsepGetBuffer = (d) => c.getBuffer(d);\n g.jsepCreateDownloader = (d, e, f) => c.createDownloader(d, e, f);\n g.jsepOnReleaseSession = (d) => {\n c.onReleaseSession(d);\n };\n g.jsepOnRunStart = (d) => c.onRunStart(d);\n }\n };\n var ea = Object.assign({}, g), fa = "./this.program", ha = (a, b) => {\n throw b;\n }, ia = "object" == typeof window, ja = "function" == typeof importScripts, ka = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, v = "", la, ma, na;\n if (ka) {\n var fs = (init_fs(), __toCommonJS(fs_exports)), oa = (init_path(), __toCommonJS(path_exports));\n v = ja ? oa.dirname(v) + "/" : __dirname + "/";\n la = (a, b) => {\n a = pa(a) ? new URL(a) : oa.normalize(a);\n return fs.readFileSync(a, b ? void 0 : "utf8");\n };\n na = (a) => {\n a = la(a, true);\n a.buffer || (a = new Uint8Array(a));\n return a;\n };\n ma = (a, b, c, d = true) => {\n a = pa(a) ? new URL(a) : oa.normalize(a);\n fs.readFile(a, d ? void 0 : "utf8", (e, f) => {\n e ? c(e) : b(d ? f.buffer : f);\n });\n };\n !g.thisProgram && 1 < process.argv.length && (fa = process.argv[1].replace(/\\\\/g, "/"));\n process.argv.slice(2);\n ha = (a, b) => {\n process.exitCode = a;\n throw b;\n };\n } else if (ia || ja)\n ja ? v = self.location.href : "undefined" != typeof document && document.currentScript && (v = document.currentScript.src), _scriptDir && (v = _scriptDir), v.startsWith("blob:") ? v = "" : v = v.substr(0, v.replace(/[?#].*/, "").lastIndexOf("/") + 1), la = (a) => {\n var b = new XMLHttpRequest();\n b.open("GET", a, false);\n b.send(null);\n return b.responseText;\n }, ja && (na = (a) => {\n var b = new XMLHttpRequest();\n b.open("GET", a, false);\n b.responseType = "arraybuffer";\n b.send(null);\n return new Uint8Array(b.response);\n }), ma = (a, b, c) => {\n var d = new XMLHttpRequest();\n d.open("GET", a, true);\n d.responseType = "arraybuffer";\n d.onload = () => {\n 200 == d.status || 0 == d.status && d.response ? b(d.response) : c();\n };\n d.onerror = c;\n d.send(null);\n };\n var qa = console.log.bind(console), w = console.error.bind(console);\n Object.assign(g, ea);\n ea = null;\n var ra, x = false, sa, z, E, ta, ua, G, I, va, wa, xa, ya;\n function za() {\n var a = ra.buffer;\n g.HEAP8 = z = new Int8Array(a);\n g.HEAP16 = ta = new Int16Array(a);\n g.HEAPU8 = E = new Uint8Array(a);\n g.HEAPU16 = ua = new Uint16Array(a);\n g.HEAP32 = G = new Int32Array(a);\n g.HEAPU32 = I = new Uint32Array(a);\n g.HEAPF32 = va = new Float32Array(a);\n g.HEAPF64 = ya = new Float64Array(a);\n g.HEAP64 = wa = new BigInt64Array(a);\n g.HEAPU64 = xa = new BigUint64Array(a);\n }\n var Aa = [], Ba = [], Ca = [], Da = 0, Ea = null, Fa = null;\n function Ga(a) {\n a = "Aborted(" + a + ")";\n w(a);\n x = true;\n sa = 1;\n a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info.");\n ba(a);\n throw a;\n }\n var Ha = (a) => a.startsWith("data:application/octet-stream;base64,"), pa = (a) => a.startsWith("file://"), Ia;\n Ia = "ort-wasm-simd.wasm";\n if (!Ha(Ia)) {\n var Ja = Ia;\n Ia = g.locateFile ? g.locateFile(Ja, v) : v + Ja;\n }\n function Ka(a) {\n if (na)\n return na(a);\n throw "both async and sync fetching of the wasm failed";\n }\n function La(a) {\n if (ia || ja) {\n if ("function" == typeof fetch && !pa(a))\n return fetch(a, { credentials: "same-origin" }).then((b) => {\n if (!b.ok)\n throw `failed to load wasm binary file at \'${a}\'`;\n return b.arrayBuffer();\n }).catch(() => Ka(a));\n if (ma)\n return new Promise((b, c) => {\n ma(a, (d) => b(new Uint8Array(d)), c);\n });\n }\n return Promise.resolve().then(() => Ka(a));\n }\n function Ma(a, b, c) {\n return La(a).then((d) => WebAssembly.instantiate(d, b)).then(c, (d) => {\n w(`failed to asynchronously prepare wasm: ${d}`);\n Ga(d);\n });\n }\n function Na(a, b) {\n var c = Ia;\n return "function" != typeof WebAssembly.instantiateStreaming || Ha(c) || pa(c) || ka || "function" != typeof fetch ? Ma(c, a, b) : fetch(c, { credentials: "same-origin" }).then((d) => WebAssembly.instantiateStreaming(d, a).then(b, function(e) {\n w(`wasm streaming compile failed: ${e}`);\n w("falling back to ArrayBuffer instantiation");\n return Ma(c, a, b);\n }));\n }\n var Oa = {\n 1261504: (a, b, c, d) => {\n if ("undefined" == typeof g || !g.Ph)\n return 1;\n a = J(a >>> 0);\n a.startsWith("./") && (a = a.substring(2));\n a = g.Ph.get(a);\n if (!a)\n return 2;\n b >>>= 0;\n c >>>= 0;\n if (b + c > a.byteLength)\n return 3;\n try {\n return E.set(a.subarray(b, b + c), d >>> 0 >>> 0), 0;\n } catch {\n return 4;\n }\n },\n 1262005: (a, b, c) => {\n c = J(c);\n const d = new Uint8Array(b);\n d.set(E.subarray(a >>> 0, a + b >>> 0));\n "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node ? (init_fs(), __toCommonJS(fs_exports)).writeFileSync(c, d) : (a = new File([d], c, { type: "application/octet-stream" }), a = URL.createObjectURL(a), window.open(a, "_blank"));\n },\n 1262513: () => {\n g.$h();\n },\n 1262544: () => {\n g.ai();\n },\n 1262573: () => {\n g.ei();\n },\n 1262598: (a) => g.Zh(a),\n 1262631: (a) => g.ci(a),\n 1262663: (a, b, c) => {\n g.Vh(a, b, c, true);\n },\n 1262702: (a, b, c) => {\n g.Vh(a, b, c);\n },\n 1262735: (a) => {\n g.je("Abs", a, void 0);\n },\n 1262786: (a) => {\n g.je("Neg", a, void 0);\n },\n 1262837: (a) => {\n g.je("Floor", a, void 0);\n },\n 1262890: (a) => {\n g.je("Ceil", a, void 0);\n },\n 1262942: (a) => {\n g.je("Reciprocal", a, void 0);\n },\n 1263e3: (a) => {\n g.je("Sqrt", a, void 0);\n },\n 1263052: (a) => {\n g.je("Exp", a, void 0);\n },\n 1263103: (a) => {\n g.je("Erf", a, void 0);\n },\n 1263154: (a) => {\n g.je("Sigmoid", a, void 0);\n },\n 1263209: (a, b, c) => {\n g.je("HardSigmoid", a, { alpha: b, beta: c });\n },\n 1263288: (a) => {\n g.je("Log", a, void 0);\n },\n 1263339: (a) => {\n g.je("Sin", a, void 0);\n },\n 1263390: (a) => {\n g.je("Cos", a, void 0);\n },\n 1263441: (a) => {\n g.je("Tan", a, void 0);\n },\n 1263492: (a) => {\n g.je("Asin", a, void 0);\n },\n 1263544: (a) => {\n g.je("Acos", a, void 0);\n },\n 1263596: (a) => {\n g.je("Atan", a, void 0);\n },\n 1263648: (a) => {\n g.je("Sinh", a, void 0);\n },\n 1263700: (a) => {\n g.je("Cosh", a, void 0);\n },\n 1263752: (a) => {\n g.je("Asinh", a, void 0);\n },\n 1263805: (a) => {\n g.je("Acosh", a, void 0);\n },\n 1263858: (a) => {\n g.je("Atanh", a, void 0);\n },\n 1263911: (a) => {\n g.je("Tanh", a, void 0);\n },\n 1263963: (a) => {\n g.je("Not", a, void 0);\n },\n 1264014: (a, b, c) => {\n g.je("Clip", a, { min: b, max: c });\n },\n 1264083: (a) => {\n g.je("Clip", a, void 0);\n },\n 1264135: (a, b) => {\n g.je("Elu", a, { alpha: b });\n },\n 1264193: (a) => {\n g.je("Relu", a, void 0);\n },\n 1264245: (a, b) => {\n g.je("LeakyRelu", a, { alpha: b });\n },\n 1264309: (a, b) => {\n g.je("ThresholdedRelu", a, { alpha: b });\n },\n 1264379: (a, b) => {\n g.je("Cast", a, { to: b });\n },\n 1264437: (a) => {\n g.je("Add", a, void 0);\n },\n 1264488: (a) => {\n g.je("Sub", a, void 0);\n },\n 1264539: (a) => {\n g.je("Mul", a, void 0);\n },\n 1264590: (a) => {\n g.je("Div", a, void 0);\n },\n 1264641: (a) => {\n g.je("Pow", a, void 0);\n },\n 1264692: (a) => {\n g.je("Equal", a, void 0);\n },\n 1264745: (a) => {\n g.je("Greater", a, void 0);\n },\n 1264800: (a) => {\n g.je("GreaterOrEqual", a, void 0);\n },\n 1264862: (a) => {\n g.je("Less", a, void 0);\n },\n 1264914: (a) => {\n g.je("LessOrEqual", a, void 0);\n },\n 1264973: (a, b, c, d, e) => {\n g.je("ReduceMean", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1265132: (a, b, c, d, e) => {\n g.je("ReduceMax", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1265290: (a, b, c, d, e) => {\n g.je("ReduceMin", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1265448: (a, b, c, d, e) => {\n g.je("ReduceProd", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1265607: (a, b, c, d, e) => {\n g.je("ReduceSum", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1265765: (a, b, c, d, e) => {\n g.je("ReduceL1", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1265922: (a, b, c, d, e) => {\n g.je("ReduceL2", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1266079: (a, b, c, d, e) => {\n g.je("ReduceLogSum", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1266240: (a, b, c, d, e) => {\n g.je("ReduceSumSquare", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1266404: (a, b, c, d, e) => {\n g.je("ReduceLogSumExp", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1266568: (a) => {\n g.je("Where", a, void 0);\n },\n 1266621: (a, b, c) => {\n g.je("Transpose", a, { perm: b ? Array.from(G.subarray(b >>> 0, c >>> 0)) : [] });\n },\n 1266729: (a, b, c, d) => {\n g.je("DepthToSpace", a, { blocksize: b, mode: J(c), format: d ? "NHWC" : "NCHW" });\n },\n 1266862: (a, b, c, d) => {\n g.je("DepthToSpace", a, { blocksize: b, mode: J(c), format: d ? "NHWC" : "NCHW" });\n },\n 1266995: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => {\n g.je("ConvTranspose", a, { format: l ? "NHWC" : "NCHW", autoPad: b, dilations: [c], group: d, kernelShape: [e], pads: [f, h], strides: [k], wIsConst: () => !!z[m >>> 0], outputPadding: n ? Array.from(G.subarray(n >>> 0, q >>> 0)) : [], outputShape: r ? Array.from(G.subarray(r >>> 0, p >>> 0)) : [], activation: J(u) });\n },\n 1267396: (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => {\n g.je("ConvTranspose", a, { format: k ? "NHWC" : "NCHW", autoPad: b, dilations: Array.from(G.subarray(c >>> 0, (c >>> 0) + 2 >>> 0)), group: d, kernelShape: Array.from(G.subarray(e >>> 0, (e >>> 0) + 2 >>> 0)), pads: Array.from(G.subarray(f >>> 0, (f >>> 0) + 4 >>> 0)), strides: Array.from(G.subarray(h >>> 0, (h >>> 0) + 2 >>> 0)), wIsConst: () => !!z[l >>> 0], outputPadding: m ? Array.from(G.subarray(m >>> 0, n >>> 0)) : [], outputShape: q ? Array.from(G.subarray(q >>> 0, r >>> 0)) : [], activation: J(p) });\n },\n 1267961: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => {\n g.je("ConvTranspose", a, { format: l ? "NHWC" : "NCHW", autoPad: b, dilations: [c], group: d, kernelShape: [e], pads: [f, h], strides: [k], wIsConst: () => !!z[m >>> 0], outputPadding: n ? Array.from(G.subarray(n >>> 0, q >>> 0)) : [], outputShape: r ? Array.from(G.subarray(r >>> 0, p >>> 0)) : [], activation: J(u) });\n },\n 1268362: (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => {\n g.je("ConvTranspose", a, {\n format: k ? "NHWC" : "NCHW",\n autoPad: b,\n dilations: Array.from(G.subarray(c >>> 0, (c >>> 0) + 2 >>> 0)),\n group: d,\n kernelShape: Array.from(G.subarray(e >>> 0, (e >>> 0) + 2 >>> 0)),\n pads: Array.from(G.subarray(f >>> 0, (f >>> 0) + 4 >>> 0)),\n strides: Array.from(G.subarray(h >>> 0, (h >>> 0) + 2 >>> 0)),\n wIsConst: () => !!z[l >>> 0],\n outputPadding: m ? Array.from(G.subarray(m >>> 0, n >>> 0)) : [],\n outputShape: q ? Array.from(G.subarray(q >>> 0, r >>> 0)) : [],\n activation: J(p)\n });\n },\n 1268927: (a, b) => {\n g.je("GlobalAveragePool", a, { format: b ? "NHWC" : "NCHW" });\n },\n 1269018: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => {\n g.je("AveragePool", a, {\n format: y ? "NHWC" : "NCHW",\n auto_pad: b,\n ceil_mode: c,\n count_include_pad: d,\n storage_order: e,\n dilations: [f, h],\n kernel_shape: [k, l],\n pads: [m, n, q, r],\n strides: [p, u]\n });\n },\n 1269302: (a, b) => {\n g.je("GlobalAveragePool", a, { format: b ? "NHWC" : "NCHW" });\n },\n 1269393: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => {\n g.je("AveragePool", a, { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: d, storage_order: e, dilations: [f, h], kernel_shape: [k, l], pads: [m, n, q, r], strides: [p, u] });\n },\n 1269677: (a, b) => {\n g.je("GlobalMaxPool", a, { format: b ? "NHWC" : "NCHW" });\n },\n 1269764: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => {\n g.je("MaxPool", a, { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: d, storage_order: e, dilations: [f, h], kernel_shape: [k, l], pads: [m, n, q, r], strides: [p, u] });\n },\n 1270044: (a, b) => {\n g.je("GlobalMaxPool", a, { format: b ? "NHWC" : "NCHW" });\n },\n 1270131: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => {\n g.je("MaxPool", a, { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: d, storage_order: e, dilations: [f, h], kernel_shape: [k, l], pads: [m, n, q, r], strides: [p, u] });\n },\n 1270411: (a, b, c, d, e) => {\n g.je("Gemm", a, { alpha: b, beta: c, transA: d, transB: e });\n },\n 1270515: (a) => {\n g.je("MatMul", a, void 0);\n },\n 1270569: (a, b, c, d) => {\n g.je("ArgMax", a, { keepDims: !!b, selectLastIndex: !!c, axis: d });\n },\n 1270677: (a, b, c, d) => {\n g.je("ArgMin", a, { keepDims: !!b, selectLastIndex: !!c, axis: d });\n },\n 1270785: (a, b) => {\n g.je("Softmax", a, { axis: b });\n },\n 1270848: (a, b) => {\n g.je("Concat", a, { axis: b });\n },\n 1270908: (a, b, c, d, e) => {\n g.je("Split", a, { axis: b, numOutputs: c, splitSizes: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1271048: (a) => {\n g.je("Expand", a, void 0);\n },\n 1271102: (a, b) => {\n g.je("Gather", a, { axis: Number(b) });\n },\n 1271173: (a, b) => {\n g.je(\n "GatherElements",\n a,\n { axis: Number(b) }\n );\n },\n 1271252: (a, b, c, d, e, f, h, k, l, m, n) => {\n g.je("Resize", a, { antialias: b, axes: c ? Array.from(G.subarray(c >>> 0, d >>> 0)) : [], coordinateTransformMode: J(e), cubicCoeffA: f, excludeOutside: h, extrapolationValue: k, keepAspectRatioPolicy: J(l), mode: J(m), nearestMode: J(n) });\n },\n 1271598: (a, b, c, d, e, f, h) => {\n g.je("Slice", a, { starts: b ? Array.from(G.subarray(b >>> 0, c >>> 0)) : [], ends: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [], axes: f ? Array.from(G.subarray(f >>> 0, h >>> 0)) : [] });\n },\n 1271814: (a) => {\n g.je("Tile", a, void 0);\n },\n 1271866: (a, b, c, d) => {\n g.je("LayerNormalization", a, { axis: b, epsilon: c, simplified: !!d });\n },\n 1271977: (a, b, c) => {\n g.je("InstanceNormalization", a, { epsilon: b, format: c ? "NHWC" : "NCHW" });\n },\n 1272091: (a, b, c) => {\n g.je("InstanceNormalization", a, { epsilon: b, format: c ? "NHWC" : "NCHW" });\n },\n 1272205: (a) => {\n g.je("Range", a, void 0);\n },\n 1272258: (a, b) => {\n g.je("Einsum", a, { equation: J(b) });\n },\n 1272339: (a, b, c, d, e) => {\n g.je("Pad", a, { mode: b, value: c, pads: d ? Array.from(G.subarray(d >>> 0, e >>> 0)) : [] });\n },\n 1272466: (a, b, c, d, e, f) => {\n g.je("BatchNormalization", a, {\n epsilon: b,\n momentum: c,\n spatial: !!e,\n trainingMode: !!d,\n format: f ? "NHWC" : "NCHW"\n });\n },\n 1272635: (a, b, c, d, e, f) => {\n g.je("BatchNormalization", a, { epsilon: b, momentum: c, spatial: !!e, trainingMode: !!d, format: f ? "NHWC" : "NCHW" });\n },\n 1272804: (a, b, c) => {\n g.je("CumSum", a, { exclusive: Number(b), reverse: Number(c) });\n },\n 1272901: (a, b, c, d, e, f, h, k, l) => {\n g.je("Attention", a, { numHeads: b, isUnidirectional: c, maskFilterValue: d, scale: e, doRotary: f, qkvHiddenSizes: h ? Array.from(G.subarray(Number(k) >>> 0, Number(k) + h >>> 0)) : [], pastPresentShareBuffer: !!l });\n },\n 1273173: (a) => {\n g.je(\n "BiasAdd",\n a,\n void 0\n );\n },\n 1273228: (a) => {\n g.je("BiasSplitGelu", a, void 0);\n },\n 1273289: (a) => {\n g.je("FastGelu", a, void 0);\n },\n 1273345: (a, b, c, d, e, f, h, k, l, m, n, q, r) => {\n g.je("Conv", a, { format: l ? "NHWC" : "NCHW", auto_pad: b, dilations: [c], group: d, kernel_shape: [e], pads: f ? Array.from(G.subarray(f >>> 0, h >>> 0)) : [], strides: [k], w_is_const: () => !!z[m >>> 0], activation: J(n), activation_params: q ? Array.from(va.subarray(q >>> 0, r >>> 0)) : [] });\n },\n 1273715: (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => {\n g.je("Conv", a, { format: q ? "NHWC" : "NCHW", auto_pad: b, dilations: [c, d], group: e, kernel_shape: [\n f,\n h\n ], pads: k ? Array.from(G.subarray(k >>> 0, l >>> 0)) : [], strides: [m, n], w_is_const: () => !!z[r >>> 0], activation: J(p), activation_params: u ? Array.from(va.subarray(u >>> 0, y >>> 0)) : [] });\n },\n 1274106: (a) => {\n g.je("Gelu", a, void 0);\n },\n 1274158: (a, b, c, d, e, f) => {\n g.je("MatMulNBits", a, { k: b, n: c, accuracyLevel: d, bits: e, blockSize: f });\n },\n 1274285: (a, b, c, d, e, f) => {\n g.je("MultiHeadAttention", a, { numHeads: b, isUnidirectional: c, maskFilterValue: d, scale: e, doRotary: f });\n },\n 1274444: (a, b, c, d, e) => {\n g.je("RotaryEmbedding", a, {\n interleaved: !!b,\n numHeads: c,\n rotaryEmbeddingDim: d,\n scale: e\n });\n },\n 1274583: (a, b, c) => {\n g.je("SkipLayerNormalization", a, { epsilon: b, simplified: !!c });\n },\n 1274685: (a, b, c) => {\n g.je("SkipLayerNormalization", a, { epsilon: b, simplified: !!c });\n },\n 1274787: (a, b, c, d) => {\n g.je("LayerNormalization", a, { axis: b, epsilon: c, simplified: !!d });\n },\n 1274898: (a) => {\n g.di(a);\n },\n 1274932: (a, b) => g.fi(a, b, g.Oh.gi, g.Oh.errors)\n };\n function Pa(a) {\n this.name = "ExitStatus";\n this.message = `Program terminated with exit(${a})`;\n this.status = a;\n }\n var Qa = [], Ra = 0, L = 0;\n class Sa {\n constructor(a) {\n this.Nh = a;\n this.Ih = a - 24;\n }\n }\n var Za = (a) => {\n var b = L;\n if (!b)\n return Ta(0), 0;\n var c = new Sa(b);\n I[c.Ih + 16 >>> 2 >>> 0] = b;\n var d = I[c.Ih + 4 >>> 2 >>> 0];\n if (!d)\n return Ta(0), b;\n for (var e in a) {\n var f = a[e];\n if (0 === f || f === d)\n break;\n if (Ua(f, d, c.Ih + 16))\n return Ta(f), b;\n }\n Ta(d);\n return b;\n }, $a = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, ab = (a, b, c) => {\n b >>>= 0;\n var d = b + c;\n for (c = b; a[c] && !(c >= d); )\n ++c;\n if (16 < c - b && a.buffer && $a)\n return $a.decode(a.subarray(b, c));\n for (d = ""; b < c; ) {\n var e = a[b++];\n if (e & 128) {\n var f = a[b++] & 63;\n if (192 == (e & 224))\n d += String.fromCharCode((e & 31) << 6 | f);\n else {\n var h = a[b++] & 63;\n e = 224 == (e & 240) ? (e & 15) << 12 | f << 6 | h : (e & 7) << 18 | f << 12 | h << 6 | a[b++] & 63;\n 65536 > e ? d += String.fromCharCode(e) : (e -= 65536, d += String.fromCharCode(55296 | e >> 10, 56320 | e & 1023));\n }\n } else\n d += String.fromCharCode(e);\n }\n return d;\n }, J = (a, b) => (a >>>= 0) ? ab(E, a, b) : "", bb = (a) => {\n for (var b = 0, c = 0; c < a.length; ++c) {\n var d = a.charCodeAt(c);\n 127 >= d ? b++ : 2047 >= d ? b += 2 : 55296 <= d && 57343 >= d ? (b += 4, ++c) : b += 3;\n }\n return b;\n }, M = (a, b, c, d) => {\n c >>>= 0;\n if (!(0 < d))\n return 0;\n var e = c;\n d = c + d - 1;\n for (var f = 0; f < a.length; ++f) {\n var h = a.charCodeAt(f);\n if (55296 <= h && 57343 >= h) {\n var k = a.charCodeAt(++f);\n h = 65536 + ((h & 1023) << 10) | k & 1023;\n }\n if (127 >= h) {\n if (c >= d)\n break;\n b[c++ >>> 0] = h;\n } else {\n if (2047 >= h) {\n if (c + 1 >= d)\n break;\n b[c++ >>> 0] = 192 | h >> 6;\n } else {\n if (65535 >= h) {\n if (c + 2 >= d)\n break;\n b[c++ >>> 0] = 224 | h >> 12;\n } else {\n if (c + 3 >= d)\n break;\n b[c++ >>> 0] = 240 | h >> 18;\n b[c++ >>> 0] = 128 | h >> 12 & 63;\n }\n b[c++ >>> 0] = 128 | h >> 6 & 63;\n }\n b[c++ >>> 0] = 128 | h & 63;\n }\n }\n b[c >>> 0] = 0;\n return c - e;\n }, cb, N = (a) => {\n for (var b = ""; E[a >>> 0]; )\n b += cb[E[a++ >>> 0]];\n return b;\n }, db = {}, eb = {}, fb = {}, O;\n function gb(a, b, c = {}) {\n var d = b.name;\n if (!a)\n throw new O(`type "${d}" must have a positive integer typeid pointer`);\n if (eb.hasOwnProperty(a)) {\n if (c.Xh)\n return;\n throw new O(`Cannot register type \'${d}\' twice`);\n }\n eb[a] = b;\n delete fb[a];\n db.hasOwnProperty(a) && (b = db[a], delete db[a], b.forEach((e) => e()));\n }\n function P(a, b, c = {}) {\n if (!("argPackAdvance" in b))\n throw new TypeError("registerType registeredInstance requires argPackAdvance");\n return gb(a, b, c);\n }\n var hb = (a, b, c) => {\n switch (b) {\n case 1:\n return c ? (d) => z[d >>> 0] : (d) => E[d >>> 0];\n case 2:\n return c ? (d) => ta[d >>> 1 >>> 0] : (d) => ua[d >>> 1 >>> 0];\n case 4:\n return c ? (d) => G[d >>> 2 >>> 0] : (d) => I[d >>> 2 >>> 0];\n case 8:\n return c ? (d) => wa[d >>> 3] : (d) => xa[d >>> 3];\n default:\n throw new TypeError(`invalid integer width (${b}): ${a}`);\n }\n }, ib = [], Q = [];\n function jb(a) {\n a >>>= 0;\n 9 < a && 0 === --Q[a + 1] && (Q[a] = void 0, ib.push(a));\n }\n var R = (a) => {\n if (!a)\n throw new O("Cannot use deleted val. handle = " + a);\n return Q[a];\n }, S = (a) => {\n switch (a) {\n case void 0:\n return 2;\n case null:\n return 4;\n case true:\n return 6;\n case false:\n return 8;\n default:\n const b = ib.pop() || Q.length;\n Q[b] = a;\n Q[b + 1] = 1;\n return b;\n }\n };\n function kb(a) {\n return this.fromWireType(I[a >>> 2 >>> 0]);\n }\n var lb = { name: "emscripten::val", fromWireType: (a) => {\n var b = R(a);\n jb(a);\n return b;\n }, toWireType: (a, b) => S(b), argPackAdvance: 8, readValueFromPointer: kb, Mh: null }, mb = (a, b) => {\n switch (b) {\n case 4:\n return function(c) {\n return this.fromWireType(va[c >>> 2 >>> 0]);\n };\n case 8:\n return function(c) {\n return this.fromWireType(ya[c >>> 3 >>> 0]);\n };\n default:\n throw new TypeError(`invalid float width (${b}): ${a}`);\n }\n }, nb = "undefined" != typeof TextDecoder ? new TextDecoder("utf-16le") : void 0, ob = (a, b) => {\n var c = a >> 1;\n for (var d = c + b / 2; !(c >= d) && ua[c >>> 0]; )\n ++c;\n c <<= 1;\n if (32 < c - a && nb)\n return nb.decode(E.subarray(a >>> 0, c >>> 0));\n c = "";\n for (d = 0; !(d >= b / 2); ++d) {\n var e = ta[a + 2 * d >>> 1 >>> 0];\n if (0 == e)\n break;\n c += String.fromCharCode(e);\n }\n return c;\n }, pb = (a, b, c) => {\n c ??= 2147483647;\n if (2 > c)\n return 0;\n c -= 2;\n var d = b;\n c = c < 2 * a.length ? c / 2 : a.length;\n for (var e = 0; e < c; ++e)\n ta[b >>> 1 >>> 0] = a.charCodeAt(e), b += 2;\n ta[b >>> 1 >>> 0] = 0;\n return b - d;\n }, qb = (a) => 2 * a.length, rb = (a, b) => {\n for (var c = 0, d = ""; !(c >= b / 4); ) {\n var e = G[a + 4 * c >>> 2 >>> 0];\n if (0 == e)\n break;\n ++c;\n 65536 <= e ? (e -= 65536, d += String.fromCharCode(55296 | e >> 10, 56320 | e & 1023)) : d += String.fromCharCode(e);\n }\n return d;\n }, sb = (a, b, c) => {\n b >>>= 0;\n c ??= 2147483647;\n if (4 > c)\n return 0;\n var d = b;\n c = d + c - 4;\n for (var e = 0; e < a.length; ++e) {\n var f = a.charCodeAt(e);\n if (55296 <= f && 57343 >= f) {\n var h = a.charCodeAt(++e);\n f = 65536 + ((f & 1023) << 10) | h & 1023;\n }\n G[b >>> 2 >>> 0] = f;\n b += 4;\n if (b + 4 > c)\n break;\n }\n G[b >>> 2 >>> 0] = 0;\n return b - d;\n }, tb = (a) => {\n for (var b = 0, c = 0; c < a.length; ++c) {\n var d = a.charCodeAt(c);\n 55296 <= d && 57343 >= d && ++c;\n b += 4;\n }\n return b;\n }, vb = (a, b) => {\n var c = eb[a];\n if (void 0 === c)\n throw a = ub(a), c = N(a), T(a), new O(`${b} has unknown type ${c}`);\n return c;\n }, wb = (a, b, c) => {\n var d = [];\n a = a.toWireType(d, c);\n d.length && (I[b >>> 2 >>> 0] = S(d));\n return a;\n }, xb = (a) => {\n try {\n a();\n } catch (b) {\n Ga(b);\n }\n }, yb = (a) => {\n if (!x)\n try {\n a();\n try {\n sa = sa = a = sa, g.onExit?.(a), x = true, ha(a, new Pa(a));\n } catch (b) {\n b instanceof Pa || "unwind" == b || ha(1, b);\n }\n } catch (b) {\n b instanceof Pa || "unwind" == b || ha(1, b);\n }\n };\n function zb() {\n var a = U, b = {};\n for (let [c, d] of Object.entries(a))\n b[c] = "function" == typeof d ? (...e) => {\n Ab.push(c);\n try {\n return d(...e);\n } finally {\n x || (Ab.pop(), t && 1 === V && 0 === Ab.length && (V = 0, xb(Bb), "undefined" != typeof Fibers && Fibers.mi()));\n }\n } : d;\n return b;\n }\n var V = 0, t = null, Cb = 0, Ab = [], Db = {}, Eb = {}, Fb = 0, Gb = null, Hb = [];\n function ca() {\n return new Promise((a, b) => {\n Gb = { resolve: a, reject: b };\n });\n }\n function Ib() {\n var a = Jb(65548), b = a + 12;\n I[a >>> 2 >>> 0] = b;\n I[a + 4 >>> 2 >>> 0] = b + 65536;\n b = Ab[0];\n var c = Db[b];\n void 0 === c && (c = Fb++, Db[b] = c, Eb[c] = b);\n G[a + 8 >>> 2 >>> 0] = c;\n return a;\n }\n function Kb(a) {\n if (!x) {\n if (0 === V) {\n var b = false, c = false;\n a((d = 0) => {\n if (!x && (Cb = d, b = true, c)) {\n V = 2;\n xb(() => Lb(t));\n "undefined" != typeof Browser && Browser.Sh.Wh && Browser.Sh.resume();\n d = false;\n try {\n var e = (0, U[Eb[G[t + 8 >>> 2 >>> 0]]])();\n } catch (k) {\n e = k, d = true;\n }\n var f = false;\n if (!t) {\n var h = Gb;\n h && (Gb = null, (d ? h.reject : h.resolve)(e), f = true);\n }\n if (d && !f)\n throw e;\n }\n });\n c = true;\n b || (V = 1, t = Ib(), "undefined" != typeof Browser && Browser.Sh.Wh && Browser.Sh.pause(), xb(() => Mb(t)));\n } else\n 2 === V ? (V = 0, xb(Nb), T(t), t = null, Hb.forEach(yb)) : Ga(`invalid state: ${V}`);\n return Cb;\n }\n }\n function Ob(a) {\n return Kb((b) => {\n a().then(b);\n });\n }\n var Pb = [], Qb = {}, Rb = (a) => {\n var b = Qb[a];\n return void 0 === b ? N(a) : b;\n }, Sb = () => "object" == typeof globalThis ? globalThis : Function("return this")(), Tb = (a) => {\n var b = Pb.length;\n Pb.push(a);\n return b;\n }, Ub = (a, b) => {\n for (var c = Array(a), d = 0; d < a; ++d)\n c[d] = vb(I[b + 4 * d >>> 2 >>> 0], "parameter " + d);\n return c;\n }, Vb = (a, b) => Object.defineProperty(b, "name", { value: a });\n function Wb(a) {\n var b = Function;\n if (!(b instanceof Function))\n throw new TypeError(`new_ called with constructor type ${typeof b} which is not a function`);\n var c = Vb(b.name || "unknownFunctionName", function() {\n });\n c.prototype = b.prototype;\n c = new c();\n a = b.apply(c, a);\n return a instanceof Object ? a : c;\n }\n var W = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400), Xb = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], Yb = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], Zb = [], $b = (a, b) => {\n Zb.length = 0;\n for (var c; c = E[a++ >>> 0]; ) {\n var d = 105 != c;\n d &= 112 != c;\n b += d && b % 8 ? 4 : 0;\n Zb.push(112 == c ? I[b >>> 2 >>> 0] : 106 == c ? wa[b >>> 3] : 105 == c ? G[b >>> 2 >>> 0] : ya[b >>> 3 >>> 0]);\n b += d ? 8 : 4;\n }\n return Zb;\n }, ac = {}, cc = () => {\n if (!bc) {\n var a = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", _: fa || "./this.program" }, b;\n for (b in ac)\n void 0 === ac[b] ? delete a[b] : a[b] = ac[b];\n var c = [];\n for (b in a)\n c.push(`${b}=${a[b]}`);\n bc = c;\n }\n return bc;\n }, bc, dc = [null, [], []], ec = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], fc = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n function gc(a) {\n var b = Array(bb(a) + 1);\n M(a, b, 0, b.length);\n return b;\n }\n function hc(a, b, c, d) {\n function e(p, u, y) {\n for (p = "number" == typeof p ? p.toString() : p || ""; p.length < u; )\n p = y[0] + p;\n return p;\n }\n function f(p, u) {\n return e(p, u, "0");\n }\n function h(p, u) {\n function y(B) {\n return 0 > B ? -1 : 0 < B ? 1 : 0;\n }\n var A;\n 0 === (A = y(p.getFullYear() - u.getFullYear())) && 0 === (A = y(p.getMonth() - u.getMonth())) && (A = y(p.getDate() - u.getDate()));\n return A;\n }\n function k(p) {\n switch (p.getDay()) {\n case 0:\n return new Date(p.getFullYear() - 1, 11, 29);\n case 1:\n return p;\n case 2:\n return new Date(p.getFullYear(), 0, 3);\n case 3:\n return new Date(\n p.getFullYear(),\n 0,\n 2\n );\n case 4:\n return new Date(p.getFullYear(), 0, 1);\n case 5:\n return new Date(p.getFullYear() - 1, 11, 31);\n case 6:\n return new Date(p.getFullYear() - 1, 11, 30);\n }\n }\n function l(p) {\n var u = p.Kh;\n for (p = new Date(new Date(p.Lh + 1900, 0, 1).getTime()); 0 < u; ) {\n var y = p.getMonth(), A = (W(p.getFullYear()) ? ec : fc)[y];\n if (u > A - p.getDate())\n u -= A - p.getDate() + 1, p.setDate(1), 11 > y ? p.setMonth(y + 1) : (p.setMonth(0), p.setFullYear(p.getFullYear() + 1));\n else {\n p.setDate(p.getDate() + u);\n break;\n }\n }\n y = new Date(p.getFullYear() + 1, 0, 4);\n u = k(new Date(\n p.getFullYear(),\n 0,\n 4\n ));\n y = k(y);\n return 0 >= h(u, p) ? 0 >= h(y, p) ? p.getFullYear() + 1 : p.getFullYear() : p.getFullYear() - 1;\n }\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n var m = I[d + 40 >>> 2 >>> 0];\n d = { ji: G[d >>> 2 >>> 0], ii: G[d + 4 >>> 2 >>> 0], Qh: G[d + 8 >>> 2 >>> 0], Th: G[d + 12 >>> 2 >>> 0], Rh: G[d + 16 >>> 2 >>> 0], Lh: G[d + 20 >>> 2 >>> 0], Jh: G[d + 24 >>> 2 >>> 0], Kh: G[d + 28 >>> 2 >>> 0], li: G[d + 32 >>> 2 >>> 0], hi: G[d + 36 >>> 2 >>> 0], ki: m ? J(m) : "" };\n c = J(c);\n m = {\n "%c": "%a %b %d %H:%M:%S %Y",\n "%D": "%m/%d/%y",\n "%F": "%Y-%m-%d",\n "%h": "%b",\n "%r": "%I:%M:%S %p",\n "%R": "%H:%M",\n "%T": "%H:%M:%S",\n "%x": "%m/%d/%y",\n "%X": "%H:%M:%S",\n "%Ec": "%c",\n "%EC": "%C",\n "%Ex": "%m/%d/%y",\n "%EX": "%H:%M:%S",\n "%Ey": "%y",\n "%EY": "%Y",\n "%Od": "%d",\n "%Oe": "%e",\n "%OH": "%H",\n "%OI": "%I",\n "%Om": "%m",\n "%OM": "%M",\n "%OS": "%S",\n "%Ou": "%u",\n "%OU": "%U",\n "%OV": "%V",\n "%Ow": "%w",\n "%OW": "%W",\n "%Oy": "%y"\n };\n for (var n in m)\n c = c.replace(new RegExp(n, "g"), m[n]);\n var q = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), r = "January February March April May June July August September October November December".split(" ");\n m = { "%a": (p) => q[p.Jh].substring(0, 3), "%A": (p) => q[p.Jh], "%b": (p) => r[p.Rh].substring(0, 3), "%B": (p) => r[p.Rh], "%C": (p) => f((p.Lh + 1900) / 100 | 0, 2), "%d": (p) => f(p.Th, 2), "%e": (p) => e(p.Th, 2, " "), "%g": (p) => l(p).toString().substring(2), "%G": l, "%H": (p) => f(p.Qh, 2), "%I": (p) => {\n p = p.Qh;\n 0 == p ? p = 12 : 12 < p && (p -= 12);\n return f(p, 2);\n }, "%j": (p) => {\n for (var u = 0, y = 0; y <= p.Rh - 1; u += (W(p.Lh + 1900) ? ec : fc)[y++])\n ;\n return f(p.Th + u, 3);\n }, "%m": (p) => f(p.Rh + 1, 2), "%M": (p) => f(p.ii, 2), "%n": () => "\\n", "%p": (p) => 0 <= p.Qh && 12 > p.Qh ? "AM" : "PM", "%S": (p) => f(p.ji, 2), "%t": () => " ", "%u": (p) => p.Jh || 7, "%U": (p) => f(Math.floor((p.Kh + 7 - p.Jh) / 7), 2), "%V": (p) => {\n var u = Math.floor((p.Kh + 7 - (p.Jh + 6) % 7) / 7);\n 2 >= (p.Jh + 371 - p.Kh - 2) % 7 && u++;\n if (u)\n 53 == u && (y = (p.Jh + 371 - p.Kh) % 7, 4 == y || 3 == y && W(p.Lh) || (u = 1));\n else {\n u = 52;\n var y = (p.Jh + 7 - p.Kh - 1) % 7;\n (4 == y || 5 == y && W(p.Lh % 400 - 1)) && u++;\n }\n return f(u, 2);\n }, "%w": (p) => p.Jh, "%W": (p) => f(Math.floor((p.Kh + 7 - (p.Jh + 6) % 7) / 7), 2), "%y": (p) => (p.Lh + 1900).toString().substring(2), "%Y": (p) => p.Lh + 1900, "%z": (p) => {\n p = p.hi;\n var u = 0 <= p;\n p = Math.abs(p) / 60;\n return (u ? "+" : "-") + String("0000" + (p / 60 * 100 + p % 60)).slice(-4);\n }, "%Z": (p) => p.ki, "%%": () => "%" };\n c = c.replace(/%%/g, "\\0\\0");\n for (n in m)\n c.includes(n) && (c = c.replace(new RegExp(n, "g"), m[n](d)));\n c = c.replace(/\\0\\0/g, "%");\n n = gc(c);\n if (n.length > b)\n return 0;\n z.set(n, a >>> 0);\n return n.length - 1;\n }\n for (var ic = Array(256), jc = 0; 256 > jc; ++jc)\n ic[jc] = String.fromCharCode(jc);\n cb = ic;\n O = g.BindingError = class extends Error {\n constructor(a) {\n super(a);\n this.name = "BindingError";\n }\n };\n g.InternalError = class extends Error {\n constructor(a) {\n super(a);\n this.name = "InternalError";\n }\n };\n Q.push(0, 1, void 0, 1, null, 1, true, 1, false, 1);\n g.count_emval_handles = () => Q.length / 2 - 5 - ib.length;\n var Cf = {\n bd: function(a, b, c) {\n return Ob(async () => {\n await g.bi(a, b, c);\n });\n },\n v: function(a) {\n a = new Sa(a >>> 0);\n 0 == z[a.Ih + 12 >>> 0] && (z[a.Ih + 12 >>> 0] = 1, Ra--);\n z[a.Ih + 13 >>> 0] = 0;\n Qa.push(a);\n kc(a.Nh);\n if (lc(I[a.Ih + 4 >>> 2 >>> 0]))\n a = I[a.Nh >>> 2 >>> 0];\n else {\n var b = I[a.Ih + 16 >>> 2 >>> 0];\n a = 0 !== b ? b : a.Nh;\n }\n return a;\n },\n N: () => {\n X(0, 0);\n var a = Qa.pop();\n mc(a.Nh);\n L = 0;\n },\n a: function() {\n return Za([]);\n },\n m: function(a) {\n return Za([a >>> 0]);\n },\n x: function(a, b) {\n return Za([a >>> 0, b >>> 0]);\n },\n q: function(a, b, c) {\n return Za([a >>> 0, b >>> 0, c >>> 0]);\n },\n Bb: () => {\n var a = Qa.pop();\n a || Ga("no exception to throw");\n var b = a.Nh;\n 0 == z[a.Ih + 13 >>> 0] && (Qa.push(a), z[a.Ih + 13 >>> 0] = 1, z[a.Ih + 12 >>> 0] = 0, Ra++);\n L = b;\n throw L;\n },\n s: function(a, b, c) {\n a >>>= 0;\n var d = new Sa(a);\n I[d.Ih + 16 >>> 2 >>> 0] = 0;\n I[d.Ih + 4 >>> 2 >>> 0] = b >>> 0;\n I[d.Ih + 8 >>> 2 >>> 0] = c >>> 0;\n L = a;\n Ra++;\n throw L;\n },\n fb: () => Ra,\n g: function(a) {\n L ||= a >>> 0;\n throw L;\n },\n Cb: function() {\n return 0;\n },\n $c: function() {\n },\n Mc: function() {\n },\n Oc: function() {\n },\n Gc: function() {\n return 0;\n },\n Zc: function() {\n },\n Uc: function() {\n },\n Yc: function() {\n },\n _b: function() {\n },\n Nc: function() {\n },\n Kc: function() {\n },\n _c: function() {\n },\n Lc: function() {\n },\n Wb: function(a, b, c) {\n b = N(b >>> 0);\n P(a >>> 0, { name: b, fromWireType: (d) => d, toWireType: function(d, e) {\n if ("bigint" != typeof e && "number" != typeof e)\n throw null === e ? e = "null" : (d = typeof e, e = "object" === d || "array" === d || "function" === d ? e.toString() : "" + e), new TypeError(`Cannot convert "${e}" to ${this.name}`);\n "number" == typeof e && (e = BigInt(e));\n return e;\n }, argPackAdvance: 8, readValueFromPointer: hb(b, c >>> 0, -1 == b.indexOf("u")), Mh: null });\n },\n Ec: function(a, b, c, d) {\n b = N(b >>> 0);\n P(a >>> 0, { name: b, fromWireType: function(e) {\n return !!e;\n }, toWireType: function(e, f) {\n return f ? c : d;\n }, argPackAdvance: 8, readValueFromPointer: function(e) {\n return this.fromWireType(E[e >>> 0]);\n }, Mh: null });\n },\n Cc: function(a) {\n return P(a >>> 0, lb);\n },\n Vb: function(a, b, c) {\n b = N(b >>> 0);\n P(a >>> 0, { name: b, fromWireType: (d) => d, toWireType: (d, e) => e, argPackAdvance: 8, readValueFromPointer: mb(b, c >>> 0), Mh: null });\n },\n Aa: function(a, b, c, d, e) {\n a >>>= 0;\n c >>>= 0;\n b = N(b >>> 0);\n -1 === e && (e = 4294967295);\n e = (k) => k;\n if (0 === d) {\n var f = 32 - 8 * c;\n e = (k) => k << f >>> f;\n }\n var h = b.includes("unsigned") ? function(k, l) {\n return l >>> 0;\n } : function(k, l) {\n return l;\n };\n P(a, {\n name: b,\n fromWireType: e,\n toWireType: h,\n argPackAdvance: 8,\n readValueFromPointer: hb(b, c, 0 !== d),\n Mh: null\n });\n },\n _: function(a, b, c) {\n function d(f) {\n return new e(z.buffer, I[f + 4 >>> 2 >>> 0], I[f >>> 2 >>> 0]);\n }\n var e = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array, BigInt64Array, BigUint64Array][b];\n c = N(c >>> 0);\n P(a >>> 0, { name: c, fromWireType: d, argPackAdvance: 8, readValueFromPointer: d }, { Xh: true });\n },\n Xb: function(a, b) {\n b = N(b >>> 0);\n var c = "std::string" === b;\n P(a >>> 0, { name: b, fromWireType: function(d) {\n var e = I[d >>> 2 >>> 0], f = d + 4;\n if (c)\n for (var h = f, k = 0; k <= e; ++k) {\n var l = f + k;\n if (k == e || 0 == E[l >>> 0]) {\n h = J(h, l - h);\n if (void 0 === m)\n var m = h;\n else\n m += String.fromCharCode(0), m += h;\n h = l + 1;\n }\n }\n else {\n m = Array(e);\n for (k = 0; k < e; ++k)\n m[k] = String.fromCharCode(E[f + k >>> 0]);\n m = m.join("");\n }\n T(d);\n return m;\n }, toWireType: function(d, e) {\n e instanceof ArrayBuffer && (e = new Uint8Array(e));\n var f = "string" == typeof e;\n if (!(f || e instanceof Uint8Array || e instanceof Uint8ClampedArray || e instanceof Int8Array))\n throw new O("Cannot pass non-string to std::string");\n var h = c && f ? bb(e) : e.length;\n var k = Jb(4 + h + 1), l = k + 4;\n I[k >>> 2 >>> 0] = h;\n if (c && f)\n M(e, E, l, h + 1);\n else if (f)\n for (f = 0; f < h; ++f) {\n var m = e.charCodeAt(f);\n if (255 < m)\n throw T(l), new O("String has UTF-16 code units that do not fit in 8 bits");\n E[l + f >>> 0] = m;\n }\n else\n for (f = 0; f < h; ++f)\n E[l + f >>> 0] = e[f];\n null !== d && d.push(T, k);\n return k;\n }, argPackAdvance: 8, readValueFromPointer: kb, Mh(d) {\n T(d);\n } });\n },\n Ab: function(a, b, c) {\n b >>>= 0;\n c >>>= 0;\n c = N(c);\n if (2 === b) {\n var d = ob;\n var e = pb;\n var f = qb;\n var h = (k) => ua[k >>> 1 >>> 0];\n } else\n 4 === b && (d = rb, e = sb, f = tb, h = (k) => I[k >>> 2 >>> 0]);\n P(a >>> 0, {\n name: c,\n fromWireType: (k) => {\n for (var l = I[k >>> 2 >>> 0], m, n = k + 4, q = 0; q <= l; ++q) {\n var r = k + 4 + q * b;\n if (q == l || 0 == h(r))\n n = d(n, r - n), void 0 === m ? m = n : (m += String.fromCharCode(0), m += n), n = r + b;\n }\n T(k);\n return m;\n },\n toWireType: (k, l) => {\n if ("string" != typeof l)\n throw new O(`Cannot pass non-string to C++ string type ${c}`);\n var m = f(l), n = Jb(4 + m + b);\n I[n >>> 2 >>> 0] = m / b;\n e(l, n + 4, m + b);\n null !== k && k.push(T, n);\n return n;\n },\n argPackAdvance: 8,\n readValueFromPointer: kb,\n Mh(k) {\n T(k);\n }\n });\n },\n Fc: function(a, b) {\n b = N(b >>> 0);\n P(a >>> 0, { Yh: true, name: b, argPackAdvance: 0, fromWireType: () => {\n }, toWireType: () => {\n } });\n },\n ad: () => 1,\n kd: function(a, b, c) {\n b >>>= 0;\n c >>>= 0;\n a = R(a >>> 0);\n b = vb(b, "emval::as");\n return wb(b, c, a);\n },\n Cd: function(a) {\n a >>>= 0;\n return Ob(() => {\n a = R(a);\n return a.then(S);\n });\n },\n ud: function(a, b, c, d) {\n c >>>= 0;\n d >>>= 0;\n a = Pb[a >>> 0];\n b = R(b >>> 0);\n return a(null, b, c, d);\n },\n ia: function(a, b, c, d, e) {\n c >>>= 0;\n d >>>= 0;\n e >>>= 0;\n a = Pb[a >>> 0];\n b = R(b >>> 0);\n c = Rb(c);\n return a(b, b[c], d, e);\n },\n Bc: jb,\n qd: function(a, b) {\n b >>>= 0;\n a = R(a >>> 0);\n b = R(b);\n return a == b;\n },\n zd: function(a) {\n a >>>= 0;\n if (0 === a)\n return S(Sb());\n a = Rb(a);\n return S(Sb()[a]);\n },\n ha: function(a, b, c) {\n b = Ub(a, b >>> 0);\n var d = b.shift();\n a--;\n var e = "return function (obj, func, destructorsRef, args) {\\n", f = 0, h = [];\n 0 === c && h.push("obj");\n for (var k = ["retType"], l = [d], m = 0; m < a; ++m)\n h.push("arg" + m), k.push("argType" + m), l.push(b[m]), e += ` var arg${m} = argType${m}.readValueFromPointer(args${f ? "+" + f : ""});\n`, f += b[m].argPackAdvance;\n e += ` var rv = ${1 === c ? "new func" : "func.call"}(${h.join(", ")});\n`;\n d.Yh || (k.push("emval_returnValue"), l.push(wb), e += " return emval_returnValue(retType, destructorsRef, rv);\\n");\n k.push(e + "};\\n");\n a = Wb(k)(...l);\n c = `methodCaller<(${b.map((n) => n.name).join(", ")}) => ${d.name}>`;\n return Tb(Vb(c, a));\n },\n yd: function(a, b) {\n b >>>= 0;\n a = R(a >>> 0);\n b = R(b);\n return S(a[b]);\n },\n ba: function(a) {\n a >>>= 0;\n 9 < a && (Q[a + 1] += 1);\n },\n md: function() {\n return S([]);\n },\n hd: function(a) {\n a = R(a >>> 0);\n for (var b = Array(a.length), c = 0; c < a.length; c++)\n b[c] = a[c];\n return S(b);\n },\n U: function(a) {\n return S(Rb(a >>> 0));\n },\n Xa: function() {\n return S({});\n },\n vd: function(a) {\n a >>>= 0;\n for (var b = R(a); b.length; ) {\n var c = b.pop();\n b.pop()(c);\n }\n jb(a);\n },\n sd: function(a, b, c) {\n b >>>= 0;\n c >>>= 0;\n a = R(a >>> 0);\n b = R(b);\n c = R(c);\n a[b] = c;\n },\n zb: function(a, b) {\n b >>>= 0;\n a = vb(a >>> 0, "_emval_take_value");\n a = a.readValueFromPointer(b);\n return S(a);\n },\n Rc: function(a, b) {\n a = -9007199254740992 > a || 9007199254740992 < a ? NaN : Number(a);\n b >>>= 0;\n a = new Date(1e3 * a);\n G[b >>> 2 >>> 0] = a.getUTCSeconds();\n G[b + 4 >>> 2 >>> 0] = a.getUTCMinutes();\n G[b + 8 >>> 2 >>> 0] = a.getUTCHours();\n G[b + 12 >>> 2 >>> 0] = a.getUTCDate();\n G[b + 16 >>> 2 >>> 0] = a.getUTCMonth();\n G[b + 20 >>> 2 >>> 0] = a.getUTCFullYear() - 1900;\n G[b + 24 >>> 2 >>> 0] = a.getUTCDay();\n G[b + 28 >>> 2 >>> 0] = (a.getTime() - Date.UTC(\n a.getUTCFullYear(),\n 0,\n 1,\n 0,\n 0,\n 0,\n 0\n )) / 864e5 | 0;\n },\n Sc: function(a, b) {\n a = -9007199254740992 > a || 9007199254740992 < a ? NaN : Number(a);\n b >>>= 0;\n a = new Date(1e3 * a);\n G[b >>> 2 >>> 0] = a.getSeconds();\n G[b + 4 >>> 2 >>> 0] = a.getMinutes();\n G[b + 8 >>> 2 >>> 0] = a.getHours();\n G[b + 12 >>> 2 >>> 0] = a.getDate();\n G[b + 16 >>> 2 >>> 0] = a.getMonth();\n G[b + 20 >>> 2 >>> 0] = a.getFullYear() - 1900;\n G[b + 24 >>> 2 >>> 0] = a.getDay();\n G[b + 28 >>> 2 >>> 0] = (W(a.getFullYear()) ? Xb : Yb)[a.getMonth()] + a.getDate() - 1 | 0;\n G[b + 36 >>> 2 >>> 0] = -(60 * a.getTimezoneOffset());\n var c = new Date(a.getFullYear(), 6, 1).getTimezoneOffset(), d = new Date(a.getFullYear(), 0, 1).getTimezoneOffset();\n G[b + 32 >>> 2 >>> 0] = (c != d && a.getTimezoneOffset() == Math.min(d, c)) | 0;\n },\n Tc: function(a) {\n a >>>= 0;\n var b = new Date(G[a + 20 >>> 2 >>> 0] + 1900, G[a + 16 >>> 2 >>> 0], G[a + 12 >>> 2 >>> 0], G[a + 8 >>> 2 >>> 0], G[a + 4 >>> 2 >>> 0], G[a >>> 2 >>> 0], 0), c = G[a + 32 >>> 2 >>> 0], d = b.getTimezoneOffset(), e = new Date(b.getFullYear(), 6, 1).getTimezoneOffset(), f = new Date(b.getFullYear(), 0, 1).getTimezoneOffset(), h = Math.min(f, e);\n 0 > c ? G[a + 32 >>> 2 >>> 0] = Number(e != f && h == d) : 0 < c != (h == d) && (e = Math.max(f, e), b.setTime(b.getTime() + 6e4 * ((0 < c ? h : e) - d)));\n G[a + 24 >>> 2 >>> 0] = b.getDay();\n G[a + 28 >>> 2 >>> 0] = (W(b.getFullYear()) ? Xb : Yb)[b.getMonth()] + b.getDate() - 1 | 0;\n G[a >>> 2 >>> 0] = b.getSeconds();\n G[a + 4 >>> 2 >>> 0] = b.getMinutes();\n G[a + 8 >>> 2 >>> 0] = b.getHours();\n G[a + 12 >>> 2 >>> 0] = b.getDate();\n G[a + 16 >>> 2 >>> 0] = b.getMonth();\n G[a + 20 >>> 2 >>> 0] = b.getYear();\n a = b.getTime();\n return BigInt(isNaN(a) ? -1 : a / 1e3);\n },\n Pc: function() {\n return -52;\n },\n Qc: function() {\n },\n Ic: function(a, b, c, d) {\n c >>>= 0;\n d >>>= 0;\n var e = (/* @__PURE__ */ new Date()).getFullYear(), f = new Date(e, 0, 1), h = new Date(e, 6, 1);\n e = f.getTimezoneOffset();\n var k = h.getTimezoneOffset();\n I[a >>> 0 >>> 2 >>> 0] = 60 * Math.max(e, k);\n G[b >>> 0 >>> 2 >>> 0] = Number(e != k);\n a = (l) => l.toLocaleTimeString(void 0, { hour12: false, timeZoneName: "short" }).split(" ")[1];\n f = a(f);\n h = a(h);\n k < e ? (M(f, E, c, 17), M(h, E, d, 17)) : (M(f, E, d, 17), M(h, E, c, 17));\n },\n bb: () => {\n Ga("");\n },\n A: function(a, b, c) {\n a >>>= 0;\n b = $b(b >>> 0, c >>> 0);\n return Oa[a](...b);\n },\n bc: function(a, b, c) {\n a >>>= 0;\n b = $b(b >>> 0, c >>> 0);\n return Oa[a](...b);\n },\n $b: () => Date.now(),\n Jc: function() {\n return 4294901760;\n },\n ga: () => performance.now(),\n Hc: function(a) {\n a >>>= 0;\n var b = E.length;\n if (4294901760 < a)\n return false;\n for (var c = 1; 4 >= c; c *= 2) {\n var d = b * (1 + 0.2 / c);\n d = Math.min(d, a + 100663296);\n var e = Math;\n d = Math.max(a, d);\n a: {\n e = (e.min.call(e, 4294901760, d + (65536 - d % 65536) % 65536) - ra.buffer.byteLength + 65535) / 65536;\n try {\n ra.grow(e);\n za();\n var f = 1;\n break a;\n } catch (h) {\n }\n f = void 0;\n }\n if (f)\n return true;\n }\n return false;\n },\n Wc: function(a, b) {\n a >>>= 0;\n b >>>= 0;\n var c = 0;\n cc().forEach((d, e) => {\n var f = b + c;\n e = I[a + 4 * e >>> 2 >>> 0] = f;\n for (f = 0; f < d.length; ++f)\n z[e++ >>> 0] = d.charCodeAt(f);\n z[e >>> 0] = 0;\n c += d.length + 1;\n });\n return 0;\n },\n Xc: function(a, b) {\n a >>>= 0;\n b >>>= 0;\n var c = cc();\n I[a >>> 2 >>> 0] = c.length;\n var d = 0;\n c.forEach((e) => d += e.length + 1);\n I[b >>> 2 >>> 0] = d;\n return 0;\n },\n Db: () => 52,\n Zb: function() {\n return 52;\n },\n Vc: function() {\n return 70;\n },\n Yb: function(a, b, c, d) {\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n for (var e = 0, f = 0; f < c; f++) {\n var h = I[b >>> 2 >>> 0], k = I[b + 4 >>> 2 >>> 0];\n b += 8;\n for (var l = 0; l < k; l++) {\n var m = E[h + l >>> 0], n = dc[a];\n 0 === m || 10 === m ? ((1 === a ? qa : w)(ab(n, 0)), n.length = 0) : n.push(m);\n }\n e += k;\n }\n I[d >>> 2 >>> 0] = e;\n return 0;\n },\n xb: nc,\n cd: oc,\n ua: pc,\n W: qc,\n $: rc,\n ra: sc,\n ta: tc,\n dd: uc,\n ob: vc,\n P: wc,\n z: xc,\n b: yc,\n Ub: zc,\n ya: Ac,\n e: Bc,\n kb: Cc,\n h: Dc,\n X: Ec,\n i: Fc,\n ed: Gc,\n j: Hc,\n t: Ic,\n r: Jc,\n o: Kc,\n Wa: Lc,\n Ca: Mc,\n ma: Nc,\n Qb: Oc,\n db: Pc,\n Ib: Qc,\n mb: Rc,\n kc: Sc,\n xc: Tc,\n hc: Uc,\n ic: Vc,\n ac: Wc,\n oa: Xc,\n yb: Yc,\n Ba: Zc,\n Eb: $c,\n ea: ad,\n jc: bd,\n Ta: cd,\n F: dd,\n G: ed,\n Gb: fd,\n jd: gd,\n qa: hd,\n O: jd,\n V: kd,\n T: ld,\n y: md,\n Fb: nd,\n gc: od,\n D: pd,\n Hb: qd,\n id: rd,\n Ua: sd,\n wa: td,\n lc: ud,\n cc: vd,\n Nb: wd,\n aa: xd,\n I: yd,\n C: zd,\n _a: Ad,\n fc: Bd,\n Q: Cd,\n d: Dd,\n ab: Ed,\n n: Fd,\n Ya: Gd,\n va: Hd,\n wb: Id,\n f: Jd,\n yc: Kd,\n da: Ld,\n gb: Md,\n Da: Nd,\n lb: Od,\n hb: Pd,\n c: Qd,\n vc: Rd,\n od: Sd,\n k: Td,\n tc: Ud,\n l: Vd,\n wc: Wd,\n sc: Xd,\n rd: Yd,\n p: Zd,\n Ra: $d,\n tb: ae,\n Qa: be,\n Kb: ce,\n B: de,\n K: ee,\n S: fe,\n $a: ge,\n pc: he,\n ub: ie,\n za: je,\n ka: ke,\n xa: le,\n Sb: me,\n La: ne,\n jb: oe,\n Ga: pe,\n nc: qe,\n Ha: re,\n Ia: se,\n fd: te,\n xd: ue,\n Z: ve,\n pa: we,\n pd: xe,\n wd: ye,\n Mb: ze,\n Ma: Ae,\n Ka: Be,\n Tb: Ce,\n rc: De,\n Ja: Ee,\n Na: Fe,\n pb: Ge,\n la: He,\n Ea: Ie,\n mc: Je,\n qc: Ke,\n Jb: Le,\n Fa: Me,\n ja: Ne,\n Ad: Oe,\n nd: Pe,\n R: Qe,\n eb: Re,\n Za: Se,\n ec: Te,\n ib: Ue,\n E: Ve,\n M: We,\n Va: Xe,\n ld: Ye,\n ca: Ze,\n nb: $e,\n na: af,\n dc: bf,\n Ac: cf,\n u: df,\n L: ef,\n td: ff,\n Pb: gf,\n oc: hf,\n Bd: jf,\n Ob: kf,\n Lb: lf,\n cb: mf,\n zc: nf,\n Rb: of,\n Oa: pf,\n Y: qf,\n uc: rf,\n J: sf,\n gd: tf,\n vb: uf,\n sa: vf,\n H: wf,\n rb: xf,\n Pa: yf,\n Sa: zf,\n sb: Af,\n qb: Bf,\n w: function(a) {\n return a >>> 0;\n },\n Dc: hc,\n fa: function(a, b, c, d) {\n return hc(a >>> 0, b >>> 0, c >>> 0, d >>> 0);\n }\n }, U = function() {\n function a(c) {\n U = c.exports;\n U = zb();\n U = Df();\n ra = U.Dd;\n za();\n Ba.unshift(U.Ed);\n Da--;\n 0 == Da && (null !== Ea && (clearInterval(Ea), Ea = null), Fa && (c = Fa, Fa = null, c()));\n return U;\n }\n var b = { a: Cf };\n Da++;\n if (g.instantiateWasm)\n try {\n return g.instantiateWasm(b, a);\n } catch (c) {\n w(`Module.instantiateWasm callback failed with error: ${c}`), ba(c);\n }\n Na(b, function(c) {\n a(c.instance);\n }).catch(ba);\n return {};\n }(), ub = (a) => (ub = U.Fd)(a);\n g._OrtInit = (a, b) => (g._OrtInit = U.Gd)(a, b);\n g._OrtGetLastError = (a, b) => (g._OrtGetLastError = U.Hd)(a, b);\n g._OrtCreateSessionOptions = (a, b, c, d, e, f, h, k, l, m) => (g._OrtCreateSessionOptions = U.Id)(a, b, c, d, e, f, h, k, l, m);\n g._OrtAppendExecutionProvider = (a, b) => (g._OrtAppendExecutionProvider = U.Jd)(a, b);\n g._OrtAddFreeDimensionOverride = (a, b, c) => (g._OrtAddFreeDimensionOverride = U.Kd)(a, b, c);\n g._OrtAddSessionConfigEntry = (a, b, c) => (g._OrtAddSessionConfigEntry = U.Ld)(a, b, c);\n g._OrtReleaseSessionOptions = (a) => (g._OrtReleaseSessionOptions = U.Md)(a);\n g._OrtCreateSession = (a, b, c) => (g._OrtCreateSession = U.Nd)(a, b, c);\n g._OrtReleaseSession = (a) => (g._OrtReleaseSession = U.Od)(a);\n g._OrtGetInputOutputCount = (a, b, c) => (g._OrtGetInputOutputCount = U.Pd)(a, b, c);\n g._OrtGetInputName = (a, b) => (g._OrtGetInputName = U.Qd)(a, b);\n g._OrtGetOutputName = (a, b) => (g._OrtGetOutputName = U.Rd)(a, b);\n g._OrtFree = (a) => (g._OrtFree = U.Sd)(a);\n g._OrtCreateTensor = (a, b, c, d, e, f) => (g._OrtCreateTensor = U.Td)(a, b, c, d, e, f);\n g._OrtGetTensorData = (a, b, c, d, e) => (g._OrtGetTensorData = U.Ud)(a, b, c, d, e);\n g._OrtReleaseTensor = (a) => (g._OrtReleaseTensor = U.Vd)(a);\n g._OrtCreateRunOptions = (a, b, c, d) => (g._OrtCreateRunOptions = U.Wd)(a, b, c, d);\n g._OrtAddRunConfigEntry = (a, b, c) => (g._OrtAddRunConfigEntry = U.Xd)(a, b, c);\n g._OrtReleaseRunOptions = (a) => (g._OrtReleaseRunOptions = U.Yd)(a);\n g._OrtCreateBinding = (a) => (g._OrtCreateBinding = U.Zd)(a);\n g._OrtBindInput = (a, b, c) => (g._OrtBindInput = U._d)(a, b, c);\n g._OrtBindOutput = (a, b, c, d) => (g._OrtBindOutput = U.$d)(a, b, c, d);\n g._OrtClearBoundOutputs = (a) => (g._OrtClearBoundOutputs = U.ae)(a);\n g._OrtReleaseBinding = (a) => (g._OrtReleaseBinding = U.be)(a);\n g._OrtRunWithBinding = (a, b, c, d, e) => (g._OrtRunWithBinding = U.ce)(a, b, c, d, e);\n g._OrtRun = (a, b, c, d, e, f, h, k) => (g._OrtRun = U.de)(a, b, c, d, e, f, h, k);\n g._OrtEndProfiling = (a) => (g._OrtEndProfiling = U.ee)(a);\n g._JsepOutput = (a, b, c) => (g._JsepOutput = U.fe)(a, b, c);\n g._JsepGetNodeName = (a) => (g._JsepGetNodeName = U.ge)(a);\n var Jb = g._malloc = (a) => (Jb = g._malloc = U.he)(a), T = g._free = (a) => (T = g._free = U.ie)(a), X = (a, b) => (X = U.ke)(a, b), Ta = (a) => (Ta = U.le)(a), Y = (a) => (Y = U.me)(a), Ef = (a) => (Ef = U.ne)(a), Z = () => (Z = U.oe)(), mc = (a) => (mc = U.pe)(a), kc = (a) => (kc = U.qe)(a), Ua = (a, b, c) => (Ua = U.re)(a, b, c), lc = (a) => (lc = U.se)(a), dynCall_vii = g.dynCall_vii = (a, b, c) => (dynCall_vii = g.dynCall_vii = U.te)(a, b, c), Ff = g.dynCall_iiii = (a, b, c, d) => (Ff = g.dynCall_iiii = U.ue)(a, b, c, d), dynCall_iii = g.dynCall_iii = (a, b, c) => (dynCall_iii = g.dynCall_iii = U.ve)(a, b, c), Gf = g.dynCall_ii = (a, b) => (Gf = g.dynCall_ii = U.we)(a, b), Hf = g.dynCall_iiiiiii = (a, b, c, d, e, f, h) => (Hf = g.dynCall_iiiiiii = U.xe)(a, b, c, d, e, f, h), dynCall_vi = g.dynCall_vi = (a, b) => (dynCall_vi = g.dynCall_vi = U.ye)(a, b), dynCall_v = g.dynCall_v = (a) => (dynCall_v = g.dynCall_v = U.ze)(a), If = g.dynCall_iiiiii = (a, b, c, d, e, f) => (If = g.dynCall_iiiiii = U.Ae)(a, b, c, d, e, f), Jf = g.dynCall_iiij = (a, b, c, d) => (Jf = g.dynCall_iiij = U.Be)(a, b, c, d), Kf = g.dynCall_iiiii = (a, b, c, d, e) => (Kf = g.dynCall_iiiii = U.Ce)(a, b, c, d, e), Lf = g.dynCall_viii = (a, b, c, d) => (Lf = g.dynCall_viii = U.De)(a, b, c, d), Mf = g.dynCall_viiiii = (a, b, c, d, e, f) => (Mf = g.dynCall_viiiii = U.Ee)(a, b, c, d, e, f), Nf = g.dynCall_viiii = (a, b, c, d, e) => (Nf = g.dynCall_viiii = U.Fe)(a, b, c, d, e), Of = g.dynCall_viiiiii = (a, b, c, d, e, f, h) => (Of = g.dynCall_viiiiii = U.Ge)(a, b, c, d, e, f, h), Pf = g.dynCall_viiji = (a, b, c, d, e) => (Pf = g.dynCall_viiji = U.He)(a, b, c, d, e), Qf = g.dynCall_viiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q) => (Qf = g.dynCall_viiiiiiiiiii = U.Ie)(a, b, c, d, e, f, h, k, l, m, n, q), Rf = g.dynCall_viiijjjii = (a, b, c, d, e, f, h, k, l) => (Rf = g.dynCall_viiijjjii = U.Je)(a, b, c, d, e, f, h, k, l), Sf = g.dynCall_iid = (a, b, c) => (Sf = g.dynCall_iid = U.Ke)(a, b, c), Tf = g.dynCall_iif = (a, b, c) => (Tf = g.dynCall_iif = U.Le)(a, b, c), Uf = g.dynCall_iij = (a, b, c) => (Uf = g.dynCall_iij = U.Me)(a, b, c), Vf = g.dynCall_jii = (a, b, c) => (Vf = g.dynCall_jii = U.Ne)(a, b, c), Wf = g.dynCall_i = (a) => (Wf = g.dynCall_i = U.Oe)(a), Xf = g.dynCall_viiiiiiii = (a, b, c, d, e, f, h, k, l) => (Xf = g.dynCall_viiiiiiii = U.Pe)(a, b, c, d, e, f, h, k, l), Yf = g.dynCall_viiiiij = (a, b, c, d, e, f, h) => (Yf = g.dynCall_viiiiij = U.Qe)(a, b, c, d, e, f, h), Zf = g.dynCall_ji = (a, b) => (Zf = g.dynCall_ji = U.Re)(a, b), $f = g.dynCall_viij = (a, b, c, d) => ($f = g.dynCall_viij = U.Se)(a, b, c, d), ag = g.dynCall_iiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q) => (ag = g.dynCall_iiiiiiiiiiii = U.Te)(a, b, c, d, e, f, h, k, l, m, n, q), bg = g.dynCall_viiiiiiiii = (a, b, c, d, e, f, h, k, l, m) => (bg = g.dynCall_viiiiiiiii = U.Ue)(a, b, c, d, e, f, h, k, l, m), cg = g.dynCall_ij = (a, b) => (cg = g.dynCall_ij = U.Ve)(a, b), dg = g.dynCall_iiiiij = (a, b, c, d, e, f) => (dg = g.dynCall_iiiiij = U.We)(a, b, c, d, e, f), eg = g.dynCall_j = (a) => (eg = g.dynCall_j = U.Xe)(a), fg = g.dynCall_vij = (a, b, c) => (fg = g.dynCall_vij = U.Ye)(a, b, c), gg = g.dynCall_viijjjiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q) => (gg = g.dynCall_viijjjiiiiii = U.Ze)(a, b, c, d, e, f, h, k, l, m, n, q), hg = g.dynCall_viiijiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q) => (hg = g.dynCall_viiijiiiiiii = U._e)(a, b, c, d, e, f, h, k, l, m, n, q), ig = g.dynCall_iiiiiiii = (a, b, c, d, e, f, h, k) => (ig = g.dynCall_iiiiiiii = U.$e)(a, b, c, d, e, f, h, k), jg = g.dynCall_viiiiiii = (a, b, c, d, e, f, h, k) => (jg = g.dynCall_viiiiiii = U.af)(a, b, c, d, e, f, h, k), kg = g.dynCall_iiiiiiiij = (a, b, c, d, e, f, h, k, l) => (kg = g.dynCall_iiiiiiiij = U.bf)(a, b, c, d, e, f, h, k, l), lg = g.dynCall_viiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (lg = g.dynCall_viiiiiiiiiiiii = U.cf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), mg = g.dynCall_iiiiiiiii = (a, b, c, d, e, f, h, k, l) => (mg = g.dynCall_iiiiiiiii = U.df)(a, b, c, d, e, f, h, k, l), ng = g.dynCall_iiiiijiiiii = (a, b, c, d, e, f, h, k, l, m, n) => (ng = g.dynCall_iiiiijiiiii = U.ef)(a, b, c, d, e, f, h, k, l, m, n), og = g.dynCall_vijjjiiij = (a, b, c, d, e, f, h, k, l) => (og = g.dynCall_vijjjiiij = U.ff)(a, b, c, d, e, f, h, k, l), pg = g.dynCall_fi = (a, b) => (pg = g.dynCall_fi = U.gf)(a, b), qg = g.dynCall_fii = (a, b, c) => (qg = g.dynCall_fii = U.hf)(a, b, c), rg = g.dynCall_di = (a, b) => (rg = g.dynCall_di = U.jf)(a, b), sg = g.dynCall_dii = (a, b, c) => (sg = g.dynCall_dii = U.kf)(a, b, c), tg = g.dynCall_vijj = (a, b, c, d) => (tg = g.dynCall_vijj = U.lf)(a, b, c, d), ug = g.dynCall_iiiiiiiiii = (a, b, c, d, e, f, h, k, l, m) => (ug = g.dynCall_iiiiiiiiii = U.mf)(a, b, c, d, e, f, h, k, l, m), vg = g.dynCall_viijiii = (a, b, c, d, e, f, h) => (vg = g.dynCall_viijiii = U.nf)(a, b, c, d, e, f, h), wg = g.dynCall_viid = (a, b, c, d) => (wg = g.dynCall_viid = U.of)(a, b, c, d), xg = g.dynCall_viffiii = (a, b, c, d, e, f, h) => (xg = g.dynCall_viffiii = U.pf)(a, b, c, d, e, f, h), yg = g.dynCall_viifiii = (a, b, c, d, e, f, h) => (yg = g.dynCall_viifiii = U.qf)(a, b, c, d, e, f, h), zg = g.dynCall_viiiiidiidi = (a, b, c, d, e, f, h, k, l, m, n) => (zg = g.dynCall_viiiiidiidi = U.rf)(a, b, c, d, e, f, h, k, l, m, n), Ag = g.dynCall_viiiiiiiiidi = (a, b, c, d, e, f, h, k, l, m, n, q) => (Ag = g.dynCall_viiiiiiiiidi = U.sf)(a, b, c, d, e, f, h, k, l, m, n, q), Bg = g.dynCall_jiii = (a, b, c, d) => (Bg = g.dynCall_jiii = U.tf)(a, b, c, d), Cg = g.dynCall_vjiiiiii = (a, b, c, d, e, f, h, k) => (Cg = g.dynCall_vjiiiiii = U.uf)(a, b, c, d, e, f, h, k), Dg = g.dynCall_viiid = (a, b, c, d, e) => (Dg = g.dynCall_viiid = U.vf)(a, b, c, d, e), Eg = g.dynCall_viiiiiiiiiji = (a, b, c, d, e, f, h, k, l, m, n, q) => (Eg = g.dynCall_viiiiiiiiiji = U.wf)(a, b, c, d, e, f, h, k, l, m, n, q), Fg = g.dynCall_viji = (a, b, c, d) => (Fg = g.dynCall_viji = U.xf)(a, b, c, d), Gg = g.dynCall_vijjjjjjjjjjjjji = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => (Gg = g.dynCall_vijjjjjjjjjjjjji = U.yf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y), Hg = g.dynCall_viiiji = (a, b, c, d, e, f) => (Hg = g.dynCall_viiiji = U.zf)(a, b, c, d, e, f), Ig = g.dynCall_vijjjiiji = (a, b, c, d, e, f, h, k, l) => (Ig = g.dynCall_vijjjiiji = U.Af)(a, b, c, d, e, f, h, k, l), Jg = g.dynCall_iiiji = (a, b, c, d, e) => (Jg = g.dynCall_iiiji = U.Bf)(a, b, c, d, e), Kg = g.dynCall_iiijiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (Kg = g.dynCall_iiijiiiiiiiiii = U.Cf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), Lg = g.dynCall_vj = (a, b) => (Lg = g.dynCall_vj = U.Df)(a, b), Mg = g.dynCall_jjj = (a, b, c) => (Mg = g.dynCall_jjj = U.Ef)(a, b, c), Ng = g.dynCall_iiijiiiiii = (a, b, c, d, e, f, h, k, l, m) => (Ng = g.dynCall_iiijiiiiii = U.Ff)(a, b, c, d, e, f, h, k, l, m), Og = g.dynCall_vfiii = (a, b, c, d, e) => (Og = g.dynCall_vfiii = U.Gf)(a, b, c, d, e), Pg = g.dynCall_viiiiff = (a, b, c, d, e, f, h) => (Pg = g.dynCall_viiiiff = U.Hf)(a, b, c, d, e, f, h), Qg = g.dynCall_viiiiiff = (a, b, c, d, e, f, h, k) => (Qg = g.dynCall_viiiiiff = U.If)(a, b, c, d, e, f, h, k), Rg = g.dynCall_viiff = (a, b, c, d, e) => (Rg = g.dynCall_viiff = U.Jf)(a, b, c, d, e), Sg = g.dynCall_viiiiiiiiifiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (Sg = g.dynCall_viiiiiiiiifiii = U.Kf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), Tg = g.dynCall_viiiiiiiijj = (a, b, c, d, e, f, h, k, l, m, n) => (Tg = g.dynCall_viiiiiiiijj = U.Lf)(a, b, c, d, e, f, h, k, l, m, n), Ug = g.dynCall_iiiiiiiiiiiiiifii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) => (Ug = g.dynCall_iiiiiiiiiiiiiifii = U.Mf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A), Vg = g.dynCall_viiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Vg = g.dynCall_viiiiiiiiiiii = U.Nf)(a, b, c, d, e, f, h, k, l, m, n, q, r), Wg = g.dynCall_iiiiiiiiiiiiiiiiifii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) => (Wg = g.dynCall_iiiiiiiiiiiiiiiiifii = U.Of)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D), Xg = g.dynCall_vijjiiiiii = (a, b, c, d, e, f, h, k, l, m) => (Xg = g.dynCall_vijjiiiiii = U.Pf)(a, b, c, d, e, f, h, k, l, m), Yg = g.dynCall_iiiijjj = (a, b, c, d, e, f, h) => (Yg = g.dynCall_iiiijjj = U.Qf)(a, b, c, d, e, f, h), Zg = g.dynCall_viiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n) => (Zg = g.dynCall_viiiiiiiiii = U.Rf)(a, b, c, d, e, f, h, k, l, m, n), $g = g.dynCall_iiijjj = (a, b, c, d, e, f) => ($g = g.dynCall_iiijjj = U.Sf)(a, b, c, d, e, f), ah = g.dynCall_fffffff = (a, b, c, d, e, f, h) => (ah = g.dynCall_fffffff = U.Tf)(a, b, c, d, e, f, h), bh = g.dynCall_viiiij = (a, b, c, d, e, f) => (bh = g.dynCall_viiiij = U.Uf)(a, b, c, d, e, f), ch = g.dynCall_viiiiiijiifiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (ch = g.dynCall_viiiiiijiifiii = U.Vf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), dh = g.dynCall_vjjjjjjffjifiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B) => (dh = g.dynCall_vjjjjjjffjifiiiiii = U.Wf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B), eh = g.dynCall_viiiiiiffjifiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) => (eh = g.dynCall_viiiiiiffjifiiiii = U.Xf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A), fh = g.dynCall_viiiiiiffjfiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => (fh = g.dynCall_viiiiiiffjfiiiii = U.Yf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y), gh = g.dynCall_viiiiiiffjiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => (gh = g.dynCall_viiiiiiffjiiiii = U.Zf)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u), hh = g.dynCall_vjjjjjjjjfffiiifiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) => (hh = g.dynCall_vjjjjjjjjfffiiifiiiii = U._f)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F), ih = g.dynCall_vjjjjjjfffifijiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C) => (ih = g.dynCall_vjjjjjjfffifijiiiii = U.$f)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C), jh = g.dynCall_vjjjjjjfffifiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B) => (jh = g.dynCall_vjjjjjjfffifiiiiii = U.ag)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B), kh = g.dynCall_vjjjjjjjjfffjifiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) => (kh = g.dynCall_vjjjjjjjjfffjifiiiiii = U.bg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F), lh = g.dynCall_vijiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (lh = g.dynCall_vijiiiiiiiiii = U.cg)(a, b, c, d, e, f, h, k, l, m, n, q, r), mh = g.dynCall_vijjfffiii = (a, b, c, d, e, f, h, k, l, m) => (mh = g.dynCall_vijjfffiii = U.dg)(a, b, c, d, e, f, h, k, l, m), nh = g.dynCall_viiiiiiijiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (nh = g.dynCall_viiiiiiijiiii = U.eg)(a, b, c, d, e, f, h, k, l, m, n, q, r), oh = g.dynCall_vijjjjjjifiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => (oh = g.dynCall_vijjjjjjifiiiii = U.fg)(\n a,\n b,\n c,\n d,\n e,\n f,\n h,\n k,\n l,\n m,\n n,\n q,\n r,\n p,\n u\n ), ph = g.dynCall_viifi = (a, b, c, d, e) => (ph = g.dynCall_viifi = U.gg)(a, b, c, d, e), qh = g.dynCall_vjjjjjiiii = (a, b, c, d, e, f, h, k, l, m) => (qh = g.dynCall_vjjjjjiiii = U.hg)(a, b, c, d, e, f, h, k, l, m), rh = g.dynCall_vjjjjfiii = (a, b, c, d, e, f, h, k, l) => (rh = g.dynCall_vjjjjfiii = U.ig)(a, b, c, d, e, f, h, k, l), sh = g.dynCall_viiiiiijiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (sh = g.dynCall_viiiiiijiiiiii = U.jg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), th = g.dynCall_vijjii = (a, b, c, d, e, f) => (th = g.dynCall_vijjii = U.kg)(a, b, c, d, e, f), uh = g.dynCall_viiiiijjiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (uh = g.dynCall_viiiiijjiiiii = U.lg)(a, b, c, d, e, f, h, k, l, m, n, q, r), vh = g.dynCall_iiiiiji = (a, b, c, d, e, f, h) => (vh = g.dynCall_iiiiiji = U.mg)(a, b, c, d, e, f, h), wh = g.dynCall_iiiiji = (a, b, c, d, e, f) => (wh = g.dynCall_iiiiji = U.ng)(a, b, c, d, e, f), xh = g.dynCall_viiiiijiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (xh = g.dynCall_viiiiijiiiiii = U.og)(a, b, c, d, e, f, h, k, l, m, n, q, r), yh = g.dynCall_viiijiiiiii = (a, b, c, d, e, f, h, k, l, m, n) => (yh = g.dynCall_viiijiiiiii = U.pg)(a, b, c, d, e, f, h, k, l, m, n), zh = g.dynCall_viijj = (a, b, c, d, e) => (zh = g.dynCall_viijj = U.qg)(a, b, c, d, e), Ah = g.dynCall_viiiijii = (a, b, c, d, e, f, h, k) => (Ah = g.dynCall_viiiijii = U.rg)(a, b, c, d, e, f, h, k), Bh = g.dynCall_viijjiii = (a, b, c, d, e, f, h, k) => (Bh = g.dynCall_viijjiii = U.sg)(a, b, c, d, e, f, h, k), Ch = g.dynCall_ijii = (a, b, c, d) => (Ch = g.dynCall_ijii = U.tg)(a, b, c, d), Dh = g.dynCall_viiiiijjji = (a, b, c, d, e, f, h, k, l, m) => (Dh = g.dynCall_viiiiijjji = U.ug)(a, b, c, d, e, f, h, k, l, m), Eh = g.dynCall_vijjjjiij = (a, b, c, d, e, f, h, k, l) => (Eh = g.dynCall_vijjjjiij = U.vg)(a, b, c, d, e, f, h, k, l), Fh = g.dynCall_viiiiijij = (a, b, c, d, e, f, h, k, l) => (Fh = g.dynCall_viiiiijij = U.wg)(a, b, c, d, e, f, h, k, l), Gh = g.dynCall_viiiiiijij = (a, b, c, d, e, f, h, k, l, m) => (Gh = g.dynCall_viiiiiijij = U.xg)(a, b, c, d, e, f, h, k, l, m), Hh = g.dynCall_vijiii = (a, b, c, d, e, f) => (Hh = g.dynCall_vijiii = U.yg)(a, b, c, d, e, f), Ih = g.dynCall_viiiiiiiiifi = (a, b, c, d, e, f, h, k, l, m, n, q) => (Ih = g.dynCall_viiiiiiiiifi = U.zg)(a, b, c, d, e, f, h, k, l, m, n, q), Jh = g.dynCall_iiijiiii = (a, b, c, d, e, f, h, k) => (Jh = g.dynCall_iiijiiii = U.Ag)(a, b, c, d, e, f, h, k), Kh = g.dynCall_viiiiiijjiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (Kh = g.dynCall_viiiiiijjiiiii = U.Bg)(\n a,\n b,\n c,\n d,\n e,\n f,\n h,\n k,\n l,\n m,\n n,\n q,\n r,\n p\n ), Lh = g.dynCall_viiiiiiijiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => (Lh = g.dynCall_viiiiiiijiiiiii = U.Cg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u), Mh = g.dynCall_vif = (a, b, c) => (Mh = g.dynCall_vif = U.Dg)(a, b, c), Nh = g.dynCall_viif = (a, b, c, d) => (Nh = g.dynCall_viif = U.Eg)(a, b, c, d), Oh = g.dynCall_fiii = (a, b, c, d) => (Oh = g.dynCall_fiii = U.Fg)(a, b, c, d), Ph = g.dynCall_diii = (a, b, c, d) => (Ph = g.dynCall_diii = U.Gg)(a, b, c, d), Qh = g.dynCall_viiiiiifii = (a, b, c, d, e, f, h, k, l, m) => (Qh = g.dynCall_viiiiiifii = U.Hg)(a, b, c, d, e, f, h, k, l, m), Rh = g.dynCall_viiiiijiiiiiiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F, H, K, Va, Wa, Xa) => (Rh = g.dynCall_viiiiijiiiiiiiiiiiiiiiiiii = U.Ig)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F, H, K, Va, Wa, Xa), Sh = g.dynCall_viijji = (a, b, c, d, e, f) => (Sh = g.dynCall_viijji = U.Jg)(a, b, c, d, e, f), Th = g.dynCall_iiiiiiiiiiiji = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Th = g.dynCall_iiiiiiiiiiiji = U.Kg)(a, b, c, d, e, f, h, k, l, m, n, q, r), Uh = g.dynCall_viifiifijjjii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Uh = g.dynCall_viifiifijjjii = U.Lg)(a, b, c, d, e, f, h, k, l, m, n, q, r), Vh = g.dynCall_viiiiiiiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) => (Vh = g.dynCall_viiiiiiiiiiiiiiiiiiii = U.Mg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F), Wh = g.dynCall_viiiiifiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Wh = g.dynCall_viiiiifiiiiii = U.Ng)(a, b, c, d, e, f, h, k, l, m, n, q, r), Xh = g.dynCall_vijiiiiiiijjii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p) => (Xh = g.dynCall_vijiiiiiiijjii = U.Og)(a, b, c, d, e, f, h, k, l, m, n, q, r, p), Yh = g.dynCall_viiiiiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C) => (Yh = g.dynCall_viiiiiiiiiiiiiiiiii = U.Pg)(\n a,\n b,\n c,\n d,\n e,\n f,\n h,\n k,\n l,\n m,\n n,\n q,\n r,\n p,\n u,\n y,\n A,\n B,\n C\n ), Zh = g.dynCall_viiiiiiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) => (Zh = g.dynCall_viiiiiiiiiiiiiiiiiii = U.Qg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D), $h = g.dynCall_viiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) => ($h = g.dynCall_viiiiiiiiiiiiiii = U.Rg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y), ai = g.dynCall_viiiiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) => (ai = g.dynCall_viiiiiiiiiiiiiiii = U.Sg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A), bi = g.dynCall_viiiijjj = (a, b, c, d, e, f, h, k) => (bi = g.dynCall_viiiijjj = U.Tg)(a, b, c, d, e, f, h, k), ci = g.dynCall_iiiiid = (a, b, c, d, e, f) => (ci = g.dynCall_iiiiid = U.Ug)(a, b, c, d, e, f), di = g.dynCall_viiiiiiijjj = (a, b, c, d, e, f, h, k, l, m, n) => (di = g.dynCall_viiiiiiijjj = U.Vg)(a, b, c, d, e, f, h, k, l, m, n), ei = g.dynCall_iiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n) => (ei = g.dynCall_iiiiiiiiiii = U.Wg)(a, b, c, d, e, f, h, k, l, m, n), fi = g.dynCall_iiiiiiiiiiiiiiiiiifi = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) => (fi = g.dynCall_iiiiiiiiiiiiiiiiiifi = U.Xg)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D), gi = g.dynCall_viiif = (a, b, c, d, e) => (gi = g.dynCall_viiif = U.Yg)(a, b, c, d, e), hi = g.dynCall_viiijiiiii = (a, b, c, d, e, f, h, k, l, m) => (hi = g.dynCall_viiijiiiii = U.Zg)(a, b, c, d, e, f, h, k, l, m), ii = g.dynCall_viiij = (a, b, c, d, e) => (ii = g.dynCall_viiij = U._g)(a, b, c, d, e), ji = g.dynCall_iijjj = (a, b, c, d, e) => (ji = g.dynCall_iijjj = U.$g)(a, b, c, d, e), ki = g.dynCall_viiiiji = (a, b, c, d, e, f, h) => (ki = g.dynCall_viiiiji = U.ah)(a, b, c, d, e, f, h), li = g.dynCall_iijjji = (a, b, c, d, e, f) => (li = g.dynCall_iijjji = U.bh)(a, b, c, d, e, f), mi = g.dynCall_ijijji = (a, b, c, d, e, f) => (mi = g.dynCall_ijijji = U.ch)(\n a,\n b,\n c,\n d,\n e,\n f\n ), ni = g.dynCall_viiijjiii = (a, b, c, d, e, f, h, k, l) => (ni = g.dynCall_viiijjiii = U.dh)(a, b, c, d, e, f, h, k, l), oi = g.dynCall_iiiiijji = (a, b, c, d, e, f, h, k) => (oi = g.dynCall_iiiiijji = U.eh)(a, b, c, d, e, f, h, k), pi = g.dynCall_iiiifi = (a, b, c, d, e, f) => (pi = g.dynCall_iiiifi = U.fh)(a, b, c, d, e, f), qi = g.dynCall_iiijii = (a, b, c, d, e, f) => (qi = g.dynCall_iiijii = U.gh)(a, b, c, d, e, f), ri = g.dynCall_iiiiiiiiijii = (a, b, c, d, e, f, h, k, l, m, n, q) => (ri = g.dynCall_iiiiiiiiijii = U.hh)(a, b, c, d, e, f, h, k, l, m, n, q), si = g.dynCall_iiiijjii = (a, b, c, d, e, f, h, k) => (si = g.dynCall_iiiijjii = U.ih)(a, b, c, d, e, f, h, k), ti = g.dynCall_iiiiiijjjii = (a, b, c, d, e, f, h, k, l, m, n) => (ti = g.dynCall_iiiiiijjjii = U.jh)(a, b, c, d, e, f, h, k, l, m, n), ui = g.dynCall_iiijiii = (a, b, c, d, e, f, h) => (ui = g.dynCall_iiijiii = U.kh)(a, b, c, d, e, f, h), vi = g.dynCall_iiiiiiiijjjfi = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (vi = g.dynCall_iiiiiiiijjjfi = U.lh)(a, b, c, d, e, f, h, k, l, m, n, q, r), wi = g.dynCall_iijiiii = (a, b, c, d, e, f, h) => (wi = g.dynCall_iijiiii = U.mh)(a, b, c, d, e, f, h), xi = g.dynCall_iijjjii = (a, b, c, d, e, f, h) => (xi = g.dynCall_iijjjii = U.nh)(a, b, c, d, e, f, h), yi = g.dynCall_jij = (a, b, c) => (yi = g.dynCall_jij = U.oh)(a, b, c), zi = g.dynCall_iiji = (a, b, c, d) => (zi = g.dynCall_iiji = U.ph)(a, b, c, d), Ai = g.dynCall_iiif = (a, b, c, d) => (Ai = g.dynCall_iiif = U.qh)(a, b, c, d), Bi = g.dynCall_vidi = (a, b, c, d) => (Bi = g.dynCall_vidi = U.rh)(a, b, c, d), Ci = g.dynCall_vjiii = (a, b, c, d, e) => (Ci = g.dynCall_vjiii = U.sh)(a, b, c, d, e), Di = g.dynCall_diiii = (a, b, c, d, e) => (Di = g.dynCall_diiii = U.th)(a, b, c, d, e), Ei = g.dynCall_diiiii = (a, b, c, d, e, f) => (Ei = g.dynCall_diiiii = U.uh)(a, b, c, d, e, f), Fi = g.dynCall_viiijjiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q) => (Fi = g.dynCall_viiijjiiiiii = U.vh)(a, b, c, d, e, f, h, k, l, m, n, q), Gi = g.dynCall_viijjijjjjiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Gi = g.dynCall_viijjijjjjiii = U.wh)(a, b, c, d, e, f, h, k, l, m, n, q, r), Hi = g.dynCall_iiiij = (a, b, c, d, e) => (Hi = g.dynCall_iiiij = U.xh)(a, b, c, d, e), Ii = g.dynCall_viiijii = (a, b, c, d, e, f, h) => (Ii = g.dynCall_viiijii = U.yh)(a, b, c, d, e, f, h), Ji = g.dynCall_viijiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r) => (Ji = g.dynCall_viijiiiiiiiii = U.zh)(a, b, c, d, e, f, h, k, l, m, n, q, r), Ki = g.dynCall_fiiii = (a, b, c, d, e) => (Ki = g.dynCall_fiiii = U.Ah)(a, b, c, d, e), Li = g.dynCall_jfi = (a, b, c) => (Li = g.dynCall_jfi = U.Bh)(a, b, c), Mi = g.dynCall_viiiiiiiiiiiiii = (a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) => (Mi = g.dynCall_viiiiiiiiiiiiii = U.Ch)(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u), Ni = g.dynCall_jiij = (a, b, c, d) => (Ni = g.dynCall_jiij = U.Dh)(a, b, c, d), Mb = (a) => (Mb = U.Eh)(a), Bb = () => (Bb = U.Fh)(), Lb = (a) => (Lb = U.Gh)(a), Nb = () => (Nb = U.Hh)();\n g.___start_em_js = 1275044;\n g.___stop_em_js = 1275205;\n function Dc(a, b, c, d) {\n var e = Z();\n try {\n return Ff(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function Bc(a, b, c) {\n var d = Z();\n try {\n return dynCall_iii(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n }\n }\n function Jd(a, b, c) {\n var d = Z();\n try {\n dynCall_vii(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n }\n }\n function yc(a, b) {\n var c = Z();\n try {\n return Gf(a, b);\n } catch (d) {\n Y(c);\n if (d !== d + 0)\n throw d;\n X(1, 0);\n }\n }\n function Fd(a, b) {\n var c = Z();\n try {\n dynCall_vi(a, b);\n } catch (d) {\n Y(c);\n if (d !== d + 0)\n throw d;\n X(1, 0);\n }\n }\n function dd(a, b, c, d) {\n var e = Z();\n try {\n return Jf(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function Dd(a) {\n var b = Z();\n try {\n dynCall_v(a);\n } catch (c) {\n Y(b);\n if (c !== c + 0)\n throw c;\n X(1, 0);\n }\n }\n function Ic(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n return Hf(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function Hc(a, b, c, d, e, f) {\n var h = Z();\n try {\n return If(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function Fc(a, b, c, d, e) {\n var f = Z();\n try {\n return Kf(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function Qd(a, b, c, d) {\n var e = Z();\n try {\n Lf(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function Td(a, b, c, d, e) {\n var f = Z();\n try {\n Nf(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function Vd(a, b, c, d, e, f) {\n var h = Z();\n try {\n Mf(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function Zd(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n Of(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function ke(a, b, c, d, e, f, h, k, l, m, n, q) {\n var r = Z();\n try {\n Qf(a, b, c, d, e, f, h, k, l, m, n, q);\n } catch (p) {\n Y(r);\n if (p !== p + 0)\n throw p;\n X(1, 0);\n }\n }\n function zc(a, b, c) {\n var d = Z();\n try {\n return Sf(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n }\n }\n function Ac(a, b, c) {\n var d = Z();\n try {\n return Tf(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n }\n }\n function md(a, b, c) {\n var d = Z();\n try {\n return Uf(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n }\n }\n function yd(a, b, c) {\n var d = Z();\n try {\n return Vf(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n return 0n;\n }\n }\n function ee(a, b, c, d, e, f, h, k, l) {\n var m = Z();\n try {\n Xf(a, b, c, d, e, f, h, k, l);\n } catch (n) {\n Y(m);\n if (n !== n + 0)\n throw n;\n X(1, 0);\n }\n }\n function xc(a) {\n var b = Z();\n try {\n return Wf(a);\n } catch (c) {\n Y(b);\n if (c !== c + 0)\n throw c;\n X(1, 0);\n }\n }\n function df(a, b, c) {\n var d = Z();\n try {\n fg(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n }\n }\n function We(a, b, c, d, e) {\n var f = Z();\n try {\n Pf(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function Ce(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n Yf(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function cf(a, b, c, d, e, f, h, k, l, m, n, q) {\n var r = Z();\n try {\n gg(a, b, c, d, e, f, h, k, l, m, n, q);\n } catch (p) {\n Y(r);\n if (p !== p + 0)\n throw p;\n X(1, 0);\n }\n }\n function Re(a, b, c, d, e, f, h, k, l, m, n, q) {\n var r = Z();\n try {\n hg(a, b, c, d, e, f, h, k, l, m, n, q);\n } catch (p) {\n Y(r);\n if (p !== p + 0)\n throw p;\n X(1, 0);\n }\n }\n function Jc(a, b, c, d, e, f, h, k) {\n var l = Z();\n try {\n return ig(a, b, c, d, e, f, h, k);\n } catch (m) {\n Y(l);\n if (m !== m + 0)\n throw m;\n X(1, 0);\n }\n }\n function de(a, b, c, d, e, f, h, k) {\n var l = Z();\n try {\n jg(a, b, c, d, e, f, h, k);\n } catch (m) {\n Y(l);\n if (m !== m + 0)\n throw m;\n X(1, 0);\n }\n }\n function Nc(a, b, c, d, e, f, h, k, l, m, n, q) {\n var r = Z();\n try {\n return ag(a, b, c, d, e, f, h, k, l, m, n, q);\n } catch (p) {\n Y(r);\n if (p !== p + 0)\n throw p;\n X(1, 0);\n }\n }\n function fe(a, b, c, d, e, f, h, k, l, m) {\n var n = Z();\n try {\n bg(a, b, c, d, e, f, h, k, l, m);\n } catch (q) {\n Y(n);\n if (q !== q + 0)\n throw q;\n X(1, 0);\n }\n }\n function me(a, b, c, d, e, f, h, k, l, m, n, q, r, p) {\n var u = Z();\n try {\n lg(a, b, c, d, e, f, h, k, l, m, n, q, r, p);\n } catch (y) {\n Y(u);\n if (y !== y + 0)\n throw y;\n X(1, 0);\n }\n }\n function Yc(a, b, c, d, e, f, h, k, l, m, n) {\n var q = Z();\n try {\n return ng(a, b, c, d, e, f, h, k, l, m, n);\n } catch (r) {\n Y(q);\n if (r !== r + 0)\n throw r;\n X(1, 0);\n }\n }\n function Kc(a, b, c, d, e, f, h, k, l) {\n var m = Z();\n try {\n return mg(a, b, c, d, e, f, h, k, l);\n } catch (n) {\n Y(m);\n if (n !== n + 0)\n throw n;\n X(1, 0);\n }\n }\n function nf(a, b, c, d, e, f, h, k, l) {\n var m = Z();\n try {\n og(a, b, c, d, e, f, h, k, l);\n } catch (n) {\n Y(m);\n if (n !== n + 0)\n throw n;\n X(1, 0);\n }\n }\n function Ve(a, b, c, d) {\n var e = Z();\n try {\n $f(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function tc(a, b) {\n var c = Z();\n try {\n return pg(a, b);\n } catch (d) {\n Y(c);\n if (d !== d + 0)\n throw d;\n X(1, 0);\n }\n }\n function xd(a, b) {\n var c = Z();\n try {\n return Zf(a, b);\n } catch (d) {\n Y(c);\n if (d !== d + 0)\n throw d;\n X(1, 0);\n return 0n;\n }\n }\n function nc(a, b) {\n var c = Z();\n try {\n return rg(a, b);\n } catch (d) {\n Y(c);\n if (d !== d + 0)\n throw d;\n X(1, 0);\n }\n }\n function jf(a, b, c, d) {\n var e = Z();\n try {\n tg(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function Oe(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n Ii(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function Ze(a, b, c, d, e) {\n var f = Z();\n try {\n zh(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function Lc(a, b, c, d, e, f, h, k, l, m) {\n var n = Z();\n try {\n return ug(a, b, c, d, e, f, h, k, l, m);\n } catch (q) {\n Y(n);\n if (q !== q + 0)\n throw q;\n X(1, 0);\n }\n }\n function Xe(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n vg(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function Kd(a, b, c, d) {\n var e = Z();\n try {\n wg(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function Tc(a, b, c, d, e, f, h, k, l) {\n var m = Z();\n try {\n return kg(a, b, c, d, e, f, h, k, l);\n } catch (n) {\n Y(m);\n if (n !== n + 0)\n throw n;\n X(1, 0);\n }\n }\n function Id(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n xg(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function Ue(a, b, c, d, e, f, h, k, l) {\n var m = Z();\n try {\n Rf(a, b, c, d, e, f, h, k, l);\n } catch (n) {\n Y(m);\n if (n !== n + 0)\n throw n;\n X(1, 0);\n }\n }\n function Pd(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n yg(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function Wd(a, b, c, d, e, f, h, k, l, m, n) {\n var q = Z();\n try {\n zg(a, b, c, d, e, f, h, k, l, m, n);\n } catch (r) {\n Y(q);\n if (r !== r + 0)\n throw r;\n X(1, 0);\n }\n }\n function zd(a, b, c, d) {\n var e = Z();\n try {\n return Bg(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n return 0n;\n }\n }\n function uf(a, b, c, d, e, f, h, k) {\n var l = Z();\n try {\n Cg(a, b, c, d, e, f, h, k);\n } catch (m) {\n Y(l);\n if (m !== m + 0)\n throw m;\n X(1, 0);\n }\n }\n function Rd(a, b, c, d, e) {\n var f = Z();\n try {\n Dg(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function ef(a, b, c, d) {\n var e = Z();\n try {\n Fg(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function rf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) {\n var A = Z();\n try {\n Gg(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y);\n } catch (B) {\n Y(A);\n if (B !== B + 0)\n throw B;\n X(1, 0);\n }\n }\n function Ne(a, b, c, d, e, f) {\n var h = Z();\n try {\n Hg(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function of(a, b, c, d, e, f, h, k, l) {\n var m = Z();\n try {\n Ig(a, b, c, d, e, f, h, k, l);\n } catch (n) {\n Y(m);\n if (n !== n + 0)\n throw n;\n X(1, 0);\n }\n }\n function ed(a, b, c, d, e) {\n var f = Z();\n try {\n return Jg(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function kd(a, b, c, d, e, f, h, k, l, m, n, q, r, p) {\n var u = Z();\n try {\n return Kg(a, b, c, d, e, f, h, k, l, m, n, q, r, p);\n } catch (y) {\n Y(u);\n if (y !== y + 0)\n throw y;\n X(1, 0);\n }\n }\n function sf(a, b) {\n var c = Z();\n try {\n Lg(a, b);\n } catch (d) {\n Y(c);\n if (d !== d + 0)\n throw d;\n X(1, 0);\n }\n }\n function Cd(a, b, c) {\n var d = Z();\n try {\n return Mg(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n return 0n;\n }\n }\n function jd(a, b, c, d, e, f, h, k, l, m) {\n var n = Z();\n try {\n return Ng(a, b, c, d, e, f, h, k, l, m);\n } catch (q) {\n Y(n);\n if (q !== q + 0)\n throw q;\n X(1, 0);\n }\n }\n function ie(a, b, c, d, e, f, h, k, l, m, n, q, r, p) {\n var u = Z();\n try {\n Sg(a, b, c, d, e, f, h, k, l, m, n, q, r, p);\n } catch (y) {\n Y(u);\n if (y !== y + 0)\n throw y;\n X(1, 0);\n }\n }\n function Ed(a, b, c, d, e) {\n var f = Z();\n try {\n Og(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function Ud(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n Pg(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function Md(a, b, c, d, e) {\n var f = Z();\n try {\n Rg(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function Xd(a, b, c, d, e, f, h, k) {\n var l = Z();\n try {\n Qg(a, b, c, d, e, f, h, k);\n } catch (m) {\n Y(l);\n if (m !== m + 0)\n throw m;\n X(1, 0);\n }\n }\n function ue(a, b, c, d, e, f, h, k, l, m, n) {\n var q = Z();\n try {\n Tg(a, b, c, d, e, f, h, k, l, m, n);\n } catch (r) {\n Y(q);\n if (r !== r + 0)\n throw r;\n X(1, 0);\n }\n }\n function Oc(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) {\n var B = Z();\n try {\n return Ug(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A);\n } catch (C) {\n Y(B);\n if (C !== C + 0)\n throw C;\n X(1, 0);\n }\n }\n function le(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n Vg(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function sd(a, b) {\n var c = Z();\n try {\n return cg(a, b);\n } catch (d) {\n Y(c);\n if (d !== d + 0)\n throw d;\n X(1, 0);\n }\n }\n function wc(a, b, c, d, e) {\n var f = Z();\n try {\n return Ki(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function Pc(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) {\n var F = Z();\n try {\n return Wg(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D);\n } catch (H) {\n Y(F);\n if (H !== H + 0)\n throw H;\n X(1, 0);\n }\n }\n function mf(a, b, c, d, e, f, h, k, l, m) {\n var n = Z();\n try {\n Xg(a, b, c, d, e, f, h, k, l, m);\n } catch (q) {\n Y(n);\n if (q !== q + 0)\n throw q;\n X(1, 0);\n }\n }\n function cd(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n return Yg(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function je(a, b, c, d, e, f, h, k, l, m, n) {\n var q = Z();\n try {\n Zg(a, b, c, d, e, f, h, k, l, m, n);\n } catch (r) {\n Y(q);\n if (r !== r + 0)\n throw r;\n X(1, 0);\n }\n }\n function ld(a, b, c, d, e, f) {\n var h = Z();\n try {\n return $g(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function Ie(a, b, c, d, e, f) {\n var h = Z();\n try {\n bh(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function ye(a, b, c, d, e, f, h, k, l, m, n, q, r, p) {\n var u = Z();\n try {\n ch(a, b, c, d, e, f, h, k, l, m, n, q, r, p);\n } catch (y) {\n Y(u);\n if (y !== y + 0)\n throw y;\n X(1, 0);\n }\n }\n function zf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B) {\n var C = Z();\n try {\n dh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B);\n } catch (D) {\n Y(C);\n if (D !== D + 0)\n throw D;\n X(1, 0);\n }\n }\n function ae(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) {\n var B = Z();\n try {\n eh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A);\n } catch (C) {\n Y(B);\n if (C !== C + 0)\n throw C;\n X(1, 0);\n }\n }\n function $d(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) {\n var A = Z();\n try {\n fh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y);\n } catch (B) {\n Y(A);\n if (B !== B + 0)\n throw B;\n X(1, 0);\n }\n }\n function be(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) {\n var y = Z();\n try {\n gh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u);\n } catch (A) {\n Y(y);\n if (A !== A + 0)\n throw A;\n X(1, 0);\n }\n }\n function Af(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) {\n var H = Z();\n try {\n hh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F);\n } catch (K) {\n Y(H);\n if (K !== K + 0)\n throw K;\n X(1, 0);\n }\n }\n function yf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C) {\n var D = Z();\n try {\n ih(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C);\n } catch (F) {\n Y(D);\n if (F !== F + 0)\n throw F;\n X(1, 0);\n }\n }\n function xf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B) {\n var C = Z();\n try {\n jh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B);\n } catch (D) {\n Y(C);\n if (D !== D + 0)\n throw D;\n X(1, 0);\n }\n }\n function Bf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) {\n var H = Z();\n try {\n kh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F);\n } catch (K) {\n Y(H);\n if (K !== K + 0)\n throw K;\n X(1, 0);\n }\n }\n function gf(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n lh(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function kf(a, b, c, d, e, f, h, k, l, m) {\n var n = Z();\n try {\n mh(a, b, c, d, e, f, h, k, l, m);\n } catch (q) {\n Y(n);\n if (q !== q + 0)\n throw q;\n X(1, 0);\n }\n }\n function ve(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n nh(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function qf(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) {\n var y = Z();\n try {\n oh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u);\n } catch (A) {\n Y(y);\n if (A !== A + 0)\n throw A;\n X(1, 0);\n }\n }\n function wf(a, b, c, d, e, f, h, k, l, m) {\n var n = Z();\n try {\n qh(a, b, c, d, e, f, h, k, l, m);\n } catch (q) {\n Y(n);\n if (q !== q + 0)\n throw q;\n X(1, 0);\n }\n }\n function vf(a, b, c, d, e, f, h, k, l) {\n var m = Z();\n try {\n rh(a, b, c, d, e, f, h, k, l);\n } catch (n) {\n Y(m);\n if (n !== n + 0)\n throw n;\n X(1, 0);\n }\n }\n function sc(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n return ah(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function Nd(a, b, c, d, e) {\n var f = Z();\n try {\n ph(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function wd(a, b, c) {\n var d = Z();\n try {\n return Li(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n return 0n;\n }\n }\n function ze(a, b, c, d, e, f, h, k, l, m, n, q, r, p) {\n var u = Z();\n try {\n sh(a, b, c, d, e, f, h, k, l, m, n, q, r, p);\n } catch (y) {\n Y(u);\n if (y !== y + 0)\n throw y;\n X(1, 0);\n }\n }\n function Ge(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n uh(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function Xc(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n return vh(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function ad(a, b, c, d, e, f) {\n var h = Z();\n try {\n return wh(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function De(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n xh(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function lf(a, b, c, d, e, f) {\n var h = Z();\n try {\n th(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function Qe(a, b, c, d, e, f, h, k, l, m, n) {\n var q = Z();\n try {\n yh(a, b, c, d, e, f, h, k, l, m, n);\n } catch (r) {\n Y(q);\n if (r !== r + 0)\n throw r;\n X(1, 0);\n }\n }\n function Ke(a, b, c, d, e, f, h, k) {\n var l = Z();\n try {\n Ah(a, b, c, d, e, f, h, k);\n } catch (m) {\n Y(l);\n if (m !== m + 0)\n throw m;\n X(1, 0);\n }\n }\n function af(a, b, c, d, e, f, h, k) {\n var l = Z();\n try {\n Bh(a, b, c, d, e, f, h, k);\n } catch (m) {\n Y(l);\n if (m !== m + 0)\n throw m;\n X(1, 0);\n }\n }\n function td(a, b, c, d) {\n var e = Z();\n try {\n return Ch(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function He(a, b, c, d, e, f, h, k, l, m) {\n var n = Z();\n try {\n Dh(a, b, c, d, e, f, h, k, l, m);\n } catch (q) {\n Y(n);\n if (q !== q + 0)\n throw q;\n X(1, 0);\n }\n }\n function pf(a, b, c, d, e, f, h, k, l) {\n var m = Z();\n try {\n Eh(a, b, c, d, e, f, h, k, l);\n } catch (n) {\n Y(m);\n if (n !== n + 0)\n throw n;\n X(1, 0);\n }\n }\n function Fe(a, b, c, d, e, f, h, k, l) {\n var m = Z();\n try {\n Fh(a, b, c, d, e, f, h, k, l);\n } catch (n) {\n Y(m);\n if (n !== n + 0)\n throw n;\n X(1, 0);\n }\n }\n function Ae(a, b, c, d, e, f, h, k, l, m) {\n var n = Z();\n try {\n Gh(a, b, c, d, e, f, h, k, l, m);\n } catch (q) {\n Y(n);\n if (q !== q + 0)\n throw q;\n X(1, 0);\n }\n }\n function ff(a, b, c, d, e, f) {\n var h = Z();\n try {\n Hh(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function he(a, b, c, d, e, f, h, k, l, m, n, q) {\n var r = Z();\n try {\n Ih(a, b, c, d, e, f, h, k, l, m, n, q);\n } catch (p) {\n Y(r);\n if (p !== p + 0)\n throw p;\n X(1, 0);\n }\n }\n function hd(a, b, c, d, e, f, h, k) {\n var l = Z();\n try {\n return Jh(a, b, c, d, e, f, h, k);\n } catch (m) {\n Y(l);\n if (m !== m + 0)\n throw m;\n X(1, 0);\n }\n }\n function ne(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) {\n var y = Z();\n try {\n Mi(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u);\n } catch (A) {\n Y(y);\n if (A !== A + 0)\n throw A;\n X(1, 0);\n }\n }\n function Be(a, b, c, d, e, f, h, k, l, m, n, q, r, p) {\n var u = Z();\n try {\n Kh(a, b, c, d, e, f, h, k, l, m, n, q, r, p);\n } catch (y) {\n Y(u);\n if (y !== y + 0)\n throw y;\n X(1, 0);\n }\n }\n function we(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u) {\n var y = Z();\n try {\n Lh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u);\n } catch (A) {\n Y(y);\n if (A !== A + 0)\n throw A;\n X(1, 0);\n }\n }\n function Hd(a, b, c) {\n var d = Z();\n try {\n Mh(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n }\n }\n function vc(a, b, c, d) {\n var e = Z();\n try {\n return Oh(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function pc(a, b, c, d) {\n var e = Z();\n try {\n return Ph(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function ce(a, b, c, d, e, f, h, k, l, m) {\n var n = Z();\n try {\n Qh(a, b, c, d, e, f, h, k, l, m);\n } catch (q) {\n Y(n);\n if (q !== q + 0)\n throw q;\n X(1, 0);\n }\n }\n function Ee(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F, H, K, Va, Wa, Xa) {\n var Qi = Z();\n try {\n Rh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F, H, K, Va, Wa, Xa);\n } catch (Ya) {\n Y(Qi);\n if (Ya !== Ya + 0)\n throw Ya;\n X(1, 0);\n }\n }\n function $e(a, b, c, d, e, f) {\n var h = Z();\n try {\n Sh(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function Rc(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n return Th(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function Od(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n Uh(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function se(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F) {\n var H = Z();\n try {\n Vh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D, F);\n } catch (K) {\n Y(H);\n if (K !== K + 0)\n throw K;\n X(1, 0);\n }\n }\n function Yd(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n Wh(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function hf(a, b, c, d, e, f, h, k, l, m, n, q, r, p) {\n var u = Z();\n try {\n Xh(a, b, c, d, e, f, h, k, l, m, n, q, r, p);\n } catch (y) {\n Y(u);\n if (y !== y + 0)\n throw y;\n X(1, 0);\n }\n }\n function re(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) {\n var F = Z();\n try {\n Zh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D);\n } catch (H) {\n Y(F);\n if (H !== H + 0)\n throw H;\n X(1, 0);\n }\n }\n function pe(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A) {\n var B = Z();\n try {\n ai(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A);\n } catch (C) {\n Y(B);\n if (C !== C + 0)\n throw C;\n X(1, 0);\n }\n }\n function qe(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C) {\n var D = Z();\n try {\n Yh(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C);\n } catch (F) {\n Y(D);\n if (F !== F + 0)\n throw F;\n X(1, 0);\n }\n }\n function Le(a, b, c, d, e, f, h, k) {\n var l = Z();\n try {\n bi(a, b, c, d, e, f, h, k);\n } catch (m) {\n Y(l);\n if (m !== m + 0)\n throw m;\n X(1, 0);\n }\n }\n function xe(a, b, c, d, e, f, h, k, l, m, n) {\n var q = Z();\n try {\n di(a, b, c, d, e, f, h, k, l, m, n);\n } catch (r) {\n Y(q);\n if (r !== r + 0)\n throw r;\n X(1, 0);\n }\n }\n function Mc(a, b, c, d, e, f, h, k, l, m, n) {\n var q = Z();\n try {\n return ei(a, b, c, d, e, f, h, k, l, m, n);\n } catch (r) {\n Y(q);\n if (r !== r + 0)\n throw r;\n X(1, 0);\n }\n }\n function Qc(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D) {\n var F = Z();\n try {\n return fi(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y, A, B, C, D);\n } catch (H) {\n Y(F);\n if (H !== H + 0)\n throw H;\n X(1, 0);\n }\n }\n function Sd(a, b, c, d, e) {\n var f = Z();\n try {\n gi(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function ge(a, b, c, d, e, f, h, k, l, m, n, q) {\n var r = Z();\n try {\n Ag(a, b, c, d, e, f, h, k, l, m, n, q);\n } catch (p) {\n Y(r);\n if (p !== p + 0)\n throw p;\n X(1, 0);\n }\n }\n function Pe(a, b, c, d, e, f, h, k, l, m) {\n var n = Z();\n try {\n hi(a, b, c, d, e, f, h, k, l, m);\n } catch (q) {\n Y(n);\n if (q !== q + 0)\n throw q;\n X(1, 0);\n }\n }\n function Me(a, b, c, d, e) {\n var f = Z();\n try {\n ii(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function Ye(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n Ji(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function pd(a, b, c, d, e) {\n var f = Z();\n try {\n return ji(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function Ad(a, b, c, d) {\n var e = Z();\n try {\n return Ni(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n return 0n;\n }\n }\n function Je(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n ki(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function qd(a, b, c, d, e, f) {\n var h = Z();\n try {\n return li(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function ud(a, b, c, d, e, f) {\n var h = Z();\n try {\n return mi(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function Se(a, b, c, d, e, f, h, k, l) {\n var m = Z();\n try {\n ni(a, b, c, d, e, f, h, k, l);\n } catch (n) {\n Y(m);\n if (n !== n + 0)\n throw n;\n X(1, 0);\n }\n }\n function Ld(a, b, c, d) {\n var e = Z();\n try {\n Nh(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function Zc(a, b, c, d, e, f, h, k) {\n var l = Z();\n try {\n return oi(a, b, c, d, e, f, h, k);\n } catch (m) {\n Y(l);\n if (m !== m + 0)\n throw m;\n X(1, 0);\n }\n }\n function Ec(a, b, c, d, e, f) {\n var h = Z();\n try {\n return pi(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function fd(a, b, c, d, e, f) {\n var h = Z();\n try {\n return qi(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function Sc(a, b, c, d, e, f, h, k, l, m, n, q) {\n var r = Z();\n try {\n return ri(a, b, c, d, e, f, h, k, l, m, n, q);\n } catch (p) {\n Y(r);\n if (p !== p + 0)\n throw p;\n X(1, 0);\n }\n }\n function bd(a, b, c, d, e, f, h, k) {\n var l = Z();\n try {\n return si(a, b, c, d, e, f, h, k);\n } catch (m) {\n Y(l);\n if (m !== m + 0)\n throw m;\n X(1, 0);\n }\n }\n function Vc(a, b, c, d, e, f, h, k, l, m, n) {\n var q = Z();\n try {\n return ti(a, b, c, d, e, f, h, k, l, m, n);\n } catch (r) {\n Y(q);\n if (r !== r + 0)\n throw r;\n X(1, 0);\n }\n }\n function gd(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n return ui(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function Uc(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n return vi(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function od(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n return wi(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function rd(a, b, c, d, e, f, h) {\n var k = Z();\n try {\n return xi(a, b, c, d, e, f, h);\n } catch (l) {\n Y(k);\n if (l !== l + 0)\n throw l;\n X(1, 0);\n }\n }\n function Bd(a, b, c) {\n var d = Z();\n try {\n return yi(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n return 0n;\n }\n }\n function nd(a, b, c, d) {\n var e = Z();\n try {\n return zi(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function Gd(a, b, c, d) {\n var e = Z();\n try {\n Bi(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function Cc(a, b, c, d) {\n var e = Z();\n try {\n return Ai(a, b, c, d);\n } catch (f) {\n Y(e);\n if (f !== f + 0)\n throw f;\n X(1, 0);\n }\n }\n function tf(a, b, c, d, e) {\n var f = Z();\n try {\n Ci(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function qc(a, b, c, d, e) {\n var f = Z();\n try {\n return Di(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function rc(a, b, c, d, e, f) {\n var h = Z();\n try {\n return Ei(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function Te(a, b, c, d, e, f, h, k, l, m, n, q) {\n var r = Z();\n try {\n Fi(a, b, c, d, e, f, h, k, l, m, n, q);\n } catch (p) {\n Y(r);\n if (p !== p + 0)\n throw p;\n X(1, 0);\n }\n }\n function bf(a, b, c, d, e, f, h, k, l, m, n, q, r) {\n var p = Z();\n try {\n Gi(a, b, c, d, e, f, h, k, l, m, n, q, r);\n } catch (u) {\n Y(p);\n if (u !== u + 0)\n throw u;\n X(1, 0);\n }\n }\n function te(a, b, c, d, e, f, h, k, l, m, n, q) {\n var r = Z();\n try {\n Eg(a, b, c, d, e, f, h, k, l, m, n, q);\n } catch (p) {\n Y(r);\n if (p !== p + 0)\n throw p;\n X(1, 0);\n }\n }\n function $c(a, b, c, d, e) {\n var f = Z();\n try {\n return Hi(a, b, c, d, e);\n } catch (h) {\n Y(f);\n if (h !== h + 0)\n throw h;\n X(1, 0);\n }\n }\n function vd(a) {\n var b = Z();\n try {\n return eg(a);\n } catch (c) {\n Y(b);\n if (c !== c + 0)\n throw c;\n X(1, 0);\n return 0n;\n }\n }\n function Wc(a, b, c, d, e, f) {\n var h = Z();\n try {\n return dg(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function Gc(a, b, c, d, e, f) {\n var h = Z();\n try {\n return ci(a, b, c, d, e, f);\n } catch (k) {\n Y(h);\n if (k !== k + 0)\n throw k;\n X(1, 0);\n }\n }\n function oe(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y) {\n var A = Z();\n try {\n $h(a, b, c, d, e, f, h, k, l, m, n, q, r, p, u, y);\n } catch (B) {\n Y(A);\n if (B !== B + 0)\n throw B;\n X(1, 0);\n }\n }\n function uc(a, b, c) {\n var d = Z();\n try {\n return qg(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n }\n }\n function oc(a, b, c) {\n var d = Z();\n try {\n return sg(a, b, c);\n } catch (e) {\n Y(d);\n if (e !== e + 0)\n throw e;\n X(1, 0);\n }\n }\n function Df() {\n var a = U;\n a = Object.assign({}, a);\n var b = (c) => (d) => c(d) >>> 0;\n a.Fd = b(a.Fd);\n a.he = b(a.he);\n a.ne = b(a.ne);\n a.oe = ((c) => () => c() >>> 0)(a.oe);\n return a;\n }\n g.stackSave = () => Z();\n g.stackRestore = (a) => Y(a);\n g.stackAlloc = (a) => Ef(a);\n g.UTF8ToString = J;\n g.stringToUTF8 = (a, b, c) => M(a, E, b, c);\n g.lengthBytesUTF8 = bb;\n var Oi;\n Fa = function Pi() {\n Oi || Ri();\n Oi || (Fa = Pi);\n };\n function Ri() {\n if (!(0 < Da)) {\n if (g.preRun)\n for ("function" == typeof g.preRun && (g.preRun = [g.preRun]); g.preRun.length; ) {\n var a = g.preRun.shift();\n Aa.unshift(a);\n }\n for (; 0 < Aa.length; )\n Aa.shift()(g);\n if (!(0 < Da || Oi || (Oi = true, g.calledRun = true, x))) {\n for (; 0 < Ba.length; )\n Ba.shift()(g);\n for (aa(g); 0 < Ca.length; )\n Ca.shift()(g);\n }\n }\n }\n Ri();\n return readyPromise;\n };\n })();\n if (typeof exports === "object" && typeof module === "object")\n module.exports = ortWasm;\n else if (typeof define === "function" && define["amd"])\n define([], () => ortWasm);\n }\n });\n\n // nodejs-ignore:worker_threads\n var require_worker_threads = __commonJS({\n "nodejs-ignore:worker_threads"() {\n }\n });\n\n // nodejs-ignore:perf_hooks\n var require_perf_hooks = __commonJS({\n "nodejs-ignore:perf_hooks"() {\n }\n });\n\n // nodejs-ignore:os\n var os_exports = {};\n __export(os_exports, {\n cpus: () => cpus\n });\n var cpus;\n var init_os = __esm({\n "nodejs-ignore:os"() {\n cpus = void 0;\n }\n });\n\n // web/lib/wasm/binding/ort-wasm-simd-threaded.jsep.js\n var require_ort_wasm_simd_threaded_jsep = __commonJS({\n "web/lib/wasm/binding/ort-wasm-simd-threaded.jsep.js"(exports, module) {\n "use strict";\n var ortWasmThreaded = (() => {\n var _scriptDir = typeof document !== "undefined" && document.currentScript ? document.currentScript.src : void 0;\n if (typeof __filename !== "undefined")\n _scriptDir = _scriptDir || __filename;\n return function(moduleArg = {}) {\n function d() {\n l.buffer != p.buffer && t();\n return p;\n }\n function v() {\n l.buffer != p.buffer && t();\n return aa;\n }\n function z() {\n l.buffer != p.buffer && t();\n return ba;\n }\n function A() {\n l.buffer != p.buffer && t();\n return ca;\n }\n function da() {\n l.buffer != p.buffer && t();\n return ea;\n }\n var B = moduleArg, fa, C;\n B.ready = new Promise((a, b) => {\n fa = a;\n C = b;\n });\n "use strict";\n B.jsepInit = (a, b, c, e, f, h, k, q) => {\n B.Qb = a;\n B.wb = b;\n B.yb = c;\n B.jb = e;\n B.xb = f;\n B.Ea = h;\n B.zb = k;\n B.Ab = q;\n b = (n, m, r) => (...w) => {\n const x = D, g = m?.();\n w = n(...w);\n const u = m?.();\n g !== u && (n = u, r(g), m = r = null);\n return D != x ? ha() : w;\n };\n c = (n) => async (...m) => {\n try {\n if (B.bb)\n throw Error("Session already started");\n const r = B.bb = { Fb: m[0], errors: [] }, w = await n(...m);\n if (B.bb !== r)\n throw Error("Session mismatch");\n a.flush();\n const x = r.errors;\n if (0 < x.length) {\n let g = await Promise.all(x);\n g = g.filter((u) => u);\n if (0 < g.length)\n throw Error(g.join("\\n"));\n }\n return w;\n } finally {\n B.bb = null;\n }\n };\n B._OrtRun = c(b(B._OrtRun, () => B._OrtRun, (n) => B._OrtRun = n));\n B._OrtRunWithBinding = c(b(B._OrtRunWithBinding, () => B._OrtRunWithBinding, (n) => B._OrtRunWithBinding = n));\n B._OrtBindInput = b(B._OrtBindInput, () => B._OrtBindInput, (n) => B._OrtBindInput = n);\n B.jsepRegisterBuffer = (n, m, r, w) => a.registerBuffer(n, m, r, w);\n B.jsepUnregisterBuffers = (n) => {\n a.unregisterBuffers(n);\n };\n B.jsepGetBuffer = (n) => a.getBuffer(n);\n B.jsepCreateDownloader = (n, m, r) => a.createDownloader(n, m, r);\n };\n var ia = Object.assign({}, B), ja = "./this.program", E = (a, b) => {\n throw b;\n }, ka = "object" == typeof window, F = "function" == typeof importScripts, G = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, H = B.ENVIRONMENT_IS_PTHREAD || false, I = "";\n function la(a) {\n return B.locateFile ? B.locateFile(a, I) : I + a;\n }\n var ma, J, na;\n if (G) {\n var fs = (init_fs(), __toCommonJS(fs_exports)), oa = (init_path(), __toCommonJS(path_exports));\n I = F ? oa.dirname(I) + "/" : __dirname + "/";\n ma = (b, c) => {\n b = b.startsWith("file://") ? new URL(b) : oa.normalize(b);\n return fs.readFileSync(b, c ? void 0 : "utf8");\n };\n na = (b) => {\n b = ma(b, true);\n b.buffer || (b = new Uint8Array(b));\n return b;\n };\n J = (b, c, e, f = true) => {\n b = b.startsWith("file://") ? new URL(b) : oa.normalize(b);\n fs.readFile(b, f ? void 0 : "utf8", (h, k) => {\n h ? e(h) : c(f ? k.buffer : k);\n });\n };\n !B.thisProgram && 1 < process.argv.length && (ja = process.argv[1].replace(/\\\\/g, "/"));\n process.argv.slice(2);\n E = (b, c) => {\n process.exitCode = b;\n throw c;\n };\n B.inspect = () => "[Emscripten Module object]";\n let a;\n try {\n a = require_worker_threads();\n } catch (b) {\n throw console.error(\'The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?\'), b;\n }\n global.Worker = a.Worker;\n } else if (ka || F)\n F ? I = self.location.href : "undefined" != typeof document && document.currentScript && (I = document.currentScript.src), typeof _scriptDir !== "undefined" && _scriptDir && (I = _scriptDir), 0 !== I.indexOf("blob:") ? I = I.substr(0, I.replace(/[?#].*/, "").lastIndexOf("/") + 1) : I = "", G || (ma = (a) => {\n var b = new XMLHttpRequest();\n b.open("GET", a, false);\n b.send(null);\n return b.responseText;\n }, F && (na = (a) => {\n var b = new XMLHttpRequest();\n b.open("GET", a, false);\n b.responseType = "arraybuffer";\n b.send(null);\n return new Uint8Array(b.response);\n }), J = (a, b, c) => {\n var e = new XMLHttpRequest();\n e.open("GET", a, true);\n e.responseType = "arraybuffer";\n e.onload = () => {\n 200 == e.status || 0 == e.status && e.response ? b(e.response) : c();\n };\n e.onerror = c;\n e.send(null);\n });\n G && "undefined" == typeof performance && (global.performance = require_perf_hooks().performance);\n var pa = console.log.bind(console), qa = console.error.bind(console);\n G && (pa = (...a) => fs.writeSync(1, a.join(" ") + "\\n"), qa = (...a) => fs.writeSync(2, a.join(" ") + "\\n"));\n var ra = B.print || pa, K = B.printErr || qa;\n Object.assign(B, ia);\n ia = null;\n B.thisProgram && (ja = B.thisProgram);\n B.quit && (E = B.quit);\n var L;\n B.wasmBinary && (L = B.wasmBinary);\n var noExitRuntime = B.noExitRuntime || true;\n "object" != typeof WebAssembly && M("no native wasm support detected");\n var l, N, sa, P = false, Q, p, aa, ba, ca, ea;\n function t() {\n var a = l.buffer;\n B.HEAP8 = p = new Int8Array(a);\n B.HEAP16 = new Int16Array(a);\n B.HEAP32 = ba = new Int32Array(a);\n B.HEAPU8 = aa = new Uint8Array(a);\n B.HEAPU16 = new Uint16Array(a);\n B.HEAPU32 = ca = new Uint32Array(a);\n B.HEAPF32 = new Float32Array(a);\n B.HEAPF64 = ea = new Float64Array(a);\n }\n var ta = B.INITIAL_MEMORY || 16777216;\n 5242880 <= ta || M("INITIAL_MEMORY should be larger than STACK_SIZE, was " + ta + "! (STACK_SIZE=5242880)");\n if (H)\n l = B.wasmMemory;\n else if (B.wasmMemory)\n l = B.wasmMemory;\n else if (l = new WebAssembly.Memory({ initial: ta / 65536, maximum: 65536, shared: true }), !(l.buffer instanceof SharedArrayBuffer))\n throw K("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"), G && K("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"), Error("bad memory");\n t();\n ta = l.buffer.byteLength;\n var ua = [], va = [], wa = [], xa = 0;\n function ya() {\n return noExitRuntime || 0 < xa;\n }\n var R = 0, za = null, S = null;\n function Aa() {\n R++;\n B.monitorRunDependencies && B.monitorRunDependencies(R);\n }\n function Ba() {\n R--;\n B.monitorRunDependencies && B.monitorRunDependencies(R);\n if (0 == R && (null !== za && (clearInterval(za), za = null), S)) {\n var a = S;\n S = null;\n a();\n }\n }\n function M(a) {\n if (B.onAbort)\n B.onAbort(a);\n a = "Aborted(" + a + ")";\n K(a);\n P = true;\n Q = 1;\n a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info.");\n C(a);\n throw a;\n }\n function Ca(a) {\n return a.startsWith("data:application/octet-stream;base64,");\n }\n var T;\n T = "ort-wasm-simd-threaded.wasm";\n Ca(T) || (T = la(T));\n function Da(a) {\n if (a == T && L)\n return new Uint8Array(L);\n if (na)\n return na(a);\n throw "both async and sync fetching of the wasm failed";\n }\n function Ea(a) {\n if (!L && (ka || F)) {\n if ("function" == typeof fetch && !a.startsWith("file://"))\n return fetch(a, { credentials: "same-origin" }).then((b) => {\n if (!b.ok)\n throw "failed to load wasm binary file at \'" + a + "\'";\n return b.arrayBuffer();\n }).catch(() => Da(a));\n if (J)\n return new Promise((b, c) => {\n J(a, (e) => b(new Uint8Array(e)), c);\n });\n }\n return Promise.resolve().then(() => Da(a));\n }\n function Fa(a, b, c) {\n return Ea(a).then((e) => WebAssembly.instantiate(e, b)).then((e) => e).then(c, (e) => {\n K("failed to asynchronously prepare wasm: " + e);\n M(e);\n });\n }\n function Ga(a, b) {\n var c = T;\n return L || "function" != typeof WebAssembly.instantiateStreaming || Ca(c) || c.startsWith("file://") || G || "function" != typeof fetch ? Fa(c, a, b) : fetch(c, { credentials: "same-origin" }).then((e) => WebAssembly.instantiateStreaming(e, a).then(b, function(f) {\n K("wasm streaming compile failed: " + f);\n K("falling back to ArrayBuffer instantiation");\n return Fa(c, a, b);\n }));\n }\n var U, Ha = {\n 906828: (a) => {\n B.Ea("Abs", a, void 0);\n },\n 906879: (a) => {\n B.Ea("Neg", a, void 0);\n },\n 906930: (a) => {\n B.Ea("Floor", a, void 0);\n },\n 906983: (a) => {\n B.Ea("Ceil", a, void 0);\n },\n 907035: (a) => {\n B.Ea("Reciprocal", a, void 0);\n },\n 907093: (a) => {\n B.Ea("Sqrt", a, void 0);\n },\n 907145: (a) => {\n B.Ea("Exp", a, void 0);\n },\n 907196: (a) => {\n B.Ea("Erf", a, void 0);\n },\n 907247: (a) => {\n B.Ea("Sigmoid", a, void 0);\n },\n 907302: (a) => {\n B.Ea("Log", a, void 0);\n },\n 907353: (a) => {\n B.Ea("Sin", a, void 0);\n },\n 907404: (a) => {\n B.Ea("Cos", a, void 0);\n },\n 907455: (a) => {\n B.Ea("Tan", a, void 0);\n },\n 907506: (a) => {\n B.Ea("Asin", a, void 0);\n },\n 907558: (a) => {\n B.Ea(\n "Acos",\n a,\n void 0\n );\n },\n 907610: (a) => {\n B.Ea("Atan", a, void 0);\n },\n 907662: (a) => {\n B.Ea("Sinh", a, void 0);\n },\n 907714: (a) => {\n B.Ea("Cosh", a, void 0);\n },\n 907766: (a) => {\n B.Ea("Asinh", a, void 0);\n },\n 907819: (a) => {\n B.Ea("Acosh", a, void 0);\n },\n 907872: (a) => {\n B.Ea("Atanh", a, void 0);\n },\n 907925: (a) => {\n B.Ea("Tanh", a, void 0);\n },\n 907977: (a) => {\n B.Ea("Not", a, void 0);\n },\n 908028: (a, b, c) => {\n B.Ea("ClipV10", a, { min: b, max: c });\n },\n 908100: (a) => {\n B.Ea("Clip", a, void 0);\n },\n 908152: (a, b) => {\n B.Ea("Elu", a, { alpha: b });\n },\n 908210: (a) => {\n B.Ea("Relu", a, void 0);\n },\n 908262: (a, b) => {\n B.Ea("LeakyRelu", a, { alpha: b });\n },\n 908326: (a, b) => {\n B.Ea("ThresholdedRelu", a, { alpha: b });\n },\n 908396: (a, b) => {\n B.Ea("Cast", a, { to: b });\n },\n 908454: (a) => {\n B.Ea("Add", a, void 0);\n },\n 908505: (a) => {\n B.Ea("Sub", a, void 0);\n },\n 908556: (a) => {\n B.Ea("Mul", a, void 0);\n },\n 908607: (a) => {\n B.Ea("Div", a, void 0);\n },\n 908658: (a) => {\n B.Ea("Pow", a, void 0);\n },\n 908709: (a) => {\n B.Ea("Equal", a, void 0);\n },\n 908762: (a) => {\n B.Ea("Greater", a, void 0);\n },\n 908817: (a) => {\n B.Ea("GreaterOrEqual", a, void 0);\n },\n 908879: (a) => {\n B.Ea("Less", a, void 0);\n },\n 908931: (a) => {\n B.Ea("LessOrEqual", a, void 0);\n },\n 908990: (a, b, c, e, f) => {\n B.Ea("ReduceMean", a, {\n keepDims: !!b,\n noopWithEmptyAxes: !!c,\n axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : []\n });\n },\n 909154: (a, b, c, e, f) => {\n B.Ea("ReduceMax", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] });\n },\n 909317: (a, b, c, e, f) => {\n B.Ea("ReduceMin", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] });\n },\n 909480: (a, b, c, e, f) => {\n B.Ea("ReduceProd", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] });\n },\n 909644: (a, b, c, e, f) => {\n B.Ea("ReduceSum", a, {\n keepDims: !!b,\n noopWithEmptyAxes: !!c,\n axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : []\n });\n },\n 909807: (a, b, c, e, f) => {\n B.Ea("ReduceL1", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] });\n },\n 909969: (a, b, c, e, f) => {\n B.Ea("ReduceL2", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] });\n },\n 910131: (a, b, c, e, f) => {\n B.Ea("ReduceLogSum", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] });\n },\n 910297: (a, b, c, e, f) => {\n B.Ea("ReduceSumSquare", a, {\n keepDims: !!b,\n noopWithEmptyAxes: !!c,\n axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : []\n });\n },\n 910466: (a, b, c, e, f) => {\n B.Ea("ReduceLogSumExp", a, { keepDims: !!b, noopWithEmptyAxes: !!c, axes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] });\n },\n 910635: (a) => {\n B.Ea("Where", a, void 0);\n },\n 910688: (a, b, c) => {\n B.Ea("Transpose", a, { perm: b ? Array.from(z().subarray(c >>> 0, c + b >>> 0)) : [] });\n },\n 910801: (a, b, c, e, f, h, k, q, n, m) => {\n B.Ea("Conv", a, { format: n ? "NHWC" : "NCHW", auto_pad: b, dilations: [c], group: e, kernel_shape: [f], pads: [h, k], strides: [q], w_is_const: () => !!d()[m >>> 0] });\n },\n 911029: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u) => {\n B.Ea("Conv", a, { format: g ? "NHWC" : "NCHW", auto_pad: b, dilations: [c, e], group: f, kernel_shape: [h, k], pads: [q, n, m, r], strides: [w, x], w_is_const: () => !!d()[u >>> 0] });\n },\n 911288: (a, b, c, e, f, h, k, q, n, m) => {\n B.Ea("Conv", a, { format: n ? "NHWC" : "NCHW", auto_pad: b, dilations: [c], group: e, kernel_shape: [f], pads: [h, k], strides: [q], w_is_const: () => !!d()[m >>> 0] });\n },\n 911516: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u) => {\n B.Ea("Conv", a, { format: g ? "NHWC" : "NCHW", auto_pad: b, dilations: [c, e], group: f, kernel_shape: [\n h,\n k\n ], pads: [q, n, m, r], strides: [w, x], w_is_const: () => !!d()[u >>> 0] });\n },\n 911775: (a, b, c, e, f, h, k, q, n, m, r, w, x, g) => {\n B.Ea("ConvTranspose", a, { format: n ? "NHWC" : "NCHW", autoPad: b, dilations: [c], group: e, kernel_shape: [f], pads: [h, k], strides: [q], wIsConst: () => !!d()[m >>> 0], outputPadding: r ? Array.from(z().subarray(w >>> 0, w + r >>> 0)) : [], outputShape: x ? Array.from(z().subarray(g >>> 0, g + x >>> 0)) : [] });\n },\n 912155: (a, b, c, e, f, h, k, q, n, m, r, w, x) => {\n B.Ea("ConvTranspose", a, { format: q ? "NHWC" : "NCHW", autoPad: b, dilations: Array.from(z().subarray(c >>> 0, c + 2 >>> 0)), group: e, kernelShape: Array.from(z().subarray(f >>> 0, f + 2 >>> 0)), pads: Array.from(z().subarray(h >>> 0, h + 4 >>> 0)), strides: Array.from(z().subarray(k >>> 0, k + 2 >>> 0)), wIsConst: () => !!d()[n >>> 0], outputPadding: 0 < m ? Array.from(z().subarray(r >>> 0, r + m >>> 0)) : [], outputShape: 0 < w ? Array.from(z().subarray(x >>> 0, x + w >>> 0)) : [] });\n },\n 912678: (a, b, c, e, f, h, k, q, n, m, r, w, x, g) => {\n B.Ea("ConvTranspose", a, { format: n ? "NHWC" : "NCHW", autoPad: b, dilations: [c], group: e, kernel_shape: [f], pads: [h, k], strides: [q], wIsConst: () => !!d()[m >>> 0], outputPadding: r ? Array.from(z().subarray(w >>> 0, w + r >>> 0)) : [], outputShape: x ? Array.from(z().subarray(g >>> 0, g + x >>> 0)) : [] });\n },\n 913058: (a, b, c, e, f, h, k, q, n, m, r, w, x) => {\n B.Ea("ConvTranspose", a, { format: q ? "NHWC" : "NCHW", autoPad: b, dilations: Array.from(z().subarray(c >>> 0, c + 2 >>> 0)), group: e, kernelShape: Array.from(z().subarray(f >>> 0, f + 2 >>> 0)), pads: Array.from(z().subarray(h >>> 0, h + 4 >>> 0)), strides: Array.from(z().subarray(k >>> 0, k + 2 >>> 0)), wIsConst: () => !!d()[n >>> 0], outputPadding: 0 < m ? Array.from(z().subarray(r >>> 0, r + m >>> 0)) : [], outputShape: 0 < w ? Array.from(z().subarray(x >>> 0, x + w >>> 0)) : [] });\n },\n 913581: (a, b) => {\n B.Ea("GlobalAveragePool", a, { format: b ? "NHWC" : "NCHW" });\n },\n 913672: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u, y) => {\n B.Ea("AveragePool", a, { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: e, storage_order: f, dilations: [h, k], kernel_shape: [q, n], pads: [m, r, w, x], strides: [g, u] });\n },\n 913956: (a, b) => {\n B.Ea("GlobalAveragePool", a, { format: b ? "NHWC" : "NCHW" });\n },\n 914047: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u, y) => {\n B.Ea("AveragePool", a, {\n format: y ? "NHWC" : "NCHW",\n auto_pad: b,\n ceil_mode: c,\n count_include_pad: e,\n storage_order: f,\n dilations: [h, k],\n kernel_shape: [q, n],\n pads: [m, r, w, x],\n strides: [g, u]\n });\n },\n 914331: (a, b) => {\n B.Ea("GlobalMaxPool", a, { format: b ? "NHWC" : "NCHW" });\n },\n 914418: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u, y) => {\n B.Ea("MaxPool", a, { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: e, storage_order: f, dilations: [h, k], kernel_shape: [q, n], pads: [m, r, w, x], strides: [g, u] });\n },\n 914698: (a, b) => {\n B.Ea("GlobalMaxPool", a, { format: b ? "NHWC" : "NCHW" });\n },\n 914785: (a, b, c, e, f, h, k, q, n, m, r, w, x, g, u, y) => {\n B.Ea(\n "MaxPool",\n a,\n { format: y ? "NHWC" : "NCHW", auto_pad: b, ceil_mode: c, count_include_pad: e, storage_order: f, dilations: [h, k], kernel_shape: [q, n], pads: [m, r, w, x], strides: [g, u] }\n );\n },\n 915065: (a, b, c, e, f) => {\n B.Ea("Gemm", a, { alpha: b, beta: c, transA: e, transB: f });\n },\n 915169: (a) => {\n B.Ea("MatMul", a, void 0);\n },\n 915223: (a, b, c, e) => {\n B.Ea("ArgMax", a, { keepDims: !!b, selectLastIndex: !!c, axis: e });\n },\n 915331: (a, b, c, e) => {\n B.Ea("ArgMin", a, { keepDims: !!b, selectLastIndex: !!c, axis: e });\n },\n 915439: (a, b) => {\n B.Ea("Softmax", a, { axis: b });\n },\n 915502: (a, b) => {\n B.Ea("Concat", a, { axis: b });\n },\n 915562: (a, b, c, e, f) => {\n B.Ea("Split", a, { axis: b, numOutputs: c, splitSizes: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] });\n },\n 915707: (a) => {\n B.Ea("Expand", a, void 0);\n },\n 915761: (a, b) => {\n B.Ea("Gather", a, { axis: Number(b) });\n },\n 915832: (a, b) => {\n B.Ea("GatherElements", a, { axis: Number(b) });\n },\n 915911: (a, b, c, e, f, h, k, q, n, m, r) => {\n B.Ea("Resize", a, { antialias: b, axes: c ? Array.from(z().subarray(e >>> 0, e + c >>> 0)) : [], coordinateTransformMode: V(f), cubicCoeffA: h, excludeOutside: k, extrapolationValue: q, keepAspectRatioPolicy: V(n), mode: V(m), nearestMode: V(r) });\n },\n 916262: (a, b, c, e, f, h, k) => {\n B.Ea("Slice", a, { starts: b ? Array.from(z().subarray(c >>> 0, c + b >>> 0)) : [], ends: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [], axes: h ? Array.from(z().subarray(k >>> 0, k + h >>> 0)) : [] });\n },\n 916493: (a) => {\n B.Ea("Tile", a, void 0);\n },\n 916545: (a, b, c) => {\n B.Ea("LayerNormalization", a, { axis: Number(b), epsilon: Number(c) });\n },\n 916652: (a, b, c) => {\n B.Ea("InstanceNormalization", a, { epsilon: b, format: c ? "NHWC" : "NCHW" });\n },\n 916766: (a, b, c) => {\n B.Ea("InstanceNormalization", a, { epsilon: b, format: c ? "NHWC" : "NCHW" });\n },\n 916880: (a) => {\n B.Ea(\n "Range",\n a,\n void 0\n );\n },\n 916933: (a, b) => {\n B.Ea("Einsum", a, { equation: V(b) });\n },\n 917014: (a, b, c, e, f) => {\n B.Ea("Pad", a, { mode: b, value: c, pads: e ? Array.from(z().subarray(f >>> 0, f + e >>> 0)) : [] });\n },\n 917146: (a) => {\n B.Ea("Gelu", a, void 0);\n },\n 917198: (a) => {\n B.Ea("BiasAdd", a, void 0);\n },\n 917253: (a) => {\n B.Ea("BiasSplitGelu", a, void 0);\n },\n 917314: (a, b) => {\n B.Ea("SkipLayerNormalization", a, { epsilon: b });\n },\n 917395: (a) => {\n B.zb(a);\n },\n 917429: (a, b) => B.Ab(a, b, B.bb.Fb, B.bb.errors),\n 917541: (a) => B.wb(a),\n 917574: (a) => B.yb(a),\n 917606: (a, b, c) => {\n B.jb(a, b, c, true);\n },\n 917645: (a, b, c) => {\n B.jb(a, b, c);\n }\n };\n function Ia(a) {\n this.name = "ExitStatus";\n this.message = `Program terminated with exit(${a})`;\n this.status = a;\n }\n function Ja(a) {\n a.terminate();\n a.onmessage = () => {\n };\n }\n function Ka(a) {\n (a = W.Qa[a]) || M();\n W.Eb(a);\n }\n function La(a) {\n var b = W.tb();\n if (!b)\n return 6;\n W.Ya.push(b);\n W.Qa[a.Xa] = b;\n b.Xa = a.Xa;\n var c = { cmd: "run", start_routine: a.Gb, arg: a.rb, pthread_ptr: a.Xa };\n G && b.unref();\n b.postMessage(c, a.Mb);\n return 0;\n }\n var Ma = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, Na = (a, b, c) => {\n b >>>= 0;\n var e = b + c;\n for (c = b; a[c] && !(c >= e); )\n ++c;\n if (16 < c - b && a.buffer && Ma)\n return Ma.decode(a.buffer instanceof SharedArrayBuffer ? a.slice(b, c) : a.subarray(b, c));\n for (e = ""; b < c; ) {\n var f = a[b++];\n if (f & 128) {\n var h = a[b++] & 63;\n if (192 == (f & 224))\n e += String.fromCharCode((f & 31) << 6 | h);\n else {\n var k = a[b++] & 63;\n f = 224 == (f & 240) ? (f & 15) << 12 | h << 6 | k : (f & 7) << 18 | h << 12 | k << 6 | a[b++] & 63;\n 65536 > f ? e += String.fromCharCode(f) : (f -= 65536, e += String.fromCharCode(55296 | f >> 10, 56320 | f & 1023));\n }\n } else\n e += String.fromCharCode(f);\n }\n return e;\n }, V = (a, b) => (a >>>= 0) ? Na(v(), a, b) : "";\n function Oa(a) {\n if (H)\n return X(1, 1, a);\n Q = a;\n if (!ya()) {\n W.Hb();\n if (B.onExit)\n B.onExit(a);\n P = true;\n }\n E(a, new Ia(a));\n }\n var Qa = (a) => {\n Q = a;\n if (H)\n throw Pa(a), "unwind";\n Oa(a);\n }, W = {\n ab: [],\n Ya: [],\n mb: [],\n Qa: {},\n gb: function() {\n H ? W.vb() : W.ub();\n },\n ub: function() {\n ua.unshift(() => {\n Aa();\n W.Bb(() => Ba());\n });\n },\n vb: function() {\n W.receiveObjectTransfer = W.Db;\n W.threadInitTLS = W.lb;\n W.setExitStatus = W.kb;\n noExitRuntime = false;\n },\n kb: function(a) {\n Q = a;\n },\n Sb: ["$terminateWorker"],\n Hb: function() {\n for (var a of W.Ya)\n Ja(a);\n for (a of W.ab)\n Ja(a);\n W.ab = [];\n W.Ya = [];\n W.Qa = [];\n },\n Eb: function(a) {\n var b = a.Xa;\n delete W.Qa[b];\n W.ab.push(a);\n W.Ya.splice(W.Ya.indexOf(a), 1);\n a.Xa = 0;\n Ra(b);\n },\n Db: function() {\n },\n lb: function() {\n W.mb.forEach((a) => a());\n },\n Cb: (a) => new Promise((b) => {\n a.onmessage = (h) => {\n h = h.data;\n var k = h.cmd;\n if (h.targetThread && h.targetThread != Sa()) {\n var q = W.Qa[h.Rb];\n q ? q.postMessage(h, h.transferList) : K(\'Internal error! Worker sent a message "\' + k + \'" to target pthread \' + h.targetThread + ", but that thread no longer exists!");\n } else if ("checkMailbox" === k)\n Ta();\n else if ("spawnThread" === k)\n La(h);\n else if ("cleanupThread" === k)\n Ka(h.thread);\n else if ("killThread" === k)\n h = h.thread, k = W.Qa[h], delete W.Qa[h], Ja(k), Ra(h), W.Ya.splice(\n W.Ya.indexOf(k),\n 1\n ), k.Xa = 0;\n else if ("cancelThread" === k)\n W.Qa[h.thread].postMessage({ cmd: "cancel" });\n else if ("loaded" === k)\n a.loaded = true, b(a);\n else if ("alert" === k)\n alert("Thread " + h.threadId + ": " + h.text);\n else if ("setimmediate" === h.target)\n a.postMessage(h);\n else if ("callHandler" === k)\n B[h.handler](...h.args);\n else\n k && K("worker sent an unknown command " + k);\n };\n a.onerror = (h) => {\n K("worker sent an error! " + h.filename + ":" + h.lineno + ": " + h.message);\n throw h;\n };\n G && (a.on("message", function(h) {\n a.onmessage({ data: h });\n }), a.on("error", function(h) {\n a.onerror(h);\n }));\n var c = [], e = ["onExit", "onAbort", "print", "printErr"], f;\n for (f of e)\n B.hasOwnProperty(f) && c.push(f);\n a.postMessage({ cmd: "load", handlers: c, urlOrBlob: B.mainScriptUrlOrBlob || _scriptDir, wasmMemory: l, wasmModule: sa });\n }),\n Bb: function(a) {\n a();\n },\n qb: function() {\n var a = la("ort-wasm-simd-threaded.worker.js");\n a = new Worker(a);\n W.ab.push(a);\n },\n tb: function() {\n 0 == W.ab.length && (W.qb(), W.Cb(W.ab[0]));\n return W.ab.pop();\n }\n };\n B.PThread = W;\n var Ua = (a) => {\n for (; 0 < a.length; )\n a.shift()(B);\n };\n B.establishStackSpace = function() {\n var a = Sa(), b = z()[a + 52 >> 2 >>> 0];\n a = z()[a + 56 >> 2 >>> 0];\n Va(b, b - a);\n Wa(b);\n };\n function Pa(a) {\n if (H)\n return X(2, 0, a);\n Qa(a);\n }\n B.invokeEntryPoint = function(a, b) {\n a = Xa.apply(null, [a, b]);\n ya() ? W.kb(a) : Ya(a);\n };\n function Za(a) {\n this.fb = a - 24;\n this.pb = function(b) {\n A()[this.fb + 4 >> 2 >>> 0] = b;\n };\n this.ob = function(b) {\n A()[this.fb + 8 >> 2 >>> 0] = b;\n };\n this.gb = function(b, c) {\n this.nb();\n this.pb(b);\n this.ob(c);\n };\n this.nb = function() {\n A()[this.fb + 16 >> 2 >>> 0] = 0;\n };\n }\n var $a = 0, ab = 0;\n function bb(a, b, c, e) {\n return H ? X(3, 1, a, b, c, e) : cb(a, b, c, e);\n }\n function cb(a, b, c, e) {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n e >>>= 0;\n if ("undefined" == typeof SharedArrayBuffer)\n return K("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6;\n var f = [];\n if (H && 0 === f.length)\n return bb(a, b, c, e);\n a = { Gb: c, Xa: a, rb: e, Mb: f };\n return H ? (a.Ob = "spawnThread", postMessage(a, f), 0) : La(a);\n }\n function db(a, b, c) {\n return H ? X(4, 1, a, b, c) : 0;\n }\n function eb(a, b) {\n if (H)\n return X(5, 1, a, b);\n }\n var fb = (a) => {\n for (var b = 0, c = 0; c < a.length; ++c) {\n var e = a.charCodeAt(c);\n 127 >= e ? b++ : 2047 >= e ? b += 2 : 55296 <= e && 57343 >= e ? (b += 4, ++c) : b += 3;\n }\n return b;\n }, gb = (a, b, c, e) => {\n c >>>= 0;\n if (!(0 < e))\n return 0;\n var f = c;\n e = c + e - 1;\n for (var h = 0; h < a.length; ++h) {\n var k = a.charCodeAt(h);\n if (55296 <= k && 57343 >= k) {\n var q = a.charCodeAt(++h);\n k = 65536 + ((k & 1023) << 10) | q & 1023;\n }\n if (127 >= k) {\n if (c >= e)\n break;\n b[c++ >>> 0] = k;\n } else {\n if (2047 >= k) {\n if (c + 1 >= e)\n break;\n b[c++ >>> 0] = 192 | k >> 6;\n } else {\n if (65535 >= k) {\n if (c + 2 >= e)\n break;\n b[c++ >>> 0] = 224 | k >> 12;\n } else {\n if (c + 3 >= e)\n break;\n b[c++ >>> 0] = 240 | k >> 18;\n b[c++ >>> 0] = 128 | k >> 12 & 63;\n }\n b[c++ >>> 0] = 128 | k >> 6 & 63;\n }\n b[c++ >>> 0] = 128 | k & 63;\n }\n }\n b[c >>> 0] = 0;\n return c - f;\n }, hb = (a, b, c) => gb(a, v(), b, c);\n function ib(a, b) {\n if (H)\n return X(6, 1, a, b);\n }\n function jb(a, b, c) {\n if (H)\n return X(7, 1, a, b, c);\n }\n function kb(a, b, c) {\n return H ? X(8, 1, a, b, c) : 0;\n }\n function lb(a, b) {\n if (H)\n return X(9, 1, a, b);\n }\n function mb(a, b, c) {\n if (H)\n return X(10, 1, a, b, c);\n }\n function nb(a, b, c, e) {\n if (H)\n return X(11, 1, a, b, c, e);\n }\n function ob(a, b, c, e) {\n if (H)\n return X(12, 1, a, b, c, e);\n }\n function pb(a, b, c, e) {\n if (H)\n return X(13, 1, a, b, c, e);\n }\n function qb(a) {\n if (H)\n return X(14, 1, a);\n }\n function rb(a, b) {\n if (H)\n return X(15, 1, a, b);\n }\n function sb(a, b, c) {\n if (H)\n return X(16, 1, a, b, c);\n }\n var tb = (a) => {\n if (!P)\n try {\n if (a(), !ya())\n try {\n H ? Ya(Q) : Qa(Q);\n } catch (b) {\n b instanceof Ia || "unwind" == b || E(1, b);\n }\n } catch (b) {\n b instanceof Ia || "unwind" == b || E(1, b);\n }\n };\n function ub(a) {\n a >>>= 0;\n "function" === typeof Atomics.Nb && (Atomics.Nb(z(), a >> 2, a).value.then(Ta), a += 128, Atomics.store(z(), a >> 2, 1));\n }\n B.__emscripten_thread_mailbox_await = ub;\n function Ta() {\n var a = Sa();\n a && (ub(a), tb(() => vb()));\n }\n B.checkMailbox = Ta;\n var Y = (a) => 0 === a % 4 && (0 !== a % 100 || 0 === a % 400), wb = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335], xb = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n function yb(a, b, c, e, f, h, k, q) {\n return H ? X(17, 1, a, b, c, e, f, h, k, q) : -52;\n }\n function zb(a, b, c, e, f, h, k) {\n if (H)\n return X(18, 1, a, b, c, e, f, h, k);\n }\n var Bb = (a) => {\n var b = fb(a) + 1, c = Ab(b);\n c && hb(a, c, b);\n return c;\n }, Cb = [], Db = (a, b) => {\n Cb.length = 0;\n var c;\n for (b >>= 2; c = v()[a++ >>> 0]; )\n b += 105 != c & b, Cb.push(105 == c ? z()[b >>> 0] : da()[b++ >>> 1]), ++b;\n return Cb;\n }, Fb = (a) => {\n var b = Eb();\n a = a();\n Wa(b);\n return a;\n };\n function X(a, b) {\n var c = arguments.length - 2, e = arguments;\n return Fb(() => {\n for (var f = Gb(8 * c), h = f >> 3, k = 0; k < c; k++) {\n var q = e[2 + k];\n da()[h + k >>> 0] = q;\n }\n return Hb(a, c, f, b);\n });\n }\n var Ib = [], Jb = {}, Lb = () => {\n if (!Kb) {\n var a = { USER: "web_user", LOGNAME: "web_user", PATH: "/", PWD: "/", HOME: "/home/web_user", LANG: ("object" == typeof navigator && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", _: ja || "./this.program" }, b;\n for (b in Jb)\n void 0 === Jb[b] ? delete a[b] : a[b] = Jb[b];\n var c = [];\n for (b in a)\n c.push(`${b}=${a[b]}`);\n Kb = c;\n }\n return Kb;\n }, Kb;\n function Mb(a, b) {\n if (H)\n return X(19, 1, a, b);\n a >>>= 0;\n b >>>= 0;\n var c = 0;\n Lb().forEach(function(e, f) {\n var h = b + c;\n f = A()[a + 4 * f >> 2 >>> 0] = h;\n for (h = 0; h < e.length; ++h)\n d()[f++ >> 0 >>> 0] = e.charCodeAt(h);\n d()[f >> 0 >>> 0] = 0;\n c += e.length + 1;\n });\n return 0;\n }\n function Nb(a, b) {\n if (H)\n return X(20, 1, a, b);\n a >>>= 0;\n b >>>= 0;\n var c = Lb();\n A()[a >> 2 >>> 0] = c.length;\n var e = 0;\n c.forEach(function(f) {\n e += f.length + 1;\n });\n A()[b >> 2 >>> 0] = e;\n return 0;\n }\n function Ob(a) {\n return H ? X(21, 1, a) : 52;\n }\n function Pb(a, b, c, e) {\n return H ? X(22, 1, a, b, c, e) : 52;\n }\n function Qb(a, b, c, e, f) {\n return H ? X(23, 1, a, b, c, e, f) : 70;\n }\n var Rb = [null, [], []];\n function Tb(a, b, c, e) {\n if (H)\n return X(24, 1, a, b, c, e);\n b >>>= 0;\n c >>>= 0;\n e >>>= 0;\n for (var f = 0, h = 0; h < c; h++) {\n var k = A()[b >> 2 >>> 0], q = A()[b + 4 >> 2 >>> 0];\n b += 8;\n for (var n = 0; n < q; n++) {\n var m = v()[k + n >>> 0], r = Rb[a];\n 0 === m || 10 === m ? ((1 === a ? ra : K)(Na(r, 0)), r.length = 0) : r.push(m);\n }\n f += q;\n }\n A()[e >> 2 >>> 0] = f;\n return 0;\n }\n var Ub = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], Vb = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n function Wb(a) {\n var b = Array(fb(a) + 1);\n gb(a, b, 0, b.length);\n return b;\n }\n var Xb = (a, b) => {\n d().set(a, b >>> 0);\n };\n function Yb(a, b, c, e) {\n function f(g, u, y) {\n for (g = "number" == typeof g ? g.toString() : g || ""; g.length < u; )\n g = y[0] + g;\n return g;\n }\n function h(g, u) {\n return f(g, u, "0");\n }\n function k(g, u) {\n function y(Sb) {\n return 0 > Sb ? -1 : 0 < Sb ? 1 : 0;\n }\n var O;\n 0 === (O = y(g.getFullYear() - u.getFullYear())) && 0 === (O = y(g.getMonth() - u.getMonth())) && (O = y(g.getDate() - u.getDate()));\n return O;\n }\n function q(g) {\n switch (g.getDay()) {\n case 0:\n return new Date(g.getFullYear() - 1, 11, 29);\n case 1:\n return g;\n case 2:\n return new Date(g.getFullYear(), 0, 3);\n case 3:\n return new Date(\n g.getFullYear(),\n 0,\n 2\n );\n case 4:\n return new Date(g.getFullYear(), 0, 1);\n case 5:\n return new Date(g.getFullYear() - 1, 11, 31);\n case 6:\n return new Date(g.getFullYear() - 1, 11, 30);\n }\n }\n function n(g) {\n var u = g.Za;\n for (g = new Date(new Date(g.$a + 1900, 0, 1).getTime()); 0 < u; ) {\n var y = g.getMonth(), O = (Y(g.getFullYear()) ? Ub : Vb)[y];\n if (u > O - g.getDate())\n u -= O - g.getDate() + 1, g.setDate(1), 11 > y ? g.setMonth(y + 1) : (g.setMonth(0), g.setFullYear(g.getFullYear() + 1));\n else {\n g.setDate(g.getDate() + u);\n break;\n }\n }\n y = new Date(g.getFullYear() + 1, 0, 4);\n u = q(new Date(\n g.getFullYear(),\n 0,\n 4\n ));\n y = q(y);\n return 0 >= k(u, g) ? 0 >= k(y, g) ? g.getFullYear() + 1 : g.getFullYear() : g.getFullYear() - 1;\n }\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n e >>>= 0;\n var m = z()[e + 40 >> 2 >>> 0];\n e = { Kb: z()[e >> 2 >>> 0], Jb: z()[e + 4 >> 2 >>> 0], cb: z()[e + 8 >> 2 >>> 0], ib: z()[e + 12 >> 2 >>> 0], eb: z()[e + 16 >> 2 >>> 0], $a: z()[e + 20 >> 2 >>> 0], Wa: z()[e + 24 >> 2 >>> 0], Za: z()[e + 28 >> 2 >>> 0], Tb: z()[e + 32 >> 2 >>> 0], Ib: z()[e + 36 >> 2 >>> 0], Lb: m ? V(m) : "" };\n c = V(c);\n m = {\n "%c": "%a %b %d %H:%M:%S %Y",\n "%D": "%m/%d/%y",\n "%F": "%Y-%m-%d",\n "%h": "%b",\n "%r": "%I:%M:%S %p",\n "%R": "%H:%M",\n "%T": "%H:%M:%S",\n "%x": "%m/%d/%y",\n "%X": "%H:%M:%S",\n "%Ec": "%c",\n "%EC": "%C",\n "%Ex": "%m/%d/%y",\n "%EX": "%H:%M:%S",\n "%Ey": "%y",\n "%EY": "%Y",\n "%Od": "%d",\n "%Oe": "%e",\n "%OH": "%H",\n "%OI": "%I",\n "%Om": "%m",\n "%OM": "%M",\n "%OS": "%S",\n "%Ou": "%u",\n "%OU": "%U",\n "%OV": "%V",\n "%Ow": "%w",\n "%OW": "%W",\n "%Oy": "%y"\n };\n for (var r in m)\n c = c.replace(new RegExp(r, "g"), m[r]);\n var w = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "), x = "January February March April May June July August September October November December".split(" ");\n m = { "%a": (g) => w[g.Wa].substring(0, 3), "%A": (g) => w[g.Wa], "%b": (g) => x[g.eb].substring(0, 3), "%B": (g) => x[g.eb], "%C": (g) => h((g.$a + 1900) / 100 | 0, 2), "%d": (g) => h(g.ib, 2), "%e": (g) => f(g.ib, 2, " "), "%g": (g) => n(g).toString().substring(2), "%G": (g) => n(g), "%H": (g) => h(g.cb, 2), "%I": (g) => {\n g = g.cb;\n 0 == g ? g = 12 : 12 < g && (g -= 12);\n return h(g, 2);\n }, "%j": (g) => {\n for (var u = 0, y = 0; y <= g.eb - 1; u += (Y(g.$a + 1900) ? Ub : Vb)[y++])\n ;\n return h(g.ib + u, 3);\n }, "%m": (g) => h(g.eb + 1, 2), "%M": (g) => h(g.Jb, 2), "%n": () => "\\n", "%p": (g) => 0 <= g.cb && 12 > g.cb ? "AM" : "PM", "%S": (g) => h(g.Kb, 2), "%t": () => " ", "%u": (g) => g.Wa || 7, "%U": (g) => h(Math.floor((g.Za + 7 - g.Wa) / 7), 2), "%V": (g) => {\n var u = Math.floor((g.Za + 7 - (g.Wa + 6) % 7) / 7);\n 2 >= (g.Wa + 371 - g.Za - 2) % 7 && u++;\n if (u)\n 53 == u && (y = (g.Wa + 371 - g.Za) % 7, 4 == y || 3 == y && Y(g.$a) || (u = 1));\n else {\n u = 52;\n var y = (g.Wa + 7 - g.Za - 1) % 7;\n (4 == y || 5 == y && Y(g.$a % 400 - 1)) && u++;\n }\n return h(u, 2);\n }, "%w": (g) => g.Wa, "%W": (g) => h(Math.floor((g.Za + 7 - (g.Wa + 6) % 7) / 7), 2), "%y": (g) => (g.$a + 1900).toString().substring(2), "%Y": (g) => g.$a + 1900, "%z": (g) => {\n g = g.Ib;\n var u = 0 <= g;\n g = Math.abs(g) / 60;\n return (u ? "+" : "-") + String("0000" + (g / 60 * 100 + g % 60)).slice(-4);\n }, "%Z": (g) => g.Lb, "%%": () => "%" };\n c = c.replace(/%%/g, "\\0\\0");\n for (r in m)\n c.includes(r) && (c = c.replace(new RegExp(r, "g"), m[r](e)));\n c = c.replace(/\\0\\0/g, "%");\n r = Wb(c);\n if (r.length > b)\n return 0;\n Xb(r, a);\n return r.length - 1;\n }\n function Zb(a) {\n try {\n a();\n } catch (b) {\n M(b);\n }\n }\n function $b(a) {\n var b = {}, c;\n for (c in a)\n (function(e) {\n var f = a[e];\n b[e] = "function" == typeof f ? function() {\n ac.push(e);\n try {\n return f.apply(null, arguments);\n } finally {\n P || (ac.pop() === e || M(), D && 1 === Z && 0 === ac.length && (Z = 0, xa += 1, Zb(bc), "undefined" != typeof Fibers && Fibers.Ub()));\n }\n } : f;\n })(c);\n return b;\n }\n var Z = 0, D = null, cc = 0, ac = [], dc = {}, ec = {}, fc = 0, gc = null, hc = [];\n function ha() {\n return new Promise((a, b) => {\n gc = { resolve: a, reject: b };\n });\n }\n function ic() {\n var a = Ab(65548), b = a + 12;\n A()[a >> 2 >>> 0] = b;\n A()[a + 4 >> 2 >>> 0] = b + 65536;\n b = ac[0];\n var c = dc[b];\n void 0 === c && (c = fc++, dc[b] = c, ec[c] = b);\n b = c;\n z()[a + 8 >> 2 >>> 0] = b;\n return a;\n }\n function jc() {\n var a = z()[D + 8 >> 2 >>> 0];\n a = N[ec[a]];\n --xa;\n return a();\n }\n function kc(a) {\n if (!P) {\n if (0 === Z) {\n var b = false, c = false;\n a((e = 0) => {\n if (!P && (cc = e, b = true, c)) {\n Z = 2;\n Zb(() => lc(D));\n "undefined" != typeof Browser && Browser.hb.sb && Browser.hb.resume();\n e = false;\n try {\n var f = jc();\n } catch (q) {\n f = q, e = true;\n }\n var h = false;\n if (!D) {\n var k = gc;\n k && (gc = null, (e ? k.reject : k.resolve)(f), h = true);\n }\n if (e && !h)\n throw f;\n }\n });\n c = true;\n b || (Z = 1, D = ic(), "undefined" != typeof Browser && Browser.hb.sb && Browser.hb.pause(), Zb(() => mc(D)));\n } else\n 2 === Z ? (Z = 0, Zb(nc), oc(D), D = null, hc.forEach((e) => tb(e))) : M(`invalid state: ${Z}`);\n return cc;\n }\n }\n function pc(a) {\n return kc((b) => {\n a().then(b);\n });\n }\n W.gb();\n var qc = [null, Oa, Pa, bb, db, eb, ib, jb, kb, lb, mb, nb, ob, pb, qb, rb, sb, yb, zb, Mb, Nb, Ob, Pb, Qb, Tb], tc = {\n r: function(a, b, c) {\n return pc(async () => {\n await B.xb(a, b, c);\n });\n },\n b: function(a, b, c) {\n a >>>= 0;\n new Za(a).gb(b >>> 0, c >>> 0);\n $a = a;\n ab++;\n throw $a;\n },\n O: function(a) {\n rc(a >>> 0, !F, 1, !ka, 131072, false);\n W.lb();\n },\n l: function(a) {\n a >>>= 0;\n H ? postMessage({ cmd: "cleanupThread", thread: a }) : Ka(a);\n },\n I: cb,\n i: db,\n U: eb,\n E: ib,\n G: jb,\n V: kb,\n S: lb,\n K: mb,\n R: nb,\n p: ob,\n F: pb,\n C: qb,\n T: rb,\n D: sb,\n q: () => true,\n A: function(a, b) {\n a >>>= 0;\n a == b >>> 0 ? setTimeout(() => Ta()) : H ? postMessage({\n targetThread: a,\n cmd: "checkMailbox"\n }) : (a = W.Qa[a]) && a.postMessage({ cmd: "checkMailbox" });\n },\n M: function() {\n return -1;\n },\n N: ub,\n X: function(a) {\n G && W.Qa[a >>> 0].ref();\n },\n u: function(a, b, c) {\n a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN;\n c >>>= 0;\n a = new Date(1e3 * a);\n z()[c >> 2 >>> 0] = a.getUTCSeconds();\n z()[c + 4 >> 2 >>> 0] = a.getUTCMinutes();\n z()[c + 8 >> 2 >>> 0] = a.getUTCHours();\n z()[c + 12 >> 2 >>> 0] = a.getUTCDate();\n z()[c + 16 >> 2 >>> 0] = a.getUTCMonth();\n z()[c + 20 >> 2 >>> 0] = a.getUTCFullYear() - 1900;\n z()[c + 24 >> 2 >>> 0] = a.getUTCDay();\n a = (a.getTime() - Date.UTC(\n a.getUTCFullYear(),\n 0,\n 1,\n 0,\n 0,\n 0,\n 0\n )) / 864e5 | 0;\n z()[c + 28 >> 2 >>> 0] = a;\n },\n v: function(a, b, c) {\n a = b + 2097152 >>> 0 < 4194305 - !!a ? (a >>> 0) + 4294967296 * b : NaN;\n c >>>= 0;\n a = new Date(1e3 * a);\n z()[c >> 2 >>> 0] = a.getSeconds();\n z()[c + 4 >> 2 >>> 0] = a.getMinutes();\n z()[c + 8 >> 2 >>> 0] = a.getHours();\n z()[c + 12 >> 2 >>> 0] = a.getDate();\n z()[c + 16 >> 2 >>> 0] = a.getMonth();\n z()[c + 20 >> 2 >>> 0] = a.getFullYear() - 1900;\n z()[c + 24 >> 2 >>> 0] = a.getDay();\n b = (Y(a.getFullYear()) ? wb : xb)[a.getMonth()] + a.getDate() - 1 | 0;\n z()[c + 28 >> 2 >>> 0] = b;\n z()[c + 36 >> 2 >>> 0] = -(60 * a.getTimezoneOffset());\n b = new Date(\n a.getFullYear(),\n 6,\n 1\n ).getTimezoneOffset();\n var e = new Date(a.getFullYear(), 0, 1).getTimezoneOffset();\n a = (b != e && a.getTimezoneOffset() == Math.min(e, b)) | 0;\n z()[c + 32 >> 2 >>> 0] = a;\n },\n w: function(a) {\n a >>>= 0;\n var b = new Date(z()[a + 20 >> 2 >>> 0] + 1900, z()[a + 16 >> 2 >>> 0], z()[a + 12 >> 2 >>> 0], z()[a + 8 >> 2 >>> 0], z()[a + 4 >> 2 >>> 0], z()[a >> 2 >>> 0], 0), c = z()[a + 32 >> 2 >>> 0], e = b.getTimezoneOffset(), f = new Date(b.getFullYear(), 6, 1).getTimezoneOffset(), h = new Date(b.getFullYear(), 0, 1).getTimezoneOffset(), k = Math.min(h, f);\n 0 > c ? z()[a + 32 >> 2 >>> 0] = Number(f != h && k == e) : 0 < c != (k == e) && (f = Math.max(h, f), b.setTime(b.getTime() + 6e4 * ((0 < c ? k : f) - e)));\n z()[a + 24 >> 2 >>> 0] = b.getDay();\n c = (Y(b.getFullYear()) ? wb : xb)[b.getMonth()] + b.getDate() - 1 | 0;\n z()[a + 28 >> 2 >>> 0] = c;\n z()[a >> 2 >>> 0] = b.getSeconds();\n z()[a + 4 >> 2 >>> 0] = b.getMinutes();\n z()[a + 8 >> 2 >>> 0] = b.getHours();\n z()[a + 12 >> 2 >>> 0] = b.getDate();\n z()[a + 16 >> 2 >>> 0] = b.getMonth();\n z()[a + 20 >> 2 >>> 0] = b.getYear();\n a = b.getTime() / 1e3;\n return sc((U = a, 1 <= +Math.abs(U) ? 0 < U ? +Math.floor(U / 4294967296) >>> 0 : ~~+Math.ceil((U - +(~~U >>> 0)) / 4294967296) >>> 0 : 0)), a >>> 0;\n },\n s: yb,\n t: zb,\n z: function(a, b, c) {\n function e(m) {\n return (m = m.toTimeString().match(/\\(([A-Za-z ]+)\\)$/)) ? m[1] : "GMT";\n }\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n var f = (/* @__PURE__ */ new Date()).getFullYear(), h = new Date(f, 0, 1), k = new Date(f, 6, 1);\n f = h.getTimezoneOffset();\n var q = k.getTimezoneOffset(), n = Math.max(f, q);\n A()[a >> 2 >>> 0] = 60 * n;\n z()[b >> 2 >>> 0] = Number(f != q);\n a = e(h);\n b = e(k);\n a = Bb(a);\n b = Bb(b);\n q < f ? (A()[c >> 2 >>> 0] = a, A()[c + 4 >> 2 >>> 0] = b) : (A()[c >> 2 >>> 0] = b, A()[c + 4 >> 2 >>> 0] = a);\n },\n d: () => {\n M("");\n },\n c: function(a, b, c) {\n a >>>= 0;\n b = Db(b >>> 0, c >>> 0);\n return Ha[a].apply(null, b);\n },\n k: function(a, b, c) {\n a >>>= 0;\n b = Db(b >>> 0, c >>> 0);\n return Ha[a].apply(null, b);\n },\n m: function() {\n },\n j: function() {\n return Date.now();\n },\n W: () => {\n xa += 1;\n throw "unwind";\n },\n B: function() {\n return 4294901760;\n },\n f: () => performance.timeOrigin + performance.now(),\n g: function() {\n return G ? (init_os(), __toCommonJS(os_exports)).cpus().length : navigator.hardwareConcurrency;\n },\n L: function(a, b, c, e) {\n W.Pb = b >>> 0;\n Ib.length = c;\n b = e >>> 0 >> 3;\n for (e = 0; e < c; e++)\n Ib[e] = da()[b + e >>> 0];\n return (0 > a ? Ha[-a - 1] : qc[a]).apply(null, Ib);\n },\n y: function(a) {\n a >>>= 0;\n var b = v().length;\n if (a <= b || 4294901760 < a)\n return false;\n for (var c = 1; 4 >= c; c *= 2) {\n var e = b * (1 + 0.2 / c);\n e = Math.min(e, a + 100663296);\n var f = Math;\n e = Math.max(a, e);\n a: {\n f = f.min.call(f, 4294901760, e + (65536 - e % 65536) % 65536) - l.buffer.byteLength + 65535 >>> 16;\n try {\n l.grow(f);\n t();\n var h = 1;\n break a;\n } catch (k) {\n }\n h = void 0;\n }\n if (h)\n return true;\n }\n return false;\n },\n P: Mb,\n Q: Nb,\n H: Qa,\n h: Ob,\n o: Pb,\n x: Qb,\n n: Tb,\n a: l || B.wasmMemory,\n J: Yb,\n e: function(a, b, c, e) {\n return Yb(a >>> 0, b >>> 0, c >>> 0, e >>> 0);\n }\n };\n (function() {\n function a(c, e) {\n c = c.exports;\n c = $b(c);\n N = c = uc(c);\n W.mb.push(N.Da);\n va.unshift(N.Y);\n sa = e;\n Ba();\n return c;\n }\n var b = { a: tc };\n Aa();\n if (B.instantiateWasm)\n try {\n return B.instantiateWasm(b, a);\n } catch (c) {\n K("Module.instantiateWasm callback failed with error: " + c), C(c);\n }\n Ga(b, function(c) {\n a(c.instance, c.module);\n }).catch(C);\n return {};\n })();\n B._OrtInit = (a, b) => (B._OrtInit = N.Z)(a, b);\n B._OrtGetLastError = (a, b) => (B._OrtGetLastError = N._)(a, b);\n B._OrtCreateSessionOptions = (a, b, c, e, f, h, k, q, n, m) => (B._OrtCreateSessionOptions = N.$)(a, b, c, e, f, h, k, q, n, m);\n B._OrtAppendExecutionProvider = (a, b) => (B._OrtAppendExecutionProvider = N.aa)(a, b);\n B._OrtAddFreeDimensionOverride = (a, b, c) => (B._OrtAddFreeDimensionOverride = N.ba)(a, b, c);\n B._OrtAddSessionConfigEntry = (a, b, c) => (B._OrtAddSessionConfigEntry = N.ca)(a, b, c);\n B._OrtReleaseSessionOptions = (a) => (B._OrtReleaseSessionOptions = N.da)(a);\n B._OrtCreateSession = (a, b, c) => (B._OrtCreateSession = N.ea)(a, b, c);\n B._OrtReleaseSession = (a) => (B._OrtReleaseSession = N.fa)(a);\n B._OrtGetInputOutputCount = (a, b, c) => (B._OrtGetInputOutputCount = N.ga)(a, b, c);\n B._OrtGetInputName = (a, b) => (B._OrtGetInputName = N.ha)(a, b);\n B._OrtGetOutputName = (a, b) => (B._OrtGetOutputName = N.ia)(a, b);\n B._OrtFree = (a) => (B._OrtFree = N.ja)(a);\n B._OrtCreateTensor = (a, b, c, e, f, h) => (B._OrtCreateTensor = N.ka)(a, b, c, e, f, h);\n B._OrtGetTensorData = (a, b, c, e, f) => (B._OrtGetTensorData = N.la)(a, b, c, e, f);\n B._OrtReleaseTensor = (a) => (B._OrtReleaseTensor = N.ma)(a);\n B._OrtCreateRunOptions = (a, b, c, e) => (B._OrtCreateRunOptions = N.na)(a, b, c, e);\n B._OrtAddRunConfigEntry = (a, b, c) => (B._OrtAddRunConfigEntry = N.oa)(a, b, c);\n B._OrtReleaseRunOptions = (a) => (B._OrtReleaseRunOptions = N.pa)(a);\n B._OrtCreateBinding = (a) => (B._OrtCreateBinding = N.qa)(a);\n B._OrtBindInput = (a, b, c) => (B._OrtBindInput = N.ra)(a, b, c);\n B._OrtBindOutput = (a, b, c, e) => (B._OrtBindOutput = N.sa)(a, b, c, e);\n B._OrtClearBoundOutputs = (a) => (B._OrtClearBoundOutputs = N.ta)(a);\n B._OrtReleaseBinding = (a) => (B._OrtReleaseBinding = N.ua)(a);\n B._OrtRunWithBinding = (a, b, c, e, f) => (B._OrtRunWithBinding = N.va)(a, b, c, e, f);\n B._OrtRun = (a, b, c, e, f, h, k, q) => (B._OrtRun = N.wa)(a, b, c, e, f, h, k, q);\n B._OrtEndProfiling = (a) => (B._OrtEndProfiling = N.xa)(a);\n B._JsepOutput = (a, b, c) => (B._JsepOutput = N.ya)(a, b, c);\n B._JsepGetNodeName = (a) => (B._JsepGetNodeName = N.za)(a);\n var Sa = B._pthread_self = () => (Sa = B._pthread_self = N.Aa)(), Ab = B._malloc = (a) => (Ab = B._malloc = N.Ba)(a), oc = B._free = (a) => (oc = B._free = N.Ca)(a);\n B.__emscripten_tls_init = () => (B.__emscripten_tls_init = N.Da)();\n var rc = B.__emscripten_thread_init = (a, b, c, e, f, h) => (rc = B.__emscripten_thread_init = N.Fa)(a, b, c, e, f, h);\n B.__emscripten_thread_crashed = () => (B.__emscripten_thread_crashed = N.Ga)();\n var Hb = (a, b, c, e) => (Hb = N.Ha)(a, b, c, e), Ra = (a) => (Ra = N.Ia)(a), Ya = B.__emscripten_thread_exit = (a) => (Ya = B.__emscripten_thread_exit = N.Ja)(a), vb = B.__emscripten_check_mailbox = () => (vb = B.__emscripten_check_mailbox = N.Ka)(), sc = (a) => (sc = N.La)(a), Va = (a, b) => (Va = N.Ma)(a, b), Eb = () => (Eb = N.Na)(), Wa = (a) => (Wa = N.Oa)(a), Gb = (a) => (Gb = N.Pa)(a), Xa = B.dynCall_ii = (a, b) => (Xa = B.dynCall_ii = N.Ra)(a, b), mc = (a) => (mc = N.Sa)(a), bc = () => (bc = N.Ta)(), lc = (a) => (lc = N.Ua)(a), nc = () => (nc = N.Va)();\n B.___start_em_js = 917678;\n B.___stop_em_js = 917839;\n function uc(a) {\n a = Object.assign({}, a);\n var b = (e) => () => e() >>> 0, c = (e) => (f) => e(f) >>> 0;\n a.__errno_location = b(a.__errno_location);\n a.pthread_self = b(a.pthread_self);\n a.malloc = c(a.malloc);\n a.stackSave = b(a.stackSave);\n a.stackAlloc = c(a.stackAlloc);\n return a;\n }\n B.keepRuntimeAlive = ya;\n B.wasmMemory = l;\n B.stackAlloc = Gb;\n B.stackSave = Eb;\n B.stackRestore = Wa;\n B.UTF8ToString = V;\n B.stringToUTF8 = hb;\n B.lengthBytesUTF8 = fb;\n B.ExitStatus = Ia;\n B.PThread = W;\n var vc;\n S = function wc() {\n vc || xc();\n vc || (S = wc);\n };\n function xc() {\n function a() {\n if (!vc && (vc = true, B.calledRun = true, !P)) {\n H || Ua(va);\n fa(B);\n if (B.onRuntimeInitialized)\n B.onRuntimeInitialized();\n if (!H) {\n if (B.postRun)\n for ("function" == typeof B.postRun && (B.postRun = [B.postRun]); B.postRun.length; ) {\n var b = B.postRun.shift();\n wa.unshift(b);\n }\n Ua(wa);\n }\n }\n }\n if (!(0 < R))\n if (H)\n fa(B), H || Ua(va), startWorker(B);\n else {\n if (B.preRun)\n for ("function" == typeof B.preRun && (B.preRun = [B.preRun]); B.preRun.length; )\n ua.unshift(B.preRun.shift());\n Ua(ua);\n 0 < R || (B.setStatus ? (B.setStatus("Running..."), setTimeout(function() {\n setTimeout(\n function() {\n B.setStatus("");\n },\n 1\n );\n a();\n }, 1)) : a());\n }\n }\n if (B.preInit)\n for ("function" == typeof B.preInit && (B.preInit = [B.preInit]); 0 < B.preInit.length; )\n B.preInit.pop()();\n xc();\n return moduleArg.ready;\n };\n })();\n if (typeof exports === "object" && typeof module === "object")\n module.exports = ortWasmThreaded;\n else if (typeof define === "function" && define["amd"])\n define([], () => ortWasmThreaded);\n }\n });\n\n // web/lib/wasm/binding/ort-wasm-threaded.worker.js\n var require_ort_wasm_threaded_worker = __commonJS({\n "web/lib/wasm/binding/ort-wasm-threaded.worker.js"(exports, module) {\n module.exports = \'"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\\\\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}ortWasmThreaded(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,/*isMainBrowserThread=*/0,/*isMainRuntimeThread=*/0,/*canBlock=*/1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;\\n\';\n }\n });\n\n // web/lib/wasm/wasm-common.ts\n var tensorDataTypeStringToEnum, tensorDataTypeEnumToString, getTensorElementSize, tensorTypeToTypedArrayConstructor, logLevelStringToEnum, isGpuBufferSupportedType, dataLocationStringToEnum;\n var init_wasm_common = __esm({\n "web/lib/wasm/wasm-common.ts"() {\n "use strict";\n tensorDataTypeStringToEnum = (type) => {\n switch (type) {\n case "int8":\n return 3 /* int8 */;\n case "uint8":\n return 2 /* uint8 */;\n case "bool":\n return 9 /* bool */;\n case "int16":\n return 5 /* int16 */;\n case "uint16":\n return 4 /* uint16 */;\n case "int32":\n return 6 /* int32 */;\n case "uint32":\n return 12 /* uint32 */;\n case "float16":\n return 10 /* float16 */;\n case "float32":\n return 1 /* float */;\n case "float64":\n return 11 /* double */;\n case "string":\n return 8 /* string */;\n case "int64":\n return 7 /* int64 */;\n case "uint64":\n return 13 /* uint64 */;\n default:\n throw new Error(`unsupported data type: ${type}`);\n }\n };\n tensorDataTypeEnumToString = (typeProto) => {\n switch (typeProto) {\n case 3 /* int8 */:\n return "int8";\n case 2 /* uint8 */:\n return "uint8";\n case 9 /* bool */:\n return "bool";\n case 5 /* int16 */:\n return "int16";\n case 4 /* uint16 */:\n return "uint16";\n case 6 /* int32 */:\n return "int32";\n case 12 /* uint32 */:\n return "uint32";\n case 10 /* float16 */:\n return "float16";\n case 1 /* float */:\n return "float32";\n case 11 /* double */:\n return "float64";\n case 8 /* string */:\n return "string";\n case 7 /* int64 */:\n return "int64";\n case 13 /* uint64 */:\n return "uint64";\n default:\n throw new Error(`unsupported data type: ${typeProto}`);\n }\n };\n getTensorElementSize = (dateType) => [void 0, 4, 1, 1, 2, 2, 4, 8, void 0, 1, 2, 8, 4, 8, void 0, void 0, void 0][dateType];\n tensorTypeToTypedArrayConstructor = (type) => {\n switch (type) {\n case "float16":\n return typeof Float16Array !== "undefined" && Float16Array.from ? Float16Array : Uint16Array;\n case "float32":\n return Float32Array;\n case "uint8":\n return Uint8Array;\n case "int8":\n return Int8Array;\n case "uint16":\n return Uint16Array;\n case "int16":\n return Int16Array;\n case "int32":\n return Int32Array;\n case "bool":\n return Uint8Array;\n case "float64":\n return Float64Array;\n case "uint32":\n return Uint32Array;\n case "int64":\n return BigInt64Array;\n case "uint64":\n return BigUint64Array;\n default:\n throw new Error(`unsupported type: ${type}`);\n }\n };\n logLevelStringToEnum = (logLevel) => {\n switch (logLevel) {\n case "verbose":\n return 0;\n case "info":\n return 1;\n case "warning":\n return 2;\n case "error":\n return 3;\n case "fatal":\n return 4;\n default:\n throw new Error(`unsupported logging level: ${logLevel}`);\n }\n };\n isGpuBufferSupportedType = (type) => type === "float32" || type === "float16" || type === "int32" || type === "int64" || type === "uint32" || type === "uint8" || type === "bool";\n dataLocationStringToEnum = (location) => {\n switch (location) {\n case "none":\n return 0;\n case "cpu":\n return 1;\n case "cpu-pinned":\n return 2;\n case "texture":\n return 3;\n case "gpu-buffer":\n return 4;\n default:\n throw new Error(`unsupported data location: ${location}`);\n }\n };\n }\n });\n\n // common/dist/esm/backend-impl.js\n var init_backend_impl = __esm({\n "common/dist/esm/backend-impl.js"() {\n "use strict";\n }\n });\n\n // common/dist/esm/backend.js\n var init_backend = __esm({\n "common/dist/esm/backend.js"() {\n "use strict";\n init_backend_impl();\n }\n });\n\n // common/dist/esm/version.js\n var version;\n var init_version = __esm({\n "common/dist/esm/version.js"() {\n "use strict";\n version = "1.18.0";\n }\n });\n\n // common/dist/esm/env-impl.js\n var logLevelValue, env;\n var init_env_impl = __esm({\n "common/dist/esm/env-impl.js"() {\n "use strict";\n init_version();\n logLevelValue = "warning";\n env = {\n wasm: {},\n webgl: {},\n webgpu: {},\n versions: { common: version },\n set logLevel(value) {\n if (value === void 0) {\n return;\n }\n if (typeof value !== "string" || ["verbose", "info", "warning", "error", "fatal"].indexOf(value) === -1) {\n throw new Error(`Unsupported logging level: ${value}`);\n }\n logLevelValue = value;\n },\n get logLevel() {\n return logLevelValue;\n }\n };\n Object.defineProperty(env, "logLevel", { enumerable: true });\n }\n });\n\n // common/dist/esm/env.js\n var env2;\n var init_env = __esm({\n "common/dist/esm/env.js"() {\n "use strict";\n init_env_impl();\n env2 = env;\n }\n });\n\n // common/dist/esm/tensor-conversion-impl.js\n var init_tensor_conversion_impl = __esm({\n "common/dist/esm/tensor-conversion-impl.js"() {\n "use strict";\n }\n });\n\n // common/dist/esm/tensor-factory-impl.js\n var init_tensor_factory_impl = __esm({\n "common/dist/esm/tensor-factory-impl.js"() {\n "use strict";\n init_tensor_impl();\n }\n });\n\n // common/dist/esm/tensor-impl-type-mapping.js\n var init_tensor_impl_type_mapping = __esm({\n "common/dist/esm/tensor-impl-type-mapping.js"() {\n "use strict";\n }\n });\n\n // common/dist/esm/tensor-utils-impl.js\n var init_tensor_utils_impl = __esm({\n "common/dist/esm/tensor-utils-impl.js"() {\n "use strict";\n init_tensor_impl();\n }\n });\n\n // common/dist/esm/tensor-impl.js\n var init_tensor_impl = __esm({\n "common/dist/esm/tensor-impl.js"() {\n "use strict";\n init_tensor_conversion_impl();\n init_tensor_factory_impl();\n init_tensor_impl_type_mapping();\n init_tensor_utils_impl();\n }\n });\n\n // common/dist/esm/tensor.js\n var init_tensor = __esm({\n "common/dist/esm/tensor.js"() {\n "use strict";\n init_tensor_impl();\n }\n });\n\n // common/dist/esm/trace.js\n var TRACE, TRACE_FUNC, TRACE_FUNC_BEGIN, TRACE_FUNC_END;\n var init_trace = __esm({\n "common/dist/esm/trace.js"() {\n "use strict";\n init_env_impl();\n TRACE = (deviceType, label) => {\n if (typeof env.trace === "undefined" ? !env.wasm.trace : !env.trace) {\n return;\n }\n console.timeStamp(`${deviceType}::ORT::${label}`);\n };\n TRACE_FUNC = (msg, extraMsg) => {\n const stack = new Error().stack?.split(/\\r\\n|\\r|\\n/g) || [];\n let hasTraceFunc = false;\n for (let i = 0; i < stack.length; i++) {\n if (hasTraceFunc && !stack[i].includes("TRACE_FUNC")) {\n let label = `FUNC_${msg}::${stack[i].trim().split(" ")[1]}`;\n if (extraMsg) {\n label += `::${extraMsg}`;\n }\n TRACE("CPU", label);\n return;\n }\n if (stack[i].includes("TRACE_FUNC")) {\n hasTraceFunc = true;\n }\n }\n };\n TRACE_FUNC_BEGIN = (extraMsg) => {\n if (typeof env.trace === "undefined" ? !env.wasm.trace : !env.trace) {\n return;\n }\n TRACE_FUNC("BEGIN", extraMsg);\n };\n TRACE_FUNC_END = (extraMsg) => {\n if (typeof env.trace === "undefined" ? !env.wasm.trace : !env.trace) {\n return;\n }\n TRACE_FUNC("END", extraMsg);\n };\n }\n });\n\n // common/dist/esm/inference-session-impl.js\n var init_inference_session_impl = __esm({\n "common/dist/esm/inference-session-impl.js"() {\n "use strict";\n init_backend_impl();\n init_tensor();\n init_trace();\n }\n });\n\n // common/dist/esm/inference-session.js\n var init_inference_session = __esm({\n "common/dist/esm/inference-session.js"() {\n "use strict";\n init_inference_session_impl();\n }\n });\n\n // common/dist/esm/tensor-conversion.js\n var init_tensor_conversion = __esm({\n "common/dist/esm/tensor-conversion.js"() {\n "use strict";\n }\n });\n\n // common/dist/esm/tensor-factory.js\n var init_tensor_factory = __esm({\n "common/dist/esm/tensor-factory.js"() {\n "use strict";\n }\n });\n\n // common/dist/esm/onnx-model.js\n var init_onnx_model = __esm({\n "common/dist/esm/onnx-model.js"() {\n "use strict";\n }\n });\n\n // common/dist/esm/onnx-value.js\n var init_onnx_value = __esm({\n "common/dist/esm/onnx-value.js"() {\n "use strict";\n }\n });\n\n // common/dist/esm/training-session-impl.js\n var init_training_session_impl = __esm({\n "common/dist/esm/training-session-impl.js"() {\n "use strict";\n init_backend_impl();\n init_tensor();\n }\n });\n\n // common/dist/esm/training-session.js\n var init_training_session = __esm({\n "common/dist/esm/training-session.js"() {\n "use strict";\n init_training_session_impl();\n }\n });\n\n // common/dist/esm/index.js\n var init_esm = __esm({\n "common/dist/esm/index.js"() {\n "use strict";\n init_backend();\n init_env();\n init_inference_session();\n init_tensor();\n init_tensor_conversion();\n init_tensor_factory();\n init_trace();\n init_onnx_model();\n init_onnx_value();\n init_training_session();\n }\n });\n\n // web/lib/wasm/jsep/log.ts\n var logLevelPrefix, doLog, configLogLevel, debug, configureLogger, LOG, LOG_DEBUG;\n var init_log = __esm({\n "web/lib/wasm/jsep/log.ts"() {\n "use strict";\n init_wasm_common();\n logLevelPrefix = ["V", "I", "W", "E", "F"];\n doLog = (level, message) => {\n console.log(`[${logLevelPrefix[level]},${(/* @__PURE__ */ new Date()).toISOString()}]${message}`);\n };\n configureLogger = ($configLogLevel, $debug) => {\n configLogLevel = $configLogLevel;\n debug = $debug;\n };\n LOG = (logLevel, msg) => {\n const messageLevel = logLevelStringToEnum(logLevel);\n const configLevel = logLevelStringToEnum(configLogLevel);\n if (messageLevel >= configLevel) {\n doLog(messageLevel, typeof msg === "function" ? msg() : msg);\n }\n };\n LOG_DEBUG = (...args) => {\n if (debug) {\n LOG(...args);\n }\n };\n }\n });\n\n // web/lib/wasm/jsep/tensor-view.ts\n var createView;\n var init_tensor_view = __esm({\n "web/lib/wasm/jsep/tensor-view.ts"() {\n "use strict";\n init_wasm_common();\n createView = (dataBuffer, type) => new (tensorTypeToTypedArrayConstructor(type))(dataBuffer);\n }\n });\n\n // web/lib/wasm/jsep/webgpu/types.ts\n var init_types = __esm({\n "web/lib/wasm/jsep/webgpu/types.ts"() {\n "use strict";\n }\n });\n\n // web/lib/wasm/jsep/webgpu/gpu-data-manager.ts\n var bucketFreelist, bucketArr, calcNormalizedBufferSize, calcBucketBufferSize, guid, createNewGpuDataId, downloadGpuData, GpuDataManagerImpl, createGpuDataManager;\n var init_gpu_data_manager = __esm({\n "web/lib/wasm/jsep/webgpu/gpu-data-manager.ts"() {\n "use strict";\n init_log();\n init_types();\n bucketFreelist = /* @__PURE__ */ new Map([\n [64, 250],\n [128, 200],\n [256, 200],\n [512, 200],\n [2048, 230],\n [4096, 200],\n [8192, 50],\n [16384, 50],\n [32768, 50],\n [65536, 50],\n [131072, 50],\n [262144, 50],\n [524288, 50],\n [1048576, 50],\n [2097152, 30],\n [4194304, 20],\n [8388608, 10],\n [12582912, 10],\n [16777216, 10],\n [26214400, 15],\n [33554432, 22],\n [44236800, 2],\n [58982400, 6],\n // we don\'t want to cache the bucket sizes below but not caching them\n // results in some major performance hits for models like sd-turbo.\n [67108864, 6],\n [134217728, 6],\n [167772160, 6]\n ]);\n bucketArr = [];\n calcNormalizedBufferSize = (size) => Math.ceil(size / 16) * 16;\n calcBucketBufferSize = (size) => {\n for (let idx = 0; idx < bucketArr.length; idx++) {\n const sizeForBucket = bucketArr[idx];\n if (size <= sizeForBucket) {\n return sizeForBucket;\n }\n }\n return Math.ceil(size / 16) * 16;\n };\n guid = 1;\n createNewGpuDataId = () => guid++;\n downloadGpuData = async (backend, gpuBuffer, originalSize, getTargetBuffer) => {\n const bufferSize = calcNormalizedBufferSize(originalSize);\n const gpuReadBuffer = backend.device.createBuffer(\n // eslint-disable-next-line no-bitwise\n { size: bufferSize, usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ }\n );\n try {\n const commandEncoder = backend.getCommandEncoder();\n backend.endComputePass();\n commandEncoder.copyBufferToBuffer(\n gpuBuffer,\n 0,\n gpuReadBuffer,\n 0,\n bufferSize\n /* size */\n );\n backend.flush();\n await gpuReadBuffer.mapAsync(GPUMapMode.READ);\n const arrayBuffer = gpuReadBuffer.getMappedRange();\n if (getTargetBuffer) {\n const targetBuffer = getTargetBuffer();\n targetBuffer.set(new Uint8Array(arrayBuffer, 0, originalSize));\n return targetBuffer;\n } else {\n return new Uint8Array(arrayBuffer.slice(0, originalSize));\n }\n } finally {\n gpuReadBuffer.destroy();\n }\n };\n GpuDataManagerImpl = class {\n constructor(backend) {\n this.backend = backend;\n this.storageCache = /* @__PURE__ */ new Map();\n this.freeBuffers = /* @__PURE__ */ new Map();\n this.freeUniformBuffers = /* @__PURE__ */ new Map();\n this.buffersForUploadingPending = [];\n this.buffersPending = [];\n this.externalBuffers = /* @__PURE__ */ new Map();\n this.capturedPendingBuffers = /* @__PURE__ */ new Map();\n for (const [key] of bucketFreelist) {\n bucketArr.push(key);\n this.freeBuffers.set(key, []);\n this.freeUniformBuffers.set(key, []);\n }\n }\n upload(id, data) {\n const srcArrayBuffer = data.buffer;\n const srcOffset = data.byteOffset;\n const srcLength = data.byteLength;\n const size = calcNormalizedBufferSize(srcLength);\n const gpuDataCache = this.storageCache.get(id);\n if (!gpuDataCache) {\n throw new Error("gpu data for uploading does not exist");\n }\n if (gpuDataCache.originalSize !== srcLength) {\n throw new Error(`inconsistent data size. gpu data size=${gpuDataCache.originalSize}, data size=${srcLength}`);\n }\n const gpuBufferForUploading = this.backend.device.createBuffer(\n // eslint-disable-next-line no-bitwise\n { mappedAtCreation: true, size, usage: GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC }\n );\n const arrayBuffer = gpuBufferForUploading.getMappedRange();\n new Uint8Array(arrayBuffer).set(new Uint8Array(srcArrayBuffer, srcOffset, srcLength));\n gpuBufferForUploading.unmap();\n const commandEncoder = this.backend.getCommandEncoder();\n this.backend.endComputePass();\n commandEncoder.copyBufferToBuffer(gpuBufferForUploading, 0, gpuDataCache.gpuData.buffer, 0, size);\n LOG_DEBUG("verbose", () => `[WebGPU] GpuDataManager.upload(id=${id})`);\n this.buffersForUploadingPending.push(gpuBufferForUploading);\n }\n memcpy(sourceId, destinationId) {\n const sourceGpuDataCache = this.storageCache.get(sourceId);\n if (!sourceGpuDataCache) {\n throw new Error("source gpu data for memcpy does not exist");\n }\n const destinationGpuDataCache = this.storageCache.get(destinationId);\n if (!destinationGpuDataCache) {\n throw new Error("destination gpu data for memcpy does not exist");\n }\n if (sourceGpuDataCache.originalSize !== destinationGpuDataCache.originalSize) {\n throw new Error("inconsistent source and destination gpu data size");\n }\n const size = calcNormalizedBufferSize(sourceGpuDataCache.originalSize);\n const commandEncoder = this.backend.getCommandEncoder();\n this.backend.endComputePass();\n commandEncoder.copyBufferToBuffer(\n sourceGpuDataCache.gpuData.buffer,\n 0,\n destinationGpuDataCache.gpuData.buffer,\n 0,\n size\n );\n }\n registerExternalBuffer(buffer, originalSize, previousBuffer) {\n let id;\n if (previousBuffer) {\n id = this.externalBuffers.get(previousBuffer);\n if (id === void 0) {\n throw new Error("previous buffer is not registered");\n }\n if (buffer === previousBuffer) {\n LOG_DEBUG(\n "verbose",\n () => `[WebGPU] GpuDataManager.registerExternalBuffer(size=${originalSize}) => id=${id}, buffer is the same, skip.`\n );\n return id;\n } else if (this.backend.capturedCommandList.has(this.backend.currentSessionId)) {\n throw new Error(`Registering a different external buffer under graph capture mode is not supported yet.\n Please use the previous external buffer!`);\n }\n this.externalBuffers.delete(previousBuffer);\n } else {\n id = createNewGpuDataId();\n }\n this.storageCache.set(id, { gpuData: { id, type: 0 /* default */, buffer }, originalSize });\n this.externalBuffers.set(buffer, id);\n LOG_DEBUG(\n "verbose",\n () => `[WebGPU] GpuDataManager.registerExternalBuffer(size=${originalSize}) => id=${id}, registered.`\n );\n return id;\n }\n unregisterExternalBuffer(buffer) {\n const id = this.externalBuffers.get(buffer);\n if (id !== void 0) {\n this.storageCache.delete(id);\n this.externalBuffers.delete(buffer);\n LOG_DEBUG("verbose", () => `[WebGPU] GpuDataManager.unregisterExternalBuffer() => id=${id}`);\n }\n }\n // eslint-disable-next-line no-bitwise\n create(size, usage = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST) {\n const bufferSize = calcBucketBufferSize(size);\n let gpuBuffer;\n const isStorage = (usage & GPUBufferUsage.STORAGE) === GPUBufferUsage.STORAGE;\n const isUniform = (usage & GPUBufferUsage.UNIFORM) === GPUBufferUsage.UNIFORM;\n if (isStorage || isUniform) {\n const freeBuffers = isStorage ? this.freeBuffers : this.freeUniformBuffers;\n const buffers = freeBuffers.get(bufferSize);\n if (!buffers) {\n gpuBuffer = this.backend.device.createBuffer({ size: bufferSize, usage });\n } else {\n if (buffers.length > 0) {\n gpuBuffer = buffers.pop();\n } else {\n gpuBuffer = this.backend.device.createBuffer({ size: bufferSize, usage });\n }\n }\n } else {\n gpuBuffer = this.backend.device.createBuffer({ size: bufferSize, usage });\n }\n const gpuData = { id: createNewGpuDataId(), type: 0 /* default */, buffer: gpuBuffer };\n this.storageCache.set(gpuData.id, { gpuData, originalSize: size });\n LOG_DEBUG("verbose", () => `[WebGPU] GpuDataManager.create(size=${size}) => id=${gpuData.id}`);\n return gpuData;\n }\n get(id) {\n return this.storageCache.get(id)?.gpuData;\n }\n release(id) {\n const cachedData = this.storageCache.get(id);\n if (!cachedData) {\n throw new Error("releasing data does not exist");\n }\n LOG_DEBUG("verbose", () => `[WebGPU] GpuDataManager.release(id=${id}), gpuDataId=${cachedData.gpuData.id}`);\n this.storageCache.delete(id);\n this.buffersPending.push(cachedData.gpuData.buffer);\n return cachedData.originalSize;\n }\n async download(id, getTargetBuffer) {\n const cachedData = this.storageCache.get(id);\n if (!cachedData) {\n throw new Error("data does not exist");\n }\n await downloadGpuData(this.backend, cachedData.gpuData.buffer, cachedData.originalSize, getTargetBuffer);\n }\n refreshPendingBuffers() {\n for (const buffer of this.buffersForUploadingPending) {\n buffer.destroy();\n }\n this.buffersForUploadingPending = [];\n if (this.buffersPending.length === 0) {\n return;\n }\n if (this.backend.sessionStatus === "default") {\n for (const buffer of this.buffersPending) {\n const maxInFreeList = bucketFreelist.get(buffer.size);\n if ((buffer.usage & GPUBufferUsage.STORAGE) === GPUBufferUsage.STORAGE) {\n const freelist = this.freeBuffers.get(buffer.size) || [];\n if (maxInFreeList === void 0 || freelist.length >= maxInFreeList) {\n buffer.destroy();\n } else {\n freelist.push(buffer);\n }\n } else if ((buffer.usage & GPUBufferUsage.UNIFORM) === GPUBufferUsage.UNIFORM) {\n const freelist = this.freeUniformBuffers.get(buffer.size) || [];\n if (maxInFreeList === void 0 || freelist.length >= maxInFreeList) {\n buffer.destroy();\n } else {\n freelist.push(buffer);\n }\n } else {\n buffer.destroy();\n }\n }\n this.buffersPending = [];\n } else {\n let capturedBuffers = this.capturedPendingBuffers.get(this.backend.currentSessionId);\n if (!capturedBuffers) {\n capturedBuffers = [];\n this.capturedPendingBuffers.set(this.backend.currentSessionId, capturedBuffers);\n }\n for (const buffer of this.buffersPending) {\n capturedBuffers.push(buffer);\n }\n this.buffersPending = [];\n }\n }\n dispose() {\n this.freeBuffers.forEach((buffers) => {\n buffers.forEach((buffer) => {\n buffer.destroy();\n });\n });\n this.freeUniformBuffers.forEach((buffers) => {\n buffers.forEach((buffer) => {\n buffer.destroy();\n });\n });\n this.storageCache.forEach((storage) => {\n storage.gpuData.buffer.destroy();\n });\n this.capturedPendingBuffers.forEach((buffers) => {\n buffers.forEach((buffer) => {\n buffer.destroy();\n });\n });\n this.storageCache = /* @__PURE__ */ new Map();\n this.freeBuffers = /* @__PURE__ */ new Map();\n this.freeUniformBuffers = /* @__PURE__ */ new Map();\n this.capturedPendingBuffers = /* @__PURE__ */ new Map();\n }\n onReleaseSession(sessionId) {\n const pendingBuffers = this.capturedPendingBuffers.get(sessionId);\n if (pendingBuffers) {\n pendingBuffers.forEach((buffer) => {\n buffer.destroy();\n });\n this.capturedPendingBuffers.delete(sessionId);\n }\n }\n };\n createGpuDataManager = (...args) => new GpuDataManagerImpl(...args);\n }\n });\n\n // web/lib/wasm/jsep/webgpu/attribute-with-cache-key.ts\n var AttributeWithCacheKeyImpl, createAttributeWithCacheKey;\n var init_attribute_with_cache_key = __esm({\n "web/lib/wasm/jsep/webgpu/attribute-with-cache-key.ts"() {\n "use strict";\n AttributeWithCacheKeyImpl = class {\n constructor(attribute) {\n Object.assign(this, attribute);\n }\n get cacheKey() {\n if (!this.key) {\n this.key = Object.getOwnPropertyNames(this).sort().map((name) => `${this[name]}`).join(";");\n }\n return this.key;\n }\n };\n createAttributeWithCacheKey = (attribute) => new AttributeWithCacheKeyImpl(attribute);\n }\n });\n\n // web/lib/wasm/jsep/util.ts\n var MatMulUtil, BroadcastUtil, ShapeUtil, PoolConvUtil, GemmUtil, MIN_CLIP, MAX_CLIP;\n var init_util = __esm({\n "web/lib/wasm/jsep/util.ts"() {\n "use strict";\n MatMulUtil = class {\n /**\n * Calculate the expected shape when matrix multiplication\n * @param a The shape of tensor A. Should be a tuple of 2 positive integers\n * @param b The shape of tensor B. Should be a tuple of 2 positive integers\n * @returns The expected shape of the result, or undefined if N/A\n */\n static calcMatMulShape(a, b) {\n return a[1] !== b[0] ? void 0 : [a[0], b[1]];\n }\n };\n BroadcastUtil = class {\n /**\n * Calculate the expected shape when broadcasting 2 tensors\n * @param a The shape of tensor A. Should be an array of positive integers\n * @param b The shape of tensor B. Should be an array of positive integers\n * @param isMatMul Whether the operation is MatMul\n * @returns The expected shape of the result, or undefined if N/A\n */\n static calcShape(adims, bdims, isMatMul = false) {\n const arank = adims.length;\n const brank = bdims.length;\n if (arank === 0) {\n return bdims;\n }\n if (brank === 0) {\n return adims;\n }\n const crank = Math.max(adims.length, bdims.length);\n const cdims = new Array(crank);\n if (isMatMul) {\n if (arank < 2 || brank < 2) {\n return void 0;\n }\n const cShapeMatMul = MatMulUtil.calcMatMulShape([adims[arank - 2], adims[arank - 1]], [bdims[brank - 2], bdims[brank - 1]]);\n if (cShapeMatMul === void 0) {\n return void 0;\n }\n [cdims[crank - 2], cdims[crank - 1]] = cShapeMatMul;\n }\n for (let i = isMatMul ? 3 : 1; i <= crank; i++) {\n const aLen = arank - i < 0 ? 1 : adims[arank - i];\n const bLen = brank - i < 0 ? 1 : bdims[brank - i];\n if (aLen !== bLen && aLen > 1 && bLen > 1) {\n return void 0;\n }\n const max = Math.max(aLen, bLen);\n if (aLen && bLen) {\n cdims[crank - i] = Math.max(aLen, bLen);\n } else {\n if (max > 1) {\n return void 0;\n }\n cdims[crank - i] = 0;\n }\n }\n return cdims;\n }\n /**\n * Determine if a shape is unidirectional broadcastable to another shape\n * @param shape The input shape\n * @param finalShape The desired shape after broadcasting\n */\n static isValidBroadcast(shape, finalShape) {\n const inputRank = shape.length;\n const finalRank = finalShape.length;\n if (inputRank > finalRank) {\n return false;\n }\n for (let i = 1; i <= inputRank; i++) {\n if (shape[inputRank - i] !== 1 && shape[inputRank - i] !== finalShape[finalRank - i]) {\n return false;\n }\n }\n return true;\n }\n };\n ShapeUtil = class _ShapeUtil {\n /**\n * calculate the size (number of elements)\n */\n static size(dims) {\n return _ShapeUtil.getSizeFromDimensionRange(dims, 0, dims.length);\n }\n /**\n * convert dims corresponding to type change to pack. ex. uint8 data to uint32\n */\n static convertShape(dims, size = 4) {\n const rank = dims.length;\n if (rank === 0) {\n return [];\n }\n const newDims = new Array(rank);\n let i = rank - 1;\n while (i >= 0) {\n if (dims[i] % size === 0) {\n newDims[i] = dims[i] / size;\n break;\n }\n if (size % dims[i] !== 0) {\n throw new Error("cannot convert shape");\n }\n newDims[i] = 1;\n size /= dims[i];\n i--;\n }\n for (i--; i >= 0; i--) {\n newDims[i] = dims[i];\n }\n return newDims;\n }\n /**\n * calculate the size (number of elements) from the given axis (inclusive)\n */\n static sizeFromDimension(dims, axis) {\n if (axis < 0 || axis > dims.length) {\n throw new Error(`invalid dimension of ${axis} for sizeFromDimension as Tensor has ${dims.length} dimensions.`);\n }\n return _ShapeUtil.getSizeFromDimensionRange(dims, axis, dims.length);\n }\n /**\n * calculate the size (number of elements) to the given axis (exclusive)\n */\n static sizeToDimension(dims, axis) {\n if (axis < 0 || axis > dims.length) {\n throw new Error(`invalid dimension of ${axis} for sizeToDimension as Tensor has ${dims.length} dimensions.`);\n }\n return _ShapeUtil.getSizeFromDimensionRange(dims, 0, axis);\n }\n /**\n * calculate the size (number of elements) from and to the given axis [start, end)\n */\n static getSizeFromDimensionRange(dims, start, end) {\n let size = 1;\n for (let i = start; i < end; i++) {\n if (dims[i] < 0) {\n throw new Error(\n // eslint-disable-next-line max-len\n "cannot get valid size from specified dimension range. Most likely the range contains negative values in them."\n );\n }\n size *= dims[i];\n }\n return size;\n }\n static computeStrides(dims) {\n const rank = dims.length;\n if (rank === 0) {\n return [];\n } else if (rank === 1) {\n return [1];\n }\n const strides = new Array(rank);\n strides[rank - 1] = 1;\n strides[rank - 2] = dims[rank - 1];\n for (let i = rank - 3; i >= 0; --i) {\n strides[i] = strides[i + 1] * dims[i + 1];\n }\n return strides;\n }\n /**\n * normailze axis of range [-r, r) into [0, r).\n */\n static normalizeAxis(axis, tensorRank) {\n if (axis < -tensorRank && axis >= tensorRank) {\n throw new Error("unsupported axis for this operation.");\n }\n return axis < 0 ? axis + tensorRank : axis;\n }\n static normalizeAxes(axes, tensorRank) {\n return axes.map((x) => this.normalizeAxis(x, tensorRank ?? axes.length));\n }\n /**\n * Sorts a given array based on the indices in the Perm array\n * Used in Transpose\n * @param a Array to be sorted such as dims or strides\n * @param perm Perm given; if null a will be reversed\n */\n static sortBasedOnPerm(a, perm) {\n if (perm) {\n return perm.map((v) => a[v]);\n } else {\n return a.slice().reverse();\n }\n }\n /**\n * Pads a given shape according to the padding values\n * @param dims shape of the Tensor to be padded\n * @param pad pad values\n */\n static padShape(dims, pad2) {\n const rank = dims.length;\n return dims.map((v, i) => v + pad2[i] + pad2[i + rank]);\n }\n /**\n * Determines if the two shapes are identical\n * @param shape1\n * @param shape2\n */\n static areEqual(shape1, shape2) {\n if (shape1.length !== shape2.length) {\n return false;\n }\n return shape1.every((v, i) => v === shape2[i]);\n }\n };\n PoolConvUtil = class _PoolConvUtil {\n /**\n * Adjust the kernel, strides, pads to correct rank. Set to default value if not present\n * @param isGlobalOperator If true, perform global pooling.\n * @param inputDims The input tensor dimension.\n * @param kernelShape The size of the kernel along each axis.\n * @param strides Stride along each axis.\n * @param dilations Dilation along each axis.\n * @param pads Padding for the beginning and ending along each axis.\n */\n static adjustPoolAttributes(isGlobalOperator, inputDims, kernelShape, strides, dilations, pads) {\n if (!isGlobalOperator && kernelShape.length !== inputDims.length - 2) {\n throw new Error("length of specified kernel shapes should be 2 less than length of input dimensions");\n }\n if (isGlobalOperator) {\n for (let dim = 0; dim < inputDims.length - 2; dim++) {\n if (dim >= kernelShape.length) {\n kernelShape.push(inputDims[dim + 2]);\n } else {\n kernelShape[dim] = inputDims[dim + 2];\n }\n }\n }\n for (let dim = 0; dim < kernelShape.length; dim++) {\n if (dim < strides.length) {\n if (strides[dim] < 0) {\n throw new Error("strides should be greater than or equal to 1");\n }\n } else {\n strides.push(1);\n }\n }\n for (let dim = 0; dim < kernelShape.length; dim++) {\n if (dim < dilations.length) {\n if (dilations[dim] < 0) {\n throw new Error("dilations should be greater than or equal to 1");\n }\n } else {\n dilations.push(1);\n }\n }\n for (let dim = 0; dim < kernelShape.length * 2; dim++) {\n if (dim < pads.length) {\n if (pads[dim] < 0) {\n throw new Error("pad should be greater than or equal to 1");\n }\n } else {\n pads.push(0);\n }\n }\n for (let dim = 0; dim < kernelShape.length; dim++) {\n if (kernelShape[dim] <= 0) {\n throw new Error("kernel shapes need to be greater than 0");\n }\n if (pads[dim] >= kernelShape[dim] || pads[dim + kernelShape.length] >= kernelShape[dim]) {\n throw new Error("pads should be smaller than kernel");\n }\n }\n }\n // adjust pad values based on \'autoPad\' attribute\n static adjustPadsBasedOnAutoPad(inputDims, strides, dilations, kernelShape, pads, isChannelLast, autoPad) {\n if (!autoPad) {\n return;\n }\n if (pads.length !== 2 * (inputDims.length - 2)) {\n throw new Error("length of pads should be twice the length of data dimensions");\n }\n if (strides.length !== inputDims.length - 2) {\n throw new Error("length of strides should be the length of data dimensions");\n }\n if (kernelShape.length !== inputDims.length - 2) {\n throw new Error("length of kernel shapes should be the length of data dimensions");\n }\n for (let dim = 0; dim < inputDims.length - 2; dim++) {\n _PoolConvUtil.adjustPadAndReturnShape(\n inputDims[dim + (isChannelLast ? 1 : 2)],\n strides[dim],\n dilations[dim],\n kernelShape[dim],\n pads,\n dim,\n dim + inputDims.length - 2,\n autoPad\n );\n }\n }\n /**\n * Calculate the output shape for Pool ops based on input attributes. (Should be used only for Pool ops)\n * @param isGlobalOperator If true, perform global pooling.\n * @param inputDims The input tensor dimension. (inputs[0].dims)\n * @param strides Stride along each axis.\n * @param dilations Dilation along each axis.\n * @param kernelShape The size of the kernel along each axis.\n * @param pads Padding for the beginning and ending along each axis.\n * @param autoPad DEPRECATED attribute supported for legacy models. Specifies how to implicitly calculate pads in each\n * dimension. Can take values NOTSET, SAME_UPPER, SAME_LOWER, or VALID.\n */\n static computePoolOutputShape(isGlobalOperator, inputDims, strides, dilations, kernelShape, pads, autoPad) {\n if (inputDims.length <= 0) {\n throw new Error("input shape must be of size greater than 0");\n }\n const outputDims = [inputDims[0], inputDims[1]];\n _PoolConvUtil.computeShapeHelper(\n isGlobalOperator,\n inputDims,\n outputDims,\n strides,\n dilations,\n kernelShape,\n pads,\n autoPad\n );\n return outputDims;\n }\n /**\n * Calculate the output shape for Conv op based on input attributes. (Should be used only for Conv op)\n * @param inputDims The input tensor dimension. (inputs[0].dims)\n * @param filterDims The filter tensor dimension. (inputs[1].dims)\n * @param strides Stride along each axis.\n * @param kernelShape The size of the kernel along each axis.\n * @param pads Padding for the beginning and ending along each axis.\n * @param autoPad DEPRECATED attribute supported for legacy models. Specifies how to implicitly calculate pads in each\n * dimension. Can take values NOTSET, SAME_UPPER, SAME_LOWER, or VALID.\n */\n static computeConvOutputShape(inputDims, filterDims, strides, dilations, kernelShape, pads, autoPad) {\n if (inputDims.length <= 0 || filterDims.length <= 0) {\n throw new Error("invalid input tensor dims or invalid filter tensor dims");\n }\n const outputDims = [inputDims[0], filterDims[0]];\n _PoolConvUtil.computeShapeHelper(false, inputDims, outputDims, strides, dilations, kernelShape, pads, autoPad);\n return outputDims;\n }\n // will compute output shapes for data dimensions ONLY (i.e.) no batch size and channels\n // called by computePoolOutputShape() and computeConvOutputShape()\n // adjust pads based on \'autoPad\' attribute prior to shape computation\n static computeShapeHelper(isGlobalOperator, inputDims, outputDims, strides, dilations, kernelShape, pads, autoPad) {\n if (isGlobalOperator) {\n for (let dim = 0; dim < inputDims.length - 2; dim++) {\n outputDims.push(1);\n }\n } else {\n for (let dim = 0; dim < inputDims.length - 2; dim++) {\n outputDims.push(_PoolConvUtil.adjustPadAndReturnShape(\n inputDims[dim + 2],\n strides[dim],\n dilations[dim],\n kernelShape[dim],\n pads,\n dim,\n dim + inputDims.length - 2,\n autoPad\n ));\n }\n }\n }\n // helper for computeShapeHelper() and adjustPadsBasedOnAutoPad()\n // adjusts pad value for given \'autoPad\' string and computes output shape along a particular dimension\n static adjustPadAndReturnShape(inSize, stride, dilation, kernel, pads, padHeadIndex, padTailIndex, autoPad) {\n const dkernel = dilation * (kernel - 1) + 1;\n if (autoPad && autoPad !== "NOTSET") {\n switch (autoPad) {\n case "VALID":\n pads[padHeadIndex] = 0;\n pads[padTailIndex] = 0;\n return Math.floor((inSize - dkernel) / stride + 1);\n case "SAME_LOWER":\n case "SAME_UPPER":\n if (dilation !== 1) {\n throw new Error("Dilation not supported for SAME_UPPER or SAME_LOWER");\n } else {\n const legacyTargetSize = (inSize + stride - 1) / stride;\n const padNeeded = (legacyTargetSize - 1) * stride + kernel - inSize;\n pads[padHeadIndex] = autoPad === "SAME_LOWER" ? Math.floor((padNeeded + 1) / 2) : Math.floor(padNeeded / 2);\n pads[padTailIndex] = padNeeded - pads[padHeadIndex];\n return Math.floor((inSize + padNeeded - kernel) / stride + 1);\n }\n default:\n throw new Error("Unsupported AutoPad type");\n }\n } else {\n return Math.floor((inSize + pads[padHeadIndex] + pads[padTailIndex] - dkernel) / stride + 1);\n }\n }\n };\n GemmUtil = class {\n // will make sure input shapes are compatible for this op\n // and return back the shape of the output in the form of a tuple\n // will throw exception if the input shapes are not compatible\n static getShapeOfGemmResult(leftShape, transLeft, rightShape, transRight, biasShape) {\n if (leftShape.length !== 2 || rightShape.length !== 2) {\n throw new Error("shape need to be of size 2");\n }\n let M;\n let K;\n let N;\n if (transLeft) {\n M = leftShape[1];\n K = leftShape[0];\n } else {\n M = leftShape[0];\n K = leftShape[1];\n }\n let kDim = -1;\n if (transRight) {\n N = rightShape[0];\n kDim = 1;\n } else {\n N = rightShape[1];\n kDim = 0;\n }\n if (rightShape[kDim] !== K) {\n throw new Error("dimension mismatch");\n }\n if (M <= 0 || N <= 0 || K <= 0) {\n throw new Error("invalid shape specified");\n }\n if (biasShape && !BroadcastUtil.isValidBroadcast(biasShape, [M, N])) {\n throw new Error("gemm: invalid bias shape for broadcast");\n }\n return [M, N, K];\n }\n };\n MIN_CLIP = -34028234663852886e22;\n MAX_CLIP = 34028234663852886e22;\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/common.ts\n var WORKGROUP_SIZE, getWgslMappedType, tensorTypeToWsglStorageType, tensorTypeToWsglValueType, createTensorShapeVariables, getMaxComponents, fillVector, castToF32, sumVector, getElementAt, createIndicesHelper, inputVariable, outputVariable, internalVariable, ShaderHelperImpl, createShaderHelper, getBroadcastDims;\n var init_common = __esm({\n "web/lib/wasm/jsep/webgpu/ops/common.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n WORKGROUP_SIZE = 64;\n getWgslMappedType = (type, components) => {\n if (components === 3) {\n throw new Error("vec3 has same alignment as vec4, use vec4 instead");\n }\n switch (type) {\n case 10 /* float16 */:\n return components > 1 ? `vec${components}` : "f16";\n case 1 /* float */:\n return components > 1 ? `vec${components}` : "f32";\n case 6 /* int32 */:\n return components > 1 ? `vec${components}` : "i32";\n case 12 /* uint32 */:\n return components > 1 ? `vec${components}` : "u32";\n case 7 /* int64 */:\n if (components > 1) {\n throw new Error("currently not supported vecX of uint64 yet");\n }\n return ["vec2", "i32"];\n case 13 /* uint64 */:\n if (components > 1) {\n throw new Error("currently not supported vecX of uint64 yet");\n }\n return ["vec2", "u32"];\n case 9 /* bool */:\n if (components !== 4) {\n throw new Error("bool must be vec4");\n }\n return ["u32", "vec4"];\n default:\n throw new Error(`Unknown data type: ${type}`);\n }\n };\n tensorTypeToWsglStorageType = (type, components = 1) => {\n const mappedType = getWgslMappedType(type, components);\n return typeof mappedType === "string" ? mappedType : mappedType[0];\n };\n tensorTypeToWsglValueType = (type, components = 1) => {\n const mappedType = getWgslMappedType(type, components);\n return typeof mappedType === "string" ? mappedType : mappedType[1];\n };\n createTensorShapeVariables = (...dims) => {\n const programUniforms = [];\n dims.forEach((dim) => {\n if (dim.length !== 0) {\n programUniforms.push(\n { type: 12 /* uint32 */, data: dim },\n { type: 12 /* uint32 */, data: ShapeUtil.computeStrides(dim) }\n );\n }\n });\n return programUniforms;\n };\n getMaxComponents = (size) => {\n if (size % 4 === 0) {\n return 4;\n } else if (size % 2 === 0) {\n return 2;\n }\n return 1;\n };\n fillVector = (dataType = "f32", components, value = "0") => {\n if (!components || components === 1) {\n return `${dataType}(${value})`;\n }\n return `vec${components}<${dataType}>(${value})`;\n };\n castToF32 = (dataType, components, value) => {\n if (dataType === "f32") {\n return value;\n }\n if (components === 1) {\n return `f32(${value})`;\n }\n return `vec${components}(${value})`;\n };\n sumVector = (name, components) => {\n if (components === 4) {\n return `(${name}.x + ${name}.y + ${name}.z + ${name}.w)`;\n } else if (components === 2) {\n return `(${name}.x + ${name}.y)`;\n } else if (components === 3) {\n return `(${name}.x + ${name}.y + ${name}.z)`;\n }\n return name;\n };\n getElementAt = (name, index, length, type) => {\n if (name.startsWith("uniforms.") && length > 4) {\n if (typeof index === "string") {\n if (type === "f16") {\n return `${name}[(${index}) / 8][(${index}) % 8 / 4][(${index}) % 8 % 4]`;\n } else {\n return `${name}[(${index}) / 4][(${index}) % 4]`;\n }\n } else {\n if (type === "f16") {\n return `${name}[${Math.floor(index / 8)}][${Math.floor(index % 8 / 4)}][${index % 8 % 4}]`;\n } else {\n return `${name}[${Math.floor(index / 4)}][${index % 4}]`;\n }\n }\n } else {\n return length > 1 ? `${name}[${index}]` : name;\n }\n };\n createIndicesHelper = (name, tensorType, shapeOrRank, usage, components) => {\n const useUniform = typeof shapeOrRank === "number";\n const rank = useUniform ? shapeOrRank : shapeOrRank.length;\n const rankIdentity = [...new Array(rank).keys()];\n const indicesType = rank < 2 ? "u32" : rank <= 4 ? `vec${rank}` : `array`;\n const mappedType = getWgslMappedType(tensorType, components);\n const valueType = typeof mappedType === "string" ? mappedType : mappedType[1];\n const storageType = typeof mappedType === "string" ? mappedType : mappedType[0];\n const type = { indices: indicesType, value: valueType, storage: storageType, tensor: tensorType };\n const normalizeDim = (dim) => typeof dim === "string" ? dim : `${dim}u`;\n const implementationUsed = {\n offsetToIndices: false,\n indicesToOffset: false,\n broadcastedIndicesToOffset: false,\n set: false,\n setByIndices: false,\n get: false,\n getByIndices: false\n };\n const uniformPrefix = useUniform ? "uniforms." : "";\n const shape = `${uniformPrefix}${name}_shape`;\n const strides = `${uniformPrefix}${name}_strides`;\n let o2iSnippet = "";\n for (let i = 0; i < rank - 1; i++) {\n o2iSnippet += `\n let dim${i} = current / ${getElementAt(strides, i, rank)};\n let rest${i} = current % ${getElementAt(strides, i, rank)};\n indices[${i}] = dim${i};\n current = rest${i};\n `;\n }\n o2iSnippet += `indices[${rank - 1}] = current;`;\n const offsetToIndicesImplementation = rank < 2 ? "" : `\n fn o2i_${name}(offset: u32) -> ${type.indices} {\n var indices: ${type.indices};\n var current = offset;\n ${o2iSnippet}\n return indices;\n }`;\n const offsetToIndices = (varOffset) => {\n implementationUsed.offsetToIndices = true;\n return rank < 2 ? varOffset : `o2i_${name}(${varOffset})`;\n };\n const offsets = [];\n if (rank >= 2) {\n for (let i = rank - 1; i >= 0; i--) {\n offsets.push(`${getElementAt(strides, i, rank)} * (indices[${i}])`);\n }\n }\n const indicesToOffsetImplementation = rank < 2 ? "" : `\n fn i2o_${name}(indices: ${type.indices}) -> u32 {\n return ${offsets.join("+")};\n }`;\n const indicesToOffset = (varIndices) => {\n implementationUsed.indicesToOffset = true;\n return rank < 2 ? varIndices : `i2o_${name}(${varIndices})`;\n };\n const indices = (...init2) => rank === 0 ? "0u" : `${type.indices}(${init2.map(normalizeDim).join(",")})`;\n const indicesGet = (varIndices, idx) => {\n if (rank < 2) {\n return `${varIndices}`;\n } else {\n return `${getElementAt(varIndices, idx, rank)}`;\n }\n };\n const indicesSet = (varIndices, idx, value) => {\n if (rank < 2) {\n return `${varIndices}=${value};`;\n } else {\n return `${getElementAt(varIndices, idx, rank)}=${value};`;\n }\n };\n const broadcastedIndicesToOffsetImplementation = {};\n const broadcastedIndicesToOffset = (varIndices, output) => {\n implementationUsed.broadcastedIndicesToOffset = true;\n const implKey = `${output.name}broadcastedIndicesTo${name}Offset`;\n if (implKey in broadcastedIndicesToOffsetImplementation) {\n return `${implKey}(${varIndices})`;\n }\n const offsets2 = [];\n for (let i = rank - 1; i >= 0; i--) {\n const idx = output.indicesGet("outputIndices", i + output.rank - rank);\n offsets2.push(`${indicesGet(strides, i)} * (${idx} % ${indicesGet(shape, i)})`);\n }\n broadcastedIndicesToOffsetImplementation[implKey] = `fn ${implKey}(outputIndices: ${output.type.indices}) -> u32 {\n return ${offsets2.length > 0 ? offsets2.join("+") : "0u"};\n }`;\n return `${implKey}(${varIndices})`;\n };\n const setByOffset = (offset, value) => (() => {\n if (type.storage === type.value) {\n return `${name}[${offset}]=${value};`;\n } else if (type.storage === "vec2" && type.value === "i32") {\n return `${name}[${offset}]=vec2(u32(${value}), select(0u, 0xFFFFFFFFu, ${value} < 0));`;\n } else if (type.storage === "vec2" && type.value === "u32") {\n return `${name}[${offset}]=vec2(u32(${value}), 0u);`;\n } else if (type.storage === "u32" && type.value === "vec4") {\n return `${name}[${offset}]=dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(${value}));`;\n } else {\n throw new Error(`not supported combination of storage type ${type.storage} and value type ${type.value} yet`);\n }\n })();\n const getByOffset = (offset) => (() => {\n if (type.storage === type.value) {\n return `${name}[${offset}]`;\n } else if (type.storage === "vec2" && type.value === "i32") {\n return `i32(${name}[${offset}].x)`;\n } else if (type.storage === "vec2" && type.value === "u32") {\n return `u32(${name}[${offset}].x)`;\n } else if (type.storage === "u32" && type.value === "vec4") {\n return `vec4(bool(${name}[${offset}] & 0xFFu), bool(${name}[${offset}] & 0xFF00u), bool(${name}[${offset}] & 0xFF0000u), bool(${name}[${offset}] & 0xFF000000u))`;\n } else {\n throw new Error(`not supported combination of storage type ${type.storage} and value type ${type.value} yet`);\n }\n })();\n const getByIndicesImplementation = rank < 2 ? "" : `\n fn get_${name}ByIndices(indices: ${type.indices}) -> ${valueType} {\n return ${getByOffset(`i2o_${name}(indices)`)};\n }`;\n const getImplementation = rank < 2 ? "" : (() => {\n const functionParams = rankIdentity.map((i) => `d${i}: u32`).join(", ");\n const dimsParams = rankIdentity.map((i) => `d${i}`).join(", ");\n return `\n fn get_${name}(${functionParams}) -> ${valueType} {\n return get_${name}ByIndices(${indices(dimsParams)});\n }`;\n })();\n const get = (...indices2) => {\n if (indices2.length !== rank) {\n throw new Error(`indices length must be ${rank}`);\n }\n const normalizedIndices = indices2.map(normalizeDim).join(",");\n if (rank === 0) {\n return getByOffset("0u");\n } else if (rank === 1) {\n return getByOffset(normalizedIndices[0]);\n } else {\n implementationUsed.get = true;\n implementationUsed.getByIndices = true;\n implementationUsed.indicesToOffset = true;\n return `get_${name}(${normalizedIndices})`;\n }\n };\n const getByIndices = (varIndices) => {\n if (rank < 2) {\n return getByOffset(varIndices);\n } else {\n implementationUsed.getByIndices = true;\n implementationUsed.indicesToOffset = true;\n return `get_${name}ByIndices(${varIndices})`;\n }\n };\n const setByIndicesImplementation = rank < 2 ? "" : `\n fn set_${name}ByIndices(indices: ${type.indices}, value: ${valueType}) {\n ${setByOffset(`i2o_${name}(indices)`, "value")}\n }`;\n const setImplementation = rank < 2 ? "" : (() => {\n const functionParams = rankIdentity.map((i) => `d${i}: u32`).join(", ");\n const dimsParams = rankIdentity.map((i) => `d${i}`).join(", ");\n return `\n fn set_${name}(${functionParams}, value: ${valueType}) {\n set_${name}ByIndices(${indices(dimsParams)}, value);\n }`;\n })();\n const set = (...indicesAndValue) => {\n if (indicesAndValue.length !== rank + 1) {\n throw new Error(`indices length must be ${rank}`);\n }\n const value = indicesAndValue[rank];\n if (typeof value !== "string") {\n throw new Error("value must be string");\n }\n const normalizedIndices = indicesAndValue.slice(0, rank).map(normalizeDim).join(",");\n if (rank === 0) {\n return setByOffset("0u", value);\n } else if (rank === 1) {\n return setByOffset(normalizedIndices[0], value);\n } else {\n implementationUsed.set = true;\n implementationUsed.setByIndices = true;\n implementationUsed.indicesToOffset = true;\n return `set_${name}(${normalizedIndices}, ${value})`;\n }\n };\n const setByIndices = (varIndices, value) => {\n if (rank < 2) {\n return setByOffset(varIndices, value);\n } else {\n implementationUsed.setByIndices = true;\n implementationUsed.indicesToOffset = true;\n return `set_${name}ByIndices(${varIndices}, ${value});`;\n }\n };\n const impl = () => {\n const impls = [];\n let needShapeStrides = false;\n if (implementationUsed.offsetToIndices) {\n impls.push(offsetToIndicesImplementation);\n needShapeStrides = true;\n }\n if (implementationUsed.indicesToOffset) {\n impls.push(indicesToOffsetImplementation);\n needShapeStrides = true;\n }\n if (implementationUsed.broadcastedIndicesToOffset) {\n Object.values(broadcastedIndicesToOffsetImplementation).forEach((impl2) => impls.push(impl2));\n needShapeStrides = true;\n }\n if (implementationUsed.set) {\n impls.push(setImplementation);\n needShapeStrides = true;\n }\n if (implementationUsed.setByIndices) {\n impls.push(setByIndicesImplementation);\n needShapeStrides = true;\n }\n if (implementationUsed.get) {\n impls.push(getImplementation);\n needShapeStrides = true;\n }\n if (implementationUsed.getByIndices) {\n impls.push(getByIndicesImplementation);\n needShapeStrides = true;\n }\n if (!useUniform && needShapeStrides) {\n impls.unshift(\n `const ${shape} = ${type.indices}(${shapeOrRank.join(",")});`,\n `const ${strides} = ${type.indices}(${ShapeUtil.computeStrides(shapeOrRank).join(",")});`\n );\n }\n return impls.join("\\n");\n };\n return {\n impl,\n type,\n offsetToIndices,\n indicesToOffset,\n broadcastedIndicesToOffset,\n indices,\n indicesGet,\n indicesSet,\n set,\n setByOffset,\n setByIndices,\n get,\n getByOffset,\n getByIndices,\n // isVec4,\n usage,\n name,\n strides,\n shape,\n rank\n };\n };\n inputVariable = (name, type, shapeOrRank, components = 1) => createIndicesHelper(name, type, shapeOrRank, "input", components);\n outputVariable = (name, type, shapeOrRank, components = 1) => createIndicesHelper(name, type, shapeOrRank, "output", components);\n internalVariable = (name, type, shapeOrRank, components = 1) => createIndicesHelper(name, type, shapeOrRank, "internal", components);\n ShaderHelperImpl = class {\n constructor(normalizedDispatchGroup, limits) {\n this.normalizedDispatchGroup = normalizedDispatchGroup;\n this.limits = limits;\n this.internalVariables = [];\n this.variables = [];\n this.uniforms = [];\n this.variableIndex = 0;\n }\n guardAgainstOutOfBoundsWorkgroupSizes(size) {\n const sizeInCode = typeof size === "number" ? `${size}u` : size;\n return `if (global_idx >= ${sizeInCode}) { return; }`;\n }\n mainStart(workgroupSize = WORKGROUP_SIZE) {\n const workgroupSizeX = typeof workgroupSize === "number" ? workgroupSize : workgroupSize[0];\n const workgroupSizeY = typeof workgroupSize === "number" ? 1 : workgroupSize[1];\n const workgroupSizeZ = typeof workgroupSize === "number" ? 1 : workgroupSize[2];\n if (workgroupSizeX > this.limits.maxComputeWorkgroupSizeX || workgroupSizeY > this.limits.maxComputeWorkgroupSizeY || workgroupSizeZ > this.limits.maxComputeWorkgroupSizeZ) {\n throw new Error(`workgroup size [${workgroupSizeX}, ${workgroupSizeY}, ${workgroupSizeZ}] exceeds the maximum workgroup size [${this.limits.maxComputeWorkgroupSizeX}, ${this.limits.maxComputeWorkgroupSizeY}, ${this.limits.maxComputeWorkgroupSizeZ}].`);\n }\n if (workgroupSizeX * workgroupSizeY * workgroupSizeZ > this.limits.maxComputeInvocationsPerWorkgroup) {\n throw new Error(`workgroup size [${workgroupSizeX}, ${workgroupSizeY}, ${workgroupSizeZ}] exceeds the maximum workgroup invocations ${this.limits.maxComputeInvocationsPerWorkgroup}.`);\n }\n const is1DimensionDispatch = this.normalizedDispatchGroup[1] === 1 && this.normalizedDispatchGroup[2] === 1;\n const paramList = is1DimensionDispatch ? `@builtin(global_invocation_id) global_id : vec3,\n @builtin(workgroup_id) workgroup_id : vec3,\n @builtin(local_invocation_id) local_id : vec3` : `@builtin(global_invocation_id) global_id : vec3,\n @builtin(local_invocation_id) local_id : vec3,\n @builtin(local_invocation_index) local_idx : u32,\n @builtin(workgroup_id) workgroup_id : vec3,\n @builtin(num_workgroups) num_workgroups : vec3`;\n const globalIdxDefinition = is1DimensionDispatch ? "let global_idx = global_id.x; let local_idx = local_id.x;" : `let global_idx = (workgroup_id.z * num_workgroups[0] * num_workgroups[1] +\n workgroup_id.y * num_workgroups[0] + workgroup_id.x) * ${workgroupSizeX * workgroupSizeY * workgroupSizeZ}u + local_idx;`;\n return `@compute @workgroup_size(${workgroupSizeX}, ${workgroupSizeY}, ${workgroupSizeZ})\n fn main(${paramList}) {\n ${globalIdxDefinition}\n `;\n }\n appendVariableUniforms(variable) {\n if (variable.rank !== 0) {\n if (variable.shape.startsWith("uniforms.")) {\n this.uniforms.push({ name: variable.shape.replace("uniforms.", ""), type: "u32", length: variable.rank });\n }\n if (variable.strides.startsWith("uniforms.")) {\n this.uniforms.push({ name: variable.strides.replace("uniforms.", ""), type: "u32", length: variable.rank });\n }\n }\n }\n declareVariable(variable, bindingIndex) {\n if (variable.usage === "internal") {\n throw new Error("cannot use internal variable with declareVariable(). use registerInternalVariables() instead.");\n }\n this.variables.push(variable);\n this.appendVariableUniforms(variable);\n const access = variable.usage === "input" ? "read" : "read_write";\n const storageType = variable.type.storage;\n return `@group(0) @binding(${bindingIndex}) var ${variable.name}: array<${storageType}>;`;\n }\n declareVariables(...variables) {\n return variables.map((v) => this.declareVariable(v, this.variableIndex++)).join("\\n");\n }\n registerInternalVariable(variable) {\n if (variable.usage !== "internal") {\n throw new Error(\n "cannot use input or output variable with registerInternalVariable(). use declareVariables() instead."\n );\n }\n this.internalVariables.push(variable);\n this.appendVariableUniforms(variable);\n }\n registerInternalVariables(...variables) {\n variables.forEach((v) => this.registerInternalVariable(v));\n return this;\n }\n registerUniform(name, type, length = 1) {\n this.uniforms.push({ name, type, length });\n return this;\n }\n registerUniforms(additionalUniforms) {\n this.uniforms = this.uniforms.concat(additionalUniforms);\n return this;\n }\n uniformDeclaration() {\n if (this.uniforms.length === 0) {\n return "";\n }\n const uniformSnippets = [];\n for (const { name, type, length } of this.uniforms) {\n if (length && length > 4) {\n if (type === "f16") {\n uniformSnippets.push(`@align(16) ${name}:array, ${Math.ceil(length / 8)}>`);\n } else {\n uniformSnippets.push(`${name}:array, ${Math.ceil(length / 4)}>`);\n }\n } else {\n const typeTemp = length == null || length === 1 ? type : `vec${length}<${type}>`;\n uniformSnippets.push(`${name}:${typeTemp}`);\n }\n }\n return `\n struct Uniforms { ${uniformSnippets.join(", ")} };\n @group(0) @binding(${this.variableIndex}) var uniforms: Uniforms;`;\n }\n /**\n * Get additional implementation that needs to be added to the shader source.\n */\n get additionalImplementations() {\n return this.uniformDeclaration() + this.variables.map((i) => i.impl()).join("\\n") + this.internalVariables.map((i) => i.impl()).join("\\n");\n }\n /**\n * Get the variable info of the shader program.\n */\n get variablesInfo() {\n if (this.uniforms.length === 0) {\n return void 0;\n }\n const uniformWgslTypeToDataType = (type) => [\n 12 /* uint32 */,\n 10 /* float16 */,\n 1 /* float */,\n 6 /* int32 */\n ][["u32", "f16", "f32", "i32"].indexOf(type)];\n return this.uniforms.map((u) => [uniformWgslTypeToDataType(u.type), u.length ?? 1]);\n }\n };\n createShaderHelper = (dispatchGroup, limits) => new ShaderHelperImpl(dispatchGroup, limits);\n getBroadcastDims = (inShape, outShape) => {\n const inRank = inShape.length;\n const dims = [];\n for (let i = 0; i < inRank; i++) {\n const dim = inRank - 1 - i;\n const a = inShape[dim] || 1;\n const b = outShape[outShape.length - 1 - i] || 1;\n if (b > 1 && a === 1) {\n dims.unshift(dim);\n }\n }\n return dims;\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/transpose.ts\n var validateInputs, getAdjustedPerm, getOutputShape, permFunctionBody, createTransposeProgramInfo, transpose, parseTransposeAttributes;\n var init_transpose = __esm({\n "web/lib/wasm/jsep/webgpu/ops/transpose.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs = (inputs) => {\n if (!inputs || inputs.length !== 1) {\n throw new Error("Transpose requires 1 input.");\n }\n };\n getAdjustedPerm = (inputRank, perm) => perm && perm.length !== inputRank ? [...new Array(inputRank).keys()].reverse() : perm;\n getOutputShape = (inputShape, perm) => ShapeUtil.sortBasedOnPerm(inputShape, getAdjustedPerm(inputShape.length, perm));\n permFunctionBody = (perm, rank, input, output) => {\n const reverseFunc = [];\n reverseFunc.push(`fn perm(i: ${output.type.indices}) -> ${input.type.indices} {\n var a: ${input.type.indices};`);\n for (let i = 0; i < rank; ++i) {\n reverseFunc.push(input.indicesSet("a", perm[i], `i[${i}]`));\n }\n reverseFunc.push("return a;}");\n return reverseFunc.join("\\n");\n };\n createTransposeProgramInfo = (inputTensor, permAttr) => {\n const inputDataType = inputTensor.dataType;\n const inputRank = inputTensor.dims.length;\n const perm = getAdjustedPerm(inputRank, permAttr);\n const outputShape = getOutputShape(inputTensor.dims, perm);\n const output = outputVariable("output", inputDataType, outputShape.length);\n const input = inputVariable("a", inputDataType, inputRank);\n const getShaderSource = (shaderHelper) => `\n ${shaderHelper.registerUniform("output_size", "u32").declareVariables(input, output)}\n\n ${permFunctionBody(perm, inputRank, input, output)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n\n let indices = ${output.offsetToIndices("global_idx")};\n let aIndices = perm(indices);\n\n ${output.setByOffset("global_idx", input.getByIndices("aIndices"))}\n }`;\n return {\n name: "Transpose",\n shaderCache: { hint: `${permAttr}`, inputDependencies: ["rank"] },\n getRunData: (inputs) => {\n const outputSize = ShapeUtil.size(outputShape);\n return {\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms: [{ type: 12 /* uint32 */, data: outputSize }, ...createTensorShapeVariables(inputs[0].dims, outputShape)]\n };\n },\n getShaderSource\n };\n };\n transpose = (context, attributes) => {\n validateInputs(context.inputs);\n context.compute(createTransposeProgramInfo(context.inputs[0], attributes.perm));\n };\n parseTransposeAttributes = (attributes) => createAttributeWithCacheKey({ perm: attributes.perm });\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/reduce-shared.ts\n var reduceOps, reduceSharedOps, reduceInitValues, reduceOutputValues, getInnerMostAxes, computeOutAndReduceShapes, expandShapeToKeepDim, areAxesInnerMostDims, getAxesPermutation, createReduceSharedProgramInfo, reduceCommon, reduceMeanShared, reduceL1Shared, reduceL2Shared, reduceLogSumExpShared, reduceMaxShared, reduceMinShared, reduceProdShared, reduceSumShared, reduceSumSquareShared, reduceLogSumShared;\n var init_reduce_shared = __esm({\n "web/lib/wasm/jsep/webgpu/ops/reduce-shared.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n init_reduce();\n init_transpose();\n reduceOps = {\n max: "select(bestValue, candidate, candidate > bestValue)",\n min: "select(bestValue, candidate, candidate < bestValue)",\n mean: "bestValue + candidate",\n sum: "bestValue + candidate",\n prod: "bestValue * candidate",\n sumSquare: "bestValue + candidate * candidate",\n logSumExp: "bestValue + exp(candidate)",\n l1: "bestValue + abs(candidate)",\n l2: "bestValue + candidate * candidate",\n logSum: "bestValue + candidate"\n };\n reduceSharedOps = {\n max: "select(bestValue, candidate, candidate > bestValue)",\n min: "select(bestValue, candidate, candidate < bestValue)",\n mean: "bestValue + candidate",\n sum: "bestValue + candidate",\n prod: "bestValue * candidate",\n sumSquare: "bestValue + candidate",\n logSumExp: "bestValue + candidate",\n l1: "bestValue + candidate",\n l2: "bestValue + candidate",\n logSum: "bestValue + candidate"\n };\n reduceInitValues = {\n max: "_A[offset]",\n min: "_A[offset]",\n mean: "0",\n sum: "0",\n prod: "1",\n sumSquare: "0",\n logSumExp: "0",\n l1: "0",\n l2: "0",\n logSum: "0"\n };\n reduceOutputValues = {\n max: "bestValue",\n min: "bestValue",\n sum: "bestValue",\n prod: "bestValue",\n sumSquare: "bestValue",\n logSumExp: "log(bestValue)",\n l1: "bestValue",\n l2: "sqrt(bestValue)",\n logSum: "log(bestValue)"\n };\n getInnerMostAxes = (numInnerAxes, rank) => {\n const res = [];\n for (let i = rank - numInnerAxes; i < rank; ++i) {\n res.push(i);\n }\n return res;\n };\n computeOutAndReduceShapes = (shape, axes) => {\n const outputShape = [];\n const rank = shape.length;\n for (let dim = 0; dim < rank; dim++) {\n if (axes.indexOf(dim) === -1) {\n outputShape.push(shape[dim]);\n }\n }\n const reduceShape = axes.map((dim) => shape[dim]);\n return [outputShape, reduceShape];\n };\n expandShapeToKeepDim = (shape, axes) => {\n const rank = shape.length + axes.length;\n const expandShape = [];\n let shapeIdx = 0;\n for (let dim = 0; dim < rank; dim++) {\n if (axes.indexOf(dim) === -1) {\n expandShape.push(shape[shapeIdx++]);\n } else {\n expandShape.push(1);\n }\n }\n return expandShape;\n };\n areAxesInnerMostDims = (axes, rank) => {\n for (let i = 0; i < axes.length; ++i) {\n if (axes[axes.length - i - 1] !== rank - 1 - i) {\n return false;\n }\n }\n return true;\n };\n getAxesPermutation = (axes, rank) => {\n const res = [];\n if (!areAxesInnerMostDims(axes, rank)) {\n for (let i = 0; i < rank; ++i) {\n if (axes.indexOf(i) === -1) {\n res.push(i);\n }\n }\n axes.forEach((axis) => res.push(axis));\n }\n return res;\n };\n createReduceSharedProgramInfo = (name, shaderCache, inputs, reduceType, outputDataType, outputShape, reduceShape) => {\n const inputShape = inputs[0].dims;\n const outputSize = ShapeUtil.size(outputShape);\n const reduceSize = ShapeUtil.size(reduceShape);\n const input = inputVariable("_A", inputs[0].dataType, inputShape);\n const output = outputVariable("output", outputDataType, outputShape);\n const workgroupSize = 32;\n const sharedMemorySnippet = `\n var aBestValues : array;\n `;\n const getShaderSource = (shaderHelper) => `\n ${shaderHelper.registerUniform("reduceSize", "u32").declareVariables(input, output)}\n ${sharedMemorySnippet}\n fn DIV_CEIL(a : u32, b : u32) -> u32 {\n return ((a - 1u) / b + 1u);\n }\n ${shaderHelper.mainStart(workgroupSize)}\n\n let outputIndex = global_idx / ${workgroupSize};\n let offset = outputIndex * uniforms.reduceSize;\n\n var bestValue = f32(${reduceInitValues[reduceType]});\n let Length = uniforms.reduceSize;\n for (var k = local_idx; k < Length; k = k + ${workgroupSize}) {\n let candidate = f32(${input.getByOffset("offset + k")});\n bestValue = ${reduceOps[reduceType]};\n }\n aBestValues[local_idx] = bestValue;\n workgroupBarrier();\n\n var reduceSize = min(Length, ${workgroupSize}u);\n for (var currentSize = reduceSize / 2u; reduceSize > 1u;\n currentSize = reduceSize / 2u) {\n let interval = DIV_CEIL(reduceSize, 2u);\n if (local_idx < currentSize) {\n let candidate = aBestValues[local_idx + interval];\n bestValue = ${reduceSharedOps[reduceType]};\n aBestValues[local_idx] = bestValue;\n }\n reduceSize = interval;\n workgroupBarrier();\n }\n\n if (local_idx == 0u) {\n ${output.setByOffset(\n "outputIndex",\n `${reduceType === "mean" ? `${output.type.storage}(bestValue / f32(uniforms.reduceSize))` : `${output.type.storage}(${reduceOutputValues[reduceType]})`}`\n )};\n }\n }`;\n return {\n name,\n shaderCache,\n getShaderSource,\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: outputDataType }],\n dispatchGroup: { x: outputSize },\n programUniforms: [{ type: 12 /* uint32 */, data: reduceSize }]\n })\n };\n };\n reduceCommon = (context, name, attributes, reduceType) => {\n const updatedAttributes = context.inputs.length === 1 ? attributes : createReduceAttributesFromInputs(context.inputs, attributes);\n let updatedAxes = updatedAttributes.axes;\n if (updatedAxes.length === 0 && !updatedAttributes.noopWithEmptyAxes) {\n updatedAxes = context.inputs[0].dims.map((_dim, i) => i);\n }\n const normalizeAxes = ShapeUtil.normalizeAxes(updatedAxes, context.inputs[0].dims.length);\n let axes = normalizeAxes;\n let input = context.inputs[0];\n const permutedAxes = getAxesPermutation(axes, context.inputs[0].dims.length);\n if (permutedAxes.length > 0) {\n input = context.compute(\n createTransposeProgramInfo(context.inputs[0], permutedAxes),\n { inputs: [0], outputs: [-1] }\n )[0];\n axes = getInnerMostAxes(axes.length, input.dims.length);\n }\n const [outputShape, reduceShape] = computeOutAndReduceShapes(input.dims, axes);\n let finalOutputShape = outputShape;\n if (updatedAttributes.keepDims) {\n finalOutputShape = expandShapeToKeepDim(outputShape, normalizeAxes);\n }\n context.compute(\n createReduceSharedProgramInfo(\n name,\n { hint: updatedAttributes.cacheKey, inputDependencies: ["type"] },\n [input],\n reduceType,\n context.inputs[0].dataType,\n finalOutputShape,\n reduceShape\n ),\n { inputs: [input] }\n );\n };\n reduceMeanShared = (context, attributes) => {\n reduceCommon(context, "ReduceMeanShared", attributes, "mean");\n };\n reduceL1Shared = (context, attributes) => {\n reduceCommon(context, "ReduceL1Shared", attributes, "l1");\n };\n reduceL2Shared = (context, attributes) => {\n reduceCommon(context, "ReduceL2Shared", attributes, "l2");\n };\n reduceLogSumExpShared = (context, attributes) => {\n reduceCommon(context, "ReduceLogSumExpShared", attributes, "logSumExp");\n };\n reduceMaxShared = (context, attributes) => {\n reduceCommon(context, "ReduceMaxShared", attributes, "max");\n };\n reduceMinShared = (context, attributes) => {\n reduceCommon(context, "ReduceMinShared", attributes, "min");\n };\n reduceProdShared = (context, attributes) => {\n reduceCommon(context, "ReduceProdShared", attributes, "prod");\n };\n reduceSumShared = (context, attributes) => {\n reduceCommon(context, "ReduceSumShared", attributes, "sum");\n };\n reduceSumSquareShared = (context, attributes) => {\n reduceCommon(context, "ReduceSumSquareShared", attributes, "sumSquare");\n };\n reduceLogSumShared = (context, attributes) => {\n reduceCommon(context, "ReduceLogSumShared", attributes, "logSum");\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/reduce.ts\n var validateInputs2, noOp, createReduceProgramInfo, createReduceAttributesFromInputs, runReduceProgram, reduceLogSumNaive, reduceL1Naive, reduceL2Naive, reduceLogSumExpNaive, reduceMaxNaive, reduceMeanNaive, reduceMinNaive, reduceProdNaive, reduceSumNaive, reduceSumSquareNaive, useNaiveReduceMethod, reduceMean, reduceL1, reduceL2, reduceLogSumExp, reduceMax, reduceMin, reduceProd, reduceSum, reduceSumSquare, reduceLogSum;\n var init_reduce = __esm({\n "web/lib/wasm/jsep/webgpu/ops/reduce.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n init_reduce_shared();\n validateInputs2 = (inputs) => {\n if (!inputs || inputs.length === 0 || inputs.length > 2) {\n throw new Error("Reduce op requires 1 or 2 inputs.");\n }\n if (inputs.length === 2 && inputs[1].dims.length !== 1) {\n throw new Error("Invalid axes input dims.");\n }\n };\n noOp = (input) => ["", "", `var value = ${input.getByIndices("input_indices")};`, ""];\n createReduceProgramInfo = (name, shaderCache, inputs, reduceOp, axesInput, outputDataType, keepDims = false, noopWithEmptyAxes = false) => {\n const outputShape = [];\n const inputShape = inputs[0].dims;\n const inputRank = inputShape.length;\n const axes = ShapeUtil.normalizeAxes(axesInput, inputRank);\n const reduceOnAllAxes = !noopWithEmptyAxes && axes.length === 0;\n inputShape.forEach((d, i) => {\n if (reduceOnAllAxes || axes.indexOf(i) >= 0) {\n if (keepDims) {\n outputShape.push(1);\n }\n } else {\n outputShape.push(d);\n }\n });\n const outputRank = outputShape.length;\n const outputSize = ShapeUtil.size(outputShape);\n const getShaderSource = (shaderHelper) => {\n const idxCopy = [];\n const input = inputVariable("_A", inputs[0].dataType, inputRank);\n const output = outputVariable("output", outputDataType, outputRank);\n const ops = reduceOp(input, output, axes);\n let reduceOps2 = ops[2];\n for (let k = 0, l = 0; k < inputRank; k++) {\n if (reduceOnAllAxes || axes.indexOf(k) >= 0) {\n if (keepDims) {\n l++;\n }\n reduceOps2 = `for(var j${k}: u32 = 0; j${k} < ${inputShape[k]}; j${k}++) {\n ${ops[2].includes("last_index") ? `let last_index = j${k};` : ""}\n ${input.indicesSet("input_indices", k, `j${k}`)}\n ${reduceOps2}\n }`;\n } else {\n idxCopy.push(`${input.indicesSet("input_indices", k, output.indicesGet("output_indices", l))};`);\n l++;\n }\n }\n return `\n\n ${shaderHelper.registerUniform("output_size", "u32").declareVariables(input, output)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n var input_indices: ${input.type.indices};\n let output_indices = ${output.offsetToIndices("global_idx")};\n\n ${idxCopy.join("\\n")}\n ${ops[0]} // init ops for reduce max/min\n ${ops[1]}\n ${reduceOps2}\n ${ops[3]}\n ${ops.length === 4 ? output.setByOffset("global_idx", "value") : ops.slice(4).join("\\n")}\n }`;\n };\n return {\n name,\n shaderCache,\n getShaderSource,\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: outputDataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms: [{ type: 12 /* uint32 */, data: outputSize }, ...createTensorShapeVariables(inputShape, outputShape)]\n })\n };\n };\n createReduceAttributesFromInputs = (inputs, attributes) => {\n const axes = [];\n if (inputs[1].dims[0] > 0) {\n inputs[1].getBigInt64Array().forEach((v) => axes.push(Number(v)));\n }\n return createAttributeWithCacheKey(\n { axes, keepDims: attributes.keepDims, noopWithEmptyAxes: attributes.noopWithEmptyAxes }\n );\n };\n runReduceProgram = (context, name, attributes, reduceOp) => {\n const inputs = context.inputs;\n const updatedAttributes = inputs.length === 1 ? attributes : createReduceAttributesFromInputs(inputs, attributes);\n context.compute(\n createReduceProgramInfo(\n name,\n { hint: updatedAttributes.cacheKey, inputDependencies: ["rank"] },\n [inputs[0]],\n updatedAttributes.noopWithEmptyAxes && updatedAttributes.axes.length === 0 ? noOp : reduceOp,\n updatedAttributes.axes,\n inputs[0].dataType,\n updatedAttributes.keepDims,\n updatedAttributes.noopWithEmptyAxes\n ),\n { inputs: [0] }\n );\n };\n reduceLogSumNaive = (context, attributes) => {\n validateInputs2(context.inputs);\n const reduceOp = (input, output) => [\n `var value = ${output.type.storage}(0);`,\n "",\n `value += ${input.getByIndices("input_indices")};`,\n "value = log(value);"\n ];\n runReduceProgram(context, "ReduceLogSum", attributes, reduceOp);\n };\n reduceL1Naive = (context, attributes) => {\n validateInputs2(context.inputs);\n const reduceOp = (input, output) => [\n `var value = ${output.type.storage}(0);`,\n "",\n `value += abs(${input.getByIndices("input_indices")});`,\n ""\n ];\n runReduceProgram(context, "ReduceL1", attributes, reduceOp);\n };\n reduceL2Naive = (context, attributes) => {\n validateInputs2(context.inputs);\n const reduceOp = (input, output) => [\n `var t = ${output.type.value}(0); var value = ${output.type.value}(0);`,\n "",\n `t = ${input.getByIndices("input_indices")}; value += (t * t);`,\n "value = sqrt(value);"\n ];\n runReduceProgram(context, "ReduceL2", attributes, reduceOp);\n };\n reduceLogSumExpNaive = (context, attributes) => {\n validateInputs2(context.inputs);\n const reduceOp = (input, output) => [\n `var value = ${output.type.storage}(0);`,\n "",\n `value += exp(${input.getByIndices("input_indices")});`,\n "value = log(value);"\n ];\n runReduceProgram(context, "ReduceLogSumExp", attributes, reduceOp);\n };\n reduceMaxNaive = (context, attributes) => {\n validateInputs2(context.inputs);\n const reduceOp = (input, _output, axes) => {\n const idxZero = [];\n for (let k = 0; k < input.rank; k++) {\n if (axes.indexOf(k) >= 0 || axes.length === 0) {\n idxZero.push(input.indicesSet("input_indices", k, 0));\n }\n }\n return [\n `${idxZero.join("\\n")}`,\n `var value = ${input.getByIndices("input_indices")};`,\n `value = max(value, ${input.getByIndices("input_indices")});`,\n ""\n ];\n };\n runReduceProgram(context, "ReduceMax", attributes, reduceOp);\n };\n reduceMeanNaive = (context, attributes) => {\n validateInputs2(context.inputs);\n const reduceOp = (input, output, axes) => {\n let size = 1;\n for (let k = 0; k < input.rank; k++) {\n if (axes.indexOf(k) >= 0 || axes.length === 0) {\n size *= context.inputs[0].dims[k];\n }\n }\n return [\n "var sum = f32(0);",\n "",\n `sum += f32(${input.getByIndices("input_indices")});`,\n `let value = ${output.type.value}(sum / ${size});`\n ];\n };\n runReduceProgram(context, "ReduceMean", attributes, reduceOp);\n };\n reduceMinNaive = (context, attributes) => {\n validateInputs2(context.inputs);\n const reduceOp = (input, _output, axes) => {\n const idxZero = [];\n for (let k = 0; k < input.rank; k++) {\n if (axes.indexOf(k) >= 0 || axes.length === 0) {\n idxZero.push(`input_indices[${k}] = 0;`);\n }\n }\n return [\n `${idxZero.join("\\n")}`,\n `var value = ${input.getByIndices("input_indices")};`,\n `value = min(value, ${input.getByIndices("input_indices")});`,\n ""\n ];\n };\n runReduceProgram(context, "ReduceMin", attributes, reduceOp);\n };\n reduceProdNaive = (context, attributes) => {\n validateInputs2(context.inputs);\n const reduceOp = (input, output) => [\n `var value = ${output.type.storage}(1);`,\n "",\n `value *= ${input.getByIndices("input_indices")};`,\n ""\n ];\n runReduceProgram(context, "ReduceProd", attributes, reduceOp);\n };\n reduceSumNaive = (context, attributes) => {\n validateInputs2(context.inputs);\n const reduceOp = (input, output) => [\n `var value = ${output.type.storage}(0);`,\n "",\n `value += ${input.getByIndices("input_indices")};`,\n ""\n ];\n runReduceProgram(context, "ReduceSum", attributes, reduceOp);\n };\n reduceSumSquareNaive = (context, attributes) => {\n validateInputs2(context.inputs);\n const reduceOp = (input, output) => [\n `var t = ${output.type.value}(0); var value = ${output.type.value}(0);`,\n "",\n `t = ${input.getByIndices("input_indices")}; value += t * t;`,\n ""\n ];\n runReduceProgram(context, "ReduceSumSquare", attributes, reduceOp);\n };\n useNaiveReduceMethod = (shape, axes, noopWithEmptyAxes) => {\n if (axes.length === 0) {\n return noopWithEmptyAxes;\n }\n let outputSize = 1;\n let reduceSize = 1;\n for (let dim = 0; dim < axes.length; dim++) {\n if (axes.indexOf(dim) === -1) {\n outputSize *= shape[dim];\n } else {\n reduceSize *= shape[dim];\n }\n }\n return reduceSize < 32 && outputSize > 1024;\n };\n reduceMean = (context, attributes) => {\n if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) {\n reduceMeanNaive(context, attributes);\n } else {\n reduceMeanShared(context, attributes);\n }\n };\n reduceL1 = (context, attributes) => {\n if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) {\n reduceL1Naive(context, attributes);\n } else {\n reduceL1Shared(context, attributes);\n }\n };\n reduceL2 = (context, attributes) => {\n if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) {\n reduceL2Naive(context, attributes);\n } else {\n reduceL2Shared(context, attributes);\n }\n };\n reduceLogSumExp = (context, attributes) => {\n if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) {\n reduceLogSumExpNaive(context, attributes);\n } else {\n reduceLogSumExpShared(context, attributes);\n }\n };\n reduceMax = (context, attributes) => {\n if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) {\n reduceMaxNaive(context, attributes);\n } else {\n reduceMaxShared(context, attributes);\n }\n };\n reduceMin = (context, attributes) => {\n if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) {\n reduceMinNaive(context, attributes);\n } else {\n reduceMinShared(context, attributes);\n }\n };\n reduceProd = (context, attributes) => {\n if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) {\n reduceProdNaive(context, attributes);\n } else {\n reduceProdShared(context, attributes);\n }\n };\n reduceSum = (context, attributes) => {\n if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) {\n reduceSumNaive(context, attributes);\n } else {\n reduceSumShared(context, attributes);\n }\n };\n reduceSumSquare = (context, attributes) => {\n if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) {\n reduceSumSquareNaive(context, attributes);\n } else {\n reduceSumSquareShared(context, attributes);\n }\n };\n reduceLogSum = (context, attributes) => {\n if (useNaiveReduceMethod(context.inputs[0].dims, attributes.axes, attributes.noopWithEmptyAxes)) {\n reduceLogSumNaive(context, attributes);\n } else {\n reduceLogSumShared(context, attributes);\n }\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/argminmax.ts\n var validateInputs3, argMin, argMax, parseArgMinMaxAttributes;\n var init_argminmax = __esm({\n "web/lib/wasm/jsep/webgpu/ops/argminmax.ts"() {\n "use strict";\n init_wasm_common();\n init_attribute_with_cache_key();\n init_reduce();\n validateInputs3 = (inputs) => {\n if (!inputs || inputs.length === 0 || inputs.length > 2) {\n throw new Error("ArgMinMaxOp op requires 1 or 2 inputs.");\n }\n if (inputs[0].dataType !== 1 /* float */) {\n throw new Error("Invalid input type.");\n }\n };\n argMin = (context, attributes) => {\n validateInputs3(context.inputs);\n const argMinMaxOp = (input, output, axes) => {\n const idxZero = [];\n for (let k = 0; k < input.rank; k++) {\n if (axes.indexOf(k) >= 0 || axes.length === 0) {\n idxZero.push(`input_indices[${k}] = 0;`);\n }\n }\n return [\n `${idxZero.join("\\n")}`,\n `var value = ${input.getByIndices("input_indices")};\nvar best_index : i32 = 0;`,\n `if (${input.getByIndices("input_indices")} ${attributes.selectLastIndex > 0 ? "<=" : "<"} value) {\n value = ${input.getByIndices("input_indices")};\n best_index = i32(last_index);\n }`,\n "",\n output.setByOffset("global_idx", "best_index")\n ];\n };\n context.compute(\n createReduceProgramInfo(\n "ArgMin",\n { hint: attributes.cacheKey, inputDependencies: ["rank"] },\n [context.inputs[0]],\n argMinMaxOp,\n [attributes.axis],\n 7 /* int64 */,\n attributes.keepDims\n ),\n { inputs: [0] }\n );\n };\n argMax = (context, attributes) => {\n validateInputs3(context.inputs);\n const argMinMaxOp = (input, output, axes) => {\n const idxZero = [];\n for (let k = 0; k < input.rank; k++) {\n if (axes.indexOf(k) >= 0 || axes.length === 0) {\n idxZero.push(`input_indices[${k}] = 0;`);\n }\n }\n return [\n `${idxZero.join("\\n")}`,\n `var value = ${input.getByIndices("input_indices")};\nvar best_index : i32 = 0;`,\n `if (${input.getByIndices("input_indices")} ${attributes.selectLastIndex > 0 ? ">=" : ">"} value) {\n value = ${input.getByIndices("input_indices")};\n best_index = i32(last_index);\n }`,\n "",\n output.setByOffset("global_idx", "best_index")\n ];\n };\n context.compute(\n createReduceProgramInfo(\n "argMax",\n { hint: attributes.cacheKey, inputDependencies: ["rank"] },\n [context.inputs[0]],\n argMinMaxOp,\n [attributes.axis],\n 7 /* int64 */,\n attributes.keepDims\n ),\n { inputs: [0] }\n );\n };\n parseArgMinMaxAttributes = (attributes) => createAttributeWithCacheKey(attributes);\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/concat.ts\n var validateInputs4, calculateInputIndexImpl, assignOutputData, createConcatProgramInfo, concat, parseConcatAttributes;\n var init_concat = __esm({\n "web/lib/wasm/jsep/webgpu/ops/concat.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs4 = (inputs, axis) => {\n if (!inputs || inputs.length < 1) {\n throw new Error("too few inputs");\n }\n const referenceIndex = 0;\n const referenceInput = inputs[referenceIndex];\n const inputType = referenceInput.dataType;\n const inputRank = referenceInput.dims.length;\n inputs.forEach((input, i) => {\n if (i === referenceIndex) {\n return;\n }\n if (input.dataType !== inputType) {\n throw new Error("input tensors should be one type");\n }\n if (input.dims.length !== inputRank) {\n throw new Error("input tensors should have the same shape");\n }\n input.dims.forEach((dim, i2) => {\n if (i2 !== axis && dim !== referenceInput.dims[i2]) {\n throw new Error("non concat dimensions must match");\n }\n });\n });\n };\n calculateInputIndexImpl = (numberOfTensors, sizeInConcatAxisStr) => `\n fn calculateInputIndex(index: u32) -> u32 {\n let sizeInConcatAxis = array(${sizeInConcatAxisStr});\n for (var i: u32 = 0u; i < ${numberOfTensors}; i += 1u ) {\n if (index < sizeInConcatAxis[i]) {\n return i;\n }\n }\n return ${numberOfTensors}u;\n }`;\n assignOutputData = (inputs, output) => {\n const numberOfTensors = inputs.length;\n const codeLines = [];\n for (let i = 0; i < numberOfTensors; ++i) {\n const returnSnippet = output.setByOffset("global_idx", inputs[i].getByIndices("indices"));\n if (numberOfTensors === 1) {\n codeLines.push(returnSnippet);\n } else if (i === 0) {\n codeLines.push(`if (inputIndex == ${i}u) { ${returnSnippet} }`);\n } else if (i === numberOfTensors - 1) {\n codeLines.push(`else { ${returnSnippet} }`);\n } else {\n codeLines.push(`else if (inputIndex == ${i}) { ${returnSnippet} }`);\n }\n }\n return codeLines.join("\\n");\n };\n createConcatProgramInfo = (inputs, adjustedAxis, outputShape, dataType) => {\n const outputSize = ShapeUtil.size(outputShape);\n const sizeInConcatAxis = new Array(inputs.length);\n const inputVars = new Array(inputs.length);\n let previousSum = 0;\n const inputDependencies = [];\n const inputRanks = [];\n const programUniforms = [{ type: 12 /* uint32 */, data: outputSize }];\n for (let i = 0; i < inputs.length; ++i) {\n previousSum += inputs[i].dims[adjustedAxis];\n sizeInConcatAxis[i] = previousSum;\n inputRanks.push(inputs[i].dims.length);\n inputVars[i] = inputVariable(`input${i}`, dataType, inputRanks[i]);\n inputDependencies.push("rank");\n programUniforms.push({ type: 12 /* uint32 */, data: sizeInConcatAxis[i] });\n }\n for (let i = 0; i < inputs.length; ++i) {\n programUniforms.push(...createTensorShapeVariables(inputs[i].dims));\n }\n programUniforms.push(...createTensorShapeVariables(outputShape));\n const output = outputVariable("output", dataType, outputShape.length);\n const indicesAxis = output.indicesGet("indices", adjustedAxis);\n const sizeInConcatAxisStr = Array.from(Array(sizeInConcatAxis.length).keys()).map((i) => `uniforms.sizeInConcatAxis${i}`).join(",");\n const getShaderSource = (shaderHelper) => `\n\n ${(() => {\n shaderHelper.registerUniform("outputSize", "u32");\n for (let i = 0; i < inputs.length; i++) {\n shaderHelper.registerUniform(`sizeInConcatAxis${i}`, "u32");\n }\n return shaderHelper.declareVariables(...inputVars, output);\n })()}\n\n ${calculateInputIndexImpl(sizeInConcatAxis.length, sizeInConcatAxisStr)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}\n\n var indices = ${output.offsetToIndices("global_idx")};\n\n let inputIndex = calculateInputIndex(${indicesAxis});\n if (inputIndex != 0u) {\n let sizeInConcatAxis = array(${sizeInConcatAxisStr});\n ${indicesAxis} -= sizeInConcatAxis[inputIndex - 1u];\n }\n\n ${assignOutputData(inputVars, output)}\n }`;\n return {\n name: "Concat",\n shaderCache: { hint: `${adjustedAxis}`, inputDependencies },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n };\n };\n concat = (context, attributes) => {\n const inputs = context.inputs;\n const inputShape = inputs[0].dims;\n const adjustedAxis = ShapeUtil.normalizeAxis(attributes.axis, inputShape.length);\n validateInputs4(inputs, adjustedAxis);\n const outputShape = inputShape.slice();\n outputShape[adjustedAxis] = inputs.reduce((sum, input) => sum + (input.dims.length > adjustedAxis ? input.dims[adjustedAxis] : 0), 0);\n const nonEmptyInputs = inputs.filter((input) => ShapeUtil.size(input.dims) > 0);\n context.compute(\n createConcatProgramInfo(nonEmptyInputs, adjustedAxis, outputShape, inputs[0].dataType),\n { inputs: nonEmptyInputs }\n );\n };\n parseConcatAttributes = (attributes) => createAttributeWithCacheKey({ axis: attributes.axis });\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/attention.ts\n var validateAttentionInputs, createInPlaceSoftmaxProgramInfo, createAttentionProbsProgramInfo, createVxAttentionScoreProgramInfo, applyAttention, prepare, attention;\n var init_attention = __esm({\n "web/lib/wasm/jsep/webgpu/ops/attention.ts"() {\n "use strict";\n init_wasm_common();\n init_types();\n init_common();\n init_concat();\n validateAttentionInputs = (inputs, attributes) => {\n const input = inputs[0];\n const weights = inputs[1];\n const bias = inputs[2];\n const maskIndex = inputs[3];\n const past = inputs[4];\n const relativePositionBias = inputs[5];\n if (past && relativePositionBias) {\n throw new Error("Attention cannot have both past and relative_position_bias");\n }\n if (input.dims.length !== 3) {\n throw new Error(\'Input "input" must have 3 dimensions\');\n }\n const batchSize = input.dims[0];\n const sequenceLength = input.dims[1];\n const inputHiddenSize = input.dims[2];\n if (bias.dims.length !== 1) {\n throw new Error(\'Input "bias" is expected to have 1 dimensions\');\n }\n if (weights.dims.length !== 2) {\n throw new Error(\'Input "weights" is expected to have 2 dimensions\');\n }\n if (weights.dims[0] !== inputHiddenSize) {\n throw new Error("Input 1 dimension 0 should have same length as dimension 2 of input 0");\n }\n if (bias.dims[0] !== weights.dims[1]) {\n throw new Error(\'Input "bias" dimension 0 should have same length as dimension 1 of input "weights"\');\n }\n let qHiddenSize = bias.dims[0] / 3;\n let kHiddenSize = qHiddenSize;\n let vHiddenSize = kHiddenSize;\n if (attributes.qkvHiddenSizes.length > 0) {\n if (attributes.qkvHiddenSizes.length !== 3) {\n throw new Error("qkv_hidden_sizes attribute should have 3 elements");\n }\n for (const sz of attributes.qkvHiddenSizes) {\n if (sz % attributes.numHeads !== 0) {\n throw new Error("qkv_hidden_sizes should be divisible by num_heads");\n }\n }\n qHiddenSize = attributes.qkvHiddenSizes[0];\n kHiddenSize = attributes.qkvHiddenSizes[1];\n vHiddenSize = attributes.qkvHiddenSizes[2];\n }\n const kvSequenceLength = sequenceLength;\n if (qHiddenSize !== kHiddenSize) {\n throw new Error("qkv_hidden_sizes first element should be same as the second");\n }\n if (bias.dims[0] !== qHiddenSize + kHiddenSize + vHiddenSize) {\n throw new Error(\'Input "bias" dimension 0 should have same length as sum of Q/K/V hidden sizes\');\n }\n let pastSequenceLength = 0;\n if (past) {\n if (kHiddenSize !== vHiddenSize) {\n throw new Error(\'Input "past" expect k_hidden_size == v_hidden_size\');\n }\n if (past.dims.length !== 5) {\n throw new Error(\'Input "past" must have 5 dimensions\');\n }\n if (past.dims[0] !== 2) {\n throw new Error(\'Input "past" first dimension must be 2\');\n }\n if (past.dims[1] !== batchSize) {\n throw new Error(\'Input "past" second dimension must be batch_size\');\n }\n if (past.dims[2] !== attributes.numHeads) {\n throw new Error(\'Input "past" third dimension must be num_heads\');\n }\n if (past.dims[4] !== kHiddenSize / attributes.numHeads) {\n throw new Error(\'Input "past" fifth dimension must be k_hidden_size / num_heads\');\n }\n if (!attributes.pastPresentShareBuffer) {\n pastSequenceLength = past.dims[3];\n }\n }\n const totalSequenceLength = kvSequenceLength + pastSequenceLength;\n const maxSequenceLength = -1;\n const maskType = 0 /* none */;\n if (maskIndex) {\n throw new Error("Mask not supported");\n }\n if (past) {\n throw new Error("past is not supported");\n }\n return {\n batchSize,\n sequenceLength,\n pastSequenceLength,\n kvSequenceLength,\n totalSequenceLength,\n maxSequenceLength,\n inputHiddenSize,\n hiddenSize: qHiddenSize,\n vHiddenSize,\n headSize: Math.floor(qHiddenSize / attributes.numHeads),\n vHeadSize: Math.floor(vHiddenSize / attributes.numHeads),\n numHeads: attributes.numHeads,\n isUnidirectional: false,\n pastPresentShareBuffer: false,\n maskFilterValue: attributes.maskFilterValue,\n maskType,\n scale: attributes.scale,\n broadcastResPosBias: false,\n passPastInKv: false,\n qkvFormat: 1 /* qkvBNSH */\n };\n };\n createInPlaceSoftmaxProgramInfo = (_context, input, n, d) => {\n const components = getMaxComponents(d);\n let WG = 64;\n const dComp = d / components;\n if (dComp < WG) {\n WG = 1;\n } else if (dComp / 8 < 64) {\n WG = Math.ceil(dComp / 8);\n }\n const elementsPerThread = Math.ceil(d / components / WG);\n const programUniforms = [\n { type: input.dataType, data: 1 / d },\n { type: 12 /* uint32 */, data: dComp },\n { type: 12 /* uint32 */, data: elementsPerThread }\n ];\n const dataType = tensorTypeToWsglStorageType(input.dataType, components);\n const f32Type = tensorTypeToWsglValueType(1 /* float */, components);\n const getShaderSource = (shaderHelper) => {\n const inputHelper = outputVariable("x", input.dataType, input.dims, components);\n const elemValueType = tensorTypeToWsglValueType(input.dataType);\n const uniforms = [\n { name: "d_inv", type: elemValueType },\n { name: "d_comp", type: "u32" },\n { name: "elements_per_thread", type: "u32" }\n ];\n return `\n var thread_max: array;\n var thread_sum: array;\n ${shaderHelper.registerUniforms(uniforms).declareVariables(inputHelper)}\n ${shaderHelper.mainStart([\n WG,\n 1,\n 1\n ])}\n let local_offset = local_idx * uniforms.elements_per_thread;\n let offset = workgroup_id.x * uniforms.d_comp + local_offset;\n\n var thread_max_vector = ${f32Type}(-3.402823e+38f);\n for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < uniforms.d_comp; i++) {\n thread_max_vector = max(${f32Type}(x[offset + i]), thread_max_vector);\n }\n thread_max[local_idx] = ${(() => {\n switch (components) {\n case 1:\n return "thread_max_vector";\n case 2:\n return "max(thread_max_vector.x, thread_max_vector.y)";\n case 4:\n return "max(max(thread_max_vector.x, thread_max_vector.y), max(thread_max_vector.z, thread_max_vector.w))";\n default:\n throw new Error(`Unsupported components: ${components}`);\n }\n })()};\n workgroupBarrier();\n\n var max_value = f32(-3.402823e+38f);\n for (var i = 0u; i < ${WG}; i++) {\n max_value = max(thread_max[i], max_value);\n }\n\n var sum_vector = ${f32Type}(0);\n for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < uniforms.d_comp; i++) {\n sum_vector += exp(${f32Type}(x[offset + i]) - max_value);\n }\n thread_sum[local_idx] = ${(() => {\n switch (components) {\n case 1:\n return "sum_vector";\n case 2:\n return "sum_vector.x + sum_vector.y";\n case 4:\n return "sum_vector.x + sum_vector.y + sum_vector.z + sum_vector.w";\n default:\n throw new Error(`Unsupported components: ${components}`);\n }\n })()};\n workgroupBarrier();\n\n var sum: f32 = 0;\n for (var i = 0u; i < ${WG}; i++) {\n sum += thread_sum[i];\n }\n\n if (sum == 0) {\n for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < uniforms.d_comp; i++) {\n x[offset + i] = ${inputHelper.type.value}(uniforms.d_inv);\n }\n } else {\n for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < uniforms.d_comp; i++) {\n var f32input = ${f32Type}(x[offset + i]);\n x[offset + i] = ${inputHelper.type.value}(exp(f32input - max_value) / sum);\n }\n }\n }`;\n };\n return {\n name: "AttentionProbsSoftmax",\n shaderCache: { hint: `${WG};${dataType};${components}` },\n getShaderSource,\n getRunData: () => ({ outputs: [], dispatchGroup: { x: n }, programUniforms })\n };\n };\n createAttentionProbsProgramInfo = (_context, q, key, relativePositionBias, parameters, attributes, pastSequenceLength) => {\n const totalSequenceLength = pastSequenceLength + parameters.kvSequenceLength;\n const probsShape = [parameters.batchSize, parameters.numHeads, parameters.sequenceLength, totalSequenceLength];\n const alpha = attributes.scale === 0 ? 1 / Math.sqrt(parameters.headSize) : attributes.scale;\n const components = getMaxComponents(parameters.headSize);\n const vectorizedHeadSize = parameters.headSize / components;\n const TILE_SIZE = 12;\n const dispatch = {\n x: Math.ceil(totalSequenceLength / TILE_SIZE),\n y: Math.ceil(parameters.sequenceLength / TILE_SIZE),\n z: parameters.batchSize * parameters.numHeads\n };\n const programUniforms = [\n { type: 12 /* uint32 */, data: parameters.sequenceLength },\n { type: 12 /* uint32 */, data: vectorizedHeadSize },\n { type: 12 /* uint32 */, data: totalSequenceLength },\n { type: 12 /* uint32 */, data: parameters.numHeads },\n { type: 1 /* float */, data: alpha }\n ];\n const inputDependencies = ["type", "type"];\n if (relativePositionBias) {\n inputDependencies.push("rank");\n programUniforms.push(...createTensorShapeVariables(relativePositionBias.dims));\n }\n const getShaderSource = (shaderHelper) => {\n const qInput = inputVariable("q", q.dataType, q.dims, components);\n const kInput = inputVariable("key", key.dataType, key.dims, components);\n const inputVars = [qInput, kInput];\n const relativePositionBiasInput = relativePositionBias ? inputVariable("relative_position_bias", relativePositionBias.dataType, relativePositionBias.dims.length) : void 0;\n if (relativePositionBiasInput) {\n inputVars.push(relativePositionBiasInput);\n }\n const output = outputVariable("output", q.dataType, probsShape);\n const f32Type = tensorTypeToWsglValueType(1 /* float */, components);\n const uniforms = [\n { name: "M", type: "u32" },\n { name: "K", type: "u32" },\n { name: "N", type: "u32" },\n { name: "num_heads", type: "u32" },\n { name: "alpha", type: "f32" }\n ];\n return `\n const TILE_SIZE = ${TILE_SIZE}u;\n\n var tileQ: array<${qInput.type.storage}, ${TILE_SIZE * TILE_SIZE}>;\n var tileK: array<${qInput.type.storage}, ${TILE_SIZE * TILE_SIZE}>;\n ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVars, output)}\n ${shaderHelper.mainStart([\n TILE_SIZE,\n TILE_SIZE,\n 1\n ])}\n // x holds the N and y holds the M\n let headIdx = workgroup_id.z;\n let m = workgroup_id.y * TILE_SIZE;\n let n = workgroup_id.x * TILE_SIZE;\n let qOffset = uniforms.M * uniforms.K * headIdx + m * uniforms.K;\n let kOffset = uniforms.N * uniforms.K * headIdx + n * uniforms.K;\n\n var value = ${f32Type}(0);\n for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) {\n if (global_id.y < uniforms.M && w + local_id.x < uniforms.K) {\n tileQ[TILE_SIZE * local_id.y + local_id.x] = q[qOffset + local_id.y * uniforms.K + w + local_id.x];\n }\n if (n + local_id.y < uniforms.N && w + local_id.x < uniforms.K) {\n tileK[TILE_SIZE * local_id.y + local_id.x] = key[kOffset + local_id.y * uniforms.K + w + local_id.x];\n }\n workgroupBarrier();\n\n for (var k: u32 = 0u; k < TILE_SIZE && w+k < uniforms.K; k++) {\n value += ${f32Type}(tileQ[TILE_SIZE * local_id.y + k] * tileK[TILE_SIZE * local_id.x + k]);\n }\n\n workgroupBarrier();\n }\n\n let headOffset = headIdx * uniforms.M * uniforms.N;\n if (global_id.y < uniforms.M && global_id.x < uniforms.N) {\n let outputIdx = headOffset + global_id.y * uniforms.N + global_id.x;\n var sum: f32 = ${(() => {\n switch (components) {\n case 1:\n return "value";\n case 2:\n return "value.x + value.y";\n case 4:\n return "value.x + value.y + value.z + value.w";\n default:\n throw new Error(`Unsupported components: ${components}`);\n }\n })()};\n\n ${(() => {\n if (relativePositionBiasInput) {\n return `\n let batch = workgroup_id.z / uniforms.num_heads;\n let head = workgroup_id.z % uniforms.num_heads;\n var indices = ${relativePositionBiasInput.type.indices}(batch, head, global_id.y, global_id.x);\n output[outputIdx] = ${output.type.value}(sum * uniforms.alpha) + ${relativePositionBiasInput.getByIndices("indices")};`;\n }\n return `output[outputIdx] = ${output.type.value} (sum * uniforms.alpha);`;\n })()}\n }\n }`;\n };\n return {\n name: "AttentionProbs",\n shaderCache: { hint: `${components}`, inputDependencies },\n getRunData: () => ({\n outputs: [{ dims: probsShape, dataType: q.dataType, gpuDataType: 0 /* default */ }],\n dispatchGroup: dispatch,\n programUniforms\n }),\n getShaderSource\n };\n };\n createVxAttentionScoreProgramInfo = (_context, probs, v, params, pastSequenceLength) => {\n const totalSequenceLength = pastSequenceLength + params.kvSequenceLength;\n const outputShape = [params.batchSize, params.sequenceLength, params.vHiddenSize];\n const TILE_SIZE = 12;\n const dispatch = {\n x: Math.ceil(params.vHeadSize / TILE_SIZE),\n y: Math.ceil(params.sequenceLength / TILE_SIZE),\n z: params.batchSize * params.numHeads\n };\n const programUniforms = [\n { type: 12 /* uint32 */, data: params.sequenceLength },\n { type: 12 /* uint32 */, data: totalSequenceLength },\n { type: 12 /* uint32 */, data: params.vHeadSize },\n { type: 12 /* uint32 */, data: params.numHeads },\n { type: 12 /* uint32 */, data: params.vHiddenSize }\n ];\n const inputDependencies = ["type", "type"];\n const getShaderSource = (shaderHelper) => {\n const probsHelper = inputVariable("probs", probs.dataType, probs.dims);\n const vHelper = inputVariable("v", v.dataType, v.dims);\n const output = outputVariable("output", probs.dataType, outputShape);\n const uniforms = [\n { name: "M", type: "u32" },\n { name: "K", type: "u32" },\n { name: "N", type: "u32" },\n { name: "num_heads", type: "u32" },\n { name: "v_hidden_size", type: "u32" }\n ];\n return `\n const TILE_SIZE = ${TILE_SIZE}u;\n var tileQ: array<${probsHelper.type.value}, ${TILE_SIZE * TILE_SIZE}>;\n var tileK: array<${probsHelper.type.value}, ${TILE_SIZE * TILE_SIZE}>;\n ${shaderHelper.registerUniforms(uniforms).declareVariables(probsHelper, vHelper, output)}\n ${shaderHelper.mainStart([\n TILE_SIZE,\n TILE_SIZE,\n 1\n ])}\n let headIdx = workgroup_id.z;\n let m = global_id.y;\n let n = global_id.x;\n\n let offsetA = headIdx * (uniforms.M * uniforms.K) + m * uniforms.K;\n let offsetB = headIdx * (uniforms.N * uniforms.K) + n;\n\n var value = ${probsHelper.type.storage}(0);\n for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) {\n if (m < uniforms.M && w + local_id.x < uniforms.K) {\n tileQ[TILE_SIZE * local_id.y + local_id.x] = probs[offsetA + w + local_id.x];\n }\n if (n < uniforms.N && w + local_id.y < uniforms.K) {\n tileK[TILE_SIZE * local_id.y + local_id.x] = v[offsetB + (w + local_id.y) * uniforms.N];\n }\n workgroupBarrier();\n for (var k: u32 = 0u; k < TILE_SIZE && w+k < uniforms.K; k++) {\n value += tileQ[TILE_SIZE * local_id.y + k] * tileK[TILE_SIZE * k + local_id.x];\n }\n workgroupBarrier();\n }\n\n // we need to transpose output from BNSH_v to BSND_v\n let batchIdx = workgroup_id.z / uniforms.num_heads;\n let currentBatchHeadNumber = workgroup_id.z % uniforms.num_heads;\n if (m < uniforms.M && n < uniforms.N) {\n let outputIdx = batchIdx * uniforms.M * uniforms.v_hidden_size + m * uniforms.v_hidden_size\n + currentBatchHeadNumber * uniforms.N + n;\n output[outputIdx] = value;\n }\n }`;\n };\n return {\n name: "AttentionScore",\n shaderCache: { inputDependencies },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: probs.dataType, gpuDataType: 0 /* default */ }],\n dispatchGroup: dispatch,\n programUniforms\n }),\n getShaderSource\n };\n };\n applyAttention = (context, q, k, v, _maskIndex, _past, pastKey, pastValue, relativePositionBias, parameters, attributes) => {\n const outputPresentKey = context.outputCount > 1;\n const outputPresentValue = context.outputCount > 2;\n const pastSequenceLength = outputPresentKey && outputPresentValue ? parameters.pastSequenceLength : 0;\n const totalSequenceLength = pastSequenceLength + parameters.kvSequenceLength;\n const presentKeyShape = [parameters.batchSize, parameters.numHeads, totalSequenceLength, parameters.headSize];\n const concatKeyInputs = pastKey ? [pastKey, k] : [k];\n const key = outputPresentKey ? context.compute(\n createConcatProgramInfo(concatKeyInputs, 2, presentKeyShape, k.dataType),\n { inputs: concatKeyInputs, outputs: [1] }\n )[0] : k;\n const presentValueShape = [parameters.batchSize, parameters.numHeads, totalSequenceLength, parameters.headSize];\n const concatValueInputs = pastValue ? [pastValue, v] : [v];\n const value = outputPresentValue ? context.compute(\n createConcatProgramInfo(concatValueInputs, 2, presentValueShape, v.dataType),\n { inputs: concatValueInputs, outputs: [2] }\n )[0] : v;\n const inputsK = [q, key];\n if (relativePositionBias) {\n inputsK.push(relativePositionBias);\n }\n const probs = context.compute(\n createAttentionProbsProgramInfo(\n context,\n q,\n key,\n relativePositionBias,\n parameters,\n attributes,\n pastSequenceLength\n ),\n { inputs: inputsK, outputs: [-1] }\n )[0];\n context.compute(\n createInPlaceSoftmaxProgramInfo(\n context,\n probs,\n parameters.batchSize * parameters.numHeads * parameters.sequenceLength,\n totalSequenceLength\n ),\n { inputs: [probs], outputs: [] }\n );\n const inputsV = [probs, value];\n context.compute(\n createVxAttentionScoreProgramInfo(context, probs, value, parameters, pastSequenceLength),\n { inputs: inputsV, outputs: [0] }\n );\n };\n prepare = (context, parameters) => {\n const outputShape = [\n parameters.batchSize,\n parameters.numHeads,\n parameters.sequenceLength,\n parameters.headSize\n ];\n const M = parameters.sequenceLength;\n const K = parameters.inputHiddenSize;\n const N = parameters.headSize;\n const TILE_SIZE = 12;\n const dispatch = {\n x: Math.ceil(parameters.headSize / TILE_SIZE),\n y: Math.ceil(parameters.sequenceLength / TILE_SIZE),\n z: parameters.batchSize * parameters.numHeads\n };\n const inputs = [context.inputs[0], context.inputs[1], context.inputs[2]];\n const programUniforms = [\n { type: 12 /* uint32 */, data: M },\n { type: 12 /* uint32 */, data: K },\n { type: 12 /* uint32 */, data: N },\n { type: 12 /* uint32 */, data: parameters.numHeads },\n { type: 12 /* uint32 */, data: parameters.headSize },\n { type: 12 /* uint32 */, data: parameters.hiddenSize },\n { type: 12 /* uint32 */, data: parameters.hiddenSize + parameters.hiddenSize + parameters.vHiddenSize }\n ];\n const getShaderSource = (shaderHelper) => {\n const outputQ = outputVariable("output_q", inputs[0].dataType, outputShape);\n const outputK = outputVariable("output_k", inputs[0].dataType, outputShape);\n const outputV = outputVariable("output_v", inputs[0].dataType, outputShape);\n const input = inputVariable("input", inputs[0].dataType, inputs[0].dims);\n const weight = inputVariable("weight", inputs[1].dataType, inputs[1].dims);\n const bias = inputVariable("bias", inputs[2].dataType, inputs[2].dims);\n const dataType = input.type.storage;\n const uniforms = [\n { name: "M", type: "u32" },\n { name: "K", type: "u32" },\n { name: "N", type: "u32" },\n { name: "num_heads", type: "u32" },\n { name: "head_size", type: "u32" },\n { name: "hidden_size", type: "u32" },\n { name: "ldb", type: "u32" }\n ];\n return `\n const TILE_SIZE = ${TILE_SIZE}u;\n var tileInput: array<${dataType}, ${TILE_SIZE * TILE_SIZE}>;\n var tileWeightQ: array<${dataType}, ${TILE_SIZE * TILE_SIZE}>;\n var tileWeightK: array<${dataType}, ${TILE_SIZE * TILE_SIZE}>;\n var tileWeightV: array<${dataType}, ${TILE_SIZE * TILE_SIZE}>;\n ${shaderHelper.registerUniforms(uniforms).declareVariables(input, weight, bias, outputQ, outputK, outputV)}\n ${shaderHelper.mainStart([\n TILE_SIZE,\n TILE_SIZE,\n 1\n ])}\n let batchIndex = workgroup_id.z / uniforms.num_heads;\n let headNumber = workgroup_id.z % uniforms.num_heads;\n let m = global_id.y;\n let n = global_id.x;\n\n let inputOffset = batchIndex * (uniforms.M * uniforms.K) + m * uniforms.K;\n let biasOffsetQ = headNumber * uniforms.head_size;\n let biasOffsetK = uniforms.hidden_size + biasOffsetQ;\n let biasOffsetV = uniforms.hidden_size + biasOffsetK;\n\n var valueQ = ${dataType}(0);\n var valueK = ${dataType}(0);\n var valueV = ${dataType}(0);\n for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) {\n if (m < uniforms.M && w + local_id.x < uniforms.K) {\n tileInput[TILE_SIZE * local_id.y + local_id.x] = input[inputOffset + w + local_id.x];\n }\n if (n < uniforms.N && w + local_id.y < uniforms.K) {\n let offset = n + (w + local_id.y) * uniforms.ldb;\n tileWeightQ[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetQ + offset];\n tileWeightK[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetK + offset];\n tileWeightV[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetV + offset];\n }\n workgroupBarrier();\n for (var k: u32 = 0u; k ({\n outputs: [\n { dims: outputShape, dataType: context.inputs[0].dataType, gpuDataType: 0 /* default */ },\n { dims: outputShape, dataType: context.inputs[0].dataType, gpuDataType: 0 /* default */ },\n { dims: outputShape, dataType: context.inputs[0].dataType, gpuDataType: 0 /* default */ }\n ],\n dispatchGroup: dispatch,\n programUniforms\n }),\n getShaderSource\n },\n { inputs, outputs: [-1, -1, -1] }\n );\n };\n attention = (context, attributes) => {\n const params = validateAttentionInputs(context.inputs, attributes);\n const [q, k, v] = prepare(context, params);\n return applyAttention(\n context,\n q,\n k,\n v,\n context.inputs[4],\n void 0,\n void 0,\n void 0,\n context.inputs[5],\n params,\n attributes\n );\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/batch-norm.ts\n var validateInputs5, createBatchNormInferenceProgramInfo, parseBatchNormAttributes, batchNorm;\n var init_batch_norm = __esm({\n "web/lib/wasm/jsep/webgpu/ops/batch-norm.ts"() {\n "use strict";\n init_esm();\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs5 = (inputs, attributes) => {\n if (!inputs || inputs.length !== 5) {\n throw new Error("BatchNormalization requires 5 inputs");\n }\n const checkShapeEqual = (actual, expected, message) => {\n const r = expected.length;\n if (r !== actual.length) {\n throw new Error(`${message}: num dimensions != ${r}`);\n }\n expected.forEach((v, i) => {\n if (v !== actual[i]) {\n throw new Error(`${message}: dim[${i}] do not match`);\n }\n });\n };\n if (inputs[0].dims.length > 1) {\n const shape = attributes.format === "NHWC" ? attributes.spatial ? inputs[0].dims.slice(-1) : inputs[0].dims.slice(-1).concat(inputs[0].dims.slice(1, inputs[0].dims.length - 1)) : inputs[0].dims.slice(1, attributes.spatial ? 2 : void 0);\n checkShapeEqual(inputs[1].dims, shape, "Invalid input scale");\n checkShapeEqual(inputs[2].dims, shape, "Invalid input B");\n checkShapeEqual(inputs[3].dims, shape, "Invalid input mean");\n checkShapeEqual(inputs[4].dims, shape, "Invalid input var");\n } else {\n checkShapeEqual(inputs[1].dims, [1], "Invalid input scale");\n checkShapeEqual(inputs[2].dims, [1], "Invalid input B");\n checkShapeEqual(inputs[3].dims, [1], "Invalid input mean");\n checkShapeEqual(inputs[4].dims, [1], "Invalid input var");\n }\n };\n createBatchNormInferenceProgramInfo = (inputs, attributes) => {\n const { epsilon, spatial, format } = attributes;\n const yShape = inputs[0].dims;\n const components = spatial ? getMaxComponents(yShape[yShape.length - 1]) : 1;\n const cComponents = format === "NHWC" && yShape.length > 1 ? components : 1;\n const outputSize = ShapeUtil.size(yShape) / components;\n const useShapesUniforms = spatial;\n const shapeOrRank = useShapesUniforms ? yShape.length : yShape;\n const x = inputVariable("x", inputs[0].dataType, inputs[0].dims, components);\n const scale = inputVariable("scale", inputs[1].dataType, inputs[1].dims, cComponents);\n const bias = inputVariable("bias", inputs[2].dataType, inputs[2].dims, cComponents);\n const inputMean = inputVariable("inputMean", inputs[3].dataType, inputs[3].dims, cComponents);\n const inputVar = inputVariable("inputVar", inputs[4].dataType, inputs[4].dims, cComponents);\n const y = outputVariable("y", inputs[0].dataType, shapeOrRank, components);\n const calcCOffset = () => {\n let cOffset = "";\n if (spatial) {\n cOffset = `let cOffset = ${yShape.length === 1 ? "0u" : format === "NHWC" ? `outputIndices[${yShape.length - 1}] / ${components}` : "outputIndices[1]"};`;\n } else {\n if (format === "NCHW") {\n cOffset = `\n ${y.indicesSet("outputIndices", "0", "0")}\n let cOffset = ${y.indicesToOffset("outputIndices")};`;\n } else {\n cOffset = `var cIndices = ${scale.type.indices}(0);\n cIndices[0] = outputIndices[${yShape.length - 1}];`;\n for (let i = 1; i < scale.rank; i++) {\n cOffset += `cIndices[${i}] = outputIndices[${i}];`;\n }\n cOffset += `let cOffset = ${scale.indicesToOffset("cIndices")};`;\n }\n }\n return cOffset;\n };\n const getInferenceModeShaderSource = (helper) => `\n const epsilon = ${epsilon};\n ${helper.registerUniform("outputSize", "u32").declareVariables(x, scale, bias, inputMean, inputVar, y)}\n ${helper.mainStart()}\n ${helper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}\n var outputIndices = ${y.offsetToIndices(`global_idx * ${components}`)};\n ${calcCOffset()}\n let scale = ${scale.getByOffset("cOffset")};\n let bias = ${bias.getByOffset("cOffset")};\n let inputMean = ${inputMean.getByOffset("cOffset")};\n let inputVar = ${inputVar.getByOffset("cOffset")};\n let x = ${x.getByOffset("global_idx")};\n let value = (x - inputMean) * inverseSqrt(inputVar + epsilon) * scale + bias;\n ${y.setByOffset("global_idx", "value")}\n }`;\n return {\n name: "BatchNormalization",\n shaderCache: {\n hint: `${attributes.epsilon}_${attributes.format}_${spatial}_${components}`,\n inputDependencies: useShapesUniforms ? ["rank", "type", "type", "type", "type"] : void 0\n },\n getShaderSource: getInferenceModeShaderSource,\n getRunData: () => ({\n outputs: [{ dims: inputs[0].dims, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms: useShapesUniforms ? [\n { type: 12 /* uint32 */, data: outputSize },\n ...createTensorShapeVariables(yShape)\n ] : [\n { type: 12 /* uint32 */, data: outputSize }\n ]\n })\n };\n };\n parseBatchNormAttributes = (attributes) => createAttributeWithCacheKey(attributes);\n batchNorm = (context, attributes) => {\n const { inputs, outputCount } = context;\n const updatedAttributes = parseBatchNormAttributes({ ...attributes, outputCount });\n if (env2.webgpu.validateInputContent) {\n validateInputs5(inputs, updatedAttributes);\n }\n if (attributes.trainingMode) {\n throw new Error("BatchNormalization trainingMode is not supported yet.");\n } else {\n context.compute(createBatchNormInferenceProgramInfo(inputs, updatedAttributes));\n }\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/bias-add.ts\n var validateInputs6, createBiasAddProgramInfo, biasAdd;\n var init_bias_add = __esm({\n "web/lib/wasm/jsep/webgpu/ops/bias-add.ts"() {\n "use strict";\n init_util();\n init_common();\n validateInputs6 = (inputs) => {\n if (inputs[0].dims.length !== 3) {\n throw new Error("input should have 3 dimensions");\n }\n if (![320, 640, 1280].includes(inputs[0].dims[2])) {\n throw new Error("number of channels should be 320, 640 or 1280");\n }\n if (inputs[1].dims.length !== 1) {\n throw new Error("bias is expected to have 1 dimensions");\n }\n if (inputs[0].dims[2] !== inputs[1].dims[0]) {\n throw new Error("last dimension of input and bias are not the same");\n }\n };\n createBiasAddProgramInfo = (inputs) => {\n const outputShape = inputs[0].dims;\n const channels = inputs[0].dims[2];\n const outputSize = ShapeUtil.size(outputShape) / 4;\n const dataType = inputs[0].dataType;\n const input = inputVariable("input", dataType, outputShape, 4);\n const bias = inputVariable("bias", dataType, [channels], 4);\n const residual = inputVariable("residual", dataType, outputShape, 4);\n const output = outputVariable("output", dataType, outputShape, 4);\n const getShaderSource = (shaderHelper) => `\n const channels = ${channels}u / 4;\n ${shaderHelper.declareVariables(input, bias, residual, output)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes(outputSize)}\n let value = ${input.getByOffset("global_idx")}\n + ${bias.getByOffset("global_idx % channels")} + ${residual.getByOffset("global_idx")};\n ${output.setByOffset("global_idx", "value")}\n }`;\n return {\n name: "BiasAdd",\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) }\n }),\n getShaderSource\n };\n };\n biasAdd = (context) => {\n validateInputs6(context.inputs);\n context.compute(createBiasAddProgramInfo(context.inputs));\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/unary-op.ts\n var createElementwiseProgramShader, createElementwiseProgramInfo, abs, acos, acosh, asin, asinh, atan, atanh, parseCastAttributes, cast, generateClipAttributesFromInputs, clip, ceil, cos, cosh, parseAlphaAttributes, elu, erfImpl, erf, exp, floor, gelu, leakyRelu, not, neg, reciprocal, relu, sigmoid, parseHardSigmoidAttributes, hardSigmoid, sin, sinh, sqrt, tan, tanhExpression, tanh, fastGeluImpl, fastGeluExpression, fastGelu, thresholdedRelu, log;\n var init_unary_op = __esm({\n "web/lib/wasm/jsep/webgpu/ops/unary-op.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n createElementwiseProgramShader = (shaderHelper, datasize, inputDataType, outputDataType, funcCall, additionalImplementation) => {\n const vecSize = Math.ceil(datasize / 4);\n let expression = "";\n if (typeof funcCall === "string") {\n expression = `${funcCall}(a)`;\n } else {\n expression = funcCall("a");\n }\n const input = inputVariable("inputData", inputDataType, [vecSize], 4);\n const output = outputVariable("outputData", outputDataType, [vecSize], 4);\n return `\n ${shaderHelper.registerUniform("vec_size", "u32").declareVariables(input, output)}\n\n ${additionalImplementation ?? ""}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}\n\n let a = ${input.getByOffset("global_idx")};\n ${output.setByOffset("global_idx", expression)}\n }`;\n };\n createElementwiseProgramInfo = (input, name, funcCall, additionalImplementation, cacheKey, outputDataType = input.dataType) => ({\n name,\n shaderCache: { hint: cacheKey, inputDependencies: ["type"] },\n getShaderSource: (shaderHelper) => createElementwiseProgramShader(\n shaderHelper,\n ShapeUtil.size(input.dims),\n input.dataType,\n outputDataType,\n funcCall,\n additionalImplementation\n ),\n getRunData: (inputTensors) => ({\n outputs: [{ dims: input.dims, dataType: outputDataType }],\n dispatchGroup: { x: Math.ceil(\n ShapeUtil.size(inputTensors[0].dims) / 64 / 4\n /* vec size */\n ) },\n programUniforms: [\n { type: 12 /* uint32 */, data: Math.ceil(ShapeUtil.size(input.dims) / 4) }\n ]\n })\n });\n abs = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Abs", "abs"));\n };\n acos = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Acos", "acos"));\n };\n acosh = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Acosh", "acosh"));\n };\n asin = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Asin", "asin"));\n };\n asinh = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Asinh", "asinh"));\n };\n atan = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Atan", "atan"));\n };\n atanh = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Atanh", "atanh"));\n };\n parseCastAttributes = (attributes) => createAttributeWithCacheKey(attributes);\n cast = (context, attributes) => {\n let func;\n switch (attributes.to) {\n case 10 /* float16 */:\n func = "vec4";\n break;\n case 1 /* float */:\n func = "vec4";\n break;\n case 12 /* uint32 */:\n func = "vec4";\n break;\n case 6 /* int32 */:\n func = "vec4";\n break;\n case 9 /* bool */:\n func = "vec4";\n break;\n default:\n throw new RangeError(`not supported type (specified in attribute \'to\' from \'Cast\' operator): ${attributes.to}`);\n }\n context.compute(\n createElementwiseProgramInfo(context.inputs[0], "Cast", func, void 0, attributes.cacheKey, attributes.to)\n );\n };\n generateClipAttributesFromInputs = (inputs) => {\n const min = inputs.length >= 2 && inputs[1].data !== 0 ? inputs[1].getFloat32Array()[0] : MIN_CLIP;\n const max = inputs.length >= 3 && inputs[2].data !== 0 ? inputs[2].getFloat32Array()[0] : MAX_CLIP;\n return createAttributeWithCacheKey({ min, max });\n };\n clip = (context, clipAttributes) => {\n const attributes = context.inputs.length === 1 ? clipAttributes : generateClipAttributesFromInputs(context.inputs);\n const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType);\n context.compute(\n createElementwiseProgramInfo(\n context.inputs[0],\n "Clip",\n (a) => `clamp(${a}, clip_min_, clip_max_)`,\n `\n const clip_min_: vec4<${dataType}> = vec4(${dataType}(${attributes.min}));\n const clip_max_: vec4<${dataType}> = vec4(${dataType}(${attributes.max}));\n`,\n attributes.cacheKey\n ),\n { inputs: [0] }\n );\n };\n ceil = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Ceil", "ceil"));\n };\n cos = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Cos", "cos"));\n };\n cosh = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Cosh", "cosh"));\n };\n parseAlphaAttributes = (attributes) => createAttributeWithCacheKey(attributes);\n elu = (context, attributes) => {\n const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType);\n context.compute(createElementwiseProgramInfo(\n context.inputs[0],\n "Elu",\n (a) => `elu_vf32(${a})`,\n `\n const elu_alpha_ = ${dataType}(${attributes.alpha});\n\n fn elu_f32(a: ${dataType}) -> ${dataType} {\n return select((exp(a) - 1.0) * elu_alpha_, a, a >= 0.0);\n }\n\n fn elu_vf32(v: vec4<${dataType}>) -> vec4<${dataType}> {\n return vec4(elu_f32(v.x), elu_f32(v.y), elu_f32(v.z), elu_f32(v.w));\n }`,\n attributes.cacheKey\n ));\n };\n erfImpl = (varType = "f32") => `\nconst r0: ${varType} = 0.3275911;\nconst r1: ${varType} = 0.254829592;\nconst r2: ${varType} = -0.284496736;\nconst r3: ${varType} = 1.421413741;\nconst r4: ${varType} = -1.453152027;\nconst r5: ${varType} = 1.061405429;\n\nfn erf_vf32(v: vec4<${varType}>) -> vec4<${varType}> {\n let absv = abs(v);\n let x = 1.0 / (1.0 + r0 * absv);\n return sign(v) * (1.0 - ((((r5 * x + r4) * x + r3) * x + r2) * x + r1) * x * exp(-absv * absv));\n}`;\n erf = (context) => {\n const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType);\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Erf", (a) => `erf_vf32(${a})`, erfImpl(dataType)));\n };\n exp = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Exp", "exp"));\n };\n floor = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Floor", "floor"));\n };\n gelu = (context) => {\n const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType);\n context.compute(createElementwiseProgramInfo(\n context.inputs[0],\n "Gelu",\n (a) => `0.5 * ${a} * (1.0 + erf_vf32(${a} * 0.7071067811865475))`,\n erfImpl(dataType)\n ));\n };\n leakyRelu = (context, attributes) => {\n const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType);\n context.compute(createElementwiseProgramInfo(\n context.inputs[0],\n "LeakyRelu",\n (a) => `select(leaky_relu_alpha_ * ${a}, ${a}, ${a} >= vec4<${dataType}>(0.0))`,\n `const leaky_relu_alpha_ = ${dataType}(${attributes.alpha});`,\n attributes.cacheKey\n ));\n };\n not = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Not", (a) => `!${a}`));\n };\n neg = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Neg", (a) => `-${a}`));\n };\n reciprocal = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Reciprocal", (a) => `1.0/${a}`));\n };\n relu = (context) => {\n const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType);\n context.compute(createElementwiseProgramInfo(\n context.inputs[0],\n "Relu",\n (a) => `select(vec4<${dataType}>(0.0), ${a}, ${a} > vec4<${dataType}>(0.0))`\n ));\n };\n sigmoid = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Sigmoid", (a) => `(1.0 / (1.0 + exp(-${a})))`));\n };\n parseHardSigmoidAttributes = (attributes) => createAttributeWithCacheKey(attributes);\n hardSigmoid = (context, attributes) => {\n const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType);\n context.compute(createElementwiseProgramInfo(\n context.inputs[0],\n "HardSigmoid",\n (a) => `max(vec4<${dataType}>(0.0), min(vec4<${dataType}>(1.0), ${attributes.alpha} * ${a} + vec4<${dataType}>(${attributes.beta})))`,\n void 0,\n attributes.cacheKey\n ));\n };\n sin = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Sin", "sin"));\n };\n sinh = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Sinh", "sinh"));\n };\n sqrt = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Sqrt", "sqrt"));\n };\n tan = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Tan", "tan"));\n };\n tanhExpression = (a) => `sign(${a}) * (1 - exp(-2 * abs(${a}))) / (1 + exp(-2 * abs(${a})))`;\n tanh = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Tanh", tanhExpression));\n };\n fastGeluImpl = (varType = "f32") => `\nconst fast_gelu_a: ${varType} = 0.5;\nconst fast_gelu_b: ${varType} = 0.7978845608028654;\nconst fast_gelu_c: ${varType} = 0.035677408136300125;\n\nfn tanh_v(v: vec4<${varType}>) -> vec4<${varType}> {\n return ${tanhExpression("v")};\n}\n`;\n fastGeluExpression = (x) => `(fast_gelu_a + fast_gelu_a * tanh_v(${x} * (fast_gelu_c * ${x} * ${x} + fast_gelu_b))) * ${x}`;\n fastGelu = (context) => {\n const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType);\n context.compute(createElementwiseProgramInfo(\n context.inputs[0],\n "FastGelu",\n fastGeluExpression,\n fastGeluImpl(dataType),\n void 0,\n context.inputs[0].dataType\n ));\n };\n thresholdedRelu = (context, attributes) => {\n const dataType = tensorTypeToWsglValueType(context.inputs[0].dataType);\n context.compute(createElementwiseProgramInfo(\n context.inputs[0],\n "ThresholdedRelu",\n (a) => `select(vec4<${dataType}>(0.0), ${a}, ${a} > thresholded_relu_alpha_)`,\n `const thresholded_relu_alpha_ = vec4<${dataType}>(${attributes.alpha});`,\n attributes.cacheKey\n ));\n return 0;\n };\n log = (context) => {\n context.compute(createElementwiseProgramInfo(context.inputs[0], "Log", "log"));\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/bias-split-gelu.ts\n var validateInputs7, createBiasSplitGeluProgramInfo, biasSplitGelu;\n var init_bias_split_gelu = __esm({\n "web/lib/wasm/jsep/webgpu/ops/bias-split-gelu.ts"() {\n "use strict";\n init_util();\n init_common();\n init_unary_op();\n validateInputs7 = (inputs) => {\n if (inputs[0].dims.length !== 3) {\n throw new Error("input should have 3 dimensions");\n }\n if (![2560, 5120, 10240].includes(inputs[0].dims[2])) {\n throw new Error("hidden state should be 2560, 5120 or 10240");\n }\n if (inputs[1].dims.length !== 1) {\n throw new Error("bias is expected to have 1 dimensions");\n }\n if (inputs[0].dims[2] !== inputs[1].dims[0]) {\n throw new Error("last dimension of input and bias are not the same");\n }\n };\n createBiasSplitGeluProgramInfo = (inputs) => {\n const outputShape = inputs[0].dims.slice();\n outputShape[2] = outputShape[2] / 2;\n const input = inputVariable("input", inputs[0].dataType, inputs[0].dims, 4);\n const bias = inputVariable("bias", inputs[0].dataType, [inputs[0].dims[2]], 4);\n const output = outputVariable("output", inputs[0].dataType, outputShape, 4);\n const outputSize = ShapeUtil.size(outputShape) / 4;\n const dataType = tensorTypeToWsglStorageType(inputs[0].dataType);\n const getShaderSource = (shaderHelper) => `\n const M_SQRT2 = sqrt(2.0);\n const halfChannels = ${inputs[0].dims[2] / 4 / 2}u;\n\n ${shaderHelper.declareVariables(input, bias, output)}\n\n ${erfImpl(dataType)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes(outputSize)}\n let biasIdx = global_idx % halfChannels;\n let batchIndex = global_idx / halfChannels;\n let inputOffset = biasIdx + batchIndex * halfChannels * 2;\n let valueLeft = input[inputOffset] + bias[biasIdx];\n let valueRight = input[inputOffset + halfChannels] + bias[biasIdx + halfChannels];\n let geluRight = valueRight * 0.5 * (erf_vf32(valueRight / M_SQRT2) + 1);\n\n ${output.setByOffset("global_idx", "valueLeft * geluRight")}\n }`;\n return {\n name: "BiasSplitGelu",\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) }\n }),\n getShaderSource\n };\n };\n biasSplitGelu = (context) => {\n validateInputs7(context.inputs);\n context.compute(createBiasSplitGeluProgramInfo(context.inputs));\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/binary-op.ts\n var createBinaryOpProgramShader, createBinaryOpProgramInfo, runBinaryOp, add, div, equal, mul, pow, sub, greater, less, greaterOrEqual, lessOrEqual;\n var init_binary_op = __esm({\n "web/lib/wasm/jsep/webgpu/ops/binary-op.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n createBinaryOpProgramShader = (shaderHelper, dimsA, dimsB, dimsOutput, vectorize, doBroadcast, sharedDimensionDivisibleBy4, funcCall, typeA, typeB, typeOutput, additionalImplementation) => {\n let expressionScalar;\n let expressionVector;\n if (typeof funcCall === "string") {\n expressionScalar = expressionVector = (a2, b2) => `${funcCall}((${a2}),(${b2}))`;\n } else if (typeof funcCall === "function") {\n expressionScalar = expressionVector = funcCall;\n } else {\n expressionScalar = funcCall.scalar;\n expressionVector = funcCall.vector;\n }\n const output = outputVariable("outputData", typeOutput, dimsOutput.length, 4);\n const a = inputVariable("aData", typeA, dimsA.length, 4);\n const b = inputVariable("bData", typeB, dimsB.length, 4);\n let assignment;\n if (vectorize) {\n if (doBroadcast) {\n const isAOneElement = ShapeUtil.size(dimsA) === 1;\n const isBOneElement = ShapeUtil.size(dimsB) === 1;\n const aLastDimDivisibleBy4 = dimsA.length > 0 && dimsA[dimsA.length - 1] % 4 === 0;\n const bLastDimDivisibleBy4 = dimsB.length > 0 && dimsB[dimsB.length - 1] % 4 === 0;\n if (isAOneElement || isBOneElement) {\n assignment = output.setByOffset(\n "global_idx",\n expressionVector(\n isAOneElement ? `${a.type.value}(${a.getByOffset("0")}.x)` : a.getByOffset("global_idx"),\n isBOneElement ? `${b.type.value}(${b.getByOffset("0")}.x)` : b.getByOffset("global_idx")\n )\n );\n } else {\n assignment = `\n let outputIndices = ${output.offsetToIndices("global_idx * 4u")};\n let offsetA = ${a.broadcastedIndicesToOffset("outputIndices", output)};\n let offsetB = ${b.broadcastedIndicesToOffset("outputIndices", output)};\n ${output.setByOffset(\n "global_idx",\n expressionVector(\n sharedDimensionDivisibleBy4 || aLastDimDivisibleBy4 ? a.getByOffset("offsetA / 4u") : `${a.type.value}(${a.getByOffset("offsetA / 4u")}[offsetA % 4u])`,\n sharedDimensionDivisibleBy4 || bLastDimDivisibleBy4 ? b.getByOffset("offsetB / 4u") : `${b.type.value}(${b.getByOffset("offsetB / 4u")}[offsetB % 4u])`\n )\n )}\n `;\n }\n } else {\n assignment = output.setByOffset(\n "global_idx",\n expressionVector(a.getByOffset("global_idx"), b.getByOffset("global_idx"))\n );\n }\n } else {\n if (!doBroadcast) {\n throw new Error("no necessary to use scalar implementation for element-wise binary op implementation.");\n }\n const singleAssignment = (resStr, x, typeCast = "") => {\n const expressionA = `aData[indexA${x}][componentA${x}]`;\n const expressionB = `bData[indexB${x}][componentB${x}]`;\n return `\n let outputIndices${x} = ${output.offsetToIndices(`global_idx * 4u + ${x}u`)};\n let offsetA${x} = ${a.broadcastedIndicesToOffset(`outputIndices${x}`, output)};\n let offsetB${x} = ${b.broadcastedIndicesToOffset(`outputIndices${x}`, output)};\n let indexA${x} = offsetA${x} / 4u;\n let indexB${x} = offsetB${x} / 4u;\n let componentA${x} = offsetA${x} % 4u;\n let componentB${x} = offsetB${x} % 4u;\n ${resStr}[${x}] = ${typeCast}(${expressionScalar(expressionA, expressionB)});\n `;\n };\n if (typeOutput === 9 /* bool */) {\n assignment = `\n var data = vec4(0);\n ${singleAssignment("data", 0, "u32")}\n ${singleAssignment("data", 1, "u32")}\n ${singleAssignment("data", 2, "u32")}\n ${singleAssignment("data", 3, "u32")}\n outputData[global_idx] = dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(data));`;\n } else {\n assignment = `\n ${singleAssignment("outputData[global_idx]", 0)}\n ${singleAssignment("outputData[global_idx]", 1)}\n ${singleAssignment("outputData[global_idx]", 2)}\n ${singleAssignment("outputData[global_idx]", 3)}\n `;\n }\n }\n return `\n ${shaderHelper.registerUniform("vec_size", "u32").declareVariables(a, b, output)}\n\n ${additionalImplementation ?? ""}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}\n ${assignment}\n }`;\n };\n createBinaryOpProgramInfo = (name, cacheKey, a, b, funcCall, additionalImplementation, outputDataType = a.dataType) => {\n const isBroadcast = !ShapeUtil.areEqual(a.dims, b.dims);\n let outputShape = a.dims;\n let outputSize = ShapeUtil.size(a.dims);\n let vectorize = false;\n let sharedDimensionDivisibleBy4 = false;\n const cacheKeyAux = [isBroadcast];\n if (isBroadcast) {\n const calculatedShape = BroadcastUtil.calcShape(a.dims, b.dims, false);\n if (!calculatedShape) {\n throw new Error("Can\'t perform binary op on the given tensors");\n }\n outputShape = calculatedShape;\n outputSize = ShapeUtil.size(outputShape);\n const isAOneElement = ShapeUtil.size(a.dims) === 1;\n const isBOneElement = ShapeUtil.size(b.dims) === 1;\n const aLastDimDivisibleBy4 = a.dims.length > 0 && a.dims[a.dims.length - 1] % 4 === 0;\n const bLastDimDivisibleBy4 = b.dims.length > 0 && b.dims[b.dims.length - 1] % 4 === 0;\n cacheKeyAux.push(isAOneElement);\n cacheKeyAux.push(isBOneElement);\n cacheKeyAux.push(aLastDimDivisibleBy4);\n cacheKeyAux.push(bLastDimDivisibleBy4);\n let sharedDimension = 1;\n for (let i = 1; i < outputShape.length; i++) {\n const dimA = a.dims[a.dims.length - i] ?? 1;\n const dimB = b.dims[b.dims.length - i] ?? 1;\n if (dimA === dimB) {\n sharedDimension *= dimA;\n } else {\n break;\n }\n }\n if (sharedDimension % 4 === 0) {\n sharedDimensionDivisibleBy4 = true;\n vectorize = true;\n } else if (isAOneElement || isBOneElement || aLastDimDivisibleBy4 || bLastDimDivisibleBy4) {\n vectorize = true;\n }\n } else {\n vectorize = true;\n }\n cacheKeyAux.push(vectorize);\n return {\n name,\n shaderCache: {\n hint: cacheKey + cacheKeyAux.map((x) => x.toString()).join("_"),\n inputDependencies: ["rank", "rank"]\n },\n getShaderSource: (shaderHelper) => createBinaryOpProgramShader(\n shaderHelper,\n a.dims,\n b.dims,\n outputShape,\n vectorize,\n isBroadcast,\n sharedDimensionDivisibleBy4,\n funcCall,\n a.dataType,\n b.dataType,\n outputDataType,\n additionalImplementation\n ),\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: outputDataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64 / 4\n /* component size */\n ) },\n programUniforms: [\n { type: 12 /* uint32 */, data: Math.ceil(ShapeUtil.size(outputShape) / 4) },\n ...createTensorShapeVariables(a.dims, b.dims, outputShape)\n ]\n })\n };\n };\n runBinaryOp = (context, name, funcCall, additionalImplementation, cacheKey, outputDataType) => {\n context.compute(createBinaryOpProgramInfo(\n name,\n cacheKey ?? "",\n context.inputs[0],\n context.inputs[1],\n funcCall,\n additionalImplementation,\n outputDataType\n ));\n };\n add = (context) => {\n runBinaryOp(context, "Add", (a, b) => `${a}+${b}`);\n };\n div = (context) => {\n runBinaryOp(context, "Div", (a, b) => `${a}/${b}`);\n };\n equal = (context) => {\n runBinaryOp(\n context,\n "Equal",\n { scalar: (a, b) => `u32(${a}==${b})`, vector: (a, b) => `vec4(${a}==${b})` },\n void 0,\n void 0,\n 9 /* bool */\n );\n };\n mul = (context) => {\n runBinaryOp(context, "Mul", (a, b) => `${a}*${b}`);\n };\n pow = (context) => {\n const type = inputVariable("input", context.inputs[0].dataType, context.inputs[0].dims).type.value;\n const roundStr = type === "i32" ? "round" : "";\n runBinaryOp(\n context,\n "Pow",\n { scalar: (a, b) => `pow_custom(${a},${b})`, vector: (a, b) => `pow_vector_custom(${a},${b})` },\n `\n fn pow_custom(a : ${type}, b : ${type}) -> ${type} {\n if (b == ${type}(0.0)) {\n return ${type}(1.0);\n } else if (a < ${type}(0.0) && f32(b) != floor(f32(b))) {\n return ${type}(pow(f32(a), f32(b))); // NaN\n }\n return select(sign(a), ${type}(1.0), round(f32(abs(b) % ${type}(2.0))) != 1.0) * ${type}(${roundStr}(pow(f32(abs(a)), f32(b))));\n }\n fn pow_vector_custom(a : vec4<${type}>, b : vec4<${type}>) -> vec4<${type}> {\n // TODO: implement vectorized pow\n return vec4<${type}>(pow_custom(a.x, b.x), pow_custom(a.y, b.y), pow_custom(a.z, b.z), pow_custom(a.w, b.w));\n }\n `\n );\n };\n sub = (context) => {\n runBinaryOp(context, "Sub", (a, b) => `${a}-${b}`);\n };\n greater = (context) => {\n runBinaryOp(\n context,\n "Greater",\n { scalar: (a, b) => `u32(${a}>${b})`, vector: (a, b) => `vec4(${a}>${b})` },\n void 0,\n void 0,\n 9 /* bool */\n );\n };\n less = (context) => {\n runBinaryOp(\n context,\n "Less",\n { scalar: (a, b) => `u32(${a}<${b})`, vector: (a, b) => `vec4(${a}<${b})` },\n void 0,\n void 0,\n 9 /* bool */\n );\n };\n greaterOrEqual = (context) => {\n runBinaryOp(\n context,\n "GreaterOrEqual",\n { scalar: (a, b) => `u32(${a}>=${b})`, vector: (a, b) => `vec4(${a}>=${b})` },\n void 0,\n void 0,\n 9 /* bool */\n );\n };\n lessOrEqual = (context) => {\n runBinaryOp(\n context,\n "LessOrEqual",\n { scalar: (a, b) => `u32(${a}<=${b})`, vector: (a, b) => `vec4(${a}<=${b})` },\n void 0,\n void 0,\n 9 /* bool */\n );\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/fuse-utils.ts\n var getActivationSnippet, appendActivationUniformsData, appendActivationUniforms, parseInternalActivationAttributes;\n var init_fuse_utils = __esm({\n "web/lib/wasm/jsep/webgpu/ops/fuse-utils.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n getActivationSnippet = (attributes, valueType, baseType = "f32") => {\n switch (attributes.activation) {\n case "Relu":\n return `value = max(value, ${valueType}(0.0));`;\n case "Sigmoid":\n return `value = (${valueType}(1.0) / (${valueType}(1.0) + exp(-value)));`;\n case "Clip":\n return `value = clamp(value, ${valueType}(${baseType}(uniforms.clip_min)), ${valueType}(${baseType}(uniforms.clip_max)));`;\n case "HardSigmoid":\n return `value = max(${valueType}(0.0), min(${valueType}(1.0), ${baseType}(uniforms.alpha) * value + ${baseType}(uniforms.beta)));`;\n case "LeakyRelu":\n return `value = select(${baseType}(uniforms.alpha) * value, value, value >= ${valueType}(0.0));`;\n case "":\n return "";\n default:\n throw new Error(`Unsupported activation ${attributes.activation}`);\n }\n };\n appendActivationUniformsData = (attributes, programUniform) => {\n if (attributes.activation === "Clip") {\n programUniform.push(\n { type: 1 /* float */, data: attributes.clipMax },\n { type: 1 /* float */, data: attributes.clipMin }\n );\n } else if (attributes.activation === "HardSigmoid") {\n programUniform.push(\n { type: 1 /* float */, data: attributes.alpha },\n { type: 1 /* float */, data: attributes.beta }\n );\n } else if (attributes.activation === "LeakyRelu") {\n programUniform.push({ type: 1 /* float */, data: attributes.alpha });\n }\n };\n appendActivationUniforms = (attributes, uniforms) => {\n if (attributes.activation === "Clip") {\n uniforms.push({ name: "clip_max", type: "f32" }, { name: "clip_min", type: "f32" });\n } else if (attributes.activation === "HardSigmoid") {\n uniforms.push({ name: "alpha", type: "f32" }, { name: "beta", type: "f32" });\n } else if (attributes.activation === "LeakyRelu") {\n uniforms.push({ name: "alpha", type: "f32" });\n }\n };\n parseInternalActivationAttributes = (attributes) => {\n const activation = attributes?.activation || "";\n if (activation === "HardSigmoid") {\n const [alpha, beta] = attributes?.activation_params || [0.2, 0.5];\n return { activation, alpha, beta };\n } else if (activation === "Clip") {\n const [clipMin, clipMax] = attributes?.activation_params || [MIN_CLIP, MAX_CLIP];\n return { activation, clipMax, clipMin };\n } else if (activation === "LeakyRelu") {\n const [alpha] = attributes?.activation_params || [0.01];\n return { activation, alpha };\n }\n return { activation };\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/3rd-party/activation_util.ts\n var typeSnippet, biasSnippet;\n var init_activation_util = __esm({\n "web/lib/wasm/jsep/webgpu/ops/3rd-party/activation_util.ts"() {\n "use strict";\n typeSnippet = (component, dataType) => {\n switch (component) {\n case 1:\n return dataType;\n case 2:\n return `vec2<${dataType}>`;\n case 3:\n return `vec3<${dataType}>`;\n case 4:\n return `vec4<${dataType}>`;\n default:\n throw new Error(`${component}-component is not supported.`);\n }\n };\n biasSnippet = (hasBias) => `\n ${hasBias ? "value = value + getBiasByOutputCoords(coords);" : ""}\n `;\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_util.ts\n var utilFunctions;\n var init_conv_util = __esm({\n "web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_util.ts"() {\n "use strict";\n utilFunctions = (strideStr) => `\nfn getIndexFromCoords4D(coords : vec4, shape : vec4) -> i32 {\n return dot(coords, vec4(\n shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1));\n}\nfn getOutputIndexFromCoords(coords : vec4) -> i32 {\n return dot(coords, vec4(\n i32(${strideStr}.x), i32(${strideStr}.y), i32(${strideStr}.z), 1));\n}\n`;\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/3rd-party/matmul_packed_webgpu.ts\n var writeDataToSubAVec4Snippet, calculateResultSnippet, makeMatMulPackedVec4Source, writeDataToSubASnippet, readDataFromSubASnippet, makeMatMulPackedSource, matMulReadWriteFnSource, createMatmulProgramInfo;\n var init_matmul_packed_webgpu = __esm({\n "web/lib/wasm/jsep/webgpu/ops/3rd-party/matmul_packed_webgpu.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n init_fuse_utils();\n init_activation_util();\n writeDataToSubAVec4Snippet = (transpose2, batchDims) => {\n if (transpose2) {\n return `\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n kStart + inputRow,\n globalRowStart / innerElementSize + inputCol${batchDims ? ", batchIndices" : ""});\n `;\n } else {\n return `\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n globalRow + innerRow,\n kStart / innerElementSize + inputCol${batchDims ? ", batchIndices" : ""});\n `;\n }\n };\n calculateResultSnippet = (transposeA, innerElementSize) => {\n if (transposeA) {\n return `\n let ACached0 = mm_Asub[k * innerElementSize][localRow];\n let ACached1 = mm_Asub[k * innerElementSize + 1][localRow];\n let ACached2 = mm_Asub[k * innerElementSize + 2][localRow];\n ${innerElementSize === 3 ? "" : "let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];"}\n for (var i = 0; i < rowPerThread; i = i + 1) {\n acc[i] = BCached0 * ACached0[i] + acc[i];\n acc[i] = BCached1 * ACached1[i] + acc[i];\n acc[i] = BCached2 * ACached2[i] + acc[i];\n ${innerElementSize === 3 ? "" : "acc[i] = BCached3 * ACached3[i] + acc[i];"}\n }`;\n } else {\n return `\n for (var i = 0; i < rowPerThread; i = i + 1) {\n let ACached = mm_Asub[tileRow + i][k];\n acc[i] = BCached0 * ACached.x + acc[i];\n acc[i] = BCached1 * ACached.y + acc[i];\n acc[i] = BCached2 * ACached.z + acc[i];\n ${innerElementSize === 3 ? "" : "acc[i] = BCached3 * ACached.w + acc[i];"}\n }`;\n }\n };\n makeMatMulPackedVec4Source = (workPerThread, workgroupSize, type = "f32", batchDims, transposeA = false, tileInner = 32, splitK = false, splitedDimInner = 32) => {\n const tileAOuter = workgroupSize[1] * workPerThread[1];\n const tileBOuter = workgroupSize[0] * workPerThread[0];\n const tileAWidth = transposeA ? tileAOuter : tileInner;\n const tileAHight = transposeA ? tileInner : tileAOuter;\n const innerElementSize = tileAWidth / workgroupSize[0];\n const rowPerThreadB = tileInner / workgroupSize[1];\n if (!((transposeA && innerElementSize === 4 && workPerThread[1] === 4 || !transposeA && (innerElementSize === 3 || innerElementSize === 4)) && tileAWidth % workgroupSize[0] === 0 && tileInner % workgroupSize[1] === 0 && workPerThread[0] === 4)) {\n throw new Error(`If transposeA ${transposeA} is true, innerElementSize ${innerElementSize} and workPerThread[1] ${workPerThread[1]} must be 4.\n Otherwise, innerElementSize ${innerElementSize} must be 3 or 4.\n tileAWidth ${tileAWidth} must be divisible by workgroupSize[0]${workgroupSize[0]}. tileInner ${tileInner} must be divisible by workgroupSize[1] ${workgroupSize[1]}. colPerThread ${workPerThread[0]} must be 4.`);\n }\n return `\nvar mm_Asub: array, ${tileAWidth / innerElementSize}>, ${tileAHight}>;\nvar mm_Bsub: array, ${tileBOuter / workPerThread[0]}>, ${tileInner}>;\n\nconst rowPerThread = ${workPerThread[1]};\nconst colPerThread = ${workPerThread[0]};\nconst innerElementSize = ${innerElementSize};\nconst tileInner = ${tileInner};\n\n@compute @workgroup_size(${workgroupSize[0]}, ${workgroupSize[1]}, ${workgroupSize[2]})\nfn main(@builtin(local_invocation_id) localId : vec3,\n @builtin(global_invocation_id) globalId : vec3,\n @builtin(workgroup_id) workgroupId : vec3) {\n let localRow = i32(localId.y);\n let tileRow = localRow * rowPerThread;\n let tileCol = i32(localId.x);\n\n let globalRow =i32(globalId.y) * rowPerThread;\n let globalCol = i32(globalId.x);\n let batch = ${splitK ? "0" : "i32(globalId.z)"};\n ${batchDims ? `let batchIndices = ${batchDims.offsetToIndices("u32(batch)")};` : ""}\n let globalRowStart = i32(workgroupId.y) * ${tileAOuter};\n\n let num_tiles = ${splitK ? `${Math.ceil(splitedDimInner / tileInner)}` : "(uniforms.dim_inner - 1) / tileInner + 1"};\n var kStart = ${splitK ? `i32(globalId.z) * ${splitedDimInner}` : "0"};\n\n var acc: array, rowPerThread>;\n\n // Loop over shared dimension.\n let tileRowB = localRow * ${rowPerThreadB};\n for (var t = 0; t < num_tiles; t = t + 1) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n let inputRow = tileRow + innerRow;\n let inputCol = tileCol;\n ${writeDataToSubAVec4Snippet(transposeA, batchDims)}\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${rowPerThreadB}; innerRow = innerRow + 1) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol${batchDims ? ", batchIndices" : ""});\n }\n kStart = kStart + tileInner;\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < tileInner / innerElementSize; k = k + 1) {\n let BCached0 = mm_Bsub[k * innerElementSize][tileCol];\n let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol];\n let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol];\n ${innerElementSize === 3 ? "" : "let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];"}\n\n ${calculateResultSnippet(transposeA, innerElementSize)}\n }\n\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]);\n }\n}`;\n };\n writeDataToSubASnippet = (transpose2, batchDims) => {\n if (transpose2) {\n return `\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n kStart + inputRow,\n globalRowStart + inputCol${batchDims ? ", batchIndices" : ""});\n `;\n } else {\n return `\n mm_Asub[inputRow][inputCol] = mm_readA(batch,\n globalRowStart + inputRow,\n kStart + inputCol${batchDims ? ", batchIndices" : ""});\n `;\n }\n };\n readDataFromSubASnippet = (transposeA) => transposeA ? "let ACached = mm_Asub[k][tileRow + innerRow];" : "let ACached = mm_Asub[tileRow + innerRow][k];";\n makeMatMulPackedSource = (workPerThread, workgroupSize, type = "f32", batchDims, transposeA = false, tileInner = 32, splitK = false, splitedDimInner = 32, sequentialAccessByThreads = false) => {\n const tileAOuter = workPerThread[1] * workgroupSize[1];\n const tileBOuter = workPerThread[0] * workgroupSize[0];\n const tileAWidth = transposeA ? tileAOuter : tileInner;\n const tileAHight = transposeA ? tileInner : tileAOuter;\n if (!(tileAHight % workgroupSize[1] === 0 && tileAWidth % workgroupSize[0] === 0 && tileInner % workgroupSize[1] === 0)) {\n throw new Error(`tileAHight ${tileAHight} must be divisible by workgroupSize[1]${workgroupSize[1]}, tileAWidth ${tileAWidth} must be divisible by workgroupSize[0]${workgroupSize[0]}, tileInner ${tileInner} must be divisible by workgroupSize[1]${workgroupSize[1]}`);\n }\n const rowPerThreadA = tileAHight / workgroupSize[1];\n const colPerThreadA = tileAWidth / workgroupSize[0];\n const rowPerThreadB = tileInner / workgroupSize[1];\n const matmulSnippet = sequentialAccessByThreads ? `\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n let globalRowStart = i32(workgroupId.y) * ${tileAOuter};\n let globalColStart = i32(workgroupId.x) * ${tileBOuter};\n\n // Loop over shared dimension.\n for (var t = 0; t < num_tiles; t = t + 1) {\n // Load one tile of A into local memory.\n for (var inputRow = localRow; inputRow < ${tileAHight}; inputRow = inputRow + ${workgroupSize[1]}) {\n for (var inputCol = localCol; inputCol < ${tileAWidth}; inputCol = inputCol + ${workgroupSize[0]}) {\n ${writeDataToSubASnippet(transposeA, batchDims)}\n }\n }\n // Load one tile of B into local memory.\n for (var inputRow = localRow; inputRow < ${tileInner}; inputRow = inputRow + ${workgroupSize[1]}) {\n for (var inputCol = localCol; inputCol < ${tileBOuter}; inputCol = inputCol + ${workgroupSize[0]}) {\n mm_Bsub[inputRow][inputCol] = mm_readB(batch,\n kStart + inputRow,\n globalColStart + inputCol${batchDims ? ", batchIndices" : ""});\n }\n }\n kStart = kStart + tileInner;\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array<${type}, colPerThread>;\n for (var k = 0; k < tileInner; k = k + 1) {\n for (var inner = 0; inner < colPerThread; inner = inner + 1) {\n BCached[inner] = mm_Bsub[k][localCol + inner * ${workgroupSize[0]}];\n }\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n let ACached = ${transposeA ? `mm_Asub[k][localRow + innerRow * ${workgroupSize[1]}];` : `mm_Asub[localRow + innerRow * ${workgroupSize[1]}][k];`}\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n acc[innerRow][innerCol] = acc[innerRow][innerCol] +\n ACached * BCached[innerCol];\n }\n }\n }\n workgroupBarrier();\n }\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n let gRow = globalRowStart + localRow + innerRow * ${workgroupSize[1]};\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n let gCol = globalColStart + localCol + innerCol * ${workgroupSize[0]};\n mm_write(batch, gRow, gCol, acc[innerRow][innerCol]);\n }\n }\n ` : `\nlet tileRow = i32(localId.y) * rowPerThread;\nlet tileCol = i32(localId.x) * colPerThread;\n\nlet globalRow = i32(globalId.y) * rowPerThread;\nlet globalCol = i32(globalId.x) * colPerThread;\nlet globalRowStart = i32(workgroupId.y) * ${tileAOuter};\n\nlet tileRowA = i32(localId.y) * ${rowPerThreadA};\nlet tileColA = i32(localId.x) * ${colPerThreadA};\nlet tileRowB = i32(localId.y) * ${rowPerThreadB};\n// Loop over shared dimension.\nfor (var t = 0; t < num_tiles; t = t + 1) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${rowPerThreadA}; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < ${colPerThreadA}; innerCol = innerCol + 1) {\n let inputRow = tileRowA + innerRow;\n let inputCol = tileColA + innerCol;\n ${writeDataToSubASnippet(transposeA, batchDims)}\n }\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${rowPerThreadB}; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol + innerCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batch,\n kStart + inputRow,\n globalCol + innerCol${batchDims ? ", batchIndices" : ""});\n }\n }\n kStart = kStart + tileInner;\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array<${type}, colPerThread>;\n for (var k = 0; k < tileInner; k = k + 1) {\n for (var inner = 0; inner < colPerThread; inner = inner + 1) {\n BCached[inner] = mm_Bsub[k][tileCol + inner];\n }\n\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n ${readDataFromSubASnippet(transposeA)}\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol];\n }\n }\n }\n\n workgroupBarrier();\n}\n\nfor (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n mm_write(batch, globalRow + innerRow, globalCol + innerCol,\n acc[innerRow][innerCol]);\n }\n}\n`;\n return `\n var mm_Asub : array, ${tileAHight}>;\n var mm_Bsub : array, ${tileInner}>;\n const rowPerThread = ${workPerThread[1]};\n const colPerThread = ${workPerThread[0]};\n const tileInner = ${tileInner};\n\n@compute @workgroup_size(${workgroupSize[0]}, ${workgroupSize[1]}, ${workgroupSize[2]})\nfn main(@builtin(local_invocation_id) localId : vec3,\n @builtin(global_invocation_id) globalId : vec3,\n @builtin(workgroup_id) workgroupId : vec3) {\n let batch = ${splitK ? "0" : "i32(globalId.z)"};\n ${batchDims ? `let batchIndices = ${batchDims.offsetToIndices("u32(batch)")};` : ""}\n let num_tiles = ${splitK ? `${Math.ceil(splitedDimInner / tileInner)}` : "(uniforms.dim_inner - 1) / tileInner + 1"};\n var kStart = ${splitK ? `i32(globalId.z) * ${splitedDimInner}` : "0"};\n\n var acc : array, rowPerThread>;\n\n // Without this initialization strange values show up in acc.\n for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) {\n for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) {\n acc[innerRow][innerCol] = 0.0;\n }\n }\n ${matmulSnippet}\n }\n`;\n };\n matMulReadWriteFnSource = (component, hasBias, applyActivation, variables, batchShapes, isChannelsLast = false) => {\n const [batchAShape, batchBShape, batchShape] = batchShapes;\n const [batchVariable, aVariable, bVariable, outputVariable2] = variables;\n const broadCastADims = getBroadcastDims(batchAShape, batchShape);\n const broadCastBDims = getBroadcastDims(batchBShape, batchShape);\n const dataType = tensorTypeToWsglStorageType(variables[0].type.tensor);\n const getAIndices = () => {\n const aRank = aVariable.rank;\n const batchRank = batchVariable.rank;\n let resStr = `var aIndices: ${aVariable.type.indices};`;\n for (let i = aRank - 2 - 1, j = batchRank - 1; i >= 0; i--, j--) {\n resStr += `\naIndices[${i}] = ${batchRank > 1 ? `batchIndices[${j}]` : "batchIndices"};`;\n }\n broadCastADims.forEach((i) => {\n resStr += `\naIndices[${i}] = 0;`;\n });\n resStr += `\naIndices[${aRank - 2}] = u32(row);\n aIndices[${aRank - 1}] = u32(colIn);`;\n return resStr;\n };\n const getBIndices = () => {\n const bRank = bVariable.rank;\n const batchRank = batchVariable.rank;\n let resStr = `var bIndices: ${bVariable.type.indices};`;\n for (let i = bRank - 2 - 1, j = batchRank - 1; i >= 0; i--, j--) {\n resStr += `\nbIndices[${i}] = ${batchRank > 1 ? `batchIndices[${j}]` : "batchIndices"};`;\n }\n broadCastBDims.forEach((i) => {\n resStr += `\nbIndices[${i}] = 0;`;\n });\n resStr += `\nbIndices[${bRank - 2}] = u32(row);\n bIndices[${bRank - 1}] = u32(colIn);`;\n return resStr;\n };\n const source = `\n fn mm_readA(batch: i32, row: i32, colIn: i32, batchIndices: ${batchVariable.type.indices}) -> ${typeSnippet(component, dataType)} {\n var value = ${typeSnippet(component, dataType)}(0.0);\n let col = colIn * ${component};\n if(row < uniforms.dim_a_outer && col < uniforms.dim_inner)\n {\n ${getAIndices()}\n value = ${aVariable.getByIndices("aIndices")};\n }\n return value;\n }\n\n fn mm_readB(batch: i32, row: i32, colIn: i32, batchIndices: ${batchVariable.type.indices}) -> ${typeSnippet(component, dataType)} {\n var value = ${typeSnippet(component, dataType)}(0.0);\n let col = colIn * ${component};\n if(row < uniforms.dim_inner && col < uniforms.dim_b_outer)\n {\n ${getBIndices()}\n value = ${bVariable.getByIndices("bIndices")};\n }\n return value;\n }\n\n fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${typeSnippet(component, dataType)}) {\n let col = colIn * ${component};\n if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) {\n var value = valueIn;\n let coords = vec3(batch, row, colIn);\n ${hasBias ? `value = value + ${isChannelsLast ? "bias[colIn]" : `${typeSnippet(component, dataType)}(bias[row])`};` : ""}\n ${applyActivation}\n ${outputVariable2.setByIndices("vec3(coords)", "value")}\n }\n }\n `;\n return source;\n };\n createMatmulProgramInfo = (inputs, activationAttributes, outputShape, reshapedOutputShape, isChannelsLast = false) => {\n const aShape = inputs[0].dims;\n const bShape = inputs[1].dims;\n const outerDimsA = aShape.slice(0, -2);\n const outerDimsB = bShape.slice(0, -2);\n const outerDims = reshapedOutputShape ? reshapedOutputShape.slice(0, -2) : outputShape.slice(0, -2);\n const batchSize = ShapeUtil.size(outerDims);\n const dimAOuter = aShape[aShape.length - 2];\n const dimInner = aShape[aShape.length - 1];\n const dimBOuter = bShape[bShape.length - 1];\n const isVec4 = dimInner % 4 === 0 && dimBOuter % 4 === 0;\n const elementsPerThread = dimAOuter <= 8 ? [4, 1, 1] : [4, 4, 1];\n const workgroupSize = [8, 8, 1];\n const dispatch = [\n Math.ceil(dimBOuter / workgroupSize[0] / elementsPerThread[0]),\n Math.ceil(dimAOuter / workgroupSize[1] / elementsPerThread[1]),\n Math.ceil(batchSize / workgroupSize[2] / elementsPerThread[2])\n ];\n const components = isVec4 ? 4 : 1;\n const aShapeTemp = [...outerDimsA, dimAOuter, dimInner / components];\n const aRank = aShapeTemp.length;\n const bShapeTemp = [...outerDimsB, dimInner, dimBOuter / components];\n const bRank = bShapeTemp.length;\n const outputShapeTemp = [batchSize, dimAOuter, dimBOuter / components];\n const programUniforms = [\n { type: 6 /* int32 */, data: dimAOuter },\n { type: 6 /* int32 */, data: dimBOuter },\n { type: 6 /* int32 */, data: dimInner }\n ];\n appendActivationUniformsData(activationAttributes, programUniforms);\n programUniforms.push(...createTensorShapeVariables(outerDims, aShapeTemp, bShapeTemp));\n const inputDependencies = ["rank", "rank"];\n const hasBias = inputs.length > 2;\n if (hasBias) {\n programUniforms.push(...createTensorShapeVariables(inputs[2].dims));\n inputDependencies.push("rank");\n }\n programUniforms.push(...createTensorShapeVariables(outputShapeTemp));\n const getShaderSource = (shaderHelper) => {\n const batchRank = outerDims.length;\n const batchDims = internalVariable("batchDims", inputs[0].dataType, batchRank, 1);\n const dataType = tensorTypeToWsglStorageType(inputs[0].dataType);\n const A = inputVariable("a", inputs[0].dataType, aRank, components);\n const B = inputVariable("b", inputs[1].dataType, bRank, components);\n const output = outputVariable("result", inputs[0].dataType, outputShapeTemp.length, components);\n const inputVariables = [A, B];\n if (hasBias) {\n const biasComponents = isChannelsLast ? components : 1;\n inputVariables.push(inputVariable("bias", inputs[2].dataType, inputs[2].dims.length, biasComponents));\n }\n const uniforms = [{ name: "dim_a_outer", type: "i32" }, { name: "dim_b_outer", type: "i32" }, { name: "dim_inner", type: "i32" }];\n appendActivationUniforms(activationAttributes, uniforms);\n const baseType = tensorTypeToWsglStorageType(output.type.tensor);\n const applyActivation = getActivationSnippet(activationAttributes, output.type.value, baseType);\n const declareFunctions = matMulReadWriteFnSource(\n components,\n hasBias,\n applyActivation,\n [batchDims, A, B, output],\n [outerDimsA, outerDimsB, outerDims],\n isChannelsLast\n );\n return `\n ${shaderHelper.registerUniforms(uniforms).registerInternalVariables(batchDims).declareVariables(\n ...inputVariables,\n output\n )}\n ${declareFunctions}\n ${isVec4 ? makeMatMulPackedVec4Source(elementsPerThread, workgroupSize, dataType, batchDims) : makeMatMulPackedSource(elementsPerThread, workgroupSize, dataType, batchDims)}\n `;\n };\n return {\n name: "MatMul",\n shaderCache: {\n hint: `${elementsPerThread};${activationAttributes.activation};${isVec4};${isChannelsLast}`,\n inputDependencies\n },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: dispatch[0], y: dispatch[1], z: dispatch[2] },\n programUniforms\n }),\n getShaderSource\n };\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/3rd-party/conv2d_mm_webgpu.ts\n var conv2dCommonSnippet, createConv2DMatMulProgramInfo;\n var init_conv2d_mm_webgpu = __esm({\n "web/lib/wasm/jsep/webgpu/ops/3rd-party/conv2d_mm_webgpu.ts"() {\n "use strict";\n init_wasm_common();\n init_log();\n init_common();\n init_fuse_utils();\n init_activation_util();\n init_conv_util();\n init_matmul_packed_webgpu();\n conv2dCommonSnippet = (isChannelsLast, fitAOuter, fitBOuter, fitInner, addBias = false, attributes, innerElementSizeX = 4, innerElementSizeW = 4, innerElementSize = 4, dataType = "f32") => {\n const getXSnippet = (innerElementSize2) => {\n switch (innerElementSize2) {\n case 1:\n return "resData = x[xIndex];";\n case 3:\n return `resData = vec3<${dataType}>(x[xIndex], x[xIndex + 1], x[xIndex + 2]);`;\n case 4:\n return "resData = x[xIndex / 4];";\n default:\n throw new Error(`innerElementSize ${innerElementSize2} is not supported.`);\n }\n };\n const getWSnippet = (innerElementSize2) => {\n switch (innerElementSize2) {\n case 1:\n return "return w[row * i32(uniforms.w_shape[3]) + colIn];";\n case 4:\n return "return w[row * i32(uniforms.w_shape[3]) / 4 + colIn];";\n default:\n throw new Error(`innerElementSize ${innerElementSize2} is not supported.`);\n }\n };\n const coordASnippet = isChannelsLast ? `\n let coord = vec4(batch, xRow, xCol, xCh);\n ` : `\n let coord = vec4(batch, xCh, xRow, xCol);\n `;\n const coordResSnippet = isChannelsLast ? `\n let coords = vec4(\n batch,\n row / outWidth,\n row % outWidth,\n col);\n ` : `\n let coords = vec4(\n batch,\n row,\n col / outWidth,\n col % outWidth);\n `;\n const xHeight = isChannelsLast ? "i32(uniforms.x_shape[1])" : "i32(uniforms.x_shape[2])";\n const xWidth = isChannelsLast ? "i32(uniforms.x_shape[2])" : "i32(uniforms.x_shape[3])";\n const row = isChannelsLast ? "row" : "col";\n const col = isChannelsLast ? "col" : "row";\n const readXSnippet = `\n let inChannels = i32(uniforms.w_shape[2]);\n let outWidth = ${isChannelsLast ? "i32(uniforms.result_shape[2])" : "i32(uniforms.result_shape[3])"};\n let outRow = ${row} / outWidth;\n let outCol = ${row} % outWidth;\n\n let WRow = ${col} / (i32(uniforms.w_shape[1]) * inChannels);\n let WCol = ${col} / inChannels % i32(uniforms.w_shape[1]);\n let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0];\n let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1];\n let xCh = ${col} % inChannels;\n var resData = ${typeSnippet(innerElementSizeX, dataType)}(0.0);\n // The bounds checking is always needed since we use it to pad zero for\n // the \'same\' padding type.\n if (xRow >= 0 && xRow < ${xHeight} && xCol >= 0 && xCol < ${xWidth}) {\n ${coordASnippet}\n let xIndex = getIndexFromCoords4D(coord, vec4(uniforms.x_shape));\n ${getXSnippet(innerElementSizeX)}\n }\n return resData;`;\n const sampleX = isChannelsLast ? fitAOuter && fitInner ? `\n let col = colIn * ${innerElementSizeX};\n ${readXSnippet}` : `\n let col = colIn * ${innerElementSizeX};\n if (row < uniforms.dim_a_outer && col < uniforms.dim_inner) {\n ${readXSnippet}\n }\n return ${typeSnippet(innerElementSizeX, dataType)}(0.0);` : fitInner && fitBOuter ? `\n let col = colIn * ${innerElementSizeX};\n ${readXSnippet}` : `\n let col = colIn * ${innerElementSizeX};\n if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) {\n ${readXSnippet}\n }\n return ${typeSnippet(innerElementSizeX, dataType)}(0.0);`;\n const sampleW = `${getWSnippet(innerElementSizeW)}`;\n const resType = typeSnippet(innerElementSize, dataType);\n const aType = isChannelsLast ? typeSnippet(innerElementSizeX, dataType) : typeSnippet(innerElementSizeW, dataType);\n const bType = isChannelsLast ? typeSnippet(innerElementSizeW, dataType) : typeSnippet(innerElementSizeX, dataType);\n const applyActivation = getActivationSnippet(attributes, resType, dataType);\n const userCode = `\n fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${aType} {\n ${isChannelsLast ? sampleX : sampleW}\n }\n\n fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${bType} {\n ${isChannelsLast ? sampleW : sampleX}\n }\n\n fn mm_write(batch: i32, row : i32, colIn : i32, valueIn : ${resType}) {\n let col = colIn * ${innerElementSize};\n if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer)\n {\n var value = valueIn;\n let outWidth = ${isChannelsLast ? "i32(uniforms.result_shape[2])" : "i32(uniforms.result_shape[3])"};\n ${coordResSnippet}\n ${biasSnippet(addBias)}\n ${applyActivation}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }`;\n return userCode;\n };\n createConv2DMatMulProgramInfo = (inputs, attributes, outputShape, dimAOuter, dimBOuter, dimInner, hasBias, sequentialAccessByThreads) => {\n const isChannelsLast = attributes.format === "NHWC";\n const inChannels = isChannelsLast ? inputs[0].dims[3] : inputs[0].dims[1];\n const batchSize = outputShape[0];\n const outWidth = isChannelsLast ? outputShape[2] : outputShape[3];\n const outHeight = isChannelsLast ? outputShape[1] : outputShape[2];\n const outChannels = isChannelsLast ? outputShape[3] : outputShape[1];\n const isVec4 = isChannelsLast && (inChannels % 4 === 0 || inChannels % 3 === 0) && outChannels % 4 === 0;\n const dispatchX = isChannelsLast ? outChannels : outWidth * outHeight;\n const dispatchY = isChannelsLast ? outWidth * outHeight : outChannels;\n const workGroupSize = [8, 8, 1];\n const elementsPerThread = dimAOuter <= 8 ? [4, 1, 1] : [4, 4, 1];\n const dispatch = [\n Math.ceil(dispatchX / workGroupSize[0] / elementsPerThread[0]),\n Math.ceil(dispatchY / workGroupSize[1] / elementsPerThread[1]),\n Math.ceil(batchSize / workGroupSize[2] / elementsPerThread[2])\n ];\n LOG_DEBUG("verbose", () => `[conv2d_mm_webgpu] dispatch = ${dispatch}`);\n const innerElementSize = isVec4 ? isChannelsLast && inChannels % 4 !== 0 ? 3 : 4 : 1;\n const tileAOuter = workGroupSize[1] * elementsPerThread[1];\n const tileBOuter = workGroupSize[0] * elementsPerThread[0];\n const tileInner = Math.max(workGroupSize[0] * innerElementSize, workGroupSize[1]);\n const fitAOuter = dimAOuter % tileAOuter === 0;\n const fitBOuter = dimBOuter % tileBOuter === 0;\n const fitInner = dimInner % tileInner === 0;\n const elementsSize = isVec4 ? [innerElementSize, 4, 4] : [1, 1, 1];\n const programUniforms = [\n { type: 6 /* int32 */, data: dimAOuter },\n { type: 6 /* int32 */, data: dimBOuter },\n { type: 6 /* int32 */, data: dimInner },\n { type: 6 /* int32 */, data: [attributes.pads[0], attributes.pads[1]] },\n { type: 6 /* int32 */, data: attributes.strides },\n { type: 6 /* int32 */, data: attributes.dilations }\n ];\n appendActivationUniformsData(attributes, programUniforms);\n programUniforms.push(...createTensorShapeVariables(inputs[0].dims, inputs[1].dims));\n const inputDependencies = ["rank", "rank"];\n if (hasBias) {\n programUniforms.push(...createTensorShapeVariables(inputs[2].dims));\n inputDependencies.push("rank");\n }\n programUniforms.push(...createTensorShapeVariables(outputShape));\n const getShaderSource = (shaderHelper) => {\n const uniforms = [\n { name: "dim_a_outer", type: "i32" },\n { name: "dim_b_outer", type: "i32" },\n { name: "dim_inner", type: "i32" },\n { name: "pad", type: "i32", length: 2 },\n { name: "stride", type: "i32", length: 2 },\n { name: "dilation", type: "i32", length: 2 }\n ];\n appendActivationUniforms(attributes, uniforms);\n const components = isVec4 ? 4 : 1;\n const t = tensorTypeToWsglStorageType(inputs[0].dataType);\n let declareFunctions = `\n fn setOutputAtIndex(flatIndex : i32, value : ${isVec4 ? `vec4<${t}>` : t}) {\n result[flatIndex] = ${isVec4 ? `vec4<${t}>` : t}(value);\n }\n fn setOutputAtCoords(d0 : i32, d1 : i32, d2 : i32, d3 : i32, value : ${isVec4 ? `vec4<${t}>` : t}) {\n let flatIndex = getOutputIndexFromCoords(vec4(d0, d1, d2, d3));\n setOutputAtIndex(flatIndex ${isVec4 ? "/ 4" : ""}, value);\n }`;\n const x = inputVariable(\n "x",\n inputs[0].dataType,\n inputs[0].dims.length,\n innerElementSize === 3 ? 1 : innerElementSize\n );\n const w = inputVariable("w", inputs[1].dataType, inputs[1].dims.length, components);\n const inputVariables = [x, w];\n const output = outputVariable("result", inputs[0].dataType, outputShape.length, components);\n if (hasBias) {\n const bias = inputVariable("bias", inputs[2].dataType, inputs[2].dims.length, components);\n inputVariables.push(bias);\n declareFunctions += `\n fn getBiasByOutputCoords(coords : vec4) -> ${isVec4 ? `vec4<${t}>` : t} {\n return bias[coords.${isChannelsLast ? "w" : "y"}${isVec4 ? "/ 4" : ""}];\n }`;\n }\n return `\n ${utilFunctions("uniforms.result_strides")}\n //struct Uniforms { xShape : vec4, wShape : vec4, outShape : vec4,\n // outShapeStrides: vec3, filterDims : vec2, pad : vec2, stride : vec2,\n // dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32 };\n ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVariables, output)}\n ${declareFunctions}\n ${conv2dCommonSnippet(\n isChannelsLast,\n fitAOuter,\n fitBOuter,\n fitInner,\n hasBias,\n attributes,\n elementsSize[0],\n elementsSize[1],\n elementsSize[2],\n t\n )}\n ${isVec4 ? makeMatMulPackedVec4Source(elementsPerThread, workGroupSize, t, void 0, !isChannelsLast, tileInner) : makeMatMulPackedSource(\n elementsPerThread,\n workGroupSize,\n t,\n void 0,\n !isChannelsLast,\n tileInner,\n false,\n void 0,\n sequentialAccessByThreads\n )}`;\n };\n return {\n name: "Conv2DMatMul",\n shaderCache: {\n hint: `${attributes.cacheKey};${innerElementSize};${isVec4};${fitAOuter};${fitBOuter};${fitInner};${tileAOuter};${tileBOuter};${tileInner}`,\n inputDependencies\n },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: dispatch[0], y: dispatch[1], z: dispatch[2] },\n programUniforms\n }),\n getShaderSource\n };\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/conv-grouped.ts\n var createGroupedConvProgramInfo, createGroupedConvVectorizeProgramInfo;\n var init_conv_grouped = __esm({\n "web/lib/wasm/jsep/webgpu/ops/conv-grouped.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n init_conv();\n init_fuse_utils();\n createGroupedConvProgramInfo = (inputs, attributes, squeezeOutputShapeFunction) => {\n const hasBias = inputs.length > 2;\n const processBias = hasBias ? "value += b[output_channel];" : "";\n const xShape = inputs[0].dims;\n const wShape = inputs[1].dims;\n const outputChannelsPerGroup = wShape[0] / attributes.group;\n const isChannelLast = attributes.format === "NHWC";\n const outputShape = calculateOutputShape(\n xShape,\n wShape,\n attributes.dilations,\n attributes.pads,\n attributes.strides,\n isChannelLast\n );\n const outputSize = ShapeUtil.size(outputShape);\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 12 /* uint32 */, data: attributes.dilations },\n { type: 12 /* uint32 */, data: [attributes.strides[0], attributes.strides[1]] },\n { type: 12 /* uint32 */, data: [attributes.pads[0], attributes.pads[1]] },\n { type: 12 /* uint32 */, data: outputChannelsPerGroup }\n ];\n appendActivationUniformsData(attributes, programUniforms);\n programUniforms.push(...createTensorShapeVariables(xShape, wShape));\n const inputDependencies = ["rank", "rank"];\n if (hasBias) {\n programUniforms.push(...createTensorShapeVariables(inputs[2].dims));\n inputDependencies.push("rank");\n }\n programUniforms.push(...createTensorShapeVariables(outputShape));\n const getShaderSource = (shaderHelper) => {\n const output = outputVariable("output", inputs[0].dataType, outputShape.length);\n const baseType = tensorTypeToWsglStorageType(output.type.tensor);\n const applyActivation = getActivationSnippet(attributes, output.type.value, baseType);\n const x = inputVariable("x", inputs[0].dataType, xShape.length);\n const w = inputVariable("w", inputs[1].dataType, wShape.length);\n const inputVars = [x, w];\n if (hasBias) {\n inputVars.push(inputVariable("b", inputs[2].dataType, inputs[2].dims.length));\n }\n const uniforms = [\n { name: "output_size", type: "u32" },\n { name: "dilations", type: "u32", length: attributes.dilations.length },\n { name: "strides", type: "u32", length: 2 },\n { name: "pads", type: "u32", length: 2 },\n { name: "output_channels_per_group", type: "u32" }\n ];\n appendActivationUniforms(attributes, uniforms);\n return `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVars, output)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n\n let outputIndices = ${output.offsetToIndices("global_idx")};\n let batch: u32 = outputIndices[0];\n let output_channel: u32 = outputIndices[${isChannelLast ? 3 : 1}];\n let xRCCorner: vec2 = vec2(outputIndices[${isChannelLast ? 1 : 2}], outputIndices[${isChannelLast ? 2 : 3}]) * uniforms.strides - uniforms.pads;\n let group_id: u32 = output_channel / uniforms.output_channels_per_group;\n\n var value: ${output.type.value} = ${output.type.value}(0);\n for (var wInChannel: u32 = 0u; wInChannel < uniforms.w_shape[1]; wInChannel++) {\n let input_channel = group_id * uniforms.w_shape[1] + wInChannel;\n for (var wHeight: u32 = 0u; wHeight < uniforms.w_shape[2]; wHeight++) {\n let xHeight = xRCCorner.x + wHeight * uniforms.dilations[0];\n\n if (xHeight < 0u || xHeight >= uniforms.x_shape[${isChannelLast ? 1 : 2}]) {\n continue;\n }\n\n for (var wWidth: u32 = 0u; wWidth < uniforms.w_shape[3]; wWidth++) {\n let xWidth = xRCCorner.y + wWidth * uniforms.dilations[1];\n if (xWidth < 0u || xWidth >= uniforms.x_shape[${isChannelLast ? 2 : 3}]) {\n continue;\n }\n\n let xVal = ${isChannelLast ? x.get("batch", "xHeight", "xWidth", "input_channel") : x.get("batch", "input_channel", "xHeight", "xWidth")};\n let wVal = ${w.get("output_channel", "wInChannel", "wHeight", "wWidth")};\n value += xVal*wVal;\n }\n }\n }\n ${processBias}\n ${applyActivation}\n ${output.setByOffset("global_idx", "value")}\n }`;\n };\n return {\n name: "GroupedConv",\n shaderCache: { hint: attributes.cacheKey, inputDependencies },\n getRunData: () => ({\n outputs: [{\n dims: squeezeOutputShapeFunction ? squeezeOutputShapeFunction(outputShape) : outputShape,\n dataType: inputs[0].dataType\n }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n };\n };\n createGroupedConvVectorizeProgramInfo = (inputs, attributes, outputShape) => {\n const hasBias = inputs.length > 2;\n const components = getMaxComponents(outputShape[3]);\n const outputNumber = getMaxComponents(outputShape[2]);\n const outputSize = ShapeUtil.size(outputShape) / components / outputNumber;\n const xShape = [inputs[0].dims[0], inputs[0].dims[1], inputs[0].dims[2], inputs[0].dims[3] / components];\n const wShape = [inputs[1].dims[0], inputs[1].dims[1], inputs[1].dims[2], inputs[1].dims[3] / components];\n const outputShapeInShader = [outputShape[0], outputShape[1], outputShape[2], outputShape[3] / components];\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 6 /* int32 */, data: [attributes.strides[0], attributes.strides[1]] },\n { type: 6 /* int32 */, data: [attributes.pads[0], attributes.pads[1]] }\n ];\n appendActivationUniformsData(attributes, programUniforms);\n programUniforms.push(...createTensorShapeVariables(xShape, wShape, outputShapeInShader));\n const xNumber = (outputNumber - 1) * attributes.strides[1] + wShape[1];\n const getShaderSource = (shaderHelper) => {\n const output = outputVariable("output", inputs[0].dataType, outputShapeInShader.length, components);\n const baseType = tensorTypeToWsglStorageType(output.type.tensor);\n const applyActivation = getActivationSnippet(attributes, output.type.value, baseType);\n const x = inputVariable("x", inputs[0].dataType, xShape.length, components);\n const w = inputVariable("w", inputs[1].dataType, wShape.length, components);\n const inputVars = [x, w];\n if (hasBias) {\n inputVars.push(inputVariable("b", inputs[2].dataType, inputs[2].dims, components));\n }\n const processBias = hasBias ? "value += b[output_channel];" : "";\n const uniforms = [\n { name: "output_size", type: "u32" },\n { name: "strides", type: "i32", length: 2 },\n { name: "pads", type: "i32", length: 2 }\n ];\n appendActivationUniforms(attributes, uniforms);\n return `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVars, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n let width0 = uniforms.output_shape[3];\n let output_channel = global_idx % width0;\n var index1 = global_idx / width0;\n let width1 = uniforms.output_shape[2] / ${outputNumber}u;\n let col = (index1 % width1) * ${outputNumber}u;\n index1 = index1 / width1;\n let row = index1 % uniforms.output_shape[1];\n let batch = index1 / uniforms.output_shape[1];\n\n let x_corner = vec2(i32(row), i32(col)) * uniforms.strides - uniforms.pads;\n\n var x_vals: array<${x.type.value}, ${xNumber}>;\n var values: array<${output.type.value}, ${outputNumber}>;\n let input_channel = output_channel;\n // Use constant instead of uniform can give better performance for w\'s height/width.\n for (var w_height: u32 = 0u; w_height < ${wShape[0]}; w_height++) {\n let x_height = x_corner.x + i32(w_height);\n if (x_height >= 0 && u32(x_height) < uniforms.x_shape[1]) {\n for (var i = 0; i < ${xNumber}; i++) {\n let x_width = x_corner.y + i;\n if (x_width >= 0 && u32(x_width) < uniforms.x_shape[2]) {\n x_vals[i] = ${x.get("batch", "u32(x_height)", "u32(x_width)", "input_channel")};\n } else {\n x_vals[i] = ${x.type.value}(0);\n }\n }\n for (var w_width: u32 = 0u; w_width < ${wShape[1]}; w_width++) {\n let w_val = ${w.get("w_height", "w_width", "0", "output_channel")};\n for (var i = 0u; i < ${outputNumber}u; i++) {\n values[i] = fma(x_vals[i * u32(uniforms.strides[1]) + w_width], w_val, values[i]);\n }\n }\n }\n }\n\n for (var i = 0u; i < ${outputNumber}u; i++) {\n var value = values[i];\n ${processBias}\n ${applyActivation}\n ${output.set("batch", "row", "col + i", "output_channel", "value")};\n }\n }`;\n };\n return {\n name: "GroupedConv-Vectorize",\n shaderCache: {\n hint: `${attributes.cacheKey};${components};${outputNumber};${xNumber};${wShape[0]};${wShape[1]}`,\n inputDependencies: hasBias ? ["rank", "rank", "type"] : ["rank", "rank"]\n },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n };\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/matmul.ts\n var createNaiveMatmulProgramInfo, validateInputs8, matMul;\n var init_matmul = __esm({\n "web/lib/wasm/jsep/webgpu/ops/matmul.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_matmul_packed_webgpu();\n init_common();\n init_fuse_utils();\n createNaiveMatmulProgramInfo = (inputs, activationAttributes, outputShape, reshapedOutputShape, isChannelsLast = false) => {\n const aShape = inputs[0].dims;\n const bShape = inputs[1].dims;\n const M = aShape[aShape.length - 2];\n const N = bShape[bShape.length - 1];\n const K = aShape[aShape.length - 1];\n const components = getMaxComponents(N);\n const aComponents = getMaxComponents(K);\n const outputNumber = getMaxComponents(M);\n const outputSize = ShapeUtil.size(outputShape) / components / outputNumber;\n const hasBias = inputs.length > 2;\n const outerDims = reshapedOutputShape ? reshapedOutputShape.slice(0, -2) : outputShape.slice(0, -2);\n const batchSize = ShapeUtil.size(outerDims);\n const outputShapeInShader = [batchSize, M, N];\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 12 /* uint32 */, data: M },\n { type: 12 /* uint32 */, data: N },\n { type: 12 /* uint32 */, data: K }\n ];\n appendActivationUniformsData(activationAttributes, programUniforms);\n programUniforms.push(...createTensorShapeVariables(outerDims, aShape, bShape));\n if (hasBias) {\n programUniforms.push(...createTensorShapeVariables(inputs[2].dims));\n }\n programUniforms.push(...createTensorShapeVariables(outputShapeInShader));\n const getShaderSource = (shaderHelper) => {\n const batchDims = internalVariable("batch_dims", inputs[0].dataType, outerDims.length);\n const a = inputVariable("a", inputs[0].dataType, aShape.length, aComponents);\n const b = inputVariable("b", inputs[1].dataType, bShape.length, components);\n const output = outputVariable("output", inputs[0].dataType, outputShapeInShader.length, components);\n const baseType = tensorTypeToWsglStorageType(output.type.tensor);\n const applyActivation = getActivationSnippet(activationAttributes, output.type.value, baseType);\n const inputVariables = [a, b];\n let processBias = "";\n if (hasBias) {\n const biasComponents = isChannelsLast ? components : 1;\n inputVariables.push(inputVariable("bias", inputs[2].dataType, inputs[2].dims.length, biasComponents));\n processBias = `${isChannelsLast ? `value += bias[col / ${biasComponents}];` : `value += ${output.type.value}(bias[row + i]);`}`;\n }\n const outerDimsA = aShape.slice(0, -2);\n const outerDimsB = bShape.slice(0, -2);\n const broadCastADims = getBroadcastDims(outerDimsA, outerDims);\n const broadCastBDims = getBroadcastDims(outerDimsB, outerDims);\n const uniforms = [\n { name: "output_size", type: "u32" },\n { name: "M", type: "u32" },\n { name: "N", type: "u32" },\n { name: "K", type: "u32" }\n ];\n appendActivationUniforms(activationAttributes, uniforms);\n const getIndices = (variable, broadCastDims) => {\n const rank = variable.rank;\n const name = variable.name;\n if (rank === 2) {\n return `var ${name}_indices = ${variable.type.indices}(0u, 0u);`;\n }\n const batchRank = batchDims.rank;\n let resStr = `var ${name}_indices: ${variable.type.indices};`;\n for (let i = rank - 2 - 1, j = batchRank - 1; i >= 0; i--, j--) {\n resStr += `\n${name}_indices[${i}] = ${batchRank > 1 ? `batch_indices[${j}]` : "batch_indices"};`;\n }\n broadCastDims.forEach((i) => {\n resStr += `\n${name}_indices[${i}] = 0;`;\n });\n resStr += `${name}_indices[${rank - 2}] = 0u;\n ${name}_indices[${rank - 1}] = 0u;`;\n return resStr;\n };\n const calcResult = () => {\n let calcStr = `var a_data: ${a.type.value};`;\n for (let i = 0; i < aComponents; i++) {\n calcStr += `\n let b_data${i} = b[(b_offset + (k + ${i}) * uniforms.N + col) / ${components}];`;\n }\n for (let i = 0; i < outputNumber; i++) {\n calcStr += `a_data = a[(a_offset + (row + ${i}) * uniforms.K + k) / ${aComponents}];`;\n for (let j = 0; j < aComponents; j++) {\n calcStr += `\n values[${i}] = fma(${b.type.value}(a_data${aComponents === 1 ? "" : `[${j}]`}), b_data${j}, values[${i}]);\n`;\n }\n }\n return calcStr;\n };\n return `\n ${shaderHelper.registerUniforms(uniforms).registerInternalVariables(batchDims).declareVariables(\n ...inputVariables,\n output\n )}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n let col = (global_idx % (uniforms.N / ${components})) * ${components};\n var index1 = global_idx / (uniforms.N / ${components});\n let stride1 = uniforms.M / ${outputNumber};\n let row = (index1 % stride1) * ${outputNumber};\n let batch = index1 / stride1;\n\n ${outputShape.length === 2 ? "" : `let batch_indices = ${batchDims.offsetToIndices("batch")};`}\n ${getIndices(a, broadCastADims)}\n let a_offset = ${a.indicesToOffset("a_indices")};\n ${getIndices(b, broadCastBDims)}\n let b_offset = ${b.indicesToOffset("b_indices")};\n var values: array<${output.type.value}, ${outputNumber}>;\n for (var k: u32 = 0u; k < uniforms.K; k = k + ${aComponents}) {\n ${calcResult()}\n }\n for (var i = 0u; i < ${outputNumber}u; i++) {\n var value = values[i];\n ${processBias}\n ${applyActivation}\n let cur_indices = ${output.type.indices}(batch, row + i, col);\n let offset = ${output.indicesToOffset("cur_indices")};\n ${output.setByOffset(`offset / ${components}`, "value")};\n }\n }\n `;\n };\n return {\n name: "MatMulNaive",\n shaderCache: {\n hint: `${activationAttributes.activation};${components};${aComponents};${outputNumber};${isChannelsLast}`,\n inputDependencies: hasBias ? ["rank", "rank", "rank"] : ["rank", "rank"]\n },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n };\n };\n validateInputs8 = (inputs) => {\n if (!inputs || inputs.length !== 2) {\n throw new Error("MatMul requires 2 inputs.");\n }\n if (inputs[0].dims[inputs[0].dims.length - 1] !== inputs[1].dims[inputs[1].dims.length - 2]) {\n throw new Error("shared dimension does not match.");\n }\n };\n matMul = (context) => {\n validateInputs8(context.inputs);\n const outputShape = BroadcastUtil.calcShape(context.inputs[0].dims, context.inputs[1].dims, true);\n if (!outputShape) {\n throw new Error("Can\'t use matmul on the given tensors");\n }\n const N = outputShape[outputShape.length - 1];\n const K = context.inputs[0].dims[context.inputs[0].dims.length - 1];\n if (N < 8 && K < 8) {\n context.compute(createNaiveMatmulProgramInfo(context.inputs, { activation: "" }, outputShape));\n } else {\n context.compute(createMatmulProgramInfo(context.inputs, { activation: "" }, outputShape));\n }\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/conv.ts\n var calculateOutputShape, weightTransposeAttribute, validateInputs9, getAdjustedConvAttributes, parseConvAttributes, conv2d, conv1d, conv;\n var init_conv = __esm({\n "web/lib/wasm/jsep/webgpu/ops/conv.ts"() {\n "use strict";\n init_util();\n init_conv2d_mm_webgpu();\n init_matmul_packed_webgpu();\n init_conv_grouped();\n init_fuse_utils();\n init_matmul();\n init_transpose();\n calculateOutputShape = (inputShape, kernelShape, dilations, adjustPads, strides, isChannelLast) => {\n const batchSize = inputShape[0];\n const inputSpatialShape = inputShape.slice(isChannelLast ? 1 : 2, isChannelLast ? 3 : 4);\n const spatialRank = inputSpatialShape.length;\n const outChannels = kernelShape[0];\n const kernelSpatialShape = kernelShape.slice(2);\n const dilatedKernelShape = kernelSpatialShape.map((v, i) => v + (v - 1) * (dilations[i] - 1));\n const inputSpatialShapeWithPad = inputSpatialShape.map((v, i) => v + adjustPads[i] + adjustPads[i + spatialRank]);\n const outputShape = inputSpatialShapeWithPad.map((v, i) => Math.floor((v - dilatedKernelShape[i] + strides[i]) / strides[i]));\n outputShape.splice(0, 0, batchSize);\n outputShape.splice(isChannelLast ? 3 : 1, 0, outChannels);\n return outputShape;\n };\n weightTransposeAttribute = [2, 3, 1, 0];\n validateInputs9 = (inputs, attributes) => {\n if (!inputs || inputs.length !== 2 && inputs.length !== 3) {\n throw new Error("Conv requires 2 or 3 inputs");\n }\n if (inputs[0].dims.length !== 4 && inputs[0].dims.length !== 3) {\n throw new Error("currently only support conv 1D and 2D");\n }\n if (inputs[0].dims.length !== inputs[1].dims.length) {\n throw new Error("filter does not have same dimension as input");\n }\n const dataChannel = inputs[0].dims[attributes.format === "NHWC" ? inputs[0].dims.length - 1 : 1];\n const filterInChannel = inputs[1].dims[1] * attributes.group;\n if (dataChannel !== filterInChannel) {\n throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");\n }\n if (inputs.length === 3 && (inputs[2].dims.length !== 1 || inputs[1].dims[0] !== inputs[2].dims[0])) {\n throw new Error("invalid bias");\n }\n const spatialRank = inputs[0].dims.length - 2;\n if (attributes.dilations.length !== spatialRank) {\n throw new Error(`dilations should be ${spatialRank}D`);\n }\n if (attributes.strides.length !== spatialRank) {\n throw new Error(`strides should be ${spatialRank}D`);\n }\n if (attributes.pads.length !== spatialRank * 2) {\n throw new Error(`pads should be ${spatialRank * 2}D`);\n }\n if (attributes.kernelShape.length !== 0 && attributes.kernelShape.length !== inputs[1].dims.length - 2) {\n throw new Error("invalid kernel shape");\n }\n };\n getAdjustedConvAttributes = (attributes, inputs) => {\n const kernelShape = attributes.kernelShape.slice();\n for (let i = 2; i < inputs[1].dims.length; ++i) {\n if (kernelShape[i - 2] === 0) {\n kernelShape[i - 2] = inputs[1].dims[i];\n }\n }\n const pads = attributes.pads.slice();\n PoolConvUtil.adjustPadsBasedOnAutoPad(\n inputs[0].dims,\n attributes.strides,\n attributes.dilations,\n kernelShape,\n pads,\n attributes.format === "NHWC",\n attributes.autoPad\n );\n const newAttributes = Object.assign({}, attributes);\n Object.assign(newAttributes, { kernelShape, pads });\n return newAttributes;\n };\n parseConvAttributes = (attributes) => {\n const activationAttributes = parseInternalActivationAttributes(attributes);\n const format = attributes.format;\n const autoPad = ["NOTSET", "VALID", "SAME_UPPER", "SAME_LOWER"][attributes.auto_pad];\n const dilations = attributes.dilations;\n const group = attributes.group;\n const kernelShape = attributes.kernel_shape;\n const pads = attributes.pads;\n const strides = attributes.strides;\n const wIsConst = attributes.w_is_const();\n return {\n autoPad,\n format,\n dilations,\n group,\n kernelShape,\n pads,\n strides,\n wIsConst,\n ...activationAttributes,\n cacheKey: `${attributes.format};${activationAttributes.activation};`\n };\n };\n conv2d = (context, inputs, attributes) => {\n const adjustedAttributes = getAdjustedConvAttributes(attributes, inputs);\n const isChannelsLast = attributes.format === "NHWC";\n if (attributes.group !== 1) {\n const enableGroupedConvVectorize = !context.adapterInfo.isArchitecture("ampere");\n if (enableGroupedConvVectorize && isChannelsLast && inputs[1].dims[0] === attributes.group && inputs[1].dims[1] === 1 && attributes.dilations[0] === 1 && attributes.dilations[1] === 1) {\n const outputShape2 = calculateOutputShape(\n inputs[0].dims,\n inputs[1].dims,\n attributes.dilations,\n adjustedAttributes.pads,\n attributes.strides,\n isChannelsLast\n );\n const transposedWeight2 = context.kernelCustomData.wT ?? context.compute(\n createTransposeProgramInfo(inputs[1], weightTransposeAttribute),\n { inputs: [1], outputs: [attributes.wIsConst ? -2 : -1] }\n )[0];\n if (attributes.wIsConst && !context.kernelCustomData.wT) {\n context.kernelCustomData.wT = transposedWeight2;\n }\n const convInputs2 = [inputs[0], transposedWeight2];\n if (inputs.length === 3) {\n convInputs2.push(inputs[2]);\n }\n context.compute(\n createGroupedConvVectorizeProgramInfo(convInputs2, adjustedAttributes, outputShape2),\n { inputs: convInputs2 }\n );\n } else {\n context.compute(createGroupedConvProgramInfo(inputs, adjustedAttributes));\n }\n return;\n }\n const hasBias = inputs.length === 3;\n const inputHeight = inputs[0].dims[isChannelsLast ? 1 : 2];\n const inputWidth = inputs[0].dims[isChannelsLast ? 2 : 3];\n const inputChannels = inputs[0].dims[isChannelsLast ? 3 : 1];\n const weightHeight = inputs[1].dims[2];\n const weightWidth = inputs[1].dims[3];\n const outputShape = calculateOutputShape(\n inputs[0].dims,\n inputs[1].dims,\n attributes.dilations,\n adjustedAttributes.pads,\n attributes.strides,\n isChannelsLast\n );\n const outHeight = outputShape[isChannelsLast ? 1 : 2];\n const outWidth = outputShape[isChannelsLast ? 2 : 3];\n const outChannels = outputShape[isChannelsLast ? 3 : 1];\n const sameSize = isChannelsLast && weightHeight === inputHeight && weightWidth === inputWidth && attributes.pads[0] === 0 && attributes.pads[1] === 0;\n if (sameSize || weightHeight === 1 && weightWidth === 1 && attributes.dilations[0] === 1 && attributes.dilations[1] === 1 && attributes.strides[0] === 1 && attributes.strides[1] === 1 && attributes.pads[0] === 0 && attributes.pads[1] === 0) {\n const batch = outputShape[0];\n let xReshaped, wReshaped, matmulOutputShape;\n const matmulInputs = [];\n if (isChannelsLast) {\n const transposedWeight2 = context.kernelCustomData.wT ?? context.compute(\n createTransposeProgramInfo(inputs[1], weightTransposeAttribute),\n { inputs: [1], outputs: [attributes.wIsConst ? -2 : -1] }\n )[0];\n if (attributes.wIsConst && !context.kernelCustomData.wT) {\n context.kernelCustomData.wT = transposedWeight2;\n }\n if (sameSize) {\n const sharedDim = inputHeight * inputWidth * inputChannels;\n xReshaped = inputs[0].reshape([1, batch, sharedDim]);\n wReshaped = transposedWeight2.reshape([1, sharedDim, outChannels]);\n matmulOutputShape = [1, batch, outChannels];\n } else {\n xReshaped = inputs[0].reshape([batch, inputHeight * inputWidth, inputChannels]);\n wReshaped = transposedWeight2.reshape([1, inputChannels, outChannels]);\n matmulOutputShape = [batch, outHeight * outWidth, outChannels];\n }\n matmulInputs.push(xReshaped);\n matmulInputs.push(wReshaped);\n } else {\n xReshaped = inputs[0].reshape([batch, inputChannels, inputHeight * inputWidth]);\n wReshaped = inputs[1].reshape([1, outChannels, inputChannels]);\n matmulOutputShape = [batch, outChannels, outHeight * outWidth];\n matmulInputs.push(wReshaped);\n matmulInputs.push(xReshaped);\n }\n if (hasBias) {\n matmulInputs.push(inputs[2]);\n }\n const N = matmulOutputShape[2];\n const K = matmulInputs[0].dims[matmulInputs[0].dims.length - 1];\n if (N < 8 && K < 8) {\n context.compute(\n createNaiveMatmulProgramInfo(\n matmulInputs,\n adjustedAttributes,\n outputShape,\n matmulOutputShape,\n isChannelsLast\n ),\n { inputs: matmulInputs }\n );\n } else {\n context.compute(\n createMatmulProgramInfo(matmulInputs, adjustedAttributes, outputShape, matmulOutputShape, isChannelsLast),\n { inputs: matmulInputs }\n );\n }\n return;\n }\n const sequentialAccessByThreads = (\n /* backend.adapterInfo.isIntel() */\n true\n );\n const transposedWeight = context.kernelCustomData.wT ?? context.compute(\n createTransposeProgramInfo(inputs[1], weightTransposeAttribute),\n { inputs: [1], outputs: [attributes.wIsConst ? -2 : -1] }\n )[0];\n if (attributes.wIsConst && !context.kernelCustomData.wT) {\n context.kernelCustomData.wT = transposedWeight;\n }\n const convInputs = [inputs[0], transposedWeight];\n if (hasBias) {\n convInputs.push(inputs[2]);\n }\n const dimAOuter = isChannelsLast ? outHeight * outWidth : outChannels;\n const dimBOuter = isChannelsLast ? outChannels : outHeight * outWidth;\n const dimInner = weightHeight * weightWidth * inputChannels;\n context.compute(\n createConv2DMatMulProgramInfo(\n convInputs,\n adjustedAttributes,\n outputShape,\n dimAOuter,\n dimBOuter,\n dimInner,\n hasBias,\n sequentialAccessByThreads\n ),\n { inputs: convInputs }\n );\n };\n conv1d = (context, attributes) => {\n const isChannelLast = attributes.format === "NHWC";\n const inputs = [\n context.inputs[0].reshape(\n isChannelLast ? (\n // [N, W, C] -> [N, H=1, W, C]\n [context.inputs[0].dims[0], 1, context.inputs[0].dims[1], context.inputs[0].dims[2]]\n ) : (\n // [N, C, W] -> [N, C, H=1, W]\n [context.inputs[0].dims[0], context.inputs[0].dims[1], 1, context.inputs[0].dims[2]]\n )\n ),\n //[FILTER_OUT_CHANNEL, FILTER_IN_CHANNEL, kW] -> [FILTER_OUT_CHANNEL, FILTER_IN_CHANNEL, kH=1, kW]\n context.inputs[1].reshape([context.inputs[1].dims[0], context.inputs[1].dims[1], 1, context.inputs[1].dims[2]])\n ];\n if (context.inputs.length === 3) {\n inputs.push(context.inputs[2]);\n }\n const pads = [0, attributes.pads[0], 0, attributes.pads[1]];\n const strides = [1].concat(attributes.strides);\n const dilations = [1].concat(attributes.dilations);\n const kernelShape = [1].concat(attributes.kernelShape);\n const adjustedAttributes = getAdjustedConvAttributes({ ...attributes, pads, strides, dilations, kernelShape }, inputs);\n context.compute(createGroupedConvProgramInfo(\n inputs,\n adjustedAttributes,\n (outputShape) => isChannelLast ? [outputShape[0], outputShape[2], outputShape[3]] : []\n ));\n };\n conv = (context, attributes) => {\n validateInputs9(context.inputs, attributes);\n if (context.inputs[0].dims.length === 3) {\n conv1d(context, attributes);\n } else {\n conv2d(context, context.inputs, attributes);\n }\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_backprop_mm_webgpu.ts\n var conv2dTransposeCommonSnippet, createConv2DTransposeMatMulProgramInfo;\n var init_conv_backprop_mm_webgpu = __esm({\n "web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_backprop_mm_webgpu.ts"() {\n "use strict";\n init_wasm_common();\n init_log();\n init_common();\n init_fuse_utils();\n init_activation_util();\n init_conv_util();\n init_matmul_packed_webgpu();\n conv2dTransposeCommonSnippet = (isChannelsLast, addBias = false, attributes, type, innerElementSize = 4) => {\n const getWSnippet = (innerElementSize2) => {\n switch (innerElementSize2) {\n case 1:\n return "return w[getIndexFromCoords4D(coord, vec4(uniforms.w_shape))];";\n case 4:\n return `\n let coord1 = vec4(coordX, coordY, col + 1, rowInner);\n let coord2 = vec4(coordX, coordY, col + 2, rowInner);\n let coord3 = vec4(coordX, coordY, col + 3, rowInner);\n let v0 = w[getIndexFromCoords4D(coord, vec4(uniforms.w_shape))];\n let v1 = w[getIndexFromCoords4D(coord1, vec4(uniforms.w_shape))];\n let v2 = w[getIndexFromCoords4D(coord2, vec4(uniforms.w_shape))];\n let v3 = w[getIndexFromCoords4D(coord3, vec4(uniforms.w_shape))];\n return ${type}(v0, v1, v2, v3);\n `;\n default:\n throw new Error(`innerElementSize ${innerElementSize2} is not supported.`);\n }\n };\n const coordASnippet = isChannelsLast ? `\n let coord = vec4(batch, iXR, iXC, xCh);\n ` : `\n let coord = vec4(batch, xCh, iXR, iXC);\n `;\n const coordResSnippet = isChannelsLast ? `\n let coords = vec4(\n batch,\n row / outWidth,\n row % outWidth,\n col);\n ` : `\n let coords = vec4(\n batch,\n row,\n col / outWidth,\n col % outWidth);\n `;\n const xHeight = isChannelsLast ? "i32(uniforms.x_shape[1])" : "i32(uniforms.x_shape[2])";\n const xWidth = isChannelsLast ? "i32(uniforms.x_shape[2])" : "i32(uniforms.x_shape[3])";\n const row = isChannelsLast ? "row" : "col";\n const col = isChannelsLast ? "col" : "row";\n const readASnippet = `\n let inChannels = ${isChannelsLast ? "i32(uniforms.x_shape[3])" : "i32(uniforms.x_shape[1])"};\n let outWidth = ${isChannelsLast ? "i32(uniforms.result_shape[2])" : "i32(uniforms.result_shape[3])"};\n let outRow = ${row} / outWidth;\n let outCol = ${row} % outWidth;\n\n let WRow = ${col} / (uniforms.filter_dims[1] * inChannels);\n let WCol = ${col} / inChannels % uniforms.filter_dims[1];\n let xR = f32(outRow - uniforms.pads[0] + uniforms.dilations[0] * WRow) / f32(uniforms.strides[0]);\n let xC = f32(outCol - uniforms.pads[1] + uniforms.dilations[1] * WCol) / f32(uniforms.strides[1]);\n if (xR < 0.0 || xR >= f32(${xHeight}) || fract(xR) > 0.0) {\n return ${type}(0.0);\n }\n if (xC < 0.0 || xC >= f32(${xWidth}) || fract(xC) > 0.0) {\n return ${type}(0.0);\n }\n let iXR = i32(xR);\n let iXC = i32(xC);\n let xCh = ${col} % inChannels;\n ${coordASnippet}\n return x[getIndexFromCoords4D(coord, vec4(uniforms.x_shape))/${innerElementSize}];`;\n const sampleA = isChannelsLast ? `\n let col = colIn * ${innerElementSize};\n if (row < uniforms.dim_a_outer && col < uniforms.dim_inner) {\n ${readASnippet}\n }\n return ${type}(0.0);` : `\n let col = colIn * ${innerElementSize};\n if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) {\n ${readASnippet}\n }\n return ${type}(0.0);`;\n const sampleW = `\n let col = colIn * ${innerElementSize};\n let inChannels = ${isChannelsLast ? "i32(uniforms.x_shape[3])" : "i32(uniforms.x_shape[1])"};\n let coordX = uniforms.filter_dims[0] - 1 - row / (uniforms.filter_dims[1] * inChannels);\n let coordY = uniforms.filter_dims[1] - 1 - (row / inChannels) % uniforms.filter_dims[1];\n if (${isChannelsLast ? "row < uniforms.dim_inner && col < uniforms.dim_b_outer" : "row < uniforms.dim_inner && col < uniforms.dim_a_outer"} && coordX >= 0 && coordY >= 0) {\n let rowInner = row % inChannels;\n let coord = vec4(coordX, coordY, col, rowInner);\n ${getWSnippet(innerElementSize)}\n }\n return ${type}(0.0);\n `;\n const applyActivation = getActivationSnippet(attributes, type);\n const userCode = `\n fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${type} {\n ${isChannelsLast ? sampleA : sampleW}\n }\n\n fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${type} {\n ${isChannelsLast ? sampleW : sampleA}\n }\n\n fn mm_write(batch: i32, row : i32, colIn : i32, valueInput : ${type}) {\n let col = colIn * ${innerElementSize};\n if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) {\n var value = valueInput;\n let outWidth = ${isChannelsLast ? "i32(uniforms.result_shape[2])" : "i32(uniforms.result_shape[3])"};\n ${coordResSnippet}\n ${biasSnippet(addBias)}\n ${applyActivation}\n result[getIndexFromCoords4D(coords, vec4(uniforms.result_shape))/${innerElementSize}] = value;\n }\n }`;\n return userCode;\n };\n createConv2DTransposeMatMulProgramInfo = (inputs, attributes, outputShape, dimAOuter, dimBOuter, dimInner, hasBias, sequentialAccessByThreads) => {\n const isChannelsLast = attributes.format === "NHWC";\n const inChannels = isChannelsLast ? inputs[0].dims[3] : inputs[0].dims[1];\n const batchSize = outputShape[0];\n const outWidth = isChannelsLast ? outputShape[2] : outputShape[3];\n const outHeight = isChannelsLast ? outputShape[1] : outputShape[2];\n const outChannels = isChannelsLast ? outputShape[3] : outputShape[1];\n const isVec4 = isChannelsLast && (inChannels % 4 === 0 && inChannels % 3) && outChannels % 4 === 0;\n const dispatchX = isChannelsLast ? outChannels : outWidth * outHeight;\n const dispatchY = isChannelsLast ? outWidth * outHeight : outChannels;\n const workGroupSize = [8, 8, 1];\n const elementsPerThread = dimAOuter <= 8 ? [4, 1, 1] : [4, 4, 1];\n const dispatch = [\n Math.ceil(dispatchX / workGroupSize[0] / elementsPerThread[0]),\n Math.ceil(dispatchY / workGroupSize[1] / elementsPerThread[1]),\n Math.ceil(batchSize / workGroupSize[2] / elementsPerThread[2])\n ];\n LOG_DEBUG("verbose", () => `[conv_backprop_mm_webgpu] dispatch = ${dispatch}`);\n const innerElementSize = isVec4 ? 4 : 1;\n const tileInner = Math.max(workGroupSize[0] * innerElementSize, workGroupSize[1]);\n const components = isVec4 ? 4 : 1;\n const filterDims = [attributes.kernelShape[isChannelsLast ? 1 : 2], attributes.kernelShape[isChannelsLast ? 2 : 3]];\n const effectiveFilterDims = [\n filterDims[0] + (attributes.dilations[0] <= 1 ? 0 : (filterDims[0] - 1) * (attributes.dilations[0] - 1)),\n filterDims[1] + (attributes.dilations[1] <= 1 ? 0 : (filterDims[1] - 1) * (attributes.dilations[1] - 1))\n ];\n const pads = [\n effectiveFilterDims[0] - 1 - Math.floor((attributes.pads[0] + attributes.pads[2]) / 2),\n effectiveFilterDims[1] - 1 - Math.floor((attributes.pads[1] + attributes.pads[3]) / 2)\n ];\n const programUniforms = [\n { type: 6 /* int32 */, data: dimAOuter },\n { type: 6 /* int32 */, data: dimBOuter },\n { type: 6 /* int32 */, data: dimInner },\n { type: 6 /* int32 */, data: attributes.strides },\n { type: 6 /* int32 */, data: attributes.dilations },\n { type: 6 /* int32 */, data: filterDims },\n { type: 6 /* int32 */, data: pads }\n ];\n appendActivationUniformsData(attributes, programUniforms);\n programUniforms.push(...createTensorShapeVariables(inputs[0].dims, inputs[1].dims));\n const inputDependencies = ["rank", "rank"];\n if (hasBias) {\n programUniforms.push(...createTensorShapeVariables(inputs[2].dims));\n inputDependencies.push("rank");\n }\n programUniforms.push(...createTensorShapeVariables(outputShape));\n const getShaderSource = (shaderHelper) => {\n const x = inputVariable("x", inputs[0].dataType, inputs[0].dims.length, components);\n const w = inputVariable("w", inputs[1].dataType, inputs[1].dims.length, 1);\n const output = outputVariable("result", inputs[0].dataType, outputShape.length, components);\n const inputVariables = [x, w];\n let declareFunctions = "";\n if (hasBias) {\n const bias = inputVariable("bias", inputs[2].dataType, inputs[2].dims.length, components);\n inputVariables.push(bias);\n declareFunctions += `\n fn getBiasByOutputCoords(coords : vec4) -> ${bias.type.value} {\n return bias[coords.${isChannelsLast ? "w" : "y"}${isVec4 ? "/ 4" : ""}];\n }`;\n }\n const uniforms = [\n { name: "dim_a_outer", type: "i32" },\n { name: "dim_b_outer", type: "i32" },\n { name: "dim_inner", type: "i32" },\n { name: "strides", type: "i32", length: 2 },\n { name: "dilations", type: "i32", length: 2 },\n { name: "filter_dims", type: "i32", length: filterDims.length },\n { name: "pads", type: "i32", length: pads.length }\n ];\n appendActivationUniforms(attributes, uniforms);\n const elemType = tensorTypeToWsglStorageType(inputs[0].dataType, 1);\n if (elemType !== "f16" && elemType !== "f32") {\n throw new Error(`elemType ${elemType} is not supported.`);\n }\n return `\n ${utilFunctions("uniforms.result_strides")}\n ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVariables, output)};\n ${declareFunctions}\n ${conv2dTransposeCommonSnippet(isChannelsLast, hasBias, attributes, x.type.value, innerElementSize)}\n ${isVec4 ? makeMatMulPackedVec4Source(\n elementsPerThread,\n workGroupSize,\n elemType,\n void 0,\n !isChannelsLast,\n tileInner\n ) : makeMatMulPackedSource(\n elementsPerThread,\n workGroupSize,\n elemType,\n void 0,\n !isChannelsLast,\n tileInner,\n false,\n void 0,\n sequentialAccessByThreads\n )}`;\n };\n return {\n name: "Conv2DTransposeMatMul",\n shaderCache: { hint: `${attributes.cacheKey};${elementsPerThread};${workGroupSize};${isVec4}`, inputDependencies },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: dispatch[0], y: dispatch[1], z: dispatch[2] },\n programUniforms\n }),\n getShaderSource\n };\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_backprop_webgpu.ts\n var createConvTranspose2DOpProgramShaderSource, createConvTranspose2DProgramInfo;\n var init_conv_backprop_webgpu = __esm({\n "web/lib/wasm/jsep/webgpu/ops/3rd-party/conv_backprop_webgpu.ts"() {\n "use strict";\n init_wasm_common();\n init_log();\n init_util();\n init_common();\n createConvTranspose2DOpProgramShaderSource = (shaderHelper, inputs, outputShape, hasBias, is1DimensionDispatch, isVec4 = false, dataType, uniforms, isChannelsLast = false) => {\n const rowDim = isChannelsLast ? 1 : 2;\n const colDim = isChannelsLast ? 2 : 3;\n const channelDim = isChannelsLast ? 3 : 1;\n const workPerThread = isVec4 ? 2 : 1;\n let declareFunctions = `\n fn setOutputAtIndex(flatIndex : u32, value : ${isVec4 ? `vec4<${dataType}>` : dataType}) {\n result[flatIndex] = ${isVec4 ? `vec4<${dataType}>` : dataType}(value);\n }`;\n if (hasBias) {\n declareFunctions += `\n fn getBiasByOutputCoords(coords : vec4) -> ${isVec4 ? `vec4<${dataType}>` : dataType} {\n return bias[coords.${isChannelsLast ? "w" : "y"}${isVec4 ? "/ 4" : ""}];\n }`;\n }\n const components = isVec4 ? 4 : 1;\n const w = inputVariable("W", inputs[1].dataType, inputs[1].dims.length, components);\n const dy = inputVariable("Dy", inputs[0].dataType, inputs[0].dims.length, components);\n const inputVariables = [dy, w];\n if (hasBias) {\n inputVariables.push(inputVariable("bias", inputs[2].dataType, [outputShape[channelDim]].length, components));\n }\n const output = outputVariable("result", inputs[0].dataType, outputShape.length, components);\n const codeSnippet4 = `{\n let batch: u32 = ${is1DimensionDispatch ? "global_id.z" : "workgroup_id.z"} / uniforms.result_shape[1];\n let r = ${is1DimensionDispatch ? "global_id.z" : "workgroup_id.z"} % uniforms.result_shape[1];\n let c = ${is1DimensionDispatch ? "global_id.y" : "workgroup_id.y"} * ${workPerThread};\n let d1: u32 = ${is1DimensionDispatch ? "global_id.x" : "workgroup_id.x"} * 4;\n\n let dyCorner = vec2(i32(r), i32(c)) - vec2(uniforms.pads);\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n var dotProd: array, ${workPerThread}>;\n for (var i = 0; i < ${workPerThread}; i++) {\n dotProd[i] = vec4<${dataType}>(0.0);\n }\n for (var wR: u32 = 0; wR < uniforms.filter_dims[0]; wR = wR + 1) {\n var dyR = (${dataType}(dyCorner.x) + ${dataType}(wR)) / ${dataType}(uniforms.strides.x);\n let wRPerm = uniforms.filter_dims[0] - 1 - wR;\n if (dyR < 0.0 || dyR >= ${dataType}(uniforms.Dy_shape[1]) ||\n fract(dyR) > 0.0 || wRPerm < 0) {\n continue;\n }\n let idyR: u32 = u32(dyR);\n\n for (var wC: u32 = 0; wC < uniforms.filter_dims[1]; wC = wC + 1) {\n let dyC = (${dataType}(dyCorner.y) + ${dataType}(wC)) / ${dataType}(uniforms.strides.y);\n let dyC2 = (${dataType}(dyCorner.y) + 1.0 + ${dataType}(wC)) / ${dataType}(uniforms.strides.y);\n let wCPerm = uniforms.filter_dims[1] - 1 - wC;\n if (wCPerm < 0) {\n continue;\n }\n var bDyCVal = true;\n var bDyCVal2 = true;\n if (dyC < 0.0 || dyC >= ${dataType}(uniforms.Dy_shape[2]) ||\n fract(dyC) > 0.0) {\n bDyCVal = false;\n }\n if (dyC2 < 0.0 || dyC2 >= ${dataType}(uniforms.Dy_shape[2]) ||\n fract(dyC2) > 0.0) {\n bDyCVal2 = false;\n }\n\n let idyC: u32 = u32(dyC);\n let idyC2: u32 = u32(dyC2);\n if (bDyCVal && bDyCVal2) {\n let d2Length = uniforms.Dy_shape[3];\n for (var d2 :u32 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1", "d2")};\n let wValue1 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 1", "d2")};\n let wValue2 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 2", "d2")};\n let wValue3 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 3", "d2")};\n\n var xValue = ${dy.get("batch", "idyR", "idyC", "d2")};\n let tmpval = vec4<${dataType}>(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[0] = dotProd[0] + tmpval;\n\n xValue = ${dy.get("batch", "idyR", "idyC2", "d2")};\n\n dotProd[1] = dotProd[1] + vec4<${dataType}>(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n }\n } else if (bDyCVal) {\n let d2Length = uniforms.Dy_shape[${channelDim}];\n for (var d2: u32 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1", "d2")};\n let wValue1 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 1", "d2")};\n let wValue2 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 2", "d2")};\n let wValue3 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 3", "d2")};\n\n var xValue = ${dy.get("batch", "idyR", "idyC", "d2")};\n let tmpval = vec4<${dataType}>(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[0] = dotProd[0] + tmpval;\n }\n } else if (bDyCVal2) {\n let d2Length = uniforms.Dy_shape[3];\n for (var d2: u32 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1", "d2")};\n let wValue1 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 1", "d2")};\n let wValue2 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 2", "d2")};\n let wValue3 = ${w.get("u32(wRPerm)", "u32(wCPerm)", "d1 + 3", "d2")};\n\n var xValue = ${dy.get("batch", "idyR", "idyC2", "d2")};\n let tmpval = vec4<${dataType}>(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[1] = dotProd[1] + tmpval;\n }\n }\n }\n }\n\n for (var i: u32 = 0; i < ${workPerThread}; i = i + 1) {\n let value = dotProd[i] + ${hasBias ? "bias[c+i]" : `vec4<${dataType}>(0.0)`};\n ${output.set("batch", "r", "c + i", "d1", "value")};\n }\n }`;\n const codeSnippet = `\n let outputIndices = ${output.offsetToIndices("global_idx")};\n let batch = ${output.indicesGet("outputIndices", 0)};\n let d1 = ${output.indicesGet("outputIndices", channelDim)};\n let r = ${output.indicesGet("outputIndices", rowDim)};\n let c = ${output.indicesGet("outputIndices", colDim)};\n let dyCorner = vec2(i32(r), i32(c)) - uniforms.pads;\n let dyRCorner = dyCorner.x;\n let dyCCorner = dyCorner.y;\n let groupId = d1 / uniforms.output_channels_per_group;\n let wOutChannel = d1 - groupId * uniforms.output_channels_per_group;\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = ${dataType}(0.0);\n for (var wR: u32 = 0; wR < uniforms.effective_filter_dims.x; wR = wR + 1) {\n if (wR % uniforms.dilations.x != 0) {\n continue;\n }\n let dyR = (${dataType}(dyRCorner) + ${dataType}(wR)) / ${dataType}(uniforms.strides[0]);\n let wRPerm = uniforms.filter_dims.x - 1 - wR / uniforms.dilations.x;\n if (dyR < 0.0 || dyR >= ${dataType}(uniforms.Dy_shape[${rowDim}]) || fract(dyR) > 0.0 ||\n wRPerm < 0) {\n continue;\n }\n let idyR: u32 = u32(dyR);\n\n for (var wC: u32 = 0; wC < uniforms.effective_filter_dims.y; wC = wC + 1) {\n if (wC % uniforms.dilations.y != 0) {\n continue;\n }\n let dyC = (${dataType}(dyCCorner) + ${dataType}(wC)) / ${dataType}(uniforms.strides.y);\n let wCPerm = uniforms.filter_dims.y - 1 - wC / uniforms.dilations.y;\n if (dyC < 0.0 || dyC >= ${dataType}(uniforms.Dy_shape[${colDim}]) ||\n fract(dyC) > 0.0 || wCPerm < 0) {\n continue;\n }\n let idyC: u32 = u32(dyC);\n var inputChannel = groupId * uniforms.input_channels_per_group;\n for (var d2: u32 = 0; d2 < uniforms.input_channels_per_group; d2 = d2 + 1) {\n let xValue = ${isChannelsLast ? dy.get("batch", "idyR", "idyC", "inputChannel") : dy.get("batch", "inputChannel", "idyR", "idyC")};\n let wValue = ${w.get("inputChannel", "wOutChannel", "u32(wRPerm)", "u32(wCPerm)")};\n dotProd = dotProd + xValue * wValue;\n inputChannel = inputChannel + 1;\n }\n }\n }\n let value = dotProd + ${hasBias ? "bias[d1]" : `${dataType}(0.0)`};\n ${output.setByOffset("global_idx", "value")};\n `;\n return `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVariables, output)}\n ${declareFunctions}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")};\n ${isVec4 ? codeSnippet4 : codeSnippet}}`;\n };\n createConvTranspose2DProgramInfo = (inputs, attributes, squeezeOutputShapeFunction) => {\n const hasBias = inputs.length > 2;\n const outputShape = attributes.outputShape;\n const outputSize = ShapeUtil.size(outputShape);\n const dispatch = [\n Math.ceil(outputSize / 64),\n 1,\n 1\n ];\n LOG_DEBUG("verbose", () => `[conv2d_backprop_webgpu] dispatch = ${dispatch}`);\n const isChannelsLast = attributes.format === "NHWC";\n const inputDependencies = ["rank", "rank"];\n const strides = [attributes.strides[0], attributes.strides[1]];\n const filterDims = [attributes.kernelShape[isChannelsLast ? 1 : 2], attributes.kernelShape[isChannelsLast ? 2 : 3]];\n const dilations = [attributes.dilations[0], attributes.dilations[1]];\n const effectiveFilterDims = [\n filterDims[0] + (attributes.dilations[0] <= 1 ? 0 : (attributes.kernelShape[isChannelsLast ? 1 : 2] - 1) * (attributes.dilations[0] - 1)),\n filterDims[1] + (attributes.dilations[1] <= 1 ? 0 : (attributes.kernelShape[isChannelsLast ? 2 : 3] - 1) * (attributes.dilations[1] - 1))\n ];\n const pads = [\n effectiveFilterDims[0] - 1 - Math.floor((attributes.pads[0] + attributes.pads[2]) / 2),\n effectiveFilterDims[1] - 1 - Math.floor(attributes.pads[1] + attributes.pads[3]) / 2\n ];\n const isVec4 = false;\n const group = attributes.group;\n const wShape = inputs[1].dims;\n const inputChannelsPerGroup = wShape[0] / group;\n const outputChannelsPerGroup = wShape[1];\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 12 /* uint32 */, data: strides },\n { type: 12 /* uint32 */, data: filterDims },\n { type: 12 /* uint32 */, data: dilations },\n { type: 12 /* uint32 */, data: effectiveFilterDims },\n { type: 6 /* int32 */, data: pads },\n { type: 12 /* uint32 */, data: inputChannelsPerGroup },\n { type: 12 /* uint32 */, data: outputChannelsPerGroup },\n ...createTensorShapeVariables(inputs[0].dims, inputs[1].dims)\n ];\n if (hasBias) {\n programUniforms.push(...createTensorShapeVariables(inputs[2].dims));\n inputDependencies.push("rank");\n }\n programUniforms.push(...createTensorShapeVariables(outputShape));\n const is1DimensionDispatch = dispatch[1] === 1 && dispatch[2] === 1;\n const getShaderSource = (shaderHelper) => {\n const uniforms = [\n { name: "output_size", type: "u32" },\n { name: "strides", type: "u32", length: strides.length },\n { name: "filter_dims", type: "u32", length: filterDims.length },\n { name: "dilations", type: "u32", length: filterDims.length },\n { name: "effective_filter_dims", type: "u32", length: effectiveFilterDims.length },\n { name: "pads", type: "i32", length: pads.length },\n { name: "input_channels_per_group", type: "u32" },\n { name: "output_channels_per_group", type: "u32" }\n ];\n const dataType = tensorTypeToWsglStorageType(inputs[0].dataType);\n return `${createConvTranspose2DOpProgramShaderSource(\n shaderHelper,\n inputs,\n outputShape,\n hasBias,\n is1DimensionDispatch,\n isVec4,\n dataType,\n uniforms,\n isChannelsLast\n )}`;\n };\n return {\n name: "ConvTranspose2D",\n shaderCache: { hint: `${attributes.cacheKey};`, inputDependencies },\n getRunData: () => ({\n dispatchGroup: { x: dispatch[0], y: dispatch[1], z: dispatch[2] },\n outputs: [{\n dims: squeezeOutputShapeFunction ? squeezeOutputShapeFunction(outputShape) : outputShape,\n dataType: inputs[0].dataType\n }],\n programUniforms\n }),\n getShaderSource\n };\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/conv-transpose.ts\n var computeTotalPad, distributePadding, calculateOutputShapeAndPads, getAdjustedConvTransposeAttributes, parseConvTransposeAttributes, validateInputs10, weightTransposePerm, convTranspose2d, convTranspose1d, convTranspose;\n var init_conv_transpose = __esm({\n "web/lib/wasm/jsep/webgpu/ops/conv-transpose.ts"() {\n "use strict";\n init_conv_backprop_mm_webgpu();\n init_conv_backprop_webgpu();\n init_fuse_utils();\n init_transpose();\n computeTotalPad = (inDim, stride, adj, kernel, dilation, outSize) => (inDim - 1) * stride + adj + (kernel - 1) * dilation + 1 - outSize;\n distributePadding = (totalPad, autoPad, pads, head, tail) => {\n const smallPad = Math.floor(totalPad / 2);\n if (autoPad === "SAME_UPPER") {\n pads[head] = smallPad;\n pads[tail] = totalPad - smallPad;\n } else if (autoPad === "SAME_LOWER") {\n pads[head] = totalPad - smallPad;\n pads[tail] = smallPad;\n }\n };\n calculateOutputShapeAndPads = (inputShape, kernelShape, dilations, autoPad, group, pads, strides, isChannelLast, outputPadding, outputShape) => {\n const spatialRank = inputShape.length - 2;\n const updateOutputShape = outputShape.length === 0;\n if (outputPadding.length === 0) {\n for (let i = 0; i < spatialRank; ++i) {\n outputPadding.push(0);\n }\n }\n const batchSize = inputShape[0];\n const outChannels = kernelShape[isChannelLast ? 3 : 1] * group;\n for (let i = 0, j = inputShape.length - spatialRank - (isChannelLast ? 1 : 0); i < spatialRank; ++i, ++j) {\n const inSize = inputShape[j];\n const outSize = updateOutputShape ? inSize * strides[i] : outputShape[i];\n const totalPad = computeTotalPad(inSize, strides[i], pads[i], kernelShape[j], dilations[i], outSize);\n distributePadding(totalPad, autoPad, pads, i, i + spatialRank);\n if (updateOutputShape) {\n outputShape.push(\n strides[i] * (inSize - 1) + outputPadding[i] + (kernelShape[j] - 1) * dilations[i] + 1 - pads[i] - pads[i + spatialRank]\n );\n }\n }\n outputShape.splice(0, 0, batchSize);\n outputShape.splice(isChannelLast ? 3 : 1, 0, outChannels);\n };\n getAdjustedConvTransposeAttributes = (attributes, inputs) => {\n const kernelShape = attributes.kernelShape.slice();\n if (attributes.kernelShape.length === 0 || attributes.kernelShape.reduce((a, b) => a * b, 1) === 0) {\n kernelShape.length = 0;\n for (let i = 2; i < inputs[1].dims.length; ++i) {\n kernelShape.push(inputs[1].dims[i]);\n }\n }\n const isChannelsLast = attributes.format === "NHWC";\n kernelShape.splice(0, 0, inputs[1].dims[0]);\n kernelShape.splice(isChannelsLast ? 3 : 1, 0, inputs[1].dims[1]);\n const pads = attributes.pads.slice();\n const outputShape = attributes.outputShape.slice();\n const outputPadding = attributes.outputPadding.slice();\n const inputShape = inputs[0].dims;\n let dilations = attributes.dilations.slice();\n if (dilations.reduce((a, b) => a + b, 0) === 0) {\n const spatialRank = inputs[0].dims.length - 2;\n dilations = new Array(spatialRank).fill(1);\n }\n let strides = attributes.strides.slice();\n if (strides.reduce((a, b) => a + b, 0) === 0) {\n const spatialRank = inputs[0].dims.length - 2;\n strides = new Array(spatialRank).fill(1);\n }\n calculateOutputShapeAndPads(\n inputShape,\n kernelShape,\n dilations,\n attributes.autoPad,\n attributes.group,\n pads,\n strides,\n isChannelsLast,\n outputPadding,\n outputShape\n );\n const newAttributes = Object.assign({}, attributes);\n Object.assign(newAttributes, { kernelShape, pads, outputPadding, outputShape, dilations, strides });\n return newAttributes;\n };\n parseConvTransposeAttributes = (attributes) => {\n const activationAttributes = parseInternalActivationAttributes(attributes);\n const format = attributes.format;\n const autoPad = [\n "NOTSET",\n "VALID",\n "SAME_UPPER",\n "SAME_LOWER"\n ][typeof attributes.autoPad == "undefined" ? 0 : attributes.autoPad];\n const dilations = attributes.dilations;\n const group = attributes.group;\n const kernelShape = attributes.kernelShape;\n const pads = attributes.pads;\n const strides = attributes.strides;\n const wIsConst = attributes.wIsConst();\n const outputPadding = attributes.outputPadding;\n const outputShape = attributes.outputShape;\n return {\n autoPad,\n format,\n dilations,\n group,\n kernelShape,\n outputPadding,\n outputShape,\n pads,\n strides,\n wIsConst,\n ...activationAttributes,\n cacheKey: `${attributes.format};${activationAttributes.activation};`\n };\n };\n validateInputs10 = (inputs, attributes) => {\n if (!inputs || inputs.length !== 2 && inputs.length !== 3) {\n throw new Error("Conv requires 2 or 3 inputs");\n }\n if (inputs[0].dims.length !== 4 && inputs[0].dims.length !== 3) {\n throw new Error("currently only support 2-dimensional conv");\n }\n if (inputs[0].dims.length !== inputs[1].dims.length) {\n throw new Error("filter does not have same dimension as input");\n }\n const dataChannel = inputs[0].dims[attributes.format === "NHWC" ? inputs[0].dims.length - 1 : 1];\n const filterInChannel = inputs[1].dims[0];\n if (dataChannel !== filterInChannel) {\n throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");\n }\n const featureMaps = inputs[1].dims[1] * attributes.group;\n if (inputs.length === 3 && (inputs[2].dims.length !== 1 || inputs[2].dims[0] !== featureMaps)) {\n throw new Error("invalid bias");\n }\n const spatialRank = inputs[0].dims.length - 2;\n const dilationsSet = attributes.dilations.reduce((a, b) => a + b, 0) > 0;\n if (dilationsSet && attributes.dilations.length !== spatialRank) {\n throw new Error(`dilations should be ${spatialRank}D`);\n }\n const stridesSet = attributes.strides.reduce((a, b) => a + b, 0) > 0;\n if (stridesSet && attributes.strides.length !== spatialRank) {\n throw new Error(`strides should be ${spatialRank}D`);\n }\n const padsSet = attributes.pads.reduce((a, b) => a + b, 0) > 0;\n if (padsSet && attributes.pads.length !== spatialRank * 2) {\n throw new Error(`pads should be ${spatialRank * 2}D`);\n }\n if (attributes.outputPadding.length !== spatialRank && attributes.outputPadding.length !== 0) {\n throw new Error(`output_padding should be ${spatialRank}D`);\n }\n const kernelShapeSet = attributes.kernelShape.reduce((a, b) => a + b, 0) > 0;\n if (kernelShapeSet && attributes.kernelShape.length !== 0 && attributes.kernelShape.length !== inputs[1].dims.length - 2) {\n throw new Error("invalid kernel shape");\n }\n if (attributes.outputShape.length !== 0 && attributes.outputShape.length !== inputs[0].dims.length - 2) {\n throw new Error("invalid output shape");\n }\n };\n weightTransposePerm = [2, 3, 1, 0];\n convTranspose2d = (context, inputs, attributes) => {\n const adjustedAttributes = getAdjustedConvTransposeAttributes(attributes, inputs);\n const isChannelsLast = attributes.format === "NHWC";\n const outputShape = adjustedAttributes.outputShape;\n const outChannels = outputShape[isChannelsLast ? 3 : 1];\n const inputChannels = inputs[0].dims[isChannelsLast ? 3 : 1];\n if (adjustedAttributes.group !== 1 || outChannels === 1 && inputChannels === 1) {\n context.compute(createConvTranspose2DProgramInfo(inputs, adjustedAttributes));\n return;\n }\n const outHeight = outputShape[isChannelsLast ? 1 : 2];\n const outWidth = outputShape[isChannelsLast ? 2 : 3];\n const weightHeight = inputs[1].dims[2];\n const weightWidth = inputs[1].dims[3];\n const dimAOuter = isChannelsLast ? outHeight * outWidth : outChannels;\n const dimBOuter = isChannelsLast ? outChannels : outHeight * outWidth;\n const dimInner = weightHeight * weightWidth * inputChannels;\n const sequentialAccessByThreads = (\n /* backend.adapterInfo.isIntel() */\n true\n );\n const transposedWeight = context.kernelCustomData.wT ?? context.compute(\n createTransposeProgramInfo(inputs[1], weightTransposePerm),\n { inputs: [1], outputs: [attributes.wIsConst ? -2 : -1] }\n )[0];\n if (attributes.wIsConst && !context.kernelCustomData.wT) {\n context.kernelCustomData.wT = transposedWeight;\n }\n const convTransposeInputs = [inputs[0], transposedWeight];\n const hasBias = inputs.length === 3;\n if (hasBias) {\n if (!isChannelsLast && inputs[2].dims.length === 1) {\n convTransposeInputs.push(inputs[2].reshape([inputs[2].dims[0], 1, 1]));\n } else {\n convTransposeInputs.push(inputs[2]);\n }\n }\n context.compute(\n createConv2DTransposeMatMulProgramInfo(\n convTransposeInputs,\n adjustedAttributes,\n outputShape,\n dimAOuter,\n dimBOuter,\n dimInner,\n hasBias,\n sequentialAccessByThreads\n ),\n { inputs: convTransposeInputs }\n );\n };\n convTranspose1d = (context, attributes) => {\n const isChannelLast = attributes.format === "NHWC";\n const inputs = [\n context.inputs[0].reshape(\n isChannelLast ? (\n // [N, W, C] -> [N, H=1, W, C]\n [context.inputs[0].dims[0], 1, context.inputs[0].dims[1], context.inputs[0].dims[2]]\n ) : (\n // [N, C, W] -> [N, C, H=1, W]\n [context.inputs[0].dims[0], context.inputs[0].dims[1], 1, context.inputs[0].dims[2]]\n )\n ),\n //[FILTER_OUT_CHANNEL, FILTER_IN_CHANNEL, kW] -> [FILTER_OUT_CHANNEL, FILTER_IN_CHANNEL, kH=1, kW]\n context.inputs[1].reshape([context.inputs[1].dims[0], context.inputs[1].dims[1], 1, context.inputs[1].dims[2]])\n ];\n if (context.inputs.length === 3) {\n inputs.push(context.inputs[2]);\n }\n let kernelShape = attributes.kernelShape;\n if (kernelShape.length === 0 || kernelShape[0] === 0) {\n kernelShape = [context.inputs[1].dims[2]];\n }\n let dilations = attributes.dilations;\n if (dilations.length === 0 || dilations[0] === 0) {\n dilations = [1];\n }\n let strides = attributes.strides;\n if (strides.length === 0 || strides[0] === 0) {\n strides = [1];\n }\n let pads = attributes.pads;\n if (pads.length === 0) {\n pads = [0, 0];\n }\n pads = [0, pads[0], 0, pads[1]];\n strides = [1].concat(strides);\n dilations = [1].concat(dilations);\n kernelShape = [1].concat(kernelShape);\n const adjustedAttributes = getAdjustedConvTransposeAttributes({ ...attributes, pads, strides, dilations, kernelShape }, inputs);\n context.compute(createConvTranspose2DProgramInfo(\n inputs,\n adjustedAttributes,\n (outputShape) => isChannelLast ? [outputShape[0], outputShape[2], outputShape[3]] : [outputShape[0], outputShape[1], outputShape[3]]\n ));\n };\n convTranspose = (context, attributes) => {\n validateInputs10(context.inputs, attributes);\n if (context.inputs[0].dims.length === 3) {\n convTranspose1d(context, attributes);\n } else {\n convTranspose2d(context, context.inputs, attributes);\n }\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/cumsum.ts\n var createCumsumProgramInfo, cumsum, parseCumSumAttributes;\n var init_cumsum = __esm({\n "web/lib/wasm/jsep/webgpu/ops/cumsum.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n createCumsumProgramInfo = (inputType, inputShape, axisInput, attributes) => {\n const outputSize = ShapeUtil.size(inputShape);\n const rank = inputShape.length;\n const input = inputVariable("input", inputType, rank);\n const output = outputVariable("output", inputType, rank);\n const axisValue = axisInput.dataType === 6 /* int32 */ ? axisInput.getInt32Array()[0] : Number(axisInput.getBigInt64Array()[0]);\n const axis = ShapeUtil.normalizeAxis(axisValue, rank);\n const getShaderSource = (shaderHelper) => {\n const index = ` i32(${input.indicesGet("inputIndices", "uniforms.axis")}) `;\n const max = getElementAt("uniforms.input_shape", "uniforms.axis", rank);\n const lowerLimit = attributes.reverse ? index + (attributes.exclusive ? " + 1" : "") : "0";\n const upperLimit = attributes.reverse ? max : index + (attributes.exclusive ? "" : " + 1");\n return `\n ${shaderHelper.registerUniform("outputSize", "u32").registerUniform("axis", "u32").declareVariables(input, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}\n var inputIndices = ${output.offsetToIndices("global_idx")};\n var sum = ${output.type.value}(0);\n let first : i32 = ${lowerLimit};\n let last : i32 = ${upperLimit};\n for (var i : i32 = first; i < last; i++) {\n ${input.indicesSet("inputIndices", "uniforms.axis", "u32(i)")};\n sum = sum + ${input.getByIndices("inputIndices")};\n }\n ${output.setByOffset("global_idx", "sum")};\n }`;\n };\n return {\n name: "CumSum",\n shaderCache: { hint: attributes.cacheKey, inputDependencies: ["rank"] },\n getRunData: () => ({\n outputs: [{ dims: inputShape, dataType: inputType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms: [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 12 /* uint32 */, data: axis },\n ...createTensorShapeVariables(inputShape, inputShape)\n ]\n }),\n getShaderSource\n };\n };\n cumsum = (context, attributes) => {\n const inputShape = context.inputs[0].dims;\n const inputType = context.inputs[0].dataType;\n const axis = context.inputs[1];\n context.compute(createCumsumProgramInfo(inputType, inputShape, axis, attributes), { inputs: [0] });\n };\n parseCumSumAttributes = (attributes) => {\n const exclusive = attributes.exclusive === 1;\n const reverse = attributes.reverse === 1;\n return createAttributeWithCacheKey({ exclusive, reverse });\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/depth-to-space.ts\n var validateInputs11, permFunctionBody2, createDepthToSpaceProgramInfo, depthToSpace, parseDepthToSpaceAttributes;\n var init_depth_to_space = __esm({\n "web/lib/wasm/jsep/webgpu/ops/depth-to-space.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs11 = (inputs) => {\n if (!inputs || inputs.length !== 1) {\n throw new Error("DepthToSpace requires 1 input.");\n }\n if (inputs[0].dims.length !== 4) {\n throw new Error("DepthToSpace requires 4D input.");\n }\n };\n permFunctionBody2 = (perm, rank, input, output) => {\n const reverseFunc = [];\n reverseFunc.push(`fn perm(i: ${output.type.indices}) -> ${input.type.indices} {\n var a: ${input.type.indices};`);\n for (let i = 0; i < rank; ++i) {\n reverseFunc.push(input.indicesSet("a", perm[i], `i[${i}]`));\n }\n reverseFunc.push("return a;}");\n return reverseFunc.join("\\n");\n };\n createDepthToSpaceProgramInfo = (inputTensor, attributes) => {\n let n, h, w, c;\n let shape;\n let perm;\n const isChannelLast = attributes.format === "NHWC";\n const blocksize = attributes.blocksize;\n const isDCRmode = attributes.mode === "DCR";\n if (isChannelLast) {\n [n, h, w, c] = inputTensor.dims;\n shape = isDCRmode ? [n, h, w, blocksize, blocksize, c / blocksize ** 2] : [n, h, w, c / blocksize ** 2, blocksize, blocksize];\n perm = isDCRmode ? [0, 1, 3, 2, 4, 5] : [0, 1, 4, 2, 5, 3];\n } else {\n [n, h, w, c] = [inputTensor.dims[0], inputTensor.dims[2], inputTensor.dims[3], inputTensor.dims[1]];\n shape = isDCRmode ? [n, blocksize, blocksize, c / blocksize ** 2, h, w] : [n, c / blocksize ** 2, blocksize, blocksize, h, w];\n perm = isDCRmode ? [0, 3, 4, 1, 5, 2] : [0, 1, 4, 2, 5, 3];\n }\n const reshapedInputTensor = inputTensor.reshape(shape);\n const reshapedInputRank = reshapedInputTensor.dims.length;\n const inputDataType = inputTensor.dataType;\n const reshapedInput = inputVariable("a", inputDataType, reshapedInputRank);\n const permedOutput = outputVariable("output", inputDataType, reshapedInputRank);\n const getShaderSource = (shaderHelper) => `\n ${shaderHelper.registerUniform("output_size", "u32").declareVariables(reshapedInput, permedOutput)}\n\n ${permFunctionBody2(perm, reshapedInputRank, reshapedInput, permedOutput)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n\n let indices = ${permedOutput.offsetToIndices("global_idx")};\n let aIndices = perm(indices);\n\n ${permedOutput.setByOffset("global_idx", reshapedInput.getByIndices("aIndices"))}\n }`;\n return {\n name: "DepthToSpace",\n shaderCache: { hint: `${inputTensor.dims};${attributes.blocksize};${attributes.mode}`, inputDependencies: ["rank"] },\n getRunData: (inputs) => {\n const outputShape = isChannelLast ? [n, h * blocksize, w * blocksize, c / blocksize ** 2] : [n, c / blocksize ** 2, h * blocksize, w * blocksize];\n const outputSize = ShapeUtil.size(outputShape);\n const shapeBeforePerm = reshapedInputTensor.dims;\n const shapeAfterPerm = ShapeUtil.sortBasedOnPerm(shapeBeforePerm, perm);\n return {\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms: [{ type: 12 /* uint32 */, data: outputSize }, ...createTensorShapeVariables(shapeBeforePerm, shapeAfterPerm)]\n };\n },\n getShaderSource\n };\n };\n depthToSpace = (context, attributes) => {\n validateInputs11(context.inputs);\n context.compute(createDepthToSpaceProgramInfo(context.inputs[0], attributes));\n };\n parseDepthToSpaceAttributes = (attributes) => createAttributeWithCacheKey({\n blocksize: attributes.blocksize,\n mode: attributes.mode,\n format: attributes.format\n });\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/einsum.ts\n var symbolPattern, termPattern, termPatternOnly, lhsPattern, lhsPatternOnly, EinsumTerm, EinsumEquation, appendMax, createEinsumProgramInfo, einsum, parseEinsumAttributes;\n var init_einsum = __esm({\n "web/lib/wasm/jsep/webgpu/ops/einsum.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n symbolPattern = "[a-zA-Z]|\\\\.\\\\.\\\\.";\n termPattern = "(" + symbolPattern + ")+";\n termPatternOnly = "^" + termPattern + "$";\n lhsPattern = "(" + termPattern + ",)*" + termPattern;\n lhsPatternOnly = "^" + lhsPattern + "$";\n EinsumTerm = class {\n constructor(inputIndex = -1) {\n this.symbolToIndices = /* @__PURE__ */ new Map();\n this.inputIndex = inputIndex;\n }\n // Add a symbol to the term\n addSymbol(symbol, index) {\n let value = this.symbolToIndices.get(symbol);\n if (value === void 0) {\n value = [index];\n } else {\n value.push(index);\n }\n this.symbolToIndices.set(symbol, value);\n }\n // -1 for output and 0, 1, 2, ... for inputs\n };\n EinsumEquation = class {\n constructor(inputs, equation) {\n this.equation = equation;\n this.hasEllipsis = false;\n this.symbolToInfo = /* @__PURE__ */ new Map();\n this.lhs = new Array();\n this.outputDims = [];\n let [lhs, rhs] = equation.includes("->") ? equation.split("->", 2) : [equation, ""];\n if (!lhs.match(RegExp(lhsPatternOnly))) {\n throw new Error("Invalid LHS term");\n }\n const inputTerms = lhs.split(",");\n inputTerms.forEach((inputTerm, index) => {\n const dims = inputs[index].dims.slice();\n if (!inputTerm.match(RegExp(termPatternOnly))) {\n throw new Error("Invalid LHS term");\n }\n const einsumTerm = this.processTerm(inputTerm, true, dims, index);\n this.lhs.push(einsumTerm);\n });\n if (rhs === "") {\n rhs += [...this.symbolToInfo.entries()].filter(([sym, info]) => info.count === 1 || sym === "...").map(([sym]) => sym).join("");\n } else {\n if (!rhs.match(RegExp(termPattern))) {\n throw new Error("Invalid RHS");\n }\n }\n const rhsSymbols = rhs.match(RegExp(symbolPattern, "g"));\n rhsSymbols?.forEach((symbol) => {\n if (symbol === "...") {\n this.outputDims = this.outputDims.concat(this.ellipsisDims);\n } else {\n const info = this.symbolToInfo.get(symbol);\n if (info === void 0) {\n throw new Error("Invalid RHS symbol");\n }\n this.outputDims.push(info.dimValue);\n }\n });\n this.rhs = this.processTerm(rhs, false, this.outputDims);\n }\n // End of EinsumEqation constructor\n // Add a symbol to the equation\n addSymbol(symbol, dimValue, inputIndex) {\n let info = this.symbolToInfo.get(symbol);\n if (info !== void 0) {\n if (info.dimValue !== dimValue && info.count !== 1) {\n throw new Error("Dimension mismatch");\n } else {\n info.count++;\n info.inputIndices.push(inputIndex);\n }\n } else {\n info = { count: 1, dimValue, inputIndices: [inputIndex] };\n }\n this.symbolToInfo.set(symbol, info);\n }\n // Process one input/output term\n processTerm(term, isInput, dims, index = -1) {\n const rank = dims.length;\n let ellipsis = false;\n let ellipsisDims = [];\n let nextDim = 0;\n if (!term.match(RegExp(termPatternOnly)) && (!isInput && term !== "")) {\n throw new Error("Invalid LHS term");\n }\n const indexSymbols = term.match(RegExp(symbolPattern, "g"));\n const einsumTerm = new EinsumTerm(index);\n indexSymbols?.forEach((symbol, i) => {\n if (symbol === "...") {\n if (ellipsis) {\n throw new Error("Only one ellipsis is allowed per input term");\n }\n ellipsis = true;\n const ellipsisDimLength = rank - indexSymbols.length + 1;\n if (ellipsisDimLength < 0) {\n throw new Error("Ellipsis out of bounds");\n }\n ellipsisDims = dims.slice(nextDim, nextDim + ellipsisDimLength);\n if (this.hasEllipsis) {\n if (this.ellipsisDims.length !== ellipsisDims.length || this.ellipsisDims.toString() !== ellipsisDims.toString()) {\n throw new Error("Ellipsis dimensions mismatch");\n }\n } else if (isInput) {\n this.hasEllipsis = true;\n this.ellipsisDims = ellipsisDims;\n } else {\n throw new Error("Ellipsis must be specified in the LHS");\n }\n for (let j = 0; j < ellipsisDims.length; j++) {\n const symbol2 = String.fromCharCode("0".charCodeAt(0) + j);\n einsumTerm.addSymbol(symbol2, i + j);\n this.addSymbol(symbol2, dims[nextDim++], index);\n }\n } else {\n einsumTerm.addSymbol(symbol, i + (this.hasEllipsis ? this.ellipsisDims.length - 1 : 0));\n this.addSymbol(symbol, dims[nextDim++], index);\n }\n });\n return einsumTerm;\n }\n // Output dimensions of the equation\n };\n appendMax = (name) => name + "_max";\n createEinsumProgramInfo = (inputShapes, dataType, einsumEquation, outputShape) => {\n const ranks = inputShapes.map((dims) => dims.length);\n const inputVars = ranks.map((rank, index) => inputVariable(`input${index}`, dataType, rank));\n const outputSize = ShapeUtil.size(outputShape);\n const output = outputVariable("output", dataType, outputShape.length);\n const uniformsSymbols = [...einsumEquation.symbolToInfo.keys()].filter((symbol) => !einsumEquation.rhs.symbolToIndices.has(symbol));\n const getShaderSource = (shaderHelper) => {\n const idxCopy = [];\n const initProd = "var prod = 1.0;";\n const initSum = "var sum = 0.0;";\n const updateSum = "sum += prod;";\n const reduceOpsSetIndices = [];\n const reduceOpsLoopHeaders = [];\n const reduceOpsLoopFooters = [];\n const reduceOpCompute = [];\n const isReduceOpsWithoutLoop = einsumEquation.symbolToInfo.size === einsumEquation.rhs.symbolToIndices.size;\n einsumEquation.symbolToInfo.forEach((info, symbol) => {\n if (einsumEquation.rhs.symbolToIndices.has(symbol)) {\n const outputIndex = einsumEquation.rhs.symbolToIndices.get(symbol)?.[0];\n if (outputIndex !== void 0) {\n einsumEquation.lhs.forEach((term, i) => {\n if (info.inputIndices.includes(i)) {\n const indices = term.symbolToIndices.get(symbol);\n if (indices === void 0) {\n throw new Error("Invalid symbol error");\n }\n indices.forEach((index) => {\n idxCopy.push(`${inputVars[i].indicesSet(\n `input${i}Indices`,\n index,\n output.indicesGet("outputIndices", outputIndex)\n )}`);\n });\n }\n });\n }\n } else {\n einsumEquation.lhs.forEach((term, i) => {\n if (info.inputIndices.includes(i)) {\n const indices = term.symbolToIndices.get(symbol);\n if (indices === void 0) {\n throw new Error("Invalid symbol error");\n }\n indices.forEach((index) => {\n reduceOpsSetIndices.push(`${inputVars[i].indicesSet(`input${i}Indices`, index, `${symbol}`)}`);\n });\n reduceOpCompute.push(`prod *= ${inputVars[i].getByIndices(`input${i}Indices`)};`);\n }\n });\n reduceOpsLoopHeaders.push(\n `for(var ${symbol}: u32 = 0; ${symbol} < uniforms.${appendMax(symbol)}; ${symbol}++) {`\n );\n reduceOpsLoopFooters.push("}");\n }\n });\n const reduceOps2 = isReduceOpsWithoutLoop ? [\n ...idxCopy,\n `let sum = ${inputVars.map((inputVar, i) => inputVar.getByIndices(`input${i}Indices`)).join(" * ")};`\n ] : [\n ...idxCopy,\n initSum,\n ...reduceOpsLoopHeaders,\n ...reduceOpsSetIndices,\n initProd,\n ...reduceOpCompute,\n updateSum,\n ...reduceOpsLoopFooters\n ];\n return `\n ${shaderHelper.registerUniforms(uniformsSymbols.map((symbol) => ({ name: `${appendMax(symbol)}`, type: "u32" }))).registerUniform("outputSize", "u32").declareVariables(...inputVars, output)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}\n var outputIndices = ${output.offsetToIndices("global_idx")};\n ${inputVars.map((_var, i) => `var input${i}Indices: ${inputVars[i].type.indices};`).join("\\n")}\n ${reduceOps2.join("\\n")};\n ${output.setByOffset("global_idx", "sum")};\n }`;\n };\n return {\n name: "Einsum",\n shaderCache: { hint: einsumEquation.equation, inputDependencies: inputShapes.map(() => "rank") },\n getRunData: () => {\n const programUniformsInit = uniformsSymbols.filter((symbol) => einsumEquation.symbolToInfo.has(symbol)).map(\n (symbol) => ({ type: 12 /* uint32 */, data: einsumEquation.symbolToInfo.get(symbol)?.dimValue || 0 })\n );\n programUniformsInit.push({ type: 12 /* uint32 */, data: outputSize });\n const programUniforms = inputShapes.map((dims, _) => [...createTensorShapeVariables(dims)]).reduce((acc, inputProgramUniforms) => acc.concat(inputProgramUniforms), programUniformsInit);\n programUniforms.push(...createTensorShapeVariables(outputShape));\n return {\n outputs: [{ dims: outputShape, dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n };\n },\n getShaderSource\n };\n };\n einsum = (context, attributes) => {\n const einsumEquation = new EinsumEquation(context.inputs, attributes.equation);\n const outputShape = einsumEquation.outputDims;\n const inputShapes = context.inputs.map((input, _) => input.dims);\n context.compute(createEinsumProgramInfo(inputShapes, context.inputs[0].dataType, einsumEquation, outputShape));\n };\n parseEinsumAttributes = (attributes) => {\n const equation = attributes.equation.replace(/\\s+/g, "");\n return createAttributeWithCacheKey({ equation });\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/expand.ts\n var validateInputs12, getAdjustedShape, calculateOutputShape2, createExpandProgramInfo, expand;\n var init_expand = __esm({\n "web/lib/wasm/jsep/webgpu/ops/expand.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n validateInputs12 = (inputs) => {\n if (!inputs || inputs.length !== 2) {\n throw new Error("Expand requires 2 input.");\n }\n const inputShape = inputs[0].dims;\n const shape = Array.from(inputs[1].getBigInt64Array(), Number);\n let shapeIndex = shape.length < inputShape.length ? 0 : shape.length - inputShape.length;\n let inputShapeIndex = inputShape.length < shape.length ? 0 : inputShape.length - shape.length;\n for (; shapeIndex < shape.length && inputShapeIndex < inputShape.length; ++shapeIndex, ++inputShapeIndex) {\n if (shape[shapeIndex] !== inputShape[inputShapeIndex] && shape[shapeIndex] !== 1 && inputShape[inputShapeIndex] !== 1) {\n throw new Error("Expand requires shape to be broadcastable to input");\n }\n }\n };\n getAdjustedShape = (shape1, shape2) => {\n const diff = shape1.length - shape2.length;\n const shape = [];\n for (let i = 0; i < diff; ++i) {\n shape.push(shape1[i]);\n }\n for (let i = 0; i < shape2.length; ++i) {\n shape.push(shape2[i] === 1 ? shape1[i + diff] : shape2[i]);\n }\n return shape;\n };\n calculateOutputShape2 = (inputShape, shape) => inputShape.length > shape.length ? getAdjustedShape(inputShape, shape) : getAdjustedShape(shape, inputShape);\n createExpandProgramInfo = (inputs) => {\n const inputShape = inputs[0].dims;\n const shape = Array.from(inputs[1].getBigInt64Array(), Number);\n const outputShape = calculateOutputShape2(inputShape, shape);\n const dataType = inputs[0].dataType;\n const components = dataType === 9 /* bool */ ? 4 : 1;\n const outputSize = Math.ceil(ShapeUtil.size(outputShape) / components);\n const getShaderSource = (shaderHelper) => {\n const input = inputVariable("input", dataType, inputShape.length, components);\n const output = outputVariable("output", dataType, outputShape.length, components);\n let assignment;\n if (dataType === 9 /* bool */) {\n const singleAssignment = (resStr, x, typeCast = "") => `\n let outputIndices${x} = ${output.offsetToIndices(`outputOffset + ${x}u`)};\n let offset${x} = ${input.broadcastedIndicesToOffset(`outputIndices${x}`, output)};\n let index${x} = offset${x} / 4u;\n let component${x} = offset${x} % 4u;\n ${resStr}[${x}] = ${typeCast}(${input.getByOffset(`index${x}`)}[component${x}]);\n `;\n assignment = `\n let outputOffset = global_idx * ${components};\n var data = vec4(0);\n ${singleAssignment("data", 0, "u32")}\n ${singleAssignment("data", 1, "u32")}\n ${singleAssignment("data", 2, "u32")}\n ${singleAssignment("data", 3, "u32")}\n ${output.setByOffset("global_idx", "data")}\n }`;\n } else {\n assignment = `\n let outputIndices = ${output.offsetToIndices("global_idx")};\n let inputOffset = ${input.broadcastedIndicesToOffset("outputIndices", output)};\n ${output.setByOffset("global_idx", input.getByOffset("inputOffset"))}\n }`;\n }\n return `\n ${shaderHelper.registerUniform("vec_size", "u32").declareVariables(input, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}\n ${assignment}`;\n };\n const programUniforms = [{ type: 12 /* uint32 */, data: outputSize }, ...createTensorShapeVariables(inputShape, outputShape)];\n return {\n name: "Expand",\n shaderCache: { hint: `${outputShape.length}`, inputDependencies: ["rank"] },\n getShaderSource,\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n })\n };\n };\n expand = (context) => {\n validateInputs12(context.inputs);\n context.compute(createExpandProgramInfo(context.inputs), { inputs: [0] });\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/fast-gelu.ts\n var createFastGeluProgramInfo, fastGelu2;\n var init_fast_gelu = __esm({\n "web/lib/wasm/jsep/webgpu/ops/fast-gelu.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n init_unary_op();\n createFastGeluProgramInfo = (inputTensors) => {\n const dataType = inputTensors[0].dataType;\n const outputSize = ShapeUtil.size(inputTensors[0].dims);\n const biasLength = ShapeUtil.size(inputTensors[1].dims);\n const useVec4 = biasLength % 4 === 0;\n const getShaderSource = (shaderHelper) => {\n const x = inputVariable("x", dataType, [1], 4);\n const bias = inputVariable("bias", dataType, [1], 4);\n const y = outputVariable("y", dataType, [1], 4);\n const uniforms = [{ name: "output_vec_size", type: "u32" }, { name: "bias_size", type: "u32" }];\n const singleElementBias = (i) => `\n let bias${i}_offset: u32 = (global_idx * 4 + ${i}) % uniforms.bias_size;\n let bias${i} = ${bias.getByOffset(`bias${i}_offset / 4`)}[bias${i}_offset % 4];`;\n const biasGetExpression = useVec4 ? `\n let bias = ${bias.getByOffset("global_idx % (uniforms.bias_size / 4)")};` : `${singleElementBias(0)}${singleElementBias(1)}${singleElementBias(2)}${singleElementBias(3)}\n let bias = ${x.type.value}(bias0, bias1, bias2, bias3);`;\n return `${shaderHelper.registerUniforms(uniforms).declareVariables(x, bias, y)}\n\n ${fastGeluImpl(tensorTypeToWsglValueType(dataType))}\n\n ${shaderHelper.mainStart(WORKGROUP_SIZE)}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_vec_size")}\n\n let x = ${x.getByOffset("global_idx")};\n ${biasGetExpression}\n let x_in = x + bias;\n ${y.setByOffset("global_idx", fastGeluExpression("x_in"))}\n }`;\n };\n return {\n name: "FastGeluWithBias",\n shaderCache: { hint: `${useVec4}`, inputDependencies: ["type", "type"] },\n getShaderSource,\n getRunData: (inputs) => ({\n outputs: [{ dims: inputs[0].dims, dataType: inputs[0].dataType }],\n programUniforms: [{ type: 12 /* uint32 */, data: Math.ceil(outputSize / 4) }, { type: 12 /* uint32 */, data: biasLength }],\n dispatchGroup: { x: Math.ceil(outputSize / WORKGROUP_SIZE / 4) }\n })\n };\n };\n fastGelu2 = (context) => {\n if (context.inputs.length < 2 || ShapeUtil.size(context.inputs[1].dims) === 0) {\n fastGelu(context);\n } else {\n context.compute(createFastGeluProgramInfo(context.inputs));\n }\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/gather.ts\n var validateInputs13, createGatherProgramInfo, parseGatherAttributes, gather;\n var init_gather = __esm({\n "web/lib/wasm/jsep/webgpu/ops/gather.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs13 = (inputs) => {\n if (!inputs || inputs.length !== 2) {\n throw new Error("Gather requires 2 inputs.");\n }\n };\n createGatherProgramInfo = (inputs, attributes) => {\n const inputShape = inputs[0].dims;\n const indicesShape = inputs[1].dims;\n const inputRank = inputShape.length;\n const axis = ShapeUtil.normalizeAxis(attributes.axis, inputRank);\n const outputShape = inputShape.slice(0);\n outputShape.splice(axis, 1, ...indicesShape);\n const axisDimLimit = inputShape[axis];\n const components = inputs[0].dataType === 9 /* bool */ ? 4 : 1;\n const outputSize = Math.ceil(ShapeUtil.size(outputShape) / components);\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 6 /* int32 */, data: axisDimLimit },\n { type: 12 /* uint32 */, data: axis },\n ...createTensorShapeVariables(inputs[0].dims, inputs[1].dims, outputShape)\n ];\n const getShaderSource = (shaderHelper) => {\n const data = inputVariable("data", inputs[0].dataType, inputs[0].dims.length, components);\n const indices = inputVariable("inputIndices", inputs[1].dataType, inputs[1].dims.length);\n const output = outputVariable("output", inputs[0].dataType, outputShape.length, components);\n const calcDataIndices = (x) => {\n const indicesRank = indicesShape.length;\n let calcStr = `var indicesIndices${x} = ${indices.type.indices}(0);`;\n for (let i = 0; i < indicesRank; i++) {\n calcStr += `${indicesRank > 1 ? `indicesIndices${x}[${i}]` : `indicesIndices${x}`} = ${outputShape.length > 1 ? `outputIndices${x}[uniforms.axis + ${i}]` : `outputIndices${x}`};`;\n }\n calcStr += `\n var idx${x} = ${indices.getByIndices(`indicesIndices${x}`)};\n if (idx${x} < 0) {\n idx${x} = idx${x} + uniforms.axisDimLimit;\n }\n var dataIndices${x} : ${data.type.indices};\n `;\n for (let i = 0, j = 0; i < inputRank; i++) {\n if (i === axis) {\n calcStr += `${inputRank > 1 ? `dataIndices${x}[${i}]` : `dataIndices${x}`} = u32(idx${x});`;\n j += indicesRank;\n } else {\n calcStr += `${inputRank > 1 ? `dataIndices${x}[${i}]` : `dataIndices${x}`} = ${outputShape.length > 1 ? `outputIndices${x}[${j}]` : `outputIndices${x}`};`;\n j++;\n }\n }\n return calcStr;\n };\n let assignment;\n if (inputs[0].dataType === 9 /* bool */) {\n const singleAssignment = (resStr, x, typeCast = "") => `\n let outputIndices${x} = ${output.offsetToIndices(`outputOffset + ${x}u`)};\n ${calcDataIndices(x)};\n let offset${x} = ${data.indicesToOffset(`dataIndices${x}`)};\n let index${x} = offset${x} / 4u;\n let component${x} = offset${x} % 4u;\n ${resStr}[${x}] = ${typeCast}(${data.getByOffset(`index${x}`)}[component${x}]);\n `;\n assignment = `\n let outputOffset = global_idx * ${components};\n var value = vec4(0);\n ${singleAssignment("value", 0, "u32")}\n ${singleAssignment("value", 1, "u32")}\n ${singleAssignment("value", 2, "u32")}\n ${singleAssignment("value", 3, "u32")}\n ${output.setByOffset("global_idx", "value")}\n `;\n } else {\n assignment = `\n let outputIndices = ${output.offsetToIndices("global_idx")};\n ${calcDataIndices("")};\n let value = ${data.getByIndices("dataIndices")};\n ${output.setByOffset("global_idx", "value")};\n `;\n }\n return `\n ${shaderHelper.registerUniform("outputSize", "u32").registerUniform("axisDimLimit", "i32").registerUniform("axis", "u32").declareVariables(data, indices, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}\n ${assignment}\n }`;\n };\n return {\n name: "Gather",\n shaderCache: { hint: attributes.cacheKey, inputDependencies: ["rank", "rank"] },\n getRunData: () => ({\n outputs: [\n { dims: outputShape, dataType: inputs[0].dataType }\n ],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n };\n };\n parseGatherAttributes = (attributes) => createAttributeWithCacheKey({ axis: attributes.axis });\n gather = (context, attributes) => {\n const inputs = context.inputs;\n validateInputs13(inputs);\n context.compute(createGatherProgramInfo(context.inputs, attributes));\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/gather-elements.ts\n var validateInputs14, createGatherElementsProgramInfo, parseGatherElementsAttributes, gatherElements;\n var init_gather_elements = __esm({\n "web/lib/wasm/jsep/webgpu/ops/gather-elements.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs14 = (inputs) => {\n if (!inputs || inputs.length !== 2) {\n throw new Error("GatherElements requires 2 inputs.");\n }\n if (inputs[0].dims.length < 1) {\n throw new Error("GatherElements requires that the data input be rank >= 1.");\n }\n if (inputs[0].dims.length !== inputs[1].dims.length) {\n throw new Error(`GatherElements requires that the data input and\n indices input tensors be of same rank.`);\n }\n };\n createGatherElementsProgramInfo = (inputs, attributes) => {\n const inputShape = inputs[0].dims;\n const inputOutputDataType = inputs[0].dataType;\n const inputRank = inputShape.length;\n const indicesShape = inputs[1].dims;\n const indicesDataType = inputs[1].dataType;\n const axis = ShapeUtil.normalizeAxis(attributes.axis, inputRank);\n const axisDimLimit = inputShape[axis];\n const outputShape = indicesShape.slice(0);\n const outputSize = ShapeUtil.size(outputShape);\n const input = inputVariable("input", inputOutputDataType, inputRank);\n const indices = inputVariable("indicesInput", indicesDataType, indicesShape.length);\n const output = outputVariable("output", inputOutputDataType, outputShape.length);\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 6 /* int32 */, data: axisDimLimit },\n { type: 12 /* uint32 */, data: axis }\n ];\n programUniforms.push(...createTensorShapeVariables(inputShape, indicesShape, outputShape));\n const inputDependencies = ["rank", "rank"];\n const getShaderSource = (shaderHelper) => `\n ${shaderHelper.registerUniform("outputSize", "u32").registerUniform("axisDimLimit", "i32").registerUniform("axis", "u32").declareVariables(input, indices, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}\n\n let outputIndices = ${output.offsetToIndices("global_idx")};\n\n var idx = ${indices.getByOffset("global_idx")};\n if (idx < 0) {\n idx = idx + uniforms.axisDimLimit;\n }\n var inputIndices = ${input.type.indices}(outputIndices);\n ${input.indicesSet("inputIndices", "uniforms.axis", "u32(idx)")};\n let value = ${input.getByIndices("inputIndices")};\n\n ${output.setByOffset("global_idx", "value")};\n }`;\n return {\n name: "GatherElements",\n shaderCache: { inputDependencies },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n };\n };\n parseGatherElementsAttributes = (attributes) => createAttributeWithCacheKey({ axis: attributes.axis });\n gatherElements = (context, attributes) => {\n const inputs = context.inputs;\n validateInputs14(inputs);\n context.compute(createGatherElementsProgramInfo(context.inputs, attributes));\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/gemm.ts\n var validateInputs15, createGemmProgramInfo, parseGemmAttributes, gemm;\n var init_gemm = __esm({\n "web/lib/wasm/jsep/webgpu/ops/gemm.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n validateInputs15 = (inputs) => {\n if (!inputs) {\n throw new Error("Input is missing");\n }\n if (inputs.length < 2 || inputs.length > 3) {\n throw new Error("Invaid input number.");\n }\n if (inputs.length === 3 && inputs[2].dims.length > 2) {\n throw new Error("Invalid input shape of C");\n }\n if (inputs[0].dataType !== inputs[1].dataType || inputs.length === 3 && inputs[0].dataType !== inputs[2].dataType) {\n throw new Error("Input types are mismatched");\n }\n };\n createGemmProgramInfo = (inputs, attributes) => {\n const aShape = inputs[0].dims.slice();\n const bShape = inputs[1].dims.slice();\n const [M, N, K] = GemmUtil.getShapeOfGemmResult(\n aShape,\n attributes.transA,\n bShape,\n attributes.transB,\n inputs.length === 3 ? inputs[2].dims : void 0\n );\n const outputShape = [M, N];\n if (!outputShape) {\n throw new Error("Can\'t use gemm on the given tensors");\n }\n const outputSize = ShapeUtil.size(outputShape);\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 12 /* uint32 */, data: M },\n { type: 12 /* uint32 */, data: N },\n { type: 12 /* uint32 */, data: K },\n { type: 1 /* float */, data: attributes.alpha },\n { type: 1 /* float */, data: attributes.beta }\n ];\n const inputDependencies = ["type", "type"];\n if (inputs.length === 3) {\n programUniforms.push(...createTensorShapeVariables(inputs[2].dims));\n inputDependencies.push("rank");\n }\n programUniforms.push(...createTensorShapeVariables(outputShape));\n const getShaderSource = (shaderHelper) => {\n let line = "";\n if (attributes.transA && attributes.transB) {\n line = "value += a[k * uniforms.M + m] * b[n * uniforms.K + k];";\n } else if (attributes.transA && !attributes.transB) {\n line = "value += a[k * uniforms.M + m] * b[k * uniforms.N + n];";\n } else if (!attributes.transA && attributes.transB) {\n line = "value += a[m * uniforms.K + k] * b[n * uniforms.K + k];";\n } else if (!attributes.transA && !attributes.transB) {\n line = "value += a[m * uniforms.K + k] * b[k * uniforms.N + n];";\n }\n const calculateAlpha = attributes.alpha === 1 ? "" : "value *= uniforms.alpha;";\n const a = inputVariable("a", inputs[0].dataType, inputs[0].dims);\n const b = inputVariable("b", inputs[1].dataType, inputs[1].dims);\n const dataType = a.type.value;\n let c = null;\n const variables = [a, b];\n if (inputs.length === 3) {\n c = inputVariable("c", inputs[2].dataType, inputs[2].dims.length);\n variables.push(c);\n }\n const output = outputVariable("output", inputs[0].dataType, outputShape.length);\n variables.push(output);\n const uniforms = [\n { name: "output_size", type: "u32" },\n { name: "M", type: "u32" },\n { name: "N", type: "u32" },\n { name: "K", type: "u32" },\n { name: "alpha", type: "f32" },\n { name: "beta", type: "f32" }\n ];\n return `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(...variables)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n\n let m = global_idx / uniforms.N;\n let n = global_idx % uniforms.N;\n\n var value = ${dataType}(0);\n for (var k: u32 = 0u; k < uniforms.K; k++) {\n ${line}\n }\n\n ${calculateAlpha}\n ${(() => {\n if (c != null) {\n return `let cOffset = ${c.broadcastedIndicesToOffset("vec2(m, n)", output)}; value += ${dataType}(uniforms.beta) * ${c.getByOffset("cOffset")};`;\n }\n return "";\n })()}\n output[global_idx] = value;\n }`;\n };\n return {\n name: "Gemm",\n shaderCache: { hint: `${attributes.cacheKey}`, inputDependencies },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n };\n };\n parseGemmAttributes = (attributes) => {\n const transA = attributes.transA;\n const transB = attributes.transB;\n const alpha = attributes.alpha;\n const beta = attributes.beta;\n return { transA, transB, alpha, beta, cacheKey: `${attributes.transA};${attributes.transB};${attributes.alpha === 1}` };\n };\n gemm = (context, attributes) => {\n validateInputs15(context.inputs);\n context.compute(createGemmProgramInfo(context.inputs, attributes));\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/instance-norm.ts\n var createInstanceNormProgramInfo, computeMean, createInstanceNormNHWCProgramInfo, instanceNorm;\n var init_instance_norm = __esm({\n "web/lib/wasm/jsep/webgpu/ops/instance-norm.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n createInstanceNormProgramInfo = (inputs, attributes) => {\n const xShape = inputs[0].dims;\n const outputShape = xShape;\n const axis = 2;\n const normCount = ShapeUtil.sizeToDimension(xShape, axis);\n const normSize = ShapeUtil.sizeFromDimension(xShape, axis);\n const components = getMaxComponents(normSize);\n const normPackedSize = normSize / components;\n const inputShape = [xShape[0], xShape[1], normPackedSize];\n const inputDependencies = ["rank", "type", "type"];\n const programUniforms = [{ type: 12 /* uint32 */, data: normSize }, { type: 12 /* uint32 */, data: normPackedSize }];\n programUniforms.push(...createTensorShapeVariables(inputShape, inputShape));\n const getShaderSource = (shaderHelper) => {\n const x = inputVariable("x", inputs[0].dataType, inputShape.length, components);\n const scale = inputVariable("scale", inputs[1].dataType, inputs[1].dims);\n const bias = inputVariable("bias", inputs[2].dataType, inputs[2].dims);\n const output = outputVariable("output", inputs[0].dataType, inputShape.length, components);\n const variables = [x, scale, bias, output];\n const dataType = x.type.value;\n const f32Type = components === 1 ? "f32" : `vec${components}`;\n const workgroupSize = 64;\n const uniforms = [{ name: "normSize", type: "u32" }, { name: "normPackedSize", type: "u32" }];\n return `\n var meanShared : f32;\n var squaredNormShared : f32;\n var workgroupShared : array<${f32Type}, ${workgroupSize}>;\n const workgroupSize = ${workgroupSize}u;\n ${shaderHelper.registerUniforms(uniforms).declareVariables(...variables)}\n ${shaderHelper.mainStart(workgroupSize)}\n let norm = global_idx / workgroupSize;\n let batch = norm / uniforms.x_shape[1];\n let channel = norm % uniforms.x_shape[1];\n let localIndex = local_id.x;\n\n // initialize workgroup memory\n var initial = ${f32Type}(0);\n for (var h = localIndex; h < uniforms.normPackedSize; h += workgroupSize) {\n initial = initial + ${f32Type}(${x.get("batch", "channel", "h")});\n }\n workgroupShared[localIndex] = initial;\n workgroupBarrier();\n\n // Calculate the mean of current channel data.\n for (var currSize = workgroupSize >> 1; currSize > 0; currSize = currSize >> 1) {\n if (localIndex < currSize) {\n workgroupShared[localIndex] = workgroupShared[localIndex] + workgroupShared[localIndex + currSize];\n }\n workgroupBarrier();\n }\n if (localIndex == 0) {\n meanShared = ${sumVector("workgroupShared[0]", components)} / f32(uniforms.normSize);\n }\n workgroupBarrier();\n\n // reinitialize workgroup memory.\n initial = ${f32Type}(0);\n for (var h = localIndex; h < uniforms.normPackedSize; h += workgroupSize) {\n let deviation = ${f32Type}(${x.get("batch", "channel", "h")}) - ${f32Type}(meanShared);\n initial = initial + deviation * deviation;\n }\n workgroupShared[localIndex] = initial;\n workgroupBarrier();\n\n // Calculate the sum of square of deviation of current channel data.\n for (var currSize = workgroupSize >> 1; currSize > 0; currSize = currSize >> 1) {\n if (localIndex < currSize) {\n workgroupShared[localIndex] = workgroupShared[localIndex] + workgroupShared[localIndex + currSize];\n }\n workgroupBarrier();\n }\n if (localIndex == 0) {\n squaredNormShared = ${sumVector("workgroupShared[0]", components)};\n }\n workgroupBarrier();\n\n let invStdDev = inverseSqrt(squaredNormShared / f32(uniforms.normSize) + f32(${attributes.epsilon}));\n let channelScale = invStdDev * f32(${scale.getByOffset("channel")});\n let channelShift = f32(${bias.getByOffset("channel")}) - meanShared * channelScale;\n for (var h = localIndex; h < uniforms.normPackedSize; h += workgroupSize) {\n let value = ${x.get("batch", "channel", "h")} * ${dataType}(${f32Type}(channelScale)) + ${dataType}(${f32Type}(channelShift));\n ${output.set("batch", "channel", "h", "value")};\n }\n }`;\n };\n return {\n ...{ name: "InstanceNormalization" },\n // TODO: use epsilon as uniform. Currently epsilon as uniform fails test_instancenorm_epsilon.\n shaderCache: { hint: `${attributes.epsilon};${components}`, inputDependencies },\n getRunData: () => ({\n outputs: [\n { dims: outputShape, dataType: inputs[0].dataType }\n ],\n dispatchGroup: { x: normCount },\n programUniforms\n }),\n getShaderSource\n };\n };\n computeMean = (context, input, scale, bias, n, h, c, epsilon) => {\n const components = getMaxComponents(c);\n const WG = 64;\n const outputType = components === 1 ? "vec2f" : `mat2x${components}f`;\n const sumCastType = components === 1 ? "f32" : `vec${components}f`;\n const setOutputValue = (var1, var2) => `${outputType}(${var1}, ${var2})`;\n const unitsOfWork = n * c / components;\n const wgSize = Math.ceil(h / WG);\n const meanInputDependencies = ["type"];\n const meanProgramUniforms = [\n { type: 12 /* uint32 */, data: wgSize },\n { type: 12 /* uint32 */, data: h },\n { type: 12 /* uint32 */, data: Math.floor(c / components) },\n { type: 12 /* uint32 */, data: Math.floor(h * c / components) }\n ];\n const getMeanShaderSource = (shaderHelper) => {\n const inputHelper = inputVariable("input", input.dataType, input.dims, components);\n return `\n ${shaderHelper.declareVariables(inputHelper)}\n @group(0) @binding(1) var output : array<${outputType}>;\n struct Uniforms {wg_size:u32, H:u32, C:u32, image_size:u32};\n @group(0) @binding(2) var uniforms: Uniforms;\n\n ${shaderHelper.mainStart(WG)}\n let currentImageNumber = global_idx / ${WG} / uniforms.C;\n let currentChannelNumber = (global_idx / ${WG}) % uniforms.C;\n let wgOffset = local_id.x * uniforms.wg_size;\n if (wgOffset >= uniforms.H) {\n return;\n }\n let wgMax = min(wgOffset + uniforms.wg_size, uniforms.H);\n\n let offset = currentImageNumber * uniforms.image_size + currentChannelNumber;\n var sum = ${fillVector("f32", components)};\n var squaredSum = ${fillVector("f32", components)};\n for (var i: u32 = wgOffset; i < wgMax; i++) {\n let value = ${sumCastType}(input[offset + i * uniforms.C]);\n sum += value;\n squaredSum += value * value;\n }\n output[global_idx] = ${setOutputValue("sum", "squaredSum")};\n }`;\n };\n const meanValues = context.compute(\n {\n name: "InstanceNormComputeMean",\n shaderCache: { hint: `${components}`, inputDependencies: meanInputDependencies },\n getRunData: () => ({\n outputs: [\n { dims: [n, c, WG, 2], dataType: 1 /* float */ }\n ],\n dispatchGroup: { x: n * c / components },\n programUniforms: meanProgramUniforms\n }),\n getShaderSource: getMeanShaderSource\n },\n { inputs: [input], outputs: [-1] }\n )[0];\n const programUniforms = [\n { type: 12 /* uint32 */, data: unitsOfWork },\n { type: 12 /* uint32 */, data: h },\n { type: 12 /* uint32 */, data: Math.floor(c / components) },\n { type: 12 /* uint32 */, data: Math.floor(WG * c / components) }\n ];\n const inputDependencies = ["type", "type", "type"];\n const getShaderSource = (shaderHelper) => {\n const scaleHelper = inputVariable("scale", scale.dataType, scale.dims, components);\n const biasHelper = inputVariable("bias", bias.dataType, bias.dims, components);\n return `\n @group(0) @binding(0) var input : array<${outputType}>;\n @group(0) @binding(1) var scale : array<${scaleHelper.type.storage}>;\n @group(0) @binding(2) var bias : array<${biasHelper.type.storage}>;\n @group(0) @binding(3) var output : array<${outputType}>;\n struct Uniforms {units_of_work : u32, H: u32, C : u32, image_size : u32};\n @group(0) @binding(4) var uniforms: Uniforms;\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.units_of_work")}\n let currentImageNumber = global_idx / uniforms.C;\n let currentChannelNumber = global_idx % uniforms.C;\n\n let offset = currentImageNumber * uniforms.image_size;\n var sum = ${fillVector("f32", components)};\n var squaredSum = ${fillVector("f32", components)};\n for (var i: u32 = 0; i < min(${WG}, uniforms.H); i++) {\n let value = input[offset + i + currentChannelNumber * ${WG}];\n sum += value[0];\n squaredSum += value[1];\n }\n sum = sum / f32(uniforms.H);\n squaredSum = squaredSum / f32(uniforms.H);\n let invStdDev = inverseSqrt(squaredSum - sum * sum + f32(${epsilon}));\n let channelScale = invStdDev * ${sumCastType}(scale[currentChannelNumber]);\n let channelShift = ${sumCastType}(bias[currentChannelNumber]) - sum * channelScale;\n\n output[global_idx] = ${setOutputValue("channelScale", "channelShift")};\n }`;\n };\n return context.compute(\n {\n name: "InstanceNormComputeChannelScaleShift",\n // TODO: use epsilon as uniform. Currently epsilon as uniform fails test_instancenorm_epsilon.\n shaderCache: { hint: `${components};${epsilon}`, inputDependencies },\n getRunData: () => ({\n outputs: [\n { dims: [n, c, 2], dataType: 1 /* float */ }\n ],\n dispatchGroup: { x: Math.ceil(\n unitsOfWork / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n },\n { inputs: [meanValues, scale, bias], outputs: [-1] }\n )[0];\n };\n createInstanceNormNHWCProgramInfo = (context, inputs, attributes) => {\n const xShape = inputs[0].dims;\n const outputShape = xShape;\n const N = xShape[0];\n const C = xShape[xShape.length - 1];\n const H = ShapeUtil.sizeFromDimension(xShape, 1) / C;\n const components = getMaxComponents(C);\n const outputSize = ShapeUtil.size(outputShape) / components;\n const programUniforms = [{ type: 12 /* uint32 */, data: H }, { type: 12 /* uint32 */, data: Math.floor(C / components) }];\n const inputDependencies = ["type", "type"];\n const channelScaleShift = computeMean(context, inputs[0], inputs[1], inputs[2], N, H, C, attributes.epsilon);\n const getShaderSource = (shaderHelper) => {\n const dataType = tensorTypeToWsglStorageType(inputs[0].dataType);\n const scaleType = components === 1 ? "vec2f" : `mat2x${components}f`;\n const scaleCastType = components === 1 ? dataType : `vec${components}<${dataType}>`;\n const inputHelper = inputVariable("input", inputs[0].dataType, inputs[0].dims, components);\n const outputHelper = outputVariable("output", inputs[0].dataType, outputShape, components);\n return `\n @group(0) @binding(0) var input : array<${inputHelper.type.storage}>;\n @group(0) @binding(1) var scaleInput : array<${scaleType}>;\n @group(0) @binding(2) var output : array<${outputHelper.type.storage}>;\n struct Uniforms {H: u32, C : u32};\n @group(0) @binding(3) var uniforms: Uniforms;\n\n ${shaderHelper.mainStart()}\n let currentImageNumber = global_idx / (uniforms.C * uniforms.H);\n let currentChannelNumber = global_idx % uniforms.C;\n\n let scaleOffset = currentImageNumber * uniforms.C + currentChannelNumber;\n let scale = scaleInput[scaleOffset];\n output[global_idx] = fma(input[global_idx], ${scaleCastType}(scale[0]), ${scaleCastType}(scale[1]));\n }`;\n };\n context.compute(\n {\n name: "InstanceNormalizationNHWC",\n shaderCache: { hint: `${components}`, inputDependencies },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n },\n { inputs: [inputs[0], channelScaleShift] }\n );\n };\n instanceNorm = (context, attributes) => {\n if (attributes.format === "NHWC") {\n createInstanceNormNHWCProgramInfo(context, context.inputs, attributes);\n } else {\n context.compute(createInstanceNormProgramInfo(context.inputs, attributes));\n }\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/layer-norm.ts\n var validateInputs16, createLayerNormProgramInfo, layerNorm;\n var init_layer_norm = __esm({\n "web/lib/wasm/jsep/webgpu/ops/layer-norm.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n validateInputs16 = (inputs) => {\n if (!inputs || inputs.length < 2) {\n throw new Error("layerNorm requires at least 2 inputs.");\n }\n };\n createLayerNormProgramInfo = (inputs, attributes, outputCount) => {\n const simplified = attributes.simplified;\n const xShape = inputs[0].dims;\n const scale = inputs[1];\n const bias = !simplified && inputs[2];\n const outputShape = xShape;\n const axis = ShapeUtil.normalizeAxis(attributes.axis, xShape.length);\n const normCount = ShapeUtil.sizeToDimension(xShape, axis);\n const normSize = ShapeUtil.sizeFromDimension(xShape, axis);\n const scaleSize = ShapeUtil.size(scale.dims);\n const biasSize = bias ? ShapeUtil.size(bias.dims) : 0;\n if (scaleSize !== normSize || bias && biasSize !== normSize) {\n throw new Error(`Size of X.shape()[axis:] == ${normSize}.\n Size of scale and bias (if provided) must match this.\n Got scale size of ${scaleSize} and bias size of ${biasSize}`);\n }\n const meanInvStdDevDim = [];\n for (let i = 0; i < xShape.length; ++i) {\n if (i < axis) {\n meanInvStdDevDim.push(xShape[i]);\n } else {\n meanInvStdDevDim.push(1);\n }\n }\n const components = getMaxComponents(normSize);\n const inputDependencies = ["type", "type"];\n const programUniforms = [\n { type: 12 /* uint32 */, data: normCount },\n { type: 1 /* float */, data: normSize },\n { type: 12 /* uint32 */, data: Math.floor(normSize / components) },\n { type: 1 /* float */, data: attributes.epsilon }\n ];\n if (bias) {\n inputDependencies.push("type");\n }\n const hasMeanDataOutput = outputCount > 1;\n const hasInvStdOutput = outputCount > 2;\n const getShaderSource = (shaderHelper) => {\n const dataType = tensorTypeToWsglStorageType(inputs[0].dataType);\n const variables = [\n inputVariable("x", inputs[0].dataType, inputs[0].dims, components),\n inputVariable("scale", scale.dataType, scale.dims, components)\n ];\n if (bias) {\n variables.push(inputVariable("bias", bias.dataType, bias.dims, components));\n }\n variables.push(outputVariable("output", inputs[0].dataType, outputShape, components));\n if (hasMeanDataOutput) {\n variables.push(outputVariable("mean_data_output", 1 /* float */, meanInvStdDevDim));\n }\n if (hasInvStdOutput) {\n variables.push(outputVariable("inv_std_output", 1 /* float */, meanInvStdDevDim));\n }\n const uniforms = [\n { name: "norm_count", type: "u32" },\n { name: "norm_size", type: "f32" },\n { name: "norm_size_vectorized", type: "u32" },\n { name: "epsilon", type: "f32" }\n ];\n return `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(...variables)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.norm_count")}\n let offset = global_idx * uniforms.norm_size_vectorized;\n var mean_vector = ${fillVector("f32", components)};\n var mean_square_vector = ${fillVector("f32", components)};\n\n for (var h: u32 = 0u; h < uniforms.norm_size_vectorized; h++) {\n let value = ${castToF32(dataType, components, "x[h + offset]")};\n mean_vector += value;\n mean_square_vector += value * value;\n }\n let mean = ${sumVector("mean_vector", components)} / uniforms.norm_size;\n let inv_std_dev = inverseSqrt(${sumVector("mean_square_vector", components)} / uniforms.norm_size ${simplified ? "" : "- mean * mean"} + uniforms.epsilon);\n\n for (var j: u32 = 0; j < uniforms.norm_size_vectorized; j++) {\n let f32input = ${castToF32(dataType, components, "x[j + offset]")};\n let f32scale = ${castToF32(dataType, components, "scale[j]")};\n output[j + offset] = ${variables[0].type.value}((f32input ${simplified ? "" : "- mean"}) * inv_std_dev * f32scale\n ${bias ? `+ ${castToF32(dataType, components, "bias[j]")}` : ""}\n );\n }\n\n ${hasMeanDataOutput ? "mean_data_output[global_idx] = mean" : ""};\n ${hasInvStdOutput ? "inv_std_output[global_idx] = inv_std_dev" : ""};\n }`;\n };\n const outputs = [{ dims: outputShape, dataType: inputs[0].dataType }];\n if (hasMeanDataOutput) {\n outputs.push({ dims: meanInvStdDevDim, dataType: 1 /* float */ });\n }\n if (hasInvStdOutput) {\n outputs.push({ dims: meanInvStdDevDim, dataType: 1 /* float */ });\n }\n return {\n name: "LayerNormalization",\n shaderCache: { hint: `${components};${outputCount};${simplified}`, inputDependencies },\n getRunData: () => ({ outputs, dispatchGroup: { x: Math.ceil(\n normCount / 64\n /* workgroup size */\n ) }, programUniforms }),\n getShaderSource\n };\n };\n layerNorm = (context, attributes) => {\n validateInputs16(context.inputs);\n context.compute(createLayerNormProgramInfo(context.inputs, attributes, context.outputCount));\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/matmulnbits.ts\n var validateInputs17, createMatMulNBitsProgramInfo, matMulNBits, parseMatMulNBitsAttributes;\n var init_matmulnbits = __esm({\n "web/lib/wasm/jsep/webgpu/ops/matmulnbits.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs17 = (inputs, attributes) => {\n if (inputs.length < 3 || inputs.length > 4) {\n throw new Error("MatMulNBits requires 3 or 4 inputs");\n }\n const a = inputs[0];\n const aRank = a.dims.length;\n if (a.dims[aRank - 1] !== attributes.k) {\n throw new Error("The last dim of input shape does not match the k value");\n }\n const nBlocksPerCol = Math.floor((attributes.k + attributes.blockSize - 1) / attributes.blockSize);\n const blobSize = attributes.blockSize / 8 * attributes.bits;\n const b = inputs[1];\n if (!ShapeUtil.areEqual(b.dims, [attributes.n, nBlocksPerCol, blobSize])) {\n throw new Error("The second inputs must be 3D tensor with shape N X nBlocksPerCol X blobSize");\n }\n const scales = inputs[2];\n const scalesShape = scales.dims;\n if (ShapeUtil.size(scalesShape) !== attributes.n * nBlocksPerCol) {\n throw new Error("scales input size error.");\n }\n if (inputs.length === 4) {\n const zeroPoints = inputs[3];\n const zeroPointsShape = zeroPoints.dims;\n const expectedZeroPointsSize = attributes.bits > 4 ? attributes.n * nBlocksPerCol : attributes.n * Math.floor((nBlocksPerCol + 1) / 2);\n if (ShapeUtil.size(zeroPointsShape) !== expectedZeroPointsSize) {\n throw new Error("zeroPoints input size error.");\n }\n }\n };\n createMatMulNBitsProgramInfo = (inputs, attributes, maxComputeWorkgroupSizes, maxComputeWorkgroupStorageSize) => {\n const inputShape = inputs[0].dims;\n const aRank = inputShape.length;\n const nBlocksPerCol = Math.floor((attributes.k + attributes.blockSize - 1) / attributes.blockSize);\n const dimAOuter = inputShape[aRank - 2];\n const dimInner = attributes.k;\n const dimBOuter = attributes.n;\n const batchDims = inputShape.slice(0, aRank - 2);\n const batchSize = ShapeUtil.size(batchDims);\n const blobSize = attributes.blockSize / 8 * attributes.bits;\n const blobSizeInWords = blobSize / 4;\n const dataType = inputs[0].dataType;\n const outputNumber = getMaxComponents(dimAOuter);\n const aComponents = getMaxComponents(attributes.k);\n const bComponents = getMaxComponents(blobSizeInWords);\n const elementSize = getTensorElementSize(dataType);\n const workgroupOutputSize = dimAOuter * nBlocksPerCol * elementSize;\n const maxNumberOfComponents = Math.floor(maxComputeWorkgroupStorageSize / workgroupOutputSize);\n const useBlockwiseMatMulNBits = nBlocksPerCol <= maxComputeWorkgroupSizes[0] && maxNumberOfComponents > 0;\n const components = !useBlockwiseMatMulNBits || maxNumberOfComponents >= 4 ? getMaxComponents(dimBOuter) : maxNumberOfComponents >= 2 && getMaxComponents(dimBOuter) >= 2 ? 2 : 1;\n const outputShape = batchDims.concat([dimAOuter, dimBOuter]);\n const outputSize = ShapeUtil.size(outputShape) / components / outputNumber;\n const programUniforms = useBlockwiseMatMulNBits ? [] : [{ type: 12 /* uint32 */, data: outputSize }, { type: 12 /* uint32 */, data: attributes.blockSize }];\n const inputShapeTemp = [batchSize, dimAOuter, dimInner / aComponents];\n const bShape = ShapeUtil.convertShape(inputs[1].dims).slice();\n bShape.splice(-1, 1, blobSizeInWords / bComponents);\n programUniforms.push(...createTensorShapeVariables(inputShapeTemp));\n programUniforms.push(...createTensorShapeVariables(bShape));\n programUniforms.push(...createTensorShapeVariables(inputs[2].dims));\n if (inputs.length === 4) {\n programUniforms.push(...createTensorShapeVariables(ShapeUtil.convertShape(inputs[3].dims)));\n }\n const outputShapeTemp = [batchSize, dimAOuter, dimBOuter / components];\n programUniforms.push(...createTensorShapeVariables(outputShapeTemp));\n const getShaderSource = (shaderHelper) => {\n const inputRank = inputShapeTemp.length;\n const a = inputVariable("a", inputs[0].dataType, inputRank, aComponents);\n const b = inputVariable("b", 12 /* uint32 */, bShape.length, bComponents);\n const scales = inputVariable("scales", inputs[2].dataType, inputs[2].dims.length);\n const inputVariables = [a, b, scales];\n const zeroPoints = inputs.length === 4 ? inputVariable("zero_points", 12 /* uint32 */, inputs[3].dims.length) : void 0;\n if (zeroPoints) {\n inputVariables.push(zeroPoints);\n }\n const outputRank = outputShapeTemp.length;\n const output = outputVariable("output", inputs[0].dataType, outputRank, components);\n const uniforms = [{ name: "output_size", type: "u32" }, { name: "block_size", type: "u32" }];\n const dataType2 = tensorTypeToWsglStorageType(inputs[0].dataType);\n const qDqDataType = (() => {\n switch (aComponents) {\n case 1:\n return `array<${dataType2}, 8>`;\n case 2:\n return `mat4x2<${dataType2}>`;\n case 4:\n return `mat2x4<${dataType2}>`;\n default:\n throw new Error(`${aComponents}-component is not supported.`);\n }\n })();\n const processOneBlock = `\n for (var word: u32 = 0; word < ${blobSizeInWords}; word += ${bComponents}) {\n ${b.indicesSet("b_indices", "2", "word")};\n let b_data = ${b.getByIndices("b_indices")};\n for (var i: u32 = 0; i < ${bComponents}; i++) {\n let b_value: u32 = ${bComponents === 1 ? "b_data" : "b_data[word + i]"};\n let b_mask: u32 = 0x0F0F0F0Fu;\n let b_value_lower: vec4 = unpack4xU8(b_value & b_mask);\n let b_value_upper: vec4 = unpack4xU8((b_value >> 4) & b_mask);\n let b_quantized_values = ${qDqDataType}(${Array.from({ length: 4 }, (_, i) => `${dataType2}(b_value_lower[${i}]), ${dataType2}(b_value_upper[${i}])`).join(", ")});\n let b_dequantized_values = ${(() => {\n if (aComponents === 1) {\n return `${qDqDataType}(${Array.from({ length: 8 }, (_, i) => `(b_quantized_values[${i}] - zero_point) * scale`).join(", ")});`;\n } else {\n return `(b_quantized_values - ${qDqDataType}(${Array(8).fill("zero_point").join(",")})) * scale;`;\n }\n })()};\n // Number of B elements per 32-bit word is 32/bits = 32/4 = 8\n for (var m: u32 = 0; m < ${useBlockwiseMatMulNBits ? dimAOuter : outputNumber}u; m++) {\n ${a.indicesSet("a_indices", inputRank - 2, useBlockwiseMatMulNBits ? "m" : `row * ${outputNumber} + m`)};\n ${a.indicesSet("a_indices", inputRank - 1, "word_offset")};\n var input_offset = ${a.indicesToOffset("a_indices")};\n var a_data: ${qDqDataType};\n for (var j: u32 = 0; j < ${8 / aComponents}; j++) {\n a_data[j] = ${a.getByOffset("input_offset")};\n input_offset++;\n }\n ${useBlockwiseMatMulNBits ? "workgroup_shared[workgroup_shared_offset + m]" : "output_values[m]"}${components > 1 ? "[c]" : ""} += ${Array.from(\n { length: 8 / aComponents },\n (_, i) => `${aComponents === 1 ? `a_data[${i}] * b_dequantized_values[${i}]` : `dot(a_data[${i}], b_dequantized_values[${i}])`}`\n ).join(" + ")};\n }\n word_offset += ${8 / aComponents};\n }\n }`;\n const updateZeroPointIndex = zeroPoints ? `\n zero_point_offset += 4;\n if (zero_point_offset == 32) {\n zero_point_offset = 0;\n zero_point_index++;\n zero_point_word = ${zeroPoints.getByOffset("zero_point_index")};\n }` : "";\n return useBlockwiseMatMulNBits ? `\n var workgroup_shared: array<${output.type.value}, ${dimAOuter * nBlocksPerCol}>;\n ${shaderHelper.declareVariables(...inputVariables, output)}\n ${shaderHelper.mainStart([\n nBlocksPerCol,\n 1,\n 1\n ])}\n var a_indices: ${a.type.indices};\n var block = local_id.x;\n var col = workgroup_id.y;\n var batch = workgroup_id.z;\n ${a.indicesSet("a_indices", "0", "batch")};\n // Two zero points are packed into one byte when uniforms.bits is 4.\n for (var c: u32 = 0; c < ${components}; c++) {\n let col_times_components_plus_c = col * ${components} + c;\n ${zeroPoints ? `\n var zero_point_bytes_per_col: u32 = (${nBlocksPerCol} + 1) / 2;\n var zero_point_byte_count: u32 = col_times_components_plus_c * zero_point_bytes_per_col + (block >> 0x1u);\n var zero_point_word_index: u32 = zero_point_byte_count >> 0x2u;\n var zero_point_byte_offset: u32 = zero_point_byte_count & 0x3u;\n var zero_point_nibble_offset: u32 = block & 0x1u;\n var zero_point_bits_offset: u32 = (zero_point_byte_offset << 3) + (zero_point_nibble_offset << 2);\n var zero_point_word: u32 = ${zeroPoints.getByOffset("zero_point_word_index")} >> zero_point_bits_offset;` : ""}\n var b_indices: ${b.type.indices};\n ${b.indicesSet("b_indices", "0", "col_times_components_plus_c")};\n // The scale and zero points are computed per block.\n var scales_index = col_times_components_plus_c * ${nBlocksPerCol} + block;\n let scale = ${scales.getByOffset("scales_index")};\n // The default zero point is 8 for unsigned 4-bit quantization.\n let zero_point = ${dataType2}(${zeroPoints ? "(zero_point_word) & 0xFu" : 8});\n ${b.indicesSet("b_indices", "1", "block")};\n var word_offset: u32 = block * ${attributes.blockSize / aComponents};\n var workgroup_shared_offset: u32 = block * ${dimAOuter};\n ${processOneBlock}\n }\n workgroupBarrier();\n if (local_id.x == 0u) {\n var output_indices: ${output.type.indices};\n ${output.indicesSet("output_indices", "0", "batch")};\n ${output.indicesSet("output_indices", outputRank - 1, "col")};\n ${output.indicesSet("output_indices", outputRank - 2, "0")};\n var output_offset = ${output.indicesToOffset("output_indices")};\n for (var m: u32 = 0u; m < ${dimAOuter}u; m++) {\n var output_value: ${output.type.value} = ${output.type.value}(0);\n var workgroup_shared_offset: u32 = m;\n for (var b: u32 = 0u; b < ${nBlocksPerCol}u; b++) {\n output_value += workgroup_shared[workgroup_shared_offset];\n workgroup_shared_offset += ${dimAOuter};\n }\n ${output.setByOffset("output_offset", "output_value")};\n output_offset += ${dimBOuter / components};\n }\n }\n }` : `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(...inputVariables, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n var output_values: array<${output.type.value}, ${outputNumber}>;\n var output_indices = ${output.offsetToIndices("global_idx")};\n var col = ${output.indicesGet("output_indices", outputRank - 1)};\n var row = ${output.indicesGet("output_indices", outputRank - 2)};\n var a_indices: ${a.type.indices} = output_indices;\n // Two zero points are packed into one byte because uniforms.bits <= 4.\n // zero_point_offset is either 0 or 4. It is bit offset within one byte.\n // TODO support zero_point_offset for bits > 4\n ${zeroPoints ? `\n var zero_point_abs_offset = col * ${components} * ((${nBlocksPerCol} + 1) / 2);\n var zero_point_index: u32 = zero_point_abs_offset / 4;\n var zero_point_word: u32 = ${zeroPoints.getByOffset("zero_point_index")};\n var zero_point_offset: u32 = (zero_point_abs_offset % 4) * 8;` : ""}\n var scale_index = col * ${nBlocksPerCol * components};\n var b_indices: ${b.type.indices};\n for (var c: u32 = 0; c < ${components}; c++) {\n ${b.indicesSet("b_indices", "0", `col * ${components} + c`)};\n var block_offset: u32 = 0;\n for (var block: u32 = 0; block < ${nBlocksPerCol}; block++) {\n // The scale and zero points are computed per block.\n let scale = ${scales.getByOffset("scale_index")};\n // The default zero point is 8 for unsigned 4-bit quantization.\n let zero_point = ${dataType2}(${zeroPoints ? "extractBits(zero_point_word, zero_point_offset, 4)" : 8});\n ${b.indicesSet("b_indices", "1", "block")};\n var word_offset: u32 = block_offset;\n ${processOneBlock}\n scale_index++;\n ${updateZeroPointIndex}\n block_offset += uniforms.block_size / ${aComponents};\n }\n // Drop the trailing 4 bits if the zero_poit_offset is not a byte boundary to align with the next byte.\n ${zeroPoints ? `if (zero_point_offset % 8 > 0) {\n ${updateZeroPointIndex}\n }` : ""}\n }\n for (var k: u32 = 0u; k < ${outputNumber}u; k++) {\n ${output.indicesSet("output_indices", outputRank - 2, `${outputNumber} * row + k`)};\n ${output.setByIndices("output_indices", "output_values[k]")}\n }\n }`;\n };\n return {\n name: useBlockwiseMatMulNBits ? "BlockwiseMatMulNBits" : "MatMulNBits",\n shaderCache: {\n hint: `${attributes.cacheKey};${dimAOuter};${dataType};${inputs.length}`,\n inputDependencies: Array(inputs.length).fill("rank")\n },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType }],\n name: useBlockwiseMatMulNBits ? "BlockwiseMatMulNBits" : "MatMulNBits",\n dispatchGroup: useBlockwiseMatMulNBits ? { x: 1, y: Math.ceil(dimBOuter / components), z: batchSize } : { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n };\n };\n matMulNBits = (context, attributes) => {\n validateInputs17(context.inputs, attributes);\n const maxComputeWorkgroupSizes = context.getMaxComputeWorkgroupSizes();\n const maxComputeWorkgroupStorageSize = context.getMaxComputeWorkgroupStoragesize();\n context.compute(createMatMulNBitsProgramInfo(\n context.inputs,\n attributes,\n maxComputeWorkgroupSizes,\n maxComputeWorkgroupStorageSize\n ));\n };\n parseMatMulNBitsAttributes = (attributes) => createAttributeWithCacheKey(attributes);\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/multihead-attentiion.ts\n var getInput, validateInputs18, parseMultiHeadAttentionAttributes, weightTransposeAttribute2, addBiasTranspose, maybeTransposeToBNSHAndAddBias, multiHeadAttention;\n var init_multihead_attentiion = __esm({\n "web/lib/wasm/jsep/webgpu/ops/multihead-attentiion.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_types();\n init_attention();\n init_common();\n init_transpose();\n getInput = (inputs, i) => inputs.length > i && inputs[i].dims.length > 0 && ShapeUtil.size(inputs[i].dims) > 0 ? inputs[i] : void 0;\n validateInputs18 = (inputs, attributes) => {\n const query = inputs[0];\n const key = getInput(inputs, 1);\n const value = getInput(inputs, 2);\n const bias = getInput(inputs, 3);\n const keyPaddingMask = getInput(inputs, 4);\n const relativePositionBias = getInput(inputs, 5);\n const pastKey = getInput(inputs, 6);\n const pastValue = getInput(inputs, 7);\n if (query.dims.length !== 3 && query.dims.length !== 5) {\n throw new Error("Input query is expected to have 3 or 5 dimensions");\n }\n const dmmhaPacking = false;\n const batchSize = query.dims[0];\n const sequenceLength = query.dims[1];\n const hiddenSize = query.dims.length === 3 ? dmmhaPacking ? query.dims[2] / 3 : query.dims[2] : attributes.numHeads * query.dims[4];\n let kvSequenceLength = sequenceLength;\n let pastSequenceLength = 0;\n let maxSequenceLength = 0;\n const headSize = Math.floor(hiddenSize / attributes.numHeads);\n if (pastKey && pastValue) {\n if (pastKey.dims.length !== 4) {\n throw new Error(\'Input "past_key" is expected to have 4 dimensions\');\n }\n if (pastKey.dims[0] !== batchSize || pastKey.dims[1] !== attributes.numHeads || pastKey.dims[3] !== headSize) {\n throw new Error(\'Input "past_key" shape (batch_size, num_heads, past_sequence_length, head_size)\');\n }\n if (pastValue.dims[0] !== batchSize || pastValue.dims[1] !== attributes.numHeads || pastValue.dims[3] !== headSize) {\n throw new Error(\'Input "past_value" shape (batch_size, num_heads, past_sequence_length, head_size)\');\n }\n if (pastKey.dims[2] !== pastValue.dims[2]) {\n throw new Error(\'Input "past_key" and "past_value" shall have same dim 2 (past_sequence_length)\');\n }\n if (pastValue.dims.length !== 4) {\n throw new Error(\'Input "past_value" is expected to have 4 dimensions\');\n }\n pastSequenceLength = pastKey.dims[2];\n maxSequenceLength = pastKey.dims[2];\n } else if (pastKey || pastValue) {\n throw new Error(\'Input "past_key" and "past_value" shall be both present or both absent\');\n }\n let qkvFormat;\n if (key) {\n if (query.dims.length !== 3) {\n throw new Error(\'Input "query" is expected to have 3 dimensions when key is given\');\n }\n if (key.dims.length < 3 || key.dims.length > 5) {\n throw new Error(\'Input "key" is expected to have 3, 4, or 5 dimensions\');\n }\n if (query.dims[0] !== key.dims[0]) {\n throw new Error(\'Input "query" and "key" shall have same dim 0 (batch size)\');\n }\n if (key.dims.length === 3) {\n if (key.dims[2] !== query.dims[2]) {\n throw new Error(\'Input "query" and "key" shall have same dim 2 (hidden_size)\');\n }\n qkvFormat = 2 /* qkvBSNH */;\n kvSequenceLength = key.dims[1];\n } else if (key.dims.length === 5) {\n if (key.dims[2] !== attributes.numHeads || key.dims[3] !== 2 || key.dims[4] !== headSize) {\n throw new Error(\'Expect "key" shape (batch_size, kv_sequence_length, num_heads, 2, head_size) for packed kv\');\n }\n if (value) {\n throw new Error(\'Expect "value" be none when "key" has packed kv format.\');\n }\n qkvFormat = 5 /* qKvBSNHxBSN2H */;\n kvSequenceLength = key.dims[1];\n } else {\n if (key.dims[1] !== attributes.numHeads || key.dims[3] !== headSize) {\n throw new Error(\'Expect "key" shape (batch_size, num_heads, kv_sequence_length, head_size) for past_key\');\n }\n qkvFormat = 0 /* unknown */;\n kvSequenceLength = key.dims[2];\n }\n } else {\n if (query.dims.length !== 3 && query.dims.length !== 5) {\n throw new Error(\'Input "query" is expected to have 3 or 5 dimensions when key is empty\');\n }\n if (query.dims.length === 5 && (query.dims[2] !== attributes.numHeads || query.dims[3] !== 3)) {\n throw new Error(\'Expect "query" shape (batch_size, kv_sequence_length, num_heads, 3, head_size) for packed kv\');\n }\n qkvFormat = 3 /* qkvBSN3H */;\n }\n if (bias) {\n if (bias.dims.length !== 1) {\n throw new Error(\'Input "bias" is expected to have 1 dimension\');\n }\n if (value) {\n if (query.dims.length === 5 && query.dims[3] === 2) {\n throw new Error("bias is not allowed for packed kv.");\n }\n }\n }\n let maskType = 0 /* none */;\n if (keyPaddingMask) {\n maskType = 8 /* maskUnknown */;\n const maskDims = keyPaddingMask.dims;\n if (maskDims.length === 1) {\n if (maskDims[0] === batchSize) {\n maskType = 1 /* mask1dKeySeqLen */;\n } else if (maskDims[0] === 3 * batchSize + 2) {\n maskType = 3 /* mask1DKeySeqLenStart */;\n }\n } else if (maskDims.length === 2 && maskDims[0] === batchSize && maskDims[1] === kvSequenceLength) {\n maskType = 5 /* mask2dKeyPadding */;\n }\n if (maskType === 8 /* maskUnknown */) {\n throw new Error(\'Input "key_padding_mask" shape shall be (batch_size) or (batch_size, kv_sequence_length)\');\n }\n throw new Error("Mask not supported");\n }\n let passPastInKv = false;\n let vHiddenSize = hiddenSize;\n if (value) {\n if (value.dims.length !== 3 && value.dims.length !== 4) {\n throw new Error(\'Input "value" is expected to have 3 or 4 dimensions\');\n }\n if (query.dims[0] !== value.dims[0]) {\n throw new Error(\'Input "query" and "value" shall have same dim 0 (batch_size)\');\n }\n if (value.dims.length === 3) {\n if (kvSequenceLength !== value.dims[1]) {\n throw new Error(\'Input "key" and "value" shall have the same dim 1 (kv_sequence_length)\');\n }\n vHiddenSize = value.dims[2];\n } else {\n if (kvSequenceLength !== value.dims[2]) {\n throw new Error(\'Input "past_key" and "past_value" shall have the same dim 2 (kv_sequence_length)\');\n }\n vHiddenSize = value.dims[1] * value.dims[3];\n passPastInKv = true;\n }\n }\n const totalSequenceLength = pastSequenceLength + kvSequenceLength;\n const broadcastResPosBias = false;\n if (keyPaddingMask) {\n throw new Error("Key padding mask is not supported");\n }\n if (relativePositionBias) {\n if (relativePositionBias.dims.length !== 4) {\n throw new Error(\'Input "relative_position_bias" is expected to have 4 dimensions\');\n }\n if (relativePositionBias.dims[0] !== batchSize && relativePositionBias.dims[0] !== 1 || relativePositionBias.dims[1] !== attributes.numHeads || relativePositionBias.dims[2] !== sequenceLength || relativePositionBias.dims[3] !== totalSequenceLength) {\n throw new Error(\'Input "relative_position_bias" shape (batch_size, 1, sequence_length, kv_sequence_length)\');\n }\n }\n return {\n batchSize,\n sequenceLength,\n pastSequenceLength,\n kvSequenceLength,\n totalSequenceLength,\n maxSequenceLength,\n inputHiddenSize: 0,\n hiddenSize,\n vHiddenSize,\n headSize,\n vHeadSize: Math.floor(vHiddenSize / attributes.numHeads),\n numHeads: attributes.numHeads,\n isUnidirectional: false,\n pastPresentShareBuffer: false,\n maskFilterValue: attributes.maskFilterValue,\n maskType,\n scale: attributes.scale,\n broadcastResPosBias,\n passPastInKv,\n qkvFormat\n };\n };\n parseMultiHeadAttentionAttributes = (attributes) => createAttributeWithCacheKey({ ...attributes });\n weightTransposeAttribute2 = createAttributeWithCacheKey({ perm: [0, 2, 1, 3] });\n addBiasTranspose = (context, qkv, bias, batchSize, sequenceLength, hiddenSize, biasOffset) => {\n const outputShape = [batchSize, sequenceLength, hiddenSize];\n const outputSize = ShapeUtil.size(outputShape);\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 12 /* uint32 */, data: biasOffset },\n { type: 12 /* uint32 */, data: hiddenSize }\n ];\n const getShaderSource = (shaderHelper) => {\n const output = outputVariable("qkv_with_bias", qkv.dataType, outputShape);\n const qkvInput = inputVariable("qkv", qkv.dataType, outputShape);\n const biasInput = inputVariable("bias", bias.dataType, outputShape);\n const uniforms = [\n { name: "output_size", type: "u32" },\n { name: "bias_offset", type: "u32" },\n { name: "hidden_size", type: "u32" }\n ];\n return `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(qkvInput, biasInput, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n let bias_offset_idx = (global_idx % uniforms.hidden_size) + uniforms.bias_offset;\n\n qkv_with_bias[global_idx] = qkv[global_idx] + bias[bias_offset_idx];\n }`;\n };\n return context.compute(\n {\n name: "MultiHeadAttentionAddBias",\n shaderCache: { inputDependencies: ["type", "type"] },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: qkv.dataType, gpuDataType: 0 /* default */ }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n },\n { inputs: [qkv, bias], outputs: [-1] }\n )[0];\n };\n maybeTransposeToBNSHAndAddBias = (context, batchSize, numHeads, sequenceLength, headSize, input, bias, biasOffset) => {\n let reshapedInput = input;\n if (!bias) {\n if (input.dims.length === 3) {\n reshapedInput = input.reshape([batchSize, sequenceLength, numHeads, headSize]);\n }\n return context.compute(\n createTransposeProgramInfo(reshapedInput, weightTransposeAttribute2.perm),\n { inputs: [reshapedInput], outputs: [-1] }\n )[0];\n } else {\n if (sequenceLength === 1) {\n throw new Error("AddBiasReshape is not implemented. Please export your model with packed QKV or KV");\n } else {\n reshapedInput = addBiasTranspose(context, input, bias, batchSize, sequenceLength, numHeads * headSize, biasOffset);\n reshapedInput = reshapedInput.reshape([batchSize, sequenceLength, numHeads, headSize]);\n return context.compute(\n createTransposeProgramInfo(reshapedInput, weightTransposeAttribute2.perm),\n { inputs: [reshapedInput], outputs: [-1] }\n )[0];\n }\n }\n };\n multiHeadAttention = (context, attributes) => {\n const params = validateInputs18(context.inputs, attributes);\n const query = context.inputs[0];\n const key = getInput(context.inputs, 1);\n const value = getInput(context.inputs, 2);\n const bias = getInput(context.inputs, 3);\n const keyPaddingMask = getInput(context.inputs, 4);\n const relativePositionBias = getInput(context.inputs, 5);\n const pastKey = getInput(context.inputs, 6);\n const pastValue = getInput(context.inputs, 7);\n if (query.dims.length === 5) {\n throw new Error("Packed QKV is not implemented");\n }\n if (key?.dims.length === 5) {\n throw new Error("Packed KV is not implemented");\n }\n const kvBNSH = key && value && key.dims.length === 4 && value.dims.length === 4;\n const Q = maybeTransposeToBNSHAndAddBias(\n context,\n params.batchSize,\n params.numHeads,\n params.sequenceLength,\n params.headSize,\n query,\n bias,\n 0\n );\n if (kvBNSH) {\n return applyAttention(\n context,\n Q,\n key,\n value,\n keyPaddingMask,\n void 0,\n pastKey,\n pastValue,\n relativePositionBias,\n params,\n attributes\n );\n }\n if (!key || !value) {\n throw new Error("key and value must be provided");\n }\n const K = maybeTransposeToBNSHAndAddBias(\n context,\n params.batchSize,\n params.numHeads,\n params.kvSequenceLength,\n params.headSize,\n key,\n bias,\n params.hiddenSize\n );\n const V = maybeTransposeToBNSHAndAddBias(\n context,\n params.batchSize,\n params.numHeads,\n params.kvSequenceLength,\n params.vHeadSize,\n value,\n bias,\n 2 * params.hiddenSize\n );\n applyAttention(\n context,\n Q,\n K,\n V,\n keyPaddingMask,\n void 0,\n pastKey,\n pastValue,\n relativePositionBias,\n params,\n attributes\n );\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/pad.ts\n var validateInputs19, getPadConstant, getPadReflect, getPadEdge, getPadWrap, getPadSnippet, createPadProgramInfo, createPadAttributesFromInputs, pad;\n var init_pad = __esm({\n "web/lib/wasm/jsep/webgpu/ops/pad.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n validateInputs19 = (inputs) => {\n if (!inputs || inputs.length < 1) {\n throw new Error("Too few inputs");\n }\n if (inputs[0].dataType !== 1 /* float */ && inputs[0].dataType !== 10 /* float16 */) {\n throw new Error("Input type must be float or float16.");\n }\n if (inputs.length >= 2) {\n let validPads = inputs[0].dims.length * 2 === inputs[1].dims[0];\n if (inputs.length === 4) {\n validPads = inputs[3].dims[0] * 2 === inputs[1].dims[0];\n }\n if (!validPads) {\n throw new Error("The pads should be a 1D tensor of shape [2 * input_rank] or [2 * num_axes].");\n }\n }\n };\n getPadConstant = (output, inputRank, padsLength) => {\n let block = "";\n for (let i = inputRank - 1; i >= 0; --i) {\n block += `\n k = i32(${output.indicesGet("indices", i)}) - ${getElementAt("uniforms.pads", i, padsLength)};\n if (k < 0) {\n break;\n }\n if (k >= i32(${getElementAt("uniforms.x_shape", i, inputRank)})) {\n break;\n }\n offset += k * i32(${getElementAt("uniforms.x_strides", i, inputRank)});\n `;\n }\n return `\n value = ${output.type.value}(uniforms.constant_value);\n for (var i = 0; i < 1; i++) {\n var offset = 0;\n var k = 0;\n ${block}\n value = x[offset];\n }\n `;\n };\n getPadReflect = (output, inputRank, padsLength) => {\n let block = "";\n for (let i = inputRank - 1; i >= 0; --i) {\n block += `\n k = i32(${output.indicesGet("indices", i)}) - ${getElementAt("uniforms.pads", i, padsLength)};\n if (k < 0) {\n k = -k;\n }\n {\n let _2n_1 = 2 * (i32(${getElementAt("uniforms.x_shape", i, inputRank)}) - 1);\n k = k % _2n_1;\n if(k >= i32(${getElementAt("uniforms.x_shape", i, inputRank)})) {\n k = _2n_1 - k;\n }\n }\n offset += k * i32(${getElementAt("uniforms.x_strides", i, inputRank)});\n `;\n }\n return `\n var offset = 0;\n var k = 0;\n ${block}\n value = x[offset];\n `;\n };\n getPadEdge = (output, inputRank, padsLength) => {\n let block = "";\n for (let i = inputRank - 1; i >= 0; --i) {\n block += `\n k = i32(${output.indicesGet("indices", i)}) - ${getElementAt("uniforms.pads", i, padsLength)};\n if (k < 0) {\n k = 0;\n }\n if (k >= i32(${getElementAt("uniforms.x_shape", i, inputRank)})) {\n k = i32(${getElementAt("uniforms.x_shape", i, inputRank)}) - 1;\n }\n offset += k * i32(${getElementAt("uniforms.x_strides", i, inputRank)});\n `;\n }\n return `\n var offset = 0;\n var k = 0;\n ${block}\n value = x[offset];\n `;\n };\n getPadWrap = (output, inputRank, padsLength) => {\n let block = "";\n for (let i = inputRank - 1; i >= 0; --i) {\n block += `\n k = i32(${output.indicesGet("indices", i)}) - ${getElementAt("uniforms.pads", i, padsLength)};\n if (k < 0) {\n k += i32(${getElementAt("uniforms.x_shape", i, inputRank)}]);\n }\n if (k >= i32(${getElementAt("uniforms.x_shape", i, inputRank)})) {\n k -= i32(${getElementAt("uniforms.x_shape", i, inputRank)});\n }\n offset += k * i32(${getElementAt("uniforms.x_strides", i, inputRank)});\n `;\n }\n return `\n var offset = 0;\n var k = 0;\n ${block}\n value = x[offset];\n `;\n };\n getPadSnippet = (output, inputRank, attributes) => {\n switch (attributes.mode) {\n case 0:\n return getPadConstant(output, inputRank, attributes.pads.length);\n case 1:\n return getPadReflect(output, inputRank, attributes.pads.length);\n case 2:\n return getPadEdge(output, inputRank, attributes.pads.length);\n case 3:\n return getPadWrap(output, inputRank, attributes.pads.length);\n default:\n throw new Error("Invalid mode");\n }\n };\n createPadProgramInfo = (inputs, attributes) => {\n const outputShape = ShapeUtil.padShape(inputs[0].dims.slice(), attributes.pads);\n const inputDims = inputs[0].dims;\n const outputSize = ShapeUtil.size(outputShape);\n const programUniforms = [{ type: 12 /* uint32 */, data: outputSize }, { type: 6 /* int32 */, data: attributes.pads }];\n if (attributes.mode === 0) {\n programUniforms.push({ type: inputs[0].dataType, data: attributes.value });\n }\n programUniforms.push(...createTensorShapeVariables(inputs[0].dims, outputShape));\n const inputDependencies = ["rank"];\n const getShaderSource = (shaderHelper) => {\n const output = outputVariable("output", inputs[0].dataType, outputShape.length);\n const input = inputVariable("x", inputs[0].dataType, inputDims.length);\n const dataType = input.type.value;\n const padSnippet = getPadSnippet(output, inputDims.length, attributes);\n const uniforms = [{ name: "output_size", type: "u32" }, { name: "pads", type: "i32", length: attributes.pads.length }];\n if (attributes.mode === 0) {\n uniforms.push({ name: "constant_value", type: dataType });\n }\n return `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(input, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n\n let indices = ${output.offsetToIndices("global_idx")};\n\n var value = ${dataType}(0);\n ${padSnippet}\n output[global_idx] = value;\n }`;\n };\n return {\n name: "Pad",\n shaderCache: { hint: `${attributes.mode}`, inputDependencies },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n ShapeUtil.size(outputShape) / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource\n };\n };\n createPadAttributesFromInputs = (inputs, attributes) => {\n if (inputs.length > 1) {\n const bigInt64Pads = inputs[1].getBigInt64Array();\n const value = inputs.length >= 3 && inputs[2].data ? inputs[2].getFloat32Array()[0] : 0;\n const inputRank = inputs[0].dims.length;\n const updatePads = new Int32Array(2 * inputRank).fill(0);\n if (inputs.length >= 4) {\n const axes = inputs[3].getBigInt64Array();\n for (let i = 0; i < axes.length; i++) {\n updatePads[Number(axes[i])] = Number(bigInt64Pads[i]);\n updatePads[Number(axes[i]) + inputRank] = Number(bigInt64Pads[i + axes.length]);\n }\n } else {\n bigInt64Pads.forEach((v, i) => updatePads[Number(i)] = Number(v));\n }\n const pads = [];\n updatePads.forEach((v) => pads.push(v));\n return { mode: attributes.mode, value, pads };\n } else {\n return attributes;\n }\n };\n pad = (context, attributes) => {\n validateInputs19(context.inputs);\n const updatedAttributes = createPadAttributesFromInputs(context.inputs, attributes);\n context.compute(createPadProgramInfo(context.inputs, updatedAttributes), { inputs: [0] });\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/pool.ts\n var validateInputs20, getAdjustedPoolAttributesAndOutputShape, getUniformAndPadInfo, generatePoolingCode, createShaderKeyFromAttributes, createAveragePoolShaderKeyFromAttributes, createMaxPoolShaderKeyFromAttributes, parsePoolCommonAttributes, createAveragePoolProgramInfo, parseAveragePoolAttributes, averagePool, globalPoolAttributes, parseGlobalAveragePoolAttributes, globalAveragePool, createMaxPoolProgramInfo, maxPool, parseMaxPoolAttributes, parseGlobalMaxPoolAttributes, globalMaxPool;\n var init_pool = __esm({\n "web/lib/wasm/jsep/webgpu/ops/pool.ts"() {\n "use strict";\n init_esm();\n init_wasm_common();\n init_util();\n init_common();\n validateInputs20 = (inputs) => {\n if (env2.webgpu.validateInputContent && (!inputs || inputs.length !== 1)) {\n throw new Error("Pool ops requires 1 input.");\n }\n };\n getAdjustedPoolAttributesAndOutputShape = (input, attributes, isGlobalOperator) => {\n const isChannelsLast = attributes.format === "NHWC";\n const inputShapeAsChannelFirst = input.dims.slice();\n if (isChannelsLast) {\n inputShapeAsChannelFirst.splice(1, 0, inputShapeAsChannelFirst.pop());\n }\n const hasDilations = Object.hasOwnProperty.call(attributes, "dilations");\n const kernelShape = attributes.kernelShape.slice();\n const strides = attributes.strides.slice();\n const dilations = hasDilations ? attributes.dilations.slice() : [];\n const pads = attributes.pads.slice();\n PoolConvUtil.adjustPoolAttributes(isGlobalOperator, inputShapeAsChannelFirst, kernelShape, strides, dilations, pads);\n const outputShapeAsChannelFirst = PoolConvUtil.computePoolOutputShape(\n isGlobalOperator,\n inputShapeAsChannelFirst,\n strides,\n dilations,\n kernelShape,\n pads,\n attributes.autoPad\n );\n const newAttributes = Object.assign({}, attributes);\n if (hasDilations) {\n Object.assign(newAttributes, { kernelShape, strides, pads, dilations, cacheKey: attributes.cacheKey });\n } else {\n Object.assign(newAttributes, { kernelShape, strides, pads, cacheKey: attributes.cacheKey });\n }\n const outputShapeAsChannelLast = outputShapeAsChannelFirst.slice();\n outputShapeAsChannelLast.push(outputShapeAsChannelLast.splice(1, 1)[0]);\n return [newAttributes, isChannelsLast ? outputShapeAsChannelLast : outputShapeAsChannelFirst];\n };\n getUniformAndPadInfo = (outputShape, attributes) => {\n const isChannelsLast = attributes.format === "NHWC";\n const outputSize = ShapeUtil.size(outputShape);\n const kernelSize = ShapeUtil.size(attributes.kernelShape);\n const programUniforms = [{ type: 12 /* uint32 */, data: outputSize }, { type: 12 /* uint32 */, data: kernelSize }];\n const uniforms = [{ name: "outputSize", type: "u32" }, { name: "kernelSize", type: "u32" }];\n if (attributes.kernelShape.length <= 2) {\n const kw = attributes.kernelShape[attributes.kernelShape.length - 1];\n const sw = attributes.strides[attributes.strides.length - 1];\n const pwStart = attributes.pads[attributes.pads.length / 2 - 1];\n const pwEnd = attributes.pads[attributes.pads.length - 1];\n const pwStartEndNotZero = !!(pwStart + pwEnd);\n programUniforms.push(\n { type: 12 /* uint32 */, data: kw },\n { type: 12 /* uint32 */, data: sw },\n { type: 12 /* uint32 */, data: pwStart },\n { type: 12 /* uint32 */, data: pwEnd }\n );\n uniforms.push(\n { name: "kw", type: "u32" },\n { name: "sw", type: "u32" },\n { name: "pwStart", type: "u32" },\n { name: "pwEnd", type: "u32" }\n );\n let phStartEndNotZero = false;\n if (attributes.kernelShape.length === 2) {\n const kh = attributes.kernelShape[attributes.kernelShape.length - 2];\n const sh = attributes.strides[attributes.strides.length - 2];\n const phStart = attributes.pads[attributes.pads.length / 2 - 2];\n const phEnd = attributes.pads[attributes.pads.length - 2];\n phStartEndNotZero = !!(phStart + phEnd);\n programUniforms.push(\n { type: 12 /* uint32 */, data: kh },\n { type: 12 /* uint32 */, data: sh },\n { type: 12 /* uint32 */, data: phStart },\n { type: 12 /* uint32 */, data: phEnd }\n );\n uniforms.push(\n { name: "kh", type: "u32" },\n { name: "sh", type: "u32" },\n { name: "phStart", type: "u32" },\n { name: "phEnd", type: "u32" }\n );\n }\n return [programUniforms, uniforms, true, pwStartEndNotZero, phStartEndNotZero];\n } else {\n if (isChannelsLast) {\n throw new Error("Pooling with kernelShape.length > 2 is not supported for NHWC format.");\n }\n const kernelStrides = ShapeUtil.computeStrides(attributes.kernelShape);\n programUniforms.push(\n { type: 12 /* uint32 */, data: kernelStrides },\n { type: 12 /* uint32 */, data: attributes.pads },\n { type: 12 /* uint32 */, data: attributes.strides }\n );\n uniforms.push(\n { name: "kernelStrides", type: "u32", length: kernelStrides.length },\n { name: "pads", type: "u32", length: attributes.pads.length },\n { name: "strides", type: "u32", length: attributes.strides.length }\n );\n const hasPads = attributes.pads.reduce((sum, cur) => sum + cur);\n return [programUniforms, uniforms, !!hasPads, false, false];\n }\n };\n generatePoolingCode = (shaderHelper, x, rank, outputShapeRank, attributes, op1, op2, start, uniforms, hasPads, pwStartEndNotZero, phStartEndNotZero) => {\n const isChannelsLast = attributes.format === "NHWC";\n const dataType = x.type.value;\n const output = outputVariable("output", x.type.tensor, outputShapeRank);\n if (attributes.kernelShape.length <= 2) {\n let codeW = "";\n let codeH = "";\n let codeHEnd = "";\n const dimIdxW = rank - (isChannelsLast ? 2 : 1);\n if (pwStartEndNotZero) {\n codeW = `\n for (var i: u32 = 0u; i < uniforms.kw; i++) {\n xIndices[${dimIdxW}] = indices[${dimIdxW}] * uniforms.sw - uniforms.pwStart + i;\n if (xIndices[${dimIdxW}] < 0 || xIndices[${dimIdxW}]\n >= uniforms.x_shape[${dimIdxW}]) {\n pad++;\n continue;\n }\n let x_val = x[${x.indicesToOffset("xIndices")}];\n ${op1}\n }`;\n } else {\n codeW = `\n for (var i: u32 = 0u; i < uniforms.kw; i++) {\n xIndices[${dimIdxW}] = indices[${dimIdxW}] * uniforms.sw - uniforms.pwStart + i;\n let x_val = x[${x.indicesToOffset("xIndices")}];\n ${op1}\n }`;\n }\n if (attributes.kernelShape.length === 2) {\n const dimIdxH = rank - (isChannelsLast ? 3 : 2);\n if (phStartEndNotZero) {\n codeH = `\n for (var j: u32 = 0u; j < uniforms.kh; j++) {\n xIndices[${dimIdxH}] = indices[${dimIdxH}] * uniforms.sh - uniforms.phStart + j;\n if (xIndices[${dimIdxH}] < 0 || xIndices[${dimIdxH}] >= uniforms.x_shape[${dimIdxH}]) {\n pad += i32(uniforms.kw);\n continue;\n }\n `;\n } else {\n codeH = `\n for (var j: u32 = 0u; j < uniforms.kh; j++) {\n xIndices[${dimIdxH}] = indices[${dimIdxH}] * uniforms.sh - uniforms.phStart + j;\n `;\n }\n codeHEnd = `\n }\n `;\n }\n const poolingCode = `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(x, output)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}\n\n let indices = ${output.offsetToIndices("global_idx")};\n var xIndices = ${output.offsetToIndices("global_idx")};\n\n var value = ${dataType}(${start});\n var pad = 0;\n ${codeH}\n ${codeW}\n ${codeHEnd}\n ${op2}\n\n output[global_idx] = value;\n }`;\n return poolingCode;\n } else {\n if (isChannelsLast) {\n throw new Error("Pooling with kernelShape.length > 2 is not supported for NHWC format.");\n }\n const stridesRank = attributes.kernelShape.length;\n const padsRank = attributes.pads.length;\n let padCode = "";\n if (hasPads) {\n padCode = `\n if (xIndices[j] >= uniforms.x_shape[j]) {\n pad++;\n isPad = true;\n break;\n }\n }\n if (!isPad) {\n let x_val = x[${x.indicesToOffset("xIndices")}];\n ${op1}\n }`;\n } else {\n padCode = `\n }\n let x_val = x[${x.indicesToOffset("xIndices")}];\n ${op1}\n `;\n }\n const poolingCode = `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(x, output)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}\n let indices = ${output.offsetToIndices("global_idx")};\n var xIndices = ${output.offsetToIndices("global_idx")};\n\n var offsets: array;\n\n var value = ${dataType}(${start});\n var pad = 0;\n var isPad = false;\n\n for (var i: u32 = 0u; i < uniforms.kernelSize; i++) {\n var offset = i;\n for (var j = 0u; j < ${stridesRank - 1}u; j++) {\n offsets[j] = offset / ${getElementAt("uniforms.kernelStrides", "j", stridesRank)};\n offset -= offsets[j] * ${getElementAt("uniforms.kernelStrides", "j", stridesRank)};\n }\n offsets[${stridesRank - 1}] = offset;\n\n isPad = false;\n for (var j = ${rank - stridesRank}u; j < ${rank}u; j++) {\n xIndices[j] = indices[j] * ${getElementAt("uniforms.strides", `j - ${rank - stridesRank}u`, stridesRank)}\n + offsets[j - ${rank - stridesRank}u] - ${getElementAt("uniforms.pads", "j - 2u", padsRank)};\n ${padCode}\n }\n ${op2}\n\n output[global_idx] = value;\n }`;\n return poolingCode;\n }\n };\n createShaderKeyFromAttributes = (attributes) => `${attributes.format};${attributes.ceilMode};${attributes.autoPad};${attributes.kernelShape.length}`;\n createAveragePoolShaderKeyFromAttributes = (attributes) => `${createShaderKeyFromAttributes(attributes)};${attributes.countIncludePad}`;\n createMaxPoolShaderKeyFromAttributes = (attributes) => `${createShaderKeyFromAttributes(attributes)};${attributes.storageOrder};${attributes.dilations}`;\n parsePoolCommonAttributes = (attributes) => ({\n format: attributes.format,\n autoPad: ["NOTSET", "VALID", "SAME_UPPER", "SAME_LOWER"][attributes.auto_pad],\n ceilMode: attributes.ceil_mode,\n kernelShape: attributes.kernel_shape,\n strides: attributes.strides,\n pads: attributes.pads\n });\n createAveragePoolProgramInfo = (name, input, isGlobalOperator, attributes) => {\n const [adjustedAttributes, outputShape] = getAdjustedPoolAttributesAndOutputShape(input, attributes, isGlobalOperator);\n const x = inputVariable("x", input.dataType, input.dims.length);\n const dataType = x.type.value;\n const op1 = "value += x_val;";\n let op2 = "";\n if (adjustedAttributes.countIncludePad) {\n op2 += `value /= ${dataType}(uniforms.kernelSize);`;\n } else {\n op2 += `value /= ${dataType}(i32(uniforms.kernelSize) - pad);`;\n }\n const [programUniforms, uniforms, hasPads, pwStartEndNotZero, phStartEndNotZero] = getUniformAndPadInfo(outputShape, adjustedAttributes);\n programUniforms.push(...createTensorShapeVariables(input.dims, outputShape));\n const inputDependencies = ["rank"];\n return {\n name,\n shaderCache: { hint: `${attributes.cacheKey};${hasPads};${pwStartEndNotZero};${phStartEndNotZero}`, inputDependencies },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: input.dataType }],\n dispatchGroup: { x: Math.ceil(\n ShapeUtil.size(outputShape) / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource: (shaderHelper) => generatePoolingCode(\n shaderHelper,\n x,\n input.dims.length,\n outputShape.length,\n adjustedAttributes,\n op1,\n op2,\n 0,\n uniforms,\n hasPads,\n pwStartEndNotZero,\n phStartEndNotZero\n )\n };\n };\n parseAveragePoolAttributes = (attributes) => {\n const countIncludePad = attributes.count_include_pad === 0 ? false : true;\n const attr = parsePoolCommonAttributes(attributes);\n if (attr.ceilMode !== 0) {\n throw new Error("using ceil() in shape computation is not yet supported for AveragePool");\n }\n const averagePoolAttributes = { countIncludePad, ...attr, cacheKey: "" };\n return { ...averagePoolAttributes, cacheKey: createAveragePoolShaderKeyFromAttributes(averagePoolAttributes) };\n };\n averagePool = (context, attributes) => {\n validateInputs20(context.inputs);\n context.compute(createAveragePoolProgramInfo("AveragePool", context.inputs[0], false, attributes));\n };\n globalPoolAttributes = {\n autoPad: "",\n ceilMode: 0,\n countIncludePad: false,\n kernelShape: [],\n strides: [],\n pads: [],\n storageOrder: 0,\n dilations: []\n };\n parseGlobalAveragePoolAttributes = (attributes) => {\n const format = attributes.format;\n return { format, ...globalPoolAttributes, cacheKey: format };\n };\n globalAveragePool = (context, attributes) => {\n validateInputs20(context.inputs);\n context.compute(createAveragePoolProgramInfo("GlobalAveragePool", context.inputs[0], true, attributes));\n };\n createMaxPoolProgramInfo = (name, input, isGlobalOperator, attributes) => {\n const [adjustedAttributes, outputShape] = getAdjustedPoolAttributesAndOutputShape(input, attributes, isGlobalOperator);\n const op1 = `\n value = max(x_val, value);\n `;\n const op2 = "";\n const x = inputVariable("x", input.dataType, input.dims.length);\n const inputDependencies = ["rank"];\n const [programUniforms, uniforms, hasPads, pwStartEndNotZero, phStartEndNotZero] = getUniformAndPadInfo(outputShape, adjustedAttributes);\n programUniforms.push(...createTensorShapeVariables(input.dims, outputShape));\n return {\n name,\n shaderCache: { hint: `${attributes.cacheKey};${hasPads};${pwStartEndNotZero};${phStartEndNotZero}`, inputDependencies },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: input.dataType }],\n dispatchGroup: { x: Math.ceil(\n ShapeUtil.size(outputShape) / 64\n /* workgroup size */\n ) },\n programUniforms\n }),\n getShaderSource: (shaderHelper) => generatePoolingCode(\n shaderHelper,\n x,\n input.dims.length,\n outputShape.length,\n adjustedAttributes,\n op1,\n op2,\n input.dataType === 10 /* float16 */ ? -65504 : -1e5,\n uniforms,\n hasPads,\n pwStartEndNotZero,\n phStartEndNotZero\n )\n };\n };\n maxPool = (context, attributes) => {\n validateInputs20(context.inputs);\n context.compute(createMaxPoolProgramInfo("MaxPool", context.inputs[0], false, attributes));\n };\n parseMaxPoolAttributes = (attributes) => {\n const storageOrder = attributes.storage_order;\n const dilations = attributes.dilations;\n const attr = parsePoolCommonAttributes(attributes);\n if (storageOrder !== 0) {\n throw new Error("column major storage order is not yet supported for MaxPool");\n }\n if (attr.ceilMode !== 0) {\n throw new Error("using ceil() in shape computation is not yet supported for MaxPool");\n }\n const maxPoolAttributes = { storageOrder, dilations, ...attr, cacheKey: "" };\n return { ...maxPoolAttributes, cacheKey: createMaxPoolShaderKeyFromAttributes(maxPoolAttributes) };\n };\n parseGlobalMaxPoolAttributes = (attributes) => {\n const format = attributes.format;\n return { format, ...globalPoolAttributes, cacheKey: format };\n };\n globalMaxPool = (context, attributes) => {\n validateInputs20(context.inputs);\n context.compute(createMaxPoolProgramInfo("GlobalMaxPool", context.inputs[0], true, attributes));\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/range.ts\n var validateInputsContent, createRangeProgramInfo, range;\n var init_range = __esm({\n "web/lib/wasm/jsep/webgpu/ops/range.ts"() {\n "use strict";\n init_esm();\n init_wasm_common();\n init_common();\n validateInputsContent = (start, limit, delta) => {\n const sameStartLimit = start === limit;\n const increasingRangeNegativeStep = start < limit && delta < 0;\n const decreasingRangePositiveStep = start > limit && delta > 0;\n if (sameStartLimit || increasingRangeNegativeStep || decreasingRangePositiveStep) {\n throw new Error("Range these inputs\' contents are invalid.");\n }\n };\n createRangeProgramInfo = (start, limit, delta, dataType) => {\n const numElements = Math.abs(Math.ceil((limit - start) / delta));\n const outputShape = [numElements];\n const outputSize = numElements;\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: dataType, data: start },\n { type: dataType, data: delta },\n ...createTensorShapeVariables(outputShape)\n ];\n const getShaderSource = (shaderHelper) => {\n const output = outputVariable("output", dataType, outputShape.length);\n const wgslType = output.type.value;\n const uniforms = [\n { name: "outputSize", type: "u32" },\n { name: "start", type: wgslType },\n { name: "delta", type: wgslType }\n ];\n return `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}\n output[global_idx] = uniforms.start + ${wgslType}(global_idx) * uniforms.delta;\n }`;\n };\n return {\n name: "Range",\n shaderCache: { hint: `${dataType}` },\n getShaderSource,\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n })\n };\n };\n range = (context) => {\n let start = 0;\n let limit = 0;\n let delta = 0;\n if (context.inputs[0].dataType === 6 /* int32 */) {\n start = context.inputs[0].getInt32Array()[0];\n limit = context.inputs[1].getInt32Array()[0];\n delta = context.inputs[2].getInt32Array()[0];\n } else if (context.inputs[0].dataType === 1 /* float */) {\n start = context.inputs[0].getFloat32Array()[0];\n limit = context.inputs[1].getFloat32Array()[0];\n delta = context.inputs[2].getFloat32Array()[0];\n }\n if (env2.webgpu.validateInputContent) {\n validateInputsContent(start, limit, delta);\n }\n context.compute(createRangeProgramInfo(start, limit, delta, context.inputs[0].dataType), { inputs: [] });\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/resize.ts\n var validateScales, updateScales, validateInputs21, getOriginalCoordinateFromResizedCoordinate, getNearestPixelFromOriginal, updateRoI, initOutputShape, adjustOutputShape, calculateOriginalIndicesFromOutputIndices, calculateInputIndicesFromOutputIndices, checkInputIndices, setChannelAndBatchIndices, bilinearInterpolation, bicubicInterpolation, trilinearInterpolation, createResizeProgramInfo, getOpsetVersionFromCustomDataBuffer, resize, parseResizeAttributes;\n var init_resize = __esm({\n "web/lib/wasm/jsep/webgpu/ops/resize.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateScales = (scales, attributes) => {\n scales.every((value) => value > 0 || (() => {\n throw new Error("Resize requires scales input values to be positive");\n }));\n if (scales.length > 0) {\n if (attributes.mode === "linear") {\n if (!(scales.length === 2 || scales.length === 3 || scales.length === 4 && scales[0] === 1 && scales[1] === 1 || scales.length === 4 && scales[0] === 1 && scales[3] === 1 || scales.length === 5 && scales[0] === 1 && scales[1] === 1)) {\n throw new Error(\n `For linear mode, Resize requires scales to be 2D, 3D, 4D with either two outermost or one innermost and\n one outermost scale values equal to 1, or 5D with two outermost scale values equal to 1`\n );\n }\n } else if (attributes.mode === "cubic") {\n if (!(scales.length === 2 || scales.length === 4 && scales[0] === 1 && scales[1] === 1 || scales.length === 4 && scales[0] === 1 && scales[3] === 1)) {\n throw new Error("Resize requires scales input size to be 2 or 4 for cubic mode");\n }\n }\n }\n };\n updateScales = (scales, axes, rank) => {\n axes.every((value) => value >= 0 && value < rank || (() => {\n throw new Error("Resize requires axes input values to be positive and less than rank");\n }));\n const newScales = new Array(rank).fill(1);\n axes.forEach((value, index) => newScales[value] = scales[index]);\n return newScales;\n };\n validateInputs21 = (inputs, attributes, opsetVersion, scales, sizes, roi) => {\n const [roiInputIndex, scalesInputIndex, sizesInputIndex] = opsetVersion > 10 ? [1, 2, 3] : [-1, inputs.length > 1 ? 1 : -1, -1];\n const rank = inputs[0].dims.length;\n if (roiInputIndex > 0 && inputs.length > roiInputIndex && inputs[roiInputIndex].dims.length > 0) {\n inputs[roiInputIndex].getFloat32Array().forEach((value) => roi.push(value));\n } else if (attributes.coordinateTransformMode === "tf_crop_and_resize") {\n throw new Error("Resize requires RoI input to be specified when coordinateTransformMode is tfCropAndResize");\n }\n if (scalesInputIndex > 0 && inputs.length > scalesInputIndex && inputs[scalesInputIndex].dims.length > 0) {\n inputs[scalesInputIndex].getFloat32Array().forEach((value) => scales.push(value));\n if (scales.length !== 0 && (scales.length !== rank && (opsetVersion >= 18 && scales.length !== attributes.axes.length))) {\n throw new Error(\n "Resize requires scales input size to be same as input rank or axes size for opset 18 and up"\n );\n }\n validateScales(scales, attributes);\n if (attributes.axes.length > 0) {\n updateScales(scales, attributes.axes, rank).forEach((value, index) => scales[index] = value);\n }\n }\n if (sizesInputIndex > 0 && inputs.length > sizesInputIndex) {\n inputs[sizesInputIndex].getBigInt64Array().forEach((value) => sizes.push(Number(value)));\n if (sizes.length !== rank || opsetVersion >= 18 && sizes.length === attributes.axes.length) {\n throw new Error("Resize requires sizes input size to be same as input rank or axes size for opset 18 and up");\n }\n }\n if (attributes.axes.length > 0) {\n if (scales.length !== attributes.axes.length) {\n throw new Error(\'Resize requires "scales" input size to be of axes rank when axes attributes is specified\');\n }\n if (sizes.length !== attributes.axes.length) {\n throw new Error(\n \'Resize requires "sizes" input size to be of rank axes rank when axes attributes is specified\'\n );\n }\n }\n if (typeof scales !== "undefined" && typeof sizes !== "undefined" && scales.length > 0 && sizes.length > rank) {\n throw new Error("Resize requires only of scales or sizes to be specified");\n }\n };\n getOriginalCoordinateFromResizedCoordinate = (coordinateTransferMode, dType) => `fn getOriginalCoordinateFromResizedCoordinate(xResized: u32, xScale: f32, lengthResized: u32,\n lengthOriginal: u32, roiStart: f32, roiEnd: f32) -> ${dType} { ` + (() => {\n switch (coordinateTransferMode) {\n case "asymmetric":\n return `return ${dType}(xResized) / ${dType}(xScale);`;\n case "pytorch_half_pixel":\n return `if (lengthResized > 1) {\n return (${dType}(xResized) + 0.5) / ${dType}(xScale) - 0.5;\n } else {\n return 0.0;\n }`;\n case "tf_half_pixel_for_nn":\n return `return (${dType}(xResized) + 0.5) / ${dType}(xScale);`;\n case "align_corners":\n return `if (lengthResized == 1) {\n return 0.0;\n } else {\n // The whole part and the fractional part are calculated separately due to inaccuracy of floating\n // point division. As an example, f32(21) / f32(7) may evaluate to 2.99... instead of 3, causing an\n // offset-by-one error later in floor().\n let whole = ${dType}(xResized * (lengthOriginal - 1) / (lengthResized - 1));\n let fract =\n ${dType}(xResized * (lengthOriginal - 1) % (lengthResized - 1)) / ${dType}(lengthResized - 1);\n return whole + fract;\n }`;\n case "tf_crop_and_resize":\n return `if (lengthResized > 1) {\n return ${dType}(roiStart) * ${dType}(lengthOriginal - 1) +\n (${dType}(xResized) * ${dType}(roiEnd - roiStart) * ${dType}(lengthOriginal - 1)) /\n ${dType}(lengthResized - 1);\n } else {\n return 0.5 * ${dType}(roiStart + roiEnd) * ${dType}(lengthOriginal - 1);\n }`;\n case "half_pixel_symmetric":\n return `const outputWidth = ${dType}xScale * ${dType}(lengthResized);\n const adjustment = ${dType}(lengthResized) / outputWidth;\n const center = ${dType}(lengthOriginal) / 2;\n const offset = center * (1 - adjustment);\n return offset + ((${dType}(xResized) + 0.5) / ${dType}(xScale)) - 0.5;`;\n case "half_pixel":\n return `return ((${dType}(xResized) + 0.5) / ${dType}(xScale)) - 0.5;`;\n default:\n throw new Error(`Coordinate transform mode ${coordinateTransferMode} is not supported`);\n }\n })() + "}";\n getNearestPixelFromOriginal = (nearestMode, opsetVersion, dType) => `fn getNearestPixelFromOriginal(xOriginal: ${dType}, isDownSample: bool) -> ${dType} {` + (() => {\n switch (nearestMode) {\n case "round_prefer_ceil":\n return "if (fract(xOriginal) == 0.5) { return ceil(xOriginal); } else { return round(xOriginal); }";\n case "floor":\n return "return floor(xOriginal);";\n case "ceil":\n return "return ceil(xOriginal);";\n case "round_prefer_floor":\n return "if (fract(xOriginal) == 0.5) { return floor(xOriginal); } else { return round(xOriginal); }";\n case "simple":\n default:\n if (opsetVersion < 11) {\n return "if (isDownSample) { return ceil(xOriginal); } else { return xOriginal; }";\n }\n throw new Error(`Nearest mode ${nearestMode} is not supported`);\n }\n })() + "}";\n updateRoI = (roi, axes, rank) => {\n const roiTmp = new Array(rank).fill(0).concat(new Array(rank).fill(1));\n const roiLocal = roi.length === 0 ? roiTmp : roi.slice();\n if (axes.length > 0) {\n axes.forEach((v, i) => {\n roiTmp[v] = roiLocal[i];\n roiTmp[i + rank] = roiLocal[axes.length + i];\n });\n return roiTmp;\n }\n return roiLocal;\n };\n initOutputShape = (inputShape, scales, sizes, axes) => {\n let outputShape = [];\n if (sizes.length > 0) {\n if (axes.length > 0) {\n inputShape.forEach((v) => outputShape.push(v));\n if (Math.max(...axes) > inputShape.length) {\n throw new Error("axes is out of bound");\n }\n axes.forEach((v, i) => outputShape[v] = sizes[i]);\n } else {\n sizes.forEach((v) => outputShape.push(v));\n }\n } else {\n if (scales.length === 0) {\n throw new Error("Resize requires either scales or sizes.");\n } else {\n outputShape = inputShape.map((value, index) => Math.round(value * scales[index]));\n }\n }\n return outputShape;\n };\n adjustOutputShape = (inputShape, scales, attributes) => {\n const scaleInPolicy = (() => {\n switch (attributes.keepAspectRatioPolicy) {\n case "not_larger":\n return attributes.axes.length > 0 ? Math.min(...attributes.axes.map((i) => scales[i]), Number.MAX_VALUE) : Math.min(...scales, Number.MAX_VALUE);\n case "not_smaller":\n return attributes.axes.length > 0 ? Math.max(...attributes.axes.map((i) => scales[i]), Number.MIN_VALUE) : Math.max(...scales, Number.MIN_VALUE);\n default:\n throw new Error(`Keep aspect ratio policy ${attributes.keepAspectRatioPolicy} is not supported`);\n }\n })();\n scales.fill(1, 0, scales.length);\n const adjustedOutputShape = inputShape.slice();\n if (attributes.axes.length > 0) {\n attributes.axes.forEach((v) => scales[v] = scaleInPolicy);\n attributes.axes.forEach((v) => adjustedOutputShape[v] = Math.round(inputShape[v] * scales[v]));\n } else {\n scales.fill(scaleInPolicy, 0, scales.length);\n adjustedOutputShape.forEach((v, i) => adjustedOutputShape[i] = Math.round(v * scales[i]));\n }\n return adjustedOutputShape;\n };\n calculateOriginalIndicesFromOutputIndices = (output, inputShape, outputShape, scalesLength, roiLength) => `\n fn calculateOriginalIndicesFromOutputIndices(output_indices: ${output.type.indices}) -> array<${output.type.value}, ${outputShape.length}> {\n var original_indices: array<${output.type.value}, ${outputShape.length}>;\n for (var i:u32 = 0; i < ${outputShape.length}; i++) {\n var output_index = ${output.indicesGet("output_indices", "i")};\n var scale = ${getElementAt("uniforms.scales", "i", scalesLength)};\n var roi_low = ${getElementAt("uniforms.roi", "i", roiLength)};\n var roi_hi = ${getElementAt("uniforms.roi", `i + ${inputShape.length}`, roiLength)};\n if (scale == 1.0) {\n original_indices[i] = ${output.type.value}(output_index);\n } else {\n var input_shape_i = ${getElementAt("uniforms.input_shape", "i", inputShape.length)};\n var output_shape_i = ${getElementAt("uniforms.output_shape", "i", outputShape.length)};\n original_indices[i] = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i,\n input_shape_i, roi_low, roi_hi);\n }\n }\n return original_indices;\n }`;\n calculateInputIndicesFromOutputIndices = (input, output, inputShape, outputShape, scalesLength, roiLength, useExtrapolation) => `\n fn calculateInputIndicesFromOutputIndices(output_indices: ${output.type.indices}) -> ${input.type.indices} {\n var input_indices: ${input.type.indices};\n for (var i:u32 = 0; i < ${outputShape.length}; i++) {\n var output_index = ${output.indicesGet("output_indices", "i")};\n var input_index: u32;\n var scale = ${getElementAt("uniforms.scales", "i", scalesLength)};\n if (scale == 1.0) {\n input_index = output_index;\n } else {\n var roi_low = ${getElementAt("uniforms.roi", "i", roiLength)};\n var roi_hi = ${getElementAt("uniforms.roi", `i + ${inputShape.length}`, roiLength)};\n var input_shape_i = ${getElementAt("uniforms.input_shape", "i", inputShape.length)};\n var output_shape_i = ${getElementAt("uniforms.output_shape", "i", outputShape.length)};\n var original_idx = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i,\n input_shape_i, roi_low, roi_hi);\n if (!${useExtrapolation} || (original_idx >= 0 && original_idx < ${output.type.value}(input_shape_i))) {\n if (original_idx < 0) {\n input_index = 0;\n } else if (original_idx > ${output.type.value}(input_shape_i - 1)) {\n input_index = input_shape_i - 1;\n } else {\n input_index = u32(getNearestPixelFromOriginal(original_idx, scale < 1));\n }\n } else {\n input_index = u32(original_idx);\n }\n }\n ${input.indicesSet("input_indices", "i", " input_index")}\n }\n return input_indices;\n }`;\n checkInputIndices = (input, inputShape) => `\n fn checkInputIndices(input_indices: ${input.type.indices}) -> bool {\n for (var i:u32 = 0; i < ${inputShape.length}; i++) {\n var input_index = ${input.indicesGet("input_indices", "i")};\n if (input_index < 0 || input_index >= ${getElementAt("uniforms.input_shape", "i", inputShape.length)}) {\n return false;\n }\n }\n return true;\n }`;\n setChannelAndBatchIndices = (input, channelIdx, batchIdx, spacialDims) => input.rank > spacialDims ? `\n ${input.indicesSet("input_indices", channelIdx, "channel")};\n ${input.indicesSet("input_indices", batchIdx, "batch")};\n` : "";\n bilinearInterpolation = (input, output, inputShape, useExtrapolation, extrapolationValue) => {\n const isNchw = true;\n const [batchIdx, heightIdx, widthIdx, channelIdx] = inputShape.length === 2 ? [-1, 0, 1, -1] : isNchw ? [0, 2, 3, 1] : [0, 1, 2, 3];\n const dType = input.type.value;\n return `\n fn getInputValue(batch: u32, channel: u32, row: u32, col: u32) -> ${dType} {\n var input_indices: ${input.type.indices};\n ${input.indicesSet("input_indices", heightIdx, `max(0, min(row, ${inputShape[heightIdx]} - 1))`)};\n ${input.indicesSet("input_indices", widthIdx, `max(0, min(col, ${inputShape[widthIdx]} - 1))`)};\n ${setChannelAndBatchIndices(input, channelIdx, batchIdx, 2)}\n return ${input.getByIndices("input_indices")};\n }\n\n fn bilinearInterpolation(output_indices: ${output.type.indices}) -> ${dType} {\n var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices);\n var row:${dType} = originalIndices[${heightIdx}];\n var col:${dType} = originalIndices[${widthIdx}];\n ${useExtrapolation ? `if (row < 0 || row > (${inputShape[heightIdx]} - 1) || col < 0 || col > (${inputShape[widthIdx]} - 1)) {\n return ${extrapolationValue};\n }` : ""};\n row = max(0, min(row, ${inputShape[heightIdx]} - 1));\n col = max(0, min(col, ${inputShape[widthIdx]} - 1));\n var row1: u32 = u32(row);\n var col1: u32 = u32(col);\n var row2: u32 = u32(row + 1);\n var col2: u32 = u32(col + 1);\n var channel: u32 = ${inputShape.length > 2 ? `u32(originalIndices[${channelIdx}])` : "0"};\n var batch: u32 = ${inputShape.length > 2 ? `u32(originalIndices[${batchIdx}])` : "0"};\n var x11: ${dType} = getInputValue(batch, channel, row1, col1);\n var x12: ${dType} = getInputValue(batch, channel, row1, col2);\n var x21: ${dType} = getInputValue(batch, channel, row2, col1);\n var x22: ${dType} = getInputValue(batch, channel, row2, col2);\n var dx1: ${dType} = abs(row - ${dType}(row1));\n var dx2: ${dType} = abs(${dType}(row2) - row);\n var dy1: ${dType} = abs(col - ${dType}(col1));\n var dy2: ${dType} = abs(${dType}(col2) - col);\n if (row1 == row2) {\n dx1 = 0.5;\n dx2 = 0.5;\n }\n if (col1 == col2) {\n dy1 = 0.5;\n dy2 = 0.5;\n }\n return (x11 * dx2 * dy2 + x12 * dx2 * dy1 + x21 * dx1 * dy2 + x22 * dx1 * dy1);\n }`;\n };\n bicubicInterpolation = (input, output, inputShape, outputShape, scales, roi, cubicCoeffA, useExtrapolation, extrapolationValue, excludeOutside) => {\n const is2D = inputShape.length === 2;\n const isNchw = true;\n const [heightIdx, widthIdx] = is2D ? [0, 1] : isNchw ? [2, 3] : [1, 2];\n const dType = input.type.value;\n const createCubicInterpolationFunction = (idx) => {\n const direction = idx === heightIdx ? "row" : "col";\n return `\n fn ${direction}CubicInterpolation(input_indices: ${input.type.indices}, output_indices: ${output.type.indices}) -> ${dType} {\n var output_index = ${output.indicesGet("output_indices", idx)};\n var originalIdx: ${dType} = getOriginalCoordinateFromResizedCoordinate(output_index, ${scales[idx]},\n ${outputShape[idx]}, ${inputShape[idx]}, ${roi[idx]}, ${roi[idx]} + ${inputShape.length});\n var fractOriginalIdx: ${dType} = originalIdx - floor(originalIdx);\n var coefs = getCubicInterpolationCoefs(fractOriginalIdx);\n\n if (${useExtrapolation} && (originalIdx < 0 || originalIdx > (${inputShape[idx]} - 1))) {\n return ${extrapolationValue};\n }\n var data: array<${dType}, 4> = array<${dType}, 4>(0.0, 0.0, 0.0, 0.0);\n for (var i: i32 = -1; i < 3; i++) {\n var ${direction}: ${dType} = originalIdx + ${dType}(i);\n if (${direction} < 0 || ${direction} >= ${inputShape[idx]}) {\n ${(() => {\n if (excludeOutside) {\n return `coefs[i + 1] = 0.0;\n continue;`;\n } else if (useExtrapolation) {\n return `return ${extrapolationValue};`;\n } else {\n return `${direction} = max(0, min(${direction}, ${inputShape[idx]} - 1));`;\n }\n })()};\n }\n var input_indices_copy: ${input.type.indices} = input_indices;\n ${input.indicesSet("input_indices_copy", idx, `u32(${direction})`)};\n data[i + 1] = ${idx === heightIdx ? input.getByIndices("input_indices_copy") : "rowCubicInterpolation(input_indices_copy, output_indices)"};\n }\n return cubicInterpolation1D(data, coefs);\n }`;\n };\n return `\n ${createCubicInterpolationFunction(heightIdx)};\n ${createCubicInterpolationFunction(widthIdx)};\n fn getCubicInterpolationCoefs(s: ${dType}) -> array<${dType}, 4> {\n var absS = abs(s);\n var coeffs: array<${dType}, 4> = array<${dType}, 4>(0.0, 0.0, 0.0, 0.0);\n var oneMinusAbsS: ${dType} = 1.0 - absS;\n var twoMinusAbsS: ${dType} = 2.0 - absS;\n var onePlusAbsS: ${dType} = 1.0 + absS;\n coeffs[0] = ((${cubicCoeffA} * onePlusAbsS - 5 * ${cubicCoeffA}) * onePlusAbsS + 8 * ${cubicCoeffA}) * onePlusAbsS - 4 * ${cubicCoeffA};\n coeffs[1] = ((${cubicCoeffA} + 2) * absS - (${cubicCoeffA} + 3)) * absS * absS + 1;\n coeffs[2] = ((${cubicCoeffA} + 2) * oneMinusAbsS - (${cubicCoeffA} + 3)) * oneMinusAbsS * oneMinusAbsS + 1;\n coeffs[3] = ((${cubicCoeffA} * twoMinusAbsS - 5 * ${cubicCoeffA}) * twoMinusAbsS + 8 * ${cubicCoeffA}) * twoMinusAbsS - 4 * ${cubicCoeffA};\n return coeffs;\n }\n\n fn cubicInterpolation1D(x: array<${dType}, 4>, coefs: array<${dType}, 4>) -> ${dType} {\n var coefsSum: ${dType} = coefs[0] + coefs[1] + coefs[2] + coefs[3];\n return (x[0] * coefs[0] + x[1] * coefs[1]+ x[2] * coefs[2]+ x[3] * coefs[3]) / coefsSum;\n }\n\n fn bicubicInterpolation(output_indices: ${output.type.indices}) -> ${dType} {\n var input_indices: ${input.type.indices} = output_indices;\n return colCubicInterpolation(input_indices, output_indices);\n }\n `;\n };\n trilinearInterpolation = (input, output, inputShape, useExtrapolation, extrapolationValue) => {\n const isNchw = true;\n const [batchIdx, depthIdx, heightIdx, widthIdx, channelIdx] = inputShape.length === 3 ? [-1, 0, 1, 2, -1] : isNchw ? [0, 2, 3, 4, 1] : [0, 1, 2, 3, 4];\n const dType = input.type.value;\n return `\n fn getInputValue(batch: u32, channel: u32, depth:u32, height: u32, width: u32) -> ${dType} {\n var input_indices: ${input.type.indices};\n ${input.indicesSet("input_indices", depthIdx, `max(0, min(depth, ${inputShape[depthIdx]} - 1))`)};\n ${input.indicesSet("input_indices", heightIdx, `max(0, min(height, ${inputShape[heightIdx]} - 1))`)};\n ${input.indicesSet("input_indices", widthIdx, `max(0, min(width, ${inputShape[widthIdx]} - 1))`)};\n ${setChannelAndBatchIndices(input, channelIdx, batchIdx, 3)}\n return ${input.getByIndices("input_indices")};\n }\n\n fn trilinearInterpolation(output_indices: ${output.type.indices}) -> ${dType} {\n var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices);\n var depth:${dType} = originalIndices[${depthIdx}];\n var height:${dType} = originalIndices[${heightIdx}];\n var width:${dType} = originalIndices[${widthIdx}];\n ${useExtrapolation ? `if (depth < 0 || depth > (${inputShape[depthIdx]} - 1) || height < 0 || height > (${inputShape[heightIdx]} - 1) || width < 0 || (width > ${inputShape[widthIdx]} - 1)) {\n return ${extrapolationValue};\n }` : ""};\n\n depth = max(0, min(depth, ${inputShape[depthIdx]} - 1));\n height = max(0, min(height, ${inputShape[heightIdx]} - 1));\n width = max(0, min(width, ${inputShape[widthIdx]} - 1));\n var depth1: u32 = u32(depth);\n var height1: u32 = u32(height);\n var width1: u32 = u32(width);\n var depth2: u32 = u32(depth + 1);\n var height2: u32 = u32(height + 1);\n var width2: u32 = u32(width + 1);\n var channel: u32 = ${inputShape.length > 3 ? `u32(originalIndices[${channelIdx}])` : "0"};\n var batch: u32 = ${inputShape.length > 3 ? `u32(originalIndices[${batchIdx}])` : "0"};\n\n var x111: ${dType} = getInputValue(batch, channel, depth1, height1, width1);\n var x112: ${dType} = getInputValue(batch, channel, depth1, height1, width2);\n var x121: ${dType} = getInputValue(batch, channel, depth1, height2, width1);\n var x122: ${dType} = getInputValue(batch, channel, depth1, height2, width2);\n var x211: ${dType} = getInputValue(batch, channel, depth2, height1, width1);\n var x212: ${dType} = getInputValue(batch, channel, depth2, height1, width2);\n var x221: ${dType} = getInputValue(batch, channel, depth2, height2, width1);\n var x222: ${dType} = getInputValue(batch, channel, depth2, height2, width2);\n var dx1: ${dType} = abs(depth - ${dType}(depth1));\n var dx2: ${dType} = abs(${dType}(depth2) - depth);\n var dy1: ${dType} = abs(height - ${dType}(height1));\n var dy2: ${dType} = abs(${dType}(height2) - height);\n var dz1: ${dType} = abs(width - ${dType}(width1));\n var dz2: ${dType} = abs(${dType}(width2) - width);\n if (depth1 == depth2) {\n dx1 = 0.5;\n dx2 = 0.5;\n }\n if (height1 == height2) {\n dy1 = 0.5;\n dy2 = 0.5;\n }\n if (width1 == width2) {\n dz1 = 0.5;\n dz2 = 0.5;\n }\n return (x111 * dx2 * dy2 * dz2 + x112 * dx2 * dy2 * dz1 + x121 * dx2 * dy1 *dz2 + x122 * dx2 * dy1 * dz1 +\n x211 * dx1 * dy2 * dz2 + x212 * dx1 * dy2 * dz1 + x221 * dx1 * dy1 *dz2 + x222 * dx1 * dy1 * dz1);\n }`;\n };\n createResizeProgramInfo = (inputTensor, attributes, opsetVersion, scalesInput, sizes, roiInput) => {\n const inputShape = inputTensor.dims;\n const roi = updateRoI(roiInput, attributes.axes, inputShape.length);\n let outputShape = initOutputShape(inputShape, scalesInput, sizes, attributes.axes);\n let scales = scalesInput.slice();\n if (scalesInput.length === 0) {\n scales = inputShape.map((value, index) => value === 0 ? 1 : outputShape[index] / value);\n if (attributes.keepAspectRatioPolicy !== "stretch") {\n outputShape = adjustOutputShape(inputShape, scales, attributes);\n }\n }\n const output = outputVariable("output", inputTensor.dataType, outputShape.length);\n const input = inputVariable("input", inputTensor.dataType, inputShape.length);\n const outputSize = ShapeUtil.size(outputShape);\n const noScale = inputShape.length === outputShape.length && inputShape.every((d, i) => d === outputShape[i]);\n const useExtrapolation = attributes.coordinateTransformMode === "tf_crop_and_resize";\n const extrapolationValue = attributes.extrapolationValue;\n const dataType = input.type.value;\n const getShaderSource = (shaderHelper) => `\n ${noScale ? "" : `\n ${getOriginalCoordinateFromResizedCoordinate(attributes.coordinateTransformMode, dataType)};\n ${(() => {\n switch (attributes.mode) {\n case "nearest":\n return `\n ${checkInputIndices(input, inputShape)};\n ${getNearestPixelFromOriginal(attributes.nearestMode, opsetVersion, dataType)};\n ${calculateInputIndicesFromOutputIndices(\n input,\n output,\n inputShape,\n outputShape,\n scales.length,\n roi.length,\n useExtrapolation\n )};\n `;\n case "linear":\n return `\n ${calculateOriginalIndicesFromOutputIndices(output, inputShape, outputShape, scales.length, roi.length)};\n ${(() => {\n if (inputShape.length === 2 || inputShape.length === 4) {\n return `${bilinearInterpolation(input, output, inputShape, useExtrapolation, extrapolationValue)}`;\n } else if (inputShape.length === 3 || inputShape.length === 5) {\n return `${trilinearInterpolation(input, output, inputShape, useExtrapolation, extrapolationValue)}`;\n } else {\n throw Error("Linear mode only supports input dims 2, 3, 4 and 5 are supported in linear mode.");\n }\n })()};\n `;\n case "cubic":\n return `\n ${(() => {\n if (inputShape.length === 2 || inputShape.length === 4) {\n return `${bicubicInterpolation(\n input,\n output,\n inputShape,\n outputShape,\n scales,\n roi,\n attributes.cubicCoeffA,\n useExtrapolation,\n attributes.extrapolationValue,\n attributes.excludeOutside\n )}`;\n } else {\n throw Error("Cubic mode only supports input dims 2 and 4 are supported in linear mode.");\n }\n })()};\n `;\n default:\n throw Error("Invalid resize mode");\n }\n })()};\n `}\n ${shaderHelper.registerUniform("output_size", "u32").registerUniform("scales", "f32", scales.length).registerUniform("roi", "f32", roi.length).declareVariables(input, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n ${noScale ? "output[global_idx] = input[global_idx];" : `\n let output_indices = ${output.offsetToIndices("global_idx")};\n var input_indices: ${input.type.indices};\n ${(() => {\n switch (attributes.mode) {\n case "nearest":\n return `input_indices = calculateInputIndicesFromOutputIndices(output_indices);\n if (checkInputIndices(input_indices)) {\n output[global_idx] = ${input.getByIndices("input_indices")};\n } else {\n output[global_idx] = ${attributes.extrapolationValue};\n }`;\n case "linear":\n return `output[global_idx] = ${inputShape.length === 2 || inputShape.length === 4 ? "bilinearInterpolation" : "trilinearInterpolation"}(output_indices);`;\n case "cubic":\n return "output[global_idx] = bicubicInterpolation(output_indices);";\n default:\n throw Error(`Unsupported resize mode: ${attributes.mode}`);\n }\n })()};\n`}\n }`;\n return {\n name: "Resize",\n shaderCache: {\n hint: `${attributes.cacheKey}|${opsetVersion}|${scales.length > 0 ? scales : ""}|${sizes.length > 0 ? sizes : ""}|${roi.length > 0 ? roi : ""}|${noScale}|${inputShape}`,\n inputDependencies: ["rank"]\n },\n getShaderSource,\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputTensor.dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms: [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 1 /* float */, data: scales },\n { type: 1 /* float */, data: roi },\n ...createTensorShapeVariables(inputShape, outputShape)\n ]\n })\n };\n };\n getOpsetVersionFromCustomDataBuffer = (context) => {\n const customDataBuffer = context.customDataBuffer;\n const customDataBuffer32 = new Uint32Array(customDataBuffer, customDataBuffer.byteOffset, 1);\n const opsetVersion = customDataBuffer32[0];\n return opsetVersion;\n };\n resize = (context, attributes) => {\n const scales = [];\n const sizes = [];\n const roi = [];\n const opsetVersion = getOpsetVersionFromCustomDataBuffer(context);\n if (attributes.antialias !== 0) {\n throw Error("Only default value (0) for Antialias attribute is supported");\n }\n validateInputs21(context.inputs, attributes, opsetVersion, scales, sizes, roi);\n context.compute(\n createResizeProgramInfo(context.inputs[0], attributes, opsetVersion, scales, sizes, roi),\n { inputs: [0] }\n );\n };\n parseResizeAttributes = (attributes) => {\n const antialias = attributes.antialias;\n const axes = attributes.axes;\n const coordinateTransformMode = attributes.coordinateTransformMode;\n const cubicCoeffA = attributes.cubicCoeffA;\n const excludeOutside = attributes.excludeOutside !== 0;\n const extrapolationValue = attributes.extrapolationValue;\n const keepAspectRatioPolicy = attributes.keepAspectRatioPolicy;\n const mode = attributes.mode;\n const nearestMode = attributes.nearestMode === "" ? "simple" : attributes.nearestMode;\n return createAttributeWithCacheKey({\n antialias,\n axes,\n coordinateTransformMode,\n cubicCoeffA,\n excludeOutside,\n extrapolationValue,\n keepAspectRatioPolicy,\n mode,\n nearestMode\n });\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/rotary-embedding.ts\n var validateInputs22, createRotaryEmbeddingProgramInfo, rotaryEmbedding;\n var init_rotary_embedding = __esm({\n "web/lib/wasm/jsep/webgpu/ops/rotary-embedding.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs22 = (inputs, attributes) => {\n const [input, positionIds, cosCache, sinCache] = inputs;\n const { numHeads, rotaryEmbeddingDim } = attributes;\n if (input.dims.length !== 3 && input.dims.length !== 4) {\n throw new Error(`Input \'x\' is expected to have 3 or 4 dimensions, got ${input.dims.length}`);\n }\n if (!ShapeUtil.areEqual(positionIds.dims, []) && !ShapeUtil.areEqual(positionIds.dims, [1]) && positionIds.dims.length !== 2) {\n throw new Error(`Input \'position_ids\' is expected to have 0, 1, or 2 dimensions, got ${positionIds.dims.length}`);\n }\n if (cosCache.dims.length !== 2) {\n throw new Error(`Input \'cos_cache\' is expected to have 2 dimensions, got ${cosCache.dims.length}`);\n }\n if (sinCache.dims.length !== 2) {\n throw new Error(`Input \'sin_cache\' is expected to have 2 dimensions, got ${sinCache.dims.length}`);\n }\n if (!ShapeUtil.areEqual(cosCache.dims, sinCache.dims)) {\n throw new Error("Inputs \'cos_cache\' and \'sin_cache\' are expected to have the same shape");\n }\n if (rotaryEmbeddingDim > 0 && numHeads === 0) {\n throw new Error("num_heads must be provided if rotary_embedding_dim is specified");\n }\n const batchSize = input.dims[0];\n const sequenceLength = input.dims[input.dims.length - 2];\n const maxSequenceLength = cosCache.dims[0];\n const hiddenSize = ShapeUtil.sizeFromDimension(input.dims, 1) / sequenceLength;\n const headSize = rotaryEmbeddingDim === 0 ? cosCache.dims[1] * 2 : hiddenSize / numHeads;\n if (rotaryEmbeddingDim > headSize) {\n throw new Error("rotary_embedding_dim must be less than or equal to head_size");\n }\n if (positionIds.dims.length === 2) {\n if (batchSize !== positionIds.dims[0]) {\n throw new Error(`Input \'position_ids\' dimension 0 should be of size batch_size, got ${positionIds.dims[0]}`);\n }\n if (sequenceLength !== positionIds.dims[1]) {\n throw new Error(`Input \'position_ids\' dimension 1 should be of size sequence_length, got ${positionIds.dims[1]}`);\n }\n }\n if (headSize / 2 !== cosCache.dims[1] && rotaryEmbeddingDim / 2 !== cosCache.dims[1]) {\n throw new Error(`Input \'cos_cache\' dimension 1 should be same as head_size / 2 or rotary_embedding_dim / 2, got ${cosCache.dims[1]}`);\n }\n if (sequenceLength > maxSequenceLength) {\n throw new Error("Updating cos_cache and sin_cache in RotaryEmbedding is not currently supported");\n }\n };\n createRotaryEmbeddingProgramInfo = (inputs, attributes) => {\n const { interleaved, numHeads, rotaryEmbeddingDim, scale } = attributes;\n const batchSize = inputs[0].dims[0];\n const batchStride = ShapeUtil.sizeFromDimension(inputs[0].dims, 1);\n const sequenceLength = inputs[0].dims[inputs[0].dims.length - 2];\n const hiddenSize = batchStride / sequenceLength;\n const halfRotaryEmbeddingDim = inputs[2].dims[1];\n const headSize = rotaryEmbeddingDim === 0 ? halfRotaryEmbeddingDim * 2 : hiddenSize / numHeads;\n const globalShape = new Array(batchSize, sequenceLength, hiddenSize / headSize, headSize - halfRotaryEmbeddingDim);\n const globalStrides = ShapeUtil.computeStrides(globalShape);\n const programUniforms = [\n { type: 1 /* float */, data: scale },\n { type: 12 /* uint32 */, data: globalShape },\n { type: 12 /* uint32 */, data: globalStrides },\n // strides for addressing the input/output tensor, in permutated order to align with the unfolded global index,\n // i.e. BSNH\n ...inputs[0].dims.length === 3 ? new Array({ type: 12 /* uint32 */, data: [batchStride, hiddenSize, headSize, 1] }) : [],\n ...inputs[0].dims.length === 4 ? new Array(\n { type: 12 /* uint32 */, data: [batchStride, headSize, sequenceLength * headSize, 1] }\n ) : [],\n ...createTensorShapeVariables(inputs[0].dims, inputs[1].dims, inputs[2].dims, inputs[3].dims, inputs[0].dims)\n ];\n const getShaderSource = (shaderHelper) => {\n const input = inputVariable("input", inputs[0].dataType, inputs[0].dims.length);\n const positionIds = inputVariable("position_ids", inputs[1].dataType, inputs[1].dims.length);\n const cosCache = inputVariable("cos_cache", inputs[2].dataType, inputs[2].dims.length);\n const sinCache = inputVariable("sin_cache", inputs[3].dataType, inputs[3].dims.length);\n const output = outputVariable("output", inputs[0].dataType, inputs[0].dims.length);\n shaderHelper.registerUniforms([\n { name: "scale", type: "f32" },\n { name: "global_shape", type: "u32", length: globalShape.length },\n { name: "global_strides", type: "u32", length: globalStrides.length },\n { name: "input_output_strides", type: "u32", length: globalStrides.length }\n ]);\n return `\n ${shaderHelper.declareVariables(input, positionIds, cosCache, sinCache, output)}\n\n ${shaderHelper.mainStart(WORKGROUP_SIZE)}\n let half_rotary_emb_dim = uniforms.${cosCache.name}_shape[1];\n let bsnh = global_idx / uniforms.global_strides % uniforms.global_shape;\n let size = uniforms.global_shape[0] * uniforms.global_strides[0];\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("size")}\n\n if (bsnh[3] < half_rotary_emb_dim) {\n let position_ids_idx =\n ${positionIds.broadcastedIndicesToOffset("bsnh.xy", outputVariable("", positionIds.type.tensor, 2))};\n let position_id =\n u32(${positionIds.getByOffset("position_ids_idx")}) + select(0, bsnh[1], position_ids_idx == 0);\n let i = dot(bsnh, uniforms.input_output_strides) + select(0, bsnh[3], ${interleaved});\n let j = i + select(half_rotary_emb_dim, 1, ${interleaved});\n let re = ${input.getByOffset("i")} * ${cosCache.get("position_id", "bsnh[3]")} -\n ${input.getByOffset("j")} * ${sinCache.get("position_id", "bsnh[3]")};\n ${output.setByOffset("i", "re")}\n let im = ${input.getByOffset("i")} * ${sinCache.get("position_id", "bsnh[3]")} +\n ${input.getByOffset("j")} * ${cosCache.get("position_id", "bsnh[3]")};\n ${output.setByOffset("j", "im")}\n } else {\n let k = dot(bsnh, uniforms.input_output_strides) + half_rotary_emb_dim;\n ${output.setByOffset("k", input.getByOffset("k"))}\n }\n }`;\n };\n return {\n name: "RotaryEmbedding",\n shaderCache: {\n hint: createAttributeWithCacheKey({\n interleaved\n }).cacheKey,\n inputDependencies: ["rank", "rank", "rank", "rank"]\n },\n getShaderSource,\n getRunData: () => ({\n outputs: [{ dims: inputs[0].dims, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(ShapeUtil.size(globalShape) / WORKGROUP_SIZE) },\n programUniforms\n })\n };\n };\n rotaryEmbedding = (context, attributes) => {\n validateInputs22(context.inputs, attributes);\n context.compute(createRotaryEmbeddingProgramInfo(context.inputs, attributes));\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/skip-layer-norm.ts\n var validateInputs23, createSkipLayerNormProgramInfo, skipLayerNorm;\n var init_skip_layer_norm = __esm({\n "web/lib/wasm/jsep/webgpu/ops/skip-layer-norm.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n validateInputs23 = (inputs) => {\n if (!inputs || inputs.length < 3) {\n throw new Error("layerNorm requires at least 3 inputs.");\n }\n const input = inputs[0];\n const skip = inputs[1];\n const gamma = inputs[2];\n if (input.dataType !== skip.dataType || input.dataType !== gamma.dataType) {\n throw new Error("All inputs must have the same data type");\n }\n if (input.dims.length !== 3 && input.dims.length !== 2) {\n throw new Error("Input must be 2D or 3D");\n }\n if (skip.dims.length !== 3 && skip.dims.length !== 2) {\n throw new Error("Skip must be 2D or 3D");\n }\n const hiddenSize = input.dims[input.dims.length - 1];\n const sequenceLength = input.dims[input.dims.length - 2];\n if (skip.dims[skip.dims.length - 1] !== hiddenSize) {\n throw new Error("Skip must have the same hidden size as input");\n }\n if (skip.dims[skip.dims.length - 2] !== sequenceLength) {\n throw new Error("Skip must have the same sequence length as input");\n }\n if (gamma.dims.length !== 1) {\n throw new Error("Gamma must be 1D");\n }\n if (gamma.dims[gamma.dims.length - 1] !== hiddenSize) {\n throw new Error("Gamma must have the same hidden size as input");\n }\n if (inputs.length > 3) {\n const beta = inputs[3];\n if (beta.dims.length !== 1) {\n throw new Error("Beta must be 1D");\n }\n if (beta.dims[beta.dims.length - 1] !== hiddenSize) {\n throw new Error("Beta must have the same hidden size as input");\n }\n }\n if (inputs.length > 4) {\n const bias = inputs[4];\n if (bias.dims.length !== 1) {\n throw new Error("Bias must be 1D");\n }\n if (bias.dims[bias.dims.length - 1] !== hiddenSize) {\n throw new Error("Bias must have the same hidden size as input");\n }\n }\n };\n createSkipLayerNormProgramInfo = (inputs, attributes, outputCount, isTraining) => {\n const simplified = attributes.simplified;\n const inputShape = inputs[0].dims;\n const inputSize = ShapeUtil.size(inputShape);\n const outputShape = inputShape;\n const outputSize = inputSize;\n const hiddenSize = inputShape.slice(-1)[0];\n const meanInvStdDevDim = isTraining ? inputShape.slice(0, -1).concat(1) : [];\n const hasBetaInput = !simplified && inputs.length > 3;\n const hasBiasInput = inputs.length > 4;\n const hasMeanOutput = isTraining && outputCount > 1;\n const hasInvStdDevOutput = isTraining && outputCount > 2;\n const hasInputSkipBiasSumOutput = outputCount > 3;\n const components = getMaxComponents(hiddenSize);\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 12 /* uint32 */, data: components },\n { type: 12 /* uint32 */, data: hiddenSize },\n { type: 1 /* float */, data: attributes.epsilon }\n ];\n const getShaderSource = (shaderHelper) => {\n const uniformsArray = [\n { name: "output_size", type: "u32" },\n { name: "components", type: "u32" },\n { name: "hidden_size", type: "u32" },\n { name: "epsilon", type: "f32" }\n ];\n const variables = [\n inputVariable("x", inputs[0].dataType, inputs[0].dims, components),\n inputVariable("skip", inputs[1].dataType, inputs[1].dims, components),\n inputVariable("gamma", inputs[2].dataType, inputs[2].dims, components)\n ];\n if (hasBetaInput) {\n variables.push(inputVariable("beta", inputs[3].dataType, inputs[3].dims, components));\n }\n if (hasBiasInput) {\n variables.push(inputVariable("bias", inputs[4].dataType, inputs[4].dims, components));\n }\n variables.push(outputVariable("output", inputs[0].dataType, outputShape, components));\n if (hasMeanOutput) {\n variables.push(outputVariable("mean_output", 1 /* float */, meanInvStdDevDim));\n }\n if (hasInvStdDevOutput) {\n variables.push(outputVariable("inv_std_output", 1 /* float */, meanInvStdDevDim));\n }\n if (hasInputSkipBiasSumOutput) {\n variables.push(outputVariable("input_skip_bias_sum", inputs[0].dataType, outputShape, components));\n }\n const dataType = tensorTypeToWsglStorageType(inputs[0].dataType);\n return `\n\n ${shaderHelper.registerUniforms(uniformsArray).declareVariables(...variables)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size / uniforms.hidden_size")}\n let hidden_size_vectorized: u32 = uniforms.hidden_size / uniforms.components;\n let offset = global_idx * hidden_size_vectorized;\n var sum = ${fillVector("f32", components)};\n var squareSum = ${fillVector("f32", components)};\n for (var i: u32 = 0; i < hidden_size_vectorized; i++) {\n let skip_value = skip[offset + i];\n let bias_value = ${hasBiasInput ? "bias[i]" : dataType + "(0.0)"};\n let input_value = x[offset + i];\n let value = input_value + skip_value + bias_value;\n ${hasInputSkipBiasSumOutput ? "input_skip_bias_sum[offset + i] = value;" : ""}\n output[offset + i] = value;\n let f32_value = ${castToF32(dataType, components, "value")};\n sum += f32_value;\n squareSum += f32_value * f32_value;\n }\n let mean = ${sumVector("sum", components)} / f32(uniforms.hidden_size);\n let inv_std_dev = inverseSqrt(${sumVector("squareSum", components)} / f32(uniforms.hidden_size) ${simplified ? "" : "- mean * mean"} + uniforms.epsilon);\n ${hasMeanOutput ? "mean_output[global_idx] = mean;" : ""}\n ${hasInvStdDevOutput ? "inv_std_output[global_idx] = inv_std_dev;" : ""}\n for (var i: u32 = 0; i < hidden_size_vectorized; i++) {\n output[offset + i] = (output[offset + i] ${simplified ? "" : `- ${dataType}(mean)`}) * ${dataType}(inv_std_dev) * gamma[i] ${hasBetaInput ? "+ beta[i]" : ""};\n }\n }`;\n };\n const outputs = [{ dims: outputShape, dataType: inputs[0].dataType }];\n if (outputCount > 1) {\n outputs.push({ dims: meanInvStdDevDim, dataType: 1 /* float */ });\n }\n if (outputCount > 2) {\n outputs.push({ dims: meanInvStdDevDim, dataType: 1 /* float */ });\n }\n if (outputCount > 3) {\n outputs.push({ dims: inputShape, dataType: inputs[0].dataType });\n }\n return {\n name: "SkipLayerNormalization",\n shaderCache: {\n hint: `${components};${hasMeanOutput};${hasInvStdDevOutput};${hasInputSkipBiasSumOutput}`,\n inputDependencies: inputs.map((_input, _index) => "type")\n },\n getShaderSource,\n getRunData: () => ({ outputs, dispatchGroup: { x: Math.ceil(outputSize / hiddenSize / 64) }, programUniforms })\n };\n };\n skipLayerNorm = (context, attributes) => {\n const isTraining = false;\n validateInputs23(context.inputs);\n const outputs = [0];\n if (context.outputCount > 1) {\n outputs.push(isTraining ? 1 : -3);\n }\n if (context.outputCount > 2) {\n outputs.push(isTraining ? 2 : -3);\n }\n if (context.outputCount > 3) {\n outputs.push(3);\n }\n context.compute(\n createSkipLayerNormProgramInfo(context.inputs, attributes, context.outputCount, isTraining),\n { outputs }\n );\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/slice.ts\n var validateInputs24, readInput, createSliceAttributesFromInputs, fixStartEndValues, calculateInputIndicesImpl, createSliceProgramInfo, slice, parseSliceAttributes;\n var init_slice = __esm({\n "web/lib/wasm/jsep/webgpu/ops/slice.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs24 = (inputs, attributes) => {\n if (!inputs || inputs.length < 1) {\n throw new Error("too few inputs");\n }\n if (attributes.axes.length !== 0) {\n if (attributes.axes.length !== attributes.starts.length || attributes.axes.length !== attributes.ends.length) {\n throw new Error("axes, starts and ends must have the same length");\n }\n } else if (attributes.starts.length !== attributes.ends.length) {\n throw new Error("starts and ends must have the same length");\n }\n inputs.slice(1).forEach((_, idx) => {\n if (inputs[idx + 1].dataType !== 6 /* int32 */ && inputs[idx + 1].dataType !== 7 /* int64 */) {\n throw new Error(`Input ${idx} must be an array of int32 or int64`);\n }\n });\n };\n readInput = (inputs, idx) => {\n const input = [];\n if (inputs.length > idx) {\n if (inputs[idx].dataType === 7 /* int64 */) {\n inputs[idx].getBigInt64Array().forEach((v) => input.push(Number(v)));\n } else if (inputs[idx].dataType === 6 /* int32 */) {\n inputs[idx].getInt32Array().forEach((v) => input.push(Number(v)));\n } else {\n throw new Error(`Input ${idx} must be an array of int32 or int64`);\n }\n }\n return input;\n };\n createSliceAttributesFromInputs = (inputs, attributes) => {\n if (inputs.length > 1) {\n const starts = readInput(inputs, 1);\n const ends = readInput(inputs, 2);\n let axes = readInput(inputs, 3);\n if (axes.length === 0) {\n axes = [...Array(inputs[0].dims.length).keys()];\n }\n return createAttributeWithCacheKey({ starts, ends, axes });\n } else {\n return attributes;\n }\n };\n fixStartEndValues = (value, index, inputShape, axes, steps) => {\n let newValue = value;\n if (value < 0) {\n newValue += inputShape[axes[index]];\n }\n if (steps[index] < 0) {\n return Math.max(0, Math.min(newValue, inputShape[axes[index]] - 1));\n } else {\n return Math.max(0, Math.min(newValue, inputShape[axes[index]]));\n }\n };\n calculateInputIndicesImpl = (input, output, inputShape) => `fn calculateInputIndices(output_indices: ${output.type.indices}) -> ${input.type.indices} {\n var input_indices: ${input.type.indices};\n var carry = 0u;\n for (var i = ${inputShape.length}; i >= 0; i--) {\n let input_shape_i = ${getElementAt("uniforms.input_shape", "i", inputShape.length)};\n let steps_i = ${getElementAt("uniforms.steps", "i", inputShape.length)};\n let signs_i = ${getElementAt("uniforms.signs", "i", inputShape.length)};\n let starts_i = ${getElementAt("uniforms.starts", "i", inputShape.length)};\n var output_index = ${output.indicesGet("output_indices", "i")};\n var input_index = output_index * steps_i + starts_i + carry;\n carry = input_index / input_shape_i;\n input_index = input_index % input_shape_i;\n if (signs_i < 0) {\n input_index = input_shape_i - input_index - 1u + starts_i;\n }\n ${input.indicesSet("input_indices", "i", "input_index")};\n }\n return input_indices;\n }`;\n createSliceProgramInfo = (inputs, attributes) => {\n const inputShape = inputs[0].dims;\n const inputSize = ShapeUtil.size(inputShape);\n const axes = attributes.axes.length > 0 ? ShapeUtil.normalizeAxes(attributes.axes, inputShape.length) : [...Array(inputShape.length).keys()];\n let steps = readInput(inputs, 4);\n steps.forEach((step) => step !== 0 || (() => {\n throw new Error("step cannot be 0");\n }));\n if (steps.length === 0) {\n steps = Array(axes.length).fill(1);\n }\n const starts = attributes.starts.map((start, i) => fixStartEndValues(start, i, inputShape, axes, steps));\n const ends = attributes.ends.map((end, i) => fixStartEndValues(end, i, inputShape, axes, steps));\n if (axes.length !== starts.length || axes.length !== ends.length) {\n throw new Error("start, ends and axes should have the same number of elements");\n }\n if (axes.length !== inputShape.length) {\n for (let i = 0; i < inputShape.length; ++i) {\n if (!axes.includes(i)) {\n starts.splice(i, 0, 0);\n ends.splice(i, 0, inputShape[i]);\n steps.splice(i, 0, 1);\n }\n }\n }\n const signs = steps.map((step) => Math.sign(step));\n steps.forEach((step, i, array) => {\n if (step < 0) {\n const numSteps = (ends[i] - starts[i]) / step;\n const newEnd = starts[i];\n const newStart = newEnd + numSteps * steps[i];\n starts[i] = newStart;\n ends[i] = newEnd;\n array[i] = -step;\n }\n });\n const outputShape = inputShape.slice(0);\n axes.forEach((axis, _) => {\n outputShape[axis] = Math.ceil((ends[axis] - starts[axis]) / steps[axis]);\n });\n const outputTensorInfo = { dims: outputShape, dataType: inputs[0].dataType };\n const output = outputVariable("output", inputs[0].dataType, outputShape.length);\n const input = inputVariable("input", inputs[0].dataType, inputs[0].dims.length);\n const outputSize = ShapeUtil.size(outputShape);\n const uniforms = [\n { name: "outputSize", type: "u32" },\n { name: "starts", type: "u32", length: starts.length },\n { name: "signs", type: "i32", length: signs.length },\n { name: "steps", type: "u32", length: steps.length }\n ];\n const programUniforms = [\n { type: 12 /* uint32 */, data: outputSize },\n { type: 12 /* uint32 */, data: starts },\n { type: 6 /* int32 */, data: signs },\n { type: 12 /* uint32 */, data: steps },\n ...createTensorShapeVariables(inputs[0].dims, outputShape)\n ];\n const getShaderSource = (shaderHelper) => `\n ${shaderHelper.registerUniforms(uniforms).declareVariables(input, output)}\n ${calculateInputIndicesImpl(input, output, inputShape)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")}\n let output_indices = ${output.offsetToIndices("global_idx")};\n let input_indices = calculateInputIndices(output_indices);\n ${output.setByOffset("global_idx", input.getByIndices("input_indices"))}\n }`;\n return {\n name: "Slice",\n shaderCache: { hint: `${signs.length}_${starts.length}_${steps.length}`, inputDependencies: ["rank"] },\n getShaderSource,\n getRunData: () => ({\n outputs: [outputTensorInfo],\n dispatchGroup: { x: Math.ceil(\n inputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n })\n };\n };\n slice = (context, attributes) => {\n validateInputs24(context.inputs, attributes);\n const updatedAttributes = createSliceAttributesFromInputs(context.inputs, attributes);\n context.compute(createSliceProgramInfo(context.inputs, updatedAttributes), { inputs: [0] });\n };\n parseSliceAttributes = (attributes) => {\n const starts = attributes.starts;\n const ends = attributes.ends;\n const axes = attributes.axes;\n return createAttributeWithCacheKey({ starts, ends, axes });\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/softmax.ts\n var validateInputs25, createSoftmaxProgramInfo, softmax, parseSoftmaxAttributes;\n var init_softmax = __esm({\n "web/lib/wasm/jsep/webgpu/ops/softmax.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs25 = (inputs) => {\n if (!inputs || inputs.length !== 1) {\n throw new Error("Softmax op requires 1 input.");\n }\n };\n createSoftmaxProgramInfo = (input, attributes) => {\n const shape = input.dims;\n const outputSize = ShapeUtil.size(shape);\n const WG = 64;\n let axis = attributes.axis;\n if (axis < 0) {\n axis = shape.length + axis;\n }\n if (axis < shape.length - 1) {\n throw new Error("softmax only supports last axis for now.");\n }\n const cols = shape[axis];\n const rows = outputSize / cols;\n const components = getMaxComponents(cols);\n const packedCols = cols / components;\n const maxVector = (name, components2) => {\n if (components2 === 4) {\n return `max(max(${name}.x, ${name}.y), max(${name}.z, ${name}.w))`;\n } else if (components2 === 2) {\n return `max(${name}.x, ${name}.y)`;\n } else if (components2 === 3) {\n return `max(max(${name}.x, ${name}.y), ${name}.z)`;\n }\n return name;\n };\n const x = inputVariable("x", input.dataType, input.dims, components);\n const output = outputVariable("result", input.dataType, input.dims, components);\n const valueType = x.type.value;\n const threadMaxDecl = tensorTypeToWsglStorageType(input.dataType) === "f32" ? `var threadMax = ${valueType}(-3.402823e+38f);` : `var threadMax = ${valueType}(-65504.0h);`;\n const getShaderSource = (shaderHelper) => `\n var rowMaxShared : ${valueType};\n var rowSumShared : ${valueType};\n var threadShared : array<${valueType}, ${WG}>;\n\n fn getValue(row: i32, col: i32, row_stride: i32) -> ${valueType} {\n let index = row * row_stride + col;\n return x[index];\n }\n\n fn setValue(row: i32, col: i32, row_stride: i32, value: ${valueType}) {\n let index = row * row_stride + col;\n result[index] = value;\n }\n ${shaderHelper.registerUniform("packedCols", "i32").declareVariables(x, output)}\n ${shaderHelper.mainStart()}\n let gindex = i32(global_idx);\n let lindex = i32(local_idx);\n const wg = ${WG};\n let row = gindex / wg;\n let cols = uniforms.packedCols;\n let row_stride : i32 = uniforms.packedCols;\n\n // find the rows max\n ${threadMaxDecl}\n for (var col = lindex; col < cols; col += wg) {\n let value = getValue(row, col, row_stride);\n threadMax = max(threadMax, value);\n }\n if (lindex < cols) {\n threadShared[lindex] = threadMax;\n }\n workgroupBarrier();\n\n var reduceSize = min(cols, wg);\n for (var currSize = reduceSize >> 1; currSize > 0; currSize = reduceSize >> 1) {\n reduceSize = currSize + (reduceSize & 1);\n if (lindex < currSize) {\n threadShared[lindex] = max(threadShared[lindex], threadShared[lindex + reduceSize]);\n }\n workgroupBarrier();\n }\n if (lindex == 0) {\n rowMaxShared = ${valueType}(${maxVector("threadShared[0]", components)});\n }\n workgroupBarrier();\n\n // find the rows sum\n var threadSum = ${valueType}(0.0);\n for (var col = lindex; col < cols; col += wg) {\n let subExp = exp(getValue(row, col, row_stride) - rowMaxShared);\n threadSum += subExp;\n }\n threadShared[lindex] = threadSum;\n workgroupBarrier();\n\n for (var currSize = wg >> 1; currSize > 0; currSize = currSize >> 1) {\n if (lindex < currSize) {\n threadShared[lindex] = threadShared[lindex] + threadShared[lindex + currSize];\n }\n workgroupBarrier();\n }\n if (lindex == 0) {\n rowSumShared = ${valueType}(${sumVector("threadShared[0]", components)});\n }\n workgroupBarrier();\n\n // calculate final value for each element in the row\n for (var col = lindex; col < cols; col += wg) {\n let value = exp(getValue(row, col, row_stride) - rowMaxShared) / rowSumShared;\n setValue(row, col, row_stride, value);\n }\n }`;\n return {\n name: "Softmax",\n shaderCache: { hint: `${components}`, inputDependencies: ["type"] },\n getRunData: () => ({\n outputs: [{ dims: shape, dataType: input.dataType }],\n dispatchGroup: { x: rows },\n programUniforms: [{ type: 6 /* int32 */, data: packedCols }]\n }),\n getShaderSource\n };\n };\n softmax = (context, attributes) => {\n validateInputs25(context.inputs);\n context.compute(createSoftmaxProgramInfo(context.inputs[0], attributes));\n };\n parseSoftmaxAttributes = (attributes) => createAttributeWithCacheKey({ axis: attributes.axis });\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/split.ts\n var validateInputs26, createSplitAttributesFromInputs, calculateOutputIndexImpl, writeBufferDataImpl, createSplitProgramInfo, split, parseSplitAttributes;\n var init_split = __esm({\n "web/lib/wasm/jsep/webgpu/ops/split.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_attribute_with_cache_key();\n init_common();\n validateInputs26 = (inputs) => {\n if (!inputs || inputs.length < 1) {\n throw new Error("too few inputs");\n }\n };\n createSplitAttributesFromInputs = (inputs, attributes) => {\n const splitSizes = [];\n let numOutputs = attributes.numOutputs;\n if (inputs[1].dims[0] > 0) {\n inputs[1].getBigInt64Array().forEach((v) => splitSizes.push(Number(v)));\n numOutputs = splitSizes.length;\n }\n return createAttributeWithCacheKey({ numOutputs, axis: attributes.axis, splitSizes });\n };\n calculateOutputIndexImpl = (numberOfTensors) => `\nfn calculateOutputIndex(index: u32) -> u32 {\n for (var i: u32 = 0u; i < ${numberOfTensors}u; i += 1u ) {\n if (index < ${getElementAt("uniforms.size_in_split_axis", "i", numberOfTensors)}) {\n return i;\n }\n }\n return ${numberOfTensors}u;\n}`;\n writeBufferDataImpl = (outputs) => {\n const numberOfTensors = outputs.length;\n const codeLines = [];\n for (let i = 0; i < numberOfTensors; ++i) {\n const returnSnippet = outputs[i].setByIndices("indices", "input[global_idx]");\n if (numberOfTensors === 1) {\n codeLines.push(returnSnippet);\n } else if (i === 0) {\n codeLines.push(`if (output_number == ${i}u) { ${returnSnippet} }`);\n } else if (i === numberOfTensors - 1) {\n codeLines.push(`else { ${returnSnippet} }`);\n } else {\n codeLines.push(`else if (output_number == ${i}) { ${returnSnippet} }`);\n }\n }\n return `\n fn writeBufferData(output_number: u32, indices: ${outputs[0].type.indices}, global_idx: u32) {\n ${codeLines.join("\\n")}\n }`;\n };\n createSplitProgramInfo = (inputs, attributes) => {\n const inputShape = inputs[0].dims;\n const inputSize = ShapeUtil.size(inputShape);\n const dataType = inputs[0].dataType;\n const axis = ShapeUtil.normalizeAxis(attributes.axis, inputShape.length);\n const outputs = new Array(attributes.numOutputs);\n const input = inputVariable("input", dataType, inputShape.length);\n const sizeInSplitAxis = new Array(attributes.numOutputs);\n const outputsTensorInfo = [];\n const outputShapes = [];\n let previousSum = 0;\n const programUniforms = [{ type: 12 /* uint32 */, data: inputSize }];\n for (let i = 0; i < attributes.numOutputs; i++) {\n previousSum += attributes.splitSizes[i];\n sizeInSplitAxis[i] = previousSum;\n const outputShape = inputShape.slice();\n outputShape[attributes.axis] = attributes.splitSizes[i];\n outputShapes.push(outputShape);\n outputs[i] = outputVariable(`output${i}`, dataType, outputShape.length);\n outputsTensorInfo.push({ dims: outputShapes[i], dataType: inputs[0].dataType });\n }\n programUniforms.push(\n { type: 12 /* uint32 */, data: sizeInSplitAxis },\n ...createTensorShapeVariables(inputShape, ...outputShapes)\n );\n const getShaderSource = (shaderHelper) => `\n ${shaderHelper.registerUniform("input_size", "u32").registerUniform("size_in_split_axis", "u32", sizeInSplitAxis.length).declareVariables(input, ...outputs)}\n ${calculateOutputIndexImpl(sizeInSplitAxis.length)}\n ${writeBufferDataImpl(outputs)}\n\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.input_size")}\n\n var indices = ${input.offsetToIndices("global_idx")};\n var index = ${input.indicesGet("indices", axis)};\n let output_number = calculateOutputIndex(index);\n if (output_number != 0) {\n index -= ${getElementAt("uniforms.size_in_split_axis", "output_number - 1u", sizeInSplitAxis.length)};\n ${input.indicesSet("indices", axis, "index")};\n }\n writeBufferData(output_number, indices, global_idx);\n }`;\n return {\n name: "Split",\n shaderCache: { hint: attributes.cacheKey, inputDependencies: ["rank"] },\n getShaderSource,\n getRunData: () => ({\n outputs: outputsTensorInfo,\n dispatchGroup: { x: Math.ceil(\n inputSize / 64\n /* workgroup size */\n ) },\n programUniforms\n })\n };\n };\n split = (context, attributes) => {\n validateInputs26(context.inputs);\n const updatedAttributes = context.inputs.length === 1 ? attributes : createSplitAttributesFromInputs(context.inputs, attributes);\n context.compute(createSplitProgramInfo(context.inputs, updatedAttributes), { inputs: [0] });\n };\n parseSplitAttributes = (attributes) => {\n const axis = attributes.axis;\n const splitSizes = attributes.splitSizes;\n const numOutputs = attributes.numOutputs < 0 ? splitSizes.length : attributes.numOutputs;\n if (numOutputs !== splitSizes.length) {\n throw new Error("numOutputs and splitSizes lengh must be equal");\n }\n return createAttributeWithCacheKey({ axis, numOutputs, splitSizes });\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/tile.ts\n var getRepeats, validateInputs27, getOutputShape2, createTileProgramInfo, tile;\n var init_tile = __esm({\n "web/lib/wasm/jsep/webgpu/ops/tile.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n getRepeats = (repeatsTensorView) => Array.from(repeatsTensorView.getBigInt64Array(), Number);\n validateInputs27 = (inputs) => {\n if (!inputs || inputs.length !== 2) {\n throw new Error("Tile requires 2 inputs.");\n }\n if (inputs[0].dataType !== 1 /* float */ && inputs[0].dataType !== 6 /* int32 */ && inputs[0].dataType !== 12 /* uint32 */) {\n throw new Error("Tile only support float, int32, and uint32 data types");\n }\n if (inputs[1].dataType !== 7 /* int64 */) {\n throw new Error("Tile `repeats` input should be of int64 data type");\n }\n if (inputs[1].dims.length !== 1) {\n throw new Error("Tile `repeats` input should be 1-D");\n }\n const repeats = getRepeats(inputs[1]);\n if (repeats.length !== inputs[0].dims.length) {\n throw new Error("Tile `repeats` input should have same number of elements as rank of input data tensor");\n }\n };\n getOutputShape2 = (inputShape, repeats) => {\n const outputShape = [];\n for (let i = 0; i < inputShape.length; ++i) {\n outputShape.push(inputShape[i] * repeats[i]);\n }\n return outputShape;\n };\n createTileProgramInfo = (inputs) => {\n const inputShape = inputs[0].dims;\n const repeats = getRepeats(inputs[1]);\n const outputShape = getOutputShape2(inputShape, repeats);\n const outputSize = ShapeUtil.size(outputShape);\n const dataType = inputs[0].dataType;\n const input = inputVariable("input", dataType, inputShape.length);\n const output = outputVariable("output", dataType, outputShape.length);\n const getShaderSource = (shaderHelper) => `\n const inputShape = ${input.indices(...inputShape)};\n ${shaderHelper.registerUniform("output_size", "u32").declareVariables(input, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}\n let output_indices = ${output.offsetToIndices("global_idx")};\n var input_indices: ${input.type.indices};\n for (var i = 0; i < ${inputShape.length}; i++) {\n let input_dim_i = ${input.indicesGet("uniforms.input_shape", "i")};\n let input_dim_value = ${output.indicesGet("output_indices", "i")} % input_dim_i;\n\n ${input.indicesSet("input_indices", "i", "input_dim_value")}\n }\n ${output.setByOffset("global_idx", input.getByIndices("input_indices"))}\n }`;\n return {\n name: "Tile",\n shaderCache: { hint: `${repeats}`, inputDependencies: ["rank"] },\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: inputs[0].dataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64\n /* workgroup size */\n ) },\n programUniforms: [{ type: 12 /* uint32 */, data: outputSize }, ...createTensorShapeVariables(inputs[0].dims, outputShape)]\n }),\n getShaderSource\n };\n };\n tile = (context) => {\n validateInputs27(context.inputs);\n context.compute(createTileProgramInfo(context.inputs), { inputs: [0] });\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/ops/where.ts\n var createWhereOpProgramShader, createWhereOpProgramInfo, where;\n var init_where = __esm({\n "web/lib/wasm/jsep/webgpu/ops/where.ts"() {\n "use strict";\n init_wasm_common();\n init_util();\n init_common();\n createWhereOpProgramShader = (shaderHelper, inputs, dimsOutput, isBroadcast, typeOutput) => {\n const output = outputVariable("output_data", typeOutput, dimsOutput.length, 4);\n const a = inputVariable("a_data", inputs[1].dataType, inputs[1].dims.length, 4);\n const b = inputVariable("b_data", inputs[2].dataType, inputs[2].dims.length, 4);\n const c = inputVariable("c_data", inputs[0].dataType, inputs[0].dims.length, 4);\n let assignment;\n const expression = (a2, b2, c2) => `select(${b2}, ${a2}, ${c2})`;\n if (!isBroadcast) {\n assignment = output.setByOffset(\n "global_idx",\n expression(a.getByOffset("global_idx"), b.getByOffset("global_idx"), c.getByOffset("global_idx"))\n );\n } else {\n const singleAssignment = (resStr, x, typeCast = "") => {\n const expressionA = `a_data[index_a${x}][component_a${x}]`;\n const expressionB = `b_data[index_b${x}][component_b${x}]`;\n const expressionC = `bool(c_data[index_c${x}] & (0xffu << (component_c${x} * 8)))`;\n return `\n let output_indices${x} = ${output.offsetToIndices(`global_idx * 4u + ${x}u`)};\n let offset_a${x} = ${a.broadcastedIndicesToOffset(`output_indices${x}`, output)};\n let offset_b${x} = ${b.broadcastedIndicesToOffset(`output_indices${x}`, output)};\n let offset_c${x} = ${c.broadcastedIndicesToOffset(`output_indices${x}`, output)};\n let index_a${x} = offset_a${x} / 4u;\n let index_b${x} = offset_b${x} / 4u;\n let index_c${x} = offset_c${x} / 4u;\n let component_a${x} = offset_a${x} % 4u;\n let component_b${x} = offset_b${x} % 4u;\n let component_c${x} = offset_c${x} % 4u;\n ${resStr}[${x}] = ${typeCast}(${expression(expressionA, expressionB, expressionC)});\n `;\n };\n if (typeOutput === 9 /* bool */) {\n assignment = `\n var data = vec4(0);\n ${singleAssignment("data", 0, "u32")}\n ${singleAssignment("data", 1, "u32")}\n ${singleAssignment("data", 2, "u32")}\n ${singleAssignment("data", 3, "u32")}\n output_data[global_idx] = dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(data));`;\n } else {\n assignment = `\n ${singleAssignment("output_data[global_idx]", 0)}\n ${singleAssignment("output_data[global_idx]", 1)}\n ${singleAssignment("output_data[global_idx]", 2)}\n ${singleAssignment("output_data[global_idx]", 3)}\n `;\n }\n }\n return `\n ${shaderHelper.registerUniform("vec_size", "u32").declareVariables(c, a, b, output)}\n ${shaderHelper.mainStart()}\n ${shaderHelper.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")}\n ${assignment}\n }`;\n };\n createWhereOpProgramInfo = (inputs) => {\n const dimsA = inputs[1].dims;\n const dimsB = inputs[2].dims;\n const dimsC = inputs[0].dims;\n const outputDataType = inputs[1].dataType;\n const isBroadcast = !(ShapeUtil.areEqual(dimsA, dimsB) && ShapeUtil.areEqual(dimsB, dimsC));\n let outputShape = dimsA;\n let outputSize = ShapeUtil.size(dimsA);\n if (isBroadcast) {\n const calculatedShape = BroadcastUtil.calcShape(BroadcastUtil.calcShape(dimsA, dimsB, false), dimsC, false);\n if (!calculatedShape) {\n throw new Error("Can\'t perform where op on the given tensors");\n }\n outputShape = calculatedShape;\n outputSize = ShapeUtil.size(outputShape);\n }\n const vecSize = Math.ceil(outputSize / 4);\n return {\n name: "Where",\n shaderCache: { inputDependencies: ["rank", "rank", "rank"] },\n getShaderSource: (shaderHelper) => createWhereOpProgramShader(shaderHelper, inputs, outputShape, isBroadcast, outputDataType),\n getRunData: () => ({\n outputs: [{ dims: outputShape, dataType: outputDataType }],\n dispatchGroup: { x: Math.ceil(\n outputSize / 64 / 4\n /* vec size */\n ) },\n programUniforms: [{ type: 12 /* uint32 */, data: vecSize }, ...createTensorShapeVariables(dimsC, dimsA, dimsB, outputShape)]\n })\n };\n };\n where = (context) => {\n context.compute(createWhereOpProgramInfo(context.inputs));\n };\n }\n });\n\n // web/lib/wasm/jsep/webgpu/op-resolve-rules.ts\n var WEBGPU_OP_RESOLVE_RULES;\n var init_op_resolve_rules = __esm({\n "web/lib/wasm/jsep/webgpu/op-resolve-rules.ts"() {\n "use strict";\n init_argminmax();\n init_attention();\n init_batch_norm();\n init_bias_add();\n init_bias_split_gelu();\n init_binary_op();\n init_concat();\n init_conv();\n init_conv_transpose();\n init_cumsum();\n init_depth_to_space();\n init_einsum();\n init_expand();\n init_fast_gelu();\n init_gather();\n init_gather_elements();\n init_gemm();\n init_instance_norm();\n init_layer_norm();\n init_matmul();\n init_matmulnbits();\n init_multihead_attentiion();\n init_pad();\n init_pool();\n init_range();\n init_reduce();\n init_resize();\n init_rotary_embedding();\n init_skip_layer_norm();\n init_slice();\n init_softmax();\n init_split();\n init_tile();\n init_transpose();\n init_unary_op();\n init_where();\n WEBGPU_OP_RESOLVE_RULES = /* @__PURE__ */ new Map([\n ["Abs", [abs]],\n ["Acos", [acos]],\n ["Acosh", [acosh]],\n ["Add", [add]],\n ["ArgMax", [argMax, parseArgMinMaxAttributes]],\n ["ArgMin", [argMin, parseArgMinMaxAttributes]],\n ["Asin", [asin]],\n ["Asinh", [asinh]],\n ["Atan", [atan]],\n ["Atanh", [atanh]],\n ["Attention", [attention]],\n // TODO: support new attributes for AveragePool-10\n ["AveragePool", [averagePool, parseAveragePoolAttributes]],\n ["BatchNormalization", [batchNorm]],\n ["BiasAdd", [biasAdd]],\n ["BiasSplitGelu", [biasSplitGelu]],\n ["Cast", [cast, parseCastAttributes]],\n ["Ceil", [ceil]],\n ["Clip", [clip]],\n ["Concat", [concat, parseConcatAttributes]],\n ["Conv", [conv, parseConvAttributes]],\n ["ConvTranspose", [convTranspose, parseConvTransposeAttributes]],\n ["Cos", [cos]],\n ["Cosh", [cosh]],\n ["CumSum", [cumsum, parseCumSumAttributes]],\n ["DepthToSpace", [depthToSpace, parseDepthToSpaceAttributes]],\n ["Div", [div]],\n ["Einsum", [einsum, parseEinsumAttributes]],\n ["Elu", [elu, parseAlphaAttributes]],\n ["Equal", [equal]],\n ["Erf", [erf]],\n ["Exp", [exp]],\n ["Expand", [expand]],\n ["FastGelu", [fastGelu2]],\n ["Floor", [floor]],\n ["FusedConv", [conv, parseConvAttributes]],\n ["Gather", [gather, parseGatherAttributes]],\n ["GatherElements", [gatherElements, parseGatherElementsAttributes]],\n ["Gelu", [gelu]],\n ["Gemm", [gemm, parseGemmAttributes]],\n ["GlobalAveragePool", [globalAveragePool, parseGlobalAveragePoolAttributes]],\n ["GlobalMaxPool", [globalMaxPool, parseGlobalMaxPoolAttributes]],\n ["Greater", [greater]],\n ["GreaterOrEqual", [greaterOrEqual]],\n ["HardSigmoid", [hardSigmoid, parseHardSigmoidAttributes]],\n ["InstanceNormalization", [instanceNorm]],\n ["LayerNormalization", [layerNorm]],\n ["LeakyRelu", [leakyRelu, parseAlphaAttributes]],\n ["Less", [less]],\n ["LessOrEqual", [lessOrEqual]],\n ["Log", [log]],\n ["MatMul", [matMul]],\n ["MatMulNBits", [matMulNBits, parseMatMulNBitsAttributes]],\n // TODO: support new attributes for MaxPool-8 and MaxPool-10\n ["MaxPool", [maxPool, parseMaxPoolAttributes]],\n ["Mul", [mul]],\n ["MultiHeadAttention", [multiHeadAttention, parseMultiHeadAttentionAttributes]],\n ["Neg", [neg]],\n ["Not", [not]],\n ["Pad", [pad]],\n ["Pow", [pow]],\n ["Range", [range]],\n ["Reciprocal", [reciprocal]],\n ["ReduceMin", [reduceMin]],\n ["ReduceMean", [reduceMean]],\n ["ReduceMax", [reduceMax]],\n ["ReduceSum", [reduceSum]],\n ["ReduceProd", [reduceProd]],\n ["ReduceL1", [reduceL1]],\n ["ReduceL2", [reduceL2]],\n ["ReduceLogSum", [reduceLogSum]],\n ["ReduceLogSumExp", [reduceLogSumExp]],\n ["ReduceSumSquare", [reduceSumSquare]],\n ["Relu", [relu]],\n ["Resize", [resize, parseResizeAttributes]],\n ["RotaryEmbedding", [rotaryEmbedding]],\n ["Sigmoid", [sigmoid]],\n ["Sin", [sin]],\n ["Sinh", [sinh]],\n ["Slice", [slice, parseSliceAttributes]],\n ["SkipLayerNormalization", [skipLayerNorm]],\n ["Split", [split, parseSplitAttributes]],\n ["Sqrt", [sqrt]],\n ["Softmax", [softmax, parseSoftmaxAttributes]],\n ["Sub", [sub]],\n ["Tan", [tan]],\n ["Tanh", [tanh]],\n ["ThresholdedRelu", [thresholdedRelu, parseAlphaAttributes]],\n ["Tile", [tile]],\n ["Transpose", [transpose, parseTransposeAttributes]],\n ["Where", [where]]\n ]);\n }\n });\n\n // web/lib/wasm/jsep/webgpu/program-manager.ts\n var ProgramManager;\n var init_program_manager = __esm({\n "web/lib/wasm/jsep/webgpu/program-manager.ts"() {\n "use strict";\n init_esm();\n init_log();\n init_common();\n ProgramManager = class {\n constructor(backend) {\n this.backend = backend;\n this.repo = /* @__PURE__ */ new Map();\n this.attributesBound = false;\n }\n getArtifact(key) {\n return this.repo.get(key);\n }\n setArtifact(key, artifact) {\n this.repo.set(key, artifact);\n }\n run(buildArtifact, inputs, outputs, dispatchGroup, uniformBufferBinding) {\n TRACE_FUNC_BEGIN(buildArtifact.programInfo.name);\n const device = this.backend.device;\n const computePassEncoder = this.backend.getComputePassEncoder();\n this.backend.writeTimestamp(this.backend.pendingDispatchNumber * 2);\n const entries = [];\n for (const input of inputs) {\n entries.push({ binding: entries.length, resource: { buffer: input.buffer } });\n }\n for (const output of outputs) {\n entries.push({ binding: entries.length, resource: { buffer: output.buffer } });\n }\n if (uniformBufferBinding) {\n entries.push({ binding: entries.length, resource: uniformBufferBinding });\n }\n const bindGroup = device.createBindGroup(\n { layout: buildArtifact.computePipeline.getBindGroupLayout(0), entries, label: buildArtifact.programInfo.name }\n );\n if (this.backend.sessionStatus === "capturing") {\n const commandInfo = {\n kernelId: this.backend.currentKernelId,\n computePipeline: buildArtifact.computePipeline,\n bindGroup,\n dispatchGroup\n };\n const sessionCommandList = this.backend.capturedCommandList.get(this.backend.currentSessionId);\n sessionCommandList.push(commandInfo);\n }\n computePassEncoder.setPipeline(buildArtifact.computePipeline);\n computePassEncoder.setBindGroup(0, bindGroup);\n computePassEncoder.dispatchWorkgroups(...dispatchGroup);\n this.backend.writeTimestamp(this.backend.pendingDispatchNumber * 2 + 1);\n this.backend.pendingDispatchNumber++;\n if (this.backend.pendingDispatchNumber >= this.backend.maxDispatchNumber || this.backend.queryType === "at-passes") {\n this.backend.endComputePass();\n }\n if (this.backend.pendingDispatchNumber >= this.backend.maxDispatchNumber) {\n this.backend.flush();\n }\n TRACE_FUNC_END(buildArtifact.programInfo.name);\n }\n dispose() {\n }\n build(programInfo, normalizedDispatchGroupSize) {\n TRACE_FUNC_BEGIN(programInfo.name);\n const device = this.backend.device;\n const extensions = [];\n if (device.features.has("shader-f16")) {\n extensions.push("enable f16;");\n }\n const shaderHelper = createShaderHelper(normalizedDispatchGroupSize, this.backend.device.limits);\n const userCode = programInfo.getShaderSource(shaderHelper);\n const code = `${extensions.join("\\n")}\n${shaderHelper.additionalImplementations}\n${userCode}`;\n const shaderModule = device.createShaderModule({ code, label: programInfo.name });\n LOG_DEBUG("verbose", () => `[WebGPU] ${programInfo.name} shader code: ${code}`);\n const computePipeline = device.createComputePipeline(\n { compute: { module: shaderModule, entryPoint: "main" }, layout: "auto", label: programInfo.name }\n );\n TRACE_FUNC_END(programInfo.name);\n return { programInfo, computePipeline, uniformVariablesInfo: shaderHelper.variablesInfo };\n }\n normalizeDispatchGroupSize(dispatchGroup) {\n const x = typeof dispatchGroup === "number" ? dispatchGroup : dispatchGroup.x;\n const y = typeof dispatchGroup === "number" ? 1 : dispatchGroup.y || 1;\n const z = typeof dispatchGroup === "number" ? 1 : dispatchGroup.z || 1;\n const limitPerDimension = this.backend.device.limits.maxComputeWorkgroupsPerDimension;\n if (x <= limitPerDimension && y <= limitPerDimension && z <= limitPerDimension) {\n return [x, y, z];\n }\n const size = x * y * z;\n let dispatchAverage = Math.ceil(Math.sqrt(size));\n if (dispatchAverage > limitPerDimension) {\n dispatchAverage = Math.ceil(Math.cbrt(size));\n if (dispatchAverage > limitPerDimension) {\n throw new Error("Total dispatch size exceeds WebGPU maximum.");\n }\n return [dispatchAverage, dispatchAverage, dispatchAverage];\n } else {\n return [dispatchAverage, dispatchAverage, 1];\n }\n }\n };\n }\n });\n\n // web/lib/wasm/jsep/backend-webgpu.ts\n var getProgramInputTensorInfoDependencyKey, getProgramInfoUniqueKey, AdapterInfoImpl, WebGpuBackend;\n var init_backend_webgpu = __esm({\n "web/lib/wasm/jsep/backend-webgpu.ts"() {\n "use strict";\n init_esm();\n init_wasm_common();\n init_log();\n init_tensor_view();\n init_gpu_data_manager();\n init_op_resolve_rules();\n init_program_manager();\n getProgramInputTensorInfoDependencyKey = (inputTensors, inputDependencies) => {\n if (inputDependencies.length !== inputTensors.length) {\n throw new Error(`inputDependencies length ${inputDependencies.length} is not equal to inputTensors length ${inputTensors.length}.`);\n }\n const inputInfos = [];\n for (let i = 0; i < inputTensors.length; ++i) {\n const type = inputTensors[i].dataType;\n switch (inputDependencies[i]) {\n case "none": {\n inputInfos.push("");\n break;\n }\n case "type": {\n inputInfos.push(`${type}`);\n break;\n }\n case "rank": {\n const rank = inputTensors[i].dims.length;\n inputInfos.push(`${type};${rank}`);\n break;\n }\n case "dims": {\n const dims = inputTensors[i].dims.join(",");\n inputInfos.push(`${type};${dims}`);\n break;\n }\n default:\n throw new Error(`unsupported input dependency: ${inputDependencies[i]}`);\n }\n }\n return inputInfos.join("|");\n };\n getProgramInfoUniqueKey = (programInfo, inputTensors, is1DimensionDispatch) => {\n let key = programInfo.name;\n if (programInfo.shaderCache?.hint) {\n key += "[" + programInfo.shaderCache.hint + "]";\n }\n key += ":" + is1DimensionDispatch + `:${getProgramInputTensorInfoDependencyKey(\n inputTensors,\n programInfo.shaderCache?.inputDependencies ?? new Array(inputTensors.length).fill("dims")\n )}`;\n return key;\n };\n AdapterInfoImpl = class {\n constructor(adapterInfo) {\n if (adapterInfo) {\n this.architecture = adapterInfo.architecture;\n this.vendor = adapterInfo.vendor;\n }\n }\n isArchitecture(architecture) {\n return this.architecture === architecture;\n }\n isVendor(vendor) {\n return this.vendor === vendor;\n }\n };\n WebGpuBackend = class {\n constructor() {\n /**\n * representing the session ID of which is currently being run.\n * `null` means no session is being run.\n * only valid when session.run is executed.\n */\n this.currentSessionId = null;\n /**\n * representing the kernel ID of which is currently being computed (CPU code perspective).\n * `null` means no kernel is being computed.\n * only one kernel can be computed at a moment.\n */\n this.currentKernelId = null;\n this.commandEncoder = null;\n this.computePassEncoder = null;\n this.maxDispatchNumber = 16;\n this.pendingDispatchNumber = 0;\n // info of kernels pending submission for a single batch\n this.pendingKernels = [];\n // queryReadBuffer -> pendingKernels mapping for all the batches\n this.pendingQueries = /* @__PURE__ */ new Map();\n this.sessionStatus = "default";\n /**\n * a SessionID -> CommandInfo[] mapping. It\'s used to record all GPU commands for corresponding session.\n */\n this.capturedCommandList = /* @__PURE__ */ new Map();\n /**\n * a SessionID -> PendingKernelInfo[] mapping for profiling.\n */\n this.capturedPendingKernels = /* @__PURE__ */ new Map();\n /**\n * a SessionID -> a Map of (InputOutputIndex -> [ID, GPUBuffer]) mapping.\n */\n this.sessionExternalDataMapping = /* @__PURE__ */ new Map();\n }\n /**\n * get the custom data of the current kernel\n */\n get currentKernelCustomData() {\n if (this.currentKernelId === null) {\n throw new Error("currentKernelCustomData(): currentKernelId is null. (should not happen)");\n }\n let data = this.kernelCustomData.get(this.currentKernelId);\n if (!data) {\n data = {};\n this.kernelCustomData.set(this.currentKernelId, data);\n }\n return data;\n }\n async initialize(env3, adapter) {\n this.env = env3;\n const requiredFeatures = [];\n const deviceDescriptor = {\n requiredLimits: {\n maxComputeWorkgroupStorageSize: adapter.limits.maxComputeWorkgroupStorageSize,\n maxComputeWorkgroupsPerDimension: adapter.limits.maxComputeWorkgroupsPerDimension,\n maxStorageBufferBindingSize: adapter.limits.maxStorageBufferBindingSize,\n maxBufferSize: adapter.limits.maxBufferSize,\n maxComputeInvocationsPerWorkgroup: adapter.limits.maxComputeInvocationsPerWorkgroup,\n maxComputeWorkgroupSizeX: adapter.limits.maxComputeWorkgroupSizeX,\n maxComputeWorkgroupSizeY: adapter.limits.maxComputeWorkgroupSizeY,\n maxComputeWorkgroupSizeZ: adapter.limits.maxComputeWorkgroupSizeZ\n },\n requiredFeatures\n };\n if (adapter.features.has("chromium-experimental-timestamp-query-inside-passes")) {\n requiredFeatures.push("chromium-experimental-timestamp-query-inside-passes");\n } else if (adapter.features.has("timestamp-query")) {\n requiredFeatures.push("timestamp-query");\n }\n if (adapter.features.has("shader-f16")) {\n requiredFeatures.push("shader-f16");\n }\n this.device = await adapter.requestDevice(deviceDescriptor);\n this.adapterInfo = new AdapterInfoImpl(await adapter.requestAdapterInfo());\n this.gpuDataManager = createGpuDataManager(this);\n this.programManager = new ProgramManager(this);\n this.kernels = /* @__PURE__ */ new Map();\n this.kernelPersistentData = /* @__PURE__ */ new Map();\n this.kernelCustomData = /* @__PURE__ */ new Map();\n configureLogger(env3.logLevel, !!env3.debug);\n this.device.onuncapturederror = (ev) => {\n if (ev.error instanceof GPUValidationError) {\n console.error(`An uncaught WebGPU validation error was raised: ${ev.error.message}`);\n }\n };\n Object.defineProperty(\n this.env.webgpu,\n "device",\n { value: this.device, writable: false, enumerable: true, configurable: false }\n );\n Object.defineProperty(\n this.env.webgpu,\n "adapter",\n { value: adapter, writable: false, enumerable: true, configurable: false }\n );\n this.setQueryType();\n }\n dispose() {\n if (typeof this.querySet !== "undefined") {\n this.querySet.destroy();\n }\n this.gpuDataManager.dispose();\n }\n getCommandEncoder() {\n if (!this.commandEncoder) {\n this.commandEncoder = this.device.createCommandEncoder();\n }\n return this.commandEncoder;\n }\n getComputePassEncoder() {\n if (!this.computePassEncoder) {\n const commandEncoder = this.getCommandEncoder();\n const computePassDescriptor = {};\n if (this.queryType === "at-passes") {\n computePassDescriptor.timestampWrites = {\n querySet: this.querySet,\n beginningOfPassWriteIndex: this.pendingDispatchNumber * 2,\n endOfPassWriteIndex: this.pendingDispatchNumber * 2 + 1\n };\n }\n this.computePassEncoder = commandEncoder.beginComputePass(computePassDescriptor);\n }\n return this.computePassEncoder;\n }\n endComputePass() {\n if (this.computePassEncoder) {\n this.computePassEncoder.end();\n this.computePassEncoder = null;\n }\n }\n flush() {\n if (!this.commandEncoder) {\n return;\n }\n TRACE_FUNC_BEGIN();\n this.endComputePass();\n let queryReadBuffer;\n if (this.queryType !== "none") {\n this.commandEncoder.resolveQuerySet(\n this.querySet,\n 0,\n this.pendingDispatchNumber * 2,\n this.queryResolveBuffer,\n 0\n );\n queryReadBuffer = this.device.createBuffer(\n // eslint-disable-next-line no-bitwise\n { size: this.pendingDispatchNumber * 2 * 8, usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST }\n );\n this.pendingQueries.set(queryReadBuffer, this.pendingKernels);\n this.pendingKernels = [];\n this.commandEncoder.copyBufferToBuffer(\n this.queryResolveBuffer,\n 0,\n queryReadBuffer,\n 0,\n this.pendingDispatchNumber * 2 * 8\n );\n }\n this.device.queue.submit([this.commandEncoder.finish()]);\n this.gpuDataManager.refreshPendingBuffers();\n this.commandEncoder = null;\n this.pendingDispatchNumber = 0;\n if (this.queryType !== "none") {\n void queryReadBuffer.mapAsync(GPUMapMode.READ).then(() => {\n const mappedData = new BigUint64Array(queryReadBuffer.getMappedRange());\n const pendingKernels = this.pendingQueries.get(queryReadBuffer);\n for (let i = 0; i < mappedData.length / 2; i++) {\n const pendingKernelInfo = pendingKernels[i];\n const kernelId = pendingKernelInfo.kernelId;\n const kernelInfo = this.kernels.get(kernelId);\n const kernelType = kernelInfo.kernelType;\n const kernelName = kernelInfo.kernelName;\n const programName = pendingKernelInfo.programName;\n const inputTensorViews = pendingKernelInfo.inputTensorViews;\n const outputTensorViews = pendingKernelInfo.outputTensorViews;\n const startTimeU64 = mappedData[i * 2];\n const endTimeU64 = mappedData[i * 2 + 1];\n if (typeof this.queryTimeBase === "undefined") {\n this.queryTimeBase = startTimeU64;\n }\n const startTime = Number(startTimeU64 - this.queryTimeBase);\n const endTime = Number(endTimeU64 - this.queryTimeBase);\n if (!Number.isSafeInteger(startTime) || !Number.isSafeInteger(endTime)) {\n throw new RangeError("incorrect timestamp range");\n }\n if (this.env.webgpu.profiling?.ondata) {\n this.env.webgpu.profiling.ondata({\n version: 1,\n inputsMetadata: inputTensorViews.map(\n (value) => ({ dims: value.dims, dataType: tensorDataTypeEnumToString(value.dataType) })\n ),\n outputsMetadata: outputTensorViews.map(\n (value) => ({ dims: value.dims, dataType: tensorDataTypeEnumToString(value.dataType) })\n ),\n kernelId,\n kernelType,\n kernelName,\n programName,\n startTime,\n endTime\n });\n } else {\n let inputShapes = "";\n inputTensorViews.forEach((value, i2) => {\n inputShapes += `input[${i2}]: [${value.dims}] | ${tensorDataTypeEnumToString(value.dataType)}, `;\n });\n let outputShapes = "";\n outputTensorViews.forEach((value, i2) => {\n outputShapes += `output[${i2}]: [${value.dims}] | ${tensorDataTypeEnumToString(value.dataType)}, `;\n });\n console.log(`[profiling] kernel "${kernelId}|${kernelType}|${kernelName}|${programName}" ${inputShapes}${outputShapes}execution time: ${endTime - startTime} ns`);\n }\n TRACE("GPU", `${programName}::${startTimeU64}::${endTimeU64}`);\n }\n queryReadBuffer.unmap();\n this.pendingQueries.delete(queryReadBuffer);\n });\n }\n TRACE_FUNC_END();\n }\n /**\n * run a WebGPU program.\n * @param program a ProgramInfo instance\n * @param inputTensorViews a TensorView array. each element represents a value already exists in GPU.\n * @param outputIndices an indices array. each element can be either -1 (temporary data), -2 (persistent data) or an\n * index to the kernel\'s output.\n * @param createKernelOutput a callback function that create a value to kernel\'s output with the given index\n * @param createIntermediateOutput a callback function that create a value as a intermediate value, either temporary\n * or persistent (owned by the current kernel)\n * @returns a TensorView array representing the result.\n */\n run(program, inputTensorViews, outputIndices, createKernelOutput, createIntermediateOutput, outputCount) {\n TRACE_FUNC_BEGIN(program.name);\n const inputDatas = [];\n for (let i = 0; i < inputTensorViews.length; ++i) {\n const data = inputTensorViews[i].data;\n if (data === 0) {\n continue;\n }\n const gpuData = this.gpuDataManager.get(data);\n if (!gpuData) {\n throw new Error(`no GPU data for input: ${data}`);\n }\n inputDatas.push(gpuData);\n }\n const { outputs, dispatchGroup, programUniforms } = program.getRunData(inputTensorViews);\n const validatedOutputIndices = outputIndices.length === 0 ? outputs.map((_, i) => i) : outputIndices;\n if (validatedOutputIndices.length !== outputs.length) {\n throw new Error(`Output size ${validatedOutputIndices.length} must be equal to ${outputs.length}.`);\n }\n const outputTensorViews = [];\n const outputDatas = [];\n for (let i = 0; i < outputs.length; ++i) {\n if (!Number.isInteger(validatedOutputIndices[i]) || validatedOutputIndices[i] < -3 || validatedOutputIndices[i] >= outputCount) {\n throw new Error(`Invalid output index: ${validatedOutputIndices[i]}`);\n }\n if (validatedOutputIndices[i] === -3) {\n continue;\n }\n const isTemporary = validatedOutputIndices[i] === -1;\n const isPersistent = validatedOutputIndices[i] === -2;\n const tensorView = isTemporary || isPersistent ? createIntermediateOutput(outputs[i].dataType, outputs[i].dims) : createKernelOutput(validatedOutputIndices[i], outputs[i].dataType, outputs[i].dims);\n outputTensorViews.push(tensorView);\n if (tensorView.data === 0) {\n continue;\n }\n const gpuData = this.gpuDataManager.get(tensorView.data);\n if (!gpuData) {\n throw new Error(`no GPU data for output: ${tensorView.data}`);\n }\n if (isTemporary) {\n this.temporaryData.push(gpuData);\n }\n if (isPersistent) {\n let persistentData = this.kernelPersistentData.get(this.currentKernelId);\n if (!persistentData) {\n persistentData = [];\n this.kernelPersistentData.set(this.currentKernelId, persistentData);\n }\n persistentData.push(gpuData);\n }\n outputDatas.push(gpuData);\n }\n if (inputDatas.length !== inputTensorViews.length || outputDatas.length !== outputTensorViews.length) {\n if (outputDatas.length === 0) {\n TRACE_FUNC_END(program.name);\n return outputTensorViews;\n }\n throw new Error(\n `Program ${program.name} has zero-sized tensor(s) in inputs or outputs. This is not supported now.`\n );\n }\n let uniformBufferBinding;\n if (programUniforms) {\n let currentOffset = 0;\n const offsets = [];\n programUniforms.forEach((v) => {\n const data = typeof v.data === "number" ? [v.data] : v.data;\n if (data.length === 0) {\n return;\n }\n const sizeOfElement = v.type === 10 /* float16 */ ? 2 : 4;\n let sizeOfVecOrMat;\n let baseAlignment;\n if (v.type === 10 /* float16 */) {\n baseAlignment = data.length > 4 ? 16 : data.length > 2 ? 8 : data.length * sizeOfElement;\n sizeOfVecOrMat = data.length > 4 ? 16 : sizeOfElement * data.length;\n } else {\n baseAlignment = data.length <= 2 ? data.length * sizeOfElement : 16;\n sizeOfVecOrMat = 16;\n }\n currentOffset = Math.ceil(currentOffset / baseAlignment) * baseAlignment;\n offsets.push(currentOffset);\n const elementPerVecOrMat = v.type === 10 /* float16 */ ? 8 : 4;\n currentOffset += data.length > 4 ? Math.ceil(data.length / elementPerVecOrMat) * sizeOfVecOrMat : data.length * sizeOfElement;\n });\n const maxAlignmentOfField = 16;\n currentOffset = Math.ceil(currentOffset / maxAlignmentOfField) * maxAlignmentOfField;\n const arrayBuffer = new ArrayBuffer(currentOffset);\n programUniforms.forEach((v, i) => {\n const offset = offsets[i];\n const data = typeof v.data === "number" ? [v.data] : v.data;\n if (v.type === 6 /* int32 */) {\n new Int32Array(arrayBuffer, offset, data.length).set(data);\n } else if (v.type === 12 /* uint32 */) {\n new Uint32Array(arrayBuffer, offset, data.length).set(data);\n } else if (v.type === 10 /* float16 */) {\n new Uint16Array(arrayBuffer, offset, data.length).set(data);\n } else if (v.type === 1 /* float */) {\n new Float32Array(arrayBuffer, offset, data.length).set(data);\n } else {\n throw new Error(`Unsupported uniform type: ${tensorDataTypeEnumToString(v.type)}`);\n }\n });\n const uniformBufferData = (\n // eslint-disable-next-line no-bitwise\n this.gpuDataManager.create(currentOffset, GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM)\n );\n this.device.queue.writeBuffer(uniformBufferData.buffer, 0, arrayBuffer, 0, currentOffset);\n this.gpuDataManager.release(uniformBufferData.id);\n uniformBufferBinding = { offset: 0, size: currentOffset, buffer: uniformBufferData.buffer };\n }\n const normalizedDispatchGroup = this.programManager.normalizeDispatchGroupSize(dispatchGroup);\n const is1DimensionDispatch = normalizedDispatchGroup[1] === 1 && normalizedDispatchGroup[2] === 1;\n const key = getProgramInfoUniqueKey(program, inputTensorViews, is1DimensionDispatch);\n let artifact = this.programManager.getArtifact(key);\n if (!artifact) {\n artifact = this.programManager.build(program, normalizedDispatchGroup);\n this.programManager.setArtifact(key, artifact);\n LOG_DEBUG("info", () => `[artifact] key: ${key}, programName: ${program.name}`);\n }\n if (programUniforms && artifact.uniformVariablesInfo) {\n if (programUniforms.length !== artifact.uniformVariablesInfo.length) {\n throw new Error(`Uniform variables count mismatch: expect ${artifact.uniformVariablesInfo.length}, got ${programUniforms.length} in program "${artifact.programInfo.name}".`);\n }\n for (let i = 0; i < programUniforms.length; i++) {\n const uniform = programUniforms[i];\n const actualType = uniform.type;\n const actualLength = typeof uniform.data === "number" ? 1 : uniform.data.length;\n const [type, length] = artifact.uniformVariablesInfo[i];\n if (actualType !== type || actualLength !== length) {\n throw new Error(`Uniform variable ${i} mismatch: expect type ${type} with size ${length}, got type ${actualType} with size ${actualLength} in program "${artifact.programInfo.name}".`);\n }\n }\n }\n LOG_DEBUG(\n "info",\n () => `[ProgramManager] run "${program.name}" (key=${key}) with ${normalizedDispatchGroup[0]}x${normalizedDispatchGroup[1]}x${normalizedDispatchGroup[2]}`\n );\n if (this.queryType !== "none" || this.sessionStatus === "capturing") {\n const pendingKernelInfo = {\n kernelId: this.currentKernelId,\n programName: artifact.programInfo.name,\n inputTensorViews,\n outputTensorViews\n };\n this.pendingKernels.push(pendingKernelInfo);\n if (this.sessionStatus === "capturing") {\n const sessionPendingKernels = this.capturedPendingKernels.get(this.currentSessionId);\n sessionPendingKernels.push(pendingKernelInfo);\n }\n }\n this.programManager.run(artifact, inputDatas, outputDatas, normalizedDispatchGroup, uniformBufferBinding);\n TRACE_FUNC_END(program.name);\n return outputTensorViews;\n }\n upload(gpuDataId, data) {\n this.gpuDataManager.upload(gpuDataId, data);\n }\n memcpy(src, dst) {\n this.gpuDataManager.memcpy(src, dst);\n }\n async download(gpuDataId, getTargetBuffer) {\n await this.gpuDataManager.download(gpuDataId, getTargetBuffer);\n }\n alloc(size) {\n return this.gpuDataManager.create(size).id;\n }\n free(ptr) {\n return this.gpuDataManager.release(ptr);\n }\n createKernel(kernelType, kernelId, attribute, kernelName) {\n const op = WEBGPU_OP_RESOLVE_RULES.get(kernelType);\n if (!op) {\n throw new Error(`kernel not implemented: ${kernelType}`);\n }\n const kernelInfo = {\n kernelType,\n kernelName,\n kernelEntry: op[0],\n attributes: [op[1], attribute]\n };\n this.kernels.set(kernelId, kernelInfo);\n }\n releaseKernel(kernelId) {\n const persistentData = this.kernelPersistentData.get(kernelId);\n if (persistentData) {\n for (const data of persistentData) {\n this.gpuDataManager.release(data.id);\n }\n this.kernelPersistentData.delete(kernelId);\n }\n this.kernelCustomData.delete(kernelId);\n this.kernels.delete(kernelId);\n }\n computeKernel(kernelId, context, errors) {\n const kernel = this.kernels.get(kernelId);\n if (!kernel) {\n throw new Error(`kernel not created: ${kernelId}`);\n }\n const kernelType = kernel.kernelType;\n const kernelName = kernel.kernelName;\n const kernelEntry = kernel.kernelEntry;\n const attributes = kernel.attributes;\n if (this.currentKernelId !== null) {\n throw new Error(`kernel "[${kernelType}] ${kernelName}" is not allowed to be called recursively`);\n }\n this.currentKernelId = kernelId;\n if (attributes[0]) {\n attributes[1] = attributes[0](attributes[1]);\n attributes[0] = void 0;\n }\n LOG_DEBUG("info", () => `[WebGPU] Start to run kernel "[${kernelType}] ${kernelName}"...`);\n const useErrorScope = this.env.debug;\n this.temporaryData = [];\n try {\n if (useErrorScope) {\n this.device.pushErrorScope("validation");\n }\n kernelEntry(context, attributes[1]);\n return 0;\n } catch (e) {\n errors.push(Promise.resolve(`[WebGPU] Kernel "[${kernelType}] ${kernelName}" failed. ${e}`));\n return 1;\n } finally {\n if (useErrorScope) {\n errors.push(this.device.popErrorScope().then(\n (err) => err ? `GPU validation error for kernel "[${kernelType}] ${kernelName}": ${err.message}` : null\n ));\n }\n for (const data of this.temporaryData) {\n this.gpuDataManager.release(data.id);\n }\n this.temporaryData = [];\n this.currentKernelId = null;\n }\n }\n // #region external buffer\n registerBuffer(sessionId, index, buffer, size) {\n let sessionInputOutputMapping = this.sessionExternalDataMapping.get(sessionId);\n if (!sessionInputOutputMapping) {\n sessionInputOutputMapping = /* @__PURE__ */ new Map();\n this.sessionExternalDataMapping.set(sessionId, sessionInputOutputMapping);\n }\n const previousBuffer = sessionInputOutputMapping.get(index);\n const id = this.gpuDataManager.registerExternalBuffer(buffer, size, previousBuffer?.[1]);\n sessionInputOutputMapping.set(index, [id, buffer]);\n return id;\n }\n unregisterBuffers(sessionId) {\n const sessionInputOutputMapping = this.sessionExternalDataMapping.get(sessionId);\n if (sessionInputOutputMapping) {\n sessionInputOutputMapping.forEach((bufferInfo) => this.gpuDataManager.unregisterExternalBuffer(bufferInfo[1]));\n this.sessionExternalDataMapping.delete(sessionId);\n }\n }\n getBuffer(gpuDataId) {\n const gpuData = this.gpuDataManager.get(gpuDataId);\n if (!gpuData) {\n throw new Error(`no GPU data for buffer: ${gpuDataId}`);\n }\n return gpuData.buffer;\n }\n createDownloader(gpuBuffer, size, type) {\n return async () => {\n const data = await downloadGpuData(this, gpuBuffer, size);\n return createView(data.buffer, type);\n };\n }\n // #endregion\n writeTimestamp(index) {\n if (this.queryType !== "inside-passes") {\n return;\n }\n this.computePassEncoder.writeTimestamp(this.querySet, index);\n }\n setQueryType() {\n this.queryType = "none";\n if (this.env.webgpu.profiling?.mode === "default" || (typeof this.env.trace === "undefined" ? this.env.wasm.trace : this.env.trace)) {\n if (this.device.features.has("chromium-experimental-timestamp-query-inside-passes")) {\n this.queryType = "inside-passes";\n } else if (this.device.features.has("timestamp-query")) {\n this.queryType = "at-passes";\n }\n if (this.queryType !== "none" && typeof this.querySet === "undefined") {\n this.querySet = this.device.createQuerySet({\n type: "timestamp",\n count: this.maxDispatchNumber * 2\n });\n this.queryResolveBuffer = this.device.createBuffer(\n // eslint-disable-next-line no-bitwise\n { size: this.maxDispatchNumber * 2 * 8, usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.QUERY_RESOLVE }\n );\n }\n }\n }\n captureBegin() {\n LOG_DEBUG("info", "captureBegin");\n if (!this.capturedCommandList.get(this.currentSessionId)) {\n this.capturedCommandList.set(this.currentSessionId, []);\n }\n if (!this.capturedPendingKernels.get(this.currentSessionId)) {\n this.capturedPendingKernels.set(this.currentSessionId, []);\n }\n this.flush();\n this.sessionStatus = "capturing";\n }\n captureEnd() {\n LOG_DEBUG("info", "captureEnd");\n this.flush();\n this.sessionStatus = "default";\n }\n replay() {\n LOG_DEBUG("info", "replay");\n this.sessionStatus = "replaying";\n const sessionCommandList = this.capturedCommandList.get(this.currentSessionId);\n const sessionPendingKernels = this.capturedPendingKernels.get(this.currentSessionId);\n const length = sessionCommandList.length;\n this.pendingKernels = [];\n for (let i = 0; i < length; i++) {\n const computePassEncoder = this.getComputePassEncoder();\n const command = sessionCommandList[i];\n this.writeTimestamp(this.pendingDispatchNumber * 2);\n computePassEncoder.setPipeline(command.computePipeline);\n computePassEncoder.setBindGroup(0, command.bindGroup);\n computePassEncoder.dispatchWorkgroups(...command.dispatchGroup);\n this.writeTimestamp(this.pendingDispatchNumber * 2 + 1);\n this.pendingDispatchNumber++;\n if (this.queryType !== "none") {\n this.pendingKernels.push(sessionPendingKernels[i]);\n }\n if (this.pendingDispatchNumber >= this.maxDispatchNumber || this.queryType === "at-passes") {\n this.endComputePass();\n }\n if (this.pendingDispatchNumber >= this.maxDispatchNumber) {\n this.flush();\n }\n }\n this.flush();\n this.sessionStatus = "default";\n }\n onReleaseSession(sessionId) {\n this.unregisterBuffers(sessionId);\n if (this.capturedCommandList.has(sessionId)) {\n this.capturedCommandList.delete(sessionId);\n }\n if (this.capturedPendingKernels.has(sessionId)) {\n this.capturedPendingKernels.delete(sessionId);\n }\n this.gpuDataManager.onReleaseSession(sessionId);\n }\n onRunStart(sessionId) {\n this.currentSessionId = sessionId;\n this.setQueryType();\n }\n };\n }\n });\n\n // web/lib/wasm/jsep/init.ts\n var init_exports = {};\n __export(init_exports, {\n init: () => init\n });\n var TensorViewImpl, ComputeContextImpl, init;\n var init_init = __esm({\n "web/lib/wasm/jsep/init.ts"() {\n "use strict";\n init_wasm_common();\n init_backend_webgpu();\n init_log();\n init_util();\n TensorViewImpl = class _TensorViewImpl {\n constructor(module, dataType, data, dims) {\n this.module = module;\n this.dataType = dataType;\n this.data = data;\n this.dims = dims;\n }\n getFloat32Array() {\n if (this.dataType !== 1 /* float */) {\n throw new Error("Invalid data type");\n }\n const elementCount = ShapeUtil.size(this.dims);\n return elementCount === 0 ? new Float32Array() : new Float32Array(this.module.HEAP8.buffer, this.data, elementCount);\n }\n getBigInt64Array() {\n if (this.dataType !== 7 /* int64 */) {\n throw new Error("Invalid data type");\n }\n const elementCount = ShapeUtil.size(this.dims);\n return elementCount === 0 ? new BigInt64Array() : new BigInt64Array(this.module.HEAP8.buffer, this.data, elementCount);\n }\n getInt32Array() {\n if (this.dataType !== 6 /* int32 */) {\n throw new Error("Invalid data type");\n }\n const elementCount = ShapeUtil.size(this.dims);\n return elementCount === 0 ? new Int32Array() : new Int32Array(this.module.HEAP8.buffer, this.data, elementCount);\n }\n reshape(newDims) {\n if (ShapeUtil.size(newDims) !== ShapeUtil.size(this.dims)) {\n throw new Error("Invalid new shape");\n }\n return new _TensorViewImpl(this.module, this.dataType, this.data, newDims);\n }\n };\n ComputeContextImpl = class {\n constructor(module, backend, contextDataOffset) {\n this.module = module;\n this.backend = backend;\n this.customDataOffset = 0;\n this.customDataSize = 0;\n this.adapterInfo = backend.adapterInfo;\n const heapU32 = module.HEAPU32;\n let dataIndex = contextDataOffset >>> 2;\n this.opKernelContext = heapU32[dataIndex++];\n const inputCount = heapU32[dataIndex++];\n this.outputCount = heapU32[dataIndex++];\n this.customDataOffset = heapU32[dataIndex++];\n this.customDataSize = heapU32[dataIndex++];\n const inputs = [];\n for (let i = 0; i < inputCount; i++) {\n const dataType = heapU32[dataIndex++];\n const data = heapU32[dataIndex++];\n const dim = heapU32[dataIndex++];\n const dims = [];\n for (let d = 0; d < dim; d++) {\n dims.push(heapU32[dataIndex++]);\n }\n inputs.push(new TensorViewImpl(module, dataType, data, dims));\n }\n this.inputs = inputs;\n }\n get kernelCustomData() {\n return this.backend.currentKernelCustomData;\n }\n get customDataBuffer() {\n return this.module.HEAPU8.subarray(this.customDataOffset, this.customDataOffset + this.customDataSize);\n }\n getMaxComputeWorkgroupSizes() {\n return [\n this.backend.device.limits.maxComputeWorkgroupSizeX,\n this.backend.device.limits.maxComputeWorkgroupSizeY,\n this.backend.device.limits.maxComputeWorkgroupSizeZ\n ];\n }\n getMaxComputeWorkgroupStoragesize() {\n return this.backend.device.limits.maxComputeWorkgroupStorageSize;\n }\n compute(program, inputsOutputsMapping) {\n const mappedInputs = inputsOutputsMapping?.inputs?.map((i) => typeof i === "number" ? this.inputs[i] : i) ?? this.inputs;\n const outputIndices = inputsOutputsMapping?.outputs ?? [];\n const createKernelOutput = (index, dataType, dims) => new TensorViewImpl(this.module, dataType, this.output(index, dims), dims);\n const createTemporaryOutput = (dataType, dims) => {\n const elementSize = getTensorElementSize(dataType);\n if (!elementSize) {\n throw new Error(`Unsupported data type: ${dataType}`);\n }\n const bufferSize = elementSize * ShapeUtil.size(dims);\n const gpuDataId = bufferSize > 0 ? this.backend.gpuDataManager.create(bufferSize).id : 0;\n return new TensorViewImpl(this.module, dataType, gpuDataId, dims);\n };\n return this.backend.run(\n program,\n mappedInputs,\n outputIndices,\n createKernelOutput,\n createTemporaryOutput,\n this.outputCount\n );\n }\n output(index, dims) {\n const stack = this.module.stackSave();\n try {\n const data = this.module.stackAlloc(\n (1 + dims.length) * 4\n /* sizeof(size_t) */\n );\n let offset = data >> 2;\n this.module.HEAPU32[offset++] = dims.length;\n for (let i = 0; i < dims.length; i++) {\n this.module.HEAPU32[offset++] = dims[i];\n }\n return this.module._JsepOutput(this.opKernelContext, index, data);\n } catch (e) {\n throw new Error(\n `Failed to generate kernel\'s output[${index}] with dims [${dims}]. If you are running with pre-allocated output, please make sure the output type/dims are correct. Error: ${e}`\n );\n } finally {\n this.module.stackRestore(stack);\n }\n }\n };\n init = async (name, module, env3, gpuAdapter) => {\n const jsepInit = module.jsepInit;\n if (!jsepInit) {\n throw new Error("Failed to initialize JSEP. The WebAssembly module is not built with JSEP support.");\n }\n if (name === "webgpu") {\n const backend = new WebGpuBackend();\n await backend.initialize(env3, gpuAdapter);\n jsepInit("webgpu", [\n // backend\n backend,\n // jsepAlloc()\n (size) => backend.alloc(size),\n // jsepFree()\n (ptr) => backend.free(ptr),\n // jsepCopy(src, dst, size, isSourceGpu)\n (src, dst, size, isSourceGpu = false) => {\n if (isSourceGpu) {\n LOG_DEBUG("verbose", () => `[WebGPU] jsepCopyGpuToGpu: src=${src}, dst=${dst}, size=${size}`);\n backend.memcpy(src, dst);\n } else {\n LOG_DEBUG("verbose", () => `[WebGPU] jsepCopyCpuToGpu: dataOffset=${src}, gpuDataId=${dst}, size=${size}`);\n const data = module.HEAPU8.subarray(src >>> 0, (src >>> 0) + size);\n backend.upload(dst, data);\n }\n },\n // jsepCopyAsync(src, dst, size)\n async (gpuDataId, dataOffset, size) => {\n LOG_DEBUG(\n "verbose",\n () => `[WebGPU] jsepCopyGpuToCpu: gpuDataId=${gpuDataId}, dataOffset=${dataOffset}, size=${size}`\n );\n await backend.download(\n gpuDataId,\n () => module.HEAPU8.subarray(dataOffset >>> 0, (dataOffset >>> 0) + size)\n );\n },\n // jsepCreateKernel\n (kernelType, kernelId, attribute) => backend.createKernel(\n kernelType,\n kernelId,\n attribute,\n module.UTF8ToString(module._JsepGetNodeName(kernelId))\n ),\n // jsepReleaseKernel\n (kernel) => backend.releaseKernel(kernel),\n // jsepRun\n (kernel, contextDataOffset, sessionHandle, errors) => {\n LOG_DEBUG(\n "verbose",\n () => `[WebGPU] jsepRun: sessionHandle=${sessionHandle}, kernel=${kernel}, contextDataOffset=${contextDataOffset}`\n );\n const context = new ComputeContextImpl(module, backend, contextDataOffset);\n return backend.computeKernel(kernel, context, errors);\n },\n // jsepCaptureBegin\n () => backend.captureBegin(),\n // jsepCaptureEnd\n () => backend.captureEnd(),\n // jsepReplay\n () => backend.replay()\n ]);\n } else {\n jsepInit("webnn");\n }\n };\n }\n });\n\n // nodejs-ignore:node:path\n var join = void 0;\n\n // web/lib/wasm/wasm-factory.ts\n var ortWasmFactory;\n if (false) {\n ortWasmFactory = null;\n } else {\n ortWasmFactory = false ? null : require_ort_wasm_simd_jsep();\n }\n var ortWasmFactoryThreaded = true ? false ? null : require_ort_wasm_simd_threaded_jsep() : ortWasmFactory;\n var wasm;\n var initialized = false;\n var initializing = false;\n var aborted = false;\n var isMultiThreadSupported = (numThreads) => {\n if (numThreads === 1) {\n return false;\n }\n if (typeof SharedArrayBuffer === "undefined") {\n if (typeof self !== "undefined" && !self.crossOriginIsolated) {\n console.warn(\n "env.wasm.numThreads is set to " + numThreads + ", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."\n );\n }\n return false;\n }\n if (typeof process !== "undefined" && process.versions && process.versions.node) {\n console.warn(\n "env.wasm.numThreads is set to " + numThreads + ", however, currently onnxruntime-web does not support multi-threads in Node.js. Please consider using onnxruntime-node for performance critical scenarios."\n );\n }\n try {\n if (typeof MessageChannel !== "undefined") {\n new MessageChannel().port1.postMessage(new SharedArrayBuffer(1));\n }\n return WebAssembly.validate(new Uint8Array([\n 0,\n 97,\n 115,\n 109,\n 1,\n 0,\n 0,\n 0,\n 1,\n 4,\n 1,\n 96,\n 0,\n 0,\n 3,\n 2,\n 1,\n 0,\n 5,\n 4,\n 1,\n 3,\n 1,\n 1,\n 10,\n 11,\n 1,\n 9,\n 0,\n 65,\n 0,\n 254,\n 16,\n 2,\n 0,\n 26,\n 11\n ]));\n } catch (e) {\n return false;\n }\n };\n var isSimdSupported = () => {\n try {\n return WebAssembly.validate(new Uint8Array([\n 0,\n 97,\n 115,\n 109,\n 1,\n 0,\n 0,\n 0,\n 1,\n 4,\n 1,\n 96,\n 0,\n 0,\n 3,\n 2,\n 1,\n 0,\n 10,\n 30,\n 1,\n 28,\n 0,\n 65,\n 0,\n 253,\n 15,\n 253,\n 12,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 253,\n 186,\n 1,\n 26,\n 11\n ]));\n } catch (e) {\n return false;\n }\n };\n var getWasmFileName = (useSimd, useThreads) => {\n if (useSimd) {\n if (false) {\n return "ort-training-wasm-simd.wasm";\n }\n return useThreads ? "ort-wasm-simd-threaded.wasm" : "ort-wasm-simd.wasm";\n } else {\n return useThreads ? "ort-wasm-threaded.wasm" : "ort-wasm.wasm";\n }\n };\n var initializeWebAssembly = async (flags) => {\n if (initialized) {\n return Promise.resolve();\n }\n if (initializing) {\n throw new Error("multiple calls to \'initializeWebAssembly()\' detected.");\n }\n if (aborted) {\n throw new Error("previous call to \'initializeWebAssembly()\' failed.");\n }\n initializing = true;\n const timeout = flags.initTimeout;\n const numThreads = flags.numThreads;\n const simd = flags.simd;\n const useThreads = isMultiThreadSupported(numThreads);\n const useSimd = simd && isSimdSupported();\n const wasmPaths = flags.wasmPaths;\n const wasmPrefixOverride = typeof wasmPaths === "string" ? wasmPaths : void 0;\n const wasmFileName = getWasmFileName(useSimd, useThreads);\n const wasmPathOverride = typeof wasmPaths === "object" ? wasmPaths[wasmFileName] : void 0;\n let isTimeout = false;\n const tasks = [];\n if (timeout > 0) {\n tasks.push(new Promise((resolve) => {\n setTimeout(() => {\n isTimeout = true;\n resolve();\n }, timeout);\n }));\n }\n tasks.push(new Promise((resolve, reject) => {\n const factory = useThreads ? ortWasmFactoryThreaded : ortWasmFactory;\n const config = {\n locateFile: (fileName, scriptDirectory) => {\n if (useThreads && fileName.endsWith(".worker.js") && typeof Blob !== "undefined") {\n return URL.createObjectURL(new Blob(\n [\n // This require() function is handled by esbuild plugin to load file content as string.\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n require_ort_wasm_threaded_worker()\n ],\n { type: "text/javascript" }\n ));\n }\n if (fileName.endsWith(".wasm")) {\n if (wasmPathOverride) {\n return wasmPathOverride;\n }\n const prefix = wasmPrefixOverride ?? scriptDirectory;\n if (true) {\n if (wasmFileName === "ort-wasm-simd.wasm") {\n return prefix + "ort-wasm-simd.jsep.wasm";\n } else if (wasmFileName === "ort-wasm-simd-threaded.wasm") {\n return prefix + "ort-wasm-simd-threaded.jsep.wasm";\n }\n }\n return prefix + wasmFileName;\n }\n return scriptDirectory + fileName;\n }\n };\n if (useThreads) {\n config.numThreads = numThreads;\n if (typeof Blob === "undefined") {\n config.mainScriptUrlOrBlob = join(__dirname, "ort-wasm-threaded.js");\n } else {\n const scriptSourceCode = `var ortWasmThreaded=${factory.toString()};`;\n config.mainScriptUrlOrBlob = new Blob([scriptSourceCode], { type: "text/javascript" });\n }\n }\n factory(config).then(\n // wasm module initialized successfully\n (module) => {\n initializing = false;\n initialized = true;\n wasm = module;\n resolve();\n },\n // wasm module failed to initialize\n (what) => {\n initializing = false;\n aborted = true;\n reject(what);\n }\n );\n }));\n await Promise.race(tasks);\n if (isTimeout) {\n throw new Error(`WebAssembly backend initializing failed due to timeout: ${timeout}ms`);\n }\n };\n var getInstance = () => {\n if (initialized && wasm) {\n return wasm;\n }\n throw new Error("WebAssembly is not initialized yet.");\n };\n\n // web/lib/wasm/wasm-utils.ts\n var allocWasmString = (data, allocs) => {\n const wasm2 = getInstance();\n const dataLength = wasm2.lengthBytesUTF8(data) + 1;\n const dataOffset = wasm2._malloc(dataLength);\n wasm2.stringToUTF8(data, dataOffset, dataLength);\n allocs.push(dataOffset);\n return dataOffset;\n };\n var iterateExtraOptions = (options, prefix, seen, handler) => {\n if (typeof options == "object" && options !== null) {\n if (seen.has(options)) {\n throw new Error("Circular reference in options");\n } else {\n seen.add(options);\n }\n }\n Object.entries(options).forEach(([key, value]) => {\n const name = prefix ? prefix + key : key;\n if (typeof value === "object") {\n iterateExtraOptions(value, name + ".", seen, handler);\n } else if (typeof value === "string" || typeof value === "number") {\n handler(name, value.toString());\n } else if (typeof value === "boolean") {\n handler(name, value ? "1" : "0");\n } else {\n throw new Error(`Can\'t handle extra config type: ${typeof value}`);\n }\n });\n };\n var checkLastError = (message) => {\n const wasm2 = getInstance();\n const stack = wasm2.stackSave();\n try {\n const paramsOffset = wasm2.stackAlloc(8);\n wasm2._OrtGetLastError(paramsOffset, paramsOffset + 4);\n const errorCode = wasm2.HEAP32[paramsOffset / 4];\n const errorMessagePointer = wasm2.HEAPU32[paramsOffset / 4 + 1];\n const errorMessage = errorMessagePointer ? wasm2.UTF8ToString(errorMessagePointer) : "";\n throw new Error(`${message} ERROR_CODE: ${errorCode}, ERROR_MESSAGE: ${errorMessage}`);\n } finally {\n wasm2.stackRestore(stack);\n }\n };\n\n // web/lib/wasm/run-options.ts\n var setRunOptions = (options) => {\n const wasm2 = getInstance();\n let runOptionsHandle = 0;\n const allocs = [];\n const runOptions = options || {};\n try {\n if (options?.logSeverityLevel === void 0) {\n runOptions.logSeverityLevel = 2;\n } else if (typeof options.logSeverityLevel !== "number" || !Number.isInteger(options.logSeverityLevel) || options.logSeverityLevel < 0 || options.logSeverityLevel > 4) {\n throw new Error(`log serverity level is not valid: ${options.logSeverityLevel}`);\n }\n if (options?.logVerbosityLevel === void 0) {\n runOptions.logVerbosityLevel = 0;\n } else if (typeof options.logVerbosityLevel !== "number" || !Number.isInteger(options.logVerbosityLevel)) {\n throw new Error(`log verbosity level is not valid: ${options.logVerbosityLevel}`);\n }\n if (options?.terminate === void 0) {\n runOptions.terminate = false;\n }\n let tagDataOffset = 0;\n if (options?.tag !== void 0) {\n tagDataOffset = allocWasmString(options.tag, allocs);\n }\n runOptionsHandle = wasm2._OrtCreateRunOptions(\n runOptions.logSeverityLevel,\n runOptions.logVerbosityLevel,\n !!runOptions.terminate,\n tagDataOffset\n );\n if (runOptionsHandle === 0) {\n checkLastError("Can\'t create run options.");\n }\n if (options?.extra !== void 0) {\n iterateExtraOptions(options.extra, "", /* @__PURE__ */ new WeakSet(), (key, value) => {\n const keyDataOffset = allocWasmString(key, allocs);\n const valueDataOffset = allocWasmString(value, allocs);\n if (wasm2._OrtAddRunConfigEntry(runOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(`Can\'t set a run config entry: ${key} - ${value}.`);\n }\n });\n }\n return [runOptionsHandle, allocs];\n } catch (e) {\n if (runOptionsHandle !== 0) {\n wasm2._OrtReleaseRunOptions(runOptionsHandle);\n }\n allocs.forEach((alloc) => wasm2._free(alloc));\n throw e;\n }\n };\n\n // web/lib/wasm/session-options.ts\n var getGraphOptimzationLevel = (graphOptimizationLevel) => {\n switch (graphOptimizationLevel) {\n case "disabled":\n return 0;\n case "basic":\n return 1;\n case "extended":\n return 2;\n case "all":\n return 99;\n default:\n throw new Error(`unsupported graph optimization level: ${graphOptimizationLevel}`);\n }\n };\n var getExecutionMode = (executionMode) => {\n switch (executionMode) {\n case "sequential":\n return 0;\n case "parallel":\n return 1;\n default:\n throw new Error(`unsupported execution mode: ${executionMode}`);\n }\n };\n var appendDefaultOptions = (options) => {\n if (!options.extra) {\n options.extra = {};\n }\n if (!options.extra.session) {\n options.extra.session = {};\n }\n const session = options.extra.session;\n if (!session.use_ort_model_bytes_directly) {\n session.use_ort_model_bytes_directly = "1";\n }\n if (options.executionProviders && options.executionProviders.some((ep) => (typeof ep === "string" ? ep : ep.name) === "webgpu")) {\n options.enableMemPattern = false;\n }\n };\n var setExecutionProviders = (sessionOptionsHandle, executionProviders, allocs) => {\n for (const ep of executionProviders) {\n let epName = typeof ep === "string" ? ep : ep.name;\n switch (epName) {\n case "webnn":\n epName = "WEBNN";\n if (typeof ep !== "string") {\n const webnnOptions = ep;\n if (webnnOptions?.deviceType) {\n const keyDataOffset = allocWasmString("deviceType", allocs);\n const valueDataOffset = allocWasmString(webnnOptions.deviceType, allocs);\n if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(`Can\'t set a session config entry: \'deviceType\' - ${webnnOptions.deviceType}.`);\n }\n }\n if (webnnOptions?.numThreads) {\n let numThreads = webnnOptions.numThreads;\n if (typeof numThreads != "number" || !Number.isInteger(numThreads) || numThreads < 0) {\n numThreads = 0;\n }\n const keyDataOffset = allocWasmString("numThreads", allocs);\n const valueDataOffset = allocWasmString(numThreads.toString(), allocs);\n if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(`Can\'t set a session config entry: \'numThreads\' - ${webnnOptions.numThreads}.`);\n }\n }\n if (webnnOptions?.powerPreference) {\n const keyDataOffset = allocWasmString("powerPreference", allocs);\n const valueDataOffset = allocWasmString(webnnOptions.powerPreference, allocs);\n if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(\n `Can\'t set a session config entry: \'powerPreference\' - ${webnnOptions.powerPreference}.`\n );\n }\n }\n }\n break;\n case "webgpu":\n epName = "JS";\n if (typeof ep !== "string") {\n const webgpuOptions = ep;\n if (webgpuOptions?.preferredLayout) {\n if (webgpuOptions.preferredLayout !== "NCHW" && webgpuOptions.preferredLayout !== "NHWC") {\n throw new Error(`preferredLayout must be either \'NCHW\' or \'NHWC\': ${webgpuOptions.preferredLayout}`);\n }\n const keyDataOffset = allocWasmString("preferredLayout", allocs);\n const valueDataOffset = allocWasmString(webgpuOptions.preferredLayout, allocs);\n if (getInstance()._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(\n `Can\'t set a session config entry: \'preferredLayout\' - ${webgpuOptions.preferredLayout}.`\n );\n }\n }\n }\n break;\n case "wasm":\n case "cpu":\n continue;\n default:\n throw new Error(`not supported execution provider: ${epName}`);\n }\n const epNameDataOffset = allocWasmString(epName, allocs);\n if (getInstance()._OrtAppendExecutionProvider(sessionOptionsHandle, epNameDataOffset) !== 0) {\n checkLastError(`Can\'t append execution provider: ${epName}.`);\n }\n }\n };\n var setSessionOptions = (options) => {\n const wasm2 = getInstance();\n let sessionOptionsHandle = 0;\n const allocs = [];\n const sessionOptions = options || {};\n appendDefaultOptions(sessionOptions);\n try {\n const graphOptimizationLevel = getGraphOptimzationLevel(sessionOptions.graphOptimizationLevel ?? "all");\n const executionMode = getExecutionMode(sessionOptions.executionMode ?? "sequential");\n const logIdDataOffset = typeof sessionOptions.logId === "string" ? allocWasmString(sessionOptions.logId, allocs) : 0;\n const logSeverityLevel = sessionOptions.logSeverityLevel ?? 2;\n if (!Number.isInteger(logSeverityLevel) || logSeverityLevel < 0 || logSeverityLevel > 4) {\n throw new Error(`log serverity level is not valid: ${logSeverityLevel}`);\n }\n const logVerbosityLevel = sessionOptions.logVerbosityLevel ?? 0;\n if (!Number.isInteger(logVerbosityLevel) || logVerbosityLevel < 0 || logVerbosityLevel > 4) {\n throw new Error(`log verbosity level is not valid: ${logVerbosityLevel}`);\n }\n const optimizedModelFilePathOffset = typeof sessionOptions.optimizedModelFilePath === "string" ? allocWasmString(sessionOptions.optimizedModelFilePath, allocs) : 0;\n sessionOptionsHandle = wasm2._OrtCreateSessionOptions(\n graphOptimizationLevel,\n !!sessionOptions.enableCpuMemArena,\n !!sessionOptions.enableMemPattern,\n executionMode,\n !!sessionOptions.enableProfiling,\n 0,\n logIdDataOffset,\n logSeverityLevel,\n logVerbosityLevel,\n optimizedModelFilePathOffset\n );\n if (sessionOptionsHandle === 0) {\n checkLastError("Can\'t create session options.");\n }\n if (sessionOptions.executionProviders) {\n setExecutionProviders(sessionOptionsHandle, sessionOptions.executionProviders, allocs);\n }\n if (sessionOptions.enableGraphCapture !== void 0) {\n if (typeof sessionOptions.enableGraphCapture !== "boolean") {\n throw new Error(`enableGraphCapture must be a boolean value: ${sessionOptions.enableGraphCapture}`);\n }\n const keyDataOffset = allocWasmString("enableGraphCapture", allocs);\n const valueDataOffset = allocWasmString(sessionOptions.enableGraphCapture.toString(), allocs);\n if (wasm2._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(\n `Can\'t set a session config entry: \'enableGraphCapture\' - ${sessionOptions.enableGraphCapture}.`\n );\n }\n }\n if (sessionOptions.freeDimensionOverrides) {\n for (const [name, value] of Object.entries(sessionOptions.freeDimensionOverrides)) {\n if (typeof name !== "string") {\n throw new Error(`free dimension override name must be a string: ${name}`);\n }\n if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {\n throw new Error(`free dimension override value must be a non-negative integer: ${value}`);\n }\n const nameOffset = allocWasmString(name, allocs);\n if (wasm2._OrtAddFreeDimensionOverride(sessionOptionsHandle, nameOffset, value) !== 0) {\n checkLastError(`Can\'t set a free dimension override: ${name} - ${value}.`);\n }\n }\n }\n if (sessionOptions.extra !== void 0) {\n iterateExtraOptions(sessionOptions.extra, "", /* @__PURE__ */ new WeakSet(), (key, value) => {\n const keyDataOffset = allocWasmString(key, allocs);\n const valueDataOffset = allocWasmString(value, allocs);\n if (wasm2._OrtAddSessionConfigEntry(sessionOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {\n checkLastError(`Can\'t set a session config entry: ${key} - ${value}.`);\n }\n });\n }\n return [sessionOptionsHandle, allocs];\n } catch (e) {\n if (sessionOptionsHandle !== 0) {\n wasm2._OrtReleaseSessionOptions(sessionOptionsHandle);\n }\n allocs.forEach((alloc) => wasm2._free(alloc));\n throw e;\n }\n };\n\n // web/lib/wasm/wasm-core-impl.ts\n init_wasm_common();\n\n // web/lib/wasm/wasm-utils-load-file.ts\n init_fs();\n\n // nodejs-ignore:node:fs/promises\n var readFile2 = void 0;\n\n // web/lib/wasm/wasm-utils-load-file.ts\n var loadFile = async (file) => {\n if (typeof file === "string") {\n if (typeof process !== "undefined" && process.versions && process.versions.node) {\n try {\n return new Uint8Array(await readFile2(file));\n } catch (e) {\n if (e.code === "ERR_FS_FILE_TOO_LARGE") {\n const stream = createReadStream(file);\n const chunks = [];\n for await (const chunk of stream) {\n chunks.push(chunk);\n }\n return new Uint8Array(Buffer.concat(chunks));\n }\n throw e;\n }\n } else {\n const response = await fetch(file);\n if (!response.ok) {\n throw new Error(`failed to load external data file: ${file}`);\n }\n const contentLengthHeader = response.headers.get("Content-Length");\n const fileSize = contentLengthHeader ? parseInt(contentLengthHeader, 10) : 0;\n if (fileSize < 1073741824) {\n return new Uint8Array(await response.arrayBuffer());\n } else {\n if (!response.body) {\n throw new Error(`failed to load external data file: ${file}, no response body.`);\n }\n const reader = response.body.getReader();\n let buffer;\n try {\n buffer = new ArrayBuffer(fileSize);\n } catch (e) {\n if (e instanceof RangeError) {\n const pages = Math.ceil(fileSize / 65536);\n buffer = new WebAssembly.Memory({ initial: pages, maximum: pages }).buffer;\n } else {\n throw e;\n }\n }\n let offset = 0;\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n const chunkSize = value.byteLength;\n const chunk = new Uint8Array(buffer, offset, chunkSize);\n chunk.set(value);\n offset += chunkSize;\n }\n return new Uint8Array(buffer, 0, fileSize);\n }\n }\n } else if (file instanceof Blob) {\n return new Uint8Array(await file.arrayBuffer());\n } else if (file instanceof Uint8Array) {\n return file;\n } else {\n return new Uint8Array(file);\n }\n };\n\n // web/lib/wasm/wasm-core-impl.ts\n var initOrt = (numThreads, loggingLevel) => {\n const errorCode = getInstance()._OrtInit(numThreads, loggingLevel);\n if (errorCode !== 0) {\n checkLastError("Can\'t initialize onnxruntime.");\n }\n };\n var initRuntime = async (env3) => {\n initOrt(env3.wasm.numThreads, logLevelStringToEnum(env3.logLevel));\n };\n var initEp = async (env3, epName) => {\n if (true) {\n const initJsep = (init_init(), __toCommonJS(init_exports)).init;\n if (epName === "webgpu") {\n if (typeof navigator === "undefined" || !navigator.gpu) {\n throw new Error("WebGPU is not supported in current environment");\n }\n let adapter = env3.webgpu.adapter;\n if (!adapter) {\n const powerPreference = env3.webgpu.powerPreference;\n if (powerPreference !== void 0 && powerPreference !== "low-power" && powerPreference !== "high-performance") {\n throw new Error(`Invalid powerPreference setting: "${powerPreference}"`);\n }\n const forceFallbackAdapter = env3.webgpu.forceFallbackAdapter;\n if (forceFallbackAdapter !== void 0 && typeof forceFallbackAdapter !== "boolean") {\n throw new Error(`Invalid forceFallbackAdapter setting: "${forceFallbackAdapter}"`);\n }\n adapter = await navigator.gpu.requestAdapter({ powerPreference, forceFallbackAdapter });\n if (!adapter) {\n throw new Error(\n \'Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.\'\n );\n }\n } else {\n if (typeof adapter.limits !== "object" || typeof adapter.features !== "object" || typeof adapter.requestDevice !== "function") {\n throw new Error("Invalid GPU adapter set in `env.webgpu.adapter`. It must be a GPUAdapter object.");\n }\n }\n if (!env3.wasm.simd) {\n throw new Error(\n "Not supported for WebGPU=ON and SIMD=OFF. Please set `env.wasm.simd` to true when using `webgpu` EP"\n );\n }\n await initJsep("webgpu", getInstance(), env3, adapter);\n }\n if (epName === "webnn") {\n if (typeof navigator === "undefined" || !navigator.ml) {\n throw new Error("WebNN is not supported in current environment");\n }\n await initJsep("webnn", getInstance(), env3);\n }\n }\n };\n var activeSessions = /* @__PURE__ */ new Map();\n var getSessionInputOutputCount = (sessionHandle) => {\n const wasm2 = getInstance();\n const stack = wasm2.stackSave();\n try {\n const dataOffset = wasm2.stackAlloc(8);\n const errorCode = wasm2._OrtGetInputOutputCount(sessionHandle, dataOffset, dataOffset + 4);\n if (errorCode !== 0) {\n checkLastError("Can\'t get session input/output count.");\n }\n return [wasm2.HEAP32[dataOffset / 4], wasm2.HEAP32[dataOffset / 4 + 1]];\n } finally {\n wasm2.stackRestore(stack);\n }\n };\n var copyFromExternalBuffer = (model) => {\n const wasm2 = getInstance();\n const modelDataOffset = wasm2._malloc(model.byteLength);\n if (modelDataOffset === 0) {\n throw new Error(`Can\'t create a session. failed to allocate a buffer of size ${model.byteLength}.`);\n }\n wasm2.HEAPU8.set(model, modelDataOffset);\n return [modelDataOffset, model.byteLength];\n };\n var createSession = async (modelData, options) => {\n let modelDataOffset, modelDataLength;\n const wasm2 = getInstance();\n if (Array.isArray(modelData)) {\n [modelDataOffset, modelDataLength] = modelData;\n } else if (modelData.buffer === wasm2.HEAPU8.buffer) {\n [modelDataOffset, modelDataLength] = [modelData.byteOffset, modelData.byteLength];\n } else {\n [modelDataOffset, modelDataLength] = copyFromExternalBuffer(modelData);\n }\n let sessionHandle = 0;\n let sessionOptionsHandle = 0;\n let ioBindingHandle = 0;\n let allocs = [];\n const inputNamesUTF8Encoded = [];\n const outputNamesUTF8Encoded = [];\n try {\n [sessionOptionsHandle, allocs] = setSessionOptions(options);\n if (options?.externalData && wasm2.mountExternalData) {\n const loadingPromises = [];\n for (const file of options.externalData) {\n const path = typeof file === "string" ? file : file.path;\n loadingPromises.push(loadFile(typeof file === "string" ? file : file.data).then((data) => {\n wasm2.mountExternalData(path, data);\n }));\n }\n await Promise.all(loadingPromises);\n }\n sessionHandle = await wasm2._OrtCreateSession(modelDataOffset, modelDataLength, sessionOptionsHandle);\n if (sessionHandle === 0) {\n checkLastError("Can\'t create a session.");\n }\n const [inputCount, outputCount] = getSessionInputOutputCount(sessionHandle);\n const enableGraphCapture = !!options?.enableGraphCapture;\n const inputNames = [];\n const outputNames = [];\n const outputPreferredLocations = [];\n for (let i = 0; i < inputCount; i++) {\n const name = wasm2._OrtGetInputName(sessionHandle, i);\n if (name === 0) {\n checkLastError("Can\'t get an input name.");\n }\n inputNamesUTF8Encoded.push(name);\n inputNames.push(wasm2.UTF8ToString(name));\n }\n for (let i = 0; i < outputCount; i++) {\n const name = wasm2._OrtGetOutputName(sessionHandle, i);\n if (name === 0) {\n checkLastError("Can\'t get an output name.");\n }\n outputNamesUTF8Encoded.push(name);\n const nameString = wasm2.UTF8ToString(name);\n outputNames.push(nameString);\n if (true) {\n if (enableGraphCapture && options?.preferredOutputLocation === void 0) {\n outputPreferredLocations.push("gpu-buffer");\n continue;\n }\n const location = typeof options?.preferredOutputLocation === "string" ? options.preferredOutputLocation : options?.preferredOutputLocation?.[nameString] ?? "cpu";\n if (location !== "cpu" && location !== "cpu-pinned" && location !== "gpu-buffer") {\n throw new Error(`Not supported preferred output location: ${location}.`);\n }\n if (enableGraphCapture && location !== "gpu-buffer") {\n throw new Error(`Not supported preferred output location: ${location}. Only \'gpu-buffer\' location is supported when enableGraphCapture is true.`);\n }\n outputPreferredLocations.push(location);\n }\n }\n let bindingState = null;\n if (outputPreferredLocations.some((l) => l === "gpu-buffer")) {\n ioBindingHandle = wasm2._OrtCreateBinding(sessionHandle);\n if (ioBindingHandle === 0) {\n checkLastError("Can\'t create IO binding.");\n }\n bindingState = {\n handle: ioBindingHandle,\n outputPreferredLocations,\n outputPreferredLocationsEncoded: outputPreferredLocations.map((l) => dataLocationStringToEnum(l))\n };\n }\n activeSessions.set(\n sessionHandle,\n [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, bindingState, enableGraphCapture, false]\n );\n return [sessionHandle, inputNames, outputNames];\n } catch (e) {\n inputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n outputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n if (ioBindingHandle !== 0) {\n wasm2._OrtReleaseBinding(ioBindingHandle);\n }\n if (sessionHandle !== 0) {\n wasm2._OrtReleaseSession(sessionHandle);\n }\n throw e;\n } finally {\n wasm2._free(modelDataOffset);\n if (sessionOptionsHandle !== 0) {\n wasm2._OrtReleaseSessionOptions(sessionOptionsHandle);\n }\n allocs.forEach((alloc) => wasm2._free(alloc));\n wasm2.unmountExternalData?.();\n }\n };\n var releaseSession = (sessionId) => {\n const wasm2 = getInstance();\n const session = activeSessions.get(sessionId);\n if (!session) {\n throw new Error(`cannot release session. invalid session id: ${sessionId}`);\n }\n const [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture] = session;\n if (ioBindingState) {\n if (enableGraphCapture) {\n wasm2._OrtClearBoundOutputs(ioBindingState.handle);\n }\n wasm2._OrtReleaseBinding(ioBindingState.handle);\n }\n wasm2.jsepOnReleaseSession?.(sessionId);\n inputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n outputNamesUTF8Encoded.forEach((buf) => wasm2._OrtFree(buf));\n wasm2._OrtReleaseSession(sessionHandle);\n activeSessions.delete(sessionId);\n };\n var prepareInputOutputTensor = (tensor, tensorHandles, allocs, sessionId, index, enableGraphCapture = false) => {\n if (!tensor) {\n tensorHandles.push(0);\n return;\n }\n const wasm2 = getInstance();\n const dataType = tensor[0];\n const dims = tensor[1];\n const location = tensor[3];\n let rawData;\n let dataByteLength;\n if (dataType === "string" && location === "gpu-buffer") {\n throw new Error("String tensor is not supported on GPU.");\n }\n if (enableGraphCapture && location !== "gpu-buffer") {\n throw new Error(\n `External buffer must be provided for input/output index ${index} when enableGraphCapture is true.`\n );\n }\n if (location === "gpu-buffer") {\n const gpuBuffer = tensor[2].gpuBuffer;\n const elementSizeInBytes = getTensorElementSize(tensorDataTypeStringToEnum(dataType));\n dataByteLength = dims.reduce((a, b) => a * b, 1) * elementSizeInBytes;\n const registerBuffer = wasm2.jsepRegisterBuffer;\n if (!registerBuffer) {\n throw new Error(\'Tensor location "gpu-buffer" is not supported without using WebGPU.\');\n }\n rawData = registerBuffer(sessionId, index, gpuBuffer, dataByteLength);\n } else {\n const data = tensor[2];\n if (Array.isArray(data)) {\n dataByteLength = 4 * data.length;\n rawData = wasm2._malloc(dataByteLength);\n allocs.push(rawData);\n let dataIndex = rawData / 4;\n for (let i = 0; i < data.length; i++) {\n if (typeof data[i] !== "string") {\n throw new TypeError(`tensor data at index ${i} is not a string`);\n }\n wasm2.HEAPU32[dataIndex++] = allocWasmString(data[i], allocs);\n }\n } else {\n dataByteLength = data.byteLength;\n rawData = wasm2._malloc(dataByteLength);\n allocs.push(rawData);\n wasm2.HEAPU8.set(new Uint8Array(data.buffer, data.byteOffset, dataByteLength), rawData);\n }\n }\n const stack = wasm2.stackSave();\n const dimsOffset = wasm2.stackAlloc(4 * dims.length);\n try {\n let dimIndex = dimsOffset / 4;\n dims.forEach((d) => wasm2.HEAP32[dimIndex++] = d);\n const tensor2 = wasm2._OrtCreateTensor(\n tensorDataTypeStringToEnum(dataType),\n rawData,\n dataByteLength,\n dimsOffset,\n dims.length,\n dataLocationStringToEnum(location)\n );\n if (tensor2 === 0) {\n checkLastError(`Can\'t create tensor for input/output. session=${sessionId}, index=${index}.`);\n }\n tensorHandles.push(tensor2);\n } finally {\n wasm2.stackRestore(stack);\n }\n };\n var run = async (sessionId, inputIndices, inputTensors, outputIndices, outputTensors, options) => {\n const wasm2 = getInstance();\n const session = activeSessions.get(sessionId);\n if (!session) {\n throw new Error(`cannot run inference. invalid session id: ${sessionId}`);\n }\n const sessionHandle = session[0];\n const inputNamesUTF8Encoded = session[1];\n const outputNamesUTF8Encoded = session[2];\n const ioBindingState = session[3];\n const enableGraphCapture = session[4];\n const inputOutputBound = session[5];\n const inputCount = inputIndices.length;\n const outputCount = outputIndices.length;\n let runOptionsHandle = 0;\n let runOptionsAllocs = [];\n const inputTensorHandles = [];\n const outputTensorHandles = [];\n const inputOutputAllocs = [];\n const beforeRunStack = wasm2.stackSave();\n const inputValuesOffset = wasm2.stackAlloc(inputCount * 4);\n const inputNamesOffset = wasm2.stackAlloc(inputCount * 4);\n const outputValuesOffset = wasm2.stackAlloc(outputCount * 4);\n const outputNamesOffset = wasm2.stackAlloc(outputCount * 4);\n try {\n [runOptionsHandle, runOptionsAllocs] = setRunOptions(options);\n for (let i = 0; i < inputCount; i++) {\n prepareInputOutputTensor(\n inputTensors[i],\n inputTensorHandles,\n inputOutputAllocs,\n sessionId,\n inputIndices[i],\n enableGraphCapture\n );\n }\n for (let i = 0; i < outputCount; i++) {\n prepareInputOutputTensor(\n outputTensors[i],\n outputTensorHandles,\n inputOutputAllocs,\n sessionId,\n inputCount + outputIndices[i],\n enableGraphCapture\n );\n }\n let inputValuesIndex = inputValuesOffset / 4;\n let inputNamesIndex = inputNamesOffset / 4;\n let outputValuesIndex = outputValuesOffset / 4;\n let outputNamesIndex = outputNamesOffset / 4;\n for (let i = 0; i < inputCount; i++) {\n wasm2.HEAPU32[inputValuesIndex++] = inputTensorHandles[i];\n wasm2.HEAPU32[inputNamesIndex++] = inputNamesUTF8Encoded[inputIndices[i]];\n }\n for (let i = 0; i < outputCount; i++) {\n wasm2.HEAPU32[outputValuesIndex++] = outputTensorHandles[i];\n wasm2.HEAPU32[outputNamesIndex++] = outputNamesUTF8Encoded[outputIndices[i]];\n }\n if (ioBindingState && !inputOutputBound) {\n const { handle, outputPreferredLocations, outputPreferredLocationsEncoded } = ioBindingState;\n if (inputNamesUTF8Encoded.length !== inputCount) {\n throw new Error(`input count from feeds (${inputCount}) is expected to be always equal to model\'s input count (${inputNamesUTF8Encoded.length}).`);\n }\n for (let i = 0; i < inputCount; i++) {\n const index = inputIndices[i];\n const errorCode2 = await wasm2._OrtBindInput(handle, inputNamesUTF8Encoded[index], inputTensorHandles[i]);\n if (errorCode2 !== 0) {\n checkLastError(`Can\'t bind input[${i}] for session=${sessionId}.`);\n }\n }\n for (let i = 0; i < outputCount; i++) {\n const index = outputIndices[i];\n const location = outputTensors[i]?.[3];\n if (location) {\n const errorCode2 = wasm2._OrtBindOutput(handle, outputNamesUTF8Encoded[index], outputTensorHandles[i], 0);\n if (errorCode2 !== 0) {\n checkLastError(`Can\'t bind pre-allocated output[${i}] for session=${sessionId}.`);\n }\n } else {\n const errorCode2 = wasm2._OrtBindOutput(handle, outputNamesUTF8Encoded[index], 0, outputPreferredLocationsEncoded[index]);\n if (errorCode2 !== 0) {\n checkLastError(`Can\'t bind output[${i}] to ${outputPreferredLocations[i]} for session=${sessionId}.`);\n }\n }\n }\n activeSessions.set(\n sessionId,\n [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture, true]\n );\n }\n wasm2.jsepOnRunStart?.(sessionHandle);\n let errorCode;\n if (ioBindingState) {\n errorCode = await wasm2._OrtRunWithBinding(\n sessionHandle,\n ioBindingState.handle,\n outputCount,\n outputValuesOffset,\n runOptionsHandle\n );\n } else {\n errorCode = await wasm2._OrtRun(\n sessionHandle,\n inputNamesOffset,\n inputValuesOffset,\n inputCount,\n outputNamesOffset,\n outputCount,\n outputValuesOffset,\n runOptionsHandle\n );\n }\n if (errorCode !== 0) {\n checkLastError("failed to call OrtRun().");\n }\n const output = [];\n for (let i = 0; i < outputCount; i++) {\n const tensor = wasm2.HEAPU32[outputValuesOffset / 4 + i];\n if (tensor === outputTensorHandles[i]) {\n output.push(outputTensors[i]);\n continue;\n }\n const beforeGetTensorDataStack = wasm2.stackSave();\n const tensorDataOffset = wasm2.stackAlloc(4 * 4);\n let keepOutputTensor = false;\n let type, dataOffset = 0;\n try {\n const errorCode2 = wasm2._OrtGetTensorData(\n tensor,\n tensorDataOffset,\n tensorDataOffset + 4,\n tensorDataOffset + 8,\n tensorDataOffset + 12\n );\n if (errorCode2 !== 0) {\n checkLastError(`Can\'t access output tensor data on index ${i}.`);\n }\n let tensorDataIndex = tensorDataOffset / 4;\n const dataType = wasm2.HEAPU32[tensorDataIndex++];\n dataOffset = wasm2.HEAPU32[tensorDataIndex++];\n const dimsOffset = wasm2.HEAPU32[tensorDataIndex++];\n const dimsLength = wasm2.HEAPU32[tensorDataIndex++];\n const dims = [];\n for (let i2 = 0; i2 < dimsLength; i2++) {\n dims.push(wasm2.HEAPU32[dimsOffset / 4 + i2]);\n }\n wasm2._OrtFree(dimsOffset);\n const size = dims.reduce((a, b) => a * b, 1);\n type = tensorDataTypeEnumToString(dataType);\n const preferredLocation = ioBindingState?.outputPreferredLocations[outputIndices[i]];\n if (type === "string") {\n if (preferredLocation === "gpu-buffer") {\n throw new Error("String tensor is not supported on GPU.");\n }\n const stringData = [];\n let dataIndex = dataOffset / 4;\n for (let i2 = 0; i2 < size; i2++) {\n const offset = wasm2.HEAPU32[dataIndex++];\n const maxBytesToRead = i2 === size - 1 ? void 0 : wasm2.HEAPU32[dataIndex] - offset;\n stringData.push(wasm2.UTF8ToString(offset, maxBytesToRead));\n }\n output.push([type, dims, stringData, "cpu"]);\n } else {\n if (preferredLocation === "gpu-buffer" && size > 0) {\n const getBuffer = wasm2.jsepGetBuffer;\n if (!getBuffer) {\n throw new Error(\'preferredLocation "gpu-buffer" is not supported without using WebGPU.\');\n }\n const gpuBuffer = getBuffer(dataOffset);\n const elementSize = getTensorElementSize(dataType);\n if (elementSize === void 0 || !isGpuBufferSupportedType(type)) {\n throw new Error(`Unsupported data type: ${type}`);\n }\n keepOutputTensor = true;\n output.push([\n type,\n dims,\n {\n gpuBuffer,\n download: wasm2.jsepCreateDownloader(gpuBuffer, size * elementSize, type),\n dispose: () => {\n wasm2._OrtReleaseTensor(tensor);\n }\n },\n "gpu-buffer"\n ]);\n } else {\n const typedArrayConstructor = tensorTypeToTypedArrayConstructor(type);\n const data = new typedArrayConstructor(size);\n new Uint8Array(data.buffer, data.byteOffset, data.byteLength).set(wasm2.HEAPU8.subarray(dataOffset, dataOffset + data.byteLength));\n output.push([type, dims, data, "cpu"]);\n }\n }\n } finally {\n wasm2.stackRestore(beforeGetTensorDataStack);\n if (type === "string" && dataOffset) {\n wasm2._free(dataOffset);\n }\n if (!keepOutputTensor) {\n wasm2._OrtReleaseTensor(tensor);\n }\n }\n }\n if (ioBindingState && !enableGraphCapture) {\n wasm2._OrtClearBoundOutputs(ioBindingState.handle);\n activeSessions.set(\n sessionId,\n [sessionHandle, inputNamesUTF8Encoded, outputNamesUTF8Encoded, ioBindingState, enableGraphCapture, false]\n );\n }\n return output;\n } finally {\n wasm2.stackRestore(beforeRunStack);\n inputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v));\n outputTensorHandles.forEach((v) => wasm2._OrtReleaseTensor(v));\n inputOutputAllocs.forEach((p) => wasm2._free(p));\n if (runOptionsHandle !== 0) {\n wasm2._OrtReleaseRunOptions(runOptionsHandle);\n }\n runOptionsAllocs.forEach((p) => wasm2._free(p));\n }\n };\n var endProfiling = (sessionId) => {\n const wasm2 = getInstance();\n const session = activeSessions.get(sessionId);\n if (!session) {\n throw new Error("invalid session id");\n }\n const sessionHandle = session[0];\n const profileFileName = wasm2._OrtEndProfiling(sessionHandle);\n if (profileFileName === 0) {\n checkLastError("Can\'t get an profile file name.");\n }\n wasm2._OrtFree(profileFileName);\n };\n var extractTransferableBuffers = (tensors) => {\n const buffers = [];\n for (const tensor of tensors) {\n const data = tensor[2];\n if (!Array.isArray(data) && "buffer" in data) {\n buffers.push(data.buffer);\n }\n }\n return buffers;\n };\n\n // web/lib/wasm/proxy-worker/main.ts\n self.onmessage = (ev) => {\n const { type, in: message } = ev.data;\n try {\n switch (type) {\n case "init-wasm":\n initializeWebAssembly(message.wasm).then(\n () => {\n initRuntime(message).then(\n () => {\n postMessage({ type });\n },\n (err) => {\n postMessage({ type, err });\n }\n );\n },\n (err) => {\n postMessage({ type, err });\n }\n );\n break;\n case "init-ep": {\n const { epName, env: env3 } = message;\n initEp(env3, epName).then(\n () => {\n postMessage({ type });\n },\n (err) => {\n postMessage({ type, err });\n }\n );\n break;\n }\n case "copy-from": {\n const { buffer } = message;\n const bufferData = copyFromExternalBuffer(buffer);\n postMessage({ type, out: bufferData });\n break;\n }\n case "create": {\n const { model, options } = message;\n createSession(model, options).then(\n (sessionMetadata) => {\n postMessage({ type, out: sessionMetadata });\n },\n (err) => {\n postMessage({ type, err });\n }\n );\n break;\n }\n case "release":\n releaseSession(message);\n postMessage({ type });\n break;\n case "run": {\n const { sessionId, inputIndices, inputs, outputIndices, options } = message;\n run(sessionId, inputIndices, inputs, outputIndices, new Array(outputIndices.length).fill(null), options).then(\n (outputs) => {\n if (outputs.some((o) => o[3] !== "cpu")) {\n postMessage({ type, err: "Proxy does not support non-cpu tensor location." });\n } else {\n postMessage(\n { type, out: outputs },\n extractTransferableBuffers([...inputs, ...outputs])\n );\n }\n },\n (err) => {\n postMessage({ type, err });\n }\n );\n break;\n }\n case "end-profiling":\n endProfiling(message);\n postMessage({ type });\n break;\n default:\n }\n } catch (err) {\n postMessage({ type, err });\n }\n };\n})();\n/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZWpzLWlnbm9yZTpmcyIsICJub2RlanMtaWdub3JlOnBhdGgiLCAiLi4vLi4vbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS1zaW1kLmpzZXAuanMiLCAibm9kZWpzLWlnbm9yZTp3b3JrZXJfdGhyZWFkcyIsICJub2RlanMtaWdub3JlOnBlcmZfaG9va3MiLCAibm9kZWpzLWlnbm9yZTpvcyIsICIuLi8uLi9saWIvd2FzbS9iaW5kaW5nL29ydC13YXNtLXNpbWQtdGhyZWFkZWQuanNlcC5qcyIsICIuLi8uLi9saWIvd2FzbS9iaW5kaW5nL29ydC13YXNtLXRocmVhZGVkLndvcmtlci5qcyIsICIuLi8uLi9saWIvd2FzbS93YXNtLWNvbW1vbi50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL2JhY2tlbmQtaW1wbC50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL2JhY2tlbmQudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi92ZXJzaW9uLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvZW52LWltcGwudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi9lbnYudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90ZW5zb3ItY29udmVyc2lvbi1pbXBsLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdGVuc29yLWZhY3RvcnktaW1wbC50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RlbnNvci1pbXBsLXR5cGUtbWFwcGluZy50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RlbnNvci11dGlscy1pbXBsLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdGVuc29yLWltcGwudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90ZW5zb3IudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90cmFjZS50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL2luZmVyZW5jZS1zZXNzaW9uLWltcGwudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi9pbmZlcmVuY2Utc2Vzc2lvbi50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RlbnNvci1jb252ZXJzaW9uLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdGVuc29yLWZhY3RvcnkudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi9vbm54LW1vZGVsLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvb25ueC12YWx1ZS50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RyYWluaW5nLXNlc3Npb24taW1wbC50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RyYWluaW5nLXNlc3Npb24udHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi9pbmRleC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL2xvZy50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3RlbnNvci12aWV3LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L3R5cGVzLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L2dwdS1kYXRhLW1hbmFnZXIudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvdXRpbC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvY29tbW9uLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy90cmFuc3Bvc2UudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3JlZHVjZS1zaGFyZWQudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3JlZHVjZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvYXJnbWlubWF4LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9jb25jYXQudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2F0dGVudGlvbi50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvYmF0Y2gtbm9ybS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvYmlhcy1hZGQudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3VuYXJ5LW9wLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9iaWFzLXNwbGl0LWdlbHUudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2JpbmFyeS1vcC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvZnVzZS11dGlscy50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L2FjdGl2YXRpb25fdXRpbC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L2NvbnZfdXRpbC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L21hdG11bF9wYWNrZWRfd2ViZ3B1LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy8zcmQtcGFydHkvY29udjJkX21tX3dlYmdwdS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvY29udi1ncm91cGVkLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9tYXRtdWwudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2NvbnYudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzLzNyZC1wYXJ0eS9jb252X2JhY2twcm9wX21tX3dlYmdwdS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L2NvbnZfYmFja3Byb3Bfd2ViZ3B1LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9jb252LXRyYW5zcG9zZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvY3Vtc3VtLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9kZXB0aC10by1zcGFjZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvZWluc3VtLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9leHBhbmQudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2Zhc3QtZ2VsdS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvZ2F0aGVyLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9nYXRoZXItZWxlbWVudHMudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2dlbW0udHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2luc3RhbmNlLW5vcm0udHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2xheWVyLW5vcm0udHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL21hdG11bG5iaXRzLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9tdWx0aWhlYWQtYXR0ZW50aWlvbi50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvcGFkLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9wb29sLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9yYW5nZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvcmVzaXplLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9yb3RhcnktZW1iZWRkaW5nLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9za2lwLWxheWVyLW5vcm0udHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3NsaWNlLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9zb2Z0bWF4LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9zcGxpdC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvdGlsZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvd2hlcmUudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3AtcmVzb2x2ZS1ydWxlcy50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9wcm9ncmFtLW1hbmFnZXIudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC9iYWNrZW5kLXdlYmdwdS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL2luaXQudHMiLCAibm9kZWpzLWlnbm9yZTpub2RlOnBhdGgiLCAiLi4vLi4vbGliL3dhc20vd2FzbS1mYWN0b3J5LnRzIiwgIi4uLy4uL2xpYi93YXNtL3dhc20tdXRpbHMudHMiLCAiLi4vLi4vbGliL3dhc20vcnVuLW9wdGlvbnMudHMiLCAiLi4vLi4vbGliL3dhc20vc2Vzc2lvbi1vcHRpb25zLnRzIiwgIi4uLy4uL2xpYi93YXNtL3dhc20tY29yZS1pbXBsLnRzIiwgIi4uLy4uL2xpYi93YXNtL3dhc20tdXRpbHMtbG9hZC1maWxlLnRzIiwgIm5vZGVqcy1pZ25vcmU6bm9kZTpmcy9wcm9taXNlcyIsICIuLi8uLi9saWIvd2FzbS9wcm94eS13b3JrZXIvbWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IGNvbnN0IHJlYWRGaWxlID0gdW5kZWZpbmVkO2V4cG9ydCBjb25zdCByZWFkRmlsZVN5bmMgPSB1bmRlZmluZWQ7ZXhwb3J0IGNvbnN0IGNyZWF0ZVJlYWRTdHJlYW0gPSB1bmRlZmluZWQ7IiwgImV4cG9ydCBjb25zdCBqb2luID0gdW5kZWZpbmVkOyIsICJcbnZhciBvcnRXYXNtID0gKCgpID0+IHtcbiAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0Py5zcmMgOiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSAhPSAndW5kZWZpbmVkJykgX3NjcmlwdERpciB8fD0gX19maWxlbmFtZTtcbiAgcmV0dXJuIChcbmZ1bmN0aW9uKG1vZHVsZUFyZyA9IHt9KSB7XG5cbnZhciBnPW1vZHVsZUFyZyxhYSxiYSxyZWFkeVByb21pc2U9bmV3IFByb21pc2UoKGEsYik9PnthYT1hO2JhPWJ9KTtcInVzZSBzdHJpY3RcIjtnLm1vdW50RXh0ZXJuYWxEYXRhPShhLGIpPT57KGcuUGh8fChnLlBoPW5ldyBNYXApKS5zZXQoYSxiKX07Zy51bm1vdW50RXh0ZXJuYWxEYXRhPSgpPT57ZGVsZXRlIGcuUGh9O1xubGV0IGRhPSgpPT57Y29uc3QgYT0oYyxkLGUpPT4oLi4uZik9Pntjb25zdCBoPXQsaz1kPy4oKTtmPWMoLi4uZik7Y29uc3QgbD1kPy4oKTtrIT09bCYmKGM9bCxlKGspLGQ9ZT1udWxsKTtyZXR1cm4gdCE9aD9jYSgpOmZ9LGI9Yz0+YXN5bmMoLi4uZCk9Pnt0cnl7aWYoZy5PaCl0aHJvdyBFcnJvcihcIlNlc3Npb24gYWxyZWFkeSBzdGFydGVkXCIpO2NvbnN0IGU9Zy5PaD17Z2k6ZFswXSxlcnJvcnM6W119LGY9YXdhaXQgYyguLi5kKTtpZihnLk9oIT09ZSl0aHJvdyBFcnJvcihcIlNlc3Npb24gbWlzbWF0Y2hcIik7Zy5VaD8uZmx1c2goKTtjb25zdCBoPWUuZXJyb3JzO2lmKDA8aC5sZW5ndGgpe2xldCBrPWF3YWl0IFByb21pc2UuYWxsKGgpO2s9ay5maWx0ZXIobD0+bCk7aWYoMDxrLmxlbmd0aCl0aHJvdyBFcnJvcihrLmpvaW4oXCJcXG5cIikpO31yZXR1cm4gZn1maW5hbGx5e2cuT2g9bnVsbH19O2cuX09ydENyZWF0ZVNlc3Npb249YShnLl9PcnRDcmVhdGVTZXNzaW9uLCgpPT5nLl9PcnRDcmVhdGVTZXNzaW9uLFxuYz0+Zy5fT3J0Q3JlYXRlU2Vzc2lvbj1jKTtnLl9PcnRSdW49YihhKGcuX09ydFJ1biwoKT0+Zy5fT3J0UnVuLGM9PmcuX09ydFJ1bj1jKSk7Zy5fT3J0UnVuV2l0aEJpbmRpbmc9YihhKGcuX09ydFJ1bldpdGhCaW5kaW5nLCgpPT5nLl9PcnRSdW5XaXRoQmluZGluZyxjPT5nLl9PcnRSdW5XaXRoQmluZGluZz1jKSk7Zy5fT3J0QmluZElucHV0PWEoZy5fT3J0QmluZElucHV0LCgpPT5nLl9PcnRCaW5kSW5wdXQsYz0+Zy5fT3J0QmluZElucHV0PWMpO2RhPXZvaWQgMH07XG5nLmpzZXBJbml0PShhLGIpPT57ZGE/LigpO2lmKFwid2ViZ3B1XCI9PT1hKXtbZy5VaCxnLlpoLGcuY2ksZy5WaCxnLmJpLGcuamUsZy5kaSxnLmZpLGcuJGgsZy5haSxnLmVpXT1iO2NvbnN0IGM9Zy5VaDtnLmpzZXBSZWdpc3RlckJ1ZmZlcj0oZCxlLGYsaCk9PmMucmVnaXN0ZXJCdWZmZXIoZCxlLGYsaCk7Zy5qc2VwR2V0QnVmZmVyPWQ9PmMuZ2V0QnVmZmVyKGQpO2cuanNlcENyZWF0ZURvd25sb2FkZXI9KGQsZSxmKT0+Yy5jcmVhdGVEb3dubG9hZGVyKGQsZSxmKTtnLmpzZXBPblJlbGVhc2VTZXNzaW9uPWQ9PntjLm9uUmVsZWFzZVNlc3Npb24oZCl9O2cuanNlcE9uUnVuU3RhcnQ9ZD0+Yy5vblJ1blN0YXJ0KGQpfX07XG52YXIgZWE9T2JqZWN0LmFzc2lnbih7fSxnKSxmYT1cIi4vdGhpcy5wcm9ncmFtXCIsaGE9KGEsYik9Pnt0aHJvdyBiO30saWE9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyxqYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpbXBvcnRTY3JpcHRzLGthPVwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcIm9iamVjdFwiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyYmXCJzdHJpbmdcIj09dHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSx2PVwiXCIsbGEsbWEsbmE7XG5pZihrYSl7dmFyIGZzPXJlcXVpcmUoXCJmc1wiKSxvYT1yZXF1aXJlKFwicGF0aFwiKTt2PWphP29hLmRpcm5hbWUodikrXCIvXCI6X19kaXJuYW1lK1wiL1wiO2xhPShhLGIpPT57YT1wYShhKT9uZXcgVVJMKGEpOm9hLm5vcm1hbGl6ZShhKTtyZXR1cm4gZnMucmVhZEZpbGVTeW5jKGEsYj92b2lkIDA6XCJ1dGY4XCIpfTtuYT1hPT57YT1sYShhLCEwKTthLmJ1ZmZlcnx8KGE9bmV3IFVpbnQ4QXJyYXkoYSkpO3JldHVybiBhfTttYT0oYSxiLGMsZD0hMCk9PnthPXBhKGEpP25ldyBVUkwoYSk6b2Eubm9ybWFsaXplKGEpO2ZzLnJlYWRGaWxlKGEsZD92b2lkIDA6XCJ1dGY4XCIsKGUsZik9PntlP2MoZSk6YihkP2YuYnVmZmVyOmYpfSl9OyFnLnRoaXNQcm9ncmFtJiYxPHByb2Nlc3MuYXJndi5sZW5ndGgmJihmYT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFxcXC9nLFwiL1wiKSk7cHJvY2Vzcy5hcmd2LnNsaWNlKDIpO2hhPShhLGIpPT57cHJvY2Vzcy5leGl0Q29kZT1hO3Rocm93IGI7fX1lbHNlIGlmKGlhfHxcbmphKWphP3Y9c2VsZi5sb2NhdGlvbi5ocmVmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKHY9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLF9zY3JpcHREaXImJih2PV9zY3JpcHREaXIpLHYuc3RhcnRzV2l0aChcImJsb2I6XCIpP3Y9XCJcIjp2PXYuc3Vic3RyKDAsdi5yZXBsYWNlKC9bPyNdLiovLFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSsxKSxsYT1hPT57dmFyIGI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Iub3BlbihcIkdFVFwiLGEsITEpO2Iuc2VuZChudWxsKTtyZXR1cm4gYi5yZXNwb25zZVRleHR9LGphJiYobmE9YT0+e3ZhciBiPW5ldyBYTUxIdHRwUmVxdWVzdDtiLm9wZW4oXCJHRVRcIixhLCExKTtiLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCI7Yi5zZW5kKG51bGwpO3JldHVybiBuZXcgVWludDhBcnJheShiLnJlc3BvbnNlKX0pLG1hPShhLGIsYyk9Pnt2YXIgZD1uZXcgWE1MSHR0cFJlcXVlc3Q7ZC5vcGVuKFwiR0VUXCIsYSwhMCk7ZC5yZXNwb25zZVR5cGU9XG5cImFycmF5YnVmZmVyXCI7ZC5vbmxvYWQ9KCk9PnsyMDA9PWQuc3RhdHVzfHwwPT1kLnN0YXR1cyYmZC5yZXNwb25zZT9iKGQucmVzcG9uc2UpOmMoKX07ZC5vbmVycm9yPWM7ZC5zZW5kKG51bGwpfTt2YXIgcWE9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx3PWNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGcsZWEpO2VhPW51bGw7dmFyIHJhLHg9ITEsc2EseixFLHRhLHVhLEcsSSx2YSx3YSx4YSx5YTtcbmZ1bmN0aW9uIHphKCl7dmFyIGE9cmEuYnVmZmVyO2cuSEVBUDg9ej1uZXcgSW50OEFycmF5KGEpO2cuSEVBUDE2PXRhPW5ldyBJbnQxNkFycmF5KGEpO2cuSEVBUFU4PUU9bmV3IFVpbnQ4QXJyYXkoYSk7Zy5IRUFQVTE2PXVhPW5ldyBVaW50MTZBcnJheShhKTtnLkhFQVAzMj1HPW5ldyBJbnQzMkFycmF5KGEpO2cuSEVBUFUzMj1JPW5ldyBVaW50MzJBcnJheShhKTtnLkhFQVBGMzI9dmE9bmV3IEZsb2F0MzJBcnJheShhKTtnLkhFQVBGNjQ9eWE9bmV3IEZsb2F0NjRBcnJheShhKTtnLkhFQVA2ND13YT1uZXcgQmlnSW50NjRBcnJheShhKTtnLkhFQVBVNjQ9eGE9bmV3IEJpZ1VpbnQ2NEFycmF5KGEpfXZhciBBYT1bXSxCYT1bXSxDYT1bXSxEYT0wLEVhPW51bGwsRmE9bnVsbDtcbmZ1bmN0aW9uIEdhKGEpe2E9XCJBYm9ydGVkKFwiK2ErXCIpXCI7dyhhKTt4PSEwO3NhPTE7YT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGErXCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCIpO2JhKGEpO3Rocm93IGE7fXZhciBIYT1hPT5hLnN0YXJ0c1dpdGgoXCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsXCIpLHBhPWE9PmEuc3RhcnRzV2l0aChcImZpbGU6Ly9cIiksSWE7SWE9XCJvcnQtd2FzbS1zaW1kLndhc21cIjtpZighSGEoSWEpKXt2YXIgSmE9SWE7SWE9Zy5sb2NhdGVGaWxlP2cubG9jYXRlRmlsZShKYSx2KTp2K0phfWZ1bmN0aW9uIEthKGEpe2lmKG5hKXJldHVybiBuYShhKTt0aHJvd1wiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIjt9XG5mdW5jdGlvbiBMYShhKXtpZihpYXx8amEpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGZldGNoJiYhcGEoYSkpcmV0dXJuIGZldGNoKGEse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oYj0+e2lmKCFiLm9rKXRocm93YGZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyR7YX0nYDtyZXR1cm4gYi5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goKCk9PkthKGEpKTtpZihtYSlyZXR1cm4gbmV3IFByb21pc2UoKGIsYyk9PnttYShhLGQ9PmIobmV3IFVpbnQ4QXJyYXkoZCkpLGMpfSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkthKGEpKX1mdW5jdGlvbiBNYShhLGIsYyl7cmV0dXJuIExhKGEpLnRoZW4oZD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZCxiKSkudGhlbihjLGQ9Pnt3KGBmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAke2R9YCk7R2EoZCl9KX1cbmZ1bmN0aW9uIE5hKGEsYil7dmFyIGM9SWE7cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fEhhKGMpfHxwYShjKXx8a2F8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGZldGNoP01hKGMsYSxiKTpmZXRjaChjLHtjcmVkZW50aWFsczpcInNhbWUtb3JpZ2luXCJ9KS50aGVuKGQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKGQsYSkudGhlbihiLGZ1bmN0aW9uKGUpe3coYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke2V9YCk7dyhcImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uXCIpO3JldHVybiBNYShjLGEsYil9KSl9XG52YXIgT2E9ezEyNjE1MDQ6KGEsYixjLGQpPT57aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGd8fCFnLlBoKXJldHVybiAxO2E9SihhPj4+MCk7YS5zdGFydHNXaXRoKFwiLi9cIikmJihhPWEuc3Vic3RyaW5nKDIpKTthPWcuUGguZ2V0KGEpO2lmKCFhKXJldHVybiAyO2I+Pj49MDtjPj4+PTA7aWYoYitjPmEuYnl0ZUxlbmd0aClyZXR1cm4gMzt0cnl7cmV0dXJuIEUuc2V0KGEuc3ViYXJyYXkoYixiK2MpLGQ+Pj4wPj4+MCksMH1jYXRjaHtyZXR1cm4gNH19LDEyNjIwMDU6KGEsYixjKT0+e2M9SihjKTtjb25zdCBkPW5ldyBVaW50OEFycmF5KGIpO2Quc2V0KEUuc3ViYXJyYXkoYT4+PjAsYStiPj4+MCkpO1wib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcIm9iamVjdFwiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyYmXCJzdHJpbmdcIj09dHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT9yZXF1aXJlKFwiZnNcIikud3JpdGVGaWxlU3luYyhjLGQpOihhPW5ldyBGaWxlKFtkXSxjLHt0eXBlOlwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJ9KSxcbmE9VVJMLmNyZWF0ZU9iamVjdFVSTChhKSx3aW5kb3cub3BlbihhLFwiX2JsYW5rXCIpKX0sMTI2MjUxMzooKT0+e2cuJGgoKX0sMTI2MjU0NDooKT0+e2cuYWkoKX0sMTI2MjU3MzooKT0+e2cuZWkoKX0sMTI2MjU5ODphPT5nLlpoKGEpLDEyNjI2MzE6YT0+Zy5jaShhKSwxMjYyNjYzOihhLGIsYyk9PntnLlZoKGEsYixjLCEwKX0sMTI2MjcwMjooYSxiLGMpPT57Zy5WaChhLGIsYyl9LDEyNjI3MzU6YT0+e2cuamUoXCJBYnNcIixhLHZvaWQgMCl9LDEyNjI3ODY6YT0+e2cuamUoXCJOZWdcIixhLHZvaWQgMCl9LDEyNjI4Mzc6YT0+e2cuamUoXCJGbG9vclwiLGEsdm9pZCAwKX0sMTI2Mjg5MDphPT57Zy5qZShcIkNlaWxcIixhLHZvaWQgMCl9LDEyNjI5NDI6YT0+e2cuamUoXCJSZWNpcHJvY2FsXCIsYSx2b2lkIDApfSwxMjYzRTM6YT0+e2cuamUoXCJTcXJ0XCIsYSx2b2lkIDApfSwxMjYzMDUyOmE9PntnLmplKFwiRXhwXCIsYSx2b2lkIDApfSwxMjYzMTAzOmE9PntnLmplKFwiRXJmXCIsYSx2b2lkIDApfSwxMjYzMTU0OmE9Plxue2cuamUoXCJTaWdtb2lkXCIsYSx2b2lkIDApfSwxMjYzMjA5OihhLGIsYyk9PntnLmplKFwiSGFyZFNpZ21vaWRcIixhLHthbHBoYTpiLGJldGE6Y30pfSwxMjYzMjg4OmE9PntnLmplKFwiTG9nXCIsYSx2b2lkIDApfSwxMjYzMzM5OmE9PntnLmplKFwiU2luXCIsYSx2b2lkIDApfSwxMjYzMzkwOmE9PntnLmplKFwiQ29zXCIsYSx2b2lkIDApfSwxMjYzNDQxOmE9PntnLmplKFwiVGFuXCIsYSx2b2lkIDApfSwxMjYzNDkyOmE9PntnLmplKFwiQXNpblwiLGEsdm9pZCAwKX0sMTI2MzU0NDphPT57Zy5qZShcIkFjb3NcIixhLHZvaWQgMCl9LDEyNjM1OTY6YT0+e2cuamUoXCJBdGFuXCIsYSx2b2lkIDApfSwxMjYzNjQ4OmE9PntnLmplKFwiU2luaFwiLGEsdm9pZCAwKX0sMTI2MzcwMDphPT57Zy5qZShcIkNvc2hcIixhLHZvaWQgMCl9LDEyNjM3NTI6YT0+e2cuamUoXCJBc2luaFwiLGEsdm9pZCAwKX0sMTI2MzgwNTphPT57Zy5qZShcIkFjb3NoXCIsYSx2b2lkIDApfSwxMjYzODU4OmE9PntnLmplKFwiQXRhbmhcIixhLHZvaWQgMCl9LFxuMTI2MzkxMTphPT57Zy5qZShcIlRhbmhcIixhLHZvaWQgMCl9LDEyNjM5NjM6YT0+e2cuamUoXCJOb3RcIixhLHZvaWQgMCl9LDEyNjQwMTQ6KGEsYixjKT0+e2cuamUoXCJDbGlwXCIsYSx7bWluOmIsbWF4OmN9KX0sMTI2NDA4MzphPT57Zy5qZShcIkNsaXBcIixhLHZvaWQgMCl9LDEyNjQxMzU6KGEsYik9PntnLmplKFwiRWx1XCIsYSx7YWxwaGE6Yn0pfSwxMjY0MTkzOmE9PntnLmplKFwiUmVsdVwiLGEsdm9pZCAwKX0sMTI2NDI0NTooYSxiKT0+e2cuamUoXCJMZWFreVJlbHVcIixhLHthbHBoYTpifSl9LDEyNjQzMDk6KGEsYik9PntnLmplKFwiVGhyZXNob2xkZWRSZWx1XCIsYSx7YWxwaGE6Yn0pfSwxMjY0Mzc5OihhLGIpPT57Zy5qZShcIkNhc3RcIixhLHt0bzpifSl9LDEyNjQ0Mzc6YT0+e2cuamUoXCJBZGRcIixhLHZvaWQgMCl9LDEyNjQ0ODg6YT0+e2cuamUoXCJTdWJcIixhLHZvaWQgMCl9LDEyNjQ1Mzk6YT0+e2cuamUoXCJNdWxcIixhLHZvaWQgMCl9LDEyNjQ1OTA6YT0+e2cuamUoXCJEaXZcIixhLHZvaWQgMCl9LFxuMTI2NDY0MTphPT57Zy5qZShcIlBvd1wiLGEsdm9pZCAwKX0sMTI2NDY5MjphPT57Zy5qZShcIkVxdWFsXCIsYSx2b2lkIDApfSwxMjY0NzQ1OmE9PntnLmplKFwiR3JlYXRlclwiLGEsdm9pZCAwKX0sMTI2NDgwMDphPT57Zy5qZShcIkdyZWF0ZXJPckVxdWFsXCIsYSx2b2lkIDApfSwxMjY0ODYyOmE9PntnLmplKFwiTGVzc1wiLGEsdm9pZCAwKX0sMTI2NDkxNDphPT57Zy5qZShcIkxlc3NPckVxdWFsXCIsYSx2b2lkIDApfSwxMjY0OTczOihhLGIsYyxkLGUpPT57Zy5qZShcIlJlZHVjZU1lYW5cIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZD4+PjAsZT4+PjApKTpbXX0pfSwxMjY1MTMyOihhLGIsYyxkLGUpPT57Zy5qZShcIlJlZHVjZU1heFwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczpkP0FycmF5LmZyb20oRy5zdWJhcnJheShkPj4+MCxlPj4+MCkpOltdfSl9LDEyNjUyOTA6KGEsYixjLGQsZSk9Plxue2cuamUoXCJSZWR1Y2VNaW5cIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZD4+PjAsZT4+PjApKTpbXX0pfSwxMjY1NDQ4OihhLGIsYyxkLGUpPT57Zy5qZShcIlJlZHVjZVByb2RcIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZD4+PjAsZT4+PjApKTpbXX0pfSwxMjY1NjA3OihhLGIsYyxkLGUpPT57Zy5qZShcIlJlZHVjZVN1bVwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczpkP0FycmF5LmZyb20oRy5zdWJhcnJheShkPj4+MCxlPj4+MCkpOltdfSl9LDEyNjU3NjU6KGEsYixjLGQsZSk9PntnLmplKFwiUmVkdWNlTDFcIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZD4+PjAsZT4+PjApKTpbXX0pfSwxMjY1OTIyOihhLGIsYyxkLGUpPT5cbntnLmplKFwiUmVkdWNlTDJcIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZD4+PjAsZT4+PjApKTpbXX0pfSwxMjY2MDc5OihhLGIsYyxkLGUpPT57Zy5qZShcIlJlZHVjZUxvZ1N1bVwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczpkP0FycmF5LmZyb20oRy5zdWJhcnJheShkPj4+MCxlPj4+MCkpOltdfSl9LDEyNjYyNDA6KGEsYixjLGQsZSk9PntnLmplKFwiUmVkdWNlU3VtU3F1YXJlXCIsYSx7a2VlcERpbXM6ISFiLG5vb3BXaXRoRW1wdHlBeGVzOiEhYyxheGVzOmQ/QXJyYXkuZnJvbShHLnN1YmFycmF5KGQ+Pj4wLGU+Pj4wKSk6W119KX0sMTI2NjQwNDooYSxiLGMsZCxlKT0+e2cuamUoXCJSZWR1Y2VMb2dTdW1FeHBcIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZD4+PjAsZT4+PjApKTpbXX0pfSwxMjY2NTY4OmE9Plxue2cuamUoXCJXaGVyZVwiLGEsdm9pZCAwKX0sMTI2NjYyMTooYSxiLGMpPT57Zy5qZShcIlRyYW5zcG9zZVwiLGEse3Blcm06Yj9BcnJheS5mcm9tKEcuc3ViYXJyYXkoYj4+PjAsYz4+PjApKTpbXX0pfSwxMjY2NzI5OihhLGIsYyxkKT0+e2cuamUoXCJEZXB0aFRvU3BhY2VcIixhLHtibG9ja3NpemU6Yixtb2RlOkooYyksZm9ybWF0OmQ/XCJOSFdDXCI6XCJOQ0hXXCJ9KX0sMTI2Njg2MjooYSxiLGMsZCk9PntnLmplKFwiRGVwdGhUb1NwYWNlXCIsYSx7YmxvY2tzaXplOmIsbW9kZTpKKGMpLGZvcm1hdDpkP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDEyNjY5OTU6KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KT0+e2cuamUoXCJDb252VHJhbnNwb3NlXCIsYSx7Zm9ybWF0Omw/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b1BhZDpiLGRpbGF0aW9uczpbY10sZ3JvdXA6ZCxrZXJuZWxTaGFwZTpbZV0scGFkczpbZixoXSxzdHJpZGVzOltrXSx3SXNDb25zdDooKT0+ISF6W20+Pj4wXSxvdXRwdXRQYWRkaW5nOm4/QXJyYXkuZnJvbShHLnN1YmFycmF5KG4+Pj5cbjAscT4+PjApKTpbXSxvdXRwdXRTaGFwZTpyP0FycmF5LmZyb20oRy5zdWJhcnJheShyPj4+MCxwPj4+MCkpOltdLGFjdGl2YXRpb246Sih1KX0pfSwxMjY3Mzk2OihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApPT57Zy5qZShcIkNvbnZUcmFuc3Bvc2VcIixhLHtmb3JtYXQ6az9cIk5IV0NcIjpcIk5DSFdcIixhdXRvUGFkOmIsZGlsYXRpb25zOkFycmF5LmZyb20oRy5zdWJhcnJheShjPj4+MCwoYz4+PjApKzI+Pj4wKSksZ3JvdXA6ZCxrZXJuZWxTaGFwZTpBcnJheS5mcm9tKEcuc3ViYXJyYXkoZT4+PjAsKGU+Pj4wKSsyPj4+MCkpLHBhZHM6QXJyYXkuZnJvbShHLnN1YmFycmF5KGY+Pj4wLChmPj4+MCkrND4+PjApKSxzdHJpZGVzOkFycmF5LmZyb20oRy5zdWJhcnJheShoPj4+MCwoaD4+PjApKzI+Pj4wKSksd0lzQ29uc3Q6KCk9PiEheltsPj4+MF0sb3V0cHV0UGFkZGluZzptP0FycmF5LmZyb20oRy5zdWJhcnJheShtPj4+MCxuPj4+MCkpOltdLG91dHB1dFNoYXBlOnE/QXJyYXkuZnJvbShHLnN1YmFycmF5KHE+Pj5cbjAscj4+PjApKTpbXSxhY3RpdmF0aW9uOkoocCl9KX0sMTI2Nzk2MTooYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUpPT57Zy5qZShcIkNvbnZUcmFuc3Bvc2VcIixhLHtmb3JtYXQ6bD9cIk5IV0NcIjpcIk5DSFdcIixhdXRvUGFkOmIsZGlsYXRpb25zOltjXSxncm91cDpkLGtlcm5lbFNoYXBlOltlXSxwYWRzOltmLGhdLHN0cmlkZXM6W2tdLHdJc0NvbnN0OigpPT4hIXpbbT4+PjBdLG91dHB1dFBhZGRpbmc6bj9BcnJheS5mcm9tKEcuc3ViYXJyYXkobj4+PjAscT4+PjApKTpbXSxvdXRwdXRTaGFwZTpyP0FycmF5LmZyb20oRy5zdWJhcnJheShyPj4+MCxwPj4+MCkpOltdLGFjdGl2YXRpb246Sih1KX0pfSwxMjY4MzYyOihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApPT57Zy5qZShcIkNvbnZUcmFuc3Bvc2VcIixhLHtmb3JtYXQ6az9cIk5IV0NcIjpcIk5DSFdcIixhdXRvUGFkOmIsZGlsYXRpb25zOkFycmF5LmZyb20oRy5zdWJhcnJheShjPj4+MCwoYz4+PjApKzI+Pj4wKSksZ3JvdXA6ZCxcbmtlcm5lbFNoYXBlOkFycmF5LmZyb20oRy5zdWJhcnJheShlPj4+MCwoZT4+PjApKzI+Pj4wKSkscGFkczpBcnJheS5mcm9tKEcuc3ViYXJyYXkoZj4+PjAsKGY+Pj4wKSs0Pj4+MCkpLHN0cmlkZXM6QXJyYXkuZnJvbShHLnN1YmFycmF5KGg+Pj4wLChoPj4+MCkrMj4+PjApKSx3SXNDb25zdDooKT0+ISF6W2w+Pj4wXSxvdXRwdXRQYWRkaW5nOm0/QXJyYXkuZnJvbShHLnN1YmFycmF5KG0+Pj4wLG4+Pj4wKSk6W10sb3V0cHV0U2hhcGU6cT9BcnJheS5mcm9tKEcuc3ViYXJyYXkocT4+PjAscj4+PjApKTpbXSxhY3RpdmF0aW9uOkoocCl9KX0sMTI2ODkyNzooYSxiKT0+e2cuamUoXCJHbG9iYWxBdmVyYWdlUG9vbFwiLGEse2Zvcm1hdDpiP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDEyNjkwMTg6KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpPT57Zy5qZShcIkF2ZXJhZ2VQb29sXCIsYSx7Zm9ybWF0Onk/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b19wYWQ6YixjZWlsX21vZGU6Yyxjb3VudF9pbmNsdWRlX3BhZDpkLFxuc3RvcmFnZV9vcmRlcjplLGRpbGF0aW9uczpbZixoXSxrZXJuZWxfc2hhcGU6W2ssbF0scGFkczpbbSxuLHEscl0sc3RyaWRlczpbcCx1XX0pfSwxMjY5MzAyOihhLGIpPT57Zy5qZShcIkdsb2JhbEF2ZXJhZ2VQb29sXCIsYSx7Zm9ybWF0OmI/XCJOSFdDXCI6XCJOQ0hXXCJ9KX0sMTI2OTM5MzooYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSk9PntnLmplKFwiQXZlcmFnZVBvb2xcIixhLHtmb3JtYXQ6eT9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGNlaWxfbW9kZTpjLGNvdW50X2luY2x1ZGVfcGFkOmQsc3RvcmFnZV9vcmRlcjplLGRpbGF0aW9uczpbZixoXSxrZXJuZWxfc2hhcGU6W2ssbF0scGFkczpbbSxuLHEscl0sc3RyaWRlczpbcCx1XX0pfSwxMjY5Njc3OihhLGIpPT57Zy5qZShcIkdsb2JhbE1heFBvb2xcIixhLHtmb3JtYXQ6Yj9cIk5IV0NcIjpcIk5DSFdcIn0pfSwxMjY5NzY0OihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KT0+e2cuamUoXCJNYXhQb29sXCIsYSx7Zm9ybWF0Onk/XG5cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGNlaWxfbW9kZTpjLGNvdW50X2luY2x1ZGVfcGFkOmQsc3RvcmFnZV9vcmRlcjplLGRpbGF0aW9uczpbZixoXSxrZXJuZWxfc2hhcGU6W2ssbF0scGFkczpbbSxuLHEscl0sc3RyaWRlczpbcCx1XX0pfSwxMjcwMDQ0OihhLGIpPT57Zy5qZShcIkdsb2JhbE1heFBvb2xcIixhLHtmb3JtYXQ6Yj9cIk5IV0NcIjpcIk5DSFdcIn0pfSwxMjcwMTMxOihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KT0+e2cuamUoXCJNYXhQb29sXCIsYSx7Zm9ybWF0Onk/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b19wYWQ6YixjZWlsX21vZGU6Yyxjb3VudF9pbmNsdWRlX3BhZDpkLHN0b3JhZ2Vfb3JkZXI6ZSxkaWxhdGlvbnM6W2YsaF0sa2VybmVsX3NoYXBlOltrLGxdLHBhZHM6W20sbixxLHJdLHN0cmlkZXM6W3AsdV19KX0sMTI3MDQxMTooYSxiLGMsZCxlKT0+e2cuamUoXCJHZW1tXCIsYSx7YWxwaGE6YixiZXRhOmMsdHJhbnNBOmQsdHJhbnNCOmV9KX0sMTI3MDUxNTphPT5cbntnLmplKFwiTWF0TXVsXCIsYSx2b2lkIDApfSwxMjcwNTY5OihhLGIsYyxkKT0+e2cuamUoXCJBcmdNYXhcIixhLHtrZWVwRGltczohIWIsc2VsZWN0TGFzdEluZGV4OiEhYyxheGlzOmR9KX0sMTI3MDY3NzooYSxiLGMsZCk9PntnLmplKFwiQXJnTWluXCIsYSx7a2VlcERpbXM6ISFiLHNlbGVjdExhc3RJbmRleDohIWMsYXhpczpkfSl9LDEyNzA3ODU6KGEsYik9PntnLmplKFwiU29mdG1heFwiLGEse2F4aXM6Yn0pfSwxMjcwODQ4OihhLGIpPT57Zy5qZShcIkNvbmNhdFwiLGEse2F4aXM6Yn0pfSwxMjcwOTA4OihhLGIsYyxkLGUpPT57Zy5qZShcIlNwbGl0XCIsYSx7YXhpczpiLG51bU91dHB1dHM6YyxzcGxpdFNpemVzOmQ/QXJyYXkuZnJvbShHLnN1YmFycmF5KGQ+Pj4wLGU+Pj4wKSk6W119KX0sMTI3MTA0ODphPT57Zy5qZShcIkV4cGFuZFwiLGEsdm9pZCAwKX0sMTI3MTEwMjooYSxiKT0+e2cuamUoXCJHYXRoZXJcIixhLHtheGlzOk51bWJlcihiKX0pfSwxMjcxMTczOihhLGIpPT57Zy5qZShcIkdhdGhlckVsZW1lbnRzXCIsXG5hLHtheGlzOk51bWJlcihiKX0pfSwxMjcxMjUyOihhLGIsYyxkLGUsZixoLGssbCxtLG4pPT57Zy5qZShcIlJlc2l6ZVwiLGEse2FudGlhbGlhczpiLGF4ZXM6Yz9BcnJheS5mcm9tKEcuc3ViYXJyYXkoYz4+PjAsZD4+PjApKTpbXSxjb29yZGluYXRlVHJhbnNmb3JtTW9kZTpKKGUpLGN1YmljQ29lZmZBOmYsZXhjbHVkZU91dHNpZGU6aCxleHRyYXBvbGF0aW9uVmFsdWU6ayxrZWVwQXNwZWN0UmF0aW9Qb2xpY3k6SihsKSxtb2RlOkoobSksbmVhcmVzdE1vZGU6SihuKX0pfSwxMjcxNTk4OihhLGIsYyxkLGUsZixoKT0+e2cuamUoXCJTbGljZVwiLGEse3N0YXJ0czpiP0FycmF5LmZyb20oRy5zdWJhcnJheShiPj4+MCxjPj4+MCkpOltdLGVuZHM6ZD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZD4+PjAsZT4+PjApKTpbXSxheGVzOmY/QXJyYXkuZnJvbShHLnN1YmFycmF5KGY+Pj4wLGg+Pj4wKSk6W119KX0sMTI3MTgxNDphPT57Zy5qZShcIlRpbGVcIixhLHZvaWQgMCl9LDEyNzE4NjY6KGEsYixcbmMsZCk9PntnLmplKFwiTGF5ZXJOb3JtYWxpemF0aW9uXCIsYSx7YXhpczpiLGVwc2lsb246YyxzaW1wbGlmaWVkOiEhZH0pfSwxMjcxOTc3OihhLGIsYyk9PntnLmplKFwiSW5zdGFuY2VOb3JtYWxpemF0aW9uXCIsYSx7ZXBzaWxvbjpiLGZvcm1hdDpjP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDEyNzIwOTE6KGEsYixjKT0+e2cuamUoXCJJbnN0YW5jZU5vcm1hbGl6YXRpb25cIixhLHtlcHNpbG9uOmIsZm9ybWF0OmM/XCJOSFdDXCI6XCJOQ0hXXCJ9KX0sMTI3MjIwNTphPT57Zy5qZShcIlJhbmdlXCIsYSx2b2lkIDApfSwxMjcyMjU4OihhLGIpPT57Zy5qZShcIkVpbnN1bVwiLGEse2VxdWF0aW9uOkooYil9KX0sMTI3MjMzOTooYSxiLGMsZCxlKT0+e2cuamUoXCJQYWRcIixhLHttb2RlOmIsdmFsdWU6YyxwYWRzOmQ/QXJyYXkuZnJvbShHLnN1YmFycmF5KGQ+Pj4wLGU+Pj4wKSk6W119KX0sMTI3MjQ2NjooYSxiLGMsZCxlLGYpPT57Zy5qZShcIkJhdGNoTm9ybWFsaXphdGlvblwiLGEse2Vwc2lsb246Yixtb21lbnR1bTpjLFxuc3BhdGlhbDohIWUsdHJhaW5pbmdNb2RlOiEhZCxmb3JtYXQ6Zj9cIk5IV0NcIjpcIk5DSFdcIn0pfSwxMjcyNjM1OihhLGIsYyxkLGUsZik9PntnLmplKFwiQmF0Y2hOb3JtYWxpemF0aW9uXCIsYSx7ZXBzaWxvbjpiLG1vbWVudHVtOmMsc3BhdGlhbDohIWUsdHJhaW5pbmdNb2RlOiEhZCxmb3JtYXQ6Zj9cIk5IV0NcIjpcIk5DSFdcIn0pfSwxMjcyODA0OihhLGIsYyk9PntnLmplKFwiQ3VtU3VtXCIsYSx7ZXhjbHVzaXZlOk51bWJlcihiKSxyZXZlcnNlOk51bWJlcihjKX0pfSwxMjcyOTAxOihhLGIsYyxkLGUsZixoLGssbCk9PntnLmplKFwiQXR0ZW50aW9uXCIsYSx7bnVtSGVhZHM6Yixpc1VuaWRpcmVjdGlvbmFsOmMsbWFza0ZpbHRlclZhbHVlOmQsc2NhbGU6ZSxkb1JvdGFyeTpmLHFrdkhpZGRlblNpemVzOmg/QXJyYXkuZnJvbShHLnN1YmFycmF5KE51bWJlcihrKT4+PjAsTnVtYmVyKGspK2g+Pj4wKSk6W10scGFzdFByZXNlbnRTaGFyZUJ1ZmZlcjohIWx9KX0sMTI3MzE3MzphPT57Zy5qZShcIkJpYXNBZGRcIixcbmEsdm9pZCAwKX0sMTI3MzIyODphPT57Zy5qZShcIkJpYXNTcGxpdEdlbHVcIixhLHZvaWQgMCl9LDEyNzMyODk6YT0+e2cuamUoXCJGYXN0R2VsdVwiLGEsdm9pZCAwKX0sMTI3MzM0NTooYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscik9PntnLmplKFwiQ29udlwiLGEse2Zvcm1hdDpsP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9fcGFkOmIsZGlsYXRpb25zOltjXSxncm91cDpkLGtlcm5lbF9zaGFwZTpbZV0scGFkczpmP0FycmF5LmZyb20oRy5zdWJhcnJheShmPj4+MCxoPj4+MCkpOltdLHN0cmlkZXM6W2tdLHdfaXNfY29uc3Q6KCk9PiEhelttPj4+MF0sYWN0aXZhdGlvbjpKKG4pLGFjdGl2YXRpb25fcGFyYW1zOnE/QXJyYXkuZnJvbSh2YS5zdWJhcnJheShxPj4+MCxyPj4+MCkpOltdfSl9LDEyNzM3MTU6KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpPT57Zy5qZShcIkNvbnZcIixhLHtmb3JtYXQ6cT9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGRpbGF0aW9uczpbYyxkXSxncm91cDplLGtlcm5lbF9zaGFwZTpbZixcbmhdLHBhZHM6az9BcnJheS5mcm9tKEcuc3ViYXJyYXkoaz4+PjAsbD4+PjApKTpbXSxzdHJpZGVzOlttLG5dLHdfaXNfY29uc3Q6KCk9PiEheltyPj4+MF0sYWN0aXZhdGlvbjpKKHApLGFjdGl2YXRpb25fcGFyYW1zOnU/QXJyYXkuZnJvbSh2YS5zdWJhcnJheSh1Pj4+MCx5Pj4+MCkpOltdfSl9LDEyNzQxMDY6YT0+e2cuamUoXCJHZWx1XCIsYSx2b2lkIDApfSwxMjc0MTU4OihhLGIsYyxkLGUsZik9PntnLmplKFwiTWF0TXVsTkJpdHNcIixhLHtrOmIsbjpjLGFjY3VyYWN5TGV2ZWw6ZCxiaXRzOmUsYmxvY2tTaXplOmZ9KX0sMTI3NDI4NTooYSxiLGMsZCxlLGYpPT57Zy5qZShcIk11bHRpSGVhZEF0dGVudGlvblwiLGEse251bUhlYWRzOmIsaXNVbmlkaXJlY3Rpb25hbDpjLG1hc2tGaWx0ZXJWYWx1ZTpkLHNjYWxlOmUsZG9Sb3Rhcnk6Zn0pfSwxMjc0NDQ0OihhLGIsYyxkLGUpPT57Zy5qZShcIlJvdGFyeUVtYmVkZGluZ1wiLGEse2ludGVybGVhdmVkOiEhYixudW1IZWFkczpjLHJvdGFyeUVtYmVkZGluZ0RpbTpkLFxuc2NhbGU6ZX0pfSwxMjc0NTgzOihhLGIsYyk9PntnLmplKFwiU2tpcExheWVyTm9ybWFsaXphdGlvblwiLGEse2Vwc2lsb246YixzaW1wbGlmaWVkOiEhY30pfSwxMjc0Njg1OihhLGIsYyk9PntnLmplKFwiU2tpcExheWVyTm9ybWFsaXphdGlvblwiLGEse2Vwc2lsb246YixzaW1wbGlmaWVkOiEhY30pfSwxMjc0Nzg3OihhLGIsYyxkKT0+e2cuamUoXCJMYXllck5vcm1hbGl6YXRpb25cIixhLHtheGlzOmIsZXBzaWxvbjpjLHNpbXBsaWZpZWQ6ISFkfSl9LDEyNzQ4OTg6YT0+e2cuZGkoYSl9LDEyNzQ5MzI6KGEsYik9PmcuZmkoYSxiLGcuT2guZ2ksZy5PaC5lcnJvcnMpfTtmdW5jdGlvbiBQYShhKXt0aGlzLm5hbWU9XCJFeGl0U3RhdHVzXCI7dGhpcy5tZXNzYWdlPWBQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCR7YX0pYDt0aGlzLnN0YXR1cz1hfXZhciBRYT1bXSxSYT0wLEw9MDtjbGFzcyBTYXtjb25zdHJ1Y3RvcihhKXt0aGlzLk5oPWE7dGhpcy5JaD1hLTI0fX1cbnZhciBaYT1hPT57dmFyIGI9TDtpZighYilyZXR1cm4gVGEoMCksMDt2YXIgYz1uZXcgU2EoYik7SVtjLkloKzE2Pj4+Mj4+PjBdPWI7dmFyIGQ9SVtjLkloKzQ+Pj4yPj4+MF07aWYoIWQpcmV0dXJuIFRhKDApLGI7Zm9yKHZhciBlIGluIGEpe3ZhciBmPWFbZV07aWYoMD09PWZ8fGY9PT1kKWJyZWFrO2lmKFVhKGYsZCxjLkloKzE2KSlyZXR1cm4gVGEoZiksYn1UYShkKTtyZXR1cm4gYn0sJGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFRleHREZWNvZGVyP25ldyBUZXh0RGVjb2RlcihcInV0ZjhcIik6dm9pZCAwLGFiPShhLGIsYyk9PntiPj4+PTA7dmFyIGQ9YitjO2ZvcihjPWI7YVtjXSYmIShjPj1kKTspKytjO2lmKDE2PGMtYiYmYS5idWZmZXImJiRhKXJldHVybiAkYS5kZWNvZGUoYS5zdWJhcnJheShiLGMpKTtmb3IoZD1cIlwiO2I8Yzspe3ZhciBlPWFbYisrXTtpZihlJjEyOCl7dmFyIGY9YVtiKytdJjYzO2lmKDE5Mj09KGUmMjI0KSlkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChlJjMxKTw8XG42fGYpO2Vsc2V7dmFyIGg9YVtiKytdJjYzO2U9MjI0PT0oZSYyNDApPyhlJjE1KTw8MTJ8Zjw8NnxoOihlJjcpPDwxOHxmPDwxMnxoPDw2fGFbYisrXSY2Mzs2NTUzNj5lP2QrPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk6KGUtPTY1NTM2LGQrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8ZT4+MTAsNTYzMjB8ZSYxMDIzKSl9fWVsc2UgZCs9U3RyaW5nLmZyb21DaGFyQ29kZShlKX1yZXR1cm4gZH0sSj0oYSxiKT0+KGE+Pj49MCk/YWIoRSxhLGIpOlwiXCIsYmI9YT0+e2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoOysrYyl7dmFyIGQ9YS5jaGFyQ29kZUF0KGMpOzEyNz49ZD9iKys6MjA0Nz49ZD9iKz0yOjU1Mjk2PD1kJiY1NzM0Mz49ZD8oYis9NCwrK2MpOmIrPTN9cmV0dXJuIGJ9LE09KGEsYixjLGQpPT57Yz4+Pj0wO2lmKCEoMDxkKSlyZXR1cm4gMDt2YXIgZT1jO2Q9YytkLTE7Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDsrK2Ype3ZhciBoPWEuY2hhckNvZGVBdChmKTtpZig1NTI5Njw9XG5oJiY1NzM0Mz49aCl7dmFyIGs9YS5jaGFyQ29kZUF0KCsrZik7aD02NTUzNisoKGgmMTAyMyk8PDEwKXxrJjEwMjN9aWYoMTI3Pj1oKXtpZihjPj1kKWJyZWFrO2JbYysrPj4+MF09aH1lbHNle2lmKDIwNDc+PWgpe2lmKGMrMT49ZClicmVhaztiW2MrKz4+PjBdPTE5MnxoPj42fWVsc2V7aWYoNjU1MzU+PWgpe2lmKGMrMj49ZClicmVhaztiW2MrKz4+PjBdPTIyNHxoPj4xMn1lbHNle2lmKGMrMz49ZClicmVhaztiW2MrKz4+PjBdPTI0MHxoPj4xODtiW2MrKz4+PjBdPTEyOHxoPj4xMiY2M31iW2MrKz4+PjBdPTEyOHxoPj42JjYzfWJbYysrPj4+MF09MTI4fGgmNjN9fWJbYz4+PjBdPTA7cmV0dXJuIGMtZX0sY2IsTj1hPT57Zm9yKHZhciBiPVwiXCI7RVthPj4+MF07KWIrPWNiW0VbYSsrPj4+MF1dO3JldHVybiBifSxkYj17fSxlYj17fSxmYj17fSxPO1xuZnVuY3Rpb24gZ2IoYSxiLGM9e30pe3ZhciBkPWIubmFtZTtpZighYSl0aHJvdyBuZXcgTyhgdHlwZSBcIiR7ZH1cIiBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHR5cGVpZCBwb2ludGVyYCk7aWYoZWIuaGFzT3duUHJvcGVydHkoYSkpe2lmKGMuWGgpcmV0dXJuO3Rocm93IG5ldyBPKGBDYW5ub3QgcmVnaXN0ZXIgdHlwZSAnJHtkfScgdHdpY2VgKTt9ZWJbYV09YjtkZWxldGUgZmJbYV07ZGIuaGFzT3duUHJvcGVydHkoYSkmJihiPWRiW2FdLGRlbGV0ZSBkYlthXSxiLmZvckVhY2goZT0+ZSgpKSl9ZnVuY3Rpb24gUChhLGIsYz17fSl7aWYoIShcImFyZ1BhY2tBZHZhbmNlXCJpbiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVnaXN0ZXJUeXBlIHJlZ2lzdGVyZWRJbnN0YW5jZSByZXF1aXJlcyBhcmdQYWNrQWR2YW5jZVwiKTtyZXR1cm4gZ2IoYSxiLGMpfVxudmFyIGhiPShhLGIsYyk9Pntzd2l0Y2goYil7Y2FzZSAxOnJldHVybiBjP2Q9PnpbZD4+PjBdOmQ9PkVbZD4+PjBdO2Nhc2UgMjpyZXR1cm4gYz9kPT50YVtkPj4+MT4+PjBdOmQ9PnVhW2Q+Pj4xPj4+MF07Y2FzZSA0OnJldHVybiBjP2Q9PkdbZD4+PjI+Pj4wXTpkPT5JW2Q+Pj4yPj4+MF07Y2FzZSA4OnJldHVybiBjP2Q9PndhW2Q+Pj4zXTpkPT54YVtkPj4+M107ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIGludGVnZXIgd2lkdGggKCR7Yn0pOiAke2F9YCk7fX0saWI9W10sUT1bXTtmdW5jdGlvbiBqYihhKXthPj4+PTA7OTxhJiYwPT09LS1RW2ErMV0mJihRW2FdPXZvaWQgMCxpYi5wdXNoKGEpKX1cbnZhciBSPWE9PntpZighYSl0aHJvdyBuZXcgTyhcIkNhbm5vdCB1c2UgZGVsZXRlZCB2YWwuIGhhbmRsZSA9IFwiK2EpO3JldHVybiBRW2FdfSxTPWE9Pntzd2l0Y2goYSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDI7Y2FzZSBudWxsOnJldHVybiA0O2Nhc2UgITA6cmV0dXJuIDY7Y2FzZSAhMTpyZXR1cm4gODtkZWZhdWx0OmNvbnN0IGI9aWIucG9wKCl8fFEubGVuZ3RoO1FbYl09YTtRW2IrMV09MTtyZXR1cm4gYn19O2Z1bmN0aW9uIGtiKGEpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShJW2E+Pj4yPj4+MF0pfVxudmFyIGxiPXtuYW1lOlwiZW1zY3JpcHRlbjo6dmFsXCIsZnJvbVdpcmVUeXBlOmE9Pnt2YXIgYj1SKGEpO2piKGEpO3JldHVybiBifSx0b1dpcmVUeXBlOihhLGIpPT5TKGIpLGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6a2IsTWg6bnVsbH0sbWI9KGEsYik9Pntzd2l0Y2goYil7Y2FzZSA0OnJldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUodmFbYz4+PjI+Pj4wXSl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHlhW2M+Pj4zPj4+MF0pfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmxvYXQgd2lkdGggKCR7Yn0pOiAke2F9YCk7fX0sbmI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFRleHREZWNvZGVyP25ldyBUZXh0RGVjb2RlcihcInV0Zi0xNmxlXCIpOnZvaWQgMCxvYj0oYSxiKT0+e3ZhciBjPWE+PjE7Zm9yKHZhciBkPWMrYi8yOyEoYz49ZCkmJnVhW2M+Pj4wXTspKytjO1xuYzw8PTE7aWYoMzI8Yy1hJiZuYilyZXR1cm4gbmIuZGVjb2RlKEUuc3ViYXJyYXkoYT4+PjAsYz4+PjApKTtjPVwiXCI7Zm9yKGQ9MDshKGQ+PWIvMik7KytkKXt2YXIgZT10YVthKzIqZD4+PjE+Pj4wXTtpZigwPT1lKWJyZWFrO2MrPVN0cmluZy5mcm9tQ2hhckNvZGUoZSl9cmV0dXJuIGN9LHBiPShhLGIsYyk9PntjPz89MjE0NzQ4MzY0NztpZigyPmMpcmV0dXJuIDA7Yy09Mjt2YXIgZD1iO2M9YzwyKmEubGVuZ3RoP2MvMjphLmxlbmd0aDtmb3IodmFyIGU9MDtlPGM7KytlKXRhW2I+Pj4xPj4+MF09YS5jaGFyQ29kZUF0KGUpLGIrPTI7dGFbYj4+PjE+Pj4wXT0wO3JldHVybiBiLWR9LHFiPWE9PjIqYS5sZW5ndGgscmI9KGEsYik9Pntmb3IodmFyIGM9MCxkPVwiXCI7IShjPj1iLzQpOyl7dmFyIGU9R1thKzQqYz4+PjI+Pj4wXTtpZigwPT1lKWJyZWFrOysrYzs2NTUzNjw9ZT8oZS09NjU1MzYsZCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxlPj4xMCw1NjMyMHxlJjEwMjMpKTpkKz1cblN0cmluZy5mcm9tQ2hhckNvZGUoZSl9cmV0dXJuIGR9LHNiPShhLGIsYyk9PntiPj4+PTA7Yz8/PTIxNDc0ODM2NDc7aWYoND5jKXJldHVybiAwO3ZhciBkPWI7Yz1kK2MtNDtmb3IodmFyIGU9MDtlPGEubGVuZ3RoOysrZSl7dmFyIGY9YS5jaGFyQ29kZUF0KGUpO2lmKDU1Mjk2PD1mJiY1NzM0Mz49Zil7dmFyIGg9YS5jaGFyQ29kZUF0KCsrZSk7Zj02NTUzNisoKGYmMTAyMyk8PDEwKXxoJjEwMjN9R1tiPj4+Mj4+PjBdPWY7Yis9NDtpZihiKzQ+YylicmVha31HW2I+Pj4yPj4+MF09MDtyZXR1cm4gYi1kfSx0Yj1hPT57Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7KytjKXt2YXIgZD1hLmNoYXJDb2RlQXQoYyk7NTUyOTY8PWQmJjU3MzQzPj1kJiYrK2M7Yis9NH1yZXR1cm4gYn0sdmI9KGEsYik9Pnt2YXIgYz1lYlthXTtpZih2b2lkIDA9PT1jKXRocm93IGE9dWIoYSksYz1OKGEpLFQoYSksbmV3IE8oYCR7Yn0gaGFzIHVua25vd24gdHlwZSAke2N9YCk7cmV0dXJuIGN9LHdiPVxuKGEsYixjKT0+e3ZhciBkPVtdO2E9YS50b1dpcmVUeXBlKGQsYyk7ZC5sZW5ndGgmJihJW2I+Pj4yPj4+MF09UyhkKSk7cmV0dXJuIGF9LHhiPWE9Pnt0cnl7YSgpfWNhdGNoKGIpe0dhKGIpfX0seWI9YT0+e2lmKCF4KXRyeXthKCk7dHJ5e3NhPXNhPWE9c2EsZy5vbkV4aXQ/LihhKSx4PSEwLGhhKGEsbmV3IFBhKGEpKX1jYXRjaChiKXtiIGluc3RhbmNlb2YgUGF8fFwidW53aW5kXCI9PWJ8fGhhKDEsYil9fWNhdGNoKGIpe2IgaW5zdGFuY2VvZiBQYXx8XCJ1bndpbmRcIj09Ynx8aGEoMSxiKX19O1xuZnVuY3Rpb24gemIoKXt2YXIgYT1VLGI9e307Zm9yKGxldCBbYyxkXW9mIE9iamVjdC5lbnRyaWVzKGEpKWJbY109XCJmdW5jdGlvblwiPT10eXBlb2YgZD8oLi4uZSk9PntBYi5wdXNoKGMpO3RyeXtyZXR1cm4gZCguLi5lKX1maW5hbGx5e3h8fChBYi5wb3AoKSx0JiYxPT09ViYmMD09PUFiLmxlbmd0aCYmKFY9MCx4YihCYiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZpYmVycyYmRmliZXJzLm1pKCkpKX19OmQ7cmV0dXJuIGJ9dmFyIFY9MCx0PW51bGwsQ2I9MCxBYj1bXSxEYj17fSxFYj17fSxGYj0wLEdiPW51bGwsSGI9W107ZnVuY3Rpb24gY2EoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsYik9PntHYj17cmVzb2x2ZTphLHJlamVjdDpifX0pfVxuZnVuY3Rpb24gSWIoKXt2YXIgYT1KYig2NTU0OCksYj1hKzEyO0lbYT4+PjI+Pj4wXT1iO0lbYSs0Pj4+Mj4+PjBdPWIrNjU1MzY7Yj1BYlswXTt2YXIgYz1EYltiXTt2b2lkIDA9PT1jJiYoYz1GYisrLERiW2JdPWMsRWJbY109Yik7R1thKzg+Pj4yPj4+MF09YztyZXR1cm4gYX1cbmZ1bmN0aW9uIEtiKGEpe2lmKCF4KXtpZigwPT09Vil7dmFyIGI9ITEsYz0hMTthKChkPTApPT57aWYoIXgmJihDYj1kLGI9ITAsYykpe1Y9Mjt4YigoKT0+TGIodCkpO1widW5kZWZpbmVkXCIhPXR5cGVvZiBCcm93c2VyJiZCcm93c2VyLlNoLldoJiZCcm93c2VyLlNoLnJlc3VtZSgpO2Q9ITE7dHJ5e3ZhciBlPSgwLFVbRWJbR1t0Kzg+Pj4yPj4+MF1dXSkoKX1jYXRjaChrKXtlPWssZD0hMH12YXIgZj0hMTtpZighdCl7dmFyIGg9R2I7aCYmKEdiPW51bGwsKGQ/aC5yZWplY3Q6aC5yZXNvbHZlKShlKSxmPSEwKX1pZihkJiYhZil0aHJvdyBlO319KTtjPSEwO2J8fChWPTEsdD1JYigpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBCcm93c2VyJiZCcm93c2VyLlNoLldoJiZCcm93c2VyLlNoLnBhdXNlKCkseGIoKCk9Pk1iKHQpKSl9ZWxzZSAyPT09Vj8oVj0wLHhiKE5iKSxUKHQpLHQ9bnVsbCxIYi5mb3JFYWNoKHliKSk6R2EoYGludmFsaWQgc3RhdGU6ICR7Vn1gKTtyZXR1cm4gQ2J9fVxuZnVuY3Rpb24gT2IoYSl7cmV0dXJuIEtiKGI9PnthKCkudGhlbihiKX0pfXZhciBQYj1bXSxRYj17fSxSYj1hPT57dmFyIGI9UWJbYV07cmV0dXJuIHZvaWQgMD09PWI/TihhKTpifSxTYj0oKT0+XCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksVGI9YT0+e3ZhciBiPVBiLmxlbmd0aDtQYi5wdXNoKGEpO3JldHVybiBifSxVYj0oYSxiKT0+e2Zvcih2YXIgYz1BcnJheShhKSxkPTA7ZDxhOysrZCljW2RdPXZiKElbYis0KmQ+Pj4yPj4+MF0sXCJwYXJhbWV0ZXIgXCIrZCk7cmV0dXJuIGN9LFZiPShhLGIpPT5PYmplY3QuZGVmaW5lUHJvcGVydHkoYixcIm5hbWVcIix7dmFsdWU6YX0pO1xuZnVuY3Rpb24gV2IoYSl7dmFyIGI9RnVuY3Rpb247aWYoIShiIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoYG5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAke3R5cGVvZiBifSB3aGljaCBpcyBub3QgYSBmdW5jdGlvbmApO3ZhciBjPVZiKGIubmFtZXx8XCJ1bmtub3duRnVuY3Rpb25OYW1lXCIsZnVuY3Rpb24oKXt9KTtjLnByb3RvdHlwZT1iLnByb3RvdHlwZTtjPW5ldyBjO2E9Yi5hcHBseShjLGEpO3JldHVybiBhIGluc3RhbmNlb2YgT2JqZWN0P2E6Y31cbnZhciBXPWE9PjA9PT1hJTQmJigwIT09YSUxMDB8fDA9PT1hJTQwMCksWGI9WzAsMzEsNjAsOTEsMTIxLDE1MiwxODIsMjEzLDI0NCwyNzQsMzA1LDMzNV0sWWI9WzAsMzEsNTksOTAsMTIwLDE1MSwxODEsMjEyLDI0MywyNzMsMzA0LDMzNF0sWmI9W10sJGI9KGEsYik9PntaYi5sZW5ndGg9MDtmb3IodmFyIGM7Yz1FW2ErKz4+PjBdOyl7dmFyIGQ9MTA1IT1jO2QmPTExMiE9YztiKz1kJiZiJTg/NDowO1piLnB1c2goMTEyPT1jP0lbYj4+PjI+Pj4wXToxMDY9PWM/d2FbYj4+PjNdOjEwNT09Yz9HW2I+Pj4yPj4+MF06eWFbYj4+PjM+Pj4wXSk7Yis9ZD84OjR9cmV0dXJuIFpifSxhYz17fSxjYz0oKT0+e2lmKCFiYyl7dmFyIGE9e1VTRVI6XCJ3ZWJfdXNlclwiLExPR05BTUU6XCJ3ZWJfdXNlclwiLFBBVEg6XCIvXCIsUFdEOlwiL1wiLEhPTUU6XCIvaG9tZS93ZWJfdXNlclwiLExBTkc6KFwib2JqZWN0XCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fFxuXCJDXCIpLnJlcGxhY2UoXCItXCIsXCJfXCIpK1wiLlVURi04XCIsXzpmYXx8XCIuL3RoaXMucHJvZ3JhbVwifSxiO2ZvcihiIGluIGFjKXZvaWQgMD09PWFjW2JdP2RlbGV0ZSBhW2JdOmFbYl09YWNbYl07dmFyIGM9W107Zm9yKGIgaW4gYSljLnB1c2goYCR7Yn09JHthW2JdfWApO2JjPWN9cmV0dXJuIGJjfSxiYyxkYz1bbnVsbCxbXSxbXV0sZWM9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxmYz1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO2Z1bmN0aW9uIGdjKGEpe3ZhciBiPUFycmF5KGJiKGEpKzEpO00oYSxiLDAsYi5sZW5ndGgpO3JldHVybiBifVxuZnVuY3Rpb24gaGMoYSxiLGMsZCl7ZnVuY3Rpb24gZShwLHUseSl7Zm9yKHA9XCJudW1iZXJcIj09dHlwZW9mIHA/cC50b1N0cmluZygpOnB8fFwiXCI7cC5sZW5ndGg8dTspcD15WzBdK3A7cmV0dXJuIHB9ZnVuY3Rpb24gZihwLHUpe3JldHVybiBlKHAsdSxcIjBcIil9ZnVuY3Rpb24gaChwLHUpe2Z1bmN0aW9uIHkoQil7cmV0dXJuIDA+Qj8tMTowPEI/MTowfXZhciBBOzA9PT0oQT15KHAuZ2V0RnVsbFllYXIoKS11LmdldEZ1bGxZZWFyKCkpKSYmMD09PShBPXkocC5nZXRNb250aCgpLXUuZ2V0TW9udGgoKSkpJiYoQT15KHAuZ2V0RGF0ZSgpLXUuZ2V0RGF0ZSgpKSk7cmV0dXJuIEF9ZnVuY3Rpb24gayhwKXtzd2l0Y2gocC5nZXREYXkoKSl7Y2FzZSAwOnJldHVybiBuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCktMSwxMSwyOSk7Y2FzZSAxOnJldHVybiBwO2Nhc2UgMjpyZXR1cm4gbmV3IERhdGUocC5nZXRGdWxsWWVhcigpLDAsMyk7Y2FzZSAzOnJldHVybiBuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCksXG4wLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUocC5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIGwocCl7dmFyIHU9cC5LaDtmb3IocD1uZXcgRGF0ZSgobmV3IERhdGUocC5MaCsxOTAwLDAsMSkpLmdldFRpbWUoKSk7MDx1Oyl7dmFyIHk9cC5nZXRNb250aCgpLEE9KFcocC5nZXRGdWxsWWVhcigpKT9lYzpmYylbeV07aWYodT5BLXAuZ2V0RGF0ZSgpKXUtPUEtcC5nZXREYXRlKCkrMSxwLnNldERhdGUoMSksMTE+eT9wLnNldE1vbnRoKHkrMSk6KHAuc2V0TW9udGgoMCkscC5zZXRGdWxsWWVhcihwLmdldEZ1bGxZZWFyKCkrMSkpO2Vsc2V7cC5zZXREYXRlKHAuZ2V0RGF0ZSgpK3UpO2JyZWFrfX15PW5ldyBEYXRlKHAuZ2V0RnVsbFllYXIoKSsxLDAsNCk7dT1rKG5ldyBEYXRlKHAuZ2V0RnVsbFllYXIoKSxcbjAsNCkpO3k9ayh5KTtyZXR1cm4gMD49aCh1LHApPzA+PWgoeSxwKT9wLmdldEZ1bGxZZWFyKCkrMTpwLmdldEZ1bGxZZWFyKCk6cC5nZXRGdWxsWWVhcigpLTF9YT4+Pj0wO2I+Pj49MDtjPj4+PTA7ZD4+Pj0wO3ZhciBtPUlbZCs0MD4+PjI+Pj4wXTtkPXtqaTpHW2Q+Pj4yPj4+MF0saWk6R1tkKzQ+Pj4yPj4+MF0sUWg6R1tkKzg+Pj4yPj4+MF0sVGg6R1tkKzEyPj4+Mj4+PjBdLFJoOkdbZCsxNj4+PjI+Pj4wXSxMaDpHW2QrMjA+Pj4yPj4+MF0sSmg6R1tkKzI0Pj4+Mj4+PjBdLEtoOkdbZCsyOD4+PjI+Pj4wXSxsaTpHW2QrMzI+Pj4yPj4+MF0saGk6R1tkKzM2Pj4+Mj4+PjBdLGtpOm0/SihtKTpcIlwifTtjPUooYyk7bT17XCIlY1wiOlwiJWEgJWIgJWQgJUg6JU06JVMgJVlcIixcIiVEXCI6XCIlbS8lZC8leVwiLFwiJUZcIjpcIiVZLSVtLSVkXCIsXCIlaFwiOlwiJWJcIixcIiVyXCI6XCIlSTolTTolUyAlcFwiLFwiJVJcIjpcIiVIOiVNXCIsXCIlVFwiOlwiJUg6JU06JVNcIixcIiV4XCI6XCIlbS8lZC8leVwiLFwiJVhcIjpcIiVIOiVNOiVTXCIsXG5cIiVFY1wiOlwiJWNcIixcIiVFQ1wiOlwiJUNcIixcIiVFeFwiOlwiJW0vJWQvJXlcIixcIiVFWFwiOlwiJUg6JU06JVNcIixcIiVFeVwiOlwiJXlcIixcIiVFWVwiOlwiJVlcIixcIiVPZFwiOlwiJWRcIixcIiVPZVwiOlwiJWVcIixcIiVPSFwiOlwiJUhcIixcIiVPSVwiOlwiJUlcIixcIiVPbVwiOlwiJW1cIixcIiVPTVwiOlwiJU1cIixcIiVPU1wiOlwiJVNcIixcIiVPdVwiOlwiJXVcIixcIiVPVVwiOlwiJVVcIixcIiVPVlwiOlwiJVZcIixcIiVPd1wiOlwiJXdcIixcIiVPV1wiOlwiJVdcIixcIiVPeVwiOlwiJXlcIn07Zm9yKHZhciBuIGluIG0pYz1jLnJlcGxhY2UobmV3IFJlZ0V4cChuLFwiZ1wiKSxtW25dKTt2YXIgcT1cIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5XCIuc3BsaXQoXCIgXCIpLHI9XCJKYW51YXJ5IEZlYnJ1YXJ5IE1hcmNoIEFwcmlsIE1heSBKdW5lIEp1bHkgQXVndXN0IFNlcHRlbWJlciBPY3RvYmVyIE5vdmVtYmVyIERlY2VtYmVyXCIuc3BsaXQoXCIgXCIpO209e1wiJWFcIjpwPT5xW3AuSmhdLnN1YnN0cmluZygwLDMpLFwiJUFcIjpwPT5xW3AuSmhdLFwiJWJcIjpwPT5cbnJbcC5SaF0uc3Vic3RyaW5nKDAsMyksXCIlQlwiOnA9PnJbcC5SaF0sXCIlQ1wiOnA9PmYoKHAuTGgrMTkwMCkvMTAwfDAsMiksXCIlZFwiOnA9PmYocC5UaCwyKSxcIiVlXCI6cD0+ZShwLlRoLDIsXCIgXCIpLFwiJWdcIjpwPT5sKHApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFwiJUdcIjpsLFwiJUhcIjpwPT5mKHAuUWgsMiksXCIlSVwiOnA9PntwPXAuUWg7MD09cD9wPTEyOjEyPHAmJihwLT0xMik7cmV0dXJuIGYocCwyKX0sXCIlalwiOnA9Pntmb3IodmFyIHU9MCx5PTA7eTw9cC5SaC0xO3UrPShXKHAuTGgrMTkwMCk/ZWM6ZmMpW3krK10pO3JldHVybiBmKHAuVGgrdSwzKX0sXCIlbVwiOnA9PmYocC5SaCsxLDIpLFwiJU1cIjpwPT5mKHAuaWksMiksXCIlblwiOigpPT5cIlxcblwiLFwiJXBcIjpwPT4wPD1wLlFoJiYxMj5wLlFoP1wiQU1cIjpcIlBNXCIsXCIlU1wiOnA9PmYocC5qaSwyKSxcIiV0XCI6KCk9PlwiXFx0XCIsXCIldVwiOnA9PnAuSmh8fDcsXCIlVVwiOnA9PmYoTWF0aC5mbG9vcigocC5LaCs3LXAuSmgpLzcpLDIpLFwiJVZcIjpwPT57dmFyIHU9XG5NYXRoLmZsb29yKChwLktoKzctKHAuSmgrNiklNykvNyk7Mj49KHAuSmgrMzcxLXAuS2gtMiklNyYmdSsrO2lmKHUpNTM9PXUmJih5PShwLkpoKzM3MS1wLktoKSU3LDQ9PXl8fDM9PXkmJlcocC5MaCl8fCh1PTEpKTtlbHNle3U9NTI7dmFyIHk9KHAuSmgrNy1wLktoLTEpJTc7KDQ9PXl8fDU9PXkmJlcocC5MaCU0MDAtMSkpJiZ1Kyt9cmV0dXJuIGYodSwyKX0sXCIld1wiOnA9PnAuSmgsXCIlV1wiOnA9PmYoTWF0aC5mbG9vcigocC5LaCs3LShwLkpoKzYpJTcpLzcpLDIpLFwiJXlcIjpwPT4ocC5MaCsxOTAwKS50b1N0cmluZygpLnN1YnN0cmluZygyKSxcIiVZXCI6cD0+cC5MaCsxOTAwLFwiJXpcIjpwPT57cD1wLmhpO3ZhciB1PTA8PXA7cD1NYXRoLmFicyhwKS82MDtyZXR1cm4odT9cIitcIjpcIi1cIikrU3RyaW5nKFwiMDAwMFwiKyhwLzYwKjEwMCtwJTYwKSkuc2xpY2UoLTQpfSxcIiVaXCI6cD0+cC5raSxcIiUlXCI6KCk9PlwiJVwifTtjPWMucmVwbGFjZSgvJSUvZyxcIlxceDAwXFx4MDBcIik7Zm9yKG4gaW4gbSljLmluY2x1ZGVzKG4pJiZcbihjPWMucmVwbGFjZShuZXcgUmVnRXhwKG4sXCJnXCIpLG1bbl0oZCkpKTtjPWMucmVwbGFjZSgvXFwwXFwwL2csXCIlXCIpO249Z2MoYyk7aWYobi5sZW5ndGg+YilyZXR1cm4gMDt6LnNldChuLGE+Pj4wKTtyZXR1cm4gbi5sZW5ndGgtMX1mb3IodmFyIGljPUFycmF5KDI1NiksamM9MDsyNTY+amM7KytqYylpY1tqY109U3RyaW5nLmZyb21DaGFyQ29kZShqYyk7Y2I9aWM7Tz1nLkJpbmRpbmdFcnJvcj1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpO3RoaXMubmFtZT1cIkJpbmRpbmdFcnJvclwifX07Zy5JbnRlcm5hbEVycm9yPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSk7dGhpcy5uYW1lPVwiSW50ZXJuYWxFcnJvclwifX07US5wdXNoKDAsMSx2b2lkIDAsMSxudWxsLDEsITAsMSwhMSwxKTtnLmNvdW50X2VtdmFsX2hhbmRsZXM9KCk9PlEubGVuZ3RoLzItNS1pYi5sZW5ndGg7XG52YXIgQ2Y9e2JkOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gT2IoYXN5bmMoKT0+e2F3YWl0IGcuYmkoYSxiLGMpfSl9LHY6ZnVuY3Rpb24oYSl7YT1uZXcgU2EoYT4+PjApOzA9PXpbYS5JaCsxMj4+PjBdJiYoelthLkloKzEyPj4+MF09MSxSYS0tKTt6W2EuSWgrMTM+Pj4wXT0wO1FhLnB1c2goYSk7a2MoYS5OaCk7aWYobGMoSVthLkloKzQ+Pj4yPj4+MF0pKWE9SVthLk5oPj4+Mj4+PjBdO2Vsc2V7dmFyIGI9SVthLkloKzE2Pj4+Mj4+PjBdO2E9MCE9PWI/YjphLk5ofXJldHVybiBhfSxOOigpPT57WCgwLDApO3ZhciBhPVFhLnBvcCgpO21jKGEuTmgpO0w9MH0sYTpmdW5jdGlvbigpe3JldHVybiBaYShbXSl9LG06ZnVuY3Rpb24oYSl7cmV0dXJuIFphKFthPj4+MF0pfSx4OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFphKFthPj4+MCxiPj4+MF0pfSxxOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gWmEoW2E+Pj4wLGI+Pj4wLGM+Pj4wXSl9LEJiOigpPT57dmFyIGE9UWEucG9wKCk7YXx8R2EoXCJubyBleGNlcHRpb24gdG8gdGhyb3dcIik7XG52YXIgYj1hLk5oOzA9PXpbYS5JaCsxMz4+PjBdJiYoUWEucHVzaChhKSx6W2EuSWgrMTM+Pj4wXT0xLHpbYS5JaCsxMj4+PjBdPTAsUmErKyk7TD1iO3Rocm93IEw7fSxzOmZ1bmN0aW9uKGEsYixjKXthPj4+PTA7dmFyIGQ9bmV3IFNhKGEpO0lbZC5JaCsxNj4+PjI+Pj4wXT0wO0lbZC5JaCs0Pj4+Mj4+PjBdPWI+Pj4wO0lbZC5JaCs4Pj4+Mj4+PjBdPWM+Pj4wO0w9YTtSYSsrO3Rocm93IEw7fSxmYjooKT0+UmEsZzpmdW5jdGlvbihhKXtMfHw9YT4+PjA7dGhyb3cgTDt9LENiOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LCRjOmZ1bmN0aW9uKCl7fSxNYzpmdW5jdGlvbigpe30sT2M6ZnVuY3Rpb24oKXt9LEdjOmZ1bmN0aW9uKCl7cmV0dXJuIDB9LFpjOmZ1bmN0aW9uKCl7fSxVYzpmdW5jdGlvbigpe30sWWM6ZnVuY3Rpb24oKXt9LF9iOmZ1bmN0aW9uKCl7fSxOYzpmdW5jdGlvbigpe30sS2M6ZnVuY3Rpb24oKXt9LF9jOmZ1bmN0aW9uKCl7fSxMYzpmdW5jdGlvbigpe30sV2I6ZnVuY3Rpb24oYSxcbmIsYyl7Yj1OKGI+Pj4wKTtQKGE+Pj4wLHtuYW1lOmIsZnJvbVdpcmVUeXBlOmQ9PmQsdG9XaXJlVHlwZTpmdW5jdGlvbihkLGUpe2lmKFwiYmlnaW50XCIhPXR5cGVvZiBlJiZcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBudWxsPT09ZT9lPVwibnVsbFwiOihkPXR5cGVvZiBlLGU9XCJvYmplY3RcIj09PWR8fFwiYXJyYXlcIj09PWR8fFwiZnVuY3Rpb25cIj09PWQ/ZS50b1N0cmluZygpOlwiXCIrZSksbmV3IFR5cGVFcnJvcihgQ2Fubm90IGNvbnZlcnQgXCIke2V9XCIgdG8gJHt0aGlzLm5hbWV9YCk7XCJudW1iZXJcIj09dHlwZW9mIGUmJihlPUJpZ0ludChlKSk7cmV0dXJuIGV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6aGIoYixjPj4+MCwtMT09Yi5pbmRleE9mKFwidVwiKSksTWg6bnVsbH0pfSxFYzpmdW5jdGlvbihhLGIsYyxkKXtiPU4oYj4+PjApO1AoYT4+PjAse25hbWU6Yixmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuISFlfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKGUsXG5mKXtyZXR1cm4gZj9jOmR9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKEVbZT4+PjBdKX0sTWg6bnVsbH0pfSxDYzpmdW5jdGlvbihhKXtyZXR1cm4gUChhPj4+MCxsYil9LFZiOmZ1bmN0aW9uKGEsYixjKXtiPU4oYj4+PjApO1AoYT4+PjAse25hbWU6Yixmcm9tV2lyZVR5cGU6ZD0+ZCx0b1dpcmVUeXBlOihkLGUpPT5lLGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6bWIoYixjPj4+MCksTWg6bnVsbH0pfSxBYTpmdW5jdGlvbihhLGIsYyxkLGUpe2E+Pj49MDtjPj4+PTA7Yj1OKGI+Pj4wKTstMT09PWUmJihlPTQyOTQ5NjcyOTUpO2U9az0+aztpZigwPT09ZCl7dmFyIGY9MzItOCpjO2U9az0+azw8Zj4+PmZ9dmFyIGg9Yi5pbmNsdWRlcyhcInVuc2lnbmVkXCIpP2Z1bmN0aW9uKGssbCl7cmV0dXJuIGw+Pj4wfTpmdW5jdGlvbihrLGwpe3JldHVybiBsfTtQKGEse25hbWU6YixcbmZyb21XaXJlVHlwZTplLHRvV2lyZVR5cGU6aCxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmhiKGIsYywwIT09ZCksTWg6bnVsbH0pfSxfOmZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGYpe3JldHVybiBuZXcgZSh6LmJ1ZmZlcixJW2YrND4+PjI+Pj4wXSxJW2Y+Pj4yPj4+MF0pfXZhciBlPVtJbnQ4QXJyYXksVWludDhBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSxCaWdJbnQ2NEFycmF5LEJpZ1VpbnQ2NEFycmF5XVtiXTtjPU4oYz4+PjApO1AoYT4+PjAse25hbWU6Yyxmcm9tV2lyZVR5cGU6ZCxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmR9LHtYaDohMH0pfSxYYjpmdW5jdGlvbihhLGIpe2I9TihiPj4+MCk7dmFyIGM9XCJzdGQ6OnN0cmluZ1wiPT09YjtQKGE+Pj4wLHtuYW1lOmIsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKGQpe3ZhciBlPUlbZD4+PlxuMj4+PjBdLGY9ZCs0O2lmKGMpZm9yKHZhciBoPWYsaz0wO2s8PWU7KytrKXt2YXIgbD1mK2s7aWYoaz09ZXx8MD09RVtsPj4+MF0pe2g9SihoLGwtaCk7aWYodm9pZCAwPT09bSl2YXIgbT1oO2Vsc2UgbSs9U3RyaW5nLmZyb21DaGFyQ29kZSgwKSxtKz1oO2g9bCsxfX1lbHNle209QXJyYXkoZSk7Zm9yKGs9MDtrPGU7KytrKW1ba109U3RyaW5nLmZyb21DaGFyQ29kZShFW2Yraz4+PjBdKTttPW0uam9pbihcIlwiKX1UKGQpO3JldHVybiBtfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKGQsZSl7ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYoZT1uZXcgVWludDhBcnJheShlKSk7dmFyIGY9XCJzdHJpbmdcIj09dHlwZW9mIGU7aWYoIShmfHxlIGluc3RhbmNlb2YgVWludDhBcnJheXx8ZSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxlIGluc3RhbmNlb2YgSW50OEFycmF5KSl0aHJvdyBuZXcgTyhcIkNhbm5vdCBwYXNzIG5vbi1zdHJpbmcgdG8gc3RkOjpzdHJpbmdcIik7dmFyIGg9YyYmZj9iYihlKTpcbmUubGVuZ3RoO3ZhciBrPUpiKDQraCsxKSxsPWsrNDtJW2s+Pj4yPj4+MF09aDtpZihjJiZmKU0oZSxFLGwsaCsxKTtlbHNlIGlmKGYpZm9yKGY9MDtmPGg7KytmKXt2YXIgbT1lLmNoYXJDb2RlQXQoZik7aWYoMjU1PG0pdGhyb3cgVChsKSxuZXcgTyhcIlN0cmluZyBoYXMgVVRGLTE2IGNvZGUgdW5pdHMgdGhhdCBkbyBub3QgZml0IGluIDggYml0c1wiKTtFW2wrZj4+PjBdPW19ZWxzZSBmb3IoZj0wO2Y8aDsrK2YpRVtsK2Y+Pj4wXT1lW2ZdO251bGwhPT1kJiZkLnB1c2goVCxrKTtyZXR1cm4ga30sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjprYixNaChkKXtUKGQpfX0pfSxBYjpmdW5jdGlvbihhLGIsYyl7Yj4+Pj0wO2M+Pj49MDtjPU4oYyk7aWYoMj09PWIpe3ZhciBkPW9iO3ZhciBlPXBiO3ZhciBmPXFiO3ZhciBoPWs9PnVhW2s+Pj4xPj4+MF19ZWxzZSA0PT09YiYmKGQ9cmIsZT1zYixmPXRiLGg9az0+SVtrPj4+Mj4+PjBdKTtQKGE+Pj4wLHtuYW1lOmMsXG5mcm9tV2lyZVR5cGU6az0+e2Zvcih2YXIgbD1JW2s+Pj4yPj4+MF0sbSxuPWsrNCxxPTA7cTw9bDsrK3Epe3ZhciByPWsrNCtxKmI7aWYocT09bHx8MD09aChyKSluPWQobixyLW4pLHZvaWQgMD09PW0/bT1uOihtKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDApLG0rPW4pLG49citifVQoayk7cmV0dXJuIG19LHRvV2lyZVR5cGU6KGssbCk9PntpZihcInN0cmluZ1wiIT10eXBlb2YgbCl0aHJvdyBuZXcgTyhgQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBDKysgc3RyaW5nIHR5cGUgJHtjfWApO3ZhciBtPWYobCksbj1KYig0K20rYik7SVtuPj4+Mj4+PjBdPW0vYjtlKGwsbis0LG0rYik7bnVsbCE9PWsmJmsucHVzaChULG4pO3JldHVybiBufSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmtiLE1oKGspe1Qoayl9fSl9LEZjOmZ1bmN0aW9uKGEsYil7Yj1OKGI+Pj4wKTtQKGE+Pj4wLHtZaDohMCxuYW1lOmIsYXJnUGFja0FkdmFuY2U6MCxmcm9tV2lyZVR5cGU6KCk9Plxue30sdG9XaXJlVHlwZTooKT0+e319KX0sYWQ6KCk9PjEsa2Q6ZnVuY3Rpb24oYSxiLGMpe2I+Pj49MDtjPj4+PTA7YT1SKGE+Pj4wKTtiPXZiKGIsXCJlbXZhbDo6YXNcIik7cmV0dXJuIHdiKGIsYyxhKX0sQ2Q6ZnVuY3Rpb24oYSl7YT4+Pj0wO3JldHVybiBPYigoKT0+e2E9UihhKTtyZXR1cm4gYS50aGVuKFMpfSl9LHVkOmZ1bmN0aW9uKGEsYixjLGQpe2M+Pj49MDtkPj4+PTA7YT1QYlthPj4+MF07Yj1SKGI+Pj4wKTtyZXR1cm4gYShudWxsLGIsYyxkKX0saWE6ZnVuY3Rpb24oYSxiLGMsZCxlKXtjPj4+PTA7ZD4+Pj0wO2U+Pj49MDthPVBiW2E+Pj4wXTtiPVIoYj4+PjApO2M9UmIoYyk7cmV0dXJuIGEoYixiW2NdLGQsZSl9LEJjOmpiLHFkOmZ1bmN0aW9uKGEsYil7Yj4+Pj0wO2E9UihhPj4+MCk7Yj1SKGIpO3JldHVybiBhPT1ifSx6ZDpmdW5jdGlvbihhKXthPj4+PTA7aWYoMD09PWEpcmV0dXJuIFMoU2IoKSk7YT1SYihhKTtyZXR1cm4gUyhTYigpW2FdKX0saGE6ZnVuY3Rpb24oYSxcbmIsYyl7Yj1VYihhLGI+Pj4wKTt2YXIgZD1iLnNoaWZ0KCk7YS0tO3ZhciBlPVwicmV0dXJuIGZ1bmN0aW9uIChvYmosIGZ1bmMsIGRlc3RydWN0b3JzUmVmLCBhcmdzKSB7XFxuXCIsZj0wLGg9W107MD09PWMmJmgucHVzaChcIm9ialwiKTtmb3IodmFyIGs9W1wicmV0VHlwZVwiXSxsPVtkXSxtPTA7bTxhOysrbSloLnB1c2goXCJhcmdcIittKSxrLnB1c2goXCJhcmdUeXBlXCIrbSksbC5wdXNoKGJbbV0pLGUrPWAgIHZhciBhcmcke219ID0gYXJnVHlwZSR7bX0ucmVhZFZhbHVlRnJvbVBvaW50ZXIoYXJncyR7Zj9cIitcIitmOlwiXCJ9KTtcXG5gLGYrPWJbbV0uYXJnUGFja0FkdmFuY2U7ZSs9YCAgdmFyIHJ2ID0gJHsxPT09Yz9cIm5ldyBmdW5jXCI6XCJmdW5jLmNhbGxcIn0oJHtoLmpvaW4oXCIsIFwiKX0pO1xcbmA7ZC5ZaHx8KGsucHVzaChcImVtdmFsX3JldHVyblZhbHVlXCIpLGwucHVzaCh3YiksZSs9XCIgIHJldHVybiBlbXZhbF9yZXR1cm5WYWx1ZShyZXRUeXBlLCBkZXN0cnVjdG9yc1JlZiwgcnYpO1xcblwiKTtrLnB1c2goZStcblwifTtcXG5cIik7YT1XYihrKSguLi5sKTtjPWBtZXRob2RDYWxsZXI8KCR7Yi5tYXAobj0+bi5uYW1lKS5qb2luKFwiLCBcIil9KSA9PiAke2QubmFtZX0+YDtyZXR1cm4gVGIoVmIoYyxhKSl9LHlkOmZ1bmN0aW9uKGEsYil7Yj4+Pj0wO2E9UihhPj4+MCk7Yj1SKGIpO3JldHVybiBTKGFbYl0pfSxiYTpmdW5jdGlvbihhKXthPj4+PTA7OTxhJiYoUVthKzFdKz0xKX0sbWQ6ZnVuY3Rpb24oKXtyZXR1cm4gUyhbXSl9LGhkOmZ1bmN0aW9uKGEpe2E9UihhPj4+MCk7Zm9yKHZhciBiPUFycmF5KGEubGVuZ3RoKSxjPTA7YzxhLmxlbmd0aDtjKyspYltjXT1hW2NdO3JldHVybiBTKGIpfSxVOmZ1bmN0aW9uKGEpe3JldHVybiBTKFJiKGE+Pj4wKSl9LFhhOmZ1bmN0aW9uKCl7cmV0dXJuIFMoe30pfSx2ZDpmdW5jdGlvbihhKXthPj4+PTA7Zm9yKHZhciBiPVIoYSk7Yi5sZW5ndGg7KXt2YXIgYz1iLnBvcCgpO2IucG9wKCkoYyl9amIoYSl9LHNkOmZ1bmN0aW9uKGEsYixjKXtiPj4+PTA7Yz4+Pj0wO1xuYT1SKGE+Pj4wKTtiPVIoYik7Yz1SKGMpO2FbYl09Y30semI6ZnVuY3Rpb24oYSxiKXtiPj4+PTA7YT12YihhPj4+MCxcIl9lbXZhbF90YWtlX3ZhbHVlXCIpO2E9YS5yZWFkVmFsdWVGcm9tUG9pbnRlcihiKTtyZXR1cm4gUyhhKX0sUmM6ZnVuY3Rpb24oYSxiKXthPS05MDA3MTk5MjU0NzQwOTkyPmF8fDkwMDcxOTkyNTQ3NDA5OTI8YT9OYU46TnVtYmVyKGEpO2I+Pj49MDthPW5ldyBEYXRlKDFFMyphKTtHW2I+Pj4yPj4+MF09YS5nZXRVVENTZWNvbmRzKCk7R1tiKzQ+Pj4yPj4+MF09YS5nZXRVVENNaW51dGVzKCk7R1tiKzg+Pj4yPj4+MF09YS5nZXRVVENIb3VycygpO0dbYisxMj4+PjI+Pj4wXT1hLmdldFVUQ0RhdGUoKTtHW2IrMTY+Pj4yPj4+MF09YS5nZXRVVENNb250aCgpO0dbYisyMD4+PjI+Pj4wXT1hLmdldFVUQ0Z1bGxZZWFyKCktMTkwMDtHW2IrMjQ+Pj4yPj4+MF09YS5nZXRVVENEYXkoKTtHW2IrMjg+Pj4yPj4+MF09KGEuZ2V0VGltZSgpLURhdGUuVVRDKGEuZ2V0VVRDRnVsbFllYXIoKSxcbjAsMSwwLDAsMCwwKSkvODY0RTV8MH0sU2M6ZnVuY3Rpb24oYSxiKXthPS05MDA3MTk5MjU0NzQwOTkyPmF8fDkwMDcxOTkyNTQ3NDA5OTI8YT9OYU46TnVtYmVyKGEpO2I+Pj49MDthPW5ldyBEYXRlKDFFMyphKTtHW2I+Pj4yPj4+MF09YS5nZXRTZWNvbmRzKCk7R1tiKzQ+Pj4yPj4+MF09YS5nZXRNaW51dGVzKCk7R1tiKzg+Pj4yPj4+MF09YS5nZXRIb3VycygpO0dbYisxMj4+PjI+Pj4wXT1hLmdldERhdGUoKTtHW2IrMTY+Pj4yPj4+MF09YS5nZXRNb250aCgpO0dbYisyMD4+PjI+Pj4wXT1hLmdldEZ1bGxZZWFyKCktMTkwMDtHW2IrMjQ+Pj4yPj4+MF09YS5nZXREYXkoKTtHW2IrMjg+Pj4yPj4+MF09KFcoYS5nZXRGdWxsWWVhcigpKT9YYjpZYilbYS5nZXRNb250aCgpXSthLmdldERhdGUoKS0xfDA7R1tiKzM2Pj4+Mj4+PjBdPS0oNjAqYS5nZXRUaW1lem9uZU9mZnNldCgpKTt2YXIgYz0obmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLDYsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCksXG5kPShuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksMCwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtHW2IrMzI+Pj4yPj4+MF09KGMhPWQmJmEuZ2V0VGltZXpvbmVPZmZzZXQoKT09TWF0aC5taW4oZCxjKSl8MH0sVGM6ZnVuY3Rpb24oYSl7YT4+Pj0wO3ZhciBiPW5ldyBEYXRlKEdbYSsyMD4+PjI+Pj4wXSsxOTAwLEdbYSsxNj4+PjI+Pj4wXSxHW2ErMTI+Pj4yPj4+MF0sR1thKzg+Pj4yPj4+MF0sR1thKzQ+Pj4yPj4+MF0sR1thPj4+Mj4+PjBdLDApLGM9R1thKzMyPj4+Mj4+PjBdLGQ9Yi5nZXRUaW1lem9uZU9mZnNldCgpLGU9KG5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSw2LDEpKS5nZXRUaW1lem9uZU9mZnNldCgpLGY9KG5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSwwLDEpKS5nZXRUaW1lem9uZU9mZnNldCgpLGg9TWF0aC5taW4oZixlKTswPmM/R1thKzMyPj4+Mj4+PjBdPU51bWJlcihlIT1mJiZoPT1kKTowPGMhPShoPT1kKSYmKGU9TWF0aC5tYXgoZixlKSxiLnNldFRpbWUoYi5nZXRUaW1lKCkrXG42RTQqKCgwPGM/aDplKS1kKSkpO0dbYSsyND4+PjI+Pj4wXT1iLmdldERheSgpO0dbYSsyOD4+PjI+Pj4wXT0oVyhiLmdldEZ1bGxZZWFyKCkpP1hiOlliKVtiLmdldE1vbnRoKCldK2IuZ2V0RGF0ZSgpLTF8MDtHW2E+Pj4yPj4+MF09Yi5nZXRTZWNvbmRzKCk7R1thKzQ+Pj4yPj4+MF09Yi5nZXRNaW51dGVzKCk7R1thKzg+Pj4yPj4+MF09Yi5nZXRIb3VycygpO0dbYSsxMj4+PjI+Pj4wXT1iLmdldERhdGUoKTtHW2ErMTY+Pj4yPj4+MF09Yi5nZXRNb250aCgpO0dbYSsyMD4+PjI+Pj4wXT1iLmdldFllYXIoKTthPWIuZ2V0VGltZSgpO3JldHVybiBCaWdJbnQoaXNOYU4oYSk/LTE6YS8xRTMpfSxQYzpmdW5jdGlvbigpe3JldHVybi01Mn0sUWM6ZnVuY3Rpb24oKXt9LEljOmZ1bmN0aW9uKGEsYixjLGQpe2M+Pj49MDtkPj4+PTA7dmFyIGU9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGY9bmV3IERhdGUoZSwwLDEpLGg9bmV3IERhdGUoZSw2LDEpO2U9Zi5nZXRUaW1lem9uZU9mZnNldCgpO1xudmFyIGs9aC5nZXRUaW1lem9uZU9mZnNldCgpO0lbYT4+PjA+Pj4yPj4+MF09NjAqTWF0aC5tYXgoZSxrKTtHW2I+Pj4wPj4+Mj4+PjBdPU51bWJlcihlIT1rKTthPWw9PmwudG9Mb2NhbGVUaW1lU3RyaW5nKHZvaWQgMCx7aG91cjEyOiExLHRpbWVab25lTmFtZTpcInNob3J0XCJ9KS5zcGxpdChcIiBcIilbMV07Zj1hKGYpO2g9YShoKTtrPGU/KE0oZixFLGMsMTcpLE0oaCxFLGQsMTcpKTooTShmLEUsZCwxNyksTShoLEUsYywxNykpfSxiYjooKT0+e0dhKFwiXCIpfSxBOmZ1bmN0aW9uKGEsYixjKXthPj4+PTA7Yj0kYihiPj4+MCxjPj4+MCk7cmV0dXJuIE9hW2FdKC4uLmIpfSxiYzpmdW5jdGlvbihhLGIsYyl7YT4+Pj0wO2I9JGIoYj4+PjAsYz4+PjApO3JldHVybiBPYVthXSguLi5iKX0sJGI6KCk9PkRhdGUubm93KCksSmM6ZnVuY3Rpb24oKXtyZXR1cm4gNDI5NDkwMTc2MH0sZ2E6KCk9PnBlcmZvcm1hbmNlLm5vdygpLEhjOmZ1bmN0aW9uKGEpe2E+Pj49MDt2YXIgYj1FLmxlbmd0aDtpZig0Mjk0OTAxNzYwPFxuYSlyZXR1cm4hMTtmb3IodmFyIGM9MTs0Pj1jO2MqPTIpe3ZhciBkPWIqKDErLjIvYyk7ZD1NYXRoLm1pbihkLGErMTAwNjYzMjk2KTt2YXIgZT1NYXRoO2Q9TWF0aC5tYXgoYSxkKTthOntlPShlLm1pbi5jYWxsKGUsNDI5NDkwMTc2MCxkKyg2NTUzNi1kJTY1NTM2KSU2NTUzNiktcmEuYnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2O3RyeXtyYS5ncm93KGUpO3phKCk7dmFyIGY9MTticmVhayBhfWNhdGNoKGgpe31mPXZvaWQgMH1pZihmKXJldHVybiEwfXJldHVybiExfSxXYzpmdW5jdGlvbihhLGIpe2E+Pj49MDtiPj4+PTA7dmFyIGM9MDtjYygpLmZvckVhY2goKGQsZSk9Pnt2YXIgZj1iK2M7ZT1JW2ErNCplPj4+Mj4+PjBdPWY7Zm9yKGY9MDtmPGQubGVuZ3RoOysrZil6W2UrKz4+PjBdPWQuY2hhckNvZGVBdChmKTt6W2U+Pj4wXT0wO2MrPWQubGVuZ3RoKzF9KTtyZXR1cm4gMH0sWGM6ZnVuY3Rpb24oYSxiKXthPj4+PTA7Yj4+Pj0wO3ZhciBjPWNjKCk7SVthPj4+Mj4+PlxuMF09Yy5sZW5ndGg7dmFyIGQ9MDtjLmZvckVhY2goZT0+ZCs9ZS5sZW5ndGgrMSk7SVtiPj4+Mj4+PjBdPWQ7cmV0dXJuIDB9LERiOigpPT41MixaYjpmdW5jdGlvbigpe3JldHVybiA1Mn0sVmM6ZnVuY3Rpb24oKXtyZXR1cm4gNzB9LFliOmZ1bmN0aW9uKGEsYixjLGQpe2I+Pj49MDtjPj4+PTA7ZD4+Pj0wO2Zvcih2YXIgZT0wLGY9MDtmPGM7ZisrKXt2YXIgaD1JW2I+Pj4yPj4+MF0saz1JW2IrND4+PjI+Pj4wXTtiKz04O2Zvcih2YXIgbD0wO2w8aztsKyspe3ZhciBtPUVbaCtsPj4+MF0sbj1kY1thXTswPT09bXx8MTA9PT1tPygoMT09PWE/cWE6dykoYWIobiwwKSksbi5sZW5ndGg9MCk6bi5wdXNoKG0pfWUrPWt9SVtkPj4+Mj4+PjBdPWU7cmV0dXJuIDB9LHhiOm5jLGNkOm9jLHVhOnBjLFc6cWMsJDpyYyxyYTpzYyx0YTp0YyxkZDp1YyxvYjp2YyxQOndjLHo6eGMsYjp5YyxVYjp6Yyx5YTpBYyxlOkJjLGtiOkNjLGg6RGMsWDpFYyxpOkZjLGVkOkdjLGo6SGMsdDpJYyxyOkpjLFxubzpLYyxXYTpMYyxDYTpNYyxtYTpOYyxRYjpPYyxkYjpQYyxJYjpRYyxtYjpSYyxrYzpTYyx4YzpUYyxoYzpVYyxpYzpWYyxhYzpXYyxvYTpYYyx5YjpZYyxCYTpaYyxFYjokYyxlYTphZCxqYzpiZCxUYTpjZCxGOmRkLEc6ZWQsR2I6ZmQsamQ6Z2QscWE6aGQsTzpqZCxWOmtkLFQ6bGQseTptZCxGYjpuZCxnYzpvZCxEOnBkLEhiOnFkLGlkOnJkLFVhOnNkLHdhOnRkLGxjOnVkLGNjOnZkLE5iOndkLGFhOnhkLEk6eWQsQzp6ZCxfYTpBZCxmYzpCZCxROkNkLGQ6RGQsYWI6RWQsbjpGZCxZYTpHZCx2YTpIZCx3YjpJZCxmOkpkLHljOktkLGRhOkxkLGdiOk1kLERhOk5kLGxiOk9kLGhiOlBkLGM6UWQsdmM6UmQsb2Q6U2QsazpUZCx0YzpVZCxsOlZkLHdjOldkLHNjOlhkLHJkOllkLHA6WmQsUmE6JGQsdGI6YWUsUWE6YmUsS2I6Y2UsQjpkZSxLOmVlLFM6ZmUsJGE6Z2UscGM6aGUsdWI6aWUsemE6amUsa2E6a2UseGE6bGUsU2I6bWUsTGE6bmUsamI6b2UsR2E6cGUsbmM6cWUsSGE6cmUsXG5JYTpzZSxmZDp0ZSx4ZDp1ZSxaOnZlLHBhOndlLHBkOnhlLHdkOnllLE1iOnplLE1hOkFlLEthOkJlLFRiOkNlLHJjOkRlLEphOkVlLE5hOkZlLHBiOkdlLGxhOkhlLEVhOkllLG1jOkplLHFjOktlLEpiOkxlLEZhOk1lLGphOk5lLEFkOk9lLG5kOlBlLFI6UWUsZWI6UmUsWmE6U2UsZWM6VGUsaWI6VWUsRTpWZSxNOldlLFZhOlhlLGxkOlllLGNhOlplLG5iOiRlLG5hOmFmLGRjOmJmLEFjOmNmLHU6ZGYsTDplZix0ZDpmZixQYjpnZixvYzpoZixCZDpqZixPYjprZixMYjpsZixjYjptZix6YzpuZixSYjpvZixPYTpwZixZOnFmLHVjOnJmLEo6c2YsZ2Q6dGYsdmI6dWYsc2E6dmYsSDp3ZixyYjp4ZixQYTp5ZixTYTp6ZixzYjpBZixxYjpCZix3OmZ1bmN0aW9uKGEpe3JldHVybiBhPj4+MH0sRGM6aGMsZmE6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGhjKGE+Pj4wLGI+Pj4wLGM+Pj4wLGQ+Pj4wKX19LFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGMpe1U9Yy5leHBvcnRzO1U9emIoKTtcblU9RGYoKTtyYT1VLkRkO3phKCk7QmEudW5zaGlmdChVLkVkKTtEYS0tOzA9PURhJiYobnVsbCE9PUVhJiYoY2xlYXJJbnRlcnZhbChFYSksRWE9bnVsbCksRmEmJihjPUZhLEZhPW51bGwsYygpKSk7cmV0dXJuIFV9dmFyIGI9e2E6Q2Z9O0RhKys7aWYoZy5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBnLmluc3RhbnRpYXRlV2FzbShiLGEpfWNhdGNoKGMpe3coYE1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICR7Y31gKSxiYShjKX1OYShiLGZ1bmN0aW9uKGMpe2EoYy5pbnN0YW5jZSl9KS5jYXRjaChiYSk7cmV0dXJue319KCksdWI9YT0+KHViPVUuRmQpKGEpO2cuX09ydEluaXQ9KGEsYik9PihnLl9PcnRJbml0PVUuR2QpKGEsYik7Zy5fT3J0R2V0TGFzdEVycm9yPShhLGIpPT4oZy5fT3J0R2V0TGFzdEVycm9yPVUuSGQpKGEsYik7XG5nLl9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucz0oYSxiLGMsZCxlLGYsaCxrLGwsbSk9PihnLl9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucz1VLklkKShhLGIsYyxkLGUsZixoLGssbCxtKTtnLl9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlcj0oYSxiKT0+KGcuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyPVUuSmQpKGEsYik7Zy5fT3J0QWRkRnJlZURpbWVuc2lvbk92ZXJyaWRlPShhLGIsYyk9PihnLl9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGU9VS5LZCkoYSxiLGMpO2cuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeT0oYSxiLGMpPT4oZy5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5PVUuTGQpKGEsYixjKTtnLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnM9YT0+KGcuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucz1VLk1kKShhKTtnLl9PcnRDcmVhdGVTZXNzaW9uPShhLGIsYyk9PihnLl9PcnRDcmVhdGVTZXNzaW9uPVUuTmQpKGEsYixjKTtcbmcuX09ydFJlbGVhc2VTZXNzaW9uPWE9PihnLl9PcnRSZWxlYXNlU2Vzc2lvbj1VLk9kKShhKTtnLl9PcnRHZXRJbnB1dE91dHB1dENvdW50PShhLGIsYyk9PihnLl9PcnRHZXRJbnB1dE91dHB1dENvdW50PVUuUGQpKGEsYixjKTtnLl9PcnRHZXRJbnB1dE5hbWU9KGEsYik9PihnLl9PcnRHZXRJbnB1dE5hbWU9VS5RZCkoYSxiKTtnLl9PcnRHZXRPdXRwdXROYW1lPShhLGIpPT4oZy5fT3J0R2V0T3V0cHV0TmFtZT1VLlJkKShhLGIpO2cuX09ydEZyZWU9YT0+KGcuX09ydEZyZWU9VS5TZCkoYSk7Zy5fT3J0Q3JlYXRlVGVuc29yPShhLGIsYyxkLGUsZik9PihnLl9PcnRDcmVhdGVUZW5zb3I9VS5UZCkoYSxiLGMsZCxlLGYpO2cuX09ydEdldFRlbnNvckRhdGE9KGEsYixjLGQsZSk9PihnLl9PcnRHZXRUZW5zb3JEYXRhPVUuVWQpKGEsYixjLGQsZSk7Zy5fT3J0UmVsZWFzZVRlbnNvcj1hPT4oZy5fT3J0UmVsZWFzZVRlbnNvcj1VLlZkKShhKTtcbmcuX09ydENyZWF0ZVJ1bk9wdGlvbnM9KGEsYixjLGQpPT4oZy5fT3J0Q3JlYXRlUnVuT3B0aW9ucz1VLldkKShhLGIsYyxkKTtnLl9PcnRBZGRSdW5Db25maWdFbnRyeT0oYSxiLGMpPT4oZy5fT3J0QWRkUnVuQ29uZmlnRW50cnk9VS5YZCkoYSxiLGMpO2cuX09ydFJlbGVhc2VSdW5PcHRpb25zPWE9PihnLl9PcnRSZWxlYXNlUnVuT3B0aW9ucz1VLllkKShhKTtnLl9PcnRDcmVhdGVCaW5kaW5nPWE9PihnLl9PcnRDcmVhdGVCaW5kaW5nPVUuWmQpKGEpO2cuX09ydEJpbmRJbnB1dD0oYSxiLGMpPT4oZy5fT3J0QmluZElucHV0PVUuX2QpKGEsYixjKTtnLl9PcnRCaW5kT3V0cHV0PShhLGIsYyxkKT0+KGcuX09ydEJpbmRPdXRwdXQ9VS4kZCkoYSxiLGMsZCk7Zy5fT3J0Q2xlYXJCb3VuZE91dHB1dHM9YT0+KGcuX09ydENsZWFyQm91bmRPdXRwdXRzPVUuYWUpKGEpO2cuX09ydFJlbGVhc2VCaW5kaW5nPWE9PihnLl9PcnRSZWxlYXNlQmluZGluZz1VLmJlKShhKTtcbmcuX09ydFJ1bldpdGhCaW5kaW5nPShhLGIsYyxkLGUpPT4oZy5fT3J0UnVuV2l0aEJpbmRpbmc9VS5jZSkoYSxiLGMsZCxlKTtnLl9PcnRSdW49KGEsYixjLGQsZSxmLGgsayk9PihnLl9PcnRSdW49VS5kZSkoYSxiLGMsZCxlLGYsaCxrKTtnLl9PcnRFbmRQcm9maWxpbmc9YT0+KGcuX09ydEVuZFByb2ZpbGluZz1VLmVlKShhKTtnLl9Kc2VwT3V0cHV0PShhLGIsYyk9PihnLl9Kc2VwT3V0cHV0PVUuZmUpKGEsYixjKTtnLl9Kc2VwR2V0Tm9kZU5hbWU9YT0+KGcuX0pzZXBHZXROb2RlTmFtZT1VLmdlKShhKTtcbnZhciBKYj1nLl9tYWxsb2M9YT0+KEpiPWcuX21hbGxvYz1VLmhlKShhKSxUPWcuX2ZyZWU9YT0+KFQ9Zy5fZnJlZT1VLmllKShhKSxYPShhLGIpPT4oWD1VLmtlKShhLGIpLFRhPWE9PihUYT1VLmxlKShhKSxZPWE9PihZPVUubWUpKGEpLEVmPWE9PihFZj1VLm5lKShhKSxaPSgpPT4oWj1VLm9lKSgpLG1jPWE9PihtYz1VLnBlKShhKSxrYz1hPT4oa2M9VS5xZSkoYSksVWE9KGEsYixjKT0+KFVhPVUucmUpKGEsYixjKSxsYz1hPT4obGM9VS5zZSkoYSksZHluQ2FsbF92aWk9Zy5keW5DYWxsX3ZpaT0oYSxiLGMpPT4oZHluQ2FsbF92aWk9Zy5keW5DYWxsX3ZpaT1VLnRlKShhLGIsYyksRmY9Zy5keW5DYWxsX2lpaWk9KGEsYixjLGQpPT4oRmY9Zy5keW5DYWxsX2lpaWk9VS51ZSkoYSxiLGMsZCksZHluQ2FsbF9paWk9Zy5keW5DYWxsX2lpaT0oYSxiLGMpPT4oZHluQ2FsbF9paWk9Zy5keW5DYWxsX2lpaT1VLnZlKShhLGIsYyksR2Y9Zy5keW5DYWxsX2lpPShhLGIpPT4oR2Y9Zy5keW5DYWxsX2lpPVxuVS53ZSkoYSxiKSxIZj1nLmR5bkNhbGxfaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCk9PihIZj1nLmR5bkNhbGxfaWlpaWlpaT1VLnhlKShhLGIsYyxkLGUsZixoKSxkeW5DYWxsX3ZpPWcuZHluQ2FsbF92aT0oYSxiKT0+KGR5bkNhbGxfdmk9Zy5keW5DYWxsX3ZpPVUueWUpKGEsYiksZHluQ2FsbF92PWcuZHluQ2FsbF92PWE9PihkeW5DYWxsX3Y9Zy5keW5DYWxsX3Y9VS56ZSkoYSksSWY9Zy5keW5DYWxsX2lpaWlpaT0oYSxiLGMsZCxlLGYpPT4oSWY9Zy5keW5DYWxsX2lpaWlpaT1VLkFlKShhLGIsYyxkLGUsZiksSmY9Zy5keW5DYWxsX2lpaWo9KGEsYixjLGQpPT4oSmY9Zy5keW5DYWxsX2lpaWo9VS5CZSkoYSxiLGMsZCksS2Y9Zy5keW5DYWxsX2lpaWlpPShhLGIsYyxkLGUpPT4oS2Y9Zy5keW5DYWxsX2lpaWlpPVUuQ2UpKGEsYixjLGQsZSksTGY9Zy5keW5DYWxsX3ZpaWk9KGEsYixjLGQpPT4oTGY9Zy5keW5DYWxsX3ZpaWk9VS5EZSkoYSxiLGMsZCksTWY9Zy5keW5DYWxsX3ZpaWlpaT1cbihhLGIsYyxkLGUsZik9PihNZj1nLmR5bkNhbGxfdmlpaWlpPVUuRWUpKGEsYixjLGQsZSxmKSxOZj1nLmR5bkNhbGxfdmlpaWk9KGEsYixjLGQsZSk9PihOZj1nLmR5bkNhbGxfdmlpaWk9VS5GZSkoYSxiLGMsZCxlKSxPZj1nLmR5bkNhbGxfdmlpaWlpaT0oYSxiLGMsZCxlLGYsaCk9PihPZj1nLmR5bkNhbGxfdmlpaWlpaT1VLkdlKShhLGIsYyxkLGUsZixoKSxQZj1nLmR5bkNhbGxfdmlpamk9KGEsYixjLGQsZSk9PihQZj1nLmR5bkNhbGxfdmlpamk9VS5IZSkoYSxiLGMsZCxlKSxRZj1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSk9PihRZj1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpPVUuSWUpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKSxSZj1nLmR5bkNhbGxfdmlpaWpqamlpPShhLGIsYyxkLGUsZixoLGssbCk9PihSZj1nLmR5bkNhbGxfdmlpaWpqamlpPVUuSmUpKGEsYixjLGQsZSxmLGgsayxsKSxTZj1nLmR5bkNhbGxfaWlkPShhLGIsYyk9PlxuKFNmPWcuZHluQ2FsbF9paWQ9VS5LZSkoYSxiLGMpLFRmPWcuZHluQ2FsbF9paWY9KGEsYixjKT0+KFRmPWcuZHluQ2FsbF9paWY9VS5MZSkoYSxiLGMpLFVmPWcuZHluQ2FsbF9paWo9KGEsYixjKT0+KFVmPWcuZHluQ2FsbF9paWo9VS5NZSkoYSxiLGMpLFZmPWcuZHluQ2FsbF9qaWk9KGEsYixjKT0+KFZmPWcuZHluQ2FsbF9qaWk9VS5OZSkoYSxiLGMpLFdmPWcuZHluQ2FsbF9pPWE9PihXZj1nLmR5bkNhbGxfaT1VLk9lKShhKSxYZj1nLmR5bkNhbGxfdmlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCk9PihYZj1nLmR5bkNhbGxfdmlpaWlpaWlpPVUuUGUpKGEsYixjLGQsZSxmLGgsayxsKSxZZj1nLmR5bkNhbGxfdmlpaWlpaj0oYSxiLGMsZCxlLGYsaCk9PihZZj1nLmR5bkNhbGxfdmlpaWlpaj1VLlFlKShhLGIsYyxkLGUsZixoKSxaZj1nLmR5bkNhbGxfamk9KGEsYik9PihaZj1nLmR5bkNhbGxfamk9VS5SZSkoYSxiKSwkZj1nLmR5bkNhbGxfdmlpaj0oYSxiLGMsZCk9PigkZj1cbmcuZHluQ2FsbF92aWlqPVUuU2UpKGEsYixjLGQpLGFnPWcuZHluQ2FsbF9paWlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxKT0+KGFnPWcuZHluQ2FsbF9paWlpaWlpaWlpaWk9VS5UZSkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpLGJnPWcuZHluQ2FsbF92aWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtKT0+KGJnPWcuZHluQ2FsbF92aWlpaWlpaWlpPVUuVWUpKGEsYixjLGQsZSxmLGgsayxsLG0pLGNnPWcuZHluQ2FsbF9paj0oYSxiKT0+KGNnPWcuZHluQ2FsbF9paj1VLlZlKShhLGIpLGRnPWcuZHluQ2FsbF9paWlpaWo9KGEsYixjLGQsZSxmKT0+KGRnPWcuZHluQ2FsbF9paWlpaWo9VS5XZSkoYSxiLGMsZCxlLGYpLGVnPWcuZHluQ2FsbF9qPWE9PihlZz1nLmR5bkNhbGxfaj1VLlhlKShhKSxmZz1nLmR5bkNhbGxfdmlqPShhLGIsYyk9PihmZz1nLmR5bkNhbGxfdmlqPVUuWWUpKGEsYixjKSxnZz1nLmR5bkNhbGxfdmlpampqaWlpaWlpPShhLGIsYyxkLFxuZSxmLGgsayxsLG0sbixxKT0+KGdnPWcuZHluQ2FsbF92aWlqamppaWlpaWk9VS5aZSkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpLGhnPWcuZHluQ2FsbF92aWlpamlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxKT0+KGhnPWcuZHluQ2FsbF92aWlpamlpaWlpaWk9VS5fZSkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpLGlnPWcuZHluQ2FsbF9paWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrKT0+KGlnPWcuZHluQ2FsbF9paWlpaWlpaT1VLiRlKShhLGIsYyxkLGUsZixoLGspLGpnPWcuZHluQ2FsbF92aWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrKT0+KGpnPWcuZHluQ2FsbF92aWlpaWlpaT1VLmFmKShhLGIsYyxkLGUsZixoLGspLGtnPWcuZHluQ2FsbF9paWlpaWlpaWo9KGEsYixjLGQsZSxmLGgsayxsKT0+KGtnPWcuZHluQ2FsbF9paWlpaWlpaWo9VS5iZikoYSxiLGMsZCxlLGYsaCxrLGwpLGxnPWcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsXG5tLG4scSxyLHApPT4obGc9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpPVUuY2YpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCksbWc9Zy5keW5DYWxsX2lpaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwpPT4obWc9Zy5keW5DYWxsX2lpaWlpaWlpaT1VLmRmKShhLGIsYyxkLGUsZixoLGssbCksbmc9Zy5keW5DYWxsX2lpaWlpamlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4pPT4obmc9Zy5keW5DYWxsX2lpaWlpamlpaWlpPVUuZWYpKGEsYixjLGQsZSxmLGgsayxsLG0sbiksb2c9Zy5keW5DYWxsX3ZpampqaWlpaj0oYSxiLGMsZCxlLGYsaCxrLGwpPT4ob2c9Zy5keW5DYWxsX3ZpampqaWlpaj1VLmZmKShhLGIsYyxkLGUsZixoLGssbCkscGc9Zy5keW5DYWxsX2ZpPShhLGIpPT4ocGc9Zy5keW5DYWxsX2ZpPVUuZ2YpKGEsYikscWc9Zy5keW5DYWxsX2ZpaT0oYSxiLGMpPT4ocWc9Zy5keW5DYWxsX2ZpaT1VLmhmKShhLGIsYykscmc9Zy5keW5DYWxsX2RpPShhLGIpPT4ocmc9XG5nLmR5bkNhbGxfZGk9VS5qZikoYSxiKSxzZz1nLmR5bkNhbGxfZGlpPShhLGIsYyk9PihzZz1nLmR5bkNhbGxfZGlpPVUua2YpKGEsYixjKSx0Zz1nLmR5bkNhbGxfdmlqaj0oYSxiLGMsZCk9Pih0Zz1nLmR5bkNhbGxfdmlqaj1VLmxmKShhLGIsYyxkKSx1Zz1nLmR5bkNhbGxfaWlpaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSk9Pih1Zz1nLmR5bkNhbGxfaWlpaWlpaWlpaT1VLm1mKShhLGIsYyxkLGUsZixoLGssbCxtKSx2Zz1nLmR5bkNhbGxfdmlpamlpaT0oYSxiLGMsZCxlLGYsaCk9Pih2Zz1nLmR5bkNhbGxfdmlpamlpaT1VLm5mKShhLGIsYyxkLGUsZixoKSx3Zz1nLmR5bkNhbGxfdmlpZD0oYSxiLGMsZCk9Pih3Zz1nLmR5bkNhbGxfdmlpZD1VLm9mKShhLGIsYyxkKSx4Zz1nLmR5bkNhbGxfdmlmZmlpaT0oYSxiLGMsZCxlLGYsaCk9Pih4Zz1nLmR5bkNhbGxfdmlmZmlpaT1VLnBmKShhLGIsYyxkLGUsZixoKSx5Zz1nLmR5bkNhbGxfdmlpZmlpaT0oYSxiLGMsZCxlLGYsXG5oKT0+KHlnPWcuZHluQ2FsbF92aWlmaWlpPVUucWYpKGEsYixjLGQsZSxmLGgpLHpnPWcuZHluQ2FsbF92aWlpaWlkaWlkaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuKT0+KHpnPWcuZHluQ2FsbF92aWlpaWlkaWlkaT1VLnJmKShhLGIsYyxkLGUsZixoLGssbCxtLG4pLEFnPWcuZHluQ2FsbF92aWlpaWlpaWlpZGk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxKT0+KEFnPWcuZHluQ2FsbF92aWlpaWlpaWlpZGk9VS5zZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpLEJnPWcuZHluQ2FsbF9qaWlpPShhLGIsYyxkKT0+KEJnPWcuZHluQ2FsbF9qaWlpPVUudGYpKGEsYixjLGQpLENnPWcuZHluQ2FsbF92amlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrKT0+KENnPWcuZHluQ2FsbF92amlpaWlpaT1VLnVmKShhLGIsYyxkLGUsZixoLGspLERnPWcuZHluQ2FsbF92aWlpZD0oYSxiLGMsZCxlKT0+KERnPWcuZHluQ2FsbF92aWlpZD1VLnZmKShhLGIsYyxkLGUpLEVnPWcuZHluQ2FsbF92aWlpaWlpaWlpamk9XG4oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpPT4oRWc9Zy5keW5DYWxsX3ZpaWlpaWlpaWlqaT1VLndmKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSksRmc9Zy5keW5DYWxsX3Zpamk9KGEsYixjLGQpPT4oRmc9Zy5keW5DYWxsX3Zpamk9VS54ZikoYSxiLGMsZCksR2c9Zy5keW5DYWxsX3Zpampqampqampqampqamk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpPT4oR2c9Zy5keW5DYWxsX3Zpampqampqampqampqamk9VS55ZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSksSGc9Zy5keW5DYWxsX3ZpaWlqaT0oYSxiLGMsZCxlLGYpPT4oSGc9Zy5keW5DYWxsX3ZpaWlqaT1VLnpmKShhLGIsYyxkLGUsZiksSWc9Zy5keW5DYWxsX3ZpampqaWlqaT0oYSxiLGMsZCxlLGYsaCxrLGwpPT4oSWc9Zy5keW5DYWxsX3ZpampqaWlqaT1VLkFmKShhLGIsYyxkLGUsZixoLGssbCksSmc9Zy5keW5DYWxsX2lpaWppPShhLGIsYyxkLGUpPT4oSmc9Zy5keW5DYWxsX2lpaWppPVxuVS5CZikoYSxiLGMsZCxlKSxLZz1nLmR5bkNhbGxfaWlpamlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCk9PihLZz1nLmR5bkNhbGxfaWlpamlpaWlpaWlpaWk9VS5DZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKSxMZz1nLmR5bkNhbGxfdmo9KGEsYik9PihMZz1nLmR5bkNhbGxfdmo9VS5EZikoYSxiKSxNZz1nLmR5bkNhbGxfampqPShhLGIsYyk9PihNZz1nLmR5bkNhbGxfampqPVUuRWYpKGEsYixjKSxOZz1nLmR5bkNhbGxfaWlpamlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSk9PihOZz1nLmR5bkNhbGxfaWlpamlpaWlpaT1VLkZmKShhLGIsYyxkLGUsZixoLGssbCxtKSxPZz1nLmR5bkNhbGxfdmZpaWk9KGEsYixjLGQsZSk9PihPZz1nLmR5bkNhbGxfdmZpaWk9VS5HZikoYSxiLGMsZCxlKSxQZz1nLmR5bkNhbGxfdmlpaWlmZj0oYSxiLGMsZCxlLGYsaCk9PihQZz1nLmR5bkNhbGxfdmlpaWlmZj1VLkhmKShhLGIsYyxkLGUsZixoKSxRZz1nLmR5bkNhbGxfdmlpaWlpZmY9XG4oYSxiLGMsZCxlLGYsaCxrKT0+KFFnPWcuZHluQ2FsbF92aWlpaWlmZj1VLklmKShhLGIsYyxkLGUsZixoLGspLFJnPWcuZHluQ2FsbF92aWlmZj0oYSxiLGMsZCxlKT0+KFJnPWcuZHluQ2FsbF92aWlmZj1VLkpmKShhLGIsYyxkLGUpLFNnPWcuZHluQ2FsbF92aWlpaWlpaWlpZmlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKT0+KFNnPWcuZHluQ2FsbF92aWlpaWlpaWlpZmlpaT1VLktmKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApLFRnPWcuZHluQ2FsbF92aWlpaWlpaWlqaj0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuKT0+KFRnPWcuZHluQ2FsbF92aWlpaWlpaWlqaj1VLkxmKShhLGIsYyxkLGUsZixoLGssbCxtLG4pLFVnPWcuZHluQ2FsbF9paWlpaWlpaWlpaWlpaWZpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBKT0+KFVnPWcuZHluQ2FsbF9paWlpaWlpaWlpaWlpaWZpaT1VLk1mKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEpLFxuVmc9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpPT4oVmc9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWk9VS5OZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEsciksV2c9Zy5keW5DYWxsX2lpaWlpaWlpaWlpaWlpaWlpZmlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQpPT4oV2c9Zy5keW5DYWxsX2lpaWlpaWlpaWlpaWlpaWlpZmlpPVUuT2YpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCksWGc9Zy5keW5DYWxsX3ZpamppaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0pPT4oWGc9Zy5keW5DYWxsX3ZpamppaWlpaWk9VS5QZikoYSxiLGMsZCxlLGYsaCxrLGwsbSksWWc9Zy5keW5DYWxsX2lpaWlqamo9KGEsYixjLGQsZSxmLGgpPT4oWWc9Zy5keW5DYWxsX2lpaWlqamo9VS5RZikoYSxiLGMsZCxlLGYsaCksWmc9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLFxubik9PihaZz1nLmR5bkNhbGxfdmlpaWlpaWlpaWk9VS5SZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKSwkZz1nLmR5bkNhbGxfaWlpampqPShhLGIsYyxkLGUsZik9PigkZz1nLmR5bkNhbGxfaWlpampqPVUuU2YpKGEsYixjLGQsZSxmKSxhaD1nLmR5bkNhbGxfZmZmZmZmZj0oYSxiLGMsZCxlLGYsaCk9PihhaD1nLmR5bkNhbGxfZmZmZmZmZj1VLlRmKShhLGIsYyxkLGUsZixoKSxiaD1nLmR5bkNhbGxfdmlpaWlqPShhLGIsYyxkLGUsZik9PihiaD1nLmR5bkNhbGxfdmlpaWlqPVUuVWYpKGEsYixjLGQsZSxmKSxjaD1nLmR5bkNhbGxfdmlpaWlpaWppaWZpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCk9PihjaD1nLmR5bkNhbGxfdmlpaWlpaWppaWZpaWk9VS5WZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKSxkaD1nLmR5bkNhbGxfdmpqampqamZmamlmaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQik9PihkaD1nLmR5bkNhbGxfdmpqampqamZmamlmaWlpaWlpPVxuVS5XZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIpLGVoPWcuZHluQ2FsbF92aWlpaWlpZmZqaWZpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBKT0+KGVoPWcuZHluQ2FsbF92aWlpaWlpZmZqaWZpaWlpaT1VLlhmKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEpLGZoPWcuZHluQ2FsbF92aWlpaWlpZmZqZmlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KT0+KGZoPWcuZHluQ2FsbF92aWlpaWlpZmZqZmlpaWlpPVUuWWYpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpLGdoPWcuZHluQ2FsbF92aWlpaWlpZmZqaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KT0+KGdoPWcuZHluQ2FsbF92aWlpaWlpZmZqaWlpaWk9VS5aZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUpLGhoPWcuZHluQ2FsbF92ampqampqampmZmZpaWlmaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLFxubSxuLHEscixwLHUseSxBLEIsQyxELEYpPT4oaGg9Zy5keW5DYWxsX3ZqampqampqamZmZmlpaWZpaWlpaT1VLl9mKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRiksaWg9Zy5keW5DYWxsX3ZqampqampmZmZpZmlqaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMpPT4oaWg9Zy5keW5DYWxsX3ZqampqampmZmZpZmlqaWlpaWk9VS4kZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyksamg9Zy5keW5DYWxsX3ZqampqampmZmZpZmlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIpPT4oamg9Zy5keW5DYWxsX3ZqampqampmZmZpZmlpaWlpaT1VLmFnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQiksa2g9Zy5keW5DYWxsX3ZqampqampqamZmZmppZmlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYpPT4oa2g9Zy5keW5DYWxsX3ZqampqampqamZmZmppZmlpaWlpaT1cblUuYmcpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCxGKSxsaD1nLmR5bkNhbGxfdmlqaWlpaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscik9PihsaD1nLmR5bkNhbGxfdmlqaWlpaWlpaWlpaT1VLmNnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKSxtaD1nLmR5bkNhbGxfdmlqamZmZmlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSk9PihtaD1nLmR5bkNhbGxfdmlqamZmZmlpaT1VLmRnKShhLGIsYyxkLGUsZixoLGssbCxtKSxuaD1nLmR5bkNhbGxfdmlpaWlpaWlqaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscik9PihuaD1nLmR5bkNhbGxfdmlpaWlpaWlqaWlpaT1VLmVnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKSxvaD1nLmR5bkNhbGxfdmlqampqamppZmlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSk9PihvaD1nLmR5bkNhbGxfdmlqampqamppZmlpaWlpPVUuZmcpKGEsYixjLGQsZSxmLGgsayxsLG0sbixcbnEscixwLHUpLHBoPWcuZHluQ2FsbF92aWlmaT0oYSxiLGMsZCxlKT0+KHBoPWcuZHluQ2FsbF92aWlmaT1VLmdnKShhLGIsYyxkLGUpLHFoPWcuZHluQ2FsbF92ampqamppaWlpPShhLGIsYyxkLGUsZixoLGssbCxtKT0+KHFoPWcuZHluQ2FsbF92ampqamppaWlpPVUuaGcpKGEsYixjLGQsZSxmLGgsayxsLG0pLHJoPWcuZHluQ2FsbF92ampqamZpaWk9KGEsYixjLGQsZSxmLGgsayxsKT0+KHJoPWcuZHluQ2FsbF92ampqamZpaWk9VS5pZykoYSxiLGMsZCxlLGYsaCxrLGwpLHNoPWcuZHluQ2FsbF92aWlpaWlpamlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKT0+KHNoPWcuZHluQ2FsbF92aWlpaWlpamlpaWlpaT1VLmpnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApLHRoPWcuZHluQ2FsbF92aWpqaWk9KGEsYixjLGQsZSxmKT0+KHRoPWcuZHluQ2FsbF92aWpqaWk9VS5rZykoYSxiLGMsZCxlLGYpLHVoPWcuZHluQ2FsbF92aWlpaWlqamlpaWlpPShhLGIsYyxcbmQsZSxmLGgsayxsLG0sbixxLHIpPT4odWg9Zy5keW5DYWxsX3ZpaWlpaWpqaWlpaWk9VS5sZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEsciksdmg9Zy5keW5DYWxsX2lpaWlpamk9KGEsYixjLGQsZSxmLGgpPT4odmg9Zy5keW5DYWxsX2lpaWlpamk9VS5tZykoYSxiLGMsZCxlLGYsaCksd2g9Zy5keW5DYWxsX2lpaWlqaT0oYSxiLGMsZCxlLGYpPT4od2g9Zy5keW5DYWxsX2lpaWlqaT1VLm5nKShhLGIsYyxkLGUsZikseGg9Zy5keW5DYWxsX3ZpaWlpaWppaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpPT4oeGg9Zy5keW5DYWxsX3ZpaWlpaWppaWlpaWk9VS5vZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscikseWg9Zy5keW5DYWxsX3ZpaWlqaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4pPT4oeWg9Zy5keW5DYWxsX3ZpaWlqaWlpaWlpPVUucGcpKGEsYixjLGQsZSxmLGgsayxsLG0sbiksemg9Zy5keW5DYWxsX3ZpaWpqPShhLGIsYyxkLGUpPT4oemg9Zy5keW5DYWxsX3ZpaWpqPVxuVS5xZykoYSxiLGMsZCxlKSxBaD1nLmR5bkNhbGxfdmlpaWlqaWk9KGEsYixjLGQsZSxmLGgsayk9PihBaD1nLmR5bkNhbGxfdmlpaWlqaWk9VS5yZykoYSxiLGMsZCxlLGYsaCxrKSxCaD1nLmR5bkNhbGxfdmlpamppaWk9KGEsYixjLGQsZSxmLGgsayk9PihCaD1nLmR5bkNhbGxfdmlpamppaWk9VS5zZykoYSxiLGMsZCxlLGYsaCxrKSxDaD1nLmR5bkNhbGxfaWppaT0oYSxiLGMsZCk9PihDaD1nLmR5bkNhbGxfaWppaT1VLnRnKShhLGIsYyxkKSxEaD1nLmR5bkNhbGxfdmlpaWlpampqaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSk9PihEaD1nLmR5bkNhbGxfdmlpaWlpampqaT1VLnVnKShhLGIsYyxkLGUsZixoLGssbCxtKSxFaD1nLmR5bkNhbGxfdmlqampqaWlqPShhLGIsYyxkLGUsZixoLGssbCk9PihFaD1nLmR5bkNhbGxfdmlqampqaWlqPVUudmcpKGEsYixjLGQsZSxmLGgsayxsKSxGaD1nLmR5bkNhbGxfdmlpaWlpamlqPShhLGIsYyxkLGUsZixoLGssbCk9PihGaD1nLmR5bkNhbGxfdmlpaWlpamlqPVxuVS53ZykoYSxiLGMsZCxlLGYsaCxrLGwpLEdoPWcuZHluQ2FsbF92aWlpaWlpamlqPShhLGIsYyxkLGUsZixoLGssbCxtKT0+KEdoPWcuZHluQ2FsbF92aWlpaWlpamlqPVUueGcpKGEsYixjLGQsZSxmLGgsayxsLG0pLEhoPWcuZHluQ2FsbF92aWppaWk9KGEsYixjLGQsZSxmKT0+KEhoPWcuZHluQ2FsbF92aWppaWk9VS55ZykoYSxiLGMsZCxlLGYpLEloPWcuZHluQ2FsbF92aWlpaWlpaWlpZmk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxKT0+KEloPWcuZHluQ2FsbF92aWlpaWlpaWlpZmk9VS56ZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpLEpoPWcuZHluQ2FsbF9paWlqaWlpaT0oYSxiLGMsZCxlLGYsaCxrKT0+KEpoPWcuZHluQ2FsbF9paWlqaWlpaT1VLkFnKShhLGIsYyxkLGUsZixoLGspLEtoPWcuZHluQ2FsbF92aWlpaWlpamppaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKT0+KEtoPWcuZHluQ2FsbF92aWlpaWlpamppaWlpaT1VLkJnKShhLGIsYyxkLGUsXG5mLGgsayxsLG0sbixxLHIscCksTGg9Zy5keW5DYWxsX3ZpaWlpaWlpamlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUpPT4oTGg9Zy5keW5DYWxsX3ZpaWlpaWlpamlpaWlpaT1VLkNnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSksTWg9Zy5keW5DYWxsX3ZpZj0oYSxiLGMpPT4oTWg9Zy5keW5DYWxsX3ZpZj1VLkRnKShhLGIsYyksTmg9Zy5keW5DYWxsX3ZpaWY9KGEsYixjLGQpPT4oTmg9Zy5keW5DYWxsX3ZpaWY9VS5FZykoYSxiLGMsZCksT2g9Zy5keW5DYWxsX2ZpaWk9KGEsYixjLGQpPT4oT2g9Zy5keW5DYWxsX2ZpaWk9VS5GZykoYSxiLGMsZCksUGg9Zy5keW5DYWxsX2RpaWk9KGEsYixjLGQpPT4oUGg9Zy5keW5DYWxsX2RpaWk9VS5HZykoYSxiLGMsZCksUWg9Zy5keW5DYWxsX3ZpaWlpaWlmaWk9KGEsYixjLGQsZSxmLGgsayxsLG0pPT4oUWg9Zy5keW5DYWxsX3ZpaWlpaWlmaWk9VS5IZykoYSxiLGMsZCxlLGYsaCxrLGwsbSksUmg9Zy5keW5DYWxsX3ZpaWlpaWppaWlpaWlpaWlpaWlpaWlpaWlpPVxuKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCxGLEgsSyxWYSxXYSxYYSk9PihSaD1nLmR5bkNhbGxfdmlpaWlpamlpaWlpaWlpaWlpaWlpaWlpaWk9VS5JZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYsSCxLLFZhLFdhLFhhKSxTaD1nLmR5bkNhbGxfdmlpamppPShhLGIsYyxkLGUsZik9PihTaD1nLmR5bkNhbGxfdmlpamppPVUuSmcpKGEsYixjLGQsZSxmKSxUaD1nLmR5bkNhbGxfaWlpaWlpaWlpaWlqaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscik9PihUaD1nLmR5bkNhbGxfaWlpaWlpaWlpaWlqaT1VLktnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKSxVaD1nLmR5bkNhbGxfdmlpZmlpZmlqamppaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscik9PihVaD1nLmR5bkNhbGxfdmlpZmlpZmlqamppaT1VLkxnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKSxWaD1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpaWlpPVxuKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCxGKT0+KFZoPWcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpaWlpaWk9VS5NZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYpLFdoPWcuZHluQ2FsbF92aWlpaWlmaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKT0+KFdoPWcuZHluQ2FsbF92aWlpaWlmaWlpaWlpPVUuTmcpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpLFhoPWcuZHluQ2FsbF92aWppaWlpaWlpamppaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKT0+KFhoPWcuZHluQ2FsbF92aWppaWlpaWlpamppaT1VLk9nKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApLFloPWcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDKT0+KFloPWcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpaWlpPVUuUGcpKGEsYixjLGQsZSxmLGgsayxsLFxubSxuLHEscixwLHUseSxBLEIsQyksWmg9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQpPT4oWmg9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpaWlpPVUuUWcpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCksJGg9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpPT4oJGg9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWk9VS5SZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSksYWk9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEpPT4oYWk9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpPVUuU2cpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSksYmk9Zy5keW5DYWxsX3ZpaWlpampqPShhLGIsYyxkLGUsZixoLGspPT4oYmk9XG5nLmR5bkNhbGxfdmlpaWlqamo9VS5UZykoYSxiLGMsZCxlLGYsaCxrKSxjaT1nLmR5bkNhbGxfaWlpaWlkPShhLGIsYyxkLGUsZik9PihjaT1nLmR5bkNhbGxfaWlpaWlkPVUuVWcpKGEsYixjLGQsZSxmKSxkaT1nLmR5bkNhbGxfdmlpaWlpaWlqamo9KGEsYixjLGQsZSxmLGgsayxsLG0sbik9PihkaT1nLmR5bkNhbGxfdmlpaWlpaWlqamo9VS5WZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKSxlaT1nLmR5bkNhbGxfaWlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbik9PihlaT1nLmR5bkNhbGxfaWlpaWlpaWlpaWk9VS5XZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKSxmaT1nLmR5bkNhbGxfaWlpaWlpaWlpaWlpaWlpaWlpZmk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCk9PihmaT1nLmR5bkNhbGxfaWlpaWlpaWlpaWlpaWlpaWlpZmk9VS5YZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxEKSxnaT1nLmR5bkNhbGxfdmlpaWY9XG4oYSxiLGMsZCxlKT0+KGdpPWcuZHluQ2FsbF92aWlpZj1VLllnKShhLGIsYyxkLGUpLGhpPWcuZHluQ2FsbF92aWlpamlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtKT0+KGhpPWcuZHluQ2FsbF92aWlpamlpaWlpPVUuWmcpKGEsYixjLGQsZSxmLGgsayxsLG0pLGlpPWcuZHluQ2FsbF92aWlpaj0oYSxiLGMsZCxlKT0+KGlpPWcuZHluQ2FsbF92aWlpaj1VLl9nKShhLGIsYyxkLGUpLGppPWcuZHluQ2FsbF9paWpqaj0oYSxiLGMsZCxlKT0+KGppPWcuZHluQ2FsbF9paWpqaj1VLiRnKShhLGIsYyxkLGUpLGtpPWcuZHluQ2FsbF92aWlpaWppPShhLGIsYyxkLGUsZixoKT0+KGtpPWcuZHluQ2FsbF92aWlpaWppPVUuYWgpKGEsYixjLGQsZSxmLGgpLGxpPWcuZHluQ2FsbF9paWpqamk9KGEsYixjLGQsZSxmKT0+KGxpPWcuZHluQ2FsbF9paWpqamk9VS5iaCkoYSxiLGMsZCxlLGYpLG1pPWcuZHluQ2FsbF9pamlqamk9KGEsYixjLGQsZSxmKT0+KG1pPWcuZHluQ2FsbF9pamlqamk9VS5jaCkoYSxcbmIsYyxkLGUsZiksbmk9Zy5keW5DYWxsX3ZpaWlqamlpaT0oYSxiLGMsZCxlLGYsaCxrLGwpPT4obmk9Zy5keW5DYWxsX3ZpaWlqamlpaT1VLmRoKShhLGIsYyxkLGUsZixoLGssbCksb2k9Zy5keW5DYWxsX2lpaWlpamppPShhLGIsYyxkLGUsZixoLGspPT4ob2k9Zy5keW5DYWxsX2lpaWlpamppPVUuZWgpKGEsYixjLGQsZSxmLGgsaykscGk9Zy5keW5DYWxsX2lpaWlmaT0oYSxiLGMsZCxlLGYpPT4ocGk9Zy5keW5DYWxsX2lpaWlmaT1VLmZoKShhLGIsYyxkLGUsZikscWk9Zy5keW5DYWxsX2lpaWppaT0oYSxiLGMsZCxlLGYpPT4ocWk9Zy5keW5DYWxsX2lpaWppaT1VLmdoKShhLGIsYyxkLGUsZikscmk9Zy5keW5DYWxsX2lpaWlpaWlpaWppaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpPT4ocmk9Zy5keW5DYWxsX2lpaWlpaWlpaWppaT1VLmhoKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSksc2k9Zy5keW5DYWxsX2lpaWlqamlpPShhLGIsYyxkLGUsZixoLGspPT4oc2k9Zy5keW5DYWxsX2lpaWlqamlpPVxuVS5paCkoYSxiLGMsZCxlLGYsaCxrKSx0aT1nLmR5bkNhbGxfaWlpaWlpampqaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbik9Pih0aT1nLmR5bkNhbGxfaWlpaWlpampqaWk9VS5qaCkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKSx1aT1nLmR5bkNhbGxfaWlpamlpaT0oYSxiLGMsZCxlLGYsaCk9Pih1aT1nLmR5bkNhbGxfaWlpamlpaT1VLmtoKShhLGIsYyxkLGUsZixoKSx2aT1nLmR5bkNhbGxfaWlpaWlpaWlqampmaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscik9Pih2aT1nLmR5bkNhbGxfaWlpaWlpaWlqampmaT1VLmxoKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKSx3aT1nLmR5bkNhbGxfaWlqaWlpaT0oYSxiLGMsZCxlLGYsaCk9Pih3aT1nLmR5bkNhbGxfaWlqaWlpaT1VLm1oKShhLGIsYyxkLGUsZixoKSx4aT1nLmR5bkNhbGxfaWlqamppaT0oYSxiLGMsZCxlLGYsaCk9Pih4aT1nLmR5bkNhbGxfaWlqamppaT1VLm5oKShhLGIsYyxkLGUsZixoKSx5aT1nLmR5bkNhbGxfamlqPVxuKGEsYixjKT0+KHlpPWcuZHluQ2FsbF9qaWo9VS5vaCkoYSxiLGMpLHppPWcuZHluQ2FsbF9paWppPShhLGIsYyxkKT0+KHppPWcuZHluQ2FsbF9paWppPVUucGgpKGEsYixjLGQpLEFpPWcuZHluQ2FsbF9paWlmPShhLGIsYyxkKT0+KEFpPWcuZHluQ2FsbF9paWlmPVUucWgpKGEsYixjLGQpLEJpPWcuZHluQ2FsbF92aWRpPShhLGIsYyxkKT0+KEJpPWcuZHluQ2FsbF92aWRpPVUucmgpKGEsYixjLGQpLENpPWcuZHluQ2FsbF92amlpaT0oYSxiLGMsZCxlKT0+KENpPWcuZHluQ2FsbF92amlpaT1VLnNoKShhLGIsYyxkLGUpLERpPWcuZHluQ2FsbF9kaWlpaT0oYSxiLGMsZCxlKT0+KERpPWcuZHluQ2FsbF9kaWlpaT1VLnRoKShhLGIsYyxkLGUpLEVpPWcuZHluQ2FsbF9kaWlpaWk9KGEsYixjLGQsZSxmKT0+KEVpPWcuZHluQ2FsbF9kaWlpaWk9VS51aCkoYSxiLGMsZCxlLGYpLEZpPWcuZHluQ2FsbF92aWlpamppaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxKT0+KEZpPWcuZHluQ2FsbF92aWlpamppaWlpaWk9XG5VLnZoKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSksR2k9Zy5keW5DYWxsX3ZpaWpqaWpqamppaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpPT4oR2k9Zy5keW5DYWxsX3ZpaWpqaWpqamppaWk9VS53aCkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEsciksSGk9Zy5keW5DYWxsX2lpaWlqPShhLGIsYyxkLGUpPT4oSGk9Zy5keW5DYWxsX2lpaWlqPVUueGgpKGEsYixjLGQsZSksSWk9Zy5keW5DYWxsX3ZpaWlqaWk9KGEsYixjLGQsZSxmLGgpPT4oSWk9Zy5keW5DYWxsX3ZpaWlqaWk9VS55aCkoYSxiLGMsZCxlLGYsaCksSmk9Zy5keW5DYWxsX3ZpaWppaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpPT4oSmk9Zy5keW5DYWxsX3ZpaWppaWlpaWlpaWk9VS56aCkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEsciksS2k9Zy5keW5DYWxsX2ZpaWlpPShhLGIsYyxkLGUpPT4oS2k9Zy5keW5DYWxsX2ZpaWlpPVUuQWgpKGEsYixjLGQsZSksTGk9Zy5keW5DYWxsX2pmaT1cbihhLGIsYyk9PihMaT1nLmR5bkNhbGxfamZpPVUuQmgpKGEsYixjKSxNaT1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSk9PihNaT1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpPVUuQ2gpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KSxOaT1nLmR5bkNhbGxfamlpaj0oYSxiLGMsZCk9PihOaT1nLmR5bkNhbGxfamlpaj1VLkRoKShhLGIsYyxkKSxNYj1hPT4oTWI9VS5FaCkoYSksQmI9KCk9PihCYj1VLkZoKSgpLExiPWE9PihMYj1VLkdoKShhKSxOYj0oKT0+KE5iPVUuSGgpKCk7Zy5fX19zdGFydF9lbV9qcz0xMjc1MDQ0O2cuX19fc3RvcF9lbV9qcz0xMjc1MjA1O2Z1bmN0aW9uIERjKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7cmV0dXJuIEZmKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKX19XG5mdW5jdGlvbiBCYyhhLGIsYyl7dmFyIGQ9WigpO3RyeXtyZXR1cm4gZHluQ2FsbF9paWkoYSxiLGMpfWNhdGNoKGUpe1koZCk7aWYoZSE9PWUrMCl0aHJvdyBlO1goMSwwKX19ZnVuY3Rpb24gSmQoYSxiLGMpe3ZhciBkPVooKTt0cnl7ZHluQ2FsbF92aWkoYSxiLGMpfWNhdGNoKGUpe1koZCk7aWYoZSE9PWUrMCl0aHJvdyBlO1goMSwwKX19ZnVuY3Rpb24geWMoYSxiKXt2YXIgYz1aKCk7dHJ5e3JldHVybiBHZihhLGIpfWNhdGNoKGQpe1koYyk7aWYoZCE9PWQrMCl0aHJvdyBkO1goMSwwKX19ZnVuY3Rpb24gRmQoYSxiKXt2YXIgYz1aKCk7dHJ5e2R5bkNhbGxfdmkoYSxiKX1jYXRjaChkKXtZKGMpO2lmKGQhPT1kKzApdGhyb3cgZDtYKDEsMCl9fWZ1bmN0aW9uIGRkKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7cmV0dXJuIEpmKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKX19XG5mdW5jdGlvbiBEZChhKXt2YXIgYj1aKCk7dHJ5e2R5bkNhbGxfdihhKX1jYXRjaChjKXtZKGIpO2lmKGMhPT1jKzApdGhyb3cgYztYKDEsMCl9fWZ1bmN0aW9uIEljKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7cmV0dXJuIEhmKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19ZnVuY3Rpb24gSGMoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7cmV0dXJuIElmKGEsYixjLGQsZSxmKX1jYXRjaChrKXtZKGgpO2lmKGshPT1rKzApdGhyb3cgaztYKDEsMCl9fWZ1bmN0aW9uIEZjKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtyZXR1cm4gS2YoYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fWZ1bmN0aW9uIFFkKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7TGYoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1cbmZ1bmN0aW9uIFRkKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtOZihhLGIsYyxkLGUpfWNhdGNoKGgpe1koZik7aWYoaCE9PWgrMCl0aHJvdyBoO1goMSwwKX19ZnVuY3Rpb24gVmQoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7TWYoYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24gWmQoYSxiLGMsZCxlLGYsaCl7dmFyIGs9WigpO3RyeXtPZihhLGIsYyxkLGUsZixoKX1jYXRjaChsKXtZKGspO2lmKGwhPT1sKzApdGhyb3cgbDtYKDEsMCl9fWZ1bmN0aW9uIGtlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKXt2YXIgcj1aKCk7dHJ5e1FmKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKX1jYXRjaChwKXtZKHIpO2lmKHAhPT1wKzApdGhyb3cgcDtYKDEsMCl9fWZ1bmN0aW9uIHpjKGEsYixjKXt2YXIgZD1aKCk7dHJ5e3JldHVybiBTZihhLGIsYyl9Y2F0Y2goZSl7WShkKTtpZihlIT09ZSswKXRocm93IGU7WCgxLDApfX1cbmZ1bmN0aW9uIEFjKGEsYixjKXt2YXIgZD1aKCk7dHJ5e3JldHVybiBUZihhLGIsYyl9Y2F0Y2goZSl7WShkKTtpZihlIT09ZSswKXRocm93IGU7WCgxLDApfX1mdW5jdGlvbiBtZChhLGIsYyl7dmFyIGQ9WigpO3RyeXtyZXR1cm4gVWYoYSxiLGMpfWNhdGNoKGUpe1koZCk7aWYoZSE9PWUrMCl0aHJvdyBlO1goMSwwKX19ZnVuY3Rpb24geWQoYSxiLGMpe3ZhciBkPVooKTt0cnl7cmV0dXJuIFZmKGEsYixjKX1jYXRjaChlKXtZKGQpO2lmKGUhPT1lKzApdGhyb3cgZTtYKDEsMCk7cmV0dXJuIDBufX1mdW5jdGlvbiBlZShhLGIsYyxkLGUsZixoLGssbCl7dmFyIG09WigpO3RyeXtYZihhLGIsYyxkLGUsZixoLGssbCl9Y2F0Y2gobil7WShtKTtpZihuIT09biswKXRocm93IG47WCgxLDApfX1mdW5jdGlvbiB4YyhhKXt2YXIgYj1aKCk7dHJ5e3JldHVybiBXZihhKX1jYXRjaChjKXtZKGIpO2lmKGMhPT1jKzApdGhyb3cgYztYKDEsMCl9fVxuZnVuY3Rpb24gZGYoYSxiLGMpe3ZhciBkPVooKTt0cnl7ZmcoYSxiLGMpfWNhdGNoKGUpe1koZCk7aWYoZSE9PWUrMCl0aHJvdyBlO1goMSwwKX19ZnVuY3Rpb24gV2UoYSxiLGMsZCxlKXt2YXIgZj1aKCk7dHJ5e1BmKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1mdW5jdGlvbiBDZShhLGIsYyxkLGUsZixoKXt2YXIgaz1aKCk7dHJ5e1lmKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19ZnVuY3Rpb24gY2YoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpe3ZhciByPVooKTt0cnl7Z2coYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpfWNhdGNoKHApe1kocik7aWYocCE9PXArMCl0aHJvdyBwO1goMSwwKX19XG5mdW5jdGlvbiBSZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSl7dmFyIHI9WigpO3RyeXtoZyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSl9Y2F0Y2gocCl7WShyKTtpZihwIT09cCswKXRocm93IHA7WCgxLDApfX1mdW5jdGlvbiBKYyhhLGIsYyxkLGUsZixoLGspe3ZhciBsPVooKTt0cnl7cmV0dXJuIGlnKGEsYixjLGQsZSxmLGgsayl9Y2F0Y2gobSl7WShsKTtpZihtIT09bSswKXRocm93IG07WCgxLDApfX1mdW5jdGlvbiBkZShhLGIsYyxkLGUsZixoLGspe3ZhciBsPVooKTt0cnl7amcoYSxiLGMsZCxlLGYsaCxrKX1jYXRjaChtKXtZKGwpO2lmKG0hPT1tKzApdGhyb3cgbTtYKDEsMCl9fWZ1bmN0aW9uIE5jKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKXt2YXIgcj1aKCk7dHJ5e3JldHVybiBhZyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSl9Y2F0Y2gocCl7WShyKTtpZihwIT09cCswKXRocm93IHA7WCgxLDApfX1cbmZ1bmN0aW9uIGZlKGEsYixjLGQsZSxmLGgsayxsLG0pe3ZhciBuPVooKTt0cnl7YmcoYSxiLGMsZCxlLGYsaCxrLGwsbSl9Y2F0Y2gocSl7WShuKTtpZihxIT09cSswKXRocm93IHE7WCgxLDApfX1mdW5jdGlvbiBtZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApe3ZhciB1PVooKTt0cnl7bGcoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKX1jYXRjaCh5KXtZKHUpO2lmKHkhPT15KzApdGhyb3cgeTtYKDEsMCl9fWZ1bmN0aW9uIFljKGEsYixjLGQsZSxmLGgsayxsLG0sbil7dmFyIHE9WigpO3RyeXtyZXR1cm4gbmcoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKX1jYXRjaChyKXtZKHEpO2lmKHIhPT1yKzApdGhyb3cgcjtYKDEsMCl9fWZ1bmN0aW9uIEtjKGEsYixjLGQsZSxmLGgsayxsKXt2YXIgbT1aKCk7dHJ5e3JldHVybiBtZyhhLGIsYyxkLGUsZixoLGssbCl9Y2F0Y2gobil7WShtKTtpZihuIT09biswKXRocm93IG47WCgxLDApfX1cbmZ1bmN0aW9uIG5mKGEsYixjLGQsZSxmLGgsayxsKXt2YXIgbT1aKCk7dHJ5e29nKGEsYixjLGQsZSxmLGgsayxsKX1jYXRjaChuKXtZKG0pO2lmKG4hPT1uKzApdGhyb3cgbjtYKDEsMCl9fWZ1bmN0aW9uIFZlKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7JGYoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1mdW5jdGlvbiB0YyhhLGIpe3ZhciBjPVooKTt0cnl7cmV0dXJuIHBnKGEsYil9Y2F0Y2goZCl7WShjKTtpZihkIT09ZCswKXRocm93IGQ7WCgxLDApfX1mdW5jdGlvbiB4ZChhLGIpe3ZhciBjPVooKTt0cnl7cmV0dXJuIFpmKGEsYil9Y2F0Y2goZCl7WShjKTtpZihkIT09ZCswKXRocm93IGQ7WCgxLDApO3JldHVybiAwbn19ZnVuY3Rpb24gbmMoYSxiKXt2YXIgYz1aKCk7dHJ5e3JldHVybiByZyhhLGIpfWNhdGNoKGQpe1koYyk7aWYoZCE9PWQrMCl0aHJvdyBkO1goMSwwKX19XG5mdW5jdGlvbiBqZihhLGIsYyxkKXt2YXIgZT1aKCk7dHJ5e3RnKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKX19ZnVuY3Rpb24gT2UoYSxiLGMsZCxlLGYsaCl7dmFyIGs9WigpO3RyeXtJaShhLGIsYyxkLGUsZixoKX1jYXRjaChsKXtZKGspO2lmKGwhPT1sKzApdGhyb3cgbDtYKDEsMCl9fWZ1bmN0aW9uIFplKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXt6aChhLGIsYyxkLGUpfWNhdGNoKGgpe1koZik7aWYoaCE9PWgrMCl0aHJvdyBoO1goMSwwKX19ZnVuY3Rpb24gTGMoYSxiLGMsZCxlLGYsaCxrLGwsbSl7dmFyIG49WigpO3RyeXtyZXR1cm4gdWcoYSxiLGMsZCxlLGYsaCxrLGwsbSl9Y2F0Y2gocSl7WShuKTtpZihxIT09cSswKXRocm93IHE7WCgxLDApfX1mdW5jdGlvbiBYZShhLGIsYyxkLGUsZixoKXt2YXIgaz1aKCk7dHJ5e3ZnKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19XG5mdW5jdGlvbiBLZChhLGIsYyxkKXt2YXIgZT1aKCk7dHJ5e3dnKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKX19ZnVuY3Rpb24gVGMoYSxiLGMsZCxlLGYsaCxrLGwpe3ZhciBtPVooKTt0cnl7cmV0dXJuIGtnKGEsYixjLGQsZSxmLGgsayxsKX1jYXRjaChuKXtZKG0pO2lmKG4hPT1uKzApdGhyb3cgbjtYKDEsMCl9fWZ1bmN0aW9uIElkKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7eGcoYSxiLGMsZCxlLGYsaCl9Y2F0Y2gobCl7WShrKTtpZihsIT09bCswKXRocm93IGw7WCgxLDApfX1mdW5jdGlvbiBVZShhLGIsYyxkLGUsZixoLGssbCl7dmFyIG09WigpO3RyeXtSZihhLGIsYyxkLGUsZixoLGssbCl9Y2F0Y2gobil7WShtKTtpZihuIT09biswKXRocm93IG47WCgxLDApfX1cbmZ1bmN0aW9uIFBkKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7eWcoYSxiLGMsZCxlLGYsaCl9Y2F0Y2gobCl7WShrKTtpZihsIT09bCswKXRocm93IGw7WCgxLDApfX1mdW5jdGlvbiBXZChhLGIsYyxkLGUsZixoLGssbCxtLG4pe3ZhciBxPVooKTt0cnl7emcoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKX1jYXRjaChyKXtZKHEpO2lmKHIhPT1yKzApdGhyb3cgcjtYKDEsMCl9fWZ1bmN0aW9uIHpkKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7cmV0dXJuIEJnKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKTtyZXR1cm4gMG59fWZ1bmN0aW9uIHVmKGEsYixjLGQsZSxmLGgsayl7dmFyIGw9WigpO3RyeXtDZyhhLGIsYyxkLGUsZixoLGspfWNhdGNoKG0pe1kobCk7aWYobSE9PW0rMCl0aHJvdyBtO1goMSwwKX19XG5mdW5jdGlvbiBSZChhLGIsYyxkLGUpe3ZhciBmPVooKTt0cnl7RGcoYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fWZ1bmN0aW9uIGVmKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7RmcoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1mdW5jdGlvbiByZihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KXt2YXIgQT1aKCk7dHJ5e0dnKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpfWNhdGNoKEIpe1koQSk7aWYoQiE9PUIrMCl0aHJvdyBCO1goMSwwKX19ZnVuY3Rpb24gTmUoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7SGcoYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19XG5mdW5jdGlvbiBvZihhLGIsYyxkLGUsZixoLGssbCl7dmFyIG09WigpO3RyeXtJZyhhLGIsYyxkLGUsZixoLGssbCl9Y2F0Y2gobil7WShtKTtpZihuIT09biswKXRocm93IG47WCgxLDApfX1mdW5jdGlvbiBlZChhLGIsYyxkLGUpe3ZhciBmPVooKTt0cnl7cmV0dXJuIEpnKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1mdW5jdGlvbiBrZChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApe3ZhciB1PVooKTt0cnl7cmV0dXJuIEtnKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCl9Y2F0Y2goeSl7WSh1KTtpZih5IT09eSswKXRocm93IHk7WCgxLDApfX1mdW5jdGlvbiBzZihhLGIpe3ZhciBjPVooKTt0cnl7TGcoYSxiKX1jYXRjaChkKXtZKGMpO2lmKGQhPT1kKzApdGhyb3cgZDtYKDEsMCl9fVxuZnVuY3Rpb24gQ2QoYSxiLGMpe3ZhciBkPVooKTt0cnl7cmV0dXJuIE1nKGEsYixjKX1jYXRjaChlKXtZKGQpO2lmKGUhPT1lKzApdGhyb3cgZTtYKDEsMCk7cmV0dXJuIDBufX1mdW5jdGlvbiBqZChhLGIsYyxkLGUsZixoLGssbCxtKXt2YXIgbj1aKCk7dHJ5e3JldHVybiBOZyhhLGIsYyxkLGUsZixoLGssbCxtKX1jYXRjaChxKXtZKG4pO2lmKHEhPT1xKzApdGhyb3cgcTtYKDEsMCl9fWZ1bmN0aW9uIGllKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCl7dmFyIHU9WigpO3RyeXtTZyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApfWNhdGNoKHkpe1kodSk7aWYoeSE9PXkrMCl0aHJvdyB5O1goMSwwKX19ZnVuY3Rpb24gRWQoYSxiLGMsZCxlKXt2YXIgZj1aKCk7dHJ5e09nKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1cbmZ1bmN0aW9uIFVkKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7UGcoYSxiLGMsZCxlLGYsaCl9Y2F0Y2gobCl7WShrKTtpZihsIT09bCswKXRocm93IGw7WCgxLDApfX1mdW5jdGlvbiBNZChhLGIsYyxkLGUpe3ZhciBmPVooKTt0cnl7UmcoYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fWZ1bmN0aW9uIFhkKGEsYixjLGQsZSxmLGgsayl7dmFyIGw9WigpO3RyeXtRZyhhLGIsYyxkLGUsZixoLGspfWNhdGNoKG0pe1kobCk7aWYobSE9PW0rMCl0aHJvdyBtO1goMSwwKX19ZnVuY3Rpb24gdWUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKXt2YXIgcT1aKCk7dHJ5e1RnKGEsYixjLGQsZSxmLGgsayxsLG0sbil9Y2F0Y2gocil7WShxKTtpZihyIT09ciswKXRocm93IHI7WCgxLDApfX1cbmZ1bmN0aW9uIE9jKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSl7dmFyIEI9WigpO3RyeXtyZXR1cm4gVWcoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBKX1jYXRjaChDKXtZKEIpO2lmKEMhPT1DKzApdGhyb3cgQztYKDEsMCl9fWZ1bmN0aW9uIGxlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpe3ZhciBwPVooKTt0cnl7VmcoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil9Y2F0Y2godSl7WShwKTtpZih1IT09dSswKXRocm93IHU7WCgxLDApfX1mdW5jdGlvbiBzZChhLGIpe3ZhciBjPVooKTt0cnl7cmV0dXJuIGNnKGEsYil9Y2F0Y2goZCl7WShjKTtpZihkIT09ZCswKXRocm93IGQ7WCgxLDApfX1mdW5jdGlvbiB3YyhhLGIsYyxkLGUpe3ZhciBmPVooKTt0cnl7cmV0dXJuIEtpKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1cbmZ1bmN0aW9uIFBjKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCl7dmFyIEY9WigpO3RyeXtyZXR1cm4gV2coYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxEKX1jYXRjaChIKXtZKEYpO2lmKEghPT1IKzApdGhyb3cgSDtYKDEsMCl9fWZ1bmN0aW9uIG1mKGEsYixjLGQsZSxmLGgsayxsLG0pe3ZhciBuPVooKTt0cnl7WGcoYSxiLGMsZCxlLGYsaCxrLGwsbSl9Y2F0Y2gocSl7WShuKTtpZihxIT09cSswKXRocm93IHE7WCgxLDApfX1mdW5jdGlvbiBjZChhLGIsYyxkLGUsZixoKXt2YXIgaz1aKCk7dHJ5e3JldHVybiBZZyhhLGIsYyxkLGUsZixoKX1jYXRjaChsKXtZKGspO2lmKGwhPT1sKzApdGhyb3cgbDtYKDEsMCl9fWZ1bmN0aW9uIGplKGEsYixjLGQsZSxmLGgsayxsLG0sbil7dmFyIHE9WigpO3RyeXtaZyhhLGIsYyxkLGUsZixoLGssbCxtLG4pfWNhdGNoKHIpe1kocSk7aWYociE9PXIrMCl0aHJvdyByO1goMSwwKX19XG5mdW5jdGlvbiBsZChhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtyZXR1cm4gJGcoYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24gSWUoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7YmgoYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24geWUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKXt2YXIgdT1aKCk7dHJ5e2NoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCl9Y2F0Y2goeSl7WSh1KTtpZih5IT09eSswKXRocm93IHk7WCgxLDApfX1mdW5jdGlvbiB6ZihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQil7dmFyIEM9WigpO3RyeXtkaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQil9Y2F0Y2goRCl7WShDKTtpZihEIT09RCswKXRocm93IEQ7WCgxLDApfX1cbmZ1bmN0aW9uIGFlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSl7dmFyIEI9WigpO3RyeXtlaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEpfWNhdGNoKEMpe1koQik7aWYoQyE9PUMrMCl0aHJvdyBDO1goMSwwKX19ZnVuY3Rpb24gJGQoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSl7dmFyIEE9WigpO3RyeXtmaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KX1jYXRjaChCKXtZKEEpO2lmKEIhPT1CKzApdGhyb3cgQjtYKDEsMCl9fWZ1bmN0aW9uIGJlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KXt2YXIgeT1aKCk7dHJ5e2doKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KX1jYXRjaChBKXtZKHkpO2lmKEEhPT1BKzApdGhyb3cgQTtYKDEsMCl9fVxuZnVuY3Rpb24gQWYoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYpe3ZhciBIPVooKTt0cnl7aGgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYpfWNhdGNoKEspe1koSCk7aWYoSyE9PUsrMCl0aHJvdyBLO1goMSwwKX19ZnVuY3Rpb24geWYoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyl7dmFyIEQ9WigpO3RyeXtpaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDKX1jYXRjaChGKXtZKEQpO2lmKEYhPT1GKzApdGhyb3cgRjtYKDEsMCl9fWZ1bmN0aW9uIHhmKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCKXt2YXIgQz1aKCk7dHJ5e2poKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCKX1jYXRjaChEKXtZKEMpO2lmKEQhPT1EKzApdGhyb3cgRDtYKDEsMCl9fVxuZnVuY3Rpb24gQmYoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYpe3ZhciBIPVooKTt0cnl7a2goYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYpfWNhdGNoKEspe1koSCk7aWYoSyE9PUsrMCl0aHJvdyBLO1goMSwwKX19ZnVuY3Rpb24gZ2YoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil7dmFyIHA9WigpO3RyeXtsaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKX1jYXRjaCh1KXtZKHApO2lmKHUhPT11KzApdGhyb3cgdTtYKDEsMCl9fWZ1bmN0aW9uIGtmKGEsYixjLGQsZSxmLGgsayxsLG0pe3ZhciBuPVooKTt0cnl7bWgoYSxiLGMsZCxlLGYsaCxrLGwsbSl9Y2F0Y2gocSl7WShuKTtpZihxIT09cSswKXRocm93IHE7WCgxLDApfX1cbmZ1bmN0aW9uIHZlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpe3ZhciBwPVooKTt0cnl7bmgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil9Y2F0Y2godSl7WShwKTtpZih1IT09dSswKXRocm93IHU7WCgxLDApfX1mdW5jdGlvbiBxZihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSl7dmFyIHk9WigpO3RyeXtvaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSl9Y2F0Y2goQSl7WSh5KTtpZihBIT09QSswKXRocm93IEE7WCgxLDApfX1mdW5jdGlvbiB3ZihhLGIsYyxkLGUsZixoLGssbCxtKXt2YXIgbj1aKCk7dHJ5e3FoKGEsYixjLGQsZSxmLGgsayxsLG0pfWNhdGNoKHEpe1kobik7aWYocSE9PXErMCl0aHJvdyBxO1goMSwwKX19ZnVuY3Rpb24gdmYoYSxiLGMsZCxlLGYsaCxrLGwpe3ZhciBtPVooKTt0cnl7cmgoYSxiLGMsZCxlLGYsaCxrLGwpfWNhdGNoKG4pe1kobSk7aWYobiE9PW4rMCl0aHJvdyBuO1goMSwwKX19XG5mdW5jdGlvbiBzYyhhLGIsYyxkLGUsZixoKXt2YXIgaz1aKCk7dHJ5e3JldHVybiBhaChhLGIsYyxkLGUsZixoKX1jYXRjaChsKXtZKGspO2lmKGwhPT1sKzApdGhyb3cgbDtYKDEsMCl9fWZ1bmN0aW9uIE5kKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtwaChhLGIsYyxkLGUpfWNhdGNoKGgpe1koZik7aWYoaCE9PWgrMCl0aHJvdyBoO1goMSwwKX19ZnVuY3Rpb24gd2QoYSxiLGMpe3ZhciBkPVooKTt0cnl7cmV0dXJuIExpKGEsYixjKX1jYXRjaChlKXtZKGQpO2lmKGUhPT1lKzApdGhyb3cgZTtYKDEsMCk7cmV0dXJuIDBufX1mdW5jdGlvbiB6ZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApe3ZhciB1PVooKTt0cnl7c2goYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKX1jYXRjaCh5KXtZKHUpO2lmKHkhPT15KzApdGhyb3cgeTtYKDEsMCl9fVxuZnVuY3Rpb24gR2UoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil7dmFyIHA9WigpO3RyeXt1aChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKX1jYXRjaCh1KXtZKHApO2lmKHUhPT11KzApdGhyb3cgdTtYKDEsMCl9fWZ1bmN0aW9uIFhjKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7cmV0dXJuIHZoKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19ZnVuY3Rpb24gYWQoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7cmV0dXJuIHdoKGEsYixjLGQsZSxmKX1jYXRjaChrKXtZKGgpO2lmKGshPT1rKzApdGhyb3cgaztYKDEsMCl9fWZ1bmN0aW9uIERlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpe3ZhciBwPVooKTt0cnl7eGgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil9Y2F0Y2godSl7WShwKTtpZih1IT09dSswKXRocm93IHU7WCgxLDApfX1cbmZ1bmN0aW9uIGxmKGEsYixjLGQsZSxmKXt2YXIgaD1aKCk7dHJ5e3RoKGEsYixjLGQsZSxmKX1jYXRjaChrKXtZKGgpO2lmKGshPT1rKzApdGhyb3cgaztYKDEsMCl9fWZ1bmN0aW9uIFFlKGEsYixjLGQsZSxmLGgsayxsLG0sbil7dmFyIHE9WigpO3RyeXt5aChhLGIsYyxkLGUsZixoLGssbCxtLG4pfWNhdGNoKHIpe1kocSk7aWYociE9PXIrMCl0aHJvdyByO1goMSwwKX19ZnVuY3Rpb24gS2UoYSxiLGMsZCxlLGYsaCxrKXt2YXIgbD1aKCk7dHJ5e0FoKGEsYixjLGQsZSxmLGgsayl9Y2F0Y2gobSl7WShsKTtpZihtIT09bSswKXRocm93IG07WCgxLDApfX1mdW5jdGlvbiBhZihhLGIsYyxkLGUsZixoLGspe3ZhciBsPVooKTt0cnl7QmgoYSxiLGMsZCxlLGYsaCxrKX1jYXRjaChtKXtZKGwpO2lmKG0hPT1tKzApdGhyb3cgbTtYKDEsMCl9fVxuZnVuY3Rpb24gdGQoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtyZXR1cm4gQ2goYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1mdW5jdGlvbiBIZShhLGIsYyxkLGUsZixoLGssbCxtKXt2YXIgbj1aKCk7dHJ5e0RoKGEsYixjLGQsZSxmLGgsayxsLG0pfWNhdGNoKHEpe1kobik7aWYocSE9PXErMCl0aHJvdyBxO1goMSwwKX19ZnVuY3Rpb24gcGYoYSxiLGMsZCxlLGYsaCxrLGwpe3ZhciBtPVooKTt0cnl7RWgoYSxiLGMsZCxlLGYsaCxrLGwpfWNhdGNoKG4pe1kobSk7aWYobiE9PW4rMCl0aHJvdyBuO1goMSwwKX19ZnVuY3Rpb24gRmUoYSxiLGMsZCxlLGYsaCxrLGwpe3ZhciBtPVooKTt0cnl7RmgoYSxiLGMsZCxlLGYsaCxrLGwpfWNhdGNoKG4pe1kobSk7aWYobiE9PW4rMCl0aHJvdyBuO1goMSwwKX19XG5mdW5jdGlvbiBBZShhLGIsYyxkLGUsZixoLGssbCxtKXt2YXIgbj1aKCk7dHJ5e0doKGEsYixjLGQsZSxmLGgsayxsLG0pfWNhdGNoKHEpe1kobik7aWYocSE9PXErMCl0aHJvdyBxO1goMSwwKX19ZnVuY3Rpb24gZmYoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7SGgoYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24gaGUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpe3ZhciByPVooKTt0cnl7SWgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpfWNhdGNoKHApe1kocik7aWYocCE9PXArMCl0aHJvdyBwO1goMSwwKX19ZnVuY3Rpb24gaGQoYSxiLGMsZCxlLGYsaCxrKXt2YXIgbD1aKCk7dHJ5e3JldHVybiBKaChhLGIsYyxkLGUsZixoLGspfWNhdGNoKG0pe1kobCk7aWYobSE9PW0rMCl0aHJvdyBtO1goMSwwKX19XG5mdW5jdGlvbiBuZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSl7dmFyIHk9WigpO3RyeXtNaShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSl9Y2F0Y2goQSl7WSh5KTtpZihBIT09QSswKXRocm93IEE7WCgxLDApfX1mdW5jdGlvbiBCZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApe3ZhciB1PVooKTt0cnl7S2goYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKX1jYXRjaCh5KXtZKHUpO2lmKHkhPT15KzApdGhyb3cgeTtYKDEsMCl9fWZ1bmN0aW9uIHdlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KXt2YXIgeT1aKCk7dHJ5e0xoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KX1jYXRjaChBKXtZKHkpO2lmKEEhPT1BKzApdGhyb3cgQTtYKDEsMCl9fWZ1bmN0aW9uIEhkKGEsYixjKXt2YXIgZD1aKCk7dHJ5e01oKGEsYixjKX1jYXRjaChlKXtZKGQpO2lmKGUhPT1lKzApdGhyb3cgZTtYKDEsMCl9fVxuZnVuY3Rpb24gdmMoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtyZXR1cm4gT2goYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1mdW5jdGlvbiBwYyhhLGIsYyxkKXt2YXIgZT1aKCk7dHJ5e3JldHVybiBQaChhLGIsYyxkKX1jYXRjaChmKXtZKGUpO2lmKGYhPT1mKzApdGhyb3cgZjtYKDEsMCl9fWZ1bmN0aW9uIGNlKGEsYixjLGQsZSxmLGgsayxsLG0pe3ZhciBuPVooKTt0cnl7UWgoYSxiLGMsZCxlLGYsaCxrLGwsbSl9Y2F0Y2gocSl7WShuKTtpZihxIT09cSswKXRocm93IHE7WCgxLDApfX1mdW5jdGlvbiBFZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRixILEssVmEsV2EsWGEpe3ZhciBRaT1aKCk7dHJ5e1JoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCxGLEgsSyxWYSxXYSxYYSl9Y2F0Y2goWWEpe1koUWkpO2lmKFlhIT09WWErMCl0aHJvdyBZYTtYKDEsMCl9fVxuZnVuY3Rpb24gJGUoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7U2goYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24gUmMoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil7dmFyIHA9WigpO3RyeXtyZXR1cm4gVGgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil9Y2F0Y2godSl7WShwKTtpZih1IT09dSswKXRocm93IHU7WCgxLDApfX1mdW5jdGlvbiBPZChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKXt2YXIgcD1aKCk7dHJ5e1VoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpfWNhdGNoKHUpe1kocCk7aWYodSE9PXUrMCl0aHJvdyB1O1goMSwwKX19XG5mdW5jdGlvbiBzZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRil7dmFyIEg9WigpO3RyeXtWaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRil9Y2F0Y2goSyl7WShIKTtpZihLIT09SyswKXRocm93IEs7WCgxLDApfX1mdW5jdGlvbiBZZChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKXt2YXIgcD1aKCk7dHJ5e1doKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpfWNhdGNoKHUpe1kocCk7aWYodSE9PXUrMCl0aHJvdyB1O1goMSwwKX19ZnVuY3Rpb24gaGYoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKXt2YXIgdT1aKCk7dHJ5e1hoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCl9Y2F0Y2goeSl7WSh1KTtpZih5IT09eSswKXRocm93IHk7WCgxLDApfX1cbmZ1bmN0aW9uIHJlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCl7dmFyIEY9WigpO3RyeXtaaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQpfWNhdGNoKEgpe1koRik7aWYoSCE9PUgrMCl0aHJvdyBIO1goMSwwKX19ZnVuY3Rpb24gcGUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBKXt2YXIgQj1aKCk7dHJ5e2FpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSl9Y2F0Y2goQyl7WShCKTtpZihDIT09QyswKXRocm93IEM7WCgxLDApfX1mdW5jdGlvbiBxZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDKXt2YXIgRD1aKCk7dHJ5e1loKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMpfWNhdGNoKEYpe1koRCk7aWYoRiE9PUYrMCl0aHJvdyBGO1goMSwwKX19XG5mdW5jdGlvbiBMZShhLGIsYyxkLGUsZixoLGspe3ZhciBsPVooKTt0cnl7YmkoYSxiLGMsZCxlLGYsaCxrKX1jYXRjaChtKXtZKGwpO2lmKG0hPT1tKzApdGhyb3cgbTtYKDEsMCl9fWZ1bmN0aW9uIHhlKGEsYixjLGQsZSxmLGgsayxsLG0sbil7dmFyIHE9WigpO3RyeXtkaShhLGIsYyxkLGUsZixoLGssbCxtLG4pfWNhdGNoKHIpe1kocSk7aWYociE9PXIrMCl0aHJvdyByO1goMSwwKX19ZnVuY3Rpb24gTWMoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKXt2YXIgcT1aKCk7dHJ5e3JldHVybiBlaShhLGIsYyxkLGUsZixoLGssbCxtLG4pfWNhdGNoKHIpe1kocSk7aWYociE9PXIrMCl0aHJvdyByO1goMSwwKX19XG5mdW5jdGlvbiBRYyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQpe3ZhciBGPVooKTt0cnl7cmV0dXJuIGZpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCl9Y2F0Y2goSCl7WShGKTtpZihIIT09SCswKXRocm93IEg7WCgxLDApfX1mdW5jdGlvbiBTZChhLGIsYyxkLGUpe3ZhciBmPVooKTt0cnl7Z2koYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fWZ1bmN0aW9uIGdlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKXt2YXIgcj1aKCk7dHJ5e0FnKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKX1jYXRjaChwKXtZKHIpO2lmKHAhPT1wKzApdGhyb3cgcDtYKDEsMCl9fWZ1bmN0aW9uIFBlKGEsYixjLGQsZSxmLGgsayxsLG0pe3ZhciBuPVooKTt0cnl7aGkoYSxiLGMsZCxlLGYsaCxrLGwsbSl9Y2F0Y2gocSl7WShuKTtpZihxIT09cSswKXRocm93IHE7WCgxLDApfX1cbmZ1bmN0aW9uIE1lKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtpaShhLGIsYyxkLGUpfWNhdGNoKGgpe1koZik7aWYoaCE9PWgrMCl0aHJvdyBoO1goMSwwKX19ZnVuY3Rpb24gWWUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil7dmFyIHA9WigpO3RyeXtKaShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKX1jYXRjaCh1KXtZKHApO2lmKHUhPT11KzApdGhyb3cgdTtYKDEsMCl9fWZ1bmN0aW9uIHBkKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtyZXR1cm4gamkoYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fWZ1bmN0aW9uIEFkKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7cmV0dXJuIE5pKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKTtyZXR1cm4gMG59fVxuZnVuY3Rpb24gSmUoYSxiLGMsZCxlLGYsaCl7dmFyIGs9WigpO3RyeXtraShhLGIsYyxkLGUsZixoKX1jYXRjaChsKXtZKGspO2lmKGwhPT1sKzApdGhyb3cgbDtYKDEsMCl9fWZ1bmN0aW9uIHFkKGEsYixjLGQsZSxmKXt2YXIgaD1aKCk7dHJ5e3JldHVybiBsaShhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1mdW5jdGlvbiB1ZChhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtyZXR1cm4gbWkoYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24gU2UoYSxiLGMsZCxlLGYsaCxrLGwpe3ZhciBtPVooKTt0cnl7bmkoYSxiLGMsZCxlLGYsaCxrLGwpfWNhdGNoKG4pe1kobSk7aWYobiE9PW4rMCl0aHJvdyBuO1goMSwwKX19XG5mdW5jdGlvbiBMZChhLGIsYyxkKXt2YXIgZT1aKCk7dHJ5e05oKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKX19ZnVuY3Rpb24gWmMoYSxiLGMsZCxlLGYsaCxrKXt2YXIgbD1aKCk7dHJ5e3JldHVybiBvaShhLGIsYyxkLGUsZixoLGspfWNhdGNoKG0pe1kobCk7aWYobSE9PW0rMCl0aHJvdyBtO1goMSwwKX19ZnVuY3Rpb24gRWMoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7cmV0dXJuIHBpKGEsYixjLGQsZSxmKX1jYXRjaChrKXtZKGgpO2lmKGshPT1rKzApdGhyb3cgaztYKDEsMCl9fWZ1bmN0aW9uIGZkKGEsYixjLGQsZSxmKXt2YXIgaD1aKCk7dHJ5e3JldHVybiBxaShhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1cbmZ1bmN0aW9uIFNjKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKXt2YXIgcj1aKCk7dHJ5e3JldHVybiByaShhLGIsYyxkLGUsZixoLGssbCxtLG4scSl9Y2F0Y2gocCl7WShyKTtpZihwIT09cCswKXRocm93IHA7WCgxLDApfX1mdW5jdGlvbiBiZChhLGIsYyxkLGUsZixoLGspe3ZhciBsPVooKTt0cnl7cmV0dXJuIHNpKGEsYixjLGQsZSxmLGgsayl9Y2F0Y2gobSl7WShsKTtpZihtIT09bSswKXRocm93IG07WCgxLDApfX1mdW5jdGlvbiBWYyhhLGIsYyxkLGUsZixoLGssbCxtLG4pe3ZhciBxPVooKTt0cnl7cmV0dXJuIHRpKGEsYixjLGQsZSxmLGgsayxsLG0sbil9Y2F0Y2gocil7WShxKTtpZihyIT09ciswKXRocm93IHI7WCgxLDApfX1mdW5jdGlvbiBnZChhLGIsYyxkLGUsZixoKXt2YXIgaz1aKCk7dHJ5e3JldHVybiB1aShhLGIsYyxkLGUsZixoKX1jYXRjaChsKXtZKGspO2lmKGwhPT1sKzApdGhyb3cgbDtYKDEsMCl9fVxuZnVuY3Rpb24gVWMoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil7dmFyIHA9WigpO3RyeXtyZXR1cm4gdmkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil9Y2F0Y2godSl7WShwKTtpZih1IT09dSswKXRocm93IHU7WCgxLDApfX1mdW5jdGlvbiBvZChhLGIsYyxkLGUsZixoKXt2YXIgaz1aKCk7dHJ5e3JldHVybiB3aShhLGIsYyxkLGUsZixoKX1jYXRjaChsKXtZKGspO2lmKGwhPT1sKzApdGhyb3cgbDtYKDEsMCl9fWZ1bmN0aW9uIHJkKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7cmV0dXJuIHhpKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19ZnVuY3Rpb24gQmQoYSxiLGMpe3ZhciBkPVooKTt0cnl7cmV0dXJuIHlpKGEsYixjKX1jYXRjaChlKXtZKGQpO2lmKGUhPT1lKzApdGhyb3cgZTtYKDEsMCk7cmV0dXJuIDBufX1cbmZ1bmN0aW9uIG5kKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7cmV0dXJuIHppKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKX19ZnVuY3Rpb24gR2QoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtCaShhLGIsYyxkKX1jYXRjaChmKXtZKGUpO2lmKGYhPT1mKzApdGhyb3cgZjtYKDEsMCl9fWZ1bmN0aW9uIENjKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7cmV0dXJuIEFpKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKX19ZnVuY3Rpb24gdGYoYSxiLGMsZCxlKXt2YXIgZj1aKCk7dHJ5e0NpKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1mdW5jdGlvbiBxYyhhLGIsYyxkLGUpe3ZhciBmPVooKTt0cnl7cmV0dXJuIERpKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1cbmZ1bmN0aW9uIHJjKGEsYixjLGQsZSxmKXt2YXIgaD1aKCk7dHJ5e3JldHVybiBFaShhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1mdW5jdGlvbiBUZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSl7dmFyIHI9WigpO3RyeXtGaShhLGIsYyxkLGUsZixoLGssbCxtLG4scSl9Y2F0Y2gocCl7WShyKTtpZihwIT09cCswKXRocm93IHA7WCgxLDApfX1mdW5jdGlvbiBiZihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKXt2YXIgcD1aKCk7dHJ5e0dpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpfWNhdGNoKHUpe1kocCk7aWYodSE9PXUrMCl0aHJvdyB1O1goMSwwKX19ZnVuY3Rpb24gdGUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpe3ZhciByPVooKTt0cnl7RWcoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpfWNhdGNoKHApe1kocik7aWYocCE9PXArMCl0aHJvdyBwO1goMSwwKX19XG5mdW5jdGlvbiAkYyhhLGIsYyxkLGUpe3ZhciBmPVooKTt0cnl7cmV0dXJuIEhpKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1mdW5jdGlvbiB2ZChhKXt2YXIgYj1aKCk7dHJ5e3JldHVybiBlZyhhKX1jYXRjaChjKXtZKGIpO2lmKGMhPT1jKzApdGhyb3cgYztYKDEsMCk7cmV0dXJuIDBufX1mdW5jdGlvbiBXYyhhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtyZXR1cm4gZGcoYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24gR2MoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7cmV0dXJuIGNpKGEsYixjLGQsZSxmKX1jYXRjaChrKXtZKGgpO2lmKGshPT1rKzApdGhyb3cgaztYKDEsMCl9fVxuZnVuY3Rpb24gb2UoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSl7dmFyIEE9WigpO3RyeXskaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KX1jYXRjaChCKXtZKEEpO2lmKEIhPT1CKzApdGhyb3cgQjtYKDEsMCl9fWZ1bmN0aW9uIHVjKGEsYixjKXt2YXIgZD1aKCk7dHJ5e3JldHVybiBxZyhhLGIsYyl9Y2F0Y2goZSl7WShkKTtpZihlIT09ZSswKXRocm93IGU7WCgxLDApfX1mdW5jdGlvbiBvYyhhLGIsYyl7dmFyIGQ9WigpO3RyeXtyZXR1cm4gc2coYSxiLGMpfWNhdGNoKGUpe1koZCk7aWYoZSE9PWUrMCl0aHJvdyBlO1goMSwwKX19ZnVuY3Rpb24gRGYoKXt2YXIgYT1VO2E9T2JqZWN0LmFzc2lnbih7fSxhKTt2YXIgYj1jPT5kPT5jKGQpPj4+MDthLkZkPWIoYS5GZCk7YS5oZT1iKGEuaGUpO2EubmU9YihhLm5lKTthLm9lPShjPT4oKT0+YygpPj4+MCkoYS5vZSk7cmV0dXJuIGF9Zy5zdGFja1NhdmU9KCk9PlooKTtnLnN0YWNrUmVzdG9yZT1hPT5ZKGEpO1xuZy5zdGFja0FsbG9jPWE9PkVmKGEpO2cuVVRGOFRvU3RyaW5nPUo7Zy5zdHJpbmdUb1VURjg9KGEsYixjKT0+TShhLEUsYixjKTtnLmxlbmd0aEJ5dGVzVVRGOD1iYjt2YXIgT2k7RmE9ZnVuY3Rpb24gUGkoKXtPaXx8UmkoKTtPaXx8KEZhPVBpKX07ZnVuY3Rpb24gUmkoKXtpZighKDA8RGEpKXtpZihnLnByZVJ1bilmb3IoXCJmdW5jdGlvblwiPT10eXBlb2YgZy5wcmVSdW4mJihnLnByZVJ1bj1bZy5wcmVSdW5dKTtnLnByZVJ1bi5sZW5ndGg7KXt2YXIgYT1nLnByZVJ1bi5zaGlmdCgpO0FhLnVuc2hpZnQoYSl9Zm9yKDswPEFhLmxlbmd0aDspQWEuc2hpZnQoKShnKTtpZighKDA8RGF8fE9pfHwoT2k9ITAsZy5jYWxsZWRSdW49ITAseCkpKXtmb3IoOzA8QmEubGVuZ3RoOylCYS5zaGlmdCgpKGcpO2ZvcihhYShnKTswPENhLmxlbmd0aDspQ2Euc2hpZnQoKShnKX19fVJpKCk7XG5cblxuICByZXR1cm4gcmVhZHlQcm9taXNlXG59XG4pO1xufSkoKTtcbmlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG4gIG1vZHVsZS5leHBvcnRzID0gb3J0V2FzbTtcbmVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSlcbiAgZGVmaW5lKFtdLCAoKSA9PiBvcnRXYXNtKTtcbiIsICIiLCAiIiwgImV4cG9ydCBjb25zdCBjcHVzID0gdW5kZWZpbmVkOyIsICJcbnZhciBvcnRXYXNtVGhyZWFkZWQgPSAoKCkgPT4ge1xuICB2YXIgX3NjcmlwdERpciA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIF9fZmlsZW5hbWUgIT09ICd1bmRlZmluZWQnKSBfc2NyaXB0RGlyID0gX3NjcmlwdERpciB8fCBfX2ZpbGVuYW1lO1xuICByZXR1cm4gKFxuZnVuY3Rpb24obW9kdWxlQXJnID0ge30pIHtcblxuZnVuY3Rpb24gZCgpe2wuYnVmZmVyIT1wLmJ1ZmZlciYmdCgpO3JldHVybiBwfWZ1bmN0aW9uIHYoKXtsLmJ1ZmZlciE9cC5idWZmZXImJnQoKTtyZXR1cm4gYWF9ZnVuY3Rpb24geigpe2wuYnVmZmVyIT1wLmJ1ZmZlciYmdCgpO3JldHVybiBiYX1mdW5jdGlvbiBBKCl7bC5idWZmZXIhPXAuYnVmZmVyJiZ0KCk7cmV0dXJuIGNhfWZ1bmN0aW9uIGRhKCl7bC5idWZmZXIhPXAuYnVmZmVyJiZ0KCk7cmV0dXJuIGVhfXZhciBCPW1vZHVsZUFyZyxmYSxDO0IucmVhZHk9bmV3IFByb21pc2UoKGEsYik9PntmYT1hO0M9Yn0pO1widXNlIHN0cmljdFwiO1xuQi5qc2VwSW5pdD0oYSxiLGMsZSxmLGgsayxxKT0+e0IuUWI9YTtCLndiPWI7Qi55Yj1jO0IuamI9ZTtCLnhiPWY7Qi5FYT1oO0IuemI9aztCLkFiPXE7Yj0obixtLHIpPT4oLi4udyk9Pntjb25zdCB4PUQsZz1tPy4oKTt3PW4oLi4udyk7Y29uc3QgdT1tPy4oKTtnIT09dSYmKG49dSxyKGcpLG09cj1udWxsKTtyZXR1cm4gRCE9eD9oYSgpOnd9O2M9bj0+YXN5bmMoLi4ubSk9Pnt0cnl7aWYoQi5iYil0aHJvdyBFcnJvcihcIlNlc3Npb24gYWxyZWFkeSBzdGFydGVkXCIpO2NvbnN0IHI9Qi5iYj17RmI6bVswXSxlcnJvcnM6W119LHc9YXdhaXQgbiguLi5tKTtpZihCLmJiIT09cil0aHJvdyBFcnJvcihcIlNlc3Npb24gbWlzbWF0Y2hcIik7YS5mbHVzaCgpO2NvbnN0IHg9ci5lcnJvcnM7aWYoMDx4Lmxlbmd0aCl7bGV0IGc9YXdhaXQgUHJvbWlzZS5hbGwoeCk7Zz1nLmZpbHRlcih1PT51KTtpZigwPGcubGVuZ3RoKXRocm93IEVycm9yKGcuam9pbihcIlxcblwiKSk7fXJldHVybiB3fWZpbmFsbHl7Qi5iYj1cbm51bGx9fTtCLl9PcnRSdW49YyhiKEIuX09ydFJ1biwoKT0+Qi5fT3J0UnVuLG49PkIuX09ydFJ1bj1uKSk7Qi5fT3J0UnVuV2l0aEJpbmRpbmc9YyhiKEIuX09ydFJ1bldpdGhCaW5kaW5nLCgpPT5CLl9PcnRSdW5XaXRoQmluZGluZyxuPT5CLl9PcnRSdW5XaXRoQmluZGluZz1uKSk7Qi5fT3J0QmluZElucHV0PWIoQi5fT3J0QmluZElucHV0LCgpPT5CLl9PcnRCaW5kSW5wdXQsbj0+Qi5fT3J0QmluZElucHV0PW4pO0IuanNlcFJlZ2lzdGVyQnVmZmVyPShuLG0scix3KT0+YS5yZWdpc3RlckJ1ZmZlcihuLG0scix3KTtCLmpzZXBVbnJlZ2lzdGVyQnVmZmVycz1uPT57YS51bnJlZ2lzdGVyQnVmZmVycyhuKX07Qi5qc2VwR2V0QnVmZmVyPW49PmEuZ2V0QnVmZmVyKG4pO0IuanNlcENyZWF0ZURvd25sb2FkZXI9KG4sbSxyKT0+YS5jcmVhdGVEb3dubG9hZGVyKG4sbSxyKX07XG52YXIgaWE9T2JqZWN0LmFzc2lnbih7fSxCKSxqYT1cIi4vdGhpcy5wcm9ncmFtXCIsRT0oYSxiKT0+e3Rocm93IGI7fSxrYT1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93LEY9XCJmdW5jdGlvblwiPT10eXBlb2YgaW1wb3J0U2NyaXB0cyxHPVwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcIm9iamVjdFwiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyYmXCJzdHJpbmdcIj09dHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSxIPUIuRU5WSVJPTk1FTlRfSVNfUFRIUkVBRHx8ITEsST1cIlwiO2Z1bmN0aW9uIGxhKGEpe3JldHVybiBCLmxvY2F0ZUZpbGU/Qi5sb2NhdGVGaWxlKGEsSSk6SSthfXZhciBtYSxKLG5hO1xuaWYoRyl7dmFyIGZzPXJlcXVpcmUoXCJmc1wiKSxvYT1yZXF1aXJlKFwicGF0aFwiKTtJPUY/b2EuZGlybmFtZShJKStcIi9cIjpfX2Rpcm5hbWUrXCIvXCI7bWE9KGIsYyk9PntiPWIuc3RhcnRzV2l0aChcImZpbGU6Ly9cIik/bmV3IFVSTChiKTpvYS5ub3JtYWxpemUoYik7cmV0dXJuIGZzLnJlYWRGaWxlU3luYyhiLGM/dm9pZCAwOlwidXRmOFwiKX07bmE9Yj0+e2I9bWEoYiwhMCk7Yi5idWZmZXJ8fChiPW5ldyBVaW50OEFycmF5KGIpKTtyZXR1cm4gYn07Sj0oYixjLGUsZj0hMCk9PntiPWIuc3RhcnRzV2l0aChcImZpbGU6Ly9cIik/bmV3IFVSTChiKTpvYS5ub3JtYWxpemUoYik7ZnMucmVhZEZpbGUoYixmP3ZvaWQgMDpcInV0ZjhcIiwoaCxrKT0+e2g/ZShoKTpjKGY/ay5idWZmZXI6ayl9KX07IUIudGhpc1Byb2dyYW0mJjE8cHJvY2Vzcy5hcmd2Lmxlbmd0aCYmKGphPXByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXFxcL2csXCIvXCIpKTtwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7RT0oYixjKT0+e3Byb2Nlc3MuZXhpdENvZGU9XG5iO3Rocm93IGM7fTtCLmluc3BlY3Q9KCk9PlwiW0Vtc2NyaXB0ZW4gTW9kdWxlIG9iamVjdF1cIjtsZXQgYTt0cnl7YT1yZXF1aXJlKFwid29ya2VyX3RocmVhZHNcIil9Y2F0Y2goYil7dGhyb3cgY29uc29sZS5lcnJvcignVGhlIFwid29ya2VyX3RocmVhZHNcIiBtb2R1bGUgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIG5vZGUuanMgYnVpbGQgLSBwZXJoYXBzIGEgbmV3ZXIgdmVyc2lvbiBpcyBuZWVkZWQ/JyksYjt9Z2xvYmFsLldvcmtlcj1hLldvcmtlcn1lbHNlIGlmKGthfHxGKUY/ST1zZWxmLmxvY2F0aW9uLmhyZWY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoST1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksKHR5cGVvZiBfc2NyaXB0RGlyICE9PSBcInVuZGVmaW5lZFwiICYmIF9zY3JpcHREaXIpJiYoST1fc2NyaXB0RGlyKSwwIT09SS5pbmRleE9mKFwiYmxvYjpcIik/ST1JLnN1YnN0cigwLEkucmVwbGFjZSgvWz8jXS4qLyxcIlwiKS5sYXN0SW5kZXhPZihcIi9cIikrMSk6ST1cIlwiLEd8fChtYT1hPT57dmFyIGI9XG5uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiR0VUXCIsYSwhMSk7Yi5zZW5kKG51bGwpO3JldHVybiBiLnJlc3BvbnNlVGV4dH0sRiYmKG5hPWE9Pnt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiR0VUXCIsYSwhMSk7Yi5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiO2Iuc2VuZChudWxsKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYi5yZXNwb25zZSl9KSxKPShhLGIsYyk9Pnt2YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZS5vcGVuKFwiR0VUXCIsYSwhMCk7ZS5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiO2Uub25sb2FkPSgpPT57MjAwPT1lLnN0YXR1c3x8MD09ZS5zdGF0dXMmJmUucmVzcG9uc2U/YihlLnJlc3BvbnNlKTpjKCl9O2Uub25lcnJvcj1jO2Uuc2VuZChudWxsKX0pO0cmJlwidW5kZWZpbmVkXCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmKGdsb2JhbC5wZXJmb3JtYW5jZT1yZXF1aXJlKFwicGVyZl9ob29rc1wiKS5wZXJmb3JtYW5jZSk7XG52YXIgcGE9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxxYT1jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7RyYmKHBhPSguLi5hKT0+ZnMud3JpdGVTeW5jKDEsYS5qb2luKFwiIFwiKStcIlxcblwiKSxxYT0oLi4uYSk9PmZzLndyaXRlU3luYygyLGEuam9pbihcIiBcIikrXCJcXG5cIikpO3ZhciByYT1CLnByaW50fHxwYSxLPUIucHJpbnRFcnJ8fHFhO09iamVjdC5hc3NpZ24oQixpYSk7aWE9bnVsbDtCLnRoaXNQcm9ncmFtJiYoamE9Qi50aGlzUHJvZ3JhbSk7Qi5xdWl0JiYoRT1CLnF1aXQpO3ZhciBMO0Iud2FzbUJpbmFyeSYmKEw9Qi53YXNtQmluYXJ5KTt2YXIgbm9FeGl0UnVudGltZT1CLm5vRXhpdFJ1bnRpbWV8fCEwO1wib2JqZWN0XCIhPXR5cGVvZiBXZWJBc3NlbWJseSYmTShcIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWRcIik7dmFyIGwsTixzYSxQPSExLFEscCxhYSxiYSxjYSxlYTtcbmZ1bmN0aW9uIHQoKXt2YXIgYT1sLmJ1ZmZlcjtCLkhFQVA4PXA9bmV3IEludDhBcnJheShhKTtCLkhFQVAxNj1uZXcgSW50MTZBcnJheShhKTtCLkhFQVAzMj1iYT1uZXcgSW50MzJBcnJheShhKTtCLkhFQVBVOD1hYT1uZXcgVWludDhBcnJheShhKTtCLkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGEpO0IuSEVBUFUzMj1jYT1uZXcgVWludDMyQXJyYXkoYSk7Qi5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoYSk7Qi5IRUFQRjY0PWVhPW5ldyBGbG9hdDY0QXJyYXkoYSl9dmFyIHRhPUIuSU5JVElBTF9NRU1PUll8fDE2Nzc3MjE2OzUyNDI4ODA8PXRhfHxNKFwiSU5JVElBTF9NRU1PUlkgc2hvdWxkIGJlIGxhcmdlciB0aGFuIFNUQUNLX1NJWkUsIHdhcyBcIit0YStcIiEgKFNUQUNLX1NJWkU9NTI0Mjg4MClcIik7XG5pZihIKWw9Qi53YXNtTWVtb3J5O2Vsc2UgaWYoQi53YXNtTWVtb3J5KWw9Qi53YXNtTWVtb3J5O2Vsc2UgaWYobD1uZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOnRhLzY1NTM2LG1heGltdW06NjU1MzYsc2hhcmVkOiEwfSksIShsLmJ1ZmZlciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKSl0aHJvdyBLKFwicmVxdWVzdGVkIGEgc2hhcmVkIFdlYkFzc2VtYmx5Lk1lbW9yeSBidXQgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyBub3QgYSBTaGFyZWRBcnJheUJ1ZmZlciwgaW5kaWNhdGluZyB0aGF0IHdoaWxlIHRoZSBicm93c2VyIGhhcyBTaGFyZWRBcnJheUJ1ZmZlciBpdCBkb2VzIG5vdCBoYXZlIFdlYkFzc2VtYmx5IHRocmVhZHMgc3VwcG9ydCAtIHlvdSBtYXkgbmVlZCB0byBzZXQgYSBmbGFnXCIpLEcmJksoXCIob24gbm9kZSB5b3UgbWF5IG5lZWQ6IC0tZXhwZXJpbWVudGFsLXdhc20tdGhyZWFkcyAtLWV4cGVyaW1lbnRhbC13YXNtLWJ1bGstbWVtb3J5IGFuZC9vciByZWNlbnQgdmVyc2lvbilcIiksXG5FcnJvcihcImJhZCBtZW1vcnlcIik7dCgpO3RhPWwuYnVmZmVyLmJ5dGVMZW5ndGg7dmFyIHVhPVtdLHZhPVtdLHdhPVtdLHhhPTA7ZnVuY3Rpb24geWEoKXtyZXR1cm4gbm9FeGl0UnVudGltZXx8MDx4YX12YXIgUj0wLHphPW51bGwsUz1udWxsO2Z1bmN0aW9uIEFhKCl7UisrO0IubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmQi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFIpfWZ1bmN0aW9uIEJhKCl7Ui0tO0IubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmQi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFIpO2lmKDA9PVImJihudWxsIT09emEmJihjbGVhckludGVydmFsKHphKSx6YT1udWxsKSxTKSl7dmFyIGE9UztTPW51bGw7YSgpfX1cbmZ1bmN0aW9uIE0oYSl7aWYoQi5vbkFib3J0KUIub25BYm9ydChhKTthPVwiQWJvcnRlZChcIithK1wiKVwiO0soYSk7UD0hMDtRPTE7YT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGErXCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCIpO0MoYSk7dGhyb3cgYTt9ZnVuY3Rpb24gQ2EoYSl7cmV0dXJuIGEuc3RhcnRzV2l0aChcImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxcIil9dmFyIFQ7VD1cIm9ydC13YXNtLXNpbWQtdGhyZWFkZWQud2FzbVwiO0NhKFQpfHwoVD1sYShUKSk7ZnVuY3Rpb24gRGEoYSl7aWYoYT09VCYmTClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoTCk7aWYobmEpcmV0dXJuIG5hKGEpO3Rocm93XCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwiO31cbmZ1bmN0aW9uIEVhKGEpe2lmKCFMJiYoa2F8fEYpKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBmZXRjaCYmIWEuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikpcmV0dXJuIGZldGNoKGEse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oYj0+e2lmKCFiLm9rKXRocm93XCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIithK1wiJ1wiO3JldHVybiBiLmFycmF5QnVmZmVyKCl9KS5jYXRjaCgoKT0+RGEoYSkpO2lmKEopcmV0dXJuIG5ldyBQcm9taXNlKChiLGMpPT57SihhLGU9PmIobmV3IFVpbnQ4QXJyYXkoZSkpLGMpfSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkRhKGEpKX1mdW5jdGlvbiBGYShhLGIsYyl7cmV0dXJuIEVhKGEpLnRoZW4oZT0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZSxiKSkudGhlbihlPT5lKS50aGVuKGMsZT0+e0soXCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiBcIitlKTtNKGUpfSl9XG5mdW5jdGlvbiBHYShhLGIpe3ZhciBjPVQ7cmV0dXJuIEx8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHxDYShjKXx8Yy5zdGFydHNXaXRoKFwiZmlsZTovL1wiKXx8R3x8XCJmdW5jdGlvblwiIT10eXBlb2YgZmV0Y2g/RmEoYyxhLGIpOmZldGNoKGMse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oZT0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoZSxhKS50aGVuKGIsZnVuY3Rpb24oZil7SyhcIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiBcIitmKTtLKFwiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb25cIik7cmV0dXJuIEZhKGMsYSxiKX0pKX1cbnZhciBVLEhhPXs5MDY4Mjg6YT0+e0IuRWEoXCJBYnNcIixhLHZvaWQgMCl9LDkwNjg3OTphPT57Qi5FYShcIk5lZ1wiLGEsdm9pZCAwKX0sOTA2OTMwOmE9PntCLkVhKFwiRmxvb3JcIixhLHZvaWQgMCl9LDkwNjk4MzphPT57Qi5FYShcIkNlaWxcIixhLHZvaWQgMCl9LDkwNzAzNTphPT57Qi5FYShcIlJlY2lwcm9jYWxcIixhLHZvaWQgMCl9LDkwNzA5MzphPT57Qi5FYShcIlNxcnRcIixhLHZvaWQgMCl9LDkwNzE0NTphPT57Qi5FYShcIkV4cFwiLGEsdm9pZCAwKX0sOTA3MTk2OmE9PntCLkVhKFwiRXJmXCIsYSx2b2lkIDApfSw5MDcyNDc6YT0+e0IuRWEoXCJTaWdtb2lkXCIsYSx2b2lkIDApfSw5MDczMDI6YT0+e0IuRWEoXCJMb2dcIixhLHZvaWQgMCl9LDkwNzM1MzphPT57Qi5FYShcIlNpblwiLGEsdm9pZCAwKX0sOTA3NDA0OmE9PntCLkVhKFwiQ29zXCIsYSx2b2lkIDApfSw5MDc0NTU6YT0+e0IuRWEoXCJUYW5cIixhLHZvaWQgMCl9LDkwNzUwNjphPT57Qi5FYShcIkFzaW5cIixhLHZvaWQgMCl9LDkwNzU1ODphPT57Qi5FYShcIkFjb3NcIixcbmEsdm9pZCAwKX0sOTA3NjEwOmE9PntCLkVhKFwiQXRhblwiLGEsdm9pZCAwKX0sOTA3NjYyOmE9PntCLkVhKFwiU2luaFwiLGEsdm9pZCAwKX0sOTA3NzE0OmE9PntCLkVhKFwiQ29zaFwiLGEsdm9pZCAwKX0sOTA3NzY2OmE9PntCLkVhKFwiQXNpbmhcIixhLHZvaWQgMCl9LDkwNzgxOTphPT57Qi5FYShcIkFjb3NoXCIsYSx2b2lkIDApfSw5MDc4NzI6YT0+e0IuRWEoXCJBdGFuaFwiLGEsdm9pZCAwKX0sOTA3OTI1OmE9PntCLkVhKFwiVGFuaFwiLGEsdm9pZCAwKX0sOTA3OTc3OmE9PntCLkVhKFwiTm90XCIsYSx2b2lkIDApfSw5MDgwMjg6KGEsYixjKT0+e0IuRWEoXCJDbGlwVjEwXCIsYSx7bWluOmIsbWF4OmN9KX0sOTA4MTAwOmE9PntCLkVhKFwiQ2xpcFwiLGEsdm9pZCAwKX0sOTA4MTUyOihhLGIpPT57Qi5FYShcIkVsdVwiLGEse2FscGhhOmJ9KX0sOTA4MjEwOmE9PntCLkVhKFwiUmVsdVwiLGEsdm9pZCAwKX0sOTA4MjYyOihhLGIpPT57Qi5FYShcIkxlYWt5UmVsdVwiLGEse2FscGhhOmJ9KX0sOTA4MzI2OihhLGIpPT5cbntCLkVhKFwiVGhyZXNob2xkZWRSZWx1XCIsYSx7YWxwaGE6Yn0pfSw5MDgzOTY6KGEsYik9PntCLkVhKFwiQ2FzdFwiLGEse3RvOmJ9KX0sOTA4NDU0OmE9PntCLkVhKFwiQWRkXCIsYSx2b2lkIDApfSw5MDg1MDU6YT0+e0IuRWEoXCJTdWJcIixhLHZvaWQgMCl9LDkwODU1NjphPT57Qi5FYShcIk11bFwiLGEsdm9pZCAwKX0sOTA4NjA3OmE9PntCLkVhKFwiRGl2XCIsYSx2b2lkIDApfSw5MDg2NTg6YT0+e0IuRWEoXCJQb3dcIixhLHZvaWQgMCl9LDkwODcwOTphPT57Qi5FYShcIkVxdWFsXCIsYSx2b2lkIDApfSw5MDg3NjI6YT0+e0IuRWEoXCJHcmVhdGVyXCIsYSx2b2lkIDApfSw5MDg4MTc6YT0+e0IuRWEoXCJHcmVhdGVyT3JFcXVhbFwiLGEsdm9pZCAwKX0sOTA4ODc5OmE9PntCLkVhKFwiTGVzc1wiLGEsdm9pZCAwKX0sOTA4OTMxOmE9PntCLkVhKFwiTGVzc09yRXF1YWxcIixhLHZvaWQgMCl9LDkwODk5MDooYSxiLGMsZSxmKT0+e0IuRWEoXCJSZWR1Y2VNZWFuXCIsYSx7a2VlcERpbXM6ISFiLG5vb3BXaXRoRW1wdHlBeGVzOiEhYyxcbmF4ZXM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W119KX0sOTA5MTU0OihhLGIsYyxlLGYpPT57Qi5FYShcIlJlZHVjZU1heFwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczplP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGY+Pj4wLGYrZT4+PjApKTpbXX0pfSw5MDkzMTc6KGEsYixjLGUsZik9PntCLkVhKFwiUmVkdWNlTWluXCIsYSx7a2VlcERpbXM6ISFiLG5vb3BXaXRoRW1wdHlBeGVzOiEhYyxheGVzOmU/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZj4+PjAsZitlPj4+MCkpOltdfSl9LDkwOTQ4MDooYSxiLGMsZSxmKT0+e0IuRWEoXCJSZWR1Y2VQcm9kXCIsYSx7a2VlcERpbXM6ISFiLG5vb3BXaXRoRW1wdHlBeGVzOiEhYyxheGVzOmU/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZj4+PjAsZitlPj4+MCkpOltdfSl9LDkwOTY0NDooYSxiLGMsZSxmKT0+e0IuRWEoXCJSZWR1Y2VTdW1cIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLFxuYXhlczplP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGY+Pj4wLGYrZT4+PjApKTpbXX0pfSw5MDk4MDc6KGEsYixjLGUsZik9PntCLkVhKFwiUmVkdWNlTDFcIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W119KX0sOTA5OTY5OihhLGIsYyxlLGYpPT57Qi5FYShcIlJlZHVjZUwyXCIsYSx7a2VlcERpbXM6ISFiLG5vb3BXaXRoRW1wdHlBeGVzOiEhYyxheGVzOmU/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZj4+PjAsZitlPj4+MCkpOltdfSl9LDkxMDEzMTooYSxiLGMsZSxmKT0+e0IuRWEoXCJSZWR1Y2VMb2dTdW1cIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W119KX0sOTEwMjk3OihhLGIsYyxlLGYpPT57Qi5FYShcIlJlZHVjZVN1bVNxdWFyZVwiLGEse2tlZXBEaW1zOiEhYixcbm5vb3BXaXRoRW1wdHlBeGVzOiEhYyxheGVzOmU/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZj4+PjAsZitlPj4+MCkpOltdfSl9LDkxMDQ2NjooYSxiLGMsZSxmKT0+e0IuRWEoXCJSZWR1Y2VMb2dTdW1FeHBcIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W119KX0sOTEwNjM1OmE9PntCLkVhKFwiV2hlcmVcIixhLHZvaWQgMCl9LDkxMDY4ODooYSxiLGMpPT57Qi5FYShcIlRyYW5zcG9zZVwiLGEse3Blcm06Yj9BcnJheS5mcm9tKHooKS5zdWJhcnJheShjPj4+MCxjK2I+Pj4wKSk6W119KX0sOTEwODAxOihhLGIsYyxlLGYsaCxrLHEsbixtKT0+e0IuRWEoXCJDb252XCIsYSx7Zm9ybWF0Om4/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b19wYWQ6YixkaWxhdGlvbnM6W2NdLGdyb3VwOmUsa2VybmVsX3NoYXBlOltmXSxwYWRzOltoLGtdLHN0cmlkZXM6W3FdLHdfaXNfY29uc3Q6KCk9PiEhZCgpW20+Pj5cbjBdfSl9LDkxMTAyOTooYSxiLGMsZSxmLGgsayxxLG4sbSxyLHcseCxnLHUpPT57Qi5FYShcIkNvbnZcIixhLHtmb3JtYXQ6Zz9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGRpbGF0aW9uczpbYyxlXSxncm91cDpmLGtlcm5lbF9zaGFwZTpbaCxrXSxwYWRzOltxLG4sbSxyXSxzdHJpZGVzOlt3LHhdLHdfaXNfY29uc3Q6KCk9PiEhZCgpW3U+Pj4wXX0pfSw5MTEyODg6KGEsYixjLGUsZixoLGsscSxuLG0pPT57Qi5FYShcIkNvbnZcIixhLHtmb3JtYXQ6bj9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGRpbGF0aW9uczpbY10sZ3JvdXA6ZSxrZXJuZWxfc2hhcGU6W2ZdLHBhZHM6W2gsa10sc3RyaWRlczpbcV0sd19pc19jb25zdDooKT0+ISFkKClbbT4+PjBdfSl9LDkxMTUxNjooYSxiLGMsZSxmLGgsayxxLG4sbSxyLHcseCxnLHUpPT57Qi5FYShcIkNvbnZcIixhLHtmb3JtYXQ6Zz9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGRpbGF0aW9uczpbYyxlXSxncm91cDpmLGtlcm5lbF9zaGFwZTpbaCxcbmtdLHBhZHM6W3EsbixtLHJdLHN0cmlkZXM6W3cseF0sd19pc19jb25zdDooKT0+ISFkKClbdT4+PjBdfSl9LDkxMTc3NTooYSxiLGMsZSxmLGgsayxxLG4sbSxyLHcseCxnKT0+e0IuRWEoXCJDb252VHJhbnNwb3NlXCIsYSx7Zm9ybWF0Om4/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b1BhZDpiLGRpbGF0aW9uczpbY10sZ3JvdXA6ZSxrZXJuZWxfc2hhcGU6W2ZdLHBhZHM6W2gsa10sc3RyaWRlczpbcV0sd0lzQ29uc3Q6KCk9PiEhZCgpW20+Pj4wXSxvdXRwdXRQYWRkaW5nOnI/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkodz4+PjAsdytyPj4+MCkpOltdLG91dHB1dFNoYXBlOng/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZz4+PjAsZyt4Pj4+MCkpOltdfSl9LDkxMjE1NTooYSxiLGMsZSxmLGgsayxxLG4sbSxyLHcseCk9PntCLkVhKFwiQ29udlRyYW5zcG9zZVwiLGEse2Zvcm1hdDpxP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9QYWQ6YixkaWxhdGlvbnM6QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoYz4+PjAsYytcbjI+Pj4wKSksZ3JvdXA6ZSxrZXJuZWxTaGFwZTpBcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmKzI+Pj4wKSkscGFkczpBcnJheS5mcm9tKHooKS5zdWJhcnJheShoPj4+MCxoKzQ+Pj4wKSksc3RyaWRlczpBcnJheS5mcm9tKHooKS5zdWJhcnJheShrPj4+MCxrKzI+Pj4wKSksd0lzQ29uc3Q6KCk9PiEhZCgpW24+Pj4wXSxvdXRwdXRQYWRkaW5nOjA8bT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShyPj4+MCxyK20+Pj4wKSk6W10sb3V0cHV0U2hhcGU6MDx3P0FycmF5LmZyb20oeigpLnN1YmFycmF5KHg+Pj4wLHgrdz4+PjApKTpbXX0pfSw5MTI2Nzg6KGEsYixjLGUsZixoLGsscSxuLG0scix3LHgsZyk9PntCLkVhKFwiQ29udlRyYW5zcG9zZVwiLGEse2Zvcm1hdDpuP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9QYWQ6YixkaWxhdGlvbnM6W2NdLGdyb3VwOmUsa2VybmVsX3NoYXBlOltmXSxwYWRzOltoLGtdLHN0cmlkZXM6W3FdLHdJc0NvbnN0OigpPT4hIWQoKVttPj4+MF0sb3V0cHV0UGFkZGluZzpyP1xuQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkodz4+PjAsdytyPj4+MCkpOltdLG91dHB1dFNoYXBlOng/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZz4+PjAsZyt4Pj4+MCkpOltdfSl9LDkxMzA1ODooYSxiLGMsZSxmLGgsayxxLG4sbSxyLHcseCk9PntCLkVhKFwiQ29udlRyYW5zcG9zZVwiLGEse2Zvcm1hdDpxP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9QYWQ6YixkaWxhdGlvbnM6QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoYz4+PjAsYysyPj4+MCkpLGdyb3VwOmUsa2VybmVsU2hhcGU6QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZj4+PjAsZisyPj4+MCkpLHBhZHM6QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoaD4+PjAsaCs0Pj4+MCkpLHN0cmlkZXM6QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoaz4+PjAsaysyPj4+MCkpLHdJc0NvbnN0OigpPT4hIWQoKVtuPj4+MF0sb3V0cHV0UGFkZGluZzowPG0/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkocj4+PjAscittPj4+MCkpOltdLG91dHB1dFNoYXBlOjA8XG53P0FycmF5LmZyb20oeigpLnN1YmFycmF5KHg+Pj4wLHgrdz4+PjApKTpbXX0pfSw5MTM1ODE6KGEsYik9PntCLkVhKFwiR2xvYmFsQXZlcmFnZVBvb2xcIixhLHtmb3JtYXQ6Yj9cIk5IV0NcIjpcIk5DSFdcIn0pfSw5MTM2NzI6KGEsYixjLGUsZixoLGsscSxuLG0scix3LHgsZyx1LHkpPT57Qi5FYShcIkF2ZXJhZ2VQb29sXCIsYSx7Zm9ybWF0Onk/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b19wYWQ6YixjZWlsX21vZGU6Yyxjb3VudF9pbmNsdWRlX3BhZDplLHN0b3JhZ2Vfb3JkZXI6ZixkaWxhdGlvbnM6W2gsa10sa2VybmVsX3NoYXBlOltxLG5dLHBhZHM6W20scix3LHhdLHN0cmlkZXM6W2csdV19KX0sOTEzOTU2OihhLGIpPT57Qi5FYShcIkdsb2JhbEF2ZXJhZ2VQb29sXCIsYSx7Zm9ybWF0OmI/XCJOSFdDXCI6XCJOQ0hXXCJ9KX0sOTE0MDQ3OihhLGIsYyxlLGYsaCxrLHEsbixtLHIsdyx4LGcsdSx5KT0+e0IuRWEoXCJBdmVyYWdlUG9vbFwiLGEse2Zvcm1hdDp5P1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9fcGFkOmIsY2VpbF9tb2RlOmMsXG5jb3VudF9pbmNsdWRlX3BhZDplLHN0b3JhZ2Vfb3JkZXI6ZixkaWxhdGlvbnM6W2gsa10sa2VybmVsX3NoYXBlOltxLG5dLHBhZHM6W20scix3LHhdLHN0cmlkZXM6W2csdV19KX0sOTE0MzMxOihhLGIpPT57Qi5FYShcIkdsb2JhbE1heFBvb2xcIixhLHtmb3JtYXQ6Yj9cIk5IV0NcIjpcIk5DSFdcIn0pfSw5MTQ0MTg6KGEsYixjLGUsZixoLGsscSxuLG0scix3LHgsZyx1LHkpPT57Qi5FYShcIk1heFBvb2xcIixhLHtmb3JtYXQ6eT9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGNlaWxfbW9kZTpjLGNvdW50X2luY2x1ZGVfcGFkOmUsc3RvcmFnZV9vcmRlcjpmLGRpbGF0aW9uczpbaCxrXSxrZXJuZWxfc2hhcGU6W3Esbl0scGFkczpbbSxyLHcseF0sc3RyaWRlczpbZyx1XX0pfSw5MTQ2OTg6KGEsYik9PntCLkVhKFwiR2xvYmFsTWF4UG9vbFwiLGEse2Zvcm1hdDpiP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDkxNDc4NTooYSxiLGMsZSxmLGgsayxxLG4sbSxyLHcseCxnLHUseSk9PntCLkVhKFwiTWF4UG9vbFwiLFxuYSx7Zm9ybWF0Onk/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b19wYWQ6YixjZWlsX21vZGU6Yyxjb3VudF9pbmNsdWRlX3BhZDplLHN0b3JhZ2Vfb3JkZXI6ZixkaWxhdGlvbnM6W2gsa10sa2VybmVsX3NoYXBlOltxLG5dLHBhZHM6W20scix3LHhdLHN0cmlkZXM6W2csdV19KX0sOTE1MDY1OihhLGIsYyxlLGYpPT57Qi5FYShcIkdlbW1cIixhLHthbHBoYTpiLGJldGE6Yyx0cmFuc0E6ZSx0cmFuc0I6Zn0pfSw5MTUxNjk6YT0+e0IuRWEoXCJNYXRNdWxcIixhLHZvaWQgMCl9LDkxNTIyMzooYSxiLGMsZSk9PntCLkVhKFwiQXJnTWF4XCIsYSx7a2VlcERpbXM6ISFiLHNlbGVjdExhc3RJbmRleDohIWMsYXhpczplfSl9LDkxNTMzMTooYSxiLGMsZSk9PntCLkVhKFwiQXJnTWluXCIsYSx7a2VlcERpbXM6ISFiLHNlbGVjdExhc3RJbmRleDohIWMsYXhpczplfSl9LDkxNTQzOTooYSxiKT0+e0IuRWEoXCJTb2Z0bWF4XCIsYSx7YXhpczpifSl9LDkxNTUwMjooYSxiKT0+e0IuRWEoXCJDb25jYXRcIixhLHtheGlzOmJ9KX0sXG45MTU1NjI6KGEsYixjLGUsZik9PntCLkVhKFwiU3BsaXRcIixhLHtheGlzOmIsbnVtT3V0cHV0czpjLHNwbGl0U2l6ZXM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W119KX0sOTE1NzA3OmE9PntCLkVhKFwiRXhwYW5kXCIsYSx2b2lkIDApfSw5MTU3NjE6KGEsYik9PntCLkVhKFwiR2F0aGVyXCIsYSx7YXhpczpOdW1iZXIoYil9KX0sOTE1ODMyOihhLGIpPT57Qi5FYShcIkdhdGhlckVsZW1lbnRzXCIsYSx7YXhpczpOdW1iZXIoYil9KX0sOTE1OTExOihhLGIsYyxlLGYsaCxrLHEsbixtLHIpPT57Qi5FYShcIlJlc2l6ZVwiLGEse2FudGlhbGlhczpiLGF4ZXM6Yz9BcnJheS5mcm9tKHooKS5zdWJhcnJheShlPj4+MCxlK2M+Pj4wKSk6W10sY29vcmRpbmF0ZVRyYW5zZm9ybU1vZGU6VihmKSxjdWJpY0NvZWZmQTpoLGV4Y2x1ZGVPdXRzaWRlOmssZXh0cmFwb2xhdGlvblZhbHVlOnEsa2VlcEFzcGVjdFJhdGlvUG9saWN5OlYobiksbW9kZTpWKG0pLG5lYXJlc3RNb2RlOlYocil9KX0sXG45MTYyNjI6KGEsYixjLGUsZixoLGspPT57Qi5FYShcIlNsaWNlXCIsYSx7c3RhcnRzOmI/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoYz4+PjAsYytiPj4+MCkpOltdLGVuZHM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W10sYXhlczpoP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGs+Pj4wLGsraD4+PjApKTpbXX0pfSw5MTY0OTM6YT0+e0IuRWEoXCJUaWxlXCIsYSx2b2lkIDApfSw5MTY1NDU6KGEsYixjKT0+e0IuRWEoXCJMYXllck5vcm1hbGl6YXRpb25cIixhLHtheGlzOk51bWJlcihiKSxlcHNpbG9uOk51bWJlcihjKX0pfSw5MTY2NTI6KGEsYixjKT0+e0IuRWEoXCJJbnN0YW5jZU5vcm1hbGl6YXRpb25cIixhLHtlcHNpbG9uOmIsZm9ybWF0OmM/XCJOSFdDXCI6XCJOQ0hXXCJ9KX0sOTE2NzY2OihhLGIsYyk9PntCLkVhKFwiSW5zdGFuY2VOb3JtYWxpemF0aW9uXCIsYSx7ZXBzaWxvbjpiLGZvcm1hdDpjP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDkxNjg4MDphPT57Qi5FYShcIlJhbmdlXCIsXG5hLHZvaWQgMCl9LDkxNjkzMzooYSxiKT0+e0IuRWEoXCJFaW5zdW1cIixhLHtlcXVhdGlvbjpWKGIpfSl9LDkxNzAxNDooYSxiLGMsZSxmKT0+e0IuRWEoXCJQYWRcIixhLHttb2RlOmIsdmFsdWU6YyxwYWRzOmU/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZj4+PjAsZitlPj4+MCkpOltdfSl9LDkxNzE0NjphPT57Qi5FYShcIkdlbHVcIixhLHZvaWQgMCl9LDkxNzE5ODphPT57Qi5FYShcIkJpYXNBZGRcIixhLHZvaWQgMCl9LDkxNzI1MzphPT57Qi5FYShcIkJpYXNTcGxpdEdlbHVcIixhLHZvaWQgMCl9LDkxNzMxNDooYSxiKT0+e0IuRWEoXCJTa2lwTGF5ZXJOb3JtYWxpemF0aW9uXCIsYSx7ZXBzaWxvbjpifSl9LDkxNzM5NTphPT57Qi56YihhKX0sOTE3NDI5OihhLGIpPT5CLkFiKGEsYixCLmJiLkZiLEIuYmIuZXJyb3JzKSw5MTc1NDE6YT0+Qi53YihhKSw5MTc1NzQ6YT0+Qi55YihhKSw5MTc2MDY6KGEsYixjKT0+e0IuamIoYSxiLGMsITApfSw5MTc2NDU6KGEsYixjKT0+e0IuamIoYSxiLGMpfX07XG5mdW5jdGlvbiBJYShhKXt0aGlzLm5hbWU9XCJFeGl0U3RhdHVzXCI7dGhpcy5tZXNzYWdlPWBQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCR7YX0pYDt0aGlzLnN0YXR1cz1hfWZ1bmN0aW9uIEphKGEpe2EudGVybWluYXRlKCk7YS5vbm1lc3NhZ2U9KCk9Pnt9fWZ1bmN0aW9uIEthKGEpeyhhPVcuUWFbYV0pfHxNKCk7Vy5FYihhKX1mdW5jdGlvbiBMYShhKXt2YXIgYj1XLnRiKCk7aWYoIWIpcmV0dXJuIDY7Vy5ZYS5wdXNoKGIpO1cuUWFbYS5YYV09YjtiLlhhPWEuWGE7dmFyIGM9e2NtZDpcInJ1blwiLHN0YXJ0X3JvdXRpbmU6YS5HYixhcmc6YS5yYixwdGhyZWFkX3B0cjphLlhhfTtHJiZiLnVucmVmKCk7Yi5wb3N0TWVzc2FnZShjLGEuTWIpO3JldHVybiAwfVxudmFyIE1hPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBUZXh0RGVjb2Rlcj9uZXcgVGV4dERlY29kZXIoXCJ1dGY4XCIpOnZvaWQgMCxOYT0oYSxiLGMpPT57Yj4+Pj0wO3ZhciBlPWIrYztmb3IoYz1iO2FbY10mJiEoYz49ZSk7KSsrYztpZigxNjxjLWImJmEuYnVmZmVyJiZNYSlyZXR1cm4gTWEuZGVjb2RlKGEuYnVmZmVyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/YS5zbGljZShiLGMpOmEuc3ViYXJyYXkoYixjKSk7Zm9yKGU9XCJcIjtiPGM7KXt2YXIgZj1hW2IrK107aWYoZiYxMjgpe3ZhciBoPWFbYisrXSY2MztpZigxOTI9PShmJjIyNCkpZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoZiYzMSk8PDZ8aCk7ZWxzZXt2YXIgaz1hW2IrK10mNjM7Zj0yMjQ9PShmJjI0MCk/KGYmMTUpPDwxMnxoPDw2fGs6KGYmNyk8PDE4fGg8PDEyfGs8PDZ8YVtiKytdJjYzOzY1NTM2PmY/ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShmKTooZi09NjU1MzYsZSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxmPj5cbjEwLDU2MzIwfGYmMTAyMykpfX1lbHNlIGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoZil9cmV0dXJuIGV9LFY9KGEsYik9PihhPj4+PTApP05hKHYoKSxhLGIpOlwiXCI7ZnVuY3Rpb24gT2EoYSl7aWYoSClyZXR1cm4gWCgxLDEsYSk7UT1hO2lmKCF5YSgpKXtXLkhiKCk7aWYoQi5vbkV4aXQpQi5vbkV4aXQoYSk7UD0hMH1FKGEsbmV3IElhKGEpKX1cbnZhciBRYT1hPT57UT1hO2lmKEgpdGhyb3cgUGEoYSksXCJ1bndpbmRcIjtPYShhKX0sVz17YWI6W10sWWE6W10sbWI6W10sUWE6e30sZ2I6ZnVuY3Rpb24oKXtIP1cudmIoKTpXLnViKCl9LHViOmZ1bmN0aW9uKCl7dWEudW5zaGlmdCgoKT0+e0FhKCk7Vy5CYigoKT0+QmEoKSl9KX0sdmI6ZnVuY3Rpb24oKXtXLnJlY2VpdmVPYmplY3RUcmFuc2Zlcj1XLkRiO1cudGhyZWFkSW5pdFRMUz1XLmxiO1cuc2V0RXhpdFN0YXR1cz1XLmtiO25vRXhpdFJ1bnRpbWU9ITF9LGtiOmZ1bmN0aW9uKGEpe1E9YX0sU2I6W1wiJHRlcm1pbmF0ZVdvcmtlclwiXSxIYjpmdW5jdGlvbigpe2Zvcih2YXIgYSBvZiBXLllhKUphKGEpO2ZvcihhIG9mIFcuYWIpSmEoYSk7Vy5hYj1bXTtXLllhPVtdO1cuUWE9W119LEViOmZ1bmN0aW9uKGEpe3ZhciBiPWEuWGE7ZGVsZXRlIFcuUWFbYl07Vy5hYi5wdXNoKGEpO1cuWWEuc3BsaWNlKFcuWWEuaW5kZXhPZihhKSwxKTthLlhhPTA7UmEoYil9LERiOmZ1bmN0aW9uKCl7fSxcbmxiOmZ1bmN0aW9uKCl7Vy5tYi5mb3JFYWNoKGE9PmEoKSl9LENiOmE9Pm5ldyBQcm9taXNlKGI9PnthLm9ubWVzc2FnZT1oPT57aD1oLmRhdGE7dmFyIGs9aC5jbWQ7aWYoaC50YXJnZXRUaHJlYWQmJmgudGFyZ2V0VGhyZWFkIT1TYSgpKXt2YXIgcT1XLlFhW2guUmJdO3E/cS5wb3N0TWVzc2FnZShoLGgudHJhbnNmZXJMaXN0KTpLKCdJbnRlcm5hbCBlcnJvciEgV29ya2VyIHNlbnQgYSBtZXNzYWdlIFwiJytrKydcIiB0byB0YXJnZXQgcHRocmVhZCAnK2gudGFyZ2V0VGhyZWFkK1wiLCBidXQgdGhhdCB0aHJlYWQgbm8gbG9uZ2VyIGV4aXN0cyFcIil9ZWxzZSBpZihcImNoZWNrTWFpbGJveFwiPT09aylUYSgpO2Vsc2UgaWYoXCJzcGF3blRocmVhZFwiPT09aylMYShoKTtlbHNlIGlmKFwiY2xlYW51cFRocmVhZFwiPT09aylLYShoLnRocmVhZCk7ZWxzZSBpZihcImtpbGxUaHJlYWRcIj09PWspaD1oLnRocmVhZCxrPVcuUWFbaF0sZGVsZXRlIFcuUWFbaF0sSmEoayksUmEoaCksVy5ZYS5zcGxpY2UoVy5ZYS5pbmRleE9mKGspLFxuMSksay5YYT0wO2Vsc2UgaWYoXCJjYW5jZWxUaHJlYWRcIj09PWspVy5RYVtoLnRocmVhZF0ucG9zdE1lc3NhZ2Uoe2NtZDpcImNhbmNlbFwifSk7ZWxzZSBpZihcImxvYWRlZFwiPT09aylhLmxvYWRlZD0hMCxiKGEpO2Vsc2UgaWYoXCJhbGVydFwiPT09aylhbGVydChcIlRocmVhZCBcIitoLnRocmVhZElkK1wiOiBcIitoLnRleHQpO2Vsc2UgaWYoXCJzZXRpbW1lZGlhdGVcIj09PWgudGFyZ2V0KWEucG9zdE1lc3NhZ2UoaCk7ZWxzZSBpZihcImNhbGxIYW5kbGVyXCI9PT1rKUJbaC5oYW5kbGVyXSguLi5oLmFyZ3MpO2Vsc2UgayYmSyhcIndvcmtlciBzZW50IGFuIHVua25vd24gY29tbWFuZCBcIitrKX07YS5vbmVycm9yPWg9PntLKFwid29ya2VyIHNlbnQgYW4gZXJyb3IhIFwiK2guZmlsZW5hbWUrXCI6XCIraC5saW5lbm8rXCI6IFwiK2gubWVzc2FnZSk7dGhyb3cgaDt9O0cmJihhLm9uKFwibWVzc2FnZVwiLGZ1bmN0aW9uKGgpe2Eub25tZXNzYWdlKHtkYXRhOmh9KX0pLGEub24oXCJlcnJvclwiLGZ1bmN0aW9uKGgpe2Eub25lcnJvcihoKX0pKTtcbnZhciBjPVtdLGU9W1wib25FeGl0XCIsXCJvbkFib3J0XCIsXCJwcmludFwiLFwicHJpbnRFcnJcIl0sZjtmb3IoZiBvZiBlKUIuaGFzT3duUHJvcGVydHkoZikmJmMucHVzaChmKTthLnBvc3RNZXNzYWdlKHtjbWQ6XCJsb2FkXCIsaGFuZGxlcnM6Yyx1cmxPckJsb2I6Qi5tYWluU2NyaXB0VXJsT3JCbG9ifHxfc2NyaXB0RGlyLHdhc21NZW1vcnk6bCx3YXNtTW9kdWxlOnNhfSl9KSxCYjpmdW5jdGlvbihhKXthKCl9LHFiOmZ1bmN0aW9uKCl7dmFyIGE9bGEoXCJvcnQtd2FzbS1zaW1kLXRocmVhZGVkLndvcmtlci5qc1wiKTthPW5ldyBXb3JrZXIoYSk7Vy5hYi5wdXNoKGEpfSx0YjpmdW5jdGlvbigpezA9PVcuYWIubGVuZ3RoJiYoVy5xYigpLFcuQ2IoVy5hYlswXSkpO3JldHVybiBXLmFiLnBvcCgpfX07Qi5QVGhyZWFkPVc7dmFyIFVhPWE9Pntmb3IoOzA8YS5sZW5ndGg7KWEuc2hpZnQoKShCKX07XG5CLmVzdGFibGlzaFN0YWNrU3BhY2U9ZnVuY3Rpb24oKXt2YXIgYT1TYSgpLGI9eigpW2ErNTI+PjI+Pj4wXTthPXooKVthKzU2Pj4yPj4+MF07VmEoYixiLWEpO1dhKGIpfTtmdW5jdGlvbiBQYShhKXtpZihIKXJldHVybiBYKDIsMCxhKTtRYShhKX1CLmludm9rZUVudHJ5UG9pbnQ9ZnVuY3Rpb24oYSxiKXthPVhhLmFwcGx5KG51bGwsW2EsYl0pO3lhKCk/Vy5rYihhKTpZYShhKX07ZnVuY3Rpb24gWmEoYSl7dGhpcy5mYj1hLTI0O3RoaXMucGI9ZnVuY3Rpb24oYil7QSgpW3RoaXMuZmIrND4+Mj4+PjBdPWJ9O3RoaXMub2I9ZnVuY3Rpb24oYil7QSgpW3RoaXMuZmIrOD4+Mj4+PjBdPWJ9O3RoaXMuZ2I9ZnVuY3Rpb24oYixjKXt0aGlzLm5iKCk7dGhpcy5wYihiKTt0aGlzLm9iKGMpfTt0aGlzLm5iPWZ1bmN0aW9uKCl7QSgpW3RoaXMuZmIrMTY+PjI+Pj4wXT0wfX12YXIgJGE9MCxhYj0wO1xuZnVuY3Rpb24gYmIoYSxiLGMsZSl7cmV0dXJuIEg/WCgzLDEsYSxiLGMsZSk6Y2IoYSxiLGMsZSl9ZnVuY3Rpb24gY2IoYSxiLGMsZSl7YT4+Pj0wO2I+Pj49MDtjPj4+PTA7ZT4+Pj0wO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcilyZXR1cm4gSyhcIkN1cnJlbnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTaGFyZWRBcnJheUJ1ZmZlciwgcHRocmVhZHMgYXJlIG5vdCBhdmFpbGFibGUhXCIpLDY7dmFyIGY9W107aWYoSCYmMD09PWYubGVuZ3RoKXJldHVybiBiYihhLGIsYyxlKTthPXtHYjpjLFhhOmEscmI6ZSxNYjpmfTtyZXR1cm4gSD8oYS5PYj1cInNwYXduVGhyZWFkXCIscG9zdE1lc3NhZ2UoYSxmKSwwKTpMYShhKX1mdW5jdGlvbiBkYihhLGIsYyl7cmV0dXJuIEg/WCg0LDEsYSxiLGMpOjB9ZnVuY3Rpb24gZWIoYSxiKXtpZihIKXJldHVybiBYKDUsMSxhLGIpfVxudmFyIGZiPWE9Pntmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDsrK2Mpe3ZhciBlPWEuY2hhckNvZGVBdChjKTsxMjc+PWU/YisrOjIwNDc+PWU/Yis9Mjo1NTI5Njw9ZSYmNTczNDM+PWU/KGIrPTQsKytjKTpiKz0zfXJldHVybiBifSxnYj0oYSxiLGMsZSk9PntjPj4+PTA7aWYoISgwPGUpKXJldHVybiAwO3ZhciBmPWM7ZT1jK2UtMTtmb3IodmFyIGg9MDtoPGEubGVuZ3RoOysraCl7dmFyIGs9YS5jaGFyQ29kZUF0KGgpO2lmKDU1Mjk2PD1rJiY1NzM0Mz49ayl7dmFyIHE9YS5jaGFyQ29kZUF0KCsraCk7az02NTUzNisoKGsmMTAyMyk8PDEwKXxxJjEwMjN9aWYoMTI3Pj1rKXtpZihjPj1lKWJyZWFrO2JbYysrPj4+MF09a31lbHNle2lmKDIwNDc+PWspe2lmKGMrMT49ZSlicmVhaztiW2MrKz4+PjBdPTE5MnxrPj42fWVsc2V7aWYoNjU1MzU+PWspe2lmKGMrMj49ZSlicmVhaztiW2MrKz4+PjBdPTIyNHxrPj4xMn1lbHNle2lmKGMrMz49ZSlicmVhaztiW2MrKz4+PjBdPTI0MHxrPj5cbjE4O2JbYysrPj4+MF09MTI4fGs+PjEyJjYzfWJbYysrPj4+MF09MTI4fGs+PjYmNjN9YltjKys+Pj4wXT0xMjh8ayY2M319YltjPj4+MF09MDtyZXR1cm4gYy1mfSxoYj0oYSxiLGMpPT5nYihhLHYoKSxiLGMpO2Z1bmN0aW9uIGliKGEsYil7aWYoSClyZXR1cm4gWCg2LDEsYSxiKX1mdW5jdGlvbiBqYihhLGIsYyl7aWYoSClyZXR1cm4gWCg3LDEsYSxiLGMpfWZ1bmN0aW9uIGtiKGEsYixjKXtyZXR1cm4gSD9YKDgsMSxhLGIsYyk6MH1mdW5jdGlvbiBsYihhLGIpe2lmKEgpcmV0dXJuIFgoOSwxLGEsYil9ZnVuY3Rpb24gbWIoYSxiLGMpe2lmKEgpcmV0dXJuIFgoMTAsMSxhLGIsYyl9ZnVuY3Rpb24gbmIoYSxiLGMsZSl7aWYoSClyZXR1cm4gWCgxMSwxLGEsYixjLGUpfWZ1bmN0aW9uIG9iKGEsYixjLGUpe2lmKEgpcmV0dXJuIFgoMTIsMSxhLGIsYyxlKX1mdW5jdGlvbiBwYihhLGIsYyxlKXtpZihIKXJldHVybiBYKDEzLDEsYSxiLGMsZSl9XG5mdW5jdGlvbiBxYihhKXtpZihIKXJldHVybiBYKDE0LDEsYSl9ZnVuY3Rpb24gcmIoYSxiKXtpZihIKXJldHVybiBYKDE1LDEsYSxiKX1mdW5jdGlvbiBzYihhLGIsYyl7aWYoSClyZXR1cm4gWCgxNiwxLGEsYixjKX12YXIgdGI9YT0+e2lmKCFQKXRyeXtpZihhKCksIXlhKCkpdHJ5e0g/WWEoUSk6UWEoUSl9Y2F0Y2goYil7YiBpbnN0YW5jZW9mIElhfHxcInVud2luZFwiPT1ifHxFKDEsYil9fWNhdGNoKGIpe2IgaW5zdGFuY2VvZiBJYXx8XCJ1bndpbmRcIj09Ynx8RSgxLGIpfX07ZnVuY3Rpb24gdWIoYSl7YT4+Pj0wO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBBdG9taWNzLk5iJiYoQXRvbWljcy5OYih6KCksYT4+MixhKS52YWx1ZS50aGVuKFRhKSxhKz0xMjgsQXRvbWljcy5zdG9yZSh6KCksYT4+MiwxKSl9Qi5fX2Vtc2NyaXB0ZW5fdGhyZWFkX21haWxib3hfYXdhaXQ9dWI7ZnVuY3Rpb24gVGEoKXt2YXIgYT1TYSgpO2EmJih1YihhKSx0YigoKT0+dmIoKSkpfUIuY2hlY2tNYWlsYm94PVRhO1xudmFyIFk9YT0+MD09PWElNCYmKDAhPT1hJTEwMHx8MD09PWElNDAwKSx3Yj1bMCwzMSw2MCw5MSwxMjEsMTUyLDE4MiwyMTMsMjQ0LDI3NCwzMDUsMzM1XSx4Yj1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XTtmdW5jdGlvbiB5YihhLGIsYyxlLGYsaCxrLHEpe3JldHVybiBIP1goMTcsMSxhLGIsYyxlLGYsaCxrLHEpOi01Mn1mdW5jdGlvbiB6YihhLGIsYyxlLGYsaCxrKXtpZihIKXJldHVybiBYKDE4LDEsYSxiLGMsZSxmLGgsayl9dmFyIEJiPWE9Pnt2YXIgYj1mYihhKSsxLGM9QWIoYik7YyYmaGIoYSxjLGIpO3JldHVybiBjfSxDYj1bXSxEYj0oYSxiKT0+e0NiLmxlbmd0aD0wO3ZhciBjO2ZvcihiPj49MjtjPXYoKVthKys+Pj4wXTspYis9MTA1IT1jJmIsQ2IucHVzaCgxMDU9PWM/eigpW2I+Pj4wXTpkYSgpW2IrKz4+PjFdKSwrK2I7cmV0dXJuIENifSxGYj1hPT57dmFyIGI9RWIoKTthPWEoKTtXYShiKTtyZXR1cm4gYX07XG5mdW5jdGlvbiBYKGEsYil7dmFyIGM9YXJndW1lbnRzLmxlbmd0aC0yLGU9YXJndW1lbnRzO3JldHVybiBGYigoKT0+e2Zvcih2YXIgZj1HYig4KmMpLGg9Zj4+MyxrPTA7azxjO2srKyl7dmFyIHE9ZVsyK2tdO2RhKClbaCtrPj4+MF09cX1yZXR1cm4gSGIoYSxjLGYsYil9KX1cbnZhciBJYj1bXSxKYj17fSxMYj0oKT0+e2lmKCFLYil7dmFyIGE9e1VTRVI6XCJ3ZWJfdXNlclwiLExPR05BTUU6XCJ3ZWJfdXNlclwiLFBBVEg6XCIvXCIsUFdEOlwiL1wiLEhPTUU6XCIvaG9tZS93ZWJfdXNlclwiLExBTkc6KFwib2JqZWN0XCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fFwiQ1wiKS5yZXBsYWNlKFwiLVwiLFwiX1wiKStcIi5VVEYtOFwiLF86amF8fFwiLi90aGlzLnByb2dyYW1cIn0sYjtmb3IoYiBpbiBKYil2b2lkIDA9PT1KYltiXT9kZWxldGUgYVtiXTphW2JdPUpiW2JdO3ZhciBjPVtdO2ZvcihiIGluIGEpYy5wdXNoKGAke2J9PSR7YVtiXX1gKTtLYj1jfXJldHVybiBLYn0sS2I7XG5mdW5jdGlvbiBNYihhLGIpe2lmKEgpcmV0dXJuIFgoMTksMSxhLGIpO2E+Pj49MDtiPj4+PTA7dmFyIGM9MDtMYigpLmZvckVhY2goZnVuY3Rpb24oZSxmKXt2YXIgaD1iK2M7Zj1BKClbYSs0KmY+PjI+Pj4wXT1oO2ZvcihoPTA7aDxlLmxlbmd0aDsrK2gpZCgpW2YrKz4+MD4+PjBdPWUuY2hhckNvZGVBdChoKTtkKClbZj4+MD4+PjBdPTA7Yys9ZS5sZW5ndGgrMX0pO3JldHVybiAwfWZ1bmN0aW9uIE5iKGEsYil7aWYoSClyZXR1cm4gWCgyMCwxLGEsYik7YT4+Pj0wO2I+Pj49MDt2YXIgYz1MYigpO0EoKVthPj4yPj4+MF09Yy5sZW5ndGg7dmFyIGU9MDtjLmZvckVhY2goZnVuY3Rpb24oZil7ZSs9Zi5sZW5ndGgrMX0pO0EoKVtiPj4yPj4+MF09ZTtyZXR1cm4gMH1mdW5jdGlvbiBPYihhKXtyZXR1cm4gSD9YKDIxLDEsYSk6NTJ9ZnVuY3Rpb24gUGIoYSxiLGMsZSl7cmV0dXJuIEg/WCgyMiwxLGEsYixjLGUpOjUyfVxuZnVuY3Rpb24gUWIoYSxiLGMsZSxmKXtyZXR1cm4gSD9YKDIzLDEsYSxiLGMsZSxmKTo3MH12YXIgUmI9W251bGwsW10sW11dO2Z1bmN0aW9uIFRiKGEsYixjLGUpe2lmKEgpcmV0dXJuIFgoMjQsMSxhLGIsYyxlKTtiPj4+PTA7Yz4+Pj0wO2U+Pj49MDtmb3IodmFyIGY9MCxoPTA7aDxjO2grKyl7dmFyIGs9QSgpW2I+PjI+Pj4wXSxxPUEoKVtiKzQ+PjI+Pj4wXTtiKz04O2Zvcih2YXIgbj0wO248cTtuKyspe3ZhciBtPXYoKVtrK24+Pj4wXSxyPVJiW2FdOzA9PT1tfHwxMD09PW0/KCgxPT09YT9yYTpLKShOYShyLDApKSxyLmxlbmd0aD0wKTpyLnB1c2gobSl9Zis9cX1BKClbZT4+Mj4+PjBdPWY7cmV0dXJuIDB9dmFyIFViPVszMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sVmI9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtmdW5jdGlvbiBXYihhKXt2YXIgYj1BcnJheShmYihhKSsxKTtnYihhLGIsMCxiLmxlbmd0aCk7cmV0dXJuIGJ9XG52YXIgWGI9KGEsYik9PntkKCkuc2V0KGEsYj4+PjApfTtcbmZ1bmN0aW9uIFliKGEsYixjLGUpe2Z1bmN0aW9uIGYoZyx1LHkpe2ZvcihnPVwibnVtYmVyXCI9PXR5cGVvZiBnP2cudG9TdHJpbmcoKTpnfHxcIlwiO2cubGVuZ3RoPHU7KWc9eVswXStnO3JldHVybiBnfWZ1bmN0aW9uIGgoZyx1KXtyZXR1cm4gZihnLHUsXCIwXCIpfWZ1bmN0aW9uIGsoZyx1KXtmdW5jdGlvbiB5KFNiKXtyZXR1cm4gMD5TYj8tMTowPFNiPzE6MH12YXIgTzswPT09KE89eShnLmdldEZ1bGxZZWFyKCktdS5nZXRGdWxsWWVhcigpKSkmJjA9PT0oTz15KGcuZ2V0TW9udGgoKS11LmdldE1vbnRoKCkpKSYmKE89eShnLmdldERhdGUoKS11LmdldERhdGUoKSkpO3JldHVybiBPfWZ1bmN0aW9uIHEoZyl7c3dpdGNoKGcuZ2V0RGF5KCkpe2Nhc2UgMDpyZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLTEsMTEsMjkpO2Nhc2UgMTpyZXR1cm4gZztjYXNlIDI6cmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSwwLDMpO2Nhc2UgMzpyZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLFxuMCwyKTtjYXNlIDQ6cmV0dXJuIG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSwwLDEpO2Nhc2UgNTpyZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLTEsMTEsMzEpO2Nhc2UgNjpyZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLTEsMTEsMzApfX1mdW5jdGlvbiBuKGcpe3ZhciB1PWcuWmE7Zm9yKGc9bmV3IERhdGUoKG5ldyBEYXRlKGcuJGErMTkwMCwwLDEpKS5nZXRUaW1lKCkpOzA8dTspe3ZhciB5PWcuZ2V0TW9udGgoKSxPPShZKGcuZ2V0RnVsbFllYXIoKSk/VWI6VmIpW3ldO2lmKHU+Ty1nLmdldERhdGUoKSl1LT1PLWcuZ2V0RGF0ZSgpKzEsZy5zZXREYXRlKDEpLDExPnk/Zy5zZXRNb250aCh5KzEpOihnLnNldE1vbnRoKDApLGcuc2V0RnVsbFllYXIoZy5nZXRGdWxsWWVhcigpKzEpKTtlbHNle2cuc2V0RGF0ZShnLmdldERhdGUoKSt1KTticmVha319eT1uZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCkrMSwwLDQpO3U9cShuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCksXG4wLDQpKTt5PXEoeSk7cmV0dXJuIDA+PWsodSxnKT8wPj1rKHksZyk/Zy5nZXRGdWxsWWVhcigpKzE6Zy5nZXRGdWxsWWVhcigpOmcuZ2V0RnVsbFllYXIoKS0xfWE+Pj49MDtiPj4+PTA7Yz4+Pj0wO2U+Pj49MDt2YXIgbT16KClbZSs0MD4+Mj4+PjBdO2U9e0tiOnooKVtlPj4yPj4+MF0sSmI6eigpW2UrND4+Mj4+PjBdLGNiOnooKVtlKzg+PjI+Pj4wXSxpYjp6KClbZSsxMj4+Mj4+PjBdLGViOnooKVtlKzE2Pj4yPj4+MF0sJGE6eigpW2UrMjA+PjI+Pj4wXSxXYTp6KClbZSsyND4+Mj4+PjBdLFphOnooKVtlKzI4Pj4yPj4+MF0sVGI6eigpW2UrMzI+PjI+Pj4wXSxJYjp6KClbZSszNj4+Mj4+PjBdLExiOm0/VihtKTpcIlwifTtjPVYoYyk7bT17XCIlY1wiOlwiJWEgJWIgJWQgJUg6JU06JVMgJVlcIixcIiVEXCI6XCIlbS8lZC8leVwiLFwiJUZcIjpcIiVZLSVtLSVkXCIsXCIlaFwiOlwiJWJcIixcIiVyXCI6XCIlSTolTTolUyAlcFwiLFwiJVJcIjpcIiVIOiVNXCIsXCIlVFwiOlwiJUg6JU06JVNcIixcIiV4XCI6XCIlbS8lZC8leVwiLFwiJVhcIjpcIiVIOiVNOiVTXCIsXG5cIiVFY1wiOlwiJWNcIixcIiVFQ1wiOlwiJUNcIixcIiVFeFwiOlwiJW0vJWQvJXlcIixcIiVFWFwiOlwiJUg6JU06JVNcIixcIiVFeVwiOlwiJXlcIixcIiVFWVwiOlwiJVlcIixcIiVPZFwiOlwiJWRcIixcIiVPZVwiOlwiJWVcIixcIiVPSFwiOlwiJUhcIixcIiVPSVwiOlwiJUlcIixcIiVPbVwiOlwiJW1cIixcIiVPTVwiOlwiJU1cIixcIiVPU1wiOlwiJVNcIixcIiVPdVwiOlwiJXVcIixcIiVPVVwiOlwiJVVcIixcIiVPVlwiOlwiJVZcIixcIiVPd1wiOlwiJXdcIixcIiVPV1wiOlwiJVdcIixcIiVPeVwiOlwiJXlcIn07Zm9yKHZhciByIGluIG0pYz1jLnJlcGxhY2UobmV3IFJlZ0V4cChyLFwiZ1wiKSxtW3JdKTt2YXIgdz1cIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5XCIuc3BsaXQoXCIgXCIpLHg9XCJKYW51YXJ5IEZlYnJ1YXJ5IE1hcmNoIEFwcmlsIE1heSBKdW5lIEp1bHkgQXVndXN0IFNlcHRlbWJlciBPY3RvYmVyIE5vdmVtYmVyIERlY2VtYmVyXCIuc3BsaXQoXCIgXCIpO209e1wiJWFcIjpnPT53W2cuV2FdLnN1YnN0cmluZygwLDMpLFwiJUFcIjpnPT53W2cuV2FdLFwiJWJcIjpnPT5cbnhbZy5lYl0uc3Vic3RyaW5nKDAsMyksXCIlQlwiOmc9PnhbZy5lYl0sXCIlQ1wiOmc9PmgoKGcuJGErMTkwMCkvMTAwfDAsMiksXCIlZFwiOmc9PmgoZy5pYiwyKSxcIiVlXCI6Zz0+ZihnLmliLDIsXCIgXCIpLFwiJWdcIjpnPT5uKGcpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFwiJUdcIjpnPT5uKGcpLFwiJUhcIjpnPT5oKGcuY2IsMiksXCIlSVwiOmc9PntnPWcuY2I7MD09Zz9nPTEyOjEyPGcmJihnLT0xMik7cmV0dXJuIGgoZywyKX0sXCIlalwiOmc9Pntmb3IodmFyIHU9MCx5PTA7eTw9Zy5lYi0xO3UrPShZKGcuJGErMTkwMCk/VWI6VmIpW3krK10pO3JldHVybiBoKGcuaWIrdSwzKX0sXCIlbVwiOmc9PmgoZy5lYisxLDIpLFwiJU1cIjpnPT5oKGcuSmIsMiksXCIlblwiOigpPT5cIlxcblwiLFwiJXBcIjpnPT4wPD1nLmNiJiYxMj5nLmNiP1wiQU1cIjpcIlBNXCIsXCIlU1wiOmc9PmgoZy5LYiwyKSxcIiV0XCI6KCk9PlwiXFx0XCIsXCIldVwiOmc9PmcuV2F8fDcsXCIlVVwiOmc9PmgoTWF0aC5mbG9vcigoZy5aYSs3LWcuV2EpLzcpLDIpLFwiJVZcIjpnPT5cbnt2YXIgdT1NYXRoLmZsb29yKChnLlphKzctKGcuV2ErNiklNykvNyk7Mj49KGcuV2ErMzcxLWcuWmEtMiklNyYmdSsrO2lmKHUpNTM9PXUmJih5PShnLldhKzM3MS1nLlphKSU3LDQ9PXl8fDM9PXkmJlkoZy4kYSl8fCh1PTEpKTtlbHNle3U9NTI7dmFyIHk9KGcuV2ErNy1nLlphLTEpJTc7KDQ9PXl8fDU9PXkmJlkoZy4kYSU0MDAtMSkpJiZ1Kyt9cmV0dXJuIGgodSwyKX0sXCIld1wiOmc9PmcuV2EsXCIlV1wiOmc9PmgoTWF0aC5mbG9vcigoZy5aYSs3LShnLldhKzYpJTcpLzcpLDIpLFwiJXlcIjpnPT4oZy4kYSsxOTAwKS50b1N0cmluZygpLnN1YnN0cmluZygyKSxcIiVZXCI6Zz0+Zy4kYSsxOTAwLFwiJXpcIjpnPT57Zz1nLkliO3ZhciB1PTA8PWc7Zz1NYXRoLmFicyhnKS82MDtyZXR1cm4odT9cIitcIjpcIi1cIikrU3RyaW5nKFwiMDAwMFwiKyhnLzYwKjEwMCtnJTYwKSkuc2xpY2UoLTQpfSxcIiVaXCI6Zz0+Zy5MYixcIiUlXCI6KCk9PlwiJVwifTtjPWMucmVwbGFjZSgvJSUvZyxcIlxceDAwXFx4MDBcIik7Zm9yKHIgaW4gbSljLmluY2x1ZGVzKHIpJiZcbihjPWMucmVwbGFjZShuZXcgUmVnRXhwKHIsXCJnXCIpLG1bcl0oZSkpKTtjPWMucmVwbGFjZSgvXFwwXFwwL2csXCIlXCIpO3I9V2IoYyk7aWYoci5sZW5ndGg+YilyZXR1cm4gMDtYYihyLGEpO3JldHVybiByLmxlbmd0aC0xfWZ1bmN0aW9uIFpiKGEpe3RyeXthKCl9Y2F0Y2goYil7TShiKX19ZnVuY3Rpb24gJGIoYSl7dmFyIGI9e30sYztmb3IoYyBpbiBhKShmdW5jdGlvbihlKXt2YXIgZj1hW2VdO2JbZV09XCJmdW5jdGlvblwiPT10eXBlb2YgZj9mdW5jdGlvbigpe2FjLnB1c2goZSk7dHJ5e3JldHVybiBmLmFwcGx5KG51bGwsYXJndW1lbnRzKX1maW5hbGx5e1B8fChhYy5wb3AoKT09PWV8fE0oKSxEJiYxPT09WiYmMD09PWFjLmxlbmd0aCYmKFo9MCx4YSs9MSxaYihiYyksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZpYmVycyYmRmliZXJzLlViKCkpKX19OmZ9KShjKTtyZXR1cm4gYn12YXIgWj0wLEQ9bnVsbCxjYz0wLGFjPVtdLGRjPXt9LGVjPXt9LGZjPTAsZ2M9bnVsbCxoYz1bXTtcbmZ1bmN0aW9uIGhhKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGIpPT57Z2M9e3Jlc29sdmU6YSxyZWplY3Q6Yn19KX1mdW5jdGlvbiBpYygpe3ZhciBhPUFiKDY1NTQ4KSxiPWErMTI7QSgpW2E+PjI+Pj4wXT1iO0EoKVthKzQ+PjI+Pj4wXT1iKzY1NTM2O2I9YWNbMF07dmFyIGM9ZGNbYl07dm9pZCAwPT09YyYmKGM9ZmMrKyxkY1tiXT1jLGVjW2NdPWIpO2I9Yzt6KClbYSs4Pj4yPj4+MF09YjtyZXR1cm4gYX1mdW5jdGlvbiBqYygpe3ZhciBhPXooKVtEKzg+PjI+Pj4wXTthPU5bZWNbYV1dOy0teGE7cmV0dXJuIGEoKX1cbmZ1bmN0aW9uIGtjKGEpe2lmKCFQKXtpZigwPT09Wil7dmFyIGI9ITEsYz0hMTthKChlPTApPT57aWYoIVAmJihjYz1lLGI9ITAsYykpe1o9MjtaYigoKT0+bGMoRCkpO1widW5kZWZpbmVkXCIhPXR5cGVvZiBCcm93c2VyJiZCcm93c2VyLmhiLnNiJiZCcm93c2VyLmhiLnJlc3VtZSgpO2U9ITE7dHJ5e3ZhciBmPWpjKCl9Y2F0Y2gocSl7Zj1xLGU9ITB9dmFyIGg9ITE7aWYoIUQpe3ZhciBrPWdjO2smJihnYz1udWxsLChlP2sucmVqZWN0OmsucmVzb2x2ZSkoZiksaD0hMCl9aWYoZSYmIWgpdGhyb3cgZjt9fSk7Yz0hMDtifHwoWj0xLEQ9aWMoKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgQnJvd3NlciYmQnJvd3Nlci5oYi5zYiYmQnJvd3Nlci5oYi5wYXVzZSgpLFpiKCgpPT5tYyhEKSkpfWVsc2UgMj09PVo/KFo9MCxaYihuYyksb2MoRCksRD1udWxsLGhjLmZvckVhY2goZT0+dGIoZSkpKTpNKGBpbnZhbGlkIHN0YXRlOiAke1p9YCk7cmV0dXJuIGNjfX1cbmZ1bmN0aW9uIHBjKGEpe3JldHVybiBrYyhiPT57YSgpLnRoZW4oYil9KX1XLmdiKCk7XG52YXIgcWM9W251bGwsT2EsUGEsYmIsZGIsZWIsaWIsamIsa2IsbGIsbWIsbmIsb2IscGIscWIscmIsc2IseWIsemIsTWIsTmIsT2IsUGIsUWIsVGJdLHRjPXtyOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gcGMoYXN5bmMoKT0+e2F3YWl0IEIueGIoYSxiLGMpfSl9LGI6ZnVuY3Rpb24oYSxiLGMpe2E+Pj49MDsobmV3IFphKGEpKS5nYihiPj4+MCxjPj4+MCk7JGE9YTthYisrO3Rocm93ICRhO30sTzpmdW5jdGlvbihhKXtyYyhhPj4+MCwhRiwxLCFrYSwxMzEwNzIsITEpO1cubGIoKX0sbDpmdW5jdGlvbihhKXthPj4+PTA7SD9wb3N0TWVzc2FnZSh7Y21kOlwiY2xlYW51cFRocmVhZFwiLHRocmVhZDphfSk6S2EoYSl9LEk6Y2IsaTpkYixVOmViLEU6aWIsRzpqYixWOmtiLFM6bGIsSzptYixSOm5iLHA6b2IsRjpwYixDOnFiLFQ6cmIsRDpzYixxOigpPT4hMCxBOmZ1bmN0aW9uKGEsYil7YT4+Pj0wO2E9PWI+Pj4wP3NldFRpbWVvdXQoKCk9PlRhKCkpOkg/cG9zdE1lc3NhZ2Uoe3RhcmdldFRocmVhZDphLFxuY21kOlwiY2hlY2tNYWlsYm94XCJ9KTooYT1XLlFhW2FdKSYmYS5wb3N0TWVzc2FnZSh7Y21kOlwiY2hlY2tNYWlsYm94XCJ9KX0sTTpmdW5jdGlvbigpe3JldHVybi0xfSxOOnViLFg6ZnVuY3Rpb24oYSl7RyYmVy5RYVthPj4+MF0ucmVmKCl9LHU6ZnVuY3Rpb24oYSxiLGMpe2E9YisyMDk3MTUyPj4+MDw0MTk0MzA1LSEhYT8oYT4+PjApKzQyOTQ5NjcyOTYqYjpOYU47Yz4+Pj0wO2E9bmV3IERhdGUoMUUzKmEpO3ooKVtjPj4yPj4+MF09YS5nZXRVVENTZWNvbmRzKCk7eigpW2MrND4+Mj4+PjBdPWEuZ2V0VVRDTWludXRlcygpO3ooKVtjKzg+PjI+Pj4wXT1hLmdldFVUQ0hvdXJzKCk7eigpW2MrMTI+PjI+Pj4wXT1hLmdldFVUQ0RhdGUoKTt6KClbYysxNj4+Mj4+PjBdPWEuZ2V0VVRDTW9udGgoKTt6KClbYysyMD4+Mj4+PjBdPWEuZ2V0VVRDRnVsbFllYXIoKS0xOTAwO3ooKVtjKzI0Pj4yPj4+MF09YS5nZXRVVENEYXkoKTthPShhLmdldFRpbWUoKS1EYXRlLlVUQyhhLmdldFVUQ0Z1bGxZZWFyKCksXG4wLDEsMCwwLDAsMCkpLzg2NEU1fDA7eigpW2MrMjg+PjI+Pj4wXT1hfSx2OmZ1bmN0aW9uKGEsYixjKXthPWIrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIWE/KGE+Pj4wKSs0Mjk0OTY3Mjk2KmI6TmFOO2M+Pj49MDthPW5ldyBEYXRlKDFFMyphKTt6KClbYz4+Mj4+PjBdPWEuZ2V0U2Vjb25kcygpO3ooKVtjKzQ+PjI+Pj4wXT1hLmdldE1pbnV0ZXMoKTt6KClbYys4Pj4yPj4+MF09YS5nZXRIb3VycygpO3ooKVtjKzEyPj4yPj4+MF09YS5nZXREYXRlKCk7eigpW2MrMTY+PjI+Pj4wXT1hLmdldE1vbnRoKCk7eigpW2MrMjA+PjI+Pj4wXT1hLmdldEZ1bGxZZWFyKCktMTkwMDt6KClbYysyND4+Mj4+PjBdPWEuZ2V0RGF5KCk7Yj0oWShhLmdldEZ1bGxZZWFyKCkpP3diOnhiKVthLmdldE1vbnRoKCldK2EuZ2V0RGF0ZSgpLTF8MDt6KClbYysyOD4+Mj4+PjBdPWI7eigpW2MrMzY+PjI+Pj4wXT0tKDYwKmEuZ2V0VGltZXpvbmVPZmZzZXQoKSk7Yj0obmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLFxuNiwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgZT0obmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLDAsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCk7YT0oYiE9ZSYmYS5nZXRUaW1lem9uZU9mZnNldCgpPT1NYXRoLm1pbihlLGIpKXwwO3ooKVtjKzMyPj4yPj4+MF09YX0sdzpmdW5jdGlvbihhKXthPj4+PTA7dmFyIGI9bmV3IERhdGUoeigpW2ErMjA+PjI+Pj4wXSsxOTAwLHooKVthKzE2Pj4yPj4+MF0seigpW2ErMTI+PjI+Pj4wXSx6KClbYSs4Pj4yPj4+MF0seigpW2ErND4+Mj4+PjBdLHooKVthPj4yPj4+MF0sMCksYz16KClbYSszMj4+Mj4+PjBdLGU9Yi5nZXRUaW1lem9uZU9mZnNldCgpLGY9KG5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSw2LDEpKS5nZXRUaW1lem9uZU9mZnNldCgpLGg9KG5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSwwLDEpKS5nZXRUaW1lem9uZU9mZnNldCgpLGs9TWF0aC5taW4oaCxmKTswPmM/eigpW2ErMzI+PjI+Pj4wXT1OdW1iZXIoZiE9aCYmaz09ZSk6XG4wPGMhPShrPT1lKSYmKGY9TWF0aC5tYXgoaCxmKSxiLnNldFRpbWUoYi5nZXRUaW1lKCkrNkU0KigoMDxjP2s6ZiktZSkpKTt6KClbYSsyND4+Mj4+PjBdPWIuZ2V0RGF5KCk7Yz0oWShiLmdldEZ1bGxZZWFyKCkpP3diOnhiKVtiLmdldE1vbnRoKCldK2IuZ2V0RGF0ZSgpLTF8MDt6KClbYSsyOD4+Mj4+PjBdPWM7eigpW2E+PjI+Pj4wXT1iLmdldFNlY29uZHMoKTt6KClbYSs0Pj4yPj4+MF09Yi5nZXRNaW51dGVzKCk7eigpW2ErOD4+Mj4+PjBdPWIuZ2V0SG91cnMoKTt6KClbYSsxMj4+Mj4+PjBdPWIuZ2V0RGF0ZSgpO3ooKVthKzE2Pj4yPj4+MF09Yi5nZXRNb250aCgpO3ooKVthKzIwPj4yPj4+MF09Yi5nZXRZZWFyKCk7YT1iLmdldFRpbWUoKS8xRTM7cmV0dXJuIHNjKChVPWEsMTw9K01hdGguYWJzKFUpPzA8VT8rTWF0aC5mbG9vcihVLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFUtKyh+flU+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApKSxhPj4+MH0sczp5Yix0OnpiLFxuejpmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZShtKXtyZXR1cm4obT1tLnRvVGltZVN0cmluZygpLm1hdGNoKC9cXCgoW0EtWmEteiBdKylcXCkkLykpP21bMV06XCJHTVRcIn1hPj4+PTA7Yj4+Pj0wO2M+Pj49MDt2YXIgZj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksaD1uZXcgRGF0ZShmLDAsMSksaz1uZXcgRGF0ZShmLDYsMSk7Zj1oLmdldFRpbWV6b25lT2Zmc2V0KCk7dmFyIHE9ay5nZXRUaW1lem9uZU9mZnNldCgpLG49TWF0aC5tYXgoZixxKTtBKClbYT4+Mj4+PjBdPTYwKm47eigpW2I+PjI+Pj4wXT1OdW1iZXIoZiE9cSk7YT1lKGgpO2I9ZShrKTthPUJiKGEpO2I9QmIoYik7cTxmPyhBKClbYz4+Mj4+PjBdPWEsQSgpW2MrND4+Mj4+PjBdPWIpOihBKClbYz4+Mj4+PjBdPWIsQSgpW2MrND4+Mj4+PjBdPWEpfSxkOigpPT57TShcIlwiKX0sYzpmdW5jdGlvbihhLGIsYyl7YT4+Pj0wO2I9RGIoYj4+PjAsYz4+PjApO3JldHVybiBIYVthXS5hcHBseShudWxsLGIpfSxrOmZ1bmN0aW9uKGEsXG5iLGMpe2E+Pj49MDtiPURiKGI+Pj4wLGM+Pj4wKTtyZXR1cm4gSGFbYV0uYXBwbHkobnVsbCxiKX0sbTpmdW5jdGlvbigpe30sajpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxXOigpPT57eGErPTE7dGhyb3dcInVud2luZFwiO30sQjpmdW5jdGlvbigpe3JldHVybiA0Mjk0OTAxNzYwfSxmOigpPT5wZXJmb3JtYW5jZS50aW1lT3JpZ2luK3BlcmZvcm1hbmNlLm5vdygpLGc6ZnVuY3Rpb24oKXtyZXR1cm4gRz9yZXF1aXJlKFwib3NcIikuY3B1cygpLmxlbmd0aDpuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeX0sTDpmdW5jdGlvbihhLGIsYyxlKXtXLlBiPWI+Pj4wO0liLmxlbmd0aD1jO2I9ZT4+PjA+PjM7Zm9yKGU9MDtlPGM7ZSsrKUliW2VdPWRhKClbYitlPj4+MF07cmV0dXJuKDA+YT9IYVstYS0xXTpxY1thXSkuYXBwbHkobnVsbCxJYil9LHk6ZnVuY3Rpb24oYSl7YT4+Pj0wO3ZhciBiPXYoKS5sZW5ndGg7aWYoYTw9Ynx8NDI5NDkwMTc2MDxhKXJldHVybiExO2Zvcih2YXIgYz1cbjE7ND49YztjKj0yKXt2YXIgZT1iKigxKy4yL2MpO2U9TWF0aC5taW4oZSxhKzEwMDY2MzI5Nik7dmFyIGY9TWF0aDtlPU1hdGgubWF4KGEsZSk7YTp7Zj1mLm1pbi5jYWxsKGYsNDI5NDkwMTc2MCxlKyg2NTUzNi1lJTY1NTM2KSU2NTUzNiktbC5idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2O3RyeXtsLmdyb3coZik7dCgpO3ZhciBoPTE7YnJlYWsgYX1jYXRjaChrKXt9aD12b2lkIDB9aWYoaClyZXR1cm4hMH1yZXR1cm4hMX0sUDpNYixROk5iLEg6UWEsaDpPYixvOlBiLHg6UWIsbjpUYixhOmx8fEIud2FzbU1lbW9yeSxKOlliLGU6ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIFliKGE+Pj4wLGI+Pj4wLGM+Pj4wLGU+Pj4wKX19O1xuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShjLGUpe2M9Yy5leHBvcnRzO2M9JGIoYyk7Tj1jPXVjKGMpO1cubWIucHVzaChOLkRhKTt2YS51bnNoaWZ0KE4uWSk7c2E9ZTtCYSgpO3JldHVybiBjfXZhciBiPXthOnRjfTtBYSgpO2lmKEIuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gQi5pbnN0YW50aWF0ZVdhc20oYixhKX1jYXRjaChjKXtLKFwiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogXCIrYyksQyhjKX1HYShiLGZ1bmN0aW9uKGMpe2EoYy5pbnN0YW5jZSxjLm1vZHVsZSl9KS5jYXRjaChDKTtyZXR1cm57fX0pKCk7Qi5fT3J0SW5pdD0oYSxiKT0+KEIuX09ydEluaXQ9Ti5aKShhLGIpO0IuX09ydEdldExhc3RFcnJvcj0oYSxiKT0+KEIuX09ydEdldExhc3RFcnJvcj1OLl8pKGEsYik7XG5CLl9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucz0oYSxiLGMsZSxmLGgsayxxLG4sbSk9PihCLl9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucz1OLiQpKGEsYixjLGUsZixoLGsscSxuLG0pO0IuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyPShhLGIpPT4oQi5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXI9Ti5hYSkoYSxiKTtCLl9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGU9KGEsYixjKT0+KEIuX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZT1OLmJhKShhLGIsYyk7Qi5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5PShhLGIsYyk9PihCLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnk9Ti5jYSkoYSxiLGMpO0IuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucz1hPT4oQi5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zPU4uZGEpKGEpO0IuX09ydENyZWF0ZVNlc3Npb249KGEsYixjKT0+KEIuX09ydENyZWF0ZVNlc3Npb249Ti5lYSkoYSxiLGMpO1xuQi5fT3J0UmVsZWFzZVNlc3Npb249YT0+KEIuX09ydFJlbGVhc2VTZXNzaW9uPU4uZmEpKGEpO0IuX09ydEdldElucHV0T3V0cHV0Q291bnQ9KGEsYixjKT0+KEIuX09ydEdldElucHV0T3V0cHV0Q291bnQ9Ti5nYSkoYSxiLGMpO0IuX09ydEdldElucHV0TmFtZT0oYSxiKT0+KEIuX09ydEdldElucHV0TmFtZT1OLmhhKShhLGIpO0IuX09ydEdldE91dHB1dE5hbWU9KGEsYik9PihCLl9PcnRHZXRPdXRwdXROYW1lPU4uaWEpKGEsYik7Qi5fT3J0RnJlZT1hPT4oQi5fT3J0RnJlZT1OLmphKShhKTtCLl9PcnRDcmVhdGVUZW5zb3I9KGEsYixjLGUsZixoKT0+KEIuX09ydENyZWF0ZVRlbnNvcj1OLmthKShhLGIsYyxlLGYsaCk7Qi5fT3J0R2V0VGVuc29yRGF0YT0oYSxiLGMsZSxmKT0+KEIuX09ydEdldFRlbnNvckRhdGE9Ti5sYSkoYSxiLGMsZSxmKTtCLl9PcnRSZWxlYXNlVGVuc29yPWE9PihCLl9PcnRSZWxlYXNlVGVuc29yPU4ubWEpKGEpO1xuQi5fT3J0Q3JlYXRlUnVuT3B0aW9ucz0oYSxiLGMsZSk9PihCLl9PcnRDcmVhdGVSdW5PcHRpb25zPU4ubmEpKGEsYixjLGUpO0IuX09ydEFkZFJ1bkNvbmZpZ0VudHJ5PShhLGIsYyk9PihCLl9PcnRBZGRSdW5Db25maWdFbnRyeT1OLm9hKShhLGIsYyk7Qi5fT3J0UmVsZWFzZVJ1bk9wdGlvbnM9YT0+KEIuX09ydFJlbGVhc2VSdW5PcHRpb25zPU4ucGEpKGEpO0IuX09ydENyZWF0ZUJpbmRpbmc9YT0+KEIuX09ydENyZWF0ZUJpbmRpbmc9Ti5xYSkoYSk7Qi5fT3J0QmluZElucHV0PShhLGIsYyk9PihCLl9PcnRCaW5kSW5wdXQ9Ti5yYSkoYSxiLGMpO0IuX09ydEJpbmRPdXRwdXQ9KGEsYixjLGUpPT4oQi5fT3J0QmluZE91dHB1dD1OLnNhKShhLGIsYyxlKTtCLl9PcnRDbGVhckJvdW5kT3V0cHV0cz1hPT4oQi5fT3J0Q2xlYXJCb3VuZE91dHB1dHM9Ti50YSkoYSk7Qi5fT3J0UmVsZWFzZUJpbmRpbmc9YT0+KEIuX09ydFJlbGVhc2VCaW5kaW5nPU4udWEpKGEpO1xuQi5fT3J0UnVuV2l0aEJpbmRpbmc9KGEsYixjLGUsZik9PihCLl9PcnRSdW5XaXRoQmluZGluZz1OLnZhKShhLGIsYyxlLGYpO0IuX09ydFJ1bj0oYSxiLGMsZSxmLGgsayxxKT0+KEIuX09ydFJ1bj1OLndhKShhLGIsYyxlLGYsaCxrLHEpO0IuX09ydEVuZFByb2ZpbGluZz1hPT4oQi5fT3J0RW5kUHJvZmlsaW5nPU4ueGEpKGEpO0IuX0pzZXBPdXRwdXQ9KGEsYixjKT0+KEIuX0pzZXBPdXRwdXQ9Ti55YSkoYSxiLGMpO0IuX0pzZXBHZXROb2RlTmFtZT1hPT4oQi5fSnNlcEdldE5vZGVOYW1lPU4uemEpKGEpO3ZhciBTYT1CLl9wdGhyZWFkX3NlbGY9KCk9PihTYT1CLl9wdGhyZWFkX3NlbGY9Ti5BYSkoKSxBYj1CLl9tYWxsb2M9YT0+KEFiPUIuX21hbGxvYz1OLkJhKShhKSxvYz1CLl9mcmVlPWE9PihvYz1CLl9mcmVlPU4uQ2EpKGEpO0IuX19lbXNjcmlwdGVuX3Rsc19pbml0PSgpPT4oQi5fX2Vtc2NyaXB0ZW5fdGxzX2luaXQ9Ti5EYSkoKTtcbnZhciByYz1CLl9fZW1zY3JpcHRlbl90aHJlYWRfaW5pdD0oYSxiLGMsZSxmLGgpPT4ocmM9Qi5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2luaXQ9Ti5GYSkoYSxiLGMsZSxmLGgpO0IuX19lbXNjcmlwdGVuX3RocmVhZF9jcmFzaGVkPSgpPT4oQi5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2NyYXNoZWQ9Ti5HYSkoKTtcbnZhciBIYj0oYSxiLGMsZSk9PihIYj1OLkhhKShhLGIsYyxlKSxSYT1hPT4oUmE9Ti5JYSkoYSksWWE9Qi5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXQ9YT0+KFlhPUIuX19lbXNjcmlwdGVuX3RocmVhZF9leGl0PU4uSmEpKGEpLHZiPUIuX19lbXNjcmlwdGVuX2NoZWNrX21haWxib3g9KCk9Pih2Yj1CLl9fZW1zY3JpcHRlbl9jaGVja19tYWlsYm94PU4uS2EpKCksc2M9YT0+KHNjPU4uTGEpKGEpLFZhPShhLGIpPT4oVmE9Ti5NYSkoYSxiKSxFYj0oKT0+KEViPU4uTmEpKCksV2E9YT0+KFdhPU4uT2EpKGEpLEdiPWE9PihHYj1OLlBhKShhKSxYYT1CLmR5bkNhbGxfaWk9KGEsYik9PihYYT1CLmR5bkNhbGxfaWk9Ti5SYSkoYSxiKSxtYz1hPT4obWM9Ti5TYSkoYSksYmM9KCk9PihiYz1OLlRhKSgpLGxjPWE9PihsYz1OLlVhKShhKSxuYz0oKT0+KG5jPU4uVmEpKCk7Qi5fX19zdGFydF9lbV9qcz05MTc2Nzg7Qi5fX19zdG9wX2VtX2pzPTkxNzgzOTtcbmZ1bmN0aW9uIHVjKGEpe2E9T2JqZWN0LmFzc2lnbih7fSxhKTt2YXIgYj1lPT4oKT0+ZSgpPj4+MCxjPWU9PmY9PmUoZik+Pj4wO2EuX19lcnJub19sb2NhdGlvbj1iKGEuX19lcnJub19sb2NhdGlvbik7YS5wdGhyZWFkX3NlbGY9YihhLnB0aHJlYWRfc2VsZik7YS5tYWxsb2M9YyhhLm1hbGxvYyk7YS5zdGFja1NhdmU9YihhLnN0YWNrU2F2ZSk7YS5zdGFja0FsbG9jPWMoYS5zdGFja0FsbG9jKTtyZXR1cm4gYX1CLmtlZXBSdW50aW1lQWxpdmU9eWE7Qi53YXNtTWVtb3J5PWw7Qi5zdGFja0FsbG9jPUdiO0Iuc3RhY2tTYXZlPUViO0Iuc3RhY2tSZXN0b3JlPVdhO0IuVVRGOFRvU3RyaW5nPVY7Qi5zdHJpbmdUb1VURjg9aGI7Qi5sZW5ndGhCeXRlc1VURjg9ZmI7Qi5FeGl0U3RhdHVzPUlhO0IuUFRocmVhZD1XO3ZhciB2YztTPWZ1bmN0aW9uIHdjKCl7dmN8fHhjKCk7dmN8fChTPXdjKX07XG5mdW5jdGlvbiB4Yygpe2Z1bmN0aW9uIGEoKXtpZighdmMmJih2Yz0hMCxCLmNhbGxlZFJ1bj0hMCwhUCkpe0h8fFVhKHZhKTtmYShCKTtpZihCLm9uUnVudGltZUluaXRpYWxpemVkKUIub25SdW50aW1lSW5pdGlhbGl6ZWQoKTtpZighSCl7aWYoQi5wb3N0UnVuKWZvcihcImZ1bmN0aW9uXCI9PXR5cGVvZiBCLnBvc3RSdW4mJihCLnBvc3RSdW49W0IucG9zdFJ1bl0pO0IucG9zdFJ1bi5sZW5ndGg7KXt2YXIgYj1CLnBvc3RSdW4uc2hpZnQoKTt3YS51bnNoaWZ0KGIpfVVhKHdhKX19fWlmKCEoMDxSKSlpZihIKWZhKEIpLEh8fFVhKHZhKSxzdGFydFdvcmtlcihCKTtlbHNle2lmKEIucHJlUnVuKWZvcihcImZ1bmN0aW9uXCI9PXR5cGVvZiBCLnByZVJ1biYmKEIucHJlUnVuPVtCLnByZVJ1bl0pO0IucHJlUnVuLmxlbmd0aDspdWEudW5zaGlmdChCLnByZVJ1bi5zaGlmdCgpKTtVYSh1YSk7MDxSfHwoQi5zZXRTdGF0dXM/KEIuc2V0U3RhdHVzKFwiUnVubmluZy4uLlwiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe0Iuc2V0U3RhdHVzKFwiXCIpfSxcbjEpO2EoKX0sMSkpOmEoKSl9fWlmKEIucHJlSW5pdClmb3IoXCJmdW5jdGlvblwiPT10eXBlb2YgQi5wcmVJbml0JiYoQi5wcmVJbml0PVtCLnByZUluaXRdKTswPEIucHJlSW5pdC5sZW5ndGg7KUIucHJlSW5pdC5wb3AoKSgpO3hjKCk7XG5cblxuICByZXR1cm4gbW9kdWxlQXJnLnJlYWR5XG59XG5cbik7XG59KSgpO1xuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgbW9kdWxlLmV4cG9ydHMgPSBvcnRXYXNtVGhyZWFkZWQ7XG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pXG4gIGRlZmluZShbXSwgKCkgPT4gb3J0V2FzbVRocmVhZGVkKTtcbiIsICJcInVzZSBzdHJpY3RcIjt2YXIgTW9kdWxlPXt9O3ZhciBFTlZJUk9OTUVOVF9JU19OT0RFPXR5cGVvZiBwcm9jZXNzPT1cIm9iamVjdFwiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucz09XCJvYmplY3RcIiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09XCJzdHJpbmdcIjtpZihFTlZJUk9OTUVOVF9JU19OT0RFKXt2YXIgbm9kZVdvcmtlclRocmVhZHM9cmVxdWlyZShcIndvcmtlcl90aHJlYWRzXCIpO3ZhciBwYXJlbnRQb3J0PW5vZGVXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ7cGFyZW50UG9ydC5vbihcIm1lc3NhZ2VcIixkYXRhPT5vbm1lc3NhZ2Uoe2RhdGE6ZGF0YX0pKTt2YXIgZnM9cmVxdWlyZShcImZzXCIpO09iamVjdC5hc3NpZ24oZ2xvYmFsLHtzZWxmOmdsb2JhbCxyZXF1aXJlOnJlcXVpcmUsTW9kdWxlOk1vZHVsZSxsb2NhdGlvbjp7aHJlZjpfX2ZpbGVuYW1lfSxXb3JrZXI6bm9kZVdvcmtlclRocmVhZHMuV29ya2VyLGltcG9ydFNjcmlwdHM6Zj0+KDAsZXZhbCkoZnMucmVhZEZpbGVTeW5jKGYsXCJ1dGY4XCIpK1wiLy8jIHNvdXJjZVVSTD1cIitmKSxwb3N0TWVzc2FnZTptc2c9PnBhcmVudFBvcnQucG9zdE1lc3NhZ2UobXNnKSxwZXJmb3JtYW5jZTpnbG9iYWwucGVyZm9ybWFuY2V8fHtub3c6RGF0ZS5ub3d9fSl9dmFyIGluaXRpYWxpemVkSlM9ZmFsc2U7ZnVuY3Rpb24gdGhyZWFkUHJpbnRFcnIoKXt2YXIgdGV4dD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO2lmKEVOVklST05NRU5UX0lTX05PREUpe2ZzLndyaXRlU3luYygyLHRleHQrXCJcXG5cIik7cmV0dXJufWNvbnNvbGUuZXJyb3IodGV4dCl9ZnVuY3Rpb24gdGhyZWFkQWxlcnQoKXt2YXIgdGV4dD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO3Bvc3RNZXNzYWdlKHtjbWQ6XCJhbGVydFwiLHRleHQ6dGV4dCx0aHJlYWRJZDpNb2R1bGVbXCJfcHRocmVhZF9zZWxmXCJdKCl9KX12YXIgZXJyPXRocmVhZFByaW50RXJyO3NlbGYuYWxlcnQ9dGhyZWFkQWxlcnQ7TW9kdWxlW1wiaW5zdGFudGlhdGVXYXNtXCJdPShpbmZvLHJlY2VpdmVJbnN0YW5jZSk9Pnt2YXIgbW9kdWxlPU1vZHVsZVtcIndhc21Nb2R1bGVcIl07TW9kdWxlW1wid2FzbU1vZHVsZVwiXT1udWxsO3ZhciBpbnN0YW5jZT1uZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLGluZm8pO3JldHVybiByZWNlaXZlSW5zdGFuY2UoaW5zdGFuY2UpfTtzZWxmLm9udW5oYW5kbGVkcmVqZWN0aW9uPWU9Pnt0aHJvdyBlLnJlYXNvbj8/ZX07ZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShlKXt0cnl7aWYoZS5kYXRhLmNtZD09PVwibG9hZFwiKXtsZXQgbWVzc2FnZVF1ZXVlPVtdO3NlbGYub25tZXNzYWdlPWU9Pm1lc3NhZ2VRdWV1ZS5wdXNoKGUpO3NlbGYuc3RhcnRXb3JrZXI9aW5zdGFuY2U9PntNb2R1bGU9aW5zdGFuY2U7cG9zdE1lc3NhZ2Uoe1wiY21kXCI6XCJsb2FkZWRcIn0pO2ZvcihsZXQgbXNnIG9mIG1lc3NhZ2VRdWV1ZSl7aGFuZGxlTWVzc2FnZShtc2cpfXNlbGYub25tZXNzYWdlPWhhbmRsZU1lc3NhZ2V9O01vZHVsZVtcIndhc21Nb2R1bGVcIl09ZS5kYXRhLndhc21Nb2R1bGU7Zm9yKGNvbnN0IGhhbmRsZXIgb2YgZS5kYXRhLmhhbmRsZXJzKXtNb2R1bGVbaGFuZGxlcl09KC4uLmFyZ3MpPT57cG9zdE1lc3NhZ2Uoe2NtZDpcImNhbGxIYW5kbGVyXCIsaGFuZGxlcjpoYW5kbGVyLGFyZ3M6YXJnc30pfX1Nb2R1bGVbXCJ3YXNtTWVtb3J5XCJdPWUuZGF0YS53YXNtTWVtb3J5O01vZHVsZVtcImJ1ZmZlclwiXT1Nb2R1bGVbXCJ3YXNtTWVtb3J5XCJdLmJ1ZmZlcjtNb2R1bGVbXCJFTlZJUk9OTUVOVF9JU19QVEhSRUFEXCJdPXRydWU7aWYodHlwZW9mIGUuZGF0YS51cmxPckJsb2I9PVwic3RyaW5nXCIpe2ltcG9ydFNjcmlwdHMoZS5kYXRhLnVybE9yQmxvYil9ZWxzZXt2YXIgb2JqZWN0VXJsPVVSTC5jcmVhdGVPYmplY3RVUkwoZS5kYXRhLnVybE9yQmxvYik7aW1wb3J0U2NyaXB0cyhvYmplY3RVcmwpO1VSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKX1vcnRXYXNtVGhyZWFkZWQoTW9kdWxlKX1lbHNlIGlmKGUuZGF0YS5jbWQ9PT1cInJ1blwiKXtNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX2luaXRcIl0oZS5kYXRhLnB0aHJlYWRfcHRyLC8qaXNNYWluQnJvd3NlclRocmVhZD0qLzAsLyppc01haW5SdW50aW1lVGhyZWFkPSovMCwvKmNhbkJsb2NrPSovMSk7TW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9tYWlsYm94X2F3YWl0XCJdKGUuZGF0YS5wdGhyZWFkX3B0cik7TW9kdWxlW1wiZXN0YWJsaXNoU3RhY2tTcGFjZVwiXSgpO01vZHVsZVtcIlBUaHJlYWRcIl0ucmVjZWl2ZU9iamVjdFRyYW5zZmVyKGUuZGF0YSk7TW9kdWxlW1wiUFRocmVhZFwiXS50aHJlYWRJbml0VExTKCk7aWYoIWluaXRpYWxpemVkSlMpe2luaXRpYWxpemVkSlM9dHJ1ZX10cnl7TW9kdWxlW1wiaW52b2tlRW50cnlQb2ludFwiXShlLmRhdGEuc3RhcnRfcm91dGluZSxlLmRhdGEuYXJnKX1jYXRjaChleCl7aWYoZXghPVwidW53aW5kXCIpe3Rocm93IGV4fX19ZWxzZSBpZihlLmRhdGEuY21kPT09XCJjYW5jZWxcIil7aWYoTW9kdWxlW1wiX3B0aHJlYWRfc2VsZlwiXSgpKXtNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXRcIl0oLTEpfX1lbHNlIGlmKGUuZGF0YS50YXJnZXQ9PT1cInNldGltbWVkaWF0ZVwiKXt9ZWxzZSBpZihlLmRhdGEuY21kPT09XCJjaGVja01haWxib3hcIil7aWYoaW5pdGlhbGl6ZWRKUyl7TW9kdWxlW1wiY2hlY2tNYWlsYm94XCJdKCl9fWVsc2UgaWYoZS5kYXRhLmNtZCl7ZXJyKFwid29ya2VyLmpzIHJlY2VpdmVkIHVua25vd24gY29tbWFuZCBcIitlLmRhdGEuY21kKTtlcnIoZS5kYXRhKX19Y2F0Y2goZXgpe2lmKE1vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfY3Jhc2hlZFwiXSl7TW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9jcmFzaGVkXCJdKCl9dGhyb3cgZXh9fXNlbGYub25tZXNzYWdlPWhhbmRsZU1lc3NhZ2U7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG4vLyBhIGR1bW15IHR5cGUgZGVjbGFyYXRpb24gZm9yIEZsb2F0MTZBcnJheSBpbiBjYXNlIGFueSBwb2x5ZmlsbCBpcyBhdmFpbGFibGUuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3QgRmxvYXQxNkFycmF5OiBhbnk7XG59XG5cbi8vIFRoaXMgZmlsZSBpbmNsdWRlcyBjb21tb24gZGVmaW5pdGlvbnMuIFRoZXkgZG8gTk9UIGhhdmUgZGVwZW5kZW5jeSBvbiB0aGUgV2ViQXNzZW1ibHkgaW5zdGFuY2UuXG5cbi8qKlxuICogQ29waWVkIGZyb20gT05OWCBkZWZpbml0aW9uLiBVc2UgdGhpcyB0byBkcm9wIGRlcGVuZGVuY3kgJ29ubnhfcHJvdG8nIHRvIGRlY3JlYXNlIGNvbXBpbGVkIC5qcyBmaWxlIHNpemUuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIERhdGFUeXBlIHtcbiAgdW5kZWZpbmVkID0gMCxcbiAgZmxvYXQgPSAxLFxuICB1aW50OCA9IDIsXG4gIGludDggPSAzLFxuICB1aW50MTYgPSA0LFxuICBpbnQxNiA9IDUsXG4gIGludDMyID0gNixcbiAgaW50NjQgPSA3LFxuICBzdHJpbmcgPSA4LFxuICBib29sID0gOSxcbiAgZmxvYXQxNiA9IDEwLFxuICBkb3VibGUgPSAxMSxcbiAgdWludDMyID0gMTIsXG4gIHVpbnQ2NCA9IDEzLFxuICBjb21wbGV4NjQgPSAxNCxcbiAgY29tcGxleDEyOCA9IDE1LFxuICBiZmxvYXQxNiA9IDE2XG59XG5cbi8qKlxuICogTWFwIHN0cmluZyB0ZW5zb3IgZGF0YSB0byBlbnVtIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCB0ZW5zb3JEYXRhVHlwZVN0cmluZ1RvRW51bSA9ICh0eXBlOiBzdHJpbmcpOiBEYXRhVHlwZSA9PiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2ludDgnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmludDg7XG4gICAgY2FzZSAndWludDgnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnVpbnQ4O1xuICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmJvb2w7XG4gICAgY2FzZSAnaW50MTYnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmludDE2O1xuICAgIGNhc2UgJ3VpbnQxNic6XG4gICAgICByZXR1cm4gRGF0YVR5cGUudWludDE2O1xuICAgIGNhc2UgJ2ludDMyJzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS5pbnQzMjtcbiAgICBjYXNlICd1aW50MzInOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnVpbnQzMjtcbiAgICBjYXNlICdmbG9hdDE2JzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS5mbG9hdDE2O1xuICAgIGNhc2UgJ2Zsb2F0MzInOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmZsb2F0O1xuICAgIGNhc2UgJ2Zsb2F0NjQnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmRvdWJsZTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnN0cmluZztcbiAgICBjYXNlICdpbnQ2NCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuaW50NjQ7XG4gICAgY2FzZSAndWludDY0JzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS51aW50NjQ7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBkYXRhIHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBNYXAgZW51bSB2YWx1ZSB0byBzdHJpbmcgdGVuc29yIGRhdGFcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nID0gKHR5cGVQcm90bzogRGF0YVR5cGUpOiBUZW5zb3IuVHlwZSA9PiB7XG4gIHN3aXRjaCAodHlwZVByb3RvKSB7XG4gICAgY2FzZSBEYXRhVHlwZS5pbnQ4OlxuICAgICAgcmV0dXJuICdpbnQ4JztcbiAgICBjYXNlIERhdGFUeXBlLnVpbnQ4OlxuICAgICAgcmV0dXJuICd1aW50OCc7XG4gICAgY2FzZSBEYXRhVHlwZS5ib29sOlxuICAgICAgcmV0dXJuICdib29sJztcbiAgICBjYXNlIERhdGFUeXBlLmludDE2OlxuICAgICAgcmV0dXJuICdpbnQxNic7XG4gICAgY2FzZSBEYXRhVHlwZS51aW50MTY6XG4gICAgICByZXR1cm4gJ3VpbnQxNic7XG4gICAgY2FzZSBEYXRhVHlwZS5pbnQzMjpcbiAgICAgIHJldHVybiAnaW50MzInO1xuICAgIGNhc2UgRGF0YVR5cGUudWludDMyOlxuICAgICAgcmV0dXJuICd1aW50MzInO1xuICAgIGNhc2UgRGF0YVR5cGUuZmxvYXQxNjpcbiAgICAgIHJldHVybiAnZmxvYXQxNic7XG4gICAgY2FzZSBEYXRhVHlwZS5mbG9hdDpcbiAgICAgIHJldHVybiAnZmxvYXQzMic7XG4gICAgY2FzZSBEYXRhVHlwZS5kb3VibGU6XG4gICAgICByZXR1cm4gJ2Zsb2F0NjQnO1xuICAgIGNhc2UgRGF0YVR5cGUuc3RyaW5nOlxuICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIGNhc2UgRGF0YVR5cGUuaW50NjQ6XG4gICAgICByZXR1cm4gJ2ludDY0JztcbiAgICBjYXNlIERhdGFUeXBlLnVpbnQ2NDpcbiAgICAgIHJldHVybiAndWludDY0JztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGRhdGEgdHlwZTogJHt0eXBlUHJvdG99YCk7XG4gIH1cbn07XG5cbi8qKlxuICogZ2V0IHRlbnNvciBlbGVtZW50IHNpemUgaW4gYnl0ZXMgYnkgdGhlIGdpdmVuIGRhdGEgdHlwZVxuICogQHJldHVybnMgc2l6ZSBpbiBpbnRlZ2VyIG9yIHVuZGVmaW5lZCBpZiB0aGUgZGF0YSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRlbnNvckVsZW1lbnRTaXplID0gKGRhdGVUeXBlOiBudW1iZXIpOiBudW1iZXJ8XG4gICAgdW5kZWZpbmVkID0+IFt1bmRlZmluZWQsIDQsIDEsIDEsIDIsIDIsIDQsIDgsIHVuZGVmaW5lZCwgMSwgMiwgOCwgNCwgOCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1bZGF0ZVR5cGVdO1xuXG4vKipcbiAqIGdldCB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciBieSB0aGUgZ2l2ZW4gdGVuc29yIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3RvciA9ICh0eXBlOiBUZW5zb3IuVHlwZSk6IEZsb2F0MzJBcnJheUNvbnN0cnVjdG9yfFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcnxcbiAgICBJbnQ4QXJyYXlDb25zdHJ1Y3RvcnxVaW50MTZBcnJheUNvbnN0cnVjdG9yfEludDE2QXJyYXlDb25zdHJ1Y3RvcnxJbnQzMkFycmF5Q29uc3RydWN0b3J8QmlnSW50NjRBcnJheUNvbnN0cnVjdG9yfFxuICAgIFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcnxGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvcnxVaW50MzJBcnJheUNvbnN0cnVjdG9yfEJpZ1VpbnQ2NEFycmF5Q29uc3RydWN0b3IgPT4ge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ2Zsb2F0MTYnOlxuICAgICAgICAgIC8vIGFsbG93IEZsb2F0MTZBcnJheSBwb2x5ZmlsbC5cbiAgICAgICAgICByZXR1cm4gdHlwZW9mIEZsb2F0MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgRmxvYXQxNkFycmF5LmZyb20gPyBGbG9hdDE2QXJyYXkgOiBVaW50MTZBcnJheTtcbiAgICAgICAgY2FzZSAnZmxvYXQzMic6XG4gICAgICAgICAgcmV0dXJuIEZsb2F0MzJBcnJheTtcbiAgICAgICAgY2FzZSAndWludDgnOlxuICAgICAgICAgIHJldHVybiBVaW50OEFycmF5O1xuICAgICAgICBjYXNlICdpbnQ4JzpcbiAgICAgICAgICByZXR1cm4gSW50OEFycmF5O1xuICAgICAgICBjYXNlICd1aW50MTYnOlxuICAgICAgICAgIHJldHVybiBVaW50MTZBcnJheTtcbiAgICAgICAgY2FzZSAnaW50MTYnOlxuICAgICAgICAgIHJldHVybiBJbnQxNkFycmF5O1xuICAgICAgICBjYXNlICdpbnQzMic6XG4gICAgICAgICAgcmV0dXJuIEludDMyQXJyYXk7XG4gICAgICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgICAgIHJldHVybiBVaW50OEFycmF5O1xuICAgICAgICBjYXNlICdmbG9hdDY0JzpcbiAgICAgICAgICByZXR1cm4gRmxvYXQ2NEFycmF5O1xuICAgICAgICBjYXNlICd1aW50MzInOlxuICAgICAgICAgIHJldHVybiBVaW50MzJBcnJheTtcbiAgICAgICAgY2FzZSAnaW50NjQnOlxuICAgICAgICAgIHJldHVybiBCaWdJbnQ2NEFycmF5O1xuICAgICAgICBjYXNlICd1aW50NjQnOlxuICAgICAgICAgIHJldHVybiBCaWdVaW50NjRBcnJheTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgIH1cbiAgICB9O1xuXG4vKipcbiAqIE1hcCBzdHJpbmcgbG9nIGxldmVsIHRvIGludGVnZXIgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGxvZ0xldmVsU3RyaW5nVG9FbnVtID0gKGxvZ0xldmVsPzogJ3ZlcmJvc2UnfCdpbmZvJ3wnd2FybmluZyd8J2Vycm9yJ3wnZmF0YWwnKTogbnVtYmVyID0+IHtcbiAgc3dpdGNoIChsb2dMZXZlbCkge1xuICAgIGNhc2UgJ3ZlcmJvc2UnOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAnaW5mbyc6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiAzO1xuICAgIGNhc2UgJ2ZhdGFsJzpcbiAgICAgIHJldHVybiA0O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvZ2dpbmcgbGV2ZWw6ICR7bG9nTGV2ZWx9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdGVuc29yIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IEdQVSBidWZmZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGlzR3B1QnVmZmVyU3VwcG9ydGVkVHlwZSA9ICh0eXBlOiBUZW5zb3IuVHlwZSk6IHR5cGUgaXMgVGVuc29yLkdwdUJ1ZmZlckRhdGFUeXBlcyA9PiB0eXBlID09PSAnZmxvYXQzMicgfHxcbiAgICB0eXBlID09PSAnZmxvYXQxNicgfHwgdHlwZSA9PT0gJ2ludDMyJyB8fCB0eXBlID09PSAnaW50NjQnIHx8IHR5cGUgPT09ICd1aW50MzInIHx8IHR5cGUgPT09ICd1aW50OCcgfHxcbiAgICB0eXBlID09PSAnYm9vbCc7XG5cbi8qKlxuICogTWFwIHN0cmluZyBkYXRhIGxvY2F0aW9uIHRvIGludGVnZXIgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGFMb2NhdGlvblN0cmluZ1RvRW51bSA9IChsb2NhdGlvbjogVGVuc29yLkRhdGFMb2NhdGlvbik6IG51bWJlciA9PiB7XG4gIHN3aXRjaCAobG9jYXRpb24pIHtcbiAgICBjYXNlICdub25lJzpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgJ2NwdSc6XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlICdjcHUtcGlubmVkJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ3RleHR1cmUnOlxuICAgICAgcmV0dXJuIDM7XG4gICAgY2FzZSAnZ3B1LWJ1ZmZlcic6XG4gICAgICByZXR1cm4gNDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBkYXRhIGxvY2F0aW9uOiAke2xvY2F0aW9ufWApO1xuICB9XG59O1xuXG4vKipcbiAqIE1hcCBpbnRlZ2VyIGRhdGEgbG9jYXRpb24gdG8gc3RyaW5nIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBkYXRhTG9jYXRpb25FbnVtVG9TdHJpbmcgPSAobG9jYXRpb246IG51bWJlcik6IFRlbnNvci5EYXRhTG9jYXRpb258dW5kZWZpbmVkID0+XG4gICAgKFsnbm9uZScsICdjcHUnLCAnY3B1LXBpbm5lZCcsICd0ZXh0dXJlJywgJ2dwdS1idWZmZXInXSBhcyBjb25zdClbbG9jYXRpb25dO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0JhY2tlbmR9IGZyb20gJy4vYmFja2VuZC5qcyc7XG5pbXBvcnQge0luZmVyZW5jZVNlc3Npb259IGZyb20gJy4vaW5mZXJlbmNlLXNlc3Npb24uanMnO1xuXG5pbnRlcmZhY2UgQmFja2VuZEluZm8ge1xuICBiYWNrZW5kOiBCYWNrZW5kO1xuICBwcmlvcml0eTogbnVtYmVyO1xuXG4gIGluaXRQcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgaW5pdGlhbGl6ZWQ/OiBib29sZWFuO1xuICBhYm9ydGVkPzogYm9vbGVhbjtcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGJhY2tlbmRzOiBNYXA8c3RyaW5nLCBCYWNrZW5kSW5mbz4gPSBuZXcgTWFwKCk7XG5jb25zdCBiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHk6IHN0cmluZ1tdID0gW107XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBiYWNrZW5kLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgYXMgYSBrZXkgdG8gbG9va3VwIGFzIGFuIGV4ZWN1dGlvbiBwcm92aWRlci5cbiAqIEBwYXJhbSBiYWNrZW5kIC0gdGhlIGJhY2tlbmQgb2JqZWN0LlxuICogQHBhcmFtIHByaW9yaXR5IC0gYW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBwcmlvcml0eSBvZiB0aGUgYmFja2VuZC4gSGlnaGVyIG51bWJlciBtZWFucyBoaWdoZXIgcHJpb3JpdHkuIGlmIHByaW9yaXR5XG4gKiA8IDAsIGl0IHdpbGwgYmUgY29uc2lkZXJlZCBhcyBhICdiZXRhJyB2ZXJzaW9uIGFuZCB3aWxsIG5vdCBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgYmFja2VuZCBieSBkZWZhdWx0LlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyQmFja2VuZCA9IChuYW1lOiBzdHJpbmcsIGJhY2tlbmQ6IEJhY2tlbmQsIHByaW9yaXR5OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgaWYgKGJhY2tlbmQgJiYgdHlwZW9mIGJhY2tlbmQuaW5pdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYmFja2VuZC5jcmVhdGVJbmZlcmVuY2VTZXNzaW9uSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGN1cnJlbnRCYWNrZW5kID0gYmFja2VuZHMuZ2V0KG5hbWUpO1xuICAgIGlmIChjdXJyZW50QmFja2VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBiYWNrZW5kcy5zZXQobmFtZSwge2JhY2tlbmQsIHByaW9yaXR5fSk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50QmFja2VuZC5wcmlvcml0eSA+IHByaW9yaXR5KSB7XG4gICAgICAvLyBzYW1lIG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHdpdGggYSBoaWdoZXIgcHJpb3JpdHkuIHNraXAgcmVnaXN0ZXJhdGlvbi5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRCYWNrZW5kLnByaW9yaXR5ID09PSBwcmlvcml0eSkge1xuICAgICAgaWYgKGN1cnJlbnRCYWNrZW5kLmJhY2tlbmQgIT09IGJhY2tlbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgcmVnaXN0ZXIgYmFja2VuZCBcIiR7bmFtZX1cIiB1c2luZyBwcmlvcml0eSAke3ByaW9yaXR5fWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcmlvcml0eSA+PSAwKSB7XG4gICAgICBjb25zdCBpID0gYmFja2VuZHNTb3J0ZWRCeVByaW9yaXR5LmluZGV4T2YobmFtZSk7XG4gICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgYmFja2VuZHNTb3J0ZWRCeVByaW9yaXR5LnNwbGljZShpLCAxKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGJhY2tlbmRzLmdldChiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHlbaV0pIS5wcmlvcml0eSA8PSBwcmlvcml0eSkge1xuICAgICAgICAgIGJhY2tlbmRzU29ydGVkQnlQcmlvcml0eS5zcGxpY2UoaSwgMCwgbmFtZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHkucHVzaChuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgdmFsaWQgYmFja2VuZCcpO1xufTtcblxuLyoqXG4gKiBUcnkgdG8gcmVzb2x2ZSBhbmQgaW5pdGlhbGl6ZSBhIGJhY2tlbmQuXG4gKlxuICogQHBhcmFtIGJhY2tlbmROYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGJhY2tlbmQuXG4gKiBAcmV0dXJucyB0aGUgYmFja2VuZCBpbnN0YW5jZSBpZiByZXNvbHZlZCBhbmQgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LCBvciBhbiBlcnJvciBtZXNzYWdlIGlmIGZhaWxlZC5cbiAqL1xuY29uc3QgdHJ5UmVzb2x2ZUFuZEluaXRpYWxpemVCYWNrZW5kID0gYXN5bmMoYmFja2VuZE5hbWU6IHN0cmluZyk6IFByb21pc2U8QmFja2VuZHxzdHJpbmc+ID0+IHtcbiAgY29uc3QgYmFja2VuZEluZm8gPSBiYWNrZW5kcy5nZXQoYmFja2VuZE5hbWUpO1xuICBpZiAoIWJhY2tlbmRJbmZvKSB7XG4gICAgcmV0dXJuICdiYWNrZW5kIG5vdCBmb3VuZC4nO1xuICB9XG5cbiAgaWYgKGJhY2tlbmRJbmZvLmluaXRpYWxpemVkKSB7XG4gICAgcmV0dXJuIGJhY2tlbmRJbmZvLmJhY2tlbmQ7XG4gIH0gZWxzZSBpZiAoYmFja2VuZEluZm8uYWJvcnRlZCkge1xuICAgIHJldHVybiBiYWNrZW5kSW5mby5lcnJvciE7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaXNJbml0aWFsaXppbmcgPSAhIWJhY2tlbmRJbmZvLmluaXRQcm9taXNlO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWlzSW5pdGlhbGl6aW5nKSB7XG4gICAgICAgIGJhY2tlbmRJbmZvLmluaXRQcm9taXNlID0gYmFja2VuZEluZm8uYmFja2VuZC5pbml0KGJhY2tlbmROYW1lKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGJhY2tlbmRJbmZvLmluaXRQcm9taXNlO1xuICAgICAgYmFja2VuZEluZm8uaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGJhY2tlbmRJbmZvLmJhY2tlbmQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCFpc0luaXRpYWxpemluZykge1xuICAgICAgICBiYWNrZW5kSW5mby5lcnJvciA9IGAke2V9YDtcbiAgICAgICAgYmFja2VuZEluZm8uYWJvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFja2VuZEluZm8uZXJyb3IhO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgYmFja2VuZEluZm8uaW5pdFByb21pc2U7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFJlc29sdmUgZXhlY3V0aW9uIHByb3ZpZGVycyBmcm9tIHRoZSBzcGVjaWZpYyBzZXNzaW9uIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSB0aGUgc2Vzc2lvbiBvcHRpb25zIG9iamVjdC5cbiAqIEByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgdHVwbGUgb2YgYW4gaW5pdGlhbGl6ZWQgYmFja2VuZCBpbnN0YW5jZSBhbmQgYSBzZXNzaW9uIG9wdGlvbnMgb2JqZWN0IHdpdGhcbiAqIGZpbHRlcmVkIEVQIGxpc3QuXG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUJhY2tlbmRBbmRFeGVjdXRpb25Qcm92aWRlcnMgPSBhc3luYyhvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTpcbiAgICBQcm9taXNlPFtiYWNrZW5kOiBCYWNrZW5kLCBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zXT4gPT4ge1xuICAgICAgLy8gZXh0cmFjdCBiYWNrZW5kIGhpbnRzIGZyb20gc2Vzc2lvbiBvcHRpb25zXG4gICAgICBjb25zdCBlcHMgPSBvcHRpb25zLmV4ZWN1dGlvblByb3ZpZGVycyB8fCBbXTtcbiAgICAgIGNvbnN0IGJhY2tlbmRIaW50cyA9IGVwcy5tYXAoaSA9PiB0eXBlb2YgaSA9PT0gJ3N0cmluZycgPyBpIDogaS5uYW1lKTtcbiAgICAgIGNvbnN0IGJhY2tlbmROYW1lcyA9IGJhY2tlbmRIaW50cy5sZW5ndGggPT09IDAgPyBiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHkgOiBiYWNrZW5kSGludHM7XG5cbiAgICAgIC8vIHRyeSB0byByZXNvbHZlIGFuZCBpbml0aWFsaXplIGFsbCByZXF1ZXN0ZWQgYmFja2VuZHNcbiAgICAgIGxldCBiYWNrZW5kOiBCYWNrZW5kfHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgY29uc3QgYXZhaWxhYmxlQmFja2VuZE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBmb3IgKGNvbnN0IGJhY2tlbmROYW1lIG9mIGJhY2tlbmROYW1lcykge1xuICAgICAgICBjb25zdCByZXNvbHZlUmVzdWx0ID0gYXdhaXQgdHJ5UmVzb2x2ZUFuZEluaXRpYWxpemVCYWNrZW5kKGJhY2tlbmROYW1lKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXNvbHZlUmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGVycm9ycy5wdXNoKHtuYW1lOiBiYWNrZW5kTmFtZSwgZXJyOiByZXNvbHZlUmVzdWx0fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFiYWNrZW5kKSB7XG4gICAgICAgICAgICBiYWNrZW5kID0gcmVzb2x2ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJhY2tlbmQgPT09IHJlc29sdmVSZXN1bHQpIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZUJhY2tlbmROYW1lcy5hZGQoYmFja2VuZE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBpZiBubyBiYWNrZW5kIGlzIGF2YWlsYWJsZSwgdGhyb3cgZXJyb3IuXG4gICAgICBpZiAoIWJhY2tlbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBhdmFpbGFibGUgYmFja2VuZCBmb3VuZC4gRVJSOiAke2Vycm9ycy5tYXAoZSA9PiBgWyR7ZS5uYW1lfV0gJHtlLmVycn1gKS5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBmb3IgZWFjaCBleHBsaWNpdGx5IHJlcXVlc3RlZCBiYWNrZW5kLCBpZiBpdCdzIG5vdCBhdmFpbGFibGUsIG91dHB1dCB3YXJuaW5nIG1lc3NhZ2UuXG4gICAgICBmb3IgKGNvbnN0IHtuYW1lLCBlcnJ9IG9mIGVycm9ycykge1xuICAgICAgICBpZiAoYmFja2VuZEhpbnRzLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oYHJlbW92aW5nIHJlcXVlc3RlZCBleGVjdXRpb24gcHJvdmlkZXIgXCIke1xuICAgICAgICAgICAgICBuYW1lfVwiIGZyb20gc2Vzc2lvbiBvcHRpb25zIGJlY2F1c2UgaXQgaXMgbm90IGF2YWlsYWJsZTogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWRFcHMgPSBlcHMuZmlsdGVyKGkgPT4gYXZhaWxhYmxlQmFja2VuZE5hbWVzLmhhcyh0eXBlb2YgaSA9PT0gJ3N0cmluZycgPyBpIDogaS5uYW1lKSk7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIGJhY2tlbmQsIG5ldyBQcm94eShvcHRpb25zLCB7XG4gICAgICAgICAgZ2V0OiAodGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2V4ZWN1dGlvblByb3ZpZGVycycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkRXBzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXTtcbiAgICB9O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0luZmVyZW5jZVNlc3Npb259IGZyb20gJy4vaW5mZXJlbmNlLXNlc3Npb24uanMnO1xuaW1wb3J0IHtPbm54VmFsdWV9IGZyb20gJy4vb25ueC12YWx1ZS5qcyc7XG5pbXBvcnQge1RyYWluaW5nU2Vzc2lvbn0gZnJvbSAnLi90cmFpbmluZy1zZXNzaW9uLmpzJztcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBTZXNzaW9uSGFuZGxlciB7XG4gIHR5cGUgRmVlZHNUeXBlID0ge1tuYW1lOiBzdHJpbmddOiBPbm54VmFsdWV9O1xuICB0eXBlIEZldGNoZXNUeXBlID0ge1tuYW1lOiBzdHJpbmddOiBPbm54VmFsdWUgfCBudWxsfTtcbiAgdHlwZSBSZXR1cm5UeXBlID0ge1tuYW1lOiBzdHJpbmddOiBPbm54VmFsdWV9O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgc2hhcmVkIFNlc3Npb25IYW5kbGVyIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBAaWdub3JlXG4gKi9cbmludGVyZmFjZSBTZXNzaW9uSGFuZGxlciB7XG4gIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPjtcblxuICByZWFkb25seSBpbnB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgb3V0cHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCBhIGhhbmRsZXIgaW5zdGFuY2Ugb2YgYW4gaW5mZXJlbmNlIHNlc3Npb24uXG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZmVyZW5jZVNlc3Npb25IYW5kbGVyIGV4dGVuZHMgU2Vzc2lvbkhhbmRsZXIge1xuICBzdGFydFByb2ZpbGluZygpOiB2b2lkO1xuICBlbmRQcm9maWxpbmcoKTogdm9pZDtcblxuICBydW4oZmVlZHM6IFNlc3Npb25IYW5kbGVyLkZlZWRzVHlwZSwgZmV0Y2hlczogU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUsXG4gICAgICBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPFNlc3Npb25IYW5kbGVyLlJldHVyblR5cGU+O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCBhIGhhbmRsZXIgaW5zdGFuY2Ugb2YgYSB0cmFpbmluZyBpbmZlcmVuY2Ugc2Vzc2lvbi5cbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaW5pbmdTZXNzaW9uSGFuZGxlciBleHRlbmRzIFNlc3Npb25IYW5kbGVyIHtcbiAgcmVhZG9ubHkgZXZhbElucHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICByZWFkb25seSBldmFsT3V0cHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIGxhenlSZXNldEdyYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgcnVuVHJhaW5TdGVwKFxuICAgICAgZmVlZHM6IFNlc3Npb25IYW5kbGVyLkZlZWRzVHlwZSwgZmV0Y2hlczogU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUsXG4gICAgICBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPFNlc3Npb25IYW5kbGVyLlJldHVyblR5cGU+O1xuICBydW5PcHRpbWl6ZXJTdGVwKG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gIHJ1bkV2YWxTdGVwKFxuICAgICAgZmVlZHM6IFNlc3Npb25IYW5kbGVyLkZlZWRzVHlwZSwgZmV0Y2hlczogU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUsXG4gICAgICBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPFNlc3Npb25IYW5kbGVyLlJldHVyblR5cGU+O1xuXG4gIGdldFBhcmFtZXRlcnNTaXplKHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPG51bWJlcj47XG4gIGxvYWRQYXJhbWV0ZXJzQnVmZmVyKGJ1ZmZlcjogVWludDhBcnJheSwgdHJhaW5hYmxlT25seTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XG4gIGdldENvbnRpZ3VvdXNQYXJhbWV0ZXJzKHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPE9ubnhWYWx1ZT47XG59XG5cbi8qKlxuICogUmVwcmVzZW50IGEgYmFja2VuZCB0aGF0IHByb3ZpZGVzIGltcGxlbWVudGF0aW9uIG9mIG1vZGVsIGluZmVyZW5jaW5nLlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGJhY2tlbmQgYXN5bmNocm9ub3VzbHkuIFNob3VsZCB0aHJvdyB3aGVuIGZhaWxlZC5cbiAgICovXG4gIGluaXQoYmFja2VuZE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgY3JlYXRlSW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXIodXJpT3JCdWZmZXI6IHN0cmluZ3xVaW50OEFycmF5LCBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPEluZmVyZW5jZVNlc3Npb25IYW5kbGVyPjtcblxuICBjcmVhdGVUcmFpbmluZ1Nlc3Npb25IYW5kbGVyP1xuICAgICAgKGNoZWNrcG9pbnRTdGF0ZVVyaU9yQnVmZmVyOiBUcmFpbmluZ1Nlc3Npb24uVXJpT3JCdWZmZXIsIHRyYWluTW9kZWxVcmlPckJ1ZmZlcjogVHJhaW5pbmdTZXNzaW9uLlVyaU9yQnVmZmVyLFxuICAgICAgIGV2YWxNb2RlbFVyaU9yQnVmZmVyOiBUcmFpbmluZ1Nlc3Npb24uVXJpT3JCdWZmZXIsIG9wdGltaXplck1vZGVsVXJpT3JCdWZmZXI6IFRyYWluaW5nU2Vzc2lvbi5VcmlPckJ1ZmZlcixcbiAgICAgICBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxUcmFpbmluZ1Nlc3Npb25IYW5kbGVyPjtcbn1cblxuZXhwb3J0IHtyZWdpc3RlckJhY2tlbmR9IGZyb20gJy4vYmFja2VuZC1pbXBsLmpzJztcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSAvanMvc2NyaXB0cy91cGRhdGUtdmVyc2lvbi50c1xuLy8gRG8gbm90IG1vZGlmeSBmaWxlIGNvbnRlbnQgbWFudWFsbHkuXG5cbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzEuMTguMCc7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RW52fSBmcm9tICcuL2Vudi5qcyc7XG5pbXBvcnQge3ZlcnNpb259IGZyb20gJy4vdmVyc2lvbi5qcyc7XG5cbnR5cGUgTG9nTGV2ZWxUeXBlID0gRW52Wydsb2dMZXZlbCddO1xuXG5sZXQgbG9nTGV2ZWxWYWx1ZTogUmVxdWlyZWQ8TG9nTGV2ZWxUeXBlPiA9ICd3YXJuaW5nJztcblxuZXhwb3J0IGNvbnN0IGVudjogRW52ID0ge1xuICB3YXNtOiB7fSBhcyBFbnYuV2ViQXNzZW1ibHlGbGFncyxcbiAgd2ViZ2w6IHt9IGFzIEVudi5XZWJHTEZsYWdzLFxuICB3ZWJncHU6IHt9IGFzIEVudi5XZWJHcHVGbGFncyxcbiAgdmVyc2lvbnM6IHtjb21tb246IHZlcnNpb259LFxuXG4gIHNldCBsb2dMZXZlbCh2YWx1ZTogTG9nTGV2ZWxUeXBlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgWyd2ZXJib3NlJywgJ2luZm8nLCAnd2FybmluZycsICdlcnJvcicsICdmYXRhbCddLmluZGV4T2YodmFsdWUpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBsb2dnaW5nIGxldmVsOiAke3ZhbHVlfWApO1xuICAgIH1cbiAgICBsb2dMZXZlbFZhbHVlID0gdmFsdWU7XG4gIH0sXG4gIGdldCBsb2dMZXZlbCgpOiBSZXF1aXJlZDxMb2dMZXZlbFR5cGU+IHtcbiAgICByZXR1cm4gbG9nTGV2ZWxWYWx1ZTtcbiAgfSxcbn07XG5cbi8vIHNldCBwcm9wZXJ0eSAnbG9nTGV2ZWwnIHNvIHRoYXQgdGhleSBjYW4gYmUgY29ycmVjdGx5IHRyYW5zZmVycmVkIHRvIHdvcmtlciBieSBgcG9zdE1lc3NhZ2UoKWAuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZW52LCAnbG9nTGV2ZWwnLCB7ZW51bWVyYWJsZTogdHJ1ZX0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2VudiBhcyBlbnZJbXBsfSBmcm9tICcuL2Vudi1pbXBsLmpzJztcblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIEVudiB7XG4gIGV4cG9ydCB0eXBlIFdhc21QcmVmaXhPckZpbGVQYXRocyA9IHN0cmluZ3x7XG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG4gICAgJ29ydC13YXNtLndhc20nPzogc3RyaW5nO1xuICAgICdvcnQtd2FzbS10aHJlYWRlZC53YXNtJz86IHN0cmluZztcbiAgICAnb3J0LXdhc20tc2ltZC53YXNtJz86IHN0cmluZztcbiAgICAnb3J0LXRyYWluaW5nLXdhc20tc2ltZC53YXNtJz86IHN0cmluZztcbiAgICAnb3J0LXdhc20tc2ltZC10aHJlYWRlZC53YXNtJz86IHN0cmluZztcbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuICB9O1xuICBleHBvcnQgaW50ZXJmYWNlIFdlYkFzc2VtYmx5RmxhZ3Mge1xuICAgIC8qKlxuICAgICAqIHNldCBvciBnZXQgbnVtYmVyIG9mIHRocmVhZChzKS4gSWYgb21pdHRlZCBvciBzZXQgdG8gMCwgbnVtYmVyIG9mIHRocmVhZChzKSB3aWxsIGJlIGRldGVybWluZWQgYnkgc3lzdGVtLiBJZiBzZXRcbiAgICAgKiB0byAxLCBubyB3b3JrZXIgdGhyZWFkIHdpbGwgYmUgc3Bhd25lZC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSB3aGVuIFdlYkFzc2VtYmx5IG11bHRpdGhyZWFkIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGN1cnJlbnQgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0VmFsdWUgYDBgXG4gICAgICovXG4gICAgbnVtVGhyZWFkcz86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIHNldCBvciBnZXQgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0byBlbmFibGUgU0lNRC4gSWYgc2V0IHRvIGZhbHNlLCBTSU1EIHdpbGwgYmUgZm9yY2VseSBkaXNhYmxlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSB3aGVuIFdlYkFzc2VtYmx5IFNJTUQgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gY3VycmVudCBjb250ZXh0LlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgdHJ1ZWBcbiAgICAgKi9cbiAgICBzaW1kPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIHNldCBvciBnZXQgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0byBlbmFibGUgdHJhY2UuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYGVudi50cmFjZWAgaW5zdGVhZC4gSWYgYGVudi50cmFjZWAgaXMgc2V0LCB0aGlzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcbiAgICAgKi9cbiAgICB0cmFjZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IGEgbnVtYmVyIHNwZWNpZnlpbmcgdGhlIHRpbWVvdXQgZm9yIGluaXRpYWxpemF0aW9uIG9mIFdlYkFzc2VtYmx5IGJhY2tlbmQsIGluIG1pbGxpc2Vjb25kcy4gQSB6ZXJvXG4gICAgICogdmFsdWUgaW5kaWNhdGVzIG5vIHRpbWVvdXQgaXMgc2V0LlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgMGBcbiAgICAgKi9cbiAgICBpbml0VGltZW91dD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNldCBhIGN1c3RvbSBVUkwgcHJlZml4IHRvIHRoZSAud2FzbSBmaWxlcyBvciBhIHNldCBvZiBvdmVycmlkZXMgZm9yIGVhY2ggLndhc20gZmlsZS4gVGhlIG92ZXJyaWRlIHBhdGggc2hvdWxkIGJlXG4gICAgICogYW4gYWJzb2x1dGUgcGF0aC5cbiAgICAgKi9cbiAgICB3YXNtUGF0aHM/OiBXYXNtUHJlZml4T3JGaWxlUGF0aHM7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcHJveHkgdGhlIGV4ZWN1dGlvbiBvZiBtYWluIHRocmVhZCB0byBhIHdvcmtlciB0aHJlYWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBwcm94eT86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFdlYkdMRmxhZ3Mge1xuICAgIC8qKlxuICAgICAqIFNldCBvciBnZXQgdGhlIFdlYkdMIENvbnRleHQgSUQgKHdlYmdsIG9yIHdlYmdsMikuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGAnd2ViZ2wyJ2BcbiAgICAgKi9cbiAgICBjb250ZXh0SWQ/OiAnd2ViZ2wnfCd3ZWJnbDInO1xuICAgIC8qKlxuICAgICAqIEdldCB0aGUgV2ViR0wgcmVuZGVyaW5nIGNvbnRleHQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29udGV4dDogV2ViR0xSZW5kZXJpbmdDb250ZXh0O1xuICAgIC8qKlxuICAgICAqIFNldCBvciBnZXQgdGhlIG1heGltdW0gYmF0Y2ggc2l6ZSBmb3IgbWF0bXVsLiAwIG1lYW5zIHRvIGRpc2FibGUgYmF0Y2hpbmcuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIG1hdG11bE1heEJhdGNoU2l6ZT86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSB0ZXh0dXJlIGNhY2hlIG1vZGUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGAnZnVsbCdgXG4gICAgICovXG4gICAgdGV4dHVyZUNhY2hlTW9kZT86ICdpbml0aWFsaXplck9ubHknfCdmdWxsJztcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBwYWNrZWQgdGV4dHVyZSBtb2RlXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBwYWNrPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHdoZXRoZXIgZW5hYmxlIGFzeW5jIGRvd25sb2FkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG4gICAgICovXG4gICAgYXN5bmM/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBXZWJHcHVQcm9maWxpbmdEYXRhVjFUZW5zb3JNZXRhZGF0YSB7XG4gICAgZGltczogcmVhZG9ubHkgbnVtYmVyW107XG4gICAgZGF0YVR5cGU6IHN0cmluZztcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIFdlYkdwdVByb2ZpbGluZ0RhdGFWMSB7XG4gICAgdmVyc2lvbjogMTtcbiAgICBpbnB1dHNNZXRhZGF0YTogcmVhZG9ubHkgV2ViR3B1UHJvZmlsaW5nRGF0YVYxVGVuc29yTWV0YWRhdGFbXTtcbiAgICBvdXRwdXRzTWV0YWRhdGE6IHJlYWRvbmx5IFdlYkdwdVByb2ZpbGluZ0RhdGFWMVRlbnNvck1ldGFkYXRhW107XG4gICAga2VybmVsSWQ6IG51bWJlcjtcbiAgICBrZXJuZWxUeXBlOiBzdHJpbmc7XG4gICAga2VybmVsTmFtZTogc3RyaW5nO1xuICAgIHByb2dyYW1OYW1lOiBzdHJpbmc7XG4gICAgc3RhcnRUaW1lOiBudW1iZXI7XG4gICAgZW5kVGltZTogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgV2ViR3B1UHJvZmlsaW5nRGF0YSA9IFdlYkdwdVByb2ZpbGluZ0RhdGFWMTtcblxuICBleHBvcnQgaW50ZXJmYWNlIFdlYkdwdUZsYWdzIHtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBwcm9maWxpbmcgbW9kZS5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBgZW52LndlYmdwdS5wcm9maWxpbmcubW9kZWAgaW5zdGVhZC4gSWYgYGVudi53ZWJncHUucHJvZmlsaW5nLm1vZGVgIGlzIHNldCwgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlXG4gICAgICogaWdub3JlZC5cbiAgICAgKi9cbiAgICBwcm9maWxpbmdNb2RlPzogJ29mZid8J2RlZmF1bHQnO1xuICAgIC8qKlxuICAgICAqIFNldCBvciBnZXQgdGhlIHByb2ZpbGluZyBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHByb2ZpbGluZz86IHtcbiAgICAgIC8qKlxuICAgICAgICogU2V0IG9yIGdldCB0aGUgcHJvZmlsaW5nIG1vZGUuXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHRWYWx1ZSBgJ29mZidgXG4gICAgICAgKi9cbiAgICAgIG1vZGU/OiAnb2ZmJ3wnZGVmYXVsdCc7XG5cbiAgICAgIC8qKlxuICAgICAgICogU2V0IG9yIGdldCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gYSBwcm9maWxpbmcgZGF0YSBpcyByZWNlaXZlZC4gSWYgbm90IHNldCwgdGhlIHByb2ZpbGluZyBkYXRhIHdpbGwgYmVcbiAgICAgICAqIHByaW50ZWQgdG8gY29uc29sZS5cbiAgICAgICAqL1xuICAgICAgb25kYXRhPzogKGRhdGE6IFdlYkdwdVByb2ZpbGluZ0RhdGEpID0+IHZvaWQ7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBwb3dlciBwcmVmZXJlbmNlLlxuICAgICAqXG4gICAgICogU2V0dGluZyB0aGlzIHByb3BlcnR5IG9ubHkgaGFzIGVmZmVjdCBiZWZvcmUgdGhlIGZpcnN0IFdlYkdQVSBpbmZlcmVuY2Ugc2Vzc2lvbiBpcyBjcmVhdGVkLiBUaGUgdmFsdWUgd2lsbCBiZVxuICAgICAqIHVzZWQgYXMgb3B0aW9ucyBmb3IgYG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKWAuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RpY3RkZWYtZ3B1cmVxdWVzdGFkYXB0ZXJvcHRpb25zfSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgdW5kZWZpbmVkYFxuICAgICAqL1xuICAgIHBvd2VyUHJlZmVyZW5jZT86ICdsb3ctcG93ZXInfCdoaWdoLXBlcmZvcm1hbmNlJztcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBmb3JjZSBmYWxsYmFjayBhZGFwdGVyIGZsYWcuXG4gICAgICpcbiAgICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgb25seSBoYXMgZWZmZWN0IGJlZm9yZSB0aGUgZmlyc3QgV2ViR1BVIGluZmVyZW5jZSBzZXNzaW9uIGlzIGNyZWF0ZWQuIFRoZSB2YWx1ZSB3aWxsIGJlXG4gICAgICogdXNlZCBhcyBvcHRpb25zIGZvciBgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpYC5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jZGljdGRlZi1ncHVyZXF1ZXN0YWRhcHRlcm9wdGlvbnN9IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGB1bmRlZmluZWRgXG4gICAgICovXG4gICAgZm9yY2VGYWxsYmFja0FkYXB0ZXI/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNldCBvciBnZXQgdGhlIGFkYXB0ZXIgZm9yIFdlYkdQVS5cbiAgICAgKlxuICAgICAqIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBvbmx5IGhhcyBlZmZlY3QgYmVmb3JlIHRoZSBmaXJzdCBXZWJHUFUgaW5mZXJlbmNlIHNlc3Npb24gaXMgY3JlYXRlZC4gVGhlIHZhbHVlIHdpbGwgYmVcbiAgICAgKiB1c2VkIGFzIHRoZSBHUFUgYWRhcHRlciBmb3IgdGhlIHVuZGVybHlpbmcgV2ViR1BVIGJhY2tlbmQgdG8gY3JlYXRlIEdQVSBkZXZpY2UuXG4gICAgICpcbiAgICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzZXQsIGl0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIGdldCBhZnRlciB0aGUgZmlyc3QgV2ViR1BVIGluZmVyZW5jZSBzZXNzaW9uIGlzIGNyZWF0ZWQuIFRoZVxuICAgICAqIHZhbHVlIHdpbGwgYmUgdGhlIEdQVSBhZGFwdGVyIHRoYXQgY3JlYXRlZCBieSB0aGUgdW5kZXJseWluZyBXZWJHUFUgYmFja2VuZC5cbiAgICAgKlxuICAgICAqIFdoZW4gdXNlIHdpdGggVHlwZVNjcmlwdCwgdGhlIHR5cGUgb2YgdGhpcyBwcm9wZXJ0eSBpcyBgR1BVQWRhcHRlcmAgZGVmaW5lZCBpbiBcIkB3ZWJncHUvdHlwZXNcIi5cbiAgICAgKiBVc2UgYGNvbnN0IGFkYXB0ZXIgPSBlbnYud2ViZ3B1LmFkYXB0ZXIgYXMgR1BVQWRhcHRlcjtgIGluIFR5cGVTY3JpcHQgdG8gYWNjZXNzIHRoaXMgcHJvcGVydHkgd2l0aCBjb3JyZWN0IHR5cGUuXG4gICAgICpcbiAgICAgKiBzZWUgY29tbWVudHMgb24ge0BsaW5rIFRlbnNvci5HcHVCdWZmZXJUeXBlfVxuICAgICAqL1xuICAgIGFkYXB0ZXI6IHVua25vd247XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBkZXZpY2UgZm9yIFdlYkdQVS5cbiAgICAgKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb25seSBhdmFpbGFibGUgYWZ0ZXIgdGhlIGZpcnN0IFdlYkdQVSBpbmZlcmVuY2Ugc2Vzc2lvbiBpcyBjcmVhdGVkLlxuICAgICAqXG4gICAgICogV2hlbiB1c2Ugd2l0aCBUeXBlU2NyaXB0LCB0aGUgdHlwZSBvZiB0aGlzIHByb3BlcnR5IGlzIGBHUFVEZXZpY2VgIGRlZmluZWQgaW4gXCJAd2ViZ3B1L3R5cGVzXCIuXG4gICAgICogVXNlIGBjb25zdCBkZXZpY2UgPSBlbnYud2ViZ3B1LmRldmljZSBhcyBHUFVEZXZpY2U7YCBpbiBUeXBlU2NyaXB0IHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IHdpdGggY29ycmVjdCB0eXBlLlxuICAgICAqXG4gICAgICogc2VlIGNvbW1lbnRzIG9uIHtAbGluayBUZW5zb3IuR3B1QnVmZmVyVHlwZX0gZm9yIG1vcmUgZGV0YWlscyBhYm91dCB3aHkgbm90IHVzZSB0eXBlcyBkZWZpbmVkIGluIFwiQHdlYmdwdS90eXBlc1wiLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRldmljZTogdW5rbm93bjtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHdoZXRoZXIgdmFsaWRhdGUgaW5wdXQgY29udGVudC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuICAgICAqL1xuICAgIHZhbGlkYXRlSW5wdXRDb250ZW50PzogYm9vbGVhbjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudiB7XG4gIC8qKlxuICAgKiBzZXQgdGhlIHNldmVyaXR5IGxldmVsIGZvciBsb2dnaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIGAnd2FybmluZydgXG4gICAqL1xuICBsb2dMZXZlbD86ICd2ZXJib3NlJ3wnaW5mbyd8J3dhcm5pbmcnfCdlcnJvcid8J2ZhdGFsJztcblxuICAvKipcbiAgICogSW5kaWNhdGUgd2hldGhlciBydW4gaW4gZGVidWcgbW9kZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG4gICAqL1xuICBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHNldCBvciBnZXQgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0byBlbmFibGUgdHJhY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuICAgKi9cbiAgdHJhY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHZXQgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBwYWNrYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbnM6IHtcbiAgICByZWFkb25seSBjb21tb246IHN0cmluZztcbiAgICByZWFkb25seSB3ZWI/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgbm9kZT86IHN0cmluZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgcmVhZG9ubHkgJ3JlYWN0LW5hdGl2ZSc/OiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudCBhIHNldCBvZiBmbGFncyBmb3IgV2ViQXNzZW1ibHlcbiAgICovXG4gIHJlYWRvbmx5IHdhc206IEVudi5XZWJBc3NlbWJseUZsYWdzO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnQgYSBzZXQgb2YgZmxhZ3MgZm9yIFdlYkdMXG4gICAqL1xuICByZWFkb25seSB3ZWJnbDogRW52LldlYkdMRmxhZ3M7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudCBhIHNldCBvZiBmbGFncyBmb3IgV2ViR1BVXG4gICAqL1xuICByZWFkb25seSB3ZWJncHU6IEVudi5XZWJHcHVGbGFncztcblxuICBbbmFtZTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnQgYSBzZXQgb2YgZmxhZ3MgYXMgYSBnbG9iYWwgc2luZ2xldG9uLlxuICovXG5leHBvcnQgY29uc3QgZW52OiBFbnYgPSBlbnZJbXBsO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvclRvRGF0YVVybE9wdGlvbnMsIFRlbnNvclRvSW1hZ2VEYXRhT3B0aW9uc30gZnJvbSAnLi90ZW5zb3ItY29udmVyc2lvbi5qcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi90ZW5zb3IuanMnO1xuXG4vKipcbiAqIGltcGxlbWVudGF0aW9uIG9mIFRlbnNvci50b0RhdGFVUkwoKVxuICovXG5leHBvcnQgY29uc3QgdGVuc29yVG9EYXRhVVJMID0gKHRlbnNvcjogVGVuc29yLCBvcHRpb25zPzogVGVuc29yVG9EYXRhVXJsT3B0aW9ucyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSA6IChuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsIDEpKTtcbiAgY2FudmFzLndpZHRoID0gdGVuc29yLmRpbXNbM107XG4gIGNhbnZhcy5oZWlnaHQgPSB0ZW5zb3IuZGltc1syXTtcbiAgY29uc3QgcGl4ZWxzMkRDb250ZXh0ID1cbiAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsKTtcblxuICBpZiAocGl4ZWxzMkRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgaGVpZ2h0IGFuZCB3aWR0aCAmIGZvcm1hdFxuICAgIGxldCB3aWR0aDogbnVtYmVyO1xuICAgIGxldCBoZWlnaHQ6IG51bWJlcjtcbiAgICBpZiAob3B0aW9ucz8udGVuc29yTGF5b3V0ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50ZW5zb3JMYXlvdXQgPT09ICdOSFdDJykge1xuICAgICAgd2lkdGggPSB0ZW5zb3IuZGltc1syXTtcbiAgICAgIGhlaWdodCA9IHRlbnNvci5kaW1zWzNdO1xuICAgIH0gZWxzZSB7ICAvLyBEZWZhdWx0IGxheW91dCBpcyBOQ1dIXG4gICAgICB3aWR0aCA9IHRlbnNvci5kaW1zWzNdO1xuICAgICAgaGVpZ2h0ID0gdGVuc29yLmRpbXNbMl07XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRmb3JtYXQgPSBvcHRpb25zPy5mb3JtYXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZm9ybWF0IDogJ1JHQic7XG5cbiAgICBjb25zdCBub3JtID0gb3B0aW9ucz8ubm9ybTtcbiAgICBsZXQgbm9ybU1lYW46IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIGxldCBub3JtQmlhczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgaWYgKG5vcm0gPT09IHVuZGVmaW5lZCB8fCBub3JtLm1lYW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9ybU1lYW4gPSBbMjU1LCAyNTUsIDI1NSwgMjU1XTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiAobm9ybS5tZWFuKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbm9ybU1lYW4gPSBbbm9ybS5tZWFuLCBub3JtLm1lYW4sIG5vcm0ubWVhbiwgbm9ybS5tZWFuXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1NZWFuID0gW25vcm0ubWVhblswXSwgbm9ybS5tZWFuWzFdLCBub3JtLm1lYW5bMl0sIDBdO1xuICAgICAgICBpZiAobm9ybS5tZWFuWzNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub3JtTWVhblszXSA9IG5vcm0ubWVhblszXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9ybSA9PT0gdW5kZWZpbmVkIHx8IG5vcm0uYmlhcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBub3JtQmlhcyA9IFswLCAwLCAwLCAwXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiAobm9ybS5iaWFzKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbm9ybUJpYXMgPSBbbm9ybS5iaWFzLCBub3JtLmJpYXMsIG5vcm0uYmlhcywgbm9ybS5iaWFzXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1CaWFzID0gW25vcm0uYmlhc1swXSwgbm9ybS5iaWFzWzFdLCBub3JtLmJpYXNbMl0sIDBdO1xuICAgICAgICBpZiAobm9ybS5iaWFzWzNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub3JtQmlhc1szXSA9IG5vcm0uYmlhc1szXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0cmlkZSA9IGhlaWdodCAqIHdpZHRoO1xuICAgIC8vIERlZmF1bHQgcG9pbnRlciBhc3NpZ25tZW50c1xuICAgIGxldCByVGVuc29yUG9pbnRlciA9IDAsIGdUZW5zb3JQb2ludGVyID0gc3RyaWRlLCBiVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDIsIGFUZW5zb3JQb2ludGVyID0gLTE7XG5cbiAgICAvLyBVcGRhdGluZyB0aGUgcG9pbnRlciBhc3NpZ25tZW50cyBiYXNlZCBvbiB0aGUgaW5wdXQgaW1hZ2UgZm9ybWF0XG4gICAgaWYgKGlucHV0Zm9ybWF0ID09PSAnUkdCQScpIHtcbiAgICAgIHJUZW5zb3JQb2ludGVyID0gMDtcbiAgICAgIGdUZW5zb3JQb2ludGVyID0gc3RyaWRlO1xuICAgICAgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyO1xuICAgICAgYVRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAzO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRmb3JtYXQgPT09ICdSR0InKSB7XG4gICAgICByVGVuc29yUG9pbnRlciA9IDA7XG4gICAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZTtcbiAgICAgIGJUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMjtcbiAgICB9IGVsc2UgaWYgKGlucHV0Zm9ybWF0ID09PSAnUkJHJykge1xuICAgICAgclRlbnNvclBvaW50ZXIgPSAwO1xuICAgICAgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGU7XG4gICAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDI7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IFIgPSAoKHRlbnNvci5kYXRhW3JUZW5zb3JQb2ludGVyKytdIGFzIG51bWJlcikgLSBub3JtQmlhc1swXSkgKiBub3JtTWVhblswXTsgIC8vIFIgdmFsdWVcbiAgICAgICAgY29uc3QgRyA9ICgodGVuc29yLmRhdGFbZ1RlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzFdKSAqIG5vcm1NZWFuWzFdOyAgLy8gRyB2YWx1ZVxuICAgICAgICBjb25zdCBCID0gKCh0ZW5zb3IuZGF0YVtiVGVuc29yUG9pbnRlcisrXSBhcyBudW1iZXIpIC0gbm9ybUJpYXNbMl0pICogbm9ybU1lYW5bMl07ICAvLyBCIHZhbHVlXG4gICAgICAgIGNvbnN0IEEgPSBhVGVuc29yUG9pbnRlciA9PT0gLTEgP1xuICAgICAgICAgICAgMjU1IDpcbiAgICAgICAgICAgICgodGVuc29yLmRhdGFbYVRlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzNdKSAqIG5vcm1NZWFuWzNdOyAgLy8gQSB2YWx1ZVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXBsdXMtb3BlcmFuZHNcbiAgICAgICAgcGl4ZWxzMkRDb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2JhKCcgKyBSICsgJywnICsgRyArICcsJyArIEIgKyAnLCcgKyBBICsgJyknO1xuICAgICAgICBwaXhlbHMyRENvbnRleHQuZmlsbFJlY3QoaiwgaSwgMSwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgndG9EYXRhVVJMJyBpbiBjYW52YXMpIHtcbiAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndG9EYXRhVVJMIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGFjY2VzcyBpbWFnZSBkYXRhJyk7XG4gIH1cbn07XG5cbi8qKlxuICogaW1wbGVtZW50YXRpb24gb2YgVGVuc29yLnRvSW1hZ2VEYXRhKClcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvclRvSW1hZ2VEYXRhID0gKHRlbnNvcjogVGVuc29yLCBvcHRpb25zPzogVGVuc29yVG9JbWFnZURhdGFPcHRpb25zKTogSW1hZ2VEYXRhID0+IHtcbiAgY29uc3QgcGl4ZWxzMkRDb250ZXh0ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/XG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpIDpcbiAgICAgIG5ldyBPZmZzY3JlZW5DYW52YXMoMSwgMSkuZ2V0Q29udGV4dCgnMmQnKSBhcyBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gIGxldCBpbWFnZTogSW1hZ2VEYXRhO1xuICBpZiAocGl4ZWxzMkRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgaGVpZ2h0IGFuZCB3aWR0aCAmIGZvcm1hdFxuICAgIGxldCB3aWR0aDogbnVtYmVyO1xuICAgIGxldCBoZWlnaHQ6IG51bWJlcjtcbiAgICBsZXQgY2hhbm5lbHM6IG51bWJlcjtcbiAgICBpZiAob3B0aW9ucz8udGVuc29yTGF5b3V0ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50ZW5zb3JMYXlvdXQgPT09ICdOSFdDJykge1xuICAgICAgd2lkdGggPSB0ZW5zb3IuZGltc1syXTtcbiAgICAgIGhlaWdodCA9IHRlbnNvci5kaW1zWzFdO1xuICAgICAgY2hhbm5lbHMgPSB0ZW5zb3IuZGltc1szXTtcbiAgICB9IGVsc2UgeyAgLy8gRGVmYXVsdCBsYXlvdXQgaXMgTkNXSFxuICAgICAgd2lkdGggPSB0ZW5zb3IuZGltc1szXTtcbiAgICAgIGhlaWdodCA9IHRlbnNvci5kaW1zWzJdO1xuICAgICAgY2hhbm5lbHMgPSB0ZW5zb3IuZGltc1sxXTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRmb3JtYXQgPSBvcHRpb25zICE9PSB1bmRlZmluZWQgPyAob3B0aW9ucy5mb3JtYXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZm9ybWF0IDogJ1JHQicpIDogJ1JHQic7XG5cbiAgICBjb25zdCBub3JtID0gb3B0aW9ucz8ubm9ybTtcbiAgICBsZXQgbm9ybU1lYW46IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIGxldCBub3JtQmlhczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgaWYgKG5vcm0gPT09IHVuZGVmaW5lZCB8fCBub3JtLm1lYW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9ybU1lYW4gPSBbMjU1LCAyNTUsIDI1NSwgMjU1XTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiAobm9ybS5tZWFuKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbm9ybU1lYW4gPSBbbm9ybS5tZWFuLCBub3JtLm1lYW4sIG5vcm0ubWVhbiwgbm9ybS5tZWFuXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1NZWFuID0gW25vcm0ubWVhblswXSwgbm9ybS5tZWFuWzFdLCBub3JtLm1lYW5bMl0sIDI1NV07XG4gICAgICAgIGlmIChub3JtLm1lYW5bM10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vcm1NZWFuWzNdID0gbm9ybS5tZWFuWzNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub3JtID09PSB1bmRlZmluZWQgfHwgbm9ybS5iaWFzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vcm1CaWFzID0gWzAsIDAsIDAsIDBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIChub3JtLmJpYXMpID09PSAnbnVtYmVyJykge1xuICAgICAgICBub3JtQmlhcyA9IFtub3JtLmJpYXMsIG5vcm0uYmlhcywgbm9ybS5iaWFzLCBub3JtLmJpYXNdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9ybUJpYXMgPSBbbm9ybS5iaWFzWzBdLCBub3JtLmJpYXNbMV0sIG5vcm0uYmlhc1syXSwgMF07XG4gICAgICAgIGlmIChub3JtLmJpYXNbM10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5vcm1CaWFzWzNdID0gbm9ybS5iaWFzWzNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaWRlID0gaGVpZ2h0ICogd2lkdGg7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ICE9PSB1bmRlZmluZWQgJiYgKGNoYW5uZWxzID09PSA0ICYmIG9wdGlvbnMuZm9ybWF0ICE9PSAnUkdCQScpIHx8XG4gICAgICAgICAgKGNoYW5uZWxzID09PSAzICYmIChvcHRpb25zLmZvcm1hdCAhPT0gJ1JHQicgJiYgb3B0aW9ucy5mb3JtYXQgIT09ICdCR1InKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZW5zb3IgZm9ybWF0IGRvZXNuXFwndCBtYXRjaCBpbnB1dCB0ZW5zb3IgZGltcycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZmF1bHQgcG9pbnRlciBhc3NpZ25tZW50c1xuICAgIGNvbnN0IHN0ZXAgPSA0O1xuICAgIGxldCBySW1hZ2VQb2ludGVyID0gMCwgZ0ltYWdlUG9pbnRlciA9IDEsIGJJbWFnZVBvaW50ZXIgPSAyLCBhSW1hZ2VQb2ludGVyID0gMztcbiAgICBsZXQgclRlbnNvclBvaW50ZXIgPSAwLCBnVGVuc29yUG9pbnRlciA9IHN0cmlkZSwgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyLCBhVGVuc29yUG9pbnRlciA9IC0xO1xuXG4gICAgLy8gVXBkYXRpbmcgdGhlIHBvaW50ZXIgYXNzaWdubWVudHMgYmFzZWQgb24gdGhlIGlucHV0IGltYWdlIGZvcm1hdFxuICAgIGlmIChpbnB1dGZvcm1hdCA9PT0gJ1JHQkEnKSB7XG4gICAgICByVGVuc29yUG9pbnRlciA9IDA7XG4gICAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZTtcbiAgICAgIGJUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMjtcbiAgICAgIGFUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMztcbiAgICB9IGVsc2UgaWYgKGlucHV0Zm9ybWF0ID09PSAnUkdCJykge1xuICAgICAgclRlbnNvclBvaW50ZXIgPSAwO1xuICAgICAgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGU7XG4gICAgICBiVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDI7XG4gICAgfSBlbHNlIGlmIChpbnB1dGZvcm1hdCA9PT0gJ1JCRycpIHtcbiAgICAgIHJUZW5zb3JQb2ludGVyID0gMDtcbiAgICAgIGJUZW5zb3JQb2ludGVyID0gc3RyaWRlO1xuICAgICAgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyO1xuICAgIH1cblxuICAgIGltYWdlID0gcGl4ZWxzMkRDb250ZXh0LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0ICogd2lkdGg7XG4gICAgICAgICBySW1hZ2VQb2ludGVyICs9IHN0ZXAsIGdJbWFnZVBvaW50ZXIgKz0gc3RlcCwgYkltYWdlUG9pbnRlciArPSBzdGVwLCBhSW1hZ2VQb2ludGVyICs9IHN0ZXAsIGkrKykge1xuICAgICAgaW1hZ2UuZGF0YVtySW1hZ2VQb2ludGVyXSA9ICgodGVuc29yLmRhdGFbclRlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzBdKSAqIG5vcm1NZWFuWzBdOyAgLy8gUiB2YWx1ZVxuICAgICAgaW1hZ2UuZGF0YVtnSW1hZ2VQb2ludGVyXSA9ICgodGVuc29yLmRhdGFbZ1RlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzFdKSAqIG5vcm1NZWFuWzFdOyAgLy8gRyB2YWx1ZVxuICAgICAgaW1hZ2UuZGF0YVtiSW1hZ2VQb2ludGVyXSA9ICgodGVuc29yLmRhdGFbYlRlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzJdKSAqIG5vcm1NZWFuWzJdOyAgLy8gQiB2YWx1ZVxuICAgICAgaW1hZ2UuZGF0YVthSW1hZ2VQb2ludGVyXSA9IGFUZW5zb3JQb2ludGVyID09PSAtMSA/XG4gICAgICAgICAgMjU1IDpcbiAgICAgICAgICAoKHRlbnNvci5kYXRhW2FUZW5zb3JQb2ludGVyKytdIGFzIG51bWJlcikgLSBub3JtQmlhc1szXSkgKiBub3JtTWVhblszXTsgIC8vIEEgdmFsdWVcbiAgICB9XG5cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgYWNjZXNzIGltYWdlIGRhdGEnKTtcbiAgfVxuICByZXR1cm4gaW1hZ2U7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge09wdGlvbnNEaW1lbnNpb25zLCBPcHRpb25zRm9ybWF0LCBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMsIE9wdGlvbnNUZW5zb3JGb3JtYXQsIE9wdGlvbnNUZW5zb3JMYXlvdXQsIFRlbnNvckZyb21HcHVCdWZmZXJPcHRpb25zLCBUZW5zb3JGcm9tSW1hZ2VCaXRtYXBPcHRpb25zLCBUZW5zb3JGcm9tSW1hZ2VEYXRhT3B0aW9ucywgVGVuc29yRnJvbUltYWdlRWxlbWVudE9wdGlvbnMsIFRlbnNvckZyb21UZXh0dXJlT3B0aW9ucywgVGVuc29yRnJvbVVybE9wdGlvbnN9IGZyb20gJy4vdGVuc29yLWZhY3RvcnkuanMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yLWltcGwuanMnO1xuaW1wb3J0IHtUZW5zb3IgYXMgVGVuc29ySW50ZXJmYWNlfSBmcm9tICcuL3RlbnNvci5qcyc7XG5cbmludGVyZmFjZSBCdWZmZXJUb1RlbnNvck9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zRGltZW5zaW9ucywgT3B0aW9uc1RlbnNvckxheW91dCwgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNGb3JtYXQsIE9wdGlvbnNUZW5zb3JGb3JtYXQge31cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgdGVuc29yIG9iamVjdCBmcm9tIGltYWdlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBidWZmZXIgLSBFeHRyYWN0ZWQgaW1hZ2UgYnVmZmVyIGRhdGEgLSBhc3N1bWluZyBSR0JBIGZvcm1hdFxuICogQHBhcmFtIGltYWdlRm9ybWF0IC0gaW5wdXQgaW1hZ2UgY29uZmlndXJhdGlvbiAtIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGhlaWdodCwgd2lkdGgsIGZvcm1hdFxuICogQHBhcmFtIHRlbnNvckZvcm1hdCAtIG91dHB1dCB0ZW5zb3IgY29uZmlndXJhdGlvbiAtIERlZmF1bHQgaXMgUkdCIGZvcm1hdFxuICovXG5leHBvcnQgY29uc3QgYnVmZmVyVG9UZW5zb3IgPSAoYnVmZmVyOiBVaW50OENsYW1wZWRBcnJheXx1bmRlZmluZWQsIG9wdGlvbnM6IEJ1ZmZlclRvVGVuc29yT3B0aW9ucyk6IFRlbnNvciA9PiB7XG4gIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW1hZ2UgYnVmZmVyIG11c3QgYmUgZGVmaW5lZCcpO1xuICB9XG4gIGlmIChvcHRpb25zLmhlaWdodCA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMud2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW1hZ2UgaGVpZ2h0IGFuZCB3aWR0aCBtdXN0IGJlIGRlZmluZWQnKTtcbiAgfVxuICBpZiAob3B0aW9ucy50ZW5zb3JMYXlvdXQgPT09ICdOSFdDJykge1xuICAgIHRocm93IG5ldyBFcnJvcignTkhXQyBUZW5zb3IgbGF5b3V0IGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gIH1cblxuICBjb25zdCB7aGVpZ2h0LCB3aWR0aH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IG5vcm0gPSBvcHRpb25zLm5vcm0gPz8ge21lYW46IDI1NSwgYmlhczogMH07XG4gIGxldCBub3JtTWVhbjogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIGxldCBub3JtQmlhczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbiAgaWYgKHR5cGVvZiAobm9ybS5tZWFuKSA9PT0gJ251bWJlcicpIHtcbiAgICBub3JtTWVhbiA9IFtub3JtLm1lYW4sIG5vcm0ubWVhbiwgbm9ybS5tZWFuLCBub3JtLm1lYW5dO1xuICB9IGVsc2Uge1xuICAgIG5vcm1NZWFuID0gW25vcm0ubWVhbiFbMF0sIG5vcm0ubWVhbiFbMV0sIG5vcm0ubWVhbiFbMl0sIG5vcm0ubWVhbiFbM10gPz8gMjU1XTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgKG5vcm0uYmlhcykgPT09ICdudW1iZXInKSB7XG4gICAgbm9ybUJpYXMgPSBbbm9ybS5iaWFzLCBub3JtLmJpYXMsIG5vcm0uYmlhcywgbm9ybS5iaWFzXTtcbiAgfSBlbHNlIHtcbiAgICBub3JtQmlhcyA9IFtub3JtLmJpYXMhWzBdLCBub3JtLmJpYXMhWzFdLCBub3JtLmJpYXMhWzJdLCBub3JtLmJpYXMhWzNdID8/IDBdO1xuICB9XG5cbiAgY29uc3QgaW5wdXRmb3JtYXQgPSBvcHRpb25zLmZvcm1hdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5mb3JtYXQgOiAnUkdCQSc7XG4gIC8vIGRlZmF1bHQgdmFsdWUgaXMgUkdCQSBzaW5jZSBpbWFnZWRhdGEgYW5kIEhUTUxJbWFnZUVsZW1lbnQgdXNlcyBpdFxuXG4gIGNvbnN0IG91dHB1dGZvcm1hdCA9XG4gICAgICBvcHRpb25zLnRlbnNvckZvcm1hdCAhPT0gdW5kZWZpbmVkID8gKG9wdGlvbnMudGVuc29yRm9ybWF0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRlbnNvckZvcm1hdCA6ICdSR0InKSA6ICdSR0InO1xuICBjb25zdCBzdHJpZGUgPSBoZWlnaHQgKiB3aWR0aDtcbiAgY29uc3QgZmxvYXQzMkRhdGEgPSBvdXRwdXRmb3JtYXQgPT09ICdSR0JBJyA/IG5ldyBGbG9hdDMyQXJyYXkoc3RyaWRlICogNCkgOiBuZXcgRmxvYXQzMkFycmF5KHN0cmlkZSAqIDMpO1xuXG4gIC8vIERlZmF1bHQgcG9pbnRlciBhc3NpZ25tZW50c1xuICBsZXQgc3RlcCA9IDQsIHJJbWFnZVBvaW50ZXIgPSAwLCBnSW1hZ2VQb2ludGVyID0gMSwgYkltYWdlUG9pbnRlciA9IDIsIGFJbWFnZVBvaW50ZXIgPSAzO1xuICBsZXQgclRlbnNvclBvaW50ZXIgPSAwLCBnVGVuc29yUG9pbnRlciA9IHN0cmlkZSwgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyLCBhVGVuc29yUG9pbnRlciA9IC0xO1xuXG4gIC8vIFVwZGF0aW5nIHRoZSBwb2ludGVyIGFzc2lnbm1lbnRzIGJhc2VkIG9uIHRoZSBpbnB1dCBpbWFnZSBmb3JtYXRcbiAgaWYgKGlucHV0Zm9ybWF0ID09PSAnUkdCJykge1xuICAgIHN0ZXAgPSAzO1xuICAgIHJJbWFnZVBvaW50ZXIgPSAwO1xuICAgIGdJbWFnZVBvaW50ZXIgPSAxO1xuICAgIGJJbWFnZVBvaW50ZXIgPSAyO1xuICAgIGFJbWFnZVBvaW50ZXIgPSAtMTtcbiAgfVxuXG4gIC8vIFVwZGF0aW5nIHRoZSBwb2ludGVyIGFzc2lnbm1lbnRzIGJhc2VkIG9uIHRoZSBvdXRwdXQgdGVuc29yIGZvcm1hdFxuICBpZiAob3V0cHV0Zm9ybWF0ID09PSAnUkdCQScpIHtcbiAgICBhVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDM7XG4gIH0gZWxzZSBpZiAob3V0cHV0Zm9ybWF0ID09PSAnUkJHJykge1xuICAgIHJUZW5zb3JQb2ludGVyID0gMDtcbiAgICBiVGVuc29yUG9pbnRlciA9IHN0cmlkZTtcbiAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDI7XG4gIH0gZWxzZSBpZiAob3V0cHV0Zm9ybWF0ID09PSAnQkdSJykge1xuICAgIGJUZW5zb3JQb2ludGVyID0gMDtcbiAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZTtcbiAgICByVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDI7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmlkZTtcbiAgICAgICBpKyssIHJJbWFnZVBvaW50ZXIgKz0gc3RlcCwgYkltYWdlUG9pbnRlciArPSBzdGVwLCBnSW1hZ2VQb2ludGVyICs9IHN0ZXAsIGFJbWFnZVBvaW50ZXIgKz0gc3RlcCkge1xuICAgIGZsb2F0MzJEYXRhW3JUZW5zb3JQb2ludGVyKytdID0gKGJ1ZmZlcltySW1hZ2VQb2ludGVyXSArIG5vcm1CaWFzWzBdKSAvIG5vcm1NZWFuWzBdO1xuICAgIGZsb2F0MzJEYXRhW2dUZW5zb3JQb2ludGVyKytdID0gKGJ1ZmZlcltnSW1hZ2VQb2ludGVyXSArIG5vcm1CaWFzWzFdKSAvIG5vcm1NZWFuWzFdO1xuICAgIGZsb2F0MzJEYXRhW2JUZW5zb3JQb2ludGVyKytdID0gKGJ1ZmZlcltiSW1hZ2VQb2ludGVyXSArIG5vcm1CaWFzWzJdKSAvIG5vcm1NZWFuWzJdO1xuICAgIGlmIChhVGVuc29yUG9pbnRlciAhPT0gLTEgJiYgYUltYWdlUG9pbnRlciAhPT0gLTEpIHtcbiAgICAgIGZsb2F0MzJEYXRhW2FUZW5zb3JQb2ludGVyKytdID0gKGJ1ZmZlclthSW1hZ2VQb2ludGVyXSArIG5vcm1CaWFzWzNdKSAvIG5vcm1NZWFuWzNdO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZsb2F0MzJBcnJheSAtPiBvcnQuVGVuc29yXG4gIGNvbnN0IG91dHB1dFRlbnNvciA9IG91dHB1dGZvcm1hdCA9PT0gJ1JHQkEnID8gbmV3IFRlbnNvcignZmxvYXQzMicsIGZsb2F0MzJEYXRhLCBbMSwgNCwgaGVpZ2h0LCB3aWR0aF0pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGVuc29yKCdmbG9hdDMyJywgZmxvYXQzMkRhdGEsIFsxLCAzLCBoZWlnaHQsIHdpZHRoXSk7XG4gIHJldHVybiBvdXRwdXRUZW5zb3I7XG59O1xuXG4vKipcbiAqIGltcGxlbWVudGF0aW9uIG9mIFRlbnNvci5mcm9tSW1hZ2UoKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvckZyb21JbWFnZSA9IGFzeW5jKFxuICAgIGltYWdlOiBJbWFnZURhdGF8SFRNTEltYWdlRWxlbWVudHxJbWFnZUJpdG1hcHxzdHJpbmcsXG4gICAgb3B0aW9ucz86IFRlbnNvckZyb21JbWFnZURhdGFPcHRpb25zfFRlbnNvckZyb21JbWFnZUVsZW1lbnRPcHRpb25zfFRlbnNvckZyb21JbWFnZUJpdG1hcE9wdGlvbnN8XG4gICAgVGVuc29yRnJvbVVybE9wdGlvbnMpOiBQcm9taXNlPFRlbnNvcj4gPT4ge1xuICAvLyBjaGVja2luZyB0aGUgdHlwZSBvZiBpbWFnZSBvYmplY3RcbiAgY29uc3QgaXNIVE1MSW1hZ2VFbGUgPSB0eXBlb2YgKEhUTUxJbWFnZUVsZW1lbnQpICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQ7XG4gIGNvbnN0IGlzSW1hZ2VEYXRhRWxlID0gdHlwZW9mIChJbWFnZURhdGEpICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlRGF0YTtcbiAgY29uc3QgaXNJbWFnZUJpdG1hcCA9IHR5cGVvZiAoSW1hZ2VCaXRtYXApICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwO1xuICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBpbWFnZSA9PT0gJ3N0cmluZyc7XG5cbiAgbGV0IGRhdGE6IFVpbnQ4Q2xhbXBlZEFycmF5fHVuZGVmaW5lZDtcbiAgbGV0IGJ1ZmZlclRvVGVuc29yT3B0aW9uczogQnVmZmVyVG9UZW5zb3JPcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcblxuICBjb25zdCBjcmVhdGVDYW52YXMgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBPZmZzY3JlZW5DYW52YXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IE9mZnNjcmVlbkNhbnZhcygxLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW52YXMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgY3JlYXRlQ2FudmFzQ29udGV4dCA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50fE9mZnNjcmVlbkNhbnZhcykgPT4ge1xuICAgIGlmIChjYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkge1xuICAgICAgcmV0dXJuIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIH0gZWxzZSBpZiAoY2FudmFzIGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzKSB7XG4gICAgICByZXR1cm4gY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG4gIC8vIGZpbGxpbmcgYW5kIGNoZWNraW5nIGltYWdlIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICBpZiAoaXNIVE1MSW1hZ2VFbGUpIHtcbiAgICAvLyBIVE1MSW1hZ2VFbGVtZW50IC0gaW1hZ2Ugb2JqZWN0IC0gZm9ybWF0IGlzIFJHQkEgYnkgZGVmYXVsdFxuICAgIGNvbnN0IGNhbnZhcyA9IGNyZWF0ZUNhbnZhcygpO1xuICAgIGNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG4gICAgY29uc3QgcGl4ZWxzMkRDb250ZXh0ID0gY3JlYXRlQ2FudmFzQ29udGV4dChjYW52YXMpO1xuXG4gICAgaWYgKHBpeGVsczJEQ29udGV4dCAhPSBudWxsKSB7XG4gICAgICBsZXQgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuICAgICAgbGV0IHdpZHRoID0gaW1hZ2Uud2lkdGg7XG4gICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVzaXplZEhlaWdodCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVzaXplZFdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVpZ2h0ID0gb3B0aW9ucy5yZXNpemVkSGVpZ2h0O1xuICAgICAgICB3aWR0aCA9IG9wdGlvbnMucmVzaXplZFdpZHRoO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRpb25zLnRlbnNvckZvcm1hdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSBpbnB1dCBjb25maWcgZm9ybWF0IG11c3QgYmUgUkdCQSBmb3IgSFRNTEltYWdlRWxlbWVudCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucy50ZW5zb3JGb3JtYXQgPSAnUkdCQSc7XG4gICAgICAgIH1cbiAgICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLndpZHRoID0gd2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMudGVuc29yRm9ybWF0ID0gJ1JHQkEnO1xuICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMud2lkdGggPSB3aWR0aDtcbiAgICAgIH1cblxuICAgICAgcGl4ZWxzMkRDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgMCwgMCk7XG4gICAgICBkYXRhID0gcGl4ZWxzMkRDb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgYWNjZXNzIGltYWdlIGRhdGEnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNJbWFnZURhdGFFbGUpIHtcbiAgICBsZXQgaGVpZ2h0OiBudW1iZXI7XG4gICAgbGV0IHdpZHRoOiBudW1iZXI7XG5cbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVzaXplZFdpZHRoICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5yZXNpemVkSGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhlaWdodCA9IG9wdGlvbnMucmVzaXplZEhlaWdodDtcbiAgICAgIHdpZHRoID0gb3B0aW9ucy5yZXNpemVkV2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICAgIHdpZHRoID0gaW1hZ2Uud2lkdGg7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLmZvcm1hdCA9ICdSR0JBJztcbiAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucy53aWR0aCA9IHdpZHRoO1xuXG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGVtcENhbnZhcyA9IGNyZWF0ZUNhbnZhcygpO1xuXG4gICAgICB0ZW1wQ2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICB0ZW1wQ2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgY29uc3QgcGl4ZWxzMkRDb250ZXh0ID0gY3JlYXRlQ2FudmFzQ29udGV4dCh0ZW1wQ2FudmFzKTtcblxuICAgICAgaWYgKHBpeGVsczJEQ29udGV4dCAhPSBudWxsKSB7XG4gICAgICAgIHBpeGVsczJEQ29udGV4dC5wdXRJbWFnZURhdGEoaW1hZ2UsIDAsIDApO1xuICAgICAgICBkYXRhID0gcGl4ZWxzMkRDb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGFjY2VzcyBpbWFnZSBkYXRhJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBpbWFnZS5kYXRhO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ltYWdlQml0bWFwKSB7XG4gICAgLy8gSW1hZ2VCaXRtYXAgLSBpbWFnZSBvYmplY3QgLSBmb3JtYXQgbXVzdCBiZSBwcm92aWRlZCBieSB1c2VyXG4gICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBpbWFnZSBjb25maWcgd2l0aCBmb3JtYXQgZm9yIEltYWdlYml0bWFwJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzID0gY3JlYXRlQ2FudmFzKCk7XG4gICAgY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICBjb25zdCBwaXhlbHMyRENvbnRleHQgPSBjcmVhdGVDYW52YXNDb250ZXh0KGNhbnZhcyk7XG5cbiAgICBpZiAocGl4ZWxzMkRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICAgIGNvbnN0IHdpZHRoID0gaW1hZ2Uud2lkdGg7XG4gICAgICBwaXhlbHMyRENvbnRleHQuZHJhd0ltYWdlKGltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGRhdGEgPSBwaXhlbHMyRENvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLndpZHRoID0gd2lkdGg7XG4gICAgICByZXR1cm4gYnVmZmVyVG9UZW5zb3IoZGF0YSwgYnVmZmVyVG9UZW5zb3JPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGFjY2VzcyBpbWFnZSBkYXRhJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGNyZWF0ZUNhbnZhcygpO1xuICAgICAgY29uc3QgY29udGV4dCA9IGNyZWF0ZUNhbnZhc0NvbnRleHQoY2FudmFzKTtcbiAgICAgIGlmICghaW1hZ2UgfHwgIWNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3SW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIG5ld0ltYWdlLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XG4gICAgICBuZXdJbWFnZS5zcmMgPSBpbWFnZTtcbiAgICAgIG5ld0ltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY2FudmFzLndpZHRoID0gbmV3SW1hZ2Uud2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBuZXdJbWFnZS5oZWlnaHQ7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG5ld0ltYWdlLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICBjb25zdCBpbWcgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuXG4gICAgICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucy5oZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMud2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgICAgIHJlc29sdmUoYnVmZmVyVG9UZW5zb3IoaW1nLmRhdGEsIGJ1ZmZlclRvVGVuc29yT3B0aW9ucykpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IGRhdGEgcHJvdmlkZWQgaXMgbm90IHN1cHBvcnRlZCAtIGFib3J0ZWQgdGVuc29yIGNyZWF0aW9uJyk7XG4gIH1cblxuICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGJ1ZmZlclRvVGVuc29yKGRhdGEsIGJ1ZmZlclRvVGVuc29yT3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBkYXRhIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWQgLSBhYm9ydGVkIHRlbnNvciBjcmVhdGlvbicpO1xuICB9XG59O1xuXG4vKipcbiAqIGltcGxlbWVudGF0aW9uIG9mIFRlbnNvci5mcm9tVGV4dHVyZSgpLlxuICovXG5leHBvcnQgY29uc3QgdGVuc29yRnJvbVRleHR1cmUgPSA8VCBleHRlbmRzIFRlbnNvckludGVyZmFjZS5UZXh0dXJlRGF0YVR5cGVzPihcbiAgICB0ZXh0dXJlOiBUZW5zb3JJbnRlcmZhY2UuVGV4dHVyZVR5cGUsIG9wdGlvbnM6IFRlbnNvckZyb21UZXh0dXJlT3B0aW9uczxUPik6IFRlbnNvciA9PiB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBkb3dubG9hZCwgZGlzcG9zZX0gPSBvcHRpb25zO1xuICAvLyBBbHdheXMgYXNzdW1lIFJHQkFGMzIuIFRPRE86IHN1cHBvcnQgZGlmZmVyZW50IHRleHR1cmUgZm9ybWF0XG4gIGNvbnN0IGRpbXMgPSBbMSwgaGVpZ2h0LCB3aWR0aCwgNF07XG4gIHJldHVybiBuZXcgVGVuc29yKHtsb2NhdGlvbjogJ3RleHR1cmUnLCB0eXBlOiAnZmxvYXQzMicsIHRleHR1cmUsIGRpbXMsIGRvd25sb2FkLCBkaXNwb3NlfSk7XG59O1xuXG4vKipcbiAqIGltcGxlbWVudGF0aW9uIG9mIFRlbnNvci5mcm9tR3B1QnVmZmVyKCkuXG4gKi9cbmV4cG9ydCBjb25zdCB0ZW5zb3JGcm9tR3B1QnVmZmVyID0gPFQgZXh0ZW5kcyBUZW5zb3JJbnRlcmZhY2UuR3B1QnVmZmVyRGF0YVR5cGVzPihcbiAgICBncHVCdWZmZXI6IFRlbnNvckludGVyZmFjZS5HcHVCdWZmZXJUeXBlLCBvcHRpb25zOiBUZW5zb3JGcm9tR3B1QnVmZmVyT3B0aW9uczxUPik6IFRlbnNvciA9PiB7XG4gIGNvbnN0IHtkYXRhVHlwZSwgZGltcywgZG93bmxvYWQsIGRpc3Bvc2V9ID0gb3B0aW9ucztcbiAgcmV0dXJuIG5ldyBUZW5zb3Ioe2xvY2F0aW9uOiAnZ3B1LWJ1ZmZlcicsIHR5cGU6IGRhdGFUeXBlID8/ICdmbG9hdDMyJywgZ3B1QnVmZmVyLCBkaW1zLCBkb3dubG9hZCwgZGlzcG9zZX0pO1xufTtcblxuLyoqXG4gKiBpbXBsZW1lbnRhdGlvbiBvZiBUZW5zb3IuZnJvbVBpbm5lZEJ1ZmZlcigpLlxuICovXG5leHBvcnQgY29uc3QgdGVuc29yRnJvbVBpbm5lZEJ1ZmZlciA9IDxUIGV4dGVuZHMgVGVuc29ySW50ZXJmYWNlLkNwdVBpbm5lZERhdGFUeXBlcz4oXG4gICAgdHlwZTogVCwgYnVmZmVyOiBUZW5zb3JJbnRlcmZhY2UuRGF0YVR5cGVNYXBbVF0sIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFRlbnNvciA9PlxuICAgIG5ldyBUZW5zb3Ioe2xvY2F0aW9uOiAnY3B1LXBpbm5lZCcsIHR5cGUsIGRhdGE6IGJ1ZmZlciwgZGltczogZGltcyA/PyBbYnVmZmVyLmxlbmd0aF19KTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yLmpzJztcblxuZXhwb3J0IHR5cGUgU3VwcG9ydGVkVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IEZsb2F0MzJBcnJheUNvbnN0cnVjdG9yfFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcnxJbnQ4QXJyYXlDb25zdHJ1Y3RvcnxcbiAgICBVaW50MTZBcnJheUNvbnN0cnVjdG9yfEludDE2QXJyYXlDb25zdHJ1Y3RvcnxJbnQzMkFycmF5Q29uc3RydWN0b3J8QmlnSW50NjRBcnJheUNvbnN0cnVjdG9yfFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcnxcbiAgICBGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvcnxVaW50MzJBcnJheUNvbnN0cnVjdG9yfEJpZ1VpbnQ2NEFycmF5Q29uc3RydWN0b3I7XG5leHBvcnQgdHlwZSBTdXBwb3J0ZWRUeXBlZEFycmF5ID0gSW5zdGFuY2VUeXBlPFN1cHBvcnRlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnM+O1xuXG4vLyBhIHJ1bnRpbWUgbWFwIHRoYXQgbWFwcyB0eXBlIHN0cmluZyB0byBUeXBlZEFycmF5IGNvbnN0cnVjdG9yLiBTaG91bGQgbWF0Y2ggVGVuc29yLkRhdGFUeXBlTWFwLlxuZXhwb3J0IGNvbnN0IE5VTUVSSUNfVEVOU09SX1RZUEVfVE9fVFlQRURBUlJBWV9NQVAgPSBuZXcgTWFwPHN0cmluZywgU3VwcG9ydGVkVHlwZWRBcnJheUNvbnN0cnVjdG9ycz4oW1xuICBbJ2Zsb2F0MzInLCBGbG9hdDMyQXJyYXldLFxuICBbJ3VpbnQ4JywgVWludDhBcnJheV0sXG4gIFsnaW50OCcsIEludDhBcnJheV0sXG4gIFsndWludDE2JywgVWludDE2QXJyYXldLFxuICBbJ2ludDE2JywgSW50MTZBcnJheV0sXG4gIFsnaW50MzInLCBJbnQzMkFycmF5XSxcbiAgWydib29sJywgVWludDhBcnJheV0sXG4gIFsnZmxvYXQ2NCcsIEZsb2F0NjRBcnJheV0sXG4gIFsndWludDMyJywgVWludDMyQXJyYXldLFxuXSk7XG5cbi8vIGEgcnVudGltZSBtYXAgdGhhdCBtYXBzIHR5cGUgc3RyaW5nIHRvIFR5cGVkQXJyYXkgY29uc3RydWN0b3IuIFNob3VsZCBtYXRjaCBUZW5zb3IuRGF0YVR5cGVNYXAuXG5leHBvcnQgY29uc3QgTlVNRVJJQ19URU5TT1JfVFlQRURBUlJBWV9UT19UWVBFX01BUCA9IG5ldyBNYXA8U3VwcG9ydGVkVHlwZWRBcnJheUNvbnN0cnVjdG9ycywgVGVuc29yLlR5cGU+KFtcbiAgW0Zsb2F0MzJBcnJheSwgJ2Zsb2F0MzInXSxcbiAgW1VpbnQ4QXJyYXksICd1aW50OCddLFxuICBbSW50OEFycmF5LCAnaW50OCddLFxuICBbVWludDE2QXJyYXksICd1aW50MTYnXSxcbiAgW0ludDE2QXJyYXksICdpbnQxNiddLFxuICBbSW50MzJBcnJheSwgJ2ludDMyJ10sXG4gIFtGbG9hdDY0QXJyYXksICdmbG9hdDY0J10sXG4gIFtVaW50MzJBcnJheSwgJ3VpbnQzMiddLFxuXSk7XG5cbi8vIGEgZHVtbXkgdHlwZSBkZWNsYXJhdGlvbiBmb3IgRmxvYXQxNkFycmF5IGluIGNhc2UgYW55IHBvbHlmaWxsIGlzIGF2YWlsYWJsZS5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBGbG9hdDE2QXJyYXk6IGFueTtcbn1cblxuLy8gdGhlIGZvbGxvd2luZyBjb2RlIGFsbG93cyBkZWxheWluZyBleGVjdXRpb24gb2YgQmlnSW50L0Zsb2F0MTZBcnJheSBjaGVja2luZy4gVGhpcyBhbGxvd3MgbGF6eSBpbml0aWFsaXphdGlvbiBmb3Jcbi8vIE5VTUVSSUNfVEVOU09SX1RZUEVfVE9fVFlQRURBUlJBWV9NQVAgYW5kIE5VTUVSSUNfVEVOU09SX1RZUEVEQVJSQVlfVE9fVFlQRV9NQVAsIHdoaWNoIGFsbG93cyBCaWdJbnQvRmxvYXQxNkFycmF5XG4vLyBwb2x5ZmlsbCBpZiBhdmFpbGFibGUuXG5sZXQgaXNUeXBlZEFycmF5Q2hlY2tlZCA9IGZhbHNlO1xuZXhwb3J0IGNvbnN0IGNoZWNrVHlwZWRBcnJheSA9ICgpID0+IHtcbiAgaWYgKCFpc1R5cGVkQXJyYXlDaGVja2VkKSB7XG4gICAgaXNUeXBlZEFycmF5Q2hlY2tlZCA9IHRydWU7XG4gICAgY29uc3QgaXNCaWdJbnQ2NEFycmF5QXZhaWxhYmxlID0gdHlwZW9mIEJpZ0ludDY0QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIEJpZ0ludDY0QXJyYXkuZnJvbTtcbiAgICBjb25zdCBpc0JpZ1VpbnQ2NEFycmF5QXZhaWxhYmxlID0gdHlwZW9mIEJpZ1VpbnQ2NEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBCaWdVaW50NjRBcnJheS5mcm9tO1xuICAgIGNvbnN0IGlzRmxvYXQxNkFycmF5QXZhaWxhYmxlID0gdHlwZW9mIEZsb2F0MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgRmxvYXQxNkFycmF5LmZyb207XG5cbiAgICBpZiAoaXNCaWdJbnQ2NEFycmF5QXZhaWxhYmxlKSB7XG4gICAgICBOVU1FUklDX1RFTlNPUl9UWVBFX1RPX1RZUEVEQVJSQVlfTUFQLnNldCgnaW50NjQnLCBCaWdJbnQ2NEFycmF5KTtcbiAgICAgIE5VTUVSSUNfVEVOU09SX1RZUEVEQVJSQVlfVE9fVFlQRV9NQVAuc2V0KEJpZ0ludDY0QXJyYXksICdpbnQ2NCcpO1xuICAgIH1cbiAgICBpZiAoaXNCaWdVaW50NjRBcnJheUF2YWlsYWJsZSkge1xuICAgICAgTlVNRVJJQ19URU5TT1JfVFlQRV9UT19UWVBFREFSUkFZX01BUC5zZXQoJ3VpbnQ2NCcsIEJpZ1VpbnQ2NEFycmF5KTtcbiAgICAgIE5VTUVSSUNfVEVOU09SX1RZUEVEQVJSQVlfVE9fVFlQRV9NQVAuc2V0KEJpZ1VpbnQ2NEFycmF5LCAndWludDY0Jyk7XG4gICAgfVxuICAgIGlmIChpc0Zsb2F0MTZBcnJheUF2YWlsYWJsZSkge1xuICAgICAgTlVNRVJJQ19URU5TT1JfVFlQRV9UT19UWVBFREFSUkFZX01BUC5zZXQoJ2Zsb2F0MTYnLCBGbG9hdDE2QXJyYXkpO1xuICAgICAgTlVNRVJJQ19URU5TT1JfVFlQRURBUlJBWV9UT19UWVBFX01BUC5zZXQoRmxvYXQxNkFycmF5LCAnZmxvYXQxNicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBGbG9hdDE2QXJyYXkgaXMgbm90IGF2YWlsYWJsZSwgdXNlICdVaW50MTZBcnJheScgdG8gc3RvcmUgdGhlIGRhdGEuXG4gICAgICBOVU1FUklDX1RFTlNPUl9UWVBFX1RPX1RZUEVEQVJSQVlfTUFQLnNldCgnZmxvYXQxNicsIFVpbnQxNkFycmF5KTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7Q3B1UGlubmVkQ29uc3RydWN0b3JQYXJhbWV0ZXJzLCBHcHVCdWZmZXJDb25zdHJ1Y3RvclBhcmFtZXRlcnMsIFRleHR1cmVDb25zdHJ1Y3RvclBhcmFtZXRlcnN9IGZyb20gJy4vdGVuc29yLWZhY3RvcnkuanMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yLWltcGwuanMnO1xuXG4vKipcbiAqIGNhbGN1bGF0ZSBzaXplIGZyb20gZGltcy5cbiAqXG4gKiBAcGFyYW0gZGltcyB0aGUgZGltcyBhcnJheS4gTWF5IGJlIGFuIGlsbGVnYWwgaW5wdXQuXG4gKi9cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVTaXplID0gKGRpbXM6IHJlYWRvbmx5IHVua25vd25bXSk6IG51bWJlciA9PiB7XG4gIGxldCBzaXplID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGltID0gZGltc1tpXTtcbiAgICBpZiAodHlwZW9mIGRpbSAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGRpbSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGRpbXNbJHtpfV0gbXVzdCBiZSBhbiBpbnRlZ2VyLCBnb3Q6ICR7ZGltfWApO1xuICAgIH1cbiAgICBpZiAoZGltIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGRpbXNbJHtpfV0gbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCBnb3Q6ICR7ZGltfWApO1xuICAgIH1cbiAgICBzaXplICo9IGRpbTtcbiAgfVxuICByZXR1cm4gc2l6ZTtcbn07XG5cbi8qKlxuICogaW1wbGVtZW50YXRpb24gb2YgVGVuc29yLnJlc2hhcGUoKVxuICovXG5leHBvcnQgY29uc3QgdGVuc29yUmVzaGFwZSA9ICh0ZW5zb3I6IFRlbnNvciwgZGltczogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3IgPT4ge1xuICBzd2l0Y2ggKHRlbnNvci5sb2NhdGlvbikge1xuICAgIGNhc2UgJ2NwdSc6XG4gICAgICByZXR1cm4gbmV3IFRlbnNvcih0ZW5zb3IudHlwZSwgdGVuc29yLmRhdGEsIGRpbXMpO1xuICAgIGNhc2UgJ2NwdS1waW5uZWQnOlxuICAgICAgcmV0dXJuIG5ldyBUZW5zb3Ioe1xuICAgICAgICBsb2NhdGlvbjogJ2NwdS1waW5uZWQnLFxuICAgICAgICBkYXRhOiB0ZW5zb3IuZGF0YSBhcyBDcHVQaW5uZWRDb25zdHJ1Y3RvclBhcmFtZXRlcnNbJ2RhdGEnXSxcbiAgICAgICAgdHlwZTogdGVuc29yLnR5cGUgYXMgQ3B1UGlubmVkQ29uc3RydWN0b3JQYXJhbWV0ZXJzWyd0eXBlJ10sXG4gICAgICAgIGRpbXMsXG4gICAgICB9KTtcbiAgICBjYXNlICd0ZXh0dXJlJzpcbiAgICAgIHJldHVybiBuZXcgVGVuc29yKHtcbiAgICAgICAgbG9jYXRpb246ICd0ZXh0dXJlJyxcbiAgICAgICAgdGV4dHVyZTogdGVuc29yLnRleHR1cmUsXG4gICAgICAgIHR5cGU6IHRlbnNvci50eXBlIGFzIFRleHR1cmVDb25zdHJ1Y3RvclBhcmFtZXRlcnNbJ3R5cGUnXSxcbiAgICAgICAgZGltcyxcbiAgICAgIH0pO1xuICAgIGNhc2UgJ2dwdS1idWZmZXInOlxuICAgICAgcmV0dXJuIG5ldyBUZW5zb3Ioe1xuICAgICAgICBsb2NhdGlvbjogJ2dwdS1idWZmZXInLFxuICAgICAgICBncHVCdWZmZXI6IHRlbnNvci5ncHVCdWZmZXIsXG4gICAgICAgIHR5cGU6IHRlbnNvci50eXBlIGFzIEdwdUJ1ZmZlckNvbnN0cnVjdG9yUGFyYW1ldGVyc1sndHlwZSddLFxuICAgICAgICBkaW1zLFxuICAgICAgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdGVuc29yUmVzaGFwZTogdGVuc29yIGxvY2F0aW9uICR7dGVuc29yLmxvY2F0aW9ufSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7dGVuc29yVG9EYXRhVVJMLCB0ZW5zb3JUb0ltYWdlRGF0YX0gZnJvbSAnLi90ZW5zb3ItY29udmVyc2lvbi1pbXBsLmpzJztcbmltcG9ydCB7VGVuc29yVG9EYXRhVXJsT3B0aW9ucywgVGVuc29yVG9JbWFnZURhdGFPcHRpb25zfSBmcm9tICcuL3RlbnNvci1jb252ZXJzaW9uLmpzJztcbmltcG9ydCB7dGVuc29yRnJvbUdwdUJ1ZmZlciwgdGVuc29yRnJvbUltYWdlLCB0ZW5zb3JGcm9tUGlubmVkQnVmZmVyLCB0ZW5zb3JGcm9tVGV4dHVyZX0gZnJvbSAnLi90ZW5zb3ItZmFjdG9yeS1pbXBsLmpzJztcbmltcG9ydCB7Q3B1UGlubmVkQ29uc3RydWN0b3JQYXJhbWV0ZXJzLCBHcHVCdWZmZXJDb25zdHJ1Y3RvclBhcmFtZXRlcnMsIFRlbnNvckZyb21HcHVCdWZmZXJPcHRpb25zLCBUZW5zb3JGcm9tSW1hZ2VCaXRtYXBPcHRpb25zLCBUZW5zb3JGcm9tSW1hZ2VEYXRhT3B0aW9ucywgVGVuc29yRnJvbUltYWdlRWxlbWVudE9wdGlvbnMsIFRlbnNvckZyb21UZXh0dXJlT3B0aW9ucywgVGVuc29yRnJvbVVybE9wdGlvbnMsIFRleHR1cmVDb25zdHJ1Y3RvclBhcmFtZXRlcnN9IGZyb20gJy4vdGVuc29yLWZhY3RvcnkuanMnO1xuaW1wb3J0IHtjaGVja1R5cGVkQXJyYXksIE5VTUVSSUNfVEVOU09SX1RZUEVfVE9fVFlQRURBUlJBWV9NQVAsIE5VTUVSSUNfVEVOU09SX1RZUEVEQVJSQVlfVE9fVFlQRV9NQVAsIFN1cHBvcnRlZFR5cGVkQXJyYXksIFN1cHBvcnRlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnN9IGZyb20gJy4vdGVuc29yLWltcGwtdHlwZS1tYXBwaW5nLmpzJztcbmltcG9ydCB7Y2FsY3VsYXRlU2l6ZSwgdGVuc29yUmVzaGFwZX0gZnJvbSAnLi90ZW5zb3ItdXRpbHMtaW1wbC5qcyc7XG5pbXBvcnQge1RlbnNvciBhcyBUZW5zb3JJbnRlcmZhY2V9IGZyb20gJy4vdGVuc29yLmpzJztcblxuLy8gdHlwZSBhbGlhc2VzIGZvciB0aG9zZSBleHBvcnRlZCBmcm9tIFRlbnNvciBpbnRlcmZhY2VcblxudHlwZSBUZW5zb3JUeXBlID0gVGVuc29ySW50ZXJmYWNlLlR5cGU7XG50eXBlIFRlbnNvckRhdGFUeXBlID0gVGVuc29ySW50ZXJmYWNlLkRhdGFUeXBlO1xudHlwZSBUZW5zb3JEYXRhTG9jYXRpb24gPSBUZW5zb3JJbnRlcmZhY2UuRGF0YUxvY2F0aW9uO1xudHlwZSBUZW5zb3JUZXh0dXJlVHlwZSA9IFRlbnNvckludGVyZmFjZS5UZXh0dXJlVHlwZTtcbnR5cGUgVGVuc29yR3B1QnVmZmVyVHlwZSA9IFRlbnNvckludGVyZmFjZS5HcHVCdWZmZXJUeXBlO1xuXG4vKipcbiAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBUZW5zb3IgaW50ZXJmYWNlLlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbnNvciBpbXBsZW1lbnRzIFRlbnNvckludGVyZmFjZSB7XG4gIC8vICNyZWdpb24gY29uc3RydWN0b3JzXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBDUFUgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiB0eXBlLCBkYXRhIGFuZCBkaW1zLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgICB0eXBlOiBUZW5zb3JUeXBlLCBkYXRhOiBUZW5zb3JEYXRhVHlwZXxyZWFkb25seSBzdHJpbmdbXXxyZWFkb25seSBudW1iZXJbXXxyZWFkb25seSBib29sZWFuW10sXG4gICAgICBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pO1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IENQVSB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuIFR5cGUgaXMgaW5mZXJyZWQgZnJvbSBkYXRhLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YTogVGVuc29yRGF0YVR5cGV8cmVhZG9ubHkgc3RyaW5nW118cmVhZG9ubHkgYm9vbGVhbltdLCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pO1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHRlbnNvciBvYmplY3QgZnJvbSB0aGUgcGlubmVkIENQVSBkYXRhIHdpdGggdGhlIGdpdmVuIHR5cGUgYW5kIGRpbXMuXG4gICAqXG4gICAqIFRlbnNvcidzIGxvY2F0aW9uIHdpbGwgYmUgc2V0IHRvICdjcHUtcGlubmVkJy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFNwZWNpZnkgdGhlIHBhcmFtZXRlcnMgdG8gY29uc3RydWN0IHRoZSB0ZW5zb3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJhbXM6IENwdVBpbm5lZENvbnN0cnVjdG9yUGFyYW1ldGVycyk7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBXZWJHTCB0ZXh0dXJlIHdpdGggdGhlIGdpdmVuIHR5cGUgYW5kIGRpbXMuXG4gICAqXG4gICAqIFRlbnNvcidzIGxvY2F0aW9uIHdpbGwgYmUgc2V0IHRvICd0ZXh0dXJlJy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFNwZWNpZnkgdGhlIHBhcmFtZXRlcnMgdG8gY29uc3RydWN0IHRoZSB0ZW5zb3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXJhbXM6IFRleHR1cmVDb25zdHJ1Y3RvclBhcmFtZXRlcnMpO1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHRlbnNvciBvYmplY3QgZnJvbSB0aGUgV2ViR1BVIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbiB0eXBlIGFuZCBkaW1zLlxuICAgKlxuICAgKiBUZW5zb3IncyBsb2NhdGlvbiB3aWxsIGJlIHNldCB0byAnZ3B1LWJ1ZmZlcicuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBTcGVjaWZ5IHRoZSBwYXJhbWV0ZXJzIHRvIGNvbnN0cnVjdCB0aGUgdGVuc29yLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyYW1zOiBHcHVCdWZmZXJDb25zdHJ1Y3RvclBhcmFtZXRlcnMpO1xuXG4gIC8qKlxuICAgKiBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgYXJnMDogVGVuc29yVHlwZXxUZW5zb3JEYXRhVHlwZXxyZWFkb25seSBzdHJpbmdbXXxyZWFkb25seSBib29sZWFuW118Q3B1UGlubmVkQ29uc3RydWN0b3JQYXJhbWV0ZXJzfFxuICAgICAgVGV4dHVyZUNvbnN0cnVjdG9yUGFyYW1ldGVyc3xHcHVCdWZmZXJDb25zdHJ1Y3RvclBhcmFtZXRlcnMsXG4gICAgICBhcmcxPzogVGVuc29yRGF0YVR5cGV8cmVhZG9ubHkgbnVtYmVyW118cmVhZG9ubHkgc3RyaW5nW118cmVhZG9ubHkgYm9vbGVhbltdLCBhcmcyPzogcmVhZG9ubHkgbnVtYmVyW10pIHtcbiAgICAvLyBwZXJmb3JtIG9uZS10aW1lIGNoZWNrIGZvciBCaWdJbnQvRmxvYXQxNkFycmF5IHN1cHBvcnRcbiAgICBjaGVja1R5cGVkQXJyYXkoKTtcblxuICAgIGxldCB0eXBlOiBUZW5zb3JUeXBlO1xuICAgIGxldCBkaW1zOiByZWFkb25seSBudW1iZXJbXTtcblxuICAgIGlmICh0eXBlb2YgYXJnMCA9PT0gJ29iamVjdCcgJiYgJ2xvY2F0aW9uJyBpbiBhcmcwKSB7XG4gICAgICAvL1xuICAgICAgLy8gY29uc3RydWN0aW5nIHRlbnNvciBmcm9tIHNwZWNpZmljIGxvY2F0aW9uXG4gICAgICAvL1xuICAgICAgdGhpcy5kYXRhTG9jYXRpb24gPSBhcmcwLmxvY2F0aW9uO1xuICAgICAgdHlwZSA9IGFyZzAudHlwZTtcbiAgICAgIGRpbXMgPSBhcmcwLmRpbXM7XG4gICAgICBzd2l0Y2ggKGFyZzAubG9jYXRpb24pIHtcbiAgICAgICAgY2FzZSAnY3B1LXBpbm5lZCc6IHtcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IE5VTUVSSUNfVEVOU09SX1RZUEVfVE9fVFlQRURBUlJBWV9NQVAuZ2V0KHR5cGUpO1xuICAgICAgICAgIGlmICghZXhwZWN0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGUgXCIke3R5cGV9XCIgdG8gY3JlYXRlIHRlbnNvciBmcm9tIHBpbm5lZCBidWZmZXJgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEoYXJnMC5kYXRhIGluc3RhbmNlb2YgZXhwZWN0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBidWZmZXIgc2hvdWxkIGJlIG9mIHR5cGUgJHtleHBlY3RlZFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNwdURhdGEgPSBhcmcwLmRhdGE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndGV4dHVyZSc6IHtcbiAgICAgICAgICBpZiAodHlwZSAhPT0gJ2Zsb2F0MzInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlIFwiJHt0eXBlfVwiIHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbSB0ZXh0dXJlYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3B1VGV4dHVyZURhdGEgPSBhcmcwLnRleHR1cmU7XG4gICAgICAgICAgdGhpcy5kb3dubG9hZGVyID0gYXJnMC5kb3dubG9hZDtcbiAgICAgICAgICB0aGlzLmRpc3Bvc2VyID0gYXJnMC5kaXNwb3NlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2dwdS1idWZmZXInOiB7XG4gICAgICAgICAgaWYgKCh0eXBlICE9PSAnZmxvYXQzMicgJiYgdHlwZSAhPT0gJ2Zsb2F0MTYnICYmIHR5cGUgIT09ICdpbnQzMicgJiYgdHlwZSAhPT0gJ2ludDY0JyAmJiB0eXBlICE9PSAndWludDMyJyAmJlxuICAgICAgICAgICAgICAgdHlwZSAhPT0gJ3VpbnQ4JyAmJiB0eXBlICE9PSAnYm9vbCcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlIFwiJHt0eXBlfVwiIHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbSBncHUgYnVmZmVyYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3B1QnVmZmVyRGF0YSA9IGFyZzAuZ3B1QnVmZmVyO1xuICAgICAgICAgIHRoaXMuZG93bmxvYWRlciA9IGFyZzAuZG93bmxvYWQ7XG4gICAgICAgICAgdGhpcy5kaXNwb3NlciA9IGFyZzAuZGlzcG9zZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yIGNvbnN0cnVjdG9yOiB1bnN1cHBvcnRlZCBsb2NhdGlvbiAnJHt0aGlzLmRhdGFMb2NhdGlvbn0nYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vXG4gICAgICAvLyBjb25zdHJ1Y3RpbmcgdGVuc29yIG9mIGxvY2F0aW9uICdjcHUnXG4gICAgICAvL1xuICAgICAgbGV0IGRhdGE6IFRlbnNvckRhdGFUeXBlO1xuICAgICAgbGV0IG1heWJlRGltczogdHlwZW9mIGFyZzF8dHlwZW9mIGFyZzI7XG4gICAgICAvLyBjaGVjayB3aGV0aGVyIGFyZzAgaXMgdHlwZSBvciBkYXRhXG4gICAgICBpZiAodHlwZW9mIGFyZzAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIE92ZXJyaWRlOiBjb25zdHJ1Y3Rvcih0eXBlLCBkYXRhLCAuLi4pXG4gICAgICAgIC8vXG4gICAgICAgIHR5cGUgPSBhcmcwO1xuICAgICAgICBtYXliZURpbXMgPSBhcmcyO1xuICAgICAgICBpZiAoYXJnMCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyBzdHJpbmcgdGVuc29yXG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZzEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIHN0cmluZyB0ZW5zb3JcXCdzIGRhdGEgbXVzdCBiZSBhIHN0cmluZyBhcnJheS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gd2UgZG9uJ3QgY2hlY2sgd2hldGhlciBldmVyeSBlbGVtZW50IGluIHRoZSBhcnJheSBpcyBzdHJpbmc7IHRoaXMgaXMgdG9vIHNsb3cuIHdlIGFzc3VtZSBpdCdzIGNvcnJlY3QgYW5kXG4gICAgICAgICAgLy8gZXJyb3Igd2lsbCBiZSBwb3B1bGF0ZWQgYXQgaW5mZXJlbmNlXG4gICAgICAgICAgZGF0YSA9IGFyZzE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbnVtZXJpYyB0ZW5zb3JcbiAgICAgICAgICBjb25zdCB0eXBlZEFycmF5Q29uc3RydWN0b3IgPSBOVU1FUklDX1RFTlNPUl9UWVBFX1RPX1RZUEVEQVJSQVlfTUFQLmdldChhcmcwKTtcbiAgICAgICAgICBpZiAodHlwZWRBcnJheUNvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHRlbnNvciB0eXBlOiAke2FyZzB9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcxKSkge1xuICAgICAgICAgICAgaWYgKGFyZzAgPT09ICdmbG9hdDE2JyAmJiB0eXBlZEFycmF5Q29uc3RydWN0b3IgPT09IFVpbnQxNkFycmF5KSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gbm8gRmxvYXQxNkFycmF5IHBvbHlmaWxsIGlzIHVzZWQsIHdlIGNhbm5vdCBjcmVhdGUgJ2Zsb2F0MTYnIHRlbnNvciBmcm9tIG51bWJlciBhcnJheS5cbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gVGhyb3cgZXJyb3IgaGVyZSBiZWNhdXNlIHdoZW4gdXNlciB0cnkgdG8gdXNlIG51bWJlciBhcnJheSBhcyBkYXRhLFxuICAgICAgICAgICAgICAvLyBlLmcuIG5ldyBUZW5zb3IoJ2Zsb2F0MTYnLCBbMSwgMiwgMywgNF0sIGRpbXMpKSwgaXQgd2lsbCBhY3R1YWxseSBjYWxsXG4gICAgICAgICAgICAgIC8vIFVpbnQxNkFycmF5LmZyb20oYXJnMSkgd2hpY2ggZ2VuZXJhdGVzIHdyb25nIGRhdGEuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnQ3JlYXRpbmcgYSBmbG9hdDE2IHRlbnNvciBmcm9tIG51bWJlciBhcnJheSBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgdXNlIFVpbnQxNkFycmF5IGFzIGRhdGEuJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFyZzAgPT09ICd1aW50NjQnIHx8IGFyZzAgPT09ICdpbnQ2NCcpIHtcbiAgICAgICAgICAgICAgLy8gdXNlICdhcyBhbnknIGhlcmUgYmVjYXVzZTpcbiAgICAgICAgICAgICAgLy8gMS4gVHlwZVNjcmlwdCdzIGNoZWNrIG9uIHR5cGUgb2YgJ0FycmF5LmlzQXJyYXkoKScgZG9lcyBub3Qgd29yayB3aXRoIHJlYWRvbmx5IGFycmF5cy5cbiAgICAgICAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTcwMDJcbiAgICAgICAgICAgICAgLy8gMi4gVHlwZVNjcmlwdCdzIGNoZWNrIG9uIHVuaW9uIHR5cGUgb2YgJyhCaWdJbnQ2NEFycmF5Q29uc3RydWN0b3J8QmlnVWludDY0QXJyYXlDb25zdHJ1Y3RvcikuZnJvbSgpJ1xuICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBhY2NlcHQgcGFyYW1ldGVyIG1hcEZuLlxuICAgICAgICAgICAgICAvLyAzLiBwYXJhbWV0ZXJzIG9mICdTdXBwb3J0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3JzLmZyb20oKScgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVtZW50IG9mIHRoZSB1bmlvblxuICAgICAgICAgICAgICAvLyB0eXBlLlxuXG4gICAgICAgICAgICAgIC8vIGFzc3VtZSAnYXJnMScgaXMgb2YgdHlwZSBcInJlYWRvbmx5IG51bWJlcltdfHJlYWRvbmx5IGJpZ2ludFtdXCIgaGVyZS5cblxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICBkYXRhID0gKHR5cGVkQXJyYXlDb25zdHJ1Y3RvciBhcyBhbnkpLmZyb20oYXJnMSwgQmlnSW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFzc3VtZSAnYXJnMScgaXMgb2YgdHlwZSBcInJlYWRvbmx5IG51bWJlcltdXCIgaGVyZS5cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgZGF0YSA9ICh0eXBlZEFycmF5Q29uc3RydWN0b3IgYXMgYW55KS5mcm9tKGFyZzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYXJnMSBpbnN0YW5jZW9mIHR5cGVkQXJyYXlDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgZGF0YSA9IGFyZzE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEEgJHt0eXBlfSB0ZW5zb3IncyBkYXRhIG11c3QgYmUgdHlwZSBvZiAke3R5cGVkQXJyYXlDb25zdHJ1Y3Rvcn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIE92ZXJyaWRlOiBjb25zdHJ1Y3RvcihkYXRhLCAuLi4pXG4gICAgICAgIC8vXG4gICAgICAgIG1heWJlRGltcyA9IGFyZzE7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZzApKSB7XG4gICAgICAgICAgLy8gb25seSBib29sZWFuW10gYW5kIHN0cmluZ1tdIGlzIHN1cHBvcnRlZFxuICAgICAgICAgIGlmIChhcmcwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVuc29yIHR5cGUgY2Fubm90IGJlIGluZmVycmVkIGZyb20gYW4gZW1wdHkgYXJyYXkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZpcnN0RWxlbWVudFR5cGUgPSB0eXBlb2YgYXJnMFswXTtcbiAgICAgICAgICBpZiAoZmlyc3RFbGVtZW50VHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnc3RyaW5nJztcbiAgICAgICAgICAgIGRhdGEgPSBhcmcwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmlyc3RFbGVtZW50VHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0eXBlID0gJ2Jvb2wnO1xuICAgICAgICAgICAgLy8gJ2FyZzAnIGlzIG9mIHR5cGUgJ2Jvb2xlYW5bXScuIFVpbnQ4QXJyYXkuZnJvbShib29sZWFuW10pIGFjdHVhbGx5IHdvcmtzLCBidXQgdHlwZXNjcmlwdCB0aGlua3MgdGhpcyBpc1xuICAgICAgICAgICAgLy8gd3JvbmcgdHlwZS4gV2UgdXNlICdhcyBhbnknIHRvIG1ha2UgaXQgaGFwcHkuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgZGF0YSA9IFVpbnQ4QXJyYXkuZnJvbShhcmcwIGFzIGFueVtdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBlbGVtZW50IHR5cGUgb2YgZGF0YSBhcnJheTogJHtmaXJzdEVsZW1lbnRUeXBlfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZ2V0IHRlbnNvciB0eXBlIGZyb20gVHlwZWRBcnJheVxuICAgICAgICAgIGNvbnN0IG1hcHBlZFR5cGUgPVxuICAgICAgICAgICAgICBOVU1FUklDX1RFTlNPUl9UWVBFREFSUkFZX1RPX1RZUEVfTUFQLmdldChhcmcwLmNvbnN0cnVjdG9yIGFzIFN1cHBvcnRlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMpO1xuICAgICAgICAgIGlmIChtYXBwZWRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHR5cGUgZm9yIHRlbnNvciBkYXRhOiAke2FyZzAuY29uc3RydWN0b3J9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0eXBlID0gbWFwcGVkVHlwZTtcbiAgICAgICAgICBkYXRhID0gYXJnMCBhcyBTdXBwb3J0ZWRUeXBlZEFycmF5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHR5cGUgYW5kIGRhdGEgaXMgcHJvY2Vzc2VkLCBub3cgcHJvY2Vzc2luZyBkaW1zXG4gICAgICBpZiAobWF5YmVEaW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gYXNzdW1lIDEtRCB0ZW5zb3IgaWYgZGltcyBvbWl0dGVkXG4gICAgICAgIG1heWJlRGltcyA9IFtkYXRhLmxlbmd0aF07XG4gICAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1heWJlRGltcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSB0ZW5zb3JcXCdzIGRpbXMgbXVzdCBiZSBhIG51bWJlciBhcnJheScpO1xuICAgICAgfVxuICAgICAgZGltcyA9IG1heWJlRGltcyBhcyByZWFkb25seSBudW1iZXJbXTtcblxuICAgICAgdGhpcy5jcHVEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZGF0YUxvY2F0aW9uID0gJ2NwdSc7XG4gICAgfVxuXG4gICAgLy8gcGVyZm9ybSBjaGVjayBvbiBkaW1zXG4gICAgY29uc3Qgc2l6ZSA9IGNhbGN1bGF0ZVNpemUoZGltcyk7XG4gICAgLy8gaWYgZGF0YSBpcyBvbiBDUFUsIGNoZWNrIHdoZXRoZXIgZGF0YSBsZW5ndGggbWF0Y2hlcyB0ZW5zb3Igc2l6ZVxuICAgIGlmICh0aGlzLmNwdURhdGEgJiYgc2l6ZSAhPT0gdGhpcy5jcHVEYXRhLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW5zb3IncyBzaXplKCR7c2l6ZX0pIGRvZXMgbm90IG1hdGNoIGRhdGEgbGVuZ3RoKCR7dGhpcy5jcHVEYXRhLmxlbmd0aH0pLmApO1xuICAgIH1cblxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5kaW1zID0gZGltcztcbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIGZhY3RvcnlcbiAgc3RhdGljIGFzeW5jIGZyb21JbWFnZShcbiAgICAgIGltYWdlOiBJbWFnZURhdGF8SFRNTEltYWdlRWxlbWVudHxJbWFnZUJpdG1hcHxzdHJpbmcsXG4gICAgICBvcHRpb25zPzogVGVuc29yRnJvbUltYWdlRGF0YU9wdGlvbnN8VGVuc29yRnJvbUltYWdlRWxlbWVudE9wdGlvbnN8VGVuc29yRnJvbUltYWdlQml0bWFwT3B0aW9uc3xcbiAgICAgIFRlbnNvckZyb21VcmxPcHRpb25zKTogUHJvbWlzZTxUZW5zb3JJbnRlcmZhY2U+IHtcbiAgICByZXR1cm4gdGVuc29yRnJvbUltYWdlKGltYWdlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGV4dHVyZTxUIGV4dGVuZHMgVGVuc29ySW50ZXJmYWNlLlRleHR1cmVEYXRhVHlwZXM+KFxuICAgICAgdGV4dHVyZTogVGVuc29yVGV4dHVyZVR5cGUsIG9wdGlvbnM6IFRlbnNvckZyb21UZXh0dXJlT3B0aW9uczxUPik6IFRlbnNvckludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRlbnNvckZyb21UZXh0dXJlKHRleHR1cmUsIG9wdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21HcHVCdWZmZXI8VCBleHRlbmRzIFRlbnNvckludGVyZmFjZS5HcHVCdWZmZXJEYXRhVHlwZXM+KFxuICAgICAgZ3B1QnVmZmVyOiBUZW5zb3JHcHVCdWZmZXJUeXBlLCBvcHRpb25zOiBUZW5zb3JGcm9tR3B1QnVmZmVyT3B0aW9uczxUPik6IFRlbnNvckludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRlbnNvckZyb21HcHVCdWZmZXIoZ3B1QnVmZmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGlubmVkQnVmZmVyPFQgZXh0ZW5kcyBUZW5zb3JJbnRlcmZhY2UuQ3B1UGlubmVkRGF0YVR5cGVzPihcbiAgICAgIHR5cGU6IFQsIGJ1ZmZlcjogVGVuc29ySW50ZXJmYWNlLkRhdGFUeXBlTWFwW1RdLCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3Ige1xuICAgIHJldHVybiB0ZW5zb3JGcm9tUGlubmVkQnVmZmVyKHR5cGUsIGJ1ZmZlciwgZGltcyk7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBjb252ZXJzaW9uc1xuICB0b0RhdGFVUkwob3B0aW9ucz86IFRlbnNvclRvRGF0YVVybE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZW5zb3JUb0RhdGFVUkwodGhpcywgb3B0aW9ucyk7XG4gIH1cblxuICB0b0ltYWdlRGF0YShvcHRpb25zPzogVGVuc29yVG9JbWFnZURhdGFPcHRpb25zKTogSW1hZ2VEYXRhIHtcbiAgICByZXR1cm4gdGVuc29yVG9JbWFnZURhdGEodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcHVibGljIGZpZWxkc1xuICByZWFkb25seSBkaW1zOiByZWFkb25seSBudW1iZXJbXTtcbiAgcmVhZG9ubHkgdHlwZTogVGVuc29yVHlwZTtcbiAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBwcml2YXRlIGZpZWxkc1xuXG4gIC8qKlxuICAgKiBzdG9yZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBkYXRhTG9jYXRpb246IFRlbnNvckRhdGFMb2NhdGlvbjtcblxuICAvKipcbiAgICogc3RvcmVzIHRoZSBkYXRhIG9uIENQVSwgaWYgbG9jYXRpb24gaXMgJ2NwdScgb3IgJ2NwdS1waW5uZWQnLiBvdGhlcndpc2UgZW1wdHkuXG4gICAqL1xuICBwcml2YXRlIGNwdURhdGE/OiBUZW5zb3JEYXRhVHlwZTtcblxuICAvKipcbiAgICogc3RvcmVzIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgd2hlbiBsb2NhdGlvbiBpcyAndGV4dHVyZScuIG90aGVyd2lzZSBlbXB0eS5cbiAgICovXG4gIHByaXZhdGUgZ3B1VGV4dHVyZURhdGE/OiBUZW5zb3JUZXh0dXJlVHlwZTtcblxuICAvKipcbiAgICogc3RvcmVzIHRoZSB1bmRlcmx5aW5nIEdQVSBidWZmZXIgd2hlbiBsb2NhdGlvbiBpcyAnZ3B1LWJ1ZmZlcicuIG90aGVyd2lzZSBlbXB0eS5cbiAgICovXG4gIHByaXZhdGUgZ3B1QnVmZmVyRGF0YT86IFRlbnNvckdwdUJ1ZmZlclR5cGU7XG5cbiAgLyoqXG4gICAqIHN0b3JlcyBhbiBvcHRpb25hbCBkb3dubG9hZGVyIGZ1bmN0aW9uIHRvIGRvd25sb2FkIGRhdGEgZnJvbSBHUFUgdG8gQ1BVLlxuICAgKi9cbiAgcHJpdmF0ZSBkb3dubG9hZGVyPygpOiBQcm9taXNlPFRlbnNvckRhdGFUeXBlPjtcblxuICAvKipcbiAgICogYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgZGF0YSBpcyBiZWluZyBkb3dubG9hZGVkIGZyb20gR1BVIHRvIENQVS5cbiAgICovXG4gIHByaXZhdGUgaXNEb3dubG9hZGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHN0b3JlcyBhbiBvcHRpb25hbCBkaXNwb3NlciBmdW5jdGlvbiB0byBkaXNwb3NlIHRoZSB1bmRlcmx5aW5nIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGRpc3Bvc2VyPygpOiB2b2lkO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBwcm9wZXJ0aWVzXG4gIGdldCBkYXRhKCk6IFRlbnNvckRhdGFUeXBlIHtcbiAgICB0aGlzLmVuc3VyZVZhbGlkKCk7XG4gICAgaWYgKCF0aGlzLmNwdURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnVGhlIGRhdGEgaXMgbm90IG9uIENQVS4gVXNlIGBnZXREYXRhKClgIHRvIGRvd25sb2FkIEdQVSBkYXRhIHRvIENQVSwgJyArXG4gICAgICAgICAgJ29yIHVzZSBgdGV4dHVyZWAgb3IgYGdwdUJ1ZmZlcmAgcHJvcGVydHkgdG8gYWNjZXNzIHRoZSBHUFUgZGF0YSBkaXJlY3RseS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3B1RGF0YTtcbiAgfVxuXG4gIGdldCBsb2NhdGlvbigpOiBUZW5zb3JEYXRhTG9jYXRpb24ge1xuICAgIHJldHVybiB0aGlzLmRhdGFMb2NhdGlvbjtcbiAgfVxuXG4gIGdldCB0ZXh0dXJlKCk6IFRlbnNvclRleHR1cmVUeXBlIHtcbiAgICB0aGlzLmVuc3VyZVZhbGlkKCk7XG4gICAgaWYgKCF0aGlzLmdwdVRleHR1cmVEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIGlzIG5vdCBzdG9yZWQgYXMgYSBXZWJHTCB0ZXh0dXJlLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ncHVUZXh0dXJlRGF0YTtcbiAgfVxuXG4gIGdldCBncHVCdWZmZXIoKTogVGVuc29yR3B1QnVmZmVyVHlwZSB7XG4gICAgdGhpcy5lbnN1cmVWYWxpZCgpO1xuICAgIGlmICghdGhpcy5ncHVCdWZmZXJEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkYXRhIGlzIG5vdCBzdG9yZWQgYXMgYSBXZWJHUFUgYnVmZmVyLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ncHVCdWZmZXJEYXRhO1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIG1ldGhvZHNcblxuICBhc3luYyBnZXREYXRhKHJlbGVhc2VEYXRhPzogYm9vbGVhbik6IFByb21pc2U8VGVuc29yRGF0YVR5cGU+IHtcbiAgICB0aGlzLmVuc3VyZVZhbGlkKCk7XG4gICAgc3dpdGNoICh0aGlzLmRhdGFMb2NhdGlvbikge1xuICAgICAgY2FzZSAnY3B1JzpcbiAgICAgIGNhc2UgJ2NwdS1waW5uZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgICAgY2FzZSAndGV4dHVyZSc6XG4gICAgICBjYXNlICdncHUtYnVmZmVyJzoge1xuICAgICAgICBpZiAoIXRoaXMuZG93bmxvYWRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGN1cnJlbnQgdGVuc29yIGlzIG5vdCBjcmVhdGVkIHdpdGggYSBzcGVjaWZpZWQgZGF0YSBkb3dubG9hZGVyLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRG93bmxvYWRpbmcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjdXJyZW50IHRlbnNvciBpcyBiZWluZyBkb3dubG9hZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5pc0Rvd25sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kb3dubG9hZGVyKCk7XG4gICAgICAgICAgdGhpcy5kb3dubG9hZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuZGF0YUxvY2F0aW9uID0gJ2NwdSc7XG4gICAgICAgICAgdGhpcy5jcHVEYXRhID0gZGF0YTtcblxuICAgICAgICAgIGlmIChyZWxlYXNlRGF0YSAmJiB0aGlzLmRpc3Bvc2VyKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VyKCk7XG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VyID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBkYXRhO1xuXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5pc0Rvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGdldCBkYXRhIGZyb20gbG9jYXRpb246ICR7dGhpcy5kYXRhTG9jYXRpb259YCk7XG4gICAgfVxuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rvd25sb2FkaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjdXJyZW50IHRlbnNvciBpcyBiZWluZyBkb3dubG9hZGVkLicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRpc3Bvc2VyKSB7XG4gICAgICB0aGlzLmRpc3Bvc2VyKCk7XG4gICAgICB0aGlzLmRpc3Bvc2VyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmNwdURhdGEgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ncHVUZXh0dXJlRGF0YSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmdwdUJ1ZmZlckRhdGEgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kb3dubG9hZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNEb3dubG9hZGluZyA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuZGF0YUxvY2F0aW9uID0gJ25vbmUnO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gdGVuc29yIHV0aWxpdGllc1xuICBwcml2YXRlIGVuc3VyZVZhbGlkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFMb2NhdGlvbiA9PT0gJ25vbmUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0ZW5zb3IgaXMgZGlzcG9zZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgcmVzaGFwZShkaW1zOiByZWFkb25seSBudW1iZXJbXSk6IFRlbnNvckludGVyZmFjZSB7XG4gICAgdGhpcy5lbnN1cmVWYWxpZCgpO1xuICAgIGlmICh0aGlzLmRvd25sb2FkZXIgfHwgdGhpcy5kaXNwb3Nlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcmVzaGFwZSBhIHRlbnNvciB0aGF0IG93bnMgR1BVIHJlc291cmNlLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGVuc29yUmVzaGFwZSh0aGlzLCBkaW1zKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG59XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7VGVuc29yRmFjdG9yeX0gZnJvbSAnLi90ZW5zb3ItZmFjdG9yeS5qcyc7XG5pbXBvcnQge1RlbnNvciBhcyBUZW5zb3JJbXBsfSBmcm9tICcuL3RlbnNvci1pbXBsLmpzJztcbmltcG9ydCB7VHlwZWRUZW5zb3JVdGlsc30gZnJvbSAnLi90ZW5zb3ItdXRpbHMuanMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkZWNsYXJlICovXG5cbi8qKlxuICogcmVwcmVzZW50IGEgYmFzaWMgdGVuc29yIHdpdGggc3BlY2lmaWVkIGRpbWVuc2lvbnMgYW5kIGRhdGEgdHlwZS5cbiAqL1xuaW50ZXJmYWNlIFR5cGVkVGVuc29yQmFzZTxUIGV4dGVuZHMgVGVuc29yLlR5cGU+IHtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgdGVuc29yLlxuICAgKi9cbiAgcmVhZG9ubHkgZGltczogcmVhZG9ubHkgbnVtYmVyW107XG4gIC8qKlxuICAgKiBHZXQgdGhlIGRhdGEgdHlwZSBvZiB0aGUgdGVuc29yLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogVDtcbiAgLyoqXG4gICAqIEdldCB0aGUgYnVmZmVyIGRhdGEgb2YgdGhlIHRlbnNvci5cbiAgICpcbiAgICogSWYgdGhlIGRhdGEgaXMgbm90IG9uIENQVSAoZWcuIGl0J3MgaW4gdGhlIGZvcm0gb2YgV2ViR0wgdGV4dHVyZSBvciBXZWJHUFUgYnVmZmVyKSwgdGhyb3cgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBkYXRhOiBUZW5zb3IuRGF0YVR5cGVNYXBbVF07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb246IFRlbnNvci5EYXRhTG9jYXRpb247XG4gIC8qKlxuICAgKiBHZXQgdGhlIFdlYkdMIHRleHR1cmUgdGhhdCBob2xkcyB0aGUgdGVuc29yIGRhdGEuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhIGlzIG5vdCBvbiBHUFUgYXMgV2ViR0wgdGV4dHVyZSwgdGhyb3cgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSB0ZXh0dXJlOiBUZW5zb3IuVGV4dHVyZVR5cGU7XG4gIC8qKlxuICAgKiBHZXQgdGhlIFdlYkdQVSBidWZmZXIgdGhhdCBob2xkcyB0aGUgdGVuc29yIGRhdGEuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhIGlzIG5vdCBvbiBHUFUgYXMgV2ViR1BVIGJ1ZmZlciwgdGhyb3cgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBncHVCdWZmZXI6IFRlbnNvci5HcHVCdWZmZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJ1ZmZlciBkYXRhIG9mIHRoZSB0ZW5zb3IuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhIGlzIG9uIENQVSwgcmV0dXJucyB0aGUgZGF0YSBpbW1lZGlhdGVseS5cbiAgICogSWYgdGhlIGRhdGEgaXMgb24gR1BVLCBkb3dubG9hZHMgdGhlIGRhdGEgYW5kIHJldHVybnMgdGhlIHByb21pc2UuXG4gICAqXG4gICAqIEBwYXJhbSByZWxlYXNlRGF0YSAtIHdoZXRoZXIgcmVsZWFzZSB0aGUgZGF0YSBvbiBHUFUuIElnbm9yZSBpZiBkYXRhIGlzIGFscmVhZHkgb24gQ1BVLlxuICAgKi9cbiAgZ2V0RGF0YShyZWxlYXNlRGF0YT86IGJvb2xlYW4pOiBQcm9taXNlPFRlbnNvci5EYXRhVHlwZU1hcFtUXT47XG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIHRlbnNvciBkYXRhLlxuICAgKlxuICAgKiBJZiB0aGUgZGF0YSBpcyBvbiBDUFUsIHJlbW92ZSBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIGRhdGEuXG4gICAqIElmIHRoZSBkYXRhIGlzIG9uIEdQVSwgcmVsZWFzZSB0aGUgZGF0YSBvbiBHUFUuXG4gICAqXG4gICAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIHRlbnNvciBpcyBjb25zaWRlcmVkIG5vIGxvbmdlciB2YWxpZC4gSXRzIGxvY2F0aW9uIHdpbGwgYmUgc2V0IHRvICdub25lJy5cbiAgICovXG4gIGRpc3Bvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIFRlbnNvciB7XG4gIGludGVyZmFjZSBEYXRhVHlwZU1hcCB7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDg6IEludDhBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIGludDMyOiBJbnQzMkFycmF5O1xuICAgIGludDY0OiBCaWdJbnQ2NEFycmF5O1xuICAgIHN0cmluZzogc3RyaW5nW107XG4gICAgYm9vbDogVWludDhBcnJheTtcbiAgICBmbG9hdDE2OiBVaW50MTZBcnJheTsgIC8vIEtlZXAgdXNpbmcgVWludDE2QXJyYXkgdW50aWwgd2UgaGF2ZSBhIGNvbmNyZXRlIHNvbHV0aW9uIGZvciBmbG9hdCAxNi5cbiAgICBmbG9hdDY0OiBGbG9hdDY0QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICB1aW50NjQ6IEJpZ1VpbnQ2NEFycmF5O1xuICAgIC8vIGNvbXBsZXg2NDogbmV2ZXI7XG4gICAgLy8gY29tcGxleDEyODogbmV2ZXI7XG4gICAgLy8gYmZsb2F0MTY6IG5ldmVyO1xuICB9XG5cbiAgaW50ZXJmYWNlIEVsZW1lbnRUeXBlTWFwIHtcbiAgICBmbG9hdDMyOiBudW1iZXI7XG4gICAgdWludDg6IG51bWJlcjtcbiAgICBpbnQ4OiBudW1iZXI7XG4gICAgdWludDE2OiBudW1iZXI7XG4gICAgaW50MTY6IG51bWJlcjtcbiAgICBpbnQzMjogbnVtYmVyO1xuICAgIGludDY0OiBiaWdpbnQ7XG4gICAgc3RyaW5nOiBzdHJpbmc7XG4gICAgYm9vbDogYm9vbGVhbjtcbiAgICBmbG9hdDE2OiBudW1iZXI7ICAvLyBLZWVwIHVzaW5nIFVpbnQxNkFycmF5IHVudGlsIHdlIGhhdmUgYSBjb25jcmV0ZSBzb2x1dGlvbiBmb3IgZmxvYXQgMTYuXG4gICAgZmxvYXQ2NDogbnVtYmVyO1xuICAgIHVpbnQzMjogbnVtYmVyO1xuICAgIHVpbnQ2NDogYmlnaW50O1xuICAgIC8vIGNvbXBsZXg2NDogbmV2ZXI7XG4gICAgLy8gY29tcGxleDEyODogbmV2ZXI7XG4gICAgLy8gYmZsb2F0MTY6IG5ldmVyO1xuICB9XG5cbiAgdHlwZSBEYXRhVHlwZSA9IERhdGFUeXBlTWFwW1R5cGVdO1xuICB0eXBlIEVsZW1lbnRUeXBlID0gRWxlbWVudFR5cGVNYXBbVHlwZV07XG5cbiAgLyoqXG4gICAqIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGZvciBjb25zdHJ1Y3RpbmcgYSB0ZW5zb3IgZnJvbSBhIHBpbm5lZCBDUFUgYnVmZmVyXG4gICAqL1xuICBleHBvcnQgdHlwZSBDcHVQaW5uZWREYXRhVHlwZXMgPSBFeGNsdWRlPFRlbnNvci5UeXBlLCAnc3RyaW5nJz47XG5cbiAgLyoqXG4gICAqIHR5cGUgYWxpYXMgZm9yIFdlYkdMIHRleHR1cmVcbiAgICovXG4gIGV4cG9ydCB0eXBlIFRleHR1cmVUeXBlID0gV2ViR0xUZXh0dXJlO1xuXG4gIC8qKlxuICAgKiBzdXBwb3J0ZWQgZGF0YSB0eXBlcyBmb3IgY29uc3RydWN0aW5nIGEgdGVuc29yIGZyb20gYSBXZWJHTCB0ZXh0dXJlXG4gICAqL1xuICBleHBvcnQgdHlwZSBUZXh0dXJlRGF0YVR5cGVzID0gJ2Zsb2F0MzInO1xuXG4gIC8qKlxuICAgKiB0eXBlIGFsaWFzIGZvciBXZWJHUFUgYnVmZmVyXG4gICAqXG4gICAqIFRoZSByZWFzb24gd2h5IHdlIGRvbid0IHVzZSB0eXBlIFwiR1BVQnVmZmVyXCIgZGVmaW5lZCBpbiB3ZWJncHUuZC50cyBmcm9tIEB3ZWJncHUvdHlwZXMgaXMgYmVjYXVzZSBcIkB3ZWJncHUvdHlwZXNcIlxuICAgKiByZXF1aXJlcyBcIkB0eXBlcy9kb20td2ViY29kZWNzXCIgYXMgcGVlciBkZXBlbmRlbmN5IHdoZW4gdXNpbmcgVHlwZVNjcmlwdCA8IHY1LjEgYW5kIGl0cyB2ZXJzaW9uIG5lZWQgdG8gYmUgY2hvc2VuXG4gICAqIGNhcmVmdWxseSBhY2NvcmRpbmcgdG8gdGhlIFR5cGVTY3JpcHQgdmVyc2lvbiBiZWluZyB1c2VkLiBUaGlzIG1lYW5zIHNvIGZhciB0aGVyZSBpcyBub3QgYSB3YXkgdG8ga2VlcCBldmVyeVxuICAgKiBUeXBlU2NyaXB0IHZlcnNpb24gaGFwcHkuIEl0IHR1cm5zIG91dCB0aGF0IHdlIHdpbGwgZWFzaWx5IGJyb2tlIHVzZXJzIG9uIHNvbWUgVHlwZVNjcmlwdCB2ZXJzaW9uLlxuICAgKlxuICAgKiBmb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3B1d2ViL3R5cGVzL2lzc3Vlcy8xMjdcbiAgICovXG4gIGV4cG9ydCB0eXBlIEdwdUJ1ZmZlclR5cGUgPSB7c2l6ZTogbnVtYmVyOyBtYXBTdGF0ZTogJ3VubWFwcGVkJyB8ICdwZW5kaW5nJyB8ICdtYXBwZWQnfTtcblxuICAvKipcbiAgICogc3VwcG9ydGVkIGRhdGEgdHlwZXMgZm9yIGNvbnN0cnVjdGluZyBhIHRlbnNvciBmcm9tIGEgV2ViR1BVIGJ1ZmZlclxuICAgKi9cbiAgZXhwb3J0IHR5cGUgR3B1QnVmZmVyRGF0YVR5cGVzID0gJ2Zsb2F0MzInfCdmbG9hdDE2J3wnaW50MzInfCdpbnQ2NCd8J3VpbnQzMid8J3VpbnQ4J3wnYm9vbCc7XG5cbiAgLyoqXG4gICAqIHJlcHJlc2VudCB3aGVyZSB0aGUgdGVuc29yIGRhdGEgaXMgc3RvcmVkXG4gICAqL1xuICBleHBvcnQgdHlwZSBEYXRhTG9jYXRpb24gPSAnbm9uZSd8J2NwdSd8J2NwdS1waW5uZWQnfCd0ZXh0dXJlJ3wnZ3B1LWJ1ZmZlcic7XG5cbiAgLyoqXG4gICAqIHJlcHJlc2VudCB0aGUgZGF0YSB0eXBlIG9mIGEgdGVuc29yXG4gICAqL1xuICBleHBvcnQgdHlwZSBUeXBlID0ga2V5b2YgRGF0YVR5cGVNYXA7XG59XG5cbi8qKlxuICogUmVwcmVzZW50IG11bHRpLWRpbWVuc2lvbmFsIGFycmF5cyB0byBmZWVkIHRvIG9yIGZldGNoIGZyb20gbW9kZWwgaW5mZXJlbmNpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZWRUZW5zb3I8VCBleHRlbmRzIFRlbnNvci5UeXBlPiBleHRlbmRzIFR5cGVkVGVuc29yQmFzZTxUPiwgVHlwZWRUZW5zb3JVdGlsczxUPiB7fVxuLyoqXG4gKiBSZXByZXNlbnQgbXVsdGktZGltZW5zaW9uYWwgYXJyYXlzIHRvIGZlZWQgdG8gb3IgZmV0Y2ggZnJvbSBtb2RlbCBpbmZlcmVuY2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5zb3IgZXh0ZW5kcyBUeXBlZFRlbnNvckJhc2U8VGVuc29yLlR5cGU+LCBUeXBlZFRlbnNvclV0aWxzPFRlbnNvci5UeXBlPiB7fVxuXG4vKipcbiAqIHR5cGUgVGVuc29yQ29uc3RydWN0b3IgZGVmaW5lcyB0aGUgY29uc3RydWN0b3JzIG9mICdUZW5zb3InIHRvIGNyZWF0ZSBDUFUgdGVuc29yIGluc3RhbmNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JDb25zdHJ1Y3RvciBleHRlbmRzIFRlbnNvckZhY3Rvcnkge1xuICAvLyAjcmVnaW9uIENQVSB0ZW5zb3IgLSBzcGVjaWZ5IGVsZW1lbnQgdHlwZVxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHN0cmluZyB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIHR5cGUsIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gU3BlY2lmeSB0aGUgZWxlbWVudCB0eXBlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcodHlwZTogJ3N0cmluZycsIGRhdGE6IFRlbnNvci5EYXRhVHlwZU1hcFsnc3RyaW5nJ118cmVhZG9ubHkgc3RyaW5nW10sXG4gICAgICBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnc3RyaW5nJz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBib29sIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gdHlwZSwgZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBTcGVjaWZ5IHRoZSBlbGVtZW50IHR5cGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyh0eXBlOiAnYm9vbCcsIGRhdGE6IFRlbnNvci5EYXRhVHlwZU1hcFsnYm9vbCddfHJlYWRvbmx5IGJvb2xlYW5bXSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J2Jvb2wnPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IDY0LWJpdCBpbnRlZ2VyIHR5cGVkIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gdHlwZSwgZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBTcGVjaWZ5IHRoZSBlbGVtZW50IHR5cGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldzxUIGV4dGVuZHMgJ3VpbnQ2NCd8J2ludDY0Jz4oXG4gICAgICB0eXBlOiBULCBkYXRhOiBUZW5zb3IuRGF0YVR5cGVNYXBbVF18cmVhZG9ubHkgYmlnaW50W118cmVhZG9ubHkgbnVtYmVyW10sXG4gICAgICBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjxUPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IG51bWVyaWMgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiB0eXBlLCBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSAtIFNwZWNpZnkgdGhlIGVsZW1lbnQgdHlwZS5cbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3PFQgZXh0ZW5kcyBFeGNsdWRlPFRlbnNvci5UeXBlLCAnc3RyaW5nJ3wnYm9vbCd8J3VpbnQ2NCd8J2ludDY0Jz4+KFxuICAgICAgdHlwZTogVCwgZGF0YTogVGVuc29yLkRhdGFUeXBlTWFwW1RdfHJlYWRvbmx5IG51bWJlcltdLCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjxUPjtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gQ1BVIHRlbnNvciAtIGluZmVyIGVsZW1lbnQgdHlwZXNcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGZsb2F0MzIgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogRmxvYXQzMkFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnZmxvYXQzMic+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgaW50OCB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBJbnQ4QXJyYXksIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPCdpbnQ4Jz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB1aW50OCB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBVaW50OEFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwndWludDgnPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHVpbnQxNiB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBVaW50MTZBcnJheSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J3VpbnQxNic+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgaW50MTYgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogSW50MTZBcnJheSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J2ludDE2Jz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBpbnQzMiB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBJbnQzMkFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnaW50MzInPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGludDY0IHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IEJpZ0ludDY0QXJyYXksIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPCdpbnQ2NCc+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgc3RyaW5nIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IHJlYWRvbmx5IHN0cmluZ1tdLCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnc3RyaW5nJz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBib29sIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IHJlYWRvbmx5IGJvb2xlYW5bXSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J2Jvb2wnPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGZsb2F0NjQgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogRmxvYXQ2NEFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnZmxvYXQ2NCc+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgdWludDMyIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IFVpbnQzMkFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwndWludDMyJz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB1aW50NjQgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogQmlnVWludDY0QXJyYXksIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPCd1aW50NjQnPjtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBDUFUgdGVuc29yIC0gZmFsbCBiYWNrIHRvIG5vbi1nZW5lcmljIHRlbnNvciB0eXBlIGRlY2xhcmF0aW9uXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIHR5cGUsIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gU3BlY2lmeSB0aGUgZWxlbWVudCB0eXBlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcodHlwZTogVGVuc29yLlR5cGUsIGRhdGE6IFRlbnNvci5EYXRhVHlwZXxyZWFkb25seSBudW1iZXJbXXxyZWFkb25seSBzdHJpbmdbXXxyZWFkb25seSBiaWdpbnRbXXxyZWFkb25seSBib29sZWFuW10sXG4gICAgICBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3I7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBUZW5zb3IuRGF0YVR5cGUsIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFRlbnNvcjtcbiAgLy8gI2VuZHJlZ2lvblxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgVGVuc29yID0gVGVuc29ySW1wbCBhcyBUZW5zb3JDb25zdHJ1Y3RvcjtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52LWltcGwuanMnO1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNvbnN0IFRSQUNFID0gKGRldmljZVR5cGU6IHN0cmluZywgbGFiZWw6IHN0cmluZykgPT4ge1xuICBpZiAodHlwZW9mIGVudi50cmFjZSA9PT0gJ3VuZGVmaW5lZCcgPyAhZW52Lndhc20udHJhY2UgOiAhZW52LnRyYWNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUudGltZVN0YW1wKGAke2RldmljZVR5cGV9OjpPUlQ6OiR7bGFiZWx9YCk7XG59O1xuXG5jb25zdCBUUkFDRV9GVU5DID0gKG1zZzogc3RyaW5nLCBleHRyYU1zZz86IHN0cmluZykgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrPy5zcGxpdCgvXFxyXFxufFxccnxcXG4vZykgfHwgW107XG4gIGxldCBoYXNUcmFjZUZ1bmMgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgIGlmIChoYXNUcmFjZUZ1bmMgJiYgIXN0YWNrW2ldLmluY2x1ZGVzKCdUUkFDRV9GVU5DJykpIHtcbiAgICAgIGxldCBsYWJlbCA9IGBGVU5DXyR7bXNnfTo6JHtzdGFja1tpXS50cmltKCkuc3BsaXQoJyAnKVsxXX1gO1xuICAgICAgaWYgKGV4dHJhTXNnKSB7XG4gICAgICAgIGxhYmVsICs9IGA6OiR7ZXh0cmFNc2d9YDtcbiAgICAgIH1cbiAgICAgIFRSQUNFKCdDUFUnLCBsYWJlbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdGFja1tpXS5pbmNsdWRlcygnVFJBQ0VfRlVOQycpKSB7XG4gICAgICBoYXNUcmFjZUZ1bmMgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRV9GVU5DX0JFR0lOID0gKGV4dHJhTXNnPzogc3RyaW5nKSA9PiB7XG4gIGlmICh0eXBlb2YgZW52LnRyYWNlID09PSAndW5kZWZpbmVkJyA/ICFlbnYud2FzbS50cmFjZSA6ICFlbnYudHJhY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgVFJBQ0VfRlVOQygnQkVHSU4nLCBleHRyYU1zZyk7XG59O1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNvbnN0IFRSQUNFX0ZVTkNfRU5EID0gKGV4dHJhTXNnPzogc3RyaW5nKSA9PiB7XG4gIGlmICh0eXBlb2YgZW52LnRyYWNlID09PSAndW5kZWZpbmVkJyA/ICFlbnYud2FzbS50cmFjZSA6ICFlbnYudHJhY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgVFJBQ0VfRlVOQygnRU5EJywgZXh0cmFNc2cpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtyZXNvbHZlQmFja2VuZEFuZEV4ZWN1dGlvblByb3ZpZGVyc30gZnJvbSAnLi9iYWNrZW5kLWltcGwuanMnO1xuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcn0gZnJvbSAnLi9iYWNrZW5kLmpzJztcbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbiBhcyBJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlfSBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLmpzJztcbmltcG9ydCB7T25ueFZhbHVlfSBmcm9tICcuL29ubngtdmFsdWUuanMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yLmpzJztcbmltcG9ydCB7VFJBQ0VfRlVOQ19CRUdJTiwgVFJBQ0VfRlVOQ19FTkR9IGZyb20gJy4vdHJhY2UuanMnO1xuXG50eXBlIFNlc3Npb25PcHRpb25zID0gSW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZS5TZXNzaW9uT3B0aW9ucztcbnR5cGUgUnVuT3B0aW9ucyA9IEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2UuUnVuT3B0aW9ucztcbnR5cGUgRmVlZHNUeXBlID0gSW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZS5GZWVkc1R5cGU7XG50eXBlIEZldGNoZXNUeXBlID0gSW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZS5GZXRjaGVzVHlwZTtcbnR5cGUgUmV0dXJuVHlwZSA9IEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2UuUmV0dXJuVHlwZTtcblxuZXhwb3J0IGNsYXNzIEluZmVyZW5jZVNlc3Npb24gaW1wbGVtZW50cyBJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlIHtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihoYW5kbGVyOiBJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcikge1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cbiAgcnVuKGZlZWRzOiBGZWVkc1R5cGUsIG9wdGlvbnM/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSZXR1cm5UeXBlPjtcbiAgcnVuKGZlZWRzOiBGZWVkc1R5cGUsIGZldGNoZXM6IEZldGNoZXNUeXBlLCBvcHRpb25zPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UmV0dXJuVHlwZT47XG4gIGFzeW5jIHJ1bihmZWVkczogRmVlZHNUeXBlLCBhcmcxPzogRmV0Y2hlc1R5cGV8UnVuT3B0aW9ucywgYXJnMj86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJldHVyblR5cGU+IHtcbiAgICBUUkFDRV9GVU5DX0JFR0lOKCk7XG4gICAgY29uc3QgZmV0Y2hlczoge1tuYW1lOiBzdHJpbmddOiBPbm54VmFsdWV8bnVsbH0gPSB7fTtcbiAgICBsZXQgb3B0aW9uczogUnVuT3B0aW9ucyA9IHt9O1xuICAgIC8vIGNoZWNrIGlucHV0c1xuICAgIGlmICh0eXBlb2YgZmVlZHMgIT09ICdvYmplY3QnIHx8IGZlZWRzID09PSBudWxsIHx8IGZlZWRzIGluc3RhbmNlb2YgVGVuc29yIHx8IEFycmF5LmlzQXJyYXkoZmVlZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdcXCdmZWVkc1xcJyBtdXN0IGJlIGFuIG9iamVjdCB0aGF0IHVzZSBpbnB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgYXMgY29ycmVzcG9uZGluZyB2YWx1ZXMuJyk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmV0Y2hlc0VtcHR5ID0gdHJ1ZTtcbiAgICAvLyBkZXRlcm1pbmUgd2hpY2ggb3ZlcnJpZGUgaXMgYmVpbmcgdXNlZFxuICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChhcmcxID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgYXJndW1lbnRbMV06IGNhbm5vdCBiZSBudWxsLicpO1xuICAgICAgfVxuICAgICAgaWYgKGFyZzEgaW5zdGFuY2VvZiBUZW5zb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnZmV0Y2hlc1xcJyBjYW5ub3QgYmUgYSBUZW5zb3InKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnMSkpIHtcbiAgICAgICAgaWYgKGFyZzEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnZmV0Y2hlc1xcJyBjYW5ub3QgYmUgYW4gZW1wdHkgYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaXNGZXRjaGVzRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgLy8gb3V0cHV0IG5hbWVzXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBhcmcxKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnZmV0Y2hlc1xcJyBtdXN0IGJlIGEgc3RyaW5nIGFycmF5IG9yIGFuIG9iamVjdC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMub3V0cHV0TmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGAnZmV0Y2hlcycgY29udGFpbnMgaW52YWxpZCBvdXRwdXQgbmFtZTogJHtuYW1lfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmV0Y2hlc1tuYW1lXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdvYmplY3QnICYmIGFyZzIgIT09IG51bGwpIHtcbiAgICAgICAgICBvcHRpb25zID0gYXJnMjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcXCdvcHRpb25zXFwnIG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZWNpZGUgd2hldGhlciBhcmcxIGlzIGZldGNoZXMgb3Igb3B0aW9uc1xuICAgICAgICAvLyBpZiBhbnkgb3V0cHV0IG5hbWUgaXMgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIHZhbGlkIE9ubnhWYWx1ZSwgd2UgY29uc2lkZXIgaXQgZmV0Y2hlc1xuICAgICAgICBsZXQgaXNGZXRjaGVzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGFyZzFLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJnMSk7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLm91dHB1dE5hbWVzKSB7XG4gICAgICAgICAgaWYgKGFyZzFLZXlzLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gKGFyZzEgYXMgSW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZS5OdWxsYWJsZU9ubnhWYWx1ZU1hcFR5cGUpW25hbWVdO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwgfHwgdiBpbnN0YW5jZW9mIFRlbnNvcikge1xuICAgICAgICAgICAgICBpc0ZldGNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgICBpc0ZldGNoZXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICBmZXRjaGVzW25hbWVdID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGZXRjaGVzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhcmcyID09PSAnb2JqZWN0JyAmJiBhcmcyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gYXJnMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnb3B0aW9uc1xcJyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucyA9IGFyZzEgYXMgUnVuT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZzEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIGFyZ3VtZW50WzFdOiBtdXN0IGJlIFxcJ2ZldGNoZXNcXCcgb3IgXFwnb3B0aW9uc1xcJy4nKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBhbGwgaW5wdXRzIGFyZSBpbiBmZWVkXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHRoaXMuaW5wdXROYW1lcykge1xuICAgICAgaWYgKHR5cGVvZiBmZWVkc1tuYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnB1dCAnJHtuYW1lfScgaXMgbWlzc2luZyBpbiAnZmVlZHMnLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIG5vIGZldGNoZXMgaXMgc3BlY2lmaWVkLCB3ZSB1c2UgdGhlIGZ1bGwgb3V0cHV0IG5hbWVzIGxpc3RcbiAgICBpZiAoaXNGZXRjaGVzRW1wdHkpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLm91dHB1dE5hbWVzKSB7XG4gICAgICAgIGZldGNoZXNbbmFtZV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZlZWRzLCBmZXRjaGVzIGFuZCBvcHRpb25zIGFyZSBwcmVwYXJlZFxuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuaGFuZGxlci5ydW4oZmVlZHMsIGZldGNoZXMsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHJldHVyblZhbHVlOiB7W25hbWU6IHN0cmluZ106IE9ubnhWYWx1ZX0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiByZXN1bHRzKSB7XG4gICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocmVzdWx0cywga2V5KSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzW2tleV07XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBUZW5zb3IpIHtcbiAgICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVyblZhbHVlW2tleV0gPSBuZXcgVGVuc29yKHJlc3VsdC50eXBlLCByZXN1bHQuZGF0YSwgcmVzdWx0LmRpbXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFRSQUNFX0ZVTkNfRU5EKCk7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgYXN5bmMgcmVsZWFzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUocGF0aDogc3RyaW5nLCBvcHRpb25zPzogU2Vzc2lvbk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2U+O1xuICBzdGF0aWMgY3JlYXRlKGJ1ZmZlcjogQXJyYXlCdWZmZXJMaWtlLCBvcHRpb25zPzogU2Vzc2lvbk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2U+O1xuICBzdGF0aWMgY3JlYXRlKGJ1ZmZlcjogQXJyYXlCdWZmZXJMaWtlLCBieXRlT2Zmc2V0OiBudW1iZXIsIGJ5dGVMZW5ndGg/OiBudW1iZXIsIG9wdGlvbnM/OiBTZXNzaW9uT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2U+O1xuICBzdGF0aWMgY3JlYXRlKGJ1ZmZlcjogVWludDhBcnJheSwgb3B0aW9ucz86IFNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlPjtcbiAgc3RhdGljIGFzeW5jIGNyZWF0ZShcbiAgICAgIGFyZzA6IHN0cmluZ3xBcnJheUJ1ZmZlckxpa2V8VWludDhBcnJheSwgYXJnMT86IFNlc3Npb25PcHRpb25zfG51bWJlciwgYXJnMj86IG51bWJlcixcbiAgICAgIGFyZzM/OiBTZXNzaW9uT3B0aW9ucyk6IFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZT4ge1xuICAgIFRSQUNFX0ZVTkNfQkVHSU4oKTtcbiAgICAvLyBlaXRoZXIgbG9hZCBmcm9tIGEgZmlsZSBvciBidWZmZXJcbiAgICBsZXQgZmlsZVBhdGhPclVpbnQ4QXJyYXk6IHN0cmluZ3xVaW50OEFycmF5O1xuICAgIGxldCBvcHRpb25zOiBTZXNzaW9uT3B0aW9ucyA9IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBhcmcwID09PSAnc3RyaW5nJykge1xuICAgICAgZmlsZVBhdGhPclVpbnQ4QXJyYXkgPSBhcmcwO1xuICAgICAgaWYgKHR5cGVvZiBhcmcxID09PSAnb2JqZWN0JyAmJiBhcmcxICE9PSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMgPSBhcmcxO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnb3B0aW9uc1xcJyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZzAgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICBmaWxlUGF0aE9yVWludDhBcnJheSA9IGFyZzA7XG4gICAgICBpZiAodHlwZW9mIGFyZzEgPT09ICdvYmplY3QnICYmIGFyZzEgIT09IG51bGwpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFyZzE7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcxICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcXCdvcHRpb25zXFwnIG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGFyZzAgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgICAgICAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBhcmcwIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIpKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBhcmcwO1xuICAgICAgbGV0IGJ5dGVPZmZzZXQgPSAwO1xuICAgICAgbGV0IGJ5dGVMZW5ndGggPSBhcmcwLmJ5dGVMZW5ndGg7XG4gICAgICBpZiAodHlwZW9mIGFyZzEgPT09ICdvYmplY3QnICYmIGFyZzEgIT09IG51bGwpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFyZzE7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcxID09PSAnbnVtYmVyJykge1xuICAgICAgICBieXRlT2Zmc2V0ID0gYXJnMTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihieXRlT2Zmc2V0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdieXRlT2Zmc2V0XFwnIG11c3QgYmUgYW4gaW50ZWdlci4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYnl0ZU9mZnNldCA+PSBidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGAnYnl0ZU9mZnNldCcgaXMgb3V0IG9mIHJhbmdlIFswLCAke2J1ZmZlci5ieXRlTGVuZ3RofSkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgYnl0ZUxlbmd0aCA9IGFyZzAuYnl0ZUxlbmd0aCAtIGJ5dGVPZmZzZXQ7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gYXJnMjtcbiAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGJ5dGVMZW5ndGgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnYnl0ZUxlbmd0aFxcJyBtdXN0IGJlIGFuIGludGVnZXIuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDw9IDAgfHwgYnl0ZU9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCdieXRlTGVuZ3RoJyBpcyBvdXQgb2YgcmFuZ2UgKDAsICR7YnVmZmVyLmJ5dGVMZW5ndGggLSBieXRlT2Zmc2V0fV0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgYXJnMyA9PT0gJ29iamVjdCcgJiYgYXJnMyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGFyZzM7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ29wdGlvbnNcXCcgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2J5dGVMZW5ndGhcXCcgbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnb3B0aW9uc1xcJyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICAgIH1cbiAgICAgIGZpbGVQYXRoT3JVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCBhcmd1bWVudFswXTogbXVzdCBiZSBcXCdwYXRoXFwnIG9yIFxcJ2J1ZmZlclxcJy4nKTtcbiAgICB9XG5cbiAgICAvLyByZXNvbHZlIGJhY2tlbmQsIHVwZGF0ZSBzZXNzaW9uIG9wdGlvbnMgd2l0aCB2YWxpZGF0ZWQgRVBzLCBhbmQgY3JlYXRlIHNlc3Npb24gaGFuZGxlclxuICAgIGNvbnN0IFtiYWNrZW5kLCBvcHRpb25zV2l0aFZhbGlkYXRlZEVQc10gPSBhd2FpdCByZXNvbHZlQmFja2VuZEFuZEV4ZWN1dGlvblByb3ZpZGVycyhvcHRpb25zKTtcbiAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgYmFja2VuZC5jcmVhdGVJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcihmaWxlUGF0aE9yVWludDhBcnJheSwgb3B0aW9uc1dpdGhWYWxpZGF0ZWRFUHMpO1xuICAgIFRSQUNFX0ZVTkNfRU5EKCk7XG4gICAgcmV0dXJuIG5ldyBJbmZlcmVuY2VTZXNzaW9uKGhhbmRsZXIpO1xuICB9XG5cbiAgc3RhcnRQcm9maWxpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVyLnN0YXJ0UHJvZmlsaW5nKCk7XG4gIH1cbiAgZW5kUHJvZmlsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlci5lbmRQcm9maWxpbmcoKTtcbiAgfVxuXG4gIGdldCBpbnB1dE5hbWVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmlucHV0TmFtZXM7XG4gIH1cbiAgZ2V0IG91dHB1dE5hbWVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm91dHB1dE5hbWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyOiBJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcjtcbn1cbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9uIGFzIEluZmVyZW5jZVNlc3Npb25JbXBsfSBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLWltcGwuanMnO1xuaW1wb3J0IHtPbm54TW9kZWxPcHRpb25zfSBmcm9tICcuL29ubngtbW9kZWwuanMnO1xuaW1wb3J0IHtPbm54VmFsdWUsIE9ubnhWYWx1ZURhdGFMb2NhdGlvbn0gZnJvbSAnLi9vbm54LXZhbHVlLmpzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZGVjbGFyZSAqL1xuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgSW5mZXJlbmNlU2Vzc2lvbiB7XG4gIC8vICNyZWdpb24gaW5wdXQvb3V0cHV0IHR5cGVzXG5cbiAgdHlwZSBPbm54VmFsdWVNYXBUeXBlID0ge3JlYWRvbmx5IFtuYW1lOiBzdHJpbmddOiBPbm54VmFsdWV9O1xuICB0eXBlIE51bGxhYmxlT25ueFZhbHVlTWFwVHlwZSA9IHtyZWFkb25seSBbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlIHwgbnVsbH07XG5cbiAgLyoqXG4gICAqIEEgZmVlZHMgKG1vZGVsIGlucHV0cykgaXMgYW4gb2JqZWN0IHRoYXQgdXNlcyBpbnB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgYXMgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAqL1xuICB0eXBlIEZlZWRzVHlwZSA9IE9ubnhWYWx1ZU1hcFR5cGU7XG5cbiAgLyoqXG4gICAqIEEgZmV0Y2hlcyAobW9kZWwgb3V0cHV0cykgY291bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAqXG4gICAqIC0gT21pdHRlZC4gVXNlIG1vZGVsJ3Mgb3V0cHV0IG5hbWVzIGRlZmluaXRpb24uXG4gICAqIC0gQW4gYXJyYXkgb2Ygc3RyaW5nIGluZGljYXRpbmcgdGhlIG91dHB1dCBuYW1lcy5cbiAgICogLSBBbiBvYmplY3QgdGhhdCB1c2Ugb3V0cHV0IG5hbWVzIGFzIGtleXMgYW5kIE9ubnhWYWx1ZSBvciBudWxsIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKlxuICAgKiBAcmVtYXJrXG4gICAqIGRpZmZlcmVudCBmcm9tIGlucHV0IGFyZ3VtZW50LCBpbiBvdXRwdXQsIE9ubnhWYWx1ZSBpcyBvcHRpb25hbC4gSWYgYW4gT25ueFZhbHVlIGlzIHByZXNlbnQgaXQgd2lsbCBiZVxuICAgKiB1c2VkIGFzIGEgcHJlLWFsbG9jYXRlZCB2YWx1ZSBieSB0aGUgaW5mZXJlbmNlIGVuZ2luZTsgaWYgb21pdHRlZCwgaW5mZXJlbmNlIGVuZ2luZSB3aWxsIGFsbG9jYXRlIGJ1ZmZlclxuICAgKiBpbnRlcm5hbGx5LlxuICAgKi9cbiAgdHlwZSBGZXRjaGVzVHlwZSA9IHJlYWRvbmx5IHN0cmluZ1tdfE51bGxhYmxlT25ueFZhbHVlTWFwVHlwZTtcblxuICAvKipcbiAgICogQSBpbmZlcmVuY2luZyByZXR1cm4gdHlwZSBpcyBhbiBvYmplY3QgdGhhdCB1c2VzIG91dHB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgYXMgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAqL1xuICB0eXBlIFJldHVyblR5cGUgPSBPbm54VmFsdWVNYXBUeXBlO1xuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHNlc3Npb24gb3B0aW9uc1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBjb25maWd1cmF0aW9ucyBmb3Igc2Vzc2lvbiBiZWhhdmlvci5cbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbk9wdGlvbnMgZXh0ZW5kcyBPbm54TW9kZWxPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBleGVjdXRpb24gcHJvdmlkZXIgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEFuIGV4ZWN1dGlvbiBwcm92aWRlciBvcHRpb24gY2FuIGJlIGEgc3RyaW5nIGluZGljYXRpbmcgdGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGlvbiBwcm92aWRlcixcbiAgICAgKiBvciBhbiBvYmplY3Qgb2YgY29ycmVzcG9uZGluZyB0eXBlLlxuICAgICAqL1xuICAgIGV4ZWN1dGlvblByb3ZpZGVycz86IHJlYWRvbmx5IEV4ZWN1dGlvblByb3ZpZGVyQ29uZmlnW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW50cmEgT1AgdGhyZWFkcyBudW1iZXIuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKS5cbiAgICAgKi9cbiAgICBpbnRyYU9wTnVtVGhyZWFkcz86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbnRlciBPUCB0aHJlYWRzIG51bWJlci5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpLlxuICAgICAqL1xuICAgIGludGVyT3BOdW1UaHJlYWRzPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZyZWUgZGltZW5zaW9uIG92ZXJyaWRlLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSkgb3IgV2ViQXNzZW1ibHkgYmFja2VuZFxuICAgICAqL1xuICAgIGZyZWVEaW1lbnNpb25PdmVycmlkZXM/OiB7cmVhZG9ubHkgW2RpbWVuc2lvbk5hbWU6IHN0cmluZ106IG51bWJlcn07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3B0aW1pemF0aW9uIGxldmVsLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSkgb3IgV2ViQXNzZW1ibHkgYmFja2VuZFxuICAgICAqL1xuICAgIGdyYXBoT3B0aW1pemF0aW9uTGV2ZWw/OiAnZGlzYWJsZWQnfCdiYXNpYyd8J2V4dGVuZGVkJ3wnYWxsJztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIENQVSBtZW1vcnkgYXJlbmEuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKSBvciBXZWJBc3NlbWJseSBiYWNrZW5kXG4gICAgICovXG4gICAgZW5hYmxlQ3B1TWVtQXJlbmE/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmFibGUgbWVtb3J5IHBhdHRlcm4uXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKSBvciBXZWJBc3NlbWJseSBiYWNrZW5kXG4gICAgICovXG4gICAgZW5hYmxlTWVtUGF0dGVybj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRpb24gbW9kZS5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpIG9yIFdlYkFzc2VtYmx5IGJhY2tlbmRcbiAgICAgKi9cbiAgICBleGVjdXRpb25Nb2RlPzogJ3NlcXVlbnRpYWwnfCdwYXJhbGxlbCc7XG5cbiAgICAvKipcbiAgICAgKiBPcHRpbWl6ZWQgbW9kZWwgZmlsZSBwYXRoLlxuICAgICAqXG4gICAgICogSWYgdGhpcyBzZXR0aW5nIGlzIHNwZWNpZmllZCwgdGhlIG9wdGltaXplZCBtb2RlbCB3aWxsIGJlIGR1bXBlZC4gSW4gYnJvd3NlciwgYSBibG9iIHdpbGwgYmUgY3JlYXRlZFxuICAgICAqIHdpdGggYSBwb3AtdXAgd2luZG93LlxuICAgICAqL1xuICAgIG9wdGltaXplZE1vZGVsRmlsZVBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuYWJsZSBwcm9maWxpbmcuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYSBwbGFjZWhvbGRlciBmb3IgYSBmdXR1cmUgdXNlLlxuICAgICAqL1xuICAgIGVuYWJsZVByb2ZpbGluZz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBGaWxlIHByZWZpeCBmb3IgcHJvZmlsaW5nLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEgZnV0dXJlIHVzZS5cbiAgICAgKi9cbiAgICBwcm9maWxlRmlsZVByZWZpeD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIExvZyBJRC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpIG9yIFdlYkFzc2VtYmx5IGJhY2tlbmRcbiAgICAgKi9cbiAgICBsb2dJZD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIExvZyBzZXZlcml0eSBsZXZlbC4gU2VlXG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9vbm54cnVudGltZS9ibG9iL21haW4vaW5jbHVkZS9vbm54cnVudGltZS9jb3JlL2NvbW1vbi9sb2dnaW5nL3NldmVyaXR5LmhcbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpIG9yIFdlYkFzc2VtYmx5IGJhY2tlbmRcbiAgICAgKi9cbiAgICBsb2dTZXZlcml0eUxldmVsPzogMHwxfDJ8M3w0O1xuXG4gICAgLyoqXG4gICAgICogTG9nIHZlcmJvc2l0eSBsZXZlbC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBXZWJBc3NlbWJseSBiYWNrZW5kLiBXaWxsIHN1cHBvcnQgTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUgbGF0ZXJcbiAgICAgKi9cbiAgICBsb2dWZXJib3NpdHlMZXZlbD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgc3RyaW5nIGFzIGEgcHJlZmVycmVkIGRhdGEgbG9jYXRpb24gZm9yIGFsbCBvdXRwdXRzLCBvciBhbiBvYmplY3QgdGhhdCB1c2Ugb3V0cHV0IG5hbWVzIGFzIGtleXMgYW5kIGFcbiAgICAgKiBwcmVmZXJyZWQgZGF0YSBsb2NhdGlvbiBhcyBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSBXZWIgZm9yIFdlYkdMIGFuZCBXZWJHUFUgRVAuXG4gICAgICovXG4gICAgcHJlZmVycmVkT3V0cHV0TG9jYXRpb24/OiBPbm54VmFsdWVEYXRhTG9jYXRpb258e3JlYWRvbmx5IFtvdXRwdXROYW1lOiBzdHJpbmddOiBPbm54VmFsdWVEYXRhTG9jYXRpb259O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmFibGUgZ3JhcGggY2FwdHVyZS5cbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgV2ViIGZvciBXZWJHUFUgRVAuXG4gICAgICovXG4gICAgZW5hYmxlR3JhcGhDYXB0dXJlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGNvbmZpZ3VyYXRpb25zIGZvciBhIHNlc3Npb24uIFNlZVxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvb25ueHJ1bnRpbWUvYmxvYi9tYWluL2luY2x1ZGUvb25ueHJ1bnRpbWUvY29yZS9zZXNzaW9uL1xuICAgICAqIG9ubnhydW50aW1lX3Nlc3Npb25fb3B0aW9uc19jb25maWdfa2V5cy5oXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gV2ViQXNzZW1ibHkgYmFja2VuZC4gV2lsbCBzdXBwb3J0IE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlIGxhdGVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogZXh0cmE6IHtcbiAgICAgKiAgIHNlc3Npb246IHtcbiAgICAgKiAgICAgc2V0X2Rlbm9ybWFsX2FzX3plcm86IFwiMVwiLFxuICAgICAqICAgICBkaXNhYmxlX3ByZXBhY2tpbmc6IFwiMVwiXG4gICAgICogICB9LFxuICAgICAqICAgb3B0aW1pemF0aW9uOiB7XG4gICAgICogICAgIGVuYWJsZV9nZWx1X2FwcHJveGltYXRpb246IFwiMVwiXG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4dHJhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICAvLyAjcmVnaW9uIGV4ZWN1dGlvbiBwcm92aWRlcnNcblxuICAvLyBDdXJyZW50bHksIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBiYWNrZW5kcyB0byBzdXBwb3J0IGV4ZWN1dGlvbiBwcm92aWRlcnM6XG4gIC8vIEJhY2tlbmQgTm9kZS5qcyBiaW5kaW5nOiBzdXBwb3J0cyAnY3B1JywgJ2RtbCcgKHdpbjMyKSwgJ2NvcmVtbCcgKG1hY09TKSBhbmQgJ2N1ZGEnIChsaW51eCkuXG4gIC8vIEJhY2tlbmQgV2ViQXNzZW1ibHk6IHN1cHBvcnRzICdjcHUnLCAnd2FzbScsICd3ZWJncHUnIGFuZCAnd2Vibm4nLlxuICAvLyBCYWNrZW5kIE9OTlguanM6IHN1cHBvcnRzICd3ZWJnbCcuXG4gIC8vIEJhY2tlbmQgUmVhY3QgTmF0aXZlOiBzdXBwb3J0cyAnY3B1JywgJ3hubnBhY2snLCAnY29yZW1sJyAoaU9TKSwgJ25uYXBpJyAoQW5kcm9pZCkuXG4gIGludGVyZmFjZSBFeGVjdXRpb25Qcm92aWRlck9wdGlvbk1hcCB7XG4gICAgY29yZW1sOiBDb3JlTUxFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICBjcHU6IENwdUV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgIGN1ZGE6IEN1ZGFFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICBkbWw6IERtbEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgIG5uYXBpOiBObmFwaUV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgIHRlbnNvcnJ0OiBUZW5zb3JSdEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgIHdhc206IFdlYkFzc2VtYmx5RXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gICAgd2ViZ2w6IFdlYkdMRXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gICAgd2ViZ3B1OiBXZWJHcHVFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICB3ZWJubjogV2ViTk5FeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICB4bm5wYWNrOiBYbm5wYWNrRXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gIH1cblxuICB0eXBlIEV4ZWN1dGlvblByb3ZpZGVyTmFtZSA9IGtleW9mIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uTWFwO1xuICB0eXBlIEV4ZWN1dGlvblByb3ZpZGVyQ29uZmlnID1cbiAgICAgIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uTWFwW0V4ZWN1dGlvblByb3ZpZGVyTmFtZV18RXhlY3V0aW9uUHJvdmlkZXJPcHRpb258RXhlY3V0aW9uUHJvdmlkZXJOYW1lfHN0cmluZztcblxuICBleHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBDcHVFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnY3B1JztcbiAgICB1c2VBcmVuYT86IGJvb2xlYW47XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBDdWRhRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ2N1ZGEnO1xuICAgIGRldmljZUlkPzogbnVtYmVyO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgRG1sRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ2RtbCc7XG4gICAgZGV2aWNlSWQ/OiBudW1iZXI7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBUZW5zb3JSdEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIGV4dGVuZHMgRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24ge1xuICAgIHJlYWRvbmx5IG5hbWU6ICd0ZW5zb3JydCc7XG4gICAgZGV2aWNlSWQ/OiBudW1iZXI7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBXZWJBc3NlbWJseUV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIGV4dGVuZHMgRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24ge1xuICAgIHJlYWRvbmx5IG5hbWU6ICd3YXNtJztcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIFdlYkdMRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ3dlYmdsJztcbiAgICAvLyBUT0RPOiBhZGQgZmxhZ3NcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIFhubnBhY2tFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAneG5ucGFjayc7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBXZWJHcHVFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnd2ViZ3B1JztcbiAgICBwcmVmZXJyZWRMYXlvdXQ/OiAnTkNIVyd8J05IV0MnO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgV2ViTk5FeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnd2Vibm4nO1xuICAgIGRldmljZVR5cGU/OiAnY3B1J3wnZ3B1J3wnbnB1JztcbiAgICBudW1UaHJlYWRzPzogbnVtYmVyO1xuICAgIHBvd2VyUHJlZmVyZW5jZT86ICdkZWZhdWx0J3wnbG93LXBvd2VyJ3wnaGlnaC1wZXJmb3JtYW5jZSc7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBDb3JlTUxFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnY29yZW1sJztcbiAgICAvKipcbiAgICAgKiBUaGUgYml0IGZsYWdzIGZvciBDb3JlTUwgZXhlY3V0aW9uIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogYGBgXG4gICAgICogQ09SRU1MX0ZMQUdfVVNFX0NQVV9PTkxZID0gMHgwMDFcbiAgICAgKiBDT1JFTUxfRkxBR19FTkFCTEVfT05fU1VCR1JBUEggPSAweDAwMlxuICAgICAqIENPUkVNTF9GTEFHX09OTFlfRU5BQkxFX0RFVklDRV9XSVRIX0FORSA9IDB4MDA0XG4gICAgICogQ09SRU1MX0ZMQUdfT05MWV9BTExPV19TVEFUSUNfSU5QVVRfU0hBUEVTID0gMHgwMDhcbiAgICAgKiBDT1JFTUxfRkxBR19DUkVBVEVfTUxQUk9HUkFNID0gMHgwMTBcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFNlZSBpbmNsdWRlL29ubnhydW50aW1lL2NvcmUvcHJvdmlkZXJzL2NvcmVtbC9jb3JlbWxfcHJvdmlkZXJfZmFjdG9yeS5oIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBUaGlzIGZsYWcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZykuXG4gICAgICovXG4gICAgY29yZU1sRmxhZ3M/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB3aGV0aGVyIHRvIHVzZSBDUFUgb25seSBpbiBDb3JlTUwgRVAuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKHJlYWN0LW5hdGl2ZSkuXG4gICAgICovXG4gICAgdXNlQ1BVT25seT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB3aGV0aGVyIHRvIGVuYWJsZSBDb3JlTUwgRVAgb24gc3ViZ3JhcGguXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKHJlYWN0LW5hdGl2ZSkuXG4gICAgICovXG4gICAgZW5hYmxlT25TdWJncmFwaD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB3aGV0aGVyIHRvIG9ubHkgZW5hYmxlIENvcmVNTCBFUCBmb3IgQXBwbGUgZGV2aWNlcyB3aXRoIEFORSAoQXBwbGUgTmV1cmFsIEVuZ2luZSkuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKHJlYWN0LW5hdGl2ZSkuXG4gICAgICovXG4gICAgb25seUVuYWJsZURldmljZVdpdGhBTkU/OiBib29sZWFuO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgTm5hcGlFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnbm5hcGknO1xuICAgIHVzZUZQMTY/OiBib29sZWFuO1xuICAgIHVzZU5DSFc/OiBib29sZWFuO1xuICAgIGNwdURpc2FibGVkPzogYm9vbGVhbjtcbiAgICBjcHVPbmx5PzogYm9vbGVhbjtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcnVuIG9wdGlvbnNcblxuICAvKipcbiAgICogQSBzZXQgb2YgY29uZmlndXJhdGlvbnMgZm9yIGluZmVyZW5jZSBydW4gYmVoYXZpb3JcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgUnVuT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogTG9nIHNldmVyaXR5IGxldmVsLiBTZWVcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L29ubnhydW50aW1lL2Jsb2IvbWFpbi9pbmNsdWRlL29ubnhydW50aW1lL2NvcmUvY29tbW9uL2xvZ2dpbmcvc2V2ZXJpdHkuaFxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSkgb3IgV2ViQXNzZW1ibHkgYmFja2VuZFxuICAgICAqL1xuICAgIGxvZ1NldmVyaXR5TGV2ZWw/OiAwfDF8MnwzfDQ7XG5cbiAgICAvKipcbiAgICAgKiBMb2cgdmVyYm9zaXR5IGxldmVsLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIFdlYkFzc2VtYmx5IGJhY2tlbmQuIFdpbGwgc3VwcG9ydCBOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSBsYXRlclxuICAgICAqL1xuICAgIGxvZ1ZlcmJvc2l0eUxldmVsPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGVybWluYXRlIGFsbCBpbmNvbXBsZXRlIE9ydFJ1biBjYWxscyBhcyBzb29uIGFzIHBvc3NpYmxlIGlmIHRydWVcbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBXZWJBc3NlbWJseSBiYWNrZW5kLiBXaWxsIHN1cHBvcnQgTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUgbGF0ZXJcbiAgICAgKi9cbiAgICB0ZXJtaW5hdGU/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSB0YWcgZm9yIHRoZSBSdW4oKSBjYWxscyB1c2luZyB0aGlzXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKSBvciBXZWJBc3NlbWJseSBiYWNrZW5kXG4gICAgICovXG4gICAgdGFnPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2V0IGEgc2luZ2xlIHJ1biBjb25maWd1cmF0aW9uIGVudHJ5LiBTZWVcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L29ubnhydW50aW1lL2Jsb2IvbWFpbi9pbmNsdWRlL29ubnhydW50aW1lL2NvcmUvc2Vzc2lvbi9cbiAgICAgKiBvbm54cnVudGltZV9ydW5fb3B0aW9uc19jb25maWdfa2V5cy5oXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gV2ViQXNzZW1ibHkgYmFja2VuZC4gV2lsbCBzdXBwb3J0IE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlIGxhdGVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYGBganNcbiAgICAgKiBleHRyYToge1xuICAgICAqICAgbWVtb3J5OiB7XG4gICAgICogICAgIGVuYWJsZV9tZW1vcnlfYXJlbmFfc2hyaW5rYWdlOiBcIjFcIixcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZXh0cmE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHZhbHVlIG1ldGFkYXRhXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbiAgaW50ZXJmYWNlIFZhbHVlTWV0YWRhdGEge1xuICAgIC8vIFRCRFxuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuXG4vKipcbiAqIFJlcHJlc2VudCBhIHJ1bnRpbWUgaW5zdGFuY2Ugb2YgYW4gT05OWCBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmZlcmVuY2VTZXNzaW9uIHtcbiAgLy8gI3JlZ2lvbiBydW4oKVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBtb2RlbCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBnaXZlbiBmZWVkcyBhbmQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGZlZWRzIC0gUmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIGlucHV0LiBTZWUgdHlwZSBkZXNjcmlwdGlvbiBvZiBgSW5mZXJlbmNlU2Vzc2lvbi5JbnB1dFR5cGVgIGZvciBkZXRhaWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgbW9kZWwgaW5mZXJlbmNlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG1hcCwgd2hpY2ggdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKi9cbiAgcnVuKGZlZWRzOiBJbmZlcmVuY2VTZXNzaW9uLkZlZWRzVHlwZSwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbi5SZXR1cm5UeXBlPjtcblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgbW9kZWwgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgZ2l2ZW4gZmVlZHMsIGZldGNoZXMgYW5kIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBmZWVkcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBpbnB1dC4gU2VlIHR5cGUgZGVzY3JpcHRpb24gb2YgYEluZmVyZW5jZVNlc3Npb24uSW5wdXRUeXBlYCBmb3IgZGV0YWlsLlxuICAgKiBAcGFyYW0gZmV0Y2hlcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvdXRwdXQuIFNlZSB0eXBlIGRlc2NyaXB0aW9uIG9mIGBJbmZlcmVuY2VTZXNzaW9uLk91dHB1dFR5cGVgIGZvclxuICAgKiBkZXRhaWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgbW9kZWwgaW5mZXJlbmNlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG1hcCwgd2hpY2ggdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKi9cbiAgcnVuKGZlZWRzOiBJbmZlcmVuY2VTZXNzaW9uLkZlZWRzVHlwZSwgZmV0Y2hlczogSW5mZXJlbmNlU2Vzc2lvbi5GZXRjaGVzVHlwZSxcbiAgICAgIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24uUmV0dXJuVHlwZT47XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcmVsZWFzZSgpXG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgdGhlIGluZmVyZW5jZSBzZXNzaW9uIGFuZCB0aGUgdW5kZXJseWluZyByZXNvdXJjZXMuXG4gICAqL1xuICByZWxlYXNlKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcHJvZmlsaW5nXG5cbiAgLyoqXG4gICAqIFN0YXJ0IHByb2ZpbGluZy5cbiAgICovXG4gIHN0YXJ0UHJvZmlsaW5nKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEVuZCBwcm9maWxpbmcuXG4gICAqL1xuICBlbmRQcm9maWxpbmcoKTogdm9pZDtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBtZXRhZGF0YVxuXG4gIC8qKlxuICAgKiBHZXQgaW5wdXQgbmFtZXMgb2YgdGhlIGxvYWRlZCBtb2RlbC5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHZXQgb3V0cHV0IG5hbWVzIG9mIHRoZSBsb2FkZWQgbW9kZWwuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLy8gLyoqXG4gIC8vICAqIEdldCBpbnB1dCBtZXRhZGF0YSBvZiB0aGUgbG9hZGVkIG1vZGVsLlxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgaW5wdXRNZXRhZGF0YTogUmVhZG9ubHlBcnJheTxSZWFkb25seTxJbmZlcmVuY2VTZXNzaW9uLlZhbHVlTWV0YWRhdGE+PjtcblxuICAvLyAvKipcbiAgLy8gICogR2V0IG91dHB1dCBtZXRhZGF0YSBvZiB0aGUgbG9hZGVkIG1vZGVsLlxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgb3V0cHV0TWV0YWRhdGE6IFJlYWRvbmx5QXJyYXk8UmVhZG9ubHk8SW5mZXJlbmNlU2Vzc2lvbi5WYWx1ZU1ldGFkYXRhPj47XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZmVyZW5jZVNlc3Npb25GYWN0b3J5IHtcbiAgLy8gI3JlZ2lvbiBjcmVhdGUoKVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5mZXJlbmNlIHNlc3Npb24gYW5kIGxvYWQgbW9kZWwgYXN5bmNocm9ub3VzbHkgZnJvbSBhbiBPTk5YIG1vZGVsIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSB1cmkgLSBUaGUgVVJJIG9yIGZpbGUgcGF0aCBvZiB0aGUgbW9kZWwgdG8gbG9hZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZm9yIGNyZWF0aW5nIGEgbmV3IGluZmVyZW5jZSBzZXNzaW9uLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBJbmZlcmVuY2VTZXNzaW9uIG9iamVjdC5cbiAgICovXG4gIGNyZWF0ZSh1cmk6IHN0cmluZywgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5mZXJlbmNlIHNlc3Npb24gYW5kIGxvYWQgbW9kZWwgYXN5bmNocm9ub3VzbHkgZnJvbSBhbiBhcnJheSBidWZlci5cbiAgICpcbiAgICogQHBhcmFtIGJ1ZmZlciAtIEFuIEFycmF5QnVmZmVyIHJlcHJlc2VudGF0aW9uIG9mIGFuIE9OTlggbW9kZWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBpbmZlcmVuY2Ugc2Vzc2lvbi5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gSW5mZXJlbmNlU2Vzc2lvbiBvYmplY3QuXG4gICAqL1xuICBjcmVhdGUoYnVmZmVyOiBBcnJheUJ1ZmZlckxpa2UsIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluZmVyZW5jZSBzZXNzaW9uIGFuZCBsb2FkIG1vZGVsIGFzeW5jaHJvbm91c2x5IGZyb20gc2VnbWVudCBvZiBhbiBhcnJheSBidWZlci5cbiAgICpcbiAgICogQHBhcmFtIGJ1ZmZlciAtIEFuIEFycmF5QnVmZmVyIHJlcHJlc2VudGF0aW9uIG9mIGFuIE9OTlggbW9kZWwuXG4gICAqIEBwYXJhbSBieXRlT2Zmc2V0IC0gVGhlIGJlZ2lubmluZyBvZiB0aGUgc3BlY2lmaWVkIHBvcnRpb24gb2YgdGhlIGFycmF5IGJ1ZmZlci5cbiAgICogQHBhcmFtIGJ5dGVMZW5ndGggLSBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBhcnJheSBidWZmZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBpbmZlcmVuY2Ugc2Vzc2lvbi5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gSW5mZXJlbmNlU2Vzc2lvbiBvYmplY3QuXG4gICAqL1xuICBjcmVhdGUoYnVmZmVyOiBBcnJheUJ1ZmZlckxpa2UsIGJ5dGVPZmZzZXQ6IG51bWJlciwgYnl0ZUxlbmd0aD86IG51bWJlciwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluZmVyZW5jZSBzZXNzaW9uIGFuZCBsb2FkIG1vZGVsIGFzeW5jaHJvbm91c2x5IGZyb20gYSBVaW50OEFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gQSBVaW50OEFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGFuIE9OTlggbW9kZWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBpbmZlcmVuY2Ugc2Vzc2lvbi5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gSW5mZXJlbmNlU2Vzc2lvbiBvYmplY3QuXG4gICAqL1xuICBjcmVhdGUoYnVmZmVyOiBVaW50OEFycmF5LCBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6IFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbj47XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgSW5mZXJlbmNlU2Vzc2lvbjogSW5mZXJlbmNlU2Vzc2lvbkZhY3RvcnkgPSBJbmZlcmVuY2VTZXNzaW9uSW1wbDtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtPcHRpb25zRm9ybWF0LCBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMsIE9wdGlvbnNUZW5zb3JMYXlvdXR9IGZyb20gJy4vdGVuc29yLWZhY3RvcnkuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvclRvRGF0YVVybE9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zVGVuc29yTGF5b3V0LCBPcHRpb25zRm9ybWF0LCBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMge31cblxuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JUb0ltYWdlRGF0YU9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zVGVuc29yTGF5b3V0LCBPcHRpb25zRm9ybWF0LCBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMge31cblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzaW9uVXRpbHMge1xuICAvKipcbiAgICogY3JlYXRlcyBhIERhdGFVUkwgaW5zdGFuY2UgZnJvbSB0ZW5zb3JcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25hbCBvYmplY3QgcmVwcmVzZW50aW5nIG9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgRGF0YVVSTCBpbnN0YW5jZSBmcm9tIHRoZSB0ZW5zb3IuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQ6XG4gICAqIC0gYGZvcm1hdGA6IGAnUkdCJ2BcbiAgICogLSBgdGVuc29yTGF5b3V0YDogYCdOQ0hXJ2BcbiAgICogQHJldHVybnMgYSBEYXRhVVJMIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGltYWdlIGNvbnZlcnRlZCBmcm9tIHRlbnNvciBkYXRhXG4gICAqL1xuICB0b0RhdGFVUkwob3B0aW9ucz86IFRlbnNvclRvRGF0YVVybE9wdGlvbnMpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGNyZWF0ZXMgYW4gSW1hZ2VEYXRhIGluc3RhbmNlIGZyb20gdGVuc29yXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHJlcHJlc2VudGluZyBvcHRpb25zIGZvciBjcmVhdGluZyBhbiBJbWFnZURhdGEgaW5zdGFuY2UgZnJvbSB0aGUgdGVuc29yLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGRlZmF1bHQgc2V0dGluZ3Mgd2lsbCBiZSBhcHBsaWVkOlxuICAgKiAtIGBmb3JtYXRgOiBgJ1JHQidgXG4gICAqIC0gYHRlbnNvckxheW91dGA6IGAnTkNIVydgXG4gICAqIEByZXR1cm5zIGFuIEltYWdlRGF0YSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGltYWdlIGNvbnZlcnRlZCBmcm9tIHRlbnNvciBkYXRhXG4gICAqL1xuICB0b0ltYWdlRGF0YShvcHRpb25zPzogVGVuc29yVG9JbWFnZURhdGFPcHRpb25zKTogSW1hZ2VEYXRhO1xufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvciwgVHlwZWRUZW5zb3J9IGZyb20gJy4vdGVuc29yLmpzJztcblxuZXhwb3J0IHR5cGUgSW1hZ2VGb3JtYXQgPSAnUkdCJ3wnUkdCQSd8J0JHUid8J1JCRyc7XG5leHBvcnQgdHlwZSBJbWFnZVRlbnNvckxheW91dCA9ICdOSFdDJ3wnTkNIVyc7XG5cbi8vIHRoZSBmb2xsb3dpbmcgcmVnaW9uIGNvbnRhaW5zIHR5cGUgZGVmaW5pdGlvbnMgZm9yIGNvbnN0cnVjdGluZyB0ZW5zb3IgZnJvbSBhIHNwZWNpZmljIGxvY2F0aW9uLlxuXG4vLyAjcmVnaW9uIHR5cGVzIGZvciBjb25zdHJ1Y3RpbmcgYSB0ZW5zb3IgZnJvbSBhIHNwZWNpZmljIGxvY2F0aW9uXG5cbi8qKlxuICogcmVwcmVzZW50IGNvbW1vbiBwcm9wZXJ0aWVzIG9mIHRoZSBwYXJhbWV0ZXIgZm9yIGNvbnN0cnVjdGluZyBhIHRlbnNvciBmcm9tIGEgc3BlY2lmaWMgbG9jYXRpb24uXG4gKi9cbmludGVyZmFjZSBDb21tb25Db25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4gZXh0ZW5kcyBQaWNrPFRlbnNvciwgJ2RpbXMnPiB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBkYXRhIHR5cGUgb2YgdGhlIHRlbnNvci5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IFQ7XG59XG5cbi8qKlxuICogcmVwcmVzZW50IHRoZSBwYXJhbWV0ZXIgZm9yIGNvbnN0cnVjdGluZyBhIHRlbnNvciBmcm9tIGEgR1BVIHJlc291cmNlLlxuICovXG5pbnRlcmZhY2UgR3B1UmVzb3VyY2VDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VCBleHRlbmRzIFRlbnNvci5UeXBlPiB7XG4gIC8qKlxuICAgKiBhbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBkb3dubG9hZCBkYXRhIGZyb20gR1BVIHRvIENQVS5cbiAgICpcbiAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgdGVuc29yIHRyZWF0IHRoZSBHUFUgZGF0YSBhcyBleHRlcm5hbCByZXNvdXJjZS5cbiAgICovXG4gIGRvd25sb2FkPygpOiBQcm9taXNlPFRlbnNvci5EYXRhVHlwZU1hcFtUXT47XG5cbiAgLyoqXG4gICAqIGFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdGVuc29yIGlzIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSB0ZW5zb3IgdHJlYXQgdGhlIEdQVSBkYXRhIGFzIGV4dGVybmFsIHJlc291cmNlLlxuICAgKi9cbiAgZGlzcG9zZT8oKTogdm9pZDtcbn1cblxuLyoqXG4gKiByZXByZXNlbnQgdGhlIHBhcmFtZXRlciBmb3IgY29uc3RydWN0aW5nIGEgdGVuc29yIGZyb20gYSBwaW5uZWQgQ1BVIGJ1ZmZlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENwdVBpbm5lZENvbnN0cnVjdG9yUGFyYW1ldGVyczxUIGV4dGVuZHMgVGVuc29yLkNwdVBpbm5lZERhdGFUeXBlcyA9IFRlbnNvci5DcHVQaW5uZWREYXRhVHlwZXM+IGV4dGVuZHNcbiAgICBDb21tb25Db25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4ge1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGEgdG8gYmUgJ2NwdS1waW5uZWQnLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb246ICdjcHUtcGlubmVkJztcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIENQVSBwaW5uZWQgYnVmZmVyIHRoYXQgaG9sZHMgdGhlIHRlbnNvciBkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YTogVGVuc29yLkRhdGFUeXBlTWFwW1RdO1xufVxuXG4vKipcbiAqIHJlcHJlc2VudCB0aGUgcGFyYW1ldGVyIGZvciBjb25zdHJ1Y3RpbmcgYSB0ZW5zb3IgZnJvbSBhIFdlYkdMIHRleHR1cmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXh0dXJlQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQgZXh0ZW5kcyBUZW5zb3IuVGV4dHVyZURhdGFUeXBlcyA9IFRlbnNvci5UZXh0dXJlRGF0YVR5cGVzPiBleHRlbmRzXG4gICAgQ29tbW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+LCBHcHVSZXNvdXJjZUNvbnN0cnVjdG9yUGFyYW1ldGVyczxUPiB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YSB0byBiZSAndGV4dHVyZScuXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbjogJ3RleHR1cmUnO1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgV2ViR0wgdGV4dHVyZSB0aGF0IGhvbGRzIHRoZSB0ZW5zb3IgZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IHRleHR1cmU6IFRlbnNvci5UZXh0dXJlVHlwZTtcbn1cblxuLyoqXG4gKiByZXByZXNlbnQgdGhlIHBhcmFtZXRlciBmb3IgY29uc3RydWN0aW5nIGEgdGVuc29yIGZyb20gYSBXZWJHUFUgYnVmZmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3B1QnVmZmVyQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQgZXh0ZW5kcyBUZW5zb3IuR3B1QnVmZmVyRGF0YVR5cGVzID0gVGVuc29yLkdwdUJ1ZmZlckRhdGFUeXBlcz4gZXh0ZW5kc1xuICAgIENvbW1vbkNvbnN0cnVjdG9yUGFyYW1ldGVyczxUPiwgR3B1UmVzb3VyY2VDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4ge1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGEgdG8gYmUgJ2dwdS1idWZmZXInLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb246ICdncHUtYnVmZmVyJztcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIFdlYkdQVSBidWZmZXIgdGhhdCBob2xkcyB0aGUgdGVuc29yIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBncHVCdWZmZXI6IFRlbnNvci5HcHVCdWZmZXJUeXBlO1xufVxuXG4vLyAjZW5kcmVnaW9uXG5cbi8vIHRoZSBmb2xsb3dpbmcgcmVnaW9uIGNvbnRhaW5zIHR5cGUgZGVmaW5pdGlvbnMgb2YgZWFjaCBpbmRpdmlkdWFsIG9wdGlvbnMuXG4vLyB0aGUgdGVuc29yIGZhY3RvcnkgZnVuY3Rpb25zIHVzZSBhIGNvbXBvc2l0aW9uIG9mIHRob3NlIG9wdGlvbnMgYXMgdGhlIHBhcmFtZXRlciB0eXBlLlxuXG4vLyAjcmVnaW9uIE9wdGlvbnMgZmllbGRzXG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc0Zvcm1hdCB7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGltYWdlIGZvcm1hdCByZXByZXNlbnRlZCBpbiBSR0JBIGNvbG9yIHNwYWNlLlxuICAgKi9cbiAgZm9ybWF0PzogSW1hZ2VGb3JtYXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc1RlbnNvckZvcm1hdCB7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGltYWdlIGZvcm1hdCBvZiB0aGUgdGVuc29yLlxuICAgKlxuICAgKiBOT1RFOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIG9wdGlvbiAnZm9ybWF0Jy4gV2hpbGUgb3B0aW9uICdmb3JtYXQnIHJlcHJlc2VudHMgdGhlIG9yaWdpbmFsIGltYWdlLCAndGVuc29yRm9ybWF0J1xuICAgKiByZXByZXNlbnRzIHRoZSB0YXJnZXQgZm9ybWF0IG9mIHRoZSB0ZW5zb3IuIEEgdHJhbnNwb3NlIHdpbGwgYmUgcGVyZm9ybWVkIGlmIHRoZXkgYXJlIGRpZmZlcmVudC5cbiAgICovXG4gIHRlbnNvckZvcm1hdD86IEltYWdlRm9ybWF0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNUZW5zb3JEYXRhVHlwZSB7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgdGVuc29yLlxuICAgKi9cbiAgZGF0YVR5cGU/OiAnZmxvYXQzMid8J3VpbnQ4Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zVGVuc29yTGF5b3V0IHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgdGVuc29yIGxheW91dCB3aGVuIHJlcHJlc2VudGluZyBkYXRhIG9mIG9uZSBvciBtb3JlIGltYWdlKHMpLlxuICAgKi9cbiAgdGVuc29yTGF5b3V0PzogSW1hZ2VUZW5zb3JMYXlvdXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc0RpbWVuc2lvbnMge1xuICAvKipcbiAgICogRGVzY3JpYmVzIHRoZSBpbWFnZSBoZWlnaHQgaW4gcGl4ZWxcbiAgICovXG4gIGhlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgaW1hZ2Ugd2lkdGggaW4gcGl4ZWxcbiAgICovXG4gIHdpZHRoPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvblJlc2l6ZWREaW1lbnNpb25zIHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgcmVzaXplZCBoZWlnaHQuIElmIG9taXR0ZWQsIG9yaWdpbmFsIGhlaWdodCB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZXNpemVkSGVpZ2h0PzogbnVtYmVyO1xuICAvKipcbiAgICogRGVzY3JpYmVzIHJlc2l6ZWQgd2lkdGggLSBjYW4gYmUgYWNjZXNzZWQgdmlhIHRlbnNvciBkaW1lbnNpb25zIGFzIHdlbGxcbiAgICovXG4gIHJlc2l6ZWRXaWR0aD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMge1xuICAvKipcbiAgICogRGVzY3JpYmVzIG5vcm1hbGl6YXRpb24gcGFyYW1ldGVycyB3aGVuIHByZXByb2Nlc3NpbmcgdGhlIGltYWdlIGFzIG1vZGVsIGlucHV0LlxuICAgKlxuICAgKiBEYXRhIGVsZW1lbnQgYXJlIHJhbmdlZCBmcm9tIDAgdG8gMjU1LlxuICAgKi9cbiAgbm9ybT86IHtcbiAgICAvKipcbiAgICAgKiBUaGUgJ2JpYXMnIHZhbHVlIGZvciBpbWFnZSBub3JtYWxpemF0aW9uLlxuICAgICAqIC0gSWYgb21pdHRlZCwgdXNlIGRlZmF1bHQgdmFsdWUgMC5cbiAgICAgKiAtIElmIGl0J3MgYSBzaW5nbGUgbnVtYmVyLCBhcHBseSB0byBlYWNoIGNoYW5uZWxcbiAgICAgKiAtIElmIGl0J3MgYW4gYXJyYXkgb2YgMyBvciA0IG51bWJlcnMsIGFwcGx5IGVsZW1lbnQtd2lzZS4gTnVtYmVyIG9mIGVsZW1lbnRzIG5lZWQgdG8gbWF0Y2ggdGhlIG51bWJlciBvZiBjaGFubmVsc1xuICAgICAqIGZvciB0aGUgY29ycmVzcG9uZGluZyBpbWFnZSBmb3JtYXRcbiAgICAgKi9cbiAgICBiaWFzPzogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICAvKipcbiAgICAgKiBUaGUgJ21lYW4nIHZhbHVlIGZvciBpbWFnZSBub3JtYWxpemF0aW9uLlxuICAgICAqIC0gSWYgb21pdHRlZCwgdXNlIGRlZmF1bHQgdmFsdWUgMjU1LlxuICAgICAqIC0gSWYgaXQncyBhIHNpbmdsZSBudW1iZXIsIGFwcGx5IHRvIGVhY2ggY2hhbm5lbFxuICAgICAqIC0gSWYgaXQncyBhbiBhcnJheSBvZiAzIG9yIDQgbnVtYmVycywgYXBwbHkgZWxlbWVudC13aXNlLiBOdW1iZXIgb2YgZWxlbWVudHMgbmVlZCB0byBtYXRjaCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzXG4gICAgICogZm9yIHRoZSBjb3JyZXNwb25kaW5nIGltYWdlIGZvcm1hdFxuICAgICAqL1xuICAgIG1lYW4/OiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgfTtcbn1cblxuLy8gI2VuZHJlZ2lvblxuXG4vLyAjcmVnaW9uIE9wdGlvbnMgY29tcG9zaXRpb25cblxuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JGcm9tSW1hZ2VEYXRhT3B0aW9ucyBleHRlbmRzIE9wdGlvblJlc2l6ZWREaW1lbnNpb25zLCBPcHRpb25zVGVuc29yRm9ybWF0LCBPcHRpb25zVGVuc29yTGF5b3V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNUZW5zb3JEYXRhVHlwZSwgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRnJvbUltYWdlRWxlbWVudE9wdGlvbnMgZXh0ZW5kcyBPcHRpb25SZXNpemVkRGltZW5zaW9ucywgT3B0aW9uc1RlbnNvckZvcm1hdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zVGVuc29yTGF5b3V0LCBPcHRpb25zVGVuc29yRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRnJvbVVybE9wdGlvbnMgZXh0ZW5kcyBPcHRpb25zRGltZW5zaW9ucywgT3B0aW9uUmVzaXplZERpbWVuc2lvbnMsIE9wdGlvbnNUZW5zb3JGb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uc1RlbnNvckxheW91dCwgT3B0aW9uc1RlbnNvckRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNOb3JtYWxpemF0aW9uUGFyYW1ldGVycyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvckZyb21JbWFnZUJpdG1hcE9wdGlvbnMgZXh0ZW5kcyBPcHRpb25SZXNpemVkRGltZW5zaW9ucywgT3B0aW9uc1RlbnNvckZvcm1hdCwgT3B0aW9uc1RlbnNvckxheW91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNUZW5zb3JEYXRhVHlwZSwgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRnJvbVRleHR1cmVPcHRpb25zPFQgZXh0ZW5kcyBUZW5zb3IuVGV4dHVyZURhdGFUeXBlcz4gZXh0ZW5kc1xuICAgIFJlcXVpcmVkPE9wdGlvbnNEaW1lbnNpb25zPiwgT3B0aW9uc0Zvcm1hdCwgR3B1UmVzb3VyY2VDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4vKiBUT0RPOiBhZGQgbW9yZSAqLyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvckZyb21HcHVCdWZmZXJPcHRpb25zPFQgZXh0ZW5kcyBUZW5zb3IuR3B1QnVmZmVyRGF0YVR5cGVzPiBleHRlbmRzXG4gICAgUGljazxUZW5zb3IsICdkaW1zJz4sIEdwdVJlc291cmNlQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+IHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSB0ZW5zb3IuXG4gICAqL1xuICBkYXRhVHlwZT86IFQ7XG59XG5cbi8vICNlbmRyZWdpb25cblxuLyoqXG4gKiB0eXBlIFRlbnNvckZhY3RvcnkgZGVmaW5lcyB0aGUgZmFjdG9yeSBmdW5jdGlvbnMgb2YgJ1RlbnNvcicgdG8gY3JlYXRlIHRlbnNvciBpbnN0YW5jZXMgZnJvbSBleGlzdGluZyBkYXRhIG9yXG4gKiByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRmFjdG9yeSB7XG4gIC8qKlxuICAgKiBjcmVhdGUgYSB0ZW5zb3IgZnJvbSBhbiBJbWFnZURhdGEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSBpbWFnZURhdGEgLSB0aGUgSW1hZ2VEYXRhIG9iamVjdCB0byBjcmVhdGUgdGVuc29yIGZyb21cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25hbCBvYmplY3QgcmVwcmVzZW50aW5nIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRlbnNvciBmcm9tIEltYWdlRGF0YS5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBkZWZhdWx0IHNldHRpbmdzIHdpbGwgYmUgYXBwbGllZDpcbiAgICogLSBgdGVuc29yRm9ybWF0YDogYCdSR0InYFxuICAgKiAtIGB0ZW5zb3JMYXlvdXRgOiBgJ05DSFcnYFxuICAgKiAtIGBkYXRhVHlwZWA6IGAnZmxvYXQzMidgXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgdGVuc29yIG9iamVjdFxuICAgKi9cbiAgZnJvbUltYWdlKGltYWdlRGF0YTogSW1hZ2VEYXRhLCBvcHRpb25zPzogVGVuc29yRnJvbUltYWdlRGF0YU9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxUeXBlZFRlbnNvcjwnZmxvYXQzMic+fFR5cGVkVGVuc29yPCd1aW50OCc+PjtcblxuICAvKipcbiAgICogY3JlYXRlIGEgdGVuc29yIGZyb20gYSBIVE1MSW1hZ2VFbGVtZW50IG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0gaW1hZ2VFbGVtZW50IC0gdGhlIEhUTUxJbWFnZUVsZW1lbnQgb2JqZWN0IHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIG9iamVjdCByZXByZXNlbnRpbmcgb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGVuc29yIGZyb20gSFRNTEltYWdlRWxlbWVudC5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBkZWZhdWx0IHNldHRpbmdzIHdpbGwgYmUgYXBwbGllZDpcbiAgICogLSBgdGVuc29yRm9ybWF0YDogYCdSR0InYFxuICAgKiAtIGB0ZW5zb3JMYXlvdXRgOiBgJ05DSFcnYFxuICAgKiAtIGBkYXRhVHlwZWA6IGAnZmxvYXQzMidgXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgdGVuc29yIG9iamVjdFxuICAgKi9cbiAgZnJvbUltYWdlKGltYWdlRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCwgb3B0aW9ucz86IFRlbnNvckZyb21JbWFnZUVsZW1lbnRPcHRpb25zKTpcbiAgICAgIFByb21pc2U8VHlwZWRUZW5zb3I8J2Zsb2F0MzInPnxUeXBlZFRlbnNvcjwndWludDgnPj47XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIHRlbnNvciBmcm9tIFVSTFxuICAgKlxuICAgKiBAcGFyYW0gdXJsU291cmNlIC0gYSBzdHJpbmcgYXMgYSBVUkwgdG8gdGhlIGltYWdlIG9yIGEgZGF0YSBVUkwgY29udGFpbmluZyB0aGUgaW1hZ2UgZGF0YS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25hbCBvYmplY3QgcmVwcmVzZW50aW5nIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRlbnNvciBmcm9tIFVSTC5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBkZWZhdWx0IHNldHRpbmdzIHdpbGwgYmUgYXBwbGllZDpcbiAgICogLSBgdGVuc29yRm9ybWF0YDogYCdSR0InYFxuICAgKiAtIGB0ZW5zb3JMYXlvdXRgOiBgJ05DSFcnYFxuICAgKiAtIGBkYXRhVHlwZWA6IGAnZmxvYXQzMidgXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgdGVuc29yIG9iamVjdFxuICAgKi9cbiAgZnJvbUltYWdlKHVybFNvdXJjZTogc3RyaW5nLCBvcHRpb25zPzogVGVuc29yRnJvbVVybE9wdGlvbnMpOiBQcm9taXNlPFR5cGVkVGVuc29yPCdmbG9hdDMyJz58VHlwZWRUZW5zb3I8J3VpbnQ4Jz4+O1xuXG4gIC8qKlxuICAgKiBjcmVhdGUgYSB0ZW5zb3IgZnJvbSBhbiBJbWFnZUJpdG1hcCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIGJpdG1hcCAtIHRoZSBJbWFnZUJpdG1hcCBvYmplY3QgdG8gY3JlYXRlIHRlbnNvciBmcm9tXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHJlcHJlc2VudGluZyBvcHRpb25zIGZvciBjcmVhdGluZyB0ZW5zb3IgZnJvbSBVUkwuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQ6XG4gICAqIC0gYHRlbnNvckZvcm1hdGA6IGAnUkdCJ2BcbiAgICogLSBgdGVuc29yTGF5b3V0YDogYCdOQ0hXJ2BcbiAgICogLSBgZGF0YVR5cGVgOiBgJ2Zsb2F0MzInYFxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHRlbnNvciBvYmplY3RcbiAgICovXG4gIGZyb21JbWFnZShiaXRtYXA6IEltYWdlQml0bWFwLCBvcHRpb25zOiBUZW5zb3JGcm9tSW1hZ2VCaXRtYXBPcHRpb25zKTpcbiAgICAgIFByb21pc2U8VHlwZWRUZW5zb3I8J2Zsb2F0MzInPnxUeXBlZFRlbnNvcjwndWludDgnPj47XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIHRlbnNvciBmcm9tIGEgV2ViR0wgdGV4dHVyZVxuICAgKlxuICAgKiBAcGFyYW0gdGV4dHVyZSAtIHRoZSBXZWJHTFRleHR1cmUgb2JqZWN0IHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIG9iamVjdCByZXByZXNlbnRpbmcgb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGVuc29yIGZyb20gV2ViR0wgdGV4dHVyZS5cbiAgICpcbiAgICogVGhlIG9wdGlvbnMgaW5jbHVkZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogLSBgd2lkdGhgOiB0aGUgd2lkdGggb2YgdGhlIHRleHR1cmUuIFJlcXVpcmVkLlxuICAgKiAtIGBoZWlnaHRgOiB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlLiBSZXF1aXJlZC5cbiAgICogLSBgZm9ybWF0YDogdGhlIGZvcm1hdCBvZiB0aGUgdGV4dHVyZS4gSWYgb21pdHRlZCwgYXNzdW1lICdSR0JBJy5cbiAgICogLSBgZG93bmxvYWRgOiBhbiBvcHRpb25hbCBmdW5jdGlvbiB0byBkb3dubG9hZCB0aGUgdGVuc29yIGRhdGEgZnJvbSBHUFUgdG8gQ1BVLiBJZiBvbWl0dGVkLCB0aGUgR1BVIGRhdGFcbiAgICogd2lsbCBub3QgYmUgYWJsZSB0byBkb3dubG9hZC4gVXN1YWxseSwgdGhpcyBpcyBwcm92aWRlZCBieSBhIEdQVSBiYWNrZW5kIGZvciB0aGUgaW5mZXJlbmNlIG91dHB1dHMuIFVzZXJzIGRvbid0XG4gICAqIG5lZWQgdG8gcHJvdmlkZSB0aGlzIGZ1bmN0aW9uLlxuICAgKiAtIGBkaXNwb3NlYDogYW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gZGlzcG9zZSB0aGUgdGVuc29yIGRhdGEgb24gR1BVLiBJZiBvbWl0dGVkLCB0aGUgR1BVIGRhdGEgd2lsbCBub3QgYmUgZGlzcG9zZWQuXG4gICAqIFVzdWFsbHksIHRoaXMgaXMgcHJvdmlkZWQgYnkgYSBHUFUgYmFja2VuZCBmb3IgdGhlIGluZmVyZW5jZSBvdXRwdXRzLiBVc2VycyBkb24ndCBuZWVkIHRvIHByb3ZpZGUgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgYSB0ZW5zb3Igb2JqZWN0XG4gICAqL1xuICBmcm9tVGV4dHVyZTxUIGV4dGVuZHMgVGVuc29yLlRleHR1cmVEYXRhVHlwZXMgPSAnZmxvYXQzMic+KFxuICAgICAgdGV4dHVyZTogVGVuc29yLlRleHR1cmVUeXBlLCBvcHRpb25zOiBUZW5zb3JGcm9tVGV4dHVyZU9wdGlvbnM8VD4pOiBUeXBlZFRlbnNvcjwnZmxvYXQzMic+O1xuXG4gIC8qKlxuICAgKiBjcmVhdGUgYSB0ZW5zb3IgZnJvbSBhIFdlYkdQVSBidWZmZXJcbiAgICpcbiAgICogQHBhcmFtIGJ1ZmZlciAtIHRoZSBHUFVCdWZmZXIgb2JqZWN0IHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIG9iamVjdCByZXByZXNlbnRpbmcgb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGVuc29yIGZyb20gV2ViR1BVIGJ1ZmZlci5cbiAgICpcbiAgICogVGhlIG9wdGlvbnMgaW5jbHVkZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogLSBgZGF0YVR5cGVgOiB0aGUgZGF0YSB0eXBlIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGFzc3VtZSAnZmxvYXQzMicuXG4gICAqIC0gYGRpbXNgOiB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIFJlcXVpcmVkLlxuICAgKiAtIGBkb3dubG9hZGA6IGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGRvd25sb2FkIHRoZSB0ZW5zb3IgZGF0YSBmcm9tIEdQVSB0byBDUFUuIElmIG9taXR0ZWQsIHRoZSBHUFUgZGF0YVxuICAgKiB3aWxsIG5vdCBiZSBhYmxlIHRvIGRvd25sb2FkLiBVc3VhbGx5LCB0aGlzIGlzIHByb3ZpZGVkIGJ5IGEgR1BVIGJhY2tlbmQgZm9yIHRoZSBpbmZlcmVuY2Ugb3V0cHV0cy4gVXNlcnMgZG9uJ3RcbiAgICogbmVlZCB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb24uXG4gICAqIC0gYGRpc3Bvc2VgOiBhbiBvcHRpb25hbCBmdW5jdGlvbiB0byBkaXNwb3NlIHRoZSB0ZW5zb3IgZGF0YSBvbiBHUFUuIElmIG9taXR0ZWQsIHRoZSBHUFUgZGF0YSB3aWxsIG5vdCBiZSBkaXNwb3NlZC5cbiAgICogVXN1YWxseSwgdGhpcyBpcyBwcm92aWRlZCBieSBhIEdQVSBiYWNrZW5kIGZvciB0aGUgaW5mZXJlbmNlIG91dHB1dHMuIFVzZXJzIGRvbid0IG5lZWQgdG8gcHJvdmlkZSB0aGlzIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIHRlbnNvciBvYmplY3RcbiAgICovXG4gIGZyb21HcHVCdWZmZXI8VCBleHRlbmRzIFRlbnNvci5HcHVCdWZmZXJEYXRhVHlwZXM+KFxuICAgICAgYnVmZmVyOiBUZW5zb3IuR3B1QnVmZmVyVHlwZSwgb3B0aW9uczogVGVuc29yRnJvbUdwdUJ1ZmZlck9wdGlvbnM8VD4pOiBUeXBlZFRlbnNvcjxUPjtcblxuICAvKipcbiAgICogY3JlYXRlIGEgdGVuc29yIGZyb20gYSBwcmUtYWxsb2NhdGVkIGJ1ZmZlci4gVGhlIGJ1ZmZlciB3aWxsIGJlIHVzZWQgYXMgYSBwaW5uZWQgYnVmZmVyLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSAtIHRoZSB0ZW5zb3IgZWxlbWVudCB0eXBlLlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gYSBUeXBlZEFycmF5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUuXG4gICAqIEBwYXJhbSBkaW1zIC0gc3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIHRlbnNvciBvYmplY3RcbiAgICovXG4gIGZyb21QaW5uZWRCdWZmZXI8VCBleHRlbmRzIEV4Y2x1ZGU8VGVuc29yLlR5cGUsICdzdHJpbmcnPj4oXG4gICAgICB0eXBlOiBULCBidWZmZXI6IFRlbnNvci5EYXRhVHlwZU1hcFtUXSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8VD47XG59XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8qKlxuICogQSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGEgZmlsZSdzIFVSTCBvciBwYXRoLlxuICpcbiAqIFBhdGggaXMgdmFpbGFibGUgb25seSBpbiBvbm54cnVudGltZS1ub2RlIG9yIG9ubnhydW50aW1lLXdlYiBydW5uaW5nIGluIE5vZGUuanMuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbGVVcmxPclBhdGggPSBzdHJpbmc7XG5cbi8qKlxuICogQSBCbG9iIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBmaWxlLlxuICovXG5leHBvcnQgdHlwZSBGaWxlQmxvYiA9IEJsb2I7XG5cbi8qKlxuICogQSBVaW50OEFycmF5LCBBcnJheUJ1ZmZlciBvciBTaGFyZWRBcnJheUJ1ZmZlciBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgZmlsZSBjb250ZW50LlxuICpcbiAqIFdoZW4gaXQgaXMgYW4gQXJyYXlCdWZmZXIgb3IgU2hhcmVkQXJyYXlCdWZmZXIsIHRoZSB3aG9sZSBidWZmZXIgaXMgYXNzdW1lZCB0byBiZSB0aGUgZmlsZSBjb250ZW50LlxuICovXG5leHBvcnQgdHlwZSBGaWxlRGF0YSA9IFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJMaWtlO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmaWxlIHRoYXQgY2FuIGJlIGxvYWRlZCBieSB0aGUgT05OWCBSdW50aW1lIEphdmFTY3JpcHQgQVBJLlxuICovXG5leHBvcnQgdHlwZSBGaWxlVHlwZSA9IEZpbGVVcmxPclBhdGh8RmlsZUJsb2J8RmlsZURhdGE7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBleHRlcm5hbCBkYXRhIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxEYXRhRmlsZURlc2NyaXB0aW9uIHtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGV4dGVybmFsIGRhdGEgZmlsZS5cbiAgICovXG4gIGRhdGE6IEZpbGVUeXBlO1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgZmlsZSBwYXRoLlxuICAgKi9cbiAgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgZGF0YSBmaWxlLlxuICpcbiAqIFdoZW4gdXNpbmcgYSBzdHJpbmcsIGl0IHNob3VsZCBiZSBhIGZpbGUgVVJMIG9yIHBhdGggdGhhdCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG1vZGVsIGZpbGUuXG4gKi9cbmV4cG9ydCB0eXBlIEV4dGVybmFsRGF0YUZpbGVUeXBlID0gRXh0ZXJuYWxEYXRhRmlsZURlc2NyaXB0aW9ufEZpbGVVcmxPclBhdGg7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgbW9kZWwgbG9hZGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbm54TW9kZWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNwZWNpZnlpbmcgYSBsaXN0IG9mIGZpbGVzIHRoYXQgcmVwcmVzZW50cyB0aGUgZXh0ZXJuYWwgZGF0YS5cbiAgICovXG4gIGV4dGVybmFsRGF0YT86IHJlYWRvbmx5IEV4dGVybmFsRGF0YUZpbGVUeXBlW107XG59XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuL3RlbnNvci5qcyc7XG5cbmV4cG9ydCB0eXBlIE5vblRlbnNvclR5cGUgPSBuZXZlcjtcblxuLyoqXG4gKiBUeXBlIE9ubnhWYWx1ZSBSZXByZXNlbnRzIGJvdGggdGVuc29ycyBhbmQgbm9uLXRlbnNvcnMgdmFsdWUgZm9yIG1vZGVsJ3MgaW5wdXRzL291dHB1dHMuXG4gKlxuICogTk9URTogY3VycmVudGx5IG5vdCBzdXBwb3J0IG5vbi10ZW5zb3JcbiAqL1xuZXhwb3J0IHR5cGUgT25ueFZhbHVlID0gVGVuc29yfE5vblRlbnNvclR5cGU7XG5cbi8qKlxuICogVHlwZSBPbm54VmFsdWVEYXRhTG9jYXRpb24gcmVwcmVzZW50cyB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGEgb2YgYW4gT25ueFZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBPbm54VmFsdWVEYXRhTG9jYXRpb24gPSBUZW5zb3IuRGF0YUxvY2F0aW9uO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge3Jlc29sdmVCYWNrZW5kQW5kRXhlY3V0aW9uUHJvdmlkZXJzfSBmcm9tICcuL2JhY2tlbmQtaW1wbC5qcyc7XG5pbXBvcnQge1Nlc3Npb25IYW5kbGVyLCBUcmFpbmluZ1Nlc3Npb25IYW5kbGVyfSBmcm9tICcuL2JhY2tlbmQuanMnO1xuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9uIGFzIEluZmVyZW5jZVNlc3Npb259IGZyb20gJy4vaW5mZXJlbmNlLXNlc3Npb24uanMnO1xuaW1wb3J0IHtPbm54VmFsdWV9IGZyb20gJy4vb25ueC12YWx1ZS5qcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi90ZW5zb3IuanMnO1xuaW1wb3J0IHtUcmFpbmluZ1Nlc3Npb24gYXMgVHJhaW5pbmdTZXNzaW9uSW50ZXJmYWNlLCBUcmFpbmluZ1Nlc3Npb25DcmVhdGVPcHRpb25zfSBmcm9tICcuL3RyYWluaW5nLXNlc3Npb24uanMnO1xuXG50eXBlIFNlc3Npb25PcHRpb25zID0gSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucztcbnR5cGUgRmVlZHNUeXBlID0gSW5mZXJlbmNlU2Vzc2lvbi5GZWVkc1R5cGU7XG50eXBlIEZldGNoZXNUeXBlID0gSW5mZXJlbmNlU2Vzc2lvbi5GZXRjaGVzVHlwZTtcbnR5cGUgUmV0dXJuVHlwZSA9IEluZmVyZW5jZVNlc3Npb24uUmV0dXJuVHlwZTtcbnR5cGUgUnVuT3B0aW9ucyA9IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucztcblxuY29uc3Qgbm9CYWNrZW5kRXJyTXNnOiBzdHJpbmcgPSAnVHJhaW5pbmcgYmFja2VuZCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuICcgK1xuICAgICdNYWtlIHN1cmUgeW91XFwncmUgdXNpbmcgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiAmIFdlYkFzc2VtYmx5IGZpbGVzLic7XG5cbmV4cG9ydCBjbGFzcyBUcmFpbmluZ1Nlc3Npb24gaW1wbGVtZW50cyBUcmFpbmluZ1Nlc3Npb25JbnRlcmZhY2Uge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGhhbmRsZXI6IFRyYWluaW5nU2Vzc2lvbkhhbmRsZXIsIGhhc09wdGltaXplck1vZGVsOiBib29sZWFuLCBoYXNFdmFsTW9kZWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMuaGFzT3B0aW1pemVyTW9kZWwgPSBoYXNPcHRpbWl6ZXJNb2RlbDtcbiAgICB0aGlzLmhhc0V2YWxNb2RlbCA9IGhhc0V2YWxNb2RlbDtcbiAgfVxuICBwcml2YXRlIGhhbmRsZXI6IFRyYWluaW5nU2Vzc2lvbkhhbmRsZXI7XG4gIHByaXZhdGUgaGFzT3B0aW1pemVyTW9kZWw6IGJvb2xlYW47XG4gIHByaXZhdGUgaGFzRXZhbE1vZGVsOiBib29sZWFuO1xuXG4gIGdldCB0cmFpbmluZ0lucHV0TmFtZXMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIuaW5wdXROYW1lcztcbiAgfVxuICBnZXQgdHJhaW5pbmdPdXRwdXROYW1lcygpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vdXRwdXROYW1lcztcbiAgfVxuXG4gIGdldCBldmFsSW5wdXROYW1lcygpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuaGFzRXZhbE1vZGVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmV2YWxJbnB1dE5hbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdHJhaW5pbmcgc2Vzc2lvbiBoYXMgbm8gZXZhbE1vZGVsIGxvYWRlZC4nKTtcbiAgICB9XG4gIH1cbiAgZ2V0IGV2YWxPdXRwdXROYW1lcygpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuaGFzRXZhbE1vZGVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmV2YWxPdXRwdXROYW1lcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIHRyYWluaW5nIHNlc3Npb24gaGFzIG5vIGV2YWxNb2RlbCBsb2FkZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZSh0cmFpbmluZ09wdGlvbnM6IFRyYWluaW5nU2Vzc2lvbkNyZWF0ZU9wdGlvbnMsIHNlc3Npb25PcHRpb25zPzogU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxUcmFpbmluZ1Nlc3Npb24+IHtcbiAgICBjb25zdCBldmFsTW9kZWw6IHN0cmluZ3xVaW50OEFycmF5ID0gdHJhaW5pbmdPcHRpb25zLmV2YWxNb2RlbCB8fCAnJztcbiAgICBjb25zdCBvcHRpbWl6ZXJNb2RlbDogc3RyaW5nfFVpbnQ4QXJyYXkgPSB0cmFpbmluZ09wdGlvbnMub3B0aW1pemVyTW9kZWwgfHwgJyc7XG4gICAgY29uc3Qgb3B0aW9uczogU2Vzc2lvbk9wdGlvbnMgPSBzZXNzaW9uT3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIHJlc29sdmUgYmFja2VuZCwgdXBkYXRlIHNlc3Npb24gb3B0aW9ucyB3aXRoIHZhbGlkYXRlZCBFUHMsIGFuZCBjcmVhdGUgc2Vzc2lvbiBoYW5kbGVyXG4gICAgY29uc3QgW2JhY2tlbmQsIG9wdGlvbnNXaXRoVmFsaWRhdGVkRVBzXSA9IGF3YWl0IHJlc29sdmVCYWNrZW5kQW5kRXhlY3V0aW9uUHJvdmlkZXJzKG9wdGlvbnMpO1xuICAgIGlmIChiYWNrZW5kLmNyZWF0ZVRyYWluaW5nU2Vzc2lvbkhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCBiYWNrZW5kLmNyZWF0ZVRyYWluaW5nU2Vzc2lvbkhhbmRsZXIoXG4gICAgICAgICAgdHJhaW5pbmdPcHRpb25zLmNoZWNrcG9pbnRTdGF0ZSwgdHJhaW5pbmdPcHRpb25zLnRyYWluTW9kZWwsIGV2YWxNb2RlbCwgb3B0aW1pemVyTW9kZWwsXG4gICAgICAgICAgb3B0aW9uc1dpdGhWYWxpZGF0ZWRFUHMpO1xuICAgICAgcmV0dXJuIG5ldyBUcmFpbmluZ1Nlc3Npb24oaGFuZGxlciwgISF0cmFpbmluZ09wdGlvbnMub3B0aW1pemVyTW9kZWwsICEhdHJhaW5pbmdPcHRpb25zLmV2YWxNb2RlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihub0JhY2tlbmRFcnJNc2cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHJ1blRyYWluU3RlcCBhbmQgZnV0dXJlIHJ1blN0ZXAgbWV0aG9kcyB0aGF0IGhhbmRsZXMgdGhlIHR5cGUtbmFycm93aW5nIGNvbnZlcnNpb24gZnJvbVxuICAgKiB0aGUgZ2l2ZW4gcGFyYW1ldGVycyB0byBTZXNzaW9uSGFuZGxlci5GZXRjaGVzVHlwZSBhbmQgUnVuT3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGlucHV0TmFtZXMgdGhlIGZlZWRzIG9iamVjdCBpcyBjaGVja2VkIHRoYXQgdGhleSBjb250YWluIGFsbCBpbnB1dCBuYW1lcyBpbiB0aGUgcHJvdmlkZWQgbGlzdCBvZiBpbnB1dFxuICAgKiBuYW1lcy5cbiAgICogQHBhcmFtIG91dHB1dE5hbWVzIHRoZSBmZXRjaGVzIG9iamVjdCBpcyBjaGVja2VkIHRoYXQgdGhlaXIga2V5cyBtYXRjaCB1cCB3aXRoIHZhbGlkIG5hbWVzIGluIHRoZSBsaXN0IG9mIG91dHB1dFxuICAgKiBuYW1lcy5cbiAgICogQHBhcmFtIGZlZWRzIHRoZSByZXF1aXJlZCBpbnB1dFxuICAgKiBAcGFyYW0gYXJnMSBuYXJyb3dlZCAmIGNvbnZlcnRlZCBpbnRvIHRoZSBTZXNzaW9uSGFuZGxlci5GZXRjaGVzVHlwZSBvciBSdW5PcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0gYXJnMiBvcHRpb25hbCBSdW5PcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnNcbiAgICovXG4gIHR5cGVOYXJyb3dpbmdGb3JSdW5TdGVwKFxuICAgICAgaW5wdXROYW1lczogcmVhZG9ubHkgc3RyaW5nW10sIG91dHB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXSwgZmVlZHM6IEZlZWRzVHlwZSwgYXJnMT86IEZldGNoZXNUeXBlfFJ1bk9wdGlvbnMsXG4gICAgICBhcmcyPzogUnVuT3B0aW9ucyk6IFtTZXNzaW9uSGFuZGxlci5GZXRjaGVzVHlwZSwgUnVuT3B0aW9uc10ge1xuICAgIGNvbnN0IGZldGNoZXM6IHtbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlfG51bGx9ID0ge307XG4gICAgbGV0IG9wdGlvbnM6IFJ1bk9wdGlvbnMgPSB7fTtcbiAgICAvLyBjaGVjayBpbnB1dHNcbiAgICBpZiAodHlwZW9mIGZlZWRzICE9PSAnb2JqZWN0JyB8fCBmZWVkcyA9PT0gbnVsbCB8fCBmZWVkcyBpbnN0YW5jZW9mIFRlbnNvciB8fCBBcnJheS5pc0FycmF5KGZlZWRzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnXFwnZmVlZHNcXCcgbXVzdCBiZSBhbiBvYmplY3QgdGhhdCB1c2UgaW5wdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLicpO1xuICAgIH1cblxuICAgIGxldCBpc0ZldGNoZXNFbXB0eSA9IHRydWU7XG4gICAgLy8gZGV0ZXJtaW5lIHdoaWNoIG92ZXJyaWRlIGlzIGJlaW5nIHVzZWRcbiAgICBpZiAodHlwZW9mIGFyZzEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoYXJnMSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIGFyZ3VtZW50WzFdOiBjYW5ub3QgYmUgbnVsbC4nKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcxIGluc3RhbmNlb2YgVGVuc29yKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2ZldGNoZXNcXCcgY2Fubm90IGJlIGEgVGVuc29yJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZzEpKSB7XG4gICAgICAgIGlmIChhcmcxLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2ZldGNoZXNcXCcgY2Fubm90IGJlIGFuIGVtcHR5IGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICAgIGlzRmV0Y2hlc0VtcHR5ID0gZmFsc2U7XG4gICAgICAgIC8vIG91dHB1dCBuYW1lc1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgYXJnMSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2ZldGNoZXNcXCcgbXVzdCBiZSBhIHN0cmluZyBhcnJheSBvciBhbiBvYmplY3QuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvdXRwdXROYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCdmZXRjaGVzJyBjb250YWlucyBpbnZhbGlkIG91dHB1dCBuYW1lOiAke25hbWV9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmZXRjaGVzW25hbWVdID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ29iamVjdCcgJiYgYXJnMiAhPT0gbnVsbCkge1xuICAgICAgICAgIG9wdGlvbnMgPSBhcmcyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ29wdGlvbnNcXCcgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlY2lkZSB3aGV0aGVyIGFyZzEgaXMgZmV0Y2hlcyBvciBvcHRpb25zXG4gICAgICAgIC8vIGlmIGFueSBvdXRwdXQgbmFtZSBpcyBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgdmFsaWQgT25ueFZhbHVlLCB3ZSBjb25zaWRlciBpdCBmZXRjaGVzXG4gICAgICAgIGxldCBpc0ZldGNoZXMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgYXJnMUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcmcxKTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIG91dHB1dE5hbWVzKSB7XG4gICAgICAgICAgaWYgKGFyZzFLZXlzLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gKGFyZzEgYXMgSW5mZXJlbmNlU2Vzc2lvbi5OdWxsYWJsZU9ubnhWYWx1ZU1hcFR5cGUpW25hbWVdO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwgfHwgdiBpbnN0YW5jZW9mIFRlbnNvcikge1xuICAgICAgICAgICAgICBpc0ZldGNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgICBpc0ZldGNoZXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICBmZXRjaGVzW25hbWVdID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGZXRjaGVzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhcmcyID09PSAnb2JqZWN0JyAmJiBhcmcyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gYXJnMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnb3B0aW9uc1xcJyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucyA9IGFyZzEgYXMgUnVuT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZzEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIGFyZ3VtZW50WzFdOiBtdXN0IGJlIFxcJ2ZldGNoZXNcXCcgb3IgXFwnb3B0aW9uc1xcJy4nKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBhbGwgaW5wdXRzIGFyZSBpbiBmZWVkXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGlucHV0TmFtZXMpIHtcbiAgICAgIGlmICh0eXBlb2YgZmVlZHNbbmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5wdXQgJyR7bmFtZX0nIGlzIG1pc3NpbmcgaW4gJ2ZlZWRzJy5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBubyBmZXRjaGVzIGlzIHNwZWNpZmllZCwgd2UgdXNlIHRoZSBmdWxsIG91dHB1dCBuYW1lcyBsaXN0XG4gICAgaWYgKGlzRmV0Y2hlc0VtcHR5KSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygb3V0cHV0TmFtZXMpIHtcbiAgICAgICAgZmV0Y2hlc1tuYW1lXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtmZXRjaGVzLCBvcHRpb25zXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBydW5UcmFpblN0ZXAgYW5kIGFueSBvdGhlciBydW5TdGVwIG1ldGhvZHMuIFRha2VzIHRoZSBSZXR1cm5UeXBlIHJlc3VsdCBmcm9tIHRoZSBTZXNzaW9uSGFuZGxlclxuICAgKiBhbmQgY2hhbmdlcyBpdCBpbnRvIGEgbWFwIG9mIFRlbnNvcnMuXG4gICAqXG4gICAqIEBwYXJhbSByZXN1bHRzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBjb252ZXJ0SGFuZGxlclJldHVyblR5cGVUb01hcE9mVGVuc29ycyhyZXN1bHRzOiBTZXNzaW9uSGFuZGxlci5SZXR1cm5UeXBlKTogUmV0dXJuVHlwZSB7XG4gICAgY29uc3QgcmV0dXJuVmFsdWU6IHtbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlfSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIHJlc3VsdHMpIHtcbiAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHRzLCBrZXkpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNba2V5XTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFRlbnNvcikge1xuICAgICAgICAgIHJldHVyblZhbHVlW2tleV0gPSByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuVmFsdWVba2V5XSA9IG5ldyBUZW5zb3IocmVzdWx0LnR5cGUsIHJlc3VsdC5kYXRhLCByZXN1bHQuZGltcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgYXN5bmMgbGF6eVJlc2V0R3JhZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmhhbmRsZXIubGF6eVJlc2V0R3JhZCgpO1xuICB9XG5cbiAgcnVuVHJhaW5TdGVwKGZlZWRzOiBGZWVkc1R5cGUsIG9wdGlvbnM/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSZXR1cm5UeXBlPjtcbiAgcnVuVHJhaW5TdGVwKGZlZWRzOiBGZWVkc1R5cGUsIGZldGNoZXM6IEZldGNoZXNUeXBlLCBvcHRpb25zPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UmV0dXJuVHlwZT47XG4gIGFzeW5jIHJ1blRyYWluU3RlcChmZWVkczogRmVlZHNUeXBlLCBhcmcxPzogRmV0Y2hlc1R5cGV8UnVuT3B0aW9ucywgYXJnMj86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJldHVyblR5cGU+IHtcbiAgICBjb25zdCBbZmV0Y2hlcywgb3B0aW9uc10gPVxuICAgICAgICB0aGlzLnR5cGVOYXJyb3dpbmdGb3JSdW5TdGVwKHRoaXMudHJhaW5pbmdJbnB1dE5hbWVzLCB0aGlzLnRyYWluaW5nT3V0cHV0TmFtZXMsIGZlZWRzLCBhcmcxLCBhcmcyKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5oYW5kbGVyLnJ1blRyYWluU3RlcChmZWVkcywgZmV0Y2hlcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY29udmVydEhhbmRsZXJSZXR1cm5UeXBlVG9NYXBPZlRlbnNvcnMocmVzdWx0cyk7XG4gIH1cblxuICBhc3luYyBydW5PcHRpbWl6ZXJTdGVwKG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnN8dW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGFzT3B0aW1pemVyTW9kZWwpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlci5ydW5PcHRpbWl6ZXJTdGVwKG9wdGlvbnMgfHwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgVHJhaW5pbmdTZXNzaW9uIGhhcyBubyBPcHRpbWl6ZXJNb2RlbCBsb2FkZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgcnVuRXZhbFN0ZXAoZmVlZHM6IEZlZWRzVHlwZSwgb3B0aW9ucz86IFJ1bk9wdGlvbnN8dW5kZWZpbmVkKTogUHJvbWlzZTxSZXR1cm5UeXBlPjtcbiAgcnVuRXZhbFN0ZXAoZmVlZHM6IEZlZWRzVHlwZSwgZmV0Y2hlczogRmV0Y2hlc1R5cGUsIG9wdGlvbnM/OiBSdW5PcHRpb25zfHVuZGVmaW5lZCk6IFByb21pc2U8UmV0dXJuVHlwZT47XG4gIGFzeW5jIHJ1bkV2YWxTdGVwKGZlZWRzOiBGZWVkc1R5cGUsIGFyZzE/OiBGZXRjaGVzVHlwZXxSdW5PcHRpb25zLCBhcmcyPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UmV0dXJuVHlwZT4ge1xuICAgIGlmICh0aGlzLmhhc0V2YWxNb2RlbCkge1xuICAgICAgY29uc3QgW2ZldGNoZXMsIG9wdGlvbnNdID1cbiAgICAgICAgICB0aGlzLnR5cGVOYXJyb3dpbmdGb3JSdW5TdGVwKHRoaXMuZXZhbElucHV0TmFtZXMsIHRoaXMuZXZhbE91dHB1dE5hbWVzLCBmZWVkcywgYXJnMSwgYXJnMik7XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5oYW5kbGVyLnJ1bkV2YWxTdGVwKGZlZWRzLCBmZXRjaGVzLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRIYW5kbGVyUmV0dXJuVHlwZVRvTWFwT2ZUZW5zb3JzKHJlc3VsdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgVHJhaW5pbmdTZXNzaW9uIGhhcyBubyBFdmFsTW9kZWwgbG9hZGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFBhcmFtZXRlcnNTaXplKHRyYWluYWJsZU9ubHkgPSB0cnVlKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmdldFBhcmFtZXRlcnNTaXplKHRyYWluYWJsZU9ubHkpO1xuICB9XG5cbiAgYXN5bmMgbG9hZFBhcmFtZXRlcnNCdWZmZXIoYXJyYXk6IFVpbnQ4QXJyYXksIHRyYWluYWJsZU9ubHkgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyYW1zU2l6ZSA9IGF3YWl0IHRoaXMuZ2V0UGFyYW1ldGVyc1NpemUodHJhaW5hYmxlT25seSk7XG4gICAgLy8gY2hlY2tpbmcgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgVWludDhBcnJheSBpcyBlcXVpdmFsZW50IHRvIHRoZSBieXRlIGxlbmd0aCBvZiBhIEZsb2F0MzJBcnJheSBvZiB0aGUgbnVtYmVyXG4gICAgLy8gb2YgcGFyYW1ldGVyc1xuICAgIGlmIChhcnJheS5sZW5ndGggIT09IDQgKiBwYXJhbXNTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NpemUgb2YgdGhlIGJ1ZmZlciBwYXNzZWQgaW50byBsb2FkUGFyYW1ldGVyc0J1ZmZlciBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpbiAnICtcbiAgICAgICAgICAndGhlIG1vZGVsLiBQbGVhc2UgdXNlIGdldFBhcmFtZXRlcnNTaXplIG1ldGhvZCB0byBjaGVjay4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5sb2FkUGFyYW1ldGVyc0J1ZmZlcihhcnJheSwgdHJhaW5hYmxlT25seSk7XG4gIH1cblxuICBhc3luYyBnZXRDb250aWd1b3VzUGFyYW1ldGVycyh0cmFpbmFibGVPbmx5ID0gdHJ1ZSk6IFByb21pc2U8T25ueFZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5nZXRDb250aWd1b3VzUGFyYW1ldGVycyh0cmFpbmFibGVPbmx5KTtcbiAgfVxuXG4gIGFzeW5jIHJlbGVhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5kaXNwb3NlKCk7XG4gIH1cbn1cbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9ufSBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLmpzJztcbmltcG9ydCB7T25ueFZhbHVlfSBmcm9tICcuL29ubngtdmFsdWUuanMnO1xuaW1wb3J0IHtUcmFpbmluZ1Nlc3Npb24gYXMgVHJhaW5pbmdTZXNzaW9uSW1wbH0gZnJvbSAnLi90cmFpbmluZy1zZXNzaW9uLWltcGwuanMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkZWNsYXJlICovXG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBUcmFpbmluZ1Nlc3Npb24ge1xuICAvKipcbiAgICogRWl0aGVyIFVSSSBmaWxlIHBhdGggKHN0cmluZykgb3IgVWludDhBcnJheSBjb250YWluaW5nIG1vZGVsIG9yIGNoZWNrcG9pbnQgaW5mb3JtYXRpb24uXG4gICAqL1xuICB0eXBlIFVyaU9yQnVmZmVyID0gc3RyaW5nfFVpbnQ4QXJyYXk7XG59XG5cbi8qKlxuICogUmVwcmVzZW50IGEgcnVudGltZSBpbnN0YW5jZSBvZiBhbiBPTk5YIHRyYWluaW5nIHNlc3Npb24sXG4gKiB3aGljaCBjb250YWlucyBhIG1vZGVsIHRoYXQgY2FuIGJlIHRyYWluZWQsIGFuZCwgb3B0aW9uYWxseSxcbiAqIGFuIGV2YWwgYW5kIG9wdGltaXplciBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFpbmluZ1Nlc3Npb24ge1xuICAvLyAjcmVnaW9uIHJ1bigpXG5cbiAgLyoqXG4gICAqIExhemlseSByZXNldHMgdGhlIGdyYWRpZW50cyBvZiBhbGwgdHJhaW5hYmxlIHBhcmFtZXRlcnMgdG8gemVyby4gU2hvdWxkIGhhcHBlbiBhZnRlciB0aGUgaW52b2NhdGlvbiBvZlxuICAgKiBydW5PcHRpbWl6ZXJTdGVwLlxuICAgKi9cbiAgbGF6eVJlc2V0R3JhZCgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBSdW4gVHJhaW5TdGVwIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGdpdmVuIGZlZWRzIGFuZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gZmVlZHMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgaW5wdXQuIFNlZSB0eXBlIGRlc2NyaXB0aW9uIG9mIGBJbmZlcmVuY2VTZXNzaW9uLklucHV0VHlwZWAgZm9yXG4gICBkZXRhaWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgbW9kZWwgdHJhaW5pbmcuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgbWFwLCB3aGljaCB1c2VzIG91dHB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgYXMgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAqL1xuICBydW5UcmFpblN0ZXAoZmVlZHM6IEluZmVyZW5jZVNlc3Npb24uRmVlZHNUeXBlLCBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTpcbiAgICAgIFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbi5SZXR1cm5UeXBlPjtcblxuICAvKipcbiAgICogUnVuIGEgc2luZ2xlIHRyYWluIHN0ZXAgd2l0aCB0aGUgZ2l2ZW4gaW5wdXRzIGFuZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gZmVlZHMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgaW5wdXQuXG4gICAqIEBwYXJhbSBmZXRjaGVzIC0gUmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG91dHB1dC5cbiAgICogZGV0YWlsLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsLiBBIHNldCBvZiBvcHRpb25zIHRoYXQgY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIG1vZGVsIHRyYWluaW5nLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG1hcCwgd2hpY2ggdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmdcbiAgIHZhbHVlcy5cbiAgICovXG4gIHJ1blRyYWluU3RlcChcbiAgICAgIGZlZWRzOiBJbmZlcmVuY2VTZXNzaW9uLkZlZWRzVHlwZSwgZmV0Y2hlczogSW5mZXJlbmNlU2Vzc2lvbi5GZXRjaGVzVHlwZSxcbiAgICAgIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24uUmV0dXJuVHlwZT47XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBzaW5nbGUgb3B0aW1pemVyIHN0ZXAsIHdoaWNoIHBlcmZvcm1zIHdlaWdodCB1cGRhdGVzIGZvciB0aGUgdHJhaW5hYmxlIHBhcmFtZXRlcnMgdXNpbmcgdGhlIG9wdGltaXplciBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbC4gQSBzZXQgb2Ygb3B0aW9ucyB0aGF0IGNvbnRyb2xzIHRoZSBiZWhhdmlvciBvZiBtb2RlbCBvcHRpbWl6aW5nLlxuICAgKi9cbiAgcnVuT3B0aW1pemVyU3RlcChvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUnVuIGEgc2luZ2xlIGV2YWwgc3RlcCB3aXRoIHRoZSBnaXZlbiBpbnB1dHMgYW5kIG9wdGlvbnMgdXNpbmcgdGhlIGV2YWwgbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSBmZWVkcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBpbnB1dC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbC4gQSBzZXQgb2Ygb3B0aW9ucyB0aGF0IGNvbnRyb2xzIHRoZSBiZWhhdmlvciBvZiBtb2RlbCBldmFsIHN0ZXAuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgbWFwLCB3aGljaCB1c2VzIG91dHB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgYXMgY29ycmVzcG9uZGluZ1xuICAgdmFsdWVzLlxuICAgKi9cbiAgcnVuRXZhbFN0ZXAoZmVlZHM6IEluZmVyZW5jZVNlc3Npb24uRmVlZHNUeXBlLCBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTpcbiAgICAgIFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbi5SZXR1cm5UeXBlPjtcblxuICAvKipcbiAgICogUnVuIGEgc2luZ2xlIGV2YWwgc3RlcCB3aXRoIHRoZSBnaXZlbiBpbnB1dHMgYW5kIG9wdGlvbnMgdXNpbmcgdGhlIGV2YWwgbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSBmZWVkcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBpbnB1dC5cbiAgICogQHBhcmFtIGZldGNoZXMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb3V0cHV0LlxuICAgKiBkZXRhaWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgbW9kZWwgZXZhbCBzdGVwLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG1hcCwgd2hpY2ggdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmdcbiAgIHZhbHVlcy5cbiAgICovXG4gIHJ1bkV2YWxTdGVwKFxuICAgICAgZmVlZHM6IEluZmVyZW5jZVNlc3Npb24uRmVlZHNUeXBlLCBmZXRjaGVzOiBJbmZlcmVuY2VTZXNzaW9uLkZldGNoZXNUeXBlLFxuICAgICAgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbi5SZXR1cm5UeXBlPjtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBjb3B5IHBhcmFtZXRlcnNcblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBzaXplIG9mIGFsbCBwYXJhbWV0ZXJzIGZvciB0aGUgdHJhaW5pbmcgc3RhdGUuIENhbGN1bGF0ZXMgdGhlIHRvdGFsIG51bWJlciBvZiBwcmltaXRpdmUgKGRhdGF0eXBlIG9mXG4gICAqIHRoZSBwYXJhbWV0ZXJzKSBlbGVtZW50cyBvZiBhbGwgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIHRyYWluaW5nIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0gdHJhaW5hYmxlT25seSAtIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBzaXplIGlzIGNhbGN1bGF0ZWQgZm9yIHRyYWluYWJsZSBwYXJhbXMgb25seS4gRGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgZ2V0UGFyYW1ldGVyc1NpemUodHJhaW5hYmxlT25seTogYm9vbGVhbik6IFByb21pc2U8bnVtYmVyPjtcblxuICAvKipcbiAgICogQ29waWVzIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gYnVmZmVyIHRvIHRoZSB0cmFpbmluZyBzdGF0ZS4gQ3VycmVudGx5LCBvbmx5IHN1cHBvcnRpbmcgbW9kZWxzIHdpdGhcbiAgICogcGFyYW1ldGVycyBvZiB0eXBlIEZsb2F0MzIuXG4gICAqXG4gICAqIEBwYXJhbSBidWZmZXIgLSBBIFVpbnQ4QXJyYXkgcmVwcmVzZW50YXRpb24gb2YgRmxvYXQzMiBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0gdHJhaW5hYmxlT25seSAtIFRydWUgaWYgdHJhaW5hYmxlIHBhcmFtZXRlcnMgb25seSB0byBiZSBtb2RpZmllZCwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqL1xuICBsb2FkUGFyYW1ldGVyc0J1ZmZlcihidWZmZXI6IFVpbnQ4QXJyYXksIHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBDb3BpZXMgdGhlIG1vZGVsIHBhcmFtZXRlcnMgdG8gYSBjb250aWd1b3VzIGJ1ZmZlci4gVXN1YWxseSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIEZlZGVyYXRlZCBMZWFybmluZy5cbiAgICogQ3VycmVudGx5LCBvbmx5IHN1cHBvcnRpbmcgbW9kZWxzIHdpdGggcGFyYW1ldGVycyBvZiB0eXBlIEZsb2F0MzIuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFpbmFibGVPbmx5IC0gV2hlbiBzZXQgdG8gdHJ1ZSwgb25seSB0cmFpbmFibGUgcGFyYW1ldGVycyBhcmUgY29waWVkLiBUcmFpbmFibGUgcGFyYW1ldGVycyBhcmUgcGFyYW1ldGVyc1xuICAgKiBmb3Igd2hpY2ggcmVxdWlyZXNfZ3JhZCBpcyBzZXQgdG8gdHJ1ZS4gRGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEZsb2F0MzIgT25ueFZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgcGFyYW1ldGVycy5cbiAgICovXG4gIGdldENvbnRpZ3VvdXNQYXJhbWV0ZXJzKHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPE9ubnhWYWx1ZT47XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHJlbGVhc2UoKVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlIHRoZSBpbmZlcmVuY2Ugc2Vzc2lvbiBhbmQgdGhlIHVuZGVybHlpbmcgcmVzb3VyY2VzLlxuICAgKi9cbiAgcmVsZWFzZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBtZXRhZGF0YVxuXG4gIC8qKlxuICAgKiBHZXQgaW5wdXQgbmFtZXMgb2YgdGhlIGxvYWRlZCB0cmFpbmluZyBtb2RlbC5cbiAgICovXG4gIHJlYWRvbmx5IHRyYWluaW5nSW5wdXROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdldCBvdXRwdXQgbmFtZXMgb2YgdGhlIGxvYWRlZCB0cmFpbmluZyBtb2RlbC5cbiAgICovXG4gIHJlYWRvbmx5IHRyYWluaW5nT3V0cHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHZXQgaW5wdXQgbmFtZXMgb2YgdGhlIGxvYWRlZCBldmFsIG1vZGVsLiBJcyBhbiBlbXB0eSBhcnJheSBpZiBubyBldmFsIG1vZGVsIGlzIGxvYWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGV2YWxJbnB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogR2V0IG91dHB1dCBuYW1lcyBvZiB0aGUgbG9hZGVkIGV2YWwgbW9kZWwuIElzIGFuIGVtcHR5IGFycmF5IGlmIG5vIGV2YWwgbW9kZWwgaXMgbG9hZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXZhbE91dHB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvLyAjZW5kcmVnaW9uXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgb3B0aW9uYWwgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBwYXNzZWQgaW50byB0aGUgVHJhaW5pbmdTZXNzaW9uRmFjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFpbmluZ1Nlc3Npb25DcmVhdGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVSSSBvciBidWZmZXIgZm9yIGEgLmNrcHQgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBjaGVja3BvaW50IGZvciB0aGUgdHJhaW5pbmcgbW9kZWwuXG4gICAqL1xuICBjaGVja3BvaW50U3RhdGU6IFRyYWluaW5nU2Vzc2lvbi5VcmlPckJ1ZmZlcjtcbiAgLyoqXG4gICAqIFVSSSBvciBidWZmZXIgZm9yIHRoZSAub25ueCB0cmFpbmluZyBmaWxlLlxuICAgKi9cbiAgdHJhaW5Nb2RlbDogVHJhaW5pbmdTZXNzaW9uLlVyaU9yQnVmZmVyO1xuICAvKipcbiAgICogT3B0aW9uYWwuIFVSSSBvciBidWZmZXIgZm9yIHRoZSAub25ueCBvcHRpbWl6ZXIgbW9kZWwgZmlsZS5cbiAgICovXG4gIG9wdGltaXplck1vZGVsPzogVHJhaW5pbmdTZXNzaW9uLlVyaU9yQnVmZmVyO1xuICAvKipcbiAgICogT3B0aW9uYWwuIFVSSSBvciBidWZmZXIgZm9yIHRoZSAub25ueCBldmFsIG1vZGVsIGZpbGUuXG4gICAqL1xuICBldmFsTW9kZWw/OiBUcmFpbmluZ1Nlc3Npb24uVXJpT3JCdWZmZXI7XG59XG5cbi8qKlxuICogRGVmaW5lcyBtZXRob2Qgb3ZlcmxvYWQgcG9zc2liaWxpdGllcyBmb3IgY3JlYXRpbmcgYSBUcmFpbmluZ1Nlc3Npb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaW5pbmdTZXNzaW9uRmFjdG9yeSB7XG4gIC8vICNyZWdpb24gY3JlYXRlKClcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBUcmFpbmluZ1Nlc3Npb24gYW5kIGFzeW5jaHJvbm91c2x5IGxvYWRzIGFueSBtb2RlbHMgcGFzc2VkIGluIHRocm91Z2ggdHJhaW5pbmdPcHRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB0cmFpbmluZ09wdGlvbnMgc3BlY2lmeSBtb2RlbHMgYW5kIGNoZWNrcG9pbnRzIHRvIGxvYWQgaW50byB0aGUgVHJhaW5pbmcgU2Vzc2lvblxuICAgKiBAcGFyYW0gc2Vzc2lvbk9wdGlvbnMgc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciB0cmFpbmluZyBzZXNzaW9uIGJlaGF2aW9yXG4gICAqXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIFRyYWluaW5nU2Vzc2lvbiBvYmplY3RcbiAgICovXG4gIGNyZWF0ZSh0cmFpbmluZ09wdGlvbnM6IFRyYWluaW5nU2Vzc2lvbkNyZWF0ZU9wdGlvbnMsIHNlc3Npb25PcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPFRyYWluaW5nU2Vzc2lvbj47XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgVHJhaW5pbmdTZXNzaW9uOiBUcmFpbmluZ1Nlc3Npb25GYWN0b3J5ID0gVHJhaW5pbmdTZXNzaW9uSW1wbDtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuLyoqXG4gKiAjIE9OTlggUnVudGltZSBKYXZhU2NyaXB0IEFQSVxuICpcbiAqIE9OTlggUnVudGltZSBKYXZhU2NyaXB0IEFQSSBpcyBhIHVuaWZpZWQgQVBJIGZvciBhbGwgSmF2YVNjcmlwdCB1c2FnZXMsIGluY2x1ZGluZyB0aGUgZm9sbG93aW5nIE5QTSBwYWNrYWdlczpcbiAqXG4gKiAtIFtvbm54cnVudGltZS1ub2RlXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9vbm54cnVudGltZS1ub2RlKVxuICogLSBbb25ueHJ1bnRpbWUtd2ViXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9vbm54cnVudGltZS13ZWIpXG4gKiAtIFtvbm54cnVudGltZS1yZWFjdC1uYXRpdmVdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL29ubnhydW50aW1lLXJlYWN0LW5hdGl2ZSlcbiAqXG4gKiBTZWUgYWxzbzpcbiAqIC0gW0dldCBTdGFydGVkXShodHRwczovL29ubnhydW50aW1lLmFpL2RvY3MvZ2V0LXN0YXJ0ZWQvd2l0aC1qYXZhc2NyaXB0LylcbiAqIC0gW0luZmVyZW5jZSBleGFtcGxlc10oaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9vbm54cnVudGltZS1pbmZlcmVuY2UtZXhhbXBsZXMvdHJlZS9tYWluL2pzKVxuICpcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vYmFja2VuZC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vudi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuc29yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuc29yLWNvbnZlcnNpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5zb3ItZmFjdG9yeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RyYWNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb25ueC1tb2RlbC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29ubngtdmFsdWUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFpbmluZy1zZXNzaW9uLmpzJztcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtFbnZ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7bG9nTGV2ZWxTdHJpbmdUb0VudW19IGZyb20gJy4uL3dhc20tY29tbW9uJztcblxudHlwZSBMb2dMZXZlbCA9IE5vbk51bGxhYmxlPEVudlsnbG9nTGV2ZWwnXT47XG50eXBlIE1lc3NhZ2VTdHJpbmcgPSBzdHJpbmc7XG50eXBlIE1lc3NhZ2VGdW5jdGlvbiA9ICgpID0+IHN0cmluZztcbnR5cGUgTWVzc2FnZSA9IE1lc3NhZ2VTdHJpbmd8TWVzc2FnZUZ1bmN0aW9uO1xuXG5jb25zdCBsb2dMZXZlbFByZWZpeCA9IFsnVicsICdJJywgJ1cnLCAnRScsICdGJ107XG5cbmNvbnN0IGRvTG9nID0gKGxldmVsOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhgWyR7bG9nTGV2ZWxQcmVmaXhbbGV2ZWxdfSwke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX1dJHttZXNzYWdlfWApO1xufTtcblxubGV0IGNvbmZpZ0xvZ0xldmVsOiBMb2dMZXZlbHx1bmRlZmluZWQ7XG5sZXQgZGVidWc6IGJvb2xlYW58dW5kZWZpbmVkO1xuXG5leHBvcnQgY29uc3QgY29uZmlndXJlTG9nZ2VyID0gKCRjb25maWdMb2dMZXZlbDogTG9nTGV2ZWwsICRkZWJ1ZzogYm9vbGVhbik6IHZvaWQgPT4ge1xuICBjb25maWdMb2dMZXZlbCA9ICRjb25maWdMb2dMZXZlbDtcbiAgZGVidWcgPSAkZGVidWc7XG59O1xuXG4vKipcbiAqIEEgc2ltcGxlIGxvZ2dpbmcgdXRpbGl0eSB0byBsb2cgbWVzc2FnZXMgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0cgPSAobG9nTGV2ZWw6IExvZ0xldmVsLCBtc2c6IE1lc3NhZ2UpOiB2b2lkID0+IHtcbiAgY29uc3QgbWVzc2FnZUxldmVsID0gbG9nTGV2ZWxTdHJpbmdUb0VudW0obG9nTGV2ZWwpO1xuICBjb25zdCBjb25maWdMZXZlbCA9IGxvZ0xldmVsU3RyaW5nVG9FbnVtKGNvbmZpZ0xvZ0xldmVsKTtcbiAgaWYgKG1lc3NhZ2VMZXZlbCA+PSBjb25maWdMZXZlbCkge1xuICAgIGRvTG9nKG1lc3NhZ2VMZXZlbCwgdHlwZW9mIG1zZyA9PT0gJ2Z1bmN0aW9uJyA/IG1zZygpIDogbXNnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBIHNpbXBsZSBsb2dnaW5nIHV0aWxpdHkgdG8gbG9nIG1lc3NhZ2VzIHRvIHRoZSBjb25zb2xlLiBPbmx5IGxvZ3Mgd2hlbiBkZWJ1ZyBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgY29uc3QgTE9HX0RFQlVHOiB0eXBlb2YgTE9HID0gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIExPRz4pID0+IHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgTE9HKC4uLmFyZ3MpO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHt0ZW5zb3JUeXBlVG9UeXBlZEFycmF5Q29uc3RydWN0b3J9IGZyb20gJy4uL3dhc20tY29tbW9uJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpZXcgPSAoZGF0YUJ1ZmZlcjogQXJyYXlCdWZmZXIsIHR5cGU6IFRlbnNvci5UeXBlKTogSW50MzJBcnJheXxVaW50MzJBcnJheXxCaWdJbnQ2NEFycmF5fFxuICAgIEJpZ1VpbnQ2NEFycmF5fFVpbnQ4QXJyYXl8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQ4QXJyYXl8SW50MTZBcnJheXxVaW50MTZBcnJheSA9PlxuICAgICAgICBuZXcgKHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0eXBlKSkoZGF0YUJ1ZmZlcik7XG5cbi8qKlxuICogYSBUZW5zb3JWaWV3IGRvZXMgbm90IG93biB0aGUgZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JWaWV3IHtcbiAgcmVhZG9ubHkgZGF0YTogbnVtYmVyO1xuICByZWFkb25seSBkYXRhVHlwZTogbnVtYmVyO1xuICByZWFkb25seSBkaW1zOiByZWFkb25seSBudW1iZXJbXTtcblxuICAvKipcbiAgICogZ2V0IGEgRmxvYXQzMkFycmF5IGRhdGEgdmlldyBvZiB0aGUgdGVuc29yIGRhdGEuIHRlbnNvciBkYXRhIG11c3QgYmUgb24gQ1BVLlxuICAgKi9cbiAgZ2V0RmxvYXQzMkFycmF5KCk6IEZsb2F0MzJBcnJheTtcblxuICAvKipcbiAgICogZ2V0IGEgQmlnSW50NjRBcnJheSBkYXRhIHZpZXcgb2YgdGhlIHRlbnNvciBkYXRhLiB0ZW5zb3IgZGF0YSBtdXN0IGJlIG9uIENQVS5cbiAgICovXG4gIGdldEJpZ0ludDY0QXJyYXkoKTogQmlnSW50NjRBcnJheTtcblxuICAvKipcbiAgICogZ2V0IGEgSW50MzJBcnJheSBkYXRhIHZpZXcgb2YgdGhlIHRlbnNvciBkYXRhLiB0ZW5zb3IgZGF0YSBtdXN0IGJlIG9uIENQVS5cbiAgICovXG4gIGdldEludDMyQXJyYXkoKTogSW50MzJBcnJheTtcblxuICAvKipcbiAgICogY3JlYXRlIGEgbmV3IHRlbnNvciB2aWV3IHdpdGggdGhlIHNhbWUgZGF0YSBidXQgZGlmZmVyZW50IGRpbWVuc2lvbnMuXG4gICAqL1xuICByZXNoYXBlKG5ld0RpbXM6IHJlYWRvbmx5IG51bWJlcltdKTogVGVuc29yVmlldztcbn1cbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi90ZW5zb3Itdmlldyc7XG5cbmltcG9ydCB7U2hhZGVySGVscGVyfSBmcm9tICcuL29wcy9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBTZXNzaW9uU3RhdGUgPSAnZGVmYXVsdCd8J2NhcHR1cmluZyd8J3JlcGxheWluZyc7XG5cbmV4cG9ydCBlbnVtIEdwdURhdGFUeXBlIHtcbiAgZGVmYXVsdCA9IDAsXG4gIHVwbG9hZCA9IDEsXG4gIHByb2ZpbGUgPSAyXG59XG5leHBvcnQgdHlwZSBHcHVEYXRhSWQgPSBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIEdwdUFyY2hpdGVjdHVyZSA9ICdhbXBlcmUnO1xuZXhwb3J0IHR5cGUgR3B1VmVuZG9yID0gJ2FtZCd8J2ludGVsJ3wnbnZpZGlhJztcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckluZm8ge1xuICBpc0FyY2hpdGVjdHVyZTogKGFyY2hpdGVjdHVyZTogR3B1QXJjaGl0ZWN0dXJlKSA9PiBib29sZWFuO1xuICBpc1ZlbmRvcjogKHZlbmRvcjogR3B1VmVuZG9yKSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdwdURhdGEge1xuICB0eXBlOiBHcHVEYXRhVHlwZTtcbiAgaWQ6IEdwdURhdGFJZDtcbiAgYnVmZmVyOiBHUFVCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29ySW5mbyB7XG4gIGRpbXM6IHJlYWRvbmx5IG51bWJlcltdO1xuICBkYXRhVHlwZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyYW1Vbmlmb3JtIHtcbiAgdHlwZTogRGF0YVR5cGU7XG4gIGRhdGE6IG51bWJlcnxyZWFkb25seSBudW1iZXJbXTtcbn1cblxuZXhwb3J0IHR5cGUgUHJvZ3JhbVVuaWZvcm1WYXJpYWJsZUluZm8gPSBbdHlwZTogRGF0YVR5cGUsIGxlbmd0aDogbnVtYmVyXTtcblxuLyoqXG4gKiBSZXByZXNlbnQgdGhlIGRlcGVuZGVuY3kgb2YgYSBwcm9ncmFtIG9uIGEgc3BlY2lmaWMgaW5wdXQgdGVuc29yLlxuICpcbiAqIC0gJ25vbmUnOiB0aGUgc2hhZGVyL3VuaWZvcm0gZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMgaW5wdXQncyBpbmZvXG4gKiAtICd0eXBlJzogdGhlIHNoYWRlci91bmlmb3JtIGRlcGVuZHMgb24gZGF0YSB0eXBlIG9mIHRoaXMgaW5wdXRcbiAqIC0gJ3JhbmsnOiB0aGUgc2hhZGVyL3VuaWZvcm0gZGVwZW5kcyBvbiBkYXRhIHR5cGUgYW5kIHRoZSByYW5rIG9mIHRoaXMgaW5wdXRcbiAqIC0gJ2RpbXMnOiB0aGUgc2hhZGVyL3VuaWZvcm0gZGVwZW5kcyBvbiBkYXRhIHR5cGUgYW5kIHRoZSBkaW1zIG9mIHRoaXMgaW5wdXRcbiAqIC0gJ2RhdGEnOiB0aGUgc2hhZGVyL3VuaWZvcm0gZGVwZW5kcyBvbiBkYXRhIHR5cGUsIHRoZSBkaW1zIGFuZCB0aGUgZGF0YSBvZiB0aGlzIGlucHV0XG4gKi9cbmV4cG9ydCB0eXBlIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5ID0gJ25vbmUnfCd0eXBlJ3wncmFuayd8J2RpbXMnfCdkYXRhJztcblxuLyoqXG4gKiBSZXByZXNlbnQgaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9ncmFtJ3MgY2FjaGUgZm9yIHNoYWRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9ncmFtU2hhZGVyQ2FjaGVJbmZvIHtcbiAgLyoqXG4gICAqIGFuIG9wdGlvbmFsIHN0cmluZyBhcyBhIGNhY2hlIGhpbnQgaW4gdGhlIGFydGlmYWN0IGNhY2hlLiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjYWNoZSBoaW50IHdpbGwgYmUgZW1wdHkuXG4gICAqXG4gICAqIFRoaXMgaGludCBzdHJpbmcgc2hvdWxkIG9ubHkgY29udGFpbnMgaW5pdGlhbGl6aW5nLXRpbWUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGF0dHJpYnV0ZXMgb3IgYW55IGluZm9ybWF0aW9uIG9mXG4gICAqIGluaXRpYWxpemVycy4gSXQgc2hvdWxkIE5PVCBjb250YWluIGFueSBydW50aW1lIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBzaGFwZSBvZiBpbnB1dHMuXG4gICAqL1xuICBoaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBhbiBvcHRpb25hbCBsaXN0IG9mIGRlcGVuZGVuY2llcyBvZiB0aGUgcHJvZ3JhbSBvbiB0aGUgaW5wdXQgdGVuc29ycy4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgcHJvZ3JhbSBkZXBlbmRzXG4gICAqIG9uICdkaW1zJyBvZiBhbGwgaW5wdXRzLlxuICAgKi9cbiAgaW5wdXREZXBlbmRlbmNpZXM/OiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCBpbmZvcm1hdGlvbiBhYm91dCBhIHByb2dyYW0ncyBjYWNoZSBmb3IgdW5pZm9ybS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9ncmFtVW5pZm9ybUNhY2hlSW5mbyB7XG4gIC8qKlxuICAgKiBhbiBvcHRpb25hbCBzdHJpbmcgYXMgYSBjYWNoZSBoaW50IGluIHRoZSB1bmlmb3JtIGNhY2hlLiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjYWNoZSBoaW50IHdpbGwgYmUgZW1wdHkuXG4gICAqXG4gICAqIFRoaXMgaGludCBzdHJpbmcgc2hvdWxkIG9ubHkgY29udGFpbnMgcnVudGltZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgc2hhcGUgb2YgaW5wdXRzLlxuICAgKi9cbiAgaGludD86IHN0cmluZztcblxuICAvKipcbiAgICogYW4gb3B0aW9uYWwgbGlzdCBvZiBkZXBlbmRlbmNpZXMgb2YgdGhlIHByb2dyYW0gb24gdGhlIGlucHV0IHRlbnNvcnMuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCwgdGhlIHByb2dyYW0gZGVwZW5kc1xuICAgKiBvbiAnbm9uZScgb2YgYWxsIGlucHV0cy5cbiAgICovXG4gIGlucHV0RGVwZW5kZW5jaWVzPzogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXTtcbn1cblxuXG4vKipcbiAqIEEgc2V0IG9mIGRhdGEgdGhhdCByZXByZXNlbnQgYSBzaGFkZXIgcHJvZ3JhbVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyYW1JbmZvIHtcbiAgLyoqXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtLiB1c2VkIGZvciBkZWJ1Z2dpbmcgYW5kIHByb2ZpbGluZ1xuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBhbiBvcHRpb25hbCBvYmplY3QgZGVzY3JpYmluZyB0aGUgY2FjaGUgaW5mb3JtYXRpb24gb2YgdGhlIHByb2dyYW0gc2hhZGVyLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIGFzc3VtZSBoaW50IGlzIGVtcHR5IGFuZCBpbnB1dERlcGVuZGVuY2llcyBhcmUgWydkaW1zJ10gZm9yIGFsbCBpbnB1dHMuXG4gICAqL1xuICBzaGFkZXJDYWNoZT86IFByb2dyYW1TaGFkZXJDYWNoZUluZm87XG5cbiAgLyoqXG4gICAqIHRoZSBzaGFkZXIncyBwcm9jZXNzaW5nIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gc2hhZGVyIGNhY2hlIG1pc3NlZC5cbiAgICovXG4gIGdldFNoYWRlclNvdXJjZTogKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gZ2V0IHJ1biBkYXRhIHJlcXVpcmVkIHRvIHJ1biB0aGUgcHJvZ3JhbS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBwcm9ncmFtIGlzIGV4ZWN1dGVkLiBTaG91bGQga2VlcCB0aGlzIGZ1bmN0aW9uIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS5cbiAgICovXG4gIGdldFJ1bkRhdGE6IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSkgPT4ge1xuICAgIG91dHB1dHM6IHJlYWRvbmx5IFRlbnNvckluZm9bXTtcbiAgICBkaXNwYXRjaEdyb3VwOiB7eDogbnVtYmVyOyB5PzogbnVtYmVyOyB6PzogbnVtYmVyfTtcbiAgICBwcm9ncmFtVW5pZm9ybXM/OiByZWFkb25seSBQcm9ncmFtVW5pZm9ybVtdO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFydGlmYWN0IHtcbiAgcHJvZ3JhbUluZm86IFByb2dyYW1JbmZvO1xuICBjb21wdXRlUGlwZWxpbmU6IEdQVUNvbXB1dGVQaXBlbGluZTtcbiAgdW5pZm9ybVZhcmlhYmxlc0luZm86IHJlYWRvbmx5IFByb2dyYW1Vbmlmb3JtVmFyaWFibGVJbmZvW118dW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVDb250ZXh0SW5wdXRzT3V0cHV0c01hcHBpbmcge1xuICAvKipcbiAgICogc3BlY2lmeSB0aGUgbWFwcGluZyB0byB0aGUgcHJvZ3JhbSdzIGlucHV0cy4gdGhlIHZhbHVlIGNhbiBiZSBhIG51bWJlciBvciBhIHRlbnNvciB2aWV3LlxuICAgKiAtIGlmIGl0J3MgYSBudW1iZXIsIGl0J3MgdGhlIGluZGV4IG9mIHRoZSBrZXJuZWwncyBpbnB1dFxuICAgKiAtIGlmIGl0J3MgYSB0ZW5zb3IgdmlldywgaXQncyBhbiBleGlzdGluZyB0ZW5zb3IgdmlldyB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXRcbiAgICpcbiAgICogaWYgaW5wdXRzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBtYXBwaW5nIHdpbGwgYmUgdGhlIGtlcm5lbCdzIGlucHV0cyBpbiBvcmRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0cz86IFJlYWRvbmx5QXJyYXk8VGVuc29yVmlld3xudW1iZXI+O1xuICAvKipcbiAgICogc3BlY2lmeSB0aGUgbWFwcGluZyB0byB0aGUgcHJvZ3JhbSdzIG91dHB1dHMuIHRoZSB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLlxuICAgKiAtIGlmIGl0J3MgYSBub24tbmVnYXRpdmUgbnVtYmVyLCBpdCdzIHRoZSBpbmRleCBvZiB0aGUga2VybmVsJ3Mgb3V0cHV0XG4gICAqIC0gaWYgaXQncyAtMSwgaXQncyBhbiBvdXRwdXQgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgYXMgYSB0ZW1wb3JhcnkgdmFsdWUuIHRoaXMgdmFsdWUgd2lsbCBiZSByZWxlYXNlZCBhZnRlclxuICAgKiB0aGUga2VybmVsIGlzIGV4ZWN1dGVkLlxuICAgKiAtIGlmIGl0J3MgLTIsIGl0J3MgYW4gb3V0cHV0IHRoYXQgd2lsbCBiZSBjcmVhdGVkIGFzIGEgcGVyc2lzdGVudCB2YWx1ZS4gdGhpcyB2YWx1ZSB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlXG4gICAqIGtlcm5lbCBpcyByZWxlYXNlZC5cbiAgICpcbiAgICogaWYgb3V0cHV0cyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbWFwcGluZyB3aWxsIGJlIHRoZSBrZXJuZWwncyBvdXRwdXRzIGluIG9yZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0cz86IHJlYWRvbmx5IG51bWJlcltdO1xufVxuXG4vKipcbiAqIEEgQ29tcHV0ZUNvbnRleHQgaW5zdGFuY2UgY2FycmllcyB0aGUgc3RhdGVzIHRoYXQgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHJ1bm5pbmcgb2YgYSBrZXJuZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZUNvbnRleHQge1xuICAvKipcbiAgICogZ3B1IGFkYXB0ZXIgaW5mb1xuICAgKi9cbiAgcmVhZG9ubHkgYWRhcHRlckluZm86IEFkYXB0ZXJJbmZvO1xuXG4gIC8qKlxuICAgKiBzdG9yZXMgdGhlIHBvaW50ZXIgdG8gT3BLZXJuZWxDb250ZXh0XG4gICAqL1xuICByZWFkb25seSBvcEtlcm5lbENvbnRleHQ6IG51bWJlcjtcblxuICAvKipcbiAgICogYSBsaXN0IG9mIGlucHV0cywgZWFjaCBpbnB1dCBpcyBhbiBpbnN0YW5jZSBvZiBUZW5zb3JWaWV3XG4gICAqL1xuICByZWFkb25seSBpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXTtcblxuICAvKipcbiAgICogYSBjdXN0b20gZGF0YSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhbnkgZGF0YSB0aGF0IGlzIG5lZWRlZCBieSB0aGUga2VybmVsXG4gICAqL1xuICByZWFkb25seSBrZXJuZWxDdXN0b21EYXRhOiB7W2tleTogc3RyaW5nXTogdW5rbm93bn07XG5cbiAgLyoqXG4gICAqIGEgYnVmZmVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIGN1c3RvbSBkYXRhIGNyZWF0ZWQgZWFjaCB0aW1lIHRoZSBrZXJuZWwgaXMgZXhlY3V0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbURhdGFCdWZmZXI6IFVpbnQ4QXJyYXk7XG5cbiAgLyoqXG4gICAqIGEgbnVtYmVyIG9mIG91dHB1dHMgZm9yIHRoZSBub2RlXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRDb3VudDogbnVtYmVyO1xuXG4gIGNvbXB1dGUocHJvZ3JhbTogUHJvZ3JhbUluZm8sIGlucHV0c091dHB1dHNNYXBwaW5nPzogQ29tcHV0ZUNvbnRleHRJbnB1dHNPdXRwdXRzTWFwcGluZyk6IFRlbnNvclZpZXdbXTtcbiAgb3V0cHV0KGluZGV4OiBudW1iZXIsIGRpbXM6IHJlYWRvbmx5IG51bWJlcltdKTogbnVtYmVyO1xuICBnZXRNYXhDb21wdXRlV29ya2dyb3VwU2l6ZXMoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBnZXRNYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZXNpemUoKTogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBUaW1lc3RhbXBRdWVyeSA9ICdub25lJ3wnaW5zaWRlLXBhc3Nlcyd8J2F0LXBhc3Nlcyc7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7V2ViR3B1QmFja2VuZH0gZnJvbSAnLi4vYmFja2VuZC13ZWJncHUnO1xuaW1wb3J0IHtMT0dfREVCVUd9IGZyb20gJy4uL2xvZyc7XG5cbmltcG9ydCB7R3B1RGF0YSwgR3B1RGF0YUlkLCBHcHVEYXRhVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogbWFuYWdlcyBHcHVEYXRhSWQgLT4gR3B1QnVmZmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3B1RGF0YU1hbmFnZXIge1xuICAvKipcbiAgICogY29weSBkYXRhIGZyb20gQ1BVIHRvIEdQVS5cbiAgICovXG4gIHVwbG9hZChpZDogR3B1RGF0YUlkLCBkYXRhOiBVaW50OEFycmF5KTogdm9pZDtcbiAgLyoqXG4gICAqIGNvcHkgZGF0YSBmcm9tIEdQVSB0byBHUFUuXG4gICAqL1xuICBtZW1jcHkoc291cmNlSWQ6IEdwdURhdGFJZCwgZGVzdGluYXRpb25JZDogR3B1RGF0YUlkKTogdm9pZDtcbiAgLyoqXG4gICAqIGNyZWF0ZSBuZXcgZGF0YSBvbiBHUFUuXG4gICAqL1xuICBjcmVhdGUoc2l6ZTogbnVtYmVyLCB1c2FnZT86IG51bWJlcik6IEdwdURhdGE7XG4gIC8qKlxuICAgKiBnZXQgR1BVIGRhdGEgYnkgSUQuXG4gICAqL1xuICBnZXQoaWQ6IEdwdURhdGFJZCk6IEdwdURhdGF8dW5kZWZpbmVkO1xuICAvKipcbiAgICogcmVsZWFzZSB0aGUgZGF0YSBvbiBHUFUgYnkgSUQuXG4gICAqXG4gICAqIEByZXR1cm4gc2l6ZSBvZiB0aGUgZGF0YSByZWxlYXNlZFxuICAgKi9cbiAgcmVsZWFzZShpZDogR3B1RGF0YUlkKTogbnVtYmVyO1xuICAvKipcbiAgICogY29weSBkYXRhIGZyb20gR1BVIHRvIENQVS5cbiAgICovXG4gIGRvd25sb2FkKGlkOiBHcHVEYXRhSWQsIGdldFRhcmdldEJ1ZmZlcjogKCkgPT4gVWludDhBcnJheSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIHJlZnJlc2ggdGhlIGJ1ZmZlcnMgdGhhdCBtYXJrZWQgZm9yIHJlbGVhc2UuXG4gICAqXG4gICAqIHdoZW4gcmVsZWFzZSgpIGlzIGNhbGxlZCwgdGhlIGJ1ZmZlciBpcyBub3QgcmVsZWFzZWQgaW1tZWRpYXRlbHkuIHRoaXMgaXMgYmVjYXVzZSB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBjb21tYW5kc1xuICAgKiB0byBiZSBzdWJtaXR0ZWQgdG8gdGhlIEdQVS4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbW1hbmRzIGFyZSBzdWJtaXR0ZWQgc28gdGhhdCB0aGUgYnVmZmVycyBjYW4gYmVcbiAgICogYWN0dWFsbHkgcmVsZWFzZWQuXG4gICAqL1xuICByZWZyZXNoUGVuZGluZ0J1ZmZlcnMoKTogdm9pZDtcblxuICAvKipcbiAgICogcmVnaXN0ZXIgYW4gZXh0ZXJuYWwgYnVmZmVyIGZvciBJTyBCaW5kaW5nLiBJZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCwgcmV0dXJuIHRoZSBleGlzdGluZyBHUFUgZGF0YSBJRC5cbiAgICpcbiAgICogR1BVIGRhdGEgbWFuYWdlciBvbmx5IG1hbmFnZXMgYSBtYXBwaW5nIGJldHdlZW4gdGhlIGJ1ZmZlciBhbmQgdGhlIEdQVSBkYXRhIElELiBJdCB3aWxsIG5vdCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZlxuICAgKiB0aGUgZXh0ZXJuYWwgYnVmZmVyLlxuICAgKi9cbiAgcmVnaXN0ZXJFeHRlcm5hbEJ1ZmZlcihidWZmZXI6IEdQVUJ1ZmZlciwgb3JpZ2luYWxTaXplOiBudW1iZXIsIHByZXZpb3VzQnVmZmVyPzogR1BVQnVmZmVyKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB1bnJlZ2lzdGVyIGFuIGV4dGVybmFsIGJ1ZmZlciBmb3IgSU8gQmluZGluZy5cbiAgICovXG4gIHVucmVnaXN0ZXJFeHRlcm5hbEJ1ZmZlcihidWZmZXI6IEdQVUJ1ZmZlcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIGRlc3Ryb3kgYWxsIGdwdSBidWZmZXJzLlxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiByZWxlYXNlIHNlc3Npb24gcmVsYXRlZCBkYXRhLlxuICAgKiBAcGFyYW0gc2Vzc2lvbklkIC0gc3BlY2lmeSB0aGUgc2Vzc2lvbiBJRC5cbiAgICovXG4gIG9uUmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgU3RvcmFnZUNhY2hlVmFsdWUge1xuICBncHVEYXRhOiBHcHVEYXRhO1xuICBvcmlnaW5hbFNpemU6IG51bWJlcjtcbn1cblxuY29uc3QgYnVja2V0RnJlZWxpc3Q6IE1hcDxudW1iZXIsIG51bWJlcj4gPSBuZXcgTWFwKFtcbiAgWzY0LCAyNTBdLFxuICBbMTI4LCAyMDBdLFxuICBbMjU2LCAyMDBdLFxuICBbNTEyLCAyMDBdLFxuICBbMjA0OCwgMjMwXSxcbiAgWzQwOTYsIDIwMF0sXG4gIFs4MTkyLCA1MF0sXG4gIFsxNjM4NCwgNTBdLFxuICBbMzI3NjgsIDUwXSxcbiAgWzY1NTM2LCA1MF0sXG4gIFsxMzEwNzIsIDUwXSxcbiAgWzI2MjE0NCwgNTBdLFxuICBbNTI0Mjg4LCA1MF0sXG4gIFsxMDQ4NTc2LCA1MF0sXG4gIFsyMDk3MTUyLCAzMF0sXG4gIFs0MTk0MzA0LCAyMF0sXG4gIFs4Mzg4NjA4LCAxMF0sXG4gIFsxMjU4MjkxMiwgMTBdLFxuICBbMTY3NzcyMTYsIDEwXSxcbiAgWzI2MjE0NDAwLCAxNV0sXG4gIFszMzU1NDQzMiwgMjJdLFxuICBbNDQyMzY4MDAsIDJdLFxuICBbNTg5ODI0MDAsIDZdLFxuICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIHRoZSBidWNrZXQgc2l6ZXMgYmVsb3cgYnV0IG5vdCBjYWNoaW5nIHRoZW1cbiAgLy8gcmVzdWx0cyBpbiBzb21lIG1ham9yIHBlcmZvcm1hbmNlIGhpdHMgZm9yIG1vZGVscyBsaWtlIHNkLXR1cmJvLlxuICBbNjcxMDg4NjQsIDZdLFxuICBbMTM0MjE3NzI4LCA2XSxcbiAgWzE2Nzc3MjE2MCwgNl0sXG5dKTtcblxuY29uc3QgYnVja2V0QXJyOiBudW1iZXJbXSA9IFtdO1xuXG4vKipcbiAqIG5vcm1hbGl6ZSB0aGUgYnVmZmVyIHNpemUgc28gdGhhdCBpdCBmaXRzIHRoZSAxMjgtYml0cyAoMTYgYnl0ZXMpIGFsaWdubWVudC5cbiAqL1xuY29uc3QgY2FsY05vcm1hbGl6ZWRCdWZmZXJTaXplID0gKHNpemU6IG51bWJlcikgPT4gTWF0aC5jZWlsKHNpemUgLyAxNikgKiAxNjtcblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIGJ1ZmZlciBzaXplIHNvIHRoYXQgaXQgZml0cyBpbnRvIGJ1Y2tldHMuXG4gKi9cbmNvbnN0IGNhbGNCdWNrZXRCdWZmZXJTaXplID0gKHNpemU6IG51bWJlcikgPT4ge1xuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBidWNrZXRBcnIubGVuZ3RoOyBpZHgrKykge1xuICAgIGNvbnN0IHNpemVGb3JCdWNrZXQgPSBidWNrZXRBcnJbaWR4XTtcbiAgICBpZiAoc2l6ZSA8PSBzaXplRm9yQnVja2V0KSB7XG4gICAgICByZXR1cm4gc2l6ZUZvckJ1Y2tldDtcbiAgICB9XG4gIH1cbiAgLy8gbm90IGluIGJ1Y2tldCBsaXN0IC0+IGNhbGxlciB3aWxsIG5vdCBjYWNoZSwgcm91bmQgdXAgdG8gMTYuXG4gIHJldHVybiBNYXRoLmNlaWwoc2l6ZSAvIDE2KSAqIDE2O1xufTtcblxubGV0IGd1aWQgPSAxO1xuY29uc3QgY3JlYXRlTmV3R3B1RGF0YUlkID0gKCkgPT4gZ3VpZCsrO1xuXG4vKipcbiAqIGV4cG9ydGVkIHN0YW5kYXJkIGRvd25sb2FkIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHNlc3Npb24gdG8gZG93bmxvYWQgdGhlIGRhdGEgZnJvbSBHUFUsIGFuZCBhbHNvIGJ5XG4gKiBmYWN0b3J5IHRvIGNyZWF0ZSBHUFUgdGVuc29ycyB3aXRoIHRoZSBjYXBhY2l0eSBvZiBkb3dubG9hZGluZyBkYXRhIGZyb20gR1BVLlxuICpcbiAqIEBwYXJhbSBiYWNrZW5kIC0gdGhlIFdlYkdQVSBiYWNrZW5kXG4gKiBAcGFyYW0gZ3B1QnVmZmVyIC0gdGhlIEdQVSBidWZmZXIgdG8gZG93bmxvYWRcbiAqIEBwYXJhbSBvcmlnaW5hbFNpemUgLSB0aGUgb3JpZ2luYWwgc2l6ZSBvZiB0aGUgZGF0YVxuICogQHBhcmFtIGdldFRhcmdldEJ1ZmZlciAtIG9wdGlvbmFsLiBJZiBwcm92aWRlZCwgdGhlIGRhdGEgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIHRhcmdldCBidWZmZXIuIE90aGVyd2lzZSwgYSBuZXcgYnVmZmVyXG4gKiB3aWxsIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgZG93bmxvYWRHcHVEYXRhID1cbiAgICBhc3luYyhiYWNrZW5kOiBXZWJHcHVCYWNrZW5kLCBncHVCdWZmZXI6IEdQVUJ1ZmZlciwgb3JpZ2luYWxTaXplOiBudW1iZXIsIGdldFRhcmdldEJ1ZmZlcj86ICgpID0+IFVpbnQ4QXJyYXkpOlxuICAgICAgICBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgICAgICAgICBjb25zdCBidWZmZXJTaXplID0gY2FsY05vcm1hbGl6ZWRCdWZmZXJTaXplKG9yaWdpbmFsU2l6ZSk7XG4gICAgICAgICAgY29uc3QgZ3B1UmVhZEJ1ZmZlciA9IGJhY2tlbmQuZGV2aWNlLmNyZWF0ZUJ1ZmZlcihcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgICAge3NpemU6IGJ1ZmZlclNpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gYmFja2VuZC5nZXRDb21tYW5kRW5jb2RlcigpO1xuICAgICAgICAgICAgYmFja2VuZC5lbmRDb21wdXRlUGFzcygpO1xuICAgICAgICAgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKFxuICAgICAgICAgICAgICAgIGdwdUJ1ZmZlciAvKiBzb3VyY2UgYnVmZmVyICovLCAwIC8qIHNvdXJjZSBvZmZzZXQgKi8sIGdwdVJlYWRCdWZmZXIgLyogZGVzdGluYXRpb24gYnVmZmVyICovLFxuICAgICAgICAgICAgICAgIDAgLyogZGVzdGluYXRpb24gb2Zmc2V0ICovLCBidWZmZXJTaXplIC8qIHNpemUgKi9cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBiYWNrZW5kLmZsdXNoKCk7XG5cbiAgICAgICAgICAgIGF3YWl0IGdwdVJlYWRCdWZmZXIubWFwQXN5bmMoR1BVTWFwTW9kZS5SRUFEKTtcblxuICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBncHVSZWFkQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgICAgICBpZiAoZ2V0VGFyZ2V0QnVmZmVyKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIENQVSBidWZmZXIgdG8gYWNjZXB0IHRoZSBkYXRhLCBubyBuZWVkIHRvIGNsb25lIHRoZSBBcnJheUJ1ZmZlci5cbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0QnVmZmVyID0gZ2V0VGFyZ2V0QnVmZmVyKCk7XG4gICAgICAgICAgICAgIHRhcmdldEJ1ZmZlci5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIsIDAsIG9yaWdpbmFsU2l6ZSkpO1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0QnVmZmVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gdGhlIG1hcHBlZCBBcnJheUJ1ZmZlciB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIEdQVSBidWZmZXIgaXMgZGVzdHJveWVkLiBOZWVkIHRvIGNsb25lIHRoZVxuICAgICAgICAgICAgICAvLyBBcnJheUJ1ZmZlci5cbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLnNsaWNlKDAsIG9yaWdpbmFsU2l6ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBncHVSZWFkQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbmNsYXNzIEdwdURhdGFNYW5hZ2VySW1wbCBpbXBsZW1lbnRzIEdwdURhdGFNYW5hZ2VyIHtcbiAgLy8gR1BVIERhdGEgSUQgPT4gR1BVIERhdGEgKCBzdG9yYWdlIGJ1ZmZlciApXG4gIHByaXZhdGUgc3RvcmFnZUNhY2hlOiBNYXA8R3B1RGF0YUlkLCBTdG9yYWdlQ2FjaGVWYWx1ZT47XG5cbiAgLy8gcGVuZGluZyBidWZmZXJzIGZvciB1cGxvYWRpbmcgKCBkYXRhIGlzIHVubWFwcGVkIClcbiAgcHJpdmF0ZSBidWZmZXJzRm9yVXBsb2FkaW5nUGVuZGluZzogR1BVQnVmZmVyW107XG4gIC8vIHBlbmRpbmcgYnVmZmVycyBmb3IgY29tcHV0aW5nXG4gIHByaXZhdGUgYnVmZmVyc1BlbmRpbmc6IEdQVUJ1ZmZlcltdO1xuXG4gIC8vIFRoZSByZXVzYWJsZSBzdG9yYWdlIGJ1ZmZlcnMgZm9yIGNvbXB1dGluZy5cbiAgcHJpdmF0ZSBmcmVlQnVmZmVyczogTWFwPG51bWJlciwgR1BVQnVmZmVyW10+O1xuICAvLyBUaGUgcmV1c2FibGUgdW5pZm9ybSBidWZmZXJzXG4gIHByaXZhdGUgZnJlZVVuaWZvcm1CdWZmZXJzOiBNYXA8bnVtYmVyLCBHUFVCdWZmZXJbXT47XG5cbiAgLy8gVGhlIGV4dGVybmFsIGJ1ZmZlcnMgcmVnaXN0ZXJlZCB1c2VycyBmb3IgSU8gQmluZGluZy5cbiAgcHJpdmF0ZSBleHRlcm5hbEJ1ZmZlcnM6IE1hcDxHUFVCdWZmZXIsIEdwdURhdGFJZD47XG5cbiAgLy8gVGhlIHBlbmRpbmdCdWZmZXJzIGZvciBjYXB0dXJlIGdyYXBoLlxuICAvLyBhIFNlc3Npb25JRCAtPiBHUFVCdWZmZXJbXSBtYXBwaW5nLlxuICBwcml2YXRlIGNhcHR1cmVkUGVuZGluZ0J1ZmZlcnM6IE1hcDxudW1iZXIsIEdQVUJ1ZmZlcltdPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhY2tlbmQ6IFdlYkdwdUJhY2tlbmQpIHtcbiAgICB0aGlzLnN0b3JhZ2VDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmZyZWVCdWZmZXJzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZnJlZVVuaWZvcm1CdWZmZXJzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuYnVmZmVyc0ZvclVwbG9hZGluZ1BlbmRpbmcgPSBbXTtcbiAgICB0aGlzLmJ1ZmZlcnNQZW5kaW5nID0gW107XG4gICAgdGhpcy5leHRlcm5hbEJ1ZmZlcnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jYXB0dXJlZFBlbmRpbmdCdWZmZXJzID0gbmV3IE1hcCgpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBdIG9mIGJ1Y2tldEZyZWVsaXN0KSB7XG4gICAgICBidWNrZXRBcnIucHVzaChrZXkpO1xuICAgICAgdGhpcy5mcmVlQnVmZmVycy5zZXQoa2V5LCBbXSk7XG4gICAgICB0aGlzLmZyZWVVbmlmb3JtQnVmZmVycy5zZXQoa2V5LCBbXSk7XG4gICAgfVxuICB9XG5cbiAgdXBsb2FkKGlkOiBHcHVEYXRhSWQsIGRhdGE6IFVpbnQ4QXJyYXkpOiB2b2lkIHtcbiAgICBjb25zdCBzcmNBcnJheUJ1ZmZlciA9IGRhdGEuYnVmZmVyO1xuICAgIGNvbnN0IHNyY09mZnNldCA9IGRhdGEuYnl0ZU9mZnNldDtcbiAgICBjb25zdCBzcmNMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgY29uc3Qgc2l6ZSA9IGNhbGNOb3JtYWxpemVkQnVmZmVyU2l6ZShzcmNMZW5ndGgpO1xuXG4gICAgLy8gZ2V0IGRlc3RpbmF0aW9uIGdwdSBidWZmZXJcbiAgICBjb25zdCBncHVEYXRhQ2FjaGUgPSB0aGlzLnN0b3JhZ2VDYWNoZS5nZXQoaWQpO1xuICAgIGlmICghZ3B1RGF0YUNhY2hlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dwdSBkYXRhIGZvciB1cGxvYWRpbmcgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG4gICAgaWYgKGdwdURhdGFDYWNoZS5vcmlnaW5hbFNpemUgIT09IHNyY0xlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbmNvbnNpc3RlbnQgZGF0YSBzaXplLiBncHUgZGF0YSBzaXplPSR7Z3B1RGF0YUNhY2hlLm9yaWdpbmFsU2l6ZX0sIGRhdGEgc2l6ZT0ke3NyY0xlbmd0aH1gKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgZ3B1IGJ1ZmZlclxuICAgIGNvbnN0IGdwdUJ1ZmZlckZvclVwbG9hZGluZyA9IHRoaXMuYmFja2VuZC5kZXZpY2UuY3JlYXRlQnVmZmVyKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICB7bWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSwgc2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDfSk7XG5cbiAgICAvLyBjb3B5ICh1cGxvYWQpIGRhdGFcbiAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGdwdUJ1ZmZlckZvclVwbG9hZGluZy5nZXRNYXBwZWRSYW5nZSgpO1xuICAgIG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKS5zZXQobmV3IFVpbnQ4QXJyYXkoc3JjQXJyYXlCdWZmZXIsIHNyY09mZnNldCwgc3JjTGVuZ3RoKSk7XG4gICAgZ3B1QnVmZmVyRm9yVXBsb2FkaW5nLnVubWFwKCk7XG5cblxuICAgIC8vIEdQVSBjb3B5XG4gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSB0aGlzLmJhY2tlbmQuZ2V0Q29tbWFuZEVuY29kZXIoKTtcbiAgICB0aGlzLmJhY2tlbmQuZW5kQ29tcHV0ZVBhc3MoKTtcbiAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoZ3B1QnVmZmVyRm9yVXBsb2FkaW5nLCAwLCBncHVEYXRhQ2FjaGUuZ3B1RGF0YS5idWZmZXIsIDAsIHNpemUpO1xuXG4gICAgTE9HX0RFQlVHKCd2ZXJib3NlJywgKCkgPT4gYFtXZWJHUFVdIEdwdURhdGFNYW5hZ2VyLnVwbG9hZChpZD0ke2lkfSlgKTtcblxuICAgIHRoaXMuYnVmZmVyc0ZvclVwbG9hZGluZ1BlbmRpbmcucHVzaChncHVCdWZmZXJGb3JVcGxvYWRpbmcpO1xuICB9XG5cbiAgbWVtY3B5KHNvdXJjZUlkOiBHcHVEYXRhSWQsIGRlc3RpbmF0aW9uSWQ6IEdwdURhdGFJZCk6IHZvaWQge1xuICAgIC8vIGdldCBzb3VyY2UgZ3B1IGJ1ZmZlclxuICAgIGNvbnN0IHNvdXJjZUdwdURhdGFDYWNoZSA9IHRoaXMuc3RvcmFnZUNhY2hlLmdldChzb3VyY2VJZCk7XG4gICAgaWYgKCFzb3VyY2VHcHVEYXRhQ2FjaGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlIGdwdSBkYXRhIGZvciBtZW1jcHkgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG4gICAgLy8gZ2V0IGRlc3RpbmF0aW9uIGdwdSBidWZmZXJcbiAgICBjb25zdCBkZXN0aW5hdGlvbkdwdURhdGFDYWNoZSA9IHRoaXMuc3RvcmFnZUNhY2hlLmdldChkZXN0aW5hdGlvbklkKTtcbiAgICBpZiAoIWRlc3RpbmF0aW9uR3B1RGF0YUNhY2hlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Rlc3RpbmF0aW9uIGdwdSBkYXRhIGZvciBtZW1jcHkgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG4gICAgaWYgKHNvdXJjZUdwdURhdGFDYWNoZS5vcmlnaW5hbFNpemUgIT09IGRlc3RpbmF0aW9uR3B1RGF0YUNhY2hlLm9yaWdpbmFsU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvbnNpc3RlbnQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBncHUgZGF0YSBzaXplJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2l6ZSA9IGNhbGNOb3JtYWxpemVkQnVmZmVyU2l6ZShzb3VyY2VHcHVEYXRhQ2FjaGUub3JpZ2luYWxTaXplKTtcblxuICAgIC8vIEdQVSBjb3B5XG4gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSB0aGlzLmJhY2tlbmQuZ2V0Q29tbWFuZEVuY29kZXIoKTtcbiAgICB0aGlzLmJhY2tlbmQuZW5kQ29tcHV0ZVBhc3MoKTtcbiAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoXG4gICAgICAgIHNvdXJjZUdwdURhdGFDYWNoZS5ncHVEYXRhLmJ1ZmZlciwgMCwgZGVzdGluYXRpb25HcHVEYXRhQ2FjaGUuZ3B1RGF0YS5idWZmZXIsIDAsIHNpemUpO1xuICB9XG5cbiAgcmVnaXN0ZXJFeHRlcm5hbEJ1ZmZlcihidWZmZXI6IEdQVUJ1ZmZlciwgb3JpZ2luYWxTaXplOiBudW1iZXIsIHByZXZpb3VzQnVmZmVyPzogR1BVQnVmZmVyKTogbnVtYmVyIHtcbiAgICBsZXQgaWQ6IG51bWJlcnx1bmRlZmluZWQ7XG4gICAgaWYgKHByZXZpb3VzQnVmZmVyKSB7XG4gICAgICBpZCA9IHRoaXMuZXh0ZXJuYWxCdWZmZXJzLmdldChwcmV2aW91c0J1ZmZlcik7XG4gICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZXZpb3VzIGJ1ZmZlciBpcyBub3QgcmVnaXN0ZXJlZCcpO1xuICAgICAgfVxuICAgICAgaWYgKGJ1ZmZlciA9PT0gcHJldmlvdXNCdWZmZXIpIHtcbiAgICAgICAgTE9HX0RFQlVHKFxuICAgICAgICAgICAgJ3ZlcmJvc2UnLFxuICAgICAgICAgICAgKCkgPT4gYFtXZWJHUFVdIEdwdURhdGFNYW5hZ2VyLnJlZ2lzdGVyRXh0ZXJuYWxCdWZmZXIoc2l6ZT0ke29yaWdpbmFsU2l6ZX0pID0+IGlkPSR7XG4gICAgICAgICAgICAgICAgaWR9LCBidWZmZXIgaXMgdGhlIHNhbWUsIHNraXAuYCk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5iYWNrZW5kLmNhcHR1cmVkQ29tbWFuZExpc3QuaGFzKHRoaXMuYmFja2VuZC5jdXJyZW50U2Vzc2lvbklkISkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWdpc3RlcmluZyBhIGRpZmZlcmVudCBleHRlcm5hbCBidWZmZXIgdW5kZXIgZ3JhcGggY2FwdHVyZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LlxuICAgICAgICAgICAgIFBsZWFzZSB1c2UgdGhlIHByZXZpb3VzIGV4dGVybmFsIGJ1ZmZlciFgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXh0ZXJuYWxCdWZmZXJzLmRlbGV0ZShwcmV2aW91c0J1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkID0gY3JlYXRlTmV3R3B1RGF0YUlkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yYWdlQ2FjaGUuc2V0KGlkLCB7Z3B1RGF0YToge2lkLCB0eXBlOiBHcHVEYXRhVHlwZS5kZWZhdWx0LCBidWZmZXJ9LCBvcmlnaW5hbFNpemV9KTtcbiAgICB0aGlzLmV4dGVybmFsQnVmZmVycy5zZXQoYnVmZmVyLCBpZCk7XG4gICAgTE9HX0RFQlVHKFxuICAgICAgICAndmVyYm9zZScsXG4gICAgICAgICgpID0+IGBbV2ViR1BVXSBHcHVEYXRhTWFuYWdlci5yZWdpc3RlckV4dGVybmFsQnVmZmVyKHNpemU9JHtvcmlnaW5hbFNpemV9KSA9PiBpZD0ke2lkfSwgcmVnaXN0ZXJlZC5gKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICB1bnJlZ2lzdGVyRXh0ZXJuYWxCdWZmZXIoYnVmZmVyOiBHUFVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZXh0ZXJuYWxCdWZmZXJzLmdldChidWZmZXIpO1xuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0b3JhZ2VDYWNoZS5kZWxldGUoaWQpO1xuICAgICAgdGhpcy5leHRlcm5hbEJ1ZmZlcnMuZGVsZXRlKGJ1ZmZlcik7XG4gICAgICBMT0dfREVCVUcoJ3ZlcmJvc2UnLCAoKSA9PiBgW1dlYkdQVV0gR3B1RGF0YU1hbmFnZXIudW5yZWdpc3RlckV4dGVybmFsQnVmZmVyKCkgPT4gaWQ9JHtpZH1gKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICBjcmVhdGUoc2l6ZTogbnVtYmVyLCB1c2FnZSA9IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNUKTogR3B1RGF0YSB7XG4gICAgY29uc3QgYnVmZmVyU2l6ZSA9IGNhbGNCdWNrZXRCdWZmZXJTaXplKHNpemUpO1xuXG4gICAgbGV0IGdwdUJ1ZmZlcjtcbiAgICAvLyBDdXJyZW50bHksIG9ubHkgc3RvcmFnZSBidWZmZXJzIGFyZSByZXVzZWQuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICBjb25zdCBpc1N0b3JhZ2UgPSAodXNhZ2UgJiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFKSA9PT0gR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIGNvbnN0IGlzVW5pZm9ybSA9ICh1c2FnZSAmIEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0pID09PSBHUFVCdWZmZXJVc2FnZS5VTklGT1JNO1xuICAgIGlmIChpc1N0b3JhZ2UgfHwgaXNVbmlmb3JtKSB7XG4gICAgICBjb25zdCBmcmVlQnVmZmVycyA9IGlzU3RvcmFnZSA/IHRoaXMuZnJlZUJ1ZmZlcnMgOiB0aGlzLmZyZWVVbmlmb3JtQnVmZmVycztcbiAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBmcmVlQnVmZmVycy5nZXQoYnVmZmVyU2l6ZSk7XG4gICAgICBpZiAoIWJ1ZmZlcnMpIHtcbiAgICAgICAgLy8gbm8gc3VjaCBidWNrZXQvZnJlZWxpc3QgLSBjcmVhdGUgZ3B1IGJ1ZmZlclxuICAgICAgICBncHVCdWZmZXIgPSB0aGlzLmJhY2tlbmQuZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7c2l6ZTogYnVmZmVyU2l6ZSwgdXNhZ2V9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChidWZmZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBpbiBmcmVlbGlzdCwgdXNlIGl0XG4gICAgICAgICAgZ3B1QnVmZmVyID0gYnVmZmVycy5wb3AoKSBhcyBHUFVCdWZmZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYnVja2V0IGVtcHR5LCBjcmVhdGUgZ3B1IGJ1ZmZlclxuICAgICAgICAgIGdwdUJ1ZmZlciA9IHRoaXMuYmFja2VuZC5kZXZpY2UuY3JlYXRlQnVmZmVyKHtzaXplOiBidWZmZXJTaXplLCB1c2FnZX0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNyZWF0ZSBncHUgYnVmZmVyXG4gICAgICBncHVCdWZmZXIgPSB0aGlzLmJhY2tlbmQuZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7c2l6ZTogYnVmZmVyU2l6ZSwgdXNhZ2V9KTtcbiAgICB9XG5cbiAgICBjb25zdCBncHVEYXRhID0ge2lkOiBjcmVhdGVOZXdHcHVEYXRhSWQoKSwgdHlwZTogR3B1RGF0YVR5cGUuZGVmYXVsdCwgYnVmZmVyOiBncHVCdWZmZXJ9O1xuICAgIHRoaXMuc3RvcmFnZUNhY2hlLnNldChncHVEYXRhLmlkLCB7Z3B1RGF0YSwgb3JpZ2luYWxTaXplOiBzaXplfSk7XG5cbiAgICBMT0dfREVCVUcoJ3ZlcmJvc2UnLCAoKSA9PiBgW1dlYkdQVV0gR3B1RGF0YU1hbmFnZXIuY3JlYXRlKHNpemU9JHtzaXplfSkgPT4gaWQ9JHtncHVEYXRhLmlkfWApO1xuICAgIHJldHVybiBncHVEYXRhO1xuICB9XG5cbiAgZ2V0KGlkOiBHcHVEYXRhSWQpOiBHcHVEYXRhfHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZUNhY2hlLmdldChpZCk/LmdwdURhdGE7XG4gIH1cblxuICByZWxlYXNlKGlkOiBHcHVEYXRhSWQpOiBudW1iZXIge1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSB0aGlzLnN0b3JhZ2VDYWNoZS5nZXQoaWQpO1xuICAgIGlmICghY2FjaGVkRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZWxlYXNpbmcgZGF0YSBkb2VzIG5vdCBleGlzdCcpO1xuICAgIH1cblxuICAgIExPR19ERUJVRygndmVyYm9zZScsICgpID0+IGBbV2ViR1BVXSBHcHVEYXRhTWFuYWdlci5yZWxlYXNlKGlkPSR7aWR9KSwgZ3B1RGF0YUlkPSR7Y2FjaGVkRGF0YS5ncHVEYXRhLmlkfWApO1xuXG4gICAgdGhpcy5zdG9yYWdlQ2FjaGUuZGVsZXRlKGlkKTtcbiAgICB0aGlzLmJ1ZmZlcnNQZW5kaW5nLnB1c2goY2FjaGVkRGF0YS5ncHVEYXRhLmJ1ZmZlcik7XG4gICAgLy8gY2FjaGVkRGF0YS5ncHVEYXRhLmJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICByZXR1cm4gY2FjaGVkRGF0YS5vcmlnaW5hbFNpemU7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChpZDogR3B1RGF0YUlkLCBnZXRUYXJnZXRCdWZmZXI6ICgpID0+IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gdGhpcy5zdG9yYWdlQ2FjaGUuZ2V0KGlkKTtcbiAgICBpZiAoIWNhY2hlZERhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGF0YSBkb2VzIG5vdCBleGlzdCcpO1xuICAgIH1cbiAgICBhd2FpdCBkb3dubG9hZEdwdURhdGEodGhpcy5iYWNrZW5kLCBjYWNoZWREYXRhLmdwdURhdGEuYnVmZmVyLCBjYWNoZWREYXRhLm9yaWdpbmFsU2l6ZSwgZ2V0VGFyZ2V0QnVmZmVyKTtcbiAgfVxuXG4gIHJlZnJlc2hQZW5kaW5nQnVmZmVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiB0aGlzLmJ1ZmZlcnNGb3JVcGxvYWRpbmdQZW5kaW5nKSB7XG4gICAgICAvLyB1cGxvYWQgYnVmZmVyIGlzIG9ubHkgdXNlZnVsIGluIHRoZSBzZXNzaW9uIGNyZWF0aW9uIHRpbWUuIFNvIHdlIGRvbid0IG5lZWQgdG8gcmV1c2UgdGhlbSBpbiBzZXNzaW9uIHJ1bm5pbmcuXG4gICAgICBidWZmZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmJ1ZmZlcnNGb3JVcGxvYWRpbmdQZW5kaW5nID0gW107XG5cbiAgICBpZiAodGhpcy5idWZmZXJzUGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5iYWNrZW5kLnNlc3Npb25TdGF0dXMgPT09ICdkZWZhdWx0Jykge1xuICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgdGhpcy5idWZmZXJzUGVuZGluZykge1xuICAgICAgICBjb25zdCBtYXhJbkZyZWVMaXN0ID0gYnVja2V0RnJlZWxpc3QuZ2V0KGJ1ZmZlci5zaXplKTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICBpZiAoKGJ1ZmZlci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UpID09PSBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFKSB7XG4gICAgICAgICAgLy8gUHV0IHRoZSBwZW5kaW5nIGJ1ZmZlciB0byBmcmVlQnVmZmVycyBsaXN0IGluc3RlYWQgb2YgcmVhbGx5IGRlc3Ryb3lpbmcgaXQgZm9yIGJ1ZmZlciByZXVzaW5nLlxuICAgICAgICAgIGNvbnN0IGZyZWVsaXN0ID0gdGhpcy5mcmVlQnVmZmVycy5nZXQoYnVmZmVyLnNpemUpIHx8IFtdO1xuICAgICAgICAgIGlmIChtYXhJbkZyZWVMaXN0ID09PSB1bmRlZmluZWQgfHwgZnJlZWxpc3QubGVuZ3RoID49IG1heEluRnJlZUxpc3QpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyZWVsaXN0LnB1c2goYnVmZmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgfSBlbHNlIGlmICgoYnVmZmVyLnVzYWdlICYgR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSkgPT09IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0pIHtcbiAgICAgICAgICAvLyBQdXQgdGhlIHBlbmRpbmcgYnVmZmVyIHRvIGZyZWVVbmlmb3JtQnVmZmVycyBsaXN0IGluc3RlYWQgb2YgcmVhbGx5IGRlc3Ryb3lpbmcgaXQgZm9yIGJ1ZmZlciByZXVzaW5nLlxuICAgICAgICAgIGNvbnN0IGZyZWVsaXN0ID0gdGhpcy5mcmVlVW5pZm9ybUJ1ZmZlcnMuZ2V0KGJ1ZmZlci5zaXplKSB8fCBbXTtcbiAgICAgICAgICBpZiAobWF4SW5GcmVlTGlzdCA9PT0gdW5kZWZpbmVkIHx8IGZyZWVsaXN0Lmxlbmd0aCA+PSBtYXhJbkZyZWVMaXN0KSB7XG4gICAgICAgICAgICBidWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcmVlbGlzdC5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyc1BlbmRpbmcgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRG9uJ3QgcmVsZWFzZSBpbnRlcm1lZGlhdGUgdGVuc29ycyBpbiBub24tZGVmYXVsdCBtb2RlLlxuICAgICAgLy8gVE9ETzogcmV1c2UgdGhlIHN0b3JhZ2UgYnVmZmVycyBpbiBub24tZGVmYXVsdCBtb2RlLlxuICAgICAgbGV0IGNhcHR1cmVkQnVmZmVycyA9IHRoaXMuY2FwdHVyZWRQZW5kaW5nQnVmZmVycy5nZXQodGhpcy5iYWNrZW5kLmN1cnJlbnRTZXNzaW9uSWQhKTtcbiAgICAgIGlmICghY2FwdHVyZWRCdWZmZXJzKSB7XG4gICAgICAgIGNhcHR1cmVkQnVmZmVycyA9IFtdO1xuICAgICAgICB0aGlzLmNhcHR1cmVkUGVuZGluZ0J1ZmZlcnMuc2V0KHRoaXMuYmFja2VuZC5jdXJyZW50U2Vzc2lvbklkISwgY2FwdHVyZWRCdWZmZXJzKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIHRoaXMuYnVmZmVyc1BlbmRpbmcpIHtcbiAgICAgICAgY2FwdHVyZWRCdWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyc1BlbmRpbmcgPSBbXTtcbiAgICB9XG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuZnJlZUJ1ZmZlcnMuZm9yRWFjaCgoYnVmZmVycykgPT4ge1xuICAgICAgYnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XG4gICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmZyZWVVbmlmb3JtQnVmZmVycy5mb3JFYWNoKChidWZmZXJzKSA9PiB7XG4gICAgICBidWZmZXJzLmZvckVhY2goYnVmZmVyID0+IHtcbiAgICAgICAgYnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zdG9yYWdlQ2FjaGUuZm9yRWFjaCgoc3RvcmFnZSkgPT4ge1xuICAgICAgc3RvcmFnZS5ncHVEYXRhLmJ1ZmZlci5kZXN0cm95KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNhcHR1cmVkUGVuZGluZ0J1ZmZlcnMuZm9yRWFjaCgoYnVmZmVycykgPT4ge1xuICAgICAgYnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XG4gICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnN0b3JhZ2VDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmZyZWVCdWZmZXJzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZnJlZVVuaWZvcm1CdWZmZXJzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuY2FwdHVyZWRQZW5kaW5nQnVmZmVycyA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIG9uUmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkOiBudW1iZXIpIHtcbiAgICAvLyByZWxlYXNlIHRoZSBjYXB0dXJlZCBwZW5kaW5nIGJ1ZmZlcnMuXG4gICAgY29uc3QgcGVuZGluZ0J1ZmZlcnMgPSB0aGlzLmNhcHR1cmVkUGVuZGluZ0J1ZmZlcnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKHBlbmRpbmdCdWZmZXJzKSB7XG4gICAgICBwZW5kaW5nQnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XG4gICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FwdHVyZWRQZW5kaW5nQnVmZmVycy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdwdURhdGFNYW5hZ2VyID0gKC4uLmFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgR3B1RGF0YU1hbmFnZXJJbXBsPik6IEdwdURhdGFNYW5hZ2VyID0+XG4gICAgbmV3IEdwdURhdGFNYW5hZ2VySW1wbCguLi5hcmdzKTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuY2xhc3MgQXR0cmlidXRlV2l0aENhY2hlS2V5SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGF0dHJpYnV0ZSk7XG4gIH1cblxuICBwcml2YXRlIGtleTogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGNhY2hlS2V5KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmtleSkge1xuICAgICAgdGhpcy5rZXkgPVxuICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpLnNvcnQoKS5tYXAobmFtZSA9PiBgJHsodGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZV19YCkuam9pbignOycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5rZXk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBjYWNoZUtleTogc3RyaW5nO1xufVxuXG4vKipcbiAqIGNyZWF0ZSBhIG5ldyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gYXR0cmlidXRlLCBhbmQgYWRkIGEgY2FjaGVLZXkgcHJvcGVydHkgdG8gaXRcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGF0dHJpYnV0ZTogVCk6IFQmQXR0cmlidXRlV2l0aENhY2hlS2V5ID0+XG4gICAgbmV3IEF0dHJpYnV0ZVdpdGhDYWNoZUtleUltcGwoYXR0cmlidXRlKSBhcyB1bmtub3duIGFzIFQgJiBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXk7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5cbmV4cG9ydCBjbGFzcyBNYXRNdWxVdGlsIHtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgc2hhcGUgd2hlbiBtYXRyaXggbXVsdGlwbGljYXRpb25cbiAgICogQHBhcmFtIGEgVGhlIHNoYXBlIG9mIHRlbnNvciBBLiBTaG91bGQgYmUgYSB0dXBsZSBvZiAyIHBvc2l0aXZlIGludGVnZXJzXG4gICAqIEBwYXJhbSBiIFRoZSBzaGFwZSBvZiB0ZW5zb3IgQi4gU2hvdWxkIGJlIGEgdHVwbGUgb2YgMiBwb3NpdGl2ZSBpbnRlZ2Vyc1xuICAgKiBAcmV0dXJucyBUaGUgZXhwZWN0ZWQgc2hhcGUgb2YgdGhlIHJlc3VsdCwgb3IgdW5kZWZpbmVkIGlmIE4vQVxuICAgKi9cbiAgc3RhdGljIGNhbGNNYXRNdWxTaGFwZShhOiBbbnVtYmVyLCBudW1iZXJdLCBiOiBbbnVtYmVyLCBudW1iZXJdKTogW251bWJlciwgbnVtYmVyXXx1bmRlZmluZWQge1xuICAgIHJldHVybiAoYVsxXSAhPT0gYlswXSkgPyB1bmRlZmluZWQgOiBbYVswXSwgYlsxXV07XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgQnJvYWRjYXN0VXRpbCB7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIHNoYXBlIHdoZW4gYnJvYWRjYXN0aW5nIDIgdGVuc29yc1xuICAgKiBAcGFyYW0gYSBUaGUgc2hhcGUgb2YgdGVuc29yIEEuIFNob3VsZCBiZSBhbiBhcnJheSBvZiBwb3NpdGl2ZSBpbnRlZ2Vyc1xuICAgKiBAcGFyYW0gYiBUaGUgc2hhcGUgb2YgdGVuc29yIEIuIFNob3VsZCBiZSBhbiBhcnJheSBvZiBwb3NpdGl2ZSBpbnRlZ2Vyc1xuICAgKiBAcGFyYW0gaXNNYXRNdWwgV2hldGhlciB0aGUgb3BlcmF0aW9uIGlzIE1hdE11bFxuICAgKiBAcmV0dXJucyBUaGUgZXhwZWN0ZWQgc2hhcGUgb2YgdGhlIHJlc3VsdCwgb3IgdW5kZWZpbmVkIGlmIE4vQVxuICAgKi9cbiAgc3RhdGljIGNhbGNTaGFwZShhZGltczogcmVhZG9ubHkgbnVtYmVyW10sIGJkaW1zOiByZWFkb25seSBudW1iZXJbXSwgaXNNYXRNdWwgPSBmYWxzZSk6IHJlYWRvbmx5IG51bWJlcltdfHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXJhbmsgPSBhZGltcy5sZW5ndGg7XG4gICAgY29uc3QgYnJhbmsgPSBiZGltcy5sZW5ndGg7XG4gICAgaWYgKGFyYW5rID09PSAwKSB7XG4gICAgICByZXR1cm4gYmRpbXM7XG4gICAgfVxuICAgIGlmIChicmFuayA9PT0gMCkge1xuICAgICAgcmV0dXJuIGFkaW1zO1xuICAgIH1cbiAgICBjb25zdCBjcmFuayA9IE1hdGgubWF4KGFkaW1zLmxlbmd0aCwgYmRpbXMubGVuZ3RoKTtcbiAgICBjb25zdCBjZGltcyA9IG5ldyBBcnJheTxudW1iZXI+KGNyYW5rKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgbGFzdCAyIGRpbWVuc2lvbiBpZiBpdCBpcyBNYXRNdWxcbiAgICBpZiAoaXNNYXRNdWwpIHtcbiAgICAgIGlmIChhcmFuayA8IDIgfHwgYnJhbmsgPCAyKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBjU2hhcGVNYXRNdWwgPVxuICAgICAgICAgIE1hdE11bFV0aWwuY2FsY01hdE11bFNoYXBlKFthZGltc1thcmFuayAtIDJdLCBhZGltc1thcmFuayAtIDFdXSwgW2JkaW1zW2JyYW5rIC0gMl0sIGJkaW1zW2JyYW5rIC0gMV1dKTtcbiAgICAgIGlmIChjU2hhcGVNYXRNdWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgW2NkaW1zW2NyYW5rIC0gMl0sIGNkaW1zW2NyYW5rIC0gMV1dID0gY1NoYXBlTWF0TXVsO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBpc01hdE11bCA/IDMgOiAxOyBpIDw9IGNyYW5rOyBpKyspIHtcbiAgICAgIGNvbnN0IGFMZW4gPSBhcmFuayAtIGkgPCAwID8gMSA6IGFkaW1zW2FyYW5rIC0gaV07XG4gICAgICBjb25zdCBiTGVuID0gYnJhbmsgLSBpIDwgMCA/IDEgOiBiZGltc1ticmFuayAtIGldO1xuXG4gICAgICBpZiAoYUxlbiAhPT0gYkxlbiAmJiBhTGVuID4gMSAmJiBiTGVuID4gMSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoYUxlbiwgYkxlbik7XG4gICAgICBpZiAoYUxlbiAmJiBiTGVuKSB7XG4gICAgICAgIGNkaW1zW2NyYW5rIC0gaV0gPSBNYXRoLm1heChhTGVuLCBiTGVuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdoZW4gZWl0aGVyIGFMZW4gb3IgYkxlbiBpcyAwLCB0aGUgb3RoZXIgc2hvdWxkIGJlIGVpdGhlciAwIG9yIDEsIG90aGVyd2lzZSBpdCBpcyBub3QgYnJvYWRjYXN0YWJsZS5cbiAgICAgICAgaWYgKG1heCA+IDEpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNkaW1zW2NyYW5rIC0gaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjZGltcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgYSBzaGFwZSBpcyB1bmlkaXJlY3Rpb25hbCBicm9hZGNhc3RhYmxlIHRvIGFub3RoZXIgc2hhcGVcbiAgICogQHBhcmFtIHNoYXBlIFRoZSBpbnB1dCBzaGFwZVxuICAgKiBAcGFyYW0gZmluYWxTaGFwZSBUaGUgZGVzaXJlZCBzaGFwZSBhZnRlciBicm9hZGNhc3RpbmdcbiAgICovXG4gIHN0YXRpYyBpc1ZhbGlkQnJvYWRjYXN0KHNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgZmluYWxTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10pOiBib29sZWFuIHtcbiAgICAvLyBhbGlnbiBzaGFwZSB0byB0aGUgcmlnaHRcbiAgICBjb25zdCBpbnB1dFJhbmsgPSBzaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgZmluYWxSYW5rID0gZmluYWxTaGFwZS5sZW5ndGg7XG4gICAgaWYgKGlucHV0UmFuayA+IGZpbmFsUmFuaykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBpbnB1dFJhbms7IGkrKykge1xuICAgICAgaWYgKHNoYXBlW2lucHV0UmFuayAtIGldICE9PSAxICYmIHNoYXBlW2lucHV0UmFuayAtIGldICE9PSBmaW5hbFNoYXBlW2ZpbmFsUmFuayAtIGldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgU2hhcGVVdGlsIHtcbiAgLyoqXG4gICAqIGNhbGN1bGF0ZSB0aGUgc2l6ZSAobnVtYmVyIG9mIGVsZW1lbnRzKVxuICAgKi9cbiAgc3RhdGljIHNpemUoZGltczogcmVhZG9ubHkgbnVtYmVyW10pOiBudW1iZXIge1xuICAgIHJldHVybiBTaGFwZVV0aWwuZ2V0U2l6ZUZyb21EaW1lbnNpb25SYW5nZShkaW1zLCAwLCBkaW1zLmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogY29udmVydCBkaW1zIGNvcnJlc3BvbmRpbmcgdG8gdHlwZSBjaGFuZ2UgdG8gcGFjay4gZXguIHVpbnQ4IGRhdGEgdG8gdWludDMyXG4gICAqL1xuICBzdGF0aWMgY29udmVydFNoYXBlKGRpbXM6IHJlYWRvbmx5IG51bWJlcltdLCBzaXplID0gNCk6IHJlYWRvbmx5IG51bWJlcltdIHtcbiAgICBjb25zdCByYW5rID0gZGltcy5sZW5ndGg7XG4gICAgaWYgKHJhbmsgPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgbmV3RGltcyA9IG5ldyBBcnJheShyYW5rKTtcbiAgICBsZXQgaSA9IHJhbmsgLSAxO1xuICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgIGlmIChkaW1zW2ldICUgc2l6ZSA9PT0gMCkge1xuICAgICAgICBuZXdEaW1zW2ldID0gZGltc1tpXSAvIHNpemU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHNpemUgJSBkaW1zW2ldICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNvbnZlcnQgc2hhcGUnKTtcbiAgICAgIH1cbiAgICAgIG5ld0RpbXNbaV0gPSAxO1xuICAgICAgc2l6ZSAvPSBkaW1zW2ldO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICBmb3IgKGktLTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIG5ld0RpbXNbaV0gPSBkaW1zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3RGltcztcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIHNpemUgKG51bWJlciBvZiBlbGVtZW50cykgZnJvbSB0aGUgZ2l2ZW4gYXhpcyAoaW5jbHVzaXZlKVxuICAgKi9cbiAgc3RhdGljIHNpemVGcm9tRGltZW5zaW9uKGRpbXM6IHJlYWRvbmx5IG51bWJlcltdLCBheGlzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChheGlzIDwgMCB8fCBheGlzID4gZGltcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaW1lbnNpb24gb2YgJHtheGlzfSBmb3Igc2l6ZUZyb21EaW1lbnNpb24gYXMgVGVuc29yIGhhcyAke2RpbXMubGVuZ3RofSBkaW1lbnNpb25zLmApO1xuICAgIH1cbiAgICByZXR1cm4gU2hhcGVVdGlsLmdldFNpemVGcm9tRGltZW5zaW9uUmFuZ2UoZGltcywgYXhpcywgZGltcy5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGN1bGF0ZSB0aGUgc2l6ZSAobnVtYmVyIG9mIGVsZW1lbnRzKSB0byB0aGUgZ2l2ZW4gYXhpcyAoZXhjbHVzaXZlKVxuICAgKi9cbiAgc3RhdGljIHNpemVUb0RpbWVuc2lvbihkaW1zOiByZWFkb25seSBudW1iZXJbXSwgYXhpczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoYXhpcyA8IDAgfHwgYXhpcyA+IGRpbXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGltZW5zaW9uIG9mICR7YXhpc30gZm9yIHNpemVUb0RpbWVuc2lvbiBhcyBUZW5zb3IgaGFzICR7ZGltcy5sZW5ndGh9IGRpbWVuc2lvbnMuYCk7XG4gICAgfVxuICAgIHJldHVybiBTaGFwZVV0aWwuZ2V0U2l6ZUZyb21EaW1lbnNpb25SYW5nZShkaW1zLCAwLCBheGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIHNpemUgKG51bWJlciBvZiBlbGVtZW50cykgZnJvbSBhbmQgdG8gdGhlIGdpdmVuIGF4aXMgW3N0YXJ0LCBlbmQpXG4gICAqL1xuICBzdGF0aWMgZ2V0U2l6ZUZyb21EaW1lbnNpb25SYW5nZShkaW1zOiByZWFkb25seSBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBzaXplID0gMTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgLy8gc2FmZXR5IGNoZWNrIGFzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBtdWx0aXBsZSBvdGhlciBtZXRob2RzIHJlcXVpcmluZyBzaXplLlxuICAgICAgLy8gc2l6ZSBjYW5ub3QgYmUgbmVnYXRpdmUuXG4gICAgICBpZiAoZGltc1tpXSA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICdjYW5ub3QgZ2V0IHZhbGlkIHNpemUgZnJvbSBzcGVjaWZpZWQgZGltZW5zaW9uIHJhbmdlLiBNb3N0IGxpa2VseSB0aGUgcmFuZ2UgY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzIGluIHRoZW0uJyk7XG4gICAgICB9XG4gICAgICBzaXplICo9IGRpbXNbaV07XG4gICAgfVxuICAgIHJldHVybiBzaXplO1xuICB9XG5cbiAgc3RhdGljIGNvbXB1dGVTdHJpZGVzKGRpbXM6IHJlYWRvbmx5IG51bWJlcltdKTogcmVhZG9ubHkgbnVtYmVyW10ge1xuICAgIGNvbnN0IHJhbmsgPSBkaW1zLmxlbmd0aDtcbiAgICBpZiAocmFuayA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSBpZiAocmFuayA9PT0gMSkge1xuICAgICAgcmV0dXJuIFsxXTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaWRlcyA9IG5ldyBBcnJheShyYW5rKTtcbiAgICBzdHJpZGVzW3JhbmsgLSAxXSA9IDE7XG4gICAgc3RyaWRlc1tyYW5rIC0gMl0gPSBkaW1zW3JhbmsgLSAxXTtcbiAgICBmb3IgKGxldCBpID0gcmFuayAtIDM7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBzdHJpZGVzW2ldID0gc3RyaWRlc1tpICsgMV0gKiBkaW1zW2kgKyAxXTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmlkZXM7XG4gIH1cblxuICAvKipcbiAgICogbm9ybWFpbHplIGF4aXMgb2YgcmFuZ2UgWy1yLCByKSBpbnRvIFswLCByKS5cbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVBeGlzKGF4aXM6IG51bWJlciwgdGVuc29yUmFuazogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoYXhpcyA8IC10ZW5zb3JSYW5rICYmIGF4aXMgPj0gdGVuc29yUmFuaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBheGlzIGZvciB0aGlzIG9wZXJhdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGF4aXMgPCAwID8gYXhpcyArIHRlbnNvclJhbmsgOiBheGlzO1xuICB9XG5cbiAgc3RhdGljIG5vcm1hbGl6ZUF4ZXMoYXhlczogcmVhZG9ubHkgbnVtYmVyW10sIHRlbnNvclJhbms/OiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIGF4ZXMubWFwKHggPT4gdGhpcy5ub3JtYWxpemVBeGlzKHgsIHRlbnNvclJhbmsgPz8gYXhlcy5sZW5ndGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyBhIGdpdmVuIGFycmF5IGJhc2VkIG9uIHRoZSBpbmRpY2VzIGluIHRoZSBQZXJtIGFycmF5XG4gICAqIFVzZWQgaW4gVHJhbnNwb3NlXG4gICAqIEBwYXJhbSBhIEFycmF5IHRvIGJlIHNvcnRlZCBzdWNoIGFzIGRpbXMgb3Igc3RyaWRlc1xuICAgKiBAcGFyYW0gcGVybSBQZXJtIGdpdmVuOyBpZiBudWxsIGEgd2lsbCBiZSByZXZlcnNlZFxuICAgKi9cbiAgc3RhdGljIHNvcnRCYXNlZE9uUGVybShhOiByZWFkb25seSBudW1iZXJbXSwgcGVybT86IHJlYWRvbmx5IG51bWJlcltdKTogcmVhZG9ubHkgbnVtYmVyW10ge1xuICAgIGlmIChwZXJtKSB7XG4gICAgICByZXR1cm4gcGVybS5tYXAoKHYpID0+IGFbdl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYS5zbGljZSgpLnJldmVyc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFkcyBhIGdpdmVuIHNoYXBlIGFjY29yZGluZyB0byB0aGUgcGFkZGluZyB2YWx1ZXNcbiAgICogQHBhcmFtIGRpbXMgc2hhcGUgb2YgdGhlIFRlbnNvciB0byBiZSBwYWRkZWRcbiAgICogQHBhcmFtIHBhZCBwYWQgdmFsdWVzXG4gICAqL1xuICBzdGF0aWMgcGFkU2hhcGUoZGltczogcmVhZG9ubHkgbnVtYmVyW10sIHBhZDogcmVhZG9ubHkgbnVtYmVyW10pOiByZWFkb25seSBudW1iZXJbXSB7XG4gICAgY29uc3QgcmFuayA9IGRpbXMubGVuZ3RoO1xuICAgIHJldHVybiBkaW1zLm1hcCgodiwgaSkgPT4gdiArIHBhZFtpXSArIHBhZFtpICsgcmFua10pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHR3byBzaGFwZXMgYXJlIGlkZW50aWNhbFxuICAgKiBAcGFyYW0gc2hhcGUxXG4gICAqIEBwYXJhbSBzaGFwZTJcbiAgICovXG4gIHN0YXRpYyBhcmVFcXVhbChzaGFwZTE6IHJlYWRvbmx5IG51bWJlcltdLCBzaGFwZTI6IHJlYWRvbmx5IG51bWJlcltdKTogYm9vbGVhbiB7XG4gICAgaWYgKHNoYXBlMS5sZW5ndGggIT09IHNoYXBlMi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHNoYXBlMS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gc2hhcGUyW2ldKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUG9vbENvbnZVdGlsIHtcbiAgLyoqXG4gICAqIEFkanVzdCB0aGUga2VybmVsLCBzdHJpZGVzLCBwYWRzIHRvIGNvcnJlY3QgcmFuay4gU2V0IHRvIGRlZmF1bHQgdmFsdWUgaWYgbm90IHByZXNlbnRcbiAgICogQHBhcmFtIGlzR2xvYmFsT3BlcmF0b3IgSWYgdHJ1ZSwgcGVyZm9ybSBnbG9iYWwgcG9vbGluZy5cbiAgICogQHBhcmFtIGlucHV0RGltcyBUaGUgaW5wdXQgdGVuc29yIGRpbWVuc2lvbi5cbiAgICogQHBhcmFtIGtlcm5lbFNoYXBlIFRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYWxvbmcgZWFjaCBheGlzLlxuICAgKiBAcGFyYW0gc3RyaWRlcyBTdHJpZGUgYWxvbmcgZWFjaCBheGlzLlxuICAgKiBAcGFyYW0gZGlsYXRpb25zIERpbGF0aW9uIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIHBhZHMgUGFkZGluZyBmb3IgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGFsb25nIGVhY2ggYXhpcy5cbiAgICovXG4gIHN0YXRpYyBhZGp1c3RQb29sQXR0cmlidXRlcyhcbiAgICAgIGlzR2xvYmFsT3BlcmF0b3I6IGJvb2xlYW4sIGlucHV0RGltczogcmVhZG9ubHkgbnVtYmVyW10sIGtlcm5lbFNoYXBlOiBudW1iZXJbXSwgc3RyaWRlczogbnVtYmVyW10sXG4gICAgICBkaWxhdGlvbnM6IG51bWJlcltdLCBwYWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGlmICghaXNHbG9iYWxPcGVyYXRvciAmJiBrZXJuZWxTaGFwZS5sZW5ndGggIT09IGlucHV0RGltcy5sZW5ndGggLSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBvZiBzcGVjaWZpZWQga2VybmVsIHNoYXBlcyBzaG91bGQgYmUgMiBsZXNzIHRoYW4gbGVuZ3RoIG9mIGlucHV0IGRpbWVuc2lvbnMnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNHbG9iYWxPcGVyYXRvcikge1xuICAgICAgLy8gYWRqdXN0IGtlcm5lbCBzaGFwZSB0byBjb3ZlciB0aGUgaW5wdXQgZGltc1xuICAgICAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgaW5wdXREaW1zLmxlbmd0aCAtIDI7IGRpbSsrKSB7XG4gICAgICAgIGlmIChkaW0gPj0ga2VybmVsU2hhcGUubGVuZ3RoKSB7XG4gICAgICAgICAga2VybmVsU2hhcGUucHVzaChpbnB1dERpbXNbZGltICsgMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtlcm5lbFNoYXBlW2RpbV0gPSBpbnB1dERpbXNbZGltICsgMl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGp1c3Qgc3RyaWRlcyBsZW5ndGggdG8gbWF0Y2gga2VybmVsIHNoYXBlIGxlbmd0aFxuICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IGtlcm5lbFNoYXBlLmxlbmd0aDsgZGltKyspIHtcbiAgICAgIGlmIChkaW0gPCBzdHJpZGVzLmxlbmd0aCkge1xuICAgICAgICBpZiAoc3RyaWRlc1tkaW1dIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaWRlcyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyaWRlcy5wdXNoKDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkanVzdCBkaWxhdGlvbiB2YWx1ZVxuICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IGtlcm5lbFNoYXBlLmxlbmd0aDsgZGltKyspIHtcbiAgICAgIGlmIChkaW0gPCBkaWxhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChkaWxhdGlvbnNbZGltXSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpbGF0aW9ucyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlsYXRpb25zLnB1c2goMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRqdXN0IHBhZHMgbGVuZ3RoIHRvIG1hdGNoIDIgKiBrZXJuZWwgc2hhcGUgbGVuZ3RoXG4gICAgZm9yIChsZXQgZGltID0gMDsgZGltIDwga2VybmVsU2hhcGUubGVuZ3RoICogMjsgZGltKyspIHtcbiAgICAgIGlmIChkaW0gPCBwYWRzLmxlbmd0aCkge1xuICAgICAgICBpZiAocGFkc1tkaW1dIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFkIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWRzLnB1c2goMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2FuaXR5IGNoZWNrcyBmb3IgdmFsdWVzIGluIGtlcm5lbCBzaGFwZXMgYW5kIHBhZHNcbiAgICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBrZXJuZWxTaGFwZS5sZW5ndGg7IGRpbSsrKSB7XG4gICAgICBpZiAoa2VybmVsU2hhcGVbZGltXSA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigna2VybmVsIHNoYXBlcyBuZWVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYWRzW2RpbV0gPj0ga2VybmVsU2hhcGVbZGltXSB8fCBwYWRzW2RpbSArIGtlcm5lbFNoYXBlLmxlbmd0aF0gPj0ga2VybmVsU2hhcGVbZGltXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhZHMgc2hvdWxkIGJlIHNtYWxsZXIgdGhhbiBrZXJuZWwnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBhZGp1c3QgcGFkIHZhbHVlcyBiYXNlZCBvbiAnYXV0b1BhZCcgYXR0cmlidXRlXG4gIHN0YXRpYyBhZGp1c3RQYWRzQmFzZWRPbkF1dG9QYWQoXG4gICAgICBpbnB1dERpbXM6IHJlYWRvbmx5IG51bWJlcltdLCBzdHJpZGVzOiByZWFkb25seSBudW1iZXJbXSwgZGlsYXRpb25zOiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgIGtlcm5lbFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgcGFkczogbnVtYmVyW10sIGlzQ2hhbm5lbExhc3Q6IGJvb2xlYW4sIGF1dG9QYWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWF1dG9QYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFkcy5sZW5ndGggIT09IDIgKiAoaW5wdXREaW1zLmxlbmd0aCAtIDIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBvZiBwYWRzIHNob3VsZCBiZSB0d2ljZSB0aGUgbGVuZ3RoIG9mIGRhdGEgZGltZW5zaW9ucycpO1xuICAgIH1cblxuICAgIGlmIChzdHJpZGVzLmxlbmd0aCAhPT0gKGlucHV0RGltcy5sZW5ndGggLSAyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggb2Ygc3RyaWRlcyBzaG91bGQgYmUgdGhlIGxlbmd0aCBvZiBkYXRhIGRpbWVuc2lvbnMnKTtcbiAgICB9XG5cbiAgICBpZiAoa2VybmVsU2hhcGUubGVuZ3RoICE9PSAoaW5wdXREaW1zLmxlbmd0aCAtIDIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBvZiBrZXJuZWwgc2hhcGVzIHNob3VsZCBiZSB0aGUgbGVuZ3RoIG9mIGRhdGEgZGltZW5zaW9ucycpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IGlucHV0RGltcy5sZW5ndGggLSAyOyBkaW0rKykge1xuICAgICAgUG9vbENvbnZVdGlsLmFkanVzdFBhZEFuZFJldHVyblNoYXBlKFxuICAgICAgICAgIGlucHV0RGltc1tkaW0gKyAoaXNDaGFubmVsTGFzdCA/IDEgOiAyKV0sIHN0cmlkZXNbZGltXSwgZGlsYXRpb25zW2RpbV0sIGtlcm5lbFNoYXBlW2RpbV0sIHBhZHMsIGRpbSxcbiAgICAgICAgICBkaW0gKyBpbnB1dERpbXMubGVuZ3RoIC0gMiwgYXV0b1BhZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgb3V0cHV0IHNoYXBlIGZvciBQb29sIG9wcyBiYXNlZCBvbiBpbnB1dCBhdHRyaWJ1dGVzLiAoU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgUG9vbCBvcHMpXG4gICAqIEBwYXJhbSBpc0dsb2JhbE9wZXJhdG9yIElmIHRydWUsIHBlcmZvcm0gZ2xvYmFsIHBvb2xpbmcuXG4gICAqIEBwYXJhbSBpbnB1dERpbXMgVGhlIGlucHV0IHRlbnNvciBkaW1lbnNpb24uIChpbnB1dHNbMF0uZGltcylcbiAgICogQHBhcmFtIHN0cmlkZXMgU3RyaWRlIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIGRpbGF0aW9ucyBEaWxhdGlvbiBhbG9uZyBlYWNoIGF4aXMuXG4gICAqIEBwYXJhbSBrZXJuZWxTaGFwZSBUaGUgc2l6ZSBvZiB0aGUga2VybmVsIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIHBhZHMgUGFkZGluZyBmb3IgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIGF1dG9QYWQgREVQUkVDQVRFRCBhdHRyaWJ1dGUgc3VwcG9ydGVkIGZvciBsZWdhY3kgbW9kZWxzLiBTcGVjaWZpZXMgaG93IHRvIGltcGxpY2l0bHkgY2FsY3VsYXRlIHBhZHMgaW4gZWFjaFxuICAgKiAgICAgZGltZW5zaW9uLiBDYW4gdGFrZSB2YWx1ZXMgTk9UU0VULCBTQU1FX1VQUEVSLCBTQU1FX0xPV0VSLCBvciBWQUxJRC5cbiAgICovXG4gIHN0YXRpYyBjb21wdXRlUG9vbE91dHB1dFNoYXBlKFxuICAgICAgaXNHbG9iYWxPcGVyYXRvcjogYm9vbGVhbiwgaW5wdXREaW1zOiByZWFkb25seSBudW1iZXJbXSwgc3RyaWRlczogbnVtYmVyW10sIGRpbGF0aW9uczogbnVtYmVyW10sXG4gICAgICBrZXJuZWxTaGFwZTogbnVtYmVyW10sIHBhZHM6IG51bWJlcltdLCBhdXRvUGFkPzogc3RyaW5nKTogbnVtYmVyW10ge1xuICAgIGlmIChpbnB1dERpbXMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgc2hhcGUgbXVzdCBiZSBvZiBzaXplIGdyZWF0ZXIgdGhhbiAwJyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGJhdGNoIHNpemUgYW5kIG51bWJlciBvZiBjaGFubmVscyBvZiBvdXRwdXRcbiAgICBjb25zdCBvdXRwdXREaW1zID0gW2lucHV0RGltc1swXSwgaW5wdXREaW1zWzFdXTtcblxuICAgIFBvb2xDb252VXRpbC5jb21wdXRlU2hhcGVIZWxwZXIoXG4gICAgICAgIGlzR2xvYmFsT3BlcmF0b3IsIGlucHV0RGltcywgb3V0cHV0RGltcywgc3RyaWRlcywgZGlsYXRpb25zLCBrZXJuZWxTaGFwZSwgcGFkcywgYXV0b1BhZCk7XG4gICAgcmV0dXJuIG91dHB1dERpbXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBvdXRwdXQgc2hhcGUgZm9yIENvbnYgb3AgYmFzZWQgb24gaW5wdXQgYXR0cmlidXRlcy4gKFNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIENvbnYgb3ApXG4gICAqIEBwYXJhbSBpbnB1dERpbXMgVGhlIGlucHV0IHRlbnNvciBkaW1lbnNpb24uIChpbnB1dHNbMF0uZGltcylcbiAgICogQHBhcmFtIGZpbHRlckRpbXMgVGhlIGZpbHRlciB0ZW5zb3IgZGltZW5zaW9uLiAoaW5wdXRzWzFdLmRpbXMpXG4gICAqIEBwYXJhbSBzdHJpZGVzIFN0cmlkZSBhbG9uZyBlYWNoIGF4aXMuXG4gICAqIEBwYXJhbSBrZXJuZWxTaGFwZSBUaGUgc2l6ZSBvZiB0aGUga2VybmVsIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIHBhZHMgUGFkZGluZyBmb3IgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIGF1dG9QYWQgREVQUkVDQVRFRCBhdHRyaWJ1dGUgc3VwcG9ydGVkIGZvciBsZWdhY3kgbW9kZWxzLiBTcGVjaWZpZXMgaG93IHRvIGltcGxpY2l0bHkgY2FsY3VsYXRlIHBhZHMgaW4gZWFjaFxuICAgKiAgICAgZGltZW5zaW9uLiBDYW4gdGFrZSB2YWx1ZXMgTk9UU0VULCBTQU1FX1VQUEVSLCBTQU1FX0xPV0VSLCBvciBWQUxJRC5cbiAgICovXG4gIHN0YXRpYyBjb21wdXRlQ29udk91dHB1dFNoYXBlKFxuICAgICAgaW5wdXREaW1zOiByZWFkb25seSBudW1iZXJbXSwgZmlsdGVyRGltczogcmVhZG9ubHkgbnVtYmVyW10sIHN0cmlkZXM6IG51bWJlcltdLCBkaWxhdGlvbnM6IG51bWJlcltdLFxuICAgICAga2VybmVsU2hhcGU6IG51bWJlcltdLCBwYWRzOiBudW1iZXJbXSwgYXV0b1BhZD86IHN0cmluZyk6IG51bWJlcltdIHtcbiAgICBpZiAoaW5wdXREaW1zLmxlbmd0aCA8PSAwIHx8IGZpbHRlckRpbXMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnB1dCB0ZW5zb3IgZGltcyBvciBpbnZhbGlkIGZpbHRlciB0ZW5zb3IgZGltcycpO1xuICAgIH1cblxuICAgIC8vIEFkZCBiYXRjaCBzaXplIGFuZCBudW1iZXIgb2YgY2hhbm5lbHMgb2Ygb3V0cHV0XG4gICAgY29uc3Qgb3V0cHV0RGltcyA9IFtpbnB1dERpbXNbMF0sIGZpbHRlckRpbXNbMF1dO1xuXG4gICAgUG9vbENvbnZVdGlsLmNvbXB1dGVTaGFwZUhlbHBlcihmYWxzZSwgaW5wdXREaW1zLCBvdXRwdXREaW1zLCBzdHJpZGVzLCBkaWxhdGlvbnMsIGtlcm5lbFNoYXBlLCBwYWRzLCBhdXRvUGFkKTtcbiAgICByZXR1cm4gb3V0cHV0RGltcztcbiAgfVxuXG4gIC8vIHdpbGwgY29tcHV0ZSBvdXRwdXQgc2hhcGVzIGZvciBkYXRhIGRpbWVuc2lvbnMgT05MWSAoaS5lLikgbm8gYmF0Y2ggc2l6ZSBhbmQgY2hhbm5lbHNcbiAgLy8gY2FsbGVkIGJ5IGNvbXB1dGVQb29sT3V0cHV0U2hhcGUoKSBhbmQgY29tcHV0ZUNvbnZPdXRwdXRTaGFwZSgpXG4gIC8vIGFkanVzdCBwYWRzIGJhc2VkIG9uICdhdXRvUGFkJyBhdHRyaWJ1dGUgcHJpb3IgdG8gc2hhcGUgY29tcHV0YXRpb25cbiAgcHJpdmF0ZSBzdGF0aWMgY29tcHV0ZVNoYXBlSGVscGVyKFxuICAgICAgaXNHbG9iYWxPcGVyYXRvcjogYm9vbGVhbiwgaW5wdXREaW1zOiByZWFkb25seSBudW1iZXJbXSwgb3V0cHV0RGltczogbnVtYmVyW10sIHN0cmlkZXM6IHJlYWRvbmx5IG51bWJlcltdLFxuICAgICAgZGlsYXRpb25zOiByZWFkb25seSBudW1iZXJbXSwga2VybmVsU2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBwYWRzOiBudW1iZXJbXSwgYXV0b1BhZD86IHN0cmluZykge1xuICAgIGlmIChpc0dsb2JhbE9wZXJhdG9yKSB7XG4gICAgICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBpbnB1dERpbXMubGVuZ3RoIC0gMjsgZGltKyspIHtcbiAgICAgICAgb3V0cHV0RGltcy5wdXNoKDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBpbnB1dERpbXMubGVuZ3RoIC0gMjsgZGltKyspIHtcbiAgICAgICAgb3V0cHV0RGltcy5wdXNoKFBvb2xDb252VXRpbC5hZGp1c3RQYWRBbmRSZXR1cm5TaGFwZShcbiAgICAgICAgICAgIGlucHV0RGltc1tkaW0gKyAyXSwgc3RyaWRlc1tkaW1dLCBkaWxhdGlvbnNbZGltXSwga2VybmVsU2hhcGVbZGltXSwgcGFkcywgZGltLCBkaW0gKyBpbnB1dERpbXMubGVuZ3RoIC0gMixcbiAgICAgICAgICAgIGF1dG9QYWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBoZWxwZXIgZm9yIGNvbXB1dGVTaGFwZUhlbHBlcigpIGFuZCBhZGp1c3RQYWRzQmFzZWRPbkF1dG9QYWQoKVxuICAvLyBhZGp1c3RzIHBhZCB2YWx1ZSBmb3IgZ2l2ZW4gJ2F1dG9QYWQnIHN0cmluZyBhbmQgY29tcHV0ZXMgb3V0cHV0IHNoYXBlIGFsb25nIGEgcGFydGljdWxhciBkaW1lbnNpb25cbiAgcHJpdmF0ZSBzdGF0aWMgYWRqdXN0UGFkQW5kUmV0dXJuU2hhcGUoXG4gICAgICBpblNpemU6IG51bWJlciwgc3RyaWRlOiBudW1iZXIsIGRpbGF0aW9uOiBudW1iZXIsIGtlcm5lbDogbnVtYmVyLCBwYWRzOiBudW1iZXJbXSwgcGFkSGVhZEluZGV4OiBudW1iZXIsXG4gICAgICBwYWRUYWlsSW5kZXg6IG51bWJlciwgYXV0b1BhZD86IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgZGtlcm5lbCA9IGRpbGF0aW9uICogKGtlcm5lbCAtIDEpICsgMTtcbiAgICBpZiAoYXV0b1BhZCAmJiBhdXRvUGFkICE9PSAnTk9UU0VUJykge1xuICAgICAgc3dpdGNoIChhdXRvUGFkKSB7XG4gICAgICAgIGNhc2UgJ1ZBTElEJzpcbiAgICAgICAgICBwYWRzW3BhZEhlYWRJbmRleF0gPSAwO1xuICAgICAgICAgIHBhZHNbcGFkVGFpbEluZGV4XSA9IDA7XG4gICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKChpblNpemUgLSBka2VybmVsKSAvIHN0cmlkZSkgKyAxKTtcbiAgICAgICAgY2FzZSAnU0FNRV9MT1dFUic6XG4gICAgICAgIGNhc2UgJ1NBTUVfVVBQRVInOlxuICAgICAgICAgIGlmIChkaWxhdGlvbiAhPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWxhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBTQU1FX1VQUEVSIG9yIFNBTUVfTE9XRVInKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGVnYWN5VGFyZ2V0U2l6ZSA9IChpblNpemUgKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTtcbiAgICAgICAgICAgIGNvbnN0IHBhZE5lZWRlZCA9IChsZWdhY3lUYXJnZXRTaXplIC0gMSkgKiBzdHJpZGUgKyBrZXJuZWwgLSBpblNpemU7XG4gICAgICAgICAgICBwYWRzW3BhZEhlYWRJbmRleF0gPVxuICAgICAgICAgICAgICAgIChhdXRvUGFkID09PSAnU0FNRV9MT1dFUicpID8gTWF0aC5mbG9vcigocGFkTmVlZGVkICsgMSkgLyAyKSA6IE1hdGguZmxvb3IocGFkTmVlZGVkIC8gMik7XG4gICAgICAgICAgICBwYWRzW3BhZFRhaWxJbmRleF0gPSBwYWROZWVkZWQgLSBwYWRzW3BhZEhlYWRJbmRleF07XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoKGluU2l6ZSArIHBhZE5lZWRlZCAtIGtlcm5lbCkgLyBzdHJpZGUpICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgQXV0b1BhZCB0eXBlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKCgoaW5TaXplICsgcGFkc1twYWRIZWFkSW5kZXhdICsgcGFkc1twYWRUYWlsSW5kZXhdIC0gZGtlcm5lbCkgLyBzdHJpZGUpICsgMSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZW1tVXRpbCB7XG4gIC8vIHdpbGwgbWFrZSBzdXJlIGlucHV0IHNoYXBlcyBhcmUgY29tcGF0aWJsZSBmb3IgdGhpcyBvcFxuICAvLyBhbmQgcmV0dXJuIGJhY2sgdGhlIHNoYXBlIG9mIHRoZSBvdXRwdXQgaW4gdGhlIGZvcm0gb2YgYSB0dXBsZVxuICAvLyB3aWxsIHRocm93IGV4Y2VwdGlvbiBpZiB0aGUgaW5wdXQgc2hhcGVzIGFyZSBub3QgY29tcGF0aWJsZVxuICBzdGF0aWMgZ2V0U2hhcGVPZkdlbW1SZXN1bHQoXG4gICAgICBsZWZ0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCB0cmFuc0xlZnQ6IGJvb2xlYW4sIHJpZ2h0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCB0cmFuc1JpZ2h0OiBib29sZWFuLFxuICAgICAgYmlhc1NoYXBlPzogcmVhZG9ubHkgbnVtYmVyW10pOiByZWFkb25seSBudW1iZXJbXSB7XG4gICAgaWYgKGxlZnRTaGFwZS5sZW5ndGggIT09IDIgfHwgcmlnaHRTaGFwZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2hhcGUgbmVlZCB0byBiZSBvZiBzaXplIDInKTtcbiAgICB9XG5cbiAgICBsZXQgTTogbnVtYmVyO1xuICAgIGxldCBLOiBudW1iZXI7XG4gICAgbGV0IE46IG51bWJlcjtcblxuICAgIGlmICh0cmFuc0xlZnQpIHtcbiAgICAgIE0gPSBsZWZ0U2hhcGVbMV07XG4gICAgICBLID0gbGVmdFNoYXBlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBNID0gbGVmdFNoYXBlWzBdO1xuICAgICAgSyA9IGxlZnRTaGFwZVsxXTtcbiAgICB9XG5cbiAgICBsZXQga0RpbSA9IC0xO1xuXG4gICAgaWYgKHRyYW5zUmlnaHQpIHtcbiAgICAgIE4gPSByaWdodFNoYXBlWzBdO1xuICAgICAga0RpbSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIE4gPSByaWdodFNoYXBlWzFdO1xuICAgICAga0RpbSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHJpZ2h0U2hhcGVba0RpbV0gIT09IEspIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGltZW5zaW9uIG1pc21hdGNoJyk7XG4gICAgfVxuXG4gICAgaWYgKE0gPD0gMCB8fCBOIDw9IDAgfHwgSyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2hhcGUgc3BlY2lmaWVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGJpYXNTaGFwZSAmJiAhQnJvYWRjYXN0VXRpbC5pc1ZhbGlkQnJvYWRjYXN0KGJpYXNTaGFwZSwgW00sIE5dKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZW1tOiBpbnZhbGlkIGJpYXMgc2hhcGUgZm9yIGJyb2FkY2FzdCcpO1xuICAgIH1cblxuICAgIHJldHVybiBbTSwgTiwgS107XG4gIH1cbn1cblxuXG5leHBvcnQgY29uc3QgTUlOX0NMSVAgPSAtMy40MDI4MjM0NjYzODUyODg2ZSszODtcbmV4cG9ydCBjb25zdCBNQVhfQ0xJUCA9IDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzg7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7UHJvZ3JhbVVuaWZvcm0sIFByb2dyYW1Vbmlmb3JtVmFyaWFibGVJbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogY29uc3RhbnQgdmFsdWUgZm9yIGEgd29ya2dyb3VwIHNpemUuXG4gKlxuICogV2UgZGVmaW5pdGVseSBjYW4gZG8gZnVydGhlciBvcHRpbWl6YXRpb24gaW4gZnV0dXJlLCBidXQgZm9yIG5vdyB3ZSB1c2UgNjQuXG4gKlxuICogcnVsZSBvZiB0aHVtYjogVXNlIFthIHdvcmtncm91cCBzaXplIG9mXSA2NCB1bmxlc3MgeW91IGtub3cgd2hhdCBHUFUgeW91IGFyZSB0YXJnZXRpbmcgb3IgdGhhdCB5b3VyIHdvcmtsb2FkXG4gKiAgICAgICAgICAgICAgICBuZWVkcyBzb21ldGhpbmcgZGlmZmVyZW50LlxuICpcbiAqIGZyb206IGh0dHBzOi8vc3VybWEuZGV2L3RoaW5ncy93ZWJncHUvXG4gKiovXG5leHBvcnQgY29uc3QgV09SS0dST1VQX1NJWkUgPSA2NDtcblxuaW50ZXJmYWNlIEluZGljZXNIZWxwZXJUeXBlcyB7XG4gIC8qKlxuICAgKiBXR1NMIHR5cGUgb2YgaW5kaWNlcyBleHByZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBpbmRpY2VzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdHU0wgdHlwZSBvZiBhIHZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIHR5cGUgb2Ygc3RvcmFnZSB0eXBlIHJlcHJlc2VudGluZyBhIHZhbHVlXG4gICAqXG4gICAqIFRoaXMgaXMgdXN1YWxseSB0aGUgc2FtZSB0byBgdmFsdWVgLCBidXQgZm9yIHNvbWUgdHlwZSAoZWcuIGJvb2wpLCB3ZSBuZWVkIHRvIHVzZSBgdTMyYCBhcyBzdG9yYWdlIHR5cGUgZm9yXG4gICAqIHZhbHVlIHR5cGUgYHZlYzQ8Ym9vbD5gXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRlbnNvciB0eXBlIGFzIHJlcHJlc2VudGVkIGluIFRlbnNvclZpZXdcbiAgICovXG4gIHJlYWRvbmx5IHRlbnNvcjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgaGVscGVyIGNsYXNzIGZvciBnZW5lcmF0aW5nIFdHU0wgY29kZSBmb3IgbWFuaXB1bGF0aW5nIGluZGljZXMgYW5kIGRhdGEgZm9yIGEgc2hhZGVyJ3MgaW5wdXQgb3Igb3V0cHV0LlxuICpcbiAqIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gb2ZmZXIgYSB1bmlmaWVkIHdheSB0byBnZW5lcmF0ZSBXR1NMIGNvZGUgZm9yIG1hbmlwdWxhdGluZyBpbmRpY2VzIGFuZCBkYXRhIGZvciBhIHNoYWRlcidzXG4gKiBpbnB1dCBvciBvdXRwdXQuXG4gKlxuICogVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgdGVybWlub2xvZ2llcyB1c2VkIGluIHRoaXMgY2xhc3M6XG4gKiAtIGBvZmZzZXRgOiBhIHVpbnQzMiB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBvZiBhbiBlbGVtZW50IGluIHRoZSBkYXRhIGJ1ZmZlci5cbiAqIC0gYGluZGljZXNgOiBhbiBhYnN0cmFjdGlvbiBvZiBhIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5J3MgaW5kaWNlcyByZXByZXNlbnRpbmcgdGhlIGRhdGEncyBpbmRleCBvbiBlYWNoIGRpbWVuc2lvbi5cbiAqIC0gYHZhbHVlYDogYSB2YWx1ZSBvZiBhIGRhdGEgZWxlbWVudC5cbiAqXG4gKiBVc2VycyBhcmUgZXhwZWN0ZWQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZm9yIGVhY2ggc2hhZGVyJ3MgaW5wdXQgb3Igb3V0cHV0LCBhbmQgdXNlIHRoZSBpbnN0YW5jZSB0b1xuICogZ2VuZXJhdGUgV0dTTCBjb2RlIGZvciBtYW5pcHVsYXRpbmcgaW5kaWNlcyBhbmQgZGF0YS4gVGhlIGZvbGxvd2luZyAyIGV4cG9ydGVkIGZ1bmN0aW9ucyBhcmUgZm9yIHVzZXJzIHRvIGNhbGwgdG9cbiAqIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBpbmRpY2VzIGhlbHBlcjpcbiAqIC0gYGlucHV0VmFyaWFibGUoKWA6IGNyZWF0ZSBhbiBpbmRpY2VzIGhlbHBlciBpbnN0YW5jZSBmb3IgYW4gaW5wdXQuXG4gKiAtIGBvdXRwdXRWYXJpYWJsZSgpYDogY3JlYXRlIGFuIGluZGljZXMgaGVscGVyIGluc3RhbmNlIGZvciBhbiBvdXRwdXQuXG4gKiAtIGBpbnRlcm5hbFZhcmlhYmxlKClgOiBjcmVhdGUgYW4gaW5kaWNlcyBoZWxwZXIgaW5zdGFuY2UgZm9yIGFuIGludGVybmFsIHZhcmlhYmxlLlxuICpcbiAqIEFuIGluZGljZXMgaGVscGVyIGluc3RhbmNlIGNvbnRhaW5zIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczpcbiAqIC0gYWNjZXNzIHJlYWRvbmx5IGJhc2ljIGluZm9ybWF0aW9uLCBpbmNsdWRpbmc6IGBuYW1lYCh0aGUgbmFtZSBvZiB0aGUgaW5wdXQgb3Igb3V0cHV0KSwgYHVzYWdlYCh3aGV0aGVyIGl0J3MgYW5cbiAqIGlucHV0LCBhbiBvdXRwdXQgb3IgYW4gaW50ZXJuYWwgdmFyaWFibGUpIGFuZCBgc2hhcGVgKHRoZSBwYXNzZWQgaW4gc2hhcGUpLlxuICogLSBgdHlwZWA6IGFjY2VzcyByZWFkb25seSB0eXBlIGluZm9ybWF0aW9uLCBpbmNsdWRpbmc6IGBpbmRpY2VzYCh0aGUgdHlwZSBvZiBpbmRpY2VzKSwgYHZhbHVlYCh0aGUgdHlwZSBvZiB2YWx1ZSBhdFxuICogcnVudGltZSksIGBzdG9yYWdlYCh0aGUgdHlwZSBvZiB2YWx1ZSBhdCBzdG9yYWdlKSBhbmQgYHRlbnNvcmAodGhlIHRlbnNvciB0eXBlIGFzIHJlcHJlc2VudGVkIGluIFRlbnNvclZpZXcpLlxuICogLSBnZW5lcmF0ZSBXR1NMIGNvZGUgZm9yIGdldHRpbmcgaW5kaWNlcyBmcm9tIG9mZnNldC4gVXNlIGBvZmZzZXRUb0luZGljZXMoKWAgZm9yIFdHU0wgY29kZSBzbmlwcGV0IHRvIGNhbGN1bGF0ZVxuICogaW5kaWNlcyBmcm9tIG9mZnNldCwgYW5kIHVzZSBgaW5kaWNlc1RvT2Zmc2V0KClgIGZvciBXR1NMIGNvZGUgc25pcHBldCB0byBjYWxjdWxhdGUgb2Zmc2V0IGZyb20gaW5kaWNlcy5cbiAqIC0gdG8gbWFuaXB1bGF0ZSBhbiBpbnN0YW5jZSBvZiBpbmRpY2VzLCB1c2UgYHNldEluZGljZXMoKWAgYW5kIGBnZXRJbmRpY2VzKClgIHRvIHNldCBhbmQgZ2V0IHRoZSBpbmRpY2VzIG9uIGFuXG4gKiBpbmRpY2VzIHZhcmlhYmxlLlxuICogLSB0byBtYW5pcHVsYXRlIGRhdGEsIHVzZSBgc2V0KClgL2BnZXQoKWAgdG8gYWNjZXNzIGRhdGEgYXQgdGhlIGdpdmVuIGluZGljZXMgZnJvbSBwYXJhbWV0ZXIgbGlzdCwgdXNlXG4gKiBgc2V0QnlJbmRpY2VzKClgL2BnZXRCeUluZGljZXMoKWAgdG8gYWNjZXNzIGRhdGEgYXQgdGhlIGdpdmVuIGluZGljZXMgZnJvbSBhbiBpbmRpY2VzIHZhcmlhYmxlLCBhbmQgdXNlXG4gKiBgc2V0QnlPZmZzZXQoKWAvYGdldEJ5T2Zmc2V0KClgIHRvIGFjY2VzcyBkYXRhIGF0IHRoZSBnaXZlbiBvZmZzZXQuXG4gKiAtIGBpbXBsYDogZ2V0IFdHU0wgY29kZSBvZiBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHV0aWwgZnVuY3Rpb25zIG1lbnRpb25lZCBhYm92ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRpY2VzSGVscGVyIHtcbiAgLyoqXG4gICAqIGdldCBXR1NMIGNvZGUgb2YgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gZm9yIHRoZSB1dGlsIGZ1bmN0aW9ucy5cbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGltcGw6ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogZ2V0IHR5cGUgaW5mb1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogSW5kaWNlc0hlbHBlclR5cGVzO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgb2YgYSBleHByZXNzaW9uIGZvciBnZXR0aW5nIGluZGljZXMgZnJvbSBvZmZzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB2YXJPZmZzZXQgLSBhIHUzMiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgb2Zmc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBgdHlwZS5pbmRpY2VzYCBleHByZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBvZmZzZXRUb0luZGljZXM6ICh2YXJPZmZzZXQ6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgb2YgYW4gYHUzMmAgZXhwcmVzc2lvbiBmb3IgZ2V0dGluZyBvZmZzZXQgZnJvbSBpbmRpY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFySW5kaWNlcyAtIGEgYHR5cGUuaW5kaWNlc2AgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGluZGljZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGB1MzJgIGV4cHJlc3Npb25cbiAgICovXG4gIHJlYWRvbmx5IGluZGljZXNUb09mZnNldDogKHZhckluZGljZXM6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgb2YgYW4gYHUzMmAgZXhwcmVzc2lvbiBmb3IgZ2V0dGluZyBvcmlnaW5hbCBvZmZzZXQgZnJvbSBicm9hZGNhc3RlZCBpbmRpY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFySW5kaWNlcyAtIGEgYHR5cGUuaW5kaWNlc2AgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIG91dHB1dCBpbmRpY2VzLlxuICAgKiBAcGFyYW0gb3V0cHV0IC0gb3V0cHV0IEluZGljZXNIZWxwZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGB1MzJgIGV4cHJlc3Npb25cbiAgICovXG4gIHJlYWRvbmx5IGJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0OiAodmFySW5kaWNlczogc3RyaW5nLCBvdXRwdXQ6IEluZGljZXNIZWxwZXIpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV0dTTCBjb2RlIG9mIGdlbmVyYXRpbmcgYW4gaW5kaWNlcyBsaXRlcmFsXG4gICAqXG4gICAqIEBwYXJhbSBpbml0IC0gaW5pdGlhbCB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGluZGljZXM6ICguLi5pbml0OiBSZWFkb25seUFycmF5PG51bWJlcnxzdHJpbmc+KSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdHU0wgY29kZSBvZiBhIHN0YXRlbWVudCBmb3Igc2V0dGluZyBpbmRpY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFySW5kaWNlcyAtIGEgdmFyaWFibGUgbmFtZSBmb3IgdGhlIGluZGljZXMuXG4gICAqIEBwYXJhbSBpZHggLSB0aGUgaW5kZXggb2YgdGhlIGluZGljZXMgdG8gc2V0LiBjYW4gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgKFdHU0wgYHUzMmAgZXhwcmVzc2lvbikuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBzZXQuIGNhbiBiZSBhIG51bWJlciBvciBhIHN0cmluZyAoV0dTTCBgdTMyYCBleHByZXNzaW9uKS5cbiAgICpcbiAgICogQHJldHVybnMgYSBXR1NMIHN0YXRlbWVudFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kaWNlc1NldDogKHZhckluZGljZXM6IHN0cmluZywgaWR4OiBudW1iZXJ8c3RyaW5nLCB2YWx1ZTogbnVtYmVyfHN0cmluZykgPT4gdm9pZDtcblxuICAvKipcbiAgICogV0dTTCBjb2RlIG9mIGFuIGB1MzJgIGV4cHJlc3Npb24gZm9yIGdldHRpbmcgaW5kaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhckluZGljZXMgLSBhIHZhcmlhYmxlIG5hbWUgZm9yIHRoZSBpbmRpY2VzLlxuICAgKiBAcGFyYW0gaWR4IC0gdGhlIGluZGV4IG9mIHRoZSBpbmRpY2VzIHRvIGdldC4gY2FuIGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nIChXR1NMIGB1MzJgIGV4cHJlc3Npb24pLlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBgdTMyYCBleHByZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBpbmRpY2VzR2V0OiAodmFySW5kaWNlczogc3RyaW5nLCBpZHg6IG51bWJlcnxzdHJpbmcpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV0dTTCBjb2RlIGZvciBhIHN0YXRlbWVudCBmb3Igc2V0dGluZyBkYXRhIGF0IHRoZSBnaXZlbiBpbmRpY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaW5kaWNlc0FuZFZhbHVlIC0gYW4gYXJyYXkgb2YgbnVtYmVycyBvciBzdHJpbmdzIChXR1NMIGB1MzJgIGV4cHJlc3Npb24pIHJlcHJlc2VudGluZyB0aGUgaW5kaWNlcywgZm9sbG93ZWRcbiAgICogICAgIGJ5IHRoZSB2YWx1ZSB0byBzZXQuIFRoaXMgYXJyYXkgc2hvdWxkIGhhdmUgZXhhY3RseSBgc2hhcGUubGVuZ3RoICsgMWAgZWxlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBzZXQ6ICguLi5pbmRpY2VzQW5kVmFsdWU6IFJlYWRvbmx5QXJyYXk8bnVtYmVyfHN0cmluZz4pID0+IHN0cmluZztcblxuICAvKipcbiAgICogV0dTTCBjb2RlIGZvciBhIHN0YXRlbWVudCBmb3Igc2V0dGluZyBkYXRhIGF0IHRoZSBnaXZlbiBpbmRpY2VzIHZhcmlhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFySW5kaWNlcyAtIGEgdmFyaWFibGUgbmFtZSBmb3IgdGhlIGluZGljZXMuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBzZXQuIHNob3VsZCBiZSBhIFdHU0wgZXhwcmVzc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IHNldEJ5SW5kaWNlczogKHZhckluZGljZXM6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgZm9yIGEgc3RhdGVtZW50IGZvciBzZXR0aW5nIGRhdGEgYXQgdGhlIGdpdmVuIG9mZnNldC5cbiAgICpcbiAgICogQHBhcmFtIG9mZnNldCAtIGEgbnVtYmVyIG9yIGEgc3RyaW5nIChXR1NMIGB1MzJgIGV4cHJlc3Npb24pIHJlcHJlc2VudGluZyB0aGUgb2Zmc2V0LlxuICAgKiBAcGFyYW0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gc2V0LiBzaG91bGQgYmUgYSBXR1NMIGV4cHJlc3Npb24uXG4gICAqL1xuICByZWFkb25seSBzZXRCeU9mZnNldDogKG9mZnNldDogbnVtYmVyfHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgZm9yIGFuIGV4cHJlc3Npb24gZm9yIGdldHRpbmcgZGF0YSBhdCB0aGUgZ2l2ZW4gaW5kaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIGluZGljZXMgLSBhbiBhcnJheSBvZiBudW1iZXJzIG9yIHN0cmluZ3MgKFdHU0wgYHUzMmAgZXhwcmVzc2lvbikgcmVwcmVzZW50aW5nIHRoZSBpbmRpY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0OiAoLi4uaW5kaWNlczogUmVhZG9ubHlBcnJheTxudW1iZXJ8c3RyaW5nPikgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgZm9yIGFuIGV4cHJlc3Npb24gZm9yIGdldHRpbmcgZGF0YSBhdCB0aGUgZ2l2ZW4gaW5kaWNlcyB2YXJpYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHZhckluZGljZXMgLSBhIHZhcmlhYmxlIG5hbWUgZm9yIHRoZSBpbmRpY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0QnlJbmRpY2VzOiAodmFySW5kaWNlczogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdHU0wgY29kZSBmb3IgYW4gZXhwcmVzc2lvbiBmb3IgZ2V0dGluZyBkYXRhIGF0IHRoZSBnaXZlbiBvZmZzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBvZmZzZXQgLSBhIG51bWJlciBvciBhIHN0cmluZyAoV0dTTCBgdTMyYCBleHByZXNzaW9uKSByZXByZXNlbnRpbmcgdGhlIG9mZnNldC5cbiAgICovXG4gIHJlYWRvbmx5IGdldEJ5T2Zmc2V0OiAob2Zmc2V0OiBudW1iZXJ8c3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIG5hbWUgb2YgdGhlIGRhdGEgdmFyaWFibGVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogd2hldGhlciB0aGUgaGVscGVyIGlzIGZvciBhbiBpbnB1dCwgYW4gb3V0cHV0IG9yIGFuIGludGVybmFsIHZhcmlhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNhZ2U6ICdpbnB1dCd8J291dHB1dCd8J2ludGVybmFsJztcblxuICAvKipcbiAgICogdGhlIHJhbmsgb2YgdGhlIGlucHV0IG9yIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHJhbms6IG51bWJlcjtcblxuICAvKipcbiAgICogYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YXJpYWJsZSBuYW1lIGZvciB0aGUgc2hhcGUgb2YgdGhlIGlucHV0IG9yIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHNoYXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFyaWFibGUgbmFtZSBmb3IgdGhlIHN0cmlkZXMgb2YgdGhlIGlucHV0IG9yIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHN0cmlkZXM6IHN0cmluZztcbn1cblxuY29uc3QgZ2V0V2dzbE1hcHBlZFR5cGUgPSAodHlwZTogbnVtYmVyLCBjb21wb25lbnRzOiAxfDJ8M3w0KTogc3RyaW5nfFtzdHJpbmcsIHN0cmluZ10gPT4ge1xuICBpZiAoY29tcG9uZW50cyA9PT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcigndmVjMyBoYXMgc2FtZSBhbGlnbm1lbnQgYXMgdmVjNCwgdXNlIHZlYzQgaW5zdGVhZCcpO1xuICB9XG5cbiAgLy8gcmV0dXJuIHR5cGUgaXMgWyBzdG9yYWdlIHR5cGUsIHJ1bnRpbWUgdHlwZSBdIG9yIGEgc2luZ2xlIHN0cmluZyBmb3IgYm90aFxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIERhdGFUeXBlLmZsb2F0MTY6XG4gICAgICByZXR1cm4gY29tcG9uZW50cyA+IDEgPyBgdmVjJHtjb21wb25lbnRzfTxmMTY+YCA6ICdmMTYnO1xuICAgIGNhc2UgRGF0YVR5cGUuZmxvYXQ6XG4gICAgICByZXR1cm4gY29tcG9uZW50cyA+IDEgPyBgdmVjJHtjb21wb25lbnRzfTxmMzI+YCA6ICdmMzInO1xuICAgIGNhc2UgRGF0YVR5cGUuaW50MzI6XG4gICAgICByZXR1cm4gY29tcG9uZW50cyA+IDEgPyBgdmVjJHtjb21wb25lbnRzfTxpMzI+YCA6ICdpMzInO1xuICAgIGNhc2UgRGF0YVR5cGUudWludDMyOlxuICAgICAgcmV0dXJuIGNvbXBvbmVudHMgPiAxID8gYHZlYyR7Y29tcG9uZW50c308dTMyPmAgOiAndTMyJztcbiAgICBjYXNlIERhdGFUeXBlLmludDY0OlxuICAgICAgaWYgKGNvbXBvbmVudHMgPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmVjWCBvZiB1aW50NjQgeWV0Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gWyd2ZWMyPHUzMj4nLCAnaTMyJ107XG4gICAgY2FzZSBEYXRhVHlwZS51aW50NjQ6XG4gICAgICBpZiAoY29tcG9uZW50cyA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2ZWNYIG9mIHVpbnQ2NCB5ZXQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbJ3ZlYzI8dTMyPicsICd1MzInXTtcbiAgICBjYXNlIERhdGFUeXBlLmJvb2w6XG4gICAgICBpZiAoY29tcG9uZW50cyAhPT0gNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jvb2wgbXVzdCBiZSB2ZWM0Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gWyd1MzInLCAndmVjNDxib29sPiddO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZSA9ICh0eXBlOiBEYXRhVHlwZSwgY29tcG9uZW50czogMXwyfDN8NCA9IDEpID0+IHtcbiAgY29uc3QgbWFwcGVkVHlwZSA9IGdldFdnc2xNYXBwZWRUeXBlKHR5cGUsIGNvbXBvbmVudHMpO1xuICByZXR1cm4gdHlwZW9mIG1hcHBlZFR5cGUgPT09ICdzdHJpbmcnID8gbWFwcGVkVHlwZSA6IG1hcHBlZFR5cGVbMF07XG59O1xuXG5leHBvcnQgY29uc3QgdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZSA9ICh0eXBlOiBEYXRhVHlwZSwgY29tcG9uZW50czogMXwyfDN8NCA9IDEpID0+IHtcbiAgY29uc3QgbWFwcGVkVHlwZSA9IGdldFdnc2xNYXBwZWRUeXBlKHR5cGUsIGNvbXBvbmVudHMpO1xuICByZXR1cm4gdHlwZW9mIG1hcHBlZFR5cGUgPT09ICdzdHJpbmcnID8gbWFwcGVkVHlwZSA6IG1hcHBlZFR5cGVbMV07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMgPSAoLi4uZGltczogUmVhZG9ubHlBcnJheTxyZWFkb25seSBudW1iZXJbXT4pOiBQcm9ncmFtVW5pZm9ybVtdID0+IHtcbiAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW107XG4gIGRpbXMuZm9yRWFjaChkaW0gPT4ge1xuICAgIGlmIChkaW0ubGVuZ3RoICE9PSAwKSB7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaChcbiAgICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBkaW19LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoZGltKX0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwcm9ncmFtVW5pZm9ybXM7XG59O1xuXG4vKipcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGdldCBtYXhpbXVtIHZlY3RvciBzaXplIGZvciBzcGVjaWZpZWQgZGF0YSBsZW5ndGhcbiAqIEBwYXJhbSBzaXplXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYXhDb21wb25lbnRzID0gKHNpemU6IG51bWJlcikgPT4ge1xuICAvLyB3ZSBjYW5ub3QgdXNlIHZlYzMgdHlwZSBzaW5jZSBpdCBoYXMgYWxpZ25tZW50IG9mIDE2IGJ5dGVzXG4gIGlmIChzaXplICUgNCA9PT0gMCkge1xuICAgIHJldHVybiA0O1xuICB9IGVsc2UgaWYgKHNpemUgJSAyID09PSAwKSB7XG4gICAgcmV0dXJuIDI7XG4gIH1cblxuICByZXR1cm4gMTtcbn07XG5cbi8qKlxuICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB2YXJpYWJsZSBhcyBhIHNjYWxhciBvciB2ZWN0b3IuIGUuZy4gZjMyKDApIG9yIHZlYzRmKDAsMCwwLDApXG4gKiBAcGFyYW0gZGF0YVR5cGVcbiAqIEBwYXJhbSBjb21wb25lbnRzXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGZpbGxWZWN0b3IgPSAoZGF0YVR5cGUgPSAnZjMyJywgY29tcG9uZW50cz86IG51bWJlciwgdmFsdWUgPSAnMCcpID0+IHtcbiAgaWYgKCFjb21wb25lbnRzIHx8IGNvbXBvbmVudHMgPT09IDEpIHtcbiAgICByZXR1cm4gYCR7ZGF0YVR5cGV9KCR7dmFsdWV9KWA7XG4gIH1cblxuICByZXR1cm4gYHZlYyR7Y29tcG9uZW50c308JHtkYXRhVHlwZX0+KCR7dmFsdWV9KWA7XG59O1xuXG4vKipcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgY2FzdHMgdmFsdWUgb3IgdmVjdG9yIHRvIGYzMlxuICogQHBhcmFtIGRhdGFUeXBlXG4gKiBAcGFyYW0gY29tcG9uZW50c1xuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBjYXN0VG9GMzIgPSAoZGF0YVR5cGU6IHN0cmluZywgY29tcG9uZW50czogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gIGlmIChkYXRhVHlwZSA9PT0gJ2YzMicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGNvbXBvbmVudHMgPT09IDEpIHtcbiAgICByZXR1cm4gYGYzMigke3ZhbHVlfSlgO1xuICB9XG5cbiAgcmV0dXJuIGB2ZWMke2NvbXBvbmVudHN9PGYzMj4oJHt2YWx1ZX0pYDtcbn07XG5cbi8qKlxuICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHNjYWxhciBvciBzdW1zIGFsbCBjb21wb25lbnRzIG9mIGEgdmVjdG9yXG4gKiBAcGFyYW0gbmFtZVxuICogQHBhcmFtIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IHN1bVZlY3RvciA9IChuYW1lOiBzdHJpbmcsIGNvbXBvbmVudHM6IG51bWJlcikgPT4ge1xuICBpZiAoY29tcG9uZW50cyA9PT0gNCkge1xuICAgIHJldHVybiBgKCR7bmFtZX0ueCArICR7bmFtZX0ueSArICR7bmFtZX0ueiArICR7bmFtZX0udylgO1xuICB9IGVsc2UgaWYgKGNvbXBvbmVudHMgPT09IDIpIHtcbiAgICByZXR1cm4gYCgke25hbWV9LnggKyAke25hbWV9LnkpYDtcbiAgfSBlbHNlIGlmIChjb21wb25lbnRzID09PSAzKSB7XG4gICAgcmV0dXJuIGAoJHtuYW1lfS54ICsgJHtuYW1lfS55ICsgJHtuYW1lfS56KWA7XG4gIH1cblxuICByZXR1cm4gbmFtZTtcbn07XG5cbi8qKlxuICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHZhcmlhYmxlIGVsZW1lbnQgYXQgaW5kZXguXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHZhcmlhYmxlLlxuICogQHBhcmFtIGluZGV4IC0gdGhlIGluZGV4IG9mIHZhcmlhYmxlIGVsZW1lbnQuXG4gKiBAcGFyYW0gbGVuZ3RoIC0gdGhlIGxlbmd0aCBvZiB2YXJpYWJsZS5cbiAqIEBwYXJhbSB0eXBlIC0gdGhlIHR5cGUgb2YgdmFyaWFibGUsIG9wdGlvbmFsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudEF0ID1cbiAgICAobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIHR5cGU/OiBVbmlmb3JtRGF0YUVsZW1lbnRUeXBlKTogc3RyaW5nID0+IHtcbiAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3VuaWZvcm1zLicpICYmIGxlbmd0aCA+IDQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiAoaW5kZXgpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnZjE2Jykge1xuICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9Wygke2luZGV4fSkgLyA4XVsoJHtpbmRleH0pICUgOCAvIDRdWygke2luZGV4fSkgJSA4ICUgNF1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bmFtZX1bKCR7aW5kZXh9KSAvIDRdWygke2luZGV4fSkgJSA0XWA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnZjE2Jykge1xuICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9WyR7TWF0aC5mbG9vcihpbmRleCAvIDgpfV1bJHtNYXRoLmZsb29yKGluZGV4ICUgOCAvIDQpfV1bJHtpbmRleCAlIDggJSA0fV1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bmFtZX1bJHtNYXRoLmZsb29yKGluZGV4IC8gNCl9XVske2luZGV4ICUgNH1dYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsZW5ndGggPiAxID8gYCR7bmFtZX1bJHtpbmRleH1dYCA6IG5hbWU7XG4gICAgICB9XG4gICAgfTtcblxuLyoqXG4gKiBBIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgYSBJbmRpY2VzSGVscGVyIGZvciBhIGdpdmVuIGlucHV0IG9yIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBvciBvdXRwdXQuXG4gKiBAcGFyYW0gdGVuc29yVHlwZSAtIHRoZSB0ZW5zb3IgdHlwZSBvZiB0aGUgaW5wdXQgb3Igb3V0cHV0LlxuICogQHBhcmFtIHNoYXBlT3JSYW5rIC0gdGhlIHRlbnNvciBzaGFwZSBvciB0aGUgcmFuayBvZiB0aGUgaW5wdXQgb3Igb3V0cHV0LlxuICogQHBhcmFtIHVzYWdlIC0gdGhlIHVzYWdlIG9mIHRoZSBpbmRpY2VzIGhlbHBlci5cbiAqIEBwYXJhbSBjb21wb25lbnRzIC0gaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBvZiBlYWNoIGVsZW1lbnQuIDEgZm9yIHNjYWxhciwgMiBmb3IgdmVjMiwgMyBmb3IgdmVjMywgNCBmb3JcbiAqICAgIHZlYzQuXG4gKi9cbmNvbnN0IGNyZWF0ZUluZGljZXNIZWxwZXIgPVxuICAgIChuYW1lOiBzdHJpbmcsIHRlbnNvclR5cGU6IG51bWJlciwgc2hhcGVPclJhbms6IG51bWJlcnxyZWFkb25seSBudW1iZXJbXSwgdXNhZ2U6IEluZGljZXNIZWxwZXJbJ3VzYWdlJ10sXG4gICAgIGNvbXBvbmVudHM6IDF8MnwzfDQpOiBJbmRpY2VzSGVscGVyID0+IHtcbiAgICAgIGNvbnN0IHVzZVVuaWZvcm0gPSB0eXBlb2Ygc2hhcGVPclJhbmsgPT09ICdudW1iZXInO1xuICAgICAgY29uc3QgcmFuayA9IHVzZVVuaWZvcm0gPyBzaGFwZU9yUmFuayA6IHNoYXBlT3JSYW5rLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJhbmtJZGVudGl0eSA9IFsuLi5uZXcgQXJyYXkocmFuaykua2V5cygpXTtcbiAgICAgIGNvbnN0IGluZGljZXNUeXBlID0gcmFuayA8IDIgPyAndTMyJyA6IHJhbmsgPD0gNCA/IGB2ZWMke3Jhbmt9PHUzMj5gIDogYGFycmF5PHUzMiwgJHtyYW5rfT5gO1xuICAgICAgY29uc3QgbWFwcGVkVHlwZSA9IGdldFdnc2xNYXBwZWRUeXBlKHRlbnNvclR5cGUsIGNvbXBvbmVudHMpO1xuICAgICAgY29uc3QgdmFsdWVUeXBlID0gdHlwZW9mIG1hcHBlZFR5cGUgPT09ICdzdHJpbmcnID8gbWFwcGVkVHlwZSA6IG1hcHBlZFR5cGVbMV07XG4gICAgICBjb25zdCBzdG9yYWdlVHlwZSA9IHR5cGVvZiBtYXBwZWRUeXBlID09PSAnc3RyaW5nJyA/IG1hcHBlZFR5cGUgOiBtYXBwZWRUeXBlWzBdO1xuICAgICAgY29uc3QgdHlwZSA9IHtpbmRpY2VzOiBpbmRpY2VzVHlwZSwgdmFsdWU6IHZhbHVlVHlwZSwgc3RvcmFnZTogc3RvcmFnZVR5cGUsIHRlbnNvcjogdGVuc29yVHlwZX07XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZURpbSA9IChkaW06IG51bWJlcnxzdHJpbmcpOiBzdHJpbmcgPT4gdHlwZW9mIGRpbSA9PT0gJ3N0cmluZycgPyBkaW0gOiBgJHtkaW19dWA7XG5cbiAgICAgIGNvbnN0IGltcGxlbWVudGF0aW9uVXNlZCA9IHtcbiAgICAgICAgb2Zmc2V0VG9JbmRpY2VzOiBmYWxzZSxcbiAgICAgICAgaW5kaWNlc1RvT2Zmc2V0OiBmYWxzZSxcbiAgICAgICAgYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQ6IGZhbHNlLFxuICAgICAgICBzZXQ6IGZhbHNlLFxuICAgICAgICBzZXRCeUluZGljZXM6IGZhbHNlLFxuICAgICAgICBnZXQ6IGZhbHNlLFxuICAgICAgICBnZXRCeUluZGljZXM6IGZhbHNlLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdW5pZm9ybVByZWZpeCA9IHVzZVVuaWZvcm0gPyAndW5pZm9ybXMuJyA6ICcnO1xuICAgICAgY29uc3Qgc2hhcGUgPSBgJHt1bmlmb3JtUHJlZml4fSR7bmFtZX1fc2hhcGVgO1xuICAgICAgY29uc3Qgc3RyaWRlcyA9IGAke3VuaWZvcm1QcmVmaXh9JHtuYW1lfV9zdHJpZGVzYDtcblxuICAgICAgbGV0IG8yaVNuaXBwZXQgPSAnJztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuayAtIDE7IGkrKykge1xuICAgICAgICBvMmlTbmlwcGV0ICs9IGBcbiAgICBsZXQgZGltJHtpfSA9IGN1cnJlbnQgLyAke2dldEVsZW1lbnRBdChzdHJpZGVzLCBpLCByYW5rKX07XG4gICAgbGV0IHJlc3Qke2l9ID0gY3VycmVudCAlICR7Z2V0RWxlbWVudEF0KHN0cmlkZXMsIGksIHJhbmspfTtcbiAgICBpbmRpY2VzWyR7aX1dID0gZGltJHtpfTtcbiAgICBjdXJyZW50ID0gcmVzdCR7aX07XG4gICAgYDtcbiAgICAgIH1cbiAgICAgIG8yaVNuaXBwZXQgKz0gYGluZGljZXNbJHtyYW5rIC0gMX1dID0gY3VycmVudDtgO1xuXG4gICAgICBjb25zdCBvZmZzZXRUb0luZGljZXNJbXBsZW1lbnRhdGlvbiA9IHJhbmsgPCAyID8gJycgOiBgXG4gIGZuIG8yaV8ke25hbWV9KG9mZnNldDogdTMyKSAtPiAke3R5cGUuaW5kaWNlc30ge1xuICAgIHZhciBpbmRpY2VzOiAke3R5cGUuaW5kaWNlc307XG4gICAgdmFyIGN1cnJlbnQgPSBvZmZzZXQ7XG4gICAgJHtvMmlTbmlwcGV0fVxuICAgIHJldHVybiBpbmRpY2VzO1xuICB9YDtcblxuICAgICAgY29uc3Qgb2Zmc2V0VG9JbmRpY2VzID0gKHZhck9mZnNldDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5vZmZzZXRUb0luZGljZXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmFuayA8IDIgPyB2YXJPZmZzZXQgOiBgbzJpXyR7bmFtZX0oJHt2YXJPZmZzZXR9KWA7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvZmZzZXRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgaWYgKHJhbmsgPj0gMikge1xuICAgICAgICBmb3IgKGxldCBpID0gcmFuayAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgb2Zmc2V0cy5wdXNoKGAke2dldEVsZW1lbnRBdChzdHJpZGVzLCBpLCByYW5rKX0gKiAoaW5kaWNlc1ske2l9XSlgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpbmRpY2VzVG9PZmZzZXRJbXBsZW1lbnRhdGlvbiA9IHJhbmsgPCAyID8gJycgOiBgXG4gIGZuIGkyb18ke25hbWV9KGluZGljZXM6ICR7dHlwZS5pbmRpY2VzfSkgLT4gdTMyIHtcbiAgICByZXR1cm4gJHtvZmZzZXRzLmpvaW4oJysnKX07XG4gIH1gO1xuXG4gICAgICBjb25zdCBpbmRpY2VzVG9PZmZzZXQgPSAodmFySW5kaWNlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5pbmRpY2VzVG9PZmZzZXQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmFuayA8IDIgPyB2YXJJbmRpY2VzIDogYGkyb18ke25hbWV9KCR7dmFySW5kaWNlc30pYDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGluZGljZXMgPSAoLi4uaW5pdDogUmVhZG9ubHlBcnJheTxudW1iZXJ8c3RyaW5nPikgPT5cbiAgICAgICAgICByYW5rID09PSAwID8gJzB1JyA6IGAke3R5cGUuaW5kaWNlc30oJHtpbml0Lm1hcChub3JtYWxpemVEaW0pLmpvaW4oJywnKX0pYDtcblxuICAgICAgY29uc3QgaW5kaWNlc0dldCA9ICh2YXJJbmRpY2VzOiBzdHJpbmcsIGlkeDogbnVtYmVyfHN0cmluZykgPT4ge1xuICAgICAgICBpZiAocmFuayA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7dmFySW5kaWNlc31gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgJHtnZXRFbGVtZW50QXQodmFySW5kaWNlcywgaWR4LCByYW5rKX1gO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBpbmRpY2VzU2V0ID0gKHZhckluZGljZXM6IHN0cmluZywgaWR4OiBudW1iZXJ8c3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChyYW5rIDwgMikge1xuICAgICAgICAgIHJldHVybiBgJHt2YXJJbmRpY2VzfT0ke3ZhbHVlfTtgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgJHtnZXRFbGVtZW50QXQodmFySW5kaWNlcywgaWR4LCByYW5rKX09JHt2YWx1ZX07YDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXRJbXBsZW1lbnRhdGlvbjoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICAgIGNvbnN0IGJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0ID0gKHZhckluZGljZXM6IHN0cmluZywgb3V0cHV0OiBJbmRpY2VzSGVscGVyKSA9PiB7XG4gICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGltcGxLZXkgPSBgJHtvdXRwdXQubmFtZX1icm9hZGNhc3RlZEluZGljZXNUbyR7bmFtZX1PZmZzZXRgO1xuICAgICAgICBpZiAoaW1wbEtleSBpbiBicm9hZGNhc3RlZEluZGljZXNUb09mZnNldEltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGAke2ltcGxLZXl9KCR7dmFySW5kaWNlc30pYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZmZzZXRzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSByYW5rIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBjb25zdCBpZHggPSBvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0SW5kaWNlcycsIGkgKyBvdXRwdXQucmFuayAtIHJhbmspO1xuICAgICAgICAgIG9mZnNldHMucHVzaChgJHtpbmRpY2VzR2V0KHN0cmlkZXMsIGkpfSAqICgke2lkeH0gJSAke2luZGljZXNHZXQoc2hhcGUsIGkpfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBicm9hZGNhc3RlZEluZGljZXNUb09mZnNldEltcGxlbWVudGF0aW9uW2ltcGxLZXldID1cbiAgICAgICAgICAgIGBmbiAke2ltcGxLZXl9KG91dHB1dEluZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+IHUzMiB7XG4gICAgICAgICAgICAgcmV0dXJuICR7b2Zmc2V0cy5sZW5ndGggPiAwID8gb2Zmc2V0cy5qb2luKCcrJykgOiAnMHUnfTtcbiAgICAgICAgICAgfWA7XG5cbiAgICAgICAgcmV0dXJuIGAke2ltcGxLZXl9KCR7dmFySW5kaWNlc30pYDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNldEJ5T2Zmc2V0ID0gKG9mZnNldDogbnVtYmVyfHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gKCgpID0+IHtcbiAgICAgICAgaWYgKHR5cGUuc3RvcmFnZSA9PT0gdHlwZS52YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBgJHtuYW1lfVske29mZnNldH1dPSR7dmFsdWV9O2A7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdG9yYWdlID09PSAndmVjMjx1MzI+JyAmJiB0eXBlLnZhbHVlID09PSAnaTMyJykge1xuICAgICAgICAgIC8vIGludDY0LCBjb21wb25lbnRzID09PSAxXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9WyR7b2Zmc2V0fV09dmVjMjx1MzI+KHUzMigke3ZhbHVlfSksIHNlbGVjdCgwdSwgMHhGRkZGRkZGRnUsICR7dmFsdWV9IDwgMCkpO2A7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdG9yYWdlID09PSAndmVjMjx1MzI+JyAmJiB0eXBlLnZhbHVlID09PSAndTMyJykge1xuICAgICAgICAgIC8vIHVpbnQ2NCwgY29tcG9uZW50cyA9PT0gMVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfVske29mZnNldH1dPXZlYzI8dTMyPih1MzIoJHt2YWx1ZX0pLCAwdSk7YDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN0b3JhZ2UgPT09ICd1MzInICYmIHR5cGUudmFsdWUgPT09ICd2ZWM0PGJvb2w+Jykge1xuICAgICAgICAgIC8vIGJvb2wsIGNvbXBvbmVudHMgPT09IDRcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX1bJHtvZmZzZXR9XT1kb3QodmVjNDx1MzI+KDB4MSwgMHgxMDAsIDB4MTAwMDAsIDB4MTAwMDAwMCksIHZlYzQ8dTMyPigke3ZhbHVlfSkpO2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3Qgc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIHN0b3JhZ2UgdHlwZSAke3R5cGUuc3RvcmFnZX0gYW5kIHZhbHVlIHR5cGUgJHt0eXBlLnZhbHVlfSB5ZXRgKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcblxuICAgICAgY29uc3QgZ2V0QnlPZmZzZXQgPSAob2Zmc2V0OiBudW1iZXJ8c3RyaW5nKSA9PiAoKCkgPT4ge1xuICAgICAgICBpZiAodHlwZS5zdG9yYWdlID09PSB0eXBlLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9WyR7b2Zmc2V0fV1gO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUuc3RvcmFnZSA9PT0gJ3ZlYzI8dTMyPicgJiYgdHlwZS52YWx1ZSA9PT0gJ2kzMicpIHtcbiAgICAgICAgICAvLyBpbnQ2NCwgY29tcG9uZW50cyA9PT0gMVxuICAgICAgICAgIHJldHVybiBgaTMyKCR7bmFtZX1bJHtvZmZzZXR9XS54KWA7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdG9yYWdlID09PSAndmVjMjx1MzI+JyAmJiB0eXBlLnZhbHVlID09PSAndTMyJykge1xuICAgICAgICAgIC8vIHVpbnQ2NCwgY29tcG9uZW50cyA9PT0gMVxuICAgICAgICAgIHJldHVybiBgdTMyKCR7bmFtZX1bJHtvZmZzZXR9XS54KWA7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdG9yYWdlID09PSAndTMyJyAmJiB0eXBlLnZhbHVlID09PSAndmVjNDxib29sPicpIHtcbiAgICAgICAgICAvLyBib29sLCBjb21wb25lbnRzID09PSA0XG4gICAgICAgICAgcmV0dXJuIGB2ZWM0PGJvb2w+KGJvb2woJHtuYW1lfVske29mZnNldH1dICYgMHhGRnUpLCBib29sKCR7bmFtZX1bJHtvZmZzZXR9XSAmIDB4RkYwMHUpLCBib29sKCR7bmFtZX1bJHtcbiAgICAgICAgICAgICAgb2Zmc2V0fV0gJiAweEZGMDAwMHUpLCBib29sKCR7bmFtZX1bJHtvZmZzZXR9XSAmIDB4RkYwMDAwMDB1KSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IHN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBzdG9yYWdlIHR5cGUgJHt0eXBlLnN0b3JhZ2V9IGFuZCB2YWx1ZSB0eXBlICR7dHlwZS52YWx1ZX0geWV0YCk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG5cbiAgICAgIGNvbnN0IGdldEJ5SW5kaWNlc0ltcGxlbWVudGF0aW9uID0gcmFuayA8IDIgPyAnJyA6IGBcbiAgZm4gZ2V0XyR7bmFtZX1CeUluZGljZXMoaW5kaWNlczogJHt0eXBlLmluZGljZXN9KSAtPiAke3ZhbHVlVHlwZX0ge1xuICAgIHJldHVybiAke2dldEJ5T2Zmc2V0KGBpMm9fJHtuYW1lfShpbmRpY2VzKWApfTtcbiAgfWA7XG5cbiAgICAgIGNvbnN0IGdldEltcGxlbWVudGF0aW9uID0gcmFuayA8IDIgPyAnJyA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uUGFyYW1zID0gcmFua0lkZW50aXR5Lm1hcChpID0+IGBkJHtpfTogdTMyYCkuam9pbignLCAnKTtcbiAgICAgICAgY29uc3QgZGltc1BhcmFtcyA9IHJhbmtJZGVudGl0eS5tYXAoaSA9PiBgZCR7aX1gKS5qb2luKCcsICcpO1xuICAgICAgICByZXR1cm4gYFxuICBmbiBnZXRfJHtuYW1lfSgke2Z1bmN0aW9uUGFyYW1zfSkgLT4gJHt2YWx1ZVR5cGV9IHtcbiAgICByZXR1cm4gZ2V0XyR7bmFtZX1CeUluZGljZXMoJHtpbmRpY2VzKGRpbXNQYXJhbXMpfSk7XG4gIH1gO1xuICAgICAgfSkoKTtcblxuICAgICAgY29uc3QgZ2V0ID0gKC4uLmluZGljZXM6IFJlYWRvbmx5QXJyYXk8bnVtYmVyfHN0cmluZz4pID0+IHtcbiAgICAgICAgaWYgKGluZGljZXMubGVuZ3RoICE9PSByYW5rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbmRpY2VzIGxlbmd0aCBtdXN0IGJlICR7cmFua31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRJbmRpY2VzID0gaW5kaWNlcy5tYXAobm9ybWFsaXplRGltKS5qb2luKCcsJyk7XG5cbiAgICAgICAgaWYgKHJhbmsgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZ2V0QnlPZmZzZXQoJzB1Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAocmFuayA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBnZXRCeU9mZnNldChub3JtYWxpemVkSW5kaWNlc1swXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLmdldCA9IHRydWU7XG4gICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLmdldEJ5SW5kaWNlcyA9IHRydWU7XG4gICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLmluZGljZXNUb09mZnNldCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGBnZXRfJHtuYW1lfSgke25vcm1hbGl6ZWRJbmRpY2VzfSlgO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBnZXRCeUluZGljZXMgPSAodmFySW5kaWNlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChyYW5rIDwgMikge1xuICAgICAgICAgIHJldHVybiBnZXRCeU9mZnNldCh2YXJJbmRpY2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuZ2V0QnlJbmRpY2VzID0gdHJ1ZTtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuaW5kaWNlc1RvT2Zmc2V0ID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYGdldF8ke25hbWV9QnlJbmRpY2VzKCR7dmFySW5kaWNlc30pYDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2V0QnlJbmRpY2VzSW1wbGVtZW50YXRpb24gPSByYW5rIDwgMiA/ICcnIDogYFxuICBmbiBzZXRfJHtuYW1lfUJ5SW5kaWNlcyhpbmRpY2VzOiAke3R5cGUuaW5kaWNlc30sIHZhbHVlOiAke3ZhbHVlVHlwZX0pIHtcbiAgICAke3NldEJ5T2Zmc2V0KGBpMm9fJHtuYW1lfShpbmRpY2VzKWAsICd2YWx1ZScpfVxuICB9YDtcblxuICAgICAgY29uc3Qgc2V0SW1wbGVtZW50YXRpb24gPSByYW5rIDwgMiA/ICcnIDogKCgpID0+IHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25QYXJhbXMgPSByYW5rSWRlbnRpdHkubWFwKGkgPT4gYGQke2l9OiB1MzJgKS5qb2luKCcsICcpO1xuICAgICAgICBjb25zdCBkaW1zUGFyYW1zID0gcmFua0lkZW50aXR5Lm1hcChpID0+IGBkJHtpfWApLmpvaW4oJywgJyk7XG4gICAgICAgIHJldHVybiBgXG4gIGZuIHNldF8ke25hbWV9KCR7ZnVuY3Rpb25QYXJhbXN9LCB2YWx1ZTogJHt2YWx1ZVR5cGV9KSB7XG4gICAgc2V0XyR7bmFtZX1CeUluZGljZXMoJHtpbmRpY2VzKGRpbXNQYXJhbXMpfSwgdmFsdWUpO1xuICB9YDtcbiAgICAgIH0pKCk7XG5cbiAgICAgIGNvbnN0IHNldCA9ICguLi5pbmRpY2VzQW5kVmFsdWU6IFJlYWRvbmx5QXJyYXk8bnVtYmVyfHN0cmluZz4pID0+IHtcbiAgICAgICAgaWYgKGluZGljZXNBbmRWYWx1ZS5sZW5ndGggIT09IHJhbmsgKyAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbmRpY2VzIGxlbmd0aCBtdXN0IGJlICR7cmFua31gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGluZGljZXNBbmRWYWx1ZVtyYW5rXTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3JtYWxpemVkSW5kaWNlcyA9IGluZGljZXNBbmRWYWx1ZS5zbGljZSgwLCByYW5rKS5tYXAobm9ybWFsaXplRGltKS5qb2luKCcsJyk7XG5cbiAgICAgICAgaWYgKHJhbmsgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gc2V0QnlPZmZzZXQoJzB1JywgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHJhbmsgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gc2V0QnlPZmZzZXQobm9ybWFsaXplZEluZGljZXNbMF0sIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuc2V0ID0gdHJ1ZTtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuc2V0QnlJbmRpY2VzID0gdHJ1ZTtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuaW5kaWNlc1RvT2Zmc2V0ID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYHNldF8ke25hbWV9KCR7bm9ybWFsaXplZEluZGljZXN9LCAke3ZhbHVlfSlgO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzZXRCeUluZGljZXMgPSAodmFySW5kaWNlczogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChyYW5rIDwgMikge1xuICAgICAgICAgIHJldHVybiBzZXRCeU9mZnNldCh2YXJJbmRpY2VzLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLnNldEJ5SW5kaWNlcyA9IHRydWU7XG4gICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLmluZGljZXNUb09mZnNldCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGBzZXRfJHtuYW1lfUJ5SW5kaWNlcygke3ZhckluZGljZXN9LCAke3ZhbHVlfSk7YDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgaW1wbCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaW1wbHMgPSBbXTtcbiAgICAgICAgbGV0IG5lZWRTaGFwZVN0cmlkZXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKGltcGxlbWVudGF0aW9uVXNlZC5vZmZzZXRUb0luZGljZXMpIHtcbiAgICAgICAgICBpbXBscy5wdXNoKG9mZnNldFRvSW5kaWNlc0ltcGxlbWVudGF0aW9uKTtcbiAgICAgICAgICBuZWVkU2hhcGVTdHJpZGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25Vc2VkLmluZGljZXNUb09mZnNldCkge1xuICAgICAgICAgIGltcGxzLnB1c2goaW5kaWNlc1RvT2Zmc2V0SW1wbGVtZW50YXRpb24pO1xuICAgICAgICAgIG5lZWRTaGFwZVN0cmlkZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbXBsZW1lbnRhdGlvblVzZWQuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQpIHtcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0SW1wbGVtZW50YXRpb24pLmZvckVhY2goaW1wbCA9PiBpbXBscy5wdXNoKGltcGwpKTtcbiAgICAgICAgICBuZWVkU2hhcGVTdHJpZGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25Vc2VkLnNldCkge1xuICAgICAgICAgIGltcGxzLnB1c2goc2V0SW1wbGVtZW50YXRpb24pO1xuICAgICAgICAgIG5lZWRTaGFwZVN0cmlkZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbXBsZW1lbnRhdGlvblVzZWQuc2V0QnlJbmRpY2VzKSB7XG4gICAgICAgICAgaW1wbHMucHVzaChzZXRCeUluZGljZXNJbXBsZW1lbnRhdGlvbik7XG4gICAgICAgICAgbmVlZFNoYXBlU3RyaWRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGltcGxlbWVudGF0aW9uVXNlZC5nZXQpIHtcbiAgICAgICAgICBpbXBscy5wdXNoKGdldEltcGxlbWVudGF0aW9uKTtcbiAgICAgICAgICBuZWVkU2hhcGVTdHJpZGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25Vc2VkLmdldEJ5SW5kaWNlcykge1xuICAgICAgICAgIGltcGxzLnB1c2goZ2V0QnlJbmRpY2VzSW1wbGVtZW50YXRpb24pO1xuICAgICAgICAgIG5lZWRTaGFwZVN0cmlkZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlVW5pZm9ybSAmJiBuZWVkU2hhcGVTdHJpZGVzKSB7XG4gICAgICAgICAgaW1wbHMudW5zaGlmdChcbiAgICAgICAgICAgICAgYGNvbnN0ICR7c2hhcGV9ID0gJHt0eXBlLmluZGljZXN9KCR7c2hhcGVPclJhbmsuam9pbignLCcpfSk7YCxcbiAgICAgICAgICAgICAgYGNvbnN0ICR7c3RyaWRlc30gPSAke3R5cGUuaW5kaWNlc30oJHtTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoc2hhcGVPclJhbmspLmpvaW4oJywnKX0pO2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbXBscy5qb2luKCdcXG4nKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGltcGwsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIG9mZnNldFRvSW5kaWNlcyxcbiAgICAgICAgaW5kaWNlc1RvT2Zmc2V0LFxuICAgICAgICBicm9hZGNhc3RlZEluZGljZXNUb09mZnNldCxcbiAgICAgICAgaW5kaWNlcyxcbiAgICAgICAgaW5kaWNlc0dldCxcbiAgICAgICAgaW5kaWNlc1NldCxcbiAgICAgICAgc2V0LFxuICAgICAgICBzZXRCeU9mZnNldCxcbiAgICAgICAgc2V0QnlJbmRpY2VzLFxuICAgICAgICBnZXQsXG4gICAgICAgIGdldEJ5T2Zmc2V0LFxuICAgICAgICBnZXRCeUluZGljZXMsXG4gICAgICAgIC8vIGlzVmVjNCxcbiAgICAgICAgdXNhZ2UsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHN0cmlkZXMsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICByYW5rXG4gICAgICB9O1xuICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIGEgSW5kaWNlc0hlbHBlciBmb3IgYW4gaW5wdXQuXG4gKlxuICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgaW5wdXQuXG4gKiBAcGFyYW0gdHlwZSAtIHRoZSB0ZW5zb3IgdHlwZSBvZiB0aGUgaW5wdXQuXG4gKiBAcGFyYW0gc2hhcGVPclJhbmsgLSB0aGUgdGVuc29yIHNoYXBlIG9yIHRoZSByYW5rIG9mIHRoZSBpbnB1dC5cbiAqIEBwYXJhbSBjb21wb25lbnRzIC0gdGhlIG51bWJlciBvZiBjb21wb25lbnRzIG9mIHRoZSBpbnB1dC4gYXZhaWxhYmxlIHZhbHVlcyBhcmUgMSwgMiwgMywgNC4gZGVmYXVsdCBpcyAxLlxuICogQHJldHVybnMgYW4gSW5kaWNlc0hlbHBlciBmb3IgdGhlIGlucHV0LlxuICovXG5leHBvcnQgY29uc3QgaW5wdXRWYXJpYWJsZSA9XG4gICAgKG5hbWU6IHN0cmluZywgdHlwZTogbnVtYmVyLCBzaGFwZU9yUmFuazogbnVtYmVyfHJlYWRvbmx5IG51bWJlcltdLCBjb21wb25lbnRzOiAxfDJ8M3w0ID0gMSk6IEluZGljZXNIZWxwZXIgPT5cbiAgICAgICAgY3JlYXRlSW5kaWNlc0hlbHBlcihuYW1lLCB0eXBlLCBzaGFwZU9yUmFuaywgJ2lucHV0JywgY29tcG9uZW50cyk7XG5cbi8qKlxuICogQ3JlYXRlIGEgSW5kaWNlc0hlbHBlciBmb3IgYW4gb3V0cHV0LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIG91dHB1dC5cbiAqIEBwYXJhbSB0eXBlIC0gdGhlIHRlbnNvciB0eXBlIG9mIHRoZSBvdXRwdXQuXG4gKiBAcGFyYW0gc2hhcGVPclJhbmsgLSB0aGUgdGVuc29yIHNoYXBlIG9yIHRoZSByYW5rIG9mIHRoZSBvdXRwdXQuXG4gKiBAcGFyYW0gY29tcG9uZW50cyAtIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBvZiB0aGUgb3V0cHV0LiBhdmFpbGFibGUgdmFsdWVzIGFyZSAxLCAyLCAzLCA0LiBkZWZhdWx0IGlzIDEuXG4gKiBAcmV0dXJucyBhbiBJbmRpY2VzSGVscGVyIGZvciB0aGUgb3V0cHV0LlxuICovXG5leHBvcnQgY29uc3Qgb3V0cHV0VmFyaWFibGUgPVxuICAgIChuYW1lOiBzdHJpbmcsIHR5cGU6IG51bWJlciwgc2hhcGVPclJhbms6IG51bWJlcnxyZWFkb25seSBudW1iZXJbXSwgY29tcG9uZW50czogMXwyfDN8NCA9IDEpOiBJbmRpY2VzSGVscGVyID0+XG4gICAgICAgIGNyZWF0ZUluZGljZXNIZWxwZXIobmFtZSwgdHlwZSwgc2hhcGVPclJhbmssICdvdXRwdXQnLCBjb21wb25lbnRzKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBJbmRpY2VzSGVscGVyIGZvciBhbiBpbnRlcm5hbCB2YXJpYWJsZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS5cbiAqIEBwYXJhbSB0eXBlIC0gdGhlIHRlbnNvciB0eXBlIG9mIHRoZSB2YXJpYWJsZS5cbiAqIEBwYXJhbSBzaGFwZU9yUmFuayAtIHRoZSB0ZW5zb3Igc2hhcGUgb3IgdGhlIHJhbmsgb2YgdGhlIHZhcmlhYmxlLlxuICogQHBhcmFtIGNvbXBvbmVudHMgLSB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgb2YgdGhlIHZhcmlhYmxlLiBhdmFpbGFibGUgdmFsdWVzIGFyZSAxLCAyLCAzLCA0LiBkZWZhdWx0IGlzIDEuXG4gKiBAcmV0dXJucyBhbiBJbmRpY2VzSGVscGVyIGZvciB0aGUgdmFyaWFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnRlcm5hbFZhcmlhYmxlID1cbiAgICAobmFtZTogc3RyaW5nLCB0eXBlOiBudW1iZXIsIHNoYXBlT3JSYW5rOiBudW1iZXJ8cmVhZG9ubHkgbnVtYmVyW10sIGNvbXBvbmVudHM6IDF8MnwzfDQgPSAxKTogSW5kaWNlc0hlbHBlciA9PlxuICAgICAgICBjcmVhdGVJbmRpY2VzSGVscGVyKG5hbWUsIHR5cGUsIHNoYXBlT3JSYW5rLCAnaW50ZXJuYWwnLCBjb21wb25lbnRzKTtcblxuZXhwb3J0IHR5cGUgVW5pZm9ybURhdGFFbGVtZW50VHlwZSA9ICd1MzInfCdmMTYnfCdmMzInfCdpMzInO1xuZXhwb3J0IHR5cGUgVW5pZm9ybXNBcnJheVR5cGUgPSBBcnJheTx7bmFtZTogc3RyaW5nOyB0eXBlOiBVbmlmb3JtRGF0YUVsZW1lbnRUeXBlOyBsZW5ndGg/OiBudW1iZXJ9PjtcblxuLyoqXG4gKiBBIFNoYWRlckhlbHBlciBpcyBhIGhlbHBlciBjbGFzcyBmb3IgZ2VuZXJhdGluZyBXR1NMIGNvZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2hhZGVySGVscGVyIHtcbiAgLyoqXG4gICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBzdGFydCBvZiBtYWluIGZ1bmN0aW9uIGluIFdHU0wgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgKiAgLi4uXG4gICAqXG4gICAqICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICogICAgLy8geW91ciBjb2RlIGhlcmUgaW5zaWRlIG1haW4oKSBmdW5jdGlvblxuICAgKiAgICAuLi5cbiAgICogIH1cbiAgICogYDtcbiAgICpcbiAgICogQHBhcmFtIHdvcmtncm91cFNpemUgLSBhbiBvcHRpb25hbCB3b3JrZ3JvdXAgc2l6ZS4gZGVmYXVsdCBpcyBXT1JLR1JPVVBfU0laRS5cbiAgICovXG4gIG1haW5TdGFydCh3b3JrZ3JvdXBTaXplPzogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IHN0cmluZztcblxuICAvKipcbiAgICogQSBoZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGNvZGUgc25pcHBldCBmb3IgZ3VhcmRpbmcgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHNpemUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgKiAgLi4uXG4gICAqXG4gICAqICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICogICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhvdXRwdXRTaXplKX1cbiAgICpcbiAgICogICAgLy8geW91ciBjb2RlIGhlcmUgaW5zaWRlIG1haW4oKSBmdW5jdGlvblxuICAgKiAgICAuLi5cbiAgICogIH1cbiAgICogYDtcbiAgICpcbiAgICogQHBhcmFtIHNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgZGF0YSB0byBndWFyZCBhZ2FpbnN0LiBjYW4gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgKFdHU0wgYHUzMmAgZXhwcmVzc2lvbikuXG4gICAqL1xuICBndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKHNpemU6IHVua25vd24pOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBjb2RlIHNuaXBwZXQgZm9yIGRlY2xhcmluZyBtdWx0aXBsZSBpbnB1dHMgb3Igb3V0cHV0cy5cbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlcyAtIGFuIGFycmF5IG9mIEluZGljZXNIZWxwZXIgZm9yIHRoZSB2YXJpYWJsZXMuXG4gICAqL1xuICBkZWNsYXJlVmFyaWFibGVzKC4uLnZhcmlhYmxlczogSW5kaWNlc0hlbHBlcltdKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0byByZWdpc3RlciBvbmUgdW5pZm9ybS4gQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byByZWdpc3RlciBtdWx0aXBsZSB1bmlmb3Jtcy5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybS5cbiAgICogQHBhcmFtIHR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgdW5pZm9ybS5cbiAgICogQHBhcmFtIGxlbmd0aCAtIHRoZSBsZW5ndGggb2YgdGhlIHVuaWZvcm0sIGRlZmF1bHQgdG8gMSB3aGVuIGl0IGlzIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlZ2lzdGVyVW5pZm9ybShuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgbGVuZ3RoPzogbnVtYmVyKTogU2hhZGVySGVscGVyO1xuXG4gIC8qKlxuICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0byByZWdpc3RlciBtdWx0aXBsZSB1bmlmb3Jtcy4gQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byByZWdpc3RlciBtdWx0aXBsZSB1bmlmb3Jtcy5cbiAgICpcbiAgICogQHBhcmFtIHVuaWZvcm1zIC0gYW4gYXJyYXkgb2YgdW5pZm9ybXMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgYW4gb2JqZWN0IHdpdGggMiBwcm9wZXJ0aWVzOiBgbmFtZWAgYW5kXG4gICAqICAgICBgdHlwZWAuXG4gICAqL1xuICByZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSk6IFNoYWRlckhlbHBlcjtcblxuICAvKipcbiAgICogQSBoZWxwZXIgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgbXVsdGlwbGUgaW50ZXJuYWwgdmFyaWFibGVzLiBDYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIHJlZ2lzdGVyIG11bHRpcGxlXG4gICAqIGludGVybmFsIHZhcmlhYmxlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlcyAtIGFuIGFycmF5IG9mIEluZGljZXNIZWxwZXIgZm9yIHRoZSB2YXJpYWJsZXMuXG4gICAqL1xuICByZWdpc3RlckludGVybmFsVmFyaWFibGVzKC4uLnZhcmlhYmxlczogSW5kaWNlc0hlbHBlcltdKTogU2hhZGVySGVscGVyO1xufVxuXG5jbGFzcyBTaGFkZXJIZWxwZXJJbXBsIGltcGxlbWVudHMgU2hhZGVySGVscGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub3JtYWxpemVkRGlzcGF0Y2hHcm91cDogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBwcml2YXRlIGxpbWl0czogR1BVU3VwcG9ydGVkTGltaXRzKSB7fVxuXG4gIGd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoc2l6ZTogbnVtYmVyfHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gR3VhcmQgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHdvcmsgZ3JvdXAgc2l6ZXNcbiAgICBjb25zdCBzaXplSW5Db2RlID0gdHlwZW9mIHNpemUgPT09ICdudW1iZXInID8gYCR7c2l6ZX11YCA6IHNpemU7XG4gICAgcmV0dXJuIGBpZiAoZ2xvYmFsX2lkeCA+PSAke3NpemVJbkNvZGV9KSB7IHJldHVybjsgfWA7XG4gIH1cblxuICBtYWluU3RhcnQod29ya2dyb3VwU2l6ZTogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFdPUktHUk9VUF9TSVpFKSB7XG4gICAgY29uc3Qgd29ya2dyb3VwU2l6ZVggPSB0eXBlb2Ygd29ya2dyb3VwU2l6ZSA9PT0gJ251bWJlcicgPyB3b3JrZ3JvdXBTaXplIDogd29ya2dyb3VwU2l6ZVswXTtcbiAgICBjb25zdCB3b3JrZ3JvdXBTaXplWSA9IHR5cGVvZiB3b3JrZ3JvdXBTaXplID09PSAnbnVtYmVyJyA/IDEgOiB3b3JrZ3JvdXBTaXplWzFdO1xuICAgIGNvbnN0IHdvcmtncm91cFNpemVaID0gdHlwZW9mIHdvcmtncm91cFNpemUgPT09ICdudW1iZXInID8gMSA6IHdvcmtncm91cFNpemVbMl07XG5cbiAgICBpZiAod29ya2dyb3VwU2l6ZVggPiB0aGlzLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggfHxcbiAgICAgICAgd29ya2dyb3VwU2l6ZVkgPiB0aGlzLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgfHxcbiAgICAgICAgd29ya2dyb3VwU2l6ZVogPiB0aGlzLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVopIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgd29ya2dyb3VwIHNpemUgWyR7d29ya2dyb3VwU2l6ZVh9LCAke3dvcmtncm91cFNpemVZfSwgJHtcbiAgICAgICAgICB3b3JrZ3JvdXBTaXplWn1dIGV4Y2VlZHMgdGhlIG1heGltdW0gd29ya2dyb3VwIHNpemUgWyR7dGhpcy5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVYfSwgJHtcbiAgICAgICAgICB0aGlzLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVl9LCAke3RoaXMubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWn1dLmApO1xuICAgIH1cblxuICAgIGlmICh3b3JrZ3JvdXBTaXplWCAqIHdvcmtncm91cFNpemVZICogd29ya2dyb3VwU2l6ZVogPiB0aGlzLmxpbWl0cy5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgd29ya2dyb3VwIHNpemUgWyR7d29ya2dyb3VwU2l6ZVh9LCAke3dvcmtncm91cFNpemVZfSwgJHtcbiAgICAgICAgICB3b3JrZ3JvdXBTaXplWn1dIGV4Y2VlZHMgdGhlIG1heGltdW0gd29ya2dyb3VwIGludm9jYXRpb25zICR7XG4gICAgICAgICAgdGhpcy5saW1pdHMubWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwfS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBpczFEaW1lbnNpb25EaXNwYXRjaCA9IHRoaXMubm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMV0gPT09IDEgJiYgdGhpcy5ub3JtYWxpemVkRGlzcGF0Y2hHcm91cFsyXSA9PT0gMTtcbiAgICBjb25zdCBwYXJhbUxpc3QgPSBpczFEaW1lbnNpb25EaXNwYXRjaCA/IGBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgZ2xvYmFsX2lkIDogdmVjMzx1MzI+LFxuICAgIEBidWlsdGluKHdvcmtncm91cF9pZCkgd29ya2dyb3VwX2lkIDogdmVjMzx1MzI+LFxuICAgIEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faWQpIGxvY2FsX2lkIDogdmVjMzx1MzI+YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQGJ1aWx0aW4oZ2xvYmFsX2ludm9jYXRpb25faWQpIGdsb2JhbF9pZCA6IHZlYzM8dTMyPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faWQpIGxvY2FsX2lkIDogdmVjMzx1MzI+LFxuICAgIEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faW5kZXgpIGxvY2FsX2lkeCA6IHUzMixcbiAgICBAYnVpbHRpbih3b3JrZ3JvdXBfaWQpIHdvcmtncm91cF9pZCA6IHZlYzM8dTMyPixcbiAgICBAYnVpbHRpbihudW1fd29ya2dyb3VwcykgbnVtX3dvcmtncm91cHMgOiB2ZWMzPHUzMj5gO1xuICAgIGNvbnN0IGdsb2JhbElkeERlZmluaXRpb24gPSBpczFEaW1lbnNpb25EaXNwYXRjaCA/XG4gICAgICAgICdsZXQgZ2xvYmFsX2lkeCA9IGdsb2JhbF9pZC54OyBsZXQgbG9jYWxfaWR4ID0gbG9jYWxfaWQueDsnIDpcbiAgICAgICAgYGxldCBnbG9iYWxfaWR4ID0gKHdvcmtncm91cF9pZC56ICogbnVtX3dvcmtncm91cHNbMF0gKiBudW1fd29ya2dyb3Vwc1sxXSArXG4gICAgICAgICAgd29ya2dyb3VwX2lkLnkgKiBudW1fd29ya2dyb3Vwc1swXSArIHdvcmtncm91cF9pZC54KSAqICR7XG4gICAgICAgICAgICB3b3JrZ3JvdXBTaXplWCAqIHdvcmtncm91cFNpemVZICogd29ya2dyb3VwU2l6ZVp9dSArIGxvY2FsX2lkeDtgO1xuXG4gICAgcmV0dXJuIGBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt3b3JrZ3JvdXBTaXplWH0sICR7d29ya2dyb3VwU2l6ZVl9LCAke3dvcmtncm91cFNpemVafSlcbiAgZm4gbWFpbigke3BhcmFtTGlzdH0pIHtcbiAgICAke2dsb2JhbElkeERlZmluaXRpb259XG4gIGA7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFZhcmlhYmxlVW5pZm9ybXModmFyaWFibGU6IEluZGljZXNIZWxwZXIpOiB2b2lkIHtcbiAgICBpZiAodmFyaWFibGUucmFuayAhPT0gMCkge1xuICAgICAgaWYgKHZhcmlhYmxlLnNoYXBlLnN0YXJ0c1dpdGgoJ3VuaWZvcm1zLicpKSB7XG4gICAgICAgIHRoaXMudW5pZm9ybXMucHVzaCh7bmFtZTogdmFyaWFibGUuc2hhcGUucmVwbGFjZSgndW5pZm9ybXMuJywgJycpLCB0eXBlOiAndTMyJywgbGVuZ3RoOiB2YXJpYWJsZS5yYW5rfSk7XG4gICAgICB9XG4gICAgICBpZiAodmFyaWFibGUuc3RyaWRlcy5zdGFydHNXaXRoKCd1bmlmb3Jtcy4nKSkge1xuICAgICAgICB0aGlzLnVuaWZvcm1zLnB1c2goe25hbWU6IHZhcmlhYmxlLnN0cmlkZXMucmVwbGFjZSgndW5pZm9ybXMuJywgJycpLCB0eXBlOiAndTMyJywgbGVuZ3RoOiB2YXJpYWJsZS5yYW5rfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWNsYXJlVmFyaWFibGUodmFyaWFibGU6IEluZGljZXNIZWxwZXIsIGJpbmRpbmdJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAodmFyaWFibGUudXNhZ2UgPT09ICdpbnRlcm5hbCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHVzZSBpbnRlcm5hbCB2YXJpYWJsZSB3aXRoIGRlY2xhcmVWYXJpYWJsZSgpLiB1c2UgcmVnaXN0ZXJJbnRlcm5hbFZhcmlhYmxlcygpIGluc3RlYWQuJyk7XG4gICAgfVxuICAgIHRoaXMudmFyaWFibGVzLnB1c2godmFyaWFibGUpO1xuICAgIHRoaXMuYXBwZW5kVmFyaWFibGVVbmlmb3Jtcyh2YXJpYWJsZSk7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSB2YXJpYWJsZS51c2FnZSA9PT0gJ2lucHV0JyA/ICdyZWFkJyA6ICdyZWFkX3dyaXRlJztcbiAgICBjb25zdCBzdG9yYWdlVHlwZSA9IHZhcmlhYmxlLnR5cGUuc3RvcmFnZTtcbiAgICByZXR1cm4gYEBncm91cCgwKSBAYmluZGluZygke2JpbmRpbmdJbmRleH0pIHZhcjxzdG9yYWdlLCAke2FjY2Vzc30+ICR7dmFyaWFibGUubmFtZX06IGFycmF5PCR7c3RvcmFnZVR5cGV9PjtgO1xuICB9XG5cbiAgZGVjbGFyZVZhcmlhYmxlcyguLi52YXJpYWJsZXM6IEluZGljZXNIZWxwZXJbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhcmlhYmxlcy5tYXAodiA9PiB0aGlzLmRlY2xhcmVWYXJpYWJsZSh2LCB0aGlzLnZhcmlhYmxlSW5kZXgrKykpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckludGVybmFsVmFyaWFibGUodmFyaWFibGU6IEluZGljZXNIZWxwZXIpOiB2b2lkIHtcbiAgICBpZiAodmFyaWFibGUudXNhZ2UgIT09ICdpbnRlcm5hbCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnY2Fubm90IHVzZSBpbnB1dCBvciBvdXRwdXQgdmFyaWFibGUgd2l0aCByZWdpc3RlckludGVybmFsVmFyaWFibGUoKS4gdXNlIGRlY2xhcmVWYXJpYWJsZXMoKSBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIHRoaXMuaW50ZXJuYWxWYXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG4gICAgdGhpcy5hcHBlbmRWYXJpYWJsZVVuaWZvcm1zKHZhcmlhYmxlKTtcbiAgfVxuXG4gIHJlZ2lzdGVySW50ZXJuYWxWYXJpYWJsZXMoLi4udmFyaWFibGVzOiBJbmRpY2VzSGVscGVyW10pOiBTaGFkZXJIZWxwZXIge1xuICAgIHZhcmlhYmxlcy5mb3JFYWNoKHYgPT4gdGhpcy5yZWdpc3RlckludGVybmFsVmFyaWFibGUodikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVnaXN0ZXJVbmlmb3JtKG5hbWU6IHN0cmluZywgdHlwZTogVW5pZm9ybURhdGFFbGVtZW50VHlwZSwgbGVuZ3RoID0gMSk6IFNoYWRlckhlbHBlciB7XG4gICAgdGhpcy51bmlmb3Jtcy5wdXNoKHtuYW1lLCB0eXBlLCBsZW5ndGh9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlZ2lzdGVyVW5pZm9ybXMoYWRkaXRpb25hbFVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSk6IFNoYWRlckhlbHBlciB7XG4gICAgdGhpcy51bmlmb3JtcyA9IHRoaXMudW5pZm9ybXMuY29uY2F0KGFkZGl0aW9uYWxVbmlmb3Jtcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGludGVybmFsVmFyaWFibGVzOiBJbmRpY2VzSGVscGVyW10gPSBbXTtcbiAgcHJpdmF0ZSB2YXJpYWJsZXM6IEluZGljZXNIZWxwZXJbXSA9IFtdO1xuICBwcml2YXRlIHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtdO1xuICBwcml2YXRlIHVuaWZvcm1EZWNsYXJhdGlvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnVuaWZvcm1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHVuaWZvcm1TbmlwcGV0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHtuYW1lLCB0eXBlLCBsZW5ndGh9IG9mIHRoaXMudW5pZm9ybXMpIHtcbiAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoID4gNCkge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2YxNicpIHtcbiAgICAgICAgICB1bmlmb3JtU25pcHBldHMucHVzaChgQGFsaWduKDE2KSAke25hbWV9OmFycmF5PG1hdDJ4NDwke3R5cGV9PiwgJHtNYXRoLmNlaWwobGVuZ3RoIC8gOCl9PmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaWZvcm1TbmlwcGV0cy5wdXNoKGAke25hbWV9OmFycmF5PHZlYzQ8JHt0eXBlfT4sICR7TWF0aC5jZWlsKGxlbmd0aCAvIDQpfT5gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdHlwZVRlbXAgPSBsZW5ndGggPT0gbnVsbCB8fCBsZW5ndGggPT09IDEgPyB0eXBlIDogYHZlYyR7bGVuZ3RofTwke3R5cGV9PmA7XG4gICAgICAgIHVuaWZvcm1TbmlwcGV0cy5wdXNoKGAke25hbWV9OiR7dHlwZVRlbXB9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcbiAgICAgIHN0cnVjdCBVbmlmb3JtcyB7ICR7dW5pZm9ybVNuaXBwZXRzLmpvaW4oJywgJyl9IH07XG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHt0aGlzLnZhcmlhYmxlSW5kZXh9KSB2YXI8dW5pZm9ybT4gdW5pZm9ybXM6IFVuaWZvcm1zO2A7XG4gIH1cbiAgcHJpdmF0ZSB2YXJpYWJsZUluZGV4ID0gMDtcblxuICAvKipcbiAgICogR2V0IGFkZGl0aW9uYWwgaW1wbGVtZW50YXRpb24gdGhhdCBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgc2hhZGVyIHNvdXJjZS5cbiAgICovXG4gIGdldCBhZGRpdGlvbmFsSW1wbGVtZW50YXRpb25zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudW5pZm9ybURlY2xhcmF0aW9uKCkgKyB0aGlzLnZhcmlhYmxlcy5tYXAoaSA9PiBpLmltcGwoKSkuam9pbignXFxuJykgK1xuICAgICAgICB0aGlzLmludGVybmFsVmFyaWFibGVzLm1hcChpID0+IGkuaW1wbCgpKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhcmlhYmxlIGluZm8gb2YgdGhlIHNoYWRlciBwcm9ncmFtLlxuICAgKi9cbiAgZ2V0IHZhcmlhYmxlc0luZm8oKTogUHJvZ3JhbVVuaWZvcm1WYXJpYWJsZUluZm9bXXx1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnVuaWZvcm1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB1bmlmb3JtV2dzbFR5cGVUb0RhdGFUeXBlID0gKHR5cGU6IFVuaWZvcm1EYXRhRWxlbWVudFR5cGUpID0+XG4gICAgICAgIChbRGF0YVR5cGUudWludDMyLCBEYXRhVHlwZS5mbG9hdDE2LCBEYXRhVHlwZS5mbG9hdCxcbiAgICAgICAgICBEYXRhVHlwZS5pbnQzMl1bWyd1MzInLCAnZjE2JywgJ2YzMicsICdpMzInXS5pbmRleE9mKHR5cGUpXSk7XG4gICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwKHUgPT4gKFt1bmlmb3JtV2dzbFR5cGVUb0RhdGFUeXBlKHUudHlwZSksIHUubGVuZ3RoID8/IDFdKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNoYWRlckhlbHBlciA9IChkaXNwYXRjaEdyb3VwOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGxpbWl0czogR1BVU3VwcG9ydGVkTGltaXRzKSA9PlxuICAgIG5ldyBTaGFkZXJIZWxwZXJJbXBsKGRpc3BhdGNoR3JvdXAsIGxpbWl0cyk7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjb21lcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RmanMvYmxvYi9tYXN0ZXIvdGZqcy1jb3JlL3NyYy9vcHMvYnJvYWRjYXN0X3V0aWwudHMjTDE4LUw0MFxuICogUmV0dXJucyB0aGUgZGltZW5zaW9ucyBpbiB0aGUgaW5wdXQgc2hhcGUgdGhhdCBhcmUgYnJvYWRjYXN0ZWQgdG9cbiAqIHByb2R1Y2UgdGhlIHByb3ZpZGVkIG91dHB1dCBzaGFwZS5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgZGltZW5zaW9ucyBhcmUgMC1pbmRleGVkIGFuZCBzb3J0ZWQuIEFuIGV4YW1wbGU6XG4gKiBpblNoYXBlID0gWzQsIDEsIDNdXG4gKiBvdXRTaGFwZSA9IFs1LCA0LCAzLCAzXVxuICogcmVzdWx0ID0gWzFdLiBEaW1lbnNpb24gMSAoMm5kIGRpbWVuc2lvbiBvZiBpbnB1dCkgZ2V0cyBicm9hZGNhc3RlZCAxID0+IDMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCcm9hZGNhc3REaW1zID0gKGluU2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBvdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10pOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IGluUmFuayA9IGluU2hhcGUubGVuZ3RoO1xuICBjb25zdCBkaW1zOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGluUmFuazsgaSsrKSB7XG4gICAgY29uc3QgZGltID0gaW5SYW5rIC0gMSAtIGk7XG4gICAgY29uc3QgYSA9IGluU2hhcGVbZGltXSB8fCAxO1xuICAgIGNvbnN0IGIgPSBvdXRTaGFwZVtvdXRTaGFwZS5sZW5ndGggLSAxIC0gaV0gfHwgMTtcbiAgICBpZiAoYiA+IDEgJiYgYSA9PT0gMSkge1xuICAgICAgZGltcy51bnNoaWZ0KGRpbSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkaW1zO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleSwgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgSW5kaWNlc0hlbHBlciwgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zcG9zZUF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBwZXJtOiBudW1iZXJbXTtcbn1cblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNwb3NlIHJlcXVpcmVzIDEgaW5wdXQuJyk7XG4gIH1cbn07XG5cbmNvbnN0IGdldEFkanVzdGVkUGVybSA9IChpbnB1dFJhbms6IG51bWJlciwgcGVybTogbnVtYmVyW10pOiBudW1iZXJbXSA9PlxuICAgIChwZXJtICYmIHBlcm0ubGVuZ3RoICE9PSBpbnB1dFJhbmspID8gWy4uLihuZXcgQXJyYXkoaW5wdXRSYW5rKS5rZXlzKCkpXS5yZXZlcnNlKCkgOiBwZXJtO1xuXG5jb25zdCBnZXRPdXRwdXRTaGFwZSA9IChpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgcGVybTogbnVtYmVyW10pOiByZWFkb25seSBudW1iZXJbXSA9PlxuICAgIFNoYXBlVXRpbC5zb3J0QmFzZWRPblBlcm0oaW5wdXRTaGFwZSwgZ2V0QWRqdXN0ZWRQZXJtKGlucHV0U2hhcGUubGVuZ3RoLCBwZXJtKSk7XG5cbmNvbnN0IHBlcm1GdW5jdGlvbkJvZHkgPSAocGVybTogbnVtYmVyW10sIHJhbms6IG51bWJlciwgaW5wdXQ6IEluZGljZXNIZWxwZXIsIG91dHB1dDogSW5kaWNlc0hlbHBlcik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHJldmVyc2VGdW5jID0gW107XG4gIHJldmVyc2VGdW5jLnB1c2goYGZuIHBlcm0oaTogJHtvdXRwdXQudHlwZS5pbmRpY2VzfSkgLT4gJHtpbnB1dC50eXBlLmluZGljZXN9IHtcbiAgICB2YXIgYTogJHtpbnB1dC50eXBlLmluZGljZXN9O2ApO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbms7ICsraSkge1xuICAgIHJldmVyc2VGdW5jLnB1c2goaW5wdXQuaW5kaWNlc1NldCgnYScsIHBlcm1baV0sIGBpWyR7aX1dYCkpO1xuICB9XG4gIHJldmVyc2VGdW5jLnB1c2goJ3JldHVybiBhO30nKTtcbiAgcmV0dXJuIHJldmVyc2VGdW5jLmpvaW4oJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvID0gKGlucHV0VGVuc29yOiBUZW5zb3JWaWV3LCBwZXJtQXR0cjogbnVtYmVyW10pOiBQcm9ncmFtSW5mbyA9PiB7XG4gIGNvbnN0IGlucHV0RGF0YVR5cGUgPSBpbnB1dFRlbnNvci5kYXRhVHlwZTtcbiAgY29uc3QgaW5wdXRSYW5rID0gaW5wdXRUZW5zb3IuZGltcy5sZW5ndGg7XG4gIGNvbnN0IHBlcm0gPSBnZXRBZGp1c3RlZFBlcm0oaW5wdXRSYW5rLCBwZXJtQXR0cik7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gZ2V0T3V0cHV0U2hhcGUoaW5wdXRUZW5zb3IuZGltcywgcGVybSk7XG4gIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBpbnB1dERhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgpO1xuICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ2EnLCBpbnB1dERhdGFUeXBlLCBpbnB1dFJhbmspO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ291dHB1dF9zaXplJywgJ3UzMicpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIG91dHB1dCl9XG5cbiAgJHtwZXJtRnVuY3Rpb25Cb2R5KHBlcm0sIGlucHV0UmFuaywgaW5wdXQsIG91dHB1dCl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0X3NpemUnKX1cblxuICAgIGxldCBpbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuICAgIGxldCBhSW5kaWNlcyA9IHBlcm0oaW5kaWNlcyk7XG5cbiAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIGlucHV0LmdldEJ5SW5kaWNlcygnYUluZGljZXMnKSl9XG4gIH1gO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdUcmFuc3Bvc2UnLFxuICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7cGVybUF0dHJ9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuayddfSxcbiAgICBnZXRSdW5EYXRhOiAoaW5wdXRzKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICBwcm9ncmFtVW5pZm9ybXM6XG4gICAgICAgICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBvdXRwdXRTaGFwZSldLFxuICAgICAgfTtcbiAgICB9LFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc3Bvc2UgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFRyYW5zcG9zZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIGF0dHJpYnV0ZXMucGVybSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVHJhbnNwb3NlQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFRyYW5zcG9zZUF0dHJpYnV0ZXMgPT5cbiAgICBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoe3Blcm06IGF0dHJpYnV0ZXMucGVybSBhcyBudW1iZXJbXX0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtU2hhZGVyQ2FjaGVJbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7aW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtjcmVhdGVSZWR1Y2VBdHRyaWJ1dGVzRnJvbUlucHV0cywgUmVkdWNlQXR0cmlidXRlc30gZnJvbSAnLi9yZWR1Y2UnO1xuaW1wb3J0IHtjcmVhdGVUcmFuc3Bvc2VQcm9ncmFtSW5mb30gZnJvbSAnLi90cmFuc3Bvc2UnO1xuXG5jb25zdCByZWR1Y2VPcHM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICBtYXg6ICdzZWxlY3QoYmVzdFZhbHVlLCBjYW5kaWRhdGUsIGNhbmRpZGF0ZSA+IGJlc3RWYWx1ZSknLFxuICBtaW46ICdzZWxlY3QoYmVzdFZhbHVlLCBjYW5kaWRhdGUsIGNhbmRpZGF0ZSA8IGJlc3RWYWx1ZSknLFxuICBtZWFuOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlJyxcbiAgc3VtOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlJyxcbiAgcHJvZDogJ2Jlc3RWYWx1ZSAqIGNhbmRpZGF0ZScsXG4gIHN1bVNxdWFyZTogJ2Jlc3RWYWx1ZSArIGNhbmRpZGF0ZSAqIGNhbmRpZGF0ZScsXG4gIGxvZ1N1bUV4cDogJ2Jlc3RWYWx1ZSArIGV4cChjYW5kaWRhdGUpJyxcbiAgbDE6ICdiZXN0VmFsdWUgKyBhYnMoY2FuZGlkYXRlKScsXG4gIGwyOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlICogY2FuZGlkYXRlJyxcbiAgbG9nU3VtOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlJ1xufTtcblxuY29uc3QgcmVkdWNlU2hhcmVkT3BzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHtcbiAgbWF4OiAnc2VsZWN0KGJlc3RWYWx1ZSwgY2FuZGlkYXRlLCBjYW5kaWRhdGUgPiBiZXN0VmFsdWUpJyxcbiAgbWluOiAnc2VsZWN0KGJlc3RWYWx1ZSwgY2FuZGlkYXRlLCBjYW5kaWRhdGUgPCBiZXN0VmFsdWUpJyxcbiAgbWVhbjogJ2Jlc3RWYWx1ZSArIGNhbmRpZGF0ZScsXG4gIHN1bTogJ2Jlc3RWYWx1ZSArIGNhbmRpZGF0ZScsXG4gIHByb2Q6ICdiZXN0VmFsdWUgKiBjYW5kaWRhdGUnLFxuICBzdW1TcXVhcmU6ICdiZXN0VmFsdWUgKyBjYW5kaWRhdGUnLFxuICBsb2dTdW1FeHA6ICdiZXN0VmFsdWUgKyBjYW5kaWRhdGUnLFxuICBsMTogJ2Jlc3RWYWx1ZSArIGNhbmRpZGF0ZScsXG4gIGwyOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlJyxcbiAgbG9nU3VtOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlJ1xufTtcblxuY29uc3QgcmVkdWNlSW5pdFZhbHVlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7XG4gIG1heDogJ19BW29mZnNldF0nLFxuICBtaW46ICdfQVtvZmZzZXRdJyxcbiAgbWVhbjogJzAnLFxuICBzdW06ICcwJyxcbiAgcHJvZDogJzEnLFxuICBzdW1TcXVhcmU6ICcwJyxcbiAgbG9nU3VtRXhwOiAnMCcsXG4gIGwxOiAnMCcsXG4gIGwyOiAnMCcsXG4gIGxvZ1N1bTogJzAnXG59O1xuXG5jb25zdCByZWR1Y2VPdXRwdXRWYWx1ZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICBtYXg6ICdiZXN0VmFsdWUnLFxuICBtaW46ICdiZXN0VmFsdWUnLFxuICBzdW06ICdiZXN0VmFsdWUnLFxuICBwcm9kOiAnYmVzdFZhbHVlJyxcbiAgc3VtU3F1YXJlOiAnYmVzdFZhbHVlJyxcbiAgbG9nU3VtRXhwOiAnbG9nKGJlc3RWYWx1ZSknLFxuICBsMTogJ2Jlc3RWYWx1ZScsXG4gIGwyOiAnc3FydChiZXN0VmFsdWUpJyxcbiAgbG9nU3VtOiAnbG9nKGJlc3RWYWx1ZSknXG59O1xuXG5jb25zdCBnZXRJbm5lck1vc3RBeGVzID0gKG51bUlubmVyQXhlczogbnVtYmVyLCByYW5rOiBudW1iZXIpOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmb3IgKGxldCBpID0gcmFuayAtIG51bUlubmVyQXhlczsgaSA8IHJhbms7ICsraSkge1xuICAgIHJlcy5wdXNoKGkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5jb25zdCBjb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzID0gKHNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgYXhlczogcmVhZG9ubHkgbnVtYmVyW10pOiBbbnVtYmVyW10sIG51bWJlcltdXSA9PiB7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gW107XG4gIGNvbnN0IHJhbmsgPSBzaGFwZS5sZW5ndGg7XG4gIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IHJhbms7IGRpbSsrKSB7XG4gICAgaWYgKGF4ZXMuaW5kZXhPZihkaW0pID09PSAtMSkge1xuICAgICAgb3V0cHV0U2hhcGUucHVzaChzaGFwZVtkaW1dKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVkdWNlU2hhcGUgPSBheGVzLm1hcChkaW0gPT4gc2hhcGVbZGltXSk7XG4gIHJldHVybiBbb3V0cHV0U2hhcGUsIHJlZHVjZVNoYXBlXTtcbn07XG5cbmNvbnN0IGV4cGFuZFNoYXBlVG9LZWVwRGltID0gKHNoYXBlOiBudW1iZXJbXSwgYXhlczogbnVtYmVyW10pOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHJhbmsgPSBzaGFwZS5sZW5ndGggKyBheGVzLmxlbmd0aDtcbiAgY29uc3QgZXhwYW5kU2hhcGUgPSBbXTtcbiAgbGV0IHNoYXBlSWR4ID0gMDtcbiAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgcmFuazsgZGltKyspIHtcbiAgICBpZiAoYXhlcy5pbmRleE9mKGRpbSkgPT09IC0xKSB7XG4gICAgICBleHBhbmRTaGFwZS5wdXNoKHNoYXBlW3NoYXBlSWR4KytdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwYW5kU2hhcGUucHVzaCgxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cGFuZFNoYXBlO1xufTtcblxuY29uc3QgYXJlQXhlc0lubmVyTW9zdERpbXMgPSAoYXhlczogbnVtYmVyW10sIHJhbms6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGF4ZXMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoYXhlc1theGVzLmxlbmd0aCAtIGkgLSAxXSAhPT0gcmFuayAtIDEgLSBpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgZ2V0QXhlc1Blcm11dGF0aW9uID0gKGF4ZXM6IG51bWJlcltdLCByYW5rOiBudW1iZXIpOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBpZiAoIWFyZUF4ZXNJbm5lck1vc3REaW1zKGF4ZXMsIHJhbmspKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5rOyArK2kpIHtcbiAgICAgIGlmIChheGVzLmluZGV4T2YoaSkgPT09IC0xKSB7XG4gICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgfVxuICAgIH1cbiAgICBheGVzLmZvckVhY2goYXhpcyA9PiByZXMucHVzaChheGlzKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSZWR1Y2VTaGFyZWRQcm9ncmFtSW5mbyA9XG4gICAgKG5hbWU6IHN0cmluZywgc2hhZGVyQ2FjaGU6IFByb2dyYW1TaGFkZXJDYWNoZUluZm8sIGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCByZWR1Y2VUeXBlOiBzdHJpbmcsXG4gICAgIG91dHB1dERhdGFUeXBlOiBEYXRhVHlwZSwgb3V0cHV0U2hhcGU6IG51bWJlcltdLCByZWR1Y2VTaGFwZTogbnVtYmVyW10pOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG5cbiAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICBjb25zdCByZWR1Y2VTaXplID0gU2hhcGVVdGlsLnNpemUocmVkdWNlU2hhcGUpO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ19BJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dFNoYXBlKTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBvdXRwdXREYXRhVHlwZSwgb3V0cHV0U2hhcGUpO1xuXG4gICAgICBjb25zdCB3b3JrZ3JvdXBTaXplID0gMzI7XG5cbiAgICAgIGNvbnN0IHNoYXJlZE1lbW9yeVNuaXBwZXQgPSBgXG4gICAgICAgICAgdmFyPHdvcmtncm91cD4gYUJlc3RWYWx1ZXMgOiBhcnJheTxmMzIsICR7d29ya2dyb3VwU2l6ZX0+O1xuICAgICAgIGA7XG5cbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ3JlZHVjZVNpemUnLCAndTMyJykuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAgICAgJHtzaGFyZWRNZW1vcnlTbmlwcGV0fVxuICAgICAgICBmbiBESVZfQ0VJTChhIDogdTMyLCBiIDogdTMyKSAtPiB1MzIge1xuICAgICAgICAgIHJldHVybiAoKGEgLSAxdSkgLyBiICsgMXUpO1xuICAgICAgICAgfVxuICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KHdvcmtncm91cFNpemUpfVxuXG4gICAgICAgICAgbGV0IG91dHB1dEluZGV4ID0gZ2xvYmFsX2lkeCAvICR7d29ya2dyb3VwU2l6ZX07XG4gICAgICAgICAgbGV0IG9mZnNldCA9IG91dHB1dEluZGV4ICogdW5pZm9ybXMucmVkdWNlU2l6ZTtcblxuICAgICAgICAgIHZhciBiZXN0VmFsdWUgPSBmMzIoJHtyZWR1Y2VJbml0VmFsdWVzW3JlZHVjZVR5cGVdfSk7XG4gICAgICAgICAgbGV0IExlbmd0aCA9IHVuaWZvcm1zLnJlZHVjZVNpemU7XG4gICAgICAgICAgZm9yICh2YXIgayA9IGxvY2FsX2lkeDsgayA8IExlbmd0aDsgayA9IGsgKyAke3dvcmtncm91cFNpemV9KSB7XG4gICAgICAgICAgIGxldCBjYW5kaWRhdGUgPSBmMzIoJHtpbnB1dC5nZXRCeU9mZnNldCgnb2Zmc2V0ICsgaycpfSk7XG4gICAgICAgICAgIGJlc3RWYWx1ZSA9ICR7cmVkdWNlT3BzW3JlZHVjZVR5cGVdfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYUJlc3RWYWx1ZXNbbG9jYWxfaWR4XSA9IGJlc3RWYWx1ZTtcbiAgICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAgICAgIHZhciByZWR1Y2VTaXplID0gbWluKExlbmd0aCwgJHt3b3JrZ3JvdXBTaXplfXUpO1xuICAgICAgICAgZm9yICh2YXIgY3VycmVudFNpemUgPSByZWR1Y2VTaXplIC8gMnU7IHJlZHVjZVNpemUgPiAxdTtcbiAgICAgICAgICAgICBjdXJyZW50U2l6ZSA9IHJlZHVjZVNpemUgLyAydSkge1xuICAgICAgICAgICBsZXQgaW50ZXJ2YWwgPSBESVZfQ0VJTChyZWR1Y2VTaXplLCAydSk7XG4gICAgICAgICAgIGlmIChsb2NhbF9pZHggPCBjdXJyZW50U2l6ZSkge1xuICAgICAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IGFCZXN0VmFsdWVzW2xvY2FsX2lkeCArIGludGVydmFsXTtcbiAgICAgICAgICAgIGJlc3RWYWx1ZSA9ICR7cmVkdWNlU2hhcmVkT3BzW3JlZHVjZVR5cGVdfTtcbiAgICAgICAgICAgIGFCZXN0VmFsdWVzW2xvY2FsX2lkeF0gPSBiZXN0VmFsdWU7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmVkdWNlU2l6ZSA9IGludGVydmFsO1xuICAgICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgICAgICB9XG5cbiAgICAgICAgIGlmIChsb2NhbF9pZHggPT0gMHUpIHtcbiAgICAgICAgICAke1xuICAgICAgICAgIG91dHB1dC5zZXRCeU9mZnNldChcbiAgICAgICAgICAgICAgJ291dHB1dEluZGV4JyxcbiAgICAgICAgICAgICAgYCR7XG4gICAgICAgICAgICAgICAgICByZWR1Y2VUeXBlID09PSAnbWVhbicgPyBgJHtvdXRwdXQudHlwZS5zdG9yYWdlfShiZXN0VmFsdWUgLyBmMzIodW5pZm9ybXMucmVkdWNlU2l6ZSkpYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtvdXRwdXQudHlwZS5zdG9yYWdlfSgke3JlZHVjZU91dHB1dFZhbHVlc1tyZWR1Y2VUeXBlXX0pYH1gKX07XG4gICAgICAgICB9XG4gICAgICAgIH1gO1xuXG4gICAgICAvLyBPbmUgd29yayBncm91cCBpcyByZXNwb25zaWJsZSBmb3Igb25seSBvbmUgZWxlbWVudCBvZiBvdXRwdXQuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBzaGFkZXJDYWNoZSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBvdXRwdXREYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBvdXRwdXRTaXplfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IFt7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiByZWR1Y2VTaXplfV1cbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH07XG5cbmNvbnN0IHJlZHVjZUNvbW1vbiA9XG4gICAgKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBuYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMsXG4gICAgIHJlZHVjZVR5cGU6ICdzdW0nfCdzdW1TcXVhcmUnfCdwcm9kJ3wnbWluJ3wnbWF4J3wnbWVhbid8J2xvZ1N1bUV4cCd8J2wxJ3wnbDInfCdsb2dTdW0nKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkQXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyA9XG4gICAgICAgICAgY29udGV4dC5pbnB1dHMubGVuZ3RoID09PSAxID8gYXR0cmlidXRlcyA6IGNyZWF0ZVJlZHVjZUF0dHJpYnV0ZXNGcm9tSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcblxuICAgICAgbGV0IHVwZGF0ZWRBeGVzID0gdXBkYXRlZEF0dHJpYnV0ZXMuYXhlcztcbiAgICAgIGlmICh1cGRhdGVkQXhlcy5sZW5ndGggPT09IDAgJiYgIXVwZGF0ZWRBdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSB7XG4gICAgICAgIHVwZGF0ZWRBeGVzID0gY29udGV4dC5pbnB1dHNbMF0uZGltcy5tYXAoKF9kaW0sIGkpID0+IGkpO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9ybWFsaXplQXhlcyA9IFNoYXBlVXRpbC5ub3JtYWxpemVBeGVzKHVwZGF0ZWRBeGVzLCBjb250ZXh0LmlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG5cbiAgICAgIGxldCBheGVzID0gbm9ybWFsaXplQXhlcztcbiAgICAgIGxldCBpbnB1dCA9IGNvbnRleHQuaW5wdXRzWzBdO1xuICAgICAgY29uc3QgcGVybXV0ZWRBeGVzID0gZ2V0QXhlc1Blcm11dGF0aW9uKGF4ZXMsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXMubGVuZ3RoKTtcbiAgICAgIGlmIChwZXJtdXRlZEF4ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpbnB1dCA9IGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBwZXJtdXRlZEF4ZXMpLCB7aW5wdXRzOiBbMF0sIG91dHB1dHM6IFstMV19KVswXTtcbiAgICAgICAgYXhlcyA9IGdldElubmVyTW9zdEF4ZXMoYXhlcy5sZW5ndGgsIGlucHV0LmRpbXMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW291dHB1dFNoYXBlLCByZWR1Y2VTaGFwZV0gPSBjb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKGlucHV0LmRpbXMsIGF4ZXMpO1xuICAgICAgbGV0IGZpbmFsT3V0cHV0U2hhcGUgPSBvdXRwdXRTaGFwZTtcbiAgICAgIGlmICh1cGRhdGVkQXR0cmlidXRlcy5rZWVwRGltcykge1xuICAgICAgICBmaW5hbE91dHB1dFNoYXBlID0gZXhwYW5kU2hhcGVUb0tlZXBEaW0ob3V0cHV0U2hhcGUsIG5vcm1hbGl6ZUF4ZXMpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlUmVkdWNlU2hhcmVkUHJvZ3JhbUluZm8oXG4gICAgICAgICAgICAgIG5hbWUsIHtoaW50OiB1cGRhdGVkQXR0cmlidXRlcy5jYWNoZUtleSwgaW5wdXREZXBlbmRlbmNpZXM6IFsndHlwZSddfSwgW2lucHV0XSwgcmVkdWNlVHlwZSxcbiAgICAgICAgICAgICAgY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUsIGZpbmFsT3V0cHV0U2hhcGUsIHJlZHVjZVNoYXBlKSxcbiAgICAgICAgICB7aW5wdXRzOiBbaW5wdXRdfSk7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IHJlZHVjZU1lYW5TaGFyZWQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgcmVkdWNlQ29tbW9uKGNvbnRleHQsICdSZWR1Y2VNZWFuU2hhcmVkJywgYXR0cmlidXRlcywgJ21lYW4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VMMVNoYXJlZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICByZWR1Y2VDb21tb24oY29udGV4dCwgJ1JlZHVjZUwxU2hhcmVkJywgYXR0cmlidXRlcywgJ2wxJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVkdWNlTDJTaGFyZWQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgcmVkdWNlQ29tbW9uKGNvbnRleHQsICdSZWR1Y2VMMlNoYXJlZCcsIGF0dHJpYnV0ZXMsICdsMicpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZHVjZUxvZ1N1bUV4cFNoYXJlZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICByZWR1Y2VDb21tb24oY29udGV4dCwgJ1JlZHVjZUxvZ1N1bUV4cFNoYXJlZCcsIGF0dHJpYnV0ZXMsICdsb2dTdW1FeHAnKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VNYXhTaGFyZWQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgcmVkdWNlQ29tbW9uKGNvbnRleHQsICdSZWR1Y2VNYXhTaGFyZWQnLCBhdHRyaWJ1dGVzLCAnbWF4Jyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVkdWNlTWluU2hhcmVkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHJlZHVjZUNvbW1vbihjb250ZXh0LCAnUmVkdWNlTWluU2hhcmVkJywgYXR0cmlidXRlcywgJ21pbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZHVjZVByb2RTaGFyZWQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgcmVkdWNlQ29tbW9uKGNvbnRleHQsICdSZWR1Y2VQcm9kU2hhcmVkJywgYXR0cmlidXRlcywgJ3Byb2QnKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VTdW1TaGFyZWQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgcmVkdWNlQ29tbW9uKGNvbnRleHQsICdSZWR1Y2VTdW1TaGFyZWQnLCBhdHRyaWJ1dGVzLCAnc3VtJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVkdWNlU3VtU3F1YXJlU2hhcmVkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHJlZHVjZUNvbW1vbihjb250ZXh0LCAnUmVkdWNlU3VtU3F1YXJlU2hhcmVkJywgYXR0cmlidXRlcywgJ3N1bVNxdWFyZScpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZHVjZUxvZ1N1bVNoYXJlZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICByZWR1Y2VDb21tb24oY29udGV4dCwgJ1JlZHVjZUxvZ1N1bVNoYXJlZCcsIGF0dHJpYnV0ZXMsICdsb2dTdW0nKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtU2hhZGVyQ2FjaGVJbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIEluZGljZXNIZWxwZXIsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXJ9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7cmVkdWNlTDFTaGFyZWQsIHJlZHVjZUwyU2hhcmVkLCByZWR1Y2VMb2dTdW1FeHBTaGFyZWQsIHJlZHVjZUxvZ1N1bVNoYXJlZCwgcmVkdWNlTWF4U2hhcmVkLCByZWR1Y2VNZWFuU2hhcmVkLCByZWR1Y2VNaW5TaGFyZWQsIHJlZHVjZVByb2RTaGFyZWQsIHJlZHVjZVN1bVNoYXJlZCwgcmVkdWNlU3VtU3F1YXJlU2hhcmVkfSBmcm9tICcuL3JlZHVjZS1zaGFyZWQnO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoID09PSAwIHx8IGlucHV0cy5sZW5ndGggPiAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2Ugb3AgcmVxdWlyZXMgMSBvciAyIGlucHV0cy4nKTtcbiAgfVxuXG4gIGlmIChpbnB1dHMubGVuZ3RoID09PSAyICYmIGlucHV0c1sxXS5kaW1zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBheGVzIGlucHV0IGRpbXMuJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkdWNlQXR0cmlidXRlcyBleHRlbmRzIEF0dHJpYnV0ZVdpdGhDYWNoZUtleSB7XG4gIGtlZXBEaW1zOiBib29sZWFuO1xuICBub29wV2l0aEVtcHR5QXhlczogYm9vbGVhbjtcbiAgYXhlczogbnVtYmVyW107XG59XG5cbmV4cG9ydCB0eXBlIFJlZHVjZU9wID1cbiAgICAoaW5wdXQ6IEluZGljZXNIZWxwZXIsIG91dHB1dDogSW5kaWNlc0hlbHBlcixcbiAgICAgYXhlczogcmVhZG9ubHkgbnVtYmVyW10pID0+IFtzdHJpbmcsIHN0cmluZywgc3RyaW5nLCBzdHJpbmcsIC4uLnN0cmluZ1tdXTtcblxuY29uc3Qgbm9PcDogUmVkdWNlT3AgPSAoaW5wdXQpID0+IFsnJywgJycsIGB2YXIgdmFsdWUgPSAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfTtgLCAnJ107XG5leHBvcnQgY29uc3QgY3JlYXRlUmVkdWNlUHJvZ3JhbUluZm8gPVxuICAgIChuYW1lOiBzdHJpbmcsIHNoYWRlckNhY2hlOiBQcm9ncmFtU2hhZGVyQ2FjaGVJbmZvLCBpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgcmVkdWNlT3A6IFJlZHVjZU9wLFxuICAgICBheGVzSW5wdXQ6IG51bWJlcltdLCBvdXRwdXREYXRhVHlwZTogRGF0YVR5cGUsIGtlZXBEaW1zID0gZmFsc2UsIG5vb3BXaXRoRW1wdHlBeGVzID0gZmFsc2UpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IGlucHV0UmFuayA9IGlucHV0U2hhcGUubGVuZ3RoO1xuICAgICAgY29uc3QgYXhlcyA9IFNoYXBlVXRpbC5ub3JtYWxpemVBeGVzKGF4ZXNJbnB1dCwgaW5wdXRSYW5rKTtcbiAgICAgIGNvbnN0IHJlZHVjZU9uQWxsQXhlcyA9ICFub29wV2l0aEVtcHR5QXhlcyAmJiBheGVzLmxlbmd0aCA9PT0gMDtcbiAgICAgIGlucHV0U2hhcGUuZm9yRWFjaCgoZCwgaSkgPT4ge1xuICAgICAgICBpZiAocmVkdWNlT25BbGxBeGVzIHx8IGF4ZXMuaW5kZXhPZihpKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKGtlZXBEaW1zKSB7XG4gICAgICAgICAgICBvdXRwdXRTaGFwZS5wdXNoKDEpO1xuICAgICAgICAgIH0gIC8vIGVsc2UgeyAvLyBza2lwIHRoaXMgYXhpc31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXRTaGFwZS5wdXNoKGQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG91dHB1dFJhbmsgPSBvdXRwdXRTaGFwZS5sZW5ndGg7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkeENvcHk6IHN0cmluZ1tdID0gW107ICAvLyBjb3B5IG91dHB1dCBpbmRleGVzIHRvIGlucHV0IGluZGV4ZXNcblxuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ19BJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dFJhbmspO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0Jywgb3V0cHV0RGF0YVR5cGUsIG91dHB1dFJhbmspO1xuICAgICAgICBjb25zdCBvcHMgPSByZWR1Y2VPcChpbnB1dCwgb3V0cHV0LCBheGVzKTtcbiAgICAgICAgbGV0IHJlZHVjZU9wcyA9IG9wc1syXTtcblxuICAgICAgICBmb3IgKGxldCBrID0gMCwgbCA9IDA7IGsgPCBpbnB1dFJhbms7IGsrKykge1xuICAgICAgICAgIC8vIGlmIHRoaXMgYXhpcyBpcyByZWR1Y2VkXG4gICAgICAgICAgaWYgKHJlZHVjZU9uQWxsQXhlcyB8fCBheGVzLmluZGV4T2YoaykgPj0gMCkge1xuICAgICAgICAgICAgaWYgKGtlZXBEaW1zKSB7XG4gICAgICAgICAgICAgIGwrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGxvb3Agb3ZlciB0aGUgZC10aCBheGlzXG4gICAgICAgICAgICByZWR1Y2VPcHMgPSBgZm9yKHZhciBqJHtrfTogdTMyID0gMDsgaiR7a30gPCAke2lucHV0U2hhcGVba119OyBqJHtrfSsrKSB7XG4gICAgICAgICAgICAgICAgICAke29wc1syXS5pbmNsdWRlcygnbGFzdF9pbmRleCcpID8gYGxldCBsYXN0X2luZGV4ID0gaiR7a307YCA6ICcnfVxuICAgICAgICAgICAgICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KCdpbnB1dF9pbmRpY2VzJywgaywgYGoke2t9YCl9XG4gICAgICAgICAgICAgICAgICAke3JlZHVjZU9wc31cbiAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWR4Q29weS5wdXNoKGAke2lucHV0LmluZGljZXNTZXQoJ2lucHV0X2luZGljZXMnLCBrLCBvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0X2luZGljZXMnLCBsKSl9O2ApO1xuICAgICAgICAgICAgbCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFxuXG4gICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgnb3V0cHV0X3NpemUnLCAndTMyJykuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cblxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRfc2l6ZScpfVxuICAgICAgICAgIHZhciBpbnB1dF9pbmRpY2VzOiAke2lucHV0LnR5cGUuaW5kaWNlc307XG4gICAgICAgICAgbGV0IG91dHB1dF9pbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuXG4gICAgICAgICAgJHtpZHhDb3B5LmpvaW4oJ1xcbicpfVxuICAgICAgICAgICR7b3BzWzBdfSAgICAgICAvLyBpbml0IG9wcyBmb3IgcmVkdWNlIG1heC9taW5cbiAgICAgICAgICAke29wc1sxXX1cbiAgICAgICAgICAke3JlZHVjZU9wc31cbiAgICAgICAgICAke29wc1szXX1cbiAgICAgICAgICAke29wcy5sZW5ndGggPT09IDQgPyBvdXRwdXQuc2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnLCAndmFsdWUnKSA6IG9wcy5zbGljZSg0KS5qb2luKCdcXG4nKX1cbiAgICAgICAgfWA7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBzaGFkZXJDYWNoZSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBvdXRwdXREYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zOlxuICAgICAgICAgICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIG91dHB1dFNoYXBlKV1cbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSZWR1Y2VBdHRyaWJ1dGVzRnJvbUlucHV0cyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogUmVkdWNlQXR0cmlidXRlcyA9PiB7XG4gICAgICBjb25zdCBheGVzOiBudW1iZXJbXSA9IFtdO1xuICAgICAgaWYgKGlucHV0c1sxXS5kaW1zWzBdID4gMCkge1xuICAgICAgICBpbnB1dHNbMV0uZ2V0QmlnSW50NjRBcnJheSgpLmZvckVhY2godiA9PiBheGVzLnB1c2goTnVtYmVyKHYpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KFxuICAgICAgICAgIHtheGVzLCBrZWVwRGltczogYXR0cmlidXRlcy5rZWVwRGltcywgbm9vcFdpdGhFbXB0eUF4ZXM6IGF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXN9KTtcbiAgICB9O1xuXG5jb25zdCBydW5SZWR1Y2VQcm9ncmFtID1cbiAgICAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIG5hbWU6IHN0cmluZywgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcywgcmVkdWNlT3A6IFJlZHVjZU9wKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBjb250ZXh0LmlucHV0cztcbiAgICAgIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzID1cbiAgICAgICAgICBpbnB1dHMubGVuZ3RoID09PSAxID8gYXR0cmlidXRlcyA6IGNyZWF0ZVJlZHVjZUF0dHJpYnV0ZXNGcm9tSW5wdXRzKGlucHV0cywgYXR0cmlidXRlcyk7XG5cbiAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVSZWR1Y2VQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgICAgbmFtZSwge2hpbnQ6IHVwZGF0ZWRBdHRyaWJ1dGVzLmNhY2hlS2V5LCBpbnB1dERlcGVuZGVuY2llczogWydyYW5rJ119LCBbaW5wdXRzWzBdXSxcbiAgICAgICAgICAgICAgdXBkYXRlZEF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMgJiYgdXBkYXRlZEF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPT09IDAgPyBub09wIDogcmVkdWNlT3AsXG4gICAgICAgICAgICAgIHVwZGF0ZWRBdHRyaWJ1dGVzLmF4ZXMsIGlucHV0c1swXS5kYXRhVHlwZSwgdXBkYXRlZEF0dHJpYnV0ZXMua2VlcERpbXMsXG4gICAgICAgICAgICAgIHVwZGF0ZWRBdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSxcbiAgICAgICAgICB7aW5wdXRzOiBbMF19KTtcbiAgICB9O1xuXG5jb25zdCByZWR1Y2VMb2dTdW1OYWl2ZSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IHJlZHVjZU9wOiBSZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0KSA9PlxuICAgICAgW2B2YXIgdmFsdWUgPSAke291dHB1dC50eXBlLnN0b3JhZ2V9KDApO2AsXG4gICAgICAgJycsXG4gICAgICAgYHZhbHVlICs9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9O2AsXG4gICAgICAgJ3ZhbHVlID0gbG9nKHZhbHVlKTsnLFxuICBdO1xuICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsICdSZWR1Y2VMb2dTdW0nLCBhdHRyaWJ1dGVzLCByZWR1Y2VPcCk7XG59O1xuXG5jb25zdCByZWR1Y2VMMU5haXZlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgcmVkdWNlT3A6IFJlZHVjZU9wID0gKGlucHV0LCBvdXRwdXQpID0+XG4gICAgICBbYHZhciB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oMCk7YCxcbiAgICAgICAnJyxcbiAgICAgICBgdmFsdWUgKz0gYWJzKCR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9KTtgLFxuICAgICAgICcnLFxuICBdO1xuICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsICdSZWR1Y2VMMScsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbn07XG5cbmNvbnN0IHJlZHVjZUwyTmFpdmUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb25zdCByZWR1Y2VPcDogUmVkdWNlT3AgPSAoaW5wdXQsIG91dHB1dCkgPT5cbiAgICAgIFtgdmFyIHQgPSAke291dHB1dC50eXBlLnZhbHVlfSgwKTsgdmFyIHZhbHVlID0gJHtvdXRwdXQudHlwZS52YWx1ZX0oMCk7YCxcbiAgICAgICAnJyxcbiAgICAgICBgdCA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9OyB2YWx1ZSArPSAodCAqIHQpO2AsXG4gICAgICAgJ3ZhbHVlID0gc3FydCh2YWx1ZSk7JyxcbiAgXTtcbiAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCAnUmVkdWNlTDInLCBhdHRyaWJ1dGVzLCByZWR1Y2VPcCk7XG59O1xuXG5jb25zdCByZWR1Y2VMb2dTdW1FeHBOYWl2ZSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IHJlZHVjZU9wOiBSZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0KSA9PlxuICAgICAgW2B2YXIgdmFsdWUgPSAke291dHB1dC50eXBlLnN0b3JhZ2V9KDApO2AsXG4gICAgICAgJycsXG4gICAgICAgYHZhbHVlICs9IGV4cCgke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfSk7YCxcbiAgICAgICAndmFsdWUgPSBsb2codmFsdWUpOycsXG4gIF07XG4gIHJ1blJlZHVjZVByb2dyYW0oY29udGV4dCwgJ1JlZHVjZUxvZ1N1bUV4cCcsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbn07XG5cbmNvbnN0IHJlZHVjZU1heE5haXZlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgcmVkdWNlT3A6IFJlZHVjZU9wID0gKGlucHV0LCBfb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgY29uc3QgaWR4WmVybyA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaW5wdXQucmFuazsgaysrKSB7XG4gICAgICBpZiAoYXhlcy5pbmRleE9mKGspID49IDAgfHwgYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWR4WmVyby5wdXNoKGlucHV0LmluZGljZXNTZXQoJ2lucHV0X2luZGljZXMnLCBrLCAwKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIGAke2lkeFplcm8uam9pbignXFxuJyl9YCxcbiAgICAgIGB2YXIgdmFsdWUgPSAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfTtgLFxuICAgICAgYHZhbHVlID0gbWF4KHZhbHVlLCAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfSk7YCxcbiAgICAgICcnLFxuICAgIF07XG4gIH07XG4gIHJ1blJlZHVjZVByb2dyYW0oY29udGV4dCwgJ1JlZHVjZU1heCcsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbn07XG5cbmNvbnN0IHJlZHVjZU1lYW5OYWl2ZSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IHJlZHVjZU9wOiBSZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgbGV0IHNpemUgPSAxLjA7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBpbnB1dC5yYW5rOyBrKyspIHtcbiAgICAgIGlmIChheGVzLmluZGV4T2YoaykgPj0gMCB8fCBheGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBUT0RPOiB0aGlzIGRlcGVuZHMgb24gdGhlIGlucHV0IGRpbXMuIElmIHdlIHdhbnQgdG8gdXNlIHVuaWZvcm0sIHRoaXMgbmVlZCB0byBiZSB1cGRhdGVkLlxuICAgICAgICBzaXplICo9IGNvbnRleHQuaW5wdXRzWzBdLmRpbXNba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICd2YXIgc3VtID0gZjMyKDApOycsXG4gICAgICAnJyxcbiAgICAgIGBzdW0gKz0gZjMyKCR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9KTtgLFxuICAgICAgYGxldCB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KHN1bSAvICR7c2l6ZX0pO2AsXG4gICAgXTtcbiAgfTtcbiAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCAnUmVkdWNlTWVhbicsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbn07XG5cbmNvbnN0IHJlZHVjZU1pbk5haXZlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgcmVkdWNlT3A6IFJlZHVjZU9wID0gKGlucHV0LCBfb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgY29uc3QgaWR4WmVybyA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaW5wdXQucmFuazsgaysrKSB7XG4gICAgICBpZiAoYXhlcy5pbmRleE9mKGspID49IDAgfHwgYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWR4WmVyby5wdXNoKGBpbnB1dF9pbmRpY2VzWyR7a31dID0gMDtgKTsgIC8vIGZpcnN0IGVsZW1lbnRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgYCR7aWR4WmVyby5qb2luKCdcXG4nKX1gLFxuICAgICAgYHZhciB2YWx1ZSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9O2AsXG4gICAgICBgdmFsdWUgPSBtaW4odmFsdWUsICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9KTtgLFxuICAgICAgJycsXG4gICAgXTtcbiAgfTtcbiAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCAnUmVkdWNlTWluJywgYXR0cmlidXRlcywgcmVkdWNlT3ApO1xufTtcblxuY29uc3QgcmVkdWNlUHJvZE5haXZlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgcmVkdWNlT3A6IFJlZHVjZU9wID0gKGlucHV0LCBvdXRwdXQpID0+XG4gICAgICBbYHZhciB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oMSk7YCxcbiAgICAgICAnJyxcbiAgICAgICBgdmFsdWUgKj0gJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0X2luZGljZXMnKX07YCxcbiAgICAgICAnJyxcbiAgXTtcbiAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCAnUmVkdWNlUHJvZCcsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbn07XG5cbmNvbnN0IHJlZHVjZVN1bU5haXZlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgcmVkdWNlT3A6IFJlZHVjZU9wID0gKGlucHV0LCBvdXRwdXQpID0+XG4gICAgICBbYHZhciB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oMCk7YCxcbiAgICAgICAnJyxcbiAgICAgICBgdmFsdWUgKz0gJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0X2luZGljZXMnKX07YCxcbiAgICAgICAnJyxcbiAgXTtcbiAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCAnUmVkdWNlU3VtJywgYXR0cmlidXRlcywgcmVkdWNlT3ApO1xufTtcblxuY29uc3QgcmVkdWNlU3VtU3F1YXJlTmFpdmUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb25zdCByZWR1Y2VPcDogUmVkdWNlT3AgPSAoaW5wdXQsIG91dHB1dCkgPT5cbiAgICAgIFtgdmFyIHQgPSAke291dHB1dC50eXBlLnZhbHVlfSgwKTsgdmFyIHZhbHVlID0gJHtvdXRwdXQudHlwZS52YWx1ZX0oMCk7YCxcbiAgICAgICAnJyxcbiAgICAgICBgdCA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9OyB2YWx1ZSArPSB0ICogdDtgLFxuICAgICAgICcnLFxuICBdO1xuICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsICdSZWR1Y2VTdW1TcXVhcmUnLCBhdHRyaWJ1dGVzLCByZWR1Y2VPcCk7XG59O1xuXG5jb25zdCB1c2VOYWl2ZVJlZHVjZU1ldGhvZCA9XG4gICAgKHNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgYXhlczogcmVhZG9ubHkgbnVtYmVyW10sIG5vb3BXaXRoRW1wdHlBeGVzOiBib29sZWFuKTogYm9vbGVhbiA9PiB7XG4gICAgICBpZiAoYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5vb3BXaXRoRW1wdHlBeGVzO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3V0cHV0U2l6ZSA9IDE7XG4gICAgICBsZXQgcmVkdWNlU2l6ZSA9IDE7XG4gICAgICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBheGVzLmxlbmd0aDsgZGltKyspIHtcbiAgICAgICAgaWYgKGF4ZXMuaW5kZXhPZihkaW0pID09PSAtMSkge1xuICAgICAgICAgIG91dHB1dFNpemUgKj0gc2hhcGVbZGltXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWR1Y2VTaXplICo9IHNoYXBlW2RpbV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbmRpdGlvbiBkYXRhIGlzIHZlcnkgcm91Z2gsIGFsdGhvdWdoIGNvbnNpZGVyaW5nIHRoZSBjb3VudCBvZiBFeGVjdXRpb24gVW5pdCAoRVUpLCB0aGUgcG90ZW50aWFsXG4gICAgICAvLyB3b3JrIGdyb3VwcyBpbiBhIEVVIGFuZCB0aGUgY291bnRzIG9mIGxvb3BzIGluIHRoZSBuYWl2ZSBhbmQgc2hhcmVkIG1ldGhvZHMsIGFsc28gZG9pbmcgZXhwZXJpbWVudHNcbiAgICAgIC8vIG9uIHNvbWUgbWFjaGluZXMuXG4gICAgICByZXR1cm4gcmVkdWNlU2l6ZSA8IDMyICYmIG91dHB1dFNpemUgPiAxMDI0O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VNZWFuID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGlmICh1c2VOYWl2ZVJlZHVjZU1ldGhvZChjb250ZXh0LmlucHV0c1swXS5kaW1zLCBhdHRyaWJ1dGVzLmF4ZXMsIGF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMpKSB7XG4gICAgcmVkdWNlTWVhbk5haXZlKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlZHVjZU1lYW5TaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VMMSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBpZiAodXNlTmFpdmVSZWR1Y2VNZXRob2QoY29udGV4dC5pbnB1dHNbMF0uZGltcywgYXR0cmlidXRlcy5heGVzLCBhdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSkge1xuICAgIHJlZHVjZUwxTmFpdmUoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVkdWNlTDFTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VMMiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBpZiAodXNlTmFpdmVSZWR1Y2VNZXRob2QoY29udGV4dC5pbnB1dHNbMF0uZGltcywgYXR0cmlidXRlcy5heGVzLCBhdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSkge1xuICAgIHJlZHVjZUwyTmFpdmUoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVkdWNlTDJTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VMb2dTdW1FeHAgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VMb2dTdW1FeHBOYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VMb2dTdW1FeHBTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VNYXggPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VNYXhOYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VNYXhTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VNaW4gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VNaW5OYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VNaW5TaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VQcm9kID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGlmICh1c2VOYWl2ZVJlZHVjZU1ldGhvZChjb250ZXh0LmlucHV0c1swXS5kaW1zLCBhdHRyaWJ1dGVzLmF4ZXMsIGF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMpKSB7XG4gICAgcmVkdWNlUHJvZE5haXZlKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlZHVjZVByb2RTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VTdW0gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VTdW1OYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VTdW1TaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VTdW1TcXVhcmUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VTdW1TcXVhcmVOYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VTdW1TcXVhcmVTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VMb2dTdW0gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VMb2dTdW1OYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VMb2dTdW1TaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8vIFRPRE86IHRoaXMgaXMgdGhlIHNhbWUgbmFpdmUgaW1wbGVtZW50YXRpb24gd2UgdXNlIGZvciByZWR1Y2UgdGhhdCBoYXNcbi8vIHBlcmZvcm1hbmNlIGxpbWl0YXRpb25zIHdoZW4gdGhlIHJlZHVjZWQgYXhpcyBpcyBsb25nLiBOZWVkIHRvIGFkZFxuLy8gYSBvcHRpbWl6ZWQgY29kZXBhdGggZm9yIHRoaXMuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHR9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVSZWR1Y2VQcm9ncmFtSW5mbywgUmVkdWNlT3B9IGZyb20gJy4vcmVkdWNlJztcblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCA9PT0gMCB8fCBpbnB1dHMubGVuZ3RoID4gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignQXJnTWluTWF4T3Agb3AgcmVxdWlyZXMgMSBvciAyIGlucHV0cy4nKTtcbiAgfVxuICBpZiAoaW5wdXRzWzBdLmRhdGFUeXBlICE9PSBEYXRhVHlwZS5mbG9hdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB0eXBlLicpO1xuICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFyZ01pbk1heEF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICBrZWVwRGltczogYm9vbGVhbjtcbiAgYXhpczogbnVtYmVyO1xuICBzZWxlY3RMYXN0SW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGFyZ01pbiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogQXJnTWluTWF4QXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IGFyZ01pbk1heE9wOiBSZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgY29uc3QgaWR4WmVybyA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaW5wdXQucmFuazsgaysrKSB7XG4gICAgICBpZiAoYXhlcy5pbmRleE9mKGspID49IDAgfHwgYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWR4WmVyby5wdXNoKGBpbnB1dF9pbmRpY2VzWyR7a31dID0gMDtgKTsgIC8vIGZpcnN0IGVsZW1lbnRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIGAke2lkeFplcm8uam9pbignXFxuJyl9YCwgYHZhciB2YWx1ZSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9O1xcbnZhciBiZXN0X2luZGV4IDogaTMyID0gMDtgLFxuICAgICAgYGlmICgke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfSAke2F0dHJpYnV0ZXMuc2VsZWN0TGFzdEluZGV4ID4gMCA/ICc8PScgOiAnPCd9IHZhbHVlKSB7XG4gICAgICAgICB2YWx1ZSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9O1xuICAgICAgICAgYmVzdF9pbmRleCA9IGkzMihsYXN0X2luZGV4KTtcbiAgICAgICB9YCxcbiAgICAgICcnLCBvdXRwdXQuc2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnLCAnYmVzdF9pbmRleCcpXG4gICAgXTtcbiAgfTtcblxuICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICBjcmVhdGVSZWR1Y2VQcm9ncmFtSW5mbyhcbiAgICAgICAgICAnQXJnTWluJywge2hpbnQ6IGF0dHJpYnV0ZXMuY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnXX0sIFtjb250ZXh0LmlucHV0c1swXV0sIGFyZ01pbk1heE9wLFxuICAgICAgICAgIFthdHRyaWJ1dGVzLmF4aXNdLCBEYXRhVHlwZS5pbnQ2NCwgYXR0cmlidXRlcy5rZWVwRGltcyksXG4gICAgICB7aW5wdXRzOiBbMF19KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhcmdNYXggPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IEFyZ01pbk1heEF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb25zdCBhcmdNaW5NYXhPcDogUmVkdWNlT3AgPSAoaW5wdXQsIG91dHB1dCwgYXhlcykgPT4ge1xuICAgIGNvbnN0IGlkeFplcm8gPSBbXTtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGlucHV0LnJhbms7IGsrKykge1xuICAgICAgaWYgKGF4ZXMuaW5kZXhPZihrKSA+PSAwIHx8IGF4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlkeFplcm8ucHVzaChgaW5wdXRfaW5kaWNlc1ske2t9XSA9IDA7YCk7ICAvLyBmaXJzdCBlbGVtZW50XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICBgJHtpZHhaZXJvLmpvaW4oJ1xcbicpfWAsIGB2YXIgdmFsdWUgPSAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfTtcXG52YXIgYmVzdF9pbmRleCA6IGkzMiA9IDA7YCxcbiAgICAgIGBpZiAoJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0X2luZGljZXMnKX0gJHthdHRyaWJ1dGVzLnNlbGVjdExhc3RJbmRleCA+IDAgPyAnPj0nIDogJz4nfSB2YWx1ZSkge1xuICAgICAgICAgdmFsdWUgPSAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfTtcbiAgICAgICAgIGJlc3RfaW5kZXggPSBpMzIobGFzdF9pbmRleCk7XG4gICAgICAgfWAsXG4gICAgICAnJywgb3V0cHV0LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgJ2Jlc3RfaW5kZXgnKVxuICAgIF07XG4gIH07XG5cbiAgY29udGV4dC5jb21wdXRlKFxuICAgICAgY3JlYXRlUmVkdWNlUHJvZ3JhbUluZm8oXG4gICAgICAgICAgJ2FyZ01heCcsIHtoaW50OiBhdHRyaWJ1dGVzLmNhY2hlS2V5LCBpbnB1dERlcGVuZGVuY2llczogWydyYW5rJ119LCBbY29udGV4dC5pbnB1dHNbMF1dLCBhcmdNaW5NYXhPcCxcbiAgICAgICAgICBbYXR0cmlidXRlcy5heGlzXSwgRGF0YVR5cGUuaW50NjQsIGF0dHJpYnV0ZXMua2VlcERpbXMpLFxuICAgICAge2lucHV0czogWzBdfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VBcmdNaW5NYXhBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQXJnTWluTWF4QXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleShhdHRyaWJ1dGVzIGFzIE9taXQ8QXJnTWluTWF4QXR0cmlidXRlcywga2V5b2YgQXR0cmlidXRlV2l0aENhY2hlS2V5Pik7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeSwgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgSW5kaWNlc0hlbHBlciwgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmNhdEF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBheGlzOiBudW1iZXI7XG59XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBheGlzOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvbyBmZXcgaW5wdXRzJyk7XG4gIH1cbiAgY29uc3QgcmVmZXJlbmNlSW5kZXggPSAwO1xuICBjb25zdCByZWZlcmVuY2VJbnB1dCA9IGlucHV0c1tyZWZlcmVuY2VJbmRleF07XG4gIGNvbnN0IGlucHV0VHlwZSA9IHJlZmVyZW5jZUlucHV0LmRhdGFUeXBlO1xuICBjb25zdCBpbnB1dFJhbmsgPSByZWZlcmVuY2VJbnB1dC5kaW1zLmxlbmd0aDtcbiAgaW5wdXRzLmZvckVhY2goKGlucHV0LCBpKSA9PiB7XG4gICAgaWYgKGkgPT09IHJlZmVyZW5jZUluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIG1ha2Ugc3VyZSB0eXBlcyBvZiBhbGwgaW5wdXRzIG1hdGNoXG4gICAgaWYgKGlucHV0LmRhdGFUeXBlICE9PSBpbnB1dFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgdGVuc29ycyBzaG91bGQgYmUgb25lIHR5cGUnKTtcbiAgICB9XG4gICAgLy8gbWFrZSBzdXJlIHRoZSBkaW1lbnNpb25hbGl0eSBvZiBhbGwgaW5wdXRzIGFyZSB0aGUgc2FtZVxuICAgIGlmIChpbnB1dC5kaW1zLmxlbmd0aCAhPT0gaW5wdXRSYW5rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IHRlbnNvcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc2hhcGUnKTtcbiAgICB9XG4gICAgaW5wdXQuZGltcy5mb3JFYWNoKChkaW0sIGkpID0+IHtcbiAgICAgIGlmIChpICE9PSBheGlzICYmIGRpbSAhPT0gcmVmZXJlbmNlSW5wdXQuZGltc1tpXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vbiBjb25jYXQgZGltZW5zaW9ucyBtdXN0IG1hdGNoJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuY29uc3QgY2FsY3VsYXRlSW5wdXRJbmRleEltcGwgPSAobnVtYmVyT2ZUZW5zb3JzOiBudW1iZXIsIHNpemVJbkNvbmNhdEF4aXNTdHI6IHN0cmluZyk6IHN0cmluZyA9PiBgXG4gIGZuIGNhbGN1bGF0ZUlucHV0SW5kZXgoaW5kZXg6IHUzMikgLT4gdTMyIHtcbiAgICBsZXQgc2l6ZUluQ29uY2F0QXhpcyA9IGFycmF5PHUzMiwgJHtudW1iZXJPZlRlbnNvcnN9dT4oJHtzaXplSW5Db25jYXRBeGlzU3RyfSk7XG4gICAgZm9yICh2YXIgaTogdTMyID0gMHU7IGkgPCAke251bWJlck9mVGVuc29yc307IGkgKz0gMXUgKSB7XG4gICAgICBpZiAoaW5kZXggPCBzaXplSW5Db25jYXRBeGlzW2ldKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJHtudW1iZXJPZlRlbnNvcnN9dTtcbiAgfWA7XG5cbmNvbnN0IGFzc2lnbk91dHB1dERhdGEgPSAoaW5wdXRzOiByZWFkb25seSBJbmRpY2VzSGVscGVyW10sIG91dHB1dDogSW5kaWNlc0hlbHBlcikgPT4ge1xuICBjb25zdCBudW1iZXJPZlRlbnNvcnMgPSBpbnB1dHMubGVuZ3RoO1xuXG4gIGNvbnN0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZlRlbnNvcnM7ICsraSkge1xuICAgIGNvbnN0IHJldHVyblNuaXBwZXQgPSBvdXRwdXQuc2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnLCBpbnB1dHNbaV0uZ2V0QnlJbmRpY2VzKCdpbmRpY2VzJykpO1xuICAgIGlmIChudW1iZXJPZlRlbnNvcnMgPT09IDEpIHtcbiAgICAgIGNvZGVMaW5lcy5wdXNoKHJldHVyblNuaXBwZXQpO1xuICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgY29kZUxpbmVzLnB1c2goYGlmIChpbnB1dEluZGV4ID09ICR7aX11KSB7ICR7cmV0dXJuU25pcHBldH0gfWApO1xuICAgIH0gZWxzZSBpZiAoaSA9PT0gbnVtYmVyT2ZUZW5zb3JzIC0gMSkge1xuICAgICAgY29kZUxpbmVzLnB1c2goYGVsc2UgeyAke3JldHVyblNuaXBwZXR9IH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZUxpbmVzLnB1c2goYGVsc2UgaWYgKGlucHV0SW5kZXggPT0gJHtpfSkgeyAke3JldHVyblNuaXBwZXR9IH1gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvZGVMaW5lcy5qb2luKCdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDb25jYXRQcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhZGp1c3RlZEF4aXM6IG51bWJlciwgb3V0cHV0U2hhcGU6IG51bWJlcltdLCBkYXRhVHlwZTogRGF0YVR5cGUpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuXG4gICAgICBjb25zdCBzaXplSW5Db25jYXRBeGlzID0gbmV3IEFycmF5PG51bWJlcj4oaW5wdXRzLmxlbmd0aCk7XG4gICAgICBjb25zdCBpbnB1dFZhcnMgPSBuZXcgQXJyYXk8SW5kaWNlc0hlbHBlcj4oaW5wdXRzLmxlbmd0aCk7XG5cbiAgICAgIGxldCBwcmV2aW91c1N1bSA9IDA7XG4gICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llczogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXSA9IFtdO1xuICAgICAgY29uc3QgaW5wdXRSYW5rcyA9IFtdO1xuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9XTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHByZXZpb3VzU3VtICs9IGlucHV0c1tpXS5kaW1zW2FkanVzdGVkQXhpc107XG4gICAgICAgIHNpemVJbkNvbmNhdEF4aXNbaV0gPSBwcmV2aW91c1N1bTtcbiAgICAgICAgaW5wdXRSYW5rcy5wdXNoKGlucHV0c1tpXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGlucHV0VmFyc1tpXSA9IGlucHV0VmFyaWFibGUoYGlucHV0JHtpfWAsIGRhdGFUeXBlLCBpbnB1dFJhbmtzW2ldKTtcbiAgICAgICAgaW5wdXREZXBlbmRlbmNpZXMucHVzaCgncmFuaycpO1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCh7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBzaXplSW5Db25jYXRBeGlzW2ldfSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbaV0uZGltcykpO1xuICAgICAgfVxuICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGUpKTtcblxuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgpO1xuICAgICAgY29uc3QgaW5kaWNlc0F4aXMgPSBvdXRwdXQuaW5kaWNlc0dldCgnaW5kaWNlcycsIGFkanVzdGVkQXhpcyk7XG4gICAgICBjb25zdCBzaXplSW5Db25jYXRBeGlzU3RyID1cbiAgICAgICAgICBBcnJheS5mcm9tKEFycmF5KHNpemVJbkNvbmNhdEF4aXMubGVuZ3RoKS5rZXlzKCkpLm1hcChpID0+IGB1bmlmb3Jtcy5zaXplSW5Db25jYXRBeGlzJHtpfWApLmpvaW4oJywnKTtcbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuXG4gICR7KCgpID0+IHtcbiAgICAgICAgc2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgnb3V0cHV0U2l6ZScsICd1MzInKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3JtKGBzaXplSW5Db25jYXRBeGlzJHtpfWAsICd1MzInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hhZGVySGVscGVyLmRlY2xhcmVWYXJpYWJsZXMoLi4uaW5wdXRWYXJzLCBvdXRwdXQpO1xuICAgICAgfSkoKX1cblxuICAke2NhbGN1bGF0ZUlucHV0SW5kZXhJbXBsKHNpemVJbkNvbmNhdEF4aXMubGVuZ3RoLCBzaXplSW5Db25jYXRBeGlzU3RyKX1cblxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRTaXplJyl9XG5cbiAgICB2YXIgaW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcblxuICAgIGxldCBpbnB1dEluZGV4ID0gY2FsY3VsYXRlSW5wdXRJbmRleCgke2luZGljZXNBeGlzfSk7XG4gICAgaWYgKGlucHV0SW5kZXggIT0gMHUpIHtcbiAgICAgIGxldCBzaXplSW5Db25jYXRBeGlzID0gYXJyYXk8dTMyLCAke3NpemVJbkNvbmNhdEF4aXMubGVuZ3RofXU+KCR7c2l6ZUluQ29uY2F0QXhpc1N0cn0pO1xuICAgICAgJHtpbmRpY2VzQXhpc30gLT0gc2l6ZUluQ29uY2F0QXhpc1tpbnB1dEluZGV4IC0gMXVdO1xuICAgIH1cblxuICAgICR7YXNzaWduT3V0cHV0RGF0YShpbnB1dFZhcnMsIG91dHB1dCl9XG4gIH1gO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnQ29uY2F0JyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHtoaW50OiBgJHthZGp1c3RlZEF4aXN9YCwgaW5wdXREZXBlbmRlbmNpZXN9LFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXMsXG4gICAgICAgIH0pLFxuICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICB9O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBjb25jYXQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IENvbmNhdEF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgY29uc3QgaW5wdXRzID0gY29udGV4dC5pbnB1dHM7XG4gIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgY29uc3QgYWRqdXN0ZWRBeGlzID0gU2hhcGVVdGlsLm5vcm1hbGl6ZUF4aXMoYXR0cmlidXRlcy5heGlzLCBpbnB1dFNoYXBlLmxlbmd0aCk7XG4gIHZhbGlkYXRlSW5wdXRzKGlucHV0cywgYWRqdXN0ZWRBeGlzKTtcbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlLnNsaWNlKCk7XG4gIG91dHB1dFNoYXBlW2FkanVzdGVkQXhpc10gPVxuICAgICAgaW5wdXRzLnJlZHVjZSgoc3VtLCBpbnB1dCkgPT4gc3VtICsgKGlucHV0LmRpbXMubGVuZ3RoID4gYWRqdXN0ZWRBeGlzID8gaW5wdXQuZGltc1thZGp1c3RlZEF4aXNdIDogMCksIDApO1xuICAvLyAwIGxlbmd0aCB0ZW5zb3JzIGFyZSB2YWxpZCBmb3IgY29uY2F0LCByZW1vdmUgdGhlbVxuICBjb25zdCBub25FbXB0eUlucHV0cyA9IGlucHV0cy5maWx0ZXIoaW5wdXQgPT4gU2hhcGVVdGlsLnNpemUoaW5wdXQuZGltcykgPiAwKTtcbiAgY29udGV4dC5jb21wdXRlKFxuICAgICAgY3JlYXRlQ29uY2F0UHJvZ3JhbUluZm8obm9uRW1wdHlJbnB1dHMsIGFkanVzdGVkQXhpcywgb3V0cHV0U2hhcGUsIGlucHV0c1swXS5kYXRhVHlwZSksIHtpbnB1dHM6IG5vbkVtcHR5SW5wdXRzfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb25jYXRBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQ29uY2F0QXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7YXhpczogYXR0cmlidXRlcy5heGlzIGFzIG51bWJlcn0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIEdwdURhdGFUeXBlLCBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeSwgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgZ2V0TWF4Q29tcG9uZW50cywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlLCB0ZW5zb3JUeXBlVG9Xc2dsVmFsdWVUeXBlLCBVbmlmb3JtRGF0YUVsZW1lbnRUeXBlLCBVbmlmb3Jtc0FycmF5VHlwZX0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtjcmVhdGVDb25jYXRQcm9ncmFtSW5mb30gZnJvbSAnLi9jb25jYXQnO1xuXG5leHBvcnQgY29uc3QgZW51bSBBdHRlbnRpb25Ra3ZGb3JtYXQge1xuICB1bmtub3duLCAgICAgICAgICAvLyBlbnVtIHZhbHVlIG5vdCBzZXQsIG9yIGRlcGVuZHMgb24gcWt2IHByb2plY3Rpb24gaW1wbGVtZW50YXRpb24gZGV0YWlsc1xuICBxa3ZCTlNILCAgICAgICAgICAvLyBmb3Igbm9uLXBhY2tlZCBxa3YsIHBlcm11dGVkXG4gIHFrdkJTTkgsICAgICAgICAgIC8vIGZvciBub24tcGFja2VkIHFrdiwgbm90IHBlcm11dGVkLCB1c2VkIGJ5IG1lbW9yeSBlZmZpY2llbnQgYXR0ZW50aW9uIG9yIE11bHRpSGVhZEF0dGVudGlvblxuICBxa3ZCU04zSCwgICAgICAgICAvLyBmb3IgVFJUIGZ1c2VkIGF0dGVudGlvbiwgcWt2IGFyZSBwYWNrZWRcbiAgcWt2Qk5TSHFrdkJTM05ILCAgLy8gZm9yIFRSVCBmdXNlZCBjYXVzYWwgYXR0ZW50aW9uLCBkYXRhIGhhcyB0d28gZm9ybWF0cyAocWt2IGlzIDNCTlNILCBnZW1tX2J1ZmZlciBpcyBCUzNOSClcbiAgcUt2QlNOSHhCU04ySCwgICAgLy8gZm9yIFRSVCBmdXNlZCBjcm9zcyBhdHRlbnRpb24sIGt2IGFyZSBwYWNrZWRcbiAgcWt2VE5ILCAgICAgICAgICAgLy8gZm9yIG1lbW9yeSBlZmZpY2llbnQgYXR0ZW50aW9uLCBxa3YgYXJlIG5vdCBwYWNrZWQsIGFuZCBwYWRkaW5ncyBhcmUgcmVtb3ZlZC5cbiAgcWt2VE4zSCwgICAgICAgICAgLy8gZm9yIFRSVCBmdXNlZCBhdHRlbnRpb24sIHFrdiBhcmUgcGFja2VkIGFuZCBwYWRkaW5ncyBhcmUgcmVtb3ZlZFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBBdHRlbnRpb25NYXNrVHlwZSB7XG4gIG5vbmUsICAgICAgICAgICAgICAgICAgLy8gTm8gbWFza1xuICBtYXNrMWRLZXlTZXFMZW4sICAgICAgIC8vIFtiYXRjaF9zaXplXSwga2V5IHNlcXVlbmNlIGxlbmd0aFxuICBtYXNrMWRFbmRTdGFydCwgICAgICAgIC8vIFsyICogYmF0Y2hfc2l6ZV0gd2l0aCBlbmQgcG9zaXRpb25zIGFuZCBzdGFydCBwb3NpdGlvbnNcbiAgbWFzazFES2V5U2VxTGVuU3RhcnQsICAvLyBbMyAqIGJhdGNoX3NpemUgKyAyXSB3aXRoIFtrZXlfbGVuWzBdLCAuLi4sIGtleV9sZW5bYmF0Y2hfc2l6ZSAtIDFdLCBxdWVyeV9zdGFydFswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4sIHF1ZXJ5X3N0YXJ0W2JhdGNoX3NpemUgLSAxXSwgcXVlcnlfZW5kW2JhdGNoX3NpemUgLSAxXSwga2V5X3N0YXJ0WzBdLCAuLi4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5X3N0YXJ0W2JhdGNoX3NpemUgLSAxXSwga2V5X2VuZFtiYXRjaF9zaXplIC0gMV1dXG4gIG1hc2syZER1bW15LCAgICAgICAgICAgLy8gZHVtbXkgbWFzayB3aXRoIHNoYXBlIFsxLCAxXSBvciBbYmF0Y2hfc2l6ZSwgMV0uIEl0IGhhcyBzYW1lIGVmZmVjdCBhcyBubyBtYXNrLlxuICBtYXNrMmRLZXlQYWRkaW5nLCAgICAgIC8vIFtiYXRjaF9zaXplLCB0b3RhbF9zZXF1ZW5jZV9sZW5ndGhdXG4gIG1hc2szZEF0dGVudGlvbiwgICAgICAgLy8gW2JhdGNoX3NpemUsIHNlcXVlbmNlX2xlbmd0aCwgdG90YWxfc2VxdWVuY2VfbGVuZ3RoXVxuICBtYXNrNGRNZWdhdHJvbiwgICAgICAgIC8vIE1lZ2F0cm9uIGNhdXNhbCBtYXNrIHdpdGggc2hhcGUgW2JhdGNoX3NpemUsIDEsIG1heF9zZXF1ZW5jZV9sZW5ndGgsIG1heF9zZXF1ZW5jZV9sZW5ndGhdXG4gIG1hc2tVbmtub3duXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0ZW50aW9uUGFyYW1ldGVycyB7XG4gIGJhdGNoU2l6ZTogbnVtYmVyO1xuICBzZXF1ZW5jZUxlbmd0aDogbnVtYmVyO1xuICBwYXN0U2VxdWVuY2VMZW5ndGg6IG51bWJlcjtcbiAga3ZTZXF1ZW5jZUxlbmd0aDogbnVtYmVyO1xuICB0b3RhbFNlcXVlbmNlTGVuZ3RoOiBudW1iZXI7XG4gIG1heFNlcXVlbmNlTGVuZ3RoOiBudW1iZXI7XG4gIGlucHV0SGlkZGVuU2l6ZTogbnVtYmVyO1xuICBoaWRkZW5TaXplOiBudW1iZXI7XG4gIHZIaWRkZW5TaXplOiBudW1iZXI7XG4gIGhlYWRTaXplOiBudW1iZXI7XG4gIHZIZWFkU2l6ZTogbnVtYmVyO1xuICBudW1IZWFkczogbnVtYmVyO1xuICBpc1VuaWRpcmVjdGlvbmFsOiBib29sZWFuO1xuICBwYXN0UHJlc2VudFNoYXJlQnVmZmVyOiBib29sZWFuO1xuICBtYXNrRmlsdGVyVmFsdWU6IG51bWJlcjtcbiAgbWFza1R5cGU6IEF0dGVudGlvbk1hc2tUeXBlO1xuICBzY2FsZTogbnVtYmVyO1xuICBicm9hZGNhc3RSZXNQb3NCaWFzOiBib29sZWFuO1xuICBwYXNzUGFzdEluS3Y6IGJvb2xlYW47XG4gIHFrdkZvcm1hdDogQXR0ZW50aW9uUWt2Rm9ybWF0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF0dGVudGlvbkF0dHJzIHtcbiAgbnVtSGVhZHM6IG51bWJlcjtcbiAgaXNVbmlkaXJlY3Rpb25hbDogbnVtYmVyO1xuICBtYXNrRmlsdGVyVmFsdWU6IG51bWJlcjtcbiAgc2NhbGU6IG51bWJlcjtcbiAgZG9Sb3Rhcnk6IG51bWJlcjtcbiAgcWt2SGlkZGVuU2l6ZXM6IG51bWJlcltdO1xuICBwYXN0UHJlc2VudFNoYXJlQnVmZmVyOiBib29sZWFuO1xufVxuXG5jb25zdCB2YWxpZGF0ZUF0dGVudGlvbklucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogQXR0ZW50aW9uQXR0cnMpOiBBdHRlbnRpb25QYXJhbWV0ZXJzID0+IHtcbiAgLy8gQWJicmV2aWF0aW9uIGFuZCBNZWFuaW5nczpcbiAgLy8gICBCOiAgICBiYXRjaF9zaXplXG4gIC8vICAgUzogICAgc2VxdWVuY2VfbGVuZ3RoIChpbnB1dCBzZXF1ZW5jZSBsZW5ndGggb2YgcXVlcnkpXG4gIC8vICAgUDogICAgcGFzdF9zZXF1ZW5jZV9sZW5ndGggKHBhc3Qgc2VxdWVuY2UgbGVuZ3RoIG9mIGtleSBvciB2YWx1ZSlcbiAgLy8gICBMOiAgICBrdl9zZXF1ZW5jZV9sZW5ndGggKGlucHV0IHNlcXVlbmNlIGxlbmd0aCBvZiBrZXkgb3IgdmFsdWUpXG4gIC8vICAgTTogICAgbWF4X3NlcXVlbmNlX2xlbmd0aFxuICAvLyAgIFQ6ICAgIHRvdGFsX3NlcXVlbmNlX2xlbmd0aCA9IHBhc3Rfc2VxdWVuY2VfbGVuZ3RoICsga3Zfc2VxdWVuY2VfbGVuZ3RoXG4gIC8vICAgTjogICAgbnVtX2hlYWRzXG4gIC8vICAgSDogICAgaGVhZCBzaXplIGZvciBRIGFuZCBLLCBha2EgcV9oZWFkX3NpemUgb3Iga19oZWFkX3NpemUgb3IgcWtfaGVhZF9zaXplXG4gIC8vICAgSF92OiAgdl9oZWFkX3NpemVcbiAgLy8gICBEX2k6ICBpbnB1dCBoaWRkZW4gc2l6ZVxuICAvLyAgIEQ6ICAgIGhpZGRlbiBzaXplIGZvciBRIGFuZCBLIChEID0gTiAqIEgpLCBha2EgcV9oaWRkZW5fc2l6ZSBvciBrX2hpZGRlbl9zaXplIG9yIHFrX2hpZGRlbl9zaXplXG4gIC8vICAgRF92OiAgdl9oaWRkZW5fc2l6ZSA9IG51bV9oZWFkcyAqIHZfaGVhZF9zaXplXG5cbiAgLy8gV2hlbiBwYXN0IHN0YXRlIGlzIHVzZWQsIFEsIEsgYW5kIFYgc2hvdWxkIGhhdmUgc2FtZSBoaWRkZW4gc2l6ZSAodW5sZXNzIHdlIHNwbGl0IGl0IGludG8gcGFzdF9rZXkgYW5kIHBhc3RfdmFsdWUpLlxuXG4gIC8vIElucHV0IHNoYXBlczpcbiAgLy8gICBpbnB1dCAgICAgICAgKFEvSy9WKSAgICA6IChCLCBTLCBEX2kpXG4gIC8vICAgd2VpZ2h0cyAgICAgIChRL0svVikgICAgOiAoRF9pLCBEICsgRCArIERfdilcbiAgLy8gICBiaWFzICAgICAgICAgKFEvSy9WKSAgICA6IChEICsgRCArIERfdilcbiAgLy8gICBtYXNrX2luZGV4ICAgICAgICAgICAgICA6IHNlZSBiZWxvd1xuICAvLyAgIHBhc3QgICAgICAgICAoSy9WKSAgICAgIDogKDIsIEIsIE4sIFAsIEgpIG9yIE5VTExcbiAgLy8gICByZWxhdGl2ZV9wb3NpdGlvbl9iaWFzICAgICAgICAgICAgOiAoQiwgTiwgUywgVCkgb3IgTlVMTFxuXG4gIC8vIEZvciBtYXNrX2luZGV4LCB0aGUgZm9sbG93aW5nIHNoYXBlcyBhcmUgc3VwcG9ydGVkOlxuICAvLyAgICAgTlVMTCwgKEIsIDEpLCAoMSwgMSlcbiAgLy8gICAgIChCKSwgKDIgKiBCKSwgKDMgKiBCICsgMilcbiAgLy8gICAgIChCLCBUKVxuICAvLyAgICAgKEIsIFMsIFQpXG4gIC8vICAgICAoQiwgMSwgTSwgTSlcbiAgLy9cbiAgLy8gV2hlbiBhIG1vZGVsIGlzIHBydW5lZCAobGlrZSBzb21lIGF0dGVudGlvbiBoZWFkcyBhcmUgcmVtb3ZlZCBpbiBRL0svViksIGlucHV0X2hpZGRlbl9zaXplIGNvdWxkIGJlIGxhcmdlclxuICAvLyB0aGFuIGhpZGRlbiBkaW1lbnNpb24gb2YgUSwgSyBhbmQgVi5cblxuICBjb25zdCBpbnB1dCA9IGlucHV0c1swXTtcbiAgY29uc3Qgd2VpZ2h0cyA9IGlucHV0c1sxXTtcbiAgY29uc3QgYmlhcyA9IGlucHV0c1syXTtcbiAgY29uc3QgbWFza0luZGV4ID0gaW5wdXRzWzNdO1xuICBjb25zdCBwYXN0ID0gaW5wdXRzWzRdO1xuICBjb25zdCByZWxhdGl2ZVBvc2l0aW9uQmlhcyA9IGlucHV0c1s1XTtcblxuICBpZiAocGFzdCAmJiByZWxhdGl2ZVBvc2l0aW9uQmlhcykge1xuICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW50aW9uIGNhbm5vdCBoYXZlIGJvdGggcGFzdCBhbmQgcmVsYXRpdmVfcG9zaXRpb25fYmlhcycpO1xuICB9XG5cbiAgaWYgKGlucHV0LmRpbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcImlucHV0XCIgbXVzdCBoYXZlIDMgZGltZW5zaW9ucycpO1xuICB9XG5cbiAgY29uc3QgYmF0Y2hTaXplID0gaW5wdXQuZGltc1swXTtcbiAgY29uc3Qgc2VxdWVuY2VMZW5ndGggPSBpbnB1dC5kaW1zWzFdO1xuICBjb25zdCBpbnB1dEhpZGRlblNpemUgPSBpbnB1dC5kaW1zWzJdO1xuXG4gIGlmIChiaWFzLmRpbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcImJpYXNcIiBpcyBleHBlY3RlZCB0byBoYXZlIDEgZGltZW5zaW9ucycpO1xuICB9XG5cbiAgaWYgKHdlaWdodHMuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwid2VpZ2h0c1wiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMiBkaW1lbnNpb25zJyk7XG4gIH1cblxuICBpZiAod2VpZ2h0cy5kaW1zWzBdICE9PSBpbnB1dEhpZGRlblNpemUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IDEgZGltZW5zaW9uIDAgc2hvdWxkIGhhdmUgc2FtZSBsZW5ndGggYXMgZGltZW5zaW9uIDIgb2YgaW5wdXQgMCcpO1xuICB9XG5cbiAgaWYgKGJpYXMuZGltc1swXSAhPT0gd2VpZ2h0cy5kaW1zWzFdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcImJpYXNcIiBkaW1lbnNpb24gMCBzaG91bGQgaGF2ZSBzYW1lIGxlbmd0aCBhcyBkaW1lbnNpb24gMSBvZiBpbnB1dCBcIndlaWdodHNcIicpO1xuICB9XG5cbiAgbGV0IHFIaWRkZW5TaXplID0gYmlhcy5kaW1zWzBdIC8gMztcbiAgbGV0IGtIaWRkZW5TaXplID0gcUhpZGRlblNpemU7XG4gIGxldCB2SGlkZGVuU2l6ZSA9IGtIaWRkZW5TaXplO1xuICBpZiAoYXR0cmlidXRlcy5xa3ZIaWRkZW5TaXplcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGF0dHJpYnV0ZXMucWt2SGlkZGVuU2l6ZXMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Frdl9oaWRkZW5fc2l6ZXMgYXR0cmlidXRlIHNob3VsZCBoYXZlIDMgZWxlbWVudHMnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzeiBvZiBhdHRyaWJ1dGVzLnFrdkhpZGRlblNpemVzKSB7XG4gICAgICBpZiAoc3ogJSBhdHRyaWJ1dGVzLm51bUhlYWRzICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncWt2X2hpZGRlbl9zaXplcyBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IG51bV9oZWFkcycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHFIaWRkZW5TaXplID0gYXR0cmlidXRlcy5xa3ZIaWRkZW5TaXplc1swXTtcbiAgICBrSGlkZGVuU2l6ZSA9IGF0dHJpYnV0ZXMucWt2SGlkZGVuU2l6ZXNbMV07XG4gICAgdkhpZGRlblNpemUgPSBhdHRyaWJ1dGVzLnFrdkhpZGRlblNpemVzWzJdO1xuICB9XG5cbiAgY29uc3Qga3ZTZXF1ZW5jZUxlbmd0aCA9IHNlcXVlbmNlTGVuZ3RoO1xuXG4gIGlmIChxSGlkZGVuU2l6ZSAhPT0ga0hpZGRlblNpemUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Frdl9oaWRkZW5fc2l6ZXMgZmlyc3QgZWxlbWVudCBzaG91bGQgYmUgc2FtZSBhcyB0aGUgc2Vjb25kJyk7XG4gIH1cblxuICBpZiAoYmlhcy5kaW1zWzBdICE9PSBxSGlkZGVuU2l6ZSArIGtIaWRkZW5TaXplICsgdkhpZGRlblNpemUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwiYmlhc1wiIGRpbWVuc2lvbiAwIHNob3VsZCBoYXZlIHNhbWUgbGVuZ3RoIGFzIHN1bSBvZiBRL0svViBoaWRkZW4gc2l6ZXMnKTtcbiAgfVxuXG4gIGxldCBwYXN0U2VxdWVuY2VMZW5ndGggPSAwO1xuICBpZiAocGFzdCkge1xuICAgIGlmIChrSGlkZGVuU2l6ZSAhPT0gdkhpZGRlblNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0XCIgZXhwZWN0IGtfaGlkZGVuX3NpemUgPT0gdl9oaWRkZW5fc2l6ZScpO1xuICAgIH1cbiAgICBpZiAocGFzdC5kaW1zLmxlbmd0aCAhPT0gNSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3RcIiBtdXN0IGhhdmUgNSBkaW1lbnNpb25zJyk7XG4gICAgfVxuICAgIGlmIChwYXN0LmRpbXNbMF0gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0XCIgZmlyc3QgZGltZW5zaW9uIG11c3QgYmUgMicpO1xuICAgIH1cbiAgICBpZiAocGFzdC5kaW1zWzFdICE9PSBiYXRjaFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0XCIgc2Vjb25kIGRpbWVuc2lvbiBtdXN0IGJlIGJhdGNoX3NpemUnKTtcbiAgICB9XG4gICAgaWYgKHBhc3QuZGltc1syXSAhPT0gYXR0cmlidXRlcy5udW1IZWFkcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3RcIiB0aGlyZCBkaW1lbnNpb24gbXVzdCBiZSBudW1faGVhZHMnKTtcbiAgICB9XG4gICAgaWYgKHBhc3QuZGltc1s0XSAhPT0ga0hpZGRlblNpemUgLyBhdHRyaWJ1dGVzLm51bUhlYWRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicGFzdFwiIGZpZnRoIGRpbWVuc2lvbiBtdXN0IGJlIGtfaGlkZGVuX3NpemUgLyBudW1faGVhZHMnKTtcbiAgICB9XG5cbiAgICBpZiAoIWF0dHJpYnV0ZXMucGFzdFByZXNlbnRTaGFyZUJ1ZmZlcikge1xuICAgICAgcGFzdFNlcXVlbmNlTGVuZ3RoID0gcGFzdC5kaW1zWzNdO1xuICAgIH1cbiAgICAvLyBUT0RPOiBoYW5kbGUgcGFzdF9zZXFfbGVuXG4gIH1cblxuICBjb25zdCB0b3RhbFNlcXVlbmNlTGVuZ3RoID0ga3ZTZXF1ZW5jZUxlbmd0aCArIHBhc3RTZXF1ZW5jZUxlbmd0aDtcbiAgY29uc3QgbWF4U2VxdWVuY2VMZW5ndGggPSAtMTtcblxuICBjb25zdCBtYXNrVHlwZSA9IEF0dGVudGlvbk1hc2tUeXBlLm5vbmU7XG4gIGlmIChtYXNrSW5kZXgpIHtcbiAgICAvLyBtYXNrVHlwZSA9IEF0dGVudGlvbk1hc2tUeXBlLk1BU0tfVU5LTk9XTjtcbiAgICAvLyBUT0RPOiBoYW5kbGUgbWFza1xuICAgIHRocm93IG5ldyBFcnJvcignTWFzayBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cblxuICBpZiAocGFzdCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFzdCBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJhdGNoU2l6ZSxcbiAgICBzZXF1ZW5jZUxlbmd0aCxcbiAgICBwYXN0U2VxdWVuY2VMZW5ndGgsXG4gICAga3ZTZXF1ZW5jZUxlbmd0aCxcbiAgICB0b3RhbFNlcXVlbmNlTGVuZ3RoLFxuICAgIG1heFNlcXVlbmNlTGVuZ3RoLFxuICAgIGlucHV0SGlkZGVuU2l6ZSxcbiAgICBoaWRkZW5TaXplOiBxSGlkZGVuU2l6ZSxcbiAgICB2SGlkZGVuU2l6ZSxcbiAgICBoZWFkU2l6ZTogTWF0aC5mbG9vcihxSGlkZGVuU2l6ZSAvIGF0dHJpYnV0ZXMubnVtSGVhZHMpLFxuICAgIHZIZWFkU2l6ZTogTWF0aC5mbG9vcih2SGlkZGVuU2l6ZSAvIGF0dHJpYnV0ZXMubnVtSGVhZHMpLFxuICAgIG51bUhlYWRzOiBhdHRyaWJ1dGVzLm51bUhlYWRzLFxuICAgIGlzVW5pZGlyZWN0aW9uYWw6IGZhbHNlLFxuICAgIHBhc3RQcmVzZW50U2hhcmVCdWZmZXI6IGZhbHNlLFxuICAgIG1hc2tGaWx0ZXJWYWx1ZTogYXR0cmlidXRlcy5tYXNrRmlsdGVyVmFsdWUsXG4gICAgbWFza1R5cGUsXG4gICAgc2NhbGU6IGF0dHJpYnV0ZXMuc2NhbGUsXG4gICAgYnJvYWRjYXN0UmVzUG9zQmlhczogZmFsc2UsXG4gICAgcGFzc1Bhc3RJbkt2OiBmYWxzZSxcbiAgICBxa3ZGb3JtYXQ6IEF0dGVudGlvblFrdkZvcm1hdC5xa3ZCTlNILFxuICB9O1xufTtcblxuY29uc3QgY3JlYXRlSW5QbGFjZVNvZnRtYXhQcm9ncmFtSW5mbyA9IChfY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGlucHV0OiBUZW5zb3JWaWV3LCBuOiBudW1iZXIsIGQ6IG51bWJlcikgPT4ge1xuICBjb25zdCBjb21wb25lbnRzID0gZ2V0TWF4Q29tcG9uZW50cyhkKTtcbiAgbGV0IFdHID0gNjQ7XG4gIGNvbnN0IGRDb21wID0gZCAvIGNvbXBvbmVudHM7XG4gIGlmIChkQ29tcCA8IFdHKSB7XG4gICAgV0cgPSAxO1xuICB9IGVsc2UgaWYgKGRDb21wIC8gOCA8IDY0KSB7XG4gICAgV0cgPSBNYXRoLmNlaWwoZENvbXAgLyA4KTtcbiAgfVxuICBjb25zdCBlbGVtZW50c1BlclRocmVhZCA9IE1hdGguY2VpbChkIC8gY29tcG9uZW50cyAvIFdHKTtcbiAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgIHt0eXBlOiBpbnB1dC5kYXRhVHlwZSwgZGF0YTogMSAvIGR9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBkQ29tcH0sXG4gICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogZWxlbWVudHNQZXJUaHJlYWR9XG4gIF07XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0LmRhdGFUeXBlLCBjb21wb25lbnRzKTtcbiAgY29uc3QgZjMyVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoRGF0YVR5cGUuZmxvYXQsIGNvbXBvbmVudHMpO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgIGNvbnN0IGlucHV0SGVscGVyID0gb3V0cHV0VmFyaWFibGUoJ3gnLCBpbnB1dC5kYXRhVHlwZSwgaW5wdXQuZGltcywgY29tcG9uZW50cyk7XG4gICAgY29uc3QgZWxlbVZhbHVlVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoaW5wdXQuZGF0YVR5cGUpO1xuICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgIHtuYW1lOiAnZF9pbnYnLCB0eXBlOiBlbGVtVmFsdWVUeXBlIGFzIFVuaWZvcm1EYXRhRWxlbWVudFR5cGV9LCB7bmFtZTogJ2RfY29tcCcsIHR5cGU6ICd1MzInfSxcbiAgICAgIHtuYW1lOiAnZWxlbWVudHNfcGVyX3RocmVhZCcsIHR5cGU6ICd1MzInfVxuICAgIF07XG5cbiAgICByZXR1cm4gYFxuICB2YXI8d29ya2dyb3VwPiB0aHJlYWRfbWF4OiBhcnJheTxmMzIsICR7V0d9PjtcbiAgdmFyPHdvcmtncm91cD4gdGhyZWFkX3N1bTogYXJyYXk8ZjMyLCAke1dHfT47XG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXRIZWxwZXIpfVxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoW1xuICAgICAgV0csIDEsIDFcbiAgICBdKX1cbiAgICBsZXQgbG9jYWxfb2Zmc2V0ID0gbG9jYWxfaWR4ICogdW5pZm9ybXMuZWxlbWVudHNfcGVyX3RocmVhZDtcbiAgICBsZXQgb2Zmc2V0ID0gd29ya2dyb3VwX2lkLnggKiB1bmlmb3Jtcy5kX2NvbXAgKyBsb2NhbF9vZmZzZXQ7XG5cbiAgICB2YXIgdGhyZWFkX21heF92ZWN0b3IgPSAke2YzMlR5cGV9KC0zLjQwMjgyM2UrMzhmKTtcbiAgICBmb3IgKHZhciBpOiB1MzIgPSAwOyBpIDwgdW5pZm9ybXMuZWxlbWVudHNfcGVyX3RocmVhZCAmJiBpICsgbG9jYWxfb2Zmc2V0IDwgdW5pZm9ybXMuZF9jb21wOyBpKyspIHtcbiAgICAgIHRocmVhZF9tYXhfdmVjdG9yID0gbWF4KCR7ZjMyVHlwZX0oeFtvZmZzZXQgKyBpXSksIHRocmVhZF9tYXhfdmVjdG9yKTtcbiAgICB9XG4gICAgdGhyZWFkX21heFtsb2NhbF9pZHhdID0gJHsoKCkgPT4ge1xuICAgICAgc3dpdGNoIChjb21wb25lbnRzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gJ3RocmVhZF9tYXhfdmVjdG9yJztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiAnbWF4KHRocmVhZF9tYXhfdmVjdG9yLngsIHRocmVhZF9tYXhfdmVjdG9yLnkpJztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiAnbWF4KG1heCh0aHJlYWRfbWF4X3ZlY3Rvci54LCB0aHJlYWRfbWF4X3ZlY3Rvci55KSwgbWF4KHRocmVhZF9tYXhfdmVjdG9yLnosIHRocmVhZF9tYXhfdmVjdG9yLncpKSc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb21wb25lbnRzOiAke2NvbXBvbmVudHN9YCk7XG4gICAgICB9XG4gICAgfSkoKX07XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgdmFyIG1heF92YWx1ZSA9ICBmMzIoLTMuNDAyODIzZSszOGYpO1xuICAgIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7V0d9OyBpKyspIHtcbiAgICAgIG1heF92YWx1ZSA9IG1heCh0aHJlYWRfbWF4W2ldLCBtYXhfdmFsdWUpO1xuICAgIH1cblxuICAgIHZhciBzdW1fdmVjdG9yID0gJHtmMzJUeXBlfSgwKTtcbiAgICBmb3IgKHZhciBpOiB1MzIgPSAwOyBpIDwgdW5pZm9ybXMuZWxlbWVudHNfcGVyX3RocmVhZCAmJiBpICsgbG9jYWxfb2Zmc2V0IDwgdW5pZm9ybXMuZF9jb21wOyBpKyspIHtcbiAgICAgIHN1bV92ZWN0b3IgKz0gZXhwKCR7ZjMyVHlwZX0oeFtvZmZzZXQgKyBpXSkgLSBtYXhfdmFsdWUpO1xuICAgIH1cbiAgICB0aHJlYWRfc3VtW2xvY2FsX2lkeF0gPSAkeygoKSA9PiB7XG4gICAgICBzd2l0Y2ggKGNvbXBvbmVudHMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAnc3VtX3ZlY3Rvcic7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gJ3N1bV92ZWN0b3IueCArIHN1bV92ZWN0b3IueSc7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gJ3N1bV92ZWN0b3IueCArIHN1bV92ZWN0b3IueSArIHN1bV92ZWN0b3IueiArIHN1bV92ZWN0b3Iudyc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb21wb25lbnRzOiAke2NvbXBvbmVudHN9YCk7XG4gICAgICB9XG4gICAgfSkoKX07XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgdmFyIHN1bTogZjMyID0gMDtcbiAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke1dHfTsgaSsrKSB7XG4gICAgICBzdW0gKz0gdGhyZWFkX3N1bVtpXTtcbiAgICB9XG5cbiAgICBpZiAoc3VtID09IDApIHtcbiAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCB1bmlmb3Jtcy5lbGVtZW50c19wZXJfdGhyZWFkICYmIGkgKyBsb2NhbF9vZmZzZXQgPCB1bmlmb3Jtcy5kX2NvbXA7IGkrKykge1xuICAgICAgICB4W29mZnNldCArIGldID0gJHtpbnB1dEhlbHBlci50eXBlLnZhbHVlfSh1bmlmb3Jtcy5kX2ludik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCB1bmlmb3Jtcy5lbGVtZW50c19wZXJfdGhyZWFkICYmIGkgKyBsb2NhbF9vZmZzZXQgPCB1bmlmb3Jtcy5kX2NvbXA7IGkrKykge1xuICAgICAgICB2YXIgZjMyaW5wdXQgPSAke2YzMlR5cGV9KHhbb2Zmc2V0ICsgaV0pO1xuICAgICAgICB4W29mZnNldCArIGldID0gJHtpbnB1dEhlbHBlci50eXBlLnZhbHVlfShleHAoZjMyaW5wdXQgLSBtYXhfdmFsdWUpIC8gc3VtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1gO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0F0dGVudGlvblByb2JzU29mdG1heCcsXG4gICAgc2hhZGVyQ2FjaGU6IHtoaW50OiBgJHtXR307JHtkYXRhVHlwZX07JHtjb21wb25lbnRzfWB9LFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe291dHB1dHM6IFtdLCBkaXNwYXRjaEdyb3VwOiB7eDogbn0sIHByb2dyYW1Vbmlmb3Jtc30pLFxuICB9O1xufTtcblxuY29uc3QgY3JlYXRlQXR0ZW50aW9uUHJvYnNQcm9ncmFtSW5mbyA9XG4gICAgKF9jb250ZXh0OiBDb21wdXRlQ29udGV4dCwgcTogVGVuc29yVmlldywga2V5OiBUZW5zb3JWaWV3LCByZWxhdGl2ZVBvc2l0aW9uQmlhczogVGVuc29yVmlld3x1bmRlZmluZWQsXG4gICAgIHBhcmFtZXRlcnM6IEF0dGVudGlvblBhcmFtZXRlcnMsIGF0dHJpYnV0ZXM6IEF0dGVudGlvbkF0dHJzLCBwYXN0U2VxdWVuY2VMZW5ndGg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdG90YWxTZXF1ZW5jZUxlbmd0aCA9IHBhc3RTZXF1ZW5jZUxlbmd0aCArIHBhcmFtZXRlcnMua3ZTZXF1ZW5jZUxlbmd0aDtcbiAgICAgIGNvbnN0IHByb2JzU2hhcGUgPSBbcGFyYW1ldGVycy5iYXRjaFNpemUsIHBhcmFtZXRlcnMubnVtSGVhZHMsIHBhcmFtZXRlcnMuc2VxdWVuY2VMZW5ndGgsIHRvdGFsU2VxdWVuY2VMZW5ndGhdO1xuXG4gICAgICAvLyBUT0RPOiBoYW5kbGUgbWFza1xuXG4gICAgICBjb25zdCBhbHBoYSA9IGF0dHJpYnV0ZXMuc2NhbGUgPT09IDAgPyAxLjAgLyBNYXRoLnNxcnQocGFyYW1ldGVycy5oZWFkU2l6ZSkgOiBhdHRyaWJ1dGVzLnNjYWxlO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMocGFyYW1ldGVycy5oZWFkU2l6ZSk7XG4gICAgICBjb25zdCB2ZWN0b3JpemVkSGVhZFNpemUgPSBwYXJhbWV0ZXJzLmhlYWRTaXplIC8gY29tcG9uZW50cztcbiAgICAgIGNvbnN0IFRJTEVfU0laRSA9IDEyO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSB7XG4gICAgICAgIHg6IE1hdGguY2VpbCh0b3RhbFNlcXVlbmNlTGVuZ3RoIC8gVElMRV9TSVpFKSxcbiAgICAgICAgeTogTWF0aC5jZWlsKHBhcmFtZXRlcnMuc2VxdWVuY2VMZW5ndGggLyBUSUxFX1NJWkUpLFxuICAgICAgICB6OiBwYXJhbWV0ZXJzLmJhdGNoU2l6ZSAqIHBhcmFtZXRlcnMubnVtSGVhZHNcbiAgICAgIH07XG4gICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPSBbXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHBhcmFtZXRlcnMuc2VxdWVuY2VMZW5ndGh9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiB2ZWN0b3JpemVkSGVhZFNpemV9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiB0b3RhbFNlcXVlbmNlTGVuZ3RofSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGFyYW1ldGVycy5udW1IZWFkc30sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYWxwaGF9XG4gICAgICBdO1xuXG4gICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llczogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXSA9IFsndHlwZScsICd0eXBlJ107XG4gICAgICBpZiAocmVsYXRpdmVQb3NpdGlvbkJpYXMpIHtcbiAgICAgICAgaW5wdXREZXBlbmRlbmNpZXMucHVzaCgncmFuaycpO1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhyZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCBxSW5wdXQgPSBpbnB1dFZhcmlhYmxlKCdxJywgcS5kYXRhVHlwZSwgcS5kaW1zLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3Qga0lucHV0ID0gaW5wdXRWYXJpYWJsZSgna2V5Jywga2V5LmRhdGFUeXBlLCBrZXkuZGltcywgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFycyA9IFtxSW5wdXQsIGtJbnB1dF07XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUG9zaXRpb25CaWFzSW5wdXQgPSByZWxhdGl2ZVBvc2l0aW9uQmlhcyA/XG4gICAgICAgICAgICBpbnB1dFZhcmlhYmxlKCdyZWxhdGl2ZV9wb3NpdGlvbl9iaWFzJywgcmVsYXRpdmVQb3NpdGlvbkJpYXMuZGF0YVR5cGUsIHJlbGF0aXZlUG9zaXRpb25CaWFzLmRpbXMubGVuZ3RoKSA6XG4gICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChyZWxhdGl2ZVBvc2l0aW9uQmlhc0lucHV0KSB7XG4gICAgICAgICAgaW5wdXRWYXJzLnB1c2gocmVsYXRpdmVQb3NpdGlvbkJpYXNJbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIHEuZGF0YVR5cGUsIHByb2JzU2hhcGUpO1xuICAgICAgICAvLyBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZShxLmRhdGFUeXBlKTtcbiAgICAgICAgY29uc3QgZjMyVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoRGF0YVR5cGUuZmxvYXQsIGNvbXBvbmVudHMpO1xuXG4gICAgICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgICAgICB7bmFtZTogJ00nLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnSycsIHR5cGU6ICd1MzInfSwge25hbWU6ICdOJywgdHlwZTogJ3UzMid9LFxuICAgICAgICAgIHtuYW1lOiAnbnVtX2hlYWRzJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ2FscGhhJywgdHlwZTogJ2YzMicgYXMgVW5pZm9ybURhdGFFbGVtZW50VHlwZX1cbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGBcbiAgY29uc3QgVElMRV9TSVpFID0gJHtUSUxFX1NJWkV9dTtcblxuICB2YXI8d29ya2dyb3VwPiB0aWxlUTogYXJyYXk8JHtxSW5wdXQudHlwZS5zdG9yYWdlfSwgJHtUSUxFX1NJWkUgKiBUSUxFX1NJWkV9PjtcbiAgdmFyPHdvcmtncm91cD4gdGlsZUs6IGFycmF5PCR7cUlucHV0LnR5cGUuc3RvcmFnZX0sICR7VElMRV9TSVpFICogVElMRV9TSVpFfT47XG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoLi4uaW5wdXRWYXJzLCBvdXRwdXQpfVxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoW1xuICAgICAgICAgIFRJTEVfU0laRSwgVElMRV9TSVpFLCAxXG4gICAgICAgIF0pfVxuICAgIC8vIHggaG9sZHMgdGhlIE4gYW5kIHkgaG9sZHMgdGhlIE1cbiAgICBsZXQgaGVhZElkeCA9IHdvcmtncm91cF9pZC56O1xuICAgIGxldCBtID0gd29ya2dyb3VwX2lkLnkgKiBUSUxFX1NJWkU7XG4gICAgbGV0IG4gPSB3b3JrZ3JvdXBfaWQueCAqIFRJTEVfU0laRTtcbiAgICBsZXQgcU9mZnNldCA9IHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy5LICogaGVhZElkeCArIG0gKiB1bmlmb3Jtcy5LO1xuICAgIGxldCBrT2Zmc2V0ID0gdW5pZm9ybXMuTiAqIHVuaWZvcm1zLksgKiBoZWFkSWR4ICsgbiAqIHVuaWZvcm1zLks7XG5cbiAgICB2YXIgdmFsdWUgPSAke2YzMlR5cGV9KDApO1xuICAgIGZvciAodmFyIHc6IHUzMiA9IDB1OyB3IDwgdW5pZm9ybXMuSzsgdyArPSBUSUxFX1NJWkUpIHtcbiAgICAgIGlmIChnbG9iYWxfaWQueSA8IHVuaWZvcm1zLk0gJiYgdyArIGxvY2FsX2lkLnggPCB1bmlmb3Jtcy5LKSB7XG4gICAgICAgIHRpbGVRW1RJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBsb2NhbF9pZC54XSA9IHFbcU9mZnNldCArIGxvY2FsX2lkLnkgKiB1bmlmb3Jtcy5LICsgdyArIGxvY2FsX2lkLnhdO1xuICAgICAgfVxuICAgICAgaWYgKG4gKyBsb2NhbF9pZC55IDwgdW5pZm9ybXMuTiAmJiB3ICsgbG9jYWxfaWQueCA8IHVuaWZvcm1zLkspIHtcbiAgICAgICAgdGlsZUtbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0ga2V5W2tPZmZzZXQgKyBsb2NhbF9pZC55ICogdW5pZm9ybXMuSyArIHcgKyBsb2NhbF9pZC54XTtcbiAgICAgIH1cbiAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAgICAgZm9yICh2YXIgazogdTMyID0gMHU7IGsgPCBUSUxFX1NJWkUgJiYgdytrIDwgdW5pZm9ybXMuSzsgaysrKSB7XG4gICAgICAgIHZhbHVlICs9ICR7ZjMyVHlwZX0odGlsZVFbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGtdICogdGlsZUtbVElMRV9TSVpFICogbG9jYWxfaWQueCArIGtdKTtcbiAgICAgIH1cblxuICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgIH1cblxuICAgIGxldCBoZWFkT2Zmc2V0ID0gaGVhZElkeCAqIHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy5OO1xuICAgIGlmIChnbG9iYWxfaWQueSA8IHVuaWZvcm1zLk0gJiYgZ2xvYmFsX2lkLnggPCB1bmlmb3Jtcy5OKSB7XG4gICAgICBsZXQgb3V0cHV0SWR4ID0gaGVhZE9mZnNldCArIGdsb2JhbF9pZC55ICogdW5pZm9ybXMuTiArIGdsb2JhbF9pZC54O1xuICAgICAgdmFyIHN1bTogZjMyID0gJHsoKCkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gJ3ZhbHVlJztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgcmV0dXJuICd2YWx1ZS54ICsgdmFsdWUueSc7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiAndmFsdWUueCArIHZhbHVlLnkgKyB2YWx1ZS56ICsgdmFsdWUudyc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbXBvbmVudHM6ICR7Y29tcG9uZW50c31gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCl9O1xuXG4gICR7KCgpID0+IHtcbiAgICAgICAgICBpZiAocmVsYXRpdmVQb3NpdGlvbkJpYXNJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgIGxldCBiYXRjaCA9IHdvcmtncm91cF9pZC56IC8gdW5pZm9ybXMubnVtX2hlYWRzO1xuICAgICAgbGV0IGhlYWQgPSB3b3JrZ3JvdXBfaWQueiAlIHVuaWZvcm1zLm51bV9oZWFkcztcbiAgICAgIHZhciBpbmRpY2VzID0gJHtyZWxhdGl2ZVBvc2l0aW9uQmlhc0lucHV0LnR5cGUuaW5kaWNlc30oYmF0Y2gsIGhlYWQsIGdsb2JhbF9pZC55LCBnbG9iYWxfaWQueCk7XG4gICAgICBvdXRwdXRbb3V0cHV0SWR4XSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KHN1bSAqIHVuaWZvcm1zLmFscGhhKSArICR7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQb3NpdGlvbkJpYXNJbnB1dC5nZXRCeUluZGljZXMoJ2luZGljZXMnKX07YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGBvdXRwdXRbb3V0cHV0SWR4XSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9IChzdW0gKiB1bmlmb3Jtcy5hbHBoYSk7YDtcbiAgICAgICAgfSkoKX1cbiAgICB9XG4gIH1gO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdBdHRlbnRpb25Qcm9icycsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7Y29tcG9uZW50c31gLCBpbnB1dERlcGVuZGVuY2llc30sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBwcm9ic1NoYXBlLCBkYXRhVHlwZTogcS5kYXRhVHlwZSwgZ3B1RGF0YVR5cGU6IEdwdURhdGFUeXBlLmRlZmF1bHR9XSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiBkaXNwYXRjaCxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH07XG4gICAgfTtcblxuXG5jb25zdCBjcmVhdGVWeEF0dGVudGlvblNjb3JlUHJvZ3JhbUluZm8gPVxuICAgIChfY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIHByb2JzOiBUZW5zb3JWaWV3LCB2OiBUZW5zb3JWaWV3LCBwYXJhbXM6IEF0dGVudGlvblBhcmFtZXRlcnMsXG4gICAgIHBhc3RTZXF1ZW5jZUxlbmd0aDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB0b3RhbFNlcXVlbmNlTGVuZ3RoID0gcGFzdFNlcXVlbmNlTGVuZ3RoICsgcGFyYW1zLmt2U2VxdWVuY2VMZW5ndGg7XG4gICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IFtwYXJhbXMuYmF0Y2hTaXplLCBwYXJhbXMuc2VxdWVuY2VMZW5ndGgsIHBhcmFtcy52SGlkZGVuU2l6ZV07XG4gICAgICBjb25zdCBUSUxFX1NJWkUgPSAxMjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0ge1xuICAgICAgICB4OiBNYXRoLmNlaWwocGFyYW1zLnZIZWFkU2l6ZSAvIFRJTEVfU0laRSksXG4gICAgICAgIHk6IE1hdGguY2VpbChwYXJhbXMuc2VxdWVuY2VMZW5ndGggLyBUSUxFX1NJWkUpLFxuICAgICAgICB6OiBwYXJhbXMuYmF0Y2hTaXplICogcGFyYW1zLm51bUhlYWRzXG4gICAgICB9O1xuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBwYXJhbXMuc2VxdWVuY2VMZW5ndGh9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiB0b3RhbFNlcXVlbmNlTGVuZ3RofSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGFyYW1zLnZIZWFkU2l6ZX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHBhcmFtcy5udW1IZWFkc30sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHBhcmFtcy52SGlkZGVuU2l6ZX1cbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWyd0eXBlJywgJ3R5cGUnXTtcbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9ic0hlbHBlciA9IGlucHV0VmFyaWFibGUoJ3Byb2JzJywgcHJvYnMuZGF0YVR5cGUsIHByb2JzLmRpbXMpO1xuICAgICAgICBjb25zdCB2SGVscGVyID0gaW5wdXRWYXJpYWJsZSgndicsIHYuZGF0YVR5cGUsIHYuZGltcyk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBwcm9icy5kYXRhVHlwZSwgb3V0cHV0U2hhcGUpO1xuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbXG4gICAgICAgICAge25hbWU6ICdNJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ0snLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnTicsIHR5cGU6ICd1MzInfSxcbiAgICAgICAgICB7bmFtZTogJ251bV9oZWFkcycsIHR5cGU6ICd1MzInfSwge25hbWU6ICd2X2hpZGRlbl9zaXplJywgdHlwZTogJ3UzMid9XG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiBgXG4gIGNvbnN0IFRJTEVfU0laRSA9ICR7VElMRV9TSVpFfXU7XG4gIHZhcjx3b3JrZ3JvdXA+IHRpbGVROiBhcnJheTwke3Byb2JzSGVscGVyLnR5cGUudmFsdWV9LCAke1RJTEVfU0laRSAqIFRJTEVfU0laRX0+O1xuICB2YXI8d29ya2dyb3VwPiB0aWxlSzogYXJyYXk8JHtwcm9ic0hlbHBlci50eXBlLnZhbHVlfSwgJHtUSUxFX1NJWkUgKiBUSUxFX1NJWkV9PjtcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyhwcm9ic0hlbHBlciwgdkhlbHBlciwgb3V0cHV0KX1cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFtcbiAgICAgICAgICBUSUxFX1NJWkUsIFRJTEVfU0laRSwgMVxuICAgICAgICBdKX1cbiAgIGxldCBoZWFkSWR4ID0gd29ya2dyb3VwX2lkLno7XG4gICBsZXQgbSA9IGdsb2JhbF9pZC55O1xuICAgbGV0IG4gPSBnbG9iYWxfaWQueDtcblxuICAgbGV0IG9mZnNldEEgPSBoZWFkSWR4ICogKHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy5LKSArIG0gKiB1bmlmb3Jtcy5LO1xuICAgbGV0IG9mZnNldEIgPSBoZWFkSWR4ICogKHVuaWZvcm1zLk4gKiB1bmlmb3Jtcy5LKSArIG47XG5cbiAgIHZhciB2YWx1ZSA9ICR7cHJvYnNIZWxwZXIudHlwZS5zdG9yYWdlfSgwKTtcbiAgIGZvciAodmFyIHc6IHUzMiA9IDB1OyB3IDwgdW5pZm9ybXMuSzsgdyArPSBUSUxFX1NJWkUpIHtcbiAgICAgaWYgKG0gPCB1bmlmb3Jtcy5NICYmIHcgKyBsb2NhbF9pZC54IDwgdW5pZm9ybXMuSykge1xuICAgICAgIHRpbGVRW1RJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBsb2NhbF9pZC54XSA9IHByb2JzW29mZnNldEEgKyB3ICsgbG9jYWxfaWQueF07XG4gICAgIH1cbiAgICAgaWYgKG4gPCB1bmlmb3Jtcy5OICYmIHcgKyBsb2NhbF9pZC55IDwgdW5pZm9ybXMuSykge1xuICAgICAgIHRpbGVLW1RJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBsb2NhbF9pZC54XSA9IHZbb2Zmc2V0QiArICh3ICsgbG9jYWxfaWQueSkgKiB1bmlmb3Jtcy5OXTtcbiAgICAgfVxuICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgIGZvciAodmFyIGs6IHUzMiA9IDB1OyBrIDwgVElMRV9TSVpFICYmIHcrayA8IHVuaWZvcm1zLks7IGsrKykge1xuICAgICAgIHZhbHVlICs9IHRpbGVRW1RJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBrXSAqIHRpbGVLW1RJTEVfU0laRSAqIGsgKyBsb2NhbF9pZC54XTtcbiAgICAgfVxuICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICB9XG5cbiAgIC8vIHdlIG5lZWQgdG8gdHJhbnNwb3NlIG91dHB1dCBmcm9tIEJOU0hfdiB0byBCU05EX3ZcbiAgIGxldCBiYXRjaElkeCA9IHdvcmtncm91cF9pZC56IC8gdW5pZm9ybXMubnVtX2hlYWRzO1xuICAgbGV0IGN1cnJlbnRCYXRjaEhlYWROdW1iZXIgPSB3b3JrZ3JvdXBfaWQueiAlIHVuaWZvcm1zLm51bV9oZWFkcztcbiAgIGlmIChtIDwgdW5pZm9ybXMuTSAmJiBuIDwgdW5pZm9ybXMuTikge1xuICAgICBsZXQgb3V0cHV0SWR4ID0gYmF0Y2hJZHggKiB1bmlmb3Jtcy5NICogdW5pZm9ybXMudl9oaWRkZW5fc2l6ZSArIG0gKiB1bmlmb3Jtcy52X2hpZGRlbl9zaXplXG4gICAgICAgKyBjdXJyZW50QmF0Y2hIZWFkTnVtYmVyICogdW5pZm9ybXMuTiArIG47XG4gICAgIG91dHB1dFtvdXRwdXRJZHhdID0gdmFsdWU7XG4gICB9XG4gIH1gO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0F0dGVudGlvblNjb3JlJyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHtpbnB1dERlcGVuZGVuY2llc30sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IHByb2JzLmRhdGFUeXBlLCBncHVEYXRhVHlwZTogR3B1RGF0YVR5cGUuZGVmYXVsdH1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IGRpc3BhdGNoLFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgfTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgYXBwbHlBdHRlbnRpb24gPVxuICAgIChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgcTogVGVuc29yVmlldywgazogVGVuc29yVmlldywgdjogVGVuc29yVmlldywgX21hc2tJbmRleDogVGVuc29yVmlld3x1bmRlZmluZWQsXG4gICAgIF9wYXN0OiBUZW5zb3JWaWV3fHVuZGVmaW5lZCwgcGFzdEtleTogVGVuc29yVmlld3x1bmRlZmluZWQsIHBhc3RWYWx1ZTogVGVuc29yVmlld3x1bmRlZmluZWQsXG4gICAgIHJlbGF0aXZlUG9zaXRpb25CaWFzOiBUZW5zb3JWaWV3fHVuZGVmaW5lZCwgcGFyYW1ldGVyczogQXR0ZW50aW9uUGFyYW1ldGVycywgYXR0cmlidXRlczogQXR0ZW50aW9uQXR0cnMpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dFByZXNlbnRLZXkgPSBjb250ZXh0Lm91dHB1dENvdW50ID4gMTtcbiAgICAgIGNvbnN0IG91dHB1dFByZXNlbnRWYWx1ZSA9IGNvbnRleHQub3V0cHV0Q291bnQgPiAyO1xuICAgICAgY29uc3QgcGFzdFNlcXVlbmNlTGVuZ3RoID0gKG91dHB1dFByZXNlbnRLZXkgJiYgb3V0cHV0UHJlc2VudFZhbHVlKSA/IHBhcmFtZXRlcnMucGFzdFNlcXVlbmNlTGVuZ3RoIDogMDtcbiAgICAgIGNvbnN0IHRvdGFsU2VxdWVuY2VMZW5ndGggPSBwYXN0U2VxdWVuY2VMZW5ndGggKyBwYXJhbWV0ZXJzLmt2U2VxdWVuY2VMZW5ndGg7XG4gICAgICAvLyBDb25jYXRpbmF0ZSBwYXN0S2V5IGFuZCBLIHRvIHByb2R1Y2UgcHJlc2VudEtleS5cbiAgICAgIGNvbnN0IHByZXNlbnRLZXlTaGFwZSA9IFtwYXJhbWV0ZXJzLmJhdGNoU2l6ZSwgcGFyYW1ldGVycy5udW1IZWFkcywgdG90YWxTZXF1ZW5jZUxlbmd0aCwgcGFyYW1ldGVycy5oZWFkU2l6ZV07XG4gICAgICBjb25zdCBjb25jYXRLZXlJbnB1dHMgPSBwYXN0S2V5ID8gW3Bhc3RLZXksIGtdIDogW2tdO1xuICAgICAgY29uc3Qga2V5ID0gb3V0cHV0UHJlc2VudEtleSA/IGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ29uY2F0UHJvZ3JhbUluZm8oY29uY2F0S2V5SW5wdXRzLCAyLCBwcmVzZW50S2V5U2hhcGUsIGsuZGF0YVR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW5wdXRzOiBjb25jYXRLZXlJbnB1dHMsIG91dHB1dHM6IFsxXX0pWzBdIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrO1xuXG4gICAgICAvLyBDb25jYXRpbmF0ZSBwYXN0VmFsdWUgYW5kIFYgdG8gcHJvZHVjZSBwcmVzZW50VmFsdWUuXG4gICAgICBjb25zdCBwcmVzZW50VmFsdWVTaGFwZSA9IFtwYXJhbWV0ZXJzLmJhdGNoU2l6ZSwgcGFyYW1ldGVycy5udW1IZWFkcywgdG90YWxTZXF1ZW5jZUxlbmd0aCwgcGFyYW1ldGVycy5oZWFkU2l6ZV07XG4gICAgICBjb25zdCBjb25jYXRWYWx1ZUlucHV0cyA9IHBhc3RWYWx1ZSA/IFtwYXN0VmFsdWUsIHZdIDogW3ZdO1xuICAgICAgY29uc3QgdmFsdWUgPSBvdXRwdXRQcmVzZW50VmFsdWUgP1xuICAgICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgICAgY3JlYXRlQ29uY2F0UHJvZ3JhbUluZm8oY29uY2F0VmFsdWVJbnB1dHMsIDIsIHByZXNlbnRWYWx1ZVNoYXBlLCB2LmRhdGFUeXBlKSxcbiAgICAgICAgICAgICAge2lucHV0czogY29uY2F0VmFsdWVJbnB1dHMsIG91dHB1dHM6IFsyXX0pWzBdIDpcbiAgICAgICAgICB2O1xuICAgICAgY29uc3QgaW5wdXRzSyA9IFtxLCBrZXldO1xuICAgICAgaWYgKHJlbGF0aXZlUG9zaXRpb25CaWFzKSB7XG4gICAgICAgIGlucHV0c0sucHVzaChyZWxhdGl2ZVBvc2l0aW9uQmlhcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJ1biBBdHRlbnRpb25Qcm9ic1xuICAgICAgY29uc3QgcHJvYnMgPSBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlQXR0ZW50aW9uUHJvYnNQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgICAgY29udGV4dCwgcSwga2V5LCByZWxhdGl2ZVBvc2l0aW9uQmlhcywgcGFyYW1ldGVycywgYXR0cmlidXRlcywgcGFzdFNlcXVlbmNlTGVuZ3RoKSxcbiAgICAgICAgICB7aW5wdXRzOiBpbnB1dHNLLCBvdXRwdXRzOiBbLTFdfSlbMF07XG5cbiAgICAgIC8vIFJ1biBTb2Z0bWF4XG4gICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlSW5QbGFjZVNvZnRtYXhQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgICAgY29udGV4dCwgcHJvYnMsIHBhcmFtZXRlcnMuYmF0Y2hTaXplICogcGFyYW1ldGVycy5udW1IZWFkcyAqIHBhcmFtZXRlcnMuc2VxdWVuY2VMZW5ndGgsXG4gICAgICAgICAgICAgIHRvdGFsU2VxdWVuY2VMZW5ndGgpLFxuICAgICAgICAgIHtpbnB1dHM6IFtwcm9ic10sIG91dHB1dHM6IFtdfSk7XG5cbiAgICAgIC8vIFJ1biBBdHRyaW9uU2NvcmVcbiAgICAgIGNvbnN0IGlucHV0c1YgPSBbcHJvYnMsIHZhbHVlXTtcbiAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVWeEF0dGVudGlvblNjb3JlUHJvZ3JhbUluZm8oY29udGV4dCwgcHJvYnMsIHZhbHVlLCBwYXJhbWV0ZXJzLCBwYXN0U2VxdWVuY2VMZW5ndGgpLFxuICAgICAgICAgIHtpbnB1dHM6IGlucHV0c1YsIG91dHB1dHM6IFswXX0pO1xuICAgIH07XG5cbmNvbnN0IHByZXBhcmUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIHBhcmFtZXRlcnM6IEF0dGVudGlvblBhcmFtZXRlcnMpID0+IHtcbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBbXG4gICAgcGFyYW1ldGVycy5iYXRjaFNpemUsXG4gICAgcGFyYW1ldGVycy5udW1IZWFkcyxcbiAgICBwYXJhbWV0ZXJzLnNlcXVlbmNlTGVuZ3RoLFxuICAgIHBhcmFtZXRlcnMuaGVhZFNpemUsXG4gIF07XG4gIGNvbnN0IE0gPSBwYXJhbWV0ZXJzLnNlcXVlbmNlTGVuZ3RoO1xuICBjb25zdCBLID0gcGFyYW1ldGVycy5pbnB1dEhpZGRlblNpemU7XG4gIGNvbnN0IE4gPSBwYXJhbWV0ZXJzLmhlYWRTaXplO1xuICBjb25zdCBUSUxFX1NJWkUgPSAxMjtcbiAgY29uc3QgZGlzcGF0Y2ggPSB7XG4gICAgeDogTWF0aC5jZWlsKHBhcmFtZXRlcnMuaGVhZFNpemUgLyBUSUxFX1NJWkUpLFxuICAgIHk6IE1hdGguY2VpbChwYXJhbWV0ZXJzLnNlcXVlbmNlTGVuZ3RoIC8gVElMRV9TSVpFKSxcbiAgICB6OiBwYXJhbWV0ZXJzLmJhdGNoU2l6ZSAqIHBhcmFtZXRlcnMubnVtSGVhZHNcbiAgfTtcbiAgY29uc3QgaW5wdXRzID0gW2NvbnRleHQuaW5wdXRzWzBdLCBjb250ZXh0LmlucHV0c1sxXSwgY29udGV4dC5pbnB1dHNbMl1dO1xuICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPSBbXG4gICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogTX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IEt9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBOfSxcbiAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBwYXJhbWV0ZXJzLm51bUhlYWRzfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGFyYW1ldGVycy5oZWFkU2l6ZX0sXG4gICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGFyYW1ldGVycy5oaWRkZW5TaXplfSxcbiAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBwYXJhbWV0ZXJzLmhpZGRlblNpemUgKyBwYXJhbWV0ZXJzLmhpZGRlblNpemUgKyBwYXJhbWV0ZXJzLnZIaWRkZW5TaXplfVxuICBdO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgIGNvbnN0IG91dHB1dFEgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0X3EnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlKTtcbiAgICBjb25zdCBvdXRwdXRLID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dF9rJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSk7XG4gICAgY29uc3Qgb3V0cHV0ViA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXRfdicsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUpO1xuICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zKTtcbiAgICBjb25zdCB3ZWlnaHQgPSBpbnB1dFZhcmlhYmxlKCd3ZWlnaHQnLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zKTtcbiAgICBjb25zdCBiaWFzID0gaW5wdXRWYXJpYWJsZSgnYmlhcycsIGlucHV0c1syXS5kYXRhVHlwZSwgaW5wdXRzWzJdLmRpbXMpO1xuICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXQudHlwZS5zdG9yYWdlO1xuXG4gICAgY29uc3QgdW5pZm9ybXM6IFVuaWZvcm1zQXJyYXlUeXBlID0gW1xuICAgICAge25hbWU6ICdNJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ0snLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnTicsIHR5cGU6ICd1MzInfSwge25hbWU6ICdudW1faGVhZHMnLCB0eXBlOiAndTMyJ30sXG4gICAgICB7bmFtZTogJ2hlYWRfc2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdoaWRkZW5fc2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdsZGInLCB0eXBlOiAndTMyJ31cbiAgICBdO1xuICAgIHJldHVybiBgXG4gIGNvbnN0IFRJTEVfU0laRSA9ICR7VElMRV9TSVpFfXU7XG4gIHZhcjx3b3JrZ3JvdXA+IHRpbGVJbnB1dDogYXJyYXk8JHtkYXRhVHlwZX0sICR7VElMRV9TSVpFICogVElMRV9TSVpFfT47XG4gIHZhcjx3b3JrZ3JvdXA+IHRpbGVXZWlnaHRROiBhcnJheTwke2RhdGFUeXBlfSwgJHtUSUxFX1NJWkUgKiBUSUxFX1NJWkV9PjtcbiAgdmFyPHdvcmtncm91cD4gdGlsZVdlaWdodEs6IGFycmF5PCR7ZGF0YVR5cGV9LCAke1RJTEVfU0laRSAqIFRJTEVfU0laRX0+O1xuICB2YXI8d29ya2dyb3VwPiB0aWxlV2VpZ2h0VjogYXJyYXk8JHtkYXRhVHlwZX0sICR7VElMRV9TSVpFICogVElMRV9TSVpFfT47XG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIHdlaWdodCwgYmlhcywgb3V0cHV0USwgb3V0cHV0Sywgb3V0cHV0Vil9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydChbXG4gICAgICBUSUxFX1NJWkUsIFRJTEVfU0laRSwgMVxuICAgIF0pfVxuICAgIGxldCBiYXRjaEluZGV4ID0gd29ya2dyb3VwX2lkLnogLyB1bmlmb3Jtcy5udW1faGVhZHM7XG4gICAgbGV0IGhlYWROdW1iZXIgPSB3b3JrZ3JvdXBfaWQueiAlIHVuaWZvcm1zLm51bV9oZWFkcztcbiAgICBsZXQgbSA9IGdsb2JhbF9pZC55O1xuICAgIGxldCBuID0gZ2xvYmFsX2lkLng7XG5cbiAgICBsZXQgaW5wdXRPZmZzZXQgPSBiYXRjaEluZGV4ICogKHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy5LKSArIG0gKiB1bmlmb3Jtcy5LO1xuICAgIGxldCBiaWFzT2Zmc2V0USA9IGhlYWROdW1iZXIgKiB1bmlmb3Jtcy5oZWFkX3NpemU7XG4gICAgbGV0IGJpYXNPZmZzZXRLID0gdW5pZm9ybXMuaGlkZGVuX3NpemUgKyBiaWFzT2Zmc2V0UTtcbiAgICBsZXQgYmlhc09mZnNldFYgPSB1bmlmb3Jtcy5oaWRkZW5fc2l6ZSArIGJpYXNPZmZzZXRLO1xuXG4gICAgdmFyIHZhbHVlUSA9ICR7ZGF0YVR5cGV9KDApO1xuICAgIHZhciB2YWx1ZUsgPSAke2RhdGFUeXBlfSgwKTtcbiAgICB2YXIgdmFsdWVWID0gJHtkYXRhVHlwZX0oMCk7XG4gICAgZm9yICh2YXIgdzogdTMyID0gMHU7IHcgPCB1bmlmb3Jtcy5LOyB3ICs9IFRJTEVfU0laRSkge1xuICAgICAgaWYgKG0gPCB1bmlmb3Jtcy5NICYmIHcgKyBsb2NhbF9pZC54IDwgdW5pZm9ybXMuSykge1xuICAgICAgICB0aWxlSW5wdXRbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0gaW5wdXRbaW5wdXRPZmZzZXQgKyB3ICsgbG9jYWxfaWQueF07XG4gICAgICB9XG4gICAgICBpZiAobiA8IHVuaWZvcm1zLk4gJiYgdyArIGxvY2FsX2lkLnkgPCB1bmlmb3Jtcy5LKSB7XG4gICAgICAgIGxldCBvZmZzZXQgPSBuICsgKHcgKyBsb2NhbF9pZC55KSAqIHVuaWZvcm1zLmxkYjtcbiAgICAgICAgdGlsZVdlaWdodFFbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0gd2VpZ2h0W2JpYXNPZmZzZXRRICsgb2Zmc2V0XTtcbiAgICAgICAgdGlsZVdlaWdodEtbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0gd2VpZ2h0W2JpYXNPZmZzZXRLICsgb2Zmc2V0XTtcbiAgICAgICAgdGlsZVdlaWdodFZbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0gd2VpZ2h0W2JpYXNPZmZzZXRWICsgb2Zmc2V0XTtcbiAgICAgIH1cbiAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcbiAgICAgIGZvciAodmFyIGs6IHUzMiA9IDB1OyBrPFRJTEVfU0laRSAmJiB3K2sgPCB1bmlmb3Jtcy5LOyBrKyspIHtcbiAgICAgICAgbGV0IGlucHV0VGlsZU9mZnNldCA9IFRJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBrO1xuICAgICAgICBsZXQgd2VpZ2h0VGlsZU9mZnNldCA9IFRJTEVfU0laRSAqIGsgKyBsb2NhbF9pZC54O1xuICAgICAgICB2YWx1ZVEgKz0gdGlsZUlucHV0W2lucHV0VGlsZU9mZnNldF0gKiB0aWxlV2VpZ2h0UVt3ZWlnaHRUaWxlT2Zmc2V0XTtcbiAgICAgICAgdmFsdWVLICs9IHRpbGVJbnB1dFtpbnB1dFRpbGVPZmZzZXRdICogdGlsZVdlaWdodEtbd2VpZ2h0VGlsZU9mZnNldF07XG4gICAgICAgIHZhbHVlViArPSB0aWxlSW5wdXRbaW5wdXRUaWxlT2Zmc2V0XSAqIHRpbGVXZWlnaHRWW3dlaWdodFRpbGVPZmZzZXRdO1xuICAgICAgfVxuXG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgfVxuXG4gICAgbGV0IGhlYWRPZmZzZXQgPSAobSAqIHVuaWZvcm1zLk4gKyBuKSAlIHVuaWZvcm1zLmhlYWRfc2l6ZTtcbiAgICB2YWx1ZVEgKz0gYmlhc1toZWFkT2Zmc2V0ICsgYmlhc09mZnNldFFdO1xuICAgIHZhbHVlSyArPSBiaWFzW2hlYWRPZmZzZXQgKyBiaWFzT2Zmc2V0S107XG4gICAgdmFsdWVWICs9IGJpYXNbaGVhZE9mZnNldCArIGJpYXNPZmZzZXRWXTtcblxuICAgIGxldCBvZmZzZXQgPSB3b3JrZ3JvdXBfaWQueiAqIHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy5OO1xuICAgIGlmIChtIDwgdW5pZm9ybXMuTSAmJiBuIDwgdW5pZm9ybXMuTikge1xuICAgICAgbGV0IG91dHB1dElkeCA9IG9mZnNldCArIG0gKiB1bmlmb3Jtcy5OICsgbjtcbiAgICAgIG91dHB1dF9xW291dHB1dElkeF0gPSB2YWx1ZVE7XG4gICAgICBvdXRwdXRfa1tvdXRwdXRJZHhdID0gdmFsdWVLO1xuICAgICAgb3V0cHV0X3Zbb3V0cHV0SWR4XSA9IHZhbHVlVjtcbiAgICB9XG4gIH1gO1xuICB9O1xuXG4gIHJldHVybiBjb250ZXh0LmNvbXB1dGUoXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBdHRlbnRpb25QcmVwYXJlJyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHtpbnB1dERlcGVuZGVuY2llczogWyd0eXBlJywgJ3R5cGUnLCAndHlwZSddfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICB7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSwgZ3B1RGF0YVR5cGU6IEdwdURhdGFUeXBlLmRlZmF1bHR9LFxuICAgICAgICAgICAge2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUsIGdwdURhdGFUeXBlOiBHcHVEYXRhVHlwZS5kZWZhdWx0fSxcbiAgICAgICAgICAgIHtkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlLCBncHVEYXRhVHlwZTogR3B1RGF0YVR5cGUuZGVmYXVsdH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiBkaXNwYXRjaCxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH0sXG4gICAgICB7aW5wdXRzLCBvdXRwdXRzOiBbLTEsIC0xLCAtMV19KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhdHRlbnRpb24gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IEF0dGVudGlvbkF0dHJzKTogdm9pZCA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IHZhbGlkYXRlQXR0ZW50aW9uSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcblxuICBjb25zdCBbcSwgaywgdl0gPSBwcmVwYXJlKGNvbnRleHQsIHBhcmFtcyk7XG5cbiAgcmV0dXJuIGFwcGx5QXR0ZW50aW9uKFxuICAgICAgY29udGV4dCwgcSwgaywgdiwgY29udGV4dC5pbnB1dHNbNF0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHQuaW5wdXRzWzVdLCBwYXJhbXMsIGF0dHJpYnV0ZXMpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtlbnZ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGdldE1heENvbXBvbmVudHMsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXJ9IGZyb20gJy4vY29tbW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXRjaE5vcm1BdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgZXBzaWxvbjogbnVtYmVyO1xuICByZWFkb25seSBtb21lbnR1bTogbnVtYmVyO1xuICByZWFkb25seSBzcGF0aWFsOiBib29sZWFuO1xuICByZWFkb25seSB0cmFpbmluZ01vZGU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZvcm1hdDogJ05IV0MnfCdOQ0hXJztcbiAgcmVhZG9ubHkgb3V0cHV0Q291bnQ6IG51bWJlcjtcbn1cblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEJhdGNoTm9ybUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gNSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmF0Y2hOb3JtYWxpemF0aW9uIHJlcXVpcmVzIDUgaW5wdXRzJyk7XG4gIH1cblxuICBjb25zdCBjaGVja1NoYXBlRXF1YWwgPSAoYWN0dWFsOiByZWFkb25seSBudW1iZXJbXSwgZXhwZWN0ZWQ6IHJlYWRvbmx5IG51bWJlcltdLCBtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByID0gZXhwZWN0ZWQubGVuZ3RoO1xuICAgIGlmIChyICE9PSBhY3R1YWwubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX06IG51bSBkaW1lbnNpb25zICE9ICR7cn1gKTtcbiAgICB9XG4gICAgZXhwZWN0ZWQuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgaWYgKHYgIT09IGFjdHVhbFtpXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX06IGRpbVske2l9XSBkbyBub3QgbWF0Y2hgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IHNoYXBlID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJyA/XG4gICAgICAgIChhdHRyaWJ1dGVzLnNwYXRpYWwgPyBpbnB1dHNbMF0uZGltcy5zbGljZSgtMSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzWzBdLmRpbXMuc2xpY2UoLTEpLmNvbmNhdChpbnB1dHNbMF0uZGltcy5zbGljZSgxLCBpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAxKSkpIDpcbiAgICAgICAgaW5wdXRzWzBdLmRpbXMuc2xpY2UoMSwgYXR0cmlidXRlcy5zcGF0aWFsID8gMiA6IHVuZGVmaW5lZCk7XG4gICAgY2hlY2tTaGFwZUVxdWFsKGlucHV0c1sxXS5kaW1zLCBzaGFwZSwgJ0ludmFsaWQgaW5wdXQgc2NhbGUnKTtcbiAgICBjaGVja1NoYXBlRXF1YWwoaW5wdXRzWzJdLmRpbXMsIHNoYXBlLCAnSW52YWxpZCBpbnB1dCBCJyk7XG4gICAgY2hlY2tTaGFwZUVxdWFsKGlucHV0c1szXS5kaW1zLCBzaGFwZSwgJ0ludmFsaWQgaW5wdXQgbWVhbicpO1xuICAgIGNoZWNrU2hhcGVFcXVhbChpbnB1dHNbNF0uZGltcywgc2hhcGUsICdJbnZhbGlkIGlucHV0IHZhcicpO1xuICB9IGVsc2Uge1xuICAgIGNoZWNrU2hhcGVFcXVhbChpbnB1dHNbMV0uZGltcywgWzFdLCAnSW52YWxpZCBpbnB1dCBzY2FsZScpO1xuICAgIGNoZWNrU2hhcGVFcXVhbChpbnB1dHNbMl0uZGltcywgWzFdLCAnSW52YWxpZCBpbnB1dCBCJyk7XG4gICAgY2hlY2tTaGFwZUVxdWFsKGlucHV0c1szXS5kaW1zLCBbMV0sICdJbnZhbGlkIGlucHV0IG1lYW4nKTtcbiAgICBjaGVja1NoYXBlRXF1YWwoaW5wdXRzWzRdLmRpbXMsIFsxXSwgJ0ludmFsaWQgaW5wdXQgdmFyJyk7XG4gIH1cbn07XG5cbmNvbnN0IGNyZWF0ZUJhdGNoTm9ybUluZmVyZW5jZVByb2dyYW1JbmZvID1cbiAgICAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEJhdGNoTm9ybUF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCB7ZXBzaWxvbiwgc3BhdGlhbCwgZm9ybWF0fSA9IGF0dHJpYnV0ZXM7XG4gICAgICBjb25zdCB5U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzcGF0aWFsID8gZ2V0TWF4Q29tcG9uZW50cyh5U2hhcGVbeVNoYXBlLmxlbmd0aCAtIDFdKSA6IDE7XG4gICAgICBjb25zdCBjQ29tcG9uZW50cyA9IGZvcm1hdCA9PT0gJ05IV0MnICYmIHlTaGFwZS5sZW5ndGggPiAxID8gY29tcG9uZW50cyA6IDE7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUoeVNoYXBlKSAvIGNvbXBvbmVudHM7XG4gICAgICAvLyBPbmx5IHN1cHBvcnQgdW5pZm9ybXMgZm9yIG9wc2V0IHZlcnNpb24gPj0gOSAoc3BhdGlhbCA9IHRydWUpLlxuICAgICAgY29uc3QgdXNlU2hhcGVzVW5pZm9ybXMgPSBzcGF0aWFsO1xuICAgICAgY29uc3Qgc2hhcGVPclJhbmsgPSB1c2VTaGFwZXNVbmlmb3JtcyA/IHlTaGFwZS5sZW5ndGggOiB5U2hhcGU7XG4gICAgICBjb25zdCB4ID0gaW5wdXRWYXJpYWJsZSgneCcsIGlucHV0c1swXS5kYXRhVHlwZSwgaW5wdXRzWzBdLmRpbXMsIGNvbXBvbmVudHMpO1xuICAgICAgY29uc3Qgc2NhbGUgPSBpbnB1dFZhcmlhYmxlKCdzY2FsZScsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMsIGNDb21wb25lbnRzKTtcbiAgICAgIGNvbnN0IGJpYXMgPSBpbnB1dFZhcmlhYmxlKCdiaWFzJywgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcywgY0NvbXBvbmVudHMpO1xuICAgICAgY29uc3QgaW5wdXRNZWFuID0gaW5wdXRWYXJpYWJsZSgnaW5wdXRNZWFuJywgaW5wdXRzWzNdLmRhdGFUeXBlLCBpbnB1dHNbM10uZGltcywgY0NvbXBvbmVudHMpO1xuICAgICAgY29uc3QgaW5wdXRWYXIgPSBpbnB1dFZhcmlhYmxlKCdpbnB1dFZhcicsIGlucHV0c1s0XS5kYXRhVHlwZSwgaW5wdXRzWzRdLmRpbXMsIGNDb21wb25lbnRzKTtcbiAgICAgIGNvbnN0IHkgPSBvdXRwdXRWYXJpYWJsZSgneScsIGlucHV0c1swXS5kYXRhVHlwZSwgc2hhcGVPclJhbmssIGNvbXBvbmVudHMpO1xuICAgICAgLy8gVE9ETzogc3VwcG9ydCBpbnB1dHMgd2l0aCBkaWZmZXJlbnQgZGF0YSB0eXBlLiBDdXJyZW50IHdlIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCBpbnB1dHMgaGF2ZSB0aGUgc2FtZSBkYXRhIHR5cGUuXG4gICAgICAvLyBPdGhlcndpc2UsIHRoZSBzaGFkZXIgY29tcGlsYXRpb24gd2lsbCBmYWlsLlxuICAgICAgY29uc3QgY2FsY0NPZmZzZXQgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgICAgbGV0IGNPZmZzZXQgPSAnJztcbiAgICAgICAgaWYgKHNwYXRpYWwpIHtcbiAgICAgICAgICBjT2Zmc2V0ID0gYGxldCBjT2Zmc2V0ID0gJHtcbiAgICAgICAgICAgICAgeVNoYXBlLmxlbmd0aCA9PT0gMSAgID8gJzB1JyA6XG4gICAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdOSFdDJyA/IGBvdXRwdXRJbmRpY2VzWyR7eVNoYXBlLmxlbmd0aCAtIDF9XSAvICR7Y29tcG9uZW50c31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dEluZGljZXNbMV0nfTtgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdOQ0hXJykge1xuICAgICAgICAgICAgY09mZnNldCA9IGBcbiAgICAgICAgICAgICR7eS5pbmRpY2VzU2V0KCdvdXRwdXRJbmRpY2VzJywgJzAnLCAnMCcpfVxuICAgICAgICAgICAgbGV0IGNPZmZzZXQgPSAke3kuaW5kaWNlc1RvT2Zmc2V0KCdvdXRwdXRJbmRpY2VzJyl9O2A7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBDIGNoYW5uZWwuXG4gICAgICAgICAgICBjT2Zmc2V0ID0gYHZhciBjSW5kaWNlcyA9ICR7c2NhbGUudHlwZS5pbmRpY2VzfSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgY0luZGljZXNbMF0gPSBvdXRwdXRJbmRpY2VzWyR7eVNoYXBlLmxlbmd0aCAtIDF9XTtgO1xuICAgICAgICAgICAgLy8gdXBkYXRlIEQxIHggLi4uIHggRG4gY2hhbm5lbHMuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNjYWxlLnJhbms7IGkrKykge1xuICAgICAgICAgICAgICBjT2Zmc2V0ICs9IGBjSW5kaWNlc1ske2l9XSA9IG91dHB1dEluZGljZXNbJHtpfV07YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNPZmZzZXQgKz0gYGxldCBjT2Zmc2V0ID0gJHtzY2FsZS5pbmRpY2VzVG9PZmZzZXQoJ2NJbmRpY2VzJyl9O2A7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjT2Zmc2V0O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEluZmVyZW5jZU1vZGVTaGFkZXJTb3VyY2UgPSAoaGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IGBcbiAgY29uc3QgZXBzaWxvbiA9ICR7ZXBzaWxvbn07XG4gICR7aGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgnb3V0cHV0U2l6ZScsICd1MzInKS5kZWNsYXJlVmFyaWFibGVzKHgsIHNjYWxlLCBiaWFzLCBpbnB1dE1lYW4sIGlucHV0VmFyLCB5KX1cbiAgJHtoZWxwZXIubWFpblN0YXJ0KCl9XG4gICR7aGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dFNpemUnKX1cbiAgICB2YXIgb3V0cHV0SW5kaWNlcyA9ICR7eS5vZmZzZXRUb0luZGljZXMoYGdsb2JhbF9pZHggKiAke2NvbXBvbmVudHN9YCl9O1xuICAgICR7Y2FsY0NPZmZzZXQoKX1cbiAgICBsZXQgc2NhbGUgPSAke3NjYWxlLmdldEJ5T2Zmc2V0KCdjT2Zmc2V0Jyl9O1xuICAgIGxldCBiaWFzID0gJHtiaWFzLmdldEJ5T2Zmc2V0KCdjT2Zmc2V0Jyl9O1xuICAgIGxldCBpbnB1dE1lYW4gPSAke2lucHV0TWVhbi5nZXRCeU9mZnNldCgnY09mZnNldCcpfTtcbiAgICBsZXQgaW5wdXRWYXIgPSAke2lucHV0VmFyLmdldEJ5T2Zmc2V0KCdjT2Zmc2V0Jyl9O1xuICAgIGxldCB4ID0gJHt4LmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4Jyl9O1xuICAgIGxldCB2YWx1ZSA9ICh4IC0gaW5wdXRNZWFuKSAqIGludmVyc2VTcXJ0KGlucHV0VmFyICsgZXBzaWxvbikgKiBzY2FsZSArIGJpYXM7XG4gICAgJHt5LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgJ3ZhbHVlJyl9XG4gIH1gO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0JhdGNoTm9ybWFsaXphdGlvbicsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgaGludDogYCR7YXR0cmlidXRlcy5lcHNpbG9ufV8ke2F0dHJpYnV0ZXMuZm9ybWF0fV8ke3NwYXRpYWx9XyR7Y29tcG9uZW50c31gLFxuICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzOiB1c2VTaGFwZXNVbmlmb3JtcyA/IFsncmFuaycsICd0eXBlJywgJ3R5cGUnLCAndHlwZScsICd0eXBlJ10gOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIGdldFNoYWRlclNvdXJjZTogZ2V0SW5mZXJlbmNlTW9kZVNoYWRlclNvdXJjZSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe2RpbXM6IGlucHV0c1swXS5kaW1zLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IHVzZVNoYXBlc1VuaWZvcm1zID9cbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LFxuICAgICAgICAgICAgICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKHlTaGFwZSksXG4gICAgICAgICAgICAgIF0gOlxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgcGFyc2VCYXRjaE5vcm1BdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQmF0Y2hOb3JtQXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleShhdHRyaWJ1dGVzIGFzIE9taXQ8QmF0Y2hOb3JtQXR0cmlidXRlcywga2V5b2YgQXR0cmlidXRlV2l0aENhY2hlS2V5Pik7XG5cbmV4cG9ydCBjb25zdCBiYXRjaE5vcm0gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCA9PiB7XG4gIGNvbnN0IHtpbnB1dHMsIG91dHB1dENvdW50fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzID0gcGFyc2VCYXRjaE5vcm1BdHRyaWJ1dGVzKHsuLi5hdHRyaWJ1dGVzLCBvdXRwdXRDb3VudH0pO1xuICBpZiAoZW52LndlYmdwdS52YWxpZGF0ZUlucHV0Q29udGVudCkge1xuICAgIHZhbGlkYXRlSW5wdXRzKGlucHV0cywgdXBkYXRlZEF0dHJpYnV0ZXMpO1xuICB9XG4gIGlmIChhdHRyaWJ1dGVzLnRyYWluaW5nTW9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmF0Y2hOb3JtYWxpemF0aW9uIHRyYWluaW5nTW9kZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4nKTtcbiAgfSBlbHNlIHtcbiAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQmF0Y2hOb3JtSW5mZXJlbmNlUHJvZ3JhbUluZm8oaW5wdXRzLCB1cGRhdGVkQXR0cmlidXRlcykpO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7aW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnB1dCBzaG91bGQgaGF2ZSAzIGRpbWVuc2lvbnMnKTtcbiAgfVxuXG4gIGlmICghWzMyMCwgNjQwLCAxMjgwXS5pbmNsdWRlcyhpbnB1dHNbMF0uZGltc1syXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ251bWJlciBvZiBjaGFubmVscyBzaG91bGQgYmUgMzIwLCA2NDAgb3IgMTI4MCcpO1xuICB9XG5cbiAgaWYgKGlucHV0c1sxXS5kaW1zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYmlhcyBpcyBleHBlY3RlZCB0byBoYXZlIDEgZGltZW5zaW9ucycpO1xuICB9XG5cbiAgaWYgKGlucHV0c1swXS5kaW1zWzJdICE9PSBpbnB1dHNbMV0uZGltc1swXSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbGFzdCBkaW1lbnNpb24gb2YgaW5wdXQgYW5kIGJpYXMgYXJlIG5vdCB0aGUgc2FtZScpO1xuICB9XG59O1xuXG5jb25zdCBjcmVhdGVCaWFzQWRkUHJvZ3JhbUluZm8gPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiBQcm9ncmFtSW5mbyA9PiB7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG5cbiAgY29uc3QgY2hhbm5lbHMgPSBpbnB1dHNbMF0uZGltc1syXTtcbiAgLy8gc2luY2UgY2hhbm5lbCBudW1iZXIgY2FuIGJlIG9ubHkgMzIwLzY0MC8xMjgwLCBpdCdzIGFsd2F5cyBkaXZpc2FibGUgYnkgNFxuICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gNDtcblxuICBjb25zdCBkYXRhVHlwZSA9IGlucHV0c1swXS5kYXRhVHlwZTtcbiAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKCdpbnB1dCcsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgNCk7XG4gIGNvbnN0IGJpYXMgPSBpbnB1dFZhcmlhYmxlKCdiaWFzJywgZGF0YVR5cGUsIFtjaGFubmVsc10sIDQpO1xuICBjb25zdCByZXNpZHVhbCA9IGlucHV0VmFyaWFibGUoJ3Jlc2lkdWFsJywgZGF0YVR5cGUsIG91dHB1dFNoYXBlLCA0KTtcbiAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgNCk7XG5cbiAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiBgXG4gIGNvbnN0IGNoYW5uZWxzID0gJHtjaGFubmVsc311IC8gNDtcbiAgJHtzaGFkZXJIZWxwZXIuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgYmlhcywgcmVzaWR1YWwsIG91dHB1dCl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhvdXRwdXRTaXplKX1cbiAgICBsZXQgdmFsdWUgPSAke2lucHV0LmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4Jyl9XG4gICAgICArICR7Ymlhcy5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCAlIGNoYW5uZWxzJyl9ICsgJHtyZXNpZHVhbC5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpfTtcbiAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsICd2YWx1ZScpfVxuICB9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdCaWFzQWRkJyxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfVxuICAgIH0pLFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBiaWFzQWRkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUJpYXNBZGRQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cykpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge01BWF9DTElQLCBNSU5fQ0xJUCwgU2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7QXR0cmlidXRlV2l0aENhY2hlS2V5LCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mb30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2lucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGV9IGZyb20gJy4vY29tbW9uJztcblxudHlwZSBCdWlsdGluRnVuY3Rpb25OYW1lID0gc3RyaW5nO1xudHlwZSBFbGVtZW50d2lzZUN1c3RvbUV4cHJlc3Npb24gPSAoZXhwcmVzc2lvbjogc3RyaW5nKSA9PiBzdHJpbmc7XG50eXBlIEVsZW1lbnR3aXNlRnVuY3Rpb25DYWxsID0gQnVpbHRpbkZ1bmN0aW9uTmFtZXxFbGVtZW50d2lzZUN1c3RvbUV4cHJlc3Npb247XG5cbmNvbnN0IGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbVNoYWRlciA9XG4gICAgKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyLCBkYXRhc2l6ZTogbnVtYmVyLCBpbnB1dERhdGFUeXBlOiBudW1iZXIsIG91dHB1dERhdGFUeXBlOiBudW1iZXIsXG4gICAgIGZ1bmNDYWxsOiBFbGVtZW50d2lzZUZ1bmN0aW9uQ2FsbCwgYWRkaXRpb25hbEltcGxlbWVudGF0aW9uPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IHZlY1NpemUgPSBNYXRoLmNlaWwoZGF0YXNpemUgLyA0KTtcblxuICAgICAgbGV0IGV4cHJlc3Npb24gPSAnJztcbiAgICAgIGlmICh0eXBlb2YgZnVuY0NhbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBgJHtmdW5jQ2FsbH0oYSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGZ1bmNDYWxsKCdhJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZSgnaW5wdXREYXRhJywgaW5wdXREYXRhVHlwZSwgW3ZlY1NpemVdLCA0KTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXREYXRhJywgb3V0cHV0RGF0YVR5cGUsIFt2ZWNTaXplXSwgNCk7XG5cbiAgICAgIHJldHVybiBgXG4gICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ3ZlY19zaXplJywgJ3UzMicpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIG91dHB1dCl9XG5cbiAgJHthZGRpdGlvbmFsSW1wbGVtZW50YXRpb24gPz8gJyd9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMudmVjX3NpemUnKX1cblxuICAgIGxldCBhID0gJHtpbnB1dC5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpfTtcbiAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIGV4cHJlc3Npb24pfVxuICB9YDtcbiAgICB9O1xuXG5jb25zdCBjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvID1cbiAgICAoaW5wdXQ6IFRlbnNvclZpZXcsIG5hbWU6IHN0cmluZywgZnVuY0NhbGw6IEVsZW1lbnR3aXNlRnVuY3Rpb25DYWxsLCBhZGRpdGlvbmFsSW1wbGVtZW50YXRpb24/OiBzdHJpbmcsXG4gICAgIGNhY2hlS2V5Pzogc3RyaW5nLCBvdXRwdXREYXRhVHlwZTogbnVtYmVyID0gaW5wdXQuZGF0YVR5cGUpOiBQcm9ncmFtSW5mbyA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIHNoYWRlckNhY2hlOiB7aGludDogY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3R5cGUnXX0sXG4gICAgICBnZXRTaGFkZXJTb3VyY2U6IHNoYWRlckhlbHBlciA9PiBjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1TaGFkZXIoXG4gICAgICAgICAgc2hhZGVySGVscGVyLCBTaGFwZVV0aWwuc2l6ZShpbnB1dC5kaW1zKSwgaW5wdXQuZGF0YVR5cGUsIG91dHB1dERhdGFUeXBlLCBmdW5jQ2FsbCwgYWRkaXRpb25hbEltcGxlbWVudGF0aW9uKSxcbiAgICAgIGdldFJ1bkRhdGE6IChpbnB1dFRlbnNvcnMpID0+ICh7XG4gICAgICAgIG91dHB1dHM6IFt7ZGltczogaW5wdXQuZGltcywgZGF0YVR5cGU6IG91dHB1dERhdGFUeXBlfV0sXG4gICAgICAgIGRpc3BhdGNoR3JvdXA6XG4gICAgICAgICAgICB7eDogTWF0aC5jZWlsKFNoYXBlVXRpbC5zaXplKGlucHV0VGVuc29yc1swXS5kaW1zKSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovIC8gNCAvKiB2ZWMgc2l6ZSAqLyl9LFxuICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IFtcbiAgICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUoaW5wdXQuZGltcykgLyA0KX0sXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgYWJzID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnQWJzJywgJ2FicycpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhY29zID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnQWNvcycsICdhY29zJykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFjb3NoID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnQWNvc2gnLCAnYWNvc2gnKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYXNpbiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0FzaW4nLCAnYXNpbicpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc2luaCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0FzaW5oJywgJ2FzaW5oJykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGF0YW4gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sICdBdGFuJywgJ2F0YW4nKSk7XG59O1xuZXhwb3J0IGNvbnN0IGF0YW5oID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnQXRhbmgnLCAnYXRhbmgnKSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENhc3RBdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgdG86IG51bWJlcjtcbiAgcmVhZG9ubHkgc2F0dXJhdGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VDYXN0QXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IENhc3RBdHRyaWJ1dGVzID0+XG4gICAgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KGF0dHJpYnV0ZXMgYXMge3RvOiBudW1iZXJ9KTtcblxuXG5leHBvcnQgY29uc3QgY2FzdCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogQ2FzdEF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgbGV0IGZ1bmM6IEVsZW1lbnR3aXNlRnVuY3Rpb25DYWxsO1xuICBzd2l0Y2ggKGF0dHJpYnV0ZXMudG8pIHtcbiAgICBjYXNlIERhdGFUeXBlLmZsb2F0MTY6XG4gICAgICBmdW5jID0gJ3ZlYzQ8ZjE2Pic7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERhdGFUeXBlLmZsb2F0OlxuICAgICAgZnVuYyA9ICd2ZWM0PGYzMj4nO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEYXRhVHlwZS51aW50MzI6XG4gICAgICBmdW5jID0gJ3ZlYzQ8dTMyPic7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERhdGFUeXBlLmludDMyOlxuICAgICAgZnVuYyA9ICd2ZWM0PGkzMj4nO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEYXRhVHlwZS5ib29sOlxuICAgICAgZnVuYyA9ICd2ZWM0PGJvb2w+JztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgbm90IHN1cHBvcnRlZCB0eXBlIChzcGVjaWZpZWQgaW4gYXR0cmlidXRlICd0bycgZnJvbSAnQ2FzdCcgb3BlcmF0b3IpOiAke2F0dHJpYnV0ZXMudG99YCk7XG4gIH1cbiAgY29udGV4dC5jb21wdXRlKFxuICAgICAgY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0Nhc3QnLCBmdW5jLCB1bmRlZmluZWQsIGF0dHJpYnV0ZXMuY2FjaGVLZXksIGF0dHJpYnV0ZXMudG8pKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcEF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBtaW46IG51bWJlcjtcbiAgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG59XG5cbmNvbnN0IGdlbmVyYXRlQ2xpcEF0dHJpYnV0ZXNGcm9tSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogQ2xpcEF0dHJpYnV0ZXMgPT4ge1xuICBjb25zdCBtaW4gPSAoaW5wdXRzLmxlbmd0aCA+PSAyICYmIGlucHV0c1sxXS5kYXRhICE9PSAwKSA/IGlucHV0c1sxXS5nZXRGbG9hdDMyQXJyYXkoKVswXSA6IE1JTl9DTElQO1xuICBjb25zdCBtYXggPSAoaW5wdXRzLmxlbmd0aCA+PSAzICYmIGlucHV0c1syXS5kYXRhICE9PSAwKSA/IGlucHV0c1syXS5nZXRGbG9hdDMyQXJyYXkoKVswXSA6IE1BWF9DTElQO1xuICByZXR1cm4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHttaW4sIG1heH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsaXAgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGNsaXBBdHRyaWJ1dGVzOiBDbGlwQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVzID0gY29udGV4dC5pbnB1dHMubGVuZ3RoID09PSAxID8gY2xpcEF0dHJpYnV0ZXMgOiBnZW5lcmF0ZUNsaXBBdHRyaWJ1dGVzRnJvbUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gIGNvbnRleHQuY29tcHV0ZShcbiAgICAgIGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oXG4gICAgICAgICAgY29udGV4dC5pbnB1dHNbMF0sICdDbGlwJywgYSA9PiBgY2xhbXAoJHthfSwgY2xpcF9taW5fLCBjbGlwX21heF8pYCwgYFxuICAgIGNvbnN0IGNsaXBfbWluXzogdmVjNDwke2RhdGFUeXBlfT4gPSB2ZWM0KCR7ZGF0YVR5cGV9KCR7YXR0cmlidXRlcy5taW59KSk7XG4gICAgY29uc3QgY2xpcF9tYXhfOiB2ZWM0PCR7ZGF0YVR5cGV9PiA9IHZlYzQoJHtkYXRhVHlwZX0oJHthdHRyaWJ1dGVzLm1heH0pKTtcbmAsXG4gICAgICAgICAgYXR0cmlidXRlcy5jYWNoZUtleSksXG4gICAgICB7aW5wdXRzOiBbMF19KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjZWlsID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnQ2VpbCcsICdjZWlsJykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcyA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0NvcycsICdjb3MnKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29zaCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0Nvc2gnLCAnY29zaCcpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxwaGFBdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgYWxwaGE6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlQWxwaGFBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQWxwaGFBdHRyaWJ1dGVzID0+XG4gICAgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KGF0dHJpYnV0ZXMgYXMge2FscGhhOiBudW1iZXJ9KTtcblxuZXhwb3J0IGNvbnN0IGVsdSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogQWxwaGFBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKFxuICAgICAgY29udGV4dC5pbnB1dHNbMF0sICdFbHUnLCBhID0+IGBlbHVfdmYzMigke2F9KWAsIGBcbiAgY29uc3QgZWx1X2FscGhhXyA9ICR7ZGF0YVR5cGV9KCR7YXR0cmlidXRlcy5hbHBoYX0pO1xuXG4gIGZuIGVsdV9mMzIoYTogJHtkYXRhVHlwZX0pIC0+ICR7ZGF0YVR5cGV9IHtcbiAgcmV0dXJuIHNlbGVjdCgoZXhwKGEpIC0gMS4wKSAqIGVsdV9hbHBoYV8sIGEsIGEgPj0gMC4wKTtcbiAgfVxuXG4gIGZuIGVsdV92ZjMyKHY6IHZlYzQ8JHtkYXRhVHlwZX0+KSAtPiB2ZWM0PCR7ZGF0YVR5cGV9PiB7XG4gIHJldHVybiB2ZWM0KGVsdV9mMzIodi54KSwgZWx1X2YzMih2LnkpLCBlbHVfZjMyKHYueiksIGVsdV9mMzIodi53KSk7XG4gIH1gLFxuICAgICAgYXR0cmlidXRlcy5jYWNoZUtleSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGVyZkltcGwgPSAodmFyVHlwZSA9ICdmMzInKSA9PiBgXG5jb25zdCByMDogJHt2YXJUeXBlfSA9IDAuMzI3NTkxMTtcbmNvbnN0IHIxOiAke3ZhclR5cGV9ID0gMC4yNTQ4Mjk1OTI7XG5jb25zdCByMjogJHt2YXJUeXBlfSA9IC0wLjI4NDQ5NjczNjtcbmNvbnN0IHIzOiAke3ZhclR5cGV9ID0gMS40MjE0MTM3NDE7XG5jb25zdCByNDogJHt2YXJUeXBlfSA9IC0xLjQ1MzE1MjAyNztcbmNvbnN0IHI1OiAke3ZhclR5cGV9ID0gMS4wNjE0MDU0Mjk7XG5cbmZuIGVyZl92ZjMyKHY6IHZlYzQ8JHt2YXJUeXBlfT4pIC0+IHZlYzQ8JHt2YXJUeXBlfT4ge1xuICBsZXQgYWJzdiA9IGFicyh2KTtcbiAgbGV0IHggPSAxLjAgLyAoMS4wICsgcjAgKiBhYnN2KTtcbiAgcmV0dXJuIHNpZ24odikgKiAoMS4wIC0gKCgoKHI1ICogeCArIHI0KSAqIHggKyByMykgKiB4ICsgcjIpICogeCArIHIxKSAqIHggKiBleHAoLWFic3YgKiBhYnN2KSk7XG59YDtcblxuZXhwb3J0IGNvbnN0IGVyZiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0VyZicsIGEgPT4gYGVyZl92ZjMyKCR7YX0pYCwgZXJmSW1wbChkYXRhVHlwZSkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHAgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sICdFeHAnLCAnZXhwJykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZsb29yID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnRmxvb3InLCAnZmxvb3InKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VsdSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhcbiAgICAgIGNvbnRleHQuaW5wdXRzWzBdLCAnR2VsdScsIGEgPT4gYDAuNSAqICR7YX0gKiAoMS4wICsgZXJmX3ZmMzIoJHthfSAqIDAuNzA3MTA2NzgxMTg2NTQ3NSkpYCwgZXJmSW1wbChkYXRhVHlwZSkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsZWFreVJlbHUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IEFscGhhQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhcbiAgICAgIGNvbnRleHQuaW5wdXRzWzBdLCAnTGVha3lSZWx1JywgYSA9PiBgc2VsZWN0KGxlYWt5X3JlbHVfYWxwaGFfICogJHthfSwgJHthfSwgJHthfSA+PSB2ZWM0PCR7ZGF0YVR5cGV9PigwLjApKWAsXG4gICAgICBgY29uc3QgbGVha3lfcmVsdV9hbHBoYV8gPSAke2RhdGFUeXBlfSgke2F0dHJpYnV0ZXMuYWxwaGF9KTtgLCBhdHRyaWJ1dGVzLmNhY2hlS2V5KSk7XG59O1xuXG5leHBvcnQgY29uc3Qgbm90ID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnTm90JywgYSA9PiBgISR7YX1gKSk7XG59O1xuXG5leHBvcnQgY29uc3QgbmVnID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnTmVnJywgYSA9PiBgLSR7YX1gKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVjaXByb2NhbCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ1JlY2lwcm9jYWwnLCBhID0+IGAxLjAvJHthfWApKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWx1ID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKFxuICAgICAgY29udGV4dC5pbnB1dHNbMF0sICdSZWx1JywgYSA9PiBgc2VsZWN0KHZlYzQ8JHtkYXRhVHlwZX0+KDAuMCksICR7YX0sICR7YX0gPiB2ZWM0PCR7ZGF0YVR5cGV9PigwLjApKWApKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWdtb2lkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnU2lnbW9pZCcsIGEgPT4gYCgxLjAgLyAoMS4wICsgZXhwKC0ke2F9KSkpYCkpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBIYXJkU2lnbW9pZEF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBhbHBoYTogbnVtYmVyO1xuICByZWFkb25seSBiZXRhOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZUhhcmRTaWdtb2lkQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEhhcmRTaWdtb2lkQXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleShhdHRyaWJ1dGVzIGFzIHtcbiAgICAgIGFscGhhOiBudW1iZXI7XG4gICAgICBiZXRhOiBudW1iZXI7XG4gICAgfSk7XG5cbmV4cG9ydCBjb25zdCBoYXJkU2lnbW9pZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogSGFyZFNpZ21vaWRBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKFxuICAgICAgY29udGV4dC5pbnB1dHNbMF0sICdIYXJkU2lnbW9pZCcsXG4gICAgICBhID0+IGBtYXgodmVjNDwke2RhdGFUeXBlfT4oMC4wKSwgbWluKHZlYzQ8JHtkYXRhVHlwZX0+KDEuMCksICR7YXR0cmlidXRlcy5hbHBoYX0gKiAke2F9ICsgdmVjNDwke2RhdGFUeXBlfT4oJHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLmJldGF9KSkpYCxcbiAgICAgIHVuZGVmaW5lZCwgYXR0cmlidXRlcy5jYWNoZUtleSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpbiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ1NpbicsICdzaW4nKSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2luaCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ1NpbmgnLCAnc2luaCcpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzcXJ0ID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnU3FydCcsICdzcXJ0JykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRhbiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ1RhbicsICd0YW4nKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdGFuaEV4cHJlc3Npb24gPSAoYTogc3RyaW5nKSA9PiBgc2lnbigke2F9KSAqICgxIC0gZXhwKC0yICogYWJzKCR7YX0pKSkgLyAoMSArIGV4cCgtMiAqIGFicygke2F9KSkpYDtcblxuZXhwb3J0IGNvbnN0IHRhbmggPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgLy8gVE9ETzogcmV2aXNpdCBhZnRlciBodHRwczovL2dpdGh1Yi5jb20vZ3B1d2ViL2dwdXdlYi9pc3N1ZXMvNDQ1OCBpcyByZXNvbHZlZFxuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ1RhbmgnLCB0YW5oRXhwcmVzc2lvbikpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZhc3RHZWx1SW1wbCA9ICh2YXJUeXBlID0gJ2YzMicpID0+IGBcbmNvbnN0IGZhc3RfZ2VsdV9hOiAke3ZhclR5cGV9ID0gMC41O1xuY29uc3QgZmFzdF9nZWx1X2I6ICR7dmFyVHlwZX0gPSAwLjc5Nzg4NDU2MDgwMjg2NTQ7XG5jb25zdCBmYXN0X2dlbHVfYzogJHt2YXJUeXBlfSA9IDAuMDM1Njc3NDA4MTM2MzAwMTI1O1xuXG5mbiB0YW5oX3YodjogdmVjNDwke3ZhclR5cGV9PikgLT4gdmVjNDwke3ZhclR5cGV9PiB7XG4gIHJldHVybiAke3RhbmhFeHByZXNzaW9uKCd2Jyl9O1xufVxuYDtcblxuZXhwb3J0IGNvbnN0IGZhc3RHZWx1RXhwcmVzc2lvbiA9ICh4OiBzdHJpbmcpID0+XG4gICAgYChmYXN0X2dlbHVfYSArIGZhc3RfZ2VsdV9hICogdGFuaF92KCR7eH0gKiAoZmFzdF9nZWx1X2MgKiAke3h9ICogJHt4fSArIGZhc3RfZ2VsdV9iKSkpICogJHt4fWA7XG5cbmV4cG9ydCBjb25zdCBmYXN0R2VsdSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhcbiAgICAgIGNvbnRleHQuaW5wdXRzWzBdLCAnRmFzdEdlbHUnLCBmYXN0R2VsdUV4cHJlc3Npb24sIGZhc3RHZWx1SW1wbChkYXRhVHlwZSksIHVuZGVmaW5lZCxcbiAgICAgIGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdGhyZXNob2xkZWRSZWx1ID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBBbHBoYUF0dHJpYnV0ZXMpOiBudW1iZXIgPT4ge1xuICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhcbiAgICAgIGNvbnRleHQuaW5wdXRzWzBdLCAnVGhyZXNob2xkZWRSZWx1JywgYSA9PiBgc2VsZWN0KHZlYzQ8JHtkYXRhVHlwZX0+KDAuMCksICR7YX0sICR7YX0gPiB0aHJlc2hvbGRlZF9yZWx1X2FscGhhXylgLFxuICAgICAgYGNvbnN0IHRocmVzaG9sZGVkX3JlbHVfYWxwaGFfID0gdmVjNDwke2RhdGFUeXBlfT4oJHthdHRyaWJ1dGVzLmFscGhhfSk7YCwgYXR0cmlidXRlcy5jYWNoZUtleSkpO1xuICByZXR1cm4gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2cgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sICdMb2cnLCAnbG9nJykpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mb30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2lucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZX0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtlcmZJbXBsfSBmcm9tICcuL3VuYXJ5LW9wJztcblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKGlucHV0c1swXS5kaW1zLmxlbmd0aCAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgc2hvdWxkIGhhdmUgMyBkaW1lbnNpb25zJyk7XG4gIH1cblxuICBpZiAoIVsyNTYwLCA1MTIwLCAxMDI0MF0uaW5jbHVkZXMoaW5wdXRzWzBdLmRpbXNbMl0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdoaWRkZW4gc3RhdGUgc2hvdWxkIGJlIDI1NjAsIDUxMjAgb3IgMTAyNDAnKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMV0uZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpYXMgaXMgZXhwZWN0ZWQgdG8gaGF2ZSAxIGRpbWVuc2lvbnMnKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMF0uZGltc1syXSAhPT0gaW5wdXRzWzFdLmRpbXNbMF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2xhc3QgZGltZW5zaW9uIG9mIGlucHV0IGFuZCBiaWFzIGFyZSBub3QgdGhlIHNhbWUnKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlQmlhc1NwbGl0R2VsdVByb2dyYW1JbmZvID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zLnNsaWNlKCk7XG4gIG91dHB1dFNoYXBlWzJdID0gb3V0cHV0U2hhcGVbMl0gLyAyO1xuXG4gIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLCA0KTtcbiAgY29uc3QgYmlhcyA9IGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIFtpbnB1dHNbMF0uZGltc1syXV0sIDQpO1xuICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgNCk7XG5cbiAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKSAvIDQ7XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0c1swXS5kYXRhVHlwZSk7XG5cbiAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiBgXG4gIGNvbnN0IE1fU1FSVDIgPSBzcXJ0KDIuMCk7XG4gIGNvbnN0IGhhbGZDaGFubmVscyA9ICR7aW5wdXRzWzBdLmRpbXNbMl0gLyA0IC8gMn11O1xuXG4gICR7c2hhZGVySGVscGVyLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIGJpYXMsIG91dHB1dCl9XG5cbiAgJHtlcmZJbXBsKGRhdGFUeXBlKX1cblxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKG91dHB1dFNpemUpfVxuICAgIGxldCBiaWFzSWR4ID0gZ2xvYmFsX2lkeCAlIGhhbGZDaGFubmVscztcbiAgICBsZXQgYmF0Y2hJbmRleCA9IGdsb2JhbF9pZHggLyBoYWxmQ2hhbm5lbHM7XG4gICAgbGV0IGlucHV0T2Zmc2V0ID0gYmlhc0lkeCArIGJhdGNoSW5kZXggKiBoYWxmQ2hhbm5lbHMgKiAyO1xuICAgIGxldCB2YWx1ZUxlZnQgPSBpbnB1dFtpbnB1dE9mZnNldF0gKyBiaWFzW2JpYXNJZHhdO1xuICAgIGxldCB2YWx1ZVJpZ2h0ID0gaW5wdXRbaW5wdXRPZmZzZXQgKyBoYWxmQ2hhbm5lbHNdICsgYmlhc1tiaWFzSWR4ICsgaGFsZkNoYW5uZWxzXTtcbiAgICBsZXQgZ2VsdVJpZ2h0ID0gdmFsdWVSaWdodCAqIDAuNSAqIChlcmZfdmYzMih2YWx1ZVJpZ2h0IC8gTV9TUVJUMikgKyAxKTtcblxuICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgJ3ZhbHVlTGVmdCAqIGdlbHVSaWdodCcpfVxuICB9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdCaWFzU3BsaXRHZWx1JyxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfVxuICAgIH0pLFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBiaWFzU3BsaXRHZWx1ID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUJpYXNTcGxpdEdlbHVQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cykpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge0Jyb2FkY2FzdFV0aWwsIFNoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mb30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyfSBmcm9tICcuL2NvbW1vbic7XG5cbnR5cGUgQnVpbHRpbkZ1bmN0aW9uTmFtZSA9IHN0cmluZztcbnR5cGUgQmluYXJ5Q3VzdG9tRXhwcmVzc2lvbiA9IChleHByZXNzaW9uQTogc3RyaW5nLCBleHByZXNzaW9uQjogc3RyaW5nKSA9PiBzdHJpbmc7XG50eXBlIEJpbmFyeUZ1bmN0aW9uQ2FsbCA9IEJ1aWx0aW5GdW5jdGlvbk5hbWV8QmluYXJ5Q3VzdG9tRXhwcmVzc2lvbnx7XG4gIHNjYWxhcjogQmluYXJ5Q3VzdG9tRXhwcmVzc2lvbjtcbiAgdmVjdG9yOiBCaW5hcnlDdXN0b21FeHByZXNzaW9uO1xufTtcblxuY29uc3QgY3JlYXRlQmluYXJ5T3BQcm9ncmFtU2hhZGVyID1cbiAgICAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIsIGRpbXNBOiByZWFkb25seSBudW1iZXJbXSwgZGltc0I6IHJlYWRvbmx5IG51bWJlcltdLCBkaW1zT3V0cHV0OiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgdmVjdG9yaXplOiBib29sZWFuLCBkb0Jyb2FkY2FzdDogYm9vbGVhbiwgc2hhcmVkRGltZW5zaW9uRGl2aXNpYmxlQnk0OiBib29sZWFuLCBmdW5jQ2FsbDogQmluYXJ5RnVuY3Rpb25DYWxsLFxuICAgICB0eXBlQTogbnVtYmVyLCB0eXBlQjogbnVtYmVyLCB0eXBlT3V0cHV0OiBudW1iZXIsIGFkZGl0aW9uYWxJbXBsZW1lbnRhdGlvbj86IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGV4cHJlc3Npb25TY2FsYXI6IEJpbmFyeUN1c3RvbUV4cHJlc3Npb247XG4gICAgICBsZXQgZXhwcmVzc2lvblZlY3RvcjogQmluYXJ5Q3VzdG9tRXhwcmVzc2lvbjtcbiAgICAgIGlmICh0eXBlb2YgZnVuY0NhbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGV4cHJlc3Npb25TY2FsYXIgPSBleHByZXNzaW9uVmVjdG9yID0gKGEsIGIpID0+IGAke2Z1bmNDYWxsfSgoJHthfSksKCR7Yn0pKWA7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmdW5jQ2FsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBleHByZXNzaW9uU2NhbGFyID0gZXhwcmVzc2lvblZlY3RvciA9IGZ1bmNDYWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwcmVzc2lvblNjYWxhciA9IGZ1bmNDYWxsLnNjYWxhcjtcbiAgICAgICAgZXhwcmVzc2lvblZlY3RvciA9IGZ1bmNDYWxsLnZlY3RvcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dERhdGEnLCB0eXBlT3V0cHV0LCBkaW1zT3V0cHV0Lmxlbmd0aCwgNCk7XG4gICAgICBjb25zdCBhID0gaW5wdXRWYXJpYWJsZSgnYURhdGEnLCB0eXBlQSwgZGltc0EubGVuZ3RoLCA0KTtcbiAgICAgIGNvbnN0IGIgPSBpbnB1dFZhcmlhYmxlKCdiRGF0YScsIHR5cGVCLCBkaW1zQi5sZW5ndGgsIDQpO1xuXG4gICAgICBsZXQgYXNzaWdubWVudDogc3RyaW5nO1xuICAgICAgaWYgKHZlY3Rvcml6ZSkge1xuICAgICAgICBpZiAoZG9Ccm9hZGNhc3QpIHtcbiAgICAgICAgICBjb25zdCBpc0FPbmVFbGVtZW50ID0gU2hhcGVVdGlsLnNpemUoZGltc0EpID09PSAxO1xuICAgICAgICAgIGNvbnN0IGlzQk9uZUVsZW1lbnQgPSBTaGFwZVV0aWwuc2l6ZShkaW1zQikgPT09IDE7XG4gICAgICAgICAgY29uc3QgYUxhc3REaW1EaXZpc2libGVCeTQgPSBkaW1zQS5sZW5ndGggPiAwICYmIGRpbXNBW2RpbXNBLmxlbmd0aCAtIDFdICUgNCA9PT0gMDtcbiAgICAgICAgICBjb25zdCBiTGFzdERpbURpdmlzaWJsZUJ5NCA9IGRpbXNCLmxlbmd0aCA+IDAgJiYgZGltc0JbZGltc0IubGVuZ3RoIC0gMV0gJSA0ID09PSAwO1xuICAgICAgICAgIGlmIChpc0FPbmVFbGVtZW50IHx8IGlzQk9uZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGFzc2lnbm1lbnQgPSBvdXRwdXQuc2V0QnlPZmZzZXQoXG4gICAgICAgICAgICAgICAgJ2dsb2JhbF9pZHgnLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25WZWN0b3IoXG4gICAgICAgICAgICAgICAgICAgIGlzQU9uZUVsZW1lbnQgPyBgJHthLnR5cGUudmFsdWV9KCR7YS5nZXRCeU9mZnNldCgnMCcpfS54KWAgOiBhLmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JyksXG4gICAgICAgICAgICAgICAgICAgIGlzQk9uZUVsZW1lbnQgPyBgJHtiLnR5cGUudmFsdWV9KCR7Yi5nZXRCeU9mZnNldCgnMCcpfS54KWAgOiBiLmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JykpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzaWdubWVudCA9IGBcbiAgICAgICAgICAgIGxldCBvdXRwdXRJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4ICogNHUnKX07XG4gICAgICAgICAgICBsZXQgb2Zmc2V0QSA9ICR7YS5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldCgnb3V0cHV0SW5kaWNlcycsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldEIgPSAke2IuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoJ291dHB1dEluZGljZXMnLCBvdXRwdXQpfTtcbiAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnNldEJ5T2Zmc2V0KFxuICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsX2lkeCcsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25WZWN0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWREaW1lbnNpb25EaXZpc2libGVCeTQgfHwgYUxhc3REaW1EaXZpc2libGVCeTQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuZ2V0QnlPZmZzZXQoJ29mZnNldEEgLyA0dScpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHthLnR5cGUudmFsdWV9KCR7YS5nZXRCeU9mZnNldCgnb2Zmc2V0QSAvIDR1Jyl9W29mZnNldEEgJSA0dV0pYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZERpbWVuc2lvbkRpdmlzaWJsZUJ5NCB8fCBiTGFzdERpbURpdmlzaWJsZUJ5NCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5nZXRCeU9mZnNldCgnb2Zmc2V0QiAvIDR1JykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2IudHlwZS52YWx1ZX0oJHtiLmdldEJ5T2Zmc2V0KCdvZmZzZXRCIC8gNHUnKX1bb2Zmc2V0QiAlIDR1XSlgKSl9XG4gICAgICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzaWdubWVudCA9IG91dHB1dC5zZXRCeU9mZnNldChcbiAgICAgICAgICAgICAgJ2dsb2JhbF9pZHgnLCBleHByZXNzaW9uVmVjdG9yKGEuZ2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnKSwgYi5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZG9Ccm9hZGNhc3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIG5lY2Vzc2FyeSB0byB1c2Ugc2NhbGFyIGltcGxlbWVudGF0aW9uIGZvciBlbGVtZW50LXdpc2UgYmluYXJ5IG9wIGltcGxlbWVudGF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2luZ2xlQXNzaWdubWVudCA9IChyZXNTdHI6IHN0cmluZywgeDogbnVtYmVyLCB0eXBlQ2FzdCA9ICcnKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhwcmVzc2lvbkEgPSBgYURhdGFbaW5kZXhBJHt4fV1bY29tcG9uZW50QSR7eH1dYDtcbiAgICAgICAgICBjb25zdCBleHByZXNzaW9uQiA9IGBiRGF0YVtpbmRleEIke3h9XVtjb21wb25lbnRCJHt4fV1gO1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICBsZXQgb3V0cHV0SW5kaWNlcyR7eH0gPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoYGdsb2JhbF9pZHggKiA0dSArICR7eH11YCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldEEke3h9ID0gJHthLmJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0KGBvdXRwdXRJbmRpY2VzJHt4fWAsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldEIke3h9ID0gJHtiLmJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0KGBvdXRwdXRJbmRpY2VzJHt4fWAsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IGluZGV4QSR7eH0gPSBvZmZzZXRBJHt4fSAvIDR1O1xuICAgICAgICAgICAgbGV0IGluZGV4QiR7eH0gPSBvZmZzZXRCJHt4fSAvIDR1O1xuICAgICAgICAgICAgbGV0IGNvbXBvbmVudEEke3h9ID0gb2Zmc2V0QSR7eH0gJSA0dTtcbiAgICAgICAgICAgIGxldCBjb21wb25lbnRCJHt4fSA9IG9mZnNldEIke3h9ICUgNHU7XG4gICAgICAgICAgICAke3Jlc1N0cn1bJHt4fV0gPSAke3R5cGVDYXN0fSgke2V4cHJlc3Npb25TY2FsYXIoZXhwcmVzc2lvbkEsIGV4cHJlc3Npb25CKX0pO1xuICAgICAgICAgIGA7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlT3V0cHV0ID09PSBEYXRhVHlwZS5ib29sKSB7XG4gICAgICAgICAgYXNzaWdubWVudCA9IGBcbiAgICAgICAgICAgIHZhciBkYXRhID0gdmVjNDx1MzI+KDApO1xuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdkYXRhJywgMCwgJ3UzMicpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdkYXRhJywgMSwgJ3UzMicpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdkYXRhJywgMiwgJ3UzMicpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdkYXRhJywgMywgJ3UzMicpfVxuICAgICAgICAgICAgb3V0cHV0RGF0YVtnbG9iYWxfaWR4XSA9IGRvdCh2ZWM0PHUzMj4oMHgxLCAweDEwMCwgMHgxMDAwMCwgMHgxMDAwMDAwKSwgdmVjNDx1MzI+KGRhdGEpKTtgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFzc2lnbm1lbnQgPSBgXG4gICAgICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoJ291dHB1dERhdGFbZ2xvYmFsX2lkeF0nLCAwKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnb3V0cHV0RGF0YVtnbG9iYWxfaWR4XScsIDEpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdvdXRwdXREYXRhW2dsb2JhbF9pZHhdJywgMil9XG4gICAgICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoJ291dHB1dERhdGFbZ2xvYmFsX2lkeF0nLCAzKX1cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgXG4gICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgndmVjX3NpemUnLCAndTMyJykuZGVjbGFyZVZhcmlhYmxlcyhhLCBiLCBvdXRwdXQpfVxuXG4gICAgICAgICR7YWRkaXRpb25hbEltcGxlbWVudGF0aW9uID8/ICcnfVxuXG4gICAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy52ZWNfc2l6ZScpfVxuICAgICAgICAke2Fzc2lnbm1lbnR9XG4gICAgICB9YDtcbiAgICB9O1xuXG5jb25zdCBjcmVhdGVCaW5hcnlPcFByb2dyYW1JbmZvID1cbiAgICAobmFtZTogc3RyaW5nLCBjYWNoZUtleTogc3RyaW5nLCBhOiBUZW5zb3JWaWV3LCBiOiBUZW5zb3JWaWV3LCBmdW5jQ2FsbDogQmluYXJ5RnVuY3Rpb25DYWxsLFxuICAgICBhZGRpdGlvbmFsSW1wbGVtZW50YXRpb24/OiBzdHJpbmcsIG91dHB1dERhdGFUeXBlOiBudW1iZXIgPSBhLmRhdGFUeXBlKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3QgaXNCcm9hZGNhc3QgPSAhU2hhcGVVdGlsLmFyZUVxdWFsKGEuZGltcywgYi5kaW1zKTtcbiAgICAgIGxldCBvdXRwdXRTaGFwZSA9IGEuZGltcztcbiAgICAgIGxldCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUoYS5kaW1zKTtcblxuICAgICAgbGV0IHZlY3Rvcml6ZSA9IGZhbHNlO1xuICAgICAgbGV0IHNoYXJlZERpbWVuc2lvbkRpdmlzaWJsZUJ5NCA9IGZhbHNlO1xuXG4gICAgICAvLyBUT0RPOiBkZWFsIHdpdGggemVyby1zaXplZCB0ZW5zb3JzIChlZy4gZGltcz1bMSwwXSlcbiAgICAgIGNvbnN0IGNhY2hlS2V5QXV4ID0gW2lzQnJvYWRjYXN0XTtcbiAgICAgIGlmIChpc0Jyb2FkY2FzdCkge1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVkU2hhcGUgPSBCcm9hZGNhc3RVdGlsLmNhbGNTaGFwZShhLmRpbXMsIGIuZGltcywgZmFsc2UpO1xuICAgICAgICBpZiAoIWNhbGN1bGF0ZWRTaGFwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBwZXJmb3JtIGJpbmFyeSBvcCBvbiB0aGUgZ2l2ZW4gdGVuc29ycycpO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dFNoYXBlID0gY2FsY3VsYXRlZFNoYXBlO1xuICAgICAgICBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgICBjb25zdCBpc0FPbmVFbGVtZW50ID0gU2hhcGVVdGlsLnNpemUoYS5kaW1zKSA9PT0gMTtcbiAgICAgICAgY29uc3QgaXNCT25lRWxlbWVudCA9IFNoYXBlVXRpbC5zaXplKGIuZGltcykgPT09IDE7XG4gICAgICAgIGNvbnN0IGFMYXN0RGltRGl2aXNpYmxlQnk0ID0gYS5kaW1zLmxlbmd0aCA+IDAgJiYgYS5kaW1zW2EuZGltcy5sZW5ndGggLSAxXSAlIDQgPT09IDA7XG4gICAgICAgIGNvbnN0IGJMYXN0RGltRGl2aXNpYmxlQnk0ID0gYi5kaW1zLmxlbmd0aCA+IDAgJiYgYi5kaW1zW2IuZGltcy5sZW5ndGggLSAxXSAlIDQgPT09IDA7XG4gICAgICAgIGNhY2hlS2V5QXV4LnB1c2goaXNBT25lRWxlbWVudCk7XG4gICAgICAgIGNhY2hlS2V5QXV4LnB1c2goaXNCT25lRWxlbWVudCk7XG4gICAgICAgIGNhY2hlS2V5QXV4LnB1c2goYUxhc3REaW1EaXZpc2libGVCeTQpO1xuICAgICAgICBjYWNoZUtleUF1eC5wdXNoKGJMYXN0RGltRGl2aXNpYmxlQnk0KTtcbiAgICAgICAgLy8gY2hlY2sgd2hldGhlciB2ZWN0b3JpemUgY2FuIGJlIGVuYWJsZWRcbiAgICAgICAgbGV0IHNoYXJlZERpbWVuc2lvbiA9IDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgb3V0cHV0U2hhcGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkaW1BID0gYS5kaW1zW2EuZGltcy5sZW5ndGggLSBpXSA/PyAxO1xuICAgICAgICAgIGNvbnN0IGRpbUIgPSBiLmRpbXNbYi5kaW1zLmxlbmd0aCAtIGldID8/IDE7XG4gICAgICAgICAgaWYgKGRpbUEgPT09IGRpbUIpIHtcbiAgICAgICAgICAgIHNoYXJlZERpbWVuc2lvbiAqPSBkaW1BO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYXJlZERpbWVuc2lvbiAlIDQgPT09IDApIHtcbiAgICAgICAgICBzaGFyZWREaW1lbnNpb25EaXZpc2libGVCeTQgPSB0cnVlO1xuICAgICAgICAgIHZlY3Rvcml6ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBT25lRWxlbWVudCB8fCBpc0JPbmVFbGVtZW50IHx8IGFMYXN0RGltRGl2aXNpYmxlQnk0IHx8IGJMYXN0RGltRGl2aXNpYmxlQnk0KSB7XG4gICAgICAgICAgdmVjdG9yaXplID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZWxlbWVudC13aXNlXG4gICAgICAgIHZlY3Rvcml6ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBjYWNoZUtleUF1eC5wdXNoKHZlY3Rvcml6ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgaGludDogY2FjaGVLZXkgKyBjYWNoZUtleUF1eC5tYXAoKHgpID0+IHgudG9TdHJpbmcoKSkuam9pbignXycpLFxuICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnLCAncmFuayddLFxuICAgICAgICB9LFxuICAgICAgICBnZXRTaGFkZXJTb3VyY2U6IChzaGFkZXJIZWxwZXIpID0+IGNyZWF0ZUJpbmFyeU9wUHJvZ3JhbVNoYWRlcihcbiAgICAgICAgICAgIHNoYWRlckhlbHBlciwgYS5kaW1zLCBiLmRpbXMsIG91dHB1dFNoYXBlLCB2ZWN0b3JpemUsIGlzQnJvYWRjYXN0LCBzaGFyZWREaW1lbnNpb25EaXZpc2libGVCeTQsIGZ1bmNDYWxsLFxuICAgICAgICAgICAgYS5kYXRhVHlwZSwgYi5kYXRhVHlwZSwgb3V0cHV0RGF0YVR5cGUsIGFkZGl0aW9uYWxJbXBsZW1lbnRhdGlvbiksXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IG91dHB1dERhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8gLyA0IC8qIGNvbXBvbmVudCBzaXplICovKX0sXG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zOiBbXG4gICAgICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gNCl9LFxuICAgICAgICAgICAgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoYS5kaW1zLCBiLmRpbXMsIG91dHB1dFNoYXBlKVxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9O1xuXG5jb25zdCBydW5CaW5hcnlPcCA9XG4gICAgKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBuYW1lOiBzdHJpbmcsIGZ1bmNDYWxsOiBCaW5hcnlGdW5jdGlvbkNhbGwsIGFkZGl0aW9uYWxJbXBsZW1lbnRhdGlvbj86IHN0cmluZyxcbiAgICAgY2FjaGVLZXk/OiBzdHJpbmcsIG91dHB1dERhdGFUeXBlPzogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQmluYXJ5T3BQcm9ncmFtSW5mbyhcbiAgICAgICAgICBuYW1lLCBjYWNoZUtleSA/PyAnJywgY29udGV4dC5pbnB1dHNbMF0sIGNvbnRleHQuaW5wdXRzWzFdLCBmdW5jQ2FsbCwgYWRkaXRpb25hbEltcGxlbWVudGF0aW9uLFxuICAgICAgICAgIG91dHB1dERhdGFUeXBlKSk7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGFkZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBydW5CaW5hcnlPcChjb250ZXh0LCAnQWRkJywgKGEsIGIpID0+IGAke2F9KyR7Yn1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXYgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgcnVuQmluYXJ5T3AoY29udGV4dCwgJ0RpdicsIChhLCBiKSA9PiBgJHthfS8ke2J9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgZXF1YWwgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgcnVuQmluYXJ5T3AoXG4gICAgICBjb250ZXh0LCAnRXF1YWwnLCAoe3NjYWxhcjogKGEsIGIpID0+IGB1MzIoJHthfT09JHtifSlgLCB2ZWN0b3I6IChhLCBiKSA9PiBgdmVjNDx1MzI+KCR7YX09PSR7Yn0pYH0pLCB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsIERhdGFUeXBlLmJvb2wpO1xufTtcblxuZXhwb3J0IGNvbnN0IG11bCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBydW5CaW5hcnlPcChjb250ZXh0LCAnTXVsJywgKGEsIGIpID0+IGAke2F9KiR7Yn1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwb3cgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgY29uc3QgdHlwZSA9IGlucHV0VmFyaWFibGUoJ2lucHV0JywgY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXMpLnR5cGUudmFsdWU7XG4gIGNvbnN0IHJvdW5kU3RyID0gdHlwZSA9PT0gJ2kzMicgPyAncm91bmQnIDogJyc7XG4gIHJ1bkJpbmFyeU9wKFxuICAgICAgY29udGV4dCwgJ1BvdycsICh7c2NhbGFyOiAoYSwgYikgPT4gYHBvd19jdXN0b20oJHthfSwke2J9KWAsIHZlY3RvcjogKGEsIGIpID0+IGBwb3dfdmVjdG9yX2N1c3RvbSgke2F9LCR7Yn0pYH0pLFxuICAgICAgYFxuICAgIGZuIHBvd19jdXN0b20oYSA6ICR7dHlwZX0sIGIgOiAke3R5cGV9KSAtPiAke3R5cGV9IHtcbiAgICAgIGlmIChiID09ICR7dHlwZX0oMC4wKSkge1xuICAgICAgICByZXR1cm4gJHt0eXBlfSgxLjApO1xuICAgICAgfSBlbHNlIGlmIChhIDwgJHt0eXBlfSgwLjApICYmIGYzMihiKSAhPSBmbG9vcihmMzIoYikpKSB7XG4gICAgICAgIHJldHVybiAke3R5cGV9KHBvdyhmMzIoYSksIGYzMihiKSkpOyAvLyBOYU5cbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxlY3Qoc2lnbihhKSwgJHt0eXBlfSgxLjApLCByb3VuZChmMzIoYWJzKGIpICUgJHt0eXBlfSgyLjApKSkgIT0gMS4wKSAqICR7dHlwZX0oJHtcbiAgICAgICAgICByb3VuZFN0cn0ocG93KGYzMihhYnMoYSkpLCBmMzIoYikpKSk7XG4gICAgfVxuICAgIGZuIHBvd192ZWN0b3JfY3VzdG9tKGEgOiB2ZWM0PCR7dHlwZX0+LCBiIDogdmVjNDwke3R5cGV9PikgLT4gdmVjNDwke3R5cGV9PiB7XG4gICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdmVjdG9yaXplZCBwb3dcbiAgICAgIHJldHVybiB2ZWM0PCR7dHlwZX0+KHBvd19jdXN0b20oYS54LCBiLngpLCBwb3dfY3VzdG9tKGEueSwgYi55KSwgcG93X2N1c3RvbShhLnosIGIueiksIHBvd19jdXN0b20oYS53LCBiLncpKTtcbiAgICB9XG4gICAgICBgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzdWIgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgcnVuQmluYXJ5T3AoY29udGV4dCwgJ1N1YicsIChhLCBiKSA9PiBgJHthfS0ke2J9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ3JlYXRlciA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBydW5CaW5hcnlPcChcbiAgICAgIGNvbnRleHQsICdHcmVhdGVyJywgKHtzY2FsYXI6IChhLCBiKSA9PiBgdTMyKCR7YX0+JHtifSlgLCB2ZWN0b3I6IChhLCBiKSA9PiBgdmVjNDx1MzI+KCR7YX0+JHtifSlgfSksIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCwgRGF0YVR5cGUuYm9vbCk7XG59O1xuXG5leHBvcnQgY29uc3QgbGVzcyA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBydW5CaW5hcnlPcChcbiAgICAgIGNvbnRleHQsICdMZXNzJywgKHtzY2FsYXI6IChhLCBiKSA9PiBgdTMyKCR7YX08JHtifSlgLCB2ZWN0b3I6IChhLCBiKSA9PiBgdmVjNDx1MzI+KCR7YX08JHtifSlgfSksIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCwgRGF0YVR5cGUuYm9vbCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ3JlYXRlck9yRXF1YWwgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgcnVuQmluYXJ5T3AoXG4gICAgICBjb250ZXh0LCAnR3JlYXRlck9yRXF1YWwnLCAoe3NjYWxhcjogKGEsIGIpID0+IGB1MzIoJHthfT49JHtifSlgLCB2ZWN0b3I6IChhLCBiKSA9PiBgdmVjNDx1MzI+KCR7YX0+PSR7Yn0pYH0pLFxuICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIERhdGFUeXBlLmJvb2wpO1xufTtcblxuZXhwb3J0IGNvbnN0IGxlc3NPckVxdWFsID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIHJ1bkJpbmFyeU9wKFxuICAgICAgY29udGV4dCwgJ0xlc3NPckVxdWFsJywgKHtzY2FsYXI6IChhLCBiKSA9PiBgdTMyKCR7YX08PSR7Yn0pYCwgdmVjdG9yOiAoYSwgYikgPT4gYHZlYzQ8dTMyPigke2F9PD0ke2J9KWB9KSxcbiAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBEYXRhVHlwZS5ib29sKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7TUFYX0NMSVAsIE1JTl9DTElQfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7UHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtVbmlmb3Jtc0FycmF5VHlwZX0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMge1xuICByZWFkb25seSBhY3RpdmF0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsaXBNaW4/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNsaXBNYXg/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFscGhhPzogbnVtYmVyO1xuICByZWFkb25seSBiZXRhPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0QWN0aXZhdGlvblNuaXBwZXQgPVxuICAgIChhdHRyaWJ1dGVzOiBJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzLCB2YWx1ZVR5cGU6IHN0cmluZywgYmFzZVR5cGUgPSAnZjMyJyk6IHN0cmluZyA9PiB7XG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZXMuYWN0aXZhdGlvbikge1xuICAgICAgICBjYXNlICdSZWx1JzpcbiAgICAgICAgICByZXR1cm4gYHZhbHVlID0gbWF4KHZhbHVlLCAke3ZhbHVlVHlwZX0oMC4wKSk7YDtcbiAgICAgICAgY2FzZSAnU2lnbW9pZCc6XG4gICAgICAgICAgcmV0dXJuIGB2YWx1ZSA9ICgke3ZhbHVlVHlwZX0oMS4wKSAvICgke3ZhbHVlVHlwZX0oMS4wKSArIGV4cCgtdmFsdWUpKSk7YDtcbiAgICAgICAgY2FzZSAnQ2xpcCc6XG4gICAgICAgICAgcmV0dXJuIGB2YWx1ZSA9IGNsYW1wKHZhbHVlLCAke3ZhbHVlVHlwZX0oJHtiYXNlVHlwZX0odW5pZm9ybXMuY2xpcF9taW4pKSwgJHt2YWx1ZVR5cGV9KCR7XG4gICAgICAgICAgICAgIGJhc2VUeXBlfSh1bmlmb3Jtcy5jbGlwX21heCkpKTtgO1xuICAgICAgICBjYXNlICdIYXJkU2lnbW9pZCc6XG4gICAgICAgICAgcmV0dXJuIGB2YWx1ZSA9IG1heCgke3ZhbHVlVHlwZX0oMC4wKSwgbWluKCR7dmFsdWVUeXBlfSgxLjApLCAke2Jhc2VUeXBlfSh1bmlmb3Jtcy5hbHBoYSkgKiB2YWx1ZSArICR7XG4gICAgICAgICAgICAgIGJhc2VUeXBlfSh1bmlmb3Jtcy5iZXRhKSkpO2A7XG4gICAgICAgIGNhc2UgJ0xlYWt5UmVsdSc6XG4gICAgICAgICAgcmV0dXJuIGB2YWx1ZSA9IHNlbGVjdCgke2Jhc2VUeXBlfSh1bmlmb3Jtcy5hbHBoYSkgKiB2YWx1ZSwgdmFsdWUsIHZhbHVlID49ICR7dmFsdWVUeXBlfSgwLjApKTtgO1xuICAgICAgICBjYXNlICcnOlxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgLy8gVE9ETzogYWRkaW5nIG90aGVyIGFjdGl2YXRpb25zIHRoYXQgY2FuIGJlIGZ1c2VkLlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWN0aXZhdGlvbiAke2F0dHJpYnV0ZXMuYWN0aXZhdGlvbn1gKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zRGF0YSA9XG4gICAgKGF0dHJpYnV0ZXM6IEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3JtOiBQcm9ncmFtVW5pZm9ybVtdKSA9PiB7XG4gICAgICBpZiAoYXR0cmlidXRlcy5hY3RpdmF0aW9uID09PSAnQ2xpcCcpIHtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm0ucHVzaChcbiAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5jbGlwTWF4IX0sIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5jbGlwTWluIX0pO1xuICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLmFjdGl2YXRpb24gPT09ICdIYXJkU2lnbW9pZCcpIHtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm0ucHVzaChcbiAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5hbHBoYSF9LCB7dHlwZTogRGF0YVR5cGUuZmxvYXQsIGRhdGE6IGF0dHJpYnV0ZXMuYmV0YSF9KTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5hY3RpdmF0aW9uID09PSAnTGVha3lSZWx1Jykge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybS5wdXNoKHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5hbHBoYSF9KTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zID0gKGF0dHJpYnV0ZXM6IEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMsIHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSkgPT4ge1xuICBpZiAoYXR0cmlidXRlcy5hY3RpdmF0aW9uID09PSAnQ2xpcCcpIHtcbiAgICB1bmlmb3Jtcy5wdXNoKHtuYW1lOiAnY2xpcF9tYXgnLCB0eXBlOiAnZjMyJ30sIHtuYW1lOiAnY2xpcF9taW4nLCB0eXBlOiAnZjMyJ30pO1xuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuYWN0aXZhdGlvbiA9PT0gJ0hhcmRTaWdtb2lkJykge1xuICAgIHVuaWZvcm1zLnB1c2goe25hbWU6ICdhbHBoYScsIHR5cGU6ICdmMzInfSwge25hbWU6ICdiZXRhJywgdHlwZTogJ2YzMid9KTtcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLmFjdGl2YXRpb24gPT09ICdMZWFreVJlbHUnKSB7XG4gICAgdW5pZm9ybXMucHVzaCh7bmFtZTogJ2FscGhhJywgdHlwZTogJ2YzMid9KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlcyA9XG4gICAgKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+fHVuZGVmaW5lZCk6IEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMgPT4ge1xuICAgICAgY29uc3QgYWN0aXZhdGlvbiA9IGF0dHJpYnV0ZXM/LmFjdGl2YXRpb24gYXMgc3RyaW5nIHx8ICcnO1xuICAgICAgaWYgKGFjdGl2YXRpb24gPT09ICdIYXJkU2lnbW9pZCcpIHtcbiAgICAgICAgY29uc3QgW2FscGhhLCBiZXRhXSA9IGF0dHJpYnV0ZXM/LmFjdGl2YXRpb25fcGFyYW1zIGFzIFtudW1iZXIsIG51bWJlcl0gfHwgWzAuMiwgMC41XTtcbiAgICAgICAgcmV0dXJuIHthY3RpdmF0aW9uLCBhbHBoYSwgYmV0YX07XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdDbGlwJykge1xuICAgICAgICBjb25zdCBbY2xpcE1pbiwgY2xpcE1heF0gPSBhdHRyaWJ1dGVzPy5hY3RpdmF0aW9uX3BhcmFtcyBhcyBbbnVtYmVyLCBudW1iZXJdIHx8IFtNSU5fQ0xJUCwgTUFYX0NMSVBdO1xuICAgICAgICByZXR1cm4ge2FjdGl2YXRpb24sIGNsaXBNYXgsIGNsaXBNaW59O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAnTGVha3lSZWx1Jykge1xuICAgICAgICBjb25zdCBbYWxwaGFdID0gYXR0cmlidXRlcz8uYWN0aXZhdGlvbl9wYXJhbXMgYXMgW251bWJlcl0gfHwgWzAuMDFdO1xuICAgICAgICByZXR1cm4ge2FjdGl2YXRpb24sIGFscGhhfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7YWN0aXZhdGlvbn07XG4gICAgfTtcbiIsICIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIHNhbXBsZWQgZnJvbSBbQHRlbnNvcmZsb3cvdGZqc10gdGZqcy1iYWNrZW5kLXdlYmdwdS9zcmMvYWN0aXZhdGlvbl91dGlsLnRzXG4vL1xuLy8gbW9kaWZpZWQgdG8gZml0IHRoZSBuZWVkcyBvZiB0aGUgcHJvamVjdFxuXG5leHBvcnQgY29uc3QgdHlwZVNuaXBwZXQgPSAoY29tcG9uZW50OiBudW1iZXIsIGRhdGFUeXBlOiBzdHJpbmcpID0+IHtcbiAgc3dpdGNoIChjb21wb25lbnQpIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gZGF0YVR5cGU7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGB2ZWMyPCR7ZGF0YVR5cGV9PmA7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIGB2ZWMzPCR7ZGF0YVR5cGV9PmA7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGB2ZWM0PCR7ZGF0YVR5cGV9PmA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtjb21wb25lbnR9LWNvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYmlhc1NuaXBwZXQgPSAoaGFzQmlhczogYm9vbGVhbik6IHN0cmluZyA9PiBgXG4gICAgICAke2hhc0JpYXMgPyAndmFsdWUgPSB2YWx1ZSArIGdldEJpYXNCeU91dHB1dENvb3Jkcyhjb29yZHMpOycgOiAnJ31cbiAgICAgIGA7XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vLyBzYW1wbGVkIGZyb20gW0B0ZW5zb3JmbG93L3RmanNdIHRmanMtY29yZS9zcmMvb3BzL2NvbnZfdXRpbC50c1xuLy9cbi8vIG1vZGlmaWVkIHRvIGZpdCB0aGUgbmVlZHMgb2YgdGhlIHByb2plY3RcblxuZXhwb3J0IGNvbnN0IHV0aWxGdW5jdGlvbnMgPSAoc3RyaWRlU3RyOiBzdHJpbmcpID0+IChgXG5mbiBnZXRJbmRleEZyb21Db29yZHM0RChjb29yZHMgOiB2ZWM0PGkzMj4sIHNoYXBlIDogdmVjNDxpMzI+KSAtPiBpMzIge1xuICByZXR1cm4gZG90KGNvb3JkcywgdmVjNDxpMzI+KFxuICAgICAgc2hhcGUueSAqIHNoYXBlLnogKiBzaGFwZS53LCBzaGFwZS56ICogc2hhcGUudywgc2hhcGUudywgMSkpO1xufVxuZm4gZ2V0T3V0cHV0SW5kZXhGcm9tQ29vcmRzKGNvb3JkcyA6IHZlYzQ8aTMyPikgLT4gaTMyIHtcbiAgcmV0dXJuIGRvdChjb29yZHMsIHZlYzQ8aTMyPihcbiAgICBpMzIoJHtzdHJpZGVTdHJ9LngpLCBpMzIoJHtzdHJpZGVTdHJ9LnkpLCBpMzIoJHtzdHJpZGVTdHJ9LnopLCAxKSk7XG59XG5gKTtcbiIsICIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIHNhbXBsZWQgZnJvbSBbQHRlbnNvcmZsb3cvdGZqc10gdGZqcy1iYWNrZW5kLXdlYmdwdS9zcmMvbWF0bXVsX3BhY2tlZF93ZWJncHUudHNcbi8vXG4vLyBtb2RpZmllZCB0byBmaXQgdGhlIG5lZWRzIG9mIHRoZSBwcm9qZWN0XG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtQcm9ncmFtSW5mbywgUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3ksIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBnZXRCcm9hZGNhc3REaW1zLCBJbmRpY2VzSGVscGVyLCBpbnB1dFZhcmlhYmxlLCBpbnRlcm5hbFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHthcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXMsIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEsIGdldEFjdGl2YXRpb25TbmlwcGV0LCBJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzfSBmcm9tICcuLi9mdXNlLXV0aWxzJztcblxuaW1wb3J0IHt0eXBlU25pcHBldH0gZnJvbSAnLi9hY3RpdmF0aW9uX3V0aWwnO1xuXG5jb25zdCB3cml0ZURhdGFUb1N1YkFWZWM0U25pcHBldCA9ICh0cmFuc3Bvc2U6IGJvb2xlYW4sIGJhdGNoRGltcz86IEluZGljZXNIZWxwZXIpID0+IHtcbiAgaWYgKHRyYW5zcG9zZSkge1xuICAgIHJldHVybiBgXG4gICAgICAgIG1tX0FzdWJbaW5wdXRSb3ddW2lucHV0Q29sXSA9IG1tX3JlYWRBKGJhdGNoLFxuICAgICAgICAgIGtTdGFydCArIGlucHV0Um93LFxuICAgICAgICAgIGdsb2JhbFJvd1N0YXJ0IC8gaW5uZXJFbGVtZW50U2l6ZSArIGlucHV0Q29sJHtiYXRjaERpbXMgPyAnLCBiYXRjaEluZGljZXMnIDogJyd9KTtcbiAgICAgICAgYDtcblxuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgIG1tX0FzdWJbaW5wdXRSb3ddW2lucHV0Q29sXSA9IG1tX3JlYWRBKGJhdGNoLFxuICAgICAgICAgIGdsb2JhbFJvdyArIGlubmVyUm93LFxuICAgICAgICAgIGtTdGFydCAvIGlubmVyRWxlbWVudFNpemUgKyBpbnB1dENvbCR7YmF0Y2hEaW1zID8gJywgYmF0Y2hJbmRpY2VzJyA6ICcnfSk7XG4gICAgICAgIGA7XG4gIH1cbn07XG5cbmNvbnN0IGNhbGN1bGF0ZVJlc3VsdFNuaXBwZXQgPSAodHJhbnNwb3NlQTogYm9vbGVhbiwgaW5uZXJFbGVtZW50U2l6ZTogbnVtYmVyKSA9PiB7XG4gIGlmICh0cmFuc3Bvc2VBKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgbGV0IEFDYWNoZWQwID0gbW1fQXN1YltrICogaW5uZXJFbGVtZW50U2l6ZV1bbG9jYWxSb3ddO1xuICAgICAgICBsZXQgQUNhY2hlZDEgPSBtbV9Bc3ViW2sgKiBpbm5lckVsZW1lbnRTaXplICsgMV1bbG9jYWxSb3ddO1xuICAgICAgICBsZXQgQUNhY2hlZDIgPSBtbV9Bc3ViW2sgKiBpbm5lckVsZW1lbnRTaXplICsgMl1bbG9jYWxSb3ddO1xuICAgICAgICAke2lubmVyRWxlbWVudFNpemUgPT09IDMgPyAnJyA6ICdsZXQgQUNhY2hlZDMgPSBtbV9Bc3ViW2sgKiBpbm5lckVsZW1lbnRTaXplICsgM11bbG9jYWxSb3ddOyd9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93UGVyVGhyZWFkOyBpID0gaSArIDEpIHtcbiAgICAgICAgICBhY2NbaV0gPSBCQ2FjaGVkMCAqIEFDYWNoZWQwW2ldICsgYWNjW2ldO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQxICogQUNhY2hlZDFbaV0gKyBhY2NbaV07XG4gICAgICAgICAgYWNjW2ldID0gQkNhY2hlZDIgKiBBQ2FjaGVkMltpXSArIGFjY1tpXTtcbiAgICAgICAgICAke2lubmVyRWxlbWVudFNpemUgPT09IDMgPyAnJyA6ICdhY2NbaV0gPSBCQ2FjaGVkMyAqIEFDYWNoZWQzW2ldICsgYWNjW2ldOyd9XG4gICAgICAgIH1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93UGVyVGhyZWFkOyBpID0gaSArIDEpIHtcbiAgICAgICAgICBsZXQgQUNhY2hlZCA9IG1tX0FzdWJbdGlsZVJvdyArIGldW2tdO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQwICogQUNhY2hlZC54ICsgYWNjW2ldO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQxICogQUNhY2hlZC55ICsgYWNjW2ldO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQyICogQUNhY2hlZC56ICsgYWNjW2ldO1xuICAgICAgICAgICR7aW5uZXJFbGVtZW50U2l6ZSA9PT0gMyA/ICcnIDogJ2FjY1tpXSA9IEJDYWNoZWQzICogQUNhY2hlZC53ICsgYWNjW2ldOyd9XG4gICAgICAgIH1gO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbWFrZU1hdE11bFBhY2tlZFZlYzRTb3VyY2UgPVxuICAgICh3b3JrUGVyVGhyZWFkOiBudW1iZXJbXSwgd29ya2dyb3VwU2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCB0eXBlID0gJ2YzMicsIGJhdGNoRGltcz86IEluZGljZXNIZWxwZXIsXG4gICAgIHRyYW5zcG9zZUEgPSBmYWxzZSwgdGlsZUlubmVyID0gMzIsIHNwbGl0SyA9IGZhbHNlLCBzcGxpdGVkRGltSW5uZXIgPSAzMik6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCB0aWxlQU91dGVyID0gd29ya2dyb3VwU2l6ZVsxXSAqIHdvcmtQZXJUaHJlYWRbMV07XG4gICAgICBjb25zdCB0aWxlQk91dGVyID0gd29ya2dyb3VwU2l6ZVswXSAqIHdvcmtQZXJUaHJlYWRbMF07XG4gICAgICBjb25zdCB0aWxlQVdpZHRoID0gdHJhbnNwb3NlQSA/IHRpbGVBT3V0ZXIgOiB0aWxlSW5uZXI7XG4gICAgICBjb25zdCB0aWxlQUhpZ2h0ID0gdHJhbnNwb3NlQSA/IHRpbGVJbm5lciA6IHRpbGVBT3V0ZXI7XG4gICAgICBjb25zdCBpbm5lckVsZW1lbnRTaXplID0gdGlsZUFXaWR0aCAvIHdvcmtncm91cFNpemVbMF07XG4gICAgICBjb25zdCByb3dQZXJUaHJlYWRCID0gdGlsZUlubmVyIC8gd29ya2dyb3VwU2l6ZVsxXTtcblxuICAgICAgaWYgKCEoKCh0cmFuc3Bvc2VBICYmIGlubmVyRWxlbWVudFNpemUgPT09IDQgJiYgd29ya1BlclRocmVhZFsxXSA9PT0gNCkgfHxcbiAgICAgICAgICAgICAoIXRyYW5zcG9zZUEgJiYgKGlubmVyRWxlbWVudFNpemUgPT09IDMgfHwgaW5uZXJFbGVtZW50U2l6ZSA9PT0gNCkpKSAmJlxuICAgICAgICAgICAgdGlsZUFXaWR0aCAlIHdvcmtncm91cFNpemVbMF0gPT09IDAgJiYgdGlsZUlubmVyICUgd29ya2dyb3VwU2l6ZVsxXSA9PT0gMCAmJiB3b3JrUGVyVGhyZWFkWzBdID09PSA0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElmIHRyYW5zcG9zZUEgJHt0cmFuc3Bvc2VBfSBpcyB0cnVlLCBpbm5lckVsZW1lbnRTaXplICR7XG4gICAgICAgICAgICBpbm5lckVsZW1lbnRTaXplfSBhbmQgd29ya1BlclRocmVhZFsxXSAke3dvcmtQZXJUaHJlYWRbMV19IG11c3QgYmUgNC5cbiAgICAgIE90aGVyd2lzZSwgaW5uZXJFbGVtZW50U2l6ZSAke2lubmVyRWxlbWVudFNpemV9IG11c3QgYmUgMyBvciA0LlxuICB0aWxlQVdpZHRoICR7dGlsZUFXaWR0aH0gbXVzdCBiZSBkaXZpc2libGUgYnkgd29ya2dyb3VwU2l6ZVswXSR7d29ya2dyb3VwU2l6ZVswXX0uIHRpbGVJbm5lciAke1xuICAgICAgICAgICAgdGlsZUlubmVyfSBtdXN0IGJlIGRpdmlzaWJsZSBieSB3b3JrZ3JvdXBTaXplWzFdICR7d29ya2dyb3VwU2l6ZVsxXX0uIGNvbFBlclRocmVhZCAke1xuICAgICAgICAgICAgd29ya1BlclRocmVhZFswXX0gbXVzdCBiZSA0LmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBcbnZhcjx3b3JrZ3JvdXA+IG1tX0FzdWI6IGFycmF5PGFycmF5PHZlYyR7aW5uZXJFbGVtZW50U2l6ZX08JHt0eXBlfT4sICR7dGlsZUFXaWR0aCAvIGlubmVyRWxlbWVudFNpemV9PiwgJHt0aWxlQUhpZ2h0fT47XG52YXI8d29ya2dyb3VwPiBtbV9Cc3ViOiBhcnJheTxhcnJheTx2ZWM0PCR7dHlwZX0+LCAke3RpbGVCT3V0ZXIgLyB3b3JrUGVyVGhyZWFkWzBdfT4sICR7dGlsZUlubmVyfT47XG5cbmNvbnN0IHJvd1BlclRocmVhZCA9ICR7d29ya1BlclRocmVhZFsxXX07XG5jb25zdCBjb2xQZXJUaHJlYWQgPSAke3dvcmtQZXJUaHJlYWRbMF19O1xuY29uc3QgaW5uZXJFbGVtZW50U2l6ZSA9ICR7aW5uZXJFbGVtZW50U2l6ZX07XG5jb25zdCB0aWxlSW5uZXIgPSAke3RpbGVJbm5lcn07XG5cbkBjb21wdXRlIEB3b3JrZ3JvdXBfc2l6ZSgke3dvcmtncm91cFNpemVbMF19LCAke3dvcmtncm91cFNpemVbMV19LCAke3dvcmtncm91cFNpemVbMl19KVxuZm4gbWFpbihAYnVpbHRpbihsb2NhbF9pbnZvY2F0aW9uX2lkKSBsb2NhbElkIDogdmVjMzx1MzI+LFxuICAgICAgICBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgZ2xvYmFsSWQgOiB2ZWMzPHUzMj4sXG4gICAgICAgIEBidWlsdGluKHdvcmtncm91cF9pZCkgd29ya2dyb3VwSWQgOiB2ZWMzPHUzMj4pIHtcbiAgbGV0IGxvY2FsUm93ID0gaTMyKGxvY2FsSWQueSk7XG4gIGxldCB0aWxlUm93ID0gbG9jYWxSb3cgKiByb3dQZXJUaHJlYWQ7XG4gIGxldCB0aWxlQ29sID0gaTMyKGxvY2FsSWQueCk7XG5cbiAgbGV0IGdsb2JhbFJvdyA9aTMyKGdsb2JhbElkLnkpICogcm93UGVyVGhyZWFkO1xuICBsZXQgZ2xvYmFsQ29sID0gaTMyKGdsb2JhbElkLngpO1xuICBsZXQgYmF0Y2ggPSAke3NwbGl0SyA/ICcwJyA6ICdpMzIoZ2xvYmFsSWQueiknfTtcbiAgJHtiYXRjaERpbXMgPyBgbGV0IGJhdGNoSW5kaWNlcyA9ICR7YmF0Y2hEaW1zLm9mZnNldFRvSW5kaWNlcygndTMyKGJhdGNoKScpfTtgIDogJyd9XG4gIGxldCBnbG9iYWxSb3dTdGFydCA9IGkzMih3b3JrZ3JvdXBJZC55KSAqICR7dGlsZUFPdXRlcn07XG5cbiAgbGV0IG51bV90aWxlcyA9ICR7c3BsaXRLID8gYCR7TWF0aC5jZWlsKHNwbGl0ZWREaW1Jbm5lciAvIHRpbGVJbm5lcil9YCA6ICcodW5pZm9ybXMuZGltX2lubmVyIC0gMSkgLyB0aWxlSW5uZXIgKyAxJ307XG4gIHZhciBrU3RhcnQgPSAke3NwbGl0SyA/IGBpMzIoZ2xvYmFsSWQueikgKiAke3NwbGl0ZWREaW1Jbm5lcn1gIDogJzAnfTtcblxuICB2YXIgYWNjOiBhcnJheTx2ZWM0PCR7dHlwZX0+LCByb3dQZXJUaHJlYWQ+O1xuXG4gIC8vIExvb3Agb3ZlciBzaGFyZWQgZGltZW5zaW9uLlxuICBsZXQgdGlsZVJvd0IgPSBsb2NhbFJvdyAqICR7cm93UGVyVGhyZWFkQn07XG4gIGZvciAodmFyIHQgPSAwOyB0IDwgbnVtX3RpbGVzOyB0ID0gdCArIDEpIHtcbiAgICAgIC8vIExvYWQgb25lIHRpbGUgb2YgQSBpbnRvIGxvY2FsIG1lbW9yeS5cbiAgICAgIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gICAgICAgICAgbGV0IGlucHV0Um93ID0gdGlsZVJvdyArIGlubmVyUm93O1xuICAgICAgICAgIGxldCBpbnB1dENvbCA9IHRpbGVDb2w7XG4gICAgICAgICAgJHt3cml0ZURhdGFUb1N1YkFWZWM0U25pcHBldCh0cmFuc3Bvc2VBLCBiYXRjaERpbXMpfVxuICAgICAgfVxuXG4gICAgICAvLyBMb2FkIG9uZSB0aWxlIG9mIEIgaW50byBsb2NhbCBtZW1vcnkuXG4gICAgICBmb3IgKHZhciBpbm5lclJvdyA9IDA7IGlubmVyUm93IDwgJHtyb3dQZXJUaHJlYWRCfTsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICAgICAgICBsZXQgaW5wdXRSb3cgPSB0aWxlUm93QiArIGlubmVyUm93O1xuICAgICAgICAgIGxldCBpbnB1dENvbCA9IHRpbGVDb2w7XG4gICAgICAgICAgbW1fQnN1YltpbnB1dFJvd11baW5wdXRDb2xdID0gbW1fcmVhZEIoYmF0Y2gsIGtTdGFydCArIGlucHV0Um93LCBnbG9iYWxDb2wke1xuICAgICAgICAgIGJhdGNoRGltcyA/ICcsIGJhdGNoSW5kaWNlcycgOiAnJ30pO1xuICAgICAgfVxuICAgICAga1N0YXJ0ID0ga1N0YXJ0ICsgdGlsZUlubmVyO1xuICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgICAvLyBDb21wdXRlIGFjYyB2YWx1ZXMgZm9yIGEgc2luZ2xlIHRocmVhZC5cbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGlsZUlubmVyIC8gaW5uZXJFbGVtZW50U2l6ZTsgayA9IGsgKyAxKSB7XG4gICAgICAgICAgbGV0IEJDYWNoZWQwID0gbW1fQnN1YltrICogaW5uZXJFbGVtZW50U2l6ZV1bdGlsZUNvbF07XG4gICAgICAgICAgbGV0IEJDYWNoZWQxID0gbW1fQnN1YltrICogaW5uZXJFbGVtZW50U2l6ZSArIDFdW3RpbGVDb2xdO1xuICAgICAgICAgIGxldCBCQ2FjaGVkMiA9IG1tX0JzdWJbayAqIGlubmVyRWxlbWVudFNpemUgKyAyXVt0aWxlQ29sXTtcbiAgICAgICAgICAke2lubmVyRWxlbWVudFNpemUgPT09IDMgPyAnJyA6ICdsZXQgQkNhY2hlZDMgPSBtbV9Cc3ViW2sgKiBpbm5lckVsZW1lbnRTaXplICsgM11bdGlsZUNvbF07J31cblxuICAgICAgICAgICR7Y2FsY3VsYXRlUmVzdWx0U25pcHBldCh0cmFuc3Bvc2VBLCBpbm5lckVsZW1lbnRTaXplKX1cbiAgICAgIH1cblxuICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICB9XG5cbiAgZm9yICh2YXIgaW5uZXJSb3cgPSAwOyBpbm5lclJvdyA8IHJvd1BlclRocmVhZDsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICAgIG1tX3dyaXRlKGJhdGNoLCBnbG9iYWxSb3cgKyBpbm5lclJvdywgZ2xvYmFsQ29sLCBhY2NbaW5uZXJSb3ddKTtcbiAgfVxufWA7XG4gICAgfTtcblxuY29uc3Qgd3JpdGVEYXRhVG9TdWJBU25pcHBldCA9ICh0cmFuc3Bvc2U6IGJvb2xlYW4sIGJhdGNoRGltcz86IEluZGljZXNIZWxwZXIpID0+IHtcbiAgaWYgKHRyYW5zcG9zZSkge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICBtbV9Bc3ViW2lucHV0Um93XVtpbnB1dENvbF0gPSBtbV9yZWFkQShiYXRjaCxcbiAgICAgICAgICAgICAga1N0YXJ0ICsgaW5wdXRSb3csXG4gICAgICAgICAgICAgIGdsb2JhbFJvd1N0YXJ0ICsgaW5wdXRDb2wke2JhdGNoRGltcyA/ICcsIGJhdGNoSW5kaWNlcycgOiAnJ30pO1xuICAgICAgICAgICAgYDtcblxuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICBtbV9Bc3ViW2lucHV0Um93XVtpbnB1dENvbF0gPSBtbV9yZWFkQShiYXRjaCxcbiAgICAgICAgICAgICAgZ2xvYmFsUm93U3RhcnQgKyBpbnB1dFJvdyxcbiAgICAgICAgICAgICAga1N0YXJ0ICsgaW5wdXRDb2wke2JhdGNoRGltcyA/ICcsIGJhdGNoSW5kaWNlcycgOiAnJ30pO1xuICAgICAgICAgICAgYDtcbiAgfVxufTtcblxuY29uc3QgcmVhZERhdGFGcm9tU3ViQVNuaXBwZXQgPSAodHJhbnNwb3NlQTogYm9vbGVhbikgPT5cbiAgICB0cmFuc3Bvc2VBID8gJ2xldCBBQ2FjaGVkID0gbW1fQXN1YltrXVt0aWxlUm93ICsgaW5uZXJSb3ddOycgOiAnbGV0IEFDYWNoZWQgPSBtbV9Bc3ViW3RpbGVSb3cgKyBpbm5lclJvd11ba107JztcblxuLy8gc2VxdWVudGlhbEFjY2Vzc0J5VGhyZWFkcyBtZWFucyBzZXF1ZW50aWFsIGRhdGEgaW4gbWVtb3J5IGlzIGFjY2Vzc2VkIGJ5XG4vLyB0aHJlYWRzLCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHRocmVhZCAoZGVmYXVsdCBiZWhhdmlvcikuXG5leHBvcnQgY29uc3QgbWFrZU1hdE11bFBhY2tlZFNvdXJjZSA9XG4gICAgKHdvcmtQZXJUaHJlYWQ6IG51bWJlcltdLCB3b3JrZ3JvdXBTaXplOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHR5cGUgPSAnZjMyJywgYmF0Y2hEaW1zPzogSW5kaWNlc0hlbHBlcixcbiAgICAgdHJhbnNwb3NlQSA9IGZhbHNlLCB0aWxlSW5uZXIgPSAzMiwgc3BsaXRLID0gZmFsc2UsIHNwbGl0ZWREaW1Jbm5lciA9IDMyLFxuICAgICBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgdGlsZUFPdXRlciA9IHdvcmtQZXJUaHJlYWRbMV0gKiB3b3JrZ3JvdXBTaXplWzFdO1xuICAgICAgY29uc3QgdGlsZUJPdXRlciA9IHdvcmtQZXJUaHJlYWRbMF0gKiB3b3JrZ3JvdXBTaXplWzBdO1xuICAgICAgY29uc3QgdGlsZUFXaWR0aCA9IHRyYW5zcG9zZUEgPyB0aWxlQU91dGVyIDogdGlsZUlubmVyO1xuICAgICAgY29uc3QgdGlsZUFIaWdodCA9IHRyYW5zcG9zZUEgPyB0aWxlSW5uZXIgOiB0aWxlQU91dGVyO1xuXG4gICAgICBpZiAoISh0aWxlQUhpZ2h0ICUgd29ya2dyb3VwU2l6ZVsxXSA9PT0gMCAmJiB0aWxlQVdpZHRoICUgd29ya2dyb3VwU2l6ZVswXSA9PT0gMCAmJlxuICAgICAgICAgICAgdGlsZUlubmVyICUgd29ya2dyb3VwU2l6ZVsxXSA9PT0gMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0aWxlQUhpZ2h0ICR7dGlsZUFIaWdodH0gbXVzdCBiZSBkaXZpc2libGUgYnkgd29ya2dyb3VwU2l6ZVsxXSR7XG4gICAgICAgICAgICB3b3JrZ3JvdXBTaXplWzFdfSwgdGlsZUFXaWR0aCAke3RpbGVBV2lkdGh9IG11c3QgYmUgZGl2aXNpYmxlIGJ5IHdvcmtncm91cFNpemVbMF0ke1xuICAgICAgICAgICAgd29ya2dyb3VwU2l6ZVswXX0sIHRpbGVJbm5lciAke3RpbGVJbm5lcn0gbXVzdCBiZSBkaXZpc2libGUgYnkgd29ya2dyb3VwU2l6ZVsxXSR7d29ya2dyb3VwU2l6ZVsxXX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvd1BlclRocmVhZEEgPSB0aWxlQUhpZ2h0IC8gd29ya2dyb3VwU2l6ZVsxXTtcbiAgICAgIGNvbnN0IGNvbFBlclRocmVhZEEgPSB0aWxlQVdpZHRoIC8gd29ya2dyb3VwU2l6ZVswXTtcbiAgICAgIGNvbnN0IHJvd1BlclRocmVhZEIgPSB0aWxlSW5uZXIgLyB3b3JrZ3JvdXBTaXplWzFdO1xuICAgICAgY29uc3QgbWF0bXVsU25pcHBldCA9IHNlcXVlbnRpYWxBY2Nlc3NCeVRocmVhZHMgP1xuICAgICAgICAgIGBcbiAgICBsZXQgbG9jYWxSb3cgPSBpMzIobG9jYWxJZC55KTtcbiAgICBsZXQgbG9jYWxDb2wgPSBpMzIobG9jYWxJZC54KTtcbiAgICBsZXQgZ2xvYmFsUm93U3RhcnQgPSBpMzIod29ya2dyb3VwSWQueSkgKiAke3RpbGVBT3V0ZXJ9O1xuICAgIGxldCBnbG9iYWxDb2xTdGFydCA9IGkzMih3b3JrZ3JvdXBJZC54KSAqICR7dGlsZUJPdXRlcn07XG5cbiAgICAvLyBMb29wIG92ZXIgc2hhcmVkIGRpbWVuc2lvbi5cbiAgICBmb3IgKHZhciB0ID0gMDsgdCA8IG51bV90aWxlczsgdCA9IHQgKyAxKSB7XG4gICAgICAvLyBMb2FkIG9uZSB0aWxlIG9mIEEgaW50byBsb2NhbCBtZW1vcnkuXG4gICAgICBmb3IgKHZhciBpbnB1dFJvdyA9IGxvY2FsUm93OyBpbnB1dFJvdyA8ICR7dGlsZUFIaWdodH07IGlucHV0Um93ID0gaW5wdXRSb3cgKyAke3dvcmtncm91cFNpemVbMV19KSB7XG4gICAgICAgIGZvciAodmFyIGlucHV0Q29sID0gbG9jYWxDb2w7IGlucHV0Q29sIDwgJHt0aWxlQVdpZHRofTsgaW5wdXRDb2wgPSBpbnB1dENvbCArICR7d29ya2dyb3VwU2l6ZVswXX0pIHtcbiAgICAgICAgICAke3dyaXRlRGF0YVRvU3ViQVNuaXBwZXQodHJhbnNwb3NlQSwgYmF0Y2hEaW1zKX1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gTG9hZCBvbmUgdGlsZSBvZiBCIGludG8gbG9jYWwgbWVtb3J5LlxuICAgICAgZm9yICh2YXIgaW5wdXRSb3cgPSBsb2NhbFJvdzsgaW5wdXRSb3cgPCAke3RpbGVJbm5lcn07IGlucHV0Um93ID0gaW5wdXRSb3cgKyAke3dvcmtncm91cFNpemVbMV19KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpbnB1dENvbCA9IGxvY2FsQ29sOyBpbnB1dENvbCA8ICR7dGlsZUJPdXRlcn07IGlucHV0Q29sID0gaW5wdXRDb2wgKyAke3dvcmtncm91cFNpemVbMF19KSB7XG4gICAgICAgICAgbW1fQnN1YltpbnB1dFJvd11baW5wdXRDb2xdID0gbW1fcmVhZEIoYmF0Y2gsXG4gICAgICAgICAgICBrU3RhcnQgKyBpbnB1dFJvdyxcbiAgICAgICAgICAgIGdsb2JhbENvbFN0YXJ0ICsgaW5wdXRDb2wke2JhdGNoRGltcyA/ICcsIGJhdGNoSW5kaWNlcycgOiAnJ30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBrU3RhcnQgPSBrU3RhcnQgKyB0aWxlSW5uZXI7XG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAgIC8vIENvbXB1dGUgYWNjIHZhbHVlcyBmb3IgYSBzaW5nbGUgdGhyZWFkLlxuICAgICAgdmFyIEJDYWNoZWQgOiBhcnJheTwke3R5cGV9LCBjb2xQZXJUaHJlYWQ+O1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aWxlSW5uZXI7IGsgPSBrICsgMSkge1xuICAgICAgICBmb3IgKHZhciBpbm5lciA9IDA7IGlubmVyIDwgY29sUGVyVGhyZWFkOyBpbm5lciA9IGlubmVyICsgMSkge1xuICAgICAgICAgIEJDYWNoZWRbaW5uZXJdID0gbW1fQnN1YltrXVtsb2NhbENvbCArIGlubmVyICogJHt3b3JrZ3JvdXBTaXplWzBdfV07XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaW5uZXJSb3cgPSAwOyBpbm5lclJvdyA8IHJvd1BlclRocmVhZDsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICAgICAgICBsZXQgQUNhY2hlZCA9ICR7XG4gICAgICAgICAgICAgIHRyYW5zcG9zZUEgPyBgbW1fQXN1YltrXVtsb2NhbFJvdyArIGlubmVyUm93ICogJHt3b3JrZ3JvdXBTaXplWzFdfV07YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBgbW1fQXN1Yltsb2NhbFJvdyArIGlubmVyUm93ICogJHt3b3JrZ3JvdXBTaXplWzFdfV1ba107YH1cbiAgICAgICAgICBmb3IgKHZhciBpbm5lckNvbCA9IDA7IGlubmVyQ29sIDwgY29sUGVyVGhyZWFkOyBpbm5lckNvbCA9IGlubmVyQ29sICsgMSkge1xuICAgICAgICAgICAgYWNjW2lubmVyUm93XVtpbm5lckNvbF0gPSBhY2NbaW5uZXJSb3ddW2lubmVyQ29sXSArXG4gICAgICAgICAgICAgICAgQUNhY2hlZCAqIEJDYWNoZWRbaW5uZXJDb2xdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpbm5lclJvdyA9IDA7IGlubmVyUm93IDwgcm93UGVyVGhyZWFkOyBpbm5lclJvdyA9IGlubmVyUm93ICsgMSkge1xuICAgICAgbGV0IGdSb3cgPSBnbG9iYWxSb3dTdGFydCArIGxvY2FsUm93ICsgaW5uZXJSb3cgKiAke3dvcmtncm91cFNpemVbMV19O1xuICAgICAgZm9yICh2YXIgaW5uZXJDb2wgPSAwOyBpbm5lckNvbCA8IGNvbFBlclRocmVhZDsgaW5uZXJDb2wgPSBpbm5lckNvbCArIDEpIHtcbiAgICAgICAgbGV0IGdDb2wgPSBnbG9iYWxDb2xTdGFydCArIGxvY2FsQ29sICsgaW5uZXJDb2wgKiAke3dvcmtncm91cFNpemVbMF19O1xuICAgICAgICBtbV93cml0ZShiYXRjaCwgZ1JvdywgZ0NvbCwgYWNjW2lubmVyUm93XVtpbm5lckNvbF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBgIDpcbiAgICAgICAgICBgXG5sZXQgdGlsZVJvdyA9IGkzMihsb2NhbElkLnkpICogcm93UGVyVGhyZWFkO1xubGV0IHRpbGVDb2wgPSBpMzIobG9jYWxJZC54KSAqIGNvbFBlclRocmVhZDtcblxubGV0IGdsb2JhbFJvdyA9IGkzMihnbG9iYWxJZC55KSAqIHJvd1BlclRocmVhZDtcbmxldCBnbG9iYWxDb2wgPSBpMzIoZ2xvYmFsSWQueCkgKiBjb2xQZXJUaHJlYWQ7XG5sZXQgZ2xvYmFsUm93U3RhcnQgPSBpMzIod29ya2dyb3VwSWQueSkgKiAke3RpbGVBT3V0ZXJ9O1xuXG5sZXQgdGlsZVJvd0EgPSBpMzIobG9jYWxJZC55KSAqICR7cm93UGVyVGhyZWFkQX07XG5sZXQgdGlsZUNvbEEgPSBpMzIobG9jYWxJZC54KSAqICR7Y29sUGVyVGhyZWFkQX07XG5sZXQgdGlsZVJvd0IgPSBpMzIobG9jYWxJZC55KSAqICR7cm93UGVyVGhyZWFkQn07XG4vLyBMb29wIG92ZXIgc2hhcmVkIGRpbWVuc2lvbi5cbmZvciAodmFyIHQgPSAwOyB0IDwgbnVtX3RpbGVzOyB0ID0gdCArIDEpIHtcbiAgLy8gTG9hZCBvbmUgdGlsZSBvZiBBIGludG8gbG9jYWwgbWVtb3J5LlxuICBmb3IgKHZhciBpbm5lclJvdyA9IDA7IGlubmVyUm93IDwgJHtyb3dQZXJUaHJlYWRBfTsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICBmb3IgKHZhciBpbm5lckNvbCA9IDA7IGlubmVyQ29sIDwgJHtjb2xQZXJUaHJlYWRBfTsgaW5uZXJDb2wgPSBpbm5lckNvbCArIDEpIHtcbiAgICAgIGxldCBpbnB1dFJvdyA9IHRpbGVSb3dBICsgaW5uZXJSb3c7XG4gICAgICBsZXQgaW5wdXRDb2wgPSB0aWxlQ29sQSArIGlubmVyQ29sO1xuICAgICAgJHt3cml0ZURhdGFUb1N1YkFTbmlwcGV0KHRyYW5zcG9zZUEsIGJhdGNoRGltcyl9XG4gICAgfVxuICB9XG5cbiAgLy8gTG9hZCBvbmUgdGlsZSBvZiBCIGludG8gbG9jYWwgbWVtb3J5LlxuICBmb3IgKHZhciBpbm5lclJvdyA9IDA7IGlubmVyUm93IDwgJHtyb3dQZXJUaHJlYWRCfTsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICBmb3IgKHZhciBpbm5lckNvbCA9IDA7IGlubmVyQ29sIDwgY29sUGVyVGhyZWFkOyBpbm5lckNvbCA9IGlubmVyQ29sICsgMSkge1xuICAgICAgbGV0IGlucHV0Um93ID0gdGlsZVJvd0IgKyBpbm5lclJvdztcbiAgICAgIGxldCBpbnB1dENvbCA9IHRpbGVDb2wgKyBpbm5lckNvbDtcbiAgICAgIG1tX0JzdWJbaW5wdXRSb3ddW2lucHV0Q29sXSA9IG1tX3JlYWRCKGJhdGNoLFxuICAgICAgICBrU3RhcnQgKyBpbnB1dFJvdyxcbiAgICAgICAgZ2xvYmFsQ29sICsgaW5uZXJDb2wke2JhdGNoRGltcyA/ICcsIGJhdGNoSW5kaWNlcycgOiAnJ30pO1xuICAgIH1cbiAgfVxuICBrU3RhcnQgPSBrU3RhcnQgKyB0aWxlSW5uZXI7XG4gIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAvLyBDb21wdXRlIGFjYyB2YWx1ZXMgZm9yIGEgc2luZ2xlIHRocmVhZC5cbiAgdmFyIEJDYWNoZWQgOiBhcnJheTwke3R5cGV9LCBjb2xQZXJUaHJlYWQ+O1xuICBmb3IgKHZhciBrID0gMDsgayA8IHRpbGVJbm5lcjsgayA9IGsgKyAxKSB7XG4gICAgZm9yICh2YXIgaW5uZXIgPSAwOyBpbm5lciA8IGNvbFBlclRocmVhZDsgaW5uZXIgPSBpbm5lciArIDEpIHtcbiAgICAgIEJDYWNoZWRbaW5uZXJdID0gbW1fQnN1YltrXVt0aWxlQ29sICsgaW5uZXJdO1xuICAgIH1cblxuICAgIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gICAgICAke3JlYWREYXRhRnJvbVN1YkFTbmlwcGV0KHRyYW5zcG9zZUEpfVxuICAgICAgZm9yICh2YXIgaW5uZXJDb2wgPSAwOyBpbm5lckNvbCA8IGNvbFBlclRocmVhZDsgaW5uZXJDb2wgPSBpbm5lckNvbCArIDEpIHtcbiAgICAgICAgYWNjW2lubmVyUm93XVtpbm5lckNvbF0gPSBhY2NbaW5uZXJSb3ddW2lubmVyQ29sXSArIEFDYWNoZWQgKiBCQ2FjaGVkW2lubmVyQ29sXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG59XG5cbmZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gIGZvciAodmFyIGlubmVyQ29sID0gMDsgaW5uZXJDb2wgPCBjb2xQZXJUaHJlYWQ7IGlubmVyQ29sID0gaW5uZXJDb2wgKyAxKSB7XG4gICAgbW1fd3JpdGUoYmF0Y2gsIGdsb2JhbFJvdyArIGlubmVyUm93LCBnbG9iYWxDb2wgKyBpbm5lckNvbCxcbiAgICAgICAgYWNjW2lubmVyUm93XVtpbm5lckNvbF0pO1xuICB9XG59XG5gO1xuXG4gICAgICByZXR1cm4gYFxuICB2YXI8d29ya2dyb3VwPiBtbV9Bc3ViIDogYXJyYXk8YXJyYXk8JHt0eXBlfSwgJHt0aWxlQVdpZHRofT4sICR7dGlsZUFIaWdodH0+O1xuICB2YXI8d29ya2dyb3VwPiBtbV9Cc3ViIDogYXJyYXk8YXJyYXk8JHt0eXBlfSwgJHt0aWxlQk91dGVyfT4sICR7dGlsZUlubmVyfT47XG4gIGNvbnN0IHJvd1BlclRocmVhZCA9ICR7d29ya1BlclRocmVhZFsxXX07XG4gIGNvbnN0IGNvbFBlclRocmVhZCA9ICR7d29ya1BlclRocmVhZFswXX07XG4gIGNvbnN0IHRpbGVJbm5lciA9ICR7dGlsZUlubmVyfTtcblxuQGNvbXB1dGUgQHdvcmtncm91cF9zaXplKCR7d29ya2dyb3VwU2l6ZVswXX0sICR7d29ya2dyb3VwU2l6ZVsxXX0sICR7d29ya2dyb3VwU2l6ZVsyXX0pXG5mbiBtYWluKEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faWQpIGxvY2FsSWQgOiB2ZWMzPHUzMj4sXG4gICAgICAgIEBidWlsdGluKGdsb2JhbF9pbnZvY2F0aW9uX2lkKSBnbG9iYWxJZCA6IHZlYzM8dTMyPixcbiAgICAgICAgQGJ1aWx0aW4od29ya2dyb3VwX2lkKSB3b3JrZ3JvdXBJZCA6IHZlYzM8dTMyPikge1xuICAgIGxldCBiYXRjaCA9ICR7c3BsaXRLID8gJzAnIDogJ2kzMihnbG9iYWxJZC56KSd9O1xuICAgICR7YmF0Y2hEaW1zID8gYGxldCBiYXRjaEluZGljZXMgPSAke2JhdGNoRGltcy5vZmZzZXRUb0luZGljZXMoJ3UzMihiYXRjaCknKX07YCA6ICcnfVxuICAgIGxldCBudW1fdGlsZXMgPSAke1xuICAgICAgICAgIHNwbGl0SyA/IGAke01hdGguY2VpbChzcGxpdGVkRGltSW5uZXIgLyB0aWxlSW5uZXIpfWAgOiAnKHVuaWZvcm1zLmRpbV9pbm5lciAtIDEpIC8gdGlsZUlubmVyICsgMSd9O1xuICAgIHZhciBrU3RhcnQgPSAke3NwbGl0SyA/IGBpMzIoZ2xvYmFsSWQueikgKiAke3NwbGl0ZWREaW1Jbm5lcn1gIDogJzAnfTtcblxuICAgIHZhciBhY2MgOiBhcnJheTxhcnJheTwke3R5cGV9LCBjb2xQZXJUaHJlYWQ+LCByb3dQZXJUaHJlYWQ+O1xuXG4gICAgLy8gV2l0aG91dCB0aGlzIGluaXRpYWxpemF0aW9uIHN0cmFuZ2UgdmFsdWVzIHNob3cgdXAgaW4gYWNjLlxuICAgIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gICAgICBmb3IgKHZhciBpbm5lckNvbCA9IDA7IGlubmVyQ29sIDwgY29sUGVyVGhyZWFkOyBpbm5lckNvbCA9IGlubmVyQ29sICsgMSkge1xuICAgICAgICBhY2NbaW5uZXJSb3ddW2lubmVyQ29sXSA9IDAuMDtcbiAgICAgIH1cbiAgICB9XG4gICAgJHttYXRtdWxTbmlwcGV0fVxuICB9XG5gO1xuICAgIH07XG5cbmNvbnN0IG1hdE11bFJlYWRXcml0ZUZuU291cmNlID1cbiAgICAoY29tcG9uZW50OiBudW1iZXIsIGhhc0JpYXM6IGJvb2xlYW4sIGFwcGx5QWN0aXZhdGlvbjogc3RyaW5nLCB2YXJpYWJsZXM6IEluZGljZXNIZWxwZXJbXSxcbiAgICAgYmF0Y2hTaGFwZXM6IEFycmF5PHJlYWRvbmx5IG51bWJlcltdPiwgaXNDaGFubmVsc0xhc3QgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCBbYmF0Y2hBU2hhcGUsIGJhdGNoQlNoYXBlLCBiYXRjaFNoYXBlXSA9IGJhdGNoU2hhcGVzO1xuICAgICAgY29uc3QgW2JhdGNoVmFyaWFibGUsIGFWYXJpYWJsZSwgYlZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZV0gPSB2YXJpYWJsZXM7XG4gICAgICBjb25zdCBicm9hZENhc3RBRGltcyA9IGdldEJyb2FkY2FzdERpbXMoYmF0Y2hBU2hhcGUsIGJhdGNoU2hhcGUpO1xuICAgICAgY29uc3QgYnJvYWRDYXN0QkRpbXMgPSBnZXRCcm9hZGNhc3REaW1zKGJhdGNoQlNoYXBlLCBiYXRjaFNoYXBlKTtcbiAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKHZhcmlhYmxlc1swXS50eXBlLnRlbnNvcik7XG4gICAgICBjb25zdCBnZXRBSW5kaWNlcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgYVJhbmsgPSBhVmFyaWFibGUucmFuaztcbiAgICAgICAgY29uc3QgYmF0Y2hSYW5rID0gYmF0Y2hWYXJpYWJsZS5yYW5rO1xuICAgICAgICBsZXQgcmVzU3RyID0gYHZhciBhSW5kaWNlczogJHthVmFyaWFibGUudHlwZS5pbmRpY2VzfTtgO1xuICAgICAgICBmb3IgKGxldCBpID0gYVJhbmsgLSAyIC0gMSwgaiA9IGJhdGNoUmFuayAtIDE7IGkgPj0gMDsgaS0tLCBqLS0pIHtcbiAgICAgICAgICByZXNTdHIgKz0gYFxcbmFJbmRpY2VzWyR7aX1dID0gJHtiYXRjaFJhbmsgPiAxID8gYGJhdGNoSW5kaWNlc1ske2p9XWAgOiAnYmF0Y2hJbmRpY2VzJ307YDtcbiAgICAgICAgfVxuICAgICAgICBicm9hZENhc3RBRGltcy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgIHJlc1N0ciArPSBgXFxuYUluZGljZXNbJHtpfV0gPSAwO2A7XG4gICAgICAgIH0pO1xuICAgICAgICByZXNTdHIgKz0gYFxcbmFJbmRpY2VzWyR7YVJhbmsgLSAyfV0gPSB1MzIocm93KTtcbiAgICAgICAgICAgICAgICAgICBhSW5kaWNlc1ske2FSYW5rIC0gMX1dID0gdTMyKGNvbEluKTtgO1xuICAgICAgICByZXR1cm4gcmVzU3RyO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEJJbmRpY2VzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBiUmFuayA9IGJWYXJpYWJsZS5yYW5rO1xuICAgICAgICBjb25zdCBiYXRjaFJhbmsgPSBiYXRjaFZhcmlhYmxlLnJhbms7XG4gICAgICAgIGxldCByZXNTdHIgPSBgdmFyIGJJbmRpY2VzOiAke2JWYXJpYWJsZS50eXBlLmluZGljZXN9O2A7XG4gICAgICAgIGZvciAobGV0IGkgPSBiUmFuayAtIDIgLSAxLCBqID0gYmF0Y2hSYW5rIC0gMTsgaSA+PSAwOyBpLS0sIGotLSkge1xuICAgICAgICAgIHJlc1N0ciArPSBgXFxuYkluZGljZXNbJHtpfV0gPSAke2JhdGNoUmFuayA+IDEgPyBgYmF0Y2hJbmRpY2VzWyR7an1dYCA6ICdiYXRjaEluZGljZXMnfTtgO1xuICAgICAgICB9XG4gICAgICAgIGJyb2FkQ2FzdEJEaW1zLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgcmVzU3RyICs9IGBcXG5iSW5kaWNlc1ske2l9XSA9IDA7YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc1N0ciArPSBgXFxuYkluZGljZXNbJHtiUmFuayAtIDJ9XSA9IHUzMihyb3cpO1xuICAgICAgICAgICAgICAgICAgIGJJbmRpY2VzWyR7YlJhbmsgLSAxfV0gPSB1MzIoY29sSW4pO2A7XG4gICAgICAgIHJldHVybiByZXNTdHI7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc291cmNlID0gYFxuICAgIGZuIG1tX3JlYWRBKGJhdGNoOiBpMzIsIHJvdzogaTMyLCBjb2xJbjogaTMyLCBiYXRjaEluZGljZXM6ICR7YmF0Y2hWYXJpYWJsZS50eXBlLmluZGljZXN9KSAtPiAke1xuICAgICAgICAgIHR5cGVTbmlwcGV0KGNvbXBvbmVudCwgZGF0YVR5cGUpfSB7XG4gICAgICB2YXIgdmFsdWUgPSAke3R5cGVTbmlwcGV0KGNvbXBvbmVudCwgZGF0YVR5cGUpfSgwLjApO1xuICAgICAgbGV0IGNvbCA9IGNvbEluICogJHtjb21wb25lbnR9O1xuICAgICAgaWYocm93IDwgdW5pZm9ybXMuZGltX2Ffb3V0ZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2lubmVyKVxuICAgICAge1xuICAgICAgICAke2dldEFJbmRpY2VzKCl9XG4gICAgICAgIHZhbHVlID0gJHthVmFyaWFibGUuZ2V0QnlJbmRpY2VzKCdhSW5kaWNlcycpfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmbiBtbV9yZWFkQihiYXRjaDogaTMyLCByb3c6IGkzMiwgY29sSW46IGkzMiwgYmF0Y2hJbmRpY2VzOiAke2JhdGNoVmFyaWFibGUudHlwZS5pbmRpY2VzfSkgLT4gJHtcbiAgICAgICAgICB0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0ge1xuICAgICAgdmFyIHZhbHVlID0gJHt0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0oMC4wKTtcbiAgICAgIGxldCBjb2wgPSBjb2xJbiAqICR7Y29tcG9uZW50fTtcbiAgICAgIGlmKHJvdyA8IHVuaWZvcm1zLmRpbV9pbm5lciAmJiBjb2wgPCB1bmlmb3Jtcy5kaW1fYl9vdXRlcilcbiAgICAgIHtcbiAgICAgICAgJHtnZXRCSW5kaWNlcygpfVxuICAgICAgICB2YWx1ZSA9ICR7YlZhcmlhYmxlLmdldEJ5SW5kaWNlcygnYkluZGljZXMnKX07XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZm4gbW1fd3JpdGUoYmF0Y2g6IGkzMiwgcm93OiBpMzIsIGNvbEluOiBpMzIsIHZhbHVlSW46ICR7dHlwZVNuaXBwZXQoY29tcG9uZW50LCBkYXRhVHlwZSl9KSB7XG4gICAgICBsZXQgY29sID0gY29sSW4gKiAke2NvbXBvbmVudH07XG4gICAgICBpZiAocm93IDwgdW5pZm9ybXMuZGltX2Ffb3V0ZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2Jfb3V0ZXIpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVJbjtcbiAgICAgICAgbGV0IGNvb3JkcyA9IHZlYzM8aTMyPihiYXRjaCwgcm93LCBjb2xJbik7XG4gICAgICAgICR7XG4gICAgICAgICAgaGFzQmlhcyA/XG4gICAgICAgICAgICAgIGB2YWx1ZSA9IHZhbHVlICsgJHtpc0NoYW5uZWxzTGFzdCA/ICdiaWFzW2NvbEluXScgOiBgJHt0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0oYmlhc1tyb3ddKWB9O2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgJHthcHBseUFjdGl2YXRpb259XG4gICAgICAgICR7b3V0cHV0VmFyaWFibGUuc2V0QnlJbmRpY2VzKCd2ZWMzPHUzMj4oY29vcmRzKScsICd2YWx1ZScpfVxuICAgICAgfVxuICAgIH1cbiAgICBgO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTWF0bXVsUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYWN0aXZhdGlvbkF0dHJpYnV0ZXM6IEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgcmVzaGFwZWRPdXRwdXRTaGFwZT86IHJlYWRvbmx5IG51bWJlcltdLFxuICAgICBpc0NoYW5uZWxzTGFzdCA9IGZhbHNlIC8qIG9ubHkgdXNlZCBmb3IgY29udjJkQnlNYXRNdWwqLyk6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IGFTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgY29uc3QgYlNoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG4gICAgICBjb25zdCBvdXRlckRpbXNBID0gYVNoYXBlLnNsaWNlKDAsIC0yKTtcbiAgICAgIGNvbnN0IG91dGVyRGltc0IgPSBiU2hhcGUuc2xpY2UoMCwgLTIpO1xuICAgICAgY29uc3Qgb3V0ZXJEaW1zID0gcmVzaGFwZWRPdXRwdXRTaGFwZSA/IHJlc2hhcGVkT3V0cHV0U2hhcGUuc2xpY2UoMCwgLTIpIDogb3V0cHV0U2hhcGUuc2xpY2UoMCwgLTIpO1xuICAgICAgY29uc3QgYmF0Y2hTaXplID0gU2hhcGVVdGlsLnNpemUob3V0ZXJEaW1zKTtcbiAgICAgIGNvbnN0IGRpbUFPdXRlciA9IGFTaGFwZVthU2hhcGUubGVuZ3RoIC0gMl07XG4gICAgICBjb25zdCBkaW1Jbm5lciA9IGFTaGFwZVthU2hhcGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBkaW1CT3V0ZXIgPSBiU2hhcGVbYlNoYXBlLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgaXNWZWM0ID0gZGltSW5uZXIgJSA0ID09PSAwICYmIGRpbUJPdXRlciAlIDQgPT09IDA7XG5cbiAgICAgIC8vIFRPRE86IGZpbmUgdHVuZSBzaXplXG4gICAgICBjb25zdCBlbGVtZW50c1BlclRocmVhZCA9IGRpbUFPdXRlciA8PSA4ID8gWzQsIDEsIDFdIDogWzQsIDQsIDFdO1xuICAgICAgY29uc3Qgd29ya2dyb3VwU2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzgsIDgsIDFdO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSBbXG4gICAgICAgIE1hdGguY2VpbChkaW1CT3V0ZXIgLyB3b3JrZ3JvdXBTaXplWzBdIC8gZWxlbWVudHNQZXJUaHJlYWRbMF0pLFxuICAgICAgICBNYXRoLmNlaWwoZGltQU91dGVyIC8gd29ya2dyb3VwU2l6ZVsxXSAvIGVsZW1lbnRzUGVyVGhyZWFkWzFdKSxcbiAgICAgICAgTWF0aC5jZWlsKGJhdGNoU2l6ZSAvIHdvcmtncm91cFNpemVbMl0gLyBlbGVtZW50c1BlclRocmVhZFsyXSlcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBpc1ZlYzQgPyA0IDogMTtcbiAgICAgIGNvbnN0IGFTaGFwZVRlbXAgPSBbLi4ub3V0ZXJEaW1zQSwgZGltQU91dGVyLCBkaW1Jbm5lciAvIGNvbXBvbmVudHNdO1xuICAgICAgY29uc3QgYVJhbmsgPSBhU2hhcGVUZW1wLmxlbmd0aDtcbiAgICAgIGNvbnN0IGJTaGFwZVRlbXAgPSBbLi4ub3V0ZXJEaW1zQiwgZGltSW5uZXIsIGRpbUJPdXRlciAvIGNvbXBvbmVudHNdO1xuICAgICAgY29uc3QgYlJhbmsgPSBiU2hhcGVUZW1wLmxlbmd0aDtcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlVGVtcCA9IFtiYXRjaFNpemUsIGRpbUFPdXRlciwgZGltQk91dGVyIC8gY29tcG9uZW50c107XG4gICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPSBbXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogZGltQU91dGVyfSwge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBkaW1CT3V0ZXJ9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGRpbUlubmVyfVxuICAgICAgXTtcbiAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEoYWN0aXZhdGlvbkF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3Jtcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRlckRpbXMsIGFTaGFwZVRlbXAsIGJTaGFwZVRlbXApKTtcbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJywgJ3JhbmsnXTtcblxuICAgICAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPiAyO1xuICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzJdLmRpbXMpKTtcbiAgICAgICAgaW5wdXREZXBlbmRlbmNpZXMucHVzaCgncmFuaycpO1xuICAgICAgfVxuICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGVUZW1wKSk7XG5cbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCBiYXRjaFJhbmsgPSBvdXRlckRpbXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBiYXRjaERpbXMgPSBpbnRlcm5hbFZhcmlhYmxlKCdiYXRjaERpbXMnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGJhdGNoUmFuaywgMSk7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0c1swXS5kYXRhVHlwZSk7XG5cbiAgICAgICAgY29uc3QgQSA9IGlucHV0VmFyaWFibGUoJ2EnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGFSYW5rLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgQiA9IGlucHV0VmFyaWFibGUoJ2InLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGJSYW5rLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ3Jlc3VsdCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGVUZW1wLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFyaWFibGVzID0gW0EsIEJdO1xuICAgICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICAgIGNvbnN0IGJpYXNDb21wb25lbnRzID0gaXNDaGFubmVsc0xhc3QgPyBjb21wb25lbnRzIDogMTtcbiAgICAgICAgICBpbnB1dFZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCwgYmlhc0NvbXBvbmVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPVxuICAgICAgICAgICAgW3tuYW1lOiAnZGltX2Ffb3V0ZXInLCB0eXBlOiAnaTMyJ30sIHtuYW1lOiAnZGltX2Jfb3V0ZXInLCB0eXBlOiAnaTMyJ30sIHtuYW1lOiAnZGltX2lubmVyJywgdHlwZTogJ2kzMid9XTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGFjdGl2YXRpb25BdHRyaWJ1dGVzLCB1bmlmb3Jtcyk7XG4gICAgICAgIGNvbnN0IGJhc2VUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKG91dHB1dC50eXBlLnRlbnNvcik7XG4gICAgICAgIGNvbnN0IGFwcGx5QWN0aXZhdGlvbiA9IGdldEFjdGl2YXRpb25TbmlwcGV0KGFjdGl2YXRpb25BdHRyaWJ1dGVzLCBvdXRwdXQudHlwZS52YWx1ZSwgYmFzZVR5cGUpO1xuICAgICAgICBjb25zdCBkZWNsYXJlRnVuY3Rpb25zID0gbWF0TXVsUmVhZFdyaXRlRm5Tb3VyY2UoXG4gICAgICAgICAgICBjb21wb25lbnRzLCBoYXNCaWFzLCBhcHBseUFjdGl2YXRpb24sIFtiYXRjaERpbXMsIEEsIEIsIG91dHB1dF0sIFtvdXRlckRpbXNBLCBvdXRlckRpbXNCLCBvdXRlckRpbXNdLFxuICAgICAgICAgICAgaXNDaGFubmVsc0xhc3QpO1xuICAgICAgICByZXR1cm4gYFxuICAke1xuICAgICAgICAgICAgc2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLnJlZ2lzdGVySW50ZXJuYWxWYXJpYWJsZXMoYmF0Y2hEaW1zKS5kZWNsYXJlVmFyaWFibGVzKFxuICAgICAgICAgICAgICAgIC4uLmlucHV0VmFyaWFibGVzLCBvdXRwdXQpfVxuICAke2RlY2xhcmVGdW5jdGlvbnN9XG4gICR7XG4gICAgICAgICAgICBpc1ZlYzQgPyBtYWtlTWF0TXVsUGFja2VkVmVjNFNvdXJjZShlbGVtZW50c1BlclRocmVhZCwgd29ya2dyb3VwU2l6ZSwgZGF0YVR5cGUsIGJhdGNoRGltcykgOlxuICAgICAgICAgICAgICAgICAgICAgbWFrZU1hdE11bFBhY2tlZFNvdXJjZShlbGVtZW50c1BlclRocmVhZCwgd29ya2dyb3VwU2l6ZSwgZGF0YVR5cGUsIGJhdGNoRGltcyl9XG4gICAgICAgICAgICAgICAgICAgYDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnTWF0TXVsJyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHtcbiAgICAgICAgICBoaW50OiBgJHtlbGVtZW50c1BlclRocmVhZH07JHthY3RpdmF0aW9uQXR0cmlidXRlcy5hY3RpdmF0aW9ufTske2lzVmVjNH07JHtpc0NoYW5uZWxzTGFzdH1gLFxuICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzXG4gICAgICAgIH0sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBkaXNwYXRjaFswXSwgeTogZGlzcGF0Y2hbMV0sIHo6IGRpc3BhdGNoWzJdfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH07XG4gICAgfTtcbiIsICIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIHNhbXBsZWQgZnJvbSBbQHRlbnNvcmZsb3cvdGZqc10gdGZqcy1iYWNrZW5kLXdlYmdwdS9zcmMvY29udjJkX21tX3dlYmdwdS50c1xuLy9cbi8vIG1vZGlmaWVkIHRvIGZpdCB0aGUgbmVlZHMgb2YgdGhlIHByb2plY3RcblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtMT0dfREVCVUd9IGZyb20gJy4uLy4uLy4uL2xvZyc7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7UHJvZ3JhbUluZm8sIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5LCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlLCBVbmlmb3Jtc0FycmF5VHlwZX0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7Q29udkF0dHJpYnV0ZXN9IGZyb20gJy4uL2NvbnYnO1xuaW1wb3J0IHthcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXMsIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEsIGdldEFjdGl2YXRpb25TbmlwcGV0fSBmcm9tICcuLi9mdXNlLXV0aWxzJztcblxuaW1wb3J0IHtiaWFzU25pcHBldCwgdHlwZVNuaXBwZXR9IGZyb20gJy4vYWN0aXZhdGlvbl91dGlsJztcbmltcG9ydCB7dXRpbEZ1bmN0aW9uc30gZnJvbSAnLi9jb252X3V0aWwnO1xuaW1wb3J0IHttYWtlTWF0TXVsUGFja2VkU291cmNlLCBtYWtlTWF0TXVsUGFja2VkVmVjNFNvdXJjZX0gZnJvbSAnLi9tYXRtdWxfcGFja2VkX3dlYmdwdSc7XG5cbmNvbnN0IGNvbnYyZENvbW1vblNuaXBwZXQgPVxuICAgIChpc0NoYW5uZWxzTGFzdDogYm9vbGVhbiwgZml0QU91dGVyOiBib29sZWFuLCBmaXRCT3V0ZXI6IGJvb2xlYW4sIGZpdElubmVyOiBib29sZWFuLCBhZGRCaWFzID0gZmFsc2UsXG4gICAgIGF0dHJpYnV0ZXM6IENvbnZBdHRyaWJ1dGVzLCBpbm5lckVsZW1lbnRTaXplWCA9IDQsIGlubmVyRWxlbWVudFNpemVXID0gNCwgaW5uZXJFbGVtZW50U2l6ZSA9IDQsXG4gICAgIGRhdGFUeXBlID0gJ2YzMicpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgZ2V0WFNuaXBwZXQgPSAoaW5uZXJFbGVtZW50U2l6ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaW5uZXJFbGVtZW50U2l6ZSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiAncmVzRGF0YSA9IHhbeEluZGV4XTsnO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiBgcmVzRGF0YSA9IHZlYzM8JHtkYXRhVHlwZX0+KHhbeEluZGV4XSwgeFt4SW5kZXggKyAxXSwgeFt4SW5kZXggKyAyXSk7YDtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gJ3Jlc0RhdGEgPSB4W3hJbmRleCAvIDRdOyc7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5uZXJFbGVtZW50U2l6ZSAke2lubmVyRWxlbWVudFNpemV9IGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRXU25pcHBldCA9IChpbm5lckVsZW1lbnRTaXplOiBudW1iZXIpID0+IHtcbiAgICAgICAgc3dpdGNoIChpbm5lckVsZW1lbnRTaXplKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuICdyZXR1cm4gd1tyb3cgKiBpMzIodW5pZm9ybXMud19zaGFwZVszXSkgKyBjb2xJbl07JztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gJ3JldHVybiB3W3JvdyAqIGkzMih1bmlmb3Jtcy53X3NoYXBlWzNdKSAvIDQgKyBjb2xJbl07JztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbm5lckVsZW1lbnRTaXplICR7aW5uZXJFbGVtZW50U2l6ZX0gaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvb3JkQVNuaXBwZXQgPSBpc0NoYW5uZWxzTGFzdCA/IGBcbiAgICBsZXQgY29vcmQgPSB2ZWM0PGkzMj4oYmF0Y2gsIHhSb3csIHhDb2wsIHhDaCk7XG4gICAgYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgbGV0IGNvb3JkID0gdmVjNDxpMzI+KGJhdGNoLCB4Q2gsIHhSb3csIHhDb2wpO1xuICAgIGA7XG5cbiAgICAgIGNvbnN0IGNvb3JkUmVzU25pcHBldCA9IGlzQ2hhbm5lbHNMYXN0ID8gYFxuICAgIGxldCBjb29yZHMgPSB2ZWM0PGkzMj4oXG4gICAgICBiYXRjaCxcbiAgICAgIHJvdyAvIG91dFdpZHRoLFxuICAgICAgcm93ICUgb3V0V2lkdGgsXG4gICAgICBjb2wpO1xuICAgIGAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgbGV0IGNvb3JkcyA9IHZlYzQ8aTMyPihcbiAgICAgIGJhdGNoLFxuICAgICAgcm93LFxuICAgICAgY29sIC8gb3V0V2lkdGgsXG4gICAgICBjb2wgJSBvdXRXaWR0aCk7XG4gICAgYDtcblxuICAgICAgY29uc3QgeEhlaWdodCA9IGlzQ2hhbm5lbHNMYXN0ID8gJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzFdKScgOiAnaTMyKHVuaWZvcm1zLnhfc2hhcGVbMl0pJztcbiAgICAgIGNvbnN0IHhXaWR0aCA9IGlzQ2hhbm5lbHNMYXN0ID8gJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzJdKScgOiAnaTMyKHVuaWZvcm1zLnhfc2hhcGVbM10pJztcbiAgICAgIGNvbnN0IHJvdyA9IGlzQ2hhbm5lbHNMYXN0ID8gJ3JvdycgOiAnY29sJztcbiAgICAgIGNvbnN0IGNvbCA9IGlzQ2hhbm5lbHNMYXN0ID8gJ2NvbCcgOiAncm93JztcbiAgICAgIGNvbnN0IHJlYWRYU25pcHBldCA9IGBcbiAgICBsZXQgaW5DaGFubmVscyA9IGkzMih1bmlmb3Jtcy53X3NoYXBlWzJdKTtcbiAgICBsZXQgb3V0V2lkdGggPSAke2lzQ2hhbm5lbHNMYXN0ID8gJ2kzMih1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbMl0pJyA6ICdpMzIodW5pZm9ybXMucmVzdWx0X3NoYXBlWzNdKSd9O1xuICAgIGxldCBvdXRSb3cgPSAke3Jvd30gLyBvdXRXaWR0aDtcbiAgICBsZXQgb3V0Q29sID0gJHtyb3d9ICUgb3V0V2lkdGg7XG5cbiAgICBsZXQgV1JvdyA9ICR7Y29sfSAvIChpMzIodW5pZm9ybXMud19zaGFwZVsxXSkgKiBpbkNoYW5uZWxzKTtcbiAgICBsZXQgV0NvbCA9ICR7Y29sfSAvIGluQ2hhbm5lbHMgJSBpMzIodW5pZm9ybXMud19zaGFwZVsxXSk7XG4gICAgbGV0IHhSb3cgPSBvdXRSb3cgKiB1bmlmb3Jtcy5zdHJpZGVbMF0gKyB1bmlmb3Jtcy5kaWxhdGlvblswXSAqIFdSb3cgLSB1bmlmb3Jtcy5wYWRbMF07XG4gICAgbGV0IHhDb2wgPSBvdXRDb2wgKiB1bmlmb3Jtcy5zdHJpZGVbMV0gKyB1bmlmb3Jtcy5kaWxhdGlvblsxXSAqIFdDb2wgLSB1bmlmb3Jtcy5wYWRbMV07XG4gICAgbGV0IHhDaCA9ICR7Y29sfSAlIGluQ2hhbm5lbHM7XG4gICAgdmFyIHJlc0RhdGEgPSAke3R5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSl9KDAuMCk7XG4gICAgLy8gVGhlIGJvdW5kcyBjaGVja2luZyBpcyBhbHdheXMgbmVlZGVkIHNpbmNlIHdlIHVzZSBpdCB0byBwYWQgemVybyBmb3JcbiAgICAvLyB0aGUgJ3NhbWUnIHBhZGRpbmcgdHlwZS5cbiAgICBpZiAoeFJvdyA+PSAwICYmIHhSb3cgPCAke3hIZWlnaHR9ICYmIHhDb2wgPj0gMCAmJiB4Q29sIDwgJHt4V2lkdGh9KSB7XG4gICAgICAke2Nvb3JkQVNuaXBwZXR9XG4gICAgICBsZXQgeEluZGV4ID0gZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQsIHZlYzQ8aTMyPih1bmlmb3Jtcy54X3NoYXBlKSk7XG4gICAgICAke2dldFhTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYKX1cbiAgICB9XG4gICAgcmV0dXJuIHJlc0RhdGE7YDtcblxuICAgICAgY29uc3Qgc2FtcGxlWCA9IGlzQ2hhbm5lbHNMYXN0ID8gKGZpdEFPdXRlciAmJiBmaXRJbm5lciA/IGBcbiAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemVYfTtcbiAgICAke3JlYWRYU25pcHBldH1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplWH07XG4gICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9hX291dGVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9pbm5lcikge1xuICAgICAgJHtyZWFkWFNuaXBwZXR9XG4gICAgfVxuICAgIHJldHVybiAke3R5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSl9KDAuMCk7YCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpdElubmVyICYmIGZpdEJPdXRlciA/IGBcbiAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemVYfTtcbiAgICAke3JlYWRYU25pcHBldH1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplWH07XG4gICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9pbm5lciAmJiBjb2wgPCB1bmlmb3Jtcy5kaW1fYl9vdXRlcikge1xuICAgICAgJHtyZWFkWFNuaXBwZXR9XG4gICAgfVxuICAgIHJldHVybiAke3R5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSl9KDAuMCk7YCk7XG5cbiAgICAgIGNvbnN0IHNhbXBsZVcgPSBgJHtnZXRXU25pcHBldChpbm5lckVsZW1lbnRTaXplVyl9YDtcblxuICAgICAgY29uc3QgcmVzVHlwZSA9IHR5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemUsIGRhdGFUeXBlKTtcbiAgICAgIGNvbnN0IGFUeXBlID1cbiAgICAgICAgICBpc0NoYW5uZWxzTGFzdCA/IHR5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSkgOiB0eXBlU25pcHBldChpbm5lckVsZW1lbnRTaXplVywgZGF0YVR5cGUpO1xuICAgICAgY29uc3QgYlR5cGUgPVxuICAgICAgICAgIGlzQ2hhbm5lbHNMYXN0ID8gdHlwZVNuaXBwZXQoaW5uZXJFbGVtZW50U2l6ZVcsIGRhdGFUeXBlKSA6IHR5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSk7XG4gICAgICBjb25zdCBhcHBseUFjdGl2YXRpb24gPSBnZXRBY3RpdmF0aW9uU25pcHBldChhdHRyaWJ1dGVzLCByZXNUeXBlLCBkYXRhVHlwZSk7XG4gICAgICBjb25zdCB1c2VyQ29kZSA9IGBcbiAgICBmbiBtbV9yZWFkQShiYXRjaDogaTMyLCByb3cgOiBpMzIsIGNvbEluIDogaTMyKSAtPiAke2FUeXBlfSB7XG4gICAgICAke2lzQ2hhbm5lbHNMYXN0ID8gc2FtcGxlWCA6IHNhbXBsZVd9XG4gICAgfVxuXG4gICAgZm4gbW1fcmVhZEIoYmF0Y2g6IGkzMiwgcm93IDogaTMyLCBjb2xJbiA6IGkzMikgLT4gJHtiVHlwZX0ge1xuICAgICAgJHtpc0NoYW5uZWxzTGFzdCA/IHNhbXBsZVcgOiBzYW1wbGVYfVxuICAgIH1cblxuICAgIGZuIG1tX3dyaXRlKGJhdGNoOiBpMzIsIHJvdyA6IGkzMiwgY29sSW4gOiBpMzIsIHZhbHVlSW4gOiAke3Jlc1R5cGV9KSB7XG4gICAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemV9O1xuICAgICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9hX291dGVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9iX291dGVyKVxuICAgICAge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVJbjtcbiAgICAgIGxldCBvdXRXaWR0aCA9ICR7aXNDaGFubmVsc0xhc3QgPyAnaTMyKHVuaWZvcm1zLnJlc3VsdF9zaGFwZVsyXSknIDogJ2kzMih1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbM10pJ307XG4gICAgICAke2Nvb3JkUmVzU25pcHBldH1cbiAgICAgICR7Ymlhc1NuaXBwZXQoYWRkQmlhcyl9XG4gICAgICAke2FwcGx5QWN0aXZhdGlvbn1cbiAgICAgIHNldE91dHB1dEF0Q29vcmRzKGNvb3Jkc1swXSwgY29vcmRzWzFdLCBjb29yZHNbMl0sIGNvb3Jkc1szXSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1gO1xuICAgICAgcmV0dXJuIHVzZXJDb2RlO1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDb252MkRNYXRNdWxQcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBDb252QXR0cmlidXRlcywgb3V0cHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBkaW1BT3V0ZXI6IG51bWJlcixcbiAgICAgZGltQk91dGVyOiBudW1iZXIsIGRpbUlubmVyOiBudW1iZXIsIGhhc0JpYXM6IGJvb2xlYW4sIHNlcXVlbnRpYWxBY2Nlc3NCeVRocmVhZHM6IGJvb2xlYW4pOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBpc0NoYW5uZWxzTGFzdCA9IGF0dHJpYnV0ZXMuZm9ybWF0ID09PSAnTkhXQyc7XG4gICAgICBjb25zdCBpbkNoYW5uZWxzID0gaXNDaGFubmVsc0xhc3QgPyBpbnB1dHNbMF0uZGltc1szXSA6IGlucHV0c1swXS5kaW1zWzFdO1xuICAgICAgY29uc3QgYmF0Y2hTaXplID0gb3V0cHV0U2hhcGVbMF07XG4gICAgICBjb25zdCBvdXRXaWR0aCA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0cHV0U2hhcGVbMl0gOiBvdXRwdXRTaGFwZVszXTtcbiAgICAgIGNvbnN0IG91dEhlaWdodCA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0cHV0U2hhcGVbMV0gOiBvdXRwdXRTaGFwZVsyXTtcbiAgICAgIGNvbnN0IG91dENoYW5uZWxzID0gaXNDaGFubmVsc0xhc3QgPyBvdXRwdXRTaGFwZVszXSA6IG91dHB1dFNoYXBlWzFdO1xuICAgICAgLy8gVE9ETzogZW5hYmxlIHZlYzQgZm9yIE5DSFdcbiAgICAgIGNvbnN0IGlzVmVjNCA9IGlzQ2hhbm5lbHNMYXN0ICYmIChpbkNoYW5uZWxzICUgNCA9PT0gMCB8fCBpbkNoYW5uZWxzICUgMyA9PT0gMCkgJiYgb3V0Q2hhbm5lbHMgJSA0ID09PSAwO1xuXG4gICAgICAvLyBUT0RPOiBmaW5lIHR1bmUgc2l6ZVxuICAgICAgY29uc3QgZGlzcGF0Y2hYID0gaXNDaGFubmVsc0xhc3QgPyBvdXRDaGFubmVscyA6IG91dFdpZHRoICogb3V0SGVpZ2h0O1xuICAgICAgY29uc3QgZGlzcGF0Y2hZID0gaXNDaGFubmVsc0xhc3QgPyBvdXRXaWR0aCAqIG91dEhlaWdodCA6IG91dENoYW5uZWxzO1xuICAgICAgY29uc3Qgd29ya0dyb3VwU2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzgsIDgsIDFdO1xuICAgICAgY29uc3QgZWxlbWVudHNQZXJUaHJlYWQgPSBkaW1BT3V0ZXIgPD0gOCA/IFs0LCAxLCAxXSA6IFs0LCA0LCAxXTtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gW1xuICAgICAgICBNYXRoLmNlaWwoZGlzcGF0Y2hYIC8gd29ya0dyb3VwU2l6ZVswXSAvIGVsZW1lbnRzUGVyVGhyZWFkWzBdKSxcbiAgICAgICAgTWF0aC5jZWlsKGRpc3BhdGNoWSAvIHdvcmtHcm91cFNpemVbMV0gLyBlbGVtZW50c1BlclRocmVhZFsxXSksXG4gICAgICAgIE1hdGguY2VpbChiYXRjaFNpemUgLyB3b3JrR3JvdXBTaXplWzJdIC8gZWxlbWVudHNQZXJUaHJlYWRbMl0pXG4gICAgICBdO1xuXG4gICAgICBMT0dfREVCVUcoJ3ZlcmJvc2UnLCAoKSA9PiBgW2NvbnYyZF9tbV93ZWJncHVdIGRpc3BhdGNoID0gJHtkaXNwYXRjaH1gKTtcblxuICAgICAgY29uc3QgaW5uZXJFbGVtZW50U2l6ZSA9IGlzVmVjNCA/IChpc0NoYW5uZWxzTGFzdCAmJiBpbkNoYW5uZWxzICUgNCAhPT0gMCA/IDMgOiA0KSA6IDE7XG4gICAgICBjb25zdCB0aWxlQU91dGVyID0gd29ya0dyb3VwU2l6ZVsxXSAqIGVsZW1lbnRzUGVyVGhyZWFkWzFdO1xuICAgICAgY29uc3QgdGlsZUJPdXRlciA9IHdvcmtHcm91cFNpemVbMF0gKiBlbGVtZW50c1BlclRocmVhZFswXTtcbiAgICAgIGNvbnN0IHRpbGVJbm5lciA9IE1hdGgubWF4KHdvcmtHcm91cFNpemVbMF0gKiBpbm5lckVsZW1lbnRTaXplLCB3b3JrR3JvdXBTaXplWzFdKTtcbiAgICAgIGNvbnN0IGZpdEFPdXRlciA9IGRpbUFPdXRlciAlIHRpbGVBT3V0ZXIgPT09IDA7XG4gICAgICBjb25zdCBmaXRCT3V0ZXIgPSBkaW1CT3V0ZXIgJSB0aWxlQk91dGVyID09PSAwO1xuICAgICAgY29uc3QgZml0SW5uZXIgPSBkaW1Jbm5lciAlIHRpbGVJbm5lciA9PT0gMDtcbiAgICAgIGNvbnN0IGVsZW1lbnRzU2l6ZSA9IGlzVmVjNCA/IFtpbm5lckVsZW1lbnRTaXplLCA0LCA0XSA6IFsxLCAxLCAxXTtcblxuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGRpbUFPdXRlcn0sIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogZGltQk91dGVyfSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBkaW1Jbm5lcn0sIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogW2F0dHJpYnV0ZXMucGFkc1swXSwgYXR0cmlidXRlcy5wYWRzWzFdXX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogYXR0cmlidXRlcy5zdHJpZGVzfSwge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBhdHRyaWJ1dGVzLmRpbGF0aW9uc31cbiAgICAgIF07XG4gICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhKGF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3Jtcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMF0uZGltcywgaW5wdXRzWzFdLmRpbXMpKTtcbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJywgJ3JhbmsnXTtcbiAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1syXS5kaW1zKSk7XG4gICAgICAgIGlucHV0RGVwZW5kZW5jaWVzLnB1c2goJ3JhbmsnKTtcbiAgICAgIH1cbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dHB1dFNoYXBlKSk7XG5cbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbXG4gICAgICAgICAge25hbWU6ICdkaW1fYV9vdXRlcicsIHR5cGU6ICdpMzInfSwge25hbWU6ICdkaW1fYl9vdXRlcicsIHR5cGU6ICdpMzInfSwge25hbWU6ICdkaW1faW5uZXInLCB0eXBlOiAnaTMyJ30sXG4gICAgICAgICAge25hbWU6ICdwYWQnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiAyfSwge25hbWU6ICdzdHJpZGUnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiAyfSxcbiAgICAgICAgICB7bmFtZTogJ2RpbGF0aW9uJywgdHlwZTogJ2kzMicsIGxlbmd0aDogMn1cbiAgICAgICAgXTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGF0dHJpYnV0ZXMsIHVuaWZvcm1zKTtcblxuICAgICAgICAvLyBUT0RPOiBzdXBwb3J0IGNvbXBvbmVudCAyLCAzLlxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gaXNWZWM0ID8gNCA6IDE7XG4gICAgICAgIGNvbnN0IHQgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgbGV0IGRlY2xhcmVGdW5jdGlvbnMgPSBgXG4gICAgICBmbiBzZXRPdXRwdXRBdEluZGV4KGZsYXRJbmRleCA6IGkzMiwgdmFsdWUgOiAke2lzVmVjNCA/IGB2ZWM0PCR7dH0+YCA6IHR9KSB7XG4gICAgICAgIHJlc3VsdFtmbGF0SW5kZXhdID0gJHtpc1ZlYzQgPyBgdmVjNDwke3R9PmAgOiB0fSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBmbiBzZXRPdXRwdXRBdENvb3JkcyhkMCA6IGkzMiwgZDEgOiBpMzIsIGQyIDogaTMyLCBkMyA6IGkzMiwgdmFsdWUgOiAke2lzVmVjNCA/IGB2ZWM0PCR7dH0+YCA6IHR9KSB7XG4gICAgICAgIGxldCBmbGF0SW5kZXggPSBnZXRPdXRwdXRJbmRleEZyb21Db29yZHModmVjNDxpMzI+KGQwLCBkMSwgZDIsIGQzKSk7XG4gICAgICAgIHNldE91dHB1dEF0SW5kZXgoZmxhdEluZGV4ICR7aXNWZWM0ID8gJy8gNCcgOiAnJ30sIHZhbHVlKTtcbiAgICAgIH1gO1xuICAgICAgICBjb25zdCB4ID0gaW5wdXRWYXJpYWJsZShcbiAgICAgICAgICAgICd4JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcy5sZW5ndGgsIGlubmVyRWxlbWVudFNpemUgPT09IDMgPyAxIDogaW5uZXJFbGVtZW50U2l6ZSk7XG4gICAgICAgIGNvbnN0IHcgPSBpbnB1dFZhcmlhYmxlKCd3JywgaW5wdXRzWzFdLmRhdGFUeXBlLCBpbnB1dHNbMV0uZGltcy5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBpbnB1dFZhcmlhYmxlcyA9IFt4LCB3XTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ3Jlc3VsdCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgICBjb25zdCBiaWFzID0gaW5wdXRWYXJpYWJsZSgnYmlhcycsIGlucHV0c1syXS5kYXRhVHlwZSwgaW5wdXRzWzJdLmRpbXMubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgICBpbnB1dFZhcmlhYmxlcy5wdXNoKGJpYXMpO1xuICAgICAgICAgIGRlY2xhcmVGdW5jdGlvbnMgKz0gYFxuICAgICAgICBmbiBnZXRCaWFzQnlPdXRwdXRDb29yZHMoY29vcmRzIDogdmVjNDxpMzI+KSAtPiAke2lzVmVjNCA/IGB2ZWM0PCR7dH0+YCA6IHR9IHtcbiAgICAgICAgICByZXR1cm4gYmlhc1tjb29yZHMuJHtpc0NoYW5uZWxzTGFzdCA/ICd3JyA6ICd5J30ke2lzVmVjNCA/ICcvIDQnIDogJyd9XTtcbiAgICAgICAgfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYFxuICAgICAgICAke3V0aWxGdW5jdGlvbnMoJ3VuaWZvcm1zLnJlc3VsdF9zdHJpZGVzJyl9XG4gICAgICAgIC8vc3RydWN0IFVuaWZvcm1zIHsgeFNoYXBlIDogdmVjNDxpMzI+LCB3U2hhcGUgOiB2ZWM0PGkzMj4sIG91dFNoYXBlIDogdmVjNDxpMzI+LFxuICAgICAgICAvLyAgb3V0U2hhcGVTdHJpZGVzOiB2ZWMzPGkzMj4sIGZpbHRlckRpbXMgOiB2ZWMyPGkzMj4sIHBhZCA6IHZlYzI8aTMyPiwgc3RyaWRlIDogdmVjMjxpMzI+LFxuICAgICAgICAvLyAgZGlsYXRpb24gOiB2ZWMyPGkzMj4sIGRpbUFPdXRlciA6IGkzMiwgZGltQk91dGVyIDogaTMyLCBkaW1Jbm5lciA6IGkzMiB9O1xuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFyaWFibGVzLCBvdXRwdXQpfVxuICAgICAgICAke2RlY2xhcmVGdW5jdGlvbnN9XG4gICAgICAgICR7XG4gICAgICAgICAgICBjb252MmRDb21tb25TbmlwcGV0KFxuICAgICAgICAgICAgICAgIGlzQ2hhbm5lbHNMYXN0LCBmaXRBT3V0ZXIsIGZpdEJPdXRlciwgZml0SW5uZXIsIGhhc0JpYXMsIGF0dHJpYnV0ZXMsIGVsZW1lbnRzU2l6ZVswXSwgZWxlbWVudHNTaXplWzFdLFxuICAgICAgICAgICAgICAgIGVsZW1lbnRzU2l6ZVsyXSwgdCl9XG4gICAgICAgICR7XG4gICAgICAgICAgICBpc1ZlYzQgP1xuICAgICAgICAgICAgICAgIG1ha2VNYXRNdWxQYWNrZWRWZWM0U291cmNlKGVsZW1lbnRzUGVyVGhyZWFkLCB3b3JrR3JvdXBTaXplLCB0LCB1bmRlZmluZWQsICFpc0NoYW5uZWxzTGFzdCwgdGlsZUlubmVyKSA6XG4gICAgICAgICAgICAgICAgbWFrZU1hdE11bFBhY2tlZFNvdXJjZShcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNQZXJUaHJlYWQsIHdvcmtHcm91cFNpemUsIHQsIHVuZGVmaW5lZCwgIWlzQ2hhbm5lbHNMYXN0LCB0aWxlSW5uZXIsIGZhbHNlLCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHNlcXVlbnRpYWxBY2Nlc3NCeVRocmVhZHMpfWA7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0NvbnYyRE1hdE11bCcsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgaGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX07JHtpbm5lckVsZW1lbnRTaXplfTske2lzVmVjNH07JHtmaXRBT3V0ZXJ9OyR7Zml0Qk91dGVyfTske2ZpdElubmVyfTske1xuICAgICAgICAgICAgICB0aWxlQU91dGVyfTske3RpbGVCT3V0ZXJ9OyR7dGlsZUlubmVyfWAsXG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXNcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IGRpc3BhdGNoWzBdLCB5OiBkaXNwYXRjaFsxXSwgejogZGlzcGF0Y2hbMl19LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3JtcyxcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgfTtcbiAgICB9O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7UHJvZ3JhbUluZm8sIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5LCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBnZXRNYXhDb21wb25lbnRzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQge2NhbGN1bGF0ZU91dHB1dFNoYXBlLCBDb252QXR0cmlidXRlc30gZnJvbSAnLi9jb252JztcbmltcG9ydCB7YXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zLCBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhLCBnZXRBY3RpdmF0aW9uU25pcHBldH0gZnJvbSAnLi9mdXNlLXV0aWxzJztcblxuLyoqXG4gKiBuYWl2ZSBncm91cGVkIGNvbnYgaW1wbGVtZW50YXRpb24sIHN1cHBvcnRzIDFkLzJkIGNvbnZcbiAqIEBwYXJhbSBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbiAtIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIHNxdWVlemUgdGhlIG91dHB1dCBzaGFwZSwgb25seSB1c2VkIGluIGNvbnYxZFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlR3JvdXBlZENvbnZQcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBDb252QXR0cmlidXRlcyxcbiAgICAgc3F1ZWV6ZU91dHB1dFNoYXBlRnVuY3Rpb24/OiAoc2hhcGU6IHJlYWRvbmx5IG51bWJlcltdKSA9PiBudW1iZXJbXSk6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IGhhc0JpYXMgPSBpbnB1dHMubGVuZ3RoID4gMjtcbiAgICAgIGNvbnN0IHByb2Nlc3NCaWFzID0gaGFzQmlhcyA/ICd2YWx1ZSArPSBiW291dHB1dF9jaGFubmVsXTsnIDogJyc7XG4gICAgICBjb25zdCB4U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IHdTaGFwZSA9IGlucHV0c1sxXS5kaW1zO1xuICAgICAgY29uc3Qgb3V0cHV0Q2hhbm5lbHNQZXJHcm91cCA9IHdTaGFwZVswXSAvIGF0dHJpYnV0ZXMuZ3JvdXA7XG5cbiAgICAgIGNvbnN0IGlzQ2hhbm5lbExhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBjYWxjdWxhdGVPdXRwdXRTaGFwZShcbiAgICAgICAgICB4U2hhcGUsIHdTaGFwZSwgYXR0cmlidXRlcy5kaWxhdGlvbnMsIGF0dHJpYnV0ZXMucGFkcywgYXR0cmlidXRlcy5zdHJpZGVzLCBpc0NoYW5uZWxMYXN0KTtcbiAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG5cbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGF0dHJpYnV0ZXMuZGlsYXRpb25zfSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogW2F0dHJpYnV0ZXMuc3RyaWRlc1swXSwgYXR0cmlidXRlcy5zdHJpZGVzWzFdXX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IFthdHRyaWJ1dGVzLnBhZHNbMF0sIGF0dHJpYnV0ZXMucGFkc1sxXV19LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBvdXRwdXRDaGFubmVsc1Blckdyb3VwfVxuICAgICAgXTtcbiAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEoYXR0cmlidXRlcywgcHJvZ3JhbVVuaWZvcm1zKTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKHhTaGFwZSwgd1NoYXBlKSk7XG4gICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llczogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXSA9IFsncmFuaycsICdyYW5rJ107XG4gICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMl0uZGltcykpO1xuICAgICAgICBpbnB1dERlcGVuZGVuY2llcy5wdXNoKCdyYW5rJyk7XG4gICAgICB9XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZSkpO1xuXG4gICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgYmFzZVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUob3V0cHV0LnR5cGUudGVuc29yKTtcbiAgICAgICAgY29uc3QgYXBwbHlBY3RpdmF0aW9uID0gZ2V0QWN0aXZhdGlvblNuaXBwZXQoYXR0cmlidXRlcywgb3V0cHV0LnR5cGUudmFsdWUsIGJhc2VUeXBlKTtcbiAgICAgICAgY29uc3QgeCA9IGlucHV0VmFyaWFibGUoJ3gnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIHhTaGFwZS5sZW5ndGgpO1xuICAgICAgICBjb25zdCB3ID0gaW5wdXRWYXJpYWJsZSgndycsIGlucHV0c1sxXS5kYXRhVHlwZSwgd1NoYXBlLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFycyA9IFt4LCB3XTtcbiAgICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgICBpbnB1dFZhcnMucHVzaChpbnB1dFZhcmlhYmxlKCdiJywgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcy5sZW5ndGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgICAgICB7bmFtZTogJ291dHB1dF9zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ2RpbGF0aW9ucycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGF0dHJpYnV0ZXMuZGlsYXRpb25zLmxlbmd0aH0sXG4gICAgICAgICAge25hbWU6ICdzdHJpZGVzJywgdHlwZTogJ3UzMicsIGxlbmd0aDogMn0sIHtuYW1lOiAncGFkcycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IDJ9LFxuICAgICAgICAgIHtuYW1lOiAnb3V0cHV0X2NoYW5uZWxzX3Blcl9ncm91cCcsIHR5cGU6ICd1MzInfVxuICAgICAgICBdO1xuICAgICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXMoYXR0cmlidXRlcywgdW5pZm9ybXMpO1xuICAgICAgICByZXR1cm4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFycywgb3V0cHV0KX1cblxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRfc2l6ZScpfVxuXG4gICAgbGV0IG91dHB1dEluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgbGV0IGJhdGNoOiB1MzIgPSBvdXRwdXRJbmRpY2VzWzBdO1xuICAgIGxldCBvdXRwdXRfY2hhbm5lbDogdTMyID0gb3V0cHV0SW5kaWNlc1ske2lzQ2hhbm5lbExhc3QgPyAzIDogMX1dO1xuICAgIGxldCB4UkNDb3JuZXI6IHZlYzI8dTMyPiA9IHZlYzI8dTMyPihvdXRwdXRJbmRpY2VzWyR7aXNDaGFubmVsTGFzdCA/IDEgOiAyfV0sIG91dHB1dEluZGljZXNbJHtcbiAgICAgICAgICAgIGlzQ2hhbm5lbExhc3QgPyAyIDogM31dKSAqIHVuaWZvcm1zLnN0cmlkZXMgLSB1bmlmb3Jtcy5wYWRzO1xuICAgIGxldCBncm91cF9pZDogdTMyID0gb3V0cHV0X2NoYW5uZWwgLyB1bmlmb3Jtcy5vdXRwdXRfY2hhbm5lbHNfcGVyX2dyb3VwO1xuXG4gICAgdmFyIHZhbHVlOiAke291dHB1dC50eXBlLnZhbHVlfSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KDApO1xuICAgIGZvciAodmFyIHdJbkNoYW5uZWw6IHUzMiA9IDB1OyB3SW5DaGFubmVsIDwgdW5pZm9ybXMud19zaGFwZVsxXTsgd0luQ2hhbm5lbCsrKSB7XG4gICAgICBsZXQgaW5wdXRfY2hhbm5lbCA9IGdyb3VwX2lkICogdW5pZm9ybXMud19zaGFwZVsxXSArIHdJbkNoYW5uZWw7XG4gICAgICBmb3IgKHZhciB3SGVpZ2h0OiB1MzIgPSAwdTsgd0hlaWdodCA8IHVuaWZvcm1zLndfc2hhcGVbMl07IHdIZWlnaHQrKykge1xuICAgICAgICBsZXQgeEhlaWdodCA9IHhSQ0Nvcm5lci54ICsgd0hlaWdodCAqIHVuaWZvcm1zLmRpbGF0aW9uc1swXTtcblxuICAgICAgICBpZiAoeEhlaWdodCA8IDB1IHx8IHhIZWlnaHQgPj0gdW5pZm9ybXMueF9zaGFwZVske2lzQ2hhbm5lbExhc3QgPyAxIDogMn1dKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciB3V2lkdGg6IHUzMiA9IDB1OyB3V2lkdGggPCB1bmlmb3Jtcy53X3NoYXBlWzNdOyB3V2lkdGgrKykge1xuICAgICAgICAgIGxldCB4V2lkdGggPSB4UkNDb3JuZXIueSArIHdXaWR0aCAqIHVuaWZvcm1zLmRpbGF0aW9uc1sxXTtcbiAgICAgICAgICBpZiAoeFdpZHRoIDwgMHUgfHwgeFdpZHRoID49IHVuaWZvcm1zLnhfc2hhcGVbJHtpc0NoYW5uZWxMYXN0ID8gMiA6IDN9XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHhWYWwgPSAke1xuICAgICAgICAgICAgaXNDaGFubmVsTGFzdCA/IHguZ2V0KCdiYXRjaCcsICd4SGVpZ2h0JywgJ3hXaWR0aCcsICdpbnB1dF9jaGFubmVsJykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHguZ2V0KCdiYXRjaCcsICdpbnB1dF9jaGFubmVsJywgJ3hIZWlnaHQnLCAneFdpZHRoJyl9O1xuICAgICAgICAgIGxldCB3VmFsID0gJHt3LmdldCgnb3V0cHV0X2NoYW5uZWwnLCAnd0luQ2hhbm5lbCcsICd3SGVpZ2h0JywgJ3dXaWR0aCcpfTtcbiAgICAgICAgICB2YWx1ZSArPSB4VmFsKndWYWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgJHtwcm9jZXNzQmlhc31cbiAgICAke2FwcGx5QWN0aXZhdGlvbn1cbiAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsICd2YWx1ZScpfVxuICB9YDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnR3JvdXBlZENvbnYnLFxuICAgICAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGF0dHJpYnV0ZXMuY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe1xuICAgICAgICAgICAgZGltczogc3F1ZWV6ZU91dHB1dFNoYXBlRnVuY3Rpb24gPyBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbihvdXRwdXRTaGFwZSkgOiBvdXRwdXRTaGFwZSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGVcbiAgICAgICAgICB9XSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgfTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR3JvdXBlZENvbnZWZWN0b3JpemVQcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBDb252QXR0cmlidXRlcywgb3V0cHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPiAyO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMob3V0cHV0U2hhcGVbM10pO1xuICAgICAgY29uc3Qgb3V0cHV0TnVtYmVyID0gZ2V0TWF4Q29tcG9uZW50cyhvdXRwdXRTaGFwZVsyXSk7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gY29tcG9uZW50cyAvIG91dHB1dE51bWJlcjtcbiAgICAgIGNvbnN0IHhTaGFwZSA9IFtpbnB1dHNbMF0uZGltc1swXSwgaW5wdXRzWzBdLmRpbXNbMV0sIGlucHV0c1swXS5kaW1zWzJdLCBpbnB1dHNbMF0uZGltc1szXSAvIGNvbXBvbmVudHNdO1xuICAgICAgY29uc3Qgd1NoYXBlID0gW2lucHV0c1sxXS5kaW1zWzBdLCBpbnB1dHNbMV0uZGltc1sxXSwgaW5wdXRzWzFdLmRpbXNbMl0sIGlucHV0c1sxXS5kaW1zWzNdIC8gY29tcG9uZW50c107XG4gICAgICBjb25zdCBvdXRwdXRTaGFwZUluU2hhZGVyID0gW291dHB1dFNoYXBlWzBdLCBvdXRwdXRTaGFwZVsxXSwgb3V0cHV0U2hhcGVbMl0sIG91dHB1dFNoYXBlWzNdIC8gY29tcG9uZW50c107XG5cbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogW2F0dHJpYnV0ZXMuc3RyaWRlc1swXSwgYXR0cmlidXRlcy5zdHJpZGVzWzFdXX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogW2F0dHJpYnV0ZXMucGFkc1swXSwgYXR0cmlidXRlcy5wYWRzWzFdXX1cbiAgICAgIF07XG4gICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhKGF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3Jtcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyh4U2hhcGUsIHdTaGFwZSwgb3V0cHV0U2hhcGVJblNoYWRlcikpO1xuICAgICAgY29uc3QgeE51bWJlciA9IChvdXRwdXROdW1iZXIgLSAxKSAqIGF0dHJpYnV0ZXMuc3RyaWRlc1sxXSArIHdTaGFwZVsxXTtcbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZUluU2hhZGVyLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGJhc2VUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKG91dHB1dC50eXBlLnRlbnNvcik7XG4gICAgICAgIGNvbnN0IGFwcGx5QWN0aXZhdGlvbiA9IGdldEFjdGl2YXRpb25TbmlwcGV0KGF0dHJpYnV0ZXMsIG91dHB1dC50eXBlLnZhbHVlLCBiYXNlVHlwZSk7XG4gICAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKCd4JywgaW5wdXRzWzBdLmRhdGFUeXBlLCB4U2hhcGUubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgdyA9IGlucHV0VmFyaWFibGUoJ3cnLCBpbnB1dHNbMV0uZGF0YVR5cGUsIHdTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBpbnB1dFZhcnMgPSBbeCwgd107XG4gICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgaW5wdXRWYXJzLnB1c2goaW5wdXRWYXJpYWJsZSgnYicsIGlucHV0c1syXS5kYXRhVHlwZSwgaW5wdXRzWzJdLmRpbXMsIGNvbXBvbmVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9jZXNzQmlhcyA9IGhhc0JpYXMgPyAndmFsdWUgKz0gYltvdXRwdXRfY2hhbm5lbF07JyA6ICcnO1xuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbXG4gICAgICAgICAge25hbWU6ICdvdXRwdXRfc2l6ZScsIHR5cGU6ICd1MzInfSxcbiAgICAgICAgICB7bmFtZTogJ3N0cmlkZXMnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiAyfSxcbiAgICAgICAgICB7bmFtZTogJ3BhZHMnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiAyfSxcbiAgICAgICAgXTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGF0dHJpYnV0ZXMsIHVuaWZvcm1zKTtcbiAgICAgICAgcmV0dXJuIGBcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyguLi5pbnB1dFZhcnMsIG91dHB1dCl9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF9zaXplJyl9XG4gICAgbGV0IHdpZHRoMCA9IHVuaWZvcm1zLm91dHB1dF9zaGFwZVszXTtcbiAgICBsZXQgb3V0cHV0X2NoYW5uZWwgPSBnbG9iYWxfaWR4ICUgd2lkdGgwO1xuICAgIHZhciBpbmRleDEgPSBnbG9iYWxfaWR4IC8gd2lkdGgwO1xuICAgIGxldCB3aWR0aDEgPSB1bmlmb3Jtcy5vdXRwdXRfc2hhcGVbMl0gLyAke291dHB1dE51bWJlcn11O1xuICAgIGxldCBjb2wgPSAoaW5kZXgxICUgd2lkdGgxKSAqICR7b3V0cHV0TnVtYmVyfXU7XG4gICAgaW5kZXgxID0gaW5kZXgxIC8gd2lkdGgxO1xuICAgIGxldCByb3cgPSBpbmRleDEgJSB1bmlmb3Jtcy5vdXRwdXRfc2hhcGVbMV07XG4gICAgbGV0IGJhdGNoID0gaW5kZXgxIC8gdW5pZm9ybXMub3V0cHV0X3NoYXBlWzFdO1xuXG4gICAgbGV0IHhfY29ybmVyID0gdmVjMjxpMzI+KGkzMihyb3cpLCBpMzIoY29sKSkgKiB1bmlmb3Jtcy5zdHJpZGVzIC0gdW5pZm9ybXMucGFkcztcblxuICAgIHZhciB4X3ZhbHM6IGFycmF5PCR7eC50eXBlLnZhbHVlfSwgJHt4TnVtYmVyfT47XG4gICAgdmFyIHZhbHVlczogYXJyYXk8JHtvdXRwdXQudHlwZS52YWx1ZX0sICR7b3V0cHV0TnVtYmVyfT47XG4gICAgbGV0IGlucHV0X2NoYW5uZWwgPSBvdXRwdXRfY2hhbm5lbDtcbiAgICAvLyBVc2UgY29uc3RhbnQgaW5zdGVhZCBvZiB1bmlmb3JtIGNhbiBnaXZlIGJldHRlciBwZXJmb3JtYW5jZSBmb3IgdydzIGhlaWdodC93aWR0aC5cbiAgICBmb3IgKHZhciB3X2hlaWdodDogdTMyID0gMHU7IHdfaGVpZ2h0IDwgJHt3U2hhcGVbMF19OyB3X2hlaWdodCsrKSB7XG4gICAgICBsZXQgeF9oZWlnaHQgPSB4X2Nvcm5lci54ICsgaTMyKHdfaGVpZ2h0KTtcbiAgICAgIGlmICh4X2hlaWdodCA+PSAwICYmIHUzMih4X2hlaWdodCkgPCB1bmlmb3Jtcy54X3NoYXBlWzFdKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgJHt4TnVtYmVyfTsgaSsrKSB7XG4gICAgICAgICAgbGV0IHhfd2lkdGggPSB4X2Nvcm5lci55ICsgaTtcbiAgICAgICAgICBpZiAoeF93aWR0aCA+PSAwICYmIHUzMih4X3dpZHRoKSA8IHVuaWZvcm1zLnhfc2hhcGVbMl0pIHtcbiAgICAgICAgICAgIHhfdmFsc1tpXSA9ICR7eC5nZXQoJ2JhdGNoJywgJ3UzMih4X2hlaWdodCknLCAndTMyKHhfd2lkdGgpJywgJ2lucHV0X2NoYW5uZWwnKX07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhfdmFsc1tpXSA9ICR7eC50eXBlLnZhbHVlfSgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgd193aWR0aDogdTMyID0gMHU7IHdfd2lkdGggPCAke3dTaGFwZVsxXX07IHdfd2lkdGgrKykge1xuICAgICAgICAgIGxldCB3X3ZhbCA9ICR7dy5nZXQoJ3dfaGVpZ2h0JywgJ3dfd2lkdGgnLCAnMCcsICdvdXRwdXRfY2hhbm5lbCcpfTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke291dHB1dE51bWJlcn11OyBpKyspIHtcbiAgICAgICAgICAgIHZhbHVlc1tpXSA9IGZtYSh4X3ZhbHNbaSAqIHUzMih1bmlmb3Jtcy5zdHJpZGVzWzFdKSArIHdfd2lkdGhdLCB3X3ZhbCwgdmFsdWVzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke291dHB1dE51bWJlcn11OyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAgICR7cHJvY2Vzc0JpYXN9XG4gICAgICAke2FwcGx5QWN0aXZhdGlvbn1cbiAgICAgICR7b3V0cHV0LnNldCgnYmF0Y2gnLCAncm93JywgJ2NvbCArIGknLCAnb3V0cHV0X2NoYW5uZWwnLCAndmFsdWUnKX07XG4gICAgfVxuICB9YDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdHcm91cGVkQ29udi1WZWN0b3JpemUnLFxuICAgICAgICBzaGFkZXJDYWNoZToge1xuICAgICAgICAgIGhpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9OyR7Y29tcG9uZW50c307JHtvdXRwdXROdW1iZXJ9OyR7eE51bWJlcn07JHt3U2hhcGVbMF19OyR7d1NoYXBlWzFdfWAsXG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXM6IGhhc0JpYXMgPyBbJ3JhbmsnLCAncmFuaycsICd0eXBlJ10gOiBbJ3JhbmsnLCAncmFuayddXG4gICAgICAgIH0sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgIH0pLFxuICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICB9O1xuICAgIH07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtCcm9hZGNhc3RVdGlsLCBTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlTWF0bXVsUHJvZ3JhbUluZm99IGZyb20gJy4vM3JkLXBhcnR5L21hdG11bF9wYWNrZWRfd2ViZ3B1JztcbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGdldEJyb2FkY2FzdERpbXMsIGdldE1heENvbXBvbmVudHMsIEluZGljZXNIZWxwZXIsIGlucHV0VmFyaWFibGUsIGludGVybmFsVmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZSwgVW5pZm9ybXNBcnJheVR5cGV9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7YXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zLCBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhLCBnZXRBY3RpdmF0aW9uU25pcHBldCwgSW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlc30gZnJvbSAnLi9mdXNlLXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5haXZlTWF0bXVsUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYWN0aXZhdGlvbkF0dHJpYnV0ZXM6IEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgcmVzaGFwZWRPdXRwdXRTaGFwZT86IHJlYWRvbmx5IG51bWJlcltdLFxuICAgICBpc0NoYW5uZWxzTGFzdCA9IGZhbHNlIC8qIG9ubHkgdXNlZCBmb3IgY29udjJkQnlNYXRNdWwqLyk6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IGFTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgY29uc3QgYlNoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG5cbiAgICAgIGNvbnN0IE0gPSBhU2hhcGVbYVNoYXBlLmxlbmd0aCAtIDJdO1xuICAgICAgY29uc3QgTiA9IGJTaGFwZVtiU2hhcGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBLID0gYVNoYXBlW2FTaGFwZS5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKE4pO1xuICAgICAgY29uc3QgYUNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKEspO1xuICAgICAgY29uc3Qgb3V0cHV0TnVtYmVyID0gZ2V0TWF4Q29tcG9uZW50cyhNKTtcbiAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSkgLyBjb21wb25lbnRzIC8gb3V0cHV0TnVtYmVyO1xuICAgICAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPiAyO1xuICAgICAgY29uc3Qgb3V0ZXJEaW1zID0gcmVzaGFwZWRPdXRwdXRTaGFwZSA/IHJlc2hhcGVkT3V0cHV0U2hhcGUuc2xpY2UoMCwgLTIpIDogb3V0cHV0U2hhcGUuc2xpY2UoMCwgLTIpO1xuICAgICAgY29uc3QgYmF0Y2hTaXplID0gU2hhcGVVdGlsLnNpemUob3V0ZXJEaW1zKTtcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlSW5TaGFkZXIgPSBbYmF0Y2hTaXplLCBNLCBOXTtcblxuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBvdXRwdXRTaXplfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogTX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IE59LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBLfVxuICAgICAgXTtcbiAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEoYWN0aXZhdGlvbkF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3Jtcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRlckRpbXMsIGFTaGFwZSwgYlNoYXBlKSk7XG4gICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMl0uZGltcykpO1xuICAgICAgfVxuICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGVJblNoYWRlcikpO1xuXG4gICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgY29uc3QgYmF0Y2hEaW1zID0gaW50ZXJuYWxWYXJpYWJsZSgnYmF0Y2hfZGltcycsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0ZXJEaW1zLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGEgPSBpbnB1dFZhcmlhYmxlKCdhJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBhU2hhcGUubGVuZ3RoLCBhQ29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGIgPSBpbnB1dFZhcmlhYmxlKCdiJywgaW5wdXRzWzFdLmRhdGFUeXBlLCBiU2hhcGUubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGVJblNoYWRlci5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBiYXNlVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZShvdXRwdXQudHlwZS50ZW5zb3IpO1xuICAgICAgICBjb25zdCBhcHBseUFjdGl2YXRpb24gPSBnZXRBY3RpdmF0aW9uU25pcHBldChhY3RpdmF0aW9uQXR0cmlidXRlcywgb3V0cHV0LnR5cGUudmFsdWUsIGJhc2VUeXBlKTtcbiAgICAgICAgY29uc3QgaW5wdXRWYXJpYWJsZXMgPSBbYSwgYl07XG4gICAgICAgIGxldCBwcm9jZXNzQmlhcyA9ICcnO1xuICAgICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICAgIGNvbnN0IGJpYXNDb21wb25lbnRzID0gaXNDaGFubmVsc0xhc3QgPyBjb21wb25lbnRzIDogMTtcbiAgICAgICAgICBpbnB1dFZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCwgYmlhc0NvbXBvbmVudHMpKTtcbiAgICAgICAgICBwcm9jZXNzQmlhcyA9IGAke1xuICAgICAgICAgICAgICBpc0NoYW5uZWxzTGFzdCA/IGB2YWx1ZSArPSBiaWFzW2NvbCAvICR7Ymlhc0NvbXBvbmVudHN9XTtgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgdmFsdWUgKz0gJHtvdXRwdXQudHlwZS52YWx1ZX0oYmlhc1tyb3cgKyBpXSk7YH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3V0ZXJEaW1zQSA9IGFTaGFwZS5zbGljZSgwLCAtMik7XG4gICAgICAgIGNvbnN0IG91dGVyRGltc0IgPSBiU2hhcGUuc2xpY2UoMCwgLTIpO1xuICAgICAgICBjb25zdCBicm9hZENhc3RBRGltcyA9IGdldEJyb2FkY2FzdERpbXMob3V0ZXJEaW1zQSwgb3V0ZXJEaW1zKTtcbiAgICAgICAgY29uc3QgYnJvYWRDYXN0QkRpbXMgPSBnZXRCcm9hZGNhc3REaW1zKG91dGVyRGltc0IsIG91dGVyRGltcyk7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgICAgICB7bmFtZTogJ291dHB1dF9zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ00nLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnTicsIHR5cGU6ICd1MzInfSxcbiAgICAgICAgICB7bmFtZTogJ0snLCB0eXBlOiAndTMyJ31cbiAgICAgICAgXTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGFjdGl2YXRpb25BdHRyaWJ1dGVzLCB1bmlmb3Jtcyk7XG5cbiAgICAgICAgY29uc3QgZ2V0SW5kaWNlcyA9ICh2YXJpYWJsZTogSW5kaWNlc0hlbHBlciwgYnJvYWRDYXN0RGltczogbnVtYmVyW10pID0+IHtcbiAgICAgICAgICBjb25zdCByYW5rID0gdmFyaWFibGUucmFuaztcbiAgICAgICAgICBjb25zdCBuYW1lID0gdmFyaWFibGUubmFtZTtcbiAgICAgICAgICBpZiAocmFuayA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIGB2YXIgJHtuYW1lfV9pbmRpY2VzID0gJHt2YXJpYWJsZS50eXBlLmluZGljZXN9KDB1LCAwdSk7YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYmF0Y2hSYW5rID0gYmF0Y2hEaW1zLnJhbms7XG4gICAgICAgICAgbGV0IHJlc1N0ciA9IGB2YXIgJHtuYW1lfV9pbmRpY2VzOiAke3ZhcmlhYmxlLnR5cGUuaW5kaWNlc307YDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gcmFuayAtIDIgLSAxLCBqID0gYmF0Y2hSYW5rIC0gMTsgaSA+PSAwOyBpLS0sIGotLSkge1xuICAgICAgICAgICAgcmVzU3RyICs9IGBcXG4ke25hbWV9X2luZGljZXNbJHtpfV0gPSAke2JhdGNoUmFuayA+IDEgPyBgYmF0Y2hfaW5kaWNlc1ske2p9XWAgOiAnYmF0Y2hfaW5kaWNlcyd9O2A7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyb2FkQ2FzdERpbXMuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICAgIHJlc1N0ciArPSBgXFxuJHtuYW1lfV9pbmRpY2VzWyR7aX1dID0gMDtgO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlc1N0ciArPSBgJHtuYW1lfV9pbmRpY2VzWyR7cmFuayAtIDJ9XSA9IDB1O1xuICAgICAgICAgICAgICAgICAgICAgJHtuYW1lfV9pbmRpY2VzWyR7cmFuayAtIDF9XSA9IDB1O2A7XG4gICAgICAgICAgcmV0dXJuIHJlc1N0cjtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjYWxjUmVzdWx0ID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICAgICAgbGV0IGNhbGNTdHIgPSBgdmFyIGFfZGF0YTogJHthLnR5cGUudmFsdWV9O2A7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhQ29tcG9uZW50czsgaSsrKSB7XG4gICAgICAgICAgICBjYWxjU3RyICs9IGBcbiAgICAgICAgICAgICAgbGV0IGJfZGF0YSR7aX0gPSBiWyhiX29mZnNldCArIChrICsgJHtpfSkgKiB1bmlmb3Jtcy5OICsgY29sKSAvICR7Y29tcG9uZW50c31dO2A7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0TnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgIGNhbGNTdHIgKz0gYGFfZGF0YSA9IGFbKGFfb2Zmc2V0ICsgKHJvdyArICR7aX0pICogdW5pZm9ybXMuSyArIGspIC8gJHthQ29tcG9uZW50c31dO2A7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYUNvbXBvbmVudHM7IGorKykge1xuICAgICAgICAgICAgICBjYWxjU3RyICs9IGBcbiAgICAgICAgICAgIHZhbHVlc1ske2l9XSA9IGZtYSgke2IudHlwZS52YWx1ZX0oYV9kYXRhJHthQ29tcG9uZW50cyA9PT0gMSA/ICcnIDogYFske2p9XWB9KSwgYl9kYXRhJHtqfSwgdmFsdWVzWyR7XG4gICAgICAgICAgICAgICAgICBpfV0pO1xcbmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxjU3RyO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBgXG4gICR7XG4gICAgICAgICAgICBzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykucmVnaXN0ZXJJbnRlcm5hbFZhcmlhYmxlcyhiYXRjaERpbXMpLmRlY2xhcmVWYXJpYWJsZXMoXG4gICAgICAgICAgICAgICAgLi4uaW5wdXRWYXJpYWJsZXMsIG91dHB1dCl9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF9zaXplJyl9XG4gICAgbGV0IGNvbCA9IChnbG9iYWxfaWR4ICUgKHVuaWZvcm1zLk4gLyAke2NvbXBvbmVudHN9KSkgKiAke2NvbXBvbmVudHN9O1xuICAgIHZhciBpbmRleDEgPSBnbG9iYWxfaWR4IC8gKHVuaWZvcm1zLk4gLyAke2NvbXBvbmVudHN9KTtcbiAgICBsZXQgc3RyaWRlMSA9IHVuaWZvcm1zLk0gLyAke291dHB1dE51bWJlcn07XG4gICAgbGV0IHJvdyA9IChpbmRleDEgJSBzdHJpZGUxKSAqICR7b3V0cHV0TnVtYmVyfTtcbiAgICBsZXQgYmF0Y2ggPSBpbmRleDEgLyBzdHJpZGUxO1xuXG4gICAgJHtvdXRwdXRTaGFwZS5sZW5ndGggPT09IDIgPyAnJyA6IGBsZXQgYmF0Y2hfaW5kaWNlcyA9ICR7YmF0Y2hEaW1zLm9mZnNldFRvSW5kaWNlcygnYmF0Y2gnKX07YH1cbiAgICAke2dldEluZGljZXMoYSwgYnJvYWRDYXN0QURpbXMpfVxuICAgIGxldCBhX29mZnNldCA9ICR7YS5pbmRpY2VzVG9PZmZzZXQoJ2FfaW5kaWNlcycpfTtcbiAgICAke2dldEluZGljZXMoYiwgYnJvYWRDYXN0QkRpbXMpfVxuICAgIGxldCBiX29mZnNldCA9ICR7Yi5pbmRpY2VzVG9PZmZzZXQoJ2JfaW5kaWNlcycpfTtcbiAgICB2YXIgdmFsdWVzOiBhcnJheTwke291dHB1dC50eXBlLnZhbHVlfSwgJHtvdXRwdXROdW1iZXJ9PjtcbiAgICBmb3IgKHZhciBrOiB1MzIgPSAwdTsgayA8IHVuaWZvcm1zLks7IGsgPSBrICsgJHthQ29tcG9uZW50c30pIHtcbiAgICAgICR7Y2FsY1Jlc3VsdCgpfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke291dHB1dE51bWJlcn11OyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAgICR7cHJvY2Vzc0JpYXN9XG4gICAgICAke2FwcGx5QWN0aXZhdGlvbn1cbiAgICAgIGxldCBjdXJfaW5kaWNlcyA9ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30oYmF0Y2gsIHJvdyArIGksIGNvbCk7XG4gICAgICBsZXQgb2Zmc2V0ID0gJHtvdXRwdXQuaW5kaWNlc1RvT2Zmc2V0KCdjdXJfaW5kaWNlcycpfTtcbiAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KGBvZmZzZXQgLyAke2NvbXBvbmVudHN9YCwgJ3ZhbHVlJyl9O1xuICAgIH1cbiAgfVxuICBgO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdNYXRNdWxOYWl2ZScsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgaGludDogYCR7YWN0aXZhdGlvbkF0dHJpYnV0ZXMuYWN0aXZhdGlvbn07JHtjb21wb25lbnRzfTske2FDb21wb25lbnRzfTske291dHB1dE51bWJlcn07JHtpc0NoYW5uZWxzTGFzdH1gLFxuICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzOiBoYXNCaWFzID8gWydyYW5rJywgJ3JhbmsnLCAncmFuayddIDogWydyYW5rJywgJ3JhbmsnXVxuICAgICAgICB9LFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9XSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICB9O1xuICAgIH07XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogdm9pZCA9PiB7XG4gIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdE11bCByZXF1aXJlcyAyIGlucHV0cy4nKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMF0uZGltc1tpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAxXSAhPT0gaW5wdXRzWzFdLmRpbXNbaW5wdXRzWzFdLmRpbXMubGVuZ3RoIC0gMl0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NoYXJlZCBkaW1lbnNpb24gZG9lcyBub3QgbWF0Y2guJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBtYXRNdWwgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb25zdCBvdXRwdXRTaGFwZSA9IEJyb2FkY2FzdFV0aWwuY2FsY1NoYXBlKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGNvbnRleHQuaW5wdXRzWzFdLmRpbXMsIHRydWUpO1xuICBpZiAoIW91dHB1dFNoYXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IHVzZSBtYXRtdWwgb24gdGhlIGdpdmVuIHRlbnNvcnMnKTtcbiAgfVxuICBjb25zdCBOID0gb3V0cHV0U2hhcGVbb3V0cHV0U2hhcGUubGVuZ3RoIC0gMV07XG4gIGNvbnN0IEsgPSBjb250ZXh0LmlucHV0c1swXS5kaW1zW2NvbnRleHQuaW5wdXRzWzBdLmRpbXMubGVuZ3RoIC0gMV07XG4gIGlmIChOIDwgOCAmJiBLIDwgOCkge1xuICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVOYWl2ZU1hdG11bFByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCB7YWN0aXZhdGlvbjogJyd9LCBvdXRwdXRTaGFwZSkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVNYXRtdWxQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywge2FjdGl2YXRpb246ICcnfSwgb3V0cHV0U2hhcGUpKTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1Bvb2xDb252VXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHR9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVDb252MkRNYXRNdWxQcm9ncmFtSW5mb30gZnJvbSAnLi8zcmQtcGFydHkvY29udjJkX21tX3dlYmdwdSc7XG5pbXBvcnQge2NyZWF0ZU1hdG11bFByb2dyYW1JbmZvfSBmcm9tICcuLzNyZC1wYXJ0eS9tYXRtdWxfcGFja2VkX3dlYmdwdSc7XG5pbXBvcnQge2NyZWF0ZUdyb3VwZWRDb252UHJvZ3JhbUluZm8sIGNyZWF0ZUdyb3VwZWRDb252VmVjdG9yaXplUHJvZ3JhbUluZm99IGZyb20gJy4vY29udi1ncm91cGVkJztcbmltcG9ydCB7SW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlcywgcGFyc2VJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzfSBmcm9tICcuL2Z1c2UtdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVOYWl2ZU1hdG11bFByb2dyYW1JbmZvfSBmcm9tICcuL21hdG11bCc7XG5pbXBvcnQge2NyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvfSBmcm9tICcuL3RyYW5zcG9zZSc7XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVPdXRwdXRTaGFwZSA9XG4gICAgKGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBrZXJuZWxTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sIGRpbGF0aW9uczogcmVhZG9ubHkgbnVtYmVyW10sXG4gICAgIGFkanVzdFBhZHM6IHJlYWRvbmx5IG51bWJlcltdLCBzdHJpZGVzOiByZWFkb25seSBudW1iZXJbXSwgaXNDaGFubmVsTGFzdDogYm9vbGVhbik6IG51bWJlcltdID0+IHtcbiAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IGlucHV0U2hhcGVbMF07XG4gICAgICBjb25zdCBpbnB1dFNwYXRpYWxTaGFwZSA9IGlucHV0U2hhcGUuc2xpY2UoaXNDaGFubmVsTGFzdCA/IDEgOiAyLCBpc0NoYW5uZWxMYXN0ID8gMyA6IDQpO1xuICAgICAgY29uc3Qgc3BhdGlhbFJhbmsgPSBpbnB1dFNwYXRpYWxTaGFwZS5sZW5ndGg7XG4gICAgICBjb25zdCBvdXRDaGFubmVscyA9IGtlcm5lbFNoYXBlWzBdO1xuICAgICAgY29uc3Qga2VybmVsU3BhdGlhbFNoYXBlID0ga2VybmVsU2hhcGUuc2xpY2UoMik7XG4gICAgICBjb25zdCBkaWxhdGVkS2VybmVsU2hhcGUgPSBrZXJuZWxTcGF0aWFsU2hhcGUubWFwKCh2LCBpKSA9PiB2ICsgKHYgLSAxKSAqIChkaWxhdGlvbnNbaV0gLSAxKSk7XG4gICAgICBjb25zdCBpbnB1dFNwYXRpYWxTaGFwZVdpdGhQYWQgPSBpbnB1dFNwYXRpYWxTaGFwZS5tYXAoKHYsIGkpID0+IHYgKyBhZGp1c3RQYWRzW2ldICsgYWRqdXN0UGFkc1tpICsgc3BhdGlhbFJhbmtdKTtcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlID1cbiAgICAgICAgICBpbnB1dFNwYXRpYWxTaGFwZVdpdGhQYWQubWFwKCh2LCBpKSA9PiBNYXRoLmZsb29yKCh2IC0gZGlsYXRlZEtlcm5lbFNoYXBlW2ldICsgc3RyaWRlc1tpXSkgLyBzdHJpZGVzW2ldKSk7XG4gICAgICBvdXRwdXRTaGFwZS5zcGxpY2UoMCwgMCwgYmF0Y2hTaXplKTtcbiAgICAgIG91dHB1dFNoYXBlLnNwbGljZShpc0NoYW5uZWxMYXN0ID8gMyA6IDEsIDAsIG91dENoYW5uZWxzKTtcbiAgICAgIHJldHVybiBvdXRwdXRTaGFwZTtcbiAgICB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZBdHRyaWJ1dGVzIGV4dGVuZHMgSW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlcywgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgYXV0b1BhZDogc3RyaW5nO1xuICByZWFkb25seSBkaWxhdGlvbnM6IHJlYWRvbmx5IG51bWJlcltdO1xuICByZWFkb25seSBmb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG4gIHJlYWRvbmx5IGdyb3VwOiBudW1iZXI7XG4gIHJlYWRvbmx5IGtlcm5lbFNoYXBlOiByZWFkb25seSBudW1iZXJbXTtcbiAgcmVhZG9ubHkgcGFkczogcmVhZG9ubHkgbnVtYmVyW107XG4gIHJlYWRvbmx5IHN0cmlkZXM6IHJlYWRvbmx5IG51bWJlcltdO1xuICByZWFkb25seSB3SXNDb25zdDogYm9vbGVhbjtcbn1cblxuLy8gZm9yIHRyYW5zcG9zaW5nIHdlaWdodCB0ZW5zb3IgZnJvbSBbTSwgQy9ncm91cCwgS0gsIEtXXSB0byBbS0gsIEtXLCBDL2dyb3VwLCBNXVxuY29uc3Qgd2VpZ2h0VHJhbnNwb3NlQXR0cmlidXRlID0gWzIsIDMsIDEsIDBdO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogQ29udkF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgLy8gUmVmZXIgdG8gdGhlIGJlbG93IGxpbmsgZm9yIGFsbCBpbnB1dCBjaGVja3NcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29ubngvb25ueC9ibG9iL21hc3Rlci9kb2NzL09wZXJhdG9ycy5tZCNDb252XG4gIGlmICghaW5wdXRzIHx8IChpbnB1dHMubGVuZ3RoICE9PSAyICYmIGlucHV0cy5sZW5ndGggIT09IDMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb252IHJlcXVpcmVzIDIgb3IgMyBpbnB1dHMnKTtcbiAgfVxuXG4gIC8vIFRPRE8gOiBOZWVkIHRvIGFkZCBzdXBwb3J0IGZvciBtdWx0aS1kaW1lbnNpb25hbCBjb252XG4gIGlmIChpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IDQgJiYgaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjdXJyZW50bHkgb25seSBzdXBwb3J0IGNvbnYgMUQgYW5kIDJEJyk7XG4gIH1cblxuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSBpbnB1dHNbMV0uZGltcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpbHRlciBkb2VzIG5vdCBoYXZlIHNhbWUgZGltZW5zaW9uIGFzIGlucHV0Jyk7XG4gIH1cblxuICAvLyBGSUxURVJfSU5fQ0hBTk5FTCBzaG91bGQgYmUgZXF1YWwgdG8gREFUQV9DSEFOTkVMXG4gIGNvbnN0IGRhdGFDaGFubmVsID0gaW5wdXRzWzBdLmRpbXNbYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJyA/IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDEgOiAxXTtcbiAgY29uc3QgZmlsdGVySW5DaGFubmVsID0gaW5wdXRzWzFdLmRpbXNbMV0gKiBhdHRyaWJ1dGVzLmdyb3VwO1xuICBpZiAoZGF0YUNoYW5uZWwgIT09IGZpbHRlckluQ2hhbm5lbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRklMVEVSX0lOX0NIQU5ORUwgc2hvdWxkIGJlIGVxdWFsIHRvIERBVEFfQ0hBTk5FTCcpO1xuICB9XG5cbiAgLy8gaWYgYmlhcyBpcyBwcm92aWRlZCBpdCBzaG91bGQgYmUgMUQgYW5kIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgZmVhdHVyZSBtYXBzXG4gIGlmIChpbnB1dHMubGVuZ3RoID09PSAzICYmIChpbnB1dHNbMl0uZGltcy5sZW5ndGggIT09IDEgfHwgaW5wdXRzWzFdLmRpbXNbMF0gIT09IGlucHV0c1syXS5kaW1zWzBdKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiaWFzJyk7XG4gIH1cblxuICBjb25zdCBzcGF0aWFsUmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDI7XG4gIC8vIHdyb25nIGRpbGF0aW9ucyBkaW1lbnNpb25cbiAgaWYgKGF0dHJpYnV0ZXMuZGlsYXRpb25zLmxlbmd0aCAhPT0gc3BhdGlhbFJhbmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRpbGF0aW9ucyBzaG91bGQgYmUgJHtzcGF0aWFsUmFua31EYCk7XG4gIH1cblxuICAvLyBXcm9uZyBzdHJpZGVzIGRpbWVuc2lvblxuICBpZiAoYXR0cmlidXRlcy5zdHJpZGVzLmxlbmd0aCAhPT0gc3BhdGlhbFJhbmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHN0cmlkZXMgc2hvdWxkIGJlICR7c3BhdGlhbFJhbmt9RGApO1xuICB9XG5cbiAgLy8gV3JvbmcgcGFkcyBkaW1lbnNpb25cbiAgaWYgKGF0dHJpYnV0ZXMucGFkcy5sZW5ndGggIT09IHNwYXRpYWxSYW5rICogMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgcGFkcyBzaG91bGQgYmUgJHtzcGF0aWFsUmFuayAqIDJ9RGApO1xuICB9XG5cbiAgLy8gaWYga2VybmVsU2hhcGUgaXMgc3BlY2lmaWVkLCBpdCdzIGRhdGEgbGVuZ3RoIG11c3QgYmUgMiBsZXNzIHRoYW4gZGltcyBsZW5ndGggb2YgdGhlIHdlaWdodHMgdGVuc29yXG4gIC8vICh0aGUgZmlyc3QgMiBkaW1zIGFyZSBiYXRjaF9zaXplIGFuZCBjaGFubmVscylcbiAgaWYgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoICE9PSAwICYmIGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoICE9PSBpbnB1dHNbMV0uZGltcy5sZW5ndGggLSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGtlcm5lbCBzaGFwZScpO1xuICB9XG59O1xuXG5jb25zdCBnZXRBZGp1c3RlZENvbnZBdHRyaWJ1dGVzID0gPFQgZXh0ZW5kcyBDb252QXR0cmlidXRlcz4oYXR0cmlidXRlczogVCwgaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiBUID0+IHtcbiAgY29uc3Qga2VybmVsU2hhcGUgPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLnNsaWNlKCk7XG4gIC8vIGlmIGtlcm5lbFNoYXBlIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhpcyBvcCwgaW5mZXIgaXQgZnJvbSB0aGUgd2VpZ2h0IHRlbnNvciBkaW1zXG4gIGZvciAobGV0IGkgPSAyOyBpIDwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoa2VybmVsU2hhcGVbaSAtIDJdID09PSAwKSB7XG4gICAgICBrZXJuZWxTaGFwZVtpIC0gMl0gPSBpbnB1dHNbMV0uZGltc1tpXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFkcyA9IGF0dHJpYnV0ZXMucGFkcy5zbGljZSgpO1xuICBQb29sQ29udlV0aWwuYWRqdXN0UGFkc0Jhc2VkT25BdXRvUGFkKFxuICAgICAgaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuc3RyaWRlcywgYXR0cmlidXRlcy5kaWxhdGlvbnMsIGtlcm5lbFNoYXBlLCBwYWRzLCBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnLFxuICAgICAgYXR0cmlidXRlcy5hdXRvUGFkKTtcblxuICAvLyBhbHdheXMgcmV0dXJuIGEgbmV3IG9iamVjdCBzbyBkb2VzIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIGF0dHJpYnV0ZXNcbiAgY29uc3QgbmV3QXR0cmlidXRlczogVCA9IE9iamVjdC5hc3NpZ24oe30sIGF0dHJpYnV0ZXMpO1xuICBPYmplY3QuYXNzaWduKG5ld0F0dHJpYnV0ZXMsIHtrZXJuZWxTaGFwZSwgcGFkc30pO1xuICByZXR1cm4gbmV3QXR0cmlidXRlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQ29udkF0dHJpYnV0ZXMgPT4ge1xuICBjb25zdCBhY3RpdmF0aW9uQXR0cmlidXRlcyA9IHBhcnNlSW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTtcbiAgLy8gVE9ETyA6IE1ha2UgdGhpcyBnZW5lcmljIGVub3VnaCB0byBjb21wdXRlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgbXVsdGktZGltZW5zaW9uYWwgY29udlxuICBjb25zdCBmb3JtYXQgPSBhdHRyaWJ1dGVzLmZvcm1hdCBhcyAnTkhXQycgfCAnTkNIVyc7XG4gIGNvbnN0IGF1dG9QYWQgPSBbJ05PVFNFVCcsICdWQUxJRCcsICdTQU1FX1VQUEVSJywgJ1NBTUVfTE9XRVInXVthdHRyaWJ1dGVzLmF1dG9fcGFkIGFzIG51bWJlcl07XG4gIGNvbnN0IGRpbGF0aW9ucyA9IGF0dHJpYnV0ZXMuZGlsYXRpb25zIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIGNvbnN0IGdyb3VwID0gYXR0cmlidXRlcy5ncm91cCBhcyBudW1iZXI7XG4gIGNvbnN0IGtlcm5lbFNoYXBlID0gYXR0cmlidXRlcy5rZXJuZWxfc2hhcGUgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgY29uc3QgcGFkcyA9IGF0dHJpYnV0ZXMucGFkcyBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgY29uc3Qgc3RyaWRlcyA9IGF0dHJpYnV0ZXMuc3RyaWRlcyBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICBjb25zdCB3SXNDb25zdCA9IChhdHRyaWJ1dGVzLndfaXNfY29uc3QgYXMgKCkgPT4gYm9vbGVhbikoKTtcblxuICByZXR1cm4ge1xuICAgIGF1dG9QYWQsXG4gICAgZm9ybWF0LFxuICAgIGRpbGF0aW9ucyxcbiAgICBncm91cCxcbiAgICBrZXJuZWxTaGFwZSxcbiAgICBwYWRzLFxuICAgIHN0cmlkZXMsXG4gICAgd0lzQ29uc3QsXG4gICAgLi4uYWN0aXZhdGlvbkF0dHJpYnV0ZXMsXG4gICAgY2FjaGVLZXk6IGAke2F0dHJpYnV0ZXMuZm9ybWF0fTske2FjdGl2YXRpb25BdHRyaWJ1dGVzLmFjdGl2YXRpb259O2BcbiAgfTtcbn07XG5cbmNvbnN0IGNvbnYyZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IENvbnZBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGFkanVzdGVkQXR0cmlidXRlcyA9IGdldEFkanVzdGVkQ29udkF0dHJpYnV0ZXMoYXR0cmlidXRlcywgaW5wdXRzKTtcblxuICAvLyBjaGVjayBhdHRyaWJ1dGVzXG5cbiAgLy8gY29uc3QgaGFzUHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyA9IGZhbHNlOyAvKiBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgcHJlbHUgYWN0aXZhdGlvbiB3ZWlnaHRzICovXG4gIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJztcbiAgaWYgKGF0dHJpYnV0ZXMuZ3JvdXAgIT09IDEpIHtcbiAgICAvLyBOVklESUEgR1BVIHdpdGggYW1wZXJlIGFyY2hpdGVjdHVyZSBmYWlscyB3aXRoIGJlbG93IDIgY2FzZXMsIGJ1dCB3ZSBjb3VsZG4ndCByZXBybyB0aGVtIHdpdGggYW55IG90aGVyXG4gICAgLy8gR1BVcy4gU28ganVzdCBkaXNhYmxlIHZlY3Rvcml6ZSBvbiBOVklESUEgYW1wZXJlIHRvIGVuc3VyZSBhbHdheXMgY29ycmVjdCBvdXRwdXRzLlxuICAgIC8vIFt3ZWJncHVdQ29udiAtIGNvbnYgLSB2ZWN0b3JpemUgZ3JvdXAgLSBCXG4gICAgLy8gW3dlYmdwdV1Db252IC0gY29udiAtIHZlY3Rvcml6ZSBncm91cCAtIERcbiAgICBjb25zdCBlbmFibGVHcm91cGVkQ29udlZlY3Rvcml6ZSA9ICFjb250ZXh0LmFkYXB0ZXJJbmZvLmlzQXJjaGl0ZWN0dXJlKCdhbXBlcmUnKTtcbiAgICBpZiAoZW5hYmxlR3JvdXBlZENvbnZWZWN0b3JpemUgJiYgaXNDaGFubmVsc0xhc3QgJiYgaW5wdXRzWzFdLmRpbXNbMF0gPT09IGF0dHJpYnV0ZXMuZ3JvdXAgJiZcbiAgICAgICAgaW5wdXRzWzFdLmRpbXNbMV0gPT09IDEgJiYgYXR0cmlidXRlcy5kaWxhdGlvbnNbMF0gPT09IDEgJiYgYXR0cmlidXRlcy5kaWxhdGlvbnNbMV0gPT09IDEpIHtcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gY2FsY3VsYXRlT3V0cHV0U2hhcGUoXG4gICAgICAgICAgaW5wdXRzWzBdLmRpbXMsIGlucHV0c1sxXS5kaW1zLCBhdHRyaWJ1dGVzLmRpbGF0aW9ucywgYWRqdXN0ZWRBdHRyaWJ1dGVzLnBhZHMsIGF0dHJpYnV0ZXMuc3RyaWRlcyxcbiAgICAgICAgICBpc0NoYW5uZWxzTGFzdCk7XG4gICAgICBjb25zdCB0cmFuc3Bvc2VkV2VpZ2h0ID0gKGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCBhcyBUZW5zb3JWaWV3IHwgdW5kZWZpbmVkKSA/P1xuICAgICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oaW5wdXRzWzFdLCB3ZWlnaHRUcmFuc3Bvc2VBdHRyaWJ1dGUpLFxuICAgICAgICAgICAgICB7aW5wdXRzOiBbMV0sIG91dHB1dHM6IFthdHRyaWJ1dGVzLndJc0NvbnN0ID8gLTIgOiAtMV19KVswXTtcbiAgICAgIGlmIChhdHRyaWJ1dGVzLndJc0NvbnN0ICYmICFjb250ZXh0Lmtlcm5lbEN1c3RvbURhdGEud1QpIHtcbiAgICAgICAgY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUID0gdHJhbnNwb3NlZFdlaWdodDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnZJbnB1dHMgPSBbaW5wdXRzWzBdLCB0cmFuc3Bvc2VkV2VpZ2h0XTtcbiAgICAgIGlmIChpbnB1dHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGNvbnZJbnB1dHMucHVzaChpbnB1dHNbMl0pO1xuICAgICAgfVxuICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIGNyZWF0ZUdyb3VwZWRDb252VmVjdG9yaXplUHJvZ3JhbUluZm8oY29udklucHV0cywgYWRqdXN0ZWRBdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZSksIHtpbnB1dHM6IGNvbnZJbnB1dHN9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUdyb3VwZWRDb252UHJvZ3JhbUluZm8oaW5wdXRzLCBhZGp1c3RlZEF0dHJpYnV0ZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPT09IDM7XG4gIGNvbnN0IGlucHV0SGVpZ2h0ID0gaW5wdXRzWzBdLmRpbXNbaXNDaGFubmVsc0xhc3QgPyAxIDogMl07XG4gIGNvbnN0IGlucHV0V2lkdGggPSBpbnB1dHNbMF0uZGltc1tpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXTtcbiAgY29uc3QgaW5wdXRDaGFubmVscyA9IGlucHV0c1swXS5kaW1zW2lzQ2hhbm5lbHNMYXN0ID8gMyA6IDFdO1xuICBjb25zdCB3ZWlnaHRIZWlnaHQgPSBpbnB1dHNbMV0uZGltc1syXTtcbiAgY29uc3Qgd2VpZ2h0V2lkdGggPSBpbnB1dHNbMV0uZGltc1szXTtcblxuICBjb25zdCBvdXRwdXRTaGFwZSA9IGNhbGN1bGF0ZU91dHB1dFNoYXBlKFxuICAgICAgaW5wdXRzWzBdLmRpbXMsIGlucHV0c1sxXS5kaW1zLCBhdHRyaWJ1dGVzLmRpbGF0aW9ucywgYWRqdXN0ZWRBdHRyaWJ1dGVzLnBhZHMsIGF0dHJpYnV0ZXMuc3RyaWRlcyxcbiAgICAgIGlzQ2hhbm5lbHNMYXN0KTtcbiAgY29uc3Qgb3V0SGVpZ2h0ID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAxIDogMl07XG4gIGNvbnN0IG91dFdpZHRoID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAyIDogM107XG4gIGNvbnN0IG91dENoYW5uZWxzID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAzIDogMV07XG5cbiAgY29uc3Qgc2FtZVNpemUgPSBpc0NoYW5uZWxzTGFzdCAmJiB3ZWlnaHRIZWlnaHQgPT09IGlucHV0SGVpZ2h0ICYmIHdlaWdodFdpZHRoID09PSBpbnB1dFdpZHRoICYmXG4gICAgICBhdHRyaWJ1dGVzLnBhZHNbMF0gPT09IDAgJiYgYXR0cmlidXRlcy5wYWRzWzFdID09PSAwO1xuICBpZiAoc2FtZVNpemUgfHxcbiAgICAgICh3ZWlnaHRIZWlnaHQgPT09IDEgJiYgd2VpZ2h0V2lkdGggPT09IDEgJiYgYXR0cmlidXRlcy5kaWxhdGlvbnNbMF0gPT09IDEgJiYgYXR0cmlidXRlcy5kaWxhdGlvbnNbMV0gPT09IDEgJiZcbiAgICAgICBhdHRyaWJ1dGVzLnN0cmlkZXNbMF0gPT09IDEgJiYgYXR0cmlidXRlcy5zdHJpZGVzWzFdID09PSAxICYmIGF0dHJpYnV0ZXMucGFkc1swXSA9PT0gMCAmJlxuICAgICAgIGF0dHJpYnV0ZXMucGFkc1sxXSA9PT0gMCkpIHtcbiAgICAvLyBjb252MmRCeU1hdE11bFxuICAgIGNvbnN0IGJhdGNoID0gb3V0cHV0U2hhcGVbMF07XG4gICAgbGV0IHhSZXNoYXBlZCwgd1Jlc2hhcGVkLCBtYXRtdWxPdXRwdXRTaGFwZTtcbiAgICBjb25zdCBtYXRtdWxJbnB1dHMgPSBbXTtcbiAgICBpZiAoaXNDaGFubmVsc0xhc3QpIHtcbiAgICAgIGNvbnN0IHRyYW5zcG9zZWRXZWlnaHQgPSAoY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUIGFzIFRlbnNvclZpZXcgfCB1bmRlZmluZWQpID8/XG4gICAgICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgICAgICBjcmVhdGVUcmFuc3Bvc2VQcm9ncmFtSW5mbyhpbnB1dHNbMV0sIHdlaWdodFRyYW5zcG9zZUF0dHJpYnV0ZSksXG4gICAgICAgICAgICAgIHtpbnB1dHM6IFsxXSwgb3V0cHV0czogW2F0dHJpYnV0ZXMud0lzQ29uc3QgPyAtMiA6IC0xXX0pWzBdO1xuICAgICAgaWYgKGF0dHJpYnV0ZXMud0lzQ29uc3QgJiYgIWNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCkge1xuICAgICAgICBjb250ZXh0Lmtlcm5lbEN1c3RvbURhdGEud1QgPSB0cmFuc3Bvc2VkV2VpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKHNhbWVTaXplKSB7XG4gICAgICAgIGNvbnN0IHNoYXJlZERpbSA9IGlucHV0SGVpZ2h0ICogaW5wdXRXaWR0aCAqIGlucHV0Q2hhbm5lbHM7XG4gICAgICAgIHhSZXNoYXBlZCA9IGlucHV0c1swXS5yZXNoYXBlKFsxLCBiYXRjaCwgc2hhcmVkRGltXSk7XG4gICAgICAgIHdSZXNoYXBlZCA9IHRyYW5zcG9zZWRXZWlnaHQucmVzaGFwZShbMSwgc2hhcmVkRGltLCBvdXRDaGFubmVsc10pO1xuICAgICAgICBtYXRtdWxPdXRwdXRTaGFwZSA9IFsxLCBiYXRjaCwgb3V0Q2hhbm5lbHNdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeFJlc2hhcGVkID0gaW5wdXRzWzBdLnJlc2hhcGUoW2JhdGNoLCBpbnB1dEhlaWdodCAqIGlucHV0V2lkdGgsIGlucHV0Q2hhbm5lbHNdKTtcbiAgICAgICAgd1Jlc2hhcGVkID0gdHJhbnNwb3NlZFdlaWdodC5yZXNoYXBlKFsxLCBpbnB1dENoYW5uZWxzLCBvdXRDaGFubmVsc10pO1xuICAgICAgICBtYXRtdWxPdXRwdXRTaGFwZSA9IFtiYXRjaCwgb3V0SGVpZ2h0ICogb3V0V2lkdGgsIG91dENoYW5uZWxzXTtcbiAgICAgIH1cbiAgICAgIG1hdG11bElucHV0cy5wdXNoKHhSZXNoYXBlZCk7XG4gICAgICBtYXRtdWxJbnB1dHMucHVzaCh3UmVzaGFwZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB4UmVzaGFwZWQgPSBpbnB1dHNbMF0ucmVzaGFwZShbYmF0Y2gsIGlucHV0Q2hhbm5lbHMsIGlucHV0SGVpZ2h0ICogaW5wdXRXaWR0aF0pO1xuICAgICAgd1Jlc2hhcGVkID0gaW5wdXRzWzFdLnJlc2hhcGUoWzEsIG91dENoYW5uZWxzLCBpbnB1dENoYW5uZWxzXSk7XG4gICAgICBtYXRtdWxPdXRwdXRTaGFwZSA9IFtiYXRjaCwgb3V0Q2hhbm5lbHMsIG91dEhlaWdodCAqIG91dFdpZHRoXTtcbiAgICAgIG1hdG11bElucHV0cy5wdXNoKHdSZXNoYXBlZCk7XG4gICAgICBtYXRtdWxJbnB1dHMucHVzaCh4UmVzaGFwZWQpO1xuICAgIH1cbiAgICBpZiAoaGFzQmlhcykge1xuICAgICAgbWF0bXVsSW5wdXRzLnB1c2goaW5wdXRzWzJdKTtcbiAgICB9XG4gICAgY29uc3QgTiA9IG1hdG11bE91dHB1dFNoYXBlWzJdO1xuICAgIGNvbnN0IEsgPSBtYXRtdWxJbnB1dHNbMF0uZGltc1ttYXRtdWxJbnB1dHNbMF0uZGltcy5sZW5ndGggLSAxXTtcbiAgICAvLyBUdW5lIHRoZSB0aHJlc2hvbGQuXG4gICAgaWYgKE4gPCA4ICYmIEsgPCA4KSB7XG4gICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlTmFpdmVNYXRtdWxQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgICAgbWF0bXVsSW5wdXRzLCBhZGp1c3RlZEF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlLCBtYXRtdWxPdXRwdXRTaGFwZSwgaXNDaGFubmVsc0xhc3QpLFxuICAgICAgICAgIHtpbnB1dHM6IG1hdG11bElucHV0c30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlTWF0bXVsUHJvZ3JhbUluZm8obWF0bXVsSW5wdXRzLCBhZGp1c3RlZEF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlLCBtYXRtdWxPdXRwdXRTaGFwZSwgaXNDaGFubmVsc0xhc3QpLFxuICAgICAgICAgIHtpbnB1dHM6IG1hdG11bElucHV0c30pO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUT0RPOiBpbXBsZW1lbnQgY29udjJkV2l0aEltMkNvbCgpXG5cbiAgY29uc3Qgc2VxdWVudGlhbEFjY2Vzc0J5VGhyZWFkcyA9IC8qIGJhY2tlbmQuYWRhcHRlckluZm8uaXNJbnRlbCgpICovIHRydWU7XG5cbiAgLy8gU1RFUC4xOiB0cmFuc3Bvc2Ugd2VpZ2h0XG4gIGNvbnN0IHRyYW5zcG9zZWRXZWlnaHQgPSAoY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUIGFzIFRlbnNvclZpZXcgfCB1bmRlZmluZWQpID8/XG4gICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oaW5wdXRzWzFdLCB3ZWlnaHRUcmFuc3Bvc2VBdHRyaWJ1dGUpLFxuICAgICAgICAgIHtpbnB1dHM6IFsxXSwgb3V0cHV0czogW2F0dHJpYnV0ZXMud0lzQ29uc3QgPyAtMiA6IC0xXX0pWzBdO1xuICBpZiAoYXR0cmlidXRlcy53SXNDb25zdCAmJiAhY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUKSB7XG4gICAgY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUID0gdHJhbnNwb3NlZFdlaWdodDtcbiAgfVxuXG4gIC8vIFNURVAuMjogcHJlcGFyZSByZXNoYXBlZCBpbnB1dHNcbiAgY29uc3QgY29udklucHV0cyA9IFtpbnB1dHNbMF0sIHRyYW5zcG9zZWRXZWlnaHRdO1xuICBpZiAoaGFzQmlhcykge1xuICAgIGNvbnZJbnB1dHMucHVzaChpbnB1dHNbMl0pO1xuICB9XG5cbiAgLy8gU1RFUC4zOiBjb21wdXRlIG1hdG11bFxuICBjb25zdCBkaW1BT3V0ZXIgPSBpc0NoYW5uZWxzTGFzdCA/IG91dEhlaWdodCAqIG91dFdpZHRoIDogb3V0Q2hhbm5lbHM7XG4gIGNvbnN0IGRpbUJPdXRlciA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0Q2hhbm5lbHMgOiBvdXRIZWlnaHQgKiBvdXRXaWR0aDtcbiAgY29uc3QgZGltSW5uZXIgPSB3ZWlnaHRIZWlnaHQgKiB3ZWlnaHRXaWR0aCAqIGlucHV0Q2hhbm5lbHM7XG4gIGNvbnRleHQuY29tcHV0ZShcbiAgICAgIGNyZWF0ZUNvbnYyRE1hdE11bFByb2dyYW1JbmZvKFxuICAgICAgICAgIGNvbnZJbnB1dHMsIGFkanVzdGVkQXR0cmlidXRlcywgb3V0cHV0U2hhcGUsIGRpbUFPdXRlciwgZGltQk91dGVyLCBkaW1Jbm5lciwgaGFzQmlhcyxcbiAgICAgICAgICBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzKSxcbiAgICAgIHtpbnB1dHM6IGNvbnZJbnB1dHN9KTtcbn07XG5cbmNvbnN0IGNvbnYxZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogQ29udkF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgLy8gZXh0ZW5kIHRoZSBpbnB1dCB0byAyRCBieSBhZGRpbmcgSCBkaW1lbnNpb25cbiAgY29uc3QgaXNDaGFubmVsTGFzdCA9IGF0dHJpYnV0ZXMuZm9ybWF0ID09PSAnTkhXQyc7XG4gIGNvbnN0IGlucHV0cyA9IFtcbiAgICBjb250ZXh0LmlucHV0c1swXS5yZXNoYXBlKFxuICAgICAgICBpc0NoYW5uZWxMYXN0ID9cbiAgICAgICAgICAgIC8vIFtOLCBXLCBDXSAtPiBbTiwgSD0xLCBXLCBDXVxuICAgICAgICAgICAgW2NvbnRleHQuaW5wdXRzWzBdLmRpbXNbMF0sIDEsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMV0sIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMl1dIDpcbiAgICAgICAgICAgIC8vIFtOLCBDLCBXXSAtPiBbTiwgQywgSD0xLCBXXVxuICAgICAgICAgICAgW2NvbnRleHQuaW5wdXRzWzBdLmRpbXNbMF0sIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMV0sIDEsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMl1dKSxcbiAgICAvL1tGSUxURVJfT1VUX0NIQU5ORUwsIEZJTFRFUl9JTl9DSEFOTkVMLCBrV10gLT4gW0ZJTFRFUl9PVVRfQ0hBTk5FTCwgRklMVEVSX0lOX0NIQU5ORUwsIGtIPTEsIGtXXVxuICAgIGNvbnRleHQuaW5wdXRzWzFdLnJlc2hhcGUoW2NvbnRleHQuaW5wdXRzWzFdLmRpbXNbMF0sIGNvbnRleHQuaW5wdXRzWzFdLmRpbXNbMV0sIDEsIGNvbnRleHQuaW5wdXRzWzFdLmRpbXNbMl1dKVxuICBdO1xuICBpZiAoY29udGV4dC5pbnB1dHMubGVuZ3RoID09PSAzKSB7XG4gICAgaW5wdXRzLnB1c2goY29udGV4dC5pbnB1dHNbMl0pO1xuICB9XG4gIGNvbnN0IHBhZHMgPSBbMCwgYXR0cmlidXRlcy5wYWRzWzBdLCAwLCBhdHRyaWJ1dGVzLnBhZHNbMV1dO1xuICBjb25zdCBzdHJpZGVzID0gWzFdLmNvbmNhdChhdHRyaWJ1dGVzLnN0cmlkZXMpO1xuICBjb25zdCBkaWxhdGlvbnMgPSBbMV0uY29uY2F0KGF0dHJpYnV0ZXMuZGlsYXRpb25zKTtcbiAgY29uc3Qga2VybmVsU2hhcGUgPSBbMV0uY29uY2F0KGF0dHJpYnV0ZXMua2VybmVsU2hhcGUpO1xuICBjb25zdCBhZGp1c3RlZEF0dHJpYnV0ZXMgPSBnZXRBZGp1c3RlZENvbnZBdHRyaWJ1dGVzKHsuLi5hdHRyaWJ1dGVzLCBwYWRzLCBzdHJpZGVzLCBkaWxhdGlvbnMsIGtlcm5lbFNoYXBlfSwgaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUdyb3VwZWRDb252UHJvZ3JhbUluZm8oXG4gICAgICBpbnB1dHMsIGFkanVzdGVkQXR0cmlidXRlcyxcbiAgICAgIG91dHB1dFNoYXBlID0+IGlzQ2hhbm5lbExhc3QgPyBbb3V0cHV0U2hhcGVbMF0sIG91dHB1dFNoYXBlWzJdLCBvdXRwdXRTaGFwZVszXV0gOiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnYgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IENvbnZBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTsgIC8vIGN1cnJlbnRseSB3aWxsIGZhaWwgaWYgbm90IGNvbnYxRC8yRFxuICBpZiAoY29udGV4dC5pbnB1dHNbMF0uZGltcy5sZW5ndGggPT09IDMpIHtcbiAgICBjb252MWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgY29udjJkKGNvbnRleHQsIGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgfVxufTtcbiIsICIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIHNhbXBsZWQgZnJvbSBbQHRlbnNvcmZsb3cvdGZqc10gdGZqcy1iYWNrZW5kLXdlYmdwdS9zcmMvY29udl9iYWNrcHJvcF9tbV93ZWJncHUudHNcbi8vXG4vLyBtb2RpZmllZCB0byBmaXQgdGhlIG5lZWRzIG9mIHRoZSBwcm9qZWN0XG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7TE9HX0RFQlVHfSBmcm9tICcuLi8uLi8uLi9sb2cnO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1Byb2dyYW1JbmZvLCBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeSwgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZSwgVW5pZm9ybXNBcnJheVR5cGV9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQge0NvbnZUcmFuc3Bvc2VBdHRyaWJ1dGVzfSBmcm9tICcuLi9jb252LXRyYW5zcG9zZSc7XG5pbXBvcnQge2FwcGVuZEFjdGl2YXRpb25Vbmlmb3JtcywgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zRGF0YSwgZ2V0QWN0aXZhdGlvblNuaXBwZXR9IGZyb20gJy4uL2Z1c2UtdXRpbHMnO1xuXG5pbXBvcnQge2JpYXNTbmlwcGV0fSBmcm9tICcuL2FjdGl2YXRpb25fdXRpbCc7XG5pbXBvcnQge3V0aWxGdW5jdGlvbnN9IGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7bWFrZU1hdE11bFBhY2tlZFNvdXJjZSwgbWFrZU1hdE11bFBhY2tlZFZlYzRTb3VyY2V9IGZyb20gJy4vbWF0bXVsX3BhY2tlZF93ZWJncHUnO1xuXG5jb25zdCBjb252MmRUcmFuc3Bvc2VDb21tb25TbmlwcGV0ID1cbiAgICAoaXNDaGFubmVsc0xhc3Q6IGJvb2xlYW4sIGFkZEJpYXMgPSBmYWxzZSwgYXR0cmlidXRlczogQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMsIHR5cGU6IHN0cmluZyxcbiAgICAgaW5uZXJFbGVtZW50U2l6ZSA9IDQpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgZ2V0V1NuaXBwZXQgPSAoaW5uZXJFbGVtZW50U2l6ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaW5uZXJFbGVtZW50U2l6ZSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiAncmV0dXJuIHdbZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQsIHZlYzQ8aTMyPih1bmlmb3Jtcy53X3NoYXBlKSldOyc7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIGxldCBjb29yZDEgPSB2ZWM0PGkzMj4oY29vcmRYLCBjb29yZFksIGNvbCArIDEsIHJvd0lubmVyKTtcbiAgICAgICAgICAgIGxldCBjb29yZDIgPSB2ZWM0PGkzMj4oY29vcmRYLCBjb29yZFksIGNvbCArIDIsIHJvd0lubmVyKTtcbiAgICAgICAgICAgIGxldCBjb29yZDMgPSB2ZWM0PGkzMj4oY29vcmRYLCBjb29yZFksIGNvbCArIDMsIHJvd0lubmVyKTtcbiAgICAgICAgICAgIGxldCB2MCA9IHdbZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQsIHZlYzQ8aTMyPih1bmlmb3Jtcy53X3NoYXBlKSldO1xuICAgICAgICAgICAgbGV0IHYxID0gd1tnZXRJbmRleEZyb21Db29yZHM0RChjb29yZDEsIHZlYzQ8aTMyPih1bmlmb3Jtcy53X3NoYXBlKSldO1xuICAgICAgICAgICAgbGV0IHYyID0gd1tnZXRJbmRleEZyb21Db29yZHM0RChjb29yZDIsIHZlYzQ8aTMyPih1bmlmb3Jtcy53X3NoYXBlKSldO1xuICAgICAgICAgICAgbGV0IHYzID0gd1tnZXRJbmRleEZyb21Db29yZHM0RChjb29yZDMsIHZlYzQ8aTMyPih1bmlmb3Jtcy53X3NoYXBlKSldO1xuICAgICAgICAgICAgcmV0dXJuICR7dHlwZX0odjAsIHYxLCB2MiwgdjMpO1xuICAgICAgICAgICAgYDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbm5lckVsZW1lbnRTaXplICR7aW5uZXJFbGVtZW50U2l6ZX0gaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvb3JkQVNuaXBwZXQgPSBpc0NoYW5uZWxzTGFzdCA/IGBcbiAgICAgIGxldCBjb29yZCA9IHZlYzQ8aTMyPihiYXRjaCwgaVhSLCBpWEMsIHhDaCk7XG4gICAgICBgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcbiAgICAgIGxldCBjb29yZCA9IHZlYzQ8aTMyPihiYXRjaCwgeENoLCBpWFIsIGlYQyk7XG4gICAgICBgO1xuXG4gICAgICBjb25zdCBjb29yZFJlc1NuaXBwZXQgPSBpc0NoYW5uZWxzTGFzdCA/IGBcbiAgICBsZXQgY29vcmRzID0gdmVjNDxpMzI+KFxuICAgICAgYmF0Y2gsXG4gICAgICByb3cgLyBvdXRXaWR0aCxcbiAgICAgIHJvdyAlIG91dFdpZHRoLFxuICAgICAgY29sKTtcbiAgICBgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgIGxldCBjb29yZHMgPSB2ZWM0PGkzMj4oXG4gICAgICBiYXRjaCxcbiAgICAgIHJvdyxcbiAgICAgIGNvbCAvIG91dFdpZHRoLFxuICAgICAgY29sICUgb3V0V2lkdGgpO1xuICAgIGA7XG5cbiAgICAgIGNvbnN0IHhIZWlnaHQgPSBpc0NoYW5uZWxzTGFzdCA/ICdpMzIodW5pZm9ybXMueF9zaGFwZVsxXSknIDogJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzJdKSc7XG4gICAgICBjb25zdCB4V2lkdGggPSBpc0NoYW5uZWxzTGFzdCA/ICdpMzIodW5pZm9ybXMueF9zaGFwZVsyXSknIDogJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzNdKSc7XG4gICAgICBjb25zdCByb3cgPSBpc0NoYW5uZWxzTGFzdCA/ICdyb3cnIDogJ2NvbCc7XG4gICAgICBjb25zdCBjb2wgPSBpc0NoYW5uZWxzTGFzdCA/ICdjb2wnIDogJ3Jvdyc7XG5cbiAgICAgIGNvbnN0IHJlYWRBU25pcHBldCA9IGBcbiAgICAgIGxldCBpbkNoYW5uZWxzID0gJHtpc0NoYW5uZWxzTGFzdCA/ICdpMzIodW5pZm9ybXMueF9zaGFwZVszXSknIDogJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzFdKSd9O1xuICAgICAgbGV0IG91dFdpZHRoID0gJHtpc0NoYW5uZWxzTGFzdCA/ICdpMzIodW5pZm9ybXMucmVzdWx0X3NoYXBlWzJdKScgOiAnaTMyKHVuaWZvcm1zLnJlc3VsdF9zaGFwZVszXSknfTtcbiAgICAgIGxldCBvdXRSb3cgPSAke3Jvd30gLyBvdXRXaWR0aDtcbiAgICAgIGxldCBvdXRDb2wgPSAke3Jvd30gJSBvdXRXaWR0aDtcblxuICAgICAgbGV0IFdSb3cgPSAke2NvbH0gLyAodW5pZm9ybXMuZmlsdGVyX2RpbXNbMV0gKiBpbkNoYW5uZWxzKTtcbiAgICAgIGxldCBXQ29sID0gJHtjb2x9IC8gaW5DaGFubmVscyAlIHVuaWZvcm1zLmZpbHRlcl9kaW1zWzFdO1xuICAgICAgbGV0IHhSID0gZjMyKG91dFJvdyAtIHVuaWZvcm1zLnBhZHNbMF0gKyB1bmlmb3Jtcy5kaWxhdGlvbnNbMF0gKiBXUm93KSAvIGYzMih1bmlmb3Jtcy5zdHJpZGVzWzBdKTtcbiAgICAgIGxldCB4QyA9IGYzMihvdXRDb2wgLSB1bmlmb3Jtcy5wYWRzWzFdICsgdW5pZm9ybXMuZGlsYXRpb25zWzFdICogV0NvbCkgLyBmMzIodW5pZm9ybXMuc3RyaWRlc1sxXSk7XG4gICAgICBpZiAoeFIgPCAwLjAgfHwgeFIgPj0gZjMyKCR7eEhlaWdodH0pIHx8IGZyYWN0KHhSKSA+IDAuMCkge1xuICAgICAgICByZXR1cm4gJHt0eXBlfSgwLjApO1xuICAgICAgfVxuICAgICAgaWYgKHhDIDwgMC4wIHx8IHhDID49IGYzMigke3hXaWR0aH0pIHx8IGZyYWN0KHhDKSA+IDAuMCkge1xuICAgICAgICByZXR1cm4gJHt0eXBlfSgwLjApO1xuICAgICAgfVxuICAgICAgbGV0IGlYUiA9IGkzMih4Uik7XG4gICAgICBsZXQgaVhDID0gaTMyKHhDKTtcbiAgICAgIGxldCB4Q2ggPSAke2NvbH0gJSBpbkNoYW5uZWxzO1xuICAgICAgJHtjb29yZEFTbmlwcGV0fVxuICAgICAgcmV0dXJuIHhbZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQsIHZlYzQ8aTMyPih1bmlmb3Jtcy54X3NoYXBlKSkvJHtpbm5lckVsZW1lbnRTaXplfV07YDtcblxuICAgICAgY29uc3Qgc2FtcGxlQSA9IGlzQ2hhbm5lbHNMYXN0ID8gYFxuICAgICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplfTtcbiAgICAgIGlmIChyb3cgPCB1bmlmb3Jtcy5kaW1fYV9vdXRlciAmJiBjb2wgPCB1bmlmb3Jtcy5kaW1faW5uZXIpIHtcbiAgICAgICAgJHtyZWFkQVNuaXBwZXR9XG4gICAgICB9XG4gICAgICByZXR1cm4gJHt0eXBlfSgwLjApO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplfTtcbiAgICAgIGlmIChyb3cgPCB1bmlmb3Jtcy5kaW1faW5uZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2Jfb3V0ZXIpIHtcbiAgICAgICAgJHtyZWFkQVNuaXBwZXR9XG4gICAgICB9XG4gICAgICByZXR1cm4gJHt0eXBlfSgwLjApO2A7XG5cbiAgICAgIGNvbnN0IHNhbXBsZVcgPSBgXG4gICAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemV9O1xuICAgICAgbGV0IGluQ2hhbm5lbHMgPSAke2lzQ2hhbm5lbHNMYXN0ID8gJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzNdKScgOiAnaTMyKHVuaWZvcm1zLnhfc2hhcGVbMV0pJ307XG4gICAgICBsZXQgY29vcmRYID0gdW5pZm9ybXMuZmlsdGVyX2RpbXNbMF0gLSAxIC0gcm93IC8gKHVuaWZvcm1zLmZpbHRlcl9kaW1zWzFdICogaW5DaGFubmVscyk7XG4gICAgICBsZXQgY29vcmRZID0gdW5pZm9ybXMuZmlsdGVyX2RpbXNbMV0gLSAxIC0gKHJvdyAvIGluQ2hhbm5lbHMpICUgdW5pZm9ybXMuZmlsdGVyX2RpbXNbMV07XG4gICAgICBpZiAoJHtcbiAgICAgICAgICBpc0NoYW5uZWxzTGFzdCA/ICdyb3cgPCB1bmlmb3Jtcy5kaW1faW5uZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2Jfb3V0ZXInIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdyb3cgPCB1bmlmb3Jtcy5kaW1faW5uZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2Ffb3V0ZXInfSAgJiYgY29vcmRYID49IDAgJiYgY29vcmRZID49IDApIHtcbiAgICAgICAgbGV0IHJvd0lubmVyID0gcm93ICUgaW5DaGFubmVscztcbiAgICAgICAgbGV0IGNvb3JkID0gdmVjNDxpMzI+KGNvb3JkWCwgY29vcmRZLCBjb2wsIHJvd0lubmVyKTtcbiAgICAgICAgJHtnZXRXU25pcHBldChpbm5lckVsZW1lbnRTaXplKX1cbiAgICAgIH1cbiAgICAgIHJldHVybiAke3R5cGV9KDAuMCk7XG4gICAgICBgO1xuXG4gICAgICBjb25zdCBhcHBseUFjdGl2YXRpb24gPSBnZXRBY3RpdmF0aW9uU25pcHBldChhdHRyaWJ1dGVzLCB0eXBlKTtcbiAgICAgIGNvbnN0IHVzZXJDb2RlID0gYFxuICBmbiBtbV9yZWFkQShiYXRjaDogaTMyLCByb3cgOiBpMzIsIGNvbEluIDogaTMyKSAtPiAke3R5cGV9IHtcbiAgICAke2lzQ2hhbm5lbHNMYXN0ID8gc2FtcGxlQSA6IHNhbXBsZVd9XG4gIH1cblxuICBmbiBtbV9yZWFkQihiYXRjaDogaTMyLCByb3cgOiBpMzIsIGNvbEluIDogaTMyKSAtPiAke3R5cGV9IHtcbiAgICAke2lzQ2hhbm5lbHNMYXN0ID8gc2FtcGxlVyA6IHNhbXBsZUF9XG4gIH1cblxuICBmbiBtbV93cml0ZShiYXRjaDogaTMyLCByb3cgOiBpMzIsIGNvbEluIDogaTMyLCB2YWx1ZUlucHV0IDogJHt0eXBlfSkge1xuICAgIGxldCBjb2wgPSBjb2xJbiAqICR7aW5uZXJFbGVtZW50U2l6ZX07XG4gICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9hX291dGVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9iX291dGVyKSB7XG4gICAgICB2YXIgdmFsdWUgPSB2YWx1ZUlucHV0O1xuICAgICAgbGV0IG91dFdpZHRoID0gJHtpc0NoYW5uZWxzTGFzdCA/ICdpMzIodW5pZm9ybXMucmVzdWx0X3NoYXBlWzJdKScgOiAnaTMyKHVuaWZvcm1zLnJlc3VsdF9zaGFwZVszXSknfTtcbiAgICAgICR7Y29vcmRSZXNTbmlwcGV0fVxuICAgICAgJHtiaWFzU25pcHBldChhZGRCaWFzKX1cbiAgICAgICR7YXBwbHlBY3RpdmF0aW9ufVxuICAgICAgcmVzdWx0W2dldEluZGV4RnJvbUNvb3JkczREKGNvb3JkcywgdmVjNDxpMzI+KHVuaWZvcm1zLnJlc3VsdF9zaGFwZSkpLyR7aW5uZXJFbGVtZW50U2l6ZX1dID0gdmFsdWU7XG4gICAgfVxuICB9YDtcbiAgICAgIHJldHVybiB1c2VyQ29kZTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ29udjJEVHJhbnNwb3NlTWF0TXVsUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgZGltQU91dGVyOiBudW1iZXIsIGRpbUJPdXRlcjogbnVtYmVyLCBkaW1Jbm5lcjogbnVtYmVyLCBoYXNCaWFzOiBib29sZWFuLFxuICAgICBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzOiBib29sZWFuKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICAgICAgY29uc3QgaW5DaGFubmVscyA9IGlzQ2hhbm5lbHNMYXN0ID8gaW5wdXRzWzBdLmRpbXNbM10gOiBpbnB1dHNbMF0uZGltc1sxXTtcbiAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IG91dHB1dFNoYXBlWzBdO1xuICAgICAgY29uc3Qgb3V0V2lkdGggPSBpc0NoYW5uZWxzTGFzdCA/IG91dHB1dFNoYXBlWzJdIDogb3V0cHV0U2hhcGVbM107XG4gICAgICBjb25zdCBvdXRIZWlnaHQgPSBpc0NoYW5uZWxzTGFzdCA/IG91dHB1dFNoYXBlWzFdIDogb3V0cHV0U2hhcGVbMl07XG4gICAgICBjb25zdCBvdXRDaGFubmVscyA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0cHV0U2hhcGVbM10gOiBvdXRwdXRTaGFwZVsxXTtcbiAgICAgIC8vIFRPRE86IGVuYWJsZSB2ZWM0IGZvciBOQ0hXXG4gICAgICBjb25zdCBpc1ZlYzQgPSBpc0NoYW5uZWxzTGFzdCAmJiAoaW5DaGFubmVscyAlIDQgPT09IDAgJiYgaW5DaGFubmVscyAlIDMpICYmIG91dENoYW5uZWxzICUgNCA9PT0gMDtcblxuICAgICAgLy8gVE9ETzogZmluZSB0dW5lIHNpemVcbiAgICAgIGNvbnN0IGRpc3BhdGNoWCA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0Q2hhbm5lbHMgOiBvdXRXaWR0aCAqIG91dEhlaWdodDtcbiAgICAgIGNvbnN0IGRpc3BhdGNoWSA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0V2lkdGggKiBvdXRIZWlnaHQgOiBvdXRDaGFubmVscztcbiAgICAgIGNvbnN0IHdvcmtHcm91cFNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFs4LCA4LCAxXTtcbiAgICAgIGNvbnN0IGVsZW1lbnRzUGVyVGhyZWFkID0gZGltQU91dGVyIDw9IDggPyBbNCwgMSwgMV0gOiBbNCwgNCwgMV07XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IFtcbiAgICAgICAgTWF0aC5jZWlsKGRpc3BhdGNoWCAvIHdvcmtHcm91cFNpemVbMF0gLyBlbGVtZW50c1BlclRocmVhZFswXSksXG4gICAgICAgIE1hdGguY2VpbChkaXNwYXRjaFkgLyB3b3JrR3JvdXBTaXplWzFdIC8gZWxlbWVudHNQZXJUaHJlYWRbMV0pLFxuICAgICAgICBNYXRoLmNlaWwoYmF0Y2hTaXplIC8gd29ya0dyb3VwU2l6ZVsyXSAvIGVsZW1lbnRzUGVyVGhyZWFkWzJdKVxuICAgICAgXTtcblxuICAgICAgTE9HX0RFQlVHKCd2ZXJib3NlJywgKCkgPT4gYFtjb252X2JhY2twcm9wX21tX3dlYmdwdV0gZGlzcGF0Y2ggPSAke2Rpc3BhdGNofWApO1xuXG4gICAgICBjb25zdCBpbm5lckVsZW1lbnRTaXplID0gaXNWZWM0ID8gNCA6IDE7XG4gICAgICBjb25zdCB0aWxlSW5uZXIgPSBNYXRoLm1heCh3b3JrR3JvdXBTaXplWzBdICogaW5uZXJFbGVtZW50U2l6ZSwgd29ya0dyb3VwU2l6ZVsxXSk7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gaXNWZWM0ID8gNCA6IDE7XG4gICAgICBjb25zdCBmaWx0ZXJEaW1zID1cbiAgICAgICAgICBbYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDEgOiAyXSwgYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXV07XG4gICAgICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJEaW1zID0gW1xuICAgICAgICBmaWx0ZXJEaW1zWzBdICsgKGF0dHJpYnV0ZXMuZGlsYXRpb25zWzBdIDw9IDEgPyAwIDogKGZpbHRlckRpbXNbMF0gLSAxKSAqIChhdHRyaWJ1dGVzLmRpbGF0aW9uc1swXSAtIDEpKSxcbiAgICAgICAgZmlsdGVyRGltc1sxXSArIChhdHRyaWJ1dGVzLmRpbGF0aW9uc1sxXSA8PSAxID8gMCA6IChmaWx0ZXJEaW1zWzFdIC0gMSkgKiAoYXR0cmlidXRlcy5kaWxhdGlvbnNbMV0gLSAxKSlcbiAgICAgIF07XG4gICAgICBjb25zdCBwYWRzID0gW1xuICAgICAgICBlZmZlY3RpdmVGaWx0ZXJEaW1zWzBdIC0gMSAtIE1hdGguZmxvb3IoKGF0dHJpYnV0ZXMucGFkc1swXSArIGF0dHJpYnV0ZXMucGFkc1syXSkgLyAyKSxcbiAgICAgICAgZWZmZWN0aXZlRmlsdGVyRGltc1sxXSAtIDEgLSBNYXRoLmZsb29yKChhdHRyaWJ1dGVzLnBhZHNbMV0gKyBhdHRyaWJ1dGVzLnBhZHNbM10pIC8gMilcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBkaW1BT3V0ZXJ9LCB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGRpbUJPdXRlcn0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogZGltSW5uZXJ9LCB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGF0dHJpYnV0ZXMuc3RyaWRlc30sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogYXR0cmlidXRlcy5kaWxhdGlvbnN9LCB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGZpbHRlckRpbXN9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IHBhZHN9XG4gICAgICBdO1xuICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zRGF0YShhdHRyaWJ1dGVzLCBwcm9ncmFtVW5pZm9ybXMpO1xuICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzBdLmRpbXMsIGlucHV0c1sxXS5kaW1zKSk7XG5cbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJywgJ3JhbmsnXTtcbiAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1syXS5kaW1zKSk7XG4gICAgICAgIGlucHV0RGVwZW5kZW5jaWVzLnB1c2goJ3JhbmsnKTtcbiAgICAgIH1cbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dHB1dFNoYXBlKSk7XG5cbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCB4ID0gaW5wdXRWYXJpYWJsZSgneCcsIGlucHV0c1swXS5kYXRhVHlwZSwgaW5wdXRzWzBdLmRpbXMubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgdyA9IGlucHV0VmFyaWFibGUoJ3cnLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zLmxlbmd0aCwgMSk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdyZXN1bHQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFyaWFibGVzID0gW3gsIHddO1xuXG4gICAgICAgIGxldCBkZWNsYXJlRnVuY3Rpb25zID0gJyc7XG4gICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgY29uc3QgYmlhcyA9IGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgaW5wdXRWYXJpYWJsZXMucHVzaChiaWFzKTtcbiAgICAgICAgICBkZWNsYXJlRnVuY3Rpb25zICs9IGBcbiAgICAgICAgICBmbiBnZXRCaWFzQnlPdXRwdXRDb29yZHMoY29vcmRzIDogdmVjNDxpMzI+KSAtPiAke2JpYXMudHlwZS52YWx1ZX0ge1xuICAgICAgICAgICAgcmV0dXJuIGJpYXNbY29vcmRzLiR7aXNDaGFubmVsc0xhc3QgPyAndycgOiAneSd9JHtpc1ZlYzQgPyAnLyA0JyA6ICcnfV07XG4gICAgICAgICAgfWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbXG4gICAgICAgICAge25hbWU6ICdkaW1fYV9vdXRlcicsIHR5cGU6ICdpMzInfSwge25hbWU6ICdkaW1fYl9vdXRlcicsIHR5cGU6ICdpMzInfSwge25hbWU6ICdkaW1faW5uZXInLCB0eXBlOiAnaTMyJ30sXG4gICAgICAgICAge25hbWU6ICdzdHJpZGVzJywgdHlwZTogJ2kzMicsIGxlbmd0aDogMn0sIHtuYW1lOiAnZGlsYXRpb25zJywgdHlwZTogJ2kzMicsIGxlbmd0aDogMn0sXG4gICAgICAgICAge25hbWU6ICdmaWx0ZXJfZGltcycsIHR5cGU6ICdpMzInLCBsZW5ndGg6IGZpbHRlckRpbXMubGVuZ3RofSxcbiAgICAgICAgICB7bmFtZTogJ3BhZHMnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiBwYWRzLmxlbmd0aH1cbiAgICAgICAgXTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGF0dHJpYnV0ZXMsIHVuaWZvcm1zKTtcbiAgICAgICAgY29uc3QgZWxlbVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlLCAxKTtcbiAgICAgICAgaWYgKGVsZW1UeXBlICE9PSAnZjE2JyAmJiBlbGVtVHlwZSAhPT0gJ2YzMicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGVsZW1UeXBlICR7ZWxlbVR5cGV9IGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgJHt1dGlsRnVuY3Rpb25zKCd1bmlmb3Jtcy5yZXN1bHRfc3RyaWRlcycpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFyaWFibGVzLCBvdXRwdXQpfTtcbiAgICAgICAgJHtkZWNsYXJlRnVuY3Rpb25zfVxuICAgICAgICAke2NvbnYyZFRyYW5zcG9zZUNvbW1vblNuaXBwZXQoaXNDaGFubmVsc0xhc3QsIGhhc0JpYXMsIGF0dHJpYnV0ZXMsIHgudHlwZS52YWx1ZSwgaW5uZXJFbGVtZW50U2l6ZSl9XG4gICAgICAgICR7XG4gICAgICAgICAgICBpc1ZlYzQgPyBtYWtlTWF0TXVsUGFja2VkVmVjNFNvdXJjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1BlclRocmVhZCwgd29ya0dyb3VwU2l6ZSwgZWxlbVR5cGUsIHVuZGVmaW5lZCwgIWlzQ2hhbm5lbHNMYXN0LCB0aWxlSW5uZXIpIDpcbiAgICAgICAgICAgICAgICAgICAgIG1ha2VNYXRNdWxQYWNrZWRTb3VyY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNQZXJUaHJlYWQsIHdvcmtHcm91cFNpemUsIGVsZW1UeXBlLCB1bmRlZmluZWQsICFpc0NoYW5uZWxzTGFzdCwgdGlsZUlubmVyLCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsIHNlcXVlbnRpYWxBY2Nlc3NCeVRocmVhZHMpfWA7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnQ29udjJEVHJhbnNwb3NlTWF0TXVsJyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6XG4gICAgICAgICAgICB7aGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX07JHtlbGVtZW50c1BlclRocmVhZH07JHt3b3JrR3JvdXBTaXplfTske2lzVmVjNH1gLCBpbnB1dERlcGVuZGVuY2llc30sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBkaXNwYXRjaFswXSwgeTogZGlzcGF0Y2hbMV0sIHo6IGRpc3BhdGNoWzJdfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgfTtcbiAgICB9O1xuIiwgIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gc2FtcGxlZCBmcm9tIFtAdGVuc29yZmxvdy90ZmpzXSB0ZmpzLWJhY2tlbmQtd2ViZ3B1L3NyYy9jb252X2JhY2twcm9wX3dlYmdwdS50c1xuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge0xPR19ERUJVR30gZnJvbSAnLi4vLi4vLi4vbG9nJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtQcm9ncmFtSW5mbywgUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3ksIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHtDb252VHJhbnNwb3NlQXR0cmlidXRlc30gZnJvbSAnLi4vY29udi10cmFuc3Bvc2UnO1xuXG5jb25zdCBjcmVhdGVDb252VHJhbnNwb3NlMkRPcFByb2dyYW1TaGFkZXJTb3VyY2UgPVxuICAgIChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlciwgaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIG91dHB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgaGFzQmlhczogYm9vbGVhbixcbiAgICAgaXMxRGltZW5zaW9uRGlzcGF0Y2g6IGJvb2xlYW4sIGlzVmVjNCA9IGZhbHNlLCBkYXRhVHlwZTogc3RyaW5nLCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUsXG4gICAgIGlzQ2hhbm5lbHNMYXN0ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3Qgcm93RGltID0gaXNDaGFubmVsc0xhc3QgPyAxIDogMjtcbiAgICAgIGNvbnN0IGNvbERpbSA9IGlzQ2hhbm5lbHNMYXN0ID8gMiA6IDM7XG4gICAgICBjb25zdCBjaGFubmVsRGltID0gaXNDaGFubmVsc0xhc3QgPyAzIDogMTtcbiAgICAgIGNvbnN0IHdvcmtQZXJUaHJlYWQgPSBpc1ZlYzQgPyAyIDogMTtcblxuICAgICAgbGV0IGRlY2xhcmVGdW5jdGlvbnMgPSBgXG4gIGZuIHNldE91dHB1dEF0SW5kZXgoZmxhdEluZGV4IDogdTMyLCB2YWx1ZSA6ICR7aXNWZWM0ID8gYHZlYzQ8JHtkYXRhVHlwZX0+YCA6IGRhdGFUeXBlfSkge1xuICAgIHJlc3VsdFtmbGF0SW5kZXhdID0gJHtpc1ZlYzQgPyBgdmVjNDwke2RhdGFUeXBlfT5gIDogZGF0YVR5cGV9KHZhbHVlKTtcbiAgfWA7XG4gICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICBkZWNsYXJlRnVuY3Rpb25zICs9IGBcbiAgICBmbiBnZXRCaWFzQnlPdXRwdXRDb29yZHMoY29vcmRzIDogdmVjNDx1MzI+KSAtPiAke2lzVmVjNCA/IGB2ZWM0PCR7ZGF0YVR5cGV9PmAgOiBkYXRhVHlwZX0ge1xuICAgICAgcmV0dXJuIGJpYXNbY29vcmRzLiR7aXNDaGFubmVsc0xhc3QgPyAndycgOiAneSd9JHtpc1ZlYzQgPyAnLyA0JyA6ICcnfV07XG4gICAgfWA7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gaXNWZWM0ID8gNCA6IDE7XG4gICAgICBjb25zdCB3ID0gaW5wdXRWYXJpYWJsZSgnVycsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgIGNvbnN0IGR5ID0gaW5wdXRWYXJpYWJsZSgnRHknLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICBjb25zdCBpbnB1dFZhcmlhYmxlcyA9IFtkeSwgd107XG4gICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICBpbnB1dFZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIFtvdXRwdXRTaGFwZVtjaGFubmVsRGltXV0ubGVuZ3RoLCBjb21wb25lbnRzKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgncmVzdWx0JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuXG4gICAgICBjb25zdCBjb2RlU25pcHBldDQgPSBge1xuICAgICAgICBsZXQgYmF0Y2g6IHUzMiA9ICR7aXMxRGltZW5zaW9uRGlzcGF0Y2ggPyAnZ2xvYmFsX2lkLnonIDogJ3dvcmtncm91cF9pZC56J30gLyB1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbMV07XG4gICAgICAgIGxldCByID0gJHtpczFEaW1lbnNpb25EaXNwYXRjaCA/ICdnbG9iYWxfaWQueicgOiAnd29ya2dyb3VwX2lkLnonfSAlIHVuaWZvcm1zLnJlc3VsdF9zaGFwZVsxXTtcbiAgICAgICAgbGV0IGMgPSAke2lzMURpbWVuc2lvbkRpc3BhdGNoID8gJ2dsb2JhbF9pZC55JyA6ICd3b3JrZ3JvdXBfaWQueSd9ICogJHt3b3JrUGVyVGhyZWFkfTtcbiAgICAgICAgbGV0IGQxOiB1MzIgPSAke2lzMURpbWVuc2lvbkRpc3BhdGNoID8gJ2dsb2JhbF9pZC54JyA6ICd3b3JrZ3JvdXBfaWQueCd9ICogNDtcblxuICAgICAgICBsZXQgZHlDb3JuZXIgPSB2ZWMyPGkzMj4oaTMyKHIpLCBpMzIoYykpIC0gdmVjMjxpMzI+KHVuaWZvcm1zLnBhZHMpO1xuXG4gICAgICAgIC8vIENvbnZvbHZlIGR5KD8sID8sIGQyKSB3aXRoIHcoOiwgOiwgZDEsIGQyKSB0byBjb21wdXRlIGR4KHhSLCB4QywgZDEpLlxuICAgICAgICAvLyA/ID0gdG8gYmUgZGV0ZXJtaW5lZC4gOiA9IGFjcm9zcyBhbGwgdmFsdWVzIGluIHRoYXQgYXhpcy5cbiAgICAgICAgdmFyIGRvdFByb2Q6IGFycmF5PHZlYzQ8JHtkYXRhVHlwZX0+LCAke3dvcmtQZXJUaHJlYWR9PjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAke3dvcmtQZXJUaHJlYWR9OyBpKyspIHtcbiAgICAgICAgICBkb3RQcm9kW2ldID0gdmVjNDwke2RhdGFUeXBlfT4oMC4wKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciB3UjogdTMyID0gMDsgd1IgPCB1bmlmb3Jtcy5maWx0ZXJfZGltc1swXTsgd1IgPSB3UiArIDEpIHtcbiAgICAgICAgICB2YXIgZHlSID0gKCR7ZGF0YVR5cGV9KGR5Q29ybmVyLngpICsgJHtkYXRhVHlwZX0od1IpKSAvICR7ZGF0YVR5cGV9KHVuaWZvcm1zLnN0cmlkZXMueCk7XG4gICAgICAgICAgbGV0IHdSUGVybSA9IHVuaWZvcm1zLmZpbHRlcl9kaW1zWzBdIC0gMSAtIHdSO1xuICAgICAgICAgIGlmIChkeVIgPCAwLjAgfHwgZHlSID49ICR7ZGF0YVR5cGV9KHVuaWZvcm1zLkR5X3NoYXBlWzFdKSB8fFxuICAgICAgICAgICAgICBmcmFjdChkeVIpID4gMC4wIHx8IHdSUGVybSA8IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgaWR5UjogdTMyID0gdTMyKGR5Uik7XG5cbiAgICAgICAgICBmb3IgKHZhciB3QzogdTMyID0gMDsgd0MgPCB1bmlmb3Jtcy5maWx0ZXJfZGltc1sxXTsgd0MgPSB3QyArIDEpIHtcbiAgICAgICAgICAgIGxldCBkeUMgPSAoJHtkYXRhVHlwZX0oZHlDb3JuZXIueSkgKyAke2RhdGFUeXBlfSh3QykpIC8gJHtkYXRhVHlwZX0odW5pZm9ybXMuc3RyaWRlcy55KTtcbiAgICAgICAgICAgIGxldCBkeUMyID0gKCR7ZGF0YVR5cGV9KGR5Q29ybmVyLnkpICsgMS4wICsgJHtkYXRhVHlwZX0od0MpKSAvICR7ZGF0YVR5cGV9KHVuaWZvcm1zLnN0cmlkZXMueSk7XG4gICAgICAgICAgICBsZXQgd0NQZXJtID0gdW5pZm9ybXMuZmlsdGVyX2RpbXNbMV0gLSAxIC0gd0M7XG4gICAgICAgICAgICBpZiAod0NQZXJtIDwgMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBiRHlDVmFsID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBiRHlDVmFsMiA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZHlDIDwgMC4wIHx8IGR5QyA+PSAke2RhdGFUeXBlfSh1bmlmb3Jtcy5EeV9zaGFwZVsyXSkgfHxcbiAgICAgICAgICAgICAgICBmcmFjdChkeUMpID4gMC4wKSB7XG4gICAgICAgICAgICAgIGJEeUNWYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkeUMyIDwgMC4wIHx8IGR5QzIgPj0gJHtkYXRhVHlwZX0odW5pZm9ybXMuRHlfc2hhcGVbMl0pIHx8XG4gICAgICAgICAgICAgICAgZnJhY3QoZHlDMikgPiAwLjApIHtcbiAgICAgICAgICAgICAgYkR5Q1ZhbDIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlkeUM6IHUzMiA9IHUzMihkeUMpO1xuICAgICAgICAgICAgbGV0IGlkeUMyOiB1MzIgPSB1MzIoZHlDMik7XG4gICAgICAgICAgICBpZiAoYkR5Q1ZhbCAmJiBiRHlDVmFsMikge1xuICAgICAgICAgICAgICBsZXQgZDJMZW5ndGggPSB1bmlmb3Jtcy5EeV9zaGFwZVszXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgZDIgOnUzMiA9IDA7IGQyIDwgZDJMZW5ndGg7IGQyID0gZDIgKyA0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHdWYWx1ZTAgPSAke3cuZ2V0KCd1MzIod1JQZXJtKScsICd1MzIod0NQZXJtKScsICdkMScsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMSA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMScsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMiA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMicsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMyA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMycsICdkMicpfTtcblxuICAgICAgICAgICAgICAgIHZhciB4VmFsdWUgPSAke2R5LmdldCgnYmF0Y2gnLCAnaWR5UicsICdpZHlDJywgJ2QyJyl9O1xuICAgICAgICAgICAgICAgIGxldCB0bXB2YWwgPSB2ZWM0PCR7ZGF0YVR5cGV9Pihkb3QoeFZhbHVlLCB3VmFsdWUwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHhWYWx1ZSwgd1ZhbHVlMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QoeFZhbHVlLCB3VmFsdWUzKSk7XG4gICAgICAgICAgICAgICAgZG90UHJvZFswXSA9IGRvdFByb2RbMF0gKyB0bXB2YWw7XG5cbiAgICAgICAgICAgICAgICB4VmFsdWUgPSAgJHtkeS5nZXQoJ2JhdGNoJywgJ2lkeVInLCAnaWR5QzInLCAnZDInKX07XG5cbiAgICAgICAgICAgICAgICBkb3RQcm9kWzFdID0gZG90UHJvZFsxXSArIHZlYzQ8JHtkYXRhVHlwZX0+KGRvdCh4VmFsdWUsIHdWYWx1ZTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTMpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChiRHlDVmFsKSB7XG4gICAgICAgICAgICAgIGxldCBkMkxlbmd0aCA9IHVuaWZvcm1zLkR5X3NoYXBlWyR7Y2hhbm5lbERpbX1dO1xuICAgICAgICAgICAgICBmb3IgKHZhciBkMjogdTMyID0gMDsgZDIgPCBkMkxlbmd0aDsgZDIgPSBkMiArIDQpIHtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMCA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxJywgJ2QyJyl9O1xuICAgICAgICAgICAgICAgIGxldCB3VmFsdWUxID0gJHt3LmdldCgndTMyKHdSUGVybSknLCAndTMyKHdDUGVybSknLCAnZDEgKyAxJywgJ2QyJyl9O1xuICAgICAgICAgICAgICAgIGxldCB3VmFsdWUyID0gJHt3LmdldCgndTMyKHdSUGVybSknLCAndTMyKHdDUGVybSknLCAnZDEgKyAyJywgJ2QyJyl9O1xuICAgICAgICAgICAgICAgIGxldCB3VmFsdWUzID0gJHt3LmdldCgndTMyKHdSUGVybSknLCAndTMyKHdDUGVybSknLCAnZDEgKyAzJywgJ2QyJyl9O1xuXG4gICAgICAgICAgICAgICAgdmFyIHhWYWx1ZSA9ICR7ZHkuZ2V0KCdiYXRjaCcsICdpZHlSJywgJ2lkeUMnLCAnZDInKX07XG4gICAgICAgICAgICAgICAgbGV0IHRtcHZhbCA9IHZlYzQ8JHtkYXRhVHlwZX0+KGRvdCh4VmFsdWUsIHdWYWx1ZTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QoeFZhbHVlLCB3VmFsdWUxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHhWYWx1ZSwgd1ZhbHVlMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTMpKTtcbiAgICAgICAgICAgICAgICBkb3RQcm9kWzBdID0gZG90UHJvZFswXSArIHRtcHZhbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChiRHlDVmFsMikge1xuICAgICAgICAgICAgICBsZXQgZDJMZW5ndGggPSB1bmlmb3Jtcy5EeV9zaGFwZVszXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgZDI6IHUzMiA9IDA7IGQyIDwgZDJMZW5ndGg7IGQyID0gZDIgKyA0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHdWYWx1ZTAgPSAke3cuZ2V0KCd1MzIod1JQZXJtKScsICd1MzIod0NQZXJtKScsICdkMScsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMSA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMScsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMiA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMicsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMyA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMycsICdkMicpfTtcblxuICAgICAgICAgICAgICAgIHZhciB4VmFsdWUgPSAke2R5LmdldCgnYmF0Y2gnLCAnaWR5UicsICdpZHlDMicsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgdG1wdmFsID0gdmVjNDwke2RhdGFUeXBlfT4oZG90KHhWYWx1ZSwgd1ZhbHVlMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QoeFZhbHVlLCB3VmFsdWUyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHhWYWx1ZSwgd1ZhbHVlMykpO1xuICAgICAgICAgICAgICAgIGRvdFByb2RbMV0gPSBkb3RQcm9kWzFdICsgdG1wdmFsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaTogdTMyID0gMDsgaSA8ICR7d29ya1BlclRocmVhZH07IGkgPSBpICsgMSkge1xuICAgICAgICAgIGxldCB2YWx1ZSA9IGRvdFByb2RbaV0gKyAke2hhc0JpYXMgPyAnYmlhc1tjK2ldJyA6IGB2ZWM0PCR7ZGF0YVR5cGV9PigwLjApYH07XG4gICAgICAgICAgJHtvdXRwdXQuc2V0KCdiYXRjaCcsICdyJywgJ2MgKyBpJywgJ2QxJywgJ3ZhbHVlJyl9O1xuICAgICAgICB9XG4gICAgICB9YDtcbiAgICAgIGNvbnN0IGNvZGVTbmlwcGV0ID0gYFxuICAgICAgICAgIGxldCBvdXRwdXRJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuICAgICAgICAgIGxldCBiYXRjaCA9ICR7b3V0cHV0LmluZGljZXNHZXQoJ291dHB1dEluZGljZXMnLCAwKX07XG4gICAgICAgICAgbGV0IGQxID0gJHtvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0SW5kaWNlcycsIGNoYW5uZWxEaW0pfTtcbiAgICAgICAgICBsZXQgciA9ICR7b3V0cHV0LmluZGljZXNHZXQoJ291dHB1dEluZGljZXMnLCByb3dEaW0pfTtcbiAgICAgICAgICBsZXQgYyA9ICR7b3V0cHV0LmluZGljZXNHZXQoJ291dHB1dEluZGljZXMnLCBjb2xEaW0pfTtcbiAgICAgICAgICBsZXQgZHlDb3JuZXIgPSB2ZWMyPGkzMj4oaTMyKHIpLCBpMzIoYykpIC0gdW5pZm9ybXMucGFkcztcbiAgICAgICAgICBsZXQgZHlSQ29ybmVyID0gZHlDb3JuZXIueDtcbiAgICAgICAgICBsZXQgZHlDQ29ybmVyID0gZHlDb3JuZXIueTtcbiAgICAgICAgICBsZXQgZ3JvdXBJZCA9IGQxIC8gdW5pZm9ybXMub3V0cHV0X2NoYW5uZWxzX3Blcl9ncm91cDtcbiAgICAgICAgICBsZXQgd091dENoYW5uZWwgPSBkMSAtIGdyb3VwSWQgKiB1bmlmb3Jtcy5vdXRwdXRfY2hhbm5lbHNfcGVyX2dyb3VwO1xuICAgICAgICAgIC8vIENvbnZvbHZlIGR5KD8sID8sIGQyKSB3aXRoIHcoOiwgOiwgZDEsIGQyKSB0byBjb21wdXRlIGR4KHhSLCB4QywgZDEpLlxuICAgICAgICAgIC8vID8gPSB0byBiZSBkZXRlcm1pbmVkLiA6ID0gYWNyb3NzIGFsbCB2YWx1ZXMgaW4gdGhhdCBheGlzLlxuICAgICAgICAgIHZhciBkb3RQcm9kID0gJHtkYXRhVHlwZX0oMC4wKTtcbiAgICAgICAgICBmb3IgKHZhciB3UjogdTMyID0gMDsgd1IgPCB1bmlmb3Jtcy5lZmZlY3RpdmVfZmlsdGVyX2RpbXMueDsgd1IgPSB3UiArIDEpIHtcbiAgICAgICAgICAgIGlmICh3UiAlIHVuaWZvcm1zLmRpbGF0aW9ucy54ICE9IDApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZHlSID0gKCR7ZGF0YVR5cGV9KGR5UkNvcm5lcikgKyAke2RhdGFUeXBlfSh3UikpIC8gJHtkYXRhVHlwZX0odW5pZm9ybXMuc3RyaWRlc1swXSk7XG4gICAgICAgICAgICBsZXQgd1JQZXJtID0gdW5pZm9ybXMuZmlsdGVyX2RpbXMueCAtIDEgLSB3UiAvIHVuaWZvcm1zLmRpbGF0aW9ucy54O1xuICAgICAgICAgICAgaWYgKGR5UiA8IDAuMCB8fCBkeVIgPj0gJHtkYXRhVHlwZX0odW5pZm9ybXMuRHlfc2hhcGVbJHtyb3dEaW19XSkgfHwgZnJhY3QoZHlSKSA+IDAuMCB8fFxuICAgICAgICAgICAgICAgIHdSUGVybSA8IDApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaWR5UjogdTMyID0gdTMyKGR5Uik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIHdDOiB1MzIgPSAwOyB3QyA8IHVuaWZvcm1zLmVmZmVjdGl2ZV9maWx0ZXJfZGltcy55OyB3QyA9IHdDICsgMSkge1xuICAgICAgICAgICAgICBpZiAod0MgJSB1bmlmb3Jtcy5kaWxhdGlvbnMueSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGV0IGR5QyA9ICgke2RhdGFUeXBlfShkeUNDb3JuZXIpICsgJHtkYXRhVHlwZX0od0MpKSAvICR7ZGF0YVR5cGV9KHVuaWZvcm1zLnN0cmlkZXMueSk7XG4gICAgICAgICAgICAgIGxldCB3Q1Blcm0gPSB1bmlmb3Jtcy5maWx0ZXJfZGltcy55IC0gMSAtIHdDIC8gdW5pZm9ybXMuZGlsYXRpb25zLnk7XG4gICAgICAgICAgICAgIGlmIChkeUMgPCAwLjAgfHwgZHlDID49ICR7ZGF0YVR5cGV9KHVuaWZvcm1zLkR5X3NoYXBlWyR7Y29sRGltfV0pIHx8XG4gICAgICAgICAgICAgICAgICBmcmFjdChkeUMpID4gMC4wIHx8IHdDUGVybSA8IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgaWR5QzogdTMyID0gdTMyKGR5Qyk7XG4gICAgICAgICAgICAgIHZhciBpbnB1dENoYW5uZWwgPSBncm91cElkICogdW5pZm9ybXMuaW5wdXRfY2hhbm5lbHNfcGVyX2dyb3VwO1xuICAgICAgICAgICAgICBmb3IgKHZhciBkMjogdTMyID0gMDsgZDIgPCB1bmlmb3Jtcy5pbnB1dF9jaGFubmVsc19wZXJfZ3JvdXA7IGQyID0gZDIgKyAxKSB7XG4gICAgICAgICAgICAgICAgbGV0IHhWYWx1ZSA9ICR7XG4gICAgICAgICAgaXNDaGFubmVsc0xhc3QgPyBkeS5nZXQoJ2JhdGNoJywgJ2lkeVInLCAnaWR5QycsICdpbnB1dENoYW5uZWwnKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkeS5nZXQoJ2JhdGNoJywgJ2lucHV0Q2hhbm5lbCcsICdpZHlSJywgJ2lkeUMnKX07XG4gICAgICAgICAgICAgICAgbGV0IHdWYWx1ZSA9ICR7dy5nZXQoJ2lucHV0Q2hhbm5lbCcsICd3T3V0Q2hhbm5lbCcsICd1MzIod1JQZXJtKScsICd1MzIod0NQZXJtKScpfTtcbiAgICAgICAgICAgICAgICBkb3RQcm9kID0gZG90UHJvZCArIHhWYWx1ZSAqIHdWYWx1ZTtcbiAgICAgICAgICAgICAgICBpbnB1dENoYW5uZWwgPSBpbnB1dENoYW5uZWwgKyAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB2YWx1ZSA9IGRvdFByb2QgKyAke2hhc0JpYXMgPyAnYmlhc1tkMV0nIDogYCR7ZGF0YVR5cGV9KDAuMClgfTtcbiAgICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsICd2YWx1ZScpfTtcbiAgICAgICAgYDtcblxuICAgICAgcmV0dXJuIGBcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyguLi5pbnB1dFZhcmlhYmxlcywgb3V0cHV0KX1cbiAgJHtkZWNsYXJlRnVuY3Rpb25zfVxuXG4gICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0X3NpemUnKX07XG4gICR7aXNWZWM0ID8gY29kZVNuaXBwZXQ0IDogY29kZVNuaXBwZXR9fWA7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnZUcmFuc3Bvc2UyRFByb2dyYW1JbmZvID1cbiAgICAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IENvbnZUcmFuc3Bvc2VBdHRyaWJ1dGVzLFxuICAgICBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbj86IChzaGFwZTogcmVhZG9ubHkgbnVtYmVyW10pID0+IG51bWJlcltdKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPiAyO1xuICAgICAgLy8gY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBhdHRyaWJ1dGVzLm91dHB1dFNoYXBlO1xuICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcblxuICAgICAgLy8gY29uc3QgaW5DaGFubmVscyA9IGlucHV0c1swXS5kaW1zW2lzQ2hhbm5lbHNMYXN0ID8gMyA6IDFdO1xuICAgICAgLy8gVE9ETyBFbmFibGUgaXNWZWM0IGZvciBwZXJmb3JtYW5jZVxuICAgICAgLy8gRGlzYWJsZWQgZHVlIHRvIHdlaWdodCBtYXRyaXggbGF5b3V0IGlzc3VlXG4gICAgICAvLyBjb25zdCBpc1ZlYzQgPSBhdHRyaWJ1dGVzLmdyb3VwID09PSAxICYmIGlzQ2hhbm5lbHNMYXN0ICYmIGluQ2hhbm5lbHMgJSA0ID09PSAwICYmIG91dENoYW5uZWxzICUgNCA9PT0gMDtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gW1xuICAgICAgICBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0KSxcbiAgICAgICAgMSxcbiAgICAgICAgMSxcbiAgICAgIF07XG4gICAgICBMT0dfREVCVUcoJ3ZlcmJvc2UnLCAoKSA9PiBgW2NvbnYyZF9iYWNrcHJvcF93ZWJncHVdIGRpc3BhdGNoID0gJHtkaXNwYXRjaH1gKTtcblxuICAgICAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICAgICAgY29uc3QgaW5wdXREZXBlbmRlbmNpZXM6IFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5W10gPSBbJ3JhbmsnLCAncmFuayddO1xuICAgICAgY29uc3Qgc3RyaWRlcyA9IFthdHRyaWJ1dGVzLnN0cmlkZXNbMF0sIGF0dHJpYnV0ZXMuc3RyaWRlc1sxXV07XG4gICAgICBjb25zdCBmaWx0ZXJEaW1zID1cbiAgICAgICAgICBbYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDEgOiAyXSwgYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXV07XG4gICAgICBjb25zdCBkaWxhdGlvbnMgPSBbYXR0cmlidXRlcy5kaWxhdGlvbnNbMF0sIGF0dHJpYnV0ZXMuZGlsYXRpb25zWzFdXTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlckRpbXMgPSBbXG4gICAgICAgIGZpbHRlckRpbXNbMF0gK1xuICAgICAgICAgICAgKGF0dHJpYnV0ZXMuZGlsYXRpb25zWzBdIDw9IDEgP1xuICAgICAgICAgICAgICAgICAwIDpcbiAgICAgICAgICAgICAgICAgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGVbaXNDaGFubmVsc0xhc3QgPyAxIDogMl0gLSAxKSAqIChhdHRyaWJ1dGVzLmRpbGF0aW9uc1swXSAtIDEpKSxcbiAgICAgICAgZmlsdGVyRGltc1sxXSArXG4gICAgICAgICAgICAoYXR0cmlidXRlcy5kaWxhdGlvbnNbMV0gPD0gMSA/XG4gICAgICAgICAgICAgICAgIDAgOlxuICAgICAgICAgICAgICAgICAoYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXSAtIDEpICogKGF0dHJpYnV0ZXMuZGlsYXRpb25zWzFdIC0gMSkpXG4gICAgICBdO1xuICAgICAgY29uc3QgcGFkcyA9IFtcbiAgICAgICAgZWZmZWN0aXZlRmlsdGVyRGltc1swXSAtIDEgLSBNYXRoLmZsb29yKChhdHRyaWJ1dGVzLnBhZHNbMF0gKyBhdHRyaWJ1dGVzLnBhZHNbMl0pIC8gMiksXG4gICAgICAgIGVmZmVjdGl2ZUZpbHRlckRpbXNbMV0gLSAxIC0gTWF0aC5mbG9vcihhdHRyaWJ1dGVzLnBhZHNbMV0gKyBhdHRyaWJ1dGVzLnBhZHNbM10pIC8gMlxuICAgICAgXTtcblxuICAgICAgY29uc3QgaXNWZWM0ID0gZmFsc2U7XG4gICAgICBjb25zdCBncm91cCA9IGF0dHJpYnV0ZXMuZ3JvdXA7XG4gICAgICBjb25zdCB3U2hhcGUgPSBpbnB1dHNbMV0uZGltcztcbiAgICAgIGNvbnN0IGlucHV0Q2hhbm5lbHNQZXJHcm91cCA9IHdTaGFwZVswXSAvIGdyb3VwO1xuICAgICAgY29uc3Qgb3V0cHV0Q2hhbm5lbHNQZXJHcm91cCA9IHdTaGFwZVsxXTtcblxuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBvdXRwdXRTaXplfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogc3RyaWRlc30sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGZpbHRlckRpbXN9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBkaWxhdGlvbnN9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBlZmZlY3RpdmVGaWx0ZXJEaW1zfSwge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBwYWRzfSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogaW5wdXRDaGFubmVsc1Blckdyb3VwfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0Q2hhbm5lbHNQZXJHcm91cH0sXG4gICAgICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBpbnB1dHNbMV0uZGltcylcbiAgICAgIF07XG4gICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMl0uZGltcykpO1xuICAgICAgICBpbnB1dERlcGVuZGVuY2llcy5wdXNoKCdyYW5rJyk7XG4gICAgICB9XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZSkpO1xuXG4gICAgICBjb25zdCBpczFEaW1lbnNpb25EaXNwYXRjaCA9IGRpc3BhdGNoWzFdID09PSAxICYmIGRpc3BhdGNoWzJdID09PSAxO1xuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgICAgICB7bmFtZTogJ291dHB1dF9zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ3N0cmlkZXMnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBzdHJpZGVzLmxlbmd0aH0sXG4gICAgICAgICAge25hbWU6ICdmaWx0ZXJfZGltcycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGZpbHRlckRpbXMubGVuZ3RofSxcbiAgICAgICAgICB7bmFtZTogJ2RpbGF0aW9ucycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGZpbHRlckRpbXMubGVuZ3RofSxcbiAgICAgICAgICB7bmFtZTogJ2VmZmVjdGl2ZV9maWx0ZXJfZGltcycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGVmZmVjdGl2ZUZpbHRlckRpbXMubGVuZ3RofSxcbiAgICAgICAgICB7bmFtZTogJ3BhZHMnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiBwYWRzLmxlbmd0aH0sIHtuYW1lOiAnaW5wdXRfY2hhbm5lbHNfcGVyX2dyb3VwJywgdHlwZTogJ3UzMid9LFxuICAgICAgICAgIHtuYW1lOiAnb3V0cHV0X2NoYW5uZWxzX3Blcl9ncm91cCcsIHR5cGU6ICd1MzInfVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZShpbnB1dHNbMF0uZGF0YVR5cGUpO1xuICAgICAgICByZXR1cm4gYCR7XG4gICAgICAgICAgICBjcmVhdGVDb252VHJhbnNwb3NlMkRPcFByb2dyYW1TaGFkZXJTb3VyY2UoXG4gICAgICAgICAgICAgICAgc2hhZGVySGVscGVyLCBpbnB1dHMsIG91dHB1dFNoYXBlLCBoYXNCaWFzLCBpczFEaW1lbnNpb25EaXNwYXRjaCwgaXNWZWM0LCBkYXRhVHlwZSwgdW5pZm9ybXMsXG4gICAgICAgICAgICAgICAgaXNDaGFubmVsc0xhc3QpfWA7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0NvbnZUcmFuc3Bvc2UyRCcsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX07YCwgaW5wdXREZXBlbmRlbmNpZXN9LFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBkaXNwYXRjaFswXSwgeTogZGlzcGF0Y2hbMV0sIHo6IGRpc3BhdGNoWzJdfSxcbiAgICAgICAgICBvdXRwdXRzOiBbe1xuICAgICAgICAgICAgZGltczogc3F1ZWV6ZU91dHB1dFNoYXBlRnVuY3Rpb24gPyBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbihvdXRwdXRTaGFwZSkgOiBvdXRwdXRTaGFwZSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGVcbiAgICAgICAgICB9XSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgfTtcbiAgICB9O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHR9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVDb252MkRUcmFuc3Bvc2VNYXRNdWxQcm9ncmFtSW5mb30gZnJvbSAnLi8zcmQtcGFydHkvY29udl9iYWNrcHJvcF9tbV93ZWJncHUnO1xuaW1wb3J0IHtjcmVhdGVDb252VHJhbnNwb3NlMkRQcm9ncmFtSW5mb30gZnJvbSAnLi8zcmQtcGFydHkvY29udl9iYWNrcHJvcF93ZWJncHUnO1xuaW1wb3J0IHtDb252QXR0cmlidXRlc30gZnJvbSAnLi9jb252JztcbmltcG9ydCB7cGFyc2VJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzfSBmcm9tICcuL2Z1c2UtdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVUcmFuc3Bvc2VQcm9ncmFtSW5mb30gZnJvbSAnLi90cmFuc3Bvc2UnO1xuXG5jb25zdCBjb21wdXRlVG90YWxQYWQgPVxuICAgIChpbkRpbTogbnVtYmVyLCBzdHJpZGU6IG51bWJlciwgYWRqOiBudW1iZXIsIGtlcm5lbDogbnVtYmVyLCBkaWxhdGlvbjogbnVtYmVyLCBvdXRTaXplOiBudW1iZXIpID0+XG4gICAgICAgIChpbkRpbSAtIDEpICogc3RyaWRlICsgYWRqICsgKGtlcm5lbCAtIDEpICogZGlsYXRpb24gKyAxIC0gb3V0U2l6ZTtcblxuY29uc3QgZGlzdHJpYnV0ZVBhZGRpbmcgPSAodG90YWxQYWQ6IG51bWJlciwgYXV0b1BhZDogc3RyaW5nLCBwYWRzOiBudW1iZXJbXSwgaGVhZDogbnVtYmVyLCB0YWlsOiBudW1iZXIpID0+IHtcbiAgY29uc3Qgc21hbGxQYWQgPSBNYXRoLmZsb29yKHRvdGFsUGFkIC8gMik7XG4gIGlmIChhdXRvUGFkID09PSAnU0FNRV9VUFBFUicpIHtcbiAgICBwYWRzW2hlYWRdID0gc21hbGxQYWQ7XG4gICAgcGFkc1t0YWlsXSA9IHRvdGFsUGFkIC0gc21hbGxQYWQ7XG4gIH0gZWxzZSBpZiAoYXV0b1BhZCA9PT0gJ1NBTUVfTE9XRVInKSB7XG4gICAgcGFkc1toZWFkXSA9IHRvdGFsUGFkIC0gc21hbGxQYWQ7XG4gICAgcGFkc1t0YWlsXSA9IHNtYWxsUGFkO1xuICB9XG59O1xuXG5jb25zdCBjYWxjdWxhdGVPdXRwdXRTaGFwZUFuZFBhZHMgPVxuICAgIChpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwga2VybmVsU2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBkaWxhdGlvbnM6IHJlYWRvbmx5IG51bWJlcltdLCBhdXRvUGFkOiBzdHJpbmcsXG4gICAgIGdyb3VwOiBudW1iZXIsIHBhZHM6IG51bWJlcltdLCBzdHJpZGVzOiByZWFkb25seSBudW1iZXJbXSwgaXNDaGFubmVsTGFzdDogYm9vbGVhbiwgb3V0cHV0UGFkZGluZzogbnVtYmVyW10sXG4gICAgIG91dHB1dFNoYXBlOiBudW1iZXJbXSkgPT4ge1xuICAgICAgY29uc3Qgc3BhdGlhbFJhbmsgPSBpbnB1dFNoYXBlLmxlbmd0aCAtIDI7XG4gICAgICBjb25zdCB1cGRhdGVPdXRwdXRTaGFwZSA9IG91dHB1dFNoYXBlLmxlbmd0aCA9PT0gMDtcbiAgICAgIGlmIChvdXRwdXRQYWRkaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwYXRpYWxSYW5rOyArK2kpIHtcbiAgICAgICAgICBvdXRwdXRQYWRkaW5nLnB1c2goMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IGlucHV0U2hhcGVbMF07XG4gICAgICBjb25zdCBvdXRDaGFubmVscyA9IGtlcm5lbFNoYXBlW2lzQ2hhbm5lbExhc3QgPyAzIDogMV0gKiBncm91cDtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gaW5wdXRTaGFwZS5sZW5ndGggLSBzcGF0aWFsUmFuayAtIChpc0NoYW5uZWxMYXN0ID8gMSA6IDApOyBpIDwgc3BhdGlhbFJhbms7ICsraSwgKytqKSB7XG4gICAgICAgIGNvbnN0IGluU2l6ZSA9IGlucHV0U2hhcGVbal07XG4gICAgICAgIGNvbnN0IG91dFNpemUgPSB1cGRhdGVPdXRwdXRTaGFwZSA/IGluU2l6ZSAqIHN0cmlkZXNbaV0gOiBvdXRwdXRTaGFwZVtpXTtcbiAgICAgICAgY29uc3QgdG90YWxQYWQgPSBjb21wdXRlVG90YWxQYWQoaW5TaXplLCBzdHJpZGVzW2ldLCBwYWRzW2ldLCBrZXJuZWxTaGFwZVtqXSwgZGlsYXRpb25zW2ldLCBvdXRTaXplKTtcbiAgICAgICAgZGlzdHJpYnV0ZVBhZGRpbmcodG90YWxQYWQsIGF1dG9QYWQsIHBhZHMsIGksIGkgKyBzcGF0aWFsUmFuayk7XG4gICAgICAgIGlmICh1cGRhdGVPdXRwdXRTaGFwZSkge1xuICAgICAgICAgIG91dHB1dFNoYXBlLnB1c2goXG4gICAgICAgICAgICAgIHN0cmlkZXNbaV0gKiAoaW5TaXplIC0gMSkgKyBvdXRwdXRQYWRkaW5nW2ldICsgKGtlcm5lbFNoYXBlW2pdIC0gMSkgKiBkaWxhdGlvbnNbaV0gKyAxIC0gcGFkc1tpXSAtXG4gICAgICAgICAgICAgIHBhZHNbaSArIHNwYXRpYWxSYW5rXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG91dHB1dFNoYXBlLnNwbGljZSgwLCAwLCBiYXRjaFNpemUpO1xuICAgICAgb3V0cHV0U2hhcGUuc3BsaWNlKGlzQ2hhbm5lbExhc3QgPyAzIDogMSwgMCwgb3V0Q2hhbm5lbHMpO1xuICAgIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMgZXh0ZW5kcyBDb252QXR0cmlidXRlcyB7XG4gIHJlYWRvbmx5IG91dHB1dFBhZGRpbmc6IHJlYWRvbmx5IG51bWJlcltdO1xuICByZWFkb25seSBvdXRwdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW107XG59XG5cbmNvbnN0IGdldEFkanVzdGVkQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMgPVxuICAgIDxUIGV4dGVuZHMgQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXM+KGF0dHJpYnV0ZXM6IFQsIGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogVCA9PiB7XG4gICAgICBjb25zdCBrZXJuZWxTaGFwZSA9IGF0dHJpYnV0ZXMua2VybmVsU2hhcGUuc2xpY2UoKTtcbiAgICAgIC8vIGlmIGtlcm5lbFNoYXBlIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhpcyBvcCwgaW5mZXIgaXQgZnJvbSB0aGUgd2VpZ2h0IHRlbnNvciBkaW1zXG4gICAgICBpZiAoYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggPT09IDAgfHwgYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiLCAxKSA9PT0gMCkge1xuICAgICAgICBrZXJuZWxTaGFwZS5sZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGlucHV0c1sxXS5kaW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2VybmVsU2hhcGUucHVzaChpbnB1dHNbMV0uZGltc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJztcbiAgICAgIGtlcm5lbFNoYXBlLnNwbGljZSgwLCAwLCBpbnB1dHNbMV0uZGltc1swXSk7XG4gICAgICBrZXJuZWxTaGFwZS5zcGxpY2UoaXNDaGFubmVsc0xhc3QgPyAzIDogMSwgMCwgaW5wdXRzWzFdLmRpbXNbMV0pO1xuXG4gICAgICBjb25zdCBwYWRzID0gYXR0cmlidXRlcy5wYWRzLnNsaWNlKCk7XG4gICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGF0dHJpYnV0ZXMub3V0cHV0U2hhcGUuc2xpY2UoKTtcbiAgICAgIGNvbnN0IG91dHB1dFBhZGRpbmcgPSBhdHRyaWJ1dGVzLm91dHB1dFBhZGRpbmcuc2xpY2UoKTtcbiAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGxldCBkaWxhdGlvbnMgPSBhdHRyaWJ1dGVzLmRpbGF0aW9ucy5zbGljZSgpO1xuICAgICAgaWYgKGRpbGF0aW9ucy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSA9PT0gMCkge1xuICAgICAgICBjb25zdCBzcGF0aWFsUmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDI7XG4gICAgICAgIGRpbGF0aW9ucyA9IG5ldyBBcnJheShzcGF0aWFsUmFuaykuZmlsbCgxKTtcbiAgICAgIH1cbiAgICAgIGxldCBzdHJpZGVzID0gYXR0cmlidXRlcy5zdHJpZGVzLnNsaWNlKCk7XG4gICAgICBpZiAoc3RyaWRlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSA9PT0gMCkge1xuICAgICAgICBjb25zdCBzcGF0aWFsUmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDI7XG4gICAgICAgIHN0cmlkZXMgPSBuZXcgQXJyYXkoc3BhdGlhbFJhbmspLmZpbGwoMSk7XG4gICAgICB9XG4gICAgICAvLyBJZiBvdXRwdXRTaGFwZSBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBhdHRyaWJ1dGVzIG9mIHRoaXMgb3AsIGluZmVyIGl0IGZyb20gdGhlIHBhcmFtZXRlcnNcbiAgICAgIC8vIFNpbWlsYXJseSwgYXV0b21hdGljYWxseSBpbmZlciBwYWRzIGlmIG5vdCBzcGVjaWZpZWRcbiAgICAgIGNhbGN1bGF0ZU91dHB1dFNoYXBlQW5kUGFkcyhcbiAgICAgICAgICBpbnB1dFNoYXBlLCBrZXJuZWxTaGFwZSwgZGlsYXRpb25zLCBhdHRyaWJ1dGVzLmF1dG9QYWQsIGF0dHJpYnV0ZXMuZ3JvdXAsIHBhZHMsIHN0cmlkZXMsIGlzQ2hhbm5lbHNMYXN0LFxuICAgICAgICAgIG91dHB1dFBhZGRpbmcsIG91dHB1dFNoYXBlKTtcblxuICAgICAgLy8gYWx3YXlzIHJldHVybiBhIG5ldyBvYmplY3Qgc28gZG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBhdHRyaWJ1dGVzXG4gICAgICBjb25zdCBuZXdBdHRyaWJ1dGVzOiBUID0gT2JqZWN0LmFzc2lnbih7fSwgYXR0cmlidXRlcyk7XG4gICAgICBPYmplY3QuYXNzaWduKG5ld0F0dHJpYnV0ZXMsIHtrZXJuZWxTaGFwZSwgcGFkcywgb3V0cHV0UGFkZGluZywgb3V0cHV0U2hhcGUsIGRpbGF0aW9ucywgc3RyaWRlc30pO1xuICAgICAgcmV0dXJuIG5ld0F0dHJpYnV0ZXM7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBDb252VHJhbnNwb3NlQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IGFjdGl2YXRpb25BdHRyaWJ1dGVzID0gcGFyc2VJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpO1xuICAvLyBUT0RPIDogTWFrZSB0aGlzIGdlbmVyaWMgZW5vdWdoIHRvIGNvbXB1dGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciBtdWx0aS1kaW1lbnNpb25hbCBjb252XG4gIGNvbnN0IGZvcm1hdCA9IGF0dHJpYnV0ZXMuZm9ybWF0IGFzICdOSFdDJyB8ICdOQ0hXJztcbiAgY29uc3QgYXV0b1BhZCA9XG4gICAgICBbJ05PVFNFVCcsICdWQUxJRCcsICdTQU1FX1VQUEVSJyxcbiAgICAgICAnU0FNRV9MT1dFUiddW3R5cGVvZiBhdHRyaWJ1dGVzLmF1dG9QYWQgPT0gJ3VuZGVmaW5lZCcgPyAwIDogYXR0cmlidXRlcy5hdXRvUGFkIGFzIG51bWJlcl07XG4gIGNvbnN0IGRpbGF0aW9ucyA9IGF0dHJpYnV0ZXMuZGlsYXRpb25zIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIGNvbnN0IGdyb3VwID0gYXR0cmlidXRlcy5ncm91cCBhcyBudW1iZXI7XG4gIGNvbnN0IGtlcm5lbFNoYXBlID0gYXR0cmlidXRlcy5rZXJuZWxTaGFwZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICBjb25zdCBwYWRzID0gYXR0cmlidXRlcy5wYWRzIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBjb25zdCBzdHJpZGVzID0gYXR0cmlidXRlcy5zdHJpZGVzIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIGNvbnN0IHdJc0NvbnN0ID0gKGF0dHJpYnV0ZXMud0lzQ29uc3QgYXMgKCkgPT4gYm9vbGVhbikoKTtcbiAgY29uc3Qgb3V0cHV0UGFkZGluZyA9IGF0dHJpYnV0ZXMub3V0cHV0UGFkZGluZyBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBhdHRyaWJ1dGVzLm91dHB1dFNoYXBlIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIHJldHVybiB7XG4gICAgYXV0b1BhZCxcbiAgICBmb3JtYXQsXG4gICAgZGlsYXRpb25zLFxuICAgIGdyb3VwLFxuICAgIGtlcm5lbFNoYXBlLFxuICAgIG91dHB1dFBhZGRpbmcsXG4gICAgb3V0cHV0U2hhcGUsXG4gICAgcGFkcyxcbiAgICBzdHJpZGVzLFxuICAgIHdJc0NvbnN0LFxuICAgIC4uLmFjdGl2YXRpb25BdHRyaWJ1dGVzLFxuICAgIGNhY2hlS2V5OiBgJHthdHRyaWJ1dGVzLmZvcm1hdH07JHthY3RpdmF0aW9uQXR0cmlidXRlcy5hY3RpdmF0aW9ufTtgXG4gIH07XG59O1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgLy8gUmVmZXIgdG8gdGhlIGJlbG93IGxpbmsgZm9yIGFsbCBpbnB1dCBjaGVja3NcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29ubngvb25ueC9ibG9iL21haW4vZG9jcy9PcGVyYXRvcnMubWQjQ29udlRyYW5zcG9zZVxuICBpZiAoIWlucHV0cyB8fCAoaW5wdXRzLmxlbmd0aCAhPT0gMiAmJiBpbnB1dHMubGVuZ3RoICE9PSAzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29udiByZXF1aXJlcyAyIG9yIDMgaW5wdXRzJyk7XG4gIH1cblxuICAvLyBUT0RPIDogTmVlZCB0byBhZGQgc3VwcG9ydCBmb3IgbXVsdGktZGltZW5zaW9uYWwgY29udlxuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSA0ICYmIGlucHV0c1swXS5kaW1zLmxlbmd0aCAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcignY3VycmVudGx5IG9ubHkgc3VwcG9ydCAyLWRpbWVuc2lvbmFsIGNvbnYnKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IGlucHV0c1sxXS5kaW1zLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZmlsdGVyIGRvZXMgbm90IGhhdmUgc2FtZSBkaW1lbnNpb24gYXMgaW5wdXQnKTtcbiAgfVxuXG4gIC8vIEZJTFRFUl9JTl9DSEFOTkVMIHNob3VsZCBiZSBlcXVhbCB0byBEQVRBX0NIQU5ORUxcbiAgY29uc3QgZGF0YUNoYW5uZWwgPSBpbnB1dHNbMF0uZGltc1thdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnID8gaW5wdXRzWzBdLmRpbXMubGVuZ3RoIC0gMSA6IDFdO1xuICBjb25zdCBmaWx0ZXJJbkNoYW5uZWwgPSBpbnB1dHNbMV0uZGltc1swXTtcbiAgaWYgKGRhdGFDaGFubmVsICE9PSBmaWx0ZXJJbkNoYW5uZWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZJTFRFUl9JTl9DSEFOTkVMIHNob3VsZCBiZSBlcXVhbCB0byBEQVRBX0NIQU5ORUwnKTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVNYXBzID0gaW5wdXRzWzFdLmRpbXNbMV0gKiBhdHRyaWJ1dGVzLmdyb3VwO1xuXG4gIC8vIGlmIGJpYXMgaXMgcHJvdmlkZWQgaXQgc2hvdWxkIGJlIDFEIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGZlYXR1cmUgbWFwc1xuICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gMyAmJiAoaW5wdXRzWzJdLmRpbXMubGVuZ3RoICE9PSAxIHx8IGlucHV0c1syXS5kaW1zWzBdICE9PSBmZWF0dXJlTWFwcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmlhcycpO1xuICB9XG5cbiAgY29uc3Qgc3BhdGlhbFJhbmsgPSBpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAyO1xuICBjb25zdCBkaWxhdGlvbnNTZXQgPSBhdHRyaWJ1dGVzLmRpbGF0aW9ucy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSA+IDA7XG4gIC8vIHdyb25nIGRpbGF0aW9ucyBkaW1lbnNpb25cbiAgaWYgKGRpbGF0aW9uc1NldCAmJiBhdHRyaWJ1dGVzLmRpbGF0aW9ucy5sZW5ndGggIT09IHNwYXRpYWxSYW5rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkaWxhdGlvbnMgc2hvdWxkIGJlICR7c3BhdGlhbFJhbmt9RGApO1xuICB9XG5cbiAgY29uc3Qgc3RyaWRlc1NldCA9IGF0dHJpYnV0ZXMuc3RyaWRlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSA+IDA7XG4gIC8vIFdyb25nIHN0cmlkZXMgZGltZW5zaW9uXG4gIGlmIChzdHJpZGVzU2V0ICYmIGF0dHJpYnV0ZXMuc3RyaWRlcy5sZW5ndGggIT09IHNwYXRpYWxSYW5rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzdHJpZGVzIHNob3VsZCBiZSAke3NwYXRpYWxSYW5rfURgKTtcbiAgfVxuXG4gIC8vIFdyb25nIHBhZHMgZGltZW5zaW9uXG4gIGNvbnN0IHBhZHNTZXQgPSBhdHRyaWJ1dGVzLnBhZHMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgPiAwO1xuICBpZiAocGFkc1NldCAmJiBhdHRyaWJ1dGVzLnBhZHMubGVuZ3RoICE9PSBzcGF0aWFsUmFuayAqIDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhZHMgc2hvdWxkIGJlICR7c3BhdGlhbFJhbmsgKiAyfURgKTtcbiAgfVxuXG4gIC8vIFdyb25nIG91dHB1dCBwYWRkaW5nIGRpbWVuc2lvblxuICBpZiAoYXR0cmlidXRlcy5vdXRwdXRQYWRkaW5nLmxlbmd0aCAhPT0gc3BhdGlhbFJhbmsgJiYgYXR0cmlidXRlcy5vdXRwdXRQYWRkaW5nLmxlbmd0aCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgb3V0cHV0X3BhZGRpbmcgc2hvdWxkIGJlICR7c3BhdGlhbFJhbmt9RGApO1xuICB9XG5cbiAgLy8gaWYga2VybmVsU2hhcGUgaXMgc3BlY2lmaWVkLCBpdCdzIGRhdGEgbGVuZ3RoIG11c3QgYmUgMiBsZXNzIHRoYW4gZGltcyBsZW5ndGggb2YgdGhlIHdlaWdodHMgdGVuc29yXG4gIC8vICh0aGUgZmlyc3QgMiBkaW1zIGFyZSBiYXRjaF9zaXplIGFuZCBjaGFubmVscylcbiAgY29uc3Qga2VybmVsU2hhcGVTZXQgPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApID4gMDtcbiAgaWYgKGtlcm5lbFNoYXBlU2V0ICYmIGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoICE9PSAwICYmXG4gICAgICBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLmxlbmd0aCAhPT0gaW5wdXRzWzFdLmRpbXMubGVuZ3RoIC0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBrZXJuZWwgc2hhcGUnKTtcbiAgfVxuXG4gIC8vIGFzIHdpdGgga2VybmVsU2hhcGUsIG11c3QgaGF2ZSBzYW1lIG51bWJlciBvZiBzcGF0aWFsIGRpbXMgYXMgaW5wdXRcbiAgaWYgKGF0dHJpYnV0ZXMub3V0cHV0U2hhcGUubGVuZ3RoICE9PSAwICYmIGF0dHJpYnV0ZXMub3V0cHV0U2hhcGUubGVuZ3RoICE9PSBpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG91dHB1dCBzaGFwZScpO1xuICB9XG59O1xuXG4vLyBmb3IgdHJhbnNwb3Npbmcgd2VpZ2h0IHRlbnNvciBmcm9tIFtDLCBNL2dyb3VwLCBLSCwgS1ddIHRvIFtLSCwgS1csIE0vZ3JvdXAsIENdXG5jb25zdCB3ZWlnaHRUcmFuc3Bvc2VQZXJtID0gWzIsIDMsIDEsIDBdO1xuXG5jb25zdCBjb252VHJhbnNwb3NlMmQgPVxuICAgIChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IENvbnZUcmFuc3Bvc2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBhZGp1c3RlZEF0dHJpYnV0ZXMgPSBnZXRBZGp1c3RlZENvbnZUcmFuc3Bvc2VBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMsIGlucHV0cyk7XG4gICAgICBjb25zdCBpc0NoYW5uZWxzTGFzdCA9IGF0dHJpYnV0ZXMuZm9ybWF0ID09PSAnTkhXQyc7XG4gICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGFkanVzdGVkQXR0cmlidXRlcy5vdXRwdXRTaGFwZTtcbiAgICAgIGNvbnN0IG91dENoYW5uZWxzID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAzIDogMV07XG4gICAgICBjb25zdCBpbnB1dENoYW5uZWxzID0gaW5wdXRzWzBdLmRpbXNbaXNDaGFubmVsc0xhc3QgPyAzIDogMV07XG4gICAgICAvLyBTd2l0Y2ggdG8gbmFpdmUgbWV0aG9kIHdoZW4gb3V0Q2hhbm5lbHMgYW5kIGlucHV0Q2hhbm5lbHMgYXJlIHZlcnkgc21hbGwuIEl0J3MgYmVjYXVzZSB0aGF0IGluIHRoaXMgY2FzZSBpdCdzXG4gICAgICAvLyBub3Qgc3VpdGFibGUgZm9yIG1hdG11bCB2ZXJzaW9uIHNpbmNlIG1hdG11bCB1c2VzIHRpbGUgc2l6ZSAzMngzMiByZXN1bHRpbmcgdGhlIHVuZGVybHlpbmcgZXhlY3V0aW9uIHVuaXRcbiAgICAgIC8vIHV0aWxpemF0aW9uIHJhdGUgaXMgdmVyeSBsb3cuXG4gICAgICBpZiAoYWRqdXN0ZWRBdHRyaWJ1dGVzLmdyb3VwICE9PSAxIHx8IChvdXRDaGFubmVscyA9PT0gMSAmJiBpbnB1dENoYW5uZWxzID09PSAxKSkge1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQ29udlRyYW5zcG9zZTJEUHJvZ3JhbUluZm8oaW5wdXRzLCBhZGp1c3RlZEF0dHJpYnV0ZXMpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3V0SGVpZ2h0ID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAxIDogMl07XG4gICAgICBjb25zdCBvdXRXaWR0aCA9IG91dHB1dFNoYXBlW2lzQ2hhbm5lbHNMYXN0ID8gMiA6IDNdO1xuICAgICAgY29uc3Qgd2VpZ2h0SGVpZ2h0ID0gaW5wdXRzWzFdLmRpbXNbMl07XG4gICAgICBjb25zdCB3ZWlnaHRXaWR0aCA9IGlucHV0c1sxXS5kaW1zWzNdO1xuXG4gICAgICBjb25zdCBkaW1BT3V0ZXIgPSBpc0NoYW5uZWxzTGFzdCA/IG91dEhlaWdodCAqIG91dFdpZHRoIDogb3V0Q2hhbm5lbHM7XG4gICAgICBjb25zdCBkaW1CT3V0ZXIgPSBpc0NoYW5uZWxzTGFzdCA/IG91dENoYW5uZWxzIDogb3V0SGVpZ2h0ICogb3V0V2lkdGg7XG4gICAgICBjb25zdCBkaW1Jbm5lciA9IHdlaWdodEhlaWdodCAqIHdlaWdodFdpZHRoICogaW5wdXRDaGFubmVscztcblxuICAgICAgY29uc3Qgc2VxdWVudGlhbEFjY2Vzc0J5VGhyZWFkcyA9IC8qIGJhY2tlbmQuYWRhcHRlckluZm8uaXNJbnRlbCgpICovIHRydWU7XG5cblxuICAgICAgLy8gU1RFUC4xOiB0cmFuc3Bvc2Ugd2VpZ2h0XG4gICAgICBjb25zdCB0cmFuc3Bvc2VkV2VpZ2h0ID0gKGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCBhcyBUZW5zb3JWaWV3IHwgdW5kZWZpbmVkKSA/P1xuICAgICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oaW5wdXRzWzFdLCB3ZWlnaHRUcmFuc3Bvc2VQZXJtKSxcbiAgICAgICAgICAgICAge2lucHV0czogWzFdLCBvdXRwdXRzOiBbYXR0cmlidXRlcy53SXNDb25zdCA/IC0yIDogLTFdfSlbMF07XG4gICAgICBpZiAoYXR0cmlidXRlcy53SXNDb25zdCAmJiAhY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUKSB7XG4gICAgICAgIGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCA9IHRyYW5zcG9zZWRXZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFNURVAuMjogcHJlcGFyZSByZXNoYXBlZCBpbnB1dHNcbiAgICAgIGNvbnN0IGNvbnZUcmFuc3Bvc2VJbnB1dHMgPSBbaW5wdXRzWzBdLCB0cmFuc3Bvc2VkV2VpZ2h0XTtcbiAgICAgIGNvbnN0IGhhc0JpYXMgPSBpbnB1dHMubGVuZ3RoID09PSAzO1xuICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgaWYgKCFpc0NoYW5uZWxzTGFzdCAmJiBpbnB1dHNbMl0uZGltcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBjb252VHJhbnNwb3NlSW5wdXRzLnB1c2goaW5wdXRzWzJdLnJlc2hhcGUoW2lucHV0c1syXS5kaW1zWzBdLCAxLCAxXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnZUcmFuc3Bvc2VJbnB1dHMucHVzaChpbnB1dHNbMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNURVAuMzogY29tcHV0ZSBtYXRtdWxcbiAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVDb252MkRUcmFuc3Bvc2VNYXRNdWxQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgICAgY29udlRyYW5zcG9zZUlucHV0cywgYWRqdXN0ZWRBdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZSwgZGltQU91dGVyLCBkaW1CT3V0ZXIsIGRpbUlubmVyLCBoYXNCaWFzLFxuICAgICAgICAgICAgICBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzKSxcbiAgICAgICAgICB7aW5wdXRzOiBjb252VHJhbnNwb3NlSW5wdXRzfSk7XG4gICAgfTtcblxuY29uc3QgY29udlRyYW5zcG9zZTFkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBDb252VHJhbnNwb3NlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICAvLyBleHRlbmQgdGhlIGlucHV0IHRvIDJEIGJ5IGFkZGluZyBIIGRpbWVuc2lvblxuICBjb25zdCBpc0NoYW5uZWxMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJztcblxuICBjb25zdCBpbnB1dHMgPSBbXG4gICAgY29udGV4dC5pbnB1dHNbMF0ucmVzaGFwZShcbiAgICAgICAgaXNDaGFubmVsTGFzdCA/XG4gICAgICAgICAgICAvLyBbTiwgVywgQ10gLT4gW04sIEg9MSwgVywgQ11cbiAgICAgICAgICAgIFtjb250ZXh0LmlucHV0c1swXS5kaW1zWzBdLCAxLCBjb250ZXh0LmlucHV0c1swXS5kaW1zWzFdLCBjb250ZXh0LmlucHV0c1swXS5kaW1zWzJdXSA6XG4gICAgICAgICAgICAvLyBbTiwgQywgV10gLT4gW04sIEMsIEg9MSwgV11cbiAgICAgICAgICAgIFtjb250ZXh0LmlucHV0c1swXS5kaW1zWzBdLCBjb250ZXh0LmlucHV0c1swXS5kaW1zWzFdLCAxLCBjb250ZXh0LmlucHV0c1swXS5kaW1zWzJdXSksXG4gICAgLy9bRklMVEVSX09VVF9DSEFOTkVMLCBGSUxURVJfSU5fQ0hBTk5FTCwga1ddIC0+IFtGSUxURVJfT1VUX0NIQU5ORUwsIEZJTFRFUl9JTl9DSEFOTkVMLCBrSD0xLCBrV11cbiAgICBjb250ZXh0LmlucHV0c1sxXS5yZXNoYXBlKFtjb250ZXh0LmlucHV0c1sxXS5kaW1zWzBdLCBjb250ZXh0LmlucHV0c1sxXS5kaW1zWzFdLCAxLCBjb250ZXh0LmlucHV0c1sxXS5kaW1zWzJdXSlcbiAgXTtcbiAgaWYgKGNvbnRleHQuaW5wdXRzLmxlbmd0aCA9PT0gMykge1xuICAgIGlucHV0cy5wdXNoKGNvbnRleHQuaW5wdXRzWzJdKTtcbiAgfVxuICBsZXQga2VybmVsU2hhcGUgPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlO1xuICBpZiAoa2VybmVsU2hhcGUubGVuZ3RoID09PSAwIHx8IGtlcm5lbFNoYXBlWzBdID09PSAwKSB7XG4gICAga2VybmVsU2hhcGUgPSBbY29udGV4dC5pbnB1dHNbMV0uZGltc1syXV07XG4gIH1cbiAgbGV0IGRpbGF0aW9ucyA9IGF0dHJpYnV0ZXMuZGlsYXRpb25zO1xuICBpZiAoZGlsYXRpb25zLmxlbmd0aCA9PT0gMCB8fCBkaWxhdGlvbnNbMF0gPT09IDApIHtcbiAgICBkaWxhdGlvbnMgPSBbMV07XG4gIH1cbiAgbGV0IHN0cmlkZXMgPSBhdHRyaWJ1dGVzLnN0cmlkZXM7XG4gIGlmIChzdHJpZGVzLmxlbmd0aCA9PT0gMCB8fCBzdHJpZGVzWzBdID09PSAwKSB7XG4gICAgc3RyaWRlcyA9IFsxXTtcbiAgfVxuICBsZXQgcGFkcyA9IGF0dHJpYnV0ZXMucGFkcztcbiAgaWYgKHBhZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcGFkcyA9IFswLCAwXTtcbiAgfVxuICBwYWRzID0gWzAsIHBhZHNbMF0sIDAsIHBhZHNbMV1dO1xuICBzdHJpZGVzID0gWzFdLmNvbmNhdChzdHJpZGVzKTtcbiAgZGlsYXRpb25zID0gWzFdLmNvbmNhdChkaWxhdGlvbnMpO1xuICBrZXJuZWxTaGFwZSA9IFsxXS5jb25jYXQoa2VybmVsU2hhcGUpO1xuICBjb25zdCBhZGp1c3RlZEF0dHJpYnV0ZXMgPVxuICAgICAgZ2V0QWRqdXN0ZWRDb252VHJhbnNwb3NlQXR0cmlidXRlcyh7Li4uYXR0cmlidXRlcywgcGFkcywgc3RyaWRlcywgZGlsYXRpb25zLCBrZXJuZWxTaGFwZX0sIGlucHV0cyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVDb252VHJhbnNwb3NlMkRQcm9ncmFtSW5mbyhcbiAgICAgIGlucHV0cywgYWRqdXN0ZWRBdHRyaWJ1dGVzLFxuICAgICAgb3V0cHV0U2hhcGUgPT4gaXNDaGFubmVsTGFzdCA/IFtvdXRwdXRTaGFwZVswXSwgb3V0cHV0U2hhcGVbMl0sIG91dHB1dFNoYXBlWzNdXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW291dHB1dFNoYXBlWzBdLCBvdXRwdXRTaGFwZVsxXSwgb3V0cHV0U2hhcGVbM11dKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udlRyYW5zcG9zZSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpO1xuICBpZiAoY29udGV4dC5pbnB1dHNbMF0uZGltcy5sZW5ndGggPT09IDMpIHtcbiAgICBjb252VHJhbnNwb3NlMWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgY29udlRyYW5zcG9zZTJkKGNvbnRleHQsIGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleSwgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgZ2V0RWxlbWVudEF0LCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyfSBmcm9tICcuL2NvbW1vbic7XG5cblxuZXhwb3J0IGludGVyZmFjZSBDdW1TdW1BdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgZXhjbHVzaXZlOiBib29sZWFuO1xuICByZWFkb25seSByZXZlcnNlOiBib29sZWFuO1xufVxuY29uc3QgY3JlYXRlQ3Vtc3VtUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dFR5cGU6IG51bWJlciwgaW5wdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sIGF4aXNJbnB1dDogVGVuc29yVmlldywgYXR0cmlidXRlczogQ3VtU3VtQXR0cmlidXRlcyk6XG4gICAgICAgIFByb2dyYW1JbmZvID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUoaW5wdXRTaGFwZSk7ICAvLyBvdXRwdXRTaGFwZSBpcyBzYW1lIGFzIGlucHV0U2hhcGUuXG4gICAgICAgICAgY29uc3QgcmFuayA9IGlucHV0U2hhcGUubGVuZ3RoOyAgICAgICAgICAgICAgICAgLy8gaW5wdXQvb3V0cHV0IHJhbmtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ2lucHV0JywgaW5wdXRUeXBlLCByYW5rKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRUeXBlLCByYW5rKTtcbiAgICAgICAgICBjb25zdCBheGlzVmFsdWUgPSBheGlzSW5wdXQuZGF0YVR5cGUgPT09IERhdGFUeXBlLmludDMyID8gYXhpc0lucHV0LmdldEludDMyQXJyYXkoKVswXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihheGlzSW5wdXQuZ2V0QmlnSW50NjRBcnJheSgpWzBdKTtcbiAgICAgICAgICBjb25zdCBheGlzID0gU2hhcGVVdGlsLm5vcm1hbGl6ZUF4aXMoYXhpc1ZhbHVlLCByYW5rKTtcbiAgICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYCBpMzIoJHtpbnB1dC5pbmRpY2VzR2V0KCdpbnB1dEluZGljZXMnLCAndW5pZm9ybXMuYXhpcycpfSkgYDtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IGdldEVsZW1lbnRBdCgndW5pZm9ybXMuaW5wdXRfc2hhcGUnLCAndW5pZm9ybXMuYXhpcycsIHJhbmspO1xuICAgICAgICAgICAgY29uc3QgbG93ZXJMaW1pdCA9IGF0dHJpYnV0ZXMucmV2ZXJzZSA/IGluZGV4ICsgKGF0dHJpYnV0ZXMuZXhjbHVzaXZlID8gJyArIDEnIDogJycpIDogJzAnO1xuICAgICAgICAgICAgY29uc3QgdXBwZXJMaW1pdCA9IGF0dHJpYnV0ZXMucmV2ZXJzZSA/IG1heCA6IGluZGV4ICsgKGF0dHJpYnV0ZXMuZXhjbHVzaXZlID8gJycgOiAnICsgMScpO1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgIHNoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ291dHB1dFNpemUnLCAndTMyJylcbiAgICAgICAgICAgICAgICAgICAgLnJlZ2lzdGVyVW5pZm9ybSgnYXhpcycsICd1MzInKVxuICAgICAgICAgICAgICAgICAgICAuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAgICAgICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dFNpemUnKX1cbiAgICAgICAgICAgICAgICAgIHZhciBpbnB1dEluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgICAgICAgICAgICAgICB2YXIgc3VtID0gJHtvdXRwdXQudHlwZS52YWx1ZX0oMCk7XG4gICAgICAgICAgICAgICAgICBsZXQgZmlyc3QgOiBpMzIgPSAke2xvd2VyTGltaXR9O1xuICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgOiBpMzIgPSAke3VwcGVyTGltaXR9O1xuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA6IGkzMiA9IGZpcnN0OyBpIDwgbGFzdDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICR7aW5wdXQuaW5kaWNlc1NldCgnaW5wdXRJbmRpY2VzJywgJ3VuaWZvcm1zLmF4aXMnLCAndTMyKGkpJyl9O1xuICAgICAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRJbmRpY2VzJyl9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnLCAnc3VtJyl9O1xuICAgICAgICAgICAgICAgIH1gO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICdDdW1TdW0nLFxuICAgICAgICAgICAgc2hhZGVyQ2FjaGU6IHtoaW50OiBhdHRyaWJ1dGVzLmNhY2hlS2V5LCBpbnB1dERlcGVuZGVuY2llczogWydyYW5rJ119LFxuICAgICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBpbnB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRUeXBlfV0sXG4gICAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICAgICAgICAgIHByb2dyYW1Vbmlmb3JtczogW1xuICAgICAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBheGlzfSxcbiAgICAgICAgICAgICAgICAuLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dFNoYXBlLCBpbnB1dFNoYXBlKVxuICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuXG5leHBvcnQgY29uc3QgY3Vtc3VtID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBDdW1TdW1BdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGlucHV0U2hhcGUgPSBjb250ZXh0LmlucHV0c1swXS5kaW1zO1xuICBjb25zdCBpbnB1dFR5cGUgPSBjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZTtcbiAgY29uc3QgYXhpcyA9IGNvbnRleHQuaW5wdXRzWzFdO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQ3Vtc3VtUHJvZ3JhbUluZm8oaW5wdXRUeXBlLCBpbnB1dFNoYXBlLCBheGlzLCBhdHRyaWJ1dGVzKSwge2lucHV0czogWzBdfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDdW1TdW1BdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQ3VtU3VtQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IGV4Y2x1c2l2ZSA9IGF0dHJpYnV0ZXMuZXhjbHVzaXZlIGFzIG51bWJlciA9PT0gMTtcbiAgY29uc3QgcmV2ZXJzZSA9IGF0dHJpYnV0ZXMucmV2ZXJzZSBhcyBudW1iZXIgPT09IDE7XG4gIHJldHVybiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoe2V4Y2x1c2l2ZSwgcmV2ZXJzZX0pO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleSwgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgSW5kaWNlc0hlbHBlciwgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdEF0dHJpYnV0ZXMge1xuICByZWFkb25seSBmb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwdGhUb1NwYWNlQXR0cmlidXRlcyBleHRlbmRzIEZvcm1hdEF0dHJpYnV0ZXMsIEF0dHJpYnV0ZVdpdGhDYWNoZUtleSB7XG4gIHJlYWRvbmx5IGJsb2Nrc2l6ZTogbnVtYmVyO1xuICByZWFkb25seSBtb2RlOiBzdHJpbmc7XG59XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogdm9pZCA9PiB7XG4gIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcHRoVG9TcGFjZSByZXF1aXJlcyAxIGlucHV0LicpO1xuICB9XG4gIGlmIChpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcHRoVG9TcGFjZSByZXF1aXJlcyA0RCBpbnB1dC4nKTtcbiAgfVxufTtcblxuY29uc3QgcGVybUZ1bmN0aW9uQm9keSA9IChwZXJtOiBudW1iZXJbXSwgcmFuazogbnVtYmVyLCBpbnB1dDogSW5kaWNlc0hlbHBlciwgb3V0cHV0OiBJbmRpY2VzSGVscGVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcmV2ZXJzZUZ1bmMgPSBbXTtcbiAgcmV2ZXJzZUZ1bmMucHVzaChgZm4gcGVybShpOiAke291dHB1dC50eXBlLmluZGljZXN9KSAtPiAke2lucHV0LnR5cGUuaW5kaWNlc30ge1xuICAgIHZhciBhOiAke2lucHV0LnR5cGUuaW5kaWNlc307YCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuazsgKytpKSB7XG4gICAgcmV2ZXJzZUZ1bmMucHVzaChpbnB1dC5pbmRpY2VzU2V0KCdhJywgcGVybVtpXSwgYGlbJHtpfV1gKSk7XG4gIH1cbiAgcmV2ZXJzZUZ1bmMucHVzaCgncmV0dXJuIGE7fScpO1xuICByZXR1cm4gcmV2ZXJzZUZ1bmMuam9pbignXFxuJyk7XG59O1xuXG5jb25zdCBjcmVhdGVEZXB0aFRvU3BhY2VQcm9ncmFtSW5mbyA9IChpbnB1dFRlbnNvcjogVGVuc29yVmlldywgYXR0cmlidXRlczogRGVwdGhUb1NwYWNlQXR0cmlidXRlcyk6IFByb2dyYW1JbmZvID0+IHtcbiAgbGV0IG46IG51bWJlciwgaDogbnVtYmVyLCB3OiBudW1iZXIsIGM6IG51bWJlcjtcbiAgbGV0IHNoYXBlOiBudW1iZXJbXTtcbiAgbGV0IHBlcm06IG51bWJlcltdO1xuICBjb25zdCBpc0NoYW5uZWxMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJztcbiAgY29uc3QgYmxvY2tzaXplID0gYXR0cmlidXRlcy5ibG9ja3NpemU7XG4gIGNvbnN0IGlzRENSbW9kZSA9IGF0dHJpYnV0ZXMubW9kZSA9PT0gJ0RDUic7XG4gIGlmIChpc0NoYW5uZWxMYXN0KSB7XG4gICAgW24sIGgsIHcsIGNdID0gaW5wdXRUZW5zb3IuZGltcztcbiAgICBzaGFwZSA9IGlzRENSbW9kZSA/IFtuLCBoLCB3LCBibG9ja3NpemUsIGJsb2Nrc2l6ZSwgYyAvIChibG9ja3NpemUgKiogMildIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuLCBoLCB3LCBjIC8gKGJsb2Nrc2l6ZSAqKiAyKSwgYmxvY2tzaXplLCBibG9ja3NpemVdO1xuICAgIHBlcm0gPSBpc0RDUm1vZGUgPyBbMCwgMSwgMywgMiwgNCwgNV0gOiBbMCwgMSwgNCwgMiwgNSwgM107XG4gIH0gZWxzZSB7XG4gICAgW24sIGgsIHcsIGNdID0gW2lucHV0VGVuc29yLmRpbXNbMF0sIGlucHV0VGVuc29yLmRpbXNbMl0sIGlucHV0VGVuc29yLmRpbXNbM10sIGlucHV0VGVuc29yLmRpbXNbMV1dO1xuICAgIHNoYXBlID0gaXNEQ1Jtb2RlID8gW24sIGJsb2Nrc2l6ZSwgYmxvY2tzaXplLCBjIC8gKGJsb2Nrc2l6ZSAqKiAyKSwgaCwgd10gOlxuICAgICAgICAgICAgICAgICAgICAgICAgW24sIGMgLyAoYmxvY2tzaXplICoqIDIpLCBibG9ja3NpemUsIGJsb2Nrc2l6ZSwgaCwgd107XG4gICAgcGVybSA9IGlzRENSbW9kZSA/IFswLCAzLCA0LCAxLCA1LCAyXSA6IFswLCAxLCA0LCAyLCA1LCAzXTtcbiAgfVxuICBjb25zdCByZXNoYXBlZElucHV0VGVuc29yID0gaW5wdXRUZW5zb3IucmVzaGFwZShzaGFwZSk7XG4gIGNvbnN0IHJlc2hhcGVkSW5wdXRSYW5rID0gcmVzaGFwZWRJbnB1dFRlbnNvci5kaW1zLmxlbmd0aDtcbiAgY29uc3QgaW5wdXREYXRhVHlwZSA9IGlucHV0VGVuc29yLmRhdGFUeXBlO1xuXG4gIGNvbnN0IHJlc2hhcGVkSW5wdXQgPSBpbnB1dFZhcmlhYmxlKCdhJywgaW5wdXREYXRhVHlwZSwgcmVzaGFwZWRJbnB1dFJhbmspO1xuICBjb25zdCBwZXJtZWRPdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXREYXRhVHlwZSwgcmVzaGFwZWRJbnB1dFJhbmspO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ291dHB1dF9zaXplJywgJ3UzMicpLmRlY2xhcmVWYXJpYWJsZXMocmVzaGFwZWRJbnB1dCwgcGVybWVkT3V0cHV0KX1cblxuICAke3Blcm1GdW5jdGlvbkJvZHkocGVybSwgcmVzaGFwZWRJbnB1dFJhbmssIHJlc2hhcGVkSW5wdXQsIHBlcm1lZE91dHB1dCl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0X3NpemUnKX1cblxuICAgIGxldCBpbmRpY2VzID0gJHtwZXJtZWRPdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuICAgIGxldCBhSW5kaWNlcyA9IHBlcm0oaW5kaWNlcyk7XG5cbiAgICAke3Blcm1lZE91dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIHJlc2hhcGVkSW5wdXQuZ2V0QnlJbmRpY2VzKCdhSW5kaWNlcycpKX1cbiAgfWA7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRGVwdGhUb1NwYWNlJyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke2lucHV0VGVuc29yLmRpbXN9OyR7YXR0cmlidXRlcy5ibG9ja3NpemV9OyR7YXR0cmlidXRlcy5tb2RlfWAsIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnXX0sXG4gICAgZ2V0UnVuRGF0YTogKGlucHV0cykgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpc0NoYW5uZWxMYXN0ID8gW24sIGggKiBibG9ja3NpemUsIHcgKiBibG9ja3NpemUsIGMgLyAoYmxvY2tzaXplICoqIDIpXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbiwgYyAvIChibG9ja3NpemUgKiogMiksIGggKiBibG9ja3NpemUsIHcgKiBibG9ja3NpemVdO1xuICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgICAgIGNvbnN0IHNoYXBlQmVmb3JlUGVybSA9IHJlc2hhcGVkSW5wdXRUZW5zb3IuZGltcztcbiAgICAgIGNvbnN0IHNoYXBlQWZ0ZXJQZXJtID0gU2hhcGVVdGlsLnNvcnRCYXNlZE9uUGVybShzaGFwZUJlZm9yZVBlcm0sIHBlcm0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICBwcm9ncmFtVW5pZm9ybXM6XG4gICAgICAgICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKHNoYXBlQmVmb3JlUGVybSwgc2hhcGVBZnRlclBlcm0pXSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBnZXRTaGFkZXJTb3VyY2UsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZGVwdGhUb1NwYWNlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBEZXB0aFRvU3BhY2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZURlcHRoVG9TcGFjZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBhdHRyaWJ1dGVzKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VEZXB0aFRvU3BhY2VBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRGVwdGhUb1NwYWNlQXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7XG4gICAgICBibG9ja3NpemU6IGF0dHJpYnV0ZXMuYmxvY2tzaXplIGFzIG51bWJlcixcbiAgICAgIG1vZGU6IGF0dHJpYnV0ZXMubW9kZSBhcyBzdHJpbmcsXG4gICAgICBmb3JtYXQ6IGF0dHJpYnV0ZXMuZm9ybWF0IGFzICdOSFdDJyB8ICdOQ0hXJ1xuICAgIH0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7QXR0cmlidXRlV2l0aENhY2hlS2V5LCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVpbnN1bUF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBlcXVhdGlvbjogc3RyaW5nO1xufVxuLy8gVGhlIGVxdWF0aW9uIGF0dHJpYnV0ZSB2YWx1ZSBpcyBhIHN0cmluZyB3aGljaCBjb25zaXN0cyBvZiBsZWZ0IGhhbmQgc2lkZSAoTEhTKSBhbmQgb3B0aW9uYWxseSByaWdodCBoYW5kIHNpZGUgKFJIUylcbi8vIHNlcGFyYXRlZCBieSAnLT4nLiBFeC4gXCJpaixqayAtPiBpa1wiIGV4cHJlc3NlcyBtYXRyaXggbXVsdGlwbGljYXRpb25cbi8vICAgICBcImlqLT5qaVwiIGV4cHJlc3NlcyBtYXRyaXggdHJhbnNwb3NlXG4vLyAgICAgIFwiaWktPmlcIiBkaWFnb25hbCBlbGVtZW50cyBvZiBhIHNxdWFyZSBtYXRyaXhcbi8vIExIUyBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIHRlcm1zIHNlcGFyYXRlZCBieSBjb21tYXMuIEVhY2ggdGVybSBjb3JyZXNwb25kcyB0byBhbiBpbnB1dCB2YXJpYWJsZS5cbi8vIEVhY2ggc3ltYm9sIGNvcnJlc3BvbmRzIHRvIGEgZGltZW5zaW9uIGluIHRoZSBpbnB1dCB2YXJpYWJsZS4gVGhlIHN5bWJvbCBjYW4gYmUgZWl0aGVyIGEgbGV0dGVyLCAnYScgdG8gJ3onIG9yICdBJyB0b1xuLy8gJ1onIG9yICcuLi4nIHRvIHJlcHJlc2VudCBhcmJpdHJhcnkgZGltZW5zaW9ucy5cblxuY29uc3Qgc3ltYm9sUGF0dGVybiA9XG4gICAgJ1thLXpBLVpdfFxcXFwuXFxcXC5cXFxcLic7ICAvLyBUaGUgcGF0dGVybiBlYWNoIHN5bWJvbCBpbiBlYWNoIHRlcm0gaW4gdGhlIHN5bWJvbGljIGVxdWF0aW9uIHNob3VsZCBtYXRjaFxuY29uc3QgdGVybVBhdHRlcm4gPSAnKCcgKyBzeW1ib2xQYXR0ZXJuICsgJykrJzsgICAvLyBUaGUgcGF0dGVybiBlYWNoIHRlcm0gaW4gdGhlIHN5bWJvbGljIGVxdWF0aW9uIHNob3VsZCBtYXRjaFxuY29uc3QgdGVybVBhdHRlcm5Pbmx5ID0gJ14nICsgdGVybVBhdHRlcm4gKyAnJCc7ICAvLyBUaGUgcGF0dGVybnMgb25seSBtYXRjaHMgYSB0ZXJtIGJlZ2luIHRvIGVuZC5cbmNvbnN0IGxoc1BhdHRlcm4gPSAnKCcgKyB0ZXJtUGF0dGVybiArICcsKSonICsgdGVybVBhdHRlcm47ICAvLyBUaGUgcGF0dGVybiB0aGUgTEhTIHNob3VsZCBtYXRjaFxuY29uc3QgbGhzUGF0dGVybk9ubHkgPSAnXicgKyBsaHNQYXR0ZXJuICsgJyQnOyAgICAgICAgICAgICAgIC8vIFRoZSBwYXR0ZXJucyBvbmx5IG1hdGNocyBhIExIUyBiZWdpbiB0byBlbmQuXG5cbmludGVyZmFjZSBTeW1ib2xJbmZvIHtcbiAgY291bnQ6IG51bWJlcjsgICAgICAgICAgIC8vIFN5bWJvbCBjb3JyZXNwb25kaW5nIHRvIGEgZGltbWVuc2lvbiBvZiBhbiBpbnB1dFxuICBpbnB1dEluZGljZXM6IG51bWJlcltdOyAgLy8gTnVtYmVyIG9mIGlucHV0IHZhcmlhYmxlcyB0aGUgc3ltYm9sIGNvcnJlc3BvbmRzIHRvXG4gIGRpbVZhbHVlOiBudW1iZXI7ICAgICAgICAvLyBOdW1iZXIgb2YgZGltZW5zaW9ucyB0aGUgc3ltYm9sIGNvcnJlc3BvbmRzIHRvXG59XG5cbmNsYXNzIEVpbnN1bVRlcm0ge1xuICBjb25zdHJ1Y3RvcihpbnB1dEluZGV4ID0gLTEpIHtcbiAgICB0aGlzLnN5bWJvbFRvSW5kaWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKTtcbiAgICB0aGlzLmlucHV0SW5kZXggPSBpbnB1dEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIGEgc3ltYm9sIHRvIHRoZSB0ZXJtXG4gIGFkZFN5bWJvbChzeW1ib2w6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuc3ltYm9sVG9JbmRpY2VzLmdldChzeW1ib2wpO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IFtpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlLnB1c2goaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLnN5bWJvbFRvSW5kaWNlcy5zZXQoc3ltYm9sLCB2YWx1ZSk7XG4gIH1cblxuICBzeW1ib2xUb0luZGljZXM6IE1hcDxzdHJpbmcsIG51bWJlcltdPjsgIC8vIE1hcCBmcm9tIHN5bWJvbCB0byBkaW1lbnNpb25zIG9mIHRoZSBpbnB1dCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0ZXJtXG4gIGlucHV0SW5kZXg6IG51bWJlcjsgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgZm9yIG91dHB1dCBhbmQgMCwgMSwgMiwgLi4uIGZvciBpbnB1dHNcbn1cblxuY2xhc3MgRWluc3VtRXF1YXRpb24ge1xuICBjb25zdHJ1Y3RvcihpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgcHVibGljIHJlYWRvbmx5IGVxdWF0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmhhc0VsbGlwc2lzID0gZmFsc2U7XG4gICAgdGhpcy5zeW1ib2xUb0luZm8gPSBuZXcgTWFwPHN0cmluZywgU3ltYm9sSW5mbz4oKTtcbiAgICB0aGlzLmxocyA9IG5ldyBBcnJheTxFaW5zdW1UZXJtPigpO1xuICAgIHRoaXMub3V0cHV0RGltcyA9IFtdO1xuICAgIC8vIEFzIHJocyBuZWVkcyB0byBiZSB1cGRhdGVkIGFsbG93IHVzaW5nIGxldCBpbnN0ZWFkIG9mIGNvbnN0IGZvciBib3RoIGxocyBhbmQgcmhzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgW2xocywgcmhzXSA9IGVxdWF0aW9uLmluY2x1ZGVzKCctPicpID8gZXF1YXRpb24uc3BsaXQoJy0+JywgMikgOiBbZXF1YXRpb24sICcnXTtcbiAgICBpZiAoIWxocy5tYXRjaChSZWdFeHAobGhzUGF0dGVybk9ubHkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIExIUyB0ZXJtJyk7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0VGVybXMgPSBsaHMuc3BsaXQoJywnKTtcbiAgICBpbnB1dFRlcm1zLmZvckVhY2goKGlucHV0VGVybSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGRpbXMgPSBpbnB1dHNbaW5kZXhdLmRpbXMuc2xpY2UoKTtcbiAgICAgIGlmICghaW5wdXRUZXJtLm1hdGNoKFJlZ0V4cCh0ZXJtUGF0dGVybk9ubHkpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTEhTIHRlcm0nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVpbnN1bVRlcm0gPSB0aGlzLnByb2Nlc3NUZXJtKGlucHV0VGVybSwgdHJ1ZSwgZGltcywgaW5kZXgpO1xuICAgICAgdGhpcy5saHMucHVzaChlaW5zdW1UZXJtKTtcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIFJIUyBpZiBub3Qgc3BlY2lmaWVkXG4gICAgaWYgKHJocyA9PT0gJycpIHtcbiAgICAgIC8vIENvbnN0cnVjdCBSSFMgZnJvbSBMSFMgdGVybXMvc3ltYm9sc1xuICAgICAgcmhzICs9IFsuLi50aGlzLnN5bWJvbFRvSW5mby5lbnRyaWVzKCldXG4gICAgICAgICAgICAgICAgIC5maWx0ZXIoKFtzeW0sIGluZm9dKSA9PiAoaW5mby5jb3VudCA9PT0gMSB8fCBzeW0gPT09ICcuLi4nKSlcbiAgICAgICAgICAgICAgICAgLm1hcCgoW3N5bV0pID0+IHN5bSlcbiAgICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXJocy5tYXRjaChSZWdFeHAodGVybVBhdHRlcm4pKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUkhTJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBvdXRwdXQgZGltc1xuICAgIGNvbnN0IHJoc1N5bWJvbHMgPSByaHMubWF0Y2goUmVnRXhwKHN5bWJvbFBhdHRlcm4sICdnJykpO1xuICAgIHJoc1N5bWJvbHM/LmZvckVhY2goKHN5bWJvbCkgPT4ge1xuICAgICAgaWYgKHN5bWJvbCA9PT0gJy4uLicpIHtcbiAgICAgICAgdGhpcy5vdXRwdXREaW1zID0gdGhpcy5vdXRwdXREaW1zLmNvbmNhdCh0aGlzLmVsbGlwc2lzRGltcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5zeW1ib2xUb0luZm8uZ2V0KHN5bWJvbCk7XG4gICAgICAgIGlmIChpbmZvID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUkhTIHN5bWJvbCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0cHV0RGltcy5wdXNoKGluZm8uZGltVmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmhzID0gdGhpcy5wcm9jZXNzVGVybShyaHMsIGZhbHNlLCB0aGlzLm91dHB1dERpbXMpO1xuICB9ICAvLyBFbmQgb2YgRWluc3VtRXFhdGlvbiBjb25zdHJ1Y3RvclxuXG4gIC8vIEFkZCBhIHN5bWJvbCB0byB0aGUgZXF1YXRpb25cbiAgYWRkU3ltYm9sKHN5bWJvbDogc3RyaW5nLCBkaW1WYWx1ZTogbnVtYmVyLCBpbnB1dEluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgaW5mbyA9IHRoaXMuc3ltYm9sVG9JbmZvLmdldChzeW1ib2wpO1xuICAgIGlmIChpbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpbmZvLmRpbVZhbHVlICE9PSBkaW1WYWx1ZSAmJiBpbmZvLmNvdW50ICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGltZW5zaW9uIG1pc21hdGNoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvLmNvdW50Kys7XG4gICAgICAgIGluZm8uaW5wdXRJbmRpY2VzLnB1c2goaW5wdXRJbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm8gPSB7Y291bnQ6IDEsIGRpbVZhbHVlLCBpbnB1dEluZGljZXM6IFtpbnB1dEluZGV4XX07XG4gICAgfVxuICAgIHRoaXMuc3ltYm9sVG9JbmZvLnNldChzeW1ib2wsIGluZm8pO1xuICB9XG5cbiAgLy8gUHJvY2VzcyBvbmUgaW5wdXQvb3V0cHV0IHRlcm1cbiAgcHJvY2Vzc1Rlcm0odGVybTogc3RyaW5nLCBpc0lucHV0OiBib29sZWFuLCBkaW1zOiByZWFkb25seSBudW1iZXJbXSwgaW5kZXggPSAtMSk6IEVpbnN1bVRlcm0ge1xuICAgIGNvbnN0IHJhbmsgPSBkaW1zLmxlbmd0aDtcbiAgICBsZXQgZWxsaXBzaXMgPSBmYWxzZTtcbiAgICBsZXQgZWxsaXBzaXNEaW1zID0gW107XG4gICAgbGV0IG5leHREaW0gPSAwO1xuICAgIC8vIEZvciBvdXRwdXQgZW1wdHkgc3RyaW5nIGlzIGFsbG93ZWQgYmVjYXVzZSB0aGUgb3V0cHV0IG1heSBiZSByZWR1Y2VkIHRvIGEgc2NhbGFyIHZhbHVlXG4gICAgaWYgKCF0ZXJtLm1hdGNoKFJlZ0V4cCh0ZXJtUGF0dGVybk9ubHkpKSAmJiAoIWlzSW5wdXQgJiYgdGVybSAhPT0gJycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTEhTIHRlcm0nKTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhTeW1ib2xzID0gdGVybS5tYXRjaChSZWdFeHAoc3ltYm9sUGF0dGVybiwgJ2cnKSk7XG4gICAgY29uc3QgZWluc3VtVGVybSA9IG5ldyBFaW5zdW1UZXJtKGluZGV4KTtcbiAgICAvLyBzeW1ib2wgY2FuIGJlIGVpdGhlciBhIGxldHRyZSwgJ2EnIHRvICd6JyBvciAnQScgdG8gJ1onLCBvciAnLi4uJ1xuICAgIGluZGV4U3ltYm9scz8uZm9yRWFjaCgoc3ltYm9sOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHN5bWJvbCA9PT0gJy4uLicpIHtcbiAgICAgICAgaWYgKGVsbGlwc2lzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IG9uZSBlbGxpcHNpcyBpcyBhbGxvd2VkIHBlciBpbnB1dCB0ZXJtJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxsaXBzaXMgPSB0cnVlO1xuICAgICAgICBjb25zdCBlbGxpcHNpc0RpbUxlbmd0aCA9IHJhbmsgLSBpbmRleFN5bWJvbHMubGVuZ3RoICsgMTtcbiAgICAgICAgaWYgKGVsbGlwc2lzRGltTGVuZ3RoIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRWxsaXBzaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgICAgICB9XG4gICAgICAgIGVsbGlwc2lzRGltcyA9IGRpbXMuc2xpY2UobmV4dERpbSwgbmV4dERpbSArIGVsbGlwc2lzRGltTGVuZ3RoKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzRWxsaXBzaXMpIHtcbiAgICAgICAgICBpZiAodGhpcy5lbGxpcHNpc0RpbXMubGVuZ3RoICE9PSBlbGxpcHNpc0RpbXMubGVuZ3RoIHx8XG4gICAgICAgICAgICAgIHRoaXMuZWxsaXBzaXNEaW1zLnRvU3RyaW5nKCkgIT09IGVsbGlwc2lzRGltcy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VsbGlwc2lzIGRpbWVuc2lvbnMgbWlzbWF0Y2gnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJbnB1dCkge1xuICAgICAgICAgIHRoaXMuaGFzRWxsaXBzaXMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZWxsaXBzaXNEaW1zID0gZWxsaXBzaXNEaW1zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRWxsaXBzaXMgbXVzdCBiZSBzcGVjaWZpZWQgaW4gdGhlIExIUycpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZCAnMCcsICcxJywgJzInLCAnMycsICc0JywgZXRjIHRvIHJlcHJlc2VudCBlbGxpcHNpcyBkaW1lbnNpb25zIHRvIGF2b2lkIHNwZWNpYWwgaGFuZGxpbmdcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGxpcHNpc0RpbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBzeW1ib2wgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCcwJy5jaGFyQ29kZUF0KDApICsgaik7XG4gICAgICAgICAgZWluc3VtVGVybS5hZGRTeW1ib2woc3ltYm9sLCBpICsgaik7XG4gICAgICAgICAgdGhpcy5hZGRTeW1ib2woc3ltYm9sLCBkaW1zW25leHREaW0rK10sIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWluc3VtVGVybS5hZGRTeW1ib2woc3ltYm9sLCBpICsgKHRoaXMuaGFzRWxsaXBzaXMgPyB0aGlzLmVsbGlwc2lzRGltcy5sZW5ndGggLSAxIDogMCkpO1xuICAgICAgICB0aGlzLmFkZFN5bWJvbChzeW1ib2wsIGRpbXNbbmV4dERpbSsrXSwgaW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlaW5zdW1UZXJtO1xuICB9XG5cbiAgc3ltYm9sVG9JbmZvOiBNYXA8c3RyaW5nLCBTeW1ib2xJbmZvPjsgIC8vIEFsbCBzeW1ib2xzIGluIHRoZSBlcXVhdGlvblxuICBoYXNFbGxpcHNpczogYm9vbGVhbjsgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVxdWF0aW9uIGhhcyBlbGxpcHNpcyBvciBub3RcbiAgZWxsaXBzaXNEaW1zOiBudW1iZXJbXTsgICAgICAgICAgICAgICAgIC8vIFRoZSBkaW1lbnNpb25zIG9mIHRoZSBlcXVhdGlvbiBlbGxpcHNpcyBjb3JyZXNwb25kcyB0by5cbiAgbGhzOiBFaW5zdW1UZXJtW107ICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1zIG9uIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgZXF1YXRpb25cbiAgcmhzOiBFaW5zdW1UZXJtOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm0gb24gdGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiB0aGUgZXF1YXRpb25cbiAgb3V0cHV0RGltczogbnVtYmVyW107ICAgICAgICAgICAgICAgICAgIC8vIE91dHB1dCBkaW1lbnNpb25zIG9mIHRoZSBlcXVhdGlvblxufSAgLy8gRW5kIG9mIGNsYXNzIEVpbnN1bUVxdWF0aW9uXG5cbmNvbnN0IGFwcGVuZE1heCA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gbmFtZSArICdfbWF4JztcblxuY29uc3QgY3JlYXRlRWluc3VtUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dFNoYXBlczogQXJyYXk8cmVhZG9ubHkgbnVtYmVyW10+LCBkYXRhVHlwZTogbnVtYmVyLCBlaW5zdW1FcXVhdGlvbjogRWluc3VtRXF1YXRpb24sXG4gICAgIG91dHB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSk6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IHJhbmtzID0gaW5wdXRTaGFwZXMubWFwKChkaW1zKSA9PiBkaW1zLmxlbmd0aCk7XG4gICAgICBjb25zdCBpbnB1dFZhcnMgPSByYW5rcy5tYXAoKHJhbmssIGluZGV4KSA9PiBpbnB1dFZhcmlhYmxlKGBpbnB1dCR7aW5kZXh9YCwgZGF0YVR5cGUsIHJhbmspKTtcbiAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgICBjb25zdCB1bmlmb3Jtc1N5bWJvbHMgPVxuICAgICAgICAgIFsuLi5laW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8ua2V5cygpXS5maWx0ZXIoKHN5bWJvbCkgPT4gIWVpbnN1bUVxdWF0aW9uLnJocy5zeW1ib2xUb0luZGljZXMuaGFzKHN5bWJvbCkpO1xuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkeENvcHk6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGluaXRQcm9kID0gJ3ZhciBwcm9kID0gMS4wOyc7XG4gICAgICAgIGNvbnN0IGluaXRTdW0gPSAndmFyIHN1bSA9IDAuMDsnO1xuICAgICAgICBjb25zdCB1cGRhdGVTdW0gPSAnc3VtICs9IHByb2Q7JztcbiAgICAgICAgY29uc3QgcmVkdWNlT3BzU2V0SW5kaWNlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgcmVkdWNlT3BzTG9vcEhlYWRlcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IHJlZHVjZU9wc0xvb3BGb290ZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCByZWR1Y2VPcENvbXB1dGU6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGlzUmVkdWNlT3BzV2l0aG91dExvb3AgPSBlaW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8uc2l6ZSA9PT0gZWluc3VtRXF1YXRpb24ucmhzLnN5bWJvbFRvSW5kaWNlcy5zaXplO1xuICAgICAgICBlaW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8uZm9yRWFjaCgoaW5mbywgc3ltYm9sKSA9PiB7XG4gICAgICAgICAgaWYgKGVpbnN1bUVxdWF0aW9uLnJocy5zeW1ib2xUb0luZGljZXMuaGFzKHN5bWJvbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEluZGV4ID0gZWluc3VtRXF1YXRpb24ucmhzLnN5bWJvbFRvSW5kaWNlcy5nZXQoc3ltYm9sKT8uWzBdO1xuICAgICAgICAgICAgaWYgKG91dHB1dEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgZWluc3VtRXF1YXRpb24ubGhzLmZvckVhY2goKHRlcm0sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5mby5pbnB1dEluZGljZXMuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSB0ZXJtLnN5bWJvbFRvSW5kaWNlcy5nZXQoc3ltYm9sKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRpY2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN5bWJvbCBlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaW5kaWNlcy5mb3JFYWNoKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZHhDb3B5LnB1c2goYCR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhcnNbaV0uaW5kaWNlc1NldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgaW5wdXQke2l9SW5kaWNlc2AsIGluZGV4LCBvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0SW5kaWNlcycsIG91dHB1dEluZGV4KSl9YCk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlaW5zdW1FcXVhdGlvbi5saHMuZm9yRWFjaCgodGVybSwgaSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaW5mby5pbnB1dEluZGljZXMuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gdGVybS5zeW1ib2xUb0luZGljZXMuZ2V0KHN5bWJvbCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGljZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN5bWJvbCBlcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmRpY2VzLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICByZWR1Y2VPcHNTZXRJbmRpY2VzLnB1c2goYCR7aW5wdXRWYXJzW2ldLmluZGljZXNTZXQoYGlucHV0JHtpfUluZGljZXNgLCBpbmRleCwgYCR7c3ltYm9sfWApfWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlZHVjZU9wQ29tcHV0ZS5wdXNoKGBwcm9kICo9ICR7aW5wdXRWYXJzW2ldLmdldEJ5SW5kaWNlcyhgaW5wdXQke2l9SW5kaWNlc2ApfTtgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZWR1Y2VPcHNMb29wSGVhZGVycy5wdXNoKFxuICAgICAgICAgICAgICAgIGBmb3IodmFyICR7c3ltYm9sfTogdTMyID0gMDsgJHtzeW1ib2x9IDwgdW5pZm9ybXMuJHthcHBlbmRNYXgoc3ltYm9sKX07ICR7c3ltYm9sfSsrKSB7YCk7XG4gICAgICAgICAgICByZWR1Y2VPcHNMb29wRm9vdGVycy5wdXNoKCd9Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVkdWNlT3BzID0gaXNSZWR1Y2VPcHNXaXRob3V0TG9vcCA/XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIC4uLmlkeENvcHksXG4gICAgICAgICAgICAgIGBsZXQgc3VtID0gJHtpbnB1dFZhcnMubWFwKChpbnB1dFZhciwgaSkgPT4gaW5wdXRWYXIuZ2V0QnlJbmRpY2VzKGBpbnB1dCR7aX1JbmRpY2VzYCkpLmpvaW4oJyAqICcpfTtgXG4gICAgICAgICAgICBdIDpcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgLi4uaWR4Q29weSxcbiAgICAgICAgICAgICAgaW5pdFN1bSxcbiAgICAgICAgICAgICAgLi4ucmVkdWNlT3BzTG9vcEhlYWRlcnMsXG4gICAgICAgICAgICAgIC4uLnJlZHVjZU9wc1NldEluZGljZXMsXG4gICAgICAgICAgICAgIGluaXRQcm9kLFxuICAgICAgICAgICAgICAuLi5yZWR1Y2VPcENvbXB1dGUsXG4gICAgICAgICAgICAgIHVwZGF0ZVN1bSxcbiAgICAgICAgICAgICAgLi4ucmVkdWNlT3BzTG9vcEZvb3RlcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgJHtcbiAgICAgICAgICAgIHNoYWRlckhlbHBlclxuICAgICAgICAgICAgICAgIC5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zU3ltYm9scy5tYXAoKHN5bWJvbCkgPT4gKHtuYW1lOiBgJHthcHBlbmRNYXgoc3ltYm9sKX1gLCB0eXBlOiAndTMyJ30pKSlcbiAgICAgICAgICAgICAgICAucmVnaXN0ZXJVbmlmb3JtKCdvdXRwdXRTaXplJywgJ3UzMicpXG4gICAgICAgICAgICAgICAgLmRlY2xhcmVWYXJpYWJsZXMoLi4uaW5wdXRWYXJzLCBvdXRwdXQpfVxuXG4gICAgICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dFNpemUnKX1cbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuICAgICAgICAgICAgJHtpbnB1dFZhcnMubWFwKChfdmFyLCBpKSA9PiBgdmFyIGlucHV0JHtpfUluZGljZXM6ICR7aW5wdXRWYXJzW2ldLnR5cGUuaW5kaWNlc307YCkuam9pbignXFxuJyl9XG4gICAgICAgICAgICAke3JlZHVjZU9wcy5qb2luKCdcXG4nKX07XG4gICAgICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsICdzdW0nKX07XG4gICAgICAgICAgfWA7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0VpbnN1bScsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogZWluc3VtRXF1YXRpb24uZXF1YXRpb24sIGlucHV0RGVwZW5kZW5jaWVzOiBpbnB1dFNoYXBlcy5tYXAoKCkgPT4gJ3JhbmsnKX0sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+IHtcbiAgICAgICAgICAvLyBUaGUgc3ltYm9scyBmcm9tIHVuaWZvcm1TeW1ib2xzIGFycmF5IGFyZSBndWFyYW50ZWVkIHRvIGV4aXN0IGluIGVpbnN1bUVxdWF0aW9ucy5zeW1ib2xUb0luZm8gbWFwLiBUaGVcbiAgICAgICAgICAvLyBmaWx0ZXIgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgZGltVmFsdWUgaXMgbmV2ZXIgMC5cbiAgICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXNJbml0OiBQcm9ncmFtVW5pZm9ybVtdID1cbiAgICAgICAgICAgICAgdW5pZm9ybXNTeW1ib2xzLmZpbHRlcigoc3ltYm9sKSA9PiBlaW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8uaGFzKHN5bWJvbCkpXG4gICAgICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgICAgICAgIChzeW1ib2wpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICh7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBlaW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8uZ2V0KHN5bWJvbCk/LmRpbVZhbHVlIHx8IDB9KSk7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zSW5pdC5wdXNoKHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9KTtcbiAgICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPVxuICAgICAgICAgICAgICBpbnB1dFNoYXBlcy5tYXAoKGRpbXMsIF8pID0+IFsuLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhkaW1zKV0pXG4gICAgICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIGlucHV0UHJvZ3JhbVVuaWZvcm1zKSA9PiBhY2MuY29uY2F0KGlucHV0UHJvZ3JhbVVuaWZvcm1zKSwgcHJvZ3JhbVVuaWZvcm1zSW5pdCk7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGUpKTtcbiAgICAgICAgICByZXR1cm4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH07XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGVpbnN1bSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogRWluc3VtQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBjb25zdCBlaW5zdW1FcXVhdGlvbiA9IG5ldyBFaW5zdW1FcXVhdGlvbihjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcy5lcXVhdGlvbik7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gZWluc3VtRXF1YXRpb24ub3V0cHV0RGltcztcbiAgY29uc3QgaW5wdXRTaGFwZXMgPSBjb250ZXh0LmlucHV0cy5tYXAoKGlucHV0LCBfKSA9PiBpbnB1dC5kaW1zKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVpbnN1bVByb2dyYW1JbmZvKGlucHV0U2hhcGVzLCBjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSwgZWluc3VtRXF1YXRpb24sIG91dHB1dFNoYXBlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VFaW5zdW1BdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRWluc3VtQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IGVxdWF0aW9uID0gKGF0dHJpYnV0ZXMuZXF1YXRpb24gYXMgc3RyaW5nKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7ZXF1YXRpb259KTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXJ9IGZyb20gJy4vY29tbW9uJztcblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwYW5kIHJlcXVpcmVzIDIgaW5wdXQuJyk7XG4gIH1cbiAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICBjb25zdCBzaGFwZSA9IEFycmF5LmZyb20oaW5wdXRzWzFdLmdldEJpZ0ludDY0QXJyYXkoKSwgTnVtYmVyKTtcblxuICBsZXQgc2hhcGVJbmRleCA9IHNoYXBlLmxlbmd0aCA8IGlucHV0U2hhcGUubGVuZ3RoID8gMCA6IHNoYXBlLmxlbmd0aCAtIGlucHV0U2hhcGUubGVuZ3RoO1xuICBsZXQgaW5wdXRTaGFwZUluZGV4ID0gaW5wdXRTaGFwZS5sZW5ndGggPCBzaGFwZS5sZW5ndGggPyAwIDogaW5wdXRTaGFwZS5sZW5ndGggLSBzaGFwZS5sZW5ndGg7XG4gIGZvciAoOyBzaGFwZUluZGV4IDwgc2hhcGUubGVuZ3RoICYmIGlucHV0U2hhcGVJbmRleCA8IGlucHV0U2hhcGUubGVuZ3RoOyArK3NoYXBlSW5kZXgsICsraW5wdXRTaGFwZUluZGV4KSB7XG4gICAgaWYgKHNoYXBlW3NoYXBlSW5kZXhdICE9PSBpbnB1dFNoYXBlW2lucHV0U2hhcGVJbmRleF0gJiYgc2hhcGVbc2hhcGVJbmRleF0gIT09IDEgJiZcbiAgICAgICAgaW5wdXRTaGFwZVtpbnB1dFNoYXBlSW5kZXhdICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGFuZCByZXF1aXJlcyBzaGFwZSB0byBiZSBicm9hZGNhc3RhYmxlIHRvIGlucHV0Jyk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBnZXRBZGp1c3RlZFNoYXBlID0gKHNoYXBlMTogcmVhZG9ubHkgbnVtYmVyW10sIHNoYXBlMjogcmVhZG9ubHkgbnVtYmVyW10pOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IGRpZmYgPSBzaGFwZTEubGVuZ3RoIC0gc2hhcGUyLmxlbmd0aDtcbiAgY29uc3Qgc2hhcGU6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZjsgKytpKSB7XG4gICAgc2hhcGUucHVzaChzaGFwZTFbaV0pO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGUyLmxlbmd0aDsgKytpKSB7XG4gICAgc2hhcGUucHVzaChzaGFwZTJbaV0gPT09IDEgPyBzaGFwZTFbaSArIGRpZmZdIDogc2hhcGUyW2ldKTtcbiAgfVxuICByZXR1cm4gc2hhcGU7XG59O1xuXG5jb25zdCBjYWxjdWxhdGVPdXRwdXRTaGFwZSA9IChpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgc2hhcGU6IHJlYWRvbmx5IG51bWJlcltdKTogbnVtYmVyW10gPT5cbiAgICAoaW5wdXRTaGFwZS5sZW5ndGggPiBzaGFwZS5sZW5ndGgpID8gZ2V0QWRqdXN0ZWRTaGFwZShpbnB1dFNoYXBlLCBzaGFwZSkgOiBnZXRBZGp1c3RlZFNoYXBlKHNoYXBlLCBpbnB1dFNoYXBlKTtcblxuXG5jb25zdCBjcmVhdGVFeHBhbmRQcm9ncmFtSW5mbyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IFByb2dyYW1JbmZvID0+IHtcbiAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICBjb25zdCBzaGFwZSA9IEFycmF5LmZyb20oaW5wdXRzWzFdLmdldEJpZ0ludDY0QXJyYXkoKSwgTnVtYmVyKTtcbiAgY29uc3Qgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gY2FsY3VsYXRlT3V0cHV0U2hhcGUoaW5wdXRTaGFwZSwgc2hhcGUpO1xuICBjb25zdCBkYXRhVHlwZSA9IGlucHV0c1swXS5kYXRhVHlwZTtcbiAgY29uc3QgY29tcG9uZW50cyA9IGRhdGFUeXBlID09PSBEYXRhVHlwZS5ib29sID8gNCA6IDE7XG4gIGNvbnN0IG91dHB1dFNpemUgPSBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gY29tcG9uZW50cyk7XG5cbiAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKCdpbnB1dCcsIGRhdGFUeXBlLCBpbnB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgIGxldCBhc3NpZ25tZW50OiBzdHJpbmc7XG4gICAgaWYgKGRhdGFUeXBlID09PSBEYXRhVHlwZS5ib29sKSB7XG4gICAgICBjb25zdCBzaW5nbGVBc3NpZ25tZW50ID0gKHJlc1N0cjogc3RyaW5nLCB4OiBudW1iZXIsIHR5cGVDYXN0ID0gJycpID0+IGBcbiAgICAgICAgICBsZXQgb3V0cHV0SW5kaWNlcyR7eH0gPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoYG91dHB1dE9mZnNldCArICR7eH11YCl9O1xuICAgICAgICAgIGxldCBvZmZzZXQke3h9ID0gJHtpbnB1dC5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldChgb3V0cHV0SW5kaWNlcyR7eH1gLCBvdXRwdXQpfTtcbiAgICAgICAgICBsZXQgaW5kZXgke3h9ID0gb2Zmc2V0JHt4fSAvIDR1O1xuICAgICAgICAgIGxldCBjb21wb25lbnQke3h9ID0gb2Zmc2V0JHt4fSAlIDR1O1xuICAgICAgICAgICR7cmVzU3RyfVske3h9XSA9ICR7dHlwZUNhc3R9KCR7aW5wdXQuZ2V0QnlPZmZzZXQoYGluZGV4JHt4fWApfVtjb21wb25lbnQke3h9XSk7XG4gICAgICAgIGA7XG4gICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgICBsZXQgb3V0cHV0T2Zmc2V0ID0gZ2xvYmFsX2lkeCAqICR7Y29tcG9uZW50c307XG4gICAgICAgIHZhciBkYXRhID0gdmVjNDx1MzI+KDApO1xuICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoJ2RhdGEnLCAwLCAndTMyJyl9XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnZGF0YScsIDEsICd1MzInKX1cbiAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdkYXRhJywgMiwgJ3UzMicpfVxuICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoJ2RhdGEnLCAzLCAndTMyJyl9XG4gICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgJ2RhdGEnKX1cbiAgICAgIH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgICBsZXQgb3V0cHV0SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcbiAgICAgICAgbGV0IGlucHV0T2Zmc2V0ID0gJHtpbnB1dC5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldCgnb3V0cHV0SW5kaWNlcycsIG91dHB1dCl9O1xuICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIGlucHV0LmdldEJ5T2Zmc2V0KCdpbnB1dE9mZnNldCcpKX1cbiAgICAgIH1gO1xuICAgIH1cbiAgICByZXR1cm4gYFxuICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgndmVjX3NpemUnLCAndTMyJykuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy52ZWNfc2l6ZScpfVxuICAgICR7YXNzaWdubWVudH1gO1xuICB9O1xuXG4gIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9XG4gICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIG91dHB1dFNoYXBlKV07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0V4cGFuZCcsXG4gICAgc2hhZGVyQ2FjaGU6IHtoaW50OiBgJHtvdXRwdXRTaGFwZS5sZW5ndGh9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuayddfSxcbiAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICB9KVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cGFuZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFeHBhbmRQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cyksIHtpbnB1dHM6IFswXX0pO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mb30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2lucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlLCBXT1JLR1JPVVBfU0laRX0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0ICogYXMgdW5hcnkgZnJvbSAnLi91bmFyeS1vcCc7XG5cbi8vIEdFTFUgaXMgZGVmaW5lZCBhcyBZPTAuNSpYKigxK3RhbmgoMC43OTc4ODUqWCswLjAzNTY3NypYKlgqWCkpLCB3aGVyZSBYIG1heSBwcmUtYWRkIGEgYmlhcy5cblxuY29uc3QgY3JlYXRlRmFzdEdlbHVQcm9ncmFtSW5mbyA9IChpbnB1dFRlbnNvcnM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IFByb2dyYW1JbmZvID0+IHtcbiAgY29uc3QgZGF0YVR5cGUgPSBpbnB1dFRlbnNvcnNbMF0uZGF0YVR5cGU7XG4gIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShpbnB1dFRlbnNvcnNbMF0uZGltcyk7XG4gIGNvbnN0IGJpYXNMZW5ndGggPSBTaGFwZVV0aWwuc2l6ZShpbnB1dFRlbnNvcnNbMV0uZGltcyk7XG4gIC8vIGNhbiBvbmx5IHVzZSB2ZWM0IHdoZW4gYmlhcyBsZW5ndGggaXMgbXVsdGlwbGUgb2YgNFxuICBjb25zdCB1c2VWZWM0ID0gYmlhc0xlbmd0aCAlIDQgPT09IDA7XG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgeCA9IGlucHV0VmFyaWFibGUoJ3gnLCBkYXRhVHlwZSwgWzFdLCA0KTtcbiAgICBjb25zdCBiaWFzID0gaW5wdXRWYXJpYWJsZSgnYmlhcycsIGRhdGFUeXBlLCBbMV0sIDQpO1xuICAgIGNvbnN0IHkgPSBvdXRwdXRWYXJpYWJsZSgneScsIGRhdGFUeXBlLCBbMV0sIDQpO1xuXG4gICAgY29uc3QgdW5pZm9ybXM6IFVuaWZvcm1zQXJyYXlUeXBlID0gW3tuYW1lOiAnb3V0cHV0X3ZlY19zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ2JpYXNfc2l6ZScsIHR5cGU6ICd1MzInfV07XG5cbiAgICBjb25zdCBzaW5nbGVFbGVtZW50QmlhcyA9IChpOiAwfDF8MnwzKSA9PiBgXG4gICAgICBsZXQgYmlhcyR7aX1fb2Zmc2V0OiB1MzIgPSAoZ2xvYmFsX2lkeCAqIDQgKyAke2l9KSAlIHVuaWZvcm1zLmJpYXNfc2l6ZTtcbiAgICAgIGxldCBiaWFzJHtpfSA9ICR7Ymlhcy5nZXRCeU9mZnNldChgYmlhcyR7aX1fb2Zmc2V0IC8gNGApfVtiaWFzJHtpfV9vZmZzZXQgJSA0XTtgO1xuICAgIGNvbnN0IGJpYXNHZXRFeHByZXNzaW9uID0gdXNlVmVjNCA/XG4gICAgICAgIGBcbiAgICAgIGxldCBiaWFzID0gJHtiaWFzLmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4ICUgKHVuaWZvcm1zLmJpYXNfc2l6ZSAvIDQpJyl9O2AgOlxuICAgICAgICBgJHtzaW5nbGVFbGVtZW50QmlhcygwKX0ke3NpbmdsZUVsZW1lbnRCaWFzKDEpfSR7c2luZ2xlRWxlbWVudEJpYXMoMil9JHtzaW5nbGVFbGVtZW50QmlhcygzKX1cbiAgICAgIGxldCBiaWFzID0gJHt4LnR5cGUudmFsdWV9KGJpYXMwLCBiaWFzMSwgYmlhczIsIGJpYXMzKTtgO1xuXG4gICAgcmV0dXJuIGAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKHgsIGJpYXMsIHkpfVxuXG4gICAgJHt1bmFyeS5mYXN0R2VsdUltcGwodGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShkYXRhVHlwZSkpfVxuXG4gICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFdPUktHUk9VUF9TSVpFKX1cbiAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF92ZWNfc2l6ZScpfVxuXG4gICAgICBsZXQgeCA9ICR7eC5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpfTtcbiAgICAgICR7Ymlhc0dldEV4cHJlc3Npb259XG4gICAgICBsZXQgeF9pbiA9IHggKyBiaWFzO1xuICAgICAgJHt5LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgdW5hcnkuZmFzdEdlbHVFeHByZXNzaW9uKCd4X2luJykpfVxuICAgIH1gO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0Zhc3RHZWx1V2l0aEJpYXMnLFxuICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7dXNlVmVjNH1gLCBpbnB1dERlcGVuZGVuY2llczogWyd0eXBlJywgJ3R5cGUnXX0sXG4gICAgZ2V0U2hhZGVyU291cmNlLFxuICAgIGdldFJ1bkRhdGE6IChpbnB1dHMpID0+ICh7XG4gICAgICBvdXRwdXRzOiBbe2RpbXM6IGlucHV0c1swXS5kaW1zLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlfV0sXG4gICAgICBwcm9ncmFtVW5pZm9ybXM6XG4gICAgICAgICAgW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNCl9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBiaWFzTGVuZ3RofV0sXG4gICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyBXT1JLR1JPVVBfU0laRSAvIDQpfVxuICAgIH0pXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZmFzdEdlbHUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgaWYgKGNvbnRleHQuaW5wdXRzLmxlbmd0aCA8IDIgfHwgU2hhcGVVdGlsLnNpemUoY29udGV4dC5pbnB1dHNbMV0uZGltcykgPT09IDApIHtcbiAgICB1bmFyeS5mYXN0R2VsdShjb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRmFzdEdlbHVQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cykpO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7QXR0cmlidXRlV2l0aENhY2hlS2V5LCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdhdGhlckF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICBheGlzOiBudW1iZXI7XG59XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogdm9pZCA9PiB7XG4gIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dhdGhlciByZXF1aXJlcyAyIGlucHV0cy4nKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlR2F0aGVyUHJvZ3JhbUluZm8gPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEdhdGhlckF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgY29uc3QgaW5kaWNlc1NoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG5cbiAgY29uc3QgaW5wdXRSYW5rID0gaW5wdXRTaGFwZS5sZW5ndGg7XG4gIGNvbnN0IGF4aXMgPSBTaGFwZVV0aWwubm9ybWFsaXplQXhpcyhhdHRyaWJ1dGVzLmF4aXMsIGlucHV0UmFuayk7XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlLnNsaWNlKDApO1xuICBvdXRwdXRTaGFwZS5zcGxpY2UoYXhpcywgMSwgLi4uaW5kaWNlc1NoYXBlKTtcblxuICBjb25zdCBheGlzRGltTGltaXQgPSBpbnB1dFNoYXBlW2F4aXNdO1xuICBjb25zdCBjb21wb25lbnRzID0gaW5wdXRzWzBdLmRhdGFUeXBlID09PSBEYXRhVHlwZS5ib29sID8gNCA6IDE7XG4gIGNvbnN0IG91dHB1dFNpemUgPSBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gY29tcG9uZW50cyk7XG5cbiAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGF4aXNEaW1MaW1pdH0sXG4gICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogYXhpc30sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBpbnB1dHNbMV0uZGltcywgb3V0cHV0U2hhcGUpXG4gIF07XG5cbiAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGlucHV0VmFyaWFibGUoJ2RhdGEnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgY29uc3QgaW5kaWNlcyA9IGlucHV0VmFyaWFibGUoJ2lucHV0SW5kaWNlcycsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuXG4gICAgY29uc3QgY2FsY0RhdGFJbmRpY2VzID0gKHg6IG51bWJlcnxzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgaW5kaWNlc1JhbmsgPSBpbmRpY2VzU2hhcGUubGVuZ3RoO1xuICAgICAgbGV0IGNhbGNTdHIgPSBgdmFyIGluZGljZXNJbmRpY2VzJHt4fSAgPSAke2luZGljZXMudHlwZS5pbmRpY2VzfSgwKTtgO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzUmFuazsgaSsrKSB7XG4gICAgICAgIGNhbGNTdHIgKz0gYCR7aW5kaWNlc1JhbmsgPiAxID8gYGluZGljZXNJbmRpY2VzJHt4fVske2l9XWAgOiBgaW5kaWNlc0luZGljZXMke3h9YH0gPSAke1xuICAgICAgICAgICAgb3V0cHV0U2hhcGUubGVuZ3RoID4gMSA/IGBvdXRwdXRJbmRpY2VzJHt4fVt1bmlmb3Jtcy5heGlzICsgJHtpfV1gIDogYG91dHB1dEluZGljZXMke3h9YH07YDtcbiAgICAgIH1cbiAgICAgIGNhbGNTdHIgKz0gYFxuICAgICAgICAgIHZhciBpZHgke3h9ID0gJHtpbmRpY2VzLmdldEJ5SW5kaWNlcyhgaW5kaWNlc0luZGljZXMke3h9YCl9O1xuICAgICAgICAgIGlmIChpZHgke3h9IDwgMCkge1xuICAgICAgICAgICAgaWR4JHt4fSA9IGlkeCR7eH0gKyB1bmlmb3Jtcy5heGlzRGltTGltaXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBkYXRhSW5kaWNlcyR7eH0gOiAke2RhdGEudHlwZS5pbmRpY2VzfTtcbiAgICAgICAgYDtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gMDsgaSA8IGlucHV0UmFuazsgaSsrKSB7XG4gICAgICAgIGlmIChpID09PSBheGlzKSB7XG4gICAgICAgICAgY2FsY1N0ciArPSBgJHtpbnB1dFJhbmsgPiAxID8gYGRhdGFJbmRpY2VzJHt4fVske2l9XWAgOiBgZGF0YUluZGljZXMke3h9YH0gPSB1MzIoaWR4JHt4fSk7YDtcbiAgICAgICAgICBqICs9IGluZGljZXNSYW5rO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGNTdHIgKz0gYCR7aW5wdXRSYW5rID4gMSA/IGBkYXRhSW5kaWNlcyR7eH1bJHtpfV1gIDogYGRhdGFJbmRpY2VzJHt4fWB9ID0gJHtcbiAgICAgICAgICAgICAgb3V0cHV0U2hhcGUubGVuZ3RoID4gMSA/IGBvdXRwdXRJbmRpY2VzJHt4fVske2p9XWAgOiBgb3V0cHV0SW5kaWNlcyR7eH1gfTtgO1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNhbGNTdHI7XG4gICAgfTtcbiAgICBsZXQgYXNzaWdubWVudDogc3RyaW5nO1xuICAgIGlmIChpbnB1dHNbMF0uZGF0YVR5cGUgPT09IERhdGFUeXBlLmJvb2wpIHtcbiAgICAgIGNvbnN0IHNpbmdsZUFzc2lnbm1lbnQgPSAocmVzU3RyOiBzdHJpbmcsIHg6IG51bWJlciwgdHlwZUNhc3QgPSAnJykgPT4gYFxuICAgICAgICAgIGxldCBvdXRwdXRJbmRpY2VzJHt4fSA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcyhgb3V0cHV0T2Zmc2V0ICsgJHt4fXVgKX07XG4gICAgICAgICAgJHtjYWxjRGF0YUluZGljZXMoeCl9O1xuICAgICAgICAgIGxldCBvZmZzZXQke3h9ID0gJHtkYXRhLmluZGljZXNUb09mZnNldChgZGF0YUluZGljZXMke3h9YCl9O1xuICAgICAgICAgIGxldCBpbmRleCR7eH0gPSBvZmZzZXQke3h9IC8gNHU7XG4gICAgICAgICAgbGV0IGNvbXBvbmVudCR7eH0gPSBvZmZzZXQke3h9ICUgNHU7XG4gICAgICAgICAgJHtyZXNTdHJ9WyR7eH1dID0gJHt0eXBlQ2FzdH0oJHtkYXRhLmdldEJ5T2Zmc2V0KGBpbmRleCR7eH1gKX1bY29tcG9uZW50JHt4fV0pO1xuICAgICAgICBgO1xuICAgICAgYXNzaWdubWVudCA9IGBcbiAgICAgICAgbGV0IG91dHB1dE9mZnNldCA9IGdsb2JhbF9pZHggKiAke2NvbXBvbmVudHN9O1xuICAgICAgICB2YXIgdmFsdWUgPSB2ZWM0PHUzMj4oMCk7XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgndmFsdWUnLCAwLCAndTMyJyl9XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgndmFsdWUnLCAxLCAndTMyJyl9XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgndmFsdWUnLCAyLCAndTMyJyl9XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgndmFsdWUnLCAzLCAndTMyJyl9XG4gICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgJ3ZhbHVlJyl9XG4gICAgICBgO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgbGV0IG91dHB1dEluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgICAke2NhbGNEYXRhSW5kaWNlcygnJyl9O1xuICAgICAgbGV0IHZhbHVlID0gJHtkYXRhLmdldEJ5SW5kaWNlcygnZGF0YUluZGljZXMnKX07XG4gICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsICd2YWx1ZScpfTtcbiAgICAgIGA7XG4gICAgfVxuICAgIHJldHVybiBgXG4gICAgICAke1xuICAgICAgICBzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3JtKCdvdXRwdXRTaXplJywgJ3UzMicpXG4gICAgICAgICAgICAucmVnaXN0ZXJVbmlmb3JtKCdheGlzRGltTGltaXQnLCAnaTMyJylcbiAgICAgICAgICAgIC5yZWdpc3RlclVuaWZvcm0oJ2F4aXMnLCAndTMyJylcbiAgICAgICAgICAgIC5kZWNsYXJlVmFyaWFibGVzKGRhdGEsIGluZGljZXMsIG91dHB1dCl9XG4gICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0U2l6ZScpfVxuICAgICAgICAke2Fzc2lnbm1lbnR9XG4gICAgICB9YDtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnR2F0aGVyJyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGF0dHJpYnV0ZXMuY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnLCAncmFuayddfSxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9LFxuICAgICAgXSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICB9KSxcbiAgICBnZXRTaGFkZXJTb3VyY2UsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VHYXRoZXJBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogR2F0aGVyQXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7YXhpczogYXR0cmlidXRlcy5heGlzIGFzIG51bWJlcn0pO1xuXG5leHBvcnQgY29uc3QgZ2F0aGVyID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBHYXRoZXJBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IGNvbnRleHQuaW5wdXRzO1xuICB2YWxpZGF0ZUlucHV0cyhpbnB1dHMpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlR2F0aGVyUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeSwgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdhdGhlckVsZW1lbnRzQXR0cmlidXRlcyBleHRlbmRzIEF0dHJpYnV0ZVdpdGhDYWNoZUtleSB7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignR2F0aGVyRWxlbWVudHMgcmVxdWlyZXMgMiBpbnB1dHMuJyk7XG4gIH1cblxuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2F0aGVyRWxlbWVudHMgcmVxdWlyZXMgdGhhdCB0aGUgZGF0YSBpbnB1dCBiZSByYW5rID49IDEuJyk7XG4gIH1cblxuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSBpbnB1dHNbMV0uZGltcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdhdGhlckVsZW1lbnRzIHJlcXVpcmVzIHRoYXQgdGhlIGRhdGEgaW5wdXQgYW5kXG4gICAgICAgICAgICAgICAgICAgICBpbmRpY2VzIGlucHV0IHRlbnNvcnMgYmUgb2Ygc2FtZSByYW5rLmApO1xuICB9XG59O1xuXG5jb25zdCBjcmVhdGVHYXRoZXJFbGVtZW50c1Byb2dyYW1JbmZvID1cbiAgICAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEdhdGhlckVsZW1lbnRzQXR0cmlidXRlcyk6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IGlucHV0T3V0cHV0RGF0YVR5cGUgPSBpbnB1dHNbMF0uZGF0YVR5cGU7XG4gICAgICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dFNoYXBlLmxlbmd0aDtcblxuICAgICAgY29uc3QgaW5kaWNlc1NoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG4gICAgICBjb25zdCBpbmRpY2VzRGF0YVR5cGUgPSBpbnB1dHNbMV0uZGF0YVR5cGU7XG4gICAgICBjb25zdCBheGlzID0gU2hhcGVVdGlsLm5vcm1hbGl6ZUF4aXMoYXR0cmlidXRlcy5heGlzLCBpbnB1dFJhbmspO1xuICAgICAgY29uc3QgYXhpc0RpbUxpbWl0ID0gaW5wdXRTaGFwZVtheGlzXTtcblxuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbmRpY2VzU2hhcGUuc2xpY2UoMCk7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ2lucHV0JywgaW5wdXRPdXRwdXREYXRhVHlwZSwgaW5wdXRSYW5rKTtcbiAgICAgIGNvbnN0IGluZGljZXMgPSBpbnB1dFZhcmlhYmxlKCdpbmRpY2VzSW5wdXQnLCBpbmRpY2VzRGF0YVR5cGUsIGluZGljZXNTaGFwZS5sZW5ndGgpO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0T3V0cHV0RGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG5cblxuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBvdXRwdXRTaXplfSwge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBheGlzRGltTGltaXR9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBheGlzfVxuICAgICAgXTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIGluZGljZXNTaGFwZSwgb3V0cHV0U2hhcGUpKTtcbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJywgJ3JhbmsnXTtcblxuICAgICAgLy8gaW50NjQgaW5kaWNlcyB3b3VsZCBiZSB0cmVhdGVkIGFzIGxpdHRsZSBlbmRpYW4gaTMyIHdpdGggYXNzdW1wdGlvbiB0aGV5IGZhbGwgaW4gaTMyIGxpbWl0c1xuICAgICAgLy8gVGhhdCBhc3N1bXB0aW9uIGlzIHNhZmUgYXMgaXQncyBub3QgcG9zc2libGUgdG8gYWxsb2NhdGUgPjJnYiBidWZmZXIgZm9yIGlucHV0IHRlbnNvclxuICAgICAgLy8gSW5wdXQgZGF0YSB3aWxsIGJlIHRyZWF0ZWQgYXMgdTMyIG9yIHR3byB1MzIgZm9yIDgtYnl0ZSB0ZW5zb3JzXG4gICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IGBcbiAgICAgICR7XG4gICAgICAgICAgc2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgnb3V0cHV0U2l6ZScsICd1MzInKVxuICAgICAgICAgICAgICAucmVnaXN0ZXJVbmlmb3JtKCdheGlzRGltTGltaXQnLCAnaTMyJylcbiAgICAgICAgICAgICAgLnJlZ2lzdGVyVW5pZm9ybSgnYXhpcycsICd1MzInKVxuICAgICAgICAgICAgICAuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgaW5kaWNlcywgb3V0cHV0KX1cbiAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0U2l6ZScpfVxuXG4gICAgICBsZXQgb3V0cHV0SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcblxuICAgICAgdmFyIGlkeCA9ICR7aW5kaWNlcy5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpfTtcbiAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgIGlkeCA9IGlkeCArIHVuaWZvcm1zLmF4aXNEaW1MaW1pdDtcbiAgICAgIH1cbiAgICAgIHZhciBpbnB1dEluZGljZXMgPSAke2lucHV0LnR5cGUuaW5kaWNlc30ob3V0cHV0SW5kaWNlcyk7XG4gICAgICAke2lucHV0LmluZGljZXNTZXQoJ2lucHV0SW5kaWNlcycsICd1bmlmb3Jtcy5heGlzJywgJ3UzMihpZHgpJyl9O1xuICAgICAgbGV0IHZhbHVlID0gJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0SW5kaWNlcycpfTtcblxuICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnLCAndmFsdWUnKX07XG4gIH1gO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnR2F0aGVyRWxlbWVudHMnLFxuICAgICAgICBzaGFkZXJDYWNoZToge2lucHV0RGVwZW5kZW5jaWVzfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH07XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlR2F0aGVyRWxlbWVudHNBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogR2F0aGVyRWxlbWVudHNBdHRyaWJ1dGVzID0+XG4gICAgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHtheGlzOiBhdHRyaWJ1dGVzLmF4aXMgYXMgbnVtYmVyfSk7XG5cbmV4cG9ydCBjb25zdCBnYXRoZXJFbGVtZW50cyA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogR2F0aGVyRWxlbWVudHNBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IGNvbnRleHQuaW5wdXRzO1xuICB2YWxpZGF0ZUlucHV0cyhpbnB1dHMpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlR2F0aGVyRWxlbWVudHNQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcykpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge0dlbW1VdGlsLCBTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3ksIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIEluZGljZXNIZWxwZXIsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuL2NvbW1vbic7XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogdm9pZCA9PiB7XG4gIGlmICghaW5wdXRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBpcyBtaXNzaW5nJyk7XG4gIH1cbiAgaWYgKGlucHV0cy5sZW5ndGggPCAyIHx8IGlucHV0cy5sZW5ndGggPiAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhaWQgaW5wdXQgbnVtYmVyLicpO1xuICB9XG5cbiAgLy8gJ0MnIGNhbiBiZSBvZiBkaW1lbnNpb25hbGl0eSAwLCAxIG9yIDIgb25seVxuICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gMyAmJiBpbnB1dHNbMl0uZGltcy5sZW5ndGggPiAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHNoYXBlIG9mIEMnKTtcbiAgfVxuXG4gIGlmICgoaW5wdXRzWzBdLmRhdGFUeXBlICE9PSBpbnB1dHNbMV0uZGF0YVR5cGUpIHx8XG4gICAgICAoaW5wdXRzLmxlbmd0aCA9PT0gMyAmJiBpbnB1dHNbMF0uZGF0YVR5cGUgIT09IGlucHV0c1syXS5kYXRhVHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IHR5cGVzIGFyZSBtaXNtYXRjaGVkJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VtbUF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICB0cmFuc0E6IGJvb2xlYW47XG4gIHRyYW5zQjogYm9vbGVhbjtcbiAgYWxwaGE6IG51bWJlcjtcbiAgYmV0YTogbnVtYmVyO1xufVxuXG5jb25zdCBjcmVhdGVHZW1tUHJvZ3JhbUluZm8gPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEdlbW1BdHRyaWJ1dGVzKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBhU2hhcGUgPSBpbnB1dHNbMF0uZGltcy5zbGljZSgpO1xuICBjb25zdCBiU2hhcGUgPSBpbnB1dHNbMV0uZGltcy5zbGljZSgpO1xuICBjb25zdCBbTSwgTiwgS10gPSBHZW1tVXRpbC5nZXRTaGFwZU9mR2VtbVJlc3VsdChcbiAgICAgIGFTaGFwZSwgYXR0cmlidXRlcy50cmFuc0EsIGJTaGFwZSwgYXR0cmlidXRlcy50cmFuc0IsIGlucHV0cy5sZW5ndGggPT09IDMgPyBpbnB1dHNbMl0uZGltcyA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gW00sIE5dO1xuICBpZiAoIW91dHB1dFNoYXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IHVzZSBnZW1tIG9uIHRoZSBnaXZlbiB0ZW5zb3JzJyk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBNfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogTn0sXG4gICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogS30sIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5hbHBoYX0sXG4gICAge3R5cGU6IERhdGFUeXBlLmZsb2F0LCBkYXRhOiBhdHRyaWJ1dGVzLmJldGF9XG4gIF07XG4gIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWyd0eXBlJywgJ3R5cGUnXTtcbiAgaWYgKGlucHV0cy5sZW5ndGggPT09IDMpIHtcbiAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMl0uZGltcykpO1xuICAgIGlucHV0RGVwZW5kZW5jaWVzLnB1c2goJ3JhbmsnKTtcbiAgfVxuICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZSkpO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgIGxldCBsaW5lID0gJyc7XG4gICAgaWYgKGF0dHJpYnV0ZXMudHJhbnNBICYmIGF0dHJpYnV0ZXMudHJhbnNCKSB7XG4gICAgICBsaW5lID0gJ3ZhbHVlICs9IGFbayAqIHVuaWZvcm1zLk0gKyBtXSAqIGJbbiAqIHVuaWZvcm1zLksgKyBrXTsnO1xuICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy50cmFuc0EgJiYgIWF0dHJpYnV0ZXMudHJhbnNCKSB7XG4gICAgICBsaW5lID0gJ3ZhbHVlICs9IGFbayAqIHVuaWZvcm1zLk0gKyBtXSAqIGJbayAqIHVuaWZvcm1zLk4gKyBuXTsnO1xuICAgIH0gZWxzZSBpZiAoIWF0dHJpYnV0ZXMudHJhbnNBICYmIGF0dHJpYnV0ZXMudHJhbnNCKSB7XG4gICAgICBsaW5lID0gJ3ZhbHVlICs9IGFbbSAqIHVuaWZvcm1zLksgKyBrXSAqIGJbbiAqIHVuaWZvcm1zLksgKyBrXTsnO1xuICAgIH0gZWxzZSBpZiAoIWF0dHJpYnV0ZXMudHJhbnNBICYmICFhdHRyaWJ1dGVzLnRyYW5zQikge1xuICAgICAgbGluZSA9ICd2YWx1ZSArPSBhW20gKiB1bmlmb3Jtcy5LICsga10gKiBiW2sgKiB1bmlmb3Jtcy5OICsgbl07JztcbiAgICB9XG5cbiAgICBjb25zdCBjYWxjdWxhdGVBbHBoYSA9IGF0dHJpYnV0ZXMuYWxwaGEgPT09IDEgPyAnJyA6ICd2YWx1ZSAqPSB1bmlmb3Jtcy5hbHBoYTsnO1xuICAgIGNvbnN0IGEgPSBpbnB1dFZhcmlhYmxlKCdhJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcyk7XG4gICAgY29uc3QgYiA9IGlucHV0VmFyaWFibGUoJ2InLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zKTtcbiAgICBjb25zdCBkYXRhVHlwZSA9IGEudHlwZS52YWx1ZTtcbiAgICBsZXQgYzogSW5kaWNlc0hlbHBlcnxudWxsID0gbnVsbDtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSBbYSwgYl07XG4gICAgaWYgKGlucHV0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGMgPSBpbnB1dFZhcmlhYmxlKCdjJywgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcy5sZW5ndGgpO1xuICAgICAgdmFyaWFibGVzLnB1c2goYyk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgdmFyaWFibGVzLnB1c2gob3V0cHV0KTtcbiAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbXG4gICAgICB7bmFtZTogJ291dHB1dF9zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ00nLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnTicsIHR5cGU6ICd1MzInfSwge25hbWU6ICdLJywgdHlwZTogJ3UzMid9LFxuICAgICAge25hbWU6ICdhbHBoYScsIHR5cGU6ICdmMzInfSwge25hbWU6ICdiZXRhJywgdHlwZTogJ2YzMid9XG4gICAgXTtcbiAgICByZXR1cm4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLnZhcmlhYmxlcyl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0X3NpemUnKX1cblxuICAgIGxldCBtID0gZ2xvYmFsX2lkeCAvIHVuaWZvcm1zLk47XG4gICAgbGV0IG4gPSBnbG9iYWxfaWR4ICUgdW5pZm9ybXMuTjtcblxuICAgIHZhciB2YWx1ZSA9ICR7ZGF0YVR5cGV9KDApO1xuICAgIGZvciAodmFyIGs6IHUzMiA9IDB1OyBrIDwgdW5pZm9ybXMuSzsgaysrKSB7XG4gICAgICAke2xpbmV9XG4gICAgfVxuXG4gICAgJHtjYWxjdWxhdGVBbHBoYX1cbiAgICAkeygoKSA9PiB7XG4gICAgICBpZiAoYyAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBgbGV0IGNPZmZzZXQgPSAke2MuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoJ3ZlYzIobSwgbiknLCBvdXRwdXQpfTsgdmFsdWUgKz0gJHtcbiAgICAgICAgICAgIGRhdGFUeXBlfSh1bmlmb3Jtcy5iZXRhKSAqICR7Yy5nZXRCeU9mZnNldCgnY09mZnNldCcpfTtgO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH0pKCl9XG4gICAgb3V0cHV0W2dsb2JhbF9pZHhdID0gdmFsdWU7XG4gIH1gO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0dlbW0nLFxuICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX1gLCBpbnB1dERlcGVuZGVuY2llc30sXG4gICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICB9KSxcbiAgICBnZXRTaGFkZXJTb3VyY2UsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VHZW1tQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEdlbW1BdHRyaWJ1dGVzID0+IHtcbiAgY29uc3QgdHJhbnNBID0gYXR0cmlidXRlcy50cmFuc0EgYXMgYm9vbGVhbjtcbiAgY29uc3QgdHJhbnNCID0gYXR0cmlidXRlcy50cmFuc0IgYXMgYm9vbGVhbjtcbiAgY29uc3QgYWxwaGEgPSBhdHRyaWJ1dGVzLmFscGhhIGFzIG51bWJlcjtcbiAgY29uc3QgYmV0YSA9IGF0dHJpYnV0ZXMuYmV0YSBhcyBudW1iZXI7XG4gIHJldHVybiB7dHJhbnNBLCB0cmFuc0IsIGFscGhhLCBiZXRhLCBjYWNoZUtleTogYCR7YXR0cmlidXRlcy50cmFuc0F9OyR7YXR0cmlidXRlcy50cmFuc0J9OyR7YXR0cmlidXRlcy5hbHBoYSA9PT0gMX1gfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW1tID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBHZW1tQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVHZW1tUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5LCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBmaWxsVmVjdG9yLCBnZXRNYXhDb21wb25lbnRzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCBzdW1WZWN0b3IsIHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZSwgVW5pZm9ybXNBcnJheVR5cGV9IGZyb20gJy4vY29tbW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZU5vcm1BdHRyaWJ1dGVzIHtcbiAgZXBzaWxvbjogbnVtYmVyO1xuICBmb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG59XG5cbmNvbnN0IGNyZWF0ZUluc3RhbmNlTm9ybVByb2dyYW1JbmZvID1cbiAgICAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEluc3RhbmNlTm9ybUF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCB4U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0geFNoYXBlO1xuICAgICAgY29uc3QgYXhpcyA9IDI7XG4gICAgICBjb25zdCBub3JtQ291bnQgPSBTaGFwZVV0aWwuc2l6ZVRvRGltZW5zaW9uKHhTaGFwZSwgYXhpcyk7XG4gICAgICBjb25zdCBub3JtU2l6ZSA9IFNoYXBlVXRpbC5zaXplRnJvbURpbWVuc2lvbih4U2hhcGUsIGF4aXMpO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMobm9ybVNpemUpO1xuICAgICAgY29uc3Qgbm9ybVBhY2tlZFNpemUgPSBub3JtU2l6ZSAvIGNvbXBvbmVudHM7XG4gICAgICBjb25zdCBpbnB1dFNoYXBlID0gW3hTaGFwZVswXSwgeFNoYXBlWzFdLCBub3JtUGFja2VkU2l6ZV07XG4gICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llczogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXSA9IFsncmFuaycsICd0eXBlJywgJ3R5cGUnXTtcbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9XG4gICAgICAgICAgW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG5vcm1TaXplfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogbm9ybVBhY2tlZFNpemV9XTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIGlucHV0U2hhcGUpKTtcblxuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKCd4JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gaW5wdXRWYXJpYWJsZSgnc2NhbGUnLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zKTtcbiAgICAgICAgY29uc3QgYmlhcyA9IGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgaW5wdXRTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBbeCwgc2NhbGUsIGJpYXMsIG91dHB1dF07XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0geC50eXBlLnZhbHVlO1xuICAgICAgICBjb25zdCBmMzJUeXBlID0gY29tcG9uZW50cyA9PT0gMSA/ICdmMzInIDogYHZlYyR7Y29tcG9uZW50c308ZjMyPmA7XG4gICAgICAgIGNvbnN0IHdvcmtncm91cFNpemUgPSA2NDtcblxuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbe25hbWU6ICdub3JtU2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdub3JtUGFja2VkU2l6ZScsIHR5cGU6ICd1MzInfV07XG4gICAgICAgIHJldHVybiBgXG4gIHZhcjx3b3JrZ3JvdXA+IG1lYW5TaGFyZWQgOiBmMzI7XG4gIHZhcjx3b3JrZ3JvdXA+IHNxdWFyZWROb3JtU2hhcmVkIDogZjMyO1xuICB2YXI8d29ya2dyb3VwPiB3b3JrZ3JvdXBTaGFyZWQgOiBhcnJheTwke2YzMlR5cGV9LCAke3dvcmtncm91cFNpemV9PjtcbiAgY29uc3Qgd29ya2dyb3VwU2l6ZSA9ICR7d29ya2dyb3VwU2l6ZX11O1xuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLnZhcmlhYmxlcyl9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCh3b3JrZ3JvdXBTaXplKX1cbiAgICBsZXQgbm9ybSA9IGdsb2JhbF9pZHggLyB3b3JrZ3JvdXBTaXplO1xuICAgIGxldCBiYXRjaCA9IG5vcm0gLyB1bmlmb3Jtcy54X3NoYXBlWzFdO1xuICAgIGxldCBjaGFubmVsID0gbm9ybSAlIHVuaWZvcm1zLnhfc2hhcGVbMV07XG4gICAgbGV0IGxvY2FsSW5kZXggPSBsb2NhbF9pZC54O1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB3b3JrZ3JvdXAgbWVtb3J5XG4gICAgdmFyIGluaXRpYWwgPSAke2YzMlR5cGV9KDApO1xuICAgIGZvciAodmFyIGggPSBsb2NhbEluZGV4OyBoIDwgdW5pZm9ybXMubm9ybVBhY2tlZFNpemU7IGggKz0gd29ya2dyb3VwU2l6ZSkge1xuICAgICAgaW5pdGlhbCA9IGluaXRpYWwgKyAke2YzMlR5cGV9KCR7eC5nZXQoJ2JhdGNoJywgJ2NoYW5uZWwnLCAnaCcpfSk7XG4gICAgfVxuICAgIHdvcmtncm91cFNoYXJlZFtsb2NhbEluZGV4XSA9IGluaXRpYWw7XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBtZWFuIG9mIGN1cnJlbnQgY2hhbm5lbCBkYXRhLlxuICAgIGZvciAodmFyIGN1cnJTaXplID0gd29ya2dyb3VwU2l6ZSA+PiAxOyAgY3VyclNpemUgPiAwOyBjdXJyU2l6ZSA9IGN1cnJTaXplID4+IDEpIHtcbiAgICAgIGlmIChsb2NhbEluZGV4IDwgY3VyclNpemUpIHtcbiAgICAgICAgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdID0gd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdICsgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXggKyBjdXJyU2l6ZV07XG4gICAgICB9XG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgfVxuICAgIGlmIChsb2NhbEluZGV4ID09IDApIHtcbiAgICAgIG1lYW5TaGFyZWQgPSAke3N1bVZlY3Rvcignd29ya2dyb3VwU2hhcmVkWzBdJywgY29tcG9uZW50cyl9IC8gZjMyKHVuaWZvcm1zLm5vcm1TaXplKTtcbiAgICB9XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgLy8gcmVpbml0aWFsaXplIHdvcmtncm91cCBtZW1vcnkuXG4gICAgaW5pdGlhbCA9ICR7ZjMyVHlwZX0oMCk7XG4gICAgZm9yICh2YXIgaCA9IGxvY2FsSW5kZXg7IGggPCB1bmlmb3Jtcy5ub3JtUGFja2VkU2l6ZTsgaCArPSB3b3JrZ3JvdXBTaXplKSB7XG4gICAgICBsZXQgZGV2aWF0aW9uID0gICR7ZjMyVHlwZX0oJHt4LmdldCgnYmF0Y2gnLCAnY2hhbm5lbCcsICdoJyl9KSAtICR7ZjMyVHlwZX0obWVhblNoYXJlZCk7XG4gICAgICBpbml0aWFsID0gaW5pdGlhbCArIGRldmlhdGlvbiAqIGRldmlhdGlvbjtcbiAgICB9XG4gICAgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdID0gaW5pdGlhbDtcbiAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIHN1bSBvZiBzcXVhcmUgb2YgZGV2aWF0aW9uIG9mIGN1cnJlbnQgY2hhbm5lbCBkYXRhLlxuICAgIGZvciAodmFyIGN1cnJTaXplID0gd29ya2dyb3VwU2l6ZSA+PiAxOyAgY3VyclNpemUgPiAwOyBjdXJyU2l6ZSA9IGN1cnJTaXplID4+IDEpIHtcbiAgICAgIGlmIChsb2NhbEluZGV4IDwgY3VyclNpemUpIHtcbiAgICAgICAgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdID0gd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdICsgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXggKyBjdXJyU2l6ZV07XG4gICAgICB9XG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgfVxuICAgIGlmIChsb2NhbEluZGV4ID09IDApIHtcbiAgICAgIHNxdWFyZWROb3JtU2hhcmVkID0gJHtzdW1WZWN0b3IoJ3dvcmtncm91cFNoYXJlZFswXScsIGNvbXBvbmVudHMpfTtcbiAgICB9XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgbGV0IGludlN0ZERldiA9IGludmVyc2VTcXJ0KHNxdWFyZWROb3JtU2hhcmVkIC8gZjMyKHVuaWZvcm1zLm5vcm1TaXplKSArIGYzMigke2F0dHJpYnV0ZXMuZXBzaWxvbn0pKTtcbiAgICBsZXQgY2hhbm5lbFNjYWxlID0gaW52U3RkRGV2ICogZjMyKCR7c2NhbGUuZ2V0QnlPZmZzZXQoJ2NoYW5uZWwnKX0pO1xuICAgIGxldCBjaGFubmVsU2hpZnQgPSBmMzIoJHtiaWFzLmdldEJ5T2Zmc2V0KCdjaGFubmVsJyl9KSAtIG1lYW5TaGFyZWQgKiBjaGFubmVsU2NhbGU7XG4gICAgZm9yICh2YXIgaCA9IGxvY2FsSW5kZXg7IGggPCB1bmlmb3Jtcy5ub3JtUGFja2VkU2l6ZTsgaCArPSB3b3JrZ3JvdXBTaXplKSB7XG4gICAgICBsZXQgdmFsdWUgPSAke3guZ2V0KCdiYXRjaCcsICdjaGFubmVsJywgJ2gnKX0gKiAke2RhdGFUeXBlfSgke2YzMlR5cGV9KGNoYW5uZWxTY2FsZSkpICsgJHtkYXRhVHlwZX0oJHtcbiAgICAgICAgICAgIGYzMlR5cGV9KGNoYW5uZWxTaGlmdCkpO1xuICAgICAgJHtvdXRwdXQuc2V0KCdiYXRjaCcsICdjaGFubmVsJywgJ2gnLCAndmFsdWUnKX07XG4gICAgfVxuICB9YDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi57bmFtZTogJ0luc3RhbmNlTm9ybWFsaXphdGlvbid9LFxuICAgICAgICAvLyBUT0RPOiB1c2UgZXBzaWxvbiBhcyB1bmlmb3JtLiBDdXJyZW50bHkgZXBzaWxvbiBhcyB1bmlmb3JtIGZhaWxzIHRlc3RfaW5zdGFuY2Vub3JtX2Vwc2lsb24uXG4gICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7YXR0cmlidXRlcy5lcHNpbG9ufTske2NvbXBvbmVudHN9YCwgaW5wdXREZXBlbmRlbmNpZXN9LFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgIHtkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogbm9ybUNvdW50fSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH07XG4gICAgfTtcblxuY29uc3QgY29tcHV0ZU1lYW4gPVxuICAgIChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgaW5wdXQ6IFRlbnNvclZpZXcsIHNjYWxlOiBUZW5zb3JWaWV3LCBiaWFzOiBUZW5zb3JWaWV3LCBuOiBudW1iZXIsIGg6IG51bWJlciwgYzogbnVtYmVyLFxuICAgICBlcHNpbG9uOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKGMpO1xuICAgICAgY29uc3QgV0cgPSA2NDtcbiAgICAgIC8vIHdlIHdpbGwgc3RvcmUgY2hhbm5lbCBzY2FsZSBhbmQgY2hhbm5lbCBzaGlmdCBpbiBbMiwgY29tcG9uZW50c10gbWF0cml4XG4gICAgICAvLyBvciBpbiB2ZWMyIHdoZW4gY29tcG9uZW50cyA9PSAxXG4gICAgICBjb25zdCBvdXRwdXRUeXBlID0gY29tcG9uZW50cyA9PT0gMSA/ICd2ZWMyZicgOiBgbWF0Mngke2NvbXBvbmVudHN9ZmA7XG4gICAgICBjb25zdCBzdW1DYXN0VHlwZSA9IGNvbXBvbmVudHMgPT09IDEgPyAnZjMyJyA6IGB2ZWMke2NvbXBvbmVudHN9ZmA7XG4gICAgICBjb25zdCBzZXRPdXRwdXRWYWx1ZSA9ICh2YXIxOiBzdHJpbmcsIHZhcjI6IHN0cmluZykgPT4gYCR7b3V0cHV0VHlwZX0oJHt2YXIxfSwgJHt2YXIyfSlgO1xuICAgICAgY29uc3QgdW5pdHNPZldvcmsgPSBuICogYyAvIGNvbXBvbmVudHM7XG4gICAgICBjb25zdCB3Z1NpemUgPSBNYXRoLmNlaWwoaCAvIFdHKTtcblxuICAgICAgY29uc3QgbWVhbklucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWyd0eXBlJ107XG4gICAgICBjb25zdCBtZWFuUHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiB3Z1NpemV9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBofSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogTWF0aC5mbG9vcihjIC8gY29tcG9uZW50cyl9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBNYXRoLmZsb29yKGggKiBjIC8gY29tcG9uZW50cyl9XG4gICAgICBdO1xuXG4gICAgICBjb25zdCBnZXRNZWFuU2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0SGVscGVyID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dC5kYXRhVHlwZSwgaW5wdXQuZGltcywgY29tcG9uZW50cyk7XG4gICAgICAgIHJldHVybiBgXG4gICR7c2hhZGVySGVscGVyLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXRIZWxwZXIpfVxuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IG91dHB1dCA6IGFycmF5PCR7b3V0cHV0VHlwZX0+O1xuICBzdHJ1Y3QgVW5pZm9ybXMge3dnX3NpemU6dTMyLCBIOnUzMiwgQzp1MzIsIGltYWdlX3NpemU6dTMyfTtcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDIpIHZhcjx1bmlmb3JtPiB1bmlmb3JtczogVW5pZm9ybXM7XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFdHKX1cbiAgICBsZXQgY3VycmVudEltYWdlTnVtYmVyID0gZ2xvYmFsX2lkeCAvICR7V0d9IC8gdW5pZm9ybXMuQztcbiAgICBsZXQgY3VycmVudENoYW5uZWxOdW1iZXIgPSAoZ2xvYmFsX2lkeCAvICR7V0d9KSAlIHVuaWZvcm1zLkM7XG4gICAgbGV0IHdnT2Zmc2V0ID0gbG9jYWxfaWQueCAqIHVuaWZvcm1zLndnX3NpemU7XG4gICAgaWYgKHdnT2Zmc2V0ID49IHVuaWZvcm1zLkgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgd2dNYXggPSBtaW4od2dPZmZzZXQgKyB1bmlmb3Jtcy53Z19zaXplLCB1bmlmb3Jtcy5IKTtcblxuICAgIGxldCBvZmZzZXQgPSBjdXJyZW50SW1hZ2VOdW1iZXIgKiB1bmlmb3Jtcy5pbWFnZV9zaXplICsgY3VycmVudENoYW5uZWxOdW1iZXI7XG4gICAgdmFyIHN1bSA9ICR7ZmlsbFZlY3RvcignZjMyJywgY29tcG9uZW50cyl9O1xuICAgIHZhciBzcXVhcmVkU3VtID0gJHtmaWxsVmVjdG9yKCdmMzInLCBjb21wb25lbnRzKX07XG4gICAgZm9yICh2YXIgaTogdTMyID0gd2dPZmZzZXQ7IGkgPCB3Z01heDsgaSsrKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9ICR7c3VtQ2FzdFR5cGV9KGlucHV0W29mZnNldCArIGkgKiB1bmlmb3Jtcy5DXSk7XG4gICAgICAgIHN1bSArPSB2YWx1ZTtcbiAgICAgICAgc3F1YXJlZFN1bSArPSB2YWx1ZSAqIHZhbHVlO1xuICAgIH1cbiAgICBvdXRwdXRbZ2xvYmFsX2lkeF0gPSAke3NldE91dHB1dFZhbHVlKCdzdW0nLCAnc3F1YXJlZFN1bScpfTtcbiAgfWA7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtZWFuVmFsdWVzID0gY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdJbnN0YW5jZU5vcm1Db21wdXRlTWVhbicsXG4gICAgICAgICAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke2NvbXBvbmVudHN9YCwgaW5wdXREZXBlbmRlbmNpZXM6IG1lYW5JbnB1dERlcGVuZGVuY2llc30sXG4gICAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAge2RpbXM6IFtuLCBjLCBXRywgMl0sIGRhdGFUeXBlOiBEYXRhVHlwZS5mbG9hdH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBuICogYyAvIGNvbXBvbmVudHN9LFxuICAgICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IG1lYW5Qcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZ2V0U2hhZGVyU291cmNlOiBnZXRNZWFuU2hhZGVyU291cmNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge2lucHV0czogW2lucHV0XSwgb3V0cHV0czogWy0xXX0pWzBdO1xuXG4gICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPSBbXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHVuaXRzT2ZXb3JrfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogaH0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IE1hdGguZmxvb3IoYyAvIGNvbXBvbmVudHMpfSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogTWF0aC5mbG9vcihXRyAqIGMgLyBjb21wb25lbnRzKX1cbiAgICAgIF07XG4gICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llczogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXSA9IFsndHlwZScsICd0eXBlJywgJ3R5cGUnXTtcbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCBzY2FsZUhlbHBlciA9IGlucHV0VmFyaWFibGUoJ3NjYWxlJywgc2NhbGUuZGF0YVR5cGUsIHNjYWxlLmRpbXMsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBiaWFzSGVscGVyID0gaW5wdXRWYXJpYWJsZSgnYmlhcycsIGJpYXMuZGF0YVR5cGUsIGJpYXMuZGltcywgY29tcG9uZW50cyk7XG4gICAgICAgIHJldHVybiBgXG4gIEBncm91cCgwKSBAYmluZGluZygwKSB2YXI8c3RvcmFnZSwgcmVhZD4gaW5wdXQgOiBhcnJheTwke291dHB1dFR5cGV9PjtcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhcjxzdG9yYWdlLCByZWFkPiBzY2FsZSA6IGFycmF5PCR7c2NhbGVIZWxwZXIudHlwZS5zdG9yYWdlfT47XG4gIEBncm91cCgwKSBAYmluZGluZygyKSB2YXI8c3RvcmFnZSwgcmVhZD4gYmlhcyA6IGFycmF5PCR7Ymlhc0hlbHBlci50eXBlLnN0b3JhZ2V9PjtcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDMpIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiBvdXRwdXQgOiBhcnJheTwke291dHB1dFR5cGV9PjtcbiAgc3RydWN0IFVuaWZvcm1zIHt1bml0c19vZl93b3JrIDogdTMyLCBIOiB1MzIsIEMgOiB1MzIsIGltYWdlX3NpemUgOiB1MzJ9O1xuICBAZ3JvdXAoMCkgQGJpbmRpbmcoNCkgdmFyPHVuaWZvcm0+IHVuaWZvcm1zOiBVbmlmb3JtcztcblxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy51bml0c19vZl93b3JrJyl9XG4gICAgbGV0IGN1cnJlbnRJbWFnZU51bWJlciA9IGdsb2JhbF9pZHggLyB1bmlmb3Jtcy5DO1xuICAgIGxldCBjdXJyZW50Q2hhbm5lbE51bWJlciA9IGdsb2JhbF9pZHggJSB1bmlmb3Jtcy5DO1xuXG4gICAgbGV0IG9mZnNldCA9IGN1cnJlbnRJbWFnZU51bWJlciAqIHVuaWZvcm1zLmltYWdlX3NpemU7XG4gICAgdmFyIHN1bSA9ICR7ZmlsbFZlY3RvcignZjMyJywgY29tcG9uZW50cyl9O1xuICAgIHZhciBzcXVhcmVkU3VtID0gJHtmaWxsVmVjdG9yKCdmMzInLCBjb21wb25lbnRzKX07XG4gICAgZm9yICh2YXIgaTogdTMyID0gMDsgaSA8IG1pbigke1dHfSwgdW5pZm9ybXMuSCk7IGkrKykge1xuICAgICAgICBsZXQgdmFsdWUgPSBpbnB1dFtvZmZzZXQgKyBpICsgY3VycmVudENoYW5uZWxOdW1iZXIgKiAke1dHfV07XG4gICAgICAgIHN1bSArPSB2YWx1ZVswXTtcbiAgICAgICAgc3F1YXJlZFN1bSArPSB2YWx1ZVsxXTtcbiAgICB9XG4gICAgc3VtID0gc3VtIC8gZjMyKHVuaWZvcm1zLkgpO1xuICAgIHNxdWFyZWRTdW0gPSBzcXVhcmVkU3VtIC8gZjMyKHVuaWZvcm1zLkgpO1xuICAgIGxldCBpbnZTdGREZXYgPSBpbnZlcnNlU3FydChzcXVhcmVkU3VtIC0gc3VtICogc3VtICsgZjMyKCR7ZXBzaWxvbn0pKTtcbiAgICBsZXQgY2hhbm5lbFNjYWxlID0gaW52U3RkRGV2ICogJHtzdW1DYXN0VHlwZX0oc2NhbGVbY3VycmVudENoYW5uZWxOdW1iZXJdKTtcbiAgICBsZXQgY2hhbm5lbFNoaWZ0ID0gJHtzdW1DYXN0VHlwZX0oYmlhc1tjdXJyZW50Q2hhbm5lbE51bWJlcl0pIC0gc3VtICogY2hhbm5lbFNjYWxlO1xuXG4gICAgb3V0cHV0W2dsb2JhbF9pZHhdID0gJHtzZXRPdXRwdXRWYWx1ZSgnY2hhbm5lbFNjYWxlJywgJ2NoYW5uZWxTaGlmdCcpfTtcbiAgfWA7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnSW5zdGFuY2VOb3JtQ29tcHV0ZUNoYW5uZWxTY2FsZVNoaWZ0JyxcbiAgICAgICAgICAgIC8vIFRPRE86IHVzZSBlcHNpbG9uIGFzIHVuaWZvcm0uIEN1cnJlbnRseSBlcHNpbG9uIGFzIHVuaWZvcm0gZmFpbHMgdGVzdF9pbnN0YW5jZW5vcm1fZXBzaWxvbi5cbiAgICAgICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7Y29tcG9uZW50c307JHtlcHNpbG9ufWAsIGlucHV0RGVwZW5kZW5jaWVzfSxcbiAgICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgICAgICB7ZGltczogW24sIGMsIDJdLCBkYXRhVHlwZTogRGF0YVR5cGUuZmxvYXR9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKHVuaXRzT2ZXb3JrIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtpbnB1dHM6IFttZWFuVmFsdWVzLCBzY2FsZSwgYmlhc10sIG91dHB1dHM6IFstMV19KVswXTtcbiAgICB9O1xuXG5jb25zdCBjcmVhdGVJbnN0YW5jZU5vcm1OSFdDUHJvZ3JhbUluZm8gPVxuICAgIChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEluc3RhbmNlTm9ybUF0dHJpYnV0ZXMpID0+IHtcbiAgICAgIGNvbnN0IHhTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSB4U2hhcGU7XG4gICAgICBjb25zdCBOID0geFNoYXBlWzBdO1xuICAgICAgY29uc3QgQyA9IHhTaGFwZVt4U2hhcGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBIID0gU2hhcGVVdGlsLnNpemVGcm9tRGltZW5zaW9uKHhTaGFwZSwgMSkgLyBDO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMoQyk7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gY29tcG9uZW50cztcbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9XG4gICAgICAgICAgW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IEh9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBNYXRoLmZsb29yKEMgLyBjb21wb25lbnRzKX1dO1xuICAgICAgY29uc3QgaW5wdXREZXBlbmRlbmNpZXM6IFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5W10gPSBbJ3R5cGUnLCAndHlwZSddO1xuICAgICAgLy8gZmlyc3QgY29tcHV0ZSBtZWFuXG4gICAgICBjb25zdCBjaGFubmVsU2NhbGVTaGlmdCA9IGNvbXB1dGVNZWFuKGNvbnRleHQsIGlucHV0c1swXSwgaW5wdXRzWzFdLCBpbnB1dHNbMl0sIE4sIEgsIEMsIGF0dHJpYnV0ZXMuZXBzaWxvbik7XG4gICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgY29uc3Qgc2NhbGVUeXBlID0gY29tcG9uZW50cyA9PT0gMSA/ICd2ZWMyZicgOiBgbWF0Mngke2NvbXBvbmVudHN9ZmA7XG4gICAgICAgIGNvbnN0IHNjYWxlQ2FzdFR5cGUgPSBjb21wb25lbnRzID09PSAxID8gZGF0YVR5cGUgOiBgdmVjJHtjb21wb25lbnRzfTwke2RhdGFUeXBlfT5gO1xuXG4gICAgICAgIGNvbnN0IGlucHV0SGVscGVyID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0SGVscGVyID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUsIGNvbXBvbmVudHMpO1xuXG4gICAgICAgIHJldHVybiBgXG4gIEBncm91cCgwKSBAYmluZGluZygwKSB2YXI8c3RvcmFnZSwgcmVhZD4gaW5wdXQgOiBhcnJheTwke2lucHV0SGVscGVyLnR5cGUuc3RvcmFnZX0+O1xuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyPHN0b3JhZ2UsIHJlYWQ+IHNjYWxlSW5wdXQgOiBhcnJheTwke3NjYWxlVHlwZX0+O1xuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMikgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IG91dHB1dCA6IGFycmF5PCR7b3V0cHV0SGVscGVyLnR5cGUuc3RvcmFnZX0+O1xuICBzdHJ1Y3QgVW5pZm9ybXMge0g6IHUzMiwgQyA6IHUzMn07XG4gIEBncm91cCgwKSBAYmluZGluZygzKSB2YXI8dW5pZm9ybT4gdW5pZm9ybXM6IFVuaWZvcm1zO1xuXG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgIGxldCBjdXJyZW50SW1hZ2VOdW1iZXIgPSBnbG9iYWxfaWR4IC8gKHVuaWZvcm1zLkMgKiB1bmlmb3Jtcy5IKTtcbiAgICBsZXQgY3VycmVudENoYW5uZWxOdW1iZXIgPSBnbG9iYWxfaWR4ICUgdW5pZm9ybXMuQztcblxuICAgIGxldCBzY2FsZU9mZnNldCA9IGN1cnJlbnRJbWFnZU51bWJlciAqIHVuaWZvcm1zLkMgKyBjdXJyZW50Q2hhbm5lbE51bWJlcjtcbiAgICBsZXQgc2NhbGUgPSBzY2FsZUlucHV0W3NjYWxlT2Zmc2V0XTtcbiAgICBvdXRwdXRbZ2xvYmFsX2lkeF0gPSBmbWEoaW5wdXRbZ2xvYmFsX2lkeF0sICR7c2NhbGVDYXN0VHlwZX0oc2NhbGVbMF0pLCAke3NjYWxlQ2FzdFR5cGV9KHNjYWxlWzFdKSk7XG4gIH1gO1xuICAgICAgfTtcbiAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnSW5zdGFuY2VOb3JtYWxpemF0aW9uTkhXQycsXG4gICAgICAgICAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke2NvbXBvbmVudHN9YCwgaW5wdXREZXBlbmRlbmNpZXN9LFxuICAgICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge2lucHV0czogW2lucHV0c1swXSwgY2hhbm5lbFNjYWxlU2hpZnRdfSk7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGluc3RhbmNlTm9ybSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogSW5zdGFuY2VOb3JtQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBpZiAoYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJykge1xuICAgIGNyZWF0ZUluc3RhbmNlTm9ybU5IV0NQcm9ncmFtSW5mbyhjb250ZXh0LCBjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUluc3RhbmNlTm9ybVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKSk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5LCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Nhc3RUb0YzMiwgZmlsbFZlY3RvciwgZ2V0TWF4Q29tcG9uZW50cywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgc3VtVmVjdG9yLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlLH0gZnJvbSAnLi9jb21tb24nO1xuXG5pbnRlcmZhY2UgTGF5ZXJOb3JtQXR0cmlidXRlcyB7XG4gIHNpbXBsaWZpZWQ6IGJvb2xlYW47XG4gIGF4aXM6IG51bWJlcjtcbiAgZXBzaWxvbjogbnVtYmVyO1xufVxuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFcnJvcignbGF5ZXJOb3JtIHJlcXVpcmVzIGF0IGxlYXN0IDIgaW5wdXRzLicpO1xuICB9XG59O1xuXG5jb25zdCBjcmVhdGVMYXllck5vcm1Qcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBMYXllck5vcm1BdHRyaWJ1dGVzLCBvdXRwdXRDb3VudDogbnVtYmVyKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3Qgc2ltcGxpZmllZCA9IGF0dHJpYnV0ZXMuc2ltcGxpZmllZDtcblxuICAgICAgY29uc3QgeFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG4gICAgICBjb25zdCBzY2FsZSA9IGlucHV0c1sxXTtcbiAgICAgIGNvbnN0IGJpYXMgPSAhc2ltcGxpZmllZCAmJiBpbnB1dHNbMl07XG5cbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0geFNoYXBlO1xuICAgICAgY29uc3QgYXhpcyA9IFNoYXBlVXRpbC5ub3JtYWxpemVBeGlzKGF0dHJpYnV0ZXMuYXhpcywgeFNoYXBlLmxlbmd0aCk7XG4gICAgICBjb25zdCBub3JtQ291bnQgPSBTaGFwZVV0aWwuc2l6ZVRvRGltZW5zaW9uKHhTaGFwZSwgYXhpcyk7XG4gICAgICBjb25zdCBub3JtU2l6ZSA9IFNoYXBlVXRpbC5zaXplRnJvbURpbWVuc2lvbih4U2hhcGUsIGF4aXMpO1xuXG4gICAgICBjb25zdCBzY2FsZVNpemUgPSBTaGFwZVV0aWwuc2l6ZShzY2FsZS5kaW1zKTtcbiAgICAgIGNvbnN0IGJpYXNTaXplID0gYmlhcyA/IFNoYXBlVXRpbC5zaXplKGJpYXMuZGltcykgOiAwO1xuICAgICAgaWYgKHNjYWxlU2l6ZSAhPT0gbm9ybVNpemUgfHwgKGJpYXMgJiYgYmlhc1NpemUgIT09IG5vcm1TaXplKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNpemUgb2YgWC5zaGFwZSgpW2F4aXM6XSA9PSAke25vcm1TaXplfS5cbiAgICAgICBTaXplIG9mIHNjYWxlIGFuZCBiaWFzIChpZiBwcm92aWRlZCkgbXVzdCBtYXRjaCB0aGlzLlxuICAgICAgIEdvdCBzY2FsZSBzaXplIG9mICR7c2NhbGVTaXplfSBhbmQgYmlhcyBzaXplIG9mICR7Ymlhc1NpemV9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lYW5JbnZTdGREZXZEaW06IG51bWJlcltdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHhTaGFwZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoaSA8IGF4aXMpIHtcbiAgICAgICAgICBtZWFuSW52U3RkRGV2RGltLnB1c2goeFNoYXBlW2ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZWFuSW52U3RkRGV2RGltLnB1c2goMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKG5vcm1TaXplKTtcbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWyd0eXBlJywgJ3R5cGUnXTtcbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogbm9ybUNvdW50fSwge3R5cGU6IERhdGFUeXBlLmZsb2F0LCBkYXRhOiBub3JtU2l6ZX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IE1hdGguZmxvb3Iobm9ybVNpemUgLyBjb21wb25lbnRzKX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5lcHNpbG9ufVxuICAgICAgXTtcbiAgICAgIGlmIChiaWFzKSB7XG4gICAgICAgIGlucHV0RGVwZW5kZW5jaWVzLnB1c2goJ3R5cGUnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhc01lYW5EYXRhT3V0cHV0ID0gb3V0cHV0Q291bnQgPiAxO1xuICAgICAgY29uc3QgaGFzSW52U3RkT3V0cHV0ID0gb3V0cHV0Q291bnQgPiAyO1xuXG4gICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gW1xuICAgICAgICAgIGlucHV0VmFyaWFibGUoJ3gnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLCBjb21wb25lbnRzKSxcbiAgICAgICAgICBpbnB1dFZhcmlhYmxlKCdzY2FsZScsIHNjYWxlLmRhdGFUeXBlLCBzY2FsZS5kaW1zLCBjb21wb25lbnRzKSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGJpYXMpIHtcbiAgICAgICAgICB2YXJpYWJsZXMucHVzaChpbnB1dFZhcmlhYmxlKCdiaWFzJywgYmlhcy5kYXRhVHlwZSwgYmlhcy5kaW1zLCBjb21wb25lbnRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyaWFibGVzLnB1c2gob3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUsIGNvbXBvbmVudHMpKTtcbiAgICAgICAgaWYgKGhhc01lYW5EYXRhT3V0cHV0KSB7XG4gICAgICAgICAgdmFyaWFibGVzLnB1c2gob3V0cHV0VmFyaWFibGUoJ21lYW5fZGF0YV9vdXRwdXQnLCBEYXRhVHlwZS5mbG9hdCwgbWVhbkludlN0ZERldkRpbSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNJbnZTdGRPdXRwdXQpIHtcbiAgICAgICAgICB2YXJpYWJsZXMucHVzaChvdXRwdXRWYXJpYWJsZSgnaW52X3N0ZF9vdXRwdXQnLCBEYXRhVHlwZS5mbG9hdCwgbWVhbkludlN0ZERldkRpbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pZm9ybXM6IFVuaWZvcm1zQXJyYXlUeXBlID0gW1xuICAgICAgICAgIHtuYW1lOiAnbm9ybV9jb3VudCcsIHR5cGU6ICd1MzInfSwge25hbWU6ICdub3JtX3NpemUnLCB0eXBlOiAnZjMyJ30sXG4gICAgICAgICAge25hbWU6ICdub3JtX3NpemVfdmVjdG9yaXplZCcsIHR5cGU6ICd1MzInfSwge25hbWU6ICdlcHNpbG9uJywgdHlwZTogJ2YzMid9XG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiBgXG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoLi4udmFyaWFibGVzKX1cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMubm9ybV9jb3VudCcpfVxuICAgIGxldCBvZmZzZXQgPSBnbG9iYWxfaWR4ICogdW5pZm9ybXMubm9ybV9zaXplX3ZlY3Rvcml6ZWQ7XG4gICAgdmFyIG1lYW5fdmVjdG9yID0gJHtmaWxsVmVjdG9yKCdmMzInLCBjb21wb25lbnRzKX07XG4gICAgdmFyIG1lYW5fc3F1YXJlX3ZlY3RvciA9ICR7ZmlsbFZlY3RvcignZjMyJywgY29tcG9uZW50cyl9O1xuXG4gICAgZm9yICh2YXIgaDogdTMyID0gMHU7IGggPCB1bmlmb3Jtcy5ub3JtX3NpemVfdmVjdG9yaXplZDsgaCsrKSB7XG4gICAgICBsZXQgdmFsdWUgPSAke2Nhc3RUb0YzMihkYXRhVHlwZSwgY29tcG9uZW50cywgJ3hbaCArIG9mZnNldF0nKX07XG4gICAgICBtZWFuX3ZlY3RvciArPSB2YWx1ZTtcbiAgICAgIG1lYW5fc3F1YXJlX3ZlY3RvciArPSB2YWx1ZSAqIHZhbHVlO1xuICAgIH1cbiAgICBsZXQgbWVhbiA9ICR7c3VtVmVjdG9yKCdtZWFuX3ZlY3RvcicsIGNvbXBvbmVudHMpfSAvIHVuaWZvcm1zLm5vcm1fc2l6ZTtcbiAgICBsZXQgaW52X3N0ZF9kZXYgPSBpbnZlcnNlU3FydCgke3N1bVZlY3RvcignbWVhbl9zcXVhcmVfdmVjdG9yJywgY29tcG9uZW50cyl9IC8gdW5pZm9ybXMubm9ybV9zaXplICR7XG4gICAgICAgICAgICBzaW1wbGlmaWVkID8gJycgOiAnLSBtZWFuICogbWVhbid9ICsgdW5pZm9ybXMuZXBzaWxvbik7XG5cbiAgICBmb3IgKHZhciBqOiB1MzIgPSAwOyBqIDwgdW5pZm9ybXMubm9ybV9zaXplX3ZlY3Rvcml6ZWQ7IGorKykge1xuICAgICAgbGV0IGYzMmlucHV0ID0gJHtjYXN0VG9GMzIoZGF0YVR5cGUsIGNvbXBvbmVudHMsICd4W2ogKyBvZmZzZXRdJyl9O1xuICAgICAgbGV0IGYzMnNjYWxlID0gJHtjYXN0VG9GMzIoZGF0YVR5cGUsIGNvbXBvbmVudHMsICdzY2FsZVtqXScpfTtcbiAgICAgIG91dHB1dFtqICsgb2Zmc2V0XSA9ICR7dmFyaWFibGVzWzBdLnR5cGUudmFsdWV9KChmMzJpbnB1dCAke3NpbXBsaWZpZWQgPyAnJyA6ICctIG1lYW4nfSkgKiBpbnZfc3RkX2RldiAqIGYzMnNjYWxlXG4gICAgICAgICR7YmlhcyA/IGArICR7Y2FzdFRvRjMyKGRhdGFUeXBlLCBjb21wb25lbnRzLCAnYmlhc1tqXScpfWAgOiAnJ31cbiAgICAgICk7XG4gICAgfVxuXG4gICAgJHtoYXNNZWFuRGF0YU91dHB1dCA/ICdtZWFuX2RhdGFfb3V0cHV0W2dsb2JhbF9pZHhdID0gbWVhbicgOiAnJ307XG4gICAgJHtoYXNJbnZTdGRPdXRwdXQgPyAnaW52X3N0ZF9vdXRwdXRbZ2xvYmFsX2lkeF0gPSBpbnZfc3RkX2RldicgOiAnJ307XG4gIH1gO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlfV07XG4gICAgICBpZiAoaGFzTWVhbkRhdGFPdXRwdXQpIHtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtkaW1zOiBtZWFuSW52U3RkRGV2RGltLCBkYXRhVHlwZTogRGF0YVR5cGUuZmxvYXR9KTtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNJbnZTdGRPdXRwdXQpIHtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtkaW1zOiBtZWFuSW52U3RkRGV2RGltLCBkYXRhVHlwZTogRGF0YVR5cGUuZmxvYXR9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0xheWVyTm9ybWFsaXphdGlvbicsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7Y29tcG9uZW50c307JHtvdXRwdXRDb3VudH07JHtzaW1wbGlmaWVkfWAsIGlucHV0RGVwZW5kZW5jaWVzfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT5cbiAgICAgICAgICAgICh7b3V0cHV0cywgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChub3JtQ291bnQgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LCBwcm9ncmFtVW5pZm9ybXN9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgfTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgbGF5ZXJOb3JtID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBMYXllck5vcm1BdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUxheWVyTm9ybVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzLCBjb250ZXh0Lm91dHB1dENvdW50KSk7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlLCBnZXRUZW5zb3JFbGVtZW50U2l6ZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleSwgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGdldE1heENvbXBvbmVudHMsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZSwgVW5pZm9ybXNBcnJheVR5cGV9IGZyb20gJy4vY29tbW9uJztcblxuLy8gIFRPRE8gc3VwcG9ydCBxdWFudGl6YXRpb24gYml0cyBub3QgZXF1YWwgdG8gNFxuZXhwb3J0IGludGVyZmFjZSBNYXRNdWxOQml0c0F0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICBrOiBudW1iZXI7XG4gIG46IG51bWJlcjtcbiAgYWNjdXJhY3lMZXZlbDogbnVtYmVyO1xuICBiaXRzOiBudW1iZXI7XG4gIGJsb2NrU2l6ZTogbnVtYmVyO1xufVxuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogTWF0TXVsTkJpdHNBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGlmIChpbnB1dHMubGVuZ3RoIDwgMyB8fCBpbnB1dHMubGVuZ3RoID4gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWF0TXVsTkJpdHMgcmVxdWlyZXMgMyBvciA0IGlucHV0cycpO1xuICB9XG4gIGNvbnN0IGEgPSBpbnB1dHNbMF07XG4gIGNvbnN0IGFSYW5rID0gYS5kaW1zLmxlbmd0aDtcbiAgaWYgKGEuZGltc1thUmFuayAtIDFdICE9PSBhdHRyaWJ1dGVzLmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBsYXN0IGRpbSBvZiBpbnB1dCBzaGFwZSBkb2VzIG5vdCBtYXRjaCB0aGUgayB2YWx1ZScpO1xuICB9XG4gIGNvbnN0IG5CbG9ja3NQZXJDb2wgPSBNYXRoLmZsb29yKChhdHRyaWJ1dGVzLmsgKyBhdHRyaWJ1dGVzLmJsb2NrU2l6ZSAtIDEpIC8gYXR0cmlidXRlcy5ibG9ja1NpemUpO1xuICBjb25zdCBibG9iU2l6ZSA9IGF0dHJpYnV0ZXMuYmxvY2tTaXplIC8gOCAqIGF0dHJpYnV0ZXMuYml0cztcbiAgY29uc3QgYiA9IGlucHV0c1sxXTtcbiAgaWYgKCFTaGFwZVV0aWwuYXJlRXF1YWwoYi5kaW1zLCBbYXR0cmlidXRlcy5uLCBuQmxvY2tzUGVyQ29sLCBibG9iU2l6ZV0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc2Vjb25kIGlucHV0cyBtdXN0IGJlIDNEIHRlbnNvciB3aXRoIHNoYXBlIE4gWCBuQmxvY2tzUGVyQ29sIFggYmxvYlNpemUnKTtcbiAgfVxuICBjb25zdCBzY2FsZXMgPSBpbnB1dHNbMl07XG4gIGNvbnN0IHNjYWxlc1NoYXBlID0gc2NhbGVzLmRpbXM7XG4gIGlmIChTaGFwZVV0aWwuc2l6ZShzY2FsZXNTaGFwZSkgIT09IGF0dHJpYnV0ZXMubiAqIG5CbG9ja3NQZXJDb2wpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjYWxlcyBpbnB1dCBzaXplIGVycm9yLicpO1xuICB9XG4gIGlmIChpbnB1dHMubGVuZ3RoID09PSA0KSB7XG4gICAgY29uc3QgemVyb1BvaW50cyA9IGlucHV0c1szXTtcbiAgICBjb25zdCB6ZXJvUG9pbnRzU2hhcGUgPSB6ZXJvUG9pbnRzLmRpbXM7XG4gICAgY29uc3QgZXhwZWN0ZWRaZXJvUG9pbnRzU2l6ZSA9XG4gICAgICAgIGF0dHJpYnV0ZXMuYml0cyA+IDQgPyAoYXR0cmlidXRlcy5uICogbkJsb2Nrc1BlckNvbCkgOiBhdHRyaWJ1dGVzLm4gKiBNYXRoLmZsb29yKChuQmxvY2tzUGVyQ29sICsgMSkgLyAyKTtcbiAgICBpZiAoU2hhcGVVdGlsLnNpemUoemVyb1BvaW50c1NoYXBlKSAhPT0gZXhwZWN0ZWRaZXJvUG9pbnRzU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd6ZXJvUG9pbnRzIGlucHV0IHNpemUgZXJyb3IuJyk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTWF0TXVsTkJpdHNQcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBNYXRNdWxOQml0c0F0dHJpYnV0ZXMsXG4gICAgIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemU6IG51bWJlcik6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IGFSYW5rID0gaW5wdXRTaGFwZS5sZW5ndGg7XG4gICAgICBjb25zdCBuQmxvY2tzUGVyQ29sID0gTWF0aC5mbG9vcigoYXR0cmlidXRlcy5rICsgYXR0cmlidXRlcy5ibG9ja1NpemUgLSAxKSAvIGF0dHJpYnV0ZXMuYmxvY2tTaXplKTtcbiAgICAgIGNvbnN0IGRpbUFPdXRlciA9IGlucHV0U2hhcGVbYVJhbmsgLSAyXTtcbiAgICAgIGNvbnN0IGRpbUlubmVyID0gYXR0cmlidXRlcy5rO1xuICAgICAgY29uc3QgZGltQk91dGVyID0gYXR0cmlidXRlcy5uO1xuICAgICAgY29uc3QgYmF0Y2hEaW1zID0gaW5wdXRTaGFwZS5zbGljZSgwLCBhUmFuayAtIDIpO1xuICAgICAgY29uc3QgYmF0Y2hTaXplID0gU2hhcGVVdGlsLnNpemUoYmF0Y2hEaW1zKTtcbiAgICAgIGNvbnN0IGJsb2JTaXplID0gYXR0cmlidXRlcy5ibG9ja1NpemUgLyA4ICogYXR0cmlidXRlcy5iaXRzO1xuICAgICAgY29uc3QgYmxvYlNpemVJbldvcmRzID0gYmxvYlNpemUgLyA0O1xuICAgICAgY29uc3QgZGF0YVR5cGUgPSBpbnB1dHNbMF0uZGF0YVR5cGU7XG4gICAgICBjb25zdCBvdXRwdXROdW1iZXIgPSBnZXRNYXhDb21wb25lbnRzKGRpbUFPdXRlcik7XG4gICAgICBjb25zdCBhQ29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMoYXR0cmlidXRlcy5rKTtcbiAgICAgIGNvbnN0IGJDb21wb25lbnRzID0gZ2V0TWF4Q29tcG9uZW50cyhibG9iU2l6ZUluV29yZHMpO1xuICAgICAgY29uc3QgZWxlbWVudFNpemUgPSBnZXRUZW5zb3JFbGVtZW50U2l6ZShkYXRhVHlwZSkhO1xuICAgICAgY29uc3Qgd29ya2dyb3VwT3V0cHV0U2l6ZSA9IGRpbUFPdXRlciAqIG5CbG9ja3NQZXJDb2wgKiBlbGVtZW50U2l6ZTtcbiAgICAgIGNvbnN0IG1heE51bWJlck9mQ29tcG9uZW50cyA9IE1hdGguZmxvb3IobWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplIC8gd29ya2dyb3VwT3V0cHV0U2l6ZSk7XG4gICAgICBjb25zdCB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA9IG5CbG9ja3NQZXJDb2wgPD0gbWF4Q29tcHV0ZVdvcmtncm91cFNpemVzWzBdICYmIG1heE51bWJlck9mQ29tcG9uZW50cyA+IDA7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gKCF1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyB8fCBtYXhOdW1iZXJPZkNvbXBvbmVudHMgPj0gNCkgPyBnZXRNYXhDb21wb25lbnRzKGRpbUJPdXRlcikgOlxuICAgICAgICAgICgobWF4TnVtYmVyT2ZDb21wb25lbnRzID49IDIpICYmIGdldE1heENvbXBvbmVudHMoZGltQk91dGVyKSA+PSAyKSAgICAgID8gMiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBiYXRjaERpbXMuY29uY2F0KFtkaW1BT3V0ZXIsIGRpbUJPdXRlcl0pO1xuICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKSAvIGNvbXBvbmVudHMgLyBvdXRwdXROdW1iZXI7XG5cbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IHVzZUJsb2Nrd2lzZU1hdE11bE5CaXRzID9cbiAgICAgICAgICBbXSA6XG4gICAgICAgICAgW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBhdHRyaWJ1dGVzLmJsb2NrU2l6ZX1dO1xuICAgICAgY29uc3QgaW5wdXRTaGFwZVRlbXAgPSBbYmF0Y2hTaXplLCBkaW1BT3V0ZXIsIGRpbUlubmVyIC8gYUNvbXBvbmVudHNdO1xuICAgICAgY29uc3QgYlNoYXBlID0gU2hhcGVVdGlsLmNvbnZlcnRTaGFwZShpbnB1dHNbMV0uZGltcykuc2xpY2UoKTtcbiAgICAgIGJTaGFwZS5zcGxpY2UoLTEsIDEsIGJsb2JTaXplSW5Xb3JkcyAvIGJDb21wb25lbnRzKTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGVUZW1wKSk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhiU2hhcGUpKTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1syXS5kaW1zKSk7XG4gICAgICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhTaGFwZVV0aWwuY29udmVydFNoYXBlKGlucHV0c1szXS5kaW1zKSkpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3V0cHV0U2hhcGVUZW1wID0gW2JhdGNoU2l6ZSwgZGltQU91dGVyLCBkaW1CT3V0ZXIgLyBjb21wb25lbnRzXTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dHB1dFNoYXBlVGVtcCkpO1xuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0UmFuayA9IGlucHV0U2hhcGVUZW1wLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYSA9IGlucHV0VmFyaWFibGUoJ2EnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0UmFuaywgYUNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBiID0gaW5wdXRWYXJpYWJsZSgnYicsIERhdGFUeXBlLnVpbnQzMiwgYlNoYXBlLmxlbmd0aCwgYkNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBzY2FsZXMgPSBpbnB1dFZhcmlhYmxlKCdzY2FsZXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFyaWFibGVzID0gW2EsIGIsIHNjYWxlc107XG4gICAgICAgIGNvbnN0IHplcm9Qb2ludHMgPVxuICAgICAgICAgICAgaW5wdXRzLmxlbmd0aCA9PT0gNCA/IGlucHV0VmFyaWFibGUoJ3plcm9fcG9pbnRzJywgRGF0YVR5cGUudWludDMyLCBpbnB1dHNbM10uZGltcy5sZW5ndGgpIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoemVyb1BvaW50cykge1xuICAgICAgICAgIGlucHV0VmFyaWFibGVzLnB1c2goemVyb1BvaW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3V0cHV0UmFuayA9IG91dHB1dFNoYXBlVGVtcC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFJhbmssIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbe25hbWU6ICdvdXRwdXRfc2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdibG9ja19zaXplJywgdHlwZTogJ3UzMid9XTtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcblxuICAgICAgICBjb25zdCBxRHFEYXRhVHlwZSA9ICgoKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhQ29tcG9uZW50cykge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gYGFycmF5PCR7ZGF0YVR5cGV9LCA4PmA7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIHJldHVybiBgbWF0NHgyPCR7ZGF0YVR5cGV9PmA7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBgbWF0Mng0PCR7ZGF0YVR5cGV9PmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YUNvbXBvbmVudHN9LWNvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcblxuICAgICAgICBjb25zdCBwcm9jZXNzT25lQmxvY2sgPSBgXG4gICAgICAgIGZvciAodmFyIHdvcmQ6IHUzMiA9IDA7IHdvcmQgPCAke2Jsb2JTaXplSW5Xb3Jkc307IHdvcmQgKz0gJHtiQ29tcG9uZW50c30pIHtcbiAgICAgICAgICAke2IuaW5kaWNlc1NldCgnYl9pbmRpY2VzJywgJzInLCAnd29yZCcpfTtcbiAgICAgICAgICBsZXQgYl9kYXRhID0gJHtiLmdldEJ5SW5kaWNlcygnYl9pbmRpY2VzJyl9O1xuICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCAke2JDb21wb25lbnRzfTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYl92YWx1ZTogdTMyID0gJHtiQ29tcG9uZW50cyA9PT0gMSA/ICdiX2RhdGEnIDogJ2JfZGF0YVt3b3JkICsgaV0nfTtcbiAgICAgICAgICAgIGxldCBiX21hc2s6IHUzMiA9IDB4MEYwRjBGMEZ1O1xuICAgICAgICAgICAgbGV0IGJfdmFsdWVfbG93ZXI6IHZlYzQ8dTMyPiA9IHVucGFjazR4VTgoYl92YWx1ZSAmIGJfbWFzayk7XG4gICAgICAgICAgICBsZXQgYl92YWx1ZV91cHBlcjogdmVjNDx1MzI+ID0gdW5wYWNrNHhVOCgoYl92YWx1ZSA+PiA0KSAmIGJfbWFzayk7XG4gICAgICAgICAgICBsZXQgYl9xdWFudGl6ZWRfdmFsdWVzID0gJHtxRHFEYXRhVHlwZX0oJHtcbiAgICAgICAgICAgIEFycmF5LmZyb20oe2xlbmd0aDogNH0sIChfLCBpKSA9PiBgJHtkYXRhVHlwZX0oYl92YWx1ZV9sb3dlclske2l9XSksICR7ZGF0YVR5cGV9KGJfdmFsdWVfdXBwZXJbJHtpfV0pYClcbiAgICAgICAgICAgICAgICAuam9pbignLCAnKX0pO1xuICAgICAgICAgICAgbGV0IGJfZGVxdWFudGl6ZWRfdmFsdWVzID0gJHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChhQ29tcG9uZW50cyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3FEcURhdGFUeXBlfSgke1xuICAgICAgICAgICAgICAgIEFycmF5LmZyb20oe2xlbmd0aDogOH0sIChfLCBpKSA9PiBgKGJfcXVhbnRpemVkX3ZhbHVlc1ske2l9XSAtIHplcm9fcG9pbnQpICogc2NhbGVgKS5qb2luKCcsICcpfSk7YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAoYl9xdWFudGl6ZWRfdmFsdWVzIC0gJHtxRHFEYXRhVHlwZX0oJHtBcnJheSg4KS5maWxsKCd6ZXJvX3BvaW50Jykuam9pbignLCcpfSkpICogc2NhbGU7YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCl9O1xuICAgICAgICAgICAgLy8gTnVtYmVyIG9mIEIgZWxlbWVudHMgcGVyIDMyLWJpdCB3b3JkIGlzIDMyL2JpdHMgPSAzMi80ID0gOFxuICAgICAgICAgICAgZm9yICh2YXIgbTogdTMyID0gMDsgbSA8ICR7dXNlQmxvY2t3aXNlTWF0TXVsTkJpdHMgPyBkaW1BT3V0ZXIgOiBvdXRwdXROdW1iZXJ9dTsgbSsrKSB7XG4gICAgICAgICAgICAgICR7YS5pbmRpY2VzU2V0KCdhX2luZGljZXMnLCBpbnB1dFJhbmsgLSAyLCB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/ICdtJyA6IGByb3cgKiAke291dHB1dE51bWJlcn0gKyBtYCl9O1xuICAgICAgICAgICAgICAke2EuaW5kaWNlc1NldCgnYV9pbmRpY2VzJywgaW5wdXRSYW5rIC0gMSwgJ3dvcmRfb2Zmc2V0Jyl9O1xuICAgICAgICAgICAgICB2YXIgaW5wdXRfb2Zmc2V0ID0gJHthLmluZGljZXNUb09mZnNldCgnYV9pbmRpY2VzJyl9O1xuICAgICAgICAgICAgICB2YXIgYV9kYXRhOiAke3FEcURhdGFUeXBlfTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgajogdTMyID0gMDsgaiA8ICR7OCAvIGFDb21wb25lbnRzfTsgaisrKSB7XG4gICAgICAgICAgICAgICAgYV9kYXRhW2pdID0gJHthLmdldEJ5T2Zmc2V0KCdpbnB1dF9vZmZzZXQnKX07XG4gICAgICAgICAgICAgICAgaW5wdXRfb2Zmc2V0Kys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJHt1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/ICd3b3JrZ3JvdXBfc2hhcmVkW3dvcmtncm91cF9zaGFyZWRfb2Zmc2V0ICsgbV0nIDogJ291dHB1dF92YWx1ZXNbbV0nfSR7XG4gICAgICAgICAgICBjb21wb25lbnRzID4gMSA/ICdbY10nIDogJyd9ICs9ICR7XG4gICAgICAgICAgICBBcnJheVxuICAgICAgICAgICAgICAgIC5mcm9tKFxuICAgICAgICAgICAgICAgICAgICB7bGVuZ3RoOiA4IC8gYUNvbXBvbmVudHN9LFxuICAgICAgICAgICAgICAgICAgICAoXywgaSkgPT4gYCR7XG4gICAgICAgICAgICAgICAgICAgICAgICBhQ29tcG9uZW50cyA9PT0gMSA/IGBhX2RhdGFbJHtpfV0gKiBiX2RlcXVhbnRpemVkX3ZhbHVlc1ske2l9XWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZG90KGFfZGF0YVske2l9XSwgYl9kZXF1YW50aXplZF92YWx1ZXNbJHtpfV0pYH1gKVxuICAgICAgICAgICAgICAgIC5qb2luKCcgKyAnKX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3b3JkX29mZnNldCArPSAkezggLyBhQ29tcG9uZW50c307XG4gICAgICAgICAgfVxuICAgICAgICB9YDtcbiAgICAgICAgY29uc3QgdXBkYXRlWmVyb1BvaW50SW5kZXggPSB6ZXJvUG9pbnRzID8gYFxuICAgICAgICAgIHplcm9fcG9pbnRfb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgaWYgKHplcm9fcG9pbnRfb2Zmc2V0ID09IDMyKSB7XG4gICAgICAgICAgICB6ZXJvX3BvaW50X29mZnNldCA9IDA7XG4gICAgICAgICAgICB6ZXJvX3BvaW50X2luZGV4Kys7XG4gICAgICAgICAgICB6ZXJvX3BvaW50X3dvcmQgPSAke3plcm9Qb2ludHMuZ2V0QnlPZmZzZXQoJ3plcm9fcG9pbnRfaW5kZXgnKX07XG4gICAgICAgICAgfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJztcblxuICAgICAgICByZXR1cm4gdXNlQmxvY2t3aXNlTWF0TXVsTkJpdHMgPyBgXG4gICAgICAgIHZhcjx3b3JrZ3JvdXA+IHdvcmtncm91cF9zaGFyZWQ6IGFycmF5PCR7b3V0cHV0LnR5cGUudmFsdWV9LCAke2RpbUFPdXRlciAqIG5CbG9ja3NQZXJDb2x9PjtcbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZGVjbGFyZVZhcmlhYmxlcyguLi5pbnB1dFZhcmlhYmxlcywgb3V0cHV0KX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFtcbiAgICAgICAgICBuQmxvY2tzUGVyQ29sLCAxLCAxXG4gICAgICAgIF0pfVxuICAgICAgICAgIHZhciBhX2luZGljZXM6ICR7YS50eXBlLmluZGljZXN9O1xuICAgICAgICAgIHZhciBibG9jayA9IGxvY2FsX2lkLng7XG4gICAgICAgICAgdmFyIGNvbCA9IHdvcmtncm91cF9pZC55O1xuICAgICAgICAgIHZhciBiYXRjaCA9IHdvcmtncm91cF9pZC56O1xuICAgICAgICAgICR7YS5pbmRpY2VzU2V0KCdhX2luZGljZXMnLCAnMCcsICdiYXRjaCcpfTtcbiAgICAgICAgICAvLyBUd28gemVybyBwb2ludHMgYXJlIHBhY2tlZCBpbnRvIG9uZSBieXRlIHdoZW4gdW5pZm9ybXMuYml0cyBpcyA0LlxuICAgICAgICAgIGZvciAodmFyIGM6IHUzMiA9IDA7IGMgPCAke2NvbXBvbmVudHN9OyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjb2xfdGltZXNfY29tcG9uZW50c19wbHVzX2MgPSBjb2wgKiAke2NvbXBvbmVudHN9ICsgYztcbiAgICAgICAgICAgICAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm9Qb2ludHMgPyBgXG4gICAgICAgICAgICB2YXIgemVyb19wb2ludF9ieXRlc19wZXJfY29sOiB1MzIgPSAoJHtuQmxvY2tzUGVyQ29sfSArIDEpIC8gMjtcbiAgICAgICAgICAgIHZhciB6ZXJvX3BvaW50X2J5dGVfY291bnQ6IHUzMiA9IGNvbF90aW1lc19jb21wb25lbnRzX3BsdXNfYyAqIHplcm9fcG9pbnRfYnl0ZXNfcGVyX2NvbCArIChibG9jayA+PiAweDF1KTtcbiAgICAgICAgICAgIHZhciB6ZXJvX3BvaW50X3dvcmRfaW5kZXg6IHUzMiA9IHplcm9fcG9pbnRfYnl0ZV9jb3VudCA+PiAweDJ1O1xuICAgICAgICAgICAgdmFyIHplcm9fcG9pbnRfYnl0ZV9vZmZzZXQ6IHUzMiA9IHplcm9fcG9pbnRfYnl0ZV9jb3VudCAmIDB4M3U7XG4gICAgICAgICAgICB2YXIgemVyb19wb2ludF9uaWJibGVfb2Zmc2V0OiB1MzIgPSBibG9jayAmIDB4MXU7XG4gICAgICAgICAgICB2YXIgemVyb19wb2ludF9iaXRzX29mZnNldDogdTMyID0gKHplcm9fcG9pbnRfYnl0ZV9vZmZzZXQgPDwgMykgKyAoemVyb19wb2ludF9uaWJibGVfb2Zmc2V0IDw8IDIpO1xuICAgICAgICAgICAgdmFyIHplcm9fcG9pbnRfd29yZDogdTMyID0gJHt6ZXJvUG9pbnRzLmdldEJ5T2Zmc2V0KCd6ZXJvX3BvaW50X3dvcmRfaW5kZXgnKX0gPj4gemVyb19wb2ludF9iaXRzX29mZnNldDtgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ31cbiAgICAgICAgICAgIHZhciBiX2luZGljZXM6ICR7Yi50eXBlLmluZGljZXN9O1xuICAgICAgICAgICAgJHtiLmluZGljZXNTZXQoJ2JfaW5kaWNlcycsICcwJywgJ2NvbF90aW1lc19jb21wb25lbnRzX3BsdXNfYycpfTtcbiAgICAgICAgICAgIC8vIFRoZSBzY2FsZSBhbmQgemVybyBwb2ludHMgYXJlIGNvbXB1dGVkIHBlciBibG9jay5cbiAgICAgICAgICAgIHZhciBzY2FsZXNfaW5kZXggPSBjb2xfdGltZXNfY29tcG9uZW50c19wbHVzX2MgKiAke25CbG9ja3NQZXJDb2x9ICsgYmxvY2s7XG4gICAgICAgICAgICBsZXQgc2NhbGUgPSAke3NjYWxlcy5nZXRCeU9mZnNldCgnc2NhbGVzX2luZGV4Jyl9O1xuICAgICAgICAgICAgLy8gVGhlIGRlZmF1bHQgemVybyBwb2ludCBpcyA4IGZvciB1bnNpZ25lZCA0LWJpdCBxdWFudGl6YXRpb24uXG4gICAgICAgICAgICBsZXQgemVyb19wb2ludCA9ICR7ZGF0YVR5cGV9KCR7emVyb1BvaW50cyA/ICcoemVyb19wb2ludF93b3JkKSAmIDB4RnUnIDogOC4wfSk7XG4gICAgICAgICAgICAke2IuaW5kaWNlc1NldCgnYl9pbmRpY2VzJywgJzEnLCAnYmxvY2snKX07XG4gICAgICAgICAgICB2YXIgd29yZF9vZmZzZXQ6IHUzMiA9IGJsb2NrICogJHthdHRyaWJ1dGVzLmJsb2NrU2l6ZSAvIGFDb21wb25lbnRzfTtcbiAgICAgICAgICAgIHZhciB3b3JrZ3JvdXBfc2hhcmVkX29mZnNldDogdTMyID0gYmxvY2sgKiAke2RpbUFPdXRlcn07XG4gICAgICAgICAgICAke3Byb2Nlc3NPbmVCbG9ja31cbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgICAgICAgIGlmIChsb2NhbF9pZC54ID09IDB1KSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0X2luZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc307XG4gICAgICAgICAgICAke291dHB1dC5pbmRpY2VzU2V0KCdvdXRwdXRfaW5kaWNlcycsICcwJywgJ2JhdGNoJyl9O1xuICAgICAgICAgICAgJHtvdXRwdXQuaW5kaWNlc1NldCgnb3V0cHV0X2luZGljZXMnLCBvdXRwdXRSYW5rIC0gMSwgJ2NvbCcpfTtcbiAgICAgICAgICAgICR7b3V0cHV0LmluZGljZXNTZXQoJ291dHB1dF9pbmRpY2VzJywgb3V0cHV0UmFuayAtIDIsICcwJyl9O1xuICAgICAgICAgICAgdmFyIG91dHB1dF9vZmZzZXQgPSAke291dHB1dC5pbmRpY2VzVG9PZmZzZXQoJ291dHB1dF9pbmRpY2VzJyl9O1xuICAgICAgICAgICAgZm9yICh2YXIgbTogdTMyID0gMHU7IG0gPCAke2RpbUFPdXRlcn11OyBtKyspIHtcbiAgICAgICAgICAgICAgdmFyIG91dHB1dF92YWx1ZTogJHtvdXRwdXQudHlwZS52YWx1ZX0gPSAke291dHB1dC50eXBlLnZhbHVlfSgwKTtcbiAgICAgICAgICAgICAgdmFyIHdvcmtncm91cF9zaGFyZWRfb2Zmc2V0OiB1MzIgPSBtO1xuICAgICAgICAgICAgICBmb3IgKHZhciBiOiB1MzIgPSAwdTsgYiA8ICR7bkJsb2Nrc1BlckNvbH11OyBiKyspIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRfdmFsdWUgKz0gd29ya2dyb3VwX3NoYXJlZFt3b3JrZ3JvdXBfc2hhcmVkX29mZnNldF07XG4gICAgICAgICAgICAgICAgd29ya2dyb3VwX3NoYXJlZF9vZmZzZXQgKz0gJHtkaW1BT3V0ZXJ9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdvdXRwdXRfb2Zmc2V0JywgJ291dHB1dF92YWx1ZScpfTtcbiAgICAgICAgICAgICAgb3V0cHV0X29mZnNldCArPSAke2RpbUJPdXRlciAvIGNvbXBvbmVudHN9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoLi4uaW5wdXRWYXJpYWJsZXMsIG91dHB1dCl9XG4gICAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF9zaXplJyl9XG4gICAgICAgICAgdmFyIG91dHB1dF92YWx1ZXM6IGFycmF5PCR7b3V0cHV0LnR5cGUudmFsdWV9LCAke291dHB1dE51bWJlcn0+O1xuICAgICAgICAgIHZhciBvdXRwdXRfaW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcbiAgICAgICAgICB2YXIgY29sID0gJHtvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0X2luZGljZXMnLCBvdXRwdXRSYW5rIC0gMSl9O1xuICAgICAgICAgIHZhciByb3cgPSAke291dHB1dC5pbmRpY2VzR2V0KCdvdXRwdXRfaW5kaWNlcycsIG91dHB1dFJhbmsgLSAyKX07XG4gICAgICAgICAgdmFyIGFfaW5kaWNlczogJHthLnR5cGUuaW5kaWNlc30gPSBvdXRwdXRfaW5kaWNlcztcbiAgICAgICAgICAvLyBUd28gemVybyBwb2ludHMgYXJlIHBhY2tlZCBpbnRvIG9uZSBieXRlIGJlY2F1c2UgdW5pZm9ybXMuYml0cyA8PSA0LlxuICAgICAgICAgIC8vIHplcm9fcG9pbnRfb2Zmc2V0IGlzIGVpdGhlciAwIG9yIDQuIEl0IGlzIGJpdCBvZmZzZXQgd2l0aGluIG9uZSBieXRlLlxuICAgICAgICAgIC8vIFRPRE8gc3VwcG9ydCB6ZXJvX3BvaW50X29mZnNldCBmb3IgYml0cyA+IDRcbiAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVyb1BvaW50cyA/IGBcbiAgICAgICAgICB2YXIgemVyb19wb2ludF9hYnNfb2Zmc2V0ID0gY29sICogJHtjb21wb25lbnRzfSAqICgoJHtuQmxvY2tzUGVyQ29sfSArIDEpIC8gMik7XG4gICAgICAgICAgdmFyIHplcm9fcG9pbnRfaW5kZXg6IHUzMiA9IHplcm9fcG9pbnRfYWJzX29mZnNldCAvIDQ7XG4gICAgICAgICAgdmFyIHplcm9fcG9pbnRfd29yZDogdTMyID0gJHt6ZXJvUG9pbnRzLmdldEJ5T2Zmc2V0KCd6ZXJvX3BvaW50X2luZGV4Jyl9O1xuICAgICAgICAgIHZhciB6ZXJvX3BvaW50X29mZnNldDogdTMyID0gKHplcm9fcG9pbnRfYWJzX29mZnNldCAlIDQpICogODtgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ31cbiAgICAgICAgICB2YXIgc2NhbGVfaW5kZXggPSBjb2wgKiAke25CbG9ja3NQZXJDb2wgKiBjb21wb25lbnRzfTtcbiAgICAgICAgICB2YXIgYl9pbmRpY2VzOiAke2IudHlwZS5pbmRpY2VzfTtcbiAgICAgICAgICBmb3IgKHZhciBjOiB1MzIgPSAwOyBjIDwgJHtjb21wb25lbnRzfTsgYysrKSB7XG4gICAgICAgICAgICAke2IuaW5kaWNlc1NldCgnYl9pbmRpY2VzJywgJzAnLCBgY29sICogJHtjb21wb25lbnRzfSArIGNgKX07XG4gICAgICAgICAgICB2YXIgYmxvY2tfb2Zmc2V0OiB1MzIgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgYmxvY2s6IHUzMiA9IDA7IGJsb2NrIDwgJHtuQmxvY2tzUGVyQ29sfTsgYmxvY2srKykge1xuICAgICAgICAgICAgICAvLyBUaGUgc2NhbGUgYW5kIHplcm8gcG9pbnRzIGFyZSBjb21wdXRlZCBwZXIgYmxvY2suXG4gICAgICAgICAgICAgIGxldCBzY2FsZSA9ICR7c2NhbGVzLmdldEJ5T2Zmc2V0KCdzY2FsZV9pbmRleCcpfTtcbiAgICAgICAgICAgICAgLy8gVGhlIGRlZmF1bHQgemVybyBwb2ludCBpcyA4IGZvciB1bnNpZ25lZCA0LWJpdCBxdWFudGl6YXRpb24uXG4gICAgICAgICAgICAgIGxldCB6ZXJvX3BvaW50ID0gJHtkYXRhVHlwZX0oJHt6ZXJvUG9pbnRzID8gJ2V4dHJhY3RCaXRzKHplcm9fcG9pbnRfd29yZCwgemVyb19wb2ludF9vZmZzZXQsIDQpJyA6IDguMH0pO1xuICAgICAgICAgICAgICAke2IuaW5kaWNlc1NldCgnYl9pbmRpY2VzJywgJzEnLCAnYmxvY2snKX07XG4gICAgICAgICAgICAgIHZhciB3b3JkX29mZnNldDogdTMyID0gYmxvY2tfb2Zmc2V0O1xuICAgICAgICAgICAgICAke3Byb2Nlc3NPbmVCbG9ja31cbiAgICAgICAgICAgICAgc2NhbGVfaW5kZXgrKztcbiAgICAgICAgICAgICAgJHt1cGRhdGVaZXJvUG9pbnRJbmRleH1cbiAgICAgICAgICAgICAgYmxvY2tfb2Zmc2V0ICs9IHVuaWZvcm1zLmJsb2NrX3NpemUgLyAke2FDb21wb25lbnRzfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERyb3AgdGhlIHRyYWlsaW5nIDQgYml0cyBpZiB0aGUgemVyb19wb2l0X29mZnNldCBpcyBub3QgYSBieXRlIGJvdW5kYXJ5IHRvIGFsaWduIHdpdGggdGhlIG5leHQgYnl0ZS5cbiAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvUG9pbnRzID8gYGlmICh6ZXJvX3BvaW50X29mZnNldCAlIDggPiAwKSB7XG4gICAgICAgICAgICAgICAgJHt1cGRhdGVaZXJvUG9pbnRJbmRleH1cbiAgICAgICAgICAgICAgfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgazogdTMyID0gMHU7IGsgPCAke291dHB1dE51bWJlcn11OyBrKyspIHtcbiAgICAgICAgICAgICAgJHtvdXRwdXQuaW5kaWNlc1NldCgnb3V0cHV0X2luZGljZXMnLCBvdXRwdXRSYW5rIC0gMiwgYCR7b3V0cHV0TnVtYmVyfSAqIHJvdyArIGtgKX07XG4gICAgICAgICAgICAgICR7b3V0cHV0LnNldEJ5SW5kaWNlcygnb3V0cHV0X2luZGljZXMnLCAnb3V0cHV0X3ZhbHVlc1trXScpfVxuICAgICAgICAgICAgfVxuICAgICAgICB9YDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/ICdCbG9ja3dpc2VNYXRNdWxOQml0cycgOiAnTWF0TXVsTkJpdHMnLFxuICAgICAgICBzaGFkZXJDYWNoZToge1xuICAgICAgICAgIGhpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9OyR7ZGltQU91dGVyfTske2RhdGFUeXBlfTske2lucHV0cy5sZW5ndGh9YCxcbiAgICAgICAgICBpbnB1dERlcGVuZGVuY2llczogQXJyYXkoaW5wdXRzLmxlbmd0aCkuZmlsbCgncmFuaycpXG4gICAgICAgIH0sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGV9XSxcbiAgICAgICAgICBuYW1lOiB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/ICdCbG9ja3dpc2VNYXRNdWxOQml0cycgOiAnTWF0TXVsTkJpdHMnLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHVzZUJsb2Nrd2lzZU1hdE11bE5CaXRzID8ge3g6IDEsIHk6IE1hdGguY2VpbChkaW1CT3V0ZXIgLyBjb21wb25lbnRzKSwgejogYmF0Y2hTaXplfSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICB9O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBtYXRNdWxOQml0cyA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogTWF0TXVsTkJpdHNBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgY29uc3QgbWF4Q29tcHV0ZVdvcmtncm91cFNpemVzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBjb250ZXh0LmdldE1heENvbXB1dGVXb3JrZ3JvdXBTaXplcygpO1xuICBjb25zdCBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUgPSBjb250ZXh0LmdldE1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlc2l6ZSgpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlTWF0TXVsTkJpdHNQcm9ncmFtSW5mbyhcbiAgICAgIGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzLCBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZXMsIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlTWF0TXVsTkJpdHNBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogTWF0TXVsTkJpdHNBdHRyaWJ1dGVzID0+XG4gICAgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KGF0dHJpYnV0ZXMgYXMgT21pdDxNYXRNdWxOQml0c0F0dHJpYnV0ZXMsIGtleW9mIEF0dHJpYnV0ZVdpdGhDYWNoZUtleT4pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Y3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgR3B1RGF0YVR5cGUsIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YXBwbHlBdHRlbnRpb24sIEF0dGVudGlvbkF0dHJzLCBBdHRlbnRpb25NYXNrVHlwZSwgQXR0ZW50aW9uUGFyYW1ldGVycywgQXR0ZW50aW9uUWt2Rm9ybWF0fSBmcm9tICcuL2F0dGVudGlvbic7XG5pbXBvcnQge2lucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQge2NyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvLCBUcmFuc3Bvc2VBdHRyaWJ1dGVzfSBmcm9tICcuL3RyYW5zcG9zZSc7XG5cbmNvbnN0IGdldElucHV0ID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBpOiBudW1iZXIpID0+XG4gICAgKGlucHV0cy5sZW5ndGggPiBpKSAmJiAoaW5wdXRzW2ldLmRpbXMubGVuZ3RoID4gMCkgJiYgKFNoYXBlVXRpbC5zaXplKGlucHV0c1tpXS5kaW1zKSkgPiAwID8gaW5wdXRzW2ldIDogdW5kZWZpbmVkO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogQXR0ZW50aW9uQXR0cnMpOiBBdHRlbnRpb25QYXJhbWV0ZXJzID0+IHtcbiAgY29uc3QgcXVlcnkgPSBpbnB1dHNbMF07XG4gIGNvbnN0IGtleSA9IGdldElucHV0KGlucHV0cywgMSk7XG4gIGNvbnN0IHZhbHVlID0gZ2V0SW5wdXQoaW5wdXRzLCAyKTtcbiAgY29uc3QgYmlhcyA9IGdldElucHV0KGlucHV0cywgMyk7XG4gIGNvbnN0IGtleVBhZGRpbmdNYXNrID0gZ2V0SW5wdXQoaW5wdXRzLCA0KTtcbiAgY29uc3QgcmVsYXRpdmVQb3NpdGlvbkJpYXMgPSBnZXRJbnB1dChpbnB1dHMsIDUpO1xuICBjb25zdCBwYXN0S2V5ID0gZ2V0SW5wdXQoaW5wdXRzLCA2KTtcbiAgY29uc3QgcGFzdFZhbHVlID0gZ2V0SW5wdXQoaW5wdXRzLCA3KTtcblxuICAvLyBBYmJyZXZpYXRpb24gYW5kIE1lYW5pbmdzOlxuICAvLyAgIEI6ICAgIGJhdGNoX3NpemVcbiAgLy8gICBTOiAgICBzZXF1ZW5jZV9sZW5ndGggKGlucHV0IHNlcXVlbmNlIGxlbmd0aCBvZiBxdWVyeSlcbiAgLy8gICBQOiAgICBwYXN0X3NlcXVlbmNlX2xlbmd0aCAocGFzdCBzZXF1ZW5jZSBsZW5ndGggb2Yga2V5IG9yIHZhbHVlKVxuICAvLyAgIEw6ICAgIGt2X3NlcXVlbmNlX2xlbmd0aCAoaW5wdXQgc2VxdWVuY2UgbGVuZ3RoIG9mIGtleSBvciB2YWx1ZSlcbiAgLy8gICBNOiAgICBtYXhfc2VxdWVuY2VfbGVuZ3RoXG4gIC8vICAgVDogICAgdG90YWxfc2VxdWVuY2VfbGVuZ3RoID0gcGFzdF9zZXF1ZW5jZV9sZW5ndGggKyBrdl9zZXF1ZW5jZV9sZW5ndGhcbiAgLy8gICBOOiAgICBudW1faGVhZHNcbiAgLy8gICBIOiAgICBoZWFkIHNpemUgZm9yIFEgYW5kIEssIGFrYSBxX2hlYWRfc2l6ZSBvciBrX2hlYWRfc2l6ZSBvciBxa19oZWFkX3NpemVcbiAgLy8gICBIX3Y6ICB2X2hlYWRfc2l6ZVxuICAvLyAgIERfaTogIGlucHV0IGhpZGRlbiBzaXplXG4gIC8vICAgRDogICAgaGlkZGVuIHNpemUgZm9yIFEgYW5kIEsgKEQgPSBOICogSCksIGFrYSBxX2hpZGRlbl9zaXplIG9yIGtfaGlkZGVuX3NpemUgb3IgcWtfaGlkZGVuX3NpemVcbiAgLy8gICBEX3Y6ICB2X2hpZGRlbl9zaXplID0gbnVtX2hlYWRzICogdl9oZWFkX3NpemVcblxuICAvLyAgICAga2V5X3BhZGRpbmdfbWFzayAoSy9WKSAgICAgOiAoQikgb3IgKDIqQiArIDEpIG9yIChCLCBMKSBvciBOb25lXG4gIC8vICAgICByZWxhdGl2ZV9wb3NpdGlvbl9iaWFzICAgICA6IChCLCAxLCBTLCBMKVxuICAvLyAgICAgcGFzdF9rZXkgICAgICAgICAgICAgICAgICAgOiAoQiwgTiwgUyosIEgpXG4gIC8vICAgICBwYXN0X3ZhbHVlICAgICAgICAgICAgICAgICA6IChCLCBOLCBTKiwgSClcbiAgLy8gV2hlbiBubyBwYWNraW5nIGZvciBxL2svdjpcbiAgLy8gICAgIHF1ZXJ5ICAgICAgICAgICAgKFEpICAgICAgIDogKEIsIFMsIEQpXG4gIC8vICAgICBrZXkgICAgICAgICAgICAgIChLKSAgICAgICA6IChCLCBMLCBEKSBvciAoQiwgTiwgUyosIEgpXG4gIC8vICAgICB2YWx1ZSAgICAgICAgICAgIChWKSAgICAgICA6IChCLCBMLCBEX3YpIG9yIChCLCBOLCBTKiwgSClcbiAgLy8gICAgIGJpYXMgICAgICAgICAgICAgKFEvSy9WKSAgIDogKEQgKyBEICsgRF92KVxuICAvLyBXaGVuIHBhY2tlZCBrdiBpcyB1c2VkOlxuICAvLyAgICAgcXVlcnkgICAgICAgICAgICAoUSkgICAgICAgOiAoQiwgUywgRClcbiAgLy8gICAgIGtleSAgICAgICAgICAgICAgKEspICAgICAgIDogKEIsIEwsIE4sIDIsIEgpXG4gIC8vICAgICB2YWx1ZSAgICAgICAgICAgIChWKSAgICAgICA6IE5vbmVcbiAgLy8gICAgIGJpYXMgICAgICAgICAgICAgKFEvSy9WKSAgIDogTm9uZVxuICAvLyBXaGVuIHBhY2tlZCBxa3YgaXMgdXNlZDpcbiAgLy8gICAgIHF1ZXJ5ICAgICAgICAgICAgKFEpICAgICAgIDogKEIsIEwsIE4sIDMsIEgpIG9yIChCLCBTLCAzKkQpXG4gIC8vICAgICBrZXkgICAgICAgICAgICAgIChLKSAgICAgICA6IE5vbmVcbiAgLy8gICAgIHZhbHVlICAgICAgICAgICAgKFYpICAgICAgIDogTm9uZVxuICAvLyAgICAgYmlhcyAgICAgICAgICAgICAoUS9LL1YpICAgOiBOb25lIG9yIChEICsgRCArIERfdilcblxuICBpZiAocXVlcnkuZGltcy5sZW5ndGggIT09IDMgJiYgcXVlcnkuZGltcy5sZW5ndGggIT09IDUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IHF1ZXJ5IGlzIGV4cGVjdGVkIHRvIGhhdmUgMyBvciA1IGRpbWVuc2lvbnMnKTtcbiAgfVxuXG4gIGNvbnN0IGRtbWhhUGFja2luZyA9IGZhbHNlO1xuICBjb25zdCBiYXRjaFNpemUgPSBxdWVyeS5kaW1zWzBdO1xuICBjb25zdCBzZXF1ZW5jZUxlbmd0aCA9IHF1ZXJ5LmRpbXNbMV07XG4gIGNvbnN0IGhpZGRlblNpemUgPSBxdWVyeS5kaW1zLmxlbmd0aCA9PT0gMyA/IChkbW1oYVBhY2tpbmcgPyBxdWVyeS5kaW1zWzJdIC8gMyA6IHF1ZXJ5LmRpbXNbMl0pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5udW1IZWFkcyAqIHF1ZXJ5LmRpbXNbNF07XG4gIGxldCBrdlNlcXVlbmNlTGVuZ3RoID0gc2VxdWVuY2VMZW5ndGg7XG5cbiAgbGV0IHBhc3RTZXF1ZW5jZUxlbmd0aCA9IDA7XG4gIGxldCBtYXhTZXF1ZW5jZUxlbmd0aCA9IDA7XG4gIGNvbnN0IGhlYWRTaXplID0gTWF0aC5mbG9vcihoaWRkZW5TaXplIC8gYXR0cmlidXRlcy5udW1IZWFkcyk7XG4gIGlmIChwYXN0S2V5ICYmIHBhc3RWYWx1ZSkge1xuICAgIGlmIChwYXN0S2V5LmRpbXMubGVuZ3RoICE9PSA0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicGFzdF9rZXlcIiBpcyBleHBlY3RlZCB0byBoYXZlIDQgZGltZW5zaW9ucycpO1xuICAgIH1cbiAgICBpZiAocGFzdEtleS5kaW1zWzBdICE9PSBiYXRjaFNpemUgfHwgcGFzdEtleS5kaW1zWzFdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8IHBhc3RLZXkuZGltc1szXSAhPT0gaGVhZFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0X2tleVwiIHNoYXBlIChiYXRjaF9zaXplLCBudW1faGVhZHMsIHBhc3Rfc2VxdWVuY2VfbGVuZ3RoLCBoZWFkX3NpemUpJyk7XG4gICAgfVxuICAgIGlmIChwYXN0VmFsdWUuZGltc1swXSAhPT0gYmF0Y2hTaXplIHx8IHBhc3RWYWx1ZS5kaW1zWzFdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8XG4gICAgICAgIHBhc3RWYWx1ZS5kaW1zWzNdICE9PSBoZWFkU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3RfdmFsdWVcIiBzaGFwZSAoYmF0Y2hfc2l6ZSwgbnVtX2hlYWRzLCBwYXN0X3NlcXVlbmNlX2xlbmd0aCwgaGVhZF9zaXplKScpO1xuICAgIH1cbiAgICBpZiAocGFzdEtleS5kaW1zWzJdICE9PSBwYXN0VmFsdWUuZGltc1syXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3Rfa2V5XCIgYW5kIFwicGFzdF92YWx1ZVwiIHNoYWxsIGhhdmUgc2FtZSBkaW0gMiAocGFzdF9zZXF1ZW5jZV9sZW5ndGgpJyk7XG4gICAgfVxuICAgIGlmIChwYXN0VmFsdWUuZGltcy5sZW5ndGggIT09IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0X3ZhbHVlXCIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSA0IGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgcGFzdFNlcXVlbmNlTGVuZ3RoID0gcGFzdEtleS5kaW1zWzJdO1xuICAgIG1heFNlcXVlbmNlTGVuZ3RoID0gcGFzdEtleS5kaW1zWzJdO1xuICB9IGVsc2UgaWYgKHBhc3RLZXkgfHwgcGFzdFZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3Rfa2V5XCIgYW5kIFwicGFzdF92YWx1ZVwiIHNoYWxsIGJlIGJvdGggcHJlc2VudCBvciBib3RoIGFic2VudCcpO1xuICB9XG5cbiAgbGV0IHFrdkZvcm1hdDogQXR0ZW50aW9uUWt2Rm9ybWF0O1xuICBpZiAoa2V5KSB7XG4gICAgaWYgKHF1ZXJ5LmRpbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicXVlcnlcIiBpcyBleHBlY3RlZCB0byBoYXZlIDMgZGltZW5zaW9ucyB3aGVuIGtleSBpcyBnaXZlbicpO1xuICAgIH1cbiAgICBpZiAoa2V5LmRpbXMubGVuZ3RoIDwgMyB8fCBrZXkuZGltcy5sZW5ndGggPiA1KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwia2V5XCIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSAzLCA0LCBvciA1IGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LmRpbXNbMF0gIT09IGtleS5kaW1zWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicXVlcnlcIiBhbmQgXCJrZXlcIiBzaGFsbCBoYXZlIHNhbWUgZGltIDAgKGJhdGNoIHNpemUpJyk7XG4gICAgfVxuXG4gICAgaWYgKGtleS5kaW1zLmxlbmd0aCA9PT0gMykge1xuICAgICAgaWYgKGtleS5kaW1zWzJdICE9PSBxdWVyeS5kaW1zWzJdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJxdWVyeVwiIGFuZCBcImtleVwiIHNoYWxsIGhhdmUgc2FtZSBkaW0gMiAoaGlkZGVuX3NpemUpJyk7XG4gICAgICB9XG4gICAgICBxa3ZGb3JtYXQgPSBBdHRlbnRpb25Ra3ZGb3JtYXQucWt2QlNOSDtcbiAgICAgIGt2U2VxdWVuY2VMZW5ndGggPSBrZXkuZGltc1sxXTtcbiAgICB9IGVsc2UgaWYgKGtleS5kaW1zLmxlbmd0aCA9PT0gNSkge1xuICAgICAgaWYgKGtleS5kaW1zWzJdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8IGtleS5kaW1zWzNdICE9PSAyIHx8IGtleS5kaW1zWzRdICE9PSBoZWFkU2l6ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdCBcImtleVwiIHNoYXBlIChiYXRjaF9zaXplLCBrdl9zZXF1ZW5jZV9sZW5ndGgsIG51bV9oZWFkcywgMiwgaGVhZF9zaXplKSBmb3IgcGFja2VkIGt2Jyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3QgXCJ2YWx1ZVwiIGJlIG5vbmUgd2hlbiBcImtleVwiIGhhcyBwYWNrZWQga3YgZm9ybWF0LicpO1xuICAgICAgfVxuICAgICAgcWt2Rm9ybWF0ID0gQXR0ZW50aW9uUWt2Rm9ybWF0LnFLdkJTTkh4QlNOMkg7XG4gICAgICBrdlNlcXVlbmNlTGVuZ3RoID0ga2V5LmRpbXNbMV07XG4gICAgfSBlbHNlIHsgIC8vIGtleV9kaW1zLnNpemUoKSA9PSA0IChjcm9zcy1hdHRlbnRpb24gd2l0aCBwYXN0X2tleSlcbiAgICAgIGlmIChrZXkuZGltc1sxXSAhPT0gYXR0cmlidXRlcy5udW1IZWFkcyB8fCBrZXkuZGltc1szXSAhPT0gaGVhZFNpemUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3QgXCJrZXlcIiBzaGFwZSAoYmF0Y2hfc2l6ZSwgbnVtX2hlYWRzLCBrdl9zZXF1ZW5jZV9sZW5ndGgsIGhlYWRfc2l6ZSkgZm9yIHBhc3Rfa2V5Jyk7XG4gICAgICB9XG5cbiAgICAgIHFrdkZvcm1hdCA9IEF0dGVudGlvblFrdkZvcm1hdC51bmtub3duO1xuICAgICAga3ZTZXF1ZW5jZUxlbmd0aCA9IGtleS5kaW1zWzJdO1xuICAgIH1cbiAgfSBlbHNlIHsgIC8vIHBhY2tlZCBRS1ZcbiAgICBpZiAocXVlcnkuZGltcy5sZW5ndGggIT09IDMgJiYgcXVlcnkuZGltcy5sZW5ndGggIT09IDUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJxdWVyeVwiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMyBvciA1IGRpbWVuc2lvbnMgd2hlbiBrZXkgaXMgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LmRpbXMubGVuZ3RoID09PSA1ICYmIChxdWVyeS5kaW1zWzJdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8IHF1ZXJ5LmRpbXNbM10gIT09IDMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdCBcInF1ZXJ5XCIgc2hhcGUgKGJhdGNoX3NpemUsIGt2X3NlcXVlbmNlX2xlbmd0aCwgbnVtX2hlYWRzLCAzLCBoZWFkX3NpemUpIGZvciBwYWNrZWQga3YnKTtcbiAgICB9XG5cbiAgICBxa3ZGb3JtYXQgPSBBdHRlbnRpb25Ra3ZGb3JtYXQucWt2QlNOM0g7XG4gIH1cblxuICBpZiAoYmlhcykge1xuICAgIGlmIChiaWFzLmRpbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwiYmlhc1wiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMSBkaW1lbnNpb24nKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmIChxdWVyeS5kaW1zLmxlbmd0aCA9PT0gNSAmJiBxdWVyeS5kaW1zWzNdID09PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYmlhcyBpcyBub3QgYWxsb3dlZCBmb3IgcGFja2VkIGt2LicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBtYXNrVHlwZTogQXR0ZW50aW9uTWFza1R5cGUgPSBBdHRlbnRpb25NYXNrVHlwZS5ub25lO1xuICBpZiAoa2V5UGFkZGluZ01hc2spIHtcbiAgICBtYXNrVHlwZSA9IEF0dGVudGlvbk1hc2tUeXBlLm1hc2tVbmtub3duO1xuICAgIGNvbnN0IG1hc2tEaW1zID0ga2V5UGFkZGluZ01hc2suZGltcztcbiAgICBpZiAobWFza0RpbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAobWFza0RpbXNbMF0gPT09IGJhdGNoU2l6ZSkge1xuICAgICAgICBtYXNrVHlwZSA9IEF0dGVudGlvbk1hc2tUeXBlLm1hc2sxZEtleVNlcUxlbjtcbiAgICAgIH0gZWxzZSBpZiAobWFza0RpbXNbMF0gPT09IDMgKiBiYXRjaFNpemUgKyAyKSB7XG4gICAgICAgIG1hc2tUeXBlID0gQXR0ZW50aW9uTWFza1R5cGUubWFzazFES2V5U2VxTGVuU3RhcnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtYXNrRGltcy5sZW5ndGggPT09IDIgJiYgbWFza0RpbXNbMF0gPT09IGJhdGNoU2l6ZSAmJiBtYXNrRGltc1sxXSA9PT0ga3ZTZXF1ZW5jZUxlbmd0aCkge1xuICAgICAgbWFza1R5cGUgPSBBdHRlbnRpb25NYXNrVHlwZS5tYXNrMmRLZXlQYWRkaW5nO1xuICAgIH1cbiAgICBpZiAobWFza1R5cGUgPT09IEF0dGVudGlvbk1hc2tUeXBlLm1hc2tVbmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwia2V5X3BhZGRpbmdfbWFza1wiIHNoYXBlIHNoYWxsIGJlIChiYXRjaF9zaXplKSBvciAoYmF0Y2hfc2l6ZSwga3Zfc2VxdWVuY2VfbGVuZ3RoKScpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01hc2sgbm90IHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgbGV0IHBhc3NQYXN0SW5LdiA9IGZhbHNlO1xuICBsZXQgdkhpZGRlblNpemUgPSBoaWRkZW5TaXplO1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAodmFsdWUuZGltcy5sZW5ndGggIT09IDMgJiYgdmFsdWUuZGltcy5sZW5ndGggIT09IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJ2YWx1ZVwiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMyBvciA0IGRpbWVuc2lvbnMnKTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnkuZGltc1swXSAhPT0gdmFsdWUuZGltc1swXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInF1ZXJ5XCIgYW5kIFwidmFsdWVcIiBzaGFsbCBoYXZlIHNhbWUgZGltIDAgKGJhdGNoX3NpemUpJyk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLmRpbXMubGVuZ3RoID09PSAzKSB7XG4gICAgICBpZiAoa3ZTZXF1ZW5jZUxlbmd0aCAhPT0gdmFsdWUuZGltc1sxXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwia2V5XCIgYW5kIFwidmFsdWVcIiBzaGFsbCBoYXZlIHRoZSBzYW1lIGRpbSAxIChrdl9zZXF1ZW5jZV9sZW5ndGgpJyk7XG4gICAgICB9XG4gICAgICB2SGlkZGVuU2l6ZSA9IHZhbHVlLmRpbXNbMl07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChrdlNlcXVlbmNlTGVuZ3RoICE9PSB2YWx1ZS5kaW1zWzJdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0X2tleVwiIGFuZCBcInBhc3RfdmFsdWVcIiBzaGFsbCBoYXZlIHRoZSBzYW1lIGRpbSAyIChrdl9zZXF1ZW5jZV9sZW5ndGgpJyk7XG4gICAgICB9XG4gICAgICB2SGlkZGVuU2l6ZSA9IHZhbHVlLmRpbXNbMV0gKiB2YWx1ZS5kaW1zWzNdO1xuICAgICAgcGFzc1Bhc3RJbkt2ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0b3RhbFNlcXVlbmNlTGVuZ3RoID0gcGFzdFNlcXVlbmNlTGVuZ3RoICsga3ZTZXF1ZW5jZUxlbmd0aDtcbiAgY29uc3QgYnJvYWRjYXN0UmVzUG9zQmlhcyA9IGZhbHNlO1xuXG4gIGlmIChrZXlQYWRkaW5nTWFzaykge1xuICAgIHRocm93IG5ldyBFcnJvcignS2V5IHBhZGRpbmcgbWFzayBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cblxuICBpZiAocmVsYXRpdmVQb3NpdGlvbkJpYXMpIHtcbiAgICBpZiAocmVsYXRpdmVQb3NpdGlvbkJpYXMuZGltcy5sZW5ndGggIT09IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJyZWxhdGl2ZV9wb3NpdGlvbl9iaWFzXCIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSA0IGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgaWYgKChyZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zWzBdICE9PSBiYXRjaFNpemUgJiYgcmVsYXRpdmVQb3NpdGlvbkJpYXMuZGltc1swXSAhPT0gMSkgfHxcbiAgICAgICAgcmVsYXRpdmVQb3NpdGlvbkJpYXMuZGltc1sxXSAhPT0gYXR0cmlidXRlcy5udW1IZWFkcyB8fCByZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zWzJdICE9PSBzZXF1ZW5jZUxlbmd0aCB8fFxuICAgICAgICByZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zWzNdICE9PSB0b3RhbFNlcXVlbmNlTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicmVsYXRpdmVfcG9zaXRpb25fYmlhc1wiIHNoYXBlIChiYXRjaF9zaXplLCAxLCBzZXF1ZW5jZV9sZW5ndGgsIGt2X3NlcXVlbmNlX2xlbmd0aCknKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJhdGNoU2l6ZSxcbiAgICBzZXF1ZW5jZUxlbmd0aCxcbiAgICBwYXN0U2VxdWVuY2VMZW5ndGgsXG4gICAga3ZTZXF1ZW5jZUxlbmd0aCxcbiAgICB0b3RhbFNlcXVlbmNlTGVuZ3RoLFxuICAgIG1heFNlcXVlbmNlTGVuZ3RoLFxuICAgIGlucHV0SGlkZGVuU2l6ZTogMCxcbiAgICBoaWRkZW5TaXplLFxuICAgIHZIaWRkZW5TaXplLFxuICAgIGhlYWRTaXplLFxuICAgIHZIZWFkU2l6ZTogTWF0aC5mbG9vcih2SGlkZGVuU2l6ZSAvIGF0dHJpYnV0ZXMubnVtSGVhZHMpLFxuICAgIG51bUhlYWRzOiBhdHRyaWJ1dGVzLm51bUhlYWRzLFxuICAgIGlzVW5pZGlyZWN0aW9uYWw6IGZhbHNlLFxuICAgIHBhc3RQcmVzZW50U2hhcmVCdWZmZXI6IGZhbHNlLFxuICAgIG1hc2tGaWx0ZXJWYWx1ZTogYXR0cmlidXRlcy5tYXNrRmlsdGVyVmFsdWUsXG4gICAgbWFza1R5cGUsXG4gICAgc2NhbGU6IGF0dHJpYnV0ZXMuc2NhbGUsXG4gICAgYnJvYWRjYXN0UmVzUG9zQmlhcyxcbiAgICBwYXNzUGFzdEluS3YsXG4gICAgcWt2Rm9ybWF0LFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlTXVsdGlIZWFkQXR0ZW50aW9uQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBBdHRlbnRpb25BdHRycyk6IEF0dGVudGlvbkF0dHJzID0+XG4gICAgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHsuLi5hdHRyaWJ1dGVzfSk7XG5cbmNvbnN0IHdlaWdodFRyYW5zcG9zZUF0dHJpYnV0ZTogVHJhbnNwb3NlQXR0cmlidXRlcyA9IGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7cGVybTogWzAsIDIsIDEsIDNdfSk7XG5cbmNvbnN0IGFkZEJpYXNUcmFuc3Bvc2UgPVxuICAgIChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgcWt2OiBUZW5zb3JWaWV3LCBiaWFzOiBUZW5zb3JWaWV3LCBiYXRjaFNpemU6IG51bWJlciwgc2VxdWVuY2VMZW5ndGg6IG51bWJlcixcbiAgICAgaGlkZGVuU2l6ZTogbnVtYmVyLCBiaWFzT2Zmc2V0OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gW2JhdGNoU2l6ZSwgc2VxdWVuY2VMZW5ndGgsIGhpZGRlblNpemVdO1xuICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGJpYXNPZmZzZXR9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBoaWRkZW5TaXplfVxuICAgICAgXTtcblxuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdxa3Zfd2l0aF9iaWFzJywgcWt2LmRhdGFUeXBlLCBvdXRwdXRTaGFwZSk7XG4gICAgICAgIGNvbnN0IHFrdklucHV0ID0gaW5wdXRWYXJpYWJsZSgncWt2JywgcWt2LmRhdGFUeXBlLCBvdXRwdXRTaGFwZSk7XG4gICAgICAgIGNvbnN0IGJpYXNJbnB1dCA9IGlucHV0VmFyaWFibGUoJ2JpYXMnLCBiaWFzLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSk7XG5cbiAgICAgICAgY29uc3QgdW5pZm9ybXM6IFVuaWZvcm1zQXJyYXlUeXBlID0gW1xuICAgICAgICAgIHtuYW1lOiAnb3V0cHV0X3NpemUnLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnYmlhc19vZmZzZXQnLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnaGlkZGVuX3NpemUnLCB0eXBlOiAndTMyJ31cbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGBcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyhxa3ZJbnB1dCwgYmlhc0lucHV0LCBvdXRwdXQpfVxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRfc2l6ZScpfVxuICAgIGxldCBiaWFzX29mZnNldF9pZHggPSAoZ2xvYmFsX2lkeCAlIHVuaWZvcm1zLmhpZGRlbl9zaXplKSArIHVuaWZvcm1zLmJpYXNfb2Zmc2V0O1xuXG4gICAgcWt2X3dpdGhfYmlhc1tnbG9iYWxfaWR4XSA9IHFrdltnbG9iYWxfaWR4XSArIGJpYXNbYmlhc19vZmZzZXRfaWR4XTtcbiAgfWA7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdNdWx0aUhlYWRBdHRlbnRpb25BZGRCaWFzJyxcbiAgICAgICAgICAgIHNoYWRlckNhY2hlOiB7aW5wdXREZXBlbmRlbmNpZXM6IFsndHlwZScsICd0eXBlJ119LFxuICAgICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IHFrdi5kYXRhVHlwZSwgZ3B1RGF0YVR5cGU6IEdwdURhdGFUeXBlLmRlZmF1bHR9XSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtpbnB1dHM6IFtxa3YsIGJpYXNdLCBvdXRwdXRzOiBbLTFdfSlbMF07XG4gICAgfTtcblxuY29uc3QgbWF5YmVUcmFuc3Bvc2VUb0JOU0hBbmRBZGRCaWFzID1cbiAgICAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGJhdGNoU2l6ZTogbnVtYmVyLCBudW1IZWFkczogbnVtYmVyLCBzZXF1ZW5jZUxlbmd0aDogbnVtYmVyLCBoZWFkU2l6ZTogbnVtYmVyLFxuICAgICBpbnB1dDogVGVuc29yVmlldywgYmlhcz86IFRlbnNvclZpZXcsIGJpYXNPZmZzZXQ/OiBudW1iZXIpID0+IHtcbiAgICAgIC8vIGNvbnN0IG5ld0RpbXMgPSBbXTtcblxuICAgICAgbGV0IHJlc2hhcGVkSW5wdXQgPSBpbnB1dDtcbiAgICAgIGlmICghYmlhcykge1xuICAgICAgICBpZiAoaW5wdXQuZGltcy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICByZXNoYXBlZElucHV0ID0gaW5wdXQucmVzaGFwZShbYmF0Y2hTaXplLCBzZXF1ZW5jZUxlbmd0aCwgbnVtSGVhZHMsIGhlYWRTaXplXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvKHJlc2hhcGVkSW5wdXQsIHdlaWdodFRyYW5zcG9zZUF0dHJpYnV0ZS5wZXJtKSxcbiAgICAgICAgICAgIHtpbnB1dHM6IFtyZXNoYXBlZElucHV0XSwgb3V0cHV0czogWy0xXX0pWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNlcXVlbmNlTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRCaWFzUmVzaGFwZSBpcyBub3QgaW1wbGVtZW50ZWQuIFBsZWFzZSBleHBvcnQgeW91ciBtb2RlbCB3aXRoIHBhY2tlZCBRS1Ygb3IgS1YnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNoYXBlZElucHV0ID1cbiAgICAgICAgICAgICAgYWRkQmlhc1RyYW5zcG9zZShjb250ZXh0LCBpbnB1dCwgYmlhcywgYmF0Y2hTaXplLCBzZXF1ZW5jZUxlbmd0aCwgbnVtSGVhZHMgKiBoZWFkU2l6ZSwgYmlhc09mZnNldCEpO1xuICAgICAgICAgIHJlc2hhcGVkSW5wdXQgPSByZXNoYXBlZElucHV0LnJlc2hhcGUoW2JhdGNoU2l6ZSwgc2VxdWVuY2VMZW5ndGgsIG51bUhlYWRzLCBoZWFkU2l6ZV0pO1xuICAgICAgICAgIHJldHVybiBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgICAgIGNyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvKHJlc2hhcGVkSW5wdXQsIHdlaWdodFRyYW5zcG9zZUF0dHJpYnV0ZS5wZXJtKSxcbiAgICAgICAgICAgICAge2lucHV0czogW3Jlc2hhcGVkSW5wdXRdLCBvdXRwdXRzOiBbLTFdfSlbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgbXVsdGlIZWFkQXR0ZW50aW9uID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBBdHRlbnRpb25BdHRycyk6IHZvaWQgPT4ge1xuICBjb25zdCBwYXJhbXMgPSB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gIGNvbnN0IHF1ZXJ5ID0gY29udGV4dC5pbnB1dHNbMF07XG4gIGNvbnN0IGtleSA9IGdldElucHV0KGNvbnRleHQuaW5wdXRzLCAxKTtcbiAgY29uc3QgdmFsdWUgPSBnZXRJbnB1dChjb250ZXh0LmlucHV0cywgMik7XG4gIGNvbnN0IGJpYXMgPSBnZXRJbnB1dChjb250ZXh0LmlucHV0cywgMyk7XG4gIGNvbnN0IGtleVBhZGRpbmdNYXNrID0gZ2V0SW5wdXQoY29udGV4dC5pbnB1dHMsIDQpO1xuICBjb25zdCByZWxhdGl2ZVBvc2l0aW9uQmlhcyA9IGdldElucHV0KGNvbnRleHQuaW5wdXRzLCA1KTtcbiAgY29uc3QgcGFzdEtleSA9IGdldElucHV0KGNvbnRleHQuaW5wdXRzLCA2KTtcbiAgY29uc3QgcGFzdFZhbHVlID0gZ2V0SW5wdXQoY29udGV4dC5pbnB1dHMsIDcpO1xuICBpZiAocXVlcnkuZGltcy5sZW5ndGggPT09IDUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhY2tlZCBRS1YgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBpZiAoa2V5Py5kaW1zLmxlbmd0aCA9PT0gNSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFja2VkIEtWIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLy8gYXBwbHlBdHRlbnRpb24gZXhwZWN0cyBCTlNIIGlucHV0c1xuICBjb25zdCBrdkJOU0ggPSBrZXkgJiYgdmFsdWUgJiYga2V5LmRpbXMubGVuZ3RoID09PSA0ICYmIHZhbHVlLmRpbXMubGVuZ3RoID09PSA0O1xuXG4gIGNvbnN0IFEgPSBtYXliZVRyYW5zcG9zZVRvQk5TSEFuZEFkZEJpYXMoXG4gICAgICBjb250ZXh0LCBwYXJhbXMuYmF0Y2hTaXplLCBwYXJhbXMubnVtSGVhZHMsIHBhcmFtcy5zZXF1ZW5jZUxlbmd0aCwgcGFyYW1zLmhlYWRTaXplLCBxdWVyeSwgYmlhcywgMCk7XG5cbiAgaWYgKGt2Qk5TSCkge1xuICAgIHJldHVybiBhcHBseUF0dGVudGlvbihcbiAgICAgICAgY29udGV4dCwgUSwga2V5LCB2YWx1ZSwga2V5UGFkZGluZ01hc2ssIHVuZGVmaW5lZCwgcGFzdEtleSwgcGFzdFZhbHVlLCByZWxhdGl2ZVBvc2l0aW9uQmlhcywgcGFyYW1zLFxuICAgICAgICBhdHRyaWJ1dGVzKTtcbiAgfVxuICBpZiAoIWtleSB8fCAhdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleSBhbmQgdmFsdWUgbXVzdCBiZSBwcm92aWRlZCcpO1xuICB9XG4gIGNvbnN0IEsgPSBtYXliZVRyYW5zcG9zZVRvQk5TSEFuZEFkZEJpYXMoXG4gICAgICBjb250ZXh0LCBwYXJhbXMuYmF0Y2hTaXplLCBwYXJhbXMubnVtSGVhZHMsIHBhcmFtcy5rdlNlcXVlbmNlTGVuZ3RoLCBwYXJhbXMuaGVhZFNpemUsIGtleSwgYmlhcyxcbiAgICAgIHBhcmFtcy5oaWRkZW5TaXplKTtcblxuICBjb25zdCBWID0gbWF5YmVUcmFuc3Bvc2VUb0JOU0hBbmRBZGRCaWFzKFxuICAgICAgY29udGV4dCwgcGFyYW1zLmJhdGNoU2l6ZSwgcGFyYW1zLm51bUhlYWRzLCBwYXJhbXMua3ZTZXF1ZW5jZUxlbmd0aCwgcGFyYW1zLnZIZWFkU2l6ZSwgdmFsdWUsIGJpYXMsXG4gICAgICAyICogcGFyYW1zLmhpZGRlblNpemUpO1xuXG4gIGFwcGx5QXR0ZW50aW9uKFxuICAgICAgY29udGV4dCwgUSwgSywgViwga2V5UGFkZGluZ01hc2ssIHVuZGVmaW5lZCwgcGFzdEtleSwgcGFzdFZhbHVlLCByZWxhdGl2ZVBvc2l0aW9uQmlhcywgcGFyYW1zLCBhdHRyaWJ1dGVzKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5LCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBnZXRFbGVtZW50QXQsIEluZGljZXNIZWxwZXIsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIFVuaWZvcm1EYXRhRWxlbWVudFR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuL2NvbW1vbic7XG5cbmludGVyZmFjZSBQYWRBdHRyaWJ1dGVzIHtcbiAgLy8gMC1jb25zdGFudCwgMS1yZWZsZWN0LCAyLWVkZ2UsIDMtd3JhcFxuICByZWFkb25seSBtb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IHZhbHVlOiBudW1iZXI7XG4gIHJlYWRvbmx5IHBhZHM6IG51bWJlcltdO1xufVxuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVG9vIGZldyBpbnB1dHMnKTtcbiAgfVxuICBpZiAoaW5wdXRzWzBdLmRhdGFUeXBlICE9PSBEYXRhVHlwZS5mbG9hdCAmJiBpbnB1dHNbMF0uZGF0YVR5cGUgIT09IERhdGFUeXBlLmZsb2F0MTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IHR5cGUgbXVzdCBiZSBmbG9hdCBvciBmbG9hdDE2LicpO1xuICB9XG5cbiAgaWYgKGlucHV0cy5sZW5ndGggPj0gMikge1xuICAgIGxldCB2YWxpZFBhZHMgPSBpbnB1dHNbMF0uZGltcy5sZW5ndGggKiAyID09PSBpbnB1dHNbMV0uZGltc1swXTtcbiAgICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgdmFsaWRQYWRzID0gaW5wdXRzWzNdLmRpbXNbMF0gKiAyID09PSBpbnB1dHNbMV0uZGltc1swXTtcbiAgICB9XG4gICAgaWYgKCF2YWxpZFBhZHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhZHMgc2hvdWxkIGJlIGEgMUQgdGVuc29yIG9mIHNoYXBlIFsyICogaW5wdXRfcmFua10gb3IgWzIgKiBudW1fYXhlc10uJyk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBnZXRQYWRDb25zdGFudCA9IChvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0UmFuazogbnVtYmVyLCBwYWRzTGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICBsZXQgYmxvY2sgPSAnJztcbiAgZm9yIChsZXQgaSA9IGlucHV0UmFuayAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgYmxvY2sgKz0gYFxuICAgICAgICAgICAgayA9IGkzMigke291dHB1dC5pbmRpY2VzR2V0KCdpbmRpY2VzJywgaSl9KSAtICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5wYWRzJywgaSwgcGFkc0xlbmd0aCl9O1xuICAgICAgICAgICAgaWYgKGsgPCAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGsgPj0gaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3NoYXBlJywgaSwgaW5wdXRSYW5rKX0pKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ICs9IGsgKiBpMzIoJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnhfc3RyaWRlcycsIGksIGlucHV0UmFuayl9KTtcbiAgICAgICAgYDtcbiAgfVxuXG4gIHJldHVybiBgXG4gICAgICAgICAgdmFsdWUgPSAke291dHB1dC50eXBlLnZhbHVlfSh1bmlmb3Jtcy5jb25zdGFudF92YWx1ZSk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgJHtibG9ja31cbiAgICAgICAgICAgIHZhbHVlID0geFtvZmZzZXRdO1xuICAgICAgICAgIH1cbiAgICAgIGA7XG59O1xuXG5jb25zdCBnZXRQYWRSZWZsZWN0ID0gKG91dHB1dDogSW5kaWNlc0hlbHBlciwgaW5wdXRSYW5rOiBudW1iZXIsIHBhZHNMZW5ndGg6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGxldCBibG9jayA9ICcnO1xuICBmb3IgKGxldCBpID0gaW5wdXRSYW5rIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICBibG9jayArPSBgXG4gICAgICAgICAgICAgICAgayA9IGkzMigke291dHB1dC5pbmRpY2VzR2V0KCdpbmRpY2VzJywgaSl9KSAtICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5wYWRzJywgaSwgcGFkc0xlbmd0aCl9O1xuICAgICAgICAgICAgICAgIGlmIChrIDwgMCkge1xuICAgICAgICAgICAgICAgICAgayA9IC1rO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsZXQgXzJuXzEgPSAyICogKGkzMigke2dldEVsZW1lbnRBdCgndW5pZm9ybXMueF9zaGFwZScsIGksIGlucHV0UmFuayl9KSAtIDEpO1xuICAgICAgICAgICAgICAgICAgayA9IGsgJSBfMm5fMTtcbiAgICAgICAgICAgICAgICAgIGlmKGsgPj0gaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3NoYXBlJywgaSwgaW5wdXRSYW5rKX0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGsgPSBfMm5fMSAtIGs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNldCArPSBrICogaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3N0cmlkZXMnLCBpLCBpbnB1dFJhbmspfSk7XG4gICAgICAgICAgICBgO1xuICB9XG5cbiAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgICAgICAgJHtibG9ja31cbiAgICAgICAgICAgICAgdmFsdWUgPSB4W29mZnNldF07XG4gICAgICAgICAgYDtcbn07XG5cbmNvbnN0IGdldFBhZEVkZ2UgPSAob3V0cHV0OiBJbmRpY2VzSGVscGVyLCBpbnB1dFJhbms6IG51bWJlciwgcGFkc0xlbmd0aDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgbGV0IGJsb2NrID0gJyc7XG4gIGZvciAobGV0IGkgPSBpbnB1dFJhbmsgLSAxOyBpID49IDA7IC0taSkge1xuICAgIGJsb2NrICs9IGBcbiAgICAgICAgICAgICAgICBrID0gaTMyKCR7b3V0cHV0LmluZGljZXNHZXQoJ2luZGljZXMnLCBpKX0pIC0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnBhZHMnLCBpLCBwYWRzTGVuZ3RoKX07XG4gICAgICAgICAgICAgICAgaWYgKGsgPCAwKSB7XG4gICAgICAgICAgICAgICAgICBrID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGsgPj0gaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3NoYXBlJywgaSwgaW5wdXRSYW5rKX0pKSB7XG4gICAgICAgICAgICAgICAgICBrID0gaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3NoYXBlJywgaSwgaW5wdXRSYW5rKX0pIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGsgKiBpMzIoJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnhfc3RyaWRlcycsIGksIGlucHV0UmFuayl9KTtcbiAgICAgICAgICAgIGA7XG4gIH1cblxuICByZXR1cm4gYFxuICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgICAke2Jsb2NrfVxuICAgICAgICAgICAgICB2YWx1ZSA9IHhbb2Zmc2V0XTtcbiAgICAgICAgICBgO1xufTtcblxuY29uc3QgZ2V0UGFkV3JhcCA9IChvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0UmFuazogbnVtYmVyLCBwYWRzTGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICBsZXQgYmxvY2sgPSAnJztcbiAgZm9yIChsZXQgaSA9IGlucHV0UmFuayAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgYmxvY2sgKz0gYFxuICAgICAgICAgICAgICAgIGsgPSBpMzIoJHtvdXRwdXQuaW5kaWNlc0dldCgnaW5kaWNlcycsIGkpfSkgLSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMucGFkcycsIGksIHBhZHNMZW5ndGgpfTtcbiAgICAgICAgICAgICAgICBpZiAoayA8IDApICB7XG4gICAgICAgICAgICAgICAgICBrICs9IGkzMigke2dldEVsZW1lbnRBdCgndW5pZm9ybXMueF9zaGFwZScsIGksIGlucHV0UmFuayl9XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrID49IGkzMigke2dldEVsZW1lbnRBdCgndW5pZm9ybXMueF9zaGFwZScsIGksIGlucHV0UmFuayl9KSkge1xuICAgICAgICAgICAgICAgICAgayAtPSBpMzIoJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnhfc2hhcGUnLCBpLCBpbnB1dFJhbmspfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNldCArPSBrICogaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3N0cmlkZXMnLCBpLCBpbnB1dFJhbmspfSk7XG4gICAgICAgICAgICBgO1xuICB9XG5cbiAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgICAgICAgJHtibG9ja31cbiAgICAgICAgICAgICAgdmFsdWUgPSB4W29mZnNldF07XG4gICAgICAgICAgYDtcbn07XG5cbmNvbnN0IGdldFBhZFNuaXBwZXQgPSAob3V0cHV0OiBJbmRpY2VzSGVscGVyLCBpbnB1dFJhbms6IG51bWJlciwgYXR0cmlidXRlczogUGFkQXR0cmlidXRlcyk6IHN0cmluZyA9PiB7XG4gIHN3aXRjaCAoYXR0cmlidXRlcy5tb2RlKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGdldFBhZENvbnN0YW50KG91dHB1dCwgaW5wdXRSYW5rLCBhdHRyaWJ1dGVzLnBhZHMubGVuZ3RoKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gZ2V0UGFkUmVmbGVjdChvdXRwdXQsIGlucHV0UmFuaywgYXR0cmlidXRlcy5wYWRzLmxlbmd0aCk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGdldFBhZEVkZ2Uob3V0cHV0LCBpbnB1dFJhbmssIGF0dHJpYnV0ZXMucGFkcy5sZW5ndGgpO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBnZXRQYWRXcmFwKG91dHB1dCwgaW5wdXRSYW5rLCBhdHRyaWJ1dGVzLnBhZHMubGVuZ3RoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1vZGUnKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlUGFkUHJvZ3JhbUluZm8gPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IFBhZEF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gU2hhcGVVdGlsLnBhZFNoYXBlKGlucHV0c1swXS5kaW1zLnNsaWNlKCksIGF0dHJpYnV0ZXMucGFkcyk7XG4gIGNvbnN0IGlucHV0RGltcyA9IGlucHV0c1swXS5kaW1zO1xuICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPVxuICAgICAgW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGF0dHJpYnV0ZXMucGFkc31dO1xuICBpZiAoYXR0cmlidXRlcy5tb2RlID09PSAwKSB7XG4gICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goe3R5cGU6IGlucHV0c1swXS5kYXRhVHlwZSwgZGF0YTogYXR0cmlidXRlcy52YWx1ZX0pO1xuICB9XG5cbiAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzBdLmRpbXMsIG91dHB1dFNoYXBlKSk7XG4gIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJ107XG5cbiAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ3gnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0RGltcy5sZW5ndGgpO1xuICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXQudHlwZS52YWx1ZTtcbiAgICBjb25zdCBwYWRTbmlwcGV0ID0gZ2V0UGFkU25pcHBldChvdXRwdXQsIGlucHV0RGltcy5sZW5ndGgsIGF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9XG4gICAgICAgIFt7bmFtZTogJ291dHB1dF9zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ3BhZHMnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiBhdHRyaWJ1dGVzLnBhZHMubGVuZ3RofV07XG4gICAgaWYgKGF0dHJpYnV0ZXMubW9kZSA9PT0gMCkge1xuICAgICAgdW5pZm9ybXMucHVzaCh7bmFtZTogJ2NvbnN0YW50X3ZhbHVlJywgdHlwZTogZGF0YVR5cGUgYXMgVW5pZm9ybURhdGFFbGVtZW50VHlwZX0pO1xuICAgIH1cblxuICAgIHJldHVybiBgXG4gICAgICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKGlucHV0LCBvdXRwdXQpfVxuICAgICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRfc2l6ZScpfVxuXG4gICAgICAgICAgICBsZXQgaW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcblxuICAgICAgICAgICAgdmFyIHZhbHVlID0gJHtkYXRhVHlwZX0oMCk7XG4gICAgICAgICAgICAke3BhZFNuaXBwZXR9XG4gICAgICAgICAgICBvdXRwdXRbZ2xvYmFsX2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgfWA7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUGFkJyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke2F0dHJpYnV0ZXMubW9kZX1gLCBpbnB1dERlcGVuZGVuY2llc30sXG4gICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgIH0pLFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZVBhZEF0dHJpYnV0ZXNGcm9tSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBQYWRBdHRyaWJ1dGVzKTogUGFkQXR0cmlidXRlcyA9PiB7XG4gIGlmIChpbnB1dHMubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGJpZ0ludDY0UGFkcyA9IGlucHV0c1sxXS5nZXRCaWdJbnQ2NEFycmF5KCk7XG4gICAgY29uc3QgdmFsdWUgPSAoaW5wdXRzLmxlbmd0aCA+PSAzICYmIGlucHV0c1syXS5kYXRhKSA/IGlucHV0c1syXS5nZXRGbG9hdDMyQXJyYXkoKVswXSA6IDAuMDtcblxuICAgIGNvbnN0IGlucHV0UmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aDtcbiAgICBjb25zdCB1cGRhdGVQYWRzID0gbmV3IEludDMyQXJyYXkoMiAqIGlucHV0UmFuaykuZmlsbCgwKTtcbiAgICBpZiAoaW5wdXRzLmxlbmd0aCA+PSA0KSB7XG4gICAgICBjb25zdCBheGVzID0gaW5wdXRzWzNdLmdldEJpZ0ludDY0QXJyYXkoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1cGRhdGVQYWRzW051bWJlcihheGVzW2ldKV0gPSBOdW1iZXIoYmlnSW50NjRQYWRzW2ldKTtcbiAgICAgICAgdXBkYXRlUGFkc1tOdW1iZXIoYXhlc1tpXSkgKyBpbnB1dFJhbmtdID0gTnVtYmVyKGJpZ0ludDY0UGFkc1tpICsgYXhlcy5sZW5ndGhdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYmlnSW50NjRQYWRzLmZvckVhY2goKHYsIGkpID0+IHVwZGF0ZVBhZHNbTnVtYmVyKGkpXSA9IChOdW1iZXIodikpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIHVwZGF0ZVBhZHMuZm9yRWFjaCh2ID0+IHBhZHMucHVzaCh2KSk7XG5cbiAgICByZXR1cm4ge21vZGU6IGF0dHJpYnV0ZXMubW9kZSwgdmFsdWUsIHBhZHN9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBQYWRBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgdXBkYXRlZEF0dHJpYnV0ZXMgPSBjcmVhdGVQYWRBdHRyaWJ1dGVzRnJvbUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVQYWRQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywgdXBkYXRlZEF0dHJpYnV0ZXMpLCB7aW5wdXRzOiBbMF19KTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7ZW52fSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7UG9vbENvbnZVdGlsLCBTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3ksIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGdldEVsZW1lbnRBdCwgSW5kaWNlc0hlbHBlciwgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgVW5pZm9ybXNBcnJheVR5cGV9IGZyb20gJy4vY29tbW9uJztcblxuLy8gVE9ETzogc3VwcG9ydDpcbi8vIC0gY2VpbF9tb2RlICAgICAgICAgICAgICAgICBcInRlc3RfbWF4cG9vbF8yZF9jZWlsXCJcbi8vIC0gc3RvcmFnZV9vcmRlciAgICAgICAgICAgICBcInRlc3RfbWF4cG9vbF93aXRoX2FyZ21heF8yZF9wcmVjb21wdXRlZF9zdHJpZGVzXCJcbi8vIC0gW01heFBvb2xdIGRpbGF0aW9ucyAgICAgICBcInRlc3RfbWF4cG9vbF8yZF9kaWxhdGlvbnNcIlxuLy8gLSBbTWF4UG9vbF0gb3V0cHV0WzFdICAgICAgIFwidGVzdF9tYXhwb29sX3dpdGhfYXJnbWF4XzJkX3ByZWNvbXB1dGVkX3BhZHNcIlxuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoZW52LndlYmdwdS52YWxpZGF0ZUlucHV0Q29udGVudCAmJiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoICE9PSAxKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUG9vbCBvcHMgcmVxdWlyZXMgMSBpbnB1dC4nKTtcbiAgfVxufTtcblxuY29uc3QgZ2V0QWRqdXN0ZWRQb29sQXR0cmlidXRlc0FuZE91dHB1dFNoYXBlID0gPEF0dHJpYnV0ZVR5cGUgZXh0ZW5kcyBBdmVyYWdlUG9vbEF0dHJpYnV0ZXN8TWF4UG9vbEF0dHJpYnV0ZXM+KFxuICAgIGlucHV0OiBUZW5zb3JWaWV3LCBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVUeXBlLCBpc0dsb2JhbE9wZXJhdG9yOiBib29sZWFuKTogW0F0dHJpYnV0ZVR5cGUsIG51bWJlcltdXSA9PiB7XG4gIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJztcbiAgY29uc3QgaW5wdXRTaGFwZUFzQ2hhbm5lbEZpcnN0ID0gaW5wdXQuZGltcy5zbGljZSgpO1xuICBpZiAoaXNDaGFubmVsc0xhc3QpIHtcbiAgICBpbnB1dFNoYXBlQXNDaGFubmVsRmlyc3Quc3BsaWNlKDEsIDAsIGlucHV0U2hhcGVBc0NoYW5uZWxGaXJzdC5wb3AoKSEpOyAgLy8gTW92ZSBjaGFubmVsIHRvIHRoZSBzZWNvbmQgcG9zaXRpb24uXG4gIH1cbiAgY29uc3QgaGFzRGlsYXRpb25zID0gT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYXR0cmlidXRlcywgJ2RpbGF0aW9ucycpO1xuICBjb25zdCBrZXJuZWxTaGFwZSA9IGF0dHJpYnV0ZXMua2VybmVsU2hhcGUuc2xpY2UoKTtcbiAgY29uc3Qgc3RyaWRlcyA9IGF0dHJpYnV0ZXMuc3RyaWRlcy5zbGljZSgpO1xuICBjb25zdCBkaWxhdGlvbnM6IG51bWJlcltdID0gaGFzRGlsYXRpb25zID8gKGF0dHJpYnV0ZXMgYXMgTWF4UG9vbEF0dHJpYnV0ZXMpLmRpbGF0aW9ucy5zbGljZSgpIDogW107XG4gIGNvbnN0IHBhZHMgPSBhdHRyaWJ1dGVzLnBhZHMuc2xpY2UoKTtcbiAgUG9vbENvbnZVdGlsLmFkanVzdFBvb2xBdHRyaWJ1dGVzKGlzR2xvYmFsT3BlcmF0b3IsIGlucHV0U2hhcGVBc0NoYW5uZWxGaXJzdCwga2VybmVsU2hhcGUsIHN0cmlkZXMsIGRpbGF0aW9ucywgcGFkcyk7XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGVBc0NoYW5uZWxGaXJzdCA9IFBvb2xDb252VXRpbC5jb21wdXRlUG9vbE91dHB1dFNoYXBlKFxuICAgICAgaXNHbG9iYWxPcGVyYXRvciwgaW5wdXRTaGFwZUFzQ2hhbm5lbEZpcnN0LCBzdHJpZGVzLCBkaWxhdGlvbnMsIGtlcm5lbFNoYXBlLCBwYWRzLCBhdHRyaWJ1dGVzLmF1dG9QYWQpO1xuXG4gIGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKHt9LCBhdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc0RpbGF0aW9ucykge1xuICAgIE9iamVjdC5hc3NpZ24obmV3QXR0cmlidXRlcywge2tlcm5lbFNoYXBlLCBzdHJpZGVzLCBwYWRzLCBkaWxhdGlvbnMsIGNhY2hlS2V5OiBhdHRyaWJ1dGVzLmNhY2hlS2V5fSk7XG4gIH0gZWxzZSB7XG4gICAgT2JqZWN0LmFzc2lnbihuZXdBdHRyaWJ1dGVzLCB7a2VybmVsU2hhcGUsIHN0cmlkZXMsIHBhZHMsIGNhY2hlS2V5OiBhdHRyaWJ1dGVzLmNhY2hlS2V5fSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0U2hhcGVBc0NoYW5uZWxMYXN0ID0gb3V0cHV0U2hhcGVBc0NoYW5uZWxGaXJzdC5zbGljZSgpO1xuICBvdXRwdXRTaGFwZUFzQ2hhbm5lbExhc3QucHVzaChvdXRwdXRTaGFwZUFzQ2hhbm5lbExhc3Quc3BsaWNlKDEsIDEpWzBdKTtcbiAgcmV0dXJuIFtuZXdBdHRyaWJ1dGVzLCBpc0NoYW5uZWxzTGFzdCA/IG91dHB1dFNoYXBlQXNDaGFubmVsTGFzdCA6IG91dHB1dFNoYXBlQXNDaGFubmVsRmlyc3RdO1xufTtcblxuY29uc3QgZ2V0VW5pZm9ybUFuZFBhZEluZm8gPSA8QXR0cmlidXRlVHlwZSBleHRlbmRzIEF2ZXJhZ2VQb29sQXR0cmlidXRlc3xNYXhQb29sQXR0cmlidXRlcz4oXG4gICAgb3V0cHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLFxuICAgIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVR5cGUpOiBbUHJvZ3JhbVVuaWZvcm1bXSwgVW5pZm9ybXNBcnJheVR5cGUsIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW5dID0+IHtcbiAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICBjb25zdCBrZXJuZWxTaXplID0gU2hhcGVVdGlsLnNpemUoYXR0cmlidXRlcy5rZXJuZWxTaGFwZSk7XG4gIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9XG4gICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGtlcm5lbFNpemV9XTtcbiAgY29uc3QgdW5pZm9ybXM6IFVuaWZvcm1zQXJyYXlUeXBlID0gW3tuYW1lOiAnb3V0cHV0U2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdrZXJuZWxTaXplJywgdHlwZTogJ3UzMid9XTtcbiAgaWYgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoIDw9IDIpIHtcbiAgICBjb25zdCBrdyA9IGF0dHJpYnV0ZXMua2VybmVsU2hhcGVbYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzdyA9IGF0dHJpYnV0ZXMuc3RyaWRlc1thdHRyaWJ1dGVzLnN0cmlkZXMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgcHdTdGFydCA9IGF0dHJpYnV0ZXMucGFkc1thdHRyaWJ1dGVzLnBhZHMubGVuZ3RoIC8gMiAtIDFdO1xuICAgIGNvbnN0IHB3RW5kID0gYXR0cmlidXRlcy5wYWRzW2F0dHJpYnV0ZXMucGFkcy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBwd1N0YXJ0RW5kTm90WmVybyA9ICEhKHB3U3RhcnQgKyBwd0VuZCk7XG4gICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGt3fSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogc3d9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBwd1N0YXJ0fSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcHdFbmR9LFxuICAgICk7XG4gICAgdW5pZm9ybXMucHVzaChcbiAgICAgICAge25hbWU6ICdrdycsIHR5cGU6ICd1MzInfSwge25hbWU6ICdzdycsIHR5cGU6ICd1MzInfSwge25hbWU6ICdwd1N0YXJ0JywgdHlwZTogJ3UzMid9LFxuICAgICAgICB7bmFtZTogJ3B3RW5kJywgdHlwZTogJ3UzMid9KTtcblxuICAgIGxldCBwaFN0YXJ0RW5kTm90WmVybyA9IGZhbHNlO1xuICAgIGlmIChhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3Qga2ggPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlW2F0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoIC0gMl07XG4gICAgICBjb25zdCBzaCA9IGF0dHJpYnV0ZXMuc3RyaWRlc1thdHRyaWJ1dGVzLnN0cmlkZXMubGVuZ3RoIC0gMl07XG4gICAgICBjb25zdCBwaFN0YXJ0ID0gYXR0cmlidXRlcy5wYWRzW2F0dHJpYnV0ZXMucGFkcy5sZW5ndGggLyAyIC0gMl07XG4gICAgICBjb25zdCBwaEVuZCA9IGF0dHJpYnV0ZXMucGFkc1thdHRyaWJ1dGVzLnBhZHMubGVuZ3RoIC0gMl07XG4gICAgICBwaFN0YXJ0RW5kTm90WmVybyA9ICEhKHBoU3RhcnQgKyBwaEVuZCk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaChcbiAgICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBraH0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHNofSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGhTdGFydH0sXG4gICAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGhFbmR9KTtcblxuICAgICAgdW5pZm9ybXMucHVzaChcbiAgICAgICAgICB7bmFtZTogJ2toJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ3NoJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ3BoU3RhcnQnLCB0eXBlOiAndTMyJ30sXG4gICAgICAgICAge25hbWU6ICdwaEVuZCcsIHR5cGU6ICd1MzInfSk7XG4gICAgfVxuICAgIHJldHVybiBbcHJvZ3JhbVVuaWZvcm1zLCB1bmlmb3JtcywgdHJ1ZSwgcHdTdGFydEVuZE5vdFplcm8sIHBoU3RhcnRFbmROb3RaZXJvXTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNDaGFubmVsc0xhc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUG9vbGluZyB3aXRoIGtlcm5lbFNoYXBlLmxlbmd0aCA+IDIgaXMgbm90IHN1cHBvcnRlZCBmb3IgTkhXQyBmb3JtYXQuJyk7XG4gICAgfVxuICAgIGNvbnN0IGtlcm5lbFN0cmlkZXMgPSBTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoYXR0cmlidXRlcy5rZXJuZWxTaGFwZSk7XG4gICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGtlcm5lbFN0cmlkZXN9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBhdHRyaWJ1dGVzLnBhZHN9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBhdHRyaWJ1dGVzLnN0cmlkZXN9KTtcbiAgICB1bmlmb3Jtcy5wdXNoKFxuICAgICAgICB7bmFtZTogJ2tlcm5lbFN0cmlkZXMnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBrZXJuZWxTdHJpZGVzLmxlbmd0aH0sXG4gICAgICAgIHtuYW1lOiAncGFkcycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGF0dHJpYnV0ZXMucGFkcy5sZW5ndGh9LFxuICAgICAgICB7bmFtZTogJ3N0cmlkZXMnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBhdHRyaWJ1dGVzLnN0cmlkZXMubGVuZ3RofSk7XG5cbiAgICBjb25zdCBoYXNQYWRzID0gYXR0cmlidXRlcy5wYWRzLnJlZHVjZSgoc3VtLCBjdXIpID0+IHN1bSArIGN1cik7XG4gICAgcmV0dXJuIFtwcm9ncmFtVW5pZm9ybXMsIHVuaWZvcm1zLCAhIWhhc1BhZHMsIGZhbHNlLCBmYWxzZV07XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlUG9vbGluZ0NvZGUgPSA8QXR0cmlidXRlVHlwZSBleHRlbmRzIEF2ZXJhZ2VQb29sQXR0cmlidXRlc3xNYXhQb29sQXR0cmlidXRlcz4oXG4gICAgc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIsIHg6IEluZGljZXNIZWxwZXIsIHJhbms6IG51bWJlciwgb3V0cHV0U2hhcGVSYW5rOiBudW1iZXIsIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVR5cGUsXG4gICAgb3AxOiBzdHJpbmcsIG9wMjogc3RyaW5nLCBzdGFydDogbnVtYmVyLCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUsIGhhc1BhZHM6IGJvb2xlYW4sIHB3U3RhcnRFbmROb3RaZXJvOiBib29sZWFuLFxuICAgIHBoU3RhcnRFbmROb3RaZXJvOiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICBjb25zdCBkYXRhVHlwZSA9IHgudHlwZS52YWx1ZTtcbiAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIHgudHlwZS50ZW5zb3IsIG91dHB1dFNoYXBlUmFuayk7XG5cbiAgaWYgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoIDw9IDIpIHtcbiAgICBsZXQgY29kZVcgPSAnJztcbiAgICBsZXQgY29kZUggPSAnJztcbiAgICBsZXQgY29kZUhFbmQgPSAnJztcbiAgICBjb25zdCBkaW1JZHhXID0gcmFuayAtIChpc0NoYW5uZWxzTGFzdCA/IDIgOiAxKTtcbiAgICBpZiAocHdTdGFydEVuZE5vdFplcm8pIHtcbiAgICAgIGNvZGVXID0gYFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IDB1OyBpIDwgdW5pZm9ybXMua3c7IGkrKykge1xuICAgICAgICAgICAgICAgICAgeEluZGljZXNbJHtkaW1JZHhXfV0gPSBpbmRpY2VzWyR7ZGltSWR4V31dICogdW5pZm9ybXMuc3cgLSB1bmlmb3Jtcy5wd1N0YXJ0ICsgaTtcbiAgICAgICAgICAgICAgICAgIGlmICh4SW5kaWNlc1ske2RpbUlkeFd9XSA8IDAgfHwgeEluZGljZXNbJHtkaW1JZHhXfV1cbiAgICAgICAgICAgICAgICAgICAgICA+PSB1bmlmb3Jtcy54X3NoYXBlWyR7ZGltSWR4V31dKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZCsrO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGxldCB4X3ZhbCA9IHhbJHt4LmluZGljZXNUb09mZnNldCgneEluZGljZXMnKX1dO1xuICAgICAgICAgICAgICAgICAgJHtvcDF9XG4gICAgICAgICAgICAgICAgfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGVXID0gYFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IDB1OyBpIDwgdW5pZm9ybXMua3c7IGkrKykge1xuICAgICAgICAgICAgICAgICAgeEluZGljZXNbJHtkaW1JZHhXfV0gPSBpbmRpY2VzWyR7ZGltSWR4V31dICogdW5pZm9ybXMuc3cgLSB1bmlmb3Jtcy5wd1N0YXJ0ICsgaTtcbiAgICAgICAgICAgICAgICAgIGxldCB4X3ZhbCA9IHhbJHt4LmluZGljZXNUb09mZnNldCgneEluZGljZXMnKX1dO1xuICAgICAgICAgICAgICAgICAgJHtvcDF9XG4gICAgICAgICAgICAgICAgfWA7XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCBkaW1JZHhIID0gcmFuayAtIChpc0NoYW5uZWxzTGFzdCA/IDMgOiAyKTtcbiAgICAgIGlmIChwaFN0YXJ0RW5kTm90WmVybykge1xuICAgICAgICBjb2RlSCA9IGBcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqOiB1MzIgPSAwdTsgaiA8IHVuaWZvcm1zLmtoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgIHhJbmRpY2VzWyR7ZGltSWR4SH1dID0gaW5kaWNlc1ske2RpbUlkeEh9XSAqIHVuaWZvcm1zLnNoIC0gdW5pZm9ybXMucGhTdGFydCArIGo7XG4gICAgICAgICAgICAgICAgICBpZiAoeEluZGljZXNbJHtkaW1JZHhIfV0gPCAwIHx8IHhJbmRpY2VzWyR7ZGltSWR4SH1dID49IHVuaWZvcm1zLnhfc2hhcGVbJHtkaW1JZHhIfV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkICs9IGkzMih1bmlmb3Jtcy5rdyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kZUggPSBgXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgajogdTMyID0gMHU7IGogPCB1bmlmb3Jtcy5raDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICB4SW5kaWNlc1ske2RpbUlkeEh9XSA9IGluZGljZXNbJHtkaW1JZHhIfV0gKiB1bmlmb3Jtcy5zaCAtIHVuaWZvcm1zLnBoU3RhcnQgKyBqO1xuICAgICAgICAgICAgICAgIGA7XG4gICAgICB9XG4gICAgICBjb2RlSEVuZCA9IGBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYDtcbiAgICB9XG5cbiAgICBjb25zdCBwb29saW5nQ29kZSA9IGBcbiAgICAgICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoeCwgb3V0cHV0KX1cblxuICAgICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dFNpemUnKX1cblxuICAgICAgICAgICAgICBsZXQgaW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcbiAgICAgICAgICAgICAgdmFyIHhJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuXG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICR7ZGF0YVR5cGV9KCR7c3RhcnR9KTtcbiAgICAgICAgICAgICAgdmFyIHBhZCA9IDA7XG4gICAgICAgICAgICAgICR7Y29kZUh9XG4gICAgICAgICAgICAgICR7Y29kZVd9XG4gICAgICAgICAgICAgICR7Y29kZUhFbmR9XG4gICAgICAgICAgICAgICR7b3AyfVxuXG4gICAgICAgICAgICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfWA7XG4gICAgcmV0dXJuIHBvb2xpbmdDb2RlO1xuICB9IGVsc2Uge1xuICAgIGlmIChpc0NoYW5uZWxzTGFzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb29saW5nIHdpdGgga2VybmVsU2hhcGUubGVuZ3RoID4gMiBpcyBub3Qgc3VwcG9ydGVkIGZvciBOSFdDIGZvcm1hdC4nKTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaWRlc1JhbmsgPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLmxlbmd0aDtcbiAgICBjb25zdCBwYWRzUmFuayA9IGF0dHJpYnV0ZXMucGFkcy5sZW5ndGg7XG4gICAgbGV0IHBhZENvZGUgPSAnJztcbiAgICBpZiAoaGFzUGFkcykge1xuICAgICAgcGFkQ29kZSA9IGBcbiAgICAgICAgICAgICAgICBpZiAoeEluZGljZXNbal0gPj0gdW5pZm9ybXMueF9zaGFwZVtqXSkge1xuICAgICAgICAgICAgICAgICAgcGFkKys7XG4gICAgICAgICAgICAgICAgICBpc1BhZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFpc1BhZCkge1xuICAgICAgICAgICAgICAgIGxldCB4X3ZhbCA9IHhbJHt4LmluZGljZXNUb09mZnNldCgneEluZGljZXMnKX1dO1xuICAgICAgICAgICAgICAgICR7b3AxfVxuICAgICAgICAgICAgICB9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFkQ29kZSA9IGBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgeF92YWwgPSB4WyR7eC5pbmRpY2VzVG9PZmZzZXQoJ3hJbmRpY2VzJyl9XTtcbiAgICAgICAgICAgICAgJHtvcDF9XG4gICAgICAgICAgICBgO1xuICAgIH1cbiAgICBjb25zdCBwb29saW5nQ29kZSA9IGBcbiAgICAgICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoeCwgb3V0cHV0KX1cblxuICAgICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dFNpemUnKX1cbiAgICAgICAgICAgICAgbGV0IGluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgICAgICAgICAgIHZhciB4SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcblxuICAgICAgICAgICAgICB2YXIgb2Zmc2V0czogYXJyYXk8dTMyLCAke3N0cmlkZXNSYW5rfT47XG5cbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJHtkYXRhVHlwZX0oJHtzdGFydH0pO1xuICAgICAgICAgICAgICB2YXIgcGFkID0gMDtcbiAgICAgICAgICAgICAgdmFyIGlzUGFkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaTogdTMyID0gMHU7IGkgPCB1bmlmb3Jtcy5rZXJuZWxTaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gaTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMHU7IGogPCAke3N0cmlkZXNSYW5rIC0gMX11OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgIG9mZnNldHNbal0gPSBvZmZzZXQgLyAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMua2VybmVsU3RyaWRlcycsICdqJywgc3RyaWRlc1JhbmspfTtcbiAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBvZmZzZXRzW2pdICogJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLmtlcm5lbFN0cmlkZXMnLCAnaicsIHN0cmlkZXNSYW5rKX07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNldHNbJHtzdHJpZGVzUmFuayAtIDF9XSA9IG9mZnNldDtcblxuICAgICAgICAgICAgICAgIGlzUGFkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9ICR7cmFuayAtIHN0cmlkZXNSYW5rfXU7IGogPCAke3Jhbmt9dTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICB4SW5kaWNlc1tqXSA9IGluZGljZXNbal0gKiAke1xuICAgICAgICBnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnN0cmlkZXMnLCBgaiAtICR7cmFuayAtIHN0cmlkZXNSYW5rfXVgLCBzdHJpZGVzUmFuayl9XG4gICAgICAgICAgICAgICAgICAgICsgb2Zmc2V0c1tqIC0gJHtyYW5rIC0gc3RyaWRlc1Jhbmt9dV0gLSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMucGFkcycsICdqIC0gMnUnLCBwYWRzUmFuayl9O1xuICAgICAgICAgICAgICAgICAgJHtwYWRDb2RlfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICR7b3AyfVxuXG4gICAgICAgICAgICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfWA7XG4gICAgcmV0dXJuIHBvb2xpbmdDb2RlO1xuICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdEF0dHJpYnV0ZXMge1xuICByZWFkb25seSBmb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9vbENvbW1vbkF0dHJpYnV0ZXMgZXh0ZW5kcyBGb3JtYXRBdHRyaWJ1dGVzIHtcbiAgcmVhZG9ubHkgYXV0b1BhZDogc3RyaW5nO1xuICByZWFkb25seSBjZWlsTW9kZTogbnVtYmVyO1xuICByZWFkb25seSBrZXJuZWxTaGFwZTogcmVhZG9ubHkgbnVtYmVyW107XG4gIHJlYWRvbmx5IHN0cmlkZXM6IHJlYWRvbmx5IG51bWJlcltdO1xuICByZWFkb25seSBwYWRzOiByZWFkb25seSBudW1iZXJbXTtcbn1cblxuY29uc3QgY3JlYXRlU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUG9vbENvbW1vbkF0dHJpYnV0ZXMpOiBzdHJpbmcgPT5cbiAgICAoYCR7YXR0cmlidXRlcy5mb3JtYXR9OyR7YXR0cmlidXRlcy5jZWlsTW9kZX07JHthdHRyaWJ1dGVzLmF1dG9QYWR9OyR7YXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGh9YCk7XG5cbmNvbnN0IGNyZWF0ZUF2ZXJhZ2VQb29sU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogQXZlcmFnZVBvb2xBdHRyaWJ1dGVzKTogc3RyaW5nID0+XG4gICAgKGAke2NyZWF0ZVNoYWRlcktleUZyb21BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpfTske2F0dHJpYnV0ZXMuY291bnRJbmNsdWRlUGFkfWApO1xuXG5jb25zdCBjcmVhdGVNYXhQb29sU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogTWF4UG9vbEF0dHJpYnV0ZXMpOiBzdHJpbmcgPT5cbiAgICAoYCR7Y3JlYXRlU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMoYXR0cmlidXRlcyl9OyR7YXR0cmlidXRlcy5zdG9yYWdlT3JkZXJ9OyR7YXR0cmlidXRlcy5kaWxhdGlvbnN9YCk7XG5cbmNvbnN0IHBhcnNlUG9vbENvbW1vbkF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQb29sQ29tbW9uQXR0cmlidXRlcyA9PiAoe1xuICBmb3JtYXQ6IGF0dHJpYnV0ZXMuZm9ybWF0IGFzIEZvcm1hdEF0dHJpYnV0ZXNbJ2Zvcm1hdCddLFxuICBhdXRvUGFkOiBbJ05PVFNFVCcsICdWQUxJRCcsICdTQU1FX1VQUEVSJywgJ1NBTUVfTE9XRVInXVthdHRyaWJ1dGVzLmF1dG9fcGFkIGFzIG51bWJlcl0sXG4gIGNlaWxNb2RlOiBhdHRyaWJ1dGVzLmNlaWxfbW9kZSBhcyBudW1iZXIsXG4gIGtlcm5lbFNoYXBlOiBhdHRyaWJ1dGVzLmtlcm5lbF9zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICBzdHJpZGVzOiBhdHRyaWJ1dGVzLnN0cmlkZXMgYXMgW251bWJlciwgbnVtYmVyXSxcbiAgcGFkczogYXR0cmlidXRlcy5wYWRzIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBBdmVyYWdlUG9vbEF0dHJpYnV0ZXMgZXh0ZW5kcyBQb29sQ29tbW9uQXR0cmlidXRlcywgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgY291bnRJbmNsdWRlUGFkOiBib29sZWFuO1xufVxuXG5jb25zdCBjcmVhdGVBdmVyYWdlUG9vbFByb2dyYW1JbmZvID1cbiAgICAobmFtZTogc3RyaW5nLCBpbnB1dDogVGVuc29yVmlldywgaXNHbG9iYWxPcGVyYXRvcjogYm9vbGVhbiwgYXR0cmlidXRlczogQXZlcmFnZVBvb2xBdHRyaWJ1dGVzKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3QgW2FkanVzdGVkQXR0cmlidXRlcywgb3V0cHV0U2hhcGVdID1cbiAgICAgICAgICBnZXRBZGp1c3RlZFBvb2xBdHRyaWJ1dGVzQW5kT3V0cHV0U2hhcGUoaW5wdXQsIGF0dHJpYnV0ZXMsIGlzR2xvYmFsT3BlcmF0b3IpO1xuICAgICAgY29uc3QgeCA9IGlucHV0VmFyaWFibGUoJ3gnLCBpbnB1dC5kYXRhVHlwZSwgaW5wdXQuZGltcy5sZW5ndGgpO1xuICAgICAgY29uc3QgZGF0YVR5cGUgPSB4LnR5cGUudmFsdWU7XG5cbiAgICAgIGNvbnN0IG9wMSA9ICd2YWx1ZSArPSB4X3ZhbDsnO1xuICAgICAgbGV0IG9wMiA9ICcnO1xuICAgICAgaWYgKGFkanVzdGVkQXR0cmlidXRlcy5jb3VudEluY2x1ZGVQYWQpIHtcbiAgICAgICAgb3AyICs9IGB2YWx1ZSAvPSAke2RhdGFUeXBlfSh1bmlmb3Jtcy5rZXJuZWxTaXplKTtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3AyICs9IGB2YWx1ZSAvPSAke2RhdGFUeXBlfShpMzIodW5pZm9ybXMua2VybmVsU2l6ZSkgLSBwYWQpO2A7XG4gICAgICB9XG4gICAgICBjb25zdCBbcHJvZ3JhbVVuaWZvcm1zLCB1bmlmb3JtcywgaGFzUGFkcywgcHdTdGFydEVuZE5vdFplcm8sIHBoU3RhcnRFbmROb3RaZXJvXSA9XG4gICAgICAgICAgZ2V0VW5pZm9ybUFuZFBhZEluZm8ob3V0cHV0U2hhcGUsIGFkanVzdGVkQXR0cmlidXRlcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dC5kaW1zLCBvdXRwdXRTaGFwZSkpO1xuICAgICAgY29uc3QgaW5wdXREZXBlbmRlbmNpZXM6IFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5W10gPSBbJ3JhbmsnXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNoYWRlckNhY2hlOlxuICAgICAgICAgICAge2hpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9OyR7aGFzUGFkc307JHtwd1N0YXJ0RW5kTm90WmVyb307JHtwaFN0YXJ0RW5kTm90WmVyb31gLCBpbnB1dERlcGVuZGVuY2llc30sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0LmRhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSkgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlOiBzaGFkZXJIZWxwZXIgPT4gZ2VuZXJhdGVQb29saW5nQ29kZShcbiAgICAgICAgICAgIHNoYWRlckhlbHBlciwgeCwgaW5wdXQuZGltcy5sZW5ndGgsIG91dHB1dFNoYXBlLmxlbmd0aCwgYWRqdXN0ZWRBdHRyaWJ1dGVzLCBvcDEsIG9wMiwgMC4wLCB1bmlmb3JtcyxcbiAgICAgICAgICAgIGhhc1BhZHMsIHB3U3RhcnRFbmROb3RaZXJvLCBwaFN0YXJ0RW5kTm90WmVybyksXG4gICAgICB9O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUF2ZXJhZ2VQb29sQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEF2ZXJhZ2VQb29sQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IGNvdW50SW5jbHVkZVBhZCA9IChhdHRyaWJ1dGVzLmNvdW50X2luY2x1ZGVfcGFkIGFzIG51bWJlcikgPT09IDAgPyBmYWxzZSA6IHRydWU7XG5cbiAgY29uc3QgYXR0ciA9IHBhcnNlUG9vbENvbW1vbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gIC8vIFRPRE86IHN1cHBvcnQgYXR0cmlidXRlICdjZWlsX21vZGUnXG4gIGlmIChhdHRyLmNlaWxNb2RlICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2luZyBjZWlsKCkgaW4gc2hhcGUgY29tcHV0YXRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIEF2ZXJhZ2VQb29sJyk7XG4gIH1cbiAgY29uc3QgYXZlcmFnZVBvb2xBdHRyaWJ1dGVzID0ge2NvdW50SW5jbHVkZVBhZCwgLi4uYXR0ciwgY2FjaGVLZXk6ICcnfTtcbiAgcmV0dXJuIHsuLi5hdmVyYWdlUG9vbEF0dHJpYnV0ZXMsIGNhY2hlS2V5OiBjcmVhdGVBdmVyYWdlUG9vbFNoYWRlcktleUZyb21BdHRyaWJ1dGVzKGF2ZXJhZ2VQb29sQXR0cmlidXRlcyl9O1xufTtcblxuZXhwb3J0IGNvbnN0IGF2ZXJhZ2VQb29sID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBBdmVyYWdlUG9vbEF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQXZlcmFnZVBvb2xQcm9ncmFtSW5mbygnQXZlcmFnZVBvb2wnLCBjb250ZXh0LmlucHV0c1swXSwgZmFsc2UsIGF0dHJpYnV0ZXMpKTtcbn07XG5cbmNvbnN0IGdsb2JhbFBvb2xBdHRyaWJ1dGVzID0ge1xuICBhdXRvUGFkOiAnJyxcbiAgY2VpbE1vZGU6IDAsXG4gIGNvdW50SW5jbHVkZVBhZDogZmFsc2UsXG4gIGtlcm5lbFNoYXBlOiBbXSxcbiAgc3RyaWRlczogW10sXG4gIHBhZHM6IFtdLFxuICBzdG9yYWdlT3JkZXI6IDAsXG4gIGRpbGF0aW9uczogW11cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUdsb2JhbEF2ZXJhZ2VQb29sQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEF2ZXJhZ2VQb29sQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IGZvcm1hdCA9IGF0dHJpYnV0ZXMuZm9ybWF0IGFzIEZvcm1hdEF0dHJpYnV0ZXNbJ2Zvcm1hdCddO1xuICByZXR1cm4ge2Zvcm1hdCwgLi4uZ2xvYmFsUG9vbEF0dHJpYnV0ZXMsIGNhY2hlS2V5OiBmb3JtYXR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdsb2JhbEF2ZXJhZ2VQb29sID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBBdmVyYWdlUG9vbEF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQXZlcmFnZVBvb2xQcm9ncmFtSW5mbygnR2xvYmFsQXZlcmFnZVBvb2wnLCBjb250ZXh0LmlucHV0c1swXSwgdHJ1ZSwgYXR0cmlidXRlcykpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXhQb29sQXR0cmlidXRlcyBleHRlbmRzIFBvb2xDb21tb25BdHRyaWJ1dGVzLCBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBzdG9yYWdlT3JkZXI6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGlsYXRpb25zOiBudW1iZXJbXTtcbn1cblxuY29uc3QgY3JlYXRlTWF4UG9vbFByb2dyYW1JbmZvID1cbiAgICAobmFtZTogc3RyaW5nLCBpbnB1dDogVGVuc29yVmlldywgaXNHbG9iYWxPcGVyYXRvcjogYm9vbGVhbiwgYXR0cmlidXRlczogTWF4UG9vbEF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBbYWRqdXN0ZWRBdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZV0gPVxuICAgICAgICAgIGdldEFkanVzdGVkUG9vbEF0dHJpYnV0ZXNBbmRPdXRwdXRTaGFwZShpbnB1dCwgYXR0cmlidXRlcywgaXNHbG9iYWxPcGVyYXRvcik7XG4gICAgICBjb25zdCBvcDEgPSBgXG4gICAgICB2YWx1ZSA9IG1heCh4X3ZhbCwgdmFsdWUpO1xuICAgIGA7XG4gICAgICBjb25zdCBvcDIgPSAnJztcbiAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKCd4JywgaW5wdXQuZGF0YVR5cGUsIGlucHV0LmRpbXMubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJ107XG4gICAgICBjb25zdCBbcHJvZ3JhbVVuaWZvcm1zLCB1bmlmb3JtcywgaGFzUGFkcywgcHdTdGFydEVuZE5vdFplcm8sIHBoU3RhcnRFbmROb3RaZXJvXSA9XG4gICAgICAgICAgZ2V0VW5pZm9ybUFuZFBhZEluZm8ob3V0cHV0U2hhcGUsIGFkanVzdGVkQXR0cmlidXRlcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dC5kaW1zLCBvdXRwdXRTaGFwZSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2hhZGVyQ2FjaGU6XG4gICAgICAgICAgICB7aGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX07JHtoYXNQYWRzfTske3B3U3RhcnRFbmROb3RaZXJvfTske3BoU3RhcnRFbmROb3RaZXJvfWAsIGlucHV0RGVwZW5kZW5jaWVzfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXQuZGF0YVR5cGV9XSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgIH0pLFxuICAgICAgICBnZXRTaGFkZXJTb3VyY2U6IHNoYWRlckhlbHBlciA9PiBnZW5lcmF0ZVBvb2xpbmdDb2RlKFxuICAgICAgICAgICAgc2hhZGVySGVscGVyLCB4LCBpbnB1dC5kaW1zLmxlbmd0aCwgb3V0cHV0U2hhcGUubGVuZ3RoLCBhZGp1c3RlZEF0dHJpYnV0ZXMsIG9wMSwgb3AyLFxuICAgICAgICAgICAgKGlucHV0LmRhdGFUeXBlID09PSBEYXRhVHlwZS5mbG9hdDE2KSA/IC02NTUwNCA6IC0xZTUsIHVuaWZvcm1zLCBoYXNQYWRzLCBwd1N0YXJ0RW5kTm90WmVybyxcbiAgICAgICAgICAgIHBoU3RhcnRFbmROb3RaZXJvKSxcbiAgICAgIH07XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IG1heFBvb2wgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IE1heFBvb2xBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZU1heFBvb2xQcm9ncmFtSW5mbygnTWF4UG9vbCcsIGNvbnRleHQuaW5wdXRzWzBdLCBmYWxzZSwgYXR0cmlidXRlcykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlTWF4UG9vbEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBNYXhQb29sQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IHN0b3JhZ2VPcmRlciA9IGF0dHJpYnV0ZXMuc3RvcmFnZV9vcmRlciBhcyBudW1iZXI7XG4gIGNvbnN0IGRpbGF0aW9ucyA9IGF0dHJpYnV0ZXMuZGlsYXRpb25zIGFzIFtudW1iZXIsIG51bWJlcl07XG5cbiAgY29uc3QgYXR0ciA9IHBhcnNlUG9vbENvbW1vbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gIC8vIFRPRE86IHN1cHBvcnQgYXR0cmlidXRlICdjZWlsX21vZGUnIGFuZCAnc3RvcmFnZV9vcmRlcidcbiAgaWYgKHN0b3JhZ2VPcmRlciAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY29sdW1uIG1ham9yIHN0b3JhZ2Ugb3JkZXIgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIE1heFBvb2wnKTtcbiAgfVxuICBpZiAoYXR0ci5jZWlsTW9kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNpbmcgY2VpbCgpIGluIHNoYXBlIGNvbXB1dGF0aW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBNYXhQb29sJyk7XG4gIH1cbiAgY29uc3QgbWF4UG9vbEF0dHJpYnV0ZXMgPSB7c3RvcmFnZU9yZGVyLCBkaWxhdGlvbnMsIC4uLmF0dHIsIGNhY2hlS2V5OiAnJ307XG4gIHJldHVybiB7Li4ubWF4UG9vbEF0dHJpYnV0ZXMsIGNhY2hlS2V5OiBjcmVhdGVNYXhQb29sU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMobWF4UG9vbEF0dHJpYnV0ZXMpfTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUdsb2JhbE1heFBvb2xBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogTWF4UG9vbEF0dHJpYnV0ZXMgPT4ge1xuICBjb25zdCBmb3JtYXQgPSBhdHRyaWJ1dGVzLmZvcm1hdCBhcyBGb3JtYXRBdHRyaWJ1dGVzWydmb3JtYXQnXTtcbiAgcmV0dXJuIHtmb3JtYXQsIC4uLmdsb2JhbFBvb2xBdHRyaWJ1dGVzLCBjYWNoZUtleTogZm9ybWF0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnbG9iYWxNYXhQb29sID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBNYXhQb29sQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVNYXhQb29sUHJvZ3JhbUluZm8oJ0dsb2JhbE1heFBvb2wnLCBjb250ZXh0LmlucHV0c1swXSwgdHJ1ZSwgYXR0cmlidXRlcykpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtlbnZ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCBVbmlmb3JtRGF0YUVsZW1lbnRUeXBlLCBVbmlmb3Jtc0FycmF5VHlwZX0gZnJvbSAnLi9jb21tb24nO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0c0NvbnRlbnQgPSAoc3RhcnQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgZGVsdGE6IG51bWJlcik6IHZvaWQgPT4ge1xuICBjb25zdCBzYW1lU3RhcnRMaW1pdCA9IHN0YXJ0ID09PSBsaW1pdDtcbiAgY29uc3QgaW5jcmVhc2luZ1JhbmdlTmVnYXRpdmVTdGVwID0gc3RhcnQgPCBsaW1pdCAmJiBkZWx0YSA8IDA7XG4gIGNvbnN0IGRlY3JlYXNpbmdSYW5nZVBvc2l0aXZlU3RlcCA9IHN0YXJ0ID4gbGltaXQgJiYgZGVsdGEgPiAwO1xuXG4gIGlmIChzYW1lU3RhcnRMaW1pdCB8fCBpbmNyZWFzaW5nUmFuZ2VOZWdhdGl2ZVN0ZXAgfHwgZGVjcmVhc2luZ1JhbmdlUG9zaXRpdmVTdGVwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSYW5nZSB0aGVzZSBpbnB1dHNcXCcgY29udGVudHMgYXJlIGludmFsaWQuJyk7XG4gIH1cbn07XG5cbmNvbnN0IGNyZWF0ZVJhbmdlUHJvZ3JhbUluZm8gPSAoc3RhcnQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgZGVsdGE6IG51bWJlciwgZGF0YVR5cGU6IERhdGFUeXBlKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBudW1FbGVtZW50cyA9IE1hdGguYWJzKE1hdGguY2VpbCgobGltaXQgLSBzdGFydCkgLyBkZWx0YSkpO1xuICBjb25zdCBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbbnVtRWxlbWVudHNdO1xuICBjb25zdCBvdXRwdXRTaXplID0gbnVtRWxlbWVudHM7XG4gIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBvdXRwdXRTaXplfSwge3R5cGU6IGRhdGFUeXBlLCBkYXRhOiBzdGFydH0sIHt0eXBlOiBkYXRhVHlwZSwgZGF0YTogZGVsdGF9LFxuICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dHB1dFNoYXBlKVxuICBdO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBkYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICBjb25zdCB3Z3NsVHlwZSA9IG91dHB1dC50eXBlLnZhbHVlO1xuICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgIHtuYW1lOiAnb3V0cHV0U2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdzdGFydCcsIHR5cGU6IHdnc2xUeXBlIGFzIFVuaWZvcm1EYXRhRWxlbWVudFR5cGV9LFxuICAgICAge25hbWU6ICdkZWx0YScsIHR5cGU6IHdnc2xUeXBlIGFzIFVuaWZvcm1EYXRhRWxlbWVudFR5cGV9XG4gICAgXTtcbiAgICByZXR1cm4gYFxuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKG91dHB1dCl9XG4gICAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRTaXplJyl9XG4gICAgICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9IHVuaWZvcm1zLnN0YXJ0ICsgJHt3Z3NsVHlwZX0oZ2xvYmFsX2lkeCkgKiB1bmlmb3Jtcy5kZWx0YTtcbiAgICAgIH1gO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1JhbmdlJyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke2RhdGFUeXBlfWB9LFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICB9KVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJhbmdlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGxldCBzdGFydCA9IDA7XG4gIGxldCBsaW1pdCA9IDA7XG4gIGxldCBkZWx0YSA9IDA7XG4gIGlmIChjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuaW50MzIpIHtcbiAgICBzdGFydCA9IGNvbnRleHQuaW5wdXRzWzBdLmdldEludDMyQXJyYXkoKVswXTtcbiAgICBsaW1pdCA9IGNvbnRleHQuaW5wdXRzWzFdLmdldEludDMyQXJyYXkoKVswXTtcbiAgICBkZWx0YSA9IGNvbnRleHQuaW5wdXRzWzJdLmdldEludDMyQXJyYXkoKVswXTtcbiAgfSBlbHNlIGlmIChjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuZmxvYXQpIHtcbiAgICBzdGFydCA9IGNvbnRleHQuaW5wdXRzWzBdLmdldEZsb2F0MzJBcnJheSgpWzBdO1xuICAgIGxpbWl0ID0gY29udGV4dC5pbnB1dHNbMV0uZ2V0RmxvYXQzMkFycmF5KClbMF07XG4gICAgZGVsdGEgPSBjb250ZXh0LmlucHV0c1syXS5nZXRGbG9hdDMyQXJyYXkoKVswXTtcbiAgfVxuICBpZiAoZW52LndlYmdwdS52YWxpZGF0ZUlucHV0Q29udGVudCkge1xuICAgIHZhbGlkYXRlSW5wdXRzQ29udGVudChzdGFydCwgbGltaXQsIGRlbHRhKTtcbiAgfVxuXG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVSYW5nZVByb2dyYW1JbmZvKHN0YXJ0LCBsaW1pdCwgZGVsdGEsIGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlKSwge2lucHV0czogW119KTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleSwgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgZ2V0RWxlbWVudEF0LCBJbmRpY2VzSGVscGVyLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyfSBmcm9tICcuL2NvbW1vbic7XG5cbnR5cGUgQ29vcmRpbmF0ZVRyYW5zZm9ybU1vZGUgPSAnaGFsZl9waXhlbCd8J2FzeW1tZXRyaWMnfCdweXRvcmNoX2hhbGZfcGl4ZWwnfCd0Zl9oYWxmX3BpeGVsX2Zvcl9ubid8J2FsaWduX2Nvcm5lcnMnfFxuICAgICd0Zl9jcm9wX2FuZF9yZXNpemUnfCdoYWxmX3BpeGVsX3N5bW1ldHJpYyc7XG5cbnR5cGUgS2VlcEFzcGVjdFJhdGlvUG9saWN5ID0gJ3N0cmV0Y2gnfCdub3Rfc21hbGxlcid8J25vdF9sYXJnZXInO1xuXG50eXBlIE1vZGUgPSAnbmVhcmVzdCd8J2xpbmVhcid8J2N1YmljJztcblxudHlwZSBOZWFyZXN0TW9kZSA9ICdyb3VuZF9wcmVmZXJfZmxvb3InfCdyb3VuZF9wcmVmZXJfY2VpbCd8J2Zsb29yJ3wnY2VpbCd8J3NpbXBsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXplQXR0cmlidXRlcyBleHRlbmRzIEF0dHJpYnV0ZVdpdGhDYWNoZUtleSB7XG4gIGFudGlhbGlhczogbnVtYmVyO1xuICBheGVzOiBudW1iZXJbXTtcbiAgY29vcmRpbmF0ZVRyYW5zZm9ybU1vZGU6IENvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlO1xuICBjdWJpY0NvZWZmQTogbnVtYmVyO1xuICBleGNsdWRlT3V0c2lkZTogYm9vbGVhbjtcbiAgZXh0cmFwb2xhdGlvblZhbHVlOiBudW1iZXI7XG4gIGtlZXBBc3BlY3RSYXRpb1BvbGljeTogS2VlcEFzcGVjdFJhdGlvUG9saWN5O1xuICBtb2RlOiBNb2RlO1xuICBuZWFyZXN0TW9kZTogTmVhcmVzdE1vZGU7XG59XG5cbmNvbnN0IHZhbGlkYXRlU2NhbGVzID0gKHNjYWxlczogbnVtYmVyW10sIGF0dHJpYnV0ZXM6IFJlc2l6ZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgc2NhbGVzLmV2ZXJ5KCh2YWx1ZSkgPT4gdmFsdWUgPiAwIHx8ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemUgcmVxdWlyZXMgc2NhbGVzIGlucHV0IHZhbHVlcyB0byBiZSBwb3NpdGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gIC8vIENoZWNrIHNjYWxlcyBkaW1zIGJhc2VkIG9uIG1vZGU6IExJTkVBUiwgQ1VCSUNcbiAgaWYgKHNjYWxlcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGF0dHJpYnV0ZXMubW9kZSA9PT0gJ2xpbmVhcicpIHtcbiAgICAgIGlmICghKHNjYWxlcy5sZW5ndGggPT09IDIgfHwgc2NhbGVzLmxlbmd0aCA9PT0gMyB8fCAoc2NhbGVzLmxlbmd0aCA9PT0gNCAmJiBzY2FsZXNbMF0gPT09IDEgJiYgc2NhbGVzWzFdID09PSAxKSB8fFxuICAgICAgICAgICAgKHNjYWxlcy5sZW5ndGggPT09IDQgJiYgc2NhbGVzWzBdID09PSAxICYmIHNjYWxlc1szXSA9PT0gMSkgfHxcbiAgICAgICAgICAgIChzY2FsZXMubGVuZ3RoID09PSA1ICYmIHNjYWxlc1swXSA9PT0gMSAmJiBzY2FsZXNbMV0gPT09IDEpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRm9yIGxpbmVhciBtb2RlLCBSZXNpemUgcmVxdWlyZXMgc2NhbGVzIHRvIGJlIDJELCAzRCwgNEQgd2l0aCBlaXRoZXIgdHdvIG91dGVybW9zdCBvciBvbmUgaW5uZXJtb3N0IGFuZFxuICAgICAgICAgICAgb25lIG91dGVybW9zdCBzY2FsZSB2YWx1ZXMgZXF1YWwgdG8gMSwgb3IgNUQgd2l0aCB0d28gb3V0ZXJtb3N0IHNjYWxlIHZhbHVlcyBlcXVhbCB0byAxYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLm1vZGUgPT09ICdjdWJpYycpIHtcbiAgICAgIGlmICghKHNjYWxlcy5sZW5ndGggPT09IDIgfHwgKHNjYWxlcy5sZW5ndGggPT09IDQgJiYgc2NhbGVzWzBdID09PSAxICYmIHNjYWxlc1sxXSA9PT0gMSkgfHxcbiAgICAgICAgICAgIChzY2FsZXMubGVuZ3RoID09PSA0ICYmIHNjYWxlc1swXSA9PT0gMSAmJiBzY2FsZXNbM10gPT09IDEpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc2l6ZSByZXF1aXJlcyBzY2FsZXMgaW5wdXQgc2l6ZSB0byBiZSAyIG9yIDQgZm9yIGN1YmljIG1vZGUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHVwZGF0ZVNjYWxlcyA9IChzY2FsZXM6IHJlYWRvbmx5IG51bWJlcltdLCBheGVzOiByZWFkb25seSBudW1iZXJbXSwgcmFuazogbnVtYmVyKTogbnVtYmVyW10gPT4ge1xuICBheGVzLmV2ZXJ5KCh2YWx1ZSkgPT4gdmFsdWUgPj0gMCAmJiB2YWx1ZSA8IHJhbmsgfHwgKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemUgcmVxdWlyZXMgYXhlcyBpbnB1dCB2YWx1ZXMgdG8gYmUgcG9zaXRpdmUgYW5kIGxlc3MgdGhhbiByYW5rJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gIGNvbnN0IG5ld1NjYWxlcyA9IG5ldyBBcnJheShyYW5rKS5maWxsKDEuMCk7XG4gIGF4ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiBuZXdTY2FsZXNbdmFsdWVdID0gc2NhbGVzW2luZGV4XSk7XG4gIHJldHVybiBuZXdTY2FsZXM7XG59O1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBSZXNpemVBdHRyaWJ1dGVzLCBvcHNldFZlcnNpb246IG51bWJlciwgc2NhbGVzOiBudW1iZXJbXSxcbiAgICAgc2l6ZXM6IG51bWJlcltdLCByb2k6IG51bWJlcltdKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBbcm9pSW5wdXRJbmRleCwgc2NhbGVzSW5wdXRJbmRleCwgc2l6ZXNJbnB1dEluZGV4XSA9XG4gICAgICAgICAgKG9wc2V0VmVyc2lvbiA+IDEwKSA/IFsxLCAyLCAzXSA6IFstMSwgKGlucHV0cy5sZW5ndGggPiAxKSA/IDEgOiAtMSwgLTFdO1xuICAgICAgY29uc3QgcmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aDtcbiAgICAgIGlmIChyb2lJbnB1dEluZGV4ID4gMCAmJiBpbnB1dHMubGVuZ3RoID4gcm9pSW5wdXRJbmRleCAmJiBpbnB1dHNbcm9pSW5wdXRJbmRleF0uZGltcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlucHV0c1tyb2lJbnB1dEluZGV4XS5nZXRGbG9hdDMyQXJyYXkoKS5mb3JFYWNoKCh2YWx1ZSkgPT4gcm9pLnB1c2godmFsdWUpKTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5jb29yZGluYXRlVHJhbnNmb3JtTW9kZSA9PT0gJ3RmX2Nyb3BfYW5kX3Jlc2l6ZScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemUgcmVxdWlyZXMgUm9JIGlucHV0IHRvIGJlIHNwZWNpZmllZCB3aGVuIGNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlIGlzIHRmQ3JvcEFuZFJlc2l6ZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NhbGVzSW5wdXRJbmRleCA+IDAgJiYgaW5wdXRzLmxlbmd0aCA+IHNjYWxlc0lucHV0SW5kZXggJiYgaW5wdXRzW3NjYWxlc0lucHV0SW5kZXhdLmRpbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpbnB1dHNbc2NhbGVzSW5wdXRJbmRleF0uZ2V0RmxvYXQzMkFycmF5KCkuZm9yRWFjaCgodmFsdWUpID0+IHNjYWxlcy5wdXNoKHZhbHVlKSk7XG4gICAgICAgIGlmIChzY2FsZXMubGVuZ3RoICE9PSAwICYmXG4gICAgICAgICAgICAoc2NhbGVzLmxlbmd0aCAhPT0gcmFuayAmJiAob3BzZXRWZXJzaW9uID49IDE4ICYmIHNjYWxlcy5sZW5ndGggIT09IGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGgpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ1Jlc2l6ZSByZXF1aXJlcyBzY2FsZXMgaW5wdXQgc2l6ZSB0byBiZSBzYW1lIGFzIGlucHV0IHJhbmsgb3IgYXhlcyBzaXplIGZvciBvcHNldCAxOCBhbmQgdXAnKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZVNjYWxlcyhzY2FsZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAoYXR0cmlidXRlcy5heGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB1cGRhdGVTY2FsZXMoc2NhbGVzLCBhdHRyaWJ1dGVzLmF4ZXMsIHJhbmspLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4gc2NhbGVzW2luZGV4XSA9IHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNpemVzSW5wdXRJbmRleCA+IDAgJiYgaW5wdXRzLmxlbmd0aCA+IHNpemVzSW5wdXRJbmRleCkge1xuICAgICAgICBpbnB1dHNbc2l6ZXNJbnB1dEluZGV4XS5nZXRCaWdJbnQ2NEFycmF5KCkuZm9yRWFjaCgodmFsdWUpID0+IHNpemVzLnB1c2goTnVtYmVyKHZhbHVlKSkpO1xuICAgICAgICBpZiAoc2l6ZXMubGVuZ3RoICE9PSByYW5rIHx8IChvcHNldFZlcnNpb24gPj0gMTggJiYgc2l6ZXMubGVuZ3RoID09PSBhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzaXplIHJlcXVpcmVzIHNpemVzIGlucHV0IHNpemUgdG8gYmUgc2FtZSBhcyBpbnB1dCByYW5rIG9yIGF4ZXMgc2l6ZSBmb3Igb3BzZXQgMTggYW5kIHVwJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzY2FsZXMubGVuZ3RoICE9PSBhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemUgcmVxdWlyZXMgXCJzY2FsZXNcIiBpbnB1dCBzaXplIHRvIGJlIG9mIGF4ZXMgcmFuayB3aGVuIGF4ZXMgYXR0cmlidXRlcyBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZXMubGVuZ3RoICE9PSBhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnUmVzaXplIHJlcXVpcmVzIFwic2l6ZXNcIiBpbnB1dCBzaXplIHRvIGJlIG9mIHJhbmsgYXhlcyByYW5rIHdoZW4gYXhlcyBhdHRyaWJ1dGVzIGlzIHNwZWNpZmllZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHNjYWxlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNpemVzICE9PSAndW5kZWZpbmVkJyAmJiBzY2FsZXMubGVuZ3RoID4gMCAmJiBzaXplcy5sZW5ndGggPiByYW5rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzaXplIHJlcXVpcmVzIG9ubHkgb2Ygc2NhbGVzIG9yIHNpemVzIHRvIGJlIHNwZWNpZmllZCcpO1xuICAgICAgfVxuICAgIH07XG5cbmNvbnN0IGdldE9yaWdpbmFsQ29vcmRpbmF0ZUZyb21SZXNpemVkQ29vcmRpbmF0ZSA9XG4gICAgKGNvb3JkaW5hdGVUcmFuc2Zlck1vZGU6IENvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlLCBkVHlwZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgICAgIGBmbiBnZXRPcmlnaW5hbENvb3JkaW5hdGVGcm9tUmVzaXplZENvb3JkaW5hdGUoeFJlc2l6ZWQ6IHUzMiwgeFNjYWxlOiBmMzIsIGxlbmd0aFJlc2l6ZWQ6IHUzMixcbiAgICAgbGVuZ3RoT3JpZ2luYWw6IHUzMiwgcm9pU3RhcnQ6IGYzMiwgcm9pRW5kOiBmMzIpIC0+ICR7ZFR5cGV9IHsgYCArXG4gICAgKCgpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGNvb3JkaW5hdGVUcmFuc2Zlck1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FzeW1tZXRyaWMnOlxuICAgICAgICAgICAgICByZXR1cm4gYHJldHVybiAke2RUeXBlfSh4UmVzaXplZCkgLyAke2RUeXBlfSh4U2NhbGUpO2A7XG4gICAgICAgICAgICBjYXNlICdweXRvcmNoX2hhbGZfcGl4ZWwnOlxuICAgICAgICAgICAgICByZXR1cm4gYGlmIChsZW5ndGhSZXNpemVkID4gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCR7ZFR5cGV9KHhSZXNpemVkKSArIDAuNSkgLyAke2RUeXBlfSh4U2NhbGUpIC0gMC41O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgY2FzZSAndGZfaGFsZl9waXhlbF9mb3Jfbm4nOlxuICAgICAgICAgICAgICByZXR1cm4gYHJldHVybiAoJHtkVHlwZX0oeFJlc2l6ZWQpICsgMC41KSAvICR7ZFR5cGV9KHhTY2FsZSk7YDtcbiAgICAgICAgICAgIGNhc2UgJ2FsaWduX2Nvcm5lcnMnOlxuICAgICAgICAgICAgICByZXR1cm4gYGlmIChsZW5ndGhSZXNpemVkID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBwYXJ0IGFuZCB0aGUgZnJhY3Rpb25hbCBwYXJ0IGFyZSBjYWxjdWxhdGVkIHNlcGFyYXRlbHkgZHVlIHRvIGluYWNjdXJhY3kgb2YgZmxvYXRpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnQgZGl2aXNpb24uIEFzIGFuIGV4YW1wbGUsIGYzMigyMSkgLyBmMzIoNykgbWF5IGV2YWx1YXRlIHRvIDIuOTkuLi4gaW5zdGVhZCBvZiAzLCBjYXVzaW5nIGFuXG4gICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldC1ieS1vbmUgZXJyb3IgbGF0ZXIgaW4gZmxvb3IoKS5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHdob2xlID0gJHtkVHlwZX0oeFJlc2l6ZWQgKiAobGVuZ3RoT3JpZ2luYWwgLSAxKSAvIChsZW5ndGhSZXNpemVkIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3QgPVxuICAgICAgICAgICAgICAgICAgICAgICAgJHtkVHlwZX0oeFJlc2l6ZWQgKiAobGVuZ3RoT3JpZ2luYWwgLSAxKSAlIChsZW5ndGhSZXNpemVkIC0gMSkpIC8gJHtkVHlwZX0obGVuZ3RoUmVzaXplZCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2hvbGUgKyBmcmFjdDtcbiAgICAgICAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgY2FzZSAndGZfY3JvcF9hbmRfcmVzaXplJzpcbiAgICAgICAgICAgICAgcmV0dXJuIGBpZiAobGVuZ3RoUmVzaXplZCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR7ZFR5cGV9KHJvaVN0YXJ0KSAqICR7ZFR5cGV9KGxlbmd0aE9yaWdpbmFsIC0gMSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKCR7ZFR5cGV9KHhSZXNpemVkKSAqICR7ZFR5cGV9KHJvaUVuZCAtIHJvaVN0YXJ0KSAqICR7ZFR5cGV9KGxlbmd0aE9yaWdpbmFsIC0gMSkpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICR7ZFR5cGV9KGxlbmd0aFJlc2l6ZWQgLSAxKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjUgKiAke2RUeXBlfShyb2lTdGFydCArIHJvaUVuZCkgKiAke2RUeXBlfShsZW5ndGhPcmlnaW5hbCAtIDEpO1xuICAgICAgICAgICAgICAgICAgfWA7XG4gICAgICAgICAgICBjYXNlICdoYWxmX3BpeGVsX3N5bW1ldHJpYyc6XG4gICAgICAgICAgICAgIHJldHVybiBgY29uc3Qgb3V0cHV0V2lkdGggPSAke2RUeXBlfXhTY2FsZSAqICR7ZFR5cGV9KGxlbmd0aFJlc2l6ZWQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0bWVudCA9ICR7ZFR5cGV9KGxlbmd0aFJlc2l6ZWQpIC8gb3V0cHV0V2lkdGg7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXIgPSAke2RUeXBlfShsZW5ndGhPcmlnaW5hbCkgLyAyO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2VudGVyICogKDEgLSBhZGp1c3RtZW50KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgKyAoKCR7ZFR5cGV9KHhSZXNpemVkKSArIDAuNSkgLyAke2RUeXBlfSh4U2NhbGUpKSAtIDAuNTtgO1xuICAgICAgICAgICAgY2FzZSAnaGFsZl9waXhlbCc6XG4gICAgICAgICAgICAgIHJldHVybiBgcmV0dXJuICgoJHtkVHlwZX0oeFJlc2l6ZWQpICsgMC41KSAvICR7ZFR5cGV9KHhTY2FsZSkpIC0gMC41O2A7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvb3JkaW5hdGUgdHJhbnNmb3JtIG1vZGUgJHtjb29yZGluYXRlVHJhbnNmZXJNb2RlfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpICtcbiAgICAnfSc7XG5cbmNvbnN0IGdldE5lYXJlc3RQaXhlbEZyb21PcmlnaW5hbCA9IChuZWFyZXN0TW9kZTogTmVhcmVzdE1vZGUsIG9wc2V0VmVyc2lvbjogbnVtYmVyLCBkVHlwZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgYGZuIGdldE5lYXJlc3RQaXhlbEZyb21PcmlnaW5hbCh4T3JpZ2luYWw6ICR7ZFR5cGV9LCBpc0Rvd25TYW1wbGU6IGJvb2wpIC0+ICR7ZFR5cGV9IHtgICsgKCgpID0+IHtcbiAgICAgIHN3aXRjaCAobmVhcmVzdE1vZGUpIHtcbiAgICAgICAgY2FzZSAncm91bmRfcHJlZmVyX2NlaWwnOlxuICAgICAgICAgIHJldHVybiAnaWYgKGZyYWN0KHhPcmlnaW5hbCkgPT0gMC41KSB7IFxcXG4gICAgICAgICAgICByZXR1cm4gY2VpbCh4T3JpZ2luYWwpOyBcXFxuICAgICAgICAgIH0gZWxzZSB7IFxcXG4gICAgICAgICAgICByZXR1cm4gcm91bmQoeE9yaWdpbmFsKTsgXFxcbiAgICAgICAgICB9JztcbiAgICAgICAgY2FzZSAnZmxvb3InOlxuICAgICAgICAgIHJldHVybiAncmV0dXJuIGZsb29yKHhPcmlnaW5hbCk7JztcbiAgICAgICAgY2FzZSAnY2VpbCc6XG4gICAgICAgICAgcmV0dXJuICdyZXR1cm4gY2VpbCh4T3JpZ2luYWwpOyc7XG4gICAgICAgIGNhc2UgJ3JvdW5kX3ByZWZlcl9mbG9vcic6XG4gICAgICAgICAgcmV0dXJuICdpZiAoZnJhY3QoeE9yaWdpbmFsKSA9PSAwLjUpIHsgXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsb29yKHhPcmlnaW5hbCk7IFxcXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgeyBcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm91bmQoeE9yaWdpbmFsKTsgXFxcbiAgICAgICAgICAgICAgICAgIH0nO1xuICAgICAgICBjYXNlICdzaW1wbGUnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChvcHNldFZlcnNpb24gPCAxMSkge1xuICAgICAgICAgICAgcmV0dXJuICdpZiAoaXNEb3duU2FtcGxlKSBcXFxuICAgICAgICAgICAgICAgICAgICB7IFxcXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNlaWwoeE9yaWdpbmFsKTsgXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgXFxcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geE9yaWdpbmFsOyBcXFxuICAgICAgICAgICAgICAgICAgICB9JztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOZWFyZXN0IG1vZGUgJHtuZWFyZXN0TW9kZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgfVxuICAgIH0pKCkgK1xuICAgICd9JztcblxuY29uc3QgdXBkYXRlUm9JID0gKHJvaTogcmVhZG9ubHkgbnVtYmVyW10sIGF4ZXM6IHJlYWRvbmx5IG51bWJlcltdLCByYW5rOiBudW1iZXIpOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHJvaVRtcCA9IG5ldyBBcnJheShyYW5rKS5maWxsKDApLmNvbmNhdChuZXcgQXJyYXkocmFuaykuZmlsbCgxKSk7XG4gIGNvbnN0IHJvaUxvY2FsID0gcm9pLmxlbmd0aCA9PT0gMCA/IHJvaVRtcCA6IHJvaS5zbGljZSgpO1xuICBpZiAoYXhlcy5sZW5ndGggPiAwKSB7XG4gICAgYXhlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICByb2lUbXBbdl0gPSByb2lMb2NhbFtpXTtcbiAgICAgIHJvaVRtcFtpICsgcmFua10gPSByb2lMb2NhbFtheGVzLmxlbmd0aCArIGldO1xuICAgIH0pO1xuICAgIHJldHVybiByb2lUbXA7XG4gIH1cbiAgcmV0dXJuIHJvaUxvY2FsO1xufTtcblxuY29uc3QgaW5pdE91dHB1dFNoYXBlID1cbiAgICAoaW5wdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sIHNjYWxlczogcmVhZG9ubHkgbnVtYmVyW10sIHNpemVzOiByZWFkb25seSBudW1iZXJbXSwgYXhlczogcmVhZG9ubHkgbnVtYmVyW10pOlxuICAgICAgICBudW1iZXJbXSA9PiB7XG4gICAgICAgICAgbGV0IG91dHB1dFNoYXBlOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICAgIGlmIChzaXplcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoYXhlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGlucHV0U2hhcGUuZm9yRWFjaCgodikgPT4gb3V0cHV0U2hhcGUucHVzaCh2KSk7XG4gICAgICAgICAgICAgIGlmIChNYXRoLm1heCguLi5heGVzKSA+IGlucHV0U2hhcGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdheGVzIGlzIG91dCBvZiBib3VuZCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGF4ZXMuZm9yRWFjaCgodiwgaSkgPT4gb3V0cHV0U2hhcGVbdl0gPSBzaXplc1tpXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaXplcy5mb3JFYWNoKCh2KSA9PiBvdXRwdXRTaGFwZS5wdXNoKHYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNjYWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemUgcmVxdWlyZXMgZWl0aGVyIHNjYWxlcyBvciBzaXplcy4nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dHB1dFNoYXBlID0gaW5wdXRTaGFwZS5tYXAoKHZhbHVlLCBpbmRleCkgPT4gTWF0aC5yb3VuZCh2YWx1ZSAqIHNjYWxlc1tpbmRleF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG91dHB1dFNoYXBlO1xuICAgICAgICB9O1xuXG5jb25zdCBhZGp1c3RPdXRwdXRTaGFwZSA9IChpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgc2NhbGVzOiBudW1iZXJbXSwgYXR0cmlidXRlczogUmVzaXplQXR0cmlidXRlcykgPT4ge1xuICBjb25zdCBzY2FsZUluUG9saWN5ID0gKCgpID0+IHtcbiAgICBzd2l0Y2ggKGF0dHJpYnV0ZXMua2VlcEFzcGVjdFJhdGlvUG9saWN5KSB7XG4gICAgICBjYXNlICdub3RfbGFyZ2VyJzpcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPiAwID8gTWF0aC5taW4oLi4uYXR0cmlidXRlcy5heGVzLm1hcChpID0+IHNjYWxlc1tpXSksIE51bWJlci5NQVhfVkFMVUUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oLi4uc2NhbGVzLCBOdW1iZXIuTUFYX1ZBTFVFKTtcbiAgICAgIGNhc2UgJ25vdF9zbWFsbGVyJzpcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4uYXR0cmlidXRlcy5heGVzLm1hcChpID0+IHNjYWxlc1tpXSksIE51bWJlci5NSU5fVkFMVUUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoLi4uc2NhbGVzLCBOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgS2VlcCBhc3BlY3QgcmF0aW8gcG9saWN5ICR7YXR0cmlidXRlcy5rZWVwQXNwZWN0UmF0aW9Qb2xpY3l9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICB9XG4gIH0pKCk7XG4gIHNjYWxlcy5maWxsKDEuMCwgMCwgc2NhbGVzLmxlbmd0aCk7XG4gIGNvbnN0IGFkanVzdGVkT3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlLnNsaWNlKCk7XG4gIGlmIChhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoID4gMCkge1xuICAgIGF0dHJpYnV0ZXMuYXhlcy5mb3JFYWNoKCh2KSA9PiBzY2FsZXNbdl0gPSBzY2FsZUluUG9saWN5KTtcbiAgICBhdHRyaWJ1dGVzLmF4ZXMuZm9yRWFjaCgodikgPT4gYWRqdXN0ZWRPdXRwdXRTaGFwZVt2XSA9IE1hdGgucm91bmQoaW5wdXRTaGFwZVt2XSAqIHNjYWxlc1t2XSkpO1xuICB9IGVsc2Uge1xuICAgIHNjYWxlcy5maWxsKHNjYWxlSW5Qb2xpY3ksIDAsIHNjYWxlcy5sZW5ndGgpO1xuICAgIGFkanVzdGVkT3V0cHV0U2hhcGUuZm9yRWFjaCgodiwgaSkgPT4gYWRqdXN0ZWRPdXRwdXRTaGFwZVtpXSA9IE1hdGgucm91bmQodiAqIHNjYWxlc1tpXSkpO1xuICB9XG4gIHJldHVybiBhZGp1c3RlZE91dHB1dFNoYXBlO1xufTtcblxuY29uc3QgY2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMgPVxuICAgIChvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBvdXRwdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sIHNjYWxlc0xlbmd0aDogbnVtYmVyLFxuICAgICByb2lMZW5ndGg6IG51bWJlcik6IHN0cmluZyA9PiBgXG4gICAgZm4gY2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0X2luZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+IGFycmF5PCR7XG4gICAgICAgIG91dHB1dC50eXBlLnZhbHVlfSwgJHtvdXRwdXRTaGFwZS5sZW5ndGh9PiB7XG4gICAgICB2YXIgb3JpZ2luYWxfaW5kaWNlczogYXJyYXk8JHtvdXRwdXQudHlwZS52YWx1ZX0sICR7b3V0cHV0U2hhcGUubGVuZ3RofT47XG4gICAgICBmb3IgKHZhciBpOnUzMiA9IDA7IGkgPCAke291dHB1dFNoYXBlLmxlbmd0aH07IGkrKykge1xuICAgICAgICB2YXIgb3V0cHV0X2luZGV4ID0gJHtvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0X2luZGljZXMnLCAnaScpfTtcbiAgICAgICAgdmFyIHNjYWxlID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnNjYWxlcycsICdpJywgc2NhbGVzTGVuZ3RoKX07XG4gICAgICAgIHZhciByb2lfbG93ID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnJvaScsICdpJywgcm9pTGVuZ3RoKX07XG4gICAgICAgIHZhciByb2lfaGkgPSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMucm9pJywgYGkgKyAke2lucHV0U2hhcGUubGVuZ3RofWAsIHJvaUxlbmd0aCl9O1xuICAgICAgICBpZiAoc2NhbGUgPT0gMS4wKSB7XG4gICAgICAgICAgb3JpZ2luYWxfaW5kaWNlc1tpXSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KG91dHB1dF9pbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGlucHV0X3NoYXBlX2kgPSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMuaW5wdXRfc2hhcGUnLCAnaScsIGlucHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgdmFyIG91dHB1dF9zaGFwZV9pID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLm91dHB1dF9zaGFwZScsICdpJywgb3V0cHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgb3JpZ2luYWxfaW5kaWNlc1tpXSA9IGdldE9yaWdpbmFsQ29vcmRpbmF0ZUZyb21SZXNpemVkQ29vcmRpbmF0ZShvdXRwdXRfaW5kZXgsIHNjYWxlLCBvdXRwdXRfc2hhcGVfaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3NoYXBlX2ksIHJvaV9sb3csIHJvaV9oaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmlnaW5hbF9pbmRpY2VzO1xuICAgIH1gO1xuXG5jb25zdCBjYWxjdWxhdGVJbnB1dEluZGljZXNGcm9tT3V0cHV0SW5kaWNlcyA9XG4gICAgKGlucHV0OiBJbmRpY2VzSGVscGVyLCBvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBvdXRwdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sXG4gICAgIHNjYWxlc0xlbmd0aDogbnVtYmVyLCByb2lMZW5ndGg6IG51bWJlciwgdXNlRXh0cmFwb2xhdGlvbjogYm9vbGVhbik6IHN0cmluZyA9PiBgXG4gICAgZm4gY2FsY3VsYXRlSW5wdXRJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0X2luZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+ICR7aW5wdXQudHlwZS5pbmRpY2VzfSB7XG4gICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgZm9yICh2YXIgaTp1MzIgPSAwOyBpIDwgJHtvdXRwdXRTaGFwZS5sZW5ndGh9OyBpKyspIHtcbiAgICAgICAgdmFyIG91dHB1dF9pbmRleCA9ICR7b3V0cHV0LmluZGljZXNHZXQoJ291dHB1dF9pbmRpY2VzJywgJ2knKX07XG4gICAgICAgIHZhciBpbnB1dF9pbmRleDogdTMyO1xuICAgICAgICB2YXIgc2NhbGUgPSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMuc2NhbGVzJywgJ2knLCBzY2FsZXNMZW5ndGgpfTtcbiAgICAgICAgaWYgKHNjYWxlID09IDEuMCkge1xuICAgICAgICAgIGlucHV0X2luZGV4ID0gb3V0cHV0X2luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciByb2lfbG93ID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnJvaScsICdpJywgcm9pTGVuZ3RoKX07XG4gICAgICAgICAgdmFyIHJvaV9oaSA9ICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5yb2knLCBgaSArICR7aW5wdXRTaGFwZS5sZW5ndGh9YCwgcm9pTGVuZ3RoKX07XG4gICAgICAgICAgdmFyIGlucHV0X3NoYXBlX2kgPSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMuaW5wdXRfc2hhcGUnLCAnaScsIGlucHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgdmFyIG91dHB1dF9zaGFwZV9pID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLm91dHB1dF9zaGFwZScsICdpJywgb3V0cHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgdmFyIG9yaWdpbmFsX2lkeCA9IGdldE9yaWdpbmFsQ29vcmRpbmF0ZUZyb21SZXNpemVkQ29vcmRpbmF0ZShvdXRwdXRfaW5kZXgsIHNjYWxlLCBvdXRwdXRfc2hhcGVfaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3NoYXBlX2ksIHJvaV9sb3csIHJvaV9oaSk7XG4gICAgICAgICAgaWYgKCEke3VzZUV4dHJhcG9sYXRpb259IHx8IChvcmlnaW5hbF9pZHggPj0gMCAmJiBvcmlnaW5hbF9pZHggPCAke291dHB1dC50eXBlLnZhbHVlfShpbnB1dF9zaGFwZV9pKSkpIHtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbF9pZHggPCAwKSB7XG4gICAgICAgICAgICAgIGlucHV0X2luZGV4ID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxfaWR4ID4gJHtvdXRwdXQudHlwZS52YWx1ZX0oaW5wdXRfc2hhcGVfaSAtIDEpKSB7XG4gICAgICAgICAgICAgIGlucHV0X2luZGV4ID0gaW5wdXRfc2hhcGVfaSAtIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpbnB1dF9pbmRleCA9IHUzMihnZXROZWFyZXN0UGl4ZWxGcm9tT3JpZ2luYWwob3JpZ2luYWxfaWR4LCBzY2FsZSA8IDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRfaW5kZXggPSB1MzIob3JpZ2luYWxfaWR4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KCdpbnB1dF9pbmRpY2VzJywgJ2knLCAnIGlucHV0X2luZGV4Jyl9XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5wdXRfaW5kaWNlcztcbiAgICB9YDtcbmNvbnN0IGNoZWNrSW5wdXRJbmRpY2VzID0gKGlucHV0OiBJbmRpY2VzSGVscGVyLCBpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSk6IHN0cmluZyA9PiBgXG4gICAgZm4gY2hlY2tJbnB1dEluZGljZXMoaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9KSAtPiBib29sIHtcbiAgICAgIGZvciAodmFyIGk6dTMyID0gMDsgaSA8ICR7aW5wdXRTaGFwZS5sZW5ndGh9OyBpKyspIHtcbiAgICAgICAgdmFyIGlucHV0X2luZGV4ID0gJHtpbnB1dC5pbmRpY2VzR2V0KCdpbnB1dF9pbmRpY2VzJywgJ2knKX07XG4gICAgICAgIGlmIChpbnB1dF9pbmRleCA8IDAgfHwgaW5wdXRfaW5kZXggPj0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLmlucHV0X3NoYXBlJywgJ2knLCBpbnB1dFNoYXBlLmxlbmd0aCl9KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9YDtcblxuY29uc3Qgc2V0Q2hhbm5lbEFuZEJhdGNoSW5kaWNlcyA9XG4gICAgKGlucHV0OiBJbmRpY2VzSGVscGVyLCBjaGFubmVsSWR4OiBudW1iZXIsIGJhdGNoSWR4OiBudW1iZXIsIHNwYWNpYWxEaW1zOiBudW1iZXIpOiBzdHJpbmcgPT5cbiAgICAgICAgaW5wdXQucmFuayA+IHNwYWNpYWxEaW1zID8gYFxuICAgICR7aW5wdXQuaW5kaWNlc1NldCgnaW5wdXRfaW5kaWNlcycsIGNoYW5uZWxJZHgsICdjaGFubmVsJyl9O1xuICAgICR7aW5wdXQuaW5kaWNlc1NldCgnaW5wdXRfaW5kaWNlcycsIGJhdGNoSWR4LCAnYmF0Y2gnKX07XG5gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyc7XG5cbmNvbnN0IGJpbGluZWFySW50ZXJwb2xhdGlvbiA9XG4gICAgKGlucHV0OiBJbmRpY2VzSGVscGVyLCBvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCB1c2VFeHRyYXBvbGF0aW9uOiBib29sZWFuLFxuICAgICBleHRyYXBvbGF0aW9uVmFsdWU6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCBpc05jaHcgPSB0cnVlO1xuICAgICAgY29uc3QgW2JhdGNoSWR4LCBoZWlnaHRJZHgsIHdpZHRoSWR4LCBjaGFubmVsSWR4XSA9XG4gICAgICAgICAgaW5wdXRTaGFwZS5sZW5ndGggPT09IDIgPyBbLTEsIDAsIDEsIC0xXSA6IChpc05jaHcgPyBbMCwgMiwgMywgMV0gOiBbMCwgMSwgMiwgM10pO1xuICAgICAgY29uc3QgZFR5cGUgPSBpbnB1dC50eXBlLnZhbHVlO1xuICAgICAgcmV0dXJuIGBcbiAgICBmbiBnZXRJbnB1dFZhbHVlKGJhdGNoOiB1MzIsIGNoYW5uZWw6IHUzMiwgcm93OiB1MzIsIGNvbDogdTMyKSAtPiAke2RUeXBlfSB7XG4gICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KCdpbnB1dF9pbmRpY2VzJywgaGVpZ2h0SWR4LCBgbWF4KDAsIG1pbihyb3csICR7aW5wdXRTaGFwZVtoZWlnaHRJZHhdfSAtIDEpKWApfTtcbiAgICAgICR7aW5wdXQuaW5kaWNlc1NldCgnaW5wdXRfaW5kaWNlcycsIHdpZHRoSWR4LCBgbWF4KDAsIG1pbihjb2wsICR7aW5wdXRTaGFwZVt3aWR0aElkeF19IC0gMSkpYCl9O1xuICAgICAgJHtzZXRDaGFubmVsQW5kQmF0Y2hJbmRpY2VzKGlucHV0LCBjaGFubmVsSWR4LCBiYXRjaElkeCwgMil9XG4gICAgICByZXR1cm4gJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0X2luZGljZXMnKX07XG4gICAgfVxuXG4gICAgZm4gYmlsaW5lYXJJbnRlcnBvbGF0aW9uKG91dHB1dF9pbmRpY2VzOiAke291dHB1dC50eXBlLmluZGljZXN9KSAtPiAke2RUeXBlfSB7XG4gICAgICB2YXIgb3JpZ2luYWxJbmRpY2VzID0gY2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0X2luZGljZXMpO1xuICAgICAgdmFyIHJvdzoke2RUeXBlfSA9IG9yaWdpbmFsSW5kaWNlc1ske2hlaWdodElkeH1dO1xuICAgICAgdmFyIGNvbDoke2RUeXBlfSA9IG9yaWdpbmFsSW5kaWNlc1ske3dpZHRoSWR4fV07XG4gICAgICAke1xuICAgICAgICAgIHVzZUV4dHJhcG9sYXRpb24gP1xuICAgICAgICAgICAgICBgaWYgKHJvdyA8IDAgfHwgcm93ID4gKCR7aW5wdXRTaGFwZVtoZWlnaHRJZHhdfSAtIDEpIHx8IGNvbCA8IDAgfHwgY29sID4gKCR7aW5wdXRTaGFwZVt3aWR0aElkeF19IC0gMSkpIHtcbiAgICAgICAgcmV0dXJuICR7ZXh0cmFwb2xhdGlvblZhbHVlfTtcbiAgICAgIH1gIDpcbiAgICAgICAgICAgICAgJyd9O1xuICAgICAgcm93ID0gbWF4KDAsIG1pbihyb3csICR7aW5wdXRTaGFwZVtoZWlnaHRJZHhdfSAtIDEpKTtcbiAgICAgIGNvbCA9IG1heCgwLCBtaW4oY29sLCAke2lucHV0U2hhcGVbd2lkdGhJZHhdfSAtIDEpKTtcbiAgICAgIHZhciByb3cxOiB1MzIgPSB1MzIocm93KTtcbiAgICAgIHZhciBjb2wxOiB1MzIgPSB1MzIoY29sKTtcbiAgICAgIHZhciByb3cyOiB1MzIgPSB1MzIocm93ICsgMSk7XG4gICAgICB2YXIgY29sMjogdTMyID0gdTMyKGNvbCArIDEpO1xuICAgICAgdmFyIGNoYW5uZWw6IHUzMiA9ICR7aW5wdXRTaGFwZS5sZW5ndGggPiAyID8gYHUzMihvcmlnaW5hbEluZGljZXNbJHtjaGFubmVsSWR4fV0pYCA6ICcwJ307XG4gICAgICB2YXIgYmF0Y2g6IHUzMiA9ICAke2lucHV0U2hhcGUubGVuZ3RoID4gMiA/IGB1MzIob3JpZ2luYWxJbmRpY2VzWyR7YmF0Y2hJZHh9XSlgIDogJzAnfTtcbiAgICAgIHZhciB4MTE6ICR7ZFR5cGV9ID0gZ2V0SW5wdXRWYWx1ZShiYXRjaCwgY2hhbm5lbCwgcm93MSwgY29sMSk7XG4gICAgICB2YXIgeDEyOiAke2RUeXBlfSA9IGdldElucHV0VmFsdWUoYmF0Y2gsIGNoYW5uZWwsIHJvdzEsIGNvbDIpO1xuICAgICAgdmFyIHgyMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCByb3cyLCBjb2wxKTtcbiAgICAgIHZhciB4MjI6ICR7ZFR5cGV9ID0gZ2V0SW5wdXRWYWx1ZShiYXRjaCwgY2hhbm5lbCwgcm93MiwgY29sMik7XG4gICAgICB2YXIgZHgxOiAke2RUeXBlfSA9IGFicyhyb3cgLSAke2RUeXBlfShyb3cxKSk7XG4gICAgICB2YXIgZHgyOiAke2RUeXBlfSA9IGFicygke2RUeXBlfShyb3cyKSAtIHJvdyk7XG4gICAgICB2YXIgZHkxOiAke2RUeXBlfSA9IGFicyhjb2wgLSAke2RUeXBlfShjb2wxKSk7XG4gICAgICB2YXIgZHkyOiAke2RUeXBlfSA9IGFicygke2RUeXBlfShjb2wyKSAtIGNvbCk7XG4gICAgICBpZiAocm93MSA9PSByb3cyKSB7XG4gICAgICAgIGR4MSA9IDAuNTtcbiAgICAgICAgZHgyID0gMC41O1xuICAgICAgfVxuICAgICAgaWYgKGNvbDEgPT0gY29sMikge1xuICAgICAgICBkeTEgPSAwLjU7XG4gICAgICAgIGR5MiA9IDAuNTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoeDExICogZHgyICogZHkyICsgeDEyICogZHgyICogZHkxICsgeDIxICogZHgxICogZHkyICsgeDIyICogZHgxICogZHkxKTtcbiAgICB9YDtcbiAgICB9O1xuXG5jb25zdCBiaWN1YmljSW50ZXJwb2xhdGlvbiA9XG4gICAgKGlucHV0OiBJbmRpY2VzSGVscGVyLCBvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBvdXRwdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sXG4gICAgIHNjYWxlczogcmVhZG9ubHkgbnVtYmVyW10sIHJvaTogcmVhZG9ubHkgbnVtYmVyW10sIGN1YmljQ29lZmZBOiBudW1iZXIsIHVzZUV4dHJhcG9sYXRpb246IGJvb2xlYW4sXG4gICAgIGV4dHJhcG9sYXRpb25WYWx1ZTogbnVtYmVyLCBleGNsdWRlT3V0c2lkZTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCBpczJEID0gaW5wdXRTaGFwZS5sZW5ndGggPT09IDI7XG4gICAgICBjb25zdCBpc05jaHcgPSB0cnVlO1xuICAgICAgY29uc3QgW2hlaWdodElkeCwgd2lkdGhJZHhdID0gaXMyRCA/IFswLCAxXSA6IGlzTmNodyA/IFsyLCAzXSA6IFsxLCAyXTtcbiAgICAgIGNvbnN0IGRUeXBlID0gaW5wdXQudHlwZS52YWx1ZTtcbiAgICAgIGNvbnN0IGNyZWF0ZUN1YmljSW50ZXJwb2xhdGlvbkZ1bmN0aW9uID0gKGlkeDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaWR4ID09PSBoZWlnaHRJZHggPyAncm93JyA6ICdjb2wnO1xuICAgICAgICByZXR1cm4gYFxuICAgICAgZm4gJHtkaXJlY3Rpb259Q3ViaWNJbnRlcnBvbGF0aW9uKGlucHV0X2luZGljZXM6ICR7aW5wdXQudHlwZS5pbmRpY2VzfSwgb3V0cHV0X2luZGljZXM6ICR7XG4gICAgICAgICAgICBvdXRwdXQudHlwZS5pbmRpY2VzfSkgLT4gJHtkVHlwZX0ge1xuICAgICAgICB2YXIgb3V0cHV0X2luZGV4ID0gJHtvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0X2luZGljZXMnLCBpZHgpfTtcbiAgICAgICAgdmFyIG9yaWdpbmFsSWR4OiAke2RUeXBlfSA9IGdldE9yaWdpbmFsQ29vcmRpbmF0ZUZyb21SZXNpemVkQ29vcmRpbmF0ZShvdXRwdXRfaW5kZXgsICR7c2NhbGVzW2lkeF19LFxuICAgICAgICAke291dHB1dFNoYXBlW2lkeF19LCAke2lucHV0U2hhcGVbaWR4XX0sICR7cm9pW2lkeF19LCAke3JvaVtpZHhdfSArICR7aW5wdXRTaGFwZS5sZW5ndGh9KTtcbiAgICAgICAgdmFyIGZyYWN0T3JpZ2luYWxJZHg6ICR7ZFR5cGV9ID0gb3JpZ2luYWxJZHggLSBmbG9vcihvcmlnaW5hbElkeCk7XG4gICAgICAgIHZhciBjb2VmcyA9IGdldEN1YmljSW50ZXJwb2xhdGlvbkNvZWZzKGZyYWN0T3JpZ2luYWxJZHgpO1xuXG4gICAgICAgIGlmICgke3VzZUV4dHJhcG9sYXRpb259ICYmIChvcmlnaW5hbElkeCA8IDAgfHwgb3JpZ2luYWxJZHggPiAoJHtpbnB1dFNoYXBlW2lkeF19IC0gMSkpKSB7XG4gICAgICAgICAgcmV0dXJuICR7ZXh0cmFwb2xhdGlvblZhbHVlfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF0YTogYXJyYXk8JHtkVHlwZX0sIDQ+ID0gYXJyYXk8JHtkVHlwZX0sIDQ+KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gICAgICAgIGZvciAodmFyIGk6IGkzMiA9IC0xOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgdmFyICR7ZGlyZWN0aW9ufTogJHtkVHlwZX0gPSBvcmlnaW5hbElkeCArICR7ZFR5cGV9KGkpO1xuICAgICAgICAgIGlmICgke2RpcmVjdGlvbn0gPCAwIHx8ICR7ZGlyZWN0aW9ufSA+PSAke2lucHV0U2hhcGVbaWR4XX0pIHtcbiAgICAgICAgICAgICR7KCgpID0+IHtcbiAgICAgICAgICBpZiAoZXhjbHVkZU91dHNpZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBgY29lZnNbaSArIDFdID0gMC4wO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHVzZUV4dHJhcG9sYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBgcmV0dXJuICR7ZXh0cmFwb2xhdGlvblZhbHVlfTtgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZGlyZWN0aW9ufSA9IG1heCgwLCBtaW4oJHtkaXJlY3Rpb259LCAke2lucHV0U2hhcGVbaWR4XX0gLSAxKSk7YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCl9O1xuICAgICAgICAgIH1cbiAgICAgICAgdmFyIGlucHV0X2luZGljZXNfY29weTogJHtpbnB1dC50eXBlLmluZGljZXN9ID0gaW5wdXRfaW5kaWNlcztcbiAgICAgICAgICAke2lucHV0LmluZGljZXNTZXQoJ2lucHV0X2luZGljZXNfY29weScsIGlkeCwgYHUzMigke2RpcmVjdGlvbn0pYCl9O1xuICAgICAgICAgIGRhdGFbaSArIDFdID0gJHtcbiAgICAgICAgICAgIGlkeCA9PT0gaGVpZ2h0SWR4ID8gaW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzX2NvcHknKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyb3dDdWJpY0ludGVycG9sYXRpb24oaW5wdXRfaW5kaWNlc19jb3B5LCBvdXRwdXRfaW5kaWNlcyknfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3ViaWNJbnRlcnBvbGF0aW9uMUQoZGF0YSwgY29lZnMpO1xuICAgICAgfWA7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYFxuICAgICR7Y3JlYXRlQ3ViaWNJbnRlcnBvbGF0aW9uRnVuY3Rpb24oaGVpZ2h0SWR4KX07XG4gICAgJHtjcmVhdGVDdWJpY0ludGVycG9sYXRpb25GdW5jdGlvbih3aWR0aElkeCl9O1xuICBmbiBnZXRDdWJpY0ludGVycG9sYXRpb25Db2VmcyhzOiAke2RUeXBlfSkgLT4gYXJyYXk8JHtkVHlwZX0sIDQ+IHtcbiAgICB2YXIgYWJzUyA9IGFicyhzKTtcbiAgICB2YXIgY29lZmZzOiBhcnJheTwke2RUeXBlfSwgND4gPSBhcnJheTwke2RUeXBlfSwgND4oMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgICB2YXIgb25lTWludXNBYnNTOiAke2RUeXBlfSA9IDEuMCAtIGFic1M7XG4gICAgdmFyIHR3b01pbnVzQWJzUzogJHtkVHlwZX0gPSAyLjAgLSBhYnNTO1xuICAgIHZhciBvbmVQbHVzQWJzUzogJHtkVHlwZX0gPSAxLjAgKyBhYnNTO1xuICAgIGNvZWZmc1swXSA9ICgoJHtjdWJpY0NvZWZmQX0gKiBvbmVQbHVzQWJzUyAtIDUgKiAke2N1YmljQ29lZmZBfSkgKiBvbmVQbHVzQWJzUyArIDggKiAke1xuICAgICAgICAgIGN1YmljQ29lZmZBfSkgKiBvbmVQbHVzQWJzUyAtIDQgKiAke2N1YmljQ29lZmZBfTtcbiAgICBjb2VmZnNbMV0gPSAoKCR7Y3ViaWNDb2VmZkF9ICsgMikgKiBhYnNTIC0gKCR7Y3ViaWNDb2VmZkF9ICsgMykpICogYWJzUyAqIGFic1MgKyAxO1xuICAgIGNvZWZmc1syXSA9ICgoJHtjdWJpY0NvZWZmQX0gKyAyKSAqIG9uZU1pbnVzQWJzUyAtICgke2N1YmljQ29lZmZBfSArIDMpKSAqIG9uZU1pbnVzQWJzUyAqIG9uZU1pbnVzQWJzUyArIDE7XG4gICAgY29lZmZzWzNdID0gKCgke2N1YmljQ29lZmZBfSAqIHR3b01pbnVzQWJzUyAtIDUgKiAke2N1YmljQ29lZmZBfSkgKiB0d29NaW51c0Fic1MgKyA4ICogJHtcbiAgICAgICAgICBjdWJpY0NvZWZmQX0pICogdHdvTWludXNBYnNTIC0gNCAqICR7Y3ViaWNDb2VmZkF9O1xuICAgIHJldHVybiBjb2VmZnM7XG4gIH1cblxuICBmbiBjdWJpY0ludGVycG9sYXRpb24xRCh4OiBhcnJheTwke2RUeXBlfSwgND4sIGNvZWZzOiBhcnJheTwke2RUeXBlfSwgND4pIC0+ICR7ZFR5cGV9IHtcbiAgICB2YXIgY29lZnNTdW06ICR7ZFR5cGV9ID0gY29lZnNbMF0gKyBjb2Vmc1sxXSArIGNvZWZzWzJdICsgY29lZnNbM107XG4gICAgcmV0dXJuICh4WzBdICogY29lZnNbMF0gKyB4WzFdICogY29lZnNbMV0rIHhbMl0gKiBjb2Vmc1syXSsgeFszXSAqIGNvZWZzWzNdKSAvIGNvZWZzU3VtO1xuICB9XG5cbiAgZm4gYmljdWJpY0ludGVycG9sYXRpb24ob3V0cHV0X2luZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+ICR7ZFR5cGV9IHtcbiAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9ID0gb3V0cHV0X2luZGljZXM7XG4gICAgcmV0dXJuIGNvbEN1YmljSW50ZXJwb2xhdGlvbihpbnB1dF9pbmRpY2VzLCBvdXRwdXRfaW5kaWNlcyk7XG4gIH1cbiAgICBgO1xuICAgIH07XG5cbmNvbnN0IHRyaWxpbmVhckludGVycG9sYXRpb24gPVxuICAgIChpbnB1dDogSW5kaWNlc0hlbHBlciwgb3V0cHV0OiBJbmRpY2VzSGVscGVyLCBpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgdXNlRXh0cmFwb2xhdGlvbjogYm9vbGVhbixcbiAgICAgZXh0cmFwb2xhdGlvblZhbHVlOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgaXNOY2h3ID0gdHJ1ZTtcbiAgICAgIGNvbnN0IFtiYXRjaElkeCwgZGVwdGhJZHgsIGhlaWdodElkeCwgd2lkdGhJZHgsIGNoYW5uZWxJZHhdID1cbiAgICAgICAgICBpbnB1dFNoYXBlLmxlbmd0aCA9PT0gMyA/IFstMSwgMCwgMSwgMiwgLTFdIDogKGlzTmNodyA/IFswLCAyLCAzLCA0LCAxXSA6IFswLCAxLCAyLCAzLCA0XSk7XG4gICAgICBjb25zdCBkVHlwZSA9IGlucHV0LnR5cGUudmFsdWU7XG4gICAgICByZXR1cm4gYFxuICAgIGZuIGdldElucHV0VmFsdWUoYmF0Y2g6IHUzMiwgY2hhbm5lbDogdTMyLCBkZXB0aDp1MzIsIGhlaWdodDogdTMyLCB3aWR0aDogdTMyKSAtPiAke2RUeXBlfSB7XG4gICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KCdpbnB1dF9pbmRpY2VzJywgZGVwdGhJZHgsIGBtYXgoMCwgbWluKGRlcHRoLCAke2lucHV0U2hhcGVbZGVwdGhJZHhdfSAtIDEpKWApfTtcbiAgICAgICR7aW5wdXQuaW5kaWNlc1NldCgnaW5wdXRfaW5kaWNlcycsIGhlaWdodElkeCwgYG1heCgwLCBtaW4oaGVpZ2h0LCAke2lucHV0U2hhcGVbaGVpZ2h0SWR4XX0gLSAxKSlgKX07XG4gICAgICAke2lucHV0LmluZGljZXNTZXQoJ2lucHV0X2luZGljZXMnLCB3aWR0aElkeCwgYG1heCgwLCBtaW4od2lkdGgsICR7aW5wdXRTaGFwZVt3aWR0aElkeF19IC0gMSkpYCl9O1xuICAgICAgJHtzZXRDaGFubmVsQW5kQmF0Y2hJbmRpY2VzKGlucHV0LCBjaGFubmVsSWR4LCBiYXRjaElkeCwgMyl9XG4gICAgICByZXR1cm4gJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0X2luZGljZXMnKX07XG4gICAgfVxuXG4gICAgZm4gdHJpbGluZWFySW50ZXJwb2xhdGlvbihvdXRwdXRfaW5kaWNlczogJHtvdXRwdXQudHlwZS5pbmRpY2VzfSkgLT4gJHtkVHlwZX0ge1xuICAgICAgdmFyIG9yaWdpbmFsSW5kaWNlcyA9IGNhbGN1bGF0ZU9yaWdpbmFsSW5kaWNlc0Zyb21PdXRwdXRJbmRpY2VzKG91dHB1dF9pbmRpY2VzKTtcbiAgICAgIHZhciBkZXB0aDoke2RUeXBlfSA9IG9yaWdpbmFsSW5kaWNlc1ske2RlcHRoSWR4fV07XG4gICAgICB2YXIgaGVpZ2h0OiR7ZFR5cGV9ID0gb3JpZ2luYWxJbmRpY2VzWyR7aGVpZ2h0SWR4fV07XG4gICAgICB2YXIgd2lkdGg6JHtkVHlwZX0gPSBvcmlnaW5hbEluZGljZXNbJHt3aWR0aElkeH1dO1xuICAgICAgJHtcbiAgICAgICAgICB1c2VFeHRyYXBvbGF0aW9uID8gYGlmIChkZXB0aCA8IDAgfHwgZGVwdGggPiAoJHtpbnB1dFNoYXBlW2RlcHRoSWR4XX0gLSAxKSB8fCBoZWlnaHQgPCAwIHx8IGhlaWdodCA+ICgke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTaGFwZVtoZWlnaHRJZHhdfSAtIDEpIHx8IHdpZHRoIDwgMCB8fCAod2lkdGggPiAke2lucHV0U2hhcGVbd2lkdGhJZHhdfSAtIDEpKSB7XG4gICAgICByZXR1cm4gJHtleHRyYXBvbGF0aW9uVmFsdWV9O1xuICAgICAgICB9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnfTtcblxuICAgIGRlcHRoID0gbWF4KDAsIG1pbihkZXB0aCwgJHtpbnB1dFNoYXBlW2RlcHRoSWR4XX0gLSAxKSk7XG4gICAgICBoZWlnaHQgPSBtYXgoMCwgbWluKGhlaWdodCwgJHtpbnB1dFNoYXBlW2hlaWdodElkeF19IC0gMSkpO1xuICAgICAgd2lkdGggPSBtYXgoMCwgbWluKHdpZHRoLCAke2lucHV0U2hhcGVbd2lkdGhJZHhdfSAtIDEpKTtcbiAgICAgIHZhciBkZXB0aDE6IHUzMiA9IHUzMihkZXB0aCk7XG4gICAgICB2YXIgaGVpZ2h0MTogdTMyID0gdTMyKGhlaWdodCk7XG4gICAgICB2YXIgd2lkdGgxOiB1MzIgPSB1MzIod2lkdGgpO1xuICAgICAgdmFyIGRlcHRoMjogdTMyID0gdTMyKGRlcHRoICsgMSk7XG4gICAgICB2YXIgaGVpZ2h0MjogdTMyID0gdTMyKGhlaWdodCArIDEpO1xuICAgICAgdmFyIHdpZHRoMjogdTMyID0gdTMyKHdpZHRoICsgMSk7XG4gICAgICB2YXIgY2hhbm5lbDogdTMyID0gJHtpbnB1dFNoYXBlLmxlbmd0aCA+IDMgPyBgdTMyKG9yaWdpbmFsSW5kaWNlc1ske2NoYW5uZWxJZHh9XSlgIDogJzAnfTtcbiAgICAgIHZhciBiYXRjaDogdTMyID0gICR7aW5wdXRTaGFwZS5sZW5ndGggPiAzID8gYHUzMihvcmlnaW5hbEluZGljZXNbJHtiYXRjaElkeH1dKWAgOiAnMCd9O1xuXG4gICAgICB2YXIgeDExMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDEsIHdpZHRoMSk7XG4gICAgICB2YXIgeDExMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDEsIHdpZHRoMik7XG4gICAgICB2YXIgeDEyMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDIsIHdpZHRoMSk7XG4gICAgICB2YXIgeDEyMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDIsIHdpZHRoMik7XG4gICAgICB2YXIgeDIxMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDEsIHdpZHRoMSk7XG4gICAgICB2YXIgeDIxMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDEsIHdpZHRoMik7XG4gICAgICB2YXIgeDIyMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDIsIHdpZHRoMSk7XG4gICAgICB2YXIgeDIyMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDIsIHdpZHRoMik7XG4gICAgICB2YXIgZHgxOiAke2RUeXBlfSA9IGFicyhkZXB0aCAtICR7ZFR5cGV9KGRlcHRoMSkpO1xuICAgICAgdmFyIGR4MjogJHtkVHlwZX0gPSBhYnMoJHtkVHlwZX0oZGVwdGgyKSAtIGRlcHRoKTtcbiAgICAgIHZhciBkeTE6ICR7ZFR5cGV9ID0gYWJzKGhlaWdodCAtICR7ZFR5cGV9KGhlaWdodDEpKTtcbiAgICAgIHZhciBkeTI6ICR7ZFR5cGV9ID0gYWJzKCR7ZFR5cGV9KGhlaWdodDIpIC0gaGVpZ2h0KTtcbiAgICAgIHZhciBkejE6ICR7ZFR5cGV9ID0gYWJzKHdpZHRoIC0gJHtkVHlwZX0od2lkdGgxKSk7XG4gICAgICB2YXIgZHoyOiAke2RUeXBlfSA9IGFicygke2RUeXBlfSh3aWR0aDIpIC0gd2lkdGgpO1xuICAgICAgaWYgKGRlcHRoMSA9PSBkZXB0aDIpIHtcbiAgICAgICAgZHgxID0gMC41O1xuICAgICAgICBkeDIgPSAwLjU7XG4gICAgICB9XG4gICAgICBpZiAoaGVpZ2h0MSA9PSBoZWlnaHQyKSB7XG4gICAgICAgIGR5MSA9IDAuNTtcbiAgICAgICAgZHkyID0gMC41O1xuICAgICAgfVxuICAgICAgaWYgKHdpZHRoMSA9PSB3aWR0aDIpIHtcbiAgICAgICAgZHoxID0gMC41O1xuICAgICAgICBkejIgPSAwLjU7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHgxMTEgKiBkeDIgKiBkeTIgKiBkejIgKyB4MTEyICogZHgyICogZHkyICogZHoxICsgeDEyMSAqIGR4MiAqIGR5MSAqZHoyICsgeDEyMiAqIGR4MiAqIGR5MSAqIGR6MSArXG4gICAgICAgICAgICAgIHgyMTEgKiBkeDEgKiBkeTIgKiBkejIgKyB4MjEyICogZHgxICogZHkyICogZHoxICsgeDIyMSAqIGR4MSAqIGR5MSAqZHoyICsgeDIyMiAqIGR4MSAqIGR5MSAqIGR6MSk7XG4gICAgfWA7XG4gICAgfTtcblxuY29uc3QgY3JlYXRlUmVzaXplUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dFRlbnNvcjogVGVuc29yVmlldywgYXR0cmlidXRlczogUmVzaXplQXR0cmlidXRlcywgb3BzZXRWZXJzaW9uOiBudW1iZXIsIHNjYWxlc0lucHV0OiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgc2l6ZXM6IHJlYWRvbmx5IG51bWJlcltdLCByb2lJbnB1dDogcmVhZG9ubHkgbnVtYmVyW10pOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXRUZW5zb3IuZGltcztcbiAgICAgIGNvbnN0IHJvaSA9IHVwZGF0ZVJvSShyb2lJbnB1dCwgYXR0cmlidXRlcy5heGVzLCBpbnB1dFNoYXBlLmxlbmd0aCk7XG5cbiAgICAgIGxldCBvdXRwdXRTaGFwZSA9IGluaXRPdXRwdXRTaGFwZShpbnB1dFNoYXBlLCBzY2FsZXNJbnB1dCwgc2l6ZXMsIGF0dHJpYnV0ZXMuYXhlcyk7XG4gICAgICBsZXQgc2NhbGVzID0gc2NhbGVzSW5wdXQuc2xpY2UoKTtcbiAgICAgIGlmIChzY2FsZXNJbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc2NhbGVzID0gaW5wdXRTaGFwZS5tYXAoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IDAgPyAxLjAgOiBvdXRwdXRTaGFwZVtpbmRleF0gLyB2YWx1ZSk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLmtlZXBBc3BlY3RSYXRpb1BvbGljeSAhPT0gJ3N0cmV0Y2gnKSB7XG4gICAgICAgICAgb3V0cHV0U2hhcGUgPSBhZGp1c3RPdXRwdXRTaGFwZShpbnB1dFNoYXBlLCBzY2FsZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRUZW5zb3IuZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ2lucHV0JywgaW5wdXRUZW5zb3IuZGF0YVR5cGUsIGlucHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICBjb25zdCBub1NjYWxlID0gaW5wdXRTaGFwZS5sZW5ndGggPT09IG91dHB1dFNoYXBlLmxlbmd0aCAmJiBpbnB1dFNoYXBlLmV2ZXJ5KChkLCBpKSA9PiBkID09PSBvdXRwdXRTaGFwZVtpXSk7XG4gICAgICBjb25zdCB1c2VFeHRyYXBvbGF0aW9uID0gYXR0cmlidXRlcy5jb29yZGluYXRlVHJhbnNmb3JtTW9kZSA9PT0gJ3RmX2Nyb3BfYW5kX3Jlc2l6ZSc7XG4gICAgICBjb25zdCBleHRyYXBvbGF0aW9uVmFsdWUgPSBhdHRyaWJ1dGVzLmV4dHJhcG9sYXRpb25WYWx1ZTtcbiAgICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXQudHlwZS52YWx1ZTtcbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgJHtub1NjYWxlID8gJycgOiBgXG4gICAgICAke2dldE9yaWdpbmFsQ29vcmRpbmF0ZUZyb21SZXNpemVkQ29vcmRpbmF0ZShhdHRyaWJ1dGVzLmNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlLCBkYXRhVHlwZSl9O1xuICAgICAgJHsoKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZXMubW9kZSkge1xuICAgICAgICAgIGNhc2UgJ25lYXJlc3QnOlxuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgJHtjaGVja0lucHV0SW5kaWNlcyhpbnB1dCwgaW5wdXRTaGFwZSl9O1xuICAgICAgICAgICAgICAke2dldE5lYXJlc3RQaXhlbEZyb21PcmlnaW5hbChhdHRyaWJ1dGVzLm5lYXJlc3RNb2RlLCBvcHNldFZlcnNpb24sIGRhdGFUeXBlKX07XG4gICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlSW5wdXRJbmRpY2VzRnJvbU91dHB1dEluZGljZXMoXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQsIGlucHV0U2hhcGUsIG91dHB1dFNoYXBlLCBzY2FsZXMubGVuZ3RoLCByb2kubGVuZ3RoLCB1c2VFeHRyYXBvbGF0aW9uKX07XG4gICAgICAgICAgICAgIGA7XG4gICAgICAgICAgY2FzZSAnbGluZWFyJzpcbiAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICR7Y2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0LCBpbnB1dFNoYXBlLCBvdXRwdXRTaGFwZSwgc2NhbGVzLmxlbmd0aCwgcm9pLmxlbmd0aCl9O1xuICAgICAgICAgICAgICAkeygoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpbnB1dFNoYXBlLmxlbmd0aCA9PT0gMiB8fCBpbnB1dFNoYXBlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtiaWxpbmVhckludGVycG9sYXRpb24oaW5wdXQsIG91dHB1dCwgaW5wdXRTaGFwZSwgdXNlRXh0cmFwb2xhdGlvbiwgZXh0cmFwb2xhdGlvblZhbHVlKX1gO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0U2hhcGUubGVuZ3RoID09PSAzIHx8IGlucHV0U2hhcGUubGVuZ3RoID09PSA1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RyaWxpbmVhckludGVycG9sYXRpb24oaW5wdXQsIG91dHB1dCwgaW5wdXRTaGFwZSwgdXNlRXh0cmFwb2xhdGlvbiwgZXh0cmFwb2xhdGlvblZhbHVlKX1gO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdMaW5lYXIgbW9kZSBvbmx5IHN1cHBvcnRzIGlucHV0IGRpbXMgMiwgMywgNCBhbmQgNSBhcmUgc3VwcG9ydGVkIGluIGxpbmVhciBtb2RlLicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpfTtcbiAgICAgICAgICAgIGA7XG4gICAgICAgICAgY2FzZSAnY3ViaWMnOlxuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICR7KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlucHV0U2hhcGUubGVuZ3RoID09PSAyIHx8IGlucHV0U2hhcGUubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke1xuICAgICAgICAgICAgICAgICAgICBiaWN1YmljSW50ZXJwb2xhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQsIGlucHV0U2hhcGUsIG91dHB1dFNoYXBlLCBzY2FsZXMsIHJvaSwgYXR0cmlidXRlcy5jdWJpY0NvZWZmQSwgdXNlRXh0cmFwb2xhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuZXh0cmFwb2xhdGlvblZhbHVlLCBhdHRyaWJ1dGVzLmV4Y2x1ZGVPdXRzaWRlKX1gO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdDdWJpYyBtb2RlIG9ubHkgc3VwcG9ydHMgaW5wdXQgZGltcyAyIGFuZCA0IGFyZSBzdXBwb3J0ZWQgaW4gbGluZWFyIG1vZGUuJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKCl9O1xuICAgICAgICAgICAgYDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgcmVzaXplIG1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgfSkoKX07XG4gICAgICBgfVxuICAgICAgJHtcbiAgICAgICAgICBzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3JtKCdvdXRwdXRfc2l6ZScsICd1MzInKVxuICAgICAgICAgICAgICAucmVnaXN0ZXJVbmlmb3JtKCdzY2FsZXMnLCAnZjMyJywgc2NhbGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgLnJlZ2lzdGVyVW5pZm9ybSgncm9pJywgJ2YzMicsIHJvaS5sZW5ndGgpXG4gICAgICAgICAgICAgIC5kZWNsYXJlVmFyaWFibGVzKGlucHV0LCBvdXRwdXQpfVxuICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF9zaXplJyl9XG4gICAgICAgICR7bm9TY2FsZSA/ICdvdXRwdXRbZ2xvYmFsX2lkeF0gPSBpbnB1dFtnbG9iYWxfaWR4XTsnIDogYFxuICAgICAgICBsZXQgb3V0cHV0X2luZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgICAgIHZhciBpbnB1dF9pbmRpY2VzOiAke2lucHV0LnR5cGUuaW5kaWNlc307XG4gICAgICAgICR7KCgpID0+IHtcbiAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVzLm1vZGUpIHtcbiAgICAgICAgICBjYXNlICduZWFyZXN0JzpcbiAgICAgICAgICAgIHJldHVybiBgaW5wdXRfaW5kaWNlcyA9IGNhbGN1bGF0ZUlucHV0SW5kaWNlc0Zyb21PdXRwdXRJbmRpY2VzKG91dHB1dF9pbmRpY2VzKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tJbnB1dEluZGljZXMoaW5wdXRfaW5kaWNlcykpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRbZ2xvYmFsX2lkeF0gPSAke2F0dHJpYnV0ZXMuZXh0cmFwb2xhdGlvblZhbHVlfTtcbiAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICBjYXNlICdsaW5lYXInOlxuICAgICAgICAgICAgcmV0dXJuIGBvdXRwdXRbZ2xvYmFsX2lkeF0gPSAke1xuICAgICAgICAgICAgICAgIChpbnB1dFNoYXBlLmxlbmd0aCA9PT0gMiB8fCBpbnB1dFNoYXBlLmxlbmd0aCA9PT0gNCkgPyAnYmlsaW5lYXJJbnRlcnBvbGF0aW9uJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmlsaW5lYXJJbnRlcnBvbGF0aW9uJ30ob3V0cHV0X2luZGljZXMpO2A7XG4gICAgICAgICAgY2FzZSAnY3ViaWMnOlxuICAgICAgICAgICAgcmV0dXJuICdvdXRwdXRbZ2xvYmFsX2lkeF0gPSBiaWN1YmljSW50ZXJwb2xhdGlvbihvdXRwdXRfaW5kaWNlcyk7JztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFVuc3VwcG9ydGVkIHJlc2l6ZSBtb2RlOiAke2F0dHJpYnV0ZXMubW9kZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSkoKX07XG5gfVxuICAgICAgfWA7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdSZXNpemUnLFxuICAgICAgICBzaGFkZXJDYWNoZToge1xuICAgICAgICAgIGhpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9fCR7b3BzZXRWZXJzaW9ufXwke3NjYWxlcy5sZW5ndGggPiAwID8gc2NhbGVzIDogJyd9fCR7XG4gICAgICAgICAgICAgIHNpemVzLmxlbmd0aCA+IDAgPyBzaXplcyA6ICcnfXwke3JvaS5sZW5ndGggPiAwID8gcm9pIDogJyd9fCR7bm9TY2FsZX18JHtpbnB1dFNoYXBlfWAsXG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuayddXG4gICAgICAgIH0sXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRUZW5zb3IuZGF0YVR5cGV9XSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3JtczogW1xuICAgICAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogc2NhbGVzfSxcbiAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogcm9pfSwgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRTaGFwZSwgb3V0cHV0U2hhcGUpXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuXG5jb25zdCBnZXRPcHNldFZlcnNpb25Gcm9tQ3VzdG9tRGF0YUJ1ZmZlciA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IG51bWJlciA9PiB7XG4gIGNvbnN0IGN1c3RvbURhdGFCdWZmZXIgPSBjb250ZXh0LmN1c3RvbURhdGFCdWZmZXI7XG4gIGNvbnN0IGN1c3RvbURhdGFCdWZmZXIzMiA9IG5ldyBVaW50MzJBcnJheShjdXN0b21EYXRhQnVmZmVyLCBjdXN0b21EYXRhQnVmZmVyLmJ5dGVPZmZzZXQsIDEpO1xuICBjb25zdCBvcHNldFZlcnNpb24gPSBjdXN0b21EYXRhQnVmZmVyMzJbMF07XG4gIHJldHVybiBvcHNldFZlcnNpb247XG59O1xuXG5leHBvcnQgY29uc3QgcmVzaXplID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZXNpemVBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IHNjYWxlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc2l6ZXM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHJvaTogbnVtYmVyW10gPSBbXTtcblxuICAvLyBOb3RlIHRoYXQgc2NhbGVzIGluIHJlc2l6ZSBhcmUgYWx3YXlzIGYzMi4gcm9pIGNhbiBiZSBmMzIgb3IgZjE2LlxuICAvLyBUT0RPOiBDdXJyZW50bHkgdGhpcyBjb2RlIGRvZXMgbm90IHN1cHBvcnQgZjE2IGZvciByb2kgd2hlbiBwYXNzZWQgYXMgb3B0aW9uYWwgaW5wdXQuXG5cbiAgY29uc3Qgb3BzZXRWZXJzaW9uID0gZ2V0T3BzZXRWZXJzaW9uRnJvbUN1c3RvbURhdGFCdWZmZXIoY29udGV4dCk7XG4gIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcyAhPT0gMCkge1xuICAgIHRocm93IEVycm9yKCdPbmx5IGRlZmF1bHQgdmFsdWUgKDApIGZvciBBbnRpYWxpYXMgYXR0cmlidXRlIGlzIHN1cHBvcnRlZCcpO1xuICB9XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzLCBvcHNldFZlcnNpb24sIHNjYWxlcywgc2l6ZXMsIHJvaSk7XG4gIGNvbnRleHQuY29tcHV0ZShcbiAgICAgIGNyZWF0ZVJlc2l6ZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBhdHRyaWJ1dGVzLCBvcHNldFZlcnNpb24sIHNjYWxlcywgc2l6ZXMsIHJvaSksIHtpbnB1dHM6IFswXX0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlUmVzaXplQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlc2l6ZUF0dHJpYnV0ZXMgPT4ge1xuICBjb25zdCBhbnRpYWxpYXMgPSBhdHRyaWJ1dGVzLmFudGlhbGlhcyBhcyBudW1iZXI7XG4gIGNvbnN0IGF4ZXMgPSBhdHRyaWJ1dGVzLmF4ZXMgYXMgbnVtYmVyW107XG4gIGNvbnN0IGNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlOiBDb29yZGluYXRlVHJhbnNmb3JtTW9kZSA9XG4gICAgICBhdHRyaWJ1dGVzLmNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlIGFzIENvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlO1xuICBjb25zdCBjdWJpY0NvZWZmQSA9IGF0dHJpYnV0ZXMuY3ViaWNDb2VmZkEgYXMgbnVtYmVyO1xuICBjb25zdCBleGNsdWRlT3V0c2lkZSA9IGF0dHJpYnV0ZXMuZXhjbHVkZU91dHNpZGUgYXMgbnVtYmVyICE9PSAwO1xuICBjb25zdCBleHRyYXBvbGF0aW9uVmFsdWUgPSBhdHRyaWJ1dGVzLmV4dHJhcG9sYXRpb25WYWx1ZSBhcyBudW1iZXI7XG4gIGNvbnN0IGtlZXBBc3BlY3RSYXRpb1BvbGljeTogS2VlcEFzcGVjdFJhdGlvUG9saWN5ID0gYXR0cmlidXRlcy5rZWVwQXNwZWN0UmF0aW9Qb2xpY3kgYXMgS2VlcEFzcGVjdFJhdGlvUG9saWN5O1xuICBjb25zdCBtb2RlOiBNb2RlID0gYXR0cmlidXRlcy5tb2RlIGFzIE1vZGU7XG4gIC8vIElmIG5lYXJlc3RNb2RlIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSBzaW1wbGUgbW9kZS5cbiAgY29uc3QgbmVhcmVzdE1vZGU6IE5lYXJlc3RNb2RlID0gKGF0dHJpYnV0ZXMubmVhcmVzdE1vZGUgPT09ICcnID8gJ3NpbXBsZScgOiBhdHRyaWJ1dGVzLm5lYXJlc3RNb2RlKSBhcyBOZWFyZXN0TW9kZTtcbiAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7XG4gICAgYW50aWFsaWFzLFxuICAgIGF4ZXMsXG4gICAgY29vcmRpbmF0ZVRyYW5zZm9ybU1vZGUsXG4gICAgY3ViaWNDb2VmZkEsXG4gICAgZXhjbHVkZU91dHNpZGUsXG4gICAgZXh0cmFwb2xhdGlvblZhbHVlLFxuICAgIGtlZXBBc3BlY3RSYXRpb1BvbGljeSxcbiAgICBtb2RlLFxuICAgIG5lYXJlc3RNb2RlXG4gIH0pO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge2NyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCBXT1JLR1JPVVBfU0laRX0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdGFyeUVtYmVkZGluZ0F0dHJpYnV0ZXMge1xuICByZWFkb25seSBpbnRlcmxlYXZlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbnVtSGVhZHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgcm90YXJ5RW1iZWRkaW5nRGltOiBudW1iZXI7XG4gIHJlYWRvbmx5IHNjYWxlOiBudW1iZXI7XG59XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBSb3RhcnlFbWJlZGRpbmdBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IFtpbnB1dCwgcG9zaXRpb25JZHMsIGNvc0NhY2hlLCBzaW5DYWNoZV0gPSBpbnB1dHM7XG4gIGNvbnN0IHtudW1IZWFkcywgcm90YXJ5RW1iZWRkaW5nRGltfSA9IGF0dHJpYnV0ZXM7XG5cbiAgaWYgKGlucHV0LmRpbXMubGVuZ3RoICE9PSAzICYmIGlucHV0LmRpbXMubGVuZ3RoICE9PSA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAneCcgaXMgZXhwZWN0ZWQgdG8gaGF2ZSAzIG9yIDQgZGltZW5zaW9ucywgZ290ICR7aW5wdXQuZGltcy5sZW5ndGh9YCk7XG4gIH1cbiAgaWYgKCFTaGFwZVV0aWwuYXJlRXF1YWwocG9zaXRpb25JZHMuZGltcywgW10pICYmICFTaGFwZVV0aWwuYXJlRXF1YWwocG9zaXRpb25JZHMuZGltcywgWzFdKSAmJlxuICAgICAgcG9zaXRpb25JZHMuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdwb3NpdGlvbl9pZHMnIGlzIGV4cGVjdGVkIHRvIGhhdmUgMCwgMSwgb3IgMiBkaW1lbnNpb25zLCBnb3QgJHtwb3NpdGlvbklkcy5kaW1zLmxlbmd0aH1gKTtcbiAgfVxuICBpZiAoY29zQ2FjaGUuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdjb3NfY2FjaGUnIGlzIGV4cGVjdGVkIHRvIGhhdmUgMiBkaW1lbnNpb25zLCBnb3QgJHtjb3NDYWNoZS5kaW1zLmxlbmd0aH1gKTtcbiAgfVxuICBpZiAoc2luQ2FjaGUuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdzaW5fY2FjaGUnIGlzIGV4cGVjdGVkIHRvIGhhdmUgMiBkaW1lbnNpb25zLCBnb3QgJHtzaW5DYWNoZS5kaW1zLmxlbmd0aH1gKTtcbiAgfVxuICBpZiAoIVNoYXBlVXRpbC5hcmVFcXVhbChjb3NDYWNoZS5kaW1zLCBzaW5DYWNoZS5kaW1zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5wdXRzIFxcJ2Nvc19jYWNoZVxcJyBhbmQgXFwnc2luX2NhY2hlXFwnIGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lIHNoYXBlJyk7XG4gIH1cblxuICBpZiAocm90YXJ5RW1iZWRkaW5nRGltID4gMCAmJiBudW1IZWFkcyA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbnVtX2hlYWRzIG11c3QgYmUgcHJvdmlkZWQgaWYgcm90YXJ5X2VtYmVkZGluZ19kaW0gaXMgc3BlY2lmaWVkJyk7XG4gIH1cblxuICBjb25zdCBiYXRjaFNpemUgPSBpbnB1dC5kaW1zWzBdO1xuICBjb25zdCBzZXF1ZW5jZUxlbmd0aCA9IGlucHV0LmRpbXNbaW5wdXQuZGltcy5sZW5ndGggLSAyXTtcbiAgY29uc3QgbWF4U2VxdWVuY2VMZW5ndGggPSBjb3NDYWNoZS5kaW1zWzBdO1xuICBjb25zdCBoaWRkZW5TaXplID0gU2hhcGVVdGlsLnNpemVGcm9tRGltZW5zaW9uKGlucHV0LmRpbXMsIDEpIC8gc2VxdWVuY2VMZW5ndGg7XG4gIGNvbnN0IGhlYWRTaXplID0gcm90YXJ5RW1iZWRkaW5nRGltID09PSAwID8gY29zQ2FjaGUuZGltc1sxXSAqIDIgOiBoaWRkZW5TaXplIC8gbnVtSGVhZHM7XG4gIGlmIChyb3RhcnlFbWJlZGRpbmdEaW0gPiBoZWFkU2l6ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncm90YXJ5X2VtYmVkZGluZ19kaW0gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gaGVhZF9zaXplJyk7XG4gIH1cblxuICBpZiAocG9zaXRpb25JZHMuZGltcy5sZW5ndGggPT09IDIpIHtcbiAgICBpZiAoYmF0Y2hTaXplICE9PSBwb3NpdGlvbklkcy5kaW1zWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdwb3NpdGlvbl9pZHMnIGRpbWVuc2lvbiAwIHNob3VsZCBiZSBvZiBzaXplIGJhdGNoX3NpemUsIGdvdCAke3Bvc2l0aW9uSWRzLmRpbXNbMF19YCk7XG4gICAgfVxuICAgIGlmIChzZXF1ZW5jZUxlbmd0aCAhPT0gcG9zaXRpb25JZHMuZGltc1sxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAncG9zaXRpb25faWRzJyBkaW1lbnNpb24gMSBzaG91bGQgYmUgb2Ygc2l6ZSBzZXF1ZW5jZV9sZW5ndGgsIGdvdCAke3Bvc2l0aW9uSWRzLmRpbXNbMV19YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGhlYWRTaXplIC8gMiAhPT0gY29zQ2FjaGUuZGltc1sxXSAmJiByb3RhcnlFbWJlZGRpbmdEaW0gLyAyICE9PSBjb3NDYWNoZS5kaW1zWzFdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAnY29zX2NhY2hlJyBkaW1lbnNpb24gMSBzaG91bGQgYmUgc2FtZSBhcyBoZWFkX3NpemUgLyAyIG9yIHJvdGFyeV9lbWJlZGRpbmdfZGltIC8gMiwgZ290ICR7XG4gICAgICAgIGNvc0NhY2hlLmRpbXNbMV19YCk7XG4gIH1cblxuICBpZiAoc2VxdWVuY2VMZW5ndGggPiBtYXhTZXF1ZW5jZUxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVXBkYXRpbmcgY29zX2NhY2hlIGFuZCBzaW5fY2FjaGUgaW4gUm90YXJ5RW1iZWRkaW5nIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkJyk7XG4gIH1cbn07XG5cbmNvbnN0IGNyZWF0ZVJvdGFyeUVtYmVkZGluZ1Byb2dyYW1JbmZvID1cbiAgICAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IFJvdGFyeUVtYmVkZGluZ0F0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCB7aW50ZXJsZWF2ZWQsIG51bUhlYWRzLCByb3RhcnlFbWJlZGRpbmdEaW0sIHNjYWxlfSA9IGF0dHJpYnV0ZXM7XG4gICAgICBjb25zdCBiYXRjaFNpemUgPSBpbnB1dHNbMF0uZGltc1swXTtcbiAgICAgIGNvbnN0IGJhdGNoU3RyaWRlID0gU2hhcGVVdGlsLnNpemVGcm9tRGltZW5zaW9uKGlucHV0c1swXS5kaW1zLCAxKTtcbiAgICAgIGNvbnN0IHNlcXVlbmNlTGVuZ3RoID0gaW5wdXRzWzBdLmRpbXNbaW5wdXRzWzBdLmRpbXMubGVuZ3RoIC0gMl07XG4gICAgICBjb25zdCBoaWRkZW5TaXplID0gYmF0Y2hTdHJpZGUgLyBzZXF1ZW5jZUxlbmd0aDtcbiAgICAgIGNvbnN0IGhhbGZSb3RhcnlFbWJlZGRpbmdEaW0gPSBpbnB1dHNbMl0uZGltc1sxXTtcbiAgICAgIGNvbnN0IGhlYWRTaXplID0gcm90YXJ5RW1iZWRkaW5nRGltID09PSAwID8gaGFsZlJvdGFyeUVtYmVkZGluZ0RpbSAqIDIgOiBoaWRkZW5TaXplIC8gbnVtSGVhZHM7XG5cbiAgICAgIC8vIFJvdGFyeSBlbWJlZGRpbmdzIHdpbGwgYmUgY2FsY3VsYXRlZCBpbiBhIHBhaXItd2lzZSBmYXNoaW9uLiBJbiBhY2NvcmRhbmNlLCB1c2UgdGhlIHNoYXBlXG4gICAgICAvLyBbYmF0Y2ggc2l6ZSwgc2VxdWVuY2UgbGVuZ3RoLCBudW0gb2YgaGVhZHMsIG51bSBvZiBwYWlycyB0byByb3RhdGUgKyBudW0gb2YgZGltcyB0byBjb3B5XVxuICAgICAgLy8gdG8gdW5mb2xkIHRoZSBnbG9iYWwgaW5kZXggaW4gc2hhZGVyLlxuICAgICAgY29uc3QgZ2xvYmFsU2hhcGUgPVxuICAgICAgICAgIG5ldyBBcnJheTxudW1iZXI+KGJhdGNoU2l6ZSwgc2VxdWVuY2VMZW5ndGgsIGhpZGRlblNpemUgLyBoZWFkU2l6ZSwgaGVhZFNpemUgLSBoYWxmUm90YXJ5RW1iZWRkaW5nRGltKTtcbiAgICAgIGNvbnN0IGdsb2JhbFN0cmlkZXMgPSBTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoZ2xvYmFsU2hhcGUpO1xuXG4gICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPSBbXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogc2NhbGV9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBnbG9iYWxTaGFwZX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGdsb2JhbFN0cmlkZXN9LFxuXG4gICAgICAgIC8vIHN0cmlkZXMgZm9yIGFkZHJlc3NpbmcgdGhlIGlucHV0L291dHB1dCB0ZW5zb3IsIGluIHBlcm11dGF0ZWQgb3JkZXIgdG8gYWxpZ24gd2l0aCB0aGUgdW5mb2xkZWQgZ2xvYmFsIGluZGV4LFxuICAgICAgICAvLyBpLmUuIEJTTkhcbiAgICAgICAgLi4uKGlucHV0c1swXS5kaW1zLmxlbmd0aCA9PT0gMyA/XG4gICAgICAgICAgICAgICAgbmV3IEFycmF5PFByb2dyYW1Vbmlmb3JtPih7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBbYmF0Y2hTdHJpZGUsIGhpZGRlblNpemUsIGhlYWRTaXplLCAxXX0pIDpcbiAgICAgICAgICAgICAgICBbXSksXG4gICAgICAgIC4uLihpbnB1dHNbMF0uZGltcy5sZW5ndGggPT09IDQgP1xuICAgICAgICAgICAgICAgIG5ldyBBcnJheTxQcm9ncmFtVW5pZm9ybT4oXG4gICAgICAgICAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IFtiYXRjaFN0cmlkZSwgaGVhZFNpemUsIHNlcXVlbmNlTGVuZ3RoICogaGVhZFNpemUsIDFdfSkgOlxuICAgICAgICAgICAgICAgIFtdKSxcblxuICAgICAgICAuLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMF0uZGltcywgaW5wdXRzWzFdLmRpbXMsIGlucHV0c1syXS5kaW1zLCBpbnB1dHNbM10uZGltcywgaW5wdXRzWzBdLmRpbXMpLFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uSWRzID0gaW5wdXRWYXJpYWJsZSgncG9zaXRpb25faWRzJywgaW5wdXRzWzFdLmRhdGFUeXBlLCBpbnB1dHNbMV0uZGltcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBjb3NDYWNoZSA9IGlucHV0VmFyaWFibGUoJ2Nvc19jYWNoZScsIGlucHV0c1syXS5kYXRhVHlwZSwgaW5wdXRzWzJdLmRpbXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgc2luQ2FjaGUgPSBpbnB1dFZhcmlhYmxlKCdzaW5fY2FjaGUnLCBpbnB1dHNbM10uZGF0YVR5cGUsIGlucHV0c1szXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG5cbiAgICAgICAgc2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXMoW1xuICAgICAgICAgIHtuYW1lOiAnc2NhbGUnLCB0eXBlOiAnZjMyJ30sXG4gICAgICAgICAge25hbWU6ICdnbG9iYWxfc2hhcGUnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBnbG9iYWxTaGFwZS5sZW5ndGh9LFxuICAgICAgICAgIHtuYW1lOiAnZ2xvYmFsX3N0cmlkZXMnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBnbG9iYWxTdHJpZGVzLmxlbmd0aH0sXG4gICAgICAgICAge25hbWU6ICdpbnB1dF9vdXRwdXRfc3RyaWRlcycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGdsb2JhbFN0cmlkZXMubGVuZ3RofSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgcG9zaXRpb25JZHMsIGNvc0NhY2hlLCBzaW5DYWNoZSwgb3V0cHV0KX1cblxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoV09SS0dST1VQX1NJWkUpfVxuICAgICAgICAgIGxldCBoYWxmX3JvdGFyeV9lbWJfZGltID0gdW5pZm9ybXMuJHtjb3NDYWNoZS5uYW1lfV9zaGFwZVsxXTtcbiAgICAgICAgICBsZXQgYnNuaCA9IGdsb2JhbF9pZHggLyB1bmlmb3Jtcy5nbG9iYWxfc3RyaWRlcyAlIHVuaWZvcm1zLmdsb2JhbF9zaGFwZTtcbiAgICAgICAgICBsZXQgc2l6ZSA9IHVuaWZvcm1zLmdsb2JhbF9zaGFwZVswXSAqIHVuaWZvcm1zLmdsb2JhbF9zdHJpZGVzWzBdO1xuICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3NpemUnKX1cblxuICAgICAgICAgIGlmIChic25oWzNdIDwgaGFsZl9yb3RhcnlfZW1iX2RpbSkge1xuICAgICAgICAgICAgbGV0IHBvc2l0aW9uX2lkc19pZHggPVxuICAgICAgICAgICAgICAgICR7cG9zaXRpb25JZHMuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoJ2JzbmgueHknLCBvdXRwdXRWYXJpYWJsZSgnJywgcG9zaXRpb25JZHMudHlwZS50ZW5zb3IsIDIpKX07XG4gICAgICAgICAgICBsZXQgcG9zaXRpb25faWQgPVxuICAgICAgICAgICAgICAgIHUzMigke3Bvc2l0aW9uSWRzLmdldEJ5T2Zmc2V0KCdwb3NpdGlvbl9pZHNfaWR4Jyl9KSArIHNlbGVjdCgwLCBic25oWzFdLCBwb3NpdGlvbl9pZHNfaWR4ID09IDApO1xuICAgICAgICAgICAgbGV0IGkgPSBkb3QoYnNuaCwgdW5pZm9ybXMuaW5wdXRfb3V0cHV0X3N0cmlkZXMpICsgc2VsZWN0KDAsIGJzbmhbM10sICR7aW50ZXJsZWF2ZWR9KTtcbiAgICAgICAgICAgIGxldCBqID0gaSArIHNlbGVjdChoYWxmX3JvdGFyeV9lbWJfZGltLCAxLCAke2ludGVybGVhdmVkfSk7XG4gICAgICAgICAgICBsZXQgcmUgPSAke2lucHV0LmdldEJ5T2Zmc2V0KCdpJyl9ICogJHtjb3NDYWNoZS5nZXQoJ3Bvc2l0aW9uX2lkJywgJ2JzbmhbM10nKX0gLVxuICAgICAgICAgICAgICAgICR7aW5wdXQuZ2V0QnlPZmZzZXQoJ2onKX0gKiAke3NpbkNhY2hlLmdldCgncG9zaXRpb25faWQnLCAnYnNuaFszXScpfTtcbiAgICAgICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdpJywgJ3JlJyl9XG4gICAgICAgICAgICBsZXQgaW0gPSAke2lucHV0LmdldEJ5T2Zmc2V0KCdpJyl9ICogJHtzaW5DYWNoZS5nZXQoJ3Bvc2l0aW9uX2lkJywgJ2JzbmhbM10nKX0gK1xuICAgICAgICAgICAgICAgICR7aW5wdXQuZ2V0QnlPZmZzZXQoJ2onKX0gKiAke2Nvc0NhY2hlLmdldCgncG9zaXRpb25faWQnLCAnYnNuaFszXScpfTtcbiAgICAgICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdqJywgJ2ltJyl9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBrID0gZG90KGJzbmgsIHVuaWZvcm1zLmlucHV0X291dHB1dF9zdHJpZGVzKSArIGhhbGZfcm90YXJ5X2VtYl9kaW07XG4gICAgICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnaycsIGlucHV0LmdldEJ5T2Zmc2V0KCdrJykpfVxuICAgICAgICAgIH1cbiAgICAgICAgfWA7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnUm90YXJ5RW1iZWRkaW5nJyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHtcbiAgICAgICAgICBoaW50OiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoe1xuICAgICAgICAgICAgICAgICAgaW50ZXJsZWF2ZWQsXG4gICAgICAgICAgICAgICAgfSkuY2FjaGVLZXksXG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuaycsICdyYW5rJywgJ3JhbmsnLCAncmFuayddLFxuICAgICAgICB9LFxuICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBpbnB1dHNbMF0uZGltcywgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUoZ2xvYmFsU2hhcGUpIC8gV09SS0dST1VQX1NJWkUpfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXMsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3Qgcm90YXJ5RW1iZWRkaW5nID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSb3RhcnlFbWJlZGRpbmdBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVJvdGFyeUVtYmVkZGluZ1Byb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKSk7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Nhc3RUb0YzMiwgZmlsbFZlY3RvciwgZ2V0TWF4Q29tcG9uZW50cywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgc3VtVmVjdG9yLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuL2NvbW1vbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2tpcExheWVyTm9ybUF0dHJpYnV0ZXMge1xuICBzaW1wbGlmaWVkOiBib29sZWFuO1xuICBlcHNpbG9uOiBudW1iZXI7XG59XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogdm9pZCA9PiB7XG4gIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdsYXllck5vcm0gcmVxdWlyZXMgYXQgbGVhc3QgMyBpbnB1dHMuJyk7XG4gIH1cblxuICBjb25zdCBpbnB1dDogVGVuc29yVmlldyA9IGlucHV0c1swXTtcbiAgY29uc3Qgc2tpcDogVGVuc29yVmlldyA9IGlucHV0c1sxXTtcbiAgY29uc3QgZ2FtbWE6IFRlbnNvclZpZXcgPSBpbnB1dHNbMl07XG5cbiAgaWYgKGlucHV0LmRhdGFUeXBlICE9PSBza2lwLmRhdGFUeXBlIHx8IGlucHV0LmRhdGFUeXBlICE9PSBnYW1tYS5kYXRhVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWxsIGlucHV0cyBtdXN0IGhhdmUgdGhlIHNhbWUgZGF0YSB0eXBlJyk7XG4gIH1cblxuICBpZiAoaW5wdXQuZGltcy5sZW5ndGggIT09IDMgJiYgaW5wdXQuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgMkQgb3IgM0QnKTtcbiAgfVxuXG4gIGlmIChza2lwLmRpbXMubGVuZ3RoICE9PSAzICYmIHNraXAuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NraXAgbXVzdCBiZSAyRCBvciAzRCcpO1xuICB9XG5cbiAgY29uc3QgaGlkZGVuU2l6ZSA9IGlucHV0LmRpbXNbaW5wdXQuZGltcy5sZW5ndGggLSAxXTtcbiAgY29uc3Qgc2VxdWVuY2VMZW5ndGggPSBpbnB1dC5kaW1zW2lucHV0LmRpbXMubGVuZ3RoIC0gMl07XG4gIGlmIChza2lwLmRpbXNbc2tpcC5kaW1zLmxlbmd0aCAtIDFdICE9PSBoaWRkZW5TaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTa2lwIG11c3QgaGF2ZSB0aGUgc2FtZSBoaWRkZW4gc2l6ZSBhcyBpbnB1dCcpO1xuICB9XG4gIGlmIChza2lwLmRpbXNbc2tpcC5kaW1zLmxlbmd0aCAtIDJdICE9PSBzZXF1ZW5jZUxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2tpcCBtdXN0IGhhdmUgdGhlIHNhbWUgc2VxdWVuY2UgbGVuZ3RoIGFzIGlucHV0Jyk7XG4gIH1cblxuICBpZiAoZ2FtbWEuZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dhbW1hIG11c3QgYmUgMUQnKTtcbiAgfVxuICBpZiAoZ2FtbWEuZGltc1tnYW1tYS5kaW1zLmxlbmd0aCAtIDFdICE9PSBoaWRkZW5TaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHYW1tYSBtdXN0IGhhdmUgdGhlIHNhbWUgaGlkZGVuIHNpemUgYXMgaW5wdXQnKTtcbiAgfVxuICBpZiAoaW5wdXRzLmxlbmd0aCA+IDMpIHtcbiAgICBjb25zdCBiZXRhOiBUZW5zb3JWaWV3ID0gaW5wdXRzWzNdO1xuICAgIGlmIChiZXRhLmRpbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JldGEgbXVzdCBiZSAxRCcpO1xuICAgIH1cbiAgICBpZiAoYmV0YS5kaW1zW2JldGEuZGltcy5sZW5ndGggLSAxXSAhPT0gaGlkZGVuU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCZXRhIG11c3QgaGF2ZSB0aGUgc2FtZSBoaWRkZW4gc2l6ZSBhcyBpbnB1dCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnB1dHMubGVuZ3RoID4gNCkge1xuICAgIGNvbnN0IGJpYXM6IFRlbnNvclZpZXcgPSBpbnB1dHNbNF07XG4gICAgaWYgKGJpYXMuZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmlhcyBtdXN0IGJlIDFEJyk7XG4gICAgfVxuICAgIGlmIChiaWFzLmRpbXNbYmlhcy5kaW1zLmxlbmd0aCAtIDFdICE9PSBoaWRkZW5TaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JpYXMgbXVzdCBoYXZlIHRoZSBzYW1lIGhpZGRlbiBzaXplIGFzIGlucHV0Jyk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBjcmVhdGVTa2lwTGF5ZXJOb3JtUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogU2tpcExheWVyTm9ybUF0dHJpYnV0ZXMsIG91dHB1dENvdW50OiBudW1iZXIsIGlzVHJhaW5pbmc6IGJvb2xlYW4pOlxuICAgICAgICBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICAgICAgY29uc3Qgc2ltcGxpZmllZCA9IGF0dHJpYnV0ZXMuc2ltcGxpZmllZDtcblxuICAgICAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgICBjb25zdCBpbnB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShpbnB1dFNoYXBlKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0U2hhcGU7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IGlucHV0U2l6ZTtcbiAgICAgICAgICBjb25zdCBoaWRkZW5TaXplID0gaW5wdXRTaGFwZS5zbGljZSgtMSlbMF07XG4gICAgICAgICAgY29uc3QgbWVhbkludlN0ZERldkRpbSA9IGlzVHJhaW5pbmcgPyBpbnB1dFNoYXBlLnNsaWNlKDAsIC0xKS5jb25jYXQoMSkgOiBbXTtcbiAgICAgICAgICBjb25zdCBoYXNCZXRhSW5wdXQgPSAhc2ltcGxpZmllZCAmJiBpbnB1dHMubGVuZ3RoID4gMztcbiAgICAgICAgICBjb25zdCBoYXNCaWFzSW5wdXQgPSBpbnB1dHMubGVuZ3RoID4gNDtcbiAgICAgICAgICBjb25zdCBoYXNNZWFuT3V0cHV0ID0gaXNUcmFpbmluZyAmJiBvdXRwdXRDb3VudCA+IDE7XG4gICAgICAgICAgY29uc3QgaGFzSW52U3RkRGV2T3V0cHV0ID0gaXNUcmFpbmluZyAmJiBvdXRwdXRDb3VudCA+IDI7XG4gICAgICAgICAgY29uc3QgaGFzSW5wdXRTa2lwQmlhc1N1bU91dHB1dCA9IG91dHB1dENvdW50ID4gMztcblxuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKGhpZGRlblNpemUpO1xuXG4gICAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sXG4gICAgICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBjb21wb25lbnRzfSxcbiAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGhpZGRlblNpemV9LFxuICAgICAgICAgICAge3R5cGU6IERhdGFUeXBlLmZsb2F0LCBkYXRhOiBhdHRyaWJ1dGVzLmVwc2lsb259LFxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bmlmb3Jtc0FycmF5OiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgICAgICAgICAge25hbWU6ICdvdXRwdXRfc2l6ZScsIHR5cGU6ICd1MzInfSxcbiAgICAgICAgICAgICAge25hbWU6ICdjb21wb25lbnRzJywgdHlwZTogJ3UzMid9LFxuICAgICAgICAgICAgICB7bmFtZTogJ2hpZGRlbl9zaXplJywgdHlwZTogJ3UzMid9LFxuICAgICAgICAgICAgICB7bmFtZTogJ2Vwc2lsb24nLCB0eXBlOiAnZjMyJ30sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gW1xuICAgICAgICAgICAgICBpbnB1dFZhcmlhYmxlKCd4JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcywgY29tcG9uZW50cyksXG4gICAgICAgICAgICAgIGlucHV0VmFyaWFibGUoJ3NraXAnLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zLCBjb21wb25lbnRzKSxcbiAgICAgICAgICAgICAgaW5wdXRWYXJpYWJsZSgnZ2FtbWEnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLCBjb21wb25lbnRzKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaGFzQmV0YUlucHV0KSB7XG4gICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoJ2JldGEnLCBpbnB1dHNbM10uZGF0YVR5cGUsIGlucHV0c1szXS5kaW1zLCBjb21wb25lbnRzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQmlhc0lucHV0KSB7XG4gICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbNF0uZGF0YVR5cGUsIGlucHV0c1s0XS5kaW1zLCBjb21wb25lbnRzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXJpYWJsZXMucHVzaChvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgY29tcG9uZW50cykpO1xuICAgICAgICAgICAgaWYgKGhhc01lYW5PdXRwdXQpIHtcbiAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2gob3V0cHV0VmFyaWFibGUoJ21lYW5fb3V0cHV0JywgRGF0YVR5cGUuZmxvYXQsIG1lYW5JbnZTdGREZXZEaW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNJbnZTdGREZXZPdXRwdXQpIHtcbiAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2gob3V0cHV0VmFyaWFibGUoJ2ludl9zdGRfb3V0cHV0JywgRGF0YVR5cGUuZmxvYXQsIG1lYW5JbnZTdGREZXZEaW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNJbnB1dFNraXBCaWFzU3VtT3V0cHV0KSB7XG4gICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKG91dHB1dFZhcmlhYmxlKCdpbnB1dF9za2lwX2JpYXNfc3VtJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgY29tcG9uZW50cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBgXG5cbiAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXNBcnJheSkuZGVjbGFyZVZhcmlhYmxlcyguLi52YXJpYWJsZXMpfVxuXG4gICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0X3NpemUgLyB1bmlmb3Jtcy5oaWRkZW5fc2l6ZScpfVxuICAgICAgICBsZXQgaGlkZGVuX3NpemVfdmVjdG9yaXplZDogdTMyID0gdW5pZm9ybXMuaGlkZGVuX3NpemUgLyB1bmlmb3Jtcy5jb21wb25lbnRzO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gZ2xvYmFsX2lkeCAqIGhpZGRlbl9zaXplX3ZlY3Rvcml6ZWQ7XG4gICAgICAgIHZhciBzdW0gPSAke2ZpbGxWZWN0b3IoJ2YzMicsIGNvbXBvbmVudHMpfTtcbiAgICAgICAgdmFyIHNxdWFyZVN1bSA9ICR7ZmlsbFZlY3RvcignZjMyJywgY29tcG9uZW50cyl9O1xuICAgICAgICBmb3IgKHZhciBpOiB1MzIgPSAwOyBpIDwgaGlkZGVuX3NpemVfdmVjdG9yaXplZDsgaSsrKSB7XG4gICAgICAgICAgbGV0IHNraXBfdmFsdWUgPSBza2lwW29mZnNldCArIGldO1xuICAgICAgICAgIGxldCBiaWFzX3ZhbHVlID0gJHtoYXNCaWFzSW5wdXQgPyAnYmlhc1tpXScgOiBkYXRhVHlwZSArICcoMC4wKSd9O1xuICAgICAgICAgIGxldCBpbnB1dF92YWx1ZSA9IHhbb2Zmc2V0ICsgaV07XG4gICAgICAgICAgbGV0IHZhbHVlID0gaW5wdXRfdmFsdWUgKyBza2lwX3ZhbHVlICsgYmlhc192YWx1ZTtcbiAgICAgICAgICAke2hhc0lucHV0U2tpcEJpYXNTdW1PdXRwdXQgPyAnaW5wdXRfc2tpcF9iaWFzX3N1bVtvZmZzZXQgKyBpXSA9IHZhbHVlOycgOiAnJ31cbiAgICAgICAgICBvdXRwdXRbb2Zmc2V0ICsgaV0gPSB2YWx1ZTtcbiAgICAgICAgICBsZXQgZjMyX3ZhbHVlID0gJHtjYXN0VG9GMzIoZGF0YVR5cGUsIGNvbXBvbmVudHMsICd2YWx1ZScpfTtcbiAgICAgICAgICBzdW0gKz0gZjMyX3ZhbHVlO1xuICAgICAgICAgIHNxdWFyZVN1bSArPSBmMzJfdmFsdWUgKiBmMzJfdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lYW4gPSAke3N1bVZlY3Rvcignc3VtJywgY29tcG9uZW50cyl9IC8gZjMyKHVuaWZvcm1zLmhpZGRlbl9zaXplKTtcbiAgICAgICAgbGV0IGludl9zdGRfZGV2ID0gaW52ZXJzZVNxcnQoJHtzdW1WZWN0b3IoJ3NxdWFyZVN1bScsIGNvbXBvbmVudHMpfSAvIGYzMih1bmlmb3Jtcy5oaWRkZW5fc2l6ZSkgJHtcbiAgICAgICAgICAgICAgICBzaW1wbGlmaWVkID8gJycgOiAnLSBtZWFuICogbWVhbid9ICsgdW5pZm9ybXMuZXBzaWxvbik7XG4gICAgICAgICR7aGFzTWVhbk91dHB1dCA/ICdtZWFuX291dHB1dFtnbG9iYWxfaWR4XSA9IG1lYW47JyA6ICcnfVxuICAgICAgICAke2hhc0ludlN0ZERldk91dHB1dCA/ICdpbnZfc3RkX291dHB1dFtnbG9iYWxfaWR4XSA9IGludl9zdGRfZGV2OycgOiAnJ31cbiAgICAgICAgZm9yICh2YXIgaTogdTMyID0gMDsgaSA8IGhpZGRlbl9zaXplX3ZlY3Rvcml6ZWQ7IGkrKykge1xuICAgICAgICAgIG91dHB1dFtvZmZzZXQgKyBpXSA9IChvdXRwdXRbb2Zmc2V0ICsgaV0gJHtzaW1wbGlmaWVkID8gJycgOiBgLSAke2RhdGFUeXBlfShtZWFuKWB9KSAqICR7XG4gICAgICAgICAgICAgICAgZGF0YVR5cGV9KGludl9zdGRfZGV2KSAqIGdhbW1hW2ldICR7aGFzQmV0YUlucHV0ID8gJysgYmV0YVtpXScgOiAnJ307XG4gICAgICAgIH1cbiAgICAgIH1gO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgb3V0cHV0cyA9IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9XTtcbiAgICAgICAgICBpZiAob3V0cHV0Q291bnQgPiAxKSB7XG4gICAgICAgICAgICBvdXRwdXRzLnB1c2goe2RpbXM6IG1lYW5JbnZTdGREZXZEaW0sIGRhdGFUeXBlOiBEYXRhVHlwZS5mbG9hdH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3V0cHV0Q291bnQgPiAyKSB7XG4gICAgICAgICAgICBvdXRwdXRzLnB1c2goe2RpbXM6IG1lYW5JbnZTdGREZXZEaW0sIGRhdGFUeXBlOiBEYXRhVHlwZS5mbG9hdH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3V0cHV0Q291bnQgPiAzKSB7XG4gICAgICAgICAgICBvdXRwdXRzLnB1c2goe2RpbXM6IGlucHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICdTa2lwTGF5ZXJOb3JtYWxpemF0aW9uJyxcbiAgICAgICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgICAgIGhpbnQ6IGAke2NvbXBvbmVudHN9OyR7aGFzTWVhbk91dHB1dH07JHtoYXNJbnZTdGREZXZPdXRwdXR9OyR7aGFzSW5wdXRTa2lwQmlhc1N1bU91dHB1dH1gLFxuICAgICAgICAgICAgICBpbnB1dERlcGVuZGVuY2llczogaW5wdXRzLm1hcCgoX2lucHV0LCBfaW5kZXgpID0+ICd0eXBlJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe291dHB1dHMsIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIGhpZGRlblNpemUgLyA2NCl9LCBwcm9ncmFtVW5pZm9ybXN9KSxcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG5leHBvcnQgY29uc3Qgc2tpcExheWVyTm9ybSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogU2tpcExheWVyTm9ybUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgLy8gVE9ETzogaW5pdGlhbGl6ZSBpc1RyYWluaW5nIGZyb20gQ29tcHV0ZUNvbnRleHRcbiAgY29uc3QgaXNUcmFpbmluZyA9IGZhbHNlO1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIC8vIE1lYW4gYW5kIEludlN0ZERldiBhcmUgb25seSB1c2VkIGluIHRyYWluaW5nIG1vZGUgYW5kIGFyZSBub3QgcmVxdWlyZWQgZm9yIGluZmVyZW5jZS5cbiAgLy8gVGhleSBhcmUgYWRkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzIG9ubHkuXG4gIGNvbnN0IG91dHB1dHMgPSBbMF07XG4gIGlmIChjb250ZXh0Lm91dHB1dENvdW50ID4gMSkge1xuICAgIG91dHB1dHMucHVzaChpc1RyYWluaW5nID8gMSA6IC0zKTtcbiAgfVxuICBpZiAoY29udGV4dC5vdXRwdXRDb3VudCA+IDIpIHtcbiAgICBvdXRwdXRzLnB1c2goaXNUcmFpbmluZyA/IDIgOiAtMyk7XG4gIH1cbiAgaWYgKGNvbnRleHQub3V0cHV0Q291bnQgPiAzKSB7XG4gICAgb3V0cHV0cy5wdXNoKDMpO1xuICB9XG4gIGNvbnRleHQuY29tcHV0ZShcbiAgICAgIGNyZWF0ZVNraXBMYXllck5vcm1Qcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcywgY29udGV4dC5vdXRwdXRDb3VudCwgaXNUcmFpbmluZyksIHtvdXRwdXRzfSk7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7QXR0cmlidXRlV2l0aENhY2hlS2V5LCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbVVuaWZvcm0sIFRlbnNvckluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgZ2V0RWxlbWVudEF0LCBJbmRpY2VzSGVscGVyLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCBVbmlmb3Jtc0FycmF5VHlwZX0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlQXR0cmlidXRlcyBleHRlbmRzIEF0dHJpYnV0ZVdpdGhDYWNoZUtleSB7XG4gIHJlYWRvbmx5IHN0YXJ0czogbnVtYmVyW107XG4gIHJlYWRvbmx5IGVuZHM6IG51bWJlcltdO1xuICByZWFkb25seSBheGVzOiBudW1iZXJbXTtcbn1cblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IFNsaWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9vIGZldyBpbnB1dHMnKTtcbiAgfVxuICBpZiAoYXR0cmlidXRlcy5heGVzLmxlbmd0aCAhPT0gMCkge1xuICAgIGlmIChhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoICE9PSBhdHRyaWJ1dGVzLnN0YXJ0cy5sZW5ndGggfHwgYXR0cmlidXRlcy5heGVzLmxlbmd0aCAhPT0gYXR0cmlidXRlcy5lbmRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdheGVzLCBzdGFydHMgYW5kIGVuZHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0YXJ0cy5sZW5ndGggIT09IGF0dHJpYnV0ZXMuZW5kcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0cyBhbmQgZW5kcyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gIH1cbiAgaW5wdXRzLnNsaWNlKDEpLmZvckVhY2goKF8sIGlkeCkgPT4ge1xuICAgIGlmIChpbnB1dHNbaWR4ICsgMV0uZGF0YVR5cGUgIT09IERhdGFUeXBlLmludDMyICYmIGlucHV0c1tpZHggKyAxXS5kYXRhVHlwZSAhPT0gRGF0YVR5cGUuaW50NjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgJHtpZHh9IG11c3QgYmUgYW4gYXJyYXkgb2YgaW50MzIgb3IgaW50NjRgKTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgcmVhZElucHV0ID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBpZHg6IG51bWJlcik6IG51bWJlcltdID0+IHtcbiAgY29uc3QgaW5wdXQ6IG51bWJlcltdID0gW107XG4gIGlmIChpbnB1dHMubGVuZ3RoID4gaWR4KSB7XG4gICAgaWYgKGlucHV0c1tpZHhdLmRhdGFUeXBlID09PSBEYXRhVHlwZS5pbnQ2NCkge1xuICAgICAgaW5wdXRzW2lkeF0uZ2V0QmlnSW50NjRBcnJheSgpLmZvckVhY2godiA9PiBpbnB1dC5wdXNoKE51bWJlcih2KSkpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRzW2lkeF0uZGF0YVR5cGUgPT09IERhdGFUeXBlLmludDMyKSB7XG4gICAgICBpbnB1dHNbaWR4XS5nZXRJbnQzMkFycmF5KCkuZm9yRWFjaCh2ID0+IGlucHV0LnB1c2goTnVtYmVyKHYpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgJHtpZHh9IG11c3QgYmUgYW4gYXJyYXkgb2YgaW50MzIgb3IgaW50NjRgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufTtcblxuY29uc3QgY3JlYXRlU2xpY2VBdHRyaWJ1dGVzRnJvbUlucHV0cyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBTbGljZUF0dHJpYnV0ZXMpOiBTbGljZUF0dHJpYnV0ZXMgPT4ge1xuICAgICAgaWYgKGlucHV0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0czogbnVtYmVyW10gPSByZWFkSW5wdXQoaW5wdXRzLCAxKTtcbiAgICAgICAgY29uc3QgZW5kczogbnVtYmVyW10gPSByZWFkSW5wdXQoaW5wdXRzLCAyKTtcbiAgICAgICAgbGV0IGF4ZXM6IG51bWJlcltdID0gcmVhZElucHV0KGlucHV0cywgMyk7XG4gICAgICAgIGlmIChheGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGF4ZXMgPSBbLi4uQXJyYXkoaW5wdXRzWzBdLmRpbXMubGVuZ3RoKS5rZXlzKCldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoe3N0YXJ0cywgZW5kcywgYXhlc30pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgICB9XG4gICAgfTtcblxuY29uc3QgZml4U3RhcnRFbmRWYWx1ZXMgPVxuICAgICh2YWx1ZTogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgYXhlczogcmVhZG9ubHkgbnVtYmVyW10sIHN0ZXBzOiByZWFkb25seSBudW1iZXJbXSk6XG4gICAgICAgIG51bWJlciA9PiB7XG4gICAgICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgKz0gaW5wdXRTaGFwZVtheGVzW2luZGV4XV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGVwc1tpbmRleF0gPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3VmFsdWUsIGlucHV0U2hhcGVbYXhlc1tpbmRleF1dIC0gMSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3VmFsdWUsIGlucHV0U2hhcGVbYXhlc1tpbmRleF1dKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG5jb25zdCBjYWxjdWxhdGVJbnB1dEluZGljZXNJbXBsID1cbiAgICAoaW5wdXQ6IEluZGljZXNIZWxwZXIsIG91dHB1dDogSW5kaWNlc0hlbHBlciwgaW5wdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10pOiBzdHJpbmcgPT5cbiAgICAgICAgYGZuIGNhbGN1bGF0ZUlucHV0SW5kaWNlcyhvdXRwdXRfaW5kaWNlczogJHtvdXRwdXQudHlwZS5pbmRpY2VzfSkgLT4gJHtpbnB1dC50eXBlLmluZGljZXN9IHtcbiAgICAgICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgICAgIHZhciBjYXJyeSA9IDB1O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAke2lucHV0U2hhcGUubGVuZ3RofTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBpbnB1dF9zaGFwZV9pID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLmlucHV0X3NoYXBlJywgJ2knLCBpbnB1dFNoYXBlLmxlbmd0aCl9O1xuICAgICAgICAgICAgbGV0IHN0ZXBzX2kgPSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMuc3RlcHMnLCAnaScsIGlucHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgICBsZXQgc2lnbnNfaSA9ICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5zaWducycsICdpJywgaW5wdXRTaGFwZS5sZW5ndGgpfTtcbiAgICAgICAgICAgIGxldCBzdGFydHNfaSA9ICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5zdGFydHMnLCAnaScsIGlucHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgICB2YXIgb3V0cHV0X2luZGV4ID0gJHtvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0X2luZGljZXMnLCAnaScpfTtcbiAgICAgICAgICAgIHZhciBpbnB1dF9pbmRleCA9IG91dHB1dF9pbmRleCAqIHN0ZXBzX2kgKyBzdGFydHNfaSArIGNhcnJ5O1xuICAgICAgICAgICAgY2FycnkgPSBpbnB1dF9pbmRleCAvIGlucHV0X3NoYXBlX2k7XG4gICAgICAgICAgICBpbnB1dF9pbmRleCA9IGlucHV0X2luZGV4ICUgaW5wdXRfc2hhcGVfaTtcbiAgICAgICAgICAgIGlmIChzaWduc19pIDwgMCkge1xuICAgICAgICAgICAgICBpbnB1dF9pbmRleCA9IGlucHV0X3NoYXBlX2kgLSBpbnB1dF9pbmRleCAtIDF1ICsgc3RhcnRzX2k7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAke2lucHV0LmluZGljZXNTZXQoJ2lucHV0X2luZGljZXMnLCAnaScsICdpbnB1dF9pbmRleCcpfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGlucHV0X2luZGljZXM7XG4gICAgICB9YDtcblxuY29uc3QgY3JlYXRlU2xpY2VQcm9ncmFtSW5mbyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogU2xpY2VBdHRyaWJ1dGVzKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG4gIGNvbnN0IGlucHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKGlucHV0U2hhcGUpO1xuICBjb25zdCBheGVzID0gKGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPiAwKSA/IFNoYXBlVXRpbC5ub3JtYWxpemVBeGVzKGF0dHJpYnV0ZXMuYXhlcywgaW5wdXRTaGFwZS5sZW5ndGgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLi4uQXJyYXkoaW5wdXRTaGFwZS5sZW5ndGgpLmtleXMoKV07XG4gIGxldCBzdGVwcyA9IHJlYWRJbnB1dChpbnB1dHMsIDQpO1xuICBzdGVwcy5mb3JFYWNoKChzdGVwKSA9PiBzdGVwICE9PSAwIHx8ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGVwIGNhbm5vdCBiZSAwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgaWYgKHN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0ZXBzID0gQXJyYXkoYXhlcy5sZW5ndGgpLmZpbGwoMSk7XG4gIH1cbiAgY29uc3Qgc3RhcnRzID0gYXR0cmlidXRlcy5zdGFydHMubWFwKChzdGFydCwgaSkgPT4gZml4U3RhcnRFbmRWYWx1ZXMoc3RhcnQsIGksIGlucHV0U2hhcGUsIGF4ZXMsIHN0ZXBzKSk7XG5cbiAgY29uc3QgZW5kcyA9IGF0dHJpYnV0ZXMuZW5kcy5tYXAoKGVuZCwgaSkgPT4gZml4U3RhcnRFbmRWYWx1ZXMoZW5kLCBpLCBpbnB1dFNoYXBlLCBheGVzLCBzdGVwcykpO1xuXG4gIGlmIChheGVzLmxlbmd0aCAhPT0gc3RhcnRzLmxlbmd0aCB8fCBheGVzLmxlbmd0aCAhPT0gZW5kcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0LCBlbmRzIGFuZCBheGVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cycpO1xuICB9XG5cbiAgaWYgKGF4ZXMubGVuZ3RoICE9PSBpbnB1dFNoYXBlLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTaGFwZS5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKCFheGVzLmluY2x1ZGVzKGkpKSB7XG4gICAgICAgIHN0YXJ0cy5zcGxpY2UoaSwgMCwgMCk7XG4gICAgICAgIGVuZHMuc3BsaWNlKGksIDAsIGlucHV0U2hhcGVbaV0pO1xuICAgICAgICBzdGVwcy5zcGxpY2UoaSwgMCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHNpZ25zID0gc3RlcHMubWFwKHN0ZXAgPT4gTWF0aC5zaWduKHN0ZXApKTtcbiAgLy8gQ29udmVydCBuZWdhdGl2ZSBzdGVwcyB0byBwb3NpdGl2ZSBzdGVwcyBhbmQgcmV2ZXJzZSBzdGFydHMgYW5kIGVuZHNcbiAgc3RlcHMuZm9yRWFjaCgoc3RlcCwgaSwgYXJyYXkpID0+IHtcbiAgICBpZiAoc3RlcCA8IDApIHtcbiAgICAgIGNvbnN0IG51bVN0ZXBzID0gKGVuZHNbaV0gLSBzdGFydHNbaV0pIC8gc3RlcDtcbiAgICAgIGNvbnN0IG5ld0VuZCA9IHN0YXJ0c1tpXTtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3RW5kICsgbnVtU3RlcHMgKiBzdGVwc1tpXTtcbiAgICAgIHN0YXJ0c1tpXSA9IG5ld1N0YXJ0O1xuICAgICAgZW5kc1tpXSA9IG5ld0VuZDtcbiAgICAgIGFycmF5W2ldID0gLXN0ZXA7XG4gICAgfVxuICB9KTtcbiAgLy8gT3V0cHV0IHJhbmsgaXMgZXhwZWN0ZWQgdG8gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBpbnB1dCByYW5rLlxuICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0U2hhcGUuc2xpY2UoMCk7XG4gIGF4ZXMuZm9yRWFjaCgoYXhpcywgXykgPT4ge1xuICAgIG91dHB1dFNoYXBlW2F4aXNdID0gTWF0aC5jZWlsKChlbmRzW2F4aXNdIC0gc3RhcnRzW2F4aXNdKSAvIHN0ZXBzW2F4aXNdKTtcbiAgfSk7XG4gIGNvbnN0IG91dHB1dFRlbnNvckluZm86IFRlbnNvckluZm8gPSB7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9O1xuXG4gIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG4gIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICB7bmFtZTogJ291dHB1dFNpemUnLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnc3RhcnRzJywgdHlwZTogJ3UzMicsIGxlbmd0aDogc3RhcnRzLmxlbmd0aH0sXG4gICAge25hbWU6ICdzaWducycsIHR5cGU6ICdpMzInLCBsZW5ndGg6IHNpZ25zLmxlbmd0aH0sIHtuYW1lOiAnc3RlcHMnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBzdGVwcy5sZW5ndGh9XG4gIF07XG5cbiAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBzdGFydHN9LFxuICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogc2lnbnN9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBzdGVwc30sXG4gICAgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzBdLmRpbXMsIG91dHB1dFNoYXBlKVxuICBdO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAgICAgJHtjYWxjdWxhdGVJbnB1dEluZGljZXNJbXBsKGlucHV0LCBvdXRwdXQsIGlucHV0U2hhcGUpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRTaXplJyl9XG4gICAgICAgICAgbGV0IG91dHB1dF9pbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuICAgICAgICAgIGxldCBpbnB1dF9pbmRpY2VzID0gY2FsY3VsYXRlSW5wdXRJbmRpY2VzKG91dHB1dF9pbmRpY2VzKTtcbiAgICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIGlucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpKX1cbiAgICAgIH1gO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTbGljZScsXG4gICAgc2hhZGVyQ2FjaGU6IHtoaW50OiBgJHtzaWducy5sZW5ndGh9XyR7c3RhcnRzLmxlbmd0aH1fJHtzdGVwcy5sZW5ndGh9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuayddfSxcbiAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgIG91dHB1dHM6IFtvdXRwdXRUZW5zb3JJbmZvXSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwoaW5wdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgIH0pXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2xpY2UgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFNsaWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzID0gY3JlYXRlU2xpY2VBdHRyaWJ1dGVzRnJvbUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVTbGljZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCB1cGRhdGVkQXR0cmlidXRlcyksIHtpbnB1dHM6IFswXX0pO1xuICAvLyBpZiAoU2hhcGVVdGlsLnNpemUocHJvZ3JhbS5vdXRwdXRzWzBdLmRpbXMpID4gMCkge1xuICAvLyAgIGNvbnRleHQuY29tcHV0ZShwcm9ncmFtSW5mb0xvYWRlciwge2lucHV0czogWzBdfSk7XG4gIC8vIH0gZWxzZSB7XG4gIC8vICAgLy8gVE9ETzogc3VwcG9ydCBlbXB0eSBvdXRwdXRcbiAgLy8gICB0aHJvdyBuZXcgRXJyb3IoJ3NsaWNlOiBvdXRwdXQgc2l6ZSBpcyAwJyk7XG4gIC8vIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVNsaWNlQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFNsaWNlQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IHN0YXJ0cyA9IGF0dHJpYnV0ZXMuc3RhcnRzIGFzIG51bWJlcltdO1xuICBjb25zdCBlbmRzID0gYXR0cmlidXRlcy5lbmRzIGFzIG51bWJlcltdO1xuICBjb25zdCBheGVzID0gYXR0cmlidXRlcy5heGVzIGFzIG51bWJlcltdO1xuICByZXR1cm4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHtzdGFydHMsIGVuZHMsIGF4ZXN9KTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8vIFRPRE86IHRoaXMgaXMgdGhlIHNhbWUgbmFpdmUgaW1wbGVtZW50YXRpb24gd2UgdXNlIGZvciByZWR1Y2UgdGhhdCBoYXNcbi8vIHBlcmZvcm1hbmNlIGxpbWl0YXRpb25zIHdoZW4gdGhlIHJlZHVjZWQgYXhpcyBpcyBsb25nLiBOZWVkIHRvIGFkZFxuLy8gYSBvcHRpbWl6ZWQgY29kZXBhdGggZm9yIHRoaXMuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Z2V0TWF4Q29tcG9uZW50cywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgc3VtVmVjdG9yLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGV9IGZyb20gJy4vY29tbW9uJztcblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignU29mdG1heCBvcCByZXF1aXJlcyAxIGlucHV0LicpO1xuICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvZnRtYXhBdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgYXhpczogbnVtYmVyO1xufVxuXG5jb25zdCBjcmVhdGVTb2Z0bWF4UHJvZ3JhbUluZm8gPSAoaW5wdXQ6IFRlbnNvclZpZXcsIGF0dHJpYnV0ZXM6IFNvZnRtYXhBdHRyaWJ1dGVzKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBzaGFwZSA9IGlucHV0LmRpbXM7XG4gIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShzaGFwZSk7XG4gIGNvbnN0IFdHID0gNjQ7XG4gIGxldCBheGlzID0gYXR0cmlidXRlcy5heGlzO1xuICBpZiAoYXhpcyA8IDApIHtcbiAgICBheGlzID0gc2hhcGUubGVuZ3RoICsgYXhpcztcbiAgfVxuICBpZiAoYXhpcyA8IHNoYXBlLmxlbmd0aCAtIDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NvZnRtYXggb25seSBzdXBwb3J0cyBsYXN0IGF4aXMgZm9yIG5vdy4nKTtcbiAgfVxuXG4gIGNvbnN0IGNvbHMgPSBzaGFwZVtheGlzXTtcbiAgY29uc3Qgcm93cyA9IG91dHB1dFNpemUgLyBjb2xzO1xuICBjb25zdCBjb21wb25lbnRzID0gZ2V0TWF4Q29tcG9uZW50cyhjb2xzKTtcbiAgY29uc3QgcGFja2VkQ29scyA9IGNvbHMgLyBjb21wb25lbnRzO1xuXG4gIGNvbnN0IG1heFZlY3RvciA9IChuYW1lOiBzdHJpbmcsIGNvbXBvbmVudHM6IG51bWJlcikgPT4ge1xuICAgIGlmIChjb21wb25lbnRzID09PSA0KSB7XG4gICAgICByZXR1cm4gYG1heChtYXgoJHtuYW1lfS54LCAke25hbWV9LnkpLCBtYXgoJHtuYW1lfS56LCAke25hbWV9LncpKWA7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnRzID09PSAyKSB7XG4gICAgICByZXR1cm4gYG1heCgke25hbWV9LngsICR7bmFtZX0ueSlgO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50cyA9PT0gMykge1xuICAgICAgcmV0dXJuIGBtYXgobWF4KCR7bmFtZX0ueCwgJHtuYW1lfS55KSwgJHtuYW1lfS56KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWU7XG4gIH07XG4gIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKCd4JywgaW5wdXQuZGF0YVR5cGUsIGlucHV0LmRpbXMsIGNvbXBvbmVudHMpO1xuICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgncmVzdWx0JywgaW5wdXQuZGF0YVR5cGUsIGlucHV0LmRpbXMsIGNvbXBvbmVudHMpO1xuICBjb25zdCB2YWx1ZVR5cGUgPSB4LnR5cGUudmFsdWU7XG4gIC8vIDYuMi40IGluIHdnc2wgc3BlY1xuICBjb25zdCB0aHJlYWRNYXhEZWNsID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0LmRhdGFUeXBlKSA9PT0gJ2YzMicgP1xuICAgICAgYHZhciB0aHJlYWRNYXggPSAke3ZhbHVlVHlwZX0oLTMuNDAyODIzZSszOGYpO2AgOlxuICAgICAgYHZhciB0aHJlYWRNYXggPSAke3ZhbHVlVHlwZX0oLTY1NTA0LjBoKTtgO1xuICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IGBcbiAgICAgIHZhcjx3b3JrZ3JvdXA+IHJvd01heFNoYXJlZCA6ICR7dmFsdWVUeXBlfTtcbiAgICAgIHZhcjx3b3JrZ3JvdXA+IHJvd1N1bVNoYXJlZCA6ICR7dmFsdWVUeXBlfTtcbiAgICAgIHZhcjx3b3JrZ3JvdXA+IHRocmVhZFNoYXJlZCA6IGFycmF5PCR7dmFsdWVUeXBlfSwgJHtXR30+O1xuXG4gICAgICBmbiBnZXRWYWx1ZShyb3c6IGkzMiwgY29sOiBpMzIsIHJvd19zdHJpZGU6IGkzMikgLT4gJHt2YWx1ZVR5cGV9IHtcbiAgICAgICAgbGV0IGluZGV4ID0gcm93ICogcm93X3N0cmlkZSArIGNvbDtcbiAgICAgICAgcmV0dXJuIHhbaW5kZXhdO1xuICAgICAgfVxuXG4gICAgICBmbiBzZXRWYWx1ZShyb3c6IGkzMiwgY29sOiBpMzIsIHJvd19zdHJpZGU6IGkzMiwgdmFsdWU6ICR7dmFsdWVUeXBlfSkge1xuICAgICAgICBsZXQgaW5kZXggPSByb3cgKiByb3dfc3RyaWRlICsgY29sO1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ3BhY2tlZENvbHMnLCAnaTMyJykuZGVjbGFyZVZhcmlhYmxlcyh4LCBvdXRwdXQpfVxuICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgIGxldCBnaW5kZXggPSBpMzIoZ2xvYmFsX2lkeCk7XG4gICAgICAgIGxldCBsaW5kZXggPSBpMzIobG9jYWxfaWR4KTtcbiAgICAgICAgY29uc3Qgd2cgPSAke1dHfTtcbiAgICAgICAgbGV0IHJvdyA9IGdpbmRleCAvIHdnO1xuICAgICAgICBsZXQgY29scyA9IHVuaWZvcm1zLnBhY2tlZENvbHM7XG4gICAgICAgIGxldCByb3dfc3RyaWRlIDogaTMyID0gdW5pZm9ybXMucGFja2VkQ29scztcblxuICAgICAgICAvLyBmaW5kIHRoZSByb3dzIG1heFxuICAgICAgICAke3RocmVhZE1heERlY2x9XG4gICAgICAgIGZvciAodmFyIGNvbCA9IGxpbmRleDsgY29sIDwgY29sczsgY29sICs9IHdnKSB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gZ2V0VmFsdWUocm93LCBjb2wsIHJvd19zdHJpZGUpO1xuICAgICAgICAgIHRocmVhZE1heCA9IG1heCh0aHJlYWRNYXgsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGluZGV4IDwgY29scykge1xuICAgICAgICAgIHRocmVhZFNoYXJlZFtsaW5kZXhdID0gdGhyZWFkTWF4O1xuICAgICAgICB9XG4gICAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAgICAgICB2YXIgcmVkdWNlU2l6ZSA9IG1pbihjb2xzLCB3Zyk7XG4gICAgICAgIGZvciAodmFyIGN1cnJTaXplID0gcmVkdWNlU2l6ZSA+PiAxOyAgY3VyclNpemUgPiAwOyBjdXJyU2l6ZSA9IHJlZHVjZVNpemUgPj4gMSkge1xuICAgICAgICAgIHJlZHVjZVNpemUgPSBjdXJyU2l6ZSArIChyZWR1Y2VTaXplICYgMSk7XG4gICAgICAgICAgaWYgKGxpbmRleCA8IGN1cnJTaXplKSB7XG4gICAgICAgICAgICB0aHJlYWRTaGFyZWRbbGluZGV4XSA9IG1heCh0aHJlYWRTaGFyZWRbbGluZGV4XSwgdGhyZWFkU2hhcmVkW2xpbmRleCArIHJlZHVjZVNpemVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5kZXggPT0gMCkge1xuICAgICAgICAgIHJvd01heFNoYXJlZCA9ICR7dmFsdWVUeXBlfSgke21heFZlY3RvcigndGhyZWFkU2hhcmVkWzBdJywgY29tcG9uZW50cyl9KTtcbiAgICAgICAgfVxuICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAgICAgLy8gZmluZCB0aGUgcm93cyBzdW1cbiAgICAgICAgdmFyIHRocmVhZFN1bSA9ICR7dmFsdWVUeXBlfSgwLjApO1xuICAgICAgICBmb3IgKHZhciBjb2wgPSBsaW5kZXg7IGNvbCA8IGNvbHM7IGNvbCArPSB3Zykge1xuICAgICAgICAgIGxldCBzdWJFeHAgPSBleHAoZ2V0VmFsdWUocm93LCBjb2wsIHJvd19zdHJpZGUpIC0gcm93TWF4U2hhcmVkKTtcbiAgICAgICAgICB0aHJlYWRTdW0gKz0gc3ViRXhwO1xuICAgICAgICB9XG4gICAgICAgIHRocmVhZFNoYXJlZFtsaW5kZXhdID0gdGhyZWFkU3VtO1xuICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAgICAgZm9yICh2YXIgY3VyclNpemUgPSB3ZyA+PiAxOyAgY3VyclNpemUgPiAwOyBjdXJyU2l6ZSA9IGN1cnJTaXplID4+IDEpIHtcbiAgICAgICAgICBpZiAobGluZGV4IDwgY3VyclNpemUpIHtcbiAgICAgICAgICAgIHRocmVhZFNoYXJlZFtsaW5kZXhdID0gdGhyZWFkU2hhcmVkW2xpbmRleF0gKyB0aHJlYWRTaGFyZWRbbGluZGV4ICsgY3VyclNpemVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmRleCA9PSAwKSB7XG4gICAgICAgICAgcm93U3VtU2hhcmVkID0gJHt2YWx1ZVR5cGV9KCR7c3VtVmVjdG9yKCd0aHJlYWRTaGFyZWRbMF0nLCBjb21wb25lbnRzKX0pO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWUgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgcm93XG4gICAgICAgIGZvciAodmFyIGNvbCA9IGxpbmRleDsgY29sIDwgY29sczsgY29sICs9IHdnKSB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gZXhwKGdldFZhbHVlKHJvdywgY29sLCByb3dfc3RyaWRlKSAtIHJvd01heFNoYXJlZCkgLyByb3dTdW1TaGFyZWQ7XG4gICAgICAgICAgc2V0VmFsdWUocm93LCBjb2wsIHJvd19zdHJpZGUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfWA7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1NvZnRtYXgnLFxuICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7Y29tcG9uZW50c31gLCBpbnB1dERlcGVuZGVuY2llczogWyd0eXBlJ119LFxuICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICBvdXRwdXRzOiBbe2RpbXM6IHNoYXBlLCBkYXRhVHlwZTogaW5wdXQuZGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiByb3dzfSxcbiAgICAgIHByb2dyYW1Vbmlmb3JtczogW3t0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogcGFja2VkQ29sc31dXG4gICAgfSksXG4gICAgZ2V0U2hhZGVyU291cmNlLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNvZnRtYXggPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFNvZnRtYXhBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVNvZnRtYXhQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgYXR0cmlidXRlcykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlU29mdG1heEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBTb2Z0bWF4QXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7YXhpczogYXR0cmlidXRlcy5heGlzIGFzIG51bWJlcn0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7QXR0cmlidXRlV2l0aENhY2hlS2V5LCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbVVuaWZvcm0sIFRlbnNvckluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgZ2V0RWxlbWVudEF0LCBJbmRpY2VzSGVscGVyLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyfSBmcm9tICcuL2NvbW1vbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BsaXRBdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgYXhpczogbnVtYmVyO1xuICByZWFkb25seSBudW1PdXRwdXRzOiBudW1iZXI7XG4gIHJlYWRvbmx5IHNwbGl0U2l6ZXM6IG51bWJlcltdO1xufVxuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9vIGZldyBpbnB1dHMnKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlU3BsaXRBdHRyaWJ1dGVzRnJvbUlucHV0cyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBTcGxpdEF0dHJpYnV0ZXMpOiBTcGxpdEF0dHJpYnV0ZXMgPT4ge1xuICAgICAgY29uc3Qgc3BsaXRTaXplczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGxldCBudW1PdXRwdXRzOiBudW1iZXIgPSBhdHRyaWJ1dGVzLm51bU91dHB1dHM7XG4gICAgICBpZiAoaW5wdXRzWzFdLmRpbXNbMF0gPiAwKSB7XG4gICAgICAgIGlucHV0c1sxXS5nZXRCaWdJbnQ2NEFycmF5KCkuZm9yRWFjaCh2ID0+IHNwbGl0U2l6ZXMucHVzaChOdW1iZXIodikpKTtcbiAgICAgICAgbnVtT3V0cHV0cyA9IHNwbGl0U2l6ZXMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7bnVtT3V0cHV0cywgYXhpczogYXR0cmlidXRlcy5heGlzLCBzcGxpdFNpemVzfSk7XG4gICAgfTtcblxuY29uc3QgY2FsY3VsYXRlT3V0cHV0SW5kZXhJbXBsID0gKG51bWJlck9mVGVuc29yczogbnVtYmVyKTogc3RyaW5nID0+IGBcbmZuIGNhbGN1bGF0ZU91dHB1dEluZGV4KGluZGV4OiB1MzIpIC0+IHUzMiB7XG4gICAgZm9yICh2YXIgaTogdTMyID0gMHU7IGkgPCAke251bWJlck9mVGVuc29yc311OyBpICs9IDF1ICkge1xuICAgIGlmIChpbmRleCA8ICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5zaXplX2luX3NwbGl0X2F4aXMnLCAnaScsIG51bWJlck9mVGVuc29ycyl9KSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICR7bnVtYmVyT2ZUZW5zb3JzfXU7XG59YDtcbmNvbnN0IHdyaXRlQnVmZmVyRGF0YUltcGwgPSAob3V0cHV0czogcmVhZG9ubHkgSW5kaWNlc0hlbHBlcltdKSA9PiB7XG4gIGNvbnN0IG51bWJlck9mVGVuc29ycyA9IG91dHB1dHMubGVuZ3RoO1xuICBjb25zdCBjb2RlTGluZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW5zb3JzOyArK2kpIHtcbiAgICBjb25zdCByZXR1cm5TbmlwcGV0ID0gb3V0cHV0c1tpXS5zZXRCeUluZGljZXMoJ2luZGljZXMnLCAnaW5wdXRbZ2xvYmFsX2lkeF0nKTtcbiAgICBpZiAobnVtYmVyT2ZUZW5zb3JzID09PSAxKSB7XG4gICAgICBjb2RlTGluZXMucHVzaChyZXR1cm5TbmlwcGV0KTtcbiAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcbiAgICAgIGNvZGVMaW5lcy5wdXNoKGBpZiAob3V0cHV0X251bWJlciA9PSAke2l9dSkgeyAke3JldHVyblNuaXBwZXR9IH1gKTtcbiAgICB9IGVsc2UgaWYgKGkgPT09IG51bWJlck9mVGVuc29ycyAtIDEpIHtcbiAgICAgIGNvZGVMaW5lcy5wdXNoKGBlbHNlIHsgJHtyZXR1cm5TbmlwcGV0fSB9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGVMaW5lcy5wdXNoKGBlbHNlIGlmIChvdXRwdXRfbnVtYmVyID09ICR7aX0pIHsgJHtyZXR1cm5TbmlwcGV0fSB9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBgXG4gICAgICBmbiB3cml0ZUJ1ZmZlckRhdGEob3V0cHV0X251bWJlcjogdTMyLCBpbmRpY2VzOiAke291dHB1dHNbMF0udHlwZS5pbmRpY2VzfSwgZ2xvYmFsX2lkeDogdTMyKSB7XG4gICAgICAgICR7Y29kZUxpbmVzLmpvaW4oJ1xcbicpfVxuICAgICAgfWA7XG59O1xuXG5jb25zdCBjcmVhdGVTcGxpdFByb2dyYW1JbmZvID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBTcGxpdEF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgY29uc3QgaW5wdXRTaXplID0gU2hhcGVVdGlsLnNpemUoaW5wdXRTaGFwZSk7XG4gIGNvbnN0IGRhdGFUeXBlID0gaW5wdXRzWzBdLmRhdGFUeXBlO1xuICBjb25zdCBheGlzID0gU2hhcGVVdGlsLm5vcm1hbGl6ZUF4aXMoYXR0cmlidXRlcy5heGlzLCBpbnB1dFNoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IG91dHB1dHMgPSBuZXcgQXJyYXk8SW5kaWNlc0hlbHBlcj4oYXR0cmlidXRlcy5udW1PdXRwdXRzKTtcbiAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKCdpbnB1dCcsIGRhdGFUeXBlLCBpbnB1dFNoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IHNpemVJblNwbGl0QXhpcyA9IG5ldyBBcnJheTxudW1iZXI+KGF0dHJpYnV0ZXMubnVtT3V0cHV0cyk7XG4gIGNvbnN0IG91dHB1dHNUZW5zb3JJbmZvOiBUZW5zb3JJbmZvW10gPSBbXTtcbiAgY29uc3Qgb3V0cHV0U2hhcGVzOiBudW1iZXJbXVtdID0gW107XG4gIGxldCBwcmV2aW91c1N1bSA9IDA7XG4gIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFt7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBpbnB1dFNpemV9XTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLm51bU91dHB1dHM7IGkrKykge1xuICAgIHByZXZpb3VzU3VtICs9IGF0dHJpYnV0ZXMuc3BsaXRTaXplc1tpXTtcbiAgICBzaXplSW5TcGxpdEF4aXNbaV0gPSBwcmV2aW91c1N1bTtcbiAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0U2hhcGUuc2xpY2UoKTtcbiAgICBvdXRwdXRTaGFwZVthdHRyaWJ1dGVzLmF4aXNdID0gYXR0cmlidXRlcy5zcGxpdFNpemVzW2ldO1xuICAgIG91dHB1dFNoYXBlcy5wdXNoKG91dHB1dFNoYXBlKTtcbiAgICBvdXRwdXRzW2ldID0gb3V0cHV0VmFyaWFibGUoYG91dHB1dCR7aX1gLCBkYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICBvdXRwdXRzVGVuc29ySW5mby5wdXNoKHtkaW1zOiBvdXRwdXRTaGFwZXNbaV0sIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9KTtcbiAgfVxuICBwcm9ncmFtVW5pZm9ybXMucHVzaChcbiAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHNpemVJblNwbGl0QXhpc30sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIC4uLm91dHB1dFNoYXBlcykpO1xuICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IGBcbiAgJHtcbiAgICAgIHNoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ2lucHV0X3NpemUnLCAndTMyJylcbiAgICAgICAgICAucmVnaXN0ZXJVbmlmb3JtKCdzaXplX2luX3NwbGl0X2F4aXMnLCAndTMyJywgc2l6ZUluU3BsaXRBeGlzLmxlbmd0aClcbiAgICAgICAgICAuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgLi4ub3V0cHV0cyl9XG4gICR7Y2FsY3VsYXRlT3V0cHV0SW5kZXhJbXBsKHNpemVJblNwbGl0QXhpcy5sZW5ndGgpfVxuICAke3dyaXRlQnVmZmVyRGF0YUltcGwob3V0cHV0cyl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMuaW5wdXRfc2l6ZScpfVxuXG4gICAgdmFyIGluZGljZXMgPSAke2lucHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcbiAgICB2YXIgaW5kZXggPSAke2lucHV0LmluZGljZXNHZXQoJ2luZGljZXMnLCBheGlzKX07XG4gICAgbGV0IG91dHB1dF9udW1iZXIgPSBjYWxjdWxhdGVPdXRwdXRJbmRleChpbmRleCk7XG4gICAgaWYgKG91dHB1dF9udW1iZXIgIT0gMCkge1xuICAgICAgaW5kZXggLT0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnNpemVfaW5fc3BsaXRfYXhpcycsICdvdXRwdXRfbnVtYmVyIC0gMXUnLCBzaXplSW5TcGxpdEF4aXMubGVuZ3RoKX07XG4gICAgICAke2lucHV0LmluZGljZXNTZXQoJ2luZGljZXMnLCBheGlzLCAnaW5kZXgnKX07XG4gICAgfVxuICAgIHdyaXRlQnVmZmVyRGF0YShvdXRwdXRfbnVtYmVyLCBpbmRpY2VzLCBnbG9iYWxfaWR4KTtcbiAgfWA7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1NwbGl0JyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGF0dHJpYnV0ZXMuY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnXX0sXG4gICAgZ2V0U2hhZGVyU291cmNlLFxuICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICBvdXRwdXRzOiBvdXRwdXRzVGVuc29ySW5mbyxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwoaW5wdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgIH0pXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc3BsaXQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFNwbGl0QXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzID1cbiAgICAgIGNvbnRleHQuaW5wdXRzLmxlbmd0aCA9PT0gMSA/IGF0dHJpYnV0ZXMgOiBjcmVhdGVTcGxpdEF0dHJpYnV0ZXNGcm9tSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVNwbGl0UHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMsIHVwZGF0ZWRBdHRyaWJ1dGVzKSwge2lucHV0czogWzBdfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VTcGxpdEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBTcGxpdEF0dHJpYnV0ZXMgPT4ge1xuICBjb25zdCBheGlzID0gYXR0cmlidXRlcy5heGlzIGFzIG51bWJlcjtcbiAgY29uc3Qgc3BsaXRTaXplczogbnVtYmVyW10gPSBhdHRyaWJ1dGVzLnNwbGl0U2l6ZXMgYXMgbnVtYmVyW107XG4gIGNvbnN0IG51bU91dHB1dHMgPSBhdHRyaWJ1dGVzLm51bU91dHB1dHMgYXMgbnVtYmVyIDwgMCA/IHNwbGl0U2l6ZXMubGVuZ3RoIDogYXR0cmlidXRlcy5udW1PdXRwdXRzIGFzIG51bWJlcjtcbiAgaWYgKG51bU91dHB1dHMgIT09IHNwbGl0U2l6ZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdudW1PdXRwdXRzIGFuZCBzcGxpdFNpemVzIGxlbmdoIG11c3QgYmUgZXF1YWwnKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHtheGlzLCBudW1PdXRwdXRzLCBzcGxpdFNpemVzfSk7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXJ9IGZyb20gJy4vY29tbW9uJztcblxuY29uc3QgZ2V0UmVwZWF0cyA9IChyZXBlYXRzVGVuc29yVmlldzogVGVuc29yVmlldyk6IHJlYWRvbmx5IG51bWJlcltdID0+XG4gICAgQXJyYXkuZnJvbShyZXBlYXRzVGVuc29yVmlldy5nZXRCaWdJbnQ2NEFycmF5KCksIE51bWJlcik7XG5cblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGlsZSByZXF1aXJlcyAyIGlucHV0cy4nKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMF0uZGF0YVR5cGUgIT09IERhdGFUeXBlLmZsb2F0ICYmIGlucHV0c1swXS5kYXRhVHlwZSAhPT0gRGF0YVR5cGUuaW50MzIgJiZcbiAgICAgIGlucHV0c1swXS5kYXRhVHlwZSAhPT0gRGF0YVR5cGUudWludDMyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaWxlIG9ubHkgc3VwcG9ydCBmbG9hdCwgaW50MzIsIGFuZCB1aW50MzIgZGF0YSB0eXBlcycpO1xuICB9XG5cbiAgaWYgKGlucHV0c1sxXS5kYXRhVHlwZSAhPT0gRGF0YVR5cGUuaW50NjQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbGUgYHJlcGVhdHNgIGlucHV0IHNob3VsZCBiZSBvZiBpbnQ2NCBkYXRhIHR5cGUnKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMV0uZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbGUgYHJlcGVhdHNgIGlucHV0IHNob3VsZCBiZSAxLUQnKTtcbiAgfVxuXG4gIGNvbnN0IHJlcGVhdHM6IHJlYWRvbmx5IG51bWJlcltdID0gZ2V0UmVwZWF0cyhpbnB1dHNbMV0pO1xuXG4gIGlmIChyZXBlYXRzLmxlbmd0aCAhPT0gaW5wdXRzWzBdLmRpbXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaWxlIGByZXBlYXRzYCBpbnB1dCBzaG91bGQgaGF2ZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cyBhcyByYW5rIG9mIGlucHV0IGRhdGEgdGVuc29yJyk7XG4gIH1cbn07XG5cbmNvbnN0IGdldE91dHB1dFNoYXBlID0gKGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCByZXBlYXRzOiByZWFkb25seSBudW1iZXJbXSk6IHJlYWRvbmx5IG51bWJlcltdID0+IHtcbiAgY29uc3Qgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgb3V0cHV0U2hhcGUucHVzaChpbnB1dFNoYXBlW2ldICogcmVwZWF0c1tpXSk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0U2hhcGU7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGlsZVByb2dyYW1JbmZvID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG4gIGNvbnN0IHJlcGVhdHM6IHJlYWRvbmx5IG51bWJlcltdID0gZ2V0UmVwZWF0cyhpbnB1dHNbMV0pO1xuICBjb25zdCBvdXRwdXRTaGFwZSA9IGdldE91dHB1dFNoYXBlKGlucHV0U2hhcGUsIHJlcGVhdHMpO1xuICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuXG4gIGNvbnN0IGRhdGFUeXBlID0gaW5wdXRzWzBdLmRhdGFUeXBlO1xuICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ2lucHV0JywgZGF0YVR5cGUsIGlucHV0U2hhcGUubGVuZ3RoKTtcbiAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgpO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgY29uc3QgaW5wdXRTaGFwZSA9ICR7aW5wdXQuaW5kaWNlcyguLi5pbnB1dFNoYXBlKX07XG4gICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ291dHB1dF9zaXplJywgJ3UzMicpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIG91dHB1dCl9XG4gICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF9zaXplJyl9XG4gICAgICBsZXQgb3V0cHV0X2luZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAke2lucHV0U2hhcGUubGVuZ3RofTsgaSsrKSB7XG4gICAgICAgIGxldCBpbnB1dF9kaW1faSA9ICR7aW5wdXQuaW5kaWNlc0dldCgndW5pZm9ybXMuaW5wdXRfc2hhcGUnLCAnaScpfTtcbiAgICAgICAgbGV0IGlucHV0X2RpbV92YWx1ZSA9ICR7b3V0cHV0LmluZGljZXNHZXQoJ291dHB1dF9pbmRpY2VzJywgJ2knKX0gICUgaW5wdXRfZGltX2k7XG5cbiAgICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KCdpbnB1dF9pbmRpY2VzJywgJ2knLCAnaW5wdXRfZGltX3ZhbHVlJyl9XG4gICAgICB9XG4gICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIGlucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpKX1cbiAgICB9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdUaWxlJyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke3JlcGVhdHN9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuayddfSxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgIHByb2dyYW1Vbmlmb3JtczpcbiAgICAgICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBvdXRwdXRTaGFwZSldLFxuICAgIH0pLFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB0aWxlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVRpbGVQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cyksIHtpbnB1dHM6IFswXX0pO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge0Jyb2FkY2FzdFV0aWwsIFNoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mb30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyfSBmcm9tICcuL2NvbW1vbic7XG5cbmNvbnN0IGNyZWF0ZVdoZXJlT3BQcm9ncmFtU2hhZGVyID1cbiAgICAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIsIGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBkaW1zT3V0cHV0OiByZWFkb25seSBudW1iZXJbXSwgaXNCcm9hZGNhc3Q6IGJvb2xlYW4sXG4gICAgIHR5cGVPdXRwdXQ6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dF9kYXRhJywgdHlwZU91dHB1dCwgZGltc091dHB1dC5sZW5ndGgsIDQpO1xuICAgICAgY29uc3QgYSA9IGlucHV0VmFyaWFibGUoJ2FfZGF0YScsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoLCA0KTtcbiAgICAgIGNvbnN0IGIgPSBpbnB1dFZhcmlhYmxlKCdiX2RhdGEnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCwgNCk7XG4gICAgICBjb25zdCBjID0gaW5wdXRWYXJpYWJsZSgnY19kYXRhJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcy5sZW5ndGgsIDQpO1xuXG4gICAgICBsZXQgYXNzaWdubWVudDogc3RyaW5nO1xuICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IChhOiBzdHJpbmcsIGI6IHN0cmluZywgYzogc3RyaW5nKSA9PiBgc2VsZWN0KCR7Yn0sICR7YX0sICR7Y30pYDtcbiAgICAgIGlmICghaXNCcm9hZGNhc3QpIHtcbiAgICAgICAgYXNzaWdubWVudCA9IG91dHB1dC5zZXRCeU9mZnNldChcbiAgICAgICAgICAgICdnbG9iYWxfaWR4JyxcbiAgICAgICAgICAgIGV4cHJlc3Npb24oYS5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpLCBiLmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JyksIGMuZ2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2luZ2xlQXNzaWdubWVudCA9IChyZXNTdHI6IHN0cmluZywgeDogbnVtYmVyLCB0eXBlQ2FzdCA9ICcnKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhwcmVzc2lvbkEgPSBgYV9kYXRhW2luZGV4X2Eke3h9XVtjb21wb25lbnRfYSR7eH1dYDtcbiAgICAgICAgICBjb25zdCBleHByZXNzaW9uQiA9IGBiX2RhdGFbaW5kZXhfYiR7eH1dW2NvbXBvbmVudF9iJHt4fV1gO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAgY29uc3QgZXhwcmVzc2lvbkMgPSBgYm9vbChjX2RhdGFbaW5kZXhfYyR7eH1dICYgKDB4ZmZ1IDw8IChjb21wb25lbnRfYyR7eH0gKiA4KSkpYDtcbiAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgbGV0IG91dHB1dF9pbmRpY2VzJHt4fSA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcyhgZ2xvYmFsX2lkeCAqIDR1ICsgJHt4fXVgKX07XG4gICAgICAgICAgICBsZXQgb2Zmc2V0X2Eke3h9ID0gJHthLmJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0KGBvdXRwdXRfaW5kaWNlcyR7eH1gLCBvdXRwdXQpfTtcbiAgICAgICAgICAgIGxldCBvZmZzZXRfYiR7eH0gPSAke2IuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoYG91dHB1dF9pbmRpY2VzJHt4fWAsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldF9jJHt4fSA9ICR7Yy5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldChgb3V0cHV0X2luZGljZXMke3h9YCwgb3V0cHV0KX07XG4gICAgICAgICAgICBsZXQgaW5kZXhfYSR7eH0gPSBvZmZzZXRfYSR7eH0gLyA0dTtcbiAgICAgICAgICAgIGxldCBpbmRleF9iJHt4fSA9IG9mZnNldF9iJHt4fSAvIDR1O1xuICAgICAgICAgICAgbGV0IGluZGV4X2Mke3h9ID0gb2Zmc2V0X2Mke3h9IC8gNHU7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50X2Eke3h9ID0gb2Zmc2V0X2Eke3h9ICUgNHU7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50X2Ike3h9ID0gb2Zmc2V0X2Ike3h9ICUgNHU7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50X2Mke3h9ID0gb2Zmc2V0X2Mke3h9ICUgNHU7XG4gICAgICAgICAgICAke3Jlc1N0cn1bJHt4fV0gPSAke3R5cGVDYXN0fSgke2V4cHJlc3Npb24oZXhwcmVzc2lvbkEsIGV4cHJlc3Npb25CLCBleHByZXNzaW9uQyl9KTtcbiAgICAgICAgICBgO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZU91dHB1dCA9PT0gRGF0YVR5cGUuYm9vbCkge1xuICAgICAgICAgIGFzc2lnbm1lbnQgPSBgXG4gICAgICAgICAgICB2YXIgZGF0YSA9IHZlYzQ8dTMyPigwKTtcbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnZGF0YScsIDAsICd1MzInKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnZGF0YScsIDEsICd1MzInKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnZGF0YScsIDIsICd1MzInKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnZGF0YScsIDMsICd1MzInKX1cbiAgICAgICAgICAgIG91dHB1dF9kYXRhW2dsb2JhbF9pZHhdID0gZG90KHZlYzQ8dTMyPigweDEsIDB4MTAwLCAweDEwMDAwLCAweDEwMDAwMDApLCB2ZWM0PHUzMj4oZGF0YSkpO2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzaWdubWVudCA9IGBcbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnb3V0cHV0X2RhdGFbZ2xvYmFsX2lkeF0nLCAwKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnb3V0cHV0X2RhdGFbZ2xvYmFsX2lkeF0nLCAxKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnb3V0cHV0X2RhdGFbZ2xvYmFsX2lkeF0nLCAyKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnb3V0cHV0X2RhdGFbZ2xvYmFsX2lkeF0nLCAzKX1cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgXG4gICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgndmVjX3NpemUnLCAndTMyJykuZGVjbGFyZVZhcmlhYmxlcyhjLCBhLCBiLCBvdXRwdXQpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMudmVjX3NpemUnKX1cbiAgICAgICAgJHthc3NpZ25tZW50fVxuICAgICAgfWA7XG4gICAgfTtcblxuY29uc3QgY3JlYXRlV2hlcmVPcFByb2dyYW1JbmZvID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBkaW1zQSA9IGlucHV0c1sxXS5kaW1zO1xuICBjb25zdCBkaW1zQiA9IGlucHV0c1syXS5kaW1zO1xuICBjb25zdCBkaW1zQyA9IGlucHV0c1swXS5kaW1zO1xuICBjb25zdCBvdXRwdXREYXRhVHlwZSA9IGlucHV0c1sxXS5kYXRhVHlwZTtcblxuICBjb25zdCBpc0Jyb2FkY2FzdCA9ICEoU2hhcGVVdGlsLmFyZUVxdWFsKGRpbXNBLCBkaW1zQikgJiYgU2hhcGVVdGlsLmFyZUVxdWFsKGRpbXNCLCBkaW1zQykpO1xuICBsZXQgb3V0cHV0U2hhcGUgPSBkaW1zQTtcbiAgbGV0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShkaW1zQSk7XG4gIC8vIFRPRE86IGRlYWwgd2l0aCB6ZXJvLXNpemVkIHRlbnNvcnMgKGVnLiBkaW1zPVsxLDBdKVxuXG4gIGlmIChpc0Jyb2FkY2FzdCkge1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRTaGFwZSA9IEJyb2FkY2FzdFV0aWwuY2FsY1NoYXBlKEJyb2FkY2FzdFV0aWwuY2FsY1NoYXBlKGRpbXNBLCBkaW1zQiwgZmFsc2UpISwgZGltc0MsIGZhbHNlKTtcbiAgICBpZiAoIWNhbGN1bGF0ZWRTaGFwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IHBlcmZvcm0gd2hlcmUgb3Agb24gdGhlIGdpdmVuIHRlbnNvcnMnKTtcbiAgICB9XG4gICAgb3V0cHV0U2hhcGUgPSBjYWxjdWxhdGVkU2hhcGU7XG4gICAgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgfVxuXG4gIGNvbnN0IHZlY1NpemUgPSBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDQpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1doZXJlJyxcbiAgICBzaGFkZXJDYWNoZToge2lucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnLCAncmFuaycsICdyYW5rJ119LFxuICAgIGdldFNoYWRlclNvdXJjZTogKHNoYWRlckhlbHBlcikgPT5cbiAgICAgICAgY3JlYXRlV2hlcmVPcFByb2dyYW1TaGFkZXIoc2hhZGVySGVscGVyLCBpbnB1dHMsIG91dHB1dFNoYXBlLCBpc0Jyb2FkY2FzdCwgb3V0cHV0RGF0YVR5cGUpLFxuICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICBvdXRwdXRzOiBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogb3V0cHV0RGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovIC8gNCAvKiB2ZWMgc2l6ZSAqLyl9LFxuICAgICAgcHJvZ3JhbVVuaWZvcm1zOlxuICAgICAgICAgIFt7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiB2ZWNTaXplfSwgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoZGltc0MsIGRpbXNBLCBkaW1zQiwgb3V0cHV0U2hhcGUpXSxcbiAgICB9KSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB3aGVyZSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlV2hlcmVPcFByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzKSk7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2FyZ01heCwgYXJnTWluLCBwYXJzZUFyZ01pbk1heEF0dHJpYnV0ZXN9IGZyb20gJy4vb3BzL2FyZ21pbm1heCc7XG5pbXBvcnQge2F0dGVudGlvbn0gZnJvbSAnLi9vcHMvYXR0ZW50aW9uJztcbmltcG9ydCB7YmF0Y2hOb3JtfSBmcm9tICcuL29wcy9iYXRjaC1ub3JtJztcbmltcG9ydCB7Ymlhc0FkZH0gZnJvbSAnLi9vcHMvYmlhcy1hZGQnO1xuaW1wb3J0IHtiaWFzU3BsaXRHZWx1fSBmcm9tICcuL29wcy9iaWFzLXNwbGl0LWdlbHUnO1xuaW1wb3J0ICogYXMgYmluYXJ5T3BzIGZyb20gJy4vb3BzL2JpbmFyeS1vcCc7XG5pbXBvcnQge2NvbmNhdCwgcGFyc2VDb25jYXRBdHRyaWJ1dGVzfSBmcm9tICcuL29wcy9jb25jYXQnO1xuaW1wb3J0IHtjb252LCBwYXJzZUNvbnZBdHRyaWJ1dGVzfSBmcm9tICcuL29wcy9jb252JztcbmltcG9ydCB7Y29udlRyYW5zcG9zZSwgcGFyc2VDb252VHJhbnNwb3NlQXR0cmlidXRlc30gZnJvbSAnLi9vcHMvY29udi10cmFuc3Bvc2UnO1xuaW1wb3J0IHtjdW1zdW0sIHBhcnNlQ3VtU3VtQXR0cmlidXRlc30gZnJvbSAnLi9vcHMvY3Vtc3VtJztcbmltcG9ydCB7ZGVwdGhUb1NwYWNlLCBwYXJzZURlcHRoVG9TcGFjZUF0dHJpYnV0ZXN9IGZyb20gJy4vb3BzL2RlcHRoLXRvLXNwYWNlJztcbmltcG9ydCB7ZWluc3VtLCBwYXJzZUVpbnN1bUF0dHJpYnV0ZXN9IGZyb20gJy4vb3BzL2VpbnN1bSc7XG5pbXBvcnQge2V4cGFuZH0gZnJvbSAnLi9vcHMvZXhwYW5kJztcbmltcG9ydCB7ZmFzdEdlbHV9IGZyb20gJy4vb3BzL2Zhc3QtZ2VsdSc7XG5pbXBvcnQge2dhdGhlciwgcGFyc2VHYXRoZXJBdHRyaWJ1dGVzfSBmcm9tICcuL29wcy9nYXRoZXInO1xuaW1wb3J0IHtnYXRoZXJFbGVtZW50cywgcGFyc2VHYXRoZXJFbGVtZW50c0F0dHJpYnV0ZXN9IGZyb20gJy4vb3BzL2dhdGhlci1lbGVtZW50cyc7XG5pbXBvcnQge2dlbW0sIHBhcnNlR2VtbUF0dHJpYnV0ZXN9IGZyb20gJy4vb3BzL2dlbW0nO1xuaW1wb3J0IHtpbnN0YW5jZU5vcm19IGZyb20gJy4vb3BzL2luc3RhbmNlLW5vcm0nO1xuaW1wb3J0IHtsYXllck5vcm19IGZyb20gJy4vb3BzL2xheWVyLW5vcm0nO1xuaW1wb3J0IHttYXRNdWx9IGZyb20gJy4vb3BzL21hdG11bCc7XG5pbXBvcnQge21hdE11bE5CaXRzLCBwYXJzZU1hdE11bE5CaXRzQXR0cmlidXRlc30gZnJvbSAnLi9vcHMvbWF0bXVsbmJpdHMnO1xuaW1wb3J0IHttdWx0aUhlYWRBdHRlbnRpb24sIHBhcnNlTXVsdGlIZWFkQXR0ZW50aW9uQXR0cmlidXRlc30gZnJvbSAnLi9vcHMvbXVsdGloZWFkLWF0dGVudGlpb24nO1xuaW1wb3J0IHtwYWR9IGZyb20gJy4vb3BzL3BhZCc7XG5pbXBvcnQgKiBhcyBwb29sIGZyb20gJy4vb3BzL3Bvb2wnO1xuaW1wb3J0IHtyYW5nZX0gZnJvbSAnLi9vcHMvcmFuZ2UnO1xuaW1wb3J0IHtyZWR1Y2VMMSwgcmVkdWNlTDIsIHJlZHVjZUxvZ1N1bSwgcmVkdWNlTG9nU3VtRXhwLCByZWR1Y2VNYXgsIHJlZHVjZU1lYW4sIHJlZHVjZU1pbiwgcmVkdWNlUHJvZCwgcmVkdWNlU3VtLCByZWR1Y2VTdW1TcXVhcmV9IGZyb20gJy4vb3BzL3JlZHVjZSc7XG5pbXBvcnQge3BhcnNlUmVzaXplQXR0cmlidXRlcywgcmVzaXplfSBmcm9tICcuL29wcy9yZXNpemUnO1xuaW1wb3J0IHtyb3RhcnlFbWJlZGRpbmd9IGZyb20gJy4vb3BzL3JvdGFyeS1lbWJlZGRpbmcnO1xuaW1wb3J0IHtza2lwTGF5ZXJOb3JtfSBmcm9tICcuL29wcy9za2lwLWxheWVyLW5vcm0nO1xuaW1wb3J0IHtwYXJzZVNsaWNlQXR0cmlidXRlcywgc2xpY2V9IGZyb20gJy4vb3BzL3NsaWNlJztcbmltcG9ydCB7cGFyc2VTb2Z0bWF4QXR0cmlidXRlcywgc29mdG1heH0gZnJvbSAnLi9vcHMvc29mdG1heCc7XG5pbXBvcnQge3BhcnNlU3BsaXRBdHRyaWJ1dGVzLCBzcGxpdH0gZnJvbSAnLi9vcHMvc3BsaXQnO1xuaW1wb3J0IHt0aWxlfSBmcm9tICcuL29wcy90aWxlJztcbmltcG9ydCB7cGFyc2VUcmFuc3Bvc2VBdHRyaWJ1dGVzLCB0cmFuc3Bvc2V9IGZyb20gJy4vb3BzL3RyYW5zcG9zZSc7XG5pbXBvcnQgKiBhcyB1bmFyeU9wcyBmcm9tICcuL29wcy91bmFyeS1vcCc7XG5pbXBvcnQge3doZXJlfSBmcm9tICcuL29wcy93aGVyZSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0fSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgUnVuRnVuY3Rpb24gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZT86IHVua25vd24pID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBQYXJzZUF0dHJpYnV0ZUZ1bmN0aW9uID0gKGF0dHJpYnV0ZVJhdzogdW5rbm93bikgPT4gdW5rbm93bjtcbmV4cG9ydCB0eXBlIE9wZXJhdG9ySW1wbGVtZW50YXRpb24gPSBbUnVuRnVuY3Rpb25dfFtSdW5GdW5jdGlvbiwgUGFyc2VBdHRyaWJ1dGVGdW5jdGlvbl07XG5cbmV4cG9ydCBjb25zdCBXRUJHUFVfT1BfUkVTT0xWRV9SVUxFUzogTWFwPHN0cmluZywgT3BlcmF0b3JJbXBsZW1lbnRhdGlvbj4gPSBuZXcgTWFwKFtcbiAgWydBYnMnLCBbdW5hcnlPcHMuYWJzXV0sXG4gIFsnQWNvcycsIFt1bmFyeU9wcy5hY29zXV0sXG4gIFsnQWNvc2gnLCBbdW5hcnlPcHMuYWNvc2hdXSxcbiAgWydBZGQnLCBbYmluYXJ5T3BzLmFkZF1dLFxuICBbJ0FyZ01heCcsIFthcmdNYXgsIHBhcnNlQXJnTWluTWF4QXR0cmlidXRlc11dLFxuICBbJ0FyZ01pbicsIFthcmdNaW4sIHBhcnNlQXJnTWluTWF4QXR0cmlidXRlc11dLFxuICBbJ0FzaW4nLCBbdW5hcnlPcHMuYXNpbl1dLFxuICBbJ0FzaW5oJywgW3VuYXJ5T3BzLmFzaW5oXV0sXG4gIFsnQXRhbicsIFt1bmFyeU9wcy5hdGFuXV0sXG4gIFsnQXRhbmgnLCBbdW5hcnlPcHMuYXRhbmhdXSxcbiAgWydBdHRlbnRpb24nLCBbYXR0ZW50aW9uXV0sXG4gIC8vIFRPRE86IHN1cHBvcnQgbmV3IGF0dHJpYnV0ZXMgZm9yIEF2ZXJhZ2VQb29sLTEwXG4gIFsnQXZlcmFnZVBvb2wnLCBbcG9vbC5hdmVyYWdlUG9vbCwgcG9vbC5wYXJzZUF2ZXJhZ2VQb29sQXR0cmlidXRlc11dLFxuICBbJ0JhdGNoTm9ybWFsaXphdGlvbicsIFtiYXRjaE5vcm1dXSxcbiAgWydCaWFzQWRkJywgW2JpYXNBZGRdXSxcbiAgWydCaWFzU3BsaXRHZWx1JywgW2JpYXNTcGxpdEdlbHVdXSxcbiAgWydDYXN0JywgW3VuYXJ5T3BzLmNhc3QsIHVuYXJ5T3BzLnBhcnNlQ2FzdEF0dHJpYnV0ZXNdXSxcbiAgWydDZWlsJywgW3VuYXJ5T3BzLmNlaWxdXSxcbiAgWydDbGlwJywgW3VuYXJ5T3BzLmNsaXBdXSxcbiAgWydDb25jYXQnLCBbY29uY2F0LCBwYXJzZUNvbmNhdEF0dHJpYnV0ZXNdXSxcbiAgWydDb252JywgW2NvbnYsIHBhcnNlQ29udkF0dHJpYnV0ZXNdXSxcbiAgWydDb252VHJhbnNwb3NlJywgW2NvbnZUcmFuc3Bvc2UsIHBhcnNlQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXNdXSxcbiAgWydDb3MnLCBbdW5hcnlPcHMuY29zXV0sXG4gIFsnQ29zaCcsIFt1bmFyeU9wcy5jb3NoXV0sXG4gIFsnQ3VtU3VtJywgW2N1bXN1bSwgcGFyc2VDdW1TdW1BdHRyaWJ1dGVzXV0sXG4gIFsnRGVwdGhUb1NwYWNlJywgW2RlcHRoVG9TcGFjZSwgcGFyc2VEZXB0aFRvU3BhY2VBdHRyaWJ1dGVzXV0sXG4gIFsnRGl2JywgW2JpbmFyeU9wcy5kaXZdXSxcbiAgWydFaW5zdW0nLCBbZWluc3VtLCBwYXJzZUVpbnN1bUF0dHJpYnV0ZXNdXSxcbiAgWydFbHUnLCBbdW5hcnlPcHMuZWx1LCB1bmFyeU9wcy5wYXJzZUFscGhhQXR0cmlidXRlc11dLFxuICBbJ0VxdWFsJywgW2JpbmFyeU9wcy5lcXVhbF1dLFxuICBbJ0VyZicsIFt1bmFyeU9wcy5lcmZdXSxcbiAgWydFeHAnLCBbdW5hcnlPcHMuZXhwXV0sXG4gIFsnRXhwYW5kJywgW2V4cGFuZF1dLFxuICBbJ0Zhc3RHZWx1JywgW2Zhc3RHZWx1XV0sXG4gIFsnRmxvb3InLCBbdW5hcnlPcHMuZmxvb3JdXSxcbiAgWydGdXNlZENvbnYnLCBbY29udiwgcGFyc2VDb252QXR0cmlidXRlc11dLFxuICBbJ0dhdGhlcicsIFtnYXRoZXIsIHBhcnNlR2F0aGVyQXR0cmlidXRlc11dLFxuICBbJ0dhdGhlckVsZW1lbnRzJywgW2dhdGhlckVsZW1lbnRzLCBwYXJzZUdhdGhlckVsZW1lbnRzQXR0cmlidXRlc11dLFxuICBbJ0dlbHUnLCBbdW5hcnlPcHMuZ2VsdV1dLFxuICBbJ0dlbW0nLCBbZ2VtbSwgcGFyc2VHZW1tQXR0cmlidXRlc11dLFxuICBbJ0dsb2JhbEF2ZXJhZ2VQb29sJywgW3Bvb2wuZ2xvYmFsQXZlcmFnZVBvb2wsIHBvb2wucGFyc2VHbG9iYWxBdmVyYWdlUG9vbEF0dHJpYnV0ZXNdXSxcbiAgWydHbG9iYWxNYXhQb29sJywgW3Bvb2wuZ2xvYmFsTWF4UG9vbCwgcG9vbC5wYXJzZUdsb2JhbE1heFBvb2xBdHRyaWJ1dGVzXV0sXG4gIFsnR3JlYXRlcicsIFtiaW5hcnlPcHMuZ3JlYXRlcl1dLFxuICBbJ0dyZWF0ZXJPckVxdWFsJywgW2JpbmFyeU9wcy5ncmVhdGVyT3JFcXVhbF1dLFxuICBbJ0hhcmRTaWdtb2lkJywgW3VuYXJ5T3BzLmhhcmRTaWdtb2lkLCB1bmFyeU9wcy5wYXJzZUhhcmRTaWdtb2lkQXR0cmlidXRlc11dLFxuICBbJ0luc3RhbmNlTm9ybWFsaXphdGlvbicsIFtpbnN0YW5jZU5vcm1dXSxcbiAgWydMYXllck5vcm1hbGl6YXRpb24nLCBbbGF5ZXJOb3JtXV0sXG4gIFsnTGVha3lSZWx1JywgW3VuYXJ5T3BzLmxlYWt5UmVsdSwgdW5hcnlPcHMucGFyc2VBbHBoYUF0dHJpYnV0ZXNdXSxcbiAgWydMZXNzJywgW2JpbmFyeU9wcy5sZXNzXV0sXG4gIFsnTGVzc09yRXF1YWwnLCBbYmluYXJ5T3BzLmxlc3NPckVxdWFsXV0sXG4gIFsnTG9nJywgW3VuYXJ5T3BzLmxvZ11dLFxuICBbJ01hdE11bCcsIFttYXRNdWxdXSxcbiAgWydNYXRNdWxOQml0cycsIFttYXRNdWxOQml0cywgcGFyc2VNYXRNdWxOQml0c0F0dHJpYnV0ZXNdXSxcbiAgLy8gVE9ETzogc3VwcG9ydCBuZXcgYXR0cmlidXRlcyBmb3IgTWF4UG9vbC04IGFuZCBNYXhQb29sLTEwXG4gIFsnTWF4UG9vbCcsIFtwb29sLm1heFBvb2wsIHBvb2wucGFyc2VNYXhQb29sQXR0cmlidXRlc11dLFxuICBbJ011bCcsIFtiaW5hcnlPcHMubXVsXV0sXG4gIFsnTXVsdGlIZWFkQXR0ZW50aW9uJywgW211bHRpSGVhZEF0dGVudGlvbiwgcGFyc2VNdWx0aUhlYWRBdHRlbnRpb25BdHRyaWJ1dGVzXV0sXG4gIFsnTmVnJywgW3VuYXJ5T3BzLm5lZ11dLFxuICBbJ05vdCcsIFt1bmFyeU9wcy5ub3RdXSxcbiAgWydQYWQnLCBbcGFkXV0sXG4gIFsnUG93JywgW2JpbmFyeU9wcy5wb3ddXSxcbiAgWydSYW5nZScsIFtyYW5nZV1dLFxuICBbJ1JlY2lwcm9jYWwnLCBbdW5hcnlPcHMucmVjaXByb2NhbF1dLFxuICBbJ1JlZHVjZU1pbicsIFtyZWR1Y2VNaW5dXSxcbiAgWydSZWR1Y2VNZWFuJywgW3JlZHVjZU1lYW5dXSxcbiAgWydSZWR1Y2VNYXgnLCBbcmVkdWNlTWF4XV0sXG4gIFsnUmVkdWNlU3VtJywgW3JlZHVjZVN1bV1dLFxuICBbJ1JlZHVjZVByb2QnLCBbcmVkdWNlUHJvZF1dLFxuICBbJ1JlZHVjZUwxJywgW3JlZHVjZUwxXV0sXG4gIFsnUmVkdWNlTDInLCBbcmVkdWNlTDJdXSxcbiAgWydSZWR1Y2VMb2dTdW0nLCBbcmVkdWNlTG9nU3VtXV0sXG4gIFsnUmVkdWNlTG9nU3VtRXhwJywgW3JlZHVjZUxvZ1N1bUV4cF1dLFxuICBbJ1JlZHVjZVN1bVNxdWFyZScsIFtyZWR1Y2VTdW1TcXVhcmVdXSxcbiAgWydSZWx1JywgW3VuYXJ5T3BzLnJlbHVdXSxcbiAgWydSZXNpemUnLCBbcmVzaXplLCBwYXJzZVJlc2l6ZUF0dHJpYnV0ZXNdXSxcbiAgWydSb3RhcnlFbWJlZGRpbmcnLCBbcm90YXJ5RW1iZWRkaW5nXV0sXG4gIFsnU2lnbW9pZCcsIFt1bmFyeU9wcy5zaWdtb2lkXV0sXG4gIFsnU2luJywgW3VuYXJ5T3BzLnNpbl1dLFxuICBbJ1NpbmgnLCBbdW5hcnlPcHMuc2luaF1dLFxuICBbJ1NsaWNlJywgW3NsaWNlLCBwYXJzZVNsaWNlQXR0cmlidXRlc11dLFxuICBbJ1NraXBMYXllck5vcm1hbGl6YXRpb24nLCBbc2tpcExheWVyTm9ybV1dLFxuICBbJ1NwbGl0JywgW3NwbGl0LCBwYXJzZVNwbGl0QXR0cmlidXRlc11dLFxuICBbJ1NxcnQnLCBbdW5hcnlPcHMuc3FydF1dLFxuICBbJ1NvZnRtYXgnLCBbc29mdG1heCwgcGFyc2VTb2Z0bWF4QXR0cmlidXRlc11dLFxuICBbJ1N1YicsIFtiaW5hcnlPcHMuc3ViXV0sXG4gIFsnVGFuJywgW3VuYXJ5T3BzLnRhbl1dLFxuICBbJ1RhbmgnLCBbdW5hcnlPcHMudGFuaF1dLFxuICBbJ1RocmVzaG9sZGVkUmVsdScsIFt1bmFyeU9wcy50aHJlc2hvbGRlZFJlbHUsIHVuYXJ5T3BzLnBhcnNlQWxwaGFBdHRyaWJ1dGVzXV0sXG4gIFsnVGlsZScsIFt0aWxlXV0sXG4gIFsnVHJhbnNwb3NlJywgW3RyYW5zcG9zZSwgcGFyc2VUcmFuc3Bvc2VBdHRyaWJ1dGVzXV0sXG4gIFsnV2hlcmUnLCBbd2hlcmVdXSxcbl0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RSQUNFX0ZVTkNfQkVHSU4sIFRSQUNFX0ZVTkNfRU5EfSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge1dlYkdwdUJhY2tlbmR9IGZyb20gJy4uL2JhY2tlbmQtd2ViZ3B1JztcbmltcG9ydCB7TE9HX0RFQlVHfSBmcm9tICcuLi9sb2cnO1xuXG5pbXBvcnQge2NyZWF0ZVNoYWRlckhlbHBlcn0gZnJvbSAnLi9vcHMvY29tbW9uJztcbmltcG9ydCB7QXJ0aWZhY3QsIEdwdURhdGEsIFByb2dyYW1JbmZvfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBQcm9ncmFtTWFuYWdlciBpcyB0aGUgbWFpbiBjbGFzcyBiZWhpbmQgcnVubmluZyBjb21wdXRhdGlvbnNcbiAqIEl0IGJ1aWxkcyBQcm9ncmFtSW5mbydzIGludG8gQXJ0aWZhY3RzXG4gKiBJdCBjb21waWxlcyBnaXZlbiBQcm9ncmFtSW5mbydzIGludG8gV2ViR0wgUHJvcmFtcyAoY2FjaGVkIGFzIEFydGlmYWN0cylcbiAqIFVzZXMgdGhlIGFydGlmYWN0IHRvIHJ1biB0aGUgY29tcHV0YXRpb24gYnkgY2FsbGluZyBEcmF3IG9uXG4gKiB0aGUgV2ViR0wgZHJhd2luZyBidWZmZXJcbiAqIFByb2dyYW1NYW5hZ2VyIGF1dG9tYXRpY2FsbHkgbWFwcyAoYmluZHMpIGlucHV0IHZhcmlhYmxlcyB0byB0aGVpclxuICogY29ycmVzcG9uZGluZyBMb2NhdGlvbidzIGluIHRoZSBiaW5hcnkgcHJvZ3JhbVxuICovXG5leHBvcnQgY2xhc3MgUHJvZ3JhbU1hbmFnZXIge1xuICByZXBvOiBNYXA8dW5rbm93biwgQXJ0aWZhY3Q+OyAgLy8gdGhpcyBzaG91bGQgYmUgcGVyLXNlc3Npb24gb2JqZWN0XG4gIGF0dHJpYnV0ZXNCb3VuZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhY2tlbmQ6IFdlYkdwdUJhY2tlbmQpIHtcbiAgICB0aGlzLnJlcG8gPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5hdHRyaWJ1dGVzQm91bmQgPSBmYWxzZTtcbiAgfVxuICBnZXRBcnRpZmFjdChrZXk6IHVua25vd24pOiBBcnRpZmFjdHx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlcG8uZ2V0KGtleSk7XG4gIH1cbiAgc2V0QXJ0aWZhY3Qoa2V5OiB1bmtub3duLCBhcnRpZmFjdDogQXJ0aWZhY3QpOiB2b2lkIHtcbiAgICB0aGlzLnJlcG8uc2V0KGtleSwgYXJ0aWZhY3QpO1xuICB9XG4gIHJ1bihidWlsZEFydGlmYWN0OiBBcnRpZmFjdCwgaW5wdXRzOiBHcHVEYXRhW10sIG91dHB1dHM6IEdwdURhdGFbXSwgZGlzcGF0Y2hHcm91cDogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgdW5pZm9ybUJ1ZmZlckJpbmRpbmc6IEdQVUJpbmRpbmdSZXNvdXJjZXx1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBUUkFDRV9GVU5DX0JFR0lOKGJ1aWxkQXJ0aWZhY3QucHJvZ3JhbUluZm8ubmFtZSk7XG4gICAgY29uc3QgZGV2aWNlID0gdGhpcy5iYWNrZW5kLmRldmljZTtcbiAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSB0aGlzLmJhY2tlbmQuZ2V0Q29tcHV0ZVBhc3NFbmNvZGVyKCk7XG4gICAgdGhpcy5iYWNrZW5kLndyaXRlVGltZXN0YW1wKHRoaXMuYmFja2VuZC5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyKTtcbiAgICBjb25zdCBlbnRyaWVzID0gW107XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcbiAgICAgIGVudHJpZXMucHVzaCh7YmluZGluZzogZW50cmllcy5sZW5ndGgsIHJlc291cmNlOiB7YnVmZmVyOiBpbnB1dC5idWZmZXJ9fSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIG91dHB1dHMpIHtcbiAgICAgIGVudHJpZXMucHVzaCh7YmluZGluZzogZW50cmllcy5sZW5ndGgsIHJlc291cmNlOiB7YnVmZmVyOiBvdXRwdXQuYnVmZmVyfX0pO1xuICAgIH1cbiAgICBpZiAodW5pZm9ybUJ1ZmZlckJpbmRpbmcpIHtcbiAgICAgIGVudHJpZXMucHVzaCh7YmluZGluZzogZW50cmllcy5sZW5ndGgsIHJlc291cmNlOiB1bmlmb3JtQnVmZmVyQmluZGluZ30pO1xuICAgIH1cbiAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKFxuICAgICAgICB7bGF5b3V0OiBidWlsZEFydGlmYWN0LmNvbXB1dGVQaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCksIGVudHJpZXMsIGxhYmVsOiBidWlsZEFydGlmYWN0LnByb2dyYW1JbmZvLm5hbWV9KTtcblxuICAgIGlmICh0aGlzLmJhY2tlbmQuc2Vzc2lvblN0YXR1cyA9PT0gJ2NhcHR1cmluZycpIHtcbiAgICAgIGNvbnN0IGNvbW1hbmRJbmZvID0ge1xuICAgICAgICBrZXJuZWxJZDogdGhpcy5iYWNrZW5kLmN1cnJlbnRLZXJuZWxJZCEsXG4gICAgICAgIGNvbXB1dGVQaXBlbGluZTogYnVpbGRBcnRpZmFjdC5jb21wdXRlUGlwZWxpbmUsXG4gICAgICAgIGJpbmRHcm91cCxcbiAgICAgICAgZGlzcGF0Y2hHcm91cFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlc3Npb25Db21tYW5kTGlzdCA9IHRoaXMuYmFja2VuZC5jYXB0dXJlZENvbW1hbmRMaXN0LmdldCh0aGlzLmJhY2tlbmQuY3VycmVudFNlc3Npb25JZCEpO1xuICAgICAgc2Vzc2lvbkNvbW1hbmRMaXN0IS5wdXNoKGNvbW1hbmRJbmZvKTtcbiAgICB9XG5cbiAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoYnVpbGRBcnRpZmFjdC5jb21wdXRlUGlwZWxpbmUpO1xuICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcbiAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2hXb3JrZ3JvdXBzKC4uLmRpc3BhdGNoR3JvdXApO1xuICAgIHRoaXMuYmFja2VuZC53cml0ZVRpbWVzdGFtcCh0aGlzLmJhY2tlbmQucGVuZGluZ0Rpc3BhdGNoTnVtYmVyICogMiArIDEpO1xuICAgIHRoaXMuYmFja2VuZC5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIrKztcblxuICAgIGlmICh0aGlzLmJhY2tlbmQucGVuZGluZ0Rpc3BhdGNoTnVtYmVyID49IHRoaXMuYmFja2VuZC5tYXhEaXNwYXRjaE51bWJlciB8fFxuICAgICAgICB0aGlzLmJhY2tlbmQucXVlcnlUeXBlID09PSAnYXQtcGFzc2VzJykge1xuICAgICAgdGhpcy5iYWNrZW5kLmVuZENvbXB1dGVQYXNzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJhY2tlbmQucGVuZGluZ0Rpc3BhdGNoTnVtYmVyID49IHRoaXMuYmFja2VuZC5tYXhEaXNwYXRjaE51bWJlcikge1xuICAgICAgdGhpcy5iYWNrZW5kLmZsdXNoKCk7XG4gICAgfVxuICAgIFRSQUNFX0ZVTkNfRU5EKGJ1aWxkQXJ0aWZhY3QucHJvZ3JhbUluZm8ubmFtZSk7XG4gIH1cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLnJlcG8uZm9yRWFjaChhID0+IHRoaXMuZ2xDb250ZXh0LmRlbGV0ZVByb2dyYW0oYS5wcm9ncmFtKSk7XG4gIH1cbiAgYnVpbGQocHJvZ3JhbUluZm86IFByb2dyYW1JbmZvLCBub3JtYWxpemVkRGlzcGF0Y2hHcm91cFNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IEFydGlmYWN0IHtcbiAgICBUUkFDRV9GVU5DX0JFR0lOKHByb2dyYW1JbmZvLm5hbWUpO1xuICAgIGNvbnN0IGRldmljZSA9IHRoaXMuYmFja2VuZC5kZXZpY2U7XG4gICAgY29uc3QgZXh0ZW5zaW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZGV2aWNlLmZlYXR1cmVzLmhhcygnc2hhZGVyLWYxNicpKSB7XG4gICAgICBleHRlbnNpb25zLnB1c2goJ2VuYWJsZSBmMTY7Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNoYWRlckhlbHBlciA9IGNyZWF0ZVNoYWRlckhlbHBlcihub3JtYWxpemVkRGlzcGF0Y2hHcm91cFNpemUsIHRoaXMuYmFja2VuZC5kZXZpY2UubGltaXRzKTtcbiAgICBjb25zdCB1c2VyQ29kZSA9IHByb2dyYW1JbmZvLmdldFNoYWRlclNvdXJjZShzaGFkZXJIZWxwZXIpO1xuICAgIGNvbnN0IGNvZGUgPSBgJHtleHRlbnNpb25zLmpvaW4oJ1xcbicpfVxcbiR7c2hhZGVySGVscGVyLmFkZGl0aW9uYWxJbXBsZW1lbnRhdGlvbnN9XFxuJHt1c2VyQ29kZX1gO1xuICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGUsIGxhYmVsOiBwcm9ncmFtSW5mby5uYW1lfSk7XG4gICAgTE9HX0RFQlVHKCd2ZXJib3NlJywgKCkgPT4gYFtXZWJHUFVdICR7cHJvZ3JhbUluZm8ubmFtZX0gc2hhZGVyIGNvZGU6ICR7Y29kZX1gKTtcblxuICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoXG4gICAgICAgIHtjb21wdXRlOiB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICdtYWluJ30sIGxheW91dDogJ2F1dG8nLCBsYWJlbDogcHJvZ3JhbUluZm8ubmFtZX0pO1xuXG4gICAgVFJBQ0VfRlVOQ19FTkQocHJvZ3JhbUluZm8ubmFtZSk7XG4gICAgcmV0dXJuIHtwcm9ncmFtSW5mbywgY29tcHV0ZVBpcGVsaW5lLCB1bmlmb3JtVmFyaWFibGVzSW5mbzogc2hhZGVySGVscGVyLnZhcmlhYmxlc0luZm99O1xuICB9XG5cbiAgbm9ybWFsaXplRGlzcGF0Y2hHcm91cFNpemUoZGlzcGF0Y2hHcm91cDogUmV0dXJuVHlwZTxQcm9ncmFtSW5mb1snZ2V0UnVuRGF0YSddPlsnZGlzcGF0Y2hHcm91cCddKTpcbiAgICAgIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgY29uc3QgeCA9IHR5cGVvZiBkaXNwYXRjaEdyb3VwID09PSAnbnVtYmVyJyA/IGRpc3BhdGNoR3JvdXAgOiBkaXNwYXRjaEdyb3VwLng7XG4gICAgY29uc3QgeSA9IHR5cGVvZiBkaXNwYXRjaEdyb3VwID09PSAnbnVtYmVyJyA/IDEgOiAoZGlzcGF0Y2hHcm91cC55IHx8IDEpO1xuICAgIGNvbnN0IHogPSB0eXBlb2YgZGlzcGF0Y2hHcm91cCA9PT0gJ251bWJlcicgPyAxIDogKGRpc3BhdGNoR3JvdXAueiB8fCAxKTtcbiAgICBjb25zdCBsaW1pdFBlckRpbWVuc2lvbiA9IHRoaXMuYmFja2VuZC5kZXZpY2UubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uO1xuICAgIGlmICh4IDw9IGxpbWl0UGVyRGltZW5zaW9uICYmIHkgPD0gbGltaXRQZXJEaW1lbnNpb24gJiYgeiA8PSBsaW1pdFBlckRpbWVuc2lvbikge1xuICAgICAgcmV0dXJuIFt4LCB5LCB6XTtcbiAgICB9XG4gICAgY29uc3Qgc2l6ZSA9IHggKiB5ICogejtcbiAgICBsZXQgZGlzcGF0Y2hBdmVyYWdlID0gTWF0aC5jZWlsKE1hdGguc3FydChzaXplKSk7XG4gICAgaWYgKGRpc3BhdGNoQXZlcmFnZSA+IGxpbWl0UGVyRGltZW5zaW9uKSB7XG4gICAgICBkaXNwYXRjaEF2ZXJhZ2UgPSBNYXRoLmNlaWwoTWF0aC5jYnJ0KHNpemUpKTtcbiAgICAgIGlmIChkaXNwYXRjaEF2ZXJhZ2UgPiBsaW1pdFBlckRpbWVuc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvdGFsIGRpc3BhdGNoIHNpemUgZXhjZWVkcyBXZWJHUFUgbWF4aW11bS4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbZGlzcGF0Y2hBdmVyYWdlLCBkaXNwYXRjaEF2ZXJhZ2UsIGRpc3BhdGNoQXZlcmFnZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbZGlzcGF0Y2hBdmVyYWdlLCBkaXNwYXRjaEF2ZXJhZ2UsIDFdO1xuICAgIH1cbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0VudiwgVGVuc29yLCBUUkFDRSwgVFJBQ0VfRlVOQ19CRUdJTiwgVFJBQ0VfRlVOQ19FTkR9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7RGF0YVR5cGUsIHRlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nfSBmcm9tICcuLi93YXNtLWNvbW1vbic7XG5cbmltcG9ydCB7Y29uZmlndXJlTG9nZ2VyLCBMT0dfREVCVUd9IGZyb20gJy4vbG9nJztcbmltcG9ydCB7Y3JlYXRlVmlldywgVGVuc29yVmlld30gZnJvbSAnLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge2NyZWF0ZUdwdURhdGFNYW5hZ2VyLCBkb3dubG9hZEdwdURhdGEsIEdwdURhdGFNYW5hZ2VyfSBmcm9tICcuL3dlYmdwdS9ncHUtZGF0YS1tYW5hZ2VyJztcbmltcG9ydCB7UnVuRnVuY3Rpb24sIFdFQkdQVV9PUF9SRVNPTFZFX1JVTEVTfSBmcm9tICcuL3dlYmdwdS9vcC1yZXNvbHZlLXJ1bGVzJztcbmltcG9ydCB7UHJvZ3JhbU1hbmFnZXJ9IGZyb20gJy4vd2ViZ3B1L3Byb2dyYW0tbWFuYWdlcic7XG5pbXBvcnQge0FkYXB0ZXJJbmZvLCBDb21wdXRlQ29udGV4dCwgR3B1QXJjaGl0ZWN0dXJlLCBHcHVEYXRhLCBHcHVWZW5kb3IsIFByb2dyYW1JbmZvLCBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeSwgU2Vzc2lvblN0YXRlLCBUaW1lc3RhbXBRdWVyeX0gZnJvbSAnLi93ZWJncHUvdHlwZXMnO1xuXG5pbnRlcmZhY2UgQ29tbWFuZEluZm8ge1xuICByZWFkb25seSBrZXJuZWxJZDogbnVtYmVyO1xuICByZWFkb25seSBjb21wdXRlUGlwZWxpbmU6IEdQVUNvbXB1dGVQaXBlbGluZTtcbiAgcmVhZG9ubHkgYmluZEdyb3VwOiBHUFVCaW5kR3JvdXA7XG4gIHJlYWRvbmx5IGRpc3BhdGNoR3JvdXA6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuaW50ZXJmYWNlIEtlcm5lbEluZm8ge1xuICByZWFkb25seSBrZXJuZWxUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtlcm5lbE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkga2VybmVsRW50cnk6IFJ1bkZ1bmN0aW9uO1xuICByZWFkb25seSBhdHRyaWJ1dGVzOiBbKChhdHRyaWJ1dGU6IHVua25vd24pID0+IHVua25vd24pfHVuZGVmaW5lZCwgdW5rbm93bl07XG59XG5cbmludGVyZmFjZSBQZW5kaW5nS2VybmVsSW5mbyB7XG4gIHJlYWRvbmx5IGtlcm5lbElkOiBudW1iZXI7XG4gIHJlYWRvbmx5IHByb2dyYW1OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlucHV0VGVuc29yVmlld3M6IHJlYWRvbmx5IFRlbnNvclZpZXdbXTtcbiAgcmVhZG9ubHkgb3V0cHV0VGVuc29yVmlld3M6IHJlYWRvbmx5IFRlbnNvclZpZXdbXTtcbn1cblxuY29uc3QgZ2V0UHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lLZXkgPVxuICAgIChpbnB1dFRlbnNvcnM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgaW5wdXREZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5W10pOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKGlucHV0RGVwZW5kZW5jaWVzLmxlbmd0aCAhPT0gaW5wdXRUZW5zb3JzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0RGVwZW5kZW5jaWVzIGxlbmd0aCAke2lucHV0RGVwZW5kZW5jaWVzLmxlbmd0aH0gaXMgbm90IGVxdWFsIHRvIGlucHV0VGVuc29ycyBsZW5ndGggJHtcbiAgICAgICAgICAgIGlucHV0VGVuc29ycy5sZW5ndGh9LmApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnB1dEluZm9zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFRlbnNvcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGlucHV0VGVuc29yc1tpXS5kYXRhVHlwZTtcbiAgICAgICAgc3dpdGNoIChpbnB1dERlcGVuZGVuY2llc1tpXSkge1xuICAgICAgICAgIGNhc2UgJ25vbmUnOiB7XG4gICAgICAgICAgICBpbnB1dEluZm9zLnB1c2goJycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3R5cGUnOiB7XG4gICAgICAgICAgICBpbnB1dEluZm9zLnB1c2goYCR7dHlwZX1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdyYW5rJzoge1xuICAgICAgICAgICAgY29uc3QgcmFuayA9IGlucHV0VGVuc29yc1tpXS5kaW1zLmxlbmd0aDtcbiAgICAgICAgICAgIGlucHV0SW5mb3MucHVzaChgJHt0eXBlfTske3Jhbmt9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnZGltcyc6IHtcbiAgICAgICAgICAgIGNvbnN0IGRpbXMgPSBpbnB1dFRlbnNvcnNbaV0uZGltcy5qb2luKCcsJyk7XG4gICAgICAgICAgICBpbnB1dEluZm9zLnB1c2goYCR7dHlwZX07JHtkaW1zfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGlucHV0IGRlcGVuZGVuY3k6ICR7aW5wdXREZXBlbmRlbmNpZXNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlucHV0SW5mb3Muam9pbignfCcpO1xuICAgIH07XG5cbi8qKlxuICogZ2V0IGEgdW5pcXVlIGtleSByZXByZXNlbnRpbmcgdGhlIHByb2dyYW0gZnJvbSB0aGUgcHJvZ3JhbSBpbmZvLCBpbnB1dCBzaGFwZXMgYW5kIHR5cGVzLlxuICpcbiAqIEByZXR1cm5zIGEgdW5pcXVlIGtleSBpcyBhIHNob3J0ZXIgc3RyaW5nIHRoYW4gdGhlIHNoYWRlciBzb3VyY2UsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdG8gaWRlbnRpZnkgYVxuICogcHJvZ3JhbS4gaWYgdGhlIGtleSBpcyB0aGUgc2FtZSwgdGhlIHByb2dyYW0gc2hhZGVyIHNvdXJjZSBzaG91bGQgYmUgdGhlIHNhbWUsIHNvIHdlIGNhbiByZXVzZSB0aGUgcHJvZ3JhbS5cbiAqXG4gKi9cbmNvbnN0IGdldFByb2dyYW1JbmZvVW5pcXVlS2V5ID1cbiAgICAocHJvZ3JhbUluZm86IFByb2dyYW1JbmZvLCBpbnB1dFRlbnNvcnM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgaXMxRGltZW5zaW9uRGlzcGF0Y2g6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICAgICAgLy8gZmluYWwga2V5IGZvcm1hdDpcbiAgICAgIC8vIDxQUk9HUkFNX05BTUU+WzxQUk9HUkFNX0NVU1RPTV9DQUNIRV9ISU5UPl06aXMxRGltZW5zaW9uRGlzcGF0Y2g6PElOUFVUU19JTkZPXzA+fDxJTlBVVFNfSU5GT18xPnwuLi5cbiAgICAgIGxldCBrZXkgPSBwcm9ncmFtSW5mby5uYW1lO1xuICAgICAgaWYgKHByb2dyYW1JbmZvLnNoYWRlckNhY2hlPy5oaW50KSB7XG4gICAgICAgIGtleSArPSAnWycgKyBwcm9ncmFtSW5mby5zaGFkZXJDYWNoZS5oaW50ICsgJ10nO1xuICAgICAgfVxuICAgICAga2V5ICs9ICc6JyArIGlzMURpbWVuc2lvbkRpc3BhdGNoICtcbiAgICAgICAgICBgOiR7XG4gICAgICAgICAgICAgICAgIGdldFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5S2V5KFxuICAgICAgICAgICAgICAgICAgICAgaW5wdXRUZW5zb3JzLFxuICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUluZm8uc2hhZGVyQ2FjaGU/LmlucHV0RGVwZW5kZW5jaWVzID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFycmF5PFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5PihpbnB1dFRlbnNvcnMubGVuZ3RoKS5maWxsKCdkaW1zJykpfWA7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH07XG5cbmNsYXNzIEFkYXB0ZXJJbmZvSW1wbCBpbXBsZW1lbnRzIEFkYXB0ZXJJbmZvIHtcbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogc3RyaW5nO1xuICByZWFkb25seSB2ZW5kb3I/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoYWRhcHRlckluZm86IEdQVUFkYXB0ZXJJbmZvKSB7XG4gICAgaWYgKGFkYXB0ZXJJbmZvKSB7XG4gICAgICB0aGlzLmFyY2hpdGVjdHVyZSA9IGFkYXB0ZXJJbmZvLmFyY2hpdGVjdHVyZTtcbiAgICAgIHRoaXMudmVuZG9yID0gYWRhcHRlckluZm8udmVuZG9yO1xuICAgIH1cbiAgfVxuXG4gIGlzQXJjaGl0ZWN0dXJlKGFyY2hpdGVjdHVyZTogR3B1QXJjaGl0ZWN0dXJlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXJjaGl0ZWN0dXJlID09PSBhcmNoaXRlY3R1cmU7XG4gIH1cblxuICBpc1ZlbmRvcih2ZW5kb3I6IEdwdVZlbmRvcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZlbmRvciA9PT0gdmVuZG9yO1xuICB9XG59XG5cbi8qKlxuICogdGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBzdG9yZSBzdGF0dXMgYW5kIGJlaW5nIHVzZWQgYXMgYSBzaW5nbGV0b24gZm9yIEpTRVAuIEl0IHdpbGwgYmUgcGFzc2VkIHRvIGpzZXBJbml0KCkgYXNcbiAqIHRoZSBmaXJzdCBwYXJhbWV0ZXIgc28gdGhhdCBpdCBpcyBzdG9yZWQgZm9yIGZ1dHVyZSB1c2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJHcHVCYWNrZW5kIHtcbiAgYWRhcHRlckluZm86IEFkYXB0ZXJJbmZvSW1wbDtcbiAgZGV2aWNlOiBHUFVEZXZpY2U7XG4gIC8qKlxuICAgKiBhbiBpbnN0YW5jZSBvZiBHcHVEYXRhTWFuYWdlciB0byBtYW5hZ2UgYSBHcHVEYXRhSWQgLT4gR3B1QnVmZmVyIG1hcHBpbmdcbiAgICovXG4gIGdwdURhdGFNYW5hZ2VyOiBHcHVEYXRhTWFuYWdlcjtcbiAgLyoqXG4gICAqIGFuIGluc3RhbmNlIG9mIFByb2dyYW1NYW5hZ2VyIHRvIGJ1aWxkIGFuZCBydW4gV2ViR1BVIGNvbXB1dGUgc2hhZGVyIHByb2dyYW0sIGFuZCBtYW5hZ2UgYSBQcm9ncmFtS2V5IC0+IFByb2dyYW1cbiAgICogYXJ0aWZhY3RzIG1hcHBpbmdcbiAgICovXG4gIHByb2dyYW1NYW5hZ2VyOiBQcm9ncmFtTWFuYWdlcjtcblxuICAvKipcbiAgICogcmVwcmVzZW50aW5nIHRoZSBzZXNzaW9uIElEIG9mIHdoaWNoIGlzIGN1cnJlbnRseSBiZWluZyBydW4uXG4gICAqIGBudWxsYCBtZWFucyBubyBzZXNzaW9uIGlzIGJlaW5nIHJ1bi5cbiAgICogb25seSB2YWxpZCB3aGVuIHNlc3Npb24ucnVuIGlzIGV4ZWN1dGVkLlxuICAgKi9cbiAgY3VycmVudFNlc3Npb25JZDogbnVtYmVyfG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiByZXByZXNlbnRpbmcgdGhlIGtlcm5lbCBJRCBvZiB3aGljaCBpcyBjdXJyZW50bHkgYmVpbmcgY29tcHV0ZWQgKENQVSBjb2RlIHBlcnNwZWN0aXZlKS5cbiAgICogYG51bGxgIG1lYW5zIG5vIGtlcm5lbCBpcyBiZWluZyBjb21wdXRlZC5cbiAgICogb25seSBvbmUga2VybmVsIGNhbiBiZSBjb21wdXRlZCBhdCBhIG1vbWVudC5cbiAgICovXG4gIGN1cnJlbnRLZXJuZWxJZDogbnVtYmVyfG51bGwgPSBudWxsO1xuICAvKipcbiAgICogYSBsaXN0IG9mIHRlbXBvcmFyeSBHUFUgZGF0YSBmb3IgdGhlIGN1cnJlbnQga2VybmVsLiBzaG91bGQgcmVsZWFzZSB3aGVuIHRoZSBrZXJuZWwgZG9uZSBjb21wdXRhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgdGVtcG9yYXJ5RGF0YTogR3B1RGF0YVtdO1xuICAvKipcbiAgICogYSBLZXJuZWxJRCAtPiBhIEdQVSBkYXRhIGxpc3QsIHdoaWNoIHN0b3JlcyBwZXJzaXN0ZW50IEdQVSBkYXRhIG93bmVkIGJ5IHRoZSBzcGVjaWZpYyBrZXJuZWwuXG4gICAqL1xuICBwcml2YXRlIGtlcm5lbFBlcnNpc3RlbnREYXRhOiBNYXA8bnVtYmVyLCBHcHVEYXRhW10+O1xuICAvKipcbiAgICogYSBLZXJuZWxJRCAtPiBhIGN1c3RvbSBkYXRhLCB3aGljaCBzdG9yZXMgY3VzdG9tIGRhdGEgb3duZWQgYnkgdGhlIHNwZWNpZmljIGtlcm5lbC5cbiAgICovXG4gIHByaXZhdGUga2VybmVsQ3VzdG9tRGF0YTogTWFwPG51bWJlciwge1trZXk6IHN0cmluZ106IHVua25vd259PjtcbiAgLyoqXG4gICAqIGdldCB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIGN1cnJlbnQga2VybmVsXG4gICAqL1xuICBnZXQgY3VycmVudEtlcm5lbEN1c3RvbURhdGEoKToge1trZXk6IHN0cmluZ106IHVua25vd259IHtcbiAgICBpZiAodGhpcy5jdXJyZW50S2VybmVsSWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3VycmVudEtlcm5lbEN1c3RvbURhdGEoKTogY3VycmVudEtlcm5lbElkIGlzIG51bGwuIChzaG91bGQgbm90IGhhcHBlbiknKTtcbiAgICB9XG5cbiAgICBsZXQgZGF0YSA9IHRoaXMua2VybmVsQ3VzdG9tRGF0YS5nZXQodGhpcy5jdXJyZW50S2VybmVsSWQpO1xuICAgIGlmICghZGF0YSkge1xuICAgICAgZGF0YSA9IHt9O1xuICAgICAgdGhpcy5rZXJuZWxDdXN0b21EYXRhLnNldCh0aGlzLmN1cnJlbnRLZXJuZWxJZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvLyBLZXJuZWxJRCAtPiBrZXJuZWxJbmZvIG1hcHBpbmdcbiAga2VybmVsczogTWFwPG51bWJlciwgS2VybmVsSW5mbz47XG4gIHByaXZhdGUgY29tbWFuZEVuY29kZXI6IEdQVUNvbW1hbmRFbmNvZGVyfG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbXB1dGVQYXNzRW5jb2RlcjogR1BVQ29tcHV0ZVBhc3NFbmNvZGVyfG51bGwgPSBudWxsO1xuICBtYXhEaXNwYXRjaE51bWJlciA9IDE2O1xuICBwZW5kaW5nRGlzcGF0Y2hOdW1iZXIgPSAwO1xuXG4gIC8vIGluZm8gb2Yga2VybmVscyBwZW5kaW5nIHN1Ym1pc3Npb24gZm9yIGEgc2luZ2xlIGJhdGNoXG4gIHByaXZhdGUgcGVuZGluZ0tlcm5lbHM6IFBlbmRpbmdLZXJuZWxJbmZvW10gPSBbXTtcbiAgLy8gcXVlcnlSZWFkQnVmZmVyIC0+IHBlbmRpbmdLZXJuZWxzIG1hcHBpbmcgZm9yIGFsbCB0aGUgYmF0Y2hlc1xuICBwcml2YXRlIHBlbmRpbmdRdWVyaWVzOiBNYXA8R1BVQnVmZmVyLCBQZW5kaW5nS2VybmVsSW5mb1tdPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBxdWVyeVJlc29sdmVCdWZmZXI/OiBHUFVCdWZmZXI7XG4gIHByaXZhdGUgcXVlcnlTZXQ/OiBHUFVRdWVyeVNldDtcbiAgcHJpdmF0ZSBxdWVyeVRpbWVCYXNlPzogYmlnaW50O1xuICBxdWVyeVR5cGU6IFRpbWVzdGFtcFF1ZXJ5O1xuXG4gIGVudjogRW52O1xuICBzZXNzaW9uU3RhdHVzOiBTZXNzaW9uU3RhdGUgPSAnZGVmYXVsdCc7XG4gIC8qKlxuICAgKiBhIFNlc3Npb25JRCAtPiBDb21tYW5kSW5mb1tdIG1hcHBpbmcuIEl0J3MgdXNlZCB0byByZWNvcmQgYWxsIEdQVSBjb21tYW5kcyBmb3IgY29ycmVzcG9uZGluZyBzZXNzaW9uLlxuICAgKi9cbiAgY2FwdHVyZWRDb21tYW5kTGlzdDogTWFwPG51bWJlciwgQ29tbWFuZEluZm9bXT4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIGEgU2Vzc2lvbklEIC0+IFBlbmRpbmdLZXJuZWxJbmZvW10gbWFwcGluZyBmb3IgcHJvZmlsaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlZFBlbmRpbmdLZXJuZWxzOiBNYXA8bnVtYmVyLCBQZW5kaW5nS2VybmVsSW5mb1tdPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogYSBTZXNzaW9uSUQgLT4gYSBNYXAgb2YgKElucHV0T3V0cHV0SW5kZXggLT4gW0lELCBHUFVCdWZmZXJdKSBtYXBwaW5nLlxuICAgKi9cbiAgc2Vzc2lvbkV4dGVybmFsRGF0YU1hcHBpbmc6IE1hcDxudW1iZXIsIE1hcDxudW1iZXIsIFtudW1iZXIsIEdQVUJ1ZmZlcl0+PiA9IG5ldyBNYXAoKTtcblxuICBhc3luYyBpbml0aWFsaXplKGVudjogRW52LCBhZGFwdGVyOiBHUFVBZGFwdGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgY29uc3QgcmVxdWlyZWRGZWF0dXJlczogR1BVRmVhdHVyZU5hbWVbXSA9IFtdO1xuICAgIGNvbnN0IGRldmljZURlc2NyaXB0b3I6IEdQVURldmljZURlc2NyaXB0b3IgPSB7XG4gICAgICByZXF1aXJlZExpbWl0czoge1xuICAgICAgICBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemU6IGFkYXB0ZXIubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSxcbiAgICAgICAgbWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb246IGFkYXB0ZXIubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uLFxuICAgICAgICBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemU6IGFkYXB0ZXIubGltaXRzLm1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSxcbiAgICAgICAgbWF4QnVmZmVyU2l6ZTogYWRhcHRlci5saW1pdHMubWF4QnVmZmVyU2l6ZSxcbiAgICAgICAgbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwOiBhZGFwdGVyLmxpbWl0cy5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXAsXG4gICAgICAgIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWDogYWRhcHRlci5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVYLFxuICAgICAgICBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVk6IGFkYXB0ZXIubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSxcbiAgICAgICAgbWF4Q29tcHV0ZVdvcmtncm91cFNpemVaOiBhZGFwdGVyLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVosXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWRGZWF0dXJlcyxcbiAgICB9O1xuXG4gICAgaWYgKGFkYXB0ZXIuZmVhdHVyZXMuaGFzKCdjaHJvbWl1bS1leHBlcmltZW50YWwtdGltZXN0YW1wLXF1ZXJ5LWluc2lkZS1wYXNzZXMnKSkge1xuICAgICAgcmVxdWlyZWRGZWF0dXJlcy5wdXNoKCdjaHJvbWl1bS1leHBlcmltZW50YWwtdGltZXN0YW1wLXF1ZXJ5LWluc2lkZS1wYXNzZXMnIGFzIEdQVUZlYXR1cmVOYW1lKTtcbiAgICB9IGVsc2UgaWYgKGFkYXB0ZXIuZmVhdHVyZXMuaGFzKCd0aW1lc3RhbXAtcXVlcnknKSkge1xuICAgICAgcmVxdWlyZWRGZWF0dXJlcy5wdXNoKCd0aW1lc3RhbXAtcXVlcnknKTtcbiAgICB9XG4gICAgaWYgKGFkYXB0ZXIuZmVhdHVyZXMuaGFzKCdzaGFkZXItZjE2JykpIHtcbiAgICAgIHJlcXVpcmVkRmVhdHVyZXMucHVzaCgnc2hhZGVyLWYxNicpO1xuICAgIH1cblxuICAgIHRoaXMuZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKGRldmljZURlc2NyaXB0b3IpO1xuICAgIHRoaXMuYWRhcHRlckluZm8gPSBuZXcgQWRhcHRlckluZm9JbXBsKGF3YWl0IGFkYXB0ZXIucmVxdWVzdEFkYXB0ZXJJbmZvKCkpO1xuICAgIHRoaXMuZ3B1RGF0YU1hbmFnZXIgPSBjcmVhdGVHcHVEYXRhTWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLnByb2dyYW1NYW5hZ2VyID0gbmV3IFByb2dyYW1NYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMua2VybmVscyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmtlcm5lbFBlcnNpc3RlbnREYXRhID0gbmV3IE1hcCgpO1xuICAgIHRoaXMua2VybmVsQ3VzdG9tRGF0YSA9IG5ldyBNYXAoKTtcblxuICAgIC8vIHNldCB1cCBmbGFncyBmb3IgbG9nZ2VyXG4gICAgY29uZmlndXJlTG9nZ2VyKGVudi5sb2dMZXZlbCEsICEhZW52LmRlYnVnKTtcblxuICAgIC8vIFRPRE86IHNldCB1cCBmbGFnc1xuXG4gICAgdGhpcy5kZXZpY2Uub251bmNhcHR1cmVkZXJyb3IgPSBldiA9PiB7XG4gICAgICBpZiAoZXYuZXJyb3IgaW5zdGFuY2VvZiBHUFVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihgQW4gdW5jYXVnaHQgV2ViR1BVIHZhbGlkYXRpb24gZXJyb3Igd2FzIHJhaXNlZDogJHtldi5lcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIHRoaXMuZW52LndlYmdwdSwgJ2RldmljZScsIHt2YWx1ZTogdGhpcy5kZXZpY2UsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgdGhpcy5lbnYud2ViZ3B1LCAnYWRhcHRlcicsIHt2YWx1ZTogYWRhcHRlciwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XG5cbiAgICAvLyBpbml0IHF1ZXJ5VHlwZSwgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBJbmZlcmVuY2VTZXNzaW9uLmNyZWF0ZVxuICAgIHRoaXMuc2V0UXVlcnlUeXBlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5xdWVyeVNldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMucXVlcnlTZXQuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGdldENvbW1hbmRFbmNvZGVyKCk6IEdQVUNvbW1hbmRFbmNvZGVyIHtcbiAgICBpZiAoIXRoaXMuY29tbWFuZEVuY29kZXIpIHtcbiAgICAgIHRoaXMuY29tbWFuZEVuY29kZXIgPSB0aGlzLmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb21tYW5kRW5jb2RlcjtcbiAgfVxuXG4gIGdldENvbXB1dGVQYXNzRW5jb2RlcigpOiBHUFVDb21wdXRlUGFzc0VuY29kZXIge1xuICAgIGlmICghdGhpcy5jb21wdXRlUGFzc0VuY29kZXIpIHtcbiAgICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gdGhpcy5nZXRDb21tYW5kRW5jb2RlcigpO1xuICAgICAgY29uc3QgY29tcHV0ZVBhc3NEZXNjcmlwdG9yOiBHUFVDb21wdXRlUGFzc0Rlc2NyaXB0b3IgPSB7fTtcblxuICAgICAgaWYgKHRoaXMucXVlcnlUeXBlID09PSAnYXQtcGFzc2VzJykge1xuICAgICAgICBjb21wdXRlUGFzc0Rlc2NyaXB0b3IudGltZXN0YW1wV3JpdGVzID0ge1xuICAgICAgICAgIHF1ZXJ5U2V0OiB0aGlzLnF1ZXJ5U2V0ISxcbiAgICAgICAgICBiZWdpbm5pbmdPZlBhc3NXcml0ZUluZGV4OiB0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciAqIDIsXG4gICAgICAgICAgZW5kT2ZQYXNzV3JpdGVJbmRleDogdGhpcy5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyICsgMSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKGNvbXB1dGVQYXNzRGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbXB1dGVQYXNzRW5jb2RlcjtcbiAgfVxuXG4gIGVuZENvbXB1dGVQYXNzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbXB1dGVQYXNzRW5jb2Rlcikge1xuICAgICAgdGhpcy5jb21wdXRlUGFzc0VuY29kZXIuZW5kKCk7XG4gICAgICB0aGlzLmNvbXB1dGVQYXNzRW5jb2RlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbW1hbmRFbmNvZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgVFJBQ0VfRlVOQ19CRUdJTigpO1xuXG4gICAgdGhpcy5lbmRDb21wdXRlUGFzcygpO1xuICAgIGxldCBxdWVyeVJlYWRCdWZmZXI6IEdQVUJ1ZmZlcjtcbiAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09ICdub25lJykge1xuICAgICAgdGhpcy5jb21tYW5kRW5jb2Rlci5yZXNvbHZlUXVlcnlTZXQoXG4gICAgICAgICAgdGhpcy5xdWVyeVNldCEsIDAsIHRoaXMucGVuZGluZ0Rpc3BhdGNoTnVtYmVyICogMiwgdGhpcy5xdWVyeVJlc29sdmVCdWZmZXIhLCAwKTtcblxuICAgICAgcXVlcnlSZWFkQnVmZmVyID0gdGhpcy5kZXZpY2UuY3JlYXRlQnVmZmVyKFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAge3NpemU6IHRoaXMucGVuZGluZ0Rpc3BhdGNoTnVtYmVyICogMiAqIDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNUfSk7XG5cbiAgICAgIHRoaXMucGVuZGluZ1F1ZXJpZXMuc2V0KHF1ZXJ5UmVhZEJ1ZmZlciwgdGhpcy5wZW5kaW5nS2VybmVscyk7XG4gICAgICB0aGlzLnBlbmRpbmdLZXJuZWxzID0gW107XG4gICAgICB0aGlzLmNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihcbiAgICAgICAgICB0aGlzLnF1ZXJ5UmVzb2x2ZUJ1ZmZlciEsIDAsIHF1ZXJ5UmVhZEJ1ZmZlciwgMCwgdGhpcy5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyICogOCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXZpY2UucXVldWUuc3VibWl0KFt0aGlzLmNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7XG4gICAgdGhpcy5ncHVEYXRhTWFuYWdlci5yZWZyZXNoUGVuZGluZ0J1ZmZlcnMoKTtcbiAgICB0aGlzLmNvbW1hbmRFbmNvZGVyID0gbnVsbDtcbiAgICB0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciA9IDA7XG5cbiAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09ICdub25lJykge1xuICAgICAgdm9pZCBxdWVyeVJlYWRCdWZmZXIhLm1hcEFzeW5jKEdQVU1hcE1vZGUuUkVBRCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcHBlZERhdGEgPSBuZXcgQmlnVWludDY0QXJyYXkocXVlcnlSZWFkQnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xuICAgICAgICBjb25zdCBwZW5kaW5nS2VybmVscyA9IHRoaXMucGVuZGluZ1F1ZXJpZXMuZ2V0KHF1ZXJ5UmVhZEJ1ZmZlcikhO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcHBlZERhdGEubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcGVuZGluZ0tlcm5lbEluZm8gPSBwZW5kaW5nS2VybmVsc1tpXTtcbiAgICAgICAgICBjb25zdCBrZXJuZWxJZCA9IHBlbmRpbmdLZXJuZWxJbmZvLmtlcm5lbElkO1xuICAgICAgICAgIGNvbnN0IGtlcm5lbEluZm8gPSB0aGlzLmtlcm5lbHMuZ2V0KGtlcm5lbElkKSE7XG4gICAgICAgICAgY29uc3Qga2VybmVsVHlwZSA9IGtlcm5lbEluZm8ua2VybmVsVHlwZTtcbiAgICAgICAgICBjb25zdCBrZXJuZWxOYW1lID0ga2VybmVsSW5mby5rZXJuZWxOYW1lO1xuICAgICAgICAgIGNvbnN0IHByb2dyYW1OYW1lID0gcGVuZGluZ0tlcm5lbEluZm8ucHJvZ3JhbU5hbWU7XG4gICAgICAgICAgY29uc3QgaW5wdXRUZW5zb3JWaWV3cyA9IHBlbmRpbmdLZXJuZWxJbmZvLmlucHV0VGVuc29yVmlld3M7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0VGVuc29yVmlld3MgPSBwZW5kaW5nS2VybmVsSW5mby5vdXRwdXRUZW5zb3JWaWV3cztcbiAgICAgICAgICBjb25zdCBzdGFydFRpbWVVNjQgPSBtYXBwZWREYXRhW2kgKiAyXTtcbiAgICAgICAgICBjb25zdCBlbmRUaW1lVTY0ID0gbWFwcGVkRGF0YVtpICogMiArIDFdO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnF1ZXJ5VGltZUJhc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5VGltZUJhc2UgPSBzdGFydFRpbWVVNjQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gTnVtYmVyKHN0YXJ0VGltZVU2NCAtIHRoaXMucXVlcnlUaW1lQmFzZSk7XG4gICAgICAgICAgY29uc3QgZW5kVGltZSA9IE51bWJlcihlbmRUaW1lVTY0IC0gdGhpcy5xdWVyeVRpbWVCYXNlKTtcblxuICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoc3RhcnRUaW1lKSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIoZW5kVGltZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbmNvcnJlY3QgdGltZXN0YW1wIHJhbmdlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuZW52LndlYmdwdS5wcm9maWxpbmc/Lm9uZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lbnYud2ViZ3B1LnByb2ZpbGluZy5vbmRhdGEoe1xuICAgICAgICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICAgICAgICBpbnB1dHNNZXRhZGF0YTogaW5wdXRUZW5zb3JWaWV3cy5tYXAoXG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9PiAoe2RpbXM6IHZhbHVlLmRpbXMsIGRhdGFUeXBlOiB0ZW5zb3JEYXRhVHlwZUVudW1Ub1N0cmluZyh2YWx1ZS5kYXRhVHlwZSl9KSksXG4gICAgICAgICAgICAgIG91dHB1dHNNZXRhZGF0YTogb3V0cHV0VGVuc29yVmlld3MubWFwKFxuICAgICAgICAgICAgICAgICAgdmFsdWUgPT4gKHtkaW1zOiB2YWx1ZS5kaW1zLCBkYXRhVHlwZTogdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcodmFsdWUuZGF0YVR5cGUpfSkpLFxuICAgICAgICAgICAgICBrZXJuZWxJZCxcbiAgICAgICAgICAgICAga2VybmVsVHlwZSxcbiAgICAgICAgICAgICAga2VybmVsTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3JhbU5hbWUsXG4gICAgICAgICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgZW5kVGltZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiBubyBjYWxsYmFjayBpcyBwcm92aWRlZCwgcHJpbnQgdGhlIHByb2ZpbGluZyBtZXNzYWdlIHRvIGNvbnNvbGVcbiAgICAgICAgICAgIGxldCBpbnB1dFNoYXBlcyA9ICcnO1xuICAgICAgICAgICAgaW5wdXRUZW5zb3JWaWV3cy5mb3JFYWNoKCh2YWx1ZSwgaSkgPT4ge1xuICAgICAgICAgICAgICBpbnB1dFNoYXBlcyArPSBgaW5wdXRbJHtpfV06IFske3ZhbHVlLmRpbXN9XSB8ICR7dGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcodmFsdWUuZGF0YVR5cGUpfSwgYDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IG91dHB1dFNoYXBlcyA9ICcnO1xuICAgICAgICAgICAgb3V0cHV0VGVuc29yVmlld3MuZm9yRWFjaCgodmFsdWUsIGkpID0+IHtcbiAgICAgICAgICAgICAgb3V0cHV0U2hhcGVzICs9IGBvdXRwdXRbJHtpfV06IFske3ZhbHVlLmRpbXN9XSB8ICR7dGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcodmFsdWUuZGF0YVR5cGUpfSwgYDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbcHJvZmlsaW5nXSBrZXJuZWwgXCIke2tlcm5lbElkfXwke2tlcm5lbFR5cGV9fCR7a2VybmVsTmFtZX18JHtwcm9ncmFtTmFtZX1cIiAke2lucHV0U2hhcGVzfSR7XG4gICAgICAgICAgICAgICAgb3V0cHV0U2hhcGVzfWV4ZWN1dGlvbiB0aW1lOiAke2VuZFRpbWUgLSBzdGFydFRpbWV9IG5zYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFRSQUNFKCdHUFUnLCBgJHtwcm9ncmFtTmFtZX06OiR7c3RhcnRUaW1lVTY0fTo6JHtlbmRUaW1lVTY0fWApO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5UmVhZEJ1ZmZlci51bm1hcCgpO1xuICAgICAgICB0aGlzLnBlbmRpbmdRdWVyaWVzLmRlbGV0ZShxdWVyeVJlYWRCdWZmZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFRSQUNFX0ZVTkNfRU5EKCk7XG4gIH1cblxuICAvKipcbiAgICogcnVuIGEgV2ViR1BVIHByb2dyYW0uXG4gICAqIEBwYXJhbSBwcm9ncmFtIGEgUHJvZ3JhbUluZm8gaW5zdGFuY2VcbiAgICogQHBhcmFtIGlucHV0VGVuc29yVmlld3MgYSBUZW5zb3JWaWV3IGFycmF5LiBlYWNoIGVsZW1lbnQgcmVwcmVzZW50cyBhIHZhbHVlIGFscmVhZHkgZXhpc3RzIGluIEdQVS5cbiAgICogQHBhcmFtIG91dHB1dEluZGljZXMgYW4gaW5kaWNlcyBhcnJheS4gZWFjaCBlbGVtZW50IGNhbiBiZSBlaXRoZXIgLTEgKHRlbXBvcmFyeSBkYXRhKSwgLTIgKHBlcnNpc3RlbnQgZGF0YSkgb3IgYW5cbiAgICogaW5kZXggdG8gdGhlIGtlcm5lbCdzIG91dHB1dC5cbiAgICogQHBhcmFtIGNyZWF0ZUtlcm5lbE91dHB1dCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY3JlYXRlIGEgdmFsdWUgdG8ga2VybmVsJ3Mgb3V0cHV0IHdpdGggdGhlIGdpdmVuIGluZGV4XG4gICAqIEBwYXJhbSBjcmVhdGVJbnRlcm1lZGlhdGVPdXRwdXQgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNyZWF0ZSBhIHZhbHVlIGFzIGEgaW50ZXJtZWRpYXRlIHZhbHVlLCBlaXRoZXIgdGVtcG9yYXJ5XG4gICAqIG9yIHBlcnNpc3RlbnQgKG93bmVkIGJ5IHRoZSBjdXJyZW50IGtlcm5lbClcbiAgICogQHJldHVybnMgYSBUZW5zb3JWaWV3IGFycmF5IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICAgKi9cbiAgcnVuKHByb2dyYW06IFByb2dyYW1JbmZvLCBpbnB1dFRlbnNvclZpZXdzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIG91dHB1dEluZGljZXM6IHJlYWRvbmx5IG51bWJlcltdLFxuICAgICAgY3JlYXRlS2VybmVsT3V0cHV0OiAoaW5kZXg6IG51bWJlciwgZGF0YVR5cGU6IG51bWJlciwgZGltczogcmVhZG9ubHkgbnVtYmVyW10pID0+IFRlbnNvclZpZXcsXG4gICAgICBjcmVhdGVJbnRlcm1lZGlhdGVPdXRwdXQ6IChkYXRhVHlwZTogbnVtYmVyLCBkaW1zOiByZWFkb25seSBudW1iZXJbXSkgPT4gVGVuc29yVmlldyxcbiAgICAgIG91dHB1dENvdW50OiBudW1iZXIpOiBUZW5zb3JWaWV3W10ge1xuICAgIFRSQUNFX0ZVTkNfQkVHSU4ocHJvZ3JhbS5uYW1lKTtcbiAgICAvLyBjcmVhdGUgaW5mbyBmb3IgaW5wdXRzXG4gICAgY29uc3QgaW5wdXREYXRhczogR3B1RGF0YVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFRlbnNvclZpZXdzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBkYXRhID0gaW5wdXRUZW5zb3JWaWV3c1tpXS5kYXRhO1xuICAgICAgLy8gaWYgdGVuc29yIHZpZXcgZGF0YSBpcyAwLCBpdCBtZWFucyB0aGUgb3V0cHV0IGlzIHplcm8tc2l6ZWQgdGVuc29yLCBhbmQgdGhlcmUgaXMgbm8gR1BVIGRhdGEgZm9yIGl0LlxuICAgICAgaWYgKGRhdGEgPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBncHVEYXRhID0gdGhpcy5ncHVEYXRhTWFuYWdlci5nZXQoZGF0YSk7XG4gICAgICBpZiAoIWdwdURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBHUFUgZGF0YSBmb3IgaW5wdXQ6ICR7ZGF0YX1gKTtcbiAgICAgIH1cbiAgICAgIGlucHV0RGF0YXMucHVzaChncHVEYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCB7b3V0cHV0cywgZGlzcGF0Y2hHcm91cCwgcHJvZ3JhbVVuaWZvcm1zfSA9IHByb2dyYW0uZ2V0UnVuRGF0YShpbnB1dFRlbnNvclZpZXdzKTtcblxuICAgIC8vIGNoZWNrIG91dHB1dCBpbmRpY2VzXG4gICAgY29uc3QgdmFsaWRhdGVkT3V0cHV0SW5kaWNlcyA9IG91dHB1dEluZGljZXMubGVuZ3RoID09PSAwID8gb3V0cHV0cy5tYXAoKF8sIGkpID0+IGkpIDogb3V0cHV0SW5kaWNlcztcbiAgICBpZiAodmFsaWRhdGVkT3V0cHV0SW5kaWNlcy5sZW5ndGggIT09IG91dHB1dHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE91dHB1dCBzaXplICR7dmFsaWRhdGVkT3V0cHV0SW5kaWNlcy5sZW5ndGh9IG11c3QgYmUgZXF1YWwgdG8gJHtvdXRwdXRzLmxlbmd0aH0uYCk7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGluZm8gZm9yIG91dHB1dHNcbiAgICBjb25zdCBvdXRwdXRUZW5zb3JWaWV3czogVGVuc29yVmlld1tdID0gW107XG4gICAgY29uc3Qgb3V0cHV0RGF0YXM6IEdwdURhdGFbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0cy5sZW5ndGg7ICsraSkge1xuICAgICAgLy8gdmFsdWUgLTEgYW5kIC0yIGFyZSB1c2VkIGZvciBjcmVhdGluZyB0ZW1wb3JhcnkgYW5kIHBlcnNpc3RlbnQgb3V0cHV0cy5cbiAgICAgIC8vIHZhbHVlIC0zIGlzIHVzZWQgZm9yIHBsYWNlaG9sZGVyIG91dHB1dC4gU28gLTMsIC0yLCAtMSBhbmQgMCwgMSwgMiwgLi4uIGFyZSB2YWxpZFxuICAgICAgLy8gb3V0cHV0IGluZGljZXMuIHNlZSB0eXBlIGRlZmluaXRpb24gb2YgQ29tcHV0ZUNvbnRleHRJbnB1dHNPdXRwdXRzTWFwcGluZyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0pIHx8IHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPCAtMyB8fFxuICAgICAgICAgIHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPj0gb3V0cHV0Q291bnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG91dHB1dCBpbmRleDogJHt2YWxpZGF0ZWRPdXRwdXRJbmRpY2VzW2ldfWApO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPT09IC0zKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNUZW1wb3JhcnkgPSB2YWxpZGF0ZWRPdXRwdXRJbmRpY2VzW2ldID09PSAtMTtcbiAgICAgIGNvbnN0IGlzUGVyc2lzdGVudCA9IHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPT09IC0yO1xuICAgICAgY29uc3QgdGVuc29yVmlldyA9IChpc1RlbXBvcmFyeSB8fCBpc1BlcnNpc3RlbnQpID9cbiAgICAgICAgICBjcmVhdGVJbnRlcm1lZGlhdGVPdXRwdXQob3V0cHV0c1tpXS5kYXRhVHlwZSwgb3V0cHV0c1tpXS5kaW1zKSA6XG4gICAgICAgICAgY3JlYXRlS2VybmVsT3V0cHV0KHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0sIG91dHB1dHNbaV0uZGF0YVR5cGUsIG91dHB1dHNbaV0uZGltcyk7XG4gICAgICBvdXRwdXRUZW5zb3JWaWV3cy5wdXNoKHRlbnNvclZpZXcpO1xuICAgICAgLy8gaWYgdGVuc29yIHZpZXcgZGF0YSBpcyAwLCBpdCBtZWFucyB0aGUgb3V0cHV0IGlzIHplcm8tc2l6ZWQgdGVuc29yLCBhbmQgdGhlcmUgaXMgbm8gR1BVIGRhdGEgZm9yIGl0LlxuICAgICAgaWYgKHRlbnNvclZpZXcuZGF0YSA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdwdURhdGEgPSB0aGlzLmdwdURhdGFNYW5hZ2VyLmdldCh0ZW5zb3JWaWV3LmRhdGEpO1xuICAgICAgaWYgKCFncHVEYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gR1BVIGRhdGEgZm9yIG91dHB1dDogJHt0ZW5zb3JWaWV3LmRhdGF9YCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNUZW1wb3JhcnkpIHtcbiAgICAgICAgdGhpcy50ZW1wb3JhcnlEYXRhLnB1c2goZ3B1RGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNQZXJzaXN0ZW50KSB7XG4gICAgICAgIGxldCBwZXJzaXN0ZW50RGF0YSA9IHRoaXMua2VybmVsUGVyc2lzdGVudERhdGEuZ2V0KHRoaXMuY3VycmVudEtlcm5lbElkISk7XG4gICAgICAgIGlmICghcGVyc2lzdGVudERhdGEpIHtcbiAgICAgICAgICBwZXJzaXN0ZW50RGF0YSA9IFtdO1xuICAgICAgICAgIHRoaXMua2VybmVsUGVyc2lzdGVudERhdGEuc2V0KHRoaXMuY3VycmVudEtlcm5lbElkISwgcGVyc2lzdGVudERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHBlcnNpc3RlbnREYXRhLnB1c2goZ3B1RGF0YSk7XG4gICAgICB9XG4gICAgICBvdXRwdXREYXRhcy5wdXNoKGdwdURhdGEpO1xuICAgIH1cblxuICAgIC8vIHdoZW4gdGhlcmUgYXJlIGFueSB6ZXJvLXNpemVkIHRlbnNvciBpbiB0aGUgaW5wdXRzIG9yIG91dHB1dHMsIHdlIHNob3VsZCByZXBvcnQgZXJyb3IgdW5sZXNzIGFsbCBvdXRwdXRzIGFyZVxuICAgIC8vIHplcm8tc2l6ZWQgdGVuc29ycy5cbiAgICBpZiAoaW5wdXREYXRhcy5sZW5ndGggIT09IGlucHV0VGVuc29yVmlld3MubGVuZ3RoIHx8IG91dHB1dERhdGFzLmxlbmd0aCAhPT0gb3V0cHV0VGVuc29yVmlld3MubGVuZ3RoKSB7XG4gICAgICAvLyBpZiBhbGwgb3V0cHV0cyBhcmUgemVyby1zaXplZCB0ZW5zb3JzLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJ1biB0aGUgcHJvZ3JhbS5cbiAgICAgIGlmIChvdXRwdXREYXRhcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgVFJBQ0VfRlVOQ19FTkQocHJvZ3JhbS5uYW1lKTtcbiAgICAgICAgcmV0dXJuIG91dHB1dFRlbnNvclZpZXdzO1xuICAgICAgfVxuICAgICAgLy8gaWYgc29tZSBvdXRwdXRzIGFyZSB6ZXJvLXNpemVkIHRlbnNvcnMsIHJlcG9ydCBhbiBlcnJvci5cbiAgICAgIC8vXG4gICAgICAvLyBUT0RPOiBzbyBmYXIgd2UgZG9uJ3Qgc2VlIGFueSB1c2UgY2FzZSB0aGF0IG91dHB1dHMgaW5jbHVkZSBib3RoIHplcm8tc2l6ZWQgdGVuc29ycyBhbmQgbm9uLXplcm8tc2l6ZWQgdGVuc29ycy5cbiAgICAgIC8vIElmIHdlIHNlZSBzdWNoIHVzZSBjYXNlLCB3ZSBuZWVkIHRvIG1ha2UgYSBjaGFuZ2UgaGVyZSB0byBzdXBwb3J0IGl0LlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQcm9ncmFtICR7cHJvZ3JhbS5uYW1lfSBoYXMgemVyby1zaXplZCB0ZW5zb3IocykgaW4gaW5wdXRzIG9yIG91dHB1dHMuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBub3cuYCk7XG4gICAgfVxuXG4gICAgLy8gbG9hZCB1bmlmb3Jtc1xuICAgIC8vIFRPRE86IGFkZCBjYWNoZSBmb3IgdW5pZm9ybSAoaXMgaXQgbmVjZXNzYXJ5PylcbiAgICAvL1xuICAgIGxldCB1bmlmb3JtQnVmZmVyQmluZGluZzogR1BVQmluZGluZ1Jlc291cmNlfHVuZGVmaW5lZDtcbiAgICBpZiAocHJvZ3JhbVVuaWZvcm1zKSB7XG4gICAgICBsZXQgY3VycmVudE9mZnNldCA9IDA7XG4gICAgICBjb25zdCBvZmZzZXRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICBwcm9ncmFtVW5pZm9ybXMuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHR5cGVvZiB2LmRhdGEgPT09ICdudW1iZXInID8gW3YuZGF0YV0gOiB2LmRhdGE7XG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvV0dTTC8jYWxpZ25vZlxuICAgICAgICBjb25zdCBzaXplT2ZFbGVtZW50ID0gdi50eXBlID09PSBEYXRhVHlwZS5mbG9hdDE2ID8gMiA6IDQ7XG4gICAgICAgIGxldCBzaXplT2ZWZWNPck1hdDtcbiAgICAgICAgbGV0IGJhc2VBbGlnbm1lbnQ7XG4gICAgICAgIGlmICh2LnR5cGUgPT09IERhdGFUeXBlLmZsb2F0MTYpIHtcbiAgICAgICAgICBiYXNlQWxpZ25tZW50ID0gZGF0YS5sZW5ndGggPiA0ID8gMTYgOiAoZGF0YS5sZW5ndGggPiAyID8gOCA6IGRhdGEubGVuZ3RoICogc2l6ZU9mRWxlbWVudCk7XG4gICAgICAgICAgc2l6ZU9mVmVjT3JNYXQgPSBkYXRhLmxlbmd0aCA+IDQgPyAxNiA6IHNpemVPZkVsZW1lbnQgKiBkYXRhLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYXNlQWxpZ25tZW50ID0gZGF0YS5sZW5ndGggPD0gMiA/IGRhdGEubGVuZ3RoICogc2l6ZU9mRWxlbWVudCA6IDE2O1xuICAgICAgICAgIHNpemVPZlZlY09yTWF0ID0gMTY7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudE9mZnNldCA9IE1hdGguY2VpbChjdXJyZW50T2Zmc2V0IC8gYmFzZUFsaWdubWVudCkgKiBiYXNlQWxpZ25tZW50O1xuICAgICAgICBvZmZzZXRzLnB1c2goY3VycmVudE9mZnNldCk7XG4gICAgICAgIC8vIEZvciBub24tZmxvYXQxNiB0eXBlLCB3aGVuIGRhdGEubGVuZ3RoID4gNCwgdGhlIHVuaWZvcm0gdmFyaWFibGUgaXMgb2YgdHlwZSBhcnJheTx2ZWM0PGkzMnx1MzJ8ZjMyPixOPiwgd2hlcmVcbiAgICAgICAgLy8gTiA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQpIGFuZCBTaXplT2YodmVjNDxpMzJ8dTMyfGYzMj4pID0gMTYuIFRoZSB0b3RhbCBieXRlIGxlbmd0aCBpcyBOICpcbiAgICAgICAgLy8gU2l6ZU9mKHZlYzQ8aTMyfHUzMnxmMzI+KS4gRm9yIGZsb2F0MTYgdHlwZSwgd2hlbiBkYXRhLmxlbmd0aCA+IDQsIHRoZSB1bmlmb3JtIHZhcmlhYmxlIGlzIG9mIHR5cGVcbiAgICAgICAgLy8gYXJyYXk8bWF0Mng0PGYxNj4sTj4sIHdoZXJlIE4gPSBNYXRoLmNlaWwoZGF0YS5sZW5ndGggLyA4KSBhbmQgU2l6ZU9mKG1hdDJ4NDxmMTY+KSA9IDE2LiBUaGUgdG90YWwgYnl0ZVxuICAgICAgICAvLyBsZW5ndGggaXMgTiAqIFNpemVPZihtYXQyeDQ8ZjE2PikuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRQZXJWZWNPck1hdCA9IHYudHlwZSA9PT0gRGF0YVR5cGUuZmxvYXQxNiA/IDggOiA0O1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGRhdGEubGVuZ3RoID4gNCA/IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIGVsZW1lbnRQZXJWZWNPck1hdCkgKiBzaXplT2ZWZWNPck1hdCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5sZW5ndGggKiBzaXplT2ZFbGVtZW50O1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1lZXQgYWxpZ25tZW50IG9mIHN0cnVjdCBoZXJlOiBodHRwczovL3d3dy53My5vcmcvVFIvV0dTTC8jYWxpZ25tZW50LWFuZC1zaXplLiBGb3Igc2ltcGxpY2l0eSwgc2V0XG4gICAgICAvLyBtYXhBbGlnbm1lbnRPZkZpZWxkIHRvIDE2IHNpbmNlIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBoYXMgYmVlbiByb3VuZGVkIHVwIHRvIDE2LlxuICAgICAgY29uc3QgbWF4QWxpZ25tZW50T2ZGaWVsZCA9IDE2O1xuICAgICAgY3VycmVudE9mZnNldCA9IE1hdGguY2VpbChjdXJyZW50T2Zmc2V0IC8gbWF4QWxpZ25tZW50T2ZGaWVsZCkgKiBtYXhBbGlnbm1lbnRPZkZpZWxkO1xuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoY3VycmVudE9mZnNldCk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBvZmZzZXRzW2ldO1xuICAgICAgICBjb25zdCBkYXRhID0gdHlwZW9mIHYuZGF0YSA9PT0gJ251bWJlcicgPyBbdi5kYXRhXSA6IHYuZGF0YTtcbiAgICAgICAgaWYgKHYudHlwZSA9PT0gRGF0YVR5cGUuaW50MzIpIHtcbiAgICAgICAgICBuZXcgSW50MzJBcnJheShhcnJheUJ1ZmZlciwgb2Zmc2V0LCBkYXRhLmxlbmd0aCkuc2V0KGRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKHYudHlwZSA9PT0gRGF0YVR5cGUudWludDMyKSB7XG4gICAgICAgICAgbmV3IFVpbnQzMkFycmF5KGFycmF5QnVmZmVyLCBvZmZzZXQsIGRhdGEubGVuZ3RoKS5zZXQoZGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAodi50eXBlID09PSBEYXRhVHlwZS5mbG9hdDE2KSB7XG4gICAgICAgICAgLy8gVE9ETzogdXNlIEZsb2F0MTZBcnJheS5cbiAgICAgICAgICBuZXcgVWludDE2QXJyYXkoYXJyYXlCdWZmZXIsIG9mZnNldCwgZGF0YS5sZW5ndGgpLnNldChkYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmICh2LnR5cGUgPT09IERhdGFUeXBlLmZsb2F0KSB7XG4gICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShhcnJheUJ1ZmZlciwgb2Zmc2V0LCBkYXRhLmxlbmd0aCkuc2V0KGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdW5pZm9ybSB0eXBlOiAke3RlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nKHYudHlwZSl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB1bmlmb3JtQnVmZmVyRGF0YSA9XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLmNyZWF0ZShjdXJyZW50T2Zmc2V0LCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0pO1xuICAgICAgdGhpcy5kZXZpY2UucXVldWUud3JpdGVCdWZmZXIodW5pZm9ybUJ1ZmZlckRhdGEuYnVmZmVyLCAwLCBhcnJheUJ1ZmZlciwgMCwgY3VycmVudE9mZnNldCk7XG4gICAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLnJlbGVhc2UodW5pZm9ybUJ1ZmZlckRhdGEuaWQpO1xuICAgICAgdW5pZm9ybUJ1ZmZlckJpbmRpbmcgPSB7b2Zmc2V0OiAwLCBzaXplOiBjdXJyZW50T2Zmc2V0LCBidWZmZXI6IHVuaWZvcm1CdWZmZXJEYXRhLmJ1ZmZlcn07XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZERpc3BhdGNoR3JvdXAgPSB0aGlzLnByb2dyYW1NYW5hZ2VyLm5vcm1hbGl6ZURpc3BhdGNoR3JvdXBTaXplKGRpc3BhdGNoR3JvdXApO1xuICAgIGNvbnN0IGlzMURpbWVuc2lvbkRpc3BhdGNoID0gbm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMV0gPT09IDEgJiYgbm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMl0gPT09IDE7XG4gICAgLy8gZ2V0IHByb2dyYW0gaW5mb1xuICAgIGNvbnN0IGtleSA9IGdldFByb2dyYW1JbmZvVW5pcXVlS2V5KHByb2dyYW0sIGlucHV0VGVuc29yVmlld3MsIGlzMURpbWVuc2lvbkRpc3BhdGNoKTtcbiAgICBsZXQgYXJ0aWZhY3QgPSB0aGlzLnByb2dyYW1NYW5hZ2VyLmdldEFydGlmYWN0KGtleSk7XG4gICAgaWYgKCFhcnRpZmFjdCkge1xuICAgICAgYXJ0aWZhY3QgPSB0aGlzLnByb2dyYW1NYW5hZ2VyLmJ1aWxkKHByb2dyYW0sIG5vcm1hbGl6ZWREaXNwYXRjaEdyb3VwKTtcbiAgICAgIHRoaXMucHJvZ3JhbU1hbmFnZXIuc2V0QXJ0aWZhY3Qoa2V5LCBhcnRpZmFjdCk7XG4gICAgICBMT0dfREVCVUcoJ2luZm8nLCAoKSA9PiBgW2FydGlmYWN0XSBrZXk6ICR7a2V5fSwgcHJvZ3JhbU5hbWU6ICR7cHJvZ3JhbS5uYW1lfWApO1xuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIHVuaWZvcm0gdmFyaWFibGVzXG4gICAgaWYgKHByb2dyYW1Vbmlmb3JtcyAmJiBhcnRpZmFjdC51bmlmb3JtVmFyaWFibGVzSW5mbykge1xuICAgICAgaWYgKHByb2dyYW1Vbmlmb3Jtcy5sZW5ndGggIT09IGFydGlmYWN0LnVuaWZvcm1WYXJpYWJsZXNJbmZvLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaWZvcm0gdmFyaWFibGVzIGNvdW50IG1pc21hdGNoOiBleHBlY3QgJHthcnRpZmFjdC51bmlmb3JtVmFyaWFibGVzSW5mby5sZW5ndGh9LCBnb3QgJHtcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5sZW5ndGh9IGluIHByb2dyYW0gXCIke2FydGlmYWN0LnByb2dyYW1JbmZvLm5hbWV9XCIuYCk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2dyYW1Vbmlmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB1bmlmb3JtID0gcHJvZ3JhbVVuaWZvcm1zW2ldO1xuICAgICAgICBjb25zdCBhY3R1YWxUeXBlID0gdW5pZm9ybS50eXBlO1xuICAgICAgICBjb25zdCBhY3R1YWxMZW5ndGggPSB0eXBlb2YgdW5pZm9ybS5kYXRhID09PSAnbnVtYmVyJyA/IDEgOiB1bmlmb3JtLmRhdGEubGVuZ3RoO1xuICAgICAgICBjb25zdCBbdHlwZSwgbGVuZ3RoXSA9IGFydGlmYWN0LnVuaWZvcm1WYXJpYWJsZXNJbmZvW2ldO1xuICAgICAgICBpZiAoYWN0dWFsVHlwZSAhPT0gdHlwZSB8fCBhY3R1YWxMZW5ndGggIT09IGxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pZm9ybSB2YXJpYWJsZSAke2l9IG1pc21hdGNoOiBleHBlY3QgdHlwZSAke3R5cGV9IHdpdGggc2l6ZSAke2xlbmd0aH0sIGdvdCB0eXBlICR7XG4gICAgICAgICAgICAgIGFjdHVhbFR5cGV9IHdpdGggc2l6ZSAke2FjdHVhbExlbmd0aH0gaW4gcHJvZ3JhbSBcIiR7YXJ0aWZhY3QucHJvZ3JhbUluZm8ubmFtZX1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIExPR19ERUJVRyhcbiAgICAgICAgJ2luZm8nLFxuICAgICAgICAoKSA9PiBgW1Byb2dyYW1NYW5hZ2VyXSBydW4gXCIke3Byb2dyYW0ubmFtZX1cIiAoa2V5PSR7a2V5fSkgd2l0aCAke25vcm1hbGl6ZWREaXNwYXRjaEdyb3VwWzBdfXgke1xuICAgICAgICAgICAgbm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMV19eCR7bm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMl19YCk7XG5cbiAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09ICdub25lJyB8fCB0aGlzLnNlc3Npb25TdGF0dXMgPT09ICdjYXB0dXJpbmcnKSB7XG4gICAgICBjb25zdCBwZW5kaW5nS2VybmVsSW5mbzogUGVuZGluZ0tlcm5lbEluZm8gPSB7XG4gICAgICAgIGtlcm5lbElkOiB0aGlzLmN1cnJlbnRLZXJuZWxJZCEsXG4gICAgICAgIHByb2dyYW1OYW1lOiBhcnRpZmFjdC5wcm9ncmFtSW5mby5uYW1lLFxuICAgICAgICBpbnB1dFRlbnNvclZpZXdzLFxuICAgICAgICBvdXRwdXRUZW5zb3JWaWV3cyxcbiAgICAgIH07XG4gICAgICB0aGlzLnBlbmRpbmdLZXJuZWxzLnB1c2gocGVuZGluZ0tlcm5lbEluZm8pO1xuXG4gICAgICBpZiAodGhpcy5zZXNzaW9uU3RhdHVzID09PSAnY2FwdHVyaW5nJykge1xuICAgICAgICBjb25zdCBzZXNzaW9uUGVuZGluZ0tlcm5lbHMgPSB0aGlzLmNhcHR1cmVkUGVuZGluZ0tlcm5lbHMuZ2V0KHRoaXMuY3VycmVudFNlc3Npb25JZCEpO1xuICAgICAgICBzZXNzaW9uUGVuZGluZ0tlcm5lbHMhLnB1c2gocGVuZGluZ0tlcm5lbEluZm8pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJvZ3JhbU1hbmFnZXIucnVuKGFydGlmYWN0LCBpbnB1dERhdGFzLCBvdXRwdXREYXRhcywgbm9ybWFsaXplZERpc3BhdGNoR3JvdXAsIHVuaWZvcm1CdWZmZXJCaW5kaW5nKTtcblxuICAgIFRSQUNFX0ZVTkNfRU5EKHByb2dyYW0ubmFtZSk7XG4gICAgcmV0dXJuIG91dHB1dFRlbnNvclZpZXdzO1xuICB9XG5cbiAgdXBsb2FkKGdwdURhdGFJZDogbnVtYmVyLCBkYXRhOiBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgdGhpcy5ncHVEYXRhTWFuYWdlci51cGxvYWQoZ3B1RGF0YUlkLCBkYXRhKTtcbiAgfVxuXG4gIG1lbWNweShzcmM6IG51bWJlciwgZHN0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLm1lbWNweShzcmMsIGRzdCk7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChncHVEYXRhSWQ6IG51bWJlciwgZ2V0VGFyZ2V0QnVmZmVyOiAoKSA9PiBVaW50OEFycmF5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gdGhlIHVuZGVybHlpbmcgYnVmZmVyIG1heSBiZSBjaGFuZ2VkIGFmdGVyIHRoZSBhc3luYyBmdW5jdGlvbiBpcyBjYWxsZWQuIHNvIHdlIHVzZSBhIGdldHRlciBmdW5jdGlvbiB0byBtYWtlIHN1cmVcbiAgICAvLyB0aGUgYnVmZmVyIGlzIHVwLXRvLWRhdGUuXG4gICAgYXdhaXQgdGhpcy5ncHVEYXRhTWFuYWdlci5kb3dubG9hZChncHVEYXRhSWQsIGdldFRhcmdldEJ1ZmZlcik7XG4gIH1cblxuICBhbGxvYyhzaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdwdURhdGFNYW5hZ2VyLmNyZWF0ZShzaXplKS5pZDtcbiAgfVxuXG4gIGZyZWUocHRyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdwdURhdGFNYW5hZ2VyLnJlbGVhc2UocHRyKTtcbiAgfVxuXG4gIGNyZWF0ZUtlcm5lbChrZXJuZWxUeXBlOiBzdHJpbmcsIGtlcm5lbElkOiBudW1iZXIsIGF0dHJpYnV0ZTogdW5rbm93biwga2VybmVsTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3AgPSBXRUJHUFVfT1BfUkVTT0xWRV9SVUxFUy5nZXQoa2VybmVsVHlwZSk7XG4gICAgaWYgKCFvcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXJuZWwgbm90IGltcGxlbWVudGVkOiAke2tlcm5lbFR5cGV9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qga2VybmVsSW5mbzogS2VybmVsSW5mbyA9IHtcbiAgICAgIGtlcm5lbFR5cGUsXG4gICAgICBrZXJuZWxOYW1lLFxuICAgICAga2VybmVsRW50cnk6IG9wWzBdLFxuICAgICAgYXR0cmlidXRlczogW29wWzFdLCBhdHRyaWJ1dGVdLFxuICAgIH07XG4gICAgdGhpcy5rZXJuZWxzLnNldChrZXJuZWxJZCwga2VybmVsSW5mbyk7XG4gIH1cblxuICByZWxlYXNlS2VybmVsKGtlcm5lbElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwZXJzaXN0ZW50RGF0YSA9IHRoaXMua2VybmVsUGVyc2lzdGVudERhdGEuZ2V0KGtlcm5lbElkKTtcbiAgICBpZiAocGVyc2lzdGVudERhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgZGF0YSBvZiBwZXJzaXN0ZW50RGF0YSkge1xuICAgICAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLnJlbGVhc2UoZGF0YS5pZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmtlcm5lbFBlcnNpc3RlbnREYXRhLmRlbGV0ZShrZXJuZWxJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXJuZWxDdXN0b21EYXRhLmRlbGV0ZShrZXJuZWxJZCk7XG4gICAgdGhpcy5rZXJuZWxzLmRlbGV0ZShrZXJuZWxJZCk7XG4gIH1cblxuICBjb21wdXRlS2VybmVsKGtlcm5lbElkOiBudW1iZXIsIGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBlcnJvcnM6IEFycmF5PFByb21pc2U8c3RyaW5nfG51bGw+Pik6IG51bWJlciB7XG4gICAgY29uc3Qga2VybmVsID0gdGhpcy5rZXJuZWxzLmdldChrZXJuZWxJZCk7XG4gICAgaWYgKCFrZXJuZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihga2VybmVsIG5vdCBjcmVhdGVkOiAke2tlcm5lbElkfWApO1xuICAgIH1cbiAgICBjb25zdCBrZXJuZWxUeXBlID0ga2VybmVsLmtlcm5lbFR5cGU7XG4gICAgY29uc3Qga2VybmVsTmFtZSA9IGtlcm5lbC5rZXJuZWxOYW1lO1xuICAgIGNvbnN0IGtlcm5lbEVudHJ5ID0ga2VybmVsLmtlcm5lbEVudHJ5O1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBrZXJuZWwuYXR0cmlidXRlcztcbiAgICBpZiAodGhpcy5jdXJyZW50S2VybmVsSWQgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihga2VybmVsIFwiWyR7a2VybmVsVHlwZX1dICR7a2VybmVsTmFtZX1cIiBpcyBub3QgYWxsb3dlZCB0byBiZSBjYWxsZWQgcmVjdXJzaXZlbHlgKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50S2VybmVsSWQgPSBrZXJuZWxJZDtcblxuICAgIC8vIHBhcnNlIGF0dHJpYnV0ZXMgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKGF0dHJpYnV0ZXNbMF0pIHtcbiAgICAgIGF0dHJpYnV0ZXNbMV0gPSBhdHRyaWJ1dGVzWzBdKGF0dHJpYnV0ZXNbMV0pO1xuICAgICAgYXR0cmlidXRlc1swXSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBMT0dfREVCVUcoJ2luZm8nLCAoKSA9PiBgW1dlYkdQVV0gU3RhcnQgdG8gcnVuIGtlcm5lbCBcIlske2tlcm5lbFR5cGV9XSAke2tlcm5lbE5hbWV9XCIuLi5gKTtcblxuICAgIGNvbnN0IHVzZUVycm9yU2NvcGUgPSB0aGlzLmVudi5kZWJ1ZztcblxuICAgIHRoaXMudGVtcG9yYXJ5RGF0YSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBpZiAodXNlRXJyb3JTY29wZSkge1xuICAgICAgICB0aGlzLmRldmljZS5wdXNoRXJyb3JTY29wZSgndmFsaWRhdGlvbicpO1xuICAgICAgfVxuXG4gICAgICBrZXJuZWxFbnRyeShjb250ZXh0LCBhdHRyaWJ1dGVzWzFdKTtcbiAgICAgIHJldHVybiAwOyAgLy8gT1JUX09LXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JzLnB1c2goUHJvbWlzZS5yZXNvbHZlKGBbV2ViR1BVXSBLZXJuZWwgXCJbJHtrZXJuZWxUeXBlfV0gJHtrZXJuZWxOYW1lfVwiIGZhaWxlZC4gJHtlfWApKTtcbiAgICAgIHJldHVybiAxOyAgLy8gT1JUX0ZBSUxcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHVzZUVycm9yU2NvcGUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2godGhpcy5kZXZpY2UucG9wRXJyb3JTY29wZSgpLnRoZW4oXG4gICAgICAgICAgICBlcnIgPT4gZXJyID8gYEdQVSB2YWxpZGF0aW9uIGVycm9yIGZvciBrZXJuZWwgXCJbJHtrZXJuZWxUeXBlfV0gJHtrZXJuZWxOYW1lfVwiOiAke2Vyci5tZXNzYWdlfWAgOiBudWxsKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZGF0YSBvZiB0aGlzLnRlbXBvcmFyeURhdGEpIHtcbiAgICAgICAgdGhpcy5ncHVEYXRhTWFuYWdlci5yZWxlYXNlKGRhdGEuaWQpO1xuICAgICAgfVxuICAgICAgdGhpcy50ZW1wb3JhcnlEYXRhID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRLZXJuZWxJZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gI3JlZ2lvbiBleHRlcm5hbCBidWZmZXJcbiAgcmVnaXN0ZXJCdWZmZXIoc2Vzc2lvbklkOiBudW1iZXIsIGluZGV4OiBudW1iZXIsIGJ1ZmZlcjogR1BVQnVmZmVyLCBzaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBzZXNzaW9uSW5wdXRPdXRwdXRNYXBwaW5nID0gdGhpcy5zZXNzaW9uRXh0ZXJuYWxEYXRhTWFwcGluZy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIXNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcpIHtcbiAgICAgIHNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcgPSBuZXcgTWFwKCk7XG4gICAgICB0aGlzLnNlc3Npb25FeHRlcm5hbERhdGFNYXBwaW5nLnNldChzZXNzaW9uSWQsIHNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcpO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzQnVmZmVyID0gc2Vzc2lvbklucHV0T3V0cHV0TWFwcGluZy5nZXQoaW5kZXgpO1xuICAgIGNvbnN0IGlkID0gdGhpcy5ncHVEYXRhTWFuYWdlci5yZWdpc3RlckV4dGVybmFsQnVmZmVyKGJ1ZmZlciwgc2l6ZSwgcHJldmlvdXNCdWZmZXI/LlsxXSk7XG4gICAgc2Vzc2lvbklucHV0T3V0cHV0TWFwcGluZy5zZXQoaW5kZXgsIFtpZCwgYnVmZmVyXSk7XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIHVucmVnaXN0ZXJCdWZmZXJzKHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc2Vzc2lvbklucHV0T3V0cHV0TWFwcGluZyA9IHRoaXMuc2Vzc2lvbkV4dGVybmFsRGF0YU1hcHBpbmcuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKHNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcpIHtcbiAgICAgIHNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcuZm9yRWFjaChidWZmZXJJbmZvID0+IHRoaXMuZ3B1RGF0YU1hbmFnZXIudW5yZWdpc3RlckV4dGVybmFsQnVmZmVyKGJ1ZmZlckluZm9bMV0pKTtcbiAgICAgIHRoaXMuc2Vzc2lvbkV4dGVybmFsRGF0YU1hcHBpbmcuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgfVxuICB9XG4gIGdldEJ1ZmZlcihncHVEYXRhSWQ6IG51bWJlcik6IEdQVUJ1ZmZlciB7XG4gICAgY29uc3QgZ3B1RGF0YSA9IHRoaXMuZ3B1RGF0YU1hbmFnZXIuZ2V0KGdwdURhdGFJZCk7XG4gICAgaWYgKCFncHVEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIEdQVSBkYXRhIGZvciBidWZmZXI6ICR7Z3B1RGF0YUlkfWApO1xuICAgIH1cbiAgICByZXR1cm4gZ3B1RGF0YS5idWZmZXI7XG4gIH1cbiAgY3JlYXRlRG93bmxvYWRlcihncHVCdWZmZXI6IEdQVUJ1ZmZlciwgc2l6ZTogbnVtYmVyLCB0eXBlOiBUZW5zb3IuR3B1QnVmZmVyRGF0YVR5cGVzKTpcbiAgICAgICgpID0+IFByb21pc2U8VGVuc29yLkRhdGFUeXBlPiB7XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBkb3dubG9hZEdwdURhdGEodGhpcywgZ3B1QnVmZmVyLCBzaXplKTtcbiAgICAgIHJldHVybiBjcmVhdGVWaWV3KGRhdGEuYnVmZmVyLCB0eXBlKTtcbiAgICB9O1xuICB9XG4gIC8vICNlbmRyZWdpb25cbiAgd3JpdGVUaW1lc3RhbXAoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnF1ZXJ5VHlwZSAhPT0gJ2luc2lkZS1wYXNzZXMnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAodGhpcy5jb21wdXRlUGFzc0VuY29kZXIgYXMgYW55KS53cml0ZVRpbWVzdGFtcCh0aGlzLnF1ZXJ5U2V0LCBpbmRleCk7XG4gIH1cbiAgc2V0UXVlcnlUeXBlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlUeXBlID0gJ25vbmUnO1xuICAgIGlmICh0aGlzLmVudi53ZWJncHUucHJvZmlsaW5nPy5tb2RlID09PSAnZGVmYXVsdCcgfHxcbiAgICAgICAgKHR5cGVvZiB0aGlzLmVudi50cmFjZSA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmVudi53YXNtLnRyYWNlIDogdGhpcy5lbnYudHJhY2UpKSB7XG4gICAgICBpZiAodGhpcy5kZXZpY2UuZmVhdHVyZXMuaGFzKCdjaHJvbWl1bS1leHBlcmltZW50YWwtdGltZXN0YW1wLXF1ZXJ5LWluc2lkZS1wYXNzZXMnKSkge1xuICAgICAgICB0aGlzLnF1ZXJ5VHlwZSA9ICdpbnNpZGUtcGFzc2VzJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kZXZpY2UuZmVhdHVyZXMuaGFzKCd0aW1lc3RhbXAtcXVlcnknKSkge1xuICAgICAgICB0aGlzLnF1ZXJ5VHlwZSA9ICdhdC1wYXNzZXMnO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09ICdub25lJyAmJiB0eXBlb2YgdGhpcy5xdWVyeVNldCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5xdWVyeVNldCA9IHRoaXMuZGV2aWNlLmNyZWF0ZVF1ZXJ5U2V0KHtcbiAgICAgICAgICB0eXBlOiAndGltZXN0YW1wJyxcbiAgICAgICAgICBjb3VudDogdGhpcy5tYXhEaXNwYXRjaE51bWJlciAqIDIsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnF1ZXJ5UmVzb2x2ZUJ1ZmZlciA9IHRoaXMuZGV2aWNlLmNyZWF0ZUJ1ZmZlcihcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAgICB7c2l6ZTogdGhpcy5tYXhEaXNwYXRjaE51bWJlciAqIDIgKiA4LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfCBHUFVCdWZmZXJVc2FnZS5RVUVSWV9SRVNPTFZFfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FwdHVyZUJlZ2luKCk6IHZvaWQge1xuICAgIExPR19ERUJVRygnaW5mbycsICdjYXB0dXJlQmVnaW4nKTtcbiAgICBpZiAoIXRoaXMuY2FwdHVyZWRDb21tYW5kTGlzdC5nZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkISkpIHtcbiAgICAgIHRoaXMuY2FwdHVyZWRDb21tYW5kTGlzdC5zZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkISwgW10pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2FwdHVyZWRQZW5kaW5nS2VybmVscy5nZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkISkpIHtcbiAgICAgIHRoaXMuY2FwdHVyZWRQZW5kaW5nS2VybmVscy5zZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkISwgW10pO1xuICAgIH1cbiAgICAvLyBmbHVzaCB0aGUgbGVmdCBjb21tYW5kcyBiZWZvcmUgd2UgY2hhbmdlIHRoZSBzdGF0dXMuXG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9ICdjYXB0dXJpbmcnO1xuICB9XG4gIGNhcHR1cmVFbmQoKTogdm9pZCB7XG4gICAgTE9HX0RFQlVHKCdpbmZvJywgJ2NhcHR1cmVFbmQnKTtcbiAgICAvLyBmbHVzaCB0aGUgbGVmdCBjb21tYW5kcyBiZWZvcmUgd2UgY2hhbmdlIHRoZSBzdGF0dXMuXG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9ICdkZWZhdWx0JztcbiAgfVxuICByZXBsYXkoKTogdm9pZCB7XG4gICAgTE9HX0RFQlVHKCdpbmZvJywgJ3JlcGxheScpO1xuICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9ICdyZXBsYXlpbmcnO1xuICAgIGNvbnN0IHNlc3Npb25Db21tYW5kTGlzdCA9IHRoaXMuY2FwdHVyZWRDb21tYW5kTGlzdC5nZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkISk7XG4gICAgY29uc3Qgc2Vzc2lvblBlbmRpbmdLZXJuZWxzID0gdGhpcy5jYXB0dXJlZFBlbmRpbmdLZXJuZWxzLmdldCh0aGlzLmN1cnJlbnRTZXNzaW9uSWQhKTtcbiAgICBjb25zdCBsZW5ndGggPSBzZXNzaW9uQ29tbWFuZExpc3QhLmxlbmd0aDtcbiAgICB0aGlzLnBlbmRpbmdLZXJuZWxzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gdGhpcy5nZXRDb21wdXRlUGFzc0VuY29kZXIoKTtcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBzZXNzaW9uQ29tbWFuZExpc3QhW2ldO1xuICAgICAgdGhpcy53cml0ZVRpbWVzdGFtcCh0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciAqIDIpO1xuICAgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbW1hbmQuY29tcHV0ZVBpcGVsaW5lKTtcbiAgICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgY29tbWFuZC5iaW5kR3JvdXApO1xuICAgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoV29ya2dyb3VwcyguLi5jb21tYW5kLmRpc3BhdGNoR3JvdXApO1xuICAgICAgdGhpcy53cml0ZVRpbWVzdGFtcCh0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciAqIDIgKyAxKTtcbiAgICAgIHRoaXMucGVuZGluZ0Rpc3BhdGNoTnVtYmVyKys7XG4gICAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09ICdub25lJykge1xuICAgICAgICB0aGlzLnBlbmRpbmdLZXJuZWxzLnB1c2goc2Vzc2lvblBlbmRpbmdLZXJuZWxzIVtpXSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgPj0gdGhpcy5tYXhEaXNwYXRjaE51bWJlciB8fCB0aGlzLnF1ZXJ5VHlwZSA9PT0gJ2F0LXBhc3NlcycpIHtcbiAgICAgICAgdGhpcy5lbmRDb21wdXRlUGFzcygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucGVuZGluZ0Rpc3BhdGNoTnVtYmVyID49IHRoaXMubWF4RGlzcGF0Y2hOdW1iZXIpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmbHVzaCB0aGUgbGVmdCBjb21tYW5kcyBiZWZvcmUgd2UgY2hhbmdlIHRoZSBzdGF0dXMuXG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9ICdkZWZhdWx0JztcbiAgfVxuXG4gIG9uUmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnVucmVnaXN0ZXJCdWZmZXJzKHNlc3Npb25JZCk7XG4gICAgaWYgKHRoaXMuY2FwdHVyZWRDb21tYW5kTGlzdC5oYXMoc2Vzc2lvbklkKSkge1xuICAgICAgdGhpcy5jYXB0dXJlZENvbW1hbmRMaXN0LmRlbGV0ZShzZXNzaW9uSWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXB0dXJlZFBlbmRpbmdLZXJuZWxzLmhhcyhzZXNzaW9uSWQpKSB7XG4gICAgICB0aGlzLmNhcHR1cmVkUGVuZGluZ0tlcm5lbHMuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgfVxuICAgIHRoaXMuZ3B1RGF0YU1hbmFnZXIub25SZWxlYXNlU2Vzc2lvbihzZXNzaW9uSWQpO1xuICB9XG5cbiAgb25SdW5TdGFydChzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB0aGlzLnNldFF1ZXJ5VHlwZSgpO1xuICB9XG59XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RW52fSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge09ydFdhc21Nb2R1bGV9IGZyb20gJy4uL2JpbmRpbmcvb3J0LXdhc20nO1xuaW1wb3J0IHtEYXRhVHlwZSwgZ2V0VGVuc29yRWxlbWVudFNpemV9IGZyb20gJy4uL3dhc20tY29tbW9uJztcblxuaW1wb3J0IHtXZWJHcHVCYWNrZW5kfSBmcm9tICcuL2JhY2tlbmQtd2ViZ3B1JztcbmltcG9ydCB7TE9HX0RFQlVHfSBmcm9tICcuL2xvZyc7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge0FkYXB0ZXJJbmZvLCBDb21wdXRlQ29udGV4dCwgQ29tcHV0ZUNvbnRleHRJbnB1dHNPdXRwdXRzTWFwcGluZywgUHJvZ3JhbUluZm99IGZyb20gJy4vd2ViZ3B1L3R5cGVzJztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuXG5jbGFzcyBUZW5zb3JWaWV3SW1wbCBpbXBsZW1lbnRzIFRlbnNvclZpZXcge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgbW9kdWxlOiBPcnRXYXNtTW9kdWxlLCBwdWJsaWMgcmVhZG9ubHkgZGF0YVR5cGU6IG51bWJlciwgcHVibGljIHJlYWRvbmx5IGRhdGE6IG51bWJlcixcbiAgICAgIHB1YmxpYyByZWFkb25seSBkaW1zOiByZWFkb25seSBudW1iZXJbXSkge31cblxuICBnZXRGbG9hdDMyQXJyYXkoKTogRmxvYXQzMkFycmF5IHtcbiAgICBpZiAodGhpcy5kYXRhVHlwZSAhPT0gRGF0YVR5cGUuZmxvYXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhIHR5cGUnKTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudENvdW50ID0gU2hhcGVVdGlsLnNpemUodGhpcy5kaW1zKTtcbiAgICByZXR1cm4gZWxlbWVudENvdW50ID09PSAwID8gbmV3IEZsb2F0MzJBcnJheSgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheSh0aGlzLm1vZHVsZS5IRUFQOC5idWZmZXIsIHRoaXMuZGF0YSwgZWxlbWVudENvdW50KTtcbiAgfVxuXG4gIGdldEJpZ0ludDY0QXJyYXkoKTogQmlnSW50NjRBcnJheSB7XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgIT09IERhdGFUeXBlLmludDY0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YSB0eXBlJyk7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRDb3VudCA9IFNoYXBlVXRpbC5zaXplKHRoaXMuZGltcyk7XG4gICAgcmV0dXJuIGVsZW1lbnRDb3VudCA9PT0gMCA/IG5ldyBCaWdJbnQ2NEFycmF5KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnSW50NjRBcnJheSh0aGlzLm1vZHVsZS5IRUFQOC5idWZmZXIsIHRoaXMuZGF0YSwgZWxlbWVudENvdW50KTtcbiAgfVxuXG4gIGdldEludDMyQXJyYXkoKTogSW50MzJBcnJheSB7XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgIT09IERhdGFUeXBlLmludDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YSB0eXBlJyk7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRDb3VudCA9IFNoYXBlVXRpbC5zaXplKHRoaXMuZGltcyk7XG4gICAgcmV0dXJuIGVsZW1lbnRDb3VudCA9PT0gMCA/IG5ldyBJbnQzMkFycmF5KCkgOiBuZXcgSW50MzJBcnJheSh0aGlzLm1vZHVsZS5IRUFQOC5idWZmZXIsIHRoaXMuZGF0YSwgZWxlbWVudENvdW50KTtcbiAgfVxuXG4gIHJlc2hhcGUobmV3RGltczogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3JWaWV3IHtcbiAgICBpZiAoU2hhcGVVdGlsLnNpemUobmV3RGltcykgIT09IFNoYXBlVXRpbC5zaXplKHRoaXMuZGltcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBuZXcgc2hhcGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZW5zb3JWaWV3SW1wbCh0aGlzLm1vZHVsZSwgdGhpcy5kYXRhVHlwZSwgdGhpcy5kYXRhLCBuZXdEaW1zKTtcbiAgfVxufVxuXG5jbGFzcyBDb21wdXRlQ29udGV4dEltcGwgaW1wbGVtZW50cyBDb21wdXRlQ29udGV4dCB7XG4gIHJlYWRvbmx5IGFkYXB0ZXJJbmZvOiBBZGFwdGVySW5mbztcbiAgcmVhZG9ubHkgb3BLZXJuZWxDb250ZXh0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdO1xuICByZWFkb25seSBvdXRwdXRDb3VudDogbnVtYmVyO1xuICBnZXQga2VybmVsQ3VzdG9tRGF0YSgpOiB7W2tleTogc3RyaW5nXTogdW5rbm93bn0ge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuY3VycmVudEtlcm5lbEN1c3RvbURhdGE7XG4gIH1cbiAgZ2V0IGN1c3RvbURhdGFCdWZmZXIoKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMubW9kdWxlLkhFQVBVOC5zdWJhcnJheSh0aGlzLmN1c3RvbURhdGFPZmZzZXQsIHRoaXMuY3VzdG9tRGF0YU9mZnNldCArIHRoaXMuY3VzdG9tRGF0YVNpemUpO1xuICB9XG4gIHByaXZhdGUgY3VzdG9tRGF0YU9mZnNldCA9IDA7XG4gIHByaXZhdGUgY3VzdG9tRGF0YVNpemUgPSAwO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZHVsZTogT3J0V2FzbU1vZHVsZSwgcHJpdmF0ZSBiYWNrZW5kOiBXZWJHcHVCYWNrZW5kLCBjb250ZXh0RGF0YU9mZnNldDogbnVtYmVyKSB7XG4gICAgdGhpcy5hZGFwdGVySW5mbyA9IGJhY2tlbmQuYWRhcHRlckluZm87XG4gICAgY29uc3QgaGVhcFUzMiA9IG1vZHVsZS5IRUFQVTMyO1xuXG4gICAgLy8gZXh0cmFjdCBjb250ZXh0IGRhdGFcbiAgICBsZXQgZGF0YUluZGV4ID0gKGNvbnRleHREYXRhT2Zmc2V0ID4+PiAyKTtcbiAgICB0aGlzLm9wS2VybmVsQ29udGV4dCA9IGhlYXBVMzJbZGF0YUluZGV4KytdO1xuICAgIGNvbnN0IGlucHV0Q291bnQgPSBoZWFwVTMyW2RhdGFJbmRleCsrXTtcbiAgICB0aGlzLm91dHB1dENvdW50ID0gaGVhcFUzMltkYXRhSW5kZXgrK107XG4gICAgdGhpcy5jdXN0b21EYXRhT2Zmc2V0ID0gaGVhcFUzMltkYXRhSW5kZXgrK107XG4gICAgdGhpcy5jdXN0b21EYXRhU2l6ZSA9IGhlYXBVMzJbZGF0YUluZGV4KytdO1xuXG4gICAgY29uc3QgaW5wdXRzOiBUZW5zb3JWaWV3W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgZGF0YVR5cGUgPSBoZWFwVTMyW2RhdGFJbmRleCsrXTtcbiAgICAgIGNvbnN0IGRhdGEgPSBoZWFwVTMyW2RhdGFJbmRleCsrXTtcbiAgICAgIGNvbnN0IGRpbSA9IGhlYXBVMzJbZGF0YUluZGV4KytdO1xuICAgICAgY29uc3QgZGltczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgZGltcy5wdXNoKGhlYXBVMzJbZGF0YUluZGV4KytdKTtcbiAgICAgIH1cbiAgICAgIGlucHV0cy5wdXNoKG5ldyBUZW5zb3JWaWV3SW1wbChtb2R1bGUsIGRhdGFUeXBlLCBkYXRhLCBkaW1zKSk7XG4gICAgfVxuICAgIHRoaXMuaW5wdXRzID0gaW5wdXRzO1xuICB9XG5cbiAgZ2V0TWF4Q29tcHV0ZVdvcmtncm91cFNpemVzKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuYmFja2VuZC5kZXZpY2UubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCwgdGhpcy5iYWNrZW5kLmRldmljZS5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVZLFxuICAgICAgdGhpcy5iYWNrZW5kLmRldmljZS5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVaXG4gICAgXTtcbiAgfVxuXG4gIGdldE1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZGV2aWNlLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemU7XG4gIH1cblxuICBjb21wdXRlKHByb2dyYW06IFByb2dyYW1JbmZvLCBpbnB1dHNPdXRwdXRzTWFwcGluZz86IENvbXB1dGVDb250ZXh0SW5wdXRzT3V0cHV0c01hcHBpbmcpOiBUZW5zb3JWaWV3W10ge1xuICAgIC8vIHByZXBhcmUgaW5wdXRzLiBpbnB1dHMgc2hvdWxkIGFsd2F5cyBiZSB2YWxpZCBkYXRhLlxuICAgIGNvbnN0IG1hcHBlZElucHV0cyA9XG4gICAgICAgIGlucHV0c091dHB1dHNNYXBwaW5nPy5pbnB1dHM/Lm1hcChpID0+IHR5cGVvZiBpID09PSAnbnVtYmVyJyA/IHRoaXMuaW5wdXRzW2ldIDogaSkgPz8gdGhpcy5pbnB1dHM7XG4gICAgLy8gcHJlcGFyZSBvdXRwdXRzLlxuICAgIGNvbnN0IG91dHB1dEluZGljZXMgPSBpbnB1dHNPdXRwdXRzTWFwcGluZz8ub3V0cHV0cyA/PyBbXTtcbiAgICBjb25zdCBjcmVhdGVLZXJuZWxPdXRwdXQgPSAoaW5kZXg6IG51bWJlciwgZGF0YVR5cGU6IG51bWJlciwgZGltczogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3JWaWV3ID0+XG4gICAgICAgIG5ldyBUZW5zb3JWaWV3SW1wbCh0aGlzLm1vZHVsZSwgZGF0YVR5cGUsIHRoaXMub3V0cHV0KGluZGV4LCBkaW1zKSwgZGltcyk7XG4gICAgY29uc3QgY3JlYXRlVGVtcG9yYXJ5T3V0cHV0ID0gKGRhdGFUeXBlOiBudW1iZXIsIGRpbXM6IHJlYWRvbmx5IG51bWJlcltdKTogVGVuc29yVmlldyA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50U2l6ZSA9IGdldFRlbnNvckVsZW1lbnRTaXplKGRhdGFUeXBlKTtcbiAgICAgIGlmICghZWxlbWVudFNpemUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkYXRhIHR5cGU6ICR7ZGF0YVR5cGV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBidWZmZXJTaXplID0gZWxlbWVudFNpemUgKiBTaGFwZVV0aWwuc2l6ZShkaW1zKTtcbiAgICAgIGNvbnN0IGdwdURhdGFJZCA9IGJ1ZmZlclNpemUgPiAwID8gdGhpcy5iYWNrZW5kLmdwdURhdGFNYW5hZ2VyLmNyZWF0ZShidWZmZXJTaXplKS5pZCA6IDA7XG4gICAgICByZXR1cm4gbmV3IFRlbnNvclZpZXdJbXBsKHRoaXMubW9kdWxlLCBkYXRhVHlwZSwgZ3B1RGF0YUlkLCBkaW1zKTtcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucnVuKFxuICAgICAgICBwcm9ncmFtLCBtYXBwZWRJbnB1dHMsIG91dHB1dEluZGljZXMsIGNyZWF0ZUtlcm5lbE91dHB1dCwgY3JlYXRlVGVtcG9yYXJ5T3V0cHV0LCB0aGlzLm91dHB1dENvdW50KTtcbiAgfVxuXG4gIG91dHB1dChpbmRleDogbnVtYmVyLCBkaW1zOiByZWFkb25seSBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLm1vZHVsZS5zdGFja1NhdmUoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMubW9kdWxlLnN0YWNrQWxsb2MoKDEgKyBkaW1zLmxlbmd0aCkgKiA0IC8qIHNpemVvZihzaXplX3QpICovKTtcbiAgICAgIGxldCBvZmZzZXQgPSBkYXRhID4+IDI7XG4gICAgICB0aGlzLm1vZHVsZS5IRUFQVTMyW29mZnNldCsrXSA9IGRpbXMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMubW9kdWxlLkhFQVBVMzJbb2Zmc2V0KytdID0gZGltc1tpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm1vZHVsZS5fSnNlcE91dHB1dCEodGhpcy5vcEtlcm5lbENvbnRleHQsIGluZGV4LCBkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byBnZW5lcmF0ZSBrZXJuZWwncyBvdXRwdXRbJHtpbmRleH1dIHdpdGggZGltcyBbJHtkaW1zfV0uIGAgK1xuICAgICAgICAgICdJZiB5b3UgYXJlIHJ1bm5pbmcgd2l0aCBwcmUtYWxsb2NhdGVkIG91dHB1dCwgcGxlYXNlIG1ha2Ugc3VyZSB0aGUgb3V0cHV0IHR5cGUvZGltcyBhcmUgY29ycmVjdC4gJyArXG4gICAgICAgICAgYEVycm9yOiAke2V9YCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubW9kdWxlLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBKU0VQIHdpdGggV2ViR1BVIGJhY2tlbmQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgV2ViQXNzZW1ibHkgbW9kdWxlIGlzIGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQgKFwiX09ydEluaXRcIiBpcyBjYWxsZWQpLCBvbmNlIGZvclxuICogZWFjaCBvZiB0aGUgZm9sbG93aW5nIEVQcyBpZiB0aGV5IGFyZSBzcGVjaWZpZWQ6XG4gKiAtIFwid2ViZ3B1XCJcbiAqIC0gXCJ3ZWJublwiXG4gKlxuICogRm9yIFdlYkdQVSwgdGhpcyBmdW5jdGlvbiBleHBlY3RzOlxuICogIC0gV2ViR1BVIGlzIGVuYWJsZWQgaW4gYnVpbGQgKEJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgPT09IGZhbHNlKS5cbiAqICAtIFdlYkdQVSBpcyBhdmFpbGFibGUgaW4gY3VycmVudCBlbnZpcm9ubWVudC4gKGEgdmFsaWQgR1BVQWRhcHRlciBpcyBwYXNzZWQgaW4pXG4gKlxuICogRm9yIFdlYk5OLCB0aGlzIGZ1bmN0aW9uIGV4cGVjdHM6XG4gKiAtIFdlYk5OIGlzIGVuYWJsZWQgaW4gYnVpbGQgKEJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgPT09IGZhbHNlKS5cbiAqIC0gV2ViTk4gaXMgYXZhaWxhYmxlIGluIGN1cnJlbnQgZW52aXJvbm1lbnQuIChuYXZpZ2F0b3IubWwgaXMgbm90IHVuZGVmaW5lZClcbiAqXG4gKiBJZiB0aGUgV2ViQXNzZW1ibHkgbW9kdWxlIGlzIG5vdCBidWlsdCB3aXRoIEpTRVAgc3VwcG9ydCwgdGhpcyBmdW5jdGlvbiB3aWxsIHRocm93IGFuIGVycm9yLiBUaGlzIHdpbGwgaW52YWxpZGF0ZVxuICogJ3dlYmdwdScvJ3dlYm5uJyBiYWNrZW5kLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIEVQLCBlaXRoZXIgXCJ3ZWJncHVcIiBvciBcIndlYm5uXCJcbiAqIEBwYXJhbSBtb2R1bGUgLSB0aGUgT1JUIFdlYkFzc2VtYmx5IG1vZHVsZVxuICogQHBhcmFtIGVudiAtIHRoZSBPUlQgZW52aXJvbm1lbnQgdmFyaWFibGUgKG9ydC5lbnYpXG4gKiBAcGFyYW0gZ3B1QWRhcHRlciAtIHRoZSBwcmUtY3JlYXRlZCBHUFUgYWRhcHRlclxuICovXG5leHBvcnQgY29uc3QgaW5pdCA9XG4gICAgYXN5bmMobmFtZTogJ3dlYmdwdSd8J3dlYm5uJywgbW9kdWxlOiBPcnRXYXNtTW9kdWxlLCBlbnY6IEVudiwgZ3B1QWRhcHRlcj86IEdQVUFkYXB0ZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QganNlcEluaXQgPSBtb2R1bGUuanNlcEluaXQ7XG4gIGlmICghanNlcEluaXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIEpTRVAuIFRoZSBXZWJBc3NlbWJseSBtb2R1bGUgaXMgbm90IGJ1aWx0IHdpdGggSlNFUCBzdXBwb3J0LicpO1xuICB9XG5cbiAgaWYgKG5hbWUgPT09ICd3ZWJncHUnKSB7XG4gICAgY29uc3QgYmFja2VuZCA9IG5ldyBXZWJHcHVCYWNrZW5kKCk7XG4gICAgYXdhaXQgYmFja2VuZC5pbml0aWFsaXplKGVudiwgZ3B1QWRhcHRlciEpO1xuXG4gICAganNlcEluaXQoJ3dlYmdwdScsIFtcbiAgICAgIC8vIGJhY2tlbmRcbiAgICAgIGJhY2tlbmQsXG5cbiAgICAgIC8vIGpzZXBBbGxvYygpXG4gICAgICAoc2l6ZTogbnVtYmVyKSA9PiBiYWNrZW5kLmFsbG9jKHNpemUpLFxuXG4gICAgICAvLyBqc2VwRnJlZSgpXG4gICAgICAocHRyOiBudW1iZXIpID0+IGJhY2tlbmQuZnJlZShwdHIpLFxuXG4gICAgICAvLyBqc2VwQ29weShzcmMsIGRzdCwgc2l6ZSwgaXNTb3VyY2VHcHUpXG4gICAgICAoc3JjOiBudW1iZXIsIGRzdDogbnVtYmVyLCBzaXplOiBudW1iZXIsIGlzU291cmNlR3B1ID0gZmFsc2UpID0+IHtcbiAgICAgICAgaWYgKGlzU291cmNlR3B1KSB7XG4gICAgICAgICAgTE9HX0RFQlVHKCd2ZXJib3NlJywgKCkgPT4gYFtXZWJHUFVdIGpzZXBDb3B5R3B1VG9HcHU6IHNyYz0ke3NyY30sIGRzdD0ke2RzdH0sIHNpemU9JHtzaXplfWApO1xuICAgICAgICAgIGJhY2tlbmQubWVtY3B5KHNyYywgZHN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBMT0dfREVCVUcoJ3ZlcmJvc2UnLCAoKSA9PiBgW1dlYkdQVV0ganNlcENvcHlDcHVUb0dwdTogZGF0YU9mZnNldD0ke3NyY30sIGdwdURhdGFJZD0ke2RzdH0sIHNpemU9JHtzaXplfWApO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBtb2R1bGUuSEVBUFU4LnN1YmFycmF5KHNyYyA+Pj4gMCwgKHNyYyA+Pj4gMCkgKyBzaXplKTtcbiAgICAgICAgICBiYWNrZW5kLnVwbG9hZChkc3QsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBqc2VwQ29weUFzeW5jKHNyYywgZHN0LCBzaXplKVxuICAgICAgYXN5bmMoZ3B1RGF0YUlkOiBudW1iZXIsIGRhdGFPZmZzZXQ6IG51bWJlciwgc2l6ZTogbnVtYmVyKTpcbiAgICAgICAgICBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIExPR19ERUJVRyhcbiAgICAgICAgICAgICAgICAndmVyYm9zZScsXG4gICAgICAgICAgICAgICAgKCkgPT4gYFtXZWJHUFVdIGpzZXBDb3B5R3B1VG9DcHU6IGdwdURhdGFJZD0ke2dwdURhdGFJZH0sIGRhdGFPZmZzZXQ9JHtkYXRhT2Zmc2V0fSwgc2l6ZT0ke3NpemV9YCk7XG5cbiAgICAgICAgICAgIGF3YWl0IGJhY2tlbmQuZG93bmxvYWQoXG4gICAgICAgICAgICAgICAgZ3B1RGF0YUlkLCAoKSA9PiBtb2R1bGUuSEVBUFU4LnN1YmFycmF5KGRhdGFPZmZzZXQgPj4+IDAsIChkYXRhT2Zmc2V0ID4+PiAwKSArIHNpemUpKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAvLyBqc2VwQ3JlYXRlS2VybmVsXG4gICAgICAoa2VybmVsVHlwZTogc3RyaW5nLCBrZXJuZWxJZDogbnVtYmVyLCBhdHRyaWJ1dGU6IHVua25vd24pID0+IGJhY2tlbmQuY3JlYXRlS2VybmVsKFxuICAgICAgICAgIGtlcm5lbFR5cGUsIGtlcm5lbElkLCBhdHRyaWJ1dGUsIG1vZHVsZS5VVEY4VG9TdHJpbmcobW9kdWxlLl9Kc2VwR2V0Tm9kZU5hbWUhKGtlcm5lbElkKSkpLFxuXG4gICAgICAvLyBqc2VwUmVsZWFzZUtlcm5lbFxuICAgICAgKGtlcm5lbDogbnVtYmVyKSA9PiBiYWNrZW5kLnJlbGVhc2VLZXJuZWwoa2VybmVsKSxcblxuICAgICAgLy8ganNlcFJ1blxuICAgICAgKGtlcm5lbDogbnVtYmVyLCBjb250ZXh0RGF0YU9mZnNldDogbnVtYmVyLCBzZXNzaW9uSGFuZGxlOiBudW1iZXIsIGVycm9yczogQXJyYXk8UHJvbWlzZTxzdHJpbmd8bnVsbD4+KSA9PiB7XG4gICAgICAgIExPR19ERUJVRyhcbiAgICAgICAgICAgICd2ZXJib3NlJyxcbiAgICAgICAgICAgICgpID0+IGBbV2ViR1BVXSBqc2VwUnVuOiBzZXNzaW9uSGFuZGxlPSR7c2Vzc2lvbkhhbmRsZX0sIGtlcm5lbD0ke2tlcm5lbH0sIGNvbnRleHREYXRhT2Zmc2V0PSR7XG4gICAgICAgICAgICAgICAgY29udGV4dERhdGFPZmZzZXR9YCk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQ29tcHV0ZUNvbnRleHRJbXBsKG1vZHVsZSwgYmFja2VuZCwgY29udGV4dERhdGFPZmZzZXQpO1xuICAgICAgICByZXR1cm4gYmFja2VuZC5jb21wdXRlS2VybmVsKGtlcm5lbCwgY29udGV4dCwgZXJyb3JzKTtcbiAgICAgIH0sXG4gICAgICAvLyBqc2VwQ2FwdHVyZUJlZ2luXG4gICAgICAoKSA9PiBiYWNrZW5kLmNhcHR1cmVCZWdpbigpLFxuICAgICAgLy8ganNlcENhcHR1cmVFbmRcbiAgICAgICgpID0+IGJhY2tlbmQuY2FwdHVyZUVuZCgpLFxuICAgICAgLy8ganNlcFJlcGxheVxuICAgICAgKCkgPT4gYmFja2VuZC5yZXBsYXkoKVxuICAgIF0pO1xuICB9IGVsc2Uge1xuICAgIGpzZXBJbml0KCd3ZWJubicpO1xuICB9XG59O1xuIiwgImV4cG9ydCBjb25zdCBqb2luID0gdW5kZWZpbmVkOyIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtFbnZ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7T3J0V2FzbU1vZHVsZX0gZnJvbSAnLi9iaW5kaW5nL29ydC13YXNtJztcbmltcG9ydCB7T3J0V2FzbVRocmVhZGVkTW9kdWxlfSBmcm9tICcuL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5sZXQgb3J0V2FzbUZhY3Rvcnk6IEVtc2NyaXB0ZW5Nb2R1bGVGYWN0b3J5PE9ydFdhc21Nb2R1bGU+O1xuXG5pZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9UUkFJTklORykge1xuICBvcnRXYXNtRmFjdG9yeSA9IHJlcXVpcmUoJy4vYmluZGluZy9vcnQtdHJhaW5pbmctd2FzbS1zaW1kLmpzJyk7XG59IGVsc2Uge1xuICBvcnRXYXNtRmFjdG9yeSA9XG4gICAgICBCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVID8gcmVxdWlyZSgnLi9iaW5kaW5nL29ydC13YXNtLmpzJykgOiByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tc2ltZC5qc2VwLmpzJyk7XG59XG5cbmNvbnN0IG9ydFdhc21GYWN0b3J5VGhyZWFkZWQ6IEVtc2NyaXB0ZW5Nb2R1bGVGYWN0b3J5PE9ydFdhc21Nb2R1bGU+ID0gIUJVSUxEX0RFRlMuRElTQUJMRV9XQVNNX1RIUkVBRCA/XG4gICAgKEJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgPyByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQuanMnKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tc2ltZC10aHJlYWRlZC5qc2VwLmpzJykpIDpcbiAgICBvcnRXYXNtRmFjdG9yeTtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuXG5sZXQgd2FzbTogT3J0V2FzbU1vZHVsZXx1bmRlZmluZWQ7XG5sZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmxldCBpbml0aWFsaXppbmcgPSBmYWxzZTtcbmxldCBhYm9ydGVkID0gZmFsc2U7XG5cbmNvbnN0IGlzTXVsdGlUaHJlYWRTdXBwb3J0ZWQgPSAobnVtVGhyZWFkczogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gIC8vIFdlYkFzc2VtYmx5IHRocmVhZHMgYXJlIHNldCB0byAxIChzaW5nbGUgdGhyZWFkKS5cbiAgaWYgKG51bVRocmVhZHMgPT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiAnU2hhcmVkQXJyYXlCdWZmZXInIGlzIG5vdCBhdmFpbGFibGUsIFdlYkFzc2VtYmx5IHRocmVhZHMgd2lsbCBub3Qgd29yay5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmICFzZWxmLmNyb3NzT3JpZ2luSXNvbGF0ZWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ2Vudi53YXNtLm51bVRocmVhZHMgaXMgc2V0IHRvICcgKyBudW1UaHJlYWRzICtcbiAgICAgICAgICAnLCBidXQgdGhpcyB3aWxsIG5vdCB3b3JrIHVubGVzcyB5b3UgZW5hYmxlIGNyb3NzT3JpZ2luSXNvbGF0ZWQgbW9kZS4gJyArXG4gICAgICAgICAgJ1NlZSBodHRwczovL3dlYi5kZXYvY3Jvc3Mtb3JpZ2luLWlzb2xhdGlvbi1ndWlkZS8gZm9yIG1vcmUgaW5mby4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gb25ueHJ1bnRpbWUtd2ViIGRvZXMgbm90IHN1cHBvcnQgbXVsdGktdGhyZWFkcyBpbiBOb2RlLmpzLlxuICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdlbnYud2FzbS5udW1UaHJlYWRzIGlzIHNldCB0byAnICsgbnVtVGhyZWFkcyArXG4gICAgICAgICcsIGhvd2V2ZXIsIGN1cnJlbnRseSBvbm54cnVudGltZS13ZWIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS10aHJlYWRzIGluIE5vZGUuanMuICcgK1xuICAgICAgICAnUGxlYXNlIGNvbnNpZGVyIHVzaW5nIG9ubnhydW50aW1lLW5vZGUgZm9yIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHNjZW5hcmlvcy4nKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGVzdCBmb3IgdHJhbnNmZXJhYmlsaXR5IG9mIFNBQnMgKGZvciBicm93c2Vycy4gbmVlZGVkIGZvciBGaXJlZm94KVxuICAgIC8vIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFtc2cvbW96aWxsYS5kZXYucGxhdGZvcm0vSUhrQlpsSEVUcEEvZHdzTU5jaFdFUUFKXG4gICAgaWYgKHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5ldyBNZXNzYWdlQ2hhbm5lbCgpLnBvcnQxLnBvc3RNZXNzYWdlKG5ldyBTaGFyZWRBcnJheUJ1ZmZlcigxKSk7XG4gICAgfVxuXG4gICAgLy8gVGVzdCBmb3IgV2ViQXNzZW1ibHkgdGhyZWFkcyBjYXBhYmlsaXR5IChmb3IgYm90aCBicm93c2VycyBhbmQgTm9kZS5qcylcbiAgICAvLyBUaGlzIHR5cGVkIGFycmF5IGlzIGEgV2ViQXNzZW1ibHkgcHJvZ3JhbSBjb250YWluaW5nIHRocmVhZGVkIGluc3RydWN0aW9ucy5cbiAgICByZXR1cm4gV2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMCwgOTcsIDExNSwgMTA5LCAxLCAwLCAgMCwgIDAsIDEsIDQsIDEsICA5NiwgMCwgICAwLCAgMywgMiwgMSwgIDAsIDUsXG4gICAgICA0LCAxLCAgMywgICAxLCAgIDEsIDEwLCAxMSwgMSwgOSwgMCwgNjUsIDAsICAyNTQsIDE2LCAyLCAwLCAyNiwgMTFcbiAgICBdKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IGlzU2ltZFN1cHBvcnRlZCA9ICgpOiBib29sZWFuID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBUZXN0IGZvciBXZWJBc3NlbWJseSBTSU1EIGNhcGFiaWxpdHkgKGZvciBib3RoIGJyb3dzZXJzIGFuZCBOb2RlLmpzKVxuICAgIC8vIFRoaXMgdHlwZWQgYXJyYXkgaXMgYSBXZWJBc3NlbWJseSBwcm9ncmFtIGNvbnRhaW5pbmcgU0lNRCBpbnN0cnVjdGlvbnMuXG5cbiAgICAvLyBUaGUgYmluYXJ5IGRhdGEgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBjb2RlIGJ5IHdhdDJ3YXNtOlxuICAgIC8vXG4gICAgLy8gKG1vZHVsZVxuICAgIC8vICAgKHR5cGUgJHQwIChmdW5jKSlcbiAgICAvLyAgIChmdW5jICRmMCAodHlwZSAkdDApXG4gICAgLy8gICAgIChkcm9wXG4gICAgLy8gICAgICAgKGkzMng0LmRvdF9pMTZ4OF9zXG4gICAgLy8gICAgICAgICAoaTh4MTYuc3BsYXRcbiAgICAvLyAgICAgICAgICAgKGkzMi5jb25zdCAwKSlcbiAgICAvLyAgICAgICAgICh2MTI4LmNvbnN0IGkzMng0IDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDApKSkpKVxuXG4gICAgcmV0dXJuIFdlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDAsICAgOTcsIDExNSwgMTA5LCAxLCAwLCAwLCAwLCAxLCA0LCAxLCA5NiwgMCwgMCwgMywgMiwgMSwgMCwgMTAsIDMwLCAxLCAgIDI4LCAgMCwgNjUsIDAsXG4gICAgICAyNTMsIDE1LCAyNTMsIDEyLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAwLCAgMjUzLCAxODYsIDEsIDI2LCAxMVxuICAgIF0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgZ2V0V2FzbUZpbGVOYW1lID0gKHVzZVNpbWQ6IGJvb2xlYW4sIHVzZVRocmVhZHM6IGJvb2xlYW4pID0+IHtcbiAgaWYgKHVzZVNpbWQpIHtcbiAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9UUkFJTklORykge1xuICAgICAgcmV0dXJuICdvcnQtdHJhaW5pbmctd2FzbS1zaW1kLndhc20nO1xuICAgIH1cbiAgICByZXR1cm4gdXNlVGhyZWFkcyA/ICdvcnQtd2FzbS1zaW1kLXRocmVhZGVkLndhc20nIDogJ29ydC13YXNtLXNpbWQud2FzbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVzZVRocmVhZHMgPyAnb3J0LXdhc20tdGhyZWFkZWQud2FzbScgOiAnb3J0LXdhc20ud2FzbSc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsaXplV2ViQXNzZW1ibHkgPSBhc3luYyhmbGFnczogRW52LldlYkFzc2VtYmx5RmxhZ3MpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIGlmIChpbml0aWFsaXppbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpcGxlIGNhbGxzIHRvIFxcJ2luaXRpYWxpemVXZWJBc3NlbWJseSgpXFwnIGRldGVjdGVkLicpO1xuICB9XG4gIGlmIChhYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcmV2aW91cyBjYWxsIHRvIFxcJ2luaXRpYWxpemVXZWJBc3NlbWJseSgpXFwnIGZhaWxlZC4nKTtcbiAgfVxuXG4gIGluaXRpYWxpemluZyA9IHRydWU7XG5cbiAgLy8gd2FzbSBmbGFncyBhcmUgYWxyZWFkeSBpbml0aWFsaXplZFxuICBjb25zdCB0aW1lb3V0ID0gZmxhZ3MuaW5pdFRpbWVvdXQhO1xuICBjb25zdCBudW1UaHJlYWRzID0gZmxhZ3MubnVtVGhyZWFkcyE7XG4gIGNvbnN0IHNpbWQgPSBmbGFncy5zaW1kITtcblxuICBjb25zdCB1c2VUaHJlYWRzID0gaXNNdWx0aVRocmVhZFN1cHBvcnRlZChudW1UaHJlYWRzKTtcbiAgY29uc3QgdXNlU2ltZCA9IHNpbWQgJiYgaXNTaW1kU3VwcG9ydGVkKCk7XG5cbiAgY29uc3Qgd2FzbVBhdGhzID0gZmxhZ3Mud2FzbVBhdGhzO1xuICBjb25zdCB3YXNtUHJlZml4T3ZlcnJpZGUgPSB0eXBlb2Ygd2FzbVBhdGhzID09PSAnc3RyaW5nJyA/IHdhc21QYXRocyA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgd2FzbUZpbGVOYW1lID0gZ2V0V2FzbUZpbGVOYW1lKHVzZVNpbWQsIHVzZVRocmVhZHMpO1xuICBjb25zdCB3YXNtUGF0aE92ZXJyaWRlID0gdHlwZW9mIHdhc21QYXRocyA9PT0gJ29iamVjdCcgPyB3YXNtUGF0aHNbd2FzbUZpbGVOYW1lXSA6IHVuZGVmaW5lZDtcblxuICBsZXQgaXNUaW1lb3V0ID0gZmFsc2U7XG5cbiAgY29uc3QgdGFza3M6IEFycmF5PFByb21pc2U8dm9pZD4+ID0gW107XG5cbiAgLy8gcHJvbWlzZSBmb3IgdGltZW91dFxuICBpZiAodGltZW91dCA+IDApIHtcbiAgICB0YXNrcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgLy8gcHJvbWlzZSBmb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uXG4gIHRhc2tzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSB1c2VUaHJlYWRzID8gb3J0V2FzbUZhY3RvcnlUaHJlYWRlZCA6IG9ydFdhc21GYWN0b3J5O1xuICAgIGNvbnN0IGNvbmZpZzogUGFydGlhbDxPcnRXYXNtTW9kdWxlPiA9IHtcbiAgICAgIGxvY2F0ZUZpbGU6IChmaWxlTmFtZTogc3RyaW5nLCBzY3JpcHREaXJlY3Rvcnk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XQVNNX1RIUkVBRCAmJiB1c2VUaHJlYWRzICYmIGZpbGVOYW1lLmVuZHNXaXRoKCcud29ya2VyLmpzJykgJiZcbiAgICAgICAgICAgIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLy8gVGhpcyByZXF1aXJlKCkgZnVuY3Rpb24gaXMgaGFuZGxlZCBieSBlc2J1aWxkIHBsdWdpbiB0byBsb2FkIGZpbGUgY29udGVudCBhcyBzdHJpbmcuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQud29ya2VyLmpzJylcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKCcud2FzbScpKSB7XG4gICAgICAgICAgaWYgKHdhc21QYXRoT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB3YXNtUGF0aE92ZXJyaWRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHdhc21QcmVmaXhPdmVycmlkZSA/PyBzY3JpcHREaXJlY3Rvcnk7XG5cbiAgICAgICAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUpIHtcbiAgICAgICAgICAgIGlmICh3YXNtRmlsZU5hbWUgPT09ICdvcnQtd2FzbS1zaW1kLndhc20nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAnb3J0LXdhc20tc2ltZC5qc2VwLndhc20nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3YXNtRmlsZU5hbWUgPT09ICdvcnQtd2FzbS1zaW1kLXRocmVhZGVkLndhc20nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAnb3J0LXdhc20tc2ltZC10aHJlYWRlZC5qc2VwLndhc20nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwcmVmaXggKyB3YXNtRmlsZU5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgZmlsZU5hbWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU01fVEhSRUFEICYmIHVzZVRocmVhZHMpIHtcbiAgICAgIGNvbmZpZy5udW1UaHJlYWRzID0gbnVtVGhyZWFkcztcbiAgICAgIGlmICh0eXBlb2YgQmxvYiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uZmlnLm1haW5TY3JpcHRVcmxPckJsb2IgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnb3J0LXdhc20tdGhyZWFkZWQuanMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdFNvdXJjZUNvZGUgPSBgdmFyIG9ydFdhc21UaHJlYWRlZD0ke2ZhY3RvcnkudG9TdHJpbmcoKX07YDtcbiAgICAgICAgY29uZmlnLm1haW5TY3JpcHRVcmxPckJsb2IgPSBuZXcgQmxvYihbc2NyaXB0U291cmNlQ29kZV0sIHt0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZhY3RvcnkoY29uZmlnKS50aGVuKFxuICAgICAgICAvLyB3YXNtIG1vZHVsZSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgbW9kdWxlID0+IHtcbiAgICAgICAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgd2FzbSA9IG1vZHVsZTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHdhc20gbW9kdWxlIGZhaWxlZCB0byBpbml0aWFsaXplXG4gICAgICAgICh3aGF0KSA9PiB7XG4gICAgICAgICAgaW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgcmVqZWN0KHdoYXQpO1xuICAgICAgICB9KTtcbiAgfSkpO1xuXG4gIGF3YWl0IFByb21pc2UucmFjZSh0YXNrcyk7XG5cbiAgaWYgKGlzVGltZW91dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgV2ViQXNzZW1ibHkgYmFja2VuZCBpbml0aWFsaXppbmcgZmFpbGVkIGR1ZSB0byB0aW1lb3V0OiAke3RpbWVvdXR9bXNgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEluc3RhbmNlID0gKCk6IE9ydFdhc21Nb2R1bGUgPT4ge1xuICBpZiAoaW5pdGlhbGl6ZWQgJiYgd2FzbSkge1xuICAgIHJldHVybiB3YXNtO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdXZWJBc3NlbWJseSBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRpc3Bvc2UgPSAoKTogdm9pZCA9PiB7XG4gIGlmIChpbml0aWFsaXplZCAmJiAhaW5pdGlhbGl6aW5nICYmICFhYm9ydGVkKSB7XG4gICAgaW5pdGlhbGl6aW5nID0gdHJ1ZTtcblxuICAgICh3YXNtIGFzIE9ydFdhc21UaHJlYWRlZE1vZHVsZSkuUFRocmVhZD8udGVybWluYXRlQWxsVGhyZWFkcygpO1xuICAgIHdhc20gPSB1bmRlZmluZWQ7XG5cbiAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIGFib3J0ZWQgPSB0cnVlO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2dldEluc3RhbmNlfSBmcm9tICcuL3dhc20tZmFjdG9yeSc7XG5cbmV4cG9ydCBjb25zdCBhbGxvY1dhc21TdHJpbmcgPSAoZGF0YTogc3RyaW5nLCBhbGxvY3M6IG51bWJlcltdKTogbnVtYmVyID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG5cbiAgY29uc3QgZGF0YUxlbmd0aCA9IHdhc20ubGVuZ3RoQnl0ZXNVVEY4KGRhdGEpICsgMTtcbiAgY29uc3QgZGF0YU9mZnNldCA9IHdhc20uX21hbGxvYyhkYXRhTGVuZ3RoKTtcbiAgd2FzbS5zdHJpbmdUb1VURjgoZGF0YSwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCk7XG4gIGFsbG9jcy5wdXNoKGRhdGFPZmZzZXQpO1xuXG4gIHJldHVybiBkYXRhT2Zmc2V0O1xufTtcblxuaW50ZXJmYWNlIEV4dHJhT3B0aW9uc0hhbmRsZXIge1xuICAobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdGVFeHRyYU9wdGlvbnMgPVxuICAgIChvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJlZml4OiBzdHJpbmcsIHNlZW46IFdlYWtTZXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICAgICBoYW5kbGVyOiBFeHRyYU9wdGlvbnNIYW5kbGVyKTogdm9pZCA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2Vlbi5oYXMob3B0aW9ucykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBpbiBvcHRpb25zJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Vlbi5hZGQob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAocHJlZml4KSA/IHByZWZpeCArIGtleSA6IGtleTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpdGVyYXRlRXh0cmFPcHRpb25zKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBuYW1lICsgJy4nLCBzZWVuLCBoYW5kbGVyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBoYW5kbGVyKG5hbWUsIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgaGFuZGxlcihuYW1lLCAodmFsdWUpID8gJzEnIDogJzAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGhhbmRsZSBleHRyYSBjb25maWcgdHlwZTogJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbi8qKlxuICogY2hlY2sgd2ViIGFzc2VtYmx5IEFQSSdzIGxhc3QgZXJyb3IgYW5kIHRocm93IGVycm9yIGlmIGFueSBlcnJvciBvY2N1cnJlZC5cbiAqIEBwYXJhbSBtZXNzYWdlIGEgbWVzc2FnZSB1c2VkIHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjaGVja0xhc3RFcnJvciA9IChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG5cbiAgY29uc3Qgc3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcmFtc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg4KTtcbiAgICB3YXNtLl9PcnRHZXRMYXN0RXJyb3IocGFyYW1zT2Zmc2V0LCBwYXJhbXNPZmZzZXQgKyA0KTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSB3YXNtLkhFQVAzMltwYXJhbXNPZmZzZXQgLyA0XTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2VQb2ludGVyID0gd2FzbS5IRUFQVTMyW3BhcmFtc09mZnNldCAvIDQgKyAxXTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2VQb2ludGVyID8gd2FzbS5VVEY4VG9TdHJpbmcoZXJyb3JNZXNzYWdlUG9pbnRlcikgOiAnJztcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX0gRVJST1JfQ09ERTogJHtlcnJvckNvZGV9LCBFUlJPUl9NRVNTQUdFOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtnZXRJbnN0YW5jZX0gZnJvbSAnLi93YXNtLWZhY3RvcnknO1xuaW1wb3J0IHthbGxvY1dhc21TdHJpbmcsIGNoZWNrTGFzdEVycm9yLCBpdGVyYXRlRXh0cmFPcHRpb25zfSBmcm9tICcuL3dhc20tdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgc2V0UnVuT3B0aW9ucyA9IChvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBbbnVtYmVyLCBudW1iZXJbXV0gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgbGV0IHJ1bk9wdGlvbnNIYW5kbGUgPSAwO1xuICBjb25zdCBhbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgcnVuT3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB0cnkge1xuICAgIGlmIChvcHRpb25zPy5sb2dTZXZlcml0eUxldmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bk9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA9IDI7ICAvLyBEZWZhdWx0IHRvIHdhcm5pbmdcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5sb2dTZXZlcml0eUxldmVsICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwpIHx8XG4gICAgICAgIG9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA8IDAgfHwgb3B0aW9ucy5sb2dTZXZlcml0eUxldmVsID4gNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgc2VydmVyaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWx9YCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmxvZ1ZlcmJvc2l0eUxldmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bk9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwgPSAwOyAgLy8gRGVmYXVsdCB0byAwXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbG9nIHZlcmJvc2l0eSBsZXZlbCBpcyBub3QgdmFsaWQ6ICR7b3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbH1gKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8udGVybWluYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bk9wdGlvbnMudGVybWluYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IHRhZ0RhdGFPZmZzZXQgPSAwO1xuICAgIGlmIChvcHRpb25zPy50YWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFnRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhvcHRpb25zLnRhZywgYWxsb2NzKTtcbiAgICB9XG5cbiAgICBydW5PcHRpb25zSGFuZGxlID0gd2FzbS5fT3J0Q3JlYXRlUnVuT3B0aW9ucyhcbiAgICAgICAgcnVuT3B0aW9ucy5sb2dTZXZlcml0eUxldmVsISwgcnVuT3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCEsICEhcnVuT3B0aW9ucy50ZXJtaW5hdGUhLCB0YWdEYXRhT2Zmc2V0KTtcbiAgICBpZiAocnVuT3B0aW9uc0hhbmRsZSA9PT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgY3JlYXRlIHJ1biBvcHRpb25zLicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5leHRyYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpdGVyYXRlRXh0cmFPcHRpb25zKG9wdGlvbnMuZXh0cmEsICcnLCBuZXcgV2Vha1NldDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhrZXksIGFsbG9jcyk7XG4gICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh2YWx1ZSwgYWxsb2NzKTtcblxuICAgICAgICBpZiAod2FzbS5fT3J0QWRkUnVuQ29uZmlnRW50cnkocnVuT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBydW4gY29uZmlnIGVudHJ5OiAke2tleX0gLSAke3ZhbHVlfS5gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtydW5PcHRpb25zSGFuZGxlLCBhbGxvY3NdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHJ1bk9wdGlvbnNIYW5kbGUgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VSdW5PcHRpb25zKHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9ufSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge2dldEluc3RhbmNlfSBmcm9tICcuL3dhc20tZmFjdG9yeSc7XG5pbXBvcnQge2FsbG9jV2FzbVN0cmluZywgY2hlY2tMYXN0RXJyb3IsIGl0ZXJhdGVFeHRyYU9wdGlvbnN9IGZyb20gJy4vd2FzbS11dGlscyc7XG5cbmNvbnN0IGdldEdyYXBoT3B0aW16YXRpb25MZXZlbCA9IChncmFwaE9wdGltaXphdGlvbkxldmVsOiBzdHJpbmd8dW5rbm93bik6IG51bWJlciA9PiB7XG4gIHN3aXRjaCAoZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCkge1xuICAgIGNhc2UgJ2Rpc2FibGVkJzpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgJ2Jhc2ljJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ2V4dGVuZGVkJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ2FsbCc6XG4gICAgICByZXR1cm4gOTk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZ3JhcGggb3B0aW1pemF0aW9uIGxldmVsOiAke2dyYXBoT3B0aW1pemF0aW9uTGV2ZWx9YCk7XG4gIH1cbn07XG5cbmNvbnN0IGdldEV4ZWN1dGlvbk1vZGUgPSAoZXhlY3V0aW9uTW9kZTogJ3NlcXVlbnRpYWwnfCdwYXJhbGxlbCcpOiBudW1iZXIgPT4ge1xuICBzd2l0Y2ggKGV4ZWN1dGlvbk1vZGUpIHtcbiAgICBjYXNlICdzZXF1ZW50aWFsJzpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgJ3BhcmFsbGVsJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGV4ZWN1dGlvbiBtb2RlOiAke2V4ZWN1dGlvbk1vZGV9YCk7XG4gIH1cbn07XG5cbmNvbnN0IGFwcGVuZERlZmF1bHRPcHRpb25zID0gKG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiB2b2lkID0+IHtcbiAgaWYgKCFvcHRpb25zLmV4dHJhKSB7XG4gICAgb3B0aW9ucy5leHRyYSA9IHt9O1xuICB9XG4gIGlmICghb3B0aW9ucy5leHRyYS5zZXNzaW9uKSB7XG4gICAgb3B0aW9ucy5leHRyYS5zZXNzaW9uID0ge307XG4gIH1cbiAgY29uc3Qgc2Vzc2lvbiA9IG9wdGlvbnMuZXh0cmEuc2Vzc2lvbiBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBpZiAoIXNlc3Npb24udXNlX29ydF9tb2RlbF9ieXRlc19kaXJlY3RseSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgICBzZXNzaW9uLnVzZV9vcnRfbW9kZWxfYnl0ZXNfZGlyZWN0bHkgPSAnMSc7XG4gIH1cblxuICAvLyBpZiB1c2luZyBKU0VQIHdpdGggV2ViR1BVLCBhbHdheXMgZGlzYWJsZSBtZW1vcnkgcGF0dGVyblxuICBpZiAob3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMgJiZcbiAgICAgIG9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzLnNvbWUoZXAgPT4gKHR5cGVvZiBlcCA9PT0gJ3N0cmluZycgPyBlcCA6IGVwLm5hbWUpID09PSAnd2ViZ3B1JykpIHtcbiAgICBvcHRpb25zLmVuYWJsZU1lbVBhdHRlcm4gPSBmYWxzZTtcbiAgfVxufTtcblxuY29uc3Qgc2V0RXhlY3V0aW9uUHJvdmlkZXJzID1cbiAgICAoc2Vzc2lvbk9wdGlvbnNIYW5kbGU6IG51bWJlciwgZXhlY3V0aW9uUHJvdmlkZXJzOiByZWFkb25seSBJbmZlcmVuY2VTZXNzaW9uLkV4ZWN1dGlvblByb3ZpZGVyQ29uZmlnW10sXG4gICAgIGFsbG9jczogbnVtYmVyW10pOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3QgZXAgb2YgZXhlY3V0aW9uUHJvdmlkZXJzKSB7XG4gICAgICAgIGxldCBlcE5hbWUgPSB0eXBlb2YgZXAgPT09ICdzdHJpbmcnID8gZXAgOiBlcC5uYW1lO1xuXG4gICAgICAgIC8vIGNoZWNrIEVQIG5hbWVcbiAgICAgICAgc3dpdGNoIChlcE5hbWUpIHtcbiAgICAgICAgICBjYXNlICd3ZWJubic6XG4gICAgICAgICAgICBlcE5hbWUgPSAnV0VCTk4nO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd2Vibm5PcHRpb25zID0gZXAgYXMgSW5mZXJlbmNlU2Vzc2lvbi5XZWJOTkV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgICAgICAgICAgICBpZiAod2Vibm5PcHRpb25zPy5kZXZpY2VUeXBlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygnZGV2aWNlVHlwZScsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHdlYm5uT3B0aW9ucy5kZXZpY2VUeXBlLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09XG4gICAgICAgICAgICAgICAgICAgIDApIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ2RldmljZVR5cGUnIC0gJHt3ZWJubk9wdGlvbnMuZGV2aWNlVHlwZX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh3ZWJubk9wdGlvbnM/Lm51bVRocmVhZHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbnVtVGhyZWFkcyA9IHdlYm5uT3B0aW9ucy5udW1UaHJlYWRzO1xuICAgICAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGludmFsaWQgd2Vibm5PcHRpb25zLm51bVRocmVhZHMuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBudW1UaHJlYWRzICE9ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG51bVRocmVhZHMpIHx8IG51bVRocmVhZHMgPCAwKSB7XG4gICAgICAgICAgICAgICAgICBudW1UaHJlYWRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygnbnVtVGhyZWFkcycsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKG51bVRocmVhZHMudG9TdHJpbmcoKSwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2UoKS5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PVxuICAgICAgICAgICAgICAgICAgICAwKSB7XG4gICAgICAgICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdudW1UaHJlYWRzJyAtICR7d2Vibm5PcHRpb25zLm51bVRocmVhZHN9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAod2Vibm5PcHRpb25zPy5wb3dlclByZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKCdwb3dlclByZWZlcmVuY2UnLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh3ZWJubk9wdGlvbnMucG93ZXJQcmVmZXJlbmNlLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09XG4gICAgICAgICAgICAgICAgICAgIDApIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ3Bvd2VyUHJlZmVyZW5jZScgLSAke3dlYm5uT3B0aW9ucy5wb3dlclByZWZlcmVuY2V9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnd2ViZ3B1JzpcbiAgICAgICAgICAgIGVwTmFtZSA9ICdKUyc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVwICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBjb25zdCB3ZWJncHVPcHRpb25zID0gZXAgYXMgSW5mZXJlbmNlU2Vzc2lvbi5XZWJHcHVFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICAgICAgICAgICAgaWYgKHdlYmdwdU9wdGlvbnM/LnByZWZlcnJlZExheW91dCkge1xuICAgICAgICAgICAgICAgIGlmICh3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dCAhPT0gJ05DSFcnICYmIHdlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0ICE9PSAnTkhXQycpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJlZmVycmVkTGF5b3V0IG11c3QgYmUgZWl0aGVyICdOQ0hXJyBvciAnTkhXQyc6ICR7d2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXR9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGtleURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcoJ3ByZWZlcnJlZExheW91dCcsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHdlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0LCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09XG4gICAgICAgICAgICAgICAgICAgIDApIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ3ByZWZlcnJlZExheW91dCcgLSAke3dlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0fS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3dhc20nOlxuICAgICAgICAgIGNhc2UgJ2NwdSc6XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3Qgc3VwcG9ydGVkIGV4ZWN1dGlvbiBwcm92aWRlcjogJHtlcE5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcE5hbWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGVwTmFtZSwgYWxsb2NzKTtcbiAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyKHNlc3Npb25PcHRpb25zSGFuZGxlLCBlcE5hbWVEYXRhT2Zmc2V0KSAhPT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBhcHBlbmQgZXhlY3V0aW9uIHByb3ZpZGVyOiAke2VwTmFtZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbk9wdGlvbnMgPSAob3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiBbbnVtYmVyLCBudW1iZXJbXV0gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgbGV0IHNlc3Npb25PcHRpb25zSGFuZGxlID0gMDtcbiAgY29uc3QgYWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0IHNlc3Npb25PcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgYXBwZW5kRGVmYXVsdE9wdGlvbnMoc2Vzc2lvbk9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCA9IGdldEdyYXBoT3B0aW16YXRpb25MZXZlbChzZXNzaW9uT3B0aW9ucy5ncmFwaE9wdGltaXphdGlvbkxldmVsID8/ICdhbGwnKTtcbiAgICBjb25zdCBleGVjdXRpb25Nb2RlID0gZ2V0RXhlY3V0aW9uTW9kZShzZXNzaW9uT3B0aW9ucy5leGVjdXRpb25Nb2RlID8/ICdzZXF1ZW50aWFsJyk7XG4gICAgY29uc3QgbG9nSWREYXRhT2Zmc2V0ID1cbiAgICAgICAgdHlwZW9mIHNlc3Npb25PcHRpb25zLmxvZ0lkID09PSAnc3RyaW5nJyA/IGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5sb2dJZCwgYWxsb2NzKSA6IDA7XG5cbiAgICBjb25zdCBsb2dTZXZlcml0eUxldmVsID0gc2Vzc2lvbk9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA/PyAyOyAgLy8gRGVmYXVsdCB0byAyIC0gd2FybmluZ1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsb2dTZXZlcml0eUxldmVsKSB8fCBsb2dTZXZlcml0eUxldmVsIDwgMCB8fCBsb2dTZXZlcml0eUxldmVsID4gNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgc2VydmVyaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtsb2dTZXZlcml0eUxldmVsfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ1ZlcmJvc2l0eUxldmVsID0gc2Vzc2lvbk9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwgPz8gMDsgIC8vIERlZmF1bHQgdG8gMCAtIHZlcmJvc2VcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobG9nVmVyYm9zaXR5TGV2ZWwpIHx8IGxvZ1ZlcmJvc2l0eUxldmVsIDwgMCB8fCBsb2dWZXJib3NpdHlMZXZlbCA+IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbG9nIHZlcmJvc2l0eSBsZXZlbCBpcyBub3QgdmFsaWQ6ICR7bG9nVmVyYm9zaXR5TGV2ZWx9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW1pemVkTW9kZWxGaWxlUGF0aE9mZnNldCA9IHR5cGVvZiBzZXNzaW9uT3B0aW9ucy5vcHRpbWl6ZWRNb2RlbEZpbGVQYXRoID09PSAnc3RyaW5nJyA/XG4gICAgICAgIGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5vcHRpbWl6ZWRNb2RlbEZpbGVQYXRoLCBhbGxvY3MpIDpcbiAgICAgICAgMDtcblxuICAgIHNlc3Npb25PcHRpb25zSGFuZGxlID0gd2FzbS5fT3J0Q3JlYXRlU2Vzc2lvbk9wdGlvbnMoXG4gICAgICAgIGdyYXBoT3B0aW1pemF0aW9uTGV2ZWwsICEhc2Vzc2lvbk9wdGlvbnMuZW5hYmxlQ3B1TWVtQXJlbmEsICEhc2Vzc2lvbk9wdGlvbnMuZW5hYmxlTWVtUGF0dGVybiwgZXhlY3V0aW9uTW9kZSxcbiAgICAgICAgISFzZXNzaW9uT3B0aW9ucy5lbmFibGVQcm9maWxpbmcsIDAsIGxvZ0lkRGF0YU9mZnNldCwgbG9nU2V2ZXJpdHlMZXZlbCwgbG9nVmVyYm9zaXR5TGV2ZWwsXG4gICAgICAgIG9wdGltaXplZE1vZGVsRmlsZVBhdGhPZmZzZXQpO1xuICAgIGlmIChzZXNzaW9uT3B0aW9uc0hhbmRsZSA9PT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgY3JlYXRlIHNlc3Npb24gb3B0aW9ucy4nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzKSB7XG4gICAgICBzZXRFeGVjdXRpb25Qcm92aWRlcnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIHNlc3Npb25PcHRpb25zLmV4ZWN1dGlvblByb3ZpZGVycywgYWxsb2NzKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlbmFibGVHcmFwaENhcHR1cmUgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWU6ICR7c2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlfWApO1xuICAgICAgfVxuICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygnZW5hYmxlR3JhcGhDYXB0dXJlJywgYWxsb2NzKTtcbiAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5lbmFibGVHcmFwaENhcHR1cmUudG9TdHJpbmcoKSwgYWxsb2NzKTtcbiAgICAgIGlmICh3YXNtLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoXG4gICAgICAgICAgICBgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdlbmFibGVHcmFwaENhcHR1cmUnIC0gJHtzZXNzaW9uT3B0aW9ucy5lbmFibGVHcmFwaENhcHR1cmV9LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZXNzaW9uT3B0aW9ucy5mcmVlRGltZW5zaW9uT3ZlcnJpZGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2Vzc2lvbk9wdGlvbnMuZnJlZURpbWVuc2lvbk92ZXJyaWRlcykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZnJlZSBkaW1lbnNpb24gb3ZlcnJpZGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nOiAke25hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZnJlZSBkaW1lbnNpb24gb3ZlcnJpZGUgdmFsdWUgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyOiAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWVPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcobmFtZSwgYWxsb2NzKTtcbiAgICAgICAgaWYgKHdhc20uX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZShzZXNzaW9uT3B0aW9uc0hhbmRsZSwgbmFtZU9mZnNldCwgdmFsdWUpICE9PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IHNldCBhIGZyZWUgZGltZW5zaW9uIG92ZXJyaWRlOiAke25hbWV9IC0gJHt2YWx1ZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZXh0cmEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaXRlcmF0ZUV4dHJhT3B0aW9ucyhzZXNzaW9uT3B0aW9ucy5leHRyYSwgJycsIG5ldyBXZWFrU2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGtleSwgYWxsb2NzKTtcbiAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHZhbHVlLCBhbGxvY3MpO1xuXG4gICAgICAgIGlmICh3YXNtLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICR7a2V5fSAtICR7dmFsdWV9LmApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3Nlc3Npb25PcHRpb25zSGFuZGxlLCBhbGxvY3NdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtFbnYsIEluZmVyZW5jZVNlc3Npb24sIFRlbnNvcn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtTZXJpYWxpemFibGVJbnRlcm5hbEJ1ZmZlciwgU2VyaWFsaXphYmxlU2Vzc2lvbk1ldGFkYXRhLCBTZXJpYWxpemFibGVUZW5zb3JNZXRhZGF0YSwgVGVuc29yTWV0YWRhdGF9IGZyb20gJy4vcHJveHktbWVzc2FnZXMnO1xuaW1wb3J0IHtzZXRSdW5PcHRpb25zfSBmcm9tICcuL3J1bi1vcHRpb25zJztcbmltcG9ydCB7c2V0U2Vzc2lvbk9wdGlvbnN9IGZyb20gJy4vc2Vzc2lvbi1vcHRpb25zJztcbmltcG9ydCB7ZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtLCBnZXRUZW5zb3JFbGVtZW50U2l6ZSwgaXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlLCBsb2dMZXZlbFN0cmluZ1RvRW51bSwgdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcsIHRlbnNvckRhdGFUeXBlU3RyaW5nVG9FbnVtLCB0ZW5zb3JUeXBlVG9UeXBlZEFycmF5Q29uc3RydWN0b3J9IGZyb20gJy4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtnZXRJbnN0YW5jZX0gZnJvbSAnLi93YXNtLWZhY3RvcnknO1xuaW1wb3J0IHthbGxvY1dhc21TdHJpbmcsIGNoZWNrTGFzdEVycm9yfSBmcm9tICcuL3dhc20tdXRpbHMnO1xuaW1wb3J0IHtsb2FkRmlsZX0gZnJvbSAnLi93YXNtLXV0aWxzLWxvYWQtZmlsZSc7XG5cbi8vICNyZWdpb24gSW5pdGlhbGl6YXRpb25zXG5cbi8qKlxuICogVGhlcmUgYXJlIDQgZGlmZmVyZW50IFwiaW5pdGlhbGl6YXRpb25cIiBzdGVwcyBmb3IgT1JULiBUaGV5IGhhcHBlbiBpbiBkaWZmZXJlbnQgcGxhY2VzIGFuZCBkaWZmZXJlbnQgdGltZS5cbiAqXG4gKiAxLiBKYXZhU2NyaXB0IGluaXRpYWxpemF0aW9uIGZvciBvbm54cnVudGltZS1jb21tb24gYW5kIG9ubnhydW50aW1lLXdlYi5cbiAqICAgIFRoaXMgaXMgdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHN0ZXAuIEluIHRoaXMgc3RlcCwgb25ueHJ1bnRpbWUtd2ViIGNhbGxzIG9ubnhydW50aW1lLWNvbW1vbidzIHJlZ2lzdGVyQmFja2VuZCgpXG4gKiBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyB0byByZWdpc3RlciBhbGwgdGhlIGF2YWlsYWJsZSBiYWNrZW5kcy4gVGhlIGJhY2tlbmQgcmVnaXN0cmF0aW9uIGlzIHZlcnkgZmFzdC4gSXQgb25seVxuICogcmVnaXN0ZXJzIHRoZSBiYWNrZW5kIG5hbWUgd2l0aCB0aGUgdW5pbml0aWFsaXplZCBiYWNrZW5kIG9iamVjdC4gTm8gaGVhdnkgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBpbiB0aGlzIHN0ZXAuXG4gKiAgICBSZWZlciB0byB3ZWIvbGliL2luZGV4LnRzIGZvciB0aGUgYmFja2VuZCByZWdpc3RyYXRpb24uXG4gKlxuICogMi4gV2ViQXNzZW1ibHkgYXJ0aWZhY3QgaW5pdGlhbGl6YXRpb24uXG4gKiAgICBUaGlzIGhhcHBlbnMgd2hlbiBhbnkgcmVnaXN0ZXJlZCB3YXNtIGJhY2tlbmQgaXMgdXNlZCBmb3IgdGhlIGZpcnN0IHRpbWUgKGllLiBgb3J0LkluZmVyZW5jZVNlc3Npb24uY3JlYXRlKClgIG9yXG4gKiBgb3J0LlRyYWluaW5nU2Vzc2lvbi5jcmVhdGUoKWAgaXMgY2FsbGVkKS4gSW4gdGhpcyBzdGVwLCBvbm54cnVudGltZS13ZWIgZG9lcyB0aGUgZm9sbG93aW5nczpcbiAqICAgICAtIGNyZWF0ZSBhIHByb3h5IHdvcmtlciBhbmQgbWFrZSBzdXJlIHRoZSBwcm94eSB3b3JrZXIgaXMgcmVhZHkgdG8gcmVjZWl2ZSBtZXNzYWdlcywgaWYgcHJveHkgaXMgZW5hYmxlZC5cbiAqICAgICAtIHBlcmZvcm0gZmVhdHVyZSBkZXRlY3Rpb24sIGxvY2F0ZSBjb3JyZWN0IFdlYkFzc2VtYmx5IGFydGlmYWN0IHBhdGggYW5kIGNhbGwgdGhlIEVtc2NyaXB0ZW4gZ2VuZXJhdGVkXG4gKiBKYXZhU2NyaXB0IGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgV2ViQXNzZW1ibHkgcnVudGltZS5cbiAqICAgICAgICAgLSBpZiBwcm94eSBpcyBlbmFibGVkLCB0aGlzIHN0ZXAgaGFwcGVucyBpbiB0aGUgcHJveHkgd29ya2VyIHVzaW5nIG1lc3NhZ2UgJ2luaXQtd2FzbScuXG4gKiAgICAgICAgIC0gZG93bmxvYWRpbmcgdGhlICdvcnQtd2FzbXsuLi59Lndhc20nIGZpbGUgaXMgZG9uZSBpbiB0aGlzIHN0ZXAuXG4gKiAgICAgICAgIC0gaWYgbXVsdGktdGhyZWFkIGlzIGVuYWJsZWQsIG9uZSBvciBtb3JlIHdlYndvcmtlciB3aWxsIGJlIGNyZWF0ZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUFRocmVhZCB0aHJlYWRwb29sLlxuICpcbiAqIDMuIE9SVCBlbnZpcm9ubWVudCBpbml0aWFsaXphdGlvbi5cbiAqICAgIFRoaXMgaGFwcGVucyBhZnRlciBzdGVwIDIuIEluIHRoaXMgc3RlcCwgb25ueHJ1bnRpbWUtd2ViIHBlcmZvcm1zIE9OTlggUnVudGltZSBlbnZpcm9ubWVudCBpbml0aWFsaXphdGlvbi5cbiAqIEZ1bmN0aW9uIGBfT3J0SW5pdCgpYCBpcyBjYWxsZWQgaW4gdGhpcyBzdGVwLlxuICogICAgIC0gaWYgcHJveHkgaXMgZW5hYmxlZCwgdGhpcyBzdGVwIGhhcHBlbnMgaW4gdGhlIHByb3h5IHdvcmtlciB1c2luZyBtZXNzYWdlICdpbml0LW9ydCcuXG4gKiAgICAgLSBsb2dnaW5nIGxldmVsIChvcnQuZW52LmxvZ0xldmVsKSBhbmQgdGhyZWFkIG51bWJlciAob3J0LmVudi53YXNtLm51bVRocmVhZHMpIGFyZSBzZXQgaW4gdGhpcyBzdGVwLlxuICpcbiAqIDQuIFNlc3Npb24gaW5pdGlhbGl6YXRpb24uXG4gKiAgICBUaGlzIGhhcHBlbnMgd2hlbiBgb3J0LkluZmVyZW5jZVNlc3Npb24uY3JlYXRlKClgIG9yIGBvcnQuVHJhaW5pbmdTZXNzaW9uLmNyZWF0ZSgpYCBpcyBjYWxsZWQuIFVubGlrZSB0aGUgZmlyc3QgM1xuICogc3RlcHMgKHRoZXkgb25seSBjYWxsZWQgb25jZSksIHRoaXMgc3RlcCB3aWxsIGJlIGRvbmUgZm9yIGVhY2ggc2Vzc2lvbi4gSW4gdGhpcyBzdGVwLCBvbm54cnVudGltZS13ZWIgZG9lcyB0aGVcbiAqIGZvbGxvd2luZ3M6XG4gKiAgICBJZiB0aGUgcGFyYW1ldGVyIGlzIGEgVVJMOlxuICogICAgLSBkb3dubG9hZCB0aGUgbW9kZWwgZGF0YSBmcm9tIHRoZSBVUkwuXG4gKiAgICAtIGNvcHkgdGhlIG1vZGVsIGRhdGEgdG8gdGhlIFdBU00gaGVhcC4gKHByb3h5OiAnY29weS1mcm9tJylcbiAqICAgIC0gZGVyZWZlcmVuY2UgdGhlIG1vZGVsIGJ1ZmZlci4gVGhpcyBzdGVwIGFsbG93cyB0aGUgb3JpZ2luYWwgQXJyYXlCdWZmZXIgdG8gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4gKiAgICAtIGNhbGwgYF9PcnRDcmVhdGVTZXNzaW9uKClgIHRvIGNyZWF0ZSB0aGUgc2Vzc2lvbi4gKHByb3h5OiAnY3JlYXRlJylcbiAqXG4gKiAgICBJZiB0aGUgcGFyYW1ldGVyIGlzIGEgVWludDhBcnJheSBvYmplY3Q6XG4gKiAgICAtIGNvcHkgdGhlIG1vZGVsIGRhdGEgdG8gdGhlIFdBU00gaGVhcC4gKHByb3h5OiAnY29weS1mcm9tJylcbiAqICAgIC0gY2FsbCBgX09ydENyZWF0ZVNlc3Npb24oKWAgdG8gY3JlYXRlIHRoZSBzZXNzaW9uLiAocHJveHk6ICdjcmVhdGUnKVxuICpcbiAqXG4gKi9cblxuLyoqXG4gKiBpbml0aWFsaXplIE9SVCBlbnZpcm9ubWVudC5cbiAqXG4gKiBAcGFyYW0gbnVtVGhyZWFkcyBTZXRHbG9iYWxJbnRyYU9wTnVtVGhyZWFkcyhudW1UaHJlYWRzKVxuICogQHBhcmFtIGxvZ2dpbmdMZXZlbCBDcmVhdGVFbnYoc3RhdGljX2Nhc3Q8T3J0TG9nZ2luZ0xldmVsPihsb2dnaW5nX2xldmVsKSlcbiAqL1xuY29uc3QgaW5pdE9ydCA9IChudW1UaHJlYWRzOiBudW1iZXIsIGxvZ2dpbmdMZXZlbDogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IGVycm9yQ29kZSA9IGdldEluc3RhbmNlKCkuX09ydEluaXQobnVtVGhyZWFkcywgbG9nZ2luZ0xldmVsKTtcbiAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGluaXRpYWxpemUgb25ueHJ1bnRpbWUuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogaW50aWFsaXplIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0gZW52IHBhc3NlZCBpbiB0aGUgZW52aXJvbm1lbnQgY29uZmlnIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluaXRSdW50aW1lID0gYXN5bmMoZW52OiBFbnYpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgLy8gaW5pdCBPUlRcbiAgaW5pdE9ydChlbnYud2FzbS5udW1UaHJlYWRzISwgbG9nTGV2ZWxTdHJpbmdUb0VudW0oZW52LmxvZ0xldmVsKSk7XG59O1xuXG4vKipcbiAqIHBlcmZvcm0gRVAgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uXG4gKlxuICogQHBhcmFtIGVudlxuICogQHBhcmFtIGVwTmFtZVxuICovXG5leHBvcnQgY29uc3QgaW5pdEVwID0gYXN5bmMoZW52OiBFbnYsIGVwTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3QgaW5pdEpzZXAgPSByZXF1aXJlKCcuL2pzZXAvaW5pdCcpLmluaXQ7XG5cbiAgICBpZiAoZXBOYW1lID09PSAnd2ViZ3B1Jykge1xuICAgICAgLy8gcGVyZm9ybSBXZWJHUFUgYXZhaWxhYmlsaXR5IGNoZWNrXG4gICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5hdmlnYXRvci5ncHUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJHUFUgaXMgbm90IHN1cHBvcnRlZCBpbiBjdXJyZW50IGVudmlyb25tZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBhZGFwdGVyID0gZW52LndlYmdwdS5hZGFwdGVyIGFzIEdQVUFkYXB0ZXIgfCBudWxsO1xuICAgICAgaWYgKCFhZGFwdGVyKSB7XG4gICAgICAgIC8vIGlmIGFkYXB0ZXIgaXMgbm90IHNldCwgcmVxdWVzdCBhIG5ldyBhZGFwdGVyLlxuICAgICAgICBjb25zdCBwb3dlclByZWZlcmVuY2UgPSBlbnYud2ViZ3B1LnBvd2VyUHJlZmVyZW5jZTtcbiAgICAgICAgaWYgKHBvd2VyUHJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkICYmIHBvd2VyUHJlZmVyZW5jZSAhPT0gJ2xvdy1wb3dlcicgJiZcbiAgICAgICAgICAgIHBvd2VyUHJlZmVyZW5jZSAhPT0gJ2hpZ2gtcGVyZm9ybWFuY2UnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBvd2VyUHJlZmVyZW5jZSBzZXR0aW5nOiBcIiR7cG93ZXJQcmVmZXJlbmNlfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9yY2VGYWxsYmFja0FkYXB0ZXIgPSBlbnYud2ViZ3B1LmZvcmNlRmFsbGJhY2tBZGFwdGVyO1xuICAgICAgICBpZiAoZm9yY2VGYWxsYmFja0FkYXB0ZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZm9yY2VGYWxsYmFja0FkYXB0ZXIgIT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JjZUZhbGxiYWNrQWRhcHRlciBzZXR0aW5nOiBcIiR7Zm9yY2VGYWxsYmFja0FkYXB0ZXJ9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcih7cG93ZXJQcmVmZXJlbmNlLCBmb3JjZUZhbGxiYWNrQWRhcHRlcn0pO1xuICAgICAgICBpZiAoIWFkYXB0ZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdGYWlsZWQgdG8gZ2V0IEdQVSBhZGFwdGVyLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgbmVlZCB0byBlbmFibGUgZmxhZyBcIi0tZW5hYmxlLXVuc2FmZS13ZWJncHVcIiBpZiB5b3UgYXJlIHVzaW5nIENocm9tZS4nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgYWRhcHRlciBpcyBzZXQsIHZhbGlkYXRlIGl0LlxuICAgICAgICBpZiAodHlwZW9mIGFkYXB0ZXIubGltaXRzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgYWRhcHRlci5mZWF0dXJlcyAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgIHR5cGVvZiBhZGFwdGVyLnJlcXVlc3REZXZpY2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgR1BVIGFkYXB0ZXIgc2V0IGluIGBlbnYud2ViZ3B1LmFkYXB0ZXJgLiBJdCBtdXN0IGJlIGEgR1BVQWRhcHRlciBvYmplY3QuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFlbnYud2FzbS5zaW1kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdOb3Qgc3VwcG9ydGVkIGZvciBXZWJHUFU9T04gYW5kIFNJTUQ9T0ZGLiBQbGVhc2Ugc2V0IGBlbnYud2FzbS5zaW1kYCB0byB0cnVlIHdoZW4gdXNpbmcgYHdlYmdwdWAgRVAnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgaW5pdEpzZXAoJ3dlYmdwdScsIGdldEluc3RhbmNlKCksIGVudiwgYWRhcHRlcik7XG4gICAgfVxuICAgIGlmIChlcE5hbWUgPT09ICd3ZWJubicpIHtcbiAgICAgIC8vIHBlcmZvcm0gV2ViTk4gYXZhaWxhYmlsaXR5IGNoZWNrXG4gICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgIShuYXZpZ2F0b3IgYXMgdW5rbm93biBhcyB7bWw6IHVua25vd259KS5tbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYk5OIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY3VycmVudCBlbnZpcm9ubWVudCcpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBpbml0SnNlcCgnd2Vibm4nLCBnZXRJbnN0YW5jZSgpLCBlbnYpO1xuICAgIH1cbiAgfVxufTtcblxuLy8gI2VuZHJlZ2lvbiBJbml0aWFsaXphdGlvbnNcblxuLyoqXG4gKiB2YWxpZCBkYXRhIGxvY2F0aW9ucyBmb3IgaW5wdXQvb3V0cHV0IHRlbnNvcnMuXG4gKi9cbnR5cGUgU3VwcG9ydGVkVGVuc29yRGF0YUxvY2F0aW9uRm9ySW5wdXRPdXRwdXQgPSAnY3B1J3wnY3B1LXBpbm5lZCd8J2dwdS1idWZmZXInO1xuXG50eXBlIElPQmluZGluZ1N0YXRlID0ge1xuICAvKipcbiAgICogdGhlIGhhbmRsZSBvZiBJTyBiaW5kaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gZm9yIGVhY2ggb3V0cHV0IHRlbnNvci5cbiAgICpcbiAgICogdmFsdWUgaXMgb25lIG9mICdjcHUnLCAnY3B1LXBpbm5lZCcsICdncHUtYnVmZmVyJy5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dFByZWZlcnJlZExvY2F0aW9uczogcmVhZG9ubHkgU3VwcG9ydGVkVGVuc29yRGF0YUxvY2F0aW9uRm9ySW5wdXRPdXRwdXRbXTtcblxuICAvKipcbiAgICogZW51bSB2YWx1ZSBvZiB0aGUgcHJlZmVycmVkIGxvY2F0aW9uIGZvciBlYWNoIG91dHB1dCB0ZW5zb3IuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNFbmNvZGVkOiByZWFkb25seSBudW1iZXJbXTtcbn07XG5cbi8qKlxuICogIHR1cGxlIGVsZW1lbnRzIGFyZTogSW5mZXJlbmNlU2Vzc2lvbiBJRDsgaW5wdXROYW1lc1VURjhFbmNvZGVkOyBvdXRwdXROYW1lc1VURjhFbmNvZGVkOyBiaW5kaW5nU3RhdGVcbiAqL1xudHlwZSBTZXNzaW9uTWV0YWRhdGEgPSBbXG4gIGluZmVyZW5jZVNlc3Npb25JZDogbnVtYmVyLCBpbnB1dE5hbWVzVVRGOEVuY29kZWQ6IG51bWJlcltdLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkOiBudW1iZXJbXSxcbiAgYmluZGluZ1N0YXRlOiBJT0JpbmRpbmdTdGF0ZXxudWxsLCBlbmFibGVHcmFwaENhcHR1cmU6IGJvb2xlYW4sIGlucHV0T3V0cHV0Qm91bmQ6IGJvb2xlYW5cbl07XG5cbmNvbnN0IGFjdGl2ZVNlc3Npb25zID0gbmV3IE1hcDxudW1iZXIsIFNlc3Npb25NZXRhZGF0YT4oKTtcblxuLyoqXG4gKiBnZXQgdGhlIGlucHV0L291dHB1dCBjb3VudCBvZiB0aGUgc2Vzc2lvbi5cbiAqIEBwYXJhbSBzZXNzaW9uSGFuZGxlIHRoZSBoYW5kbGUgcmVwcmVzZW50aW5nIHRoZSBzZXNzaW9uLiBzaG91bGQgYmUgbm9uLXplcm8uXG4gKiBAcmV0dXJucyBhIHR1cGxlIGluY2x1ZGluZyAyIG51bWJlcnMsIHJlcHJlc2VudGluZyB0aGUgaW5wdXQgY291bnQgYW5kIG91dHB1dCBjb3VudC5cbiAqL1xuY29uc3QgZ2V0U2Vzc2lvbklucHV0T3V0cHV0Q291bnQgPSAoc2Vzc2lvbkhhbmRsZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBzdGFjayA9IHdhc20uc3RhY2tTYXZlKCk7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YU9mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg4KTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSB3YXNtLl9PcnRHZXRJbnB1dE91dHB1dENvdW50KHNlc3Npb25IYW5kbGUsIGRhdGFPZmZzZXQsIGRhdGFPZmZzZXQgKyA0KTtcbiAgICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBnZXQgc2Vzc2lvbiBpbnB1dC9vdXRwdXQgY291bnQuJyk7XG4gICAgfVxuICAgIHJldHVybiBbd2FzbS5IRUFQMzJbZGF0YU9mZnNldCAvIDRdLCB3YXNtLkhFQVAzMltkYXRhT2Zmc2V0IC8gNCArIDFdXTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gIH1cbn07XG5cbi8qKlxuICogYWxsb2NhdGUgdGhlIG1lbW9yeSBhbmQgbWVtY3B5IHRoZSBleHRlcm5hbCBidWZmZXIuXG4gKlxuICogQHBhcmFtIG1vZGVsIC0gdGhlIGV4dGVybmFsIGJ1ZmZlciBjb250YWluaW5nIHRoZSBtb2RlbCBkYXRhLiBNdXN0IG5vdCBiZSB0aGUgc2FtZSBidWZmZXIgYXMgdGhlIFdBU00gaGVhcC5cbiAqIEByZXR1cm5zIGEgMi1lbGVtZW50cyB0dXBsZSAtIHRoZSBwb2ludGVyIGFuZCBzaXplIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyXG4gKi9cbmV4cG9ydCBjb25zdCBjb3B5RnJvbUV4dGVybmFsQnVmZmVyID0gKG1vZGVsOiBVaW50OEFycmF5KTogW251bWJlciwgbnVtYmVyXSA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBtb2RlbERhdGFPZmZzZXQgPSB3YXNtLl9tYWxsb2MobW9kZWwuYnl0ZUxlbmd0aCk7XG4gIGlmIChtb2RlbERhdGFPZmZzZXQgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNyZWF0ZSBhIHNlc3Npb24uIGZhaWxlZCB0byBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiBzaXplICR7bW9kZWwuYnl0ZUxlbmd0aH0uYCk7XG4gIH1cbiAgd2FzbS5IRUFQVTguc2V0KG1vZGVsLCBtb2RlbERhdGFPZmZzZXQpO1xuICByZXR1cm4gW21vZGVsRGF0YU9mZnNldCwgbW9kZWwuYnl0ZUxlbmd0aF07XG59O1xuXG4vKipcbiAqIGNyZWF0ZSBhbiBpbmZlcmVuY2Ugc2Vzc2lvbiBmcm9tIGEgbW9kZWwgZGF0YSBidWZmZXIuXG4gKlxuICogQHBhcmFtIG1vZGVsRGF0YSAtIGVpdGhlciBhIFVpbnQ4QXJyYXkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbW9kZWwgZGF0YSwgb3IgYSAyLWVsZW1lbnRzIHR1cGxlIGNvbnRhaW5pbmcgdGhlXG4gKiAgICAgcG9pbnRlciBhbmQgc2l6ZSBvZiB0aGUgbW9kZWwgZGF0YSBidWZmZXIuXG4gKiBAcGFyYW0gb3B0aW9ucyBhbiBvcHRpb25hbCBzZXNzaW9uIG9wdGlvbnMgb2JqZWN0LlxuICogQHJldHVybnMgYSAzLWVsZW1lbnRzIHR1cGxlIGNvbnRhaW5pbmcgW3Nlc3Npb24gaGFuZGxlLCBpbnB1dCBuYW1lcywgb3V0cHV0IG5hbWVzXVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2Vzc2lvbiA9IGFzeW5jKFxuICAgIG1vZGVsRGF0YTogVWludDhBcnJheXxTZXJpYWxpemFibGVJbnRlcm5hbEJ1ZmZlcixcbiAgICBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6IFByb21pc2U8U2VyaWFsaXphYmxlU2Vzc2lvbk1ldGFkYXRhPiA9PiB7XG4gIGxldCBtb2RlbERhdGFPZmZzZXQ6IG51bWJlciwgbW9kZWxEYXRhTGVuZ3RoOiBudW1iZXI7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG1vZGVsRGF0YSkpIHtcbiAgICAvLyBpZiBtb2RlbCBkYXRhIGlzIGFuIGFycmF5LCBpdCBtdXN0IGJlIGEgMi1lbGVtZW50cyB0dXBsZSBjb250YWluaW5nIHRoZSBwb2ludGVyIGFuZCBzaXplIG9mIHRoZSBtb2RlbCBkYXRhXG4gICAgW21vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoXSA9IG1vZGVsRGF0YTtcbiAgfSBlbHNlIGlmIChtb2RlbERhdGEuYnVmZmVyID09PSB3YXNtLkhFQVBVOC5idWZmZXIpIHtcbiAgICAvLyBpZiBtb2RlbCBkYXRhIHVzZXMgdGhlIHNhbWUgYnVmZmVyIGFzIHRoZSBXQVNNIGhlYXAsIHdlIGRvbid0IG5lZWQgdG8gY29weSBpdC5cbiAgICBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGhdID0gW21vZGVsRGF0YS5ieXRlT2Zmc2V0LCBtb2RlbERhdGEuYnl0ZUxlbmd0aF07XG4gIH0gZWxzZSB7XG4gICAgLy8gb3RoZXJ3aXNlLCBjb3B5IHRoZSBtb2RlbCBkYXRhIHRvIHRoZSBXQVNNIGhlYXAuXG4gICAgW21vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoXSA9IGNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIobW9kZWxEYXRhKTtcbiAgfVxuXG4gIGxldCBzZXNzaW9uSGFuZGxlID0gMDtcbiAgbGV0IHNlc3Npb25PcHRpb25zSGFuZGxlID0gMDtcbiAgbGV0IGlvQmluZGluZ0hhbmRsZSA9IDA7XG4gIGxldCBhbGxvY3M6IG51bWJlcltdID0gW107XG4gIGNvbnN0IGlucHV0TmFtZXNVVEY4RW5jb2RlZCA9IFtdO1xuICBjb25zdCBvdXRwdXROYW1lc1VURjhFbmNvZGVkID0gW107XG5cbiAgdHJ5IHtcbiAgICBbc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGFsbG9jc10gPSBzZXRTZXNzaW9uT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zPy5leHRlcm5hbERhdGEgJiYgd2FzbS5tb3VudEV4dGVybmFsRGF0YSkge1xuICAgICAgY29uc3QgbG9hZGluZ1Byb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2Ygb3B0aW9ucy5leHRlcm5hbERhdGEpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHR5cGVvZiBmaWxlID09PSAnc3RyaW5nJyA/IGZpbGUgOiBmaWxlLnBhdGg7XG4gICAgICAgIGxvYWRpbmdQcm9taXNlcy5wdXNoKGxvYWRGaWxlKHR5cGVvZiBmaWxlID09PSAnc3RyaW5nJyA/IGZpbGUgOiBmaWxlLmRhdGEpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgd2FzbS5tb3VudEV4dGVybmFsRGF0YSEocGF0aCwgZGF0YSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gd2FpdCBmb3IgYWxsIGV4dGVybmFsIGRhdGEgZmlsZXMgdG8gYmUgbG9hZGVkXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChsb2FkaW5nUHJvbWlzZXMpO1xuICAgIH1cblxuICAgIHNlc3Npb25IYW5kbGUgPSBhd2FpdCB3YXNtLl9PcnRDcmVhdGVTZXNzaW9uKG1vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoLCBzZXNzaW9uT3B0aW9uc0hhbmRsZSk7XG4gICAgaWYgKHNlc3Npb25IYW5kbGUgPT09IDApIHtcbiAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGNyZWF0ZSBhIHNlc3Npb24uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgW2lucHV0Q291bnQsIG91dHB1dENvdW50XSA9IGdldFNlc3Npb25JbnB1dE91dHB1dENvdW50KHNlc3Npb25IYW5kbGUpO1xuXG4gICAgY29uc3QgZW5hYmxlR3JhcGhDYXB0dXJlID0gISFvcHRpb25zPy5lbmFibGVHcmFwaENhcHR1cmU7XG5cbiAgICBjb25zdCBpbnB1dE5hbWVzID0gW107XG4gICAgY29uc3Qgb3V0cHV0TmFtZXMgPSBbXTtcbiAgICBjb25zdCBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnM6IFN1cHBvcnRlZFRlbnNvckRhdGFMb2NhdGlvbkZvcklucHV0T3V0cHV0W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgbmFtZSA9IHdhc20uX09ydEdldElucHV0TmFtZShzZXNzaW9uSGFuZGxlLCBpKTtcbiAgICAgIGlmIChuYW1lID09PSAwKSB7XG4gICAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGdldCBhbiBpbnB1dCBuYW1lLicpO1xuICAgICAgfVxuICAgICAgaW5wdXROYW1lc1VURjhFbmNvZGVkLnB1c2gobmFtZSk7XG4gICAgICBpbnB1dE5hbWVzLnB1c2god2FzbS5VVEY4VG9TdHJpbmcobmFtZSkpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dENvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB3YXNtLl9PcnRHZXRPdXRwdXROYW1lKHNlc3Npb25IYW5kbGUsIGkpO1xuICAgICAgaWYgKG5hbWUgPT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgZ2V0IGFuIG91dHB1dCBuYW1lLicpO1xuICAgICAgfVxuICAgICAgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZC5wdXNoKG5hbWUpO1xuICAgICAgY29uc3QgbmFtZVN0cmluZyA9IHdhc20uVVRGOFRvU3RyaW5nKG5hbWUpO1xuICAgICAgb3V0cHV0TmFtZXMucHVzaChuYW1lU3RyaW5nKTtcblxuICAgICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVKSB7XG4gICAgICAgIGlmIChlbmFibGVHcmFwaENhcHR1cmUgJiYgb3B0aW9ucz8ucHJlZmVycmVkT3V0cHV0TG9jYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5wdXNoKCdncHUtYnVmZmVyJyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0eXBlb2Ygb3B0aW9ucz8ucHJlZmVycmVkT3V0cHV0TG9jYXRpb24gPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgIG9wdGlvbnMucHJlZmVycmVkT3V0cHV0TG9jYXRpb24gOlxuICAgICAgICAgICAgb3B0aW9ucz8ucHJlZmVycmVkT3V0cHV0TG9jYXRpb24/LltuYW1lU3RyaW5nXSA/PyAnY3B1JztcbiAgICAgICAgaWYgKGxvY2F0aW9uICE9PSAnY3B1JyAmJiBsb2NhdGlvbiAhPT0gJ2NwdS1waW5uZWQnICYmIGxvY2F0aW9uICE9PSAnZ3B1LWJ1ZmZlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBzdXBwb3J0ZWQgcHJlZmVycmVkIG91dHB1dCBsb2NhdGlvbjogJHtsb2NhdGlvbn0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuYWJsZUdyYXBoQ2FwdHVyZSAmJiBsb2NhdGlvbiAhPT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3Qgc3VwcG9ydGVkIHByZWZlcnJlZCBvdXRwdXQgbG9jYXRpb246ICR7XG4gICAgICAgICAgICAgIGxvY2F0aW9ufS4gT25seSAnZ3B1LWJ1ZmZlcicgbG9jYXRpb24gaXMgc3VwcG9ydGVkIHdoZW4gZW5hYmxlR3JhcGhDYXB0dXJlIGlzIHRydWUuYCk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLnB1c2gobG9jYXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVzZSBJTyBiaW5kaW5nIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgb3V0cHV0IGlzIHByZWZmZXJlZCB0byBiZSBvbiBHUFUuXG4gICAgbGV0IGJpbmRpbmdTdGF0ZTogSU9CaW5kaW5nU3RhdGV8bnVsbCA9IG51bGw7XG4gICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVICYmIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucy5zb21lKGwgPT4gbCA9PT0gJ2dwdS1idWZmZXInKSkge1xuICAgICAgaW9CaW5kaW5nSGFuZGxlID0gd2FzbS5fT3J0Q3JlYXRlQmluZGluZyhzZXNzaW9uSGFuZGxlKTtcbiAgICAgIGlmIChpb0JpbmRpbmdIYW5kbGUgPT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgY3JlYXRlIElPIGJpbmRpbmcuJyk7XG4gICAgICB9XG5cbiAgICAgIGJpbmRpbmdTdGF0ZSA9IHtcbiAgICAgICAgaGFuZGxlOiBpb0JpbmRpbmdIYW5kbGUsXG4gICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucyxcbiAgICAgICAgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zRW5jb2RlZDogb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLm1hcChsID0+IGRhdGFMb2NhdGlvblN0cmluZ1RvRW51bShsKSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGFjdGl2ZVNlc3Npb25zLnNldChcbiAgICAgICAgc2Vzc2lvbkhhbmRsZSxcbiAgICAgICAgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgYmluZGluZ1N0YXRlLCBlbmFibGVHcmFwaENhcHR1cmUsIGZhbHNlXSk7XG4gICAgcmV0dXJuIFtzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzLCBvdXRwdXROYW1lc107XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpbnB1dE5hbWVzVVRGOEVuY29kZWQuZm9yRWFjaChidWYgPT4gd2FzbS5fT3J0RnJlZShidWYpKTtcbiAgICBvdXRwdXROYW1lc1VURjhFbmNvZGVkLmZvckVhY2goYnVmID0+IHdhc20uX09ydEZyZWUoYnVmKSk7XG5cbiAgICBpZiAoaW9CaW5kaW5nSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlQmluZGluZyhpb0JpbmRpbmdIYW5kbGUpO1xuICAgIH1cblxuICAgIGlmIChzZXNzaW9uSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbihzZXNzaW9uSGFuZGxlKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLl9mcmVlKG1vZGVsRGF0YU9mZnNldCk7XG4gICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG5cbiAgICAvLyB1bm1vdW50IGV4dGVybmFsIGRhdGEgaWYgbmVjZXNzYXJ5XG4gICAgd2FzbS51bm1vdW50RXh0ZXJuYWxEYXRhPy4oKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlbGVhc2VTZXNzaW9uID0gKHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBzZXNzaW9uID0gYWN0aXZlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlbGVhc2Ugc2Vzc2lvbi4gaW52YWxpZCBzZXNzaW9uIGlkOiAke3Nlc3Npb25JZH1gKTtcbiAgfVxuICBjb25zdCBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc1VURjhFbmNvZGVkLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkLCBpb0JpbmRpbmdTdGF0ZSwgZW5hYmxlR3JhcGhDYXB0dXJlXSA9IHNlc3Npb247XG5cbiAgaWYgKGlvQmluZGluZ1N0YXRlKSB7XG4gICAgaWYgKGVuYWJsZUdyYXBoQ2FwdHVyZSkge1xuICAgICAgd2FzbS5fT3J0Q2xlYXJCb3VuZE91dHB1dHMoaW9CaW5kaW5nU3RhdGUuaGFuZGxlKTtcbiAgICB9XG4gICAgd2FzbS5fT3J0UmVsZWFzZUJpbmRpbmcoaW9CaW5kaW5nU3RhdGUuaGFuZGxlKTtcbiAgfVxuXG4gIHdhc20uanNlcE9uUmVsZWFzZVNlc3Npb24/LihzZXNzaW9uSWQpO1xuXG4gIGlucHV0TmFtZXNVVEY4RW5jb2RlZC5mb3JFYWNoKGJ1ZiA9PiB3YXNtLl9PcnRGcmVlKGJ1ZikpO1xuICBvdXRwdXROYW1lc1VURjhFbmNvZGVkLmZvckVhY2goYnVmID0+IHdhc20uX09ydEZyZWUoYnVmKSk7XG4gIHdhc20uX09ydFJlbGVhc2VTZXNzaW9uKHNlc3Npb25IYW5kbGUpO1xuICBhY3RpdmVTZXNzaW9ucy5kZWxldGUoc2Vzc2lvbklkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmVwYXJlSW5wdXRPdXRwdXRUZW5zb3IgPVxuICAgICh0ZW5zb3I6IFRlbnNvck1ldGFkYXRhfG51bGwsIHRlbnNvckhhbmRsZXM6IG51bWJlcltdLCBhbGxvY3M6IG51bWJlcltdLCBzZXNzaW9uSWQ6IG51bWJlciwgaW5kZXg6IG51bWJlcixcbiAgICAgZW5hYmxlR3JhcGhDYXB0dXJlID0gZmFsc2UpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGVuc29yKSB7XG4gICAgICAgIHRlbnNvckhhbmRsZXMucHVzaCgwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JbMF07XG4gICAgICBjb25zdCBkaW1zID0gdGVuc29yWzFdO1xuICAgICAgY29uc3QgbG9jYXRpb24gPSB0ZW5zb3JbM107XG5cbiAgICAgIGxldCByYXdEYXRhOiBudW1iZXI7XG4gICAgICBsZXQgZGF0YUJ5dGVMZW5ndGg6IG51bWJlcjtcblxuICAgICAgaWYgKGRhdGFUeXBlID09PSAnc3RyaW5nJyAmJiBsb2NhdGlvbiA9PT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5nIHRlbnNvciBpcyBub3Qgc3VwcG9ydGVkIG9uIEdQVS4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZUdyYXBoQ2FwdHVyZSAmJiBsb2NhdGlvbiAhPT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBFeHRlcm5hbCBidWZmZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgaW5wdXQvb3V0cHV0IGluZGV4ICR7aW5kZXh9IHdoZW4gZW5hYmxlR3JhcGhDYXB0dXJlIGlzIHRydWUuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChsb2NhdGlvbiA9PT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgIGNvbnN0IGdwdUJ1ZmZlciA9IHRlbnNvclsyXS5ncHVCdWZmZXIgYXMgR1BVQnVmZmVyO1xuICAgICAgICBjb25zdCBlbGVtZW50U2l6ZUluQnl0ZXMgPSBnZXRUZW5zb3JFbGVtZW50U2l6ZSh0ZW5zb3JEYXRhVHlwZVN0cmluZ1RvRW51bShkYXRhVHlwZSkpITtcbiAgICAgICAgZGF0YUJ5dGVMZW5ndGggPSBkaW1zLnJlZHVjZSgoYSwgYikgPT4gYSAqIGIsIDEpICogZWxlbWVudFNpemVJbkJ5dGVzO1xuXG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyQnVmZmVyID0gd2FzbS5qc2VwUmVnaXN0ZXJCdWZmZXI7XG4gICAgICAgIGlmICghcmVnaXN0ZXJCdWZmZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RlbnNvciBsb2NhdGlvbiBcImdwdS1idWZmZXJcIiBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgdXNpbmcgV2ViR1BVLicpO1xuICAgICAgICB9XG4gICAgICAgIHJhd0RhdGEgPSByZWdpc3RlckJ1ZmZlcihzZXNzaW9uSWQsIGluZGV4LCBncHVCdWZmZXIsIGRhdGFCeXRlTGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0ZW5zb3JbMl07XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAvLyBzdHJpbmcgdGVuc29yXG4gICAgICAgICAgZGF0YUJ5dGVMZW5ndGggPSA0ICogZGF0YS5sZW5ndGg7XG4gICAgICAgICAgcmF3RGF0YSA9IHdhc20uX21hbGxvYyhkYXRhQnl0ZUxlbmd0aCk7XG4gICAgICAgICAgYWxsb2NzLnB1c2gocmF3RGF0YSk7XG4gICAgICAgICAgbGV0IGRhdGFJbmRleCA9IHJhd0RhdGEgLyA0O1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB0ZW5zb3IgZGF0YSBhdCBpbmRleCAke2l9IGlzIG5vdCBhIHN0cmluZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2FzbS5IRUFQVTMyW2RhdGFJbmRleCsrXSA9IGFsbG9jV2FzbVN0cmluZyhkYXRhW2ldLCBhbGxvY3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhQnl0ZUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICByYXdEYXRhID0gd2FzbS5fbWFsbG9jKGRhdGFCeXRlTGVuZ3RoKTtcbiAgICAgICAgICBhbGxvY3MucHVzaChyYXdEYXRhKTtcbiAgICAgICAgICB3YXNtLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YUJ5dGVMZW5ndGgpLCByYXdEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFjayA9IHdhc20uc3RhY2tTYXZlKCk7XG4gICAgICBjb25zdCBkaW1zT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKDQgKiBkaW1zLmxlbmd0aCk7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgZGltSW5kZXggPSBkaW1zT2Zmc2V0IC8gNDtcbiAgICAgICAgZGltcy5mb3JFYWNoKGQgPT4gd2FzbS5IRUFQMzJbZGltSW5kZXgrK10gPSBkKTtcbiAgICAgICAgY29uc3QgdGVuc29yID0gd2FzbS5fT3J0Q3JlYXRlVGVuc29yKFxuICAgICAgICAgICAgdGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0oZGF0YVR5cGUpLCByYXdEYXRhLCBkYXRhQnl0ZUxlbmd0aCwgZGltc09mZnNldCwgZGltcy5sZW5ndGgsXG4gICAgICAgICAgICBkYXRhTG9jYXRpb25TdHJpbmdUb0VudW0obG9jYXRpb24pKTtcbiAgICAgICAgaWYgKHRlbnNvciA9PT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBjcmVhdGUgdGVuc29yIGZvciBpbnB1dC9vdXRwdXQuIHNlc3Npb249JHtzZXNzaW9uSWR9LCBpbmRleD0ke2luZGV4fS5gKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW5zb3JIYW5kbGVzLnB1c2godGVuc29yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHdhc20uc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgICAgIH1cbiAgICB9O1xuXG4vKipcbiAqIHBlcmZvcm0gaW5mZXJlbmNlIHJ1blxuICovXG5leHBvcnQgY29uc3QgcnVuID0gYXN5bmMoXG4gICAgc2Vzc2lvbklkOiBudW1iZXIsIGlucHV0SW5kaWNlczogbnVtYmVyW10sIGlucHV0VGVuc29yczogVGVuc29yTWV0YWRhdGFbXSwgb3V0cHV0SW5kaWNlczogbnVtYmVyW10sXG4gICAgb3V0cHV0VGVuc29yczogQXJyYXk8VGVuc29yTWV0YWRhdGF8bnVsbD4sIG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFByb21pc2U8VGVuc29yTWV0YWRhdGFbXT4gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgY29uc3Qgc2Vzc2lvbiA9IGFjdGl2ZVNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICBpZiAoIXNlc3Npb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBydW4gaW5mZXJlbmNlLiBpbnZhbGlkIHNlc3Npb24gaWQ6ICR7c2Vzc2lvbklkfWApO1xuICB9XG4gIGNvbnN0IHNlc3Npb25IYW5kbGUgPSBzZXNzaW9uWzBdO1xuICBjb25zdCBpbnB1dE5hbWVzVVRGOEVuY29kZWQgPSBzZXNzaW9uWzFdO1xuICBjb25zdCBvdXRwdXROYW1lc1VURjhFbmNvZGVkID0gc2Vzc2lvblsyXTtcbiAgY29uc3QgaW9CaW5kaW5nU3RhdGUgPSBzZXNzaW9uWzNdO1xuICBjb25zdCBlbmFibGVHcmFwaENhcHR1cmUgPSBzZXNzaW9uWzRdO1xuICBjb25zdCBpbnB1dE91dHB1dEJvdW5kID0gc2Vzc2lvbls1XTtcblxuICBjb25zdCBpbnB1dENvdW50ID0gaW5wdXRJbmRpY2VzLmxlbmd0aDtcbiAgY29uc3Qgb3V0cHV0Q291bnQgPSBvdXRwdXRJbmRpY2VzLmxlbmd0aDtcblxuICBsZXQgcnVuT3B0aW9uc0hhbmRsZSA9IDA7XG4gIGxldCBydW5PcHRpb25zQWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0IGlucHV0VGVuc29ySGFuZGxlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgb3V0cHV0VGVuc29ySGFuZGxlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgaW5wdXRPdXRwdXRBbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgYmVmb3JlUnVuU3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICBjb25zdCBpbnB1dFZhbHVlc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyhpbnB1dENvdW50ICogNCk7XG4gIGNvbnN0IGlucHV0TmFtZXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2MoaW5wdXRDb3VudCAqIDQpO1xuICBjb25zdCBvdXRwdXRWYWx1ZXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2Mob3V0cHV0Q291bnQgKiA0KTtcbiAgY29uc3Qgb3V0cHV0TmFtZXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2Mob3V0cHV0Q291bnQgKiA0KTtcblxuICB0cnkge1xuICAgIFtydW5PcHRpb25zSGFuZGxlLCBydW5PcHRpb25zQWxsb2NzXSA9IHNldFJ1bk9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBjcmVhdGUgaW5wdXQgdGVuc29yc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRDb3VudDsgaSsrKSB7XG4gICAgICBwcmVwYXJlSW5wdXRPdXRwdXRUZW5zb3IoXG4gICAgICAgICAgaW5wdXRUZW5zb3JzW2ldLCBpbnB1dFRlbnNvckhhbmRsZXMsIGlucHV0T3V0cHV0QWxsb2NzLCBzZXNzaW9uSWQsIGlucHV0SW5kaWNlc1tpXSwgZW5hYmxlR3JhcGhDYXB0dXJlKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgb3V0cHV0IHRlbnNvcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dENvdW50OyBpKyspIHtcbiAgICAgIHByZXBhcmVJbnB1dE91dHB1dFRlbnNvcihcbiAgICAgICAgICBvdXRwdXRUZW5zb3JzW2ldLCBvdXRwdXRUZW5zb3JIYW5kbGVzLCBpbnB1dE91dHB1dEFsbG9jcywgc2Vzc2lvbklkLCBpbnB1dENvdW50ICsgb3V0cHV0SW5kaWNlc1tpXSxcbiAgICAgICAgICBlbmFibGVHcmFwaENhcHR1cmUpO1xuICAgIH1cblxuICAgIGxldCBpbnB1dFZhbHVlc0luZGV4ID0gaW5wdXRWYWx1ZXNPZmZzZXQgLyA0O1xuICAgIGxldCBpbnB1dE5hbWVzSW5kZXggPSBpbnB1dE5hbWVzT2Zmc2V0IC8gNDtcbiAgICBsZXQgb3V0cHV0VmFsdWVzSW5kZXggPSBvdXRwdXRWYWx1ZXNPZmZzZXQgLyA0O1xuICAgIGxldCBvdXRwdXROYW1lc0luZGV4ID0gb3V0cHV0TmFtZXNPZmZzZXQgLyA0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRDb3VudDsgaSsrKSB7XG4gICAgICB3YXNtLkhFQVBVMzJbaW5wdXRWYWx1ZXNJbmRleCsrXSA9IGlucHV0VGVuc29ySGFuZGxlc1tpXTtcbiAgICAgIHdhc20uSEVBUFUzMltpbnB1dE5hbWVzSW5kZXgrK10gPSBpbnB1dE5hbWVzVVRGOEVuY29kZWRbaW5wdXRJbmRpY2VzW2ldXTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICB3YXNtLkhFQVBVMzJbb3V0cHV0VmFsdWVzSW5kZXgrK10gPSBvdXRwdXRUZW5zb3JIYW5kbGVzW2ldO1xuICAgICAgd2FzbS5IRUFQVTMyW291dHB1dE5hbWVzSW5kZXgrK10gPSBvdXRwdXROYW1lc1VURjhFbmNvZGVkW291dHB1dEluZGljZXNbaV1dO1xuICAgIH1cblxuICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dFQkdQVSAmJiBpb0JpbmRpbmdTdGF0ZSAmJiAhaW5wdXRPdXRwdXRCb3VuZCkge1xuICAgICAgY29uc3Qge2hhbmRsZSwgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLCBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNFbmNvZGVkfSA9IGlvQmluZGluZ1N0YXRlO1xuXG4gICAgICBpZiAoaW5wdXROYW1lc1VURjhFbmNvZGVkLmxlbmd0aCAhPT0gaW5wdXRDb3VudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0IGNvdW50IGZyb20gZmVlZHMgKCR7XG4gICAgICAgICAgICBpbnB1dENvdW50fSkgaXMgZXhwZWN0ZWQgdG8gYmUgYWx3YXlzIGVxdWFsIHRvIG1vZGVsJ3MgaW5wdXQgY291bnQgKCR7aW5wdXROYW1lc1VURjhFbmNvZGVkLmxlbmd0aH0pLmApO1xuICAgICAgfVxuXG4gICAgICAvLyBwcm9jZXNzIGlucHV0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbnB1dEluZGljZXNbaV07XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGF3YWl0IHdhc20uX09ydEJpbmRJbnB1dChoYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZFtpbmRleF0sIGlucHV0VGVuc29ySGFuZGxlc1tpXSk7XG4gICAgICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgYmluZCBpbnB1dFske2l9XSBmb3Igc2Vzc2lvbj0ke3Nlc3Npb25JZH0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcHJvY2VzcyBwcmUtYWxsb2NhdGVkIG91dHB1dHNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBpbmRleCA9IG91dHB1dEluZGljZXNbaV07XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gb3V0cHV0VGVuc29yc1tpXT8uWzNdOyAgLy8gdW5kZWZpbmVkIG1lYW5zIG91dHB1dCBpcyBub3QgcHJlLWFsbG9jYXRlZC5cblxuICAgICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgICAvLyBvdXRwdXQgaXMgcHJlLWFsbG9jYXRlZC4gYmluZCB0aGUgdGVuc29yLlxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IHdhc20uX09ydEJpbmRPdXRwdXQoaGFuZGxlLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkW2luZGV4XSwgb3V0cHV0VGVuc29ySGFuZGxlc1tpXSwgMCk7XG4gICAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGJpbmQgcHJlLWFsbG9jYXRlZCBvdXRwdXRbJHtpfV0gZm9yIHNlc3Npb249JHtzZXNzaW9uSWR9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdXRwdXQgaXMgbm90IHByZS1hbGxvY2F0ZWQuIHJlc2V0IHByZWZlcnJlZCBsb2NhdGlvbi5cbiAgICAgICAgICBjb25zdCBlcnJvckNvZGUgPVxuICAgICAgICAgICAgICB3YXNtLl9PcnRCaW5kT3V0cHV0KGhhbmRsZSwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZFtpbmRleF0sIDAsIG91dHB1dFByZWZlcnJlZExvY2F0aW9uc0VuY29kZWRbaW5kZXhdKTtcbiAgICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgYmluZCBvdXRwdXRbJHtpfV0gdG8gJHtvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNbaV19IGZvciBzZXNzaW9uPSR7c2Vzc2lvbklkfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFjdGl2ZVNlc3Npb25zLnNldChcbiAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgaW9CaW5kaW5nU3RhdGUsIGVuYWJsZUdyYXBoQ2FwdHVyZSwgdHJ1ZV0pO1xuICAgIH1cblxuICAgIHdhc20uanNlcE9uUnVuU3RhcnQ/LihzZXNzaW9uSGFuZGxlKTtcbiAgICBsZXQgZXJyb3JDb2RlOiBudW1iZXI7XG4gICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVICYmIGlvQmluZGluZ1N0YXRlKSB7XG4gICAgICBlcnJvckNvZGUgPSBhd2FpdCB3YXNtLl9PcnRSdW5XaXRoQmluZGluZyhcbiAgICAgICAgICBzZXNzaW9uSGFuZGxlLCBpb0JpbmRpbmdTdGF0ZS5oYW5kbGUsIG91dHB1dENvdW50LCBvdXRwdXRWYWx1ZXNPZmZzZXQsIHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvckNvZGUgPSBhd2FpdCB3YXNtLl9PcnRSdW4oXG4gICAgICAgICAgc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc09mZnNldCwgaW5wdXRWYWx1ZXNPZmZzZXQsIGlucHV0Q291bnQsIG91dHB1dE5hbWVzT2Zmc2V0LCBvdXRwdXRDb3VudCxcbiAgICAgICAgICBvdXRwdXRWYWx1ZXNPZmZzZXQsIHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cblxuICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgIGNoZWNrTGFzdEVycm9yKCdmYWlsZWQgdG8gY2FsbCBPcnRSdW4oKS4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQ6IFRlbnNvck1ldGFkYXRhW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgdGVuc29yID0gd2FzbS5IRUFQVTMyW291dHB1dFZhbHVlc09mZnNldCAvIDQgKyBpXTtcbiAgICAgIGlmICh0ZW5zb3IgPT09IG91dHB1dFRlbnNvckhhbmRsZXNbaV0pIHtcbiAgICAgICAgLy8gb3V0cHV0IHRlbnNvciBpcyBwcmUtYWxsb2NhdGVkLiBubyBuZWVkIHRvIGNvcHkgZGF0YS5cbiAgICAgICAgb3V0cHV0LnB1c2gob3V0cHV0VGVuc29yc1tpXSEpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmVmb3JlR2V0VGVuc29yRGF0YVN0YWNrID0gd2FzbS5zdGFja1NhdmUoKTtcbiAgICAgIC8vIHN0YWNrIGFsbG9jYXRlIDQgcG9pbnRlciB2YWx1ZVxuICAgICAgY29uc3QgdGVuc29yRGF0YU9mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg0ICogNCk7XG5cbiAgICAgIGxldCBrZWVwT3V0cHV0VGVuc29yID0gZmFsc2U7XG4gICAgICBsZXQgdHlwZTogVGVuc29yLlR5cGV8dW5kZWZpbmVkLCBkYXRhT2Zmc2V0ID0gMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IHdhc20uX09ydEdldFRlbnNvckRhdGEoXG4gICAgICAgICAgICB0ZW5zb3IsIHRlbnNvckRhdGFPZmZzZXQsIHRlbnNvckRhdGFPZmZzZXQgKyA0LCB0ZW5zb3JEYXRhT2Zmc2V0ICsgOCwgdGVuc29yRGF0YU9mZnNldCArIDEyKTtcbiAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBhY2Nlc3Mgb3V0cHV0IHRlbnNvciBkYXRhIG9uIGluZGV4ICR7aX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRlbnNvckRhdGFJbmRleCA9IHRlbnNvckRhdGFPZmZzZXQgLyA0O1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHdhc20uSEVBUFUzMlt0ZW5zb3JEYXRhSW5kZXgrK107XG4gICAgICAgIGRhdGFPZmZzZXQgPSB3YXNtLkhFQVBVMzJbdGVuc29yRGF0YUluZGV4KytdO1xuICAgICAgICBjb25zdCBkaW1zT2Zmc2V0ID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgY29uc3QgZGltc0xlbmd0aCA9IHdhc20uSEVBUFUzMlt0ZW5zb3JEYXRhSW5kZXgrK107XG4gICAgICAgIGNvbnN0IGRpbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1zTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBkaW1zLnB1c2god2FzbS5IRUFQVTMyW2RpbXNPZmZzZXQgLyA0ICsgaV0pO1xuICAgICAgICB9XG4gICAgICAgIHdhc20uX09ydEZyZWUoZGltc09mZnNldCk7XG5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IGRpbXMucmVkdWNlKChhLCBiKSA9PiBhICogYiwgMSk7XG4gICAgICAgIHR5cGUgPSB0ZW5zb3JEYXRhVHlwZUVudW1Ub1N0cmluZyhkYXRhVHlwZSk7XG5cbiAgICAgICAgY29uc3QgcHJlZmVycmVkTG9jYXRpb24gPSBpb0JpbmRpbmdTdGF0ZT8ub3V0cHV0UHJlZmVycmVkTG9jYXRpb25zW291dHB1dEluZGljZXNbaV1dO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmIChwcmVmZXJyZWRMb2NhdGlvbiA9PT0gJ2dwdS1idWZmZXInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyB0ZW5zb3IgaXMgbm90IHN1cHBvcnRlZCBvbiBHUFUuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0cmluZ0RhdGE6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IGRhdGFJbmRleCA9IGRhdGFPZmZzZXQgLyA0O1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB3YXNtLkhFQVBVMzJbZGF0YUluZGV4KytdO1xuICAgICAgICAgICAgY29uc3QgbWF4Qnl0ZXNUb1JlYWQgPSBpID09PSBzaXplIC0gMSA/IHVuZGVmaW5lZCA6IHdhc20uSEVBUFUzMltkYXRhSW5kZXhdIC0gb2Zmc2V0O1xuICAgICAgICAgICAgc3RyaW5nRGF0YS5wdXNoKHdhc20uVVRGOFRvU3RyaW5nKG9mZnNldCwgbWF4Qnl0ZXNUb1JlYWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0cHV0LnB1c2goW3R5cGUsIGRpbXMsIHN0cmluZ0RhdGEsICdjcHUnXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgYSBjZXJ0YWluIG91dHB1dCdzIHByZWZlcnJlZCBsb2NhdGlvbiBpcyBHUFUgYnV0IHRoZSB0ZW5zb3IgaXMgZW1wdHksIHdlIHN0aWxsIG5lZWQgdG8gY3JlYXRlIGEgQ1BVXG4gICAgICAgICAgLy8gdGVuc29yIGZvciBpdC4gVGhlcmUgaXMgbm8gbWFwcGluZyBHUFUgYnVmZmVyIGZvciBhbiBlbXB0eSB0ZW5zb3IuXG4gICAgICAgICAgaWYgKHByZWZlcnJlZExvY2F0aW9uID09PSAnZ3B1LWJ1ZmZlcicgJiYgc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGdldEJ1ZmZlciA9IHdhc20uanNlcEdldEJ1ZmZlcjtcbiAgICAgICAgICAgIGlmICghZ2V0QnVmZmVyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJlZmVycmVkTG9jYXRpb24gXCJncHUtYnVmZmVyXCIgaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IHVzaW5nIFdlYkdQVS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdwdUJ1ZmZlciA9IGdldEJ1ZmZlcihkYXRhT2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTaXplID0gZ2V0VGVuc29yRWxlbWVudFNpemUoZGF0YVR5cGUpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRTaXplID09PSB1bmRlZmluZWQgfHwgIWlzR3B1QnVmZmVyU3VwcG9ydGVkVHlwZSh0eXBlKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRhdGEgdHlwZTogJHt0eXBlfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkbyBub3QgcmVsZWFzZSB0aGUgdGVuc29yIHJpZ2h0IG5vdy4gaXQgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHVzZXIgY2FsbHMgdGVuc29yLmRpc3Bvc2UoKS5cbiAgICAgICAgICAgIGtlZXBPdXRwdXRUZW5zb3IgPSB0cnVlO1xuXG4gICAgICAgICAgICBvdXRwdXQucHVzaChbXG4gICAgICAgICAgICAgIHR5cGUsIGRpbXMsIHtcbiAgICAgICAgICAgICAgICBncHVCdWZmZXIsXG4gICAgICAgICAgICAgICAgZG93bmxvYWQ6IHdhc20uanNlcENyZWF0ZURvd25sb2FkZXIhKGdwdUJ1ZmZlciwgc2l6ZSAqIGVsZW1lbnRTaXplLCB0eXBlKSxcbiAgICAgICAgICAgICAgICBkaXNwb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB3YXNtLl9PcnRSZWxlYXNlVGVuc29yKHRlbnNvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAnZ3B1LWJ1ZmZlcidcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlZEFycmF5Q29uc3RydWN0b3IgPSB0ZW5zb3JUeXBlVG9UeXBlZEFycmF5Q29uc3RydWN0b3IodHlwZSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcihzaXplKTtcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aClcbiAgICAgICAgICAgICAgICAuc2V0KHdhc20uSEVBUFU4LnN1YmFycmF5KGRhdGFPZmZzZXQsIGRhdGFPZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKFt0eXBlLCBkaW1zLCBkYXRhLCAnY3B1J10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgd2FzbS5zdGFja1Jlc3RvcmUoYmVmb3JlR2V0VGVuc29yRGF0YVN0YWNrKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIGRhdGFPZmZzZXQpIHtcbiAgICAgICAgICB3YXNtLl9mcmVlKGRhdGFPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2VlcE91dHB1dFRlbnNvcikge1xuICAgICAgICAgIHdhc20uX09ydFJlbGVhc2VUZW5zb3IodGVuc29yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpb0JpbmRpbmdTdGF0ZSAmJiAhZW5hYmxlR3JhcGhDYXB0dXJlKSB7XG4gICAgICB3YXNtLl9PcnRDbGVhckJvdW5kT3V0cHV0cyhpb0JpbmRpbmdTdGF0ZS5oYW5kbGUpO1xuICAgICAgYWN0aXZlU2Vzc2lvbnMuc2V0KFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc1VURjhFbmNvZGVkLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkLCBpb0JpbmRpbmdTdGF0ZSwgZW5hYmxlR3JhcGhDYXB0dXJlLCBmYWxzZV0pO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9IGZpbmFsbHkge1xuICAgIHdhc20uc3RhY2tSZXN0b3JlKGJlZm9yZVJ1blN0YWNrKTtcblxuICAgIGlucHV0VGVuc29ySGFuZGxlcy5mb3JFYWNoKHYgPT4gd2FzbS5fT3J0UmVsZWFzZVRlbnNvcih2KSk7XG4gICAgb3V0cHV0VGVuc29ySGFuZGxlcy5mb3JFYWNoKHYgPT4gd2FzbS5fT3J0UmVsZWFzZVRlbnNvcih2KSk7XG4gICAgaW5wdXRPdXRwdXRBbGxvY3MuZm9yRWFjaChwID0+IHdhc20uX2ZyZWUocCkpO1xuXG4gICAgaWYgKHJ1bk9wdGlvbnNIYW5kbGUgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VSdW5PcHRpb25zKHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBydW5PcHRpb25zQWxsb2NzLmZvckVhY2gocCA9PiB3YXNtLl9mcmVlKHApKTtcbiAgfVxufTtcblxuLyoqXG4gKiBlbmQgcHJvZmlsaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBlbmRQcm9maWxpbmcgPSAoc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG4gIGNvbnN0IHNlc3Npb24gPSBhY3RpdmVTZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgaWYgKCFzZXNzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNlc3Npb24gaWQnKTtcbiAgfVxuICBjb25zdCBzZXNzaW9uSGFuZGxlID0gc2Vzc2lvblswXTtcblxuICAvLyBwcm9maWxlIGZpbGUgbmFtZSBpcyBub3QgdXNlZCB5ZXQsIGJ1dCBpdCBtdXN0IGJlIGZyZWVkLlxuICBjb25zdCBwcm9maWxlRmlsZU5hbWUgPSB3YXNtLl9PcnRFbmRQcm9maWxpbmcoc2Vzc2lvbkhhbmRsZSk7XG4gIGlmIChwcm9maWxlRmlsZU5hbWUgPT09IDApIHtcbiAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBnZXQgYW4gcHJvZmlsZSBmaWxlIG5hbWUuJyk7XG4gIH1cbiAgd2FzbS5fT3J0RnJlZShwcm9maWxlRmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RUcmFuc2ZlcmFibGVCdWZmZXJzID0gKHRlbnNvcnM6IHJlYWRvbmx5IFNlcmlhbGl6YWJsZVRlbnNvck1ldGFkYXRhW10pOiBBcnJheUJ1ZmZlckxpa2VbXSA9PiB7XG4gIGNvbnN0IGJ1ZmZlcnM6IEFycmF5QnVmZmVyTGlrZVtdID0gW107XG4gIGZvciAoY29uc3QgdGVuc29yIG9mIHRlbnNvcnMpIHtcbiAgICBjb25zdCBkYXRhID0gdGVuc29yWzJdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSAmJiAnYnVmZmVyJyBpbiBkYXRhKSB7XG4gICAgICBidWZmZXJzLnB1c2goZGF0YS5idWZmZXIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYnVmZmVycztcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7cmVhZEZpbGV9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuXG4vKipcbiAqIExvYWQgYSBmaWxlIGludG8gYSBVaW50OEFycmF5LlxuICpcbiAqIEBwYXJhbSBmaWxlIC0gdGhlIGZpbGUgdG8gbG9hZC4gQ2FuIGJlIGEgVVJML3BhdGgsIGEgQmxvYiwgYW4gQXJyYXlCdWZmZXIsIG9yIGEgVWludDhBcnJheS5cbiAqIEByZXR1cm5zIGEgVWludDhBcnJheSBjb250YWluaW5nIHRoZSBmaWxlIGRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZSA9IGFzeW5jKGZpbGU6IHN0cmluZ3xCbG9ifEFycmF5QnVmZmVyTGlrZXxVaW50OEFycmF5KTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gIGlmICh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSB7XG4gICAgICAvLyBsb2FkIGZpbGUgaW50byBBcnJheUJ1ZmZlciBpbiBOb2RlLmpzXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVhZEZpbGUoZmlsZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZS5jb2RlID09PSAnRVJSX0ZTX0ZJTEVfVE9PX0xBUkdFJykge1xuICAgICAgICAgIC8vIGZpbGUgaXMgdG9vIGxhcmdlLCB1c2UgZnMuY3JlYXRlUmVhZFN0cmVhbSBpbnN0ZWFkXG4gICAgICAgICAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlKTtcbiAgICAgICAgICBjb25zdCBjaHVua3M6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuY29uY2F0KGNodW5rcykpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxvYWQgZmlsZSBpbnRvIEFycmF5QnVmZmVyIGluIGJyb3dzZXJzXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGUpO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRhdGEgZmlsZTogJHtmaWxlfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGVudExlbmd0aEhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LUxlbmd0aCcpO1xuICAgICAgY29uc3QgZmlsZVNpemUgPSBjb250ZW50TGVuZ3RoSGVhZGVyID8gcGFyc2VJbnQoY29udGVudExlbmd0aEhlYWRlciwgMTApIDogMDtcbiAgICAgIGlmIChmaWxlU2l6ZSA8IDEwNzM3NDE4MjQgLyogMUdCICovKSB7XG4gICAgICAgIC8vIHdoZW4gQ29udGVudC1MZW5ndGggaGVhZGVyIGlzIG5vdCBzZXQsIHdlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIGZpbGUgc2l6ZS4gV2UgYXNzdW1lIGl0IGlzIHNtYWxsIGVub3VnaCB0b1xuICAgICAgICAvLyBsb2FkIGludG8gbWVtb3J5LlxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmaWxlIGlzIHRvbyBsYXJnZSwgdXNlIHN0cmVhbSBpbnN0ZWFkXG4gICAgICAgIGlmICghcmVzcG9uc2UuYm9keSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGF0YSBmaWxlOiAke2ZpbGV9LCBubyByZXNwb25zZSBib2R5LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG5cbiAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyB0cnkgdG8gY3JlYXRlIEFycmF5QnVmZmVyIGRpcmVjdGx5XG4gICAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGZpbGVTaXplKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikge1xuICAgICAgICAgICAgLy8gdXNlIFdlYkFzc2VtYmx5IE1lbW9yeSB0byBhbGxvY2F0ZSBsYXJnZXIgQXJyYXlCdWZmZXJcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKGZpbGVTaXplIC8gNjU1MzYpO1xuICAgICAgICAgICAgYnVmZmVyID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogcGFnZXMsIG1heGltdW06IHBhZ2VzfSkuYnVmZmVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjaHVua1NpemUgPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBvZmZzZXQsIGNodW5rU2l6ZSk7XG4gICAgICAgICAgY2h1bmsuc2V0KHZhbHVlKTtcbiAgICAgICAgICBvZmZzZXQgKz0gY2h1bmtTaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIsIDAsIGZpbGVTaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfSBlbHNlIGlmIChmaWxlIGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpO1xuICB9IGVsc2UgaWYgKGZpbGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgcmV0dXJuIGZpbGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGZpbGUpO1xuICB9XG59O1xuIiwgImV4cG9ydCBjb25zdCByZWFkRmlsZSA9IHVuZGVmaW5lZDtleHBvcnQgY29uc3QgcmVhZEZpbGVTeW5jID0gdW5kZWZpbmVkO2V4cG9ydCBjb25zdCBjcmVhdGVSZWFkU3RyZWFtID0gdW5kZWZpbmVkOyIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuLy8vIDxyZWZlcmVuY2UgbGliPVwid2Vid29ya2VyXCIgLz5cblxuLy9cbi8vICogdHlwZSBoYWNrIGZvciBcIkhUTUxJbWFnZUVsZW1lbnRcIlxuLy9cbi8vIGluIHR5cGVzY3JpcHQsIHRoZSB0eXBlIG9mIFwiSFRNTEltYWdlRWxlbWVudFwiIGlzIGRlZmluZWQgaW4gbGliLmRvbS5kLnRzLCB3aGljaCBpcyBjb25mbGljdCB3aXRoIGxpYi53ZWJ3b3JrZXIuZC50cy5cbi8vIHdoZW4gd2UgdXNlIHdlYndvcmtlciwgdGhlIGxpYi53ZWJ3b3JrZXIuZC50cyB3aWxsIGJlIHVzZWQsIHdoaWNoIGRvZXMgbm90IGhhdmUgSFRNTEltYWdlRWxlbWVudCBkZWZpbmVkLlxuLy9cbi8vIHdlIHdpbGwgZ2V0IHRoZSBmb2xsb3dpbmcgZXJyb3JzIGNvbXBsYWluaW5nIHRoYXQgSFRNTEltYWdlRWxlbWVudCBpcyBub3QgZGVmaW5lZDpcbi8vXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy9cbi8vIC4uL2NvbW1vbi9kaXN0L2Nqcy90ZW5zb3ItZmFjdG9yeS5kLnRzOjE4NzoyOSAtIGVycm9yIFRTMjU1MjogQ2Fubm90IGZpbmQgbmFtZSAnSFRNTEltYWdlRWxlbWVudCcuIERpZCB5b3UgbWVhblxuLy8gJ0hUTUxMSUVsZW1lbnQnP1xuLy9cbi8vIDE4NyAgICAgZnJvbUltYWdlKGltYWdlRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCwgb3B0aW9ucz86IFRlbnNvckZyb21JbWFnZUVsZW1lbnRPcHRpb25zKTpcbi8vIFByb21pc2U8VHlwZWRUZW5zb3I8J2Zsb2F0MzInPiB8IFR5cGVkVGVuc29yPCd1aW50OCc+Pjtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fn5+fn5+flxuLy9cbi8vIG5vZGVfbW9kdWxlcy9Ad2ViZ3B1L3R5cGVzL2Rpc3QvaW5kZXguZC50czo4Mzo3IC0gZXJyb3IgVFMyNTUyOiBDYW5ub3QgZmluZCBuYW1lICdIVE1MSW1hZ2VFbGVtZW50Jy4gRGlkIHlvdSBtZWFuXG4vLyAnSFRNTExJRWxlbWVudCc/XG4vL1xuLy8gODMgICAgIHwgSFRNTEltYWdlRWxlbWVudFxuLy8gICAgICAgICAgfn5+fn5+fn5+fn5+fn5+flxuLy9cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vL1xuLy8gYEhUTUxJbWFnZUVsZW1lbnRgIGlzIG9ubHkgdXNlZCBpbiB0eXBlIGRlY2xhcmF0aW9uIGFuZCBub3QgaW4gcmVhbCBjb2RlLiBTbyB3ZSBkZWZpbmUgaXQgYXMgYHVua25vd25gIGhlcmUgdG9cbi8vIGJ5cGFzcyB0aGUgdHlwZSBjaGVjay5cbi8vXG5kZWNsYXJlIGdsb2JhbCB7XG4gIHR5cGUgSFRNTEltYWdlRWxlbWVudCA9IHVua25vd247XG59XG5cbmltcG9ydCB7T3J0V2FzbU1lc3NhZ2UsIFNlcmlhbGl6YWJsZVRlbnNvck1ldGFkYXRhfSBmcm9tICcuLi9wcm94eS1tZXNzYWdlcyc7XG5pbXBvcnQge2NyZWF0ZVNlc3Npb24sIGNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIsIGVuZFByb2ZpbGluZywgZXh0cmFjdFRyYW5zZmVyYWJsZUJ1ZmZlcnMsIGluaXRFcCwgaW5pdFJ1bnRpbWUsIHJlbGVhc2VTZXNzaW9uLCBydW59IGZyb20gJy4uL3dhc20tY29yZS1pbXBsJztcbmltcG9ydCB7aW5pdGlhbGl6ZVdlYkFzc2VtYmx5fSBmcm9tICcuLi93YXNtLWZhY3RvcnknO1xuXG5zZWxmLm9ubWVzc2FnZSA9IChldjogTWVzc2FnZUV2ZW50PE9ydFdhc21NZXNzYWdlPik6IHZvaWQgPT4ge1xuICBjb25zdCB7dHlwZSwgaW4gOiBtZXNzYWdlfSA9IGV2LmRhdGE7XG4gIHRyeSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdpbml0LXdhc20nOlxuICAgICAgICBpbml0aWFsaXplV2ViQXNzZW1ibHkobWVzc2FnZSEud2FzbSlcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGluaXRSdW50aW1lKG1lc3NhZ2UhKS50aGVuKFxuICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGUsIGVycn0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlLCBlcnJ9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbml0LWVwJzoge1xuICAgICAgICBjb25zdCB7ZXBOYW1lLCBlbnZ9ID0gbWVzc2FnZSE7XG4gICAgICAgIGluaXRFcChlbnYsIGVwTmFtZSlcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGUsIGVycn0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvcHktZnJvbSc6IHtcbiAgICAgICAgY29uc3Qge2J1ZmZlcn0gPSBtZXNzYWdlITtcbiAgICAgICAgY29uc3QgYnVmZmVyRGF0YSA9IGNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIoYnVmZmVyKTtcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGUsIG91dDogYnVmZmVyRGF0YX0gYXMgT3J0V2FzbU1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NyZWF0ZSc6IHtcbiAgICAgICAgY29uc3Qge21vZGVsLCBvcHRpb25zfSA9IG1lc3NhZ2UhO1xuICAgICAgICBjcmVhdGVTZXNzaW9uKG1vZGVsLCBvcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgc2Vzc2lvbk1ldGFkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlLCBvdXQ6IHNlc3Npb25NZXRhZGF0YX0gYXMgT3J0V2FzbU1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlLCBlcnJ9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdyZWxlYXNlJzpcbiAgICAgICAgcmVsZWFzZVNlc3Npb24obWVzc2FnZSEpO1xuICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZX0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3J1bic6IHtcbiAgICAgICAgY29uc3Qge3Nlc3Npb25JZCwgaW5wdXRJbmRpY2VzLCBpbnB1dHMsIG91dHB1dEluZGljZXMsIG9wdGlvbnN9ID0gbWVzc2FnZSE7XG4gICAgICAgIHJ1bihzZXNzaW9uSWQsIGlucHV0SW5kaWNlcywgaW5wdXRzLCBvdXRwdXRJbmRpY2VzLCBuZXcgQXJyYXkob3V0cHV0SW5kaWNlcy5sZW5ndGgpLmZpbGwobnVsbCksIG9wdGlvbnMpXG4gICAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgICAgICBvdXRwdXRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChvdXRwdXRzLnNvbWUobyA9PiBvWzNdICE9PSAnY3B1JykpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe3R5cGUsIGVycjogJ1Byb3h5IGRvZXMgbm90IHN1cHBvcnQgbm9uLWNwdSB0ZW5zb3IgbG9jYXRpb24uJ30pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICB7dHlwZSwgb3V0OiBvdXRwdXRzfSBhcyBPcnRXYXNtTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RUcmFuc2ZlcmFibGVCdWZmZXJzKFsuLi5pbnB1dHMsIC4uLm91dHB1dHNdIGFzIFNlcmlhbGl6YWJsZVRlbnNvck1ldGFkYXRhW10pKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7dHlwZSwgZXJyfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZW5kLXByb2ZpbGluZyc6XG4gICAgICAgIGVuZFByb2ZpbGluZyhtZXNzYWdlISk7XG4gICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHBvc3RNZXNzYWdlKHt0eXBlLCBlcnJ9IGFzIE9ydFdhc21NZXNzYWdlKTtcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEs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LE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxTQUFRLE9BQUc7QUFBQyxnQkFBRSxHQUFHLGNBQWEsR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFNBQVEsT0FBRztBQUFDLGdCQUFFLEdBQUcsT0FBTSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxTQUFRLE9BQUc7QUFBQyxnQkFBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsU0FBUSxPQUMzZjtBQUFDLGdCQUFFLEdBQUcsV0FBVSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxTQUFRLENBQUMsR0FBRSxHQUFFLE1BQUk7QUFBQyxnQkFBRSxHQUFHLGVBQWMsR0FBRSxFQUFDLE9BQU0sR0FBRSxNQUFLLEVBQUMsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLFNBQVEsT0FBRztBQUFDLGdCQUFFLEdBQUcsT0FBTSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxTQUFRLE9BQUc7QUFBQyxnQkFBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsU0FBUSxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFNBQVEsT0FBRztBQUFDLGdCQUFFLEdBQUcsT0FBTSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxTQUFRLE9BQUc7QUFBQyxnQkFBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsU0FBUSxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFNBQVEsT0FBRztBQUFDLGdCQUFFLEdBQUcsUUFBTyxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxTQUFRLE9BQUc7QUFBQyxnQkFBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsU0FBUSxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFNBQVEsT0FBRztBQUFDLGdCQUFFLEdBQUcsU0FBUSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxTQUFRLE9BQUc7QUFBQyxnQkFBRSxHQUFHLFNBQVEsR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsU0FBUSxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxTQUFRLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUN0ZixTQUFRLE9BQUc7QUFBQyxnQkFBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsU0FBUSxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFNBQVEsQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFDLGdCQUFFLEdBQUcsUUFBTyxHQUFFLEVBQUMsS0FBSSxHQUFFLEtBQUksRUFBQyxDQUFDO0FBQUEsWUFBQztBQUFBLFlBQUUsU0FBUSxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFNBQVEsQ0FBQyxHQUFFLE1BQUk7QUFBQyxnQkFBRSxHQUFHLE9BQU0sR0FBRSxFQUFDLE9BQU0sRUFBQyxDQUFDO0FBQUEsWUFBQztBQUFBLFlBQUUsU0FBUSxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFNBQVEsQ0FBQyxHQUFFLE1BQUk7QUFBQyxnQkFBRSxHQUFHLGFBQVksR0FBRSxFQUFDLE9BQU0sRUFBQyxDQUFDO0FBQUEsWUFBQztBQUFBLFlBQUUsU0FBUSxDQUFDLEdBQUUsTUFBSTtBQUFDLGdCQUFFLEdBQUcsbUJBQWtCLEdBQUUsRUFBQyxPQUFNLEVBQUMsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLFNBQVEsQ0FBQyxHQUFFLE1BQUk7QUFBQyxnQkFB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QUUsRUFBRSxJQUFFLE1BQUksQ0FBQyxHQUFFLElBQUUsR0FBRyxDQUFDO0FBQUUsd0JBQUksS0FBRyxPQUFLLE1BQUksTUFBSSxJQUFFLEtBQUcsR0FBRyxHQUFHLEdBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxTQUFPLEtBQUcsRUFBRSxLQUFLLENBQUM7QUFBQSxnQkFBQztBQUFDLHFCQUFHO0FBQUEsY0FBQztBQUFDLGdCQUFFLE1BQUksTUFBSSxDQUFDLElBQUU7QUFBRSxxQkFBTztBQUFBLFlBQUM7QUFBQSxZQUFFLElBQUc7QUFBQSxZQUFHLElBQUc7QUFBQSxZQUFHLElBQUc7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLElBQUc7QUFBQSxZQUFHLElBQUc7QUFBQSxZQUFHLElBQUc7QUFBQSxZQUFHLElBQUc7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLElBQUc7QUFBQSxZQUFHLElBQUc7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLElBQUc7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLElBQUc7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUFHLEdBQUU7QUFBQSxZQUNuZixHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxHQUFFO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFBRyxJQUFHO0FBQUEsWUFDbGYsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcsR0FBRTtBQUFBLFlBQUcsSUFBRztBQUFBLFlBQUcs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QUFFLEtBQUcsRUFBRSxZQUFVLFFBQUksS0FBRyxFQUFFLFlBQVUsRUFBRSxJQUFJLENBQUMsR0FBRSxLQUFHLEVBQUUsb0JBQWtCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLG9CQUFrQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsa0JBQWdCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsa0JBQWdCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGFBQVcsQ0FBQyxHQUFFLE9BQUssS0FBRyxFQUFFLGFBQVcsRUFBRSxJQUFJLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxlQUFhLENBQUMsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUNwZixFQUFFLGVBQWEsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsdUJBQXFCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHVCQUFxQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUscUJBQW1CLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUscUJBQW1CLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGFBQVcsQ0FBQyxHQUFFLE9BQUssS0FBRyxFQUFFLGFBQVcsRUFBRSxJQUFJLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxpQkFBZSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxpQkFBZSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsWUFBVSxRQUFJLEtBQUcsRUFBRSxZQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUUsS0FBRyxFQUFFLGNBQVksQ0FBQyxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsY0FBWSxFQUFFLElBQUksR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsdUJBQXFCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FDbmYsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx1QkFBcUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHVCQUFxQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx1QkFBcUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLG1CQUFpQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsbUJBQWlCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsbUJBQWlCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxtQkFBaUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxvQkFBa0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FB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QUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsNEJBQTBCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSw0QkFBMEIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUNyZixLQUFHLEVBQUUsd0JBQXNCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsd0JBQXNCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLCtCQUE2QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsK0JBQTZCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUscUJBQW1CLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUscUJBQW1CLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGtCQUFnQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGtCQUFnQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxzQkFBb0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUNwZixPQUFLLEtBQUcsRUFBRSxzQkFBb0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxpQkFBZSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxpQkFBZSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsa0JBQWdCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsa0JBQWdCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGlCQUFlLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGlCQUFlLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSx5QkFBdUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHlCQUF1QixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLDZCQUEyQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSw2QkFDMWUsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLDRCQUEwQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsNEJBQTBCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsMkJBQXlCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsMkJBQXlCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLDBCQUF3QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSwwQkFBd0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGdDQUE4QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUNwZixHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsZ0NBQThCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSw4QkFBNEIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSw4QkFBNEIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsNkJBQTJCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLDZCQUEyQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsZ0NBQThCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGdDQUNqZixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsd0JBQXNCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsd0JBQXNCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHFCQUFtQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHFCQUFtQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSx3QkFBc0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx3QkFBc0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsMEJBQXdCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLDBCQUF3QixFQUFFO0FBQUEsWUFBSTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUNwZjtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFVBQUMsR0FBRSxLQUFHLEVBQUUsZ0JBQWMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGdCQUFjLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLENB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RSxlQUFhLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHFCQUFtQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHFCQUFtQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxvQkFBa0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsb0JBQWtCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxvQkFBa0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsb0JBQ2hmLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxxQkFBbUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxxQkFBbUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsaUJBQWUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsaUJBQWUsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHVCQUFxQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx1QkFBcUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLG1CQUFpQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsbUJBQWlCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUseUJBQXVCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx5QkFBdUIsRUFBRTtBQUFBLFlBQUk7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFDbmY7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFVBQUMsR0FBRSxLQUFHLEVBQUUsMEJBQXdCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLDBCQUF3QixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsY0FBWSxDQUFDLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxjQUFZLEVBQUUsSUFBSSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxlQUFhLENBQUMsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsZUFBYSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxlQUFhLENBQUMsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsZUFBYSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxlQUFhLENBQUMsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsZUFBYSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxxQkFBbUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxxQkFBbUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUscUNBQ2xmLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLElBQUcsSUFBRyxRQUFNLEtBQUcsRUFBRSxxQ0FBbUMsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxJQUFHLElBQUcsRUFBRSxHQUFFLEtBQUcsRUFBRSxpQkFBZSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxpQkFBZSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsd0JBQXNCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsd0JBQXNCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHdCQUFzQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHdCQUFzQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxnQ0FDM2QsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsZ0NBQThCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSx3QkFBc0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx3QkFBc0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUseUJBQXVCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx5QkFBdUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSw4QkFBNEIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSw4QkFBNEIsRUFBRTtBQUFBLFlBQUk7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQ3BmO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsWUFBRTtBQUFBLFlBQUU7QUFBQSxZQUFFO0FBQUEsVUFBQyxHQUFFLEtBQUcsRUFBRSwrQkFBNkIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLCtCQUE2QixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLDJCQUF5QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLDJCQUF5QixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSw0QkFBMEIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLDRCQUEwQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxD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RSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLG1CQUFpQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsbUJBQWlCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsaUJBQWUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsaUJBQWUsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGlCQUFlLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGlCQUFlLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSx1QkFBcUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsdUJBQXFCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxtQkFBaUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLG1CQUNuZixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHNCQUFvQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsc0JBQW9CLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsa0JBQWdCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsa0JBQWdCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHdCQUFzQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHdCQUFzQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxrQkFBZ0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxrQkFBZ0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsa0JBQWdCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsa0JBQWdCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGNBQzdlLENBQUMsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGNBQVksRUFBRSxJQUFJLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGVBQWEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxlQUFhLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGVBQWEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxlQUFhLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGVBQWEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxlQUFhLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGdCQUFjLENBQUMsR0FBRSxHQUFFLEdBQUUs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LEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUNuYyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxZQUFZLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLDBCQUFZLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMseUJBQVcsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxH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LGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUNsZixtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUUscUJBQU87QUFBQSxZQUFFO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUN6ZCxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDM1ksbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDN2MsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQzdkLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBRSxxQkFBTztBQUFBLFlBQUU7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUNsZCxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUNsZixtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQzFaLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBRSxxQkFBTztBQUFBLFlBQUU7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFB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R0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDM1osbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUN4YyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQzdlLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDdGQsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQ3ZaLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDL2IsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDdlksbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDM2QsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBRSxxQkFBTztBQUFBLFlBQUU7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDM2EsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FB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QUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUN0YSxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUN0YixtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUMzZCxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdB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QUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDdlosbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDdmIsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDdFYsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUNsZSxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFFLHFCQUFPO0FBQUEsWUFBRTtBQUFBLFVBQUM7QUFDbmEsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDN1osbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQ3BaLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDbmQsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUUscUJBQU87QUFBQSxZQUFFO0FBQUEsVUFBQztBQUM3YixtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQ3BkLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxpQkFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLGlCQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUNsZCxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMscUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFFLHFCQUFPO0FBQUEsWUFBRTtBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQzdZLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFFLGdCQUFHO0FBQUMsaUJBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGtCQUFHLE1BQUksSUFBRTtBQUFFLHNCQUFNO0FBQUUsZ0JBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUUsZ0JBQUc7QUFBQyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxTQUFPLEdBQUU7QUFBQyxnQkFBRSxDQUFDO0FBQUUsa0JBQUcsTUFBSSxJQUFFO0FBQUUsc0JBQU07QUFBRSxnQkFBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUU7QUFBRSxnQkFBRztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDLFNBQU8sR0FBRTtBQUFDLGdCQUFFLENBQUM7QUFBRSxrQkFBRyxNQUFJLElBQUU7QUFBRSxzQkFBTTtBQUFFLGdCQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsS0FBSTtBQUFDLGdCQUFJLElBQUU7QUFBRSxnQkFBRSxPQUFPLE9BQU8sQ0FBQyxHQUFFLENBQUM7QUFBRSxnQkFBSSxJQUFFLE9BQUcsT0FBRyxFQUFFLENBQUMsTUFBSTtBQUFFLGNBQUUsS0FBRyxFQUFFLEVBQUUsRUFBRTtBQUFFLGNBQUUsS0FBRyxFQUFFLEVBQUUsRUFBRTtBQUFFLGNBQUUsS0FBRyxFQUFFLEVBQUUsRUFBRTtBQUFFLGNBQUUsTUFBSSxPQUFHLE1BQUksRUFBRSxNQUFJLEdBQUcsRUFBRSxFQUFFO0FBQUUsbUJBQU87QUFBQSxVQUFDO0FBQUMsWUFBRSxZQUFVLE1BQUksRUFBRTtBQUFFLFlBQUUsZUFBYSxPQUFHLEVBQUUsQ0FBQztBQUNwZixZQUFFLGFBQVcsT0FBRyxHQUFHLENBQUM7QUFBRSxZQUFFLGVBQWE7QUFBRSxZQUFFLGVBQWEsQ0FBQyxHQUFFLEdBQUUsTUFBSSxFQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxZQUFFLGtCQUFnQjtBQUFHLGNBQUk7QUFBRyxlQUFHLFNBQVMsS0FBSTtBQUFDLGtCQUFJLEdBQUc7QUFBRSxtQkFBSyxLQUFHO0FBQUEsVUFBRztBQUFFLG1CQUFTLEtBQUk7QUFBQyxnQkFBRyxFQUFFLElBQUUsS0FBSTtBQUFDLGtCQUFHLEVBQUU7QUFBTyxxQkFBSSxjQUFZLE9BQU8sRUFBRSxXQUFTLEVBQUUsU0FBTyxDQUFDLEVBQUUsTUFBTSxJQUFHLEVBQUUsT0FBTyxVQUFRO0FBQUMsc0JBQUksSUFBRSxFQUFFLE9BQU8sTUFBTTtBQUFFLHFCQUFHLFFBQVEsQ0FBQztBQUFBLGdCQUFDO0FBQUMscUJBQUssSUFBRSxHQUFHO0FBQVEsbUJBQUcsTUFBTSxFQUFFLENBQUM7QUFBRSxrQkFBRyxFQUFFLElBQUUsTUFBSSxPQUFLLEtBQUcsTUFBRyxFQUFFLFlBQVUsTUFBRyxLQUFJO0FBQUMsdUJBQUssSUFBRSxHQUFHO0FBQVEscUJBQUcsTUFBTSxFQUFFLENBQUM7QUFBRSxxQkFBSSxHQUFHLENBQUMsR0FBRSxJQUFFLEdBQUc7QUFBUSxxQkFBRyxNQUFNLEVBQUUsQ0FBQztBQUFBLGNBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLGFBQUc7QUFHbmIsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFFQSxHQUFHO0FBQ0gsVUFBSSxPQUFPLFlBQVksWUFBWSxPQUFPLFdBQVc7QUFDbkQsZUFBTyxVQUFVO0FBQUEsZUFDVixPQUFPLFdBQVcsY0FBYyxPQUFPLEtBQUs7QUFDbkQsZUFBTyxDQUFDLEdBQUcsTUFBTSxPQUFPO0FBQUE7QUFBQTs7O0FDN0sxQjtBQUFBO0FBQUE7QUFBQTs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFBYTtBQUFiO0FBQUE7QUFBTyxNQUFNLE9BQU87QUFBQTtBQUFBOzs7QUNBcEI7QUFBQTtBQUFBO0FBQ0EsVUFBSSxtQkFBbUIsTUFBTTtBQUMzQixZQUFJLGFBQWEsT0FBTyxhQUFhLGVBQWUsU0FBUyxnQkFBZ0IsU0FBUyxjQUFjLE1BQU07QUFDMUcsWUFBSSxPQUFPLGVBQWU7QUFBYSx1QkFBYSxjQUFjO0FBQ2xFLGVBQ0YsU0FBUyxZQUFZLENBQUMsR0FBRztBQUV6QixtQkFBUyxJQUFHO0FBQUMsY0FBRSxVQUFRLEVBQUUsVUFBUSxFQUFFO0FBQUUsbUJBQU87QUFBQSxVQUFDO0FBQUMsbUJBQVMsSUFBRztBQUFDLGNBQUUsVUFBUSxFQUFFLFVBQVEsRUFBRTtBQUFFLG1CQUFPO0FBQUEsVUFBRTtBQUFDLG1CQUFTLElBQUc7QUFBQyxjQUFFLFVBQVEsRUFBRSxVQUFRLEVBQUU7QUFBRSxtQkFBTztBQUFBLFVBQUU7QUFBQyxtQkFBUyxJQUFHO0FBQUMsY0FBRSxVQUFRLEVBQUUsVUFBUSxFQUFFO0FBQUUsbUJBQU87QUFBQSxVQUFFO0FBQUMsbUJBQVMsS0FBSTtBQUFDLGNBQUUsVUFBUSxFQUFFLFVBQVEsRUFBRTtBQUFFLG1CQUFPO0FBQUEsVUFBRTtBQUFDLGNBQUksSUFBRSxXQUFVLElBQUc7QUFBRSxZQUFFLFFBQU0sSUFBSSxRQUFRLENBQUMsR0FBRSxNQUFJO0FBQUMsaUJBQUc7QUFBRSxnQkFBRTtBQUFBLFVBQUMsQ0FBQztBQUFFO0FBQ3ZTLFlBQUUsV0FBUyxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsTUFBSTtBQUFDLGNBQUUsS0FBRztBQUFFLGNBQUUsS0FBRztBQUFFLGNBQUUsS0FBRztBQUFFLGNBQUUsS0FBRztBQUFFLGNBQUUsS0FBRztBQUFFLGNBQUUsS0FBRztBQUFFLGNBQUUsS0FBRztBQUFFLGNBQUUsS0FBRztBQUFFLGdCQUFFLENBQUMsR0FBRSxHQUFFLE1BQUksSUFBSSxNQUFJO0FBQUMsb0JBQU0sSUFBRSxHQUFFLElBQUUsSUFBSTtBQUFFLGtCQUFFLEVBQUUsR0FBRyxDQUFDO0FBQUUsb0JBQU0sSUFBRSxJQUFJO0FBQUUsb0JBQUksTUFBSSxJQUFFLEdBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxJQUFFO0FBQU0scUJBQU8sS0FBRyxJQUFFLEdBQUcsSUFBRTtBQUFBLFlBQUM7QUFBRSxnQkFBRSxPQUFHLFVBQVMsTUFBSTtBQUFDLGtCQUFHO0FBQUMsb0JBQUcsRUFBRTtBQUFHLHdCQUFNLE1BQU0seUJBQXlCO0FBQUUsc0JBQU0sSUFBRSxFQUFFLEtBQUcsRUFBQyxJQUFHLEVBQUUsQ0FBQyxHQUFFLFFBQU8sQ0FBQyxFQUFDLEdBQUUsSUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQUUsb0JBQUcsRUFBRSxPQUFLO0FBQUUsd0JBQU0sTUFBTSxrQkFBa0I7QUFBRSxrQkFBRSxNQUFNO0FBQUUsc0JBQU0sSUFBRSxFQUFFO0FBQU8sb0JBQUcsSUFBRSxFQUFFLFFBQU87QUFBQyxzQkFBSSxJQUFFLE1BQU0sUUFBUSxJQUFJLENBQUM7QUFBRSxzQkFBRSxFQUFFLE9BQU8sT0FBRyxDQUFDO0FBQUUsc0JBQUcsSUFBRSxFQUFFO0FBQU8sMEJBQU0sTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQUEsZ0JBQUU7QUFBQyx1QkFBTztBQUFBLGNBQUMsVUFBQztBQUFRLGtCQUFFLEtBQ3pmO0FBQUEsY0FBSTtBQUFBLFlBQUM7QUFBRSxjQUFFLFVBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUSxNQUFJLEVBQUUsU0FBUSxPQUFHLEVBQUUsVUFBUSxDQUFDLENBQUM7QUFBRSxjQUFFLHFCQUFtQixFQUFFLEVBQUUsRUFBRSxvQkFBbUIsTUFBSSxFQUFFLG9CQUFtQixPQUFHLEVBQUUscUJBQW1CLENBQUMsQ0FBQztBQUFFLGNBQUUsZ0JBQWMsRUFBRSxFQUFFLGVBQWMsTUFBSSxFQUFFLGVBQWMsT0FBRyxFQUFFLGdCQUFjLENBQUM7QUFBRSxjQUFFLHFCQUFtQixDQUFDLEdBQUUsR0FBRSxHQUFFLE1BQUksRUFBRSxlQUFlLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxjQUFFLHdCQUFzQixPQUFHO0FBQUMsZ0JBQUUsa0JBQWtCLENBQUM7QUFBQSxZQUFDO0FBQUUsY0FBRSxnQkFBYyxPQUFHLEVBQUUsVUFBVSxDQUFDO0FBQUUsY0FBRSx1QkFBcUIsQ0FBQyxHQUFFLEdBQUUsTUFBSSxFQUFFLGlCQUFpQixHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFDdGIsY0FBSSxLQUFHLE9BQU8sT0FBTyxDQUFDLEdBQUUsQ0FBQyxHQUFFLEtBQUcsa0JBQWlCLElBQUUsQ0FBQyxHQUFFLE1BQUk7QUFBQyxrQkFBTTtBQUFBLFVBQUUsR0FBRSxLQUFHLFlBQVUsT0FBTyxRQUFPLElBQUUsY0FBWSxPQUFPLGVBQWMsSUFBRSxZQUFVLE9BQU8sV0FBUyxZQUFVLE9BQU8sUUFBUSxZQUFVLFlBQVUsT0FBTyxRQUFRLFNBQVMsTUFBSyxJQUFFLEVBQUUsMEJBQXdCLE9BQUcsSUFBRTtBQUFHLG1CQUFTLEdBQUcsR0FBRTtBQUFDLG1CQUFPLEVBQUUsYUFBVyxFQUFFLFdBQVcsR0FBRSxDQUFDLElBQUUsSUFBRTtBQUFBLFVBQUM7QUFBQyxjQUFJLElBQUcsR0FBRTtBQUM3VSxjQUFHLEdBQUU7QUFBQyxnQkFBSSxLQUFHLHVDQUFjLEtBQUc7QUFBZ0IsZ0JBQUUsSUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFFLE1BQUksWUFBVTtBQUFJLGlCQUFHLENBQUMsR0FBRSxNQUFJO0FBQUMsa0JBQUUsRUFBRSxXQUFXLFNBQVMsSUFBRSxJQUFJLElBQUksQ0FBQyxJQUFFLEdBQUcsVUFBVSxDQUFDO0FBQUUscUJBQU8sR0FBRyxhQUFhLEdBQUUsSUFBRSxTQUFPLE1BQU07QUFBQSxZQUFDO0FBQUUsaUJBQUcsT0FBRztBQUFDLGtCQUFFLEdBQUcsR0FBRSxJQUFFO0FBQUUsZ0JBQUUsV0FBUyxJQUFFLElBQUksV0FBVyxDQUFDO0FBQUcscUJBQU87QUFBQSxZQUFDO0FBQUUsZ0JBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxJQUFFLFNBQUs7QUFBQyxrQkFBRSxFQUFFLFdBQVcsU0FBUyxJQUFFLElBQUksSUFBSSxDQUFDLElBQUUsR0FBRyxVQUFVLENBQUM7QUFBRSxpQkFBRyxTQUFTLEdBQUUsSUFBRSxTQUFPLFFBQU8sQ0FBQyxHQUFFLE1BQUk7QUFBQyxvQkFBRSxFQUFFLENBQUMsSUFBRSxFQUFFLElBQUUsRUFBRSxTQUFPLENBQUM7QUFBQSxjQUFDLENBQUM7QUFBQSxZQUFDO0FBQUUsYUFBQyxFQUFFLGVBQWEsSUFBRSxRQUFRLEtBQUssV0FBUyxLQUFHLFFBQVEsS0FBSyxDQUFDLEVBQUUsUUFBUSxPQUFNLEdBQUc7QUFBRyxvQkFBUSxLQUFLLE1BQU0sQ0FBQztBQUFFLGdCQUFFLENBQUMsR0FBRSxNQUFJO0FBQUMsc0JBQVEsV0FDdGY7QUFBRSxvQkFBTTtBQUFBLFlBQUU7QUFBRSxjQUFFLFVBQVEsTUFBSTtBQUE2QixnQkFBSTtBQUFFLGdCQUFHO0FBQUMsa0JBQUU7QUFBQSxZQUF5QixTQUFPLEdBQUU7QUFBQyxvQkFBTSxRQUFRLE1BQU0seUdBQXlHLEdBQUU7QUFBQSxZQUFFO0FBQUMsbUJBQU8sU0FBTyxFQUFFO0FBQUEsVUFBTSxXQUFTLE1BQUk7QUFBRSxnQkFBRSxJQUFFLEtBQUssU0FBUyxPQUFLLGVBQWEsT0FBTyxZQUFVLFNBQVMsa0JBQWdCLElBQUUsU0FBUyxjQUFjLE1BQU0sT0FBTyxlQUFlLGVBQWUsZUFBYyxJQUFFLGFBQVksTUFBSSxFQUFFLFFBQVEsT0FBTyxJQUFFLElBQUUsRUFBRSxPQUFPLEdBQUUsRUFBRSxRQUFRLFVBQVMsRUFBRSxFQUFFLFlBQVksR0FBRyxJQUFFLENBQUMsSUFBRSxJQUFFLElBQUcsTUFBSSxLQUFHLE9BQUc7QUFBQyxrQkFBSSxJQUM5aEIsSUFBSTtBQUFlLGdCQUFFLEtBQUssT0FBTSxHQUFFLEtBQUU7QUFBRSxnQkFBRSxLQUFLLElBQUk7QUFBRSxxQkFBTyxFQUFFO0FBQUEsWUFBWSxHQUFFLE1BQUksS0FBRyxPQUFHO0FBQUMsa0JBQUksSUFBRSxJQUFJO0FBQWUsZ0JBQUUsS0FBSyxPQUFNLEdBQUUsS0FBRTtBQUFFLGdCQUFFLGVBQWE7QUFBYyxnQkFBRSxLQUFLLElBQUk7QUFBRSxxQkFBTyxJQUFJLFdBQVcsRUFBRSxRQUFRO0FBQUEsWUFBQyxJQUFHLElBQUUsQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFDLGtCQUFJLElBQUUsSUFBSTtBQUFlLGdCQUFFLEtBQUssT0FBTSxHQUFFLElBQUU7QUFBRSxnQkFBRSxlQUFhO0FBQWMsZ0JBQUUsU0FBTyxNQUFJO0FBQUMsdUJBQUssRUFBRSxVQUFRLEtBQUcsRUFBRSxVQUFRLEVBQUUsV0FBUyxFQUFFLEVBQUUsUUFBUSxJQUFFLEVBQUU7QUFBQSxjQUFDO0FBQUUsZ0JBQUUsVUFBUTtBQUFFLGdCQUFFLEtBQUssSUFBSTtBQUFBLFlBQUM7QUFBRyxlQUFHLGVBQWEsT0FBTyxnQkFBYyxPQUFPLGNBQVkscUJBQXNCO0FBQ3JkLGNBQUksS0FBRyxRQUFRLElBQUksS0FBSyxPQUFPLEdBQUUsS0FBRyxRQUFRLE1BQU0sS0FBSyxPQUFPO0FBQUUsZ0JBQUksS0FBRyxJQUFJLE1BQUksR0FBRyxVQUFVLEdBQUUsRUFBRSxLQUFLLEdBQUcsSUFBRSxJQUFJLEdBQUUsS0FBRyxJQUFJLE1BQUksR0FBRyxVQUFVLEdBQUUsRUFBRSxLQUFLLEdBQUcsSUFBRSxJQUFJO0FBQUcsY0FBSSxLQUFHLEVBQUUsU0FBTyxJQUFHLElBQUUsRUFBRSxZQUFVO0FBQUcsaUJBQU8sT0FBTyxHQUFFLEVBQUU7QUFBRSxlQUFHO0FBQUssWUFBRSxnQkFBYyxLQUFHLEVBQUU7QUFBYSxZQUFFLFNBQU8sSUFBRSxFQUFFO0FBQU0sY0FBSTtBQUFFLFlBQUUsZUFBYSxJQUFFLEVBQUU7QUFBWSxjQUFJLGdCQUFjLEVBQUUsaUJBQWU7QUFBRyxzQkFBVSxPQUFPLGVBQWEsRUFBRSxpQ0FBaUM7QUFBRSxjQUFJLEdBQUUsR0FBRSxJQUFHLElBQUUsT0FBRyxHQUFFLEdBQUUsSUFBRyxJQUFHLElBQUc7QUFDN2IsbUJBQVMsSUFBRztBQUFDLGdCQUFJLElBQUUsRUFBRTtBQUFPLGNBQUUsUUFBTSxJQUFFLElBQUksVUFBVSxDQUFDO0FBQUUsY0FBRSxTQUFPLElBQUksV0FBVyxDQUFDO0FBQUUsY0FBRSxTQUFPLEtBQUcsSUFBSSxXQUFXLENBQUM7QUFBRSxjQUFFLFNBQU8sS0FBRyxJQUFJLFdBQVcsQ0FBQztBQUFFLGNBQUUsVUFBUSxJQUFJLFlBQVksQ0FBQztBQUFFLGNBQUUsVUFBUSxLQUFHLElBQUksWUFBWSxDQUFDO0FBQUUsY0FBRSxVQUFRLElBQUksYUFBYSxDQUFDO0FBQUUsY0FBRSxVQUFRLEtBQUcsSUFBSSxhQUFhLENBQUM7QUFBQSxVQUFDO0FBQUMsY0FBSSxLQUFHLEVBQUUsa0JBQWdCO0FBQVMscUJBQVMsTUFBSSxFQUFFLDBEQUF3RCxLQUFHLHdCQUF3QjtBQUM5WSxjQUFHO0FBQUUsZ0JBQUUsRUFBRTtBQUFBLG1CQUFtQixFQUFFO0FBQVcsZ0JBQUUsRUFBRTtBQUFBLG1CQUFtQixJQUFFLElBQUksWUFBWSxPQUFPLEVBQUMsU0FBUSxLQUFHLE9BQU0sU0FBUSxPQUFNLFFBQU8sS0FBRSxDQUFDLEdBQUUsRUFBRSxFQUFFLGtCQUFrQjtBQUFtQixrQkFBTSxFQUFFLDZOQUE2TixHQUFFLEtBQUcsRUFBRSwyR0FBMkcsR0FDcmdCLE1BQU0sWUFBWTtBQUFFLFlBQUU7QUFBRSxlQUFHLEVBQUUsT0FBTztBQUFXLGNBQUksS0FBRyxDQUFDLEdBQUUsS0FBRyxDQUFDLEdBQUUsS0FBRyxDQUFDLEdBQUUsS0FBRztBQUFFLG1CQUFTLEtBQUk7QUFBQyxtQkFBTyxpQkFBZSxJQUFFO0FBQUEsVUFBRTtBQUFDLGNBQUksSUFBRSxHQUFFLEtBQUcsTUFBSyxJQUFFO0FBQUssbUJBQVMsS0FBSTtBQUFDO0FBQUksY0FBRSwwQkFBd0IsRUFBRSx1QkFBdUIsQ0FBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxLQUFJO0FBQUM7QUFBSSxjQUFFLDBCQUF3QixFQUFFLHVCQUF1QixDQUFDO0FBQUUsZ0JBQUcsS0FBRyxNQUFJLFNBQU8sT0FBSyxjQUFjLEVBQUUsR0FBRSxLQUFHLE9BQU0sSUFBRztBQUFDLGtCQUFJLElBQUU7QUFBRSxrQkFBRTtBQUFLLGdCQUFFO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFDbFcsbUJBQVMsRUFBRSxHQUFFO0FBQUMsZ0JBQUcsRUFBRTtBQUFRLGdCQUFFLFFBQVEsQ0FBQztBQUFFLGdCQUFFLGFBQVcsSUFBRTtBQUFJLGNBQUUsQ0FBQztBQUFFLGdCQUFFO0FBQUcsZ0JBQUU7QUFBRSxnQkFBRSxJQUFJLFlBQVksYUFBYSxJQUFFLDBDQUEwQztBQUFFLGNBQUUsQ0FBQztBQUFFLGtCQUFNO0FBQUEsVUFBRTtBQUFDLG1CQUFTLEdBQUcsR0FBRTtBQUFDLG1CQUFPLEVBQUUsV0FBVyx1Q0FBdUM7QUFBQSxVQUFDO0FBQUMsY0FBSTtBQUFFLGNBQUU7QUFBOEIsYUFBRyxDQUFDLE1BQUksSUFBRSxHQUFHLENBQUM7QUFBRyxtQkFBUyxHQUFHLEdBQUU7QUFBQyxnQkFBRyxLQUFHLEtBQUc7QUFBRSxxQkFBTyxJQUFJLFdBQVcsQ0FBQztBQUFFLGdCQUFHO0FBQUcscUJBQU8sR0FBRyxDQUFDO0FBQUUsa0JBQUs7QUFBQSxVQUFrRDtBQUNwYSxtQkFBUyxHQUFHLEdBQUU7QUFBQyxnQkFBRyxDQUFDLE1BQUksTUFBSSxJQUFHO0FBQUMsa0JBQUcsY0FBWSxPQUFPLFNBQU8sQ0FBQyxFQUFFLFdBQVcsU0FBUztBQUFFLHVCQUFPLE1BQU0sR0FBRSxFQUFDLGFBQVksY0FBYSxDQUFDLEVBQUUsS0FBSyxPQUFHO0FBQUMsc0JBQUcsQ0FBQyxFQUFFO0FBQUcsMEJBQUsseUNBQXVDLElBQUU7QUFBSSx5QkFBTyxFQUFFLFlBQVk7QUFBQSxnQkFBQyxDQUFDLEVBQUUsTUFBTSxNQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQUUsa0JBQUc7QUFBRSx1QkFBTyxJQUFJLFFBQVEsQ0FBQyxHQUFFLE1BQUk7QUFBQyxvQkFBRSxHQUFFLE9BQUcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDLEdBQUUsQ0FBQztBQUFBLGdCQUFDLENBQUM7QUFBQSxZQUFDO0FBQUMsbUJBQU8sUUFBUSxRQUFRLEVBQUUsS0FBSyxNQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxtQkFBTyxHQUFHLENBQUMsRUFBRSxLQUFLLE9BQUcsWUFBWSxZQUFZLEdBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFHLENBQUMsRUFBRSxLQUFLLEdBQUUsT0FBRztBQUFDLGdCQUFFLDRDQUEwQyxDQUFDO0FBQUUsZ0JBQUUsQ0FBQztBQUFBLFlBQUMsQ0FBQztBQUFBLFVBQUM7QUFDMWUsbUJBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxnQkFBSSxJQUFFO0FBQUUsbUJBQU8sS0FBRyxjQUFZLE9BQU8sWUFBWSx3QkFBc0IsR0FBRyxDQUFDLEtBQUcsRUFBRSxXQUFXLFNBQVMsS0FBRyxLQUFHLGNBQVksT0FBTyxRQUFNLEdBQUcsR0FBRSxHQUFFLENBQUMsSUFBRSxNQUFNLEdBQUUsRUFBQyxhQUFZLGNBQWEsQ0FBQyxFQUFFLEtBQUssT0FBRyxZQUFZLHFCQUFxQixHQUFFLENBQUMsRUFBRSxLQUFLLEdBQUUsU0FBUyxHQUFFO0FBQUMsZ0JBQUUsb0NBQWtDLENBQUM7QUFBRSxnQkFBRSwyQ0FBMkM7QUFBRSxxQkFBTyxHQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxDQUFDLENBQUM7QUFBQSxVQUFDO0FBQzdXLGNBQUksR0FBRSxLQUFHO0FBQUEsWUFBQyxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsU0FBUSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxjQUFhLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsUUFBTyxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsV0FBVSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsT0FBTSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFO0FBQUEsZ0JBQUc7QUFBQSxnQkFDeGY7QUFBQSxnQkFBRTtBQUFBLGNBQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsUUFBTyxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLFNBQVEsR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxTQUFRLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsU0FBUSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFDLGdCQUFFLEdBQUcsV0FBVSxHQUFFLEVBQUMsS0FBSSxHQUFFLEtBQUksRUFBQyxDQUFDO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFFLE1BQUk7QUFBQyxnQkFBRSxHQUFHLE9BQU0sR0FBRSxFQUFDLE9BQU0sRUFBQyxDQUFDO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFFLE1BQUk7QUFBQyxnQkFBRSxHQUFHLGFBQVksR0FBRSxFQUFDLE9BQU0sRUFBQyxDQUFDO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxDQUFDLEdBQUUsTUFDbmY7QUFBQyxnQkFBRSxHQUFHLG1CQUFrQixHQUFFLEVBQUMsT0FBTSxFQUFDLENBQUM7QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLENBQUMsR0FBRSxNQUFJO0FBQUMsZ0JBQUUsR0FBRyxRQUFPLEdBQUUsRUFBQyxJQUFHLEVBQUMsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsT0FBTSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsT0FBTSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxTQUFRLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsV0FBVSxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLGtCQUFpQixHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxlQUFjLEdBQUUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQyxnQkFBRSxHQUFHLGNBQWEsR0FBRTtBQUFBLGdCQUFDLFVBQVMsQ0FBQyxDQUFDO0FBQUEsZ0JBQUUsbUJBQWtCLENBQUMsQ0FBQztBQUFBLGdCQUMzZixNQUFLLElBQUUsTUFBTSxLQUFLLEVBQUUsRUFBRSxTQUFTLE1BQUksR0FBRSxJQUFFLE1BQUksQ0FBQyxDQUFDLElBQUUsQ0FBQztBQUFBLGNBQUMsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQyxnQkFBRSxHQUFHLGFBQVksR0FBRSxFQUFDLFVBQVMsQ0FBQyxDQUFDLEdBQUUsbUJBQWtCLENBQUMsQ0FBQyxHQUFFLE1BQUssSUFBRSxNQUFNLEtBQUssRUFBRSxFQUFFLFNBQVMsTUFBSSxHQUFFLElBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQyxnQkFBRSxHQUFHLGFBQVksR0FBRSxFQUFDLFVBQVMsQ0FBQyxDQUFDLEdBQUUsbUJBQWtCLENBQUMsQ0FBQyxHQUFFLE1BQUssSUFBRSxNQUFNLEtBQUssRUFBRSxFQUFFLFNBQVMsTUFBSSxHQUFFLElBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQyxnQkFBRSxHQUFHLGNBQWEsR0FBRSxFQUFDLFVBQVMsQ0FBQyxDQUFDLEdBQUUsbUJBQWtCLENBQUMsQ0FBQyxHQUFFLE1BQUssSUFBRSxNQUFNLEtBQUssRUFBRSxFQUFFLFNBQVMsTUFBSSxHQUFFLElBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFF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Q0FBQyxDQUFDLEdBQUUsU0FBUSxNQUFNLEtBQUssRUFBRSxFQUFFLFNBQVMsTUFBSSxHQUFFLElBQUUsTUFBSSxDQUFDLENBQUMsR0FBRSxVQUFTLE1BQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFJLENBQUMsR0FBRSxlQUFjLElBQUUsSUFBRSxNQUFNLEtBQUssRUFBRSxFQUFFLFNBQVMsTUFBSSxHQUFFLElBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUUsYUFBWSxJQUFFLElBQUUsTUFBTSxLQUFLLEVBQUUsRUFBRSxTQUFTLE1BQUksR0FBRSxJQUFFLE1BQUksQ0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUM7QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxNQUFJO0FBQUMsZ0JBQUUsR0FBRyxpQkFBZ0IsR0FBRSxFQUFDLFFBQU8sSUFBRSxTQUFPLFFBQU8sU0FBUSxHQUFFLFdBQVUsQ0FBQyxDQUFDLEdBQUUsT0FBTSxHQUFFLGNBQWEsQ0FBQyxDQUFDLEdBQUUsTUFBSyxDQUFDLEdBQUUsQ0FBQyxHQUFFLFNBQVEsQ0FBQyxDQUFDLEdBQUUsVUFBUyxNQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBSSxDQUFDLEdBQUUsZUFBYyxJQUM1ZixNQUFNLEtBQUssRUFBRSxFQUFFLFNBQVMsTUFBSSxHQUFFLElBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEdBQUUsYUFBWSxJQUFFLE1BQU0sS0FBSyxFQUFFLEVBQUUsU0FBUyxNQUFJLEdBQUUsSUFBRSxNQUFJLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQyxnQkFBRSxHQUFHLGlCQUFnQixHQUFFLEVBQUMsUUFB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QSxnQkFBRTtBQUFBLGNBQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLENBQUMsR0FBRSxNQUFJO0FBQUMsZ0JBQUUsR0FBRyxVQUFTLEdBQUUsRUFBQyxVQUFTLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxNQUFJO0FBQUMsZ0JBQUUsR0FBRyxPQUFNLEdBQUUsRUFBQyxNQUFLLEdBQUUsT0FBTSxHQUFFLE1BQUssSUFBRSxNQUFNLEtBQUssRUFBRSxFQUFFLFNBQVMsTUFBSSxHQUFFLElBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsUUFBTyxHQUFFLE1BQU07QUFBQSxZQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUc7QUFBQyxnQkFBRSxHQUFHLFdBQVUsR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxPQUFHO0FBQUMsZ0JBQUUsR0FBRyxpQkFBZ0IsR0FBRSxNQUFNO0FBQUEsWUFBQztBQUFBLFlBQUUsUUFBTyxDQUFDLEdBQUUsTUFBSTtBQUFDLGdCQUFFLEdBQUcsMEJBQXlCLEdBQUUsRUFBQyxTQUFRLEVBQUMsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sT0FBRztBQUFDLGdCQUFFLEdBQUcsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFFLE1BQUksRUFBRSxHQUFHLEdBQUUsR0FBRSxFQUFFLEdBQUcsSUFBRyxFQUFFLEdBQUcsTUFBTTtBQUFBLFlBQUUsUUFBTyxPQUFHLEVBQUUsR0FBRyxDQUFDO0FBQUEsWUFBRSxRQUFPLE9BQUcsRUFBRSxHQUFHLENBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFDLGdCQUFFLEdBQUcsR0FBRSxHQUFFLEdBQUUsSUFBRTtBQUFBLFlBQUM7QUFBQSxZQUFFLFFBQU8sQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFDLGdCQUFFLEdBQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUNwZixtQkFBUyxHQUFHLEdBQUU7QUFBQyxpQkFBSyxPQUFLO0FBQWEsaUJBQUssVUFBUSxnQ0FBZ0MsQ0FBQztBQUFJLGlCQUFLLFNBQU87QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFO0FBQUMsY0FBRSxVQUFVO0FBQUUsY0FBRSxZQUFVLE1BQUk7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRTtBQUFDLGFBQUMsSUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFJLEVBQUU7QUFBRSxjQUFFLEdBQUcsQ0FBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUU7QUFBQyxnQkFBSSxJQUFFLEVBQUUsR0FBRztBQUFFLGdCQUFHLENBQUM7QUFBRSxxQkFBTztBQUFFLGNBQUUsR0FBRyxLQUFLLENBQUM7QUFBRSxjQUFFLEdBQUcsRUFBRSxFQUFFLElBQUU7QUFBRSxjQUFFLEtBQUcsRUFBRTtBQUFHLGdCQUFJLElBQUUsRUFBQyxLQUFJLE9BQU0sZUFBYyxFQUFFLElBQUcsS0FBSSxFQUFFLElBQUcsYUFBWSxFQUFFLEdBQUU7QUFBRSxpQkFBRyxFQUFFLE1BQU07QUFBRSxjQUFFLFlBQVksR0FBRSxFQUFFLEVBQUU7QUFBRSxtQkFBTztBQUFBLFVBQUM7QUFDdlgsY0FBSSxLQUFHLGVBQWEsT0FBTyxjQUFZLElBQUksWUFBWSxNQUFNLElBQUUsUUFBTyxLQUFHLENBQUMsR0FBRSxHQUFFLE1BQUk7QUFBQyxtQkFBSztBQUFFLGdCQUFJLElBQUUsSUFBRTtBQUFFLGlCQUFJLElBQUUsR0FBRSxFQUFFLENBQUMsS0FBRyxFQUFFLEtBQUc7QUFBSSxnQkFBRTtBQUFFLGdCQUFHLEtBQUcsSUFBRSxLQUFHLEVBQUUsVUFBUTtBQUFHLHFCQUFPLEdBQUcsT0FBTyxFQUFFLGtCQUFrQixvQkFBa0IsRUFBRSxNQUFNLEdBQUUsQ0FBQyxJQUFFLEVBQUUsU0FBUyxHQUFFLENBQUMsQ0FBQztBQUFFLGlCQUFJLElBQUUsSUFBRyxJQUFFLEtBQUc7QUFBQyxrQkFBSSxJQUFFLEVBQUUsR0FBRztBQUFFLGtCQUFHLElBQUUsS0FBSTtBQUFDLG9CQUFJLElBQUUsRUFBRSxHQUFHLElBQUU7QUFBRyxvQkFBRyxRQUFNLElBQUU7QUFBSyx1QkFBRyxPQUFPLGNBQWMsSUFBRSxPQUFLLElBQUUsQ0FBQztBQUFBLHFCQUFNO0FBQUMsc0JBQUksSUFBRSxFQUFFLEdBQUcsSUFBRTtBQUFHLHNCQUFFLFFBQU0sSUFBRSxRQUFNLElBQUUsT0FBSyxLQUFHLEtBQUcsSUFBRSxLQUFHLElBQUUsTUFBSSxLQUFHLEtBQUcsS0FBRyxLQUFHLElBQUUsRUFBRSxHQUFHLElBQUU7QUFBRywwQkFBTSxJQUFFLEtBQUcsT0FBTyxhQUFhLENBQUMsS0FBRyxLQUFHLE9BQU0sS0FBRyxPQUFPLGFBQWEsUUFBTSxLQUNwZixJQUFHLFFBQU0sSUFBRSxJQUFJO0FBQUEsZ0JBQUU7QUFBQSxjQUFDO0FBQU0scUJBQUcsT0FBTyxhQUFhLENBQUM7QUFBQSxZQUFDO0FBQUMsbUJBQU87QUFBQSxVQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUUsT0FBSyxPQUFLLEtBQUcsR0FBRyxFQUFFLEdBQUUsR0FBRSxDQUFDLElBQUU7QUFBRyxtQkFBUyxHQUFHLEdBQUU7QUFBQyxnQkFBRztBQUFFLHFCQUFPLEVBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxnQkFBRTtBQUFFLGdCQUFHLENBQUMsR0FBRyxHQUFFO0FBQUMsZ0JBQUUsR0FBRztBQUFFLGtCQUFHLEVBQUU7QUFBTyxrQkFBRSxPQUFPLENBQUM7QUFBRSxrQkFBRTtBQUFBLFlBQUU7QUFBQyxjQUFFLEdBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUFBLFVBQUM7QUFDak0sY0FBSSxLQUFHLE9BQUc7QUFBQyxnQkFBRTtBQUFFLGdCQUFHO0FBQUUsb0JBQU0sR0FBRyxDQUFDLEdBQUU7QUFBUyxlQUFHLENBQUM7QUFBQSxVQUFDLEdBQUUsSUFBRTtBQUFBLFlBQUMsSUFBRyxDQUFDO0FBQUEsWUFBRSxJQUFHLENBQUM7QUFBQSxZQUFFLElBQUcsQ0FBQztBQUFBLFlBQUUsSUFBRyxDQUFDO0FBQUEsWUFBRSxJQUFHLFdBQVU7QUFBQyxrQkFBRSxFQUFFLEdBQUcsSUFBRSxFQUFFLEdBQUc7QUFBQSxZQUFDO0FBQUEsWUFBRSxJQUFHLFdBQVU7QUFBQyxpQkFBRyxRQUFRLE1BQUk7QUFBQyxtQkFBRztBQUFFLGtCQUFFLEdBQUcsTUFBSSxHQUFHLENBQUM7QUFBQSxjQUFDLENBQUM7QUFBQSxZQUFDO0FBQUEsWUFBRSxJQUFHLFdBQVU7QUFBQyxnQkFBRSx3QkFBc0IsRUFBRTtBQUFHLGdCQUFFLGdCQUFjLEVBQUU7QUFBRyxnQkFBRSxnQkFBYyxFQUFFO0FBQUcsOEJBQWM7QUFBQSxZQUFFO0FBQUEsWUFBRSxJQUFHLFNBQVMsR0FBRTtBQUFDLGtCQUFFO0FBQUEsWUFBQztBQUFBLFlBQUUsSUFBRyxDQUFDLGtCQUFrQjtBQUFBLFlBQUUsSUFBRyxXQUFVO0FBQUMsdUJBQVEsS0FBSyxFQUFFO0FBQUcsbUJBQUcsQ0FBQztBQUFFLG1CQUFJLEtBQUssRUFBRTtBQUFHLG1CQUFHLENBQUM7QUFBRSxnQkFBRSxLQUFHLENBQUM7QUFBRSxnQkFBRSxLQUFHLENBQUM7QUFBRSxnQkFBRSxLQUFHLENBQUM7QUFBQSxZQUFDO0FBQUEsWUFBRSxJQUFHLFNBQVMsR0FBRTtBQUFDLGtCQUFJLElBQUUsRUFBRTtBQUFHLHFCQUFPLEVBQUUsR0FBRyxDQUFDO0FBQUUsZ0JBQUUsR0FBRyxLQUFLLENBQUM7QUFBRSxnQkFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFFLENBQUM7QUFBRSxnQkFBRSxLQUFHO0FBQUUsaUJBQUcsQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLElBQUcsV0FBVTtBQUFBLFlBQUM7QUFBQSxZQUN0ZixJQUFHLFdBQVU7QUFBQyxnQkFBRSxHQUFHLFFBQVEsT0FBRyxFQUFFLENBQUM7QUFBQSxZQUFDO0FBQUEsWUFBRSxJQUFHLE9BQUcsSUFBSSxRQUFRLE9BQUc7QUFBQyxnQkFBRSxZQUFVLE9BQUc7QUFBQyxvQkFBRSxFQUFFO0FBQUssb0JBQUksSUFBRSxFQUFFO0FBQUksb0JBQUcsRUFBRSxnQkFBYyxFQUFFLGdCQUFjLEdBQUcsR0FBRTtBQUFDLHNCQUFJLElBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUFFLHNCQUFFLEVBQUUsWUFBWSxHQUFFLEVBQUUsWUFBWSxJQUFFLEVBQUUsNENBQTBDLElBQUUseUJBQXVCLEVBQUUsZUFBYSxxQ0FBcUM7QUFBQSxnQkFBQyxXQUFTLG1CQUFpQjtBQUFFLHFCQUFHO0FBQUEseUJBQVUsa0JBQWdCO0FBQUUscUJBQUcsQ0FBQztBQUFBLHlCQUFVLG9CQUFrQjtBQUFFLHFCQUFHLEVBQUUsTUFBTTtBQUFBLHlCQUFVLGlCQUFlO0FBQUUsc0JBQUUsRUFBRSxRQUFPLElBQUUsRUFBRSxHQUFHLENBQUMsR0FBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUUsR0FBRyxDQUFDLEdBQUUsR0FBRyxDQUFDLEdBQUUsRUFBRSxHQUFHO0FBQUEsb0JBQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQztBQUFBLG9CQUNsZ0I7QUFBQSxrQkFBQyxHQUFFLEVBQUUsS0FBRztBQUFBLHlCQUFVLG1CQUFpQjtBQUFFLG9CQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFDLEtBQUksU0FBUSxDQUFDO0FBQUEseUJBQVUsYUFBVztBQUFFLG9CQUFFLFNBQU8sTUFBRyxFQUFFLENBQUM7QUFBQSx5QkFBVSxZQUFVO0FBQUUsd0JBQU0sWUFBVSxFQUFFLFdBQVMsT0FBSyxFQUFFLElBQUk7QUFBQSx5QkFBVSxtQkFBaUIsRUFBRTtBQUFPLG9CQUFFLFlBQVksQ0FBQztBQUFBLHlCQUFVLGtCQUFnQjtBQUFFLG9CQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJO0FBQUE7QUFBTyx1QkFBRyxFQUFFLG9DQUFrQyxDQUFDO0FBQUEsY0FBQztBQUFFLGdCQUFFLFVBQVEsT0FBRztBQUFDLGtCQUFFLDJCQUF5QixFQUFFLFdBQVMsTUFBSSxFQUFFLFNBQU8sT0FBSyxFQUFFLE9BQU87QUFBRSxzQkFBTTtBQUFBLGNBQUU7QUFBRSxvQkFBSSxFQUFFLEdBQUcsV0FBVSxTQUFTLEdBQUU7QUFBQyxrQkFBRSxVQUFVLEVBQUMsTUFBSyxFQUFDLENBQUM7QUFBQSxjQUFDLENBQUMsR0FBRSxFQUFFLEdBQUcsU0FBUSxTQUFTLEdBQUU7QUFBQyxrQkFBRSxRQUFRLENBQUM7QUFBQSxjQUFDLENBQUM7QUFDL2Ysa0JBQUksSUFBRSxDQUFDLEdBQUUsSUFBRSxDQUFDLFVBQVMsV0FBVSxTQUFRLFVBQVUsR0FBRTtBQUFFLG1CQUFJLEtBQUs7QUFBRSxrQkFBRSxlQUFlLENBQUMsS0FBRyxFQUFFLEtBQUssQ0FBQztBQUFFLGdCQUFFLFlBQVksRUFBQyxLQUFJLFFBQU8sVUFBUyxHQUFFLFdBQVUsRUFBRSx1QkFBcUIsWUFBVyxZQUFXLEdBQUUsWUFBVyxHQUFFLENBQUM7QUFBQSxZQUFDLENBQUM7QUFBQSxZQUFFLElBQUcsU0FBUyxHQUFFO0FBQUMsZ0JBQUU7QUFBQSxZQUFDO0FBQUEsWUFBRSxJQUFHLFdBQVU7QUFBQyxrQkFBSSxJQUFFLEdBQUcsa0NBQWtDO0FBQUUsa0JBQUUsSUFBSSxPQUFPLENBQUM7QUFBRSxnQkFBRSxHQUFHLEtBQUssQ0FBQztBQUFBLFlBQUM7QUFBQSxZQUFFLElBQUcsV0FBVTtBQUFDLG1CQUFHLEVBQUUsR0FBRyxXQUFTLEVBQUUsR0FBRyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQUcscUJBQU8sRUFBRSxHQUFHLElBQUk7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFFLFlBQUUsVUFBUTtBQUFFLGNBQUksS0FBRyxPQUFHO0FBQUMsbUJBQUssSUFBRSxFQUFFO0FBQVEsZ0JBQUUsTUFBTSxFQUFFLENBQUM7QUFBQSxVQUFDO0FBQ3piLFlBQUUsc0JBQW9CLFdBQVU7QUFBQyxnQkFBSSxJQUFFLEdBQUcsR0FBRSxJQUFFLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDO0FBQUUsZ0JBQUUsRUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUM7QUFBRSxlQUFHLEdBQUUsSUFBRSxDQUFDO0FBQUUsZUFBRyxDQUFDO0FBQUEsVUFBQztBQUFFLG1CQUFTLEdBQUcsR0FBRTtBQUFDLGdCQUFHO0FBQUUscUJBQU8sRUFBRSxHQUFFLEdBQUUsQ0FBQztBQUFFLGVBQUcsQ0FBQztBQUFBLFVBQUM7QUFBQyxZQUFFLG1CQUFpQixTQUFTLEdBQUUsR0FBRTtBQUFDLGdCQUFFLEdBQUcsTUFBTSxNQUFLLENBQUMsR0FBRSxDQUFDLENBQUM7QUFBRSxlQUFHLElBQUUsRUFBRSxHQUFHLENBQUMsSUFBRSxHQUFHLENBQUM7QUFBQSxVQUFDO0FBQUUsbUJBQVMsR0FBRyxHQUFFO0FBQUMsaUJBQUssS0FBRyxJQUFFO0FBQUcsaUJBQUssS0FBRyxTQUFTLEdBQUU7QUFBQyxnQkFBRSxFQUFFLEtBQUssS0FBRyxLQUFHLE1BQUksQ0FBQyxJQUFFO0FBQUEsWUFBQztBQUFFLGlCQUFLLEtBQUcsU0FBUyxHQUFFO0FBQUMsZ0JBQUUsRUFBRSxLQUFLLEtBQUcsS0FBRyxNQUFJLENBQUMsSUFBRTtBQUFBLFlBQUM7QUFBRSxpQkFBSyxLQUFHLFNBQVMsR0FBRSxHQUFFO0FBQUMsbUJBQUssR0FBRztBQUFFLG1CQUFLLEdBQUcsQ0FBQztBQUFFLG1CQUFLLEdBQUcsQ0FBQztBQUFBLFlBQUM7QUFBRSxpQkFBSyxLQUFHLFdBQVU7QUFBQyxnQkFBRSxFQUFFLEtBQUssS0FBRyxNQUFJLE1BQUksQ0FBQyxJQUFFO0FBQUEsWUFBQztBQUFBLFVBQUM7QUFBQyxjQUFJLEtBQUcsR0FBRSxLQUFHO0FBQy9iLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFPLElBQUUsRUFBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxJQUFFLEdBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxtQkFBSztBQUFFLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxtQkFBSztBQUFFLGdCQUFHLGVBQWEsT0FBTztBQUFrQixxQkFBTyxFQUFFLHFGQUFxRixHQUFFO0FBQUUsZ0JBQUksSUFBRSxDQUFDO0FBQUUsZ0JBQUcsS0FBRyxNQUFJLEVBQUU7QUFBTyxxQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxnQkFBRSxFQUFDLElBQUcsR0FBRSxJQUFHLEdBQUUsSUFBRyxHQUFFLElBQUcsRUFBQztBQUFFLG1CQUFPLEtBQUcsRUFBRSxLQUFHLGVBQWMsWUFBWSxHQUFFLENBQUMsR0FBRSxLQUFHLEdBQUcsQ0FBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQU8sSUFBRSxFQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxJQUFFO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsZ0JBQUc7QUFBRSxxQkFBTyxFQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQ3JjLGNBQUksS0FBRyxPQUFHO0FBQUMscUJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLEVBQUUsUUFBTyxFQUFFLEdBQUU7QUFBQyxrQkFBSSxJQUFFLEVBQUUsV0FBVyxDQUFDO0FBQUUscUJBQUssSUFBRSxNQUFJLFFBQU0sSUFBRSxLQUFHLElBQUUsU0FBTyxLQUFHLFNBQU8sS0FBRyxLQUFHLEdBQUUsRUFBRSxLQUFHLEtBQUc7QUFBQSxZQUFDO0FBQUMsbUJBQU87QUFBQSxVQUFDLEdBQUUsS0FBRyxDQUFDLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQyxtQkFBSztBQUFFLGdCQUFHLEVBQUUsSUFBRTtBQUFHLHFCQUFPO0FBQUUsZ0JBQUksSUFBRTtBQUFFLGdCQUFFLElBQUUsSUFBRTtBQUFFLHFCQUFRLElBQUUsR0FBRSxJQUFFLEVBQUUsUUFBTyxFQUFFLEdBQUU7QUFBQyxrQkFBSSxJQUFFLEVBQUUsV0FBVyxDQUFDO0FBQUUsa0JBQUcsU0FBTyxLQUFHLFNBQU8sR0FBRTtBQUFDLG9CQUFJLElBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUFFLG9CQUFFLFVBQVEsSUFBRSxTQUFPLE1BQUksSUFBRTtBQUFBLGNBQUk7QUFBQyxrQkFBRyxPQUFLLEdBQUU7QUFBQyxvQkFBRyxLQUFHO0FBQUU7QUFBTSxrQkFBRSxRQUFNLENBQUMsSUFBRTtBQUFBLGNBQUMsT0FBSztBQUFDLG9CQUFHLFFBQU0sR0FBRTtBQUFDLHNCQUFHLElBQUUsS0FBRztBQUFFO0FBQU0sb0JBQUUsUUFBTSxDQUFDLElBQUUsTUFBSSxLQUFHO0FBQUEsZ0JBQUMsT0FBSztBQUFDLHNCQUFHLFNBQU8sR0FBRTtBQUFDLHdCQUFHLElBQUUsS0FBRztBQUFFO0FBQU0sc0JBQUUsUUFBTSxDQUFDLElBQUUsTUFBSSxLQUFHO0FBQUEsa0JBQUUsT0FBSztBQUFDLHdCQUFHLElBQUUsS0FBRztBQUFFO0FBQU0sc0JBQUUsUUFBTSxDQUFDLElBQUUsTUFBSSxLQUNwZjtBQUFHLHNCQUFFLFFBQU0sQ0FBQyxJQUFFLE1BQUksS0FBRyxLQUFHO0FBQUEsa0JBQUU7QUFBQyxvQkFBRSxRQUFNLENBQUMsSUFBRSxNQUFJLEtBQUcsSUFBRTtBQUFBLGdCQUFFO0FBQUMsa0JBQUUsUUFBTSxDQUFDLElBQUUsTUFBSSxJQUFFO0FBQUEsY0FBRTtBQUFBLFlBQUM7QUFBQyxjQUFFLE1BQUksQ0FBQyxJQUFFO0FBQUUsbUJBQU8sSUFBRTtBQUFBLFVBQUMsR0FBRSxLQUFHLENBQUMsR0FBRSxHQUFFLE1BQUksR0FBRyxHQUFFLEVBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxtQkFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLGdCQUFHO0FBQUUscUJBQU8sRUFBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBRztBQUFFLHFCQUFPLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxtQkFBTyxJQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLElBQUU7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxnQkFBRztBQUFFLHFCQUFPLEVBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUc7QUFBRSxxQkFBTyxFQUFFLElBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBRztBQUFFLHFCQUFPLEVBQUUsSUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUc7QUFBRSxxQkFBTyxFQUFFLElBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFHO0FBQUUscUJBQU8sRUFBRSxJQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFDOWQsbUJBQVMsR0FBRyxHQUFFO0FBQUMsZ0JBQUc7QUFBRSxxQkFBTyxFQUFFLElBQUcsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFDLG1CQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsZ0JBQUc7QUFBRSxxQkFBTyxFQUFFLElBQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFHO0FBQUUscUJBQU8sRUFBRSxJQUFHLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUMsY0FBSSxLQUFHLE9BQUc7QUFBQyxnQkFBRyxDQUFDO0FBQUUsa0JBQUc7QUFBQyxvQkFBRyxFQUFFLEdBQUUsQ0FBQyxHQUFHO0FBQUUsc0JBQUc7QUFBQyx3QkFBRSxHQUFHLENBQUMsSUFBRSxHQUFHLENBQUM7QUFBQSxrQkFBQyxTQUFPLEdBQUU7QUFBQyxpQ0FBYSxNQUFJLFlBQVUsS0FBRyxFQUFFLEdBQUUsQ0FBQztBQUFBLGtCQUFDO0FBQUEsY0FBQyxTQUFPLEdBQUU7QUFBQyw2QkFBYSxNQUFJLFlBQVUsS0FBRyxFQUFFLEdBQUUsQ0FBQztBQUFBLGNBQUM7QUFBQSxVQUFDO0FBQUUsbUJBQVMsR0FBRyxHQUFFO0FBQUMsbUJBQUs7QUFBRSwyQkFBYSxPQUFPLFFBQVEsT0FBSyxRQUFRLEdBQUcsRUFBRSxHQUFFLEtBQUcsR0FBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLEVBQUUsR0FBRSxLQUFHLEtBQUksUUFBUSxNQUFNLEVBQUUsR0FBRSxLQUFHLEdBQUUsQ0FBQztBQUFBLFVBQUU7QUFBQyxZQUFFLG9DQUFrQztBQUFHLG1CQUFTLEtBQUk7QUFBQyxnQkFBSSxJQUFFLEdBQUc7QUFBRSxrQkFBSSxHQUFHLENBQUMsR0FBRSxHQUFHLE1BQUksR0FBRyxDQUFDO0FBQUEsVUFBRTtBQUFDLFlBQUUsZUFBYTtBQUNwZixjQUFJLElBQUUsT0FBRyxNQUFJLElBQUUsTUFBSSxNQUFJLElBQUUsT0FBSyxNQUFJLElBQUUsTUFBSyxLQUFHLENBQUMsR0FBRSxJQUFHLElBQUcsSUFBRyxLQUFJLEtBQUksS0FBSSxLQUFJLEtBQUksS0FBSSxLQUFJLEdBQUcsR0FBRSxLQUFHLENBQUMsR0FBRSxJQUFHLElBQUcsSUFBRyxLQUFJLEtBQUksS0FBSSxLQUFJLEtBQUksS0FBSSxLQUFJLEdBQUc7QUFBRSxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFPLElBQUUsRUFBRSxJQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLElBQUU7QUFBQSxVQUFHO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUc7QUFBRSxxQkFBTyxFQUFFLElBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFDLGNBQUksS0FBRyxPQUFHO0FBQUMsZ0JBQUksSUFBRSxHQUFHLENBQUMsSUFBRSxHQUFFLElBQUUsR0FBRyxDQUFDO0FBQUUsaUJBQUcsR0FBRyxHQUFFLEdBQUUsQ0FBQztBQUFFLG1CQUFPO0FBQUEsVUFBQyxHQUFFLEtBQUcsQ0FBQyxHQUFFLEtBQUcsQ0FBQyxHQUFFLE1BQUk7QUFBQyxlQUFHLFNBQU87QUFBRSxnQkFBSTtBQUFFLGlCQUFJLE1BQUksR0FBRSxJQUFFLEVBQUUsRUFBRSxRQUFNLENBQUM7QUFBRyxtQkFBRyxPQUFLLElBQUUsR0FBRSxHQUFHLEtBQUssT0FBSyxJQUFFLEVBQUUsRUFBRSxNQUFJLENBQUMsSUFBRSxHQUFHLEVBQUUsUUFBTSxDQUFDLENBQUMsR0FBRSxFQUFFO0FBQUUsbUJBQU87QUFBQSxVQUFFLEdBQUUsS0FBRyxPQUFHO0FBQUMsZ0JBQUksSUFBRSxHQUFHO0FBQUUsZ0JBQUUsRUFBRTtBQUFFLGVBQUcsQ0FBQztBQUFFLG1CQUFPO0FBQUEsVUFBQztBQUN2ZSxtQkFBUyxFQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFJLElBQUUsVUFBVSxTQUFPLEdBQUUsSUFBRTtBQUFVLG1CQUFPLEdBQUcsTUFBSTtBQUFDLHVCQUFRLElBQUUsR0FBRyxJQUFFLENBQUMsR0FBRSxJQUFFLEtBQUcsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLEtBQUk7QUFBQyxvQkFBSSxJQUFFLEVBQUUsSUFBRSxDQUFDO0FBQUUsbUJBQUcsRUFBRSxJQUFFLE1BQUksQ0FBQyxJQUFFO0FBQUEsY0FBQztBQUFDLHFCQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsQ0FBQztBQUFBLFVBQUM7QUFDM0osY0FBSSxLQUFHLENBQUMsR0FBRSxLQUFHLENBQUMsR0FBRSxLQUFHLE1BQUk7QUFBQyxnQkFBRyxDQUFDLElBQUc7QUFBQyxrQkFBSSxJQUFFLEVBQUMsTUFBSyxZQUFXLFNBQVEsWUFBVyxNQUFLLEtBQUksS0FBSSxLQUFJLE1BQUssa0JBQWlCLE9BQU0sWUFBVSxPQUFPLGFBQVcsVUFBVSxhQUFXLFVBQVUsVUFBVSxDQUFDLEtBQUcsS0FBSyxRQUFRLEtBQUksR0FBRyxJQUFFLFVBQVMsR0FBRSxNQUFJLGlCQUFnQixHQUFFO0FBQUUsbUJBQUksS0FBSztBQUFHLDJCQUFTLEdBQUcsQ0FBQyxJQUFFLE9BQU8sRUFBRSxDQUFDLElBQUUsRUFBRSxDQUFDLElBQUUsR0FBRyxDQUFDO0FBQUUsa0JBQUksSUFBRSxDQUFDO0FBQUUsbUJBQUksS0FBSztBQUFFLGtCQUFFLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtBQUFFLG1CQUFHO0FBQUEsWUFBQztBQUFDLG1CQUFPO0FBQUEsVUFBRSxHQUFFO0FBQ3RXLG1CQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsZ0JBQUc7QUFBRSxxQkFBTyxFQUFFLElBQUcsR0FBRSxHQUFFLENBQUM7QUFBRSxtQkFBSztBQUFFLG1CQUFLO0FBQUUsZ0JBQUksSUFBRTtBQUFFLGVBQUcsRUFBRSxRQUFRLFNBQVMsR0FBRSxHQUFFO0FBQUMsa0JBQUksSUFBRSxJQUFFO0FBQUUsa0JBQUUsRUFBRSxFQUFFLElBQUUsSUFBRSxLQUFHLE1BQUksQ0FBQyxJQUFFO0FBQUUsbUJBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEVBQUU7QUFBRSxrQkFBRSxFQUFFLE9BQUssTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXLENBQUM7QUFBRSxnQkFBRSxFQUFFLEtBQUcsTUFBSSxDQUFDLElBQUU7QUFBRSxtQkFBRyxFQUFFLFNBQU87QUFBQSxZQUFDLENBQUM7QUFBRSxtQkFBTztBQUFBLFVBQUM7QUFBQyxtQkFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLGdCQUFHO0FBQUUscUJBQU8sRUFBRSxJQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUUsbUJBQUs7QUFBRSxtQkFBSztBQUFFLGdCQUFJLElBQUUsR0FBRztBQUFFLGNBQUUsRUFBRSxLQUFHLE1BQUksQ0FBQyxJQUFFLEVBQUU7QUFBTyxnQkFBSSxJQUFFO0FBQUUsY0FBRSxRQUFRLFNBQVMsR0FBRTtBQUFDLG1CQUFHLEVBQUUsU0FBTztBQUFBLFlBQUMsQ0FBQztBQUFFLGNBQUUsRUFBRSxLQUFHLE1BQUksQ0FBQyxJQUFFO0FBQUUsbUJBQU87QUFBQSxVQUFDO0FBQUMsbUJBQVMsR0FBRyxHQUFFO0FBQUMsbUJBQU8sSUFBRSxFQUFFLElBQUcsR0FBRSxDQUFDLElBQUU7QUFBQSxVQUFFO0FBQUMsbUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQU8sSUFBRSxFQUFFLElBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLElBQUU7QUFBQSxVQUFFO0FBQy9jLG1CQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQU8sSUFBRSxFQUFFLElBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsSUFBRTtBQUFBLFVBQUU7QUFBQyxjQUFJLEtBQUcsQ0FBQyxNQUFLLENBQUMsR0FBRSxDQUFDLENBQUM7QUFBRSxtQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBRztBQUFFLHFCQUFPLEVBQUUsSUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxtQkFBSztBQUFFLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxxQkFBUSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUUsR0FBRSxLQUFJO0FBQUMsa0JBQUksSUFBRSxFQUFFLEVBQUUsS0FBRyxNQUFJLENBQUMsR0FBRSxJQUFFLEVBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDO0FBQUUsbUJBQUc7QUFBRSx1QkFBUSxJQUFFLEdBQUUsSUFBRSxHQUFFLEtBQUk7QUFBQyxvQkFBSSxJQUFFLEVBQUUsRUFBRSxJQUFFLE1BQUksQ0FBQyxHQUFFLElBQUUsR0FBRyxDQUFDO0FB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UUFBUTtBQUFFLHVCQUFHLElBQUUsRUFBRSxRQUFRLElBQUUsR0FBRSxFQUFFLFFBQVEsQ0FBQyxHQUFFLEtBQUcsSUFBRSxFQUFFLFNBQVMsSUFBRSxDQUFDLEtBQUcsRUFBRSxTQUFTLENBQUMsR0FBRSxFQUFFLFlBQVksRUFBRSxZQUFZLElBQUUsQ0FBQztBQUFBLHFCQUFPO0FBQUMsb0JBQUUsUUFBUSxFQUFFLFFBQVEsSUFBRSxDQUFDO0FBQUU7QUFBQSxnQkFBSztBQUFBLGNBQUM7QUFBQyxrQkFBRSxJQUFJLEtBQUssRUFBRSxZQUFZLElBQUUsR0FBRSxHQUFFLENBQUM7QUFBRSxrQkFBRSxFQUFFLElBQUk7QUFBQSxnQkFBSyxFQUFFLFlBQVk7QUFBQSxnQkFDbmY7QUFBQSxnQkFBRTtBQUFBLGNBQUMsQ0FBQztBQUFFLGtCQUFFLEVBQUUsQ0FBQztBQUFFLHFCQUFPLEtBQUcsRUFBRSxHQUFFLENBQUMsSUFBRSxLQUFHLEVBQUUsR0FBRSxDQUFDLElBQUUsRUFBRSxZQUFZLElBQUUsSUFBRSxFQUFFLFlBQVksSUFBRSxFQUFFLFlBQVksSUFBRTtBQUFBLFlBQUM7QUFBQyxtQkFBSztBQUFFLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxtQkFBSztBQUFFLGdCQUFJLElBQUUsRUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUM7QUFBRSxnQkFBRSxFQUFDLElBQUcsRUFBRSxFQUFFLEtBQUcsTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxLQUFHLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLElBQUcsRUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsR0FBRSxJQUFHLEVBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRyxJQUFFLEVBQUUsQ0FBQyxJQUFFLEdBQUU7QUFBRSxnQkFBRSxFQUFFLENBQUM7QUFBRSxnQkFBRTtBQUFBLGNBQUMsTUFBSztBQUFBLGNBQXVCLE1BQUs7QUFBQSxjQUFXLE1BQUs7QUFBQSxjQUFXLE1BQUs7QUFBQSxjQUFLLE1BQUs7QUFBQSxjQUFjLE1BQUs7QUFBQSxjQUFRLE1BQUs7QUFBQSxjQUFXLE1BQUs7QUFBQSxjQUFXLE1BQUs7QUFBQSxjQUN4ZixPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBVyxPQUFNO0FBQUEsY0FBVyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsY0FBSyxPQUFNO0FBQUEsWUFBSTtBQUFFLHFCQUFRLEtBQUs7QUFBRSxrQkFBRSxFQUFFLFFBQVEsSUFBSSxPQUFPLEdBQUUsR0FBRyxHQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsZ0JBQUksSUFBRSwyREFBMkQsTUFBTSxHQUFHLEdBQUUsSUFBRSx3RkFBd0YsTUFBTSxHQUFHO0FBQUUsZ0JBQUUsRUFBQyxNQUFLLE9BQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEdBQUUsQ0FBQyxHQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFFLE1BQUssT0FDemYsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEdBQUUsQ0FBQyxHQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFFLE1BQUssT0FBRyxHQUFHLEVBQUUsS0FBRyxRQUFNLE1BQUksR0FBRSxDQUFDLEdBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLENBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsR0FBRSxHQUFHLEdBQUUsTUFBSyxPQUFHLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxDQUFDLEdBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLENBQUMsR0FBRSxNQUFLLE9BQUc7QUFBQyxrQkFBRSxFQUFFO0FBQUcsbUJBQUcsSUFBRSxJQUFFLEtBQUcsS0FBRyxNQUFJLEtBQUc7QUFBSSxxQkFBTyxFQUFFLEdBQUUsQ0FBQztBQUFBLFlBQUMsR0FBRSxNQUFLLE9BQUc7QUFBQyx1QkFBUSxJQUFFLEdBQUUsSUFBRSxHQUFFLEtBQUcsRUFBRSxLQUFHLEdBQUUsTUFBSSxFQUFFLEVBQUUsS0FBRyxJQUFJLElBQUUsS0FBRyxJQUFJLEdBQUc7QUFBRTtBQUFDLHFCQUFPLEVBQUUsRUFBRSxLQUFHLEdBQUUsQ0FBQztBQUFBLFlBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLEtBQUcsR0FBRSxDQUFDLEdBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxJQUFHLENBQUMsR0FBRSxNQUFLLE1BQUksTUFBSyxNQUFLLE9BQUcsS0FBRyxFQUFFLE1BQUksS0FBRyxFQUFFLEtBQUcsT0FBSyxNQUFLLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxDQUFDLEdBQUUsTUFBSyxNQUFJLEtBQUssTUFBSyxPQUFHLEVBQUUsTUFBSSxHQUFFLE1BQUssT0FBRyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUcsSUFBRSxFQUFFLE1BQUksQ0FBQyxHQUFFLENBQUMsR0FBRSxNQUFLLE9BQ25mO0FBQUMsa0JBQUksSUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFHLEtBQUcsRUFBRSxLQUFHLEtBQUcsS0FBRyxDQUFDO0FBQUUsb0JBQUksRUFBRSxLQUFHLE1BQUksRUFBRSxL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LEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxjQUFjO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxZQUFZO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxZQUFZO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxlQUFlLElBQUU7QUFBSyxnQkFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFVBQVU7QUFBRSxtQkFBRyxFQUFFLFFBQVEsSUFBRSxLQUFLO0FBQUEsZ0JBQUksRUFBRSxlQUFlO0FBQUEsZ0JBQzNmO0FBQUEsZ0JBQUU7QUFBQSxnQkFBRTtBQUFBLGdCQUFFO0FBQUEsZ0JBQUU7QUFBQSxnQkFBRTtBQUFBLGNBQUMsS0FBRyxRQUFNO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUU7QUFBQSxZQUFDO0FBQUEsWUFBRSxHQUFFLFNBQVMsR0FBRSxHQUFFLEdBQUU7QUFBQyxrQkFBRSxJQUFFLFlBQVUsSUFBRSxVQUFRLENBQUMsQ0FBQyxLQUFHLE1BQUksS0FBRyxhQUFXLElBQUU7QUFBSSxxQkFBSztBQUFFLGtCQUFFLElBQUksS0FBSyxNQUFJLENBQUM7QUFBRSxnQkFBRSxFQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxXQUFXO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxTQUFTO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxRQUFRO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxTQUFTO0FBQUUsZ0JBQUUsRUFBRSxJQUFFLE1BQUks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UUFBUSxHQUFHLE9BQU8sQ0FBaUM7QUFBQSxnQkFBQztBQUFBLGNBQ3pGO0FBQUEsWUFDRjtBQUFBLFlBQ0EsU0FBTztBQUNMLDBCQUFZLEVBQUMsTUFBTSxJQUFHLENBQUM7QUFBQSxZQUN6QjtBQUFBLFVBQUM7QUFDVDtBQUFBLFFBQ0Y7QUFBQSxRQUNBLEtBQUs7QUFDSCx1QkFBYSxPQUFRO0FBQ3JCLHNCQUFZLEVBQUMsS0FBSSxDQUFDO0FBQ2xCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLFNBQVMsS0FBSztBQUNaLGtCQUFZLEVBQUMsTUFBTSxJQUFHLENBQW1CO0FBQUEsSUFDM0M7QUFBQSxFQUNGOyIsCiAgIm5hbWVzIjogWyJqb2luIiwgImVudiIsICJwYWQiLCAiaW5pdCIsICJvZmZzZXRzIiwgImluZGljZXMiLCAiaW1wbCIsICJ2YWxpZGF0ZUlucHV0cyIsICJyZWR1Y2VPcHMiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAiaSIsICJ2YWxpZGF0ZUlucHV0cyIsICJlbnYiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAiYSIsICJiIiwgInRyYW5zcG9zZSIsICJvdXRwdXRWYXJpYWJsZSIsICJpbm5lckVsZW1lbnRTaXplIiwgInZhbGlkYXRlSW5wdXRzIiwgInZhbGlkYXRlSW5wdXRzIiwgIm91dHB1dFNoYXBlIiwgInRyYW5zcG9zZWRXZWlnaHQiLCAiY29udklucHV0cyIsICJpbm5lckVsZW1lbnRTaXplIiwgInZhbGlkYXRlSW5wdXRzIiwgInZhbGlkYXRlSW5wdXRzIiwgInBlcm1GdW5jdGlvbkJvZHkiLCAic3ltYm9sIiwgInJlZHVjZU9wcyIsICJ2YWxpZGF0ZUlucHV0cyIsICJjYWxjdWxhdGVPdXRwdXRTaGFwZSIsICJmYXN0R2VsdSIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJkYXRhVHlwZSIsICJ2YWxpZGF0ZUlucHV0cyIsICJ3ZWlnaHRUcmFuc3Bvc2VBdHRyaWJ1dGUiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAiZW52IiwgImVudiIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJjb21wb25lbnRzIiwgInZhbGlkYXRlSW5wdXRzIiwgInZhbGlkYXRlSW5wdXRzIiwgImdldE91dHB1dFNoYXBlIiwgImEiLCAiYiIsICJjIiwgImZhc3RHZWx1IiwgImVudiIsICJpIiwgImVudiIsICJ3YXNtIiwgIndhc20iLCAid2FzbSIsICJyZWFkRmlsZSIsICJyZWFkRmlsZSIsICJlbnYiLCAid2FzbSIsICJ0ZW5zb3IiLCAiZXJyb3JDb2RlIiwgImkiLCAiZW52Il0KfQo=\n'; + } +}); + +// web/lib/wasm/proxy-wrapper.ts +var isProxy, proxyWorker, initializing2, initialized2, aborted2, initWasmCallbacks, queuedCallbacks, enqueueCallbacks, ensureWorker, onProxyWorkerMessage, scriptSrc, initializeWebAssemblyAndOrtRuntime, initializeOrtEp, copyFromExternalBuffer2, createSession2, releaseSession2, run2, endProfiling2; +var init_proxy_wrapper = __esm({ + "web/lib/wasm/proxy-wrapper.ts"() { + "use strict"; + init_esm(); + init_wasm_core_impl(); + init_wasm_factory(); + isProxy = () => !!env2.wasm.proxy && typeof document !== "undefined"; + initializing2 = false; + initialized2 = false; + aborted2 = false; + queuedCallbacks = /* @__PURE__ */ new Map(); + enqueueCallbacks = (type, callbacks) => { + const queue = queuedCallbacks.get(type); + if (queue) { + queue.push(callbacks); + } else { + queuedCallbacks.set(type, [callbacks]); + } + }; + ensureWorker = () => { + if (initializing2 || !initialized2 || aborted2 || !proxyWorker) { + throw new Error("worker not ready"); + } + }; + onProxyWorkerMessage = (ev) => { + switch (ev.data.type) { + case "init-wasm": + initializing2 = false; + if (ev.data.err) { + aborted2 = true; + initWasmCallbacks[1](ev.data.err); + } else { + initialized2 = true; + initWasmCallbacks[0](); + } + break; + case "init-ep": + case "copy-from": + case "create": + case "release": + case "run": + case "end-profiling": { + const callbacks = queuedCallbacks.get(ev.data.type); + if (ev.data.err) { + callbacks.shift()[1](ev.data.err); + } else { + callbacks.shift()[0](ev.data.out); + } + break; + } + default: + } + }; + scriptSrc = typeof document !== "undefined" ? document?.currentScript?.src : void 0; + initializeWebAssemblyAndOrtRuntime = async () => { + if (initialized2) { + return; + } + if (initializing2) { + throw new Error("multiple calls to 'initWasm()' detected."); + } + if (aborted2) { + throw new Error("previous call to 'initWasm()' failed."); + } + initializing2 = true; + if (isProxy()) { + if (env2.wasm.wasmPaths === void 0) { + if (scriptSrc && scriptSrc.indexOf("blob:") !== 0) { + env2.wasm.wasmPaths = scriptSrc.substr(0, +scriptSrc.lastIndexOf("/") + 1); + } + } + return new Promise((resolve, reject) => { + proxyWorker?.terminate(); + const workerUrl = URL.createObjectURL(new Blob( + [ + // This require() function is handled by esbuild plugin to load file content as string. + // eslint-disable-next-line @typescript-eslint/no-require-imports + require_main() + ], + { type: "text/javascript" } + )); + proxyWorker = new Worker(workerUrl, { name: "ort-wasm-proxy-worker" }); + proxyWorker.onerror = (ev) => reject(ev); + proxyWorker.onmessage = onProxyWorkerMessage; + URL.revokeObjectURL(workerUrl); + initWasmCallbacks = [resolve, reject]; + const message = { type: "init-wasm", in: env2 }; + proxyWorker.postMessage(message); + }); + } else { + try { + await initializeWebAssembly(env2.wasm); + await initRuntime(env2); + initialized2 = true; + } catch (e) { + aborted2 = true; + throw e; + } finally { + initializing2 = false; + } + } + }; + initializeOrtEp = async (epName) => { + if (isProxy()) { + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("init-ep", [resolve, reject]); + const message = { type: "init-ep", in: { epName, env: env2 } }; + proxyWorker.postMessage(message); + }); + } else { + await initEp(env2, epName); + } + }; + copyFromExternalBuffer2 = async (buffer) => { + if (isProxy()) { + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("copy-from", [resolve, reject]); + const message = { type: "copy-from", in: { buffer } }; + proxyWorker.postMessage(message, [buffer.buffer]); + }); + } else { + return copyFromExternalBuffer(buffer); + } + }; + createSession2 = async (model, options) => { + if (isProxy()) { + if (options?.preferredOutputLocation) { + throw new Error('session option "preferredOutputLocation" is not supported for proxy.'); + } + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("create", [resolve, reject]); + const message = { type: "create", in: { model, options: { ...options } } }; + const transferable = []; + if (model instanceof Uint8Array) { + transferable.push(model.buffer); + } + proxyWorker.postMessage(message, transferable); + }); + } else { + return createSession(model, options); + } + }; + releaseSession2 = async (sessionId) => { + if (isProxy()) { + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("release", [resolve, reject]); + const message = { type: "release", in: sessionId }; + proxyWorker.postMessage(message); + }); + } else { + releaseSession(sessionId); + } + }; + run2 = async (sessionId, inputIndices, inputs, outputIndices, outputs, options) => { + if (isProxy()) { + if (inputs.some((t) => t[3] !== "cpu")) { + throw new Error("input tensor on GPU is not supported for proxy."); + } + if (outputs.some((t) => t)) { + throw new Error("pre-allocated output tensor is not supported for proxy."); + } + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("run", [resolve, reject]); + const serializableInputs = inputs; + const message = { type: "run", in: { sessionId, inputIndices, inputs: serializableInputs, outputIndices, options } }; + proxyWorker.postMessage(message, extractTransferableBuffers(serializableInputs)); + }); + } else { + return run(sessionId, inputIndices, inputs, outputIndices, outputs, options); + } + }; + endProfiling2 = async (sessionId) => { + if (isProxy()) { + ensureWorker(); + return new Promise((resolve, reject) => { + enqueueCallbacks("end-profiling", [resolve, reject]); + const message = { type: "end-profiling", in: sessionId }; + proxyWorker.postMessage(message); + }); + } else { + endProfiling(sessionId); + } + }; + } +}); + +// web/lib/wasm/session-handler-inference.ts +var encodeTensorMetadata, decodeTensorMetadata, OnnxruntimeWebAssemblySessionHandler; +var init_session_handler_inference = __esm({ + "web/lib/wasm/session-handler-inference.ts"() { + "use strict"; + init_esm(); + init_proxy_wrapper(); + init_wasm_common(); + init_wasm_utils_load_file(); + encodeTensorMetadata = (tensor, getName) => { + switch (tensor.location) { + case "cpu": + return [tensor.type, tensor.dims, tensor.data, "cpu"]; + case "gpu-buffer": + return [tensor.type, tensor.dims, { gpuBuffer: tensor.gpuBuffer }, "gpu-buffer"]; + default: + throw new Error(`invalid data location: ${tensor.location} for ${getName()}`); + } + }; + decodeTensorMetadata = (tensor) => { + switch (tensor[3]) { + case "cpu": + return new Tensor2(tensor[0], tensor[2], tensor[1]); + case "gpu-buffer": { + const dataType = tensor[0]; + if (!isGpuBufferSupportedType(dataType)) { + throw new Error(`not supported data type: ${dataType} for deserializing GPU tensor`); + } + const { gpuBuffer, download, dispose } = tensor[2]; + return Tensor2.fromGpuBuffer(gpuBuffer, { dataType, dims: tensor[1], download, dispose }); + } + default: + throw new Error(`invalid data location: ${tensor[3]}`); + } + }; + OnnxruntimeWebAssemblySessionHandler = class { + async fetchModelAndCopyToWasmMemory(path) { + return copyFromExternalBuffer2(await loadFile(path)); + } + async loadModel(pathOrBuffer, options) { + TRACE_FUNC_BEGIN(); + let model; + if (typeof pathOrBuffer === "string") { + if (typeof process !== "undefined" && process.versions && process.versions.node) { + model = await loadFile(pathOrBuffer); + } else { + model = await this.fetchModelAndCopyToWasmMemory(pathOrBuffer); + } + } else { + model = pathOrBuffer; + } + [this.sessionId, this.inputNames, this.outputNames] = await createSession2(model, options); + TRACE_FUNC_END(); + } + async dispose() { + return releaseSession2(this.sessionId); + } + async run(feeds, fetches, options) { + TRACE_FUNC_BEGIN(); + const inputArray = []; + const inputIndices = []; + Object.entries(feeds).forEach((kvp) => { + const name = kvp[0]; + const tensor = kvp[1]; + const index = this.inputNames.indexOf(name); + if (index === -1) { + throw new Error(`invalid input '${name}'`); + } + inputArray.push(tensor); + inputIndices.push(index); + }); + const outputArray = []; + const outputIndices = []; + Object.entries(fetches).forEach((kvp) => { + const name = kvp[0]; + const tensor = kvp[1]; + const index = this.outputNames.indexOf(name); + if (index === -1) { + throw new Error(`invalid output '${name}'`); + } + outputArray.push(tensor); + outputIndices.push(index); + }); + const inputs = inputArray.map((t, i) => encodeTensorMetadata(t, () => `input "${this.inputNames[inputIndices[i]]}"`)); + const outputs = outputArray.map( + (t, i) => t ? encodeTensorMetadata(t, () => `output "${this.outputNames[outputIndices[i]]}"`) : null + ); + const results = await run2(this.sessionId, inputIndices, inputs, outputIndices, outputs, options); + const resultMap = {}; + for (let i = 0; i < results.length; i++) { + resultMap[this.outputNames[outputIndices[i]]] = outputArray[i] ?? decodeTensorMetadata(results[i]); + } + TRACE_FUNC_END(); + return resultMap; + } + startProfiling() { + } + endProfiling() { + void endProfiling2(this.sessionId); + } + }; + } +}); + +// web/lib/backend-wasm.ts +var initializeFlags, OnnxruntimeWebAssemblyBackend; +var init_backend_wasm = __esm({ + "web/lib/backend-wasm.ts"() { + "use strict"; + init_node_os(); + init_esm(); + init_proxy_wrapper(); + init_session_handler_inference(); + initializeFlags = () => { + if (typeof env2.wasm.initTimeout !== "number" || env2.wasm.initTimeout < 0) { + env2.wasm.initTimeout = 0; + } + if (typeof env2.wasm.simd !== "boolean") { + env2.wasm.simd = true; + } + if (typeof env2.wasm.proxy !== "boolean") { + env2.wasm.proxy = false; + } + if (typeof env2.wasm.trace !== "boolean") { + env2.wasm.trace = false; + } + if (typeof env2.wasm.numThreads !== "number" || !Number.isInteger(env2.wasm.numThreads) || env2.wasm.numThreads <= 0) { + if (typeof self !== "undefined" && !self.crossOriginIsolated || typeof process !== "undefined" && process.versions && process.versions.node) { + env2.wasm.numThreads = 1; + } + const numCpuLogicalCores = typeof navigator === "undefined" ? cpus().length : navigator.hardwareConcurrency; + env2.wasm.numThreads = Math.min(4, Math.ceil((numCpuLogicalCores || 1) / 2)); + } + }; + OnnxruntimeWebAssemblyBackend = class { + /** + * This function initializes the WebAssembly backend. + * + * This function will be called only once for each backend name. It will be called the first time when + * `ort.InferenceSession.create()` is called with a registered backend name. + * + * @param backendName - the registered backend name. + */ + async init(backendName) { + initializeFlags(); + await initializeWebAssemblyAndOrtRuntime(); + await initializeOrtEp(backendName); + } + async createInferenceSessionHandler(pathOrBuffer, options) { + const handler = new OnnxruntimeWebAssemblySessionHandler(); + await handler.loadModel(pathOrBuffer, options); + return Promise.resolve(handler); + } + }; + } +}); + +// web/lib/backend-wasm-inference.ts +var backend_wasm_inference_exports = {}; +__export(backend_wasm_inference_exports, { + wasmBackend: () => wasmBackend +}); +var wasmBackend; +var init_backend_wasm_inference = __esm({ + "web/lib/backend-wasm-inference.ts"() { + "use strict"; + init_backend_wasm(); + wasmBackend = new OnnxruntimeWebAssemblyBackend(); + } +}); + +// web/lib/index.ts +init_esm(); +init_esm(); +init_esm(); + +// web/lib/version.ts +var version2 = "1.18.0"; + +// web/lib/index.ts +var lib_default = esm_exports; +if (false) { + const onnxjsBackend = null.onnxjsBackend; + registerBackend("webgl", onnxjsBackend, -10); +} +if (true) { + const wasmBackend2 = true ? (init_backend_wasm_inference(), __toCommonJS(backend_wasm_inference_exports)).wasmBackend : null.wasmBackend; + if (true) { + registerBackend("webgpu", wasmBackend2, 5); + registerBackend("webnn", wasmBackend2, 5); + } + registerBackend("cpu", wasmBackend2, 10); + registerBackend("wasm", wasmBackend2, 10); +} +Object.defineProperty(env2.versions, "web", { value: version2, enumerable: true }); +export { + InferenceSession2 as InferenceSession, + TRACE, + TRACE_FUNC_BEGIN, + TRACE_FUNC_END, + Tensor2 as Tensor, + TrainingSession2 as TrainingSession, + lib_default as default, + env2 as env, + registerBackend +}; +/** + * @license + * Copyright 2021 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2020 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +/** + * @license + * Copyright 2019 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vY29tbW9uL2xpYi9iYWNrZW5kLWltcGwudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi9iYWNrZW5kLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdmVyc2lvbi50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL2Vudi1pbXBsLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvZW52LnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdGVuc29yLWNvbnZlcnNpb24taW1wbC50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RlbnNvci1mYWN0b3J5LWltcGwudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90ZW5zb3ItaW1wbC10eXBlLW1hcHBpbmcudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90ZW5zb3ItdXRpbHMtaW1wbC50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RlbnNvci1pbXBsLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdGVuc29yLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvdHJhY2UudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi9pbmZlcmVuY2Utc2Vzc2lvbi1pbXBsLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvaW5mZXJlbmNlLXNlc3Npb24udHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90ZW5zb3ItY29udmVyc2lvbi50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL3RlbnNvci1mYWN0b3J5LnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvb25ueC1tb2RlbC50cyIsICIuLi8uLi8uLi9jb21tb24vbGliL29ubngtdmFsdWUudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90cmFpbmluZy1zZXNzaW9uLWltcGwudHMiLCAiLi4vLi4vLi4vY29tbW9uL2xpYi90cmFpbmluZy1zZXNzaW9uLnRzIiwgIi4uLy4uLy4uL2NvbW1vbi9saWIvaW5kZXgudHMiLCAibm9kZWpzLWlnbm9yZTpub2RlOm9zIiwgIm5vZGVqcy1pZ25vcmU6bm9kZTpwYXRoIiwgIm5vZGVqcy1pZ25vcmU6ZnMiLCAibm9kZWpzLWlnbm9yZTpwYXRoIiwgIi4uLy4uL2xpYi93YXNtL2JpbmRpbmcvb3J0LXdhc20tc2ltZC5qc2VwLmpzIiwgIm5vZGVqcy1pZ25vcmU6d29ya2VyX3RocmVhZHMiLCAibm9kZWpzLWlnbm9yZTpwZXJmX2hvb2tzIiwgIm5vZGVqcy1pZ25vcmU6b3MiLCAiLi4vLi4vbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS1zaW1kLXRocmVhZGVkLmpzZXAuanMiLCAiLi4vLi4vbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS10aHJlYWRlZC53b3JrZXIuanMiLCAiLi4vLi4vbGliL3dhc20vd2FzbS1mYWN0b3J5LnRzIiwgIi4uLy4uL2xpYi93YXNtL3dhc20tdXRpbHMudHMiLCAiLi4vLi4vbGliL3dhc20vcnVuLW9wdGlvbnMudHMiLCAiLi4vLi4vbGliL3dhc20vc2Vzc2lvbi1vcHRpb25zLnRzIiwgIi4uLy4uL2xpYi93YXNtL3dhc20tY29tbW9uLnRzIiwgIm5vZGVqcy1pZ25vcmU6bm9kZTpmcy9wcm9taXNlcyIsICIuLi8uLi9saWIvd2FzbS93YXNtLXV0aWxzLWxvYWQtZmlsZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL2xvZy50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3RlbnNvci12aWV3LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L3R5cGVzLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L2dwdS1kYXRhLW1hbmFnZXIudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvdXRpbC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvY29tbW9uLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy90cmFuc3Bvc2UudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3JlZHVjZS1zaGFyZWQudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3JlZHVjZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvYXJnbWlubWF4LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9jb25jYXQudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2F0dGVudGlvbi50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvYmF0Y2gtbm9ybS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvYmlhcy1hZGQudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3VuYXJ5LW9wLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9iaWFzLXNwbGl0LWdlbHUudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2JpbmFyeS1vcC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvZnVzZS11dGlscy50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L2FjdGl2YXRpb25fdXRpbC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L2NvbnZfdXRpbC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L21hdG11bF9wYWNrZWRfd2ViZ3B1LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy8zcmQtcGFydHkvY29udjJkX21tX3dlYmdwdS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvY29udi1ncm91cGVkLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9tYXRtdWwudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2NvbnYudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzLzNyZC1wYXJ0eS9jb252X2JhY2twcm9wX21tX3dlYmdwdS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L2NvbnZfYmFja3Byb3Bfd2ViZ3B1LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9jb252LXRyYW5zcG9zZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvY3Vtc3VtLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9kZXB0aC10by1zcGFjZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvZWluc3VtLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9leHBhbmQudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2Zhc3QtZ2VsdS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvZ2F0aGVyLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9nYXRoZXItZWxlbWVudHMudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2dlbW0udHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2luc3RhbmNlLW5vcm0udHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2xheWVyLW5vcm0udHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL21hdG11bG5iaXRzLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9tdWx0aWhlYWQtYXR0ZW50aWlvbi50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvcGFkLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9wb29sLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9yYW5nZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvcmVzaXplLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9yb3RhcnktZW1iZWRkaW5nLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9za2lwLWxheWVyLW5vcm0udHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3NsaWNlLnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9zb2Z0bWF4LnRzIiwgIi4uLy4uL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9zcGxpdC50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvdGlsZS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvd2hlcmUudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC93ZWJncHUvb3AtcmVzb2x2ZS1ydWxlcy50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL3dlYmdwdS9wcm9ncmFtLW1hbmFnZXIudHMiLCAiLi4vLi4vbGliL3dhc20vanNlcC9iYWNrZW5kLXdlYmdwdS50cyIsICIuLi8uLi9saWIvd2FzbS9qc2VwL2luaXQudHMiLCAiLi4vLi4vbGliL3dhc20vd2FzbS1jb3JlLWltcGwudHMiLCAicHJveHktd29ya2VyOi4vcHJveHktd29ya2VyL21haW4iLCAiLi4vLi4vbGliL3dhc20vcHJveHktd3JhcHBlci50cyIsICIuLi8uLi9saWIvd2FzbS9zZXNzaW9uLWhhbmRsZXItaW5mZXJlbmNlLnRzIiwgIi4uLy4uL2xpYi9iYWNrZW5kLXdhc20udHMiLCAiLi4vLi4vbGliL2JhY2tlbmQtd2FzbS1pbmZlcmVuY2UudHMiLCAiLi4vLi4vbGliL2luZGV4LnRzIiwgIi4uLy4uL2xpYi92ZXJzaW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtCYWNrZW5kfSBmcm9tICcuL2JhY2tlbmQuanMnO1xuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9ufSBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLmpzJztcblxuaW50ZXJmYWNlIEJhY2tlbmRJbmZvIHtcbiAgYmFja2VuZDogQmFja2VuZDtcbiAgcHJpb3JpdHk6IG51bWJlcjtcblxuICBpbml0UHJvbWlzZT86IFByb21pc2U8dm9pZD47XG4gIGluaXRpYWxpemVkPzogYm9vbGVhbjtcbiAgYWJvcnRlZD86IGJvb2xlYW47XG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG5jb25zdCBiYWNrZW5kczogTWFwPHN0cmluZywgQmFja2VuZEluZm8+ID0gbmV3IE1hcCgpO1xuY29uc3QgYmFja2VuZHNTb3J0ZWRCeVByaW9yaXR5OiBzdHJpbmdbXSA9IFtdO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgYmFja2VuZC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIGFzIGEga2V5IHRvIGxvb2t1cCBhcyBhbiBleGVjdXRpb24gcHJvdmlkZXIuXG4gKiBAcGFyYW0gYmFja2VuZCAtIHRoZSBiYWNrZW5kIG9iamVjdC5cbiAqIEBwYXJhbSBwcmlvcml0eSAtIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgcHJpb3JpdHkgb2YgdGhlIGJhY2tlbmQuIEhpZ2hlciBudW1iZXIgbWVhbnMgaGlnaGVyIHByaW9yaXR5LiBpZiBwcmlvcml0eVxuICogPCAwLCBpdCB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgYSAnYmV0YScgdmVyc2lvbiBhbmQgd2lsbCBub3QgYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGJhY2tlbmQgYnkgZGVmYXVsdC5cbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBjb25zdCByZWdpc3RlckJhY2tlbmQgPSAobmFtZTogc3RyaW5nLCBiYWNrZW5kOiBCYWNrZW5kLCBwcmlvcml0eTogbnVtYmVyKTogdm9pZCA9PiB7XG4gIGlmIChiYWNrZW5kICYmIHR5cGVvZiBiYWNrZW5kLmluaXQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGJhY2tlbmQuY3JlYXRlSW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBjdXJyZW50QmFja2VuZCA9IGJhY2tlbmRzLmdldChuYW1lKTtcbiAgICBpZiAoY3VycmVudEJhY2tlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYmFja2VuZHMuc2V0KG5hbWUsIHtiYWNrZW5kLCBwcmlvcml0eX0pO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudEJhY2tlbmQucHJpb3JpdHkgPiBwcmlvcml0eSkge1xuICAgICAgLy8gc2FtZSBuYW1lIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIGEgaGlnaGVyIHByaW9yaXR5LiBza2lwIHJlZ2lzdGVyYXRpb24uXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChjdXJyZW50QmFja2VuZC5wcmlvcml0eSA9PT0gcHJpb3JpdHkpIHtcbiAgICAgIGlmIChjdXJyZW50QmFja2VuZC5iYWNrZW5kICE9PSBiYWNrZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlZ2lzdGVyIGJhY2tlbmQgXCIke25hbWV9XCIgdXNpbmcgcHJpb3JpdHkgJHtwcmlvcml0eX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJpb3JpdHkgPj0gMCkge1xuICAgICAgY29uc3QgaSA9IGJhY2tlbmRzU29ydGVkQnlQcmlvcml0eS5pbmRleE9mKG5hbWUpO1xuICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgIGJhY2tlbmRzU29ydGVkQnlQcmlvcml0eS5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFja2VuZHNTb3J0ZWRCeVByaW9yaXR5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChiYWNrZW5kcy5nZXQoYmFja2VuZHNTb3J0ZWRCeVByaW9yaXR5W2ldKSEucHJpb3JpdHkgPD0gcHJpb3JpdHkpIHtcbiAgICAgICAgICBiYWNrZW5kc1NvcnRlZEJ5UHJpb3JpdHkuc3BsaWNlKGksIDAsIG5hbWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmFja2VuZHNTb3J0ZWRCeVByaW9yaXR5LnB1c2gobmFtZSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ25vdCBhIHZhbGlkIGJhY2tlbmQnKTtcbn07XG5cbi8qKlxuICogVHJ5IHRvIHJlc29sdmUgYW5kIGluaXRpYWxpemUgYSBiYWNrZW5kLlxuICpcbiAqIEBwYXJhbSBiYWNrZW5kTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBiYWNrZW5kLlxuICogQHJldHVybnMgdGhlIGJhY2tlbmQgaW5zdGFuY2UgaWYgcmVzb2x2ZWQgYW5kIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSwgb3IgYW4gZXJyb3IgbWVzc2FnZSBpZiBmYWlsZWQuXG4gKi9cbmNvbnN0IHRyeVJlc29sdmVBbmRJbml0aWFsaXplQmFja2VuZCA9IGFzeW5jKGJhY2tlbmROYW1lOiBzdHJpbmcpOiBQcm9taXNlPEJhY2tlbmR8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGJhY2tlbmRJbmZvID0gYmFja2VuZHMuZ2V0KGJhY2tlbmROYW1lKTtcbiAgaWYgKCFiYWNrZW5kSW5mbykge1xuICAgIHJldHVybiAnYmFja2VuZCBub3QgZm91bmQuJztcbiAgfVxuXG4gIGlmIChiYWNrZW5kSW5mby5pbml0aWFsaXplZCkge1xuICAgIHJldHVybiBiYWNrZW5kSW5mby5iYWNrZW5kO1xuICB9IGVsc2UgaWYgKGJhY2tlbmRJbmZvLmFib3J0ZWQpIHtcbiAgICByZXR1cm4gYmFja2VuZEluZm8uZXJyb3IhO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGlzSW5pdGlhbGl6aW5nID0gISFiYWNrZW5kSW5mby5pbml0UHJvbWlzZTtcbiAgICB0cnkge1xuICAgICAgaWYgKCFpc0luaXRpYWxpemluZykge1xuICAgICAgICBiYWNrZW5kSW5mby5pbml0UHJvbWlzZSA9IGJhY2tlbmRJbmZvLmJhY2tlbmQuaW5pdChiYWNrZW5kTmFtZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBiYWNrZW5kSW5mby5pbml0UHJvbWlzZTtcbiAgICAgIGJhY2tlbmRJbmZvLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBiYWNrZW5kSW5mby5iYWNrZW5kO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghaXNJbml0aWFsaXppbmcpIHtcbiAgICAgICAgYmFja2VuZEluZm8uZXJyb3IgPSBgJHtlfWA7XG4gICAgICAgIGJhY2tlbmRJbmZvLmFib3J0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhY2tlbmRJbmZvLmVycm9yITtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIGJhY2tlbmRJbmZvLmluaXRQcm9taXNlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXNvbHZlIGV4ZWN1dGlvbiBwcm92aWRlcnMgZnJvbSB0aGUgc3BlY2lmaWMgc2Vzc2lvbiBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gdGhlIHNlc3Npb24gb3B0aW9ucyBvYmplY3QuXG4gKiBAcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHR1cGxlIG9mIGFuIGluaXRpYWxpemVkIGJhY2tlbmQgaW5zdGFuY2UgYW5kIGEgc2Vzc2lvbiBvcHRpb25zIG9iamVjdCB3aXRoXG4gKiBmaWx0ZXJlZCBFUCBsaXN0LlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVCYWNrZW5kQW5kRXhlY3V0aW9uUHJvdmlkZXJzID0gYXN5bmMob3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6XG4gICAgUHJvbWlzZTxbYmFja2VuZDogQmFja2VuZCwgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9uc10+ID0+IHtcbiAgICAgIC8vIGV4dHJhY3QgYmFja2VuZCBoaW50cyBmcm9tIHNlc3Npb24gb3B0aW9uc1xuICAgICAgY29uc3QgZXBzID0gb3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMgfHwgW107XG4gICAgICBjb25zdCBiYWNrZW5kSGludHMgPSBlcHMubWFwKGkgPT4gdHlwZW9mIGkgPT09ICdzdHJpbmcnID8gaSA6IGkubmFtZSk7XG4gICAgICBjb25zdCBiYWNrZW5kTmFtZXMgPSBiYWNrZW5kSGludHMubGVuZ3RoID09PSAwID8gYmFja2VuZHNTb3J0ZWRCeVByaW9yaXR5IDogYmFja2VuZEhpbnRzO1xuXG4gICAgICAvLyB0cnkgdG8gcmVzb2x2ZSBhbmQgaW5pdGlhbGl6ZSBhbGwgcmVxdWVzdGVkIGJhY2tlbmRzXG4gICAgICBsZXQgYmFja2VuZDogQmFja2VuZHx1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUJhY2tlbmROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgZm9yIChjb25zdCBiYWNrZW5kTmFtZSBvZiBiYWNrZW5kTmFtZXMpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZVJlc3VsdCA9IGF3YWl0IHRyeVJlc29sdmVBbmRJbml0aWFsaXplQmFja2VuZChiYWNrZW5kTmFtZSk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZVJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaCh7bmFtZTogYmFja2VuZE5hbWUsIGVycjogcmVzb2x2ZVJlc3VsdH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghYmFja2VuZCkge1xuICAgICAgICAgICAgYmFja2VuZCA9IHJlc29sdmVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChiYWNrZW5kID09PSByZXNvbHZlUmVzdWx0KSB7XG4gICAgICAgICAgICBhdmFpbGFibGVCYWNrZW5kTmFtZXMuYWRkKGJhY2tlbmROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gaWYgbm8gYmFja2VuZCBpcyBhdmFpbGFibGUsIHRocm93IGVycm9yLlxuICAgICAgaWYgKCFiYWNrZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gYXZhaWxhYmxlIGJhY2tlbmQgZm91bmQuIEVSUjogJHtlcnJvcnMubWFwKGUgPT4gYFske2UubmFtZX1dICR7ZS5lcnJ9YCkuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gZm9yIGVhY2ggZXhwbGljaXRseSByZXF1ZXN0ZWQgYmFja2VuZCwgaWYgaXQncyBub3QgYXZhaWxhYmxlLCBvdXRwdXQgd2FybmluZyBtZXNzYWdlLlxuICAgICAgZm9yIChjb25zdCB7bmFtZSwgZXJyfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgaWYgKGJhY2tlbmRIaW50cy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS53YXJuKGByZW1vdmluZyByZXF1ZXN0ZWQgZXhlY3V0aW9uIHByb3ZpZGVyIFwiJHtcbiAgICAgICAgICAgICAgbmFtZX1cIiBmcm9tIHNlc3Npb24gb3B0aW9ucyBiZWNhdXNlIGl0IGlzIG5vdCBhdmFpbGFibGU6ICR7ZXJyfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkRXBzID0gZXBzLmZpbHRlcihpID0+IGF2YWlsYWJsZUJhY2tlbmROYW1lcy5oYXModHlwZW9mIGkgPT09ICdzdHJpbmcnID8gaSA6IGkubmFtZSkpO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBiYWNrZW5kLCBuZXcgUHJveHkob3B0aW9ucywge1xuICAgICAgICAgIGdldDogKHRhcmdldCwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdleGVjdXRpb25Qcm92aWRlcnMnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEVwcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIF07XG4gICAgfTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9ufSBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLmpzJztcbmltcG9ydCB7T25ueFZhbHVlfSBmcm9tICcuL29ubngtdmFsdWUuanMnO1xuaW1wb3J0IHtUcmFpbmluZ1Nlc3Npb259IGZyb20gJy4vdHJhaW5pbmctc2Vzc2lvbi5qcyc7XG5cbi8qKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgU2Vzc2lvbkhhbmRsZXIge1xuICB0eXBlIEZlZWRzVHlwZSA9IHtbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlfTtcbiAgdHlwZSBGZXRjaGVzVHlwZSA9IHtbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlIHwgbnVsbH07XG4gIHR5cGUgUmV0dXJuVHlwZSA9IHtbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlfTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHNoYXJlZCBTZXNzaW9uSGFuZGxlciBmdW5jdGlvbmFsaXR5XG4gKlxuICogQGlnbm9yZVxuICovXG5pbnRlcmZhY2UgU2Vzc2lvbkhhbmRsZXIge1xuICBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD47XG5cbiAgcmVhZG9ubHkgaW5wdXROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IG91dHB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnQgYSBoYW5kbGVyIGluc3RhbmNlIG9mIGFuIGluZmVyZW5jZSBzZXNzaW9uLlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmZlcmVuY2VTZXNzaW9uSGFuZGxlciBleHRlbmRzIFNlc3Npb25IYW5kbGVyIHtcbiAgc3RhcnRQcm9maWxpbmcoKTogdm9pZDtcbiAgZW5kUHJvZmlsaW5nKCk6IHZvaWQ7XG5cbiAgcnVuKGZlZWRzOiBTZXNzaW9uSGFuZGxlci5GZWVkc1R5cGUsIGZldGNoZXM6IFNlc3Npb25IYW5kbGVyLkZldGNoZXNUeXBlLFxuICAgICAgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTxTZXNzaW9uSGFuZGxlci5SZXR1cm5UeXBlPjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnQgYSBoYW5kbGVyIGluc3RhbmNlIG9mIGEgdHJhaW5pbmcgaW5mZXJlbmNlIHNlc3Npb24uXG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYWluaW5nU2Vzc2lvbkhhbmRsZXIgZXh0ZW5kcyBTZXNzaW9uSGFuZGxlciB7XG4gIHJlYWRvbmx5IGV2YWxJbnB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgZXZhbE91dHB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICBsYXp5UmVzZXRHcmFkKCk6IFByb21pc2U8dm9pZD47XG4gIHJ1blRyYWluU3RlcChcbiAgICAgIGZlZWRzOiBTZXNzaW9uSGFuZGxlci5GZWVkc1R5cGUsIGZldGNoZXM6IFNlc3Npb25IYW5kbGVyLkZldGNoZXNUeXBlLFxuICAgICAgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTxTZXNzaW9uSGFuZGxlci5SZXR1cm5UeXBlPjtcbiAgcnVuT3B0aW1pemVyU3RlcChvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICBydW5FdmFsU3RlcChcbiAgICAgIGZlZWRzOiBTZXNzaW9uSGFuZGxlci5GZWVkc1R5cGUsIGZldGNoZXM6IFNlc3Npb25IYW5kbGVyLkZldGNoZXNUeXBlLFxuICAgICAgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTxTZXNzaW9uSGFuZGxlci5SZXR1cm5UeXBlPjtcblxuICBnZXRQYXJhbWV0ZXJzU2l6ZSh0cmFpbmFibGVPbmx5OiBib29sZWFuKTogUHJvbWlzZTxudW1iZXI+O1xuICBsb2FkUGFyYW1ldGVyc0J1ZmZlcihidWZmZXI6IFVpbnQ4QXJyYXksIHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xuICBnZXRDb250aWd1b3VzUGFyYW1ldGVycyh0cmFpbmFibGVPbmx5OiBib29sZWFuKTogUHJvbWlzZTxPbm54VmFsdWU+O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCBhIGJhY2tlbmQgdGhhdCBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbiBvZiBtb2RlbCBpbmZlcmVuY2luZy5cbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2VuZCB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBiYWNrZW5kIGFzeW5jaHJvbm91c2x5LiBTaG91bGQgdGhyb3cgd2hlbiBmYWlsZWQuXG4gICAqL1xuICBpbml0KGJhY2tlbmROYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNyZWF0ZUluZmVyZW5jZVNlc3Npb25IYW5kbGVyKHVyaU9yQnVmZmVyOiBzdHJpbmd8VWludDhBcnJheSwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcj47XG5cbiAgY3JlYXRlVHJhaW5pbmdTZXNzaW9uSGFuZGxlcj9cbiAgICAgIChjaGVja3BvaW50U3RhdGVVcmlPckJ1ZmZlcjogVHJhaW5pbmdTZXNzaW9uLlVyaU9yQnVmZmVyLCB0cmFpbk1vZGVsVXJpT3JCdWZmZXI6IFRyYWluaW5nU2Vzc2lvbi5VcmlPckJ1ZmZlcixcbiAgICAgICBldmFsTW9kZWxVcmlPckJ1ZmZlcjogVHJhaW5pbmdTZXNzaW9uLlVyaU9yQnVmZmVyLCBvcHRpbWl6ZXJNb2RlbFVyaU9yQnVmZmVyOiBUcmFpbmluZ1Nlc3Npb24uVXJpT3JCdWZmZXIsXG4gICAgICAgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6IFByb21pc2U8VHJhaW5pbmdTZXNzaW9uSGFuZGxlcj47XG59XG5cbmV4cG9ydCB7cmVnaXN0ZXJCYWNrZW5kfSBmcm9tICcuL2JhY2tlbmQtaW1wbC5qcyc7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgL2pzL3NjcmlwdHMvdXBkYXRlLXZlcnNpb24udHNcbi8vIERvIG5vdCBtb2RpZnkgZmlsZSBjb250ZW50IG1hbnVhbGx5LlxuXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICcxLjE4LjAnO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0Vudn0gZnJvbSAnLi9lbnYuanMnO1xuaW1wb3J0IHt2ZXJzaW9ufSBmcm9tICcuL3ZlcnNpb24uanMnO1xuXG50eXBlIExvZ0xldmVsVHlwZSA9IEVudlsnbG9nTGV2ZWwnXTtcblxubGV0IGxvZ0xldmVsVmFsdWU6IFJlcXVpcmVkPExvZ0xldmVsVHlwZT4gPSAnd2FybmluZyc7XG5cbmV4cG9ydCBjb25zdCBlbnY6IEVudiA9IHtcbiAgd2FzbToge30gYXMgRW52LldlYkFzc2VtYmx5RmxhZ3MsXG4gIHdlYmdsOiB7fSBhcyBFbnYuV2ViR0xGbGFncyxcbiAgd2ViZ3B1OiB7fSBhcyBFbnYuV2ViR3B1RmxhZ3MsXG4gIHZlcnNpb25zOiB7Y29tbW9uOiB2ZXJzaW9ufSxcblxuICBzZXQgbG9nTGV2ZWwodmFsdWU6IExvZ0xldmVsVHlwZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8IFsndmVyYm9zZScsICdpbmZvJywgJ3dhcm5pbmcnLCAnZXJyb3InLCAnZmF0YWwnXS5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9nZ2luZyBsZXZlbDogJHt2YWx1ZX1gKTtcbiAgICB9XG4gICAgbG9nTGV2ZWxWYWx1ZSA9IHZhbHVlO1xuICB9LFxuICBnZXQgbG9nTGV2ZWwoKTogUmVxdWlyZWQ8TG9nTGV2ZWxUeXBlPiB7XG4gICAgcmV0dXJuIGxvZ0xldmVsVmFsdWU7XG4gIH0sXG59O1xuXG4vLyBzZXQgcHJvcGVydHkgJ2xvZ0xldmVsJyBzbyB0aGF0IHRoZXkgY2FuIGJlIGNvcnJlY3RseSB0cmFuc2ZlcnJlZCB0byB3b3JrZXIgYnkgYHBvc3RNZXNzYWdlKClgLlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGVudiwgJ2xvZ0xldmVsJywge2VudW1lcmFibGU6IHRydWV9KTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtlbnYgYXMgZW52SW1wbH0gZnJvbSAnLi9lbnYtaW1wbC5qcyc7XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBFbnYge1xuICBleHBvcnQgdHlwZSBXYXNtUHJlZml4T3JGaWxlUGF0aHMgPSBzdHJpbmd8e1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuICAgICdvcnQtd2FzbS53YXNtJz86IHN0cmluZztcbiAgICAnb3J0LXdhc20tdGhyZWFkZWQud2FzbSc/OiBzdHJpbmc7XG4gICAgJ29ydC13YXNtLXNpbWQud2FzbSc/OiBzdHJpbmc7XG4gICAgJ29ydC10cmFpbmluZy13YXNtLXNpbWQud2FzbSc/OiBzdHJpbmc7XG4gICAgJ29ydC13YXNtLXNpbWQtdGhyZWFkZWQud2FzbSc/OiBzdHJpbmc7XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbiAgfTtcbiAgZXhwb3J0IGludGVyZmFjZSBXZWJBc3NlbWJseUZsYWdzIHtcbiAgICAvKipcbiAgICAgKiBzZXQgb3IgZ2V0IG51bWJlciBvZiB0aHJlYWQocykuIElmIG9taXR0ZWQgb3Igc2V0IHRvIDAsIG51bWJlciBvZiB0aHJlYWQocykgd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHN5c3RlbS4gSWYgc2V0XG4gICAgICogdG8gMSwgbm8gd29ya2VyIHRocmVhZCB3aWxsIGJlIHNwYXduZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBXZWJBc3NlbWJseSBtdWx0aXRocmVhZCBmZWF0dXJlIGlzIGF2YWlsYWJsZSBpbiBjdXJyZW50IGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGAwYFxuICAgICAqL1xuICAgIG51bVRocmVhZHM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBzZXQgb3IgZ2V0IGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gZW5hYmxlIFNJTUQuIElmIHNldCB0byBmYWxzZSwgU0lNRCB3aWxsIGJlIGZvcmNlbHkgZGlzYWJsZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgd2hlbiBXZWJBc3NlbWJseSBTSU1EIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGN1cnJlbnQgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0VmFsdWUgYHRydWVgXG4gICAgICovXG4gICAgc2ltZD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBzZXQgb3IgZ2V0IGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gZW5hYmxlIHRyYWNlLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGBlbnYudHJhY2VgIGluc3RlYWQuIElmIGBlbnYudHJhY2VgIGlzIHNldCwgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG4gICAgICovXG4gICAgdHJhY2U/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU2V0IG9yIGdldCBhIG51bWJlciBzcGVjaWZ5aW5nIHRoZSB0aW1lb3V0IGZvciBpbml0aWFsaXphdGlvbiBvZiBXZWJBc3NlbWJseSBiYWNrZW5kLCBpbiBtaWxsaXNlY29uZHMuIEEgemVyb1xuICAgICAqIHZhbHVlIGluZGljYXRlcyBubyB0aW1lb3V0IGlzIHNldC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0VmFsdWUgYDBgXG4gICAgICovXG4gICAgaW5pdFRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgYSBjdXN0b20gVVJMIHByZWZpeCB0byB0aGUgLndhc20gZmlsZXMgb3IgYSBzZXQgb2Ygb3ZlcnJpZGVzIGZvciBlYWNoIC53YXNtIGZpbGUuIFRoZSBvdmVycmlkZSBwYXRoIHNob3VsZCBiZVxuICAgICAqIGFuIGFic29sdXRlIHBhdGguXG4gICAgICovXG4gICAgd2FzbVBhdGhzPzogV2FzbVByZWZpeE9yRmlsZVBhdGhzO1xuXG4gICAgLyoqXG4gICAgICogU2V0IG9yIGdldCBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHByb3h5IHRoZSBleGVjdXRpb24gb2YgbWFpbiB0aHJlYWQgdG8gYSB3b3JrZXIgdGhyZWFkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG4gICAgICovXG4gICAgcHJveHk/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBXZWJHTEZsYWdzIHtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBXZWJHTCBDb250ZXh0IElEICh3ZWJnbCBvciB3ZWJnbDIpLlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgJ3dlYmdsMidgXG4gICAgICovXG4gICAgY29udGV4dElkPzogJ3dlYmdsJ3wnd2ViZ2wyJztcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvbnRleHQ6IFdlYkdMUmVuZGVyaW5nQ29udGV4dDtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBtYXhpbXVtIGJhdGNoIHNpemUgZm9yIG1hdG11bC4gMCBtZWFucyB0byBkaXNhYmxlIGJhdGNoaW5nLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBtYXRtdWxNYXhCYXRjaFNpemU/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogU2V0IG9yIGdldCB0aGUgdGV4dHVyZSBjYWNoZSBtb2RlLlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgJ2Z1bGwnYFxuICAgICAqL1xuICAgIHRleHR1cmVDYWNoZU1vZGU/OiAnaW5pdGlhbGl6ZXJPbmx5J3wnZnVsbCc7XG4gICAgLyoqXG4gICAgICogU2V0IG9yIGdldCB0aGUgcGFja2VkIHRleHR1cmUgbW9kZVxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG4gICAgICovXG4gICAgcGFjaz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogU2V0IG9yIGdldCB3aGV0aGVyIGVuYWJsZSBhc3luYyBkb3dubG9hZC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuICAgICAqL1xuICAgIGFzeW5jPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgV2ViR3B1UHJvZmlsaW5nRGF0YVYxVGVuc29yTWV0YWRhdGEge1xuICAgIGRpbXM6IHJlYWRvbmx5IG51bWJlcltdO1xuICAgIGRhdGFUeXBlOiBzdHJpbmc7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBXZWJHcHVQcm9maWxpbmdEYXRhVjEge1xuICAgIHZlcnNpb246IDE7XG4gICAgaW5wdXRzTWV0YWRhdGE6IHJlYWRvbmx5IFdlYkdwdVByb2ZpbGluZ0RhdGFWMVRlbnNvck1ldGFkYXRhW107XG4gICAgb3V0cHV0c01ldGFkYXRhOiByZWFkb25seSBXZWJHcHVQcm9maWxpbmdEYXRhVjFUZW5zb3JNZXRhZGF0YVtdO1xuICAgIGtlcm5lbElkOiBudW1iZXI7XG4gICAga2VybmVsVHlwZTogc3RyaW5nO1xuICAgIGtlcm5lbE5hbWU6IHN0cmluZztcbiAgICBwcm9ncmFtTmFtZTogc3RyaW5nO1xuICAgIHN0YXJ0VGltZTogbnVtYmVyO1xuICAgIGVuZFRpbWU6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFdlYkdwdVByb2ZpbGluZ0RhdGEgPSBXZWJHcHVQcm9maWxpbmdEYXRhVjE7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBXZWJHcHVGbGFncyB7XG4gICAgLyoqXG4gICAgICogU2V0IG9yIGdldCB0aGUgcHJvZmlsaW5nIG1vZGUuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYGVudi53ZWJncHUucHJvZmlsaW5nLm1vZGVgIGluc3RlYWQuIElmIGBlbnYud2ViZ3B1LnByb2ZpbGluZy5tb2RlYCBpcyBzZXQsIHRoaXMgcHJvcGVydHkgd2lsbCBiZVxuICAgICAqIGlnbm9yZWQuXG4gICAgICovXG4gICAgcHJvZmlsaW5nTW9kZT86ICdvZmYnfCdkZWZhdWx0JztcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBwcm9maWxpbmcgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBwcm9maWxpbmc/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFNldCBvciBnZXQgdGhlIHByb2ZpbGluZyBtb2RlLlxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0VmFsdWUgYCdvZmYnYFxuICAgICAgICovXG4gICAgICBtb2RlPzogJ29mZid8J2RlZmF1bHQnO1xuXG4gICAgICAvKipcbiAgICAgICAqIFNldCBvciBnZXQgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIGEgcHJvZmlsaW5nIGRhdGEgaXMgcmVjZWl2ZWQuIElmIG5vdCBzZXQsIHRoZSBwcm9maWxpbmcgZGF0YSB3aWxsIGJlXG4gICAgICAgKiBwcmludGVkIHRvIGNvbnNvbGUuXG4gICAgICAgKi9cbiAgICAgIG9uZGF0YT86IChkYXRhOiBXZWJHcHVQcm9maWxpbmdEYXRhKSA9PiB2b2lkO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IG9yIGdldCB0aGUgcG93ZXIgcHJlZmVyZW5jZS5cbiAgICAgKlxuICAgICAqIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBvbmx5IGhhcyBlZmZlY3QgYmVmb3JlIHRoZSBmaXJzdCBXZWJHUFUgaW5mZXJlbmNlIHNlc3Npb24gaXMgY3JlYXRlZC4gVGhlIHZhbHVlIHdpbGwgYmVcbiAgICAgKiB1c2VkIGFzIG9wdGlvbnMgZm9yIGBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKClgLlxuICAgICAqXG4gICAgICogU2VlIHtAbGluayBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNkaWN0ZGVmLWdwdXJlcXVlc3RhZGFwdGVyb3B0aW9uc30gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0VmFsdWUgYHVuZGVmaW5lZGBcbiAgICAgKi9cbiAgICBwb3dlclByZWZlcmVuY2U/OiAnbG93LXBvd2VyJ3wnaGlnaC1wZXJmb3JtYW5jZSc7XG4gICAgLyoqXG4gICAgICogU2V0IG9yIGdldCB0aGUgZm9yY2UgZmFsbGJhY2sgYWRhcHRlciBmbGFnLlxuICAgICAqXG4gICAgICogU2V0dGluZyB0aGlzIHByb3BlcnR5IG9ubHkgaGFzIGVmZmVjdCBiZWZvcmUgdGhlIGZpcnN0IFdlYkdQVSBpbmZlcmVuY2Ugc2Vzc2lvbiBpcyBjcmVhdGVkLiBUaGUgdmFsdWUgd2lsbCBiZVxuICAgICAqIHVzZWQgYXMgb3B0aW9ucyBmb3IgYG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKWAuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2RpY3RkZWYtZ3B1cmVxdWVzdGFkYXB0ZXJvcHRpb25zfSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSBgdW5kZWZpbmVkYFxuICAgICAqL1xuICAgIGZvcmNlRmFsbGJhY2tBZGFwdGVyPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBTZXQgb3IgZ2V0IHRoZSBhZGFwdGVyIGZvciBXZWJHUFUuXG4gICAgICpcbiAgICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgb25seSBoYXMgZWZmZWN0IGJlZm9yZSB0aGUgZmlyc3QgV2ViR1BVIGluZmVyZW5jZSBzZXNzaW9uIGlzIGNyZWF0ZWQuIFRoZSB2YWx1ZSB3aWxsIGJlXG4gICAgICogdXNlZCBhcyB0aGUgR1BVIGFkYXB0ZXIgZm9yIHRoZSB1bmRlcmx5aW5nIFdlYkdQVSBiYWNrZW5kIHRvIGNyZWF0ZSBHUFUgZGV2aWNlLlxuICAgICAqXG4gICAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBub3Qgc2V0LCBpdCB3aWxsIGJlIGF2YWlsYWJsZSB0byBnZXQgYWZ0ZXIgdGhlIGZpcnN0IFdlYkdQVSBpbmZlcmVuY2Ugc2Vzc2lvbiBpcyBjcmVhdGVkLiBUaGVcbiAgICAgKiB2YWx1ZSB3aWxsIGJlIHRoZSBHUFUgYWRhcHRlciB0aGF0IGNyZWF0ZWQgYnkgdGhlIHVuZGVybHlpbmcgV2ViR1BVIGJhY2tlbmQuXG4gICAgICpcbiAgICAgKiBXaGVuIHVzZSB3aXRoIFR5cGVTY3JpcHQsIHRoZSB0eXBlIG9mIHRoaXMgcHJvcGVydHkgaXMgYEdQVUFkYXB0ZXJgIGRlZmluZWQgaW4gXCJAd2ViZ3B1L3R5cGVzXCIuXG4gICAgICogVXNlIGBjb25zdCBhZGFwdGVyID0gZW52LndlYmdwdS5hZGFwdGVyIGFzIEdQVUFkYXB0ZXI7YCBpbiBUeXBlU2NyaXB0IHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IHdpdGggY29ycmVjdCB0eXBlLlxuICAgICAqXG4gICAgICogc2VlIGNvbW1lbnRzIG9uIHtAbGluayBUZW5zb3IuR3B1QnVmZmVyVHlwZX1cbiAgICAgKi9cbiAgICBhZGFwdGVyOiB1bmtub3duO1xuICAgIC8qKlxuICAgICAqIEdldCB0aGUgZGV2aWNlIGZvciBXZWJHUFUuXG4gICAgICpcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyIHRoZSBmaXJzdCBXZWJHUFUgaW5mZXJlbmNlIHNlc3Npb24gaXMgY3JlYXRlZC5cbiAgICAgKlxuICAgICAqIFdoZW4gdXNlIHdpdGggVHlwZVNjcmlwdCwgdGhlIHR5cGUgb2YgdGhpcyBwcm9wZXJ0eSBpcyBgR1BVRGV2aWNlYCBkZWZpbmVkIGluIFwiQHdlYmdwdS90eXBlc1wiLlxuICAgICAqIFVzZSBgY29uc3QgZGV2aWNlID0gZW52LndlYmdwdS5kZXZpY2UgYXMgR1BVRGV2aWNlO2AgaW4gVHlwZVNjcmlwdCB0byBhY2Nlc3MgdGhpcyBwcm9wZXJ0eSB3aXRoIGNvcnJlY3QgdHlwZS5cbiAgICAgKlxuICAgICAqIHNlZSBjb21tZW50cyBvbiB7QGxpbmsgVGVuc29yLkdwdUJ1ZmZlclR5cGV9IGZvciBtb3JlIGRldGFpbHMgYWJvdXQgd2h5IG5vdCB1c2UgdHlwZXMgZGVmaW5lZCBpbiBcIkB3ZWJncHUvdHlwZXNcIi5cbiAgICAgKi9cbiAgICByZWFkb25seSBkZXZpY2U6IHVua25vd247XG4gICAgLyoqXG4gICAgICogU2V0IG9yIGdldCB3aGV0aGVyIHZhbGlkYXRlIGlucHV0IGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcbiAgICAgKi9cbiAgICB2YWxpZGF0ZUlucHV0Q29udGVudD86IGJvb2xlYW47XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnYge1xuICAvKipcbiAgICogc2V0IHRoZSBzZXZlcml0eSBsZXZlbCBmb3IgbG9nZ2luZy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBgJ3dhcm5pbmcnYFxuICAgKi9cbiAgbG9nTGV2ZWw/OiAndmVyYm9zZSd8J2luZm8nfCd3YXJuaW5nJ3wnZXJyb3InfCdmYXRhbCc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlIHdoZXRoZXIgcnVuIGluIGRlYnVnIG1vZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuICAgKi9cbiAgZGVidWc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBzZXQgb3IgZ2V0IGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gZW5hYmxlIHRyYWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcbiAgICovXG4gIHRyYWNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2V0IHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgcGFja2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb25zOiB7XG4gICAgcmVhZG9ubHkgY29tbW9uOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgd2ViPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG5vZGU/OiBzdHJpbmc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIHJlYWRvbmx5ICdyZWFjdC1uYXRpdmUnPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnQgYSBzZXQgb2YgZmxhZ3MgZm9yIFdlYkFzc2VtYmx5XG4gICAqL1xuICByZWFkb25seSB3YXNtOiBFbnYuV2ViQXNzZW1ibHlGbGFncztcblxuICAvKipcbiAgICogUmVwcmVzZW50IGEgc2V0IG9mIGZsYWdzIGZvciBXZWJHTFxuICAgKi9cbiAgcmVhZG9ubHkgd2ViZ2w6IEVudi5XZWJHTEZsYWdzO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnQgYSBzZXQgb2YgZmxhZ3MgZm9yIFdlYkdQVVxuICAgKi9cbiAgcmVhZG9ubHkgd2ViZ3B1OiBFbnYuV2ViR3B1RmxhZ3M7XG5cbiAgW25hbWU6IHN0cmluZ106IHVua25vd247XG59XG5cbi8qKlxuICogUmVwcmVzZW50IGEgc2V0IG9mIGZsYWdzIGFzIGEgZ2xvYmFsIHNpbmdsZXRvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudjogRW52ID0gZW52SW1wbDtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3JUb0RhdGFVcmxPcHRpb25zLCBUZW5zb3JUb0ltYWdlRGF0YU9wdGlvbnN9IGZyb20gJy4vdGVuc29yLWNvbnZlcnNpb24uanMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yLmpzJztcblxuLyoqXG4gKiBpbXBsZW1lbnRhdGlvbiBvZiBUZW5zb3IudG9EYXRhVVJMKClcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvclRvRGF0YVVSTCA9ICh0ZW5zb3I6IFRlbnNvciwgb3B0aW9ucz86IFRlbnNvclRvRGF0YVVybE9wdGlvbnMpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBjYW52YXMgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykgOiAobmV3IE9mZnNjcmVlbkNhbnZhcygxLCAxKSk7XG4gIGNhbnZhcy53aWR0aCA9IHRlbnNvci5kaW1zWzNdO1xuICBjYW52YXMuaGVpZ2h0ID0gdGVuc29yLmRpbXNbMl07XG4gIGNvbnN0IHBpeGVsczJEQ29udGV4dCA9XG4gICAgICBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyAoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCk7XG5cbiAgaWYgKHBpeGVsczJEQ29udGV4dCAhPSBudWxsKSB7XG4gICAgLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIGhlaWdodCBhbmQgd2lkdGggJiBmb3JtYXRcbiAgICBsZXQgd2lkdGg6IG51bWJlcjtcbiAgICBsZXQgaGVpZ2h0OiBudW1iZXI7XG4gICAgaWYgKG9wdGlvbnM/LnRlbnNvckxheW91dCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGVuc29yTGF5b3V0ID09PSAnTkhXQycpIHtcbiAgICAgIHdpZHRoID0gdGVuc29yLmRpbXNbMl07XG4gICAgICBoZWlnaHQgPSB0ZW5zb3IuZGltc1szXTtcbiAgICB9IGVsc2UgeyAgLy8gRGVmYXVsdCBsYXlvdXQgaXMgTkNXSFxuICAgICAgd2lkdGggPSB0ZW5zb3IuZGltc1szXTtcbiAgICAgIGhlaWdodCA9IHRlbnNvci5kaW1zWzJdO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0Zm9ybWF0ID0gb3B0aW9ucz8uZm9ybWF0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmZvcm1hdCA6ICdSR0InO1xuXG4gICAgY29uc3Qgbm9ybSA9IG9wdGlvbnM/Lm5vcm07XG4gICAgbGV0IG5vcm1NZWFuOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICBsZXQgbm9ybUJpYXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIGlmIChub3JtID09PSB1bmRlZmluZWQgfHwgbm9ybS5tZWFuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vcm1NZWFuID0gWzI1NSwgMjU1LCAyNTUsIDI1NV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgKG5vcm0ubWVhbikgPT09ICdudW1iZXInKSB7XG4gICAgICAgIG5vcm1NZWFuID0gW25vcm0ubWVhbiwgbm9ybS5tZWFuLCBub3JtLm1lYW4sIG5vcm0ubWVhbl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtTWVhbiA9IFtub3JtLm1lYW5bMF0sIG5vcm0ubWVhblsxXSwgbm9ybS5tZWFuWzJdLCAwXTtcbiAgICAgICAgaWYgKG5vcm0ubWVhblszXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9ybU1lYW5bM10gPSBub3JtLm1lYW5bM107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vcm0gPT09IHVuZGVmaW5lZCB8fCBub3JtLmJpYXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9ybUJpYXMgPSBbMCwgMCwgMCwgMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgKG5vcm0uYmlhcykgPT09ICdudW1iZXInKSB7XG4gICAgICAgIG5vcm1CaWFzID0gW25vcm0uYmlhcywgbm9ybS5iaWFzLCBub3JtLmJpYXMsIG5vcm0uYmlhc107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtQmlhcyA9IFtub3JtLmJpYXNbMF0sIG5vcm0uYmlhc1sxXSwgbm9ybS5iaWFzWzJdLCAwXTtcbiAgICAgICAgaWYgKG5vcm0uYmlhc1szXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9ybUJpYXNbM10gPSBub3JtLmJpYXNbM107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdHJpZGUgPSBoZWlnaHQgKiB3aWR0aDtcbiAgICAvLyBEZWZhdWx0IHBvaW50ZXIgYXNzaWdubWVudHNcbiAgICBsZXQgclRlbnNvclBvaW50ZXIgPSAwLCBnVGVuc29yUG9pbnRlciA9IHN0cmlkZSwgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyLCBhVGVuc29yUG9pbnRlciA9IC0xO1xuXG4gICAgLy8gVXBkYXRpbmcgdGhlIHBvaW50ZXIgYXNzaWdubWVudHMgYmFzZWQgb24gdGhlIGlucHV0IGltYWdlIGZvcm1hdFxuICAgIGlmIChpbnB1dGZvcm1hdCA9PT0gJ1JHQkEnKSB7XG4gICAgICByVGVuc29yUG9pbnRlciA9IDA7XG4gICAgICBnVGVuc29yUG9pbnRlciA9IHN0cmlkZTtcbiAgICAgIGJUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMjtcbiAgICAgIGFUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMztcbiAgICB9IGVsc2UgaWYgKGlucHV0Zm9ybWF0ID09PSAnUkdCJykge1xuICAgICAgclRlbnNvclBvaW50ZXIgPSAwO1xuICAgICAgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGU7XG4gICAgICBiVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDI7XG4gICAgfSBlbHNlIGlmIChpbnB1dGZvcm1hdCA9PT0gJ1JCRycpIHtcbiAgICAgIHJUZW5zb3JQb2ludGVyID0gMDtcbiAgICAgIGJUZW5zb3JQb2ludGVyID0gc3RyaWRlO1xuICAgICAgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICBjb25zdCBSID0gKCh0ZW5zb3IuZGF0YVtyVGVuc29yUG9pbnRlcisrXSBhcyBudW1iZXIpIC0gbm9ybUJpYXNbMF0pICogbm9ybU1lYW5bMF07ICAvLyBSIHZhbHVlXG4gICAgICAgIGNvbnN0IEcgPSAoKHRlbnNvci5kYXRhW2dUZW5zb3JQb2ludGVyKytdIGFzIG51bWJlcikgLSBub3JtQmlhc1sxXSkgKiBub3JtTWVhblsxXTsgIC8vIEcgdmFsdWVcbiAgICAgICAgY29uc3QgQiA9ICgodGVuc29yLmRhdGFbYlRlbnNvclBvaW50ZXIrK10gYXMgbnVtYmVyKSAtIG5vcm1CaWFzWzJdKSAqIG5vcm1NZWFuWzJdOyAgLy8gQiB2YWx1ZVxuICAgICAgICBjb25zdCBBID0gYVRlbnNvclBvaW50ZXIgPT09IC0xID9cbiAgICAgICAgICAgIDI1NSA6XG4gICAgICAgICAgICAoKHRlbnNvci5kYXRhW2FUZW5zb3JQb2ludGVyKytdIGFzIG51bWJlcikgLSBub3JtQmlhc1szXSkgKiBub3JtTWVhblszXTsgIC8vIEEgdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC1wbHVzLW9wZXJhbmRzXG4gICAgICAgIHBpeGVsczJEQ29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgnICsgUiArICcsJyArIEcgKyAnLCcgKyBCICsgJywnICsgQSArICcpJztcbiAgICAgICAgcGl4ZWxzMkRDb250ZXh0LmZpbGxSZWN0KGosIGksIDEsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoJ3RvRGF0YVVSTCcgaW4gY2FudmFzKSB7XG4gICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvRGF0YVVSTCBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBhY2Nlc3MgaW1hZ2UgZGF0YScpO1xuICB9XG59O1xuXG4vKipcbiAqIGltcGxlbWVudGF0aW9uIG9mIFRlbnNvci50b0ltYWdlRGF0YSgpXG4gKi9cbmV4cG9ydCBjb25zdCB0ZW5zb3JUb0ltYWdlRGF0YSA9ICh0ZW5zb3I6IFRlbnNvciwgb3B0aW9ucz86IFRlbnNvclRvSW1hZ2VEYXRhT3B0aW9ucyk6IEltYWdlRGF0YSA9PiB7XG4gIGNvbnN0IHBpeGVsczJEQ29udGV4dCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKSA6XG4gICAgICBuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsIDEpLmdldENvbnRleHQoJzJkJykgYXMgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBsZXQgaW1hZ2U6IEltYWdlRGF0YTtcbiAgaWYgKHBpeGVsczJEQ29udGV4dCAhPSBudWxsKSB7XG4gICAgLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIGhlaWdodCBhbmQgd2lkdGggJiBmb3JtYXRcbiAgICBsZXQgd2lkdGg6IG51bWJlcjtcbiAgICBsZXQgaGVpZ2h0OiBudW1iZXI7XG4gICAgbGV0IGNoYW5uZWxzOiBudW1iZXI7XG4gICAgaWYgKG9wdGlvbnM/LnRlbnNvckxheW91dCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGVuc29yTGF5b3V0ID09PSAnTkhXQycpIHtcbiAgICAgIHdpZHRoID0gdGVuc29yLmRpbXNbMl07XG4gICAgICBoZWlnaHQgPSB0ZW5zb3IuZGltc1sxXTtcbiAgICAgIGNoYW5uZWxzID0gdGVuc29yLmRpbXNbM107XG4gICAgfSBlbHNlIHsgIC8vIERlZmF1bHQgbGF5b3V0IGlzIE5DV0hcbiAgICAgIHdpZHRoID0gdGVuc29yLmRpbXNbM107XG4gICAgICBoZWlnaHQgPSB0ZW5zb3IuZGltc1syXTtcbiAgICAgIGNoYW5uZWxzID0gdGVuc29yLmRpbXNbMV07XG4gICAgfVxuICAgIGNvbnN0IGlucHV0Zm9ybWF0ID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gKG9wdGlvbnMuZm9ybWF0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmZvcm1hdCA6ICdSR0InKSA6ICdSR0InO1xuXG4gICAgY29uc3Qgbm9ybSA9IG9wdGlvbnM/Lm5vcm07XG4gICAgbGV0IG5vcm1NZWFuOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICBsZXQgbm9ybUJpYXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIGlmIChub3JtID09PSB1bmRlZmluZWQgfHwgbm9ybS5tZWFuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vcm1NZWFuID0gWzI1NSwgMjU1LCAyNTUsIDI1NV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgKG5vcm0ubWVhbikgPT09ICdudW1iZXInKSB7XG4gICAgICAgIG5vcm1NZWFuID0gW25vcm0ubWVhbiwgbm9ybS5tZWFuLCBub3JtLm1lYW4sIG5vcm0ubWVhbl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtTWVhbiA9IFtub3JtLm1lYW5bMF0sIG5vcm0ubWVhblsxXSwgbm9ybS5tZWFuWzJdLCAyNTVdO1xuICAgICAgICBpZiAobm9ybS5tZWFuWzNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub3JtTWVhblszXSA9IG5vcm0ubWVhblszXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9ybSA9PT0gdW5kZWZpbmVkIHx8IG5vcm0uYmlhcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBub3JtQmlhcyA9IFswLCAwLCAwLCAwXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiAobm9ybS5iaWFzKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbm9ybUJpYXMgPSBbbm9ybS5iaWFzLCBub3JtLmJpYXMsIG5vcm0uYmlhcywgbm9ybS5iaWFzXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1CaWFzID0gW25vcm0uYmlhc1swXSwgbm9ybS5iaWFzWzFdLCBub3JtLmJpYXNbMl0sIDBdO1xuICAgICAgICBpZiAobm9ybS5iaWFzWzNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub3JtQmlhc1szXSA9IG5vcm0uYmlhc1szXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0cmlkZSA9IGhlaWdodCAqIHdpZHRoO1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLmZvcm1hdCAhPT0gdW5kZWZpbmVkICYmIChjaGFubmVscyA9PT0gNCAmJiBvcHRpb25zLmZvcm1hdCAhPT0gJ1JHQkEnKSB8fFxuICAgICAgICAgIChjaGFubmVscyA9PT0gMyAmJiAob3B0aW9ucy5mb3JtYXQgIT09ICdSR0InICYmIG9wdGlvbnMuZm9ybWF0ICE9PSAnQkdSJykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGVuc29yIGZvcm1hdCBkb2VzblxcJ3QgbWF0Y2ggaW5wdXQgdGVuc29yIGRpbXMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IHBvaW50ZXIgYXNzaWdubWVudHNcbiAgICBjb25zdCBzdGVwID0gNDtcbiAgICBsZXQgckltYWdlUG9pbnRlciA9IDAsIGdJbWFnZVBvaW50ZXIgPSAxLCBiSW1hZ2VQb2ludGVyID0gMiwgYUltYWdlUG9pbnRlciA9IDM7XG4gICAgbGV0IHJUZW5zb3JQb2ludGVyID0gMCwgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGUsIGJUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMiwgYVRlbnNvclBvaW50ZXIgPSAtMTtcblxuICAgIC8vIFVwZGF0aW5nIHRoZSBwb2ludGVyIGFzc2lnbm1lbnRzIGJhc2VkIG9uIHRoZSBpbnB1dCBpbWFnZSBmb3JtYXRcbiAgICBpZiAoaW5wdXRmb3JtYXQgPT09ICdSR0JBJykge1xuICAgICAgclRlbnNvclBvaW50ZXIgPSAwO1xuICAgICAgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGU7XG4gICAgICBiVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDI7XG4gICAgICBhVGVuc29yUG9pbnRlciA9IHN0cmlkZSAqIDM7XG4gICAgfSBlbHNlIGlmIChpbnB1dGZvcm1hdCA9PT0gJ1JHQicpIHtcbiAgICAgIHJUZW5zb3JQb2ludGVyID0gMDtcbiAgICAgIGdUZW5zb3JQb2ludGVyID0gc3RyaWRlO1xuICAgICAgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRmb3JtYXQgPT09ICdSQkcnKSB7XG4gICAgICByVGVuc29yUG9pbnRlciA9IDA7XG4gICAgICBiVGVuc29yUG9pbnRlciA9IHN0cmlkZTtcbiAgICAgIGdUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMjtcbiAgICB9XG5cbiAgICBpbWFnZSA9IHBpeGVsczJEQ29udGV4dC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIGhlaWdodCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodCAqIHdpZHRoO1xuICAgICAgICAgckltYWdlUG9pbnRlciArPSBzdGVwLCBnSW1hZ2VQb2ludGVyICs9IHN0ZXAsIGJJbWFnZVBvaW50ZXIgKz0gc3RlcCwgYUltYWdlUG9pbnRlciArPSBzdGVwLCBpKyspIHtcbiAgICAgIGltYWdlLmRhdGFbckltYWdlUG9pbnRlcl0gPSAoKHRlbnNvci5kYXRhW3JUZW5zb3JQb2ludGVyKytdIGFzIG51bWJlcikgLSBub3JtQmlhc1swXSkgKiBub3JtTWVhblswXTsgIC8vIFIgdmFsdWVcbiAgICAgIGltYWdlLmRhdGFbZ0ltYWdlUG9pbnRlcl0gPSAoKHRlbnNvci5kYXRhW2dUZW5zb3JQb2ludGVyKytdIGFzIG51bWJlcikgLSBub3JtQmlhc1sxXSkgKiBub3JtTWVhblsxXTsgIC8vIEcgdmFsdWVcbiAgICAgIGltYWdlLmRhdGFbYkltYWdlUG9pbnRlcl0gPSAoKHRlbnNvci5kYXRhW2JUZW5zb3JQb2ludGVyKytdIGFzIG51bWJlcikgLSBub3JtQmlhc1syXSkgKiBub3JtTWVhblsyXTsgIC8vIEIgdmFsdWVcbiAgICAgIGltYWdlLmRhdGFbYUltYWdlUG9pbnRlcl0gPSBhVGVuc29yUG9pbnRlciA9PT0gLTEgP1xuICAgICAgICAgIDI1NSA6XG4gICAgICAgICAgKCh0ZW5zb3IuZGF0YVthVGVuc29yUG9pbnRlcisrXSBhcyBudW1iZXIpIC0gbm9ybUJpYXNbM10pICogbm9ybU1lYW5bM107ICAvLyBBIHZhbHVlXG4gICAgfVxuXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGFjY2VzcyBpbWFnZSBkYXRhJyk7XG4gIH1cbiAgcmV0dXJuIGltYWdlO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtPcHRpb25zRGltZW5zaW9ucywgT3B0aW9uc0Zvcm1hdCwgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzLCBPcHRpb25zVGVuc29yRm9ybWF0LCBPcHRpb25zVGVuc29yTGF5b3V0LCBUZW5zb3JGcm9tR3B1QnVmZmVyT3B0aW9ucywgVGVuc29yRnJvbUltYWdlQml0bWFwT3B0aW9ucywgVGVuc29yRnJvbUltYWdlRGF0YU9wdGlvbnMsIFRlbnNvckZyb21JbWFnZUVsZW1lbnRPcHRpb25zLCBUZW5zb3JGcm9tVGV4dHVyZU9wdGlvbnMsIFRlbnNvckZyb21VcmxPcHRpb25zfSBmcm9tICcuL3RlbnNvci1mYWN0b3J5LmpzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuL3RlbnNvci1pbXBsLmpzJztcbmltcG9ydCB7VGVuc29yIGFzIFRlbnNvckludGVyZmFjZX0gZnJvbSAnLi90ZW5zb3IuanMnO1xuXG5pbnRlcmZhY2UgQnVmZmVyVG9UZW5zb3JPcHRpb25zIGV4dGVuZHMgT3B0aW9uc0RpbWVuc2lvbnMsIE9wdGlvbnNUZW5zb3JMYXlvdXQsIE9wdGlvbnNOb3JtYWxpemF0aW9uUGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zRm9ybWF0LCBPcHRpb25zVGVuc29yRm9ybWF0IHt9XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IHRlbnNvciBvYmplY3QgZnJvbSBpbWFnZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0gYnVmZmVyIC0gRXh0cmFjdGVkIGltYWdlIGJ1ZmZlciBkYXRhIC0gYXNzdW1pbmcgUkdCQSBmb3JtYXRcbiAqIEBwYXJhbSBpbWFnZUZvcm1hdCAtIGlucHV0IGltYWdlIGNvbmZpZ3VyYXRpb24gLSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBoZWlnaHQsIHdpZHRoLCBmb3JtYXRcbiAqIEBwYXJhbSB0ZW5zb3JGb3JtYXQgLSBvdXRwdXQgdGVuc29yIGNvbmZpZ3VyYXRpb24gLSBEZWZhdWx0IGlzIFJHQiBmb3JtYXRcbiAqL1xuZXhwb3J0IGNvbnN0IGJ1ZmZlclRvVGVuc29yID0gKGJ1ZmZlcjogVWludDhDbGFtcGVkQXJyYXl8dW5kZWZpbmVkLCBvcHRpb25zOiBCdWZmZXJUb1RlbnNvck9wdGlvbnMpOiBUZW5zb3IgPT4ge1xuICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltYWdlIGJ1ZmZlciBtdXN0IGJlIGRlZmluZWQnKTtcbiAgfVxuICBpZiAob3B0aW9ucy5oZWlnaHQgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLndpZHRoID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltYWdlIGhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBkZWZpbmVkJyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMudGVuc29yTGF5b3V0ID09PSAnTkhXQycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05IV0MgVGVuc29yIGxheW91dCBpcyBub3Qgc3VwcG9ydGVkIHlldCcpO1xuICB9XG5cbiAgY29uc3Qge2hlaWdodCwgd2lkdGh9ID0gb3B0aW9ucztcblxuICBjb25zdCBub3JtID0gb3B0aW9ucy5ub3JtID8/IHttZWFuOiAyNTUsIGJpYXM6IDB9O1xuICBsZXQgbm9ybU1lYW46IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBsZXQgbm9ybUJpYXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG4gIGlmICh0eXBlb2YgKG5vcm0ubWVhbikgPT09ICdudW1iZXInKSB7XG4gICAgbm9ybU1lYW4gPSBbbm9ybS5tZWFuLCBub3JtLm1lYW4sIG5vcm0ubWVhbiwgbm9ybS5tZWFuXTtcbiAgfSBlbHNlIHtcbiAgICBub3JtTWVhbiA9IFtub3JtLm1lYW4hWzBdLCBub3JtLm1lYW4hWzFdLCBub3JtLm1lYW4hWzJdLCBub3JtLm1lYW4hWzNdID8/IDI1NV07XG4gIH1cblxuICBpZiAodHlwZW9mIChub3JtLmJpYXMpID09PSAnbnVtYmVyJykge1xuICAgIG5vcm1CaWFzID0gW25vcm0uYmlhcywgbm9ybS5iaWFzLCBub3JtLmJpYXMsIG5vcm0uYmlhc107XG4gIH0gZWxzZSB7XG4gICAgbm9ybUJpYXMgPSBbbm9ybS5iaWFzIVswXSwgbm9ybS5iaWFzIVsxXSwgbm9ybS5iaWFzIVsyXSwgbm9ybS5iaWFzIVszXSA/PyAwXTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0Zm9ybWF0ID0gb3B0aW9ucy5mb3JtYXQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZm9ybWF0IDogJ1JHQkEnO1xuICAvLyBkZWZhdWx0IHZhbHVlIGlzIFJHQkEgc2luY2UgaW1hZ2VkYXRhIGFuZCBIVE1MSW1hZ2VFbGVtZW50IHVzZXMgaXRcblxuICBjb25zdCBvdXRwdXRmb3JtYXQgPVxuICAgICAgb3B0aW9ucy50ZW5zb3JGb3JtYXQgIT09IHVuZGVmaW5lZCA/IChvcHRpb25zLnRlbnNvckZvcm1hdCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy50ZW5zb3JGb3JtYXQgOiAnUkdCJykgOiAnUkdCJztcbiAgY29uc3Qgc3RyaWRlID0gaGVpZ2h0ICogd2lkdGg7XG4gIGNvbnN0IGZsb2F0MzJEYXRhID0gb3V0cHV0Zm9ybWF0ID09PSAnUkdCQScgPyBuZXcgRmxvYXQzMkFycmF5KHN0cmlkZSAqIDQpIDogbmV3IEZsb2F0MzJBcnJheShzdHJpZGUgKiAzKTtcblxuICAvLyBEZWZhdWx0IHBvaW50ZXIgYXNzaWdubWVudHNcbiAgbGV0IHN0ZXAgPSA0LCBySW1hZ2VQb2ludGVyID0gMCwgZ0ltYWdlUG9pbnRlciA9IDEsIGJJbWFnZVBvaW50ZXIgPSAyLCBhSW1hZ2VQb2ludGVyID0gMztcbiAgbGV0IHJUZW5zb3JQb2ludGVyID0gMCwgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGUsIGJUZW5zb3JQb2ludGVyID0gc3RyaWRlICogMiwgYVRlbnNvclBvaW50ZXIgPSAtMTtcblxuICAvLyBVcGRhdGluZyB0aGUgcG9pbnRlciBhc3NpZ25tZW50cyBiYXNlZCBvbiB0aGUgaW5wdXQgaW1hZ2UgZm9ybWF0XG4gIGlmIChpbnB1dGZvcm1hdCA9PT0gJ1JHQicpIHtcbiAgICBzdGVwID0gMztcbiAgICBySW1hZ2VQb2ludGVyID0gMDtcbiAgICBnSW1hZ2VQb2ludGVyID0gMTtcbiAgICBiSW1hZ2VQb2ludGVyID0gMjtcbiAgICBhSW1hZ2VQb2ludGVyID0gLTE7XG4gIH1cblxuICAvLyBVcGRhdGluZyB0aGUgcG9pbnRlciBhc3NpZ25tZW50cyBiYXNlZCBvbiB0aGUgb3V0cHV0IHRlbnNvciBmb3JtYXRcbiAgaWYgKG91dHB1dGZvcm1hdCA9PT0gJ1JHQkEnKSB7XG4gICAgYVRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAzO1xuICB9IGVsc2UgaWYgKG91dHB1dGZvcm1hdCA9PT0gJ1JCRycpIHtcbiAgICByVGVuc29yUG9pbnRlciA9IDA7XG4gICAgYlRlbnNvclBvaW50ZXIgPSBzdHJpZGU7XG4gICAgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyO1xuICB9IGVsc2UgaWYgKG91dHB1dGZvcm1hdCA9PT0gJ0JHUicpIHtcbiAgICBiVGVuc29yUG9pbnRlciA9IDA7XG4gICAgZ1RlbnNvclBvaW50ZXIgPSBzdHJpZGU7XG4gICAgclRlbnNvclBvaW50ZXIgPSBzdHJpZGUgKiAyO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpZGU7XG4gICAgICAgaSsrLCBySW1hZ2VQb2ludGVyICs9IHN0ZXAsIGJJbWFnZVBvaW50ZXIgKz0gc3RlcCwgZ0ltYWdlUG9pbnRlciArPSBzdGVwLCBhSW1hZ2VQb2ludGVyICs9IHN0ZXApIHtcbiAgICBmbG9hdDMyRGF0YVtyVGVuc29yUG9pbnRlcisrXSA9IChidWZmZXJbckltYWdlUG9pbnRlcl0gKyBub3JtQmlhc1swXSkgLyBub3JtTWVhblswXTtcbiAgICBmbG9hdDMyRGF0YVtnVGVuc29yUG9pbnRlcisrXSA9IChidWZmZXJbZ0ltYWdlUG9pbnRlcl0gKyBub3JtQmlhc1sxXSkgLyBub3JtTWVhblsxXTtcbiAgICBmbG9hdDMyRGF0YVtiVGVuc29yUG9pbnRlcisrXSA9IChidWZmZXJbYkltYWdlUG9pbnRlcl0gKyBub3JtQmlhc1syXSkgLyBub3JtTWVhblsyXTtcbiAgICBpZiAoYVRlbnNvclBvaW50ZXIgIT09IC0xICYmIGFJbWFnZVBvaW50ZXIgIT09IC0xKSB7XG4gICAgICBmbG9hdDMyRGF0YVthVGVuc29yUG9pbnRlcisrXSA9IChidWZmZXJbYUltYWdlUG9pbnRlcl0gKyBub3JtQmlhc1szXSkgLyBub3JtTWVhblszXTtcbiAgICB9XG4gIH1cblxuICAvLyBGbG9hdDMyQXJyYXkgLT4gb3J0LlRlbnNvclxuICBjb25zdCBvdXRwdXRUZW5zb3IgPSBvdXRwdXRmb3JtYXQgPT09ICdSR0JBJyA/IG5ldyBUZW5zb3IoJ2Zsb2F0MzInLCBmbG9hdDMyRGF0YSwgWzEsIDQsIGhlaWdodCwgd2lkdGhdKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRlbnNvcignZmxvYXQzMicsIGZsb2F0MzJEYXRhLCBbMSwgMywgaGVpZ2h0LCB3aWR0aF0pO1xuICByZXR1cm4gb3V0cHV0VGVuc29yO1xufTtcblxuLyoqXG4gKiBpbXBsZW1lbnRhdGlvbiBvZiBUZW5zb3IuZnJvbUltYWdlKCkuXG4gKi9cbmV4cG9ydCBjb25zdCB0ZW5zb3JGcm9tSW1hZ2UgPSBhc3luYyhcbiAgICBpbWFnZTogSW1hZ2VEYXRhfEhUTUxJbWFnZUVsZW1lbnR8SW1hZ2VCaXRtYXB8c3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUZW5zb3JGcm9tSW1hZ2VEYXRhT3B0aW9uc3xUZW5zb3JGcm9tSW1hZ2VFbGVtZW50T3B0aW9uc3xUZW5zb3JGcm9tSW1hZ2VCaXRtYXBPcHRpb25zfFxuICAgIFRlbnNvckZyb21VcmxPcHRpb25zKTogUHJvbWlzZTxUZW5zb3I+ID0+IHtcbiAgLy8gY2hlY2tpbmcgdGhlIHR5cGUgb2YgaW1hZ2Ugb2JqZWN0XG4gIGNvbnN0IGlzSFRNTEltYWdlRWxlID0gdHlwZW9mIChIVE1MSW1hZ2VFbGVtZW50KSAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50O1xuICBjb25zdCBpc0ltYWdlRGF0YUVsZSA9IHR5cGVvZiAoSW1hZ2VEYXRhKSAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZURhdGE7XG4gIGNvbnN0IGlzSW1hZ2VCaXRtYXAgPSB0eXBlb2YgKEltYWdlQml0bWFwKSAhPT0gJ3VuZGVmaW5lZCcgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcDtcbiAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgaW1hZ2UgPT09ICdzdHJpbmcnO1xuXG4gIGxldCBkYXRhOiBVaW50OENsYW1wZWRBcnJheXx1bmRlZmluZWQ7XG4gIGxldCBidWZmZXJUb1RlbnNvck9wdGlvbnM6IEJ1ZmZlclRvVGVuc29yT3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG5cbiAgY29uc3QgY3JlYXRlQ2FudmFzID0gKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBPZmZzY3JlZW5DYW52YXMoMSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNyZWF0ZUNhbnZhc0NvbnRleHQgPSAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudHxPZmZzY3JlZW5DYW52YXMpID0+IHtcbiAgICBpZiAoY2FudmFzIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICAgIHJldHVybiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB9IGVsc2UgaWYgKGNhbnZhcyBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcykge1xuICAgICAgcmV0dXJuIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuICAvLyBmaWxsaW5nIGFuZCBjaGVja2luZyBpbWFnZSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgaWYgKGlzSFRNTEltYWdlRWxlKSB7XG4gICAgLy8gSFRNTEltYWdlRWxlbWVudCAtIGltYWdlIG9iamVjdCAtIGZvcm1hdCBpcyBSR0JBIGJ5IGRlZmF1bHRcbiAgICBjb25zdCBjYW52YXMgPSBjcmVhdGVDYW52YXMoKTtcbiAgICBjYW52YXMud2lkdGggPSBpbWFnZS53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuICAgIGNvbnN0IHBpeGVsczJEQ29udGV4dCA9IGNyZWF0ZUNhbnZhc0NvbnRleHQoY2FudmFzKTtcblxuICAgIGlmIChwaXhlbHMyRENvbnRleHQgIT0gbnVsbCkge1xuICAgICAgbGV0IGhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICAgIGxldCB3aWR0aCA9IGltYWdlLndpZHRoO1xuICAgICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlc2l6ZWRIZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlc2l6ZWRXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlaWdodCA9IG9wdGlvbnMucmVzaXplZEhlaWdodDtcbiAgICAgICAgd2lkdGggPSBvcHRpb25zLnJlc2l6ZWRXaWR0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBpZiAob3B0aW9ucy50ZW5zb3JGb3JtYXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW1hZ2UgaW5wdXQgY29uZmlnIGZvcm1hdCBtdXN0IGJlIFJHQkEgZm9yIEhUTUxJbWFnZUVsZW1lbnQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMudGVuc29yRm9ybWF0ID0gJ1JHQkEnO1xuICAgICAgICB9XG4gICAgICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucy53aWR0aCA9IHdpZHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLnRlbnNvckZvcm1hdCA9ICdSR0JBJztcbiAgICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLndpZHRoID0gd2lkdGg7XG4gICAgICB9XG5cbiAgICAgIHBpeGVsczJEQ29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDApO1xuICAgICAgZGF0YSA9IHBpeGVsczJEQ29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGFjY2VzcyBpbWFnZSBkYXRhJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzSW1hZ2VEYXRhRWxlKSB7XG4gICAgbGV0IGhlaWdodDogbnVtYmVyO1xuICAgIGxldCB3aWR0aDogbnVtYmVyO1xuXG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlc2l6ZWRXaWR0aCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVzaXplZEhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoZWlnaHQgPSBvcHRpb25zLnJlc2l6ZWRIZWlnaHQ7XG4gICAgICB3aWR0aCA9IG9wdGlvbnMucmVzaXplZFdpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG4gICAgICB3aWR0aCA9IGltYWdlLndpZHRoO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucy5mb3JtYXQgPSAnUkdCQSc7XG4gICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLmhlaWdodCA9IGhlaWdodDtcbiAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMud2lkdGggPSB3aWR0aDtcblxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRlbXBDYW52YXMgPSBjcmVhdGVDYW52YXMoKTtcblxuICAgICAgdGVtcENhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgdGVtcENhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgIGNvbnN0IHBpeGVsczJEQ29udGV4dCA9IGNyZWF0ZUNhbnZhc0NvbnRleHQodGVtcENhbnZhcyk7XG5cbiAgICAgIGlmIChwaXhlbHMyRENvbnRleHQgIT0gbnVsbCkge1xuICAgICAgICBwaXhlbHMyRENvbnRleHQucHV0SW1hZ2VEYXRhKGltYWdlLCAwLCAwKTtcbiAgICAgICAgZGF0YSA9IHBpeGVsczJEQ29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBhY2Nlc3MgaW1hZ2UgZGF0YScpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gaW1hZ2UuZGF0YTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNJbWFnZUJpdG1hcCkge1xuICAgIC8vIEltYWdlQml0bWFwIC0gaW1hZ2Ugb2JqZWN0IC0gZm9ybWF0IG11c3QgYmUgcHJvdmlkZWQgYnkgdXNlclxuICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgaW1hZ2UgY29uZmlnIHdpdGggZm9ybWF0IGZvciBJbWFnZWJpdG1hcCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbnZhcyA9IGNyZWF0ZUNhbnZhcygpO1xuICAgIGNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG4gICAgY29uc3QgcGl4ZWxzMkRDb250ZXh0ID0gY3JlYXRlQ2FudmFzQ29udGV4dChjYW52YXMpO1xuXG4gICAgaWYgKHBpeGVsczJEQ29udGV4dCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG4gICAgICBjb25zdCB3aWR0aCA9IGltYWdlLndpZHRoO1xuICAgICAgcGl4ZWxzMkRDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBkYXRhID0gcGl4ZWxzMkRDb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGJ1ZmZlclRvVGVuc29yT3B0aW9ucy53aWR0aCA9IHdpZHRoO1xuICAgICAgcmV0dXJuIGJ1ZmZlclRvVGVuc29yKGRhdGEsIGJ1ZmZlclRvVGVuc29yT3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBhY2Nlc3MgaW1hZ2UgZGF0YScpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBjYW52YXMgPSBjcmVhdGVDYW52YXMoKTtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBjcmVhdGVDYW52YXNDb250ZXh0KGNhbnZhcyk7XG4gICAgICBpZiAoIWltYWdlIHx8ICFjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiByZWplY3QoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld0ltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICBuZXdJbWFnZS5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xuICAgICAgbmV3SW1hZ2Uuc3JjID0gaW1hZ2U7XG4gICAgICBuZXdJbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IG5ld0ltYWdlLndpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gbmV3SW1hZ2UuaGVpZ2h0O1xuICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShuZXdJbWFnZSwgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgaW1nID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcblxuICAgICAgICBidWZmZXJUb1RlbnNvck9wdGlvbnMuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcbiAgICAgICAgYnVmZmVyVG9UZW5zb3JPcHRpb25zLndpZHRoID0gY2FudmFzLndpZHRoO1xuICAgICAgICByZXNvbHZlKGJ1ZmZlclRvVGVuc29yKGltZy5kYXRhLCBidWZmZXJUb1RlbnNvck9wdGlvbnMpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBkYXRhIHByb3ZpZGVkIGlzIG5vdCBzdXBwb3J0ZWQgLSBhYm9ydGVkIHRlbnNvciBjcmVhdGlvbicpO1xuICB9XG5cbiAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBidWZmZXJUb1RlbnNvcihkYXRhLCBidWZmZXJUb1RlbnNvck9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgZGF0YSBwcm92aWRlZCBpcyBub3Qgc3VwcG9ydGVkIC0gYWJvcnRlZCB0ZW5zb3IgY3JlYXRpb24nKTtcbiAgfVxufTtcblxuLyoqXG4gKiBpbXBsZW1lbnRhdGlvbiBvZiBUZW5zb3IuZnJvbVRleHR1cmUoKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvckZyb21UZXh0dXJlID0gPFQgZXh0ZW5kcyBUZW5zb3JJbnRlcmZhY2UuVGV4dHVyZURhdGFUeXBlcz4oXG4gICAgdGV4dHVyZTogVGVuc29ySW50ZXJmYWNlLlRleHR1cmVUeXBlLCBvcHRpb25zOiBUZW5zb3JGcm9tVGV4dHVyZU9wdGlvbnM8VD4pOiBUZW5zb3IgPT4ge1xuICBjb25zdCB7d2lkdGgsIGhlaWdodCwgZG93bmxvYWQsIGRpc3Bvc2V9ID0gb3B0aW9ucztcbiAgLy8gQWx3YXlzIGFzc3VtZSBSR0JBRjMyLiBUT0RPOiBzdXBwb3J0IGRpZmZlcmVudCB0ZXh0dXJlIGZvcm1hdFxuICBjb25zdCBkaW1zID0gWzEsIGhlaWdodCwgd2lkdGgsIDRdO1xuICByZXR1cm4gbmV3IFRlbnNvcih7bG9jYXRpb246ICd0ZXh0dXJlJywgdHlwZTogJ2Zsb2F0MzInLCB0ZXh0dXJlLCBkaW1zLCBkb3dubG9hZCwgZGlzcG9zZX0pO1xufTtcblxuLyoqXG4gKiBpbXBsZW1lbnRhdGlvbiBvZiBUZW5zb3IuZnJvbUdwdUJ1ZmZlcigpLlxuICovXG5leHBvcnQgY29uc3QgdGVuc29yRnJvbUdwdUJ1ZmZlciA9IDxUIGV4dGVuZHMgVGVuc29ySW50ZXJmYWNlLkdwdUJ1ZmZlckRhdGFUeXBlcz4oXG4gICAgZ3B1QnVmZmVyOiBUZW5zb3JJbnRlcmZhY2UuR3B1QnVmZmVyVHlwZSwgb3B0aW9uczogVGVuc29yRnJvbUdwdUJ1ZmZlck9wdGlvbnM8VD4pOiBUZW5zb3IgPT4ge1xuICBjb25zdCB7ZGF0YVR5cGUsIGRpbXMsIGRvd25sb2FkLCBkaXNwb3NlfSA9IG9wdGlvbnM7XG4gIHJldHVybiBuZXcgVGVuc29yKHtsb2NhdGlvbjogJ2dwdS1idWZmZXInLCB0eXBlOiBkYXRhVHlwZSA/PyAnZmxvYXQzMicsIGdwdUJ1ZmZlciwgZGltcywgZG93bmxvYWQsIGRpc3Bvc2V9KTtcbn07XG5cbi8qKlxuICogaW1wbGVtZW50YXRpb24gb2YgVGVuc29yLmZyb21QaW5uZWRCdWZmZXIoKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvckZyb21QaW5uZWRCdWZmZXIgPSA8VCBleHRlbmRzIFRlbnNvckludGVyZmFjZS5DcHVQaW5uZWREYXRhVHlwZXM+KFxuICAgIHR5cGU6IFQsIGJ1ZmZlcjogVGVuc29ySW50ZXJmYWNlLkRhdGFUeXBlTWFwW1RdLCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3IgPT5cbiAgICBuZXcgVGVuc29yKHtsb2NhdGlvbjogJ2NwdS1waW5uZWQnLCB0eXBlLCBkYXRhOiBidWZmZXIsIGRpbXM6IGRpbXMgPz8gW2J1ZmZlci5sZW5ndGhdfSk7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuL3RlbnNvci5qcyc7XG5cbmV4cG9ydCB0eXBlIFN1cHBvcnRlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSBGbG9hdDMyQXJyYXlDb25zdHJ1Y3RvcnxVaW50OEFycmF5Q29uc3RydWN0b3J8SW50OEFycmF5Q29uc3RydWN0b3J8XG4gICAgVWludDE2QXJyYXlDb25zdHJ1Y3RvcnxJbnQxNkFycmF5Q29uc3RydWN0b3J8SW50MzJBcnJheUNvbnN0cnVjdG9yfEJpZ0ludDY0QXJyYXlDb25zdHJ1Y3RvcnxVaW50OEFycmF5Q29uc3RydWN0b3J8XG4gICAgRmxvYXQ2NEFycmF5Q29uc3RydWN0b3J8VWludDMyQXJyYXlDb25zdHJ1Y3RvcnxCaWdVaW50NjRBcnJheUNvbnN0cnVjdG9yO1xuZXhwb3J0IHR5cGUgU3VwcG9ydGVkVHlwZWRBcnJheSA9IEluc3RhbmNlVHlwZTxTdXBwb3J0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3JzPjtcblxuLy8gYSBydW50aW1lIG1hcCB0aGF0IG1hcHMgdHlwZSBzdHJpbmcgdG8gVHlwZWRBcnJheSBjb25zdHJ1Y3Rvci4gU2hvdWxkIG1hdGNoIFRlbnNvci5EYXRhVHlwZU1hcC5cbmV4cG9ydCBjb25zdCBOVU1FUklDX1RFTlNPUl9UWVBFX1RPX1RZUEVEQVJSQVlfTUFQID0gbmV3IE1hcDxzdHJpbmcsIFN1cHBvcnRlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnM+KFtcbiAgWydmbG9hdDMyJywgRmxvYXQzMkFycmF5XSxcbiAgWyd1aW50OCcsIFVpbnQ4QXJyYXldLFxuICBbJ2ludDgnLCBJbnQ4QXJyYXldLFxuICBbJ3VpbnQxNicsIFVpbnQxNkFycmF5XSxcbiAgWydpbnQxNicsIEludDE2QXJyYXldLFxuICBbJ2ludDMyJywgSW50MzJBcnJheV0sXG4gIFsnYm9vbCcsIFVpbnQ4QXJyYXldLFxuICBbJ2Zsb2F0NjQnLCBGbG9hdDY0QXJyYXldLFxuICBbJ3VpbnQzMicsIFVpbnQzMkFycmF5XSxcbl0pO1xuXG4vLyBhIHJ1bnRpbWUgbWFwIHRoYXQgbWFwcyB0eXBlIHN0cmluZyB0byBUeXBlZEFycmF5IGNvbnN0cnVjdG9yLiBTaG91bGQgbWF0Y2ggVGVuc29yLkRhdGFUeXBlTWFwLlxuZXhwb3J0IGNvbnN0IE5VTUVSSUNfVEVOU09SX1RZUEVEQVJSQVlfVE9fVFlQRV9NQVAgPSBuZXcgTWFwPFN1cHBvcnRlZFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMsIFRlbnNvci5UeXBlPihbXG4gIFtGbG9hdDMyQXJyYXksICdmbG9hdDMyJ10sXG4gIFtVaW50OEFycmF5LCAndWludDgnXSxcbiAgW0ludDhBcnJheSwgJ2ludDgnXSxcbiAgW1VpbnQxNkFycmF5LCAndWludDE2J10sXG4gIFtJbnQxNkFycmF5LCAnaW50MTYnXSxcbiAgW0ludDMyQXJyYXksICdpbnQzMiddLFxuICBbRmxvYXQ2NEFycmF5LCAnZmxvYXQ2NCddLFxuICBbVWludDMyQXJyYXksICd1aW50MzInXSxcbl0pO1xuXG4vLyBhIGR1bW15IHR5cGUgZGVjbGFyYXRpb24gZm9yIEZsb2F0MTZBcnJheSBpbiBjYXNlIGFueSBwb2x5ZmlsbCBpcyBhdmFpbGFibGUuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3QgRmxvYXQxNkFycmF5OiBhbnk7XG59XG5cbi8vIHRoZSBmb2xsb3dpbmcgY29kZSBhbGxvd3MgZGVsYXlpbmcgZXhlY3V0aW9uIG9mIEJpZ0ludC9GbG9hdDE2QXJyYXkgY2hlY2tpbmcuIFRoaXMgYWxsb3dzIGxhenkgaW5pdGlhbGl6YXRpb24gZm9yXG4vLyBOVU1FUklDX1RFTlNPUl9UWVBFX1RPX1RZUEVEQVJSQVlfTUFQIGFuZCBOVU1FUklDX1RFTlNPUl9UWVBFREFSUkFZX1RPX1RZUEVfTUFQLCB3aGljaCBhbGxvd3MgQmlnSW50L0Zsb2F0MTZBcnJheVxuLy8gcG9seWZpbGwgaWYgYXZhaWxhYmxlLlxubGV0IGlzVHlwZWRBcnJheUNoZWNrZWQgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBjaGVja1R5cGVkQXJyYXkgPSAoKSA9PiB7XG4gIGlmICghaXNUeXBlZEFycmF5Q2hlY2tlZCkge1xuICAgIGlzVHlwZWRBcnJheUNoZWNrZWQgPSB0cnVlO1xuICAgIGNvbnN0IGlzQmlnSW50NjRBcnJheUF2YWlsYWJsZSA9IHR5cGVvZiBCaWdJbnQ2NEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBCaWdJbnQ2NEFycmF5LmZyb207XG4gICAgY29uc3QgaXNCaWdVaW50NjRBcnJheUF2YWlsYWJsZSA9IHR5cGVvZiBCaWdVaW50NjRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgQmlnVWludDY0QXJyYXkuZnJvbTtcbiAgICBjb25zdCBpc0Zsb2F0MTZBcnJheUF2YWlsYWJsZSA9IHR5cGVvZiBGbG9hdDE2QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIEZsb2F0MTZBcnJheS5mcm9tO1xuXG4gICAgaWYgKGlzQmlnSW50NjRBcnJheUF2YWlsYWJsZSkge1xuICAgICAgTlVNRVJJQ19URU5TT1JfVFlQRV9UT19UWVBFREFSUkFZX01BUC5zZXQoJ2ludDY0JywgQmlnSW50NjRBcnJheSk7XG4gICAgICBOVU1FUklDX1RFTlNPUl9UWVBFREFSUkFZX1RPX1RZUEVfTUFQLnNldChCaWdJbnQ2NEFycmF5LCAnaW50NjQnKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnVWludDY0QXJyYXlBdmFpbGFibGUpIHtcbiAgICAgIE5VTUVSSUNfVEVOU09SX1RZUEVfVE9fVFlQRURBUlJBWV9NQVAuc2V0KCd1aW50NjQnLCBCaWdVaW50NjRBcnJheSk7XG4gICAgICBOVU1FUklDX1RFTlNPUl9UWVBFREFSUkFZX1RPX1RZUEVfTUFQLnNldChCaWdVaW50NjRBcnJheSwgJ3VpbnQ2NCcpO1xuICAgIH1cbiAgICBpZiAoaXNGbG9hdDE2QXJyYXlBdmFpbGFibGUpIHtcbiAgICAgIE5VTUVSSUNfVEVOU09SX1RZUEVfVE9fVFlQRURBUlJBWV9NQVAuc2V0KCdmbG9hdDE2JywgRmxvYXQxNkFycmF5KTtcbiAgICAgIE5VTUVSSUNfVEVOU09SX1RZUEVEQVJSQVlfVE9fVFlQRV9NQVAuc2V0KEZsb2F0MTZBcnJheSwgJ2Zsb2F0MTYnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgRmxvYXQxNkFycmF5IGlzIG5vdCBhdmFpbGFibGUsIHVzZSAnVWludDE2QXJyYXknIHRvIHN0b3JlIHRoZSBkYXRhLlxuICAgICAgTlVNRVJJQ19URU5TT1JfVFlQRV9UT19UWVBFREFSUkFZX01BUC5zZXQoJ2Zsb2F0MTYnLCBVaW50MTZBcnJheSk7XG4gICAgfVxuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0NwdVBpbm5lZENvbnN0cnVjdG9yUGFyYW1ldGVycywgR3B1QnVmZmVyQ29uc3RydWN0b3JQYXJhbWV0ZXJzLCBUZXh0dXJlQ29uc3RydWN0b3JQYXJhbWV0ZXJzfSBmcm9tICcuL3RlbnNvci1mYWN0b3J5LmpzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuL3RlbnNvci1pbXBsLmpzJztcblxuLyoqXG4gKiBjYWxjdWxhdGUgc2l6ZSBmcm9tIGRpbXMuXG4gKlxuICogQHBhcmFtIGRpbXMgdGhlIGRpbXMgYXJyYXkuIE1heSBiZSBhbiBpbGxlZ2FsIGlucHV0LlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlU2l6ZSA9IChkaW1zOiByZWFkb25seSB1bmtub3duW10pOiBudW1iZXIgPT4ge1xuICBsZXQgc2l6ZSA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGltcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRpbSA9IGRpbXNbaV07XG4gICAgaWYgKHR5cGVvZiBkaW0gIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihkaW0pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBkaW1zWyR7aX1dIG11c3QgYmUgYW4gaW50ZWdlciwgZ290OiAke2RpbX1gKTtcbiAgICB9XG4gICAgaWYgKGRpbSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBkaW1zWyR7aX1dIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgZ290OiAke2RpbX1gKTtcbiAgICB9XG4gICAgc2l6ZSAqPSBkaW07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59O1xuXG4vKipcbiAqIGltcGxlbWVudGF0aW9uIG9mIFRlbnNvci5yZXNoYXBlKClcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvclJlc2hhcGUgPSAodGVuc29yOiBUZW5zb3IsIGRpbXM6IHJlYWRvbmx5IG51bWJlcltdKTogVGVuc29yID0+IHtcbiAgc3dpdGNoICh0ZW5zb3IubG9jYXRpb24pIHtcbiAgICBjYXNlICdjcHUnOlxuICAgICAgcmV0dXJuIG5ldyBUZW5zb3IodGVuc29yLnR5cGUsIHRlbnNvci5kYXRhLCBkaW1zKTtcbiAgICBjYXNlICdjcHUtcGlubmVkJzpcbiAgICAgIHJldHVybiBuZXcgVGVuc29yKHtcbiAgICAgICAgbG9jYXRpb246ICdjcHUtcGlubmVkJyxcbiAgICAgICAgZGF0YTogdGVuc29yLmRhdGEgYXMgQ3B1UGlubmVkQ29uc3RydWN0b3JQYXJhbWV0ZXJzWydkYXRhJ10sXG4gICAgICAgIHR5cGU6IHRlbnNvci50eXBlIGFzIENwdVBpbm5lZENvbnN0cnVjdG9yUGFyYW1ldGVyc1sndHlwZSddLFxuICAgICAgICBkaW1zLFxuICAgICAgfSk7XG4gICAgY2FzZSAndGV4dHVyZSc6XG4gICAgICByZXR1cm4gbmV3IFRlbnNvcih7XG4gICAgICAgIGxvY2F0aW9uOiAndGV4dHVyZScsXG4gICAgICAgIHRleHR1cmU6IHRlbnNvci50ZXh0dXJlLFxuICAgICAgICB0eXBlOiB0ZW5zb3IudHlwZSBhcyBUZXh0dXJlQ29uc3RydWN0b3JQYXJhbWV0ZXJzWyd0eXBlJ10sXG4gICAgICAgIGRpbXMsXG4gICAgICB9KTtcbiAgICBjYXNlICdncHUtYnVmZmVyJzpcbiAgICAgIHJldHVybiBuZXcgVGVuc29yKHtcbiAgICAgICAgbG9jYXRpb246ICdncHUtYnVmZmVyJyxcbiAgICAgICAgZ3B1QnVmZmVyOiB0ZW5zb3IuZ3B1QnVmZmVyLFxuICAgICAgICB0eXBlOiB0ZW5zb3IudHlwZSBhcyBHcHVCdWZmZXJDb25zdHJ1Y3RvclBhcmFtZXRlcnNbJ3R5cGUnXSxcbiAgICAgICAgZGltcyxcbiAgICAgIH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRlbnNvclJlc2hhcGU6IHRlbnNvciBsb2NhdGlvbiAke3RlbnNvci5sb2NhdGlvbn0gaXMgbm90IHN1cHBvcnRlZGApO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge3RlbnNvclRvRGF0YVVSTCwgdGVuc29yVG9JbWFnZURhdGF9IGZyb20gJy4vdGVuc29yLWNvbnZlcnNpb24taW1wbC5qcyc7XG5pbXBvcnQge1RlbnNvclRvRGF0YVVybE9wdGlvbnMsIFRlbnNvclRvSW1hZ2VEYXRhT3B0aW9uc30gZnJvbSAnLi90ZW5zb3ItY29udmVyc2lvbi5qcyc7XG5pbXBvcnQge3RlbnNvckZyb21HcHVCdWZmZXIsIHRlbnNvckZyb21JbWFnZSwgdGVuc29yRnJvbVBpbm5lZEJ1ZmZlciwgdGVuc29yRnJvbVRleHR1cmV9IGZyb20gJy4vdGVuc29yLWZhY3RvcnktaW1wbC5qcyc7XG5pbXBvcnQge0NwdVBpbm5lZENvbnN0cnVjdG9yUGFyYW1ldGVycywgR3B1QnVmZmVyQ29uc3RydWN0b3JQYXJhbWV0ZXJzLCBUZW5zb3JGcm9tR3B1QnVmZmVyT3B0aW9ucywgVGVuc29yRnJvbUltYWdlQml0bWFwT3B0aW9ucywgVGVuc29yRnJvbUltYWdlRGF0YU9wdGlvbnMsIFRlbnNvckZyb21JbWFnZUVsZW1lbnRPcHRpb25zLCBUZW5zb3JGcm9tVGV4dHVyZU9wdGlvbnMsIFRlbnNvckZyb21VcmxPcHRpb25zLCBUZXh0dXJlQ29uc3RydWN0b3JQYXJhbWV0ZXJzfSBmcm9tICcuL3RlbnNvci1mYWN0b3J5LmpzJztcbmltcG9ydCB7Y2hlY2tUeXBlZEFycmF5LCBOVU1FUklDX1RFTlNPUl9UWVBFX1RPX1RZUEVEQVJSQVlfTUFQLCBOVU1FUklDX1RFTlNPUl9UWVBFREFSUkFZX1RPX1RZUEVfTUFQLCBTdXBwb3J0ZWRUeXBlZEFycmF5LCBTdXBwb3J0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3JzfSBmcm9tICcuL3RlbnNvci1pbXBsLXR5cGUtbWFwcGluZy5qcyc7XG5pbXBvcnQge2NhbGN1bGF0ZVNpemUsIHRlbnNvclJlc2hhcGV9IGZyb20gJy4vdGVuc29yLXV0aWxzLWltcGwuanMnO1xuaW1wb3J0IHtUZW5zb3IgYXMgVGVuc29ySW50ZXJmYWNlfSBmcm9tICcuL3RlbnNvci5qcyc7XG5cbi8vIHR5cGUgYWxpYXNlcyBmb3IgdGhvc2UgZXhwb3J0ZWQgZnJvbSBUZW5zb3IgaW50ZXJmYWNlXG5cbnR5cGUgVGVuc29yVHlwZSA9IFRlbnNvckludGVyZmFjZS5UeXBlO1xudHlwZSBUZW5zb3JEYXRhVHlwZSA9IFRlbnNvckludGVyZmFjZS5EYXRhVHlwZTtcbnR5cGUgVGVuc29yRGF0YUxvY2F0aW9uID0gVGVuc29ySW50ZXJmYWNlLkRhdGFMb2NhdGlvbjtcbnR5cGUgVGVuc29yVGV4dHVyZVR5cGUgPSBUZW5zb3JJbnRlcmZhY2UuVGV4dHVyZVR5cGU7XG50eXBlIFRlbnNvckdwdUJ1ZmZlclR5cGUgPSBUZW5zb3JJbnRlcmZhY2UuR3B1QnVmZmVyVHlwZTtcblxuLyoqXG4gKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgVGVuc29yIGludGVyZmFjZS5cbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW5zb3IgaW1wbGVtZW50cyBUZW5zb3JJbnRlcmZhY2Uge1xuICAvLyAjcmVnaW9uIGNvbnN0cnVjdG9yc1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgQ1BVIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gdHlwZSwgZGF0YSBhbmQgZGltcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgdHlwZTogVGVuc29yVHlwZSwgZGF0YTogVGVuc29yRGF0YVR5cGV8cmVhZG9ubHkgc3RyaW5nW118cmVhZG9ubHkgbnVtYmVyW118cmVhZG9ubHkgYm9vbGVhbltdLFxuICAgICAgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBDUFUgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLiBUeXBlIGlzIGluZmVycmVkIGZyb20gZGF0YS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFRlbnNvckRhdGFUeXBlfHJlYWRvbmx5IHN0cmluZ1tdfHJlYWRvbmx5IGJvb2xlYW5bXSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIHBpbm5lZCBDUFUgZGF0YSB3aXRoIHRoZSBnaXZlbiB0eXBlIGFuZCBkaW1zLlxuICAgKlxuICAgKiBUZW5zb3IncyBsb2NhdGlvbiB3aWxsIGJlIHNldCB0byAnY3B1LXBpbm5lZCcuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBTcGVjaWZ5IHRoZSBwYXJhbWV0ZXJzIHRvIGNvbnN0cnVjdCB0aGUgdGVuc29yLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyYW1zOiBDcHVQaW5uZWRDb25zdHJ1Y3RvclBhcmFtZXRlcnMpO1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHRlbnNvciBvYmplY3QgZnJvbSB0aGUgV2ViR0wgdGV4dHVyZSB3aXRoIHRoZSBnaXZlbiB0eXBlIGFuZCBkaW1zLlxuICAgKlxuICAgKiBUZW5zb3IncyBsb2NhdGlvbiB3aWxsIGJlIHNldCB0byAndGV4dHVyZScuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBTcGVjaWZ5IHRoZSBwYXJhbWV0ZXJzIHRvIGNvbnN0cnVjdCB0aGUgdGVuc29yLlxuICAgKi9cbiAgY29uc3RydWN0b3IocGFyYW1zOiBUZXh0dXJlQ29uc3RydWN0b3JQYXJhbWV0ZXJzKTtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIFdlYkdQVSBidWZmZXIgd2l0aCB0aGUgZ2l2ZW4gdHlwZSBhbmQgZGltcy5cbiAgICpcbiAgICogVGVuc29yJ3MgbG9jYXRpb24gd2lsbCBiZSBzZXQgdG8gJ2dwdS1idWZmZXInLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gU3BlY2lmeSB0aGUgcGFyYW1ldGVycyB0byBjb25zdHJ1Y3QgdGhlIHRlbnNvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogR3B1QnVmZmVyQ29uc3RydWN0b3JQYXJhbWV0ZXJzKTtcblxuICAvKipcbiAgICogaW1wbGVtZW50YXRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIGFyZzA6IFRlbnNvclR5cGV8VGVuc29yRGF0YVR5cGV8cmVhZG9ubHkgc3RyaW5nW118cmVhZG9ubHkgYm9vbGVhbltdfENwdVBpbm5lZENvbnN0cnVjdG9yUGFyYW1ldGVyc3xcbiAgICAgIFRleHR1cmVDb25zdHJ1Y3RvclBhcmFtZXRlcnN8R3B1QnVmZmVyQ29uc3RydWN0b3JQYXJhbWV0ZXJzLFxuICAgICAgYXJnMT86IFRlbnNvckRhdGFUeXBlfHJlYWRvbmx5IG51bWJlcltdfHJlYWRvbmx5IHN0cmluZ1tdfHJlYWRvbmx5IGJvb2xlYW5bXSwgYXJnMj86IHJlYWRvbmx5IG51bWJlcltdKSB7XG4gICAgLy8gcGVyZm9ybSBvbmUtdGltZSBjaGVjayBmb3IgQmlnSW50L0Zsb2F0MTZBcnJheSBzdXBwb3J0XG4gICAgY2hlY2tUeXBlZEFycmF5KCk7XG5cbiAgICBsZXQgdHlwZTogVGVuc29yVHlwZTtcbiAgICBsZXQgZGltczogcmVhZG9ubHkgbnVtYmVyW107XG5cbiAgICBpZiAodHlwZW9mIGFyZzAgPT09ICdvYmplY3QnICYmICdsb2NhdGlvbicgaW4gYXJnMCkge1xuICAgICAgLy9cbiAgICAgIC8vIGNvbnN0cnVjdGluZyB0ZW5zb3IgZnJvbSBzcGVjaWZpYyBsb2NhdGlvblxuICAgICAgLy9cbiAgICAgIHRoaXMuZGF0YUxvY2F0aW9uID0gYXJnMC5sb2NhdGlvbjtcbiAgICAgIHR5cGUgPSBhcmcwLnR5cGU7XG4gICAgICBkaW1zID0gYXJnMC5kaW1zO1xuICAgICAgc3dpdGNoIChhcmcwLmxvY2F0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2NwdS1waW5uZWQnOiB7XG4gICAgICAgICAgY29uc3QgZXhwZWN0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBOVU1FUklDX1RFTlNPUl9UWVBFX1RPX1RZUEVEQVJSQVlfTUFQLmdldCh0eXBlKTtcbiAgICAgICAgICBpZiAoIWV4cGVjdGVkVHlwZWRBcnJheUNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlIFwiJHt0eXBlfVwiIHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbSBwaW5uZWQgYnVmZmVyYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKGFyZzAuZGF0YSBpbnN0YW5jZW9mIGV4cGVjdGVkVHlwZWRBcnJheUNvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgYnVmZmVyIHNob3VsZCBiZSBvZiB0eXBlICR7ZXhwZWN0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3IubmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jcHVEYXRhID0gYXJnMC5kYXRhO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3RleHR1cmUnOiB7XG4gICAgICAgICAgaWYgKHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSBcIiR7dHlwZX1cIiB0byBjcmVhdGUgdGVuc29yIGZyb20gdGV4dHVyZWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdwdVRleHR1cmVEYXRhID0gYXJnMC50ZXh0dXJlO1xuICAgICAgICAgIHRoaXMuZG93bmxvYWRlciA9IGFyZzAuZG93bmxvYWQ7XG4gICAgICAgICAgdGhpcy5kaXNwb3NlciA9IGFyZzAuZGlzcG9zZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdncHUtYnVmZmVyJzoge1xuICAgICAgICAgIGlmICgodHlwZSAhPT0gJ2Zsb2F0MzInICYmIHR5cGUgIT09ICdmbG9hdDE2JyAmJiB0eXBlICE9PSAnaW50MzInICYmIHR5cGUgIT09ICdpbnQ2NCcgJiYgdHlwZSAhPT0gJ3VpbnQzMicgJiZcbiAgICAgICAgICAgICAgIHR5cGUgIT09ICd1aW50OCcgJiYgdHlwZSAhPT0gJ2Jvb2wnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSBcIiR7dHlwZX1cIiB0byBjcmVhdGUgdGVuc29yIGZyb20gZ3B1IGJ1ZmZlcmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdwdUJ1ZmZlckRhdGEgPSBhcmcwLmdwdUJ1ZmZlcjtcbiAgICAgICAgICB0aGlzLmRvd25sb2FkZXIgPSBhcmcwLmRvd25sb2FkO1xuICAgICAgICAgIHRoaXMuZGlzcG9zZXIgPSBhcmcwLmRpc3Bvc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvciBjb25zdHJ1Y3RvcjogdW5zdXBwb3J0ZWQgbG9jYXRpb24gJyR7dGhpcy5kYXRhTG9jYXRpb259J2ApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL1xuICAgICAgLy8gY29uc3RydWN0aW5nIHRlbnNvciBvZiBsb2NhdGlvbiAnY3B1J1xuICAgICAgLy9cbiAgICAgIGxldCBkYXRhOiBUZW5zb3JEYXRhVHlwZTtcbiAgICAgIGxldCBtYXliZURpbXM6IHR5cGVvZiBhcmcxfHR5cGVvZiBhcmcyO1xuICAgICAgLy8gY2hlY2sgd2hldGhlciBhcmcwIGlzIHR5cGUgb3IgZGF0YVxuICAgICAgaWYgKHR5cGVvZiBhcmcwID09PSAnc3RyaW5nJykge1xuICAgICAgICAvL1xuICAgICAgICAvLyBPdmVycmlkZTogY29uc3RydWN0b3IodHlwZSwgZGF0YSwgLi4uKVxuICAgICAgICAvL1xuICAgICAgICB0eXBlID0gYXJnMDtcbiAgICAgICAgbWF5YmVEaW1zID0gYXJnMjtcbiAgICAgICAgaWYgKGFyZzAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gc3RyaW5nIHRlbnNvclxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcmcxKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBzdHJpbmcgdGVuc29yXFwncyBkYXRhIG11c3QgYmUgYSBzdHJpbmcgYXJyYXkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIGRvbid0IGNoZWNrIHdoZXRoZXIgZXZlcnkgZWxlbWVudCBpbiB0aGUgYXJyYXkgaXMgc3RyaW5nOyB0aGlzIGlzIHRvbyBzbG93LiB3ZSBhc3N1bWUgaXQncyBjb3JyZWN0IGFuZFxuICAgICAgICAgIC8vIGVycm9yIHdpbGwgYmUgcG9wdWxhdGVkIGF0IGluZmVyZW5jZVxuICAgICAgICAgIGRhdGEgPSBhcmcxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG51bWVyaWMgdGVuc29yXG4gICAgICAgICAgY29uc3QgdHlwZWRBcnJheUNvbnN0cnVjdG9yID0gTlVNRVJJQ19URU5TT1JfVFlQRV9UT19UWVBFREFSUkFZX01BUC5nZXQoYXJnMCk7XG4gICAgICAgICAgaWYgKHR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbnN1cHBvcnRlZCB0ZW5zb3IgdHlwZTogJHthcmcwfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnMSkpIHtcbiAgICAgICAgICAgIGlmIChhcmcwID09PSAnZmxvYXQxNicgJiYgdHlwZWRBcnJheUNvbnN0cnVjdG9yID09PSBVaW50MTZBcnJheSkge1xuICAgICAgICAgICAgICAvLyBXaGVuIG5vIEZsb2F0MTZBcnJheSBwb2x5ZmlsbCBpcyB1c2VkLCB3ZSBjYW5ub3QgY3JlYXRlICdmbG9hdDE2JyB0ZW5zb3IgZnJvbSBudW1iZXIgYXJyYXkuXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIFRocm93IGVycm9yIGhlcmUgYmVjYXVzZSB3aGVuIHVzZXIgdHJ5IHRvIHVzZSBudW1iZXIgYXJyYXkgYXMgZGF0YSxcbiAgICAgICAgICAgICAgLy8gZS5nLiBuZXcgVGVuc29yKCdmbG9hdDE2JywgWzEsIDIsIDMsIDRdLCBkaW1zKSksIGl0IHdpbGwgYWN0dWFsbHkgY2FsbFxuICAgICAgICAgICAgICAvLyBVaW50MTZBcnJheS5mcm9tKGFyZzEpIHdoaWNoIGdlbmVyYXRlcyB3cm9uZyBkYXRhLlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgICAgJ0NyZWF0aW5nIGEgZmxvYXQxNiB0ZW5zb3IgZnJvbSBudW1iZXIgYXJyYXkgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBVaW50MTZBcnJheSBhcyBkYXRhLicpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcwID09PSAndWludDY0JyB8fCBhcmcwID09PSAnaW50NjQnKSB7XG4gICAgICAgICAgICAgIC8vIHVzZSAnYXMgYW55JyBoZXJlIGJlY2F1c2U6XG4gICAgICAgICAgICAgIC8vIDEuIFR5cGVTY3JpcHQncyBjaGVjayBvbiB0eXBlIG9mICdBcnJheS5pc0FycmF5KCknIGRvZXMgbm90IHdvcmsgd2l0aCByZWFkb25seSBhcnJheXMuXG4gICAgICAgICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE3MDAyXG4gICAgICAgICAgICAgIC8vIDIuIFR5cGVTY3JpcHQncyBjaGVjayBvbiB1bmlvbiB0eXBlIG9mICcoQmlnSW50NjRBcnJheUNvbnN0cnVjdG9yfEJpZ1VpbnQ2NEFycmF5Q29uc3RydWN0b3IpLmZyb20oKSdcbiAgICAgICAgICAgICAgLy8gZG9lcyBub3QgYWNjZXB0IHBhcmFtZXRlciBtYXBGbi5cbiAgICAgICAgICAgICAgLy8gMy4gcGFyYW1ldGVycyBvZiAnU3VwcG9ydGVkVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5mcm9tKCknIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlbWVudCBvZiB0aGUgdW5pb25cbiAgICAgICAgICAgICAgLy8gdHlwZS5cblxuICAgICAgICAgICAgICAvLyBhc3N1bWUgJ2FyZzEnIGlzIG9mIHR5cGUgXCJyZWFkb25seSBudW1iZXJbXXxyZWFkb25seSBiaWdpbnRbXVwiIGhlcmUuXG5cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgZGF0YSA9ICh0eXBlZEFycmF5Q29uc3RydWN0b3IgYXMgYW55KS5mcm9tKGFyZzEsIEJpZ0ludCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBhc3N1bWUgJ2FyZzEnIGlzIG9mIHR5cGUgXCJyZWFkb25seSBudW1iZXJbXVwiIGhlcmUuXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgIGRhdGEgPSAodHlwZWRBcnJheUNvbnN0cnVjdG9yIGFzIGFueSkuZnJvbShhcmcxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGFyZzEgaW5zdGFuY2VvZiB0eXBlZEFycmF5Q29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGRhdGEgPSBhcmcxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBBICR7dHlwZX0gdGVuc29yJ3MgZGF0YSBtdXN0IGJlIHR5cGUgb2YgJHt0eXBlZEFycmF5Q29uc3RydWN0b3J9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL1xuICAgICAgICAvLyBPdmVycmlkZTogY29uc3RydWN0b3IoZGF0YSwgLi4uKVxuICAgICAgICAvL1xuICAgICAgICBtYXliZURpbXMgPSBhcmcxO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcwKSkge1xuICAgICAgICAgIC8vIG9ubHkgYm9vbGVhbltdIGFuZCBzdHJpbmdbXSBpcyBzdXBwb3J0ZWRcbiAgICAgICAgICBpZiAoYXJnMC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RlbnNvciB0eXBlIGNhbm5vdCBiZSBpbmZlcnJlZCBmcm9tIGFuIGVtcHR5IGFycmF5LicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmaXJzdEVsZW1lbnRUeXBlID0gdHlwZW9mIGFyZzBbMF07XG4gICAgICAgICAgaWYgKGZpcnN0RWxlbWVudFR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0eXBlID0gJ3N0cmluZyc7XG4gICAgICAgICAgICBkYXRhID0gYXJnMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0RWxlbWVudFR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgdHlwZSA9ICdib29sJztcbiAgICAgICAgICAgIC8vICdhcmcwJyBpcyBvZiB0eXBlICdib29sZWFuW10nLiBVaW50OEFycmF5LmZyb20oYm9vbGVhbltdKSBhY3R1YWxseSB3b3JrcywgYnV0IHR5cGVzY3JpcHQgdGhpbmtzIHRoaXMgaXNcbiAgICAgICAgICAgIC8vIHdyb25nIHR5cGUuIFdlIHVzZSAnYXMgYW55JyB0byBtYWtlIGl0IGhhcHB5LlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIGRhdGEgPSBVaW50OEFycmF5LmZyb20oYXJnMCBhcyBhbnlbXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlIG9mIGRhdGEgYXJyYXk6ICR7Zmlyc3RFbGVtZW50VHlwZX0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGdldCB0ZW5zb3IgdHlwZSBmcm9tIFR5cGVkQXJyYXlcbiAgICAgICAgICBjb25zdCBtYXBwZWRUeXBlID1cbiAgICAgICAgICAgICAgTlVNRVJJQ19URU5TT1JfVFlQRURBUlJBWV9UT19UWVBFX01BUC5nZXQoYXJnMC5jb25zdHJ1Y3RvciBhcyBTdXBwb3J0ZWRUeXBlZEFycmF5Q29uc3RydWN0b3JzKTtcbiAgICAgICAgICBpZiAobWFwcGVkVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbnN1cHBvcnRlZCB0eXBlIGZvciB0ZW5zb3IgZGF0YTogJHthcmcwLmNvbnN0cnVjdG9yfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHlwZSA9IG1hcHBlZFR5cGU7XG4gICAgICAgICAgZGF0YSA9IGFyZzAgYXMgU3VwcG9ydGVkVHlwZWRBcnJheTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB0eXBlIGFuZCBkYXRhIGlzIHByb2Nlc3NlZCwgbm93IHByb2Nlc3NpbmcgZGltc1xuICAgICAgaWYgKG1heWJlRGltcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGFzc3VtZSAxLUQgdGVuc29yIGlmIGRpbXMgb21pdHRlZFxuICAgICAgICBtYXliZURpbXMgPSBbZGF0YS5sZW5ndGhdO1xuICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShtYXliZURpbXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgdGVuc29yXFwncyBkaW1zIG11c3QgYmUgYSBudW1iZXIgYXJyYXknKTtcbiAgICAgIH1cbiAgICAgIGRpbXMgPSBtYXliZURpbXMgYXMgcmVhZG9ubHkgbnVtYmVyW107XG5cbiAgICAgIHRoaXMuY3B1RGF0YSA9IGRhdGE7XG4gICAgICB0aGlzLmRhdGFMb2NhdGlvbiA9ICdjcHUnO1xuICAgIH1cblxuICAgIC8vIHBlcmZvcm0gY2hlY2sgb24gZGltc1xuICAgIGNvbnN0IHNpemUgPSBjYWxjdWxhdGVTaXplKGRpbXMpO1xuICAgIC8vIGlmIGRhdGEgaXMgb24gQ1BVLCBjaGVjayB3aGV0aGVyIGRhdGEgbGVuZ3RoIG1hdGNoZXMgdGVuc29yIHNpemVcbiAgICBpZiAodGhpcy5jcHVEYXRhICYmIHNpemUgIT09IHRoaXMuY3B1RGF0YS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yJ3Mgc2l6ZSgke3NpemV9KSBkb2VzIG5vdCBtYXRjaCBkYXRhIGxlbmd0aCgke3RoaXMuY3B1RGF0YS5sZW5ndGh9KS5gKTtcbiAgICB9XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuZGltcyA9IGRpbXM7XG4gICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBmYWN0b3J5XG4gIHN0YXRpYyBhc3luYyBmcm9tSW1hZ2UoXG4gICAgICBpbWFnZTogSW1hZ2VEYXRhfEhUTUxJbWFnZUVsZW1lbnR8SW1hZ2VCaXRtYXB8c3RyaW5nLFxuICAgICAgb3B0aW9ucz86IFRlbnNvckZyb21JbWFnZURhdGFPcHRpb25zfFRlbnNvckZyb21JbWFnZUVsZW1lbnRPcHRpb25zfFRlbnNvckZyb21JbWFnZUJpdG1hcE9wdGlvbnN8XG4gICAgICBUZW5zb3JGcm9tVXJsT3B0aW9ucyk6IFByb21pc2U8VGVuc29ySW50ZXJmYWNlPiB7XG4gICAgcmV0dXJuIHRlbnNvckZyb21JbWFnZShpbWFnZSwgb3B0aW9ucyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRleHR1cmU8VCBleHRlbmRzIFRlbnNvckludGVyZmFjZS5UZXh0dXJlRGF0YVR5cGVzPihcbiAgICAgIHRleHR1cmU6IFRlbnNvclRleHR1cmVUeXBlLCBvcHRpb25zOiBUZW5zb3JGcm9tVGV4dHVyZU9wdGlvbnM8VD4pOiBUZW5zb3JJbnRlcmZhY2Uge1xuICAgIHJldHVybiB0ZW5zb3JGcm9tVGV4dHVyZSh0ZXh0dXJlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tR3B1QnVmZmVyPFQgZXh0ZW5kcyBUZW5zb3JJbnRlcmZhY2UuR3B1QnVmZmVyRGF0YVR5cGVzPihcbiAgICAgIGdwdUJ1ZmZlcjogVGVuc29yR3B1QnVmZmVyVHlwZSwgb3B0aW9uczogVGVuc29yRnJvbUdwdUJ1ZmZlck9wdGlvbnM8VD4pOiBUZW5zb3JJbnRlcmZhY2Uge1xuICAgIHJldHVybiB0ZW5zb3JGcm9tR3B1QnVmZmVyKGdwdUJ1ZmZlciwgb3B0aW9ucyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBpbm5lZEJ1ZmZlcjxUIGV4dGVuZHMgVGVuc29ySW50ZXJmYWNlLkNwdVBpbm5lZERhdGFUeXBlcz4oXG4gICAgICB0eXBlOiBULCBidWZmZXI6IFRlbnNvckludGVyZmFjZS5EYXRhVHlwZU1hcFtUXSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVGVuc29yIHtcbiAgICByZXR1cm4gdGVuc29yRnJvbVBpbm5lZEJ1ZmZlcih0eXBlLCBidWZmZXIsIGRpbXMpO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gY29udmVyc2lvbnNcbiAgdG9EYXRhVVJMKG9wdGlvbnM/OiBUZW5zb3JUb0RhdGFVcmxPcHRpb25zKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGVuc29yVG9EYXRhVVJMKHRoaXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgdG9JbWFnZURhdGEob3B0aW9ucz86IFRlbnNvclRvSW1hZ2VEYXRhT3B0aW9ucyk6IEltYWdlRGF0YSB7XG4gICAgcmV0dXJuIHRlbnNvclRvSW1hZ2VEYXRhKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHB1YmxpYyBmaWVsZHNcbiAgcmVhZG9ubHkgZGltczogcmVhZG9ubHkgbnVtYmVyW107XG4gIHJlYWRvbmx5IHR5cGU6IFRlbnNvclR5cGU7XG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcHJpdmF0ZSBmaWVsZHNcblxuICAvKipcbiAgICogc3RvcmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YS5cbiAgICovXG4gIHByaXZhdGUgZGF0YUxvY2F0aW9uOiBUZW5zb3JEYXRhTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIHN0b3JlcyB0aGUgZGF0YSBvbiBDUFUsIGlmIGxvY2F0aW9uIGlzICdjcHUnIG9yICdjcHUtcGlubmVkJy4gb3RoZXJ3aXNlIGVtcHR5LlxuICAgKi9cbiAgcHJpdmF0ZSBjcHVEYXRhPzogVGVuc29yRGF0YVR5cGU7XG5cbiAgLyoqXG4gICAqIHN0b3JlcyB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIHdoZW4gbG9jYXRpb24gaXMgJ3RleHR1cmUnLiBvdGhlcndpc2UgZW1wdHkuXG4gICAqL1xuICBwcml2YXRlIGdwdVRleHR1cmVEYXRhPzogVGVuc29yVGV4dHVyZVR5cGU7XG5cbiAgLyoqXG4gICAqIHN0b3JlcyB0aGUgdW5kZXJseWluZyBHUFUgYnVmZmVyIHdoZW4gbG9jYXRpb24gaXMgJ2dwdS1idWZmZXInLiBvdGhlcndpc2UgZW1wdHkuXG4gICAqL1xuICBwcml2YXRlIGdwdUJ1ZmZlckRhdGE/OiBUZW5zb3JHcHVCdWZmZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBzdG9yZXMgYW4gb3B0aW9uYWwgZG93bmxvYWRlciBmdW5jdGlvbiB0byBkb3dubG9hZCBkYXRhIGZyb20gR1BVIHRvIENQVS5cbiAgICovXG4gIHByaXZhdGUgZG93bmxvYWRlcj8oKTogUHJvbWlzZTxUZW5zb3JEYXRhVHlwZT47XG5cbiAgLyoqXG4gICAqIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRhdGEgaXMgYmVpbmcgZG93bmxvYWRlZCBmcm9tIEdQVSB0byBDUFUuXG4gICAqL1xuICBwcml2YXRlIGlzRG93bmxvYWRpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBzdG9yZXMgYW4gb3B0aW9uYWwgZGlzcG9zZXIgZnVuY3Rpb24gdG8gZGlzcG9zZSB0aGUgdW5kZXJseWluZyBkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBkaXNwb3Nlcj8oKTogdm9pZDtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gcHJvcGVydGllc1xuICBnZXQgZGF0YSgpOiBUZW5zb3JEYXRhVHlwZSB7XG4gICAgdGhpcy5lbnN1cmVWYWxpZCgpO1xuICAgIGlmICghdGhpcy5jcHVEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1RoZSBkYXRhIGlzIG5vdCBvbiBDUFUuIFVzZSBgZ2V0RGF0YSgpYCB0byBkb3dubG9hZCBHUFUgZGF0YSB0byBDUFUsICcgK1xuICAgICAgICAgICdvciB1c2UgYHRleHR1cmVgIG9yIGBncHVCdWZmZXJgIHByb3BlcnR5IHRvIGFjY2VzcyB0aGUgR1BVIGRhdGEgZGlyZWN0bHkuJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNwdURhdGE7XG4gIH1cblxuICBnZXQgbG9jYXRpb24oKTogVGVuc29yRGF0YUxvY2F0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhTG9jYXRpb247XG4gIH1cblxuICBnZXQgdGV4dHVyZSgpOiBUZW5zb3JUZXh0dXJlVHlwZSB7XG4gICAgdGhpcy5lbnN1cmVWYWxpZCgpO1xuICAgIGlmICghdGhpcy5ncHVUZXh0dXJlRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGF0YSBpcyBub3Qgc3RvcmVkIGFzIGEgV2ViR0wgdGV4dHVyZS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ3B1VGV4dHVyZURhdGE7XG4gIH1cblxuICBnZXQgZ3B1QnVmZmVyKCk6IFRlbnNvckdwdUJ1ZmZlclR5cGUge1xuICAgIHRoaXMuZW5zdXJlVmFsaWQoKTtcbiAgICBpZiAoIXRoaXMuZ3B1QnVmZmVyRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGF0YSBpcyBub3Qgc3RvcmVkIGFzIGEgV2ViR1BVIGJ1ZmZlci4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ3B1QnVmZmVyRGF0YTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBtZXRob2RzXG5cbiAgYXN5bmMgZ2V0RGF0YShyZWxlYXNlRGF0YT86IGJvb2xlYW4pOiBQcm9taXNlPFRlbnNvckRhdGFUeXBlPiB7XG4gICAgdGhpcy5lbnN1cmVWYWxpZCgpO1xuICAgIHN3aXRjaCAodGhpcy5kYXRhTG9jYXRpb24pIHtcbiAgICAgIGNhc2UgJ2NwdSc6XG4gICAgICBjYXNlICdjcHUtcGlubmVkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICAgIGNhc2UgJ3RleHR1cmUnOlxuICAgICAgY2FzZSAnZ3B1LWJ1ZmZlcic6IHtcbiAgICAgICAgaWYgKCF0aGlzLmRvd25sb2FkZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjdXJyZW50IHRlbnNvciBpcyBub3QgY3JlYXRlZCB3aXRoIGEgc3BlY2lmaWVkIGRhdGEgZG93bmxvYWRlci4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0Rvd25sb2FkaW5nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgY3VycmVudCB0ZW5zb3IgaXMgYmVpbmcgZG93bmxvYWRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuaXNEb3dubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZG93bmxvYWRlcigpO1xuICAgICAgICAgIHRoaXMuZG93bmxvYWRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLmRhdGFMb2NhdGlvbiA9ICdjcHUnO1xuICAgICAgICAgIHRoaXMuY3B1RGF0YSA9IGRhdGE7XG5cbiAgICAgICAgICBpZiAocmVsZWFzZURhdGEgJiYgdGhpcy5kaXNwb3Nlcikge1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NlcigpO1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZGF0YTtcblxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMuaXNEb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBnZXQgZGF0YSBmcm9tIGxvY2F0aW9uOiAke3RoaXMuZGF0YUxvY2F0aW9ufWApO1xuICAgIH1cbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgY3VycmVudCB0ZW5zb3IgaXMgYmVpbmcgZG93bmxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kaXNwb3Nlcikge1xuICAgICAgdGhpcy5kaXNwb3NlcigpO1xuICAgICAgdGhpcy5kaXNwb3NlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jcHVEYXRhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZ3B1VGV4dHVyZURhdGEgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ncHVCdWZmZXJEYXRhID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZG93bmxvYWRlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzRG93bmxvYWRpbmcgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmRhdGFMb2NhdGlvbiA9ICdub25lJztcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHRlbnNvciB1dGlsaXRpZXNcbiAgcHJpdmF0ZSBlbnN1cmVWYWxpZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhTG9jYXRpb24gPT09ICdub25lJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGVuc29yIGlzIGRpc3Bvc2VkLicpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2hhcGUoZGltczogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3JJbnRlcmZhY2Uge1xuICAgIHRoaXMuZW5zdXJlVmFsaWQoKTtcbiAgICBpZiAodGhpcy5kb3dubG9hZGVyIHx8IHRoaXMuZGlzcG9zZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlc2hhcGUgYSB0ZW5zb3IgdGhhdCBvd25zIEdQVSByZXNvdXJjZS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbnNvclJlc2hhcGUodGhpcywgZGltcyk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvckZhY3Rvcnl9IGZyb20gJy4vdGVuc29yLWZhY3RvcnkuanMnO1xuaW1wb3J0IHtUZW5zb3IgYXMgVGVuc29ySW1wbH0gZnJvbSAnLi90ZW5zb3ItaW1wbC5qcyc7XG5pbXBvcnQge1R5cGVkVGVuc29yVXRpbHN9IGZyb20gJy4vdGVuc29yLXV0aWxzLmpzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZGVjbGFyZSAqL1xuXG4vKipcbiAqIHJlcHJlc2VudCBhIGJhc2ljIHRlbnNvciB3aXRoIHNwZWNpZmllZCBkaW1lbnNpb25zIGFuZCBkYXRhIHR5cGUuXG4gKi9cbmludGVyZmFjZSBUeXBlZFRlbnNvckJhc2U8VCBleHRlbmRzIFRlbnNvci5UeXBlPiB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHRlbnNvci5cbiAgICovXG4gIHJlYWRvbmx5IGRpbXM6IHJlYWRvbmx5IG51bWJlcltdO1xuICAvKipcbiAgICogR2V0IHRoZSBkYXRhIHR5cGUgb2YgdGhlIHRlbnNvci5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IFQ7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGJ1ZmZlciBkYXRhIG9mIHRoZSB0ZW5zb3IuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhIGlzIG5vdCBvbiBDUFUgKGVnLiBpdCdzIGluIHRoZSBmb3JtIG9mIFdlYkdMIHRleHR1cmUgb3IgV2ViR1BVIGJ1ZmZlciksIHRocm93IGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YTogVGVuc29yLkRhdGFUeXBlTWFwW1RdO1xuICAvKipcbiAgICogR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uOiBUZW5zb3IuRGF0YUxvY2F0aW9uO1xuICAvKipcbiAgICogR2V0IHRoZSBXZWJHTCB0ZXh0dXJlIHRoYXQgaG9sZHMgdGhlIHRlbnNvciBkYXRhLlxuICAgKlxuICAgKiBJZiB0aGUgZGF0YSBpcyBub3Qgb24gR1BVIGFzIFdlYkdMIHRleHR1cmUsIHRocm93IGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgdGV4dHVyZTogVGVuc29yLlRleHR1cmVUeXBlO1xuICAvKipcbiAgICogR2V0IHRoZSBXZWJHUFUgYnVmZmVyIHRoYXQgaG9sZHMgdGhlIHRlbnNvciBkYXRhLlxuICAgKlxuICAgKiBJZiB0aGUgZGF0YSBpcyBub3Qgb24gR1BVIGFzIFdlYkdQVSBidWZmZXIsIHRocm93IGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZ3B1QnVmZmVyOiBUZW5zb3IuR3B1QnVmZmVyVHlwZTtcblxuICAvKipcbiAgICogR2V0IHRoZSBidWZmZXIgZGF0YSBvZiB0aGUgdGVuc29yLlxuICAgKlxuICAgKiBJZiB0aGUgZGF0YSBpcyBvbiBDUFUsIHJldHVybnMgdGhlIGRhdGEgaW1tZWRpYXRlbHkuXG4gICAqIElmIHRoZSBkYXRhIGlzIG9uIEdQVSwgZG93bmxvYWRzIHRoZSBkYXRhIGFuZCByZXR1cm5zIHRoZSBwcm9taXNlLlxuICAgKlxuICAgKiBAcGFyYW0gcmVsZWFzZURhdGEgLSB3aGV0aGVyIHJlbGVhc2UgdGhlIGRhdGEgb24gR1BVLiBJZ25vcmUgaWYgZGF0YSBpcyBhbHJlYWR5IG9uIENQVS5cbiAgICovXG4gIGdldERhdGEocmVsZWFzZURhdGE/OiBib29sZWFuKTogUHJvbWlzZTxUZW5zb3IuRGF0YVR5cGVNYXBbVF0+O1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlIHRoZSB0ZW5zb3IgZGF0YS5cbiAgICpcbiAgICogSWYgdGhlIGRhdGEgaXMgb24gQ1BVLCByZW1vdmUgaXRzIGludGVybmFsIHJlZmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyBkYXRhLlxuICAgKiBJZiB0aGUgZGF0YSBpcyBvbiBHUFUsIHJlbGVhc2UgdGhlIGRhdGEgb24gR1BVLlxuICAgKlxuICAgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSB0ZW5zb3IgaXMgY29uc2lkZXJlZCBubyBsb25nZXIgdmFsaWQuIEl0cyBsb2NhdGlvbiB3aWxsIGJlIHNldCB0byAnbm9uZScuXG4gICAqL1xuICBkaXNwb3NlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBUZW5zb3Ige1xuICBpbnRlcmZhY2UgRGF0YVR5cGVNYXAge1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQ4OiBJbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcbiAgICBpbnQzMjogSW50MzJBcnJheTtcbiAgICBpbnQ2NDogQmlnSW50NjRBcnJheTtcbiAgICBzdHJpbmc6IHN0cmluZ1tdO1xuICAgIGJvb2w6IFVpbnQ4QXJyYXk7XG4gICAgZmxvYXQxNjogVWludDE2QXJyYXk7ICAvLyBLZWVwIHVzaW5nIFVpbnQxNkFycmF5IHVudGlsIHdlIGhhdmUgYSBjb25jcmV0ZSBzb2x1dGlvbiBmb3IgZmxvYXQgMTYuXG4gICAgZmxvYXQ2NDogRmxvYXQ2NEFycmF5O1xuICAgIHVpbnQzMjogVWludDMyQXJyYXk7XG4gICAgdWludDY0OiBCaWdVaW50NjRBcnJheTtcbiAgICAvLyBjb21wbGV4NjQ6IG5ldmVyO1xuICAgIC8vIGNvbXBsZXgxMjg6IG5ldmVyO1xuICAgIC8vIGJmbG9hdDE2OiBuZXZlcjtcbiAgfVxuXG4gIGludGVyZmFjZSBFbGVtZW50VHlwZU1hcCB7XG4gICAgZmxvYXQzMjogbnVtYmVyO1xuICAgIHVpbnQ4OiBudW1iZXI7XG4gICAgaW50ODogbnVtYmVyO1xuICAgIHVpbnQxNjogbnVtYmVyO1xuICAgIGludDE2OiBudW1iZXI7XG4gICAgaW50MzI6IG51bWJlcjtcbiAgICBpbnQ2NDogYmlnaW50O1xuICAgIHN0cmluZzogc3RyaW5nO1xuICAgIGJvb2w6IGJvb2xlYW47XG4gICAgZmxvYXQxNjogbnVtYmVyOyAgLy8gS2VlcCB1c2luZyBVaW50MTZBcnJheSB1bnRpbCB3ZSBoYXZlIGEgY29uY3JldGUgc29sdXRpb24gZm9yIGZsb2F0IDE2LlxuICAgIGZsb2F0NjQ6IG51bWJlcjtcbiAgICB1aW50MzI6IG51bWJlcjtcbiAgICB1aW50NjQ6IGJpZ2ludDtcbiAgICAvLyBjb21wbGV4NjQ6IG5ldmVyO1xuICAgIC8vIGNvbXBsZXgxMjg6IG5ldmVyO1xuICAgIC8vIGJmbG9hdDE2OiBuZXZlcjtcbiAgfVxuXG4gIHR5cGUgRGF0YVR5cGUgPSBEYXRhVHlwZU1hcFtUeXBlXTtcbiAgdHlwZSBFbGVtZW50VHlwZSA9IEVsZW1lbnRUeXBlTWFwW1R5cGVdO1xuXG4gIC8qKlxuICAgKiBzdXBwb3J0ZWQgZGF0YSB0eXBlcyBmb3IgY29uc3RydWN0aW5nIGEgdGVuc29yIGZyb20gYSBwaW5uZWQgQ1BVIGJ1ZmZlclxuICAgKi9cbiAgZXhwb3J0IHR5cGUgQ3B1UGlubmVkRGF0YVR5cGVzID0gRXhjbHVkZTxUZW5zb3IuVHlwZSwgJ3N0cmluZyc+O1xuXG4gIC8qKlxuICAgKiB0eXBlIGFsaWFzIGZvciBXZWJHTCB0ZXh0dXJlXG4gICAqL1xuICBleHBvcnQgdHlwZSBUZXh0dXJlVHlwZSA9IFdlYkdMVGV4dHVyZTtcblxuICAvKipcbiAgICogc3VwcG9ydGVkIGRhdGEgdHlwZXMgZm9yIGNvbnN0cnVjdGluZyBhIHRlbnNvciBmcm9tIGEgV2ViR0wgdGV4dHVyZVxuICAgKi9cbiAgZXhwb3J0IHR5cGUgVGV4dHVyZURhdGFUeXBlcyA9ICdmbG9hdDMyJztcblxuICAvKipcbiAgICogdHlwZSBhbGlhcyBmb3IgV2ViR1BVIGJ1ZmZlclxuICAgKlxuICAgKiBUaGUgcmVhc29uIHdoeSB3ZSBkb24ndCB1c2UgdHlwZSBcIkdQVUJ1ZmZlclwiIGRlZmluZWQgaW4gd2ViZ3B1LmQudHMgZnJvbSBAd2ViZ3B1L3R5cGVzIGlzIGJlY2F1c2UgXCJAd2ViZ3B1L3R5cGVzXCJcbiAgICogcmVxdWlyZXMgXCJAdHlwZXMvZG9tLXdlYmNvZGVjc1wiIGFzIHBlZXIgZGVwZW5kZW5jeSB3aGVuIHVzaW5nIFR5cGVTY3JpcHQgPCB2NS4xIGFuZCBpdHMgdmVyc2lvbiBuZWVkIHRvIGJlIGNob3NlblxuICAgKiBjYXJlZnVsbHkgYWNjb3JkaW5nIHRvIHRoZSBUeXBlU2NyaXB0IHZlcnNpb24gYmVpbmcgdXNlZC4gVGhpcyBtZWFucyBzbyBmYXIgdGhlcmUgaXMgbm90IGEgd2F5IHRvIGtlZXAgZXZlcnlcbiAgICogVHlwZVNjcmlwdCB2ZXJzaW9uIGhhcHB5LiBJdCB0dXJucyBvdXQgdGhhdCB3ZSB3aWxsIGVhc2lseSBicm9rZSB1c2VycyBvbiBzb21lIFR5cGVTY3JpcHQgdmVyc2lvbi5cbiAgICpcbiAgICogZm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dwdXdlYi90eXBlcy9pc3N1ZXMvMTI3XG4gICAqL1xuICBleHBvcnQgdHlwZSBHcHVCdWZmZXJUeXBlID0ge3NpemU6IG51bWJlcjsgbWFwU3RhdGU6ICd1bm1hcHBlZCcgfCAncGVuZGluZycgfCAnbWFwcGVkJ307XG5cbiAgLyoqXG4gICAqIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGZvciBjb25zdHJ1Y3RpbmcgYSB0ZW5zb3IgZnJvbSBhIFdlYkdQVSBidWZmZXJcbiAgICovXG4gIGV4cG9ydCB0eXBlIEdwdUJ1ZmZlckRhdGFUeXBlcyA9ICdmbG9hdDMyJ3wnZmxvYXQxNid8J2ludDMyJ3wnaW50NjQnfCd1aW50MzInfCd1aW50OCd8J2Jvb2wnO1xuXG4gIC8qKlxuICAgKiByZXByZXNlbnQgd2hlcmUgdGhlIHRlbnNvciBkYXRhIGlzIHN0b3JlZFxuICAgKi9cbiAgZXhwb3J0IHR5cGUgRGF0YUxvY2F0aW9uID0gJ25vbmUnfCdjcHUnfCdjcHUtcGlubmVkJ3wndGV4dHVyZSd8J2dwdS1idWZmZXInO1xuXG4gIC8qKlxuICAgKiByZXByZXNlbnQgdGhlIGRhdGEgdHlwZSBvZiBhIHRlbnNvclxuICAgKi9cbiAgZXhwb3J0IHR5cGUgVHlwZSA9IGtleW9mIERhdGFUeXBlTWFwO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCBtdWx0aS1kaW1lbnNpb25hbCBhcnJheXMgdG8gZmVlZCB0byBvciBmZXRjaCBmcm9tIG1vZGVsIGluZmVyZW5jaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVkVGVuc29yPFQgZXh0ZW5kcyBUZW5zb3IuVHlwZT4gZXh0ZW5kcyBUeXBlZFRlbnNvckJhc2U8VD4sIFR5cGVkVGVuc29yVXRpbHM8VD4ge31cbi8qKlxuICogUmVwcmVzZW50IG11bHRpLWRpbWVuc2lvbmFsIGFycmF5cyB0byBmZWVkIHRvIG9yIGZldGNoIGZyb20gbW9kZWwgaW5mZXJlbmNpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yIGV4dGVuZHMgVHlwZWRUZW5zb3JCYXNlPFRlbnNvci5UeXBlPiwgVHlwZWRUZW5zb3JVdGlsczxUZW5zb3IuVHlwZT4ge31cblxuLyoqXG4gKiB0eXBlIFRlbnNvckNvbnN0cnVjdG9yIGRlZmluZXMgdGhlIGNvbnN0cnVjdG9ycyBvZiAnVGVuc29yJyB0byBjcmVhdGUgQ1BVIHRlbnNvciBpbnN0YW5jZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yQ29uc3RydWN0b3IgZXh0ZW5kcyBUZW5zb3JGYWN0b3J5IHtcbiAgLy8gI3JlZ2lvbiBDUFUgdGVuc29yIC0gc3BlY2lmeSBlbGVtZW50IHR5cGVcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBzdHJpbmcgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiB0eXBlLCBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSAtIFNwZWNpZnkgdGhlIGVsZW1lbnQgdHlwZS5cbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KHR5cGU6ICdzdHJpbmcnLCBkYXRhOiBUZW5zb3IuRGF0YVR5cGVNYXBbJ3N0cmluZyddfHJlYWRvbmx5IHN0cmluZ1tdLFxuICAgICAgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J3N0cmluZyc+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgYm9vbCB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIHR5cGUsIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gU3BlY2lmeSB0aGUgZWxlbWVudCB0eXBlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcodHlwZTogJ2Jvb2wnLCBkYXRhOiBUZW5zb3IuRGF0YVR5cGVNYXBbJ2Jvb2wnXXxyZWFkb25seSBib29sZWFuW10sIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPCdib29sJz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyA2NC1iaXQgaW50ZWdlciB0eXBlZCB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIHR5cGUsIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gU3BlY2lmeSB0aGUgZWxlbWVudCB0eXBlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXc8VCBleHRlbmRzICd1aW50NjQnfCdpbnQ2NCc+KFxuICAgICAgdHlwZTogVCwgZGF0YTogVGVuc29yLkRhdGFUeXBlTWFwW1RdfHJlYWRvbmx5IGJpZ2ludFtdfHJlYWRvbmx5IG51bWJlcltdLFxuICAgICAgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8VD47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBudW1lcmljIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gdHlwZSwgZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBTcGVjaWZ5IHRoZSBlbGVtZW50IHR5cGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldzxUIGV4dGVuZHMgRXhjbHVkZTxUZW5zb3IuVHlwZSwgJ3N0cmluZyd8J2Jvb2wnfCd1aW50NjQnfCdpbnQ2NCc+PihcbiAgICAgIHR5cGU6IFQsIGRhdGE6IFRlbnNvci5EYXRhVHlwZU1hcFtUXXxyZWFkb25seSBudW1iZXJbXSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8VD47XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIENQVSB0ZW5zb3IgLSBpbmZlciBlbGVtZW50IHR5cGVzXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBmbG9hdDMyIHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IEZsb2F0MzJBcnJheSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J2Zsb2F0MzInPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGludDggdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogSW50OEFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnaW50OCc+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgdWludDggdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogVWludDhBcnJheSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J3VpbnQ4Jz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyB1aW50MTYgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogVWludDE2QXJyYXksIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPCd1aW50MTYnPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IGludDE2IHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IEludDE2QXJyYXksIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPCdpbnQxNic+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgaW50MzIgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogSW50MzJBcnJheSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J2ludDMyJz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBpbnQ2NCB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBCaWdJbnQ2NEFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwnaW50NjQnPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHN0cmluZyB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiByZWFkb25seSBzdHJpbmdbXSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J3N0cmluZyc+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgYm9vbCB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiByZWFkb25seSBib29sZWFuW10sIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPCdib29sJz47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBmbG9hdDY0IHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IEZsb2F0NjRBcnJheSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J2Zsb2F0NjQnPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHVpbnQzMiB0ZW5zb3Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGRhdGEgYW5kIGRpbXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gU3BlY2lmeSB0aGUgQ1BVIHRlbnNvciBkYXRhLlxuICAgKiBAcGFyYW0gZGltcyAtIFNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICovXG4gIG5ldyhkYXRhOiBVaW50MzJBcnJheSwgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVHlwZWRUZW5zb3I8J3VpbnQzMic+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgdWludDY0IHRlbnNvciBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZGF0YSBhbmQgZGltcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KGRhdGE6IEJpZ1VpbnQ2NEFycmF5LCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUeXBlZFRlbnNvcjwndWludDY0Jz47XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gQ1BVIHRlbnNvciAtIGZhbGwgYmFjayB0byBub24tZ2VuZXJpYyB0ZW5zb3IgdHlwZSBkZWNsYXJhdGlvblxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiB0eXBlLCBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSAtIFNwZWNpZnkgdGhlIGVsZW1lbnQgdHlwZS5cbiAgICogQHBhcmFtIGRhdGEgLSBTcGVjaWZ5IHRoZSBDUFUgdGVuc29yIGRhdGEuXG4gICAqIEBwYXJhbSBkaW1zIC0gU3BlY2lmeSB0aGUgZGltZW5zaW9uIG9mIHRoZSB0ZW5zb3IuIElmIG9taXR0ZWQsIGEgMS1EIHRlbnNvciBpcyBhc3N1bWVkLlxuICAgKi9cbiAgbmV3KHR5cGU6IFRlbnNvci5UeXBlLCBkYXRhOiBUZW5zb3IuRGF0YVR5cGV8cmVhZG9ubHkgbnVtYmVyW118cmVhZG9ubHkgc3RyaW5nW118cmVhZG9ubHkgYmlnaW50W118cmVhZG9ubHkgYm9vbGVhbltdLFxuICAgICAgZGltcz86IHJlYWRvbmx5IG51bWJlcltdKTogVGVuc29yO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgdGVuc29yIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBkYXRhIGFuZCBkaW1zLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIFNwZWNpZnkgdGhlIENQVSB0ZW5zb3IgZGF0YS5cbiAgICogQHBhcmFtIGRpbXMgLSBTcGVjaWZ5IHRoZSBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci4gSWYgb21pdHRlZCwgYSAxLUQgdGVuc29yIGlzIGFzc3VtZWQuXG4gICAqL1xuICBuZXcoZGF0YTogVGVuc29yLkRhdGFUeXBlLCBkaW1zPzogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3I7XG4gIC8vICNlbmRyZWdpb25cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFRlbnNvciA9IFRlbnNvckltcGwgYXMgVGVuc29yQ29uc3RydWN0b3I7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7ZW52fSBmcm9tICcuL2Vudi1pbXBsLmpzJztcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRSA9IChkZXZpY2VUeXBlOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpID0+IHtcbiAgaWYgKHR5cGVvZiBlbnYudHJhY2UgPT09ICd1bmRlZmluZWQnID8gIWVudi53YXNtLnRyYWNlIDogIWVudi50cmFjZSkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLnRpbWVTdGFtcChgJHtkZXZpY2VUeXBlfTo6T1JUOjoke2xhYmVsfWApO1xufTtcblxuY29uc3QgVFJBQ0VfRlVOQyA9IChtc2c6IHN0cmluZywgZXh0cmFNc2c/OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaz8uc3BsaXQoL1xcclxcbnxcXHJ8XFxuL2cpIHx8IFtdO1xuICBsZXQgaGFzVHJhY2VGdW5jID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaGFzVHJhY2VGdW5jICYmICFzdGFja1tpXS5pbmNsdWRlcygnVFJBQ0VfRlVOQycpKSB7XG4gICAgICBsZXQgbGFiZWwgPSBgRlVOQ18ke21zZ306OiR7c3RhY2tbaV0udHJpbSgpLnNwbGl0KCcgJylbMV19YDtcbiAgICAgIGlmIChleHRyYU1zZykge1xuICAgICAgICBsYWJlbCArPSBgOjoke2V4dHJhTXNnfWA7XG4gICAgICB9XG4gICAgICBUUkFDRSgnQ1BVJywgbGFiZWwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RhY2tbaV0uaW5jbHVkZXMoJ1RSQUNFX0ZVTkMnKSkge1xuICAgICAgaGFzVHJhY2VGdW5jID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgY29uc3QgVFJBQ0VfRlVOQ19CRUdJTiA9IChleHRyYU1zZz86IHN0cmluZykgPT4ge1xuICBpZiAodHlwZW9mIGVudi50cmFjZSA9PT0gJ3VuZGVmaW5lZCcgPyAhZW52Lndhc20udHJhY2UgOiAhZW52LnRyYWNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFRSQUNFX0ZVTkMoJ0JFR0lOJywgZXh0cmFNc2cpO1xufTtcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRV9GVU5DX0VORCA9IChleHRyYU1zZz86IHN0cmluZykgPT4ge1xuICBpZiAodHlwZW9mIGVudi50cmFjZSA9PT0gJ3VuZGVmaW5lZCcgPyAhZW52Lndhc20udHJhY2UgOiAhZW52LnRyYWNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFRSQUNFX0ZVTkMoJ0VORCcsIGV4dHJhTXNnKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7cmVzb2x2ZUJhY2tlbmRBbmRFeGVjdXRpb25Qcm92aWRlcnN9IGZyb20gJy4vYmFja2VuZC1pbXBsLmpzJztcbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXJ9IGZyb20gJy4vYmFja2VuZC5qcyc7XG5pbXBvcnQge0luZmVyZW5jZVNlc3Npb24gYXMgSW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZX0gZnJvbSAnLi9pbmZlcmVuY2Utc2Vzc2lvbi5qcyc7XG5pbXBvcnQge09ubnhWYWx1ZX0gZnJvbSAnLi9vbm54LXZhbHVlLmpzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuL3RlbnNvci5qcyc7XG5pbXBvcnQge1RSQUNFX0ZVTkNfQkVHSU4sIFRSQUNFX0ZVTkNfRU5EfSBmcm9tICcuL3RyYWNlLmpzJztcblxudHlwZSBTZXNzaW9uT3B0aW9ucyA9IEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2UuU2Vzc2lvbk9wdGlvbnM7XG50eXBlIFJ1bk9wdGlvbnMgPSBJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlLlJ1bk9wdGlvbnM7XG50eXBlIEZlZWRzVHlwZSA9IEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2UuRmVlZHNUeXBlO1xudHlwZSBGZXRjaGVzVHlwZSA9IEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2UuRmV0Y2hlc1R5cGU7XG50eXBlIFJldHVyblR5cGUgPSBJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlLlJldHVyblR5cGU7XG5cbmV4cG9ydCBjbGFzcyBJbmZlcmVuY2VTZXNzaW9uIGltcGxlbWVudHMgSW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZSB7XG4gIHByaXZhdGUgY29uc3RydWN0b3IoaGFuZGxlcjogSW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXIpIHtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG4gIHJ1bihmZWVkczogRmVlZHNUeXBlLCBvcHRpb25zPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UmV0dXJuVHlwZT47XG4gIHJ1bihmZWVkczogRmVlZHNUeXBlLCBmZXRjaGVzOiBGZXRjaGVzVHlwZSwgb3B0aW9ucz86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJldHVyblR5cGU+O1xuICBhc3luYyBydW4oZmVlZHM6IEZlZWRzVHlwZSwgYXJnMT86IEZldGNoZXNUeXBlfFJ1bk9wdGlvbnMsIGFyZzI/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSZXR1cm5UeXBlPiB7XG4gICAgVFJBQ0VfRlVOQ19CRUdJTigpO1xuICAgIGNvbnN0IGZldGNoZXM6IHtbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlfG51bGx9ID0ge307XG4gICAgbGV0IG9wdGlvbnM6IFJ1bk9wdGlvbnMgPSB7fTtcbiAgICAvLyBjaGVjayBpbnB1dHNcbiAgICBpZiAodHlwZW9mIGZlZWRzICE9PSAnb2JqZWN0JyB8fCBmZWVkcyA9PT0gbnVsbCB8fCBmZWVkcyBpbnN0YW5jZW9mIFRlbnNvciB8fCBBcnJheS5pc0FycmF5KGZlZWRzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnXFwnZmVlZHNcXCcgbXVzdCBiZSBhbiBvYmplY3QgdGhhdCB1c2UgaW5wdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLicpO1xuICAgIH1cblxuICAgIGxldCBpc0ZldGNoZXNFbXB0eSA9IHRydWU7XG4gICAgLy8gZGV0ZXJtaW5lIHdoaWNoIG92ZXJyaWRlIGlzIGJlaW5nIHVzZWRcbiAgICBpZiAodHlwZW9mIGFyZzEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoYXJnMSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIGFyZ3VtZW50WzFdOiBjYW5ub3QgYmUgbnVsbC4nKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcxIGluc3RhbmNlb2YgVGVuc29yKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2ZldGNoZXNcXCcgY2Fubm90IGJlIGEgVGVuc29yJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZzEpKSB7XG4gICAgICAgIGlmIChhcmcxLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2ZldGNoZXNcXCcgY2Fubm90IGJlIGFuIGVtcHR5IGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICAgIGlzRmV0Y2hlc0VtcHR5ID0gZmFsc2U7XG4gICAgICAgIC8vIG91dHB1dCBuYW1lc1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgYXJnMSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ2ZldGNoZXNcXCcgbXVzdCBiZSBhIHN0cmluZyBhcnJheSBvciBhbiBvYmplY3QuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLm91dHB1dE5hbWVzLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgJ2ZldGNoZXMnIGNvbnRhaW5zIGludmFsaWQgb3V0cHV0IG5hbWU6ICR7bmFtZX0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZldGNoZXNbbmFtZV0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmcyID09PSAnb2JqZWN0JyAmJiBhcmcyICE9PSBudWxsKSB7XG4gICAgICAgICAgb3B0aW9ucyA9IGFyZzI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZzIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnb3B0aW9uc1xcJyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVjaWRlIHdoZXRoZXIgYXJnMSBpcyBmZXRjaGVzIG9yIG9wdGlvbnNcbiAgICAgICAgLy8gaWYgYW55IG91dHB1dCBuYW1lIGlzIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyB2YWxpZCBPbm54VmFsdWUsIHdlIGNvbnNpZGVyIGl0IGZldGNoZXNcbiAgICAgICAgbGV0IGlzRmV0Y2hlcyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBhcmcxS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFyZzEpO1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdGhpcy5vdXRwdXROYW1lcykge1xuICAgICAgICAgIGlmIChhcmcxS2V5cy5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IChhcmcxIGFzIEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2UuTnVsbGFibGVPbm54VmFsdWVNYXBUeXBlKVtuYW1lXTtcbiAgICAgICAgICAgIGlmICh2ID09PSBudWxsIHx8IHYgaW5zdGFuY2VvZiBUZW5zb3IpIHtcbiAgICAgICAgICAgICAgaXNGZXRjaGVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgaXNGZXRjaGVzRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgZmV0Y2hlc1tuYW1lXSA9IHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRmV0Y2hlcykge1xuICAgICAgICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ29iamVjdCcgJiYgYXJnMiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGFyZzI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ29wdGlvbnNcXCcgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMgPSBhcmcxIGFzIFJ1bk9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcxICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCBhcmd1bWVudFsxXTogbXVzdCBiZSBcXCdmZXRjaGVzXFwnIG9yIFxcJ29wdGlvbnNcXCcuJyk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgYWxsIGlucHV0cyBhcmUgaW4gZmVlZFxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLmlucHV0TmFtZXMpIHtcbiAgICAgIGlmICh0eXBlb2YgZmVlZHNbbmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5wdXQgJyR7bmFtZX0nIGlzIG1pc3NpbmcgaW4gJ2ZlZWRzJy5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBubyBmZXRjaGVzIGlzIHNwZWNpZmllZCwgd2UgdXNlIHRoZSBmdWxsIG91dHB1dCBuYW1lcyBsaXN0XG4gICAgaWYgKGlzRmV0Y2hlc0VtcHR5KSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdGhpcy5vdXRwdXROYW1lcykge1xuICAgICAgICBmZXRjaGVzW25hbWVdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmZWVkcywgZmV0Y2hlcyBhbmQgb3B0aW9ucyBhcmUgcHJlcGFyZWRcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmhhbmRsZXIucnVuKGZlZWRzLCBmZXRjaGVzLCBvcHRpb25zKTtcbiAgICBjb25zdCByZXR1cm5WYWx1ZToge1tuYW1lOiBzdHJpbmddOiBPbm54VmFsdWV9ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmVzdWx0cykge1xuICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdHMsIGtleSkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0c1trZXldO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVGVuc29yKSB7XG4gICAgICAgICAgcmV0dXJuVmFsdWVba2V5XSA9IHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gbmV3IFRlbnNvcihyZXN1bHQudHlwZSwgcmVzdWx0LmRhdGEsIHJlc3VsdC5kaW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBUUkFDRV9GVU5DX0VORCgpO1xuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIGFzeW5jIHJlbGVhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5kaXNwb3NlKCk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IFNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlPjtcbiAgc3RhdGljIGNyZWF0ZShidWZmZXI6IEFycmF5QnVmZmVyTGlrZSwgb3B0aW9ucz86IFNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlPjtcbiAgc3RhdGljIGNyZWF0ZShidWZmZXI6IEFycmF5QnVmZmVyTGlrZSwgYnl0ZU9mZnNldDogbnVtYmVyLCBieXRlTGVuZ3RoPzogbnVtYmVyLCBvcHRpb25zPzogU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uSW50ZXJmYWNlPjtcbiAgc3RhdGljIGNyZWF0ZShidWZmZXI6IFVpbnQ4QXJyYXksIG9wdGlvbnM/OiBTZXNzaW9uT3B0aW9ucyk6IFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbkludGVyZmFjZT47XG4gIHN0YXRpYyBhc3luYyBjcmVhdGUoXG4gICAgICBhcmcwOiBzdHJpbmd8QXJyYXlCdWZmZXJMaWtlfFVpbnQ4QXJyYXksIGFyZzE/OiBTZXNzaW9uT3B0aW9uc3xudW1iZXIsIGFyZzI/OiBudW1iZXIsXG4gICAgICBhcmczPzogU2Vzc2lvbk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb25JbnRlcmZhY2U+IHtcbiAgICBUUkFDRV9GVU5DX0JFR0lOKCk7XG4gICAgLy8gZWl0aGVyIGxvYWQgZnJvbSBhIGZpbGUgb3IgYnVmZmVyXG4gICAgbGV0IGZpbGVQYXRoT3JVaW50OEFycmF5OiBzdHJpbmd8VWludDhBcnJheTtcbiAgICBsZXQgb3B0aW9uczogU2Vzc2lvbk9wdGlvbnMgPSB7fTtcblxuICAgIGlmICh0eXBlb2YgYXJnMCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZpbGVQYXRoT3JVaW50OEFycmF5ID0gYXJnMDtcbiAgICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gJ29iamVjdCcgJiYgYXJnMSAhPT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zID0gYXJnMTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZzEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ29wdGlvbnNcXCcgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcmcwIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgZmlsZVBhdGhPclVpbnQ4QXJyYXkgPSBhcmcwO1xuICAgICAgaWYgKHR5cGVvZiBhcmcxID09PSAnb2JqZWN0JyAmJiBhcmcxICE9PSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMgPSBhcmcxO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXFwnb3B0aW9uc1xcJyBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICBhcmcwIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHxcbiAgICAgICAgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgYXJnMCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gYXJnMDtcbiAgICAgIGxldCBieXRlT2Zmc2V0ID0gMDtcbiAgICAgIGxldCBieXRlTGVuZ3RoID0gYXJnMC5ieXRlTGVuZ3RoO1xuICAgICAgaWYgKHR5cGVvZiBhcmcxID09PSAnb2JqZWN0JyAmJiBhcmcxICE9PSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMgPSBhcmcxO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYnl0ZU9mZnNldCA9IGFyZzE7XG4gICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnYnl0ZU9mZnNldFxcJyBtdXN0IGJlIGFuIGludGVnZXIuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgJ2J5dGVPZmZzZXQnIGlzIG91dCBvZiByYW5nZSBbMCwgJHtidWZmZXIuYnl0ZUxlbmd0aH0pLmApO1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVMZW5ndGggPSBhcmcwLmJ5dGVMZW5ndGggLSBieXRlT2Zmc2V0O1xuICAgICAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IGFyZzI7XG4gICAgICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihieXRlTGVuZ3RoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2J5dGVMZW5ndGhcXCcgbXVzdCBiZSBhbiBpbnRlZ2VyLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8PSAwIHx8IGJ5dGVPZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGAnYnl0ZUxlbmd0aCcgaXMgb3V0IG9mIHJhbmdlICgwLCAke2J1ZmZlci5ieXRlTGVuZ3RoIC0gYnl0ZU9mZnNldH1dLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGFyZzMgPT09ICdvYmplY3QnICYmIGFyZzMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBhcmczO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZzMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcXCdvcHRpb25zXFwnIG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcXCdieXRlTGVuZ3RoXFwnIG11c3QgYmUgYSBudW1iZXIuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZzEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ29wdGlvbnNcXCcgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgICB9XG4gICAgICBmaWxlUGF0aE9yVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgYXJndW1lbnRbMF06IG11c3QgYmUgXFwncGF0aFxcJyBvciBcXCdidWZmZXJcXCcuJyk7XG4gICAgfVxuXG4gICAgLy8gcmVzb2x2ZSBiYWNrZW5kLCB1cGRhdGUgc2Vzc2lvbiBvcHRpb25zIHdpdGggdmFsaWRhdGVkIEVQcywgYW5kIGNyZWF0ZSBzZXNzaW9uIGhhbmRsZXJcbiAgICBjb25zdCBbYmFja2VuZCwgb3B0aW9uc1dpdGhWYWxpZGF0ZWRFUHNdID0gYXdhaXQgcmVzb2x2ZUJhY2tlbmRBbmRFeGVjdXRpb25Qcm92aWRlcnMob3B0aW9ucyk7XG4gICAgY29uc3QgaGFuZGxlciA9IGF3YWl0IGJhY2tlbmQuY3JlYXRlSW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXIoZmlsZVBhdGhPclVpbnQ4QXJyYXksIG9wdGlvbnNXaXRoVmFsaWRhdGVkRVBzKTtcbiAgICBUUkFDRV9GVU5DX0VORCgpO1xuICAgIHJldHVybiBuZXcgSW5mZXJlbmNlU2Vzc2lvbihoYW5kbGVyKTtcbiAgfVxuXG4gIHN0YXJ0UHJvZmlsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlci5zdGFydFByb2ZpbGluZygpO1xuICB9XG4gIGVuZFByb2ZpbGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZXIuZW5kUHJvZmlsaW5nKCk7XG4gIH1cblxuICBnZXQgaW5wdXROYW1lcygpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5pbnB1dE5hbWVzO1xuICB9XG4gIGdldCBvdXRwdXROYW1lcygpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vdXRwdXROYW1lcztcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlcjogSW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXI7XG59XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbiBhcyBJbmZlcmVuY2VTZXNzaW9uSW1wbH0gZnJvbSAnLi9pbmZlcmVuY2Utc2Vzc2lvbi1pbXBsLmpzJztcbmltcG9ydCB7T25ueE1vZGVsT3B0aW9uc30gZnJvbSAnLi9vbm54LW1vZGVsLmpzJztcbmltcG9ydCB7T25ueFZhbHVlLCBPbm54VmFsdWVEYXRhTG9jYXRpb259IGZyb20gJy4vb25ueC12YWx1ZS5qcyc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZWRlY2xhcmUgKi9cblxuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIEluZmVyZW5jZVNlc3Npb24ge1xuICAvLyAjcmVnaW9uIGlucHV0L291dHB1dCB0eXBlc1xuXG4gIHR5cGUgT25ueFZhbHVlTWFwVHlwZSA9IHtyZWFkb25seSBbbmFtZTogc3RyaW5nXTogT25ueFZhbHVlfTtcbiAgdHlwZSBOdWxsYWJsZU9ubnhWYWx1ZU1hcFR5cGUgPSB7cmVhZG9ubHkgW25hbWU6IHN0cmluZ106IE9ubnhWYWx1ZSB8IG51bGx9O1xuXG4gIC8qKlxuICAgKiBBIGZlZWRzIChtb2RlbCBpbnB1dHMpIGlzIGFuIG9iamVjdCB0aGF0IHVzZXMgaW5wdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKi9cbiAgdHlwZSBGZWVkc1R5cGUgPSBPbm54VmFsdWVNYXBUeXBlO1xuXG4gIC8qKlxuICAgKiBBIGZldGNoZXMgKG1vZGVsIG91dHB1dHMpIGNvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgKlxuICAgKiAtIE9taXR0ZWQuIFVzZSBtb2RlbCdzIG91dHB1dCBuYW1lcyBkZWZpbml0aW9uLlxuICAgKiAtIEFuIGFycmF5IG9mIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBvdXRwdXQgbmFtZXMuXG4gICAqIC0gQW4gb2JqZWN0IHRoYXQgdXNlIG91dHB1dCBuYW1lcyBhcyBrZXlzIGFuZCBPbm54VmFsdWUgb3IgbnVsbCBhcyBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICpcbiAgICogQHJlbWFya1xuICAgKiBkaWZmZXJlbnQgZnJvbSBpbnB1dCBhcmd1bWVudCwgaW4gb3V0cHV0LCBPbm54VmFsdWUgaXMgb3B0aW9uYWwuIElmIGFuIE9ubnhWYWx1ZSBpcyBwcmVzZW50IGl0IHdpbGwgYmVcbiAgICogdXNlZCBhcyBhIHByZS1hbGxvY2F0ZWQgdmFsdWUgYnkgdGhlIGluZmVyZW5jZSBlbmdpbmU7IGlmIG9taXR0ZWQsIGluZmVyZW5jZSBlbmdpbmUgd2lsbCBhbGxvY2F0ZSBidWZmZXJcbiAgICogaW50ZXJuYWxseS5cbiAgICovXG4gIHR5cGUgRmV0Y2hlc1R5cGUgPSByZWFkb25seSBzdHJpbmdbXXxOdWxsYWJsZU9ubnhWYWx1ZU1hcFR5cGU7XG5cbiAgLyoqXG4gICAqIEEgaW5mZXJlbmNpbmcgcmV0dXJuIHR5cGUgaXMgYW4gb2JqZWN0IHRoYXQgdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKi9cbiAgdHlwZSBSZXR1cm5UeXBlID0gT25ueFZhbHVlTWFwVHlwZTtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBzZXNzaW9uIG9wdGlvbnNcblxuICAvKipcbiAgICogQSBzZXQgb2YgY29uZmlndXJhdGlvbnMgZm9yIHNlc3Npb24gYmVoYXZpb3IuXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFNlc3Npb25PcHRpb25zIGV4dGVuZHMgT25ueE1vZGVsT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgZXhlY3V0aW9uIHByb3ZpZGVyIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBBbiBleGVjdXRpb24gcHJvdmlkZXIgb3B0aW9uIGNhbiBiZSBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBuYW1lIG9mIHRoZSBleGVjdXRpb24gcHJvdmlkZXIsXG4gICAgICogb3IgYW4gb2JqZWN0IG9mIGNvcnJlc3BvbmRpbmcgdHlwZS5cbiAgICAgKi9cbiAgICBleGVjdXRpb25Qcm92aWRlcnM/OiByZWFkb25seSBFeGVjdXRpb25Qcm92aWRlckNvbmZpZ1tdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGludHJhIE9QIHRocmVhZHMgbnVtYmVyLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSkuXG4gICAgICovXG4gICAgaW50cmFPcE51bVRocmVhZHM/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW50ZXIgT1AgdGhyZWFkcyBudW1iZXIuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKS5cbiAgICAgKi9cbiAgICBpbnRlck9wTnVtVGhyZWFkcz86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmcmVlIGRpbWVuc2lvbiBvdmVycmlkZS5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpIG9yIFdlYkFzc2VtYmx5IGJhY2tlbmRcbiAgICAgKi9cbiAgICBmcmVlRGltZW5zaW9uT3ZlcnJpZGVzPzoge3JlYWRvbmx5IFtkaW1lbnNpb25OYW1lOiBzdHJpbmddOiBudW1iZXJ9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wdGltaXphdGlvbiBsZXZlbC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpIG9yIFdlYkFzc2VtYmx5IGJhY2tlbmRcbiAgICAgKi9cbiAgICBncmFwaE9wdGltaXphdGlvbkxldmVsPzogJ2Rpc2FibGVkJ3wnYmFzaWMnfCdleHRlbmRlZCd8J2FsbCc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGVuYWJsZSBDUFUgbWVtb3J5IGFyZW5hLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSkgb3IgV2ViQXNzZW1ibHkgYmFja2VuZFxuICAgICAqL1xuICAgIGVuYWJsZUNwdU1lbUFyZW5hPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIG1lbW9yeSBwYXR0ZXJuLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSkgb3IgV2ViQXNzZW1ibHkgYmFja2VuZFxuICAgICAqL1xuICAgIGVuYWJsZU1lbVBhdHRlcm4/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRXhlY3V0aW9uIG1vZGUuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKSBvciBXZWJBc3NlbWJseSBiYWNrZW5kXG4gICAgICovXG4gICAgZXhlY3V0aW9uTW9kZT86ICdzZXF1ZW50aWFsJ3wncGFyYWxsZWwnO1xuXG4gICAgLyoqXG4gICAgICogT3B0aW1pemVkIG1vZGVsIGZpbGUgcGF0aC5cbiAgICAgKlxuICAgICAqIElmIHRoaXMgc2V0dGluZyBpcyBzcGVjaWZpZWQsIHRoZSBvcHRpbWl6ZWQgbW9kZWwgd2lsbCBiZSBkdW1wZWQuIEluIGJyb3dzZXIsIGEgYmxvYiB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiB3aXRoIGEgcG9wLXVwIHdpbmRvdy5cbiAgICAgKi9cbiAgICBvcHRpbWl6ZWRNb2RlbEZpbGVQYXRoPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmFibGUgcHJvZmlsaW5nLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEgZnV0dXJlIHVzZS5cbiAgICAgKi9cbiAgICBlbmFibGVQcm9maWxpbmc/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRmlsZSBwcmVmaXggZm9yIHByb2ZpbGluZy5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIGZ1dHVyZSB1c2UuXG4gICAgICovXG4gICAgcHJvZmlsZUZpbGVQcmVmaXg/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBMb2cgSUQuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKSBvciBXZWJBc3NlbWJseSBiYWNrZW5kXG4gICAgICovXG4gICAgbG9nSWQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBMb2cgc2V2ZXJpdHkgbGV2ZWwuIFNlZVxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvb25ueHJ1bnRpbWUvYmxvYi9tYWluL2luY2x1ZGUvb25ueHJ1bnRpbWUvY29yZS9jb21tb24vbG9nZ2luZy9zZXZlcml0eS5oXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgKE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlKSBvciBXZWJBc3NlbWJseSBiYWNrZW5kXG4gICAgICovXG4gICAgbG9nU2V2ZXJpdHlMZXZlbD86IDB8MXwyfDN8NDtcblxuICAgIC8qKlxuICAgICAqIExvZyB2ZXJib3NpdHkgbGV2ZWwuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gV2ViQXNzZW1ibHkgYmFja2VuZC4gV2lsbCBzdXBwb3J0IE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlIGxhdGVyXG4gICAgICovXG4gICAgbG9nVmVyYm9zaXR5TGV2ZWw/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHN0cmluZyBhcyBhIHByZWZlcnJlZCBkYXRhIGxvY2F0aW9uIGZvciBhbGwgb3V0cHV0cywgb3IgYW4gb2JqZWN0IHRoYXQgdXNlIG91dHB1dCBuYW1lcyBhcyBrZXlzIGFuZCBhXG4gICAgICogcHJlZmVycmVkIGRhdGEgbG9jYXRpb24gYXMgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gT05OWFJ1bnRpbWUgV2ViIGZvciBXZWJHTCBhbmQgV2ViR1BVIEVQLlxuICAgICAqL1xuICAgIHByZWZlcnJlZE91dHB1dExvY2F0aW9uPzogT25ueFZhbHVlRGF0YUxvY2F0aW9ufHtyZWFkb25seSBbb3V0cHV0TmFtZTogc3RyaW5nXTogT25ueFZhbHVlRGF0YUxvY2F0aW9ufTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZW5hYmxlIGdyYXBoIGNhcHR1cmUuXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIFdlYiBmb3IgV2ViR1BVIEVQLlxuICAgICAqL1xuICAgIGVuYWJsZUdyYXBoQ2FwdHVyZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSBjb25maWd1cmF0aW9ucyBmb3IgYSBzZXNzaW9uLiBTZWVcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L29ubnhydW50aW1lL2Jsb2IvbWFpbi9pbmNsdWRlL29ubnhydW50aW1lL2NvcmUvc2Vzc2lvbi9cbiAgICAgKiBvbm54cnVudGltZV9zZXNzaW9uX29wdGlvbnNfY29uZmlnX2tleXMuaFxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIFdlYkFzc2VtYmx5IGJhY2tlbmQuIFdpbGwgc3VwcG9ydCBOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSBsYXRlclxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGV4dHJhOiB7XG4gICAgICogICBzZXNzaW9uOiB7XG4gICAgICogICAgIHNldF9kZW5vcm1hbF9hc196ZXJvOiBcIjFcIixcbiAgICAgKiAgICAgZGlzYWJsZV9wcmVwYWNraW5nOiBcIjFcIlxuICAgICAqICAgfSxcbiAgICAgKiAgIG9wdGltaXphdGlvbjoge1xuICAgICAqICAgICBlbmFibGVfZ2VsdV9hcHByb3hpbWF0aW9uOiBcIjFcIlxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBleHRyYT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgLy8gI3JlZ2lvbiBleGVjdXRpb24gcHJvdmlkZXJzXG5cbiAgLy8gQ3VycmVudGx5LCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgYmFja2VuZHMgdG8gc3VwcG9ydCBleGVjdXRpb24gcHJvdmlkZXJzOlxuICAvLyBCYWNrZW5kIE5vZGUuanMgYmluZGluZzogc3VwcG9ydHMgJ2NwdScsICdkbWwnICh3aW4zMiksICdjb3JlbWwnIChtYWNPUykgYW5kICdjdWRhJyAobGludXgpLlxuICAvLyBCYWNrZW5kIFdlYkFzc2VtYmx5OiBzdXBwb3J0cyAnY3B1JywgJ3dhc20nLCAnd2ViZ3B1JyBhbmQgJ3dlYm5uJy5cbiAgLy8gQmFja2VuZCBPTk5YLmpzOiBzdXBwb3J0cyAnd2ViZ2wnLlxuICAvLyBCYWNrZW5kIFJlYWN0IE5hdGl2ZTogc3VwcG9ydHMgJ2NwdScsICd4bm5wYWNrJywgJ2NvcmVtbCcgKGlPUyksICdubmFwaScgKEFuZHJvaWQpLlxuICBpbnRlcmZhY2UgRXhlY3V0aW9uUHJvdmlkZXJPcHRpb25NYXAge1xuICAgIGNvcmVtbDogQ29yZU1MRXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gICAgY3B1OiBDcHVFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICBjdWRhOiBDdWRhRXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gICAgZG1sOiBEbWxFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICBubmFwaTogTm5hcGlFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICB0ZW5zb3JydDogVGVuc29yUnRFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICB3YXNtOiBXZWJBc3NlbWJseUV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgIHdlYmdsOiBXZWJHTEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgIHdlYmdwdTogV2ViR3B1RXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gICAgd2Vibm46IFdlYk5ORXhlY3V0aW9uUHJvdmlkZXJPcHRpb247XG4gICAgeG5ucGFjazogWG5ucGFja0V4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICB9XG5cbiAgdHlwZSBFeGVjdXRpb25Qcm92aWRlck5hbWUgPSBrZXlvZiBFeGVjdXRpb25Qcm92aWRlck9wdGlvbk1hcDtcbiAgdHlwZSBFeGVjdXRpb25Qcm92aWRlckNvbmZpZyA9XG4gICAgICBFeGVjdXRpb25Qcm92aWRlck9wdGlvbk1hcFtFeGVjdXRpb25Qcm92aWRlck5hbWVdfEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9ufEV4ZWN1dGlvblByb3ZpZGVyTmFtZXxzdHJpbmc7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgQ3B1RXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ2NwdSc7XG4gICAgdXNlQXJlbmE/OiBib29sZWFuO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgQ3VkYUV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIGV4dGVuZHMgRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24ge1xuICAgIHJlYWRvbmx5IG5hbWU6ICdjdWRhJztcbiAgICBkZXZpY2VJZD86IG51bWJlcjtcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIERtbEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIGV4dGVuZHMgRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24ge1xuICAgIHJlYWRvbmx5IG5hbWU6ICdkbWwnO1xuICAgIGRldmljZUlkPzogbnVtYmVyO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgVGVuc29yUnRFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAndGVuc29ycnQnO1xuICAgIGRldmljZUlkPzogbnVtYmVyO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgV2ViQXNzZW1ibHlFeGVjdXRpb25Qcm92aWRlck9wdGlvbiBleHRlbmRzIEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIHtcbiAgICByZWFkb25seSBuYW1lOiAnd2FzbSc7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBXZWJHTEV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uIGV4dGVuZHMgRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24ge1xuICAgIHJlYWRvbmx5IG5hbWU6ICd3ZWJnbCc7XG4gICAgLy8gVE9ETzogYWRkIGZsYWdzXG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBYbm5wYWNrRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ3hubnBhY2snO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgV2ViR3B1RXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ3dlYmdwdSc7XG4gICAgcHJlZmVycmVkTGF5b3V0PzogJ05DSFcnfCdOSFdDJztcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIFdlYk5ORXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ3dlYm5uJztcbiAgICBkZXZpY2VUeXBlPzogJ2NwdSd8J2dwdSd8J25wdSc7XG4gICAgbnVtVGhyZWFkcz86IG51bWJlcjtcbiAgICBwb3dlclByZWZlcmVuY2U/OiAnZGVmYXVsdCd8J2xvdy1wb3dlcid8J2hpZ2gtcGVyZm9ybWFuY2UnO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29yZU1MRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ2NvcmVtbCc7XG4gICAgLyoqXG4gICAgICogVGhlIGJpdCBmbGFncyBmb3IgQ29yZU1MIGV4ZWN1dGlvbiBwcm92aWRlci5cbiAgICAgKlxuICAgICAqIGBgYFxuICAgICAqIENPUkVNTF9GTEFHX1VTRV9DUFVfT05MWSA9IDB4MDAxXG4gICAgICogQ09SRU1MX0ZMQUdfRU5BQkxFX09OX1NVQkdSQVBIID0gMHgwMDJcbiAgICAgKiBDT1JFTUxfRkxBR19PTkxZX0VOQUJMRV9ERVZJQ0VfV0lUSF9BTkUgPSAweDAwNFxuICAgICAqIENPUkVNTF9GTEFHX09OTFlfQUxMT1dfU1RBVElDX0lOUFVUX1NIQVBFUyA9IDB4MDA4XG4gICAgICogQ09SRU1MX0ZMQUdfQ1JFQVRFX01MUFJPR1JBTSA9IDB4MDEwXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBTZWUgaW5jbHVkZS9vbm54cnVudGltZS9jb3JlL3Byb3ZpZGVycy9jb3JlbWwvY29yZW1sX3Byb3ZpZGVyX2ZhY3RvcnkuaCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogVGhpcyBmbGFnIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcpLlxuICAgICAqL1xuICAgIGNvcmVNbEZsYWdzPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgd2hldGhlciB0byB1c2UgQ1BVIG9ubHkgaW4gQ29yZU1MIEVQLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChyZWFjdC1uYXRpdmUpLlxuICAgICAqL1xuICAgIHVzZUNQVU9ubHk/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgd2hldGhlciB0byBlbmFibGUgQ29yZU1MIEVQIG9uIHN1YmdyYXBoLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChyZWFjdC1uYXRpdmUpLlxuICAgICAqL1xuICAgIGVuYWJsZU9uU3ViZ3JhcGg/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgd2hldGhlciB0byBvbmx5IGVuYWJsZSBDb3JlTUwgRVAgZm9yIEFwcGxlIGRldmljZXMgd2l0aCBBTkUgKEFwcGxlIE5ldXJhbCBFbmdpbmUpLlxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChyZWFjdC1uYXRpdmUpLlxuICAgICAqL1xuICAgIG9ubHlFbmFibGVEZXZpY2VXaXRoQU5FPzogYm9vbGVhbjtcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIE5uYXBpRXhlY3V0aW9uUHJvdmlkZXJPcHRpb24gZXh0ZW5kcyBFeGVjdXRpb25Qcm92aWRlck9wdGlvbiB7XG4gICAgcmVhZG9ubHkgbmFtZTogJ25uYXBpJztcbiAgICB1c2VGUDE2PzogYm9vbGVhbjtcbiAgICB1c2VOQ0hXPzogYm9vbGVhbjtcbiAgICBjcHVEaXNhYmxlZD86IGJvb2xlYW47XG4gICAgY3B1T25seT86IGJvb2xlYW47XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHJ1biBvcHRpb25zXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIGZvciBpbmZlcmVuY2UgcnVuIGJlaGF2aW9yXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIExvZyBzZXZlcml0eSBsZXZlbC4gU2VlXG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9vbm54cnVudGltZS9ibG9iL21haW4vaW5jbHVkZS9vbm54cnVudGltZS9jb3JlL2NvbW1vbi9sb2dnaW5nL3NldmVyaXR5LmhcbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBPTk5YUnVudGltZSAoTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUpIG9yIFdlYkFzc2VtYmx5IGJhY2tlbmRcbiAgICAgKi9cbiAgICBsb2dTZXZlcml0eUxldmVsPzogMHwxfDJ8M3w0O1xuXG4gICAgLyoqXG4gICAgICogTG9nIHZlcmJvc2l0eSBsZXZlbC5cbiAgICAgKlxuICAgICAqIFRoaXMgc2V0dGluZyBpcyBhdmFpbGFibGUgb25seSBpbiBXZWJBc3NlbWJseSBiYWNrZW5kLiBXaWxsIHN1cHBvcnQgTm9kZS5qcyBiaW5kaW5nIGFuZCByZWFjdC1uYXRpdmUgbGF0ZXJcbiAgICAgKi9cbiAgICBsb2dWZXJib3NpdHlMZXZlbD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRlcm1pbmF0ZSBhbGwgaW5jb21wbGV0ZSBPcnRSdW4gY2FsbHMgYXMgc29vbiBhcyBwb3NzaWJsZSBpZiB0cnVlXG4gICAgICpcbiAgICAgKiBUaGlzIHNldHRpbmcgaXMgYXZhaWxhYmxlIG9ubHkgaW4gV2ViQXNzZW1ibHkgYmFja2VuZC4gV2lsbCBzdXBwb3J0IE5vZGUuanMgYmluZGluZyBhbmQgcmVhY3QtbmF0aXZlIGxhdGVyXG4gICAgICovXG4gICAgdGVybWluYXRlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEEgdGFnIGZvciB0aGUgUnVuKCkgY2FsbHMgdXNpbmcgdGhpc1xuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIE9OTlhSdW50aW1lIChOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSkgb3IgV2ViQXNzZW1ibHkgYmFja2VuZFxuICAgICAqL1xuICAgIHRhZz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNldCBhIHNpbmdsZSBydW4gY29uZmlndXJhdGlvbiBlbnRyeS4gU2VlXG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9vbm54cnVudGltZS9ibG9iL21haW4vaW5jbHVkZS9vbm54cnVudGltZS9jb3JlL3Nlc3Npb24vXG4gICAgICogb25ueHJ1bnRpbWVfcnVuX29wdGlvbnNfY29uZmlnX2tleXMuaFxuICAgICAqXG4gICAgICogVGhpcyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBvbmx5IGluIFdlYkFzc2VtYmx5IGJhY2tlbmQuIFdpbGwgc3VwcG9ydCBOb2RlLmpzIGJpbmRpbmcgYW5kIHJlYWN0LW5hdGl2ZSBsYXRlclxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGBgYGpzXG4gICAgICogZXh0cmE6IHtcbiAgICAgKiAgIG1lbW9yeToge1xuICAgICAqICAgICBlbmFibGVfbWVtb3J5X2FyZW5hX3Nocmlua2FnZTogXCIxXCIsXG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4dHJhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiB2YWx1ZSBtZXRhZGF0YVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG4gIGludGVyZmFjZSBWYWx1ZU1ldGFkYXRhIHtcbiAgICAvLyBUQkRcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cbn1cblxuLyoqXG4gKiBSZXByZXNlbnQgYSBydW50aW1lIGluc3RhbmNlIG9mIGFuIE9OTlggbW9kZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5mZXJlbmNlU2Vzc2lvbiB7XG4gIC8vICNyZWdpb24gcnVuKClcblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgbW9kZWwgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgZ2l2ZW4gZmVlZHMgYW5kIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBmZWVkcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBpbnB1dC4gU2VlIHR5cGUgZGVzY3JpcHRpb24gb2YgYEluZmVyZW5jZVNlc3Npb24uSW5wdXRUeXBlYCBmb3IgZGV0YWlsLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsLiBBIHNldCBvZiBvcHRpb25zIHRoYXQgY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIG1vZGVsIGluZmVyZW5jZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBtYXAsIHdoaWNoIHVzZXMgb3V0cHV0IG5hbWVzIGFzIGtleXMgYW5kIE9ubnhWYWx1ZSBhcyBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICovXG4gIHJ1bihmZWVkczogSW5mZXJlbmNlU2Vzc2lvbi5GZWVkc1R5cGUsIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24uUmV0dXJuVHlwZT47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIG1vZGVsIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGdpdmVuIGZlZWRzLCBmZXRjaGVzIGFuZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gZmVlZHMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgaW5wdXQuIFNlZSB0eXBlIGRlc2NyaXB0aW9uIG9mIGBJbmZlcmVuY2VTZXNzaW9uLklucHV0VHlwZWAgZm9yIGRldGFpbC5cbiAgICogQHBhcmFtIGZldGNoZXMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb3V0cHV0LiBTZWUgdHlwZSBkZXNjcmlwdGlvbiBvZiBgSW5mZXJlbmNlU2Vzc2lvbi5PdXRwdXRUeXBlYCBmb3JcbiAgICogZGV0YWlsLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsLiBBIHNldCBvZiBvcHRpb25zIHRoYXQgY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIG1vZGVsIGluZmVyZW5jZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBtYXAsIHdoaWNoIHVzZXMgb3V0cHV0IG5hbWVzIGFzIGtleXMgYW5kIE9ubnhWYWx1ZSBhcyBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICovXG4gIHJ1bihmZWVkczogSW5mZXJlbmNlU2Vzc2lvbi5GZWVkc1R5cGUsIGZldGNoZXM6IEluZmVyZW5jZVNlc3Npb24uRmV0Y2hlc1R5cGUsXG4gICAgICBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uLlJldHVyblR5cGU+O1xuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHJlbGVhc2UoKVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlIHRoZSBpbmZlcmVuY2Ugc2Vzc2lvbiBhbmQgdGhlIHVuZGVybHlpbmcgcmVzb3VyY2VzLlxuICAgKi9cbiAgcmVsZWFzZSgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHByb2ZpbGluZ1xuXG4gIC8qKlxuICAgKiBTdGFydCBwcm9maWxpbmcuXG4gICAqL1xuICBzdGFydFByb2ZpbGluZygpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBFbmQgcHJvZmlsaW5nLlxuICAgKi9cbiAgZW5kUHJvZmlsaW5nKCk6IHZvaWQ7XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gbWV0YWRhdGFcblxuICAvKipcbiAgICogR2V0IGlucHV0IG5hbWVzIG9mIHRoZSBsb2FkZWQgbW9kZWwuXG4gICAqL1xuICByZWFkb25seSBpbnB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogR2V0IG91dHB1dCBuYW1lcyBvZiB0aGUgbG9hZGVkIG1vZGVsLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8vIC8qKlxuICAvLyAgKiBHZXQgaW5wdXQgbWV0YWRhdGEgb2YgdGhlIGxvYWRlZCBtb2RlbC5cbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IGlucHV0TWV0YWRhdGE6IFJlYWRvbmx5QXJyYXk8UmVhZG9ubHk8SW5mZXJlbmNlU2Vzc2lvbi5WYWx1ZU1ldGFkYXRhPj47XG5cbiAgLy8gLyoqXG4gIC8vICAqIEdldCBvdXRwdXQgbWV0YWRhdGEgb2YgdGhlIGxvYWRlZCBtb2RlbC5cbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IG91dHB1dE1ldGFkYXRhOiBSZWFkb25seUFycmF5PFJlYWRvbmx5PEluZmVyZW5jZVNlc3Npb24uVmFsdWVNZXRhZGF0YT4+O1xuXG4gIC8vICNlbmRyZWdpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmZlcmVuY2VTZXNzaW9uRmFjdG9yeSB7XG4gIC8vICNyZWdpb24gY3JlYXRlKClcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluZmVyZW5jZSBzZXNzaW9uIGFuZCBsb2FkIG1vZGVsIGFzeW5jaHJvbm91c2x5IGZyb20gYW4gT05OWCBtb2RlbCBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gdXJpIC0gVGhlIFVSSSBvciBmaWxlIHBhdGggb2YgdGhlIG1vZGVsIHRvIGxvYWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBpbmZlcmVuY2Ugc2Vzc2lvbi5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gSW5mZXJlbmNlU2Vzc2lvbiBvYmplY3QuXG4gICAqL1xuICBjcmVhdGUodXJpOiBzdHJpbmcsIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluZmVyZW5jZSBzZXNzaW9uIGFuZCBsb2FkIG1vZGVsIGFzeW5jaHJvbm91c2x5IGZyb20gYW4gYXJyYXkgYnVmZXIuXG4gICAqXG4gICAqIEBwYXJhbSBidWZmZXIgLSBBbiBBcnJheUJ1ZmZlciByZXByZXNlbnRhdGlvbiBvZiBhbiBPTk5YIG1vZGVsLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHNwZWNpZnkgY29uZmlndXJhdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcgaW5mZXJlbmNlIHNlc3Npb24uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIEluZmVyZW5jZVNlc3Npb24gb2JqZWN0LlxuICAgKi9cbiAgY3JlYXRlKGJ1ZmZlcjogQXJyYXlCdWZmZXJMaWtlLCBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5TZXNzaW9uT3B0aW9ucyk6IFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbmZlcmVuY2Ugc2Vzc2lvbiBhbmQgbG9hZCBtb2RlbCBhc3luY2hyb25vdXNseSBmcm9tIHNlZ21lbnQgb2YgYW4gYXJyYXkgYnVmZXIuXG4gICAqXG4gICAqIEBwYXJhbSBidWZmZXIgLSBBbiBBcnJheUJ1ZmZlciByZXByZXNlbnRhdGlvbiBvZiBhbiBPTk5YIG1vZGVsLlxuICAgKiBAcGFyYW0gYnl0ZU9mZnNldCAtIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHNwZWNpZmllZCBwb3J0aW9uIG9mIHRoZSBhcnJheSBidWZmZXIuXG4gICAqIEBwYXJhbSBieXRlTGVuZ3RoIC0gVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgYXJyYXkgYnVmZmVyLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHNwZWNpZnkgY29uZmlndXJhdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcgaW5mZXJlbmNlIHNlc3Npb24uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIEluZmVyZW5jZVNlc3Npb24gb2JqZWN0LlxuICAgKi9cbiAgY3JlYXRlKGJ1ZmZlcjogQXJyYXlCdWZmZXJMaWtlLCBieXRlT2Zmc2V0OiBudW1iZXIsIGJ5dGVMZW5ndGg/OiBudW1iZXIsIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTpcbiAgICAgIFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbmZlcmVuY2Ugc2Vzc2lvbiBhbmQgbG9hZCBtb2RlbCBhc3luY2hyb25vdXNseSBmcm9tIGEgVWludDhBcnJheS5cbiAgICpcbiAgICogQHBhcmFtIGJ1ZmZlciAtIEEgVWludDhBcnJheSByZXByZXNlbnRhdGlvbiBvZiBhbiBPTk5YIG1vZGVsLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHNwZWNpZnkgY29uZmlndXJhdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcgaW5mZXJlbmNlIHNlc3Npb24uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIEluZmVyZW5jZVNlc3Npb24gb2JqZWN0LlxuICAgKi9cbiAgY3JlYXRlKGJ1ZmZlcjogVWludDhBcnJheSwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24+O1xuXG4gIC8vICNlbmRyZWdpb25cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IEluZmVyZW5jZVNlc3Npb246IEluZmVyZW5jZVNlc3Npb25GYWN0b3J5ID0gSW5mZXJlbmNlU2Vzc2lvbkltcGw7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7T3B0aW9uc0Zvcm1hdCwgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzLCBPcHRpb25zVGVuc29yTGF5b3V0fSBmcm9tICcuL3RlbnNvci1mYWN0b3J5LmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JUb0RhdGFVcmxPcHRpb25zIGV4dGVuZHMgT3B0aW9uc1RlbnNvckxheW91dCwgT3B0aW9uc0Zvcm1hdCwgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yVG9JbWFnZURhdGFPcHRpb25zIGV4dGVuZHMgT3B0aW9uc1RlbnNvckxheW91dCwgT3B0aW9uc0Zvcm1hdCwgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2lvblV0aWxzIHtcbiAgLyoqXG4gICAqIGNyZWF0ZXMgYSBEYXRhVVJMIGluc3RhbmNlIGZyb20gdGVuc29yXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHJlcHJlc2VudGluZyBvcHRpb25zIGZvciBjcmVhdGluZyBhIERhdGFVUkwgaW5zdGFuY2UgZnJvbSB0aGUgdGVuc29yLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGRlZmF1bHQgc2V0dGluZ3Mgd2lsbCBiZSBhcHBsaWVkOlxuICAgKiAtIGBmb3JtYXRgOiBgJ1JHQidgXG4gICAqIC0gYHRlbnNvckxheW91dGA6IGAnTkNIVydgXG4gICAqIEByZXR1cm5zIGEgRGF0YVVSTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBpbWFnZSBjb252ZXJ0ZWQgZnJvbSB0ZW5zb3IgZGF0YVxuICAgKi9cbiAgdG9EYXRhVVJMKG9wdGlvbnM/OiBUZW5zb3JUb0RhdGFVcmxPcHRpb25zKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBjcmVhdGVzIGFuIEltYWdlRGF0YSBpbnN0YW5jZSBmcm9tIHRlbnNvclxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIG9iamVjdCByZXByZXNlbnRpbmcgb3B0aW9ucyBmb3IgY3JlYXRpbmcgYW4gSW1hZ2VEYXRhIGluc3RhbmNlIGZyb20gdGhlIHRlbnNvci5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBkZWZhdWx0IHNldHRpbmdzIHdpbGwgYmUgYXBwbGllZDpcbiAgICogLSBgZm9ybWF0YDogYCdSR0InYFxuICAgKiAtIGB0ZW5zb3JMYXlvdXRgOiBgJ05DSFcnYFxuICAgKiBAcmV0dXJucyBhbiBJbWFnZURhdGEgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSBpbWFnZSBjb252ZXJ0ZWQgZnJvbSB0ZW5zb3IgZGF0YVxuICAgKi9cbiAgdG9JbWFnZURhdGEob3B0aW9ucz86IFRlbnNvclRvSW1hZ2VEYXRhT3B0aW9ucyk6IEltYWdlRGF0YTtcbn1cbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3IsIFR5cGVkVGVuc29yfSBmcm9tICcuL3RlbnNvci5qcyc7XG5cbmV4cG9ydCB0eXBlIEltYWdlRm9ybWF0ID0gJ1JHQid8J1JHQkEnfCdCR1InfCdSQkcnO1xuZXhwb3J0IHR5cGUgSW1hZ2VUZW5zb3JMYXlvdXQgPSAnTkhXQyd8J05DSFcnO1xuXG4vLyB0aGUgZm9sbG93aW5nIHJlZ2lvbiBjb250YWlucyB0eXBlIGRlZmluaXRpb25zIGZvciBjb25zdHJ1Y3RpbmcgdGVuc29yIGZyb20gYSBzcGVjaWZpYyBsb2NhdGlvbi5cblxuLy8gI3JlZ2lvbiB0eXBlcyBmb3IgY29uc3RydWN0aW5nIGEgdGVuc29yIGZyb20gYSBzcGVjaWZpYyBsb2NhdGlvblxuXG4vKipcbiAqIHJlcHJlc2VudCBjb21tb24gcHJvcGVydGllcyBvZiB0aGUgcGFyYW1ldGVyIGZvciBjb25zdHJ1Y3RpbmcgYSB0ZW5zb3IgZnJvbSBhIHNwZWNpZmljIGxvY2F0aW9uLlxuICovXG5pbnRlcmZhY2UgQ29tbW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+IGV4dGVuZHMgUGljazxUZW5zb3IsICdkaW1zJz4ge1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgZGF0YSB0eXBlIG9mIHRoZSB0ZW5zb3IuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBUO1xufVxuXG4vKipcbiAqIHJlcHJlc2VudCB0aGUgcGFyYW1ldGVyIGZvciBjb25zdHJ1Y3RpbmcgYSB0ZW5zb3IgZnJvbSBhIEdQVSByZXNvdXJjZS5cbiAqL1xuaW50ZXJmYWNlIEdwdVJlc291cmNlQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQgZXh0ZW5kcyBUZW5zb3IuVHlwZT4ge1xuICAvKipcbiAgICogYW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZG93bmxvYWQgZGF0YSBmcm9tIEdQVSB0byBDUFUuXG4gICAqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIHRlbnNvciB0cmVhdCB0aGUgR1BVIGRhdGEgYXMgZXh0ZXJuYWwgcmVzb3VyY2UuXG4gICAqL1xuICBkb3dubG9hZD8oKTogUHJvbWlzZTxUZW5zb3IuRGF0YVR5cGVNYXBbVF0+O1xuXG4gIC8qKlxuICAgKiBhbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHRlbnNvciBpcyBkaXNwb3NlZC5cbiAgICpcbiAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgdGVuc29yIHRyZWF0IHRoZSBHUFUgZGF0YSBhcyBleHRlcm5hbCByZXNvdXJjZS5cbiAgICovXG4gIGRpc3Bvc2U/KCk6IHZvaWQ7XG59XG5cbi8qKlxuICogcmVwcmVzZW50IHRoZSBwYXJhbWV0ZXIgZm9yIGNvbnN0cnVjdGluZyBhIHRlbnNvciBmcm9tIGEgcGlubmVkIENQVSBidWZmZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcHVQaW5uZWRDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VCBleHRlbmRzIFRlbnNvci5DcHVQaW5uZWREYXRhVHlwZXMgPSBUZW5zb3IuQ3B1UGlubmVkRGF0YVR5cGVzPiBleHRlbmRzXG4gICAgQ29tbW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+IHtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhIHRvIGJlICdjcHUtcGlubmVkJy5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uOiAnY3B1LXBpbm5lZCc7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBDUFUgcGlubmVkIGJ1ZmZlciB0aGF0IGhvbGRzIHRoZSB0ZW5zb3IgZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE6IFRlbnNvci5EYXRhVHlwZU1hcFtUXTtcbn1cblxuLyoqXG4gKiByZXByZXNlbnQgdGhlIHBhcmFtZXRlciBmb3IgY29uc3RydWN0aW5nIGEgdGVuc29yIGZyb20gYSBXZWJHTCB0ZXh0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dHVyZUNvbnN0cnVjdG9yUGFyYW1ldGVyczxUIGV4dGVuZHMgVGVuc29yLlRleHR1cmVEYXRhVHlwZXMgPSBUZW5zb3IuVGV4dHVyZURhdGFUeXBlcz4gZXh0ZW5kc1xuICAgIENvbW1vbkNvbnN0cnVjdG9yUGFyYW1ldGVyczxUPiwgR3B1UmVzb3VyY2VDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4ge1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGEgdG8gYmUgJ3RleHR1cmUnLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb246ICd0ZXh0dXJlJztcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIFdlYkdMIHRleHR1cmUgdGhhdCBob2xkcyB0aGUgdGVuc29yIGRhdGEuXG4gICAqL1xuICByZWFkb25seSB0ZXh0dXJlOiBUZW5zb3IuVGV4dHVyZVR5cGU7XG59XG5cbi8qKlxuICogcmVwcmVzZW50IHRoZSBwYXJhbWV0ZXIgZm9yIGNvbnN0cnVjdGluZyBhIHRlbnNvciBmcm9tIGEgV2ViR1BVIGJ1ZmZlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdwdUJ1ZmZlckNvbnN0cnVjdG9yUGFyYW1ldGVyczxUIGV4dGVuZHMgVGVuc29yLkdwdUJ1ZmZlckRhdGFUeXBlcyA9IFRlbnNvci5HcHVCdWZmZXJEYXRhVHlwZXM+IGV4dGVuZHNcbiAgICBDb21tb25Db25zdHJ1Y3RvclBhcmFtZXRlcnM8VD4sIEdwdVJlc291cmNlQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+IHtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhIHRvIGJlICdncHUtYnVmZmVyJy5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uOiAnZ3B1LWJ1ZmZlcic7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBXZWJHUFUgYnVmZmVyIHRoYXQgaG9sZHMgdGhlIHRlbnNvciBkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgZ3B1QnVmZmVyOiBUZW5zb3IuR3B1QnVmZmVyVHlwZTtcbn1cblxuLy8gI2VuZHJlZ2lvblxuXG4vLyB0aGUgZm9sbG93aW5nIHJlZ2lvbiBjb250YWlucyB0eXBlIGRlZmluaXRpb25zIG9mIGVhY2ggaW5kaXZpZHVhbCBvcHRpb25zLlxuLy8gdGhlIHRlbnNvciBmYWN0b3J5IGZ1bmN0aW9ucyB1c2UgYSBjb21wb3NpdGlvbiBvZiB0aG9zZSBvcHRpb25zIGFzIHRoZSBwYXJhbWV0ZXIgdHlwZS5cblxuLy8gI3JlZ2lvbiBPcHRpb25zIGZpZWxkc1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNGb3JtYXQge1xuICAvKipcbiAgICogRGVzY3JpYmVzIHRoZSBpbWFnZSBmb3JtYXQgcmVwcmVzZW50ZWQgaW4gUkdCQSBjb2xvciBzcGFjZS5cbiAgICovXG4gIGZvcm1hdD86IEltYWdlRm9ybWF0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNUZW5zb3JGb3JtYXQge1xuICAvKipcbiAgICogRGVzY3JpYmVzIHRoZSBpbWFnZSBmb3JtYXQgb2YgdGhlIHRlbnNvci5cbiAgICpcbiAgICogTk9URTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBvcHRpb24gJ2Zvcm1hdCcuIFdoaWxlIG9wdGlvbiAnZm9ybWF0JyByZXByZXNlbnRzIHRoZSBvcmlnaW5hbCBpbWFnZSwgJ3RlbnNvckZvcm1hdCdcbiAgICogcmVwcmVzZW50cyB0aGUgdGFyZ2V0IGZvcm1hdCBvZiB0aGUgdGVuc29yLiBBIHRyYW5zcG9zZSB3aWxsIGJlIHBlcmZvcm1lZCBpZiB0aGV5IGFyZSBkaWZmZXJlbnQuXG4gICAqL1xuICB0ZW5zb3JGb3JtYXQ/OiBJbWFnZUZvcm1hdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zVGVuc29yRGF0YVR5cGUge1xuICAvKipcbiAgICogRGVzY3JpYmVzIHRoZSBkYXRhIHR5cGUgb2YgdGhlIHRlbnNvci5cbiAgICovXG4gIGRhdGFUeXBlPzogJ2Zsb2F0MzInfCd1aW50OCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc1RlbnNvckxheW91dCB7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIHRlbnNvciBsYXlvdXQgd2hlbiByZXByZXNlbnRpbmcgZGF0YSBvZiBvbmUgb3IgbW9yZSBpbWFnZShzKS5cbiAgICovXG4gIHRlbnNvckxheW91dD86IEltYWdlVGVuc29yTGF5b3V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNEaW1lbnNpb25zIHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgaW1hZ2UgaGVpZ2h0IGluIHBpeGVsXG4gICAqL1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGltYWdlIHdpZHRoIGluIHBpeGVsXG4gICAqL1xuICB3aWR0aD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25SZXNpemVkRGltZW5zaW9ucyB7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIHJlc2l6ZWQgaGVpZ2h0LiBJZiBvbWl0dGVkLCBvcmlnaW5hbCBoZWlnaHQgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcmVzaXplZEhlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyByZXNpemVkIHdpZHRoIC0gY2FuIGJlIGFjY2Vzc2VkIHZpYSB0ZW5zb3IgZGltZW5zaW9ucyBhcyB3ZWxsXG4gICAqL1xuICByZXNpemVkV2lkdGg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uc05vcm1hbGl6YXRpb25QYXJhbWV0ZXJzIHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyBub3JtYWxpemF0aW9uIHBhcmFtZXRlcnMgd2hlbiBwcmVwcm9jZXNzaW5nIHRoZSBpbWFnZSBhcyBtb2RlbCBpbnB1dC5cbiAgICpcbiAgICogRGF0YSBlbGVtZW50IGFyZSByYW5nZWQgZnJvbSAwIHRvIDI1NS5cbiAgICovXG4gIG5vcm0/OiB7XG4gICAgLyoqXG4gICAgICogVGhlICdiaWFzJyB2YWx1ZSBmb3IgaW1hZ2Ugbm9ybWFsaXphdGlvbi5cbiAgICAgKiAtIElmIG9taXR0ZWQsIHVzZSBkZWZhdWx0IHZhbHVlIDAuXG4gICAgICogLSBJZiBpdCdzIGEgc2luZ2xlIG51bWJlciwgYXBwbHkgdG8gZWFjaCBjaGFubmVsXG4gICAgICogLSBJZiBpdCdzIGFuIGFycmF5IG9mIDMgb3IgNCBudW1iZXJzLCBhcHBseSBlbGVtZW50LXdpc2UuIE51bWJlciBvZiBlbGVtZW50cyBuZWVkIHRvIG1hdGNoIHRoZSBudW1iZXIgb2YgY2hhbm5lbHNcbiAgICAgKiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgaW1hZ2UgZm9ybWF0XG4gICAgICovXG4gICAgYmlhcz86IG51bWJlcnxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgLyoqXG4gICAgICogVGhlICdtZWFuJyB2YWx1ZSBmb3IgaW1hZ2Ugbm9ybWFsaXphdGlvbi5cbiAgICAgKiAtIElmIG9taXR0ZWQsIHVzZSBkZWZhdWx0IHZhbHVlIDI1NS5cbiAgICAgKiAtIElmIGl0J3MgYSBzaW5nbGUgbnVtYmVyLCBhcHBseSB0byBlYWNoIGNoYW5uZWxcbiAgICAgKiAtIElmIGl0J3MgYW4gYXJyYXkgb2YgMyBvciA0IG51bWJlcnMsIGFwcGx5IGVsZW1lbnQtd2lzZS4gTnVtYmVyIG9mIGVsZW1lbnRzIG5lZWQgdG8gbWF0Y2ggdGhlIG51bWJlciBvZiBjaGFubmVsc1xuICAgICAqIGZvciB0aGUgY29ycmVzcG9uZGluZyBpbWFnZSBmb3JtYXRcbiAgICAgKi9cbiAgICBtZWFuPzogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIH07XG59XG5cbi8vICNlbmRyZWdpb25cblxuLy8gI3JlZ2lvbiBPcHRpb25zIGNvbXBvc2l0aW9uXG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRnJvbUltYWdlRGF0YU9wdGlvbnMgZXh0ZW5kcyBPcHRpb25SZXNpemVkRGltZW5zaW9ucywgT3B0aW9uc1RlbnNvckZvcm1hdCwgT3B0aW9uc1RlbnNvckxheW91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zVGVuc29yRGF0YVR5cGUsIE9wdGlvbnNOb3JtYWxpemF0aW9uUGFyYW1ldGVycyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvckZyb21JbWFnZUVsZW1lbnRPcHRpb25zIGV4dGVuZHMgT3B0aW9uUmVzaXplZERpbWVuc2lvbnMsIE9wdGlvbnNUZW5zb3JGb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uc1RlbnNvckxheW91dCwgT3B0aW9uc1RlbnNvckRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNOb3JtYWxpemF0aW9uUGFyYW1ldGVycyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvckZyb21VcmxPcHRpb25zIGV4dGVuZHMgT3B0aW9uc0RpbWVuc2lvbnMsIE9wdGlvblJlc2l6ZWREaW1lbnNpb25zLCBPcHRpb25zVGVuc29yRm9ybWF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNUZW5zb3JMYXlvdXQsIE9wdGlvbnNUZW5zb3JEYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zTm9ybWFsaXphdGlvblBhcmFtZXRlcnMge31cblxuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JGcm9tSW1hZ2VCaXRtYXBPcHRpb25zIGV4dGVuZHMgT3B0aW9uUmVzaXplZERpbWVuc2lvbnMsIE9wdGlvbnNUZW5zb3JGb3JtYXQsIE9wdGlvbnNUZW5zb3JMYXlvdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zVGVuc29yRGF0YVR5cGUsIE9wdGlvbnNOb3JtYWxpemF0aW9uUGFyYW1ldGVycyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvckZyb21UZXh0dXJlT3B0aW9uczxUIGV4dGVuZHMgVGVuc29yLlRleHR1cmVEYXRhVHlwZXM+IGV4dGVuZHNcbiAgICBSZXF1aXJlZDxPcHRpb25zRGltZW5zaW9ucz4sIE9wdGlvbnNGb3JtYXQsIEdwdVJlc291cmNlQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFQ+LyogVE9ETzogYWRkIG1vcmUgKi8ge31cblxuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JGcm9tR3B1QnVmZmVyT3B0aW9uczxUIGV4dGVuZHMgVGVuc29yLkdwdUJ1ZmZlckRhdGFUeXBlcz4gZXh0ZW5kc1xuICAgIFBpY2s8VGVuc29yLCAnZGltcyc+LCBHcHVSZXNvdXJjZUNvbnN0cnVjdG9yUGFyYW1ldGVyczxUPiB7XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgdGVuc29yLlxuICAgKi9cbiAgZGF0YVR5cGU/OiBUO1xufVxuXG4vLyAjZW5kcmVnaW9uXG5cbi8qKlxuICogdHlwZSBUZW5zb3JGYWN0b3J5IGRlZmluZXMgdGhlIGZhY3RvcnkgZnVuY3Rpb25zIG9mICdUZW5zb3InIHRvIGNyZWF0ZSB0ZW5zb3IgaW5zdGFuY2VzIGZyb20gZXhpc3RpbmcgZGF0YSBvclxuICogcmVzb3VyY2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvckZhY3Rvcnkge1xuICAvKipcbiAgICogY3JlYXRlIGEgdGVuc29yIGZyb20gYW4gSW1hZ2VEYXRhIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0gaW1hZ2VEYXRhIC0gdGhlIEltYWdlRGF0YSBvYmplY3QgdG8gY3JlYXRlIHRlbnNvciBmcm9tXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHJlcHJlc2VudGluZyBvcHRpb25zIGZvciBjcmVhdGluZyB0ZW5zb3IgZnJvbSBJbWFnZURhdGEuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQ6XG4gICAqIC0gYHRlbnNvckZvcm1hdGA6IGAnUkdCJ2BcbiAgICogLSBgdGVuc29yTGF5b3V0YDogYCdOQ0hXJ2BcbiAgICogLSBgZGF0YVR5cGVgOiBgJ2Zsb2F0MzInYFxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHRlbnNvciBvYmplY3RcbiAgICovXG4gIGZyb21JbWFnZShpbWFnZURhdGE6IEltYWdlRGF0YSwgb3B0aW9ucz86IFRlbnNvckZyb21JbWFnZURhdGFPcHRpb25zKTpcbiAgICAgIFByb21pc2U8VHlwZWRUZW5zb3I8J2Zsb2F0MzInPnxUeXBlZFRlbnNvcjwndWludDgnPj47XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIHRlbnNvciBmcm9tIGEgSFRNTEltYWdlRWxlbWVudCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIGltYWdlRWxlbWVudCAtIHRoZSBIVE1MSW1hZ2VFbGVtZW50IG9iamVjdCB0byBjcmVhdGUgdGVuc29yIGZyb21cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25hbCBvYmplY3QgcmVwcmVzZW50aW5nIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRlbnNvciBmcm9tIEhUTUxJbWFnZUVsZW1lbnQuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQ6XG4gICAqIC0gYHRlbnNvckZvcm1hdGA6IGAnUkdCJ2BcbiAgICogLSBgdGVuc29yTGF5b3V0YDogYCdOQ0hXJ2BcbiAgICogLSBgZGF0YVR5cGVgOiBgJ2Zsb2F0MzInYFxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHRlbnNvciBvYmplY3RcbiAgICovXG4gIGZyb21JbWFnZShpbWFnZUVsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQsIG9wdGlvbnM/OiBUZW5zb3JGcm9tSW1hZ2VFbGVtZW50T3B0aW9ucyk6XG4gICAgICBQcm9taXNlPFR5cGVkVGVuc29yPCdmbG9hdDMyJz58VHlwZWRUZW5zb3I8J3VpbnQ4Jz4+O1xuXG4gIC8qKlxuICAgKiBjcmVhdGUgYSB0ZW5zb3IgZnJvbSBVUkxcbiAgICpcbiAgICogQHBhcmFtIHVybFNvdXJjZSAtIGEgc3RyaW5nIGFzIGEgVVJMIHRvIHRoZSBpbWFnZSBvciBhIGRhdGEgVVJMIGNvbnRhaW5pbmcgdGhlIGltYWdlIGRhdGEuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHJlcHJlc2VudGluZyBvcHRpb25zIGZvciBjcmVhdGluZyB0ZW5zb3IgZnJvbSBVUkwuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzZXR0aW5ncyB3aWxsIGJlIGFwcGxpZWQ6XG4gICAqIC0gYHRlbnNvckZvcm1hdGA6IGAnUkdCJ2BcbiAgICogLSBgdGVuc29yTGF5b3V0YDogYCdOQ0hXJ2BcbiAgICogLSBgZGF0YVR5cGVgOiBgJ2Zsb2F0MzInYFxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHRlbnNvciBvYmplY3RcbiAgICovXG4gIGZyb21JbWFnZSh1cmxTb3VyY2U6IHN0cmluZywgb3B0aW9ucz86IFRlbnNvckZyb21VcmxPcHRpb25zKTogUHJvbWlzZTxUeXBlZFRlbnNvcjwnZmxvYXQzMic+fFR5cGVkVGVuc29yPCd1aW50OCc+PjtcblxuICAvKipcbiAgICogY3JlYXRlIGEgdGVuc29yIGZyb20gYW4gSW1hZ2VCaXRtYXAgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSBiaXRtYXAgLSB0aGUgSW1hZ2VCaXRtYXAgb2JqZWN0IHRvIGNyZWF0ZSB0ZW5zb3IgZnJvbVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIG9iamVjdCByZXByZXNlbnRpbmcgb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGVuc29yIGZyb20gVVJMLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGRlZmF1bHQgc2V0dGluZ3Mgd2lsbCBiZSBhcHBsaWVkOlxuICAgKiAtIGB0ZW5zb3JGb3JtYXRgOiBgJ1JHQidgXG4gICAqIC0gYHRlbnNvckxheW91dGA6IGAnTkNIVydgXG4gICAqIC0gYGRhdGFUeXBlYDogYCdmbG9hdDMyJ2BcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSB0ZW5zb3Igb2JqZWN0XG4gICAqL1xuICBmcm9tSW1hZ2UoYml0bWFwOiBJbWFnZUJpdG1hcCwgb3B0aW9uczogVGVuc29yRnJvbUltYWdlQml0bWFwT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPFR5cGVkVGVuc29yPCdmbG9hdDMyJz58VHlwZWRUZW5zb3I8J3VpbnQ4Jz4+O1xuXG4gIC8qKlxuICAgKiBjcmVhdGUgYSB0ZW5zb3IgZnJvbSBhIFdlYkdMIHRleHR1cmVcbiAgICpcbiAgICogQHBhcmFtIHRleHR1cmUgLSB0aGUgV2ViR0xUZXh0dXJlIG9iamVjdCB0byBjcmVhdGUgdGVuc29yIGZyb21cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25hbCBvYmplY3QgcmVwcmVzZW50aW5nIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRlbnNvciBmcm9tIFdlYkdMIHRleHR1cmUuXG4gICAqXG4gICAqIFRoZSBvcHRpb25zIGluY2x1ZGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqIC0gYHdpZHRoYDogdGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlLiBSZXF1aXJlZC5cbiAgICogLSBgaGVpZ2h0YDogdGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZS4gUmVxdWlyZWQuXG4gICAqIC0gYGZvcm1hdGA6IHRoZSBmb3JtYXQgb2YgdGhlIHRleHR1cmUuIElmIG9taXR0ZWQsIGFzc3VtZSAnUkdCQScuXG4gICAqIC0gYGRvd25sb2FkYDogYW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gZG93bmxvYWQgdGhlIHRlbnNvciBkYXRhIGZyb20gR1BVIHRvIENQVS4gSWYgb21pdHRlZCwgdGhlIEdQVSBkYXRhXG4gICAqIHdpbGwgbm90IGJlIGFibGUgdG8gZG93bmxvYWQuIFVzdWFsbHksIHRoaXMgaXMgcHJvdmlkZWQgYnkgYSBHUFUgYmFja2VuZCBmb3IgdGhlIGluZmVyZW5jZSBvdXRwdXRzLiBVc2VycyBkb24ndFxuICAgKiBuZWVkIHRvIHByb3ZpZGUgdGhpcyBmdW5jdGlvbi5cbiAgICogLSBgZGlzcG9zZWA6IGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGRpc3Bvc2UgdGhlIHRlbnNvciBkYXRhIG9uIEdQVS4gSWYgb21pdHRlZCwgdGhlIEdQVSBkYXRhIHdpbGwgbm90IGJlIGRpc3Bvc2VkLlxuICAgKiBVc3VhbGx5LCB0aGlzIGlzIHByb3ZpZGVkIGJ5IGEgR1BVIGJhY2tlbmQgZm9yIHRoZSBpbmZlcmVuY2Ugb3V0cHV0cy4gVXNlcnMgZG9uJ3QgbmVlZCB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIGEgdGVuc29yIG9iamVjdFxuICAgKi9cbiAgZnJvbVRleHR1cmU8VCBleHRlbmRzIFRlbnNvci5UZXh0dXJlRGF0YVR5cGVzID0gJ2Zsb2F0MzInPihcbiAgICAgIHRleHR1cmU6IFRlbnNvci5UZXh0dXJlVHlwZSwgb3B0aW9uczogVGVuc29yRnJvbVRleHR1cmVPcHRpb25zPFQ+KTogVHlwZWRUZW5zb3I8J2Zsb2F0MzInPjtcblxuICAvKipcbiAgICogY3JlYXRlIGEgdGVuc29yIGZyb20gYSBXZWJHUFUgYnVmZmVyXG4gICAqXG4gICAqIEBwYXJhbSBidWZmZXIgLSB0aGUgR1BVQnVmZmVyIG9iamVjdCB0byBjcmVhdGUgdGVuc29yIGZyb21cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvcHRpb25hbCBvYmplY3QgcmVwcmVzZW50aW5nIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRlbnNvciBmcm9tIFdlYkdQVSBidWZmZXIuXG4gICAqXG4gICAqIFRoZSBvcHRpb25zIGluY2x1ZGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqIC0gYGRhdGFUeXBlYDogdGhlIGRhdGEgdHlwZSBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhc3N1bWUgJ2Zsb2F0MzInLlxuICAgKiAtIGBkaW1zYDogdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBSZXF1aXJlZC5cbiAgICogLSBgZG93bmxvYWRgOiBhbiBvcHRpb25hbCBmdW5jdGlvbiB0byBkb3dubG9hZCB0aGUgdGVuc29yIGRhdGEgZnJvbSBHUFUgdG8gQ1BVLiBJZiBvbWl0dGVkLCB0aGUgR1BVIGRhdGFcbiAgICogd2lsbCBub3QgYmUgYWJsZSB0byBkb3dubG9hZC4gVXN1YWxseSwgdGhpcyBpcyBwcm92aWRlZCBieSBhIEdQVSBiYWNrZW5kIGZvciB0aGUgaW5mZXJlbmNlIG91dHB1dHMuIFVzZXJzIGRvbid0XG4gICAqIG5lZWQgdG8gcHJvdmlkZSB0aGlzIGZ1bmN0aW9uLlxuICAgKiAtIGBkaXNwb3NlYDogYW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gZGlzcG9zZSB0aGUgdGVuc29yIGRhdGEgb24gR1BVLiBJZiBvbWl0dGVkLCB0aGUgR1BVIGRhdGEgd2lsbCBub3QgYmUgZGlzcG9zZWQuXG4gICAqIFVzdWFsbHksIHRoaXMgaXMgcHJvdmlkZWQgYnkgYSBHUFUgYmFja2VuZCBmb3IgdGhlIGluZmVyZW5jZSBvdXRwdXRzLiBVc2VycyBkb24ndCBuZWVkIHRvIHByb3ZpZGUgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgYSB0ZW5zb3Igb2JqZWN0XG4gICAqL1xuICBmcm9tR3B1QnVmZmVyPFQgZXh0ZW5kcyBUZW5zb3IuR3B1QnVmZmVyRGF0YVR5cGVzPihcbiAgICAgIGJ1ZmZlcjogVGVuc29yLkdwdUJ1ZmZlclR5cGUsIG9wdGlvbnM6IFRlbnNvckZyb21HcHVCdWZmZXJPcHRpb25zPFQ+KTogVHlwZWRUZW5zb3I8VD47XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIHRlbnNvciBmcm9tIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIuIFRoZSBidWZmZXIgd2lsbCBiZSB1c2VkIGFzIGEgcGlubmVkIGJ1ZmZlci5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSB0aGUgdGVuc29yIGVsZW1lbnQgdHlwZS5cbiAgICogQHBhcmFtIGJ1ZmZlciAtIGEgVHlwZWRBcnJheSBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlLlxuICAgKiBAcGFyYW0gZGltcyAtIHNwZWNpZnkgdGhlIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLiBJZiBvbWl0dGVkLCBhIDEtRCB0ZW5zb3IgaXMgYXNzdW1lZC5cbiAgICpcbiAgICogQHJldHVybnMgYSB0ZW5zb3Igb2JqZWN0XG4gICAqL1xuICBmcm9tUGlubmVkQnVmZmVyPFQgZXh0ZW5kcyBFeGNsdWRlPFRlbnNvci5UeXBlLCAnc3RyaW5nJz4+KFxuICAgICAgdHlwZTogVCwgYnVmZmVyOiBUZW5zb3IuRGF0YVR5cGVNYXBbVF0sIGRpbXM/OiByZWFkb25seSBudW1iZXJbXSk6IFR5cGVkVGVuc29yPFQ+O1xufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG4vKipcbiAqIEEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBhIGZpbGUncyBVUkwgb3IgcGF0aC5cbiAqXG4gKiBQYXRoIGlzIHZhaWxhYmxlIG9ubHkgaW4gb25ueHJ1bnRpbWUtbm9kZSBvciBvbm54cnVudGltZS13ZWIgcnVubmluZyBpbiBOb2RlLmpzLlxuICovXG5leHBvcnQgdHlwZSBGaWxlVXJsT3JQYXRoID0gc3RyaW5nO1xuXG4vKipcbiAqIEEgQmxvYiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgZmlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgRmlsZUJsb2IgPSBCbG9iO1xuXG4vKipcbiAqIEEgVWludDhBcnJheSwgQXJyYXlCdWZmZXIgb3IgU2hhcmVkQXJyYXlCdWZmZXIgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIGZpbGUgY29udGVudC5cbiAqXG4gKiBXaGVuIGl0IGlzIGFuIEFycmF5QnVmZmVyIG9yIFNoYXJlZEFycmF5QnVmZmVyLCB0aGUgd2hvbGUgYnVmZmVyIGlzIGFzc3VtZWQgdG8gYmUgdGhlIGZpbGUgY29udGVudC5cbiAqL1xuZXhwb3J0IHR5cGUgRmlsZURhdGEgPSBVaW50OEFycmF5fEFycmF5QnVmZmVyTGlrZTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZmlsZSB0aGF0IGNhbiBiZSBsb2FkZWQgYnkgdGhlIE9OTlggUnVudGltZSBKYXZhU2NyaXB0IEFQSS5cbiAqL1xuZXhwb3J0IHR5cGUgRmlsZVR5cGUgPSBGaWxlVXJsT3JQYXRofEZpbGVCbG9ifEZpbGVEYXRhO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgZGF0YSBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVybmFsRGF0YUZpbGVEZXNjcmlwdGlvbiB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBleHRlcm5hbCBkYXRhIGZpbGUuXG4gICAqL1xuICBkYXRhOiBGaWxlVHlwZTtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGZpbGUgcGF0aC5cbiAgICovXG4gIHBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGV4dGVybmFsIGRhdGEgZmlsZS5cbiAqXG4gKiBXaGVuIHVzaW5nIGEgc3RyaW5nLCBpdCBzaG91bGQgYmUgYSBmaWxlIFVSTCBvciBwYXRoIHRoYXQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBtb2RlbCBmaWxlLlxuICovXG5leHBvcnQgdHlwZSBFeHRlcm5hbERhdGFGaWxlVHlwZSA9IEV4dGVybmFsRGF0YUZpbGVEZXNjcmlwdGlvbnxGaWxlVXJsT3JQYXRoO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIG1vZGVsIGxvYWRpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT25ueE1vZGVsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5aW5nIGEgbGlzdCBvZiBmaWxlcyB0aGF0IHJlcHJlc2VudHMgdGhlIGV4dGVybmFsIGRhdGEuXG4gICAqL1xuICBleHRlcm5hbERhdGE/OiByZWFkb25seSBFeHRlcm5hbERhdGFGaWxlVHlwZVtdO1xufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi90ZW5zb3IuanMnO1xuXG5leHBvcnQgdHlwZSBOb25UZW5zb3JUeXBlID0gbmV2ZXI7XG5cbi8qKlxuICogVHlwZSBPbm54VmFsdWUgUmVwcmVzZW50cyBib3RoIHRlbnNvcnMgYW5kIG5vbi10ZW5zb3JzIHZhbHVlIGZvciBtb2RlbCdzIGlucHV0cy9vdXRwdXRzLlxuICpcbiAqIE5PVEU6IGN1cnJlbnRseSBub3Qgc3VwcG9ydCBub24tdGVuc29yXG4gKi9cbmV4cG9ydCB0eXBlIE9ubnhWYWx1ZSA9IFRlbnNvcnxOb25UZW5zb3JUeXBlO1xuXG4vKipcbiAqIFR5cGUgT25ueFZhbHVlRGF0YUxvY2F0aW9uIHJlcHJlc2VudHMgdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhIG9mIGFuIE9ubnhWYWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgT25ueFZhbHVlRGF0YUxvY2F0aW9uID0gVGVuc29yLkRhdGFMb2NhdGlvbjtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtyZXNvbHZlQmFja2VuZEFuZEV4ZWN1dGlvblByb3ZpZGVyc30gZnJvbSAnLi9iYWNrZW5kLWltcGwuanMnO1xuaW1wb3J0IHtTZXNzaW9uSGFuZGxlciwgVHJhaW5pbmdTZXNzaW9uSGFuZGxlcn0gZnJvbSAnLi9iYWNrZW5kLmpzJztcbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbiBhcyBJbmZlcmVuY2VTZXNzaW9ufSBmcm9tICcuL2luZmVyZW5jZS1zZXNzaW9uLmpzJztcbmltcG9ydCB7T25ueFZhbHVlfSBmcm9tICcuL29ubngtdmFsdWUuanMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yLmpzJztcbmltcG9ydCB7VHJhaW5pbmdTZXNzaW9uIGFzIFRyYWluaW5nU2Vzc2lvbkludGVyZmFjZSwgVHJhaW5pbmdTZXNzaW9uQ3JlYXRlT3B0aW9uc30gZnJvbSAnLi90cmFpbmluZy1zZXNzaW9uLmpzJztcblxudHlwZSBTZXNzaW9uT3B0aW9ucyA9IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnM7XG50eXBlIEZlZWRzVHlwZSA9IEluZmVyZW5jZVNlc3Npb24uRmVlZHNUeXBlO1xudHlwZSBGZXRjaGVzVHlwZSA9IEluZmVyZW5jZVNlc3Npb24uRmV0Y2hlc1R5cGU7XG50eXBlIFJldHVyblR5cGUgPSBJbmZlcmVuY2VTZXNzaW9uLlJldHVyblR5cGU7XG50eXBlIFJ1bk9wdGlvbnMgPSBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnM7XG5cbmNvbnN0IG5vQmFja2VuZEVyck1zZzogc3RyaW5nID0gJ1RyYWluaW5nIGJhY2tlbmQgY291bGQgbm90IGJlIHJlc29sdmVkLiAnICtcbiAgICAnTWFrZSBzdXJlIHlvdVxcJ3JlIHVzaW5nIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gJiBXZWJBc3NlbWJseSBmaWxlcy4nO1xuXG5leHBvcnQgY2xhc3MgVHJhaW5pbmdTZXNzaW9uIGltcGxlbWVudHMgVHJhaW5pbmdTZXNzaW9uSW50ZXJmYWNlIHtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihoYW5kbGVyOiBUcmFpbmluZ1Nlc3Npb25IYW5kbGVyLCBoYXNPcHRpbWl6ZXJNb2RlbDogYm9vbGVhbiwgaGFzRXZhbE1vZGVsOiBib29sZWFuKSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICB0aGlzLmhhc09wdGltaXplck1vZGVsID0gaGFzT3B0aW1pemVyTW9kZWw7XG4gICAgdGhpcy5oYXNFdmFsTW9kZWwgPSBoYXNFdmFsTW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVyOiBUcmFpbmluZ1Nlc3Npb25IYW5kbGVyO1xuICBwcml2YXRlIGhhc09wdGltaXplck1vZGVsOiBib29sZWFuO1xuICBwcml2YXRlIGhhc0V2YWxNb2RlbDogYm9vbGVhbjtcblxuICBnZXQgdHJhaW5pbmdJbnB1dE5hbWVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmlucHV0TmFtZXM7XG4gIH1cbiAgZ2V0IHRyYWluaW5nT3V0cHV0TmFtZXMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub3V0cHV0TmFtZXM7XG4gIH1cblxuICBnZXQgZXZhbElucHV0TmFtZXMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLmhhc0V2YWxNb2RlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5ldmFsSW5wdXROYW1lcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIHRyYWluaW5nIHNlc3Npb24gaGFzIG5vIGV2YWxNb2RlbCBsb2FkZWQuJyk7XG4gICAgfVxuICB9XG4gIGdldCBldmFsT3V0cHV0TmFtZXMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLmhhc0V2YWxNb2RlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5ldmFsT3V0cHV0TmFtZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyB0cmFpbmluZyBzZXNzaW9uIGhhcyBubyBldmFsTW9kZWwgbG9hZGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUodHJhaW5pbmdPcHRpb25zOiBUcmFpbmluZ1Nlc3Npb25DcmVhdGVPcHRpb25zLCBzZXNzaW9uT3B0aW9ucz86IFNlc3Npb25PcHRpb25zKTpcbiAgICAgIFByb21pc2U8VHJhaW5pbmdTZXNzaW9uPiB7XG4gICAgY29uc3QgZXZhbE1vZGVsOiBzdHJpbmd8VWludDhBcnJheSA9IHRyYWluaW5nT3B0aW9ucy5ldmFsTW9kZWwgfHwgJyc7XG4gICAgY29uc3Qgb3B0aW1pemVyTW9kZWw6IHN0cmluZ3xVaW50OEFycmF5ID0gdHJhaW5pbmdPcHRpb25zLm9wdGltaXplck1vZGVsIHx8ICcnO1xuICAgIGNvbnN0IG9wdGlvbnM6IFNlc3Npb25PcHRpb25zID0gc2Vzc2lvbk9wdGlvbnMgfHwge307XG5cbiAgICAvLyByZXNvbHZlIGJhY2tlbmQsIHVwZGF0ZSBzZXNzaW9uIG9wdGlvbnMgd2l0aCB2YWxpZGF0ZWQgRVBzLCBhbmQgY3JlYXRlIHNlc3Npb24gaGFuZGxlclxuICAgIGNvbnN0IFtiYWNrZW5kLCBvcHRpb25zV2l0aFZhbGlkYXRlZEVQc10gPSBhd2FpdCByZXNvbHZlQmFja2VuZEFuZEV4ZWN1dGlvblByb3ZpZGVycyhvcHRpb25zKTtcbiAgICBpZiAoYmFja2VuZC5jcmVhdGVUcmFpbmluZ1Nlc3Npb25IYW5kbGVyKSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgYmFja2VuZC5jcmVhdGVUcmFpbmluZ1Nlc3Npb25IYW5kbGVyKFxuICAgICAgICAgIHRyYWluaW5nT3B0aW9ucy5jaGVja3BvaW50U3RhdGUsIHRyYWluaW5nT3B0aW9ucy50cmFpbk1vZGVsLCBldmFsTW9kZWwsIG9wdGltaXplck1vZGVsLFxuICAgICAgICAgIG9wdGlvbnNXaXRoVmFsaWRhdGVkRVBzKTtcbiAgICAgIHJldHVybiBuZXcgVHJhaW5pbmdTZXNzaW9uKGhhbmRsZXIsICEhdHJhaW5pbmdPcHRpb25zLm9wdGltaXplck1vZGVsLCAhIXRyYWluaW5nT3B0aW9ucy5ldmFsTW9kZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iobm9CYWNrZW5kRXJyTXNnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBydW5UcmFpblN0ZXAgYW5kIGZ1dHVyZSBydW5TdGVwIG1ldGhvZHMgdGhhdCBoYW5kbGVzIHRoZSB0eXBlLW5hcnJvd2luZyBjb252ZXJzaW9uIGZyb21cbiAgICogdGhlIGdpdmVuIHBhcmFtZXRlcnMgdG8gU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUgYW5kIFJ1bk9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dE5hbWVzIHRoZSBmZWVkcyBvYmplY3QgaXMgY2hlY2tlZCB0aGF0IHRoZXkgY29udGFpbiBhbGwgaW5wdXQgbmFtZXMgaW4gdGhlIHByb3ZpZGVkIGxpc3Qgb2YgaW5wdXRcbiAgICogbmFtZXMuXG4gICAqIEBwYXJhbSBvdXRwdXROYW1lcyB0aGUgZmV0Y2hlcyBvYmplY3QgaXMgY2hlY2tlZCB0aGF0IHRoZWlyIGtleXMgbWF0Y2ggdXAgd2l0aCB2YWxpZCBuYW1lcyBpbiB0aGUgbGlzdCBvZiBvdXRwdXRcbiAgICogbmFtZXMuXG4gICAqIEBwYXJhbSBmZWVkcyB0aGUgcmVxdWlyZWQgaW5wdXRcbiAgICogQHBhcmFtIGFyZzEgbmFycm93ZWQgJiBjb252ZXJ0ZWQgaW50byB0aGUgU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUgb3IgUnVuT3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIGFyZzIgb3B0aW9uYWwgUnVuT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0eXBlTmFycm93aW5nRm9yUnVuU3RlcChcbiAgICAgIGlucHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBvdXRwdXROYW1lczogcmVhZG9ubHkgc3RyaW5nW10sIGZlZWRzOiBGZWVkc1R5cGUsIGFyZzE/OiBGZXRjaGVzVHlwZXxSdW5PcHRpb25zLFxuICAgICAgYXJnMj86IFJ1bk9wdGlvbnMpOiBbU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUsIFJ1bk9wdGlvbnNdIHtcbiAgICBjb25zdCBmZXRjaGVzOiB7W25hbWU6IHN0cmluZ106IE9ubnhWYWx1ZXxudWxsfSA9IHt9O1xuICAgIGxldCBvcHRpb25zOiBSdW5PcHRpb25zID0ge307XG4gICAgLy8gY2hlY2sgaW5wdXRzXG4gICAgaWYgKHR5cGVvZiBmZWVkcyAhPT0gJ29iamVjdCcgfHwgZmVlZHMgPT09IG51bGwgfHwgZmVlZHMgaW5zdGFuY2VvZiBUZW5zb3IgfHwgQXJyYXkuaXNBcnJheShmZWVkcykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1xcJ2ZlZWRzXFwnIG11c3QgYmUgYW4gb2JqZWN0IHRoYXQgdXNlIGlucHV0IG5hbWVzIGFzIGtleXMgYW5kIE9ubnhWYWx1ZSBhcyBjb3JyZXNwb25kaW5nIHZhbHVlcy4nKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGZXRjaGVzRW1wdHkgPSB0cnVlO1xuICAgIC8vIGRldGVybWluZSB3aGljaCBvdmVycmlkZSBpcyBiZWluZyB1c2VkXG4gICAgaWYgKHR5cGVvZiBhcmcxID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGFyZzEgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCBhcmd1bWVudFsxXTogY2Fubm90IGJlIG51bGwuJyk7XG4gICAgICB9XG4gICAgICBpZiAoYXJnMSBpbnN0YW5jZW9mIFRlbnNvcikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcXCdmZXRjaGVzXFwnIGNhbm5vdCBiZSBhIFRlbnNvcicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcxKSkge1xuICAgICAgICBpZiAoYXJnMS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcXCdmZXRjaGVzXFwnIGNhbm5vdCBiZSBhbiBlbXB0eSBhcnJheS4nKTtcbiAgICAgICAgfVxuICAgICAgICBpc0ZldGNoZXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAvLyBvdXRwdXQgbmFtZXNcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGFyZzEpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcXCdmZXRjaGVzXFwnIG11c3QgYmUgYSBzdHJpbmcgYXJyYXkgb3IgYW4gb2JqZWN0LicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3V0cHV0TmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGAnZmV0Y2hlcycgY29udGFpbnMgaW52YWxpZCBvdXRwdXQgbmFtZTogJHtuYW1lfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmV0Y2hlc1tuYW1lXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdvYmplY3QnICYmIGFyZzIgIT09IG51bGwpIHtcbiAgICAgICAgICBvcHRpb25zID0gYXJnMjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcXCdvcHRpb25zXFwnIG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZWNpZGUgd2hldGhlciBhcmcxIGlzIGZldGNoZXMgb3Igb3B0aW9uc1xuICAgICAgICAvLyBpZiBhbnkgb3V0cHV0IG5hbWUgaXMgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIHZhbGlkIE9ubnhWYWx1ZSwgd2UgY29uc2lkZXIgaXQgZmV0Y2hlc1xuICAgICAgICBsZXQgaXNGZXRjaGVzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGFyZzFLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJnMSk7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBvdXRwdXROYW1lcykge1xuICAgICAgICAgIGlmIChhcmcxS2V5cy5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IChhcmcxIGFzIEluZmVyZW5jZVNlc3Npb24uTnVsbGFibGVPbm54VmFsdWVNYXBUeXBlKVtuYW1lXTtcbiAgICAgICAgICAgIGlmICh2ID09PSBudWxsIHx8IHYgaW5zdGFuY2VvZiBUZW5zb3IpIHtcbiAgICAgICAgICAgICAgaXNGZXRjaGVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgaXNGZXRjaGVzRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgZmV0Y2hlc1tuYW1lXSA9IHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRmV0Y2hlcykge1xuICAgICAgICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ29iamVjdCcgJiYgYXJnMiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGFyZzI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1xcJ29wdGlvbnNcXCcgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMgPSBhcmcxIGFzIFJ1bk9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcxICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCBhcmd1bWVudFsxXTogbXVzdCBiZSBcXCdmZXRjaGVzXFwnIG9yIFxcJ29wdGlvbnNcXCcuJyk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgYWxsIGlucHV0cyBhcmUgaW4gZmVlZFxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBpbnB1dE5hbWVzKSB7XG4gICAgICBpZiAodHlwZW9mIGZlZWRzW25hbWVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0ICcke25hbWV9JyBpcyBtaXNzaW5nIGluICdmZWVkcycuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgbm8gZmV0Y2hlcyBpcyBzcGVjaWZpZWQsIHdlIHVzZSB0aGUgZnVsbCBvdXRwdXQgbmFtZXMgbGlzdFxuICAgIGlmIChpc0ZldGNoZXNFbXB0eSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIG91dHB1dE5hbWVzKSB7XG4gICAgICAgIGZldGNoZXNbbmFtZV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbZmV0Y2hlcywgb3B0aW9uc107XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCBmb3IgcnVuVHJhaW5TdGVwIGFuZCBhbnkgb3RoZXIgcnVuU3RlcCBtZXRob2RzLiBUYWtlcyB0aGUgUmV0dXJuVHlwZSByZXN1bHQgZnJvbSB0aGUgU2Vzc2lvbkhhbmRsZXJcbiAgICogYW5kIGNoYW5nZXMgaXQgaW50byBhIG1hcCBvZiBUZW5zb3JzLlxuICAgKlxuICAgKiBAcGFyYW0gcmVzdWx0c1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgY29udmVydEhhbmRsZXJSZXR1cm5UeXBlVG9NYXBPZlRlbnNvcnMocmVzdWx0czogU2Vzc2lvbkhhbmRsZXIuUmV0dXJuVHlwZSk6IFJldHVyblR5cGUge1xuICAgIGNvbnN0IHJldHVyblZhbHVlOiB7W25hbWU6IHN0cmluZ106IE9ubnhWYWx1ZX0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiByZXN1bHRzKSB7XG4gICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocmVzdWx0cywga2V5KSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzW2tleV07XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBUZW5zb3IpIHtcbiAgICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVyblZhbHVlW2tleV0gPSBuZXcgVGVuc29yKHJlc3VsdC50eXBlLCByZXN1bHQuZGF0YSwgcmVzdWx0LmRpbXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIGFzeW5jIGxhenlSZXNldEdyYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVyLmxhenlSZXNldEdyYWQoKTtcbiAgfVxuXG4gIHJ1blRyYWluU3RlcChmZWVkczogRmVlZHNUeXBlLCBvcHRpb25zPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UmV0dXJuVHlwZT47XG4gIHJ1blRyYWluU3RlcChmZWVkczogRmVlZHNUeXBlLCBmZXRjaGVzOiBGZXRjaGVzVHlwZSwgb3B0aW9ucz86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJldHVyblR5cGU+O1xuICBhc3luYyBydW5UcmFpblN0ZXAoZmVlZHM6IEZlZWRzVHlwZSwgYXJnMT86IEZldGNoZXNUeXBlfFJ1bk9wdGlvbnMsIGFyZzI/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSZXR1cm5UeXBlPiB7XG4gICAgY29uc3QgW2ZldGNoZXMsIG9wdGlvbnNdID1cbiAgICAgICAgdGhpcy50eXBlTmFycm93aW5nRm9yUnVuU3RlcCh0aGlzLnRyYWluaW5nSW5wdXROYW1lcywgdGhpcy50cmFpbmluZ091dHB1dE5hbWVzLCBmZWVkcywgYXJnMSwgYXJnMik7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuaGFuZGxlci5ydW5UcmFpblN0ZXAoZmVlZHMsIGZldGNoZXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnRIYW5kbGVyUmV0dXJuVHlwZVRvTWFwT2ZUZW5zb3JzKHJlc3VsdHMpO1xuICB9XG5cbiAgYXN5bmMgcnVuT3B0aW1pemVyU3RlcChvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zfHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmhhc09wdGltaXplck1vZGVsKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZXIucnVuT3B0aW1pemVyU3RlcChvcHRpb25zIHx8IHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIFRyYWluaW5nU2Vzc2lvbiBoYXMgbm8gT3B0aW1pemVyTW9kZWwgbG9hZGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIHJ1bkV2YWxTdGVwKGZlZWRzOiBGZWVkc1R5cGUsIG9wdGlvbnM/OiBSdW5PcHRpb25zfHVuZGVmaW5lZCk6IFByb21pc2U8UmV0dXJuVHlwZT47XG4gIHJ1bkV2YWxTdGVwKGZlZWRzOiBGZWVkc1R5cGUsIGZldGNoZXM6IEZldGNoZXNUeXBlLCBvcHRpb25zPzogUnVuT3B0aW9uc3x1bmRlZmluZWQpOiBQcm9taXNlPFJldHVyblR5cGU+O1xuICBhc3luYyBydW5FdmFsU3RlcChmZWVkczogRmVlZHNUeXBlLCBhcmcxPzogRmV0Y2hlc1R5cGV8UnVuT3B0aW9ucywgYXJnMj86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJldHVyblR5cGU+IHtcbiAgICBpZiAodGhpcy5oYXNFdmFsTW9kZWwpIHtcbiAgICAgIGNvbnN0IFtmZXRjaGVzLCBvcHRpb25zXSA9XG4gICAgICAgICAgdGhpcy50eXBlTmFycm93aW5nRm9yUnVuU3RlcCh0aGlzLmV2YWxJbnB1dE5hbWVzLCB0aGlzLmV2YWxPdXRwdXROYW1lcywgZmVlZHMsIGFyZzEsIGFyZzIpO1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuaGFuZGxlci5ydW5FdmFsU3RlcChmZWVkcywgZmV0Y2hlcywgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0SGFuZGxlclJldHVyblR5cGVUb01hcE9mVGVuc29ycyhyZXN1bHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIFRyYWluaW5nU2Vzc2lvbiBoYXMgbm8gRXZhbE1vZGVsIGxvYWRlZC4nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRQYXJhbWV0ZXJzU2l6ZSh0cmFpbmFibGVPbmx5ID0gdHJ1ZSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5nZXRQYXJhbWV0ZXJzU2l6ZSh0cmFpbmFibGVPbmx5KTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRQYXJhbWV0ZXJzQnVmZmVyKGFycmF5OiBVaW50OEFycmF5LCB0cmFpbmFibGVPbmx5ID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtc1NpemUgPSBhd2FpdCB0aGlzLmdldFBhcmFtZXRlcnNTaXplKHRyYWluYWJsZU9ubHkpO1xuICAgIC8vIGNoZWNraW5nIHRoYXQgdGhlIHNpemUgb2YgdGhlIFVpbnQ4QXJyYXkgaXMgZXF1aXZhbGVudCB0byB0aGUgYnl0ZSBsZW5ndGggb2YgYSBGbG9hdDMyQXJyYXkgb2YgdGhlIG51bWJlclxuICAgIC8vIG9mIHBhcmFtZXRlcnNcbiAgICBpZiAoYXJyYXkubGVuZ3RoICE9PSA0ICogcGFyYW1zU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdTaXplIG9mIHRoZSBidWZmZXIgcGFzc2VkIGludG8gbG9hZFBhcmFtZXRlcnNCdWZmZXIgbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaW4gJyArXG4gICAgICAgICAgJ3RoZSBtb2RlbC4gUGxlYXNlIHVzZSBnZXRQYXJhbWV0ZXJzU2l6ZSBtZXRob2QgdG8gY2hlY2suJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIubG9hZFBhcmFtZXRlcnNCdWZmZXIoYXJyYXksIHRyYWluYWJsZU9ubHkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29udGlndW91c1BhcmFtZXRlcnModHJhaW5hYmxlT25seSA9IHRydWUpOiBQcm9taXNlPE9ubnhWYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIuZ2V0Q29udGlndW91c1BhcmFtZXRlcnModHJhaW5hYmxlT25seSk7XG4gIH1cblxuICBhc3luYyByZWxlYXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIuZGlzcG9zZSgpO1xuICB9XG59XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbn0gZnJvbSAnLi9pbmZlcmVuY2Utc2Vzc2lvbi5qcyc7XG5pbXBvcnQge09ubnhWYWx1ZX0gZnJvbSAnLi9vbm54LXZhbHVlLmpzJztcbmltcG9ydCB7VHJhaW5pbmdTZXNzaW9uIGFzIFRyYWluaW5nU2Vzc2lvbkltcGx9IGZyb20gJy4vdHJhaW5pbmctc2Vzc2lvbi1pbXBsLmpzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZGVjbGFyZSAqL1xuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgVHJhaW5pbmdTZXNzaW9uIHtcbiAgLyoqXG4gICAqIEVpdGhlciBVUkkgZmlsZSBwYXRoIChzdHJpbmcpIG9yIFVpbnQ4QXJyYXkgY29udGFpbmluZyBtb2RlbCBvciBjaGVja3BvaW50IGluZm9ybWF0aW9uLlxuICAgKi9cbiAgdHlwZSBVcmlPckJ1ZmZlciA9IHN0cmluZ3xVaW50OEFycmF5O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCBhIHJ1bnRpbWUgaW5zdGFuY2Ugb2YgYW4gT05OWCB0cmFpbmluZyBzZXNzaW9uLFxuICogd2hpY2ggY29udGFpbnMgYSBtb2RlbCB0aGF0IGNhbiBiZSB0cmFpbmVkLCBhbmQsIG9wdGlvbmFsbHksXG4gKiBhbiBldmFsIGFuZCBvcHRpbWl6ZXIgbW9kZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaW5pbmdTZXNzaW9uIHtcbiAgLy8gI3JlZ2lvbiBydW4oKVxuXG4gIC8qKlxuICAgKiBMYXppbHkgcmVzZXRzIHRoZSBncmFkaWVudHMgb2YgYWxsIHRyYWluYWJsZSBwYXJhbWV0ZXJzIHRvIHplcm8uIFNob3VsZCBoYXBwZW4gYWZ0ZXIgdGhlIGludm9jYXRpb24gb2ZcbiAgICogcnVuT3B0aW1pemVyU3RlcC5cbiAgICovXG4gIGxhenlSZXNldEdyYWQoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUnVuIFRyYWluU3RlcCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBnaXZlbiBmZWVkcyBhbmQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGZlZWRzIC0gUmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIGlucHV0LiBTZWUgdHlwZSBkZXNjcmlwdGlvbiBvZiBgSW5mZXJlbmNlU2Vzc2lvbi5JbnB1dFR5cGVgIGZvclxuICAgZGV0YWlsLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsLiBBIHNldCBvZiBvcHRpb25zIHRoYXQgY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIG1vZGVsIHRyYWluaW5nLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG1hcCwgd2hpY2ggdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKi9cbiAgcnVuVHJhaW5TdGVwKGZlZWRzOiBJbmZlcmVuY2VTZXNzaW9uLkZlZWRzVHlwZSwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24uUmV0dXJuVHlwZT47XG5cbiAgLyoqXG4gICAqIFJ1biBhIHNpbmdsZSB0cmFpbiBzdGVwIHdpdGggdGhlIGdpdmVuIGlucHV0cyBhbmQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGZlZWRzIC0gUmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIGlucHV0LlxuICAgKiBAcGFyYW0gZmV0Y2hlcyAtIFJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvdXRwdXQuXG4gICAqIGRldGFpbC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbC4gQSBzZXQgb2Ygb3B0aW9ucyB0aGF0IGNvbnRyb2xzIHRoZSBiZWhhdmlvciBvZiBtb2RlbCB0cmFpbmluZy5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBtYXAsIHdoaWNoIHVzZXMgb3V0cHV0IG5hbWVzIGFzIGtleXMgYW5kIE9ubnhWYWx1ZSBhcyBjb3JyZXNwb25kaW5nXG4gICB2YWx1ZXMuXG4gICAqL1xuICBydW5UcmFpblN0ZXAoXG4gICAgICBmZWVkczogSW5mZXJlbmNlU2Vzc2lvbi5GZWVkc1R5cGUsIGZldGNoZXM6IEluZmVyZW5jZVNlc3Npb24uRmV0Y2hlc1R5cGUsXG4gICAgICBvcHRpb25zPzogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uLlJldHVyblR5cGU+O1xuXG4gIC8qKlxuICAgKiBSdW5zIGEgc2luZ2xlIG9wdGltaXplciBzdGVwLCB3aGljaCBwZXJmb3JtcyB3ZWlnaHQgdXBkYXRlcyBmb3IgdGhlIHRyYWluYWJsZSBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBvcHRpbWl6ZXIgbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgbW9kZWwgb3B0aW1pemluZy5cbiAgICovXG4gIHJ1bk9wdGltaXplclN0ZXAob3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJ1biBhIHNpbmdsZSBldmFsIHN0ZXAgd2l0aCB0aGUgZ2l2ZW4gaW5wdXRzIGFuZCBvcHRpb25zIHVzaW5nIHRoZSBldmFsIG1vZGVsLlxuICAgKlxuICAgKiBAcGFyYW0gZmVlZHMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgaW5wdXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwuIEEgc2V0IG9mIG9wdGlvbnMgdGhhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgbW9kZWwgZXZhbCBzdGVwLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIG1hcCwgd2hpY2ggdXNlcyBvdXRwdXQgbmFtZXMgYXMga2V5cyBhbmQgT25ueFZhbHVlIGFzIGNvcnJlc3BvbmRpbmdcbiAgIHZhbHVlcy5cbiAgICovXG4gIHJ1bkV2YWxTdGVwKGZlZWRzOiBJbmZlcmVuY2VTZXNzaW9uLkZlZWRzVHlwZSwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24uUmV0dXJuVHlwZT47XG5cbiAgLyoqXG4gICAqIFJ1biBhIHNpbmdsZSBldmFsIHN0ZXAgd2l0aCB0aGUgZ2l2ZW4gaW5wdXRzIGFuZCBvcHRpb25zIHVzaW5nIHRoZSBldmFsIG1vZGVsLlxuICAgKlxuICAgKiBAcGFyYW0gZmVlZHMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgaW5wdXQuXG4gICAqIEBwYXJhbSBmZXRjaGVzIC0gUmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG91dHB1dC5cbiAgICogZGV0YWlsLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsLiBBIHNldCBvZiBvcHRpb25zIHRoYXQgY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIG1vZGVsIGV2YWwgc3RlcC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBtYXAsIHdoaWNoIHVzZXMgb3V0cHV0IG5hbWVzIGFzIGtleXMgYW5kIE9ubnhWYWx1ZSBhcyBjb3JyZXNwb25kaW5nXG4gICB2YWx1ZXMuXG4gICAqL1xuICBydW5FdmFsU3RlcChcbiAgICAgIGZlZWRzOiBJbmZlcmVuY2VTZXNzaW9uLkZlZWRzVHlwZSwgZmV0Y2hlczogSW5mZXJlbmNlU2Vzc2lvbi5GZXRjaGVzVHlwZSxcbiAgICAgIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPEluZmVyZW5jZVNlc3Npb24uUmV0dXJuVHlwZT47XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gY29weSBwYXJhbWV0ZXJzXG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc2l6ZSBvZiBhbGwgcGFyYW1ldGVycyBmb3IgdGhlIHRyYWluaW5nIHN0YXRlLiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgcHJpbWl0aXZlIChkYXRhdHlwZSBvZlxuICAgKiB0aGUgcGFyYW1ldGVycykgZWxlbWVudHMgb2YgYWxsIHRoZSBwYXJhbWV0ZXJzIGluIHRoZSB0cmFpbmluZyBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHRyYWluYWJsZU9ubHkgLSBXaGVuIHNldCB0byB0cnVlLCB0aGUgc2l6ZSBpcyBjYWxjdWxhdGVkIGZvciB0cmFpbmFibGUgcGFyYW1zIG9ubHkuIERlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cbiAgICovXG4gIGdldFBhcmFtZXRlcnNTaXplKHRyYWluYWJsZU9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPG51bWJlcj47XG5cbiAgLyoqXG4gICAqIENvcGllcyBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gdGhlIGdpdmVuIGJ1ZmZlciB0byB0aGUgdHJhaW5pbmcgc3RhdGUuIEN1cnJlbnRseSwgb25seSBzdXBwb3J0aW5nIG1vZGVscyB3aXRoXG4gICAqIHBhcmFtZXRlcnMgb2YgdHlwZSBGbG9hdDMyLlxuICAgKlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gQSBVaW50OEFycmF5IHJlcHJlc2VudGF0aW9uIG9mIEZsb2F0MzIgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHRyYWluYWJsZU9ubHkgLSBUcnVlIGlmIHRyYWluYWJsZSBwYXJhbWV0ZXJzIG9ubHkgdG8gYmUgbW9kaWZpZWQsIGZhbHNlIG90aGVyd2lzZS4gRGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgbG9hZFBhcmFtZXRlcnNCdWZmZXIoYnVmZmVyOiBVaW50OEFycmF5LCB0cmFpbmFibGVPbmx5OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQ29waWVzIHRoZSBtb2RlbCBwYXJhbWV0ZXJzIHRvIGEgY29udGlndW91cyBidWZmZXIuIFVzdWFsbHkgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBGZWRlcmF0ZWQgTGVhcm5pbmcuXG4gICAqIEN1cnJlbnRseSwgb25seSBzdXBwb3J0aW5nIG1vZGVscyB3aXRoIHBhcmFtZXRlcnMgb2YgdHlwZSBGbG9hdDMyLlxuICAgKlxuICAgKiBAcGFyYW0gdHJhaW5hYmxlT25seSAtIFdoZW4gc2V0IHRvIHRydWUsIG9ubHkgdHJhaW5hYmxlIHBhcmFtZXRlcnMgYXJlIGNvcGllZC4gVHJhaW5hYmxlIHBhcmFtZXRlcnMgYXJlIHBhcmFtZXRlcnNcbiAgICogZm9yIHdoaWNoIHJlcXVpcmVzX2dyYWQgaXMgc2V0IHRvIHRydWUuIERlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBGbG9hdDMyIE9ubnhWYWx1ZSBvZiB0aGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMuXG4gICAqL1xuICBnZXRDb250aWd1b3VzUGFyYW1ldGVycyh0cmFpbmFibGVPbmx5OiBib29sZWFuKTogUHJvbWlzZTxPbm54VmFsdWU+O1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiByZWxlYXNlKClcblxuICAvKipcbiAgICogUmVsZWFzZSB0aGUgaW5mZXJlbmNlIHNlc3Npb24gYW5kIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlcy5cbiAgICovXG4gIHJlbGVhc2UoKTogUHJvbWlzZTx2b2lkPjtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gbWV0YWRhdGFcblxuICAvKipcbiAgICogR2V0IGlucHV0IG5hbWVzIG9mIHRoZSBsb2FkZWQgdHJhaW5pbmcgbW9kZWwuXG4gICAqL1xuICByZWFkb25seSB0cmFpbmluZ0lucHV0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHZXQgb3V0cHV0IG5hbWVzIG9mIHRoZSBsb2FkZWQgdHJhaW5pbmcgbW9kZWwuXG4gICAqL1xuICByZWFkb25seSB0cmFpbmluZ091dHB1dE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogR2V0IGlucHV0IG5hbWVzIG9mIHRoZSBsb2FkZWQgZXZhbCBtb2RlbC4gSXMgYW4gZW1wdHkgYXJyYXkgaWYgbm8gZXZhbCBtb2RlbCBpcyBsb2FkZWQuXG4gICAqL1xuICByZWFkb25seSBldmFsSW5wdXROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdldCBvdXRwdXQgbmFtZXMgb2YgdGhlIGxvYWRlZCBldmFsIG1vZGVsLiBJcyBhbiBlbXB0eSBhcnJheSBpZiBubyBldmFsIG1vZGVsIGlzIGxvYWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGV2YWxPdXRwdXROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgcGFzc2VkIGludG8gdGhlIFRyYWluaW5nU2Vzc2lvbkZhY3RvcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaW5pbmdTZXNzaW9uQ3JlYXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBVUkkgb3IgYnVmZmVyIGZvciBhIC5ja3B0IGZpbGUgdGhhdCBjb250YWlucyB0aGUgY2hlY2twb2ludCBmb3IgdGhlIHRyYWluaW5nIG1vZGVsLlxuICAgKi9cbiAgY2hlY2twb2ludFN0YXRlOiBUcmFpbmluZ1Nlc3Npb24uVXJpT3JCdWZmZXI7XG4gIC8qKlxuICAgKiBVUkkgb3IgYnVmZmVyIGZvciB0aGUgLm9ubnggdHJhaW5pbmcgZmlsZS5cbiAgICovXG4gIHRyYWluTW9kZWw6IFRyYWluaW5nU2Vzc2lvbi5VcmlPckJ1ZmZlcjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLiBVUkkgb3IgYnVmZmVyIGZvciB0aGUgLm9ubnggb3B0aW1pemVyIG1vZGVsIGZpbGUuXG4gICAqL1xuICBvcHRpbWl6ZXJNb2RlbD86IFRyYWluaW5nU2Vzc2lvbi5VcmlPckJ1ZmZlcjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLiBVUkkgb3IgYnVmZmVyIGZvciB0aGUgLm9ubnggZXZhbCBtb2RlbCBmaWxlLlxuICAgKi9cbiAgZXZhbE1vZGVsPzogVHJhaW5pbmdTZXNzaW9uLlVyaU9yQnVmZmVyO1xufVxuXG4vKipcbiAqIERlZmluZXMgbWV0aG9kIG92ZXJsb2FkIHBvc3NpYmlsaXRpZXMgZm9yIGNyZWF0aW5nIGEgVHJhaW5pbmdTZXNzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYWluaW5nU2Vzc2lvbkZhY3Rvcnkge1xuICAvLyAjcmVnaW9uIGNyZWF0ZSgpXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgVHJhaW5pbmdTZXNzaW9uIGFuZCBhc3luY2hyb25vdXNseSBsb2FkcyBhbnkgbW9kZWxzIHBhc3NlZCBpbiB0aHJvdWdoIHRyYWluaW5nT3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0gdHJhaW5pbmdPcHRpb25zIHNwZWNpZnkgbW9kZWxzIGFuZCBjaGVja3BvaW50cyB0byBsb2FkIGludG8gdGhlIFRyYWluaW5nIFNlc3Npb25cbiAgICogQHBhcmFtIHNlc3Npb25PcHRpb25zIHNwZWNpZnkgY29uZmlndXJhdGlvbiBmb3IgdHJhaW5pbmcgc2Vzc2lvbiBiZWhhdmlvclxuICAgKlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBUcmFpbmluZ1Nlc3Npb24gb2JqZWN0XG4gICAqL1xuICBjcmVhdGUodHJhaW5pbmdPcHRpb25zOiBUcmFpbmluZ1Nlc3Npb25DcmVhdGVPcHRpb25zLCBzZXNzaW9uT3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxUcmFpbmluZ1Nlc3Npb24+O1xuXG4gIC8vICNlbmRyZWdpb25cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFRyYWluaW5nU2Vzc2lvbjogVHJhaW5pbmdTZXNzaW9uRmFjdG9yeSA9IFRyYWluaW5nU2Vzc2lvbkltcGw7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8qKlxuICogIyBPTk5YIFJ1bnRpbWUgSmF2YVNjcmlwdCBBUElcbiAqXG4gKiBPTk5YIFJ1bnRpbWUgSmF2YVNjcmlwdCBBUEkgaXMgYSB1bmlmaWVkIEFQSSBmb3IgYWxsIEphdmFTY3JpcHQgdXNhZ2VzLCBpbmNsdWRpbmcgdGhlIGZvbGxvd2luZyBOUE0gcGFja2FnZXM6XG4gKlxuICogLSBbb25ueHJ1bnRpbWUtbm9kZV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvb25ueHJ1bnRpbWUtbm9kZSlcbiAqIC0gW29ubnhydW50aW1lLXdlYl0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvb25ueHJ1bnRpbWUtd2ViKVxuICogLSBbb25ueHJ1bnRpbWUtcmVhY3QtbmF0aXZlXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9vbm54cnVudGltZS1yZWFjdC1uYXRpdmUpXG4gKlxuICogU2VlIGFsc286XG4gKiAtIFtHZXQgU3RhcnRlZF0oaHR0cHM6Ly9vbm54cnVudGltZS5haS9kb2NzL2dldC1zdGFydGVkL3dpdGgtamF2YXNjcmlwdC8pXG4gKiAtIFtJbmZlcmVuY2UgZXhhbXBsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvb25ueHJ1bnRpbWUtaW5mZXJlbmNlLWV4YW1wbGVzL3RyZWUvbWFpbi9qcylcbiAqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2JhY2tlbmQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnYuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmZlcmVuY2Utc2Vzc2lvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RlbnNvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RlbnNvci1jb252ZXJzaW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuc29yLWZhY3RvcnkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFjZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29ubngtbW9kZWwuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vbm54LXZhbHVlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhaW5pbmctc2Vzc2lvbi5qcyc7XG4iLCAiZXhwb3J0IGNvbnN0IGNwdXMgPSB1bmRlZmluZWQ7IiwgImV4cG9ydCBjb25zdCBqb2luID0gdW5kZWZpbmVkOyIsICJleHBvcnQgY29uc3QgcmVhZEZpbGUgPSB1bmRlZmluZWQ7ZXhwb3J0IGNvbnN0IHJlYWRGaWxlU3luYyA9IHVuZGVmaW5lZDtleHBvcnQgY29uc3QgY3JlYXRlUmVhZFN0cmVhbSA9IHVuZGVmaW5lZDsiLCAiZXhwb3J0IGNvbnN0IGpvaW4gPSB1bmRlZmluZWQ7IiwgIlxudmFyIG9ydFdhc20gPSAoKCkgPT4ge1xuICB2YXIgX3NjcmlwdERpciA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJyA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/LnNyYyA6IHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lICE9ICd1bmRlZmluZWQnKSBfc2NyaXB0RGlyIHx8PSBfX2ZpbGVuYW1lO1xuICByZXR1cm4gKFxuZnVuY3Rpb24obW9kdWxlQXJnID0ge30pIHtcblxudmFyIGc9bW9kdWxlQXJnLGFhLGJhLHJlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZSgoYSxiKT0+e2FhPWE7YmE9Yn0pO1widXNlIHN0cmljdFwiO2cubW91bnRFeHRlcm5hbERhdGE9KGEsYik9PnsoZy5QaHx8KGcuUGg9bmV3IE1hcCkpLnNldChhLGIpfTtnLnVubW91bnRFeHRlcm5hbERhdGE9KCk9PntkZWxldGUgZy5QaH07XG5sZXQgZGE9KCk9Pntjb25zdCBhPShjLGQsZSk9PiguLi5mKT0+e2NvbnN0IGg9dCxrPWQ/LigpO2Y9YyguLi5mKTtjb25zdCBsPWQ/LigpO2shPT1sJiYoYz1sLGUoayksZD1lPW51bGwpO3JldHVybiB0IT1oP2NhKCk6Zn0sYj1jPT5hc3luYyguLi5kKT0+e3RyeXtpZihnLk9oKXRocm93IEVycm9yKFwiU2Vzc2lvbiBhbHJlYWR5IHN0YXJ0ZWRcIik7Y29uc3QgZT1nLk9oPXtnaTpkWzBdLGVycm9yczpbXX0sZj1hd2FpdCBjKC4uLmQpO2lmKGcuT2ghPT1lKXRocm93IEVycm9yKFwiU2Vzc2lvbiBtaXNtYXRjaFwiKTtnLlVoPy5mbHVzaCgpO2NvbnN0IGg9ZS5lcnJvcnM7aWYoMDxoLmxlbmd0aCl7bGV0IGs9YXdhaXQgUHJvbWlzZS5hbGwoaCk7az1rLmZpbHRlcihsPT5sKTtpZigwPGsubGVuZ3RoKXRocm93IEVycm9yKGsuam9pbihcIlxcblwiKSk7fXJldHVybiBmfWZpbmFsbHl7Zy5PaD1udWxsfX07Zy5fT3J0Q3JlYXRlU2Vzc2lvbj1hKGcuX09ydENyZWF0ZVNlc3Npb24sKCk9PmcuX09ydENyZWF0ZVNlc3Npb24sXG5jPT5nLl9PcnRDcmVhdGVTZXNzaW9uPWMpO2cuX09ydFJ1bj1iKGEoZy5fT3J0UnVuLCgpPT5nLl9PcnRSdW4sYz0+Zy5fT3J0UnVuPWMpKTtnLl9PcnRSdW5XaXRoQmluZGluZz1iKGEoZy5fT3J0UnVuV2l0aEJpbmRpbmcsKCk9PmcuX09ydFJ1bldpdGhCaW5kaW5nLGM9PmcuX09ydFJ1bldpdGhCaW5kaW5nPWMpKTtnLl9PcnRCaW5kSW5wdXQ9YShnLl9PcnRCaW5kSW5wdXQsKCk9PmcuX09ydEJpbmRJbnB1dCxjPT5nLl9PcnRCaW5kSW5wdXQ9Yyk7ZGE9dm9pZCAwfTtcbmcuanNlcEluaXQ9KGEsYik9PntkYT8uKCk7aWYoXCJ3ZWJncHVcIj09PWEpe1tnLlVoLGcuWmgsZy5jaSxnLlZoLGcuYmksZy5qZSxnLmRpLGcuZmksZy4kaCxnLmFpLGcuZWldPWI7Y29uc3QgYz1nLlVoO2cuanNlcFJlZ2lzdGVyQnVmZmVyPShkLGUsZixoKT0+Yy5yZWdpc3RlckJ1ZmZlcihkLGUsZixoKTtnLmpzZXBHZXRCdWZmZXI9ZD0+Yy5nZXRCdWZmZXIoZCk7Zy5qc2VwQ3JlYXRlRG93bmxvYWRlcj0oZCxlLGYpPT5jLmNyZWF0ZURvd25sb2FkZXIoZCxlLGYpO2cuanNlcE9uUmVsZWFzZVNlc3Npb249ZD0+e2Mub25SZWxlYXNlU2Vzc2lvbihkKX07Zy5qc2VwT25SdW5TdGFydD1kPT5jLm9uUnVuU3RhcnQoZCl9fTtcbnZhciBlYT1PYmplY3QuYXNzaWduKHt9LGcpLGZhPVwiLi90aGlzLnByb2dyYW1cIixoYT0oYSxiKT0+e3Rocm93IGI7fSxpYT1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93LGphPVwiZnVuY3Rpb25cIj09dHlwZW9mIGltcG9ydFNjcmlwdHMsa2E9XCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiZcInN0cmluZ1wiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLHY9XCJcIixsYSxtYSxuYTtcbmlmKGthKXt2YXIgZnM9cmVxdWlyZShcImZzXCIpLG9hPXJlcXVpcmUoXCJwYXRoXCIpO3Y9amE/b2EuZGlybmFtZSh2KStcIi9cIjpfX2Rpcm5hbWUrXCIvXCI7bGE9KGEsYik9PnthPXBhKGEpP25ldyBVUkwoYSk6b2Eubm9ybWFsaXplKGEpO3JldHVybiBmcy5yZWFkRmlsZVN5bmMoYSxiP3ZvaWQgMDpcInV0ZjhcIil9O25hPWE9PnthPWxhKGEsITApO2EuYnVmZmVyfHwoYT1uZXcgVWludDhBcnJheShhKSk7cmV0dXJuIGF9O21hPShhLGIsYyxkPSEwKT0+e2E9cGEoYSk/bmV3IFVSTChhKTpvYS5ub3JtYWxpemUoYSk7ZnMucmVhZEZpbGUoYSxkP3ZvaWQgMDpcInV0ZjhcIiwoZSxmKT0+e2U/YyhlKTpiKGQ/Zi5idWZmZXI6Zil9KX07IWcudGhpc1Byb2dyYW0mJjE8cHJvY2Vzcy5hcmd2Lmxlbmd0aCYmKGZhPXByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXFxcL2csXCIvXCIpKTtwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7aGE9KGEsYik9Pntwcm9jZXNzLmV4aXRDb2RlPWE7dGhyb3cgYjt9fWVsc2UgaWYoaWF8fFxuamEpamE/dj1zZWxmLmxvY2F0aW9uLmhyZWY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYodj1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksX3NjcmlwdERpciYmKHY9X3NjcmlwdERpciksdi5zdGFydHNXaXRoKFwiYmxvYjpcIik/dj1cIlwiOnY9di5zdWJzdHIoMCx2LnJlcGxhY2UoL1s/I10uKi8sXCJcIikubGFzdEluZGV4T2YoXCIvXCIpKzEpLGxhPWE9Pnt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiR0VUXCIsYSwhMSk7Yi5zZW5kKG51bGwpO3JldHVybiBiLnJlc3BvbnNlVGV4dH0samEmJihuYT1hPT57dmFyIGI9bmV3IFhNTEh0dHBSZXF1ZXN0O2Iub3BlbihcIkdFVFwiLGEsITEpO2IucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIjtiLnNlbmQobnVsbCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGIucmVzcG9uc2UpfSksbWE9KGEsYixjKT0+e3ZhciBkPW5ldyBYTUxIdHRwUmVxdWVzdDtkLm9wZW4oXCJHRVRcIixhLCEwKTtkLnJlc3BvbnNlVHlwZT1cblwiYXJyYXlidWZmZXJcIjtkLm9ubG9hZD0oKT0+ezIwMD09ZC5zdGF0dXN8fDA9PWQuc3RhdHVzJiZkLnJlc3BvbnNlP2IoZC5yZXNwb25zZSk6YygpfTtkLm9uZXJyb3I9YztkLnNlbmQobnVsbCl9O3ZhciBxYT1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHc9Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oZyxlYSk7ZWE9bnVsbDt2YXIgcmEseD0hMSxzYSx6LEUsdGEsdWEsRyxJLHZhLHdhLHhhLHlhO1xuZnVuY3Rpb24gemEoKXt2YXIgYT1yYS5idWZmZXI7Zy5IRUFQOD16PW5ldyBJbnQ4QXJyYXkoYSk7Zy5IRUFQMTY9dGE9bmV3IEludDE2QXJyYXkoYSk7Zy5IRUFQVTg9RT1uZXcgVWludDhBcnJheShhKTtnLkhFQVBVMTY9dWE9bmV3IFVpbnQxNkFycmF5KGEpO2cuSEVBUDMyPUc9bmV3IEludDMyQXJyYXkoYSk7Zy5IRUFQVTMyPUk9bmV3IFVpbnQzMkFycmF5KGEpO2cuSEVBUEYzMj12YT1uZXcgRmxvYXQzMkFycmF5KGEpO2cuSEVBUEY2ND15YT1uZXcgRmxvYXQ2NEFycmF5KGEpO2cuSEVBUDY0PXdhPW5ldyBCaWdJbnQ2NEFycmF5KGEpO2cuSEVBUFU2ND14YT1uZXcgQmlnVWludDY0QXJyYXkoYSl9dmFyIEFhPVtdLEJhPVtdLENhPVtdLERhPTAsRWE9bnVsbCxGYT1udWxsO1xuZnVuY3Rpb24gR2EoYSl7YT1cIkFib3J0ZWQoXCIrYStcIilcIjt3KGEpO3g9ITA7c2E9MTthPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoYStcIi4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby5cIik7YmEoYSk7dGhyb3cgYTt9dmFyIEhhPWE9PmEuc3RhcnRzV2l0aChcImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxcIikscGE9YT0+YS5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSxJYTtJYT1cIm9ydC13YXNtLXNpbWQud2FzbVwiO2lmKCFIYShJYSkpe3ZhciBKYT1JYTtJYT1nLmxvY2F0ZUZpbGU/Zy5sb2NhdGVGaWxlKEphLHYpOnYrSmF9ZnVuY3Rpb24gS2EoYSl7aWYobmEpcmV0dXJuIG5hKGEpO3Rocm93XCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwiO31cbmZ1bmN0aW9uIExhKGEpe2lmKGlhfHxqYSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZmV0Y2gmJiFwYShhKSlyZXR1cm4gZmV0Y2goYSx7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihiPT57aWYoIWIub2spdGhyb3dgZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnJHthfSdgO3JldHVybiBiLmFycmF5QnVmZmVyKCl9KS5jYXRjaCgoKT0+S2EoYSkpO2lmKG1hKXJldHVybiBuZXcgUHJvbWlzZSgoYixjKT0+e21hKGEsZD0+YihuZXcgVWludDhBcnJheShkKSksYyl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+S2EoYSkpfWZ1bmN0aW9uIE1hKGEsYixjKXtyZXR1cm4gTGEoYSkudGhlbihkPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShkLGIpKS50aGVuKGMsZD0+e3coYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7ZH1gKTtHYShkKX0pfVxuZnVuY3Rpb24gTmEoYSxiKXt2YXIgYz1JYTtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ3x8SGEoYyl8fHBhKGMpfHxrYXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZmV0Y2g/TWEoYyxhLGIpOmZldGNoKGMse2NyZWRlbnRpYWxzOlwic2FtZS1vcmlnaW5cIn0pLnRoZW4oZD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoZCxhKS50aGVuKGIsZnVuY3Rpb24oZSl7dyhgd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICR7ZX1gKTt3KFwiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb25cIik7cmV0dXJuIE1hKGMsYSxiKX0pKX1cbnZhciBPYT17MTI2MTUwNDooYSxiLGMsZCk9PntpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZ3x8IWcuUGgpcmV0dXJuIDE7YT1KKGE+Pj4wKTthLnN0YXJ0c1dpdGgoXCIuL1wiKSYmKGE9YS5zdWJzdHJpbmcoMikpO2E9Zy5QaC5nZXQoYSk7aWYoIWEpcmV0dXJuIDI7Yj4+Pj0wO2M+Pj49MDtpZihiK2M+YS5ieXRlTGVuZ3RoKXJldHVybiAzO3RyeXtyZXR1cm4gRS5zZXQoYS5zdWJhcnJheShiLGIrYyksZD4+PjA+Pj4wKSwwfWNhdGNoe3JldHVybiA0fX0sMTI2MjAwNTooYSxiLGMpPT57Yz1KKGMpO2NvbnN0IGQ9bmV3IFVpbnQ4QXJyYXkoYik7ZC5zZXQoRS5zdWJhcnJheShhPj4+MCxhK2I+Pj4wKSk7XCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiZcInN0cmluZ1wiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlP3JlcXVpcmUoXCJmc1wiKS53cml0ZUZpbGVTeW5jKGMsZCk6KGE9bmV3IEZpbGUoW2RdLGMse3R5cGU6XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIn0pLFxuYT1VUkwuY3JlYXRlT2JqZWN0VVJMKGEpLHdpbmRvdy5vcGVuKGEsXCJfYmxhbmtcIikpfSwxMjYyNTEzOigpPT57Zy4kaCgpfSwxMjYyNTQ0OigpPT57Zy5haSgpfSwxMjYyNTczOigpPT57Zy5laSgpfSwxMjYyNTk4OmE9PmcuWmgoYSksMTI2MjYzMTphPT5nLmNpKGEpLDEyNjI2NjM6KGEsYixjKT0+e2cuVmgoYSxiLGMsITApfSwxMjYyNzAyOihhLGIsYyk9PntnLlZoKGEsYixjKX0sMTI2MjczNTphPT57Zy5qZShcIkFic1wiLGEsdm9pZCAwKX0sMTI2Mjc4NjphPT57Zy5qZShcIk5lZ1wiLGEsdm9pZCAwKX0sMTI2MjgzNzphPT57Zy5qZShcIkZsb29yXCIsYSx2b2lkIDApfSwxMjYyODkwOmE9PntnLmplKFwiQ2VpbFwiLGEsdm9pZCAwKX0sMTI2Mjk0MjphPT57Zy5qZShcIlJlY2lwcm9jYWxcIixhLHZvaWQgMCl9LDEyNjNFMzphPT57Zy5qZShcIlNxcnRcIixhLHZvaWQgMCl9LDEyNjMwNTI6YT0+e2cuamUoXCJFeHBcIixhLHZvaWQgMCl9LDEyNjMxMDM6YT0+e2cuamUoXCJFcmZcIixhLHZvaWQgMCl9LDEyNjMxNTQ6YT0+XG57Zy5qZShcIlNpZ21vaWRcIixhLHZvaWQgMCl9LDEyNjMyMDk6KGEsYixjKT0+e2cuamUoXCJIYXJkU2lnbW9pZFwiLGEse2FscGhhOmIsYmV0YTpjfSl9LDEyNjMyODg6YT0+e2cuamUoXCJMb2dcIixhLHZvaWQgMCl9LDEyNjMzMzk6YT0+e2cuamUoXCJTaW5cIixhLHZvaWQgMCl9LDEyNjMzOTA6YT0+e2cuamUoXCJDb3NcIixhLHZvaWQgMCl9LDEyNjM0NDE6YT0+e2cuamUoXCJUYW5cIixhLHZvaWQgMCl9LDEyNjM0OTI6YT0+e2cuamUoXCJBc2luXCIsYSx2b2lkIDApfSwxMjYzNTQ0OmE9PntnLmplKFwiQWNvc1wiLGEsdm9pZCAwKX0sMTI2MzU5NjphPT57Zy5qZShcIkF0YW5cIixhLHZvaWQgMCl9LDEyNjM2NDg6YT0+e2cuamUoXCJTaW5oXCIsYSx2b2lkIDApfSwxMjYzNzAwOmE9PntnLmplKFwiQ29zaFwiLGEsdm9pZCAwKX0sMTI2Mzc1MjphPT57Zy5qZShcIkFzaW5oXCIsYSx2b2lkIDApfSwxMjYzODA1OmE9PntnLmplKFwiQWNvc2hcIixhLHZvaWQgMCl9LDEyNjM4NTg6YT0+e2cuamUoXCJBdGFuaFwiLGEsdm9pZCAwKX0sXG4xMjYzOTExOmE9PntnLmplKFwiVGFuaFwiLGEsdm9pZCAwKX0sMTI2Mzk2MzphPT57Zy5qZShcIk5vdFwiLGEsdm9pZCAwKX0sMTI2NDAxNDooYSxiLGMpPT57Zy5qZShcIkNsaXBcIixhLHttaW46YixtYXg6Y30pfSwxMjY0MDgzOmE9PntnLmplKFwiQ2xpcFwiLGEsdm9pZCAwKX0sMTI2NDEzNTooYSxiKT0+e2cuamUoXCJFbHVcIixhLHthbHBoYTpifSl9LDEyNjQxOTM6YT0+e2cuamUoXCJSZWx1XCIsYSx2b2lkIDApfSwxMjY0MjQ1OihhLGIpPT57Zy5qZShcIkxlYWt5UmVsdVwiLGEse2FscGhhOmJ9KX0sMTI2NDMwOTooYSxiKT0+e2cuamUoXCJUaHJlc2hvbGRlZFJlbHVcIixhLHthbHBoYTpifSl9LDEyNjQzNzk6KGEsYik9PntnLmplKFwiQ2FzdFwiLGEse3RvOmJ9KX0sMTI2NDQzNzphPT57Zy5qZShcIkFkZFwiLGEsdm9pZCAwKX0sMTI2NDQ4ODphPT57Zy5qZShcIlN1YlwiLGEsdm9pZCAwKX0sMTI2NDUzOTphPT57Zy5qZShcIk11bFwiLGEsdm9pZCAwKX0sMTI2NDU5MDphPT57Zy5qZShcIkRpdlwiLGEsdm9pZCAwKX0sXG4xMjY0NjQxOmE9PntnLmplKFwiUG93XCIsYSx2b2lkIDApfSwxMjY0NjkyOmE9PntnLmplKFwiRXF1YWxcIixhLHZvaWQgMCl9LDEyNjQ3NDU6YT0+e2cuamUoXCJHcmVhdGVyXCIsYSx2b2lkIDApfSwxMjY0ODAwOmE9PntnLmplKFwiR3JlYXRlck9yRXF1YWxcIixhLHZvaWQgMCl9LDEyNjQ4NjI6YT0+e2cuamUoXCJMZXNzXCIsYSx2b2lkIDApfSwxMjY0OTE0OmE9PntnLmplKFwiTGVzc09yRXF1YWxcIixhLHZvaWQgMCl9LDEyNjQ5NzM6KGEsYixjLGQsZSk9PntnLmplKFwiUmVkdWNlTWVhblwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczpkP0FycmF5LmZyb20oRy5zdWJhcnJheShkPj4+MCxlPj4+MCkpOltdfSl9LDEyNjUxMzI6KGEsYixjLGQsZSk9PntnLmplKFwiUmVkdWNlTWF4XCIsYSx7a2VlcERpbXM6ISFiLG5vb3BXaXRoRW1wdHlBeGVzOiEhYyxheGVzOmQ/QXJyYXkuZnJvbShHLnN1YmFycmF5KGQ+Pj4wLGU+Pj4wKSk6W119KX0sMTI2NTI5MDooYSxiLGMsZCxlKT0+XG57Zy5qZShcIlJlZHVjZU1pblwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczpkP0FycmF5LmZyb20oRy5zdWJhcnJheShkPj4+MCxlPj4+MCkpOltdfSl9LDEyNjU0NDg6KGEsYixjLGQsZSk9PntnLmplKFwiUmVkdWNlUHJvZFwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczpkP0FycmF5LmZyb20oRy5zdWJhcnJheShkPj4+MCxlPj4+MCkpOltdfSl9LDEyNjU2MDc6KGEsYixjLGQsZSk9PntnLmplKFwiUmVkdWNlU3VtXCIsYSx7a2VlcERpbXM6ISFiLG5vb3BXaXRoRW1wdHlBeGVzOiEhYyxheGVzOmQ/QXJyYXkuZnJvbShHLnN1YmFycmF5KGQ+Pj4wLGU+Pj4wKSk6W119KX0sMTI2NTc2NTooYSxiLGMsZCxlKT0+e2cuamUoXCJSZWR1Y2VMMVwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczpkP0FycmF5LmZyb20oRy5zdWJhcnJheShkPj4+MCxlPj4+MCkpOltdfSl9LDEyNjU5MjI6KGEsYixjLGQsZSk9Plxue2cuamUoXCJSZWR1Y2VMMlwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczpkP0FycmF5LmZyb20oRy5zdWJhcnJheShkPj4+MCxlPj4+MCkpOltdfSl9LDEyNjYwNzk6KGEsYixjLGQsZSk9PntnLmplKFwiUmVkdWNlTG9nU3VtXCIsYSx7a2VlcERpbXM6ISFiLG5vb3BXaXRoRW1wdHlBeGVzOiEhYyxheGVzOmQ/QXJyYXkuZnJvbShHLnN1YmFycmF5KGQ+Pj4wLGU+Pj4wKSk6W119KX0sMTI2NjI0MDooYSxiLGMsZCxlKT0+e2cuamUoXCJSZWR1Y2VTdW1TcXVhcmVcIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZD4+PjAsZT4+PjApKTpbXX0pfSwxMjY2NDA0OihhLGIsYyxkLGUpPT57Zy5qZShcIlJlZHVjZUxvZ1N1bUV4cFwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczpkP0FycmF5LmZyb20oRy5zdWJhcnJheShkPj4+MCxlPj4+MCkpOltdfSl9LDEyNjY1Njg6YT0+XG57Zy5qZShcIldoZXJlXCIsYSx2b2lkIDApfSwxMjY2NjIxOihhLGIsYyk9PntnLmplKFwiVHJhbnNwb3NlXCIsYSx7cGVybTpiP0FycmF5LmZyb20oRy5zdWJhcnJheShiPj4+MCxjPj4+MCkpOltdfSl9LDEyNjY3Mjk6KGEsYixjLGQpPT57Zy5qZShcIkRlcHRoVG9TcGFjZVwiLGEse2Jsb2Nrc2l6ZTpiLG1vZGU6SihjKSxmb3JtYXQ6ZD9cIk5IV0NcIjpcIk5DSFdcIn0pfSwxMjY2ODYyOihhLGIsYyxkKT0+e2cuamUoXCJEZXB0aFRvU3BhY2VcIixhLHtibG9ja3NpemU6Yixtb2RlOkooYyksZm9ybWF0OmQ/XCJOSFdDXCI6XCJOQ0hXXCJ9KX0sMTI2Njk5NTooYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUpPT57Zy5qZShcIkNvbnZUcmFuc3Bvc2VcIixhLHtmb3JtYXQ6bD9cIk5IV0NcIjpcIk5DSFdcIixhdXRvUGFkOmIsZGlsYXRpb25zOltjXSxncm91cDpkLGtlcm5lbFNoYXBlOltlXSxwYWRzOltmLGhdLHN0cmlkZXM6W2tdLHdJc0NvbnN0OigpPT4hIXpbbT4+PjBdLG91dHB1dFBhZGRpbmc6bj9BcnJheS5mcm9tKEcuc3ViYXJyYXkobj4+PlxuMCxxPj4+MCkpOltdLG91dHB1dFNoYXBlOnI/QXJyYXkuZnJvbShHLnN1YmFycmF5KHI+Pj4wLHA+Pj4wKSk6W10sYWN0aXZhdGlvbjpKKHUpfSl9LDEyNjczOTY6KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCk9PntnLmplKFwiQ29udlRyYW5zcG9zZVwiLGEse2Zvcm1hdDprP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9QYWQ6YixkaWxhdGlvbnM6QXJyYXkuZnJvbShHLnN1YmFycmF5KGM+Pj4wLChjPj4+MCkrMj4+PjApKSxncm91cDpkLGtlcm5lbFNoYXBlOkFycmF5LmZyb20oRy5zdWJhcnJheShlPj4+MCwoZT4+PjApKzI+Pj4wKSkscGFkczpBcnJheS5mcm9tKEcuc3ViYXJyYXkoZj4+PjAsKGY+Pj4wKSs0Pj4+MCkpLHN0cmlkZXM6QXJyYXkuZnJvbShHLnN1YmFycmF5KGg+Pj4wLChoPj4+MCkrMj4+PjApKSx3SXNDb25zdDooKT0+ISF6W2w+Pj4wXSxvdXRwdXRQYWRkaW5nOm0/QXJyYXkuZnJvbShHLnN1YmFycmF5KG0+Pj4wLG4+Pj4wKSk6W10sb3V0cHV0U2hhcGU6cT9BcnJheS5mcm9tKEcuc3ViYXJyYXkocT4+PlxuMCxyPj4+MCkpOltdLGFjdGl2YXRpb246SihwKX0pfSwxMjY3OTYxOihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSk9PntnLmplKFwiQ29udlRyYW5zcG9zZVwiLGEse2Zvcm1hdDpsP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9QYWQ6YixkaWxhdGlvbnM6W2NdLGdyb3VwOmQsa2VybmVsU2hhcGU6W2VdLHBhZHM6W2YsaF0sc3RyaWRlczpba10sd0lzQ29uc3Q6KCk9PiEhelttPj4+MF0sb3V0cHV0UGFkZGluZzpuP0FycmF5LmZyb20oRy5zdWJhcnJheShuPj4+MCxxPj4+MCkpOltdLG91dHB1dFNoYXBlOnI/QXJyYXkuZnJvbShHLnN1YmFycmF5KHI+Pj4wLHA+Pj4wKSk6W10sYWN0aXZhdGlvbjpKKHUpfSl9LDEyNjgzNjI6KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCk9PntnLmplKFwiQ29udlRyYW5zcG9zZVwiLGEse2Zvcm1hdDprP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9QYWQ6YixkaWxhdGlvbnM6QXJyYXkuZnJvbShHLnN1YmFycmF5KGM+Pj4wLChjPj4+MCkrMj4+PjApKSxncm91cDpkLFxua2VybmVsU2hhcGU6QXJyYXkuZnJvbShHLnN1YmFycmF5KGU+Pj4wLChlPj4+MCkrMj4+PjApKSxwYWRzOkFycmF5LmZyb20oRy5zdWJhcnJheShmPj4+MCwoZj4+PjApKzQ+Pj4wKSksc3RyaWRlczpBcnJheS5mcm9tKEcuc3ViYXJyYXkoaD4+PjAsKGg+Pj4wKSsyPj4+MCkpLHdJc0NvbnN0OigpPT4hIXpbbD4+PjBdLG91dHB1dFBhZGRpbmc6bT9BcnJheS5mcm9tKEcuc3ViYXJyYXkobT4+PjAsbj4+PjApKTpbXSxvdXRwdXRTaGFwZTpxP0FycmF5LmZyb20oRy5zdWJhcnJheShxPj4+MCxyPj4+MCkpOltdLGFjdGl2YXRpb246SihwKX0pfSwxMjY4OTI3OihhLGIpPT57Zy5qZShcIkdsb2JhbEF2ZXJhZ2VQb29sXCIsYSx7Zm9ybWF0OmI/XCJOSFdDXCI6XCJOQ0hXXCJ9KX0sMTI2OTAxODooYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSk9PntnLmplKFwiQXZlcmFnZVBvb2xcIixhLHtmb3JtYXQ6eT9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGNlaWxfbW9kZTpjLGNvdW50X2luY2x1ZGVfcGFkOmQsXG5zdG9yYWdlX29yZGVyOmUsZGlsYXRpb25zOltmLGhdLGtlcm5lbF9zaGFwZTpbayxsXSxwYWRzOlttLG4scSxyXSxzdHJpZGVzOltwLHVdfSl9LDEyNjkzMDI6KGEsYik9PntnLmplKFwiR2xvYmFsQXZlcmFnZVBvb2xcIixhLHtmb3JtYXQ6Yj9cIk5IV0NcIjpcIk5DSFdcIn0pfSwxMjY5MzkzOihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KT0+e2cuamUoXCJBdmVyYWdlUG9vbFwiLGEse2Zvcm1hdDp5P1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9fcGFkOmIsY2VpbF9tb2RlOmMsY291bnRfaW5jbHVkZV9wYWQ6ZCxzdG9yYWdlX29yZGVyOmUsZGlsYXRpb25zOltmLGhdLGtlcm5lbF9zaGFwZTpbayxsXSxwYWRzOlttLG4scSxyXSxzdHJpZGVzOltwLHVdfSl9LDEyNjk2Nzc6KGEsYik9PntnLmplKFwiR2xvYmFsTWF4UG9vbFwiLGEse2Zvcm1hdDpiP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDEyNjk3NjQ6KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpPT57Zy5qZShcIk1heFBvb2xcIixhLHtmb3JtYXQ6eT9cblwiTkhXQ1wiOlwiTkNIV1wiLGF1dG9fcGFkOmIsY2VpbF9tb2RlOmMsY291bnRfaW5jbHVkZV9wYWQ6ZCxzdG9yYWdlX29yZGVyOmUsZGlsYXRpb25zOltmLGhdLGtlcm5lbF9zaGFwZTpbayxsXSxwYWRzOlttLG4scSxyXSxzdHJpZGVzOltwLHVdfSl9LDEyNzAwNDQ6KGEsYik9PntnLmplKFwiR2xvYmFsTWF4UG9vbFwiLGEse2Zvcm1hdDpiP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDEyNzAxMzE6KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpPT57Zy5qZShcIk1heFBvb2xcIixhLHtmb3JtYXQ6eT9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGNlaWxfbW9kZTpjLGNvdW50X2luY2x1ZGVfcGFkOmQsc3RvcmFnZV9vcmRlcjplLGRpbGF0aW9uczpbZixoXSxrZXJuZWxfc2hhcGU6W2ssbF0scGFkczpbbSxuLHEscl0sc3RyaWRlczpbcCx1XX0pfSwxMjcwNDExOihhLGIsYyxkLGUpPT57Zy5qZShcIkdlbW1cIixhLHthbHBoYTpiLGJldGE6Yyx0cmFuc0E6ZCx0cmFuc0I6ZX0pfSwxMjcwNTE1OmE9Plxue2cuamUoXCJNYXRNdWxcIixhLHZvaWQgMCl9LDEyNzA1Njk6KGEsYixjLGQpPT57Zy5qZShcIkFyZ01heFwiLGEse2tlZXBEaW1zOiEhYixzZWxlY3RMYXN0SW5kZXg6ISFjLGF4aXM6ZH0pfSwxMjcwNjc3OihhLGIsYyxkKT0+e2cuamUoXCJBcmdNaW5cIixhLHtrZWVwRGltczohIWIsc2VsZWN0TGFzdEluZGV4OiEhYyxheGlzOmR9KX0sMTI3MDc4NTooYSxiKT0+e2cuamUoXCJTb2Z0bWF4XCIsYSx7YXhpczpifSl9LDEyNzA4NDg6KGEsYik9PntnLmplKFwiQ29uY2F0XCIsYSx7YXhpczpifSl9LDEyNzA5MDg6KGEsYixjLGQsZSk9PntnLmplKFwiU3BsaXRcIixhLHtheGlzOmIsbnVtT3V0cHV0czpjLHNwbGl0U2l6ZXM6ZD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZD4+PjAsZT4+PjApKTpbXX0pfSwxMjcxMDQ4OmE9PntnLmplKFwiRXhwYW5kXCIsYSx2b2lkIDApfSwxMjcxMTAyOihhLGIpPT57Zy5qZShcIkdhdGhlclwiLGEse2F4aXM6TnVtYmVyKGIpfSl9LDEyNzExNzM6KGEsYik9PntnLmplKFwiR2F0aGVyRWxlbWVudHNcIixcbmEse2F4aXM6TnVtYmVyKGIpfSl9LDEyNzEyNTI6KGEsYixjLGQsZSxmLGgsayxsLG0sbik9PntnLmplKFwiUmVzaXplXCIsYSx7YW50aWFsaWFzOmIsYXhlczpjP0FycmF5LmZyb20oRy5zdWJhcnJheShjPj4+MCxkPj4+MCkpOltdLGNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlOkooZSksY3ViaWNDb2VmZkE6ZixleGNsdWRlT3V0c2lkZTpoLGV4dHJhcG9sYXRpb25WYWx1ZTprLGtlZXBBc3BlY3RSYXRpb1BvbGljeTpKKGwpLG1vZGU6SihtKSxuZWFyZXN0TW9kZTpKKG4pfSl9LDEyNzE1OTg6KGEsYixjLGQsZSxmLGgpPT57Zy5qZShcIlNsaWNlXCIsYSx7c3RhcnRzOmI/QXJyYXkuZnJvbShHLnN1YmFycmF5KGI+Pj4wLGM+Pj4wKSk6W10sZW5kczpkP0FycmF5LmZyb20oRy5zdWJhcnJheShkPj4+MCxlPj4+MCkpOltdLGF4ZXM6Zj9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZj4+PjAsaD4+PjApKTpbXX0pfSwxMjcxODE0OmE9PntnLmplKFwiVGlsZVwiLGEsdm9pZCAwKX0sMTI3MTg2NjooYSxiLFxuYyxkKT0+e2cuamUoXCJMYXllck5vcm1hbGl6YXRpb25cIixhLHtheGlzOmIsZXBzaWxvbjpjLHNpbXBsaWZpZWQ6ISFkfSl9LDEyNzE5Nzc6KGEsYixjKT0+e2cuamUoXCJJbnN0YW5jZU5vcm1hbGl6YXRpb25cIixhLHtlcHNpbG9uOmIsZm9ybWF0OmM/XCJOSFdDXCI6XCJOQ0hXXCJ9KX0sMTI3MjA5MTooYSxiLGMpPT57Zy5qZShcIkluc3RhbmNlTm9ybWFsaXphdGlvblwiLGEse2Vwc2lsb246Yixmb3JtYXQ6Yz9cIk5IV0NcIjpcIk5DSFdcIn0pfSwxMjcyMjA1OmE9PntnLmplKFwiUmFuZ2VcIixhLHZvaWQgMCl9LDEyNzIyNTg6KGEsYik9PntnLmplKFwiRWluc3VtXCIsYSx7ZXF1YXRpb246SihiKX0pfSwxMjcyMzM5OihhLGIsYyxkLGUpPT57Zy5qZShcIlBhZFwiLGEse21vZGU6Yix2YWx1ZTpjLHBhZHM6ZD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoZD4+PjAsZT4+PjApKTpbXX0pfSwxMjcyNDY2OihhLGIsYyxkLGUsZik9PntnLmplKFwiQmF0Y2hOb3JtYWxpemF0aW9uXCIsYSx7ZXBzaWxvbjpiLG1vbWVudHVtOmMsXG5zcGF0aWFsOiEhZSx0cmFpbmluZ01vZGU6ISFkLGZvcm1hdDpmP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDEyNzI2MzU6KGEsYixjLGQsZSxmKT0+e2cuamUoXCJCYXRjaE5vcm1hbGl6YXRpb25cIixhLHtlcHNpbG9uOmIsbW9tZW50dW06YyxzcGF0aWFsOiEhZSx0cmFpbmluZ01vZGU6ISFkLGZvcm1hdDpmP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDEyNzI4MDQ6KGEsYixjKT0+e2cuamUoXCJDdW1TdW1cIixhLHtleGNsdXNpdmU6TnVtYmVyKGIpLHJldmVyc2U6TnVtYmVyKGMpfSl9LDEyNzI5MDE6KGEsYixjLGQsZSxmLGgsayxsKT0+e2cuamUoXCJBdHRlbnRpb25cIixhLHtudW1IZWFkczpiLGlzVW5pZGlyZWN0aW9uYWw6YyxtYXNrRmlsdGVyVmFsdWU6ZCxzY2FsZTplLGRvUm90YXJ5OmYscWt2SGlkZGVuU2l6ZXM6aD9BcnJheS5mcm9tKEcuc3ViYXJyYXkoTnVtYmVyKGspPj4+MCxOdW1iZXIoaykraD4+PjApKTpbXSxwYXN0UHJlc2VudFNoYXJlQnVmZmVyOiEhbH0pfSwxMjczMTczOmE9PntnLmplKFwiQmlhc0FkZFwiLFxuYSx2b2lkIDApfSwxMjczMjI4OmE9PntnLmplKFwiQmlhc1NwbGl0R2VsdVwiLGEsdm9pZCAwKX0sMTI3MzI4OTphPT57Zy5qZShcIkZhc3RHZWx1XCIsYSx2b2lkIDApfSwxMjczMzQ1OihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKT0+e2cuamUoXCJDb252XCIsYSx7Zm9ybWF0Omw/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b19wYWQ6YixkaWxhdGlvbnM6W2NdLGdyb3VwOmQsa2VybmVsX3NoYXBlOltlXSxwYWRzOmY/QXJyYXkuZnJvbShHLnN1YmFycmF5KGY+Pj4wLGg+Pj4wKSk6W10sc3RyaWRlczpba10sd19pc19jb25zdDooKT0+ISF6W20+Pj4wXSxhY3RpdmF0aW9uOkoobiksYWN0aXZhdGlvbl9wYXJhbXM6cT9BcnJheS5mcm9tKHZhLnN1YmFycmF5KHE+Pj4wLHI+Pj4wKSk6W119KX0sMTI3MzcxNTooYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSk9PntnLmplKFwiQ29udlwiLGEse2Zvcm1hdDpxP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9fcGFkOmIsZGlsYXRpb25zOltjLGRdLGdyb3VwOmUsa2VybmVsX3NoYXBlOltmLFxuaF0scGFkczprP0FycmF5LmZyb20oRy5zdWJhcnJheShrPj4+MCxsPj4+MCkpOltdLHN0cmlkZXM6W20sbl0sd19pc19jb25zdDooKT0+ISF6W3I+Pj4wXSxhY3RpdmF0aW9uOkoocCksYWN0aXZhdGlvbl9wYXJhbXM6dT9BcnJheS5mcm9tKHZhLnN1YmFycmF5KHU+Pj4wLHk+Pj4wKSk6W119KX0sMTI3NDEwNjphPT57Zy5qZShcIkdlbHVcIixhLHZvaWQgMCl9LDEyNzQxNTg6KGEsYixjLGQsZSxmKT0+e2cuamUoXCJNYXRNdWxOQml0c1wiLGEse2s6YixuOmMsYWNjdXJhY3lMZXZlbDpkLGJpdHM6ZSxibG9ja1NpemU6Zn0pfSwxMjc0Mjg1OihhLGIsYyxkLGUsZik9PntnLmplKFwiTXVsdGlIZWFkQXR0ZW50aW9uXCIsYSx7bnVtSGVhZHM6Yixpc1VuaWRpcmVjdGlvbmFsOmMsbWFza0ZpbHRlclZhbHVlOmQsc2NhbGU6ZSxkb1JvdGFyeTpmfSl9LDEyNzQ0NDQ6KGEsYixjLGQsZSk9PntnLmplKFwiUm90YXJ5RW1iZWRkaW5nXCIsYSx7aW50ZXJsZWF2ZWQ6ISFiLG51bUhlYWRzOmMscm90YXJ5RW1iZWRkaW5nRGltOmQsXG5zY2FsZTplfSl9LDEyNzQ1ODM6KGEsYixjKT0+e2cuamUoXCJTa2lwTGF5ZXJOb3JtYWxpemF0aW9uXCIsYSx7ZXBzaWxvbjpiLHNpbXBsaWZpZWQ6ISFjfSl9LDEyNzQ2ODU6KGEsYixjKT0+e2cuamUoXCJTa2lwTGF5ZXJOb3JtYWxpemF0aW9uXCIsYSx7ZXBzaWxvbjpiLHNpbXBsaWZpZWQ6ISFjfSl9LDEyNzQ3ODc6KGEsYixjLGQpPT57Zy5qZShcIkxheWVyTm9ybWFsaXphdGlvblwiLGEse2F4aXM6YixlcHNpbG9uOmMsc2ltcGxpZmllZDohIWR9KX0sMTI3NDg5ODphPT57Zy5kaShhKX0sMTI3NDkzMjooYSxiKT0+Zy5maShhLGIsZy5PaC5naSxnLk9oLmVycm9ycyl9O2Z1bmN0aW9uIFBhKGEpe3RoaXMubmFtZT1cIkV4aXRTdGF0dXNcIjt0aGlzLm1lc3NhZ2U9YFByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJHthfSlgO3RoaXMuc3RhdHVzPWF9dmFyIFFhPVtdLFJhPTAsTD0wO2NsYXNzIFNhe2NvbnN0cnVjdG9yKGEpe3RoaXMuTmg9YTt0aGlzLkloPWEtMjR9fVxudmFyIFphPWE9Pnt2YXIgYj1MO2lmKCFiKXJldHVybiBUYSgwKSwwO3ZhciBjPW5ldyBTYShiKTtJW2MuSWgrMTY+Pj4yPj4+MF09Yjt2YXIgZD1JW2MuSWgrND4+PjI+Pj4wXTtpZighZClyZXR1cm4gVGEoMCksYjtmb3IodmFyIGUgaW4gYSl7dmFyIGY9YVtlXTtpZigwPT09Znx8Zj09PWQpYnJlYWs7aWYoVWEoZixkLGMuSWgrMTYpKXJldHVybiBUYShmKSxifVRhKGQpO3JldHVybiBifSwkYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKFwidXRmOFwiKTp2b2lkIDAsYWI9KGEsYixjKT0+e2I+Pj49MDt2YXIgZD1iK2M7Zm9yKGM9YjthW2NdJiYhKGM+PWQpOykrK2M7aWYoMTY8Yy1iJiZhLmJ1ZmZlciYmJGEpcmV0dXJuICRhLmRlY29kZShhLnN1YmFycmF5KGIsYykpO2ZvcihkPVwiXCI7YjxjOyl7dmFyIGU9YVtiKytdO2lmKGUmMTI4KXt2YXIgZj1hW2IrK10mNjM7aWYoMTkyPT0oZSYyMjQpKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKGUmMzEpPDxcbjZ8Zik7ZWxzZXt2YXIgaD1hW2IrK10mNjM7ZT0yMjQ9PShlJjI0MCk/KGUmMTUpPDwxMnxmPDw2fGg6KGUmNyk8PDE4fGY8PDEyfGg8PDZ8YVtiKytdJjYzOzY1NTM2PmU/ZCs9U3RyaW5nLmZyb21DaGFyQ29kZShlKTooZS09NjU1MzYsZCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxlPj4xMCw1NjMyMHxlJjEwMjMpKX19ZWxzZSBkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpfXJldHVybiBkfSxKPShhLGIpPT4oYT4+Pj0wKT9hYihFLGEsYik6XCJcIixiYj1hPT57Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7KytjKXt2YXIgZD1hLmNoYXJDb2RlQXQoYyk7MTI3Pj1kP2IrKzoyMDQ3Pj1kP2IrPTI6NTUyOTY8PWQmJjU3MzQzPj1kPyhiKz00LCsrYyk6Yis9M31yZXR1cm4gYn0sTT0oYSxiLGMsZCk9PntjPj4+PTA7aWYoISgwPGQpKXJldHVybiAwO3ZhciBlPWM7ZD1jK2QtMTtmb3IodmFyIGY9MDtmPGEubGVuZ3RoOysrZil7dmFyIGg9YS5jaGFyQ29kZUF0KGYpO2lmKDU1Mjk2PD1cbmgmJjU3MzQzPj1oKXt2YXIgaz1hLmNoYXJDb2RlQXQoKytmKTtoPTY1NTM2KygoaCYxMDIzKTw8MTApfGsmMTAyM31pZigxMjc+PWgpe2lmKGM+PWQpYnJlYWs7YltjKys+Pj4wXT1ofWVsc2V7aWYoMjA0Nz49aCl7aWYoYysxPj1kKWJyZWFrO2JbYysrPj4+MF09MTkyfGg+PjZ9ZWxzZXtpZig2NTUzNT49aCl7aWYoYysyPj1kKWJyZWFrO2JbYysrPj4+MF09MjI0fGg+PjEyfWVsc2V7aWYoYyszPj1kKWJyZWFrO2JbYysrPj4+MF09MjQwfGg+PjE4O2JbYysrPj4+MF09MTI4fGg+PjEyJjYzfWJbYysrPj4+MF09MTI4fGg+PjYmNjN9YltjKys+Pj4wXT0xMjh8aCY2M319YltjPj4+MF09MDtyZXR1cm4gYy1lfSxjYixOPWE9Pntmb3IodmFyIGI9XCJcIjtFW2E+Pj4wXTspYis9Y2JbRVthKys+Pj4wXV07cmV0dXJuIGJ9LGRiPXt9LGViPXt9LGZiPXt9LE87XG5mdW5jdGlvbiBnYihhLGIsYz17fSl7dmFyIGQ9Yi5uYW1lO2lmKCFhKXRocm93IG5ldyBPKGB0eXBlIFwiJHtkfVwiIG11c3QgaGF2ZSBhIHBvc2l0aXZlIGludGVnZXIgdHlwZWlkIHBvaW50ZXJgKTtpZihlYi5oYXNPd25Qcm9wZXJ0eShhKSl7aWYoYy5YaClyZXR1cm47dGhyb3cgbmV3IE8oYENhbm5vdCByZWdpc3RlciB0eXBlICcke2R9JyB0d2ljZWApO31lYlthXT1iO2RlbGV0ZSBmYlthXTtkYi5oYXNPd25Qcm9wZXJ0eShhKSYmKGI9ZGJbYV0sZGVsZXRlIGRiW2FdLGIuZm9yRWFjaChlPT5lKCkpKX1mdW5jdGlvbiBQKGEsYixjPXt9KXtpZighKFwiYXJnUGFja0FkdmFuY2VcImluIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJyZWdpc3RlclR5cGUgcmVnaXN0ZXJlZEluc3RhbmNlIHJlcXVpcmVzIGFyZ1BhY2tBZHZhbmNlXCIpO3JldHVybiBnYihhLGIsYyl9XG52YXIgaGI9KGEsYixjKT0+e3N3aXRjaChiKXtjYXNlIDE6cmV0dXJuIGM/ZD0+eltkPj4+MF06ZD0+RVtkPj4+MF07Y2FzZSAyOnJldHVybiBjP2Q9PnRhW2Q+Pj4xPj4+MF06ZD0+dWFbZD4+PjE+Pj4wXTtjYXNlIDQ6cmV0dXJuIGM/ZD0+R1tkPj4+Mj4+PjBdOmQ9PklbZD4+PjI+Pj4wXTtjYXNlIDg6cmV0dXJuIGM/ZD0+d2FbZD4+PjNdOmQ9PnhhW2Q+Pj4zXTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHtifSk6ICR7YX1gKTt9fSxpYj1bXSxRPVtdO2Z1bmN0aW9uIGpiKGEpe2E+Pj49MDs5PGEmJjA9PT0tLVFbYSsxXSYmKFFbYV09dm9pZCAwLGliLnB1c2goYSkpfVxudmFyIFI9YT0+e2lmKCFhKXRocm93IG5ldyBPKFwiQ2Fubm90IHVzZSBkZWxldGVkIHZhbC4gaGFuZGxlID0gXCIrYSk7cmV0dXJuIFFbYV19LFM9YT0+e3N3aXRjaChhKXtjYXNlIHZvaWQgMDpyZXR1cm4gMjtjYXNlIG51bGw6cmV0dXJuIDQ7Y2FzZSAhMDpyZXR1cm4gNjtjYXNlICExOnJldHVybiA4O2RlZmF1bHQ6Y29uc3QgYj1pYi5wb3AoKXx8US5sZW5ndGg7UVtiXT1hO1FbYisxXT0xO3JldHVybiBifX07ZnVuY3Rpb24ga2IoYSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKElbYT4+PjI+Pj4wXSl9XG52YXIgbGI9e25hbWU6XCJlbXNjcmlwdGVuOjp2YWxcIixmcm9tV2lyZVR5cGU6YT0+e3ZhciBiPVIoYSk7amIoYSk7cmV0dXJuIGJ9LHRvV2lyZVR5cGU6KGEsYik9PlMoYiksYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjprYixNaDpudWxsfSxtYj0oYSxiKT0+e3N3aXRjaChiKXtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh2YVtjPj4+Mj4+PjBdKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoeWFbYz4+PjM+Pj4wXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBmbG9hdCB3aWR0aCAoJHtifSk6ICR7YX1gKTt9fSxuYj1cInVuZGVmaW5lZFwiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKFwidXRmLTE2bGVcIik6dm9pZCAwLG9iPShhLGIpPT57dmFyIGM9YT4+MTtmb3IodmFyIGQ9YytiLzI7IShjPj1kKSYmdWFbYz4+PjBdOykrK2M7XG5jPDw9MTtpZigzMjxjLWEmJm5iKXJldHVybiBuYi5kZWNvZGUoRS5zdWJhcnJheShhPj4+MCxjPj4+MCkpO2M9XCJcIjtmb3IoZD0wOyEoZD49Yi8yKTsrK2Qpe3ZhciBlPXRhW2ErMipkPj4+MT4+PjBdO2lmKDA9PWUpYnJlYWs7Yys9U3RyaW5nLmZyb21DaGFyQ29kZShlKX1yZXR1cm4gY30scGI9KGEsYixjKT0+e2M/Pz0yMTQ3NDgzNjQ3O2lmKDI+YylyZXR1cm4gMDtjLT0yO3ZhciBkPWI7Yz1jPDIqYS5sZW5ndGg/Yy8yOmEubGVuZ3RoO2Zvcih2YXIgZT0wO2U8YzsrK2UpdGFbYj4+PjE+Pj4wXT1hLmNoYXJDb2RlQXQoZSksYis9Mjt0YVtiPj4+MT4+PjBdPTA7cmV0dXJuIGItZH0scWI9YT0+MiphLmxlbmd0aCxyYj0oYSxiKT0+e2Zvcih2YXIgYz0wLGQ9XCJcIjshKGM+PWIvNCk7KXt2YXIgZT1HW2ErNCpjPj4+Mj4+PjBdO2lmKDA9PWUpYnJlYWs7KytjOzY1NTM2PD1lPyhlLT02NTUzNixkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGU+PjEwLDU2MzIwfGUmMTAyMykpOmQrPVxuU3RyaW5nLmZyb21DaGFyQ29kZShlKX1yZXR1cm4gZH0sc2I9KGEsYixjKT0+e2I+Pj49MDtjPz89MjE0NzQ4MzY0NztpZig0PmMpcmV0dXJuIDA7dmFyIGQ9YjtjPWQrYy00O2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7KytlKXt2YXIgZj1hLmNoYXJDb2RlQXQoZSk7aWYoNTUyOTY8PWYmJjU3MzQzPj1mKXt2YXIgaD1hLmNoYXJDb2RlQXQoKytlKTtmPTY1NTM2KygoZiYxMDIzKTw8MTApfGgmMTAyM31HW2I+Pj4yPj4+MF09ZjtiKz00O2lmKGIrND5jKWJyZWFrfUdbYj4+PjI+Pj4wXT0wO3JldHVybiBiLWR9LHRiPWE9Pntmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDsrK2Mpe3ZhciBkPWEuY2hhckNvZGVBdChjKTs1NTI5Njw9ZCYmNTczNDM+PWQmJisrYztiKz00fXJldHVybiBifSx2Yj0oYSxiKT0+e3ZhciBjPWViW2FdO2lmKHZvaWQgMD09PWMpdGhyb3cgYT11YihhKSxjPU4oYSksVChhKSxuZXcgTyhgJHtifSBoYXMgdW5rbm93biB0eXBlICR7Y31gKTtyZXR1cm4gY30sd2I9XG4oYSxiLGMpPT57dmFyIGQ9W107YT1hLnRvV2lyZVR5cGUoZCxjKTtkLmxlbmd0aCYmKElbYj4+PjI+Pj4wXT1TKGQpKTtyZXR1cm4gYX0seGI9YT0+e3RyeXthKCl9Y2F0Y2goYil7R2EoYil9fSx5Yj1hPT57aWYoIXgpdHJ5e2EoKTt0cnl7c2E9c2E9YT1zYSxnLm9uRXhpdD8uKGEpLHg9ITAsaGEoYSxuZXcgUGEoYSkpfWNhdGNoKGIpe2IgaW5zdGFuY2VvZiBQYXx8XCJ1bndpbmRcIj09Ynx8aGEoMSxiKX19Y2F0Y2goYil7YiBpbnN0YW5jZW9mIFBhfHxcInVud2luZFwiPT1ifHxoYSgxLGIpfX07XG5mdW5jdGlvbiB6Yigpe3ZhciBhPVUsYj17fTtmb3IobGV0IFtjLGRdb2YgT2JqZWN0LmVudHJpZXMoYSkpYltjXT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBkPyguLi5lKT0+e0FiLnB1c2goYyk7dHJ5e3JldHVybiBkKC4uLmUpfWZpbmFsbHl7eHx8KEFiLnBvcCgpLHQmJjE9PT1WJiYwPT09QWIubGVuZ3RoJiYoVj0wLHhiKEJiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgRmliZXJzJiZGaWJlcnMubWkoKSkpfX06ZDtyZXR1cm4gYn12YXIgVj0wLHQ9bnVsbCxDYj0wLEFiPVtdLERiPXt9LEViPXt9LEZiPTAsR2I9bnVsbCxIYj1bXTtmdW5jdGlvbiBjYSgpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxiKT0+e0diPXtyZXNvbHZlOmEscmVqZWN0OmJ9fSl9XG5mdW5jdGlvbiBJYigpe3ZhciBhPUpiKDY1NTQ4KSxiPWErMTI7SVthPj4+Mj4+PjBdPWI7SVthKzQ+Pj4yPj4+MF09Yis2NTUzNjtiPUFiWzBdO3ZhciBjPURiW2JdO3ZvaWQgMD09PWMmJihjPUZiKyssRGJbYl09YyxFYltjXT1iKTtHW2ErOD4+PjI+Pj4wXT1jO3JldHVybiBhfVxuZnVuY3Rpb24gS2IoYSl7aWYoIXgpe2lmKDA9PT1WKXt2YXIgYj0hMSxjPSExO2EoKGQ9MCk9PntpZigheCYmKENiPWQsYj0hMCxjKSl7Vj0yO3hiKCgpPT5MYih0KSk7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEJyb3dzZXImJkJyb3dzZXIuU2guV2gmJkJyb3dzZXIuU2gucmVzdW1lKCk7ZD0hMTt0cnl7dmFyIGU9KDAsVVtFYltHW3QrOD4+PjI+Pj4wXV1dKSgpfWNhdGNoKGspe2U9ayxkPSEwfXZhciBmPSExO2lmKCF0KXt2YXIgaD1HYjtoJiYoR2I9bnVsbCwoZD9oLnJlamVjdDpoLnJlc29sdmUpKGUpLGY9ITApfWlmKGQmJiFmKXRocm93IGU7fX0pO2M9ITA7Ynx8KFY9MSx0PUliKCksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEJyb3dzZXImJkJyb3dzZXIuU2guV2gmJkJyb3dzZXIuU2gucGF1c2UoKSx4YigoKT0+TWIodCkpKX1lbHNlIDI9PT1WPyhWPTAseGIoTmIpLFQodCksdD1udWxsLEhiLmZvckVhY2goeWIpKTpHYShgaW52YWxpZCBzdGF0ZTogJHtWfWApO3JldHVybiBDYn19XG5mdW5jdGlvbiBPYihhKXtyZXR1cm4gS2IoYj0+e2EoKS50aGVuKGIpfSl9dmFyIFBiPVtdLFFiPXt9LFJiPWE9Pnt2YXIgYj1RYlthXTtyZXR1cm4gdm9pZCAwPT09Yj9OKGEpOmJ9LFNiPSgpPT5cIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxUYj1hPT57dmFyIGI9UGIubGVuZ3RoO1BiLnB1c2goYSk7cmV0dXJuIGJ9LFViPShhLGIpPT57Zm9yKHZhciBjPUFycmF5KGEpLGQ9MDtkPGE7KytkKWNbZF09dmIoSVtiKzQqZD4+PjI+Pj4wXSxcInBhcmFtZXRlciBcIitkKTtyZXR1cm4gY30sVmI9KGEsYik9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLFwibmFtZVwiLHt2YWx1ZTphfSk7XG5mdW5jdGlvbiBXYihhKXt2YXIgYj1GdW5jdGlvbjtpZighKGIgaW5zdGFuY2VvZiBGdW5jdGlvbikpdGhyb3cgbmV3IFR5cGVFcnJvcihgbmV3XyBjYWxsZWQgd2l0aCBjb25zdHJ1Y3RvciB0eXBlICR7dHlwZW9mIGJ9IHdoaWNoIGlzIG5vdCBhIGZ1bmN0aW9uYCk7dmFyIGM9VmIoYi5uYW1lfHxcInVua25vd25GdW5jdGlvbk5hbWVcIixmdW5jdGlvbigpe30pO2MucHJvdG90eXBlPWIucHJvdG90eXBlO2M9bmV3IGM7YT1iLmFwcGx5KGMsYSk7cmV0dXJuIGEgaW5zdGFuY2VvZiBPYmplY3Q/YTpjfVxudmFyIFc9YT0+MD09PWElNCYmKDAhPT1hJTEwMHx8MD09PWElNDAwKSxYYj1bMCwzMSw2MCw5MSwxMjEsMTUyLDE4MiwyMTMsMjQ0LDI3NCwzMDUsMzM1XSxZYj1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XSxaYj1bXSwkYj0oYSxiKT0+e1piLmxlbmd0aD0wO2Zvcih2YXIgYztjPUVbYSsrPj4+MF07KXt2YXIgZD0xMDUhPWM7ZCY9MTEyIT1jO2IrPWQmJmIlOD80OjA7WmIucHVzaCgxMTI9PWM/SVtiPj4+Mj4+PjBdOjEwNj09Yz93YVtiPj4+M106MTA1PT1jP0dbYj4+PjI+Pj4wXTp5YVtiPj4+Mz4+PjBdKTtiKz1kPzg6NH1yZXR1cm4gWmJ9LGFjPXt9LGNjPSgpPT57aWYoIWJjKXt2YXIgYT17VVNFUjpcIndlYl91c2VyXCIsTE9HTkFNRTpcIndlYl91c2VyXCIsUEFUSDpcIi9cIixQV0Q6XCIvXCIsSE9NRTpcIi9ob21lL3dlYl91c2VyXCIsTEFORzooXCJvYmplY3RcIj09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8XG5cIkNcIikucmVwbGFjZShcIi1cIixcIl9cIikrXCIuVVRGLThcIixfOmZhfHxcIi4vdGhpcy5wcm9ncmFtXCJ9LGI7Zm9yKGIgaW4gYWMpdm9pZCAwPT09YWNbYl0/ZGVsZXRlIGFbYl06YVtiXT1hY1tiXTt2YXIgYz1bXTtmb3IoYiBpbiBhKWMucHVzaChgJHtifT0ke2FbYl19YCk7YmM9Y31yZXR1cm4gYmN9LGJjLGRjPVtudWxsLFtdLFtdXSxlYz1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGZjPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07ZnVuY3Rpb24gZ2MoYSl7dmFyIGI9QXJyYXkoYmIoYSkrMSk7TShhLGIsMCxiLmxlbmd0aCk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBoYyhhLGIsYyxkKXtmdW5jdGlvbiBlKHAsdSx5KXtmb3IocD1cIm51bWJlclwiPT10eXBlb2YgcD9wLnRvU3RyaW5nKCk6cHx8XCJcIjtwLmxlbmd0aDx1OylwPXlbMF0rcDtyZXR1cm4gcH1mdW5jdGlvbiBmKHAsdSl7cmV0dXJuIGUocCx1LFwiMFwiKX1mdW5jdGlvbiBoKHAsdSl7ZnVuY3Rpb24geShCKXtyZXR1cm4gMD5CPy0xOjA8Qj8xOjB9dmFyIEE7MD09PShBPXkocC5nZXRGdWxsWWVhcigpLXUuZ2V0RnVsbFllYXIoKSkpJiYwPT09KEE9eShwLmdldE1vbnRoKCktdS5nZXRNb250aCgpKSkmJihBPXkocC5nZXREYXRlKCktdS5nZXREYXRlKCkpKTtyZXR1cm4gQX1mdW5jdGlvbiBrKHApe3N3aXRjaChwLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKHAuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIHA7Y2FzZSAyOnJldHVybiBuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKHAuZ2V0RnVsbFllYXIoKSxcbjAsMik7Y2FzZSA0OnJldHVybiBuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCksMCwxKTtjYXNlIDU6cmV0dXJuIG5ldyBEYXRlKHAuZ2V0RnVsbFllYXIoKS0xLDExLDMxKTtjYXNlIDY6cmV0dXJuIG5ldyBEYXRlKHAuZ2V0RnVsbFllYXIoKS0xLDExLDMwKX19ZnVuY3Rpb24gbChwKXt2YXIgdT1wLktoO2ZvcihwPW5ldyBEYXRlKChuZXcgRGF0ZShwLkxoKzE5MDAsMCwxKSkuZ2V0VGltZSgpKTswPHU7KXt2YXIgeT1wLmdldE1vbnRoKCksQT0oVyhwLmdldEZ1bGxZZWFyKCkpP2VjOmZjKVt5XTtpZih1PkEtcC5nZXREYXRlKCkpdS09QS1wLmdldERhdGUoKSsxLHAuc2V0RGF0ZSgxKSwxMT55P3Auc2V0TW9udGgoeSsxKToocC5zZXRNb250aCgwKSxwLnNldEZ1bGxZZWFyKHAuZ2V0RnVsbFllYXIoKSsxKSk7ZWxzZXtwLnNldERhdGUocC5nZXREYXRlKCkrdSk7YnJlYWt9fXk9bmV3IERhdGUocC5nZXRGdWxsWWVhcigpKzEsMCw0KTt1PWsobmV3IERhdGUocC5nZXRGdWxsWWVhcigpLFxuMCw0KSk7eT1rKHkpO3JldHVybiAwPj1oKHUscCk/MD49aCh5LHApP3AuZ2V0RnVsbFllYXIoKSsxOnAuZ2V0RnVsbFllYXIoKTpwLmdldEZ1bGxZZWFyKCktMX1hPj4+PTA7Yj4+Pj0wO2M+Pj49MDtkPj4+PTA7dmFyIG09SVtkKzQwPj4+Mj4+PjBdO2Q9e2ppOkdbZD4+PjI+Pj4wXSxpaTpHW2QrND4+PjI+Pj4wXSxRaDpHW2QrOD4+PjI+Pj4wXSxUaDpHW2QrMTI+Pj4yPj4+MF0sUmg6R1tkKzE2Pj4+Mj4+PjBdLExoOkdbZCsyMD4+PjI+Pj4wXSxKaDpHW2QrMjQ+Pj4yPj4+MF0sS2g6R1tkKzI4Pj4+Mj4+PjBdLGxpOkdbZCszMj4+PjI+Pj4wXSxoaTpHW2QrMzY+Pj4yPj4+MF0sa2k6bT9KKG0pOlwiXCJ9O2M9SihjKTttPXtcIiVjXCI6XCIlYSAlYiAlZCAlSDolTTolUyAlWVwiLFwiJURcIjpcIiVtLyVkLyV5XCIsXCIlRlwiOlwiJVktJW0tJWRcIixcIiVoXCI6XCIlYlwiLFwiJXJcIjpcIiVJOiVNOiVTICVwXCIsXCIlUlwiOlwiJUg6JU1cIixcIiVUXCI6XCIlSDolTTolU1wiLFwiJXhcIjpcIiVtLyVkLyV5XCIsXCIlWFwiOlwiJUg6JU06JVNcIixcblwiJUVjXCI6XCIlY1wiLFwiJUVDXCI6XCIlQ1wiLFwiJUV4XCI6XCIlbS8lZC8leVwiLFwiJUVYXCI6XCIlSDolTTolU1wiLFwiJUV5XCI6XCIleVwiLFwiJUVZXCI6XCIlWVwiLFwiJU9kXCI6XCIlZFwiLFwiJU9lXCI6XCIlZVwiLFwiJU9IXCI6XCIlSFwiLFwiJU9JXCI6XCIlSVwiLFwiJU9tXCI6XCIlbVwiLFwiJU9NXCI6XCIlTVwiLFwiJU9TXCI6XCIlU1wiLFwiJU91XCI6XCIldVwiLFwiJU9VXCI6XCIlVVwiLFwiJU9WXCI6XCIlVlwiLFwiJU93XCI6XCIld1wiLFwiJU9XXCI6XCIlV1wiLFwiJU95XCI6XCIleVwifTtmb3IodmFyIG4gaW4gbSljPWMucmVwbGFjZShuZXcgUmVnRXhwKG4sXCJnXCIpLG1bbl0pO3ZhciBxPVwiU3VuZGF5IE1vbmRheSBUdWVzZGF5IFdlZG5lc2RheSBUaHVyc2RheSBGcmlkYXkgU2F0dXJkYXlcIi5zcGxpdChcIiBcIikscj1cIkphbnVhcnkgRmVicnVhcnkgTWFyY2ggQXByaWwgTWF5IEp1bmUgSnVseSBBdWd1c3QgU2VwdGVtYmVyIE9jdG9iZXIgTm92ZW1iZXIgRGVjZW1iZXJcIi5zcGxpdChcIiBcIik7bT17XCIlYVwiOnA9PnFbcC5KaF0uc3Vic3RyaW5nKDAsMyksXCIlQVwiOnA9PnFbcC5KaF0sXCIlYlwiOnA9PlxucltwLlJoXS5zdWJzdHJpbmcoMCwzKSxcIiVCXCI6cD0+cltwLlJoXSxcIiVDXCI6cD0+ZigocC5MaCsxOTAwKS8xMDB8MCwyKSxcIiVkXCI6cD0+ZihwLlRoLDIpLFwiJWVcIjpwPT5lKHAuVGgsMixcIiBcIiksXCIlZ1wiOnA9PmwocCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksXCIlR1wiOmwsXCIlSFwiOnA9PmYocC5RaCwyKSxcIiVJXCI6cD0+e3A9cC5RaDswPT1wP3A9MTI6MTI8cCYmKHAtPTEyKTtyZXR1cm4gZihwLDIpfSxcIiVqXCI6cD0+e2Zvcih2YXIgdT0wLHk9MDt5PD1wLlJoLTE7dSs9KFcocC5MaCsxOTAwKT9lYzpmYylbeSsrXSk7cmV0dXJuIGYocC5UaCt1LDMpfSxcIiVtXCI6cD0+ZihwLlJoKzEsMiksXCIlTVwiOnA9PmYocC5paSwyKSxcIiVuXCI6KCk9PlwiXFxuXCIsXCIlcFwiOnA9PjA8PXAuUWgmJjEyPnAuUWg/XCJBTVwiOlwiUE1cIixcIiVTXCI6cD0+ZihwLmppLDIpLFwiJXRcIjooKT0+XCJcXHRcIixcIiV1XCI6cD0+cC5KaHx8NyxcIiVVXCI6cD0+ZihNYXRoLmZsb29yKChwLktoKzctcC5KaCkvNyksMiksXCIlVlwiOnA9Pnt2YXIgdT1cbk1hdGguZmxvb3IoKHAuS2grNy0ocC5KaCs2KSU3KS83KTsyPj0ocC5KaCszNzEtcC5LaC0yKSU3JiZ1Kys7aWYodSk1Mz09dSYmKHk9KHAuSmgrMzcxLXAuS2gpJTcsND09eXx8Mz09eSYmVyhwLkxoKXx8KHU9MSkpO2Vsc2V7dT01Mjt2YXIgeT0ocC5KaCs3LXAuS2gtMSklNzsoND09eXx8NT09eSYmVyhwLkxoJTQwMC0xKSkmJnUrK31yZXR1cm4gZih1LDIpfSxcIiV3XCI6cD0+cC5KaCxcIiVXXCI6cD0+ZihNYXRoLmZsb29yKChwLktoKzctKHAuSmgrNiklNykvNyksMiksXCIleVwiOnA9PihwLkxoKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFwiJVlcIjpwPT5wLkxoKzE5MDAsXCIlelwiOnA9PntwPXAuaGk7dmFyIHU9MDw9cDtwPU1hdGguYWJzKHApLzYwO3JldHVybih1P1wiK1wiOlwiLVwiKStTdHJpbmcoXCIwMDAwXCIrKHAvNjAqMTAwK3AlNjApKS5zbGljZSgtNCl9LFwiJVpcIjpwPT5wLmtpLFwiJSVcIjooKT0+XCIlXCJ9O2M9Yy5yZXBsYWNlKC8lJS9nLFwiXFx4MDBcXHgwMFwiKTtmb3IobiBpbiBtKWMuaW5jbHVkZXMobikmJlxuKGM9Yy5yZXBsYWNlKG5ldyBSZWdFeHAobixcImdcIiksbVtuXShkKSkpO2M9Yy5yZXBsYWNlKC9cXDBcXDAvZyxcIiVcIik7bj1nYyhjKTtpZihuLmxlbmd0aD5iKXJldHVybiAwO3ouc2V0KG4sYT4+PjApO3JldHVybiBuLmxlbmd0aC0xfWZvcih2YXIgaWM9QXJyYXkoMjU2KSxqYz0wOzI1Nj5qYzsrK2pjKWljW2pjXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGpjKTtjYj1pYztPPWcuQmluZGluZ0Vycm9yPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSk7dGhpcy5uYW1lPVwiQmluZGluZ0Vycm9yXCJ9fTtnLkludGVybmFsRXJyb3I9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihhKXtzdXBlcihhKTt0aGlzLm5hbWU9XCJJbnRlcm5hbEVycm9yXCJ9fTtRLnB1c2goMCwxLHZvaWQgMCwxLG51bGwsMSwhMCwxLCExLDEpO2cuY291bnRfZW12YWxfaGFuZGxlcz0oKT0+US5sZW5ndGgvMi01LWliLmxlbmd0aDtcbnZhciBDZj17YmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBPYihhc3luYygpPT57YXdhaXQgZy5iaShhLGIsYyl9KX0sdjpmdW5jdGlvbihhKXthPW5ldyBTYShhPj4+MCk7MD09elthLkloKzEyPj4+MF0mJih6W2EuSWgrMTI+Pj4wXT0xLFJhLS0pO3pbYS5JaCsxMz4+PjBdPTA7UWEucHVzaChhKTtrYyhhLk5oKTtpZihsYyhJW2EuSWgrND4+PjI+Pj4wXSkpYT1JW2EuTmg+Pj4yPj4+MF07ZWxzZXt2YXIgYj1JW2EuSWgrMTY+Pj4yPj4+MF07YT0wIT09Yj9iOmEuTmh9cmV0dXJuIGF9LE46KCk9PntYKDAsMCk7dmFyIGE9UWEucG9wKCk7bWMoYS5OaCk7TD0wfSxhOmZ1bmN0aW9uKCl7cmV0dXJuIFphKFtdKX0sbTpmdW5jdGlvbihhKXtyZXR1cm4gWmEoW2E+Pj4wXSl9LHg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gWmEoW2E+Pj4wLGI+Pj4wXSl9LHE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBaYShbYT4+PjAsYj4+PjAsYz4+PjBdKX0sQmI6KCk9Pnt2YXIgYT1RYS5wb3AoKTthfHxHYShcIm5vIGV4Y2VwdGlvbiB0byB0aHJvd1wiKTtcbnZhciBiPWEuTmg7MD09elthLkloKzEzPj4+MF0mJihRYS5wdXNoKGEpLHpbYS5JaCsxMz4+PjBdPTEselthLkloKzEyPj4+MF09MCxSYSsrKTtMPWI7dGhyb3cgTDt9LHM6ZnVuY3Rpb24oYSxiLGMpe2E+Pj49MDt2YXIgZD1uZXcgU2EoYSk7SVtkLkloKzE2Pj4+Mj4+PjBdPTA7SVtkLkloKzQ+Pj4yPj4+MF09Yj4+PjA7SVtkLkloKzg+Pj4yPj4+MF09Yz4+PjA7TD1hO1JhKys7dGhyb3cgTDt9LGZiOigpPT5SYSxnOmZ1bmN0aW9uKGEpe0x8fD1hPj4+MDt0aHJvdyBMO30sQ2I6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sJGM6ZnVuY3Rpb24oKXt9LE1jOmZ1bmN0aW9uKCl7fSxPYzpmdW5jdGlvbigpe30sR2M6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sWmM6ZnVuY3Rpb24oKXt9LFVjOmZ1bmN0aW9uKCl7fSxZYzpmdW5jdGlvbigpe30sX2I6ZnVuY3Rpb24oKXt9LE5jOmZ1bmN0aW9uKCl7fSxLYzpmdW5jdGlvbigpe30sX2M6ZnVuY3Rpb24oKXt9LExjOmZ1bmN0aW9uKCl7fSxXYjpmdW5jdGlvbihhLFxuYixjKXtiPU4oYj4+PjApO1AoYT4+PjAse25hbWU6Yixmcm9tV2lyZVR5cGU6ZD0+ZCx0b1dpcmVUeXBlOmZ1bmN0aW9uKGQsZSl7aWYoXCJiaWdpbnRcIiE9dHlwZW9mIGUmJlwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG51bGw9PT1lP2U9XCJudWxsXCI6KGQ9dHlwZW9mIGUsZT1cIm9iamVjdFwiPT09ZHx8XCJhcnJheVwiPT09ZHx8XCJmdW5jdGlvblwiPT09ZD9lLnRvU3RyaW5nKCk6XCJcIitlKSxuZXcgVHlwZUVycm9yKGBDYW5ub3QgY29udmVydCBcIiR7ZX1cIiB0byAke3RoaXMubmFtZX1gKTtcIm51bWJlclwiPT10eXBlb2YgZSYmKGU9QmlnSW50KGUpKTtyZXR1cm4gZX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpoYihiLGM+Pj4wLC0xPT1iLmluZGV4T2YoXCJ1XCIpKSxNaDpudWxsfSl9LEVjOmZ1bmN0aW9uKGEsYixjLGQpe2I9TihiPj4+MCk7UChhPj4+MCx7bmFtZTpiLGZyb21XaXJlVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4hIWV9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oZSxcbmYpe3JldHVybiBmP2M6ZH0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoRVtlPj4+MF0pfSxNaDpudWxsfSl9LENjOmZ1bmN0aW9uKGEpe3JldHVybiBQKGE+Pj4wLGxiKX0sVmI6ZnVuY3Rpb24oYSxiLGMpe2I9TihiPj4+MCk7UChhPj4+MCx7bmFtZTpiLGZyb21XaXJlVHlwZTpkPT5kLHRvV2lyZVR5cGU6KGQsZSk9PmUsYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjptYihiLGM+Pj4wKSxNaDpudWxsfSl9LEFhOmZ1bmN0aW9uKGEsYixjLGQsZSl7YT4+Pj0wO2M+Pj49MDtiPU4oYj4+PjApOy0xPT09ZSYmKGU9NDI5NDk2NzI5NSk7ZT1rPT5rO2lmKDA9PT1kKXt2YXIgZj0zMi04KmM7ZT1rPT5rPDxmPj4+Zn12YXIgaD1iLmluY2x1ZGVzKFwidW5zaWduZWRcIik/ZnVuY3Rpb24oayxsKXtyZXR1cm4gbD4+PjB9OmZ1bmN0aW9uKGssbCl7cmV0dXJuIGx9O1AoYSx7bmFtZTpiLFxuZnJvbVdpcmVUeXBlOmUsdG9XaXJlVHlwZTpoLGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6aGIoYixjLDAhPT1kKSxNaDpudWxsfSl9LF86ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoZil7cmV0dXJuIG5ldyBlKHouYnVmZmVyLElbZis0Pj4+Mj4+PjBdLElbZj4+PjI+Pj4wXSl9dmFyIGU9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5LEJpZ0ludDY0QXJyYXksQmlnVWludDY0QXJyYXldW2JdO2M9TihjPj4+MCk7UChhPj4+MCx7bmFtZTpjLGZyb21XaXJlVHlwZTpkLGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZH0se1hoOiEwfSl9LFhiOmZ1bmN0aW9uKGEsYil7Yj1OKGI+Pj4wKTt2YXIgYz1cInN0ZDo6c3RyaW5nXCI9PT1iO1AoYT4+PjAse25hbWU6Yixmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oZCl7dmFyIGU9SVtkPj4+XG4yPj4+MF0sZj1kKzQ7aWYoYylmb3IodmFyIGg9ZixrPTA7azw9ZTsrK2spe3ZhciBsPWYraztpZihrPT1lfHwwPT1FW2w+Pj4wXSl7aD1KKGgsbC1oKTtpZih2b2lkIDA9PT1tKXZhciBtPWg7ZWxzZSBtKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDApLG0rPWg7aD1sKzF9fWVsc2V7bT1BcnJheShlKTtmb3Ioaz0wO2s8ZTsrK2spbVtrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKEVbZitrPj4+MF0pO209bS5qb2luKFwiXCIpfVQoZCk7cmV0dXJuIG19LHRvV2lyZVR5cGU6ZnVuY3Rpb24oZCxlKXtlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJihlPW5ldyBVaW50OEFycmF5KGUpKTt2YXIgZj1cInN0cmluZ1wiPT10eXBlb2YgZTtpZighKGZ8fGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fGUgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpKXRocm93IG5ldyBPKFwiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZ1wiKTt2YXIgaD1jJiZmP2JiKGUpOlxuZS5sZW5ndGg7dmFyIGs9SmIoNCtoKzEpLGw9ays0O0lbaz4+PjI+Pj4wXT1oO2lmKGMmJmYpTShlLEUsbCxoKzEpO2Vsc2UgaWYoZilmb3IoZj0wO2Y8aDsrK2Ype3ZhciBtPWUuY2hhckNvZGVBdChmKTtpZigyNTU8bSl0aHJvdyBUKGwpLG5ldyBPKFwiU3RyaW5nIGhhcyBVVEYtMTYgY29kZSB1bml0cyB0aGF0IGRvIG5vdCBmaXQgaW4gOCBiaXRzXCIpO0VbbCtmPj4+MF09bX1lbHNlIGZvcihmPTA7ZjxoOysrZilFW2wrZj4+PjBdPWVbZl07bnVsbCE9PWQmJmQucHVzaChULGspO3JldHVybiBrfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmtiLE1oKGQpe1QoZCl9fSl9LEFiOmZ1bmN0aW9uKGEsYixjKXtiPj4+PTA7Yz4+Pj0wO2M9TihjKTtpZigyPT09Yil7dmFyIGQ9b2I7dmFyIGU9cGI7dmFyIGY9cWI7dmFyIGg9az0+dWFbaz4+PjE+Pj4wXX1lbHNlIDQ9PT1iJiYoZD1yYixlPXNiLGY9dGIsaD1rPT5JW2s+Pj4yPj4+MF0pO1AoYT4+PjAse25hbWU6YyxcbmZyb21XaXJlVHlwZTprPT57Zm9yKHZhciBsPUlbaz4+PjI+Pj4wXSxtLG49ays0LHE9MDtxPD1sOysrcSl7dmFyIHI9ays0K3EqYjtpZihxPT1sfHwwPT1oKHIpKW49ZChuLHItbiksdm9pZCAwPT09bT9tPW46KG0rPVN0cmluZy5mcm9tQ2hhckNvZGUoMCksbSs9biksbj1yK2J9VChrKTtyZXR1cm4gbX0sdG9XaXJlVHlwZTooayxsKT0+e2lmKFwic3RyaW5nXCIhPXR5cGVvZiBsKXRocm93IG5ldyBPKGBDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIEMrKyBzdHJpbmcgdHlwZSAke2N9YCk7dmFyIG09ZihsKSxuPUpiKDQrbStiKTtJW24+Pj4yPj4+MF09bS9iO2UobCxuKzQsbStiKTtudWxsIT09ayYmay5wdXNoKFQsbik7cmV0dXJuIG59LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6a2IsTWgoayl7VChrKX19KX0sRmM6ZnVuY3Rpb24oYSxiKXtiPU4oYj4+PjApO1AoYT4+PjAse1loOiEwLG5hbWU6YixhcmdQYWNrQWR2YW5jZTowLGZyb21XaXJlVHlwZTooKT0+XG57fSx0b1dpcmVUeXBlOigpPT57fX0pfSxhZDooKT0+MSxrZDpmdW5jdGlvbihhLGIsYyl7Yj4+Pj0wO2M+Pj49MDthPVIoYT4+PjApO2I9dmIoYixcImVtdmFsOjphc1wiKTtyZXR1cm4gd2IoYixjLGEpfSxDZDpmdW5jdGlvbihhKXthPj4+PTA7cmV0dXJuIE9iKCgpPT57YT1SKGEpO3JldHVybiBhLnRoZW4oUyl9KX0sdWQ6ZnVuY3Rpb24oYSxiLGMsZCl7Yz4+Pj0wO2Q+Pj49MDthPVBiW2E+Pj4wXTtiPVIoYj4+PjApO3JldHVybiBhKG51bGwsYixjLGQpfSxpYTpmdW5jdGlvbihhLGIsYyxkLGUpe2M+Pj49MDtkPj4+PTA7ZT4+Pj0wO2E9UGJbYT4+PjBdO2I9UihiPj4+MCk7Yz1SYihjKTtyZXR1cm4gYShiLGJbY10sZCxlKX0sQmM6amIscWQ6ZnVuY3Rpb24oYSxiKXtiPj4+PTA7YT1SKGE+Pj4wKTtiPVIoYik7cmV0dXJuIGE9PWJ9LHpkOmZ1bmN0aW9uKGEpe2E+Pj49MDtpZigwPT09YSlyZXR1cm4gUyhTYigpKTthPVJiKGEpO3JldHVybiBTKFNiKClbYV0pfSxoYTpmdW5jdGlvbihhLFxuYixjKXtiPVViKGEsYj4+PjApO3ZhciBkPWIuc2hpZnQoKTthLS07dmFyIGU9XCJyZXR1cm4gZnVuY3Rpb24gKG9iaiwgZnVuYywgZGVzdHJ1Y3RvcnNSZWYsIGFyZ3MpIHtcXG5cIixmPTAsaD1bXTswPT09YyYmaC5wdXNoKFwib2JqXCIpO2Zvcih2YXIgaz1bXCJyZXRUeXBlXCJdLGw9W2RdLG09MDttPGE7KyttKWgucHVzaChcImFyZ1wiK20pLGsucHVzaChcImFyZ1R5cGVcIittKSxsLnB1c2goYlttXSksZSs9YCAgdmFyIGFyZyR7bX0gPSBhcmdUeXBlJHttfS5yZWFkVmFsdWVGcm9tUG9pbnRlcihhcmdzJHtmP1wiK1wiK2Y6XCJcIn0pO1xcbmAsZis9YlttXS5hcmdQYWNrQWR2YW5jZTtlKz1gICB2YXIgcnYgPSAkezE9PT1jP1wibmV3IGZ1bmNcIjpcImZ1bmMuY2FsbFwifSgke2guam9pbihcIiwgXCIpfSk7XFxuYDtkLllofHwoay5wdXNoKFwiZW12YWxfcmV0dXJuVmFsdWVcIiksbC5wdXNoKHdiKSxlKz1cIiAgcmV0dXJuIGVtdmFsX3JldHVyblZhbHVlKHJldFR5cGUsIGRlc3RydWN0b3JzUmVmLCBydik7XFxuXCIpO2sucHVzaChlK1xuXCJ9O1xcblwiKTthPVdiKGspKC4uLmwpO2M9YG1ldGhvZENhbGxlcjwoJHtiLm1hcChuPT5uLm5hbWUpLmpvaW4oXCIsIFwiKX0pID0+ICR7ZC5uYW1lfT5gO3JldHVybiBUYihWYihjLGEpKX0seWQ6ZnVuY3Rpb24oYSxiKXtiPj4+PTA7YT1SKGE+Pj4wKTtiPVIoYik7cmV0dXJuIFMoYVtiXSl9LGJhOmZ1bmN0aW9uKGEpe2E+Pj49MDs5PGEmJihRW2ErMV0rPTEpfSxtZDpmdW5jdGlvbigpe3JldHVybiBTKFtdKX0saGQ6ZnVuY3Rpb24oYSl7YT1SKGE+Pj4wKTtmb3IodmFyIGI9QXJyYXkoYS5sZW5ndGgpLGM9MDtjPGEubGVuZ3RoO2MrKyliW2NdPWFbY107cmV0dXJuIFMoYil9LFU6ZnVuY3Rpb24oYSl7cmV0dXJuIFMoUmIoYT4+PjApKX0sWGE6ZnVuY3Rpb24oKXtyZXR1cm4gUyh7fSl9LHZkOmZ1bmN0aW9uKGEpe2E+Pj49MDtmb3IodmFyIGI9UihhKTtiLmxlbmd0aDspe3ZhciBjPWIucG9wKCk7Yi5wb3AoKShjKX1qYihhKX0sc2Q6ZnVuY3Rpb24oYSxiLGMpe2I+Pj49MDtjPj4+PTA7XG5hPVIoYT4+PjApO2I9UihiKTtjPVIoYyk7YVtiXT1jfSx6YjpmdW5jdGlvbihhLGIpe2I+Pj49MDthPXZiKGE+Pj4wLFwiX2VtdmFsX3Rha2VfdmFsdWVcIik7YT1hLnJlYWRWYWx1ZUZyb21Qb2ludGVyKGIpO3JldHVybiBTKGEpfSxSYzpmdW5jdGlvbihhLGIpe2E9LTkwMDcxOTkyNTQ3NDA5OTI+YXx8OTAwNzE5OTI1NDc0MDk5MjxhP05hTjpOdW1iZXIoYSk7Yj4+Pj0wO2E9bmV3IERhdGUoMUUzKmEpO0dbYj4+PjI+Pj4wXT1hLmdldFVUQ1NlY29uZHMoKTtHW2IrND4+PjI+Pj4wXT1hLmdldFVUQ01pbnV0ZXMoKTtHW2IrOD4+PjI+Pj4wXT1hLmdldFVUQ0hvdXJzKCk7R1tiKzEyPj4+Mj4+PjBdPWEuZ2V0VVRDRGF0ZSgpO0dbYisxNj4+PjI+Pj4wXT1hLmdldFVUQ01vbnRoKCk7R1tiKzIwPj4+Mj4+PjBdPWEuZ2V0VVRDRnVsbFllYXIoKS0xOTAwO0dbYisyND4+PjI+Pj4wXT1hLmdldFVUQ0RheSgpO0dbYisyOD4+PjI+Pj4wXT0oYS5nZXRUaW1lKCktRGF0ZS5VVEMoYS5nZXRVVENGdWxsWWVhcigpLFxuMCwxLDAsMCwwLDApKS84NjRFNXwwfSxTYzpmdW5jdGlvbihhLGIpe2E9LTkwMDcxOTkyNTQ3NDA5OTI+YXx8OTAwNzE5OTI1NDc0MDk5MjxhP05hTjpOdW1iZXIoYSk7Yj4+Pj0wO2E9bmV3IERhdGUoMUUzKmEpO0dbYj4+PjI+Pj4wXT1hLmdldFNlY29uZHMoKTtHW2IrND4+PjI+Pj4wXT1hLmdldE1pbnV0ZXMoKTtHW2IrOD4+PjI+Pj4wXT1hLmdldEhvdXJzKCk7R1tiKzEyPj4+Mj4+PjBdPWEuZ2V0RGF0ZSgpO0dbYisxNj4+PjI+Pj4wXT1hLmdldE1vbnRoKCk7R1tiKzIwPj4+Mj4+PjBdPWEuZ2V0RnVsbFllYXIoKS0xOTAwO0dbYisyND4+PjI+Pj4wXT1hLmdldERheSgpO0dbYisyOD4+PjI+Pj4wXT0oVyhhLmdldEZ1bGxZZWFyKCkpP1hiOlliKVthLmdldE1vbnRoKCldK2EuZ2V0RGF0ZSgpLTF8MDtHW2IrMzY+Pj4yPj4+MF09LSg2MCphLmdldFRpbWV6b25lT2Zmc2V0KCkpO3ZhciBjPShuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksNiwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxcbmQ9KG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSwwLDEpKS5nZXRUaW1lem9uZU9mZnNldCgpO0dbYiszMj4+PjI+Pj4wXT0oYyE9ZCYmYS5nZXRUaW1lem9uZU9mZnNldCgpPT1NYXRoLm1pbihkLGMpKXwwfSxUYzpmdW5jdGlvbihhKXthPj4+PTA7dmFyIGI9bmV3IERhdGUoR1thKzIwPj4+Mj4+PjBdKzE5MDAsR1thKzE2Pj4+Mj4+PjBdLEdbYSsxMj4+PjI+Pj4wXSxHW2ErOD4+PjI+Pj4wXSxHW2ErND4+PjI+Pj4wXSxHW2E+Pj4yPj4+MF0sMCksYz1HW2ErMzI+Pj4yPj4+MF0sZD1iLmdldFRpbWV6b25lT2Zmc2V0KCksZT0obmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLDYsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCksZj0obmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLDAsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCksaD1NYXRoLm1pbihmLGUpOzA+Yz9HW2ErMzI+Pj4yPj4+MF09TnVtYmVyKGUhPWYmJmg9PWQpOjA8YyE9KGg9PWQpJiYoZT1NYXRoLm1heChmLGUpLGIuc2V0VGltZShiLmdldFRpbWUoKStcbjZFNCooKDA8Yz9oOmUpLWQpKSk7R1thKzI0Pj4+Mj4+PjBdPWIuZ2V0RGF5KCk7R1thKzI4Pj4+Mj4+PjBdPShXKGIuZ2V0RnVsbFllYXIoKSk/WGI6WWIpW2IuZ2V0TW9udGgoKV0rYi5nZXREYXRlKCktMXwwO0dbYT4+PjI+Pj4wXT1iLmdldFNlY29uZHMoKTtHW2ErND4+PjI+Pj4wXT1iLmdldE1pbnV0ZXMoKTtHW2ErOD4+PjI+Pj4wXT1iLmdldEhvdXJzKCk7R1thKzEyPj4+Mj4+PjBdPWIuZ2V0RGF0ZSgpO0dbYSsxNj4+PjI+Pj4wXT1iLmdldE1vbnRoKCk7R1thKzIwPj4+Mj4+PjBdPWIuZ2V0WWVhcigpO2E9Yi5nZXRUaW1lKCk7cmV0dXJuIEJpZ0ludChpc05hTihhKT8tMTphLzFFMyl9LFBjOmZ1bmN0aW9uKCl7cmV0dXJuLTUyfSxRYzpmdW5jdGlvbigpe30sSWM6ZnVuY3Rpb24oYSxiLGMsZCl7Yz4+Pj0wO2Q+Pj49MDt2YXIgZT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksZj1uZXcgRGF0ZShlLDAsMSksaD1uZXcgRGF0ZShlLDYsMSk7ZT1mLmdldFRpbWV6b25lT2Zmc2V0KCk7XG52YXIgaz1oLmdldFRpbWV6b25lT2Zmc2V0KCk7SVthPj4+MD4+PjI+Pj4wXT02MCpNYXRoLm1heChlLGspO0dbYj4+PjA+Pj4yPj4+MF09TnVtYmVyKGUhPWspO2E9bD0+bC50b0xvY2FsZVRpbWVTdHJpbmcodm9pZCAwLHtob3VyMTI6ITEsdGltZVpvbmVOYW1lOlwic2hvcnRcIn0pLnNwbGl0KFwiIFwiKVsxXTtmPWEoZik7aD1hKGgpO2s8ZT8oTShmLEUsYywxNyksTShoLEUsZCwxNykpOihNKGYsRSxkLDE3KSxNKGgsRSxjLDE3KSl9LGJiOigpPT57R2EoXCJcIil9LEE6ZnVuY3Rpb24oYSxiLGMpe2E+Pj49MDtiPSRiKGI+Pj4wLGM+Pj4wKTtyZXR1cm4gT2FbYV0oLi4uYil9LGJjOmZ1bmN0aW9uKGEsYixjKXthPj4+PTA7Yj0kYihiPj4+MCxjPj4+MCk7cmV0dXJuIE9hW2FdKC4uLmIpfSwkYjooKT0+RGF0ZS5ub3coKSxKYzpmdW5jdGlvbigpe3JldHVybiA0Mjk0OTAxNzYwfSxnYTooKT0+cGVyZm9ybWFuY2Uubm93KCksSGM6ZnVuY3Rpb24oYSl7YT4+Pj0wO3ZhciBiPUUubGVuZ3RoO2lmKDQyOTQ5MDE3NjA8XG5hKXJldHVybiExO2Zvcih2YXIgYz0xOzQ+PWM7Yyo9Mil7dmFyIGQ9YiooMSsuMi9jKTtkPU1hdGgubWluKGQsYSsxMDA2NjMyOTYpO3ZhciBlPU1hdGg7ZD1NYXRoLm1heChhLGQpO2E6e2U9KGUubWluLmNhbGwoZSw0Mjk0OTAxNzYwLGQrKDY1NTM2LWQlNjU1MzYpJTY1NTM2KS1yYS5idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzY7dHJ5e3JhLmdyb3coZSk7emEoKTt2YXIgZj0xO2JyZWFrIGF9Y2F0Y2goaCl7fWY9dm9pZCAwfWlmKGYpcmV0dXJuITB9cmV0dXJuITF9LFdjOmZ1bmN0aW9uKGEsYil7YT4+Pj0wO2I+Pj49MDt2YXIgYz0wO2NjKCkuZm9yRWFjaCgoZCxlKT0+e3ZhciBmPWIrYztlPUlbYSs0KmU+Pj4yPj4+MF09Zjtmb3IoZj0wO2Y8ZC5sZW5ndGg7KytmKXpbZSsrPj4+MF09ZC5jaGFyQ29kZUF0KGYpO3pbZT4+PjBdPTA7Yys9ZC5sZW5ndGgrMX0pO3JldHVybiAwfSxYYzpmdW5jdGlvbihhLGIpe2E+Pj49MDtiPj4+PTA7dmFyIGM9Y2MoKTtJW2E+Pj4yPj4+XG4wXT1jLmxlbmd0aDt2YXIgZD0wO2MuZm9yRWFjaChlPT5kKz1lLmxlbmd0aCsxKTtJW2I+Pj4yPj4+MF09ZDtyZXR1cm4gMH0sRGI6KCk9PjUyLFpiOmZ1bmN0aW9uKCl7cmV0dXJuIDUyfSxWYzpmdW5jdGlvbigpe3JldHVybiA3MH0sWWI6ZnVuY3Rpb24oYSxiLGMsZCl7Yj4+Pj0wO2M+Pj49MDtkPj4+PTA7Zm9yKHZhciBlPTAsZj0wO2Y8YztmKyspe3ZhciBoPUlbYj4+PjI+Pj4wXSxrPUlbYis0Pj4+Mj4+PjBdO2IrPTg7Zm9yKHZhciBsPTA7bDxrO2wrKyl7dmFyIG09RVtoK2w+Pj4wXSxuPWRjW2FdOzA9PT1tfHwxMD09PW0/KCgxPT09YT9xYTp3KShhYihuLDApKSxuLmxlbmd0aD0wKTpuLnB1c2gobSl9ZSs9a31JW2Q+Pj4yPj4+MF09ZTtyZXR1cm4gMH0seGI6bmMsY2Q6b2MsdWE6cGMsVzpxYywkOnJjLHJhOnNjLHRhOnRjLGRkOnVjLG9iOnZjLFA6d2Msejp4YyxiOnljLFViOnpjLHlhOkFjLGU6QmMsa2I6Q2MsaDpEYyxYOkVjLGk6RmMsZWQ6R2MsajpIYyx0OkljLHI6SmMsXG5vOktjLFdhOkxjLENhOk1jLG1hOk5jLFFiOk9jLGRiOlBjLEliOlFjLG1iOlJjLGtjOlNjLHhjOlRjLGhjOlVjLGljOlZjLGFjOldjLG9hOlhjLHliOlljLEJhOlpjLEViOiRjLGVhOmFkLGpjOmJkLFRhOmNkLEY6ZGQsRzplZCxHYjpmZCxqZDpnZCxxYTpoZCxPOmpkLFY6a2QsVDpsZCx5Om1kLEZiOm5kLGdjOm9kLEQ6cGQsSGI6cWQsaWQ6cmQsVWE6c2Qsd2E6dGQsbGM6dWQsY2M6dmQsTmI6d2QsYWE6eGQsSTp5ZCxDOnpkLF9hOkFkLGZjOkJkLFE6Q2QsZDpEZCxhYjpFZCxuOkZkLFlhOkdkLHZhOkhkLHdiOklkLGY6SmQseWM6S2QsZGE6TGQsZ2I6TWQsRGE6TmQsbGI6T2QsaGI6UGQsYzpRZCx2YzpSZCxvZDpTZCxrOlRkLHRjOlVkLGw6VmQsd2M6V2Qsc2M6WGQscmQ6WWQscDpaZCxSYTokZCx0YjphZSxRYTpiZSxLYjpjZSxCOmRlLEs6ZWUsUzpmZSwkYTpnZSxwYzpoZSx1YjppZSx6YTpqZSxrYTprZSx4YTpsZSxTYjptZSxMYTpuZSxqYjpvZSxHYTpwZSxuYzpxZSxIYTpyZSxcbklhOnNlLGZkOnRlLHhkOnVlLFo6dmUscGE6d2UscGQ6eGUsd2Q6eWUsTWI6emUsTWE6QWUsS2E6QmUsVGI6Q2UscmM6RGUsSmE6RWUsTmE6RmUscGI6R2UsbGE6SGUsRWE6SWUsbWM6SmUscWM6S2UsSmI6TGUsRmE6TWUsamE6TmUsQWQ6T2UsbmQ6UGUsUjpRZSxlYjpSZSxaYTpTZSxlYzpUZSxpYjpVZSxFOlZlLE06V2UsVmE6WGUsbGQ6WWUsY2E6WmUsbmI6JGUsbmE6YWYsZGM6YmYsQWM6Y2YsdTpkZixMOmVmLHRkOmZmLFBiOmdmLG9jOmhmLEJkOmpmLE9iOmtmLExiOmxmLGNiOm1mLHpjOm5mLFJiOm9mLE9hOnBmLFk6cWYsdWM6cmYsSjpzZixnZDp0Zix2Yjp1ZixzYTp2ZixIOndmLHJiOnhmLFBhOnlmLFNhOnpmLHNiOkFmLHFiOkJmLHc6ZnVuY3Rpb24oYSl7cmV0dXJuIGE+Pj4wfSxEYzpoYyxmYTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gaGMoYT4+PjAsYj4+PjAsYz4+PjAsZD4+PjApfX0sVT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYyl7VT1jLmV4cG9ydHM7VT16YigpO1xuVT1EZigpO3JhPVUuRGQ7emEoKTtCYS51bnNoaWZ0KFUuRWQpO0RhLS07MD09RGEmJihudWxsIT09RWEmJihjbGVhckludGVydmFsKEVhKSxFYT1udWxsKSxGYSYmKGM9RmEsRmE9bnVsbCxjKCkpKTtyZXR1cm4gVX12YXIgYj17YTpDZn07RGErKztpZihnLmluc3RhbnRpYXRlV2FzbSl0cnl7cmV0dXJuIGcuaW5zdGFudGlhdGVXYXNtKGIsYSl9Y2F0Y2goYyl7dyhgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtjfWApLGJhKGMpfU5hKGIsZnVuY3Rpb24oYyl7YShjLmluc3RhbmNlKX0pLmNhdGNoKGJhKTtyZXR1cm57fX0oKSx1Yj1hPT4odWI9VS5GZCkoYSk7Zy5fT3J0SW5pdD0oYSxiKT0+KGcuX09ydEluaXQ9VS5HZCkoYSxiKTtnLl9PcnRHZXRMYXN0RXJyb3I9KGEsYik9PihnLl9PcnRHZXRMYXN0RXJyb3I9VS5IZCkoYSxiKTtcbmcuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zPShhLGIsYyxkLGUsZixoLGssbCxtKT0+KGcuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zPVUuSWQpKGEsYixjLGQsZSxmLGgsayxsLG0pO2cuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyPShhLGIpPT4oZy5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXI9VS5KZCkoYSxiKTtnLl9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGU9KGEsYixjKT0+KGcuX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZT1VLktkKShhLGIsYyk7Zy5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5PShhLGIsYyk9PihnLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnk9VS5MZCkoYSxiLGMpO2cuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucz1hPT4oZy5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zPVUuTWQpKGEpO2cuX09ydENyZWF0ZVNlc3Npb249KGEsYixjKT0+KGcuX09ydENyZWF0ZVNlc3Npb249VS5OZCkoYSxiLGMpO1xuZy5fT3J0UmVsZWFzZVNlc3Npb249YT0+KGcuX09ydFJlbGVhc2VTZXNzaW9uPVUuT2QpKGEpO2cuX09ydEdldElucHV0T3V0cHV0Q291bnQ9KGEsYixjKT0+KGcuX09ydEdldElucHV0T3V0cHV0Q291bnQ9VS5QZCkoYSxiLGMpO2cuX09ydEdldElucHV0TmFtZT0oYSxiKT0+KGcuX09ydEdldElucHV0TmFtZT1VLlFkKShhLGIpO2cuX09ydEdldE91dHB1dE5hbWU9KGEsYik9PihnLl9PcnRHZXRPdXRwdXROYW1lPVUuUmQpKGEsYik7Zy5fT3J0RnJlZT1hPT4oZy5fT3J0RnJlZT1VLlNkKShhKTtnLl9PcnRDcmVhdGVUZW5zb3I9KGEsYixjLGQsZSxmKT0+KGcuX09ydENyZWF0ZVRlbnNvcj1VLlRkKShhLGIsYyxkLGUsZik7Zy5fT3J0R2V0VGVuc29yRGF0YT0oYSxiLGMsZCxlKT0+KGcuX09ydEdldFRlbnNvckRhdGE9VS5VZCkoYSxiLGMsZCxlKTtnLl9PcnRSZWxlYXNlVGVuc29yPWE9PihnLl9PcnRSZWxlYXNlVGVuc29yPVUuVmQpKGEpO1xuZy5fT3J0Q3JlYXRlUnVuT3B0aW9ucz0oYSxiLGMsZCk9PihnLl9PcnRDcmVhdGVSdW5PcHRpb25zPVUuV2QpKGEsYixjLGQpO2cuX09ydEFkZFJ1bkNvbmZpZ0VudHJ5PShhLGIsYyk9PihnLl9PcnRBZGRSdW5Db25maWdFbnRyeT1VLlhkKShhLGIsYyk7Zy5fT3J0UmVsZWFzZVJ1bk9wdGlvbnM9YT0+KGcuX09ydFJlbGVhc2VSdW5PcHRpb25zPVUuWWQpKGEpO2cuX09ydENyZWF0ZUJpbmRpbmc9YT0+KGcuX09ydENyZWF0ZUJpbmRpbmc9VS5aZCkoYSk7Zy5fT3J0QmluZElucHV0PShhLGIsYyk9PihnLl9PcnRCaW5kSW5wdXQ9VS5fZCkoYSxiLGMpO2cuX09ydEJpbmRPdXRwdXQ9KGEsYixjLGQpPT4oZy5fT3J0QmluZE91dHB1dD1VLiRkKShhLGIsYyxkKTtnLl9PcnRDbGVhckJvdW5kT3V0cHV0cz1hPT4oZy5fT3J0Q2xlYXJCb3VuZE91dHB1dHM9VS5hZSkoYSk7Zy5fT3J0UmVsZWFzZUJpbmRpbmc9YT0+KGcuX09ydFJlbGVhc2VCaW5kaW5nPVUuYmUpKGEpO1xuZy5fT3J0UnVuV2l0aEJpbmRpbmc9KGEsYixjLGQsZSk9PihnLl9PcnRSdW5XaXRoQmluZGluZz1VLmNlKShhLGIsYyxkLGUpO2cuX09ydFJ1bj0oYSxiLGMsZCxlLGYsaCxrKT0+KGcuX09ydFJ1bj1VLmRlKShhLGIsYyxkLGUsZixoLGspO2cuX09ydEVuZFByb2ZpbGluZz1hPT4oZy5fT3J0RW5kUHJvZmlsaW5nPVUuZWUpKGEpO2cuX0pzZXBPdXRwdXQ9KGEsYixjKT0+KGcuX0pzZXBPdXRwdXQ9VS5mZSkoYSxiLGMpO2cuX0pzZXBHZXROb2RlTmFtZT1hPT4oZy5fSnNlcEdldE5vZGVOYW1lPVUuZ2UpKGEpO1xudmFyIEpiPWcuX21hbGxvYz1hPT4oSmI9Zy5fbWFsbG9jPVUuaGUpKGEpLFQ9Zy5fZnJlZT1hPT4oVD1nLl9mcmVlPVUuaWUpKGEpLFg9KGEsYik9PihYPVUua2UpKGEsYiksVGE9YT0+KFRhPVUubGUpKGEpLFk9YT0+KFk9VS5tZSkoYSksRWY9YT0+KEVmPVUubmUpKGEpLFo9KCk9PihaPVUub2UpKCksbWM9YT0+KG1jPVUucGUpKGEpLGtjPWE9PihrYz1VLnFlKShhKSxVYT0oYSxiLGMpPT4oVWE9VS5yZSkoYSxiLGMpLGxjPWE9PihsYz1VLnNlKShhKSxkeW5DYWxsX3ZpaT1nLmR5bkNhbGxfdmlpPShhLGIsYyk9PihkeW5DYWxsX3ZpaT1nLmR5bkNhbGxfdmlpPVUudGUpKGEsYixjKSxGZj1nLmR5bkNhbGxfaWlpaT0oYSxiLGMsZCk9PihGZj1nLmR5bkNhbGxfaWlpaT1VLnVlKShhLGIsYyxkKSxkeW5DYWxsX2lpaT1nLmR5bkNhbGxfaWlpPShhLGIsYyk9PihkeW5DYWxsX2lpaT1nLmR5bkNhbGxfaWlpPVUudmUpKGEsYixjKSxHZj1nLmR5bkNhbGxfaWk9KGEsYik9PihHZj1nLmR5bkNhbGxfaWk9XG5VLndlKShhLGIpLEhmPWcuZHluQ2FsbF9paWlpaWlpPShhLGIsYyxkLGUsZixoKT0+KEhmPWcuZHluQ2FsbF9paWlpaWlpPVUueGUpKGEsYixjLGQsZSxmLGgpLGR5bkNhbGxfdmk9Zy5keW5DYWxsX3ZpPShhLGIpPT4oZHluQ2FsbF92aT1nLmR5bkNhbGxfdmk9VS55ZSkoYSxiKSxkeW5DYWxsX3Y9Zy5keW5DYWxsX3Y9YT0+KGR5bkNhbGxfdj1nLmR5bkNhbGxfdj1VLnplKShhKSxJZj1nLmR5bkNhbGxfaWlpaWlpPShhLGIsYyxkLGUsZik9PihJZj1nLmR5bkNhbGxfaWlpaWlpPVUuQWUpKGEsYixjLGQsZSxmKSxKZj1nLmR5bkNhbGxfaWlpaj0oYSxiLGMsZCk9PihKZj1nLmR5bkNhbGxfaWlpaj1VLkJlKShhLGIsYyxkKSxLZj1nLmR5bkNhbGxfaWlpaWk9KGEsYixjLGQsZSk9PihLZj1nLmR5bkNhbGxfaWlpaWk9VS5DZSkoYSxiLGMsZCxlKSxMZj1nLmR5bkNhbGxfdmlpaT0oYSxiLGMsZCk9PihMZj1nLmR5bkNhbGxfdmlpaT1VLkRlKShhLGIsYyxkKSxNZj1nLmR5bkNhbGxfdmlpaWlpPVxuKGEsYixjLGQsZSxmKT0+KE1mPWcuZHluQ2FsbF92aWlpaWk9VS5FZSkoYSxiLGMsZCxlLGYpLE5mPWcuZHluQ2FsbF92aWlpaT0oYSxiLGMsZCxlKT0+KE5mPWcuZHluQ2FsbF92aWlpaT1VLkZlKShhLGIsYyxkLGUpLE9mPWcuZHluQ2FsbF92aWlpaWlpPShhLGIsYyxkLGUsZixoKT0+KE9mPWcuZHluQ2FsbF92aWlpaWlpPVUuR2UpKGEsYixjLGQsZSxmLGgpLFBmPWcuZHluQ2FsbF92aWlqaT0oYSxiLGMsZCxlKT0+KFBmPWcuZHluQ2FsbF92aWlqaT1VLkhlKShhLGIsYyxkLGUpLFFmPWcuZHluQ2FsbF92aWlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxKT0+KFFmPWcuZHluQ2FsbF92aWlpaWlpaWlpaWk9VS5JZSkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpLFJmPWcuZHluQ2FsbF92aWlpampqaWk9KGEsYixjLGQsZSxmLGgsayxsKT0+KFJmPWcuZHluQ2FsbF92aWlpampqaWk9VS5KZSkoYSxiLGMsZCxlLGYsaCxrLGwpLFNmPWcuZHluQ2FsbF9paWQ9KGEsYixjKT0+XG4oU2Y9Zy5keW5DYWxsX2lpZD1VLktlKShhLGIsYyksVGY9Zy5keW5DYWxsX2lpZj0oYSxiLGMpPT4oVGY9Zy5keW5DYWxsX2lpZj1VLkxlKShhLGIsYyksVWY9Zy5keW5DYWxsX2lpaj0oYSxiLGMpPT4oVWY9Zy5keW5DYWxsX2lpaj1VLk1lKShhLGIsYyksVmY9Zy5keW5DYWxsX2ppaT0oYSxiLGMpPT4oVmY9Zy5keW5DYWxsX2ppaT1VLk5lKShhLGIsYyksV2Y9Zy5keW5DYWxsX2k9YT0+KFdmPWcuZHluQ2FsbF9pPVUuT2UpKGEpLFhmPWcuZHluQ2FsbF92aWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsKT0+KFhmPWcuZHluQ2FsbF92aWlpaWlpaWk9VS5QZSkoYSxiLGMsZCxlLGYsaCxrLGwpLFlmPWcuZHluQ2FsbF92aWlpaWlqPShhLGIsYyxkLGUsZixoKT0+KFlmPWcuZHluQ2FsbF92aWlpaWlqPVUuUWUpKGEsYixjLGQsZSxmLGgpLFpmPWcuZHluQ2FsbF9qaT0oYSxiKT0+KFpmPWcuZHluQ2FsbF9qaT1VLlJlKShhLGIpLCRmPWcuZHluQ2FsbF92aWlqPShhLGIsYyxkKT0+KCRmPVxuZy5keW5DYWxsX3ZpaWo9VS5TZSkoYSxiLGMsZCksYWc9Zy5keW5DYWxsX2lpaWlpaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpPT4oYWc9Zy5keW5DYWxsX2lpaWlpaWlpaWlpaT1VLlRlKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSksYmc9Zy5keW5DYWxsX3ZpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0pPT4oYmc9Zy5keW5DYWxsX3ZpaWlpaWlpaWk9VS5VZSkoYSxiLGMsZCxlLGYsaCxrLGwsbSksY2c9Zy5keW5DYWxsX2lqPShhLGIpPT4oY2c9Zy5keW5DYWxsX2lqPVUuVmUpKGEsYiksZGc9Zy5keW5DYWxsX2lpaWlpaj0oYSxiLGMsZCxlLGYpPT4oZGc9Zy5keW5DYWxsX2lpaWlpaj1VLldlKShhLGIsYyxkLGUsZiksZWc9Zy5keW5DYWxsX2o9YT0+KGVnPWcuZHluQ2FsbF9qPVUuWGUpKGEpLGZnPWcuZHluQ2FsbF92aWo9KGEsYixjKT0+KGZnPWcuZHluQ2FsbF92aWo9VS5ZZSkoYSxiLGMpLGdnPWcuZHluQ2FsbF92aWlqamppaWlpaWk9KGEsYixjLGQsXG5lLGYsaCxrLGwsbSxuLHEpPT4oZ2c9Zy5keW5DYWxsX3ZpaWpqamlpaWlpaT1VLlplKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSksaGc9Zy5keW5DYWxsX3ZpaWlqaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpPT4oaGc9Zy5keW5DYWxsX3ZpaWlqaWlpaWlpaT1VLl9lKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSksaWc9Zy5keW5DYWxsX2lpaWlpaWlpPShhLGIsYyxkLGUsZixoLGspPT4oaWc9Zy5keW5DYWxsX2lpaWlpaWlpPVUuJGUpKGEsYixjLGQsZSxmLGgsayksamc9Zy5keW5DYWxsX3ZpaWlpaWlpPShhLGIsYyxkLGUsZixoLGspPT4oamc9Zy5keW5DYWxsX3ZpaWlpaWlpPVUuYWYpKGEsYixjLGQsZSxmLGgsayksa2c9Zy5keW5DYWxsX2lpaWlpaWlpaj0oYSxiLGMsZCxlLGYsaCxrLGwpPT4oa2c9Zy5keW5DYWxsX2lpaWlpaWlpaj1VLmJmKShhLGIsYyxkLGUsZixoLGssbCksbGc9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxcbm0sbixxLHIscCk9PihsZz1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWk9VS5jZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKSxtZz1nLmR5bkNhbGxfaWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCk9PihtZz1nLmR5bkNhbGxfaWlpaWlpaWlpPVUuZGYpKGEsYixjLGQsZSxmLGgsayxsKSxuZz1nLmR5bkNhbGxfaWlpaWlqaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbik9PihuZz1nLmR5bkNhbGxfaWlpaWlqaWlpaWk9VS5lZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKSxvZz1nLmR5bkNhbGxfdmlqamppaWlqPShhLGIsYyxkLGUsZixoLGssbCk9PihvZz1nLmR5bkNhbGxfdmlqamppaWlqPVUuZmYpKGEsYixjLGQsZSxmLGgsayxsKSxwZz1nLmR5bkNhbGxfZmk9KGEsYik9PihwZz1nLmR5bkNhbGxfZmk9VS5nZikoYSxiKSxxZz1nLmR5bkNhbGxfZmlpPShhLGIsYyk9PihxZz1nLmR5bkNhbGxfZmlpPVUuaGYpKGEsYixjKSxyZz1nLmR5bkNhbGxfZGk9KGEsYik9PihyZz1cbmcuZHluQ2FsbF9kaT1VLmpmKShhLGIpLHNnPWcuZHluQ2FsbF9kaWk9KGEsYixjKT0+KHNnPWcuZHluQ2FsbF9kaWk9VS5rZikoYSxiLGMpLHRnPWcuZHluQ2FsbF92aWpqPShhLGIsYyxkKT0+KHRnPWcuZHluQ2FsbF92aWpqPVUubGYpKGEsYixjLGQpLHVnPWcuZHluQ2FsbF9paWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtKT0+KHVnPWcuZHluQ2FsbF9paWlpaWlpaWlpPVUubWYpKGEsYixjLGQsZSxmLGgsayxsLG0pLHZnPWcuZHluQ2FsbF92aWlqaWlpPShhLGIsYyxkLGUsZixoKT0+KHZnPWcuZHluQ2FsbF92aWlqaWlpPVUubmYpKGEsYixjLGQsZSxmLGgpLHdnPWcuZHluQ2FsbF92aWlkPShhLGIsYyxkKT0+KHdnPWcuZHluQ2FsbF92aWlkPVUub2YpKGEsYixjLGQpLHhnPWcuZHluQ2FsbF92aWZmaWlpPShhLGIsYyxkLGUsZixoKT0+KHhnPWcuZHluQ2FsbF92aWZmaWlpPVUucGYpKGEsYixjLGQsZSxmLGgpLHlnPWcuZHluQ2FsbF92aWlmaWlpPShhLGIsYyxkLGUsZixcbmgpPT4oeWc9Zy5keW5DYWxsX3ZpaWZpaWk9VS5xZikoYSxiLGMsZCxlLGYsaCksemc9Zy5keW5DYWxsX3ZpaWlpaWRpaWRpPShhLGIsYyxkLGUsZixoLGssbCxtLG4pPT4oemc9Zy5keW5DYWxsX3ZpaWlpaWRpaWRpPVUucmYpKGEsYixjLGQsZSxmLGgsayxsLG0sbiksQWc9Zy5keW5DYWxsX3ZpaWlpaWlpaWlkaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpPT4oQWc9Zy5keW5DYWxsX3ZpaWlpaWlpaWlkaT1VLnNmKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSksQmc9Zy5keW5DYWxsX2ppaWk9KGEsYixjLGQpPT4oQmc9Zy5keW5DYWxsX2ppaWk9VS50ZikoYSxiLGMsZCksQ2c9Zy5keW5DYWxsX3ZqaWlpaWlpPShhLGIsYyxkLGUsZixoLGspPT4oQ2c9Zy5keW5DYWxsX3ZqaWlpaWlpPVUudWYpKGEsYixjLGQsZSxmLGgsayksRGc9Zy5keW5DYWxsX3ZpaWlkPShhLGIsYyxkLGUpPT4oRGc9Zy5keW5DYWxsX3ZpaWlkPVUudmYpKGEsYixjLGQsZSksRWc9Zy5keW5DYWxsX3ZpaWlpaWlpaWlqaT1cbihhLGIsYyxkLGUsZixoLGssbCxtLG4scSk9PihFZz1nLmR5bkNhbGxfdmlpaWlpaWlpaWppPVUud2YpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKSxGZz1nLmR5bkNhbGxfdmlqaT0oYSxiLGMsZCk9PihGZz1nLmR5bkNhbGxfdmlqaT1VLnhmKShhLGIsYyxkKSxHZz1nLmR5bkNhbGxfdmlqampqampqampqampqaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSk9PihHZz1nLmR5bkNhbGxfdmlqampqampqampqampqaT1VLnlmKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KSxIZz1nLmR5bkNhbGxfdmlpaWppPShhLGIsYyxkLGUsZik9PihIZz1nLmR5bkNhbGxfdmlpaWppPVUuemYpKGEsYixjLGQsZSxmKSxJZz1nLmR5bkNhbGxfdmlqamppaWppPShhLGIsYyxkLGUsZixoLGssbCk9PihJZz1nLmR5bkNhbGxfdmlqamppaWppPVUuQWYpKGEsYixjLGQsZSxmLGgsayxsKSxKZz1nLmR5bkNhbGxfaWlpamk9KGEsYixjLGQsZSk9PihKZz1nLmR5bkNhbGxfaWlpamk9XG5VLkJmKShhLGIsYyxkLGUpLEtnPWcuZHluQ2FsbF9paWlqaWlpaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKT0+KEtnPWcuZHluQ2FsbF9paWlqaWlpaWlpaWlpaT1VLkNmKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApLExnPWcuZHluQ2FsbF92aj0oYSxiKT0+KExnPWcuZHluQ2FsbF92aj1VLkRmKShhLGIpLE1nPWcuZHluQ2FsbF9qamo9KGEsYixjKT0+KE1nPWcuZHluQ2FsbF9qamo9VS5FZikoYSxiLGMpLE5nPWcuZHluQ2FsbF9paWlqaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtKT0+KE5nPWcuZHluQ2FsbF9paWlqaWlpaWlpPVUuRmYpKGEsYixjLGQsZSxmLGgsayxsLG0pLE9nPWcuZHluQ2FsbF92ZmlpaT0oYSxiLGMsZCxlKT0+KE9nPWcuZHluQ2FsbF92ZmlpaT1VLkdmKShhLGIsYyxkLGUpLFBnPWcuZHluQ2FsbF92aWlpaWZmPShhLGIsYyxkLGUsZixoKT0+KFBnPWcuZHluQ2FsbF92aWlpaWZmPVUuSGYpKGEsYixjLGQsZSxmLGgpLFFnPWcuZHluQ2FsbF92aWlpaWlmZj1cbihhLGIsYyxkLGUsZixoLGspPT4oUWc9Zy5keW5DYWxsX3ZpaWlpaWZmPVUuSWYpKGEsYixjLGQsZSxmLGgsayksUmc9Zy5keW5DYWxsX3ZpaWZmPShhLGIsYyxkLGUpPT4oUmc9Zy5keW5DYWxsX3ZpaWZmPVUuSmYpKGEsYixjLGQsZSksU2c9Zy5keW5DYWxsX3ZpaWlpaWlpaWlmaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApPT4oU2c9Zy5keW5DYWxsX3ZpaWlpaWlpaWlmaWlpPVUuS2YpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCksVGc9Zy5keW5DYWxsX3ZpaWlpaWlpaWpqPShhLGIsYyxkLGUsZixoLGssbCxtLG4pPT4oVGc9Zy5keW5DYWxsX3ZpaWlpaWlpaWpqPVUuTGYpKGEsYixjLGQsZSxmLGgsayxsLG0sbiksVWc9Zy5keW5DYWxsX2lpaWlpaWlpaWlpaWlpZmlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEpPT4oVWc9Zy5keW5DYWxsX2lpaWlpaWlpaWlpaWlpZmlpPVUuTWYpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSksXG5WZz1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscik9PihWZz1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaT1VLk5mKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKSxXZz1nLmR5bkNhbGxfaWlpaWlpaWlpaWlpaWlpaWlmaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCk9PihXZz1nLmR5bkNhbGxfaWlpaWlpaWlpaWlpaWlpaWlmaWk9VS5PZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxEKSxYZz1nLmR5bkNhbGxfdmlqamlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSk9PihYZz1nLmR5bkNhbGxfdmlqamlpaWlpaT1VLlBmKShhLGIsYyxkLGUsZixoLGssbCxtKSxZZz1nLmR5bkNhbGxfaWlpaWpqaj0oYSxiLGMsZCxlLGYsaCk9PihZZz1nLmR5bkNhbGxfaWlpaWpqaj1VLlFmKShhLGIsYyxkLGUsZixoKSxaZz1nLmR5bkNhbGxfdmlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sXG5uKT0+KFpnPWcuZHluQ2FsbF92aWlpaWlpaWlpaT1VLlJmKShhLGIsYyxkLGUsZixoLGssbCxtLG4pLCRnPWcuZHluQ2FsbF9paWlqamo9KGEsYixjLGQsZSxmKT0+KCRnPWcuZHluQ2FsbF9paWlqamo9VS5TZikoYSxiLGMsZCxlLGYpLGFoPWcuZHluQ2FsbF9mZmZmZmZmPShhLGIsYyxkLGUsZixoKT0+KGFoPWcuZHluQ2FsbF9mZmZmZmZmPVUuVGYpKGEsYixjLGQsZSxmLGgpLGJoPWcuZHluQ2FsbF92aWlpaWo9KGEsYixjLGQsZSxmKT0+KGJoPWcuZHluQ2FsbF92aWlpaWo9VS5VZikoYSxiLGMsZCxlLGYpLGNoPWcuZHluQ2FsbF92aWlpaWlpamlpZmlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKT0+KGNoPWcuZHluQ2FsbF92aWlpaWlpamlpZmlpaT1VLlZmKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApLGRoPWcuZHluQ2FsbF92ampqampqZmZqaWZpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCKT0+KGRoPWcuZHluQ2FsbF92ampqampqZmZqaWZpaWlpaWk9XG5VLldmKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQiksZWg9Zy5keW5DYWxsX3ZpaWlpaWlmZmppZmlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEpPT4oZWg9Zy5keW5DYWxsX3ZpaWlpaWlmZmppZmlpaWlpPVUuWGYpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSksZmg9Zy5keW5DYWxsX3ZpaWlpaWlmZmpmaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpPT4oZmg9Zy5keW5DYWxsX3ZpaWlpaWlmZmpmaWlpaWk9VS5ZZikoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSksZ2g9Zy5keW5DYWxsX3ZpaWlpaWlmZmppaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUpPT4oZ2g9Zy5keW5DYWxsX3ZpaWlpaWlmZmppaWlpaT1VLlpmKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSksaGg9Zy5keW5DYWxsX3ZqampqampqamZmZmlpaWZpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsXG5tLG4scSxyLHAsdSx5LEEsQixDLEQsRik9PihoaD1nLmR5bkNhbGxfdmpqampqampqZmZmaWlpZmlpaWlpPVUuX2YpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCxGKSxpaD1nLmR5bkNhbGxfdmpqampqamZmZmlmaWppaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyk9PihpaD1nLmR5bkNhbGxfdmpqampqamZmZmlmaWppaWlpaT1VLiRmKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDKSxqaD1nLmR5bkNhbGxfdmpqampqamZmZmlmaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQik9PihqaD1nLmR5bkNhbGxfdmpqampqamZmZmlmaWlpaWlpPVUuYWcpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCKSxraD1nLmR5bkNhbGxfdmpqampqampqZmZmamlmaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRik9PihraD1nLmR5bkNhbGxfdmpqampqampqZmZmamlmaWlpaWlpPVxuVS5iZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYpLGxoPWcuZHluQ2FsbF92aWppaWlpaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKT0+KGxoPWcuZHluQ2FsbF92aWppaWlpaWlpaWlpPVUuY2cpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpLG1oPWcuZHluQ2FsbF92aWpqZmZmaWlpPShhLGIsYyxkLGUsZixoLGssbCxtKT0+KG1oPWcuZHluQ2FsbF92aWpqZmZmaWlpPVUuZGcpKGEsYixjLGQsZSxmLGgsayxsLG0pLG5oPWcuZHluQ2FsbF92aWlpaWlpaWppaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKT0+KG5oPWcuZHluQ2FsbF92aWlpaWlpaWppaWlpPVUuZWcpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpLG9oPWcuZHluQ2FsbF92aWpqampqamlmaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KT0+KG9oPWcuZHluQ2FsbF92aWpqampqamlmaWlpaWk9VS5mZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLFxucSxyLHAsdSkscGg9Zy5keW5DYWxsX3ZpaWZpPShhLGIsYyxkLGUpPT4ocGg9Zy5keW5DYWxsX3ZpaWZpPVUuZ2cpKGEsYixjLGQsZSkscWg9Zy5keW5DYWxsX3ZqampqamlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0pPT4ocWg9Zy5keW5DYWxsX3ZqampqamlpaWk9VS5oZykoYSxiLGMsZCxlLGYsaCxrLGwsbSkscmg9Zy5keW5DYWxsX3ZqampqZmlpaT0oYSxiLGMsZCxlLGYsaCxrLGwpPT4ocmg9Zy5keW5DYWxsX3ZqampqZmlpaT1VLmlnKShhLGIsYyxkLGUsZixoLGssbCksc2g9Zy5keW5DYWxsX3ZpaWlpaWlqaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApPT4oc2g9Zy5keW5DYWxsX3ZpaWlpaWlqaWlpaWlpPVUuamcpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCksdGg9Zy5keW5DYWxsX3ZpamppaT0oYSxiLGMsZCxlLGYpPT4odGg9Zy5keW5DYWxsX3ZpamppaT1VLmtnKShhLGIsYyxkLGUsZiksdWg9Zy5keW5DYWxsX3ZpaWlpaWpqaWlpaWk9KGEsYixjLFxuZCxlLGYsaCxrLGwsbSxuLHEscik9Pih1aD1nLmR5bkNhbGxfdmlpaWlpamppaWlpaT1VLmxnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKSx2aD1nLmR5bkNhbGxfaWlpaWlqaT0oYSxiLGMsZCxlLGYsaCk9Pih2aD1nLmR5bkNhbGxfaWlpaWlqaT1VLm1nKShhLGIsYyxkLGUsZixoKSx3aD1nLmR5bkNhbGxfaWlpaWppPShhLGIsYyxkLGUsZik9Pih3aD1nLmR5bkNhbGxfaWlpaWppPVUubmcpKGEsYixjLGQsZSxmKSx4aD1nLmR5bkNhbGxfdmlpaWlpamlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscik9Pih4aD1nLmR5bkNhbGxfdmlpaWlpamlpaWlpaT1VLm9nKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKSx5aD1nLmR5bkNhbGxfdmlpaWppaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbik9Pih5aD1nLmR5bkNhbGxfdmlpaWppaWlpaWk9VS5wZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKSx6aD1nLmR5bkNhbGxfdmlpamo9KGEsYixjLGQsZSk9Pih6aD1nLmR5bkNhbGxfdmlpamo9XG5VLnFnKShhLGIsYyxkLGUpLEFoPWcuZHluQ2FsbF92aWlpaWppaT0oYSxiLGMsZCxlLGYsaCxrKT0+KEFoPWcuZHluQ2FsbF92aWlpaWppaT1VLnJnKShhLGIsYyxkLGUsZixoLGspLEJoPWcuZHluQ2FsbF92aWlqamlpaT0oYSxiLGMsZCxlLGYsaCxrKT0+KEJoPWcuZHluQ2FsbF92aWlqamlpaT1VLnNnKShhLGIsYyxkLGUsZixoLGspLENoPWcuZHluQ2FsbF9pamlpPShhLGIsYyxkKT0+KENoPWcuZHluQ2FsbF9pamlpPVUudGcpKGEsYixjLGQpLERoPWcuZHluQ2FsbF92aWlpaWlqamppPShhLGIsYyxkLGUsZixoLGssbCxtKT0+KERoPWcuZHluQ2FsbF92aWlpaWlqamppPVUudWcpKGEsYixjLGQsZSxmLGgsayxsLG0pLEVoPWcuZHluQ2FsbF92aWpqamppaWo9KGEsYixjLGQsZSxmLGgsayxsKT0+KEVoPWcuZHluQ2FsbF92aWpqamppaWo9VS52ZykoYSxiLGMsZCxlLGYsaCxrLGwpLEZoPWcuZHluQ2FsbF92aWlpaWlqaWo9KGEsYixjLGQsZSxmLGgsayxsKT0+KEZoPWcuZHluQ2FsbF92aWlpaWlqaWo9XG5VLndnKShhLGIsYyxkLGUsZixoLGssbCksR2g9Zy5keW5DYWxsX3ZpaWlpaWlqaWo9KGEsYixjLGQsZSxmLGgsayxsLG0pPT4oR2g9Zy5keW5DYWxsX3ZpaWlpaWlqaWo9VS54ZykoYSxiLGMsZCxlLGYsaCxrLGwsbSksSGg9Zy5keW5DYWxsX3ZpamlpaT0oYSxiLGMsZCxlLGYpPT4oSGg9Zy5keW5DYWxsX3ZpamlpaT1VLnlnKShhLGIsYyxkLGUsZiksSWg9Zy5keW5DYWxsX3ZpaWlpaWlpaWlmaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpPT4oSWg9Zy5keW5DYWxsX3ZpaWlpaWlpaWlmaT1VLnpnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSksSmg9Zy5keW5DYWxsX2lpaWppaWlpPShhLGIsYyxkLGUsZixoLGspPT4oSmg9Zy5keW5DYWxsX2lpaWppaWlpPVUuQWcpKGEsYixjLGQsZSxmLGgsayksS2g9Zy5keW5DYWxsX3ZpaWlpaWlqamlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApPT4oS2g9Zy5keW5DYWxsX3ZpaWlpaWlqamlpaWlpPVUuQmcpKGEsYixjLGQsZSxcbmYsaCxrLGwsbSxuLHEscixwKSxMaD1nLmR5bkNhbGxfdmlpaWlpaWlqaWlpaWlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSk9PihMaD1nLmR5bkNhbGxfdmlpaWlpaWlqaWlpaWlpPVUuQ2cpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KSxNaD1nLmR5bkNhbGxfdmlmPShhLGIsYyk9PihNaD1nLmR5bkNhbGxfdmlmPVUuRGcpKGEsYixjKSxOaD1nLmR5bkNhbGxfdmlpZj0oYSxiLGMsZCk9PihOaD1nLmR5bkNhbGxfdmlpZj1VLkVnKShhLGIsYyxkKSxPaD1nLmR5bkNhbGxfZmlpaT0oYSxiLGMsZCk9PihPaD1nLmR5bkNhbGxfZmlpaT1VLkZnKShhLGIsYyxkKSxQaD1nLmR5bkNhbGxfZGlpaT0oYSxiLGMsZCk9PihQaD1nLmR5bkNhbGxfZGlpaT1VLkdnKShhLGIsYyxkKSxRaD1nLmR5bkNhbGxfdmlpaWlpaWZpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSk9PihRaD1nLmR5bkNhbGxfdmlpaWlpaWZpaT1VLkhnKShhLGIsYyxkLGUsZixoLGssbCxtKSxSaD1nLmR5bkNhbGxfdmlpaWlpamlpaWlpaWlpaWlpaWlpaWlpaWk9XG4oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYsSCxLLFZhLFdhLFhhKT0+KFJoPWcuZHluQ2FsbF92aWlpaWlqaWlpaWlpaWlpaWlpaWlpaWlpaT1VLklnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRixILEssVmEsV2EsWGEpLFNoPWcuZHluQ2FsbF92aWlqamk9KGEsYixjLGQsZSxmKT0+KFNoPWcuZHluQ2FsbF92aWlqamk9VS5KZykoYSxiLGMsZCxlLGYpLFRoPWcuZHluQ2FsbF9paWlpaWlpaWlpaWppPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKT0+KFRoPWcuZHluQ2FsbF9paWlpaWlpaWlpaWppPVUuS2cpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpLFVoPWcuZHluQ2FsbF92aWlmaWlmaWpqamlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKT0+KFVoPWcuZHluQ2FsbF92aWlmaWlmaWpqamlpPVUuTGcpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpLFZoPWcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpaWlpaWk9XG4oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYpPT4oVmg9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpaWlpaT1VLk1nKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRiksV2g9Zy5keW5DYWxsX3ZpaWlpaWZpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpPT4oV2g9Zy5keW5DYWxsX3ZpaWlpaWZpaWlpaWk9VS5OZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEsciksWGg9Zy5keW5DYWxsX3ZpamlpaWlpaWlqamlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApPT4oWGg9Zy5keW5DYWxsX3ZpamlpaWlpaWlqamlpPVUuT2cpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCksWWg9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMpPT4oWWg9Zy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpaWk9VS5QZykoYSxiLGMsZCxlLGYsaCxrLGwsXG5tLG4scSxyLHAsdSx5LEEsQixDKSxaaD1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCk9PihaaD1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpaWk9VS5RZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxEKSwkaD1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSk9PigkaD1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaT1VLlJnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KSxhaT1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSk9PihhaT1nLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWk9VS5TZykoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBKSxiaT1nLmR5bkNhbGxfdmlpaWlqamo9KGEsYixjLGQsZSxmLGgsayk9PihiaT1cbmcuZHluQ2FsbF92aWlpaWpqaj1VLlRnKShhLGIsYyxkLGUsZixoLGspLGNpPWcuZHluQ2FsbF9paWlpaWQ9KGEsYixjLGQsZSxmKT0+KGNpPWcuZHluQ2FsbF9paWlpaWQ9VS5VZykoYSxiLGMsZCxlLGYpLGRpPWcuZHluQ2FsbF92aWlpaWlpaWpqaj0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuKT0+KGRpPWcuZHluQ2FsbF92aWlpaWlpaWpqaj1VLlZnKShhLGIsYyxkLGUsZixoLGssbCxtLG4pLGVpPWcuZHluQ2FsbF9paWlpaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuKT0+KGVpPWcuZHluQ2FsbF9paWlpaWlpaWlpaT1VLldnKShhLGIsYyxkLGUsZixoLGssbCxtLG4pLGZpPWcuZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaWlmaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxEKT0+KGZpPWcuZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaWlmaT1VLlhnKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQpLGdpPWcuZHluQ2FsbF92aWlpZj1cbihhLGIsYyxkLGUpPT4oZ2k9Zy5keW5DYWxsX3ZpaWlmPVUuWWcpKGEsYixjLGQsZSksaGk9Zy5keW5DYWxsX3ZpaWlqaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0pPT4oaGk9Zy5keW5DYWxsX3ZpaWlqaWlpaWk9VS5aZykoYSxiLGMsZCxlLGYsaCxrLGwsbSksaWk9Zy5keW5DYWxsX3ZpaWlqPShhLGIsYyxkLGUpPT4oaWk9Zy5keW5DYWxsX3ZpaWlqPVUuX2cpKGEsYixjLGQsZSksamk9Zy5keW5DYWxsX2lpampqPShhLGIsYyxkLGUpPT4oamk9Zy5keW5DYWxsX2lpampqPVUuJGcpKGEsYixjLGQsZSksa2k9Zy5keW5DYWxsX3ZpaWlpamk9KGEsYixjLGQsZSxmLGgpPT4oa2k9Zy5keW5DYWxsX3ZpaWlpamk9VS5haCkoYSxiLGMsZCxlLGYsaCksbGk9Zy5keW5DYWxsX2lpampqaT0oYSxiLGMsZCxlLGYpPT4obGk9Zy5keW5DYWxsX2lpampqaT1VLmJoKShhLGIsYyxkLGUsZiksbWk9Zy5keW5DYWxsX2lqaWpqaT0oYSxiLGMsZCxlLGYpPT4obWk9Zy5keW5DYWxsX2lqaWpqaT1VLmNoKShhLFxuYixjLGQsZSxmKSxuaT1nLmR5bkNhbGxfdmlpaWpqaWlpPShhLGIsYyxkLGUsZixoLGssbCk9PihuaT1nLmR5bkNhbGxfdmlpaWpqaWlpPVUuZGgpKGEsYixjLGQsZSxmLGgsayxsKSxvaT1nLmR5bkNhbGxfaWlpaWlqamk9KGEsYixjLGQsZSxmLGgsayk9PihvaT1nLmR5bkNhbGxfaWlpaWlqamk9VS5laCkoYSxiLGMsZCxlLGYsaCxrKSxwaT1nLmR5bkNhbGxfaWlpaWZpPShhLGIsYyxkLGUsZik9PihwaT1nLmR5bkNhbGxfaWlpaWZpPVUuZmgpKGEsYixjLGQsZSxmKSxxaT1nLmR5bkNhbGxfaWlpamlpPShhLGIsYyxkLGUsZik9PihxaT1nLmR5bkNhbGxfaWlpamlpPVUuZ2gpKGEsYixjLGQsZSxmKSxyaT1nLmR5bkNhbGxfaWlpaWlpaWlpamlpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSk9PihyaT1nLmR5bkNhbGxfaWlpaWlpaWlpamlpPVUuaGgpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKSxzaT1nLmR5bkNhbGxfaWlpaWpqaWk9KGEsYixjLGQsZSxmLGgsayk9PihzaT1nLmR5bkNhbGxfaWlpaWpqaWk9XG5VLmloKShhLGIsYyxkLGUsZixoLGspLHRpPWcuZHluQ2FsbF9paWlpaWlqamppaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuKT0+KHRpPWcuZHluQ2FsbF9paWlpaWlqamppaT1VLmpoKShhLGIsYyxkLGUsZixoLGssbCxtLG4pLHVpPWcuZHluQ2FsbF9paWlqaWlpPShhLGIsYyxkLGUsZixoKT0+KHVpPWcuZHluQ2FsbF9paWlqaWlpPVUua2gpKGEsYixjLGQsZSxmLGgpLHZpPWcuZHluQ2FsbF9paWlpaWlpaWpqamZpPShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKT0+KHZpPWcuZHluQ2FsbF9paWlpaWlpaWpqamZpPVUubGgpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpLHdpPWcuZHluQ2FsbF9paWppaWlpPShhLGIsYyxkLGUsZixoKT0+KHdpPWcuZHluQ2FsbF9paWppaWlpPVUubWgpKGEsYixjLGQsZSxmLGgpLHhpPWcuZHluQ2FsbF9paWpqamlpPShhLGIsYyxkLGUsZixoKT0+KHhpPWcuZHluQ2FsbF9paWpqamlpPVUubmgpKGEsYixjLGQsZSxmLGgpLHlpPWcuZHluQ2FsbF9qaWo9XG4oYSxiLGMpPT4oeWk9Zy5keW5DYWxsX2ppaj1VLm9oKShhLGIsYyksemk9Zy5keW5DYWxsX2lpamk9KGEsYixjLGQpPT4oemk9Zy5keW5DYWxsX2lpamk9VS5waCkoYSxiLGMsZCksQWk9Zy5keW5DYWxsX2lpaWY9KGEsYixjLGQpPT4oQWk9Zy5keW5DYWxsX2lpaWY9VS5xaCkoYSxiLGMsZCksQmk9Zy5keW5DYWxsX3ZpZGk9KGEsYixjLGQpPT4oQmk9Zy5keW5DYWxsX3ZpZGk9VS5yaCkoYSxiLGMsZCksQ2k9Zy5keW5DYWxsX3ZqaWlpPShhLGIsYyxkLGUpPT4oQ2k9Zy5keW5DYWxsX3ZqaWlpPVUuc2gpKGEsYixjLGQsZSksRGk9Zy5keW5DYWxsX2RpaWlpPShhLGIsYyxkLGUpPT4oRGk9Zy5keW5DYWxsX2RpaWlpPVUudGgpKGEsYixjLGQsZSksRWk9Zy5keW5DYWxsX2RpaWlpaT0oYSxiLGMsZCxlLGYpPT4oRWk9Zy5keW5DYWxsX2RpaWlpaT1VLnVoKShhLGIsYyxkLGUsZiksRmk9Zy5keW5DYWxsX3ZpaWlqamlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpPT4oRmk9Zy5keW5DYWxsX3ZpaWlqamlpaWlpaT1cblUudmgpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKSxHaT1nLmR5bkNhbGxfdmlpamppampqamlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscik9PihHaT1nLmR5bkNhbGxfdmlpamppampqamlpaT1VLndoKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKSxIaT1nLmR5bkNhbGxfaWlpaWo9KGEsYixjLGQsZSk9PihIaT1nLmR5bkNhbGxfaWlpaWo9VS54aCkoYSxiLGMsZCxlKSxJaT1nLmR5bkNhbGxfdmlpaWppaT0oYSxiLGMsZCxlLGYsaCk9PihJaT1nLmR5bkNhbGxfdmlpaWppaT1VLnloKShhLGIsYyxkLGUsZixoKSxKaT1nLmR5bkNhbGxfdmlpamlpaWlpaWlpaT0oYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscik9PihKaT1nLmR5bkNhbGxfdmlpamlpaWlpaWlpaT1VLnpoKShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKSxLaT1nLmR5bkNhbGxfZmlpaWk9KGEsYixjLGQsZSk9PihLaT1nLmR5bkNhbGxfZmlpaWk9VS5BaCkoYSxiLGMsZCxlKSxMaT1nLmR5bkNhbGxfamZpPVxuKGEsYixjKT0+KExpPWcuZHluQ2FsbF9qZmk9VS5CaCkoYSxiLGMpLE1pPWcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWk9KGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KT0+KE1pPWcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWk9VS5DaCkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUpLE5pPWcuZHluQ2FsbF9qaWlqPShhLGIsYyxkKT0+KE5pPWcuZHluQ2FsbF9qaWlqPVUuRGgpKGEsYixjLGQpLE1iPWE9PihNYj1VLkVoKShhKSxCYj0oKT0+KEJiPVUuRmgpKCksTGI9YT0+KExiPVUuR2gpKGEpLE5iPSgpPT4oTmI9VS5IaCkoKTtnLl9fX3N0YXJ0X2VtX2pzPTEyNzUwNDQ7Zy5fX19zdG9wX2VtX2pzPTEyNzUyMDU7ZnVuY3Rpb24gRGMoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtyZXR1cm4gRmYoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1cbmZ1bmN0aW9uIEJjKGEsYixjKXt2YXIgZD1aKCk7dHJ5e3JldHVybiBkeW5DYWxsX2lpaShhLGIsYyl9Y2F0Y2goZSl7WShkKTtpZihlIT09ZSswKXRocm93IGU7WCgxLDApfX1mdW5jdGlvbiBKZChhLGIsYyl7dmFyIGQ9WigpO3RyeXtkeW5DYWxsX3ZpaShhLGIsYyl9Y2F0Y2goZSl7WShkKTtpZihlIT09ZSswKXRocm93IGU7WCgxLDApfX1mdW5jdGlvbiB5YyhhLGIpe3ZhciBjPVooKTt0cnl7cmV0dXJuIEdmKGEsYil9Y2F0Y2goZCl7WShjKTtpZihkIT09ZCswKXRocm93IGQ7WCgxLDApfX1mdW5jdGlvbiBGZChhLGIpe3ZhciBjPVooKTt0cnl7ZHluQ2FsbF92aShhLGIpfWNhdGNoKGQpe1koYyk7aWYoZCE9PWQrMCl0aHJvdyBkO1goMSwwKX19ZnVuY3Rpb24gZGQoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtyZXR1cm4gSmYoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1cbmZ1bmN0aW9uIERkKGEpe3ZhciBiPVooKTt0cnl7ZHluQ2FsbF92KGEpfWNhdGNoKGMpe1koYik7aWYoYyE9PWMrMCl0aHJvdyBjO1goMSwwKX19ZnVuY3Rpb24gSWMoYSxiLGMsZCxlLGYsaCl7dmFyIGs9WigpO3RyeXtyZXR1cm4gSGYoYSxiLGMsZCxlLGYsaCl9Y2F0Y2gobCl7WShrKTtpZihsIT09bCswKXRocm93IGw7WCgxLDApfX1mdW5jdGlvbiBIYyhhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtyZXR1cm4gSWYoYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24gRmMoYSxiLGMsZCxlKXt2YXIgZj1aKCk7dHJ5e3JldHVybiBLZihhLGIsYyxkLGUpfWNhdGNoKGgpe1koZik7aWYoaCE9PWgrMCl0aHJvdyBoO1goMSwwKX19ZnVuY3Rpb24gUWQoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtMZihhLGIsYyxkKX1jYXRjaChmKXtZKGUpO2lmKGYhPT1mKzApdGhyb3cgZjtYKDEsMCl9fVxuZnVuY3Rpb24gVGQoYSxiLGMsZCxlKXt2YXIgZj1aKCk7dHJ5e05mKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1mdW5jdGlvbiBWZChhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtNZihhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1mdW5jdGlvbiBaZChhLGIsYyxkLGUsZixoKXt2YXIgaz1aKCk7dHJ5e09mKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19ZnVuY3Rpb24ga2UoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpe3ZhciByPVooKTt0cnl7UWYoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpfWNhdGNoKHApe1kocik7aWYocCE9PXArMCl0aHJvdyBwO1goMSwwKX19ZnVuY3Rpb24gemMoYSxiLGMpe3ZhciBkPVooKTt0cnl7cmV0dXJuIFNmKGEsYixjKX1jYXRjaChlKXtZKGQpO2lmKGUhPT1lKzApdGhyb3cgZTtYKDEsMCl9fVxuZnVuY3Rpb24gQWMoYSxiLGMpe3ZhciBkPVooKTt0cnl7cmV0dXJuIFRmKGEsYixjKX1jYXRjaChlKXtZKGQpO2lmKGUhPT1lKzApdGhyb3cgZTtYKDEsMCl9fWZ1bmN0aW9uIG1kKGEsYixjKXt2YXIgZD1aKCk7dHJ5e3JldHVybiBVZihhLGIsYyl9Y2F0Y2goZSl7WShkKTtpZihlIT09ZSswKXRocm93IGU7WCgxLDApfX1mdW5jdGlvbiB5ZChhLGIsYyl7dmFyIGQ9WigpO3RyeXtyZXR1cm4gVmYoYSxiLGMpfWNhdGNoKGUpe1koZCk7aWYoZSE9PWUrMCl0aHJvdyBlO1goMSwwKTtyZXR1cm4gMG59fWZ1bmN0aW9uIGVlKGEsYixjLGQsZSxmLGgsayxsKXt2YXIgbT1aKCk7dHJ5e1hmKGEsYixjLGQsZSxmLGgsayxsKX1jYXRjaChuKXtZKG0pO2lmKG4hPT1uKzApdGhyb3cgbjtYKDEsMCl9fWZ1bmN0aW9uIHhjKGEpe3ZhciBiPVooKTt0cnl7cmV0dXJuIFdmKGEpfWNhdGNoKGMpe1koYik7aWYoYyE9PWMrMCl0aHJvdyBjO1goMSwwKX19XG5mdW5jdGlvbiBkZihhLGIsYyl7dmFyIGQ9WigpO3RyeXtmZyhhLGIsYyl9Y2F0Y2goZSl7WShkKTtpZihlIT09ZSswKXRocm93IGU7WCgxLDApfX1mdW5jdGlvbiBXZShhLGIsYyxkLGUpe3ZhciBmPVooKTt0cnl7UGYoYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fWZ1bmN0aW9uIENlKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7WWYoYSxiLGMsZCxlLGYsaCl9Y2F0Y2gobCl7WShrKTtpZihsIT09bCswKXRocm93IGw7WCgxLDApfX1mdW5jdGlvbiBjZihhLGIsYyxkLGUsZixoLGssbCxtLG4scSl7dmFyIHI9WigpO3RyeXtnZyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSl9Y2F0Y2gocCl7WShyKTtpZihwIT09cCswKXRocm93IHA7WCgxLDApfX1cbmZ1bmN0aW9uIFJlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKXt2YXIgcj1aKCk7dHJ5e2hnKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKX1jYXRjaChwKXtZKHIpO2lmKHAhPT1wKzApdGhyb3cgcDtYKDEsMCl9fWZ1bmN0aW9uIEpjKGEsYixjLGQsZSxmLGgsayl7dmFyIGw9WigpO3RyeXtyZXR1cm4gaWcoYSxiLGMsZCxlLGYsaCxrKX1jYXRjaChtKXtZKGwpO2lmKG0hPT1tKzApdGhyb3cgbTtYKDEsMCl9fWZ1bmN0aW9uIGRlKGEsYixjLGQsZSxmLGgsayl7dmFyIGw9WigpO3RyeXtqZyhhLGIsYyxkLGUsZixoLGspfWNhdGNoKG0pe1kobCk7aWYobSE9PW0rMCl0aHJvdyBtO1goMSwwKX19ZnVuY3Rpb24gTmMoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpe3ZhciByPVooKTt0cnl7cmV0dXJuIGFnKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKX1jYXRjaChwKXtZKHIpO2lmKHAhPT1wKzApdGhyb3cgcDtYKDEsMCl9fVxuZnVuY3Rpb24gZmUoYSxiLGMsZCxlLGYsaCxrLGwsbSl7dmFyIG49WigpO3RyeXtiZyhhLGIsYyxkLGUsZixoLGssbCxtKX1jYXRjaChxKXtZKG4pO2lmKHEhPT1xKzApdGhyb3cgcTtYKDEsMCl9fWZ1bmN0aW9uIG1lKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCl7dmFyIHU9WigpO3RyeXtsZyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApfWNhdGNoKHkpe1kodSk7aWYoeSE9PXkrMCl0aHJvdyB5O1goMSwwKX19ZnVuY3Rpb24gWWMoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKXt2YXIgcT1aKCk7dHJ5e3JldHVybiBuZyhhLGIsYyxkLGUsZixoLGssbCxtLG4pfWNhdGNoKHIpe1kocSk7aWYociE9PXIrMCl0aHJvdyByO1goMSwwKX19ZnVuY3Rpb24gS2MoYSxiLGMsZCxlLGYsaCxrLGwpe3ZhciBtPVooKTt0cnl7cmV0dXJuIG1nKGEsYixjLGQsZSxmLGgsayxsKX1jYXRjaChuKXtZKG0pO2lmKG4hPT1uKzApdGhyb3cgbjtYKDEsMCl9fVxuZnVuY3Rpb24gbmYoYSxiLGMsZCxlLGYsaCxrLGwpe3ZhciBtPVooKTt0cnl7b2coYSxiLGMsZCxlLGYsaCxrLGwpfWNhdGNoKG4pe1kobSk7aWYobiE9PW4rMCl0aHJvdyBuO1goMSwwKX19ZnVuY3Rpb24gVmUoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXskZihhLGIsYyxkKX1jYXRjaChmKXtZKGUpO2lmKGYhPT1mKzApdGhyb3cgZjtYKDEsMCl9fWZ1bmN0aW9uIHRjKGEsYil7dmFyIGM9WigpO3RyeXtyZXR1cm4gcGcoYSxiKX1jYXRjaChkKXtZKGMpO2lmKGQhPT1kKzApdGhyb3cgZDtYKDEsMCl9fWZ1bmN0aW9uIHhkKGEsYil7dmFyIGM9WigpO3RyeXtyZXR1cm4gWmYoYSxiKX1jYXRjaChkKXtZKGMpO2lmKGQhPT1kKzApdGhyb3cgZDtYKDEsMCk7cmV0dXJuIDBufX1mdW5jdGlvbiBuYyhhLGIpe3ZhciBjPVooKTt0cnl7cmV0dXJuIHJnKGEsYil9Y2F0Y2goZCl7WShjKTtpZihkIT09ZCswKXRocm93IGQ7WCgxLDApfX1cbmZ1bmN0aW9uIGpmKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7dGcoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1mdW5jdGlvbiBPZShhLGIsYyxkLGUsZixoKXt2YXIgaz1aKCk7dHJ5e0lpKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19ZnVuY3Rpb24gWmUoYSxiLGMsZCxlKXt2YXIgZj1aKCk7dHJ5e3poKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1mdW5jdGlvbiBMYyhhLGIsYyxkLGUsZixoLGssbCxtKXt2YXIgbj1aKCk7dHJ5e3JldHVybiB1ZyhhLGIsYyxkLGUsZixoLGssbCxtKX1jYXRjaChxKXtZKG4pO2lmKHEhPT1xKzApdGhyb3cgcTtYKDEsMCl9fWZ1bmN0aW9uIFhlKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7dmcoYSxiLGMsZCxlLGYsaCl9Y2F0Y2gobCl7WShrKTtpZihsIT09bCswKXRocm93IGw7WCgxLDApfX1cbmZ1bmN0aW9uIEtkKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7d2coYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1mdW5jdGlvbiBUYyhhLGIsYyxkLGUsZixoLGssbCl7dmFyIG09WigpO3RyeXtyZXR1cm4ga2coYSxiLGMsZCxlLGYsaCxrLGwpfWNhdGNoKG4pe1kobSk7aWYobiE9PW4rMCl0aHJvdyBuO1goMSwwKX19ZnVuY3Rpb24gSWQoYSxiLGMsZCxlLGYsaCl7dmFyIGs9WigpO3RyeXt4ZyhhLGIsYyxkLGUsZixoKX1jYXRjaChsKXtZKGspO2lmKGwhPT1sKzApdGhyb3cgbDtYKDEsMCl9fWZ1bmN0aW9uIFVlKGEsYixjLGQsZSxmLGgsayxsKXt2YXIgbT1aKCk7dHJ5e1JmKGEsYixjLGQsZSxmLGgsayxsKX1jYXRjaChuKXtZKG0pO2lmKG4hPT1uKzApdGhyb3cgbjtYKDEsMCl9fVxuZnVuY3Rpb24gUGQoYSxiLGMsZCxlLGYsaCl7dmFyIGs9WigpO3RyeXt5ZyhhLGIsYyxkLGUsZixoKX1jYXRjaChsKXtZKGspO2lmKGwhPT1sKzApdGhyb3cgbDtYKDEsMCl9fWZ1bmN0aW9uIFdkKGEsYixjLGQsZSxmLGgsayxsLG0sbil7dmFyIHE9WigpO3RyeXt6ZyhhLGIsYyxkLGUsZixoLGssbCxtLG4pfWNhdGNoKHIpe1kocSk7aWYociE9PXIrMCl0aHJvdyByO1goMSwwKX19ZnVuY3Rpb24gemQoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtyZXR1cm4gQmcoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApO3JldHVybiAwbn19ZnVuY3Rpb24gdWYoYSxiLGMsZCxlLGYsaCxrKXt2YXIgbD1aKCk7dHJ5e0NnKGEsYixjLGQsZSxmLGgsayl9Y2F0Y2gobSl7WShsKTtpZihtIT09bSswKXRocm93IG07WCgxLDApfX1cbmZ1bmN0aW9uIFJkKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtEZyhhLGIsYyxkLGUpfWNhdGNoKGgpe1koZik7aWYoaCE9PWgrMCl0aHJvdyBoO1goMSwwKX19ZnVuY3Rpb24gZWYoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtGZyhhLGIsYyxkKX1jYXRjaChmKXtZKGUpO2lmKGYhPT1mKzApdGhyb3cgZjtYKDEsMCl9fWZ1bmN0aW9uIHJmKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpe3ZhciBBPVooKTt0cnl7R2coYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSl9Y2F0Y2goQil7WShBKTtpZihCIT09QiswKXRocm93IEI7WCgxLDApfX1mdW5jdGlvbiBOZShhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtIZyhhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1cbmZ1bmN0aW9uIG9mKGEsYixjLGQsZSxmLGgsayxsKXt2YXIgbT1aKCk7dHJ5e0lnKGEsYixjLGQsZSxmLGgsayxsKX1jYXRjaChuKXtZKG0pO2lmKG4hPT1uKzApdGhyb3cgbjtYKDEsMCl9fWZ1bmN0aW9uIGVkKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtyZXR1cm4gSmcoYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fWZ1bmN0aW9uIGtkKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCl7dmFyIHU9WigpO3RyeXtyZXR1cm4gS2coYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKX1jYXRjaCh5KXtZKHUpO2lmKHkhPT15KzApdGhyb3cgeTtYKDEsMCl9fWZ1bmN0aW9uIHNmKGEsYil7dmFyIGM9WigpO3RyeXtMZyhhLGIpfWNhdGNoKGQpe1koYyk7aWYoZCE9PWQrMCl0aHJvdyBkO1goMSwwKX19XG5mdW5jdGlvbiBDZChhLGIsYyl7dmFyIGQ9WigpO3RyeXtyZXR1cm4gTWcoYSxiLGMpfWNhdGNoKGUpe1koZCk7aWYoZSE9PWUrMCl0aHJvdyBlO1goMSwwKTtyZXR1cm4gMG59fWZ1bmN0aW9uIGpkKGEsYixjLGQsZSxmLGgsayxsLG0pe3ZhciBuPVooKTt0cnl7cmV0dXJuIE5nKGEsYixjLGQsZSxmLGgsayxsLG0pfWNhdGNoKHEpe1kobik7aWYocSE9PXErMCl0aHJvdyBxO1goMSwwKX19ZnVuY3Rpb24gaWUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKXt2YXIgdT1aKCk7dHJ5e1NnKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCl9Y2F0Y2goeSl7WSh1KTtpZih5IT09eSswKXRocm93IHk7WCgxLDApfX1mdW5jdGlvbiBFZChhLGIsYyxkLGUpe3ZhciBmPVooKTt0cnl7T2coYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fVxuZnVuY3Rpb24gVWQoYSxiLGMsZCxlLGYsaCl7dmFyIGs9WigpO3RyeXtQZyhhLGIsYyxkLGUsZixoKX1jYXRjaChsKXtZKGspO2lmKGwhPT1sKzApdGhyb3cgbDtYKDEsMCl9fWZ1bmN0aW9uIE1kKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtSZyhhLGIsYyxkLGUpfWNhdGNoKGgpe1koZik7aWYoaCE9PWgrMCl0aHJvdyBoO1goMSwwKX19ZnVuY3Rpb24gWGQoYSxiLGMsZCxlLGYsaCxrKXt2YXIgbD1aKCk7dHJ5e1FnKGEsYixjLGQsZSxmLGgsayl9Y2F0Y2gobSl7WShsKTtpZihtIT09bSswKXRocm93IG07WCgxLDApfX1mdW5jdGlvbiB1ZShhLGIsYyxkLGUsZixoLGssbCxtLG4pe3ZhciBxPVooKTt0cnl7VGcoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKX1jYXRjaChyKXtZKHEpO2lmKHIhPT1yKzApdGhyb3cgcjtYKDEsMCl9fVxuZnVuY3Rpb24gT2MoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBKXt2YXIgQj1aKCk7dHJ5e3JldHVybiBVZyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEpfWNhdGNoKEMpe1koQik7aWYoQyE9PUMrMCl0aHJvdyBDO1goMSwwKX19ZnVuY3Rpb24gbGUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil7dmFyIHA9WigpO3RyeXtWZyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKX1jYXRjaCh1KXtZKHApO2lmKHUhPT11KzApdGhyb3cgdTtYKDEsMCl9fWZ1bmN0aW9uIHNkKGEsYil7dmFyIGM9WigpO3RyeXtyZXR1cm4gY2coYSxiKX1jYXRjaChkKXtZKGMpO2lmKGQhPT1kKzApdGhyb3cgZDtYKDEsMCl9fWZ1bmN0aW9uIHdjKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtyZXR1cm4gS2koYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fVxuZnVuY3Rpb24gUGMoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxEKXt2YXIgRj1aKCk7dHJ5e3JldHVybiBXZyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQpfWNhdGNoKEgpe1koRik7aWYoSCE9PUgrMCl0aHJvdyBIO1goMSwwKX19ZnVuY3Rpb24gbWYoYSxiLGMsZCxlLGYsaCxrLGwsbSl7dmFyIG49WigpO3RyeXtYZyhhLGIsYyxkLGUsZixoLGssbCxtKX1jYXRjaChxKXtZKG4pO2lmKHEhPT1xKzApdGhyb3cgcTtYKDEsMCl9fWZ1bmN0aW9uIGNkKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7cmV0dXJuIFlnKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19ZnVuY3Rpb24gamUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKXt2YXIgcT1aKCk7dHJ5e1pnKGEsYixjLGQsZSxmLGgsayxsLG0sbil9Y2F0Y2gocil7WShxKTtpZihyIT09ciswKXRocm93IHI7WCgxLDApfX1cbmZ1bmN0aW9uIGxkKGEsYixjLGQsZSxmKXt2YXIgaD1aKCk7dHJ5e3JldHVybiAkZyhhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1mdW5jdGlvbiBJZShhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtiaChhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1mdW5jdGlvbiB5ZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApe3ZhciB1PVooKTt0cnl7Y2goYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKX1jYXRjaCh5KXtZKHUpO2lmKHkhPT15KzApdGhyb3cgeTtYKDEsMCl9fWZ1bmN0aW9uIHpmKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCKXt2YXIgQz1aKCk7dHJ5e2RoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCKX1jYXRjaChEKXtZKEMpO2lmKEQhPT1EKzApdGhyb3cgRDtYKDEsMCl9fVxuZnVuY3Rpb24gYWUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBKXt2YXIgQj1aKCk7dHJ5e2VoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSl9Y2F0Y2goQyl7WShCKTtpZihDIT09QyswKXRocm93IEM7WCgxLDApfX1mdW5jdGlvbiAkZChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KXt2YXIgQT1aKCk7dHJ5e2ZoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpfWNhdGNoKEIpe1koQSk7aWYoQiE9PUIrMCl0aHJvdyBCO1goMSwwKX19ZnVuY3Rpb24gYmUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUpe3ZhciB5PVooKTt0cnl7Z2goYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUpfWNhdGNoKEEpe1koeSk7aWYoQSE9PUErMCl0aHJvdyBBO1goMSwwKX19XG5mdW5jdGlvbiBBZihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRil7dmFyIEg9WigpO3RyeXtoaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRil9Y2F0Y2goSyl7WShIKTtpZihLIT09SyswKXRocm93IEs7WCgxLDApfX1mdW5jdGlvbiB5ZihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDKXt2YXIgRD1aKCk7dHJ5e2loKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMpfWNhdGNoKEYpe1koRCk7aWYoRiE9PUYrMCl0aHJvdyBGO1goMSwwKX19ZnVuY3Rpb24geGYoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIpe3ZhciBDPVooKTt0cnl7amgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIpfWNhdGNoKEQpe1koQyk7aWYoRCE9PUQrMCl0aHJvdyBEO1goMSwwKX19XG5mdW5jdGlvbiBCZihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRil7dmFyIEg9WigpO3RyeXtraChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEsQixDLEQsRil9Y2F0Y2goSyl7WShIKTtpZihLIT09SyswKXRocm93IEs7WCgxLDApfX1mdW5jdGlvbiBnZihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKXt2YXIgcD1aKCk7dHJ5e2xoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpfWNhdGNoKHUpe1kocCk7aWYodSE9PXUrMCl0aHJvdyB1O1goMSwwKX19ZnVuY3Rpb24ga2YoYSxiLGMsZCxlLGYsaCxrLGwsbSl7dmFyIG49WigpO3RyeXttaChhLGIsYyxkLGUsZixoLGssbCxtKX1jYXRjaChxKXtZKG4pO2lmKHEhPT1xKzApdGhyb3cgcTtYKDEsMCl9fVxuZnVuY3Rpb24gdmUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil7dmFyIHA9WigpO3RyeXtuaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKX1jYXRjaCh1KXtZKHApO2lmKHUhPT11KzApdGhyb3cgdTtYKDEsMCl9fWZ1bmN0aW9uIHFmKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KXt2YXIgeT1aKCk7dHJ5e29oKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KX1jYXRjaChBKXtZKHkpO2lmKEEhPT1BKzApdGhyb3cgQTtYKDEsMCl9fWZ1bmN0aW9uIHdmKGEsYixjLGQsZSxmLGgsayxsLG0pe3ZhciBuPVooKTt0cnl7cWgoYSxiLGMsZCxlLGYsaCxrLGwsbSl9Y2F0Y2gocSl7WShuKTtpZihxIT09cSswKXRocm93IHE7WCgxLDApfX1mdW5jdGlvbiB2ZihhLGIsYyxkLGUsZixoLGssbCl7dmFyIG09WigpO3RyeXtyaChhLGIsYyxkLGUsZixoLGssbCl9Y2F0Y2gobil7WShtKTtpZihuIT09biswKXRocm93IG47WCgxLDApfX1cbmZ1bmN0aW9uIHNjKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7cmV0dXJuIGFoKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19ZnVuY3Rpb24gTmQoYSxiLGMsZCxlKXt2YXIgZj1aKCk7dHJ5e3BoKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1mdW5jdGlvbiB3ZChhLGIsYyl7dmFyIGQ9WigpO3RyeXtyZXR1cm4gTGkoYSxiLGMpfWNhdGNoKGUpe1koZCk7aWYoZSE9PWUrMCl0aHJvdyBlO1goMSwwKTtyZXR1cm4gMG59fWZ1bmN0aW9uIHplKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCl7dmFyIHU9WigpO3RyeXtzaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApfWNhdGNoKHkpe1kodSk7aWYoeSE9PXkrMCl0aHJvdyB5O1goMSwwKX19XG5mdW5jdGlvbiBHZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKXt2YXIgcD1aKCk7dHJ5e3VoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpfWNhdGNoKHUpe1kocCk7aWYodSE9PXUrMCl0aHJvdyB1O1goMSwwKX19ZnVuY3Rpb24gWGMoYSxiLGMsZCxlLGYsaCl7dmFyIGs9WigpO3RyeXtyZXR1cm4gdmgoYSxiLGMsZCxlLGYsaCl9Y2F0Y2gobCl7WShrKTtpZihsIT09bCswKXRocm93IGw7WCgxLDApfX1mdW5jdGlvbiBhZChhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtyZXR1cm4gd2goYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24gRGUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil7dmFyIHA9WigpO3RyeXt4aChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKX1jYXRjaCh1KXtZKHApO2lmKHUhPT11KzApdGhyb3cgdTtYKDEsMCl9fVxuZnVuY3Rpb24gbGYoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7dGgoYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24gUWUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKXt2YXIgcT1aKCk7dHJ5e3loKGEsYixjLGQsZSxmLGgsayxsLG0sbil9Y2F0Y2gocil7WShxKTtpZihyIT09ciswKXRocm93IHI7WCgxLDApfX1mdW5jdGlvbiBLZShhLGIsYyxkLGUsZixoLGspe3ZhciBsPVooKTt0cnl7QWgoYSxiLGMsZCxlLGYsaCxrKX1jYXRjaChtKXtZKGwpO2lmKG0hPT1tKzApdGhyb3cgbTtYKDEsMCl9fWZ1bmN0aW9uIGFmKGEsYixjLGQsZSxmLGgsayl7dmFyIGw9WigpO3RyeXtCaChhLGIsYyxkLGUsZixoLGspfWNhdGNoKG0pe1kobCk7aWYobSE9PW0rMCl0aHJvdyBtO1goMSwwKX19XG5mdW5jdGlvbiB0ZChhLGIsYyxkKXt2YXIgZT1aKCk7dHJ5e3JldHVybiBDaChhLGIsYyxkKX1jYXRjaChmKXtZKGUpO2lmKGYhPT1mKzApdGhyb3cgZjtYKDEsMCl9fWZ1bmN0aW9uIEhlKGEsYixjLGQsZSxmLGgsayxsLG0pe3ZhciBuPVooKTt0cnl7RGgoYSxiLGMsZCxlLGYsaCxrLGwsbSl9Y2F0Y2gocSl7WShuKTtpZihxIT09cSswKXRocm93IHE7WCgxLDApfX1mdW5jdGlvbiBwZihhLGIsYyxkLGUsZixoLGssbCl7dmFyIG09WigpO3RyeXtFaChhLGIsYyxkLGUsZixoLGssbCl9Y2F0Y2gobil7WShtKTtpZihuIT09biswKXRocm93IG47WCgxLDApfX1mdW5jdGlvbiBGZShhLGIsYyxkLGUsZixoLGssbCl7dmFyIG09WigpO3RyeXtGaChhLGIsYyxkLGUsZixoLGssbCl9Y2F0Y2gobil7WShtKTtpZihuIT09biswKXRocm93IG47WCgxLDApfX1cbmZ1bmN0aW9uIEFlKGEsYixjLGQsZSxmLGgsayxsLG0pe3ZhciBuPVooKTt0cnl7R2goYSxiLGMsZCxlLGYsaCxrLGwsbSl9Y2F0Y2gocSl7WShuKTtpZihxIT09cSswKXRocm93IHE7WCgxLDApfX1mdW5jdGlvbiBmZihhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtIaChhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1mdW5jdGlvbiBoZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSl7dmFyIHI9WigpO3RyeXtJaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSl9Y2F0Y2gocCl7WShyKTtpZihwIT09cCswKXRocm93IHA7WCgxLDApfX1mdW5jdGlvbiBoZChhLGIsYyxkLGUsZixoLGspe3ZhciBsPVooKTt0cnl7cmV0dXJuIEpoKGEsYixjLGQsZSxmLGgsayl9Y2F0Y2gobSl7WShsKTtpZihtIT09bSswKXRocm93IG07WCgxLDApfX1cbmZ1bmN0aW9uIG5lKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KXt2YXIgeT1aKCk7dHJ5e01pKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1KX1jYXRjaChBKXtZKHkpO2lmKEEhPT1BKzApdGhyb3cgQTtYKDEsMCl9fWZ1bmN0aW9uIEJlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCl7dmFyIHU9WigpO3RyeXtLaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApfWNhdGNoKHkpe1kodSk7aWYoeSE9PXkrMCl0aHJvdyB5O1goMSwwKX19ZnVuY3Rpb24gd2UoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUpe3ZhciB5PVooKTt0cnl7TGgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUpfWNhdGNoKEEpe1koeSk7aWYoQSE9PUErMCl0aHJvdyBBO1goMSwwKX19ZnVuY3Rpb24gSGQoYSxiLGMpe3ZhciBkPVooKTt0cnl7TWgoYSxiLGMpfWNhdGNoKGUpe1koZCk7aWYoZSE9PWUrMCl0aHJvdyBlO1goMSwwKX19XG5mdW5jdGlvbiB2YyhhLGIsYyxkKXt2YXIgZT1aKCk7dHJ5e3JldHVybiBPaChhLGIsYyxkKX1jYXRjaChmKXtZKGUpO2lmKGYhPT1mKzApdGhyb3cgZjtYKDEsMCl9fWZ1bmN0aW9uIHBjKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7cmV0dXJuIFBoKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKX19ZnVuY3Rpb24gY2UoYSxiLGMsZCxlLGYsaCxrLGwsbSl7dmFyIG49WigpO3RyeXtRaChhLGIsYyxkLGUsZixoLGssbCxtKX1jYXRjaChxKXtZKG4pO2lmKHEhPT1xKzApdGhyb3cgcTtYKDEsMCl9fWZ1bmN0aW9uIEVlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCxGLEgsSyxWYSxXYSxYYSl7dmFyIFFpPVooKTt0cnl7UmgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxELEYsSCxLLFZhLFdhLFhhKX1jYXRjaChZYSl7WShRaSk7aWYoWWEhPT1ZYSswKXRocm93IFlhO1goMSwwKX19XG5mdW5jdGlvbiAkZShhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtTaChhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1mdW5jdGlvbiBSYyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKXt2YXIgcD1aKCk7dHJ5e3JldHVybiBUaChhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKX1jYXRjaCh1KXtZKHApO2lmKHUhPT11KzApdGhyb3cgdTtYKDEsMCl9fWZ1bmN0aW9uIE9kKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpe3ZhciBwPVooKTt0cnl7VWgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil9Y2F0Y2godSl7WShwKTtpZih1IT09dSswKXRocm93IHU7WCgxLDApfX1cbmZ1bmN0aW9uIHNlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCxGKXt2YXIgSD1aKCk7dHJ5e1ZoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCxGKX1jYXRjaChLKXtZKEgpO2lmKEshPT1LKzApdGhyb3cgSztYKDEsMCl9fWZ1bmN0aW9uIFlkKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpe3ZhciBwPVooKTt0cnl7V2goYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil9Y2F0Y2godSl7WShwKTtpZih1IT09dSswKXRocm93IHU7WCgxLDApfX1mdW5jdGlvbiBoZihhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHApe3ZhciB1PVooKTt0cnl7WGgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwKX1jYXRjaCh5KXtZKHUpO2lmKHkhPT15KzApdGhyb3cgeTtYKDEsMCl9fVxuZnVuY3Rpb24gcmUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxEKXt2YXIgRj1aKCk7dHJ5e1poKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCl9Y2F0Y2goSCl7WShGKTtpZihIIT09SCswKXRocm93IEg7WCgxLDApfX1mdW5jdGlvbiBwZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5LEEpe3ZhciBCPVooKTt0cnl7YWkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBKX1jYXRjaChDKXtZKEIpO2lmKEMhPT1DKzApdGhyb3cgQztYKDEsMCl9fWZ1bmN0aW9uIHFlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMpe3ZhciBEPVooKTt0cnl7WWgoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyl9Y2F0Y2goRil7WShEKTtpZihGIT09RiswKXRocm93IEY7WCgxLDApfX1cbmZ1bmN0aW9uIExlKGEsYixjLGQsZSxmLGgsayl7dmFyIGw9WigpO3RyeXtiaShhLGIsYyxkLGUsZixoLGspfWNhdGNoKG0pe1kobCk7aWYobSE9PW0rMCl0aHJvdyBtO1goMSwwKX19ZnVuY3Rpb24geGUoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKXt2YXIgcT1aKCk7dHJ5e2RpKGEsYixjLGQsZSxmLGgsayxsLG0sbil9Y2F0Y2gocil7WShxKTtpZihyIT09ciswKXRocm93IHI7WCgxLDApfX1mdW5jdGlvbiBNYyhhLGIsYyxkLGUsZixoLGssbCxtLG4pe3ZhciBxPVooKTt0cnl7cmV0dXJuIGVpKGEsYixjLGQsZSxmLGgsayxsLG0sbil9Y2F0Y2gocil7WShxKTtpZihyIT09ciswKXRocm93IHI7WCgxLDApfX1cbmZ1bmN0aW9uIFFjKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHksQSxCLEMsRCl7dmFyIEY9WigpO3RyeXtyZXR1cm4gZmkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscixwLHUseSxBLEIsQyxEKX1jYXRjaChIKXtZKEYpO2lmKEghPT1IKzApdGhyb3cgSDtYKDEsMCl9fWZ1bmN0aW9uIFNkKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtnaShhLGIsYyxkLGUpfWNhdGNoKGgpe1koZik7aWYoaCE9PWgrMCl0aHJvdyBoO1goMSwwKX19ZnVuY3Rpb24gZ2UoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpe3ZhciByPVooKTt0cnl7QWcoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpfWNhdGNoKHApe1kocik7aWYocCE9PXArMCl0aHJvdyBwO1goMSwwKX19ZnVuY3Rpb24gUGUoYSxiLGMsZCxlLGYsaCxrLGwsbSl7dmFyIG49WigpO3RyeXtoaShhLGIsYyxkLGUsZixoLGssbCxtKX1jYXRjaChxKXtZKG4pO2lmKHEhPT1xKzApdGhyb3cgcTtYKDEsMCl9fVxuZnVuY3Rpb24gTWUoYSxiLGMsZCxlKXt2YXIgZj1aKCk7dHJ5e2lpKGEsYixjLGQsZSl9Y2F0Y2goaCl7WShmKTtpZihoIT09aCswKXRocm93IGg7WCgxLDApfX1mdW5jdGlvbiBZZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKXt2YXIgcD1aKCk7dHJ5e0ppKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpfWNhdGNoKHUpe1kocCk7aWYodSE9PXUrMCl0aHJvdyB1O1goMSwwKX19ZnVuY3Rpb24gcGQoYSxiLGMsZCxlKXt2YXIgZj1aKCk7dHJ5e3JldHVybiBqaShhLGIsYyxkLGUpfWNhdGNoKGgpe1koZik7aWYoaCE9PWgrMCl0aHJvdyBoO1goMSwwKX19ZnVuY3Rpb24gQWQoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtyZXR1cm4gTmkoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApO3JldHVybiAwbn19XG5mdW5jdGlvbiBKZShhLGIsYyxkLGUsZixoKXt2YXIgaz1aKCk7dHJ5e2tpKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19ZnVuY3Rpb24gcWQoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7cmV0dXJuIGxpKGEsYixjLGQsZSxmKX1jYXRjaChrKXtZKGgpO2lmKGshPT1rKzApdGhyb3cgaztYKDEsMCl9fWZ1bmN0aW9uIHVkKGEsYixjLGQsZSxmKXt2YXIgaD1aKCk7dHJ5e3JldHVybiBtaShhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1mdW5jdGlvbiBTZShhLGIsYyxkLGUsZixoLGssbCl7dmFyIG09WigpO3RyeXtuaShhLGIsYyxkLGUsZixoLGssbCl9Y2F0Y2gobil7WShtKTtpZihuIT09biswKXRocm93IG47WCgxLDApfX1cbmZ1bmN0aW9uIExkKGEsYixjLGQpe3ZhciBlPVooKTt0cnl7TmgoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1mdW5jdGlvbiBaYyhhLGIsYyxkLGUsZixoLGspe3ZhciBsPVooKTt0cnl7cmV0dXJuIG9pKGEsYixjLGQsZSxmLGgsayl9Y2F0Y2gobSl7WShsKTtpZihtIT09bSswKXRocm93IG07WCgxLDApfX1mdW5jdGlvbiBFYyhhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtyZXR1cm4gcGkoYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19ZnVuY3Rpb24gZmQoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7cmV0dXJuIHFpKGEsYixjLGQsZSxmKX1jYXRjaChrKXtZKGgpO2lmKGshPT1rKzApdGhyb3cgaztYKDEsMCl9fVxuZnVuY3Rpb24gU2MoYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEpe3ZhciByPVooKTt0cnl7cmV0dXJuIHJpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKX1jYXRjaChwKXtZKHIpO2lmKHAhPT1wKzApdGhyb3cgcDtYKDEsMCl9fWZ1bmN0aW9uIGJkKGEsYixjLGQsZSxmLGgsayl7dmFyIGw9WigpO3RyeXtyZXR1cm4gc2koYSxiLGMsZCxlLGYsaCxrKX1jYXRjaChtKXtZKGwpO2lmKG0hPT1tKzApdGhyb3cgbTtYKDEsMCl9fWZ1bmN0aW9uIFZjKGEsYixjLGQsZSxmLGgsayxsLG0sbil7dmFyIHE9WigpO3RyeXtyZXR1cm4gdGkoYSxiLGMsZCxlLGYsaCxrLGwsbSxuKX1jYXRjaChyKXtZKHEpO2lmKHIhPT1yKzApdGhyb3cgcjtYKDEsMCl9fWZ1bmN0aW9uIGdkKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7cmV0dXJuIHVpKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19XG5mdW5jdGlvbiBVYyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKXt2YXIgcD1aKCk7dHJ5e3JldHVybiB2aShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyKX1jYXRjaCh1KXtZKHApO2lmKHUhPT11KzApdGhyb3cgdTtYKDEsMCl9fWZ1bmN0aW9uIG9kKGEsYixjLGQsZSxmLGgpe3ZhciBrPVooKTt0cnl7cmV0dXJuIHdpKGEsYixjLGQsZSxmLGgpfWNhdGNoKGwpe1koayk7aWYobCE9PWwrMCl0aHJvdyBsO1goMSwwKX19ZnVuY3Rpb24gcmQoYSxiLGMsZCxlLGYsaCl7dmFyIGs9WigpO3RyeXtyZXR1cm4geGkoYSxiLGMsZCxlLGYsaCl9Y2F0Y2gobCl7WShrKTtpZihsIT09bCswKXRocm93IGw7WCgxLDApfX1mdW5jdGlvbiBCZChhLGIsYyl7dmFyIGQ9WigpO3RyeXtyZXR1cm4geWkoYSxiLGMpfWNhdGNoKGUpe1koZCk7aWYoZSE9PWUrMCl0aHJvdyBlO1goMSwwKTtyZXR1cm4gMG59fVxuZnVuY3Rpb24gbmQoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtyZXR1cm4gemkoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1mdW5jdGlvbiBHZChhLGIsYyxkKXt2YXIgZT1aKCk7dHJ5e0JpKGEsYixjLGQpfWNhdGNoKGYpe1koZSk7aWYoZiE9PWYrMCl0aHJvdyBmO1goMSwwKX19ZnVuY3Rpb24gQ2MoYSxiLGMsZCl7dmFyIGU9WigpO3RyeXtyZXR1cm4gQWkoYSxiLGMsZCl9Y2F0Y2goZil7WShlKTtpZihmIT09ZiswKXRocm93IGY7WCgxLDApfX1mdW5jdGlvbiB0ZihhLGIsYyxkLGUpe3ZhciBmPVooKTt0cnl7Q2koYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fWZ1bmN0aW9uIHFjKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtyZXR1cm4gRGkoYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fVxuZnVuY3Rpb24gcmMoYSxiLGMsZCxlLGYpe3ZhciBoPVooKTt0cnl7cmV0dXJuIEVpKGEsYixjLGQsZSxmKX1jYXRjaChrKXtZKGgpO2lmKGshPT1rKzApdGhyb3cgaztYKDEsMCl9fWZ1bmN0aW9uIFRlKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKXt2YXIgcj1aKCk7dHJ5e0ZpKGEsYixjLGQsZSxmLGgsayxsLG0sbixxKX1jYXRjaChwKXtZKHIpO2lmKHAhPT1wKzApdGhyb3cgcDtYKDEsMCl9fWZ1bmN0aW9uIGJmKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIpe3ZhciBwPVooKTt0cnl7R2koYSxiLGMsZCxlLGYsaCxrLGwsbSxuLHEscil9Y2F0Y2godSl7WShwKTtpZih1IT09dSswKXRocm93IHU7WCgxLDApfX1mdW5jdGlvbiB0ZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSl7dmFyIHI9WigpO3RyeXtFZyhhLGIsYyxkLGUsZixoLGssbCxtLG4scSl9Y2F0Y2gocCl7WShyKTtpZihwIT09cCswKXRocm93IHA7WCgxLDApfX1cbmZ1bmN0aW9uICRjKGEsYixjLGQsZSl7dmFyIGY9WigpO3RyeXtyZXR1cm4gSGkoYSxiLGMsZCxlKX1jYXRjaChoKXtZKGYpO2lmKGghPT1oKzApdGhyb3cgaDtYKDEsMCl9fWZ1bmN0aW9uIHZkKGEpe3ZhciBiPVooKTt0cnl7cmV0dXJuIGVnKGEpfWNhdGNoKGMpe1koYik7aWYoYyE9PWMrMCl0aHJvdyBjO1goMSwwKTtyZXR1cm4gMG59fWZ1bmN0aW9uIFdjKGEsYixjLGQsZSxmKXt2YXIgaD1aKCk7dHJ5e3JldHVybiBkZyhhLGIsYyxkLGUsZil9Y2F0Y2goayl7WShoKTtpZihrIT09ayswKXRocm93IGs7WCgxLDApfX1mdW5jdGlvbiBHYyhhLGIsYyxkLGUsZil7dmFyIGg9WigpO3RyeXtyZXR1cm4gY2koYSxiLGMsZCxlLGYpfWNhdGNoKGspe1koaCk7aWYoayE9PWsrMCl0aHJvdyBrO1goMSwwKX19XG5mdW5jdGlvbiBvZShhLGIsYyxkLGUsZixoLGssbCxtLG4scSxyLHAsdSx5KXt2YXIgQT1aKCk7dHJ5eyRoKGEsYixjLGQsZSxmLGgsayxsLG0sbixxLHIscCx1LHkpfWNhdGNoKEIpe1koQSk7aWYoQiE9PUIrMCl0aHJvdyBCO1goMSwwKX19ZnVuY3Rpb24gdWMoYSxiLGMpe3ZhciBkPVooKTt0cnl7cmV0dXJuIHFnKGEsYixjKX1jYXRjaChlKXtZKGQpO2lmKGUhPT1lKzApdGhyb3cgZTtYKDEsMCl9fWZ1bmN0aW9uIG9jKGEsYixjKXt2YXIgZD1aKCk7dHJ5e3JldHVybiBzZyhhLGIsYyl9Y2F0Y2goZSl7WShkKTtpZihlIT09ZSswKXRocm93IGU7WCgxLDApfX1mdW5jdGlvbiBEZigpe3ZhciBhPVU7YT1PYmplY3QuYXNzaWduKHt9LGEpO3ZhciBiPWM9PmQ9PmMoZCk+Pj4wO2EuRmQ9YihhLkZkKTthLmhlPWIoYS5oZSk7YS5uZT1iKGEubmUpO2Eub2U9KGM9PigpPT5jKCk+Pj4wKShhLm9lKTtyZXR1cm4gYX1nLnN0YWNrU2F2ZT0oKT0+WigpO2cuc3RhY2tSZXN0b3JlPWE9PlkoYSk7XG5nLnN0YWNrQWxsb2M9YT0+RWYoYSk7Zy5VVEY4VG9TdHJpbmc9SjtnLnN0cmluZ1RvVVRGOD0oYSxiLGMpPT5NKGEsRSxiLGMpO2cubGVuZ3RoQnl0ZXNVVEY4PWJiO3ZhciBPaTtGYT1mdW5jdGlvbiBQaSgpe09pfHxSaSgpO09pfHwoRmE9UGkpfTtmdW5jdGlvbiBSaSgpe2lmKCEoMDxEYSkpe2lmKGcucHJlUnVuKWZvcihcImZ1bmN0aW9uXCI9PXR5cGVvZiBnLnByZVJ1biYmKGcucHJlUnVuPVtnLnByZVJ1bl0pO2cucHJlUnVuLmxlbmd0aDspe3ZhciBhPWcucHJlUnVuLnNoaWZ0KCk7QWEudW5zaGlmdChhKX1mb3IoOzA8QWEubGVuZ3RoOylBYS5zaGlmdCgpKGcpO2lmKCEoMDxEYXx8T2l8fChPaT0hMCxnLmNhbGxlZFJ1bj0hMCx4KSkpe2Zvcig7MDxCYS5sZW5ndGg7KUJhLnNoaWZ0KCkoZyk7Zm9yKGFhKGcpOzA8Q2EubGVuZ3RoOylDYS5zaGlmdCgpKGcpfX19UmkoKTtcblxuXG4gIHJldHVybiByZWFkeVByb21pc2Vcbn1cbik7XG59KSgpO1xuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgbW9kdWxlLmV4cG9ydHMgPSBvcnRXYXNtO1xuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKVxuICBkZWZpbmUoW10sICgpID0+IG9ydFdhc20pO1xuIiwgIiIsICIiLCAiZXhwb3J0IGNvbnN0IGNwdXMgPSB1bmRlZmluZWQ7IiwgIlxudmFyIG9ydFdhc21UaHJlYWRlZCA9ICgoKSA9PiB7XG4gIHZhciBfc2NyaXB0RGlyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgOiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSAhPT0gJ3VuZGVmaW5lZCcpIF9zY3JpcHREaXIgPSBfc2NyaXB0RGlyIHx8IF9fZmlsZW5hbWU7XG4gIHJldHVybiAoXG5mdW5jdGlvbihtb2R1bGVBcmcgPSB7fSkge1xuXG5mdW5jdGlvbiBkKCl7bC5idWZmZXIhPXAuYnVmZmVyJiZ0KCk7cmV0dXJuIHB9ZnVuY3Rpb24gdigpe2wuYnVmZmVyIT1wLmJ1ZmZlciYmdCgpO3JldHVybiBhYX1mdW5jdGlvbiB6KCl7bC5idWZmZXIhPXAuYnVmZmVyJiZ0KCk7cmV0dXJuIGJhfWZ1bmN0aW9uIEEoKXtsLmJ1ZmZlciE9cC5idWZmZXImJnQoKTtyZXR1cm4gY2F9ZnVuY3Rpb24gZGEoKXtsLmJ1ZmZlciE9cC5idWZmZXImJnQoKTtyZXR1cm4gZWF9dmFyIEI9bW9kdWxlQXJnLGZhLEM7Qi5yZWFkeT1uZXcgUHJvbWlzZSgoYSxiKT0+e2ZhPWE7Qz1ifSk7XCJ1c2Ugc3RyaWN0XCI7XG5CLmpzZXBJbml0PShhLGIsYyxlLGYsaCxrLHEpPT57Qi5RYj1hO0Iud2I9YjtCLnliPWM7Qi5qYj1lO0IueGI9ZjtCLkVhPWg7Qi56Yj1rO0IuQWI9cTtiPShuLG0scik9PiguLi53KT0+e2NvbnN0IHg9RCxnPW0/LigpO3c9biguLi53KTtjb25zdCB1PW0/LigpO2chPT11JiYobj11LHIoZyksbT1yPW51bGwpO3JldHVybiBEIT14P2hhKCk6d307Yz1uPT5hc3luYyguLi5tKT0+e3RyeXtpZihCLmJiKXRocm93IEVycm9yKFwiU2Vzc2lvbiBhbHJlYWR5IHN0YXJ0ZWRcIik7Y29uc3Qgcj1CLmJiPXtGYjptWzBdLGVycm9yczpbXX0sdz1hd2FpdCBuKC4uLm0pO2lmKEIuYmIhPT1yKXRocm93IEVycm9yKFwiU2Vzc2lvbiBtaXNtYXRjaFwiKTthLmZsdXNoKCk7Y29uc3QgeD1yLmVycm9ycztpZigwPHgubGVuZ3RoKXtsZXQgZz1hd2FpdCBQcm9taXNlLmFsbCh4KTtnPWcuZmlsdGVyKHU9PnUpO2lmKDA8Zy5sZW5ndGgpdGhyb3cgRXJyb3IoZy5qb2luKFwiXFxuXCIpKTt9cmV0dXJuIHd9ZmluYWxseXtCLmJiPVxubnVsbH19O0IuX09ydFJ1bj1jKGIoQi5fT3J0UnVuLCgpPT5CLl9PcnRSdW4sbj0+Qi5fT3J0UnVuPW4pKTtCLl9PcnRSdW5XaXRoQmluZGluZz1jKGIoQi5fT3J0UnVuV2l0aEJpbmRpbmcsKCk9PkIuX09ydFJ1bldpdGhCaW5kaW5nLG49PkIuX09ydFJ1bldpdGhCaW5kaW5nPW4pKTtCLl9PcnRCaW5kSW5wdXQ9YihCLl9PcnRCaW5kSW5wdXQsKCk9PkIuX09ydEJpbmRJbnB1dCxuPT5CLl9PcnRCaW5kSW5wdXQ9bik7Qi5qc2VwUmVnaXN0ZXJCdWZmZXI9KG4sbSxyLHcpPT5hLnJlZ2lzdGVyQnVmZmVyKG4sbSxyLHcpO0IuanNlcFVucmVnaXN0ZXJCdWZmZXJzPW49PnthLnVucmVnaXN0ZXJCdWZmZXJzKG4pfTtCLmpzZXBHZXRCdWZmZXI9bj0+YS5nZXRCdWZmZXIobik7Qi5qc2VwQ3JlYXRlRG93bmxvYWRlcj0obixtLHIpPT5hLmNyZWF0ZURvd25sb2FkZXIobixtLHIpfTtcbnZhciBpYT1PYmplY3QuYXNzaWduKHt9LEIpLGphPVwiLi90aGlzLnByb2dyYW1cIixFPShhLGIpPT57dGhyb3cgYjt9LGthPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3csRj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpbXBvcnRTY3JpcHRzLEc9XCJvYmplY3RcIj09dHlwZW9mIHByb2Nlc3MmJlwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiZcInN0cmluZ1wiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLEg9Qi5FTlZJUk9OTUVOVF9JU19QVEhSRUFEfHwhMSxJPVwiXCI7ZnVuY3Rpb24gbGEoYSl7cmV0dXJuIEIubG9jYXRlRmlsZT9CLmxvY2F0ZUZpbGUoYSxJKTpJK2F9dmFyIG1hLEosbmE7XG5pZihHKXt2YXIgZnM9cmVxdWlyZShcImZzXCIpLG9hPXJlcXVpcmUoXCJwYXRoXCIpO0k9Rj9vYS5kaXJuYW1lKEkpK1wiL1wiOl9fZGlybmFtZStcIi9cIjttYT0oYixjKT0+e2I9Yi5zdGFydHNXaXRoKFwiZmlsZTovL1wiKT9uZXcgVVJMKGIpOm9hLm5vcm1hbGl6ZShiKTtyZXR1cm4gZnMucmVhZEZpbGVTeW5jKGIsYz92b2lkIDA6XCJ1dGY4XCIpfTtuYT1iPT57Yj1tYShiLCEwKTtiLmJ1ZmZlcnx8KGI9bmV3IFVpbnQ4QXJyYXkoYikpO3JldHVybiBifTtKPShiLGMsZSxmPSEwKT0+e2I9Yi5zdGFydHNXaXRoKFwiZmlsZTovL1wiKT9uZXcgVVJMKGIpOm9hLm5vcm1hbGl6ZShiKTtmcy5yZWFkRmlsZShiLGY/dm9pZCAwOlwidXRmOFwiLChoLGspPT57aD9lKGgpOmMoZj9rLmJ1ZmZlcjprKX0pfTshQi50aGlzUHJvZ3JhbSYmMTxwcm9jZXNzLmFyZ3YubGVuZ3RoJiYoamE9cHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcXFwvZyxcIi9cIikpO3Byb2Nlc3MuYXJndi5zbGljZSgyKTtFPShiLGMpPT57cHJvY2Vzcy5leGl0Q29kZT1cbmI7dGhyb3cgYzt9O0IuaW5zcGVjdD0oKT0+XCJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XVwiO2xldCBhO3RyeXthPXJlcXVpcmUoXCJ3b3JrZXJfdGhyZWFkc1wiKX1jYXRjaChiKXt0aHJvdyBjb25zb2xlLmVycm9yKCdUaGUgXCJ3b3JrZXJfdGhyZWFkc1wiIG1vZHVsZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgbm9kZS5qcyBidWlsZCAtIHBlcmhhcHMgYSBuZXdlciB2ZXJzaW9uIGlzIG5lZWRlZD8nKSxiO31nbG9iYWwuV29ya2VyPWEuV29ya2VyfWVsc2UgaWYoa2F8fEYpRj9JPXNlbGYubG9jYXRpb24uaHJlZjpcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihJPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSwodHlwZW9mIF9zY3JpcHREaXIgIT09IFwidW5kZWZpbmVkXCIgJiYgX3NjcmlwdERpcikmJihJPV9zY3JpcHREaXIpLDAhPT1JLmluZGV4T2YoXCJibG9iOlwiKT9JPUkuc3Vic3RyKDAsSS5yZXBsYWNlKC9bPyNdLiovLFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSsxKTpJPVwiXCIsR3x8KG1hPWE9Pnt2YXIgYj1cbm5ldyBYTUxIdHRwUmVxdWVzdDtiLm9wZW4oXCJHRVRcIixhLCExKTtiLnNlbmQobnVsbCk7cmV0dXJuIGIucmVzcG9uc2VUZXh0fSxGJiYobmE9YT0+e3ZhciBiPW5ldyBYTUxIdHRwUmVxdWVzdDtiLm9wZW4oXCJHRVRcIixhLCExKTtiLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCI7Yi5zZW5kKG51bGwpO3JldHVybiBuZXcgVWludDhBcnJheShiLnJlc3BvbnNlKX0pLEo9KGEsYixjKT0+e3ZhciBlPW5ldyBYTUxIdHRwUmVxdWVzdDtlLm9wZW4oXCJHRVRcIixhLCEwKTtlLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCI7ZS5vbmxvYWQ9KCk9PnsyMDA9PWUuc3RhdHVzfHwwPT1lLnN0YXR1cyYmZS5yZXNwb25zZT9iKGUucmVzcG9uc2UpOmMoKX07ZS5vbmVycm9yPWM7ZS5zZW5kKG51bGwpfSk7RyYmXCJ1bmRlZmluZWRcIj09dHlwZW9mIHBlcmZvcm1hbmNlJiYoZ2xvYmFsLnBlcmZvcm1hbmNlPXJlcXVpcmUoXCJwZXJmX2hvb2tzXCIpLnBlcmZvcm1hbmNlKTtcbnZhciBwYT1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHFhPWNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtHJiYocGE9KC4uLmEpPT5mcy53cml0ZVN5bmMoMSxhLmpvaW4oXCIgXCIpK1wiXFxuXCIpLHFhPSguLi5hKT0+ZnMud3JpdGVTeW5jKDIsYS5qb2luKFwiIFwiKStcIlxcblwiKSk7dmFyIHJhPUIucHJpbnR8fHBhLEs9Qi5wcmludEVycnx8cWE7T2JqZWN0LmFzc2lnbihCLGlhKTtpYT1udWxsO0IudGhpc1Byb2dyYW0mJihqYT1CLnRoaXNQcm9ncmFtKTtCLnF1aXQmJihFPUIucXVpdCk7dmFyIEw7Qi53YXNtQmluYXJ5JiYoTD1CLndhc21CaW5hcnkpO3ZhciBub0V4aXRSdW50aW1lPUIubm9FeGl0UnVudGltZXx8ITA7XCJvYmplY3RcIiE9dHlwZW9mIFdlYkFzc2VtYmx5JiZNKFwibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZFwiKTt2YXIgbCxOLHNhLFA9ITEsUSxwLGFhLGJhLGNhLGVhO1xuZnVuY3Rpb24gdCgpe3ZhciBhPWwuYnVmZmVyO0IuSEVBUDg9cD1uZXcgSW50OEFycmF5KGEpO0IuSEVBUDE2PW5ldyBJbnQxNkFycmF5KGEpO0IuSEVBUDMyPWJhPW5ldyBJbnQzMkFycmF5KGEpO0IuSEVBUFU4PWFhPW5ldyBVaW50OEFycmF5KGEpO0IuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoYSk7Qi5IRUFQVTMyPWNhPW5ldyBVaW50MzJBcnJheShhKTtCLkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShhKTtCLkhFQVBGNjQ9ZWE9bmV3IEZsb2F0NjRBcnJheShhKX12YXIgdGE9Qi5JTklUSUFMX01FTU9SWXx8MTY3NzcyMTY7NTI0Mjg4MDw9dGF8fE0oXCJJTklUSUFMX01FTU9SWSBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gU1RBQ0tfU0laRSwgd2FzIFwiK3RhK1wiISAoU1RBQ0tfU0laRT01MjQyODgwKVwiKTtcbmlmKEgpbD1CLndhc21NZW1vcnk7ZWxzZSBpZihCLndhc21NZW1vcnkpbD1CLndhc21NZW1vcnk7ZWxzZSBpZihsPW5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6dGEvNjU1MzYsbWF4aW11bTo2NTUzNixzaGFyZWQ6ITB9KSwhKGwuYnVmZmVyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIpKXRocm93IEsoXCJyZXF1ZXN0ZWQgYSBzaGFyZWQgV2ViQXNzZW1ibHkuTWVtb3J5IGJ1dCB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIG5vdCBhIFNoYXJlZEFycmF5QnVmZmVyLCBpbmRpY2F0aW5nIHRoYXQgd2hpbGUgdGhlIGJyb3dzZXIgaGFzIFNoYXJlZEFycmF5QnVmZmVyIGl0IGRvZXMgbm90IGhhdmUgV2ViQXNzZW1ibHkgdGhyZWFkcyBzdXBwb3J0IC0geW91IG1heSBuZWVkIHRvIHNldCBhIGZsYWdcIiksRyYmSyhcIihvbiBub2RlIHlvdSBtYXkgbmVlZDogLS1leHBlcmltZW50YWwtd2FzbS10aHJlYWRzIC0tZXhwZXJpbWVudGFsLXdhc20tYnVsay1tZW1vcnkgYW5kL29yIHJlY2VudCB2ZXJzaW9uKVwiKSxcbkVycm9yKFwiYmFkIG1lbW9yeVwiKTt0KCk7dGE9bC5idWZmZXIuYnl0ZUxlbmd0aDt2YXIgdWE9W10sdmE9W10sd2E9W10seGE9MDtmdW5jdGlvbiB5YSgpe3JldHVybiBub0V4aXRSdW50aW1lfHwwPHhhfXZhciBSPTAsemE9bnVsbCxTPW51bGw7ZnVuY3Rpb24gQWEoKXtSKys7Qi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZCLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoUil9ZnVuY3Rpb24gQmEoKXtSLS07Qi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZCLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoUik7aWYoMD09UiYmKG51bGwhPT16YSYmKGNsZWFySW50ZXJ2YWwoemEpLHphPW51bGwpLFMpKXt2YXIgYT1TO1M9bnVsbDthKCl9fVxuZnVuY3Rpb24gTShhKXtpZihCLm9uQWJvcnQpQi5vbkFib3J0KGEpO2E9XCJBYm9ydGVkKFwiK2ErXCIpXCI7SyhhKTtQPSEwO1E9MTthPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoYStcIi4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby5cIik7QyhhKTt0aHJvdyBhO31mdW5jdGlvbiBDYShhKXtyZXR1cm4gYS5zdGFydHNXaXRoKFwiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LFwiKX12YXIgVDtUPVwib3J0LXdhc20tc2ltZC10aHJlYWRlZC53YXNtXCI7Q2EoVCl8fChUPWxhKFQpKTtmdW5jdGlvbiBEYShhKXtpZihhPT1UJiZMKXJldHVybiBuZXcgVWludDhBcnJheShMKTtpZihuYSlyZXR1cm4gbmEoYSk7dGhyb3dcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7fVxuZnVuY3Rpb24gRWEoYSl7aWYoIUwmJihrYXx8Rikpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGZldGNoJiYhYS5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSlyZXR1cm4gZmV0Y2goYSx7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihiPT57aWYoIWIub2spdGhyb3dcImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJ1wiK2ErXCInXCI7cmV0dXJuIGIuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKCgpPT5EYShhKSk7aWYoSilyZXR1cm4gbmV3IFByb21pc2UoKGIsYyk9PntKKGEsZT0+YihuZXcgVWludDhBcnJheShlKSksYyl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RGEoYSkpfWZ1bmN0aW9uIEZhKGEsYixjKXtyZXR1cm4gRWEoYSkudGhlbihlPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShlLGIpKS50aGVuKGU9PmUpLnRoZW4oYyxlPT57SyhcImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206IFwiK2UpO00oZSl9KX1cbmZ1bmN0aW9uIEdhKGEsYil7dmFyIGM9VDtyZXR1cm4gTHx8XCJmdW5jdGlvblwiIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fENhKGMpfHxjLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpfHxHfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBmZXRjaD9GYShjLGEsYik6ZmV0Y2goYyx7Y3JlZGVudGlhbHM6XCJzYW1lLW9yaWdpblwifSkudGhlbihlPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhlLGEpLnRoZW4oYixmdW5jdGlvbihmKXtLKFwid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6IFwiK2YpO0soXCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvblwiKTtyZXR1cm4gRmEoYyxhLGIpfSkpfVxudmFyIFUsSGE9ezkwNjgyODphPT57Qi5FYShcIkFic1wiLGEsdm9pZCAwKX0sOTA2ODc5OmE9PntCLkVhKFwiTmVnXCIsYSx2b2lkIDApfSw5MDY5MzA6YT0+e0IuRWEoXCJGbG9vclwiLGEsdm9pZCAwKX0sOTA2OTgzOmE9PntCLkVhKFwiQ2VpbFwiLGEsdm9pZCAwKX0sOTA3MDM1OmE9PntCLkVhKFwiUmVjaXByb2NhbFwiLGEsdm9pZCAwKX0sOTA3MDkzOmE9PntCLkVhKFwiU3FydFwiLGEsdm9pZCAwKX0sOTA3MTQ1OmE9PntCLkVhKFwiRXhwXCIsYSx2b2lkIDApfSw5MDcxOTY6YT0+e0IuRWEoXCJFcmZcIixhLHZvaWQgMCl9LDkwNzI0NzphPT57Qi5FYShcIlNpZ21vaWRcIixhLHZvaWQgMCl9LDkwNzMwMjphPT57Qi5FYShcIkxvZ1wiLGEsdm9pZCAwKX0sOTA3MzUzOmE9PntCLkVhKFwiU2luXCIsYSx2b2lkIDApfSw5MDc0MDQ6YT0+e0IuRWEoXCJDb3NcIixhLHZvaWQgMCl9LDkwNzQ1NTphPT57Qi5FYShcIlRhblwiLGEsdm9pZCAwKX0sOTA3NTA2OmE9PntCLkVhKFwiQXNpblwiLGEsdm9pZCAwKX0sOTA3NTU4OmE9PntCLkVhKFwiQWNvc1wiLFxuYSx2b2lkIDApfSw5MDc2MTA6YT0+e0IuRWEoXCJBdGFuXCIsYSx2b2lkIDApfSw5MDc2NjI6YT0+e0IuRWEoXCJTaW5oXCIsYSx2b2lkIDApfSw5MDc3MTQ6YT0+e0IuRWEoXCJDb3NoXCIsYSx2b2lkIDApfSw5MDc3NjY6YT0+e0IuRWEoXCJBc2luaFwiLGEsdm9pZCAwKX0sOTA3ODE5OmE9PntCLkVhKFwiQWNvc2hcIixhLHZvaWQgMCl9LDkwNzg3MjphPT57Qi5FYShcIkF0YW5oXCIsYSx2b2lkIDApfSw5MDc5MjU6YT0+e0IuRWEoXCJUYW5oXCIsYSx2b2lkIDApfSw5MDc5Nzc6YT0+e0IuRWEoXCJOb3RcIixhLHZvaWQgMCl9LDkwODAyODooYSxiLGMpPT57Qi5FYShcIkNsaXBWMTBcIixhLHttaW46YixtYXg6Y30pfSw5MDgxMDA6YT0+e0IuRWEoXCJDbGlwXCIsYSx2b2lkIDApfSw5MDgxNTI6KGEsYik9PntCLkVhKFwiRWx1XCIsYSx7YWxwaGE6Yn0pfSw5MDgyMTA6YT0+e0IuRWEoXCJSZWx1XCIsYSx2b2lkIDApfSw5MDgyNjI6KGEsYik9PntCLkVhKFwiTGVha3lSZWx1XCIsYSx7YWxwaGE6Yn0pfSw5MDgzMjY6KGEsYik9Plxue0IuRWEoXCJUaHJlc2hvbGRlZFJlbHVcIixhLHthbHBoYTpifSl9LDkwODM5NjooYSxiKT0+e0IuRWEoXCJDYXN0XCIsYSx7dG86Yn0pfSw5MDg0NTQ6YT0+e0IuRWEoXCJBZGRcIixhLHZvaWQgMCl9LDkwODUwNTphPT57Qi5FYShcIlN1YlwiLGEsdm9pZCAwKX0sOTA4NTU2OmE9PntCLkVhKFwiTXVsXCIsYSx2b2lkIDApfSw5MDg2MDc6YT0+e0IuRWEoXCJEaXZcIixhLHZvaWQgMCl9LDkwODY1ODphPT57Qi5FYShcIlBvd1wiLGEsdm9pZCAwKX0sOTA4NzA5OmE9PntCLkVhKFwiRXF1YWxcIixhLHZvaWQgMCl9LDkwODc2MjphPT57Qi5FYShcIkdyZWF0ZXJcIixhLHZvaWQgMCl9LDkwODgxNzphPT57Qi5FYShcIkdyZWF0ZXJPckVxdWFsXCIsYSx2b2lkIDApfSw5MDg4Nzk6YT0+e0IuRWEoXCJMZXNzXCIsYSx2b2lkIDApfSw5MDg5MzE6YT0+e0IuRWEoXCJMZXNzT3JFcXVhbFwiLGEsdm9pZCAwKX0sOTA4OTkwOihhLGIsYyxlLGYpPT57Qi5FYShcIlJlZHVjZU1lYW5cIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLFxuYXhlczplP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGY+Pj4wLGYrZT4+PjApKTpbXX0pfSw5MDkxNTQ6KGEsYixjLGUsZik9PntCLkVhKFwiUmVkdWNlTWF4XCIsYSx7a2VlcERpbXM6ISFiLG5vb3BXaXRoRW1wdHlBeGVzOiEhYyxheGVzOmU/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZj4+PjAsZitlPj4+MCkpOltdfSl9LDkwOTMxNzooYSxiLGMsZSxmKT0+e0IuRWEoXCJSZWR1Y2VNaW5cIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W119KX0sOTA5NDgwOihhLGIsYyxlLGYpPT57Qi5FYShcIlJlZHVjZVByb2RcIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W119KX0sOTA5NjQ0OihhLGIsYyxlLGYpPT57Qi5FYShcIlJlZHVjZVN1bVwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsXG5heGVzOmU/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZj4+PjAsZitlPj4+MCkpOltdfSl9LDkwOTgwNzooYSxiLGMsZSxmKT0+e0IuRWEoXCJSZWR1Y2VMMVwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczplP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGY+Pj4wLGYrZT4+PjApKTpbXX0pfSw5MDk5Njk6KGEsYixjLGUsZik9PntCLkVhKFwiUmVkdWNlTDJcIixhLHtrZWVwRGltczohIWIsbm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W119KX0sOTEwMTMxOihhLGIsYyxlLGYpPT57Qi5FYShcIlJlZHVjZUxvZ1N1bVwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczplP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGY+Pj4wLGYrZT4+PjApKTpbXX0pfSw5MTAyOTc6KGEsYixjLGUsZik9PntCLkVhKFwiUmVkdWNlU3VtU3F1YXJlXCIsYSx7a2VlcERpbXM6ISFiLFxubm9vcFdpdGhFbXB0eUF4ZXM6ISFjLGF4ZXM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W119KX0sOTEwNDY2OihhLGIsYyxlLGYpPT57Qi5FYShcIlJlZHVjZUxvZ1N1bUV4cFwiLGEse2tlZXBEaW1zOiEhYixub29wV2l0aEVtcHR5QXhlczohIWMsYXhlczplP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGY+Pj4wLGYrZT4+PjApKTpbXX0pfSw5MTA2MzU6YT0+e0IuRWEoXCJXaGVyZVwiLGEsdm9pZCAwKX0sOTEwNjg4OihhLGIsYyk9PntCLkVhKFwiVHJhbnNwb3NlXCIsYSx7cGVybTpiP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGM+Pj4wLGMrYj4+PjApKTpbXX0pfSw5MTA4MDE6KGEsYixjLGUsZixoLGsscSxuLG0pPT57Qi5FYShcIkNvbnZcIixhLHtmb3JtYXQ6bj9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGRpbGF0aW9uczpbY10sZ3JvdXA6ZSxrZXJuZWxfc2hhcGU6W2ZdLHBhZHM6W2gsa10sc3RyaWRlczpbcV0sd19pc19jb25zdDooKT0+ISFkKClbbT4+PlxuMF19KX0sOTExMDI5OihhLGIsYyxlLGYsaCxrLHEsbixtLHIsdyx4LGcsdSk9PntCLkVhKFwiQ29udlwiLGEse2Zvcm1hdDpnP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9fcGFkOmIsZGlsYXRpb25zOltjLGVdLGdyb3VwOmYsa2VybmVsX3NoYXBlOltoLGtdLHBhZHM6W3EsbixtLHJdLHN0cmlkZXM6W3cseF0sd19pc19jb25zdDooKT0+ISFkKClbdT4+PjBdfSl9LDkxMTI4ODooYSxiLGMsZSxmLGgsayxxLG4sbSk9PntCLkVhKFwiQ29udlwiLGEse2Zvcm1hdDpuP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9fcGFkOmIsZGlsYXRpb25zOltjXSxncm91cDplLGtlcm5lbF9zaGFwZTpbZl0scGFkczpbaCxrXSxzdHJpZGVzOltxXSx3X2lzX2NvbnN0OigpPT4hIWQoKVttPj4+MF19KX0sOTExNTE2OihhLGIsYyxlLGYsaCxrLHEsbixtLHIsdyx4LGcsdSk9PntCLkVhKFwiQ29udlwiLGEse2Zvcm1hdDpnP1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9fcGFkOmIsZGlsYXRpb25zOltjLGVdLGdyb3VwOmYsa2VybmVsX3NoYXBlOltoLFxua10scGFkczpbcSxuLG0scl0sc3RyaWRlczpbdyx4XSx3X2lzX2NvbnN0OigpPT4hIWQoKVt1Pj4+MF19KX0sOTExNzc1OihhLGIsYyxlLGYsaCxrLHEsbixtLHIsdyx4LGcpPT57Qi5FYShcIkNvbnZUcmFuc3Bvc2VcIixhLHtmb3JtYXQ6bj9cIk5IV0NcIjpcIk5DSFdcIixhdXRvUGFkOmIsZGlsYXRpb25zOltjXSxncm91cDplLGtlcm5lbF9zaGFwZTpbZl0scGFkczpbaCxrXSxzdHJpZGVzOltxXSx3SXNDb25zdDooKT0+ISFkKClbbT4+PjBdLG91dHB1dFBhZGRpbmc6cj9BcnJheS5mcm9tKHooKS5zdWJhcnJheSh3Pj4+MCx3K3I+Pj4wKSk6W10sb3V0cHV0U2hhcGU6eD9BcnJheS5mcm9tKHooKS5zdWJhcnJheShnPj4+MCxnK3g+Pj4wKSk6W119KX0sOTEyMTU1OihhLGIsYyxlLGYsaCxrLHEsbixtLHIsdyx4KT0+e0IuRWEoXCJDb252VHJhbnNwb3NlXCIsYSx7Zm9ybWF0OnE/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b1BhZDpiLGRpbGF0aW9uczpBcnJheS5mcm9tKHooKS5zdWJhcnJheShjPj4+MCxjK1xuMj4+PjApKSxncm91cDplLGtlcm5lbFNoYXBlOkFycmF5LmZyb20oeigpLnN1YmFycmF5KGY+Pj4wLGYrMj4+PjApKSxwYWRzOkFycmF5LmZyb20oeigpLnN1YmFycmF5KGg+Pj4wLGgrND4+PjApKSxzdHJpZGVzOkFycmF5LmZyb20oeigpLnN1YmFycmF5KGs+Pj4wLGsrMj4+PjApKSx3SXNDb25zdDooKT0+ISFkKClbbj4+PjBdLG91dHB1dFBhZGRpbmc6MDxtP0FycmF5LmZyb20oeigpLnN1YmFycmF5KHI+Pj4wLHIrbT4+PjApKTpbXSxvdXRwdXRTaGFwZTowPHc/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoeD4+PjAseCt3Pj4+MCkpOltdfSl9LDkxMjY3ODooYSxiLGMsZSxmLGgsayxxLG4sbSxyLHcseCxnKT0+e0IuRWEoXCJDb252VHJhbnNwb3NlXCIsYSx7Zm9ybWF0Om4/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b1BhZDpiLGRpbGF0aW9uczpbY10sZ3JvdXA6ZSxrZXJuZWxfc2hhcGU6W2ZdLHBhZHM6W2gsa10sc3RyaWRlczpbcV0sd0lzQ29uc3Q6KCk9PiEhZCgpW20+Pj4wXSxvdXRwdXRQYWRkaW5nOnI/XG5BcnJheS5mcm9tKHooKS5zdWJhcnJheSh3Pj4+MCx3K3I+Pj4wKSk6W10sb3V0cHV0U2hhcGU6eD9BcnJheS5mcm9tKHooKS5zdWJhcnJheShnPj4+MCxnK3g+Pj4wKSk6W119KX0sOTEzMDU4OihhLGIsYyxlLGYsaCxrLHEsbixtLHIsdyx4KT0+e0IuRWEoXCJDb252VHJhbnNwb3NlXCIsYSx7Zm9ybWF0OnE/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b1BhZDpiLGRpbGF0aW9uczpBcnJheS5mcm9tKHooKS5zdWJhcnJheShjPj4+MCxjKzI+Pj4wKSksZ3JvdXA6ZSxrZXJuZWxTaGFwZTpBcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmKzI+Pj4wKSkscGFkczpBcnJheS5mcm9tKHooKS5zdWJhcnJheShoPj4+MCxoKzQ+Pj4wKSksc3RyaWRlczpBcnJheS5mcm9tKHooKS5zdWJhcnJheShrPj4+MCxrKzI+Pj4wKSksd0lzQ29uc3Q6KCk9PiEhZCgpW24+Pj4wXSxvdXRwdXRQYWRkaW5nOjA8bT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShyPj4+MCxyK20+Pj4wKSk6W10sb3V0cHV0U2hhcGU6MDxcbnc/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoeD4+PjAseCt3Pj4+MCkpOltdfSl9LDkxMzU4MTooYSxiKT0+e0IuRWEoXCJHbG9iYWxBdmVyYWdlUG9vbFwiLGEse2Zvcm1hdDpiP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDkxMzY3MjooYSxiLGMsZSxmLGgsayxxLG4sbSxyLHcseCxnLHUseSk9PntCLkVhKFwiQXZlcmFnZVBvb2xcIixhLHtmb3JtYXQ6eT9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGNlaWxfbW9kZTpjLGNvdW50X2luY2x1ZGVfcGFkOmUsc3RvcmFnZV9vcmRlcjpmLGRpbGF0aW9uczpbaCxrXSxrZXJuZWxfc2hhcGU6W3Esbl0scGFkczpbbSxyLHcseF0sc3RyaWRlczpbZyx1XX0pfSw5MTM5NTY6KGEsYik9PntCLkVhKFwiR2xvYmFsQXZlcmFnZVBvb2xcIixhLHtmb3JtYXQ6Yj9cIk5IV0NcIjpcIk5DSFdcIn0pfSw5MTQwNDc6KGEsYixjLGUsZixoLGsscSxuLG0scix3LHgsZyx1LHkpPT57Qi5FYShcIkF2ZXJhZ2VQb29sXCIsYSx7Zm9ybWF0Onk/XCJOSFdDXCI6XCJOQ0hXXCIsYXV0b19wYWQ6YixjZWlsX21vZGU6YyxcbmNvdW50X2luY2x1ZGVfcGFkOmUsc3RvcmFnZV9vcmRlcjpmLGRpbGF0aW9uczpbaCxrXSxrZXJuZWxfc2hhcGU6W3Esbl0scGFkczpbbSxyLHcseF0sc3RyaWRlczpbZyx1XX0pfSw5MTQzMzE6KGEsYik9PntCLkVhKFwiR2xvYmFsTWF4UG9vbFwiLGEse2Zvcm1hdDpiP1wiTkhXQ1wiOlwiTkNIV1wifSl9LDkxNDQxODooYSxiLGMsZSxmLGgsayxxLG4sbSxyLHcseCxnLHUseSk9PntCLkVhKFwiTWF4UG9vbFwiLGEse2Zvcm1hdDp5P1wiTkhXQ1wiOlwiTkNIV1wiLGF1dG9fcGFkOmIsY2VpbF9tb2RlOmMsY291bnRfaW5jbHVkZV9wYWQ6ZSxzdG9yYWdlX29yZGVyOmYsZGlsYXRpb25zOltoLGtdLGtlcm5lbF9zaGFwZTpbcSxuXSxwYWRzOlttLHIsdyx4XSxzdHJpZGVzOltnLHVdfSl9LDkxNDY5ODooYSxiKT0+e0IuRWEoXCJHbG9iYWxNYXhQb29sXCIsYSx7Zm9ybWF0OmI/XCJOSFdDXCI6XCJOQ0hXXCJ9KX0sOTE0Nzg1OihhLGIsYyxlLGYsaCxrLHEsbixtLHIsdyx4LGcsdSx5KT0+e0IuRWEoXCJNYXhQb29sXCIsXG5hLHtmb3JtYXQ6eT9cIk5IV0NcIjpcIk5DSFdcIixhdXRvX3BhZDpiLGNlaWxfbW9kZTpjLGNvdW50X2luY2x1ZGVfcGFkOmUsc3RvcmFnZV9vcmRlcjpmLGRpbGF0aW9uczpbaCxrXSxrZXJuZWxfc2hhcGU6W3Esbl0scGFkczpbbSxyLHcseF0sc3RyaWRlczpbZyx1XX0pfSw5MTUwNjU6KGEsYixjLGUsZik9PntCLkVhKFwiR2VtbVwiLGEse2FscGhhOmIsYmV0YTpjLHRyYW5zQTplLHRyYW5zQjpmfSl9LDkxNTE2OTphPT57Qi5FYShcIk1hdE11bFwiLGEsdm9pZCAwKX0sOTE1MjIzOihhLGIsYyxlKT0+e0IuRWEoXCJBcmdNYXhcIixhLHtrZWVwRGltczohIWIsc2VsZWN0TGFzdEluZGV4OiEhYyxheGlzOmV9KX0sOTE1MzMxOihhLGIsYyxlKT0+e0IuRWEoXCJBcmdNaW5cIixhLHtrZWVwRGltczohIWIsc2VsZWN0TGFzdEluZGV4OiEhYyxheGlzOmV9KX0sOTE1NDM5OihhLGIpPT57Qi5FYShcIlNvZnRtYXhcIixhLHtheGlzOmJ9KX0sOTE1NTAyOihhLGIpPT57Qi5FYShcIkNvbmNhdFwiLGEse2F4aXM6Yn0pfSxcbjkxNTU2MjooYSxiLGMsZSxmKT0+e0IuRWEoXCJTcGxpdFwiLGEse2F4aXM6YixudW1PdXRwdXRzOmMsc3BsaXRTaXplczplP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGY+Pj4wLGYrZT4+PjApKTpbXX0pfSw5MTU3MDc6YT0+e0IuRWEoXCJFeHBhbmRcIixhLHZvaWQgMCl9LDkxNTc2MTooYSxiKT0+e0IuRWEoXCJHYXRoZXJcIixhLHtheGlzOk51bWJlcihiKX0pfSw5MTU4MzI6KGEsYik9PntCLkVhKFwiR2F0aGVyRWxlbWVudHNcIixhLHtheGlzOk51bWJlcihiKX0pfSw5MTU5MTE6KGEsYixjLGUsZixoLGsscSxuLG0scik9PntCLkVhKFwiUmVzaXplXCIsYSx7YW50aWFsaWFzOmIsYXhlczpjP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGU+Pj4wLGUrYz4+PjApKTpbXSxjb29yZGluYXRlVHJhbnNmb3JtTW9kZTpWKGYpLGN1YmljQ29lZmZBOmgsZXhjbHVkZU91dHNpZGU6ayxleHRyYXBvbGF0aW9uVmFsdWU6cSxrZWVwQXNwZWN0UmF0aW9Qb2xpY3k6VihuKSxtb2RlOlYobSksbmVhcmVzdE1vZGU6VihyKX0pfSxcbjkxNjI2MjooYSxiLGMsZSxmLGgsayk9PntCLkVhKFwiU2xpY2VcIixhLHtzdGFydHM6Yj9BcnJheS5mcm9tKHooKS5zdWJhcnJheShjPj4+MCxjK2I+Pj4wKSk6W10sZW5kczplP0FycmF5LmZyb20oeigpLnN1YmFycmF5KGY+Pj4wLGYrZT4+PjApKTpbXSxheGVzOmg/QXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoaz4+PjAsaytoPj4+MCkpOltdfSl9LDkxNjQ5MzphPT57Qi5FYShcIlRpbGVcIixhLHZvaWQgMCl9LDkxNjU0NTooYSxiLGMpPT57Qi5FYShcIkxheWVyTm9ybWFsaXphdGlvblwiLGEse2F4aXM6TnVtYmVyKGIpLGVwc2lsb246TnVtYmVyKGMpfSl9LDkxNjY1MjooYSxiLGMpPT57Qi5FYShcIkluc3RhbmNlTm9ybWFsaXphdGlvblwiLGEse2Vwc2lsb246Yixmb3JtYXQ6Yz9cIk5IV0NcIjpcIk5DSFdcIn0pfSw5MTY3NjY6KGEsYixjKT0+e0IuRWEoXCJJbnN0YW5jZU5vcm1hbGl6YXRpb25cIixhLHtlcHNpbG9uOmIsZm9ybWF0OmM/XCJOSFdDXCI6XCJOQ0hXXCJ9KX0sOTE2ODgwOmE9PntCLkVhKFwiUmFuZ2VcIixcbmEsdm9pZCAwKX0sOTE2OTMzOihhLGIpPT57Qi5FYShcIkVpbnN1bVwiLGEse2VxdWF0aW9uOlYoYil9KX0sOTE3MDE0OihhLGIsYyxlLGYpPT57Qi5FYShcIlBhZFwiLGEse21vZGU6Yix2YWx1ZTpjLHBhZHM6ZT9BcnJheS5mcm9tKHooKS5zdWJhcnJheShmPj4+MCxmK2U+Pj4wKSk6W119KX0sOTE3MTQ2OmE9PntCLkVhKFwiR2VsdVwiLGEsdm9pZCAwKX0sOTE3MTk4OmE9PntCLkVhKFwiQmlhc0FkZFwiLGEsdm9pZCAwKX0sOTE3MjUzOmE9PntCLkVhKFwiQmlhc1NwbGl0R2VsdVwiLGEsdm9pZCAwKX0sOTE3MzE0OihhLGIpPT57Qi5FYShcIlNraXBMYXllck5vcm1hbGl6YXRpb25cIixhLHtlcHNpbG9uOmJ9KX0sOTE3Mzk1OmE9PntCLnpiKGEpfSw5MTc0Mjk6KGEsYik9PkIuQWIoYSxiLEIuYmIuRmIsQi5iYi5lcnJvcnMpLDkxNzU0MTphPT5CLndiKGEpLDkxNzU3NDphPT5CLnliKGEpLDkxNzYwNjooYSxiLGMpPT57Qi5qYihhLGIsYywhMCl9LDkxNzY0NTooYSxiLGMpPT57Qi5qYihhLGIsYyl9fTtcbmZ1bmN0aW9uIElhKGEpe3RoaXMubmFtZT1cIkV4aXRTdGF0dXNcIjt0aGlzLm1lc3NhZ2U9YFByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJHthfSlgO3RoaXMuc3RhdHVzPWF9ZnVuY3Rpb24gSmEoYSl7YS50ZXJtaW5hdGUoKTthLm9ubWVzc2FnZT0oKT0+e319ZnVuY3Rpb24gS2EoYSl7KGE9Vy5RYVthXSl8fE0oKTtXLkViKGEpfWZ1bmN0aW9uIExhKGEpe3ZhciBiPVcudGIoKTtpZighYilyZXR1cm4gNjtXLllhLnB1c2goYik7Vy5RYVthLlhhXT1iO2IuWGE9YS5YYTt2YXIgYz17Y21kOlwicnVuXCIsc3RhcnRfcm91dGluZTphLkdiLGFyZzphLnJiLHB0aHJlYWRfcHRyOmEuWGF9O0cmJmIudW5yZWYoKTtiLnBvc3RNZXNzYWdlKGMsYS5NYik7cmV0dXJuIDB9XG52YXIgTWE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFRleHREZWNvZGVyP25ldyBUZXh0RGVjb2RlcihcInV0ZjhcIik6dm9pZCAwLE5hPShhLGIsYyk9PntiPj4+PTA7dmFyIGU9YitjO2ZvcihjPWI7YVtjXSYmIShjPj1lKTspKytjO2lmKDE2PGMtYiYmYS5idWZmZXImJk1hKXJldHVybiBNYS5kZWNvZGUoYS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9hLnNsaWNlKGIsYyk6YS5zdWJhcnJheShiLGMpKTtmb3IoZT1cIlwiO2I8Yzspe3ZhciBmPWFbYisrXTtpZihmJjEyOCl7dmFyIGg9YVtiKytdJjYzO2lmKDE5Mj09KGYmMjI0KSllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChmJjMxKTw8NnxoKTtlbHNle3ZhciBrPWFbYisrXSY2MztmPTIyND09KGYmMjQwKT8oZiYxNSk8PDEyfGg8PDZ8azooZiY3KTw8MTh8aDw8MTJ8azw8NnxhW2IrK10mNjM7NjU1MzY+Zj9lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGYpOihmLT02NTUzNixlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGY+PlxuMTAsNTYzMjB8ZiYxMDIzKSl9fWVsc2UgZSs9U3RyaW5nLmZyb21DaGFyQ29kZShmKX1yZXR1cm4gZX0sVj0oYSxiKT0+KGE+Pj49MCk/TmEodigpLGEsYik6XCJcIjtmdW5jdGlvbiBPYShhKXtpZihIKXJldHVybiBYKDEsMSxhKTtRPWE7aWYoIXlhKCkpe1cuSGIoKTtpZihCLm9uRXhpdClCLm9uRXhpdChhKTtQPSEwfUUoYSxuZXcgSWEoYSkpfVxudmFyIFFhPWE9PntRPWE7aWYoSCl0aHJvdyBQYShhKSxcInVud2luZFwiO09hKGEpfSxXPXthYjpbXSxZYTpbXSxtYjpbXSxRYTp7fSxnYjpmdW5jdGlvbigpe0g/Vy52YigpOlcudWIoKX0sdWI6ZnVuY3Rpb24oKXt1YS51bnNoaWZ0KCgpPT57QWEoKTtXLkJiKCgpPT5CYSgpKX0pfSx2YjpmdW5jdGlvbigpe1cucmVjZWl2ZU9iamVjdFRyYW5zZmVyPVcuRGI7Vy50aHJlYWRJbml0VExTPVcubGI7Vy5zZXRFeGl0U3RhdHVzPVcua2I7bm9FeGl0UnVudGltZT0hMX0sa2I6ZnVuY3Rpb24oYSl7UT1hfSxTYjpbXCIkdGVybWluYXRlV29ya2VyXCJdLEhiOmZ1bmN0aW9uKCl7Zm9yKHZhciBhIG9mIFcuWWEpSmEoYSk7Zm9yKGEgb2YgVy5hYilKYShhKTtXLmFiPVtdO1cuWWE9W107Vy5RYT1bXX0sRWI6ZnVuY3Rpb24oYSl7dmFyIGI9YS5YYTtkZWxldGUgVy5RYVtiXTtXLmFiLnB1c2goYSk7Vy5ZYS5zcGxpY2UoVy5ZYS5pbmRleE9mKGEpLDEpO2EuWGE9MDtSYShiKX0sRGI6ZnVuY3Rpb24oKXt9LFxubGI6ZnVuY3Rpb24oKXtXLm1iLmZvckVhY2goYT0+YSgpKX0sQ2I6YT0+bmV3IFByb21pc2UoYj0+e2Eub25tZXNzYWdlPWg9PntoPWguZGF0YTt2YXIgaz1oLmNtZDtpZihoLnRhcmdldFRocmVhZCYmaC50YXJnZXRUaHJlYWQhPVNhKCkpe3ZhciBxPVcuUWFbaC5SYl07cT9xLnBvc3RNZXNzYWdlKGgsaC50cmFuc2Zlckxpc3QpOksoJ0ludGVybmFsIGVycm9yISBXb3JrZXIgc2VudCBhIG1lc3NhZ2UgXCInK2srJ1wiIHRvIHRhcmdldCBwdGhyZWFkICcraC50YXJnZXRUaHJlYWQrXCIsIGJ1dCB0aGF0IHRocmVhZCBubyBsb25nZXIgZXhpc3RzIVwiKX1lbHNlIGlmKFwiY2hlY2tNYWlsYm94XCI9PT1rKVRhKCk7ZWxzZSBpZihcInNwYXduVGhyZWFkXCI9PT1rKUxhKGgpO2Vsc2UgaWYoXCJjbGVhbnVwVGhyZWFkXCI9PT1rKUthKGgudGhyZWFkKTtlbHNlIGlmKFwia2lsbFRocmVhZFwiPT09ayloPWgudGhyZWFkLGs9Vy5RYVtoXSxkZWxldGUgVy5RYVtoXSxKYShrKSxSYShoKSxXLllhLnNwbGljZShXLllhLmluZGV4T2YoayksXG4xKSxrLlhhPTA7ZWxzZSBpZihcImNhbmNlbFRocmVhZFwiPT09aylXLlFhW2gudGhyZWFkXS5wb3N0TWVzc2FnZSh7Y21kOlwiY2FuY2VsXCJ9KTtlbHNlIGlmKFwibG9hZGVkXCI9PT1rKWEubG9hZGVkPSEwLGIoYSk7ZWxzZSBpZihcImFsZXJ0XCI9PT1rKWFsZXJ0KFwiVGhyZWFkIFwiK2gudGhyZWFkSWQrXCI6IFwiK2gudGV4dCk7ZWxzZSBpZihcInNldGltbWVkaWF0ZVwiPT09aC50YXJnZXQpYS5wb3N0TWVzc2FnZShoKTtlbHNlIGlmKFwiY2FsbEhhbmRsZXJcIj09PWspQltoLmhhbmRsZXJdKC4uLmguYXJncyk7ZWxzZSBrJiZLKFwid29ya2VyIHNlbnQgYW4gdW5rbm93biBjb21tYW5kIFwiK2spfTthLm9uZXJyb3I9aD0+e0soXCJ3b3JrZXIgc2VudCBhbiBlcnJvciEgXCIraC5maWxlbmFtZStcIjpcIitoLmxpbmVubytcIjogXCIraC5tZXNzYWdlKTt0aHJvdyBoO307RyYmKGEub24oXCJtZXNzYWdlXCIsZnVuY3Rpb24oaCl7YS5vbm1lc3NhZ2Uoe2RhdGE6aH0pfSksYS5vbihcImVycm9yXCIsZnVuY3Rpb24oaCl7YS5vbmVycm9yKGgpfSkpO1xudmFyIGM9W10sZT1bXCJvbkV4aXRcIixcIm9uQWJvcnRcIixcInByaW50XCIsXCJwcmludEVyclwiXSxmO2ZvcihmIG9mIGUpQi5oYXNPd25Qcm9wZXJ0eShmKSYmYy5wdXNoKGYpO2EucG9zdE1lc3NhZ2Uoe2NtZDpcImxvYWRcIixoYW5kbGVyczpjLHVybE9yQmxvYjpCLm1haW5TY3JpcHRVcmxPckJsb2J8fF9zY3JpcHREaXIsd2FzbU1lbW9yeTpsLHdhc21Nb2R1bGU6c2F9KX0pLEJiOmZ1bmN0aW9uKGEpe2EoKX0scWI6ZnVuY3Rpb24oKXt2YXIgYT1sYShcIm9ydC13YXNtLXNpbWQtdGhyZWFkZWQud29ya2VyLmpzXCIpO2E9bmV3IFdvcmtlcihhKTtXLmFiLnB1c2goYSl9LHRiOmZ1bmN0aW9uKCl7MD09Vy5hYi5sZW5ndGgmJihXLnFiKCksVy5DYihXLmFiWzBdKSk7cmV0dXJuIFcuYWIucG9wKCl9fTtCLlBUaHJlYWQ9Vzt2YXIgVWE9YT0+e2Zvcig7MDxhLmxlbmd0aDspYS5zaGlmdCgpKEIpfTtcbkIuZXN0YWJsaXNoU3RhY2tTcGFjZT1mdW5jdGlvbigpe3ZhciBhPVNhKCksYj16KClbYSs1Mj4+Mj4+PjBdO2E9eigpW2ErNTY+PjI+Pj4wXTtWYShiLGItYSk7V2EoYil9O2Z1bmN0aW9uIFBhKGEpe2lmKEgpcmV0dXJuIFgoMiwwLGEpO1FhKGEpfUIuaW52b2tlRW50cnlQb2ludD1mdW5jdGlvbihhLGIpe2E9WGEuYXBwbHkobnVsbCxbYSxiXSk7eWEoKT9XLmtiKGEpOllhKGEpfTtmdW5jdGlvbiBaYShhKXt0aGlzLmZiPWEtMjQ7dGhpcy5wYj1mdW5jdGlvbihiKXtBKClbdGhpcy5mYis0Pj4yPj4+MF09Yn07dGhpcy5vYj1mdW5jdGlvbihiKXtBKClbdGhpcy5mYis4Pj4yPj4+MF09Yn07dGhpcy5nYj1mdW5jdGlvbihiLGMpe3RoaXMubmIoKTt0aGlzLnBiKGIpO3RoaXMub2IoYyl9O3RoaXMubmI9ZnVuY3Rpb24oKXtBKClbdGhpcy5mYisxNj4+Mj4+PjBdPTB9fXZhciAkYT0wLGFiPTA7XG5mdW5jdGlvbiBiYihhLGIsYyxlKXtyZXR1cm4gSD9YKDMsMSxhLGIsYyxlKTpjYihhLGIsYyxlKX1mdW5jdGlvbiBjYihhLGIsYyxlKXthPj4+PTA7Yj4+Pj0wO2M+Pj49MDtlPj4+PTA7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyKXJldHVybiBLKFwiQ3VycmVudCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IFNoYXJlZEFycmF5QnVmZmVyLCBwdGhyZWFkcyBhcmUgbm90IGF2YWlsYWJsZSFcIiksNjt2YXIgZj1bXTtpZihIJiYwPT09Zi5sZW5ndGgpcmV0dXJuIGJiKGEsYixjLGUpO2E9e0diOmMsWGE6YSxyYjplLE1iOmZ9O3JldHVybiBIPyhhLk9iPVwic3Bhd25UaHJlYWRcIixwb3N0TWVzc2FnZShhLGYpLDApOkxhKGEpfWZ1bmN0aW9uIGRiKGEsYixjKXtyZXR1cm4gSD9YKDQsMSxhLGIsYyk6MH1mdW5jdGlvbiBlYihhLGIpe2lmKEgpcmV0dXJuIFgoNSwxLGEsYil9XG52YXIgZmI9YT0+e2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoOysrYyl7dmFyIGU9YS5jaGFyQ29kZUF0KGMpOzEyNz49ZT9iKys6MjA0Nz49ZT9iKz0yOjU1Mjk2PD1lJiY1NzM0Mz49ZT8oYis9NCwrK2MpOmIrPTN9cmV0dXJuIGJ9LGdiPShhLGIsYyxlKT0+e2M+Pj49MDtpZighKDA8ZSkpcmV0dXJuIDA7dmFyIGY9YztlPWMrZS0xO2Zvcih2YXIgaD0wO2g8YS5sZW5ndGg7KytoKXt2YXIgaz1hLmNoYXJDb2RlQXQoaCk7aWYoNTUyOTY8PWsmJjU3MzQzPj1rKXt2YXIgcT1hLmNoYXJDb2RlQXQoKytoKTtrPTY1NTM2KygoayYxMDIzKTw8MTApfHEmMTAyM31pZigxMjc+PWspe2lmKGM+PWUpYnJlYWs7YltjKys+Pj4wXT1rfWVsc2V7aWYoMjA0Nz49ayl7aWYoYysxPj1lKWJyZWFrO2JbYysrPj4+MF09MTkyfGs+PjZ9ZWxzZXtpZig2NTUzNT49ayl7aWYoYysyPj1lKWJyZWFrO2JbYysrPj4+MF09MjI0fGs+PjEyfWVsc2V7aWYoYyszPj1lKWJyZWFrO2JbYysrPj4+MF09MjQwfGs+PlxuMTg7YltjKys+Pj4wXT0xMjh8az4+MTImNjN9YltjKys+Pj4wXT0xMjh8az4+NiY2M31iW2MrKz4+PjBdPTEyOHxrJjYzfX1iW2M+Pj4wXT0wO3JldHVybiBjLWZ9LGhiPShhLGIsYyk9PmdiKGEsdigpLGIsYyk7ZnVuY3Rpb24gaWIoYSxiKXtpZihIKXJldHVybiBYKDYsMSxhLGIpfWZ1bmN0aW9uIGpiKGEsYixjKXtpZihIKXJldHVybiBYKDcsMSxhLGIsYyl9ZnVuY3Rpb24ga2IoYSxiLGMpe3JldHVybiBIP1goOCwxLGEsYixjKTowfWZ1bmN0aW9uIGxiKGEsYil7aWYoSClyZXR1cm4gWCg5LDEsYSxiKX1mdW5jdGlvbiBtYihhLGIsYyl7aWYoSClyZXR1cm4gWCgxMCwxLGEsYixjKX1mdW5jdGlvbiBuYihhLGIsYyxlKXtpZihIKXJldHVybiBYKDExLDEsYSxiLGMsZSl9ZnVuY3Rpb24gb2IoYSxiLGMsZSl7aWYoSClyZXR1cm4gWCgxMiwxLGEsYixjLGUpfWZ1bmN0aW9uIHBiKGEsYixjLGUpe2lmKEgpcmV0dXJuIFgoMTMsMSxhLGIsYyxlKX1cbmZ1bmN0aW9uIHFiKGEpe2lmKEgpcmV0dXJuIFgoMTQsMSxhKX1mdW5jdGlvbiByYihhLGIpe2lmKEgpcmV0dXJuIFgoMTUsMSxhLGIpfWZ1bmN0aW9uIHNiKGEsYixjKXtpZihIKXJldHVybiBYKDE2LDEsYSxiLGMpfXZhciB0Yj1hPT57aWYoIVApdHJ5e2lmKGEoKSwheWEoKSl0cnl7SD9ZYShRKTpRYShRKX1jYXRjaChiKXtiIGluc3RhbmNlb2YgSWF8fFwidW53aW5kXCI9PWJ8fEUoMSxiKX19Y2F0Y2goYil7YiBpbnN0YW5jZW9mIElhfHxcInVud2luZFwiPT1ifHxFKDEsYil9fTtmdW5jdGlvbiB1YihhKXthPj4+PTA7XCJmdW5jdGlvblwiPT09dHlwZW9mIEF0b21pY3MuTmImJihBdG9taWNzLk5iKHooKSxhPj4yLGEpLnZhbHVlLnRoZW4oVGEpLGErPTEyOCxBdG9taWNzLnN0b3JlKHooKSxhPj4yLDEpKX1CLl9fZW1zY3JpcHRlbl90aHJlYWRfbWFpbGJveF9hd2FpdD11YjtmdW5jdGlvbiBUYSgpe3ZhciBhPVNhKCk7YSYmKHViKGEpLHRiKCgpPT52YigpKSl9Qi5jaGVja01haWxib3g9VGE7XG52YXIgWT1hPT4wPT09YSU0JiYoMCE9PWElMTAwfHwwPT09YSU0MDApLHdiPVswLDMxLDYwLDkxLDEyMSwxNTIsMTgyLDIxMywyNDQsMjc0LDMwNSwzMzVdLHhiPVswLDMxLDU5LDkwLDEyMCwxNTEsMTgxLDIxMiwyNDMsMjczLDMwNCwzMzRdO2Z1bmN0aW9uIHliKGEsYixjLGUsZixoLGsscSl7cmV0dXJuIEg/WCgxNywxLGEsYixjLGUsZixoLGsscSk6LTUyfWZ1bmN0aW9uIHpiKGEsYixjLGUsZixoLGspe2lmKEgpcmV0dXJuIFgoMTgsMSxhLGIsYyxlLGYsaCxrKX12YXIgQmI9YT0+e3ZhciBiPWZiKGEpKzEsYz1BYihiKTtjJiZoYihhLGMsYik7cmV0dXJuIGN9LENiPVtdLERiPShhLGIpPT57Q2IubGVuZ3RoPTA7dmFyIGM7Zm9yKGI+Pj0yO2M9digpW2ErKz4+PjBdOyliKz0xMDUhPWMmYixDYi5wdXNoKDEwNT09Yz96KClbYj4+PjBdOmRhKClbYisrPj4+MV0pLCsrYjtyZXR1cm4gQ2J9LEZiPWE9Pnt2YXIgYj1FYigpO2E9YSgpO1dhKGIpO3JldHVybiBhfTtcbmZ1bmN0aW9uIFgoYSxiKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoLTIsZT1hcmd1bWVudHM7cmV0dXJuIEZiKCgpPT57Zm9yKHZhciBmPUdiKDgqYyksaD1mPj4zLGs9MDtrPGM7aysrKXt2YXIgcT1lWzIra107ZGEoKVtoK2s+Pj4wXT1xfXJldHVybiBIYihhLGMsZixiKX0pfVxudmFyIEliPVtdLEpiPXt9LExiPSgpPT57aWYoIUtiKXt2YXIgYT17VVNFUjpcIndlYl91c2VyXCIsTE9HTkFNRTpcIndlYl91c2VyXCIsUEFUSDpcIi9cIixQV0Q6XCIvXCIsSE9NRTpcIi9ob21lL3dlYl91c2VyXCIsTEFORzooXCJvYmplY3RcIj09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8XCJDXCIpLnJlcGxhY2UoXCItXCIsXCJfXCIpK1wiLlVURi04XCIsXzpqYXx8XCIuL3RoaXMucHJvZ3JhbVwifSxiO2ZvcihiIGluIEpiKXZvaWQgMD09PUpiW2JdP2RlbGV0ZSBhW2JdOmFbYl09SmJbYl07dmFyIGM9W107Zm9yKGIgaW4gYSljLnB1c2goYCR7Yn09JHthW2JdfWApO0tiPWN9cmV0dXJuIEtifSxLYjtcbmZ1bmN0aW9uIE1iKGEsYil7aWYoSClyZXR1cm4gWCgxOSwxLGEsYik7YT4+Pj0wO2I+Pj49MDt2YXIgYz0wO0xiKCkuZm9yRWFjaChmdW5jdGlvbihlLGYpe3ZhciBoPWIrYztmPUEoKVthKzQqZj4+Mj4+PjBdPWg7Zm9yKGg9MDtoPGUubGVuZ3RoOysraClkKClbZisrPj4wPj4+MF09ZS5jaGFyQ29kZUF0KGgpO2QoKVtmPj4wPj4+MF09MDtjKz1lLmxlbmd0aCsxfSk7cmV0dXJuIDB9ZnVuY3Rpb24gTmIoYSxiKXtpZihIKXJldHVybiBYKDIwLDEsYSxiKTthPj4+PTA7Yj4+Pj0wO3ZhciBjPUxiKCk7QSgpW2E+PjI+Pj4wXT1jLmxlbmd0aDt2YXIgZT0wO2MuZm9yRWFjaChmdW5jdGlvbihmKXtlKz1mLmxlbmd0aCsxfSk7QSgpW2I+PjI+Pj4wXT1lO3JldHVybiAwfWZ1bmN0aW9uIE9iKGEpe3JldHVybiBIP1goMjEsMSxhKTo1Mn1mdW5jdGlvbiBQYihhLGIsYyxlKXtyZXR1cm4gSD9YKDIyLDEsYSxiLGMsZSk6NTJ9XG5mdW5jdGlvbiBRYihhLGIsYyxlLGYpe3JldHVybiBIP1goMjMsMSxhLGIsYyxlLGYpOjcwfXZhciBSYj1bbnVsbCxbXSxbXV07ZnVuY3Rpb24gVGIoYSxiLGMsZSl7aWYoSClyZXR1cm4gWCgyNCwxLGEsYixjLGUpO2I+Pj49MDtjPj4+PTA7ZT4+Pj0wO2Zvcih2YXIgZj0wLGg9MDtoPGM7aCsrKXt2YXIgaz1BKClbYj4+Mj4+PjBdLHE9QSgpW2IrND4+Mj4+PjBdO2IrPTg7Zm9yKHZhciBuPTA7bjxxO24rKyl7dmFyIG09digpW2srbj4+PjBdLHI9UmJbYV07MD09PW18fDEwPT09bT8oKDE9PT1hP3JhOkspKE5hKHIsMCkpLHIubGVuZ3RoPTApOnIucHVzaChtKX1mKz1xfUEoKVtlPj4yPj4+MF09ZjtyZXR1cm4gMH12YXIgVWI9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxWYj1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO2Z1bmN0aW9uIFdiKGEpe3ZhciBiPUFycmF5KGZiKGEpKzEpO2diKGEsYiwwLGIubGVuZ3RoKTtyZXR1cm4gYn1cbnZhciBYYj0oYSxiKT0+e2QoKS5zZXQoYSxiPj4+MCl9O1xuZnVuY3Rpb24gWWIoYSxiLGMsZSl7ZnVuY3Rpb24gZihnLHUseSl7Zm9yKGc9XCJudW1iZXJcIj09dHlwZW9mIGc/Zy50b1N0cmluZygpOmd8fFwiXCI7Zy5sZW5ndGg8dTspZz15WzBdK2c7cmV0dXJuIGd9ZnVuY3Rpb24gaChnLHUpe3JldHVybiBmKGcsdSxcIjBcIil9ZnVuY3Rpb24gayhnLHUpe2Z1bmN0aW9uIHkoU2Ipe3JldHVybiAwPlNiPy0xOjA8U2I/MTowfXZhciBPOzA9PT0oTz15KGcuZ2V0RnVsbFllYXIoKS11LmdldEZ1bGxZZWFyKCkpKSYmMD09PShPPXkoZy5nZXRNb250aCgpLXUuZ2V0TW9udGgoKSkpJiYoTz15KGcuZ2V0RGF0ZSgpLXUuZ2V0RGF0ZSgpKSk7cmV0dXJuIE99ZnVuY3Rpb24gcShnKXtzd2l0Y2goZy5nZXREYXkoKSl7Y2FzZSAwOnJldHVybiBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCktMSwxMSwyOSk7Y2FzZSAxOnJldHVybiBnO2Nhc2UgMjpyZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLDAsMyk7Y2FzZSAzOnJldHVybiBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCksXG4wLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIG4oZyl7dmFyIHU9Zy5aYTtmb3IoZz1uZXcgRGF0ZSgobmV3IERhdGUoZy4kYSsxOTAwLDAsMSkpLmdldFRpbWUoKSk7MDx1Oyl7dmFyIHk9Zy5nZXRNb250aCgpLE89KFkoZy5nZXRGdWxsWWVhcigpKT9VYjpWYilbeV07aWYodT5PLWcuZ2V0RGF0ZSgpKXUtPU8tZy5nZXREYXRlKCkrMSxnLnNldERhdGUoMSksMTE+eT9nLnNldE1vbnRoKHkrMSk6KGcuc2V0TW9udGgoMCksZy5zZXRGdWxsWWVhcihnLmdldEZ1bGxZZWFyKCkrMSkpO2Vsc2V7Zy5zZXREYXRlKGcuZ2V0RGF0ZSgpK3UpO2JyZWFrfX15PW5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSsxLDAsNCk7dT1xKG5ldyBEYXRlKGcuZ2V0RnVsbFllYXIoKSxcbjAsNCkpO3k9cSh5KTtyZXR1cm4gMD49ayh1LGcpPzA+PWsoeSxnKT9nLmdldEZ1bGxZZWFyKCkrMTpnLmdldEZ1bGxZZWFyKCk6Zy5nZXRGdWxsWWVhcigpLTF9YT4+Pj0wO2I+Pj49MDtjPj4+PTA7ZT4+Pj0wO3ZhciBtPXooKVtlKzQwPj4yPj4+MF07ZT17S2I6eigpW2U+PjI+Pj4wXSxKYjp6KClbZSs0Pj4yPj4+MF0sY2I6eigpW2UrOD4+Mj4+PjBdLGliOnooKVtlKzEyPj4yPj4+MF0sZWI6eigpW2UrMTY+PjI+Pj4wXSwkYTp6KClbZSsyMD4+Mj4+PjBdLFdhOnooKVtlKzI0Pj4yPj4+MF0sWmE6eigpW2UrMjg+PjI+Pj4wXSxUYjp6KClbZSszMj4+Mj4+PjBdLEliOnooKVtlKzM2Pj4yPj4+MF0sTGI6bT9WKG0pOlwiXCJ9O2M9VihjKTttPXtcIiVjXCI6XCIlYSAlYiAlZCAlSDolTTolUyAlWVwiLFwiJURcIjpcIiVtLyVkLyV5XCIsXCIlRlwiOlwiJVktJW0tJWRcIixcIiVoXCI6XCIlYlwiLFwiJXJcIjpcIiVJOiVNOiVTICVwXCIsXCIlUlwiOlwiJUg6JU1cIixcIiVUXCI6XCIlSDolTTolU1wiLFwiJXhcIjpcIiVtLyVkLyV5XCIsXCIlWFwiOlwiJUg6JU06JVNcIixcblwiJUVjXCI6XCIlY1wiLFwiJUVDXCI6XCIlQ1wiLFwiJUV4XCI6XCIlbS8lZC8leVwiLFwiJUVYXCI6XCIlSDolTTolU1wiLFwiJUV5XCI6XCIleVwiLFwiJUVZXCI6XCIlWVwiLFwiJU9kXCI6XCIlZFwiLFwiJU9lXCI6XCIlZVwiLFwiJU9IXCI6XCIlSFwiLFwiJU9JXCI6XCIlSVwiLFwiJU9tXCI6XCIlbVwiLFwiJU9NXCI6XCIlTVwiLFwiJU9TXCI6XCIlU1wiLFwiJU91XCI6XCIldVwiLFwiJU9VXCI6XCIlVVwiLFwiJU9WXCI6XCIlVlwiLFwiJU93XCI6XCIld1wiLFwiJU9XXCI6XCIlV1wiLFwiJU95XCI6XCIleVwifTtmb3IodmFyIHIgaW4gbSljPWMucmVwbGFjZShuZXcgUmVnRXhwKHIsXCJnXCIpLG1bcl0pO3ZhciB3PVwiU3VuZGF5IE1vbmRheSBUdWVzZGF5IFdlZG5lc2RheSBUaHVyc2RheSBGcmlkYXkgU2F0dXJkYXlcIi5zcGxpdChcIiBcIikseD1cIkphbnVhcnkgRmVicnVhcnkgTWFyY2ggQXByaWwgTWF5IEp1bmUgSnVseSBBdWd1c3QgU2VwdGVtYmVyIE9jdG9iZXIgTm92ZW1iZXIgRGVjZW1iZXJcIi5zcGxpdChcIiBcIik7bT17XCIlYVwiOmc9PndbZy5XYV0uc3Vic3RyaW5nKDAsMyksXCIlQVwiOmc9PndbZy5XYV0sXCIlYlwiOmc9PlxueFtnLmViXS5zdWJzdHJpbmcoMCwzKSxcIiVCXCI6Zz0+eFtnLmViXSxcIiVDXCI6Zz0+aCgoZy4kYSsxOTAwKS8xMDB8MCwyKSxcIiVkXCI6Zz0+aChnLmliLDIpLFwiJWVcIjpnPT5mKGcuaWIsMixcIiBcIiksXCIlZ1wiOmc9Pm4oZykudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksXCIlR1wiOmc9Pm4oZyksXCIlSFwiOmc9PmgoZy5jYiwyKSxcIiVJXCI6Zz0+e2c9Zy5jYjswPT1nP2c9MTI6MTI8ZyYmKGctPTEyKTtyZXR1cm4gaChnLDIpfSxcIiVqXCI6Zz0+e2Zvcih2YXIgdT0wLHk9MDt5PD1nLmViLTE7dSs9KFkoZy4kYSsxOTAwKT9VYjpWYilbeSsrXSk7cmV0dXJuIGgoZy5pYit1LDMpfSxcIiVtXCI6Zz0+aChnLmViKzEsMiksXCIlTVwiOmc9PmgoZy5KYiwyKSxcIiVuXCI6KCk9PlwiXFxuXCIsXCIlcFwiOmc9PjA8PWcuY2ImJjEyPmcuY2I/XCJBTVwiOlwiUE1cIixcIiVTXCI6Zz0+aChnLktiLDIpLFwiJXRcIjooKT0+XCJcXHRcIixcIiV1XCI6Zz0+Zy5XYXx8NyxcIiVVXCI6Zz0+aChNYXRoLmZsb29yKChnLlphKzctZy5XYSkvNyksMiksXCIlVlwiOmc9Plxue3ZhciB1PU1hdGguZmxvb3IoKGcuWmErNy0oZy5XYSs2KSU3KS83KTsyPj0oZy5XYSszNzEtZy5aYS0yKSU3JiZ1Kys7aWYodSk1Mz09dSYmKHk9KGcuV2ErMzcxLWcuWmEpJTcsND09eXx8Mz09eSYmWShnLiRhKXx8KHU9MSkpO2Vsc2V7dT01Mjt2YXIgeT0oZy5XYSs3LWcuWmEtMSklNzsoND09eXx8NT09eSYmWShnLiRhJTQwMC0xKSkmJnUrK31yZXR1cm4gaCh1LDIpfSxcIiV3XCI6Zz0+Zy5XYSxcIiVXXCI6Zz0+aChNYXRoLmZsb29yKChnLlphKzctKGcuV2ErNiklNykvNyksMiksXCIleVwiOmc9PihnLiRhKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFwiJVlcIjpnPT5nLiRhKzE5MDAsXCIlelwiOmc9PntnPWcuSWI7dmFyIHU9MDw9ZztnPU1hdGguYWJzKGcpLzYwO3JldHVybih1P1wiK1wiOlwiLVwiKStTdHJpbmcoXCIwMDAwXCIrKGcvNjAqMTAwK2clNjApKS5zbGljZSgtNCl9LFwiJVpcIjpnPT5nLkxiLFwiJSVcIjooKT0+XCIlXCJ9O2M9Yy5yZXBsYWNlKC8lJS9nLFwiXFx4MDBcXHgwMFwiKTtmb3IociBpbiBtKWMuaW5jbHVkZXMocikmJlxuKGM9Yy5yZXBsYWNlKG5ldyBSZWdFeHAocixcImdcIiksbVtyXShlKSkpO2M9Yy5yZXBsYWNlKC9cXDBcXDAvZyxcIiVcIik7cj1XYihjKTtpZihyLmxlbmd0aD5iKXJldHVybiAwO1hiKHIsYSk7cmV0dXJuIHIubGVuZ3RoLTF9ZnVuY3Rpb24gWmIoYSl7dHJ5e2EoKX1jYXRjaChiKXtNKGIpfX1mdW5jdGlvbiAkYihhKXt2YXIgYj17fSxjO2ZvcihjIGluIGEpKGZ1bmN0aW9uKGUpe3ZhciBmPWFbZV07YltlXT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBmP2Z1bmN0aW9uKCl7YWMucHVzaChlKTt0cnl7cmV0dXJuIGYuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZpbmFsbHl7UHx8KGFjLnBvcCgpPT09ZXx8TSgpLEQmJjE9PT1aJiYwPT09YWMubGVuZ3RoJiYoWj0wLHhhKz0xLFpiKGJjKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgRmliZXJzJiZGaWJlcnMuVWIoKSkpfX06Zn0pKGMpO3JldHVybiBifXZhciBaPTAsRD1udWxsLGNjPTAsYWM9W10sZGM9e30sZWM9e30sZmM9MCxnYz1udWxsLGhjPVtdO1xuZnVuY3Rpb24gaGEoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsYik9PntnYz17cmVzb2x2ZTphLHJlamVjdDpifX0pfWZ1bmN0aW9uIGljKCl7dmFyIGE9QWIoNjU1NDgpLGI9YSsxMjtBKClbYT4+Mj4+PjBdPWI7QSgpW2ErND4+Mj4+PjBdPWIrNjU1MzY7Yj1hY1swXTt2YXIgYz1kY1tiXTt2b2lkIDA9PT1jJiYoYz1mYysrLGRjW2JdPWMsZWNbY109Yik7Yj1jO3ooKVthKzg+PjI+Pj4wXT1iO3JldHVybiBhfWZ1bmN0aW9uIGpjKCl7dmFyIGE9eigpW0QrOD4+Mj4+PjBdO2E9TltlY1thXV07LS14YTtyZXR1cm4gYSgpfVxuZnVuY3Rpb24ga2MoYSl7aWYoIVApe2lmKDA9PT1aKXt2YXIgYj0hMSxjPSExO2EoKGU9MCk9PntpZighUCYmKGNjPWUsYj0hMCxjKSl7Wj0yO1piKCgpPT5sYyhEKSk7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEJyb3dzZXImJkJyb3dzZXIuaGIuc2ImJkJyb3dzZXIuaGIucmVzdW1lKCk7ZT0hMTt0cnl7dmFyIGY9amMoKX1jYXRjaChxKXtmPXEsZT0hMH12YXIgaD0hMTtpZighRCl7dmFyIGs9Z2M7ayYmKGdjPW51bGwsKGU/ay5yZWplY3Q6ay5yZXNvbHZlKShmKSxoPSEwKX1pZihlJiYhaCl0aHJvdyBmO319KTtjPSEwO2J8fChaPTEsRD1pYygpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBCcm93c2VyJiZCcm93c2VyLmhiLnNiJiZCcm93c2VyLmhiLnBhdXNlKCksWmIoKCk9Pm1jKEQpKSl9ZWxzZSAyPT09Wj8oWj0wLFpiKG5jKSxvYyhEKSxEPW51bGwsaGMuZm9yRWFjaChlPT50YihlKSkpOk0oYGludmFsaWQgc3RhdGU6ICR7Wn1gKTtyZXR1cm4gY2N9fVxuZnVuY3Rpb24gcGMoYSl7cmV0dXJuIGtjKGI9PnthKCkudGhlbihiKX0pfVcuZ2IoKTtcbnZhciBxYz1bbnVsbCxPYSxQYSxiYixkYixlYixpYixqYixrYixsYixtYixuYixvYixwYixxYixyYixzYix5Yix6YixNYixOYixPYixQYixRYixUYl0sdGM9e3I6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBwYyhhc3luYygpPT57YXdhaXQgQi54YihhLGIsYyl9KX0sYjpmdW5jdGlvbihhLGIsYyl7YT4+Pj0wOyhuZXcgWmEoYSkpLmdiKGI+Pj4wLGM+Pj4wKTskYT1hO2FiKys7dGhyb3cgJGE7fSxPOmZ1bmN0aW9uKGEpe3JjKGE+Pj4wLCFGLDEsIWthLDEzMTA3MiwhMSk7Vy5sYigpfSxsOmZ1bmN0aW9uKGEpe2E+Pj49MDtIP3Bvc3RNZXNzYWdlKHtjbWQ6XCJjbGVhbnVwVGhyZWFkXCIsdGhyZWFkOmF9KTpLYShhKX0sSTpjYixpOmRiLFU6ZWIsRTppYixHOmpiLFY6a2IsUzpsYixLOm1iLFI6bmIscDpvYixGOnBiLEM6cWIsVDpyYixEOnNiLHE6KCk9PiEwLEE6ZnVuY3Rpb24oYSxiKXthPj4+PTA7YT09Yj4+PjA/c2V0VGltZW91dCgoKT0+VGEoKSk6SD9wb3N0TWVzc2FnZSh7dGFyZ2V0VGhyZWFkOmEsXG5jbWQ6XCJjaGVja01haWxib3hcIn0pOihhPVcuUWFbYV0pJiZhLnBvc3RNZXNzYWdlKHtjbWQ6XCJjaGVja01haWxib3hcIn0pfSxNOmZ1bmN0aW9uKCl7cmV0dXJuLTF9LE46dWIsWDpmdW5jdGlvbihhKXtHJiZXLlFhW2E+Pj4wXS5yZWYoKX0sdTpmdW5jdGlvbihhLGIsYyl7YT1iKzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFhPyhhPj4+MCkrNDI5NDk2NzI5NipiOk5hTjtjPj4+PTA7YT1uZXcgRGF0ZSgxRTMqYSk7eigpW2M+PjI+Pj4wXT1hLmdldFVUQ1NlY29uZHMoKTt6KClbYys0Pj4yPj4+MF09YS5nZXRVVENNaW51dGVzKCk7eigpW2MrOD4+Mj4+PjBdPWEuZ2V0VVRDSG91cnMoKTt6KClbYysxMj4+Mj4+PjBdPWEuZ2V0VVRDRGF0ZSgpO3ooKVtjKzE2Pj4yPj4+MF09YS5nZXRVVENNb250aCgpO3ooKVtjKzIwPj4yPj4+MF09YS5nZXRVVENGdWxsWWVhcigpLTE5MDA7eigpW2MrMjQ+PjI+Pj4wXT1hLmdldFVUQ0RheSgpO2E9KGEuZ2V0VGltZSgpLURhdGUuVVRDKGEuZ2V0VVRDRnVsbFllYXIoKSxcbjAsMSwwLDAsMCwwKSkvODY0RTV8MDt6KClbYysyOD4+Mj4+PjBdPWF9LHY6ZnVuY3Rpb24oYSxiLGMpe2E9YisyMDk3MTUyPj4+MDw0MTk0MzA1LSEhYT8oYT4+PjApKzQyOTQ5NjcyOTYqYjpOYU47Yz4+Pj0wO2E9bmV3IERhdGUoMUUzKmEpO3ooKVtjPj4yPj4+MF09YS5nZXRTZWNvbmRzKCk7eigpW2MrND4+Mj4+PjBdPWEuZ2V0TWludXRlcygpO3ooKVtjKzg+PjI+Pj4wXT1hLmdldEhvdXJzKCk7eigpW2MrMTI+PjI+Pj4wXT1hLmdldERhdGUoKTt6KClbYysxNj4+Mj4+PjBdPWEuZ2V0TW9udGgoKTt6KClbYysyMD4+Mj4+PjBdPWEuZ2V0RnVsbFllYXIoKS0xOTAwO3ooKVtjKzI0Pj4yPj4+MF09YS5nZXREYXkoKTtiPShZKGEuZ2V0RnVsbFllYXIoKSk/d2I6eGIpW2EuZ2V0TW9udGgoKV0rYS5nZXREYXRlKCktMXwwO3ooKVtjKzI4Pj4yPj4+MF09Yjt6KClbYyszNj4+Mj4+PjBdPS0oNjAqYS5nZXRUaW1lem9uZU9mZnNldCgpKTtiPShuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksXG42LDEpKS5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciBlPShuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksMCwxKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTthPShiIT1lJiZhLmdldFRpbWV6b25lT2Zmc2V0KCk9PU1hdGgubWluKGUsYikpfDA7eigpW2MrMzI+PjI+Pj4wXT1hfSx3OmZ1bmN0aW9uKGEpe2E+Pj49MDt2YXIgYj1uZXcgRGF0ZSh6KClbYSsyMD4+Mj4+PjBdKzE5MDAseigpW2ErMTY+PjI+Pj4wXSx6KClbYSsxMj4+Mj4+PjBdLHooKVthKzg+PjI+Pj4wXSx6KClbYSs0Pj4yPj4+MF0seigpW2E+PjI+Pj4wXSwwKSxjPXooKVthKzMyPj4yPj4+MF0sZT1iLmdldFRpbWV6b25lT2Zmc2V0KCksZj0obmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLDYsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCksaD0obmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLDAsMSkpLmdldFRpbWV6b25lT2Zmc2V0KCksaz1NYXRoLm1pbihoLGYpOzA+Yz96KClbYSszMj4+Mj4+PjBdPU51bWJlcihmIT1oJiZrPT1lKTpcbjA8YyE9KGs9PWUpJiYoZj1NYXRoLm1heChoLGYpLGIuc2V0VGltZShiLmdldFRpbWUoKSs2RTQqKCgwPGM/azpmKS1lKSkpO3ooKVthKzI0Pj4yPj4+MF09Yi5nZXREYXkoKTtjPShZKGIuZ2V0RnVsbFllYXIoKSk/d2I6eGIpW2IuZ2V0TW9udGgoKV0rYi5nZXREYXRlKCktMXwwO3ooKVthKzI4Pj4yPj4+MF09Yzt6KClbYT4+Mj4+PjBdPWIuZ2V0U2Vjb25kcygpO3ooKVthKzQ+PjI+Pj4wXT1iLmdldE1pbnV0ZXMoKTt6KClbYSs4Pj4yPj4+MF09Yi5nZXRIb3VycygpO3ooKVthKzEyPj4yPj4+MF09Yi5nZXREYXRlKCk7eigpW2ErMTY+PjI+Pj4wXT1iLmdldE1vbnRoKCk7eigpW2ErMjA+PjI+Pj4wXT1iLmdldFllYXIoKTthPWIuZ2V0VGltZSgpLzFFMztyZXR1cm4gc2MoKFU9YSwxPD0rTWF0aC5hYnMoVSk/MDxVPytNYXRoLmZsb29yKFUvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoVS0rKH5+VT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCkpLGE+Pj4wfSxzOnliLHQ6emIsXG56OmZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBlKG0pe3JldHVybihtPW0udG9UaW1lU3RyaW5nKCkubWF0Y2goL1xcKChbQS1aYS16IF0rKVxcKSQvKSk/bVsxXTpcIkdNVFwifWE+Pj49MDtiPj4+PTA7Yz4+Pj0wO3ZhciBmPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxoPW5ldyBEYXRlKGYsMCwxKSxrPW5ldyBEYXRlKGYsNiwxKTtmPWguZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgcT1rLmdldFRpbWV6b25lT2Zmc2V0KCksbj1NYXRoLm1heChmLHEpO0EoKVthPj4yPj4+MF09NjAqbjt6KClbYj4+Mj4+PjBdPU51bWJlcihmIT1xKTthPWUoaCk7Yj1lKGspO2E9QmIoYSk7Yj1CYihiKTtxPGY/KEEoKVtjPj4yPj4+MF09YSxBKClbYys0Pj4yPj4+MF09Yik6KEEoKVtjPj4yPj4+MF09YixBKClbYys0Pj4yPj4+MF09YSl9LGQ6KCk9PntNKFwiXCIpfSxjOmZ1bmN0aW9uKGEsYixjKXthPj4+PTA7Yj1EYihiPj4+MCxjPj4+MCk7cmV0dXJuIEhhW2FdLmFwcGx5KG51bGwsYil9LGs6ZnVuY3Rpb24oYSxcbmIsYyl7YT4+Pj0wO2I9RGIoYj4+PjAsYz4+PjApO3JldHVybiBIYVthXS5hcHBseShudWxsLGIpfSxtOmZ1bmN0aW9uKCl7fSxqOmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LFc6KCk9Pnt4YSs9MTt0aHJvd1widW53aW5kXCI7fSxCOmZ1bmN0aW9uKCl7cmV0dXJuIDQyOTQ5MDE3NjB9LGY6KCk9PnBlcmZvcm1hbmNlLnRpbWVPcmlnaW4rcGVyZm9ybWFuY2Uubm93KCksZzpmdW5jdGlvbigpe3JldHVybiBHP3JlcXVpcmUoXCJvc1wiKS5jcHVzKCkubGVuZ3RoOm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5fSxMOmZ1bmN0aW9uKGEsYixjLGUpe1cuUGI9Yj4+PjA7SWIubGVuZ3RoPWM7Yj1lPj4+MD4+Mztmb3IoZT0wO2U8YztlKyspSWJbZV09ZGEoKVtiK2U+Pj4wXTtyZXR1cm4oMD5hP0hhWy1hLTFdOnFjW2FdKS5hcHBseShudWxsLEliKX0seTpmdW5jdGlvbihhKXthPj4+PTA7dmFyIGI9digpLmxlbmd0aDtpZihhPD1ifHw0Mjk0OTAxNzYwPGEpcmV0dXJuITE7Zm9yKHZhciBjPVxuMTs0Pj1jO2MqPTIpe3ZhciBlPWIqKDErLjIvYyk7ZT1NYXRoLm1pbihlLGErMTAwNjYzMjk2KTt2YXIgZj1NYXRoO2U9TWF0aC5tYXgoYSxlKTthOntmPWYubWluLmNhbGwoZiw0Mjk0OTAxNzYwLGUrKDY1NTM2LWUlNjU1MzYpJTY1NTM2KS1sLmJ1ZmZlci5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTY7dHJ5e2wuZ3JvdyhmKTt0KCk7dmFyIGg9MTticmVhayBhfWNhdGNoKGspe31oPXZvaWQgMH1pZihoKXJldHVybiEwfXJldHVybiExfSxQOk1iLFE6TmIsSDpRYSxoOk9iLG86UGIseDpRYixuOlRiLGE6bHx8Qi53YXNtTWVtb3J5LEo6WWIsZTpmdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gWWIoYT4+PjAsYj4+PjAsYz4+PjAsZT4+PjApfX07XG4oZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGMsZSl7Yz1jLmV4cG9ydHM7Yz0kYihjKTtOPWM9dWMoYyk7Vy5tYi5wdXNoKE4uRGEpO3ZhLnVuc2hpZnQoTi5ZKTtzYT1lO0JhKCk7cmV0dXJuIGN9dmFyIGI9e2E6dGN9O0FhKCk7aWYoQi5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBCLmluc3RhbnRpYXRlV2FzbShiLGEpfWNhdGNoKGMpe0soXCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiBcIitjKSxDKGMpfUdhKGIsZnVuY3Rpb24oYyl7YShjLmluc3RhbmNlLGMubW9kdWxlKX0pLmNhdGNoKEMpO3JldHVybnt9fSkoKTtCLl9PcnRJbml0PShhLGIpPT4oQi5fT3J0SW5pdD1OLlopKGEsYik7Qi5fT3J0R2V0TGFzdEVycm9yPShhLGIpPT4oQi5fT3J0R2V0TGFzdEVycm9yPU4uXykoYSxiKTtcbkIuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zPShhLGIsYyxlLGYsaCxrLHEsbixtKT0+KEIuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zPU4uJCkoYSxiLGMsZSxmLGgsayxxLG4sbSk7Qi5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXI9KGEsYik9PihCLl9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlcj1OLmFhKShhLGIpO0IuX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZT0oYSxiLGMpPT4oQi5fT3J0QWRkRnJlZURpbWVuc2lvbk92ZXJyaWRlPU4uYmEpKGEsYixjKTtCLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnk9KGEsYixjKT0+KEIuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeT1OLmNhKShhLGIsYyk7Qi5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zPWE9PihCLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnM9Ti5kYSkoYSk7Qi5fT3J0Q3JlYXRlU2Vzc2lvbj0oYSxiLGMpPT4oQi5fT3J0Q3JlYXRlU2Vzc2lvbj1OLmVhKShhLGIsYyk7XG5CLl9PcnRSZWxlYXNlU2Vzc2lvbj1hPT4oQi5fT3J0UmVsZWFzZVNlc3Npb249Ti5mYSkoYSk7Qi5fT3J0R2V0SW5wdXRPdXRwdXRDb3VudD0oYSxiLGMpPT4oQi5fT3J0R2V0SW5wdXRPdXRwdXRDb3VudD1OLmdhKShhLGIsYyk7Qi5fT3J0R2V0SW5wdXROYW1lPShhLGIpPT4oQi5fT3J0R2V0SW5wdXROYW1lPU4uaGEpKGEsYik7Qi5fT3J0R2V0T3V0cHV0TmFtZT0oYSxiKT0+KEIuX09ydEdldE91dHB1dE5hbWU9Ti5pYSkoYSxiKTtCLl9PcnRGcmVlPWE9PihCLl9PcnRGcmVlPU4uamEpKGEpO0IuX09ydENyZWF0ZVRlbnNvcj0oYSxiLGMsZSxmLGgpPT4oQi5fT3J0Q3JlYXRlVGVuc29yPU4ua2EpKGEsYixjLGUsZixoKTtCLl9PcnRHZXRUZW5zb3JEYXRhPShhLGIsYyxlLGYpPT4oQi5fT3J0R2V0VGVuc29yRGF0YT1OLmxhKShhLGIsYyxlLGYpO0IuX09ydFJlbGVhc2VUZW5zb3I9YT0+KEIuX09ydFJlbGVhc2VUZW5zb3I9Ti5tYSkoYSk7XG5CLl9PcnRDcmVhdGVSdW5PcHRpb25zPShhLGIsYyxlKT0+KEIuX09ydENyZWF0ZVJ1bk9wdGlvbnM9Ti5uYSkoYSxiLGMsZSk7Qi5fT3J0QWRkUnVuQ29uZmlnRW50cnk9KGEsYixjKT0+KEIuX09ydEFkZFJ1bkNvbmZpZ0VudHJ5PU4ub2EpKGEsYixjKTtCLl9PcnRSZWxlYXNlUnVuT3B0aW9ucz1hPT4oQi5fT3J0UmVsZWFzZVJ1bk9wdGlvbnM9Ti5wYSkoYSk7Qi5fT3J0Q3JlYXRlQmluZGluZz1hPT4oQi5fT3J0Q3JlYXRlQmluZGluZz1OLnFhKShhKTtCLl9PcnRCaW5kSW5wdXQ9KGEsYixjKT0+KEIuX09ydEJpbmRJbnB1dD1OLnJhKShhLGIsYyk7Qi5fT3J0QmluZE91dHB1dD0oYSxiLGMsZSk9PihCLl9PcnRCaW5kT3V0cHV0PU4uc2EpKGEsYixjLGUpO0IuX09ydENsZWFyQm91bmRPdXRwdXRzPWE9PihCLl9PcnRDbGVhckJvdW5kT3V0cHV0cz1OLnRhKShhKTtCLl9PcnRSZWxlYXNlQmluZGluZz1hPT4oQi5fT3J0UmVsZWFzZUJpbmRpbmc9Ti51YSkoYSk7XG5CLl9PcnRSdW5XaXRoQmluZGluZz0oYSxiLGMsZSxmKT0+KEIuX09ydFJ1bldpdGhCaW5kaW5nPU4udmEpKGEsYixjLGUsZik7Qi5fT3J0UnVuPShhLGIsYyxlLGYsaCxrLHEpPT4oQi5fT3J0UnVuPU4ud2EpKGEsYixjLGUsZixoLGsscSk7Qi5fT3J0RW5kUHJvZmlsaW5nPWE9PihCLl9PcnRFbmRQcm9maWxpbmc9Ti54YSkoYSk7Qi5fSnNlcE91dHB1dD0oYSxiLGMpPT4oQi5fSnNlcE91dHB1dD1OLnlhKShhLGIsYyk7Qi5fSnNlcEdldE5vZGVOYW1lPWE9PihCLl9Kc2VwR2V0Tm9kZU5hbWU9Ti56YSkoYSk7dmFyIFNhPUIuX3B0aHJlYWRfc2VsZj0oKT0+KFNhPUIuX3B0aHJlYWRfc2VsZj1OLkFhKSgpLEFiPUIuX21hbGxvYz1hPT4oQWI9Qi5fbWFsbG9jPU4uQmEpKGEpLG9jPUIuX2ZyZWU9YT0+KG9jPUIuX2ZyZWU9Ti5DYSkoYSk7Qi5fX2Vtc2NyaXB0ZW5fdGxzX2luaXQ9KCk9PihCLl9fZW1zY3JpcHRlbl90bHNfaW5pdD1OLkRhKSgpO1xudmFyIHJjPUIuX19lbXNjcmlwdGVuX3RocmVhZF9pbml0PShhLGIsYyxlLGYsaCk9PihyYz1CLl9fZW1zY3JpcHRlbl90aHJlYWRfaW5pdD1OLkZhKShhLGIsYyxlLGYsaCk7Qi5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2NyYXNoZWQ9KCk9PihCLl9fZW1zY3JpcHRlbl90aHJlYWRfY3Jhc2hlZD1OLkdhKSgpO1xudmFyIEhiPShhLGIsYyxlKT0+KEhiPU4uSGEpKGEsYixjLGUpLFJhPWE9PihSYT1OLklhKShhKSxZYT1CLl9fZW1zY3JpcHRlbl90aHJlYWRfZXhpdD1hPT4oWWE9Qi5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2V4aXQ9Ti5KYSkoYSksdmI9Qi5fX2Vtc2NyaXB0ZW5fY2hlY2tfbWFpbGJveD0oKT0+KHZiPUIuX19lbXNjcmlwdGVuX2NoZWNrX21haWxib3g9Ti5LYSkoKSxzYz1hPT4oc2M9Ti5MYSkoYSksVmE9KGEsYik9PihWYT1OLk1hKShhLGIpLEViPSgpPT4oRWI9Ti5OYSkoKSxXYT1hPT4oV2E9Ti5PYSkoYSksR2I9YT0+KEdiPU4uUGEpKGEpLFhhPUIuZHluQ2FsbF9paT0oYSxiKT0+KFhhPUIuZHluQ2FsbF9paT1OLlJhKShhLGIpLG1jPWE9PihtYz1OLlNhKShhKSxiYz0oKT0+KGJjPU4uVGEpKCksbGM9YT0+KGxjPU4uVWEpKGEpLG5jPSgpPT4obmM9Ti5WYSkoKTtCLl9fX3N0YXJ0X2VtX2pzPTkxNzY3ODtCLl9fX3N0b3BfZW1fanM9OTE3ODM5O1xuZnVuY3Rpb24gdWMoYSl7YT1PYmplY3QuYXNzaWduKHt9LGEpO3ZhciBiPWU9PigpPT5lKCk+Pj4wLGM9ZT0+Zj0+ZShmKT4+PjA7YS5fX2Vycm5vX2xvY2F0aW9uPWIoYS5fX2Vycm5vX2xvY2F0aW9uKTthLnB0aHJlYWRfc2VsZj1iKGEucHRocmVhZF9zZWxmKTthLm1hbGxvYz1jKGEubWFsbG9jKTthLnN0YWNrU2F2ZT1iKGEuc3RhY2tTYXZlKTthLnN0YWNrQWxsb2M9YyhhLnN0YWNrQWxsb2MpO3JldHVybiBhfUIua2VlcFJ1bnRpbWVBbGl2ZT15YTtCLndhc21NZW1vcnk9bDtCLnN0YWNrQWxsb2M9R2I7Qi5zdGFja1NhdmU9RWI7Qi5zdGFja1Jlc3RvcmU9V2E7Qi5VVEY4VG9TdHJpbmc9VjtCLnN0cmluZ1RvVVRGOD1oYjtCLmxlbmd0aEJ5dGVzVVRGOD1mYjtCLkV4aXRTdGF0dXM9SWE7Qi5QVGhyZWFkPVc7dmFyIHZjO1M9ZnVuY3Rpb24gd2MoKXt2Y3x8eGMoKTt2Y3x8KFM9d2MpfTtcbmZ1bmN0aW9uIHhjKCl7ZnVuY3Rpb24gYSgpe2lmKCF2YyYmKHZjPSEwLEIuY2FsbGVkUnVuPSEwLCFQKSl7SHx8VWEodmEpO2ZhKEIpO2lmKEIub25SdW50aW1lSW5pdGlhbGl6ZWQpQi5vblJ1bnRpbWVJbml0aWFsaXplZCgpO2lmKCFIKXtpZihCLnBvc3RSdW4pZm9yKFwiZnVuY3Rpb25cIj09dHlwZW9mIEIucG9zdFJ1biYmKEIucG9zdFJ1bj1bQi5wb3N0UnVuXSk7Qi5wb3N0UnVuLmxlbmd0aDspe3ZhciBiPUIucG9zdFJ1bi5zaGlmdCgpO3dhLnVuc2hpZnQoYil9VWEod2EpfX19aWYoISgwPFIpKWlmKEgpZmEoQiksSHx8VWEodmEpLHN0YXJ0V29ya2VyKEIpO2Vsc2V7aWYoQi5wcmVSdW4pZm9yKFwiZnVuY3Rpb25cIj09dHlwZW9mIEIucHJlUnVuJiYoQi5wcmVSdW49W0IucHJlUnVuXSk7Qi5wcmVSdW4ubGVuZ3RoOyl1YS51bnNoaWZ0KEIucHJlUnVuLnNoaWZ0KCkpO1VhKHVhKTswPFJ8fChCLnNldFN0YXR1cz8oQi5zZXRTdGF0dXMoXCJSdW5uaW5nLi4uXCIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Qi5zZXRTdGF0dXMoXCJcIil9LFxuMSk7YSgpfSwxKSk6YSgpKX19aWYoQi5wcmVJbml0KWZvcihcImZ1bmN0aW9uXCI9PXR5cGVvZiBCLnByZUluaXQmJihCLnByZUluaXQ9W0IucHJlSW5pdF0pOzA8Qi5wcmVJbml0Lmxlbmd0aDspQi5wcmVJbml0LnBvcCgpKCk7eGMoKTtcblxuXG4gIHJldHVybiBtb2R1bGVBcmcucmVhZHlcbn1cblxuKTtcbn0pKCk7XG5pZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuICBtb2R1bGUuZXhwb3J0cyA9IG9ydFdhc21UaHJlYWRlZDtcbmVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSlcbiAgZGVmaW5lKFtdLCAoKSA9PiBvcnRXYXNtVGhyZWFkZWQpO1xuIiwgIlwidXNlIHN0cmljdFwiO3ZhciBNb2R1bGU9e307dmFyIEVOVklST05NRU5UX0lTX05PREU9dHlwZW9mIHByb2Nlc3M9PVwib2JqZWN0XCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPT1cIm9iamVjdFwiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlPT1cInN0cmluZ1wiO2lmKEVOVklST05NRU5UX0lTX05PREUpe3ZhciBub2RlV29ya2VyVGhyZWFkcz1yZXF1aXJlKFwid29ya2VyX3RocmVhZHNcIik7dmFyIHBhcmVudFBvcnQ9bm9kZVdvcmtlclRocmVhZHMucGFyZW50UG9ydDtwYXJlbnRQb3J0Lm9uKFwibWVzc2FnZVwiLGRhdGE9Pm9ubWVzc2FnZSh7ZGF0YTpkYXRhfSkpO3ZhciBmcz1yZXF1aXJlKFwiZnNcIik7T2JqZWN0LmFzc2lnbihnbG9iYWwse3NlbGY6Z2xvYmFsLHJlcXVpcmU6cmVxdWlyZSxNb2R1bGU6TW9kdWxlLGxvY2F0aW9uOntocmVmOl9fZmlsZW5hbWV9LFdvcmtlcjpub2RlV29ya2VyVGhyZWFkcy5Xb3JrZXIsaW1wb3J0U2NyaXB0czpmPT4oMCxldmFsKShmcy5yZWFkRmlsZVN5bmMoZixcInV0ZjhcIikrXCIvLyMgc291cmNlVVJMPVwiK2YpLHBvc3RNZXNzYWdlOm1zZz0+cGFyZW50UG9ydC5wb3N0TWVzc2FnZShtc2cpLHBlcmZvcm1hbmNlOmdsb2JhbC5wZXJmb3JtYW5jZXx8e25vdzpEYXRlLm5vd319KX12YXIgaW5pdGlhbGl6ZWRKUz1mYWxzZTtmdW5jdGlvbiB0aHJlYWRQcmludEVycigpe3ZhciB0ZXh0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7ZnMud3JpdGVTeW5jKDIsdGV4dCtcIlxcblwiKTtyZXR1cm59Y29uc29sZS5lcnJvcih0ZXh0KX1mdW5jdGlvbiB0aHJlYWRBbGVydCgpe3ZhciB0ZXh0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7cG9zdE1lc3NhZ2Uoe2NtZDpcImFsZXJ0XCIsdGV4dDp0ZXh0LHRocmVhZElkOk1vZHVsZVtcIl9wdGhyZWFkX3NlbGZcIl0oKX0pfXZhciBlcnI9dGhyZWFkUHJpbnRFcnI7c2VsZi5hbGVydD10aHJlYWRBbGVydDtNb2R1bGVbXCJpbnN0YW50aWF0ZVdhc21cIl09KGluZm8scmVjZWl2ZUluc3RhbmNlKT0+e3ZhciBtb2R1bGU9TW9kdWxlW1wid2FzbU1vZHVsZVwiXTtNb2R1bGVbXCJ3YXNtTW9kdWxlXCJdPW51bGw7dmFyIGluc3RhbmNlPW5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsaW5mbyk7cmV0dXJuIHJlY2VpdmVJbnN0YW5jZShpbnN0YW5jZSl9O3NlbGYub251bmhhbmRsZWRyZWplY3Rpb249ZT0+e3Rocm93IGUucmVhc29uPz9lfTtmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKGUpe3RyeXtpZihlLmRhdGEuY21kPT09XCJsb2FkXCIpe2xldCBtZXNzYWdlUXVldWU9W107c2VsZi5vbm1lc3NhZ2U9ZT0+bWVzc2FnZVF1ZXVlLnB1c2goZSk7c2VsZi5zdGFydFdvcmtlcj1pbnN0YW5jZT0+e01vZHVsZT1pbnN0YW5jZTtwb3N0TWVzc2FnZSh7XCJjbWRcIjpcImxvYWRlZFwifSk7Zm9yKGxldCBtc2cgb2YgbWVzc2FnZVF1ZXVlKXtoYW5kbGVNZXNzYWdlKG1zZyl9c2VsZi5vbm1lc3NhZ2U9aGFuZGxlTWVzc2FnZX07TW9kdWxlW1wid2FzbU1vZHVsZVwiXT1lLmRhdGEud2FzbU1vZHVsZTtmb3IoY29uc3QgaGFuZGxlciBvZiBlLmRhdGEuaGFuZGxlcnMpe01vZHVsZVtoYW5kbGVyXT0oLi4uYXJncyk9Pntwb3N0TWVzc2FnZSh7Y21kOlwiY2FsbEhhbmRsZXJcIixoYW5kbGVyOmhhbmRsZXIsYXJnczphcmdzfSl9fU1vZHVsZVtcIndhc21NZW1vcnlcIl09ZS5kYXRhLndhc21NZW1vcnk7TW9kdWxlW1wiYnVmZmVyXCJdPU1vZHVsZVtcIndhc21NZW1vcnlcIl0uYnVmZmVyO01vZHVsZVtcIkVOVklST05NRU5UX0lTX1BUSFJFQURcIl09dHJ1ZTtpZih0eXBlb2YgZS5kYXRhLnVybE9yQmxvYj09XCJzdHJpbmdcIil7aW1wb3J0U2NyaXB0cyhlLmRhdGEudXJsT3JCbG9iKX1lbHNle3ZhciBvYmplY3RVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTChlLmRhdGEudXJsT3JCbG9iKTtpbXBvcnRTY3JpcHRzKG9iamVjdFVybCk7VVJMLnJldm9rZU9iamVjdFVSTChvYmplY3RVcmwpfW9ydFdhc21UaHJlYWRlZChNb2R1bGUpfWVsc2UgaWYoZS5kYXRhLmNtZD09PVwicnVuXCIpe01vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfaW5pdFwiXShlLmRhdGEucHRocmVhZF9wdHIsLyppc01haW5Ccm93c2VyVGhyZWFkPSovMCwvKmlzTWFpblJ1bnRpbWVUaHJlYWQ9Ki8wLC8qY2FuQmxvY2s9Ki8xKTtNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX21haWxib3hfYXdhaXRcIl0oZS5kYXRhLnB0aHJlYWRfcHRyKTtNb2R1bGVbXCJlc3RhYmxpc2hTdGFja1NwYWNlXCJdKCk7TW9kdWxlW1wiUFRocmVhZFwiXS5yZWNlaXZlT2JqZWN0VHJhbnNmZXIoZS5kYXRhKTtNb2R1bGVbXCJQVGhyZWFkXCJdLnRocmVhZEluaXRUTFMoKTtpZighaW5pdGlhbGl6ZWRKUyl7aW5pdGlhbGl6ZWRKUz10cnVlfXRyeXtNb2R1bGVbXCJpbnZva2VFbnRyeVBvaW50XCJdKGUuZGF0YS5zdGFydF9yb3V0aW5lLGUuZGF0YS5hcmcpfWNhdGNoKGV4KXtpZihleCE9XCJ1bndpbmRcIil7dGhyb3cgZXh9fX1lbHNlIGlmKGUuZGF0YS5jbWQ9PT1cImNhbmNlbFwiKXtpZihNb2R1bGVbXCJfcHRocmVhZF9zZWxmXCJdKCkpe01vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfZXhpdFwiXSgtMSl9fWVsc2UgaWYoZS5kYXRhLnRhcmdldD09PVwic2V0aW1tZWRpYXRlXCIpe31lbHNlIGlmKGUuZGF0YS5jbWQ9PT1cImNoZWNrTWFpbGJveFwiKXtpZihpbml0aWFsaXplZEpTKXtNb2R1bGVbXCJjaGVja01haWxib3hcIl0oKX19ZWxzZSBpZihlLmRhdGEuY21kKXtlcnIoXCJ3b3JrZXIuanMgcmVjZWl2ZWQgdW5rbm93biBjb21tYW5kIFwiK2UuZGF0YS5jbWQpO2VycihlLmRhdGEpfX1jYXRjaChleCl7aWYoTW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9jcmFzaGVkXCJdKXtNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX2NyYXNoZWRcIl0oKX10aHJvdyBleH19c2VsZi5vbm1lc3NhZ2U9aGFuZGxlTWVzc2FnZTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtFbnZ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7T3J0V2FzbU1vZHVsZX0gZnJvbSAnLi9iaW5kaW5nL29ydC13YXNtJztcbmltcG9ydCB7T3J0V2FzbVRocmVhZGVkTW9kdWxlfSBmcm9tICcuL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5sZXQgb3J0V2FzbUZhY3Rvcnk6IEVtc2NyaXB0ZW5Nb2R1bGVGYWN0b3J5PE9ydFdhc21Nb2R1bGU+O1xuXG5pZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9UUkFJTklORykge1xuICBvcnRXYXNtRmFjdG9yeSA9IHJlcXVpcmUoJy4vYmluZGluZy9vcnQtdHJhaW5pbmctd2FzbS1zaW1kLmpzJyk7XG59IGVsc2Uge1xuICBvcnRXYXNtRmFjdG9yeSA9XG4gICAgICBCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVID8gcmVxdWlyZSgnLi9iaW5kaW5nL29ydC13YXNtLmpzJykgOiByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tc2ltZC5qc2VwLmpzJyk7XG59XG5cbmNvbnN0IG9ydFdhc21GYWN0b3J5VGhyZWFkZWQ6IEVtc2NyaXB0ZW5Nb2R1bGVGYWN0b3J5PE9ydFdhc21Nb2R1bGU+ID0gIUJVSUxEX0RFRlMuRElTQUJMRV9XQVNNX1RIUkVBRCA/XG4gICAgKEJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgPyByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQuanMnKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tc2ltZC10aHJlYWRlZC5qc2VwLmpzJykpIDpcbiAgICBvcnRXYXNtRmFjdG9yeTtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuXG5sZXQgd2FzbTogT3J0V2FzbU1vZHVsZXx1bmRlZmluZWQ7XG5sZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmxldCBpbml0aWFsaXppbmcgPSBmYWxzZTtcbmxldCBhYm9ydGVkID0gZmFsc2U7XG5cbmNvbnN0IGlzTXVsdGlUaHJlYWRTdXBwb3J0ZWQgPSAobnVtVGhyZWFkczogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gIC8vIFdlYkFzc2VtYmx5IHRocmVhZHMgYXJlIHNldCB0byAxIChzaW5nbGUgdGhyZWFkKS5cbiAgaWYgKG51bVRocmVhZHMgPT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiAnU2hhcmVkQXJyYXlCdWZmZXInIGlzIG5vdCBhdmFpbGFibGUsIFdlYkFzc2VtYmx5IHRocmVhZHMgd2lsbCBub3Qgd29yay5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmICFzZWxmLmNyb3NzT3JpZ2luSXNvbGF0ZWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ2Vudi53YXNtLm51bVRocmVhZHMgaXMgc2V0IHRvICcgKyBudW1UaHJlYWRzICtcbiAgICAgICAgICAnLCBidXQgdGhpcyB3aWxsIG5vdCB3b3JrIHVubGVzcyB5b3UgZW5hYmxlIGNyb3NzT3JpZ2luSXNvbGF0ZWQgbW9kZS4gJyArXG4gICAgICAgICAgJ1NlZSBodHRwczovL3dlYi5kZXYvY3Jvc3Mtb3JpZ2luLWlzb2xhdGlvbi1ndWlkZS8gZm9yIG1vcmUgaW5mby4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gb25ueHJ1bnRpbWUtd2ViIGRvZXMgbm90IHN1cHBvcnQgbXVsdGktdGhyZWFkcyBpbiBOb2RlLmpzLlxuICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdlbnYud2FzbS5udW1UaHJlYWRzIGlzIHNldCB0byAnICsgbnVtVGhyZWFkcyArXG4gICAgICAgICcsIGhvd2V2ZXIsIGN1cnJlbnRseSBvbm54cnVudGltZS13ZWIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS10aHJlYWRzIGluIE5vZGUuanMuICcgK1xuICAgICAgICAnUGxlYXNlIGNvbnNpZGVyIHVzaW5nIG9ubnhydW50aW1lLW5vZGUgZm9yIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHNjZW5hcmlvcy4nKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGVzdCBmb3IgdHJhbnNmZXJhYmlsaXR5IG9mIFNBQnMgKGZvciBicm93c2Vycy4gbmVlZGVkIGZvciBGaXJlZm94KVxuICAgIC8vIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFtc2cvbW96aWxsYS5kZXYucGxhdGZvcm0vSUhrQlpsSEVUcEEvZHdzTU5jaFdFUUFKXG4gICAgaWYgKHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5ldyBNZXNzYWdlQ2hhbm5lbCgpLnBvcnQxLnBvc3RNZXNzYWdlKG5ldyBTaGFyZWRBcnJheUJ1ZmZlcigxKSk7XG4gICAgfVxuXG4gICAgLy8gVGVzdCBmb3IgV2ViQXNzZW1ibHkgdGhyZWFkcyBjYXBhYmlsaXR5IChmb3IgYm90aCBicm93c2VycyBhbmQgTm9kZS5qcylcbiAgICAvLyBUaGlzIHR5cGVkIGFycmF5IGlzIGEgV2ViQXNzZW1ibHkgcHJvZ3JhbSBjb250YWluaW5nIHRocmVhZGVkIGluc3RydWN0aW9ucy5cbiAgICByZXR1cm4gV2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMCwgOTcsIDExNSwgMTA5LCAxLCAwLCAgMCwgIDAsIDEsIDQsIDEsICA5NiwgMCwgICAwLCAgMywgMiwgMSwgIDAsIDUsXG4gICAgICA0LCAxLCAgMywgICAxLCAgIDEsIDEwLCAxMSwgMSwgOSwgMCwgNjUsIDAsICAyNTQsIDE2LCAyLCAwLCAyNiwgMTFcbiAgICBdKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IGlzU2ltZFN1cHBvcnRlZCA9ICgpOiBib29sZWFuID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBUZXN0IGZvciBXZWJBc3NlbWJseSBTSU1EIGNhcGFiaWxpdHkgKGZvciBib3RoIGJyb3dzZXJzIGFuZCBOb2RlLmpzKVxuICAgIC8vIFRoaXMgdHlwZWQgYXJyYXkgaXMgYSBXZWJBc3NlbWJseSBwcm9ncmFtIGNvbnRhaW5pbmcgU0lNRCBpbnN0cnVjdGlvbnMuXG5cbiAgICAvLyBUaGUgYmluYXJ5IGRhdGEgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBjb2RlIGJ5IHdhdDJ3YXNtOlxuICAgIC8vXG4gICAgLy8gKG1vZHVsZVxuICAgIC8vICAgKHR5cGUgJHQwIChmdW5jKSlcbiAgICAvLyAgIChmdW5jICRmMCAodHlwZSAkdDApXG4gICAgLy8gICAgIChkcm9wXG4gICAgLy8gICAgICAgKGkzMng0LmRvdF9pMTZ4OF9zXG4gICAgLy8gICAgICAgICAoaTh4MTYuc3BsYXRcbiAgICAvLyAgICAgICAgICAgKGkzMi5jb25zdCAwKSlcbiAgICAvLyAgICAgICAgICh2MTI4LmNvbnN0IGkzMng0IDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDApKSkpKVxuXG4gICAgcmV0dXJuIFdlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDAsICAgOTcsIDExNSwgMTA5LCAxLCAwLCAwLCAwLCAxLCA0LCAxLCA5NiwgMCwgMCwgMywgMiwgMSwgMCwgMTAsIDMwLCAxLCAgIDI4LCAgMCwgNjUsIDAsXG4gICAgICAyNTMsIDE1LCAyNTMsIDEyLCAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAwLCAgMjUzLCAxODYsIDEsIDI2LCAxMVxuICAgIF0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgZ2V0V2FzbUZpbGVOYW1lID0gKHVzZVNpbWQ6IGJvb2xlYW4sIHVzZVRocmVhZHM6IGJvb2xlYW4pID0+IHtcbiAgaWYgKHVzZVNpbWQpIHtcbiAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9UUkFJTklORykge1xuICAgICAgcmV0dXJuICdvcnQtdHJhaW5pbmctd2FzbS1zaW1kLndhc20nO1xuICAgIH1cbiAgICByZXR1cm4gdXNlVGhyZWFkcyA/ICdvcnQtd2FzbS1zaW1kLXRocmVhZGVkLndhc20nIDogJ29ydC13YXNtLXNpbWQud2FzbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVzZVRocmVhZHMgPyAnb3J0LXdhc20tdGhyZWFkZWQud2FzbScgOiAnb3J0LXdhc20ud2FzbSc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsaXplV2ViQXNzZW1ibHkgPSBhc3luYyhmbGFnczogRW52LldlYkFzc2VtYmx5RmxhZ3MpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIGlmIChpbml0aWFsaXppbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpcGxlIGNhbGxzIHRvIFxcJ2luaXRpYWxpemVXZWJBc3NlbWJseSgpXFwnIGRldGVjdGVkLicpO1xuICB9XG4gIGlmIChhYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcmV2aW91cyBjYWxsIHRvIFxcJ2luaXRpYWxpemVXZWJBc3NlbWJseSgpXFwnIGZhaWxlZC4nKTtcbiAgfVxuXG4gIGluaXRpYWxpemluZyA9IHRydWU7XG5cbiAgLy8gd2FzbSBmbGFncyBhcmUgYWxyZWFkeSBpbml0aWFsaXplZFxuICBjb25zdCB0aW1lb3V0ID0gZmxhZ3MuaW5pdFRpbWVvdXQhO1xuICBjb25zdCBudW1UaHJlYWRzID0gZmxhZ3MubnVtVGhyZWFkcyE7XG4gIGNvbnN0IHNpbWQgPSBmbGFncy5zaW1kITtcblxuICBjb25zdCB1c2VUaHJlYWRzID0gaXNNdWx0aVRocmVhZFN1cHBvcnRlZChudW1UaHJlYWRzKTtcbiAgY29uc3QgdXNlU2ltZCA9IHNpbWQgJiYgaXNTaW1kU3VwcG9ydGVkKCk7XG5cbiAgY29uc3Qgd2FzbVBhdGhzID0gZmxhZ3Mud2FzbVBhdGhzO1xuICBjb25zdCB3YXNtUHJlZml4T3ZlcnJpZGUgPSB0eXBlb2Ygd2FzbVBhdGhzID09PSAnc3RyaW5nJyA/IHdhc21QYXRocyA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgd2FzbUZpbGVOYW1lID0gZ2V0V2FzbUZpbGVOYW1lKHVzZVNpbWQsIHVzZVRocmVhZHMpO1xuICBjb25zdCB3YXNtUGF0aE92ZXJyaWRlID0gdHlwZW9mIHdhc21QYXRocyA9PT0gJ29iamVjdCcgPyB3YXNtUGF0aHNbd2FzbUZpbGVOYW1lXSA6IHVuZGVmaW5lZDtcblxuICBsZXQgaXNUaW1lb3V0ID0gZmFsc2U7XG5cbiAgY29uc3QgdGFza3M6IEFycmF5PFByb21pc2U8dm9pZD4+ID0gW107XG5cbiAgLy8gcHJvbWlzZSBmb3IgdGltZW91dFxuICBpZiAodGltZW91dCA+IDApIHtcbiAgICB0YXNrcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgLy8gcHJvbWlzZSBmb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uXG4gIHRhc2tzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSB1c2VUaHJlYWRzID8gb3J0V2FzbUZhY3RvcnlUaHJlYWRlZCA6IG9ydFdhc21GYWN0b3J5O1xuICAgIGNvbnN0IGNvbmZpZzogUGFydGlhbDxPcnRXYXNtTW9kdWxlPiA9IHtcbiAgICAgIGxvY2F0ZUZpbGU6IChmaWxlTmFtZTogc3RyaW5nLCBzY3JpcHREaXJlY3Rvcnk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XQVNNX1RIUkVBRCAmJiB1c2VUaHJlYWRzICYmIGZpbGVOYW1lLmVuZHNXaXRoKCcud29ya2VyLmpzJykgJiZcbiAgICAgICAgICAgIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgLy8gVGhpcyByZXF1aXJlKCkgZnVuY3Rpb24gaXMgaGFuZGxlZCBieSBlc2J1aWxkIHBsdWdpbiB0byBsb2FkIGZpbGUgY29udGVudCBhcyBzdHJpbmcuXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQud29ya2VyLmpzJylcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKCcud2FzbScpKSB7XG4gICAgICAgICAgaWYgKHdhc21QYXRoT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB3YXNtUGF0aE92ZXJyaWRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHdhc21QcmVmaXhPdmVycmlkZSA/PyBzY3JpcHREaXJlY3Rvcnk7XG5cbiAgICAgICAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUpIHtcbiAgICAgICAgICAgIGlmICh3YXNtRmlsZU5hbWUgPT09ICdvcnQtd2FzbS1zaW1kLndhc20nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAnb3J0LXdhc20tc2ltZC5qc2VwLndhc20nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3YXNtRmlsZU5hbWUgPT09ICdvcnQtd2FzbS1zaW1kLXRocmVhZGVkLndhc20nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAnb3J0LXdhc20tc2ltZC10aHJlYWRlZC5qc2VwLndhc20nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwcmVmaXggKyB3YXNtRmlsZU5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgZmlsZU5hbWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU01fVEhSRUFEICYmIHVzZVRocmVhZHMpIHtcbiAgICAgIGNvbmZpZy5udW1UaHJlYWRzID0gbnVtVGhyZWFkcztcbiAgICAgIGlmICh0eXBlb2YgQmxvYiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uZmlnLm1haW5TY3JpcHRVcmxPckJsb2IgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnb3J0LXdhc20tdGhyZWFkZWQuanMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdFNvdXJjZUNvZGUgPSBgdmFyIG9ydFdhc21UaHJlYWRlZD0ke2ZhY3RvcnkudG9TdHJpbmcoKX07YDtcbiAgICAgICAgY29uZmlnLm1haW5TY3JpcHRVcmxPckJsb2IgPSBuZXcgQmxvYihbc2NyaXB0U291cmNlQ29kZV0sIHt0eXBlOiAndGV4dC9qYXZhc2NyaXB0J30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZhY3RvcnkoY29uZmlnKS50aGVuKFxuICAgICAgICAvLyB3YXNtIG1vZHVsZSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgbW9kdWxlID0+IHtcbiAgICAgICAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgd2FzbSA9IG1vZHVsZTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHdhc20gbW9kdWxlIGZhaWxlZCB0byBpbml0aWFsaXplXG4gICAgICAgICh3aGF0KSA9PiB7XG4gICAgICAgICAgaW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgcmVqZWN0KHdoYXQpO1xuICAgICAgICB9KTtcbiAgfSkpO1xuXG4gIGF3YWl0IFByb21pc2UucmFjZSh0YXNrcyk7XG5cbiAgaWYgKGlzVGltZW91dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgV2ViQXNzZW1ibHkgYmFja2VuZCBpbml0aWFsaXppbmcgZmFpbGVkIGR1ZSB0byB0aW1lb3V0OiAke3RpbWVvdXR9bXNgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEluc3RhbmNlID0gKCk6IE9ydFdhc21Nb2R1bGUgPT4ge1xuICBpZiAoaW5pdGlhbGl6ZWQgJiYgd2FzbSkge1xuICAgIHJldHVybiB3YXNtO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdXZWJBc3NlbWJseSBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRpc3Bvc2UgPSAoKTogdm9pZCA9PiB7XG4gIGlmIChpbml0aWFsaXplZCAmJiAhaW5pdGlhbGl6aW5nICYmICFhYm9ydGVkKSB7XG4gICAgaW5pdGlhbGl6aW5nID0gdHJ1ZTtcblxuICAgICh3YXNtIGFzIE9ydFdhc21UaHJlYWRlZE1vZHVsZSkuUFRocmVhZD8udGVybWluYXRlQWxsVGhyZWFkcygpO1xuICAgIHdhc20gPSB1bmRlZmluZWQ7XG5cbiAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIGFib3J0ZWQgPSB0cnVlO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2dldEluc3RhbmNlfSBmcm9tICcuL3dhc20tZmFjdG9yeSc7XG5cbmV4cG9ydCBjb25zdCBhbGxvY1dhc21TdHJpbmcgPSAoZGF0YTogc3RyaW5nLCBhbGxvY3M6IG51bWJlcltdKTogbnVtYmVyID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG5cbiAgY29uc3QgZGF0YUxlbmd0aCA9IHdhc20ubGVuZ3RoQnl0ZXNVVEY4KGRhdGEpICsgMTtcbiAgY29uc3QgZGF0YU9mZnNldCA9IHdhc20uX21hbGxvYyhkYXRhTGVuZ3RoKTtcbiAgd2FzbS5zdHJpbmdUb1VURjgoZGF0YSwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCk7XG4gIGFsbG9jcy5wdXNoKGRhdGFPZmZzZXQpO1xuXG4gIHJldHVybiBkYXRhT2Zmc2V0O1xufTtcblxuaW50ZXJmYWNlIEV4dHJhT3B0aW9uc0hhbmRsZXIge1xuICAobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdGVFeHRyYU9wdGlvbnMgPVxuICAgIChvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJlZml4OiBzdHJpbmcsIHNlZW46IFdlYWtTZXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICAgICBoYW5kbGVyOiBFeHRyYU9wdGlvbnNIYW5kbGVyKTogdm9pZCA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2Vlbi5oYXMob3B0aW9ucykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBpbiBvcHRpb25zJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Vlbi5hZGQob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAocHJlZml4KSA/IHByZWZpeCArIGtleSA6IGtleTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpdGVyYXRlRXh0cmFPcHRpb25zKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBuYW1lICsgJy4nLCBzZWVuLCBoYW5kbGVyKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBoYW5kbGVyKG5hbWUsIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgaGFuZGxlcihuYW1lLCAodmFsdWUpID8gJzEnIDogJzAnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGhhbmRsZSBleHRyYSBjb25maWcgdHlwZTogJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbi8qKlxuICogY2hlY2sgd2ViIGFzc2VtYmx5IEFQSSdzIGxhc3QgZXJyb3IgYW5kIHRocm93IGVycm9yIGlmIGFueSBlcnJvciBvY2N1cnJlZC5cbiAqIEBwYXJhbSBtZXNzYWdlIGEgbWVzc2FnZSB1c2VkIHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjaGVja0xhc3RFcnJvciA9IChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG5cbiAgY29uc3Qgc3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcmFtc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyg4KTtcbiAgICB3YXNtLl9PcnRHZXRMYXN0RXJyb3IocGFyYW1zT2Zmc2V0LCBwYXJhbXNPZmZzZXQgKyA0KTtcbiAgICBjb25zdCBlcnJvckNvZGUgPSB3YXNtLkhFQVAzMltwYXJhbXNPZmZzZXQgLyA0XTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2VQb2ludGVyID0gd2FzbS5IRUFQVTMyW3BhcmFtc09mZnNldCAvIDQgKyAxXTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2VQb2ludGVyID8gd2FzbS5VVEY4VG9TdHJpbmcoZXJyb3JNZXNzYWdlUG9pbnRlcikgOiAnJztcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX0gRVJST1JfQ09ERTogJHtlcnJvckNvZGV9LCBFUlJPUl9NRVNTQUdFOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB3YXNtLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtnZXRJbnN0YW5jZX0gZnJvbSAnLi93YXNtLWZhY3RvcnknO1xuaW1wb3J0IHthbGxvY1dhc21TdHJpbmcsIGNoZWNrTGFzdEVycm9yLCBpdGVyYXRlRXh0cmFPcHRpb25zfSBmcm9tICcuL3dhc20tdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgc2V0UnVuT3B0aW9ucyA9IChvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBbbnVtYmVyLCBudW1iZXJbXV0gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgbGV0IHJ1bk9wdGlvbnNIYW5kbGUgPSAwO1xuICBjb25zdCBhbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgcnVuT3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB0cnkge1xuICAgIGlmIChvcHRpb25zPy5sb2dTZXZlcml0eUxldmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bk9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA9IDI7ICAvLyBEZWZhdWx0IHRvIHdhcm5pbmdcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5sb2dTZXZlcml0eUxldmVsICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwpIHx8XG4gICAgICAgIG9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA8IDAgfHwgb3B0aW9ucy5sb2dTZXZlcml0eUxldmVsID4gNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgc2VydmVyaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWx9YCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmxvZ1ZlcmJvc2l0eUxldmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bk9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwgPSAwOyAgLy8gRGVmYXVsdCB0byAwXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbG9nIHZlcmJvc2l0eSBsZXZlbCBpcyBub3QgdmFsaWQ6ICR7b3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbH1gKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8udGVybWluYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bk9wdGlvbnMudGVybWluYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IHRhZ0RhdGFPZmZzZXQgPSAwO1xuICAgIGlmIChvcHRpb25zPy50YWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFnRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhvcHRpb25zLnRhZywgYWxsb2NzKTtcbiAgICB9XG5cbiAgICBydW5PcHRpb25zSGFuZGxlID0gd2FzbS5fT3J0Q3JlYXRlUnVuT3B0aW9ucyhcbiAgICAgICAgcnVuT3B0aW9ucy5sb2dTZXZlcml0eUxldmVsISwgcnVuT3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCEsICEhcnVuT3B0aW9ucy50ZXJtaW5hdGUhLCB0YWdEYXRhT2Zmc2V0KTtcbiAgICBpZiAocnVuT3B0aW9uc0hhbmRsZSA9PT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgY3JlYXRlIHJ1biBvcHRpb25zLicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5leHRyYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpdGVyYXRlRXh0cmFPcHRpb25zKG9wdGlvbnMuZXh0cmEsICcnLCBuZXcgV2Vha1NldDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhrZXksIGFsbG9jcyk7XG4gICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh2YWx1ZSwgYWxsb2NzKTtcblxuICAgICAgICBpZiAod2FzbS5fT3J0QWRkUnVuQ29uZmlnRW50cnkocnVuT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBydW4gY29uZmlnIGVudHJ5OiAke2tleX0gLSAke3ZhbHVlfS5gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtydW5PcHRpb25zSGFuZGxlLCBhbGxvY3NdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHJ1bk9wdGlvbnNIYW5kbGUgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VSdW5PcHRpb25zKHJ1bk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtJbmZlcmVuY2VTZXNzaW9ufSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge2dldEluc3RhbmNlfSBmcm9tICcuL3dhc20tZmFjdG9yeSc7XG5pbXBvcnQge2FsbG9jV2FzbVN0cmluZywgY2hlY2tMYXN0RXJyb3IsIGl0ZXJhdGVFeHRyYU9wdGlvbnN9IGZyb20gJy4vd2FzbS11dGlscyc7XG5cbmNvbnN0IGdldEdyYXBoT3B0aW16YXRpb25MZXZlbCA9IChncmFwaE9wdGltaXphdGlvbkxldmVsOiBzdHJpbmd8dW5rbm93bik6IG51bWJlciA9PiB7XG4gIHN3aXRjaCAoZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCkge1xuICAgIGNhc2UgJ2Rpc2FibGVkJzpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgJ2Jhc2ljJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ2V4dGVuZGVkJzpcbiAgICAgIHJldHVybiAyO1xuICAgIGNhc2UgJ2FsbCc6XG4gICAgICByZXR1cm4gOTk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZ3JhcGggb3B0aW1pemF0aW9uIGxldmVsOiAke2dyYXBoT3B0aW1pemF0aW9uTGV2ZWx9YCk7XG4gIH1cbn07XG5cbmNvbnN0IGdldEV4ZWN1dGlvbk1vZGUgPSAoZXhlY3V0aW9uTW9kZTogJ3NlcXVlbnRpYWwnfCdwYXJhbGxlbCcpOiBudW1iZXIgPT4ge1xuICBzd2l0Y2ggKGV4ZWN1dGlvbk1vZGUpIHtcbiAgICBjYXNlICdzZXF1ZW50aWFsJzpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgJ3BhcmFsbGVsJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGV4ZWN1dGlvbiBtb2RlOiAke2V4ZWN1dGlvbk1vZGV9YCk7XG4gIH1cbn07XG5cbmNvbnN0IGFwcGVuZERlZmF1bHRPcHRpb25zID0gKG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiB2b2lkID0+IHtcbiAgaWYgKCFvcHRpb25zLmV4dHJhKSB7XG4gICAgb3B0aW9ucy5leHRyYSA9IHt9O1xuICB9XG4gIGlmICghb3B0aW9ucy5leHRyYS5zZXNzaW9uKSB7XG4gICAgb3B0aW9ucy5leHRyYS5zZXNzaW9uID0ge307XG4gIH1cbiAgY29uc3Qgc2Vzc2lvbiA9IG9wdGlvbnMuZXh0cmEuc2Vzc2lvbiBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBpZiAoIXNlc3Npb24udXNlX29ydF9tb2RlbF9ieXRlc19kaXJlY3RseSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgICBzZXNzaW9uLnVzZV9vcnRfbW9kZWxfYnl0ZXNfZGlyZWN0bHkgPSAnMSc7XG4gIH1cblxuICAvLyBpZiB1c2luZyBKU0VQIHdpdGggV2ViR1BVLCBhbHdheXMgZGlzYWJsZSBtZW1vcnkgcGF0dGVyblxuICBpZiAob3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMgJiZcbiAgICAgIG9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzLnNvbWUoZXAgPT4gKHR5cGVvZiBlcCA9PT0gJ3N0cmluZycgPyBlcCA6IGVwLm5hbWUpID09PSAnd2ViZ3B1JykpIHtcbiAgICBvcHRpb25zLmVuYWJsZU1lbVBhdHRlcm4gPSBmYWxzZTtcbiAgfVxufTtcblxuY29uc3Qgc2V0RXhlY3V0aW9uUHJvdmlkZXJzID1cbiAgICAoc2Vzc2lvbk9wdGlvbnNIYW5kbGU6IG51bWJlciwgZXhlY3V0aW9uUHJvdmlkZXJzOiByZWFkb25seSBJbmZlcmVuY2VTZXNzaW9uLkV4ZWN1dGlvblByb3ZpZGVyQ29uZmlnW10sXG4gICAgIGFsbG9jczogbnVtYmVyW10pOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3QgZXAgb2YgZXhlY3V0aW9uUHJvdmlkZXJzKSB7XG4gICAgICAgIGxldCBlcE5hbWUgPSB0eXBlb2YgZXAgPT09ICdzdHJpbmcnID8gZXAgOiBlcC5uYW1lO1xuXG4gICAgICAgIC8vIGNoZWNrIEVQIG5hbWVcbiAgICAgICAgc3dpdGNoIChlcE5hbWUpIHtcbiAgICAgICAgICBjYXNlICd3ZWJubic6XG4gICAgICAgICAgICBlcE5hbWUgPSAnV0VCTk4nO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd2Vibm5PcHRpb25zID0gZXAgYXMgSW5mZXJlbmNlU2Vzc2lvbi5XZWJOTkV4ZWN1dGlvblByb3ZpZGVyT3B0aW9uO1xuICAgICAgICAgICAgICBpZiAod2Vibm5PcHRpb25zPy5kZXZpY2VUeXBlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygnZGV2aWNlVHlwZScsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHdlYm5uT3B0aW9ucy5kZXZpY2VUeXBlLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09XG4gICAgICAgICAgICAgICAgICAgIDApIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ2RldmljZVR5cGUnIC0gJHt3ZWJubk9wdGlvbnMuZGV2aWNlVHlwZX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh3ZWJubk9wdGlvbnM/Lm51bVRocmVhZHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbnVtVGhyZWFkcyA9IHdlYm5uT3B0aW9ucy5udW1UaHJlYWRzO1xuICAgICAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGludmFsaWQgd2Vibm5PcHRpb25zLm51bVRocmVhZHMuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBudW1UaHJlYWRzICE9ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG51bVRocmVhZHMpIHx8IG51bVRocmVhZHMgPCAwKSB7XG4gICAgICAgICAgICAgICAgICBudW1UaHJlYWRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygnbnVtVGhyZWFkcycsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKG51bVRocmVhZHMudG9TdHJpbmcoKSwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2UoKS5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PVxuICAgICAgICAgICAgICAgICAgICAwKSB7XG4gICAgICAgICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdudW1UaHJlYWRzJyAtICR7d2Vibm5PcHRpb25zLm51bVRocmVhZHN9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAod2Vibm5PcHRpb25zPy5wb3dlclByZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKCdwb3dlclByZWZlcmVuY2UnLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh3ZWJubk9wdGlvbnMucG93ZXJQcmVmZXJlbmNlLCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09XG4gICAgICAgICAgICAgICAgICAgIDApIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ3Bvd2VyUHJlZmVyZW5jZScgLSAke3dlYm5uT3B0aW9ucy5wb3dlclByZWZlcmVuY2V9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnd2ViZ3B1JzpcbiAgICAgICAgICAgIGVwTmFtZSA9ICdKUyc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVwICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBjb25zdCB3ZWJncHVPcHRpb25zID0gZXAgYXMgSW5mZXJlbmNlU2Vzc2lvbi5XZWJHcHVFeGVjdXRpb25Qcm92aWRlck9wdGlvbjtcbiAgICAgICAgICAgICAgaWYgKHdlYmdwdU9wdGlvbnM/LnByZWZlcnJlZExheW91dCkge1xuICAgICAgICAgICAgICAgIGlmICh3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dCAhPT0gJ05DSFcnICYmIHdlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0ICE9PSAnTkhXQycpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJlZmVycmVkTGF5b3V0IG11c3QgYmUgZWl0aGVyICdOQ0hXJyBvciAnTkhXQyc6ICR7d2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXR9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGtleURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcoJ3ByZWZlcnJlZExheW91dCcsIGFsbG9jcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHdlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0LCBhbGxvY3MpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09XG4gICAgICAgICAgICAgICAgICAgIDApIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ3ByZWZlcnJlZExheW91dCcgLSAke3dlYmdwdU9wdGlvbnMucHJlZmVycmVkTGF5b3V0fS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3dhc20nOlxuICAgICAgICAgIGNhc2UgJ2NwdSc6XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3Qgc3VwcG9ydGVkIGV4ZWN1dGlvbiBwcm92aWRlcjogJHtlcE5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcE5hbWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGVwTmFtZSwgYWxsb2NzKTtcbiAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyKHNlc3Npb25PcHRpb25zSGFuZGxlLCBlcE5hbWVEYXRhT2Zmc2V0KSAhPT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBhcHBlbmQgZXhlY3V0aW9uIHByb3ZpZGVyOiAke2VwTmFtZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbk9wdGlvbnMgPSAob3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOiBbbnVtYmVyLCBudW1iZXJbXV0gPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgbGV0IHNlc3Npb25PcHRpb25zSGFuZGxlID0gMDtcbiAgY29uc3QgYWxsb2NzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0IHNlc3Npb25PcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgYXBwZW5kRGVmYXVsdE9wdGlvbnMoc2Vzc2lvbk9wdGlvbnMpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCA9IGdldEdyYXBoT3B0aW16YXRpb25MZXZlbChzZXNzaW9uT3B0aW9ucy5ncmFwaE9wdGltaXphdGlvbkxldmVsID8/ICdhbGwnKTtcbiAgICBjb25zdCBleGVjdXRpb25Nb2RlID0gZ2V0RXhlY3V0aW9uTW9kZShzZXNzaW9uT3B0aW9ucy5leGVjdXRpb25Nb2RlID8/ICdzZXF1ZW50aWFsJyk7XG4gICAgY29uc3QgbG9nSWREYXRhT2Zmc2V0ID1cbiAgICAgICAgdHlwZW9mIHNlc3Npb25PcHRpb25zLmxvZ0lkID09PSAnc3RyaW5nJyA/IGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5sb2dJZCwgYWxsb2NzKSA6IDA7XG5cbiAgICBjb25zdCBsb2dTZXZlcml0eUxldmVsID0gc2Vzc2lvbk9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA/PyAyOyAgLy8gRGVmYXVsdCB0byAyIC0gd2FybmluZ1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsb2dTZXZlcml0eUxldmVsKSB8fCBsb2dTZXZlcml0eUxldmVsIDwgMCB8fCBsb2dTZXZlcml0eUxldmVsID4gNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgc2VydmVyaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtsb2dTZXZlcml0eUxldmVsfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ1ZlcmJvc2l0eUxldmVsID0gc2Vzc2lvbk9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwgPz8gMDsgIC8vIERlZmF1bHQgdG8gMCAtIHZlcmJvc2VcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobG9nVmVyYm9zaXR5TGV2ZWwpIHx8IGxvZ1ZlcmJvc2l0eUxldmVsIDwgMCB8fCBsb2dWZXJib3NpdHlMZXZlbCA+IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbG9nIHZlcmJvc2l0eSBsZXZlbCBpcyBub3QgdmFsaWQ6ICR7bG9nVmVyYm9zaXR5TGV2ZWx9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW1pemVkTW9kZWxGaWxlUGF0aE9mZnNldCA9IHR5cGVvZiBzZXNzaW9uT3B0aW9ucy5vcHRpbWl6ZWRNb2RlbEZpbGVQYXRoID09PSAnc3RyaW5nJyA/XG4gICAgICAgIGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5vcHRpbWl6ZWRNb2RlbEZpbGVQYXRoLCBhbGxvY3MpIDpcbiAgICAgICAgMDtcblxuICAgIHNlc3Npb25PcHRpb25zSGFuZGxlID0gd2FzbS5fT3J0Q3JlYXRlU2Vzc2lvbk9wdGlvbnMoXG4gICAgICAgIGdyYXBoT3B0aW1pemF0aW9uTGV2ZWwsICEhc2Vzc2lvbk9wdGlvbnMuZW5hYmxlQ3B1TWVtQXJlbmEsICEhc2Vzc2lvbk9wdGlvbnMuZW5hYmxlTWVtUGF0dGVybiwgZXhlY3V0aW9uTW9kZSxcbiAgICAgICAgISFzZXNzaW9uT3B0aW9ucy5lbmFibGVQcm9maWxpbmcsIDAsIGxvZ0lkRGF0YU9mZnNldCwgbG9nU2V2ZXJpdHlMZXZlbCwgbG9nVmVyYm9zaXR5TGV2ZWwsXG4gICAgICAgIG9wdGltaXplZE1vZGVsRmlsZVBhdGhPZmZzZXQpO1xuICAgIGlmIChzZXNzaW9uT3B0aW9uc0hhbmRsZSA9PT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgY3JlYXRlIHNlc3Npb24gb3B0aW9ucy4nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzKSB7XG4gICAgICBzZXRFeGVjdXRpb25Qcm92aWRlcnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIHNlc3Npb25PcHRpb25zLmV4ZWN1dGlvblByb3ZpZGVycywgYWxsb2NzKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlbmFibGVHcmFwaENhcHR1cmUgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWU6ICR7c2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlfWApO1xuICAgICAgfVxuICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZygnZW5hYmxlR3JhcGhDYXB0dXJlJywgYWxsb2NzKTtcbiAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5lbmFibGVHcmFwaENhcHR1cmUudG9TdHJpbmcoKSwgYWxsb2NzKTtcbiAgICAgIGlmICh3YXNtLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoXG4gICAgICAgICAgICBgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdlbmFibGVHcmFwaENhcHR1cmUnIC0gJHtzZXNzaW9uT3B0aW9ucy5lbmFibGVHcmFwaENhcHR1cmV9LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZXNzaW9uT3B0aW9ucy5mcmVlRGltZW5zaW9uT3ZlcnJpZGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2Vzc2lvbk9wdGlvbnMuZnJlZURpbWVuc2lvbk92ZXJyaWRlcykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZnJlZSBkaW1lbnNpb24gb3ZlcnJpZGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nOiAke25hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZnJlZSBkaW1lbnNpb24gb3ZlcnJpZGUgdmFsdWUgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyOiAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWVPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcobmFtZSwgYWxsb2NzKTtcbiAgICAgICAgaWYgKHdhc20uX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZShzZXNzaW9uT3B0aW9uc0hhbmRsZSwgbmFtZU9mZnNldCwgdmFsdWUpICE9PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IHNldCBhIGZyZWUgZGltZW5zaW9uIG92ZXJyaWRlOiAke25hbWV9IC0gJHt2YWx1ZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZXh0cmEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaXRlcmF0ZUV4dHJhT3B0aW9ucyhzZXNzaW9uT3B0aW9ucy5leHRyYSwgJycsIG5ldyBXZWFrU2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGtleSwgYWxsb2NzKTtcbiAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHZhbHVlLCBhbGxvY3MpO1xuXG4gICAgICAgIGlmICh3YXNtLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICR7a2V5fSAtICR7dmFsdWV9LmApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3Nlc3Npb25PcHRpb25zSGFuZGxlLCBhbGxvY3NdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICB3YXNtLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgIH1cbiAgICBhbGxvY3MuZm9yRWFjaChhbGxvYyA9PiB3YXNtLl9mcmVlKGFsbG9jKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbi8vIGEgZHVtbXkgdHlwZSBkZWNsYXJhdGlvbiBmb3IgRmxvYXQxNkFycmF5IGluIGNhc2UgYW55IHBvbHlmaWxsIGlzIGF2YWlsYWJsZS5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBGbG9hdDE2QXJyYXk6IGFueTtcbn1cblxuLy8gVGhpcyBmaWxlIGluY2x1ZGVzIGNvbW1vbiBkZWZpbml0aW9ucy4gVGhleSBkbyBOT1QgaGF2ZSBkZXBlbmRlbmN5IG9uIHRoZSBXZWJBc3NlbWJseSBpbnN0YW5jZS5cblxuLyoqXG4gKiBDb3BpZWQgZnJvbSBPTk5YIGRlZmluaXRpb24uIFVzZSB0aGlzIHRvIGRyb3AgZGVwZW5kZW5jeSAnb25ueF9wcm90bycgdG8gZGVjcmVhc2UgY29tcGlsZWQgLmpzIGZpbGUgc2l6ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gRGF0YVR5cGUge1xuICB1bmRlZmluZWQgPSAwLFxuICBmbG9hdCA9IDEsXG4gIHVpbnQ4ID0gMixcbiAgaW50OCA9IDMsXG4gIHVpbnQxNiA9IDQsXG4gIGludDE2ID0gNSxcbiAgaW50MzIgPSA2LFxuICBpbnQ2NCA9IDcsXG4gIHN0cmluZyA9IDgsXG4gIGJvb2wgPSA5LFxuICBmbG9hdDE2ID0gMTAsXG4gIGRvdWJsZSA9IDExLFxuICB1aW50MzIgPSAxMixcbiAgdWludDY0ID0gMTMsXG4gIGNvbXBsZXg2NCA9IDE0LFxuICBjb21wbGV4MTI4ID0gMTUsXG4gIGJmbG9hdDE2ID0gMTZcbn1cblxuLyoqXG4gKiBNYXAgc3RyaW5nIHRlbnNvciBkYXRhIHRvIGVudW0gdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IHRlbnNvckRhdGFUeXBlU3RyaW5nVG9FbnVtID0gKHR5cGU6IHN0cmluZyk6IERhdGFUeXBlID0+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnaW50OCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuaW50ODtcbiAgICBjYXNlICd1aW50OCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUudWludDg7XG4gICAgY2FzZSAnYm9vbCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuYm9vbDtcbiAgICBjYXNlICdpbnQxNic6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuaW50MTY7XG4gICAgY2FzZSAndWludDE2JzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS51aW50MTY7XG4gICAgY2FzZSAnaW50MzInOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmludDMyO1xuICAgIGNhc2UgJ3VpbnQzMic6XG4gICAgICByZXR1cm4gRGF0YVR5cGUudWludDMyO1xuICAgIGNhc2UgJ2Zsb2F0MTYnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLmZsb2F0MTY7XG4gICAgY2FzZSAnZmxvYXQzMic6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuZmxvYXQ7XG4gICAgY2FzZSAnZmxvYXQ2NCc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuZG91YmxlO1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gRGF0YVR5cGUuc3RyaW5nO1xuICAgIGNhc2UgJ2ludDY0JzpcbiAgICAgIHJldHVybiBEYXRhVHlwZS5pbnQ2NDtcbiAgICBjYXNlICd1aW50NjQnOlxuICAgICAgcmV0dXJuIERhdGFUeXBlLnVpbnQ2NDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGRhdGEgdHlwZTogJHt0eXBlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIE1hcCBlbnVtIHZhbHVlIHRvIHN0cmluZyB0ZW5zb3IgZGF0YVxuICovXG5leHBvcnQgY29uc3QgdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcgPSAodHlwZVByb3RvOiBEYXRhVHlwZSk6IFRlbnNvci5UeXBlID0+IHtcbiAgc3dpdGNoICh0eXBlUHJvdG8pIHtcbiAgICBjYXNlIERhdGFUeXBlLmludDg6XG4gICAgICByZXR1cm4gJ2ludDgnO1xuICAgIGNhc2UgRGF0YVR5cGUudWludDg6XG4gICAgICByZXR1cm4gJ3VpbnQ4JztcbiAgICBjYXNlIERhdGFUeXBlLmJvb2w6XG4gICAgICByZXR1cm4gJ2Jvb2wnO1xuICAgIGNhc2UgRGF0YVR5cGUuaW50MTY6XG4gICAgICByZXR1cm4gJ2ludDE2JztcbiAgICBjYXNlIERhdGFUeXBlLnVpbnQxNjpcbiAgICAgIHJldHVybiAndWludDE2JztcbiAgICBjYXNlIERhdGFUeXBlLmludDMyOlxuICAgICAgcmV0dXJuICdpbnQzMic7XG4gICAgY2FzZSBEYXRhVHlwZS51aW50MzI6XG4gICAgICByZXR1cm4gJ3VpbnQzMic7XG4gICAgY2FzZSBEYXRhVHlwZS5mbG9hdDE2OlxuICAgICAgcmV0dXJuICdmbG9hdDE2JztcbiAgICBjYXNlIERhdGFUeXBlLmZsb2F0OlxuICAgICAgcmV0dXJuICdmbG9hdDMyJztcbiAgICBjYXNlIERhdGFUeXBlLmRvdWJsZTpcbiAgICAgIHJldHVybiAnZmxvYXQ2NCc7XG4gICAgY2FzZSBEYXRhVHlwZS5zdHJpbmc6XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgY2FzZSBEYXRhVHlwZS5pbnQ2NDpcbiAgICAgIHJldHVybiAnaW50NjQnO1xuICAgIGNhc2UgRGF0YVR5cGUudWludDY0OlxuICAgICAgcmV0dXJuICd1aW50NjQnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlOiAke3R5cGVQcm90b31gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBnZXQgdGVuc29yIGVsZW1lbnQgc2l6ZSBpbiBieXRlcyBieSB0aGUgZ2l2ZW4gZGF0YSB0eXBlXG4gKiBAcmV0dXJucyBzaXplIGluIGludGVnZXIgb3IgdW5kZWZpbmVkIGlmIHRoZSBkYXRhIHR5cGUgaXMgbm90IHN1cHBvcnRlZFxuICovXG5leHBvcnQgY29uc3QgZ2V0VGVuc29yRWxlbWVudFNpemUgPSAoZGF0ZVR5cGU6IG51bWJlcik6IG51bWJlcnxcbiAgICB1bmRlZmluZWQgPT4gW3VuZGVmaW5lZCwgNCwgMSwgMSwgMiwgMiwgNCwgOCwgdW5kZWZpbmVkLCAxLCAyLCA4LCA0LCA4LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXVtkYXRlVHlwZV07XG5cbi8qKlxuICogZ2V0IHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIGJ5IHRoZSBnaXZlbiB0ZW5zb3IgdHlwZVxuICovXG5leHBvcnQgY29uc3QgdGVuc29yVHlwZVRvVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gKHR5cGU6IFRlbnNvci5UeXBlKTogRmxvYXQzMkFycmF5Q29uc3RydWN0b3J8VWludDhBcnJheUNvbnN0cnVjdG9yfFxuICAgIEludDhBcnJheUNvbnN0cnVjdG9yfFVpbnQxNkFycmF5Q29uc3RydWN0b3J8SW50MTZBcnJheUNvbnN0cnVjdG9yfEludDMyQXJyYXlDb25zdHJ1Y3RvcnxCaWdJbnQ2NEFycmF5Q29uc3RydWN0b3J8XG4gICAgVWludDhBcnJheUNvbnN0cnVjdG9yfEZsb2F0NjRBcnJheUNvbnN0cnVjdG9yfFVpbnQzMkFycmF5Q29uc3RydWN0b3J8QmlnVWludDY0QXJyYXlDb25zdHJ1Y3RvciA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnZmxvYXQxNic6XG4gICAgICAgICAgLy8gYWxsb3cgRmxvYXQxNkFycmF5IHBvbHlmaWxsLlxuICAgICAgICAgIHJldHVybiB0eXBlb2YgRmxvYXQxNkFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBGbG9hdDE2QXJyYXkuZnJvbSA/IEZsb2F0MTZBcnJheSA6IFVpbnQxNkFycmF5O1xuICAgICAgICBjYXNlICdmbG9hdDMyJzpcbiAgICAgICAgICByZXR1cm4gRmxvYXQzMkFycmF5O1xuICAgICAgICBjYXNlICd1aW50OCc6XG4gICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXk7XG4gICAgICAgIGNhc2UgJ2ludDgnOlxuICAgICAgICAgIHJldHVybiBJbnQ4QXJyYXk7XG4gICAgICAgIGNhc2UgJ3VpbnQxNic6XG4gICAgICAgICAgcmV0dXJuIFVpbnQxNkFycmF5O1xuICAgICAgICBjYXNlICdpbnQxNic6XG4gICAgICAgICAgcmV0dXJuIEludDE2QXJyYXk7XG4gICAgICAgIGNhc2UgJ2ludDMyJzpcbiAgICAgICAgICByZXR1cm4gSW50MzJBcnJheTtcbiAgICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXk7XG4gICAgICAgIGNhc2UgJ2Zsb2F0NjQnOlxuICAgICAgICAgIHJldHVybiBGbG9hdDY0QXJyYXk7XG4gICAgICAgIGNhc2UgJ3VpbnQzMic6XG4gICAgICAgICAgcmV0dXJuIFVpbnQzMkFycmF5O1xuICAgICAgICBjYXNlICdpbnQ2NCc6XG4gICAgICAgICAgcmV0dXJuIEJpZ0ludDY0QXJyYXk7XG4gICAgICAgIGNhc2UgJ3VpbnQ2NCc6XG4gICAgICAgICAgcmV0dXJuIEJpZ1VpbnQ2NEFycmF5O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZTogJHt0eXBlfWApO1xuICAgICAgfVxuICAgIH07XG5cbi8qKlxuICogTWFwIHN0cmluZyBsb2cgbGV2ZWwgdG8gaW50ZWdlciB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgbG9nTGV2ZWxTdHJpbmdUb0VudW0gPSAobG9nTGV2ZWw/OiAndmVyYm9zZSd8J2luZm8nfCd3YXJuaW5nJ3wnZXJyb3InfCdmYXRhbCcpOiBudW1iZXIgPT4ge1xuICBzd2l0Y2ggKGxvZ0xldmVsKSB7XG4gICAgY2FzZSAndmVyYm9zZSc6XG4gICAgICByZXR1cm4gMDtcbiAgICBjYXNlICdpbmZvJzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgcmV0dXJuIDM7XG4gICAgY2FzZSAnZmF0YWwnOlxuICAgICAgcmV0dXJuIDQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9nZ2luZyBsZXZlbDogJHtsb2dMZXZlbH1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiB0ZW5zb3IgdHlwZSBpcyBzdXBwb3J0ZWQgYnkgR1BVIGJ1ZmZlclxuICovXG5leHBvcnQgY29uc3QgaXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlID0gKHR5cGU6IFRlbnNvci5UeXBlKTogdHlwZSBpcyBUZW5zb3IuR3B1QnVmZmVyRGF0YVR5cGVzID0+IHR5cGUgPT09ICdmbG9hdDMyJyB8fFxuICAgIHR5cGUgPT09ICdmbG9hdDE2JyB8fCB0eXBlID09PSAnaW50MzInIHx8IHR5cGUgPT09ICdpbnQ2NCcgfHwgdHlwZSA9PT0gJ3VpbnQzMicgfHwgdHlwZSA9PT0gJ3VpbnQ4JyB8fFxuICAgIHR5cGUgPT09ICdib29sJztcblxuLyoqXG4gKiBNYXAgc3RyaW5nIGRhdGEgbG9jYXRpb24gdG8gaW50ZWdlciB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtID0gKGxvY2F0aW9uOiBUZW5zb3IuRGF0YUxvY2F0aW9uKTogbnVtYmVyID0+IHtcbiAgc3dpdGNoIChsb2NhdGlvbikge1xuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAnY3B1JzpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgJ2NwdS1waW5uZWQnOlxuICAgICAgcmV0dXJuIDI7XG4gICAgY2FzZSAndGV4dHVyZSc6XG4gICAgICByZXR1cm4gMztcbiAgICBjYXNlICdncHUtYnVmZmVyJzpcbiAgICAgIHJldHVybiA0O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGRhdGEgbG9jYXRpb246ICR7bG9jYXRpb259YCk7XG4gIH1cbn07XG5cbi8qKlxuICogTWFwIGludGVnZXIgZGF0YSBsb2NhdGlvbiB0byBzdHJpbmcgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGFMb2NhdGlvbkVudW1Ub1N0cmluZyA9IChsb2NhdGlvbjogbnVtYmVyKTogVGVuc29yLkRhdGFMb2NhdGlvbnx1bmRlZmluZWQgPT5cbiAgICAoWydub25lJywgJ2NwdScsICdjcHUtcGlubmVkJywgJ3RleHR1cmUnLCAnZ3B1LWJ1ZmZlciddIGFzIGNvbnN0KVtsb2NhdGlvbl07XG4iLCAiZXhwb3J0IGNvbnN0IHJlYWRGaWxlID0gdW5kZWZpbmVkO2V4cG9ydCBjb25zdCByZWFkRmlsZVN5bmMgPSB1bmRlZmluZWQ7ZXhwb3J0IGNvbnN0IGNyZWF0ZVJlYWRTdHJlYW0gPSB1bmRlZmluZWQ7IiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQge3JlYWRGaWxlfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcblxuLyoqXG4gKiBMb2FkIGEgZmlsZSBpbnRvIGEgVWludDhBcnJheS5cbiAqXG4gKiBAcGFyYW0gZmlsZSAtIHRoZSBmaWxlIHRvIGxvYWQuIENhbiBiZSBhIFVSTC9wYXRoLCBhIEJsb2IsIGFuIEFycmF5QnVmZmVyLCBvciBhIFVpbnQ4QXJyYXkuXG4gKiBAcmV0dXJucyBhIFVpbnQ4QXJyYXkgY29udGFpbmluZyB0aGUgZmlsZSBkYXRhLlxuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGUgPSBhc3luYyhmaWxlOiBzdHJpbmd8QmxvYnxBcnJheUJ1ZmZlckxpa2V8VWludDhBcnJheSk6IFByb21pc2U8VWludDhBcnJheT4gPT4ge1xuICBpZiAodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSkge1xuICAgICAgLy8gbG9hZCBmaWxlIGludG8gQXJyYXlCdWZmZXIgaW4gTm9kZS5qc1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGF3YWl0IHJlYWRGaWxlKGZpbGUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0VSUl9GU19GSUxFX1RPT19MQVJHRScpIHtcbiAgICAgICAgICAvLyBmaWxlIGlzIHRvbyBsYXJnZSwgdXNlIGZzLmNyZWF0ZVJlYWRTdHJlYW0gaW5zdGVhZFxuICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IGZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZSk7XG4gICAgICAgICAgY29uc3QgY2h1bmtzOiBVaW50OEFycmF5W10gPSBbXTtcbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsb2FkIGZpbGUgaW50byBBcnJheUJ1ZmZlciBpbiBicm93c2Vyc1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmaWxlKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCBleHRlcm5hbCBkYXRhIGZpbGU6ICR7ZmlsZX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1MZW5ndGgnKTtcbiAgICAgIGNvbnN0IGZpbGVTaXplID0gY29udGVudExlbmd0aEhlYWRlciA/IHBhcnNlSW50KGNvbnRlbnRMZW5ndGhIZWFkZXIsIDEwKSA6IDA7XG4gICAgICBpZiAoZmlsZVNpemUgPCAxMDczNzQxODI0IC8qIDFHQiAqLykge1xuICAgICAgICAvLyB3aGVuIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpcyBub3Qgc2V0LCB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBmaWxlIHNpemUuIFdlIGFzc3VtZSBpdCBpcyBzbWFsbCBlbm91Z2ggdG9cbiAgICAgICAgLy8gbG9hZCBpbnRvIG1lbW9yeS5cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZmlsZSBpcyB0b28gbGFyZ2UsIHVzZSBzdHJlYW0gaW5zdGVhZFxuICAgICAgICBpZiAoIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRhdGEgZmlsZTogJHtmaWxlfSwgbm8gcmVzcG9uc2UgYm9keS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuXG4gICAgICAgIGxldCBidWZmZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIGNyZWF0ZSBBcnJheUJ1ZmZlciBkaXJlY3RseVxuICAgICAgICAgIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihmaWxlU2l6ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHVzZSBXZWJBc3NlbWJseSBNZW1vcnkgdG8gYWxsb2NhdGUgbGFyZ2VyIEFycmF5QnVmZmVyXG4gICAgICAgICAgICBjb25zdCBwYWdlcyA9IE1hdGguY2VpbChmaWxlU2l6ZSAvIDY1NTM2KTtcbiAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6IHBhZ2VzLCBtYXhpbXVtOiBwYWdlc30pLmJ1ZmZlcjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2h1bmtTaXplID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBjaHVua1NpemUpO1xuICAgICAgICAgIGNodW5rLnNldCh2YWx1ZSk7XG4gICAgICAgICAgb2Zmc2V0ICs9IGNodW5rU2l6ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCAwLCBmaWxlU2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gIH0gZWxzZSBpZiAoZmlsZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpKTtcbiAgfSBlbHNlIGlmIChmaWxlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiBmaWxlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShmaWxlKTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtFbnZ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7bG9nTGV2ZWxTdHJpbmdUb0VudW19IGZyb20gJy4uL3dhc20tY29tbW9uJztcblxudHlwZSBMb2dMZXZlbCA9IE5vbk51bGxhYmxlPEVudlsnbG9nTGV2ZWwnXT47XG50eXBlIE1lc3NhZ2VTdHJpbmcgPSBzdHJpbmc7XG50eXBlIE1lc3NhZ2VGdW5jdGlvbiA9ICgpID0+IHN0cmluZztcbnR5cGUgTWVzc2FnZSA9IE1lc3NhZ2VTdHJpbmd8TWVzc2FnZUZ1bmN0aW9uO1xuXG5jb25zdCBsb2dMZXZlbFByZWZpeCA9IFsnVicsICdJJywgJ1cnLCAnRScsICdGJ107XG5cbmNvbnN0IGRvTG9nID0gKGxldmVsOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhgWyR7bG9nTGV2ZWxQcmVmaXhbbGV2ZWxdfSwke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX1dJHttZXNzYWdlfWApO1xufTtcblxubGV0IGNvbmZpZ0xvZ0xldmVsOiBMb2dMZXZlbHx1bmRlZmluZWQ7XG5sZXQgZGVidWc6IGJvb2xlYW58dW5kZWZpbmVkO1xuXG5leHBvcnQgY29uc3QgY29uZmlndXJlTG9nZ2VyID0gKCRjb25maWdMb2dMZXZlbDogTG9nTGV2ZWwsICRkZWJ1ZzogYm9vbGVhbik6IHZvaWQgPT4ge1xuICBjb25maWdMb2dMZXZlbCA9ICRjb25maWdMb2dMZXZlbDtcbiAgZGVidWcgPSAkZGVidWc7XG59O1xuXG4vKipcbiAqIEEgc2ltcGxlIGxvZ2dpbmcgdXRpbGl0eSB0byBsb2cgbWVzc2FnZXMgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0cgPSAobG9nTGV2ZWw6IExvZ0xldmVsLCBtc2c6IE1lc3NhZ2UpOiB2b2lkID0+IHtcbiAgY29uc3QgbWVzc2FnZUxldmVsID0gbG9nTGV2ZWxTdHJpbmdUb0VudW0obG9nTGV2ZWwpO1xuICBjb25zdCBjb25maWdMZXZlbCA9IGxvZ0xldmVsU3RyaW5nVG9FbnVtKGNvbmZpZ0xvZ0xldmVsKTtcbiAgaWYgKG1lc3NhZ2VMZXZlbCA+PSBjb25maWdMZXZlbCkge1xuICAgIGRvTG9nKG1lc3NhZ2VMZXZlbCwgdHlwZW9mIG1zZyA9PT0gJ2Z1bmN0aW9uJyA/IG1zZygpIDogbXNnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBIHNpbXBsZSBsb2dnaW5nIHV0aWxpdHkgdG8gbG9nIG1lc3NhZ2VzIHRvIHRoZSBjb25zb2xlLiBPbmx5IGxvZ3Mgd2hlbiBkZWJ1ZyBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgY29uc3QgTE9HX0RFQlVHOiB0eXBlb2YgTE9HID0gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIExPRz4pID0+IHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgTE9HKC4uLmFyZ3MpO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHt0ZW5zb3JUeXBlVG9UeXBlZEFycmF5Q29uc3RydWN0b3J9IGZyb20gJy4uL3dhc20tY29tbW9uJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpZXcgPSAoZGF0YUJ1ZmZlcjogQXJyYXlCdWZmZXIsIHR5cGU6IFRlbnNvci5UeXBlKTogSW50MzJBcnJheXxVaW50MzJBcnJheXxCaWdJbnQ2NEFycmF5fFxuICAgIEJpZ1VpbnQ2NEFycmF5fFVpbnQ4QXJyYXl8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQ4QXJyYXl8SW50MTZBcnJheXxVaW50MTZBcnJheSA9PlxuICAgICAgICBuZXcgKHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0eXBlKSkoZGF0YUJ1ZmZlcik7XG5cbi8qKlxuICogYSBUZW5zb3JWaWV3IGRvZXMgbm90IG93biB0aGUgZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5zb3JWaWV3IHtcbiAgcmVhZG9ubHkgZGF0YTogbnVtYmVyO1xuICByZWFkb25seSBkYXRhVHlwZTogbnVtYmVyO1xuICByZWFkb25seSBkaW1zOiByZWFkb25seSBudW1iZXJbXTtcblxuICAvKipcbiAgICogZ2V0IGEgRmxvYXQzMkFycmF5IGRhdGEgdmlldyBvZiB0aGUgdGVuc29yIGRhdGEuIHRlbnNvciBkYXRhIG11c3QgYmUgb24gQ1BVLlxuICAgKi9cbiAgZ2V0RmxvYXQzMkFycmF5KCk6IEZsb2F0MzJBcnJheTtcblxuICAvKipcbiAgICogZ2V0IGEgQmlnSW50NjRBcnJheSBkYXRhIHZpZXcgb2YgdGhlIHRlbnNvciBkYXRhLiB0ZW5zb3IgZGF0YSBtdXN0IGJlIG9uIENQVS5cbiAgICovXG4gIGdldEJpZ0ludDY0QXJyYXkoKTogQmlnSW50NjRBcnJheTtcblxuICAvKipcbiAgICogZ2V0IGEgSW50MzJBcnJheSBkYXRhIHZpZXcgb2YgdGhlIHRlbnNvciBkYXRhLiB0ZW5zb3IgZGF0YSBtdXN0IGJlIG9uIENQVS5cbiAgICovXG4gIGdldEludDMyQXJyYXkoKTogSW50MzJBcnJheTtcblxuICAvKipcbiAgICogY3JlYXRlIGEgbmV3IHRlbnNvciB2aWV3IHdpdGggdGhlIHNhbWUgZGF0YSBidXQgZGlmZmVyZW50IGRpbWVuc2lvbnMuXG4gICAqL1xuICByZXNoYXBlKG5ld0RpbXM6IHJlYWRvbmx5IG51bWJlcltdKTogVGVuc29yVmlldztcbn1cbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi90ZW5zb3Itdmlldyc7XG5cbmltcG9ydCB7U2hhZGVySGVscGVyfSBmcm9tICcuL29wcy9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBTZXNzaW9uU3RhdGUgPSAnZGVmYXVsdCd8J2NhcHR1cmluZyd8J3JlcGxheWluZyc7XG5cbmV4cG9ydCBlbnVtIEdwdURhdGFUeXBlIHtcbiAgZGVmYXVsdCA9IDAsXG4gIHVwbG9hZCA9IDEsXG4gIHByb2ZpbGUgPSAyXG59XG5leHBvcnQgdHlwZSBHcHVEYXRhSWQgPSBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIEdwdUFyY2hpdGVjdHVyZSA9ICdhbXBlcmUnO1xuZXhwb3J0IHR5cGUgR3B1VmVuZG9yID0gJ2FtZCd8J2ludGVsJ3wnbnZpZGlhJztcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckluZm8ge1xuICBpc0FyY2hpdGVjdHVyZTogKGFyY2hpdGVjdHVyZTogR3B1QXJjaGl0ZWN0dXJlKSA9PiBib29sZWFuO1xuICBpc1ZlbmRvcjogKHZlbmRvcjogR3B1VmVuZG9yKSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdwdURhdGEge1xuICB0eXBlOiBHcHVEYXRhVHlwZTtcbiAgaWQ6IEdwdURhdGFJZDtcbiAgYnVmZmVyOiBHUFVCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29ySW5mbyB7XG4gIGRpbXM6IHJlYWRvbmx5IG51bWJlcltdO1xuICBkYXRhVHlwZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyYW1Vbmlmb3JtIHtcbiAgdHlwZTogRGF0YVR5cGU7XG4gIGRhdGE6IG51bWJlcnxyZWFkb25seSBudW1iZXJbXTtcbn1cblxuZXhwb3J0IHR5cGUgUHJvZ3JhbVVuaWZvcm1WYXJpYWJsZUluZm8gPSBbdHlwZTogRGF0YVR5cGUsIGxlbmd0aDogbnVtYmVyXTtcblxuLyoqXG4gKiBSZXByZXNlbnQgdGhlIGRlcGVuZGVuY3kgb2YgYSBwcm9ncmFtIG9uIGEgc3BlY2lmaWMgaW5wdXQgdGVuc29yLlxuICpcbiAqIC0gJ25vbmUnOiB0aGUgc2hhZGVyL3VuaWZvcm0gZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMgaW5wdXQncyBpbmZvXG4gKiAtICd0eXBlJzogdGhlIHNoYWRlci91bmlmb3JtIGRlcGVuZHMgb24gZGF0YSB0eXBlIG9mIHRoaXMgaW5wdXRcbiAqIC0gJ3JhbmsnOiB0aGUgc2hhZGVyL3VuaWZvcm0gZGVwZW5kcyBvbiBkYXRhIHR5cGUgYW5kIHRoZSByYW5rIG9mIHRoaXMgaW5wdXRcbiAqIC0gJ2RpbXMnOiB0aGUgc2hhZGVyL3VuaWZvcm0gZGVwZW5kcyBvbiBkYXRhIHR5cGUgYW5kIHRoZSBkaW1zIG9mIHRoaXMgaW5wdXRcbiAqIC0gJ2RhdGEnOiB0aGUgc2hhZGVyL3VuaWZvcm0gZGVwZW5kcyBvbiBkYXRhIHR5cGUsIHRoZSBkaW1zIGFuZCB0aGUgZGF0YSBvZiB0aGlzIGlucHV0XG4gKi9cbmV4cG9ydCB0eXBlIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5ID0gJ25vbmUnfCd0eXBlJ3wncmFuayd8J2RpbXMnfCdkYXRhJztcblxuLyoqXG4gKiBSZXByZXNlbnQgaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9ncmFtJ3MgY2FjaGUgZm9yIHNoYWRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9ncmFtU2hhZGVyQ2FjaGVJbmZvIHtcbiAgLyoqXG4gICAqIGFuIG9wdGlvbmFsIHN0cmluZyBhcyBhIGNhY2hlIGhpbnQgaW4gdGhlIGFydGlmYWN0IGNhY2hlLiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjYWNoZSBoaW50IHdpbGwgYmUgZW1wdHkuXG4gICAqXG4gICAqIFRoaXMgaGludCBzdHJpbmcgc2hvdWxkIG9ubHkgY29udGFpbnMgaW5pdGlhbGl6aW5nLXRpbWUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGF0dHJpYnV0ZXMgb3IgYW55IGluZm9ybWF0aW9uIG9mXG4gICAqIGluaXRpYWxpemVycy4gSXQgc2hvdWxkIE5PVCBjb250YWluIGFueSBydW50aW1lIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBzaGFwZSBvZiBpbnB1dHMuXG4gICAqL1xuICBoaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBhbiBvcHRpb25hbCBsaXN0IG9mIGRlcGVuZGVuY2llcyBvZiB0aGUgcHJvZ3JhbSBvbiB0aGUgaW5wdXQgdGVuc29ycy4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgcHJvZ3JhbSBkZXBlbmRzXG4gICAqIG9uICdkaW1zJyBvZiBhbGwgaW5wdXRzLlxuICAgKi9cbiAgaW5wdXREZXBlbmRlbmNpZXM/OiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCBpbmZvcm1hdGlvbiBhYm91dCBhIHByb2dyYW0ncyBjYWNoZSBmb3IgdW5pZm9ybS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9ncmFtVW5pZm9ybUNhY2hlSW5mbyB7XG4gIC8qKlxuICAgKiBhbiBvcHRpb25hbCBzdHJpbmcgYXMgYSBjYWNoZSBoaW50IGluIHRoZSB1bmlmb3JtIGNhY2hlLiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjYWNoZSBoaW50IHdpbGwgYmUgZW1wdHkuXG4gICAqXG4gICAqIFRoaXMgaGludCBzdHJpbmcgc2hvdWxkIG9ubHkgY29udGFpbnMgcnVudGltZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgc2hhcGUgb2YgaW5wdXRzLlxuICAgKi9cbiAgaGludD86IHN0cmluZztcblxuICAvKipcbiAgICogYW4gb3B0aW9uYWwgbGlzdCBvZiBkZXBlbmRlbmNpZXMgb2YgdGhlIHByb2dyYW0gb24gdGhlIGlucHV0IHRlbnNvcnMuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCwgdGhlIHByb2dyYW0gZGVwZW5kc1xuICAgKiBvbiAnbm9uZScgb2YgYWxsIGlucHV0cy5cbiAgICovXG4gIGlucHV0RGVwZW5kZW5jaWVzPzogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXTtcbn1cblxuXG4vKipcbiAqIEEgc2V0IG9mIGRhdGEgdGhhdCByZXByZXNlbnQgYSBzaGFkZXIgcHJvZ3JhbVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2dyYW1JbmZvIHtcbiAgLyoqXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtLiB1c2VkIGZvciBkZWJ1Z2dpbmcgYW5kIHByb2ZpbGluZ1xuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBhbiBvcHRpb25hbCBvYmplY3QgZGVzY3JpYmluZyB0aGUgY2FjaGUgaW5mb3JtYXRpb24gb2YgdGhlIHByb2dyYW0gc2hhZGVyLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIGFzc3VtZSBoaW50IGlzIGVtcHR5IGFuZCBpbnB1dERlcGVuZGVuY2llcyBhcmUgWydkaW1zJ10gZm9yIGFsbCBpbnB1dHMuXG4gICAqL1xuICBzaGFkZXJDYWNoZT86IFByb2dyYW1TaGFkZXJDYWNoZUluZm87XG5cbiAgLyoqXG4gICAqIHRoZSBzaGFkZXIncyBwcm9jZXNzaW5nIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gc2hhZGVyIGNhY2hlIG1pc3NlZC5cbiAgICovXG4gIGdldFNoYWRlclNvdXJjZTogKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gZ2V0IHJ1biBkYXRhIHJlcXVpcmVkIHRvIHJ1biB0aGUgcHJvZ3JhbS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBwcm9ncmFtIGlzIGV4ZWN1dGVkLiBTaG91bGQga2VlcCB0aGlzIGZ1bmN0aW9uIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS5cbiAgICovXG4gIGdldFJ1bkRhdGE6IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSkgPT4ge1xuICAgIG91dHB1dHM6IHJlYWRvbmx5IFRlbnNvckluZm9bXTtcbiAgICBkaXNwYXRjaEdyb3VwOiB7eDogbnVtYmVyOyB5PzogbnVtYmVyOyB6PzogbnVtYmVyfTtcbiAgICBwcm9ncmFtVW5pZm9ybXM/OiByZWFkb25seSBQcm9ncmFtVW5pZm9ybVtdO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFydGlmYWN0IHtcbiAgcHJvZ3JhbUluZm86IFByb2dyYW1JbmZvO1xuICBjb21wdXRlUGlwZWxpbmU6IEdQVUNvbXB1dGVQaXBlbGluZTtcbiAgdW5pZm9ybVZhcmlhYmxlc0luZm86IHJlYWRvbmx5IFByb2dyYW1Vbmlmb3JtVmFyaWFibGVJbmZvW118dW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB1dGVDb250ZXh0SW5wdXRzT3V0cHV0c01hcHBpbmcge1xuICAvKipcbiAgICogc3BlY2lmeSB0aGUgbWFwcGluZyB0byB0aGUgcHJvZ3JhbSdzIGlucHV0cy4gdGhlIHZhbHVlIGNhbiBiZSBhIG51bWJlciBvciBhIHRlbnNvciB2aWV3LlxuICAgKiAtIGlmIGl0J3MgYSBudW1iZXIsIGl0J3MgdGhlIGluZGV4IG9mIHRoZSBrZXJuZWwncyBpbnB1dFxuICAgKiAtIGlmIGl0J3MgYSB0ZW5zb3IgdmlldywgaXQncyBhbiBleGlzdGluZyB0ZW5zb3IgdmlldyB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXRcbiAgICpcbiAgICogaWYgaW5wdXRzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBtYXBwaW5nIHdpbGwgYmUgdGhlIGtlcm5lbCdzIGlucHV0cyBpbiBvcmRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0cz86IFJlYWRvbmx5QXJyYXk8VGVuc29yVmlld3xudW1iZXI+O1xuICAvKipcbiAgICogc3BlY2lmeSB0aGUgbWFwcGluZyB0byB0aGUgcHJvZ3JhbSdzIG91dHB1dHMuIHRoZSB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLlxuICAgKiAtIGlmIGl0J3MgYSBub24tbmVnYXRpdmUgbnVtYmVyLCBpdCdzIHRoZSBpbmRleCBvZiB0aGUga2VybmVsJ3Mgb3V0cHV0XG4gICAqIC0gaWYgaXQncyAtMSwgaXQncyBhbiBvdXRwdXQgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgYXMgYSB0ZW1wb3JhcnkgdmFsdWUuIHRoaXMgdmFsdWUgd2lsbCBiZSByZWxlYXNlZCBhZnRlclxuICAgKiB0aGUga2VybmVsIGlzIGV4ZWN1dGVkLlxuICAgKiAtIGlmIGl0J3MgLTIsIGl0J3MgYW4gb3V0cHV0IHRoYXQgd2lsbCBiZSBjcmVhdGVkIGFzIGEgcGVyc2lzdGVudCB2YWx1ZS4gdGhpcyB2YWx1ZSB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlXG4gICAqIGtlcm5lbCBpcyByZWxlYXNlZC5cbiAgICpcbiAgICogaWYgb3V0cHV0cyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbWFwcGluZyB3aWxsIGJlIHRoZSBrZXJuZWwncyBvdXRwdXRzIGluIG9yZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0cz86IHJlYWRvbmx5IG51bWJlcltdO1xufVxuXG4vKipcbiAqIEEgQ29tcHV0ZUNvbnRleHQgaW5zdGFuY2UgY2FycmllcyB0aGUgc3RhdGVzIHRoYXQgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHJ1bm5pbmcgb2YgYSBrZXJuZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZUNvbnRleHQge1xuICAvKipcbiAgICogZ3B1IGFkYXB0ZXIgaW5mb1xuICAgKi9cbiAgcmVhZG9ubHkgYWRhcHRlckluZm86IEFkYXB0ZXJJbmZvO1xuXG4gIC8qKlxuICAgKiBzdG9yZXMgdGhlIHBvaW50ZXIgdG8gT3BLZXJuZWxDb250ZXh0XG4gICAqL1xuICByZWFkb25seSBvcEtlcm5lbENvbnRleHQ6IG51bWJlcjtcblxuICAvKipcbiAgICogYSBsaXN0IG9mIGlucHV0cywgZWFjaCBpbnB1dCBpcyBhbiBpbnN0YW5jZSBvZiBUZW5zb3JWaWV3XG4gICAqL1xuICByZWFkb25seSBpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXTtcblxuICAvKipcbiAgICogYSBjdXN0b20gZGF0YSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhbnkgZGF0YSB0aGF0IGlzIG5lZWRlZCBieSB0aGUga2VybmVsXG4gICAqL1xuICByZWFkb25seSBrZXJuZWxDdXN0b21EYXRhOiB7W2tleTogc3RyaW5nXTogdW5rbm93bn07XG5cbiAgLyoqXG4gICAqIGEgYnVmZmVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIGN1c3RvbSBkYXRhIGNyZWF0ZWQgZWFjaCB0aW1lIHRoZSBrZXJuZWwgaXMgZXhlY3V0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbURhdGFCdWZmZXI6IFVpbnQ4QXJyYXk7XG5cbiAgLyoqXG4gICAqIGEgbnVtYmVyIG9mIG91dHB1dHMgZm9yIHRoZSBub2RlXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRDb3VudDogbnVtYmVyO1xuXG4gIGNvbXB1dGUocHJvZ3JhbTogUHJvZ3JhbUluZm8sIGlucHV0c091dHB1dHNNYXBwaW5nPzogQ29tcHV0ZUNvbnRleHRJbnB1dHNPdXRwdXRzTWFwcGluZyk6IFRlbnNvclZpZXdbXTtcbiAgb3V0cHV0KGluZGV4OiBudW1iZXIsIGRpbXM6IHJlYWRvbmx5IG51bWJlcltdKTogbnVtYmVyO1xuICBnZXRNYXhDb21wdXRlV29ya2dyb3VwU2l6ZXMoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBnZXRNYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZXNpemUoKTogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBUaW1lc3RhbXBRdWVyeSA9ICdub25lJ3wnaW5zaWRlLXBhc3Nlcyd8J2F0LXBhc3Nlcyc7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7V2ViR3B1QmFja2VuZH0gZnJvbSAnLi4vYmFja2VuZC13ZWJncHUnO1xuaW1wb3J0IHtMT0dfREVCVUd9IGZyb20gJy4uL2xvZyc7XG5cbmltcG9ydCB7R3B1RGF0YSwgR3B1RGF0YUlkLCBHcHVEYXRhVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogbWFuYWdlcyBHcHVEYXRhSWQgLT4gR3B1QnVmZmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3B1RGF0YU1hbmFnZXIge1xuICAvKipcbiAgICogY29weSBkYXRhIGZyb20gQ1BVIHRvIEdQVS5cbiAgICovXG4gIHVwbG9hZChpZDogR3B1RGF0YUlkLCBkYXRhOiBVaW50OEFycmF5KTogdm9pZDtcbiAgLyoqXG4gICAqIGNvcHkgZGF0YSBmcm9tIEdQVSB0byBHUFUuXG4gICAqL1xuICBtZW1jcHkoc291cmNlSWQ6IEdwdURhdGFJZCwgZGVzdGluYXRpb25JZDogR3B1RGF0YUlkKTogdm9pZDtcbiAgLyoqXG4gICAqIGNyZWF0ZSBuZXcgZGF0YSBvbiBHUFUuXG4gICAqL1xuICBjcmVhdGUoc2l6ZTogbnVtYmVyLCB1c2FnZT86IG51bWJlcik6IEdwdURhdGE7XG4gIC8qKlxuICAgKiBnZXQgR1BVIGRhdGEgYnkgSUQuXG4gICAqL1xuICBnZXQoaWQ6IEdwdURhdGFJZCk6IEdwdURhdGF8dW5kZWZpbmVkO1xuICAvKipcbiAgICogcmVsZWFzZSB0aGUgZGF0YSBvbiBHUFUgYnkgSUQuXG4gICAqXG4gICAqIEByZXR1cm4gc2l6ZSBvZiB0aGUgZGF0YSByZWxlYXNlZFxuICAgKi9cbiAgcmVsZWFzZShpZDogR3B1RGF0YUlkKTogbnVtYmVyO1xuICAvKipcbiAgICogY29weSBkYXRhIGZyb20gR1BVIHRvIENQVS5cbiAgICovXG4gIGRvd25sb2FkKGlkOiBHcHVEYXRhSWQsIGdldFRhcmdldEJ1ZmZlcjogKCkgPT4gVWludDhBcnJheSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIHJlZnJlc2ggdGhlIGJ1ZmZlcnMgdGhhdCBtYXJrZWQgZm9yIHJlbGVhc2UuXG4gICAqXG4gICAqIHdoZW4gcmVsZWFzZSgpIGlzIGNhbGxlZCwgdGhlIGJ1ZmZlciBpcyBub3QgcmVsZWFzZWQgaW1tZWRpYXRlbHkuIHRoaXMgaXMgYmVjYXVzZSB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBjb21tYW5kc1xuICAgKiB0byBiZSBzdWJtaXR0ZWQgdG8gdGhlIEdQVS4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbW1hbmRzIGFyZSBzdWJtaXR0ZWQgc28gdGhhdCB0aGUgYnVmZmVycyBjYW4gYmVcbiAgICogYWN0dWFsbHkgcmVsZWFzZWQuXG4gICAqL1xuICByZWZyZXNoUGVuZGluZ0J1ZmZlcnMoKTogdm9pZDtcblxuICAvKipcbiAgICogcmVnaXN0ZXIgYW4gZXh0ZXJuYWwgYnVmZmVyIGZvciBJTyBCaW5kaW5nLiBJZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCwgcmV0dXJuIHRoZSBleGlzdGluZyBHUFUgZGF0YSBJRC5cbiAgICpcbiAgICogR1BVIGRhdGEgbWFuYWdlciBvbmx5IG1hbmFnZXMgYSBtYXBwaW5nIGJldHdlZW4gdGhlIGJ1ZmZlciBhbmQgdGhlIEdQVSBkYXRhIElELiBJdCB3aWxsIG5vdCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZlxuICAgKiB0aGUgZXh0ZXJuYWwgYnVmZmVyLlxuICAgKi9cbiAgcmVnaXN0ZXJFeHRlcm5hbEJ1ZmZlcihidWZmZXI6IEdQVUJ1ZmZlciwgb3JpZ2luYWxTaXplOiBudW1iZXIsIHByZXZpb3VzQnVmZmVyPzogR1BVQnVmZmVyKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB1bnJlZ2lzdGVyIGFuIGV4dGVybmFsIGJ1ZmZlciBmb3IgSU8gQmluZGluZy5cbiAgICovXG4gIHVucmVnaXN0ZXJFeHRlcm5hbEJ1ZmZlcihidWZmZXI6IEdQVUJ1ZmZlcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIGRlc3Ryb3kgYWxsIGdwdSBidWZmZXJzLlxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiByZWxlYXNlIHNlc3Npb24gcmVsYXRlZCBkYXRhLlxuICAgKiBAcGFyYW0gc2Vzc2lvbklkIC0gc3BlY2lmeSB0aGUgc2Vzc2lvbiBJRC5cbiAgICovXG4gIG9uUmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgU3RvcmFnZUNhY2hlVmFsdWUge1xuICBncHVEYXRhOiBHcHVEYXRhO1xuICBvcmlnaW5hbFNpemU6IG51bWJlcjtcbn1cblxuY29uc3QgYnVja2V0RnJlZWxpc3Q6IE1hcDxudW1iZXIsIG51bWJlcj4gPSBuZXcgTWFwKFtcbiAgWzY0LCAyNTBdLFxuICBbMTI4LCAyMDBdLFxuICBbMjU2LCAyMDBdLFxuICBbNTEyLCAyMDBdLFxuICBbMjA0OCwgMjMwXSxcbiAgWzQwOTYsIDIwMF0sXG4gIFs4MTkyLCA1MF0sXG4gIFsxNjM4NCwgNTBdLFxuICBbMzI3NjgsIDUwXSxcbiAgWzY1NTM2LCA1MF0sXG4gIFsxMzEwNzIsIDUwXSxcbiAgWzI2MjE0NCwgNTBdLFxuICBbNTI0Mjg4LCA1MF0sXG4gIFsxMDQ4NTc2LCA1MF0sXG4gIFsyMDk3MTUyLCAzMF0sXG4gIFs0MTk0MzA0LCAyMF0sXG4gIFs4Mzg4NjA4LCAxMF0sXG4gIFsxMjU4MjkxMiwgMTBdLFxuICBbMTY3NzcyMTYsIDEwXSxcbiAgWzI2MjE0NDAwLCAxNV0sXG4gIFszMzU1NDQzMiwgMjJdLFxuICBbNDQyMzY4MDAsIDJdLFxuICBbNTg5ODI0MDAsIDZdLFxuICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIHRoZSBidWNrZXQgc2l6ZXMgYmVsb3cgYnV0IG5vdCBjYWNoaW5nIHRoZW1cbiAgLy8gcmVzdWx0cyBpbiBzb21lIG1ham9yIHBlcmZvcm1hbmNlIGhpdHMgZm9yIG1vZGVscyBsaWtlIHNkLXR1cmJvLlxuICBbNjcxMDg4NjQsIDZdLFxuICBbMTM0MjE3NzI4LCA2XSxcbiAgWzE2Nzc3MjE2MCwgNl0sXG5dKTtcblxuY29uc3QgYnVja2V0QXJyOiBudW1iZXJbXSA9IFtdO1xuXG4vKipcbiAqIG5vcm1hbGl6ZSB0aGUgYnVmZmVyIHNpemUgc28gdGhhdCBpdCBmaXRzIHRoZSAxMjgtYml0cyAoMTYgYnl0ZXMpIGFsaWdubWVudC5cbiAqL1xuY29uc3QgY2FsY05vcm1hbGl6ZWRCdWZmZXJTaXplID0gKHNpemU6IG51bWJlcikgPT4gTWF0aC5jZWlsKHNpemUgLyAxNikgKiAxNjtcblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIGJ1ZmZlciBzaXplIHNvIHRoYXQgaXQgZml0cyBpbnRvIGJ1Y2tldHMuXG4gKi9cbmNvbnN0IGNhbGNCdWNrZXRCdWZmZXJTaXplID0gKHNpemU6IG51bWJlcikgPT4ge1xuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBidWNrZXRBcnIubGVuZ3RoOyBpZHgrKykge1xuICAgIGNvbnN0IHNpemVGb3JCdWNrZXQgPSBidWNrZXRBcnJbaWR4XTtcbiAgICBpZiAoc2l6ZSA8PSBzaXplRm9yQnVja2V0KSB7XG4gICAgICByZXR1cm4gc2l6ZUZvckJ1Y2tldDtcbiAgICB9XG4gIH1cbiAgLy8gbm90IGluIGJ1Y2tldCBsaXN0IC0+IGNhbGxlciB3aWxsIG5vdCBjYWNoZSwgcm91bmQgdXAgdG8gMTYuXG4gIHJldHVybiBNYXRoLmNlaWwoc2l6ZSAvIDE2KSAqIDE2O1xufTtcblxubGV0IGd1aWQgPSAxO1xuY29uc3QgY3JlYXRlTmV3R3B1RGF0YUlkID0gKCkgPT4gZ3VpZCsrO1xuXG4vKipcbiAqIGV4cG9ydGVkIHN0YW5kYXJkIGRvd25sb2FkIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHNlc3Npb24gdG8gZG93bmxvYWQgdGhlIGRhdGEgZnJvbSBHUFUsIGFuZCBhbHNvIGJ5XG4gKiBmYWN0b3J5IHRvIGNyZWF0ZSBHUFUgdGVuc29ycyB3aXRoIHRoZSBjYXBhY2l0eSBvZiBkb3dubG9hZGluZyBkYXRhIGZyb20gR1BVLlxuICpcbiAqIEBwYXJhbSBiYWNrZW5kIC0gdGhlIFdlYkdQVSBiYWNrZW5kXG4gKiBAcGFyYW0gZ3B1QnVmZmVyIC0gdGhlIEdQVSBidWZmZXIgdG8gZG93bmxvYWRcbiAqIEBwYXJhbSBvcmlnaW5hbFNpemUgLSB0aGUgb3JpZ2luYWwgc2l6ZSBvZiB0aGUgZGF0YVxuICogQHBhcmFtIGdldFRhcmdldEJ1ZmZlciAtIG9wdGlvbmFsLiBJZiBwcm92aWRlZCwgdGhlIGRhdGEgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIHRhcmdldCBidWZmZXIuIE90aGVyd2lzZSwgYSBuZXcgYnVmZmVyXG4gKiB3aWxsIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgZG93bmxvYWRHcHVEYXRhID1cbiAgICBhc3luYyhiYWNrZW5kOiBXZWJHcHVCYWNrZW5kLCBncHVCdWZmZXI6IEdQVUJ1ZmZlciwgb3JpZ2luYWxTaXplOiBudW1iZXIsIGdldFRhcmdldEJ1ZmZlcj86ICgpID0+IFVpbnQ4QXJyYXkpOlxuICAgICAgICBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgICAgICAgICBjb25zdCBidWZmZXJTaXplID0gY2FsY05vcm1hbGl6ZWRCdWZmZXJTaXplKG9yaWdpbmFsU2l6ZSk7XG4gICAgICAgICAgY29uc3QgZ3B1UmVhZEJ1ZmZlciA9IGJhY2tlbmQuZGV2aWNlLmNyZWF0ZUJ1ZmZlcihcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgICAge3NpemU6IGJ1ZmZlclNpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gYmFja2VuZC5nZXRDb21tYW5kRW5jb2RlcigpO1xuICAgICAgICAgICAgYmFja2VuZC5lbmRDb21wdXRlUGFzcygpO1xuICAgICAgICAgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKFxuICAgICAgICAgICAgICAgIGdwdUJ1ZmZlciAvKiBzb3VyY2UgYnVmZmVyICovLCAwIC8qIHNvdXJjZSBvZmZzZXQgKi8sIGdwdVJlYWRCdWZmZXIgLyogZGVzdGluYXRpb24gYnVmZmVyICovLFxuICAgICAgICAgICAgICAgIDAgLyogZGVzdGluYXRpb24gb2Zmc2V0ICovLCBidWZmZXJTaXplIC8qIHNpemUgKi9cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBiYWNrZW5kLmZsdXNoKCk7XG5cbiAgICAgICAgICAgIGF3YWl0IGdwdVJlYWRCdWZmZXIubWFwQXN5bmMoR1BVTWFwTW9kZS5SRUFEKTtcblxuICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBncHVSZWFkQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgICAgICBpZiAoZ2V0VGFyZ2V0QnVmZmVyKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIENQVSBidWZmZXIgdG8gYWNjZXB0IHRoZSBkYXRhLCBubyBuZWVkIHRvIGNsb25lIHRoZSBBcnJheUJ1ZmZlci5cbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0QnVmZmVyID0gZ2V0VGFyZ2V0QnVmZmVyKCk7XG4gICAgICAgICAgICAgIHRhcmdldEJ1ZmZlci5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIsIDAsIG9yaWdpbmFsU2l6ZSkpO1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0QnVmZmVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gdGhlIG1hcHBlZCBBcnJheUJ1ZmZlciB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIEdQVSBidWZmZXIgaXMgZGVzdHJveWVkLiBOZWVkIHRvIGNsb25lIHRoZVxuICAgICAgICAgICAgICAvLyBBcnJheUJ1ZmZlci5cbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLnNsaWNlKDAsIG9yaWdpbmFsU2l6ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBncHVSZWFkQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbmNsYXNzIEdwdURhdGFNYW5hZ2VySW1wbCBpbXBsZW1lbnRzIEdwdURhdGFNYW5hZ2VyIHtcbiAgLy8gR1BVIERhdGEgSUQgPT4gR1BVIERhdGEgKCBzdG9yYWdlIGJ1ZmZlciApXG4gIHByaXZhdGUgc3RvcmFnZUNhY2hlOiBNYXA8R3B1RGF0YUlkLCBTdG9yYWdlQ2FjaGVWYWx1ZT47XG5cbiAgLy8gcGVuZGluZyBidWZmZXJzIGZvciB1cGxvYWRpbmcgKCBkYXRhIGlzIHVubWFwcGVkIClcbiAgcHJpdmF0ZSBidWZmZXJzRm9yVXBsb2FkaW5nUGVuZGluZzogR1BVQnVmZmVyW107XG4gIC8vIHBlbmRpbmcgYnVmZmVycyBmb3IgY29tcHV0aW5nXG4gIHByaXZhdGUgYnVmZmVyc1BlbmRpbmc6IEdQVUJ1ZmZlcltdO1xuXG4gIC8vIFRoZSByZXVzYWJsZSBzdG9yYWdlIGJ1ZmZlcnMgZm9yIGNvbXB1dGluZy5cbiAgcHJpdmF0ZSBmcmVlQnVmZmVyczogTWFwPG51bWJlciwgR1BVQnVmZmVyW10+O1xuICAvLyBUaGUgcmV1c2FibGUgdW5pZm9ybSBidWZmZXJzXG4gIHByaXZhdGUgZnJlZVVuaWZvcm1CdWZmZXJzOiBNYXA8bnVtYmVyLCBHUFVCdWZmZXJbXT47XG5cbiAgLy8gVGhlIGV4dGVybmFsIGJ1ZmZlcnMgcmVnaXN0ZXJlZCB1c2VycyBmb3IgSU8gQmluZGluZy5cbiAgcHJpdmF0ZSBleHRlcm5hbEJ1ZmZlcnM6IE1hcDxHUFVCdWZmZXIsIEdwdURhdGFJZD47XG5cbiAgLy8gVGhlIHBlbmRpbmdCdWZmZXJzIGZvciBjYXB0dXJlIGdyYXBoLlxuICAvLyBhIFNlc3Npb25JRCAtPiBHUFVCdWZmZXJbXSBtYXBwaW5nLlxuICBwcml2YXRlIGNhcHR1cmVkUGVuZGluZ0J1ZmZlcnM6IE1hcDxudW1iZXIsIEdQVUJ1ZmZlcltdPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhY2tlbmQ6IFdlYkdwdUJhY2tlbmQpIHtcbiAgICB0aGlzLnN0b3JhZ2VDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmZyZWVCdWZmZXJzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZnJlZVVuaWZvcm1CdWZmZXJzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuYnVmZmVyc0ZvclVwbG9hZGluZ1BlbmRpbmcgPSBbXTtcbiAgICB0aGlzLmJ1ZmZlcnNQZW5kaW5nID0gW107XG4gICAgdGhpcy5leHRlcm5hbEJ1ZmZlcnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jYXB0dXJlZFBlbmRpbmdCdWZmZXJzID0gbmV3IE1hcCgpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBdIG9mIGJ1Y2tldEZyZWVsaXN0KSB7XG4gICAgICBidWNrZXRBcnIucHVzaChrZXkpO1xuICAgICAgdGhpcy5mcmVlQnVmZmVycy5zZXQoa2V5LCBbXSk7XG4gICAgICB0aGlzLmZyZWVVbmlmb3JtQnVmZmVycy5zZXQoa2V5LCBbXSk7XG4gICAgfVxuICB9XG5cbiAgdXBsb2FkKGlkOiBHcHVEYXRhSWQsIGRhdGE6IFVpbnQ4QXJyYXkpOiB2b2lkIHtcbiAgICBjb25zdCBzcmNBcnJheUJ1ZmZlciA9IGRhdGEuYnVmZmVyO1xuICAgIGNvbnN0IHNyY09mZnNldCA9IGRhdGEuYnl0ZU9mZnNldDtcbiAgICBjb25zdCBzcmNMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgY29uc3Qgc2l6ZSA9IGNhbGNOb3JtYWxpemVkQnVmZmVyU2l6ZShzcmNMZW5ndGgpO1xuXG4gICAgLy8gZ2V0IGRlc3RpbmF0aW9uIGdwdSBidWZmZXJcbiAgICBjb25zdCBncHVEYXRhQ2FjaGUgPSB0aGlzLnN0b3JhZ2VDYWNoZS5nZXQoaWQpO1xuICAgIGlmICghZ3B1RGF0YUNhY2hlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dwdSBkYXRhIGZvciB1cGxvYWRpbmcgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG4gICAgaWYgKGdwdURhdGFDYWNoZS5vcmlnaW5hbFNpemUgIT09IHNyY0xlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbmNvbnNpc3RlbnQgZGF0YSBzaXplLiBncHUgZGF0YSBzaXplPSR7Z3B1RGF0YUNhY2hlLm9yaWdpbmFsU2l6ZX0sIGRhdGEgc2l6ZT0ke3NyY0xlbmd0aH1gKTtcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgZ3B1IGJ1ZmZlclxuICAgIGNvbnN0IGdwdUJ1ZmZlckZvclVwbG9hZGluZyA9IHRoaXMuYmFja2VuZC5kZXZpY2UuY3JlYXRlQnVmZmVyKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICB7bWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSwgc2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDfSk7XG5cbiAgICAvLyBjb3B5ICh1cGxvYWQpIGRhdGFcbiAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGdwdUJ1ZmZlckZvclVwbG9hZGluZy5nZXRNYXBwZWRSYW5nZSgpO1xuICAgIG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKS5zZXQobmV3IFVpbnQ4QXJyYXkoc3JjQXJyYXlCdWZmZXIsIHNyY09mZnNldCwgc3JjTGVuZ3RoKSk7XG4gICAgZ3B1QnVmZmVyRm9yVXBsb2FkaW5nLnVubWFwKCk7XG5cblxuICAgIC8vIEdQVSBjb3B5XG4gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSB0aGlzLmJhY2tlbmQuZ2V0Q29tbWFuZEVuY29kZXIoKTtcbiAgICB0aGlzLmJhY2tlbmQuZW5kQ29tcHV0ZVBhc3MoKTtcbiAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoZ3B1QnVmZmVyRm9yVXBsb2FkaW5nLCAwLCBncHVEYXRhQ2FjaGUuZ3B1RGF0YS5idWZmZXIsIDAsIHNpemUpO1xuXG4gICAgTE9HX0RFQlVHKCd2ZXJib3NlJywgKCkgPT4gYFtXZWJHUFVdIEdwdURhdGFNYW5hZ2VyLnVwbG9hZChpZD0ke2lkfSlgKTtcblxuICAgIHRoaXMuYnVmZmVyc0ZvclVwbG9hZGluZ1BlbmRpbmcucHVzaChncHVCdWZmZXJGb3JVcGxvYWRpbmcpO1xuICB9XG5cbiAgbWVtY3B5KHNvdXJjZUlkOiBHcHVEYXRhSWQsIGRlc3RpbmF0aW9uSWQ6IEdwdURhdGFJZCk6IHZvaWQge1xuICAgIC8vIGdldCBzb3VyY2UgZ3B1IGJ1ZmZlclxuICAgIGNvbnN0IHNvdXJjZUdwdURhdGFDYWNoZSA9IHRoaXMuc3RvcmFnZUNhY2hlLmdldChzb3VyY2VJZCk7XG4gICAgaWYgKCFzb3VyY2VHcHVEYXRhQ2FjaGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlIGdwdSBkYXRhIGZvciBtZW1jcHkgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG4gICAgLy8gZ2V0IGRlc3RpbmF0aW9uIGdwdSBidWZmZXJcbiAgICBjb25zdCBkZXN0aW5hdGlvbkdwdURhdGFDYWNoZSA9IHRoaXMuc3RvcmFnZUNhY2hlLmdldChkZXN0aW5hdGlvbklkKTtcbiAgICBpZiAoIWRlc3RpbmF0aW9uR3B1RGF0YUNhY2hlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Rlc3RpbmF0aW9uIGdwdSBkYXRhIGZvciBtZW1jcHkgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG4gICAgaWYgKHNvdXJjZUdwdURhdGFDYWNoZS5vcmlnaW5hbFNpemUgIT09IGRlc3RpbmF0aW9uR3B1RGF0YUNhY2hlLm9yaWdpbmFsU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbmNvbnNpc3RlbnQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBncHUgZGF0YSBzaXplJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2l6ZSA9IGNhbGNOb3JtYWxpemVkQnVmZmVyU2l6ZShzb3VyY2VHcHVEYXRhQ2FjaGUub3JpZ2luYWxTaXplKTtcblxuICAgIC8vIEdQVSBjb3B5XG4gICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSB0aGlzLmJhY2tlbmQuZ2V0Q29tbWFuZEVuY29kZXIoKTtcbiAgICB0aGlzLmJhY2tlbmQuZW5kQ29tcHV0ZVBhc3MoKTtcbiAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoXG4gICAgICAgIHNvdXJjZUdwdURhdGFDYWNoZS5ncHVEYXRhLmJ1ZmZlciwgMCwgZGVzdGluYXRpb25HcHVEYXRhQ2FjaGUuZ3B1RGF0YS5idWZmZXIsIDAsIHNpemUpO1xuICB9XG5cbiAgcmVnaXN0ZXJFeHRlcm5hbEJ1ZmZlcihidWZmZXI6IEdQVUJ1ZmZlciwgb3JpZ2luYWxTaXplOiBudW1iZXIsIHByZXZpb3VzQnVmZmVyPzogR1BVQnVmZmVyKTogbnVtYmVyIHtcbiAgICBsZXQgaWQ6IG51bWJlcnx1bmRlZmluZWQ7XG4gICAgaWYgKHByZXZpb3VzQnVmZmVyKSB7XG4gICAgICBpZCA9IHRoaXMuZXh0ZXJuYWxCdWZmZXJzLmdldChwcmV2aW91c0J1ZmZlcik7XG4gICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZXZpb3VzIGJ1ZmZlciBpcyBub3QgcmVnaXN0ZXJlZCcpO1xuICAgICAgfVxuICAgICAgaWYgKGJ1ZmZlciA9PT0gcHJldmlvdXNCdWZmZXIpIHtcbiAgICAgICAgTE9HX0RFQlVHKFxuICAgICAgICAgICAgJ3ZlcmJvc2UnLFxuICAgICAgICAgICAgKCkgPT4gYFtXZWJHUFVdIEdwdURhdGFNYW5hZ2VyLnJlZ2lzdGVyRXh0ZXJuYWxCdWZmZXIoc2l6ZT0ke29yaWdpbmFsU2l6ZX0pID0+IGlkPSR7XG4gICAgICAgICAgICAgICAgaWR9LCBidWZmZXIgaXMgdGhlIHNhbWUsIHNraXAuYCk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5iYWNrZW5kLmNhcHR1cmVkQ29tbWFuZExpc3QuaGFzKHRoaXMuYmFja2VuZC5jdXJyZW50U2Vzc2lvbklkISkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWdpc3RlcmluZyBhIGRpZmZlcmVudCBleHRlcm5hbCBidWZmZXIgdW5kZXIgZ3JhcGggY2FwdHVyZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LlxuICAgICAgICAgICAgIFBsZWFzZSB1c2UgdGhlIHByZXZpb3VzIGV4dGVybmFsIGJ1ZmZlciFgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXh0ZXJuYWxCdWZmZXJzLmRlbGV0ZShwcmV2aW91c0J1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkID0gY3JlYXRlTmV3R3B1RGF0YUlkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yYWdlQ2FjaGUuc2V0KGlkLCB7Z3B1RGF0YToge2lkLCB0eXBlOiBHcHVEYXRhVHlwZS5kZWZhdWx0LCBidWZmZXJ9LCBvcmlnaW5hbFNpemV9KTtcbiAgICB0aGlzLmV4dGVybmFsQnVmZmVycy5zZXQoYnVmZmVyLCBpZCk7XG4gICAgTE9HX0RFQlVHKFxuICAgICAgICAndmVyYm9zZScsXG4gICAgICAgICgpID0+IGBbV2ViR1BVXSBHcHVEYXRhTWFuYWdlci5yZWdpc3RlckV4dGVybmFsQnVmZmVyKHNpemU9JHtvcmlnaW5hbFNpemV9KSA9PiBpZD0ke2lkfSwgcmVnaXN0ZXJlZC5gKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICB1bnJlZ2lzdGVyRXh0ZXJuYWxCdWZmZXIoYnVmZmVyOiBHUFVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZXh0ZXJuYWxCdWZmZXJzLmdldChidWZmZXIpO1xuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0b3JhZ2VDYWNoZS5kZWxldGUoaWQpO1xuICAgICAgdGhpcy5leHRlcm5hbEJ1ZmZlcnMuZGVsZXRlKGJ1ZmZlcik7XG4gICAgICBMT0dfREVCVUcoJ3ZlcmJvc2UnLCAoKSA9PiBgW1dlYkdQVV0gR3B1RGF0YU1hbmFnZXIudW5yZWdpc3RlckV4dGVybmFsQnVmZmVyKCkgPT4gaWQ9JHtpZH1gKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICBjcmVhdGUoc2l6ZTogbnVtYmVyLCB1c2FnZSA9IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNUKTogR3B1RGF0YSB7XG4gICAgY29uc3QgYnVmZmVyU2l6ZSA9IGNhbGNCdWNrZXRCdWZmZXJTaXplKHNpemUpO1xuXG4gICAgbGV0IGdwdUJ1ZmZlcjtcbiAgICAvLyBDdXJyZW50bHksIG9ubHkgc3RvcmFnZSBidWZmZXJzIGFyZSByZXVzZWQuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICBjb25zdCBpc1N0b3JhZ2UgPSAodXNhZ2UgJiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFKSA9PT0gR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIGNvbnN0IGlzVW5pZm9ybSA9ICh1c2FnZSAmIEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0pID09PSBHUFVCdWZmZXJVc2FnZS5VTklGT1JNO1xuICAgIGlmIChpc1N0b3JhZ2UgfHwgaXNVbmlmb3JtKSB7XG4gICAgICBjb25zdCBmcmVlQnVmZmVycyA9IGlzU3RvcmFnZSA/IHRoaXMuZnJlZUJ1ZmZlcnMgOiB0aGlzLmZyZWVVbmlmb3JtQnVmZmVycztcbiAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBmcmVlQnVmZmVycy5nZXQoYnVmZmVyU2l6ZSk7XG4gICAgICBpZiAoIWJ1ZmZlcnMpIHtcbiAgICAgICAgLy8gbm8gc3VjaCBidWNrZXQvZnJlZWxpc3QgLSBjcmVhdGUgZ3B1IGJ1ZmZlclxuICAgICAgICBncHVCdWZmZXIgPSB0aGlzLmJhY2tlbmQuZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7c2l6ZTogYnVmZmVyU2l6ZSwgdXNhZ2V9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChidWZmZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBpbiBmcmVlbGlzdCwgdXNlIGl0XG4gICAgICAgICAgZ3B1QnVmZmVyID0gYnVmZmVycy5wb3AoKSBhcyBHUFVCdWZmZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYnVja2V0IGVtcHR5LCBjcmVhdGUgZ3B1IGJ1ZmZlclxuICAgICAgICAgIGdwdUJ1ZmZlciA9IHRoaXMuYmFja2VuZC5kZXZpY2UuY3JlYXRlQnVmZmVyKHtzaXplOiBidWZmZXJTaXplLCB1c2FnZX0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNyZWF0ZSBncHUgYnVmZmVyXG4gICAgICBncHVCdWZmZXIgPSB0aGlzLmJhY2tlbmQuZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7c2l6ZTogYnVmZmVyU2l6ZSwgdXNhZ2V9KTtcbiAgICB9XG5cbiAgICBjb25zdCBncHVEYXRhID0ge2lkOiBjcmVhdGVOZXdHcHVEYXRhSWQoKSwgdHlwZTogR3B1RGF0YVR5cGUuZGVmYXVsdCwgYnVmZmVyOiBncHVCdWZmZXJ9O1xuICAgIHRoaXMuc3RvcmFnZUNhY2hlLnNldChncHVEYXRhLmlkLCB7Z3B1RGF0YSwgb3JpZ2luYWxTaXplOiBzaXplfSk7XG5cbiAgICBMT0dfREVCVUcoJ3ZlcmJvc2UnLCAoKSA9PiBgW1dlYkdQVV0gR3B1RGF0YU1hbmFnZXIuY3JlYXRlKHNpemU9JHtzaXplfSkgPT4gaWQ9JHtncHVEYXRhLmlkfWApO1xuICAgIHJldHVybiBncHVEYXRhO1xuICB9XG5cbiAgZ2V0KGlkOiBHcHVEYXRhSWQpOiBHcHVEYXRhfHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZUNhY2hlLmdldChpZCk/LmdwdURhdGE7XG4gIH1cblxuICByZWxlYXNlKGlkOiBHcHVEYXRhSWQpOiBudW1iZXIge1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSB0aGlzLnN0b3JhZ2VDYWNoZS5nZXQoaWQpO1xuICAgIGlmICghY2FjaGVkRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZWxlYXNpbmcgZGF0YSBkb2VzIG5vdCBleGlzdCcpO1xuICAgIH1cblxuICAgIExPR19ERUJVRygndmVyYm9zZScsICgpID0+IGBbV2ViR1BVXSBHcHVEYXRhTWFuYWdlci5yZWxlYXNlKGlkPSR7aWR9KSwgZ3B1RGF0YUlkPSR7Y2FjaGVkRGF0YS5ncHVEYXRhLmlkfWApO1xuXG4gICAgdGhpcy5zdG9yYWdlQ2FjaGUuZGVsZXRlKGlkKTtcbiAgICB0aGlzLmJ1ZmZlcnNQZW5kaW5nLnB1c2goY2FjaGVkRGF0YS5ncHVEYXRhLmJ1ZmZlcik7XG4gICAgLy8gY2FjaGVkRGF0YS5ncHVEYXRhLmJ1ZmZlci5kZXN0cm95KCk7XG5cbiAgICByZXR1cm4gY2FjaGVkRGF0YS5vcmlnaW5hbFNpemU7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChpZDogR3B1RGF0YUlkLCBnZXRUYXJnZXRCdWZmZXI6ICgpID0+IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gdGhpcy5zdG9yYWdlQ2FjaGUuZ2V0KGlkKTtcbiAgICBpZiAoIWNhY2hlZERhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGF0YSBkb2VzIG5vdCBleGlzdCcpO1xuICAgIH1cbiAgICBhd2FpdCBkb3dubG9hZEdwdURhdGEodGhpcy5iYWNrZW5kLCBjYWNoZWREYXRhLmdwdURhdGEuYnVmZmVyLCBjYWNoZWREYXRhLm9yaWdpbmFsU2l6ZSwgZ2V0VGFyZ2V0QnVmZmVyKTtcbiAgfVxuXG4gIHJlZnJlc2hQZW5kaW5nQnVmZmVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiB0aGlzLmJ1ZmZlcnNGb3JVcGxvYWRpbmdQZW5kaW5nKSB7XG4gICAgICAvLyB1cGxvYWQgYnVmZmVyIGlzIG9ubHkgdXNlZnVsIGluIHRoZSBzZXNzaW9uIGNyZWF0aW9uIHRpbWUuIFNvIHdlIGRvbid0IG5lZWQgdG8gcmV1c2UgdGhlbSBpbiBzZXNzaW9uIHJ1bm5pbmcuXG4gICAgICBidWZmZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmJ1ZmZlcnNGb3JVcGxvYWRpbmdQZW5kaW5nID0gW107XG5cbiAgICBpZiAodGhpcy5idWZmZXJzUGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5iYWNrZW5kLnNlc3Npb25TdGF0dXMgPT09ICdkZWZhdWx0Jykge1xuICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgdGhpcy5idWZmZXJzUGVuZGluZykge1xuICAgICAgICBjb25zdCBtYXhJbkZyZWVMaXN0ID0gYnVja2V0RnJlZWxpc3QuZ2V0KGJ1ZmZlci5zaXplKTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICBpZiAoKGJ1ZmZlci51c2FnZSAmIEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UpID09PSBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFKSB7XG4gICAgICAgICAgLy8gUHV0IHRoZSBwZW5kaW5nIGJ1ZmZlciB0byBmcmVlQnVmZmVycyBsaXN0IGluc3RlYWQgb2YgcmVhbGx5IGRlc3Ryb3lpbmcgaXQgZm9yIGJ1ZmZlciByZXVzaW5nLlxuICAgICAgICAgIGNvbnN0IGZyZWVsaXN0ID0gdGhpcy5mcmVlQnVmZmVycy5nZXQoYnVmZmVyLnNpemUpIHx8IFtdO1xuICAgICAgICAgIGlmIChtYXhJbkZyZWVMaXN0ID09PSB1bmRlZmluZWQgfHwgZnJlZWxpc3QubGVuZ3RoID49IG1heEluRnJlZUxpc3QpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyZWVsaXN0LnB1c2goYnVmZmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgfSBlbHNlIGlmICgoYnVmZmVyLnVzYWdlICYgR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSkgPT09IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0pIHtcbiAgICAgICAgICAvLyBQdXQgdGhlIHBlbmRpbmcgYnVmZmVyIHRvIGZyZWVVbmlmb3JtQnVmZmVycyBsaXN0IGluc3RlYWQgb2YgcmVhbGx5IGRlc3Ryb3lpbmcgaXQgZm9yIGJ1ZmZlciByZXVzaW5nLlxuICAgICAgICAgIGNvbnN0IGZyZWVsaXN0ID0gdGhpcy5mcmVlVW5pZm9ybUJ1ZmZlcnMuZ2V0KGJ1ZmZlci5zaXplKSB8fCBbXTtcbiAgICAgICAgICBpZiAobWF4SW5GcmVlTGlzdCA9PT0gdW5kZWZpbmVkIHx8IGZyZWVsaXN0Lmxlbmd0aCA+PSBtYXhJbkZyZWVMaXN0KSB7XG4gICAgICAgICAgICBidWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcmVlbGlzdC5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyc1BlbmRpbmcgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRG9uJ3QgcmVsZWFzZSBpbnRlcm1lZGlhdGUgdGVuc29ycyBpbiBub24tZGVmYXVsdCBtb2RlLlxuICAgICAgLy8gVE9ETzogcmV1c2UgdGhlIHN0b3JhZ2UgYnVmZmVycyBpbiBub24tZGVmYXVsdCBtb2RlLlxuICAgICAgbGV0IGNhcHR1cmVkQnVmZmVycyA9IHRoaXMuY2FwdHVyZWRQZW5kaW5nQnVmZmVycy5nZXQodGhpcy5iYWNrZW5kLmN1cnJlbnRTZXNzaW9uSWQhKTtcbiAgICAgIGlmICghY2FwdHVyZWRCdWZmZXJzKSB7XG4gICAgICAgIGNhcHR1cmVkQnVmZmVycyA9IFtdO1xuICAgICAgICB0aGlzLmNhcHR1cmVkUGVuZGluZ0J1ZmZlcnMuc2V0KHRoaXMuYmFja2VuZC5jdXJyZW50U2Vzc2lvbklkISwgY2FwdHVyZWRCdWZmZXJzKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIHRoaXMuYnVmZmVyc1BlbmRpbmcpIHtcbiAgICAgICAgY2FwdHVyZWRCdWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyc1BlbmRpbmcgPSBbXTtcbiAgICB9XG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuZnJlZUJ1ZmZlcnMuZm9yRWFjaCgoYnVmZmVycykgPT4ge1xuICAgICAgYnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XG4gICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmZyZWVVbmlmb3JtQnVmZmVycy5mb3JFYWNoKChidWZmZXJzKSA9PiB7XG4gICAgICBidWZmZXJzLmZvckVhY2goYnVmZmVyID0+IHtcbiAgICAgICAgYnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zdG9yYWdlQ2FjaGUuZm9yRWFjaCgoc3RvcmFnZSkgPT4ge1xuICAgICAgc3RvcmFnZS5ncHVEYXRhLmJ1ZmZlci5kZXN0cm95KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNhcHR1cmVkUGVuZGluZ0J1ZmZlcnMuZm9yRWFjaCgoYnVmZmVycykgPT4ge1xuICAgICAgYnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XG4gICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnN0b3JhZ2VDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmZyZWVCdWZmZXJzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZnJlZVVuaWZvcm1CdWZmZXJzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuY2FwdHVyZWRQZW5kaW5nQnVmZmVycyA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIG9uUmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkOiBudW1iZXIpIHtcbiAgICAvLyByZWxlYXNlIHRoZSBjYXB0dXJlZCBwZW5kaW5nIGJ1ZmZlcnMuXG4gICAgY29uc3QgcGVuZGluZ0J1ZmZlcnMgPSB0aGlzLmNhcHR1cmVkUGVuZGluZ0J1ZmZlcnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKHBlbmRpbmdCdWZmZXJzKSB7XG4gICAgICBwZW5kaW5nQnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XG4gICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FwdHVyZWRQZW5kaW5nQnVmZmVycy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdwdURhdGFNYW5hZ2VyID0gKC4uLmFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgR3B1RGF0YU1hbmFnZXJJbXBsPik6IEdwdURhdGFNYW5hZ2VyID0+XG4gICAgbmV3IEdwdURhdGFNYW5hZ2VySW1wbCguLi5hcmdzKTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuY2xhc3MgQXR0cmlidXRlV2l0aENhY2hlS2V5SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGF0dHJpYnV0ZSk7XG4gIH1cblxuICBwcml2YXRlIGtleTogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGNhY2hlS2V5KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmtleSkge1xuICAgICAgdGhpcy5rZXkgPVxuICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpLnNvcnQoKS5tYXAobmFtZSA9PiBgJHsodGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZV19YCkuam9pbignOycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5rZXk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBjYWNoZUtleTogc3RyaW5nO1xufVxuXG4vKipcbiAqIGNyZWF0ZSBhIG5ldyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gYXR0cmlidXRlLCBhbmQgYWRkIGEgY2FjaGVLZXkgcHJvcGVydHkgdG8gaXRcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGF0dHJpYnV0ZTogVCk6IFQmQXR0cmlidXRlV2l0aENhY2hlS2V5ID0+XG4gICAgbmV3IEF0dHJpYnV0ZVdpdGhDYWNoZUtleUltcGwoYXR0cmlidXRlKSBhcyB1bmtub3duIGFzIFQgJiBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXk7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5cbmV4cG9ydCBjbGFzcyBNYXRNdWxVdGlsIHtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgc2hhcGUgd2hlbiBtYXRyaXggbXVsdGlwbGljYXRpb25cbiAgICogQHBhcmFtIGEgVGhlIHNoYXBlIG9mIHRlbnNvciBBLiBTaG91bGQgYmUgYSB0dXBsZSBvZiAyIHBvc2l0aXZlIGludGVnZXJzXG4gICAqIEBwYXJhbSBiIFRoZSBzaGFwZSBvZiB0ZW5zb3IgQi4gU2hvdWxkIGJlIGEgdHVwbGUgb2YgMiBwb3NpdGl2ZSBpbnRlZ2Vyc1xuICAgKiBAcmV0dXJucyBUaGUgZXhwZWN0ZWQgc2hhcGUgb2YgdGhlIHJlc3VsdCwgb3IgdW5kZWZpbmVkIGlmIE4vQVxuICAgKi9cbiAgc3RhdGljIGNhbGNNYXRNdWxTaGFwZShhOiBbbnVtYmVyLCBudW1iZXJdLCBiOiBbbnVtYmVyLCBudW1iZXJdKTogW251bWJlciwgbnVtYmVyXXx1bmRlZmluZWQge1xuICAgIHJldHVybiAoYVsxXSAhPT0gYlswXSkgPyB1bmRlZmluZWQgOiBbYVswXSwgYlsxXV07XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgQnJvYWRjYXN0VXRpbCB7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGV4cGVjdGVkIHNoYXBlIHdoZW4gYnJvYWRjYXN0aW5nIDIgdGVuc29yc1xuICAgKiBAcGFyYW0gYSBUaGUgc2hhcGUgb2YgdGVuc29yIEEuIFNob3VsZCBiZSBhbiBhcnJheSBvZiBwb3NpdGl2ZSBpbnRlZ2Vyc1xuICAgKiBAcGFyYW0gYiBUaGUgc2hhcGUgb2YgdGVuc29yIEIuIFNob3VsZCBiZSBhbiBhcnJheSBvZiBwb3NpdGl2ZSBpbnRlZ2Vyc1xuICAgKiBAcGFyYW0gaXNNYXRNdWwgV2hldGhlciB0aGUgb3BlcmF0aW9uIGlzIE1hdE11bFxuICAgKiBAcmV0dXJucyBUaGUgZXhwZWN0ZWQgc2hhcGUgb2YgdGhlIHJlc3VsdCwgb3IgdW5kZWZpbmVkIGlmIE4vQVxuICAgKi9cbiAgc3RhdGljIGNhbGNTaGFwZShhZGltczogcmVhZG9ubHkgbnVtYmVyW10sIGJkaW1zOiByZWFkb25seSBudW1iZXJbXSwgaXNNYXRNdWwgPSBmYWxzZSk6IHJlYWRvbmx5IG51bWJlcltdfHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXJhbmsgPSBhZGltcy5sZW5ndGg7XG4gICAgY29uc3QgYnJhbmsgPSBiZGltcy5sZW5ndGg7XG4gICAgaWYgKGFyYW5rID09PSAwKSB7XG4gICAgICByZXR1cm4gYmRpbXM7XG4gICAgfVxuICAgIGlmIChicmFuayA9PT0gMCkge1xuICAgICAgcmV0dXJuIGFkaW1zO1xuICAgIH1cbiAgICBjb25zdCBjcmFuayA9IE1hdGgubWF4KGFkaW1zLmxlbmd0aCwgYmRpbXMubGVuZ3RoKTtcbiAgICBjb25zdCBjZGltcyA9IG5ldyBBcnJheTxudW1iZXI+KGNyYW5rKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgbGFzdCAyIGRpbWVuc2lvbiBpZiBpdCBpcyBNYXRNdWxcbiAgICBpZiAoaXNNYXRNdWwpIHtcbiAgICAgIGlmIChhcmFuayA8IDIgfHwgYnJhbmsgPCAyKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBjU2hhcGVNYXRNdWwgPVxuICAgICAgICAgIE1hdE11bFV0aWwuY2FsY01hdE11bFNoYXBlKFthZGltc1thcmFuayAtIDJdLCBhZGltc1thcmFuayAtIDFdXSwgW2JkaW1zW2JyYW5rIC0gMl0sIGJkaW1zW2JyYW5rIC0gMV1dKTtcbiAgICAgIGlmIChjU2hhcGVNYXRNdWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgW2NkaW1zW2NyYW5rIC0gMl0sIGNkaW1zW2NyYW5rIC0gMV1dID0gY1NoYXBlTWF0TXVsO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBpc01hdE11bCA/IDMgOiAxOyBpIDw9IGNyYW5rOyBpKyspIHtcbiAgICAgIGNvbnN0IGFMZW4gPSBhcmFuayAtIGkgPCAwID8gMSA6IGFkaW1zW2FyYW5rIC0gaV07XG4gICAgICBjb25zdCBiTGVuID0gYnJhbmsgLSBpIDwgMCA/IDEgOiBiZGltc1ticmFuayAtIGldO1xuXG4gICAgICBpZiAoYUxlbiAhPT0gYkxlbiAmJiBhTGVuID4gMSAmJiBiTGVuID4gMSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoYUxlbiwgYkxlbik7XG4gICAgICBpZiAoYUxlbiAmJiBiTGVuKSB7XG4gICAgICAgIGNkaW1zW2NyYW5rIC0gaV0gPSBNYXRoLm1heChhTGVuLCBiTGVuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdoZW4gZWl0aGVyIGFMZW4gb3IgYkxlbiBpcyAwLCB0aGUgb3RoZXIgc2hvdWxkIGJlIGVpdGhlciAwIG9yIDEsIG90aGVyd2lzZSBpdCBpcyBub3QgYnJvYWRjYXN0YWJsZS5cbiAgICAgICAgaWYgKG1heCA+IDEpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNkaW1zW2NyYW5rIC0gaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjZGltcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgYSBzaGFwZSBpcyB1bmlkaXJlY3Rpb25hbCBicm9hZGNhc3RhYmxlIHRvIGFub3RoZXIgc2hhcGVcbiAgICogQHBhcmFtIHNoYXBlIFRoZSBpbnB1dCBzaGFwZVxuICAgKiBAcGFyYW0gZmluYWxTaGFwZSBUaGUgZGVzaXJlZCBzaGFwZSBhZnRlciBicm9hZGNhc3RpbmdcbiAgICovXG4gIHN0YXRpYyBpc1ZhbGlkQnJvYWRjYXN0KHNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgZmluYWxTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10pOiBib29sZWFuIHtcbiAgICAvLyBhbGlnbiBzaGFwZSB0byB0aGUgcmlnaHRcbiAgICBjb25zdCBpbnB1dFJhbmsgPSBzaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgZmluYWxSYW5rID0gZmluYWxTaGFwZS5sZW5ndGg7XG4gICAgaWYgKGlucHV0UmFuayA+IGZpbmFsUmFuaykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBpbnB1dFJhbms7IGkrKykge1xuICAgICAgaWYgKHNoYXBlW2lucHV0UmFuayAtIGldICE9PSAxICYmIHNoYXBlW2lucHV0UmFuayAtIGldICE9PSBmaW5hbFNoYXBlW2ZpbmFsUmFuayAtIGldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgU2hhcGVVdGlsIHtcbiAgLyoqXG4gICAqIGNhbGN1bGF0ZSB0aGUgc2l6ZSAobnVtYmVyIG9mIGVsZW1lbnRzKVxuICAgKi9cbiAgc3RhdGljIHNpemUoZGltczogcmVhZG9ubHkgbnVtYmVyW10pOiBudW1iZXIge1xuICAgIHJldHVybiBTaGFwZVV0aWwuZ2V0U2l6ZUZyb21EaW1lbnNpb25SYW5nZShkaW1zLCAwLCBkaW1zLmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogY29udmVydCBkaW1zIGNvcnJlc3BvbmRpbmcgdG8gdHlwZSBjaGFuZ2UgdG8gcGFjay4gZXguIHVpbnQ4IGRhdGEgdG8gdWludDMyXG4gICAqL1xuICBzdGF0aWMgY29udmVydFNoYXBlKGRpbXM6IHJlYWRvbmx5IG51bWJlcltdLCBzaXplID0gNCk6IHJlYWRvbmx5IG51bWJlcltdIHtcbiAgICBjb25zdCByYW5rID0gZGltcy5sZW5ndGg7XG4gICAgaWYgKHJhbmsgPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgbmV3RGltcyA9IG5ldyBBcnJheShyYW5rKTtcbiAgICBsZXQgaSA9IHJhbmsgLSAxO1xuICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgIGlmIChkaW1zW2ldICUgc2l6ZSA9PT0gMCkge1xuICAgICAgICBuZXdEaW1zW2ldID0gZGltc1tpXSAvIHNpemU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHNpemUgJSBkaW1zW2ldICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNvbnZlcnQgc2hhcGUnKTtcbiAgICAgIH1cbiAgICAgIG5ld0RpbXNbaV0gPSAxO1xuICAgICAgc2l6ZSAvPSBkaW1zW2ldO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICBmb3IgKGktLTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIG5ld0RpbXNbaV0gPSBkaW1zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3RGltcztcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIHNpemUgKG51bWJlciBvZiBlbGVtZW50cykgZnJvbSB0aGUgZ2l2ZW4gYXhpcyAoaW5jbHVzaXZlKVxuICAgKi9cbiAgc3RhdGljIHNpemVGcm9tRGltZW5zaW9uKGRpbXM6IHJlYWRvbmx5IG51bWJlcltdLCBheGlzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChheGlzIDwgMCB8fCBheGlzID4gZGltcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaW1lbnNpb24gb2YgJHtheGlzfSBmb3Igc2l6ZUZyb21EaW1lbnNpb24gYXMgVGVuc29yIGhhcyAke2RpbXMubGVuZ3RofSBkaW1lbnNpb25zLmApO1xuICAgIH1cbiAgICByZXR1cm4gU2hhcGVVdGlsLmdldFNpemVGcm9tRGltZW5zaW9uUmFuZ2UoZGltcywgYXhpcywgZGltcy5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGN1bGF0ZSB0aGUgc2l6ZSAobnVtYmVyIG9mIGVsZW1lbnRzKSB0byB0aGUgZ2l2ZW4gYXhpcyAoZXhjbHVzaXZlKVxuICAgKi9cbiAgc3RhdGljIHNpemVUb0RpbWVuc2lvbihkaW1zOiByZWFkb25seSBudW1iZXJbXSwgYXhpczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoYXhpcyA8IDAgfHwgYXhpcyA+IGRpbXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGltZW5zaW9uIG9mICR7YXhpc30gZm9yIHNpemVUb0RpbWVuc2lvbiBhcyBUZW5zb3IgaGFzICR7ZGltcy5sZW5ndGh9IGRpbWVuc2lvbnMuYCk7XG4gICAgfVxuICAgIHJldHVybiBTaGFwZVV0aWwuZ2V0U2l6ZUZyb21EaW1lbnNpb25SYW5nZShkaW1zLCAwLCBheGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIHNpemUgKG51bWJlciBvZiBlbGVtZW50cykgZnJvbSBhbmQgdG8gdGhlIGdpdmVuIGF4aXMgW3N0YXJ0LCBlbmQpXG4gICAqL1xuICBzdGF0aWMgZ2V0U2l6ZUZyb21EaW1lbnNpb25SYW5nZShkaW1zOiByZWFkb25seSBudW1iZXJbXSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBzaXplID0gMTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgLy8gc2FmZXR5IGNoZWNrIGFzIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBtdWx0aXBsZSBvdGhlciBtZXRob2RzIHJlcXVpcmluZyBzaXplLlxuICAgICAgLy8gc2l6ZSBjYW5ub3QgYmUgbmVnYXRpdmUuXG4gICAgICBpZiAoZGltc1tpXSA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICdjYW5ub3QgZ2V0IHZhbGlkIHNpemUgZnJvbSBzcGVjaWZpZWQgZGltZW5zaW9uIHJhbmdlLiBNb3N0IGxpa2VseSB0aGUgcmFuZ2UgY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzIGluIHRoZW0uJyk7XG4gICAgICB9XG4gICAgICBzaXplICo9IGRpbXNbaV07XG4gICAgfVxuICAgIHJldHVybiBzaXplO1xuICB9XG5cbiAgc3RhdGljIGNvbXB1dGVTdHJpZGVzKGRpbXM6IHJlYWRvbmx5IG51bWJlcltdKTogcmVhZG9ubHkgbnVtYmVyW10ge1xuICAgIGNvbnN0IHJhbmsgPSBkaW1zLmxlbmd0aDtcbiAgICBpZiAocmFuayA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSBpZiAocmFuayA9PT0gMSkge1xuICAgICAgcmV0dXJuIFsxXTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaWRlcyA9IG5ldyBBcnJheShyYW5rKTtcbiAgICBzdHJpZGVzW3JhbmsgLSAxXSA9IDE7XG4gICAgc3RyaWRlc1tyYW5rIC0gMl0gPSBkaW1zW3JhbmsgLSAxXTtcbiAgICBmb3IgKGxldCBpID0gcmFuayAtIDM7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBzdHJpZGVzW2ldID0gc3RyaWRlc1tpICsgMV0gKiBkaW1zW2kgKyAxXTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmlkZXM7XG4gIH1cblxuICAvKipcbiAgICogbm9ybWFpbHplIGF4aXMgb2YgcmFuZ2UgWy1yLCByKSBpbnRvIFswLCByKS5cbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVBeGlzKGF4aXM6IG51bWJlciwgdGVuc29yUmFuazogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoYXhpcyA8IC10ZW5zb3JSYW5rICYmIGF4aXMgPj0gdGVuc29yUmFuaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBheGlzIGZvciB0aGlzIG9wZXJhdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGF4aXMgPCAwID8gYXhpcyArIHRlbnNvclJhbmsgOiBheGlzO1xuICB9XG5cbiAgc3RhdGljIG5vcm1hbGl6ZUF4ZXMoYXhlczogcmVhZG9ubHkgbnVtYmVyW10sIHRlbnNvclJhbms/OiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIGF4ZXMubWFwKHggPT4gdGhpcy5ub3JtYWxpemVBeGlzKHgsIHRlbnNvclJhbmsgPz8gYXhlcy5sZW5ndGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyBhIGdpdmVuIGFycmF5IGJhc2VkIG9uIHRoZSBpbmRpY2VzIGluIHRoZSBQZXJtIGFycmF5XG4gICAqIFVzZWQgaW4gVHJhbnNwb3NlXG4gICAqIEBwYXJhbSBhIEFycmF5IHRvIGJlIHNvcnRlZCBzdWNoIGFzIGRpbXMgb3Igc3RyaWRlc1xuICAgKiBAcGFyYW0gcGVybSBQZXJtIGdpdmVuOyBpZiBudWxsIGEgd2lsbCBiZSByZXZlcnNlZFxuICAgKi9cbiAgc3RhdGljIHNvcnRCYXNlZE9uUGVybShhOiByZWFkb25seSBudW1iZXJbXSwgcGVybT86IHJlYWRvbmx5IG51bWJlcltdKTogcmVhZG9ubHkgbnVtYmVyW10ge1xuICAgIGlmIChwZXJtKSB7XG4gICAgICByZXR1cm4gcGVybS5tYXAoKHYpID0+IGFbdl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYS5zbGljZSgpLnJldmVyc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFkcyBhIGdpdmVuIHNoYXBlIGFjY29yZGluZyB0byB0aGUgcGFkZGluZyB2YWx1ZXNcbiAgICogQHBhcmFtIGRpbXMgc2hhcGUgb2YgdGhlIFRlbnNvciB0byBiZSBwYWRkZWRcbiAgICogQHBhcmFtIHBhZCBwYWQgdmFsdWVzXG4gICAqL1xuICBzdGF0aWMgcGFkU2hhcGUoZGltczogcmVhZG9ubHkgbnVtYmVyW10sIHBhZDogcmVhZG9ubHkgbnVtYmVyW10pOiByZWFkb25seSBudW1iZXJbXSB7XG4gICAgY29uc3QgcmFuayA9IGRpbXMubGVuZ3RoO1xuICAgIHJldHVybiBkaW1zLm1hcCgodiwgaSkgPT4gdiArIHBhZFtpXSArIHBhZFtpICsgcmFua10pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHR3byBzaGFwZXMgYXJlIGlkZW50aWNhbFxuICAgKiBAcGFyYW0gc2hhcGUxXG4gICAqIEBwYXJhbSBzaGFwZTJcbiAgICovXG4gIHN0YXRpYyBhcmVFcXVhbChzaGFwZTE6IHJlYWRvbmx5IG51bWJlcltdLCBzaGFwZTI6IHJlYWRvbmx5IG51bWJlcltdKTogYm9vbGVhbiB7XG4gICAgaWYgKHNoYXBlMS5sZW5ndGggIT09IHNoYXBlMi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHNoYXBlMS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gc2hhcGUyW2ldKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUG9vbENvbnZVdGlsIHtcbiAgLyoqXG4gICAqIEFkanVzdCB0aGUga2VybmVsLCBzdHJpZGVzLCBwYWRzIHRvIGNvcnJlY3QgcmFuay4gU2V0IHRvIGRlZmF1bHQgdmFsdWUgaWYgbm90IHByZXNlbnRcbiAgICogQHBhcmFtIGlzR2xvYmFsT3BlcmF0b3IgSWYgdHJ1ZSwgcGVyZm9ybSBnbG9iYWwgcG9vbGluZy5cbiAgICogQHBhcmFtIGlucHV0RGltcyBUaGUgaW5wdXQgdGVuc29yIGRpbWVuc2lvbi5cbiAgICogQHBhcmFtIGtlcm5lbFNoYXBlIFRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYWxvbmcgZWFjaCBheGlzLlxuICAgKiBAcGFyYW0gc3RyaWRlcyBTdHJpZGUgYWxvbmcgZWFjaCBheGlzLlxuICAgKiBAcGFyYW0gZGlsYXRpb25zIERpbGF0aW9uIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIHBhZHMgUGFkZGluZyBmb3IgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGFsb25nIGVhY2ggYXhpcy5cbiAgICovXG4gIHN0YXRpYyBhZGp1c3RQb29sQXR0cmlidXRlcyhcbiAgICAgIGlzR2xvYmFsT3BlcmF0b3I6IGJvb2xlYW4sIGlucHV0RGltczogcmVhZG9ubHkgbnVtYmVyW10sIGtlcm5lbFNoYXBlOiBudW1iZXJbXSwgc3RyaWRlczogbnVtYmVyW10sXG4gICAgICBkaWxhdGlvbnM6IG51bWJlcltdLCBwYWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGlmICghaXNHbG9iYWxPcGVyYXRvciAmJiBrZXJuZWxTaGFwZS5sZW5ndGggIT09IGlucHV0RGltcy5sZW5ndGggLSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBvZiBzcGVjaWZpZWQga2VybmVsIHNoYXBlcyBzaG91bGQgYmUgMiBsZXNzIHRoYW4gbGVuZ3RoIG9mIGlucHV0IGRpbWVuc2lvbnMnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNHbG9iYWxPcGVyYXRvcikge1xuICAgICAgLy8gYWRqdXN0IGtlcm5lbCBzaGFwZSB0byBjb3ZlciB0aGUgaW5wdXQgZGltc1xuICAgICAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgaW5wdXREaW1zLmxlbmd0aCAtIDI7IGRpbSsrKSB7XG4gICAgICAgIGlmIChkaW0gPj0ga2VybmVsU2hhcGUubGVuZ3RoKSB7XG4gICAgICAgICAga2VybmVsU2hhcGUucHVzaChpbnB1dERpbXNbZGltICsgMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtlcm5lbFNoYXBlW2RpbV0gPSBpbnB1dERpbXNbZGltICsgMl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGp1c3Qgc3RyaWRlcyBsZW5ndGggdG8gbWF0Y2gga2VybmVsIHNoYXBlIGxlbmd0aFxuICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IGtlcm5lbFNoYXBlLmxlbmd0aDsgZGltKyspIHtcbiAgICAgIGlmIChkaW0gPCBzdHJpZGVzLmxlbmd0aCkge1xuICAgICAgICBpZiAoc3RyaWRlc1tkaW1dIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaWRlcyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyaWRlcy5wdXNoKDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkanVzdCBkaWxhdGlvbiB2YWx1ZVxuICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IGtlcm5lbFNoYXBlLmxlbmd0aDsgZGltKyspIHtcbiAgICAgIGlmIChkaW0gPCBkaWxhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChkaWxhdGlvbnNbZGltXSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RpbGF0aW9ucyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlsYXRpb25zLnB1c2goMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRqdXN0IHBhZHMgbGVuZ3RoIHRvIG1hdGNoIDIgKiBrZXJuZWwgc2hhcGUgbGVuZ3RoXG4gICAgZm9yIChsZXQgZGltID0gMDsgZGltIDwga2VybmVsU2hhcGUubGVuZ3RoICogMjsgZGltKyspIHtcbiAgICAgIGlmIChkaW0gPCBwYWRzLmxlbmd0aCkge1xuICAgICAgICBpZiAocGFkc1tkaW1dIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFkIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWRzLnB1c2goMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2FuaXR5IGNoZWNrcyBmb3IgdmFsdWVzIGluIGtlcm5lbCBzaGFwZXMgYW5kIHBhZHNcbiAgICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBrZXJuZWxTaGFwZS5sZW5ndGg7IGRpbSsrKSB7XG4gICAgICBpZiAoa2VybmVsU2hhcGVbZGltXSA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigna2VybmVsIHNoYXBlcyBuZWVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYWRzW2RpbV0gPj0ga2VybmVsU2hhcGVbZGltXSB8fCBwYWRzW2RpbSArIGtlcm5lbFNoYXBlLmxlbmd0aF0gPj0ga2VybmVsU2hhcGVbZGltXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhZHMgc2hvdWxkIGJlIHNtYWxsZXIgdGhhbiBrZXJuZWwnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBhZGp1c3QgcGFkIHZhbHVlcyBiYXNlZCBvbiAnYXV0b1BhZCcgYXR0cmlidXRlXG4gIHN0YXRpYyBhZGp1c3RQYWRzQmFzZWRPbkF1dG9QYWQoXG4gICAgICBpbnB1dERpbXM6IHJlYWRvbmx5IG51bWJlcltdLCBzdHJpZGVzOiByZWFkb25seSBudW1iZXJbXSwgZGlsYXRpb25zOiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgIGtlcm5lbFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgcGFkczogbnVtYmVyW10sIGlzQ2hhbm5lbExhc3Q6IGJvb2xlYW4sIGF1dG9QYWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWF1dG9QYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFkcy5sZW5ndGggIT09IDIgKiAoaW5wdXREaW1zLmxlbmd0aCAtIDIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBvZiBwYWRzIHNob3VsZCBiZSB0d2ljZSB0aGUgbGVuZ3RoIG9mIGRhdGEgZGltZW5zaW9ucycpO1xuICAgIH1cblxuICAgIGlmIChzdHJpZGVzLmxlbmd0aCAhPT0gKGlucHV0RGltcy5sZW5ndGggLSAyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggb2Ygc3RyaWRlcyBzaG91bGQgYmUgdGhlIGxlbmd0aCBvZiBkYXRhIGRpbWVuc2lvbnMnKTtcbiAgICB9XG5cbiAgICBpZiAoa2VybmVsU2hhcGUubGVuZ3RoICE9PSAoaW5wdXREaW1zLmxlbmd0aCAtIDIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBvZiBrZXJuZWwgc2hhcGVzIHNob3VsZCBiZSB0aGUgbGVuZ3RoIG9mIGRhdGEgZGltZW5zaW9ucycpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IGlucHV0RGltcy5sZW5ndGggLSAyOyBkaW0rKykge1xuICAgICAgUG9vbENvbnZVdGlsLmFkanVzdFBhZEFuZFJldHVyblNoYXBlKFxuICAgICAgICAgIGlucHV0RGltc1tkaW0gKyAoaXNDaGFubmVsTGFzdCA/IDEgOiAyKV0sIHN0cmlkZXNbZGltXSwgZGlsYXRpb25zW2RpbV0sIGtlcm5lbFNoYXBlW2RpbV0sIHBhZHMsIGRpbSxcbiAgICAgICAgICBkaW0gKyBpbnB1dERpbXMubGVuZ3RoIC0gMiwgYXV0b1BhZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgb3V0cHV0IHNoYXBlIGZvciBQb29sIG9wcyBiYXNlZCBvbiBpbnB1dCBhdHRyaWJ1dGVzLiAoU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgUG9vbCBvcHMpXG4gICAqIEBwYXJhbSBpc0dsb2JhbE9wZXJhdG9yIElmIHRydWUsIHBlcmZvcm0gZ2xvYmFsIHBvb2xpbmcuXG4gICAqIEBwYXJhbSBpbnB1dERpbXMgVGhlIGlucHV0IHRlbnNvciBkaW1lbnNpb24uIChpbnB1dHNbMF0uZGltcylcbiAgICogQHBhcmFtIHN0cmlkZXMgU3RyaWRlIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIGRpbGF0aW9ucyBEaWxhdGlvbiBhbG9uZyBlYWNoIGF4aXMuXG4gICAqIEBwYXJhbSBrZXJuZWxTaGFwZSBUaGUgc2l6ZSBvZiB0aGUga2VybmVsIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIHBhZHMgUGFkZGluZyBmb3IgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIGF1dG9QYWQgREVQUkVDQVRFRCBhdHRyaWJ1dGUgc3VwcG9ydGVkIGZvciBsZWdhY3kgbW9kZWxzLiBTcGVjaWZpZXMgaG93IHRvIGltcGxpY2l0bHkgY2FsY3VsYXRlIHBhZHMgaW4gZWFjaFxuICAgKiAgICAgZGltZW5zaW9uLiBDYW4gdGFrZSB2YWx1ZXMgTk9UU0VULCBTQU1FX1VQUEVSLCBTQU1FX0xPV0VSLCBvciBWQUxJRC5cbiAgICovXG4gIHN0YXRpYyBjb21wdXRlUG9vbE91dHB1dFNoYXBlKFxuICAgICAgaXNHbG9iYWxPcGVyYXRvcjogYm9vbGVhbiwgaW5wdXREaW1zOiByZWFkb25seSBudW1iZXJbXSwgc3RyaWRlczogbnVtYmVyW10sIGRpbGF0aW9uczogbnVtYmVyW10sXG4gICAgICBrZXJuZWxTaGFwZTogbnVtYmVyW10sIHBhZHM6IG51bWJlcltdLCBhdXRvUGFkPzogc3RyaW5nKTogbnVtYmVyW10ge1xuICAgIGlmIChpbnB1dERpbXMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgc2hhcGUgbXVzdCBiZSBvZiBzaXplIGdyZWF0ZXIgdGhhbiAwJyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGJhdGNoIHNpemUgYW5kIG51bWJlciBvZiBjaGFubmVscyBvZiBvdXRwdXRcbiAgICBjb25zdCBvdXRwdXREaW1zID0gW2lucHV0RGltc1swXSwgaW5wdXREaW1zWzFdXTtcblxuICAgIFBvb2xDb252VXRpbC5jb21wdXRlU2hhcGVIZWxwZXIoXG4gICAgICAgIGlzR2xvYmFsT3BlcmF0b3IsIGlucHV0RGltcywgb3V0cHV0RGltcywgc3RyaWRlcywgZGlsYXRpb25zLCBrZXJuZWxTaGFwZSwgcGFkcywgYXV0b1BhZCk7XG4gICAgcmV0dXJuIG91dHB1dERpbXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBvdXRwdXQgc2hhcGUgZm9yIENvbnYgb3AgYmFzZWQgb24gaW5wdXQgYXR0cmlidXRlcy4gKFNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIENvbnYgb3ApXG4gICAqIEBwYXJhbSBpbnB1dERpbXMgVGhlIGlucHV0IHRlbnNvciBkaW1lbnNpb24uIChpbnB1dHNbMF0uZGltcylcbiAgICogQHBhcmFtIGZpbHRlckRpbXMgVGhlIGZpbHRlciB0ZW5zb3IgZGltZW5zaW9uLiAoaW5wdXRzWzFdLmRpbXMpXG4gICAqIEBwYXJhbSBzdHJpZGVzIFN0cmlkZSBhbG9uZyBlYWNoIGF4aXMuXG4gICAqIEBwYXJhbSBrZXJuZWxTaGFwZSBUaGUgc2l6ZSBvZiB0aGUga2VybmVsIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIHBhZHMgUGFkZGluZyBmb3IgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGFsb25nIGVhY2ggYXhpcy5cbiAgICogQHBhcmFtIGF1dG9QYWQgREVQUkVDQVRFRCBhdHRyaWJ1dGUgc3VwcG9ydGVkIGZvciBsZWdhY3kgbW9kZWxzLiBTcGVjaWZpZXMgaG93IHRvIGltcGxpY2l0bHkgY2FsY3VsYXRlIHBhZHMgaW4gZWFjaFxuICAgKiAgICAgZGltZW5zaW9uLiBDYW4gdGFrZSB2YWx1ZXMgTk9UU0VULCBTQU1FX1VQUEVSLCBTQU1FX0xPV0VSLCBvciBWQUxJRC5cbiAgICovXG4gIHN0YXRpYyBjb21wdXRlQ29udk91dHB1dFNoYXBlKFxuICAgICAgaW5wdXREaW1zOiByZWFkb25seSBudW1iZXJbXSwgZmlsdGVyRGltczogcmVhZG9ubHkgbnVtYmVyW10sIHN0cmlkZXM6IG51bWJlcltdLCBkaWxhdGlvbnM6IG51bWJlcltdLFxuICAgICAga2VybmVsU2hhcGU6IG51bWJlcltdLCBwYWRzOiBudW1iZXJbXSwgYXV0b1BhZD86IHN0cmluZyk6IG51bWJlcltdIHtcbiAgICBpZiAoaW5wdXREaW1zLmxlbmd0aCA8PSAwIHx8IGZpbHRlckRpbXMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnB1dCB0ZW5zb3IgZGltcyBvciBpbnZhbGlkIGZpbHRlciB0ZW5zb3IgZGltcycpO1xuICAgIH1cblxuICAgIC8vIEFkZCBiYXRjaCBzaXplIGFuZCBudW1iZXIgb2YgY2hhbm5lbHMgb2Ygb3V0cHV0XG4gICAgY29uc3Qgb3V0cHV0RGltcyA9IFtpbnB1dERpbXNbMF0sIGZpbHRlckRpbXNbMF1dO1xuXG4gICAgUG9vbENvbnZVdGlsLmNvbXB1dGVTaGFwZUhlbHBlcihmYWxzZSwgaW5wdXREaW1zLCBvdXRwdXREaW1zLCBzdHJpZGVzLCBkaWxhdGlvbnMsIGtlcm5lbFNoYXBlLCBwYWRzLCBhdXRvUGFkKTtcbiAgICByZXR1cm4gb3V0cHV0RGltcztcbiAgfVxuXG4gIC8vIHdpbGwgY29tcHV0ZSBvdXRwdXQgc2hhcGVzIGZvciBkYXRhIGRpbWVuc2lvbnMgT05MWSAoaS5lLikgbm8gYmF0Y2ggc2l6ZSBhbmQgY2hhbm5lbHNcbiAgLy8gY2FsbGVkIGJ5IGNvbXB1dGVQb29sT3V0cHV0U2hhcGUoKSBhbmQgY29tcHV0ZUNvbnZPdXRwdXRTaGFwZSgpXG4gIC8vIGFkanVzdCBwYWRzIGJhc2VkIG9uICdhdXRvUGFkJyBhdHRyaWJ1dGUgcHJpb3IgdG8gc2hhcGUgY29tcHV0YXRpb25cbiAgcHJpdmF0ZSBzdGF0aWMgY29tcHV0ZVNoYXBlSGVscGVyKFxuICAgICAgaXNHbG9iYWxPcGVyYXRvcjogYm9vbGVhbiwgaW5wdXREaW1zOiByZWFkb25seSBudW1iZXJbXSwgb3V0cHV0RGltczogbnVtYmVyW10sIHN0cmlkZXM6IHJlYWRvbmx5IG51bWJlcltdLFxuICAgICAgZGlsYXRpb25zOiByZWFkb25seSBudW1iZXJbXSwga2VybmVsU2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBwYWRzOiBudW1iZXJbXSwgYXV0b1BhZD86IHN0cmluZykge1xuICAgIGlmIChpc0dsb2JhbE9wZXJhdG9yKSB7XG4gICAgICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBpbnB1dERpbXMubGVuZ3RoIC0gMjsgZGltKyspIHtcbiAgICAgICAgb3V0cHV0RGltcy5wdXNoKDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBpbnB1dERpbXMubGVuZ3RoIC0gMjsgZGltKyspIHtcbiAgICAgICAgb3V0cHV0RGltcy5wdXNoKFBvb2xDb252VXRpbC5hZGp1c3RQYWRBbmRSZXR1cm5TaGFwZShcbiAgICAgICAgICAgIGlucHV0RGltc1tkaW0gKyAyXSwgc3RyaWRlc1tkaW1dLCBkaWxhdGlvbnNbZGltXSwga2VybmVsU2hhcGVbZGltXSwgcGFkcywgZGltLCBkaW0gKyBpbnB1dERpbXMubGVuZ3RoIC0gMixcbiAgICAgICAgICAgIGF1dG9QYWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBoZWxwZXIgZm9yIGNvbXB1dGVTaGFwZUhlbHBlcigpIGFuZCBhZGp1c3RQYWRzQmFzZWRPbkF1dG9QYWQoKVxuICAvLyBhZGp1c3RzIHBhZCB2YWx1ZSBmb3IgZ2l2ZW4gJ2F1dG9QYWQnIHN0cmluZyBhbmQgY29tcHV0ZXMgb3V0cHV0IHNoYXBlIGFsb25nIGEgcGFydGljdWxhciBkaW1lbnNpb25cbiAgcHJpdmF0ZSBzdGF0aWMgYWRqdXN0UGFkQW5kUmV0dXJuU2hhcGUoXG4gICAgICBpblNpemU6IG51bWJlciwgc3RyaWRlOiBudW1iZXIsIGRpbGF0aW9uOiBudW1iZXIsIGtlcm5lbDogbnVtYmVyLCBwYWRzOiBudW1iZXJbXSwgcGFkSGVhZEluZGV4OiBudW1iZXIsXG4gICAgICBwYWRUYWlsSW5kZXg6IG51bWJlciwgYXV0b1BhZD86IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgZGtlcm5lbCA9IGRpbGF0aW9uICogKGtlcm5lbCAtIDEpICsgMTtcbiAgICBpZiAoYXV0b1BhZCAmJiBhdXRvUGFkICE9PSAnTk9UU0VUJykge1xuICAgICAgc3dpdGNoIChhdXRvUGFkKSB7XG4gICAgICAgIGNhc2UgJ1ZBTElEJzpcbiAgICAgICAgICBwYWRzW3BhZEhlYWRJbmRleF0gPSAwO1xuICAgICAgICAgIHBhZHNbcGFkVGFpbEluZGV4XSA9IDA7XG4gICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKChpblNpemUgLSBka2VybmVsKSAvIHN0cmlkZSkgKyAxKTtcbiAgICAgICAgY2FzZSAnU0FNRV9MT1dFUic6XG4gICAgICAgIGNhc2UgJ1NBTUVfVVBQRVInOlxuICAgICAgICAgIGlmIChkaWxhdGlvbiAhPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWxhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciBTQU1FX1VQUEVSIG9yIFNBTUVfTE9XRVInKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGVnYWN5VGFyZ2V0U2l6ZSA9IChpblNpemUgKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTtcbiAgICAgICAgICAgIGNvbnN0IHBhZE5lZWRlZCA9IChsZWdhY3lUYXJnZXRTaXplIC0gMSkgKiBzdHJpZGUgKyBrZXJuZWwgLSBpblNpemU7XG4gICAgICAgICAgICBwYWRzW3BhZEhlYWRJbmRleF0gPVxuICAgICAgICAgICAgICAgIChhdXRvUGFkID09PSAnU0FNRV9MT1dFUicpID8gTWF0aC5mbG9vcigocGFkTmVlZGVkICsgMSkgLyAyKSA6IE1hdGguZmxvb3IocGFkTmVlZGVkIC8gMik7XG4gICAgICAgICAgICBwYWRzW3BhZFRhaWxJbmRleF0gPSBwYWROZWVkZWQgLSBwYWRzW3BhZEhlYWRJbmRleF07XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoKGluU2l6ZSArIHBhZE5lZWRlZCAtIGtlcm5lbCkgLyBzdHJpZGUpICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgQXV0b1BhZCB0eXBlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKCgoaW5TaXplICsgcGFkc1twYWRIZWFkSW5kZXhdICsgcGFkc1twYWRUYWlsSW5kZXhdIC0gZGtlcm5lbCkgLyBzdHJpZGUpICsgMSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZW1tVXRpbCB7XG4gIC8vIHdpbGwgbWFrZSBzdXJlIGlucHV0IHNoYXBlcyBhcmUgY29tcGF0aWJsZSBmb3IgdGhpcyBvcFxuICAvLyBhbmQgcmV0dXJuIGJhY2sgdGhlIHNoYXBlIG9mIHRoZSBvdXRwdXQgaW4gdGhlIGZvcm0gb2YgYSB0dXBsZVxuICAvLyB3aWxsIHRocm93IGV4Y2VwdGlvbiBpZiB0aGUgaW5wdXQgc2hhcGVzIGFyZSBub3QgY29tcGF0aWJsZVxuICBzdGF0aWMgZ2V0U2hhcGVPZkdlbW1SZXN1bHQoXG4gICAgICBsZWZ0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCB0cmFuc0xlZnQ6IGJvb2xlYW4sIHJpZ2h0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCB0cmFuc1JpZ2h0OiBib29sZWFuLFxuICAgICAgYmlhc1NoYXBlPzogcmVhZG9ubHkgbnVtYmVyW10pOiByZWFkb25seSBudW1iZXJbXSB7XG4gICAgaWYgKGxlZnRTaGFwZS5sZW5ndGggIT09IDIgfHwgcmlnaHRTaGFwZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2hhcGUgbmVlZCB0byBiZSBvZiBzaXplIDInKTtcbiAgICB9XG5cbiAgICBsZXQgTTogbnVtYmVyO1xuICAgIGxldCBLOiBudW1iZXI7XG4gICAgbGV0IE46IG51bWJlcjtcblxuICAgIGlmICh0cmFuc0xlZnQpIHtcbiAgICAgIE0gPSBsZWZ0U2hhcGVbMV07XG4gICAgICBLID0gbGVmdFNoYXBlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBNID0gbGVmdFNoYXBlWzBdO1xuICAgICAgSyA9IGxlZnRTaGFwZVsxXTtcbiAgICB9XG5cbiAgICBsZXQga0RpbSA9IC0xO1xuXG4gICAgaWYgKHRyYW5zUmlnaHQpIHtcbiAgICAgIE4gPSByaWdodFNoYXBlWzBdO1xuICAgICAga0RpbSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIE4gPSByaWdodFNoYXBlWzFdO1xuICAgICAga0RpbSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHJpZ2h0U2hhcGVba0RpbV0gIT09IEspIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGltZW5zaW9uIG1pc21hdGNoJyk7XG4gICAgfVxuXG4gICAgaWYgKE0gPD0gMCB8fCBOIDw9IDAgfHwgSyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2hhcGUgc3BlY2lmaWVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGJpYXNTaGFwZSAmJiAhQnJvYWRjYXN0VXRpbC5pc1ZhbGlkQnJvYWRjYXN0KGJpYXNTaGFwZSwgW00sIE5dKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZW1tOiBpbnZhbGlkIGJpYXMgc2hhcGUgZm9yIGJyb2FkY2FzdCcpO1xuICAgIH1cblxuICAgIHJldHVybiBbTSwgTiwgS107XG4gIH1cbn1cblxuXG5leHBvcnQgY29uc3QgTUlOX0NMSVAgPSAtMy40MDI4MjM0NjYzODUyODg2ZSszODtcbmV4cG9ydCBjb25zdCBNQVhfQ0xJUCA9IDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzg7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7UHJvZ3JhbVVuaWZvcm0sIFByb2dyYW1Vbmlmb3JtVmFyaWFibGVJbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogY29uc3RhbnQgdmFsdWUgZm9yIGEgd29ya2dyb3VwIHNpemUuXG4gKlxuICogV2UgZGVmaW5pdGVseSBjYW4gZG8gZnVydGhlciBvcHRpbWl6YXRpb24gaW4gZnV0dXJlLCBidXQgZm9yIG5vdyB3ZSB1c2UgNjQuXG4gKlxuICogcnVsZSBvZiB0aHVtYjogVXNlIFthIHdvcmtncm91cCBzaXplIG9mXSA2NCB1bmxlc3MgeW91IGtub3cgd2hhdCBHUFUgeW91IGFyZSB0YXJnZXRpbmcgb3IgdGhhdCB5b3VyIHdvcmtsb2FkXG4gKiAgICAgICAgICAgICAgICBuZWVkcyBzb21ldGhpbmcgZGlmZmVyZW50LlxuICpcbiAqIGZyb206IGh0dHBzOi8vc3VybWEuZGV2L3RoaW5ncy93ZWJncHUvXG4gKiovXG5leHBvcnQgY29uc3QgV09SS0dST1VQX1NJWkUgPSA2NDtcblxuaW50ZXJmYWNlIEluZGljZXNIZWxwZXJUeXBlcyB7XG4gIC8qKlxuICAgKiBXR1NMIHR5cGUgb2YgaW5kaWNlcyBleHByZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBpbmRpY2VzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdHU0wgdHlwZSBvZiBhIHZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIHR5cGUgb2Ygc3RvcmFnZSB0eXBlIHJlcHJlc2VudGluZyBhIHZhbHVlXG4gICAqXG4gICAqIFRoaXMgaXMgdXN1YWxseSB0aGUgc2FtZSB0byBgdmFsdWVgLCBidXQgZm9yIHNvbWUgdHlwZSAoZWcuIGJvb2wpLCB3ZSBuZWVkIHRvIHVzZSBgdTMyYCBhcyBzdG9yYWdlIHR5cGUgZm9yXG4gICAqIHZhbHVlIHR5cGUgYHZlYzQ8Ym9vbD5gXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRlbnNvciB0eXBlIGFzIHJlcHJlc2VudGVkIGluIFRlbnNvclZpZXdcbiAgICovXG4gIHJlYWRvbmx5IHRlbnNvcjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgaGVscGVyIGNsYXNzIGZvciBnZW5lcmF0aW5nIFdHU0wgY29kZSBmb3IgbWFuaXB1bGF0aW5nIGluZGljZXMgYW5kIGRhdGEgZm9yIGEgc2hhZGVyJ3MgaW5wdXQgb3Igb3V0cHV0LlxuICpcbiAqIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gb2ZmZXIgYSB1bmlmaWVkIHdheSB0byBnZW5lcmF0ZSBXR1NMIGNvZGUgZm9yIG1hbmlwdWxhdGluZyBpbmRpY2VzIGFuZCBkYXRhIGZvciBhIHNoYWRlcidzXG4gKiBpbnB1dCBvciBvdXRwdXQuXG4gKlxuICogVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgdGVybWlub2xvZ2llcyB1c2VkIGluIHRoaXMgY2xhc3M6XG4gKiAtIGBvZmZzZXRgOiBhIHVpbnQzMiB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBvZiBhbiBlbGVtZW50IGluIHRoZSBkYXRhIGJ1ZmZlci5cbiAqIC0gYGluZGljZXNgOiBhbiBhYnN0cmFjdGlvbiBvZiBhIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5J3MgaW5kaWNlcyByZXByZXNlbnRpbmcgdGhlIGRhdGEncyBpbmRleCBvbiBlYWNoIGRpbWVuc2lvbi5cbiAqIC0gYHZhbHVlYDogYSB2YWx1ZSBvZiBhIGRhdGEgZWxlbWVudC5cbiAqXG4gKiBVc2VycyBhcmUgZXhwZWN0ZWQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZm9yIGVhY2ggc2hhZGVyJ3MgaW5wdXQgb3Igb3V0cHV0LCBhbmQgdXNlIHRoZSBpbnN0YW5jZSB0b1xuICogZ2VuZXJhdGUgV0dTTCBjb2RlIGZvciBtYW5pcHVsYXRpbmcgaW5kaWNlcyBhbmQgZGF0YS4gVGhlIGZvbGxvd2luZyAyIGV4cG9ydGVkIGZ1bmN0aW9ucyBhcmUgZm9yIHVzZXJzIHRvIGNhbGwgdG9cbiAqIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBpbmRpY2VzIGhlbHBlcjpcbiAqIC0gYGlucHV0VmFyaWFibGUoKWA6IGNyZWF0ZSBhbiBpbmRpY2VzIGhlbHBlciBpbnN0YW5jZSBmb3IgYW4gaW5wdXQuXG4gKiAtIGBvdXRwdXRWYXJpYWJsZSgpYDogY3JlYXRlIGFuIGluZGljZXMgaGVscGVyIGluc3RhbmNlIGZvciBhbiBvdXRwdXQuXG4gKiAtIGBpbnRlcm5hbFZhcmlhYmxlKClgOiBjcmVhdGUgYW4gaW5kaWNlcyBoZWxwZXIgaW5zdGFuY2UgZm9yIGFuIGludGVybmFsIHZhcmlhYmxlLlxuICpcbiAqIEFuIGluZGljZXMgaGVscGVyIGluc3RhbmNlIGNvbnRhaW5zIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczpcbiAqIC0gYWNjZXNzIHJlYWRvbmx5IGJhc2ljIGluZm9ybWF0aW9uLCBpbmNsdWRpbmc6IGBuYW1lYCh0aGUgbmFtZSBvZiB0aGUgaW5wdXQgb3Igb3V0cHV0KSwgYHVzYWdlYCh3aGV0aGVyIGl0J3MgYW5cbiAqIGlucHV0LCBhbiBvdXRwdXQgb3IgYW4gaW50ZXJuYWwgdmFyaWFibGUpIGFuZCBgc2hhcGVgKHRoZSBwYXNzZWQgaW4gc2hhcGUpLlxuICogLSBgdHlwZWA6IGFjY2VzcyByZWFkb25seSB0eXBlIGluZm9ybWF0aW9uLCBpbmNsdWRpbmc6IGBpbmRpY2VzYCh0aGUgdHlwZSBvZiBpbmRpY2VzKSwgYHZhbHVlYCh0aGUgdHlwZSBvZiB2YWx1ZSBhdFxuICogcnVudGltZSksIGBzdG9yYWdlYCh0aGUgdHlwZSBvZiB2YWx1ZSBhdCBzdG9yYWdlKSBhbmQgYHRlbnNvcmAodGhlIHRlbnNvciB0eXBlIGFzIHJlcHJlc2VudGVkIGluIFRlbnNvclZpZXcpLlxuICogLSBnZW5lcmF0ZSBXR1NMIGNvZGUgZm9yIGdldHRpbmcgaW5kaWNlcyBmcm9tIG9mZnNldC4gVXNlIGBvZmZzZXRUb0luZGljZXMoKWAgZm9yIFdHU0wgY29kZSBzbmlwcGV0IHRvIGNhbGN1bGF0ZVxuICogaW5kaWNlcyBmcm9tIG9mZnNldCwgYW5kIHVzZSBgaW5kaWNlc1RvT2Zmc2V0KClgIGZvciBXR1NMIGNvZGUgc25pcHBldCB0byBjYWxjdWxhdGUgb2Zmc2V0IGZyb20gaW5kaWNlcy5cbiAqIC0gdG8gbWFuaXB1bGF0ZSBhbiBpbnN0YW5jZSBvZiBpbmRpY2VzLCB1c2UgYHNldEluZGljZXMoKWAgYW5kIGBnZXRJbmRpY2VzKClgIHRvIHNldCBhbmQgZ2V0IHRoZSBpbmRpY2VzIG9uIGFuXG4gKiBpbmRpY2VzIHZhcmlhYmxlLlxuICogLSB0byBtYW5pcHVsYXRlIGRhdGEsIHVzZSBgc2V0KClgL2BnZXQoKWAgdG8gYWNjZXNzIGRhdGEgYXQgdGhlIGdpdmVuIGluZGljZXMgZnJvbSBwYXJhbWV0ZXIgbGlzdCwgdXNlXG4gKiBgc2V0QnlJbmRpY2VzKClgL2BnZXRCeUluZGljZXMoKWAgdG8gYWNjZXNzIGRhdGEgYXQgdGhlIGdpdmVuIGluZGljZXMgZnJvbSBhbiBpbmRpY2VzIHZhcmlhYmxlLCBhbmQgdXNlXG4gKiBgc2V0QnlPZmZzZXQoKWAvYGdldEJ5T2Zmc2V0KClgIHRvIGFjY2VzcyBkYXRhIGF0IHRoZSBnaXZlbiBvZmZzZXQuXG4gKiAtIGBpbXBsYDogZ2V0IFdHU0wgY29kZSBvZiBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHV0aWwgZnVuY3Rpb25zIG1lbnRpb25lZCBhYm92ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRpY2VzSGVscGVyIHtcbiAgLyoqXG4gICAqIGdldCBXR1NMIGNvZGUgb2YgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24gZm9yIHRoZSB1dGlsIGZ1bmN0aW9ucy5cbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGltcGw6ICgpID0+IHN0cmluZztcblxuICAvKipcbiAgICogZ2V0IHR5cGUgaW5mb1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogSW5kaWNlc0hlbHBlclR5cGVzO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgb2YgYSBleHByZXNzaW9uIGZvciBnZXR0aW5nIGluZGljZXMgZnJvbSBvZmZzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB2YXJPZmZzZXQgLSBhIHUzMiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgb2Zmc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBgdHlwZS5pbmRpY2VzYCBleHByZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBvZmZzZXRUb0luZGljZXM6ICh2YXJPZmZzZXQ6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgb2YgYW4gYHUzMmAgZXhwcmVzc2lvbiBmb3IgZ2V0dGluZyBvZmZzZXQgZnJvbSBpbmRpY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFySW5kaWNlcyAtIGEgYHR5cGUuaW5kaWNlc2AgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGluZGljZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGB1MzJgIGV4cHJlc3Npb25cbiAgICovXG4gIHJlYWRvbmx5IGluZGljZXNUb09mZnNldDogKHZhckluZGljZXM6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgb2YgYW4gYHUzMmAgZXhwcmVzc2lvbiBmb3IgZ2V0dGluZyBvcmlnaW5hbCBvZmZzZXQgZnJvbSBicm9hZGNhc3RlZCBpbmRpY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFySW5kaWNlcyAtIGEgYHR5cGUuaW5kaWNlc2AgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIG91dHB1dCBpbmRpY2VzLlxuICAgKiBAcGFyYW0gb3V0cHV0IC0gb3V0cHV0IEluZGljZXNIZWxwZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGB1MzJgIGV4cHJlc3Npb25cbiAgICovXG4gIHJlYWRvbmx5IGJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0OiAodmFySW5kaWNlczogc3RyaW5nLCBvdXRwdXQ6IEluZGljZXNIZWxwZXIpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV0dTTCBjb2RlIG9mIGdlbmVyYXRpbmcgYW4gaW5kaWNlcyBsaXRlcmFsXG4gICAqXG4gICAqIEBwYXJhbSBpbml0IC0gaW5pdGlhbCB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGluZGljZXM6ICguLi5pbml0OiBSZWFkb25seUFycmF5PG51bWJlcnxzdHJpbmc+KSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdHU0wgY29kZSBvZiBhIHN0YXRlbWVudCBmb3Igc2V0dGluZyBpbmRpY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFySW5kaWNlcyAtIGEgdmFyaWFibGUgbmFtZSBmb3IgdGhlIGluZGljZXMuXG4gICAqIEBwYXJhbSBpZHggLSB0aGUgaW5kZXggb2YgdGhlIGluZGljZXMgdG8gc2V0LiBjYW4gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgKFdHU0wgYHUzMmAgZXhwcmVzc2lvbikuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBzZXQuIGNhbiBiZSBhIG51bWJlciBvciBhIHN0cmluZyAoV0dTTCBgdTMyYCBleHByZXNzaW9uKS5cbiAgICpcbiAgICogQHJldHVybnMgYSBXR1NMIHN0YXRlbWVudFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kaWNlc1NldDogKHZhckluZGljZXM6IHN0cmluZywgaWR4OiBudW1iZXJ8c3RyaW5nLCB2YWx1ZTogbnVtYmVyfHN0cmluZykgPT4gdm9pZDtcblxuICAvKipcbiAgICogV0dTTCBjb2RlIG9mIGFuIGB1MzJgIGV4cHJlc3Npb24gZm9yIGdldHRpbmcgaW5kaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhckluZGljZXMgLSBhIHZhcmlhYmxlIG5hbWUgZm9yIHRoZSBpbmRpY2VzLlxuICAgKiBAcGFyYW0gaWR4IC0gdGhlIGluZGV4IG9mIHRoZSBpbmRpY2VzIHRvIGdldC4gY2FuIGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nIChXR1NMIGB1MzJgIGV4cHJlc3Npb24pLlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBgdTMyYCBleHByZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBpbmRpY2VzR2V0OiAodmFySW5kaWNlczogc3RyaW5nLCBpZHg6IG51bWJlcnxzdHJpbmcpID0+IHN0cmluZztcblxuICAvKipcbiAgICogV0dTTCBjb2RlIGZvciBhIHN0YXRlbWVudCBmb3Igc2V0dGluZyBkYXRhIGF0IHRoZSBnaXZlbiBpbmRpY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaW5kaWNlc0FuZFZhbHVlIC0gYW4gYXJyYXkgb2YgbnVtYmVycyBvciBzdHJpbmdzIChXR1NMIGB1MzJgIGV4cHJlc3Npb24pIHJlcHJlc2VudGluZyB0aGUgaW5kaWNlcywgZm9sbG93ZWRcbiAgICogICAgIGJ5IHRoZSB2YWx1ZSB0byBzZXQuIFRoaXMgYXJyYXkgc2hvdWxkIGhhdmUgZXhhY3RseSBgc2hhcGUubGVuZ3RoICsgMWAgZWxlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBzZXQ6ICguLi5pbmRpY2VzQW5kVmFsdWU6IFJlYWRvbmx5QXJyYXk8bnVtYmVyfHN0cmluZz4pID0+IHN0cmluZztcblxuICAvKipcbiAgICogV0dTTCBjb2RlIGZvciBhIHN0YXRlbWVudCBmb3Igc2V0dGluZyBkYXRhIGF0IHRoZSBnaXZlbiBpbmRpY2VzIHZhcmlhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFySW5kaWNlcyAtIGEgdmFyaWFibGUgbmFtZSBmb3IgdGhlIGluZGljZXMuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBzZXQuIHNob3VsZCBiZSBhIFdHU0wgZXhwcmVzc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IHNldEJ5SW5kaWNlczogKHZhckluZGljZXM6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgZm9yIGEgc3RhdGVtZW50IGZvciBzZXR0aW5nIGRhdGEgYXQgdGhlIGdpdmVuIG9mZnNldC5cbiAgICpcbiAgICogQHBhcmFtIG9mZnNldCAtIGEgbnVtYmVyIG9yIGEgc3RyaW5nIChXR1NMIGB1MzJgIGV4cHJlc3Npb24pIHJlcHJlc2VudGluZyB0aGUgb2Zmc2V0LlxuICAgKiBAcGFyYW0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gc2V0LiBzaG91bGQgYmUgYSBXR1NMIGV4cHJlc3Npb24uXG4gICAqL1xuICByZWFkb25seSBzZXRCeU9mZnNldDogKG9mZnNldDogbnVtYmVyfHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgZm9yIGFuIGV4cHJlc3Npb24gZm9yIGdldHRpbmcgZGF0YSBhdCB0aGUgZ2l2ZW4gaW5kaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIGluZGljZXMgLSBhbiBhcnJheSBvZiBudW1iZXJzIG9yIHN0cmluZ3MgKFdHU0wgYHUzMmAgZXhwcmVzc2lvbikgcmVwcmVzZW50aW5nIHRoZSBpbmRpY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0OiAoLi4uaW5kaWNlczogUmVhZG9ubHlBcnJheTxudW1iZXJ8c3RyaW5nPikgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXR1NMIGNvZGUgZm9yIGFuIGV4cHJlc3Npb24gZm9yIGdldHRpbmcgZGF0YSBhdCB0aGUgZ2l2ZW4gaW5kaWNlcyB2YXJpYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHZhckluZGljZXMgLSBhIHZhcmlhYmxlIG5hbWUgZm9yIHRoZSBpbmRpY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0QnlJbmRpY2VzOiAodmFySW5kaWNlczogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdHU0wgY29kZSBmb3IgYW4gZXhwcmVzc2lvbiBmb3IgZ2V0dGluZyBkYXRhIGF0IHRoZSBnaXZlbiBvZmZzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBvZmZzZXQgLSBhIG51bWJlciBvciBhIHN0cmluZyAoV0dTTCBgdTMyYCBleHByZXNzaW9uKSByZXByZXNlbnRpbmcgdGhlIG9mZnNldC5cbiAgICovXG4gIHJlYWRvbmx5IGdldEJ5T2Zmc2V0OiAob2Zmc2V0OiBudW1iZXJ8c3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIG5hbWUgb2YgdGhlIGRhdGEgdmFyaWFibGVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogd2hldGhlciB0aGUgaGVscGVyIGlzIGZvciBhbiBpbnB1dCwgYW4gb3V0cHV0IG9yIGFuIGludGVybmFsIHZhcmlhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNhZ2U6ICdpbnB1dCd8J291dHB1dCd8J2ludGVybmFsJztcblxuICAvKipcbiAgICogdGhlIHJhbmsgb2YgdGhlIGlucHV0IG9yIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHJhbms6IG51bWJlcjtcblxuICAvKipcbiAgICogYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YXJpYWJsZSBuYW1lIGZvciB0aGUgc2hhcGUgb2YgdGhlIGlucHV0IG9yIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHNoYXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFyaWFibGUgbmFtZSBmb3IgdGhlIHN0cmlkZXMgb2YgdGhlIGlucHV0IG9yIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHN0cmlkZXM6IHN0cmluZztcbn1cblxuY29uc3QgZ2V0V2dzbE1hcHBlZFR5cGUgPSAodHlwZTogbnVtYmVyLCBjb21wb25lbnRzOiAxfDJ8M3w0KTogc3RyaW5nfFtzdHJpbmcsIHN0cmluZ10gPT4ge1xuICBpZiAoY29tcG9uZW50cyA9PT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcigndmVjMyBoYXMgc2FtZSBhbGlnbm1lbnQgYXMgdmVjNCwgdXNlIHZlYzQgaW5zdGVhZCcpO1xuICB9XG5cbiAgLy8gcmV0dXJuIHR5cGUgaXMgWyBzdG9yYWdlIHR5cGUsIHJ1bnRpbWUgdHlwZSBdIG9yIGEgc2luZ2xlIHN0cmluZyBmb3IgYm90aFxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIERhdGFUeXBlLmZsb2F0MTY6XG4gICAgICByZXR1cm4gY29tcG9uZW50cyA+IDEgPyBgdmVjJHtjb21wb25lbnRzfTxmMTY+YCA6ICdmMTYnO1xuICAgIGNhc2UgRGF0YVR5cGUuZmxvYXQ6XG4gICAgICByZXR1cm4gY29tcG9uZW50cyA+IDEgPyBgdmVjJHtjb21wb25lbnRzfTxmMzI+YCA6ICdmMzInO1xuICAgIGNhc2UgRGF0YVR5cGUuaW50MzI6XG4gICAgICByZXR1cm4gY29tcG9uZW50cyA+IDEgPyBgdmVjJHtjb21wb25lbnRzfTxpMzI+YCA6ICdpMzInO1xuICAgIGNhc2UgRGF0YVR5cGUudWludDMyOlxuICAgICAgcmV0dXJuIGNvbXBvbmVudHMgPiAxID8gYHZlYyR7Y29tcG9uZW50c308dTMyPmAgOiAndTMyJztcbiAgICBjYXNlIERhdGFUeXBlLmludDY0OlxuICAgICAgaWYgKGNvbXBvbmVudHMgPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmVjWCBvZiB1aW50NjQgeWV0Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gWyd2ZWMyPHUzMj4nLCAnaTMyJ107XG4gICAgY2FzZSBEYXRhVHlwZS51aW50NjQ6XG4gICAgICBpZiAoY29tcG9uZW50cyA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2ZWNYIG9mIHVpbnQ2NCB5ZXQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbJ3ZlYzI8dTMyPicsICd1MzInXTtcbiAgICBjYXNlIERhdGFUeXBlLmJvb2w6XG4gICAgICBpZiAoY29tcG9uZW50cyAhPT0gNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jvb2wgbXVzdCBiZSB2ZWM0Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gWyd1MzInLCAndmVjNDxib29sPiddO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZSA9ICh0eXBlOiBEYXRhVHlwZSwgY29tcG9uZW50czogMXwyfDN8NCA9IDEpID0+IHtcbiAgY29uc3QgbWFwcGVkVHlwZSA9IGdldFdnc2xNYXBwZWRUeXBlKHR5cGUsIGNvbXBvbmVudHMpO1xuICByZXR1cm4gdHlwZW9mIG1hcHBlZFR5cGUgPT09ICdzdHJpbmcnID8gbWFwcGVkVHlwZSA6IG1hcHBlZFR5cGVbMF07XG59O1xuXG5leHBvcnQgY29uc3QgdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZSA9ICh0eXBlOiBEYXRhVHlwZSwgY29tcG9uZW50czogMXwyfDN8NCA9IDEpID0+IHtcbiAgY29uc3QgbWFwcGVkVHlwZSA9IGdldFdnc2xNYXBwZWRUeXBlKHR5cGUsIGNvbXBvbmVudHMpO1xuICByZXR1cm4gdHlwZW9mIG1hcHBlZFR5cGUgPT09ICdzdHJpbmcnID8gbWFwcGVkVHlwZSA6IG1hcHBlZFR5cGVbMV07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMgPSAoLi4uZGltczogUmVhZG9ubHlBcnJheTxyZWFkb25seSBudW1iZXJbXT4pOiBQcm9ncmFtVW5pZm9ybVtdID0+IHtcbiAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW107XG4gIGRpbXMuZm9yRWFjaChkaW0gPT4ge1xuICAgIGlmIChkaW0ubGVuZ3RoICE9PSAwKSB7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaChcbiAgICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBkaW19LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoZGltKX0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwcm9ncmFtVW5pZm9ybXM7XG59O1xuXG4vKipcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGdldCBtYXhpbXVtIHZlY3RvciBzaXplIGZvciBzcGVjaWZpZWQgZGF0YSBsZW5ndGhcbiAqIEBwYXJhbSBzaXplXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYXhDb21wb25lbnRzID0gKHNpemU6IG51bWJlcikgPT4ge1xuICAvLyB3ZSBjYW5ub3QgdXNlIHZlYzMgdHlwZSBzaW5jZSBpdCBoYXMgYWxpZ25tZW50IG9mIDE2IGJ5dGVzXG4gIGlmIChzaXplICUgNCA9PT0gMCkge1xuICAgIHJldHVybiA0O1xuICB9IGVsc2UgaWYgKHNpemUgJSAyID09PSAwKSB7XG4gICAgcmV0dXJuIDI7XG4gIH1cblxuICByZXR1cm4gMTtcbn07XG5cbi8qKlxuICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB2YXJpYWJsZSBhcyBhIHNjYWxhciBvciB2ZWN0b3IuIGUuZy4gZjMyKDApIG9yIHZlYzRmKDAsMCwwLDApXG4gKiBAcGFyYW0gZGF0YVR5cGVcbiAqIEBwYXJhbSBjb21wb25lbnRzXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGZpbGxWZWN0b3IgPSAoZGF0YVR5cGUgPSAnZjMyJywgY29tcG9uZW50cz86IG51bWJlciwgdmFsdWUgPSAnMCcpID0+IHtcbiAgaWYgKCFjb21wb25lbnRzIHx8IGNvbXBvbmVudHMgPT09IDEpIHtcbiAgICByZXR1cm4gYCR7ZGF0YVR5cGV9KCR7dmFsdWV9KWA7XG4gIH1cblxuICByZXR1cm4gYHZlYyR7Y29tcG9uZW50c308JHtkYXRhVHlwZX0+KCR7dmFsdWV9KWA7XG59O1xuXG4vKipcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgY2FzdHMgdmFsdWUgb3IgdmVjdG9yIHRvIGYzMlxuICogQHBhcmFtIGRhdGFUeXBlXG4gKiBAcGFyYW0gY29tcG9uZW50c1xuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBjYXN0VG9GMzIgPSAoZGF0YVR5cGU6IHN0cmluZywgY29tcG9uZW50czogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gIGlmIChkYXRhVHlwZSA9PT0gJ2YzMicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGNvbXBvbmVudHMgPT09IDEpIHtcbiAgICByZXR1cm4gYGYzMigke3ZhbHVlfSlgO1xuICB9XG5cbiAgcmV0dXJuIGB2ZWMke2NvbXBvbmVudHN9PGYzMj4oJHt2YWx1ZX0pYDtcbn07XG5cbi8qKlxuICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHNjYWxhciBvciBzdW1zIGFsbCBjb21wb25lbnRzIG9mIGEgdmVjdG9yXG4gKiBAcGFyYW0gbmFtZVxuICogQHBhcmFtIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IHN1bVZlY3RvciA9IChuYW1lOiBzdHJpbmcsIGNvbXBvbmVudHM6IG51bWJlcikgPT4ge1xuICBpZiAoY29tcG9uZW50cyA9PT0gNCkge1xuICAgIHJldHVybiBgKCR7bmFtZX0ueCArICR7bmFtZX0ueSArICR7bmFtZX0ueiArICR7bmFtZX0udylgO1xuICB9IGVsc2UgaWYgKGNvbXBvbmVudHMgPT09IDIpIHtcbiAgICByZXR1cm4gYCgke25hbWV9LnggKyAke25hbWV9LnkpYDtcbiAgfSBlbHNlIGlmIChjb21wb25lbnRzID09PSAzKSB7XG4gICAgcmV0dXJuIGAoJHtuYW1lfS54ICsgJHtuYW1lfS55ICsgJHtuYW1lfS56KWA7XG4gIH1cblxuICByZXR1cm4gbmFtZTtcbn07XG5cbi8qKlxuICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHZhcmlhYmxlIGVsZW1lbnQgYXQgaW5kZXguXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHZhcmlhYmxlLlxuICogQHBhcmFtIGluZGV4IC0gdGhlIGluZGV4IG9mIHZhcmlhYmxlIGVsZW1lbnQuXG4gKiBAcGFyYW0gbGVuZ3RoIC0gdGhlIGxlbmd0aCBvZiB2YXJpYWJsZS5cbiAqIEBwYXJhbSB0eXBlIC0gdGhlIHR5cGUgb2YgdmFyaWFibGUsIG9wdGlvbmFsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudEF0ID1cbiAgICAobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIHR5cGU/OiBVbmlmb3JtRGF0YUVsZW1lbnRUeXBlKTogc3RyaW5nID0+IHtcbiAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3VuaWZvcm1zLicpICYmIGxlbmd0aCA+IDQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiAoaW5kZXgpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnZjE2Jykge1xuICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9Wygke2luZGV4fSkgLyA4XVsoJHtpbmRleH0pICUgOCAvIDRdWygke2luZGV4fSkgJSA4ICUgNF1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bmFtZX1bKCR7aW5kZXh9KSAvIDRdWygke2luZGV4fSkgJSA0XWA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnZjE2Jykge1xuICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9WyR7TWF0aC5mbG9vcihpbmRleCAvIDgpfV1bJHtNYXRoLmZsb29yKGluZGV4ICUgOCAvIDQpfV1bJHtpbmRleCAlIDggJSA0fV1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bmFtZX1bJHtNYXRoLmZsb29yKGluZGV4IC8gNCl9XVske2luZGV4ICUgNH1dYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsZW5ndGggPiAxID8gYCR7bmFtZX1bJHtpbmRleH1dYCA6IG5hbWU7XG4gICAgICB9XG4gICAgfTtcblxuLyoqXG4gKiBBIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgYSBJbmRpY2VzSGVscGVyIGZvciBhIGdpdmVuIGlucHV0IG9yIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBvciBvdXRwdXQuXG4gKiBAcGFyYW0gdGVuc29yVHlwZSAtIHRoZSB0ZW5zb3IgdHlwZSBvZiB0aGUgaW5wdXQgb3Igb3V0cHV0LlxuICogQHBhcmFtIHNoYXBlT3JSYW5rIC0gdGhlIHRlbnNvciBzaGFwZSBvciB0aGUgcmFuayBvZiB0aGUgaW5wdXQgb3Igb3V0cHV0LlxuICogQHBhcmFtIHVzYWdlIC0gdGhlIHVzYWdlIG9mIHRoZSBpbmRpY2VzIGhlbHBlci5cbiAqIEBwYXJhbSBjb21wb25lbnRzIC0gaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBvZiBlYWNoIGVsZW1lbnQuIDEgZm9yIHNjYWxhciwgMiBmb3IgdmVjMiwgMyBmb3IgdmVjMywgNCBmb3JcbiAqICAgIHZlYzQuXG4gKi9cbmNvbnN0IGNyZWF0ZUluZGljZXNIZWxwZXIgPVxuICAgIChuYW1lOiBzdHJpbmcsIHRlbnNvclR5cGU6IG51bWJlciwgc2hhcGVPclJhbms6IG51bWJlcnxyZWFkb25seSBudW1iZXJbXSwgdXNhZ2U6IEluZGljZXNIZWxwZXJbJ3VzYWdlJ10sXG4gICAgIGNvbXBvbmVudHM6IDF8MnwzfDQpOiBJbmRpY2VzSGVscGVyID0+IHtcbiAgICAgIGNvbnN0IHVzZVVuaWZvcm0gPSB0eXBlb2Ygc2hhcGVPclJhbmsgPT09ICdudW1iZXInO1xuICAgICAgY29uc3QgcmFuayA9IHVzZVVuaWZvcm0gPyBzaGFwZU9yUmFuayA6IHNoYXBlT3JSYW5rLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJhbmtJZGVudGl0eSA9IFsuLi5uZXcgQXJyYXkocmFuaykua2V5cygpXTtcbiAgICAgIGNvbnN0IGluZGljZXNUeXBlID0gcmFuayA8IDIgPyAndTMyJyA6IHJhbmsgPD0gNCA/IGB2ZWMke3Jhbmt9PHUzMj5gIDogYGFycmF5PHUzMiwgJHtyYW5rfT5gO1xuICAgICAgY29uc3QgbWFwcGVkVHlwZSA9IGdldFdnc2xNYXBwZWRUeXBlKHRlbnNvclR5cGUsIGNvbXBvbmVudHMpO1xuICAgICAgY29uc3QgdmFsdWVUeXBlID0gdHlwZW9mIG1hcHBlZFR5cGUgPT09ICdzdHJpbmcnID8gbWFwcGVkVHlwZSA6IG1hcHBlZFR5cGVbMV07XG4gICAgICBjb25zdCBzdG9yYWdlVHlwZSA9IHR5cGVvZiBtYXBwZWRUeXBlID09PSAnc3RyaW5nJyA/IG1hcHBlZFR5cGUgOiBtYXBwZWRUeXBlWzBdO1xuICAgICAgY29uc3QgdHlwZSA9IHtpbmRpY2VzOiBpbmRpY2VzVHlwZSwgdmFsdWU6IHZhbHVlVHlwZSwgc3RvcmFnZTogc3RvcmFnZVR5cGUsIHRlbnNvcjogdGVuc29yVHlwZX07XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZURpbSA9IChkaW06IG51bWJlcnxzdHJpbmcpOiBzdHJpbmcgPT4gdHlwZW9mIGRpbSA9PT0gJ3N0cmluZycgPyBkaW0gOiBgJHtkaW19dWA7XG5cbiAgICAgIGNvbnN0IGltcGxlbWVudGF0aW9uVXNlZCA9IHtcbiAgICAgICAgb2Zmc2V0VG9JbmRpY2VzOiBmYWxzZSxcbiAgICAgICAgaW5kaWNlc1RvT2Zmc2V0OiBmYWxzZSxcbiAgICAgICAgYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQ6IGZhbHNlLFxuICAgICAgICBzZXQ6IGZhbHNlLFxuICAgICAgICBzZXRCeUluZGljZXM6IGZhbHNlLFxuICAgICAgICBnZXQ6IGZhbHNlLFxuICAgICAgICBnZXRCeUluZGljZXM6IGZhbHNlLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdW5pZm9ybVByZWZpeCA9IHVzZVVuaWZvcm0gPyAndW5pZm9ybXMuJyA6ICcnO1xuICAgICAgY29uc3Qgc2hhcGUgPSBgJHt1bmlmb3JtUHJlZml4fSR7bmFtZX1fc2hhcGVgO1xuICAgICAgY29uc3Qgc3RyaWRlcyA9IGAke3VuaWZvcm1QcmVmaXh9JHtuYW1lfV9zdHJpZGVzYDtcblxuICAgICAgbGV0IG8yaVNuaXBwZXQgPSAnJztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuayAtIDE7IGkrKykge1xuICAgICAgICBvMmlTbmlwcGV0ICs9IGBcbiAgICBsZXQgZGltJHtpfSA9IGN1cnJlbnQgLyAke2dldEVsZW1lbnRBdChzdHJpZGVzLCBpLCByYW5rKX07XG4gICAgbGV0IHJlc3Qke2l9ID0gY3VycmVudCAlICR7Z2V0RWxlbWVudEF0KHN0cmlkZXMsIGksIHJhbmspfTtcbiAgICBpbmRpY2VzWyR7aX1dID0gZGltJHtpfTtcbiAgICBjdXJyZW50ID0gcmVzdCR7aX07XG4gICAgYDtcbiAgICAgIH1cbiAgICAgIG8yaVNuaXBwZXQgKz0gYGluZGljZXNbJHtyYW5rIC0gMX1dID0gY3VycmVudDtgO1xuXG4gICAgICBjb25zdCBvZmZzZXRUb0luZGljZXNJbXBsZW1lbnRhdGlvbiA9IHJhbmsgPCAyID8gJycgOiBgXG4gIGZuIG8yaV8ke25hbWV9KG9mZnNldDogdTMyKSAtPiAke3R5cGUuaW5kaWNlc30ge1xuICAgIHZhciBpbmRpY2VzOiAke3R5cGUuaW5kaWNlc307XG4gICAgdmFyIGN1cnJlbnQgPSBvZmZzZXQ7XG4gICAgJHtvMmlTbmlwcGV0fVxuICAgIHJldHVybiBpbmRpY2VzO1xuICB9YDtcblxuICAgICAgY29uc3Qgb2Zmc2V0VG9JbmRpY2VzID0gKHZhck9mZnNldDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5vZmZzZXRUb0luZGljZXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmFuayA8IDIgPyB2YXJPZmZzZXQgOiBgbzJpXyR7bmFtZX0oJHt2YXJPZmZzZXR9KWA7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvZmZzZXRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgaWYgKHJhbmsgPj0gMikge1xuICAgICAgICBmb3IgKGxldCBpID0gcmFuayAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgb2Zmc2V0cy5wdXNoKGAke2dldEVsZW1lbnRBdChzdHJpZGVzLCBpLCByYW5rKX0gKiAoaW5kaWNlc1ske2l9XSlgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpbmRpY2VzVG9PZmZzZXRJbXBsZW1lbnRhdGlvbiA9IHJhbmsgPCAyID8gJycgOiBgXG4gIGZuIGkyb18ke25hbWV9KGluZGljZXM6ICR7dHlwZS5pbmRpY2VzfSkgLT4gdTMyIHtcbiAgICByZXR1cm4gJHtvZmZzZXRzLmpvaW4oJysnKX07XG4gIH1gO1xuXG4gICAgICBjb25zdCBpbmRpY2VzVG9PZmZzZXQgPSAodmFySW5kaWNlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5pbmRpY2VzVG9PZmZzZXQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmFuayA8IDIgPyB2YXJJbmRpY2VzIDogYGkyb18ke25hbWV9KCR7dmFySW5kaWNlc30pYDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGluZGljZXMgPSAoLi4uaW5pdDogUmVhZG9ubHlBcnJheTxudW1iZXJ8c3RyaW5nPikgPT5cbiAgICAgICAgICByYW5rID09PSAwID8gJzB1JyA6IGAke3R5cGUuaW5kaWNlc30oJHtpbml0Lm1hcChub3JtYWxpemVEaW0pLmpvaW4oJywnKX0pYDtcblxuICAgICAgY29uc3QgaW5kaWNlc0dldCA9ICh2YXJJbmRpY2VzOiBzdHJpbmcsIGlkeDogbnVtYmVyfHN0cmluZykgPT4ge1xuICAgICAgICBpZiAocmFuayA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7dmFySW5kaWNlc31gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgJHtnZXRFbGVtZW50QXQodmFySW5kaWNlcywgaWR4LCByYW5rKX1gO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBpbmRpY2VzU2V0ID0gKHZhckluZGljZXM6IHN0cmluZywgaWR4OiBudW1iZXJ8c3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChyYW5rIDwgMikge1xuICAgICAgICAgIHJldHVybiBgJHt2YXJJbmRpY2VzfT0ke3ZhbHVlfTtgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgJHtnZXRFbGVtZW50QXQodmFySW5kaWNlcywgaWR4LCByYW5rKX09JHt2YWx1ZX07YDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXRJbXBsZW1lbnRhdGlvbjoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICAgIGNvbnN0IGJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0ID0gKHZhckluZGljZXM6IHN0cmluZywgb3V0cHV0OiBJbmRpY2VzSGVscGVyKSA9PiB7XG4gICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGltcGxLZXkgPSBgJHtvdXRwdXQubmFtZX1icm9hZGNhc3RlZEluZGljZXNUbyR7bmFtZX1PZmZzZXRgO1xuICAgICAgICBpZiAoaW1wbEtleSBpbiBicm9hZGNhc3RlZEluZGljZXNUb09mZnNldEltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGAke2ltcGxLZXl9KCR7dmFySW5kaWNlc30pYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZmZzZXRzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSByYW5rIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBjb25zdCBpZHggPSBvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0SW5kaWNlcycsIGkgKyBvdXRwdXQucmFuayAtIHJhbmspO1xuICAgICAgICAgIG9mZnNldHMucHVzaChgJHtpbmRpY2VzR2V0KHN0cmlkZXMsIGkpfSAqICgke2lkeH0gJSAke2luZGljZXNHZXQoc2hhcGUsIGkpfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBicm9hZGNhc3RlZEluZGljZXNUb09mZnNldEltcGxlbWVudGF0aW9uW2ltcGxLZXldID1cbiAgICAgICAgICAgIGBmbiAke2ltcGxLZXl9KG91dHB1dEluZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+IHUzMiB7XG4gICAgICAgICAgICAgcmV0dXJuICR7b2Zmc2V0cy5sZW5ndGggPiAwID8gb2Zmc2V0cy5qb2luKCcrJykgOiAnMHUnfTtcbiAgICAgICAgICAgfWA7XG5cbiAgICAgICAgcmV0dXJuIGAke2ltcGxLZXl9KCR7dmFySW5kaWNlc30pYDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNldEJ5T2Zmc2V0ID0gKG9mZnNldDogbnVtYmVyfHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gKCgpID0+IHtcbiAgICAgICAgaWYgKHR5cGUuc3RvcmFnZSA9PT0gdHlwZS52YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBgJHtuYW1lfVske29mZnNldH1dPSR7dmFsdWV9O2A7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdG9yYWdlID09PSAndmVjMjx1MzI+JyAmJiB0eXBlLnZhbHVlID09PSAnaTMyJykge1xuICAgICAgICAgIC8vIGludDY0LCBjb21wb25lbnRzID09PSAxXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9WyR7b2Zmc2V0fV09dmVjMjx1MzI+KHUzMigke3ZhbHVlfSksIHNlbGVjdCgwdSwgMHhGRkZGRkZGRnUsICR7dmFsdWV9IDwgMCkpO2A7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdG9yYWdlID09PSAndmVjMjx1MzI+JyAmJiB0eXBlLnZhbHVlID09PSAndTMyJykge1xuICAgICAgICAgIC8vIHVpbnQ2NCwgY29tcG9uZW50cyA9PT0gMVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfVske29mZnNldH1dPXZlYzI8dTMyPih1MzIoJHt2YWx1ZX0pLCAwdSk7YDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN0b3JhZ2UgPT09ICd1MzInICYmIHR5cGUudmFsdWUgPT09ICd2ZWM0PGJvb2w+Jykge1xuICAgICAgICAgIC8vIGJvb2wsIGNvbXBvbmVudHMgPT09IDRcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX1bJHtvZmZzZXR9XT1kb3QodmVjNDx1MzI+KDB4MSwgMHgxMDAsIDB4MTAwMDAsIDB4MTAwMDAwMCksIHZlYzQ8dTMyPigke3ZhbHVlfSkpO2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3Qgc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIHN0b3JhZ2UgdHlwZSAke3R5cGUuc3RvcmFnZX0gYW5kIHZhbHVlIHR5cGUgJHt0eXBlLnZhbHVlfSB5ZXRgKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcblxuICAgICAgY29uc3QgZ2V0QnlPZmZzZXQgPSAob2Zmc2V0OiBudW1iZXJ8c3RyaW5nKSA9PiAoKCkgPT4ge1xuICAgICAgICBpZiAodHlwZS5zdG9yYWdlID09PSB0eXBlLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9WyR7b2Zmc2V0fV1gO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUuc3RvcmFnZSA9PT0gJ3ZlYzI8dTMyPicgJiYgdHlwZS52YWx1ZSA9PT0gJ2kzMicpIHtcbiAgICAgICAgICAvLyBpbnQ2NCwgY29tcG9uZW50cyA9PT0gMVxuICAgICAgICAgIHJldHVybiBgaTMyKCR7bmFtZX1bJHtvZmZzZXR9XS54KWA7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdG9yYWdlID09PSAndmVjMjx1MzI+JyAmJiB0eXBlLnZhbHVlID09PSAndTMyJykge1xuICAgICAgICAgIC8vIHVpbnQ2NCwgY29tcG9uZW50cyA9PT0gMVxuICAgICAgICAgIHJldHVybiBgdTMyKCR7bmFtZX1bJHtvZmZzZXR9XS54KWA7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdG9yYWdlID09PSAndTMyJyAmJiB0eXBlLnZhbHVlID09PSAndmVjNDxib29sPicpIHtcbiAgICAgICAgICAvLyBib29sLCBjb21wb25lbnRzID09PSA0XG4gICAgICAgICAgcmV0dXJuIGB2ZWM0PGJvb2w+KGJvb2woJHtuYW1lfVske29mZnNldH1dICYgMHhGRnUpLCBib29sKCR7bmFtZX1bJHtvZmZzZXR9XSAmIDB4RkYwMHUpLCBib29sKCR7bmFtZX1bJHtcbiAgICAgICAgICAgICAgb2Zmc2V0fV0gJiAweEZGMDAwMHUpLCBib29sKCR7bmFtZX1bJHtvZmZzZXR9XSAmIDB4RkYwMDAwMDB1KSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IHN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBzdG9yYWdlIHR5cGUgJHt0eXBlLnN0b3JhZ2V9IGFuZCB2YWx1ZSB0eXBlICR7dHlwZS52YWx1ZX0geWV0YCk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG5cbiAgICAgIGNvbnN0IGdldEJ5SW5kaWNlc0ltcGxlbWVudGF0aW9uID0gcmFuayA8IDIgPyAnJyA6IGBcbiAgZm4gZ2V0XyR7bmFtZX1CeUluZGljZXMoaW5kaWNlczogJHt0eXBlLmluZGljZXN9KSAtPiAke3ZhbHVlVHlwZX0ge1xuICAgIHJldHVybiAke2dldEJ5T2Zmc2V0KGBpMm9fJHtuYW1lfShpbmRpY2VzKWApfTtcbiAgfWA7XG5cbiAgICAgIGNvbnN0IGdldEltcGxlbWVudGF0aW9uID0gcmFuayA8IDIgPyAnJyA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uUGFyYW1zID0gcmFua0lkZW50aXR5Lm1hcChpID0+IGBkJHtpfTogdTMyYCkuam9pbignLCAnKTtcbiAgICAgICAgY29uc3QgZGltc1BhcmFtcyA9IHJhbmtJZGVudGl0eS5tYXAoaSA9PiBgZCR7aX1gKS5qb2luKCcsICcpO1xuICAgICAgICByZXR1cm4gYFxuICBmbiBnZXRfJHtuYW1lfSgke2Z1bmN0aW9uUGFyYW1zfSkgLT4gJHt2YWx1ZVR5cGV9IHtcbiAgICByZXR1cm4gZ2V0XyR7bmFtZX1CeUluZGljZXMoJHtpbmRpY2VzKGRpbXNQYXJhbXMpfSk7XG4gIH1gO1xuICAgICAgfSkoKTtcblxuICAgICAgY29uc3QgZ2V0ID0gKC4uLmluZGljZXM6IFJlYWRvbmx5QXJyYXk8bnVtYmVyfHN0cmluZz4pID0+IHtcbiAgICAgICAgaWYgKGluZGljZXMubGVuZ3RoICE9PSByYW5rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbmRpY2VzIGxlbmd0aCBtdXN0IGJlICR7cmFua31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRJbmRpY2VzID0gaW5kaWNlcy5tYXAobm9ybWFsaXplRGltKS5qb2luKCcsJyk7XG5cbiAgICAgICAgaWYgKHJhbmsgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZ2V0QnlPZmZzZXQoJzB1Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAocmFuayA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBnZXRCeU9mZnNldChub3JtYWxpemVkSW5kaWNlc1swXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLmdldCA9IHRydWU7XG4gICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLmdldEJ5SW5kaWNlcyA9IHRydWU7XG4gICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLmluZGljZXNUb09mZnNldCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGBnZXRfJHtuYW1lfSgke25vcm1hbGl6ZWRJbmRpY2VzfSlgO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBnZXRCeUluZGljZXMgPSAodmFySW5kaWNlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChyYW5rIDwgMikge1xuICAgICAgICAgIHJldHVybiBnZXRCeU9mZnNldCh2YXJJbmRpY2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuZ2V0QnlJbmRpY2VzID0gdHJ1ZTtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuaW5kaWNlc1RvT2Zmc2V0ID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYGdldF8ke25hbWV9QnlJbmRpY2VzKCR7dmFySW5kaWNlc30pYDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2V0QnlJbmRpY2VzSW1wbGVtZW50YXRpb24gPSByYW5rIDwgMiA/ICcnIDogYFxuICBmbiBzZXRfJHtuYW1lfUJ5SW5kaWNlcyhpbmRpY2VzOiAke3R5cGUuaW5kaWNlc30sIHZhbHVlOiAke3ZhbHVlVHlwZX0pIHtcbiAgICAke3NldEJ5T2Zmc2V0KGBpMm9fJHtuYW1lfShpbmRpY2VzKWAsICd2YWx1ZScpfVxuICB9YDtcblxuICAgICAgY29uc3Qgc2V0SW1wbGVtZW50YXRpb24gPSByYW5rIDwgMiA/ICcnIDogKCgpID0+IHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25QYXJhbXMgPSByYW5rSWRlbnRpdHkubWFwKGkgPT4gYGQke2l9OiB1MzJgKS5qb2luKCcsICcpO1xuICAgICAgICBjb25zdCBkaW1zUGFyYW1zID0gcmFua0lkZW50aXR5Lm1hcChpID0+IGBkJHtpfWApLmpvaW4oJywgJyk7XG4gICAgICAgIHJldHVybiBgXG4gIGZuIHNldF8ke25hbWV9KCR7ZnVuY3Rpb25QYXJhbXN9LCB2YWx1ZTogJHt2YWx1ZVR5cGV9KSB7XG4gICAgc2V0XyR7bmFtZX1CeUluZGljZXMoJHtpbmRpY2VzKGRpbXNQYXJhbXMpfSwgdmFsdWUpO1xuICB9YDtcbiAgICAgIH0pKCk7XG5cbiAgICAgIGNvbnN0IHNldCA9ICguLi5pbmRpY2VzQW5kVmFsdWU6IFJlYWRvbmx5QXJyYXk8bnVtYmVyfHN0cmluZz4pID0+IHtcbiAgICAgICAgaWYgKGluZGljZXNBbmRWYWx1ZS5sZW5ndGggIT09IHJhbmsgKyAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbmRpY2VzIGxlbmd0aCBtdXN0IGJlICR7cmFua31gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGluZGljZXNBbmRWYWx1ZVtyYW5rXTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3JtYWxpemVkSW5kaWNlcyA9IGluZGljZXNBbmRWYWx1ZS5zbGljZSgwLCByYW5rKS5tYXAobm9ybWFsaXplRGltKS5qb2luKCcsJyk7XG5cbiAgICAgICAgaWYgKHJhbmsgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gc2V0QnlPZmZzZXQoJzB1JywgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHJhbmsgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gc2V0QnlPZmZzZXQobm9ybWFsaXplZEluZGljZXNbMF0sIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuc2V0ID0gdHJ1ZTtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuc2V0QnlJbmRpY2VzID0gdHJ1ZTtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuaW5kaWNlc1RvT2Zmc2V0ID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gYHNldF8ke25hbWV9KCR7bm9ybWFsaXplZEluZGljZXN9LCAke3ZhbHVlfSlgO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzZXRCeUluZGljZXMgPSAodmFySW5kaWNlczogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChyYW5rIDwgMikge1xuICAgICAgICAgIHJldHVybiBzZXRCeU9mZnNldCh2YXJJbmRpY2VzLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLnNldEJ5SW5kaWNlcyA9IHRydWU7XG4gICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLmluZGljZXNUb09mZnNldCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGBzZXRfJHtuYW1lfUJ5SW5kaWNlcygke3ZhckluZGljZXN9LCAke3ZhbHVlfSk7YDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgaW1wbCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaW1wbHMgPSBbXTtcbiAgICAgICAgbGV0IG5lZWRTaGFwZVN0cmlkZXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKGltcGxlbWVudGF0aW9uVXNlZC5vZmZzZXRUb0luZGljZXMpIHtcbiAgICAgICAgICBpbXBscy5wdXNoKG9mZnNldFRvSW5kaWNlc0ltcGxlbWVudGF0aW9uKTtcbiAgICAgICAgICBuZWVkU2hhcGVTdHJpZGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25Vc2VkLmluZGljZXNUb09mZnNldCkge1xuICAgICAgICAgIGltcGxzLnB1c2goaW5kaWNlc1RvT2Zmc2V0SW1wbGVtZW50YXRpb24pO1xuICAgICAgICAgIG5lZWRTaGFwZVN0cmlkZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbXBsZW1lbnRhdGlvblVzZWQuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQpIHtcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0SW1wbGVtZW50YXRpb24pLmZvckVhY2goaW1wbCA9PiBpbXBscy5wdXNoKGltcGwpKTtcbiAgICAgICAgICBuZWVkU2hhcGVTdHJpZGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25Vc2VkLnNldCkge1xuICAgICAgICAgIGltcGxzLnB1c2goc2V0SW1wbGVtZW50YXRpb24pO1xuICAgICAgICAgIG5lZWRTaGFwZVN0cmlkZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbXBsZW1lbnRhdGlvblVzZWQuc2V0QnlJbmRpY2VzKSB7XG4gICAgICAgICAgaW1wbHMucHVzaChzZXRCeUluZGljZXNJbXBsZW1lbnRhdGlvbik7XG4gICAgICAgICAgbmVlZFNoYXBlU3RyaWRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGltcGxlbWVudGF0aW9uVXNlZC5nZXQpIHtcbiAgICAgICAgICBpbXBscy5wdXNoKGdldEltcGxlbWVudGF0aW9uKTtcbiAgICAgICAgICBuZWVkU2hhcGVTdHJpZGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25Vc2VkLmdldEJ5SW5kaWNlcykge1xuICAgICAgICAgIGltcGxzLnB1c2goZ2V0QnlJbmRpY2VzSW1wbGVtZW50YXRpb24pO1xuICAgICAgICAgIG5lZWRTaGFwZVN0cmlkZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdXNlVW5pZm9ybSAmJiBuZWVkU2hhcGVTdHJpZGVzKSB7XG4gICAgICAgICAgaW1wbHMudW5zaGlmdChcbiAgICAgICAgICAgICAgYGNvbnN0ICR7c2hhcGV9ID0gJHt0eXBlLmluZGljZXN9KCR7c2hhcGVPclJhbmsuam9pbignLCcpfSk7YCxcbiAgICAgICAgICAgICAgYGNvbnN0ICR7c3RyaWRlc30gPSAke3R5cGUuaW5kaWNlc30oJHtTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoc2hhcGVPclJhbmspLmpvaW4oJywnKX0pO2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbXBscy5qb2luKCdcXG4nKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGltcGwsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIG9mZnNldFRvSW5kaWNlcyxcbiAgICAgICAgaW5kaWNlc1RvT2Zmc2V0LFxuICAgICAgICBicm9hZGNhc3RlZEluZGljZXNUb09mZnNldCxcbiAgICAgICAgaW5kaWNlcyxcbiAgICAgICAgaW5kaWNlc0dldCxcbiAgICAgICAgaW5kaWNlc1NldCxcbiAgICAgICAgc2V0LFxuICAgICAgICBzZXRCeU9mZnNldCxcbiAgICAgICAgc2V0QnlJbmRpY2VzLFxuICAgICAgICBnZXQsXG4gICAgICAgIGdldEJ5T2Zmc2V0LFxuICAgICAgICBnZXRCeUluZGljZXMsXG4gICAgICAgIC8vIGlzVmVjNCxcbiAgICAgICAgdXNhZ2UsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHN0cmlkZXMsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICByYW5rXG4gICAgICB9O1xuICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIGEgSW5kaWNlc0hlbHBlciBmb3IgYW4gaW5wdXQuXG4gKlxuICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgaW5wdXQuXG4gKiBAcGFyYW0gdHlwZSAtIHRoZSB0ZW5zb3IgdHlwZSBvZiB0aGUgaW5wdXQuXG4gKiBAcGFyYW0gc2hhcGVPclJhbmsgLSB0aGUgdGVuc29yIHNoYXBlIG9yIHRoZSByYW5rIG9mIHRoZSBpbnB1dC5cbiAqIEBwYXJhbSBjb21wb25lbnRzIC0gdGhlIG51bWJlciBvZiBjb21wb25lbnRzIG9mIHRoZSBpbnB1dC4gYXZhaWxhYmxlIHZhbHVlcyBhcmUgMSwgMiwgMywgNC4gZGVmYXVsdCBpcyAxLlxuICogQHJldHVybnMgYW4gSW5kaWNlc0hlbHBlciBmb3IgdGhlIGlucHV0LlxuICovXG5leHBvcnQgY29uc3QgaW5wdXRWYXJpYWJsZSA9XG4gICAgKG5hbWU6IHN0cmluZywgdHlwZTogbnVtYmVyLCBzaGFwZU9yUmFuazogbnVtYmVyfHJlYWRvbmx5IG51bWJlcltdLCBjb21wb25lbnRzOiAxfDJ8M3w0ID0gMSk6IEluZGljZXNIZWxwZXIgPT5cbiAgICAgICAgY3JlYXRlSW5kaWNlc0hlbHBlcihuYW1lLCB0eXBlLCBzaGFwZU9yUmFuaywgJ2lucHV0JywgY29tcG9uZW50cyk7XG5cbi8qKlxuICogQ3JlYXRlIGEgSW5kaWNlc0hlbHBlciBmb3IgYW4gb3V0cHV0LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIG91dHB1dC5cbiAqIEBwYXJhbSB0eXBlIC0gdGhlIHRlbnNvciB0eXBlIG9mIHRoZSBvdXRwdXQuXG4gKiBAcGFyYW0gc2hhcGVPclJhbmsgLSB0aGUgdGVuc29yIHNoYXBlIG9yIHRoZSByYW5rIG9mIHRoZSBvdXRwdXQuXG4gKiBAcGFyYW0gY29tcG9uZW50cyAtIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBvZiB0aGUgb3V0cHV0LiBhdmFpbGFibGUgdmFsdWVzIGFyZSAxLCAyLCAzLCA0LiBkZWZhdWx0IGlzIDEuXG4gKiBAcmV0dXJucyBhbiBJbmRpY2VzSGVscGVyIGZvciB0aGUgb3V0cHV0LlxuICovXG5leHBvcnQgY29uc3Qgb3V0cHV0VmFyaWFibGUgPVxuICAgIChuYW1lOiBzdHJpbmcsIHR5cGU6IG51bWJlciwgc2hhcGVPclJhbms6IG51bWJlcnxyZWFkb25seSBudW1iZXJbXSwgY29tcG9uZW50czogMXwyfDN8NCA9IDEpOiBJbmRpY2VzSGVscGVyID0+XG4gICAgICAgIGNyZWF0ZUluZGljZXNIZWxwZXIobmFtZSwgdHlwZSwgc2hhcGVPclJhbmssICdvdXRwdXQnLCBjb21wb25lbnRzKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBJbmRpY2VzSGVscGVyIGZvciBhbiBpbnRlcm5hbCB2YXJpYWJsZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS5cbiAqIEBwYXJhbSB0eXBlIC0gdGhlIHRlbnNvciB0eXBlIG9mIHRoZSB2YXJpYWJsZS5cbiAqIEBwYXJhbSBzaGFwZU9yUmFuayAtIHRoZSB0ZW5zb3Igc2hhcGUgb3IgdGhlIHJhbmsgb2YgdGhlIHZhcmlhYmxlLlxuICogQHBhcmFtIGNvbXBvbmVudHMgLSB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgb2YgdGhlIHZhcmlhYmxlLiBhdmFpbGFibGUgdmFsdWVzIGFyZSAxLCAyLCAzLCA0LiBkZWZhdWx0IGlzIDEuXG4gKiBAcmV0dXJucyBhbiBJbmRpY2VzSGVscGVyIGZvciB0aGUgdmFyaWFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnRlcm5hbFZhcmlhYmxlID1cbiAgICAobmFtZTogc3RyaW5nLCB0eXBlOiBudW1iZXIsIHNoYXBlT3JSYW5rOiBudW1iZXJ8cmVhZG9ubHkgbnVtYmVyW10sIGNvbXBvbmVudHM6IDF8MnwzfDQgPSAxKTogSW5kaWNlc0hlbHBlciA9PlxuICAgICAgICBjcmVhdGVJbmRpY2VzSGVscGVyKG5hbWUsIHR5cGUsIHNoYXBlT3JSYW5rLCAnaW50ZXJuYWwnLCBjb21wb25lbnRzKTtcblxuZXhwb3J0IHR5cGUgVW5pZm9ybURhdGFFbGVtZW50VHlwZSA9ICd1MzInfCdmMTYnfCdmMzInfCdpMzInO1xuZXhwb3J0IHR5cGUgVW5pZm9ybXNBcnJheVR5cGUgPSBBcnJheTx7bmFtZTogc3RyaW5nOyB0eXBlOiBVbmlmb3JtRGF0YUVsZW1lbnRUeXBlOyBsZW5ndGg/OiBudW1iZXJ9PjtcblxuLyoqXG4gKiBBIFNoYWRlckhlbHBlciBpcyBhIGhlbHBlciBjbGFzcyBmb3IgZ2VuZXJhdGluZyBXR1NMIGNvZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2hhZGVySGVscGVyIHtcbiAgLyoqXG4gICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBzdGFydCBvZiBtYWluIGZ1bmN0aW9uIGluIFdHU0wgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgKiAgLi4uXG4gICAqXG4gICAqICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICogICAgLy8geW91ciBjb2RlIGhlcmUgaW5zaWRlIG1haW4oKSBmdW5jdGlvblxuICAgKiAgICAuLi5cbiAgICogIH1cbiAgICogYDtcbiAgICpcbiAgICogQHBhcmFtIHdvcmtncm91cFNpemUgLSBhbiBvcHRpb25hbCB3b3JrZ3JvdXAgc2l6ZS4gZGVmYXVsdCBpcyBXT1JLR1JPVVBfU0laRS5cbiAgICovXG4gIG1haW5TdGFydCh3b3JrZ3JvdXBTaXplPzogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IHN0cmluZztcblxuICAvKipcbiAgICogQSBoZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGNvZGUgc25pcHBldCBmb3IgZ3VhcmRpbmcgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHNpemUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgKiAgLi4uXG4gICAqXG4gICAqICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICogICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhvdXRwdXRTaXplKX1cbiAgICpcbiAgICogICAgLy8geW91ciBjb2RlIGhlcmUgaW5zaWRlIG1haW4oKSBmdW5jdGlvblxuICAgKiAgICAuLi5cbiAgICogIH1cbiAgICogYDtcbiAgICpcbiAgICogQHBhcmFtIHNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgZGF0YSB0byBndWFyZCBhZ2FpbnN0LiBjYW4gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgKFdHU0wgYHUzMmAgZXhwcmVzc2lvbikuXG4gICAqL1xuICBndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKHNpemU6IHVua25vd24pOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBjb2RlIHNuaXBwZXQgZm9yIGRlY2xhcmluZyBtdWx0aXBsZSBpbnB1dHMgb3Igb3V0cHV0cy5cbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlcyAtIGFuIGFycmF5IG9mIEluZGljZXNIZWxwZXIgZm9yIHRoZSB2YXJpYWJsZXMuXG4gICAqL1xuICBkZWNsYXJlVmFyaWFibGVzKC4uLnZhcmlhYmxlczogSW5kaWNlc0hlbHBlcltdKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0byByZWdpc3RlciBvbmUgdW5pZm9ybS4gQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byByZWdpc3RlciBtdWx0aXBsZSB1bmlmb3Jtcy5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgdW5pZm9ybS5cbiAgICogQHBhcmFtIHR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgdW5pZm9ybS5cbiAgICogQHBhcmFtIGxlbmd0aCAtIHRoZSBsZW5ndGggb2YgdGhlIHVuaWZvcm0sIGRlZmF1bHQgdG8gMSB3aGVuIGl0IGlzIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlZ2lzdGVyVW5pZm9ybShuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgbGVuZ3RoPzogbnVtYmVyKTogU2hhZGVySGVscGVyO1xuXG4gIC8qKlxuICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0byByZWdpc3RlciBtdWx0aXBsZSB1bmlmb3Jtcy4gQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byByZWdpc3RlciBtdWx0aXBsZSB1bmlmb3Jtcy5cbiAgICpcbiAgICogQHBhcmFtIHVuaWZvcm1zIC0gYW4gYXJyYXkgb2YgdW5pZm9ybXMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgYW4gb2JqZWN0IHdpdGggMiBwcm9wZXJ0aWVzOiBgbmFtZWAgYW5kXG4gICAqICAgICBgdHlwZWAuXG4gICAqL1xuICByZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSk6IFNoYWRlckhlbHBlcjtcblxuICAvKipcbiAgICogQSBoZWxwZXIgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgbXVsdGlwbGUgaW50ZXJuYWwgdmFyaWFibGVzLiBDYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIHJlZ2lzdGVyIG11bHRpcGxlXG4gICAqIGludGVybmFsIHZhcmlhYmxlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlcyAtIGFuIGFycmF5IG9mIEluZGljZXNIZWxwZXIgZm9yIHRoZSB2YXJpYWJsZXMuXG4gICAqL1xuICByZWdpc3RlckludGVybmFsVmFyaWFibGVzKC4uLnZhcmlhYmxlczogSW5kaWNlc0hlbHBlcltdKTogU2hhZGVySGVscGVyO1xufVxuXG5jbGFzcyBTaGFkZXJIZWxwZXJJbXBsIGltcGxlbWVudHMgU2hhZGVySGVscGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub3JtYWxpemVkRGlzcGF0Y2hHcm91cDogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBwcml2YXRlIGxpbWl0czogR1BVU3VwcG9ydGVkTGltaXRzKSB7fVxuXG4gIGd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoc2l6ZTogbnVtYmVyfHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gR3VhcmQgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHdvcmsgZ3JvdXAgc2l6ZXNcbiAgICBjb25zdCBzaXplSW5Db2RlID0gdHlwZW9mIHNpemUgPT09ICdudW1iZXInID8gYCR7c2l6ZX11YCA6IHNpemU7XG4gICAgcmV0dXJuIGBpZiAoZ2xvYmFsX2lkeCA+PSAke3NpemVJbkNvZGV9KSB7IHJldHVybjsgfWA7XG4gIH1cblxuICBtYWluU3RhcnQod29ya2dyb3VwU2l6ZTogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFdPUktHUk9VUF9TSVpFKSB7XG4gICAgY29uc3Qgd29ya2dyb3VwU2l6ZVggPSB0eXBlb2Ygd29ya2dyb3VwU2l6ZSA9PT0gJ251bWJlcicgPyB3b3JrZ3JvdXBTaXplIDogd29ya2dyb3VwU2l6ZVswXTtcbiAgICBjb25zdCB3b3JrZ3JvdXBTaXplWSA9IHR5cGVvZiB3b3JrZ3JvdXBTaXplID09PSAnbnVtYmVyJyA/IDEgOiB3b3JrZ3JvdXBTaXplWzFdO1xuICAgIGNvbnN0IHdvcmtncm91cFNpemVaID0gdHlwZW9mIHdvcmtncm91cFNpemUgPT09ICdudW1iZXInID8gMSA6IHdvcmtncm91cFNpemVbMl07XG5cbiAgICBpZiAod29ya2dyb3VwU2l6ZVggPiB0aGlzLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVggfHxcbiAgICAgICAgd29ya2dyb3VwU2l6ZVkgPiB0aGlzLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVkgfHxcbiAgICAgICAgd29ya2dyb3VwU2l6ZVogPiB0aGlzLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVopIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgd29ya2dyb3VwIHNpemUgWyR7d29ya2dyb3VwU2l6ZVh9LCAke3dvcmtncm91cFNpemVZfSwgJHtcbiAgICAgICAgICB3b3JrZ3JvdXBTaXplWn1dIGV4Y2VlZHMgdGhlIG1heGltdW0gd29ya2dyb3VwIHNpemUgWyR7dGhpcy5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVYfSwgJHtcbiAgICAgICAgICB0aGlzLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVl9LCAke3RoaXMubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWn1dLmApO1xuICAgIH1cblxuICAgIGlmICh3b3JrZ3JvdXBTaXplWCAqIHdvcmtncm91cFNpemVZICogd29ya2dyb3VwU2l6ZVogPiB0aGlzLmxpbWl0cy5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgd29ya2dyb3VwIHNpemUgWyR7d29ya2dyb3VwU2l6ZVh9LCAke3dvcmtncm91cFNpemVZfSwgJHtcbiAgICAgICAgICB3b3JrZ3JvdXBTaXplWn1dIGV4Y2VlZHMgdGhlIG1heGltdW0gd29ya2dyb3VwIGludm9jYXRpb25zICR7XG4gICAgICAgICAgdGhpcy5saW1pdHMubWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwfS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBpczFEaW1lbnNpb25EaXNwYXRjaCA9IHRoaXMubm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMV0gPT09IDEgJiYgdGhpcy5ub3JtYWxpemVkRGlzcGF0Y2hHcm91cFsyXSA9PT0gMTtcbiAgICBjb25zdCBwYXJhbUxpc3QgPSBpczFEaW1lbnNpb25EaXNwYXRjaCA/IGBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgZ2xvYmFsX2lkIDogdmVjMzx1MzI+LFxuICAgIEBidWlsdGluKHdvcmtncm91cF9pZCkgd29ya2dyb3VwX2lkIDogdmVjMzx1MzI+LFxuICAgIEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faWQpIGxvY2FsX2lkIDogdmVjMzx1MzI+YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQGJ1aWx0aW4oZ2xvYmFsX2ludm9jYXRpb25faWQpIGdsb2JhbF9pZCA6IHZlYzM8dTMyPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faWQpIGxvY2FsX2lkIDogdmVjMzx1MzI+LFxuICAgIEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faW5kZXgpIGxvY2FsX2lkeCA6IHUzMixcbiAgICBAYnVpbHRpbih3b3JrZ3JvdXBfaWQpIHdvcmtncm91cF9pZCA6IHZlYzM8dTMyPixcbiAgICBAYnVpbHRpbihudW1fd29ya2dyb3VwcykgbnVtX3dvcmtncm91cHMgOiB2ZWMzPHUzMj5gO1xuICAgIGNvbnN0IGdsb2JhbElkeERlZmluaXRpb24gPSBpczFEaW1lbnNpb25EaXNwYXRjaCA/XG4gICAgICAgICdsZXQgZ2xvYmFsX2lkeCA9IGdsb2JhbF9pZC54OyBsZXQgbG9jYWxfaWR4ID0gbG9jYWxfaWQueDsnIDpcbiAgICAgICAgYGxldCBnbG9iYWxfaWR4ID0gKHdvcmtncm91cF9pZC56ICogbnVtX3dvcmtncm91cHNbMF0gKiBudW1fd29ya2dyb3Vwc1sxXSArXG4gICAgICAgICAgd29ya2dyb3VwX2lkLnkgKiBudW1fd29ya2dyb3Vwc1swXSArIHdvcmtncm91cF9pZC54KSAqICR7XG4gICAgICAgICAgICB3b3JrZ3JvdXBTaXplWCAqIHdvcmtncm91cFNpemVZICogd29ya2dyb3VwU2l6ZVp9dSArIGxvY2FsX2lkeDtgO1xuXG4gICAgcmV0dXJuIGBAY29tcHV0ZSBAd29ya2dyb3VwX3NpemUoJHt3b3JrZ3JvdXBTaXplWH0sICR7d29ya2dyb3VwU2l6ZVl9LCAke3dvcmtncm91cFNpemVafSlcbiAgZm4gbWFpbigke3BhcmFtTGlzdH0pIHtcbiAgICAke2dsb2JhbElkeERlZmluaXRpb259XG4gIGA7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFZhcmlhYmxlVW5pZm9ybXModmFyaWFibGU6IEluZGljZXNIZWxwZXIpOiB2b2lkIHtcbiAgICBpZiAodmFyaWFibGUucmFuayAhPT0gMCkge1xuICAgICAgaWYgKHZhcmlhYmxlLnNoYXBlLnN0YXJ0c1dpdGgoJ3VuaWZvcm1zLicpKSB7XG4gICAgICAgIHRoaXMudW5pZm9ybXMucHVzaCh7bmFtZTogdmFyaWFibGUuc2hhcGUucmVwbGFjZSgndW5pZm9ybXMuJywgJycpLCB0eXBlOiAndTMyJywgbGVuZ3RoOiB2YXJpYWJsZS5yYW5rfSk7XG4gICAgICB9XG4gICAgICBpZiAodmFyaWFibGUuc3RyaWRlcy5zdGFydHNXaXRoKCd1bmlmb3Jtcy4nKSkge1xuICAgICAgICB0aGlzLnVuaWZvcm1zLnB1c2goe25hbWU6IHZhcmlhYmxlLnN0cmlkZXMucmVwbGFjZSgndW5pZm9ybXMuJywgJycpLCB0eXBlOiAndTMyJywgbGVuZ3RoOiB2YXJpYWJsZS5yYW5rfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWNsYXJlVmFyaWFibGUodmFyaWFibGU6IEluZGljZXNIZWxwZXIsIGJpbmRpbmdJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAodmFyaWFibGUudXNhZ2UgPT09ICdpbnRlcm5hbCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHVzZSBpbnRlcm5hbCB2YXJpYWJsZSB3aXRoIGRlY2xhcmVWYXJpYWJsZSgpLiB1c2UgcmVnaXN0ZXJJbnRlcm5hbFZhcmlhYmxlcygpIGluc3RlYWQuJyk7XG4gICAgfVxuICAgIHRoaXMudmFyaWFibGVzLnB1c2godmFyaWFibGUpO1xuICAgIHRoaXMuYXBwZW5kVmFyaWFibGVVbmlmb3Jtcyh2YXJpYWJsZSk7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSB2YXJpYWJsZS51c2FnZSA9PT0gJ2lucHV0JyA/ICdyZWFkJyA6ICdyZWFkX3dyaXRlJztcbiAgICBjb25zdCBzdG9yYWdlVHlwZSA9IHZhcmlhYmxlLnR5cGUuc3RvcmFnZTtcbiAgICByZXR1cm4gYEBncm91cCgwKSBAYmluZGluZygke2JpbmRpbmdJbmRleH0pIHZhcjxzdG9yYWdlLCAke2FjY2Vzc30+ICR7dmFyaWFibGUubmFtZX06IGFycmF5PCR7c3RvcmFnZVR5cGV9PjtgO1xuICB9XG5cbiAgZGVjbGFyZVZhcmlhYmxlcyguLi52YXJpYWJsZXM6IEluZGljZXNIZWxwZXJbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhcmlhYmxlcy5tYXAodiA9PiB0aGlzLmRlY2xhcmVWYXJpYWJsZSh2LCB0aGlzLnZhcmlhYmxlSW5kZXgrKykpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckludGVybmFsVmFyaWFibGUodmFyaWFibGU6IEluZGljZXNIZWxwZXIpOiB2b2lkIHtcbiAgICBpZiAodmFyaWFibGUudXNhZ2UgIT09ICdpbnRlcm5hbCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnY2Fubm90IHVzZSBpbnB1dCBvciBvdXRwdXQgdmFyaWFibGUgd2l0aCByZWdpc3RlckludGVybmFsVmFyaWFibGUoKS4gdXNlIGRlY2xhcmVWYXJpYWJsZXMoKSBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIHRoaXMuaW50ZXJuYWxWYXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG4gICAgdGhpcy5hcHBlbmRWYXJpYWJsZVVuaWZvcm1zKHZhcmlhYmxlKTtcbiAgfVxuXG4gIHJlZ2lzdGVySW50ZXJuYWxWYXJpYWJsZXMoLi4udmFyaWFibGVzOiBJbmRpY2VzSGVscGVyW10pOiBTaGFkZXJIZWxwZXIge1xuICAgIHZhcmlhYmxlcy5mb3JFYWNoKHYgPT4gdGhpcy5yZWdpc3RlckludGVybmFsVmFyaWFibGUodikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVnaXN0ZXJVbmlmb3JtKG5hbWU6IHN0cmluZywgdHlwZTogVW5pZm9ybURhdGFFbGVtZW50VHlwZSwgbGVuZ3RoID0gMSk6IFNoYWRlckhlbHBlciB7XG4gICAgdGhpcy51bmlmb3Jtcy5wdXNoKHtuYW1lLCB0eXBlLCBsZW5ndGh9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlZ2lzdGVyVW5pZm9ybXMoYWRkaXRpb25hbFVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSk6IFNoYWRlckhlbHBlciB7XG4gICAgdGhpcy51bmlmb3JtcyA9IHRoaXMudW5pZm9ybXMuY29uY2F0KGFkZGl0aW9uYWxVbmlmb3Jtcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGludGVybmFsVmFyaWFibGVzOiBJbmRpY2VzSGVscGVyW10gPSBbXTtcbiAgcHJpdmF0ZSB2YXJpYWJsZXM6IEluZGljZXNIZWxwZXJbXSA9IFtdO1xuICBwcml2YXRlIHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtdO1xuICBwcml2YXRlIHVuaWZvcm1EZWNsYXJhdGlvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnVuaWZvcm1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHVuaWZvcm1TbmlwcGV0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHtuYW1lLCB0eXBlLCBsZW5ndGh9IG9mIHRoaXMudW5pZm9ybXMpIHtcbiAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoID4gNCkge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2YxNicpIHtcbiAgICAgICAgICB1bmlmb3JtU25pcHBldHMucHVzaChgQGFsaWduKDE2KSAke25hbWV9OmFycmF5PG1hdDJ4NDwke3R5cGV9PiwgJHtNYXRoLmNlaWwobGVuZ3RoIC8gOCl9PmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaWZvcm1TbmlwcGV0cy5wdXNoKGAke25hbWV9OmFycmF5PHZlYzQ8JHt0eXBlfT4sICR7TWF0aC5jZWlsKGxlbmd0aCAvIDQpfT5gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdHlwZVRlbXAgPSBsZW5ndGggPT0gbnVsbCB8fCBsZW5ndGggPT09IDEgPyB0eXBlIDogYHZlYyR7bGVuZ3RofTwke3R5cGV9PmA7XG4gICAgICAgIHVuaWZvcm1TbmlwcGV0cy5wdXNoKGAke25hbWV9OiR7dHlwZVRlbXB9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcbiAgICAgIHN0cnVjdCBVbmlmb3JtcyB7ICR7dW5pZm9ybVNuaXBwZXRzLmpvaW4oJywgJyl9IH07XG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHt0aGlzLnZhcmlhYmxlSW5kZXh9KSB2YXI8dW5pZm9ybT4gdW5pZm9ybXM6IFVuaWZvcm1zO2A7XG4gIH1cbiAgcHJpdmF0ZSB2YXJpYWJsZUluZGV4ID0gMDtcblxuICAvKipcbiAgICogR2V0IGFkZGl0aW9uYWwgaW1wbGVtZW50YXRpb24gdGhhdCBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgc2hhZGVyIHNvdXJjZS5cbiAgICovXG4gIGdldCBhZGRpdGlvbmFsSW1wbGVtZW50YXRpb25zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudW5pZm9ybURlY2xhcmF0aW9uKCkgKyB0aGlzLnZhcmlhYmxlcy5tYXAoaSA9PiBpLmltcGwoKSkuam9pbignXFxuJykgK1xuICAgICAgICB0aGlzLmludGVybmFsVmFyaWFibGVzLm1hcChpID0+IGkuaW1wbCgpKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhcmlhYmxlIGluZm8gb2YgdGhlIHNoYWRlciBwcm9ncmFtLlxuICAgKi9cbiAgZ2V0IHZhcmlhYmxlc0luZm8oKTogUHJvZ3JhbVVuaWZvcm1WYXJpYWJsZUluZm9bXXx1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnVuaWZvcm1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB1bmlmb3JtV2dzbFR5cGVUb0RhdGFUeXBlID0gKHR5cGU6IFVuaWZvcm1EYXRhRWxlbWVudFR5cGUpID0+XG4gICAgICAgIChbRGF0YVR5cGUudWludDMyLCBEYXRhVHlwZS5mbG9hdDE2LCBEYXRhVHlwZS5mbG9hdCxcbiAgICAgICAgICBEYXRhVHlwZS5pbnQzMl1bWyd1MzInLCAnZjE2JywgJ2YzMicsICdpMzInXS5pbmRleE9mKHR5cGUpXSk7XG4gICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwKHUgPT4gKFt1bmlmb3JtV2dzbFR5cGVUb0RhdGFUeXBlKHUudHlwZSksIHUubGVuZ3RoID8/IDFdKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNoYWRlckhlbHBlciA9IChkaXNwYXRjaEdyb3VwOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGxpbWl0czogR1BVU3VwcG9ydGVkTGltaXRzKSA9PlxuICAgIG5ldyBTaGFkZXJIZWxwZXJJbXBsKGRpc3BhdGNoR3JvdXAsIGxpbWl0cyk7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjb21lcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RmanMvYmxvYi9tYXN0ZXIvdGZqcy1jb3JlL3NyYy9vcHMvYnJvYWRjYXN0X3V0aWwudHMjTDE4LUw0MFxuICogUmV0dXJucyB0aGUgZGltZW5zaW9ucyBpbiB0aGUgaW5wdXQgc2hhcGUgdGhhdCBhcmUgYnJvYWRjYXN0ZWQgdG9cbiAqIHByb2R1Y2UgdGhlIHByb3ZpZGVkIG91dHB1dCBzaGFwZS5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgZGltZW5zaW9ucyBhcmUgMC1pbmRleGVkIGFuZCBzb3J0ZWQuIEFuIGV4YW1wbGU6XG4gKiBpblNoYXBlID0gWzQsIDEsIDNdXG4gKiBvdXRTaGFwZSA9IFs1LCA0LCAzLCAzXVxuICogcmVzdWx0ID0gWzFdLiBEaW1lbnNpb24gMSAoMm5kIGRpbWVuc2lvbiBvZiBpbnB1dCkgZ2V0cyBicm9hZGNhc3RlZCAxID0+IDMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCcm9hZGNhc3REaW1zID0gKGluU2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBvdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10pOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IGluUmFuayA9IGluU2hhcGUubGVuZ3RoO1xuICBjb25zdCBkaW1zOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGluUmFuazsgaSsrKSB7XG4gICAgY29uc3QgZGltID0gaW5SYW5rIC0gMSAtIGk7XG4gICAgY29uc3QgYSA9IGluU2hhcGVbZGltXSB8fCAxO1xuICAgIGNvbnN0IGIgPSBvdXRTaGFwZVtvdXRTaGFwZS5sZW5ndGggLSAxIC0gaV0gfHwgMTtcbiAgICBpZiAoYiA+IDEgJiYgYSA9PT0gMSkge1xuICAgICAgZGltcy51bnNoaWZ0KGRpbSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkaW1zO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleSwgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgSW5kaWNlc0hlbHBlciwgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zcG9zZUF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBwZXJtOiBudW1iZXJbXTtcbn1cblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNwb3NlIHJlcXVpcmVzIDEgaW5wdXQuJyk7XG4gIH1cbn07XG5cbmNvbnN0IGdldEFkanVzdGVkUGVybSA9IChpbnB1dFJhbms6IG51bWJlciwgcGVybTogbnVtYmVyW10pOiBudW1iZXJbXSA9PlxuICAgIChwZXJtICYmIHBlcm0ubGVuZ3RoICE9PSBpbnB1dFJhbmspID8gWy4uLihuZXcgQXJyYXkoaW5wdXRSYW5rKS5rZXlzKCkpXS5yZXZlcnNlKCkgOiBwZXJtO1xuXG5jb25zdCBnZXRPdXRwdXRTaGFwZSA9IChpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgcGVybTogbnVtYmVyW10pOiByZWFkb25seSBudW1iZXJbXSA9PlxuICAgIFNoYXBlVXRpbC5zb3J0QmFzZWRPblBlcm0oaW5wdXRTaGFwZSwgZ2V0QWRqdXN0ZWRQZXJtKGlucHV0U2hhcGUubGVuZ3RoLCBwZXJtKSk7XG5cbmNvbnN0IHBlcm1GdW5jdGlvbkJvZHkgPSAocGVybTogbnVtYmVyW10sIHJhbms6IG51bWJlciwgaW5wdXQ6IEluZGljZXNIZWxwZXIsIG91dHB1dDogSW5kaWNlc0hlbHBlcik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHJldmVyc2VGdW5jID0gW107XG4gIHJldmVyc2VGdW5jLnB1c2goYGZuIHBlcm0oaTogJHtvdXRwdXQudHlwZS5pbmRpY2VzfSkgLT4gJHtpbnB1dC50eXBlLmluZGljZXN9IHtcbiAgICB2YXIgYTogJHtpbnB1dC50eXBlLmluZGljZXN9O2ApO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbms7ICsraSkge1xuICAgIHJldmVyc2VGdW5jLnB1c2goaW5wdXQuaW5kaWNlc1NldCgnYScsIHBlcm1baV0sIGBpWyR7aX1dYCkpO1xuICB9XG4gIHJldmVyc2VGdW5jLnB1c2goJ3JldHVybiBhO30nKTtcbiAgcmV0dXJuIHJldmVyc2VGdW5jLmpvaW4oJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvID0gKGlucHV0VGVuc29yOiBUZW5zb3JWaWV3LCBwZXJtQXR0cjogbnVtYmVyW10pOiBQcm9ncmFtSW5mbyA9PiB7XG4gIGNvbnN0IGlucHV0RGF0YVR5cGUgPSBpbnB1dFRlbnNvci5kYXRhVHlwZTtcbiAgY29uc3QgaW5wdXRSYW5rID0gaW5wdXRUZW5zb3IuZGltcy5sZW5ndGg7XG4gIGNvbnN0IHBlcm0gPSBnZXRBZGp1c3RlZFBlcm0oaW5wdXRSYW5rLCBwZXJtQXR0cik7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gZ2V0T3V0cHV0U2hhcGUoaW5wdXRUZW5zb3IuZGltcywgcGVybSk7XG4gIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBpbnB1dERhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgpO1xuICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ2EnLCBpbnB1dERhdGFUeXBlLCBpbnB1dFJhbmspO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ291dHB1dF9zaXplJywgJ3UzMicpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIG91dHB1dCl9XG5cbiAgJHtwZXJtRnVuY3Rpb25Cb2R5KHBlcm0sIGlucHV0UmFuaywgaW5wdXQsIG91dHB1dCl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0X3NpemUnKX1cblxuICAgIGxldCBpbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuICAgIGxldCBhSW5kaWNlcyA9IHBlcm0oaW5kaWNlcyk7XG5cbiAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIGlucHV0LmdldEJ5SW5kaWNlcygnYUluZGljZXMnKSl9XG4gIH1gO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdUcmFuc3Bvc2UnLFxuICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7cGVybUF0dHJ9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuayddfSxcbiAgICBnZXRSdW5EYXRhOiAoaW5wdXRzKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICBwcm9ncmFtVW5pZm9ybXM6XG4gICAgICAgICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBvdXRwdXRTaGFwZSldLFxuICAgICAgfTtcbiAgICB9LFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc3Bvc2UgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFRyYW5zcG9zZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIGF0dHJpYnV0ZXMucGVybSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVHJhbnNwb3NlQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFRyYW5zcG9zZUF0dHJpYnV0ZXMgPT5cbiAgICBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoe3Blcm06IGF0dHJpYnV0ZXMucGVybSBhcyBudW1iZXJbXX0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtU2hhZGVyQ2FjaGVJbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7aW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtjcmVhdGVSZWR1Y2VBdHRyaWJ1dGVzRnJvbUlucHV0cywgUmVkdWNlQXR0cmlidXRlc30gZnJvbSAnLi9yZWR1Y2UnO1xuaW1wb3J0IHtjcmVhdGVUcmFuc3Bvc2VQcm9ncmFtSW5mb30gZnJvbSAnLi90cmFuc3Bvc2UnO1xuXG5jb25zdCByZWR1Y2VPcHM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICBtYXg6ICdzZWxlY3QoYmVzdFZhbHVlLCBjYW5kaWRhdGUsIGNhbmRpZGF0ZSA+IGJlc3RWYWx1ZSknLFxuICBtaW46ICdzZWxlY3QoYmVzdFZhbHVlLCBjYW5kaWRhdGUsIGNhbmRpZGF0ZSA8IGJlc3RWYWx1ZSknLFxuICBtZWFuOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlJyxcbiAgc3VtOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlJyxcbiAgcHJvZDogJ2Jlc3RWYWx1ZSAqIGNhbmRpZGF0ZScsXG4gIHN1bVNxdWFyZTogJ2Jlc3RWYWx1ZSArIGNhbmRpZGF0ZSAqIGNhbmRpZGF0ZScsXG4gIGxvZ1N1bUV4cDogJ2Jlc3RWYWx1ZSArIGV4cChjYW5kaWRhdGUpJyxcbiAgbDE6ICdiZXN0VmFsdWUgKyBhYnMoY2FuZGlkYXRlKScsXG4gIGwyOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlICogY2FuZGlkYXRlJyxcbiAgbG9nU3VtOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlJ1xufTtcblxuY29uc3QgcmVkdWNlU2hhcmVkT3BzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHtcbiAgbWF4OiAnc2VsZWN0KGJlc3RWYWx1ZSwgY2FuZGlkYXRlLCBjYW5kaWRhdGUgPiBiZXN0VmFsdWUpJyxcbiAgbWluOiAnc2VsZWN0KGJlc3RWYWx1ZSwgY2FuZGlkYXRlLCBjYW5kaWRhdGUgPCBiZXN0VmFsdWUpJyxcbiAgbWVhbjogJ2Jlc3RWYWx1ZSArIGNhbmRpZGF0ZScsXG4gIHN1bTogJ2Jlc3RWYWx1ZSArIGNhbmRpZGF0ZScsXG4gIHByb2Q6ICdiZXN0VmFsdWUgKiBjYW5kaWRhdGUnLFxuICBzdW1TcXVhcmU6ICdiZXN0VmFsdWUgKyBjYW5kaWRhdGUnLFxuICBsb2dTdW1FeHA6ICdiZXN0VmFsdWUgKyBjYW5kaWRhdGUnLFxuICBsMTogJ2Jlc3RWYWx1ZSArIGNhbmRpZGF0ZScsXG4gIGwyOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlJyxcbiAgbG9nU3VtOiAnYmVzdFZhbHVlICsgY2FuZGlkYXRlJ1xufTtcblxuY29uc3QgcmVkdWNlSW5pdFZhbHVlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7XG4gIG1heDogJ19BW29mZnNldF0nLFxuICBtaW46ICdfQVtvZmZzZXRdJyxcbiAgbWVhbjogJzAnLFxuICBzdW06ICcwJyxcbiAgcHJvZDogJzEnLFxuICBzdW1TcXVhcmU6ICcwJyxcbiAgbG9nU3VtRXhwOiAnMCcsXG4gIGwxOiAnMCcsXG4gIGwyOiAnMCcsXG4gIGxvZ1N1bTogJzAnXG59O1xuXG5jb25zdCByZWR1Y2VPdXRwdXRWYWx1ZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICBtYXg6ICdiZXN0VmFsdWUnLFxuICBtaW46ICdiZXN0VmFsdWUnLFxuICBzdW06ICdiZXN0VmFsdWUnLFxuICBwcm9kOiAnYmVzdFZhbHVlJyxcbiAgc3VtU3F1YXJlOiAnYmVzdFZhbHVlJyxcbiAgbG9nU3VtRXhwOiAnbG9nKGJlc3RWYWx1ZSknLFxuICBsMTogJ2Jlc3RWYWx1ZScsXG4gIGwyOiAnc3FydChiZXN0VmFsdWUpJyxcbiAgbG9nU3VtOiAnbG9nKGJlc3RWYWx1ZSknXG59O1xuXG5jb25zdCBnZXRJbm5lck1vc3RBeGVzID0gKG51bUlubmVyQXhlczogbnVtYmVyLCByYW5rOiBudW1iZXIpOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmb3IgKGxldCBpID0gcmFuayAtIG51bUlubmVyQXhlczsgaSA8IHJhbms7ICsraSkge1xuICAgIHJlcy5wdXNoKGkpO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5jb25zdCBjb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzID0gKHNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgYXhlczogcmVhZG9ubHkgbnVtYmVyW10pOiBbbnVtYmVyW10sIG51bWJlcltdXSA9PiB7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gW107XG4gIGNvbnN0IHJhbmsgPSBzaGFwZS5sZW5ndGg7XG4gIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IHJhbms7IGRpbSsrKSB7XG4gICAgaWYgKGF4ZXMuaW5kZXhPZihkaW0pID09PSAtMSkge1xuICAgICAgb3V0cHV0U2hhcGUucHVzaChzaGFwZVtkaW1dKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVkdWNlU2hhcGUgPSBheGVzLm1hcChkaW0gPT4gc2hhcGVbZGltXSk7XG4gIHJldHVybiBbb3V0cHV0U2hhcGUsIHJlZHVjZVNoYXBlXTtcbn07XG5cbmNvbnN0IGV4cGFuZFNoYXBlVG9LZWVwRGltID0gKHNoYXBlOiBudW1iZXJbXSwgYXhlczogbnVtYmVyW10pOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHJhbmsgPSBzaGFwZS5sZW5ndGggKyBheGVzLmxlbmd0aDtcbiAgY29uc3QgZXhwYW5kU2hhcGUgPSBbXTtcbiAgbGV0IHNoYXBlSWR4ID0gMDtcbiAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgcmFuazsgZGltKyspIHtcbiAgICBpZiAoYXhlcy5pbmRleE9mKGRpbSkgPT09IC0xKSB7XG4gICAgICBleHBhbmRTaGFwZS5wdXNoKHNoYXBlW3NoYXBlSWR4KytdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwYW5kU2hhcGUucHVzaCgxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cGFuZFNoYXBlO1xufTtcblxuY29uc3QgYXJlQXhlc0lubmVyTW9zdERpbXMgPSAoYXhlczogbnVtYmVyW10sIHJhbms6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGF4ZXMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoYXhlc1theGVzLmxlbmd0aCAtIGkgLSAxXSAhPT0gcmFuayAtIDEgLSBpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgZ2V0QXhlc1Blcm11dGF0aW9uID0gKGF4ZXM6IG51bWJlcltdLCByYW5rOiBudW1iZXIpOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBpZiAoIWFyZUF4ZXNJbm5lck1vc3REaW1zKGF4ZXMsIHJhbmspKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5rOyArK2kpIHtcbiAgICAgIGlmIChheGVzLmluZGV4T2YoaSkgPT09IC0xKSB7XG4gICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgfVxuICAgIH1cbiAgICBheGVzLmZvckVhY2goYXhpcyA9PiByZXMucHVzaChheGlzKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSZWR1Y2VTaGFyZWRQcm9ncmFtSW5mbyA9XG4gICAgKG5hbWU6IHN0cmluZywgc2hhZGVyQ2FjaGU6IFByb2dyYW1TaGFkZXJDYWNoZUluZm8sIGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCByZWR1Y2VUeXBlOiBzdHJpbmcsXG4gICAgIG91dHB1dERhdGFUeXBlOiBEYXRhVHlwZSwgb3V0cHV0U2hhcGU6IG51bWJlcltdLCByZWR1Y2VTaGFwZTogbnVtYmVyW10pOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG5cbiAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICBjb25zdCByZWR1Y2VTaXplID0gU2hhcGVVdGlsLnNpemUocmVkdWNlU2hhcGUpO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ19BJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dFNoYXBlKTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBvdXRwdXREYXRhVHlwZSwgb3V0cHV0U2hhcGUpO1xuXG4gICAgICBjb25zdCB3b3JrZ3JvdXBTaXplID0gMzI7XG5cbiAgICAgIGNvbnN0IHNoYXJlZE1lbW9yeVNuaXBwZXQgPSBgXG4gICAgICAgICAgdmFyPHdvcmtncm91cD4gYUJlc3RWYWx1ZXMgOiBhcnJheTxmMzIsICR7d29ya2dyb3VwU2l6ZX0+O1xuICAgICAgIGA7XG5cbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ3JlZHVjZVNpemUnLCAndTMyJykuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAgICAgJHtzaGFyZWRNZW1vcnlTbmlwcGV0fVxuICAgICAgICBmbiBESVZfQ0VJTChhIDogdTMyLCBiIDogdTMyKSAtPiB1MzIge1xuICAgICAgICAgIHJldHVybiAoKGEgLSAxdSkgLyBiICsgMXUpO1xuICAgICAgICAgfVxuICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KHdvcmtncm91cFNpemUpfVxuXG4gICAgICAgICAgbGV0IG91dHB1dEluZGV4ID0gZ2xvYmFsX2lkeCAvICR7d29ya2dyb3VwU2l6ZX07XG4gICAgICAgICAgbGV0IG9mZnNldCA9IG91dHB1dEluZGV4ICogdW5pZm9ybXMucmVkdWNlU2l6ZTtcblxuICAgICAgICAgIHZhciBiZXN0VmFsdWUgPSBmMzIoJHtyZWR1Y2VJbml0VmFsdWVzW3JlZHVjZVR5cGVdfSk7XG4gICAgICAgICAgbGV0IExlbmd0aCA9IHVuaWZvcm1zLnJlZHVjZVNpemU7XG4gICAgICAgICAgZm9yICh2YXIgayA9IGxvY2FsX2lkeDsgayA8IExlbmd0aDsgayA9IGsgKyAke3dvcmtncm91cFNpemV9KSB7XG4gICAgICAgICAgIGxldCBjYW5kaWRhdGUgPSBmMzIoJHtpbnB1dC5nZXRCeU9mZnNldCgnb2Zmc2V0ICsgaycpfSk7XG4gICAgICAgICAgIGJlc3RWYWx1ZSA9ICR7cmVkdWNlT3BzW3JlZHVjZVR5cGVdfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYUJlc3RWYWx1ZXNbbG9jYWxfaWR4XSA9IGJlc3RWYWx1ZTtcbiAgICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAgICAgIHZhciByZWR1Y2VTaXplID0gbWluKExlbmd0aCwgJHt3b3JrZ3JvdXBTaXplfXUpO1xuICAgICAgICAgZm9yICh2YXIgY3VycmVudFNpemUgPSByZWR1Y2VTaXplIC8gMnU7IHJlZHVjZVNpemUgPiAxdTtcbiAgICAgICAgICAgICBjdXJyZW50U2l6ZSA9IHJlZHVjZVNpemUgLyAydSkge1xuICAgICAgICAgICBsZXQgaW50ZXJ2YWwgPSBESVZfQ0VJTChyZWR1Y2VTaXplLCAydSk7XG4gICAgICAgICAgIGlmIChsb2NhbF9pZHggPCBjdXJyZW50U2l6ZSkge1xuICAgICAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IGFCZXN0VmFsdWVzW2xvY2FsX2lkeCArIGludGVydmFsXTtcbiAgICAgICAgICAgIGJlc3RWYWx1ZSA9ICR7cmVkdWNlU2hhcmVkT3BzW3JlZHVjZVR5cGVdfTtcbiAgICAgICAgICAgIGFCZXN0VmFsdWVzW2xvY2FsX2lkeF0gPSBiZXN0VmFsdWU7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmVkdWNlU2l6ZSA9IGludGVydmFsO1xuICAgICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgICAgICB9XG5cbiAgICAgICAgIGlmIChsb2NhbF9pZHggPT0gMHUpIHtcbiAgICAgICAgICAke1xuICAgICAgICAgIG91dHB1dC5zZXRCeU9mZnNldChcbiAgICAgICAgICAgICAgJ291dHB1dEluZGV4JyxcbiAgICAgICAgICAgICAgYCR7XG4gICAgICAgICAgICAgICAgICByZWR1Y2VUeXBlID09PSAnbWVhbicgPyBgJHtvdXRwdXQudHlwZS5zdG9yYWdlfShiZXN0VmFsdWUgLyBmMzIodW5pZm9ybXMucmVkdWNlU2l6ZSkpYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtvdXRwdXQudHlwZS5zdG9yYWdlfSgke3JlZHVjZU91dHB1dFZhbHVlc1tyZWR1Y2VUeXBlXX0pYH1gKX07XG4gICAgICAgICB9XG4gICAgICAgIH1gO1xuXG4gICAgICAvLyBPbmUgd29yayBncm91cCBpcyByZXNwb25zaWJsZSBmb3Igb25seSBvbmUgZWxlbWVudCBvZiBvdXRwdXQuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBzaGFkZXJDYWNoZSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBvdXRwdXREYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBvdXRwdXRTaXplfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IFt7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiByZWR1Y2VTaXplfV1cbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH07XG5cbmNvbnN0IHJlZHVjZUNvbW1vbiA9XG4gICAgKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBuYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMsXG4gICAgIHJlZHVjZVR5cGU6ICdzdW0nfCdzdW1TcXVhcmUnfCdwcm9kJ3wnbWluJ3wnbWF4J3wnbWVhbid8J2xvZ1N1bUV4cCd8J2wxJ3wnbDInfCdsb2dTdW0nKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkQXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyA9XG4gICAgICAgICAgY29udGV4dC5pbnB1dHMubGVuZ3RoID09PSAxID8gYXR0cmlidXRlcyA6IGNyZWF0ZVJlZHVjZUF0dHJpYnV0ZXNGcm9tSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcblxuICAgICAgbGV0IHVwZGF0ZWRBeGVzID0gdXBkYXRlZEF0dHJpYnV0ZXMuYXhlcztcbiAgICAgIGlmICh1cGRhdGVkQXhlcy5sZW5ndGggPT09IDAgJiYgIXVwZGF0ZWRBdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSB7XG4gICAgICAgIHVwZGF0ZWRBeGVzID0gY29udGV4dC5pbnB1dHNbMF0uZGltcy5tYXAoKF9kaW0sIGkpID0+IGkpO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9ybWFsaXplQXhlcyA9IFNoYXBlVXRpbC5ub3JtYWxpemVBeGVzKHVwZGF0ZWRBeGVzLCBjb250ZXh0LmlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG5cbiAgICAgIGxldCBheGVzID0gbm9ybWFsaXplQXhlcztcbiAgICAgIGxldCBpbnB1dCA9IGNvbnRleHQuaW5wdXRzWzBdO1xuICAgICAgY29uc3QgcGVybXV0ZWRBeGVzID0gZ2V0QXhlc1Blcm11dGF0aW9uKGF4ZXMsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXMubGVuZ3RoKTtcbiAgICAgIGlmIChwZXJtdXRlZEF4ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpbnB1dCA9IGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBwZXJtdXRlZEF4ZXMpLCB7aW5wdXRzOiBbMF0sIG91dHB1dHM6IFstMV19KVswXTtcbiAgICAgICAgYXhlcyA9IGdldElubmVyTW9zdEF4ZXMoYXhlcy5sZW5ndGgsIGlucHV0LmRpbXMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW291dHB1dFNoYXBlLCByZWR1Y2VTaGFwZV0gPSBjb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKGlucHV0LmRpbXMsIGF4ZXMpO1xuICAgICAgbGV0IGZpbmFsT3V0cHV0U2hhcGUgPSBvdXRwdXRTaGFwZTtcbiAgICAgIGlmICh1cGRhdGVkQXR0cmlidXRlcy5rZWVwRGltcykge1xuICAgICAgICBmaW5hbE91dHB1dFNoYXBlID0gZXhwYW5kU2hhcGVUb0tlZXBEaW0ob3V0cHV0U2hhcGUsIG5vcm1hbGl6ZUF4ZXMpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlUmVkdWNlU2hhcmVkUHJvZ3JhbUluZm8oXG4gICAgICAgICAgICAgIG5hbWUsIHtoaW50OiB1cGRhdGVkQXR0cmlidXRlcy5jYWNoZUtleSwgaW5wdXREZXBlbmRlbmNpZXM6IFsndHlwZSddfSwgW2lucHV0XSwgcmVkdWNlVHlwZSxcbiAgICAgICAgICAgICAgY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUsIGZpbmFsT3V0cHV0U2hhcGUsIHJlZHVjZVNoYXBlKSxcbiAgICAgICAgICB7aW5wdXRzOiBbaW5wdXRdfSk7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IHJlZHVjZU1lYW5TaGFyZWQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgcmVkdWNlQ29tbW9uKGNvbnRleHQsICdSZWR1Y2VNZWFuU2hhcmVkJywgYXR0cmlidXRlcywgJ21lYW4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VMMVNoYXJlZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICByZWR1Y2VDb21tb24oY29udGV4dCwgJ1JlZHVjZUwxU2hhcmVkJywgYXR0cmlidXRlcywgJ2wxJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVkdWNlTDJTaGFyZWQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgcmVkdWNlQ29tbW9uKGNvbnRleHQsICdSZWR1Y2VMMlNoYXJlZCcsIGF0dHJpYnV0ZXMsICdsMicpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZHVjZUxvZ1N1bUV4cFNoYXJlZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICByZWR1Y2VDb21tb24oY29udGV4dCwgJ1JlZHVjZUxvZ1N1bUV4cFNoYXJlZCcsIGF0dHJpYnV0ZXMsICdsb2dTdW1FeHAnKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VNYXhTaGFyZWQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgcmVkdWNlQ29tbW9uKGNvbnRleHQsICdSZWR1Y2VNYXhTaGFyZWQnLCBhdHRyaWJ1dGVzLCAnbWF4Jyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVkdWNlTWluU2hhcmVkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHJlZHVjZUNvbW1vbihjb250ZXh0LCAnUmVkdWNlTWluU2hhcmVkJywgYXR0cmlidXRlcywgJ21pbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZHVjZVByb2RTaGFyZWQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgcmVkdWNlQ29tbW9uKGNvbnRleHQsICdSZWR1Y2VQcm9kU2hhcmVkJywgYXR0cmlidXRlcywgJ3Byb2QnKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VTdW1TaGFyZWQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgcmVkdWNlQ29tbW9uKGNvbnRleHQsICdSZWR1Y2VTdW1TaGFyZWQnLCBhdHRyaWJ1dGVzLCAnc3VtJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVkdWNlU3VtU3F1YXJlU2hhcmVkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHJlZHVjZUNvbW1vbihjb250ZXh0LCAnUmVkdWNlU3VtU3F1YXJlU2hhcmVkJywgYXR0cmlidXRlcywgJ3N1bVNxdWFyZScpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZHVjZUxvZ1N1bVNoYXJlZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICByZWR1Y2VDb21tb24oY29udGV4dCwgJ1JlZHVjZUxvZ1N1bVNoYXJlZCcsIGF0dHJpYnV0ZXMsICdsb2dTdW0nKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtU2hhZGVyQ2FjaGVJbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIEluZGljZXNIZWxwZXIsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXJ9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7cmVkdWNlTDFTaGFyZWQsIHJlZHVjZUwyU2hhcmVkLCByZWR1Y2VMb2dTdW1FeHBTaGFyZWQsIHJlZHVjZUxvZ1N1bVNoYXJlZCwgcmVkdWNlTWF4U2hhcmVkLCByZWR1Y2VNZWFuU2hhcmVkLCByZWR1Y2VNaW5TaGFyZWQsIHJlZHVjZVByb2RTaGFyZWQsIHJlZHVjZVN1bVNoYXJlZCwgcmVkdWNlU3VtU3F1YXJlU2hhcmVkfSBmcm9tICcuL3JlZHVjZS1zaGFyZWQnO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoID09PSAwIHx8IGlucHV0cy5sZW5ndGggPiAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2Ugb3AgcmVxdWlyZXMgMSBvciAyIGlucHV0cy4nKTtcbiAgfVxuXG4gIGlmIChpbnB1dHMubGVuZ3RoID09PSAyICYmIGlucHV0c1sxXS5kaW1zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBheGVzIGlucHV0IGRpbXMuJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkdWNlQXR0cmlidXRlcyBleHRlbmRzIEF0dHJpYnV0ZVdpdGhDYWNoZUtleSB7XG4gIGtlZXBEaW1zOiBib29sZWFuO1xuICBub29wV2l0aEVtcHR5QXhlczogYm9vbGVhbjtcbiAgYXhlczogbnVtYmVyW107XG59XG5cbmV4cG9ydCB0eXBlIFJlZHVjZU9wID1cbiAgICAoaW5wdXQ6IEluZGljZXNIZWxwZXIsIG91dHB1dDogSW5kaWNlc0hlbHBlcixcbiAgICAgYXhlczogcmVhZG9ubHkgbnVtYmVyW10pID0+IFtzdHJpbmcsIHN0cmluZywgc3RyaW5nLCBzdHJpbmcsIC4uLnN0cmluZ1tdXTtcblxuY29uc3Qgbm9PcDogUmVkdWNlT3AgPSAoaW5wdXQpID0+IFsnJywgJycsIGB2YXIgdmFsdWUgPSAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfTtgLCAnJ107XG5leHBvcnQgY29uc3QgY3JlYXRlUmVkdWNlUHJvZ3JhbUluZm8gPVxuICAgIChuYW1lOiBzdHJpbmcsIHNoYWRlckNhY2hlOiBQcm9ncmFtU2hhZGVyQ2FjaGVJbmZvLCBpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgcmVkdWNlT3A6IFJlZHVjZU9wLFxuICAgICBheGVzSW5wdXQ6IG51bWJlcltdLCBvdXRwdXREYXRhVHlwZTogRGF0YVR5cGUsIGtlZXBEaW1zID0gZmFsc2UsIG5vb3BXaXRoRW1wdHlBeGVzID0gZmFsc2UpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IGlucHV0UmFuayA9IGlucHV0U2hhcGUubGVuZ3RoO1xuICAgICAgY29uc3QgYXhlcyA9IFNoYXBlVXRpbC5ub3JtYWxpemVBeGVzKGF4ZXNJbnB1dCwgaW5wdXRSYW5rKTtcbiAgICAgIGNvbnN0IHJlZHVjZU9uQWxsQXhlcyA9ICFub29wV2l0aEVtcHR5QXhlcyAmJiBheGVzLmxlbmd0aCA9PT0gMDtcbiAgICAgIGlucHV0U2hhcGUuZm9yRWFjaCgoZCwgaSkgPT4ge1xuICAgICAgICBpZiAocmVkdWNlT25BbGxBeGVzIHx8IGF4ZXMuaW5kZXhPZihpKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKGtlZXBEaW1zKSB7XG4gICAgICAgICAgICBvdXRwdXRTaGFwZS5wdXNoKDEpO1xuICAgICAgICAgIH0gIC8vIGVsc2UgeyAvLyBza2lwIHRoaXMgYXhpc31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXRTaGFwZS5wdXNoKGQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG91dHB1dFJhbmsgPSBvdXRwdXRTaGFwZS5sZW5ndGg7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkeENvcHk6IHN0cmluZ1tdID0gW107ICAvLyBjb3B5IG91dHB1dCBpbmRleGVzIHRvIGlucHV0IGluZGV4ZXNcblxuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ19BJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dFJhbmspO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0Jywgb3V0cHV0RGF0YVR5cGUsIG91dHB1dFJhbmspO1xuICAgICAgICBjb25zdCBvcHMgPSByZWR1Y2VPcChpbnB1dCwgb3V0cHV0LCBheGVzKTtcbiAgICAgICAgbGV0IHJlZHVjZU9wcyA9IG9wc1syXTtcblxuICAgICAgICBmb3IgKGxldCBrID0gMCwgbCA9IDA7IGsgPCBpbnB1dFJhbms7IGsrKykge1xuICAgICAgICAgIC8vIGlmIHRoaXMgYXhpcyBpcyByZWR1Y2VkXG4gICAgICAgICAgaWYgKHJlZHVjZU9uQWxsQXhlcyB8fCBheGVzLmluZGV4T2YoaykgPj0gMCkge1xuICAgICAgICAgICAgaWYgKGtlZXBEaW1zKSB7XG4gICAgICAgICAgICAgIGwrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGxvb3Agb3ZlciB0aGUgZC10aCBheGlzXG4gICAgICAgICAgICByZWR1Y2VPcHMgPSBgZm9yKHZhciBqJHtrfTogdTMyID0gMDsgaiR7a30gPCAke2lucHV0U2hhcGVba119OyBqJHtrfSsrKSB7XG4gICAgICAgICAgICAgICAgICAke29wc1syXS5pbmNsdWRlcygnbGFzdF9pbmRleCcpID8gYGxldCBsYXN0X2luZGV4ID0gaiR7a307YCA6ICcnfVxuICAgICAgICAgICAgICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KCdpbnB1dF9pbmRpY2VzJywgaywgYGoke2t9YCl9XG4gICAgICAgICAgICAgICAgICAke3JlZHVjZU9wc31cbiAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWR4Q29weS5wdXNoKGAke2lucHV0LmluZGljZXNTZXQoJ2lucHV0X2luZGljZXMnLCBrLCBvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0X2luZGljZXMnLCBsKSl9O2ApO1xuICAgICAgICAgICAgbCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFxuXG4gICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgnb3V0cHV0X3NpemUnLCAndTMyJykuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cblxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRfc2l6ZScpfVxuICAgICAgICAgIHZhciBpbnB1dF9pbmRpY2VzOiAke2lucHV0LnR5cGUuaW5kaWNlc307XG4gICAgICAgICAgbGV0IG91dHB1dF9pbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuXG4gICAgICAgICAgJHtpZHhDb3B5LmpvaW4oJ1xcbicpfVxuICAgICAgICAgICR7b3BzWzBdfSAgICAgICAvLyBpbml0IG9wcyBmb3IgcmVkdWNlIG1heC9taW5cbiAgICAgICAgICAke29wc1sxXX1cbiAgICAgICAgICAke3JlZHVjZU9wc31cbiAgICAgICAgICAke29wc1szXX1cbiAgICAgICAgICAke29wcy5sZW5ndGggPT09IDQgPyBvdXRwdXQuc2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnLCAndmFsdWUnKSA6IG9wcy5zbGljZSg0KS5qb2luKCdcXG4nKX1cbiAgICAgICAgfWA7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBzaGFkZXJDYWNoZSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBvdXRwdXREYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zOlxuICAgICAgICAgICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIG91dHB1dFNoYXBlKV1cbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSZWR1Y2VBdHRyaWJ1dGVzRnJvbUlucHV0cyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogUmVkdWNlQXR0cmlidXRlcyA9PiB7XG4gICAgICBjb25zdCBheGVzOiBudW1iZXJbXSA9IFtdO1xuICAgICAgaWYgKGlucHV0c1sxXS5kaW1zWzBdID4gMCkge1xuICAgICAgICBpbnB1dHNbMV0uZ2V0QmlnSW50NjRBcnJheSgpLmZvckVhY2godiA9PiBheGVzLnB1c2goTnVtYmVyKHYpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KFxuICAgICAgICAgIHtheGVzLCBrZWVwRGltczogYXR0cmlidXRlcy5rZWVwRGltcywgbm9vcFdpdGhFbXB0eUF4ZXM6IGF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXN9KTtcbiAgICB9O1xuXG5jb25zdCBydW5SZWR1Y2VQcm9ncmFtID1cbiAgICAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIG5hbWU6IHN0cmluZywgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcywgcmVkdWNlT3A6IFJlZHVjZU9wKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBjb250ZXh0LmlucHV0cztcbiAgICAgIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzID1cbiAgICAgICAgICBpbnB1dHMubGVuZ3RoID09PSAxID8gYXR0cmlidXRlcyA6IGNyZWF0ZVJlZHVjZUF0dHJpYnV0ZXNGcm9tSW5wdXRzKGlucHV0cywgYXR0cmlidXRlcyk7XG5cbiAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVSZWR1Y2VQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgICAgbmFtZSwge2hpbnQ6IHVwZGF0ZWRBdHRyaWJ1dGVzLmNhY2hlS2V5LCBpbnB1dERlcGVuZGVuY2llczogWydyYW5rJ119LCBbaW5wdXRzWzBdXSxcbiAgICAgICAgICAgICAgdXBkYXRlZEF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMgJiYgdXBkYXRlZEF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPT09IDAgPyBub09wIDogcmVkdWNlT3AsXG4gICAgICAgICAgICAgIHVwZGF0ZWRBdHRyaWJ1dGVzLmF4ZXMsIGlucHV0c1swXS5kYXRhVHlwZSwgdXBkYXRlZEF0dHJpYnV0ZXMua2VlcERpbXMsXG4gICAgICAgICAgICAgIHVwZGF0ZWRBdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSxcbiAgICAgICAgICB7aW5wdXRzOiBbMF19KTtcbiAgICB9O1xuXG5jb25zdCByZWR1Y2VMb2dTdW1OYWl2ZSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IHJlZHVjZU9wOiBSZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0KSA9PlxuICAgICAgW2B2YXIgdmFsdWUgPSAke291dHB1dC50eXBlLnN0b3JhZ2V9KDApO2AsXG4gICAgICAgJycsXG4gICAgICAgYHZhbHVlICs9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9O2AsXG4gICAgICAgJ3ZhbHVlID0gbG9nKHZhbHVlKTsnLFxuICBdO1xuICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsICdSZWR1Y2VMb2dTdW0nLCBhdHRyaWJ1dGVzLCByZWR1Y2VPcCk7XG59O1xuXG5jb25zdCByZWR1Y2VMMU5haXZlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgcmVkdWNlT3A6IFJlZHVjZU9wID0gKGlucHV0LCBvdXRwdXQpID0+XG4gICAgICBbYHZhciB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oMCk7YCxcbiAgICAgICAnJyxcbiAgICAgICBgdmFsdWUgKz0gYWJzKCR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9KTtgLFxuICAgICAgICcnLFxuICBdO1xuICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsICdSZWR1Y2VMMScsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbn07XG5cbmNvbnN0IHJlZHVjZUwyTmFpdmUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb25zdCByZWR1Y2VPcDogUmVkdWNlT3AgPSAoaW5wdXQsIG91dHB1dCkgPT5cbiAgICAgIFtgdmFyIHQgPSAke291dHB1dC50eXBlLnZhbHVlfSgwKTsgdmFyIHZhbHVlID0gJHtvdXRwdXQudHlwZS52YWx1ZX0oMCk7YCxcbiAgICAgICAnJyxcbiAgICAgICBgdCA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9OyB2YWx1ZSArPSAodCAqIHQpO2AsXG4gICAgICAgJ3ZhbHVlID0gc3FydCh2YWx1ZSk7JyxcbiAgXTtcbiAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCAnUmVkdWNlTDInLCBhdHRyaWJ1dGVzLCByZWR1Y2VPcCk7XG59O1xuXG5jb25zdCByZWR1Y2VMb2dTdW1FeHBOYWl2ZSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IHJlZHVjZU9wOiBSZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0KSA9PlxuICAgICAgW2B2YXIgdmFsdWUgPSAke291dHB1dC50eXBlLnN0b3JhZ2V9KDApO2AsXG4gICAgICAgJycsXG4gICAgICAgYHZhbHVlICs9IGV4cCgke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfSk7YCxcbiAgICAgICAndmFsdWUgPSBsb2codmFsdWUpOycsXG4gIF07XG4gIHJ1blJlZHVjZVByb2dyYW0oY29udGV4dCwgJ1JlZHVjZUxvZ1N1bUV4cCcsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbn07XG5cbmNvbnN0IHJlZHVjZU1heE5haXZlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgcmVkdWNlT3A6IFJlZHVjZU9wID0gKGlucHV0LCBfb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgY29uc3QgaWR4WmVybyA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaW5wdXQucmFuazsgaysrKSB7XG4gICAgICBpZiAoYXhlcy5pbmRleE9mKGspID49IDAgfHwgYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWR4WmVyby5wdXNoKGlucHV0LmluZGljZXNTZXQoJ2lucHV0X2luZGljZXMnLCBrLCAwKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIGAke2lkeFplcm8uam9pbignXFxuJyl9YCxcbiAgICAgIGB2YXIgdmFsdWUgPSAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfTtgLFxuICAgICAgYHZhbHVlID0gbWF4KHZhbHVlLCAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfSk7YCxcbiAgICAgICcnLFxuICAgIF07XG4gIH07XG4gIHJ1blJlZHVjZVByb2dyYW0oY29udGV4dCwgJ1JlZHVjZU1heCcsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbn07XG5cbmNvbnN0IHJlZHVjZU1lYW5OYWl2ZSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IHJlZHVjZU9wOiBSZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgbGV0IHNpemUgPSAxLjA7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBpbnB1dC5yYW5rOyBrKyspIHtcbiAgICAgIGlmIChheGVzLmluZGV4T2YoaykgPj0gMCB8fCBheGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBUT0RPOiB0aGlzIGRlcGVuZHMgb24gdGhlIGlucHV0IGRpbXMuIElmIHdlIHdhbnQgdG8gdXNlIHVuaWZvcm0sIHRoaXMgbmVlZCB0byBiZSB1cGRhdGVkLlxuICAgICAgICBzaXplICo9IGNvbnRleHQuaW5wdXRzWzBdLmRpbXNba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICd2YXIgc3VtID0gZjMyKDApOycsXG4gICAgICAnJyxcbiAgICAgIGBzdW0gKz0gZjMyKCR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9KTtgLFxuICAgICAgYGxldCB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KHN1bSAvICR7c2l6ZX0pO2AsXG4gICAgXTtcbiAgfTtcbiAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCAnUmVkdWNlTWVhbicsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbn07XG5cbmNvbnN0IHJlZHVjZU1pbk5haXZlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgcmVkdWNlT3A6IFJlZHVjZU9wID0gKGlucHV0LCBfb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgY29uc3QgaWR4WmVybyA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaW5wdXQucmFuazsgaysrKSB7XG4gICAgICBpZiAoYXhlcy5pbmRleE9mKGspID49IDAgfHwgYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWR4WmVyby5wdXNoKGBpbnB1dF9pbmRpY2VzWyR7a31dID0gMDtgKTsgIC8vIGZpcnN0IGVsZW1lbnRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgYCR7aWR4WmVyby5qb2luKCdcXG4nKX1gLFxuICAgICAgYHZhciB2YWx1ZSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9O2AsXG4gICAgICBgdmFsdWUgPSBtaW4odmFsdWUsICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9KTtgLFxuICAgICAgJycsXG4gICAgXTtcbiAgfTtcbiAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCAnUmVkdWNlTWluJywgYXR0cmlidXRlcywgcmVkdWNlT3ApO1xufTtcblxuY29uc3QgcmVkdWNlUHJvZE5haXZlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgcmVkdWNlT3A6IFJlZHVjZU9wID0gKGlucHV0LCBvdXRwdXQpID0+XG4gICAgICBbYHZhciB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oMSk7YCxcbiAgICAgICAnJyxcbiAgICAgICBgdmFsdWUgKj0gJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0X2luZGljZXMnKX07YCxcbiAgICAgICAnJyxcbiAgXTtcbiAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCAnUmVkdWNlUHJvZCcsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbn07XG5cbmNvbnN0IHJlZHVjZVN1bU5haXZlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgcmVkdWNlT3A6IFJlZHVjZU9wID0gKGlucHV0LCBvdXRwdXQpID0+XG4gICAgICBbYHZhciB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oMCk7YCxcbiAgICAgICAnJyxcbiAgICAgICBgdmFsdWUgKz0gJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0X2luZGljZXMnKX07YCxcbiAgICAgICAnJyxcbiAgXTtcbiAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCAnUmVkdWNlU3VtJywgYXR0cmlidXRlcywgcmVkdWNlT3ApO1xufTtcblxuY29uc3QgcmVkdWNlU3VtU3F1YXJlTmFpdmUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb25zdCByZWR1Y2VPcDogUmVkdWNlT3AgPSAoaW5wdXQsIG91dHB1dCkgPT5cbiAgICAgIFtgdmFyIHQgPSAke291dHB1dC50eXBlLnZhbHVlfSgwKTsgdmFyIHZhbHVlID0gJHtvdXRwdXQudHlwZS52YWx1ZX0oMCk7YCxcbiAgICAgICAnJyxcbiAgICAgICBgdCA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9OyB2YWx1ZSArPSB0ICogdDtgLFxuICAgICAgICcnLFxuICBdO1xuICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsICdSZWR1Y2VTdW1TcXVhcmUnLCBhdHRyaWJ1dGVzLCByZWR1Y2VPcCk7XG59O1xuXG5jb25zdCB1c2VOYWl2ZVJlZHVjZU1ldGhvZCA9XG4gICAgKHNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgYXhlczogcmVhZG9ubHkgbnVtYmVyW10sIG5vb3BXaXRoRW1wdHlBeGVzOiBib29sZWFuKTogYm9vbGVhbiA9PiB7XG4gICAgICBpZiAoYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5vb3BXaXRoRW1wdHlBeGVzO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3V0cHV0U2l6ZSA9IDE7XG4gICAgICBsZXQgcmVkdWNlU2l6ZSA9IDE7XG4gICAgICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBheGVzLmxlbmd0aDsgZGltKyspIHtcbiAgICAgICAgaWYgKGF4ZXMuaW5kZXhPZihkaW0pID09PSAtMSkge1xuICAgICAgICAgIG91dHB1dFNpemUgKj0gc2hhcGVbZGltXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWR1Y2VTaXplICo9IHNoYXBlW2RpbV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbmRpdGlvbiBkYXRhIGlzIHZlcnkgcm91Z2gsIGFsdGhvdWdoIGNvbnNpZGVyaW5nIHRoZSBjb3VudCBvZiBFeGVjdXRpb24gVW5pdCAoRVUpLCB0aGUgcG90ZW50aWFsXG4gICAgICAvLyB3b3JrIGdyb3VwcyBpbiBhIEVVIGFuZCB0aGUgY291bnRzIG9mIGxvb3BzIGluIHRoZSBuYWl2ZSBhbmQgc2hhcmVkIG1ldGhvZHMsIGFsc28gZG9pbmcgZXhwZXJpbWVudHNcbiAgICAgIC8vIG9uIHNvbWUgbWFjaGluZXMuXG4gICAgICByZXR1cm4gcmVkdWNlU2l6ZSA8IDMyICYmIG91dHB1dFNpemUgPiAxMDI0O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VNZWFuID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGlmICh1c2VOYWl2ZVJlZHVjZU1ldGhvZChjb250ZXh0LmlucHV0c1swXS5kaW1zLCBhdHRyaWJ1dGVzLmF4ZXMsIGF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMpKSB7XG4gICAgcmVkdWNlTWVhbk5haXZlKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlZHVjZU1lYW5TaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VMMSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBpZiAodXNlTmFpdmVSZWR1Y2VNZXRob2QoY29udGV4dC5pbnB1dHNbMF0uZGltcywgYXR0cmlidXRlcy5heGVzLCBhdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSkge1xuICAgIHJlZHVjZUwxTmFpdmUoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVkdWNlTDFTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VMMiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogUmVkdWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBpZiAodXNlTmFpdmVSZWR1Y2VNZXRob2QoY29udGV4dC5pbnB1dHNbMF0uZGltcywgYXR0cmlidXRlcy5heGVzLCBhdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSkge1xuICAgIHJlZHVjZUwyTmFpdmUoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVkdWNlTDJTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VMb2dTdW1FeHAgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VMb2dTdW1FeHBOYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VMb2dTdW1FeHBTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VNYXggPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VNYXhOYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VNYXhTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VNaW4gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VNaW5OYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VNaW5TaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VQcm9kID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZWR1Y2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGlmICh1c2VOYWl2ZVJlZHVjZU1ldGhvZChjb250ZXh0LmlucHV0c1swXS5kaW1zLCBhdHRyaWJ1dGVzLmF4ZXMsIGF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMpKSB7XG4gICAgcmVkdWNlUHJvZE5haXZlKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlZHVjZVByb2RTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VTdW0gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VTdW1OYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VTdW1TaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VTdW1TcXVhcmUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VTdW1TcXVhcmVOYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VTdW1TcXVhcmVTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VMb2dTdW0gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlZHVjZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICByZWR1Y2VMb2dTdW1OYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWR1Y2VMb2dTdW1TaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8vIFRPRE86IHRoaXMgaXMgdGhlIHNhbWUgbmFpdmUgaW1wbGVtZW50YXRpb24gd2UgdXNlIGZvciByZWR1Y2UgdGhhdCBoYXNcbi8vIHBlcmZvcm1hbmNlIGxpbWl0YXRpb25zIHdoZW4gdGhlIHJlZHVjZWQgYXhpcyBpcyBsb25nLiBOZWVkIHRvIGFkZFxuLy8gYSBvcHRpbWl6ZWQgY29kZXBhdGggZm9yIHRoaXMuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHR9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVSZWR1Y2VQcm9ncmFtSW5mbywgUmVkdWNlT3B9IGZyb20gJy4vcmVkdWNlJztcblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCA9PT0gMCB8fCBpbnB1dHMubGVuZ3RoID4gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignQXJnTWluTWF4T3Agb3AgcmVxdWlyZXMgMSBvciAyIGlucHV0cy4nKTtcbiAgfVxuICBpZiAoaW5wdXRzWzBdLmRhdGFUeXBlICE9PSBEYXRhVHlwZS5mbG9hdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB0eXBlLicpO1xuICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFyZ01pbk1heEF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICBrZWVwRGltczogYm9vbGVhbjtcbiAgYXhpczogbnVtYmVyO1xuICBzZWxlY3RMYXN0SW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGFyZ01pbiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogQXJnTWluTWF4QXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IGFyZ01pbk1heE9wOiBSZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgY29uc3QgaWR4WmVybyA9IFtdO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaW5wdXQucmFuazsgaysrKSB7XG4gICAgICBpZiAoYXhlcy5pbmRleE9mKGspID49IDAgfHwgYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWR4WmVyby5wdXNoKGBpbnB1dF9pbmRpY2VzWyR7a31dID0gMDtgKTsgIC8vIGZpcnN0IGVsZW1lbnRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIGAke2lkeFplcm8uam9pbignXFxuJyl9YCwgYHZhciB2YWx1ZSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9O1xcbnZhciBiZXN0X2luZGV4IDogaTMyID0gMDtgLFxuICAgICAgYGlmICgke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfSAke2F0dHJpYnV0ZXMuc2VsZWN0TGFzdEluZGV4ID4gMCA/ICc8PScgOiAnPCd9IHZhbHVlKSB7XG4gICAgICAgICB2YWx1ZSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9O1xuICAgICAgICAgYmVzdF9pbmRleCA9IGkzMihsYXN0X2luZGV4KTtcbiAgICAgICB9YCxcbiAgICAgICcnLCBvdXRwdXQuc2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnLCAnYmVzdF9pbmRleCcpXG4gICAgXTtcbiAgfTtcblxuICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICBjcmVhdGVSZWR1Y2VQcm9ncmFtSW5mbyhcbiAgICAgICAgICAnQXJnTWluJywge2hpbnQ6IGF0dHJpYnV0ZXMuY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnXX0sIFtjb250ZXh0LmlucHV0c1swXV0sIGFyZ01pbk1heE9wLFxuICAgICAgICAgIFthdHRyaWJ1dGVzLmF4aXNdLCBEYXRhVHlwZS5pbnQ2NCwgYXR0cmlidXRlcy5rZWVwRGltcyksXG4gICAgICB7aW5wdXRzOiBbMF19KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhcmdNYXggPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IEFyZ01pbk1heEF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb25zdCBhcmdNaW5NYXhPcDogUmVkdWNlT3AgPSAoaW5wdXQsIG91dHB1dCwgYXhlcykgPT4ge1xuICAgIGNvbnN0IGlkeFplcm8gPSBbXTtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGlucHV0LnJhbms7IGsrKykge1xuICAgICAgaWYgKGF4ZXMuaW5kZXhPZihrKSA+PSAwIHx8IGF4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlkeFplcm8ucHVzaChgaW5wdXRfaW5kaWNlc1ske2t9XSA9IDA7YCk7ICAvLyBmaXJzdCBlbGVtZW50XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICBgJHtpZHhaZXJvLmpvaW4oJ1xcbicpfWAsIGB2YXIgdmFsdWUgPSAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfTtcXG52YXIgYmVzdF9pbmRleCA6IGkzMiA9IDA7YCxcbiAgICAgIGBpZiAoJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0X2luZGljZXMnKX0gJHthdHRyaWJ1dGVzLnNlbGVjdExhc3RJbmRleCA+IDAgPyAnPj0nIDogJz4nfSB2YWx1ZSkge1xuICAgICAgICAgdmFsdWUgPSAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpfTtcbiAgICAgICAgIGJlc3RfaW5kZXggPSBpMzIobGFzdF9pbmRleCk7XG4gICAgICAgfWAsXG4gICAgICAnJywgb3V0cHV0LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgJ2Jlc3RfaW5kZXgnKVxuICAgIF07XG4gIH07XG5cbiAgY29udGV4dC5jb21wdXRlKFxuICAgICAgY3JlYXRlUmVkdWNlUHJvZ3JhbUluZm8oXG4gICAgICAgICAgJ2FyZ01heCcsIHtoaW50OiBhdHRyaWJ1dGVzLmNhY2hlS2V5LCBpbnB1dERlcGVuZGVuY2llczogWydyYW5rJ119LCBbY29udGV4dC5pbnB1dHNbMF1dLCBhcmdNaW5NYXhPcCxcbiAgICAgICAgICBbYXR0cmlidXRlcy5heGlzXSwgRGF0YVR5cGUuaW50NjQsIGF0dHJpYnV0ZXMua2VlcERpbXMpLFxuICAgICAge2lucHV0czogWzBdfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VBcmdNaW5NYXhBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQXJnTWluTWF4QXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleShhdHRyaWJ1dGVzIGFzIE9taXQ8QXJnTWluTWF4QXR0cmlidXRlcywga2V5b2YgQXR0cmlidXRlV2l0aENhY2hlS2V5Pik7XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeSwgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgSW5kaWNlc0hlbHBlciwgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmNhdEF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBheGlzOiBudW1iZXI7XG59XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBheGlzOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvbyBmZXcgaW5wdXRzJyk7XG4gIH1cbiAgY29uc3QgcmVmZXJlbmNlSW5kZXggPSAwO1xuICBjb25zdCByZWZlcmVuY2VJbnB1dCA9IGlucHV0c1tyZWZlcmVuY2VJbmRleF07XG4gIGNvbnN0IGlucHV0VHlwZSA9IHJlZmVyZW5jZUlucHV0LmRhdGFUeXBlO1xuICBjb25zdCBpbnB1dFJhbmsgPSByZWZlcmVuY2VJbnB1dC5kaW1zLmxlbmd0aDtcbiAgaW5wdXRzLmZvckVhY2goKGlucHV0LCBpKSA9PiB7XG4gICAgaWYgKGkgPT09IHJlZmVyZW5jZUluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIG1ha2Ugc3VyZSB0eXBlcyBvZiBhbGwgaW5wdXRzIG1hdGNoXG4gICAgaWYgKGlucHV0LmRhdGFUeXBlICE9PSBpbnB1dFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgdGVuc29ycyBzaG91bGQgYmUgb25lIHR5cGUnKTtcbiAgICB9XG4gICAgLy8gbWFrZSBzdXJlIHRoZSBkaW1lbnNpb25hbGl0eSBvZiBhbGwgaW5wdXRzIGFyZSB0aGUgc2FtZVxuICAgIGlmIChpbnB1dC5kaW1zLmxlbmd0aCAhPT0gaW5wdXRSYW5rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IHRlbnNvcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc2hhcGUnKTtcbiAgICB9XG4gICAgaW5wdXQuZGltcy5mb3JFYWNoKChkaW0sIGkpID0+IHtcbiAgICAgIGlmIChpICE9PSBheGlzICYmIGRpbSAhPT0gcmVmZXJlbmNlSW5wdXQuZGltc1tpXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vbiBjb25jYXQgZGltZW5zaW9ucyBtdXN0IG1hdGNoJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuY29uc3QgY2FsY3VsYXRlSW5wdXRJbmRleEltcGwgPSAobnVtYmVyT2ZUZW5zb3JzOiBudW1iZXIsIHNpemVJbkNvbmNhdEF4aXNTdHI6IHN0cmluZyk6IHN0cmluZyA9PiBgXG4gIGZuIGNhbGN1bGF0ZUlucHV0SW5kZXgoaW5kZXg6IHUzMikgLT4gdTMyIHtcbiAgICBsZXQgc2l6ZUluQ29uY2F0QXhpcyA9IGFycmF5PHUzMiwgJHtudW1iZXJPZlRlbnNvcnN9dT4oJHtzaXplSW5Db25jYXRBeGlzU3RyfSk7XG4gICAgZm9yICh2YXIgaTogdTMyID0gMHU7IGkgPCAke251bWJlck9mVGVuc29yc307IGkgKz0gMXUgKSB7XG4gICAgICBpZiAoaW5kZXggPCBzaXplSW5Db25jYXRBeGlzW2ldKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJHtudW1iZXJPZlRlbnNvcnN9dTtcbiAgfWA7XG5cbmNvbnN0IGFzc2lnbk91dHB1dERhdGEgPSAoaW5wdXRzOiByZWFkb25seSBJbmRpY2VzSGVscGVyW10sIG91dHB1dDogSW5kaWNlc0hlbHBlcikgPT4ge1xuICBjb25zdCBudW1iZXJPZlRlbnNvcnMgPSBpbnB1dHMubGVuZ3RoO1xuXG4gIGNvbnN0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZlRlbnNvcnM7ICsraSkge1xuICAgIGNvbnN0IHJldHVyblNuaXBwZXQgPSBvdXRwdXQuc2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnLCBpbnB1dHNbaV0uZ2V0QnlJbmRpY2VzKCdpbmRpY2VzJykpO1xuICAgIGlmIChudW1iZXJPZlRlbnNvcnMgPT09IDEpIHtcbiAgICAgIGNvZGVMaW5lcy5wdXNoKHJldHVyblNuaXBwZXQpO1xuICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgY29kZUxpbmVzLnB1c2goYGlmIChpbnB1dEluZGV4ID09ICR7aX11KSB7ICR7cmV0dXJuU25pcHBldH0gfWApO1xuICAgIH0gZWxzZSBpZiAoaSA9PT0gbnVtYmVyT2ZUZW5zb3JzIC0gMSkge1xuICAgICAgY29kZUxpbmVzLnB1c2goYGVsc2UgeyAke3JldHVyblNuaXBwZXR9IH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZUxpbmVzLnB1c2goYGVsc2UgaWYgKGlucHV0SW5kZXggPT0gJHtpfSkgeyAke3JldHVyblNuaXBwZXR9IH1gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvZGVMaW5lcy5qb2luKCdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDb25jYXRQcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhZGp1c3RlZEF4aXM6IG51bWJlciwgb3V0cHV0U2hhcGU6IG51bWJlcltdLCBkYXRhVHlwZTogRGF0YVR5cGUpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuXG4gICAgICBjb25zdCBzaXplSW5Db25jYXRBeGlzID0gbmV3IEFycmF5PG51bWJlcj4oaW5wdXRzLmxlbmd0aCk7XG4gICAgICBjb25zdCBpbnB1dFZhcnMgPSBuZXcgQXJyYXk8SW5kaWNlc0hlbHBlcj4oaW5wdXRzLmxlbmd0aCk7XG5cbiAgICAgIGxldCBwcmV2aW91c1N1bSA9IDA7XG4gICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llczogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXSA9IFtdO1xuICAgICAgY29uc3QgaW5wdXRSYW5rcyA9IFtdO1xuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9XTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHByZXZpb3VzU3VtICs9IGlucHV0c1tpXS5kaW1zW2FkanVzdGVkQXhpc107XG4gICAgICAgIHNpemVJbkNvbmNhdEF4aXNbaV0gPSBwcmV2aW91c1N1bTtcbiAgICAgICAgaW5wdXRSYW5rcy5wdXNoKGlucHV0c1tpXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGlucHV0VmFyc1tpXSA9IGlucHV0VmFyaWFibGUoYGlucHV0JHtpfWAsIGRhdGFUeXBlLCBpbnB1dFJhbmtzW2ldKTtcbiAgICAgICAgaW5wdXREZXBlbmRlbmNpZXMucHVzaCgncmFuaycpO1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCh7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBzaXplSW5Db25jYXRBeGlzW2ldfSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbaV0uZGltcykpO1xuICAgICAgfVxuICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGUpKTtcblxuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgpO1xuICAgICAgY29uc3QgaW5kaWNlc0F4aXMgPSBvdXRwdXQuaW5kaWNlc0dldCgnaW5kaWNlcycsIGFkanVzdGVkQXhpcyk7XG4gICAgICBjb25zdCBzaXplSW5Db25jYXRBeGlzU3RyID1cbiAgICAgICAgICBBcnJheS5mcm9tKEFycmF5KHNpemVJbkNvbmNhdEF4aXMubGVuZ3RoKS5rZXlzKCkpLm1hcChpID0+IGB1bmlmb3Jtcy5zaXplSW5Db25jYXRBeGlzJHtpfWApLmpvaW4oJywnKTtcbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuXG4gICR7KCgpID0+IHtcbiAgICAgICAgc2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgnb3V0cHV0U2l6ZScsICd1MzInKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3JtKGBzaXplSW5Db25jYXRBeGlzJHtpfWAsICd1MzInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hhZGVySGVscGVyLmRlY2xhcmVWYXJpYWJsZXMoLi4uaW5wdXRWYXJzLCBvdXRwdXQpO1xuICAgICAgfSkoKX1cblxuICAke2NhbGN1bGF0ZUlucHV0SW5kZXhJbXBsKHNpemVJbkNvbmNhdEF4aXMubGVuZ3RoLCBzaXplSW5Db25jYXRBeGlzU3RyKX1cblxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRTaXplJyl9XG5cbiAgICB2YXIgaW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcblxuICAgIGxldCBpbnB1dEluZGV4ID0gY2FsY3VsYXRlSW5wdXRJbmRleCgke2luZGljZXNBeGlzfSk7XG4gICAgaWYgKGlucHV0SW5kZXggIT0gMHUpIHtcbiAgICAgIGxldCBzaXplSW5Db25jYXRBeGlzID0gYXJyYXk8dTMyLCAke3NpemVJbkNvbmNhdEF4aXMubGVuZ3RofXU+KCR7c2l6ZUluQ29uY2F0QXhpc1N0cn0pO1xuICAgICAgJHtpbmRpY2VzQXhpc30gLT0gc2l6ZUluQ29uY2F0QXhpc1tpbnB1dEluZGV4IC0gMXVdO1xuICAgIH1cblxuICAgICR7YXNzaWduT3V0cHV0RGF0YShpbnB1dFZhcnMsIG91dHB1dCl9XG4gIH1gO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnQ29uY2F0JyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHtoaW50OiBgJHthZGp1c3RlZEF4aXN9YCwgaW5wdXREZXBlbmRlbmNpZXN9LFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXMsXG4gICAgICAgIH0pLFxuICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICB9O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBjb25jYXQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IENvbmNhdEF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgY29uc3QgaW5wdXRzID0gY29udGV4dC5pbnB1dHM7XG4gIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgY29uc3QgYWRqdXN0ZWRBeGlzID0gU2hhcGVVdGlsLm5vcm1hbGl6ZUF4aXMoYXR0cmlidXRlcy5heGlzLCBpbnB1dFNoYXBlLmxlbmd0aCk7XG4gIHZhbGlkYXRlSW5wdXRzKGlucHV0cywgYWRqdXN0ZWRBeGlzKTtcbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlLnNsaWNlKCk7XG4gIG91dHB1dFNoYXBlW2FkanVzdGVkQXhpc10gPVxuICAgICAgaW5wdXRzLnJlZHVjZSgoc3VtLCBpbnB1dCkgPT4gc3VtICsgKGlucHV0LmRpbXMubGVuZ3RoID4gYWRqdXN0ZWRBeGlzID8gaW5wdXQuZGltc1thZGp1c3RlZEF4aXNdIDogMCksIDApO1xuICAvLyAwIGxlbmd0aCB0ZW5zb3JzIGFyZSB2YWxpZCBmb3IgY29uY2F0LCByZW1vdmUgdGhlbVxuICBjb25zdCBub25FbXB0eUlucHV0cyA9IGlucHV0cy5maWx0ZXIoaW5wdXQgPT4gU2hhcGVVdGlsLnNpemUoaW5wdXQuZGltcykgPiAwKTtcbiAgY29udGV4dC5jb21wdXRlKFxuICAgICAgY3JlYXRlQ29uY2F0UHJvZ3JhbUluZm8obm9uRW1wdHlJbnB1dHMsIGFkanVzdGVkQXhpcywgb3V0cHV0U2hhcGUsIGlucHV0c1swXS5kYXRhVHlwZSksIHtpbnB1dHM6IG5vbkVtcHR5SW5wdXRzfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb25jYXRBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQ29uY2F0QXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7YXhpczogYXR0cmlidXRlcy5heGlzIGFzIG51bWJlcn0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIEdwdURhdGFUeXBlLCBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeSwgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgZ2V0TWF4Q29tcG9uZW50cywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlLCB0ZW5zb3JUeXBlVG9Xc2dsVmFsdWVUeXBlLCBVbmlmb3JtRGF0YUVsZW1lbnRUeXBlLCBVbmlmb3Jtc0FycmF5VHlwZX0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtjcmVhdGVDb25jYXRQcm9ncmFtSW5mb30gZnJvbSAnLi9jb25jYXQnO1xuXG5leHBvcnQgY29uc3QgZW51bSBBdHRlbnRpb25Ra3ZGb3JtYXQge1xuICB1bmtub3duLCAgICAgICAgICAvLyBlbnVtIHZhbHVlIG5vdCBzZXQsIG9yIGRlcGVuZHMgb24gcWt2IHByb2plY3Rpb24gaW1wbGVtZW50YXRpb24gZGV0YWlsc1xuICBxa3ZCTlNILCAgICAgICAgICAvLyBmb3Igbm9uLXBhY2tlZCBxa3YsIHBlcm11dGVkXG4gIHFrdkJTTkgsICAgICAgICAgIC8vIGZvciBub24tcGFja2VkIHFrdiwgbm90IHBlcm11dGVkLCB1c2VkIGJ5IG1lbW9yeSBlZmZpY2llbnQgYXR0ZW50aW9uIG9yIE11bHRpSGVhZEF0dGVudGlvblxuICBxa3ZCU04zSCwgICAgICAgICAvLyBmb3IgVFJUIGZ1c2VkIGF0dGVudGlvbiwgcWt2IGFyZSBwYWNrZWRcbiAgcWt2Qk5TSHFrdkJTM05ILCAgLy8gZm9yIFRSVCBmdXNlZCBjYXVzYWwgYXR0ZW50aW9uLCBkYXRhIGhhcyB0d28gZm9ybWF0cyAocWt2IGlzIDNCTlNILCBnZW1tX2J1ZmZlciBpcyBCUzNOSClcbiAgcUt2QlNOSHhCU04ySCwgICAgLy8gZm9yIFRSVCBmdXNlZCBjcm9zcyBhdHRlbnRpb24sIGt2IGFyZSBwYWNrZWRcbiAgcWt2VE5ILCAgICAgICAgICAgLy8gZm9yIG1lbW9yeSBlZmZpY2llbnQgYXR0ZW50aW9uLCBxa3YgYXJlIG5vdCBwYWNrZWQsIGFuZCBwYWRkaW5ncyBhcmUgcmVtb3ZlZC5cbiAgcWt2VE4zSCwgICAgICAgICAgLy8gZm9yIFRSVCBmdXNlZCBhdHRlbnRpb24sIHFrdiBhcmUgcGFja2VkIGFuZCBwYWRkaW5ncyBhcmUgcmVtb3ZlZFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBBdHRlbnRpb25NYXNrVHlwZSB7XG4gIG5vbmUsICAgICAgICAgICAgICAgICAgLy8gTm8gbWFza1xuICBtYXNrMWRLZXlTZXFMZW4sICAgICAgIC8vIFtiYXRjaF9zaXplXSwga2V5IHNlcXVlbmNlIGxlbmd0aFxuICBtYXNrMWRFbmRTdGFydCwgICAgICAgIC8vIFsyICogYmF0Y2hfc2l6ZV0gd2l0aCBlbmQgcG9zaXRpb25zIGFuZCBzdGFydCBwb3NpdGlvbnNcbiAgbWFzazFES2V5U2VxTGVuU3RhcnQsICAvLyBbMyAqIGJhdGNoX3NpemUgKyAyXSB3aXRoIFtrZXlfbGVuWzBdLCAuLi4sIGtleV9sZW5bYmF0Y2hfc2l6ZSAtIDFdLCBxdWVyeV9zdGFydFswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4sIHF1ZXJ5X3N0YXJ0W2JhdGNoX3NpemUgLSAxXSwgcXVlcnlfZW5kW2JhdGNoX3NpemUgLSAxXSwga2V5X3N0YXJ0WzBdLCAuLi4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5X3N0YXJ0W2JhdGNoX3NpemUgLSAxXSwga2V5X2VuZFtiYXRjaF9zaXplIC0gMV1dXG4gIG1hc2syZER1bW15LCAgICAgICAgICAgLy8gZHVtbXkgbWFzayB3aXRoIHNoYXBlIFsxLCAxXSBvciBbYmF0Y2hfc2l6ZSwgMV0uIEl0IGhhcyBzYW1lIGVmZmVjdCBhcyBubyBtYXNrLlxuICBtYXNrMmRLZXlQYWRkaW5nLCAgICAgIC8vIFtiYXRjaF9zaXplLCB0b3RhbF9zZXF1ZW5jZV9sZW5ndGhdXG4gIG1hc2szZEF0dGVudGlvbiwgICAgICAgLy8gW2JhdGNoX3NpemUsIHNlcXVlbmNlX2xlbmd0aCwgdG90YWxfc2VxdWVuY2VfbGVuZ3RoXVxuICBtYXNrNGRNZWdhdHJvbiwgICAgICAgIC8vIE1lZ2F0cm9uIGNhdXNhbCBtYXNrIHdpdGggc2hhcGUgW2JhdGNoX3NpemUsIDEsIG1heF9zZXF1ZW5jZV9sZW5ndGgsIG1heF9zZXF1ZW5jZV9sZW5ndGhdXG4gIG1hc2tVbmtub3duXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0ZW50aW9uUGFyYW1ldGVycyB7XG4gIGJhdGNoU2l6ZTogbnVtYmVyO1xuICBzZXF1ZW5jZUxlbmd0aDogbnVtYmVyO1xuICBwYXN0U2VxdWVuY2VMZW5ndGg6IG51bWJlcjtcbiAga3ZTZXF1ZW5jZUxlbmd0aDogbnVtYmVyO1xuICB0b3RhbFNlcXVlbmNlTGVuZ3RoOiBudW1iZXI7XG4gIG1heFNlcXVlbmNlTGVuZ3RoOiBudW1iZXI7XG4gIGlucHV0SGlkZGVuU2l6ZTogbnVtYmVyO1xuICBoaWRkZW5TaXplOiBudW1iZXI7XG4gIHZIaWRkZW5TaXplOiBudW1iZXI7XG4gIGhlYWRTaXplOiBudW1iZXI7XG4gIHZIZWFkU2l6ZTogbnVtYmVyO1xuICBudW1IZWFkczogbnVtYmVyO1xuICBpc1VuaWRpcmVjdGlvbmFsOiBib29sZWFuO1xuICBwYXN0UHJlc2VudFNoYXJlQnVmZmVyOiBib29sZWFuO1xuICBtYXNrRmlsdGVyVmFsdWU6IG51bWJlcjtcbiAgbWFza1R5cGU6IEF0dGVudGlvbk1hc2tUeXBlO1xuICBzY2FsZTogbnVtYmVyO1xuICBicm9hZGNhc3RSZXNQb3NCaWFzOiBib29sZWFuO1xuICBwYXNzUGFzdEluS3Y6IGJvb2xlYW47XG4gIHFrdkZvcm1hdDogQXR0ZW50aW9uUWt2Rm9ybWF0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF0dGVudGlvbkF0dHJzIHtcbiAgbnVtSGVhZHM6IG51bWJlcjtcbiAgaXNVbmlkaXJlY3Rpb25hbDogbnVtYmVyO1xuICBtYXNrRmlsdGVyVmFsdWU6IG51bWJlcjtcbiAgc2NhbGU6IG51bWJlcjtcbiAgZG9Sb3Rhcnk6IG51bWJlcjtcbiAgcWt2SGlkZGVuU2l6ZXM6IG51bWJlcltdO1xuICBwYXN0UHJlc2VudFNoYXJlQnVmZmVyOiBib29sZWFuO1xufVxuXG5jb25zdCB2YWxpZGF0ZUF0dGVudGlvbklucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogQXR0ZW50aW9uQXR0cnMpOiBBdHRlbnRpb25QYXJhbWV0ZXJzID0+IHtcbiAgLy8gQWJicmV2aWF0aW9uIGFuZCBNZWFuaW5nczpcbiAgLy8gICBCOiAgICBiYXRjaF9zaXplXG4gIC8vICAgUzogICAgc2VxdWVuY2VfbGVuZ3RoIChpbnB1dCBzZXF1ZW5jZSBsZW5ndGggb2YgcXVlcnkpXG4gIC8vICAgUDogICAgcGFzdF9zZXF1ZW5jZV9sZW5ndGggKHBhc3Qgc2VxdWVuY2UgbGVuZ3RoIG9mIGtleSBvciB2YWx1ZSlcbiAgLy8gICBMOiAgICBrdl9zZXF1ZW5jZV9sZW5ndGggKGlucHV0IHNlcXVlbmNlIGxlbmd0aCBvZiBrZXkgb3IgdmFsdWUpXG4gIC8vICAgTTogICAgbWF4X3NlcXVlbmNlX2xlbmd0aFxuICAvLyAgIFQ6ICAgIHRvdGFsX3NlcXVlbmNlX2xlbmd0aCA9IHBhc3Rfc2VxdWVuY2VfbGVuZ3RoICsga3Zfc2VxdWVuY2VfbGVuZ3RoXG4gIC8vICAgTjogICAgbnVtX2hlYWRzXG4gIC8vICAgSDogICAgaGVhZCBzaXplIGZvciBRIGFuZCBLLCBha2EgcV9oZWFkX3NpemUgb3Iga19oZWFkX3NpemUgb3IgcWtfaGVhZF9zaXplXG4gIC8vICAgSF92OiAgdl9oZWFkX3NpemVcbiAgLy8gICBEX2k6ICBpbnB1dCBoaWRkZW4gc2l6ZVxuICAvLyAgIEQ6ICAgIGhpZGRlbiBzaXplIGZvciBRIGFuZCBLIChEID0gTiAqIEgpLCBha2EgcV9oaWRkZW5fc2l6ZSBvciBrX2hpZGRlbl9zaXplIG9yIHFrX2hpZGRlbl9zaXplXG4gIC8vICAgRF92OiAgdl9oaWRkZW5fc2l6ZSA9IG51bV9oZWFkcyAqIHZfaGVhZF9zaXplXG5cbiAgLy8gV2hlbiBwYXN0IHN0YXRlIGlzIHVzZWQsIFEsIEsgYW5kIFYgc2hvdWxkIGhhdmUgc2FtZSBoaWRkZW4gc2l6ZSAodW5sZXNzIHdlIHNwbGl0IGl0IGludG8gcGFzdF9rZXkgYW5kIHBhc3RfdmFsdWUpLlxuXG4gIC8vIElucHV0IHNoYXBlczpcbiAgLy8gICBpbnB1dCAgICAgICAgKFEvSy9WKSAgICA6IChCLCBTLCBEX2kpXG4gIC8vICAgd2VpZ2h0cyAgICAgIChRL0svVikgICAgOiAoRF9pLCBEICsgRCArIERfdilcbiAgLy8gICBiaWFzICAgICAgICAgKFEvSy9WKSAgICA6IChEICsgRCArIERfdilcbiAgLy8gICBtYXNrX2luZGV4ICAgICAgICAgICAgICA6IHNlZSBiZWxvd1xuICAvLyAgIHBhc3QgICAgICAgICAoSy9WKSAgICAgIDogKDIsIEIsIE4sIFAsIEgpIG9yIE5VTExcbiAgLy8gICByZWxhdGl2ZV9wb3NpdGlvbl9iaWFzICAgICAgICAgICAgOiAoQiwgTiwgUywgVCkgb3IgTlVMTFxuXG4gIC8vIEZvciBtYXNrX2luZGV4LCB0aGUgZm9sbG93aW5nIHNoYXBlcyBhcmUgc3VwcG9ydGVkOlxuICAvLyAgICAgTlVMTCwgKEIsIDEpLCAoMSwgMSlcbiAgLy8gICAgIChCKSwgKDIgKiBCKSwgKDMgKiBCICsgMilcbiAgLy8gICAgIChCLCBUKVxuICAvLyAgICAgKEIsIFMsIFQpXG4gIC8vICAgICAoQiwgMSwgTSwgTSlcbiAgLy9cbiAgLy8gV2hlbiBhIG1vZGVsIGlzIHBydW5lZCAobGlrZSBzb21lIGF0dGVudGlvbiBoZWFkcyBhcmUgcmVtb3ZlZCBpbiBRL0svViksIGlucHV0X2hpZGRlbl9zaXplIGNvdWxkIGJlIGxhcmdlclxuICAvLyB0aGFuIGhpZGRlbiBkaW1lbnNpb24gb2YgUSwgSyBhbmQgVi5cblxuICBjb25zdCBpbnB1dCA9IGlucHV0c1swXTtcbiAgY29uc3Qgd2VpZ2h0cyA9IGlucHV0c1sxXTtcbiAgY29uc3QgYmlhcyA9IGlucHV0c1syXTtcbiAgY29uc3QgbWFza0luZGV4ID0gaW5wdXRzWzNdO1xuICBjb25zdCBwYXN0ID0gaW5wdXRzWzRdO1xuICBjb25zdCByZWxhdGl2ZVBvc2l0aW9uQmlhcyA9IGlucHV0c1s1XTtcblxuICBpZiAocGFzdCAmJiByZWxhdGl2ZVBvc2l0aW9uQmlhcykge1xuICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW50aW9uIGNhbm5vdCBoYXZlIGJvdGggcGFzdCBhbmQgcmVsYXRpdmVfcG9zaXRpb25fYmlhcycpO1xuICB9XG5cbiAgaWYgKGlucHV0LmRpbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcImlucHV0XCIgbXVzdCBoYXZlIDMgZGltZW5zaW9ucycpO1xuICB9XG5cbiAgY29uc3QgYmF0Y2hTaXplID0gaW5wdXQuZGltc1swXTtcbiAgY29uc3Qgc2VxdWVuY2VMZW5ndGggPSBpbnB1dC5kaW1zWzFdO1xuICBjb25zdCBpbnB1dEhpZGRlblNpemUgPSBpbnB1dC5kaW1zWzJdO1xuXG4gIGlmIChiaWFzLmRpbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcImJpYXNcIiBpcyBleHBlY3RlZCB0byBoYXZlIDEgZGltZW5zaW9ucycpO1xuICB9XG5cbiAgaWYgKHdlaWdodHMuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwid2VpZ2h0c1wiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMiBkaW1lbnNpb25zJyk7XG4gIH1cblxuICBpZiAod2VpZ2h0cy5kaW1zWzBdICE9PSBpbnB1dEhpZGRlblNpemUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IDEgZGltZW5zaW9uIDAgc2hvdWxkIGhhdmUgc2FtZSBsZW5ndGggYXMgZGltZW5zaW9uIDIgb2YgaW5wdXQgMCcpO1xuICB9XG5cbiAgaWYgKGJpYXMuZGltc1swXSAhPT0gd2VpZ2h0cy5kaW1zWzFdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcImJpYXNcIiBkaW1lbnNpb24gMCBzaG91bGQgaGF2ZSBzYW1lIGxlbmd0aCBhcyBkaW1lbnNpb24gMSBvZiBpbnB1dCBcIndlaWdodHNcIicpO1xuICB9XG5cbiAgbGV0IHFIaWRkZW5TaXplID0gYmlhcy5kaW1zWzBdIC8gMztcbiAgbGV0IGtIaWRkZW5TaXplID0gcUhpZGRlblNpemU7XG4gIGxldCB2SGlkZGVuU2l6ZSA9IGtIaWRkZW5TaXplO1xuICBpZiAoYXR0cmlidXRlcy5xa3ZIaWRkZW5TaXplcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGF0dHJpYnV0ZXMucWt2SGlkZGVuU2l6ZXMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Frdl9oaWRkZW5fc2l6ZXMgYXR0cmlidXRlIHNob3VsZCBoYXZlIDMgZWxlbWVudHMnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzeiBvZiBhdHRyaWJ1dGVzLnFrdkhpZGRlblNpemVzKSB7XG4gICAgICBpZiAoc3ogJSBhdHRyaWJ1dGVzLm51bUhlYWRzICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncWt2X2hpZGRlbl9zaXplcyBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IG51bV9oZWFkcycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHFIaWRkZW5TaXplID0gYXR0cmlidXRlcy5xa3ZIaWRkZW5TaXplc1swXTtcbiAgICBrSGlkZGVuU2l6ZSA9IGF0dHJpYnV0ZXMucWt2SGlkZGVuU2l6ZXNbMV07XG4gICAgdkhpZGRlblNpemUgPSBhdHRyaWJ1dGVzLnFrdkhpZGRlblNpemVzWzJdO1xuICB9XG5cbiAgY29uc3Qga3ZTZXF1ZW5jZUxlbmd0aCA9IHNlcXVlbmNlTGVuZ3RoO1xuXG4gIGlmIChxSGlkZGVuU2l6ZSAhPT0ga0hpZGRlblNpemUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Frdl9oaWRkZW5fc2l6ZXMgZmlyc3QgZWxlbWVudCBzaG91bGQgYmUgc2FtZSBhcyB0aGUgc2Vjb25kJyk7XG4gIH1cblxuICBpZiAoYmlhcy5kaW1zWzBdICE9PSBxSGlkZGVuU2l6ZSArIGtIaWRkZW5TaXplICsgdkhpZGRlblNpemUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwiYmlhc1wiIGRpbWVuc2lvbiAwIHNob3VsZCBoYXZlIHNhbWUgbGVuZ3RoIGFzIHN1bSBvZiBRL0svViBoaWRkZW4gc2l6ZXMnKTtcbiAgfVxuXG4gIGxldCBwYXN0U2VxdWVuY2VMZW5ndGggPSAwO1xuICBpZiAocGFzdCkge1xuICAgIGlmIChrSGlkZGVuU2l6ZSAhPT0gdkhpZGRlblNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0XCIgZXhwZWN0IGtfaGlkZGVuX3NpemUgPT0gdl9oaWRkZW5fc2l6ZScpO1xuICAgIH1cbiAgICBpZiAocGFzdC5kaW1zLmxlbmd0aCAhPT0gNSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3RcIiBtdXN0IGhhdmUgNSBkaW1lbnNpb25zJyk7XG4gICAgfVxuICAgIGlmIChwYXN0LmRpbXNbMF0gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0XCIgZmlyc3QgZGltZW5zaW9uIG11c3QgYmUgMicpO1xuICAgIH1cbiAgICBpZiAocGFzdC5kaW1zWzFdICE9PSBiYXRjaFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0XCIgc2Vjb25kIGRpbWVuc2lvbiBtdXN0IGJlIGJhdGNoX3NpemUnKTtcbiAgICB9XG4gICAgaWYgKHBhc3QuZGltc1syXSAhPT0gYXR0cmlidXRlcy5udW1IZWFkcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3RcIiB0aGlyZCBkaW1lbnNpb24gbXVzdCBiZSBudW1faGVhZHMnKTtcbiAgICB9XG4gICAgaWYgKHBhc3QuZGltc1s0XSAhPT0ga0hpZGRlblNpemUgLyBhdHRyaWJ1dGVzLm51bUhlYWRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicGFzdFwiIGZpZnRoIGRpbWVuc2lvbiBtdXN0IGJlIGtfaGlkZGVuX3NpemUgLyBudW1faGVhZHMnKTtcbiAgICB9XG5cbiAgICBpZiAoIWF0dHJpYnV0ZXMucGFzdFByZXNlbnRTaGFyZUJ1ZmZlcikge1xuICAgICAgcGFzdFNlcXVlbmNlTGVuZ3RoID0gcGFzdC5kaW1zWzNdO1xuICAgIH1cbiAgICAvLyBUT0RPOiBoYW5kbGUgcGFzdF9zZXFfbGVuXG4gIH1cblxuICBjb25zdCB0b3RhbFNlcXVlbmNlTGVuZ3RoID0ga3ZTZXF1ZW5jZUxlbmd0aCArIHBhc3RTZXF1ZW5jZUxlbmd0aDtcbiAgY29uc3QgbWF4U2VxdWVuY2VMZW5ndGggPSAtMTtcblxuICBjb25zdCBtYXNrVHlwZSA9IEF0dGVudGlvbk1hc2tUeXBlLm5vbmU7XG4gIGlmIChtYXNrSW5kZXgpIHtcbiAgICAvLyBtYXNrVHlwZSA9IEF0dGVudGlvbk1hc2tUeXBlLk1BU0tfVU5LTk9XTjtcbiAgICAvLyBUT0RPOiBoYW5kbGUgbWFza1xuICAgIHRocm93IG5ldyBFcnJvcignTWFzayBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cblxuICBpZiAocGFzdCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFzdCBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJhdGNoU2l6ZSxcbiAgICBzZXF1ZW5jZUxlbmd0aCxcbiAgICBwYXN0U2VxdWVuY2VMZW5ndGgsXG4gICAga3ZTZXF1ZW5jZUxlbmd0aCxcbiAgICB0b3RhbFNlcXVlbmNlTGVuZ3RoLFxuICAgIG1heFNlcXVlbmNlTGVuZ3RoLFxuICAgIGlucHV0SGlkZGVuU2l6ZSxcbiAgICBoaWRkZW5TaXplOiBxSGlkZGVuU2l6ZSxcbiAgICB2SGlkZGVuU2l6ZSxcbiAgICBoZWFkU2l6ZTogTWF0aC5mbG9vcihxSGlkZGVuU2l6ZSAvIGF0dHJpYnV0ZXMubnVtSGVhZHMpLFxuICAgIHZIZWFkU2l6ZTogTWF0aC5mbG9vcih2SGlkZGVuU2l6ZSAvIGF0dHJpYnV0ZXMubnVtSGVhZHMpLFxuICAgIG51bUhlYWRzOiBhdHRyaWJ1dGVzLm51bUhlYWRzLFxuICAgIGlzVW5pZGlyZWN0aW9uYWw6IGZhbHNlLFxuICAgIHBhc3RQcmVzZW50U2hhcmVCdWZmZXI6IGZhbHNlLFxuICAgIG1hc2tGaWx0ZXJWYWx1ZTogYXR0cmlidXRlcy5tYXNrRmlsdGVyVmFsdWUsXG4gICAgbWFza1R5cGUsXG4gICAgc2NhbGU6IGF0dHJpYnV0ZXMuc2NhbGUsXG4gICAgYnJvYWRjYXN0UmVzUG9zQmlhczogZmFsc2UsXG4gICAgcGFzc1Bhc3RJbkt2OiBmYWxzZSxcbiAgICBxa3ZGb3JtYXQ6IEF0dGVudGlvblFrdkZvcm1hdC5xa3ZCTlNILFxuICB9O1xufTtcblxuY29uc3QgY3JlYXRlSW5QbGFjZVNvZnRtYXhQcm9ncmFtSW5mbyA9IChfY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGlucHV0OiBUZW5zb3JWaWV3LCBuOiBudW1iZXIsIGQ6IG51bWJlcikgPT4ge1xuICBjb25zdCBjb21wb25lbnRzID0gZ2V0TWF4Q29tcG9uZW50cyhkKTtcbiAgbGV0IFdHID0gNjQ7XG4gIGNvbnN0IGRDb21wID0gZCAvIGNvbXBvbmVudHM7XG4gIGlmIChkQ29tcCA8IFdHKSB7XG4gICAgV0cgPSAxO1xuICB9IGVsc2UgaWYgKGRDb21wIC8gOCA8IDY0KSB7XG4gICAgV0cgPSBNYXRoLmNlaWwoZENvbXAgLyA4KTtcbiAgfVxuICBjb25zdCBlbGVtZW50c1BlclRocmVhZCA9IE1hdGguY2VpbChkIC8gY29tcG9uZW50cyAvIFdHKTtcbiAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgIHt0eXBlOiBpbnB1dC5kYXRhVHlwZSwgZGF0YTogMSAvIGR9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBkQ29tcH0sXG4gICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogZWxlbWVudHNQZXJUaHJlYWR9XG4gIF07XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0LmRhdGFUeXBlLCBjb21wb25lbnRzKTtcbiAgY29uc3QgZjMyVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoRGF0YVR5cGUuZmxvYXQsIGNvbXBvbmVudHMpO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgIGNvbnN0IGlucHV0SGVscGVyID0gb3V0cHV0VmFyaWFibGUoJ3gnLCBpbnB1dC5kYXRhVHlwZSwgaW5wdXQuZGltcywgY29tcG9uZW50cyk7XG4gICAgY29uc3QgZWxlbVZhbHVlVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoaW5wdXQuZGF0YVR5cGUpO1xuICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgIHtuYW1lOiAnZF9pbnYnLCB0eXBlOiBlbGVtVmFsdWVUeXBlIGFzIFVuaWZvcm1EYXRhRWxlbWVudFR5cGV9LCB7bmFtZTogJ2RfY29tcCcsIHR5cGU6ICd1MzInfSxcbiAgICAgIHtuYW1lOiAnZWxlbWVudHNfcGVyX3RocmVhZCcsIHR5cGU6ICd1MzInfVxuICAgIF07XG5cbiAgICByZXR1cm4gYFxuICB2YXI8d29ya2dyb3VwPiB0aHJlYWRfbWF4OiBhcnJheTxmMzIsICR7V0d9PjtcbiAgdmFyPHdvcmtncm91cD4gdGhyZWFkX3N1bTogYXJyYXk8ZjMyLCAke1dHfT47XG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXRIZWxwZXIpfVxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoW1xuICAgICAgV0csIDEsIDFcbiAgICBdKX1cbiAgICBsZXQgbG9jYWxfb2Zmc2V0ID0gbG9jYWxfaWR4ICogdW5pZm9ybXMuZWxlbWVudHNfcGVyX3RocmVhZDtcbiAgICBsZXQgb2Zmc2V0ID0gd29ya2dyb3VwX2lkLnggKiB1bmlmb3Jtcy5kX2NvbXAgKyBsb2NhbF9vZmZzZXQ7XG5cbiAgICB2YXIgdGhyZWFkX21heF92ZWN0b3IgPSAke2YzMlR5cGV9KC0zLjQwMjgyM2UrMzhmKTtcbiAgICBmb3IgKHZhciBpOiB1MzIgPSAwOyBpIDwgdW5pZm9ybXMuZWxlbWVudHNfcGVyX3RocmVhZCAmJiBpICsgbG9jYWxfb2Zmc2V0IDwgdW5pZm9ybXMuZF9jb21wOyBpKyspIHtcbiAgICAgIHRocmVhZF9tYXhfdmVjdG9yID0gbWF4KCR7ZjMyVHlwZX0oeFtvZmZzZXQgKyBpXSksIHRocmVhZF9tYXhfdmVjdG9yKTtcbiAgICB9XG4gICAgdGhyZWFkX21heFtsb2NhbF9pZHhdID0gJHsoKCkgPT4ge1xuICAgICAgc3dpdGNoIChjb21wb25lbnRzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gJ3RocmVhZF9tYXhfdmVjdG9yJztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiAnbWF4KHRocmVhZF9tYXhfdmVjdG9yLngsIHRocmVhZF9tYXhfdmVjdG9yLnkpJztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiAnbWF4KG1heCh0aHJlYWRfbWF4X3ZlY3Rvci54LCB0aHJlYWRfbWF4X3ZlY3Rvci55KSwgbWF4KHRocmVhZF9tYXhfdmVjdG9yLnosIHRocmVhZF9tYXhfdmVjdG9yLncpKSc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb21wb25lbnRzOiAke2NvbXBvbmVudHN9YCk7XG4gICAgICB9XG4gICAgfSkoKX07XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgdmFyIG1heF92YWx1ZSA9ICBmMzIoLTMuNDAyODIzZSszOGYpO1xuICAgIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7V0d9OyBpKyspIHtcbiAgICAgIG1heF92YWx1ZSA9IG1heCh0aHJlYWRfbWF4W2ldLCBtYXhfdmFsdWUpO1xuICAgIH1cblxuICAgIHZhciBzdW1fdmVjdG9yID0gJHtmMzJUeXBlfSgwKTtcbiAgICBmb3IgKHZhciBpOiB1MzIgPSAwOyBpIDwgdW5pZm9ybXMuZWxlbWVudHNfcGVyX3RocmVhZCAmJiBpICsgbG9jYWxfb2Zmc2V0IDwgdW5pZm9ybXMuZF9jb21wOyBpKyspIHtcbiAgICAgIHN1bV92ZWN0b3IgKz0gZXhwKCR7ZjMyVHlwZX0oeFtvZmZzZXQgKyBpXSkgLSBtYXhfdmFsdWUpO1xuICAgIH1cbiAgICB0aHJlYWRfc3VtW2xvY2FsX2lkeF0gPSAkeygoKSA9PiB7XG4gICAgICBzd2l0Y2ggKGNvbXBvbmVudHMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAnc3VtX3ZlY3Rvcic7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gJ3N1bV92ZWN0b3IueCArIHN1bV92ZWN0b3IueSc7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gJ3N1bV92ZWN0b3IueCArIHN1bV92ZWN0b3IueSArIHN1bV92ZWN0b3IueiArIHN1bV92ZWN0b3Iudyc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb21wb25lbnRzOiAke2NvbXBvbmVudHN9YCk7XG4gICAgICB9XG4gICAgfSkoKX07XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgdmFyIHN1bTogZjMyID0gMDtcbiAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke1dHfTsgaSsrKSB7XG4gICAgICBzdW0gKz0gdGhyZWFkX3N1bVtpXTtcbiAgICB9XG5cbiAgICBpZiAoc3VtID09IDApIHtcbiAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCB1bmlmb3Jtcy5lbGVtZW50c19wZXJfdGhyZWFkICYmIGkgKyBsb2NhbF9vZmZzZXQgPCB1bmlmb3Jtcy5kX2NvbXA7IGkrKykge1xuICAgICAgICB4W29mZnNldCArIGldID0gJHtpbnB1dEhlbHBlci50eXBlLnZhbHVlfSh1bmlmb3Jtcy5kX2ludik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCB1bmlmb3Jtcy5lbGVtZW50c19wZXJfdGhyZWFkICYmIGkgKyBsb2NhbF9vZmZzZXQgPCB1bmlmb3Jtcy5kX2NvbXA7IGkrKykge1xuICAgICAgICB2YXIgZjMyaW5wdXQgPSAke2YzMlR5cGV9KHhbb2Zmc2V0ICsgaV0pO1xuICAgICAgICB4W29mZnNldCArIGldID0gJHtpbnB1dEhlbHBlci50eXBlLnZhbHVlfShleHAoZjMyaW5wdXQgLSBtYXhfdmFsdWUpIC8gc3VtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1gO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0F0dGVudGlvblByb2JzU29mdG1heCcsXG4gICAgc2hhZGVyQ2FjaGU6IHtoaW50OiBgJHtXR307JHtkYXRhVHlwZX07JHtjb21wb25lbnRzfWB9LFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe291dHB1dHM6IFtdLCBkaXNwYXRjaEdyb3VwOiB7eDogbn0sIHByb2dyYW1Vbmlmb3Jtc30pLFxuICB9O1xufTtcblxuY29uc3QgY3JlYXRlQXR0ZW50aW9uUHJvYnNQcm9ncmFtSW5mbyA9XG4gICAgKF9jb250ZXh0OiBDb21wdXRlQ29udGV4dCwgcTogVGVuc29yVmlldywga2V5OiBUZW5zb3JWaWV3LCByZWxhdGl2ZVBvc2l0aW9uQmlhczogVGVuc29yVmlld3x1bmRlZmluZWQsXG4gICAgIHBhcmFtZXRlcnM6IEF0dGVudGlvblBhcmFtZXRlcnMsIGF0dHJpYnV0ZXM6IEF0dGVudGlvbkF0dHJzLCBwYXN0U2VxdWVuY2VMZW5ndGg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdG90YWxTZXF1ZW5jZUxlbmd0aCA9IHBhc3RTZXF1ZW5jZUxlbmd0aCArIHBhcmFtZXRlcnMua3ZTZXF1ZW5jZUxlbmd0aDtcbiAgICAgIGNvbnN0IHByb2JzU2hhcGUgPSBbcGFyYW1ldGVycy5iYXRjaFNpemUsIHBhcmFtZXRlcnMubnVtSGVhZHMsIHBhcmFtZXRlcnMuc2VxdWVuY2VMZW5ndGgsIHRvdGFsU2VxdWVuY2VMZW5ndGhdO1xuXG4gICAgICAvLyBUT0RPOiBoYW5kbGUgbWFza1xuXG4gICAgICBjb25zdCBhbHBoYSA9IGF0dHJpYnV0ZXMuc2NhbGUgPT09IDAgPyAxLjAgLyBNYXRoLnNxcnQocGFyYW1ldGVycy5oZWFkU2l6ZSkgOiBhdHRyaWJ1dGVzLnNjYWxlO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMocGFyYW1ldGVycy5oZWFkU2l6ZSk7XG4gICAgICBjb25zdCB2ZWN0b3JpemVkSGVhZFNpemUgPSBwYXJhbWV0ZXJzLmhlYWRTaXplIC8gY29tcG9uZW50cztcbiAgICAgIGNvbnN0IFRJTEVfU0laRSA9IDEyO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSB7XG4gICAgICAgIHg6IE1hdGguY2VpbCh0b3RhbFNlcXVlbmNlTGVuZ3RoIC8gVElMRV9TSVpFKSxcbiAgICAgICAgeTogTWF0aC5jZWlsKHBhcmFtZXRlcnMuc2VxdWVuY2VMZW5ndGggLyBUSUxFX1NJWkUpLFxuICAgICAgICB6OiBwYXJhbWV0ZXJzLmJhdGNoU2l6ZSAqIHBhcmFtZXRlcnMubnVtSGVhZHNcbiAgICAgIH07XG4gICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPSBbXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHBhcmFtZXRlcnMuc2VxdWVuY2VMZW5ndGh9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiB2ZWN0b3JpemVkSGVhZFNpemV9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiB0b3RhbFNlcXVlbmNlTGVuZ3RofSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGFyYW1ldGVycy5udW1IZWFkc30sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYWxwaGF9XG4gICAgICBdO1xuXG4gICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llczogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXSA9IFsndHlwZScsICd0eXBlJ107XG4gICAgICBpZiAocmVsYXRpdmVQb3NpdGlvbkJpYXMpIHtcbiAgICAgICAgaW5wdXREZXBlbmRlbmNpZXMucHVzaCgncmFuaycpO1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhyZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCBxSW5wdXQgPSBpbnB1dFZhcmlhYmxlKCdxJywgcS5kYXRhVHlwZSwgcS5kaW1zLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3Qga0lucHV0ID0gaW5wdXRWYXJpYWJsZSgna2V5Jywga2V5LmRhdGFUeXBlLCBrZXkuZGltcywgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFycyA9IFtxSW5wdXQsIGtJbnB1dF07XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUG9zaXRpb25CaWFzSW5wdXQgPSByZWxhdGl2ZVBvc2l0aW9uQmlhcyA/XG4gICAgICAgICAgICBpbnB1dFZhcmlhYmxlKCdyZWxhdGl2ZV9wb3NpdGlvbl9iaWFzJywgcmVsYXRpdmVQb3NpdGlvbkJpYXMuZGF0YVR5cGUsIHJlbGF0aXZlUG9zaXRpb25CaWFzLmRpbXMubGVuZ3RoKSA6XG4gICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChyZWxhdGl2ZVBvc2l0aW9uQmlhc0lucHV0KSB7XG4gICAgICAgICAgaW5wdXRWYXJzLnB1c2gocmVsYXRpdmVQb3NpdGlvbkJpYXNJbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIHEuZGF0YVR5cGUsIHByb2JzU2hhcGUpO1xuICAgICAgICAvLyBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZShxLmRhdGFUeXBlKTtcbiAgICAgICAgY29uc3QgZjMyVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoRGF0YVR5cGUuZmxvYXQsIGNvbXBvbmVudHMpO1xuXG4gICAgICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgICAgICB7bmFtZTogJ00nLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnSycsIHR5cGU6ICd1MzInfSwge25hbWU6ICdOJywgdHlwZTogJ3UzMid9LFxuICAgICAgICAgIHtuYW1lOiAnbnVtX2hlYWRzJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ2FscGhhJywgdHlwZTogJ2YzMicgYXMgVW5pZm9ybURhdGFFbGVtZW50VHlwZX1cbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGBcbiAgY29uc3QgVElMRV9TSVpFID0gJHtUSUxFX1NJWkV9dTtcblxuICB2YXI8d29ya2dyb3VwPiB0aWxlUTogYXJyYXk8JHtxSW5wdXQudHlwZS5zdG9yYWdlfSwgJHtUSUxFX1NJWkUgKiBUSUxFX1NJWkV9PjtcbiAgdmFyPHdvcmtncm91cD4gdGlsZUs6IGFycmF5PCR7cUlucHV0LnR5cGUuc3RvcmFnZX0sICR7VElMRV9TSVpFICogVElMRV9TSVpFfT47XG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoLi4uaW5wdXRWYXJzLCBvdXRwdXQpfVxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoW1xuICAgICAgICAgIFRJTEVfU0laRSwgVElMRV9TSVpFLCAxXG4gICAgICAgIF0pfVxuICAgIC8vIHggaG9sZHMgdGhlIE4gYW5kIHkgaG9sZHMgdGhlIE1cbiAgICBsZXQgaGVhZElkeCA9IHdvcmtncm91cF9pZC56O1xuICAgIGxldCBtID0gd29ya2dyb3VwX2lkLnkgKiBUSUxFX1NJWkU7XG4gICAgbGV0IG4gPSB3b3JrZ3JvdXBfaWQueCAqIFRJTEVfU0laRTtcbiAgICBsZXQgcU9mZnNldCA9IHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy5LICogaGVhZElkeCArIG0gKiB1bmlmb3Jtcy5LO1xuICAgIGxldCBrT2Zmc2V0ID0gdW5pZm9ybXMuTiAqIHVuaWZvcm1zLksgKiBoZWFkSWR4ICsgbiAqIHVuaWZvcm1zLks7XG5cbiAgICB2YXIgdmFsdWUgPSAke2YzMlR5cGV9KDApO1xuICAgIGZvciAodmFyIHc6IHUzMiA9IDB1OyB3IDwgdW5pZm9ybXMuSzsgdyArPSBUSUxFX1NJWkUpIHtcbiAgICAgIGlmIChnbG9iYWxfaWQueSA8IHVuaWZvcm1zLk0gJiYgdyArIGxvY2FsX2lkLnggPCB1bmlmb3Jtcy5LKSB7XG4gICAgICAgIHRpbGVRW1RJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBsb2NhbF9pZC54XSA9IHFbcU9mZnNldCArIGxvY2FsX2lkLnkgKiB1bmlmb3Jtcy5LICsgdyArIGxvY2FsX2lkLnhdO1xuICAgICAgfVxuICAgICAgaWYgKG4gKyBsb2NhbF9pZC55IDwgdW5pZm9ybXMuTiAmJiB3ICsgbG9jYWxfaWQueCA8IHVuaWZvcm1zLkspIHtcbiAgICAgICAgdGlsZUtbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0ga2V5W2tPZmZzZXQgKyBsb2NhbF9pZC55ICogdW5pZm9ybXMuSyArIHcgKyBsb2NhbF9pZC54XTtcbiAgICAgIH1cbiAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAgICAgZm9yICh2YXIgazogdTMyID0gMHU7IGsgPCBUSUxFX1NJWkUgJiYgdytrIDwgdW5pZm9ybXMuSzsgaysrKSB7XG4gICAgICAgIHZhbHVlICs9ICR7ZjMyVHlwZX0odGlsZVFbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGtdICogdGlsZUtbVElMRV9TSVpFICogbG9jYWxfaWQueCArIGtdKTtcbiAgICAgIH1cblxuICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgIH1cblxuICAgIGxldCBoZWFkT2Zmc2V0ID0gaGVhZElkeCAqIHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy5OO1xuICAgIGlmIChnbG9iYWxfaWQueSA8IHVuaWZvcm1zLk0gJiYgZ2xvYmFsX2lkLnggPCB1bmlmb3Jtcy5OKSB7XG4gICAgICBsZXQgb3V0cHV0SWR4ID0gaGVhZE9mZnNldCArIGdsb2JhbF9pZC55ICogdW5pZm9ybXMuTiArIGdsb2JhbF9pZC54O1xuICAgICAgdmFyIHN1bTogZjMyID0gJHsoKCkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gJ3ZhbHVlJztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgcmV0dXJuICd2YWx1ZS54ICsgdmFsdWUueSc7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiAndmFsdWUueCArIHZhbHVlLnkgKyB2YWx1ZS56ICsgdmFsdWUudyc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGNvbXBvbmVudHM6ICR7Y29tcG9uZW50c31gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCl9O1xuXG4gICR7KCgpID0+IHtcbiAgICAgICAgICBpZiAocmVsYXRpdmVQb3NpdGlvbkJpYXNJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgIGxldCBiYXRjaCA9IHdvcmtncm91cF9pZC56IC8gdW5pZm9ybXMubnVtX2hlYWRzO1xuICAgICAgbGV0IGhlYWQgPSB3b3JrZ3JvdXBfaWQueiAlIHVuaWZvcm1zLm51bV9oZWFkcztcbiAgICAgIHZhciBpbmRpY2VzID0gJHtyZWxhdGl2ZVBvc2l0aW9uQmlhc0lucHV0LnR5cGUuaW5kaWNlc30oYmF0Y2gsIGhlYWQsIGdsb2JhbF9pZC55LCBnbG9iYWxfaWQueCk7XG4gICAgICBvdXRwdXRbb3V0cHV0SWR4XSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KHN1bSAqIHVuaWZvcm1zLmFscGhhKSArICR7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQb3NpdGlvbkJpYXNJbnB1dC5nZXRCeUluZGljZXMoJ2luZGljZXMnKX07YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGBvdXRwdXRbb3V0cHV0SWR4XSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9IChzdW0gKiB1bmlmb3Jtcy5hbHBoYSk7YDtcbiAgICAgICAgfSkoKX1cbiAgICB9XG4gIH1gO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdBdHRlbnRpb25Qcm9icycsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7Y29tcG9uZW50c31gLCBpbnB1dERlcGVuZGVuY2llc30sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBwcm9ic1NoYXBlLCBkYXRhVHlwZTogcS5kYXRhVHlwZSwgZ3B1RGF0YVR5cGU6IEdwdURhdGFUeXBlLmRlZmF1bHR9XSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiBkaXNwYXRjaCxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH07XG4gICAgfTtcblxuXG5jb25zdCBjcmVhdGVWeEF0dGVudGlvblNjb3JlUHJvZ3JhbUluZm8gPVxuICAgIChfY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIHByb2JzOiBUZW5zb3JWaWV3LCB2OiBUZW5zb3JWaWV3LCBwYXJhbXM6IEF0dGVudGlvblBhcmFtZXRlcnMsXG4gICAgIHBhc3RTZXF1ZW5jZUxlbmd0aDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB0b3RhbFNlcXVlbmNlTGVuZ3RoID0gcGFzdFNlcXVlbmNlTGVuZ3RoICsgcGFyYW1zLmt2U2VxdWVuY2VMZW5ndGg7XG4gICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IFtwYXJhbXMuYmF0Y2hTaXplLCBwYXJhbXMuc2VxdWVuY2VMZW5ndGgsIHBhcmFtcy52SGlkZGVuU2l6ZV07XG4gICAgICBjb25zdCBUSUxFX1NJWkUgPSAxMjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0ge1xuICAgICAgICB4OiBNYXRoLmNlaWwocGFyYW1zLnZIZWFkU2l6ZSAvIFRJTEVfU0laRSksXG4gICAgICAgIHk6IE1hdGguY2VpbChwYXJhbXMuc2VxdWVuY2VMZW5ndGggLyBUSUxFX1NJWkUpLFxuICAgICAgICB6OiBwYXJhbXMuYmF0Y2hTaXplICogcGFyYW1zLm51bUhlYWRzXG4gICAgICB9O1xuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBwYXJhbXMuc2VxdWVuY2VMZW5ndGh9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiB0b3RhbFNlcXVlbmNlTGVuZ3RofSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGFyYW1zLnZIZWFkU2l6ZX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHBhcmFtcy5udW1IZWFkc30sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHBhcmFtcy52SGlkZGVuU2l6ZX1cbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWyd0eXBlJywgJ3R5cGUnXTtcbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9ic0hlbHBlciA9IGlucHV0VmFyaWFibGUoJ3Byb2JzJywgcHJvYnMuZGF0YVR5cGUsIHByb2JzLmRpbXMpO1xuICAgICAgICBjb25zdCB2SGVscGVyID0gaW5wdXRWYXJpYWJsZSgndicsIHYuZGF0YVR5cGUsIHYuZGltcyk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBwcm9icy5kYXRhVHlwZSwgb3V0cHV0U2hhcGUpO1xuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbXG4gICAgICAgICAge25hbWU6ICdNJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ0snLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnTicsIHR5cGU6ICd1MzInfSxcbiAgICAgICAgICB7bmFtZTogJ251bV9oZWFkcycsIHR5cGU6ICd1MzInfSwge25hbWU6ICd2X2hpZGRlbl9zaXplJywgdHlwZTogJ3UzMid9XG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiBgXG4gIGNvbnN0IFRJTEVfU0laRSA9ICR7VElMRV9TSVpFfXU7XG4gIHZhcjx3b3JrZ3JvdXA+IHRpbGVROiBhcnJheTwke3Byb2JzSGVscGVyLnR5cGUudmFsdWV9LCAke1RJTEVfU0laRSAqIFRJTEVfU0laRX0+O1xuICB2YXI8d29ya2dyb3VwPiB0aWxlSzogYXJyYXk8JHtwcm9ic0hlbHBlci50eXBlLnZhbHVlfSwgJHtUSUxFX1NJWkUgKiBUSUxFX1NJWkV9PjtcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyhwcm9ic0hlbHBlciwgdkhlbHBlciwgb3V0cHV0KX1cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFtcbiAgICAgICAgICBUSUxFX1NJWkUsIFRJTEVfU0laRSwgMVxuICAgICAgICBdKX1cbiAgIGxldCBoZWFkSWR4ID0gd29ya2dyb3VwX2lkLno7XG4gICBsZXQgbSA9IGdsb2JhbF9pZC55O1xuICAgbGV0IG4gPSBnbG9iYWxfaWQueDtcblxuICAgbGV0IG9mZnNldEEgPSBoZWFkSWR4ICogKHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy5LKSArIG0gKiB1bmlmb3Jtcy5LO1xuICAgbGV0IG9mZnNldEIgPSBoZWFkSWR4ICogKHVuaWZvcm1zLk4gKiB1bmlmb3Jtcy5LKSArIG47XG5cbiAgIHZhciB2YWx1ZSA9ICR7cHJvYnNIZWxwZXIudHlwZS5zdG9yYWdlfSgwKTtcbiAgIGZvciAodmFyIHc6IHUzMiA9IDB1OyB3IDwgdW5pZm9ybXMuSzsgdyArPSBUSUxFX1NJWkUpIHtcbiAgICAgaWYgKG0gPCB1bmlmb3Jtcy5NICYmIHcgKyBsb2NhbF9pZC54IDwgdW5pZm9ybXMuSykge1xuICAgICAgIHRpbGVRW1RJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBsb2NhbF9pZC54XSA9IHByb2JzW29mZnNldEEgKyB3ICsgbG9jYWxfaWQueF07XG4gICAgIH1cbiAgICAgaWYgKG4gPCB1bmlmb3Jtcy5OICYmIHcgKyBsb2NhbF9pZC55IDwgdW5pZm9ybXMuSykge1xuICAgICAgIHRpbGVLW1RJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBsb2NhbF9pZC54XSA9IHZbb2Zmc2V0QiArICh3ICsgbG9jYWxfaWQueSkgKiB1bmlmb3Jtcy5OXTtcbiAgICAgfVxuICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgIGZvciAodmFyIGs6IHUzMiA9IDB1OyBrIDwgVElMRV9TSVpFICYmIHcrayA8IHVuaWZvcm1zLks7IGsrKykge1xuICAgICAgIHZhbHVlICs9IHRpbGVRW1RJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBrXSAqIHRpbGVLW1RJTEVfU0laRSAqIGsgKyBsb2NhbF9pZC54XTtcbiAgICAgfVxuICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICB9XG5cbiAgIC8vIHdlIG5lZWQgdG8gdHJhbnNwb3NlIG91dHB1dCBmcm9tIEJOU0hfdiB0byBCU05EX3ZcbiAgIGxldCBiYXRjaElkeCA9IHdvcmtncm91cF9pZC56IC8gdW5pZm9ybXMubnVtX2hlYWRzO1xuICAgbGV0IGN1cnJlbnRCYXRjaEhlYWROdW1iZXIgPSB3b3JrZ3JvdXBfaWQueiAlIHVuaWZvcm1zLm51bV9oZWFkcztcbiAgIGlmIChtIDwgdW5pZm9ybXMuTSAmJiBuIDwgdW5pZm9ybXMuTikge1xuICAgICBsZXQgb3V0cHV0SWR4ID0gYmF0Y2hJZHggKiB1bmlmb3Jtcy5NICogdW5pZm9ybXMudl9oaWRkZW5fc2l6ZSArIG0gKiB1bmlmb3Jtcy52X2hpZGRlbl9zaXplXG4gICAgICAgKyBjdXJyZW50QmF0Y2hIZWFkTnVtYmVyICogdW5pZm9ybXMuTiArIG47XG4gICAgIG91dHB1dFtvdXRwdXRJZHhdID0gdmFsdWU7XG4gICB9XG4gIH1gO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0F0dGVudGlvblNjb3JlJyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHtpbnB1dERlcGVuZGVuY2llc30sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IHByb2JzLmRhdGFUeXBlLCBncHVEYXRhVHlwZTogR3B1RGF0YVR5cGUuZGVmYXVsdH1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IGRpc3BhdGNoLFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgfTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgYXBwbHlBdHRlbnRpb24gPVxuICAgIChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgcTogVGVuc29yVmlldywgazogVGVuc29yVmlldywgdjogVGVuc29yVmlldywgX21hc2tJbmRleDogVGVuc29yVmlld3x1bmRlZmluZWQsXG4gICAgIF9wYXN0OiBUZW5zb3JWaWV3fHVuZGVmaW5lZCwgcGFzdEtleTogVGVuc29yVmlld3x1bmRlZmluZWQsIHBhc3RWYWx1ZTogVGVuc29yVmlld3x1bmRlZmluZWQsXG4gICAgIHJlbGF0aXZlUG9zaXRpb25CaWFzOiBUZW5zb3JWaWV3fHVuZGVmaW5lZCwgcGFyYW1ldGVyczogQXR0ZW50aW9uUGFyYW1ldGVycywgYXR0cmlidXRlczogQXR0ZW50aW9uQXR0cnMpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dFByZXNlbnRLZXkgPSBjb250ZXh0Lm91dHB1dENvdW50ID4gMTtcbiAgICAgIGNvbnN0IG91dHB1dFByZXNlbnRWYWx1ZSA9IGNvbnRleHQub3V0cHV0Q291bnQgPiAyO1xuICAgICAgY29uc3QgcGFzdFNlcXVlbmNlTGVuZ3RoID0gKG91dHB1dFByZXNlbnRLZXkgJiYgb3V0cHV0UHJlc2VudFZhbHVlKSA/IHBhcmFtZXRlcnMucGFzdFNlcXVlbmNlTGVuZ3RoIDogMDtcbiAgICAgIGNvbnN0IHRvdGFsU2VxdWVuY2VMZW5ndGggPSBwYXN0U2VxdWVuY2VMZW5ndGggKyBwYXJhbWV0ZXJzLmt2U2VxdWVuY2VMZW5ndGg7XG4gICAgICAvLyBDb25jYXRpbmF0ZSBwYXN0S2V5IGFuZCBLIHRvIHByb2R1Y2UgcHJlc2VudEtleS5cbiAgICAgIGNvbnN0IHByZXNlbnRLZXlTaGFwZSA9IFtwYXJhbWV0ZXJzLmJhdGNoU2l6ZSwgcGFyYW1ldGVycy5udW1IZWFkcywgdG90YWxTZXF1ZW5jZUxlbmd0aCwgcGFyYW1ldGVycy5oZWFkU2l6ZV07XG4gICAgICBjb25zdCBjb25jYXRLZXlJbnB1dHMgPSBwYXN0S2V5ID8gW3Bhc3RLZXksIGtdIDogW2tdO1xuICAgICAgY29uc3Qga2V5ID0gb3V0cHV0UHJlc2VudEtleSA/IGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ29uY2F0UHJvZ3JhbUluZm8oY29uY2F0S2V5SW5wdXRzLCAyLCBwcmVzZW50S2V5U2hhcGUsIGsuZGF0YVR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW5wdXRzOiBjb25jYXRLZXlJbnB1dHMsIG91dHB1dHM6IFsxXX0pWzBdIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrO1xuXG4gICAgICAvLyBDb25jYXRpbmF0ZSBwYXN0VmFsdWUgYW5kIFYgdG8gcHJvZHVjZSBwcmVzZW50VmFsdWUuXG4gICAgICBjb25zdCBwcmVzZW50VmFsdWVTaGFwZSA9IFtwYXJhbWV0ZXJzLmJhdGNoU2l6ZSwgcGFyYW1ldGVycy5udW1IZWFkcywgdG90YWxTZXF1ZW5jZUxlbmd0aCwgcGFyYW1ldGVycy5oZWFkU2l6ZV07XG4gICAgICBjb25zdCBjb25jYXRWYWx1ZUlucHV0cyA9IHBhc3RWYWx1ZSA/IFtwYXN0VmFsdWUsIHZdIDogW3ZdO1xuICAgICAgY29uc3QgdmFsdWUgPSBvdXRwdXRQcmVzZW50VmFsdWUgP1xuICAgICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgICAgY3JlYXRlQ29uY2F0UHJvZ3JhbUluZm8oY29uY2F0VmFsdWVJbnB1dHMsIDIsIHByZXNlbnRWYWx1ZVNoYXBlLCB2LmRhdGFUeXBlKSxcbiAgICAgICAgICAgICAge2lucHV0czogY29uY2F0VmFsdWVJbnB1dHMsIG91dHB1dHM6IFsyXX0pWzBdIDpcbiAgICAgICAgICB2O1xuICAgICAgY29uc3QgaW5wdXRzSyA9IFtxLCBrZXldO1xuICAgICAgaWYgKHJlbGF0aXZlUG9zaXRpb25CaWFzKSB7XG4gICAgICAgIGlucHV0c0sucHVzaChyZWxhdGl2ZVBvc2l0aW9uQmlhcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJ1biBBdHRlbnRpb25Qcm9ic1xuICAgICAgY29uc3QgcHJvYnMgPSBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlQXR0ZW50aW9uUHJvYnNQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgICAgY29udGV4dCwgcSwga2V5LCByZWxhdGl2ZVBvc2l0aW9uQmlhcywgcGFyYW1ldGVycywgYXR0cmlidXRlcywgcGFzdFNlcXVlbmNlTGVuZ3RoKSxcbiAgICAgICAgICB7aW5wdXRzOiBpbnB1dHNLLCBvdXRwdXRzOiBbLTFdfSlbMF07XG5cbiAgICAgIC8vIFJ1biBTb2Z0bWF4XG4gICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlSW5QbGFjZVNvZnRtYXhQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgICAgY29udGV4dCwgcHJvYnMsIHBhcmFtZXRlcnMuYmF0Y2hTaXplICogcGFyYW1ldGVycy5udW1IZWFkcyAqIHBhcmFtZXRlcnMuc2VxdWVuY2VMZW5ndGgsXG4gICAgICAgICAgICAgIHRvdGFsU2VxdWVuY2VMZW5ndGgpLFxuICAgICAgICAgIHtpbnB1dHM6IFtwcm9ic10sIG91dHB1dHM6IFtdfSk7XG5cbiAgICAgIC8vIFJ1biBBdHRyaW9uU2NvcmVcbiAgICAgIGNvbnN0IGlucHV0c1YgPSBbcHJvYnMsIHZhbHVlXTtcbiAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVWeEF0dGVudGlvblNjb3JlUHJvZ3JhbUluZm8oY29udGV4dCwgcHJvYnMsIHZhbHVlLCBwYXJhbWV0ZXJzLCBwYXN0U2VxdWVuY2VMZW5ndGgpLFxuICAgICAgICAgIHtpbnB1dHM6IGlucHV0c1YsIG91dHB1dHM6IFswXX0pO1xuICAgIH07XG5cbmNvbnN0IHByZXBhcmUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIHBhcmFtZXRlcnM6IEF0dGVudGlvblBhcmFtZXRlcnMpID0+IHtcbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBbXG4gICAgcGFyYW1ldGVycy5iYXRjaFNpemUsXG4gICAgcGFyYW1ldGVycy5udW1IZWFkcyxcbiAgICBwYXJhbWV0ZXJzLnNlcXVlbmNlTGVuZ3RoLFxuICAgIHBhcmFtZXRlcnMuaGVhZFNpemUsXG4gIF07XG4gIGNvbnN0IE0gPSBwYXJhbWV0ZXJzLnNlcXVlbmNlTGVuZ3RoO1xuICBjb25zdCBLID0gcGFyYW1ldGVycy5pbnB1dEhpZGRlblNpemU7XG4gIGNvbnN0IE4gPSBwYXJhbWV0ZXJzLmhlYWRTaXplO1xuICBjb25zdCBUSUxFX1NJWkUgPSAxMjtcbiAgY29uc3QgZGlzcGF0Y2ggPSB7XG4gICAgeDogTWF0aC5jZWlsKHBhcmFtZXRlcnMuaGVhZFNpemUgLyBUSUxFX1NJWkUpLFxuICAgIHk6IE1hdGguY2VpbChwYXJhbWV0ZXJzLnNlcXVlbmNlTGVuZ3RoIC8gVElMRV9TSVpFKSxcbiAgICB6OiBwYXJhbWV0ZXJzLmJhdGNoU2l6ZSAqIHBhcmFtZXRlcnMubnVtSGVhZHNcbiAgfTtcbiAgY29uc3QgaW5wdXRzID0gW2NvbnRleHQuaW5wdXRzWzBdLCBjb250ZXh0LmlucHV0c1sxXSwgY29udGV4dC5pbnB1dHNbMl1dO1xuICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPSBbXG4gICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogTX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IEt9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBOfSxcbiAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBwYXJhbWV0ZXJzLm51bUhlYWRzfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGFyYW1ldGVycy5oZWFkU2l6ZX0sXG4gICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGFyYW1ldGVycy5oaWRkZW5TaXplfSxcbiAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBwYXJhbWV0ZXJzLmhpZGRlblNpemUgKyBwYXJhbWV0ZXJzLmhpZGRlblNpemUgKyBwYXJhbWV0ZXJzLnZIaWRkZW5TaXplfVxuICBdO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgIGNvbnN0IG91dHB1dFEgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0X3EnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlKTtcbiAgICBjb25zdCBvdXRwdXRLID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dF9rJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSk7XG4gICAgY29uc3Qgb3V0cHV0ViA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXRfdicsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUpO1xuICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zKTtcbiAgICBjb25zdCB3ZWlnaHQgPSBpbnB1dFZhcmlhYmxlKCd3ZWlnaHQnLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zKTtcbiAgICBjb25zdCBiaWFzID0gaW5wdXRWYXJpYWJsZSgnYmlhcycsIGlucHV0c1syXS5kYXRhVHlwZSwgaW5wdXRzWzJdLmRpbXMpO1xuICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXQudHlwZS5zdG9yYWdlO1xuXG4gICAgY29uc3QgdW5pZm9ybXM6IFVuaWZvcm1zQXJyYXlUeXBlID0gW1xuICAgICAge25hbWU6ICdNJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ0snLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnTicsIHR5cGU6ICd1MzInfSwge25hbWU6ICdudW1faGVhZHMnLCB0eXBlOiAndTMyJ30sXG4gICAgICB7bmFtZTogJ2hlYWRfc2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdoaWRkZW5fc2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdsZGInLCB0eXBlOiAndTMyJ31cbiAgICBdO1xuICAgIHJldHVybiBgXG4gIGNvbnN0IFRJTEVfU0laRSA9ICR7VElMRV9TSVpFfXU7XG4gIHZhcjx3b3JrZ3JvdXA+IHRpbGVJbnB1dDogYXJyYXk8JHtkYXRhVHlwZX0sICR7VElMRV9TSVpFICogVElMRV9TSVpFfT47XG4gIHZhcjx3b3JrZ3JvdXA+IHRpbGVXZWlnaHRROiBhcnJheTwke2RhdGFUeXBlfSwgJHtUSUxFX1NJWkUgKiBUSUxFX1NJWkV9PjtcbiAgdmFyPHdvcmtncm91cD4gdGlsZVdlaWdodEs6IGFycmF5PCR7ZGF0YVR5cGV9LCAke1RJTEVfU0laRSAqIFRJTEVfU0laRX0+O1xuICB2YXI8d29ya2dyb3VwPiB0aWxlV2VpZ2h0VjogYXJyYXk8JHtkYXRhVHlwZX0sICR7VElMRV9TSVpFICogVElMRV9TSVpFfT47XG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIHdlaWdodCwgYmlhcywgb3V0cHV0USwgb3V0cHV0Sywgb3V0cHV0Vil9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydChbXG4gICAgICBUSUxFX1NJWkUsIFRJTEVfU0laRSwgMVxuICAgIF0pfVxuICAgIGxldCBiYXRjaEluZGV4ID0gd29ya2dyb3VwX2lkLnogLyB1bmlmb3Jtcy5udW1faGVhZHM7XG4gICAgbGV0IGhlYWROdW1iZXIgPSB3b3JrZ3JvdXBfaWQueiAlIHVuaWZvcm1zLm51bV9oZWFkcztcbiAgICBsZXQgbSA9IGdsb2JhbF9pZC55O1xuICAgIGxldCBuID0gZ2xvYmFsX2lkLng7XG5cbiAgICBsZXQgaW5wdXRPZmZzZXQgPSBiYXRjaEluZGV4ICogKHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy5LKSArIG0gKiB1bmlmb3Jtcy5LO1xuICAgIGxldCBiaWFzT2Zmc2V0USA9IGhlYWROdW1iZXIgKiB1bmlmb3Jtcy5oZWFkX3NpemU7XG4gICAgbGV0IGJpYXNPZmZzZXRLID0gdW5pZm9ybXMuaGlkZGVuX3NpemUgKyBiaWFzT2Zmc2V0UTtcbiAgICBsZXQgYmlhc09mZnNldFYgPSB1bmlmb3Jtcy5oaWRkZW5fc2l6ZSArIGJpYXNPZmZzZXRLO1xuXG4gICAgdmFyIHZhbHVlUSA9ICR7ZGF0YVR5cGV9KDApO1xuICAgIHZhciB2YWx1ZUsgPSAke2RhdGFUeXBlfSgwKTtcbiAgICB2YXIgdmFsdWVWID0gJHtkYXRhVHlwZX0oMCk7XG4gICAgZm9yICh2YXIgdzogdTMyID0gMHU7IHcgPCB1bmlmb3Jtcy5LOyB3ICs9IFRJTEVfU0laRSkge1xuICAgICAgaWYgKG0gPCB1bmlmb3Jtcy5NICYmIHcgKyBsb2NhbF9pZC54IDwgdW5pZm9ybXMuSykge1xuICAgICAgICB0aWxlSW5wdXRbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0gaW5wdXRbaW5wdXRPZmZzZXQgKyB3ICsgbG9jYWxfaWQueF07XG4gICAgICB9XG4gICAgICBpZiAobiA8IHVuaWZvcm1zLk4gJiYgdyArIGxvY2FsX2lkLnkgPCB1bmlmb3Jtcy5LKSB7XG4gICAgICAgIGxldCBvZmZzZXQgPSBuICsgKHcgKyBsb2NhbF9pZC55KSAqIHVuaWZvcm1zLmxkYjtcbiAgICAgICAgdGlsZVdlaWdodFFbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0gd2VpZ2h0W2JpYXNPZmZzZXRRICsgb2Zmc2V0XTtcbiAgICAgICAgdGlsZVdlaWdodEtbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0gd2VpZ2h0W2JpYXNPZmZzZXRLICsgb2Zmc2V0XTtcbiAgICAgICAgdGlsZVdlaWdodFZbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0gd2VpZ2h0W2JpYXNPZmZzZXRWICsgb2Zmc2V0XTtcbiAgICAgIH1cbiAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcbiAgICAgIGZvciAodmFyIGs6IHUzMiA9IDB1OyBrPFRJTEVfU0laRSAmJiB3K2sgPCB1bmlmb3Jtcy5LOyBrKyspIHtcbiAgICAgICAgbGV0IGlucHV0VGlsZU9mZnNldCA9IFRJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBrO1xuICAgICAgICBsZXQgd2VpZ2h0VGlsZU9mZnNldCA9IFRJTEVfU0laRSAqIGsgKyBsb2NhbF9pZC54O1xuICAgICAgICB2YWx1ZVEgKz0gdGlsZUlucHV0W2lucHV0VGlsZU9mZnNldF0gKiB0aWxlV2VpZ2h0UVt3ZWlnaHRUaWxlT2Zmc2V0XTtcbiAgICAgICAgdmFsdWVLICs9IHRpbGVJbnB1dFtpbnB1dFRpbGVPZmZzZXRdICogdGlsZVdlaWdodEtbd2VpZ2h0VGlsZU9mZnNldF07XG4gICAgICAgIHZhbHVlViArPSB0aWxlSW5wdXRbaW5wdXRUaWxlT2Zmc2V0XSAqIHRpbGVXZWlnaHRWW3dlaWdodFRpbGVPZmZzZXRdO1xuICAgICAgfVxuXG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgfVxuXG4gICAgbGV0IGhlYWRPZmZzZXQgPSAobSAqIHVuaWZvcm1zLk4gKyBuKSAlIHVuaWZvcm1zLmhlYWRfc2l6ZTtcbiAgICB2YWx1ZVEgKz0gYmlhc1toZWFkT2Zmc2V0ICsgYmlhc09mZnNldFFdO1xuICAgIHZhbHVlSyArPSBiaWFzW2hlYWRPZmZzZXQgKyBiaWFzT2Zmc2V0S107XG4gICAgdmFsdWVWICs9IGJpYXNbaGVhZE9mZnNldCArIGJpYXNPZmZzZXRWXTtcblxuICAgIGxldCBvZmZzZXQgPSB3b3JrZ3JvdXBfaWQueiAqIHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy5OO1xuICAgIGlmIChtIDwgdW5pZm9ybXMuTSAmJiBuIDwgdW5pZm9ybXMuTikge1xuICAgICAgbGV0IG91dHB1dElkeCA9IG9mZnNldCArIG0gKiB1bmlmb3Jtcy5OICsgbjtcbiAgICAgIG91dHB1dF9xW291dHB1dElkeF0gPSB2YWx1ZVE7XG4gICAgICBvdXRwdXRfa1tvdXRwdXRJZHhdID0gdmFsdWVLO1xuICAgICAgb3V0cHV0X3Zbb3V0cHV0SWR4XSA9IHZhbHVlVjtcbiAgICB9XG4gIH1gO1xuICB9O1xuXG4gIHJldHVybiBjb250ZXh0LmNvbXB1dGUoXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBdHRlbnRpb25QcmVwYXJlJyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHtpbnB1dERlcGVuZGVuY2llczogWyd0eXBlJywgJ3R5cGUnLCAndHlwZSddfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICB7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSwgZ3B1RGF0YVR5cGU6IEdwdURhdGFUeXBlLmRlZmF1bHR9LFxuICAgICAgICAgICAge2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUsIGdwdURhdGFUeXBlOiBHcHVEYXRhVHlwZS5kZWZhdWx0fSxcbiAgICAgICAgICAgIHtkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlLCBncHVEYXRhVHlwZTogR3B1RGF0YVR5cGUuZGVmYXVsdH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiBkaXNwYXRjaCxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH0sXG4gICAgICB7aW5wdXRzLCBvdXRwdXRzOiBbLTEsIC0xLCAtMV19KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhdHRlbnRpb24gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IEF0dGVudGlvbkF0dHJzKTogdm9pZCA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IHZhbGlkYXRlQXR0ZW50aW9uSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcblxuICBjb25zdCBbcSwgaywgdl0gPSBwcmVwYXJlKGNvbnRleHQsIHBhcmFtcyk7XG5cbiAgcmV0dXJuIGFwcGx5QXR0ZW50aW9uKFxuICAgICAgY29udGV4dCwgcSwgaywgdiwgY29udGV4dC5pbnB1dHNbNF0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHQuaW5wdXRzWzVdLCBwYXJhbXMsIGF0dHJpYnV0ZXMpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtlbnZ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGdldE1heENvbXBvbmVudHMsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXJ9IGZyb20gJy4vY29tbW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXRjaE5vcm1BdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgZXBzaWxvbjogbnVtYmVyO1xuICByZWFkb25seSBtb21lbnR1bTogbnVtYmVyO1xuICByZWFkb25seSBzcGF0aWFsOiBib29sZWFuO1xuICByZWFkb25seSB0cmFpbmluZ01vZGU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZvcm1hdDogJ05IV0MnfCdOQ0hXJztcbiAgcmVhZG9ubHkgb3V0cHV0Q291bnQ6IG51bWJlcjtcbn1cblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEJhdGNoTm9ybUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gNSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmF0Y2hOb3JtYWxpemF0aW9uIHJlcXVpcmVzIDUgaW5wdXRzJyk7XG4gIH1cblxuICBjb25zdCBjaGVja1NoYXBlRXF1YWwgPSAoYWN0dWFsOiByZWFkb25seSBudW1iZXJbXSwgZXhwZWN0ZWQ6IHJlYWRvbmx5IG51bWJlcltdLCBtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByID0gZXhwZWN0ZWQubGVuZ3RoO1xuICAgIGlmIChyICE9PSBhY3R1YWwubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX06IG51bSBkaW1lbnNpb25zICE9ICR7cn1gKTtcbiAgICB9XG4gICAgZXhwZWN0ZWQuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgaWYgKHYgIT09IGFjdHVhbFtpXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX06IGRpbVske2l9XSBkbyBub3QgbWF0Y2hgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IHNoYXBlID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJyA/XG4gICAgICAgIChhdHRyaWJ1dGVzLnNwYXRpYWwgPyBpbnB1dHNbMF0uZGltcy5zbGljZSgtMSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzWzBdLmRpbXMuc2xpY2UoLTEpLmNvbmNhdChpbnB1dHNbMF0uZGltcy5zbGljZSgxLCBpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAxKSkpIDpcbiAgICAgICAgaW5wdXRzWzBdLmRpbXMuc2xpY2UoMSwgYXR0cmlidXRlcy5zcGF0aWFsID8gMiA6IHVuZGVmaW5lZCk7XG4gICAgY2hlY2tTaGFwZUVxdWFsKGlucHV0c1sxXS5kaW1zLCBzaGFwZSwgJ0ludmFsaWQgaW5wdXQgc2NhbGUnKTtcbiAgICBjaGVja1NoYXBlRXF1YWwoaW5wdXRzWzJdLmRpbXMsIHNoYXBlLCAnSW52YWxpZCBpbnB1dCBCJyk7XG4gICAgY2hlY2tTaGFwZUVxdWFsKGlucHV0c1szXS5kaW1zLCBzaGFwZSwgJ0ludmFsaWQgaW5wdXQgbWVhbicpO1xuICAgIGNoZWNrU2hhcGVFcXVhbChpbnB1dHNbNF0uZGltcywgc2hhcGUsICdJbnZhbGlkIGlucHV0IHZhcicpO1xuICB9IGVsc2Uge1xuICAgIGNoZWNrU2hhcGVFcXVhbChpbnB1dHNbMV0uZGltcywgWzFdLCAnSW52YWxpZCBpbnB1dCBzY2FsZScpO1xuICAgIGNoZWNrU2hhcGVFcXVhbChpbnB1dHNbMl0uZGltcywgWzFdLCAnSW52YWxpZCBpbnB1dCBCJyk7XG4gICAgY2hlY2tTaGFwZUVxdWFsKGlucHV0c1szXS5kaW1zLCBbMV0sICdJbnZhbGlkIGlucHV0IG1lYW4nKTtcbiAgICBjaGVja1NoYXBlRXF1YWwoaW5wdXRzWzRdLmRpbXMsIFsxXSwgJ0ludmFsaWQgaW5wdXQgdmFyJyk7XG4gIH1cbn07XG5cbmNvbnN0IGNyZWF0ZUJhdGNoTm9ybUluZmVyZW5jZVByb2dyYW1JbmZvID1cbiAgICAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEJhdGNoTm9ybUF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCB7ZXBzaWxvbiwgc3BhdGlhbCwgZm9ybWF0fSA9IGF0dHJpYnV0ZXM7XG4gICAgICBjb25zdCB5U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzcGF0aWFsID8gZ2V0TWF4Q29tcG9uZW50cyh5U2hhcGVbeVNoYXBlLmxlbmd0aCAtIDFdKSA6IDE7XG4gICAgICBjb25zdCBjQ29tcG9uZW50cyA9IGZvcm1hdCA9PT0gJ05IV0MnICYmIHlTaGFwZS5sZW5ndGggPiAxID8gY29tcG9uZW50cyA6IDE7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUoeVNoYXBlKSAvIGNvbXBvbmVudHM7XG4gICAgICAvLyBPbmx5IHN1cHBvcnQgdW5pZm9ybXMgZm9yIG9wc2V0IHZlcnNpb24gPj0gOSAoc3BhdGlhbCA9IHRydWUpLlxuICAgICAgY29uc3QgdXNlU2hhcGVzVW5pZm9ybXMgPSBzcGF0aWFsO1xuICAgICAgY29uc3Qgc2hhcGVPclJhbmsgPSB1c2VTaGFwZXNVbmlmb3JtcyA/IHlTaGFwZS5sZW5ndGggOiB5U2hhcGU7XG4gICAgICBjb25zdCB4ID0gaW5wdXRWYXJpYWJsZSgneCcsIGlucHV0c1swXS5kYXRhVHlwZSwgaW5wdXRzWzBdLmRpbXMsIGNvbXBvbmVudHMpO1xuICAgICAgY29uc3Qgc2NhbGUgPSBpbnB1dFZhcmlhYmxlKCdzY2FsZScsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMsIGNDb21wb25lbnRzKTtcbiAgICAgIGNvbnN0IGJpYXMgPSBpbnB1dFZhcmlhYmxlKCdiaWFzJywgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcywgY0NvbXBvbmVudHMpO1xuICAgICAgY29uc3QgaW5wdXRNZWFuID0gaW5wdXRWYXJpYWJsZSgnaW5wdXRNZWFuJywgaW5wdXRzWzNdLmRhdGFUeXBlLCBpbnB1dHNbM10uZGltcywgY0NvbXBvbmVudHMpO1xuICAgICAgY29uc3QgaW5wdXRWYXIgPSBpbnB1dFZhcmlhYmxlKCdpbnB1dFZhcicsIGlucHV0c1s0XS5kYXRhVHlwZSwgaW5wdXRzWzRdLmRpbXMsIGNDb21wb25lbnRzKTtcbiAgICAgIGNvbnN0IHkgPSBvdXRwdXRWYXJpYWJsZSgneScsIGlucHV0c1swXS5kYXRhVHlwZSwgc2hhcGVPclJhbmssIGNvbXBvbmVudHMpO1xuICAgICAgLy8gVE9ETzogc3VwcG9ydCBpbnB1dHMgd2l0aCBkaWZmZXJlbnQgZGF0YSB0eXBlLiBDdXJyZW50IHdlIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCBpbnB1dHMgaGF2ZSB0aGUgc2FtZSBkYXRhIHR5cGUuXG4gICAgICAvLyBPdGhlcndpc2UsIHRoZSBzaGFkZXIgY29tcGlsYXRpb24gd2lsbCBmYWlsLlxuICAgICAgY29uc3QgY2FsY0NPZmZzZXQgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgICAgbGV0IGNPZmZzZXQgPSAnJztcbiAgICAgICAgaWYgKHNwYXRpYWwpIHtcbiAgICAgICAgICBjT2Zmc2V0ID0gYGxldCBjT2Zmc2V0ID0gJHtcbiAgICAgICAgICAgICAgeVNoYXBlLmxlbmd0aCA9PT0gMSAgID8gJzB1JyA6XG4gICAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdOSFdDJyA/IGBvdXRwdXRJbmRpY2VzWyR7eVNoYXBlLmxlbmd0aCAtIDF9XSAvICR7Y29tcG9uZW50c31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dEluZGljZXNbMV0nfTtgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdOQ0hXJykge1xuICAgICAgICAgICAgY09mZnNldCA9IGBcbiAgICAgICAgICAgICR7eS5pbmRpY2VzU2V0KCdvdXRwdXRJbmRpY2VzJywgJzAnLCAnMCcpfVxuICAgICAgICAgICAgbGV0IGNPZmZzZXQgPSAke3kuaW5kaWNlc1RvT2Zmc2V0KCdvdXRwdXRJbmRpY2VzJyl9O2A7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBDIGNoYW5uZWwuXG4gICAgICAgICAgICBjT2Zmc2V0ID0gYHZhciBjSW5kaWNlcyA9ICR7c2NhbGUudHlwZS5pbmRpY2VzfSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgY0luZGljZXNbMF0gPSBvdXRwdXRJbmRpY2VzWyR7eVNoYXBlLmxlbmd0aCAtIDF9XTtgO1xuICAgICAgICAgICAgLy8gdXBkYXRlIEQxIHggLi4uIHggRG4gY2hhbm5lbHMuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNjYWxlLnJhbms7IGkrKykge1xuICAgICAgICAgICAgICBjT2Zmc2V0ICs9IGBjSW5kaWNlc1ske2l9XSA9IG91dHB1dEluZGljZXNbJHtpfV07YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNPZmZzZXQgKz0gYGxldCBjT2Zmc2V0ID0gJHtzY2FsZS5pbmRpY2VzVG9PZmZzZXQoJ2NJbmRpY2VzJyl9O2A7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjT2Zmc2V0O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEluZmVyZW5jZU1vZGVTaGFkZXJTb3VyY2UgPSAoaGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IGBcbiAgY29uc3QgZXBzaWxvbiA9ICR7ZXBzaWxvbn07XG4gICR7aGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgnb3V0cHV0U2l6ZScsICd1MzInKS5kZWNsYXJlVmFyaWFibGVzKHgsIHNjYWxlLCBiaWFzLCBpbnB1dE1lYW4sIGlucHV0VmFyLCB5KX1cbiAgJHtoZWxwZXIubWFpblN0YXJ0KCl9XG4gICR7aGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dFNpemUnKX1cbiAgICB2YXIgb3V0cHV0SW5kaWNlcyA9ICR7eS5vZmZzZXRUb0luZGljZXMoYGdsb2JhbF9pZHggKiAke2NvbXBvbmVudHN9YCl9O1xuICAgICR7Y2FsY0NPZmZzZXQoKX1cbiAgICBsZXQgc2NhbGUgPSAke3NjYWxlLmdldEJ5T2Zmc2V0KCdjT2Zmc2V0Jyl9O1xuICAgIGxldCBiaWFzID0gJHtiaWFzLmdldEJ5T2Zmc2V0KCdjT2Zmc2V0Jyl9O1xuICAgIGxldCBpbnB1dE1lYW4gPSAke2lucHV0TWVhbi5nZXRCeU9mZnNldCgnY09mZnNldCcpfTtcbiAgICBsZXQgaW5wdXRWYXIgPSAke2lucHV0VmFyLmdldEJ5T2Zmc2V0KCdjT2Zmc2V0Jyl9O1xuICAgIGxldCB4ID0gJHt4LmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4Jyl9O1xuICAgIGxldCB2YWx1ZSA9ICh4IC0gaW5wdXRNZWFuKSAqIGludmVyc2VTcXJ0KGlucHV0VmFyICsgZXBzaWxvbikgKiBzY2FsZSArIGJpYXM7XG4gICAgJHt5LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgJ3ZhbHVlJyl9XG4gIH1gO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0JhdGNoTm9ybWFsaXphdGlvbicsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgaGludDogYCR7YXR0cmlidXRlcy5lcHNpbG9ufV8ke2F0dHJpYnV0ZXMuZm9ybWF0fV8ke3NwYXRpYWx9XyR7Y29tcG9uZW50c31gLFxuICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzOiB1c2VTaGFwZXNVbmlmb3JtcyA/IFsncmFuaycsICd0eXBlJywgJ3R5cGUnLCAndHlwZScsICd0eXBlJ10gOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIGdldFNoYWRlclNvdXJjZTogZ2V0SW5mZXJlbmNlTW9kZVNoYWRlclNvdXJjZSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe2RpbXM6IGlucHV0c1swXS5kaW1zLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IHVzZVNoYXBlc1VuaWZvcm1zID9cbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LFxuICAgICAgICAgICAgICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKHlTaGFwZSksXG4gICAgICAgICAgICAgIF0gOlxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgcGFyc2VCYXRjaE5vcm1BdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQmF0Y2hOb3JtQXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleShhdHRyaWJ1dGVzIGFzIE9taXQ8QmF0Y2hOb3JtQXR0cmlidXRlcywga2V5b2YgQXR0cmlidXRlV2l0aENhY2hlS2V5Pik7XG5cbmV4cG9ydCBjb25zdCBiYXRjaE5vcm0gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCA9PiB7XG4gIGNvbnN0IHtpbnB1dHMsIG91dHB1dENvdW50fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzID0gcGFyc2VCYXRjaE5vcm1BdHRyaWJ1dGVzKHsuLi5hdHRyaWJ1dGVzLCBvdXRwdXRDb3VudH0pO1xuICBpZiAoZW52LndlYmdwdS52YWxpZGF0ZUlucHV0Q29udGVudCkge1xuICAgIHZhbGlkYXRlSW5wdXRzKGlucHV0cywgdXBkYXRlZEF0dHJpYnV0ZXMpO1xuICB9XG4gIGlmIChhdHRyaWJ1dGVzLnRyYWluaW5nTW9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmF0Y2hOb3JtYWxpemF0aW9uIHRyYWluaW5nTW9kZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4nKTtcbiAgfSBlbHNlIHtcbiAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQmF0Y2hOb3JtSW5mZXJlbmNlUHJvZ3JhbUluZm8oaW5wdXRzLCB1cGRhdGVkQXR0cmlidXRlcykpO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7aW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnB1dCBzaG91bGQgaGF2ZSAzIGRpbWVuc2lvbnMnKTtcbiAgfVxuXG4gIGlmICghWzMyMCwgNjQwLCAxMjgwXS5pbmNsdWRlcyhpbnB1dHNbMF0uZGltc1syXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ251bWJlciBvZiBjaGFubmVscyBzaG91bGQgYmUgMzIwLCA2NDAgb3IgMTI4MCcpO1xuICB9XG5cbiAgaWYgKGlucHV0c1sxXS5kaW1zLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYmlhcyBpcyBleHBlY3RlZCB0byBoYXZlIDEgZGltZW5zaW9ucycpO1xuICB9XG5cbiAgaWYgKGlucHV0c1swXS5kaW1zWzJdICE9PSBpbnB1dHNbMV0uZGltc1swXSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbGFzdCBkaW1lbnNpb24gb2YgaW5wdXQgYW5kIGJpYXMgYXJlIG5vdCB0aGUgc2FtZScpO1xuICB9XG59O1xuXG5jb25zdCBjcmVhdGVCaWFzQWRkUHJvZ3JhbUluZm8gPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiBQcm9ncmFtSW5mbyA9PiB7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG5cbiAgY29uc3QgY2hhbm5lbHMgPSBpbnB1dHNbMF0uZGltc1syXTtcbiAgLy8gc2luY2UgY2hhbm5lbCBudW1iZXIgY2FuIGJlIG9ubHkgMzIwLzY0MC8xMjgwLCBpdCdzIGFsd2F5cyBkaXZpc2FibGUgYnkgNFxuICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gNDtcblxuICBjb25zdCBkYXRhVHlwZSA9IGlucHV0c1swXS5kYXRhVHlwZTtcbiAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKCdpbnB1dCcsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgNCk7XG4gIGNvbnN0IGJpYXMgPSBpbnB1dFZhcmlhYmxlKCdiaWFzJywgZGF0YVR5cGUsIFtjaGFubmVsc10sIDQpO1xuICBjb25zdCByZXNpZHVhbCA9IGlucHV0VmFyaWFibGUoJ3Jlc2lkdWFsJywgZGF0YVR5cGUsIG91dHB1dFNoYXBlLCA0KTtcbiAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgNCk7XG5cbiAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiBgXG4gIGNvbnN0IGNoYW5uZWxzID0gJHtjaGFubmVsc311IC8gNDtcbiAgJHtzaGFkZXJIZWxwZXIuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgYmlhcywgcmVzaWR1YWwsIG91dHB1dCl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhvdXRwdXRTaXplKX1cbiAgICBsZXQgdmFsdWUgPSAke2lucHV0LmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4Jyl9XG4gICAgICArICR7Ymlhcy5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCAlIGNoYW5uZWxzJyl9ICsgJHtyZXNpZHVhbC5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpfTtcbiAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsICd2YWx1ZScpfVxuICB9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdCaWFzQWRkJyxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfVxuICAgIH0pLFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBiaWFzQWRkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUJpYXNBZGRQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cykpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge01BWF9DTElQLCBNSU5fQ0xJUCwgU2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7QXR0cmlidXRlV2l0aENhY2hlS2V5LCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mb30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2lucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGV9IGZyb20gJy4vY29tbW9uJztcblxudHlwZSBCdWlsdGluRnVuY3Rpb25OYW1lID0gc3RyaW5nO1xudHlwZSBFbGVtZW50d2lzZUN1c3RvbUV4cHJlc3Npb24gPSAoZXhwcmVzc2lvbjogc3RyaW5nKSA9PiBzdHJpbmc7XG50eXBlIEVsZW1lbnR3aXNlRnVuY3Rpb25DYWxsID0gQnVpbHRpbkZ1bmN0aW9uTmFtZXxFbGVtZW50d2lzZUN1c3RvbUV4cHJlc3Npb247XG5cbmNvbnN0IGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbVNoYWRlciA9XG4gICAgKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyLCBkYXRhc2l6ZTogbnVtYmVyLCBpbnB1dERhdGFUeXBlOiBudW1iZXIsIG91dHB1dERhdGFUeXBlOiBudW1iZXIsXG4gICAgIGZ1bmNDYWxsOiBFbGVtZW50d2lzZUZ1bmN0aW9uQ2FsbCwgYWRkaXRpb25hbEltcGxlbWVudGF0aW9uPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IHZlY1NpemUgPSBNYXRoLmNlaWwoZGF0YXNpemUgLyA0KTtcblxuICAgICAgbGV0IGV4cHJlc3Npb24gPSAnJztcbiAgICAgIGlmICh0eXBlb2YgZnVuY0NhbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBgJHtmdW5jQ2FsbH0oYSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGZ1bmNDYWxsKCdhJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZSgnaW5wdXREYXRhJywgaW5wdXREYXRhVHlwZSwgW3ZlY1NpemVdLCA0KTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXREYXRhJywgb3V0cHV0RGF0YVR5cGUsIFt2ZWNTaXplXSwgNCk7XG5cbiAgICAgIHJldHVybiBgXG4gICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ3ZlY19zaXplJywgJ3UzMicpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIG91dHB1dCl9XG5cbiAgJHthZGRpdGlvbmFsSW1wbGVtZW50YXRpb24gPz8gJyd9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMudmVjX3NpemUnKX1cblxuICAgIGxldCBhID0gJHtpbnB1dC5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpfTtcbiAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIGV4cHJlc3Npb24pfVxuICB9YDtcbiAgICB9O1xuXG5jb25zdCBjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvID1cbiAgICAoaW5wdXQ6IFRlbnNvclZpZXcsIG5hbWU6IHN0cmluZywgZnVuY0NhbGw6IEVsZW1lbnR3aXNlRnVuY3Rpb25DYWxsLCBhZGRpdGlvbmFsSW1wbGVtZW50YXRpb24/OiBzdHJpbmcsXG4gICAgIGNhY2hlS2V5Pzogc3RyaW5nLCBvdXRwdXREYXRhVHlwZTogbnVtYmVyID0gaW5wdXQuZGF0YVR5cGUpOiBQcm9ncmFtSW5mbyA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIHNoYWRlckNhY2hlOiB7aGludDogY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3R5cGUnXX0sXG4gICAgICBnZXRTaGFkZXJTb3VyY2U6IHNoYWRlckhlbHBlciA9PiBjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1TaGFkZXIoXG4gICAgICAgICAgc2hhZGVySGVscGVyLCBTaGFwZVV0aWwuc2l6ZShpbnB1dC5kaW1zKSwgaW5wdXQuZGF0YVR5cGUsIG91dHB1dERhdGFUeXBlLCBmdW5jQ2FsbCwgYWRkaXRpb25hbEltcGxlbWVudGF0aW9uKSxcbiAgICAgIGdldFJ1bkRhdGE6IChpbnB1dFRlbnNvcnMpID0+ICh7XG4gICAgICAgIG91dHB1dHM6IFt7ZGltczogaW5wdXQuZGltcywgZGF0YVR5cGU6IG91dHB1dERhdGFUeXBlfV0sXG4gICAgICAgIGRpc3BhdGNoR3JvdXA6XG4gICAgICAgICAgICB7eDogTWF0aC5jZWlsKFNoYXBlVXRpbC5zaXplKGlucHV0VGVuc29yc1swXS5kaW1zKSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovIC8gNCAvKiB2ZWMgc2l6ZSAqLyl9LFxuICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IFtcbiAgICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUoaW5wdXQuZGltcykgLyA0KX0sXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgYWJzID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnQWJzJywgJ2FicycpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhY29zID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnQWNvcycsICdhY29zJykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFjb3NoID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnQWNvc2gnLCAnYWNvc2gnKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYXNpbiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0FzaW4nLCAnYXNpbicpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc2luaCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0FzaW5oJywgJ2FzaW5oJykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGF0YW4gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sICdBdGFuJywgJ2F0YW4nKSk7XG59O1xuZXhwb3J0IGNvbnN0IGF0YW5oID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnQXRhbmgnLCAnYXRhbmgnKSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENhc3RBdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgdG86IG51bWJlcjtcbiAgcmVhZG9ubHkgc2F0dXJhdGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VDYXN0QXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IENhc3RBdHRyaWJ1dGVzID0+XG4gICAgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KGF0dHJpYnV0ZXMgYXMge3RvOiBudW1iZXJ9KTtcblxuXG5leHBvcnQgY29uc3QgY2FzdCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogQ2FzdEF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgbGV0IGZ1bmM6IEVsZW1lbnR3aXNlRnVuY3Rpb25DYWxsO1xuICBzd2l0Y2ggKGF0dHJpYnV0ZXMudG8pIHtcbiAgICBjYXNlIERhdGFUeXBlLmZsb2F0MTY6XG4gICAgICBmdW5jID0gJ3ZlYzQ8ZjE2Pic7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERhdGFUeXBlLmZsb2F0OlxuICAgICAgZnVuYyA9ICd2ZWM0PGYzMj4nO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEYXRhVHlwZS51aW50MzI6XG4gICAgICBmdW5jID0gJ3ZlYzQ8dTMyPic7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERhdGFUeXBlLmludDMyOlxuICAgICAgZnVuYyA9ICd2ZWM0PGkzMj4nO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEYXRhVHlwZS5ib29sOlxuICAgICAgZnVuYyA9ICd2ZWM0PGJvb2w+JztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgbm90IHN1cHBvcnRlZCB0eXBlIChzcGVjaWZpZWQgaW4gYXR0cmlidXRlICd0bycgZnJvbSAnQ2FzdCcgb3BlcmF0b3IpOiAke2F0dHJpYnV0ZXMudG99YCk7XG4gIH1cbiAgY29udGV4dC5jb21wdXRlKFxuICAgICAgY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0Nhc3QnLCBmdW5jLCB1bmRlZmluZWQsIGF0dHJpYnV0ZXMuY2FjaGVLZXksIGF0dHJpYnV0ZXMudG8pKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcEF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBtaW46IG51bWJlcjtcbiAgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG59XG5cbmNvbnN0IGdlbmVyYXRlQ2xpcEF0dHJpYnV0ZXNGcm9tSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogQ2xpcEF0dHJpYnV0ZXMgPT4ge1xuICBjb25zdCBtaW4gPSAoaW5wdXRzLmxlbmd0aCA+PSAyICYmIGlucHV0c1sxXS5kYXRhICE9PSAwKSA/IGlucHV0c1sxXS5nZXRGbG9hdDMyQXJyYXkoKVswXSA6IE1JTl9DTElQO1xuICBjb25zdCBtYXggPSAoaW5wdXRzLmxlbmd0aCA+PSAzICYmIGlucHV0c1syXS5kYXRhICE9PSAwKSA/IGlucHV0c1syXS5nZXRGbG9hdDMyQXJyYXkoKVswXSA6IE1BWF9DTElQO1xuICByZXR1cm4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHttaW4sIG1heH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsaXAgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGNsaXBBdHRyaWJ1dGVzOiBDbGlwQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVzID0gY29udGV4dC5pbnB1dHMubGVuZ3RoID09PSAxID8gY2xpcEF0dHJpYnV0ZXMgOiBnZW5lcmF0ZUNsaXBBdHRyaWJ1dGVzRnJvbUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gIGNvbnRleHQuY29tcHV0ZShcbiAgICAgIGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oXG4gICAgICAgICAgY29udGV4dC5pbnB1dHNbMF0sICdDbGlwJywgYSA9PiBgY2xhbXAoJHthfSwgY2xpcF9taW5fLCBjbGlwX21heF8pYCwgYFxuICAgIGNvbnN0IGNsaXBfbWluXzogdmVjNDwke2RhdGFUeXBlfT4gPSB2ZWM0KCR7ZGF0YVR5cGV9KCR7YXR0cmlidXRlcy5taW59KSk7XG4gICAgY29uc3QgY2xpcF9tYXhfOiB2ZWM0PCR7ZGF0YVR5cGV9PiA9IHZlYzQoJHtkYXRhVHlwZX0oJHthdHRyaWJ1dGVzLm1heH0pKTtcbmAsXG4gICAgICAgICAgYXR0cmlidXRlcy5jYWNoZUtleSksXG4gICAgICB7aW5wdXRzOiBbMF19KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjZWlsID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnQ2VpbCcsICdjZWlsJykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcyA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0NvcycsICdjb3MnKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29zaCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0Nvc2gnLCAnY29zaCcpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxwaGFBdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgYWxwaGE6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlQWxwaGFBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQWxwaGFBdHRyaWJ1dGVzID0+XG4gICAgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KGF0dHJpYnV0ZXMgYXMge2FscGhhOiBudW1iZXJ9KTtcblxuZXhwb3J0IGNvbnN0IGVsdSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogQWxwaGFBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKFxuICAgICAgY29udGV4dC5pbnB1dHNbMF0sICdFbHUnLCBhID0+IGBlbHVfdmYzMigke2F9KWAsIGBcbiAgY29uc3QgZWx1X2FscGhhXyA9ICR7ZGF0YVR5cGV9KCR7YXR0cmlidXRlcy5hbHBoYX0pO1xuXG4gIGZuIGVsdV9mMzIoYTogJHtkYXRhVHlwZX0pIC0+ICR7ZGF0YVR5cGV9IHtcbiAgcmV0dXJuIHNlbGVjdCgoZXhwKGEpIC0gMS4wKSAqIGVsdV9hbHBoYV8sIGEsIGEgPj0gMC4wKTtcbiAgfVxuXG4gIGZuIGVsdV92ZjMyKHY6IHZlYzQ8JHtkYXRhVHlwZX0+KSAtPiB2ZWM0PCR7ZGF0YVR5cGV9PiB7XG4gIHJldHVybiB2ZWM0KGVsdV9mMzIodi54KSwgZWx1X2YzMih2LnkpLCBlbHVfZjMyKHYueiksIGVsdV9mMzIodi53KSk7XG4gIH1gLFxuICAgICAgYXR0cmlidXRlcy5jYWNoZUtleSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGVyZkltcGwgPSAodmFyVHlwZSA9ICdmMzInKSA9PiBgXG5jb25zdCByMDogJHt2YXJUeXBlfSA9IDAuMzI3NTkxMTtcbmNvbnN0IHIxOiAke3ZhclR5cGV9ID0gMC4yNTQ4Mjk1OTI7XG5jb25zdCByMjogJHt2YXJUeXBlfSA9IC0wLjI4NDQ5NjczNjtcbmNvbnN0IHIzOiAke3ZhclR5cGV9ID0gMS40MjE0MTM3NDE7XG5jb25zdCByNDogJHt2YXJUeXBlfSA9IC0xLjQ1MzE1MjAyNztcbmNvbnN0IHI1OiAke3ZhclR5cGV9ID0gMS4wNjE0MDU0Mjk7XG5cbmZuIGVyZl92ZjMyKHY6IHZlYzQ8JHt2YXJUeXBlfT4pIC0+IHZlYzQ8JHt2YXJUeXBlfT4ge1xuICBsZXQgYWJzdiA9IGFicyh2KTtcbiAgbGV0IHggPSAxLjAgLyAoMS4wICsgcjAgKiBhYnN2KTtcbiAgcmV0dXJuIHNpZ24odikgKiAoMS4wIC0gKCgoKHI1ICogeCArIHI0KSAqIHggKyByMykgKiB4ICsgcjIpICogeCArIHIxKSAqIHggKiBleHAoLWFic3YgKiBhYnN2KSk7XG59YDtcblxuZXhwb3J0IGNvbnN0IGVyZiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ0VyZicsIGEgPT4gYGVyZl92ZjMyKCR7YX0pYCwgZXJmSW1wbChkYXRhVHlwZSkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHAgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sICdFeHAnLCAnZXhwJykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZsb29yID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnRmxvb3InLCAnZmxvb3InKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VsdSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhcbiAgICAgIGNvbnRleHQuaW5wdXRzWzBdLCAnR2VsdScsIGEgPT4gYDAuNSAqICR7YX0gKiAoMS4wICsgZXJmX3ZmMzIoJHthfSAqIDAuNzA3MTA2NzgxMTg2NTQ3NSkpYCwgZXJmSW1wbChkYXRhVHlwZSkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsZWFreVJlbHUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IEFscGhhQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhcbiAgICAgIGNvbnRleHQuaW5wdXRzWzBdLCAnTGVha3lSZWx1JywgYSA9PiBgc2VsZWN0KGxlYWt5X3JlbHVfYWxwaGFfICogJHthfSwgJHthfSwgJHthfSA+PSB2ZWM0PCR7ZGF0YVR5cGV9PigwLjApKWAsXG4gICAgICBgY29uc3QgbGVha3lfcmVsdV9hbHBoYV8gPSAke2RhdGFUeXBlfSgke2F0dHJpYnV0ZXMuYWxwaGF9KTtgLCBhdHRyaWJ1dGVzLmNhY2hlS2V5KSk7XG59O1xuXG5leHBvcnQgY29uc3Qgbm90ID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnTm90JywgYSA9PiBgISR7YX1gKSk7XG59O1xuXG5leHBvcnQgY29uc3QgbmVnID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnTmVnJywgYSA9PiBgLSR7YX1gKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVjaXByb2NhbCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ1JlY2lwcm9jYWwnLCBhID0+IGAxLjAvJHthfWApKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWx1ID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKFxuICAgICAgY29udGV4dC5pbnB1dHNbMF0sICdSZWx1JywgYSA9PiBgc2VsZWN0KHZlYzQ8JHtkYXRhVHlwZX0+KDAuMCksICR7YX0sICR7YX0gPiB2ZWM0PCR7ZGF0YVR5cGV9PigwLjApKWApKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWdtb2lkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnU2lnbW9pZCcsIGEgPT4gYCgxLjAgLyAoMS4wICsgZXhwKC0ke2F9KSkpYCkpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBIYXJkU2lnbW9pZEF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBhbHBoYTogbnVtYmVyO1xuICByZWFkb25seSBiZXRhOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZUhhcmRTaWdtb2lkQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEhhcmRTaWdtb2lkQXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleShhdHRyaWJ1dGVzIGFzIHtcbiAgICAgIGFscGhhOiBudW1iZXI7XG4gICAgICBiZXRhOiBudW1iZXI7XG4gICAgfSk7XG5cbmV4cG9ydCBjb25zdCBoYXJkU2lnbW9pZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogSGFyZFNpZ21vaWRBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKFxuICAgICAgY29udGV4dC5pbnB1dHNbMF0sICdIYXJkU2lnbW9pZCcsXG4gICAgICBhID0+IGBtYXgodmVjNDwke2RhdGFUeXBlfT4oMC4wKSwgbWluKHZlYzQ8JHtkYXRhVHlwZX0+KDEuMCksICR7YXR0cmlidXRlcy5hbHBoYX0gKiAke2F9ICsgdmVjNDwke2RhdGFUeXBlfT4oJHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLmJldGF9KSkpYCxcbiAgICAgIHVuZGVmaW5lZCwgYXR0cmlidXRlcy5jYWNoZUtleSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpbiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ1NpbicsICdzaW4nKSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2luaCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ1NpbmgnLCAnc2luaCcpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzcXJ0ID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCAnU3FydCcsICdzcXJ0JykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRhbiA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ1RhbicsICd0YW4nKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdGFuaEV4cHJlc3Npb24gPSAoYTogc3RyaW5nKSA9PiBgc2lnbigke2F9KSAqICgxIC0gZXhwKC0yICogYWJzKCR7YX0pKSkgLyAoMSArIGV4cCgtMiAqIGFicygke2F9KSkpYDtcblxuZXhwb3J0IGNvbnN0IHRhbmggPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgLy8gVE9ETzogcmV2aXNpdCBhZnRlciBodHRwczovL2dpdGh1Yi5jb20vZ3B1d2ViL2dwdXdlYi9pc3N1ZXMvNDQ1OCBpcyByZXNvbHZlZFxuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgJ1RhbmgnLCB0YW5oRXhwcmVzc2lvbikpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZhc3RHZWx1SW1wbCA9ICh2YXJUeXBlID0gJ2YzMicpID0+IGBcbmNvbnN0IGZhc3RfZ2VsdV9hOiAke3ZhclR5cGV9ID0gMC41O1xuY29uc3QgZmFzdF9nZWx1X2I6ICR7dmFyVHlwZX0gPSAwLjc5Nzg4NDU2MDgwMjg2NTQ7XG5jb25zdCBmYXN0X2dlbHVfYzogJHt2YXJUeXBlfSA9IDAuMDM1Njc3NDA4MTM2MzAwMTI1O1xuXG5mbiB0YW5oX3YodjogdmVjNDwke3ZhclR5cGV9PikgLT4gdmVjNDwke3ZhclR5cGV9PiB7XG4gIHJldHVybiAke3RhbmhFeHByZXNzaW9uKCd2Jyl9O1xufVxuYDtcblxuZXhwb3J0IGNvbnN0IGZhc3RHZWx1RXhwcmVzc2lvbiA9ICh4OiBzdHJpbmcpID0+XG4gICAgYChmYXN0X2dlbHVfYSArIGZhc3RfZ2VsdV9hICogdGFuaF92KCR7eH0gKiAoZmFzdF9nZWx1X2MgKiAke3h9ICogJHt4fSArIGZhc3RfZ2VsdV9iKSkpICogJHt4fWA7XG5cbmV4cG9ydCBjb25zdCBmYXN0R2VsdSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhcbiAgICAgIGNvbnRleHQuaW5wdXRzWzBdLCAnRmFzdEdlbHUnLCBmYXN0R2VsdUV4cHJlc3Npb24sIGZhc3RHZWx1SW1wbChkYXRhVHlwZSksIHVuZGVmaW5lZCxcbiAgICAgIGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgdGhyZXNob2xkZWRSZWx1ID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBBbHBoYUF0dHJpYnV0ZXMpOiBudW1iZXIgPT4ge1xuICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhcbiAgICAgIGNvbnRleHQuaW5wdXRzWzBdLCAnVGhyZXNob2xkZWRSZWx1JywgYSA9PiBgc2VsZWN0KHZlYzQ8JHtkYXRhVHlwZX0+KDAuMCksICR7YX0sICR7YX0gPiB0aHJlc2hvbGRlZF9yZWx1X2FscGhhXylgLFxuICAgICAgYGNvbnN0IHRocmVzaG9sZGVkX3JlbHVfYWxwaGFfID0gdmVjNDwke2RhdGFUeXBlfT4oJHthdHRyaWJ1dGVzLmFscGhhfSk7YCwgYXR0cmlidXRlcy5jYWNoZUtleSkpO1xuICByZXR1cm4gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2cgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sICdMb2cnLCAnbG9nJykpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mb30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2lucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZX0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtlcmZJbXBsfSBmcm9tICcuL3VuYXJ5LW9wJztcblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKGlucHV0c1swXS5kaW1zLmxlbmd0aCAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgc2hvdWxkIGhhdmUgMyBkaW1lbnNpb25zJyk7XG4gIH1cblxuICBpZiAoIVsyNTYwLCA1MTIwLCAxMDI0MF0uaW5jbHVkZXMoaW5wdXRzWzBdLmRpbXNbMl0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdoaWRkZW4gc3RhdGUgc2hvdWxkIGJlIDI1NjAsIDUxMjAgb3IgMTAyNDAnKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMV0uZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpYXMgaXMgZXhwZWN0ZWQgdG8gaGF2ZSAxIGRpbWVuc2lvbnMnKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMF0uZGltc1syXSAhPT0gaW5wdXRzWzFdLmRpbXNbMF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2xhc3QgZGltZW5zaW9uIG9mIGlucHV0IGFuZCBiaWFzIGFyZSBub3QgdGhlIHNhbWUnKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlQmlhc1NwbGl0R2VsdVByb2dyYW1JbmZvID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zLnNsaWNlKCk7XG4gIG91dHB1dFNoYXBlWzJdID0gb3V0cHV0U2hhcGVbMl0gLyAyO1xuXG4gIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLCA0KTtcbiAgY29uc3QgYmlhcyA9IGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIFtpbnB1dHNbMF0uZGltc1syXV0sIDQpO1xuICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgNCk7XG5cbiAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKSAvIDQ7XG4gIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0c1swXS5kYXRhVHlwZSk7XG5cbiAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiBgXG4gIGNvbnN0IE1fU1FSVDIgPSBzcXJ0KDIuMCk7XG4gIGNvbnN0IGhhbGZDaGFubmVscyA9ICR7aW5wdXRzWzBdLmRpbXNbMl0gLyA0IC8gMn11O1xuXG4gICR7c2hhZGVySGVscGVyLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIGJpYXMsIG91dHB1dCl9XG5cbiAgJHtlcmZJbXBsKGRhdGFUeXBlKX1cblxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKG91dHB1dFNpemUpfVxuICAgIGxldCBiaWFzSWR4ID0gZ2xvYmFsX2lkeCAlIGhhbGZDaGFubmVscztcbiAgICBsZXQgYmF0Y2hJbmRleCA9IGdsb2JhbF9pZHggLyBoYWxmQ2hhbm5lbHM7XG4gICAgbGV0IGlucHV0T2Zmc2V0ID0gYmlhc0lkeCArIGJhdGNoSW5kZXggKiBoYWxmQ2hhbm5lbHMgKiAyO1xuICAgIGxldCB2YWx1ZUxlZnQgPSBpbnB1dFtpbnB1dE9mZnNldF0gKyBiaWFzW2JpYXNJZHhdO1xuICAgIGxldCB2YWx1ZVJpZ2h0ID0gaW5wdXRbaW5wdXRPZmZzZXQgKyBoYWxmQ2hhbm5lbHNdICsgYmlhc1tiaWFzSWR4ICsgaGFsZkNoYW5uZWxzXTtcbiAgICBsZXQgZ2VsdVJpZ2h0ID0gdmFsdWVSaWdodCAqIDAuNSAqIChlcmZfdmYzMih2YWx1ZVJpZ2h0IC8gTV9TUVJUMikgKyAxKTtcblxuICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgJ3ZhbHVlTGVmdCAqIGdlbHVSaWdodCcpfVxuICB9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdCaWFzU3BsaXRHZWx1JyxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfVxuICAgIH0pLFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBiaWFzU3BsaXRHZWx1ID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUJpYXNTcGxpdEdlbHVQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cykpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge0Jyb2FkY2FzdFV0aWwsIFNoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mb30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyfSBmcm9tICcuL2NvbW1vbic7XG5cbnR5cGUgQnVpbHRpbkZ1bmN0aW9uTmFtZSA9IHN0cmluZztcbnR5cGUgQmluYXJ5Q3VzdG9tRXhwcmVzc2lvbiA9IChleHByZXNzaW9uQTogc3RyaW5nLCBleHByZXNzaW9uQjogc3RyaW5nKSA9PiBzdHJpbmc7XG50eXBlIEJpbmFyeUZ1bmN0aW9uQ2FsbCA9IEJ1aWx0aW5GdW5jdGlvbk5hbWV8QmluYXJ5Q3VzdG9tRXhwcmVzc2lvbnx7XG4gIHNjYWxhcjogQmluYXJ5Q3VzdG9tRXhwcmVzc2lvbjtcbiAgdmVjdG9yOiBCaW5hcnlDdXN0b21FeHByZXNzaW9uO1xufTtcblxuY29uc3QgY3JlYXRlQmluYXJ5T3BQcm9ncmFtU2hhZGVyID1cbiAgICAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIsIGRpbXNBOiByZWFkb25seSBudW1iZXJbXSwgZGltc0I6IHJlYWRvbmx5IG51bWJlcltdLCBkaW1zT3V0cHV0OiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgdmVjdG9yaXplOiBib29sZWFuLCBkb0Jyb2FkY2FzdDogYm9vbGVhbiwgc2hhcmVkRGltZW5zaW9uRGl2aXNpYmxlQnk0OiBib29sZWFuLCBmdW5jQ2FsbDogQmluYXJ5RnVuY3Rpb25DYWxsLFxuICAgICB0eXBlQTogbnVtYmVyLCB0eXBlQjogbnVtYmVyLCB0eXBlT3V0cHV0OiBudW1iZXIsIGFkZGl0aW9uYWxJbXBsZW1lbnRhdGlvbj86IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGV4cHJlc3Npb25TY2FsYXI6IEJpbmFyeUN1c3RvbUV4cHJlc3Npb247XG4gICAgICBsZXQgZXhwcmVzc2lvblZlY3RvcjogQmluYXJ5Q3VzdG9tRXhwcmVzc2lvbjtcbiAgICAgIGlmICh0eXBlb2YgZnVuY0NhbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGV4cHJlc3Npb25TY2FsYXIgPSBleHByZXNzaW9uVmVjdG9yID0gKGEsIGIpID0+IGAke2Z1bmNDYWxsfSgoJHthfSksKCR7Yn0pKWA7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmdW5jQ2FsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBleHByZXNzaW9uU2NhbGFyID0gZXhwcmVzc2lvblZlY3RvciA9IGZ1bmNDYWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwcmVzc2lvblNjYWxhciA9IGZ1bmNDYWxsLnNjYWxhcjtcbiAgICAgICAgZXhwcmVzc2lvblZlY3RvciA9IGZ1bmNDYWxsLnZlY3RvcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dERhdGEnLCB0eXBlT3V0cHV0LCBkaW1zT3V0cHV0Lmxlbmd0aCwgNCk7XG4gICAgICBjb25zdCBhID0gaW5wdXRWYXJpYWJsZSgnYURhdGEnLCB0eXBlQSwgZGltc0EubGVuZ3RoLCA0KTtcbiAgICAgIGNvbnN0IGIgPSBpbnB1dFZhcmlhYmxlKCdiRGF0YScsIHR5cGVCLCBkaW1zQi5sZW5ndGgsIDQpO1xuXG4gICAgICBsZXQgYXNzaWdubWVudDogc3RyaW5nO1xuICAgICAgaWYgKHZlY3Rvcml6ZSkge1xuICAgICAgICBpZiAoZG9Ccm9hZGNhc3QpIHtcbiAgICAgICAgICBjb25zdCBpc0FPbmVFbGVtZW50ID0gU2hhcGVVdGlsLnNpemUoZGltc0EpID09PSAxO1xuICAgICAgICAgIGNvbnN0IGlzQk9uZUVsZW1lbnQgPSBTaGFwZVV0aWwuc2l6ZShkaW1zQikgPT09IDE7XG4gICAgICAgICAgY29uc3QgYUxhc3REaW1EaXZpc2libGVCeTQgPSBkaW1zQS5sZW5ndGggPiAwICYmIGRpbXNBW2RpbXNBLmxlbmd0aCAtIDFdICUgNCA9PT0gMDtcbiAgICAgICAgICBjb25zdCBiTGFzdERpbURpdmlzaWJsZUJ5NCA9IGRpbXNCLmxlbmd0aCA+IDAgJiYgZGltc0JbZGltc0IubGVuZ3RoIC0gMV0gJSA0ID09PSAwO1xuICAgICAgICAgIGlmIChpc0FPbmVFbGVtZW50IHx8IGlzQk9uZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGFzc2lnbm1lbnQgPSBvdXRwdXQuc2V0QnlPZmZzZXQoXG4gICAgICAgICAgICAgICAgJ2dsb2JhbF9pZHgnLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25WZWN0b3IoXG4gICAgICAgICAgICAgICAgICAgIGlzQU9uZUVsZW1lbnQgPyBgJHthLnR5cGUudmFsdWV9KCR7YS5nZXRCeU9mZnNldCgnMCcpfS54KWAgOiBhLmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JyksXG4gICAgICAgICAgICAgICAgICAgIGlzQk9uZUVsZW1lbnQgPyBgJHtiLnR5cGUudmFsdWV9KCR7Yi5nZXRCeU9mZnNldCgnMCcpfS54KWAgOiBiLmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JykpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzaWdubWVudCA9IGBcbiAgICAgICAgICAgIGxldCBvdXRwdXRJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4ICogNHUnKX07XG4gICAgICAgICAgICBsZXQgb2Zmc2V0QSA9ICR7YS5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldCgnb3V0cHV0SW5kaWNlcycsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldEIgPSAke2IuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoJ291dHB1dEluZGljZXMnLCBvdXRwdXQpfTtcbiAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgb3V0cHV0LnNldEJ5T2Zmc2V0KFxuICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsX2lkeCcsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25WZWN0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWREaW1lbnNpb25EaXZpc2libGVCeTQgfHwgYUxhc3REaW1EaXZpc2libGVCeTQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuZ2V0QnlPZmZzZXQoJ29mZnNldEEgLyA0dScpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHthLnR5cGUudmFsdWV9KCR7YS5nZXRCeU9mZnNldCgnb2Zmc2V0QSAvIDR1Jyl9W29mZnNldEEgJSA0dV0pYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZERpbWVuc2lvbkRpdmlzaWJsZUJ5NCB8fCBiTGFzdERpbURpdmlzaWJsZUJ5NCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5nZXRCeU9mZnNldCgnb2Zmc2V0QiAvIDR1JykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2IudHlwZS52YWx1ZX0oJHtiLmdldEJ5T2Zmc2V0KCdvZmZzZXRCIC8gNHUnKX1bb2Zmc2V0QiAlIDR1XSlgKSl9XG4gICAgICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzaWdubWVudCA9IG91dHB1dC5zZXRCeU9mZnNldChcbiAgICAgICAgICAgICAgJ2dsb2JhbF9pZHgnLCBleHByZXNzaW9uVmVjdG9yKGEuZ2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnKSwgYi5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZG9Ccm9hZGNhc3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIG5lY2Vzc2FyeSB0byB1c2Ugc2NhbGFyIGltcGxlbWVudGF0aW9uIGZvciBlbGVtZW50LXdpc2UgYmluYXJ5IG9wIGltcGxlbWVudGF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2luZ2xlQXNzaWdubWVudCA9IChyZXNTdHI6IHN0cmluZywgeDogbnVtYmVyLCB0eXBlQ2FzdCA9ICcnKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhwcmVzc2lvbkEgPSBgYURhdGFbaW5kZXhBJHt4fV1bY29tcG9uZW50QSR7eH1dYDtcbiAgICAgICAgICBjb25zdCBleHByZXNzaW9uQiA9IGBiRGF0YVtpbmRleEIke3h9XVtjb21wb25lbnRCJHt4fV1gO1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICBsZXQgb3V0cHV0SW5kaWNlcyR7eH0gPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoYGdsb2JhbF9pZHggKiA0dSArICR7eH11YCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldEEke3h9ID0gJHthLmJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0KGBvdXRwdXRJbmRpY2VzJHt4fWAsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldEIke3h9ID0gJHtiLmJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0KGBvdXRwdXRJbmRpY2VzJHt4fWAsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IGluZGV4QSR7eH0gPSBvZmZzZXRBJHt4fSAvIDR1O1xuICAgICAgICAgICAgbGV0IGluZGV4QiR7eH0gPSBvZmZzZXRCJHt4fSAvIDR1O1xuICAgICAgICAgICAgbGV0IGNvbXBvbmVudEEke3h9ID0gb2Zmc2V0QSR7eH0gJSA0dTtcbiAgICAgICAgICAgIGxldCBjb21wb25lbnRCJHt4fSA9IG9mZnNldEIke3h9ICUgNHU7XG4gICAgICAgICAgICAke3Jlc1N0cn1bJHt4fV0gPSAke3R5cGVDYXN0fSgke2V4cHJlc3Npb25TY2FsYXIoZXhwcmVzc2lvbkEsIGV4cHJlc3Npb25CKX0pO1xuICAgICAgICAgIGA7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlT3V0cHV0ID09PSBEYXRhVHlwZS5ib29sKSB7XG4gICAgICAgICAgYXNzaWdubWVudCA9IGBcbiAgICAgICAgICAgIHZhciBkYXRhID0gdmVjNDx1MzI+KDApO1xuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdkYXRhJywgMCwgJ3UzMicpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdkYXRhJywgMSwgJ3UzMicpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdkYXRhJywgMiwgJ3UzMicpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdkYXRhJywgMywgJ3UzMicpfVxuICAgICAgICAgICAgb3V0cHV0RGF0YVtnbG9iYWxfaWR4XSA9IGRvdCh2ZWM0PHUzMj4oMHgxLCAweDEwMCwgMHgxMDAwMCwgMHgxMDAwMDAwKSwgdmVjNDx1MzI+KGRhdGEpKTtgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFzc2lnbm1lbnQgPSBgXG4gICAgICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoJ291dHB1dERhdGFbZ2xvYmFsX2lkeF0nLCAwKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnb3V0cHV0RGF0YVtnbG9iYWxfaWR4XScsIDEpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdvdXRwdXREYXRhW2dsb2JhbF9pZHhdJywgMil9XG4gICAgICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoJ291dHB1dERhdGFbZ2xvYmFsX2lkeF0nLCAzKX1cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgXG4gICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgndmVjX3NpemUnLCAndTMyJykuZGVjbGFyZVZhcmlhYmxlcyhhLCBiLCBvdXRwdXQpfVxuXG4gICAgICAgICR7YWRkaXRpb25hbEltcGxlbWVudGF0aW9uID8/ICcnfVxuXG4gICAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy52ZWNfc2l6ZScpfVxuICAgICAgICAke2Fzc2lnbm1lbnR9XG4gICAgICB9YDtcbiAgICB9O1xuXG5jb25zdCBjcmVhdGVCaW5hcnlPcFByb2dyYW1JbmZvID1cbiAgICAobmFtZTogc3RyaW5nLCBjYWNoZUtleTogc3RyaW5nLCBhOiBUZW5zb3JWaWV3LCBiOiBUZW5zb3JWaWV3LCBmdW5jQ2FsbDogQmluYXJ5RnVuY3Rpb25DYWxsLFxuICAgICBhZGRpdGlvbmFsSW1wbGVtZW50YXRpb24/OiBzdHJpbmcsIG91dHB1dERhdGFUeXBlOiBudW1iZXIgPSBhLmRhdGFUeXBlKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3QgaXNCcm9hZGNhc3QgPSAhU2hhcGVVdGlsLmFyZUVxdWFsKGEuZGltcywgYi5kaW1zKTtcbiAgICAgIGxldCBvdXRwdXRTaGFwZSA9IGEuZGltcztcbiAgICAgIGxldCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUoYS5kaW1zKTtcblxuICAgICAgbGV0IHZlY3Rvcml6ZSA9IGZhbHNlO1xuICAgICAgbGV0IHNoYXJlZERpbWVuc2lvbkRpdmlzaWJsZUJ5NCA9IGZhbHNlO1xuXG4gICAgICAvLyBUT0RPOiBkZWFsIHdpdGggemVyby1zaXplZCB0ZW5zb3JzIChlZy4gZGltcz1bMSwwXSlcbiAgICAgIGNvbnN0IGNhY2hlS2V5QXV4ID0gW2lzQnJvYWRjYXN0XTtcbiAgICAgIGlmIChpc0Jyb2FkY2FzdCkge1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVkU2hhcGUgPSBCcm9hZGNhc3RVdGlsLmNhbGNTaGFwZShhLmRpbXMsIGIuZGltcywgZmFsc2UpO1xuICAgICAgICBpZiAoIWNhbGN1bGF0ZWRTaGFwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBwZXJmb3JtIGJpbmFyeSBvcCBvbiB0aGUgZ2l2ZW4gdGVuc29ycycpO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dFNoYXBlID0gY2FsY3VsYXRlZFNoYXBlO1xuICAgICAgICBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgICBjb25zdCBpc0FPbmVFbGVtZW50ID0gU2hhcGVVdGlsLnNpemUoYS5kaW1zKSA9PT0gMTtcbiAgICAgICAgY29uc3QgaXNCT25lRWxlbWVudCA9IFNoYXBlVXRpbC5zaXplKGIuZGltcykgPT09IDE7XG4gICAgICAgIGNvbnN0IGFMYXN0RGltRGl2aXNpYmxlQnk0ID0gYS5kaW1zLmxlbmd0aCA+IDAgJiYgYS5kaW1zW2EuZGltcy5sZW5ndGggLSAxXSAlIDQgPT09IDA7XG4gICAgICAgIGNvbnN0IGJMYXN0RGltRGl2aXNpYmxlQnk0ID0gYi5kaW1zLmxlbmd0aCA+IDAgJiYgYi5kaW1zW2IuZGltcy5sZW5ndGggLSAxXSAlIDQgPT09IDA7XG4gICAgICAgIGNhY2hlS2V5QXV4LnB1c2goaXNBT25lRWxlbWVudCk7XG4gICAgICAgIGNhY2hlS2V5QXV4LnB1c2goaXNCT25lRWxlbWVudCk7XG4gICAgICAgIGNhY2hlS2V5QXV4LnB1c2goYUxhc3REaW1EaXZpc2libGVCeTQpO1xuICAgICAgICBjYWNoZUtleUF1eC5wdXNoKGJMYXN0RGltRGl2aXNpYmxlQnk0KTtcbiAgICAgICAgLy8gY2hlY2sgd2hldGhlciB2ZWN0b3JpemUgY2FuIGJlIGVuYWJsZWRcbiAgICAgICAgbGV0IHNoYXJlZERpbWVuc2lvbiA9IDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgb3V0cHV0U2hhcGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkaW1BID0gYS5kaW1zW2EuZGltcy5sZW5ndGggLSBpXSA/PyAxO1xuICAgICAgICAgIGNvbnN0IGRpbUIgPSBiLmRpbXNbYi5kaW1zLmxlbmd0aCAtIGldID8/IDE7XG4gICAgICAgICAgaWYgKGRpbUEgPT09IGRpbUIpIHtcbiAgICAgICAgICAgIHNoYXJlZERpbWVuc2lvbiAqPSBkaW1BO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYXJlZERpbWVuc2lvbiAlIDQgPT09IDApIHtcbiAgICAgICAgICBzaGFyZWREaW1lbnNpb25EaXZpc2libGVCeTQgPSB0cnVlO1xuICAgICAgICAgIHZlY3Rvcml6ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBT25lRWxlbWVudCB8fCBpc0JPbmVFbGVtZW50IHx8IGFMYXN0RGltRGl2aXNpYmxlQnk0IHx8IGJMYXN0RGltRGl2aXNpYmxlQnk0KSB7XG4gICAgICAgICAgdmVjdG9yaXplID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZWxlbWVudC13aXNlXG4gICAgICAgIHZlY3Rvcml6ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBjYWNoZUtleUF1eC5wdXNoKHZlY3Rvcml6ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgaGludDogY2FjaGVLZXkgKyBjYWNoZUtleUF1eC5tYXAoKHgpID0+IHgudG9TdHJpbmcoKSkuam9pbignXycpLFxuICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnLCAncmFuayddLFxuICAgICAgICB9LFxuICAgICAgICBnZXRTaGFkZXJTb3VyY2U6IChzaGFkZXJIZWxwZXIpID0+IGNyZWF0ZUJpbmFyeU9wUHJvZ3JhbVNoYWRlcihcbiAgICAgICAgICAgIHNoYWRlckhlbHBlciwgYS5kaW1zLCBiLmRpbXMsIG91dHB1dFNoYXBlLCB2ZWN0b3JpemUsIGlzQnJvYWRjYXN0LCBzaGFyZWREaW1lbnNpb25EaXZpc2libGVCeTQsIGZ1bmNDYWxsLFxuICAgICAgICAgICAgYS5kYXRhVHlwZSwgYi5kYXRhVHlwZSwgb3V0cHV0RGF0YVR5cGUsIGFkZGl0aW9uYWxJbXBsZW1lbnRhdGlvbiksXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IG91dHB1dERhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8gLyA0IC8qIGNvbXBvbmVudCBzaXplICovKX0sXG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zOiBbXG4gICAgICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gNCl9LFxuICAgICAgICAgICAgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoYS5kaW1zLCBiLmRpbXMsIG91dHB1dFNoYXBlKVxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9O1xuXG5jb25zdCBydW5CaW5hcnlPcCA9XG4gICAgKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBuYW1lOiBzdHJpbmcsIGZ1bmNDYWxsOiBCaW5hcnlGdW5jdGlvbkNhbGwsIGFkZGl0aW9uYWxJbXBsZW1lbnRhdGlvbj86IHN0cmluZyxcbiAgICAgY2FjaGVLZXk/OiBzdHJpbmcsIG91dHB1dERhdGFUeXBlPzogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQmluYXJ5T3BQcm9ncmFtSW5mbyhcbiAgICAgICAgICBuYW1lLCBjYWNoZUtleSA/PyAnJywgY29udGV4dC5pbnB1dHNbMF0sIGNvbnRleHQuaW5wdXRzWzFdLCBmdW5jQ2FsbCwgYWRkaXRpb25hbEltcGxlbWVudGF0aW9uLFxuICAgICAgICAgIG91dHB1dERhdGFUeXBlKSk7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGFkZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBydW5CaW5hcnlPcChjb250ZXh0LCAnQWRkJywgKGEsIGIpID0+IGAke2F9KyR7Yn1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXYgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgcnVuQmluYXJ5T3AoY29udGV4dCwgJ0RpdicsIChhLCBiKSA9PiBgJHthfS8ke2J9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgZXF1YWwgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgcnVuQmluYXJ5T3AoXG4gICAgICBjb250ZXh0LCAnRXF1YWwnLCAoe3NjYWxhcjogKGEsIGIpID0+IGB1MzIoJHthfT09JHtifSlgLCB2ZWN0b3I6IChhLCBiKSA9PiBgdmVjNDx1MzI+KCR7YX09PSR7Yn0pYH0pLCB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsIERhdGFUeXBlLmJvb2wpO1xufTtcblxuZXhwb3J0IGNvbnN0IG11bCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBydW5CaW5hcnlPcChjb250ZXh0LCAnTXVsJywgKGEsIGIpID0+IGAke2F9KiR7Yn1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwb3cgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgY29uc3QgdHlwZSA9IGlucHV0VmFyaWFibGUoJ2lucHV0JywgY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXMpLnR5cGUudmFsdWU7XG4gIGNvbnN0IHJvdW5kU3RyID0gdHlwZSA9PT0gJ2kzMicgPyAncm91bmQnIDogJyc7XG4gIHJ1bkJpbmFyeU9wKFxuICAgICAgY29udGV4dCwgJ1BvdycsICh7c2NhbGFyOiAoYSwgYikgPT4gYHBvd19jdXN0b20oJHthfSwke2J9KWAsIHZlY3RvcjogKGEsIGIpID0+IGBwb3dfdmVjdG9yX2N1c3RvbSgke2F9LCR7Yn0pYH0pLFxuICAgICAgYFxuICAgIGZuIHBvd19jdXN0b20oYSA6ICR7dHlwZX0sIGIgOiAke3R5cGV9KSAtPiAke3R5cGV9IHtcbiAgICAgIGlmIChiID09ICR7dHlwZX0oMC4wKSkge1xuICAgICAgICByZXR1cm4gJHt0eXBlfSgxLjApO1xuICAgICAgfSBlbHNlIGlmIChhIDwgJHt0eXBlfSgwLjApICYmIGYzMihiKSAhPSBmbG9vcihmMzIoYikpKSB7XG4gICAgICAgIHJldHVybiAke3R5cGV9KHBvdyhmMzIoYSksIGYzMihiKSkpOyAvLyBOYU5cbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxlY3Qoc2lnbihhKSwgJHt0eXBlfSgxLjApLCByb3VuZChmMzIoYWJzKGIpICUgJHt0eXBlfSgyLjApKSkgIT0gMS4wKSAqICR7dHlwZX0oJHtcbiAgICAgICAgICByb3VuZFN0cn0ocG93KGYzMihhYnMoYSkpLCBmMzIoYikpKSk7XG4gICAgfVxuICAgIGZuIHBvd192ZWN0b3JfY3VzdG9tKGEgOiB2ZWM0PCR7dHlwZX0+LCBiIDogdmVjNDwke3R5cGV9PikgLT4gdmVjNDwke3R5cGV9PiB7XG4gICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdmVjdG9yaXplZCBwb3dcbiAgICAgIHJldHVybiB2ZWM0PCR7dHlwZX0+KHBvd19jdXN0b20oYS54LCBiLngpLCBwb3dfY3VzdG9tKGEueSwgYi55KSwgcG93X2N1c3RvbShhLnosIGIueiksIHBvd19jdXN0b20oYS53LCBiLncpKTtcbiAgICB9XG4gICAgICBgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzdWIgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgcnVuQmluYXJ5T3AoY29udGV4dCwgJ1N1YicsIChhLCBiKSA9PiBgJHthfS0ke2J9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ3JlYXRlciA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBydW5CaW5hcnlPcChcbiAgICAgIGNvbnRleHQsICdHcmVhdGVyJywgKHtzY2FsYXI6IChhLCBiKSA9PiBgdTMyKCR7YX0+JHtifSlgLCB2ZWN0b3I6IChhLCBiKSA9PiBgdmVjNDx1MzI+KCR7YX0+JHtifSlgfSksIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCwgRGF0YVR5cGUuYm9vbCk7XG59O1xuXG5leHBvcnQgY29uc3QgbGVzcyA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBydW5CaW5hcnlPcChcbiAgICAgIGNvbnRleHQsICdMZXNzJywgKHtzY2FsYXI6IChhLCBiKSA9PiBgdTMyKCR7YX08JHtifSlgLCB2ZWN0b3I6IChhLCBiKSA9PiBgdmVjNDx1MzI+KCR7YX08JHtifSlgfSksIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCwgRGF0YVR5cGUuYm9vbCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ3JlYXRlck9yRXF1YWwgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgcnVuQmluYXJ5T3AoXG4gICAgICBjb250ZXh0LCAnR3JlYXRlck9yRXF1YWwnLCAoe3NjYWxhcjogKGEsIGIpID0+IGB1MzIoJHthfT49JHtifSlgLCB2ZWN0b3I6IChhLCBiKSA9PiBgdmVjNDx1MzI+KCR7YX0+PSR7Yn0pYH0pLFxuICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIERhdGFUeXBlLmJvb2wpO1xufTtcblxuZXhwb3J0IGNvbnN0IGxlc3NPckVxdWFsID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIHJ1bkJpbmFyeU9wKFxuICAgICAgY29udGV4dCwgJ0xlc3NPckVxdWFsJywgKHtzY2FsYXI6IChhLCBiKSA9PiBgdTMyKCR7YX08PSR7Yn0pYCwgdmVjdG9yOiAoYSwgYikgPT4gYHZlYzQ8dTMyPigke2F9PD0ke2J9KWB9KSxcbiAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBEYXRhVHlwZS5ib29sKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7TUFYX0NMSVAsIE1JTl9DTElQfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7UHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtVbmlmb3Jtc0FycmF5VHlwZX0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMge1xuICByZWFkb25seSBhY3RpdmF0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsaXBNaW4/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNsaXBNYXg/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFscGhhPzogbnVtYmVyO1xuICByZWFkb25seSBiZXRhPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0QWN0aXZhdGlvblNuaXBwZXQgPVxuICAgIChhdHRyaWJ1dGVzOiBJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzLCB2YWx1ZVR5cGU6IHN0cmluZywgYmFzZVR5cGUgPSAnZjMyJyk6IHN0cmluZyA9PiB7XG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZXMuYWN0aXZhdGlvbikge1xuICAgICAgICBjYXNlICdSZWx1JzpcbiAgICAgICAgICByZXR1cm4gYHZhbHVlID0gbWF4KHZhbHVlLCAke3ZhbHVlVHlwZX0oMC4wKSk7YDtcbiAgICAgICAgY2FzZSAnU2lnbW9pZCc6XG4gICAgICAgICAgcmV0dXJuIGB2YWx1ZSA9ICgke3ZhbHVlVHlwZX0oMS4wKSAvICgke3ZhbHVlVHlwZX0oMS4wKSArIGV4cCgtdmFsdWUpKSk7YDtcbiAgICAgICAgY2FzZSAnQ2xpcCc6XG4gICAgICAgICAgcmV0dXJuIGB2YWx1ZSA9IGNsYW1wKHZhbHVlLCAke3ZhbHVlVHlwZX0oJHtiYXNlVHlwZX0odW5pZm9ybXMuY2xpcF9taW4pKSwgJHt2YWx1ZVR5cGV9KCR7XG4gICAgICAgICAgICAgIGJhc2VUeXBlfSh1bmlmb3Jtcy5jbGlwX21heCkpKTtgO1xuICAgICAgICBjYXNlICdIYXJkU2lnbW9pZCc6XG4gICAgICAgICAgcmV0dXJuIGB2YWx1ZSA9IG1heCgke3ZhbHVlVHlwZX0oMC4wKSwgbWluKCR7dmFsdWVUeXBlfSgxLjApLCAke2Jhc2VUeXBlfSh1bmlmb3Jtcy5hbHBoYSkgKiB2YWx1ZSArICR7XG4gICAgICAgICAgICAgIGJhc2VUeXBlfSh1bmlmb3Jtcy5iZXRhKSkpO2A7XG4gICAgICAgIGNhc2UgJ0xlYWt5UmVsdSc6XG4gICAgICAgICAgcmV0dXJuIGB2YWx1ZSA9IHNlbGVjdCgke2Jhc2VUeXBlfSh1bmlmb3Jtcy5hbHBoYSkgKiB2YWx1ZSwgdmFsdWUsIHZhbHVlID49ICR7dmFsdWVUeXBlfSgwLjApKTtgO1xuICAgICAgICBjYXNlICcnOlxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgLy8gVE9ETzogYWRkaW5nIG90aGVyIGFjdGl2YXRpb25zIHRoYXQgY2FuIGJlIGZ1c2VkLlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWN0aXZhdGlvbiAke2F0dHJpYnV0ZXMuYWN0aXZhdGlvbn1gKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zRGF0YSA9XG4gICAgKGF0dHJpYnV0ZXM6IEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3JtOiBQcm9ncmFtVW5pZm9ybVtdKSA9PiB7XG4gICAgICBpZiAoYXR0cmlidXRlcy5hY3RpdmF0aW9uID09PSAnQ2xpcCcpIHtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm0ucHVzaChcbiAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5jbGlwTWF4IX0sIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5jbGlwTWluIX0pO1xuICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLmFjdGl2YXRpb24gPT09ICdIYXJkU2lnbW9pZCcpIHtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm0ucHVzaChcbiAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5hbHBoYSF9LCB7dHlwZTogRGF0YVR5cGUuZmxvYXQsIGRhdGE6IGF0dHJpYnV0ZXMuYmV0YSF9KTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5hY3RpdmF0aW9uID09PSAnTGVha3lSZWx1Jykge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybS5wdXNoKHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5hbHBoYSF9KTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zID0gKGF0dHJpYnV0ZXM6IEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMsIHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSkgPT4ge1xuICBpZiAoYXR0cmlidXRlcy5hY3RpdmF0aW9uID09PSAnQ2xpcCcpIHtcbiAgICB1bmlmb3Jtcy5wdXNoKHtuYW1lOiAnY2xpcF9tYXgnLCB0eXBlOiAnZjMyJ30sIHtuYW1lOiAnY2xpcF9taW4nLCB0eXBlOiAnZjMyJ30pO1xuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuYWN0aXZhdGlvbiA9PT0gJ0hhcmRTaWdtb2lkJykge1xuICAgIHVuaWZvcm1zLnB1c2goe25hbWU6ICdhbHBoYScsIHR5cGU6ICdmMzInfSwge25hbWU6ICdiZXRhJywgdHlwZTogJ2YzMid9KTtcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLmFjdGl2YXRpb24gPT09ICdMZWFreVJlbHUnKSB7XG4gICAgdW5pZm9ybXMucHVzaCh7bmFtZTogJ2FscGhhJywgdHlwZTogJ2YzMid9KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlcyA9XG4gICAgKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+fHVuZGVmaW5lZCk6IEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMgPT4ge1xuICAgICAgY29uc3QgYWN0aXZhdGlvbiA9IGF0dHJpYnV0ZXM/LmFjdGl2YXRpb24gYXMgc3RyaW5nIHx8ICcnO1xuICAgICAgaWYgKGFjdGl2YXRpb24gPT09ICdIYXJkU2lnbW9pZCcpIHtcbiAgICAgICAgY29uc3QgW2FscGhhLCBiZXRhXSA9IGF0dHJpYnV0ZXM/LmFjdGl2YXRpb25fcGFyYW1zIGFzIFtudW1iZXIsIG51bWJlcl0gfHwgWzAuMiwgMC41XTtcbiAgICAgICAgcmV0dXJuIHthY3RpdmF0aW9uLCBhbHBoYSwgYmV0YX07XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdDbGlwJykge1xuICAgICAgICBjb25zdCBbY2xpcE1pbiwgY2xpcE1heF0gPSBhdHRyaWJ1dGVzPy5hY3RpdmF0aW9uX3BhcmFtcyBhcyBbbnVtYmVyLCBudW1iZXJdIHx8IFtNSU5fQ0xJUCwgTUFYX0NMSVBdO1xuICAgICAgICByZXR1cm4ge2FjdGl2YXRpb24sIGNsaXBNYXgsIGNsaXBNaW59O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAnTGVha3lSZWx1Jykge1xuICAgICAgICBjb25zdCBbYWxwaGFdID0gYXR0cmlidXRlcz8uYWN0aXZhdGlvbl9wYXJhbXMgYXMgW251bWJlcl0gfHwgWzAuMDFdO1xuICAgICAgICByZXR1cm4ge2FjdGl2YXRpb24sIGFscGhhfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7YWN0aXZhdGlvbn07XG4gICAgfTtcbiIsICIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIHNhbXBsZWQgZnJvbSBbQHRlbnNvcmZsb3cvdGZqc10gdGZqcy1iYWNrZW5kLXdlYmdwdS9zcmMvYWN0aXZhdGlvbl91dGlsLnRzXG4vL1xuLy8gbW9kaWZpZWQgdG8gZml0IHRoZSBuZWVkcyBvZiB0aGUgcHJvamVjdFxuXG5leHBvcnQgY29uc3QgdHlwZVNuaXBwZXQgPSAoY29tcG9uZW50OiBudW1iZXIsIGRhdGFUeXBlOiBzdHJpbmcpID0+IHtcbiAgc3dpdGNoIChjb21wb25lbnQpIHtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gZGF0YVR5cGU7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGB2ZWMyPCR7ZGF0YVR5cGV9PmA7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIGB2ZWMzPCR7ZGF0YVR5cGV9PmA7XG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGB2ZWM0PCR7ZGF0YVR5cGV9PmA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtjb21wb25lbnR9LWNvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYmlhc1NuaXBwZXQgPSAoaGFzQmlhczogYm9vbGVhbik6IHN0cmluZyA9PiBgXG4gICAgICAke2hhc0JpYXMgPyAndmFsdWUgPSB2YWx1ZSArIGdldEJpYXNCeU91dHB1dENvb3Jkcyhjb29yZHMpOycgOiAnJ31cbiAgICAgIGA7XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vLyBzYW1wbGVkIGZyb20gW0B0ZW5zb3JmbG93L3RmanNdIHRmanMtY29yZS9zcmMvb3BzL2NvbnZfdXRpbC50c1xuLy9cbi8vIG1vZGlmaWVkIHRvIGZpdCB0aGUgbmVlZHMgb2YgdGhlIHByb2plY3RcblxuZXhwb3J0IGNvbnN0IHV0aWxGdW5jdGlvbnMgPSAoc3RyaWRlU3RyOiBzdHJpbmcpID0+IChgXG5mbiBnZXRJbmRleEZyb21Db29yZHM0RChjb29yZHMgOiB2ZWM0PGkzMj4sIHNoYXBlIDogdmVjNDxpMzI+KSAtPiBpMzIge1xuICByZXR1cm4gZG90KGNvb3JkcywgdmVjNDxpMzI+KFxuICAgICAgc2hhcGUueSAqIHNoYXBlLnogKiBzaGFwZS53LCBzaGFwZS56ICogc2hhcGUudywgc2hhcGUudywgMSkpO1xufVxuZm4gZ2V0T3V0cHV0SW5kZXhGcm9tQ29vcmRzKGNvb3JkcyA6IHZlYzQ8aTMyPikgLT4gaTMyIHtcbiAgcmV0dXJuIGRvdChjb29yZHMsIHZlYzQ8aTMyPihcbiAgICBpMzIoJHtzdHJpZGVTdHJ9LngpLCBpMzIoJHtzdHJpZGVTdHJ9LnkpLCBpMzIoJHtzdHJpZGVTdHJ9LnopLCAxKSk7XG59XG5gKTtcbiIsICIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIHNhbXBsZWQgZnJvbSBbQHRlbnNvcmZsb3cvdGZqc10gdGZqcy1iYWNrZW5kLXdlYmdwdS9zcmMvbWF0bXVsX3BhY2tlZF93ZWJncHUudHNcbi8vXG4vLyBtb2RpZmllZCB0byBmaXQgdGhlIG5lZWRzIG9mIHRoZSBwcm9qZWN0XG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtQcm9ncmFtSW5mbywgUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3ksIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBnZXRCcm9hZGNhc3REaW1zLCBJbmRpY2VzSGVscGVyLCBpbnB1dFZhcmlhYmxlLCBpbnRlcm5hbFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHthcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXMsIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEsIGdldEFjdGl2YXRpb25TbmlwcGV0LCBJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzfSBmcm9tICcuLi9mdXNlLXV0aWxzJztcblxuaW1wb3J0IHt0eXBlU25pcHBldH0gZnJvbSAnLi9hY3RpdmF0aW9uX3V0aWwnO1xuXG5jb25zdCB3cml0ZURhdGFUb1N1YkFWZWM0U25pcHBldCA9ICh0cmFuc3Bvc2U6IGJvb2xlYW4sIGJhdGNoRGltcz86IEluZGljZXNIZWxwZXIpID0+IHtcbiAgaWYgKHRyYW5zcG9zZSkge1xuICAgIHJldHVybiBgXG4gICAgICAgIG1tX0FzdWJbaW5wdXRSb3ddW2lucHV0Q29sXSA9IG1tX3JlYWRBKGJhdGNoLFxuICAgICAgICAgIGtTdGFydCArIGlucHV0Um93LFxuICAgICAgICAgIGdsb2JhbFJvd1N0YXJ0IC8gaW5uZXJFbGVtZW50U2l6ZSArIGlucHV0Q29sJHtiYXRjaERpbXMgPyAnLCBiYXRjaEluZGljZXMnIDogJyd9KTtcbiAgICAgICAgYDtcblxuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgIG1tX0FzdWJbaW5wdXRSb3ddW2lucHV0Q29sXSA9IG1tX3JlYWRBKGJhdGNoLFxuICAgICAgICAgIGdsb2JhbFJvdyArIGlubmVyUm93LFxuICAgICAgICAgIGtTdGFydCAvIGlubmVyRWxlbWVudFNpemUgKyBpbnB1dENvbCR7YmF0Y2hEaW1zID8gJywgYmF0Y2hJbmRpY2VzJyA6ICcnfSk7XG4gICAgICAgIGA7XG4gIH1cbn07XG5cbmNvbnN0IGNhbGN1bGF0ZVJlc3VsdFNuaXBwZXQgPSAodHJhbnNwb3NlQTogYm9vbGVhbiwgaW5uZXJFbGVtZW50U2l6ZTogbnVtYmVyKSA9PiB7XG4gIGlmICh0cmFuc3Bvc2VBKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgbGV0IEFDYWNoZWQwID0gbW1fQXN1YltrICogaW5uZXJFbGVtZW50U2l6ZV1bbG9jYWxSb3ddO1xuICAgICAgICBsZXQgQUNhY2hlZDEgPSBtbV9Bc3ViW2sgKiBpbm5lckVsZW1lbnRTaXplICsgMV1bbG9jYWxSb3ddO1xuICAgICAgICBsZXQgQUNhY2hlZDIgPSBtbV9Bc3ViW2sgKiBpbm5lckVsZW1lbnRTaXplICsgMl1bbG9jYWxSb3ddO1xuICAgICAgICAke2lubmVyRWxlbWVudFNpemUgPT09IDMgPyAnJyA6ICdsZXQgQUNhY2hlZDMgPSBtbV9Bc3ViW2sgKiBpbm5lckVsZW1lbnRTaXplICsgM11bbG9jYWxSb3ddOyd9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93UGVyVGhyZWFkOyBpID0gaSArIDEpIHtcbiAgICAgICAgICBhY2NbaV0gPSBCQ2FjaGVkMCAqIEFDYWNoZWQwW2ldICsgYWNjW2ldO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQxICogQUNhY2hlZDFbaV0gKyBhY2NbaV07XG4gICAgICAgICAgYWNjW2ldID0gQkNhY2hlZDIgKiBBQ2FjaGVkMltpXSArIGFjY1tpXTtcbiAgICAgICAgICAke2lubmVyRWxlbWVudFNpemUgPT09IDMgPyAnJyA6ICdhY2NbaV0gPSBCQ2FjaGVkMyAqIEFDYWNoZWQzW2ldICsgYWNjW2ldOyd9XG4gICAgICAgIH1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93UGVyVGhyZWFkOyBpID0gaSArIDEpIHtcbiAgICAgICAgICBsZXQgQUNhY2hlZCA9IG1tX0FzdWJbdGlsZVJvdyArIGldW2tdO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQwICogQUNhY2hlZC54ICsgYWNjW2ldO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQxICogQUNhY2hlZC55ICsgYWNjW2ldO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQyICogQUNhY2hlZC56ICsgYWNjW2ldO1xuICAgICAgICAgICR7aW5uZXJFbGVtZW50U2l6ZSA9PT0gMyA/ICcnIDogJ2FjY1tpXSA9IEJDYWNoZWQzICogQUNhY2hlZC53ICsgYWNjW2ldOyd9XG4gICAgICAgIH1gO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbWFrZU1hdE11bFBhY2tlZFZlYzRTb3VyY2UgPVxuICAgICh3b3JrUGVyVGhyZWFkOiBudW1iZXJbXSwgd29ya2dyb3VwU2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCB0eXBlID0gJ2YzMicsIGJhdGNoRGltcz86IEluZGljZXNIZWxwZXIsXG4gICAgIHRyYW5zcG9zZUEgPSBmYWxzZSwgdGlsZUlubmVyID0gMzIsIHNwbGl0SyA9IGZhbHNlLCBzcGxpdGVkRGltSW5uZXIgPSAzMik6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCB0aWxlQU91dGVyID0gd29ya2dyb3VwU2l6ZVsxXSAqIHdvcmtQZXJUaHJlYWRbMV07XG4gICAgICBjb25zdCB0aWxlQk91dGVyID0gd29ya2dyb3VwU2l6ZVswXSAqIHdvcmtQZXJUaHJlYWRbMF07XG4gICAgICBjb25zdCB0aWxlQVdpZHRoID0gdHJhbnNwb3NlQSA/IHRpbGVBT3V0ZXIgOiB0aWxlSW5uZXI7XG4gICAgICBjb25zdCB0aWxlQUhpZ2h0ID0gdHJhbnNwb3NlQSA/IHRpbGVJbm5lciA6IHRpbGVBT3V0ZXI7XG4gICAgICBjb25zdCBpbm5lckVsZW1lbnRTaXplID0gdGlsZUFXaWR0aCAvIHdvcmtncm91cFNpemVbMF07XG4gICAgICBjb25zdCByb3dQZXJUaHJlYWRCID0gdGlsZUlubmVyIC8gd29ya2dyb3VwU2l6ZVsxXTtcblxuICAgICAgaWYgKCEoKCh0cmFuc3Bvc2VBICYmIGlubmVyRWxlbWVudFNpemUgPT09IDQgJiYgd29ya1BlclRocmVhZFsxXSA9PT0gNCkgfHxcbiAgICAgICAgICAgICAoIXRyYW5zcG9zZUEgJiYgKGlubmVyRWxlbWVudFNpemUgPT09IDMgfHwgaW5uZXJFbGVtZW50U2l6ZSA9PT0gNCkpKSAmJlxuICAgICAgICAgICAgdGlsZUFXaWR0aCAlIHdvcmtncm91cFNpemVbMF0gPT09IDAgJiYgdGlsZUlubmVyICUgd29ya2dyb3VwU2l6ZVsxXSA9PT0gMCAmJiB3b3JrUGVyVGhyZWFkWzBdID09PSA0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElmIHRyYW5zcG9zZUEgJHt0cmFuc3Bvc2VBfSBpcyB0cnVlLCBpbm5lckVsZW1lbnRTaXplICR7XG4gICAgICAgICAgICBpbm5lckVsZW1lbnRTaXplfSBhbmQgd29ya1BlclRocmVhZFsxXSAke3dvcmtQZXJUaHJlYWRbMV19IG11c3QgYmUgNC5cbiAgICAgIE90aGVyd2lzZSwgaW5uZXJFbGVtZW50U2l6ZSAke2lubmVyRWxlbWVudFNpemV9IG11c3QgYmUgMyBvciA0LlxuICB0aWxlQVdpZHRoICR7dGlsZUFXaWR0aH0gbXVzdCBiZSBkaXZpc2libGUgYnkgd29ya2dyb3VwU2l6ZVswXSR7d29ya2dyb3VwU2l6ZVswXX0uIHRpbGVJbm5lciAke1xuICAgICAgICAgICAgdGlsZUlubmVyfSBtdXN0IGJlIGRpdmlzaWJsZSBieSB3b3JrZ3JvdXBTaXplWzFdICR7d29ya2dyb3VwU2l6ZVsxXX0uIGNvbFBlclRocmVhZCAke1xuICAgICAgICAgICAgd29ya1BlclRocmVhZFswXX0gbXVzdCBiZSA0LmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBcbnZhcjx3b3JrZ3JvdXA+IG1tX0FzdWI6IGFycmF5PGFycmF5PHZlYyR7aW5uZXJFbGVtZW50U2l6ZX08JHt0eXBlfT4sICR7dGlsZUFXaWR0aCAvIGlubmVyRWxlbWVudFNpemV9PiwgJHt0aWxlQUhpZ2h0fT47XG52YXI8d29ya2dyb3VwPiBtbV9Cc3ViOiBhcnJheTxhcnJheTx2ZWM0PCR7dHlwZX0+LCAke3RpbGVCT3V0ZXIgLyB3b3JrUGVyVGhyZWFkWzBdfT4sICR7dGlsZUlubmVyfT47XG5cbmNvbnN0IHJvd1BlclRocmVhZCA9ICR7d29ya1BlclRocmVhZFsxXX07XG5jb25zdCBjb2xQZXJUaHJlYWQgPSAke3dvcmtQZXJUaHJlYWRbMF19O1xuY29uc3QgaW5uZXJFbGVtZW50U2l6ZSA9ICR7aW5uZXJFbGVtZW50U2l6ZX07XG5jb25zdCB0aWxlSW5uZXIgPSAke3RpbGVJbm5lcn07XG5cbkBjb21wdXRlIEB3b3JrZ3JvdXBfc2l6ZSgke3dvcmtncm91cFNpemVbMF19LCAke3dvcmtncm91cFNpemVbMV19LCAke3dvcmtncm91cFNpemVbMl19KVxuZm4gbWFpbihAYnVpbHRpbihsb2NhbF9pbnZvY2F0aW9uX2lkKSBsb2NhbElkIDogdmVjMzx1MzI+LFxuICAgICAgICBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgZ2xvYmFsSWQgOiB2ZWMzPHUzMj4sXG4gICAgICAgIEBidWlsdGluKHdvcmtncm91cF9pZCkgd29ya2dyb3VwSWQgOiB2ZWMzPHUzMj4pIHtcbiAgbGV0IGxvY2FsUm93ID0gaTMyKGxvY2FsSWQueSk7XG4gIGxldCB0aWxlUm93ID0gbG9jYWxSb3cgKiByb3dQZXJUaHJlYWQ7XG4gIGxldCB0aWxlQ29sID0gaTMyKGxvY2FsSWQueCk7XG5cbiAgbGV0IGdsb2JhbFJvdyA9aTMyKGdsb2JhbElkLnkpICogcm93UGVyVGhyZWFkO1xuICBsZXQgZ2xvYmFsQ29sID0gaTMyKGdsb2JhbElkLngpO1xuICBsZXQgYmF0Y2ggPSAke3NwbGl0SyA/ICcwJyA6ICdpMzIoZ2xvYmFsSWQueiknfTtcbiAgJHtiYXRjaERpbXMgPyBgbGV0IGJhdGNoSW5kaWNlcyA9ICR7YmF0Y2hEaW1zLm9mZnNldFRvSW5kaWNlcygndTMyKGJhdGNoKScpfTtgIDogJyd9XG4gIGxldCBnbG9iYWxSb3dTdGFydCA9IGkzMih3b3JrZ3JvdXBJZC55KSAqICR7dGlsZUFPdXRlcn07XG5cbiAgbGV0IG51bV90aWxlcyA9ICR7c3BsaXRLID8gYCR7TWF0aC5jZWlsKHNwbGl0ZWREaW1Jbm5lciAvIHRpbGVJbm5lcil9YCA6ICcodW5pZm9ybXMuZGltX2lubmVyIC0gMSkgLyB0aWxlSW5uZXIgKyAxJ307XG4gIHZhciBrU3RhcnQgPSAke3NwbGl0SyA/IGBpMzIoZ2xvYmFsSWQueikgKiAke3NwbGl0ZWREaW1Jbm5lcn1gIDogJzAnfTtcblxuICB2YXIgYWNjOiBhcnJheTx2ZWM0PCR7dHlwZX0+LCByb3dQZXJUaHJlYWQ+O1xuXG4gIC8vIExvb3Agb3ZlciBzaGFyZWQgZGltZW5zaW9uLlxuICBsZXQgdGlsZVJvd0IgPSBsb2NhbFJvdyAqICR7cm93UGVyVGhyZWFkQn07XG4gIGZvciAodmFyIHQgPSAwOyB0IDwgbnVtX3RpbGVzOyB0ID0gdCArIDEpIHtcbiAgICAgIC8vIExvYWQgb25lIHRpbGUgb2YgQSBpbnRvIGxvY2FsIG1lbW9yeS5cbiAgICAgIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gICAgICAgICAgbGV0IGlucHV0Um93ID0gdGlsZVJvdyArIGlubmVyUm93O1xuICAgICAgICAgIGxldCBpbnB1dENvbCA9IHRpbGVDb2w7XG4gICAgICAgICAgJHt3cml0ZURhdGFUb1N1YkFWZWM0U25pcHBldCh0cmFuc3Bvc2VBLCBiYXRjaERpbXMpfVxuICAgICAgfVxuXG4gICAgICAvLyBMb2FkIG9uZSB0aWxlIG9mIEIgaW50byBsb2NhbCBtZW1vcnkuXG4gICAgICBmb3IgKHZhciBpbm5lclJvdyA9IDA7IGlubmVyUm93IDwgJHtyb3dQZXJUaHJlYWRCfTsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICAgICAgICBsZXQgaW5wdXRSb3cgPSB0aWxlUm93QiArIGlubmVyUm93O1xuICAgICAgICAgIGxldCBpbnB1dENvbCA9IHRpbGVDb2w7XG4gICAgICAgICAgbW1fQnN1YltpbnB1dFJvd11baW5wdXRDb2xdID0gbW1fcmVhZEIoYmF0Y2gsIGtTdGFydCArIGlucHV0Um93LCBnbG9iYWxDb2wke1xuICAgICAgICAgIGJhdGNoRGltcyA/ICcsIGJhdGNoSW5kaWNlcycgOiAnJ30pO1xuICAgICAgfVxuICAgICAga1N0YXJ0ID0ga1N0YXJ0ICsgdGlsZUlubmVyO1xuICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgICAvLyBDb21wdXRlIGFjYyB2YWx1ZXMgZm9yIGEgc2luZ2xlIHRocmVhZC5cbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGlsZUlubmVyIC8gaW5uZXJFbGVtZW50U2l6ZTsgayA9IGsgKyAxKSB7XG4gICAgICAgICAgbGV0IEJDYWNoZWQwID0gbW1fQnN1YltrICogaW5uZXJFbGVtZW50U2l6ZV1bdGlsZUNvbF07XG4gICAgICAgICAgbGV0IEJDYWNoZWQxID0gbW1fQnN1YltrICogaW5uZXJFbGVtZW50U2l6ZSArIDFdW3RpbGVDb2xdO1xuICAgICAgICAgIGxldCBCQ2FjaGVkMiA9IG1tX0JzdWJbayAqIGlubmVyRWxlbWVudFNpemUgKyAyXVt0aWxlQ29sXTtcbiAgICAgICAgICAke2lubmVyRWxlbWVudFNpemUgPT09IDMgPyAnJyA6ICdsZXQgQkNhY2hlZDMgPSBtbV9Cc3ViW2sgKiBpbm5lckVsZW1lbnRTaXplICsgM11bdGlsZUNvbF07J31cblxuICAgICAgICAgICR7Y2FsY3VsYXRlUmVzdWx0U25pcHBldCh0cmFuc3Bvc2VBLCBpbm5lckVsZW1lbnRTaXplKX1cbiAgICAgIH1cblxuICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICB9XG5cbiAgZm9yICh2YXIgaW5uZXJSb3cgPSAwOyBpbm5lclJvdyA8IHJvd1BlclRocmVhZDsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICAgIG1tX3dyaXRlKGJhdGNoLCBnbG9iYWxSb3cgKyBpbm5lclJvdywgZ2xvYmFsQ29sLCBhY2NbaW5uZXJSb3ddKTtcbiAgfVxufWA7XG4gICAgfTtcblxuY29uc3Qgd3JpdGVEYXRhVG9TdWJBU25pcHBldCA9ICh0cmFuc3Bvc2U6IGJvb2xlYW4sIGJhdGNoRGltcz86IEluZGljZXNIZWxwZXIpID0+IHtcbiAgaWYgKHRyYW5zcG9zZSkge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICBtbV9Bc3ViW2lucHV0Um93XVtpbnB1dENvbF0gPSBtbV9yZWFkQShiYXRjaCxcbiAgICAgICAgICAgICAga1N0YXJ0ICsgaW5wdXRSb3csXG4gICAgICAgICAgICAgIGdsb2JhbFJvd1N0YXJ0ICsgaW5wdXRDb2wke2JhdGNoRGltcyA/ICcsIGJhdGNoSW5kaWNlcycgOiAnJ30pO1xuICAgICAgICAgICAgYDtcblxuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICBtbV9Bc3ViW2lucHV0Um93XVtpbnB1dENvbF0gPSBtbV9yZWFkQShiYXRjaCxcbiAgICAgICAgICAgICAgZ2xvYmFsUm93U3RhcnQgKyBpbnB1dFJvdyxcbiAgICAgICAgICAgICAga1N0YXJ0ICsgaW5wdXRDb2wke2JhdGNoRGltcyA/ICcsIGJhdGNoSW5kaWNlcycgOiAnJ30pO1xuICAgICAgICAgICAgYDtcbiAgfVxufTtcblxuY29uc3QgcmVhZERhdGFGcm9tU3ViQVNuaXBwZXQgPSAodHJhbnNwb3NlQTogYm9vbGVhbikgPT5cbiAgICB0cmFuc3Bvc2VBID8gJ2xldCBBQ2FjaGVkID0gbW1fQXN1YltrXVt0aWxlUm93ICsgaW5uZXJSb3ddOycgOiAnbGV0IEFDYWNoZWQgPSBtbV9Bc3ViW3RpbGVSb3cgKyBpbm5lclJvd11ba107JztcblxuLy8gc2VxdWVudGlhbEFjY2Vzc0J5VGhyZWFkcyBtZWFucyBzZXF1ZW50aWFsIGRhdGEgaW4gbWVtb3J5IGlzIGFjY2Vzc2VkIGJ5XG4vLyB0aHJlYWRzLCBpbnN0ZWFkIG9mIGEgc2luZ2xlIHRocmVhZCAoZGVmYXVsdCBiZWhhdmlvcikuXG5leHBvcnQgY29uc3QgbWFrZU1hdE11bFBhY2tlZFNvdXJjZSA9XG4gICAgKHdvcmtQZXJUaHJlYWQ6IG51bWJlcltdLCB3b3JrZ3JvdXBTaXplOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHR5cGUgPSAnZjMyJywgYmF0Y2hEaW1zPzogSW5kaWNlc0hlbHBlcixcbiAgICAgdHJhbnNwb3NlQSA9IGZhbHNlLCB0aWxlSW5uZXIgPSAzMiwgc3BsaXRLID0gZmFsc2UsIHNwbGl0ZWREaW1Jbm5lciA9IDMyLFxuICAgICBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgdGlsZUFPdXRlciA9IHdvcmtQZXJUaHJlYWRbMV0gKiB3b3JrZ3JvdXBTaXplWzFdO1xuICAgICAgY29uc3QgdGlsZUJPdXRlciA9IHdvcmtQZXJUaHJlYWRbMF0gKiB3b3JrZ3JvdXBTaXplWzBdO1xuICAgICAgY29uc3QgdGlsZUFXaWR0aCA9IHRyYW5zcG9zZUEgPyB0aWxlQU91dGVyIDogdGlsZUlubmVyO1xuICAgICAgY29uc3QgdGlsZUFIaWdodCA9IHRyYW5zcG9zZUEgPyB0aWxlSW5uZXIgOiB0aWxlQU91dGVyO1xuXG4gICAgICBpZiAoISh0aWxlQUhpZ2h0ICUgd29ya2dyb3VwU2l6ZVsxXSA9PT0gMCAmJiB0aWxlQVdpZHRoICUgd29ya2dyb3VwU2l6ZVswXSA9PT0gMCAmJlxuICAgICAgICAgICAgdGlsZUlubmVyICUgd29ya2dyb3VwU2l6ZVsxXSA9PT0gMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0aWxlQUhpZ2h0ICR7dGlsZUFIaWdodH0gbXVzdCBiZSBkaXZpc2libGUgYnkgd29ya2dyb3VwU2l6ZVsxXSR7XG4gICAgICAgICAgICB3b3JrZ3JvdXBTaXplWzFdfSwgdGlsZUFXaWR0aCAke3RpbGVBV2lkdGh9IG11c3QgYmUgZGl2aXNpYmxlIGJ5IHdvcmtncm91cFNpemVbMF0ke1xuICAgICAgICAgICAgd29ya2dyb3VwU2l6ZVswXX0sIHRpbGVJbm5lciAke3RpbGVJbm5lcn0gbXVzdCBiZSBkaXZpc2libGUgYnkgd29ya2dyb3VwU2l6ZVsxXSR7d29ya2dyb3VwU2l6ZVsxXX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvd1BlclRocmVhZEEgPSB0aWxlQUhpZ2h0IC8gd29ya2dyb3VwU2l6ZVsxXTtcbiAgICAgIGNvbnN0IGNvbFBlclRocmVhZEEgPSB0aWxlQVdpZHRoIC8gd29ya2dyb3VwU2l6ZVswXTtcbiAgICAgIGNvbnN0IHJvd1BlclRocmVhZEIgPSB0aWxlSW5uZXIgLyB3b3JrZ3JvdXBTaXplWzFdO1xuICAgICAgY29uc3QgbWF0bXVsU25pcHBldCA9IHNlcXVlbnRpYWxBY2Nlc3NCeVRocmVhZHMgP1xuICAgICAgICAgIGBcbiAgICBsZXQgbG9jYWxSb3cgPSBpMzIobG9jYWxJZC55KTtcbiAgICBsZXQgbG9jYWxDb2wgPSBpMzIobG9jYWxJZC54KTtcbiAgICBsZXQgZ2xvYmFsUm93U3RhcnQgPSBpMzIod29ya2dyb3VwSWQueSkgKiAke3RpbGVBT3V0ZXJ9O1xuICAgIGxldCBnbG9iYWxDb2xTdGFydCA9IGkzMih3b3JrZ3JvdXBJZC54KSAqICR7dGlsZUJPdXRlcn07XG5cbiAgICAvLyBMb29wIG92ZXIgc2hhcmVkIGRpbWVuc2lvbi5cbiAgICBmb3IgKHZhciB0ID0gMDsgdCA8IG51bV90aWxlczsgdCA9IHQgKyAxKSB7XG4gICAgICAvLyBMb2FkIG9uZSB0aWxlIG9mIEEgaW50byBsb2NhbCBtZW1vcnkuXG4gICAgICBmb3IgKHZhciBpbnB1dFJvdyA9IGxvY2FsUm93OyBpbnB1dFJvdyA8ICR7dGlsZUFIaWdodH07IGlucHV0Um93ID0gaW5wdXRSb3cgKyAke3dvcmtncm91cFNpemVbMV19KSB7XG4gICAgICAgIGZvciAodmFyIGlucHV0Q29sID0gbG9jYWxDb2w7IGlucHV0Q29sIDwgJHt0aWxlQVdpZHRofTsgaW5wdXRDb2wgPSBpbnB1dENvbCArICR7d29ya2dyb3VwU2l6ZVswXX0pIHtcbiAgICAgICAgICAke3dyaXRlRGF0YVRvU3ViQVNuaXBwZXQodHJhbnNwb3NlQSwgYmF0Y2hEaW1zKX1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gTG9hZCBvbmUgdGlsZSBvZiBCIGludG8gbG9jYWwgbWVtb3J5LlxuICAgICAgZm9yICh2YXIgaW5wdXRSb3cgPSBsb2NhbFJvdzsgaW5wdXRSb3cgPCAke3RpbGVJbm5lcn07IGlucHV0Um93ID0gaW5wdXRSb3cgKyAke3dvcmtncm91cFNpemVbMV19KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpbnB1dENvbCA9IGxvY2FsQ29sOyBpbnB1dENvbCA8ICR7dGlsZUJPdXRlcn07IGlucHV0Q29sID0gaW5wdXRDb2wgKyAke3dvcmtncm91cFNpemVbMF19KSB7XG4gICAgICAgICAgbW1fQnN1YltpbnB1dFJvd11baW5wdXRDb2xdID0gbW1fcmVhZEIoYmF0Y2gsXG4gICAgICAgICAgICBrU3RhcnQgKyBpbnB1dFJvdyxcbiAgICAgICAgICAgIGdsb2JhbENvbFN0YXJ0ICsgaW5wdXRDb2wke2JhdGNoRGltcyA/ICcsIGJhdGNoSW5kaWNlcycgOiAnJ30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBrU3RhcnQgPSBrU3RhcnQgKyB0aWxlSW5uZXI7XG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAgIC8vIENvbXB1dGUgYWNjIHZhbHVlcyBmb3IgYSBzaW5nbGUgdGhyZWFkLlxuICAgICAgdmFyIEJDYWNoZWQgOiBhcnJheTwke3R5cGV9LCBjb2xQZXJUaHJlYWQ+O1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aWxlSW5uZXI7IGsgPSBrICsgMSkge1xuICAgICAgICBmb3IgKHZhciBpbm5lciA9IDA7IGlubmVyIDwgY29sUGVyVGhyZWFkOyBpbm5lciA9IGlubmVyICsgMSkge1xuICAgICAgICAgIEJDYWNoZWRbaW5uZXJdID0gbW1fQnN1YltrXVtsb2NhbENvbCArIGlubmVyICogJHt3b3JrZ3JvdXBTaXplWzBdfV07XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaW5uZXJSb3cgPSAwOyBpbm5lclJvdyA8IHJvd1BlclRocmVhZDsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICAgICAgICBsZXQgQUNhY2hlZCA9ICR7XG4gICAgICAgICAgICAgIHRyYW5zcG9zZUEgPyBgbW1fQXN1YltrXVtsb2NhbFJvdyArIGlubmVyUm93ICogJHt3b3JrZ3JvdXBTaXplWzFdfV07YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBgbW1fQXN1Yltsb2NhbFJvdyArIGlubmVyUm93ICogJHt3b3JrZ3JvdXBTaXplWzFdfV1ba107YH1cbiAgICAgICAgICBmb3IgKHZhciBpbm5lckNvbCA9IDA7IGlubmVyQ29sIDwgY29sUGVyVGhyZWFkOyBpbm5lckNvbCA9IGlubmVyQ29sICsgMSkge1xuICAgICAgICAgICAgYWNjW2lubmVyUm93XVtpbm5lckNvbF0gPSBhY2NbaW5uZXJSb3ddW2lubmVyQ29sXSArXG4gICAgICAgICAgICAgICAgQUNhY2hlZCAqIEJDYWNoZWRbaW5uZXJDb2xdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpbm5lclJvdyA9IDA7IGlubmVyUm93IDwgcm93UGVyVGhyZWFkOyBpbm5lclJvdyA9IGlubmVyUm93ICsgMSkge1xuICAgICAgbGV0IGdSb3cgPSBnbG9iYWxSb3dTdGFydCArIGxvY2FsUm93ICsgaW5uZXJSb3cgKiAke3dvcmtncm91cFNpemVbMV19O1xuICAgICAgZm9yICh2YXIgaW5uZXJDb2wgPSAwOyBpbm5lckNvbCA8IGNvbFBlclRocmVhZDsgaW5uZXJDb2wgPSBpbm5lckNvbCArIDEpIHtcbiAgICAgICAgbGV0IGdDb2wgPSBnbG9iYWxDb2xTdGFydCArIGxvY2FsQ29sICsgaW5uZXJDb2wgKiAke3dvcmtncm91cFNpemVbMF19O1xuICAgICAgICBtbV93cml0ZShiYXRjaCwgZ1JvdywgZ0NvbCwgYWNjW2lubmVyUm93XVtpbm5lckNvbF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBgIDpcbiAgICAgICAgICBgXG5sZXQgdGlsZVJvdyA9IGkzMihsb2NhbElkLnkpICogcm93UGVyVGhyZWFkO1xubGV0IHRpbGVDb2wgPSBpMzIobG9jYWxJZC54KSAqIGNvbFBlclRocmVhZDtcblxubGV0IGdsb2JhbFJvdyA9IGkzMihnbG9iYWxJZC55KSAqIHJvd1BlclRocmVhZDtcbmxldCBnbG9iYWxDb2wgPSBpMzIoZ2xvYmFsSWQueCkgKiBjb2xQZXJUaHJlYWQ7XG5sZXQgZ2xvYmFsUm93U3RhcnQgPSBpMzIod29ya2dyb3VwSWQueSkgKiAke3RpbGVBT3V0ZXJ9O1xuXG5sZXQgdGlsZVJvd0EgPSBpMzIobG9jYWxJZC55KSAqICR7cm93UGVyVGhyZWFkQX07XG5sZXQgdGlsZUNvbEEgPSBpMzIobG9jYWxJZC54KSAqICR7Y29sUGVyVGhyZWFkQX07XG5sZXQgdGlsZVJvd0IgPSBpMzIobG9jYWxJZC55KSAqICR7cm93UGVyVGhyZWFkQn07XG4vLyBMb29wIG92ZXIgc2hhcmVkIGRpbWVuc2lvbi5cbmZvciAodmFyIHQgPSAwOyB0IDwgbnVtX3RpbGVzOyB0ID0gdCArIDEpIHtcbiAgLy8gTG9hZCBvbmUgdGlsZSBvZiBBIGludG8gbG9jYWwgbWVtb3J5LlxuICBmb3IgKHZhciBpbm5lclJvdyA9IDA7IGlubmVyUm93IDwgJHtyb3dQZXJUaHJlYWRBfTsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICBmb3IgKHZhciBpbm5lckNvbCA9IDA7IGlubmVyQ29sIDwgJHtjb2xQZXJUaHJlYWRBfTsgaW5uZXJDb2wgPSBpbm5lckNvbCArIDEpIHtcbiAgICAgIGxldCBpbnB1dFJvdyA9IHRpbGVSb3dBICsgaW5uZXJSb3c7XG4gICAgICBsZXQgaW5wdXRDb2wgPSB0aWxlQ29sQSArIGlubmVyQ29sO1xuICAgICAgJHt3cml0ZURhdGFUb1N1YkFTbmlwcGV0KHRyYW5zcG9zZUEsIGJhdGNoRGltcyl9XG4gICAgfVxuICB9XG5cbiAgLy8gTG9hZCBvbmUgdGlsZSBvZiBCIGludG8gbG9jYWwgbWVtb3J5LlxuICBmb3IgKHZhciBpbm5lclJvdyA9IDA7IGlubmVyUm93IDwgJHtyb3dQZXJUaHJlYWRCfTsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICBmb3IgKHZhciBpbm5lckNvbCA9IDA7IGlubmVyQ29sIDwgY29sUGVyVGhyZWFkOyBpbm5lckNvbCA9IGlubmVyQ29sICsgMSkge1xuICAgICAgbGV0IGlucHV0Um93ID0gdGlsZVJvd0IgKyBpbm5lclJvdztcbiAgICAgIGxldCBpbnB1dENvbCA9IHRpbGVDb2wgKyBpbm5lckNvbDtcbiAgICAgIG1tX0JzdWJbaW5wdXRSb3ddW2lucHV0Q29sXSA9IG1tX3JlYWRCKGJhdGNoLFxuICAgICAgICBrU3RhcnQgKyBpbnB1dFJvdyxcbiAgICAgICAgZ2xvYmFsQ29sICsgaW5uZXJDb2wke2JhdGNoRGltcyA/ICcsIGJhdGNoSW5kaWNlcycgOiAnJ30pO1xuICAgIH1cbiAgfVxuICBrU3RhcnQgPSBrU3RhcnQgKyB0aWxlSW5uZXI7XG4gIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAvLyBDb21wdXRlIGFjYyB2YWx1ZXMgZm9yIGEgc2luZ2xlIHRocmVhZC5cbiAgdmFyIEJDYWNoZWQgOiBhcnJheTwke3R5cGV9LCBjb2xQZXJUaHJlYWQ+O1xuICBmb3IgKHZhciBrID0gMDsgayA8IHRpbGVJbm5lcjsgayA9IGsgKyAxKSB7XG4gICAgZm9yICh2YXIgaW5uZXIgPSAwOyBpbm5lciA8IGNvbFBlclRocmVhZDsgaW5uZXIgPSBpbm5lciArIDEpIHtcbiAgICAgIEJDYWNoZWRbaW5uZXJdID0gbW1fQnN1YltrXVt0aWxlQ29sICsgaW5uZXJdO1xuICAgIH1cblxuICAgIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gICAgICAke3JlYWREYXRhRnJvbVN1YkFTbmlwcGV0KHRyYW5zcG9zZUEpfVxuICAgICAgZm9yICh2YXIgaW5uZXJDb2wgPSAwOyBpbm5lckNvbCA8IGNvbFBlclRocmVhZDsgaW5uZXJDb2wgPSBpbm5lckNvbCArIDEpIHtcbiAgICAgICAgYWNjW2lubmVyUm93XVtpbm5lckNvbF0gPSBhY2NbaW5uZXJSb3ddW2lubmVyQ29sXSArIEFDYWNoZWQgKiBCQ2FjaGVkW2lubmVyQ29sXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG59XG5cbmZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gIGZvciAodmFyIGlubmVyQ29sID0gMDsgaW5uZXJDb2wgPCBjb2xQZXJUaHJlYWQ7IGlubmVyQ29sID0gaW5uZXJDb2wgKyAxKSB7XG4gICAgbW1fd3JpdGUoYmF0Y2gsIGdsb2JhbFJvdyArIGlubmVyUm93LCBnbG9iYWxDb2wgKyBpbm5lckNvbCxcbiAgICAgICAgYWNjW2lubmVyUm93XVtpbm5lckNvbF0pO1xuICB9XG59XG5gO1xuXG4gICAgICByZXR1cm4gYFxuICB2YXI8d29ya2dyb3VwPiBtbV9Bc3ViIDogYXJyYXk8YXJyYXk8JHt0eXBlfSwgJHt0aWxlQVdpZHRofT4sICR7dGlsZUFIaWdodH0+O1xuICB2YXI8d29ya2dyb3VwPiBtbV9Cc3ViIDogYXJyYXk8YXJyYXk8JHt0eXBlfSwgJHt0aWxlQk91dGVyfT4sICR7dGlsZUlubmVyfT47XG4gIGNvbnN0IHJvd1BlclRocmVhZCA9ICR7d29ya1BlclRocmVhZFsxXX07XG4gIGNvbnN0IGNvbFBlclRocmVhZCA9ICR7d29ya1BlclRocmVhZFswXX07XG4gIGNvbnN0IHRpbGVJbm5lciA9ICR7dGlsZUlubmVyfTtcblxuQGNvbXB1dGUgQHdvcmtncm91cF9zaXplKCR7d29ya2dyb3VwU2l6ZVswXX0sICR7d29ya2dyb3VwU2l6ZVsxXX0sICR7d29ya2dyb3VwU2l6ZVsyXX0pXG5mbiBtYWluKEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faWQpIGxvY2FsSWQgOiB2ZWMzPHUzMj4sXG4gICAgICAgIEBidWlsdGluKGdsb2JhbF9pbnZvY2F0aW9uX2lkKSBnbG9iYWxJZCA6IHZlYzM8dTMyPixcbiAgICAgICAgQGJ1aWx0aW4od29ya2dyb3VwX2lkKSB3b3JrZ3JvdXBJZCA6IHZlYzM8dTMyPikge1xuICAgIGxldCBiYXRjaCA9ICR7c3BsaXRLID8gJzAnIDogJ2kzMihnbG9iYWxJZC56KSd9O1xuICAgICR7YmF0Y2hEaW1zID8gYGxldCBiYXRjaEluZGljZXMgPSAke2JhdGNoRGltcy5vZmZzZXRUb0luZGljZXMoJ3UzMihiYXRjaCknKX07YCA6ICcnfVxuICAgIGxldCBudW1fdGlsZXMgPSAke1xuICAgICAgICAgIHNwbGl0SyA/IGAke01hdGguY2VpbChzcGxpdGVkRGltSW5uZXIgLyB0aWxlSW5uZXIpfWAgOiAnKHVuaWZvcm1zLmRpbV9pbm5lciAtIDEpIC8gdGlsZUlubmVyICsgMSd9O1xuICAgIHZhciBrU3RhcnQgPSAke3NwbGl0SyA/IGBpMzIoZ2xvYmFsSWQueikgKiAke3NwbGl0ZWREaW1Jbm5lcn1gIDogJzAnfTtcblxuICAgIHZhciBhY2MgOiBhcnJheTxhcnJheTwke3R5cGV9LCBjb2xQZXJUaHJlYWQ+LCByb3dQZXJUaHJlYWQ+O1xuXG4gICAgLy8gV2l0aG91dCB0aGlzIGluaXRpYWxpemF0aW9uIHN0cmFuZ2UgdmFsdWVzIHNob3cgdXAgaW4gYWNjLlxuICAgIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gICAgICBmb3IgKHZhciBpbm5lckNvbCA9IDA7IGlubmVyQ29sIDwgY29sUGVyVGhyZWFkOyBpbm5lckNvbCA9IGlubmVyQ29sICsgMSkge1xuICAgICAgICBhY2NbaW5uZXJSb3ddW2lubmVyQ29sXSA9IDAuMDtcbiAgICAgIH1cbiAgICB9XG4gICAgJHttYXRtdWxTbmlwcGV0fVxuICB9XG5gO1xuICAgIH07XG5cbmNvbnN0IG1hdE11bFJlYWRXcml0ZUZuU291cmNlID1cbiAgICAoY29tcG9uZW50OiBudW1iZXIsIGhhc0JpYXM6IGJvb2xlYW4sIGFwcGx5QWN0aXZhdGlvbjogc3RyaW5nLCB2YXJpYWJsZXM6IEluZGljZXNIZWxwZXJbXSxcbiAgICAgYmF0Y2hTaGFwZXM6IEFycmF5PHJlYWRvbmx5IG51bWJlcltdPiwgaXNDaGFubmVsc0xhc3QgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCBbYmF0Y2hBU2hhcGUsIGJhdGNoQlNoYXBlLCBiYXRjaFNoYXBlXSA9IGJhdGNoU2hhcGVzO1xuICAgICAgY29uc3QgW2JhdGNoVmFyaWFibGUsIGFWYXJpYWJsZSwgYlZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZV0gPSB2YXJpYWJsZXM7XG4gICAgICBjb25zdCBicm9hZENhc3RBRGltcyA9IGdldEJyb2FkY2FzdERpbXMoYmF0Y2hBU2hhcGUsIGJhdGNoU2hhcGUpO1xuICAgICAgY29uc3QgYnJvYWRDYXN0QkRpbXMgPSBnZXRCcm9hZGNhc3REaW1zKGJhdGNoQlNoYXBlLCBiYXRjaFNoYXBlKTtcbiAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKHZhcmlhYmxlc1swXS50eXBlLnRlbnNvcik7XG4gICAgICBjb25zdCBnZXRBSW5kaWNlcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgYVJhbmsgPSBhVmFyaWFibGUucmFuaztcbiAgICAgICAgY29uc3QgYmF0Y2hSYW5rID0gYmF0Y2hWYXJpYWJsZS5yYW5rO1xuICAgICAgICBsZXQgcmVzU3RyID0gYHZhciBhSW5kaWNlczogJHthVmFyaWFibGUudHlwZS5pbmRpY2VzfTtgO1xuICAgICAgICBmb3IgKGxldCBpID0gYVJhbmsgLSAyIC0gMSwgaiA9IGJhdGNoUmFuayAtIDE7IGkgPj0gMDsgaS0tLCBqLS0pIHtcbiAgICAgICAgICByZXNTdHIgKz0gYFxcbmFJbmRpY2VzWyR7aX1dID0gJHtiYXRjaFJhbmsgPiAxID8gYGJhdGNoSW5kaWNlc1ske2p9XWAgOiAnYmF0Y2hJbmRpY2VzJ307YDtcbiAgICAgICAgfVxuICAgICAgICBicm9hZENhc3RBRGltcy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgIHJlc1N0ciArPSBgXFxuYUluZGljZXNbJHtpfV0gPSAwO2A7XG4gICAgICAgIH0pO1xuICAgICAgICByZXNTdHIgKz0gYFxcbmFJbmRpY2VzWyR7YVJhbmsgLSAyfV0gPSB1MzIocm93KTtcbiAgICAgICAgICAgICAgICAgICBhSW5kaWNlc1ske2FSYW5rIC0gMX1dID0gdTMyKGNvbEluKTtgO1xuICAgICAgICByZXR1cm4gcmVzU3RyO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGdldEJJbmRpY2VzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBiUmFuayA9IGJWYXJpYWJsZS5yYW5rO1xuICAgICAgICBjb25zdCBiYXRjaFJhbmsgPSBiYXRjaFZhcmlhYmxlLnJhbms7XG4gICAgICAgIGxldCByZXNTdHIgPSBgdmFyIGJJbmRpY2VzOiAke2JWYXJpYWJsZS50eXBlLmluZGljZXN9O2A7XG4gICAgICAgIGZvciAobGV0IGkgPSBiUmFuayAtIDIgLSAxLCBqID0gYmF0Y2hSYW5rIC0gMTsgaSA+PSAwOyBpLS0sIGotLSkge1xuICAgICAgICAgIHJlc1N0ciArPSBgXFxuYkluZGljZXNbJHtpfV0gPSAke2JhdGNoUmFuayA+IDEgPyBgYmF0Y2hJbmRpY2VzWyR7an1dYCA6ICdiYXRjaEluZGljZXMnfTtgO1xuICAgICAgICB9XG4gICAgICAgIGJyb2FkQ2FzdEJEaW1zLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgcmVzU3RyICs9IGBcXG5iSW5kaWNlc1ske2l9XSA9IDA7YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc1N0ciArPSBgXFxuYkluZGljZXNbJHtiUmFuayAtIDJ9XSA9IHUzMihyb3cpO1xuICAgICAgICAgICAgICAgICAgIGJJbmRpY2VzWyR7YlJhbmsgLSAxfV0gPSB1MzIoY29sSW4pO2A7XG4gICAgICAgIHJldHVybiByZXNTdHI7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc291cmNlID0gYFxuICAgIGZuIG1tX3JlYWRBKGJhdGNoOiBpMzIsIHJvdzogaTMyLCBjb2xJbjogaTMyLCBiYXRjaEluZGljZXM6ICR7YmF0Y2hWYXJpYWJsZS50eXBlLmluZGljZXN9KSAtPiAke1xuICAgICAgICAgIHR5cGVTbmlwcGV0KGNvbXBvbmVudCwgZGF0YVR5cGUpfSB7XG4gICAgICB2YXIgdmFsdWUgPSAke3R5cGVTbmlwcGV0KGNvbXBvbmVudCwgZGF0YVR5cGUpfSgwLjApO1xuICAgICAgbGV0IGNvbCA9IGNvbEluICogJHtjb21wb25lbnR9O1xuICAgICAgaWYocm93IDwgdW5pZm9ybXMuZGltX2Ffb3V0ZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2lubmVyKVxuICAgICAge1xuICAgICAgICAke2dldEFJbmRpY2VzKCl9XG4gICAgICAgIHZhbHVlID0gJHthVmFyaWFibGUuZ2V0QnlJbmRpY2VzKCdhSW5kaWNlcycpfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmbiBtbV9yZWFkQihiYXRjaDogaTMyLCByb3c6IGkzMiwgY29sSW46IGkzMiwgYmF0Y2hJbmRpY2VzOiAke2JhdGNoVmFyaWFibGUudHlwZS5pbmRpY2VzfSkgLT4gJHtcbiAgICAgICAgICB0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0ge1xuICAgICAgdmFyIHZhbHVlID0gJHt0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0oMC4wKTtcbiAgICAgIGxldCBjb2wgPSBjb2xJbiAqICR7Y29tcG9uZW50fTtcbiAgICAgIGlmKHJvdyA8IHVuaWZvcm1zLmRpbV9pbm5lciAmJiBjb2wgPCB1bmlmb3Jtcy5kaW1fYl9vdXRlcilcbiAgICAgIHtcbiAgICAgICAgJHtnZXRCSW5kaWNlcygpfVxuICAgICAgICB2YWx1ZSA9ICR7YlZhcmlhYmxlLmdldEJ5SW5kaWNlcygnYkluZGljZXMnKX07XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZm4gbW1fd3JpdGUoYmF0Y2g6IGkzMiwgcm93OiBpMzIsIGNvbEluOiBpMzIsIHZhbHVlSW46ICR7dHlwZVNuaXBwZXQoY29tcG9uZW50LCBkYXRhVHlwZSl9KSB7XG4gICAgICBsZXQgY29sID0gY29sSW4gKiAke2NvbXBvbmVudH07XG4gICAgICBpZiAocm93IDwgdW5pZm9ybXMuZGltX2Ffb3V0ZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2Jfb3V0ZXIpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVJbjtcbiAgICAgICAgbGV0IGNvb3JkcyA9IHZlYzM8aTMyPihiYXRjaCwgcm93LCBjb2xJbik7XG4gICAgICAgICR7XG4gICAgICAgICAgaGFzQmlhcyA/XG4gICAgICAgICAgICAgIGB2YWx1ZSA9IHZhbHVlICsgJHtpc0NoYW5uZWxzTGFzdCA/ICdiaWFzW2NvbEluXScgOiBgJHt0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0oYmlhc1tyb3ddKWB9O2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgJHthcHBseUFjdGl2YXRpb259XG4gICAgICAgICR7b3V0cHV0VmFyaWFibGUuc2V0QnlJbmRpY2VzKCd2ZWMzPHUzMj4oY29vcmRzKScsICd2YWx1ZScpfVxuICAgICAgfVxuICAgIH1cbiAgICBgO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTWF0bXVsUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYWN0aXZhdGlvbkF0dHJpYnV0ZXM6IEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgcmVzaGFwZWRPdXRwdXRTaGFwZT86IHJlYWRvbmx5IG51bWJlcltdLFxuICAgICBpc0NoYW5uZWxzTGFzdCA9IGZhbHNlIC8qIG9ubHkgdXNlZCBmb3IgY29udjJkQnlNYXRNdWwqLyk6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IGFTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgY29uc3QgYlNoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG4gICAgICBjb25zdCBvdXRlckRpbXNBID0gYVNoYXBlLnNsaWNlKDAsIC0yKTtcbiAgICAgIGNvbnN0IG91dGVyRGltc0IgPSBiU2hhcGUuc2xpY2UoMCwgLTIpO1xuICAgICAgY29uc3Qgb3V0ZXJEaW1zID0gcmVzaGFwZWRPdXRwdXRTaGFwZSA/IHJlc2hhcGVkT3V0cHV0U2hhcGUuc2xpY2UoMCwgLTIpIDogb3V0cHV0U2hhcGUuc2xpY2UoMCwgLTIpO1xuICAgICAgY29uc3QgYmF0Y2hTaXplID0gU2hhcGVVdGlsLnNpemUob3V0ZXJEaW1zKTtcbiAgICAgIGNvbnN0IGRpbUFPdXRlciA9IGFTaGFwZVthU2hhcGUubGVuZ3RoIC0gMl07XG4gICAgICBjb25zdCBkaW1Jbm5lciA9IGFTaGFwZVthU2hhcGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBkaW1CT3V0ZXIgPSBiU2hhcGVbYlNoYXBlLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgaXNWZWM0ID0gZGltSW5uZXIgJSA0ID09PSAwICYmIGRpbUJPdXRlciAlIDQgPT09IDA7XG5cbiAgICAgIC8vIFRPRE86IGZpbmUgdHVuZSBzaXplXG4gICAgICBjb25zdCBlbGVtZW50c1BlclRocmVhZCA9IGRpbUFPdXRlciA8PSA4ID8gWzQsIDEsIDFdIDogWzQsIDQsIDFdO1xuICAgICAgY29uc3Qgd29ya2dyb3VwU2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzgsIDgsIDFdO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSBbXG4gICAgICAgIE1hdGguY2VpbChkaW1CT3V0ZXIgLyB3b3JrZ3JvdXBTaXplWzBdIC8gZWxlbWVudHNQZXJUaHJlYWRbMF0pLFxuICAgICAgICBNYXRoLmNlaWwoZGltQU91dGVyIC8gd29ya2dyb3VwU2l6ZVsxXSAvIGVsZW1lbnRzUGVyVGhyZWFkWzFdKSxcbiAgICAgICAgTWF0aC5jZWlsKGJhdGNoU2l6ZSAvIHdvcmtncm91cFNpemVbMl0gLyBlbGVtZW50c1BlclRocmVhZFsyXSlcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBpc1ZlYzQgPyA0IDogMTtcbiAgICAgIGNvbnN0IGFTaGFwZVRlbXAgPSBbLi4ub3V0ZXJEaW1zQSwgZGltQU91dGVyLCBkaW1Jbm5lciAvIGNvbXBvbmVudHNdO1xuICAgICAgY29uc3QgYVJhbmsgPSBhU2hhcGVUZW1wLmxlbmd0aDtcbiAgICAgIGNvbnN0IGJTaGFwZVRlbXAgPSBbLi4ub3V0ZXJEaW1zQiwgZGltSW5uZXIsIGRpbUJPdXRlciAvIGNvbXBvbmVudHNdO1xuICAgICAgY29uc3QgYlJhbmsgPSBiU2hhcGVUZW1wLmxlbmd0aDtcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlVGVtcCA9IFtiYXRjaFNpemUsIGRpbUFPdXRlciwgZGltQk91dGVyIC8gY29tcG9uZW50c107XG4gICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPSBbXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogZGltQU91dGVyfSwge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBkaW1CT3V0ZXJ9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGRpbUlubmVyfVxuICAgICAgXTtcbiAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEoYWN0aXZhdGlvbkF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3Jtcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRlckRpbXMsIGFTaGFwZVRlbXAsIGJTaGFwZVRlbXApKTtcbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJywgJ3JhbmsnXTtcblxuICAgICAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPiAyO1xuICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzJdLmRpbXMpKTtcbiAgICAgICAgaW5wdXREZXBlbmRlbmNpZXMucHVzaCgncmFuaycpO1xuICAgICAgfVxuICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGVUZW1wKSk7XG5cbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCBiYXRjaFJhbmsgPSBvdXRlckRpbXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBiYXRjaERpbXMgPSBpbnRlcm5hbFZhcmlhYmxlKCdiYXRjaERpbXMnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGJhdGNoUmFuaywgMSk7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0c1swXS5kYXRhVHlwZSk7XG5cbiAgICAgICAgY29uc3QgQSA9IGlucHV0VmFyaWFibGUoJ2EnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGFSYW5rLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgQiA9IGlucHV0VmFyaWFibGUoJ2InLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGJSYW5rLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ3Jlc3VsdCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGVUZW1wLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFyaWFibGVzID0gW0EsIEJdO1xuICAgICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICAgIGNvbnN0IGJpYXNDb21wb25lbnRzID0gaXNDaGFubmVsc0xhc3QgPyBjb21wb25lbnRzIDogMTtcbiAgICAgICAgICBpbnB1dFZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCwgYmlhc0NvbXBvbmVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPVxuICAgICAgICAgICAgW3tuYW1lOiAnZGltX2Ffb3V0ZXInLCB0eXBlOiAnaTMyJ30sIHtuYW1lOiAnZGltX2Jfb3V0ZXInLCB0eXBlOiAnaTMyJ30sIHtuYW1lOiAnZGltX2lubmVyJywgdHlwZTogJ2kzMid9XTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGFjdGl2YXRpb25BdHRyaWJ1dGVzLCB1bmlmb3Jtcyk7XG4gICAgICAgIGNvbnN0IGJhc2VUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKG91dHB1dC50eXBlLnRlbnNvcik7XG4gICAgICAgIGNvbnN0IGFwcGx5QWN0aXZhdGlvbiA9IGdldEFjdGl2YXRpb25TbmlwcGV0KGFjdGl2YXRpb25BdHRyaWJ1dGVzLCBvdXRwdXQudHlwZS52YWx1ZSwgYmFzZVR5cGUpO1xuICAgICAgICBjb25zdCBkZWNsYXJlRnVuY3Rpb25zID0gbWF0TXVsUmVhZFdyaXRlRm5Tb3VyY2UoXG4gICAgICAgICAgICBjb21wb25lbnRzLCBoYXNCaWFzLCBhcHBseUFjdGl2YXRpb24sIFtiYXRjaERpbXMsIEEsIEIsIG91dHB1dF0sIFtvdXRlckRpbXNBLCBvdXRlckRpbXNCLCBvdXRlckRpbXNdLFxuICAgICAgICAgICAgaXNDaGFubmVsc0xhc3QpO1xuICAgICAgICByZXR1cm4gYFxuICAke1xuICAgICAgICAgICAgc2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLnJlZ2lzdGVySW50ZXJuYWxWYXJpYWJsZXMoYmF0Y2hEaW1zKS5kZWNsYXJlVmFyaWFibGVzKFxuICAgICAgICAgICAgICAgIC4uLmlucHV0VmFyaWFibGVzLCBvdXRwdXQpfVxuICAke2RlY2xhcmVGdW5jdGlvbnN9XG4gICR7XG4gICAgICAgICAgICBpc1ZlYzQgPyBtYWtlTWF0TXVsUGFja2VkVmVjNFNvdXJjZShlbGVtZW50c1BlclRocmVhZCwgd29ya2dyb3VwU2l6ZSwgZGF0YVR5cGUsIGJhdGNoRGltcykgOlxuICAgICAgICAgICAgICAgICAgICAgbWFrZU1hdE11bFBhY2tlZFNvdXJjZShlbGVtZW50c1BlclRocmVhZCwgd29ya2dyb3VwU2l6ZSwgZGF0YVR5cGUsIGJhdGNoRGltcyl9XG4gICAgICAgICAgICAgICAgICAgYDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnTWF0TXVsJyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHtcbiAgICAgICAgICBoaW50OiBgJHtlbGVtZW50c1BlclRocmVhZH07JHthY3RpdmF0aW9uQXR0cmlidXRlcy5hY3RpdmF0aW9ufTske2lzVmVjNH07JHtpc0NoYW5uZWxzTGFzdH1gLFxuICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzXG4gICAgICAgIH0sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBkaXNwYXRjaFswXSwgeTogZGlzcGF0Y2hbMV0sIHo6IGRpc3BhdGNoWzJdfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH07XG4gICAgfTtcbiIsICIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIHNhbXBsZWQgZnJvbSBbQHRlbnNvcmZsb3cvdGZqc10gdGZqcy1iYWNrZW5kLXdlYmdwdS9zcmMvY29udjJkX21tX3dlYmdwdS50c1xuLy9cbi8vIG1vZGlmaWVkIHRvIGZpdCB0aGUgbmVlZHMgb2YgdGhlIHByb2plY3RcblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtMT0dfREVCVUd9IGZyb20gJy4uLy4uLy4uL2xvZyc7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7UHJvZ3JhbUluZm8sIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5LCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlLCBVbmlmb3Jtc0FycmF5VHlwZX0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7Q29udkF0dHJpYnV0ZXN9IGZyb20gJy4uL2NvbnYnO1xuaW1wb3J0IHthcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXMsIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEsIGdldEFjdGl2YXRpb25TbmlwcGV0fSBmcm9tICcuLi9mdXNlLXV0aWxzJztcblxuaW1wb3J0IHtiaWFzU25pcHBldCwgdHlwZVNuaXBwZXR9IGZyb20gJy4vYWN0aXZhdGlvbl91dGlsJztcbmltcG9ydCB7dXRpbEZ1bmN0aW9uc30gZnJvbSAnLi9jb252X3V0aWwnO1xuaW1wb3J0IHttYWtlTWF0TXVsUGFja2VkU291cmNlLCBtYWtlTWF0TXVsUGFja2VkVmVjNFNvdXJjZX0gZnJvbSAnLi9tYXRtdWxfcGFja2VkX3dlYmdwdSc7XG5cbmNvbnN0IGNvbnYyZENvbW1vblNuaXBwZXQgPVxuICAgIChpc0NoYW5uZWxzTGFzdDogYm9vbGVhbiwgZml0QU91dGVyOiBib29sZWFuLCBmaXRCT3V0ZXI6IGJvb2xlYW4sIGZpdElubmVyOiBib29sZWFuLCBhZGRCaWFzID0gZmFsc2UsXG4gICAgIGF0dHJpYnV0ZXM6IENvbnZBdHRyaWJ1dGVzLCBpbm5lckVsZW1lbnRTaXplWCA9IDQsIGlubmVyRWxlbWVudFNpemVXID0gNCwgaW5uZXJFbGVtZW50U2l6ZSA9IDQsXG4gICAgIGRhdGFUeXBlID0gJ2YzMicpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgZ2V0WFNuaXBwZXQgPSAoaW5uZXJFbGVtZW50U2l6ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaW5uZXJFbGVtZW50U2l6ZSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiAncmVzRGF0YSA9IHhbeEluZGV4XTsnO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiBgcmVzRGF0YSA9IHZlYzM8JHtkYXRhVHlwZX0+KHhbeEluZGV4XSwgeFt4SW5kZXggKyAxXSwgeFt4SW5kZXggKyAyXSk7YDtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gJ3Jlc0RhdGEgPSB4W3hJbmRleCAvIDRdOyc7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5uZXJFbGVtZW50U2l6ZSAke2lubmVyRWxlbWVudFNpemV9IGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRXU25pcHBldCA9IChpbm5lckVsZW1lbnRTaXplOiBudW1iZXIpID0+IHtcbiAgICAgICAgc3dpdGNoIChpbm5lckVsZW1lbnRTaXplKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuICdyZXR1cm4gd1tyb3cgKiBpMzIodW5pZm9ybXMud19zaGFwZVszXSkgKyBjb2xJbl07JztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gJ3JldHVybiB3W3JvdyAqIGkzMih1bmlmb3Jtcy53X3NoYXBlWzNdKSAvIDQgKyBjb2xJbl07JztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbm5lckVsZW1lbnRTaXplICR7aW5uZXJFbGVtZW50U2l6ZX0gaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvb3JkQVNuaXBwZXQgPSBpc0NoYW5uZWxzTGFzdCA/IGBcbiAgICBsZXQgY29vcmQgPSB2ZWM0PGkzMj4oYmF0Y2gsIHhSb3csIHhDb2wsIHhDaCk7XG4gICAgYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgbGV0IGNvb3JkID0gdmVjNDxpMzI+KGJhdGNoLCB4Q2gsIHhSb3csIHhDb2wpO1xuICAgIGA7XG5cbiAgICAgIGNvbnN0IGNvb3JkUmVzU25pcHBldCA9IGlzQ2hhbm5lbHNMYXN0ID8gYFxuICAgIGxldCBjb29yZHMgPSB2ZWM0PGkzMj4oXG4gICAgICBiYXRjaCxcbiAgICAgIHJvdyAvIG91dFdpZHRoLFxuICAgICAgcm93ICUgb3V0V2lkdGgsXG4gICAgICBjb2wpO1xuICAgIGAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgbGV0IGNvb3JkcyA9IHZlYzQ8aTMyPihcbiAgICAgIGJhdGNoLFxuICAgICAgcm93LFxuICAgICAgY29sIC8gb3V0V2lkdGgsXG4gICAgICBjb2wgJSBvdXRXaWR0aCk7XG4gICAgYDtcblxuICAgICAgY29uc3QgeEhlaWdodCA9IGlzQ2hhbm5lbHNMYXN0ID8gJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzFdKScgOiAnaTMyKHVuaWZvcm1zLnhfc2hhcGVbMl0pJztcbiAgICAgIGNvbnN0IHhXaWR0aCA9IGlzQ2hhbm5lbHNMYXN0ID8gJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzJdKScgOiAnaTMyKHVuaWZvcm1zLnhfc2hhcGVbM10pJztcbiAgICAgIGNvbnN0IHJvdyA9IGlzQ2hhbm5lbHNMYXN0ID8gJ3JvdycgOiAnY29sJztcbiAgICAgIGNvbnN0IGNvbCA9IGlzQ2hhbm5lbHNMYXN0ID8gJ2NvbCcgOiAncm93JztcbiAgICAgIGNvbnN0IHJlYWRYU25pcHBldCA9IGBcbiAgICBsZXQgaW5DaGFubmVscyA9IGkzMih1bmlmb3Jtcy53X3NoYXBlWzJdKTtcbiAgICBsZXQgb3V0V2lkdGggPSAke2lzQ2hhbm5lbHNMYXN0ID8gJ2kzMih1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbMl0pJyA6ICdpMzIodW5pZm9ybXMucmVzdWx0X3NoYXBlWzNdKSd9O1xuICAgIGxldCBvdXRSb3cgPSAke3Jvd30gLyBvdXRXaWR0aDtcbiAgICBsZXQgb3V0Q29sID0gJHtyb3d9ICUgb3V0V2lkdGg7XG5cbiAgICBsZXQgV1JvdyA9ICR7Y29sfSAvIChpMzIodW5pZm9ybXMud19zaGFwZVsxXSkgKiBpbkNoYW5uZWxzKTtcbiAgICBsZXQgV0NvbCA9ICR7Y29sfSAvIGluQ2hhbm5lbHMgJSBpMzIodW5pZm9ybXMud19zaGFwZVsxXSk7XG4gICAgbGV0IHhSb3cgPSBvdXRSb3cgKiB1bmlmb3Jtcy5zdHJpZGVbMF0gKyB1bmlmb3Jtcy5kaWxhdGlvblswXSAqIFdSb3cgLSB1bmlmb3Jtcy5wYWRbMF07XG4gICAgbGV0IHhDb2wgPSBvdXRDb2wgKiB1bmlmb3Jtcy5zdHJpZGVbMV0gKyB1bmlmb3Jtcy5kaWxhdGlvblsxXSAqIFdDb2wgLSB1bmlmb3Jtcy5wYWRbMV07XG4gICAgbGV0IHhDaCA9ICR7Y29sfSAlIGluQ2hhbm5lbHM7XG4gICAgdmFyIHJlc0RhdGEgPSAke3R5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSl9KDAuMCk7XG4gICAgLy8gVGhlIGJvdW5kcyBjaGVja2luZyBpcyBhbHdheXMgbmVlZGVkIHNpbmNlIHdlIHVzZSBpdCB0byBwYWQgemVybyBmb3JcbiAgICAvLyB0aGUgJ3NhbWUnIHBhZGRpbmcgdHlwZS5cbiAgICBpZiAoeFJvdyA+PSAwICYmIHhSb3cgPCAke3hIZWlnaHR9ICYmIHhDb2wgPj0gMCAmJiB4Q29sIDwgJHt4V2lkdGh9KSB7XG4gICAgICAke2Nvb3JkQVNuaXBwZXR9XG4gICAgICBsZXQgeEluZGV4ID0gZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQsIHZlYzQ8aTMyPih1bmlmb3Jtcy54X3NoYXBlKSk7XG4gICAgICAke2dldFhTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYKX1cbiAgICB9XG4gICAgcmV0dXJuIHJlc0RhdGE7YDtcblxuICAgICAgY29uc3Qgc2FtcGxlWCA9IGlzQ2hhbm5lbHNMYXN0ID8gKGZpdEFPdXRlciAmJiBmaXRJbm5lciA/IGBcbiAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemVYfTtcbiAgICAke3JlYWRYU25pcHBldH1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplWH07XG4gICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9hX291dGVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9pbm5lcikge1xuICAgICAgJHtyZWFkWFNuaXBwZXR9XG4gICAgfVxuICAgIHJldHVybiAke3R5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSl9KDAuMCk7YCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpdElubmVyICYmIGZpdEJPdXRlciA/IGBcbiAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemVYfTtcbiAgICAke3JlYWRYU25pcHBldH1gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplWH07XG4gICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9pbm5lciAmJiBjb2wgPCB1bmlmb3Jtcy5kaW1fYl9vdXRlcikge1xuICAgICAgJHtyZWFkWFNuaXBwZXR9XG4gICAgfVxuICAgIHJldHVybiAke3R5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSl9KDAuMCk7YCk7XG5cbiAgICAgIGNvbnN0IHNhbXBsZVcgPSBgJHtnZXRXU25pcHBldChpbm5lckVsZW1lbnRTaXplVyl9YDtcblxuICAgICAgY29uc3QgcmVzVHlwZSA9IHR5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemUsIGRhdGFUeXBlKTtcbiAgICAgIGNvbnN0IGFUeXBlID1cbiAgICAgICAgICBpc0NoYW5uZWxzTGFzdCA/IHR5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSkgOiB0eXBlU25pcHBldChpbm5lckVsZW1lbnRTaXplVywgZGF0YVR5cGUpO1xuICAgICAgY29uc3QgYlR5cGUgPVxuICAgICAgICAgIGlzQ2hhbm5lbHNMYXN0ID8gdHlwZVNuaXBwZXQoaW5uZXJFbGVtZW50U2l6ZVcsIGRhdGFUeXBlKSA6IHR5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSk7XG4gICAgICBjb25zdCBhcHBseUFjdGl2YXRpb24gPSBnZXRBY3RpdmF0aW9uU25pcHBldChhdHRyaWJ1dGVzLCByZXNUeXBlLCBkYXRhVHlwZSk7XG4gICAgICBjb25zdCB1c2VyQ29kZSA9IGBcbiAgICBmbiBtbV9yZWFkQShiYXRjaDogaTMyLCByb3cgOiBpMzIsIGNvbEluIDogaTMyKSAtPiAke2FUeXBlfSB7XG4gICAgICAke2lzQ2hhbm5lbHNMYXN0ID8gc2FtcGxlWCA6IHNhbXBsZVd9XG4gICAgfVxuXG4gICAgZm4gbW1fcmVhZEIoYmF0Y2g6IGkzMiwgcm93IDogaTMyLCBjb2xJbiA6IGkzMikgLT4gJHtiVHlwZX0ge1xuICAgICAgJHtpc0NoYW5uZWxzTGFzdCA/IHNhbXBsZVcgOiBzYW1wbGVYfVxuICAgIH1cblxuICAgIGZuIG1tX3dyaXRlKGJhdGNoOiBpMzIsIHJvdyA6IGkzMiwgY29sSW4gOiBpMzIsIHZhbHVlSW4gOiAke3Jlc1R5cGV9KSB7XG4gICAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemV9O1xuICAgICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9hX291dGVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9iX291dGVyKVxuICAgICAge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVJbjtcbiAgICAgIGxldCBvdXRXaWR0aCA9ICR7aXNDaGFubmVsc0xhc3QgPyAnaTMyKHVuaWZvcm1zLnJlc3VsdF9zaGFwZVsyXSknIDogJ2kzMih1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbM10pJ307XG4gICAgICAke2Nvb3JkUmVzU25pcHBldH1cbiAgICAgICR7Ymlhc1NuaXBwZXQoYWRkQmlhcyl9XG4gICAgICAke2FwcGx5QWN0aXZhdGlvbn1cbiAgICAgIHNldE91dHB1dEF0Q29vcmRzKGNvb3Jkc1swXSwgY29vcmRzWzFdLCBjb29yZHNbMl0sIGNvb3Jkc1szXSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1gO1xuICAgICAgcmV0dXJuIHVzZXJDb2RlO1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDb252MkRNYXRNdWxQcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBDb252QXR0cmlidXRlcywgb3V0cHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBkaW1BT3V0ZXI6IG51bWJlcixcbiAgICAgZGltQk91dGVyOiBudW1iZXIsIGRpbUlubmVyOiBudW1iZXIsIGhhc0JpYXM6IGJvb2xlYW4sIHNlcXVlbnRpYWxBY2Nlc3NCeVRocmVhZHM6IGJvb2xlYW4pOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBpc0NoYW5uZWxzTGFzdCA9IGF0dHJpYnV0ZXMuZm9ybWF0ID09PSAnTkhXQyc7XG4gICAgICBjb25zdCBpbkNoYW5uZWxzID0gaXNDaGFubmVsc0xhc3QgPyBpbnB1dHNbMF0uZGltc1szXSA6IGlucHV0c1swXS5kaW1zWzFdO1xuICAgICAgY29uc3QgYmF0Y2hTaXplID0gb3V0cHV0U2hhcGVbMF07XG4gICAgICBjb25zdCBvdXRXaWR0aCA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0cHV0U2hhcGVbMl0gOiBvdXRwdXRTaGFwZVszXTtcbiAgICAgIGNvbnN0IG91dEhlaWdodCA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0cHV0U2hhcGVbMV0gOiBvdXRwdXRTaGFwZVsyXTtcbiAgICAgIGNvbnN0IG91dENoYW5uZWxzID0gaXNDaGFubmVsc0xhc3QgPyBvdXRwdXRTaGFwZVszXSA6IG91dHB1dFNoYXBlWzFdO1xuICAgICAgLy8gVE9ETzogZW5hYmxlIHZlYzQgZm9yIE5DSFdcbiAgICAgIGNvbnN0IGlzVmVjNCA9IGlzQ2hhbm5lbHNMYXN0ICYmIChpbkNoYW5uZWxzICUgNCA9PT0gMCB8fCBpbkNoYW5uZWxzICUgMyA9PT0gMCkgJiYgb3V0Q2hhbm5lbHMgJSA0ID09PSAwO1xuXG4gICAgICAvLyBUT0RPOiBmaW5lIHR1bmUgc2l6ZVxuICAgICAgY29uc3QgZGlzcGF0Y2hYID0gaXNDaGFubmVsc0xhc3QgPyBvdXRDaGFubmVscyA6IG91dFdpZHRoICogb3V0SGVpZ2h0O1xuICAgICAgY29uc3QgZGlzcGF0Y2hZID0gaXNDaGFubmVsc0xhc3QgPyBvdXRXaWR0aCAqIG91dEhlaWdodCA6IG91dENoYW5uZWxzO1xuICAgICAgY29uc3Qgd29ya0dyb3VwU2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gWzgsIDgsIDFdO1xuICAgICAgY29uc3QgZWxlbWVudHNQZXJUaHJlYWQgPSBkaW1BT3V0ZXIgPD0gOCA/IFs0LCAxLCAxXSA6IFs0LCA0LCAxXTtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gW1xuICAgICAgICBNYXRoLmNlaWwoZGlzcGF0Y2hYIC8gd29ya0dyb3VwU2l6ZVswXSAvIGVsZW1lbnRzUGVyVGhyZWFkWzBdKSxcbiAgICAgICAgTWF0aC5jZWlsKGRpc3BhdGNoWSAvIHdvcmtHcm91cFNpemVbMV0gLyBlbGVtZW50c1BlclRocmVhZFsxXSksXG4gICAgICAgIE1hdGguY2VpbChiYXRjaFNpemUgLyB3b3JrR3JvdXBTaXplWzJdIC8gZWxlbWVudHNQZXJUaHJlYWRbMl0pXG4gICAgICBdO1xuXG4gICAgICBMT0dfREVCVUcoJ3ZlcmJvc2UnLCAoKSA9PiBgW2NvbnYyZF9tbV93ZWJncHVdIGRpc3BhdGNoID0gJHtkaXNwYXRjaH1gKTtcblxuICAgICAgY29uc3QgaW5uZXJFbGVtZW50U2l6ZSA9IGlzVmVjNCA/IChpc0NoYW5uZWxzTGFzdCAmJiBpbkNoYW5uZWxzICUgNCAhPT0gMCA/IDMgOiA0KSA6IDE7XG4gICAgICBjb25zdCB0aWxlQU91dGVyID0gd29ya0dyb3VwU2l6ZVsxXSAqIGVsZW1lbnRzUGVyVGhyZWFkWzFdO1xuICAgICAgY29uc3QgdGlsZUJPdXRlciA9IHdvcmtHcm91cFNpemVbMF0gKiBlbGVtZW50c1BlclRocmVhZFswXTtcbiAgICAgIGNvbnN0IHRpbGVJbm5lciA9IE1hdGgubWF4KHdvcmtHcm91cFNpemVbMF0gKiBpbm5lckVsZW1lbnRTaXplLCB3b3JrR3JvdXBTaXplWzFdKTtcbiAgICAgIGNvbnN0IGZpdEFPdXRlciA9IGRpbUFPdXRlciAlIHRpbGVBT3V0ZXIgPT09IDA7XG4gICAgICBjb25zdCBmaXRCT3V0ZXIgPSBkaW1CT3V0ZXIgJSB0aWxlQk91dGVyID09PSAwO1xuICAgICAgY29uc3QgZml0SW5uZXIgPSBkaW1Jbm5lciAlIHRpbGVJbm5lciA9PT0gMDtcbiAgICAgIGNvbnN0IGVsZW1lbnRzU2l6ZSA9IGlzVmVjNCA/IFtpbm5lckVsZW1lbnRTaXplLCA0LCA0XSA6IFsxLCAxLCAxXTtcblxuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGRpbUFPdXRlcn0sIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogZGltQk91dGVyfSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBkaW1Jbm5lcn0sIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogW2F0dHJpYnV0ZXMucGFkc1swXSwgYXR0cmlidXRlcy5wYWRzWzFdXX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogYXR0cmlidXRlcy5zdHJpZGVzfSwge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBhdHRyaWJ1dGVzLmRpbGF0aW9uc31cbiAgICAgIF07XG4gICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhKGF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3Jtcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMF0uZGltcywgaW5wdXRzWzFdLmRpbXMpKTtcbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJywgJ3JhbmsnXTtcbiAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1syXS5kaW1zKSk7XG4gICAgICAgIGlucHV0RGVwZW5kZW5jaWVzLnB1c2goJ3JhbmsnKTtcbiAgICAgIH1cbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dHB1dFNoYXBlKSk7XG5cbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbXG4gICAgICAgICAge25hbWU6ICdkaW1fYV9vdXRlcicsIHR5cGU6ICdpMzInfSwge25hbWU6ICdkaW1fYl9vdXRlcicsIHR5cGU6ICdpMzInfSwge25hbWU6ICdkaW1faW5uZXInLCB0eXBlOiAnaTMyJ30sXG4gICAgICAgICAge25hbWU6ICdwYWQnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiAyfSwge25hbWU6ICdzdHJpZGUnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiAyfSxcbiAgICAgICAgICB7bmFtZTogJ2RpbGF0aW9uJywgdHlwZTogJ2kzMicsIGxlbmd0aDogMn1cbiAgICAgICAgXTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGF0dHJpYnV0ZXMsIHVuaWZvcm1zKTtcblxuICAgICAgICAvLyBUT0RPOiBzdXBwb3J0IGNvbXBvbmVudCAyLCAzLlxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gaXNWZWM0ID8gNCA6IDE7XG4gICAgICAgIGNvbnN0IHQgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgbGV0IGRlY2xhcmVGdW5jdGlvbnMgPSBgXG4gICAgICBmbiBzZXRPdXRwdXRBdEluZGV4KGZsYXRJbmRleCA6IGkzMiwgdmFsdWUgOiAke2lzVmVjNCA/IGB2ZWM0PCR7dH0+YCA6IHR9KSB7XG4gICAgICAgIHJlc3VsdFtmbGF0SW5kZXhdID0gJHtpc1ZlYzQgPyBgdmVjNDwke3R9PmAgOiB0fSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBmbiBzZXRPdXRwdXRBdENvb3JkcyhkMCA6IGkzMiwgZDEgOiBpMzIsIGQyIDogaTMyLCBkMyA6IGkzMiwgdmFsdWUgOiAke2lzVmVjNCA/IGB2ZWM0PCR7dH0+YCA6IHR9KSB7XG4gICAgICAgIGxldCBmbGF0SW5kZXggPSBnZXRPdXRwdXRJbmRleEZyb21Db29yZHModmVjNDxpMzI+KGQwLCBkMSwgZDIsIGQzKSk7XG4gICAgICAgIHNldE91dHB1dEF0SW5kZXgoZmxhdEluZGV4ICR7aXNWZWM0ID8gJy8gNCcgOiAnJ30sIHZhbHVlKTtcbiAgICAgIH1gO1xuICAgICAgICBjb25zdCB4ID0gaW5wdXRWYXJpYWJsZShcbiAgICAgICAgICAgICd4JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcy5sZW5ndGgsIGlubmVyRWxlbWVudFNpemUgPT09IDMgPyAxIDogaW5uZXJFbGVtZW50U2l6ZSk7XG4gICAgICAgIGNvbnN0IHcgPSBpbnB1dFZhcmlhYmxlKCd3JywgaW5wdXRzWzFdLmRhdGFUeXBlLCBpbnB1dHNbMV0uZGltcy5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBpbnB1dFZhcmlhYmxlcyA9IFt4LCB3XTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ3Jlc3VsdCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgICBjb25zdCBiaWFzID0gaW5wdXRWYXJpYWJsZSgnYmlhcycsIGlucHV0c1syXS5kYXRhVHlwZSwgaW5wdXRzWzJdLmRpbXMubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgICBpbnB1dFZhcmlhYmxlcy5wdXNoKGJpYXMpO1xuICAgICAgICAgIGRlY2xhcmVGdW5jdGlvbnMgKz0gYFxuICAgICAgICBmbiBnZXRCaWFzQnlPdXRwdXRDb29yZHMoY29vcmRzIDogdmVjNDxpMzI+KSAtPiAke2lzVmVjNCA/IGB2ZWM0PCR7dH0+YCA6IHR9IHtcbiAgICAgICAgICByZXR1cm4gYmlhc1tjb29yZHMuJHtpc0NoYW5uZWxzTGFzdCA/ICd3JyA6ICd5J30ke2lzVmVjNCA/ICcvIDQnIDogJyd9XTtcbiAgICAgICAgfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYFxuICAgICAgICAke3V0aWxGdW5jdGlvbnMoJ3VuaWZvcm1zLnJlc3VsdF9zdHJpZGVzJyl9XG4gICAgICAgIC8vc3RydWN0IFVuaWZvcm1zIHsgeFNoYXBlIDogdmVjNDxpMzI+LCB3U2hhcGUgOiB2ZWM0PGkzMj4sIG91dFNoYXBlIDogdmVjNDxpMzI+LFxuICAgICAgICAvLyAgb3V0U2hhcGVTdHJpZGVzOiB2ZWMzPGkzMj4sIGZpbHRlckRpbXMgOiB2ZWMyPGkzMj4sIHBhZCA6IHZlYzI8aTMyPiwgc3RyaWRlIDogdmVjMjxpMzI+LFxuICAgICAgICAvLyAgZGlsYXRpb24gOiB2ZWMyPGkzMj4sIGRpbUFPdXRlciA6IGkzMiwgZGltQk91dGVyIDogaTMyLCBkaW1Jbm5lciA6IGkzMiB9O1xuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFyaWFibGVzLCBvdXRwdXQpfVxuICAgICAgICAke2RlY2xhcmVGdW5jdGlvbnN9XG4gICAgICAgICR7XG4gICAgICAgICAgICBjb252MmRDb21tb25TbmlwcGV0KFxuICAgICAgICAgICAgICAgIGlzQ2hhbm5lbHNMYXN0LCBmaXRBT3V0ZXIsIGZpdEJPdXRlciwgZml0SW5uZXIsIGhhc0JpYXMsIGF0dHJpYnV0ZXMsIGVsZW1lbnRzU2l6ZVswXSwgZWxlbWVudHNTaXplWzFdLFxuICAgICAgICAgICAgICAgIGVsZW1lbnRzU2l6ZVsyXSwgdCl9XG4gICAgICAgICR7XG4gICAgICAgICAgICBpc1ZlYzQgP1xuICAgICAgICAgICAgICAgIG1ha2VNYXRNdWxQYWNrZWRWZWM0U291cmNlKGVsZW1lbnRzUGVyVGhyZWFkLCB3b3JrR3JvdXBTaXplLCB0LCB1bmRlZmluZWQsICFpc0NoYW5uZWxzTGFzdCwgdGlsZUlubmVyKSA6XG4gICAgICAgICAgICAgICAgbWFrZU1hdE11bFBhY2tlZFNvdXJjZShcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNQZXJUaHJlYWQsIHdvcmtHcm91cFNpemUsIHQsIHVuZGVmaW5lZCwgIWlzQ2hhbm5lbHNMYXN0LCB0aWxlSW5uZXIsIGZhbHNlLCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHNlcXVlbnRpYWxBY2Nlc3NCeVRocmVhZHMpfWA7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0NvbnYyRE1hdE11bCcsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgaGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX07JHtpbm5lckVsZW1lbnRTaXplfTske2lzVmVjNH07JHtmaXRBT3V0ZXJ9OyR7Zml0Qk91dGVyfTske2ZpdElubmVyfTske1xuICAgICAgICAgICAgICB0aWxlQU91dGVyfTske3RpbGVCT3V0ZXJ9OyR7dGlsZUlubmVyfWAsXG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXNcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IGRpc3BhdGNoWzBdLCB5OiBkaXNwYXRjaFsxXSwgejogZGlzcGF0Y2hbMl19LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3JtcyxcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgfTtcbiAgICB9O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7UHJvZ3JhbUluZm8sIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5LCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBnZXRNYXhDb21wb25lbnRzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQge2NhbGN1bGF0ZU91dHB1dFNoYXBlLCBDb252QXR0cmlidXRlc30gZnJvbSAnLi9jb252JztcbmltcG9ydCB7YXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zLCBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhLCBnZXRBY3RpdmF0aW9uU25pcHBldH0gZnJvbSAnLi9mdXNlLXV0aWxzJztcblxuLyoqXG4gKiBuYWl2ZSBncm91cGVkIGNvbnYgaW1wbGVtZW50YXRpb24sIHN1cHBvcnRzIDFkLzJkIGNvbnZcbiAqIEBwYXJhbSBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbiAtIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIHNxdWVlemUgdGhlIG91dHB1dCBzaGFwZSwgb25seSB1c2VkIGluIGNvbnYxZFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlR3JvdXBlZENvbnZQcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBDb252QXR0cmlidXRlcyxcbiAgICAgc3F1ZWV6ZU91dHB1dFNoYXBlRnVuY3Rpb24/OiAoc2hhcGU6IHJlYWRvbmx5IG51bWJlcltdKSA9PiBudW1iZXJbXSk6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IGhhc0JpYXMgPSBpbnB1dHMubGVuZ3RoID4gMjtcbiAgICAgIGNvbnN0IHByb2Nlc3NCaWFzID0gaGFzQmlhcyA/ICd2YWx1ZSArPSBiW291dHB1dF9jaGFubmVsXTsnIDogJyc7XG4gICAgICBjb25zdCB4U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IHdTaGFwZSA9IGlucHV0c1sxXS5kaW1zO1xuICAgICAgY29uc3Qgb3V0cHV0Q2hhbm5lbHNQZXJHcm91cCA9IHdTaGFwZVswXSAvIGF0dHJpYnV0ZXMuZ3JvdXA7XG5cbiAgICAgIGNvbnN0IGlzQ2hhbm5lbExhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBjYWxjdWxhdGVPdXRwdXRTaGFwZShcbiAgICAgICAgICB4U2hhcGUsIHdTaGFwZSwgYXR0cmlidXRlcy5kaWxhdGlvbnMsIGF0dHJpYnV0ZXMucGFkcywgYXR0cmlidXRlcy5zdHJpZGVzLCBpc0NoYW5uZWxMYXN0KTtcbiAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG5cbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGF0dHJpYnV0ZXMuZGlsYXRpb25zfSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogW2F0dHJpYnV0ZXMuc3RyaWRlc1swXSwgYXR0cmlidXRlcy5zdHJpZGVzWzFdXX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IFthdHRyaWJ1dGVzLnBhZHNbMF0sIGF0dHJpYnV0ZXMucGFkc1sxXV19LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBvdXRwdXRDaGFubmVsc1Blckdyb3VwfVxuICAgICAgXTtcbiAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEoYXR0cmlidXRlcywgcHJvZ3JhbVVuaWZvcm1zKTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKHhTaGFwZSwgd1NoYXBlKSk7XG4gICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llczogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXSA9IFsncmFuaycsICdyYW5rJ107XG4gICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMl0uZGltcykpO1xuICAgICAgICBpbnB1dERlcGVuZGVuY2llcy5wdXNoKCdyYW5rJyk7XG4gICAgICB9XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZSkpO1xuXG4gICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgYmFzZVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUob3V0cHV0LnR5cGUudGVuc29yKTtcbiAgICAgICAgY29uc3QgYXBwbHlBY3RpdmF0aW9uID0gZ2V0QWN0aXZhdGlvblNuaXBwZXQoYXR0cmlidXRlcywgb3V0cHV0LnR5cGUudmFsdWUsIGJhc2VUeXBlKTtcbiAgICAgICAgY29uc3QgeCA9IGlucHV0VmFyaWFibGUoJ3gnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIHhTaGFwZS5sZW5ndGgpO1xuICAgICAgICBjb25zdCB3ID0gaW5wdXRWYXJpYWJsZSgndycsIGlucHV0c1sxXS5kYXRhVHlwZSwgd1NoYXBlLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFycyA9IFt4LCB3XTtcbiAgICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgICBpbnB1dFZhcnMucHVzaChpbnB1dFZhcmlhYmxlKCdiJywgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcy5sZW5ndGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgICAgICB7bmFtZTogJ291dHB1dF9zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ2RpbGF0aW9ucycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGF0dHJpYnV0ZXMuZGlsYXRpb25zLmxlbmd0aH0sXG4gICAgICAgICAge25hbWU6ICdzdHJpZGVzJywgdHlwZTogJ3UzMicsIGxlbmd0aDogMn0sIHtuYW1lOiAncGFkcycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IDJ9LFxuICAgICAgICAgIHtuYW1lOiAnb3V0cHV0X2NoYW5uZWxzX3Blcl9ncm91cCcsIHR5cGU6ICd1MzInfVxuICAgICAgICBdO1xuICAgICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXMoYXR0cmlidXRlcywgdW5pZm9ybXMpO1xuICAgICAgICByZXR1cm4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFycywgb3V0cHV0KX1cblxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRfc2l6ZScpfVxuXG4gICAgbGV0IG91dHB1dEluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgbGV0IGJhdGNoOiB1MzIgPSBvdXRwdXRJbmRpY2VzWzBdO1xuICAgIGxldCBvdXRwdXRfY2hhbm5lbDogdTMyID0gb3V0cHV0SW5kaWNlc1ske2lzQ2hhbm5lbExhc3QgPyAzIDogMX1dO1xuICAgIGxldCB4UkNDb3JuZXI6IHZlYzI8dTMyPiA9IHZlYzI8dTMyPihvdXRwdXRJbmRpY2VzWyR7aXNDaGFubmVsTGFzdCA/IDEgOiAyfV0sIG91dHB1dEluZGljZXNbJHtcbiAgICAgICAgICAgIGlzQ2hhbm5lbExhc3QgPyAyIDogM31dKSAqIHVuaWZvcm1zLnN0cmlkZXMgLSB1bmlmb3Jtcy5wYWRzO1xuICAgIGxldCBncm91cF9pZDogdTMyID0gb3V0cHV0X2NoYW5uZWwgLyB1bmlmb3Jtcy5vdXRwdXRfY2hhbm5lbHNfcGVyX2dyb3VwO1xuXG4gICAgdmFyIHZhbHVlOiAke291dHB1dC50eXBlLnZhbHVlfSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KDApO1xuICAgIGZvciAodmFyIHdJbkNoYW5uZWw6IHUzMiA9IDB1OyB3SW5DaGFubmVsIDwgdW5pZm9ybXMud19zaGFwZVsxXTsgd0luQ2hhbm5lbCsrKSB7XG4gICAgICBsZXQgaW5wdXRfY2hhbm5lbCA9IGdyb3VwX2lkICogdW5pZm9ybXMud19zaGFwZVsxXSArIHdJbkNoYW5uZWw7XG4gICAgICBmb3IgKHZhciB3SGVpZ2h0OiB1MzIgPSAwdTsgd0hlaWdodCA8IHVuaWZvcm1zLndfc2hhcGVbMl07IHdIZWlnaHQrKykge1xuICAgICAgICBsZXQgeEhlaWdodCA9IHhSQ0Nvcm5lci54ICsgd0hlaWdodCAqIHVuaWZvcm1zLmRpbGF0aW9uc1swXTtcblxuICAgICAgICBpZiAoeEhlaWdodCA8IDB1IHx8IHhIZWlnaHQgPj0gdW5pZm9ybXMueF9zaGFwZVske2lzQ2hhbm5lbExhc3QgPyAxIDogMn1dKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciB3V2lkdGg6IHUzMiA9IDB1OyB3V2lkdGggPCB1bmlmb3Jtcy53X3NoYXBlWzNdOyB3V2lkdGgrKykge1xuICAgICAgICAgIGxldCB4V2lkdGggPSB4UkNDb3JuZXIueSArIHdXaWR0aCAqIHVuaWZvcm1zLmRpbGF0aW9uc1sxXTtcbiAgICAgICAgICBpZiAoeFdpZHRoIDwgMHUgfHwgeFdpZHRoID49IHVuaWZvcm1zLnhfc2hhcGVbJHtpc0NoYW5uZWxMYXN0ID8gMiA6IDN9XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHhWYWwgPSAke1xuICAgICAgICAgICAgaXNDaGFubmVsTGFzdCA/IHguZ2V0KCdiYXRjaCcsICd4SGVpZ2h0JywgJ3hXaWR0aCcsICdpbnB1dF9jaGFubmVsJykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHguZ2V0KCdiYXRjaCcsICdpbnB1dF9jaGFubmVsJywgJ3hIZWlnaHQnLCAneFdpZHRoJyl9O1xuICAgICAgICAgIGxldCB3VmFsID0gJHt3LmdldCgnb3V0cHV0X2NoYW5uZWwnLCAnd0luQ2hhbm5lbCcsICd3SGVpZ2h0JywgJ3dXaWR0aCcpfTtcbiAgICAgICAgICB2YWx1ZSArPSB4VmFsKndWYWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgJHtwcm9jZXNzQmlhc31cbiAgICAke2FwcGx5QWN0aXZhdGlvbn1cbiAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsICd2YWx1ZScpfVxuICB9YDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnR3JvdXBlZENvbnYnLFxuICAgICAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGF0dHJpYnV0ZXMuY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe1xuICAgICAgICAgICAgZGltczogc3F1ZWV6ZU91dHB1dFNoYXBlRnVuY3Rpb24gPyBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbihvdXRwdXRTaGFwZSkgOiBvdXRwdXRTaGFwZSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGVcbiAgICAgICAgICB9XSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgfTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR3JvdXBlZENvbnZWZWN0b3JpemVQcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBDb252QXR0cmlidXRlcywgb3V0cHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPiAyO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMob3V0cHV0U2hhcGVbM10pO1xuICAgICAgY29uc3Qgb3V0cHV0TnVtYmVyID0gZ2V0TWF4Q29tcG9uZW50cyhvdXRwdXRTaGFwZVsyXSk7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gY29tcG9uZW50cyAvIG91dHB1dE51bWJlcjtcbiAgICAgIGNvbnN0IHhTaGFwZSA9IFtpbnB1dHNbMF0uZGltc1swXSwgaW5wdXRzWzBdLmRpbXNbMV0sIGlucHV0c1swXS5kaW1zWzJdLCBpbnB1dHNbMF0uZGltc1szXSAvIGNvbXBvbmVudHNdO1xuICAgICAgY29uc3Qgd1NoYXBlID0gW2lucHV0c1sxXS5kaW1zWzBdLCBpbnB1dHNbMV0uZGltc1sxXSwgaW5wdXRzWzFdLmRpbXNbMl0sIGlucHV0c1sxXS5kaW1zWzNdIC8gY29tcG9uZW50c107XG4gICAgICBjb25zdCBvdXRwdXRTaGFwZUluU2hhZGVyID0gW291dHB1dFNoYXBlWzBdLCBvdXRwdXRTaGFwZVsxXSwgb3V0cHV0U2hhcGVbMl0sIG91dHB1dFNoYXBlWzNdIC8gY29tcG9uZW50c107XG5cbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogW2F0dHJpYnV0ZXMuc3RyaWRlc1swXSwgYXR0cmlidXRlcy5zdHJpZGVzWzFdXX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogW2F0dHJpYnV0ZXMucGFkc1swXSwgYXR0cmlidXRlcy5wYWRzWzFdXX1cbiAgICAgIF07XG4gICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhKGF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3Jtcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyh4U2hhcGUsIHdTaGFwZSwgb3V0cHV0U2hhcGVJblNoYWRlcikpO1xuICAgICAgY29uc3QgeE51bWJlciA9IChvdXRwdXROdW1iZXIgLSAxKSAqIGF0dHJpYnV0ZXMuc3RyaWRlc1sxXSArIHdTaGFwZVsxXTtcbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZUluU2hhZGVyLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGJhc2VUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKG91dHB1dC50eXBlLnRlbnNvcik7XG4gICAgICAgIGNvbnN0IGFwcGx5QWN0aXZhdGlvbiA9IGdldEFjdGl2YXRpb25TbmlwcGV0KGF0dHJpYnV0ZXMsIG91dHB1dC50eXBlLnZhbHVlLCBiYXNlVHlwZSk7XG4gICAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKCd4JywgaW5wdXRzWzBdLmRhdGFUeXBlLCB4U2hhcGUubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgdyA9IGlucHV0VmFyaWFibGUoJ3cnLCBpbnB1dHNbMV0uZGF0YVR5cGUsIHdTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBpbnB1dFZhcnMgPSBbeCwgd107XG4gICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgaW5wdXRWYXJzLnB1c2goaW5wdXRWYXJpYWJsZSgnYicsIGlucHV0c1syXS5kYXRhVHlwZSwgaW5wdXRzWzJdLmRpbXMsIGNvbXBvbmVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9jZXNzQmlhcyA9IGhhc0JpYXMgPyAndmFsdWUgKz0gYltvdXRwdXRfY2hhbm5lbF07JyA6ICcnO1xuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbXG4gICAgICAgICAge25hbWU6ICdvdXRwdXRfc2l6ZScsIHR5cGU6ICd1MzInfSxcbiAgICAgICAgICB7bmFtZTogJ3N0cmlkZXMnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiAyfSxcbiAgICAgICAgICB7bmFtZTogJ3BhZHMnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiAyfSxcbiAgICAgICAgXTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGF0dHJpYnV0ZXMsIHVuaWZvcm1zKTtcbiAgICAgICAgcmV0dXJuIGBcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyguLi5pbnB1dFZhcnMsIG91dHB1dCl9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF9zaXplJyl9XG4gICAgbGV0IHdpZHRoMCA9IHVuaWZvcm1zLm91dHB1dF9zaGFwZVszXTtcbiAgICBsZXQgb3V0cHV0X2NoYW5uZWwgPSBnbG9iYWxfaWR4ICUgd2lkdGgwO1xuICAgIHZhciBpbmRleDEgPSBnbG9iYWxfaWR4IC8gd2lkdGgwO1xuICAgIGxldCB3aWR0aDEgPSB1bmlmb3Jtcy5vdXRwdXRfc2hhcGVbMl0gLyAke291dHB1dE51bWJlcn11O1xuICAgIGxldCBjb2wgPSAoaW5kZXgxICUgd2lkdGgxKSAqICR7b3V0cHV0TnVtYmVyfXU7XG4gICAgaW5kZXgxID0gaW5kZXgxIC8gd2lkdGgxO1xuICAgIGxldCByb3cgPSBpbmRleDEgJSB1bmlmb3Jtcy5vdXRwdXRfc2hhcGVbMV07XG4gICAgbGV0IGJhdGNoID0gaW5kZXgxIC8gdW5pZm9ybXMub3V0cHV0X3NoYXBlWzFdO1xuXG4gICAgbGV0IHhfY29ybmVyID0gdmVjMjxpMzI+KGkzMihyb3cpLCBpMzIoY29sKSkgKiB1bmlmb3Jtcy5zdHJpZGVzIC0gdW5pZm9ybXMucGFkcztcblxuICAgIHZhciB4X3ZhbHM6IGFycmF5PCR7eC50eXBlLnZhbHVlfSwgJHt4TnVtYmVyfT47XG4gICAgdmFyIHZhbHVlczogYXJyYXk8JHtvdXRwdXQudHlwZS52YWx1ZX0sICR7b3V0cHV0TnVtYmVyfT47XG4gICAgbGV0IGlucHV0X2NoYW5uZWwgPSBvdXRwdXRfY2hhbm5lbDtcbiAgICAvLyBVc2UgY29uc3RhbnQgaW5zdGVhZCBvZiB1bmlmb3JtIGNhbiBnaXZlIGJldHRlciBwZXJmb3JtYW5jZSBmb3IgdydzIGhlaWdodC93aWR0aC5cbiAgICBmb3IgKHZhciB3X2hlaWdodDogdTMyID0gMHU7IHdfaGVpZ2h0IDwgJHt3U2hhcGVbMF19OyB3X2hlaWdodCsrKSB7XG4gICAgICBsZXQgeF9oZWlnaHQgPSB4X2Nvcm5lci54ICsgaTMyKHdfaGVpZ2h0KTtcbiAgICAgIGlmICh4X2hlaWdodCA+PSAwICYmIHUzMih4X2hlaWdodCkgPCB1bmlmb3Jtcy54X3NoYXBlWzFdKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgJHt4TnVtYmVyfTsgaSsrKSB7XG4gICAgICAgICAgbGV0IHhfd2lkdGggPSB4X2Nvcm5lci55ICsgaTtcbiAgICAgICAgICBpZiAoeF93aWR0aCA+PSAwICYmIHUzMih4X3dpZHRoKSA8IHVuaWZvcm1zLnhfc2hhcGVbMl0pIHtcbiAgICAgICAgICAgIHhfdmFsc1tpXSA9ICR7eC5nZXQoJ2JhdGNoJywgJ3UzMih4X2hlaWdodCknLCAndTMyKHhfd2lkdGgpJywgJ2lucHV0X2NoYW5uZWwnKX07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhfdmFsc1tpXSA9ICR7eC50eXBlLnZhbHVlfSgwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgd193aWR0aDogdTMyID0gMHU7IHdfd2lkdGggPCAke3dTaGFwZVsxXX07IHdfd2lkdGgrKykge1xuICAgICAgICAgIGxldCB3X3ZhbCA9ICR7dy5nZXQoJ3dfaGVpZ2h0JywgJ3dfd2lkdGgnLCAnMCcsICdvdXRwdXRfY2hhbm5lbCcpfTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke291dHB1dE51bWJlcn11OyBpKyspIHtcbiAgICAgICAgICAgIHZhbHVlc1tpXSA9IGZtYSh4X3ZhbHNbaSAqIHUzMih1bmlmb3Jtcy5zdHJpZGVzWzFdKSArIHdfd2lkdGhdLCB3X3ZhbCwgdmFsdWVzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke291dHB1dE51bWJlcn11OyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAgICR7cHJvY2Vzc0JpYXN9XG4gICAgICAke2FwcGx5QWN0aXZhdGlvbn1cbiAgICAgICR7b3V0cHV0LnNldCgnYmF0Y2gnLCAncm93JywgJ2NvbCArIGknLCAnb3V0cHV0X2NoYW5uZWwnLCAndmFsdWUnKX07XG4gICAgfVxuICB9YDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdHcm91cGVkQ29udi1WZWN0b3JpemUnLFxuICAgICAgICBzaGFkZXJDYWNoZToge1xuICAgICAgICAgIGhpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9OyR7Y29tcG9uZW50c307JHtvdXRwdXROdW1iZXJ9OyR7eE51bWJlcn07JHt3U2hhcGVbMF19OyR7d1NoYXBlWzFdfWAsXG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXM6IGhhc0JpYXMgPyBbJ3JhbmsnLCAncmFuaycsICd0eXBlJ10gOiBbJ3JhbmsnLCAncmFuayddXG4gICAgICAgIH0sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgIH0pLFxuICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICB9O1xuICAgIH07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtCcm9hZGNhc3RVdGlsLCBTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlTWF0bXVsUHJvZ3JhbUluZm99IGZyb20gJy4vM3JkLXBhcnR5L21hdG11bF9wYWNrZWRfd2ViZ3B1JztcbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGdldEJyb2FkY2FzdERpbXMsIGdldE1heENvbXBvbmVudHMsIEluZGljZXNIZWxwZXIsIGlucHV0VmFyaWFibGUsIGludGVybmFsVmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZSwgVW5pZm9ybXNBcnJheVR5cGV9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7YXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zLCBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhLCBnZXRBY3RpdmF0aW9uU25pcHBldCwgSW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlc30gZnJvbSAnLi9mdXNlLXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5haXZlTWF0bXVsUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYWN0aXZhdGlvbkF0dHJpYnV0ZXM6IEludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgcmVzaGFwZWRPdXRwdXRTaGFwZT86IHJlYWRvbmx5IG51bWJlcltdLFxuICAgICBpc0NoYW5uZWxzTGFzdCA9IGZhbHNlIC8qIG9ubHkgdXNlZCBmb3IgY29udjJkQnlNYXRNdWwqLyk6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IGFTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgY29uc3QgYlNoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG5cbiAgICAgIGNvbnN0IE0gPSBhU2hhcGVbYVNoYXBlLmxlbmd0aCAtIDJdO1xuICAgICAgY29uc3QgTiA9IGJTaGFwZVtiU2hhcGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBLID0gYVNoYXBlW2FTaGFwZS5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKE4pO1xuICAgICAgY29uc3QgYUNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKEspO1xuICAgICAgY29uc3Qgb3V0cHV0TnVtYmVyID0gZ2V0TWF4Q29tcG9uZW50cyhNKTtcbiAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSkgLyBjb21wb25lbnRzIC8gb3V0cHV0TnVtYmVyO1xuICAgICAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPiAyO1xuICAgICAgY29uc3Qgb3V0ZXJEaW1zID0gcmVzaGFwZWRPdXRwdXRTaGFwZSA/IHJlc2hhcGVkT3V0cHV0U2hhcGUuc2xpY2UoMCwgLTIpIDogb3V0cHV0U2hhcGUuc2xpY2UoMCwgLTIpO1xuICAgICAgY29uc3QgYmF0Y2hTaXplID0gU2hhcGVVdGlsLnNpemUob3V0ZXJEaW1zKTtcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlSW5TaGFkZXIgPSBbYmF0Y2hTaXplLCBNLCBOXTtcblxuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBvdXRwdXRTaXplfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogTX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IE59LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBLfVxuICAgICAgXTtcbiAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEoYWN0aXZhdGlvbkF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3Jtcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRlckRpbXMsIGFTaGFwZSwgYlNoYXBlKSk7XG4gICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMl0uZGltcykpO1xuICAgICAgfVxuICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGVJblNoYWRlcikpO1xuXG4gICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgY29uc3QgYmF0Y2hEaW1zID0gaW50ZXJuYWxWYXJpYWJsZSgnYmF0Y2hfZGltcycsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0ZXJEaW1zLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGEgPSBpbnB1dFZhcmlhYmxlKCdhJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBhU2hhcGUubGVuZ3RoLCBhQ29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGIgPSBpbnB1dFZhcmlhYmxlKCdiJywgaW5wdXRzWzFdLmRhdGFUeXBlLCBiU2hhcGUubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGVJblNoYWRlci5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBiYXNlVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZShvdXRwdXQudHlwZS50ZW5zb3IpO1xuICAgICAgICBjb25zdCBhcHBseUFjdGl2YXRpb24gPSBnZXRBY3RpdmF0aW9uU25pcHBldChhY3RpdmF0aW9uQXR0cmlidXRlcywgb3V0cHV0LnR5cGUudmFsdWUsIGJhc2VUeXBlKTtcbiAgICAgICAgY29uc3QgaW5wdXRWYXJpYWJsZXMgPSBbYSwgYl07XG4gICAgICAgIGxldCBwcm9jZXNzQmlhcyA9ICcnO1xuICAgICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICAgIGNvbnN0IGJpYXNDb21wb25lbnRzID0gaXNDaGFubmVsc0xhc3QgPyBjb21wb25lbnRzIDogMTtcbiAgICAgICAgICBpbnB1dFZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCwgYmlhc0NvbXBvbmVudHMpKTtcbiAgICAgICAgICBwcm9jZXNzQmlhcyA9IGAke1xuICAgICAgICAgICAgICBpc0NoYW5uZWxzTGFzdCA/IGB2YWx1ZSArPSBiaWFzW2NvbCAvICR7Ymlhc0NvbXBvbmVudHN9XTtgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgdmFsdWUgKz0gJHtvdXRwdXQudHlwZS52YWx1ZX0oYmlhc1tyb3cgKyBpXSk7YH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3V0ZXJEaW1zQSA9IGFTaGFwZS5zbGljZSgwLCAtMik7XG4gICAgICAgIGNvbnN0IG91dGVyRGltc0IgPSBiU2hhcGUuc2xpY2UoMCwgLTIpO1xuICAgICAgICBjb25zdCBicm9hZENhc3RBRGltcyA9IGdldEJyb2FkY2FzdERpbXMob3V0ZXJEaW1zQSwgb3V0ZXJEaW1zKTtcbiAgICAgICAgY29uc3QgYnJvYWRDYXN0QkRpbXMgPSBnZXRCcm9hZGNhc3REaW1zKG91dGVyRGltc0IsIG91dGVyRGltcyk7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgICAgICB7bmFtZTogJ291dHB1dF9zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ00nLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnTicsIHR5cGU6ICd1MzInfSxcbiAgICAgICAgICB7bmFtZTogJ0snLCB0eXBlOiAndTMyJ31cbiAgICAgICAgXTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGFjdGl2YXRpb25BdHRyaWJ1dGVzLCB1bmlmb3Jtcyk7XG5cbiAgICAgICAgY29uc3QgZ2V0SW5kaWNlcyA9ICh2YXJpYWJsZTogSW5kaWNlc0hlbHBlciwgYnJvYWRDYXN0RGltczogbnVtYmVyW10pID0+IHtcbiAgICAgICAgICBjb25zdCByYW5rID0gdmFyaWFibGUucmFuaztcbiAgICAgICAgICBjb25zdCBuYW1lID0gdmFyaWFibGUubmFtZTtcbiAgICAgICAgICBpZiAocmFuayA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIGB2YXIgJHtuYW1lfV9pbmRpY2VzID0gJHt2YXJpYWJsZS50eXBlLmluZGljZXN9KDB1LCAwdSk7YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYmF0Y2hSYW5rID0gYmF0Y2hEaW1zLnJhbms7XG4gICAgICAgICAgbGV0IHJlc1N0ciA9IGB2YXIgJHtuYW1lfV9pbmRpY2VzOiAke3ZhcmlhYmxlLnR5cGUuaW5kaWNlc307YDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gcmFuayAtIDIgLSAxLCBqID0gYmF0Y2hSYW5rIC0gMTsgaSA+PSAwOyBpLS0sIGotLSkge1xuICAgICAgICAgICAgcmVzU3RyICs9IGBcXG4ke25hbWV9X2luZGljZXNbJHtpfV0gPSAke2JhdGNoUmFuayA+IDEgPyBgYmF0Y2hfaW5kaWNlc1ske2p9XWAgOiAnYmF0Y2hfaW5kaWNlcyd9O2A7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyb2FkQ2FzdERpbXMuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICAgIHJlc1N0ciArPSBgXFxuJHtuYW1lfV9pbmRpY2VzWyR7aX1dID0gMDtgO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlc1N0ciArPSBgJHtuYW1lfV9pbmRpY2VzWyR7cmFuayAtIDJ9XSA9IDB1O1xuICAgICAgICAgICAgICAgICAgICAgJHtuYW1lfV9pbmRpY2VzWyR7cmFuayAtIDF9XSA9IDB1O2A7XG4gICAgICAgICAgcmV0dXJuIHJlc1N0cjtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjYWxjUmVzdWx0ID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICAgICAgbGV0IGNhbGNTdHIgPSBgdmFyIGFfZGF0YTogJHthLnR5cGUudmFsdWV9O2A7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhQ29tcG9uZW50czsgaSsrKSB7XG4gICAgICAgICAgICBjYWxjU3RyICs9IGBcbiAgICAgICAgICAgICAgbGV0IGJfZGF0YSR7aX0gPSBiWyhiX29mZnNldCArIChrICsgJHtpfSkgKiB1bmlmb3Jtcy5OICsgY29sKSAvICR7Y29tcG9uZW50c31dO2A7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0TnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgIGNhbGNTdHIgKz0gYGFfZGF0YSA9IGFbKGFfb2Zmc2V0ICsgKHJvdyArICR7aX0pICogdW5pZm9ybXMuSyArIGspIC8gJHthQ29tcG9uZW50c31dO2A7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYUNvbXBvbmVudHM7IGorKykge1xuICAgICAgICAgICAgICBjYWxjU3RyICs9IGBcbiAgICAgICAgICAgIHZhbHVlc1ske2l9XSA9IGZtYSgke2IudHlwZS52YWx1ZX0oYV9kYXRhJHthQ29tcG9uZW50cyA9PT0gMSA/ICcnIDogYFske2p9XWB9KSwgYl9kYXRhJHtqfSwgdmFsdWVzWyR7XG4gICAgICAgICAgICAgICAgICBpfV0pO1xcbmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxjU3RyO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBgXG4gICR7XG4gICAgICAgICAgICBzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykucmVnaXN0ZXJJbnRlcm5hbFZhcmlhYmxlcyhiYXRjaERpbXMpLmRlY2xhcmVWYXJpYWJsZXMoXG4gICAgICAgICAgICAgICAgLi4uaW5wdXRWYXJpYWJsZXMsIG91dHB1dCl9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF9zaXplJyl9XG4gICAgbGV0IGNvbCA9IChnbG9iYWxfaWR4ICUgKHVuaWZvcm1zLk4gLyAke2NvbXBvbmVudHN9KSkgKiAke2NvbXBvbmVudHN9O1xuICAgIHZhciBpbmRleDEgPSBnbG9iYWxfaWR4IC8gKHVuaWZvcm1zLk4gLyAke2NvbXBvbmVudHN9KTtcbiAgICBsZXQgc3RyaWRlMSA9IHVuaWZvcm1zLk0gLyAke291dHB1dE51bWJlcn07XG4gICAgbGV0IHJvdyA9IChpbmRleDEgJSBzdHJpZGUxKSAqICR7b3V0cHV0TnVtYmVyfTtcbiAgICBsZXQgYmF0Y2ggPSBpbmRleDEgLyBzdHJpZGUxO1xuXG4gICAgJHtvdXRwdXRTaGFwZS5sZW5ndGggPT09IDIgPyAnJyA6IGBsZXQgYmF0Y2hfaW5kaWNlcyA9ICR7YmF0Y2hEaW1zLm9mZnNldFRvSW5kaWNlcygnYmF0Y2gnKX07YH1cbiAgICAke2dldEluZGljZXMoYSwgYnJvYWRDYXN0QURpbXMpfVxuICAgIGxldCBhX29mZnNldCA9ICR7YS5pbmRpY2VzVG9PZmZzZXQoJ2FfaW5kaWNlcycpfTtcbiAgICAke2dldEluZGljZXMoYiwgYnJvYWRDYXN0QkRpbXMpfVxuICAgIGxldCBiX29mZnNldCA9ICR7Yi5pbmRpY2VzVG9PZmZzZXQoJ2JfaW5kaWNlcycpfTtcbiAgICB2YXIgdmFsdWVzOiBhcnJheTwke291dHB1dC50eXBlLnZhbHVlfSwgJHtvdXRwdXROdW1iZXJ9PjtcbiAgICBmb3IgKHZhciBrOiB1MzIgPSAwdTsgayA8IHVuaWZvcm1zLks7IGsgPSBrICsgJHthQ29tcG9uZW50c30pIHtcbiAgICAgICR7Y2FsY1Jlc3VsdCgpfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke291dHB1dE51bWJlcn11OyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAgICR7cHJvY2Vzc0JpYXN9XG4gICAgICAke2FwcGx5QWN0aXZhdGlvbn1cbiAgICAgIGxldCBjdXJfaW5kaWNlcyA9ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30oYmF0Y2gsIHJvdyArIGksIGNvbCk7XG4gICAgICBsZXQgb2Zmc2V0ID0gJHtvdXRwdXQuaW5kaWNlc1RvT2Zmc2V0KCdjdXJfaW5kaWNlcycpfTtcbiAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KGBvZmZzZXQgLyAke2NvbXBvbmVudHN9YCwgJ3ZhbHVlJyl9O1xuICAgIH1cbiAgfVxuICBgO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdNYXRNdWxOYWl2ZScsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgaGludDogYCR7YWN0aXZhdGlvbkF0dHJpYnV0ZXMuYWN0aXZhdGlvbn07JHtjb21wb25lbnRzfTske2FDb21wb25lbnRzfTske291dHB1dE51bWJlcn07JHtpc0NoYW5uZWxzTGFzdH1gLFxuICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzOiBoYXNCaWFzID8gWydyYW5rJywgJ3JhbmsnLCAncmFuayddIDogWydyYW5rJywgJ3JhbmsnXVxuICAgICAgICB9LFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9XSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICB9O1xuICAgIH07XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogdm9pZCA9PiB7XG4gIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdE11bCByZXF1aXJlcyAyIGlucHV0cy4nKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMF0uZGltc1tpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAxXSAhPT0gaW5wdXRzWzFdLmRpbXNbaW5wdXRzWzFdLmRpbXMubGVuZ3RoIC0gMl0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NoYXJlZCBkaW1lbnNpb24gZG9lcyBub3QgbWF0Y2guJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBtYXRNdWwgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb25zdCBvdXRwdXRTaGFwZSA9IEJyb2FkY2FzdFV0aWwuY2FsY1NoYXBlKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGNvbnRleHQuaW5wdXRzWzFdLmRpbXMsIHRydWUpO1xuICBpZiAoIW91dHB1dFNoYXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IHVzZSBtYXRtdWwgb24gdGhlIGdpdmVuIHRlbnNvcnMnKTtcbiAgfVxuICBjb25zdCBOID0gb3V0cHV0U2hhcGVbb3V0cHV0U2hhcGUubGVuZ3RoIC0gMV07XG4gIGNvbnN0IEsgPSBjb250ZXh0LmlucHV0c1swXS5kaW1zW2NvbnRleHQuaW5wdXRzWzBdLmRpbXMubGVuZ3RoIC0gMV07XG4gIGlmIChOIDwgOCAmJiBLIDwgOCkge1xuICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVOYWl2ZU1hdG11bFByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCB7YWN0aXZhdGlvbjogJyd9LCBvdXRwdXRTaGFwZSkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVNYXRtdWxQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywge2FjdGl2YXRpb246ICcnfSwgb3V0cHV0U2hhcGUpKTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1Bvb2xDb252VXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHR9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVDb252MkRNYXRNdWxQcm9ncmFtSW5mb30gZnJvbSAnLi8zcmQtcGFydHkvY29udjJkX21tX3dlYmdwdSc7XG5pbXBvcnQge2NyZWF0ZU1hdG11bFByb2dyYW1JbmZvfSBmcm9tICcuLzNyZC1wYXJ0eS9tYXRtdWxfcGFja2VkX3dlYmdwdSc7XG5pbXBvcnQge2NyZWF0ZUdyb3VwZWRDb252UHJvZ3JhbUluZm8sIGNyZWF0ZUdyb3VwZWRDb252VmVjdG9yaXplUHJvZ3JhbUluZm99IGZyb20gJy4vY29udi1ncm91cGVkJztcbmltcG9ydCB7SW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlcywgcGFyc2VJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzfSBmcm9tICcuL2Z1c2UtdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVOYWl2ZU1hdG11bFByb2dyYW1JbmZvfSBmcm9tICcuL21hdG11bCc7XG5pbXBvcnQge2NyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvfSBmcm9tICcuL3RyYW5zcG9zZSc7XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVPdXRwdXRTaGFwZSA9XG4gICAgKGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBrZXJuZWxTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sIGRpbGF0aW9uczogcmVhZG9ubHkgbnVtYmVyW10sXG4gICAgIGFkanVzdFBhZHM6IHJlYWRvbmx5IG51bWJlcltdLCBzdHJpZGVzOiByZWFkb25seSBudW1iZXJbXSwgaXNDaGFubmVsTGFzdDogYm9vbGVhbik6IG51bWJlcltdID0+IHtcbiAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IGlucHV0U2hhcGVbMF07XG4gICAgICBjb25zdCBpbnB1dFNwYXRpYWxTaGFwZSA9IGlucHV0U2hhcGUuc2xpY2UoaXNDaGFubmVsTGFzdCA/IDEgOiAyLCBpc0NoYW5uZWxMYXN0ID8gMyA6IDQpO1xuICAgICAgY29uc3Qgc3BhdGlhbFJhbmsgPSBpbnB1dFNwYXRpYWxTaGFwZS5sZW5ndGg7XG4gICAgICBjb25zdCBvdXRDaGFubmVscyA9IGtlcm5lbFNoYXBlWzBdO1xuICAgICAgY29uc3Qga2VybmVsU3BhdGlhbFNoYXBlID0ga2VybmVsU2hhcGUuc2xpY2UoMik7XG4gICAgICBjb25zdCBkaWxhdGVkS2VybmVsU2hhcGUgPSBrZXJuZWxTcGF0aWFsU2hhcGUubWFwKCh2LCBpKSA9PiB2ICsgKHYgLSAxKSAqIChkaWxhdGlvbnNbaV0gLSAxKSk7XG4gICAgICBjb25zdCBpbnB1dFNwYXRpYWxTaGFwZVdpdGhQYWQgPSBpbnB1dFNwYXRpYWxTaGFwZS5tYXAoKHYsIGkpID0+IHYgKyBhZGp1c3RQYWRzW2ldICsgYWRqdXN0UGFkc1tpICsgc3BhdGlhbFJhbmtdKTtcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlID1cbiAgICAgICAgICBpbnB1dFNwYXRpYWxTaGFwZVdpdGhQYWQubWFwKCh2LCBpKSA9PiBNYXRoLmZsb29yKCh2IC0gZGlsYXRlZEtlcm5lbFNoYXBlW2ldICsgc3RyaWRlc1tpXSkgLyBzdHJpZGVzW2ldKSk7XG4gICAgICBvdXRwdXRTaGFwZS5zcGxpY2UoMCwgMCwgYmF0Y2hTaXplKTtcbiAgICAgIG91dHB1dFNoYXBlLnNwbGljZShpc0NoYW5uZWxMYXN0ID8gMyA6IDEsIDAsIG91dENoYW5uZWxzKTtcbiAgICAgIHJldHVybiBvdXRwdXRTaGFwZTtcbiAgICB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZBdHRyaWJ1dGVzIGV4dGVuZHMgSW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlcywgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgYXV0b1BhZDogc3RyaW5nO1xuICByZWFkb25seSBkaWxhdGlvbnM6IHJlYWRvbmx5IG51bWJlcltdO1xuICByZWFkb25seSBmb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG4gIHJlYWRvbmx5IGdyb3VwOiBudW1iZXI7XG4gIHJlYWRvbmx5IGtlcm5lbFNoYXBlOiByZWFkb25seSBudW1iZXJbXTtcbiAgcmVhZG9ubHkgcGFkczogcmVhZG9ubHkgbnVtYmVyW107XG4gIHJlYWRvbmx5IHN0cmlkZXM6IHJlYWRvbmx5IG51bWJlcltdO1xuICByZWFkb25seSB3SXNDb25zdDogYm9vbGVhbjtcbn1cblxuLy8gZm9yIHRyYW5zcG9zaW5nIHdlaWdodCB0ZW5zb3IgZnJvbSBbTSwgQy9ncm91cCwgS0gsIEtXXSB0byBbS0gsIEtXLCBDL2dyb3VwLCBNXVxuY29uc3Qgd2VpZ2h0VHJhbnNwb3NlQXR0cmlidXRlID0gWzIsIDMsIDEsIDBdO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogQ29udkF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgLy8gUmVmZXIgdG8gdGhlIGJlbG93IGxpbmsgZm9yIGFsbCBpbnB1dCBjaGVja3NcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29ubngvb25ueC9ibG9iL21hc3Rlci9kb2NzL09wZXJhdG9ycy5tZCNDb252XG4gIGlmICghaW5wdXRzIHx8IChpbnB1dHMubGVuZ3RoICE9PSAyICYmIGlucHV0cy5sZW5ndGggIT09IDMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb252IHJlcXVpcmVzIDIgb3IgMyBpbnB1dHMnKTtcbiAgfVxuXG4gIC8vIFRPRE8gOiBOZWVkIHRvIGFkZCBzdXBwb3J0IGZvciBtdWx0aS1kaW1lbnNpb25hbCBjb252XG4gIGlmIChpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IDQgJiYgaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjdXJyZW50bHkgb25seSBzdXBwb3J0IGNvbnYgMUQgYW5kIDJEJyk7XG4gIH1cblxuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSBpbnB1dHNbMV0uZGltcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpbHRlciBkb2VzIG5vdCBoYXZlIHNhbWUgZGltZW5zaW9uIGFzIGlucHV0Jyk7XG4gIH1cblxuICAvLyBGSUxURVJfSU5fQ0hBTk5FTCBzaG91bGQgYmUgZXF1YWwgdG8gREFUQV9DSEFOTkVMXG4gIGNvbnN0IGRhdGFDaGFubmVsID0gaW5wdXRzWzBdLmRpbXNbYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJyA/IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDEgOiAxXTtcbiAgY29uc3QgZmlsdGVySW5DaGFubmVsID0gaW5wdXRzWzFdLmRpbXNbMV0gKiBhdHRyaWJ1dGVzLmdyb3VwO1xuICBpZiAoZGF0YUNoYW5uZWwgIT09IGZpbHRlckluQ2hhbm5lbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRklMVEVSX0lOX0NIQU5ORUwgc2hvdWxkIGJlIGVxdWFsIHRvIERBVEFfQ0hBTk5FTCcpO1xuICB9XG5cbiAgLy8gaWYgYmlhcyBpcyBwcm92aWRlZCBpdCBzaG91bGQgYmUgMUQgYW5kIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgZmVhdHVyZSBtYXBzXG4gIGlmIChpbnB1dHMubGVuZ3RoID09PSAzICYmIChpbnB1dHNbMl0uZGltcy5sZW5ndGggIT09IDEgfHwgaW5wdXRzWzFdLmRpbXNbMF0gIT09IGlucHV0c1syXS5kaW1zWzBdKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiaWFzJyk7XG4gIH1cblxuICBjb25zdCBzcGF0aWFsUmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDI7XG4gIC8vIHdyb25nIGRpbGF0aW9ucyBkaW1lbnNpb25cbiAgaWYgKGF0dHJpYnV0ZXMuZGlsYXRpb25zLmxlbmd0aCAhPT0gc3BhdGlhbFJhbmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRpbGF0aW9ucyBzaG91bGQgYmUgJHtzcGF0aWFsUmFua31EYCk7XG4gIH1cblxuICAvLyBXcm9uZyBzdHJpZGVzIGRpbWVuc2lvblxuICBpZiAoYXR0cmlidXRlcy5zdHJpZGVzLmxlbmd0aCAhPT0gc3BhdGlhbFJhbmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHN0cmlkZXMgc2hvdWxkIGJlICR7c3BhdGlhbFJhbmt9RGApO1xuICB9XG5cbiAgLy8gV3JvbmcgcGFkcyBkaW1lbnNpb25cbiAgaWYgKGF0dHJpYnV0ZXMucGFkcy5sZW5ndGggIT09IHNwYXRpYWxSYW5rICogMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgcGFkcyBzaG91bGQgYmUgJHtzcGF0aWFsUmFuayAqIDJ9RGApO1xuICB9XG5cbiAgLy8gaWYga2VybmVsU2hhcGUgaXMgc3BlY2lmaWVkLCBpdCdzIGRhdGEgbGVuZ3RoIG11c3QgYmUgMiBsZXNzIHRoYW4gZGltcyBsZW5ndGggb2YgdGhlIHdlaWdodHMgdGVuc29yXG4gIC8vICh0aGUgZmlyc3QgMiBkaW1zIGFyZSBiYXRjaF9zaXplIGFuZCBjaGFubmVscylcbiAgaWYgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoICE9PSAwICYmIGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoICE9PSBpbnB1dHNbMV0uZGltcy5sZW5ndGggLSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGtlcm5lbCBzaGFwZScpO1xuICB9XG59O1xuXG5jb25zdCBnZXRBZGp1c3RlZENvbnZBdHRyaWJ1dGVzID0gPFQgZXh0ZW5kcyBDb252QXR0cmlidXRlcz4oYXR0cmlidXRlczogVCwgaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiBUID0+IHtcbiAgY29uc3Qga2VybmVsU2hhcGUgPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLnNsaWNlKCk7XG4gIC8vIGlmIGtlcm5lbFNoYXBlIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhpcyBvcCwgaW5mZXIgaXQgZnJvbSB0aGUgd2VpZ2h0IHRlbnNvciBkaW1zXG4gIGZvciAobGV0IGkgPSAyOyBpIDwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoa2VybmVsU2hhcGVbaSAtIDJdID09PSAwKSB7XG4gICAgICBrZXJuZWxTaGFwZVtpIC0gMl0gPSBpbnB1dHNbMV0uZGltc1tpXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFkcyA9IGF0dHJpYnV0ZXMucGFkcy5zbGljZSgpO1xuICBQb29sQ29udlV0aWwuYWRqdXN0UGFkc0Jhc2VkT25BdXRvUGFkKFxuICAgICAgaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuc3RyaWRlcywgYXR0cmlidXRlcy5kaWxhdGlvbnMsIGtlcm5lbFNoYXBlLCBwYWRzLCBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnLFxuICAgICAgYXR0cmlidXRlcy5hdXRvUGFkKTtcblxuICAvLyBhbHdheXMgcmV0dXJuIGEgbmV3IG9iamVjdCBzbyBkb2VzIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIGF0dHJpYnV0ZXNcbiAgY29uc3QgbmV3QXR0cmlidXRlczogVCA9IE9iamVjdC5hc3NpZ24oe30sIGF0dHJpYnV0ZXMpO1xuICBPYmplY3QuYXNzaWduKG5ld0F0dHJpYnV0ZXMsIHtrZXJuZWxTaGFwZSwgcGFkc30pO1xuICByZXR1cm4gbmV3QXR0cmlidXRlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQ29udkF0dHJpYnV0ZXMgPT4ge1xuICBjb25zdCBhY3RpdmF0aW9uQXR0cmlidXRlcyA9IHBhcnNlSW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTtcbiAgLy8gVE9ETyA6IE1ha2UgdGhpcyBnZW5lcmljIGVub3VnaCB0byBjb21wdXRlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgbXVsdGktZGltZW5zaW9uYWwgY29udlxuICBjb25zdCBmb3JtYXQgPSBhdHRyaWJ1dGVzLmZvcm1hdCBhcyAnTkhXQycgfCAnTkNIVyc7XG4gIGNvbnN0IGF1dG9QYWQgPSBbJ05PVFNFVCcsICdWQUxJRCcsICdTQU1FX1VQUEVSJywgJ1NBTUVfTE9XRVInXVthdHRyaWJ1dGVzLmF1dG9fcGFkIGFzIG51bWJlcl07XG4gIGNvbnN0IGRpbGF0aW9ucyA9IGF0dHJpYnV0ZXMuZGlsYXRpb25zIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIGNvbnN0IGdyb3VwID0gYXR0cmlidXRlcy5ncm91cCBhcyBudW1iZXI7XG4gIGNvbnN0IGtlcm5lbFNoYXBlID0gYXR0cmlidXRlcy5rZXJuZWxfc2hhcGUgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgY29uc3QgcGFkcyA9IGF0dHJpYnV0ZXMucGFkcyBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgY29uc3Qgc3RyaWRlcyA9IGF0dHJpYnV0ZXMuc3RyaWRlcyBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICBjb25zdCB3SXNDb25zdCA9IChhdHRyaWJ1dGVzLndfaXNfY29uc3QgYXMgKCkgPT4gYm9vbGVhbikoKTtcblxuICByZXR1cm4ge1xuICAgIGF1dG9QYWQsXG4gICAgZm9ybWF0LFxuICAgIGRpbGF0aW9ucyxcbiAgICBncm91cCxcbiAgICBrZXJuZWxTaGFwZSxcbiAgICBwYWRzLFxuICAgIHN0cmlkZXMsXG4gICAgd0lzQ29uc3QsXG4gICAgLi4uYWN0aXZhdGlvbkF0dHJpYnV0ZXMsXG4gICAgY2FjaGVLZXk6IGAke2F0dHJpYnV0ZXMuZm9ybWF0fTske2FjdGl2YXRpb25BdHRyaWJ1dGVzLmFjdGl2YXRpb259O2BcbiAgfTtcbn07XG5cbmNvbnN0IGNvbnYyZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IENvbnZBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGFkanVzdGVkQXR0cmlidXRlcyA9IGdldEFkanVzdGVkQ29udkF0dHJpYnV0ZXMoYXR0cmlidXRlcywgaW5wdXRzKTtcblxuICAvLyBjaGVjayBhdHRyaWJ1dGVzXG5cbiAgLy8gY29uc3QgaGFzUHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyA9IGZhbHNlOyAvKiBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgcHJlbHUgYWN0aXZhdGlvbiB3ZWlnaHRzICovXG4gIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJztcbiAgaWYgKGF0dHJpYnV0ZXMuZ3JvdXAgIT09IDEpIHtcbiAgICAvLyBOVklESUEgR1BVIHdpdGggYW1wZXJlIGFyY2hpdGVjdHVyZSBmYWlscyB3aXRoIGJlbG93IDIgY2FzZXMsIGJ1dCB3ZSBjb3VsZG4ndCByZXBybyB0aGVtIHdpdGggYW55IG90aGVyXG4gICAgLy8gR1BVcy4gU28ganVzdCBkaXNhYmxlIHZlY3Rvcml6ZSBvbiBOVklESUEgYW1wZXJlIHRvIGVuc3VyZSBhbHdheXMgY29ycmVjdCBvdXRwdXRzLlxuICAgIC8vIFt3ZWJncHVdQ29udiAtIGNvbnYgLSB2ZWN0b3JpemUgZ3JvdXAgLSBCXG4gICAgLy8gW3dlYmdwdV1Db252IC0gY29udiAtIHZlY3Rvcml6ZSBncm91cCAtIERcbiAgICBjb25zdCBlbmFibGVHcm91cGVkQ29udlZlY3Rvcml6ZSA9ICFjb250ZXh0LmFkYXB0ZXJJbmZvLmlzQXJjaGl0ZWN0dXJlKCdhbXBlcmUnKTtcbiAgICBpZiAoZW5hYmxlR3JvdXBlZENvbnZWZWN0b3JpemUgJiYgaXNDaGFubmVsc0xhc3QgJiYgaW5wdXRzWzFdLmRpbXNbMF0gPT09IGF0dHJpYnV0ZXMuZ3JvdXAgJiZcbiAgICAgICAgaW5wdXRzWzFdLmRpbXNbMV0gPT09IDEgJiYgYXR0cmlidXRlcy5kaWxhdGlvbnNbMF0gPT09IDEgJiYgYXR0cmlidXRlcy5kaWxhdGlvbnNbMV0gPT09IDEpIHtcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gY2FsY3VsYXRlT3V0cHV0U2hhcGUoXG4gICAgICAgICAgaW5wdXRzWzBdLmRpbXMsIGlucHV0c1sxXS5kaW1zLCBhdHRyaWJ1dGVzLmRpbGF0aW9ucywgYWRqdXN0ZWRBdHRyaWJ1dGVzLnBhZHMsIGF0dHJpYnV0ZXMuc3RyaWRlcyxcbiAgICAgICAgICBpc0NoYW5uZWxzTGFzdCk7XG4gICAgICBjb25zdCB0cmFuc3Bvc2VkV2VpZ2h0ID0gKGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCBhcyBUZW5zb3JWaWV3IHwgdW5kZWZpbmVkKSA/P1xuICAgICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oaW5wdXRzWzFdLCB3ZWlnaHRUcmFuc3Bvc2VBdHRyaWJ1dGUpLFxuICAgICAgICAgICAgICB7aW5wdXRzOiBbMV0sIG91dHB1dHM6IFthdHRyaWJ1dGVzLndJc0NvbnN0ID8gLTIgOiAtMV19KVswXTtcbiAgICAgIGlmIChhdHRyaWJ1dGVzLndJc0NvbnN0ICYmICFjb250ZXh0Lmtlcm5lbEN1c3RvbURhdGEud1QpIHtcbiAgICAgICAgY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUID0gdHJhbnNwb3NlZFdlaWdodDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnZJbnB1dHMgPSBbaW5wdXRzWzBdLCB0cmFuc3Bvc2VkV2VpZ2h0XTtcbiAgICAgIGlmIChpbnB1dHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGNvbnZJbnB1dHMucHVzaChpbnB1dHNbMl0pO1xuICAgICAgfVxuICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIGNyZWF0ZUdyb3VwZWRDb252VmVjdG9yaXplUHJvZ3JhbUluZm8oY29udklucHV0cywgYWRqdXN0ZWRBdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZSksIHtpbnB1dHM6IGNvbnZJbnB1dHN9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUdyb3VwZWRDb252UHJvZ3JhbUluZm8oaW5wdXRzLCBhZGp1c3RlZEF0dHJpYnV0ZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPT09IDM7XG4gIGNvbnN0IGlucHV0SGVpZ2h0ID0gaW5wdXRzWzBdLmRpbXNbaXNDaGFubmVsc0xhc3QgPyAxIDogMl07XG4gIGNvbnN0IGlucHV0V2lkdGggPSBpbnB1dHNbMF0uZGltc1tpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXTtcbiAgY29uc3QgaW5wdXRDaGFubmVscyA9IGlucHV0c1swXS5kaW1zW2lzQ2hhbm5lbHNMYXN0ID8gMyA6IDFdO1xuICBjb25zdCB3ZWlnaHRIZWlnaHQgPSBpbnB1dHNbMV0uZGltc1syXTtcbiAgY29uc3Qgd2VpZ2h0V2lkdGggPSBpbnB1dHNbMV0uZGltc1szXTtcblxuICBjb25zdCBvdXRwdXRTaGFwZSA9IGNhbGN1bGF0ZU91dHB1dFNoYXBlKFxuICAgICAgaW5wdXRzWzBdLmRpbXMsIGlucHV0c1sxXS5kaW1zLCBhdHRyaWJ1dGVzLmRpbGF0aW9ucywgYWRqdXN0ZWRBdHRyaWJ1dGVzLnBhZHMsIGF0dHJpYnV0ZXMuc3RyaWRlcyxcbiAgICAgIGlzQ2hhbm5lbHNMYXN0KTtcbiAgY29uc3Qgb3V0SGVpZ2h0ID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAxIDogMl07XG4gIGNvbnN0IG91dFdpZHRoID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAyIDogM107XG4gIGNvbnN0IG91dENoYW5uZWxzID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAzIDogMV07XG5cbiAgY29uc3Qgc2FtZVNpemUgPSBpc0NoYW5uZWxzTGFzdCAmJiB3ZWlnaHRIZWlnaHQgPT09IGlucHV0SGVpZ2h0ICYmIHdlaWdodFdpZHRoID09PSBpbnB1dFdpZHRoICYmXG4gICAgICBhdHRyaWJ1dGVzLnBhZHNbMF0gPT09IDAgJiYgYXR0cmlidXRlcy5wYWRzWzFdID09PSAwO1xuICBpZiAoc2FtZVNpemUgfHxcbiAgICAgICh3ZWlnaHRIZWlnaHQgPT09IDEgJiYgd2VpZ2h0V2lkdGggPT09IDEgJiYgYXR0cmlidXRlcy5kaWxhdGlvbnNbMF0gPT09IDEgJiYgYXR0cmlidXRlcy5kaWxhdGlvbnNbMV0gPT09IDEgJiZcbiAgICAgICBhdHRyaWJ1dGVzLnN0cmlkZXNbMF0gPT09IDEgJiYgYXR0cmlidXRlcy5zdHJpZGVzWzFdID09PSAxICYmIGF0dHJpYnV0ZXMucGFkc1swXSA9PT0gMCAmJlxuICAgICAgIGF0dHJpYnV0ZXMucGFkc1sxXSA9PT0gMCkpIHtcbiAgICAvLyBjb252MmRCeU1hdE11bFxuICAgIGNvbnN0IGJhdGNoID0gb3V0cHV0U2hhcGVbMF07XG4gICAgbGV0IHhSZXNoYXBlZCwgd1Jlc2hhcGVkLCBtYXRtdWxPdXRwdXRTaGFwZTtcbiAgICBjb25zdCBtYXRtdWxJbnB1dHMgPSBbXTtcbiAgICBpZiAoaXNDaGFubmVsc0xhc3QpIHtcbiAgICAgIGNvbnN0IHRyYW5zcG9zZWRXZWlnaHQgPSAoY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUIGFzIFRlbnNvclZpZXcgfCB1bmRlZmluZWQpID8/XG4gICAgICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgICAgICBjcmVhdGVUcmFuc3Bvc2VQcm9ncmFtSW5mbyhpbnB1dHNbMV0sIHdlaWdodFRyYW5zcG9zZUF0dHJpYnV0ZSksXG4gICAgICAgICAgICAgIHtpbnB1dHM6IFsxXSwgb3V0cHV0czogW2F0dHJpYnV0ZXMud0lzQ29uc3QgPyAtMiA6IC0xXX0pWzBdO1xuICAgICAgaWYgKGF0dHJpYnV0ZXMud0lzQ29uc3QgJiYgIWNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCkge1xuICAgICAgICBjb250ZXh0Lmtlcm5lbEN1c3RvbURhdGEud1QgPSB0cmFuc3Bvc2VkV2VpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKHNhbWVTaXplKSB7XG4gICAgICAgIGNvbnN0IHNoYXJlZERpbSA9IGlucHV0SGVpZ2h0ICogaW5wdXRXaWR0aCAqIGlucHV0Q2hhbm5lbHM7XG4gICAgICAgIHhSZXNoYXBlZCA9IGlucHV0c1swXS5yZXNoYXBlKFsxLCBiYXRjaCwgc2hhcmVkRGltXSk7XG4gICAgICAgIHdSZXNoYXBlZCA9IHRyYW5zcG9zZWRXZWlnaHQucmVzaGFwZShbMSwgc2hhcmVkRGltLCBvdXRDaGFubmVsc10pO1xuICAgICAgICBtYXRtdWxPdXRwdXRTaGFwZSA9IFsxLCBiYXRjaCwgb3V0Q2hhbm5lbHNdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeFJlc2hhcGVkID0gaW5wdXRzWzBdLnJlc2hhcGUoW2JhdGNoLCBpbnB1dEhlaWdodCAqIGlucHV0V2lkdGgsIGlucHV0Q2hhbm5lbHNdKTtcbiAgICAgICAgd1Jlc2hhcGVkID0gdHJhbnNwb3NlZFdlaWdodC5yZXNoYXBlKFsxLCBpbnB1dENoYW5uZWxzLCBvdXRDaGFubmVsc10pO1xuICAgICAgICBtYXRtdWxPdXRwdXRTaGFwZSA9IFtiYXRjaCwgb3V0SGVpZ2h0ICogb3V0V2lkdGgsIG91dENoYW5uZWxzXTtcbiAgICAgIH1cbiAgICAgIG1hdG11bElucHV0cy5wdXNoKHhSZXNoYXBlZCk7XG4gICAgICBtYXRtdWxJbnB1dHMucHVzaCh3UmVzaGFwZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB4UmVzaGFwZWQgPSBpbnB1dHNbMF0ucmVzaGFwZShbYmF0Y2gsIGlucHV0Q2hhbm5lbHMsIGlucHV0SGVpZ2h0ICogaW5wdXRXaWR0aF0pO1xuICAgICAgd1Jlc2hhcGVkID0gaW5wdXRzWzFdLnJlc2hhcGUoWzEsIG91dENoYW5uZWxzLCBpbnB1dENoYW5uZWxzXSk7XG4gICAgICBtYXRtdWxPdXRwdXRTaGFwZSA9IFtiYXRjaCwgb3V0Q2hhbm5lbHMsIG91dEhlaWdodCAqIG91dFdpZHRoXTtcbiAgICAgIG1hdG11bElucHV0cy5wdXNoKHdSZXNoYXBlZCk7XG4gICAgICBtYXRtdWxJbnB1dHMucHVzaCh4UmVzaGFwZWQpO1xuICAgIH1cbiAgICBpZiAoaGFzQmlhcykge1xuICAgICAgbWF0bXVsSW5wdXRzLnB1c2goaW5wdXRzWzJdKTtcbiAgICB9XG4gICAgY29uc3QgTiA9IG1hdG11bE91dHB1dFNoYXBlWzJdO1xuICAgIGNvbnN0IEsgPSBtYXRtdWxJbnB1dHNbMF0uZGltc1ttYXRtdWxJbnB1dHNbMF0uZGltcy5sZW5ndGggLSAxXTtcbiAgICAvLyBUdW5lIHRoZSB0aHJlc2hvbGQuXG4gICAgaWYgKE4gPCA4ICYmIEsgPCA4KSB7XG4gICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlTmFpdmVNYXRtdWxQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgICAgbWF0bXVsSW5wdXRzLCBhZGp1c3RlZEF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlLCBtYXRtdWxPdXRwdXRTaGFwZSwgaXNDaGFubmVsc0xhc3QpLFxuICAgICAgICAgIHtpbnB1dHM6IG1hdG11bElucHV0c30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlTWF0bXVsUHJvZ3JhbUluZm8obWF0bXVsSW5wdXRzLCBhZGp1c3RlZEF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlLCBtYXRtdWxPdXRwdXRTaGFwZSwgaXNDaGFubmVsc0xhc3QpLFxuICAgICAgICAgIHtpbnB1dHM6IG1hdG11bElucHV0c30pO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUT0RPOiBpbXBsZW1lbnQgY29udjJkV2l0aEltMkNvbCgpXG5cbiAgY29uc3Qgc2VxdWVudGlhbEFjY2Vzc0J5VGhyZWFkcyA9IC8qIGJhY2tlbmQuYWRhcHRlckluZm8uaXNJbnRlbCgpICovIHRydWU7XG5cbiAgLy8gU1RFUC4xOiB0cmFuc3Bvc2Ugd2VpZ2h0XG4gIGNvbnN0IHRyYW5zcG9zZWRXZWlnaHQgPSAoY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUIGFzIFRlbnNvclZpZXcgfCB1bmRlZmluZWQpID8/XG4gICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oaW5wdXRzWzFdLCB3ZWlnaHRUcmFuc3Bvc2VBdHRyaWJ1dGUpLFxuICAgICAgICAgIHtpbnB1dHM6IFsxXSwgb3V0cHV0czogW2F0dHJpYnV0ZXMud0lzQ29uc3QgPyAtMiA6IC0xXX0pWzBdO1xuICBpZiAoYXR0cmlidXRlcy53SXNDb25zdCAmJiAhY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUKSB7XG4gICAgY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUID0gdHJhbnNwb3NlZFdlaWdodDtcbiAgfVxuXG4gIC8vIFNURVAuMjogcHJlcGFyZSByZXNoYXBlZCBpbnB1dHNcbiAgY29uc3QgY29udklucHV0cyA9IFtpbnB1dHNbMF0sIHRyYW5zcG9zZWRXZWlnaHRdO1xuICBpZiAoaGFzQmlhcykge1xuICAgIGNvbnZJbnB1dHMucHVzaChpbnB1dHNbMl0pO1xuICB9XG5cbiAgLy8gU1RFUC4zOiBjb21wdXRlIG1hdG11bFxuICBjb25zdCBkaW1BT3V0ZXIgPSBpc0NoYW5uZWxzTGFzdCA/IG91dEhlaWdodCAqIG91dFdpZHRoIDogb3V0Q2hhbm5lbHM7XG4gIGNvbnN0IGRpbUJPdXRlciA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0Q2hhbm5lbHMgOiBvdXRIZWlnaHQgKiBvdXRXaWR0aDtcbiAgY29uc3QgZGltSW5uZXIgPSB3ZWlnaHRIZWlnaHQgKiB3ZWlnaHRXaWR0aCAqIGlucHV0Q2hhbm5lbHM7XG4gIGNvbnRleHQuY29tcHV0ZShcbiAgICAgIGNyZWF0ZUNvbnYyRE1hdE11bFByb2dyYW1JbmZvKFxuICAgICAgICAgIGNvbnZJbnB1dHMsIGFkanVzdGVkQXR0cmlidXRlcywgb3V0cHV0U2hhcGUsIGRpbUFPdXRlciwgZGltQk91dGVyLCBkaW1Jbm5lciwgaGFzQmlhcyxcbiAgICAgICAgICBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzKSxcbiAgICAgIHtpbnB1dHM6IGNvbnZJbnB1dHN9KTtcbn07XG5cbmNvbnN0IGNvbnYxZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogQ29udkF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgLy8gZXh0ZW5kIHRoZSBpbnB1dCB0byAyRCBieSBhZGRpbmcgSCBkaW1lbnNpb25cbiAgY29uc3QgaXNDaGFubmVsTGFzdCA9IGF0dHJpYnV0ZXMuZm9ybWF0ID09PSAnTkhXQyc7XG4gIGNvbnN0IGlucHV0cyA9IFtcbiAgICBjb250ZXh0LmlucHV0c1swXS5yZXNoYXBlKFxuICAgICAgICBpc0NoYW5uZWxMYXN0ID9cbiAgICAgICAgICAgIC8vIFtOLCBXLCBDXSAtPiBbTiwgSD0xLCBXLCBDXVxuICAgICAgICAgICAgW2NvbnRleHQuaW5wdXRzWzBdLmRpbXNbMF0sIDEsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMV0sIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMl1dIDpcbiAgICAgICAgICAgIC8vIFtOLCBDLCBXXSAtPiBbTiwgQywgSD0xLCBXXVxuICAgICAgICAgICAgW2NvbnRleHQuaW5wdXRzWzBdLmRpbXNbMF0sIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMV0sIDEsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMl1dKSxcbiAgICAvL1tGSUxURVJfT1VUX0NIQU5ORUwsIEZJTFRFUl9JTl9DSEFOTkVMLCBrV10gLT4gW0ZJTFRFUl9PVVRfQ0hBTk5FTCwgRklMVEVSX0lOX0NIQU5ORUwsIGtIPTEsIGtXXVxuICAgIGNvbnRleHQuaW5wdXRzWzFdLnJlc2hhcGUoW2NvbnRleHQuaW5wdXRzWzFdLmRpbXNbMF0sIGNvbnRleHQuaW5wdXRzWzFdLmRpbXNbMV0sIDEsIGNvbnRleHQuaW5wdXRzWzFdLmRpbXNbMl1dKVxuICBdO1xuICBpZiAoY29udGV4dC5pbnB1dHMubGVuZ3RoID09PSAzKSB7XG4gICAgaW5wdXRzLnB1c2goY29udGV4dC5pbnB1dHNbMl0pO1xuICB9XG4gIGNvbnN0IHBhZHMgPSBbMCwgYXR0cmlidXRlcy5wYWRzWzBdLCAwLCBhdHRyaWJ1dGVzLnBhZHNbMV1dO1xuICBjb25zdCBzdHJpZGVzID0gWzFdLmNvbmNhdChhdHRyaWJ1dGVzLnN0cmlkZXMpO1xuICBjb25zdCBkaWxhdGlvbnMgPSBbMV0uY29uY2F0KGF0dHJpYnV0ZXMuZGlsYXRpb25zKTtcbiAgY29uc3Qga2VybmVsU2hhcGUgPSBbMV0uY29uY2F0KGF0dHJpYnV0ZXMua2VybmVsU2hhcGUpO1xuICBjb25zdCBhZGp1c3RlZEF0dHJpYnV0ZXMgPSBnZXRBZGp1c3RlZENvbnZBdHRyaWJ1dGVzKHsuLi5hdHRyaWJ1dGVzLCBwYWRzLCBzdHJpZGVzLCBkaWxhdGlvbnMsIGtlcm5lbFNoYXBlfSwgaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUdyb3VwZWRDb252UHJvZ3JhbUluZm8oXG4gICAgICBpbnB1dHMsIGFkanVzdGVkQXR0cmlidXRlcyxcbiAgICAgIG91dHB1dFNoYXBlID0+IGlzQ2hhbm5lbExhc3QgPyBbb3V0cHV0U2hhcGVbMF0sIG91dHB1dFNoYXBlWzJdLCBvdXRwdXRTaGFwZVszXV0gOiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnYgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IENvbnZBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTsgIC8vIGN1cnJlbnRseSB3aWxsIGZhaWwgaWYgbm90IGNvbnYxRC8yRFxuICBpZiAoY29udGV4dC5pbnB1dHNbMF0uZGltcy5sZW5ndGggPT09IDMpIHtcbiAgICBjb252MWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgY29udjJkKGNvbnRleHQsIGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgfVxufTtcbiIsICIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIHNhbXBsZWQgZnJvbSBbQHRlbnNvcmZsb3cvdGZqc10gdGZqcy1iYWNrZW5kLXdlYmdwdS9zcmMvY29udl9iYWNrcHJvcF9tbV93ZWJncHUudHNcbi8vXG4vLyBtb2RpZmllZCB0byBmaXQgdGhlIG5lZWRzIG9mIHRoZSBwcm9qZWN0XG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7TE9HX0RFQlVHfSBmcm9tICcuLi8uLi8uLi9sb2cnO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1Byb2dyYW1JbmZvLCBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeSwgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZSwgVW5pZm9ybXNBcnJheVR5cGV9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQge0NvbnZUcmFuc3Bvc2VBdHRyaWJ1dGVzfSBmcm9tICcuLi9jb252LXRyYW5zcG9zZSc7XG5pbXBvcnQge2FwcGVuZEFjdGl2YXRpb25Vbmlmb3JtcywgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zRGF0YSwgZ2V0QWN0aXZhdGlvblNuaXBwZXR9IGZyb20gJy4uL2Z1c2UtdXRpbHMnO1xuXG5pbXBvcnQge2JpYXNTbmlwcGV0fSBmcm9tICcuL2FjdGl2YXRpb25fdXRpbCc7XG5pbXBvcnQge3V0aWxGdW5jdGlvbnN9IGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7bWFrZU1hdE11bFBhY2tlZFNvdXJjZSwgbWFrZU1hdE11bFBhY2tlZFZlYzRTb3VyY2V9IGZyb20gJy4vbWF0bXVsX3BhY2tlZF93ZWJncHUnO1xuXG5jb25zdCBjb252MmRUcmFuc3Bvc2VDb21tb25TbmlwcGV0ID1cbiAgICAoaXNDaGFubmVsc0xhc3Q6IGJvb2xlYW4sIGFkZEJpYXMgPSBmYWxzZSwgYXR0cmlidXRlczogQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMsIHR5cGU6IHN0cmluZyxcbiAgICAgaW5uZXJFbGVtZW50U2l6ZSA9IDQpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgZ2V0V1NuaXBwZXQgPSAoaW5uZXJFbGVtZW50U2l6ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaW5uZXJFbGVtZW50U2l6ZSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiAncmV0dXJuIHdbZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQsIHZlYzQ8aTMyPih1bmlmb3Jtcy53X3NoYXBlKSldOyc7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIGxldCBjb29yZDEgPSB2ZWM0PGkzMj4oY29vcmRYLCBjb29yZFksIGNvbCArIDEsIHJvd0lubmVyKTtcbiAgICAgICAgICAgIGxldCBjb29yZDIgPSB2ZWM0PGkzMj4oY29vcmRYLCBjb29yZFksIGNvbCArIDIsIHJvd0lubmVyKTtcbiAgICAgICAgICAgIGxldCBjb29yZDMgPSB2ZWM0PGkzMj4oY29vcmRYLCBjb29yZFksIGNvbCArIDMsIHJvd0lubmVyKTtcbiAgICAgICAgICAgIGxldCB2MCA9IHdbZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQsIHZlYzQ8aTMyPih1bmlmb3Jtcy53X3NoYXBlKSldO1xuICAgICAgICAgICAgbGV0IHYxID0gd1tnZXRJbmRleEZyb21Db29yZHM0RChjb29yZDEsIHZlYzQ8aTMyPih1bmlmb3Jtcy53X3NoYXBlKSldO1xuICAgICAgICAgICAgbGV0IHYyID0gd1tnZXRJbmRleEZyb21Db29yZHM0RChjb29yZDIsIHZlYzQ8aTMyPih1bmlmb3Jtcy53X3NoYXBlKSldO1xuICAgICAgICAgICAgbGV0IHYzID0gd1tnZXRJbmRleEZyb21Db29yZHM0RChjb29yZDMsIHZlYzQ8aTMyPih1bmlmb3Jtcy53X3NoYXBlKSldO1xuICAgICAgICAgICAgcmV0dXJuICR7dHlwZX0odjAsIHYxLCB2MiwgdjMpO1xuICAgICAgICAgICAgYDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbm5lckVsZW1lbnRTaXplICR7aW5uZXJFbGVtZW50U2l6ZX0gaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvb3JkQVNuaXBwZXQgPSBpc0NoYW5uZWxzTGFzdCA/IGBcbiAgICAgIGxldCBjb29yZCA9IHZlYzQ8aTMyPihiYXRjaCwgaVhSLCBpWEMsIHhDaCk7XG4gICAgICBgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcbiAgICAgIGxldCBjb29yZCA9IHZlYzQ8aTMyPihiYXRjaCwgeENoLCBpWFIsIGlYQyk7XG4gICAgICBgO1xuXG4gICAgICBjb25zdCBjb29yZFJlc1NuaXBwZXQgPSBpc0NoYW5uZWxzTGFzdCA/IGBcbiAgICBsZXQgY29vcmRzID0gdmVjNDxpMzI+KFxuICAgICAgYmF0Y2gsXG4gICAgICByb3cgLyBvdXRXaWR0aCxcbiAgICAgIHJvdyAlIG91dFdpZHRoLFxuICAgICAgY29sKTtcbiAgICBgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgIGxldCBjb29yZHMgPSB2ZWM0PGkzMj4oXG4gICAgICBiYXRjaCxcbiAgICAgIHJvdyxcbiAgICAgIGNvbCAvIG91dFdpZHRoLFxuICAgICAgY29sICUgb3V0V2lkdGgpO1xuICAgIGA7XG5cbiAgICAgIGNvbnN0IHhIZWlnaHQgPSBpc0NoYW5uZWxzTGFzdCA/ICdpMzIodW5pZm9ybXMueF9zaGFwZVsxXSknIDogJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzJdKSc7XG4gICAgICBjb25zdCB4V2lkdGggPSBpc0NoYW5uZWxzTGFzdCA/ICdpMzIodW5pZm9ybXMueF9zaGFwZVsyXSknIDogJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzNdKSc7XG4gICAgICBjb25zdCByb3cgPSBpc0NoYW5uZWxzTGFzdCA/ICdyb3cnIDogJ2NvbCc7XG4gICAgICBjb25zdCBjb2wgPSBpc0NoYW5uZWxzTGFzdCA/ICdjb2wnIDogJ3Jvdyc7XG5cbiAgICAgIGNvbnN0IHJlYWRBU25pcHBldCA9IGBcbiAgICAgIGxldCBpbkNoYW5uZWxzID0gJHtpc0NoYW5uZWxzTGFzdCA/ICdpMzIodW5pZm9ybXMueF9zaGFwZVszXSknIDogJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzFdKSd9O1xuICAgICAgbGV0IG91dFdpZHRoID0gJHtpc0NoYW5uZWxzTGFzdCA/ICdpMzIodW5pZm9ybXMucmVzdWx0X3NoYXBlWzJdKScgOiAnaTMyKHVuaWZvcm1zLnJlc3VsdF9zaGFwZVszXSknfTtcbiAgICAgIGxldCBvdXRSb3cgPSAke3Jvd30gLyBvdXRXaWR0aDtcbiAgICAgIGxldCBvdXRDb2wgPSAke3Jvd30gJSBvdXRXaWR0aDtcblxuICAgICAgbGV0IFdSb3cgPSAke2NvbH0gLyAodW5pZm9ybXMuZmlsdGVyX2RpbXNbMV0gKiBpbkNoYW5uZWxzKTtcbiAgICAgIGxldCBXQ29sID0gJHtjb2x9IC8gaW5DaGFubmVscyAlIHVuaWZvcm1zLmZpbHRlcl9kaW1zWzFdO1xuICAgICAgbGV0IHhSID0gZjMyKG91dFJvdyAtIHVuaWZvcm1zLnBhZHNbMF0gKyB1bmlmb3Jtcy5kaWxhdGlvbnNbMF0gKiBXUm93KSAvIGYzMih1bmlmb3Jtcy5zdHJpZGVzWzBdKTtcbiAgICAgIGxldCB4QyA9IGYzMihvdXRDb2wgLSB1bmlmb3Jtcy5wYWRzWzFdICsgdW5pZm9ybXMuZGlsYXRpb25zWzFdICogV0NvbCkgLyBmMzIodW5pZm9ybXMuc3RyaWRlc1sxXSk7XG4gICAgICBpZiAoeFIgPCAwLjAgfHwgeFIgPj0gZjMyKCR7eEhlaWdodH0pIHx8IGZyYWN0KHhSKSA+IDAuMCkge1xuICAgICAgICByZXR1cm4gJHt0eXBlfSgwLjApO1xuICAgICAgfVxuICAgICAgaWYgKHhDIDwgMC4wIHx8IHhDID49IGYzMigke3hXaWR0aH0pIHx8IGZyYWN0KHhDKSA+IDAuMCkge1xuICAgICAgICByZXR1cm4gJHt0eXBlfSgwLjApO1xuICAgICAgfVxuICAgICAgbGV0IGlYUiA9IGkzMih4Uik7XG4gICAgICBsZXQgaVhDID0gaTMyKHhDKTtcbiAgICAgIGxldCB4Q2ggPSAke2NvbH0gJSBpbkNoYW5uZWxzO1xuICAgICAgJHtjb29yZEFTbmlwcGV0fVxuICAgICAgcmV0dXJuIHhbZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQsIHZlYzQ8aTMyPih1bmlmb3Jtcy54X3NoYXBlKSkvJHtpbm5lckVsZW1lbnRTaXplfV07YDtcblxuICAgICAgY29uc3Qgc2FtcGxlQSA9IGlzQ2hhbm5lbHNMYXN0ID8gYFxuICAgICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplfTtcbiAgICAgIGlmIChyb3cgPCB1bmlmb3Jtcy5kaW1fYV9vdXRlciAmJiBjb2wgPCB1bmlmb3Jtcy5kaW1faW5uZXIpIHtcbiAgICAgICAgJHtyZWFkQVNuaXBwZXR9XG4gICAgICB9XG4gICAgICByZXR1cm4gJHt0eXBlfSgwLjApO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplfTtcbiAgICAgIGlmIChyb3cgPCB1bmlmb3Jtcy5kaW1faW5uZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2Jfb3V0ZXIpIHtcbiAgICAgICAgJHtyZWFkQVNuaXBwZXR9XG4gICAgICB9XG4gICAgICByZXR1cm4gJHt0eXBlfSgwLjApO2A7XG5cbiAgICAgIGNvbnN0IHNhbXBsZVcgPSBgXG4gICAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemV9O1xuICAgICAgbGV0IGluQ2hhbm5lbHMgPSAke2lzQ2hhbm5lbHNMYXN0ID8gJ2kzMih1bmlmb3Jtcy54X3NoYXBlWzNdKScgOiAnaTMyKHVuaWZvcm1zLnhfc2hhcGVbMV0pJ307XG4gICAgICBsZXQgY29vcmRYID0gdW5pZm9ybXMuZmlsdGVyX2RpbXNbMF0gLSAxIC0gcm93IC8gKHVuaWZvcm1zLmZpbHRlcl9kaW1zWzFdICogaW5DaGFubmVscyk7XG4gICAgICBsZXQgY29vcmRZID0gdW5pZm9ybXMuZmlsdGVyX2RpbXNbMV0gLSAxIC0gKHJvdyAvIGluQ2hhbm5lbHMpICUgdW5pZm9ybXMuZmlsdGVyX2RpbXNbMV07XG4gICAgICBpZiAoJHtcbiAgICAgICAgICBpc0NoYW5uZWxzTGFzdCA/ICdyb3cgPCB1bmlmb3Jtcy5kaW1faW5uZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2Jfb3V0ZXInIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdyb3cgPCB1bmlmb3Jtcy5kaW1faW5uZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2Ffb3V0ZXInfSAgJiYgY29vcmRYID49IDAgJiYgY29vcmRZID49IDApIHtcbiAgICAgICAgbGV0IHJvd0lubmVyID0gcm93ICUgaW5DaGFubmVscztcbiAgICAgICAgbGV0IGNvb3JkID0gdmVjNDxpMzI+KGNvb3JkWCwgY29vcmRZLCBjb2wsIHJvd0lubmVyKTtcbiAgICAgICAgJHtnZXRXU25pcHBldChpbm5lckVsZW1lbnRTaXplKX1cbiAgICAgIH1cbiAgICAgIHJldHVybiAke3R5cGV9KDAuMCk7XG4gICAgICBgO1xuXG4gICAgICBjb25zdCBhcHBseUFjdGl2YXRpb24gPSBnZXRBY3RpdmF0aW9uU25pcHBldChhdHRyaWJ1dGVzLCB0eXBlKTtcbiAgICAgIGNvbnN0IHVzZXJDb2RlID0gYFxuICBmbiBtbV9yZWFkQShiYXRjaDogaTMyLCByb3cgOiBpMzIsIGNvbEluIDogaTMyKSAtPiAke3R5cGV9IHtcbiAgICAke2lzQ2hhbm5lbHNMYXN0ID8gc2FtcGxlQSA6IHNhbXBsZVd9XG4gIH1cblxuICBmbiBtbV9yZWFkQihiYXRjaDogaTMyLCByb3cgOiBpMzIsIGNvbEluIDogaTMyKSAtPiAke3R5cGV9IHtcbiAgICAke2lzQ2hhbm5lbHNMYXN0ID8gc2FtcGxlVyA6IHNhbXBsZUF9XG4gIH1cblxuICBmbiBtbV93cml0ZShiYXRjaDogaTMyLCByb3cgOiBpMzIsIGNvbEluIDogaTMyLCB2YWx1ZUlucHV0IDogJHt0eXBlfSkge1xuICAgIGxldCBjb2wgPSBjb2xJbiAqICR7aW5uZXJFbGVtZW50U2l6ZX07XG4gICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9hX291dGVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9iX291dGVyKSB7XG4gICAgICB2YXIgdmFsdWUgPSB2YWx1ZUlucHV0O1xuICAgICAgbGV0IG91dFdpZHRoID0gJHtpc0NoYW5uZWxzTGFzdCA/ICdpMzIodW5pZm9ybXMucmVzdWx0X3NoYXBlWzJdKScgOiAnaTMyKHVuaWZvcm1zLnJlc3VsdF9zaGFwZVszXSknfTtcbiAgICAgICR7Y29vcmRSZXNTbmlwcGV0fVxuICAgICAgJHtiaWFzU25pcHBldChhZGRCaWFzKX1cbiAgICAgICR7YXBwbHlBY3RpdmF0aW9ufVxuICAgICAgcmVzdWx0W2dldEluZGV4RnJvbUNvb3JkczREKGNvb3JkcywgdmVjNDxpMzI+KHVuaWZvcm1zLnJlc3VsdF9zaGFwZSkpLyR7aW5uZXJFbGVtZW50U2l6ZX1dID0gdmFsdWU7XG4gICAgfVxuICB9YDtcbiAgICAgIHJldHVybiB1c2VyQ29kZTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ29udjJEVHJhbnNwb3NlTWF0TXVsUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgZGltQU91dGVyOiBudW1iZXIsIGRpbUJPdXRlcjogbnVtYmVyLCBkaW1Jbm5lcjogbnVtYmVyLCBoYXNCaWFzOiBib29sZWFuLFxuICAgICBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzOiBib29sZWFuKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICAgICAgY29uc3QgaW5DaGFubmVscyA9IGlzQ2hhbm5lbHNMYXN0ID8gaW5wdXRzWzBdLmRpbXNbM10gOiBpbnB1dHNbMF0uZGltc1sxXTtcbiAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IG91dHB1dFNoYXBlWzBdO1xuICAgICAgY29uc3Qgb3V0V2lkdGggPSBpc0NoYW5uZWxzTGFzdCA/IG91dHB1dFNoYXBlWzJdIDogb3V0cHV0U2hhcGVbM107XG4gICAgICBjb25zdCBvdXRIZWlnaHQgPSBpc0NoYW5uZWxzTGFzdCA/IG91dHB1dFNoYXBlWzFdIDogb3V0cHV0U2hhcGVbMl07XG4gICAgICBjb25zdCBvdXRDaGFubmVscyA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0cHV0U2hhcGVbM10gOiBvdXRwdXRTaGFwZVsxXTtcbiAgICAgIC8vIFRPRE86IGVuYWJsZSB2ZWM0IGZvciBOQ0hXXG4gICAgICBjb25zdCBpc1ZlYzQgPSBpc0NoYW5uZWxzTGFzdCAmJiAoaW5DaGFubmVscyAlIDQgPT09IDAgJiYgaW5DaGFubmVscyAlIDMpICYmIG91dENoYW5uZWxzICUgNCA9PT0gMDtcblxuICAgICAgLy8gVE9ETzogZmluZSB0dW5lIHNpemVcbiAgICAgIGNvbnN0IGRpc3BhdGNoWCA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0Q2hhbm5lbHMgOiBvdXRXaWR0aCAqIG91dEhlaWdodDtcbiAgICAgIGNvbnN0IGRpc3BhdGNoWSA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0V2lkdGggKiBvdXRIZWlnaHQgOiBvdXRDaGFubmVscztcbiAgICAgIGNvbnN0IHdvcmtHcm91cFNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFs4LCA4LCAxXTtcbiAgICAgIGNvbnN0IGVsZW1lbnRzUGVyVGhyZWFkID0gZGltQU91dGVyIDw9IDggPyBbNCwgMSwgMV0gOiBbNCwgNCwgMV07XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IFtcbiAgICAgICAgTWF0aC5jZWlsKGRpc3BhdGNoWCAvIHdvcmtHcm91cFNpemVbMF0gLyBlbGVtZW50c1BlclRocmVhZFswXSksXG4gICAgICAgIE1hdGguY2VpbChkaXNwYXRjaFkgLyB3b3JrR3JvdXBTaXplWzFdIC8gZWxlbWVudHNQZXJUaHJlYWRbMV0pLFxuICAgICAgICBNYXRoLmNlaWwoYmF0Y2hTaXplIC8gd29ya0dyb3VwU2l6ZVsyXSAvIGVsZW1lbnRzUGVyVGhyZWFkWzJdKVxuICAgICAgXTtcblxuICAgICAgTE9HX0RFQlVHKCd2ZXJib3NlJywgKCkgPT4gYFtjb252X2JhY2twcm9wX21tX3dlYmdwdV0gZGlzcGF0Y2ggPSAke2Rpc3BhdGNofWApO1xuXG4gICAgICBjb25zdCBpbm5lckVsZW1lbnRTaXplID0gaXNWZWM0ID8gNCA6IDE7XG4gICAgICBjb25zdCB0aWxlSW5uZXIgPSBNYXRoLm1heCh3b3JrR3JvdXBTaXplWzBdICogaW5uZXJFbGVtZW50U2l6ZSwgd29ya0dyb3VwU2l6ZVsxXSk7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gaXNWZWM0ID8gNCA6IDE7XG4gICAgICBjb25zdCBmaWx0ZXJEaW1zID1cbiAgICAgICAgICBbYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDEgOiAyXSwgYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXV07XG4gICAgICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJEaW1zID0gW1xuICAgICAgICBmaWx0ZXJEaW1zWzBdICsgKGF0dHJpYnV0ZXMuZGlsYXRpb25zWzBdIDw9IDEgPyAwIDogKGZpbHRlckRpbXNbMF0gLSAxKSAqIChhdHRyaWJ1dGVzLmRpbGF0aW9uc1swXSAtIDEpKSxcbiAgICAgICAgZmlsdGVyRGltc1sxXSArIChhdHRyaWJ1dGVzLmRpbGF0aW9uc1sxXSA8PSAxID8gMCA6IChmaWx0ZXJEaW1zWzFdIC0gMSkgKiAoYXR0cmlidXRlcy5kaWxhdGlvbnNbMV0gLSAxKSlcbiAgICAgIF07XG4gICAgICBjb25zdCBwYWRzID0gW1xuICAgICAgICBlZmZlY3RpdmVGaWx0ZXJEaW1zWzBdIC0gMSAtIE1hdGguZmxvb3IoKGF0dHJpYnV0ZXMucGFkc1swXSArIGF0dHJpYnV0ZXMucGFkc1syXSkgLyAyKSxcbiAgICAgICAgZWZmZWN0aXZlRmlsdGVyRGltc1sxXSAtIDEgLSBNYXRoLmZsb29yKChhdHRyaWJ1dGVzLnBhZHNbMV0gKyBhdHRyaWJ1dGVzLnBhZHNbM10pIC8gMilcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBkaW1BT3V0ZXJ9LCB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGRpbUJPdXRlcn0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogZGltSW5uZXJ9LCB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGF0dHJpYnV0ZXMuc3RyaWRlc30sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogYXR0cmlidXRlcy5kaWxhdGlvbnN9LCB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGZpbHRlckRpbXN9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IHBhZHN9XG4gICAgICBdO1xuICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zRGF0YShhdHRyaWJ1dGVzLCBwcm9ncmFtVW5pZm9ybXMpO1xuICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzBdLmRpbXMsIGlucHV0c1sxXS5kaW1zKSk7XG5cbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJywgJ3JhbmsnXTtcbiAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1syXS5kaW1zKSk7XG4gICAgICAgIGlucHV0RGVwZW5kZW5jaWVzLnB1c2goJ3JhbmsnKTtcbiAgICAgIH1cbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dHB1dFNoYXBlKSk7XG5cbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCB4ID0gaW5wdXRWYXJpYWJsZSgneCcsIGlucHV0c1swXS5kYXRhVHlwZSwgaW5wdXRzWzBdLmRpbXMubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgdyA9IGlucHV0VmFyaWFibGUoJ3cnLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zLmxlbmd0aCwgMSk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdyZXN1bHQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFyaWFibGVzID0gW3gsIHddO1xuXG4gICAgICAgIGxldCBkZWNsYXJlRnVuY3Rpb25zID0gJyc7XG4gICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgY29uc3QgYmlhcyA9IGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgaW5wdXRWYXJpYWJsZXMucHVzaChiaWFzKTtcbiAgICAgICAgICBkZWNsYXJlRnVuY3Rpb25zICs9IGBcbiAgICAgICAgICBmbiBnZXRCaWFzQnlPdXRwdXRDb29yZHMoY29vcmRzIDogdmVjNDxpMzI+KSAtPiAke2JpYXMudHlwZS52YWx1ZX0ge1xuICAgICAgICAgICAgcmV0dXJuIGJpYXNbY29vcmRzLiR7aXNDaGFubmVsc0xhc3QgPyAndycgOiAneSd9JHtpc1ZlYzQgPyAnLyA0JyA6ICcnfV07XG4gICAgICAgICAgfWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbXG4gICAgICAgICAge25hbWU6ICdkaW1fYV9vdXRlcicsIHR5cGU6ICdpMzInfSwge25hbWU6ICdkaW1fYl9vdXRlcicsIHR5cGU6ICdpMzInfSwge25hbWU6ICdkaW1faW5uZXInLCB0eXBlOiAnaTMyJ30sXG4gICAgICAgICAge25hbWU6ICdzdHJpZGVzJywgdHlwZTogJ2kzMicsIGxlbmd0aDogMn0sIHtuYW1lOiAnZGlsYXRpb25zJywgdHlwZTogJ2kzMicsIGxlbmd0aDogMn0sXG4gICAgICAgICAge25hbWU6ICdmaWx0ZXJfZGltcycsIHR5cGU6ICdpMzInLCBsZW5ndGg6IGZpbHRlckRpbXMubGVuZ3RofSxcbiAgICAgICAgICB7bmFtZTogJ3BhZHMnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiBwYWRzLmxlbmd0aH1cbiAgICAgICAgXTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGF0dHJpYnV0ZXMsIHVuaWZvcm1zKTtcbiAgICAgICAgY29uc3QgZWxlbVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlLCAxKTtcbiAgICAgICAgaWYgKGVsZW1UeXBlICE9PSAnZjE2JyAmJiBlbGVtVHlwZSAhPT0gJ2YzMicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGVsZW1UeXBlICR7ZWxlbVR5cGV9IGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgJHt1dGlsRnVuY3Rpb25zKCd1bmlmb3Jtcy5yZXN1bHRfc3RyaWRlcycpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFyaWFibGVzLCBvdXRwdXQpfTtcbiAgICAgICAgJHtkZWNsYXJlRnVuY3Rpb25zfVxuICAgICAgICAke2NvbnYyZFRyYW5zcG9zZUNvbW1vblNuaXBwZXQoaXNDaGFubmVsc0xhc3QsIGhhc0JpYXMsIGF0dHJpYnV0ZXMsIHgudHlwZS52YWx1ZSwgaW5uZXJFbGVtZW50U2l6ZSl9XG4gICAgICAgICR7XG4gICAgICAgICAgICBpc1ZlYzQgPyBtYWtlTWF0TXVsUGFja2VkVmVjNFNvdXJjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1BlclRocmVhZCwgd29ya0dyb3VwU2l6ZSwgZWxlbVR5cGUsIHVuZGVmaW5lZCwgIWlzQ2hhbm5lbHNMYXN0LCB0aWxlSW5uZXIpIDpcbiAgICAgICAgICAgICAgICAgICAgIG1ha2VNYXRNdWxQYWNrZWRTb3VyY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNQZXJUaHJlYWQsIHdvcmtHcm91cFNpemUsIGVsZW1UeXBlLCB1bmRlZmluZWQsICFpc0NoYW5uZWxzTGFzdCwgdGlsZUlubmVyLCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsIHNlcXVlbnRpYWxBY2Nlc3NCeVRocmVhZHMpfWA7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnQ29udjJEVHJhbnNwb3NlTWF0TXVsJyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6XG4gICAgICAgICAgICB7aGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX07JHtlbGVtZW50c1BlclRocmVhZH07JHt3b3JrR3JvdXBTaXplfTske2lzVmVjNH1gLCBpbnB1dERlcGVuZGVuY2llc30sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBkaXNwYXRjaFswXSwgeTogZGlzcGF0Y2hbMV0sIHo6IGRpc3BhdGNoWzJdfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgfTtcbiAgICB9O1xuIiwgIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gc2FtcGxlZCBmcm9tIFtAdGVuc29yZmxvdy90ZmpzXSB0ZmpzLWJhY2tlbmQtd2ViZ3B1L3NyYy9jb252X2JhY2twcm9wX3dlYmdwdS50c1xuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge0xPR19ERUJVR30gZnJvbSAnLi4vLi4vLi4vbG9nJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtQcm9ncmFtSW5mbywgUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3ksIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHtDb252VHJhbnNwb3NlQXR0cmlidXRlc30gZnJvbSAnLi4vY29udi10cmFuc3Bvc2UnO1xuXG5jb25zdCBjcmVhdGVDb252VHJhbnNwb3NlMkRPcFByb2dyYW1TaGFkZXJTb3VyY2UgPVxuICAgIChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlciwgaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIG91dHB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgaGFzQmlhczogYm9vbGVhbixcbiAgICAgaXMxRGltZW5zaW9uRGlzcGF0Y2g6IGJvb2xlYW4sIGlzVmVjNCA9IGZhbHNlLCBkYXRhVHlwZTogc3RyaW5nLCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUsXG4gICAgIGlzQ2hhbm5lbHNMYXN0ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3Qgcm93RGltID0gaXNDaGFubmVsc0xhc3QgPyAxIDogMjtcbiAgICAgIGNvbnN0IGNvbERpbSA9IGlzQ2hhbm5lbHNMYXN0ID8gMiA6IDM7XG4gICAgICBjb25zdCBjaGFubmVsRGltID0gaXNDaGFubmVsc0xhc3QgPyAzIDogMTtcbiAgICAgIGNvbnN0IHdvcmtQZXJUaHJlYWQgPSBpc1ZlYzQgPyAyIDogMTtcblxuICAgICAgbGV0IGRlY2xhcmVGdW5jdGlvbnMgPSBgXG4gIGZuIHNldE91dHB1dEF0SW5kZXgoZmxhdEluZGV4IDogdTMyLCB2YWx1ZSA6ICR7aXNWZWM0ID8gYHZlYzQ8JHtkYXRhVHlwZX0+YCA6IGRhdGFUeXBlfSkge1xuICAgIHJlc3VsdFtmbGF0SW5kZXhdID0gJHtpc1ZlYzQgPyBgdmVjNDwke2RhdGFUeXBlfT5gIDogZGF0YVR5cGV9KHZhbHVlKTtcbiAgfWA7XG4gICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICBkZWNsYXJlRnVuY3Rpb25zICs9IGBcbiAgICBmbiBnZXRCaWFzQnlPdXRwdXRDb29yZHMoY29vcmRzIDogdmVjNDx1MzI+KSAtPiAke2lzVmVjNCA/IGB2ZWM0PCR7ZGF0YVR5cGV9PmAgOiBkYXRhVHlwZX0ge1xuICAgICAgcmV0dXJuIGJpYXNbY29vcmRzLiR7aXNDaGFubmVsc0xhc3QgPyAndycgOiAneSd9JHtpc1ZlYzQgPyAnLyA0JyA6ICcnfV07XG4gICAgfWA7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gaXNWZWM0ID8gNCA6IDE7XG4gICAgICBjb25zdCB3ID0gaW5wdXRWYXJpYWJsZSgnVycsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgIGNvbnN0IGR5ID0gaW5wdXRWYXJpYWJsZSgnRHknLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICBjb25zdCBpbnB1dFZhcmlhYmxlcyA9IFtkeSwgd107XG4gICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICBpbnB1dFZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIFtvdXRwdXRTaGFwZVtjaGFubmVsRGltXV0ubGVuZ3RoLCBjb21wb25lbnRzKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgncmVzdWx0JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuXG4gICAgICBjb25zdCBjb2RlU25pcHBldDQgPSBge1xuICAgICAgICBsZXQgYmF0Y2g6IHUzMiA9ICR7aXMxRGltZW5zaW9uRGlzcGF0Y2ggPyAnZ2xvYmFsX2lkLnonIDogJ3dvcmtncm91cF9pZC56J30gLyB1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbMV07XG4gICAgICAgIGxldCByID0gJHtpczFEaW1lbnNpb25EaXNwYXRjaCA/ICdnbG9iYWxfaWQueicgOiAnd29ya2dyb3VwX2lkLnonfSAlIHVuaWZvcm1zLnJlc3VsdF9zaGFwZVsxXTtcbiAgICAgICAgbGV0IGMgPSAke2lzMURpbWVuc2lvbkRpc3BhdGNoID8gJ2dsb2JhbF9pZC55JyA6ICd3b3JrZ3JvdXBfaWQueSd9ICogJHt3b3JrUGVyVGhyZWFkfTtcbiAgICAgICAgbGV0IGQxOiB1MzIgPSAke2lzMURpbWVuc2lvbkRpc3BhdGNoID8gJ2dsb2JhbF9pZC54JyA6ICd3b3JrZ3JvdXBfaWQueCd9ICogNDtcblxuICAgICAgICBsZXQgZHlDb3JuZXIgPSB2ZWMyPGkzMj4oaTMyKHIpLCBpMzIoYykpIC0gdmVjMjxpMzI+KHVuaWZvcm1zLnBhZHMpO1xuXG4gICAgICAgIC8vIENvbnZvbHZlIGR5KD8sID8sIGQyKSB3aXRoIHcoOiwgOiwgZDEsIGQyKSB0byBjb21wdXRlIGR4KHhSLCB4QywgZDEpLlxuICAgICAgICAvLyA/ID0gdG8gYmUgZGV0ZXJtaW5lZC4gOiA9IGFjcm9zcyBhbGwgdmFsdWVzIGluIHRoYXQgYXhpcy5cbiAgICAgICAgdmFyIGRvdFByb2Q6IGFycmF5PHZlYzQ8JHtkYXRhVHlwZX0+LCAke3dvcmtQZXJUaHJlYWR9PjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAke3dvcmtQZXJUaHJlYWR9OyBpKyspIHtcbiAgICAgICAgICBkb3RQcm9kW2ldID0gdmVjNDwke2RhdGFUeXBlfT4oMC4wKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciB3UjogdTMyID0gMDsgd1IgPCB1bmlmb3Jtcy5maWx0ZXJfZGltc1swXTsgd1IgPSB3UiArIDEpIHtcbiAgICAgICAgICB2YXIgZHlSID0gKCR7ZGF0YVR5cGV9KGR5Q29ybmVyLngpICsgJHtkYXRhVHlwZX0od1IpKSAvICR7ZGF0YVR5cGV9KHVuaWZvcm1zLnN0cmlkZXMueCk7XG4gICAgICAgICAgbGV0IHdSUGVybSA9IHVuaWZvcm1zLmZpbHRlcl9kaW1zWzBdIC0gMSAtIHdSO1xuICAgICAgICAgIGlmIChkeVIgPCAwLjAgfHwgZHlSID49ICR7ZGF0YVR5cGV9KHVuaWZvcm1zLkR5X3NoYXBlWzFdKSB8fFxuICAgICAgICAgICAgICBmcmFjdChkeVIpID4gMC4wIHx8IHdSUGVybSA8IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgaWR5UjogdTMyID0gdTMyKGR5Uik7XG5cbiAgICAgICAgICBmb3IgKHZhciB3QzogdTMyID0gMDsgd0MgPCB1bmlmb3Jtcy5maWx0ZXJfZGltc1sxXTsgd0MgPSB3QyArIDEpIHtcbiAgICAgICAgICAgIGxldCBkeUMgPSAoJHtkYXRhVHlwZX0oZHlDb3JuZXIueSkgKyAke2RhdGFUeXBlfSh3QykpIC8gJHtkYXRhVHlwZX0odW5pZm9ybXMuc3RyaWRlcy55KTtcbiAgICAgICAgICAgIGxldCBkeUMyID0gKCR7ZGF0YVR5cGV9KGR5Q29ybmVyLnkpICsgMS4wICsgJHtkYXRhVHlwZX0od0MpKSAvICR7ZGF0YVR5cGV9KHVuaWZvcm1zLnN0cmlkZXMueSk7XG4gICAgICAgICAgICBsZXQgd0NQZXJtID0gdW5pZm9ybXMuZmlsdGVyX2RpbXNbMV0gLSAxIC0gd0M7XG4gICAgICAgICAgICBpZiAod0NQZXJtIDwgMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBiRHlDVmFsID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBiRHlDVmFsMiA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZHlDIDwgMC4wIHx8IGR5QyA+PSAke2RhdGFUeXBlfSh1bmlmb3Jtcy5EeV9zaGFwZVsyXSkgfHxcbiAgICAgICAgICAgICAgICBmcmFjdChkeUMpID4gMC4wKSB7XG4gICAgICAgICAgICAgIGJEeUNWYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkeUMyIDwgMC4wIHx8IGR5QzIgPj0gJHtkYXRhVHlwZX0odW5pZm9ybXMuRHlfc2hhcGVbMl0pIHx8XG4gICAgICAgICAgICAgICAgZnJhY3QoZHlDMikgPiAwLjApIHtcbiAgICAgICAgICAgICAgYkR5Q1ZhbDIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlkeUM6IHUzMiA9IHUzMihkeUMpO1xuICAgICAgICAgICAgbGV0IGlkeUMyOiB1MzIgPSB1MzIoZHlDMik7XG4gICAgICAgICAgICBpZiAoYkR5Q1ZhbCAmJiBiRHlDVmFsMikge1xuICAgICAgICAgICAgICBsZXQgZDJMZW5ndGggPSB1bmlmb3Jtcy5EeV9zaGFwZVszXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgZDIgOnUzMiA9IDA7IGQyIDwgZDJMZW5ndGg7IGQyID0gZDIgKyA0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHdWYWx1ZTAgPSAke3cuZ2V0KCd1MzIod1JQZXJtKScsICd1MzIod0NQZXJtKScsICdkMScsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMSA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMScsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMiA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMicsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMyA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMycsICdkMicpfTtcblxuICAgICAgICAgICAgICAgIHZhciB4VmFsdWUgPSAke2R5LmdldCgnYmF0Y2gnLCAnaWR5UicsICdpZHlDJywgJ2QyJyl9O1xuICAgICAgICAgICAgICAgIGxldCB0bXB2YWwgPSB2ZWM0PCR7ZGF0YVR5cGV9Pihkb3QoeFZhbHVlLCB3VmFsdWUwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHhWYWx1ZSwgd1ZhbHVlMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QoeFZhbHVlLCB3VmFsdWUzKSk7XG4gICAgICAgICAgICAgICAgZG90UHJvZFswXSA9IGRvdFByb2RbMF0gKyB0bXB2YWw7XG5cbiAgICAgICAgICAgICAgICB4VmFsdWUgPSAgJHtkeS5nZXQoJ2JhdGNoJywgJ2lkeVInLCAnaWR5QzInLCAnZDInKX07XG5cbiAgICAgICAgICAgICAgICBkb3RQcm9kWzFdID0gZG90UHJvZFsxXSArIHZlYzQ8JHtkYXRhVHlwZX0+KGRvdCh4VmFsdWUsIHdWYWx1ZTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTMpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChiRHlDVmFsKSB7XG4gICAgICAgICAgICAgIGxldCBkMkxlbmd0aCA9IHVuaWZvcm1zLkR5X3NoYXBlWyR7Y2hhbm5lbERpbX1dO1xuICAgICAgICAgICAgICBmb3IgKHZhciBkMjogdTMyID0gMDsgZDIgPCBkMkxlbmd0aDsgZDIgPSBkMiArIDQpIHtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMCA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxJywgJ2QyJyl9O1xuICAgICAgICAgICAgICAgIGxldCB3VmFsdWUxID0gJHt3LmdldCgndTMyKHdSUGVybSknLCAndTMyKHdDUGVybSknLCAnZDEgKyAxJywgJ2QyJyl9O1xuICAgICAgICAgICAgICAgIGxldCB3VmFsdWUyID0gJHt3LmdldCgndTMyKHdSUGVybSknLCAndTMyKHdDUGVybSknLCAnZDEgKyAyJywgJ2QyJyl9O1xuICAgICAgICAgICAgICAgIGxldCB3VmFsdWUzID0gJHt3LmdldCgndTMyKHdSUGVybSknLCAndTMyKHdDUGVybSknLCAnZDEgKyAzJywgJ2QyJyl9O1xuXG4gICAgICAgICAgICAgICAgdmFyIHhWYWx1ZSA9ICR7ZHkuZ2V0KCdiYXRjaCcsICdpZHlSJywgJ2lkeUMnLCAnZDInKX07XG4gICAgICAgICAgICAgICAgbGV0IHRtcHZhbCA9IHZlYzQ8JHtkYXRhVHlwZX0+KGRvdCh4VmFsdWUsIHdWYWx1ZTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QoeFZhbHVlLCB3VmFsdWUxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHhWYWx1ZSwgd1ZhbHVlMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTMpKTtcbiAgICAgICAgICAgICAgICBkb3RQcm9kWzBdID0gZG90UHJvZFswXSArIHRtcHZhbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChiRHlDVmFsMikge1xuICAgICAgICAgICAgICBsZXQgZDJMZW5ndGggPSB1bmlmb3Jtcy5EeV9zaGFwZVszXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgZDI6IHUzMiA9IDA7IGQyIDwgZDJMZW5ndGg7IGQyID0gZDIgKyA0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHdWYWx1ZTAgPSAke3cuZ2V0KCd1MzIod1JQZXJtKScsICd1MzIod0NQZXJtKScsICdkMScsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMSA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMScsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMiA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMicsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMyA9ICR7dy5nZXQoJ3UzMih3UlBlcm0pJywgJ3UzMih3Q1Blcm0pJywgJ2QxICsgMycsICdkMicpfTtcblxuICAgICAgICAgICAgICAgIHZhciB4VmFsdWUgPSAke2R5LmdldCgnYmF0Y2gnLCAnaWR5UicsICdpZHlDMicsICdkMicpfTtcbiAgICAgICAgICAgICAgICBsZXQgdG1wdmFsID0gdmVjNDwke2RhdGFUeXBlfT4oZG90KHhWYWx1ZSwgd1ZhbHVlMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QoeFZhbHVlLCB3VmFsdWUyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHhWYWx1ZSwgd1ZhbHVlMykpO1xuICAgICAgICAgICAgICAgIGRvdFByb2RbMV0gPSBkb3RQcm9kWzFdICsgdG1wdmFsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaTogdTMyID0gMDsgaSA8ICR7d29ya1BlclRocmVhZH07IGkgPSBpICsgMSkge1xuICAgICAgICAgIGxldCB2YWx1ZSA9IGRvdFByb2RbaV0gKyAke2hhc0JpYXMgPyAnYmlhc1tjK2ldJyA6IGB2ZWM0PCR7ZGF0YVR5cGV9PigwLjApYH07XG4gICAgICAgICAgJHtvdXRwdXQuc2V0KCdiYXRjaCcsICdyJywgJ2MgKyBpJywgJ2QxJywgJ3ZhbHVlJyl9O1xuICAgICAgICB9XG4gICAgICB9YDtcbiAgICAgIGNvbnN0IGNvZGVTbmlwcGV0ID0gYFxuICAgICAgICAgIGxldCBvdXRwdXRJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuICAgICAgICAgIGxldCBiYXRjaCA9ICR7b3V0cHV0LmluZGljZXNHZXQoJ291dHB1dEluZGljZXMnLCAwKX07XG4gICAgICAgICAgbGV0IGQxID0gJHtvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0SW5kaWNlcycsIGNoYW5uZWxEaW0pfTtcbiAgICAgICAgICBsZXQgciA9ICR7b3V0cHV0LmluZGljZXNHZXQoJ291dHB1dEluZGljZXMnLCByb3dEaW0pfTtcbiAgICAgICAgICBsZXQgYyA9ICR7b3V0cHV0LmluZGljZXNHZXQoJ291dHB1dEluZGljZXMnLCBjb2xEaW0pfTtcbiAgICAgICAgICBsZXQgZHlDb3JuZXIgPSB2ZWMyPGkzMj4oaTMyKHIpLCBpMzIoYykpIC0gdW5pZm9ybXMucGFkcztcbiAgICAgICAgICBsZXQgZHlSQ29ybmVyID0gZHlDb3JuZXIueDtcbiAgICAgICAgICBsZXQgZHlDQ29ybmVyID0gZHlDb3JuZXIueTtcbiAgICAgICAgICBsZXQgZ3JvdXBJZCA9IGQxIC8gdW5pZm9ybXMub3V0cHV0X2NoYW5uZWxzX3Blcl9ncm91cDtcbiAgICAgICAgICBsZXQgd091dENoYW5uZWwgPSBkMSAtIGdyb3VwSWQgKiB1bmlmb3Jtcy5vdXRwdXRfY2hhbm5lbHNfcGVyX2dyb3VwO1xuICAgICAgICAgIC8vIENvbnZvbHZlIGR5KD8sID8sIGQyKSB3aXRoIHcoOiwgOiwgZDEsIGQyKSB0byBjb21wdXRlIGR4KHhSLCB4QywgZDEpLlxuICAgICAgICAgIC8vID8gPSB0byBiZSBkZXRlcm1pbmVkLiA6ID0gYWNyb3NzIGFsbCB2YWx1ZXMgaW4gdGhhdCBheGlzLlxuICAgICAgICAgIHZhciBkb3RQcm9kID0gJHtkYXRhVHlwZX0oMC4wKTtcbiAgICAgICAgICBmb3IgKHZhciB3UjogdTMyID0gMDsgd1IgPCB1bmlmb3Jtcy5lZmZlY3RpdmVfZmlsdGVyX2RpbXMueDsgd1IgPSB3UiArIDEpIHtcbiAgICAgICAgICAgIGlmICh3UiAlIHVuaWZvcm1zLmRpbGF0aW9ucy54ICE9IDApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZHlSID0gKCR7ZGF0YVR5cGV9KGR5UkNvcm5lcikgKyAke2RhdGFUeXBlfSh3UikpIC8gJHtkYXRhVHlwZX0odW5pZm9ybXMuc3RyaWRlc1swXSk7XG4gICAgICAgICAgICBsZXQgd1JQZXJtID0gdW5pZm9ybXMuZmlsdGVyX2RpbXMueCAtIDEgLSB3UiAvIHVuaWZvcm1zLmRpbGF0aW9ucy54O1xuICAgICAgICAgICAgaWYgKGR5UiA8IDAuMCB8fCBkeVIgPj0gJHtkYXRhVHlwZX0odW5pZm9ybXMuRHlfc2hhcGVbJHtyb3dEaW19XSkgfHwgZnJhY3QoZHlSKSA+IDAuMCB8fFxuICAgICAgICAgICAgICAgIHdSUGVybSA8IDApIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaWR5UjogdTMyID0gdTMyKGR5Uik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIHdDOiB1MzIgPSAwOyB3QyA8IHVuaWZvcm1zLmVmZmVjdGl2ZV9maWx0ZXJfZGltcy55OyB3QyA9IHdDICsgMSkge1xuICAgICAgICAgICAgICBpZiAod0MgJSB1bmlmb3Jtcy5kaWxhdGlvbnMueSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGV0IGR5QyA9ICgke2RhdGFUeXBlfShkeUNDb3JuZXIpICsgJHtkYXRhVHlwZX0od0MpKSAvICR7ZGF0YVR5cGV9KHVuaWZvcm1zLnN0cmlkZXMueSk7XG4gICAgICAgICAgICAgIGxldCB3Q1Blcm0gPSB1bmlmb3Jtcy5maWx0ZXJfZGltcy55IC0gMSAtIHdDIC8gdW5pZm9ybXMuZGlsYXRpb25zLnk7XG4gICAgICAgICAgICAgIGlmIChkeUMgPCAwLjAgfHwgZHlDID49ICR7ZGF0YVR5cGV9KHVuaWZvcm1zLkR5X3NoYXBlWyR7Y29sRGltfV0pIHx8XG4gICAgICAgICAgICAgICAgICBmcmFjdChkeUMpID4gMC4wIHx8IHdDUGVybSA8IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgaWR5QzogdTMyID0gdTMyKGR5Qyk7XG4gICAgICAgICAgICAgIHZhciBpbnB1dENoYW5uZWwgPSBncm91cElkICogdW5pZm9ybXMuaW5wdXRfY2hhbm5lbHNfcGVyX2dyb3VwO1xuICAgICAgICAgICAgICBmb3IgKHZhciBkMjogdTMyID0gMDsgZDIgPCB1bmlmb3Jtcy5pbnB1dF9jaGFubmVsc19wZXJfZ3JvdXA7IGQyID0gZDIgKyAxKSB7XG4gICAgICAgICAgICAgICAgbGV0IHhWYWx1ZSA9ICR7XG4gICAgICAgICAgaXNDaGFubmVsc0xhc3QgPyBkeS5nZXQoJ2JhdGNoJywgJ2lkeVInLCAnaWR5QycsICdpbnB1dENoYW5uZWwnKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkeS5nZXQoJ2JhdGNoJywgJ2lucHV0Q2hhbm5lbCcsICdpZHlSJywgJ2lkeUMnKX07XG4gICAgICAgICAgICAgICAgbGV0IHdWYWx1ZSA9ICR7dy5nZXQoJ2lucHV0Q2hhbm5lbCcsICd3T3V0Q2hhbm5lbCcsICd1MzIod1JQZXJtKScsICd1MzIod0NQZXJtKScpfTtcbiAgICAgICAgICAgICAgICBkb3RQcm9kID0gZG90UHJvZCArIHhWYWx1ZSAqIHdWYWx1ZTtcbiAgICAgICAgICAgICAgICBpbnB1dENoYW5uZWwgPSBpbnB1dENoYW5uZWwgKyAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB2YWx1ZSA9IGRvdFByb2QgKyAke2hhc0JpYXMgPyAnYmlhc1tkMV0nIDogYCR7ZGF0YVR5cGV9KDAuMClgfTtcbiAgICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsICd2YWx1ZScpfTtcbiAgICAgICAgYDtcblxuICAgICAgcmV0dXJuIGBcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyguLi5pbnB1dFZhcmlhYmxlcywgb3V0cHV0KX1cbiAgJHtkZWNsYXJlRnVuY3Rpb25zfVxuXG4gICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0X3NpemUnKX07XG4gICR7aXNWZWM0ID8gY29kZVNuaXBwZXQ0IDogY29kZVNuaXBwZXR9fWA7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnZUcmFuc3Bvc2UyRFByb2dyYW1JbmZvID1cbiAgICAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IENvbnZUcmFuc3Bvc2VBdHRyaWJ1dGVzLFxuICAgICBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbj86IChzaGFwZTogcmVhZG9ubHkgbnVtYmVyW10pID0+IG51bWJlcltdKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPiAyO1xuICAgICAgLy8gY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBhdHRyaWJ1dGVzLm91dHB1dFNoYXBlO1xuICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcblxuICAgICAgLy8gY29uc3QgaW5DaGFubmVscyA9IGlucHV0c1swXS5kaW1zW2lzQ2hhbm5lbHNMYXN0ID8gMyA6IDFdO1xuICAgICAgLy8gVE9ETyBFbmFibGUgaXNWZWM0IGZvciBwZXJmb3JtYW5jZVxuICAgICAgLy8gRGlzYWJsZWQgZHVlIHRvIHdlaWdodCBtYXRyaXggbGF5b3V0IGlzc3VlXG4gICAgICAvLyBjb25zdCBpc1ZlYzQgPSBhdHRyaWJ1dGVzLmdyb3VwID09PSAxICYmIGlzQ2hhbm5lbHNMYXN0ICYmIGluQ2hhbm5lbHMgJSA0ID09PSAwICYmIG91dENoYW5uZWxzICUgNCA9PT0gMDtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gW1xuICAgICAgICBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0KSxcbiAgICAgICAgMSxcbiAgICAgICAgMSxcbiAgICAgIF07XG4gICAgICBMT0dfREVCVUcoJ3ZlcmJvc2UnLCAoKSA9PiBgW2NvbnYyZF9iYWNrcHJvcF93ZWJncHVdIGRpc3BhdGNoID0gJHtkaXNwYXRjaH1gKTtcblxuICAgICAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICAgICAgY29uc3QgaW5wdXREZXBlbmRlbmNpZXM6IFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5W10gPSBbJ3JhbmsnLCAncmFuayddO1xuICAgICAgY29uc3Qgc3RyaWRlcyA9IFthdHRyaWJ1dGVzLnN0cmlkZXNbMF0sIGF0dHJpYnV0ZXMuc3RyaWRlc1sxXV07XG4gICAgICBjb25zdCBmaWx0ZXJEaW1zID1cbiAgICAgICAgICBbYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDEgOiAyXSwgYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXV07XG4gICAgICBjb25zdCBkaWxhdGlvbnMgPSBbYXR0cmlidXRlcy5kaWxhdGlvbnNbMF0sIGF0dHJpYnV0ZXMuZGlsYXRpb25zWzFdXTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlckRpbXMgPSBbXG4gICAgICAgIGZpbHRlckRpbXNbMF0gK1xuICAgICAgICAgICAgKGF0dHJpYnV0ZXMuZGlsYXRpb25zWzBdIDw9IDEgP1xuICAgICAgICAgICAgICAgICAwIDpcbiAgICAgICAgICAgICAgICAgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGVbaXNDaGFubmVsc0xhc3QgPyAxIDogMl0gLSAxKSAqIChhdHRyaWJ1dGVzLmRpbGF0aW9uc1swXSAtIDEpKSxcbiAgICAgICAgZmlsdGVyRGltc1sxXSArXG4gICAgICAgICAgICAoYXR0cmlidXRlcy5kaWxhdGlvbnNbMV0gPD0gMSA/XG4gICAgICAgICAgICAgICAgIDAgOlxuICAgICAgICAgICAgICAgICAoYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXSAtIDEpICogKGF0dHJpYnV0ZXMuZGlsYXRpb25zWzFdIC0gMSkpXG4gICAgICBdO1xuICAgICAgY29uc3QgcGFkcyA9IFtcbiAgICAgICAgZWZmZWN0aXZlRmlsdGVyRGltc1swXSAtIDEgLSBNYXRoLmZsb29yKChhdHRyaWJ1dGVzLnBhZHNbMF0gKyBhdHRyaWJ1dGVzLnBhZHNbMl0pIC8gMiksXG4gICAgICAgIGVmZmVjdGl2ZUZpbHRlckRpbXNbMV0gLSAxIC0gTWF0aC5mbG9vcihhdHRyaWJ1dGVzLnBhZHNbMV0gKyBhdHRyaWJ1dGVzLnBhZHNbM10pIC8gMlxuICAgICAgXTtcblxuICAgICAgY29uc3QgaXNWZWM0ID0gZmFsc2U7XG4gICAgICBjb25zdCBncm91cCA9IGF0dHJpYnV0ZXMuZ3JvdXA7XG4gICAgICBjb25zdCB3U2hhcGUgPSBpbnB1dHNbMV0uZGltcztcbiAgICAgIGNvbnN0IGlucHV0Q2hhbm5lbHNQZXJHcm91cCA9IHdTaGFwZVswXSAvIGdyb3VwO1xuICAgICAgY29uc3Qgb3V0cHV0Q2hhbm5lbHNQZXJHcm91cCA9IHdTaGFwZVsxXTtcblxuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBvdXRwdXRTaXplfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogc3RyaWRlc30sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGZpbHRlckRpbXN9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBkaWxhdGlvbnN9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBlZmZlY3RpdmVGaWx0ZXJEaW1zfSwge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBwYWRzfSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogaW5wdXRDaGFubmVsc1Blckdyb3VwfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0Q2hhbm5lbHNQZXJHcm91cH0sXG4gICAgICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBpbnB1dHNbMV0uZGltcylcbiAgICAgIF07XG4gICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMl0uZGltcykpO1xuICAgICAgICBpbnB1dERlcGVuZGVuY2llcy5wdXNoKCdyYW5rJyk7XG4gICAgICB9XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZSkpO1xuXG4gICAgICBjb25zdCBpczFEaW1lbnNpb25EaXNwYXRjaCA9IGRpc3BhdGNoWzFdID09PSAxICYmIGRpc3BhdGNoWzJdID09PSAxO1xuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgICAgICB7bmFtZTogJ291dHB1dF9zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ3N0cmlkZXMnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBzdHJpZGVzLmxlbmd0aH0sXG4gICAgICAgICAge25hbWU6ICdmaWx0ZXJfZGltcycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGZpbHRlckRpbXMubGVuZ3RofSxcbiAgICAgICAgICB7bmFtZTogJ2RpbGF0aW9ucycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGZpbHRlckRpbXMubGVuZ3RofSxcbiAgICAgICAgICB7bmFtZTogJ2VmZmVjdGl2ZV9maWx0ZXJfZGltcycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGVmZmVjdGl2ZUZpbHRlckRpbXMubGVuZ3RofSxcbiAgICAgICAgICB7bmFtZTogJ3BhZHMnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiBwYWRzLmxlbmd0aH0sIHtuYW1lOiAnaW5wdXRfY2hhbm5lbHNfcGVyX2dyb3VwJywgdHlwZTogJ3UzMid9LFxuICAgICAgICAgIHtuYW1lOiAnb3V0cHV0X2NoYW5uZWxzX3Blcl9ncm91cCcsIHR5cGU6ICd1MzInfVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZShpbnB1dHNbMF0uZGF0YVR5cGUpO1xuICAgICAgICByZXR1cm4gYCR7XG4gICAgICAgICAgICBjcmVhdGVDb252VHJhbnNwb3NlMkRPcFByb2dyYW1TaGFkZXJTb3VyY2UoXG4gICAgICAgICAgICAgICAgc2hhZGVySGVscGVyLCBpbnB1dHMsIG91dHB1dFNoYXBlLCBoYXNCaWFzLCBpczFEaW1lbnNpb25EaXNwYXRjaCwgaXNWZWM0LCBkYXRhVHlwZSwgdW5pZm9ybXMsXG4gICAgICAgICAgICAgICAgaXNDaGFubmVsc0xhc3QpfWA7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0NvbnZUcmFuc3Bvc2UyRCcsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX07YCwgaW5wdXREZXBlbmRlbmNpZXN9LFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBkaXNwYXRjaFswXSwgeTogZGlzcGF0Y2hbMV0sIHo6IGRpc3BhdGNoWzJdfSxcbiAgICAgICAgICBvdXRwdXRzOiBbe1xuICAgICAgICAgICAgZGltczogc3F1ZWV6ZU91dHB1dFNoYXBlRnVuY3Rpb24gPyBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbihvdXRwdXRTaGFwZSkgOiBvdXRwdXRTaGFwZSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGVcbiAgICAgICAgICB9XSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgfTtcbiAgICB9O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHR9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVDb252MkRUcmFuc3Bvc2VNYXRNdWxQcm9ncmFtSW5mb30gZnJvbSAnLi8zcmQtcGFydHkvY29udl9iYWNrcHJvcF9tbV93ZWJncHUnO1xuaW1wb3J0IHtjcmVhdGVDb252VHJhbnNwb3NlMkRQcm9ncmFtSW5mb30gZnJvbSAnLi8zcmQtcGFydHkvY29udl9iYWNrcHJvcF93ZWJncHUnO1xuaW1wb3J0IHtDb252QXR0cmlidXRlc30gZnJvbSAnLi9jb252JztcbmltcG9ydCB7cGFyc2VJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzfSBmcm9tICcuL2Z1c2UtdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVUcmFuc3Bvc2VQcm9ncmFtSW5mb30gZnJvbSAnLi90cmFuc3Bvc2UnO1xuXG5jb25zdCBjb21wdXRlVG90YWxQYWQgPVxuICAgIChpbkRpbTogbnVtYmVyLCBzdHJpZGU6IG51bWJlciwgYWRqOiBudW1iZXIsIGtlcm5lbDogbnVtYmVyLCBkaWxhdGlvbjogbnVtYmVyLCBvdXRTaXplOiBudW1iZXIpID0+XG4gICAgICAgIChpbkRpbSAtIDEpICogc3RyaWRlICsgYWRqICsgKGtlcm5lbCAtIDEpICogZGlsYXRpb24gKyAxIC0gb3V0U2l6ZTtcblxuY29uc3QgZGlzdHJpYnV0ZVBhZGRpbmcgPSAodG90YWxQYWQ6IG51bWJlciwgYXV0b1BhZDogc3RyaW5nLCBwYWRzOiBudW1iZXJbXSwgaGVhZDogbnVtYmVyLCB0YWlsOiBudW1iZXIpID0+IHtcbiAgY29uc3Qgc21hbGxQYWQgPSBNYXRoLmZsb29yKHRvdGFsUGFkIC8gMik7XG4gIGlmIChhdXRvUGFkID09PSAnU0FNRV9VUFBFUicpIHtcbiAgICBwYWRzW2hlYWRdID0gc21hbGxQYWQ7XG4gICAgcGFkc1t0YWlsXSA9IHRvdGFsUGFkIC0gc21hbGxQYWQ7XG4gIH0gZWxzZSBpZiAoYXV0b1BhZCA9PT0gJ1NBTUVfTE9XRVInKSB7XG4gICAgcGFkc1toZWFkXSA9IHRvdGFsUGFkIC0gc21hbGxQYWQ7XG4gICAgcGFkc1t0YWlsXSA9IHNtYWxsUGFkO1xuICB9XG59O1xuXG5jb25zdCBjYWxjdWxhdGVPdXRwdXRTaGFwZUFuZFBhZHMgPVxuICAgIChpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwga2VybmVsU2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBkaWxhdGlvbnM6IHJlYWRvbmx5IG51bWJlcltdLCBhdXRvUGFkOiBzdHJpbmcsXG4gICAgIGdyb3VwOiBudW1iZXIsIHBhZHM6IG51bWJlcltdLCBzdHJpZGVzOiByZWFkb25seSBudW1iZXJbXSwgaXNDaGFubmVsTGFzdDogYm9vbGVhbiwgb3V0cHV0UGFkZGluZzogbnVtYmVyW10sXG4gICAgIG91dHB1dFNoYXBlOiBudW1iZXJbXSkgPT4ge1xuICAgICAgY29uc3Qgc3BhdGlhbFJhbmsgPSBpbnB1dFNoYXBlLmxlbmd0aCAtIDI7XG4gICAgICBjb25zdCB1cGRhdGVPdXRwdXRTaGFwZSA9IG91dHB1dFNoYXBlLmxlbmd0aCA9PT0gMDtcbiAgICAgIGlmIChvdXRwdXRQYWRkaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwYXRpYWxSYW5rOyArK2kpIHtcbiAgICAgICAgICBvdXRwdXRQYWRkaW5nLnB1c2goMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IGlucHV0U2hhcGVbMF07XG4gICAgICBjb25zdCBvdXRDaGFubmVscyA9IGtlcm5lbFNoYXBlW2lzQ2hhbm5lbExhc3QgPyAzIDogMV0gKiBncm91cDtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gaW5wdXRTaGFwZS5sZW5ndGggLSBzcGF0aWFsUmFuayAtIChpc0NoYW5uZWxMYXN0ID8gMSA6IDApOyBpIDwgc3BhdGlhbFJhbms7ICsraSwgKytqKSB7XG4gICAgICAgIGNvbnN0IGluU2l6ZSA9IGlucHV0U2hhcGVbal07XG4gICAgICAgIGNvbnN0IG91dFNpemUgPSB1cGRhdGVPdXRwdXRTaGFwZSA/IGluU2l6ZSAqIHN0cmlkZXNbaV0gOiBvdXRwdXRTaGFwZVtpXTtcbiAgICAgICAgY29uc3QgdG90YWxQYWQgPSBjb21wdXRlVG90YWxQYWQoaW5TaXplLCBzdHJpZGVzW2ldLCBwYWRzW2ldLCBrZXJuZWxTaGFwZVtqXSwgZGlsYXRpb25zW2ldLCBvdXRTaXplKTtcbiAgICAgICAgZGlzdHJpYnV0ZVBhZGRpbmcodG90YWxQYWQsIGF1dG9QYWQsIHBhZHMsIGksIGkgKyBzcGF0aWFsUmFuayk7XG4gICAgICAgIGlmICh1cGRhdGVPdXRwdXRTaGFwZSkge1xuICAgICAgICAgIG91dHB1dFNoYXBlLnB1c2goXG4gICAgICAgICAgICAgIHN0cmlkZXNbaV0gKiAoaW5TaXplIC0gMSkgKyBvdXRwdXRQYWRkaW5nW2ldICsgKGtlcm5lbFNoYXBlW2pdIC0gMSkgKiBkaWxhdGlvbnNbaV0gKyAxIC0gcGFkc1tpXSAtXG4gICAgICAgICAgICAgIHBhZHNbaSArIHNwYXRpYWxSYW5rXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG91dHB1dFNoYXBlLnNwbGljZSgwLCAwLCBiYXRjaFNpemUpO1xuICAgICAgb3V0cHV0U2hhcGUuc3BsaWNlKGlzQ2hhbm5lbExhc3QgPyAzIDogMSwgMCwgb3V0Q2hhbm5lbHMpO1xuICAgIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMgZXh0ZW5kcyBDb252QXR0cmlidXRlcyB7XG4gIHJlYWRvbmx5IG91dHB1dFBhZGRpbmc6IHJlYWRvbmx5IG51bWJlcltdO1xuICByZWFkb25seSBvdXRwdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW107XG59XG5cbmNvbnN0IGdldEFkanVzdGVkQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMgPVxuICAgIDxUIGV4dGVuZHMgQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXM+KGF0dHJpYnV0ZXM6IFQsIGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogVCA9PiB7XG4gICAgICBjb25zdCBrZXJuZWxTaGFwZSA9IGF0dHJpYnV0ZXMua2VybmVsU2hhcGUuc2xpY2UoKTtcbiAgICAgIC8vIGlmIGtlcm5lbFNoYXBlIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhpcyBvcCwgaW5mZXIgaXQgZnJvbSB0aGUgd2VpZ2h0IHRlbnNvciBkaW1zXG4gICAgICBpZiAoYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggPT09IDAgfHwgYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiLCAxKSA9PT0gMCkge1xuICAgICAgICBrZXJuZWxTaGFwZS5sZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGlucHV0c1sxXS5kaW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2VybmVsU2hhcGUucHVzaChpbnB1dHNbMV0uZGltc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJztcbiAgICAgIGtlcm5lbFNoYXBlLnNwbGljZSgwLCAwLCBpbnB1dHNbMV0uZGltc1swXSk7XG4gICAgICBrZXJuZWxTaGFwZS5zcGxpY2UoaXNDaGFubmVsc0xhc3QgPyAzIDogMSwgMCwgaW5wdXRzWzFdLmRpbXNbMV0pO1xuXG4gICAgICBjb25zdCBwYWRzID0gYXR0cmlidXRlcy5wYWRzLnNsaWNlKCk7XG4gICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGF0dHJpYnV0ZXMub3V0cHV0U2hhcGUuc2xpY2UoKTtcbiAgICAgIGNvbnN0IG91dHB1dFBhZGRpbmcgPSBhdHRyaWJ1dGVzLm91dHB1dFBhZGRpbmcuc2xpY2UoKTtcbiAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGxldCBkaWxhdGlvbnMgPSBhdHRyaWJ1dGVzLmRpbGF0aW9ucy5zbGljZSgpO1xuICAgICAgaWYgKGRpbGF0aW9ucy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSA9PT0gMCkge1xuICAgICAgICBjb25zdCBzcGF0aWFsUmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDI7XG4gICAgICAgIGRpbGF0aW9ucyA9IG5ldyBBcnJheShzcGF0aWFsUmFuaykuZmlsbCgxKTtcbiAgICAgIH1cbiAgICAgIGxldCBzdHJpZGVzID0gYXR0cmlidXRlcy5zdHJpZGVzLnNsaWNlKCk7XG4gICAgICBpZiAoc3RyaWRlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSA9PT0gMCkge1xuICAgICAgICBjb25zdCBzcGF0aWFsUmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDI7XG4gICAgICAgIHN0cmlkZXMgPSBuZXcgQXJyYXkoc3BhdGlhbFJhbmspLmZpbGwoMSk7XG4gICAgICB9XG4gICAgICAvLyBJZiBvdXRwdXRTaGFwZSBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBhdHRyaWJ1dGVzIG9mIHRoaXMgb3AsIGluZmVyIGl0IGZyb20gdGhlIHBhcmFtZXRlcnNcbiAgICAgIC8vIFNpbWlsYXJseSwgYXV0b21hdGljYWxseSBpbmZlciBwYWRzIGlmIG5vdCBzcGVjaWZpZWRcbiAgICAgIGNhbGN1bGF0ZU91dHB1dFNoYXBlQW5kUGFkcyhcbiAgICAgICAgICBpbnB1dFNoYXBlLCBrZXJuZWxTaGFwZSwgZGlsYXRpb25zLCBhdHRyaWJ1dGVzLmF1dG9QYWQsIGF0dHJpYnV0ZXMuZ3JvdXAsIHBhZHMsIHN0cmlkZXMsIGlzQ2hhbm5lbHNMYXN0LFxuICAgICAgICAgIG91dHB1dFBhZGRpbmcsIG91dHB1dFNoYXBlKTtcblxuICAgICAgLy8gYWx3YXlzIHJldHVybiBhIG5ldyBvYmplY3Qgc28gZG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBhdHRyaWJ1dGVzXG4gICAgICBjb25zdCBuZXdBdHRyaWJ1dGVzOiBUID0gT2JqZWN0LmFzc2lnbih7fSwgYXR0cmlidXRlcyk7XG4gICAgICBPYmplY3QuYXNzaWduKG5ld0F0dHJpYnV0ZXMsIHtrZXJuZWxTaGFwZSwgcGFkcywgb3V0cHV0UGFkZGluZywgb3V0cHV0U2hhcGUsIGRpbGF0aW9ucywgc3RyaWRlc30pO1xuICAgICAgcmV0dXJuIG5ld0F0dHJpYnV0ZXM7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBDb252VHJhbnNwb3NlQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IGFjdGl2YXRpb25BdHRyaWJ1dGVzID0gcGFyc2VJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpO1xuICAvLyBUT0RPIDogTWFrZSB0aGlzIGdlbmVyaWMgZW5vdWdoIHRvIGNvbXB1dGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciBtdWx0aS1kaW1lbnNpb25hbCBjb252XG4gIGNvbnN0IGZvcm1hdCA9IGF0dHJpYnV0ZXMuZm9ybWF0IGFzICdOSFdDJyB8ICdOQ0hXJztcbiAgY29uc3QgYXV0b1BhZCA9XG4gICAgICBbJ05PVFNFVCcsICdWQUxJRCcsICdTQU1FX1VQUEVSJyxcbiAgICAgICAnU0FNRV9MT1dFUiddW3R5cGVvZiBhdHRyaWJ1dGVzLmF1dG9QYWQgPT0gJ3VuZGVmaW5lZCcgPyAwIDogYXR0cmlidXRlcy5hdXRvUGFkIGFzIG51bWJlcl07XG4gIGNvbnN0IGRpbGF0aW9ucyA9IGF0dHJpYnV0ZXMuZGlsYXRpb25zIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIGNvbnN0IGdyb3VwID0gYXR0cmlidXRlcy5ncm91cCBhcyBudW1iZXI7XG4gIGNvbnN0IGtlcm5lbFNoYXBlID0gYXR0cmlidXRlcy5rZXJuZWxTaGFwZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICBjb25zdCBwYWRzID0gYXR0cmlidXRlcy5wYWRzIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBjb25zdCBzdHJpZGVzID0gYXR0cmlidXRlcy5zdHJpZGVzIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIGNvbnN0IHdJc0NvbnN0ID0gKGF0dHJpYnV0ZXMud0lzQ29uc3QgYXMgKCkgPT4gYm9vbGVhbikoKTtcbiAgY29uc3Qgb3V0cHV0UGFkZGluZyA9IGF0dHJpYnV0ZXMub3V0cHV0UGFkZGluZyBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBhdHRyaWJ1dGVzLm91dHB1dFNoYXBlIGFzIFtudW1iZXIsIG51bWJlcl07XG4gIHJldHVybiB7XG4gICAgYXV0b1BhZCxcbiAgICBmb3JtYXQsXG4gICAgZGlsYXRpb25zLFxuICAgIGdyb3VwLFxuICAgIGtlcm5lbFNoYXBlLFxuICAgIG91dHB1dFBhZGRpbmcsXG4gICAgb3V0cHV0U2hhcGUsXG4gICAgcGFkcyxcbiAgICBzdHJpZGVzLFxuICAgIHdJc0NvbnN0LFxuICAgIC4uLmFjdGl2YXRpb25BdHRyaWJ1dGVzLFxuICAgIGNhY2hlS2V5OiBgJHthdHRyaWJ1dGVzLmZvcm1hdH07JHthY3RpdmF0aW9uQXR0cmlidXRlcy5hY3RpdmF0aW9ufTtgXG4gIH07XG59O1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgLy8gUmVmZXIgdG8gdGhlIGJlbG93IGxpbmsgZm9yIGFsbCBpbnB1dCBjaGVja3NcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29ubngvb25ueC9ibG9iL21haW4vZG9jcy9PcGVyYXRvcnMubWQjQ29udlRyYW5zcG9zZVxuICBpZiAoIWlucHV0cyB8fCAoaW5wdXRzLmxlbmd0aCAhPT0gMiAmJiBpbnB1dHMubGVuZ3RoICE9PSAzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29udiByZXF1aXJlcyAyIG9yIDMgaW5wdXRzJyk7XG4gIH1cblxuICAvLyBUT0RPIDogTmVlZCB0byBhZGQgc3VwcG9ydCBmb3IgbXVsdGktZGltZW5zaW9uYWwgY29udlxuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSA0ICYmIGlucHV0c1swXS5kaW1zLmxlbmd0aCAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcignY3VycmVudGx5IG9ubHkgc3VwcG9ydCAyLWRpbWVuc2lvbmFsIGNvbnYnKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IGlucHV0c1sxXS5kaW1zLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZmlsdGVyIGRvZXMgbm90IGhhdmUgc2FtZSBkaW1lbnNpb24gYXMgaW5wdXQnKTtcbiAgfVxuXG4gIC8vIEZJTFRFUl9JTl9DSEFOTkVMIHNob3VsZCBiZSBlcXVhbCB0byBEQVRBX0NIQU5ORUxcbiAgY29uc3QgZGF0YUNoYW5uZWwgPSBpbnB1dHNbMF0uZGltc1thdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnID8gaW5wdXRzWzBdLmRpbXMubGVuZ3RoIC0gMSA6IDFdO1xuICBjb25zdCBmaWx0ZXJJbkNoYW5uZWwgPSBpbnB1dHNbMV0uZGltc1swXTtcbiAgaWYgKGRhdGFDaGFubmVsICE9PSBmaWx0ZXJJbkNoYW5uZWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZJTFRFUl9JTl9DSEFOTkVMIHNob3VsZCBiZSBlcXVhbCB0byBEQVRBX0NIQU5ORUwnKTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVNYXBzID0gaW5wdXRzWzFdLmRpbXNbMV0gKiBhdHRyaWJ1dGVzLmdyb3VwO1xuXG4gIC8vIGlmIGJpYXMgaXMgcHJvdmlkZWQgaXQgc2hvdWxkIGJlIDFEIGFuZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGZlYXR1cmUgbWFwc1xuICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gMyAmJiAoaW5wdXRzWzJdLmRpbXMubGVuZ3RoICE9PSAxIHx8IGlucHV0c1syXS5kaW1zWzBdICE9PSBmZWF0dXJlTWFwcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmlhcycpO1xuICB9XG5cbiAgY29uc3Qgc3BhdGlhbFJhbmsgPSBpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAyO1xuICBjb25zdCBkaWxhdGlvbnNTZXQgPSBhdHRyaWJ1dGVzLmRpbGF0aW9ucy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSA+IDA7XG4gIC8vIHdyb25nIGRpbGF0aW9ucyBkaW1lbnNpb25cbiAgaWYgKGRpbGF0aW9uc1NldCAmJiBhdHRyaWJ1dGVzLmRpbGF0aW9ucy5sZW5ndGggIT09IHNwYXRpYWxSYW5rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkaWxhdGlvbnMgc2hvdWxkIGJlICR7c3BhdGlhbFJhbmt9RGApO1xuICB9XG5cbiAgY29uc3Qgc3RyaWRlc1NldCA9IGF0dHJpYnV0ZXMuc3RyaWRlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSA+IDA7XG4gIC8vIFdyb25nIHN0cmlkZXMgZGltZW5zaW9uXG4gIGlmIChzdHJpZGVzU2V0ICYmIGF0dHJpYnV0ZXMuc3RyaWRlcy5sZW5ndGggIT09IHNwYXRpYWxSYW5rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzdHJpZGVzIHNob3VsZCBiZSAke3NwYXRpYWxSYW5rfURgKTtcbiAgfVxuXG4gIC8vIFdyb25nIHBhZHMgZGltZW5zaW9uXG4gIGNvbnN0IHBhZHNTZXQgPSBhdHRyaWJ1dGVzLnBhZHMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgPiAwO1xuICBpZiAocGFkc1NldCAmJiBhdHRyaWJ1dGVzLnBhZHMubGVuZ3RoICE9PSBzcGF0aWFsUmFuayAqIDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhZHMgc2hvdWxkIGJlICR7c3BhdGlhbFJhbmsgKiAyfURgKTtcbiAgfVxuXG4gIC8vIFdyb25nIG91dHB1dCBwYWRkaW5nIGRpbWVuc2lvblxuICBpZiAoYXR0cmlidXRlcy5vdXRwdXRQYWRkaW5nLmxlbmd0aCAhPT0gc3BhdGlhbFJhbmsgJiYgYXR0cmlidXRlcy5vdXRwdXRQYWRkaW5nLmxlbmd0aCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgb3V0cHV0X3BhZGRpbmcgc2hvdWxkIGJlICR7c3BhdGlhbFJhbmt9RGApO1xuICB9XG5cbiAgLy8gaWYga2VybmVsU2hhcGUgaXMgc3BlY2lmaWVkLCBpdCdzIGRhdGEgbGVuZ3RoIG11c3QgYmUgMiBsZXNzIHRoYW4gZGltcyBsZW5ndGggb2YgdGhlIHdlaWdodHMgdGVuc29yXG4gIC8vICh0aGUgZmlyc3QgMiBkaW1zIGFyZSBiYXRjaF9zaXplIGFuZCBjaGFubmVscylcbiAgY29uc3Qga2VybmVsU2hhcGVTZXQgPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApID4gMDtcbiAgaWYgKGtlcm5lbFNoYXBlU2V0ICYmIGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoICE9PSAwICYmXG4gICAgICBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLmxlbmd0aCAhPT0gaW5wdXRzWzFdLmRpbXMubGVuZ3RoIC0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBrZXJuZWwgc2hhcGUnKTtcbiAgfVxuXG4gIC8vIGFzIHdpdGgga2VybmVsU2hhcGUsIG11c3QgaGF2ZSBzYW1lIG51bWJlciBvZiBzcGF0aWFsIGRpbXMgYXMgaW5wdXRcbiAgaWYgKGF0dHJpYnV0ZXMub3V0cHV0U2hhcGUubGVuZ3RoICE9PSAwICYmIGF0dHJpYnV0ZXMub3V0cHV0U2hhcGUubGVuZ3RoICE9PSBpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG91dHB1dCBzaGFwZScpO1xuICB9XG59O1xuXG4vLyBmb3IgdHJhbnNwb3Npbmcgd2VpZ2h0IHRlbnNvciBmcm9tIFtDLCBNL2dyb3VwLCBLSCwgS1ddIHRvIFtLSCwgS1csIE0vZ3JvdXAsIENdXG5jb25zdCB3ZWlnaHRUcmFuc3Bvc2VQZXJtID0gWzIsIDMsIDEsIDBdO1xuXG5jb25zdCBjb252VHJhbnNwb3NlMmQgPVxuICAgIChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IENvbnZUcmFuc3Bvc2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBhZGp1c3RlZEF0dHJpYnV0ZXMgPSBnZXRBZGp1c3RlZENvbnZUcmFuc3Bvc2VBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMsIGlucHV0cyk7XG4gICAgICBjb25zdCBpc0NoYW5uZWxzTGFzdCA9IGF0dHJpYnV0ZXMuZm9ybWF0ID09PSAnTkhXQyc7XG4gICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGFkanVzdGVkQXR0cmlidXRlcy5vdXRwdXRTaGFwZTtcbiAgICAgIGNvbnN0IG91dENoYW5uZWxzID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAzIDogMV07XG4gICAgICBjb25zdCBpbnB1dENoYW5uZWxzID0gaW5wdXRzWzBdLmRpbXNbaXNDaGFubmVsc0xhc3QgPyAzIDogMV07XG4gICAgICAvLyBTd2l0Y2ggdG8gbmFpdmUgbWV0aG9kIHdoZW4gb3V0Q2hhbm5lbHMgYW5kIGlucHV0Q2hhbm5lbHMgYXJlIHZlcnkgc21hbGwuIEl0J3MgYmVjYXVzZSB0aGF0IGluIHRoaXMgY2FzZSBpdCdzXG4gICAgICAvLyBub3Qgc3VpdGFibGUgZm9yIG1hdG11bCB2ZXJzaW9uIHNpbmNlIG1hdG11bCB1c2VzIHRpbGUgc2l6ZSAzMngzMiByZXN1bHRpbmcgdGhlIHVuZGVybHlpbmcgZXhlY3V0aW9uIHVuaXRcbiAgICAgIC8vIHV0aWxpemF0aW9uIHJhdGUgaXMgdmVyeSBsb3cuXG4gICAgICBpZiAoYWRqdXN0ZWRBdHRyaWJ1dGVzLmdyb3VwICE9PSAxIHx8IChvdXRDaGFubmVscyA9PT0gMSAmJiBpbnB1dENoYW5uZWxzID09PSAxKSkge1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQ29udlRyYW5zcG9zZTJEUHJvZ3JhbUluZm8oaW5wdXRzLCBhZGp1c3RlZEF0dHJpYnV0ZXMpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3V0SGVpZ2h0ID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAxIDogMl07XG4gICAgICBjb25zdCBvdXRXaWR0aCA9IG91dHB1dFNoYXBlW2lzQ2hhbm5lbHNMYXN0ID8gMiA6IDNdO1xuICAgICAgY29uc3Qgd2VpZ2h0SGVpZ2h0ID0gaW5wdXRzWzFdLmRpbXNbMl07XG4gICAgICBjb25zdCB3ZWlnaHRXaWR0aCA9IGlucHV0c1sxXS5kaW1zWzNdO1xuXG4gICAgICBjb25zdCBkaW1BT3V0ZXIgPSBpc0NoYW5uZWxzTGFzdCA/IG91dEhlaWdodCAqIG91dFdpZHRoIDogb3V0Q2hhbm5lbHM7XG4gICAgICBjb25zdCBkaW1CT3V0ZXIgPSBpc0NoYW5uZWxzTGFzdCA/IG91dENoYW5uZWxzIDogb3V0SGVpZ2h0ICogb3V0V2lkdGg7XG4gICAgICBjb25zdCBkaW1Jbm5lciA9IHdlaWdodEhlaWdodCAqIHdlaWdodFdpZHRoICogaW5wdXRDaGFubmVscztcblxuICAgICAgY29uc3Qgc2VxdWVudGlhbEFjY2Vzc0J5VGhyZWFkcyA9IC8qIGJhY2tlbmQuYWRhcHRlckluZm8uaXNJbnRlbCgpICovIHRydWU7XG5cblxuICAgICAgLy8gU1RFUC4xOiB0cmFuc3Bvc2Ugd2VpZ2h0XG4gICAgICBjb25zdCB0cmFuc3Bvc2VkV2VpZ2h0ID0gKGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCBhcyBUZW5zb3JWaWV3IHwgdW5kZWZpbmVkKSA/P1xuICAgICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oaW5wdXRzWzFdLCB3ZWlnaHRUcmFuc3Bvc2VQZXJtKSxcbiAgICAgICAgICAgICAge2lucHV0czogWzFdLCBvdXRwdXRzOiBbYXR0cmlidXRlcy53SXNDb25zdCA/IC0yIDogLTFdfSlbMF07XG4gICAgICBpZiAoYXR0cmlidXRlcy53SXNDb25zdCAmJiAhY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUKSB7XG4gICAgICAgIGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCA9IHRyYW5zcG9zZWRXZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFNURVAuMjogcHJlcGFyZSByZXNoYXBlZCBpbnB1dHNcbiAgICAgIGNvbnN0IGNvbnZUcmFuc3Bvc2VJbnB1dHMgPSBbaW5wdXRzWzBdLCB0cmFuc3Bvc2VkV2VpZ2h0XTtcbiAgICAgIGNvbnN0IGhhc0JpYXMgPSBpbnB1dHMubGVuZ3RoID09PSAzO1xuICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgaWYgKCFpc0NoYW5uZWxzTGFzdCAmJiBpbnB1dHNbMl0uZGltcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBjb252VHJhbnNwb3NlSW5wdXRzLnB1c2goaW5wdXRzWzJdLnJlc2hhcGUoW2lucHV0c1syXS5kaW1zWzBdLCAxLCAxXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnZUcmFuc3Bvc2VJbnB1dHMucHVzaChpbnB1dHNbMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNURVAuMzogY29tcHV0ZSBtYXRtdWxcbiAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVDb252MkRUcmFuc3Bvc2VNYXRNdWxQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgICAgY29udlRyYW5zcG9zZUlucHV0cywgYWRqdXN0ZWRBdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZSwgZGltQU91dGVyLCBkaW1CT3V0ZXIsIGRpbUlubmVyLCBoYXNCaWFzLFxuICAgICAgICAgICAgICBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzKSxcbiAgICAgICAgICB7aW5wdXRzOiBjb252VHJhbnNwb3NlSW5wdXRzfSk7XG4gICAgfTtcblxuY29uc3QgY29udlRyYW5zcG9zZTFkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBDb252VHJhbnNwb3NlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICAvLyBleHRlbmQgdGhlIGlucHV0IHRvIDJEIGJ5IGFkZGluZyBIIGRpbWVuc2lvblxuICBjb25zdCBpc0NoYW5uZWxMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJztcblxuICBjb25zdCBpbnB1dHMgPSBbXG4gICAgY29udGV4dC5pbnB1dHNbMF0ucmVzaGFwZShcbiAgICAgICAgaXNDaGFubmVsTGFzdCA/XG4gICAgICAgICAgICAvLyBbTiwgVywgQ10gLT4gW04sIEg9MSwgVywgQ11cbiAgICAgICAgICAgIFtjb250ZXh0LmlucHV0c1swXS5kaW1zWzBdLCAxLCBjb250ZXh0LmlucHV0c1swXS5kaW1zWzFdLCBjb250ZXh0LmlucHV0c1swXS5kaW1zWzJdXSA6XG4gICAgICAgICAgICAvLyBbTiwgQywgV10gLT4gW04sIEMsIEg9MSwgV11cbiAgICAgICAgICAgIFtjb250ZXh0LmlucHV0c1swXS5kaW1zWzBdLCBjb250ZXh0LmlucHV0c1swXS5kaW1zWzFdLCAxLCBjb250ZXh0LmlucHV0c1swXS5kaW1zWzJdXSksXG4gICAgLy9bRklMVEVSX09VVF9DSEFOTkVMLCBGSUxURVJfSU5fQ0hBTk5FTCwga1ddIC0+IFtGSUxURVJfT1VUX0NIQU5ORUwsIEZJTFRFUl9JTl9DSEFOTkVMLCBrSD0xLCBrV11cbiAgICBjb250ZXh0LmlucHV0c1sxXS5yZXNoYXBlKFtjb250ZXh0LmlucHV0c1sxXS5kaW1zWzBdLCBjb250ZXh0LmlucHV0c1sxXS5kaW1zWzFdLCAxLCBjb250ZXh0LmlucHV0c1sxXS5kaW1zWzJdXSlcbiAgXTtcbiAgaWYgKGNvbnRleHQuaW5wdXRzLmxlbmd0aCA9PT0gMykge1xuICAgIGlucHV0cy5wdXNoKGNvbnRleHQuaW5wdXRzWzJdKTtcbiAgfVxuICBsZXQga2VybmVsU2hhcGUgPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlO1xuICBpZiAoa2VybmVsU2hhcGUubGVuZ3RoID09PSAwIHx8IGtlcm5lbFNoYXBlWzBdID09PSAwKSB7XG4gICAga2VybmVsU2hhcGUgPSBbY29udGV4dC5pbnB1dHNbMV0uZGltc1syXV07XG4gIH1cbiAgbGV0IGRpbGF0aW9ucyA9IGF0dHJpYnV0ZXMuZGlsYXRpb25zO1xuICBpZiAoZGlsYXRpb25zLmxlbmd0aCA9PT0gMCB8fCBkaWxhdGlvbnNbMF0gPT09IDApIHtcbiAgICBkaWxhdGlvbnMgPSBbMV07XG4gIH1cbiAgbGV0IHN0cmlkZXMgPSBhdHRyaWJ1dGVzLnN0cmlkZXM7XG4gIGlmIChzdHJpZGVzLmxlbmd0aCA9PT0gMCB8fCBzdHJpZGVzWzBdID09PSAwKSB7XG4gICAgc3RyaWRlcyA9IFsxXTtcbiAgfVxuICBsZXQgcGFkcyA9IGF0dHJpYnV0ZXMucGFkcztcbiAgaWYgKHBhZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcGFkcyA9IFswLCAwXTtcbiAgfVxuICBwYWRzID0gWzAsIHBhZHNbMF0sIDAsIHBhZHNbMV1dO1xuICBzdHJpZGVzID0gWzFdLmNvbmNhdChzdHJpZGVzKTtcbiAgZGlsYXRpb25zID0gWzFdLmNvbmNhdChkaWxhdGlvbnMpO1xuICBrZXJuZWxTaGFwZSA9IFsxXS5jb25jYXQoa2VybmVsU2hhcGUpO1xuICBjb25zdCBhZGp1c3RlZEF0dHJpYnV0ZXMgPVxuICAgICAgZ2V0QWRqdXN0ZWRDb252VHJhbnNwb3NlQXR0cmlidXRlcyh7Li4uYXR0cmlidXRlcywgcGFkcywgc3RyaWRlcywgZGlsYXRpb25zLCBrZXJuZWxTaGFwZX0sIGlucHV0cyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVDb252VHJhbnNwb3NlMkRQcm9ncmFtSW5mbyhcbiAgICAgIGlucHV0cywgYWRqdXN0ZWRBdHRyaWJ1dGVzLFxuICAgICAgb3V0cHV0U2hhcGUgPT4gaXNDaGFubmVsTGFzdCA/IFtvdXRwdXRTaGFwZVswXSwgb3V0cHV0U2hhcGVbMl0sIG91dHB1dFNoYXBlWzNdXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW291dHB1dFNoYXBlWzBdLCBvdXRwdXRTaGFwZVsxXSwgb3V0cHV0U2hhcGVbM11dKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udlRyYW5zcG9zZSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpO1xuICBpZiAoY29udGV4dC5pbnB1dHNbMF0uZGltcy5sZW5ndGggPT09IDMpIHtcbiAgICBjb252VHJhbnNwb3NlMWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgY29udlRyYW5zcG9zZTJkKGNvbnRleHQsIGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgfVxufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleSwgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgZ2V0RWxlbWVudEF0LCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyfSBmcm9tICcuL2NvbW1vbic7XG5cblxuZXhwb3J0IGludGVyZmFjZSBDdW1TdW1BdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgZXhjbHVzaXZlOiBib29sZWFuO1xuICByZWFkb25seSByZXZlcnNlOiBib29sZWFuO1xufVxuY29uc3QgY3JlYXRlQ3Vtc3VtUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dFR5cGU6IG51bWJlciwgaW5wdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sIGF4aXNJbnB1dDogVGVuc29yVmlldywgYXR0cmlidXRlczogQ3VtU3VtQXR0cmlidXRlcyk6XG4gICAgICAgIFByb2dyYW1JbmZvID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUoaW5wdXRTaGFwZSk7ICAvLyBvdXRwdXRTaGFwZSBpcyBzYW1lIGFzIGlucHV0U2hhcGUuXG4gICAgICAgICAgY29uc3QgcmFuayA9IGlucHV0U2hhcGUubGVuZ3RoOyAgICAgICAgICAgICAgICAgLy8gaW5wdXQvb3V0cHV0IHJhbmtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ2lucHV0JywgaW5wdXRUeXBlLCByYW5rKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRUeXBlLCByYW5rKTtcbiAgICAgICAgICBjb25zdCBheGlzVmFsdWUgPSBheGlzSW5wdXQuZGF0YVR5cGUgPT09IERhdGFUeXBlLmludDMyID8gYXhpc0lucHV0LmdldEludDMyQXJyYXkoKVswXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihheGlzSW5wdXQuZ2V0QmlnSW50NjRBcnJheSgpWzBdKTtcbiAgICAgICAgICBjb25zdCBheGlzID0gU2hhcGVVdGlsLm5vcm1hbGl6ZUF4aXMoYXhpc1ZhbHVlLCByYW5rKTtcbiAgICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYCBpMzIoJHtpbnB1dC5pbmRpY2VzR2V0KCdpbnB1dEluZGljZXMnLCAndW5pZm9ybXMuYXhpcycpfSkgYDtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IGdldEVsZW1lbnRBdCgndW5pZm9ybXMuaW5wdXRfc2hhcGUnLCAndW5pZm9ybXMuYXhpcycsIHJhbmspO1xuICAgICAgICAgICAgY29uc3QgbG93ZXJMaW1pdCA9IGF0dHJpYnV0ZXMucmV2ZXJzZSA/IGluZGV4ICsgKGF0dHJpYnV0ZXMuZXhjbHVzaXZlID8gJyArIDEnIDogJycpIDogJzAnO1xuICAgICAgICAgICAgY29uc3QgdXBwZXJMaW1pdCA9IGF0dHJpYnV0ZXMucmV2ZXJzZSA/IG1heCA6IGluZGV4ICsgKGF0dHJpYnV0ZXMuZXhjbHVzaXZlID8gJycgOiAnICsgMScpO1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgIHNoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ291dHB1dFNpemUnLCAndTMyJylcbiAgICAgICAgICAgICAgICAgICAgLnJlZ2lzdGVyVW5pZm9ybSgnYXhpcycsICd1MzInKVxuICAgICAgICAgICAgICAgICAgICAuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAgICAgICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dFNpemUnKX1cbiAgICAgICAgICAgICAgICAgIHZhciBpbnB1dEluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgICAgICAgICAgICAgICB2YXIgc3VtID0gJHtvdXRwdXQudHlwZS52YWx1ZX0oMCk7XG4gICAgICAgICAgICAgICAgICBsZXQgZmlyc3QgOiBpMzIgPSAke2xvd2VyTGltaXR9O1xuICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgOiBpMzIgPSAke3VwcGVyTGltaXR9O1xuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA6IGkzMiA9IGZpcnN0OyBpIDwgbGFzdDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICR7aW5wdXQuaW5kaWNlc1NldCgnaW5wdXRJbmRpY2VzJywgJ3VuaWZvcm1zLmF4aXMnLCAndTMyKGkpJyl9O1xuICAgICAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyAke2lucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRJbmRpY2VzJyl9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnLCAnc3VtJyl9O1xuICAgICAgICAgICAgICAgIH1gO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICdDdW1TdW0nLFxuICAgICAgICAgICAgc2hhZGVyQ2FjaGU6IHtoaW50OiBhdHRyaWJ1dGVzLmNhY2hlS2V5LCBpbnB1dERlcGVuZGVuY2llczogWydyYW5rJ119LFxuICAgICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBpbnB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRUeXBlfV0sXG4gICAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICAgICAgICAgIHByb2dyYW1Vbmlmb3JtczogW1xuICAgICAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBheGlzfSxcbiAgICAgICAgICAgICAgICAuLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dFNoYXBlLCBpbnB1dFNoYXBlKVxuICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuXG5leHBvcnQgY29uc3QgY3Vtc3VtID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBDdW1TdW1BdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGlucHV0U2hhcGUgPSBjb250ZXh0LmlucHV0c1swXS5kaW1zO1xuICBjb25zdCBpbnB1dFR5cGUgPSBjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZTtcbiAgY29uc3QgYXhpcyA9IGNvbnRleHQuaW5wdXRzWzFdO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQ3Vtc3VtUHJvZ3JhbUluZm8oaW5wdXRUeXBlLCBpbnB1dFNoYXBlLCBheGlzLCBhdHRyaWJ1dGVzKSwge2lucHV0czogWzBdfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDdW1TdW1BdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogQ3VtU3VtQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IGV4Y2x1c2l2ZSA9IGF0dHJpYnV0ZXMuZXhjbHVzaXZlIGFzIG51bWJlciA9PT0gMTtcbiAgY29uc3QgcmV2ZXJzZSA9IGF0dHJpYnV0ZXMucmV2ZXJzZSBhcyBudW1iZXIgPT09IDE7XG4gIHJldHVybiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoe2V4Y2x1c2l2ZSwgcmV2ZXJzZX0pO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleSwgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgSW5kaWNlc0hlbHBlciwgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdEF0dHJpYnV0ZXMge1xuICByZWFkb25seSBmb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwdGhUb1NwYWNlQXR0cmlidXRlcyBleHRlbmRzIEZvcm1hdEF0dHJpYnV0ZXMsIEF0dHJpYnV0ZVdpdGhDYWNoZUtleSB7XG4gIHJlYWRvbmx5IGJsb2Nrc2l6ZTogbnVtYmVyO1xuICByZWFkb25seSBtb2RlOiBzdHJpbmc7XG59XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogdm9pZCA9PiB7XG4gIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcHRoVG9TcGFjZSByZXF1aXJlcyAxIGlucHV0LicpO1xuICB9XG4gIGlmIChpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcHRoVG9TcGFjZSByZXF1aXJlcyA0RCBpbnB1dC4nKTtcbiAgfVxufTtcblxuY29uc3QgcGVybUZ1bmN0aW9uQm9keSA9IChwZXJtOiBudW1iZXJbXSwgcmFuazogbnVtYmVyLCBpbnB1dDogSW5kaWNlc0hlbHBlciwgb3V0cHV0OiBJbmRpY2VzSGVscGVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcmV2ZXJzZUZ1bmMgPSBbXTtcbiAgcmV2ZXJzZUZ1bmMucHVzaChgZm4gcGVybShpOiAke291dHB1dC50eXBlLmluZGljZXN9KSAtPiAke2lucHV0LnR5cGUuaW5kaWNlc30ge1xuICAgIHZhciBhOiAke2lucHV0LnR5cGUuaW5kaWNlc307YCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuazsgKytpKSB7XG4gICAgcmV2ZXJzZUZ1bmMucHVzaChpbnB1dC5pbmRpY2VzU2V0KCdhJywgcGVybVtpXSwgYGlbJHtpfV1gKSk7XG4gIH1cbiAgcmV2ZXJzZUZ1bmMucHVzaCgncmV0dXJuIGE7fScpO1xuICByZXR1cm4gcmV2ZXJzZUZ1bmMuam9pbignXFxuJyk7XG59O1xuXG5jb25zdCBjcmVhdGVEZXB0aFRvU3BhY2VQcm9ncmFtSW5mbyA9IChpbnB1dFRlbnNvcjogVGVuc29yVmlldywgYXR0cmlidXRlczogRGVwdGhUb1NwYWNlQXR0cmlidXRlcyk6IFByb2dyYW1JbmZvID0+IHtcbiAgbGV0IG46IG51bWJlciwgaDogbnVtYmVyLCB3OiBudW1iZXIsIGM6IG51bWJlcjtcbiAgbGV0IHNoYXBlOiBudW1iZXJbXTtcbiAgbGV0IHBlcm06IG51bWJlcltdO1xuICBjb25zdCBpc0NoYW5uZWxMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJztcbiAgY29uc3QgYmxvY2tzaXplID0gYXR0cmlidXRlcy5ibG9ja3NpemU7XG4gIGNvbnN0IGlzRENSbW9kZSA9IGF0dHJpYnV0ZXMubW9kZSA9PT0gJ0RDUic7XG4gIGlmIChpc0NoYW5uZWxMYXN0KSB7XG4gICAgW24sIGgsIHcsIGNdID0gaW5wdXRUZW5zb3IuZGltcztcbiAgICBzaGFwZSA9IGlzRENSbW9kZSA/IFtuLCBoLCB3LCBibG9ja3NpemUsIGJsb2Nrc2l6ZSwgYyAvIChibG9ja3NpemUgKiogMildIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuLCBoLCB3LCBjIC8gKGJsb2Nrc2l6ZSAqKiAyKSwgYmxvY2tzaXplLCBibG9ja3NpemVdO1xuICAgIHBlcm0gPSBpc0RDUm1vZGUgPyBbMCwgMSwgMywgMiwgNCwgNV0gOiBbMCwgMSwgNCwgMiwgNSwgM107XG4gIH0gZWxzZSB7XG4gICAgW24sIGgsIHcsIGNdID0gW2lucHV0VGVuc29yLmRpbXNbMF0sIGlucHV0VGVuc29yLmRpbXNbMl0sIGlucHV0VGVuc29yLmRpbXNbM10sIGlucHV0VGVuc29yLmRpbXNbMV1dO1xuICAgIHNoYXBlID0gaXNEQ1Jtb2RlID8gW24sIGJsb2Nrc2l6ZSwgYmxvY2tzaXplLCBjIC8gKGJsb2Nrc2l6ZSAqKiAyKSwgaCwgd10gOlxuICAgICAgICAgICAgICAgICAgICAgICAgW24sIGMgLyAoYmxvY2tzaXplICoqIDIpLCBibG9ja3NpemUsIGJsb2Nrc2l6ZSwgaCwgd107XG4gICAgcGVybSA9IGlzRENSbW9kZSA/IFswLCAzLCA0LCAxLCA1LCAyXSA6IFswLCAxLCA0LCAyLCA1LCAzXTtcbiAgfVxuICBjb25zdCByZXNoYXBlZElucHV0VGVuc29yID0gaW5wdXRUZW5zb3IucmVzaGFwZShzaGFwZSk7XG4gIGNvbnN0IHJlc2hhcGVkSW5wdXRSYW5rID0gcmVzaGFwZWRJbnB1dFRlbnNvci5kaW1zLmxlbmd0aDtcbiAgY29uc3QgaW5wdXREYXRhVHlwZSA9IGlucHV0VGVuc29yLmRhdGFUeXBlO1xuXG4gIGNvbnN0IHJlc2hhcGVkSW5wdXQgPSBpbnB1dFZhcmlhYmxlKCdhJywgaW5wdXREYXRhVHlwZSwgcmVzaGFwZWRJbnB1dFJhbmspO1xuICBjb25zdCBwZXJtZWRPdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXREYXRhVHlwZSwgcmVzaGFwZWRJbnB1dFJhbmspO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ291dHB1dF9zaXplJywgJ3UzMicpLmRlY2xhcmVWYXJpYWJsZXMocmVzaGFwZWRJbnB1dCwgcGVybWVkT3V0cHV0KX1cblxuICAke3Blcm1GdW5jdGlvbkJvZHkocGVybSwgcmVzaGFwZWRJbnB1dFJhbmssIHJlc2hhcGVkSW5wdXQsIHBlcm1lZE91dHB1dCl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0X3NpemUnKX1cblxuICAgIGxldCBpbmRpY2VzID0gJHtwZXJtZWRPdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuICAgIGxldCBhSW5kaWNlcyA9IHBlcm0oaW5kaWNlcyk7XG5cbiAgICAke3Blcm1lZE91dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIHJlc2hhcGVkSW5wdXQuZ2V0QnlJbmRpY2VzKCdhSW5kaWNlcycpKX1cbiAgfWA7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnRGVwdGhUb1NwYWNlJyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke2lucHV0VGVuc29yLmRpbXN9OyR7YXR0cmlidXRlcy5ibG9ja3NpemV9OyR7YXR0cmlidXRlcy5tb2RlfWAsIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnXX0sXG4gICAgZ2V0UnVuRGF0YTogKGlucHV0cykgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpc0NoYW5uZWxMYXN0ID8gW24sIGggKiBibG9ja3NpemUsIHcgKiBibG9ja3NpemUsIGMgLyAoYmxvY2tzaXplICoqIDIpXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbiwgYyAvIChibG9ja3NpemUgKiogMiksIGggKiBibG9ja3NpemUsIHcgKiBibG9ja3NpemVdO1xuICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgICAgIGNvbnN0IHNoYXBlQmVmb3JlUGVybSA9IHJlc2hhcGVkSW5wdXRUZW5zb3IuZGltcztcbiAgICAgIGNvbnN0IHNoYXBlQWZ0ZXJQZXJtID0gU2hhcGVVdGlsLnNvcnRCYXNlZE9uUGVybShzaGFwZUJlZm9yZVBlcm0sIHBlcm0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICBwcm9ncmFtVW5pZm9ybXM6XG4gICAgICAgICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKHNoYXBlQmVmb3JlUGVybSwgc2hhcGVBZnRlclBlcm0pXSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBnZXRTaGFkZXJTb3VyY2UsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZGVwdGhUb1NwYWNlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBEZXB0aFRvU3BhY2VBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZURlcHRoVG9TcGFjZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBhdHRyaWJ1dGVzKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VEZXB0aFRvU3BhY2VBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRGVwdGhUb1NwYWNlQXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7XG4gICAgICBibG9ja3NpemU6IGF0dHJpYnV0ZXMuYmxvY2tzaXplIGFzIG51bWJlcixcbiAgICAgIG1vZGU6IGF0dHJpYnV0ZXMubW9kZSBhcyBzdHJpbmcsXG4gICAgICBmb3JtYXQ6IGF0dHJpYnV0ZXMuZm9ybWF0IGFzICdOSFdDJyB8ICdOQ0hXJ1xuICAgIH0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7QXR0cmlidXRlV2l0aENhY2hlS2V5LCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVpbnN1bUF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBlcXVhdGlvbjogc3RyaW5nO1xufVxuLy8gVGhlIGVxdWF0aW9uIGF0dHJpYnV0ZSB2YWx1ZSBpcyBhIHN0cmluZyB3aGljaCBjb25zaXN0cyBvZiBsZWZ0IGhhbmQgc2lkZSAoTEhTKSBhbmQgb3B0aW9uYWxseSByaWdodCBoYW5kIHNpZGUgKFJIUylcbi8vIHNlcGFyYXRlZCBieSAnLT4nLiBFeC4gXCJpaixqayAtPiBpa1wiIGV4cHJlc3NlcyBtYXRyaXggbXVsdGlwbGljYXRpb25cbi8vICAgICBcImlqLT5qaVwiIGV4cHJlc3NlcyBtYXRyaXggdHJhbnNwb3NlXG4vLyAgICAgIFwiaWktPmlcIiBkaWFnb25hbCBlbGVtZW50cyBvZiBhIHNxdWFyZSBtYXRyaXhcbi8vIExIUyBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIHRlcm1zIHNlcGFyYXRlZCBieSBjb21tYXMuIEVhY2ggdGVybSBjb3JyZXNwb25kcyB0byBhbiBpbnB1dCB2YXJpYWJsZS5cbi8vIEVhY2ggc3ltYm9sIGNvcnJlc3BvbmRzIHRvIGEgZGltZW5zaW9uIGluIHRoZSBpbnB1dCB2YXJpYWJsZS4gVGhlIHN5bWJvbCBjYW4gYmUgZWl0aGVyIGEgbGV0dGVyLCAnYScgdG8gJ3onIG9yICdBJyB0b1xuLy8gJ1onIG9yICcuLi4nIHRvIHJlcHJlc2VudCBhcmJpdHJhcnkgZGltZW5zaW9ucy5cblxuY29uc3Qgc3ltYm9sUGF0dGVybiA9XG4gICAgJ1thLXpBLVpdfFxcXFwuXFxcXC5cXFxcLic7ICAvLyBUaGUgcGF0dGVybiBlYWNoIHN5bWJvbCBpbiBlYWNoIHRlcm0gaW4gdGhlIHN5bWJvbGljIGVxdWF0aW9uIHNob3VsZCBtYXRjaFxuY29uc3QgdGVybVBhdHRlcm4gPSAnKCcgKyBzeW1ib2xQYXR0ZXJuICsgJykrJzsgICAvLyBUaGUgcGF0dGVybiBlYWNoIHRlcm0gaW4gdGhlIHN5bWJvbGljIGVxdWF0aW9uIHNob3VsZCBtYXRjaFxuY29uc3QgdGVybVBhdHRlcm5Pbmx5ID0gJ14nICsgdGVybVBhdHRlcm4gKyAnJCc7ICAvLyBUaGUgcGF0dGVybnMgb25seSBtYXRjaHMgYSB0ZXJtIGJlZ2luIHRvIGVuZC5cbmNvbnN0IGxoc1BhdHRlcm4gPSAnKCcgKyB0ZXJtUGF0dGVybiArICcsKSonICsgdGVybVBhdHRlcm47ICAvLyBUaGUgcGF0dGVybiB0aGUgTEhTIHNob3VsZCBtYXRjaFxuY29uc3QgbGhzUGF0dGVybk9ubHkgPSAnXicgKyBsaHNQYXR0ZXJuICsgJyQnOyAgICAgICAgICAgICAgIC8vIFRoZSBwYXR0ZXJucyBvbmx5IG1hdGNocyBhIExIUyBiZWdpbiB0byBlbmQuXG5cbmludGVyZmFjZSBTeW1ib2xJbmZvIHtcbiAgY291bnQ6IG51bWJlcjsgICAgICAgICAgIC8vIFN5bWJvbCBjb3JyZXNwb25kaW5nIHRvIGEgZGltbWVuc2lvbiBvZiBhbiBpbnB1dFxuICBpbnB1dEluZGljZXM6IG51bWJlcltdOyAgLy8gTnVtYmVyIG9mIGlucHV0IHZhcmlhYmxlcyB0aGUgc3ltYm9sIGNvcnJlc3BvbmRzIHRvXG4gIGRpbVZhbHVlOiBudW1iZXI7ICAgICAgICAvLyBOdW1iZXIgb2YgZGltZW5zaW9ucyB0aGUgc3ltYm9sIGNvcnJlc3BvbmRzIHRvXG59XG5cbmNsYXNzIEVpbnN1bVRlcm0ge1xuICBjb25zdHJ1Y3RvcihpbnB1dEluZGV4ID0gLTEpIHtcbiAgICB0aGlzLnN5bWJvbFRvSW5kaWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKTtcbiAgICB0aGlzLmlucHV0SW5kZXggPSBpbnB1dEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIGEgc3ltYm9sIHRvIHRoZSB0ZXJtXG4gIGFkZFN5bWJvbChzeW1ib2w6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuc3ltYm9sVG9JbmRpY2VzLmdldChzeW1ib2wpO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IFtpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlLnB1c2goaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLnN5bWJvbFRvSW5kaWNlcy5zZXQoc3ltYm9sLCB2YWx1ZSk7XG4gIH1cblxuICBzeW1ib2xUb0luZGljZXM6IE1hcDxzdHJpbmcsIG51bWJlcltdPjsgIC8vIE1hcCBmcm9tIHN5bWJvbCB0byBkaW1lbnNpb25zIG9mIHRoZSBpbnB1dCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0ZXJtXG4gIGlucHV0SW5kZXg6IG51bWJlcjsgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgZm9yIG91dHB1dCBhbmQgMCwgMSwgMiwgLi4uIGZvciBpbnB1dHNcbn1cblxuY2xhc3MgRWluc3VtRXF1YXRpb24ge1xuICBjb25zdHJ1Y3RvcihpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgcHVibGljIHJlYWRvbmx5IGVxdWF0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmhhc0VsbGlwc2lzID0gZmFsc2U7XG4gICAgdGhpcy5zeW1ib2xUb0luZm8gPSBuZXcgTWFwPHN0cmluZywgU3ltYm9sSW5mbz4oKTtcbiAgICB0aGlzLmxocyA9IG5ldyBBcnJheTxFaW5zdW1UZXJtPigpO1xuICAgIHRoaXMub3V0cHV0RGltcyA9IFtdO1xuICAgIC8vIEFzIHJocyBuZWVkcyB0byBiZSB1cGRhdGVkIGFsbG93IHVzaW5nIGxldCBpbnN0ZWFkIG9mIGNvbnN0IGZvciBib3RoIGxocyBhbmQgcmhzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgW2xocywgcmhzXSA9IGVxdWF0aW9uLmluY2x1ZGVzKCctPicpID8gZXF1YXRpb24uc3BsaXQoJy0+JywgMikgOiBbZXF1YXRpb24sICcnXTtcbiAgICBpZiAoIWxocy5tYXRjaChSZWdFeHAobGhzUGF0dGVybk9ubHkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIExIUyB0ZXJtJyk7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0VGVybXMgPSBsaHMuc3BsaXQoJywnKTtcbiAgICBpbnB1dFRlcm1zLmZvckVhY2goKGlucHV0VGVybSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGRpbXMgPSBpbnB1dHNbaW5kZXhdLmRpbXMuc2xpY2UoKTtcbiAgICAgIGlmICghaW5wdXRUZXJtLm1hdGNoKFJlZ0V4cCh0ZXJtUGF0dGVybk9ubHkpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTEhTIHRlcm0nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVpbnN1bVRlcm0gPSB0aGlzLnByb2Nlc3NUZXJtKGlucHV0VGVybSwgdHJ1ZSwgZGltcywgaW5kZXgpO1xuICAgICAgdGhpcy5saHMucHVzaChlaW5zdW1UZXJtKTtcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIFJIUyBpZiBub3Qgc3BlY2lmaWVkXG4gICAgaWYgKHJocyA9PT0gJycpIHtcbiAgICAgIC8vIENvbnN0cnVjdCBSSFMgZnJvbSBMSFMgdGVybXMvc3ltYm9sc1xuICAgICAgcmhzICs9IFsuLi50aGlzLnN5bWJvbFRvSW5mby5lbnRyaWVzKCldXG4gICAgICAgICAgICAgICAgIC5maWx0ZXIoKFtzeW0sIGluZm9dKSA9PiAoaW5mby5jb3VudCA9PT0gMSB8fCBzeW0gPT09ICcuLi4nKSlcbiAgICAgICAgICAgICAgICAgLm1hcCgoW3N5bV0pID0+IHN5bSlcbiAgICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXJocy5tYXRjaChSZWdFeHAodGVybVBhdHRlcm4pKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUkhTJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBvdXRwdXQgZGltc1xuICAgIGNvbnN0IHJoc1N5bWJvbHMgPSByaHMubWF0Y2goUmVnRXhwKHN5bWJvbFBhdHRlcm4sICdnJykpO1xuICAgIHJoc1N5bWJvbHM/LmZvckVhY2goKHN5bWJvbCkgPT4ge1xuICAgICAgaWYgKHN5bWJvbCA9PT0gJy4uLicpIHtcbiAgICAgICAgdGhpcy5vdXRwdXREaW1zID0gdGhpcy5vdXRwdXREaW1zLmNvbmNhdCh0aGlzLmVsbGlwc2lzRGltcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5zeW1ib2xUb0luZm8uZ2V0KHN5bWJvbCk7XG4gICAgICAgIGlmIChpbmZvID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUkhTIHN5bWJvbCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0cHV0RGltcy5wdXNoKGluZm8uZGltVmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmhzID0gdGhpcy5wcm9jZXNzVGVybShyaHMsIGZhbHNlLCB0aGlzLm91dHB1dERpbXMpO1xuICB9ICAvLyBFbmQgb2YgRWluc3VtRXFhdGlvbiBjb25zdHJ1Y3RvclxuXG4gIC8vIEFkZCBhIHN5bWJvbCB0byB0aGUgZXF1YXRpb25cbiAgYWRkU3ltYm9sKHN5bWJvbDogc3RyaW5nLCBkaW1WYWx1ZTogbnVtYmVyLCBpbnB1dEluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgaW5mbyA9IHRoaXMuc3ltYm9sVG9JbmZvLmdldChzeW1ib2wpO1xuICAgIGlmIChpbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpbmZvLmRpbVZhbHVlICE9PSBkaW1WYWx1ZSAmJiBpbmZvLmNvdW50ICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGltZW5zaW9uIG1pc21hdGNoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvLmNvdW50Kys7XG4gICAgICAgIGluZm8uaW5wdXRJbmRpY2VzLnB1c2goaW5wdXRJbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm8gPSB7Y291bnQ6IDEsIGRpbVZhbHVlLCBpbnB1dEluZGljZXM6IFtpbnB1dEluZGV4XX07XG4gICAgfVxuICAgIHRoaXMuc3ltYm9sVG9JbmZvLnNldChzeW1ib2wsIGluZm8pO1xuICB9XG5cbiAgLy8gUHJvY2VzcyBvbmUgaW5wdXQvb3V0cHV0IHRlcm1cbiAgcHJvY2Vzc1Rlcm0odGVybTogc3RyaW5nLCBpc0lucHV0OiBib29sZWFuLCBkaW1zOiByZWFkb25seSBudW1iZXJbXSwgaW5kZXggPSAtMSk6IEVpbnN1bVRlcm0ge1xuICAgIGNvbnN0IHJhbmsgPSBkaW1zLmxlbmd0aDtcbiAgICBsZXQgZWxsaXBzaXMgPSBmYWxzZTtcbiAgICBsZXQgZWxsaXBzaXNEaW1zID0gW107XG4gICAgbGV0IG5leHREaW0gPSAwO1xuICAgIC8vIEZvciBvdXRwdXQgZW1wdHkgc3RyaW5nIGlzIGFsbG93ZWQgYmVjYXVzZSB0aGUgb3V0cHV0IG1heSBiZSByZWR1Y2VkIHRvIGEgc2NhbGFyIHZhbHVlXG4gICAgaWYgKCF0ZXJtLm1hdGNoKFJlZ0V4cCh0ZXJtUGF0dGVybk9ubHkpKSAmJiAoIWlzSW5wdXQgJiYgdGVybSAhPT0gJycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTEhTIHRlcm0nKTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhTeW1ib2xzID0gdGVybS5tYXRjaChSZWdFeHAoc3ltYm9sUGF0dGVybiwgJ2cnKSk7XG4gICAgY29uc3QgZWluc3VtVGVybSA9IG5ldyBFaW5zdW1UZXJtKGluZGV4KTtcbiAgICAvLyBzeW1ib2wgY2FuIGJlIGVpdGhlciBhIGxldHRyZSwgJ2EnIHRvICd6JyBvciAnQScgdG8gJ1onLCBvciAnLi4uJ1xuICAgIGluZGV4U3ltYm9scz8uZm9yRWFjaCgoc3ltYm9sOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHN5bWJvbCA9PT0gJy4uLicpIHtcbiAgICAgICAgaWYgKGVsbGlwc2lzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IG9uZSBlbGxpcHNpcyBpcyBhbGxvd2VkIHBlciBpbnB1dCB0ZXJtJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxsaXBzaXMgPSB0cnVlO1xuICAgICAgICBjb25zdCBlbGxpcHNpc0RpbUxlbmd0aCA9IHJhbmsgLSBpbmRleFN5bWJvbHMubGVuZ3RoICsgMTtcbiAgICAgICAgaWYgKGVsbGlwc2lzRGltTGVuZ3RoIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRWxsaXBzaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgICAgICB9XG4gICAgICAgIGVsbGlwc2lzRGltcyA9IGRpbXMuc2xpY2UobmV4dERpbSwgbmV4dERpbSArIGVsbGlwc2lzRGltTGVuZ3RoKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzRWxsaXBzaXMpIHtcbiAgICAgICAgICBpZiAodGhpcy5lbGxpcHNpc0RpbXMubGVuZ3RoICE9PSBlbGxpcHNpc0RpbXMubGVuZ3RoIHx8XG4gICAgICAgICAgICAgIHRoaXMuZWxsaXBzaXNEaW1zLnRvU3RyaW5nKCkgIT09IGVsbGlwc2lzRGltcy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VsbGlwc2lzIGRpbWVuc2lvbnMgbWlzbWF0Y2gnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJbnB1dCkge1xuICAgICAgICAgIHRoaXMuaGFzRWxsaXBzaXMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZWxsaXBzaXNEaW1zID0gZWxsaXBzaXNEaW1zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRWxsaXBzaXMgbXVzdCBiZSBzcGVjaWZpZWQgaW4gdGhlIExIUycpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZCAnMCcsICcxJywgJzInLCAnMycsICc0JywgZXRjIHRvIHJlcHJlc2VudCBlbGxpcHNpcyBkaW1lbnNpb25zIHRvIGF2b2lkIHNwZWNpYWwgaGFuZGxpbmdcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGxpcHNpc0RpbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBzeW1ib2wgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCcwJy5jaGFyQ29kZUF0KDApICsgaik7XG4gICAgICAgICAgZWluc3VtVGVybS5hZGRTeW1ib2woc3ltYm9sLCBpICsgaik7XG4gICAgICAgICAgdGhpcy5hZGRTeW1ib2woc3ltYm9sLCBkaW1zW25leHREaW0rK10sIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWluc3VtVGVybS5hZGRTeW1ib2woc3ltYm9sLCBpICsgKHRoaXMuaGFzRWxsaXBzaXMgPyB0aGlzLmVsbGlwc2lzRGltcy5sZW5ndGggLSAxIDogMCkpO1xuICAgICAgICB0aGlzLmFkZFN5bWJvbChzeW1ib2wsIGRpbXNbbmV4dERpbSsrXSwgaW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlaW5zdW1UZXJtO1xuICB9XG5cbiAgc3ltYm9sVG9JbmZvOiBNYXA8c3RyaW5nLCBTeW1ib2xJbmZvPjsgIC8vIEFsbCBzeW1ib2xzIGluIHRoZSBlcXVhdGlvblxuICBoYXNFbGxpcHNpczogYm9vbGVhbjsgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVxdWF0aW9uIGhhcyBlbGxpcHNpcyBvciBub3RcbiAgZWxsaXBzaXNEaW1zOiBudW1iZXJbXTsgICAgICAgICAgICAgICAgIC8vIFRoZSBkaW1lbnNpb25zIG9mIHRoZSBlcXVhdGlvbiBlbGxpcHNpcyBjb3JyZXNwb25kcyB0by5cbiAgbGhzOiBFaW5zdW1UZXJtW107ICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm1zIG9uIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgZXF1YXRpb25cbiAgcmhzOiBFaW5zdW1UZXJtOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlcm0gb24gdGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiB0aGUgZXF1YXRpb25cbiAgb3V0cHV0RGltczogbnVtYmVyW107ICAgICAgICAgICAgICAgICAgIC8vIE91dHB1dCBkaW1lbnNpb25zIG9mIHRoZSBlcXVhdGlvblxufSAgLy8gRW5kIG9mIGNsYXNzIEVpbnN1bUVxdWF0aW9uXG5cbmNvbnN0IGFwcGVuZE1heCA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gbmFtZSArICdfbWF4JztcblxuY29uc3QgY3JlYXRlRWluc3VtUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dFNoYXBlczogQXJyYXk8cmVhZG9ubHkgbnVtYmVyW10+LCBkYXRhVHlwZTogbnVtYmVyLCBlaW5zdW1FcXVhdGlvbjogRWluc3VtRXF1YXRpb24sXG4gICAgIG91dHB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSk6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IHJhbmtzID0gaW5wdXRTaGFwZXMubWFwKChkaW1zKSA9PiBkaW1zLmxlbmd0aCk7XG4gICAgICBjb25zdCBpbnB1dFZhcnMgPSByYW5rcy5tYXAoKHJhbmssIGluZGV4KSA9PiBpbnB1dFZhcmlhYmxlKGBpbnB1dCR7aW5kZXh9YCwgZGF0YVR5cGUsIHJhbmspKTtcbiAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgICBjb25zdCB1bmlmb3Jtc1N5bWJvbHMgPVxuICAgICAgICAgIFsuLi5laW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8ua2V5cygpXS5maWx0ZXIoKHN5bWJvbCkgPT4gIWVpbnN1bUVxdWF0aW9uLnJocy5zeW1ib2xUb0luZGljZXMuaGFzKHN5bWJvbCkpO1xuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkeENvcHk6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGluaXRQcm9kID0gJ3ZhciBwcm9kID0gMS4wOyc7XG4gICAgICAgIGNvbnN0IGluaXRTdW0gPSAndmFyIHN1bSA9IDAuMDsnO1xuICAgICAgICBjb25zdCB1cGRhdGVTdW0gPSAnc3VtICs9IHByb2Q7JztcbiAgICAgICAgY29uc3QgcmVkdWNlT3BzU2V0SW5kaWNlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgcmVkdWNlT3BzTG9vcEhlYWRlcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IHJlZHVjZU9wc0xvb3BGb290ZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCByZWR1Y2VPcENvbXB1dGU6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGlzUmVkdWNlT3BzV2l0aG91dExvb3AgPSBlaW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8uc2l6ZSA9PT0gZWluc3VtRXF1YXRpb24ucmhzLnN5bWJvbFRvSW5kaWNlcy5zaXplO1xuICAgICAgICBlaW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8uZm9yRWFjaCgoaW5mbywgc3ltYm9sKSA9PiB7XG4gICAgICAgICAgaWYgKGVpbnN1bUVxdWF0aW9uLnJocy5zeW1ib2xUb0luZGljZXMuaGFzKHN5bWJvbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEluZGV4ID0gZWluc3VtRXF1YXRpb24ucmhzLnN5bWJvbFRvSW5kaWNlcy5nZXQoc3ltYm9sKT8uWzBdO1xuICAgICAgICAgICAgaWYgKG91dHB1dEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgZWluc3VtRXF1YXRpb24ubGhzLmZvckVhY2goKHRlcm0sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5mby5pbnB1dEluZGljZXMuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSB0ZXJtLnN5bWJvbFRvSW5kaWNlcy5nZXQoc3ltYm9sKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRpY2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN5bWJvbCBlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaW5kaWNlcy5mb3JFYWNoKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZHhDb3B5LnB1c2goYCR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhcnNbaV0uaW5kaWNlc1NldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgaW5wdXQke2l9SW5kaWNlc2AsIGluZGV4LCBvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0SW5kaWNlcycsIG91dHB1dEluZGV4KSl9YCk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlaW5zdW1FcXVhdGlvbi5saHMuZm9yRWFjaCgodGVybSwgaSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaW5mby5pbnB1dEluZGljZXMuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gdGVybS5zeW1ib2xUb0luZGljZXMuZ2V0KHN5bWJvbCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGljZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN5bWJvbCBlcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmRpY2VzLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICByZWR1Y2VPcHNTZXRJbmRpY2VzLnB1c2goYCR7aW5wdXRWYXJzW2ldLmluZGljZXNTZXQoYGlucHV0JHtpfUluZGljZXNgLCBpbmRleCwgYCR7c3ltYm9sfWApfWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlZHVjZU9wQ29tcHV0ZS5wdXNoKGBwcm9kICo9ICR7aW5wdXRWYXJzW2ldLmdldEJ5SW5kaWNlcyhgaW5wdXQke2l9SW5kaWNlc2ApfTtgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZWR1Y2VPcHNMb29wSGVhZGVycy5wdXNoKFxuICAgICAgICAgICAgICAgIGBmb3IodmFyICR7c3ltYm9sfTogdTMyID0gMDsgJHtzeW1ib2x9IDwgdW5pZm9ybXMuJHthcHBlbmRNYXgoc3ltYm9sKX07ICR7c3ltYm9sfSsrKSB7YCk7XG4gICAgICAgICAgICByZWR1Y2VPcHNMb29wRm9vdGVycy5wdXNoKCd9Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVkdWNlT3BzID0gaXNSZWR1Y2VPcHNXaXRob3V0TG9vcCA/XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIC4uLmlkeENvcHksXG4gICAgICAgICAgICAgIGBsZXQgc3VtID0gJHtpbnB1dFZhcnMubWFwKChpbnB1dFZhciwgaSkgPT4gaW5wdXRWYXIuZ2V0QnlJbmRpY2VzKGBpbnB1dCR7aX1JbmRpY2VzYCkpLmpvaW4oJyAqICcpfTtgXG4gICAgICAgICAgICBdIDpcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgLi4uaWR4Q29weSxcbiAgICAgICAgICAgICAgaW5pdFN1bSxcbiAgICAgICAgICAgICAgLi4ucmVkdWNlT3BzTG9vcEhlYWRlcnMsXG4gICAgICAgICAgICAgIC4uLnJlZHVjZU9wc1NldEluZGljZXMsXG4gICAgICAgICAgICAgIGluaXRQcm9kLFxuICAgICAgICAgICAgICAuLi5yZWR1Y2VPcENvbXB1dGUsXG4gICAgICAgICAgICAgIHVwZGF0ZVN1bSxcbiAgICAgICAgICAgICAgLi4ucmVkdWNlT3BzTG9vcEZvb3RlcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgJHtcbiAgICAgICAgICAgIHNoYWRlckhlbHBlclxuICAgICAgICAgICAgICAgIC5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zU3ltYm9scy5tYXAoKHN5bWJvbCkgPT4gKHtuYW1lOiBgJHthcHBlbmRNYXgoc3ltYm9sKX1gLCB0eXBlOiAndTMyJ30pKSlcbiAgICAgICAgICAgICAgICAucmVnaXN0ZXJVbmlmb3JtKCdvdXRwdXRTaXplJywgJ3UzMicpXG4gICAgICAgICAgICAgICAgLmRlY2xhcmVWYXJpYWJsZXMoLi4uaW5wdXRWYXJzLCBvdXRwdXQpfVxuXG4gICAgICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dFNpemUnKX1cbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuICAgICAgICAgICAgJHtpbnB1dFZhcnMubWFwKChfdmFyLCBpKSA9PiBgdmFyIGlucHV0JHtpfUluZGljZXM6ICR7aW5wdXRWYXJzW2ldLnR5cGUuaW5kaWNlc307YCkuam9pbignXFxuJyl9XG4gICAgICAgICAgICAke3JlZHVjZU9wcy5qb2luKCdcXG4nKX07XG4gICAgICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsICdzdW0nKX07XG4gICAgICAgICAgfWA7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0VpbnN1bScsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogZWluc3VtRXF1YXRpb24uZXF1YXRpb24sIGlucHV0RGVwZW5kZW5jaWVzOiBpbnB1dFNoYXBlcy5tYXAoKCkgPT4gJ3JhbmsnKX0sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+IHtcbiAgICAgICAgICAvLyBUaGUgc3ltYm9scyBmcm9tIHVuaWZvcm1TeW1ib2xzIGFycmF5IGFyZSBndWFyYW50ZWVkIHRvIGV4aXN0IGluIGVpbnN1bUVxdWF0aW9ucy5zeW1ib2xUb0luZm8gbWFwLiBUaGVcbiAgICAgICAgICAvLyBmaWx0ZXIgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgZGltVmFsdWUgaXMgbmV2ZXIgMC5cbiAgICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXNJbml0OiBQcm9ncmFtVW5pZm9ybVtdID1cbiAgICAgICAgICAgICAgdW5pZm9ybXNTeW1ib2xzLmZpbHRlcigoc3ltYm9sKSA9PiBlaW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8uaGFzKHN5bWJvbCkpXG4gICAgICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgICAgICAgIChzeW1ib2wpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICh7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBlaW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8uZ2V0KHN5bWJvbCk/LmRpbVZhbHVlIHx8IDB9KSk7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zSW5pdC5wdXNoKHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9KTtcbiAgICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPVxuICAgICAgICAgICAgICBpbnB1dFNoYXBlcy5tYXAoKGRpbXMsIF8pID0+IFsuLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhkaW1zKV0pXG4gICAgICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIGlucHV0UHJvZ3JhbVVuaWZvcm1zKSA9PiBhY2MuY29uY2F0KGlucHV0UHJvZ3JhbVVuaWZvcm1zKSwgcHJvZ3JhbVVuaWZvcm1zSW5pdCk7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGUpKTtcbiAgICAgICAgICByZXR1cm4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH07XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGVpbnN1bSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogRWluc3VtQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBjb25zdCBlaW5zdW1FcXVhdGlvbiA9IG5ldyBFaW5zdW1FcXVhdGlvbihjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcy5lcXVhdGlvbik7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gZWluc3VtRXF1YXRpb24ub3V0cHV0RGltcztcbiAgY29uc3QgaW5wdXRTaGFwZXMgPSBjb250ZXh0LmlucHV0cy5tYXAoKGlucHV0LCBfKSA9PiBpbnB1dC5kaW1zKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVpbnN1bVByb2dyYW1JbmZvKGlucHV0U2hhcGVzLCBjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSwgZWluc3VtRXF1YXRpb24sIG91dHB1dFNoYXBlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VFaW5zdW1BdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRWluc3VtQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IGVxdWF0aW9uID0gKGF0dHJpYnV0ZXMuZXF1YXRpb24gYXMgc3RyaW5nKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7ZXF1YXRpb259KTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXJ9IGZyb20gJy4vY29tbW9uJztcblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwYW5kIHJlcXVpcmVzIDIgaW5wdXQuJyk7XG4gIH1cbiAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICBjb25zdCBzaGFwZSA9IEFycmF5LmZyb20oaW5wdXRzWzFdLmdldEJpZ0ludDY0QXJyYXkoKSwgTnVtYmVyKTtcblxuICBsZXQgc2hhcGVJbmRleCA9IHNoYXBlLmxlbmd0aCA8IGlucHV0U2hhcGUubGVuZ3RoID8gMCA6IHNoYXBlLmxlbmd0aCAtIGlucHV0U2hhcGUubGVuZ3RoO1xuICBsZXQgaW5wdXRTaGFwZUluZGV4ID0gaW5wdXRTaGFwZS5sZW5ndGggPCBzaGFwZS5sZW5ndGggPyAwIDogaW5wdXRTaGFwZS5sZW5ndGggLSBzaGFwZS5sZW5ndGg7XG4gIGZvciAoOyBzaGFwZUluZGV4IDwgc2hhcGUubGVuZ3RoICYmIGlucHV0U2hhcGVJbmRleCA8IGlucHV0U2hhcGUubGVuZ3RoOyArK3NoYXBlSW5kZXgsICsraW5wdXRTaGFwZUluZGV4KSB7XG4gICAgaWYgKHNoYXBlW3NoYXBlSW5kZXhdICE9PSBpbnB1dFNoYXBlW2lucHV0U2hhcGVJbmRleF0gJiYgc2hhcGVbc2hhcGVJbmRleF0gIT09IDEgJiZcbiAgICAgICAgaW5wdXRTaGFwZVtpbnB1dFNoYXBlSW5kZXhdICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGFuZCByZXF1aXJlcyBzaGFwZSB0byBiZSBicm9hZGNhc3RhYmxlIHRvIGlucHV0Jyk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBnZXRBZGp1c3RlZFNoYXBlID0gKHNoYXBlMTogcmVhZG9ubHkgbnVtYmVyW10sIHNoYXBlMjogcmVhZG9ubHkgbnVtYmVyW10pOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IGRpZmYgPSBzaGFwZTEubGVuZ3RoIC0gc2hhcGUyLmxlbmd0aDtcbiAgY29uc3Qgc2hhcGU6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZjsgKytpKSB7XG4gICAgc2hhcGUucHVzaChzaGFwZTFbaV0pO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGUyLmxlbmd0aDsgKytpKSB7XG4gICAgc2hhcGUucHVzaChzaGFwZTJbaV0gPT09IDEgPyBzaGFwZTFbaSArIGRpZmZdIDogc2hhcGUyW2ldKTtcbiAgfVxuICByZXR1cm4gc2hhcGU7XG59O1xuXG5jb25zdCBjYWxjdWxhdGVPdXRwdXRTaGFwZSA9IChpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgc2hhcGU6IHJlYWRvbmx5IG51bWJlcltdKTogbnVtYmVyW10gPT5cbiAgICAoaW5wdXRTaGFwZS5sZW5ndGggPiBzaGFwZS5sZW5ndGgpID8gZ2V0QWRqdXN0ZWRTaGFwZShpbnB1dFNoYXBlLCBzaGFwZSkgOiBnZXRBZGp1c3RlZFNoYXBlKHNoYXBlLCBpbnB1dFNoYXBlKTtcblxuXG5jb25zdCBjcmVhdGVFeHBhbmRQcm9ncmFtSW5mbyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IFByb2dyYW1JbmZvID0+IHtcbiAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICBjb25zdCBzaGFwZSA9IEFycmF5LmZyb20oaW5wdXRzWzFdLmdldEJpZ0ludDY0QXJyYXkoKSwgTnVtYmVyKTtcbiAgY29uc3Qgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gY2FsY3VsYXRlT3V0cHV0U2hhcGUoaW5wdXRTaGFwZSwgc2hhcGUpO1xuICBjb25zdCBkYXRhVHlwZSA9IGlucHV0c1swXS5kYXRhVHlwZTtcbiAgY29uc3QgY29tcG9uZW50cyA9IGRhdGFUeXBlID09PSBEYXRhVHlwZS5ib29sID8gNCA6IDE7XG4gIGNvbnN0IG91dHB1dFNpemUgPSBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gY29tcG9uZW50cyk7XG5cbiAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKCdpbnB1dCcsIGRhdGFUeXBlLCBpbnB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgIGxldCBhc3NpZ25tZW50OiBzdHJpbmc7XG4gICAgaWYgKGRhdGFUeXBlID09PSBEYXRhVHlwZS5ib29sKSB7XG4gICAgICBjb25zdCBzaW5nbGVBc3NpZ25tZW50ID0gKHJlc1N0cjogc3RyaW5nLCB4OiBudW1iZXIsIHR5cGVDYXN0ID0gJycpID0+IGBcbiAgICAgICAgICBsZXQgb3V0cHV0SW5kaWNlcyR7eH0gPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoYG91dHB1dE9mZnNldCArICR7eH11YCl9O1xuICAgICAgICAgIGxldCBvZmZzZXQke3h9ID0gJHtpbnB1dC5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldChgb3V0cHV0SW5kaWNlcyR7eH1gLCBvdXRwdXQpfTtcbiAgICAgICAgICBsZXQgaW5kZXgke3h9ID0gb2Zmc2V0JHt4fSAvIDR1O1xuICAgICAgICAgIGxldCBjb21wb25lbnQke3h9ID0gb2Zmc2V0JHt4fSAlIDR1O1xuICAgICAgICAgICR7cmVzU3RyfVske3h9XSA9ICR7dHlwZUNhc3R9KCR7aW5wdXQuZ2V0QnlPZmZzZXQoYGluZGV4JHt4fWApfVtjb21wb25lbnQke3h9XSk7XG4gICAgICAgIGA7XG4gICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgICBsZXQgb3V0cHV0T2Zmc2V0ID0gZ2xvYmFsX2lkeCAqICR7Y29tcG9uZW50c307XG4gICAgICAgIHZhciBkYXRhID0gdmVjNDx1MzI+KDApO1xuICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoJ2RhdGEnLCAwLCAndTMyJyl9XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnZGF0YScsIDEsICd1MzInKX1cbiAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KCdkYXRhJywgMiwgJ3UzMicpfVxuICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoJ2RhdGEnLCAzLCAndTMyJyl9XG4gICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgJ2RhdGEnKX1cbiAgICAgIH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgICBsZXQgb3V0cHV0SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcbiAgICAgICAgbGV0IGlucHV0T2Zmc2V0ID0gJHtpbnB1dC5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldCgnb3V0cHV0SW5kaWNlcycsIG91dHB1dCl9O1xuICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIGlucHV0LmdldEJ5T2Zmc2V0KCdpbnB1dE9mZnNldCcpKX1cbiAgICAgIH1gO1xuICAgIH1cbiAgICByZXR1cm4gYFxuICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgndmVjX3NpemUnLCAndTMyJykuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy52ZWNfc2l6ZScpfVxuICAgICR7YXNzaWdubWVudH1gO1xuICB9O1xuXG4gIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9XG4gICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIG91dHB1dFNoYXBlKV07XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0V4cGFuZCcsXG4gICAgc2hhZGVyQ2FjaGU6IHtoaW50OiBgJHtvdXRwdXRTaGFwZS5sZW5ndGh9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuayddfSxcbiAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICB9KVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGV4cGFuZCA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFeHBhbmRQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cyksIHtpbnB1dHM6IFswXX0pO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mb30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2lucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlLCBXT1JLR1JPVVBfU0laRX0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0ICogYXMgdW5hcnkgZnJvbSAnLi91bmFyeS1vcCc7XG5cbi8vIEdFTFUgaXMgZGVmaW5lZCBhcyBZPTAuNSpYKigxK3RhbmgoMC43OTc4ODUqWCswLjAzNTY3NypYKlgqWCkpLCB3aGVyZSBYIG1heSBwcmUtYWRkIGEgYmlhcy5cblxuY29uc3QgY3JlYXRlRmFzdEdlbHVQcm9ncmFtSW5mbyA9IChpbnB1dFRlbnNvcnM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IFByb2dyYW1JbmZvID0+IHtcbiAgY29uc3QgZGF0YVR5cGUgPSBpbnB1dFRlbnNvcnNbMF0uZGF0YVR5cGU7XG4gIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShpbnB1dFRlbnNvcnNbMF0uZGltcyk7XG4gIGNvbnN0IGJpYXNMZW5ndGggPSBTaGFwZVV0aWwuc2l6ZShpbnB1dFRlbnNvcnNbMV0uZGltcyk7XG4gIC8vIGNhbiBvbmx5IHVzZSB2ZWM0IHdoZW4gYmlhcyBsZW5ndGggaXMgbXVsdGlwbGUgb2YgNFxuICBjb25zdCB1c2VWZWM0ID0gYmlhc0xlbmd0aCAlIDQgPT09IDA7XG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgeCA9IGlucHV0VmFyaWFibGUoJ3gnLCBkYXRhVHlwZSwgWzFdLCA0KTtcbiAgICBjb25zdCBiaWFzID0gaW5wdXRWYXJpYWJsZSgnYmlhcycsIGRhdGFUeXBlLCBbMV0sIDQpO1xuICAgIGNvbnN0IHkgPSBvdXRwdXRWYXJpYWJsZSgneScsIGRhdGFUeXBlLCBbMV0sIDQpO1xuXG4gICAgY29uc3QgdW5pZm9ybXM6IFVuaWZvcm1zQXJyYXlUeXBlID0gW3tuYW1lOiAnb3V0cHV0X3ZlY19zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ2JpYXNfc2l6ZScsIHR5cGU6ICd1MzInfV07XG5cbiAgICBjb25zdCBzaW5nbGVFbGVtZW50QmlhcyA9IChpOiAwfDF8MnwzKSA9PiBgXG4gICAgICBsZXQgYmlhcyR7aX1fb2Zmc2V0OiB1MzIgPSAoZ2xvYmFsX2lkeCAqIDQgKyAke2l9KSAlIHVuaWZvcm1zLmJpYXNfc2l6ZTtcbiAgICAgIGxldCBiaWFzJHtpfSA9ICR7Ymlhcy5nZXRCeU9mZnNldChgYmlhcyR7aX1fb2Zmc2V0IC8gNGApfVtiaWFzJHtpfV9vZmZzZXQgJSA0XTtgO1xuICAgIGNvbnN0IGJpYXNHZXRFeHByZXNzaW9uID0gdXNlVmVjNCA/XG4gICAgICAgIGBcbiAgICAgIGxldCBiaWFzID0gJHtiaWFzLmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4ICUgKHVuaWZvcm1zLmJpYXNfc2l6ZSAvIDQpJyl9O2AgOlxuICAgICAgICBgJHtzaW5nbGVFbGVtZW50QmlhcygwKX0ke3NpbmdsZUVsZW1lbnRCaWFzKDEpfSR7c2luZ2xlRWxlbWVudEJpYXMoMil9JHtzaW5nbGVFbGVtZW50QmlhcygzKX1cbiAgICAgIGxldCBiaWFzID0gJHt4LnR5cGUudmFsdWV9KGJpYXMwLCBiaWFzMSwgYmlhczIsIGJpYXMzKTtgO1xuXG4gICAgcmV0dXJuIGAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKHgsIGJpYXMsIHkpfVxuXG4gICAgJHt1bmFyeS5mYXN0R2VsdUltcGwodGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShkYXRhVHlwZSkpfVxuXG4gICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFdPUktHUk9VUF9TSVpFKX1cbiAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF92ZWNfc2l6ZScpfVxuXG4gICAgICBsZXQgeCA9ICR7eC5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpfTtcbiAgICAgICR7Ymlhc0dldEV4cHJlc3Npb259XG4gICAgICBsZXQgeF9pbiA9IHggKyBiaWFzO1xuICAgICAgJHt5LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgdW5hcnkuZmFzdEdlbHVFeHByZXNzaW9uKCd4X2luJykpfVxuICAgIH1gO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0Zhc3RHZWx1V2l0aEJpYXMnLFxuICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7dXNlVmVjNH1gLCBpbnB1dERlcGVuZGVuY2llczogWyd0eXBlJywgJ3R5cGUnXX0sXG4gICAgZ2V0U2hhZGVyU291cmNlLFxuICAgIGdldFJ1bkRhdGE6IChpbnB1dHMpID0+ICh7XG4gICAgICBvdXRwdXRzOiBbe2RpbXM6IGlucHV0c1swXS5kaW1zLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlfV0sXG4gICAgICBwcm9ncmFtVW5pZm9ybXM6XG4gICAgICAgICAgW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNCl9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBiaWFzTGVuZ3RofV0sXG4gICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyBXT1JLR1JPVVBfU0laRSAvIDQpfVxuICAgIH0pXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZmFzdEdlbHUgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQpOiB2b2lkID0+IHtcbiAgaWYgKGNvbnRleHQuaW5wdXRzLmxlbmd0aCA8IDIgfHwgU2hhcGVVdGlsLnNpemUoY29udGV4dC5pbnB1dHNbMV0uZGltcykgPT09IDApIHtcbiAgICB1bmFyeS5mYXN0R2VsdShjb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRmFzdEdlbHVQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cykpO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7QXR0cmlidXRlV2l0aENhY2hlS2V5LCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdhdGhlckF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICBheGlzOiBudW1iZXI7XG59XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogdm9pZCA9PiB7XG4gIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dhdGhlciByZXF1aXJlcyAyIGlucHV0cy4nKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlR2F0aGVyUHJvZ3JhbUluZm8gPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEdhdGhlckF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgY29uc3QgaW5kaWNlc1NoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG5cbiAgY29uc3QgaW5wdXRSYW5rID0gaW5wdXRTaGFwZS5sZW5ndGg7XG4gIGNvbnN0IGF4aXMgPSBTaGFwZVV0aWwubm9ybWFsaXplQXhpcyhhdHRyaWJ1dGVzLmF4aXMsIGlucHV0UmFuayk7XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlLnNsaWNlKDApO1xuICBvdXRwdXRTaGFwZS5zcGxpY2UoYXhpcywgMSwgLi4uaW5kaWNlc1NoYXBlKTtcblxuICBjb25zdCBheGlzRGltTGltaXQgPSBpbnB1dFNoYXBlW2F4aXNdO1xuICBjb25zdCBjb21wb25lbnRzID0gaW5wdXRzWzBdLmRhdGFUeXBlID09PSBEYXRhVHlwZS5ib29sID8gNCA6IDE7XG4gIGNvbnN0IG91dHB1dFNpemUgPSBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gY29tcG9uZW50cyk7XG5cbiAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGF4aXNEaW1MaW1pdH0sXG4gICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogYXhpc30sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBpbnB1dHNbMV0uZGltcywgb3V0cHV0U2hhcGUpXG4gIF07XG5cbiAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGlucHV0VmFyaWFibGUoJ2RhdGEnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgY29uc3QgaW5kaWNlcyA9IGlucHV0VmFyaWFibGUoJ2lucHV0SW5kaWNlcycsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuXG4gICAgY29uc3QgY2FsY0RhdGFJbmRpY2VzID0gKHg6IG51bWJlcnxzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgaW5kaWNlc1JhbmsgPSBpbmRpY2VzU2hhcGUubGVuZ3RoO1xuICAgICAgbGV0IGNhbGNTdHIgPSBgdmFyIGluZGljZXNJbmRpY2VzJHt4fSAgPSAke2luZGljZXMudHlwZS5pbmRpY2VzfSgwKTtgO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzUmFuazsgaSsrKSB7XG4gICAgICAgIGNhbGNTdHIgKz0gYCR7aW5kaWNlc1JhbmsgPiAxID8gYGluZGljZXNJbmRpY2VzJHt4fVske2l9XWAgOiBgaW5kaWNlc0luZGljZXMke3h9YH0gPSAke1xuICAgICAgICAgICAgb3V0cHV0U2hhcGUubGVuZ3RoID4gMSA/IGBvdXRwdXRJbmRpY2VzJHt4fVt1bmlmb3Jtcy5heGlzICsgJHtpfV1gIDogYG91dHB1dEluZGljZXMke3h9YH07YDtcbiAgICAgIH1cbiAgICAgIGNhbGNTdHIgKz0gYFxuICAgICAgICAgIHZhciBpZHgke3h9ID0gJHtpbmRpY2VzLmdldEJ5SW5kaWNlcyhgaW5kaWNlc0luZGljZXMke3h9YCl9O1xuICAgICAgICAgIGlmIChpZHgke3h9IDwgMCkge1xuICAgICAgICAgICAgaWR4JHt4fSA9IGlkeCR7eH0gKyB1bmlmb3Jtcy5heGlzRGltTGltaXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBkYXRhSW5kaWNlcyR7eH0gOiAke2RhdGEudHlwZS5pbmRpY2VzfTtcbiAgICAgICAgYDtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gMDsgaSA8IGlucHV0UmFuazsgaSsrKSB7XG4gICAgICAgIGlmIChpID09PSBheGlzKSB7XG4gICAgICAgICAgY2FsY1N0ciArPSBgJHtpbnB1dFJhbmsgPiAxID8gYGRhdGFJbmRpY2VzJHt4fVske2l9XWAgOiBgZGF0YUluZGljZXMke3h9YH0gPSB1MzIoaWR4JHt4fSk7YDtcbiAgICAgICAgICBqICs9IGluZGljZXNSYW5rO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGNTdHIgKz0gYCR7aW5wdXRSYW5rID4gMSA/IGBkYXRhSW5kaWNlcyR7eH1bJHtpfV1gIDogYGRhdGFJbmRpY2VzJHt4fWB9ID0gJHtcbiAgICAgICAgICAgICAgb3V0cHV0U2hhcGUubGVuZ3RoID4gMSA/IGBvdXRwdXRJbmRpY2VzJHt4fVske2p9XWAgOiBgb3V0cHV0SW5kaWNlcyR7eH1gfTtgO1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNhbGNTdHI7XG4gICAgfTtcbiAgICBsZXQgYXNzaWdubWVudDogc3RyaW5nO1xuICAgIGlmIChpbnB1dHNbMF0uZGF0YVR5cGUgPT09IERhdGFUeXBlLmJvb2wpIHtcbiAgICAgIGNvbnN0IHNpbmdsZUFzc2lnbm1lbnQgPSAocmVzU3RyOiBzdHJpbmcsIHg6IG51bWJlciwgdHlwZUNhc3QgPSAnJykgPT4gYFxuICAgICAgICAgIGxldCBvdXRwdXRJbmRpY2VzJHt4fSA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcyhgb3V0cHV0T2Zmc2V0ICsgJHt4fXVgKX07XG4gICAgICAgICAgJHtjYWxjRGF0YUluZGljZXMoeCl9O1xuICAgICAgICAgIGxldCBvZmZzZXQke3h9ID0gJHtkYXRhLmluZGljZXNUb09mZnNldChgZGF0YUluZGljZXMke3h9YCl9O1xuICAgICAgICAgIGxldCBpbmRleCR7eH0gPSBvZmZzZXQke3h9IC8gNHU7XG4gICAgICAgICAgbGV0IGNvbXBvbmVudCR7eH0gPSBvZmZzZXQke3h9ICUgNHU7XG4gICAgICAgICAgJHtyZXNTdHJ9WyR7eH1dID0gJHt0eXBlQ2FzdH0oJHtkYXRhLmdldEJ5T2Zmc2V0KGBpbmRleCR7eH1gKX1bY29tcG9uZW50JHt4fV0pO1xuICAgICAgICBgO1xuICAgICAgYXNzaWdubWVudCA9IGBcbiAgICAgICAgbGV0IG91dHB1dE9mZnNldCA9IGdsb2JhbF9pZHggKiAke2NvbXBvbmVudHN9O1xuICAgICAgICB2YXIgdmFsdWUgPSB2ZWM0PHUzMj4oMCk7XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgndmFsdWUnLCAwLCAndTMyJyl9XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgndmFsdWUnLCAxLCAndTMyJyl9XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgndmFsdWUnLCAyLCAndTMyJyl9XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgndmFsdWUnLCAzLCAndTMyJyl9XG4gICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JywgJ3ZhbHVlJyl9XG4gICAgICBgO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgbGV0IG91dHB1dEluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgICAke2NhbGNEYXRhSW5kaWNlcygnJyl9O1xuICAgICAgbGV0IHZhbHVlID0gJHtkYXRhLmdldEJ5SW5kaWNlcygnZGF0YUluZGljZXMnKX07XG4gICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsICd2YWx1ZScpfTtcbiAgICAgIGA7XG4gICAgfVxuICAgIHJldHVybiBgXG4gICAgICAke1xuICAgICAgICBzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3JtKCdvdXRwdXRTaXplJywgJ3UzMicpXG4gICAgICAgICAgICAucmVnaXN0ZXJVbmlmb3JtKCdheGlzRGltTGltaXQnLCAnaTMyJylcbiAgICAgICAgICAgIC5yZWdpc3RlclVuaWZvcm0oJ2F4aXMnLCAndTMyJylcbiAgICAgICAgICAgIC5kZWNsYXJlVmFyaWFibGVzKGRhdGEsIGluZGljZXMsIG91dHB1dCl9XG4gICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0U2l6ZScpfVxuICAgICAgICAke2Fzc2lnbm1lbnR9XG4gICAgICB9YDtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnR2F0aGVyJyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGF0dHJpYnV0ZXMuY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnLCAncmFuayddfSxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9LFxuICAgICAgXSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICB9KSxcbiAgICBnZXRTaGFkZXJTb3VyY2UsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VHYXRoZXJBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogR2F0aGVyQXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7YXhpczogYXR0cmlidXRlcy5heGlzIGFzIG51bWJlcn0pO1xuXG5leHBvcnQgY29uc3QgZ2F0aGVyID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBHYXRoZXJBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IGNvbnRleHQuaW5wdXRzO1xuICB2YWxpZGF0ZUlucHV0cyhpbnB1dHMpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlR2F0aGVyUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeSwgUHJvZ3JhbVVuaWZvcm19IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlcn0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdhdGhlckVsZW1lbnRzQXR0cmlidXRlcyBleHRlbmRzIEF0dHJpYnV0ZVdpdGhDYWNoZUtleSB7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignR2F0aGVyRWxlbWVudHMgcmVxdWlyZXMgMiBpbnB1dHMuJyk7XG4gIH1cblxuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2F0aGVyRWxlbWVudHMgcmVxdWlyZXMgdGhhdCB0aGUgZGF0YSBpbnB1dCBiZSByYW5rID49IDEuJyk7XG4gIH1cblxuICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSBpbnB1dHNbMV0uZGltcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdhdGhlckVsZW1lbnRzIHJlcXVpcmVzIHRoYXQgdGhlIGRhdGEgaW5wdXQgYW5kXG4gICAgICAgICAgICAgICAgICAgICBpbmRpY2VzIGlucHV0IHRlbnNvcnMgYmUgb2Ygc2FtZSByYW5rLmApO1xuICB9XG59O1xuXG5jb25zdCBjcmVhdGVHYXRoZXJFbGVtZW50c1Byb2dyYW1JbmZvID1cbiAgICAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEdhdGhlckVsZW1lbnRzQXR0cmlidXRlcyk6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IGlucHV0T3V0cHV0RGF0YVR5cGUgPSBpbnB1dHNbMF0uZGF0YVR5cGU7XG4gICAgICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dFNoYXBlLmxlbmd0aDtcblxuICAgICAgY29uc3QgaW5kaWNlc1NoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG4gICAgICBjb25zdCBpbmRpY2VzRGF0YVR5cGUgPSBpbnB1dHNbMV0uZGF0YVR5cGU7XG4gICAgICBjb25zdCBheGlzID0gU2hhcGVVdGlsLm5vcm1hbGl6ZUF4aXMoYXR0cmlidXRlcy5heGlzLCBpbnB1dFJhbmspO1xuICAgICAgY29uc3QgYXhpc0RpbUxpbWl0ID0gaW5wdXRTaGFwZVtheGlzXTtcblxuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbmRpY2VzU2hhcGUuc2xpY2UoMCk7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ2lucHV0JywgaW5wdXRPdXRwdXREYXRhVHlwZSwgaW5wdXRSYW5rKTtcbiAgICAgIGNvbnN0IGluZGljZXMgPSBpbnB1dFZhcmlhYmxlKCdpbmRpY2VzSW5wdXQnLCBpbmRpY2VzRGF0YVR5cGUsIGluZGljZXNTaGFwZS5sZW5ndGgpO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0T3V0cHV0RGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG5cblxuICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBvdXRwdXRTaXplfSwge3R5cGU6IERhdGFUeXBlLmludDMyLCBkYXRhOiBheGlzRGltTGltaXR9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBheGlzfVxuICAgICAgXTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIGluZGljZXNTaGFwZSwgb3V0cHV0U2hhcGUpKTtcbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJywgJ3JhbmsnXTtcblxuICAgICAgLy8gaW50NjQgaW5kaWNlcyB3b3VsZCBiZSB0cmVhdGVkIGFzIGxpdHRsZSBlbmRpYW4gaTMyIHdpdGggYXNzdW1wdGlvbiB0aGV5IGZhbGwgaW4gaTMyIGxpbWl0c1xuICAgICAgLy8gVGhhdCBhc3N1bXB0aW9uIGlzIHNhZmUgYXMgaXQncyBub3QgcG9zc2libGUgdG8gYWxsb2NhdGUgPjJnYiBidWZmZXIgZm9yIGlucHV0IHRlbnNvclxuICAgICAgLy8gSW5wdXQgZGF0YSB3aWxsIGJlIHRyZWF0ZWQgYXMgdTMyIG9yIHR3byB1MzIgZm9yIDgtYnl0ZSB0ZW5zb3JzXG4gICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IGBcbiAgICAgICR7XG4gICAgICAgICAgc2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgnb3V0cHV0U2l6ZScsICd1MzInKVxuICAgICAgICAgICAgICAucmVnaXN0ZXJVbmlmb3JtKCdheGlzRGltTGltaXQnLCAnaTMyJylcbiAgICAgICAgICAgICAgLnJlZ2lzdGVyVW5pZm9ybSgnYXhpcycsICd1MzInKVxuICAgICAgICAgICAgICAuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgaW5kaWNlcywgb3V0cHV0KX1cbiAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0U2l6ZScpfVxuXG4gICAgICBsZXQgb3V0cHV0SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcblxuICAgICAgdmFyIGlkeCA9ICR7aW5kaWNlcy5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpfTtcbiAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgIGlkeCA9IGlkeCArIHVuaWZvcm1zLmF4aXNEaW1MaW1pdDtcbiAgICAgIH1cbiAgICAgIHZhciBpbnB1dEluZGljZXMgPSAke2lucHV0LnR5cGUuaW5kaWNlc30ob3V0cHV0SW5kaWNlcyk7XG4gICAgICAke2lucHV0LmluZGljZXNTZXQoJ2lucHV0SW5kaWNlcycsICd1bmlmb3Jtcy5heGlzJywgJ3UzMihpZHgpJyl9O1xuICAgICAgbGV0IHZhbHVlID0gJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0SW5kaWNlcycpfTtcblxuICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnLCAndmFsdWUnKX07XG4gIH1gO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnR2F0aGVyRWxlbWVudHMnLFxuICAgICAgICBzaGFkZXJDYWNoZToge2lucHV0RGVwZW5kZW5jaWVzfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH07XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlR2F0aGVyRWxlbWVudHNBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogR2F0aGVyRWxlbWVudHNBdHRyaWJ1dGVzID0+XG4gICAgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHtheGlzOiBhdHRyaWJ1dGVzLmF4aXMgYXMgbnVtYmVyfSk7XG5cbmV4cG9ydCBjb25zdCBnYXRoZXJFbGVtZW50cyA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogR2F0aGVyRWxlbWVudHNBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IGNvbnRleHQuaW5wdXRzO1xuICB2YWxpZGF0ZUlucHV0cyhpbnB1dHMpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlR2F0aGVyRWxlbWVudHNQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcykpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge0dlbW1VdGlsLCBTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3ksIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIEluZGljZXNIZWxwZXIsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuL2NvbW1vbic7XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogdm9pZCA9PiB7XG4gIGlmICghaW5wdXRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBpcyBtaXNzaW5nJyk7XG4gIH1cbiAgaWYgKGlucHV0cy5sZW5ndGggPCAyIHx8IGlucHV0cy5sZW5ndGggPiAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhaWQgaW5wdXQgbnVtYmVyLicpO1xuICB9XG5cbiAgLy8gJ0MnIGNhbiBiZSBvZiBkaW1lbnNpb25hbGl0eSAwLCAxIG9yIDIgb25seVxuICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gMyAmJiBpbnB1dHNbMl0uZGltcy5sZW5ndGggPiAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHNoYXBlIG9mIEMnKTtcbiAgfVxuXG4gIGlmICgoaW5wdXRzWzBdLmRhdGFUeXBlICE9PSBpbnB1dHNbMV0uZGF0YVR5cGUpIHx8XG4gICAgICAoaW5wdXRzLmxlbmd0aCA9PT0gMyAmJiBpbnB1dHNbMF0uZGF0YVR5cGUgIT09IGlucHV0c1syXS5kYXRhVHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IHR5cGVzIGFyZSBtaXNtYXRjaGVkJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VtbUF0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICB0cmFuc0E6IGJvb2xlYW47XG4gIHRyYW5zQjogYm9vbGVhbjtcbiAgYWxwaGE6IG51bWJlcjtcbiAgYmV0YTogbnVtYmVyO1xufVxuXG5jb25zdCBjcmVhdGVHZW1tUHJvZ3JhbUluZm8gPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEdlbW1BdHRyaWJ1dGVzKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBhU2hhcGUgPSBpbnB1dHNbMF0uZGltcy5zbGljZSgpO1xuICBjb25zdCBiU2hhcGUgPSBpbnB1dHNbMV0uZGltcy5zbGljZSgpO1xuICBjb25zdCBbTSwgTiwgS10gPSBHZW1tVXRpbC5nZXRTaGFwZU9mR2VtbVJlc3VsdChcbiAgICAgIGFTaGFwZSwgYXR0cmlidXRlcy50cmFuc0EsIGJTaGFwZSwgYXR0cmlidXRlcy50cmFuc0IsIGlucHV0cy5sZW5ndGggPT09IDMgPyBpbnB1dHNbMl0uZGltcyA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gW00sIE5dO1xuICBpZiAoIW91dHB1dFNoYXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IHVzZSBnZW1tIG9uIHRoZSBnaXZlbiB0ZW5zb3JzJyk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBNfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogTn0sXG4gICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogS30sIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5hbHBoYX0sXG4gICAge3R5cGU6IERhdGFUeXBlLmZsb2F0LCBkYXRhOiBhdHRyaWJ1dGVzLmJldGF9XG4gIF07XG4gIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWyd0eXBlJywgJ3R5cGUnXTtcbiAgaWYgKGlucHV0cy5sZW5ndGggPT09IDMpIHtcbiAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMl0uZGltcykpO1xuICAgIGlucHV0RGVwZW5kZW5jaWVzLnB1c2goJ3JhbmsnKTtcbiAgfVxuICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZSkpO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgIGxldCBsaW5lID0gJyc7XG4gICAgaWYgKGF0dHJpYnV0ZXMudHJhbnNBICYmIGF0dHJpYnV0ZXMudHJhbnNCKSB7XG4gICAgICBsaW5lID0gJ3ZhbHVlICs9IGFbayAqIHVuaWZvcm1zLk0gKyBtXSAqIGJbbiAqIHVuaWZvcm1zLksgKyBrXTsnO1xuICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy50cmFuc0EgJiYgIWF0dHJpYnV0ZXMudHJhbnNCKSB7XG4gICAgICBsaW5lID0gJ3ZhbHVlICs9IGFbayAqIHVuaWZvcm1zLk0gKyBtXSAqIGJbayAqIHVuaWZvcm1zLk4gKyBuXTsnO1xuICAgIH0gZWxzZSBpZiAoIWF0dHJpYnV0ZXMudHJhbnNBICYmIGF0dHJpYnV0ZXMudHJhbnNCKSB7XG4gICAgICBsaW5lID0gJ3ZhbHVlICs9IGFbbSAqIHVuaWZvcm1zLksgKyBrXSAqIGJbbiAqIHVuaWZvcm1zLksgKyBrXTsnO1xuICAgIH0gZWxzZSBpZiAoIWF0dHJpYnV0ZXMudHJhbnNBICYmICFhdHRyaWJ1dGVzLnRyYW5zQikge1xuICAgICAgbGluZSA9ICd2YWx1ZSArPSBhW20gKiB1bmlmb3Jtcy5LICsga10gKiBiW2sgKiB1bmlmb3Jtcy5OICsgbl07JztcbiAgICB9XG5cbiAgICBjb25zdCBjYWxjdWxhdGVBbHBoYSA9IGF0dHJpYnV0ZXMuYWxwaGEgPT09IDEgPyAnJyA6ICd2YWx1ZSAqPSB1bmlmb3Jtcy5hbHBoYTsnO1xuICAgIGNvbnN0IGEgPSBpbnB1dFZhcmlhYmxlKCdhJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcyk7XG4gICAgY29uc3QgYiA9IGlucHV0VmFyaWFibGUoJ2InLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zKTtcbiAgICBjb25zdCBkYXRhVHlwZSA9IGEudHlwZS52YWx1ZTtcbiAgICBsZXQgYzogSW5kaWNlc0hlbHBlcnxudWxsID0gbnVsbDtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSBbYSwgYl07XG4gICAgaWYgKGlucHV0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIGMgPSBpbnB1dFZhcmlhYmxlKCdjJywgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcy5sZW5ndGgpO1xuICAgICAgdmFyaWFibGVzLnB1c2goYyk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgdmFyaWFibGVzLnB1c2gob3V0cHV0KTtcbiAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbXG4gICAgICB7bmFtZTogJ291dHB1dF9zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ00nLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnTicsIHR5cGU6ICd1MzInfSwge25hbWU6ICdLJywgdHlwZTogJ3UzMid9LFxuICAgICAge25hbWU6ICdhbHBoYScsIHR5cGU6ICdmMzInfSwge25hbWU6ICdiZXRhJywgdHlwZTogJ2YzMid9XG4gICAgXTtcbiAgICByZXR1cm4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLnZhcmlhYmxlcyl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0X3NpemUnKX1cblxuICAgIGxldCBtID0gZ2xvYmFsX2lkeCAvIHVuaWZvcm1zLk47XG4gICAgbGV0IG4gPSBnbG9iYWxfaWR4ICUgdW5pZm9ybXMuTjtcblxuICAgIHZhciB2YWx1ZSA9ICR7ZGF0YVR5cGV9KDApO1xuICAgIGZvciAodmFyIGs6IHUzMiA9IDB1OyBrIDwgdW5pZm9ybXMuSzsgaysrKSB7XG4gICAgICAke2xpbmV9XG4gICAgfVxuXG4gICAgJHtjYWxjdWxhdGVBbHBoYX1cbiAgICAkeygoKSA9PiB7XG4gICAgICBpZiAoYyAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBgbGV0IGNPZmZzZXQgPSAke2MuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoJ3ZlYzIobSwgbiknLCBvdXRwdXQpfTsgdmFsdWUgKz0gJHtcbiAgICAgICAgICAgIGRhdGFUeXBlfSh1bmlmb3Jtcy5iZXRhKSAqICR7Yy5nZXRCeU9mZnNldCgnY09mZnNldCcpfTtgO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH0pKCl9XG4gICAgb3V0cHV0W2dsb2JhbF9pZHhdID0gdmFsdWU7XG4gIH1gO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0dlbW0nLFxuICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX1gLCBpbnB1dERlcGVuZGVuY2llc30sXG4gICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICB9KSxcbiAgICBnZXRTaGFkZXJTb3VyY2UsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VHZW1tQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEdlbW1BdHRyaWJ1dGVzID0+IHtcbiAgY29uc3QgdHJhbnNBID0gYXR0cmlidXRlcy50cmFuc0EgYXMgYm9vbGVhbjtcbiAgY29uc3QgdHJhbnNCID0gYXR0cmlidXRlcy50cmFuc0IgYXMgYm9vbGVhbjtcbiAgY29uc3QgYWxwaGEgPSBhdHRyaWJ1dGVzLmFscGhhIGFzIG51bWJlcjtcbiAgY29uc3QgYmV0YSA9IGF0dHJpYnV0ZXMuYmV0YSBhcyBudW1iZXI7XG4gIHJldHVybiB7dHJhbnNBLCB0cmFuc0IsIGFscGhhLCBiZXRhLCBjYWNoZUtleTogYCR7YXR0cmlidXRlcy50cmFuc0F9OyR7YXR0cmlidXRlcy50cmFuc0J9OyR7YXR0cmlidXRlcy5hbHBoYSA9PT0gMX1gfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW1tID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBHZW1tQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVHZW1tUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5LCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBmaWxsVmVjdG9yLCBnZXRNYXhDb21wb25lbnRzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCBzdW1WZWN0b3IsIHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZSwgVW5pZm9ybXNBcnJheVR5cGV9IGZyb20gJy4vY29tbW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZU5vcm1BdHRyaWJ1dGVzIHtcbiAgZXBzaWxvbjogbnVtYmVyO1xuICBmb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG59XG5cbmNvbnN0IGNyZWF0ZUluc3RhbmNlTm9ybVByb2dyYW1JbmZvID1cbiAgICAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEluc3RhbmNlTm9ybUF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCB4U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0geFNoYXBlO1xuICAgICAgY29uc3QgYXhpcyA9IDI7XG4gICAgICBjb25zdCBub3JtQ291bnQgPSBTaGFwZVV0aWwuc2l6ZVRvRGltZW5zaW9uKHhTaGFwZSwgYXhpcyk7XG4gICAgICBjb25zdCBub3JtU2l6ZSA9IFNoYXBlVXRpbC5zaXplRnJvbURpbWVuc2lvbih4U2hhcGUsIGF4aXMpO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMobm9ybVNpemUpO1xuICAgICAgY29uc3Qgbm9ybVBhY2tlZFNpemUgPSBub3JtU2l6ZSAvIGNvbXBvbmVudHM7XG4gICAgICBjb25zdCBpbnB1dFNoYXBlID0gW3hTaGFwZVswXSwgeFNoYXBlWzFdLCBub3JtUGFja2VkU2l6ZV07XG4gICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llczogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXSA9IFsncmFuaycsICd0eXBlJywgJ3R5cGUnXTtcbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9XG4gICAgICAgICAgW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG5vcm1TaXplfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogbm9ybVBhY2tlZFNpemV9XTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIGlucHV0U2hhcGUpKTtcblxuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKCd4JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gaW5wdXRWYXJpYWJsZSgnc2NhbGUnLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zKTtcbiAgICAgICAgY29uc3QgYmlhcyA9IGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgaW5wdXRTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBbeCwgc2NhbGUsIGJpYXMsIG91dHB1dF07XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0geC50eXBlLnZhbHVlO1xuICAgICAgICBjb25zdCBmMzJUeXBlID0gY29tcG9uZW50cyA9PT0gMSA/ICdmMzInIDogYHZlYyR7Y29tcG9uZW50c308ZjMyPmA7XG4gICAgICAgIGNvbnN0IHdvcmtncm91cFNpemUgPSA2NDtcblxuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbe25hbWU6ICdub3JtU2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdub3JtUGFja2VkU2l6ZScsIHR5cGU6ICd1MzInfV07XG4gICAgICAgIHJldHVybiBgXG4gIHZhcjx3b3JrZ3JvdXA+IG1lYW5TaGFyZWQgOiBmMzI7XG4gIHZhcjx3b3JrZ3JvdXA+IHNxdWFyZWROb3JtU2hhcmVkIDogZjMyO1xuICB2YXI8d29ya2dyb3VwPiB3b3JrZ3JvdXBTaGFyZWQgOiBhcnJheTwke2YzMlR5cGV9LCAke3dvcmtncm91cFNpemV9PjtcbiAgY29uc3Qgd29ya2dyb3VwU2l6ZSA9ICR7d29ya2dyb3VwU2l6ZX11O1xuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLnZhcmlhYmxlcyl9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCh3b3JrZ3JvdXBTaXplKX1cbiAgICBsZXQgbm9ybSA9IGdsb2JhbF9pZHggLyB3b3JrZ3JvdXBTaXplO1xuICAgIGxldCBiYXRjaCA9IG5vcm0gLyB1bmlmb3Jtcy54X3NoYXBlWzFdO1xuICAgIGxldCBjaGFubmVsID0gbm9ybSAlIHVuaWZvcm1zLnhfc2hhcGVbMV07XG4gICAgbGV0IGxvY2FsSW5kZXggPSBsb2NhbF9pZC54O1xuXG4gICAgLy8gaW5pdGlhbGl6ZSB3b3JrZ3JvdXAgbWVtb3J5XG4gICAgdmFyIGluaXRpYWwgPSAke2YzMlR5cGV9KDApO1xuICAgIGZvciAodmFyIGggPSBsb2NhbEluZGV4OyBoIDwgdW5pZm9ybXMubm9ybVBhY2tlZFNpemU7IGggKz0gd29ya2dyb3VwU2l6ZSkge1xuICAgICAgaW5pdGlhbCA9IGluaXRpYWwgKyAke2YzMlR5cGV9KCR7eC5nZXQoJ2JhdGNoJywgJ2NoYW5uZWwnLCAnaCcpfSk7XG4gICAgfVxuICAgIHdvcmtncm91cFNoYXJlZFtsb2NhbEluZGV4XSA9IGluaXRpYWw7XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBtZWFuIG9mIGN1cnJlbnQgY2hhbm5lbCBkYXRhLlxuICAgIGZvciAodmFyIGN1cnJTaXplID0gd29ya2dyb3VwU2l6ZSA+PiAxOyAgY3VyclNpemUgPiAwOyBjdXJyU2l6ZSA9IGN1cnJTaXplID4+IDEpIHtcbiAgICAgIGlmIChsb2NhbEluZGV4IDwgY3VyclNpemUpIHtcbiAgICAgICAgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdID0gd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdICsgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXggKyBjdXJyU2l6ZV07XG4gICAgICB9XG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgfVxuICAgIGlmIChsb2NhbEluZGV4ID09IDApIHtcbiAgICAgIG1lYW5TaGFyZWQgPSAke3N1bVZlY3Rvcignd29ya2dyb3VwU2hhcmVkWzBdJywgY29tcG9uZW50cyl9IC8gZjMyKHVuaWZvcm1zLm5vcm1TaXplKTtcbiAgICB9XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgLy8gcmVpbml0aWFsaXplIHdvcmtncm91cCBtZW1vcnkuXG4gICAgaW5pdGlhbCA9ICR7ZjMyVHlwZX0oMCk7XG4gICAgZm9yICh2YXIgaCA9IGxvY2FsSW5kZXg7IGggPCB1bmlmb3Jtcy5ub3JtUGFja2VkU2l6ZTsgaCArPSB3b3JrZ3JvdXBTaXplKSB7XG4gICAgICBsZXQgZGV2aWF0aW9uID0gICR7ZjMyVHlwZX0oJHt4LmdldCgnYmF0Y2gnLCAnY2hhbm5lbCcsICdoJyl9KSAtICR7ZjMyVHlwZX0obWVhblNoYXJlZCk7XG4gICAgICBpbml0aWFsID0gaW5pdGlhbCArIGRldmlhdGlvbiAqIGRldmlhdGlvbjtcbiAgICB9XG4gICAgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdID0gaW5pdGlhbDtcbiAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIHN1bSBvZiBzcXVhcmUgb2YgZGV2aWF0aW9uIG9mIGN1cnJlbnQgY2hhbm5lbCBkYXRhLlxuICAgIGZvciAodmFyIGN1cnJTaXplID0gd29ya2dyb3VwU2l6ZSA+PiAxOyAgY3VyclNpemUgPiAwOyBjdXJyU2l6ZSA9IGN1cnJTaXplID4+IDEpIHtcbiAgICAgIGlmIChsb2NhbEluZGV4IDwgY3VyclNpemUpIHtcbiAgICAgICAgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdID0gd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdICsgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXggKyBjdXJyU2l6ZV07XG4gICAgICB9XG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgfVxuICAgIGlmIChsb2NhbEluZGV4ID09IDApIHtcbiAgICAgIHNxdWFyZWROb3JtU2hhcmVkID0gJHtzdW1WZWN0b3IoJ3dvcmtncm91cFNoYXJlZFswXScsIGNvbXBvbmVudHMpfTtcbiAgICB9XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgbGV0IGludlN0ZERldiA9IGludmVyc2VTcXJ0KHNxdWFyZWROb3JtU2hhcmVkIC8gZjMyKHVuaWZvcm1zLm5vcm1TaXplKSArIGYzMigke2F0dHJpYnV0ZXMuZXBzaWxvbn0pKTtcbiAgICBsZXQgY2hhbm5lbFNjYWxlID0gaW52U3RkRGV2ICogZjMyKCR7c2NhbGUuZ2V0QnlPZmZzZXQoJ2NoYW5uZWwnKX0pO1xuICAgIGxldCBjaGFubmVsU2hpZnQgPSBmMzIoJHtiaWFzLmdldEJ5T2Zmc2V0KCdjaGFubmVsJyl9KSAtIG1lYW5TaGFyZWQgKiBjaGFubmVsU2NhbGU7XG4gICAgZm9yICh2YXIgaCA9IGxvY2FsSW5kZXg7IGggPCB1bmlmb3Jtcy5ub3JtUGFja2VkU2l6ZTsgaCArPSB3b3JrZ3JvdXBTaXplKSB7XG4gICAgICBsZXQgdmFsdWUgPSAke3guZ2V0KCdiYXRjaCcsICdjaGFubmVsJywgJ2gnKX0gKiAke2RhdGFUeXBlfSgke2YzMlR5cGV9KGNoYW5uZWxTY2FsZSkpICsgJHtkYXRhVHlwZX0oJHtcbiAgICAgICAgICAgIGYzMlR5cGV9KGNoYW5uZWxTaGlmdCkpO1xuICAgICAgJHtvdXRwdXQuc2V0KCdiYXRjaCcsICdjaGFubmVsJywgJ2gnLCAndmFsdWUnKX07XG4gICAgfVxuICB9YDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi57bmFtZTogJ0luc3RhbmNlTm9ybWFsaXphdGlvbid9LFxuICAgICAgICAvLyBUT0RPOiB1c2UgZXBzaWxvbiBhcyB1bmlmb3JtLiBDdXJyZW50bHkgZXBzaWxvbiBhcyB1bmlmb3JtIGZhaWxzIHRlc3RfaW5zdGFuY2Vub3JtX2Vwc2lsb24uXG4gICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7YXR0cmlidXRlcy5lcHNpbG9ufTske2NvbXBvbmVudHN9YCwgaW5wdXREZXBlbmRlbmNpZXN9LFxuICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgIHtkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogbm9ybUNvdW50fSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgfSksXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgIH07XG4gICAgfTtcblxuY29uc3QgY29tcHV0ZU1lYW4gPVxuICAgIChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgaW5wdXQ6IFRlbnNvclZpZXcsIHNjYWxlOiBUZW5zb3JWaWV3LCBiaWFzOiBUZW5zb3JWaWV3LCBuOiBudW1iZXIsIGg6IG51bWJlciwgYzogbnVtYmVyLFxuICAgICBlcHNpbG9uOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKGMpO1xuICAgICAgY29uc3QgV0cgPSA2NDtcbiAgICAgIC8vIHdlIHdpbGwgc3RvcmUgY2hhbm5lbCBzY2FsZSBhbmQgY2hhbm5lbCBzaGlmdCBpbiBbMiwgY29tcG9uZW50c10gbWF0cml4XG4gICAgICAvLyBvciBpbiB2ZWMyIHdoZW4gY29tcG9uZW50cyA9PSAxXG4gICAgICBjb25zdCBvdXRwdXRUeXBlID0gY29tcG9uZW50cyA9PT0gMSA/ICd2ZWMyZicgOiBgbWF0Mngke2NvbXBvbmVudHN9ZmA7XG4gICAgICBjb25zdCBzdW1DYXN0VHlwZSA9IGNvbXBvbmVudHMgPT09IDEgPyAnZjMyJyA6IGB2ZWMke2NvbXBvbmVudHN9ZmA7XG4gICAgICBjb25zdCBzZXRPdXRwdXRWYWx1ZSA9ICh2YXIxOiBzdHJpbmcsIHZhcjI6IHN0cmluZykgPT4gYCR7b3V0cHV0VHlwZX0oJHt2YXIxfSwgJHt2YXIyfSlgO1xuICAgICAgY29uc3QgdW5pdHNPZldvcmsgPSBuICogYyAvIGNvbXBvbmVudHM7XG4gICAgICBjb25zdCB3Z1NpemUgPSBNYXRoLmNlaWwoaCAvIFdHKTtcblxuICAgICAgY29uc3QgbWVhbklucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWyd0eXBlJ107XG4gICAgICBjb25zdCBtZWFuUHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiB3Z1NpemV9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBofSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogTWF0aC5mbG9vcihjIC8gY29tcG9uZW50cyl9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBNYXRoLmZsb29yKGggKiBjIC8gY29tcG9uZW50cyl9XG4gICAgICBdO1xuXG4gICAgICBjb25zdCBnZXRNZWFuU2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0SGVscGVyID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dC5kYXRhVHlwZSwgaW5wdXQuZGltcywgY29tcG9uZW50cyk7XG4gICAgICAgIHJldHVybiBgXG4gICR7c2hhZGVySGVscGVyLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXRIZWxwZXIpfVxuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IG91dHB1dCA6IGFycmF5PCR7b3V0cHV0VHlwZX0+O1xuICBzdHJ1Y3QgVW5pZm9ybXMge3dnX3NpemU6dTMyLCBIOnUzMiwgQzp1MzIsIGltYWdlX3NpemU6dTMyfTtcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDIpIHZhcjx1bmlmb3JtPiB1bmlmb3JtczogVW5pZm9ybXM7XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFdHKX1cbiAgICBsZXQgY3VycmVudEltYWdlTnVtYmVyID0gZ2xvYmFsX2lkeCAvICR7V0d9IC8gdW5pZm9ybXMuQztcbiAgICBsZXQgY3VycmVudENoYW5uZWxOdW1iZXIgPSAoZ2xvYmFsX2lkeCAvICR7V0d9KSAlIHVuaWZvcm1zLkM7XG4gICAgbGV0IHdnT2Zmc2V0ID0gbG9jYWxfaWQueCAqIHVuaWZvcm1zLndnX3NpemU7XG4gICAgaWYgKHdnT2Zmc2V0ID49IHVuaWZvcm1zLkgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgd2dNYXggPSBtaW4od2dPZmZzZXQgKyB1bmlmb3Jtcy53Z19zaXplLCB1bmlmb3Jtcy5IKTtcblxuICAgIGxldCBvZmZzZXQgPSBjdXJyZW50SW1hZ2VOdW1iZXIgKiB1bmlmb3Jtcy5pbWFnZV9zaXplICsgY3VycmVudENoYW5uZWxOdW1iZXI7XG4gICAgdmFyIHN1bSA9ICR7ZmlsbFZlY3RvcignZjMyJywgY29tcG9uZW50cyl9O1xuICAgIHZhciBzcXVhcmVkU3VtID0gJHtmaWxsVmVjdG9yKCdmMzInLCBjb21wb25lbnRzKX07XG4gICAgZm9yICh2YXIgaTogdTMyID0gd2dPZmZzZXQ7IGkgPCB3Z01heDsgaSsrKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9ICR7c3VtQ2FzdFR5cGV9KGlucHV0W29mZnNldCArIGkgKiB1bmlmb3Jtcy5DXSk7XG4gICAgICAgIHN1bSArPSB2YWx1ZTtcbiAgICAgICAgc3F1YXJlZFN1bSArPSB2YWx1ZSAqIHZhbHVlO1xuICAgIH1cbiAgICBvdXRwdXRbZ2xvYmFsX2lkeF0gPSAke3NldE91dHB1dFZhbHVlKCdzdW0nLCAnc3F1YXJlZFN1bScpfTtcbiAgfWA7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtZWFuVmFsdWVzID0gY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdJbnN0YW5jZU5vcm1Db21wdXRlTWVhbicsXG4gICAgICAgICAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke2NvbXBvbmVudHN9YCwgaW5wdXREZXBlbmRlbmNpZXM6IG1lYW5JbnB1dERlcGVuZGVuY2llc30sXG4gICAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAge2RpbXM6IFtuLCBjLCBXRywgMl0sIGRhdGFUeXBlOiBEYXRhVHlwZS5mbG9hdH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBuICogYyAvIGNvbXBvbmVudHN9LFxuICAgICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IG1lYW5Qcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZ2V0U2hhZGVyU291cmNlOiBnZXRNZWFuU2hhZGVyU291cmNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge2lucHV0czogW2lucHV0XSwgb3V0cHV0czogWy0xXX0pWzBdO1xuXG4gICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPSBbXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHVuaXRzT2ZXb3JrfSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogaH0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IE1hdGguZmxvb3IoYyAvIGNvbXBvbmVudHMpfSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogTWF0aC5mbG9vcihXRyAqIGMgLyBjb21wb25lbnRzKX1cbiAgICAgIF07XG4gICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llczogUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lbXSA9IFsndHlwZScsICd0eXBlJywgJ3R5cGUnXTtcbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICBjb25zdCBzY2FsZUhlbHBlciA9IGlucHV0VmFyaWFibGUoJ3NjYWxlJywgc2NhbGUuZGF0YVR5cGUsIHNjYWxlLmRpbXMsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBiaWFzSGVscGVyID0gaW5wdXRWYXJpYWJsZSgnYmlhcycsIGJpYXMuZGF0YVR5cGUsIGJpYXMuZGltcywgY29tcG9uZW50cyk7XG4gICAgICAgIHJldHVybiBgXG4gIEBncm91cCgwKSBAYmluZGluZygwKSB2YXI8c3RvcmFnZSwgcmVhZD4gaW5wdXQgOiBhcnJheTwke291dHB1dFR5cGV9PjtcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhcjxzdG9yYWdlLCByZWFkPiBzY2FsZSA6IGFycmF5PCR7c2NhbGVIZWxwZXIudHlwZS5zdG9yYWdlfT47XG4gIEBncm91cCgwKSBAYmluZGluZygyKSB2YXI8c3RvcmFnZSwgcmVhZD4gYmlhcyA6IGFycmF5PCR7Ymlhc0hlbHBlci50eXBlLnN0b3JhZ2V9PjtcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDMpIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiBvdXRwdXQgOiBhcnJheTwke291dHB1dFR5cGV9PjtcbiAgc3RydWN0IFVuaWZvcm1zIHt1bml0c19vZl93b3JrIDogdTMyLCBIOiB1MzIsIEMgOiB1MzIsIGltYWdlX3NpemUgOiB1MzJ9O1xuICBAZ3JvdXAoMCkgQGJpbmRpbmcoNCkgdmFyPHVuaWZvcm0+IHVuaWZvcm1zOiBVbmlmb3JtcztcblxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy51bml0c19vZl93b3JrJyl9XG4gICAgbGV0IGN1cnJlbnRJbWFnZU51bWJlciA9IGdsb2JhbF9pZHggLyB1bmlmb3Jtcy5DO1xuICAgIGxldCBjdXJyZW50Q2hhbm5lbE51bWJlciA9IGdsb2JhbF9pZHggJSB1bmlmb3Jtcy5DO1xuXG4gICAgbGV0IG9mZnNldCA9IGN1cnJlbnRJbWFnZU51bWJlciAqIHVuaWZvcm1zLmltYWdlX3NpemU7XG4gICAgdmFyIHN1bSA9ICR7ZmlsbFZlY3RvcignZjMyJywgY29tcG9uZW50cyl9O1xuICAgIHZhciBzcXVhcmVkU3VtID0gJHtmaWxsVmVjdG9yKCdmMzInLCBjb21wb25lbnRzKX07XG4gICAgZm9yICh2YXIgaTogdTMyID0gMDsgaSA8IG1pbigke1dHfSwgdW5pZm9ybXMuSCk7IGkrKykge1xuICAgICAgICBsZXQgdmFsdWUgPSBpbnB1dFtvZmZzZXQgKyBpICsgY3VycmVudENoYW5uZWxOdW1iZXIgKiAke1dHfV07XG4gICAgICAgIHN1bSArPSB2YWx1ZVswXTtcbiAgICAgICAgc3F1YXJlZFN1bSArPSB2YWx1ZVsxXTtcbiAgICB9XG4gICAgc3VtID0gc3VtIC8gZjMyKHVuaWZvcm1zLkgpO1xuICAgIHNxdWFyZWRTdW0gPSBzcXVhcmVkU3VtIC8gZjMyKHVuaWZvcm1zLkgpO1xuICAgIGxldCBpbnZTdGREZXYgPSBpbnZlcnNlU3FydChzcXVhcmVkU3VtIC0gc3VtICogc3VtICsgZjMyKCR7ZXBzaWxvbn0pKTtcbiAgICBsZXQgY2hhbm5lbFNjYWxlID0gaW52U3RkRGV2ICogJHtzdW1DYXN0VHlwZX0oc2NhbGVbY3VycmVudENoYW5uZWxOdW1iZXJdKTtcbiAgICBsZXQgY2hhbm5lbFNoaWZ0ID0gJHtzdW1DYXN0VHlwZX0oYmlhc1tjdXJyZW50Q2hhbm5lbE51bWJlcl0pIC0gc3VtICogY2hhbm5lbFNjYWxlO1xuXG4gICAgb3V0cHV0W2dsb2JhbF9pZHhdID0gJHtzZXRPdXRwdXRWYWx1ZSgnY2hhbm5lbFNjYWxlJywgJ2NoYW5uZWxTaGlmdCcpfTtcbiAgfWA7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnSW5zdGFuY2VOb3JtQ29tcHV0ZUNoYW5uZWxTY2FsZVNoaWZ0JyxcbiAgICAgICAgICAgIC8vIFRPRE86IHVzZSBlcHNpbG9uIGFzIHVuaWZvcm0uIEN1cnJlbnRseSBlcHNpbG9uIGFzIHVuaWZvcm0gZmFpbHMgdGVzdF9pbnN0YW5jZW5vcm1fZXBzaWxvbi5cbiAgICAgICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7Y29tcG9uZW50c307JHtlcHNpbG9ufWAsIGlucHV0RGVwZW5kZW5jaWVzfSxcbiAgICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgICAgICB7ZGltczogW24sIGMsIDJdLCBkYXRhVHlwZTogRGF0YVR5cGUuZmxvYXR9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKHVuaXRzT2ZXb3JrIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtpbnB1dHM6IFttZWFuVmFsdWVzLCBzY2FsZSwgYmlhc10sIG91dHB1dHM6IFstMV19KVswXTtcbiAgICB9O1xuXG5jb25zdCBjcmVhdGVJbnN0YW5jZU5vcm1OSFdDUHJvZ3JhbUluZm8gPVxuICAgIChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IEluc3RhbmNlTm9ybUF0dHJpYnV0ZXMpID0+IHtcbiAgICAgIGNvbnN0IHhTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSB4U2hhcGU7XG4gICAgICBjb25zdCBOID0geFNoYXBlWzBdO1xuICAgICAgY29uc3QgQyA9IHhTaGFwZVt4U2hhcGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBIID0gU2hhcGVVdGlsLnNpemVGcm9tRGltZW5zaW9uKHhTaGFwZSwgMSkgLyBDO1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMoQyk7XG4gICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gY29tcG9uZW50cztcbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9XG4gICAgICAgICAgW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IEh9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBNYXRoLmZsb29yKEMgLyBjb21wb25lbnRzKX1dO1xuICAgICAgY29uc3QgaW5wdXREZXBlbmRlbmNpZXM6IFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5W10gPSBbJ3R5cGUnLCAndHlwZSddO1xuICAgICAgLy8gZmlyc3QgY29tcHV0ZSBtZWFuXG4gICAgICBjb25zdCBjaGFubmVsU2NhbGVTaGlmdCA9IGNvbXB1dGVNZWFuKGNvbnRleHQsIGlucHV0c1swXSwgaW5wdXRzWzFdLCBpbnB1dHNbMl0sIE4sIEgsIEMsIGF0dHJpYnV0ZXMuZXBzaWxvbik7XG4gICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgY29uc3Qgc2NhbGVUeXBlID0gY29tcG9uZW50cyA9PT0gMSA/ICd2ZWMyZicgOiBgbWF0Mngke2NvbXBvbmVudHN9ZmA7XG4gICAgICAgIGNvbnN0IHNjYWxlQ2FzdFR5cGUgPSBjb21wb25lbnRzID09PSAxID8gZGF0YVR5cGUgOiBgdmVjJHtjb21wb25lbnRzfTwke2RhdGFUeXBlfT5gO1xuXG4gICAgICAgIGNvbnN0IGlucHV0SGVscGVyID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0SGVscGVyID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUsIGNvbXBvbmVudHMpO1xuXG4gICAgICAgIHJldHVybiBgXG4gIEBncm91cCgwKSBAYmluZGluZygwKSB2YXI8c3RvcmFnZSwgcmVhZD4gaW5wdXQgOiBhcnJheTwke2lucHV0SGVscGVyLnR5cGUuc3RvcmFnZX0+O1xuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyPHN0b3JhZ2UsIHJlYWQ+IHNjYWxlSW5wdXQgOiBhcnJheTwke3NjYWxlVHlwZX0+O1xuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMikgdmFyPHN0b3JhZ2UsIHJlYWRfd3JpdGU+IG91dHB1dCA6IGFycmF5PCR7b3V0cHV0SGVscGVyLnR5cGUuc3RvcmFnZX0+O1xuICBzdHJ1Y3QgVW5pZm9ybXMge0g6IHUzMiwgQyA6IHUzMn07XG4gIEBncm91cCgwKSBAYmluZGluZygzKSB2YXI8dW5pZm9ybT4gdW5pZm9ybXM6IFVuaWZvcm1zO1xuXG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgIGxldCBjdXJyZW50SW1hZ2VOdW1iZXIgPSBnbG9iYWxfaWR4IC8gKHVuaWZvcm1zLkMgKiB1bmlmb3Jtcy5IKTtcbiAgICBsZXQgY3VycmVudENoYW5uZWxOdW1iZXIgPSBnbG9iYWxfaWR4ICUgdW5pZm9ybXMuQztcblxuICAgIGxldCBzY2FsZU9mZnNldCA9IGN1cnJlbnRJbWFnZU51bWJlciAqIHVuaWZvcm1zLkMgKyBjdXJyZW50Q2hhbm5lbE51bWJlcjtcbiAgICBsZXQgc2NhbGUgPSBzY2FsZUlucHV0W3NjYWxlT2Zmc2V0XTtcbiAgICBvdXRwdXRbZ2xvYmFsX2lkeF0gPSBmbWEoaW5wdXRbZ2xvYmFsX2lkeF0sICR7c2NhbGVDYXN0VHlwZX0oc2NhbGVbMF0pLCAke3NjYWxlQ2FzdFR5cGV9KHNjYWxlWzFdKSk7XG4gIH1gO1xuICAgICAgfTtcbiAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnSW5zdGFuY2VOb3JtYWxpemF0aW9uTkhXQycsXG4gICAgICAgICAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke2NvbXBvbmVudHN9YCwgaW5wdXREZXBlbmRlbmNpZXN9LFxuICAgICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge2lucHV0czogW2lucHV0c1swXSwgY2hhbm5lbFNjYWxlU2hpZnRdfSk7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGluc3RhbmNlTm9ybSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogSW5zdGFuY2VOb3JtQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBpZiAoYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJykge1xuICAgIGNyZWF0ZUluc3RhbmNlTm9ybU5IV0NQcm9ncmFtSW5mbyhjb250ZXh0LCBjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUluc3RhbmNlTm9ybVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKSk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5LCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Nhc3RUb0YzMiwgZmlsbFZlY3RvciwgZ2V0TWF4Q29tcG9uZW50cywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgc3VtVmVjdG9yLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlLH0gZnJvbSAnLi9jb21tb24nO1xuXG5pbnRlcmZhY2UgTGF5ZXJOb3JtQXR0cmlidXRlcyB7XG4gIHNpbXBsaWZpZWQ6IGJvb2xlYW47XG4gIGF4aXM6IG51bWJlcjtcbiAgZXBzaWxvbjogbnVtYmVyO1xufVxuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFcnJvcignbGF5ZXJOb3JtIHJlcXVpcmVzIGF0IGxlYXN0IDIgaW5wdXRzLicpO1xuICB9XG59O1xuXG5jb25zdCBjcmVhdGVMYXllck5vcm1Qcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBMYXllck5vcm1BdHRyaWJ1dGVzLCBvdXRwdXRDb3VudDogbnVtYmVyKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3Qgc2ltcGxpZmllZCA9IGF0dHJpYnV0ZXMuc2ltcGxpZmllZDtcblxuICAgICAgY29uc3QgeFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG4gICAgICBjb25zdCBzY2FsZSA9IGlucHV0c1sxXTtcbiAgICAgIGNvbnN0IGJpYXMgPSAhc2ltcGxpZmllZCAmJiBpbnB1dHNbMl07XG5cbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0geFNoYXBlO1xuICAgICAgY29uc3QgYXhpcyA9IFNoYXBlVXRpbC5ub3JtYWxpemVBeGlzKGF0dHJpYnV0ZXMuYXhpcywgeFNoYXBlLmxlbmd0aCk7XG4gICAgICBjb25zdCBub3JtQ291bnQgPSBTaGFwZVV0aWwuc2l6ZVRvRGltZW5zaW9uKHhTaGFwZSwgYXhpcyk7XG4gICAgICBjb25zdCBub3JtU2l6ZSA9IFNoYXBlVXRpbC5zaXplRnJvbURpbWVuc2lvbih4U2hhcGUsIGF4aXMpO1xuXG4gICAgICBjb25zdCBzY2FsZVNpemUgPSBTaGFwZVV0aWwuc2l6ZShzY2FsZS5kaW1zKTtcbiAgICAgIGNvbnN0IGJpYXNTaXplID0gYmlhcyA/IFNoYXBlVXRpbC5zaXplKGJpYXMuZGltcykgOiAwO1xuICAgICAgaWYgKHNjYWxlU2l6ZSAhPT0gbm9ybVNpemUgfHwgKGJpYXMgJiYgYmlhc1NpemUgIT09IG5vcm1TaXplKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNpemUgb2YgWC5zaGFwZSgpW2F4aXM6XSA9PSAke25vcm1TaXplfS5cbiAgICAgICBTaXplIG9mIHNjYWxlIGFuZCBiaWFzIChpZiBwcm92aWRlZCkgbXVzdCBtYXRjaCB0aGlzLlxuICAgICAgIEdvdCBzY2FsZSBzaXplIG9mICR7c2NhbGVTaXplfSBhbmQgYmlhcyBzaXplIG9mICR7Ymlhc1NpemV9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lYW5JbnZTdGREZXZEaW06IG51bWJlcltdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHhTaGFwZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoaSA8IGF4aXMpIHtcbiAgICAgICAgICBtZWFuSW52U3RkRGV2RGltLnB1c2goeFNoYXBlW2ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZWFuSW52U3RkRGV2RGltLnB1c2goMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKG5vcm1TaXplKTtcbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWyd0eXBlJywgJ3R5cGUnXTtcbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogbm9ybUNvdW50fSwge3R5cGU6IERhdGFUeXBlLmZsb2F0LCBkYXRhOiBub3JtU2l6ZX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IE1hdGguZmxvb3Iobm9ybVNpemUgLyBjb21wb25lbnRzKX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogYXR0cmlidXRlcy5lcHNpbG9ufVxuICAgICAgXTtcbiAgICAgIGlmIChiaWFzKSB7XG4gICAgICAgIGlucHV0RGVwZW5kZW5jaWVzLnB1c2goJ3R5cGUnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhc01lYW5EYXRhT3V0cHV0ID0gb3V0cHV0Q291bnQgPiAxO1xuICAgICAgY29uc3QgaGFzSW52U3RkT3V0cHV0ID0gb3V0cHV0Q291bnQgPiAyO1xuXG4gICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gW1xuICAgICAgICAgIGlucHV0VmFyaWFibGUoJ3gnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLCBjb21wb25lbnRzKSxcbiAgICAgICAgICBpbnB1dFZhcmlhYmxlKCdzY2FsZScsIHNjYWxlLmRhdGFUeXBlLCBzY2FsZS5kaW1zLCBjb21wb25lbnRzKSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGJpYXMpIHtcbiAgICAgICAgICB2YXJpYWJsZXMucHVzaChpbnB1dFZhcmlhYmxlKCdiaWFzJywgYmlhcy5kYXRhVHlwZSwgYmlhcy5kaW1zLCBjb21wb25lbnRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyaWFibGVzLnB1c2gob3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUsIGNvbXBvbmVudHMpKTtcbiAgICAgICAgaWYgKGhhc01lYW5EYXRhT3V0cHV0KSB7XG4gICAgICAgICAgdmFyaWFibGVzLnB1c2gob3V0cHV0VmFyaWFibGUoJ21lYW5fZGF0YV9vdXRwdXQnLCBEYXRhVHlwZS5mbG9hdCwgbWVhbkludlN0ZERldkRpbSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNJbnZTdGRPdXRwdXQpIHtcbiAgICAgICAgICB2YXJpYWJsZXMucHVzaChvdXRwdXRWYXJpYWJsZSgnaW52X3N0ZF9vdXRwdXQnLCBEYXRhVHlwZS5mbG9hdCwgbWVhbkludlN0ZERldkRpbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pZm9ybXM6IFVuaWZvcm1zQXJyYXlUeXBlID0gW1xuICAgICAgICAgIHtuYW1lOiAnbm9ybV9jb3VudCcsIHR5cGU6ICd1MzInfSwge25hbWU6ICdub3JtX3NpemUnLCB0eXBlOiAnZjMyJ30sXG4gICAgICAgICAge25hbWU6ICdub3JtX3NpemVfdmVjdG9yaXplZCcsIHR5cGU6ICd1MzInfSwge25hbWU6ICdlcHNpbG9uJywgdHlwZTogJ2YzMid9XG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiBgXG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoLi4udmFyaWFibGVzKX1cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMubm9ybV9jb3VudCcpfVxuICAgIGxldCBvZmZzZXQgPSBnbG9iYWxfaWR4ICogdW5pZm9ybXMubm9ybV9zaXplX3ZlY3Rvcml6ZWQ7XG4gICAgdmFyIG1lYW5fdmVjdG9yID0gJHtmaWxsVmVjdG9yKCdmMzInLCBjb21wb25lbnRzKX07XG4gICAgdmFyIG1lYW5fc3F1YXJlX3ZlY3RvciA9ICR7ZmlsbFZlY3RvcignZjMyJywgY29tcG9uZW50cyl9O1xuXG4gICAgZm9yICh2YXIgaDogdTMyID0gMHU7IGggPCB1bmlmb3Jtcy5ub3JtX3NpemVfdmVjdG9yaXplZDsgaCsrKSB7XG4gICAgICBsZXQgdmFsdWUgPSAke2Nhc3RUb0YzMihkYXRhVHlwZSwgY29tcG9uZW50cywgJ3hbaCArIG9mZnNldF0nKX07XG4gICAgICBtZWFuX3ZlY3RvciArPSB2YWx1ZTtcbiAgICAgIG1lYW5fc3F1YXJlX3ZlY3RvciArPSB2YWx1ZSAqIHZhbHVlO1xuICAgIH1cbiAgICBsZXQgbWVhbiA9ICR7c3VtVmVjdG9yKCdtZWFuX3ZlY3RvcicsIGNvbXBvbmVudHMpfSAvIHVuaWZvcm1zLm5vcm1fc2l6ZTtcbiAgICBsZXQgaW52X3N0ZF9kZXYgPSBpbnZlcnNlU3FydCgke3N1bVZlY3RvcignbWVhbl9zcXVhcmVfdmVjdG9yJywgY29tcG9uZW50cyl9IC8gdW5pZm9ybXMubm9ybV9zaXplICR7XG4gICAgICAgICAgICBzaW1wbGlmaWVkID8gJycgOiAnLSBtZWFuICogbWVhbid9ICsgdW5pZm9ybXMuZXBzaWxvbik7XG5cbiAgICBmb3IgKHZhciBqOiB1MzIgPSAwOyBqIDwgdW5pZm9ybXMubm9ybV9zaXplX3ZlY3Rvcml6ZWQ7IGorKykge1xuICAgICAgbGV0IGYzMmlucHV0ID0gJHtjYXN0VG9GMzIoZGF0YVR5cGUsIGNvbXBvbmVudHMsICd4W2ogKyBvZmZzZXRdJyl9O1xuICAgICAgbGV0IGYzMnNjYWxlID0gJHtjYXN0VG9GMzIoZGF0YVR5cGUsIGNvbXBvbmVudHMsICdzY2FsZVtqXScpfTtcbiAgICAgIG91dHB1dFtqICsgb2Zmc2V0XSA9ICR7dmFyaWFibGVzWzBdLnR5cGUudmFsdWV9KChmMzJpbnB1dCAke3NpbXBsaWZpZWQgPyAnJyA6ICctIG1lYW4nfSkgKiBpbnZfc3RkX2RldiAqIGYzMnNjYWxlXG4gICAgICAgICR7YmlhcyA/IGArICR7Y2FzdFRvRjMyKGRhdGFUeXBlLCBjb21wb25lbnRzLCAnYmlhc1tqXScpfWAgOiAnJ31cbiAgICAgICk7XG4gICAgfVxuXG4gICAgJHtoYXNNZWFuRGF0YU91dHB1dCA/ICdtZWFuX2RhdGFfb3V0cHV0W2dsb2JhbF9pZHhdID0gbWVhbicgOiAnJ307XG4gICAgJHtoYXNJbnZTdGRPdXRwdXQgPyAnaW52X3N0ZF9vdXRwdXRbZ2xvYmFsX2lkeF0gPSBpbnZfc3RkX2RldicgOiAnJ307XG4gIH1gO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlfV07XG4gICAgICBpZiAoaGFzTWVhbkRhdGFPdXRwdXQpIHtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtkaW1zOiBtZWFuSW52U3RkRGV2RGltLCBkYXRhVHlwZTogRGF0YVR5cGUuZmxvYXR9KTtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNJbnZTdGRPdXRwdXQpIHtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtkaW1zOiBtZWFuSW52U3RkRGV2RGltLCBkYXRhVHlwZTogRGF0YVR5cGUuZmxvYXR9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ0xheWVyTm9ybWFsaXphdGlvbicsXG4gICAgICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7Y29tcG9uZW50c307JHtvdXRwdXRDb3VudH07JHtzaW1wbGlmaWVkfWAsIGlucHV0RGVwZW5kZW5jaWVzfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT5cbiAgICAgICAgICAgICh7b3V0cHV0cywgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChub3JtQ291bnQgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LCBwcm9ncmFtVW5pZm9ybXN9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgfTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgbGF5ZXJOb3JtID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBMYXllck5vcm1BdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUxheWVyTm9ybVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzLCBjb250ZXh0Lm91dHB1dENvdW50KSk7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlLCBnZXRUZW5zb3JFbGVtZW50U2l6ZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleSwgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGdldE1heENvbXBvbmVudHMsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZSwgVW5pZm9ybXNBcnJheVR5cGV9IGZyb20gJy4vY29tbW9uJztcblxuLy8gIFRPRE8gc3VwcG9ydCBxdWFudGl6YXRpb24gYml0cyBub3QgZXF1YWwgdG8gNFxuZXhwb3J0IGludGVyZmFjZSBNYXRNdWxOQml0c0F0dHJpYnV0ZXMgZXh0ZW5kcyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICBrOiBudW1iZXI7XG4gIG46IG51bWJlcjtcbiAgYWNjdXJhY3lMZXZlbDogbnVtYmVyO1xuICBiaXRzOiBudW1iZXI7XG4gIGJsb2NrU2l6ZTogbnVtYmVyO1xufVxuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogTWF0TXVsTkJpdHNBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGlmIChpbnB1dHMubGVuZ3RoIDwgMyB8fCBpbnB1dHMubGVuZ3RoID4gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWF0TXVsTkJpdHMgcmVxdWlyZXMgMyBvciA0IGlucHV0cycpO1xuICB9XG4gIGNvbnN0IGEgPSBpbnB1dHNbMF07XG4gIGNvbnN0IGFSYW5rID0gYS5kaW1zLmxlbmd0aDtcbiAgaWYgKGEuZGltc1thUmFuayAtIDFdICE9PSBhdHRyaWJ1dGVzLmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBsYXN0IGRpbSBvZiBpbnB1dCBzaGFwZSBkb2VzIG5vdCBtYXRjaCB0aGUgayB2YWx1ZScpO1xuICB9XG4gIGNvbnN0IG5CbG9ja3NQZXJDb2wgPSBNYXRoLmZsb29yKChhdHRyaWJ1dGVzLmsgKyBhdHRyaWJ1dGVzLmJsb2NrU2l6ZSAtIDEpIC8gYXR0cmlidXRlcy5ibG9ja1NpemUpO1xuICBjb25zdCBibG9iU2l6ZSA9IGF0dHJpYnV0ZXMuYmxvY2tTaXplIC8gOCAqIGF0dHJpYnV0ZXMuYml0cztcbiAgY29uc3QgYiA9IGlucHV0c1sxXTtcbiAgaWYgKCFTaGFwZVV0aWwuYXJlRXF1YWwoYi5kaW1zLCBbYXR0cmlidXRlcy5uLCBuQmxvY2tzUGVyQ29sLCBibG9iU2l6ZV0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc2Vjb25kIGlucHV0cyBtdXN0IGJlIDNEIHRlbnNvciB3aXRoIHNoYXBlIE4gWCBuQmxvY2tzUGVyQ29sIFggYmxvYlNpemUnKTtcbiAgfVxuICBjb25zdCBzY2FsZXMgPSBpbnB1dHNbMl07XG4gIGNvbnN0IHNjYWxlc1NoYXBlID0gc2NhbGVzLmRpbXM7XG4gIGlmIChTaGFwZVV0aWwuc2l6ZShzY2FsZXNTaGFwZSkgIT09IGF0dHJpYnV0ZXMubiAqIG5CbG9ja3NQZXJDb2wpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjYWxlcyBpbnB1dCBzaXplIGVycm9yLicpO1xuICB9XG4gIGlmIChpbnB1dHMubGVuZ3RoID09PSA0KSB7XG4gICAgY29uc3QgemVyb1BvaW50cyA9IGlucHV0c1szXTtcbiAgICBjb25zdCB6ZXJvUG9pbnRzU2hhcGUgPSB6ZXJvUG9pbnRzLmRpbXM7XG4gICAgY29uc3QgZXhwZWN0ZWRaZXJvUG9pbnRzU2l6ZSA9XG4gICAgICAgIGF0dHJpYnV0ZXMuYml0cyA+IDQgPyAoYXR0cmlidXRlcy5uICogbkJsb2Nrc1BlckNvbCkgOiBhdHRyaWJ1dGVzLm4gKiBNYXRoLmZsb29yKChuQmxvY2tzUGVyQ29sICsgMSkgLyAyKTtcbiAgICBpZiAoU2hhcGVVdGlsLnNpemUoemVyb1BvaW50c1NoYXBlKSAhPT0gZXhwZWN0ZWRaZXJvUG9pbnRzU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd6ZXJvUG9pbnRzIGlucHV0IHNpemUgZXJyb3IuJyk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTWF0TXVsTkJpdHNQcm9ncmFtSW5mbyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBNYXRNdWxOQml0c0F0dHJpYnV0ZXMsXG4gICAgIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemU6IG51bWJlcik6IFByb2dyYW1JbmZvID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgIGNvbnN0IGFSYW5rID0gaW5wdXRTaGFwZS5sZW5ndGg7XG4gICAgICBjb25zdCBuQmxvY2tzUGVyQ29sID0gTWF0aC5mbG9vcigoYXR0cmlidXRlcy5rICsgYXR0cmlidXRlcy5ibG9ja1NpemUgLSAxKSAvIGF0dHJpYnV0ZXMuYmxvY2tTaXplKTtcbiAgICAgIGNvbnN0IGRpbUFPdXRlciA9IGlucHV0U2hhcGVbYVJhbmsgLSAyXTtcbiAgICAgIGNvbnN0IGRpbUlubmVyID0gYXR0cmlidXRlcy5rO1xuICAgICAgY29uc3QgZGltQk91dGVyID0gYXR0cmlidXRlcy5uO1xuICAgICAgY29uc3QgYmF0Y2hEaW1zID0gaW5wdXRTaGFwZS5zbGljZSgwLCBhUmFuayAtIDIpO1xuICAgICAgY29uc3QgYmF0Y2hTaXplID0gU2hhcGVVdGlsLnNpemUoYmF0Y2hEaW1zKTtcbiAgICAgIGNvbnN0IGJsb2JTaXplID0gYXR0cmlidXRlcy5ibG9ja1NpemUgLyA4ICogYXR0cmlidXRlcy5iaXRzO1xuICAgICAgY29uc3QgYmxvYlNpemVJbldvcmRzID0gYmxvYlNpemUgLyA0O1xuICAgICAgY29uc3QgZGF0YVR5cGUgPSBpbnB1dHNbMF0uZGF0YVR5cGU7XG4gICAgICBjb25zdCBvdXRwdXROdW1iZXIgPSBnZXRNYXhDb21wb25lbnRzKGRpbUFPdXRlcik7XG4gICAgICBjb25zdCBhQ29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMoYXR0cmlidXRlcy5rKTtcbiAgICAgIGNvbnN0IGJDb21wb25lbnRzID0gZ2V0TWF4Q29tcG9uZW50cyhibG9iU2l6ZUluV29yZHMpO1xuICAgICAgY29uc3QgZWxlbWVudFNpemUgPSBnZXRUZW5zb3JFbGVtZW50U2l6ZShkYXRhVHlwZSkhO1xuICAgICAgY29uc3Qgd29ya2dyb3VwT3V0cHV0U2l6ZSA9IGRpbUFPdXRlciAqIG5CbG9ja3NQZXJDb2wgKiBlbGVtZW50U2l6ZTtcbiAgICAgIGNvbnN0IG1heE51bWJlck9mQ29tcG9uZW50cyA9IE1hdGguZmxvb3IobWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplIC8gd29ya2dyb3VwT3V0cHV0U2l6ZSk7XG4gICAgICBjb25zdCB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA9IG5CbG9ja3NQZXJDb2wgPD0gbWF4Q29tcHV0ZVdvcmtncm91cFNpemVzWzBdICYmIG1heE51bWJlck9mQ29tcG9uZW50cyA+IDA7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gKCF1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyB8fCBtYXhOdW1iZXJPZkNvbXBvbmVudHMgPj0gNCkgPyBnZXRNYXhDb21wb25lbnRzKGRpbUJPdXRlcikgOlxuICAgICAgICAgICgobWF4TnVtYmVyT2ZDb21wb25lbnRzID49IDIpICYmIGdldE1heENvbXBvbmVudHMoZGltQk91dGVyKSA+PSAyKSAgICAgID8gMiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBiYXRjaERpbXMuY29uY2F0KFtkaW1BT3V0ZXIsIGRpbUJPdXRlcl0pO1xuICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKSAvIGNvbXBvbmVudHMgLyBvdXRwdXROdW1iZXI7XG5cbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IHVzZUJsb2Nrd2lzZU1hdE11bE5CaXRzID9cbiAgICAgICAgICBbXSA6XG4gICAgICAgICAgW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBhdHRyaWJ1dGVzLmJsb2NrU2l6ZX1dO1xuICAgICAgY29uc3QgaW5wdXRTaGFwZVRlbXAgPSBbYmF0Y2hTaXplLCBkaW1BT3V0ZXIsIGRpbUlubmVyIC8gYUNvbXBvbmVudHNdO1xuICAgICAgY29uc3QgYlNoYXBlID0gU2hhcGVVdGlsLmNvbnZlcnRTaGFwZShpbnB1dHNbMV0uZGltcykuc2xpY2UoKTtcbiAgICAgIGJTaGFwZS5zcGxpY2UoLTEsIDEsIGJsb2JTaXplSW5Xb3JkcyAvIGJDb21wb25lbnRzKTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGVUZW1wKSk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhiU2hhcGUpKTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1syXS5kaW1zKSk7XG4gICAgICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhTaGFwZVV0aWwuY29udmVydFNoYXBlKGlucHV0c1szXS5kaW1zKSkpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3V0cHV0U2hhcGVUZW1wID0gW2JhdGNoU2l6ZSwgZGltQU91dGVyLCBkaW1CT3V0ZXIgLyBjb21wb25lbnRzXTtcbiAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dHB1dFNoYXBlVGVtcCkpO1xuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0UmFuayA9IGlucHV0U2hhcGVUZW1wLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYSA9IGlucHV0VmFyaWFibGUoJ2EnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0UmFuaywgYUNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBiID0gaW5wdXRWYXJpYWJsZSgnYicsIERhdGFUeXBlLnVpbnQzMiwgYlNoYXBlLmxlbmd0aCwgYkNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBzY2FsZXMgPSBpbnB1dFZhcmlhYmxlKCdzY2FsZXMnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFyaWFibGVzID0gW2EsIGIsIHNjYWxlc107XG4gICAgICAgIGNvbnN0IHplcm9Qb2ludHMgPVxuICAgICAgICAgICAgaW5wdXRzLmxlbmd0aCA9PT0gNCA/IGlucHV0VmFyaWFibGUoJ3plcm9fcG9pbnRzJywgRGF0YVR5cGUudWludDMyLCBpbnB1dHNbM10uZGltcy5sZW5ndGgpIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoemVyb1BvaW50cykge1xuICAgICAgICAgIGlucHV0VmFyaWFibGVzLnB1c2goemVyb1BvaW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3V0cHV0UmFuayA9IG91dHB1dFNoYXBlVGVtcC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFJhbmssIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUgPSBbe25hbWU6ICdvdXRwdXRfc2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdibG9ja19zaXplJywgdHlwZTogJ3UzMid9XTtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcblxuICAgICAgICBjb25zdCBxRHFEYXRhVHlwZSA9ICgoKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhQ29tcG9uZW50cykge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gYGFycmF5PCR7ZGF0YVR5cGV9LCA4PmA7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIHJldHVybiBgbWF0NHgyPCR7ZGF0YVR5cGV9PmA7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBgbWF0Mng0PCR7ZGF0YVR5cGV9PmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YUNvbXBvbmVudHN9LWNvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcblxuICAgICAgICBjb25zdCBwcm9jZXNzT25lQmxvY2sgPSBgXG4gICAgICAgIGZvciAodmFyIHdvcmQ6IHUzMiA9IDA7IHdvcmQgPCAke2Jsb2JTaXplSW5Xb3Jkc307IHdvcmQgKz0gJHtiQ29tcG9uZW50c30pIHtcbiAgICAgICAgICAke2IuaW5kaWNlc1NldCgnYl9pbmRpY2VzJywgJzInLCAnd29yZCcpfTtcbiAgICAgICAgICBsZXQgYl9kYXRhID0gJHtiLmdldEJ5SW5kaWNlcygnYl9pbmRpY2VzJyl9O1xuICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCAke2JDb21wb25lbnRzfTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYl92YWx1ZTogdTMyID0gJHtiQ29tcG9uZW50cyA9PT0gMSA/ICdiX2RhdGEnIDogJ2JfZGF0YVt3b3JkICsgaV0nfTtcbiAgICAgICAgICAgIGxldCBiX21hc2s6IHUzMiA9IDB4MEYwRjBGMEZ1O1xuICAgICAgICAgICAgbGV0IGJfdmFsdWVfbG93ZXI6IHZlYzQ8dTMyPiA9IHVucGFjazR4VTgoYl92YWx1ZSAmIGJfbWFzayk7XG4gICAgICAgICAgICBsZXQgYl92YWx1ZV91cHBlcjogdmVjNDx1MzI+ID0gdW5wYWNrNHhVOCgoYl92YWx1ZSA+PiA0KSAmIGJfbWFzayk7XG4gICAgICAgICAgICBsZXQgYl9xdWFudGl6ZWRfdmFsdWVzID0gJHtxRHFEYXRhVHlwZX0oJHtcbiAgICAgICAgICAgIEFycmF5LmZyb20oe2xlbmd0aDogNH0sIChfLCBpKSA9PiBgJHtkYXRhVHlwZX0oYl92YWx1ZV9sb3dlclske2l9XSksICR7ZGF0YVR5cGV9KGJfdmFsdWVfdXBwZXJbJHtpfV0pYClcbiAgICAgICAgICAgICAgICAuam9pbignLCAnKX0pO1xuICAgICAgICAgICAgbGV0IGJfZGVxdWFudGl6ZWRfdmFsdWVzID0gJHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChhQ29tcG9uZW50cyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3FEcURhdGFUeXBlfSgke1xuICAgICAgICAgICAgICAgIEFycmF5LmZyb20oe2xlbmd0aDogOH0sIChfLCBpKSA9PiBgKGJfcXVhbnRpemVkX3ZhbHVlc1ske2l9XSAtIHplcm9fcG9pbnQpICogc2NhbGVgKS5qb2luKCcsICcpfSk7YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAoYl9xdWFudGl6ZWRfdmFsdWVzIC0gJHtxRHFEYXRhVHlwZX0oJHtBcnJheSg4KS5maWxsKCd6ZXJvX3BvaW50Jykuam9pbignLCcpfSkpICogc2NhbGU7YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCl9O1xuICAgICAgICAgICAgLy8gTnVtYmVyIG9mIEIgZWxlbWVudHMgcGVyIDMyLWJpdCB3b3JkIGlzIDMyL2JpdHMgPSAzMi80ID0gOFxuICAgICAgICAgICAgZm9yICh2YXIgbTogdTMyID0gMDsgbSA8ICR7dXNlQmxvY2t3aXNlTWF0TXVsTkJpdHMgPyBkaW1BT3V0ZXIgOiBvdXRwdXROdW1iZXJ9dTsgbSsrKSB7XG4gICAgICAgICAgICAgICR7YS5pbmRpY2VzU2V0KCdhX2luZGljZXMnLCBpbnB1dFJhbmsgLSAyLCB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/ICdtJyA6IGByb3cgKiAke291dHB1dE51bWJlcn0gKyBtYCl9O1xuICAgICAgICAgICAgICAke2EuaW5kaWNlc1NldCgnYV9pbmRpY2VzJywgaW5wdXRSYW5rIC0gMSwgJ3dvcmRfb2Zmc2V0Jyl9O1xuICAgICAgICAgICAgICB2YXIgaW5wdXRfb2Zmc2V0ID0gJHthLmluZGljZXNUb09mZnNldCgnYV9pbmRpY2VzJyl9O1xuICAgICAgICAgICAgICB2YXIgYV9kYXRhOiAke3FEcURhdGFUeXBlfTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgajogdTMyID0gMDsgaiA8ICR7OCAvIGFDb21wb25lbnRzfTsgaisrKSB7XG4gICAgICAgICAgICAgICAgYV9kYXRhW2pdID0gJHthLmdldEJ5T2Zmc2V0KCdpbnB1dF9vZmZzZXQnKX07XG4gICAgICAgICAgICAgICAgaW5wdXRfb2Zmc2V0Kys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJHt1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/ICd3b3JrZ3JvdXBfc2hhcmVkW3dvcmtncm91cF9zaGFyZWRfb2Zmc2V0ICsgbV0nIDogJ291dHB1dF92YWx1ZXNbbV0nfSR7XG4gICAgICAgICAgICBjb21wb25lbnRzID4gMSA/ICdbY10nIDogJyd9ICs9ICR7XG4gICAgICAgICAgICBBcnJheVxuICAgICAgICAgICAgICAgIC5mcm9tKFxuICAgICAgICAgICAgICAgICAgICB7bGVuZ3RoOiA4IC8gYUNvbXBvbmVudHN9LFxuICAgICAgICAgICAgICAgICAgICAoXywgaSkgPT4gYCR7XG4gICAgICAgICAgICAgICAgICAgICAgICBhQ29tcG9uZW50cyA9PT0gMSA/IGBhX2RhdGFbJHtpfV0gKiBiX2RlcXVhbnRpemVkX3ZhbHVlc1ske2l9XWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZG90KGFfZGF0YVske2l9XSwgYl9kZXF1YW50aXplZF92YWx1ZXNbJHtpfV0pYH1gKVxuICAgICAgICAgICAgICAgIC5qb2luKCcgKyAnKX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3b3JkX29mZnNldCArPSAkezggLyBhQ29tcG9uZW50c307XG4gICAgICAgICAgfVxuICAgICAgICB9YDtcbiAgICAgICAgY29uc3QgdXBkYXRlWmVyb1BvaW50SW5kZXggPSB6ZXJvUG9pbnRzID8gYFxuICAgICAgICAgIHplcm9fcG9pbnRfb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgaWYgKHplcm9fcG9pbnRfb2Zmc2V0ID09IDMyKSB7XG4gICAgICAgICAgICB6ZXJvX3BvaW50X29mZnNldCA9IDA7XG4gICAgICAgICAgICB6ZXJvX3BvaW50X2luZGV4Kys7XG4gICAgICAgICAgICB6ZXJvX3BvaW50X3dvcmQgPSAke3plcm9Qb2ludHMuZ2V0QnlPZmZzZXQoJ3plcm9fcG9pbnRfaW5kZXgnKX07XG4gICAgICAgICAgfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJztcblxuICAgICAgICByZXR1cm4gdXNlQmxvY2t3aXNlTWF0TXVsTkJpdHMgPyBgXG4gICAgICAgIHZhcjx3b3JrZ3JvdXA+IHdvcmtncm91cF9zaGFyZWQ6IGFycmF5PCR7b3V0cHV0LnR5cGUudmFsdWV9LCAke2RpbUFPdXRlciAqIG5CbG9ja3NQZXJDb2x9PjtcbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZGVjbGFyZVZhcmlhYmxlcyguLi5pbnB1dFZhcmlhYmxlcywgb3V0cHV0KX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFtcbiAgICAgICAgICBuQmxvY2tzUGVyQ29sLCAxLCAxXG4gICAgICAgIF0pfVxuICAgICAgICAgIHZhciBhX2luZGljZXM6ICR7YS50eXBlLmluZGljZXN9O1xuICAgICAgICAgIHZhciBibG9jayA9IGxvY2FsX2lkLng7XG4gICAgICAgICAgdmFyIGNvbCA9IHdvcmtncm91cF9pZC55O1xuICAgICAgICAgIHZhciBiYXRjaCA9IHdvcmtncm91cF9pZC56O1xuICAgICAgICAgICR7YS5pbmRpY2VzU2V0KCdhX2luZGljZXMnLCAnMCcsICdiYXRjaCcpfTtcbiAgICAgICAgICAvLyBUd28gemVybyBwb2ludHMgYXJlIHBhY2tlZCBpbnRvIG9uZSBieXRlIHdoZW4gdW5pZm9ybXMuYml0cyBpcyA0LlxuICAgICAgICAgIGZvciAodmFyIGM6IHUzMiA9IDA7IGMgPCAke2NvbXBvbmVudHN9OyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjb2xfdGltZXNfY29tcG9uZW50c19wbHVzX2MgPSBjb2wgKiAke2NvbXBvbmVudHN9ICsgYztcbiAgICAgICAgICAgICAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm9Qb2ludHMgPyBgXG4gICAgICAgICAgICB2YXIgemVyb19wb2ludF9ieXRlc19wZXJfY29sOiB1MzIgPSAoJHtuQmxvY2tzUGVyQ29sfSArIDEpIC8gMjtcbiAgICAgICAgICAgIHZhciB6ZXJvX3BvaW50X2J5dGVfY291bnQ6IHUzMiA9IGNvbF90aW1lc19jb21wb25lbnRzX3BsdXNfYyAqIHplcm9fcG9pbnRfYnl0ZXNfcGVyX2NvbCArIChibG9jayA+PiAweDF1KTtcbiAgICAgICAgICAgIHZhciB6ZXJvX3BvaW50X3dvcmRfaW5kZXg6IHUzMiA9IHplcm9fcG9pbnRfYnl0ZV9jb3VudCA+PiAweDJ1O1xuICAgICAgICAgICAgdmFyIHplcm9fcG9pbnRfYnl0ZV9vZmZzZXQ6IHUzMiA9IHplcm9fcG9pbnRfYnl0ZV9jb3VudCAmIDB4M3U7XG4gICAgICAgICAgICB2YXIgemVyb19wb2ludF9uaWJibGVfb2Zmc2V0OiB1MzIgPSBibG9jayAmIDB4MXU7XG4gICAgICAgICAgICB2YXIgemVyb19wb2ludF9iaXRzX29mZnNldDogdTMyID0gKHplcm9fcG9pbnRfYnl0ZV9vZmZzZXQgPDwgMykgKyAoemVyb19wb2ludF9uaWJibGVfb2Zmc2V0IDw8IDIpO1xuICAgICAgICAgICAgdmFyIHplcm9fcG9pbnRfd29yZDogdTMyID0gJHt6ZXJvUG9pbnRzLmdldEJ5T2Zmc2V0KCd6ZXJvX3BvaW50X3dvcmRfaW5kZXgnKX0gPj4gemVyb19wb2ludF9iaXRzX29mZnNldDtgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ31cbiAgICAgICAgICAgIHZhciBiX2luZGljZXM6ICR7Yi50eXBlLmluZGljZXN9O1xuICAgICAgICAgICAgJHtiLmluZGljZXNTZXQoJ2JfaW5kaWNlcycsICcwJywgJ2NvbF90aW1lc19jb21wb25lbnRzX3BsdXNfYycpfTtcbiAgICAgICAgICAgIC8vIFRoZSBzY2FsZSBhbmQgemVybyBwb2ludHMgYXJlIGNvbXB1dGVkIHBlciBibG9jay5cbiAgICAgICAgICAgIHZhciBzY2FsZXNfaW5kZXggPSBjb2xfdGltZXNfY29tcG9uZW50c19wbHVzX2MgKiAke25CbG9ja3NQZXJDb2x9ICsgYmxvY2s7XG4gICAgICAgICAgICBsZXQgc2NhbGUgPSAke3NjYWxlcy5nZXRCeU9mZnNldCgnc2NhbGVzX2luZGV4Jyl9O1xuICAgICAgICAgICAgLy8gVGhlIGRlZmF1bHQgemVybyBwb2ludCBpcyA4IGZvciB1bnNpZ25lZCA0LWJpdCBxdWFudGl6YXRpb24uXG4gICAgICAgICAgICBsZXQgemVyb19wb2ludCA9ICR7ZGF0YVR5cGV9KCR7emVyb1BvaW50cyA/ICcoemVyb19wb2ludF93b3JkKSAmIDB4RnUnIDogOC4wfSk7XG4gICAgICAgICAgICAke2IuaW5kaWNlc1NldCgnYl9pbmRpY2VzJywgJzEnLCAnYmxvY2snKX07XG4gICAgICAgICAgICB2YXIgd29yZF9vZmZzZXQ6IHUzMiA9IGJsb2NrICogJHthdHRyaWJ1dGVzLmJsb2NrU2l6ZSAvIGFDb21wb25lbnRzfTtcbiAgICAgICAgICAgIHZhciB3b3JrZ3JvdXBfc2hhcmVkX29mZnNldDogdTMyID0gYmxvY2sgKiAke2RpbUFPdXRlcn07XG4gICAgICAgICAgICAke3Byb2Nlc3NPbmVCbG9ja31cbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgICAgICAgIGlmIChsb2NhbF9pZC54ID09IDB1KSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0X2luZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc307XG4gICAgICAgICAgICAke291dHB1dC5pbmRpY2VzU2V0KCdvdXRwdXRfaW5kaWNlcycsICcwJywgJ2JhdGNoJyl9O1xuICAgICAgICAgICAgJHtvdXRwdXQuaW5kaWNlc1NldCgnb3V0cHV0X2luZGljZXMnLCBvdXRwdXRSYW5rIC0gMSwgJ2NvbCcpfTtcbiAgICAgICAgICAgICR7b3V0cHV0LmluZGljZXNTZXQoJ291dHB1dF9pbmRpY2VzJywgb3V0cHV0UmFuayAtIDIsICcwJyl9O1xuICAgICAgICAgICAgdmFyIG91dHB1dF9vZmZzZXQgPSAke291dHB1dC5pbmRpY2VzVG9PZmZzZXQoJ291dHB1dF9pbmRpY2VzJyl9O1xuICAgICAgICAgICAgZm9yICh2YXIgbTogdTMyID0gMHU7IG0gPCAke2RpbUFPdXRlcn11OyBtKyspIHtcbiAgICAgICAgICAgICAgdmFyIG91dHB1dF92YWx1ZTogJHtvdXRwdXQudHlwZS52YWx1ZX0gPSAke291dHB1dC50eXBlLnZhbHVlfSgwKTtcbiAgICAgICAgICAgICAgdmFyIHdvcmtncm91cF9zaGFyZWRfb2Zmc2V0OiB1MzIgPSBtO1xuICAgICAgICAgICAgICBmb3IgKHZhciBiOiB1MzIgPSAwdTsgYiA8ICR7bkJsb2Nrc1BlckNvbH11OyBiKyspIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRfdmFsdWUgKz0gd29ya2dyb3VwX3NoYXJlZFt3b3JrZ3JvdXBfc2hhcmVkX29mZnNldF07XG4gICAgICAgICAgICAgICAgd29ya2dyb3VwX3NoYXJlZF9vZmZzZXQgKz0gJHtkaW1BT3V0ZXJ9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdvdXRwdXRfb2Zmc2V0JywgJ291dHB1dF92YWx1ZScpfTtcbiAgICAgICAgICAgICAgb3V0cHV0X29mZnNldCArPSAke2RpbUJPdXRlciAvIGNvbXBvbmVudHN9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoLi4uaW5wdXRWYXJpYWJsZXMsIG91dHB1dCl9XG4gICAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF9zaXplJyl9XG4gICAgICAgICAgdmFyIG91dHB1dF92YWx1ZXM6IGFycmF5PCR7b3V0cHV0LnR5cGUudmFsdWV9LCAke291dHB1dE51bWJlcn0+O1xuICAgICAgICAgIHZhciBvdXRwdXRfaW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcbiAgICAgICAgICB2YXIgY29sID0gJHtvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0X2luZGljZXMnLCBvdXRwdXRSYW5rIC0gMSl9O1xuICAgICAgICAgIHZhciByb3cgPSAke291dHB1dC5pbmRpY2VzR2V0KCdvdXRwdXRfaW5kaWNlcycsIG91dHB1dFJhbmsgLSAyKX07XG4gICAgICAgICAgdmFyIGFfaW5kaWNlczogJHthLnR5cGUuaW5kaWNlc30gPSBvdXRwdXRfaW5kaWNlcztcbiAgICAgICAgICAvLyBUd28gemVybyBwb2ludHMgYXJlIHBhY2tlZCBpbnRvIG9uZSBieXRlIGJlY2F1c2UgdW5pZm9ybXMuYml0cyA8PSA0LlxuICAgICAgICAgIC8vIHplcm9fcG9pbnRfb2Zmc2V0IGlzIGVpdGhlciAwIG9yIDQuIEl0IGlzIGJpdCBvZmZzZXQgd2l0aGluIG9uZSBieXRlLlxuICAgICAgICAgIC8vIFRPRE8gc3VwcG9ydCB6ZXJvX3BvaW50X29mZnNldCBmb3IgYml0cyA+IDRcbiAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVyb1BvaW50cyA/IGBcbiAgICAgICAgICB2YXIgemVyb19wb2ludF9hYnNfb2Zmc2V0ID0gY29sICogJHtjb21wb25lbnRzfSAqICgoJHtuQmxvY2tzUGVyQ29sfSArIDEpIC8gMik7XG4gICAgICAgICAgdmFyIHplcm9fcG9pbnRfaW5kZXg6IHUzMiA9IHplcm9fcG9pbnRfYWJzX29mZnNldCAvIDQ7XG4gICAgICAgICAgdmFyIHplcm9fcG9pbnRfd29yZDogdTMyID0gJHt6ZXJvUG9pbnRzLmdldEJ5T2Zmc2V0KCd6ZXJvX3BvaW50X2luZGV4Jyl9O1xuICAgICAgICAgIHZhciB6ZXJvX3BvaW50X29mZnNldDogdTMyID0gKHplcm9fcG9pbnRfYWJzX29mZnNldCAlIDQpICogODtgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ31cbiAgICAgICAgICB2YXIgc2NhbGVfaW5kZXggPSBjb2wgKiAke25CbG9ja3NQZXJDb2wgKiBjb21wb25lbnRzfTtcbiAgICAgICAgICB2YXIgYl9pbmRpY2VzOiAke2IudHlwZS5pbmRpY2VzfTtcbiAgICAgICAgICBmb3IgKHZhciBjOiB1MzIgPSAwOyBjIDwgJHtjb21wb25lbnRzfTsgYysrKSB7XG4gICAgICAgICAgICAke2IuaW5kaWNlc1NldCgnYl9pbmRpY2VzJywgJzAnLCBgY29sICogJHtjb21wb25lbnRzfSArIGNgKX07XG4gICAgICAgICAgICB2YXIgYmxvY2tfb2Zmc2V0OiB1MzIgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgYmxvY2s6IHUzMiA9IDA7IGJsb2NrIDwgJHtuQmxvY2tzUGVyQ29sfTsgYmxvY2srKykge1xuICAgICAgICAgICAgICAvLyBUaGUgc2NhbGUgYW5kIHplcm8gcG9pbnRzIGFyZSBjb21wdXRlZCBwZXIgYmxvY2suXG4gICAgICAgICAgICAgIGxldCBzY2FsZSA9ICR7c2NhbGVzLmdldEJ5T2Zmc2V0KCdzY2FsZV9pbmRleCcpfTtcbiAgICAgICAgICAgICAgLy8gVGhlIGRlZmF1bHQgemVybyBwb2ludCBpcyA4IGZvciB1bnNpZ25lZCA0LWJpdCBxdWFudGl6YXRpb24uXG4gICAgICAgICAgICAgIGxldCB6ZXJvX3BvaW50ID0gJHtkYXRhVHlwZX0oJHt6ZXJvUG9pbnRzID8gJ2V4dHJhY3RCaXRzKHplcm9fcG9pbnRfd29yZCwgemVyb19wb2ludF9vZmZzZXQsIDQpJyA6IDguMH0pO1xuICAgICAgICAgICAgICAke2IuaW5kaWNlc1NldCgnYl9pbmRpY2VzJywgJzEnLCAnYmxvY2snKX07XG4gICAgICAgICAgICAgIHZhciB3b3JkX29mZnNldDogdTMyID0gYmxvY2tfb2Zmc2V0O1xuICAgICAgICAgICAgICAke3Byb2Nlc3NPbmVCbG9ja31cbiAgICAgICAgICAgICAgc2NhbGVfaW5kZXgrKztcbiAgICAgICAgICAgICAgJHt1cGRhdGVaZXJvUG9pbnRJbmRleH1cbiAgICAgICAgICAgICAgYmxvY2tfb2Zmc2V0ICs9IHVuaWZvcm1zLmJsb2NrX3NpemUgLyAke2FDb21wb25lbnRzfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERyb3AgdGhlIHRyYWlsaW5nIDQgYml0cyBpZiB0aGUgemVyb19wb2l0X29mZnNldCBpcyBub3QgYSBieXRlIGJvdW5kYXJ5IHRvIGFsaWduIHdpdGggdGhlIG5leHQgYnl0ZS5cbiAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvUG9pbnRzID8gYGlmICh6ZXJvX3BvaW50X29mZnNldCAlIDggPiAwKSB7XG4gICAgICAgICAgICAgICAgJHt1cGRhdGVaZXJvUG9pbnRJbmRleH1cbiAgICAgICAgICAgICAgfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgazogdTMyID0gMHU7IGsgPCAke291dHB1dE51bWJlcn11OyBrKyspIHtcbiAgICAgICAgICAgICAgJHtvdXRwdXQuaW5kaWNlc1NldCgnb3V0cHV0X2luZGljZXMnLCBvdXRwdXRSYW5rIC0gMiwgYCR7b3V0cHV0TnVtYmVyfSAqIHJvdyArIGtgKX07XG4gICAgICAgICAgICAgICR7b3V0cHV0LnNldEJ5SW5kaWNlcygnb3V0cHV0X2luZGljZXMnLCAnb3V0cHV0X3ZhbHVlc1trXScpfVxuICAgICAgICAgICAgfVxuICAgICAgICB9YDtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/ICdCbG9ja3dpc2VNYXRNdWxOQml0cycgOiAnTWF0TXVsTkJpdHMnLFxuICAgICAgICBzaGFkZXJDYWNoZToge1xuICAgICAgICAgIGhpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9OyR7ZGltQU91dGVyfTske2RhdGFUeXBlfTske2lucHV0cy5sZW5ndGh9YCxcbiAgICAgICAgICBpbnB1dERlcGVuZGVuY2llczogQXJyYXkoaW5wdXRzLmxlbmd0aCkuZmlsbCgncmFuaycpXG4gICAgICAgIH0sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGV9XSxcbiAgICAgICAgICBuYW1lOiB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/ICdCbG9ja3dpc2VNYXRNdWxOQml0cycgOiAnTWF0TXVsTkJpdHMnLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHVzZUJsb2Nrd2lzZU1hdE11bE5CaXRzID8ge3g6IDEsIHk6IE1hdGguY2VpbChkaW1CT3V0ZXIgLyBjb21wb25lbnRzKSwgejogYmF0Y2hTaXplfSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICB9O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBtYXRNdWxOQml0cyA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogTWF0TXVsTkJpdHNBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgY29uc3QgbWF4Q29tcHV0ZVdvcmtncm91cFNpemVzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBjb250ZXh0LmdldE1heENvbXB1dGVXb3JrZ3JvdXBTaXplcygpO1xuICBjb25zdCBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUgPSBjb250ZXh0LmdldE1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlc2l6ZSgpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlTWF0TXVsTkJpdHNQcm9ncmFtSW5mbyhcbiAgICAgIGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzLCBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZXMsIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlTWF0TXVsTkJpdHNBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogTWF0TXVsTkJpdHNBdHRyaWJ1dGVzID0+XG4gICAgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KGF0dHJpYnV0ZXMgYXMgT21pdDxNYXRNdWxOQml0c0F0dHJpYnV0ZXMsIGtleW9mIEF0dHJpYnV0ZVdpdGhDYWNoZUtleT4pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Y3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgR3B1RGF0YVR5cGUsIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YXBwbHlBdHRlbnRpb24sIEF0dGVudGlvbkF0dHJzLCBBdHRlbnRpb25NYXNrVHlwZSwgQXR0ZW50aW9uUGFyYW1ldGVycywgQXR0ZW50aW9uUWt2Rm9ybWF0fSBmcm9tICcuL2F0dGVudGlvbic7XG5pbXBvcnQge2lucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQge2NyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvLCBUcmFuc3Bvc2VBdHRyaWJ1dGVzfSBmcm9tICcuL3RyYW5zcG9zZSc7XG5cbmNvbnN0IGdldElucHV0ID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBpOiBudW1iZXIpID0+XG4gICAgKGlucHV0cy5sZW5ndGggPiBpKSAmJiAoaW5wdXRzW2ldLmRpbXMubGVuZ3RoID4gMCkgJiYgKFNoYXBlVXRpbC5zaXplKGlucHV0c1tpXS5kaW1zKSkgPiAwID8gaW5wdXRzW2ldIDogdW5kZWZpbmVkO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogQXR0ZW50aW9uQXR0cnMpOiBBdHRlbnRpb25QYXJhbWV0ZXJzID0+IHtcbiAgY29uc3QgcXVlcnkgPSBpbnB1dHNbMF07XG4gIGNvbnN0IGtleSA9IGdldElucHV0KGlucHV0cywgMSk7XG4gIGNvbnN0IHZhbHVlID0gZ2V0SW5wdXQoaW5wdXRzLCAyKTtcbiAgY29uc3QgYmlhcyA9IGdldElucHV0KGlucHV0cywgMyk7XG4gIGNvbnN0IGtleVBhZGRpbmdNYXNrID0gZ2V0SW5wdXQoaW5wdXRzLCA0KTtcbiAgY29uc3QgcmVsYXRpdmVQb3NpdGlvbkJpYXMgPSBnZXRJbnB1dChpbnB1dHMsIDUpO1xuICBjb25zdCBwYXN0S2V5ID0gZ2V0SW5wdXQoaW5wdXRzLCA2KTtcbiAgY29uc3QgcGFzdFZhbHVlID0gZ2V0SW5wdXQoaW5wdXRzLCA3KTtcblxuICAvLyBBYmJyZXZpYXRpb24gYW5kIE1lYW5pbmdzOlxuICAvLyAgIEI6ICAgIGJhdGNoX3NpemVcbiAgLy8gICBTOiAgICBzZXF1ZW5jZV9sZW5ndGggKGlucHV0IHNlcXVlbmNlIGxlbmd0aCBvZiBxdWVyeSlcbiAgLy8gICBQOiAgICBwYXN0X3NlcXVlbmNlX2xlbmd0aCAocGFzdCBzZXF1ZW5jZSBsZW5ndGggb2Yga2V5IG9yIHZhbHVlKVxuICAvLyAgIEw6ICAgIGt2X3NlcXVlbmNlX2xlbmd0aCAoaW5wdXQgc2VxdWVuY2UgbGVuZ3RoIG9mIGtleSBvciB2YWx1ZSlcbiAgLy8gICBNOiAgICBtYXhfc2VxdWVuY2VfbGVuZ3RoXG4gIC8vICAgVDogICAgdG90YWxfc2VxdWVuY2VfbGVuZ3RoID0gcGFzdF9zZXF1ZW5jZV9sZW5ndGggKyBrdl9zZXF1ZW5jZV9sZW5ndGhcbiAgLy8gICBOOiAgICBudW1faGVhZHNcbiAgLy8gICBIOiAgICBoZWFkIHNpemUgZm9yIFEgYW5kIEssIGFrYSBxX2hlYWRfc2l6ZSBvciBrX2hlYWRfc2l6ZSBvciBxa19oZWFkX3NpemVcbiAgLy8gICBIX3Y6ICB2X2hlYWRfc2l6ZVxuICAvLyAgIERfaTogIGlucHV0IGhpZGRlbiBzaXplXG4gIC8vICAgRDogICAgaGlkZGVuIHNpemUgZm9yIFEgYW5kIEsgKEQgPSBOICogSCksIGFrYSBxX2hpZGRlbl9zaXplIG9yIGtfaGlkZGVuX3NpemUgb3IgcWtfaGlkZGVuX3NpemVcbiAgLy8gICBEX3Y6ICB2X2hpZGRlbl9zaXplID0gbnVtX2hlYWRzICogdl9oZWFkX3NpemVcblxuICAvLyAgICAga2V5X3BhZGRpbmdfbWFzayAoSy9WKSAgICAgOiAoQikgb3IgKDIqQiArIDEpIG9yIChCLCBMKSBvciBOb25lXG4gIC8vICAgICByZWxhdGl2ZV9wb3NpdGlvbl9iaWFzICAgICA6IChCLCAxLCBTLCBMKVxuICAvLyAgICAgcGFzdF9rZXkgICAgICAgICAgICAgICAgICAgOiAoQiwgTiwgUyosIEgpXG4gIC8vICAgICBwYXN0X3ZhbHVlICAgICAgICAgICAgICAgICA6IChCLCBOLCBTKiwgSClcbiAgLy8gV2hlbiBubyBwYWNraW5nIGZvciBxL2svdjpcbiAgLy8gICAgIHF1ZXJ5ICAgICAgICAgICAgKFEpICAgICAgIDogKEIsIFMsIEQpXG4gIC8vICAgICBrZXkgICAgICAgICAgICAgIChLKSAgICAgICA6IChCLCBMLCBEKSBvciAoQiwgTiwgUyosIEgpXG4gIC8vICAgICB2YWx1ZSAgICAgICAgICAgIChWKSAgICAgICA6IChCLCBMLCBEX3YpIG9yIChCLCBOLCBTKiwgSClcbiAgLy8gICAgIGJpYXMgICAgICAgICAgICAgKFEvSy9WKSAgIDogKEQgKyBEICsgRF92KVxuICAvLyBXaGVuIHBhY2tlZCBrdiBpcyB1c2VkOlxuICAvLyAgICAgcXVlcnkgICAgICAgICAgICAoUSkgICAgICAgOiAoQiwgUywgRClcbiAgLy8gICAgIGtleSAgICAgICAgICAgICAgKEspICAgICAgIDogKEIsIEwsIE4sIDIsIEgpXG4gIC8vICAgICB2YWx1ZSAgICAgICAgICAgIChWKSAgICAgICA6IE5vbmVcbiAgLy8gICAgIGJpYXMgICAgICAgICAgICAgKFEvSy9WKSAgIDogTm9uZVxuICAvLyBXaGVuIHBhY2tlZCBxa3YgaXMgdXNlZDpcbiAgLy8gICAgIHF1ZXJ5ICAgICAgICAgICAgKFEpICAgICAgIDogKEIsIEwsIE4sIDMsIEgpIG9yIChCLCBTLCAzKkQpXG4gIC8vICAgICBrZXkgICAgICAgICAgICAgIChLKSAgICAgICA6IE5vbmVcbiAgLy8gICAgIHZhbHVlICAgICAgICAgICAgKFYpICAgICAgIDogTm9uZVxuICAvLyAgICAgYmlhcyAgICAgICAgICAgICAoUS9LL1YpICAgOiBOb25lIG9yIChEICsgRCArIERfdilcblxuICBpZiAocXVlcnkuZGltcy5sZW5ndGggIT09IDMgJiYgcXVlcnkuZGltcy5sZW5ndGggIT09IDUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IHF1ZXJ5IGlzIGV4cGVjdGVkIHRvIGhhdmUgMyBvciA1IGRpbWVuc2lvbnMnKTtcbiAgfVxuXG4gIGNvbnN0IGRtbWhhUGFja2luZyA9IGZhbHNlO1xuICBjb25zdCBiYXRjaFNpemUgPSBxdWVyeS5kaW1zWzBdO1xuICBjb25zdCBzZXF1ZW5jZUxlbmd0aCA9IHF1ZXJ5LmRpbXNbMV07XG4gIGNvbnN0IGhpZGRlblNpemUgPSBxdWVyeS5kaW1zLmxlbmd0aCA9PT0gMyA/IChkbW1oYVBhY2tpbmcgPyBxdWVyeS5kaW1zWzJdIC8gMyA6IHF1ZXJ5LmRpbXNbMl0pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5udW1IZWFkcyAqIHF1ZXJ5LmRpbXNbNF07XG4gIGxldCBrdlNlcXVlbmNlTGVuZ3RoID0gc2VxdWVuY2VMZW5ndGg7XG5cbiAgbGV0IHBhc3RTZXF1ZW5jZUxlbmd0aCA9IDA7XG4gIGxldCBtYXhTZXF1ZW5jZUxlbmd0aCA9IDA7XG4gIGNvbnN0IGhlYWRTaXplID0gTWF0aC5mbG9vcihoaWRkZW5TaXplIC8gYXR0cmlidXRlcy5udW1IZWFkcyk7XG4gIGlmIChwYXN0S2V5ICYmIHBhc3RWYWx1ZSkge1xuICAgIGlmIChwYXN0S2V5LmRpbXMubGVuZ3RoICE9PSA0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicGFzdF9rZXlcIiBpcyBleHBlY3RlZCB0byBoYXZlIDQgZGltZW5zaW9ucycpO1xuICAgIH1cbiAgICBpZiAocGFzdEtleS5kaW1zWzBdICE9PSBiYXRjaFNpemUgfHwgcGFzdEtleS5kaW1zWzFdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8IHBhc3RLZXkuZGltc1szXSAhPT0gaGVhZFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0X2tleVwiIHNoYXBlIChiYXRjaF9zaXplLCBudW1faGVhZHMsIHBhc3Rfc2VxdWVuY2VfbGVuZ3RoLCBoZWFkX3NpemUpJyk7XG4gICAgfVxuICAgIGlmIChwYXN0VmFsdWUuZGltc1swXSAhPT0gYmF0Y2hTaXplIHx8IHBhc3RWYWx1ZS5kaW1zWzFdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8XG4gICAgICAgIHBhc3RWYWx1ZS5kaW1zWzNdICE9PSBoZWFkU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3RfdmFsdWVcIiBzaGFwZSAoYmF0Y2hfc2l6ZSwgbnVtX2hlYWRzLCBwYXN0X3NlcXVlbmNlX2xlbmd0aCwgaGVhZF9zaXplKScpO1xuICAgIH1cbiAgICBpZiAocGFzdEtleS5kaW1zWzJdICE9PSBwYXN0VmFsdWUuZGltc1syXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3Rfa2V5XCIgYW5kIFwicGFzdF92YWx1ZVwiIHNoYWxsIGhhdmUgc2FtZSBkaW0gMiAocGFzdF9zZXF1ZW5jZV9sZW5ndGgpJyk7XG4gICAgfVxuICAgIGlmIChwYXN0VmFsdWUuZGltcy5sZW5ndGggIT09IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0X3ZhbHVlXCIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSA0IGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgcGFzdFNlcXVlbmNlTGVuZ3RoID0gcGFzdEtleS5kaW1zWzJdO1xuICAgIG1heFNlcXVlbmNlTGVuZ3RoID0gcGFzdEtleS5kaW1zWzJdO1xuICB9IGVsc2UgaWYgKHBhc3RLZXkgfHwgcGFzdFZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3Rfa2V5XCIgYW5kIFwicGFzdF92YWx1ZVwiIHNoYWxsIGJlIGJvdGggcHJlc2VudCBvciBib3RoIGFic2VudCcpO1xuICB9XG5cbiAgbGV0IHFrdkZvcm1hdDogQXR0ZW50aW9uUWt2Rm9ybWF0O1xuICBpZiAoa2V5KSB7XG4gICAgaWYgKHF1ZXJ5LmRpbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicXVlcnlcIiBpcyBleHBlY3RlZCB0byBoYXZlIDMgZGltZW5zaW9ucyB3aGVuIGtleSBpcyBnaXZlbicpO1xuICAgIH1cbiAgICBpZiAoa2V5LmRpbXMubGVuZ3RoIDwgMyB8fCBrZXkuZGltcy5sZW5ndGggPiA1KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwia2V5XCIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSAzLCA0LCBvciA1IGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LmRpbXNbMF0gIT09IGtleS5kaW1zWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicXVlcnlcIiBhbmQgXCJrZXlcIiBzaGFsbCBoYXZlIHNhbWUgZGltIDAgKGJhdGNoIHNpemUpJyk7XG4gICAgfVxuXG4gICAgaWYgKGtleS5kaW1zLmxlbmd0aCA9PT0gMykge1xuICAgICAgaWYgKGtleS5kaW1zWzJdICE9PSBxdWVyeS5kaW1zWzJdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJxdWVyeVwiIGFuZCBcImtleVwiIHNoYWxsIGhhdmUgc2FtZSBkaW0gMiAoaGlkZGVuX3NpemUpJyk7XG4gICAgICB9XG4gICAgICBxa3ZGb3JtYXQgPSBBdHRlbnRpb25Ra3ZGb3JtYXQucWt2QlNOSDtcbiAgICAgIGt2U2VxdWVuY2VMZW5ndGggPSBrZXkuZGltc1sxXTtcbiAgICB9IGVsc2UgaWYgKGtleS5kaW1zLmxlbmd0aCA9PT0gNSkge1xuICAgICAgaWYgKGtleS5kaW1zWzJdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8IGtleS5kaW1zWzNdICE9PSAyIHx8IGtleS5kaW1zWzRdICE9PSBoZWFkU2l6ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdCBcImtleVwiIHNoYXBlIChiYXRjaF9zaXplLCBrdl9zZXF1ZW5jZV9sZW5ndGgsIG51bV9oZWFkcywgMiwgaGVhZF9zaXplKSBmb3IgcGFja2VkIGt2Jyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3QgXCJ2YWx1ZVwiIGJlIG5vbmUgd2hlbiBcImtleVwiIGhhcyBwYWNrZWQga3YgZm9ybWF0LicpO1xuICAgICAgfVxuICAgICAgcWt2Rm9ybWF0ID0gQXR0ZW50aW9uUWt2Rm9ybWF0LnFLdkJTTkh4QlNOMkg7XG4gICAgICBrdlNlcXVlbmNlTGVuZ3RoID0ga2V5LmRpbXNbMV07XG4gICAgfSBlbHNlIHsgIC8vIGtleV9kaW1zLnNpemUoKSA9PSA0IChjcm9zcy1hdHRlbnRpb24gd2l0aCBwYXN0X2tleSlcbiAgICAgIGlmIChrZXkuZGltc1sxXSAhPT0gYXR0cmlidXRlcy5udW1IZWFkcyB8fCBrZXkuZGltc1szXSAhPT0gaGVhZFNpemUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3QgXCJrZXlcIiBzaGFwZSAoYmF0Y2hfc2l6ZSwgbnVtX2hlYWRzLCBrdl9zZXF1ZW5jZV9sZW5ndGgsIGhlYWRfc2l6ZSkgZm9yIHBhc3Rfa2V5Jyk7XG4gICAgICB9XG5cbiAgICAgIHFrdkZvcm1hdCA9IEF0dGVudGlvblFrdkZvcm1hdC51bmtub3duO1xuICAgICAga3ZTZXF1ZW5jZUxlbmd0aCA9IGtleS5kaW1zWzJdO1xuICAgIH1cbiAgfSBlbHNlIHsgIC8vIHBhY2tlZCBRS1ZcbiAgICBpZiAocXVlcnkuZGltcy5sZW5ndGggIT09IDMgJiYgcXVlcnkuZGltcy5sZW5ndGggIT09IDUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJxdWVyeVwiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMyBvciA1IGRpbWVuc2lvbnMgd2hlbiBrZXkgaXMgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LmRpbXMubGVuZ3RoID09PSA1ICYmIChxdWVyeS5kaW1zWzJdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8IHF1ZXJ5LmRpbXNbM10gIT09IDMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdCBcInF1ZXJ5XCIgc2hhcGUgKGJhdGNoX3NpemUsIGt2X3NlcXVlbmNlX2xlbmd0aCwgbnVtX2hlYWRzLCAzLCBoZWFkX3NpemUpIGZvciBwYWNrZWQga3YnKTtcbiAgICB9XG5cbiAgICBxa3ZGb3JtYXQgPSBBdHRlbnRpb25Ra3ZGb3JtYXQucWt2QlNOM0g7XG4gIH1cblxuICBpZiAoYmlhcykge1xuICAgIGlmIChiaWFzLmRpbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwiYmlhc1wiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMSBkaW1lbnNpb24nKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmIChxdWVyeS5kaW1zLmxlbmd0aCA9PT0gNSAmJiBxdWVyeS5kaW1zWzNdID09PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYmlhcyBpcyBub3QgYWxsb3dlZCBmb3IgcGFja2VkIGt2LicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBtYXNrVHlwZTogQXR0ZW50aW9uTWFza1R5cGUgPSBBdHRlbnRpb25NYXNrVHlwZS5ub25lO1xuICBpZiAoa2V5UGFkZGluZ01hc2spIHtcbiAgICBtYXNrVHlwZSA9IEF0dGVudGlvbk1hc2tUeXBlLm1hc2tVbmtub3duO1xuICAgIGNvbnN0IG1hc2tEaW1zID0ga2V5UGFkZGluZ01hc2suZGltcztcbiAgICBpZiAobWFza0RpbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAobWFza0RpbXNbMF0gPT09IGJhdGNoU2l6ZSkge1xuICAgICAgICBtYXNrVHlwZSA9IEF0dGVudGlvbk1hc2tUeXBlLm1hc2sxZEtleVNlcUxlbjtcbiAgICAgIH0gZWxzZSBpZiAobWFza0RpbXNbMF0gPT09IDMgKiBiYXRjaFNpemUgKyAyKSB7XG4gICAgICAgIG1hc2tUeXBlID0gQXR0ZW50aW9uTWFza1R5cGUubWFzazFES2V5U2VxTGVuU3RhcnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtYXNrRGltcy5sZW5ndGggPT09IDIgJiYgbWFza0RpbXNbMF0gPT09IGJhdGNoU2l6ZSAmJiBtYXNrRGltc1sxXSA9PT0ga3ZTZXF1ZW5jZUxlbmd0aCkge1xuICAgICAgbWFza1R5cGUgPSBBdHRlbnRpb25NYXNrVHlwZS5tYXNrMmRLZXlQYWRkaW5nO1xuICAgIH1cbiAgICBpZiAobWFza1R5cGUgPT09IEF0dGVudGlvbk1hc2tUeXBlLm1hc2tVbmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwia2V5X3BhZGRpbmdfbWFza1wiIHNoYXBlIHNoYWxsIGJlIChiYXRjaF9zaXplKSBvciAoYmF0Y2hfc2l6ZSwga3Zfc2VxdWVuY2VfbGVuZ3RoKScpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01hc2sgbm90IHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgbGV0IHBhc3NQYXN0SW5LdiA9IGZhbHNlO1xuICBsZXQgdkhpZGRlblNpemUgPSBoaWRkZW5TaXplO1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAodmFsdWUuZGltcy5sZW5ndGggIT09IDMgJiYgdmFsdWUuZGltcy5sZW5ndGggIT09IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJ2YWx1ZVwiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMyBvciA0IGRpbWVuc2lvbnMnKTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnkuZGltc1swXSAhPT0gdmFsdWUuZGltc1swXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInF1ZXJ5XCIgYW5kIFwidmFsdWVcIiBzaGFsbCBoYXZlIHNhbWUgZGltIDAgKGJhdGNoX3NpemUpJyk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLmRpbXMubGVuZ3RoID09PSAzKSB7XG4gICAgICBpZiAoa3ZTZXF1ZW5jZUxlbmd0aCAhPT0gdmFsdWUuZGltc1sxXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwia2V5XCIgYW5kIFwidmFsdWVcIiBzaGFsbCBoYXZlIHRoZSBzYW1lIGRpbSAxIChrdl9zZXF1ZW5jZV9sZW5ndGgpJyk7XG4gICAgICB9XG4gICAgICB2SGlkZGVuU2l6ZSA9IHZhbHVlLmRpbXNbMl07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChrdlNlcXVlbmNlTGVuZ3RoICE9PSB2YWx1ZS5kaW1zWzJdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0X2tleVwiIGFuZCBcInBhc3RfdmFsdWVcIiBzaGFsbCBoYXZlIHRoZSBzYW1lIGRpbSAyIChrdl9zZXF1ZW5jZV9sZW5ndGgpJyk7XG4gICAgICB9XG4gICAgICB2SGlkZGVuU2l6ZSA9IHZhbHVlLmRpbXNbMV0gKiB2YWx1ZS5kaW1zWzNdO1xuICAgICAgcGFzc1Bhc3RJbkt2ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0b3RhbFNlcXVlbmNlTGVuZ3RoID0gcGFzdFNlcXVlbmNlTGVuZ3RoICsga3ZTZXF1ZW5jZUxlbmd0aDtcbiAgY29uc3QgYnJvYWRjYXN0UmVzUG9zQmlhcyA9IGZhbHNlO1xuXG4gIGlmIChrZXlQYWRkaW5nTWFzaykge1xuICAgIHRocm93IG5ldyBFcnJvcignS2V5IHBhZGRpbmcgbWFzayBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cblxuICBpZiAocmVsYXRpdmVQb3NpdGlvbkJpYXMpIHtcbiAgICBpZiAocmVsYXRpdmVQb3NpdGlvbkJpYXMuZGltcy5sZW5ndGggIT09IDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJyZWxhdGl2ZV9wb3NpdGlvbl9iaWFzXCIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSA0IGRpbWVuc2lvbnMnKTtcbiAgICB9XG4gICAgaWYgKChyZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zWzBdICE9PSBiYXRjaFNpemUgJiYgcmVsYXRpdmVQb3NpdGlvbkJpYXMuZGltc1swXSAhPT0gMSkgfHxcbiAgICAgICAgcmVsYXRpdmVQb3NpdGlvbkJpYXMuZGltc1sxXSAhPT0gYXR0cmlidXRlcy5udW1IZWFkcyB8fCByZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zWzJdICE9PSBzZXF1ZW5jZUxlbmd0aCB8fFxuICAgICAgICByZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zWzNdICE9PSB0b3RhbFNlcXVlbmNlTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicmVsYXRpdmVfcG9zaXRpb25fYmlhc1wiIHNoYXBlIChiYXRjaF9zaXplLCAxLCBzZXF1ZW5jZV9sZW5ndGgsIGt2X3NlcXVlbmNlX2xlbmd0aCknKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJhdGNoU2l6ZSxcbiAgICBzZXF1ZW5jZUxlbmd0aCxcbiAgICBwYXN0U2VxdWVuY2VMZW5ndGgsXG4gICAga3ZTZXF1ZW5jZUxlbmd0aCxcbiAgICB0b3RhbFNlcXVlbmNlTGVuZ3RoLFxuICAgIG1heFNlcXVlbmNlTGVuZ3RoLFxuICAgIGlucHV0SGlkZGVuU2l6ZTogMCxcbiAgICBoaWRkZW5TaXplLFxuICAgIHZIaWRkZW5TaXplLFxuICAgIGhlYWRTaXplLFxuICAgIHZIZWFkU2l6ZTogTWF0aC5mbG9vcih2SGlkZGVuU2l6ZSAvIGF0dHJpYnV0ZXMubnVtSGVhZHMpLFxuICAgIG51bUhlYWRzOiBhdHRyaWJ1dGVzLm51bUhlYWRzLFxuICAgIGlzVW5pZGlyZWN0aW9uYWw6IGZhbHNlLFxuICAgIHBhc3RQcmVzZW50U2hhcmVCdWZmZXI6IGZhbHNlLFxuICAgIG1hc2tGaWx0ZXJWYWx1ZTogYXR0cmlidXRlcy5tYXNrRmlsdGVyVmFsdWUsXG4gICAgbWFza1R5cGUsXG4gICAgc2NhbGU6IGF0dHJpYnV0ZXMuc2NhbGUsXG4gICAgYnJvYWRjYXN0UmVzUG9zQmlhcyxcbiAgICBwYXNzUGFzdEluS3YsXG4gICAgcWt2Rm9ybWF0LFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlTXVsdGlIZWFkQXR0ZW50aW9uQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBBdHRlbnRpb25BdHRycyk6IEF0dGVudGlvbkF0dHJzID0+XG4gICAgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHsuLi5hdHRyaWJ1dGVzfSk7XG5cbmNvbnN0IHdlaWdodFRyYW5zcG9zZUF0dHJpYnV0ZTogVHJhbnNwb3NlQXR0cmlidXRlcyA9IGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7cGVybTogWzAsIDIsIDEsIDNdfSk7XG5cbmNvbnN0IGFkZEJpYXNUcmFuc3Bvc2UgPVxuICAgIChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgcWt2OiBUZW5zb3JWaWV3LCBiaWFzOiBUZW5zb3JWaWV3LCBiYXRjaFNpemU6IG51bWJlciwgc2VxdWVuY2VMZW5ndGg6IG51bWJlcixcbiAgICAgaGlkZGVuU2l6ZTogbnVtYmVyLCBiaWFzT2Zmc2V0OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gW2JhdGNoU2l6ZSwgc2VxdWVuY2VMZW5ndGgsIGhpZGRlblNpemVdO1xuICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGJpYXNPZmZzZXR9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBoaWRkZW5TaXplfVxuICAgICAgXTtcblxuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdxa3Zfd2l0aF9iaWFzJywgcWt2LmRhdGFUeXBlLCBvdXRwdXRTaGFwZSk7XG4gICAgICAgIGNvbnN0IHFrdklucHV0ID0gaW5wdXRWYXJpYWJsZSgncWt2JywgcWt2LmRhdGFUeXBlLCBvdXRwdXRTaGFwZSk7XG4gICAgICAgIGNvbnN0IGJpYXNJbnB1dCA9IGlucHV0VmFyaWFibGUoJ2JpYXMnLCBiaWFzLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSk7XG5cbiAgICAgICAgY29uc3QgdW5pZm9ybXM6IFVuaWZvcm1zQXJyYXlUeXBlID0gW1xuICAgICAgICAgIHtuYW1lOiAnb3V0cHV0X3NpemUnLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnYmlhc19vZmZzZXQnLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnaGlkZGVuX3NpemUnLCB0eXBlOiAndTMyJ31cbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGBcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyhxa3ZJbnB1dCwgYmlhc0lucHV0LCBvdXRwdXQpfVxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRfc2l6ZScpfVxuICAgIGxldCBiaWFzX29mZnNldF9pZHggPSAoZ2xvYmFsX2lkeCAlIHVuaWZvcm1zLmhpZGRlbl9zaXplKSArIHVuaWZvcm1zLmJpYXNfb2Zmc2V0O1xuXG4gICAgcWt2X3dpdGhfYmlhc1tnbG9iYWxfaWR4XSA9IHFrdltnbG9iYWxfaWR4XSArIGJpYXNbYmlhc19vZmZzZXRfaWR4XTtcbiAgfWA7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdNdWx0aUhlYWRBdHRlbnRpb25BZGRCaWFzJyxcbiAgICAgICAgICAgIHNoYWRlckNhY2hlOiB7aW5wdXREZXBlbmRlbmNpZXM6IFsndHlwZScsICd0eXBlJ119LFxuICAgICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IHFrdi5kYXRhVHlwZSwgZ3B1RGF0YVR5cGU6IEdwdURhdGFUeXBlLmRlZmF1bHR9XSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtpbnB1dHM6IFtxa3YsIGJpYXNdLCBvdXRwdXRzOiBbLTFdfSlbMF07XG4gICAgfTtcblxuY29uc3QgbWF5YmVUcmFuc3Bvc2VUb0JOU0hBbmRBZGRCaWFzID1cbiAgICAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGJhdGNoU2l6ZTogbnVtYmVyLCBudW1IZWFkczogbnVtYmVyLCBzZXF1ZW5jZUxlbmd0aDogbnVtYmVyLCBoZWFkU2l6ZTogbnVtYmVyLFxuICAgICBpbnB1dDogVGVuc29yVmlldywgYmlhcz86IFRlbnNvclZpZXcsIGJpYXNPZmZzZXQ/OiBudW1iZXIpID0+IHtcbiAgICAgIC8vIGNvbnN0IG5ld0RpbXMgPSBbXTtcblxuICAgICAgbGV0IHJlc2hhcGVkSW5wdXQgPSBpbnB1dDtcbiAgICAgIGlmICghYmlhcykge1xuICAgICAgICBpZiAoaW5wdXQuZGltcy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICByZXNoYXBlZElucHV0ID0gaW5wdXQucmVzaGFwZShbYmF0Y2hTaXplLCBzZXF1ZW5jZUxlbmd0aCwgbnVtSGVhZHMsIGhlYWRTaXplXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvKHJlc2hhcGVkSW5wdXQsIHdlaWdodFRyYW5zcG9zZUF0dHJpYnV0ZS5wZXJtKSxcbiAgICAgICAgICAgIHtpbnB1dHM6IFtyZXNoYXBlZElucHV0XSwgb3V0cHV0czogWy0xXX0pWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNlcXVlbmNlTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRCaWFzUmVzaGFwZSBpcyBub3QgaW1wbGVtZW50ZWQuIFBsZWFzZSBleHBvcnQgeW91ciBtb2RlbCB3aXRoIHBhY2tlZCBRS1Ygb3IgS1YnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNoYXBlZElucHV0ID1cbiAgICAgICAgICAgICAgYWRkQmlhc1RyYW5zcG9zZShjb250ZXh0LCBpbnB1dCwgYmlhcywgYmF0Y2hTaXplLCBzZXF1ZW5jZUxlbmd0aCwgbnVtSGVhZHMgKiBoZWFkU2l6ZSwgYmlhc09mZnNldCEpO1xuICAgICAgICAgIHJlc2hhcGVkSW5wdXQgPSByZXNoYXBlZElucHV0LnJlc2hhcGUoW2JhdGNoU2l6ZSwgc2VxdWVuY2VMZW5ndGgsIG51bUhlYWRzLCBoZWFkU2l6ZV0pO1xuICAgICAgICAgIHJldHVybiBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgICAgIGNyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvKHJlc2hhcGVkSW5wdXQsIHdlaWdodFRyYW5zcG9zZUF0dHJpYnV0ZS5wZXJtKSxcbiAgICAgICAgICAgICAge2lucHV0czogW3Jlc2hhcGVkSW5wdXRdLCBvdXRwdXRzOiBbLTFdfSlbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgbXVsdGlIZWFkQXR0ZW50aW9uID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBBdHRlbnRpb25BdHRycyk6IHZvaWQgPT4ge1xuICBjb25zdCBwYXJhbXMgPSB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gIGNvbnN0IHF1ZXJ5ID0gY29udGV4dC5pbnB1dHNbMF07XG4gIGNvbnN0IGtleSA9IGdldElucHV0KGNvbnRleHQuaW5wdXRzLCAxKTtcbiAgY29uc3QgdmFsdWUgPSBnZXRJbnB1dChjb250ZXh0LmlucHV0cywgMik7XG4gIGNvbnN0IGJpYXMgPSBnZXRJbnB1dChjb250ZXh0LmlucHV0cywgMyk7XG4gIGNvbnN0IGtleVBhZGRpbmdNYXNrID0gZ2V0SW5wdXQoY29udGV4dC5pbnB1dHMsIDQpO1xuICBjb25zdCByZWxhdGl2ZVBvc2l0aW9uQmlhcyA9IGdldElucHV0KGNvbnRleHQuaW5wdXRzLCA1KTtcbiAgY29uc3QgcGFzdEtleSA9IGdldElucHV0KGNvbnRleHQuaW5wdXRzLCA2KTtcbiAgY29uc3QgcGFzdFZhbHVlID0gZ2V0SW5wdXQoY29udGV4dC5pbnB1dHMsIDcpO1xuICBpZiAocXVlcnkuZGltcy5sZW5ndGggPT09IDUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhY2tlZCBRS1YgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBpZiAoa2V5Py5kaW1zLmxlbmd0aCA9PT0gNSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFja2VkIEtWIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLy8gYXBwbHlBdHRlbnRpb24gZXhwZWN0cyBCTlNIIGlucHV0c1xuICBjb25zdCBrdkJOU0ggPSBrZXkgJiYgdmFsdWUgJiYga2V5LmRpbXMubGVuZ3RoID09PSA0ICYmIHZhbHVlLmRpbXMubGVuZ3RoID09PSA0O1xuXG4gIGNvbnN0IFEgPSBtYXliZVRyYW5zcG9zZVRvQk5TSEFuZEFkZEJpYXMoXG4gICAgICBjb250ZXh0LCBwYXJhbXMuYmF0Y2hTaXplLCBwYXJhbXMubnVtSGVhZHMsIHBhcmFtcy5zZXF1ZW5jZUxlbmd0aCwgcGFyYW1zLmhlYWRTaXplLCBxdWVyeSwgYmlhcywgMCk7XG5cbiAgaWYgKGt2Qk5TSCkge1xuICAgIHJldHVybiBhcHBseUF0dGVudGlvbihcbiAgICAgICAgY29udGV4dCwgUSwga2V5LCB2YWx1ZSwga2V5UGFkZGluZ01hc2ssIHVuZGVmaW5lZCwgcGFzdEtleSwgcGFzdFZhbHVlLCByZWxhdGl2ZVBvc2l0aW9uQmlhcywgcGFyYW1zLFxuICAgICAgICBhdHRyaWJ1dGVzKTtcbiAgfVxuICBpZiAoIWtleSB8fCAhdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleSBhbmQgdmFsdWUgbXVzdCBiZSBwcm92aWRlZCcpO1xuICB9XG4gIGNvbnN0IEsgPSBtYXliZVRyYW5zcG9zZVRvQk5TSEFuZEFkZEJpYXMoXG4gICAgICBjb250ZXh0LCBwYXJhbXMuYmF0Y2hTaXplLCBwYXJhbXMubnVtSGVhZHMsIHBhcmFtcy5rdlNlcXVlbmNlTGVuZ3RoLCBwYXJhbXMuaGVhZFNpemUsIGtleSwgYmlhcyxcbiAgICAgIHBhcmFtcy5oaWRkZW5TaXplKTtcblxuICBjb25zdCBWID0gbWF5YmVUcmFuc3Bvc2VUb0JOU0hBbmRBZGRCaWFzKFxuICAgICAgY29udGV4dCwgcGFyYW1zLmJhdGNoU2l6ZSwgcGFyYW1zLm51bUhlYWRzLCBwYXJhbXMua3ZTZXF1ZW5jZUxlbmd0aCwgcGFyYW1zLnZIZWFkU2l6ZSwgdmFsdWUsIGJpYXMsXG4gICAgICAyICogcGFyYW1zLmhpZGRlblNpemUpO1xuXG4gIGFwcGx5QXR0ZW50aW9uKFxuICAgICAgY29udGV4dCwgUSwgSywgViwga2V5UGFkZGluZ01hc2ssIHVuZGVmaW5lZCwgcGFzdEtleSwgcGFzdFZhbHVlLCByZWxhdGl2ZVBvc2l0aW9uQmlhcywgcGFyYW1zLCBhdHRyaWJ1dGVzKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm8sIFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5LCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBnZXRFbGVtZW50QXQsIEluZGljZXNIZWxwZXIsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXIsIFVuaWZvcm1EYXRhRWxlbWVudFR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuL2NvbW1vbic7XG5cbmludGVyZmFjZSBQYWRBdHRyaWJ1dGVzIHtcbiAgLy8gMC1jb25zdGFudCwgMS1yZWZsZWN0LCAyLWVkZ2UsIDMtd3JhcFxuICByZWFkb25seSBtb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IHZhbHVlOiBudW1iZXI7XG4gIHJlYWRvbmx5IHBhZHM6IG51bWJlcltdO1xufVxuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVG9vIGZldyBpbnB1dHMnKTtcbiAgfVxuICBpZiAoaW5wdXRzWzBdLmRhdGFUeXBlICE9PSBEYXRhVHlwZS5mbG9hdCAmJiBpbnB1dHNbMF0uZGF0YVR5cGUgIT09IERhdGFUeXBlLmZsb2F0MTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IHR5cGUgbXVzdCBiZSBmbG9hdCBvciBmbG9hdDE2LicpO1xuICB9XG5cbiAgaWYgKGlucHV0cy5sZW5ndGggPj0gMikge1xuICAgIGxldCB2YWxpZFBhZHMgPSBpbnB1dHNbMF0uZGltcy5sZW5ndGggKiAyID09PSBpbnB1dHNbMV0uZGltc1swXTtcbiAgICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgdmFsaWRQYWRzID0gaW5wdXRzWzNdLmRpbXNbMF0gKiAyID09PSBpbnB1dHNbMV0uZGltc1swXTtcbiAgICB9XG4gICAgaWYgKCF2YWxpZFBhZHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhZHMgc2hvdWxkIGJlIGEgMUQgdGVuc29yIG9mIHNoYXBlIFsyICogaW5wdXRfcmFua10gb3IgWzIgKiBudW1fYXhlc10uJyk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBnZXRQYWRDb25zdGFudCA9IChvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0UmFuazogbnVtYmVyLCBwYWRzTGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICBsZXQgYmxvY2sgPSAnJztcbiAgZm9yIChsZXQgaSA9IGlucHV0UmFuayAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgYmxvY2sgKz0gYFxuICAgICAgICAgICAgayA9IGkzMigke291dHB1dC5pbmRpY2VzR2V0KCdpbmRpY2VzJywgaSl9KSAtICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5wYWRzJywgaSwgcGFkc0xlbmd0aCl9O1xuICAgICAgICAgICAgaWYgKGsgPCAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGsgPj0gaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3NoYXBlJywgaSwgaW5wdXRSYW5rKX0pKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ICs9IGsgKiBpMzIoJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnhfc3RyaWRlcycsIGksIGlucHV0UmFuayl9KTtcbiAgICAgICAgYDtcbiAgfVxuXG4gIHJldHVybiBgXG4gICAgICAgICAgdmFsdWUgPSAke291dHB1dC50eXBlLnZhbHVlfSh1bmlmb3Jtcy5jb25zdGFudF92YWx1ZSk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgJHtibG9ja31cbiAgICAgICAgICAgIHZhbHVlID0geFtvZmZzZXRdO1xuICAgICAgICAgIH1cbiAgICAgIGA7XG59O1xuXG5jb25zdCBnZXRQYWRSZWZsZWN0ID0gKG91dHB1dDogSW5kaWNlc0hlbHBlciwgaW5wdXRSYW5rOiBudW1iZXIsIHBhZHNMZW5ndGg6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGxldCBibG9jayA9ICcnO1xuICBmb3IgKGxldCBpID0gaW5wdXRSYW5rIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICBibG9jayArPSBgXG4gICAgICAgICAgICAgICAgayA9IGkzMigke291dHB1dC5pbmRpY2VzR2V0KCdpbmRpY2VzJywgaSl9KSAtICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5wYWRzJywgaSwgcGFkc0xlbmd0aCl9O1xuICAgICAgICAgICAgICAgIGlmIChrIDwgMCkge1xuICAgICAgICAgICAgICAgICAgayA9IC1rO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsZXQgXzJuXzEgPSAyICogKGkzMigke2dldEVsZW1lbnRBdCgndW5pZm9ybXMueF9zaGFwZScsIGksIGlucHV0UmFuayl9KSAtIDEpO1xuICAgICAgICAgICAgICAgICAgayA9IGsgJSBfMm5fMTtcbiAgICAgICAgICAgICAgICAgIGlmKGsgPj0gaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3NoYXBlJywgaSwgaW5wdXRSYW5rKX0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGsgPSBfMm5fMSAtIGs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNldCArPSBrICogaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3N0cmlkZXMnLCBpLCBpbnB1dFJhbmspfSk7XG4gICAgICAgICAgICBgO1xuICB9XG5cbiAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgICAgICAgJHtibG9ja31cbiAgICAgICAgICAgICAgdmFsdWUgPSB4W29mZnNldF07XG4gICAgICAgICAgYDtcbn07XG5cbmNvbnN0IGdldFBhZEVkZ2UgPSAob3V0cHV0OiBJbmRpY2VzSGVscGVyLCBpbnB1dFJhbms6IG51bWJlciwgcGFkc0xlbmd0aDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgbGV0IGJsb2NrID0gJyc7XG4gIGZvciAobGV0IGkgPSBpbnB1dFJhbmsgLSAxOyBpID49IDA7IC0taSkge1xuICAgIGJsb2NrICs9IGBcbiAgICAgICAgICAgICAgICBrID0gaTMyKCR7b3V0cHV0LmluZGljZXNHZXQoJ2luZGljZXMnLCBpKX0pIC0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnBhZHMnLCBpLCBwYWRzTGVuZ3RoKX07XG4gICAgICAgICAgICAgICAgaWYgKGsgPCAwKSB7XG4gICAgICAgICAgICAgICAgICBrID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGsgPj0gaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3NoYXBlJywgaSwgaW5wdXRSYW5rKX0pKSB7XG4gICAgICAgICAgICAgICAgICBrID0gaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3NoYXBlJywgaSwgaW5wdXRSYW5rKX0pIC0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGsgKiBpMzIoJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnhfc3RyaWRlcycsIGksIGlucHV0UmFuayl9KTtcbiAgICAgICAgICAgIGA7XG4gIH1cblxuICByZXR1cm4gYFxuICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgICAke2Jsb2NrfVxuICAgICAgICAgICAgICB2YWx1ZSA9IHhbb2Zmc2V0XTtcbiAgICAgICAgICBgO1xufTtcblxuY29uc3QgZ2V0UGFkV3JhcCA9IChvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0UmFuazogbnVtYmVyLCBwYWRzTGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICBsZXQgYmxvY2sgPSAnJztcbiAgZm9yIChsZXQgaSA9IGlucHV0UmFuayAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgYmxvY2sgKz0gYFxuICAgICAgICAgICAgICAgIGsgPSBpMzIoJHtvdXRwdXQuaW5kaWNlc0dldCgnaW5kaWNlcycsIGkpfSkgLSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMucGFkcycsIGksIHBhZHNMZW5ndGgpfTtcbiAgICAgICAgICAgICAgICBpZiAoayA8IDApICB7XG4gICAgICAgICAgICAgICAgICBrICs9IGkzMigke2dldEVsZW1lbnRBdCgndW5pZm9ybXMueF9zaGFwZScsIGksIGlucHV0UmFuayl9XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrID49IGkzMigke2dldEVsZW1lbnRBdCgndW5pZm9ybXMueF9zaGFwZScsIGksIGlucHV0UmFuayl9KSkge1xuICAgICAgICAgICAgICAgICAgayAtPSBpMzIoJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnhfc2hhcGUnLCBpLCBpbnB1dFJhbmspfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNldCArPSBrICogaTMyKCR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy54X3N0cmlkZXMnLCBpLCBpbnB1dFJhbmspfSk7XG4gICAgICAgICAgICBgO1xuICB9XG5cbiAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgICAgICAgJHtibG9ja31cbiAgICAgICAgICAgICAgdmFsdWUgPSB4W29mZnNldF07XG4gICAgICAgICAgYDtcbn07XG5cbmNvbnN0IGdldFBhZFNuaXBwZXQgPSAob3V0cHV0OiBJbmRpY2VzSGVscGVyLCBpbnB1dFJhbms6IG51bWJlciwgYXR0cmlidXRlczogUGFkQXR0cmlidXRlcyk6IHN0cmluZyA9PiB7XG4gIHN3aXRjaCAoYXR0cmlidXRlcy5tb2RlKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGdldFBhZENvbnN0YW50KG91dHB1dCwgaW5wdXRSYW5rLCBhdHRyaWJ1dGVzLnBhZHMubGVuZ3RoKTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gZ2V0UGFkUmVmbGVjdChvdXRwdXQsIGlucHV0UmFuaywgYXR0cmlidXRlcy5wYWRzLmxlbmd0aCk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGdldFBhZEVkZ2Uob3V0cHV0LCBpbnB1dFJhbmssIGF0dHJpYnV0ZXMucGFkcy5sZW5ndGgpO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBnZXRQYWRXcmFwKG91dHB1dCwgaW5wdXRSYW5rLCBhdHRyaWJ1dGVzLnBhZHMubGVuZ3RoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1vZGUnKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlUGFkUHJvZ3JhbUluZm8gPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IFBhZEF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gU2hhcGVVdGlsLnBhZFNoYXBlKGlucHV0c1swXS5kaW1zLnNsaWNlKCksIGF0dHJpYnV0ZXMucGFkcyk7XG4gIGNvbnN0IGlucHV0RGltcyA9IGlucHV0c1swXS5kaW1zO1xuICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPVxuICAgICAgW3t0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUuaW50MzIsIGRhdGE6IGF0dHJpYnV0ZXMucGFkc31dO1xuICBpZiAoYXR0cmlidXRlcy5tb2RlID09PSAwKSB7XG4gICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goe3R5cGU6IGlucHV0c1swXS5kYXRhVHlwZSwgZGF0YTogYXR0cmlidXRlcy52YWx1ZX0pO1xuICB9XG5cbiAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzBdLmRpbXMsIG91dHB1dFNoYXBlKSk7XG4gIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJ107XG5cbiAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ3gnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0RGltcy5sZW5ndGgpO1xuICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXQudHlwZS52YWx1ZTtcbiAgICBjb25zdCBwYWRTbmlwcGV0ID0gZ2V0UGFkU25pcHBldChvdXRwdXQsIGlucHV0RGltcy5sZW5ndGgsIGF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9XG4gICAgICAgIFt7bmFtZTogJ291dHB1dF9zaXplJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ3BhZHMnLCB0eXBlOiAnaTMyJywgbGVuZ3RoOiBhdHRyaWJ1dGVzLnBhZHMubGVuZ3RofV07XG4gICAgaWYgKGF0dHJpYnV0ZXMubW9kZSA9PT0gMCkge1xuICAgICAgdW5pZm9ybXMucHVzaCh7bmFtZTogJ2NvbnN0YW50X3ZhbHVlJywgdHlwZTogZGF0YVR5cGUgYXMgVW5pZm9ybURhdGFFbGVtZW50VHlwZX0pO1xuICAgIH1cblxuICAgIHJldHVybiBgXG4gICAgICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKGlucHV0LCBvdXRwdXQpfVxuICAgICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRfc2l6ZScpfVxuXG4gICAgICAgICAgICBsZXQgaW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcblxuICAgICAgICAgICAgdmFyIHZhbHVlID0gJHtkYXRhVHlwZX0oMCk7XG4gICAgICAgICAgICAke3BhZFNuaXBwZXR9XG4gICAgICAgICAgICBvdXRwdXRbZ2xvYmFsX2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgfWA7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnUGFkJyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke2F0dHJpYnV0ZXMubW9kZX1gLCBpbnB1dERlcGVuZGVuY2llc30sXG4gICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgIG91dHB1dHM6IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgIH0pLFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZVBhZEF0dHJpYnV0ZXNGcm9tSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBQYWRBdHRyaWJ1dGVzKTogUGFkQXR0cmlidXRlcyA9PiB7XG4gIGlmIChpbnB1dHMubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGJpZ0ludDY0UGFkcyA9IGlucHV0c1sxXS5nZXRCaWdJbnQ2NEFycmF5KCk7XG4gICAgY29uc3QgdmFsdWUgPSAoaW5wdXRzLmxlbmd0aCA+PSAzICYmIGlucHV0c1syXS5kYXRhKSA/IGlucHV0c1syXS5nZXRGbG9hdDMyQXJyYXkoKVswXSA6IDAuMDtcblxuICAgIGNvbnN0IGlucHV0UmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aDtcbiAgICBjb25zdCB1cGRhdGVQYWRzID0gbmV3IEludDMyQXJyYXkoMiAqIGlucHV0UmFuaykuZmlsbCgwKTtcbiAgICBpZiAoaW5wdXRzLmxlbmd0aCA+PSA0KSB7XG4gICAgICBjb25zdCBheGVzID0gaW5wdXRzWzNdLmdldEJpZ0ludDY0QXJyYXkoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1cGRhdGVQYWRzW051bWJlcihheGVzW2ldKV0gPSBOdW1iZXIoYmlnSW50NjRQYWRzW2ldKTtcbiAgICAgICAgdXBkYXRlUGFkc1tOdW1iZXIoYXhlc1tpXSkgKyBpbnB1dFJhbmtdID0gTnVtYmVyKGJpZ0ludDY0UGFkc1tpICsgYXhlcy5sZW5ndGhdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYmlnSW50NjRQYWRzLmZvckVhY2goKHYsIGkpID0+IHVwZGF0ZVBhZHNbTnVtYmVyKGkpXSA9IChOdW1iZXIodikpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIHVwZGF0ZVBhZHMuZm9yRWFjaCh2ID0+IHBhZHMucHVzaCh2KSk7XG5cbiAgICByZXR1cm4ge21vZGU6IGF0dHJpYnV0ZXMubW9kZSwgdmFsdWUsIHBhZHN9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFkID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBQYWRBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29uc3QgdXBkYXRlZEF0dHJpYnV0ZXMgPSBjcmVhdGVQYWRBdHRyaWJ1dGVzRnJvbUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVQYWRQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywgdXBkYXRlZEF0dHJpYnV0ZXMpLCB7aW5wdXRzOiBbMF19KTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7ZW52fSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7UG9vbENvbnZVdGlsLCBTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3ksIFByb2dyYW1Vbmlmb3JtfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGdldEVsZW1lbnRBdCwgSW5kaWNlc0hlbHBlciwgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgVW5pZm9ybXNBcnJheVR5cGV9IGZyb20gJy4vY29tbW9uJztcblxuLy8gVE9ETzogc3VwcG9ydDpcbi8vIC0gY2VpbF9tb2RlICAgICAgICAgICAgICAgICBcInRlc3RfbWF4cG9vbF8yZF9jZWlsXCJcbi8vIC0gc3RvcmFnZV9vcmRlciAgICAgICAgICAgICBcInRlc3RfbWF4cG9vbF93aXRoX2FyZ21heF8yZF9wcmVjb21wdXRlZF9zdHJpZGVzXCJcbi8vIC0gW01heFBvb2xdIGRpbGF0aW9ucyAgICAgICBcInRlc3RfbWF4cG9vbF8yZF9kaWxhdGlvbnNcIlxuLy8gLSBbTWF4UG9vbF0gb3V0cHV0WzFdICAgICAgIFwidGVzdF9tYXhwb29sX3dpdGhfYXJnbWF4XzJkX3ByZWNvbXB1dGVkX3BhZHNcIlxuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoZW52LndlYmdwdS52YWxpZGF0ZUlucHV0Q29udGVudCAmJiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoICE9PSAxKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUG9vbCBvcHMgcmVxdWlyZXMgMSBpbnB1dC4nKTtcbiAgfVxufTtcblxuY29uc3QgZ2V0QWRqdXN0ZWRQb29sQXR0cmlidXRlc0FuZE91dHB1dFNoYXBlID0gPEF0dHJpYnV0ZVR5cGUgZXh0ZW5kcyBBdmVyYWdlUG9vbEF0dHJpYnV0ZXN8TWF4UG9vbEF0dHJpYnV0ZXM+KFxuICAgIGlucHV0OiBUZW5zb3JWaWV3LCBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVUeXBlLCBpc0dsb2JhbE9wZXJhdG9yOiBib29sZWFuKTogW0F0dHJpYnV0ZVR5cGUsIG51bWJlcltdXSA9PiB7XG4gIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09ICdOSFdDJztcbiAgY29uc3QgaW5wdXRTaGFwZUFzQ2hhbm5lbEZpcnN0ID0gaW5wdXQuZGltcy5zbGljZSgpO1xuICBpZiAoaXNDaGFubmVsc0xhc3QpIHtcbiAgICBpbnB1dFNoYXBlQXNDaGFubmVsRmlyc3Quc3BsaWNlKDEsIDAsIGlucHV0U2hhcGVBc0NoYW5uZWxGaXJzdC5wb3AoKSEpOyAgLy8gTW92ZSBjaGFubmVsIHRvIHRoZSBzZWNvbmQgcG9zaXRpb24uXG4gIH1cbiAgY29uc3QgaGFzRGlsYXRpb25zID0gT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYXR0cmlidXRlcywgJ2RpbGF0aW9ucycpO1xuICBjb25zdCBrZXJuZWxTaGFwZSA9IGF0dHJpYnV0ZXMua2VybmVsU2hhcGUuc2xpY2UoKTtcbiAgY29uc3Qgc3RyaWRlcyA9IGF0dHJpYnV0ZXMuc3RyaWRlcy5zbGljZSgpO1xuICBjb25zdCBkaWxhdGlvbnM6IG51bWJlcltdID0gaGFzRGlsYXRpb25zID8gKGF0dHJpYnV0ZXMgYXMgTWF4UG9vbEF0dHJpYnV0ZXMpLmRpbGF0aW9ucy5zbGljZSgpIDogW107XG4gIGNvbnN0IHBhZHMgPSBhdHRyaWJ1dGVzLnBhZHMuc2xpY2UoKTtcbiAgUG9vbENvbnZVdGlsLmFkanVzdFBvb2xBdHRyaWJ1dGVzKGlzR2xvYmFsT3BlcmF0b3IsIGlucHV0U2hhcGVBc0NoYW5uZWxGaXJzdCwga2VybmVsU2hhcGUsIHN0cmlkZXMsIGRpbGF0aW9ucywgcGFkcyk7XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGVBc0NoYW5uZWxGaXJzdCA9IFBvb2xDb252VXRpbC5jb21wdXRlUG9vbE91dHB1dFNoYXBlKFxuICAgICAgaXNHbG9iYWxPcGVyYXRvciwgaW5wdXRTaGFwZUFzQ2hhbm5lbEZpcnN0LCBzdHJpZGVzLCBkaWxhdGlvbnMsIGtlcm5lbFNoYXBlLCBwYWRzLCBhdHRyaWJ1dGVzLmF1dG9QYWQpO1xuXG4gIGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKHt9LCBhdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc0RpbGF0aW9ucykge1xuICAgIE9iamVjdC5hc3NpZ24obmV3QXR0cmlidXRlcywge2tlcm5lbFNoYXBlLCBzdHJpZGVzLCBwYWRzLCBkaWxhdGlvbnMsIGNhY2hlS2V5OiBhdHRyaWJ1dGVzLmNhY2hlS2V5fSk7XG4gIH0gZWxzZSB7XG4gICAgT2JqZWN0LmFzc2lnbihuZXdBdHRyaWJ1dGVzLCB7a2VybmVsU2hhcGUsIHN0cmlkZXMsIHBhZHMsIGNhY2hlS2V5OiBhdHRyaWJ1dGVzLmNhY2hlS2V5fSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0U2hhcGVBc0NoYW5uZWxMYXN0ID0gb3V0cHV0U2hhcGVBc0NoYW5uZWxGaXJzdC5zbGljZSgpO1xuICBvdXRwdXRTaGFwZUFzQ2hhbm5lbExhc3QucHVzaChvdXRwdXRTaGFwZUFzQ2hhbm5lbExhc3Quc3BsaWNlKDEsIDEpWzBdKTtcbiAgcmV0dXJuIFtuZXdBdHRyaWJ1dGVzLCBpc0NoYW5uZWxzTGFzdCA/IG91dHB1dFNoYXBlQXNDaGFubmVsTGFzdCA6IG91dHB1dFNoYXBlQXNDaGFubmVsRmlyc3RdO1xufTtcblxuY29uc3QgZ2V0VW5pZm9ybUFuZFBhZEluZm8gPSA8QXR0cmlidXRlVHlwZSBleHRlbmRzIEF2ZXJhZ2VQb29sQXR0cmlidXRlc3xNYXhQb29sQXR0cmlidXRlcz4oXG4gICAgb3V0cHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLFxuICAgIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVR5cGUpOiBbUHJvZ3JhbVVuaWZvcm1bXSwgVW5pZm9ybXNBcnJheVR5cGUsIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW5dID0+IHtcbiAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICBjb25zdCBrZXJuZWxTaXplID0gU2hhcGVVdGlsLnNpemUoYXR0cmlidXRlcy5rZXJuZWxTaGFwZSk7XG4gIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9XG4gICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGtlcm5lbFNpemV9XTtcbiAgY29uc3QgdW5pZm9ybXM6IFVuaWZvcm1zQXJyYXlUeXBlID0gW3tuYW1lOiAnb3V0cHV0U2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdrZXJuZWxTaXplJywgdHlwZTogJ3UzMid9XTtcbiAgaWYgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoIDw9IDIpIHtcbiAgICBjb25zdCBrdyA9IGF0dHJpYnV0ZXMua2VybmVsU2hhcGVbYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzdyA9IGF0dHJpYnV0ZXMuc3RyaWRlc1thdHRyaWJ1dGVzLnN0cmlkZXMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgcHdTdGFydCA9IGF0dHJpYnV0ZXMucGFkc1thdHRyaWJ1dGVzLnBhZHMubGVuZ3RoIC8gMiAtIDFdO1xuICAgIGNvbnN0IHB3RW5kID0gYXR0cmlidXRlcy5wYWRzW2F0dHJpYnV0ZXMucGFkcy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBwd1N0YXJ0RW5kTm90WmVybyA9ICEhKHB3U3RhcnQgKyBwd0VuZCk7XG4gICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGt3fSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogc3d9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBwd1N0YXJ0fSxcbiAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcHdFbmR9LFxuICAgICk7XG4gICAgdW5pZm9ybXMucHVzaChcbiAgICAgICAge25hbWU6ICdrdycsIHR5cGU6ICd1MzInfSwge25hbWU6ICdzdycsIHR5cGU6ICd1MzInfSwge25hbWU6ICdwd1N0YXJ0JywgdHlwZTogJ3UzMid9LFxuICAgICAgICB7bmFtZTogJ3B3RW5kJywgdHlwZTogJ3UzMid9KTtcblxuICAgIGxldCBwaFN0YXJ0RW5kTm90WmVybyA9IGZhbHNlO1xuICAgIGlmIChhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3Qga2ggPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlW2F0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoIC0gMl07XG4gICAgICBjb25zdCBzaCA9IGF0dHJpYnV0ZXMuc3RyaWRlc1thdHRyaWJ1dGVzLnN0cmlkZXMubGVuZ3RoIC0gMl07XG4gICAgICBjb25zdCBwaFN0YXJ0ID0gYXR0cmlidXRlcy5wYWRzW2F0dHJpYnV0ZXMucGFkcy5sZW5ndGggLyAyIC0gMl07XG4gICAgICBjb25zdCBwaEVuZCA9IGF0dHJpYnV0ZXMucGFkc1thdHRyaWJ1dGVzLnBhZHMubGVuZ3RoIC0gMl07XG4gICAgICBwaFN0YXJ0RW5kTm90WmVybyA9ICEhKHBoU3RhcnQgKyBwaEVuZCk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaChcbiAgICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBraH0sIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHNofSwge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGhTdGFydH0sXG4gICAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogcGhFbmR9KTtcblxuICAgICAgdW5pZm9ybXMucHVzaChcbiAgICAgICAgICB7bmFtZTogJ2toJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ3NoJywgdHlwZTogJ3UzMid9LCB7bmFtZTogJ3BoU3RhcnQnLCB0eXBlOiAndTMyJ30sXG4gICAgICAgICAge25hbWU6ICdwaEVuZCcsIHR5cGU6ICd1MzInfSk7XG4gICAgfVxuICAgIHJldHVybiBbcHJvZ3JhbVVuaWZvcm1zLCB1bmlmb3JtcywgdHJ1ZSwgcHdTdGFydEVuZE5vdFplcm8sIHBoU3RhcnRFbmROb3RaZXJvXTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNDaGFubmVsc0xhc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUG9vbGluZyB3aXRoIGtlcm5lbFNoYXBlLmxlbmd0aCA+IDIgaXMgbm90IHN1cHBvcnRlZCBmb3IgTkhXQyBmb3JtYXQuJyk7XG4gICAgfVxuICAgIGNvbnN0IGtlcm5lbFN0cmlkZXMgPSBTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoYXR0cmlidXRlcy5rZXJuZWxTaGFwZSk7XG4gICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGtlcm5lbFN0cmlkZXN9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBhdHRyaWJ1dGVzLnBhZHN9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBhdHRyaWJ1dGVzLnN0cmlkZXN9KTtcbiAgICB1bmlmb3Jtcy5wdXNoKFxuICAgICAgICB7bmFtZTogJ2tlcm5lbFN0cmlkZXMnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBrZXJuZWxTdHJpZGVzLmxlbmd0aH0sXG4gICAgICAgIHtuYW1lOiAncGFkcycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGF0dHJpYnV0ZXMucGFkcy5sZW5ndGh9LFxuICAgICAgICB7bmFtZTogJ3N0cmlkZXMnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBhdHRyaWJ1dGVzLnN0cmlkZXMubGVuZ3RofSk7XG5cbiAgICBjb25zdCBoYXNQYWRzID0gYXR0cmlidXRlcy5wYWRzLnJlZHVjZSgoc3VtLCBjdXIpID0+IHN1bSArIGN1cik7XG4gICAgcmV0dXJuIFtwcm9ncmFtVW5pZm9ybXMsIHVuaWZvcm1zLCAhIWhhc1BhZHMsIGZhbHNlLCBmYWxzZV07XG4gIH1cbn07XG5cbmNvbnN0IGdlbmVyYXRlUG9vbGluZ0NvZGUgPSA8QXR0cmlidXRlVHlwZSBleHRlbmRzIEF2ZXJhZ2VQb29sQXR0cmlidXRlc3xNYXhQb29sQXR0cmlidXRlcz4oXG4gICAgc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIsIHg6IEluZGljZXNIZWxwZXIsIHJhbms6IG51bWJlciwgb3V0cHV0U2hhcGVSYW5rOiBudW1iZXIsIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVR5cGUsXG4gICAgb3AxOiBzdHJpbmcsIG9wMjogc3RyaW5nLCBzdGFydDogbnVtYmVyLCB1bmlmb3JtczogVW5pZm9ybXNBcnJheVR5cGUsIGhhc1BhZHM6IGJvb2xlYW4sIHB3U3RhcnRFbmROb3RaZXJvOiBib29sZWFuLFxuICAgIHBoU3RhcnRFbmROb3RaZXJvOiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gJ05IV0MnO1xuICBjb25zdCBkYXRhVHlwZSA9IHgudHlwZS52YWx1ZTtcbiAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIHgudHlwZS50ZW5zb3IsIG91dHB1dFNoYXBlUmFuayk7XG5cbiAgaWYgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoIDw9IDIpIHtcbiAgICBsZXQgY29kZVcgPSAnJztcbiAgICBsZXQgY29kZUggPSAnJztcbiAgICBsZXQgY29kZUhFbmQgPSAnJztcbiAgICBjb25zdCBkaW1JZHhXID0gcmFuayAtIChpc0NoYW5uZWxzTGFzdCA/IDIgOiAxKTtcbiAgICBpZiAocHdTdGFydEVuZE5vdFplcm8pIHtcbiAgICAgIGNvZGVXID0gYFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IDB1OyBpIDwgdW5pZm9ybXMua3c7IGkrKykge1xuICAgICAgICAgICAgICAgICAgeEluZGljZXNbJHtkaW1JZHhXfV0gPSBpbmRpY2VzWyR7ZGltSWR4V31dICogdW5pZm9ybXMuc3cgLSB1bmlmb3Jtcy5wd1N0YXJ0ICsgaTtcbiAgICAgICAgICAgICAgICAgIGlmICh4SW5kaWNlc1ske2RpbUlkeFd9XSA8IDAgfHwgeEluZGljZXNbJHtkaW1JZHhXfV1cbiAgICAgICAgICAgICAgICAgICAgICA+PSB1bmlmb3Jtcy54X3NoYXBlWyR7ZGltSWR4V31dKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZCsrO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGxldCB4X3ZhbCA9IHhbJHt4LmluZGljZXNUb09mZnNldCgneEluZGljZXMnKX1dO1xuICAgICAgICAgICAgICAgICAgJHtvcDF9XG4gICAgICAgICAgICAgICAgfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGVXID0gYFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IDB1OyBpIDwgdW5pZm9ybXMua3c7IGkrKykge1xuICAgICAgICAgICAgICAgICAgeEluZGljZXNbJHtkaW1JZHhXfV0gPSBpbmRpY2VzWyR7ZGltSWR4V31dICogdW5pZm9ybXMuc3cgLSB1bmlmb3Jtcy5wd1N0YXJ0ICsgaTtcbiAgICAgICAgICAgICAgICAgIGxldCB4X3ZhbCA9IHhbJHt4LmluZGljZXNUb09mZnNldCgneEluZGljZXMnKX1dO1xuICAgICAgICAgICAgICAgICAgJHtvcDF9XG4gICAgICAgICAgICAgICAgfWA7XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCBkaW1JZHhIID0gcmFuayAtIChpc0NoYW5uZWxzTGFzdCA/IDMgOiAyKTtcbiAgICAgIGlmIChwaFN0YXJ0RW5kTm90WmVybykge1xuICAgICAgICBjb2RlSCA9IGBcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqOiB1MzIgPSAwdTsgaiA8IHVuaWZvcm1zLmtoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgIHhJbmRpY2VzWyR7ZGltSWR4SH1dID0gaW5kaWNlc1ske2RpbUlkeEh9XSAqIHVuaWZvcm1zLnNoIC0gdW5pZm9ybXMucGhTdGFydCArIGo7XG4gICAgICAgICAgICAgICAgICBpZiAoeEluZGljZXNbJHtkaW1JZHhIfV0gPCAwIHx8IHhJbmRpY2VzWyR7ZGltSWR4SH1dID49IHVuaWZvcm1zLnhfc2hhcGVbJHtkaW1JZHhIfV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkICs9IGkzMih1bmlmb3Jtcy5rdyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kZUggPSBgXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgajogdTMyID0gMHU7IGogPCB1bmlmb3Jtcy5raDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICB4SW5kaWNlc1ske2RpbUlkeEh9XSA9IGluZGljZXNbJHtkaW1JZHhIfV0gKiB1bmlmb3Jtcy5zaCAtIHVuaWZvcm1zLnBoU3RhcnQgKyBqO1xuICAgICAgICAgICAgICAgIGA7XG4gICAgICB9XG4gICAgICBjb2RlSEVuZCA9IGBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYDtcbiAgICB9XG5cbiAgICBjb25zdCBwb29saW5nQ29kZSA9IGBcbiAgICAgICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoeCwgb3V0cHV0KX1cblxuICAgICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dFNpemUnKX1cblxuICAgICAgICAgICAgICBsZXQgaW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcbiAgICAgICAgICAgICAgdmFyIHhJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuXG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICR7ZGF0YVR5cGV9KCR7c3RhcnR9KTtcbiAgICAgICAgICAgICAgdmFyIHBhZCA9IDA7XG4gICAgICAgICAgICAgICR7Y29kZUh9XG4gICAgICAgICAgICAgICR7Y29kZVd9XG4gICAgICAgICAgICAgICR7Y29kZUhFbmR9XG4gICAgICAgICAgICAgICR7b3AyfVxuXG4gICAgICAgICAgICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfWA7XG4gICAgcmV0dXJuIHBvb2xpbmdDb2RlO1xuICB9IGVsc2Uge1xuICAgIGlmIChpc0NoYW5uZWxzTGFzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb29saW5nIHdpdGgga2VybmVsU2hhcGUubGVuZ3RoID4gMiBpcyBub3Qgc3VwcG9ydGVkIGZvciBOSFdDIGZvcm1hdC4nKTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaWRlc1JhbmsgPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLmxlbmd0aDtcbiAgICBjb25zdCBwYWRzUmFuayA9IGF0dHJpYnV0ZXMucGFkcy5sZW5ndGg7XG4gICAgbGV0IHBhZENvZGUgPSAnJztcbiAgICBpZiAoaGFzUGFkcykge1xuICAgICAgcGFkQ29kZSA9IGBcbiAgICAgICAgICAgICAgICBpZiAoeEluZGljZXNbal0gPj0gdW5pZm9ybXMueF9zaGFwZVtqXSkge1xuICAgICAgICAgICAgICAgICAgcGFkKys7XG4gICAgICAgICAgICAgICAgICBpc1BhZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFpc1BhZCkge1xuICAgICAgICAgICAgICAgIGxldCB4X3ZhbCA9IHhbJHt4LmluZGljZXNUb09mZnNldCgneEluZGljZXMnKX1dO1xuICAgICAgICAgICAgICAgICR7b3AxfVxuICAgICAgICAgICAgICB9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFkQ29kZSA9IGBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgeF92YWwgPSB4WyR7eC5pbmRpY2VzVG9PZmZzZXQoJ3hJbmRpY2VzJyl9XTtcbiAgICAgICAgICAgICAgJHtvcDF9XG4gICAgICAgICAgICBgO1xuICAgIH1cbiAgICBjb25zdCBwb29saW5nQ29kZSA9IGBcbiAgICAgICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoeCwgb3V0cHV0KX1cblxuICAgICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dFNpemUnKX1cbiAgICAgICAgICAgICAgbGV0IGluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgICAgICAgICAgIHZhciB4SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcblxuICAgICAgICAgICAgICB2YXIgb2Zmc2V0czogYXJyYXk8dTMyLCAke3N0cmlkZXNSYW5rfT47XG5cbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJHtkYXRhVHlwZX0oJHtzdGFydH0pO1xuICAgICAgICAgICAgICB2YXIgcGFkID0gMDtcbiAgICAgICAgICAgICAgdmFyIGlzUGFkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaTogdTMyID0gMHU7IGkgPCB1bmlmb3Jtcy5rZXJuZWxTaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gaTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMHU7IGogPCAke3N0cmlkZXNSYW5rIC0gMX11OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgIG9mZnNldHNbal0gPSBvZmZzZXQgLyAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMua2VybmVsU3RyaWRlcycsICdqJywgc3RyaWRlc1JhbmspfTtcbiAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBvZmZzZXRzW2pdICogJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLmtlcm5lbFN0cmlkZXMnLCAnaicsIHN0cmlkZXNSYW5rKX07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNldHNbJHtzdHJpZGVzUmFuayAtIDF9XSA9IG9mZnNldDtcblxuICAgICAgICAgICAgICAgIGlzUGFkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9ICR7cmFuayAtIHN0cmlkZXNSYW5rfXU7IGogPCAke3Jhbmt9dTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICB4SW5kaWNlc1tqXSA9IGluZGljZXNbal0gKiAke1xuICAgICAgICBnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnN0cmlkZXMnLCBgaiAtICR7cmFuayAtIHN0cmlkZXNSYW5rfXVgLCBzdHJpZGVzUmFuayl9XG4gICAgICAgICAgICAgICAgICAgICsgb2Zmc2V0c1tqIC0gJHtyYW5rIC0gc3RyaWRlc1Jhbmt9dV0gLSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMucGFkcycsICdqIC0gMnUnLCBwYWRzUmFuayl9O1xuICAgICAgICAgICAgICAgICAgJHtwYWRDb2RlfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICR7b3AyfVxuXG4gICAgICAgICAgICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfWA7XG4gICAgcmV0dXJuIHBvb2xpbmdDb2RlO1xuICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdEF0dHJpYnV0ZXMge1xuICByZWFkb25seSBmb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9vbENvbW1vbkF0dHJpYnV0ZXMgZXh0ZW5kcyBGb3JtYXRBdHRyaWJ1dGVzIHtcbiAgcmVhZG9ubHkgYXV0b1BhZDogc3RyaW5nO1xuICByZWFkb25seSBjZWlsTW9kZTogbnVtYmVyO1xuICByZWFkb25seSBrZXJuZWxTaGFwZTogcmVhZG9ubHkgbnVtYmVyW107XG4gIHJlYWRvbmx5IHN0cmlkZXM6IHJlYWRvbmx5IG51bWJlcltdO1xuICByZWFkb25seSBwYWRzOiByZWFkb25seSBudW1iZXJbXTtcbn1cblxuY29uc3QgY3JlYXRlU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUG9vbENvbW1vbkF0dHJpYnV0ZXMpOiBzdHJpbmcgPT5cbiAgICAoYCR7YXR0cmlidXRlcy5mb3JtYXR9OyR7YXR0cmlidXRlcy5jZWlsTW9kZX07JHthdHRyaWJ1dGVzLmF1dG9QYWR9OyR7YXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGh9YCk7XG5cbmNvbnN0IGNyZWF0ZUF2ZXJhZ2VQb29sU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogQXZlcmFnZVBvb2xBdHRyaWJ1dGVzKTogc3RyaW5nID0+XG4gICAgKGAke2NyZWF0ZVNoYWRlcktleUZyb21BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpfTske2F0dHJpYnV0ZXMuY291bnRJbmNsdWRlUGFkfWApO1xuXG5jb25zdCBjcmVhdGVNYXhQb29sU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogTWF4UG9vbEF0dHJpYnV0ZXMpOiBzdHJpbmcgPT5cbiAgICAoYCR7Y3JlYXRlU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMoYXR0cmlidXRlcyl9OyR7YXR0cmlidXRlcy5zdG9yYWdlT3JkZXJ9OyR7YXR0cmlidXRlcy5kaWxhdGlvbnN9YCk7XG5cbmNvbnN0IHBhcnNlUG9vbENvbW1vbkF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQb29sQ29tbW9uQXR0cmlidXRlcyA9PiAoe1xuICBmb3JtYXQ6IGF0dHJpYnV0ZXMuZm9ybWF0IGFzIEZvcm1hdEF0dHJpYnV0ZXNbJ2Zvcm1hdCddLFxuICBhdXRvUGFkOiBbJ05PVFNFVCcsICdWQUxJRCcsICdTQU1FX1VQUEVSJywgJ1NBTUVfTE9XRVInXVthdHRyaWJ1dGVzLmF1dG9fcGFkIGFzIG51bWJlcl0sXG4gIGNlaWxNb2RlOiBhdHRyaWJ1dGVzLmNlaWxfbW9kZSBhcyBudW1iZXIsXG4gIGtlcm5lbFNoYXBlOiBhdHRyaWJ1dGVzLmtlcm5lbF9zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICBzdHJpZGVzOiBhdHRyaWJ1dGVzLnN0cmlkZXMgYXMgW251bWJlciwgbnVtYmVyXSxcbiAgcGFkczogYXR0cmlidXRlcy5wYWRzIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBBdmVyYWdlUG9vbEF0dHJpYnV0ZXMgZXh0ZW5kcyBQb29sQ29tbW9uQXR0cmlidXRlcywgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgY291bnRJbmNsdWRlUGFkOiBib29sZWFuO1xufVxuXG5jb25zdCBjcmVhdGVBdmVyYWdlUG9vbFByb2dyYW1JbmZvID1cbiAgICAobmFtZTogc3RyaW5nLCBpbnB1dDogVGVuc29yVmlldywgaXNHbG9iYWxPcGVyYXRvcjogYm9vbGVhbiwgYXR0cmlidXRlczogQXZlcmFnZVBvb2xBdHRyaWJ1dGVzKTogUHJvZ3JhbUluZm8gPT4ge1xuICAgICAgY29uc3QgW2FkanVzdGVkQXR0cmlidXRlcywgb3V0cHV0U2hhcGVdID1cbiAgICAgICAgICBnZXRBZGp1c3RlZFBvb2xBdHRyaWJ1dGVzQW5kT3V0cHV0U2hhcGUoaW5wdXQsIGF0dHJpYnV0ZXMsIGlzR2xvYmFsT3BlcmF0b3IpO1xuICAgICAgY29uc3QgeCA9IGlucHV0VmFyaWFibGUoJ3gnLCBpbnB1dC5kYXRhVHlwZSwgaW5wdXQuZGltcy5sZW5ndGgpO1xuICAgICAgY29uc3QgZGF0YVR5cGUgPSB4LnR5cGUudmFsdWU7XG5cbiAgICAgIGNvbnN0IG9wMSA9ICd2YWx1ZSArPSB4X3ZhbDsnO1xuICAgICAgbGV0IG9wMiA9ICcnO1xuICAgICAgaWYgKGFkanVzdGVkQXR0cmlidXRlcy5jb3VudEluY2x1ZGVQYWQpIHtcbiAgICAgICAgb3AyICs9IGB2YWx1ZSAvPSAke2RhdGFUeXBlfSh1bmlmb3Jtcy5rZXJuZWxTaXplKTtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3AyICs9IGB2YWx1ZSAvPSAke2RhdGFUeXBlfShpMzIodW5pZm9ybXMua2VybmVsU2l6ZSkgLSBwYWQpO2A7XG4gICAgICB9XG4gICAgICBjb25zdCBbcHJvZ3JhbVVuaWZvcm1zLCB1bmlmb3JtcywgaGFzUGFkcywgcHdTdGFydEVuZE5vdFplcm8sIHBoU3RhcnRFbmROb3RaZXJvXSA9XG4gICAgICAgICAgZ2V0VW5pZm9ybUFuZFBhZEluZm8ob3V0cHV0U2hhcGUsIGFkanVzdGVkQXR0cmlidXRlcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dC5kaW1zLCBvdXRwdXRTaGFwZSkpO1xuICAgICAgY29uc3QgaW5wdXREZXBlbmRlbmNpZXM6IFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5W10gPSBbJ3JhbmsnXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNoYWRlckNhY2hlOlxuICAgICAgICAgICAge2hpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9OyR7aGFzUGFkc307JHtwd1N0YXJ0RW5kTm90WmVyb307JHtwaFN0YXJ0RW5kTm90WmVyb31gLCBpbnB1dERlcGVuZGVuY2llc30sXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0LmRhdGFUeXBlfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSkgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICB9KSxcbiAgICAgICAgZ2V0U2hhZGVyU291cmNlOiBzaGFkZXJIZWxwZXIgPT4gZ2VuZXJhdGVQb29saW5nQ29kZShcbiAgICAgICAgICAgIHNoYWRlckhlbHBlciwgeCwgaW5wdXQuZGltcy5sZW5ndGgsIG91dHB1dFNoYXBlLmxlbmd0aCwgYWRqdXN0ZWRBdHRyaWJ1dGVzLCBvcDEsIG9wMiwgMC4wLCB1bmlmb3JtcyxcbiAgICAgICAgICAgIGhhc1BhZHMsIHB3U3RhcnRFbmROb3RaZXJvLCBwaFN0YXJ0RW5kTm90WmVybyksXG4gICAgICB9O1xuICAgIH07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUF2ZXJhZ2VQb29sQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEF2ZXJhZ2VQb29sQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IGNvdW50SW5jbHVkZVBhZCA9IChhdHRyaWJ1dGVzLmNvdW50X2luY2x1ZGVfcGFkIGFzIG51bWJlcikgPT09IDAgPyBmYWxzZSA6IHRydWU7XG5cbiAgY29uc3QgYXR0ciA9IHBhcnNlUG9vbENvbW1vbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gIC8vIFRPRE86IHN1cHBvcnQgYXR0cmlidXRlICdjZWlsX21vZGUnXG4gIGlmIChhdHRyLmNlaWxNb2RlICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2luZyBjZWlsKCkgaW4gc2hhcGUgY29tcHV0YXRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIEF2ZXJhZ2VQb29sJyk7XG4gIH1cbiAgY29uc3QgYXZlcmFnZVBvb2xBdHRyaWJ1dGVzID0ge2NvdW50SW5jbHVkZVBhZCwgLi4uYXR0ciwgY2FjaGVLZXk6ICcnfTtcbiAgcmV0dXJuIHsuLi5hdmVyYWdlUG9vbEF0dHJpYnV0ZXMsIGNhY2hlS2V5OiBjcmVhdGVBdmVyYWdlUG9vbFNoYWRlcktleUZyb21BdHRyaWJ1dGVzKGF2ZXJhZ2VQb29sQXR0cmlidXRlcyl9O1xufTtcblxuZXhwb3J0IGNvbnN0IGF2ZXJhZ2VQb29sID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBBdmVyYWdlUG9vbEF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQXZlcmFnZVBvb2xQcm9ncmFtSW5mbygnQXZlcmFnZVBvb2wnLCBjb250ZXh0LmlucHV0c1swXSwgZmFsc2UsIGF0dHJpYnV0ZXMpKTtcbn07XG5cbmNvbnN0IGdsb2JhbFBvb2xBdHRyaWJ1dGVzID0ge1xuICBhdXRvUGFkOiAnJyxcbiAgY2VpbE1vZGU6IDAsXG4gIGNvdW50SW5jbHVkZVBhZDogZmFsc2UsXG4gIGtlcm5lbFNoYXBlOiBbXSxcbiAgc3RyaWRlczogW10sXG4gIHBhZHM6IFtdLFxuICBzdG9yYWdlT3JkZXI6IDAsXG4gIGRpbGF0aW9uczogW11cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUdsb2JhbEF2ZXJhZ2VQb29sQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEF2ZXJhZ2VQb29sQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IGZvcm1hdCA9IGF0dHJpYnV0ZXMuZm9ybWF0IGFzIEZvcm1hdEF0dHJpYnV0ZXNbJ2Zvcm1hdCddO1xuICByZXR1cm4ge2Zvcm1hdCwgLi4uZ2xvYmFsUG9vbEF0dHJpYnV0ZXMsIGNhY2hlS2V5OiBmb3JtYXR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdsb2JhbEF2ZXJhZ2VQb29sID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBBdmVyYWdlUG9vbEF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgdmFsaWRhdGVJbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQXZlcmFnZVBvb2xQcm9ncmFtSW5mbygnR2xvYmFsQXZlcmFnZVBvb2wnLCBjb250ZXh0LmlucHV0c1swXSwgdHJ1ZSwgYXR0cmlidXRlcykpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXhQb29sQXR0cmlidXRlcyBleHRlbmRzIFBvb2xDb21tb25BdHRyaWJ1dGVzLCBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkge1xuICByZWFkb25seSBzdG9yYWdlT3JkZXI6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGlsYXRpb25zOiBudW1iZXJbXTtcbn1cblxuY29uc3QgY3JlYXRlTWF4UG9vbFByb2dyYW1JbmZvID1cbiAgICAobmFtZTogc3RyaW5nLCBpbnB1dDogVGVuc29yVmlldywgaXNHbG9iYWxPcGVyYXRvcjogYm9vbGVhbiwgYXR0cmlidXRlczogTWF4UG9vbEF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBbYWRqdXN0ZWRBdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZV0gPVxuICAgICAgICAgIGdldEFkanVzdGVkUG9vbEF0dHJpYnV0ZXNBbmRPdXRwdXRTaGFwZShpbnB1dCwgYXR0cmlidXRlcywgaXNHbG9iYWxPcGVyYXRvcik7XG4gICAgICBjb25zdCBvcDEgPSBgXG4gICAgICB2YWx1ZSA9IG1heCh4X3ZhbCwgdmFsdWUpO1xuICAgIGA7XG4gICAgICBjb25zdCBvcDIgPSAnJztcbiAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKCd4JywgaW5wdXQuZGF0YVR5cGUsIGlucHV0LmRpbXMubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzOiBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeVtdID0gWydyYW5rJ107XG4gICAgICBjb25zdCBbcHJvZ3JhbVVuaWZvcm1zLCB1bmlmb3JtcywgaGFzUGFkcywgcHdTdGFydEVuZE5vdFplcm8sIHBoU3RhcnRFbmROb3RaZXJvXSA9XG4gICAgICAgICAgZ2V0VW5pZm9ybUFuZFBhZEluZm8ob3V0cHV0U2hhcGUsIGFkanVzdGVkQXR0cmlidXRlcyk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dC5kaW1zLCBvdXRwdXRTaGFwZSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2hhZGVyQ2FjaGU6XG4gICAgICAgICAgICB7aGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX07JHtoYXNQYWRzfTske3B3U3RhcnRFbmROb3RaZXJvfTske3BoU3RhcnRFbmROb3RaZXJvfWAsIGlucHV0RGVwZW5kZW5jaWVzfSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXQuZGF0YVR5cGV9XSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgIH0pLFxuICAgICAgICBnZXRTaGFkZXJTb3VyY2U6IHNoYWRlckhlbHBlciA9PiBnZW5lcmF0ZVBvb2xpbmdDb2RlKFxuICAgICAgICAgICAgc2hhZGVySGVscGVyLCB4LCBpbnB1dC5kaW1zLmxlbmd0aCwgb3V0cHV0U2hhcGUubGVuZ3RoLCBhZGp1c3RlZEF0dHJpYnV0ZXMsIG9wMSwgb3AyLFxuICAgICAgICAgICAgKGlucHV0LmRhdGFUeXBlID09PSBEYXRhVHlwZS5mbG9hdDE2KSA/IC02NTUwNCA6IC0xZTUsIHVuaWZvcm1zLCBoYXNQYWRzLCBwd1N0YXJ0RW5kTm90WmVybyxcbiAgICAgICAgICAgIHBoU3RhcnRFbmROb3RaZXJvKSxcbiAgICAgIH07XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IG1heFBvb2wgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IE1heFBvb2xBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZU1heFBvb2xQcm9ncmFtSW5mbygnTWF4UG9vbCcsIGNvbnRleHQuaW5wdXRzWzBdLCBmYWxzZSwgYXR0cmlidXRlcykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlTWF4UG9vbEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBNYXhQb29sQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IHN0b3JhZ2VPcmRlciA9IGF0dHJpYnV0ZXMuc3RvcmFnZV9vcmRlciBhcyBudW1iZXI7XG4gIGNvbnN0IGRpbGF0aW9ucyA9IGF0dHJpYnV0ZXMuZGlsYXRpb25zIGFzIFtudW1iZXIsIG51bWJlcl07XG5cbiAgY29uc3QgYXR0ciA9IHBhcnNlUG9vbENvbW1vbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gIC8vIFRPRE86IHN1cHBvcnQgYXR0cmlidXRlICdjZWlsX21vZGUnIGFuZCAnc3RvcmFnZV9vcmRlcidcbiAgaWYgKHN0b3JhZ2VPcmRlciAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY29sdW1uIG1ham9yIHN0b3JhZ2Ugb3JkZXIgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIE1heFBvb2wnKTtcbiAgfVxuICBpZiAoYXR0ci5jZWlsTW9kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNpbmcgY2VpbCgpIGluIHNoYXBlIGNvbXB1dGF0aW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBNYXhQb29sJyk7XG4gIH1cbiAgY29uc3QgbWF4UG9vbEF0dHJpYnV0ZXMgPSB7c3RvcmFnZU9yZGVyLCBkaWxhdGlvbnMsIC4uLmF0dHIsIGNhY2hlS2V5OiAnJ307XG4gIHJldHVybiB7Li4ubWF4UG9vbEF0dHJpYnV0ZXMsIGNhY2hlS2V5OiBjcmVhdGVNYXhQb29sU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMobWF4UG9vbEF0dHJpYnV0ZXMpfTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUdsb2JhbE1heFBvb2xBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogTWF4UG9vbEF0dHJpYnV0ZXMgPT4ge1xuICBjb25zdCBmb3JtYXQgPSBhdHRyaWJ1dGVzLmZvcm1hdCBhcyBGb3JtYXRBdHRyaWJ1dGVzWydmb3JtYXQnXTtcbiAgcmV0dXJuIHtmb3JtYXQsIC4uLmdsb2JhbFBvb2xBdHRyaWJ1dGVzLCBjYWNoZUtleTogZm9ybWF0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnbG9iYWxNYXhQb29sID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBNYXhQb29sQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVNYXhQb29sUHJvZ3JhbUluZm8oJ0dsb2JhbE1heFBvb2wnLCBjb250ZXh0LmlucHV0c1swXSwgdHJ1ZSwgYXR0cmlidXRlcykpO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtlbnZ9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCBVbmlmb3JtRGF0YUVsZW1lbnRUeXBlLCBVbmlmb3Jtc0FycmF5VHlwZX0gZnJvbSAnLi9jb21tb24nO1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0c0NvbnRlbnQgPSAoc3RhcnQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgZGVsdGE6IG51bWJlcik6IHZvaWQgPT4ge1xuICBjb25zdCBzYW1lU3RhcnRMaW1pdCA9IHN0YXJ0ID09PSBsaW1pdDtcbiAgY29uc3QgaW5jcmVhc2luZ1JhbmdlTmVnYXRpdmVTdGVwID0gc3RhcnQgPCBsaW1pdCAmJiBkZWx0YSA8IDA7XG4gIGNvbnN0IGRlY3JlYXNpbmdSYW5nZVBvc2l0aXZlU3RlcCA9IHN0YXJ0ID4gbGltaXQgJiYgZGVsdGEgPiAwO1xuXG4gIGlmIChzYW1lU3RhcnRMaW1pdCB8fCBpbmNyZWFzaW5nUmFuZ2VOZWdhdGl2ZVN0ZXAgfHwgZGVjcmVhc2luZ1JhbmdlUG9zaXRpdmVTdGVwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSYW5nZSB0aGVzZSBpbnB1dHNcXCcgY29udGVudHMgYXJlIGludmFsaWQuJyk7XG4gIH1cbn07XG5cbmNvbnN0IGNyZWF0ZVJhbmdlUHJvZ3JhbUluZm8gPSAoc3RhcnQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgZGVsdGE6IG51bWJlciwgZGF0YVR5cGU6IERhdGFUeXBlKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBudW1FbGVtZW50cyA9IE1hdGguYWJzKE1hdGguY2VpbCgobGltaXQgLSBzdGFydCkgLyBkZWx0YSkpO1xuICBjb25zdCBvdXRwdXRTaGFwZTogbnVtYmVyW10gPSBbbnVtRWxlbWVudHNdO1xuICBjb25zdCBvdXRwdXRTaXplID0gbnVtRWxlbWVudHM7XG4gIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFtcbiAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBvdXRwdXRTaXplfSwge3R5cGU6IGRhdGFUeXBlLCBkYXRhOiBzdGFydH0sIHt0eXBlOiBkYXRhVHlwZSwgZGF0YTogZGVsdGF9LFxuICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dHB1dFNoYXBlKVxuICBdO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBkYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICBjb25zdCB3Z3NsVHlwZSA9IG91dHB1dC50eXBlLnZhbHVlO1xuICAgIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgIHtuYW1lOiAnb3V0cHV0U2l6ZScsIHR5cGU6ICd1MzInfSwge25hbWU6ICdzdGFydCcsIHR5cGU6IHdnc2xUeXBlIGFzIFVuaWZvcm1EYXRhRWxlbWVudFR5cGV9LFxuICAgICAge25hbWU6ICdkZWx0YScsIHR5cGU6IHdnc2xUeXBlIGFzIFVuaWZvcm1EYXRhRWxlbWVudFR5cGV9XG4gICAgXTtcbiAgICByZXR1cm4gYFxuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKG91dHB1dCl9XG4gICAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRTaXplJyl9XG4gICAgICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9IHVuaWZvcm1zLnN0YXJ0ICsgJHt3Z3NsVHlwZX0oZ2xvYmFsX2lkeCkgKiB1bmlmb3Jtcy5kZWx0YTtcbiAgICAgIH1gO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1JhbmdlJyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke2RhdGFUeXBlfWB9LFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovKX0sXG4gICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICB9KVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJhbmdlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIGxldCBzdGFydCA9IDA7XG4gIGxldCBsaW1pdCA9IDA7XG4gIGxldCBkZWx0YSA9IDA7XG4gIGlmIChjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuaW50MzIpIHtcbiAgICBzdGFydCA9IGNvbnRleHQuaW5wdXRzWzBdLmdldEludDMyQXJyYXkoKVswXTtcbiAgICBsaW1pdCA9IGNvbnRleHQuaW5wdXRzWzFdLmdldEludDMyQXJyYXkoKVswXTtcbiAgICBkZWx0YSA9IGNvbnRleHQuaW5wdXRzWzJdLmdldEludDMyQXJyYXkoKVswXTtcbiAgfSBlbHNlIGlmIChjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuZmxvYXQpIHtcbiAgICBzdGFydCA9IGNvbnRleHQuaW5wdXRzWzBdLmdldEZsb2F0MzJBcnJheSgpWzBdO1xuICAgIGxpbWl0ID0gY29udGV4dC5pbnB1dHNbMV0uZ2V0RmxvYXQzMkFycmF5KClbMF07XG4gICAgZGVsdGEgPSBjb250ZXh0LmlucHV0c1syXS5nZXRGbG9hdDMyQXJyYXkoKVswXTtcbiAgfVxuICBpZiAoZW52LndlYmdwdS52YWxpZGF0ZUlucHV0Q29udGVudCkge1xuICAgIHZhbGlkYXRlSW5wdXRzQ29udGVudChzdGFydCwgbGltaXQsIGRlbHRhKTtcbiAgfVxuXG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVSYW5nZVByb2dyYW1JbmZvKHN0YXJ0LCBsaW1pdCwgZGVsdGEsIGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlKSwge2lucHV0czogW119KTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0F0dHJpYnV0ZVdpdGhDYWNoZUtleSwgY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5fSBmcm9tICcuLi9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXknO1xuaW1wb3J0IHtDb21wdXRlQ29udGV4dCwgUHJvZ3JhbUluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgZ2V0RWxlbWVudEF0LCBJbmRpY2VzSGVscGVyLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyfSBmcm9tICcuL2NvbW1vbic7XG5cbnR5cGUgQ29vcmRpbmF0ZVRyYW5zZm9ybU1vZGUgPSAnaGFsZl9waXhlbCd8J2FzeW1tZXRyaWMnfCdweXRvcmNoX2hhbGZfcGl4ZWwnfCd0Zl9oYWxmX3BpeGVsX2Zvcl9ubid8J2FsaWduX2Nvcm5lcnMnfFxuICAgICd0Zl9jcm9wX2FuZF9yZXNpemUnfCdoYWxmX3BpeGVsX3N5bW1ldHJpYyc7XG5cbnR5cGUgS2VlcEFzcGVjdFJhdGlvUG9saWN5ID0gJ3N0cmV0Y2gnfCdub3Rfc21hbGxlcid8J25vdF9sYXJnZXInO1xuXG50eXBlIE1vZGUgPSAnbmVhcmVzdCd8J2xpbmVhcid8J2N1YmljJztcblxudHlwZSBOZWFyZXN0TW9kZSA9ICdyb3VuZF9wcmVmZXJfZmxvb3InfCdyb3VuZF9wcmVmZXJfY2VpbCd8J2Zsb29yJ3wnY2VpbCd8J3NpbXBsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXplQXR0cmlidXRlcyBleHRlbmRzIEF0dHJpYnV0ZVdpdGhDYWNoZUtleSB7XG4gIGFudGlhbGlhczogbnVtYmVyO1xuICBheGVzOiBudW1iZXJbXTtcbiAgY29vcmRpbmF0ZVRyYW5zZm9ybU1vZGU6IENvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlO1xuICBjdWJpY0NvZWZmQTogbnVtYmVyO1xuICBleGNsdWRlT3V0c2lkZTogYm9vbGVhbjtcbiAgZXh0cmFwb2xhdGlvblZhbHVlOiBudW1iZXI7XG4gIGtlZXBBc3BlY3RSYXRpb1BvbGljeTogS2VlcEFzcGVjdFJhdGlvUG9saWN5O1xuICBtb2RlOiBNb2RlO1xuICBuZWFyZXN0TW9kZTogTmVhcmVzdE1vZGU7XG59XG5cbmNvbnN0IHZhbGlkYXRlU2NhbGVzID0gKHNjYWxlczogbnVtYmVyW10sIGF0dHJpYnV0ZXM6IFJlc2l6ZUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgc2NhbGVzLmV2ZXJ5KCh2YWx1ZSkgPT4gdmFsdWUgPiAwIHx8ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemUgcmVxdWlyZXMgc2NhbGVzIGlucHV0IHZhbHVlcyB0byBiZSBwb3NpdGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gIC8vIENoZWNrIHNjYWxlcyBkaW1zIGJhc2VkIG9uIG1vZGU6IExJTkVBUiwgQ1VCSUNcbiAgaWYgKHNjYWxlcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGF0dHJpYnV0ZXMubW9kZSA9PT0gJ2xpbmVhcicpIHtcbiAgICAgIGlmICghKHNjYWxlcy5sZW5ndGggPT09IDIgfHwgc2NhbGVzLmxlbmd0aCA9PT0gMyB8fCAoc2NhbGVzLmxlbmd0aCA9PT0gNCAmJiBzY2FsZXNbMF0gPT09IDEgJiYgc2NhbGVzWzFdID09PSAxKSB8fFxuICAgICAgICAgICAgKHNjYWxlcy5sZW5ndGggPT09IDQgJiYgc2NhbGVzWzBdID09PSAxICYmIHNjYWxlc1szXSA9PT0gMSkgfHxcbiAgICAgICAgICAgIChzY2FsZXMubGVuZ3RoID09PSA1ICYmIHNjYWxlc1swXSA9PT0gMSAmJiBzY2FsZXNbMV0gPT09IDEpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRm9yIGxpbmVhciBtb2RlLCBSZXNpemUgcmVxdWlyZXMgc2NhbGVzIHRvIGJlIDJELCAzRCwgNEQgd2l0aCBlaXRoZXIgdHdvIG91dGVybW9zdCBvciBvbmUgaW5uZXJtb3N0IGFuZFxuICAgICAgICAgICAgb25lIG91dGVybW9zdCBzY2FsZSB2YWx1ZXMgZXF1YWwgdG8gMSwgb3IgNUQgd2l0aCB0d28gb3V0ZXJtb3N0IHNjYWxlIHZhbHVlcyBlcXVhbCB0byAxYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLm1vZGUgPT09ICdjdWJpYycpIHtcbiAgICAgIGlmICghKHNjYWxlcy5sZW5ndGggPT09IDIgfHwgKHNjYWxlcy5sZW5ndGggPT09IDQgJiYgc2NhbGVzWzBdID09PSAxICYmIHNjYWxlc1sxXSA9PT0gMSkgfHxcbiAgICAgICAgICAgIChzY2FsZXMubGVuZ3RoID09PSA0ICYmIHNjYWxlc1swXSA9PT0gMSAmJiBzY2FsZXNbM10gPT09IDEpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc2l6ZSByZXF1aXJlcyBzY2FsZXMgaW5wdXQgc2l6ZSB0byBiZSAyIG9yIDQgZm9yIGN1YmljIG1vZGUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IHVwZGF0ZVNjYWxlcyA9IChzY2FsZXM6IHJlYWRvbmx5IG51bWJlcltdLCBheGVzOiByZWFkb25seSBudW1iZXJbXSwgcmFuazogbnVtYmVyKTogbnVtYmVyW10gPT4ge1xuICBheGVzLmV2ZXJ5KCh2YWx1ZSkgPT4gdmFsdWUgPj0gMCAmJiB2YWx1ZSA8IHJhbmsgfHwgKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemUgcmVxdWlyZXMgYXhlcyBpbnB1dCB2YWx1ZXMgdG8gYmUgcG9zaXRpdmUgYW5kIGxlc3MgdGhhbiByYW5rJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gIGNvbnN0IG5ld1NjYWxlcyA9IG5ldyBBcnJheShyYW5rKS5maWxsKDEuMCk7XG4gIGF4ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiBuZXdTY2FsZXNbdmFsdWVdID0gc2NhbGVzW2luZGV4XSk7XG4gIHJldHVybiBuZXdTY2FsZXM7XG59O1xuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBSZXNpemVBdHRyaWJ1dGVzLCBvcHNldFZlcnNpb246IG51bWJlciwgc2NhbGVzOiBudW1iZXJbXSxcbiAgICAgc2l6ZXM6IG51bWJlcltdLCByb2k6IG51bWJlcltdKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBbcm9pSW5wdXRJbmRleCwgc2NhbGVzSW5wdXRJbmRleCwgc2l6ZXNJbnB1dEluZGV4XSA9XG4gICAgICAgICAgKG9wc2V0VmVyc2lvbiA+IDEwKSA/IFsxLCAyLCAzXSA6IFstMSwgKGlucHV0cy5sZW5ndGggPiAxKSA/IDEgOiAtMSwgLTFdO1xuICAgICAgY29uc3QgcmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aDtcbiAgICAgIGlmIChyb2lJbnB1dEluZGV4ID4gMCAmJiBpbnB1dHMubGVuZ3RoID4gcm9pSW5wdXRJbmRleCAmJiBpbnB1dHNbcm9pSW5wdXRJbmRleF0uZGltcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlucHV0c1tyb2lJbnB1dEluZGV4XS5nZXRGbG9hdDMyQXJyYXkoKS5mb3JFYWNoKCh2YWx1ZSkgPT4gcm9pLnB1c2godmFsdWUpKTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5jb29yZGluYXRlVHJhbnNmb3JtTW9kZSA9PT0gJ3RmX2Nyb3BfYW5kX3Jlc2l6ZScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemUgcmVxdWlyZXMgUm9JIGlucHV0IHRvIGJlIHNwZWNpZmllZCB3aGVuIGNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlIGlzIHRmQ3JvcEFuZFJlc2l6ZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NhbGVzSW5wdXRJbmRleCA+IDAgJiYgaW5wdXRzLmxlbmd0aCA+IHNjYWxlc0lucHV0SW5kZXggJiYgaW5wdXRzW3NjYWxlc0lucHV0SW5kZXhdLmRpbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpbnB1dHNbc2NhbGVzSW5wdXRJbmRleF0uZ2V0RmxvYXQzMkFycmF5KCkuZm9yRWFjaCgodmFsdWUpID0+IHNjYWxlcy5wdXNoKHZhbHVlKSk7XG4gICAgICAgIGlmIChzY2FsZXMubGVuZ3RoICE9PSAwICYmXG4gICAgICAgICAgICAoc2NhbGVzLmxlbmd0aCAhPT0gcmFuayAmJiAob3BzZXRWZXJzaW9uID49IDE4ICYmIHNjYWxlcy5sZW5ndGggIT09IGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGgpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ1Jlc2l6ZSByZXF1aXJlcyBzY2FsZXMgaW5wdXQgc2l6ZSB0byBiZSBzYW1lIGFzIGlucHV0IHJhbmsgb3IgYXhlcyBzaXplIGZvciBvcHNldCAxOCBhbmQgdXAnKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZVNjYWxlcyhzY2FsZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAoYXR0cmlidXRlcy5heGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB1cGRhdGVTY2FsZXMoc2NhbGVzLCBhdHRyaWJ1dGVzLmF4ZXMsIHJhbmspLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4gc2NhbGVzW2luZGV4XSA9IHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNpemVzSW5wdXRJbmRleCA+IDAgJiYgaW5wdXRzLmxlbmd0aCA+IHNpemVzSW5wdXRJbmRleCkge1xuICAgICAgICBpbnB1dHNbc2l6ZXNJbnB1dEluZGV4XS5nZXRCaWdJbnQ2NEFycmF5KCkuZm9yRWFjaCgodmFsdWUpID0+IHNpemVzLnB1c2goTnVtYmVyKHZhbHVlKSkpO1xuICAgICAgICBpZiAoc2l6ZXMubGVuZ3RoICE9PSByYW5rIHx8IChvcHNldFZlcnNpb24gPj0gMTggJiYgc2l6ZXMubGVuZ3RoID09PSBhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzaXplIHJlcXVpcmVzIHNpemVzIGlucHV0IHNpemUgdG8gYmUgc2FtZSBhcyBpbnB1dCByYW5rIG9yIGF4ZXMgc2l6ZSBmb3Igb3BzZXQgMTggYW5kIHVwJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzY2FsZXMubGVuZ3RoICE9PSBhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemUgcmVxdWlyZXMgXCJzY2FsZXNcIiBpbnB1dCBzaXplIHRvIGJlIG9mIGF4ZXMgcmFuayB3aGVuIGF4ZXMgYXR0cmlidXRlcyBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZXMubGVuZ3RoICE9PSBhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnUmVzaXplIHJlcXVpcmVzIFwic2l6ZXNcIiBpbnB1dCBzaXplIHRvIGJlIG9mIHJhbmsgYXhlcyByYW5rIHdoZW4gYXhlcyBhdHRyaWJ1dGVzIGlzIHNwZWNpZmllZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHNjYWxlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNpemVzICE9PSAndW5kZWZpbmVkJyAmJiBzY2FsZXMubGVuZ3RoID4gMCAmJiBzaXplcy5sZW5ndGggPiByYW5rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzaXplIHJlcXVpcmVzIG9ubHkgb2Ygc2NhbGVzIG9yIHNpemVzIHRvIGJlIHNwZWNpZmllZCcpO1xuICAgICAgfVxuICAgIH07XG5cbmNvbnN0IGdldE9yaWdpbmFsQ29vcmRpbmF0ZUZyb21SZXNpemVkQ29vcmRpbmF0ZSA9XG4gICAgKGNvb3JkaW5hdGVUcmFuc2Zlck1vZGU6IENvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlLCBkVHlwZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgICAgIGBmbiBnZXRPcmlnaW5hbENvb3JkaW5hdGVGcm9tUmVzaXplZENvb3JkaW5hdGUoeFJlc2l6ZWQ6IHUzMiwgeFNjYWxlOiBmMzIsIGxlbmd0aFJlc2l6ZWQ6IHUzMixcbiAgICAgbGVuZ3RoT3JpZ2luYWw6IHUzMiwgcm9pU3RhcnQ6IGYzMiwgcm9pRW5kOiBmMzIpIC0+ICR7ZFR5cGV9IHsgYCArXG4gICAgKCgpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGNvb3JkaW5hdGVUcmFuc2Zlck1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FzeW1tZXRyaWMnOlxuICAgICAgICAgICAgICByZXR1cm4gYHJldHVybiAke2RUeXBlfSh4UmVzaXplZCkgLyAke2RUeXBlfSh4U2NhbGUpO2A7XG4gICAgICAgICAgICBjYXNlICdweXRvcmNoX2hhbGZfcGl4ZWwnOlxuICAgICAgICAgICAgICByZXR1cm4gYGlmIChsZW5ndGhSZXNpemVkID4gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCR7ZFR5cGV9KHhSZXNpemVkKSArIDAuNSkgLyAke2RUeXBlfSh4U2NhbGUpIC0gMC41O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgY2FzZSAndGZfaGFsZl9waXhlbF9mb3Jfbm4nOlxuICAgICAgICAgICAgICByZXR1cm4gYHJldHVybiAoJHtkVHlwZX0oeFJlc2l6ZWQpICsgMC41KSAvICR7ZFR5cGV9KHhTY2FsZSk7YDtcbiAgICAgICAgICAgIGNhc2UgJ2FsaWduX2Nvcm5lcnMnOlxuICAgICAgICAgICAgICByZXR1cm4gYGlmIChsZW5ndGhSZXNpemVkID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBwYXJ0IGFuZCB0aGUgZnJhY3Rpb25hbCBwYXJ0IGFyZSBjYWxjdWxhdGVkIHNlcGFyYXRlbHkgZHVlIHRvIGluYWNjdXJhY3kgb2YgZmxvYXRpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnQgZGl2aXNpb24uIEFzIGFuIGV4YW1wbGUsIGYzMigyMSkgLyBmMzIoNykgbWF5IGV2YWx1YXRlIHRvIDIuOTkuLi4gaW5zdGVhZCBvZiAzLCBjYXVzaW5nIGFuXG4gICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldC1ieS1vbmUgZXJyb3IgbGF0ZXIgaW4gZmxvb3IoKS5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHdob2xlID0gJHtkVHlwZX0oeFJlc2l6ZWQgKiAobGVuZ3RoT3JpZ2luYWwgLSAxKSAvIChsZW5ndGhSZXNpemVkIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3QgPVxuICAgICAgICAgICAgICAgICAgICAgICAgJHtkVHlwZX0oeFJlc2l6ZWQgKiAobGVuZ3RoT3JpZ2luYWwgLSAxKSAlIChsZW5ndGhSZXNpemVkIC0gMSkpIC8gJHtkVHlwZX0obGVuZ3RoUmVzaXplZCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2hvbGUgKyBmcmFjdDtcbiAgICAgICAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgY2FzZSAndGZfY3JvcF9hbmRfcmVzaXplJzpcbiAgICAgICAgICAgICAgcmV0dXJuIGBpZiAobGVuZ3RoUmVzaXplZCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR7ZFR5cGV9KHJvaVN0YXJ0KSAqICR7ZFR5cGV9KGxlbmd0aE9yaWdpbmFsIC0gMSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKCR7ZFR5cGV9KHhSZXNpemVkKSAqICR7ZFR5cGV9KHJvaUVuZCAtIHJvaVN0YXJ0KSAqICR7ZFR5cGV9KGxlbmd0aE9yaWdpbmFsIC0gMSkpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICR7ZFR5cGV9KGxlbmd0aFJlc2l6ZWQgLSAxKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjUgKiAke2RUeXBlfShyb2lTdGFydCArIHJvaUVuZCkgKiAke2RUeXBlfShsZW5ndGhPcmlnaW5hbCAtIDEpO1xuICAgICAgICAgICAgICAgICAgfWA7XG4gICAgICAgICAgICBjYXNlICdoYWxmX3BpeGVsX3N5bW1ldHJpYyc6XG4gICAgICAgICAgICAgIHJldHVybiBgY29uc3Qgb3V0cHV0V2lkdGggPSAke2RUeXBlfXhTY2FsZSAqICR7ZFR5cGV9KGxlbmd0aFJlc2l6ZWQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0bWVudCA9ICR7ZFR5cGV9KGxlbmd0aFJlc2l6ZWQpIC8gb3V0cHV0V2lkdGg7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXIgPSAke2RUeXBlfShsZW5ndGhPcmlnaW5hbCkgLyAyO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2VudGVyICogKDEgLSBhZGp1c3RtZW50KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgKyAoKCR7ZFR5cGV9KHhSZXNpemVkKSArIDAuNSkgLyAke2RUeXBlfSh4U2NhbGUpKSAtIDAuNTtgO1xuICAgICAgICAgICAgY2FzZSAnaGFsZl9waXhlbCc6XG4gICAgICAgICAgICAgIHJldHVybiBgcmV0dXJuICgoJHtkVHlwZX0oeFJlc2l6ZWQpICsgMC41KSAvICR7ZFR5cGV9KHhTY2FsZSkpIC0gMC41O2A7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvb3JkaW5hdGUgdHJhbnNmb3JtIG1vZGUgJHtjb29yZGluYXRlVHJhbnNmZXJNb2RlfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpICtcbiAgICAnfSc7XG5cbmNvbnN0IGdldE5lYXJlc3RQaXhlbEZyb21PcmlnaW5hbCA9IChuZWFyZXN0TW9kZTogTmVhcmVzdE1vZGUsIG9wc2V0VmVyc2lvbjogbnVtYmVyLCBkVHlwZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgYGZuIGdldE5lYXJlc3RQaXhlbEZyb21PcmlnaW5hbCh4T3JpZ2luYWw6ICR7ZFR5cGV9LCBpc0Rvd25TYW1wbGU6IGJvb2wpIC0+ICR7ZFR5cGV9IHtgICsgKCgpID0+IHtcbiAgICAgIHN3aXRjaCAobmVhcmVzdE1vZGUpIHtcbiAgICAgICAgY2FzZSAncm91bmRfcHJlZmVyX2NlaWwnOlxuICAgICAgICAgIHJldHVybiAnaWYgKGZyYWN0KHhPcmlnaW5hbCkgPT0gMC41KSB7IFxcXG4gICAgICAgICAgICByZXR1cm4gY2VpbCh4T3JpZ2luYWwpOyBcXFxuICAgICAgICAgIH0gZWxzZSB7IFxcXG4gICAgICAgICAgICByZXR1cm4gcm91bmQoeE9yaWdpbmFsKTsgXFxcbiAgICAgICAgICB9JztcbiAgICAgICAgY2FzZSAnZmxvb3InOlxuICAgICAgICAgIHJldHVybiAncmV0dXJuIGZsb29yKHhPcmlnaW5hbCk7JztcbiAgICAgICAgY2FzZSAnY2VpbCc6XG4gICAgICAgICAgcmV0dXJuICdyZXR1cm4gY2VpbCh4T3JpZ2luYWwpOyc7XG4gICAgICAgIGNhc2UgJ3JvdW5kX3ByZWZlcl9mbG9vcic6XG4gICAgICAgICAgcmV0dXJuICdpZiAoZnJhY3QoeE9yaWdpbmFsKSA9PSAwLjUpIHsgXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsb29yKHhPcmlnaW5hbCk7IFxcXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgeyBcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm91bmQoeE9yaWdpbmFsKTsgXFxcbiAgICAgICAgICAgICAgICAgIH0nO1xuICAgICAgICBjYXNlICdzaW1wbGUnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChvcHNldFZlcnNpb24gPCAxMSkge1xuICAgICAgICAgICAgcmV0dXJuICdpZiAoaXNEb3duU2FtcGxlKSBcXFxuICAgICAgICAgICAgICAgICAgICB7IFxcXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNlaWwoeE9yaWdpbmFsKTsgXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgXFxcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geE9yaWdpbmFsOyBcXFxuICAgICAgICAgICAgICAgICAgICB9JztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOZWFyZXN0IG1vZGUgJHtuZWFyZXN0TW9kZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgfVxuICAgIH0pKCkgK1xuICAgICd9JztcblxuY29uc3QgdXBkYXRlUm9JID0gKHJvaTogcmVhZG9ubHkgbnVtYmVyW10sIGF4ZXM6IHJlYWRvbmx5IG51bWJlcltdLCByYW5rOiBudW1iZXIpOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHJvaVRtcCA9IG5ldyBBcnJheShyYW5rKS5maWxsKDApLmNvbmNhdChuZXcgQXJyYXkocmFuaykuZmlsbCgxKSk7XG4gIGNvbnN0IHJvaUxvY2FsID0gcm9pLmxlbmd0aCA9PT0gMCA/IHJvaVRtcCA6IHJvaS5zbGljZSgpO1xuICBpZiAoYXhlcy5sZW5ndGggPiAwKSB7XG4gICAgYXhlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICByb2lUbXBbdl0gPSByb2lMb2NhbFtpXTtcbiAgICAgIHJvaVRtcFtpICsgcmFua10gPSByb2lMb2NhbFtheGVzLmxlbmd0aCArIGldO1xuICAgIH0pO1xuICAgIHJldHVybiByb2lUbXA7XG4gIH1cbiAgcmV0dXJuIHJvaUxvY2FsO1xufTtcblxuY29uc3QgaW5pdE91dHB1dFNoYXBlID1cbiAgICAoaW5wdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sIHNjYWxlczogcmVhZG9ubHkgbnVtYmVyW10sIHNpemVzOiByZWFkb25seSBudW1iZXJbXSwgYXhlczogcmVhZG9ubHkgbnVtYmVyW10pOlxuICAgICAgICBudW1iZXJbXSA9PiB7XG4gICAgICAgICAgbGV0IG91dHB1dFNoYXBlOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICAgIGlmIChzaXplcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoYXhlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGlucHV0U2hhcGUuZm9yRWFjaCgodikgPT4gb3V0cHV0U2hhcGUucHVzaCh2KSk7XG4gICAgICAgICAgICAgIGlmIChNYXRoLm1heCguLi5heGVzKSA+IGlucHV0U2hhcGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdheGVzIGlzIG91dCBvZiBib3VuZCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGF4ZXMuZm9yRWFjaCgodiwgaSkgPT4gb3V0cHV0U2hhcGVbdl0gPSBzaXplc1tpXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaXplcy5mb3JFYWNoKCh2KSA9PiBvdXRwdXRTaGFwZS5wdXNoKHYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNjYWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemUgcmVxdWlyZXMgZWl0aGVyIHNjYWxlcyBvciBzaXplcy4nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dHB1dFNoYXBlID0gaW5wdXRTaGFwZS5tYXAoKHZhbHVlLCBpbmRleCkgPT4gTWF0aC5yb3VuZCh2YWx1ZSAqIHNjYWxlc1tpbmRleF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG91dHB1dFNoYXBlO1xuICAgICAgICB9O1xuXG5jb25zdCBhZGp1c3RPdXRwdXRTaGFwZSA9IChpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgc2NhbGVzOiBudW1iZXJbXSwgYXR0cmlidXRlczogUmVzaXplQXR0cmlidXRlcykgPT4ge1xuICBjb25zdCBzY2FsZUluUG9saWN5ID0gKCgpID0+IHtcbiAgICBzd2l0Y2ggKGF0dHJpYnV0ZXMua2VlcEFzcGVjdFJhdGlvUG9saWN5KSB7XG4gICAgICBjYXNlICdub3RfbGFyZ2VyJzpcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPiAwID8gTWF0aC5taW4oLi4uYXR0cmlidXRlcy5heGVzLm1hcChpID0+IHNjYWxlc1tpXSksIE51bWJlci5NQVhfVkFMVUUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oLi4uc2NhbGVzLCBOdW1iZXIuTUFYX1ZBTFVFKTtcbiAgICAgIGNhc2UgJ25vdF9zbWFsbGVyJzpcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4uYXR0cmlidXRlcy5heGVzLm1hcChpID0+IHNjYWxlc1tpXSksIE51bWJlci5NSU5fVkFMVUUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoLi4uc2NhbGVzLCBOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgS2VlcCBhc3BlY3QgcmF0aW8gcG9saWN5ICR7YXR0cmlidXRlcy5rZWVwQXNwZWN0UmF0aW9Qb2xpY3l9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICB9XG4gIH0pKCk7XG4gIHNjYWxlcy5maWxsKDEuMCwgMCwgc2NhbGVzLmxlbmd0aCk7XG4gIGNvbnN0IGFkanVzdGVkT3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlLnNsaWNlKCk7XG4gIGlmIChhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoID4gMCkge1xuICAgIGF0dHJpYnV0ZXMuYXhlcy5mb3JFYWNoKCh2KSA9PiBzY2FsZXNbdl0gPSBzY2FsZUluUG9saWN5KTtcbiAgICBhdHRyaWJ1dGVzLmF4ZXMuZm9yRWFjaCgodikgPT4gYWRqdXN0ZWRPdXRwdXRTaGFwZVt2XSA9IE1hdGgucm91bmQoaW5wdXRTaGFwZVt2XSAqIHNjYWxlc1t2XSkpO1xuICB9IGVsc2Uge1xuICAgIHNjYWxlcy5maWxsKHNjYWxlSW5Qb2xpY3ksIDAsIHNjYWxlcy5sZW5ndGgpO1xuICAgIGFkanVzdGVkT3V0cHV0U2hhcGUuZm9yRWFjaCgodiwgaSkgPT4gYWRqdXN0ZWRPdXRwdXRTaGFwZVtpXSA9IE1hdGgucm91bmQodiAqIHNjYWxlc1tpXSkpO1xuICB9XG4gIHJldHVybiBhZGp1c3RlZE91dHB1dFNoYXBlO1xufTtcblxuY29uc3QgY2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMgPVxuICAgIChvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBvdXRwdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sIHNjYWxlc0xlbmd0aDogbnVtYmVyLFxuICAgICByb2lMZW5ndGg6IG51bWJlcik6IHN0cmluZyA9PiBgXG4gICAgZm4gY2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0X2luZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+IGFycmF5PCR7XG4gICAgICAgIG91dHB1dC50eXBlLnZhbHVlfSwgJHtvdXRwdXRTaGFwZS5sZW5ndGh9PiB7XG4gICAgICB2YXIgb3JpZ2luYWxfaW5kaWNlczogYXJyYXk8JHtvdXRwdXQudHlwZS52YWx1ZX0sICR7b3V0cHV0U2hhcGUubGVuZ3RofT47XG4gICAgICBmb3IgKHZhciBpOnUzMiA9IDA7IGkgPCAke291dHB1dFNoYXBlLmxlbmd0aH07IGkrKykge1xuICAgICAgICB2YXIgb3V0cHV0X2luZGV4ID0gJHtvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0X2luZGljZXMnLCAnaScpfTtcbiAgICAgICAgdmFyIHNjYWxlID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnNjYWxlcycsICdpJywgc2NhbGVzTGVuZ3RoKX07XG4gICAgICAgIHZhciByb2lfbG93ID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnJvaScsICdpJywgcm9pTGVuZ3RoKX07XG4gICAgICAgIHZhciByb2lfaGkgPSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMucm9pJywgYGkgKyAke2lucHV0U2hhcGUubGVuZ3RofWAsIHJvaUxlbmd0aCl9O1xuICAgICAgICBpZiAoc2NhbGUgPT0gMS4wKSB7XG4gICAgICAgICAgb3JpZ2luYWxfaW5kaWNlc1tpXSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KG91dHB1dF9pbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGlucHV0X3NoYXBlX2kgPSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMuaW5wdXRfc2hhcGUnLCAnaScsIGlucHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgdmFyIG91dHB1dF9zaGFwZV9pID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLm91dHB1dF9zaGFwZScsICdpJywgb3V0cHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgb3JpZ2luYWxfaW5kaWNlc1tpXSA9IGdldE9yaWdpbmFsQ29vcmRpbmF0ZUZyb21SZXNpemVkQ29vcmRpbmF0ZShvdXRwdXRfaW5kZXgsIHNjYWxlLCBvdXRwdXRfc2hhcGVfaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3NoYXBlX2ksIHJvaV9sb3csIHJvaV9oaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmlnaW5hbF9pbmRpY2VzO1xuICAgIH1gO1xuXG5jb25zdCBjYWxjdWxhdGVJbnB1dEluZGljZXNGcm9tT3V0cHV0SW5kaWNlcyA9XG4gICAgKGlucHV0OiBJbmRpY2VzSGVscGVyLCBvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBvdXRwdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sXG4gICAgIHNjYWxlc0xlbmd0aDogbnVtYmVyLCByb2lMZW5ndGg6IG51bWJlciwgdXNlRXh0cmFwb2xhdGlvbjogYm9vbGVhbik6IHN0cmluZyA9PiBgXG4gICAgZm4gY2FsY3VsYXRlSW5wdXRJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0X2luZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+ICR7aW5wdXQudHlwZS5pbmRpY2VzfSB7XG4gICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgZm9yICh2YXIgaTp1MzIgPSAwOyBpIDwgJHtvdXRwdXRTaGFwZS5sZW5ndGh9OyBpKyspIHtcbiAgICAgICAgdmFyIG91dHB1dF9pbmRleCA9ICR7b3V0cHV0LmluZGljZXNHZXQoJ291dHB1dF9pbmRpY2VzJywgJ2knKX07XG4gICAgICAgIHZhciBpbnB1dF9pbmRleDogdTMyO1xuICAgICAgICB2YXIgc2NhbGUgPSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMuc2NhbGVzJywgJ2knLCBzY2FsZXNMZW5ndGgpfTtcbiAgICAgICAgaWYgKHNjYWxlID09IDEuMCkge1xuICAgICAgICAgIGlucHV0X2luZGV4ID0gb3V0cHV0X2luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciByb2lfbG93ID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnJvaScsICdpJywgcm9pTGVuZ3RoKX07XG4gICAgICAgICAgdmFyIHJvaV9oaSA9ICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5yb2knLCBgaSArICR7aW5wdXRTaGFwZS5sZW5ndGh9YCwgcm9pTGVuZ3RoKX07XG4gICAgICAgICAgdmFyIGlucHV0X3NoYXBlX2kgPSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMuaW5wdXRfc2hhcGUnLCAnaScsIGlucHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgdmFyIG91dHB1dF9zaGFwZV9pID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLm91dHB1dF9zaGFwZScsICdpJywgb3V0cHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgdmFyIG9yaWdpbmFsX2lkeCA9IGdldE9yaWdpbmFsQ29vcmRpbmF0ZUZyb21SZXNpemVkQ29vcmRpbmF0ZShvdXRwdXRfaW5kZXgsIHNjYWxlLCBvdXRwdXRfc2hhcGVfaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3NoYXBlX2ksIHJvaV9sb3csIHJvaV9oaSk7XG4gICAgICAgICAgaWYgKCEke3VzZUV4dHJhcG9sYXRpb259IHx8IChvcmlnaW5hbF9pZHggPj0gMCAmJiBvcmlnaW5hbF9pZHggPCAke291dHB1dC50eXBlLnZhbHVlfShpbnB1dF9zaGFwZV9pKSkpIHtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbF9pZHggPCAwKSB7XG4gICAgICAgICAgICAgIGlucHV0X2luZGV4ID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxfaWR4ID4gJHtvdXRwdXQudHlwZS52YWx1ZX0oaW5wdXRfc2hhcGVfaSAtIDEpKSB7XG4gICAgICAgICAgICAgIGlucHV0X2luZGV4ID0gaW5wdXRfc2hhcGVfaSAtIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpbnB1dF9pbmRleCA9IHUzMihnZXROZWFyZXN0UGl4ZWxGcm9tT3JpZ2luYWwob3JpZ2luYWxfaWR4LCBzY2FsZSA8IDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRfaW5kZXggPSB1MzIob3JpZ2luYWxfaWR4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KCdpbnB1dF9pbmRpY2VzJywgJ2knLCAnIGlucHV0X2luZGV4Jyl9XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5wdXRfaW5kaWNlcztcbiAgICB9YDtcbmNvbnN0IGNoZWNrSW5wdXRJbmRpY2VzID0gKGlucHV0OiBJbmRpY2VzSGVscGVyLCBpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSk6IHN0cmluZyA9PiBgXG4gICAgZm4gY2hlY2tJbnB1dEluZGljZXMoaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9KSAtPiBib29sIHtcbiAgICAgIGZvciAodmFyIGk6dTMyID0gMDsgaSA8ICR7aW5wdXRTaGFwZS5sZW5ndGh9OyBpKyspIHtcbiAgICAgICAgdmFyIGlucHV0X2luZGV4ID0gJHtpbnB1dC5pbmRpY2VzR2V0KCdpbnB1dF9pbmRpY2VzJywgJ2knKX07XG4gICAgICAgIGlmIChpbnB1dF9pbmRleCA8IDAgfHwgaW5wdXRfaW5kZXggPj0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLmlucHV0X3NoYXBlJywgJ2knLCBpbnB1dFNoYXBlLmxlbmd0aCl9KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9YDtcblxuY29uc3Qgc2V0Q2hhbm5lbEFuZEJhdGNoSW5kaWNlcyA9XG4gICAgKGlucHV0OiBJbmRpY2VzSGVscGVyLCBjaGFubmVsSWR4OiBudW1iZXIsIGJhdGNoSWR4OiBudW1iZXIsIHNwYWNpYWxEaW1zOiBudW1iZXIpOiBzdHJpbmcgPT5cbiAgICAgICAgaW5wdXQucmFuayA+IHNwYWNpYWxEaW1zID8gYFxuICAgICR7aW5wdXQuaW5kaWNlc1NldCgnaW5wdXRfaW5kaWNlcycsIGNoYW5uZWxJZHgsICdjaGFubmVsJyl9O1xuICAgICR7aW5wdXQuaW5kaWNlc1NldCgnaW5wdXRfaW5kaWNlcycsIGJhdGNoSWR4LCAnYmF0Y2gnKX07XG5gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyc7XG5cbmNvbnN0IGJpbGluZWFySW50ZXJwb2xhdGlvbiA9XG4gICAgKGlucHV0OiBJbmRpY2VzSGVscGVyLCBvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCB1c2VFeHRyYXBvbGF0aW9uOiBib29sZWFuLFxuICAgICBleHRyYXBvbGF0aW9uVmFsdWU6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCBpc05jaHcgPSB0cnVlO1xuICAgICAgY29uc3QgW2JhdGNoSWR4LCBoZWlnaHRJZHgsIHdpZHRoSWR4LCBjaGFubmVsSWR4XSA9XG4gICAgICAgICAgaW5wdXRTaGFwZS5sZW5ndGggPT09IDIgPyBbLTEsIDAsIDEsIC0xXSA6IChpc05jaHcgPyBbMCwgMiwgMywgMV0gOiBbMCwgMSwgMiwgM10pO1xuICAgICAgY29uc3QgZFR5cGUgPSBpbnB1dC50eXBlLnZhbHVlO1xuICAgICAgcmV0dXJuIGBcbiAgICBmbiBnZXRJbnB1dFZhbHVlKGJhdGNoOiB1MzIsIGNoYW5uZWw6IHUzMiwgcm93OiB1MzIsIGNvbDogdTMyKSAtPiAke2RUeXBlfSB7XG4gICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KCdpbnB1dF9pbmRpY2VzJywgaGVpZ2h0SWR4LCBgbWF4KDAsIG1pbihyb3csICR7aW5wdXRTaGFwZVtoZWlnaHRJZHhdfSAtIDEpKWApfTtcbiAgICAgICR7aW5wdXQuaW5kaWNlc1NldCgnaW5wdXRfaW5kaWNlcycsIHdpZHRoSWR4LCBgbWF4KDAsIG1pbihjb2wsICR7aW5wdXRTaGFwZVt3aWR0aElkeF19IC0gMSkpYCl9O1xuICAgICAgJHtzZXRDaGFubmVsQW5kQmF0Y2hJbmRpY2VzKGlucHV0LCBjaGFubmVsSWR4LCBiYXRjaElkeCwgMil9XG4gICAgICByZXR1cm4gJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0X2luZGljZXMnKX07XG4gICAgfVxuXG4gICAgZm4gYmlsaW5lYXJJbnRlcnBvbGF0aW9uKG91dHB1dF9pbmRpY2VzOiAke291dHB1dC50eXBlLmluZGljZXN9KSAtPiAke2RUeXBlfSB7XG4gICAgICB2YXIgb3JpZ2luYWxJbmRpY2VzID0gY2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0X2luZGljZXMpO1xuICAgICAgdmFyIHJvdzoke2RUeXBlfSA9IG9yaWdpbmFsSW5kaWNlc1ske2hlaWdodElkeH1dO1xuICAgICAgdmFyIGNvbDoke2RUeXBlfSA9IG9yaWdpbmFsSW5kaWNlc1ske3dpZHRoSWR4fV07XG4gICAgICAke1xuICAgICAgICAgIHVzZUV4dHJhcG9sYXRpb24gP1xuICAgICAgICAgICAgICBgaWYgKHJvdyA8IDAgfHwgcm93ID4gKCR7aW5wdXRTaGFwZVtoZWlnaHRJZHhdfSAtIDEpIHx8IGNvbCA8IDAgfHwgY29sID4gKCR7aW5wdXRTaGFwZVt3aWR0aElkeF19IC0gMSkpIHtcbiAgICAgICAgcmV0dXJuICR7ZXh0cmFwb2xhdGlvblZhbHVlfTtcbiAgICAgIH1gIDpcbiAgICAgICAgICAgICAgJyd9O1xuICAgICAgcm93ID0gbWF4KDAsIG1pbihyb3csICR7aW5wdXRTaGFwZVtoZWlnaHRJZHhdfSAtIDEpKTtcbiAgICAgIGNvbCA9IG1heCgwLCBtaW4oY29sLCAke2lucHV0U2hhcGVbd2lkdGhJZHhdfSAtIDEpKTtcbiAgICAgIHZhciByb3cxOiB1MzIgPSB1MzIocm93KTtcbiAgICAgIHZhciBjb2wxOiB1MzIgPSB1MzIoY29sKTtcbiAgICAgIHZhciByb3cyOiB1MzIgPSB1MzIocm93ICsgMSk7XG4gICAgICB2YXIgY29sMjogdTMyID0gdTMyKGNvbCArIDEpO1xuICAgICAgdmFyIGNoYW5uZWw6IHUzMiA9ICR7aW5wdXRTaGFwZS5sZW5ndGggPiAyID8gYHUzMihvcmlnaW5hbEluZGljZXNbJHtjaGFubmVsSWR4fV0pYCA6ICcwJ307XG4gICAgICB2YXIgYmF0Y2g6IHUzMiA9ICAke2lucHV0U2hhcGUubGVuZ3RoID4gMiA/IGB1MzIob3JpZ2luYWxJbmRpY2VzWyR7YmF0Y2hJZHh9XSlgIDogJzAnfTtcbiAgICAgIHZhciB4MTE6ICR7ZFR5cGV9ID0gZ2V0SW5wdXRWYWx1ZShiYXRjaCwgY2hhbm5lbCwgcm93MSwgY29sMSk7XG4gICAgICB2YXIgeDEyOiAke2RUeXBlfSA9IGdldElucHV0VmFsdWUoYmF0Y2gsIGNoYW5uZWwsIHJvdzEsIGNvbDIpO1xuICAgICAgdmFyIHgyMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCByb3cyLCBjb2wxKTtcbiAgICAgIHZhciB4MjI6ICR7ZFR5cGV9ID0gZ2V0SW5wdXRWYWx1ZShiYXRjaCwgY2hhbm5lbCwgcm93MiwgY29sMik7XG4gICAgICB2YXIgZHgxOiAke2RUeXBlfSA9IGFicyhyb3cgLSAke2RUeXBlfShyb3cxKSk7XG4gICAgICB2YXIgZHgyOiAke2RUeXBlfSA9IGFicygke2RUeXBlfShyb3cyKSAtIHJvdyk7XG4gICAgICB2YXIgZHkxOiAke2RUeXBlfSA9IGFicyhjb2wgLSAke2RUeXBlfShjb2wxKSk7XG4gICAgICB2YXIgZHkyOiAke2RUeXBlfSA9IGFicygke2RUeXBlfShjb2wyKSAtIGNvbCk7XG4gICAgICBpZiAocm93MSA9PSByb3cyKSB7XG4gICAgICAgIGR4MSA9IDAuNTtcbiAgICAgICAgZHgyID0gMC41O1xuICAgICAgfVxuICAgICAgaWYgKGNvbDEgPT0gY29sMikge1xuICAgICAgICBkeTEgPSAwLjU7XG4gICAgICAgIGR5MiA9IDAuNTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoeDExICogZHgyICogZHkyICsgeDEyICogZHgyICogZHkxICsgeDIxICogZHgxICogZHkyICsgeDIyICogZHgxICogZHkxKTtcbiAgICB9YDtcbiAgICB9O1xuXG5jb25zdCBiaWN1YmljSW50ZXJwb2xhdGlvbiA9XG4gICAgKGlucHV0OiBJbmRpY2VzSGVscGVyLCBvdXRwdXQ6IEluZGljZXNIZWxwZXIsIGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCBvdXRwdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10sXG4gICAgIHNjYWxlczogcmVhZG9ubHkgbnVtYmVyW10sIHJvaTogcmVhZG9ubHkgbnVtYmVyW10sIGN1YmljQ29lZmZBOiBudW1iZXIsIHVzZUV4dHJhcG9sYXRpb246IGJvb2xlYW4sXG4gICAgIGV4dHJhcG9sYXRpb25WYWx1ZTogbnVtYmVyLCBleGNsdWRlT3V0c2lkZTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCBpczJEID0gaW5wdXRTaGFwZS5sZW5ndGggPT09IDI7XG4gICAgICBjb25zdCBpc05jaHcgPSB0cnVlO1xuICAgICAgY29uc3QgW2hlaWdodElkeCwgd2lkdGhJZHhdID0gaXMyRCA/IFswLCAxXSA6IGlzTmNodyA/IFsyLCAzXSA6IFsxLCAyXTtcbiAgICAgIGNvbnN0IGRUeXBlID0gaW5wdXQudHlwZS52YWx1ZTtcbiAgICAgIGNvbnN0IGNyZWF0ZUN1YmljSW50ZXJwb2xhdGlvbkZ1bmN0aW9uID0gKGlkeDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaWR4ID09PSBoZWlnaHRJZHggPyAncm93JyA6ICdjb2wnO1xuICAgICAgICByZXR1cm4gYFxuICAgICAgZm4gJHtkaXJlY3Rpb259Q3ViaWNJbnRlcnBvbGF0aW9uKGlucHV0X2luZGljZXM6ICR7aW5wdXQudHlwZS5pbmRpY2VzfSwgb3V0cHV0X2luZGljZXM6ICR7XG4gICAgICAgICAgICBvdXRwdXQudHlwZS5pbmRpY2VzfSkgLT4gJHtkVHlwZX0ge1xuICAgICAgICB2YXIgb3V0cHV0X2luZGV4ID0gJHtvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0X2luZGljZXMnLCBpZHgpfTtcbiAgICAgICAgdmFyIG9yaWdpbmFsSWR4OiAke2RUeXBlfSA9IGdldE9yaWdpbmFsQ29vcmRpbmF0ZUZyb21SZXNpemVkQ29vcmRpbmF0ZShvdXRwdXRfaW5kZXgsICR7c2NhbGVzW2lkeF19LFxuICAgICAgICAke291dHB1dFNoYXBlW2lkeF19LCAke2lucHV0U2hhcGVbaWR4XX0sICR7cm9pW2lkeF19LCAke3JvaVtpZHhdfSArICR7aW5wdXRTaGFwZS5sZW5ndGh9KTtcbiAgICAgICAgdmFyIGZyYWN0T3JpZ2luYWxJZHg6ICR7ZFR5cGV9ID0gb3JpZ2luYWxJZHggLSBmbG9vcihvcmlnaW5hbElkeCk7XG4gICAgICAgIHZhciBjb2VmcyA9IGdldEN1YmljSW50ZXJwb2xhdGlvbkNvZWZzKGZyYWN0T3JpZ2luYWxJZHgpO1xuXG4gICAgICAgIGlmICgke3VzZUV4dHJhcG9sYXRpb259ICYmIChvcmlnaW5hbElkeCA8IDAgfHwgb3JpZ2luYWxJZHggPiAoJHtpbnB1dFNoYXBlW2lkeF19IC0gMSkpKSB7XG4gICAgICAgICAgcmV0dXJuICR7ZXh0cmFwb2xhdGlvblZhbHVlfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF0YTogYXJyYXk8JHtkVHlwZX0sIDQ+ID0gYXJyYXk8JHtkVHlwZX0sIDQ+KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gICAgICAgIGZvciAodmFyIGk6IGkzMiA9IC0xOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgdmFyICR7ZGlyZWN0aW9ufTogJHtkVHlwZX0gPSBvcmlnaW5hbElkeCArICR7ZFR5cGV9KGkpO1xuICAgICAgICAgIGlmICgke2RpcmVjdGlvbn0gPCAwIHx8ICR7ZGlyZWN0aW9ufSA+PSAke2lucHV0U2hhcGVbaWR4XX0pIHtcbiAgICAgICAgICAgICR7KCgpID0+IHtcbiAgICAgICAgICBpZiAoZXhjbHVkZU91dHNpZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBgY29lZnNbaSArIDFdID0gMC4wO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7YDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHVzZUV4dHJhcG9sYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBgcmV0dXJuICR7ZXh0cmFwb2xhdGlvblZhbHVlfTtgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZGlyZWN0aW9ufSA9IG1heCgwLCBtaW4oJHtkaXJlY3Rpb259LCAke2lucHV0U2hhcGVbaWR4XX0gLSAxKSk7YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCl9O1xuICAgICAgICAgIH1cbiAgICAgICAgdmFyIGlucHV0X2luZGljZXNfY29weTogJHtpbnB1dC50eXBlLmluZGljZXN9ID0gaW5wdXRfaW5kaWNlcztcbiAgICAgICAgICAke2lucHV0LmluZGljZXNTZXQoJ2lucHV0X2luZGljZXNfY29weScsIGlkeCwgYHUzMigke2RpcmVjdGlvbn0pYCl9O1xuICAgICAgICAgIGRhdGFbaSArIDFdID0gJHtcbiAgICAgICAgICAgIGlkeCA9PT0gaGVpZ2h0SWR4ID8gaW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzX2NvcHknKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyb3dDdWJpY0ludGVycG9sYXRpb24oaW5wdXRfaW5kaWNlc19jb3B5LCBvdXRwdXRfaW5kaWNlcyknfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3ViaWNJbnRlcnBvbGF0aW9uMUQoZGF0YSwgY29lZnMpO1xuICAgICAgfWA7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYFxuICAgICR7Y3JlYXRlQ3ViaWNJbnRlcnBvbGF0aW9uRnVuY3Rpb24oaGVpZ2h0SWR4KX07XG4gICAgJHtjcmVhdGVDdWJpY0ludGVycG9sYXRpb25GdW5jdGlvbih3aWR0aElkeCl9O1xuICBmbiBnZXRDdWJpY0ludGVycG9sYXRpb25Db2VmcyhzOiAke2RUeXBlfSkgLT4gYXJyYXk8JHtkVHlwZX0sIDQ+IHtcbiAgICB2YXIgYWJzUyA9IGFicyhzKTtcbiAgICB2YXIgY29lZmZzOiBhcnJheTwke2RUeXBlfSwgND4gPSBhcnJheTwke2RUeXBlfSwgND4oMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgICB2YXIgb25lTWludXNBYnNTOiAke2RUeXBlfSA9IDEuMCAtIGFic1M7XG4gICAgdmFyIHR3b01pbnVzQWJzUzogJHtkVHlwZX0gPSAyLjAgLSBhYnNTO1xuICAgIHZhciBvbmVQbHVzQWJzUzogJHtkVHlwZX0gPSAxLjAgKyBhYnNTO1xuICAgIGNvZWZmc1swXSA9ICgoJHtjdWJpY0NvZWZmQX0gKiBvbmVQbHVzQWJzUyAtIDUgKiAke2N1YmljQ29lZmZBfSkgKiBvbmVQbHVzQWJzUyArIDggKiAke1xuICAgICAgICAgIGN1YmljQ29lZmZBfSkgKiBvbmVQbHVzQWJzUyAtIDQgKiAke2N1YmljQ29lZmZBfTtcbiAgICBjb2VmZnNbMV0gPSAoKCR7Y3ViaWNDb2VmZkF9ICsgMikgKiBhYnNTIC0gKCR7Y3ViaWNDb2VmZkF9ICsgMykpICogYWJzUyAqIGFic1MgKyAxO1xuICAgIGNvZWZmc1syXSA9ICgoJHtjdWJpY0NvZWZmQX0gKyAyKSAqIG9uZU1pbnVzQWJzUyAtICgke2N1YmljQ29lZmZBfSArIDMpKSAqIG9uZU1pbnVzQWJzUyAqIG9uZU1pbnVzQWJzUyArIDE7XG4gICAgY29lZmZzWzNdID0gKCgke2N1YmljQ29lZmZBfSAqIHR3b01pbnVzQWJzUyAtIDUgKiAke2N1YmljQ29lZmZBfSkgKiB0d29NaW51c0Fic1MgKyA4ICogJHtcbiAgICAgICAgICBjdWJpY0NvZWZmQX0pICogdHdvTWludXNBYnNTIC0gNCAqICR7Y3ViaWNDb2VmZkF9O1xuICAgIHJldHVybiBjb2VmZnM7XG4gIH1cblxuICBmbiBjdWJpY0ludGVycG9sYXRpb24xRCh4OiBhcnJheTwke2RUeXBlfSwgND4sIGNvZWZzOiBhcnJheTwke2RUeXBlfSwgND4pIC0+ICR7ZFR5cGV9IHtcbiAgICB2YXIgY29lZnNTdW06ICR7ZFR5cGV9ID0gY29lZnNbMF0gKyBjb2Vmc1sxXSArIGNvZWZzWzJdICsgY29lZnNbM107XG4gICAgcmV0dXJuICh4WzBdICogY29lZnNbMF0gKyB4WzFdICogY29lZnNbMV0rIHhbMl0gKiBjb2Vmc1syXSsgeFszXSAqIGNvZWZzWzNdKSAvIGNvZWZzU3VtO1xuICB9XG5cbiAgZm4gYmljdWJpY0ludGVycG9sYXRpb24ob3V0cHV0X2luZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+ICR7ZFR5cGV9IHtcbiAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9ID0gb3V0cHV0X2luZGljZXM7XG4gICAgcmV0dXJuIGNvbEN1YmljSW50ZXJwb2xhdGlvbihpbnB1dF9pbmRpY2VzLCBvdXRwdXRfaW5kaWNlcyk7XG4gIH1cbiAgICBgO1xuICAgIH07XG5cbmNvbnN0IHRyaWxpbmVhckludGVycG9sYXRpb24gPVxuICAgIChpbnB1dDogSW5kaWNlc0hlbHBlciwgb3V0cHV0OiBJbmRpY2VzSGVscGVyLCBpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgdXNlRXh0cmFwb2xhdGlvbjogYm9vbGVhbixcbiAgICAgZXh0cmFwb2xhdGlvblZhbHVlOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgaXNOY2h3ID0gdHJ1ZTtcbiAgICAgIGNvbnN0IFtiYXRjaElkeCwgZGVwdGhJZHgsIGhlaWdodElkeCwgd2lkdGhJZHgsIGNoYW5uZWxJZHhdID1cbiAgICAgICAgICBpbnB1dFNoYXBlLmxlbmd0aCA9PT0gMyA/IFstMSwgMCwgMSwgMiwgLTFdIDogKGlzTmNodyA/IFswLCAyLCAzLCA0LCAxXSA6IFswLCAxLCAyLCAzLCA0XSk7XG4gICAgICBjb25zdCBkVHlwZSA9IGlucHV0LnR5cGUudmFsdWU7XG4gICAgICByZXR1cm4gYFxuICAgIGZuIGdldElucHV0VmFsdWUoYmF0Y2g6IHUzMiwgY2hhbm5lbDogdTMyLCBkZXB0aDp1MzIsIGhlaWdodDogdTMyLCB3aWR0aDogdTMyKSAtPiAke2RUeXBlfSB7XG4gICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KCdpbnB1dF9pbmRpY2VzJywgZGVwdGhJZHgsIGBtYXgoMCwgbWluKGRlcHRoLCAke2lucHV0U2hhcGVbZGVwdGhJZHhdfSAtIDEpKWApfTtcbiAgICAgICR7aW5wdXQuaW5kaWNlc1NldCgnaW5wdXRfaW5kaWNlcycsIGhlaWdodElkeCwgYG1heCgwLCBtaW4oaGVpZ2h0LCAke2lucHV0U2hhcGVbaGVpZ2h0SWR4XX0gLSAxKSlgKX07XG4gICAgICAke2lucHV0LmluZGljZXNTZXQoJ2lucHV0X2luZGljZXMnLCB3aWR0aElkeCwgYG1heCgwLCBtaW4od2lkdGgsICR7aW5wdXRTaGFwZVt3aWR0aElkeF19IC0gMSkpYCl9O1xuICAgICAgJHtzZXRDaGFubmVsQW5kQmF0Y2hJbmRpY2VzKGlucHV0LCBjaGFubmVsSWR4LCBiYXRjaElkeCwgMyl9XG4gICAgICByZXR1cm4gJHtpbnB1dC5nZXRCeUluZGljZXMoJ2lucHV0X2luZGljZXMnKX07XG4gICAgfVxuXG4gICAgZm4gdHJpbGluZWFySW50ZXJwb2xhdGlvbihvdXRwdXRfaW5kaWNlczogJHtvdXRwdXQudHlwZS5pbmRpY2VzfSkgLT4gJHtkVHlwZX0ge1xuICAgICAgdmFyIG9yaWdpbmFsSW5kaWNlcyA9IGNhbGN1bGF0ZU9yaWdpbmFsSW5kaWNlc0Zyb21PdXRwdXRJbmRpY2VzKG91dHB1dF9pbmRpY2VzKTtcbiAgICAgIHZhciBkZXB0aDoke2RUeXBlfSA9IG9yaWdpbmFsSW5kaWNlc1ske2RlcHRoSWR4fV07XG4gICAgICB2YXIgaGVpZ2h0OiR7ZFR5cGV9ID0gb3JpZ2luYWxJbmRpY2VzWyR7aGVpZ2h0SWR4fV07XG4gICAgICB2YXIgd2lkdGg6JHtkVHlwZX0gPSBvcmlnaW5hbEluZGljZXNbJHt3aWR0aElkeH1dO1xuICAgICAgJHtcbiAgICAgICAgICB1c2VFeHRyYXBvbGF0aW9uID8gYGlmIChkZXB0aCA8IDAgfHwgZGVwdGggPiAoJHtpbnB1dFNoYXBlW2RlcHRoSWR4XX0gLSAxKSB8fCBoZWlnaHQgPCAwIHx8IGhlaWdodCA+ICgke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTaGFwZVtoZWlnaHRJZHhdfSAtIDEpIHx8IHdpZHRoIDwgMCB8fCAod2lkdGggPiAke2lucHV0U2hhcGVbd2lkdGhJZHhdfSAtIDEpKSB7XG4gICAgICByZXR1cm4gJHtleHRyYXBvbGF0aW9uVmFsdWV9O1xuICAgICAgICB9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnfTtcblxuICAgIGRlcHRoID0gbWF4KDAsIG1pbihkZXB0aCwgJHtpbnB1dFNoYXBlW2RlcHRoSWR4XX0gLSAxKSk7XG4gICAgICBoZWlnaHQgPSBtYXgoMCwgbWluKGhlaWdodCwgJHtpbnB1dFNoYXBlW2hlaWdodElkeF19IC0gMSkpO1xuICAgICAgd2lkdGggPSBtYXgoMCwgbWluKHdpZHRoLCAke2lucHV0U2hhcGVbd2lkdGhJZHhdfSAtIDEpKTtcbiAgICAgIHZhciBkZXB0aDE6IHUzMiA9IHUzMihkZXB0aCk7XG4gICAgICB2YXIgaGVpZ2h0MTogdTMyID0gdTMyKGhlaWdodCk7XG4gICAgICB2YXIgd2lkdGgxOiB1MzIgPSB1MzIod2lkdGgpO1xuICAgICAgdmFyIGRlcHRoMjogdTMyID0gdTMyKGRlcHRoICsgMSk7XG4gICAgICB2YXIgaGVpZ2h0MjogdTMyID0gdTMyKGhlaWdodCArIDEpO1xuICAgICAgdmFyIHdpZHRoMjogdTMyID0gdTMyKHdpZHRoICsgMSk7XG4gICAgICB2YXIgY2hhbm5lbDogdTMyID0gJHtpbnB1dFNoYXBlLmxlbmd0aCA+IDMgPyBgdTMyKG9yaWdpbmFsSW5kaWNlc1ske2NoYW5uZWxJZHh9XSlgIDogJzAnfTtcbiAgICAgIHZhciBiYXRjaDogdTMyID0gICR7aW5wdXRTaGFwZS5sZW5ndGggPiAzID8gYHUzMihvcmlnaW5hbEluZGljZXNbJHtiYXRjaElkeH1dKWAgOiAnMCd9O1xuXG4gICAgICB2YXIgeDExMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDEsIHdpZHRoMSk7XG4gICAgICB2YXIgeDExMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDEsIHdpZHRoMik7XG4gICAgICB2YXIgeDEyMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDIsIHdpZHRoMSk7XG4gICAgICB2YXIgeDEyMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDIsIHdpZHRoMik7XG4gICAgICB2YXIgeDIxMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDEsIHdpZHRoMSk7XG4gICAgICB2YXIgeDIxMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDEsIHdpZHRoMik7XG4gICAgICB2YXIgeDIyMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDIsIHdpZHRoMSk7XG4gICAgICB2YXIgeDIyMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDIsIHdpZHRoMik7XG4gICAgICB2YXIgZHgxOiAke2RUeXBlfSA9IGFicyhkZXB0aCAtICR7ZFR5cGV9KGRlcHRoMSkpO1xuICAgICAgdmFyIGR4MjogJHtkVHlwZX0gPSBhYnMoJHtkVHlwZX0oZGVwdGgyKSAtIGRlcHRoKTtcbiAgICAgIHZhciBkeTE6ICR7ZFR5cGV9ID0gYWJzKGhlaWdodCAtICR7ZFR5cGV9KGhlaWdodDEpKTtcbiAgICAgIHZhciBkeTI6ICR7ZFR5cGV9ID0gYWJzKCR7ZFR5cGV9KGhlaWdodDIpIC0gaGVpZ2h0KTtcbiAgICAgIHZhciBkejE6ICR7ZFR5cGV9ID0gYWJzKHdpZHRoIC0gJHtkVHlwZX0od2lkdGgxKSk7XG4gICAgICB2YXIgZHoyOiAke2RUeXBlfSA9IGFicygke2RUeXBlfSh3aWR0aDIpIC0gd2lkdGgpO1xuICAgICAgaWYgKGRlcHRoMSA9PSBkZXB0aDIpIHtcbiAgICAgICAgZHgxID0gMC41O1xuICAgICAgICBkeDIgPSAwLjU7XG4gICAgICB9XG4gICAgICBpZiAoaGVpZ2h0MSA9PSBoZWlnaHQyKSB7XG4gICAgICAgIGR5MSA9IDAuNTtcbiAgICAgICAgZHkyID0gMC41O1xuICAgICAgfVxuICAgICAgaWYgKHdpZHRoMSA9PSB3aWR0aDIpIHtcbiAgICAgICAgZHoxID0gMC41O1xuICAgICAgICBkejIgPSAwLjU7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHgxMTEgKiBkeDIgKiBkeTIgKiBkejIgKyB4MTEyICogZHgyICogZHkyICogZHoxICsgeDEyMSAqIGR4MiAqIGR5MSAqZHoyICsgeDEyMiAqIGR4MiAqIGR5MSAqIGR6MSArXG4gICAgICAgICAgICAgIHgyMTEgKiBkeDEgKiBkeTIgKiBkejIgKyB4MjEyICogZHgxICogZHkyICogZHoxICsgeDIyMSAqIGR4MSAqIGR5MSAqZHoyICsgeDIyMiAqIGR4MSAqIGR5MSAqIGR6MSk7XG4gICAgfWA7XG4gICAgfTtcblxuY29uc3QgY3JlYXRlUmVzaXplUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dFRlbnNvcjogVGVuc29yVmlldywgYXR0cmlidXRlczogUmVzaXplQXR0cmlidXRlcywgb3BzZXRWZXJzaW9uOiBudW1iZXIsIHNjYWxlc0lucHV0OiByZWFkb25seSBudW1iZXJbXSxcbiAgICAgc2l6ZXM6IHJlYWRvbmx5IG51bWJlcltdLCByb2lJbnB1dDogcmVhZG9ubHkgbnVtYmVyW10pOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXRUZW5zb3IuZGltcztcbiAgICAgIGNvbnN0IHJvaSA9IHVwZGF0ZVJvSShyb2lJbnB1dCwgYXR0cmlidXRlcy5heGVzLCBpbnB1dFNoYXBlLmxlbmd0aCk7XG5cbiAgICAgIGxldCBvdXRwdXRTaGFwZSA9IGluaXRPdXRwdXRTaGFwZShpbnB1dFNoYXBlLCBzY2FsZXNJbnB1dCwgc2l6ZXMsIGF0dHJpYnV0ZXMuYXhlcyk7XG4gICAgICBsZXQgc2NhbGVzID0gc2NhbGVzSW5wdXQuc2xpY2UoKTtcbiAgICAgIGlmIChzY2FsZXNJbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc2NhbGVzID0gaW5wdXRTaGFwZS5tYXAoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IDAgPyAxLjAgOiBvdXRwdXRTaGFwZVtpbmRleF0gLyB2YWx1ZSk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLmtlZXBBc3BlY3RSYXRpb1BvbGljeSAhPT0gJ3N0cmV0Y2gnKSB7XG4gICAgICAgICAgb3V0cHV0U2hhcGUgPSBhZGp1c3RPdXRwdXRTaGFwZShpbnB1dFNoYXBlLCBzY2FsZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRUZW5zb3IuZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ2lucHV0JywgaW5wdXRUZW5zb3IuZGF0YVR5cGUsIGlucHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICBjb25zdCBub1NjYWxlID0gaW5wdXRTaGFwZS5sZW5ndGggPT09IG91dHB1dFNoYXBlLmxlbmd0aCAmJiBpbnB1dFNoYXBlLmV2ZXJ5KChkLCBpKSA9PiBkID09PSBvdXRwdXRTaGFwZVtpXSk7XG4gICAgICBjb25zdCB1c2VFeHRyYXBvbGF0aW9uID0gYXR0cmlidXRlcy5jb29yZGluYXRlVHJhbnNmb3JtTW9kZSA9PT0gJ3RmX2Nyb3BfYW5kX3Jlc2l6ZSc7XG4gICAgICBjb25zdCBleHRyYXBvbGF0aW9uVmFsdWUgPSBhdHRyaWJ1dGVzLmV4dHJhcG9sYXRpb25WYWx1ZTtcbiAgICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXQudHlwZS52YWx1ZTtcbiAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgJHtub1NjYWxlID8gJycgOiBgXG4gICAgICAke2dldE9yaWdpbmFsQ29vcmRpbmF0ZUZyb21SZXNpemVkQ29vcmRpbmF0ZShhdHRyaWJ1dGVzLmNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlLCBkYXRhVHlwZSl9O1xuICAgICAgJHsoKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZXMubW9kZSkge1xuICAgICAgICAgIGNhc2UgJ25lYXJlc3QnOlxuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgJHtjaGVja0lucHV0SW5kaWNlcyhpbnB1dCwgaW5wdXRTaGFwZSl9O1xuICAgICAgICAgICAgICAke2dldE5lYXJlc3RQaXhlbEZyb21PcmlnaW5hbChhdHRyaWJ1dGVzLm5lYXJlc3RNb2RlLCBvcHNldFZlcnNpb24sIGRhdGFUeXBlKX07XG4gICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlSW5wdXRJbmRpY2VzRnJvbU91dHB1dEluZGljZXMoXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQsIGlucHV0U2hhcGUsIG91dHB1dFNoYXBlLCBzY2FsZXMubGVuZ3RoLCByb2kubGVuZ3RoLCB1c2VFeHRyYXBvbGF0aW9uKX07XG4gICAgICAgICAgICAgIGA7XG4gICAgICAgICAgY2FzZSAnbGluZWFyJzpcbiAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICR7Y2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0LCBpbnB1dFNoYXBlLCBvdXRwdXRTaGFwZSwgc2NhbGVzLmxlbmd0aCwgcm9pLmxlbmd0aCl9O1xuICAgICAgICAgICAgICAkeygoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpbnB1dFNoYXBlLmxlbmd0aCA9PT0gMiB8fCBpbnB1dFNoYXBlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtiaWxpbmVhckludGVycG9sYXRpb24oaW5wdXQsIG91dHB1dCwgaW5wdXRTaGFwZSwgdXNlRXh0cmFwb2xhdGlvbiwgZXh0cmFwb2xhdGlvblZhbHVlKX1gO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0U2hhcGUubGVuZ3RoID09PSAzIHx8IGlucHV0U2hhcGUubGVuZ3RoID09PSA1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RyaWxpbmVhckludGVycG9sYXRpb24oaW5wdXQsIG91dHB1dCwgaW5wdXRTaGFwZSwgdXNlRXh0cmFwb2xhdGlvbiwgZXh0cmFwb2xhdGlvblZhbHVlKX1gO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdMaW5lYXIgbW9kZSBvbmx5IHN1cHBvcnRzIGlucHV0IGRpbXMgMiwgMywgNCBhbmQgNSBhcmUgc3VwcG9ydGVkIGluIGxpbmVhciBtb2RlLicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpfTtcbiAgICAgICAgICAgIGA7XG4gICAgICAgICAgY2FzZSAnY3ViaWMnOlxuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICR7KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlucHV0U2hhcGUubGVuZ3RoID09PSAyIHx8IGlucHV0U2hhcGUubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke1xuICAgICAgICAgICAgICAgICAgICBiaWN1YmljSW50ZXJwb2xhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBvdXRwdXQsIGlucHV0U2hhcGUsIG91dHB1dFNoYXBlLCBzY2FsZXMsIHJvaSwgYXR0cmlidXRlcy5jdWJpY0NvZWZmQSwgdXNlRXh0cmFwb2xhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuZXh0cmFwb2xhdGlvblZhbHVlLCBhdHRyaWJ1dGVzLmV4Y2x1ZGVPdXRzaWRlKX1gO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdDdWJpYyBtb2RlIG9ubHkgc3VwcG9ydHMgaW5wdXQgZGltcyAyIGFuZCA0IGFyZSBzdXBwb3J0ZWQgaW4gbGluZWFyIG1vZGUuJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKCl9O1xuICAgICAgICAgICAgYDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgcmVzaXplIG1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgfSkoKX07XG4gICAgICBgfVxuICAgICAgJHtcbiAgICAgICAgICBzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3JtKCdvdXRwdXRfc2l6ZScsICd1MzInKVxuICAgICAgICAgICAgICAucmVnaXN0ZXJVbmlmb3JtKCdzY2FsZXMnLCAnZjMyJywgc2NhbGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgLnJlZ2lzdGVyVW5pZm9ybSgncm9pJywgJ2YzMicsIHJvaS5sZW5ndGgpXG4gICAgICAgICAgICAgIC5kZWNsYXJlVmFyaWFibGVzKGlucHV0LCBvdXRwdXQpfVxuICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF9zaXplJyl9XG4gICAgICAgICR7bm9TY2FsZSA/ICdvdXRwdXRbZ2xvYmFsX2lkeF0gPSBpbnB1dFtnbG9iYWxfaWR4XTsnIDogYFxuICAgICAgICBsZXQgb3V0cHV0X2luZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgICAgIHZhciBpbnB1dF9pbmRpY2VzOiAke2lucHV0LnR5cGUuaW5kaWNlc307XG4gICAgICAgICR7KCgpID0+IHtcbiAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVzLm1vZGUpIHtcbiAgICAgICAgICBjYXNlICduZWFyZXN0JzpcbiAgICAgICAgICAgIHJldHVybiBgaW5wdXRfaW5kaWNlcyA9IGNhbGN1bGF0ZUlucHV0SW5kaWNlc0Zyb21PdXRwdXRJbmRpY2VzKG91dHB1dF9pbmRpY2VzKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tJbnB1dEluZGljZXMoaW5wdXRfaW5kaWNlcykpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKCdpbnB1dF9pbmRpY2VzJyl9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRbZ2xvYmFsX2lkeF0gPSAke2F0dHJpYnV0ZXMuZXh0cmFwb2xhdGlvblZhbHVlfTtcbiAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICBjYXNlICdsaW5lYXInOlxuICAgICAgICAgICAgcmV0dXJuIGBvdXRwdXRbZ2xvYmFsX2lkeF0gPSAke1xuICAgICAgICAgICAgICAgIChpbnB1dFNoYXBlLmxlbmd0aCA9PT0gMiB8fCBpbnB1dFNoYXBlLmxlbmd0aCA9PT0gNCkgPyAnYmlsaW5lYXJJbnRlcnBvbGF0aW9uJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmlsaW5lYXJJbnRlcnBvbGF0aW9uJ30ob3V0cHV0X2luZGljZXMpO2A7XG4gICAgICAgICAgY2FzZSAnY3ViaWMnOlxuICAgICAgICAgICAgcmV0dXJuICdvdXRwdXRbZ2xvYmFsX2lkeF0gPSBiaWN1YmljSW50ZXJwb2xhdGlvbihvdXRwdXRfaW5kaWNlcyk7JztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFVuc3VwcG9ydGVkIHJlc2l6ZSBtb2RlOiAke2F0dHJpYnV0ZXMubW9kZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSkoKX07XG5gfVxuICAgICAgfWA7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdSZXNpemUnLFxuICAgICAgICBzaGFkZXJDYWNoZToge1xuICAgICAgICAgIGhpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9fCR7b3BzZXRWZXJzaW9ufXwke3NjYWxlcy5sZW5ndGggPiAwID8gc2NhbGVzIDogJyd9fCR7XG4gICAgICAgICAgICAgIHNpemVzLmxlbmd0aCA+IDAgPyBzaXplcyA6ICcnfXwke3JvaS5sZW5ndGggPiAwID8gcm9pIDogJyd9fCR7bm9TY2FsZX18JHtpbnB1dFNoYXBlfWAsXG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuayddXG4gICAgICAgIH0sXG4gICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRUZW5zb3IuZGF0YVR5cGV9XSxcbiAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7eDogTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCAvKiB3b3JrZ3JvdXAgc2l6ZSAqLyl9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3JtczogW1xuICAgICAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogc2NhbGVzfSxcbiAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogcm9pfSwgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRTaGFwZSwgb3V0cHV0U2hhcGUpXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9O1xuXG5jb25zdCBnZXRPcHNldFZlcnNpb25Gcm9tQ3VzdG9tRGF0YUJ1ZmZlciA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IG51bWJlciA9PiB7XG4gIGNvbnN0IGN1c3RvbURhdGFCdWZmZXIgPSBjb250ZXh0LmN1c3RvbURhdGFCdWZmZXI7XG4gIGNvbnN0IGN1c3RvbURhdGFCdWZmZXIzMiA9IG5ldyBVaW50MzJBcnJheShjdXN0b21EYXRhQnVmZmVyLCBjdXN0b21EYXRhQnVmZmVyLmJ5dGVPZmZzZXQsIDEpO1xuICBjb25zdCBvcHNldFZlcnNpb24gPSBjdXN0b21EYXRhQnVmZmVyMzJbMF07XG4gIHJldHVybiBvcHNldFZlcnNpb247XG59O1xuXG5leHBvcnQgY29uc3QgcmVzaXplID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSZXNpemVBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IHNjYWxlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc2l6ZXM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHJvaTogbnVtYmVyW10gPSBbXTtcblxuICAvLyBOb3RlIHRoYXQgc2NhbGVzIGluIHJlc2l6ZSBhcmUgYWx3YXlzIGYzMi4gcm9pIGNhbiBiZSBmMzIgb3IgZjE2LlxuICAvLyBUT0RPOiBDdXJyZW50bHkgdGhpcyBjb2RlIGRvZXMgbm90IHN1cHBvcnQgZjE2IGZvciByb2kgd2hlbiBwYXNzZWQgYXMgb3B0aW9uYWwgaW5wdXQuXG5cbiAgY29uc3Qgb3BzZXRWZXJzaW9uID0gZ2V0T3BzZXRWZXJzaW9uRnJvbUN1c3RvbURhdGFCdWZmZXIoY29udGV4dCk7XG4gIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcyAhPT0gMCkge1xuICAgIHRocm93IEVycm9yKCdPbmx5IGRlZmF1bHQgdmFsdWUgKDApIGZvciBBbnRpYWxpYXMgYXR0cmlidXRlIGlzIHN1cHBvcnRlZCcpO1xuICB9XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzLCBvcHNldFZlcnNpb24sIHNjYWxlcywgc2l6ZXMsIHJvaSk7XG4gIGNvbnRleHQuY29tcHV0ZShcbiAgICAgIGNyZWF0ZVJlc2l6ZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBhdHRyaWJ1dGVzLCBvcHNldFZlcnNpb24sIHNjYWxlcywgc2l6ZXMsIHJvaSksIHtpbnB1dHM6IFswXX0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlUmVzaXplQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlc2l6ZUF0dHJpYnV0ZXMgPT4ge1xuICBjb25zdCBhbnRpYWxpYXMgPSBhdHRyaWJ1dGVzLmFudGlhbGlhcyBhcyBudW1iZXI7XG4gIGNvbnN0IGF4ZXMgPSBhdHRyaWJ1dGVzLmF4ZXMgYXMgbnVtYmVyW107XG4gIGNvbnN0IGNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlOiBDb29yZGluYXRlVHJhbnNmb3JtTW9kZSA9XG4gICAgICBhdHRyaWJ1dGVzLmNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlIGFzIENvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlO1xuICBjb25zdCBjdWJpY0NvZWZmQSA9IGF0dHJpYnV0ZXMuY3ViaWNDb2VmZkEgYXMgbnVtYmVyO1xuICBjb25zdCBleGNsdWRlT3V0c2lkZSA9IGF0dHJpYnV0ZXMuZXhjbHVkZU91dHNpZGUgYXMgbnVtYmVyICE9PSAwO1xuICBjb25zdCBleHRyYXBvbGF0aW9uVmFsdWUgPSBhdHRyaWJ1dGVzLmV4dHJhcG9sYXRpb25WYWx1ZSBhcyBudW1iZXI7XG4gIGNvbnN0IGtlZXBBc3BlY3RSYXRpb1BvbGljeTogS2VlcEFzcGVjdFJhdGlvUG9saWN5ID0gYXR0cmlidXRlcy5rZWVwQXNwZWN0UmF0aW9Qb2xpY3kgYXMgS2VlcEFzcGVjdFJhdGlvUG9saWN5O1xuICBjb25zdCBtb2RlOiBNb2RlID0gYXR0cmlidXRlcy5tb2RlIGFzIE1vZGU7XG4gIC8vIElmIG5lYXJlc3RNb2RlIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSBzaW1wbGUgbW9kZS5cbiAgY29uc3QgbmVhcmVzdE1vZGU6IE5lYXJlc3RNb2RlID0gKGF0dHJpYnV0ZXMubmVhcmVzdE1vZGUgPT09ICcnID8gJ3NpbXBsZScgOiBhdHRyaWJ1dGVzLm5lYXJlc3RNb2RlKSBhcyBOZWFyZXN0TW9kZTtcbiAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7XG4gICAgYW50aWFsaWFzLFxuICAgIGF4ZXMsXG4gICAgY29vcmRpbmF0ZVRyYW5zZm9ybU1vZGUsXG4gICAgY3ViaWNDb2VmZkEsXG4gICAgZXhjbHVkZU91dHNpZGUsXG4gICAgZXh0cmFwb2xhdGlvblZhbHVlLFxuICAgIGtlZXBBc3BlY3RSYXRpb1BvbGljeSxcbiAgICBtb2RlLFxuICAgIG5lYXJlc3RNb2RlXG4gIH0pO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge1NoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge2NyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCBXT1JLR1JPVVBfU0laRX0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdGFyeUVtYmVkZGluZ0F0dHJpYnV0ZXMge1xuICByZWFkb25seSBpbnRlcmxlYXZlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbnVtSGVhZHM6IG51bWJlcjtcbiAgcmVhZG9ubHkgcm90YXJ5RW1iZWRkaW5nRGltOiBudW1iZXI7XG4gIHJlYWRvbmx5IHNjYWxlOiBudW1iZXI7XG59XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBSb3RhcnlFbWJlZGRpbmdBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIGNvbnN0IFtpbnB1dCwgcG9zaXRpb25JZHMsIGNvc0NhY2hlLCBzaW5DYWNoZV0gPSBpbnB1dHM7XG4gIGNvbnN0IHtudW1IZWFkcywgcm90YXJ5RW1iZWRkaW5nRGltfSA9IGF0dHJpYnV0ZXM7XG5cbiAgaWYgKGlucHV0LmRpbXMubGVuZ3RoICE9PSAzICYmIGlucHV0LmRpbXMubGVuZ3RoICE9PSA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAneCcgaXMgZXhwZWN0ZWQgdG8gaGF2ZSAzIG9yIDQgZGltZW5zaW9ucywgZ290ICR7aW5wdXQuZGltcy5sZW5ndGh9YCk7XG4gIH1cbiAgaWYgKCFTaGFwZVV0aWwuYXJlRXF1YWwocG9zaXRpb25JZHMuZGltcywgW10pICYmICFTaGFwZVV0aWwuYXJlRXF1YWwocG9zaXRpb25JZHMuZGltcywgWzFdKSAmJlxuICAgICAgcG9zaXRpb25JZHMuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdwb3NpdGlvbl9pZHMnIGlzIGV4cGVjdGVkIHRvIGhhdmUgMCwgMSwgb3IgMiBkaW1lbnNpb25zLCBnb3QgJHtwb3NpdGlvbklkcy5kaW1zLmxlbmd0aH1gKTtcbiAgfVxuICBpZiAoY29zQ2FjaGUuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdjb3NfY2FjaGUnIGlzIGV4cGVjdGVkIHRvIGhhdmUgMiBkaW1lbnNpb25zLCBnb3QgJHtjb3NDYWNoZS5kaW1zLmxlbmd0aH1gKTtcbiAgfVxuICBpZiAoc2luQ2FjaGUuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdzaW5fY2FjaGUnIGlzIGV4cGVjdGVkIHRvIGhhdmUgMiBkaW1lbnNpb25zLCBnb3QgJHtzaW5DYWNoZS5kaW1zLmxlbmd0aH1gKTtcbiAgfVxuICBpZiAoIVNoYXBlVXRpbC5hcmVFcXVhbChjb3NDYWNoZS5kaW1zLCBzaW5DYWNoZS5kaW1zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5wdXRzIFxcJ2Nvc19jYWNoZVxcJyBhbmQgXFwnc2luX2NhY2hlXFwnIGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lIHNoYXBlJyk7XG4gIH1cblxuICBpZiAocm90YXJ5RW1iZWRkaW5nRGltID4gMCAmJiBudW1IZWFkcyA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbnVtX2hlYWRzIG11c3QgYmUgcHJvdmlkZWQgaWYgcm90YXJ5X2VtYmVkZGluZ19kaW0gaXMgc3BlY2lmaWVkJyk7XG4gIH1cblxuICBjb25zdCBiYXRjaFNpemUgPSBpbnB1dC5kaW1zWzBdO1xuICBjb25zdCBzZXF1ZW5jZUxlbmd0aCA9IGlucHV0LmRpbXNbaW5wdXQuZGltcy5sZW5ndGggLSAyXTtcbiAgY29uc3QgbWF4U2VxdWVuY2VMZW5ndGggPSBjb3NDYWNoZS5kaW1zWzBdO1xuICBjb25zdCBoaWRkZW5TaXplID0gU2hhcGVVdGlsLnNpemVGcm9tRGltZW5zaW9uKGlucHV0LmRpbXMsIDEpIC8gc2VxdWVuY2VMZW5ndGg7XG4gIGNvbnN0IGhlYWRTaXplID0gcm90YXJ5RW1iZWRkaW5nRGltID09PSAwID8gY29zQ2FjaGUuZGltc1sxXSAqIDIgOiBoaWRkZW5TaXplIC8gbnVtSGVhZHM7XG4gIGlmIChyb3RhcnlFbWJlZGRpbmdEaW0gPiBoZWFkU2l6ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncm90YXJ5X2VtYmVkZGluZ19kaW0gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gaGVhZF9zaXplJyk7XG4gIH1cblxuICBpZiAocG9zaXRpb25JZHMuZGltcy5sZW5ndGggPT09IDIpIHtcbiAgICBpZiAoYmF0Y2hTaXplICE9PSBwb3NpdGlvbklkcy5kaW1zWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdwb3NpdGlvbl9pZHMnIGRpbWVuc2lvbiAwIHNob3VsZCBiZSBvZiBzaXplIGJhdGNoX3NpemUsIGdvdCAke3Bvc2l0aW9uSWRzLmRpbXNbMF19YCk7XG4gICAgfVxuICAgIGlmIChzZXF1ZW5jZUxlbmd0aCAhPT0gcG9zaXRpb25JZHMuZGltc1sxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAncG9zaXRpb25faWRzJyBkaW1lbnNpb24gMSBzaG91bGQgYmUgb2Ygc2l6ZSBzZXF1ZW5jZV9sZW5ndGgsIGdvdCAke3Bvc2l0aW9uSWRzLmRpbXNbMV19YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGhlYWRTaXplIC8gMiAhPT0gY29zQ2FjaGUuZGltc1sxXSAmJiByb3RhcnlFbWJlZGRpbmdEaW0gLyAyICE9PSBjb3NDYWNoZS5kaW1zWzFdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAnY29zX2NhY2hlJyBkaW1lbnNpb24gMSBzaG91bGQgYmUgc2FtZSBhcyBoZWFkX3NpemUgLyAyIG9yIHJvdGFyeV9lbWJlZGRpbmdfZGltIC8gMiwgZ290ICR7XG4gICAgICAgIGNvc0NhY2hlLmRpbXNbMV19YCk7XG4gIH1cblxuICBpZiAoc2VxdWVuY2VMZW5ndGggPiBtYXhTZXF1ZW5jZUxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVXBkYXRpbmcgY29zX2NhY2hlIGFuZCBzaW5fY2FjaGUgaW4gUm90YXJ5RW1iZWRkaW5nIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkJyk7XG4gIH1cbn07XG5cbmNvbnN0IGNyZWF0ZVJvdGFyeUVtYmVkZGluZ1Byb2dyYW1JbmZvID1cbiAgICAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IFJvdGFyeUVtYmVkZGluZ0F0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICBjb25zdCB7aW50ZXJsZWF2ZWQsIG51bUhlYWRzLCByb3RhcnlFbWJlZGRpbmdEaW0sIHNjYWxlfSA9IGF0dHJpYnV0ZXM7XG4gICAgICBjb25zdCBiYXRjaFNpemUgPSBpbnB1dHNbMF0uZGltc1swXTtcbiAgICAgIGNvbnN0IGJhdGNoU3RyaWRlID0gU2hhcGVVdGlsLnNpemVGcm9tRGltZW5zaW9uKGlucHV0c1swXS5kaW1zLCAxKTtcbiAgICAgIGNvbnN0IHNlcXVlbmNlTGVuZ3RoID0gaW5wdXRzWzBdLmRpbXNbaW5wdXRzWzBdLmRpbXMubGVuZ3RoIC0gMl07XG4gICAgICBjb25zdCBoaWRkZW5TaXplID0gYmF0Y2hTdHJpZGUgLyBzZXF1ZW5jZUxlbmd0aDtcbiAgICAgIGNvbnN0IGhhbGZSb3RhcnlFbWJlZGRpbmdEaW0gPSBpbnB1dHNbMl0uZGltc1sxXTtcbiAgICAgIGNvbnN0IGhlYWRTaXplID0gcm90YXJ5RW1iZWRkaW5nRGltID09PSAwID8gaGFsZlJvdGFyeUVtYmVkZGluZ0RpbSAqIDIgOiBoaWRkZW5TaXplIC8gbnVtSGVhZHM7XG5cbiAgICAgIC8vIFJvdGFyeSBlbWJlZGRpbmdzIHdpbGwgYmUgY2FsY3VsYXRlZCBpbiBhIHBhaXItd2lzZSBmYXNoaW9uLiBJbiBhY2NvcmRhbmNlLCB1c2UgdGhlIHNoYXBlXG4gICAgICAvLyBbYmF0Y2ggc2l6ZSwgc2VxdWVuY2UgbGVuZ3RoLCBudW0gb2YgaGVhZHMsIG51bSBvZiBwYWlycyB0byByb3RhdGUgKyBudW0gb2YgZGltcyB0byBjb3B5XVxuICAgICAgLy8gdG8gdW5mb2xkIHRoZSBnbG9iYWwgaW5kZXggaW4gc2hhZGVyLlxuICAgICAgY29uc3QgZ2xvYmFsU2hhcGUgPVxuICAgICAgICAgIG5ldyBBcnJheTxudW1iZXI+KGJhdGNoU2l6ZSwgc2VxdWVuY2VMZW5ndGgsIGhpZGRlblNpemUgLyBoZWFkU2l6ZSwgaGVhZFNpemUgLSBoYWxmUm90YXJ5RW1iZWRkaW5nRGltKTtcbiAgICAgIGNvbnN0IGdsb2JhbFN0cmlkZXMgPSBTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoZ2xvYmFsU2hhcGUpO1xuXG4gICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXM6IFByb2dyYW1Vbmlmb3JtW10gPSBbXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS5mbG9hdCwgZGF0YTogc2NhbGV9LFxuICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBnbG9iYWxTaGFwZX0sXG4gICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGdsb2JhbFN0cmlkZXN9LFxuXG4gICAgICAgIC8vIHN0cmlkZXMgZm9yIGFkZHJlc3NpbmcgdGhlIGlucHV0L291dHB1dCB0ZW5zb3IsIGluIHBlcm11dGF0ZWQgb3JkZXIgdG8gYWxpZ24gd2l0aCB0aGUgdW5mb2xkZWQgZ2xvYmFsIGluZGV4LFxuICAgICAgICAvLyBpLmUuIEJTTkhcbiAgICAgICAgLi4uKGlucHV0c1swXS5kaW1zLmxlbmd0aCA9PT0gMyA/XG4gICAgICAgICAgICAgICAgbmV3IEFycmF5PFByb2dyYW1Vbmlmb3JtPih7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBbYmF0Y2hTdHJpZGUsIGhpZGRlblNpemUsIGhlYWRTaXplLCAxXX0pIDpcbiAgICAgICAgICAgICAgICBbXSksXG4gICAgICAgIC4uLihpbnB1dHNbMF0uZGltcy5sZW5ndGggPT09IDQgP1xuICAgICAgICAgICAgICAgIG5ldyBBcnJheTxQcm9ncmFtVW5pZm9ybT4oXG4gICAgICAgICAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IFtiYXRjaFN0cmlkZSwgaGVhZFNpemUsIHNlcXVlbmNlTGVuZ3RoICogaGVhZFNpemUsIDFdfSkgOlxuICAgICAgICAgICAgICAgIFtdKSxcblxuICAgICAgICAuLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMF0uZGltcywgaW5wdXRzWzFdLmRpbXMsIGlucHV0c1syXS5kaW1zLCBpbnB1dHNbM10uZGltcywgaW5wdXRzWzBdLmRpbXMpLFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uSWRzID0gaW5wdXRWYXJpYWJsZSgncG9zaXRpb25faWRzJywgaW5wdXRzWzFdLmRhdGFUeXBlLCBpbnB1dHNbMV0uZGltcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBjb3NDYWNoZSA9IGlucHV0VmFyaWFibGUoJ2Nvc19jYWNoZScsIGlucHV0c1syXS5kYXRhVHlwZSwgaW5wdXRzWzJdLmRpbXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgc2luQ2FjaGUgPSBpbnB1dFZhcmlhYmxlKCdzaW5fY2FjaGUnLCBpbnB1dHNbM10uZGF0YVR5cGUsIGlucHV0c1szXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG5cbiAgICAgICAgc2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXMoW1xuICAgICAgICAgIHtuYW1lOiAnc2NhbGUnLCB0eXBlOiAnZjMyJ30sXG4gICAgICAgICAge25hbWU6ICdnbG9iYWxfc2hhcGUnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBnbG9iYWxTaGFwZS5sZW5ndGh9LFxuICAgICAgICAgIHtuYW1lOiAnZ2xvYmFsX3N0cmlkZXMnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBnbG9iYWxTdHJpZGVzLmxlbmd0aH0sXG4gICAgICAgICAge25hbWU6ICdpbnB1dF9vdXRwdXRfc3RyaWRlcycsIHR5cGU6ICd1MzInLCBsZW5ndGg6IGdsb2JhbFN0cmlkZXMubGVuZ3RofSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgcG9zaXRpb25JZHMsIGNvc0NhY2hlLCBzaW5DYWNoZSwgb3V0cHV0KX1cblxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoV09SS0dST1VQX1NJWkUpfVxuICAgICAgICAgIGxldCBoYWxmX3JvdGFyeV9lbWJfZGltID0gdW5pZm9ybXMuJHtjb3NDYWNoZS5uYW1lfV9zaGFwZVsxXTtcbiAgICAgICAgICBsZXQgYnNuaCA9IGdsb2JhbF9pZHggLyB1bmlmb3Jtcy5nbG9iYWxfc3RyaWRlcyAlIHVuaWZvcm1zLmdsb2JhbF9zaGFwZTtcbiAgICAgICAgICBsZXQgc2l6ZSA9IHVuaWZvcm1zLmdsb2JhbF9zaGFwZVswXSAqIHVuaWZvcm1zLmdsb2JhbF9zdHJpZGVzWzBdO1xuICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3NpemUnKX1cblxuICAgICAgICAgIGlmIChic25oWzNdIDwgaGFsZl9yb3RhcnlfZW1iX2RpbSkge1xuICAgICAgICAgICAgbGV0IHBvc2l0aW9uX2lkc19pZHggPVxuICAgICAgICAgICAgICAgICR7cG9zaXRpb25JZHMuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoJ2JzbmgueHknLCBvdXRwdXRWYXJpYWJsZSgnJywgcG9zaXRpb25JZHMudHlwZS50ZW5zb3IsIDIpKX07XG4gICAgICAgICAgICBsZXQgcG9zaXRpb25faWQgPVxuICAgICAgICAgICAgICAgIHUzMigke3Bvc2l0aW9uSWRzLmdldEJ5T2Zmc2V0KCdwb3NpdGlvbl9pZHNfaWR4Jyl9KSArIHNlbGVjdCgwLCBic25oWzFdLCBwb3NpdGlvbl9pZHNfaWR4ID09IDApO1xuICAgICAgICAgICAgbGV0IGkgPSBkb3QoYnNuaCwgdW5pZm9ybXMuaW5wdXRfb3V0cHV0X3N0cmlkZXMpICsgc2VsZWN0KDAsIGJzbmhbM10sICR7aW50ZXJsZWF2ZWR9KTtcbiAgICAgICAgICAgIGxldCBqID0gaSArIHNlbGVjdChoYWxmX3JvdGFyeV9lbWJfZGltLCAxLCAke2ludGVybGVhdmVkfSk7XG4gICAgICAgICAgICBsZXQgcmUgPSAke2lucHV0LmdldEJ5T2Zmc2V0KCdpJyl9ICogJHtjb3NDYWNoZS5nZXQoJ3Bvc2l0aW9uX2lkJywgJ2JzbmhbM10nKX0gLVxuICAgICAgICAgICAgICAgICR7aW5wdXQuZ2V0QnlPZmZzZXQoJ2onKX0gKiAke3NpbkNhY2hlLmdldCgncG9zaXRpb25faWQnLCAnYnNuaFszXScpfTtcbiAgICAgICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdpJywgJ3JlJyl9XG4gICAgICAgICAgICBsZXQgaW0gPSAke2lucHV0LmdldEJ5T2Zmc2V0KCdpJyl9ICogJHtzaW5DYWNoZS5nZXQoJ3Bvc2l0aW9uX2lkJywgJ2JzbmhbM10nKX0gK1xuICAgICAgICAgICAgICAgICR7aW5wdXQuZ2V0QnlPZmZzZXQoJ2onKX0gKiAke2Nvc0NhY2hlLmdldCgncG9zaXRpb25faWQnLCAnYnNuaFszXScpfTtcbiAgICAgICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KCdqJywgJ2ltJyl9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBrID0gZG90KGJzbmgsIHVuaWZvcm1zLmlucHV0X291dHB1dF9zdHJpZGVzKSArIGhhbGZfcm90YXJ5X2VtYl9kaW07XG4gICAgICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnaycsIGlucHV0LmdldEJ5T2Zmc2V0KCdrJykpfVxuICAgICAgICAgIH1cbiAgICAgICAgfWA7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnUm90YXJ5RW1iZWRkaW5nJyxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHtcbiAgICAgICAgICBoaW50OiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoe1xuICAgICAgICAgICAgICAgICAgaW50ZXJsZWF2ZWQsXG4gICAgICAgICAgICAgICAgfSkuY2FjaGVLZXksXG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuaycsICdyYW5rJywgJ3JhbmsnLCAncmFuayddLFxuICAgICAgICB9LFxuICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgb3V0cHV0czogW3tkaW1zOiBpbnB1dHNbMF0uZGltcywgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwoU2hhcGVVdGlsLnNpemUoZ2xvYmFsU2hhcGUpIC8gV09SS0dST1VQX1NJWkUpfSxcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXMsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9O1xuXG5leHBvcnQgY29uc3Qgcm90YXJ5RW1iZWRkaW5nID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBhdHRyaWJ1dGVzOiBSb3RhcnlFbWJlZGRpbmdBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVJvdGFyeUVtYmVkZGluZ1Byb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKSk7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvLCBQcm9ncmFtVW5pZm9ybX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Nhc3RUb0YzMiwgZmlsbFZlY3RvciwgZ2V0TWF4Q29tcG9uZW50cywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgc3VtVmVjdG9yLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIFVuaWZvcm1zQXJyYXlUeXBlfSBmcm9tICcuL2NvbW1vbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2tpcExheWVyTm9ybUF0dHJpYnV0ZXMge1xuICBzaW1wbGlmaWVkOiBib29sZWFuO1xuICBlcHNpbG9uOiBudW1iZXI7XG59XG5cbmNvbnN0IHZhbGlkYXRlSW5wdXRzID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogdm9pZCA9PiB7XG4gIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdsYXllck5vcm0gcmVxdWlyZXMgYXQgbGVhc3QgMyBpbnB1dHMuJyk7XG4gIH1cblxuICBjb25zdCBpbnB1dDogVGVuc29yVmlldyA9IGlucHV0c1swXTtcbiAgY29uc3Qgc2tpcDogVGVuc29yVmlldyA9IGlucHV0c1sxXTtcbiAgY29uc3QgZ2FtbWE6IFRlbnNvclZpZXcgPSBpbnB1dHNbMl07XG5cbiAgaWYgKGlucHV0LmRhdGFUeXBlICE9PSBza2lwLmRhdGFUeXBlIHx8IGlucHV0LmRhdGFUeXBlICE9PSBnYW1tYS5kYXRhVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWxsIGlucHV0cyBtdXN0IGhhdmUgdGhlIHNhbWUgZGF0YSB0eXBlJyk7XG4gIH1cblxuICBpZiAoaW5wdXQuZGltcy5sZW5ndGggIT09IDMgJiYgaW5wdXQuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgMkQgb3IgM0QnKTtcbiAgfVxuXG4gIGlmIChza2lwLmRpbXMubGVuZ3RoICE9PSAzICYmIHNraXAuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NraXAgbXVzdCBiZSAyRCBvciAzRCcpO1xuICB9XG5cbiAgY29uc3QgaGlkZGVuU2l6ZSA9IGlucHV0LmRpbXNbaW5wdXQuZGltcy5sZW5ndGggLSAxXTtcbiAgY29uc3Qgc2VxdWVuY2VMZW5ndGggPSBpbnB1dC5kaW1zW2lucHV0LmRpbXMubGVuZ3RoIC0gMl07XG4gIGlmIChza2lwLmRpbXNbc2tpcC5kaW1zLmxlbmd0aCAtIDFdICE9PSBoaWRkZW5TaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTa2lwIG11c3QgaGF2ZSB0aGUgc2FtZSBoaWRkZW4gc2l6ZSBhcyBpbnB1dCcpO1xuICB9XG4gIGlmIChza2lwLmRpbXNbc2tpcC5kaW1zLmxlbmd0aCAtIDJdICE9PSBzZXF1ZW5jZUxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2tpcCBtdXN0IGhhdmUgdGhlIHNhbWUgc2VxdWVuY2UgbGVuZ3RoIGFzIGlucHV0Jyk7XG4gIH1cblxuICBpZiAoZ2FtbWEuZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dhbW1hIG11c3QgYmUgMUQnKTtcbiAgfVxuICBpZiAoZ2FtbWEuZGltc1tnYW1tYS5kaW1zLmxlbmd0aCAtIDFdICE9PSBoaWRkZW5TaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHYW1tYSBtdXN0IGhhdmUgdGhlIHNhbWUgaGlkZGVuIHNpemUgYXMgaW5wdXQnKTtcbiAgfVxuICBpZiAoaW5wdXRzLmxlbmd0aCA+IDMpIHtcbiAgICBjb25zdCBiZXRhOiBUZW5zb3JWaWV3ID0gaW5wdXRzWzNdO1xuICAgIGlmIChiZXRhLmRpbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JldGEgbXVzdCBiZSAxRCcpO1xuICAgIH1cbiAgICBpZiAoYmV0YS5kaW1zW2JldGEuZGltcy5sZW5ndGggLSAxXSAhPT0gaGlkZGVuU2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCZXRhIG11c3QgaGF2ZSB0aGUgc2FtZSBoaWRkZW4gc2l6ZSBhcyBpbnB1dCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnB1dHMubGVuZ3RoID4gNCkge1xuICAgIGNvbnN0IGJpYXM6IFRlbnNvclZpZXcgPSBpbnB1dHNbNF07XG4gICAgaWYgKGJpYXMuZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmlhcyBtdXN0IGJlIDFEJyk7XG4gICAgfVxuICAgIGlmIChiaWFzLmRpbXNbYmlhcy5kaW1zLmxlbmd0aCAtIDFdICE9PSBoaWRkZW5TaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JpYXMgbXVzdCBoYXZlIHRoZSBzYW1lIGhpZGRlbiBzaXplIGFzIGlucHV0Jyk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBjcmVhdGVTa2lwTGF5ZXJOb3JtUHJvZ3JhbUluZm8gPVxuICAgIChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogU2tpcExheWVyTm9ybUF0dHJpYnV0ZXMsIG91dHB1dENvdW50OiBudW1iZXIsIGlzVHJhaW5pbmc6IGJvb2xlYW4pOlxuICAgICAgICBQcm9ncmFtSW5mbyA9PiB7XG4gICAgICAgICAgY29uc3Qgc2ltcGxpZmllZCA9IGF0dHJpYnV0ZXMuc2ltcGxpZmllZDtcblxuICAgICAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgICBjb25zdCBpbnB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShpbnB1dFNoYXBlKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0U2hhcGU7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IGlucHV0U2l6ZTtcbiAgICAgICAgICBjb25zdCBoaWRkZW5TaXplID0gaW5wdXRTaGFwZS5zbGljZSgtMSlbMF07XG4gICAgICAgICAgY29uc3QgbWVhbkludlN0ZERldkRpbSA9IGlzVHJhaW5pbmcgPyBpbnB1dFNoYXBlLnNsaWNlKDAsIC0xKS5jb25jYXQoMSkgOiBbXTtcbiAgICAgICAgICBjb25zdCBoYXNCZXRhSW5wdXQgPSAhc2ltcGxpZmllZCAmJiBpbnB1dHMubGVuZ3RoID4gMztcbiAgICAgICAgICBjb25zdCBoYXNCaWFzSW5wdXQgPSBpbnB1dHMubGVuZ3RoID4gNDtcbiAgICAgICAgICBjb25zdCBoYXNNZWFuT3V0cHV0ID0gaXNUcmFpbmluZyAmJiBvdXRwdXRDb3VudCA+IDE7XG4gICAgICAgICAgY29uc3QgaGFzSW52U3RkRGV2T3V0cHV0ID0gaXNUcmFpbmluZyAmJiBvdXRwdXRDb3VudCA+IDI7XG4gICAgICAgICAgY29uc3QgaGFzSW5wdXRTa2lwQmlhc1N1bU91dHB1dCA9IG91dHB1dENvdW50ID4gMztcblxuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKGhpZGRlblNpemUpO1xuXG4gICAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgICAgICAgICAge3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sXG4gICAgICAgICAgICB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBjb21wb25lbnRzfSxcbiAgICAgICAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IGhpZGRlblNpemV9LFxuICAgICAgICAgICAge3R5cGU6IERhdGFUeXBlLmZsb2F0LCBkYXRhOiBhdHRyaWJ1dGVzLmVwc2lsb259LFxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcjogU2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bmlmb3Jtc0FycmF5OiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICAgICAgICAgICAge25hbWU6ICdvdXRwdXRfc2l6ZScsIHR5cGU6ICd1MzInfSxcbiAgICAgICAgICAgICAge25hbWU6ICdjb21wb25lbnRzJywgdHlwZTogJ3UzMid9LFxuICAgICAgICAgICAgICB7bmFtZTogJ2hpZGRlbl9zaXplJywgdHlwZTogJ3UzMid9LFxuICAgICAgICAgICAgICB7bmFtZTogJ2Vwc2lsb24nLCB0eXBlOiAnZjMyJ30sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gW1xuICAgICAgICAgICAgICBpbnB1dFZhcmlhYmxlKCd4JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcywgY29tcG9uZW50cyksXG4gICAgICAgICAgICAgIGlucHV0VmFyaWFibGUoJ3NraXAnLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zLCBjb21wb25lbnRzKSxcbiAgICAgICAgICAgICAgaW5wdXRWYXJpYWJsZSgnZ2FtbWEnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLCBjb21wb25lbnRzKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaGFzQmV0YUlucHV0KSB7XG4gICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoJ2JldGEnLCBpbnB1dHNbM10uZGF0YVR5cGUsIGlucHV0c1szXS5kaW1zLCBjb21wb25lbnRzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQmlhc0lucHV0KSB7XG4gICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoJ2JpYXMnLCBpbnB1dHNbNF0uZGF0YVR5cGUsIGlucHV0c1s0XS5kaW1zLCBjb21wb25lbnRzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXJpYWJsZXMucHVzaChvdXRwdXRWYXJpYWJsZSgnb3V0cHV0JywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgY29tcG9uZW50cykpO1xuICAgICAgICAgICAgaWYgKGhhc01lYW5PdXRwdXQpIHtcbiAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2gob3V0cHV0VmFyaWFibGUoJ21lYW5fb3V0cHV0JywgRGF0YVR5cGUuZmxvYXQsIG1lYW5JbnZTdGREZXZEaW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNJbnZTdGREZXZPdXRwdXQpIHtcbiAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2gob3V0cHV0VmFyaWFibGUoJ2ludl9zdGRfb3V0cHV0JywgRGF0YVR5cGUuZmxvYXQsIG1lYW5JbnZTdGREZXZEaW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNJbnB1dFNraXBCaWFzU3VtT3V0cHV0KSB7XG4gICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKG91dHB1dFZhcmlhYmxlKCdpbnB1dF9za2lwX2JpYXNfc3VtJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgY29tcG9uZW50cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBgXG5cbiAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXNBcnJheSkuZGVjbGFyZVZhcmlhYmxlcyguLi52YXJpYWJsZXMpfVxuXG4gICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMub3V0cHV0X3NpemUgLyB1bmlmb3Jtcy5oaWRkZW5fc2l6ZScpfVxuICAgICAgICBsZXQgaGlkZGVuX3NpemVfdmVjdG9yaXplZDogdTMyID0gdW5pZm9ybXMuaGlkZGVuX3NpemUgLyB1bmlmb3Jtcy5jb21wb25lbnRzO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gZ2xvYmFsX2lkeCAqIGhpZGRlbl9zaXplX3ZlY3Rvcml6ZWQ7XG4gICAgICAgIHZhciBzdW0gPSAke2ZpbGxWZWN0b3IoJ2YzMicsIGNvbXBvbmVudHMpfTtcbiAgICAgICAgdmFyIHNxdWFyZVN1bSA9ICR7ZmlsbFZlY3RvcignZjMyJywgY29tcG9uZW50cyl9O1xuICAgICAgICBmb3IgKHZhciBpOiB1MzIgPSAwOyBpIDwgaGlkZGVuX3NpemVfdmVjdG9yaXplZDsgaSsrKSB7XG4gICAgICAgICAgbGV0IHNraXBfdmFsdWUgPSBza2lwW29mZnNldCArIGldO1xuICAgICAgICAgIGxldCBiaWFzX3ZhbHVlID0gJHtoYXNCaWFzSW5wdXQgPyAnYmlhc1tpXScgOiBkYXRhVHlwZSArICcoMC4wKSd9O1xuICAgICAgICAgIGxldCBpbnB1dF92YWx1ZSA9IHhbb2Zmc2V0ICsgaV07XG4gICAgICAgICAgbGV0IHZhbHVlID0gaW5wdXRfdmFsdWUgKyBza2lwX3ZhbHVlICsgYmlhc192YWx1ZTtcbiAgICAgICAgICAke2hhc0lucHV0U2tpcEJpYXNTdW1PdXRwdXQgPyAnaW5wdXRfc2tpcF9iaWFzX3N1bVtvZmZzZXQgKyBpXSA9IHZhbHVlOycgOiAnJ31cbiAgICAgICAgICBvdXRwdXRbb2Zmc2V0ICsgaV0gPSB2YWx1ZTtcbiAgICAgICAgICBsZXQgZjMyX3ZhbHVlID0gJHtjYXN0VG9GMzIoZGF0YVR5cGUsIGNvbXBvbmVudHMsICd2YWx1ZScpfTtcbiAgICAgICAgICBzdW0gKz0gZjMyX3ZhbHVlO1xuICAgICAgICAgIHNxdWFyZVN1bSArPSBmMzJfdmFsdWUgKiBmMzJfdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lYW4gPSAke3N1bVZlY3Rvcignc3VtJywgY29tcG9uZW50cyl9IC8gZjMyKHVuaWZvcm1zLmhpZGRlbl9zaXplKTtcbiAgICAgICAgbGV0IGludl9zdGRfZGV2ID0gaW52ZXJzZVNxcnQoJHtzdW1WZWN0b3IoJ3NxdWFyZVN1bScsIGNvbXBvbmVudHMpfSAvIGYzMih1bmlmb3Jtcy5oaWRkZW5fc2l6ZSkgJHtcbiAgICAgICAgICAgICAgICBzaW1wbGlmaWVkID8gJycgOiAnLSBtZWFuICogbWVhbid9ICsgdW5pZm9ybXMuZXBzaWxvbik7XG4gICAgICAgICR7aGFzTWVhbk91dHB1dCA/ICdtZWFuX291dHB1dFtnbG9iYWxfaWR4XSA9IG1lYW47JyA6ICcnfVxuICAgICAgICAke2hhc0ludlN0ZERldk91dHB1dCA/ICdpbnZfc3RkX291dHB1dFtnbG9iYWxfaWR4XSA9IGludl9zdGRfZGV2OycgOiAnJ31cbiAgICAgICAgZm9yICh2YXIgaTogdTMyID0gMDsgaSA8IGhpZGRlbl9zaXplX3ZlY3Rvcml6ZWQ7IGkrKykge1xuICAgICAgICAgIG91dHB1dFtvZmZzZXQgKyBpXSA9IChvdXRwdXRbb2Zmc2V0ICsgaV0gJHtzaW1wbGlmaWVkID8gJycgOiBgLSAke2RhdGFUeXBlfShtZWFuKWB9KSAqICR7XG4gICAgICAgICAgICAgICAgZGF0YVR5cGV9KGludl9zdGRfZGV2KSAqIGdhbW1hW2ldICR7aGFzQmV0YUlucHV0ID8gJysgYmV0YVtpXScgOiAnJ307XG4gICAgICAgIH1cbiAgICAgIH1gO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgb3V0cHV0cyA9IFt7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9XTtcbiAgICAgICAgICBpZiAob3V0cHV0Q291bnQgPiAxKSB7XG4gICAgICAgICAgICBvdXRwdXRzLnB1c2goe2RpbXM6IG1lYW5JbnZTdGREZXZEaW0sIGRhdGFUeXBlOiBEYXRhVHlwZS5mbG9hdH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3V0cHV0Q291bnQgPiAyKSB7XG4gICAgICAgICAgICBvdXRwdXRzLnB1c2goe2RpbXM6IG1lYW5JbnZTdGREZXZEaW0sIGRhdGFUeXBlOiBEYXRhVHlwZS5mbG9hdH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3V0cHV0Q291bnQgPiAzKSB7XG4gICAgICAgICAgICBvdXRwdXRzLnB1c2goe2RpbXM6IGlucHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICdTa2lwTGF5ZXJOb3JtYWxpemF0aW9uJyxcbiAgICAgICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgICAgIGhpbnQ6IGAke2NvbXBvbmVudHN9OyR7aGFzTWVhbk91dHB1dH07JHtoYXNJbnZTdGREZXZPdXRwdXR9OyR7aGFzSW5wdXRTa2lwQmlhc1N1bU91dHB1dH1gLFxuICAgICAgICAgICAgICBpbnB1dERlcGVuZGVuY2llczogaW5wdXRzLm1hcCgoX2lucHV0LCBfaW5kZXgpID0+ICd0eXBlJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe291dHB1dHMsIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIGhpZGRlblNpemUgLyA2NCl9LCBwcm9ncmFtVW5pZm9ybXN9KSxcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG5leHBvcnQgY29uc3Qgc2tpcExheWVyTm9ybSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCwgYXR0cmlidXRlczogU2tpcExheWVyTm9ybUF0dHJpYnV0ZXMpOiB2b2lkID0+IHtcbiAgLy8gVE9ETzogaW5pdGlhbGl6ZSBpc1RyYWluaW5nIGZyb20gQ29tcHV0ZUNvbnRleHRcbiAgY29uc3QgaXNUcmFpbmluZyA9IGZhbHNlO1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIC8vIE1lYW4gYW5kIEludlN0ZERldiBhcmUgb25seSB1c2VkIGluIHRyYWluaW5nIG1vZGUgYW5kIGFyZSBub3QgcmVxdWlyZWQgZm9yIGluZmVyZW5jZS5cbiAgLy8gVGhleSBhcmUgYWRkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzIG9ubHkuXG4gIGNvbnN0IG91dHB1dHMgPSBbMF07XG4gIGlmIChjb250ZXh0Lm91dHB1dENvdW50ID4gMSkge1xuICAgIG91dHB1dHMucHVzaChpc1RyYWluaW5nID8gMSA6IC0zKTtcbiAgfVxuICBpZiAoY29udGV4dC5vdXRwdXRDb3VudCA+IDIpIHtcbiAgICBvdXRwdXRzLnB1c2goaXNUcmFpbmluZyA/IDIgOiAtMyk7XG4gIH1cbiAgaWYgKGNvbnRleHQub3V0cHV0Q291bnQgPiAzKSB7XG4gICAgb3V0cHV0cy5wdXNoKDMpO1xuICB9XG4gIGNvbnRleHQuY29tcHV0ZShcbiAgICAgIGNyZWF0ZVNraXBMYXllck5vcm1Qcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcywgY29udGV4dC5vdXRwdXRDb3VudCwgaXNUcmFpbmluZyksIHtvdXRwdXRzfSk7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7QXR0cmlidXRlV2l0aENhY2hlS2V5LCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbVVuaWZvcm0sIFRlbnNvckluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgZ2V0RWxlbWVudEF0LCBJbmRpY2VzSGVscGVyLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyLCBVbmlmb3Jtc0FycmF5VHlwZX0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlQXR0cmlidXRlcyBleHRlbmRzIEF0dHJpYnV0ZVdpdGhDYWNoZUtleSB7XG4gIHJlYWRvbmx5IHN0YXJ0czogbnVtYmVyW107XG4gIHJlYWRvbmx5IGVuZHM6IG51bWJlcltdO1xuICByZWFkb25seSBheGVzOiBudW1iZXJbXTtcbn1cblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIGF0dHJpYnV0ZXM6IFNsaWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9vIGZldyBpbnB1dHMnKTtcbiAgfVxuICBpZiAoYXR0cmlidXRlcy5heGVzLmxlbmd0aCAhPT0gMCkge1xuICAgIGlmIChhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoICE9PSBhdHRyaWJ1dGVzLnN0YXJ0cy5sZW5ndGggfHwgYXR0cmlidXRlcy5heGVzLmxlbmd0aCAhPT0gYXR0cmlidXRlcy5lbmRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdheGVzLCBzdGFydHMgYW5kIGVuZHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCcpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0YXJ0cy5sZW5ndGggIT09IGF0dHJpYnV0ZXMuZW5kcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0cyBhbmQgZW5kcyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gIH1cbiAgaW5wdXRzLnNsaWNlKDEpLmZvckVhY2goKF8sIGlkeCkgPT4ge1xuICAgIGlmIChpbnB1dHNbaWR4ICsgMV0uZGF0YVR5cGUgIT09IERhdGFUeXBlLmludDMyICYmIGlucHV0c1tpZHggKyAxXS5kYXRhVHlwZSAhPT0gRGF0YVR5cGUuaW50NjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgJHtpZHh9IG11c3QgYmUgYW4gYXJyYXkgb2YgaW50MzIgb3IgaW50NjRgKTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgcmVhZElucHV0ID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBpZHg6IG51bWJlcik6IG51bWJlcltdID0+IHtcbiAgY29uc3QgaW5wdXQ6IG51bWJlcltdID0gW107XG4gIGlmIChpbnB1dHMubGVuZ3RoID4gaWR4KSB7XG4gICAgaWYgKGlucHV0c1tpZHhdLmRhdGFUeXBlID09PSBEYXRhVHlwZS5pbnQ2NCkge1xuICAgICAgaW5wdXRzW2lkeF0uZ2V0QmlnSW50NjRBcnJheSgpLmZvckVhY2godiA9PiBpbnB1dC5wdXNoKE51bWJlcih2KSkpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRzW2lkeF0uZGF0YVR5cGUgPT09IERhdGFUeXBlLmludDMyKSB7XG4gICAgICBpbnB1dHNbaWR4XS5nZXRJbnQzMkFycmF5KCkuZm9yRWFjaCh2ID0+IGlucHV0LnB1c2goTnVtYmVyKHYpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgJHtpZHh9IG11c3QgYmUgYW4gYXJyYXkgb2YgaW50MzIgb3IgaW50NjRgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufTtcblxuY29uc3QgY3JlYXRlU2xpY2VBdHRyaWJ1dGVzRnJvbUlucHV0cyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBTbGljZUF0dHJpYnV0ZXMpOiBTbGljZUF0dHJpYnV0ZXMgPT4ge1xuICAgICAgaWYgKGlucHV0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0czogbnVtYmVyW10gPSByZWFkSW5wdXQoaW5wdXRzLCAxKTtcbiAgICAgICAgY29uc3QgZW5kczogbnVtYmVyW10gPSByZWFkSW5wdXQoaW5wdXRzLCAyKTtcbiAgICAgICAgbGV0IGF4ZXM6IG51bWJlcltdID0gcmVhZElucHV0KGlucHV0cywgMyk7XG4gICAgICAgIGlmIChheGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGF4ZXMgPSBbLi4uQXJyYXkoaW5wdXRzWzBdLmRpbXMubGVuZ3RoKS5rZXlzKCldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoe3N0YXJ0cywgZW5kcywgYXhlc30pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgICB9XG4gICAgfTtcblxuY29uc3QgZml4U3RhcnRFbmRWYWx1ZXMgPVxuICAgICh2YWx1ZTogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBpbnB1dFNoYXBlOiByZWFkb25seSBudW1iZXJbXSwgYXhlczogcmVhZG9ubHkgbnVtYmVyW10sIHN0ZXBzOiByZWFkb25seSBudW1iZXJbXSk6XG4gICAgICAgIG51bWJlciA9PiB7XG4gICAgICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgKz0gaW5wdXRTaGFwZVtheGVzW2luZGV4XV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGVwc1tpbmRleF0gPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3VmFsdWUsIGlucHV0U2hhcGVbYXhlc1tpbmRleF1dIC0gMSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3VmFsdWUsIGlucHV0U2hhcGVbYXhlc1tpbmRleF1dKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG5jb25zdCBjYWxjdWxhdGVJbnB1dEluZGljZXNJbXBsID1cbiAgICAoaW5wdXQ6IEluZGljZXNIZWxwZXIsIG91dHB1dDogSW5kaWNlc0hlbHBlciwgaW5wdXRTaGFwZTogcmVhZG9ubHkgbnVtYmVyW10pOiBzdHJpbmcgPT5cbiAgICAgICAgYGZuIGNhbGN1bGF0ZUlucHV0SW5kaWNlcyhvdXRwdXRfaW5kaWNlczogJHtvdXRwdXQudHlwZS5pbmRpY2VzfSkgLT4gJHtpbnB1dC50eXBlLmluZGljZXN9IHtcbiAgICAgICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgICAgIHZhciBjYXJyeSA9IDB1O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAke2lucHV0U2hhcGUubGVuZ3RofTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBpbnB1dF9zaGFwZV9pID0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLmlucHV0X3NoYXBlJywgJ2knLCBpbnB1dFNoYXBlLmxlbmd0aCl9O1xuICAgICAgICAgICAgbGV0IHN0ZXBzX2kgPSAke2dldEVsZW1lbnRBdCgndW5pZm9ybXMuc3RlcHMnLCAnaScsIGlucHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgICBsZXQgc2lnbnNfaSA9ICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5zaWducycsICdpJywgaW5wdXRTaGFwZS5sZW5ndGgpfTtcbiAgICAgICAgICAgIGxldCBzdGFydHNfaSA9ICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5zdGFydHMnLCAnaScsIGlucHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgICB2YXIgb3V0cHV0X2luZGV4ID0gJHtvdXRwdXQuaW5kaWNlc0dldCgnb3V0cHV0X2luZGljZXMnLCAnaScpfTtcbiAgICAgICAgICAgIHZhciBpbnB1dF9pbmRleCA9IG91dHB1dF9pbmRleCAqIHN0ZXBzX2kgKyBzdGFydHNfaSArIGNhcnJ5O1xuICAgICAgICAgICAgY2FycnkgPSBpbnB1dF9pbmRleCAvIGlucHV0X3NoYXBlX2k7XG4gICAgICAgICAgICBpbnB1dF9pbmRleCA9IGlucHV0X2luZGV4ICUgaW5wdXRfc2hhcGVfaTtcbiAgICAgICAgICAgIGlmIChzaWduc19pIDwgMCkge1xuICAgICAgICAgICAgICBpbnB1dF9pbmRleCA9IGlucHV0X3NoYXBlX2kgLSBpbnB1dF9pbmRleCAtIDF1ICsgc3RhcnRzX2k7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAke2lucHV0LmluZGljZXNTZXQoJ2lucHV0X2luZGljZXMnLCAnaScsICdpbnB1dF9pbmRleCcpfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGlucHV0X2luZGljZXM7XG4gICAgICB9YDtcblxuY29uc3QgY3JlYXRlU2xpY2VQcm9ncmFtSW5mbyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgYXR0cmlidXRlczogU2xpY2VBdHRyaWJ1dGVzKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG4gIGNvbnN0IGlucHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKGlucHV0U2hhcGUpO1xuICBjb25zdCBheGVzID0gKGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPiAwKSA/IFNoYXBlVXRpbC5ub3JtYWxpemVBeGVzKGF0dHJpYnV0ZXMuYXhlcywgaW5wdXRTaGFwZS5sZW5ndGgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLi4uQXJyYXkoaW5wdXRTaGFwZS5sZW5ndGgpLmtleXMoKV07XG4gIGxldCBzdGVwcyA9IHJlYWRJbnB1dChpbnB1dHMsIDQpO1xuICBzdGVwcy5mb3JFYWNoKChzdGVwKSA9PiBzdGVwICE9PSAwIHx8ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGVwIGNhbm5vdCBiZSAwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgaWYgKHN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0ZXBzID0gQXJyYXkoYXhlcy5sZW5ndGgpLmZpbGwoMSk7XG4gIH1cbiAgY29uc3Qgc3RhcnRzID0gYXR0cmlidXRlcy5zdGFydHMubWFwKChzdGFydCwgaSkgPT4gZml4U3RhcnRFbmRWYWx1ZXMoc3RhcnQsIGksIGlucHV0U2hhcGUsIGF4ZXMsIHN0ZXBzKSk7XG5cbiAgY29uc3QgZW5kcyA9IGF0dHJpYnV0ZXMuZW5kcy5tYXAoKGVuZCwgaSkgPT4gZml4U3RhcnRFbmRWYWx1ZXMoZW5kLCBpLCBpbnB1dFNoYXBlLCBheGVzLCBzdGVwcykpO1xuXG4gIGlmIChheGVzLmxlbmd0aCAhPT0gc3RhcnRzLmxlbmd0aCB8fCBheGVzLmxlbmd0aCAhPT0gZW5kcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0LCBlbmRzIGFuZCBheGVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cycpO1xuICB9XG5cbiAgaWYgKGF4ZXMubGVuZ3RoICE9PSBpbnB1dFNoYXBlLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTaGFwZS5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKCFheGVzLmluY2x1ZGVzKGkpKSB7XG4gICAgICAgIHN0YXJ0cy5zcGxpY2UoaSwgMCwgMCk7XG4gICAgICAgIGVuZHMuc3BsaWNlKGksIDAsIGlucHV0U2hhcGVbaV0pO1xuICAgICAgICBzdGVwcy5zcGxpY2UoaSwgMCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHNpZ25zID0gc3RlcHMubWFwKHN0ZXAgPT4gTWF0aC5zaWduKHN0ZXApKTtcbiAgLy8gQ29udmVydCBuZWdhdGl2ZSBzdGVwcyB0byBwb3NpdGl2ZSBzdGVwcyBhbmQgcmV2ZXJzZSBzdGFydHMgYW5kIGVuZHNcbiAgc3RlcHMuZm9yRWFjaCgoc3RlcCwgaSwgYXJyYXkpID0+IHtcbiAgICBpZiAoc3RlcCA8IDApIHtcbiAgICAgIGNvbnN0IG51bVN0ZXBzID0gKGVuZHNbaV0gLSBzdGFydHNbaV0pIC8gc3RlcDtcbiAgICAgIGNvbnN0IG5ld0VuZCA9IHN0YXJ0c1tpXTtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3RW5kICsgbnVtU3RlcHMgKiBzdGVwc1tpXTtcbiAgICAgIHN0YXJ0c1tpXSA9IG5ld1N0YXJ0O1xuICAgICAgZW5kc1tpXSA9IG5ld0VuZDtcbiAgICAgIGFycmF5W2ldID0gLXN0ZXA7XG4gICAgfVxuICB9KTtcbiAgLy8gT3V0cHV0IHJhbmsgaXMgZXhwZWN0ZWQgdG8gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBpbnB1dCByYW5rLlxuICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0U2hhcGUuc2xpY2UoMCk7XG4gIGF4ZXMuZm9yRWFjaCgoYXhpcywgXykgPT4ge1xuICAgIG91dHB1dFNoYXBlW2F4aXNdID0gTWF0aC5jZWlsKChlbmRzW2F4aXNdIC0gc3RhcnRzW2F4aXNdKSAvIHN0ZXBzW2F4aXNdKTtcbiAgfSk7XG4gIGNvbnN0IG91dHB1dFRlbnNvckluZm86IFRlbnNvckluZm8gPSB7ZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9O1xuXG4gIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKCdvdXRwdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZSgnaW5wdXQnLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG4gIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gIGNvbnN0IHVuaWZvcm1zOiBVbmlmb3Jtc0FycmF5VHlwZSA9IFtcbiAgICB7bmFtZTogJ291dHB1dFNpemUnLCB0eXBlOiAndTMyJ30sIHtuYW1lOiAnc3RhcnRzJywgdHlwZTogJ3UzMicsIGxlbmd0aDogc3RhcnRzLmxlbmd0aH0sXG4gICAge25hbWU6ICdzaWducycsIHR5cGU6ICdpMzInLCBsZW5ndGg6IHNpZ25zLmxlbmd0aH0sIHtuYW1lOiAnc3RlcHMnLCB0eXBlOiAndTMyJywgbGVuZ3RoOiBzdGVwcy5sZW5ndGh9XG4gIF07XG5cbiAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zOiBQcm9ncmFtVW5pZm9ybVtdID0gW1xuICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IG91dHB1dFNpemV9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBzdGFydHN9LFxuICAgIHt0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogc2lnbnN9LCB7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBzdGVwc30sXG4gICAgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzBdLmRpbXMsIG91dHB1dFNoYXBlKVxuICBdO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAgICAgJHtjYWxjdWxhdGVJbnB1dEluZGljZXNJbXBsKGlucHV0LCBvdXRwdXQsIGlucHV0U2hhcGUpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKCd1bmlmb3Jtcy5vdXRwdXRTaXplJyl9XG4gICAgICAgICAgbGV0IG91dHB1dF9pbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKCdnbG9iYWxfaWR4Jyl9O1xuICAgICAgICAgIGxldCBpbnB1dF9pbmRpY2VzID0gY2FsY3VsYXRlSW5wdXRJbmRpY2VzKG91dHB1dF9pbmRpY2VzKTtcbiAgICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIGlucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpKX1cbiAgICAgIH1gO1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdTbGljZScsXG4gICAgc2hhZGVyQ2FjaGU6IHtoaW50OiBgJHtzaWducy5sZW5ndGh9XyR7c3RhcnRzLmxlbmd0aH1fJHtzdGVwcy5sZW5ndGh9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuayddfSxcbiAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgIG91dHB1dHM6IFtvdXRwdXRUZW5zb3JJbmZvXSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwoaW5wdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgIH0pXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2xpY2UgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFNsaWNlQXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzID0gY3JlYXRlU2xpY2VBdHRyaWJ1dGVzRnJvbUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gIGNvbnRleHQuY29tcHV0ZShjcmVhdGVTbGljZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCB1cGRhdGVkQXR0cmlidXRlcyksIHtpbnB1dHM6IFswXX0pO1xuICAvLyBpZiAoU2hhcGVVdGlsLnNpemUocHJvZ3JhbS5vdXRwdXRzWzBdLmRpbXMpID4gMCkge1xuICAvLyAgIGNvbnRleHQuY29tcHV0ZShwcm9ncmFtSW5mb0xvYWRlciwge2lucHV0czogWzBdfSk7XG4gIC8vIH0gZWxzZSB7XG4gIC8vICAgLy8gVE9ETzogc3VwcG9ydCBlbXB0eSBvdXRwdXRcbiAgLy8gICB0aHJvdyBuZXcgRXJyb3IoJ3NsaWNlOiBvdXRwdXQgc2l6ZSBpcyAwJyk7XG4gIC8vIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVNsaWNlQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFNsaWNlQXR0cmlidXRlcyA9PiB7XG4gIGNvbnN0IHN0YXJ0cyA9IGF0dHJpYnV0ZXMuc3RhcnRzIGFzIG51bWJlcltdO1xuICBjb25zdCBlbmRzID0gYXR0cmlidXRlcy5lbmRzIGFzIG51bWJlcltdO1xuICBjb25zdCBheGVzID0gYXR0cmlidXRlcy5heGVzIGFzIG51bWJlcltdO1xuICByZXR1cm4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHtzdGFydHMsIGVuZHMsIGF4ZXN9KTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbi8vIFRPRE86IHRoaXMgaXMgdGhlIHNhbWUgbmFpdmUgaW1wbGVtZW50YXRpb24gd2UgdXNlIGZvciByZWR1Y2UgdGhhdCBoYXNcbi8vIHBlcmZvcm1hbmNlIGxpbWl0YXRpb25zIHdoZW4gdGhlIHJlZHVjZWQgYXhpcyBpcyBsb25nLiBOZWVkIHRvIGFkZFxuLy8gYSBvcHRpbWl6ZWQgY29kZXBhdGggZm9yIHRoaXMuXG5cbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uLy4uLy4uL3dhc20tY29tbW9uJztcbmltcG9ydCB7VGVuc29yVmlld30gZnJvbSAnLi4vLi4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtBdHRyaWJ1dGVXaXRoQ2FjaGVLZXksIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleX0gZnJvbSAnLi4vYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5JztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Z2V0TWF4Q29tcG9uZW50cywgaW5wdXRWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUsIFNoYWRlckhlbHBlciwgc3VtVmVjdG9yLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGV9IGZyb20gJy4vY29tbW9uJztcblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignU29mdG1heCBvcCByZXF1aXJlcyAxIGlucHV0LicpO1xuICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvZnRtYXhBdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgYXhpczogbnVtYmVyO1xufVxuXG5jb25zdCBjcmVhdGVTb2Z0bWF4UHJvZ3JhbUluZm8gPSAoaW5wdXQ6IFRlbnNvclZpZXcsIGF0dHJpYnV0ZXM6IFNvZnRtYXhBdHRyaWJ1dGVzKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBzaGFwZSA9IGlucHV0LmRpbXM7XG4gIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShzaGFwZSk7XG4gIGNvbnN0IFdHID0gNjQ7XG4gIGxldCBheGlzID0gYXR0cmlidXRlcy5heGlzO1xuICBpZiAoYXhpcyA8IDApIHtcbiAgICBheGlzID0gc2hhcGUubGVuZ3RoICsgYXhpcztcbiAgfVxuICBpZiAoYXhpcyA8IHNoYXBlLmxlbmd0aCAtIDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NvZnRtYXggb25seSBzdXBwb3J0cyBsYXN0IGF4aXMgZm9yIG5vdy4nKTtcbiAgfVxuXG4gIGNvbnN0IGNvbHMgPSBzaGFwZVtheGlzXTtcbiAgY29uc3Qgcm93cyA9IG91dHB1dFNpemUgLyBjb2xzO1xuICBjb25zdCBjb21wb25lbnRzID0gZ2V0TWF4Q29tcG9uZW50cyhjb2xzKTtcbiAgY29uc3QgcGFja2VkQ29scyA9IGNvbHMgLyBjb21wb25lbnRzO1xuXG4gIGNvbnN0IG1heFZlY3RvciA9IChuYW1lOiBzdHJpbmcsIGNvbXBvbmVudHM6IG51bWJlcikgPT4ge1xuICAgIGlmIChjb21wb25lbnRzID09PSA0KSB7XG4gICAgICByZXR1cm4gYG1heChtYXgoJHtuYW1lfS54LCAke25hbWV9LnkpLCBtYXgoJHtuYW1lfS56LCAke25hbWV9LncpKWA7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnRzID09PSAyKSB7XG4gICAgICByZXR1cm4gYG1heCgke25hbWV9LngsICR7bmFtZX0ueSlgO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50cyA9PT0gMykge1xuICAgICAgcmV0dXJuIGBtYXgobWF4KCR7bmFtZX0ueCwgJHtuYW1lfS55KSwgJHtuYW1lfS56KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWU7XG4gIH07XG4gIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKCd4JywgaW5wdXQuZGF0YVR5cGUsIGlucHV0LmRpbXMsIGNvbXBvbmVudHMpO1xuICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZSgncmVzdWx0JywgaW5wdXQuZGF0YVR5cGUsIGlucHV0LmRpbXMsIGNvbXBvbmVudHMpO1xuICBjb25zdCB2YWx1ZVR5cGUgPSB4LnR5cGUudmFsdWU7XG4gIC8vIDYuMi40IGluIHdnc2wgc3BlY1xuICBjb25zdCB0aHJlYWRNYXhEZWNsID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0LmRhdGFUeXBlKSA9PT0gJ2YzMicgP1xuICAgICAgYHZhciB0aHJlYWRNYXggPSAke3ZhbHVlVHlwZX0oLTMuNDAyODIzZSszOGYpO2AgOlxuICAgICAgYHZhciB0aHJlYWRNYXggPSAke3ZhbHVlVHlwZX0oLTY1NTA0LjBoKTtgO1xuICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IGBcbiAgICAgIHZhcjx3b3JrZ3JvdXA+IHJvd01heFNoYXJlZCA6ICR7dmFsdWVUeXBlfTtcbiAgICAgIHZhcjx3b3JrZ3JvdXA+IHJvd1N1bVNoYXJlZCA6ICR7dmFsdWVUeXBlfTtcbiAgICAgIHZhcjx3b3JrZ3JvdXA+IHRocmVhZFNoYXJlZCA6IGFycmF5PCR7dmFsdWVUeXBlfSwgJHtXR30+O1xuXG4gICAgICBmbiBnZXRWYWx1ZShyb3c6IGkzMiwgY29sOiBpMzIsIHJvd19zdHJpZGU6IGkzMikgLT4gJHt2YWx1ZVR5cGV9IHtcbiAgICAgICAgbGV0IGluZGV4ID0gcm93ICogcm93X3N0cmlkZSArIGNvbDtcbiAgICAgICAgcmV0dXJuIHhbaW5kZXhdO1xuICAgICAgfVxuXG4gICAgICBmbiBzZXRWYWx1ZShyb3c6IGkzMiwgY29sOiBpMzIsIHJvd19zdHJpZGU6IGkzMiwgdmFsdWU6ICR7dmFsdWVUeXBlfSkge1xuICAgICAgICBsZXQgaW5kZXggPSByb3cgKiByb3dfc3RyaWRlICsgY29sO1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ3BhY2tlZENvbHMnLCAnaTMyJykuZGVjbGFyZVZhcmlhYmxlcyh4LCBvdXRwdXQpfVxuICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgIGxldCBnaW5kZXggPSBpMzIoZ2xvYmFsX2lkeCk7XG4gICAgICAgIGxldCBsaW5kZXggPSBpMzIobG9jYWxfaWR4KTtcbiAgICAgICAgY29uc3Qgd2cgPSAke1dHfTtcbiAgICAgICAgbGV0IHJvdyA9IGdpbmRleCAvIHdnO1xuICAgICAgICBsZXQgY29scyA9IHVuaWZvcm1zLnBhY2tlZENvbHM7XG4gICAgICAgIGxldCByb3dfc3RyaWRlIDogaTMyID0gdW5pZm9ybXMucGFja2VkQ29scztcblxuICAgICAgICAvLyBmaW5kIHRoZSByb3dzIG1heFxuICAgICAgICAke3RocmVhZE1heERlY2x9XG4gICAgICAgIGZvciAodmFyIGNvbCA9IGxpbmRleDsgY29sIDwgY29sczsgY29sICs9IHdnKSB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gZ2V0VmFsdWUocm93LCBjb2wsIHJvd19zdHJpZGUpO1xuICAgICAgICAgIHRocmVhZE1heCA9IG1heCh0aHJlYWRNYXgsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGluZGV4IDwgY29scykge1xuICAgICAgICAgIHRocmVhZFNoYXJlZFtsaW5kZXhdID0gdGhyZWFkTWF4O1xuICAgICAgICB9XG4gICAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAgICAgICB2YXIgcmVkdWNlU2l6ZSA9IG1pbihjb2xzLCB3Zyk7XG4gICAgICAgIGZvciAodmFyIGN1cnJTaXplID0gcmVkdWNlU2l6ZSA+PiAxOyAgY3VyclNpemUgPiAwOyBjdXJyU2l6ZSA9IHJlZHVjZVNpemUgPj4gMSkge1xuICAgICAgICAgIHJlZHVjZVNpemUgPSBjdXJyU2l6ZSArIChyZWR1Y2VTaXplICYgMSk7XG4gICAgICAgICAgaWYgKGxpbmRleCA8IGN1cnJTaXplKSB7XG4gICAgICAgICAgICB0aHJlYWRTaGFyZWRbbGluZGV4XSA9IG1heCh0aHJlYWRTaGFyZWRbbGluZGV4XSwgdGhyZWFkU2hhcmVkW2xpbmRleCArIHJlZHVjZVNpemVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5kZXggPT0gMCkge1xuICAgICAgICAgIHJvd01heFNoYXJlZCA9ICR7dmFsdWVUeXBlfSgke21heFZlY3RvcigndGhyZWFkU2hhcmVkWzBdJywgY29tcG9uZW50cyl9KTtcbiAgICAgICAgfVxuICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAgICAgLy8gZmluZCB0aGUgcm93cyBzdW1cbiAgICAgICAgdmFyIHRocmVhZFN1bSA9ICR7dmFsdWVUeXBlfSgwLjApO1xuICAgICAgICBmb3IgKHZhciBjb2wgPSBsaW5kZXg7IGNvbCA8IGNvbHM7IGNvbCArPSB3Zykge1xuICAgICAgICAgIGxldCBzdWJFeHAgPSBleHAoZ2V0VmFsdWUocm93LCBjb2wsIHJvd19zdHJpZGUpIC0gcm93TWF4U2hhcmVkKTtcbiAgICAgICAgICB0aHJlYWRTdW0gKz0gc3ViRXhwO1xuICAgICAgICB9XG4gICAgICAgIHRocmVhZFNoYXJlZFtsaW5kZXhdID0gdGhyZWFkU3VtO1xuICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAgICAgZm9yICh2YXIgY3VyclNpemUgPSB3ZyA+PiAxOyAgY3VyclNpemUgPiAwOyBjdXJyU2l6ZSA9IGN1cnJTaXplID4+IDEpIHtcbiAgICAgICAgICBpZiAobGluZGV4IDwgY3VyclNpemUpIHtcbiAgICAgICAgICAgIHRocmVhZFNoYXJlZFtsaW5kZXhdID0gdGhyZWFkU2hhcmVkW2xpbmRleF0gKyB0aHJlYWRTaGFyZWRbbGluZGV4ICsgY3VyclNpemVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmRleCA9PSAwKSB7XG4gICAgICAgICAgcm93U3VtU2hhcmVkID0gJHt2YWx1ZVR5cGV9KCR7c3VtVmVjdG9yKCd0aHJlYWRTaGFyZWRbMF0nLCBjb21wb25lbnRzKX0pO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWUgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgcm93XG4gICAgICAgIGZvciAodmFyIGNvbCA9IGxpbmRleDsgY29sIDwgY29sczsgY29sICs9IHdnKSB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gZXhwKGdldFZhbHVlKHJvdywgY29sLCByb3dfc3RyaWRlKSAtIHJvd01heFNoYXJlZCkgLyByb3dTdW1TaGFyZWQ7XG4gICAgICAgICAgc2V0VmFsdWUocm93LCBjb2wsIHJvd19zdHJpZGUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfWA7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1NvZnRtYXgnLFxuICAgIHNoYWRlckNhY2hlOiB7aGludDogYCR7Y29tcG9uZW50c31gLCBpbnB1dERlcGVuZGVuY2llczogWyd0eXBlJ119LFxuICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICBvdXRwdXRzOiBbe2RpbXM6IHNoYXBlLCBkYXRhVHlwZTogaW5wdXQuZGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiByb3dzfSxcbiAgICAgIHByb2dyYW1Vbmlmb3JtczogW3t0eXBlOiBEYXRhVHlwZS5pbnQzMiwgZGF0YTogcGFja2VkQ29sc31dXG4gICAgfSksXG4gICAgZ2V0U2hhZGVyU291cmNlLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNvZnRtYXggPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFNvZnRtYXhBdHRyaWJ1dGVzKTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVNvZnRtYXhQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgYXR0cmlidXRlcykpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlU29mdG1heEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBTb2Z0bWF4QXR0cmlidXRlcyA9PlxuICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7YXhpczogYXR0cmlidXRlcy5heGlzIGFzIG51bWJlcn0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7QXR0cmlidXRlV2l0aENhY2hlS2V5LCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXl9IGZyb20gJy4uL2F0dHJpYnV0ZS13aXRoLWNhY2hlLWtleSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mbywgUHJvZ3JhbVVuaWZvcm0sIFRlbnNvckluZm99IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcywgZ2V0RWxlbWVudEF0LCBJbmRpY2VzSGVscGVyLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyfSBmcm9tICcuL2NvbW1vbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BsaXRBdHRyaWJ1dGVzIGV4dGVuZHMgQXR0cmlidXRlV2l0aENhY2hlS2V5IHtcbiAgcmVhZG9ubHkgYXhpczogbnVtYmVyO1xuICByZWFkb25seSBudW1PdXRwdXRzOiBudW1iZXI7XG4gIHJlYWRvbmx5IHNwbGl0U2l6ZXM6IG51bWJlcltdO1xufVxuXG5jb25zdCB2YWxpZGF0ZUlucHV0cyA9IChpbnB1dHM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSk6IHZvaWQgPT4ge1xuICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9vIGZldyBpbnB1dHMnKTtcbiAgfVxufTtcblxuY29uc3QgY3JlYXRlU3BsaXRBdHRyaWJ1dGVzRnJvbUlucHV0cyA9XG4gICAgKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBTcGxpdEF0dHJpYnV0ZXMpOiBTcGxpdEF0dHJpYnV0ZXMgPT4ge1xuICAgICAgY29uc3Qgc3BsaXRTaXplczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGxldCBudW1PdXRwdXRzOiBudW1iZXIgPSBhdHRyaWJ1dGVzLm51bU91dHB1dHM7XG4gICAgICBpZiAoaW5wdXRzWzFdLmRpbXNbMF0gPiAwKSB7XG4gICAgICAgIGlucHV0c1sxXS5nZXRCaWdJbnQ2NEFycmF5KCkuZm9yRWFjaCh2ID0+IHNwbGl0U2l6ZXMucHVzaChOdW1iZXIodikpKTtcbiAgICAgICAgbnVtT3V0cHV0cyA9IHNwbGl0U2l6ZXMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7bnVtT3V0cHV0cywgYXhpczogYXR0cmlidXRlcy5heGlzLCBzcGxpdFNpemVzfSk7XG4gICAgfTtcblxuY29uc3QgY2FsY3VsYXRlT3V0cHV0SW5kZXhJbXBsID0gKG51bWJlck9mVGVuc29yczogbnVtYmVyKTogc3RyaW5nID0+IGBcbmZuIGNhbGN1bGF0ZU91dHB1dEluZGV4KGluZGV4OiB1MzIpIC0+IHUzMiB7XG4gICAgZm9yICh2YXIgaTogdTMyID0gMHU7IGkgPCAke251bWJlck9mVGVuc29yc311OyBpICs9IDF1ICkge1xuICAgIGlmIChpbmRleCA8ICR7Z2V0RWxlbWVudEF0KCd1bmlmb3Jtcy5zaXplX2luX3NwbGl0X2F4aXMnLCAnaScsIG51bWJlck9mVGVuc29ycyl9KSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICR7bnVtYmVyT2ZUZW5zb3JzfXU7XG59YDtcbmNvbnN0IHdyaXRlQnVmZmVyRGF0YUltcGwgPSAob3V0cHV0czogcmVhZG9ubHkgSW5kaWNlc0hlbHBlcltdKSA9PiB7XG4gIGNvbnN0IG51bWJlck9mVGVuc29ycyA9IG91dHB1dHMubGVuZ3RoO1xuICBjb25zdCBjb2RlTGluZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW5zb3JzOyArK2kpIHtcbiAgICBjb25zdCByZXR1cm5TbmlwcGV0ID0gb3V0cHV0c1tpXS5zZXRCeUluZGljZXMoJ2luZGljZXMnLCAnaW5wdXRbZ2xvYmFsX2lkeF0nKTtcbiAgICBpZiAobnVtYmVyT2ZUZW5zb3JzID09PSAxKSB7XG4gICAgICBjb2RlTGluZXMucHVzaChyZXR1cm5TbmlwcGV0KTtcbiAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcbiAgICAgIGNvZGVMaW5lcy5wdXNoKGBpZiAob3V0cHV0X251bWJlciA9PSAke2l9dSkgeyAke3JldHVyblNuaXBwZXR9IH1gKTtcbiAgICB9IGVsc2UgaWYgKGkgPT09IG51bWJlck9mVGVuc29ycyAtIDEpIHtcbiAgICAgIGNvZGVMaW5lcy5wdXNoKGBlbHNlIHsgJHtyZXR1cm5TbmlwcGV0fSB9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGVMaW5lcy5wdXNoKGBlbHNlIGlmIChvdXRwdXRfbnVtYmVyID09ICR7aX0pIHsgJHtyZXR1cm5TbmlwcGV0fSB9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBgXG4gICAgICBmbiB3cml0ZUJ1ZmZlckRhdGEob3V0cHV0X251bWJlcjogdTMyLCBpbmRpY2VzOiAke291dHB1dHNbMF0udHlwZS5pbmRpY2VzfSwgZ2xvYmFsX2lkeDogdTMyKSB7XG4gICAgICAgICR7Y29kZUxpbmVzLmpvaW4oJ1xcbicpfVxuICAgICAgfWA7XG59O1xuXG5jb25zdCBjcmVhdGVTcGxpdFByb2dyYW1JbmZvID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBhdHRyaWJ1dGVzOiBTcGxpdEF0dHJpYnV0ZXMpOiBQcm9ncmFtSW5mbyA9PiB7XG4gIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgY29uc3QgaW5wdXRTaXplID0gU2hhcGVVdGlsLnNpemUoaW5wdXRTaGFwZSk7XG4gIGNvbnN0IGRhdGFUeXBlID0gaW5wdXRzWzBdLmRhdGFUeXBlO1xuICBjb25zdCBheGlzID0gU2hhcGVVdGlsLm5vcm1hbGl6ZUF4aXMoYXR0cmlidXRlcy5heGlzLCBpbnB1dFNoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IG91dHB1dHMgPSBuZXcgQXJyYXk8SW5kaWNlc0hlbHBlcj4oYXR0cmlidXRlcy5udW1PdXRwdXRzKTtcbiAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKCdpbnB1dCcsIGRhdGFUeXBlLCBpbnB1dFNoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IHNpemVJblNwbGl0QXhpcyA9IG5ldyBBcnJheTxudW1iZXI+KGF0dHJpYnV0ZXMubnVtT3V0cHV0cyk7XG4gIGNvbnN0IG91dHB1dHNUZW5zb3JJbmZvOiBUZW5zb3JJbmZvW10gPSBbXTtcbiAgY29uc3Qgb3V0cHV0U2hhcGVzOiBudW1iZXJbXVtdID0gW107XG4gIGxldCBwcmV2aW91c1N1bSA9IDA7XG4gIGNvbnN0IHByb2dyYW1Vbmlmb3JtczogUHJvZ3JhbVVuaWZvcm1bXSA9IFt7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiBpbnB1dFNpemV9XTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLm51bU91dHB1dHM7IGkrKykge1xuICAgIHByZXZpb3VzU3VtICs9IGF0dHJpYnV0ZXMuc3BsaXRTaXplc1tpXTtcbiAgICBzaXplSW5TcGxpdEF4aXNbaV0gPSBwcmV2aW91c1N1bTtcbiAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0U2hhcGUuc2xpY2UoKTtcbiAgICBvdXRwdXRTaGFwZVthdHRyaWJ1dGVzLmF4aXNdID0gYXR0cmlidXRlcy5zcGxpdFNpemVzW2ldO1xuICAgIG91dHB1dFNoYXBlcy5wdXNoKG91dHB1dFNoYXBlKTtcbiAgICBvdXRwdXRzW2ldID0gb3V0cHV0VmFyaWFibGUoYG91dHB1dCR7aX1gLCBkYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICBvdXRwdXRzVGVuc29ySW5mby5wdXNoKHtkaW1zOiBvdXRwdXRTaGFwZXNbaV0sIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGV9KTtcbiAgfVxuICBwcm9ncmFtVW5pZm9ybXMucHVzaChcbiAgICAgIHt0eXBlOiBEYXRhVHlwZS51aW50MzIsIGRhdGE6IHNpemVJblNwbGl0QXhpc30sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIC4uLm91dHB1dFNoYXBlcykpO1xuICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIpID0+IGBcbiAgJHtcbiAgICAgIHNoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ2lucHV0X3NpemUnLCAndTMyJylcbiAgICAgICAgICAucmVnaXN0ZXJVbmlmb3JtKCdzaXplX2luX3NwbGl0X2F4aXMnLCAndTMyJywgc2l6ZUluU3BsaXRBeGlzLmxlbmd0aClcbiAgICAgICAgICAuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgLi4ub3V0cHV0cyl9XG4gICR7Y2FsY3VsYXRlT3V0cHV0SW5kZXhJbXBsKHNpemVJblNwbGl0QXhpcy5sZW5ndGgpfVxuICAke3dyaXRlQnVmZmVyRGF0YUltcGwob3V0cHV0cyl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMuaW5wdXRfc2l6ZScpfVxuXG4gICAgdmFyIGluZGljZXMgPSAke2lucHV0Lm9mZnNldFRvSW5kaWNlcygnZ2xvYmFsX2lkeCcpfTtcbiAgICB2YXIgaW5kZXggPSAke2lucHV0LmluZGljZXNHZXQoJ2luZGljZXMnLCBheGlzKX07XG4gICAgbGV0IG91dHB1dF9udW1iZXIgPSBjYWxjdWxhdGVPdXRwdXRJbmRleChpbmRleCk7XG4gICAgaWYgKG91dHB1dF9udW1iZXIgIT0gMCkge1xuICAgICAgaW5kZXggLT0gJHtnZXRFbGVtZW50QXQoJ3VuaWZvcm1zLnNpemVfaW5fc3BsaXRfYXhpcycsICdvdXRwdXRfbnVtYmVyIC0gMXUnLCBzaXplSW5TcGxpdEF4aXMubGVuZ3RoKX07XG4gICAgICAke2lucHV0LmluZGljZXNTZXQoJ2luZGljZXMnLCBheGlzLCAnaW5kZXgnKX07XG4gICAgfVxuICAgIHdyaXRlQnVmZmVyRGF0YShvdXRwdXRfbnVtYmVyLCBpbmRpY2VzLCBnbG9iYWxfaWR4KTtcbiAgfWA7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1NwbGl0JyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGF0dHJpYnV0ZXMuY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnXX0sXG4gICAgZ2V0U2hhZGVyU291cmNlLFxuICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICBvdXRwdXRzOiBvdXRwdXRzVGVuc29ySW5mbyxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwoaW5wdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgIH0pXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc3BsaXQgPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZXM6IFNwbGl0QXR0cmlidXRlcyk6IHZvaWQgPT4ge1xuICB2YWxpZGF0ZUlucHV0cyhjb250ZXh0LmlucHV0cyk7XG4gIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzID1cbiAgICAgIGNvbnRleHQuaW5wdXRzLmxlbmd0aCA9PT0gMSA/IGF0dHJpYnV0ZXMgOiBjcmVhdGVTcGxpdEF0dHJpYnV0ZXNGcm9tSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVNwbGl0UHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMsIHVwZGF0ZWRBdHRyaWJ1dGVzKSwge2lucHV0czogWzBdfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VTcGxpdEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBTcGxpdEF0dHJpYnV0ZXMgPT4ge1xuICBjb25zdCBheGlzID0gYXR0cmlidXRlcy5heGlzIGFzIG51bWJlcjtcbiAgY29uc3Qgc3BsaXRTaXplczogbnVtYmVyW10gPSBhdHRyaWJ1dGVzLnNwbGl0U2l6ZXMgYXMgbnVtYmVyW107XG4gIGNvbnN0IG51bU91dHB1dHMgPSBhdHRyaWJ1dGVzLm51bU91dHB1dHMgYXMgbnVtYmVyIDwgMCA/IHNwbGl0U2l6ZXMubGVuZ3RoIDogYXR0cmlidXRlcy5udW1PdXRwdXRzIGFzIG51bWJlcjtcbiAgaWYgKG51bU91dHB1dHMgIT09IHNwbGl0U2l6ZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdudW1PdXRwdXRzIGFuZCBzcGxpdFNpemVzIGxlbmdoIG11c3QgYmUgZXF1YWwnKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHtheGlzLCBudW1PdXRwdXRzLCBzcGxpdFNpemVzfSk7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi8uLi8uLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4uLy4uL3RlbnNvci12aWV3JztcbmltcG9ydCB7U2hhcGVVdGlsfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Q29tcHV0ZUNvbnRleHQsIFByb2dyYW1JbmZvfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMsIGlucHV0VmFyaWFibGUsIG91dHB1dFZhcmlhYmxlLCBTaGFkZXJIZWxwZXJ9IGZyb20gJy4vY29tbW9uJztcblxuY29uc3QgZ2V0UmVwZWF0cyA9IChyZXBlYXRzVGVuc29yVmlldzogVGVuc29yVmlldyk6IHJlYWRvbmx5IG51bWJlcltdID0+XG4gICAgQXJyYXkuZnJvbShyZXBlYXRzVGVuc29yVmlldy5nZXRCaWdJbnQ2NEFycmF5KCksIE51bWJlcik7XG5cblxuY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzOiByZWFkb25seSBUZW5zb3JWaWV3W10pOiB2b2lkID0+IHtcbiAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGlsZSByZXF1aXJlcyAyIGlucHV0cy4nKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMF0uZGF0YVR5cGUgIT09IERhdGFUeXBlLmZsb2F0ICYmIGlucHV0c1swXS5kYXRhVHlwZSAhPT0gRGF0YVR5cGUuaW50MzIgJiZcbiAgICAgIGlucHV0c1swXS5kYXRhVHlwZSAhPT0gRGF0YVR5cGUudWludDMyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaWxlIG9ubHkgc3VwcG9ydCBmbG9hdCwgaW50MzIsIGFuZCB1aW50MzIgZGF0YSB0eXBlcycpO1xuICB9XG5cbiAgaWYgKGlucHV0c1sxXS5kYXRhVHlwZSAhPT0gRGF0YVR5cGUuaW50NjQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbGUgYHJlcGVhdHNgIGlucHV0IHNob3VsZCBiZSBvZiBpbnQ2NCBkYXRhIHR5cGUnKTtcbiAgfVxuXG4gIGlmIChpbnB1dHNbMV0uZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbGUgYHJlcGVhdHNgIGlucHV0IHNob3VsZCBiZSAxLUQnKTtcbiAgfVxuXG4gIGNvbnN0IHJlcGVhdHM6IHJlYWRvbmx5IG51bWJlcltdID0gZ2V0UmVwZWF0cyhpbnB1dHNbMV0pO1xuXG4gIGlmIChyZXBlYXRzLmxlbmd0aCAhPT0gaW5wdXRzWzBdLmRpbXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaWxlIGByZXBlYXRzYCBpbnB1dCBzaG91bGQgaGF2ZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cyBhcyByYW5rIG9mIGlucHV0IGRhdGEgdGVuc29yJyk7XG4gIH1cbn07XG5cbmNvbnN0IGdldE91dHB1dFNoYXBlID0gKGlucHV0U2hhcGU6IHJlYWRvbmx5IG51bWJlcltdLCByZXBlYXRzOiByZWFkb25seSBudW1iZXJbXSk6IHJlYWRvbmx5IG51bWJlcltdID0+IHtcbiAgY29uc3Qgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgb3V0cHV0U2hhcGUucHVzaChpbnB1dFNoYXBlW2ldICogcmVwZWF0c1tpXSk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0U2hhcGU7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGlsZVByb2dyYW1JbmZvID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG4gIGNvbnN0IHJlcGVhdHM6IHJlYWRvbmx5IG51bWJlcltdID0gZ2V0UmVwZWF0cyhpbnB1dHNbMV0pO1xuICBjb25zdCBvdXRwdXRTaGFwZSA9IGdldE91dHB1dFNoYXBlKGlucHV0U2hhcGUsIHJlcGVhdHMpO1xuICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuXG4gIGNvbnN0IGRhdGFUeXBlID0gaW5wdXRzWzBdLmRhdGFUeXBlO1xuICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoJ2lucHV0JywgZGF0YVR5cGUsIGlucHV0U2hhcGUubGVuZ3RoKTtcbiAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dCcsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgpO1xuXG4gIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXI6IFNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgY29uc3QgaW5wdXRTaGFwZSA9ICR7aW5wdXQuaW5kaWNlcyguLi5pbnB1dFNoYXBlKX07XG4gICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oJ291dHB1dF9zaXplJywgJ3UzMicpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIG91dHB1dCl9XG4gICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoJ3VuaWZvcm1zLm91dHB1dF9zaXplJyl9XG4gICAgICBsZXQgb3V0cHV0X2luZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoJ2dsb2JhbF9pZHgnKX07XG4gICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAke2lucHV0U2hhcGUubGVuZ3RofTsgaSsrKSB7XG4gICAgICAgIGxldCBpbnB1dF9kaW1faSA9ICR7aW5wdXQuaW5kaWNlc0dldCgndW5pZm9ybXMuaW5wdXRfc2hhcGUnLCAnaScpfTtcbiAgICAgICAgbGV0IGlucHV0X2RpbV92YWx1ZSA9ICR7b3V0cHV0LmluZGljZXNHZXQoJ291dHB1dF9pbmRpY2VzJywgJ2knKX0gICUgaW5wdXRfZGltX2k7XG5cbiAgICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KCdpbnB1dF9pbmRpY2VzJywgJ2knLCAnaW5wdXRfZGltX3ZhbHVlJyl9XG4gICAgICB9XG4gICAgICAke291dHB1dC5zZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcsIGlucHV0LmdldEJ5SW5kaWNlcygnaW5wdXRfaW5kaWNlcycpKX1cbiAgICB9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdUaWxlJyxcbiAgICBzaGFkZXJDYWNoZToge2hpbnQ6IGAke3JlcGVhdHN9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFsncmFuayddfSxcbiAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgb3V0cHV0czogW3tkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZX1dLFxuICAgICAgZGlzcGF0Y2hHcm91cDoge3g6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gNjQgLyogd29ya2dyb3VwIHNpemUgKi8pfSxcbiAgICAgIHByb2dyYW1Vbmlmb3JtczpcbiAgICAgICAgICBbe3R5cGU6IERhdGFUeXBlLnVpbnQzMiwgZGF0YTogb3V0cHV0U2l6ZX0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBvdXRwdXRTaGFwZSldLFxuICAgIH0pLFxuICAgIGdldFNoYWRlclNvdXJjZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB0aWxlID0gKGNvbnRleHQ6IENvbXB1dGVDb250ZXh0KTogdm9pZCA9PiB7XG4gIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVRpbGVQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cyksIHtpbnB1dHM6IFswXX0pO1xufTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vLi4vLi4vd2FzbS1jb21tb24nO1xuaW1wb3J0IHtUZW5zb3JWaWV3fSBmcm9tICcuLi8uLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge0Jyb2FkY2FzdFV0aWwsIFNoYXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0LCBQcm9ncmFtSW5mb30gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgU2hhZGVySGVscGVyfSBmcm9tICcuL2NvbW1vbic7XG5cbmNvbnN0IGNyZWF0ZVdoZXJlT3BQcm9ncmFtU2hhZGVyID1cbiAgICAoc2hhZGVySGVscGVyOiBTaGFkZXJIZWxwZXIsIGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdLCBkaW1zT3V0cHV0OiByZWFkb25seSBudW1iZXJbXSwgaXNCcm9hZGNhc3Q6IGJvb2xlYW4sXG4gICAgIHR5cGVPdXRwdXQ6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoJ291dHB1dF9kYXRhJywgdHlwZU91dHB1dCwgZGltc091dHB1dC5sZW5ndGgsIDQpO1xuICAgICAgY29uc3QgYSA9IGlucHV0VmFyaWFibGUoJ2FfZGF0YScsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoLCA0KTtcbiAgICAgIGNvbnN0IGIgPSBpbnB1dFZhcmlhYmxlKCdiX2RhdGEnLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCwgNCk7XG4gICAgICBjb25zdCBjID0gaW5wdXRWYXJpYWJsZSgnY19kYXRhJywgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcy5sZW5ndGgsIDQpO1xuXG4gICAgICBsZXQgYXNzaWdubWVudDogc3RyaW5nO1xuICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IChhOiBzdHJpbmcsIGI6IHN0cmluZywgYzogc3RyaW5nKSA9PiBgc2VsZWN0KCR7Yn0sICR7YX0sICR7Y30pYDtcbiAgICAgIGlmICghaXNCcm9hZGNhc3QpIHtcbiAgICAgICAgYXNzaWdubWVudCA9IG91dHB1dC5zZXRCeU9mZnNldChcbiAgICAgICAgICAgICdnbG9iYWxfaWR4JyxcbiAgICAgICAgICAgIGV4cHJlc3Npb24oYS5nZXRCeU9mZnNldCgnZ2xvYmFsX2lkeCcpLCBiLmdldEJ5T2Zmc2V0KCdnbG9iYWxfaWR4JyksIGMuZ2V0QnlPZmZzZXQoJ2dsb2JhbF9pZHgnKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2luZ2xlQXNzaWdubWVudCA9IChyZXNTdHI6IHN0cmluZywgeDogbnVtYmVyLCB0eXBlQ2FzdCA9ICcnKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhwcmVzc2lvbkEgPSBgYV9kYXRhW2luZGV4X2Eke3h9XVtjb21wb25lbnRfYSR7eH1dYDtcbiAgICAgICAgICBjb25zdCBleHByZXNzaW9uQiA9IGBiX2RhdGFbaW5kZXhfYiR7eH1dW2NvbXBvbmVudF9iJHt4fV1gO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAgY29uc3QgZXhwcmVzc2lvbkMgPSBgYm9vbChjX2RhdGFbaW5kZXhfYyR7eH1dICYgKDB4ZmZ1IDw8IChjb21wb25lbnRfYyR7eH0gKiA4KSkpYDtcbiAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgbGV0IG91dHB1dF9pbmRpY2VzJHt4fSA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcyhgZ2xvYmFsX2lkeCAqIDR1ICsgJHt4fXVgKX07XG4gICAgICAgICAgICBsZXQgb2Zmc2V0X2Eke3h9ID0gJHthLmJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0KGBvdXRwdXRfaW5kaWNlcyR7eH1gLCBvdXRwdXQpfTtcbiAgICAgICAgICAgIGxldCBvZmZzZXRfYiR7eH0gPSAke2IuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoYG91dHB1dF9pbmRpY2VzJHt4fWAsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldF9jJHt4fSA9ICR7Yy5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldChgb3V0cHV0X2luZGljZXMke3h9YCwgb3V0cHV0KX07XG4gICAgICAgICAgICBsZXQgaW5kZXhfYSR7eH0gPSBvZmZzZXRfYSR7eH0gLyA0dTtcbiAgICAgICAgICAgIGxldCBpbmRleF9iJHt4fSA9IG9mZnNldF9iJHt4fSAvIDR1O1xuICAgICAgICAgICAgbGV0IGluZGV4X2Mke3h9ID0gb2Zmc2V0X2Mke3h9IC8gNHU7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50X2Eke3h9ID0gb2Zmc2V0X2Eke3h9ICUgNHU7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50X2Ike3h9ID0gb2Zmc2V0X2Ike3h9ICUgNHU7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50X2Mke3h9ID0gb2Zmc2V0X2Mke3h9ICUgNHU7XG4gICAgICAgICAgICAke3Jlc1N0cn1bJHt4fV0gPSAke3R5cGVDYXN0fSgke2V4cHJlc3Npb24oZXhwcmVzc2lvbkEsIGV4cHJlc3Npb25CLCBleHByZXNzaW9uQyl9KTtcbiAgICAgICAgICBgO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZU91dHB1dCA9PT0gRGF0YVR5cGUuYm9vbCkge1xuICAgICAgICAgIGFzc2lnbm1lbnQgPSBgXG4gICAgICAgICAgICB2YXIgZGF0YSA9IHZlYzQ8dTMyPigwKTtcbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnZGF0YScsIDAsICd1MzInKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnZGF0YScsIDEsICd1MzInKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnZGF0YScsIDIsICd1MzInKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnZGF0YScsIDMsICd1MzInKX1cbiAgICAgICAgICAgIG91dHB1dF9kYXRhW2dsb2JhbF9pZHhdID0gZG90KHZlYzQ8dTMyPigweDEsIDB4MTAwLCAweDEwMDAwLCAweDEwMDAwMDApLCB2ZWM0PHUzMj4oZGF0YSkpO2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzaWdubWVudCA9IGBcbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnb3V0cHV0X2RhdGFbZ2xvYmFsX2lkeF0nLCAwKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnb3V0cHV0X2RhdGFbZ2xvYmFsX2lkeF0nLCAxKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnb3V0cHV0X2RhdGFbZ2xvYmFsX2lkeF0nLCAyKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudCgnb3V0cHV0X2RhdGFbZ2xvYmFsX2lkeF0nLCAzKX1cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgXG4gICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybSgndmVjX3NpemUnLCAndTMyJykuZGVjbGFyZVZhcmlhYmxlcyhjLCBhLCBiLCBvdXRwdXQpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcygndW5pZm9ybXMudmVjX3NpemUnKX1cbiAgICAgICAgJHthc3NpZ25tZW50fVxuICAgICAgfWA7XG4gICAgfTtcblxuY29uc3QgY3JlYXRlV2hlcmVPcFByb2dyYW1JbmZvID0gKGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdKTogUHJvZ3JhbUluZm8gPT4ge1xuICBjb25zdCBkaW1zQSA9IGlucHV0c1sxXS5kaW1zO1xuICBjb25zdCBkaW1zQiA9IGlucHV0c1syXS5kaW1zO1xuICBjb25zdCBkaW1zQyA9IGlucHV0c1swXS5kaW1zO1xuICBjb25zdCBvdXRwdXREYXRhVHlwZSA9IGlucHV0c1sxXS5kYXRhVHlwZTtcblxuICBjb25zdCBpc0Jyb2FkY2FzdCA9ICEoU2hhcGVVdGlsLmFyZUVxdWFsKGRpbXNBLCBkaW1zQikgJiYgU2hhcGVVdGlsLmFyZUVxdWFsKGRpbXNCLCBkaW1zQykpO1xuICBsZXQgb3V0cHV0U2hhcGUgPSBkaW1zQTtcbiAgbGV0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShkaW1zQSk7XG4gIC8vIFRPRE86IGRlYWwgd2l0aCB6ZXJvLXNpemVkIHRlbnNvcnMgKGVnLiBkaW1zPVsxLDBdKVxuXG4gIGlmIChpc0Jyb2FkY2FzdCkge1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRTaGFwZSA9IEJyb2FkY2FzdFV0aWwuY2FsY1NoYXBlKEJyb2FkY2FzdFV0aWwuY2FsY1NoYXBlKGRpbXNBLCBkaW1zQiwgZmFsc2UpISwgZGltc0MsIGZhbHNlKTtcbiAgICBpZiAoIWNhbGN1bGF0ZWRTaGFwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IHBlcmZvcm0gd2hlcmUgb3Agb24gdGhlIGdpdmVuIHRlbnNvcnMnKTtcbiAgICB9XG4gICAgb3V0cHV0U2hhcGUgPSBjYWxjdWxhdGVkU2hhcGU7XG4gICAgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgfVxuXG4gIGNvbnN0IHZlY1NpemUgPSBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDQpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ1doZXJlJyxcbiAgICBzaGFkZXJDYWNoZToge2lucHV0RGVwZW5kZW5jaWVzOiBbJ3JhbmsnLCAncmFuaycsICdyYW5rJ119LFxuICAgIGdldFNoYWRlclNvdXJjZTogKHNoYWRlckhlbHBlcikgPT5cbiAgICAgICAgY3JlYXRlV2hlcmVPcFByb2dyYW1TaGFkZXIoc2hhZGVySGVscGVyLCBpbnB1dHMsIG91dHB1dFNoYXBlLCBpc0Jyb2FkY2FzdCwgb3V0cHV0RGF0YVR5cGUpLFxuICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICBvdXRwdXRzOiBbe2RpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogb3V0cHV0RGF0YVR5cGV9XSxcbiAgICAgIGRpc3BhdGNoR3JvdXA6IHt4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDY0IC8qIHdvcmtncm91cCBzaXplICovIC8gNCAvKiB2ZWMgc2l6ZSAqLyl9LFxuICAgICAgcHJvZ3JhbVVuaWZvcm1zOlxuICAgICAgICAgIFt7dHlwZTogRGF0YVR5cGUudWludDMyLCBkYXRhOiB2ZWNTaXplfSwgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoZGltc0MsIGRpbXNBLCBkaW1zQiwgb3V0cHV0U2hhcGUpXSxcbiAgICB9KSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB3aGVyZSA9IChjb250ZXh0OiBDb21wdXRlQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlV2hlcmVPcFByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzKSk7XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2FyZ01heCwgYXJnTWluLCBwYXJzZUFyZ01pbk1heEF0dHJpYnV0ZXN9IGZyb20gJy4vb3BzL2FyZ21pbm1heCc7XG5pbXBvcnQge2F0dGVudGlvbn0gZnJvbSAnLi9vcHMvYXR0ZW50aW9uJztcbmltcG9ydCB7YmF0Y2hOb3JtfSBmcm9tICcuL29wcy9iYXRjaC1ub3JtJztcbmltcG9ydCB7Ymlhc0FkZH0gZnJvbSAnLi9vcHMvYmlhcy1hZGQnO1xuaW1wb3J0IHtiaWFzU3BsaXRHZWx1fSBmcm9tICcuL29wcy9iaWFzLXNwbGl0LWdlbHUnO1xuaW1wb3J0ICogYXMgYmluYXJ5T3BzIGZyb20gJy4vb3BzL2JpbmFyeS1vcCc7XG5pbXBvcnQge2NvbmNhdCwgcGFyc2VDb25jYXRBdHRyaWJ1dGVzfSBmcm9tICcuL29wcy9jb25jYXQnO1xuaW1wb3J0IHtjb252LCBwYXJzZUNvbnZBdHRyaWJ1dGVzfSBmcm9tICcuL29wcy9jb252JztcbmltcG9ydCB7Y29udlRyYW5zcG9zZSwgcGFyc2VDb252VHJhbnNwb3NlQXR0cmlidXRlc30gZnJvbSAnLi9vcHMvY29udi10cmFuc3Bvc2UnO1xuaW1wb3J0IHtjdW1zdW0sIHBhcnNlQ3VtU3VtQXR0cmlidXRlc30gZnJvbSAnLi9vcHMvY3Vtc3VtJztcbmltcG9ydCB7ZGVwdGhUb1NwYWNlLCBwYXJzZURlcHRoVG9TcGFjZUF0dHJpYnV0ZXN9IGZyb20gJy4vb3BzL2RlcHRoLXRvLXNwYWNlJztcbmltcG9ydCB7ZWluc3VtLCBwYXJzZUVpbnN1bUF0dHJpYnV0ZXN9IGZyb20gJy4vb3BzL2VpbnN1bSc7XG5pbXBvcnQge2V4cGFuZH0gZnJvbSAnLi9vcHMvZXhwYW5kJztcbmltcG9ydCB7ZmFzdEdlbHV9IGZyb20gJy4vb3BzL2Zhc3QtZ2VsdSc7XG5pbXBvcnQge2dhdGhlciwgcGFyc2VHYXRoZXJBdHRyaWJ1dGVzfSBmcm9tICcuL29wcy9nYXRoZXInO1xuaW1wb3J0IHtnYXRoZXJFbGVtZW50cywgcGFyc2VHYXRoZXJFbGVtZW50c0F0dHJpYnV0ZXN9IGZyb20gJy4vb3BzL2dhdGhlci1lbGVtZW50cyc7XG5pbXBvcnQge2dlbW0sIHBhcnNlR2VtbUF0dHJpYnV0ZXN9IGZyb20gJy4vb3BzL2dlbW0nO1xuaW1wb3J0IHtpbnN0YW5jZU5vcm19IGZyb20gJy4vb3BzL2luc3RhbmNlLW5vcm0nO1xuaW1wb3J0IHtsYXllck5vcm19IGZyb20gJy4vb3BzL2xheWVyLW5vcm0nO1xuaW1wb3J0IHttYXRNdWx9IGZyb20gJy4vb3BzL21hdG11bCc7XG5pbXBvcnQge21hdE11bE5CaXRzLCBwYXJzZU1hdE11bE5CaXRzQXR0cmlidXRlc30gZnJvbSAnLi9vcHMvbWF0bXVsbmJpdHMnO1xuaW1wb3J0IHttdWx0aUhlYWRBdHRlbnRpb24sIHBhcnNlTXVsdGlIZWFkQXR0ZW50aW9uQXR0cmlidXRlc30gZnJvbSAnLi9vcHMvbXVsdGloZWFkLWF0dGVudGlpb24nO1xuaW1wb3J0IHtwYWR9IGZyb20gJy4vb3BzL3BhZCc7XG5pbXBvcnQgKiBhcyBwb29sIGZyb20gJy4vb3BzL3Bvb2wnO1xuaW1wb3J0IHtyYW5nZX0gZnJvbSAnLi9vcHMvcmFuZ2UnO1xuaW1wb3J0IHtyZWR1Y2VMMSwgcmVkdWNlTDIsIHJlZHVjZUxvZ1N1bSwgcmVkdWNlTG9nU3VtRXhwLCByZWR1Y2VNYXgsIHJlZHVjZU1lYW4sIHJlZHVjZU1pbiwgcmVkdWNlUHJvZCwgcmVkdWNlU3VtLCByZWR1Y2VTdW1TcXVhcmV9IGZyb20gJy4vb3BzL3JlZHVjZSc7XG5pbXBvcnQge3BhcnNlUmVzaXplQXR0cmlidXRlcywgcmVzaXplfSBmcm9tICcuL29wcy9yZXNpemUnO1xuaW1wb3J0IHtyb3RhcnlFbWJlZGRpbmd9IGZyb20gJy4vb3BzL3JvdGFyeS1lbWJlZGRpbmcnO1xuaW1wb3J0IHtza2lwTGF5ZXJOb3JtfSBmcm9tICcuL29wcy9za2lwLWxheWVyLW5vcm0nO1xuaW1wb3J0IHtwYXJzZVNsaWNlQXR0cmlidXRlcywgc2xpY2V9IGZyb20gJy4vb3BzL3NsaWNlJztcbmltcG9ydCB7cGFyc2VTb2Z0bWF4QXR0cmlidXRlcywgc29mdG1heH0gZnJvbSAnLi9vcHMvc29mdG1heCc7XG5pbXBvcnQge3BhcnNlU3BsaXRBdHRyaWJ1dGVzLCBzcGxpdH0gZnJvbSAnLi9vcHMvc3BsaXQnO1xuaW1wb3J0IHt0aWxlfSBmcm9tICcuL29wcy90aWxlJztcbmltcG9ydCB7cGFyc2VUcmFuc3Bvc2VBdHRyaWJ1dGVzLCB0cmFuc3Bvc2V9IGZyb20gJy4vb3BzL3RyYW5zcG9zZSc7XG5pbXBvcnQgKiBhcyB1bmFyeU9wcyBmcm9tICcuL29wcy91bmFyeS1vcCc7XG5pbXBvcnQge3doZXJlfSBmcm9tICcuL29wcy93aGVyZSc7XG5pbXBvcnQge0NvbXB1dGVDb250ZXh0fSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgUnVuRnVuY3Rpb24gPSAoY29udGV4dDogQ29tcHV0ZUNvbnRleHQsIGF0dHJpYnV0ZT86IHVua25vd24pID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBQYXJzZUF0dHJpYnV0ZUZ1bmN0aW9uID0gKGF0dHJpYnV0ZVJhdzogdW5rbm93bikgPT4gdW5rbm93bjtcbmV4cG9ydCB0eXBlIE9wZXJhdG9ySW1wbGVtZW50YXRpb24gPSBbUnVuRnVuY3Rpb25dfFtSdW5GdW5jdGlvbiwgUGFyc2VBdHRyaWJ1dGVGdW5jdGlvbl07XG5cbmV4cG9ydCBjb25zdCBXRUJHUFVfT1BfUkVTT0xWRV9SVUxFUzogTWFwPHN0cmluZywgT3BlcmF0b3JJbXBsZW1lbnRhdGlvbj4gPSBuZXcgTWFwKFtcbiAgWydBYnMnLCBbdW5hcnlPcHMuYWJzXV0sXG4gIFsnQWNvcycsIFt1bmFyeU9wcy5hY29zXV0sXG4gIFsnQWNvc2gnLCBbdW5hcnlPcHMuYWNvc2hdXSxcbiAgWydBZGQnLCBbYmluYXJ5T3BzLmFkZF1dLFxuICBbJ0FyZ01heCcsIFthcmdNYXgsIHBhcnNlQXJnTWluTWF4QXR0cmlidXRlc11dLFxuICBbJ0FyZ01pbicsIFthcmdNaW4sIHBhcnNlQXJnTWluTWF4QXR0cmlidXRlc11dLFxuICBbJ0FzaW4nLCBbdW5hcnlPcHMuYXNpbl1dLFxuICBbJ0FzaW5oJywgW3VuYXJ5T3BzLmFzaW5oXV0sXG4gIFsnQXRhbicsIFt1bmFyeU9wcy5hdGFuXV0sXG4gIFsnQXRhbmgnLCBbdW5hcnlPcHMuYXRhbmhdXSxcbiAgWydBdHRlbnRpb24nLCBbYXR0ZW50aW9uXV0sXG4gIC8vIFRPRE86IHN1cHBvcnQgbmV3IGF0dHJpYnV0ZXMgZm9yIEF2ZXJhZ2VQb29sLTEwXG4gIFsnQXZlcmFnZVBvb2wnLCBbcG9vbC5hdmVyYWdlUG9vbCwgcG9vbC5wYXJzZUF2ZXJhZ2VQb29sQXR0cmlidXRlc11dLFxuICBbJ0JhdGNoTm9ybWFsaXphdGlvbicsIFtiYXRjaE5vcm1dXSxcbiAgWydCaWFzQWRkJywgW2JpYXNBZGRdXSxcbiAgWydCaWFzU3BsaXRHZWx1JywgW2JpYXNTcGxpdEdlbHVdXSxcbiAgWydDYXN0JywgW3VuYXJ5T3BzLmNhc3QsIHVuYXJ5T3BzLnBhcnNlQ2FzdEF0dHJpYnV0ZXNdXSxcbiAgWydDZWlsJywgW3VuYXJ5T3BzLmNlaWxdXSxcbiAgWydDbGlwJywgW3VuYXJ5T3BzLmNsaXBdXSxcbiAgWydDb25jYXQnLCBbY29uY2F0LCBwYXJzZUNvbmNhdEF0dHJpYnV0ZXNdXSxcbiAgWydDb252JywgW2NvbnYsIHBhcnNlQ29udkF0dHJpYnV0ZXNdXSxcbiAgWydDb252VHJhbnNwb3NlJywgW2NvbnZUcmFuc3Bvc2UsIHBhcnNlQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXNdXSxcbiAgWydDb3MnLCBbdW5hcnlPcHMuY29zXV0sXG4gIFsnQ29zaCcsIFt1bmFyeU9wcy5jb3NoXV0sXG4gIFsnQ3VtU3VtJywgW2N1bXN1bSwgcGFyc2VDdW1TdW1BdHRyaWJ1dGVzXV0sXG4gIFsnRGVwdGhUb1NwYWNlJywgW2RlcHRoVG9TcGFjZSwgcGFyc2VEZXB0aFRvU3BhY2VBdHRyaWJ1dGVzXV0sXG4gIFsnRGl2JywgW2JpbmFyeU9wcy5kaXZdXSxcbiAgWydFaW5zdW0nLCBbZWluc3VtLCBwYXJzZUVpbnN1bUF0dHJpYnV0ZXNdXSxcbiAgWydFbHUnLCBbdW5hcnlPcHMuZWx1LCB1bmFyeU9wcy5wYXJzZUFscGhhQXR0cmlidXRlc11dLFxuICBbJ0VxdWFsJywgW2JpbmFyeU9wcy5lcXVhbF1dLFxuICBbJ0VyZicsIFt1bmFyeU9wcy5lcmZdXSxcbiAgWydFeHAnLCBbdW5hcnlPcHMuZXhwXV0sXG4gIFsnRXhwYW5kJywgW2V4cGFuZF1dLFxuICBbJ0Zhc3RHZWx1JywgW2Zhc3RHZWx1XV0sXG4gIFsnRmxvb3InLCBbdW5hcnlPcHMuZmxvb3JdXSxcbiAgWydGdXNlZENvbnYnLCBbY29udiwgcGFyc2VDb252QXR0cmlidXRlc11dLFxuICBbJ0dhdGhlcicsIFtnYXRoZXIsIHBhcnNlR2F0aGVyQXR0cmlidXRlc11dLFxuICBbJ0dhdGhlckVsZW1lbnRzJywgW2dhdGhlckVsZW1lbnRzLCBwYXJzZUdhdGhlckVsZW1lbnRzQXR0cmlidXRlc11dLFxuICBbJ0dlbHUnLCBbdW5hcnlPcHMuZ2VsdV1dLFxuICBbJ0dlbW0nLCBbZ2VtbSwgcGFyc2VHZW1tQXR0cmlidXRlc11dLFxuICBbJ0dsb2JhbEF2ZXJhZ2VQb29sJywgW3Bvb2wuZ2xvYmFsQXZlcmFnZVBvb2wsIHBvb2wucGFyc2VHbG9iYWxBdmVyYWdlUG9vbEF0dHJpYnV0ZXNdXSxcbiAgWydHbG9iYWxNYXhQb29sJywgW3Bvb2wuZ2xvYmFsTWF4UG9vbCwgcG9vbC5wYXJzZUdsb2JhbE1heFBvb2xBdHRyaWJ1dGVzXV0sXG4gIFsnR3JlYXRlcicsIFtiaW5hcnlPcHMuZ3JlYXRlcl1dLFxuICBbJ0dyZWF0ZXJPckVxdWFsJywgW2JpbmFyeU9wcy5ncmVhdGVyT3JFcXVhbF1dLFxuICBbJ0hhcmRTaWdtb2lkJywgW3VuYXJ5T3BzLmhhcmRTaWdtb2lkLCB1bmFyeU9wcy5wYXJzZUhhcmRTaWdtb2lkQXR0cmlidXRlc11dLFxuICBbJ0luc3RhbmNlTm9ybWFsaXphdGlvbicsIFtpbnN0YW5jZU5vcm1dXSxcbiAgWydMYXllck5vcm1hbGl6YXRpb24nLCBbbGF5ZXJOb3JtXV0sXG4gIFsnTGVha3lSZWx1JywgW3VuYXJ5T3BzLmxlYWt5UmVsdSwgdW5hcnlPcHMucGFyc2VBbHBoYUF0dHJpYnV0ZXNdXSxcbiAgWydMZXNzJywgW2JpbmFyeU9wcy5sZXNzXV0sXG4gIFsnTGVzc09yRXF1YWwnLCBbYmluYXJ5T3BzLmxlc3NPckVxdWFsXV0sXG4gIFsnTG9nJywgW3VuYXJ5T3BzLmxvZ11dLFxuICBbJ01hdE11bCcsIFttYXRNdWxdXSxcbiAgWydNYXRNdWxOQml0cycsIFttYXRNdWxOQml0cywgcGFyc2VNYXRNdWxOQml0c0F0dHJpYnV0ZXNdXSxcbiAgLy8gVE9ETzogc3VwcG9ydCBuZXcgYXR0cmlidXRlcyBmb3IgTWF4UG9vbC04IGFuZCBNYXhQb29sLTEwXG4gIFsnTWF4UG9vbCcsIFtwb29sLm1heFBvb2wsIHBvb2wucGFyc2VNYXhQb29sQXR0cmlidXRlc11dLFxuICBbJ011bCcsIFtiaW5hcnlPcHMubXVsXV0sXG4gIFsnTXVsdGlIZWFkQXR0ZW50aW9uJywgW211bHRpSGVhZEF0dGVudGlvbiwgcGFyc2VNdWx0aUhlYWRBdHRlbnRpb25BdHRyaWJ1dGVzXV0sXG4gIFsnTmVnJywgW3VuYXJ5T3BzLm5lZ11dLFxuICBbJ05vdCcsIFt1bmFyeU9wcy5ub3RdXSxcbiAgWydQYWQnLCBbcGFkXV0sXG4gIFsnUG93JywgW2JpbmFyeU9wcy5wb3ddXSxcbiAgWydSYW5nZScsIFtyYW5nZV1dLFxuICBbJ1JlY2lwcm9jYWwnLCBbdW5hcnlPcHMucmVjaXByb2NhbF1dLFxuICBbJ1JlZHVjZU1pbicsIFtyZWR1Y2VNaW5dXSxcbiAgWydSZWR1Y2VNZWFuJywgW3JlZHVjZU1lYW5dXSxcbiAgWydSZWR1Y2VNYXgnLCBbcmVkdWNlTWF4XV0sXG4gIFsnUmVkdWNlU3VtJywgW3JlZHVjZVN1bV1dLFxuICBbJ1JlZHVjZVByb2QnLCBbcmVkdWNlUHJvZF1dLFxuICBbJ1JlZHVjZUwxJywgW3JlZHVjZUwxXV0sXG4gIFsnUmVkdWNlTDInLCBbcmVkdWNlTDJdXSxcbiAgWydSZWR1Y2VMb2dTdW0nLCBbcmVkdWNlTG9nU3VtXV0sXG4gIFsnUmVkdWNlTG9nU3VtRXhwJywgW3JlZHVjZUxvZ1N1bUV4cF1dLFxuICBbJ1JlZHVjZVN1bVNxdWFyZScsIFtyZWR1Y2VTdW1TcXVhcmVdXSxcbiAgWydSZWx1JywgW3VuYXJ5T3BzLnJlbHVdXSxcbiAgWydSZXNpemUnLCBbcmVzaXplLCBwYXJzZVJlc2l6ZUF0dHJpYnV0ZXNdXSxcbiAgWydSb3RhcnlFbWJlZGRpbmcnLCBbcm90YXJ5RW1iZWRkaW5nXV0sXG4gIFsnU2lnbW9pZCcsIFt1bmFyeU9wcy5zaWdtb2lkXV0sXG4gIFsnU2luJywgW3VuYXJ5T3BzLnNpbl1dLFxuICBbJ1NpbmgnLCBbdW5hcnlPcHMuc2luaF1dLFxuICBbJ1NsaWNlJywgW3NsaWNlLCBwYXJzZVNsaWNlQXR0cmlidXRlc11dLFxuICBbJ1NraXBMYXllck5vcm1hbGl6YXRpb24nLCBbc2tpcExheWVyTm9ybV1dLFxuICBbJ1NwbGl0JywgW3NwbGl0LCBwYXJzZVNwbGl0QXR0cmlidXRlc11dLFxuICBbJ1NxcnQnLCBbdW5hcnlPcHMuc3FydF1dLFxuICBbJ1NvZnRtYXgnLCBbc29mdG1heCwgcGFyc2VTb2Z0bWF4QXR0cmlidXRlc11dLFxuICBbJ1N1YicsIFtiaW5hcnlPcHMuc3ViXV0sXG4gIFsnVGFuJywgW3VuYXJ5T3BzLnRhbl1dLFxuICBbJ1RhbmgnLCBbdW5hcnlPcHMudGFuaF1dLFxuICBbJ1RocmVzaG9sZGVkUmVsdScsIFt1bmFyeU9wcy50aHJlc2hvbGRlZFJlbHUsIHVuYXJ5T3BzLnBhcnNlQWxwaGFBdHRyaWJ1dGVzXV0sXG4gIFsnVGlsZScsIFt0aWxlXV0sXG4gIFsnVHJhbnNwb3NlJywgW3RyYW5zcG9zZSwgcGFyc2VUcmFuc3Bvc2VBdHRyaWJ1dGVzXV0sXG4gIFsnV2hlcmUnLCBbd2hlcmVdXSxcbl0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge1RSQUNFX0ZVTkNfQkVHSU4sIFRSQUNFX0ZVTkNfRU5EfSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge1dlYkdwdUJhY2tlbmR9IGZyb20gJy4uL2JhY2tlbmQtd2ViZ3B1JztcbmltcG9ydCB7TE9HX0RFQlVHfSBmcm9tICcuLi9sb2cnO1xuXG5pbXBvcnQge2NyZWF0ZVNoYWRlckhlbHBlcn0gZnJvbSAnLi9vcHMvY29tbW9uJztcbmltcG9ydCB7QXJ0aWZhY3QsIEdwdURhdGEsIFByb2dyYW1JbmZvfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBQcm9ncmFtTWFuYWdlciBpcyB0aGUgbWFpbiBjbGFzcyBiZWhpbmQgcnVubmluZyBjb21wdXRhdGlvbnNcbiAqIEl0IGJ1aWxkcyBQcm9ncmFtSW5mbydzIGludG8gQXJ0aWZhY3RzXG4gKiBJdCBjb21waWxlcyBnaXZlbiBQcm9ncmFtSW5mbydzIGludG8gV2ViR0wgUHJvcmFtcyAoY2FjaGVkIGFzIEFydGlmYWN0cylcbiAqIFVzZXMgdGhlIGFydGlmYWN0IHRvIHJ1biB0aGUgY29tcHV0YXRpb24gYnkgY2FsbGluZyBEcmF3IG9uXG4gKiB0aGUgV2ViR0wgZHJhd2luZyBidWZmZXJcbiAqIFByb2dyYW1NYW5hZ2VyIGF1dG9tYXRpY2FsbHkgbWFwcyAoYmluZHMpIGlucHV0IHZhcmlhYmxlcyB0byB0aGVpclxuICogY29ycmVzcG9uZGluZyBMb2NhdGlvbidzIGluIHRoZSBiaW5hcnkgcHJvZ3JhbVxuICovXG5leHBvcnQgY2xhc3MgUHJvZ3JhbU1hbmFnZXIge1xuICByZXBvOiBNYXA8dW5rbm93biwgQXJ0aWZhY3Q+OyAgLy8gdGhpcyBzaG91bGQgYmUgcGVyLXNlc3Npb24gb2JqZWN0XG4gIGF0dHJpYnV0ZXNCb3VuZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhY2tlbmQ6IFdlYkdwdUJhY2tlbmQpIHtcbiAgICB0aGlzLnJlcG8gPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5hdHRyaWJ1dGVzQm91bmQgPSBmYWxzZTtcbiAgfVxuICBnZXRBcnRpZmFjdChrZXk6IHVua25vd24pOiBBcnRpZmFjdHx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlcG8uZ2V0KGtleSk7XG4gIH1cbiAgc2V0QXJ0aWZhY3Qoa2V5OiB1bmtub3duLCBhcnRpZmFjdDogQXJ0aWZhY3QpOiB2b2lkIHtcbiAgICB0aGlzLnJlcG8uc2V0KGtleSwgYXJ0aWZhY3QpO1xuICB9XG4gIHJ1bihidWlsZEFydGlmYWN0OiBBcnRpZmFjdCwgaW5wdXRzOiBHcHVEYXRhW10sIG91dHB1dHM6IEdwdURhdGFbXSwgZGlzcGF0Y2hHcm91cDogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgdW5pZm9ybUJ1ZmZlckJpbmRpbmc6IEdQVUJpbmRpbmdSZXNvdXJjZXx1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBUUkFDRV9GVU5DX0JFR0lOKGJ1aWxkQXJ0aWZhY3QucHJvZ3JhbUluZm8ubmFtZSk7XG4gICAgY29uc3QgZGV2aWNlID0gdGhpcy5iYWNrZW5kLmRldmljZTtcbiAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSB0aGlzLmJhY2tlbmQuZ2V0Q29tcHV0ZVBhc3NFbmNvZGVyKCk7XG4gICAgdGhpcy5iYWNrZW5kLndyaXRlVGltZXN0YW1wKHRoaXMuYmFja2VuZC5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyKTtcbiAgICBjb25zdCBlbnRyaWVzID0gW107XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcbiAgICAgIGVudHJpZXMucHVzaCh7YmluZGluZzogZW50cmllcy5sZW5ndGgsIHJlc291cmNlOiB7YnVmZmVyOiBpbnB1dC5idWZmZXJ9fSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIG91dHB1dHMpIHtcbiAgICAgIGVudHJpZXMucHVzaCh7YmluZGluZzogZW50cmllcy5sZW5ndGgsIHJlc291cmNlOiB7YnVmZmVyOiBvdXRwdXQuYnVmZmVyfX0pO1xuICAgIH1cbiAgICBpZiAodW5pZm9ybUJ1ZmZlckJpbmRpbmcpIHtcbiAgICAgIGVudHJpZXMucHVzaCh7YmluZGluZzogZW50cmllcy5sZW5ndGgsIHJlc291cmNlOiB1bmlmb3JtQnVmZmVyQmluZGluZ30pO1xuICAgIH1cbiAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKFxuICAgICAgICB7bGF5b3V0OiBidWlsZEFydGlmYWN0LmNvbXB1dGVQaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCksIGVudHJpZXMsIGxhYmVsOiBidWlsZEFydGlmYWN0LnByb2dyYW1JbmZvLm5hbWV9KTtcblxuICAgIGlmICh0aGlzLmJhY2tlbmQuc2Vzc2lvblN0YXR1cyA9PT0gJ2NhcHR1cmluZycpIHtcbiAgICAgIGNvbnN0IGNvbW1hbmRJbmZvID0ge1xuICAgICAgICBrZXJuZWxJZDogdGhpcy5iYWNrZW5kLmN1cnJlbnRLZXJuZWxJZCEsXG4gICAgICAgIGNvbXB1dGVQaXBlbGluZTogYnVpbGRBcnRpZmFjdC5jb21wdXRlUGlwZWxpbmUsXG4gICAgICAgIGJpbmRHcm91cCxcbiAgICAgICAgZGlzcGF0Y2hHcm91cFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlc3Npb25Db21tYW5kTGlzdCA9IHRoaXMuYmFja2VuZC5jYXB0dXJlZENvbW1hbmRMaXN0LmdldCh0aGlzLmJhY2tlbmQuY3VycmVudFNlc3Npb25JZCEpO1xuICAgICAgc2Vzc2lvbkNvbW1hbmRMaXN0IS5wdXNoKGNvbW1hbmRJbmZvKTtcbiAgICB9XG5cbiAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoYnVpbGRBcnRpZmFjdC5jb21wdXRlUGlwZWxpbmUpO1xuICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcbiAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2hXb3JrZ3JvdXBzKC4uLmRpc3BhdGNoR3JvdXApO1xuICAgIHRoaXMuYmFja2VuZC53cml0ZVRpbWVzdGFtcCh0aGlzLmJhY2tlbmQucGVuZGluZ0Rpc3BhdGNoTnVtYmVyICogMiArIDEpO1xuICAgIHRoaXMuYmFja2VuZC5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIrKztcblxuICAgIGlmICh0aGlzLmJhY2tlbmQucGVuZGluZ0Rpc3BhdGNoTnVtYmVyID49IHRoaXMuYmFja2VuZC5tYXhEaXNwYXRjaE51bWJlciB8fFxuICAgICAgICB0aGlzLmJhY2tlbmQucXVlcnlUeXBlID09PSAnYXQtcGFzc2VzJykge1xuICAgICAgdGhpcy5iYWNrZW5kLmVuZENvbXB1dGVQYXNzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJhY2tlbmQucGVuZGluZ0Rpc3BhdGNoTnVtYmVyID49IHRoaXMuYmFja2VuZC5tYXhEaXNwYXRjaE51bWJlcikge1xuICAgICAgdGhpcy5iYWNrZW5kLmZsdXNoKCk7XG4gICAgfVxuICAgIFRSQUNFX0ZVTkNfRU5EKGJ1aWxkQXJ0aWZhY3QucHJvZ3JhbUluZm8ubmFtZSk7XG4gIH1cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLnJlcG8uZm9yRWFjaChhID0+IHRoaXMuZ2xDb250ZXh0LmRlbGV0ZVByb2dyYW0oYS5wcm9ncmFtKSk7XG4gIH1cbiAgYnVpbGQocHJvZ3JhbUluZm86IFByb2dyYW1JbmZvLCBub3JtYWxpemVkRGlzcGF0Y2hHcm91cFNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IEFydGlmYWN0IHtcbiAgICBUUkFDRV9GVU5DX0JFR0lOKHByb2dyYW1JbmZvLm5hbWUpO1xuICAgIGNvbnN0IGRldmljZSA9IHRoaXMuYmFja2VuZC5kZXZpY2U7XG4gICAgY29uc3QgZXh0ZW5zaW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZGV2aWNlLmZlYXR1cmVzLmhhcygnc2hhZGVyLWYxNicpKSB7XG4gICAgICBleHRlbnNpb25zLnB1c2goJ2VuYWJsZSBmMTY7Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNoYWRlckhlbHBlciA9IGNyZWF0ZVNoYWRlckhlbHBlcihub3JtYWxpemVkRGlzcGF0Y2hHcm91cFNpemUsIHRoaXMuYmFja2VuZC5kZXZpY2UubGltaXRzKTtcbiAgICBjb25zdCB1c2VyQ29kZSA9IHByb2dyYW1JbmZvLmdldFNoYWRlclNvdXJjZShzaGFkZXJIZWxwZXIpO1xuICAgIGNvbnN0IGNvZGUgPSBgJHtleHRlbnNpb25zLmpvaW4oJ1xcbicpfVxcbiR7c2hhZGVySGVscGVyLmFkZGl0aW9uYWxJbXBsZW1lbnRhdGlvbnN9XFxuJHt1c2VyQ29kZX1gO1xuICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGUsIGxhYmVsOiBwcm9ncmFtSW5mby5uYW1lfSk7XG4gICAgTE9HX0RFQlVHKCd2ZXJib3NlJywgKCkgPT4gYFtXZWJHUFVdICR7cHJvZ3JhbUluZm8ubmFtZX0gc2hhZGVyIGNvZGU6ICR7Y29kZX1gKTtcblxuICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoXG4gICAgICAgIHtjb21wdXRlOiB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICdtYWluJ30sIGxheW91dDogJ2F1dG8nLCBsYWJlbDogcHJvZ3JhbUluZm8ubmFtZX0pO1xuXG4gICAgVFJBQ0VfRlVOQ19FTkQocHJvZ3JhbUluZm8ubmFtZSk7XG4gICAgcmV0dXJuIHtwcm9ncmFtSW5mbywgY29tcHV0ZVBpcGVsaW5lLCB1bmlmb3JtVmFyaWFibGVzSW5mbzogc2hhZGVySGVscGVyLnZhcmlhYmxlc0luZm99O1xuICB9XG5cbiAgbm9ybWFsaXplRGlzcGF0Y2hHcm91cFNpemUoZGlzcGF0Y2hHcm91cDogUmV0dXJuVHlwZTxQcm9ncmFtSW5mb1snZ2V0UnVuRGF0YSddPlsnZGlzcGF0Y2hHcm91cCddKTpcbiAgICAgIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgY29uc3QgeCA9IHR5cGVvZiBkaXNwYXRjaEdyb3VwID09PSAnbnVtYmVyJyA/IGRpc3BhdGNoR3JvdXAgOiBkaXNwYXRjaEdyb3VwLng7XG4gICAgY29uc3QgeSA9IHR5cGVvZiBkaXNwYXRjaEdyb3VwID09PSAnbnVtYmVyJyA/IDEgOiAoZGlzcGF0Y2hHcm91cC55IHx8IDEpO1xuICAgIGNvbnN0IHogPSB0eXBlb2YgZGlzcGF0Y2hHcm91cCA9PT0gJ251bWJlcicgPyAxIDogKGRpc3BhdGNoR3JvdXAueiB8fCAxKTtcbiAgICBjb25zdCBsaW1pdFBlckRpbWVuc2lvbiA9IHRoaXMuYmFja2VuZC5kZXZpY2UubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uO1xuICAgIGlmICh4IDw9IGxpbWl0UGVyRGltZW5zaW9uICYmIHkgPD0gbGltaXRQZXJEaW1lbnNpb24gJiYgeiA8PSBsaW1pdFBlckRpbWVuc2lvbikge1xuICAgICAgcmV0dXJuIFt4LCB5LCB6XTtcbiAgICB9XG4gICAgY29uc3Qgc2l6ZSA9IHggKiB5ICogejtcbiAgICBsZXQgZGlzcGF0Y2hBdmVyYWdlID0gTWF0aC5jZWlsKE1hdGguc3FydChzaXplKSk7XG4gICAgaWYgKGRpc3BhdGNoQXZlcmFnZSA+IGxpbWl0UGVyRGltZW5zaW9uKSB7XG4gICAgICBkaXNwYXRjaEF2ZXJhZ2UgPSBNYXRoLmNlaWwoTWF0aC5jYnJ0KHNpemUpKTtcbiAgICAgIGlmIChkaXNwYXRjaEF2ZXJhZ2UgPiBsaW1pdFBlckRpbWVuc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvdGFsIGRpc3BhdGNoIHNpemUgZXhjZWVkcyBXZWJHUFUgbWF4aW11bS4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbZGlzcGF0Y2hBdmVyYWdlLCBkaXNwYXRjaEF2ZXJhZ2UsIGRpc3BhdGNoQXZlcmFnZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbZGlzcGF0Y2hBdmVyYWdlLCBkaXNwYXRjaEF2ZXJhZ2UsIDFdO1xuICAgIH1cbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0VudiwgVGVuc29yLCBUUkFDRSwgVFJBQ0VfRlVOQ19CRUdJTiwgVFJBQ0VfRlVOQ19FTkR9IGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5cbmltcG9ydCB7RGF0YVR5cGUsIHRlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nfSBmcm9tICcuLi93YXNtLWNvbW1vbic7XG5cbmltcG9ydCB7Y29uZmlndXJlTG9nZ2VyLCBMT0dfREVCVUd9IGZyb20gJy4vbG9nJztcbmltcG9ydCB7Y3JlYXRlVmlldywgVGVuc29yVmlld30gZnJvbSAnLi90ZW5zb3Itdmlldyc7XG5pbXBvcnQge2NyZWF0ZUdwdURhdGFNYW5hZ2VyLCBkb3dubG9hZEdwdURhdGEsIEdwdURhdGFNYW5hZ2VyfSBmcm9tICcuL3dlYmdwdS9ncHUtZGF0YS1tYW5hZ2VyJztcbmltcG9ydCB7UnVuRnVuY3Rpb24sIFdFQkdQVV9PUF9SRVNPTFZFX1JVTEVTfSBmcm9tICcuL3dlYmdwdS9vcC1yZXNvbHZlLXJ1bGVzJztcbmltcG9ydCB7UHJvZ3JhbU1hbmFnZXJ9IGZyb20gJy4vd2ViZ3B1L3Byb2dyYW0tbWFuYWdlcic7XG5pbXBvcnQge0FkYXB0ZXJJbmZvLCBDb21wdXRlQ29udGV4dCwgR3B1QXJjaGl0ZWN0dXJlLCBHcHVEYXRhLCBHcHVWZW5kb3IsIFByb2dyYW1JbmZvLCBQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeSwgU2Vzc2lvblN0YXRlLCBUaW1lc3RhbXBRdWVyeX0gZnJvbSAnLi93ZWJncHUvdHlwZXMnO1xuXG5pbnRlcmZhY2UgQ29tbWFuZEluZm8ge1xuICByZWFkb25seSBrZXJuZWxJZDogbnVtYmVyO1xuICByZWFkb25seSBjb21wdXRlUGlwZWxpbmU6IEdQVUNvbXB1dGVQaXBlbGluZTtcbiAgcmVhZG9ubHkgYmluZEdyb3VwOiBHUFVCaW5kR3JvdXA7XG4gIHJlYWRvbmx5IGRpc3BhdGNoR3JvdXA6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuaW50ZXJmYWNlIEtlcm5lbEluZm8ge1xuICByZWFkb25seSBrZXJuZWxUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtlcm5lbE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkga2VybmVsRW50cnk6IFJ1bkZ1bmN0aW9uO1xuICByZWFkb25seSBhdHRyaWJ1dGVzOiBbKChhdHRyaWJ1dGU6IHVua25vd24pID0+IHVua25vd24pfHVuZGVmaW5lZCwgdW5rbm93bl07XG59XG5cbmludGVyZmFjZSBQZW5kaW5nS2VybmVsSW5mbyB7XG4gIHJlYWRvbmx5IGtlcm5lbElkOiBudW1iZXI7XG4gIHJlYWRvbmx5IHByb2dyYW1OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlucHV0VGVuc29yVmlld3M6IHJlYWRvbmx5IFRlbnNvclZpZXdbXTtcbiAgcmVhZG9ubHkgb3V0cHV0VGVuc29yVmlld3M6IHJlYWRvbmx5IFRlbnNvclZpZXdbXTtcbn1cblxuY29uc3QgZ2V0UHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lLZXkgPVxuICAgIChpbnB1dFRlbnNvcnM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgaW5wdXREZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5W10pOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKGlucHV0RGVwZW5kZW5jaWVzLmxlbmd0aCAhPT0gaW5wdXRUZW5zb3JzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0RGVwZW5kZW5jaWVzIGxlbmd0aCAke2lucHV0RGVwZW5kZW5jaWVzLmxlbmd0aH0gaXMgbm90IGVxdWFsIHRvIGlucHV0VGVuc29ycyBsZW5ndGggJHtcbiAgICAgICAgICAgIGlucHV0VGVuc29ycy5sZW5ndGh9LmApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnB1dEluZm9zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFRlbnNvcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGlucHV0VGVuc29yc1tpXS5kYXRhVHlwZTtcbiAgICAgICAgc3dpdGNoIChpbnB1dERlcGVuZGVuY2llc1tpXSkge1xuICAgICAgICAgIGNhc2UgJ25vbmUnOiB7XG4gICAgICAgICAgICBpbnB1dEluZm9zLnB1c2goJycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3R5cGUnOiB7XG4gICAgICAgICAgICBpbnB1dEluZm9zLnB1c2goYCR7dHlwZX1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdyYW5rJzoge1xuICAgICAgICAgICAgY29uc3QgcmFuayA9IGlucHV0VGVuc29yc1tpXS5kaW1zLmxlbmd0aDtcbiAgICAgICAgICAgIGlucHV0SW5mb3MucHVzaChgJHt0eXBlfTske3Jhbmt9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnZGltcyc6IHtcbiAgICAgICAgICAgIGNvbnN0IGRpbXMgPSBpbnB1dFRlbnNvcnNbaV0uZGltcy5qb2luKCcsJyk7XG4gICAgICAgICAgICBpbnB1dEluZm9zLnB1c2goYCR7dHlwZX07JHtkaW1zfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGlucHV0IGRlcGVuZGVuY3k6ICR7aW5wdXREZXBlbmRlbmNpZXNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlucHV0SW5mb3Muam9pbignfCcpO1xuICAgIH07XG5cbi8qKlxuICogZ2V0IGEgdW5pcXVlIGtleSByZXByZXNlbnRpbmcgdGhlIHByb2dyYW0gZnJvbSB0aGUgcHJvZ3JhbSBpbmZvLCBpbnB1dCBzaGFwZXMgYW5kIHR5cGVzLlxuICpcbiAqIEByZXR1cm5zIGEgdW5pcXVlIGtleSBpcyBhIHNob3J0ZXIgc3RyaW5nIHRoYW4gdGhlIHNoYWRlciBzb3VyY2UsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdG8gaWRlbnRpZnkgYVxuICogcHJvZ3JhbS4gaWYgdGhlIGtleSBpcyB0aGUgc2FtZSwgdGhlIHByb2dyYW0gc2hhZGVyIHNvdXJjZSBzaG91bGQgYmUgdGhlIHNhbWUsIHNvIHdlIGNhbiByZXVzZSB0aGUgcHJvZ3JhbS5cbiAqXG4gKi9cbmNvbnN0IGdldFByb2dyYW1JbmZvVW5pcXVlS2V5ID1cbiAgICAocHJvZ3JhbUluZm86IFByb2dyYW1JbmZvLCBpbnB1dFRlbnNvcnM6IHJlYWRvbmx5IFRlbnNvclZpZXdbXSwgaXMxRGltZW5zaW9uRGlzcGF0Y2g6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICAgICAgLy8gZmluYWwga2V5IGZvcm1hdDpcbiAgICAgIC8vIDxQUk9HUkFNX05BTUU+WzxQUk9HUkFNX0NVU1RPTV9DQUNIRV9ISU5UPl06aXMxRGltZW5zaW9uRGlzcGF0Y2g6PElOUFVUU19JTkZPXzA+fDxJTlBVVFNfSU5GT18xPnwuLi5cbiAgICAgIGxldCBrZXkgPSBwcm9ncmFtSW5mby5uYW1lO1xuICAgICAgaWYgKHByb2dyYW1JbmZvLnNoYWRlckNhY2hlPy5oaW50KSB7XG4gICAgICAgIGtleSArPSAnWycgKyBwcm9ncmFtSW5mby5zaGFkZXJDYWNoZS5oaW50ICsgJ10nO1xuICAgICAgfVxuICAgICAga2V5ICs9ICc6JyArIGlzMURpbWVuc2lvbkRpc3BhdGNoICtcbiAgICAgICAgICBgOiR7XG4gICAgICAgICAgICAgICAgIGdldFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5S2V5KFxuICAgICAgICAgICAgICAgICAgICAgaW5wdXRUZW5zb3JzLFxuICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUluZm8uc2hhZGVyQ2FjaGU/LmlucHV0RGVwZW5kZW5jaWVzID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFycmF5PFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5PihpbnB1dFRlbnNvcnMubGVuZ3RoKS5maWxsKCdkaW1zJykpfWA7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH07XG5cbmNsYXNzIEFkYXB0ZXJJbmZvSW1wbCBpbXBsZW1lbnRzIEFkYXB0ZXJJbmZvIHtcbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogc3RyaW5nO1xuICByZWFkb25seSB2ZW5kb3I/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoYWRhcHRlckluZm86IEdQVUFkYXB0ZXJJbmZvKSB7XG4gICAgaWYgKGFkYXB0ZXJJbmZvKSB7XG4gICAgICB0aGlzLmFyY2hpdGVjdHVyZSA9IGFkYXB0ZXJJbmZvLmFyY2hpdGVjdHVyZTtcbiAgICAgIHRoaXMudmVuZG9yID0gYWRhcHRlckluZm8udmVuZG9yO1xuICAgIH1cbiAgfVxuXG4gIGlzQXJjaGl0ZWN0dXJlKGFyY2hpdGVjdHVyZTogR3B1QXJjaGl0ZWN0dXJlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXJjaGl0ZWN0dXJlID09PSBhcmNoaXRlY3R1cmU7XG4gIH1cblxuICBpc1ZlbmRvcih2ZW5kb3I6IEdwdVZlbmRvcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZlbmRvciA9PT0gdmVuZG9yO1xuICB9XG59XG5cbi8qKlxuICogdGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBzdG9yZSBzdGF0dXMgYW5kIGJlaW5nIHVzZWQgYXMgYSBzaW5nbGV0b24gZm9yIEpTRVAuIEl0IHdpbGwgYmUgcGFzc2VkIHRvIGpzZXBJbml0KCkgYXNcbiAqIHRoZSBmaXJzdCBwYXJhbWV0ZXIgc28gdGhhdCBpdCBpcyBzdG9yZWQgZm9yIGZ1dHVyZSB1c2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJHcHVCYWNrZW5kIHtcbiAgYWRhcHRlckluZm86IEFkYXB0ZXJJbmZvSW1wbDtcbiAgZGV2aWNlOiBHUFVEZXZpY2U7XG4gIC8qKlxuICAgKiBhbiBpbnN0YW5jZSBvZiBHcHVEYXRhTWFuYWdlciB0byBtYW5hZ2UgYSBHcHVEYXRhSWQgLT4gR3B1QnVmZmVyIG1hcHBpbmdcbiAgICovXG4gIGdwdURhdGFNYW5hZ2VyOiBHcHVEYXRhTWFuYWdlcjtcbiAgLyoqXG4gICAqIGFuIGluc3RhbmNlIG9mIFByb2dyYW1NYW5hZ2VyIHRvIGJ1aWxkIGFuZCBydW4gV2ViR1BVIGNvbXB1dGUgc2hhZGVyIHByb2dyYW0sIGFuZCBtYW5hZ2UgYSBQcm9ncmFtS2V5IC0+IFByb2dyYW1cbiAgICogYXJ0aWZhY3RzIG1hcHBpbmdcbiAgICovXG4gIHByb2dyYW1NYW5hZ2VyOiBQcm9ncmFtTWFuYWdlcjtcblxuICAvKipcbiAgICogcmVwcmVzZW50aW5nIHRoZSBzZXNzaW9uIElEIG9mIHdoaWNoIGlzIGN1cnJlbnRseSBiZWluZyBydW4uXG4gICAqIGBudWxsYCBtZWFucyBubyBzZXNzaW9uIGlzIGJlaW5nIHJ1bi5cbiAgICogb25seSB2YWxpZCB3aGVuIHNlc3Npb24ucnVuIGlzIGV4ZWN1dGVkLlxuICAgKi9cbiAgY3VycmVudFNlc3Npb25JZDogbnVtYmVyfG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiByZXByZXNlbnRpbmcgdGhlIGtlcm5lbCBJRCBvZiB3aGljaCBpcyBjdXJyZW50bHkgYmVpbmcgY29tcHV0ZWQgKENQVSBjb2RlIHBlcnNwZWN0aXZlKS5cbiAgICogYG51bGxgIG1lYW5zIG5vIGtlcm5lbCBpcyBiZWluZyBjb21wdXRlZC5cbiAgICogb25seSBvbmUga2VybmVsIGNhbiBiZSBjb21wdXRlZCBhdCBhIG1vbWVudC5cbiAgICovXG4gIGN1cnJlbnRLZXJuZWxJZDogbnVtYmVyfG51bGwgPSBudWxsO1xuICAvKipcbiAgICogYSBsaXN0IG9mIHRlbXBvcmFyeSBHUFUgZGF0YSBmb3IgdGhlIGN1cnJlbnQga2VybmVsLiBzaG91bGQgcmVsZWFzZSB3aGVuIHRoZSBrZXJuZWwgZG9uZSBjb21wdXRhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgdGVtcG9yYXJ5RGF0YTogR3B1RGF0YVtdO1xuICAvKipcbiAgICogYSBLZXJuZWxJRCAtPiBhIEdQVSBkYXRhIGxpc3QsIHdoaWNoIHN0b3JlcyBwZXJzaXN0ZW50IEdQVSBkYXRhIG93bmVkIGJ5IHRoZSBzcGVjaWZpYyBrZXJuZWwuXG4gICAqL1xuICBwcml2YXRlIGtlcm5lbFBlcnNpc3RlbnREYXRhOiBNYXA8bnVtYmVyLCBHcHVEYXRhW10+O1xuICAvKipcbiAgICogYSBLZXJuZWxJRCAtPiBhIGN1c3RvbSBkYXRhLCB3aGljaCBzdG9yZXMgY3VzdG9tIGRhdGEgb3duZWQgYnkgdGhlIHNwZWNpZmljIGtlcm5lbC5cbiAgICovXG4gIHByaXZhdGUga2VybmVsQ3VzdG9tRGF0YTogTWFwPG51bWJlciwge1trZXk6IHN0cmluZ106IHVua25vd259PjtcbiAgLyoqXG4gICAqIGdldCB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIGN1cnJlbnQga2VybmVsXG4gICAqL1xuICBnZXQgY3VycmVudEtlcm5lbEN1c3RvbURhdGEoKToge1trZXk6IHN0cmluZ106IHVua25vd259IHtcbiAgICBpZiAodGhpcy5jdXJyZW50S2VybmVsSWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3VycmVudEtlcm5lbEN1c3RvbURhdGEoKTogY3VycmVudEtlcm5lbElkIGlzIG51bGwuIChzaG91bGQgbm90IGhhcHBlbiknKTtcbiAgICB9XG5cbiAgICBsZXQgZGF0YSA9IHRoaXMua2VybmVsQ3VzdG9tRGF0YS5nZXQodGhpcy5jdXJyZW50S2VybmVsSWQpO1xuICAgIGlmICghZGF0YSkge1xuICAgICAgZGF0YSA9IHt9O1xuICAgICAgdGhpcy5rZXJuZWxDdXN0b21EYXRhLnNldCh0aGlzLmN1cnJlbnRLZXJuZWxJZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvLyBLZXJuZWxJRCAtPiBrZXJuZWxJbmZvIG1hcHBpbmdcbiAga2VybmVsczogTWFwPG51bWJlciwgS2VybmVsSW5mbz47XG4gIHByaXZhdGUgY29tbWFuZEVuY29kZXI6IEdQVUNvbW1hbmRFbmNvZGVyfG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbXB1dGVQYXNzRW5jb2RlcjogR1BVQ29tcHV0ZVBhc3NFbmNvZGVyfG51bGwgPSBudWxsO1xuICBtYXhEaXNwYXRjaE51bWJlciA9IDE2O1xuICBwZW5kaW5nRGlzcGF0Y2hOdW1iZXIgPSAwO1xuXG4gIC8vIGluZm8gb2Yga2VybmVscyBwZW5kaW5nIHN1Ym1pc3Npb24gZm9yIGEgc2luZ2xlIGJhdGNoXG4gIHByaXZhdGUgcGVuZGluZ0tlcm5lbHM6IFBlbmRpbmdLZXJuZWxJbmZvW10gPSBbXTtcbiAgLy8gcXVlcnlSZWFkQnVmZmVyIC0+IHBlbmRpbmdLZXJuZWxzIG1hcHBpbmcgZm9yIGFsbCB0aGUgYmF0Y2hlc1xuICBwcml2YXRlIHBlbmRpbmdRdWVyaWVzOiBNYXA8R1BVQnVmZmVyLCBQZW5kaW5nS2VybmVsSW5mb1tdPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBxdWVyeVJlc29sdmVCdWZmZXI/OiBHUFVCdWZmZXI7XG4gIHByaXZhdGUgcXVlcnlTZXQ/OiBHUFVRdWVyeVNldDtcbiAgcHJpdmF0ZSBxdWVyeVRpbWVCYXNlPzogYmlnaW50O1xuICBxdWVyeVR5cGU6IFRpbWVzdGFtcFF1ZXJ5O1xuXG4gIGVudjogRW52O1xuICBzZXNzaW9uU3RhdHVzOiBTZXNzaW9uU3RhdGUgPSAnZGVmYXVsdCc7XG4gIC8qKlxuICAgKiBhIFNlc3Npb25JRCAtPiBDb21tYW5kSW5mb1tdIG1hcHBpbmcuIEl0J3MgdXNlZCB0byByZWNvcmQgYWxsIEdQVSBjb21tYW5kcyBmb3IgY29ycmVzcG9uZGluZyBzZXNzaW9uLlxuICAgKi9cbiAgY2FwdHVyZWRDb21tYW5kTGlzdDogTWFwPG51bWJlciwgQ29tbWFuZEluZm9bXT4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIGEgU2Vzc2lvbklEIC0+IFBlbmRpbmdLZXJuZWxJbmZvW10gbWFwcGluZyBmb3IgcHJvZmlsaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlZFBlbmRpbmdLZXJuZWxzOiBNYXA8bnVtYmVyLCBQZW5kaW5nS2VybmVsSW5mb1tdPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogYSBTZXNzaW9uSUQgLT4gYSBNYXAgb2YgKElucHV0T3V0cHV0SW5kZXggLT4gW0lELCBHUFVCdWZmZXJdKSBtYXBwaW5nLlxuICAgKi9cbiAgc2Vzc2lvbkV4dGVybmFsRGF0YU1hcHBpbmc6IE1hcDxudW1iZXIsIE1hcDxudW1iZXIsIFtudW1iZXIsIEdQVUJ1ZmZlcl0+PiA9IG5ldyBNYXAoKTtcblxuICBhc3luYyBpbml0aWFsaXplKGVudjogRW52LCBhZGFwdGVyOiBHUFVBZGFwdGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgY29uc3QgcmVxdWlyZWRGZWF0dXJlczogR1BVRmVhdHVyZU5hbWVbXSA9IFtdO1xuICAgIGNvbnN0IGRldmljZURlc2NyaXB0b3I6IEdQVURldmljZURlc2NyaXB0b3IgPSB7XG4gICAgICByZXF1aXJlZExpbWl0czoge1xuICAgICAgICBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemU6IGFkYXB0ZXIubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSxcbiAgICAgICAgbWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb246IGFkYXB0ZXIubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uLFxuICAgICAgICBtYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemU6IGFkYXB0ZXIubGltaXRzLm1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZSxcbiAgICAgICAgbWF4QnVmZmVyU2l6ZTogYWRhcHRlci5saW1pdHMubWF4QnVmZmVyU2l6ZSxcbiAgICAgICAgbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwOiBhZGFwdGVyLmxpbWl0cy5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXAsXG4gICAgICAgIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWDogYWRhcHRlci5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVYLFxuICAgICAgICBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVk6IGFkYXB0ZXIubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSxcbiAgICAgICAgbWF4Q29tcHV0ZVdvcmtncm91cFNpemVaOiBhZGFwdGVyLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVosXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWRGZWF0dXJlcyxcbiAgICB9O1xuXG4gICAgaWYgKGFkYXB0ZXIuZmVhdHVyZXMuaGFzKCdjaHJvbWl1bS1leHBlcmltZW50YWwtdGltZXN0YW1wLXF1ZXJ5LWluc2lkZS1wYXNzZXMnKSkge1xuICAgICAgcmVxdWlyZWRGZWF0dXJlcy5wdXNoKCdjaHJvbWl1bS1leHBlcmltZW50YWwtdGltZXN0YW1wLXF1ZXJ5LWluc2lkZS1wYXNzZXMnIGFzIEdQVUZlYXR1cmVOYW1lKTtcbiAgICB9IGVsc2UgaWYgKGFkYXB0ZXIuZmVhdHVyZXMuaGFzKCd0aW1lc3RhbXAtcXVlcnknKSkge1xuICAgICAgcmVxdWlyZWRGZWF0dXJlcy5wdXNoKCd0aW1lc3RhbXAtcXVlcnknKTtcbiAgICB9XG4gICAgaWYgKGFkYXB0ZXIuZmVhdHVyZXMuaGFzKCdzaGFkZXItZjE2JykpIHtcbiAgICAgIHJlcXVpcmVkRmVhdHVyZXMucHVzaCgnc2hhZGVyLWYxNicpO1xuICAgIH1cblxuICAgIHRoaXMuZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKGRldmljZURlc2NyaXB0b3IpO1xuICAgIHRoaXMuYWRhcHRlckluZm8gPSBuZXcgQWRhcHRlckluZm9JbXBsKGF3YWl0IGFkYXB0ZXIucmVxdWVzdEFkYXB0ZXJJbmZvKCkpO1xuICAgIHRoaXMuZ3B1RGF0YU1hbmFnZXIgPSBjcmVhdGVHcHVEYXRhTWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLnByb2dyYW1NYW5hZ2VyID0gbmV3IFByb2dyYW1NYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMua2VybmVscyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmtlcm5lbFBlcnNpc3RlbnREYXRhID0gbmV3IE1hcCgpO1xuICAgIHRoaXMua2VybmVsQ3VzdG9tRGF0YSA9IG5ldyBNYXAoKTtcblxuICAgIC8vIHNldCB1cCBmbGFncyBmb3IgbG9nZ2VyXG4gICAgY29uZmlndXJlTG9nZ2VyKGVudi5sb2dMZXZlbCEsICEhZW52LmRlYnVnKTtcblxuICAgIC8vIFRPRE86IHNldCB1cCBmbGFnc1xuXG4gICAgdGhpcy5kZXZpY2Uub251bmNhcHR1cmVkZXJyb3IgPSBldiA9PiB7XG4gICAgICBpZiAoZXYuZXJyb3IgaW5zdGFuY2VvZiBHUFVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihgQW4gdW5jYXVnaHQgV2ViR1BVIHZhbGlkYXRpb24gZXJyb3Igd2FzIHJhaXNlZDogJHtldi5lcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIHRoaXMuZW52LndlYmdwdSwgJ2RldmljZScsIHt2YWx1ZTogdGhpcy5kZXZpY2UsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgdGhpcy5lbnYud2ViZ3B1LCAnYWRhcHRlcicsIHt2YWx1ZTogYWRhcHRlciwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XG5cbiAgICAvLyBpbml0IHF1ZXJ5VHlwZSwgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBJbmZlcmVuY2VTZXNzaW9uLmNyZWF0ZVxuICAgIHRoaXMuc2V0UXVlcnlUeXBlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5xdWVyeVNldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMucXVlcnlTZXQuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIGdldENvbW1hbmRFbmNvZGVyKCk6IEdQVUNvbW1hbmRFbmNvZGVyIHtcbiAgICBpZiAoIXRoaXMuY29tbWFuZEVuY29kZXIpIHtcbiAgICAgIHRoaXMuY29tbWFuZEVuY29kZXIgPSB0aGlzLmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb21tYW5kRW5jb2RlcjtcbiAgfVxuXG4gIGdldENvbXB1dGVQYXNzRW5jb2RlcigpOiBHUFVDb21wdXRlUGFzc0VuY29kZXIge1xuICAgIGlmICghdGhpcy5jb21wdXRlUGFzc0VuY29kZXIpIHtcbiAgICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gdGhpcy5nZXRDb21tYW5kRW5jb2RlcigpO1xuICAgICAgY29uc3QgY29tcHV0ZVBhc3NEZXNjcmlwdG9yOiBHUFVDb21wdXRlUGFzc0Rlc2NyaXB0b3IgPSB7fTtcblxuICAgICAgaWYgKHRoaXMucXVlcnlUeXBlID09PSAnYXQtcGFzc2VzJykge1xuICAgICAgICBjb21wdXRlUGFzc0Rlc2NyaXB0b3IudGltZXN0YW1wV3JpdGVzID0ge1xuICAgICAgICAgIHF1ZXJ5U2V0OiB0aGlzLnF1ZXJ5U2V0ISxcbiAgICAgICAgICBiZWdpbm5pbmdPZlBhc3NXcml0ZUluZGV4OiB0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciAqIDIsXG4gICAgICAgICAgZW5kT2ZQYXNzV3JpdGVJbmRleDogdGhpcy5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyICsgMSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKGNvbXB1dGVQYXNzRGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbXB1dGVQYXNzRW5jb2RlcjtcbiAgfVxuXG4gIGVuZENvbXB1dGVQYXNzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbXB1dGVQYXNzRW5jb2Rlcikge1xuICAgICAgdGhpcy5jb21wdXRlUGFzc0VuY29kZXIuZW5kKCk7XG4gICAgICB0aGlzLmNvbXB1dGVQYXNzRW5jb2RlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbW1hbmRFbmNvZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgVFJBQ0VfRlVOQ19CRUdJTigpO1xuXG4gICAgdGhpcy5lbmRDb21wdXRlUGFzcygpO1xuICAgIGxldCBxdWVyeVJlYWRCdWZmZXI6IEdQVUJ1ZmZlcjtcbiAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09ICdub25lJykge1xuICAgICAgdGhpcy5jb21tYW5kRW5jb2Rlci5yZXNvbHZlUXVlcnlTZXQoXG4gICAgICAgICAgdGhpcy5xdWVyeVNldCEsIDAsIHRoaXMucGVuZGluZ0Rpc3BhdGNoTnVtYmVyICogMiwgdGhpcy5xdWVyeVJlc29sdmVCdWZmZXIhLCAwKTtcblxuICAgICAgcXVlcnlSZWFkQnVmZmVyID0gdGhpcy5kZXZpY2UuY3JlYXRlQnVmZmVyKFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAge3NpemU6IHRoaXMucGVuZGluZ0Rpc3BhdGNoTnVtYmVyICogMiAqIDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNUfSk7XG5cbiAgICAgIHRoaXMucGVuZGluZ1F1ZXJpZXMuc2V0KHF1ZXJ5UmVhZEJ1ZmZlciwgdGhpcy5wZW5kaW5nS2VybmVscyk7XG4gICAgICB0aGlzLnBlbmRpbmdLZXJuZWxzID0gW107XG4gICAgICB0aGlzLmNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihcbiAgICAgICAgICB0aGlzLnF1ZXJ5UmVzb2x2ZUJ1ZmZlciEsIDAsIHF1ZXJ5UmVhZEJ1ZmZlciwgMCwgdGhpcy5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyICogOCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXZpY2UucXVldWUuc3VibWl0KFt0aGlzLmNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7XG4gICAgdGhpcy5ncHVEYXRhTWFuYWdlci5yZWZyZXNoUGVuZGluZ0J1ZmZlcnMoKTtcbiAgICB0aGlzLmNvbW1hbmRFbmNvZGVyID0gbnVsbDtcbiAgICB0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciA9IDA7XG5cbiAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09ICdub25lJykge1xuICAgICAgdm9pZCBxdWVyeVJlYWRCdWZmZXIhLm1hcEFzeW5jKEdQVU1hcE1vZGUuUkVBRCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcHBlZERhdGEgPSBuZXcgQmlnVWludDY0QXJyYXkocXVlcnlSZWFkQnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xuICAgICAgICBjb25zdCBwZW5kaW5nS2VybmVscyA9IHRoaXMucGVuZGluZ1F1ZXJpZXMuZ2V0KHF1ZXJ5UmVhZEJ1ZmZlcikhO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcHBlZERhdGEubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcGVuZGluZ0tlcm5lbEluZm8gPSBwZW5kaW5nS2VybmVsc1tpXTtcbiAgICAgICAgICBjb25zdCBrZXJuZWxJZCA9IHBlbmRpbmdLZXJuZWxJbmZvLmtlcm5lbElkO1xuICAgICAgICAgIGNvbnN0IGtlcm5lbEluZm8gPSB0aGlzLmtlcm5lbHMuZ2V0KGtlcm5lbElkKSE7XG4gICAgICAgICAgY29uc3Qga2VybmVsVHlwZSA9IGtlcm5lbEluZm8ua2VybmVsVHlwZTtcbiAgICAgICAgICBjb25zdCBrZXJuZWxOYW1lID0ga2VybmVsSW5mby5rZXJuZWxOYW1lO1xuICAgICAgICAgIGNvbnN0IHByb2dyYW1OYW1lID0gcGVuZGluZ0tlcm5lbEluZm8ucHJvZ3JhbU5hbWU7XG4gICAgICAgICAgY29uc3QgaW5wdXRUZW5zb3JWaWV3cyA9IHBlbmRpbmdLZXJuZWxJbmZvLmlucHV0VGVuc29yVmlld3M7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0VGVuc29yVmlld3MgPSBwZW5kaW5nS2VybmVsSW5mby5vdXRwdXRUZW5zb3JWaWV3cztcbiAgICAgICAgICBjb25zdCBzdGFydFRpbWVVNjQgPSBtYXBwZWREYXRhW2kgKiAyXTtcbiAgICAgICAgICBjb25zdCBlbmRUaW1lVTY0ID0gbWFwcGVkRGF0YVtpICogMiArIDFdO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnF1ZXJ5VGltZUJhc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5VGltZUJhc2UgPSBzdGFydFRpbWVVNjQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gTnVtYmVyKHN0YXJ0VGltZVU2NCAtIHRoaXMucXVlcnlUaW1lQmFzZSk7XG4gICAgICAgICAgY29uc3QgZW5kVGltZSA9IE51bWJlcihlbmRUaW1lVTY0IC0gdGhpcy5xdWVyeVRpbWVCYXNlKTtcblxuICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoc3RhcnRUaW1lKSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIoZW5kVGltZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbmNvcnJlY3QgdGltZXN0YW1wIHJhbmdlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuZW52LndlYmdwdS5wcm9maWxpbmc/Lm9uZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lbnYud2ViZ3B1LnByb2ZpbGluZy5vbmRhdGEoe1xuICAgICAgICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICAgICAgICBpbnB1dHNNZXRhZGF0YTogaW5wdXRUZW5zb3JWaWV3cy5tYXAoXG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9PiAoe2RpbXM6IHZhbHVlLmRpbXMsIGRhdGFUeXBlOiB0ZW5zb3JEYXRhVHlwZUVudW1Ub1N0cmluZyh2YWx1ZS5kYXRhVHlwZSl9KSksXG4gICAgICAgICAgICAgIG91dHB1dHNNZXRhZGF0YTogb3V0cHV0VGVuc29yVmlld3MubWFwKFxuICAgICAgICAgICAgICAgICAgdmFsdWUgPT4gKHtkaW1zOiB2YWx1ZS5kaW1zLCBkYXRhVHlwZTogdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcodmFsdWUuZGF0YVR5cGUpfSkpLFxuICAgICAgICAgICAgICBrZXJuZWxJZCxcbiAgICAgICAgICAgICAga2VybmVsVHlwZSxcbiAgICAgICAgICAgICAga2VybmVsTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3JhbU5hbWUsXG4gICAgICAgICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgZW5kVGltZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiBubyBjYWxsYmFjayBpcyBwcm92aWRlZCwgcHJpbnQgdGhlIHByb2ZpbGluZyBtZXNzYWdlIHRvIGNvbnNvbGVcbiAgICAgICAgICAgIGxldCBpbnB1dFNoYXBlcyA9ICcnO1xuICAgICAgICAgICAgaW5wdXRUZW5zb3JWaWV3cy5mb3JFYWNoKCh2YWx1ZSwgaSkgPT4ge1xuICAgICAgICAgICAgICBpbnB1dFNoYXBlcyArPSBgaW5wdXRbJHtpfV06IFske3ZhbHVlLmRpbXN9XSB8ICR7dGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcodmFsdWUuZGF0YVR5cGUpfSwgYDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IG91dHB1dFNoYXBlcyA9ICcnO1xuICAgICAgICAgICAgb3V0cHV0VGVuc29yVmlld3MuZm9yRWFjaCgodmFsdWUsIGkpID0+IHtcbiAgICAgICAgICAgICAgb3V0cHV0U2hhcGVzICs9IGBvdXRwdXRbJHtpfV06IFske3ZhbHVlLmRpbXN9XSB8ICR7dGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcodmFsdWUuZGF0YVR5cGUpfSwgYDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbcHJvZmlsaW5nXSBrZXJuZWwgXCIke2tlcm5lbElkfXwke2tlcm5lbFR5cGV9fCR7a2VybmVsTmFtZX18JHtwcm9ncmFtTmFtZX1cIiAke2lucHV0U2hhcGVzfSR7XG4gICAgICAgICAgICAgICAgb3V0cHV0U2hhcGVzfWV4ZWN1dGlvbiB0aW1lOiAke2VuZFRpbWUgLSBzdGFydFRpbWV9IG5zYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFRSQUNFKCdHUFUnLCBgJHtwcm9ncmFtTmFtZX06OiR7c3RhcnRUaW1lVTY0fTo6JHtlbmRUaW1lVTY0fWApO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5UmVhZEJ1ZmZlci51bm1hcCgpO1xuICAgICAgICB0aGlzLnBlbmRpbmdRdWVyaWVzLmRlbGV0ZShxdWVyeVJlYWRCdWZmZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFRSQUNFX0ZVTkNfRU5EKCk7XG4gIH1cblxuICAvKipcbiAgICogcnVuIGEgV2ViR1BVIHByb2dyYW0uXG4gICAqIEBwYXJhbSBwcm9ncmFtIGEgUHJvZ3JhbUluZm8gaW5zdGFuY2VcbiAgICogQHBhcmFtIGlucHV0VGVuc29yVmlld3MgYSBUZW5zb3JWaWV3IGFycmF5LiBlYWNoIGVsZW1lbnQgcmVwcmVzZW50cyBhIHZhbHVlIGFscmVhZHkgZXhpc3RzIGluIEdQVS5cbiAgICogQHBhcmFtIG91dHB1dEluZGljZXMgYW4gaW5kaWNlcyBhcnJheS4gZWFjaCBlbGVtZW50IGNhbiBiZSBlaXRoZXIgLTEgKHRlbXBvcmFyeSBkYXRhKSwgLTIgKHBlcnNpc3RlbnQgZGF0YSkgb3IgYW5cbiAgICogaW5kZXggdG8gdGhlIGtlcm5lbCdzIG91dHB1dC5cbiAgICogQHBhcmFtIGNyZWF0ZUtlcm5lbE91dHB1dCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY3JlYXRlIGEgdmFsdWUgdG8ga2VybmVsJ3Mgb3V0cHV0IHdpdGggdGhlIGdpdmVuIGluZGV4XG4gICAqIEBwYXJhbSBjcmVhdGVJbnRlcm1lZGlhdGVPdXRwdXQgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNyZWF0ZSBhIHZhbHVlIGFzIGEgaW50ZXJtZWRpYXRlIHZhbHVlLCBlaXRoZXIgdGVtcG9yYXJ5XG4gICAqIG9yIHBlcnNpc3RlbnQgKG93bmVkIGJ5IHRoZSBjdXJyZW50IGtlcm5lbClcbiAgICogQHJldHVybnMgYSBUZW5zb3JWaWV3IGFycmF5IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICAgKi9cbiAgcnVuKHByb2dyYW06IFByb2dyYW1JbmZvLCBpbnB1dFRlbnNvclZpZXdzOiByZWFkb25seSBUZW5zb3JWaWV3W10sIG91dHB1dEluZGljZXM6IHJlYWRvbmx5IG51bWJlcltdLFxuICAgICAgY3JlYXRlS2VybmVsT3V0cHV0OiAoaW5kZXg6IG51bWJlciwgZGF0YVR5cGU6IG51bWJlciwgZGltczogcmVhZG9ubHkgbnVtYmVyW10pID0+IFRlbnNvclZpZXcsXG4gICAgICBjcmVhdGVJbnRlcm1lZGlhdGVPdXRwdXQ6IChkYXRhVHlwZTogbnVtYmVyLCBkaW1zOiByZWFkb25seSBudW1iZXJbXSkgPT4gVGVuc29yVmlldyxcbiAgICAgIG91dHB1dENvdW50OiBudW1iZXIpOiBUZW5zb3JWaWV3W10ge1xuICAgIFRSQUNFX0ZVTkNfQkVHSU4ocHJvZ3JhbS5uYW1lKTtcbiAgICAvLyBjcmVhdGUgaW5mbyBmb3IgaW5wdXRzXG4gICAgY29uc3QgaW5wdXREYXRhczogR3B1RGF0YVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFRlbnNvclZpZXdzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBkYXRhID0gaW5wdXRUZW5zb3JWaWV3c1tpXS5kYXRhO1xuICAgICAgLy8gaWYgdGVuc29yIHZpZXcgZGF0YSBpcyAwLCBpdCBtZWFucyB0aGUgb3V0cHV0IGlzIHplcm8tc2l6ZWQgdGVuc29yLCBhbmQgdGhlcmUgaXMgbm8gR1BVIGRhdGEgZm9yIGl0LlxuICAgICAgaWYgKGRhdGEgPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBncHVEYXRhID0gdGhpcy5ncHVEYXRhTWFuYWdlci5nZXQoZGF0YSk7XG4gICAgICBpZiAoIWdwdURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBHUFUgZGF0YSBmb3IgaW5wdXQ6ICR7ZGF0YX1gKTtcbiAgICAgIH1cbiAgICAgIGlucHV0RGF0YXMucHVzaChncHVEYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCB7b3V0cHV0cywgZGlzcGF0Y2hHcm91cCwgcHJvZ3JhbVVuaWZvcm1zfSA9IHByb2dyYW0uZ2V0UnVuRGF0YShpbnB1dFRlbnNvclZpZXdzKTtcblxuICAgIC8vIGNoZWNrIG91dHB1dCBpbmRpY2VzXG4gICAgY29uc3QgdmFsaWRhdGVkT3V0cHV0SW5kaWNlcyA9IG91dHB1dEluZGljZXMubGVuZ3RoID09PSAwID8gb3V0cHV0cy5tYXAoKF8sIGkpID0+IGkpIDogb3V0cHV0SW5kaWNlcztcbiAgICBpZiAodmFsaWRhdGVkT3V0cHV0SW5kaWNlcy5sZW5ndGggIT09IG91dHB1dHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE91dHB1dCBzaXplICR7dmFsaWRhdGVkT3V0cHV0SW5kaWNlcy5sZW5ndGh9IG11c3QgYmUgZXF1YWwgdG8gJHtvdXRwdXRzLmxlbmd0aH0uYCk7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGluZm8gZm9yIG91dHB1dHNcbiAgICBjb25zdCBvdXRwdXRUZW5zb3JWaWV3czogVGVuc29yVmlld1tdID0gW107XG4gICAgY29uc3Qgb3V0cHV0RGF0YXM6IEdwdURhdGFbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0cy5sZW5ndGg7ICsraSkge1xuICAgICAgLy8gdmFsdWUgLTEgYW5kIC0yIGFyZSB1c2VkIGZvciBjcmVhdGluZyB0ZW1wb3JhcnkgYW5kIHBlcnNpc3RlbnQgb3V0cHV0cy5cbiAgICAgIC8vIHZhbHVlIC0zIGlzIHVzZWQgZm9yIHBsYWNlaG9sZGVyIG91dHB1dC4gU28gLTMsIC0yLCAtMSBhbmQgMCwgMSwgMiwgLi4uIGFyZSB2YWxpZFxuICAgICAgLy8gb3V0cHV0IGluZGljZXMuIHNlZSB0eXBlIGRlZmluaXRpb24gb2YgQ29tcHV0ZUNvbnRleHRJbnB1dHNPdXRwdXRzTWFwcGluZyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0pIHx8IHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPCAtMyB8fFxuICAgICAgICAgIHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPj0gb3V0cHV0Q291bnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG91dHB1dCBpbmRleDogJHt2YWxpZGF0ZWRPdXRwdXRJbmRpY2VzW2ldfWApO1xuICAgICAgfVxuICAgICAgaWYgKHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPT09IC0zKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNUZW1wb3JhcnkgPSB2YWxpZGF0ZWRPdXRwdXRJbmRpY2VzW2ldID09PSAtMTtcbiAgICAgIGNvbnN0IGlzUGVyc2lzdGVudCA9IHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPT09IC0yO1xuICAgICAgY29uc3QgdGVuc29yVmlldyA9IChpc1RlbXBvcmFyeSB8fCBpc1BlcnNpc3RlbnQpID9cbiAgICAgICAgICBjcmVhdGVJbnRlcm1lZGlhdGVPdXRwdXQob3V0cHV0c1tpXS5kYXRhVHlwZSwgb3V0cHV0c1tpXS5kaW1zKSA6XG4gICAgICAgICAgY3JlYXRlS2VybmVsT3V0cHV0KHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0sIG91dHB1dHNbaV0uZGF0YVR5cGUsIG91dHB1dHNbaV0uZGltcyk7XG4gICAgICBvdXRwdXRUZW5zb3JWaWV3cy5wdXNoKHRlbnNvclZpZXcpO1xuICAgICAgLy8gaWYgdGVuc29yIHZpZXcgZGF0YSBpcyAwLCBpdCBtZWFucyB0aGUgb3V0cHV0IGlzIHplcm8tc2l6ZWQgdGVuc29yLCBhbmQgdGhlcmUgaXMgbm8gR1BVIGRhdGEgZm9yIGl0LlxuICAgICAgaWYgKHRlbnNvclZpZXcuZGF0YSA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdwdURhdGEgPSB0aGlzLmdwdURhdGFNYW5hZ2VyLmdldCh0ZW5zb3JWaWV3LmRhdGEpO1xuICAgICAgaWYgKCFncHVEYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gR1BVIGRhdGEgZm9yIG91dHB1dDogJHt0ZW5zb3JWaWV3LmRhdGF9YCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNUZW1wb3JhcnkpIHtcbiAgICAgICAgdGhpcy50ZW1wb3JhcnlEYXRhLnB1c2goZ3B1RGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNQZXJzaXN0ZW50KSB7XG4gICAgICAgIGxldCBwZXJzaXN0ZW50RGF0YSA9IHRoaXMua2VybmVsUGVyc2lzdGVudERhdGEuZ2V0KHRoaXMuY3VycmVudEtlcm5lbElkISk7XG4gICAgICAgIGlmICghcGVyc2lzdGVudERhdGEpIHtcbiAgICAgICAgICBwZXJzaXN0ZW50RGF0YSA9IFtdO1xuICAgICAgICAgIHRoaXMua2VybmVsUGVyc2lzdGVudERhdGEuc2V0KHRoaXMuY3VycmVudEtlcm5lbElkISwgcGVyc2lzdGVudERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHBlcnNpc3RlbnREYXRhLnB1c2goZ3B1RGF0YSk7XG4gICAgICB9XG4gICAgICBvdXRwdXREYXRhcy5wdXNoKGdwdURhdGEpO1xuICAgIH1cblxuICAgIC8vIHdoZW4gdGhlcmUgYXJlIGFueSB6ZXJvLXNpemVkIHRlbnNvciBpbiB0aGUgaW5wdXRzIG9yIG91dHB1dHMsIHdlIHNob3VsZCByZXBvcnQgZXJyb3IgdW5sZXNzIGFsbCBvdXRwdXRzIGFyZVxuICAgIC8vIHplcm8tc2l6ZWQgdGVuc29ycy5cbiAgICBpZiAoaW5wdXREYXRhcy5sZW5ndGggIT09IGlucHV0VGVuc29yVmlld3MubGVuZ3RoIHx8IG91dHB1dERhdGFzLmxlbmd0aCAhPT0gb3V0cHV0VGVuc29yVmlld3MubGVuZ3RoKSB7XG4gICAgICAvLyBpZiBhbGwgb3V0cHV0cyBhcmUgemVyby1zaXplZCB0ZW5zb3JzLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJ1biB0aGUgcHJvZ3JhbS5cbiAgICAgIGlmIChvdXRwdXREYXRhcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgVFJBQ0VfRlVOQ19FTkQocHJvZ3JhbS5uYW1lKTtcbiAgICAgICAgcmV0dXJuIG91dHB1dFRlbnNvclZpZXdzO1xuICAgICAgfVxuICAgICAgLy8gaWYgc29tZSBvdXRwdXRzIGFyZSB6ZXJvLXNpemVkIHRlbnNvcnMsIHJlcG9ydCBhbiBlcnJvci5cbiAgICAgIC8vXG4gICAgICAvLyBUT0RPOiBzbyBmYXIgd2UgZG9uJ3Qgc2VlIGFueSB1c2UgY2FzZSB0aGF0IG91dHB1dHMgaW5jbHVkZSBib3RoIHplcm8tc2l6ZWQgdGVuc29ycyBhbmQgbm9uLXplcm8tc2l6ZWQgdGVuc29ycy5cbiAgICAgIC8vIElmIHdlIHNlZSBzdWNoIHVzZSBjYXNlLCB3ZSBuZWVkIHRvIG1ha2UgYSBjaGFuZ2UgaGVyZSB0byBzdXBwb3J0IGl0LlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQcm9ncmFtICR7cHJvZ3JhbS5uYW1lfSBoYXMgemVyby1zaXplZCB0ZW5zb3IocykgaW4gaW5wdXRzIG9yIG91dHB1dHMuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBub3cuYCk7XG4gICAgfVxuXG4gICAgLy8gbG9hZCB1bmlmb3Jtc1xuICAgIC8vIFRPRE86IGFkZCBjYWNoZSBmb3IgdW5pZm9ybSAoaXMgaXQgbmVjZXNzYXJ5PylcbiAgICAvL1xuICAgIGxldCB1bmlmb3JtQnVmZmVyQmluZGluZzogR1BVQmluZGluZ1Jlc291cmNlfHVuZGVmaW5lZDtcbiAgICBpZiAocHJvZ3JhbVVuaWZvcm1zKSB7XG4gICAgICBsZXQgY3VycmVudE9mZnNldCA9IDA7XG4gICAgICBjb25zdCBvZmZzZXRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICBwcm9ncmFtVW5pZm9ybXMuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHR5cGVvZiB2LmRhdGEgPT09ICdudW1iZXInID8gW3YuZGF0YV0gOiB2LmRhdGE7XG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvV0dTTC8jYWxpZ25vZlxuICAgICAgICBjb25zdCBzaXplT2ZFbGVtZW50ID0gdi50eXBlID09PSBEYXRhVHlwZS5mbG9hdDE2ID8gMiA6IDQ7XG4gICAgICAgIGxldCBzaXplT2ZWZWNPck1hdDtcbiAgICAgICAgbGV0IGJhc2VBbGlnbm1lbnQ7XG4gICAgICAgIGlmICh2LnR5cGUgPT09IERhdGFUeXBlLmZsb2F0MTYpIHtcbiAgICAgICAgICBiYXNlQWxpZ25tZW50ID0gZGF0YS5sZW5ndGggPiA0ID8gMTYgOiAoZGF0YS5sZW5ndGggPiAyID8gOCA6IGRhdGEubGVuZ3RoICogc2l6ZU9mRWxlbWVudCk7XG4gICAgICAgICAgc2l6ZU9mVmVjT3JNYXQgPSBkYXRhLmxlbmd0aCA+IDQgPyAxNiA6IHNpemVPZkVsZW1lbnQgKiBkYXRhLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYXNlQWxpZ25tZW50ID0gZGF0YS5sZW5ndGggPD0gMiA/IGRhdGEubGVuZ3RoICogc2l6ZU9mRWxlbWVudCA6IDE2O1xuICAgICAgICAgIHNpemVPZlZlY09yTWF0ID0gMTY7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudE9mZnNldCA9IE1hdGguY2VpbChjdXJyZW50T2Zmc2V0IC8gYmFzZUFsaWdubWVudCkgKiBiYXNlQWxpZ25tZW50O1xuICAgICAgICBvZmZzZXRzLnB1c2goY3VycmVudE9mZnNldCk7XG4gICAgICAgIC8vIEZvciBub24tZmxvYXQxNiB0eXBlLCB3aGVuIGRhdGEubGVuZ3RoID4gNCwgdGhlIHVuaWZvcm0gdmFyaWFibGUgaXMgb2YgdHlwZSBhcnJheTx2ZWM0PGkzMnx1MzJ8ZjMyPixOPiwgd2hlcmVcbiAgICAgICAgLy8gTiA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQpIGFuZCBTaXplT2YodmVjNDxpMzJ8dTMyfGYzMj4pID0gMTYuIFRoZSB0b3RhbCBieXRlIGxlbmd0aCBpcyBOICpcbiAgICAgICAgLy8gU2l6ZU9mKHZlYzQ8aTMyfHUzMnxmMzI+KS4gRm9yIGZsb2F0MTYgdHlwZSwgd2hlbiBkYXRhLmxlbmd0aCA+IDQsIHRoZSB1bmlmb3JtIHZhcmlhYmxlIGlzIG9mIHR5cGVcbiAgICAgICAgLy8gYXJyYXk8bWF0Mng0PGYxNj4sTj4sIHdoZXJlIE4gPSBNYXRoLmNlaWwoZGF0YS5sZW5ndGggLyA4KSBhbmQgU2l6ZU9mKG1hdDJ4NDxmMTY+KSA9IDE2LiBUaGUgdG90YWwgYnl0ZVxuICAgICAgICAvLyBsZW5ndGggaXMgTiAqIFNpemVPZihtYXQyeDQ8ZjE2PikuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRQZXJWZWNPck1hdCA9IHYudHlwZSA9PT0gRGF0YVR5cGUuZmxvYXQxNiA/IDggOiA0O1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGRhdGEubGVuZ3RoID4gNCA/IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIGVsZW1lbnRQZXJWZWNPck1hdCkgKiBzaXplT2ZWZWNPck1hdCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5sZW5ndGggKiBzaXplT2ZFbGVtZW50O1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1lZXQgYWxpZ25tZW50IG9mIHN0cnVjdCBoZXJlOiBodHRwczovL3d3dy53My5vcmcvVFIvV0dTTC8jYWxpZ25tZW50LWFuZC1zaXplLiBGb3Igc2ltcGxpY2l0eSwgc2V0XG4gICAgICAvLyBtYXhBbGlnbm1lbnRPZkZpZWxkIHRvIDE2IHNpbmNlIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBoYXMgYmVlbiByb3VuZGVkIHVwIHRvIDE2LlxuICAgICAgY29uc3QgbWF4QWxpZ25tZW50T2ZGaWVsZCA9IDE2O1xuICAgICAgY3VycmVudE9mZnNldCA9IE1hdGguY2VpbChjdXJyZW50T2Zmc2V0IC8gbWF4QWxpZ25tZW50T2ZGaWVsZCkgKiBtYXhBbGlnbm1lbnRPZkZpZWxkO1xuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoY3VycmVudE9mZnNldCk7XG4gICAgICBwcm9ncmFtVW5pZm9ybXMuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBvZmZzZXRzW2ldO1xuICAgICAgICBjb25zdCBkYXRhID0gdHlwZW9mIHYuZGF0YSA9PT0gJ251bWJlcicgPyBbdi5kYXRhXSA6IHYuZGF0YTtcbiAgICAgICAgaWYgKHYudHlwZSA9PT0gRGF0YVR5cGUuaW50MzIpIHtcbiAgICAgICAgICBuZXcgSW50MzJBcnJheShhcnJheUJ1ZmZlciwgb2Zmc2V0LCBkYXRhLmxlbmd0aCkuc2V0KGRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKHYudHlwZSA9PT0gRGF0YVR5cGUudWludDMyKSB7XG4gICAgICAgICAgbmV3IFVpbnQzMkFycmF5KGFycmF5QnVmZmVyLCBvZmZzZXQsIGRhdGEubGVuZ3RoKS5zZXQoZGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAodi50eXBlID09PSBEYXRhVHlwZS5mbG9hdDE2KSB7XG4gICAgICAgICAgLy8gVE9ETzogdXNlIEZsb2F0MTZBcnJheS5cbiAgICAgICAgICBuZXcgVWludDE2QXJyYXkoYXJyYXlCdWZmZXIsIG9mZnNldCwgZGF0YS5sZW5ndGgpLnNldChkYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmICh2LnR5cGUgPT09IERhdGFUeXBlLmZsb2F0KSB7XG4gICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShhcnJheUJ1ZmZlciwgb2Zmc2V0LCBkYXRhLmxlbmd0aCkuc2V0KGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdW5pZm9ybSB0eXBlOiAke3RlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nKHYudHlwZSl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB1bmlmb3JtQnVmZmVyRGF0YSA9XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLmNyZWF0ZShjdXJyZW50T2Zmc2V0LCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0pO1xuICAgICAgdGhpcy5kZXZpY2UucXVldWUud3JpdGVCdWZmZXIodW5pZm9ybUJ1ZmZlckRhdGEuYnVmZmVyLCAwLCBhcnJheUJ1ZmZlciwgMCwgY3VycmVudE9mZnNldCk7XG4gICAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLnJlbGVhc2UodW5pZm9ybUJ1ZmZlckRhdGEuaWQpO1xuICAgICAgdW5pZm9ybUJ1ZmZlckJpbmRpbmcgPSB7b2Zmc2V0OiAwLCBzaXplOiBjdXJyZW50T2Zmc2V0LCBidWZmZXI6IHVuaWZvcm1CdWZmZXJEYXRhLmJ1ZmZlcn07XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZERpc3BhdGNoR3JvdXAgPSB0aGlzLnByb2dyYW1NYW5hZ2VyLm5vcm1hbGl6ZURpc3BhdGNoR3JvdXBTaXplKGRpc3BhdGNoR3JvdXApO1xuICAgIGNvbnN0IGlzMURpbWVuc2lvbkRpc3BhdGNoID0gbm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMV0gPT09IDEgJiYgbm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMl0gPT09IDE7XG4gICAgLy8gZ2V0IHByb2dyYW0gaW5mb1xuICAgIGNvbnN0IGtleSA9IGdldFByb2dyYW1JbmZvVW5pcXVlS2V5KHByb2dyYW0sIGlucHV0VGVuc29yVmlld3MsIGlzMURpbWVuc2lvbkRpc3BhdGNoKTtcbiAgICBsZXQgYXJ0aWZhY3QgPSB0aGlzLnByb2dyYW1NYW5hZ2VyLmdldEFydGlmYWN0KGtleSk7XG4gICAgaWYgKCFhcnRpZmFjdCkge1xuICAgICAgYXJ0aWZhY3QgPSB0aGlzLnByb2dyYW1NYW5hZ2VyLmJ1aWxkKHByb2dyYW0sIG5vcm1hbGl6ZWREaXNwYXRjaEdyb3VwKTtcbiAgICAgIHRoaXMucHJvZ3JhbU1hbmFnZXIuc2V0QXJ0aWZhY3Qoa2V5LCBhcnRpZmFjdCk7XG4gICAgICBMT0dfREVCVUcoJ2luZm8nLCAoKSA9PiBgW2FydGlmYWN0XSBrZXk6ICR7a2V5fSwgcHJvZ3JhbU5hbWU6ICR7cHJvZ3JhbS5uYW1lfWApO1xuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIHVuaWZvcm0gdmFyaWFibGVzXG4gICAgaWYgKHByb2dyYW1Vbmlmb3JtcyAmJiBhcnRpZmFjdC51bmlmb3JtVmFyaWFibGVzSW5mbykge1xuICAgICAgaWYgKHByb2dyYW1Vbmlmb3Jtcy5sZW5ndGggIT09IGFydGlmYWN0LnVuaWZvcm1WYXJpYWJsZXNJbmZvLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaWZvcm0gdmFyaWFibGVzIGNvdW50IG1pc21hdGNoOiBleHBlY3QgJHthcnRpZmFjdC51bmlmb3JtVmFyaWFibGVzSW5mby5sZW5ndGh9LCBnb3QgJHtcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5sZW5ndGh9IGluIHByb2dyYW0gXCIke2FydGlmYWN0LnByb2dyYW1JbmZvLm5hbWV9XCIuYCk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2dyYW1Vbmlmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB1bmlmb3JtID0gcHJvZ3JhbVVuaWZvcm1zW2ldO1xuICAgICAgICBjb25zdCBhY3R1YWxUeXBlID0gdW5pZm9ybS50eXBlO1xuICAgICAgICBjb25zdCBhY3R1YWxMZW5ndGggPSB0eXBlb2YgdW5pZm9ybS5kYXRhID09PSAnbnVtYmVyJyA/IDEgOiB1bmlmb3JtLmRhdGEubGVuZ3RoO1xuICAgICAgICBjb25zdCBbdHlwZSwgbGVuZ3RoXSA9IGFydGlmYWN0LnVuaWZvcm1WYXJpYWJsZXNJbmZvW2ldO1xuICAgICAgICBpZiAoYWN0dWFsVHlwZSAhPT0gdHlwZSB8fCBhY3R1YWxMZW5ndGggIT09IGxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pZm9ybSB2YXJpYWJsZSAke2l9IG1pc21hdGNoOiBleHBlY3QgdHlwZSAke3R5cGV9IHdpdGggc2l6ZSAke2xlbmd0aH0sIGdvdCB0eXBlICR7XG4gICAgICAgICAgICAgIGFjdHVhbFR5cGV9IHdpdGggc2l6ZSAke2FjdHVhbExlbmd0aH0gaW4gcHJvZ3JhbSBcIiR7YXJ0aWZhY3QucHJvZ3JhbUluZm8ubmFtZX1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIExPR19ERUJVRyhcbiAgICAgICAgJ2luZm8nLFxuICAgICAgICAoKSA9PiBgW1Byb2dyYW1NYW5hZ2VyXSBydW4gXCIke3Byb2dyYW0ubmFtZX1cIiAoa2V5PSR7a2V5fSkgd2l0aCAke25vcm1hbGl6ZWREaXNwYXRjaEdyb3VwWzBdfXgke1xuICAgICAgICAgICAgbm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMV19eCR7bm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMl19YCk7XG5cbiAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09ICdub25lJyB8fCB0aGlzLnNlc3Npb25TdGF0dXMgPT09ICdjYXB0dXJpbmcnKSB7XG4gICAgICBjb25zdCBwZW5kaW5nS2VybmVsSW5mbzogUGVuZGluZ0tlcm5lbEluZm8gPSB7XG4gICAgICAgIGtlcm5lbElkOiB0aGlzLmN1cnJlbnRLZXJuZWxJZCEsXG4gICAgICAgIHByb2dyYW1OYW1lOiBhcnRpZmFjdC5wcm9ncmFtSW5mby5uYW1lLFxuICAgICAgICBpbnB1dFRlbnNvclZpZXdzLFxuICAgICAgICBvdXRwdXRUZW5zb3JWaWV3cyxcbiAgICAgIH07XG4gICAgICB0aGlzLnBlbmRpbmdLZXJuZWxzLnB1c2gocGVuZGluZ0tlcm5lbEluZm8pO1xuXG4gICAgICBpZiAodGhpcy5zZXNzaW9uU3RhdHVzID09PSAnY2FwdHVyaW5nJykge1xuICAgICAgICBjb25zdCBzZXNzaW9uUGVuZGluZ0tlcm5lbHMgPSB0aGlzLmNhcHR1cmVkUGVuZGluZ0tlcm5lbHMuZ2V0KHRoaXMuY3VycmVudFNlc3Npb25JZCEpO1xuICAgICAgICBzZXNzaW9uUGVuZGluZ0tlcm5lbHMhLnB1c2gocGVuZGluZ0tlcm5lbEluZm8pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJvZ3JhbU1hbmFnZXIucnVuKGFydGlmYWN0LCBpbnB1dERhdGFzLCBvdXRwdXREYXRhcywgbm9ybWFsaXplZERpc3BhdGNoR3JvdXAsIHVuaWZvcm1CdWZmZXJCaW5kaW5nKTtcblxuICAgIFRSQUNFX0ZVTkNfRU5EKHByb2dyYW0ubmFtZSk7XG4gICAgcmV0dXJuIG91dHB1dFRlbnNvclZpZXdzO1xuICB9XG5cbiAgdXBsb2FkKGdwdURhdGFJZDogbnVtYmVyLCBkYXRhOiBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgdGhpcy5ncHVEYXRhTWFuYWdlci51cGxvYWQoZ3B1RGF0YUlkLCBkYXRhKTtcbiAgfVxuXG4gIG1lbWNweShzcmM6IG51bWJlciwgZHN0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLm1lbWNweShzcmMsIGRzdCk7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChncHVEYXRhSWQ6IG51bWJlciwgZ2V0VGFyZ2V0QnVmZmVyOiAoKSA9PiBVaW50OEFycmF5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gdGhlIHVuZGVybHlpbmcgYnVmZmVyIG1heSBiZSBjaGFuZ2VkIGFmdGVyIHRoZSBhc3luYyBmdW5jdGlvbiBpcyBjYWxsZWQuIHNvIHdlIHVzZSBhIGdldHRlciBmdW5jdGlvbiB0byBtYWtlIHN1cmVcbiAgICAvLyB0aGUgYnVmZmVyIGlzIHVwLXRvLWRhdGUuXG4gICAgYXdhaXQgdGhpcy5ncHVEYXRhTWFuYWdlci5kb3dubG9hZChncHVEYXRhSWQsIGdldFRhcmdldEJ1ZmZlcik7XG4gIH1cblxuICBhbGxvYyhzaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdwdURhdGFNYW5hZ2VyLmNyZWF0ZShzaXplKS5pZDtcbiAgfVxuXG4gIGZyZWUocHRyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdwdURhdGFNYW5hZ2VyLnJlbGVhc2UocHRyKTtcbiAgfVxuXG4gIGNyZWF0ZUtlcm5lbChrZXJuZWxUeXBlOiBzdHJpbmcsIGtlcm5lbElkOiBudW1iZXIsIGF0dHJpYnV0ZTogdW5rbm93biwga2VybmVsTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3AgPSBXRUJHUFVfT1BfUkVTT0xWRV9SVUxFUy5nZXQoa2VybmVsVHlwZSk7XG4gICAgaWYgKCFvcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXJuZWwgbm90IGltcGxlbWVudGVkOiAke2tlcm5lbFR5cGV9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qga2VybmVsSW5mbzogS2VybmVsSW5mbyA9IHtcbiAgICAgIGtlcm5lbFR5cGUsXG4gICAgICBrZXJuZWxOYW1lLFxuICAgICAga2VybmVsRW50cnk6IG9wWzBdLFxuICAgICAgYXR0cmlidXRlczogW29wWzFdLCBhdHRyaWJ1dGVdLFxuICAgIH07XG4gICAgdGhpcy5rZXJuZWxzLnNldChrZXJuZWxJZCwga2VybmVsSW5mbyk7XG4gIH1cblxuICByZWxlYXNlS2VybmVsKGtlcm5lbElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwZXJzaXN0ZW50RGF0YSA9IHRoaXMua2VybmVsUGVyc2lzdGVudERhdGEuZ2V0KGtlcm5lbElkKTtcbiAgICBpZiAocGVyc2lzdGVudERhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgZGF0YSBvZiBwZXJzaXN0ZW50RGF0YSkge1xuICAgICAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLnJlbGVhc2UoZGF0YS5pZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmtlcm5lbFBlcnNpc3RlbnREYXRhLmRlbGV0ZShrZXJuZWxJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXJuZWxDdXN0b21EYXRhLmRlbGV0ZShrZXJuZWxJZCk7XG4gICAgdGhpcy5rZXJuZWxzLmRlbGV0ZShrZXJuZWxJZCk7XG4gIH1cblxuICBjb21wdXRlS2VybmVsKGtlcm5lbElkOiBudW1iZXIsIGNvbnRleHQ6IENvbXB1dGVDb250ZXh0LCBlcnJvcnM6IEFycmF5PFByb21pc2U8c3RyaW5nfG51bGw+Pik6IG51bWJlciB7XG4gICAgY29uc3Qga2VybmVsID0gdGhpcy5rZXJuZWxzLmdldChrZXJuZWxJZCk7XG4gICAgaWYgKCFrZXJuZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihga2VybmVsIG5vdCBjcmVhdGVkOiAke2tlcm5lbElkfWApO1xuICAgIH1cbiAgICBjb25zdCBrZXJuZWxUeXBlID0ga2VybmVsLmtlcm5lbFR5cGU7XG4gICAgY29uc3Qga2VybmVsTmFtZSA9IGtlcm5lbC5rZXJuZWxOYW1lO1xuICAgIGNvbnN0IGtlcm5lbEVudHJ5ID0ga2VybmVsLmtlcm5lbEVudHJ5O1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBrZXJuZWwuYXR0cmlidXRlcztcbiAgICBpZiAodGhpcy5jdXJyZW50S2VybmVsSWQgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihga2VybmVsIFwiWyR7a2VybmVsVHlwZX1dICR7a2VybmVsTmFtZX1cIiBpcyBub3QgYWxsb3dlZCB0byBiZSBjYWxsZWQgcmVjdXJzaXZlbHlgKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50S2VybmVsSWQgPSBrZXJuZWxJZDtcblxuICAgIC8vIHBhcnNlIGF0dHJpYnV0ZXMgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKGF0dHJpYnV0ZXNbMF0pIHtcbiAgICAgIGF0dHJpYnV0ZXNbMV0gPSBhdHRyaWJ1dGVzWzBdKGF0dHJpYnV0ZXNbMV0pO1xuICAgICAgYXR0cmlidXRlc1swXSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBMT0dfREVCVUcoJ2luZm8nLCAoKSA9PiBgW1dlYkdQVV0gU3RhcnQgdG8gcnVuIGtlcm5lbCBcIlske2tlcm5lbFR5cGV9XSAke2tlcm5lbE5hbWV9XCIuLi5gKTtcblxuICAgIGNvbnN0IHVzZUVycm9yU2NvcGUgPSB0aGlzLmVudi5kZWJ1ZztcblxuICAgIHRoaXMudGVtcG9yYXJ5RGF0YSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBpZiAodXNlRXJyb3JTY29wZSkge1xuICAgICAgICB0aGlzLmRldmljZS5wdXNoRXJyb3JTY29wZSgndmFsaWRhdGlvbicpO1xuICAgICAgfVxuXG4gICAgICBrZXJuZWxFbnRyeShjb250ZXh0LCBhdHRyaWJ1dGVzWzFdKTtcbiAgICAgIHJldHVybiAwOyAgLy8gT1JUX09LXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JzLnB1c2goUHJvbWlzZS5yZXNvbHZlKGBbV2ViR1BVXSBLZXJuZWwgXCJbJHtrZXJuZWxUeXBlfV0gJHtrZXJuZWxOYW1lfVwiIGZhaWxlZC4gJHtlfWApKTtcbiAgICAgIHJldHVybiAxOyAgLy8gT1JUX0ZBSUxcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHVzZUVycm9yU2NvcGUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2godGhpcy5kZXZpY2UucG9wRXJyb3JTY29wZSgpLnRoZW4oXG4gICAgICAgICAgICBlcnIgPT4gZXJyID8gYEdQVSB2YWxpZGF0aW9uIGVycm9yIGZvciBrZXJuZWwgXCJbJHtrZXJuZWxUeXBlfV0gJHtrZXJuZWxOYW1lfVwiOiAke2Vyci5tZXNzYWdlfWAgOiBudWxsKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZGF0YSBvZiB0aGlzLnRlbXBvcmFyeURhdGEpIHtcbiAgICAgICAgdGhpcy5ncHVEYXRhTWFuYWdlci5yZWxlYXNlKGRhdGEuaWQpO1xuICAgICAgfVxuICAgICAgdGhpcy50ZW1wb3JhcnlEYXRhID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRLZXJuZWxJZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gI3JlZ2lvbiBleHRlcm5hbCBidWZmZXJcbiAgcmVnaXN0ZXJCdWZmZXIoc2Vzc2lvbklkOiBudW1iZXIsIGluZGV4OiBudW1iZXIsIGJ1ZmZlcjogR1BVQnVmZmVyLCBzaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBzZXNzaW9uSW5wdXRPdXRwdXRNYXBwaW5nID0gdGhpcy5zZXNzaW9uRXh0ZXJuYWxEYXRhTWFwcGluZy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIXNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcpIHtcbiAgICAgIHNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcgPSBuZXcgTWFwKCk7XG4gICAgICB0aGlzLnNlc3Npb25FeHRlcm5hbERhdGFNYXBwaW5nLnNldChzZXNzaW9uSWQsIHNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcpO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzQnVmZmVyID0gc2Vzc2lvbklucHV0T3V0cHV0TWFwcGluZy5nZXQoaW5kZXgpO1xuICAgIGNvbnN0IGlkID0gdGhpcy5ncHVEYXRhTWFuYWdlci5yZWdpc3RlckV4dGVybmFsQnVmZmVyKGJ1ZmZlciwgc2l6ZSwgcHJldmlvdXNCdWZmZXI/LlsxXSk7XG4gICAgc2Vzc2lvbklucHV0T3V0cHV0TWFwcGluZy5zZXQoaW5kZXgsIFtpZCwgYnVmZmVyXSk7XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIHVucmVnaXN0ZXJCdWZmZXJzKHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc2Vzc2lvbklucHV0T3V0cHV0TWFwcGluZyA9IHRoaXMuc2Vzc2lvbkV4dGVybmFsRGF0YU1hcHBpbmcuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKHNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcpIHtcbiAgICAgIHNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcuZm9yRWFjaChidWZmZXJJbmZvID0+IHRoaXMuZ3B1RGF0YU1hbmFnZXIudW5yZWdpc3RlckV4dGVybmFsQnVmZmVyKGJ1ZmZlckluZm9bMV0pKTtcbiAgICAgIHRoaXMuc2Vzc2lvbkV4dGVybmFsRGF0YU1hcHBpbmcuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgfVxuICB9XG4gIGdldEJ1ZmZlcihncHVEYXRhSWQ6IG51bWJlcik6IEdQVUJ1ZmZlciB7XG4gICAgY29uc3QgZ3B1RGF0YSA9IHRoaXMuZ3B1RGF0YU1hbmFnZXIuZ2V0KGdwdURhdGFJZCk7XG4gICAgaWYgKCFncHVEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIEdQVSBkYXRhIGZvciBidWZmZXI6ICR7Z3B1RGF0YUlkfWApO1xuICAgIH1cbiAgICByZXR1cm4gZ3B1RGF0YS5idWZmZXI7XG4gIH1cbiAgY3JlYXRlRG93bmxvYWRlcihncHVCdWZmZXI6IEdQVUJ1ZmZlciwgc2l6ZTogbnVtYmVyLCB0eXBlOiBUZW5zb3IuR3B1QnVmZmVyRGF0YVR5cGVzKTpcbiAgICAgICgpID0+IFByb21pc2U8VGVuc29yLkRhdGFUeXBlPiB7XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBkb3dubG9hZEdwdURhdGEodGhpcywgZ3B1QnVmZmVyLCBzaXplKTtcbiAgICAgIHJldHVybiBjcmVhdGVWaWV3KGRhdGEuYnVmZmVyLCB0eXBlKTtcbiAgICB9O1xuICB9XG4gIC8vICNlbmRyZWdpb25cbiAgd3JpdGVUaW1lc3RhbXAoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnF1ZXJ5VHlwZSAhPT0gJ2luc2lkZS1wYXNzZXMnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAodGhpcy5jb21wdXRlUGFzc0VuY29kZXIgYXMgYW55KS53cml0ZVRpbWVzdGFtcCh0aGlzLnF1ZXJ5U2V0LCBpbmRleCk7XG4gIH1cbiAgc2V0UXVlcnlUeXBlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlUeXBlID0gJ25vbmUnO1xuICAgIGlmICh0aGlzLmVudi53ZWJncHUucHJvZmlsaW5nPy5tb2RlID09PSAnZGVmYXVsdCcgfHxcbiAgICAgICAgKHR5cGVvZiB0aGlzLmVudi50cmFjZSA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmVudi53YXNtLnRyYWNlIDogdGhpcy5lbnYudHJhY2UpKSB7XG4gICAgICBpZiAodGhpcy5kZXZpY2UuZmVhdHVyZXMuaGFzKCdjaHJvbWl1bS1leHBlcmltZW50YWwtdGltZXN0YW1wLXF1ZXJ5LWluc2lkZS1wYXNzZXMnKSkge1xuICAgICAgICB0aGlzLnF1ZXJ5VHlwZSA9ICdpbnNpZGUtcGFzc2VzJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kZXZpY2UuZmVhdHVyZXMuaGFzKCd0aW1lc3RhbXAtcXVlcnknKSkge1xuICAgICAgICB0aGlzLnF1ZXJ5VHlwZSA9ICdhdC1wYXNzZXMnO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09ICdub25lJyAmJiB0eXBlb2YgdGhpcy5xdWVyeVNldCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5xdWVyeVNldCA9IHRoaXMuZGV2aWNlLmNyZWF0ZVF1ZXJ5U2V0KHtcbiAgICAgICAgICB0eXBlOiAndGltZXN0YW1wJyxcbiAgICAgICAgICBjb3VudDogdGhpcy5tYXhEaXNwYXRjaE51bWJlciAqIDIsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnF1ZXJ5UmVzb2x2ZUJ1ZmZlciA9IHRoaXMuZGV2aWNlLmNyZWF0ZUJ1ZmZlcihcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAgICB7c2l6ZTogdGhpcy5tYXhEaXNwYXRjaE51bWJlciAqIDIgKiA4LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfCBHUFVCdWZmZXJVc2FnZS5RVUVSWV9SRVNPTFZFfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FwdHVyZUJlZ2luKCk6IHZvaWQge1xuICAgIExPR19ERUJVRygnaW5mbycsICdjYXB0dXJlQmVnaW4nKTtcbiAgICBpZiAoIXRoaXMuY2FwdHVyZWRDb21tYW5kTGlzdC5nZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkISkpIHtcbiAgICAgIHRoaXMuY2FwdHVyZWRDb21tYW5kTGlzdC5zZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkISwgW10pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2FwdHVyZWRQZW5kaW5nS2VybmVscy5nZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkISkpIHtcbiAgICAgIHRoaXMuY2FwdHVyZWRQZW5kaW5nS2VybmVscy5zZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkISwgW10pO1xuICAgIH1cbiAgICAvLyBmbHVzaCB0aGUgbGVmdCBjb21tYW5kcyBiZWZvcmUgd2UgY2hhbmdlIHRoZSBzdGF0dXMuXG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9ICdjYXB0dXJpbmcnO1xuICB9XG4gIGNhcHR1cmVFbmQoKTogdm9pZCB7XG4gICAgTE9HX0RFQlVHKCdpbmZvJywgJ2NhcHR1cmVFbmQnKTtcbiAgICAvLyBmbHVzaCB0aGUgbGVmdCBjb21tYW5kcyBiZWZvcmUgd2UgY2hhbmdlIHRoZSBzdGF0dXMuXG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9ICdkZWZhdWx0JztcbiAgfVxuICByZXBsYXkoKTogdm9pZCB7XG4gICAgTE9HX0RFQlVHKCdpbmZvJywgJ3JlcGxheScpO1xuICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9ICdyZXBsYXlpbmcnO1xuICAgIGNvbnN0IHNlc3Npb25Db21tYW5kTGlzdCA9IHRoaXMuY2FwdHVyZWRDb21tYW5kTGlzdC5nZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkISk7XG4gICAgY29uc3Qgc2Vzc2lvblBlbmRpbmdLZXJuZWxzID0gdGhpcy5jYXB0dXJlZFBlbmRpbmdLZXJuZWxzLmdldCh0aGlzLmN1cnJlbnRTZXNzaW9uSWQhKTtcbiAgICBjb25zdCBsZW5ndGggPSBzZXNzaW9uQ29tbWFuZExpc3QhLmxlbmd0aDtcbiAgICB0aGlzLnBlbmRpbmdLZXJuZWxzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gdGhpcy5nZXRDb21wdXRlUGFzc0VuY29kZXIoKTtcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBzZXNzaW9uQ29tbWFuZExpc3QhW2ldO1xuICAgICAgdGhpcy53cml0ZVRpbWVzdGFtcCh0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciAqIDIpO1xuICAgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbW1hbmQuY29tcHV0ZVBpcGVsaW5lKTtcbiAgICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgY29tbWFuZC5iaW5kR3JvdXApO1xuICAgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoV29ya2dyb3VwcyguLi5jb21tYW5kLmRpc3BhdGNoR3JvdXApO1xuICAgICAgdGhpcy53cml0ZVRpbWVzdGFtcCh0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciAqIDIgKyAxKTtcbiAgICAgIHRoaXMucGVuZGluZ0Rpc3BhdGNoTnVtYmVyKys7XG4gICAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09ICdub25lJykge1xuICAgICAgICB0aGlzLnBlbmRpbmdLZXJuZWxzLnB1c2goc2Vzc2lvblBlbmRpbmdLZXJuZWxzIVtpXSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgPj0gdGhpcy5tYXhEaXNwYXRjaE51bWJlciB8fCB0aGlzLnF1ZXJ5VHlwZSA9PT0gJ2F0LXBhc3NlcycpIHtcbiAgICAgICAgdGhpcy5lbmRDb21wdXRlUGFzcygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucGVuZGluZ0Rpc3BhdGNoTnVtYmVyID49IHRoaXMubWF4RGlzcGF0Y2hOdW1iZXIpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmbHVzaCB0aGUgbGVmdCBjb21tYW5kcyBiZWZvcmUgd2UgY2hhbmdlIHRoZSBzdGF0dXMuXG4gICAgdGhpcy5mbHVzaCgpO1xuICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9ICdkZWZhdWx0JztcbiAgfVxuXG4gIG9uUmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnVucmVnaXN0ZXJCdWZmZXJzKHNlc3Npb25JZCk7XG4gICAgaWYgKHRoaXMuY2FwdHVyZWRDb21tYW5kTGlzdC5oYXMoc2Vzc2lvbklkKSkge1xuICAgICAgdGhpcy5jYXB0dXJlZENvbW1hbmRMaXN0LmRlbGV0ZShzZXNzaW9uSWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXB0dXJlZFBlbmRpbmdLZXJuZWxzLmhhcyhzZXNzaW9uSWQpKSB7XG4gICAgICB0aGlzLmNhcHR1cmVkUGVuZGluZ0tlcm5lbHMuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgfVxuICAgIHRoaXMuZ3B1RGF0YU1hbmFnZXIub25SZWxlYXNlU2Vzc2lvbihzZXNzaW9uSWQpO1xuICB9XG5cbiAgb25SdW5TdGFydChzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB0aGlzLnNldFF1ZXJ5VHlwZSgpO1xuICB9XG59XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7RW52fSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge09ydFdhc21Nb2R1bGV9IGZyb20gJy4uL2JpbmRpbmcvb3J0LXdhc20nO1xuaW1wb3J0IHtEYXRhVHlwZSwgZ2V0VGVuc29yRWxlbWVudFNpemV9IGZyb20gJy4uL3dhc20tY29tbW9uJztcblxuaW1wb3J0IHtXZWJHcHVCYWNrZW5kfSBmcm9tICcuL2JhY2tlbmQtd2ViZ3B1JztcbmltcG9ydCB7TE9HX0RFQlVHfSBmcm9tICcuL2xvZyc7XG5pbXBvcnQge1RlbnNvclZpZXd9IGZyb20gJy4vdGVuc29yLXZpZXcnO1xuaW1wb3J0IHtTaGFwZVV0aWx9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge0FkYXB0ZXJJbmZvLCBDb21wdXRlQ29udGV4dCwgQ29tcHV0ZUNvbnRleHRJbnB1dHNPdXRwdXRzTWFwcGluZywgUHJvZ3JhbUluZm99IGZyb20gJy4vd2ViZ3B1L3R5cGVzJztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuXG5jbGFzcyBUZW5zb3JWaWV3SW1wbCBpbXBsZW1lbnRzIFRlbnNvclZpZXcge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgbW9kdWxlOiBPcnRXYXNtTW9kdWxlLCBwdWJsaWMgcmVhZG9ubHkgZGF0YVR5cGU6IG51bWJlciwgcHVibGljIHJlYWRvbmx5IGRhdGE6IG51bWJlcixcbiAgICAgIHB1YmxpYyByZWFkb25seSBkaW1zOiByZWFkb25seSBudW1iZXJbXSkge31cblxuICBnZXRGbG9hdDMyQXJyYXkoKTogRmxvYXQzMkFycmF5IHtcbiAgICBpZiAodGhpcy5kYXRhVHlwZSAhPT0gRGF0YVR5cGUuZmxvYXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhIHR5cGUnKTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudENvdW50ID0gU2hhcGVVdGlsLnNpemUodGhpcy5kaW1zKTtcbiAgICByZXR1cm4gZWxlbWVudENvdW50ID09PSAwID8gbmV3IEZsb2F0MzJBcnJheSgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheSh0aGlzLm1vZHVsZS5IRUFQOC5idWZmZXIsIHRoaXMuZGF0YSwgZWxlbWVudENvdW50KTtcbiAgfVxuXG4gIGdldEJpZ0ludDY0QXJyYXkoKTogQmlnSW50NjRBcnJheSB7XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgIT09IERhdGFUeXBlLmludDY0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YSB0eXBlJyk7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRDb3VudCA9IFNoYXBlVXRpbC5zaXplKHRoaXMuZGltcyk7XG4gICAgcmV0dXJuIGVsZW1lbnRDb3VudCA9PT0gMCA/IG5ldyBCaWdJbnQ2NEFycmF5KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnSW50NjRBcnJheSh0aGlzLm1vZHVsZS5IRUFQOC5idWZmZXIsIHRoaXMuZGF0YSwgZWxlbWVudENvdW50KTtcbiAgfVxuXG4gIGdldEludDMyQXJyYXkoKTogSW50MzJBcnJheSB7XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgIT09IERhdGFUeXBlLmludDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YSB0eXBlJyk7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRDb3VudCA9IFNoYXBlVXRpbC5zaXplKHRoaXMuZGltcyk7XG4gICAgcmV0dXJuIGVsZW1lbnRDb3VudCA9PT0gMCA/IG5ldyBJbnQzMkFycmF5KCkgOiBuZXcgSW50MzJBcnJheSh0aGlzLm1vZHVsZS5IRUFQOC5idWZmZXIsIHRoaXMuZGF0YSwgZWxlbWVudENvdW50KTtcbiAgfVxuXG4gIHJlc2hhcGUobmV3RGltczogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3JWaWV3IHtcbiAgICBpZiAoU2hhcGVVdGlsLnNpemUobmV3RGltcykgIT09IFNoYXBlVXRpbC5zaXplKHRoaXMuZGltcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBuZXcgc2hhcGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZW5zb3JWaWV3SW1wbCh0aGlzLm1vZHVsZSwgdGhpcy5kYXRhVHlwZSwgdGhpcy5kYXRhLCBuZXdEaW1zKTtcbiAgfVxufVxuXG5jbGFzcyBDb21wdXRlQ29udGV4dEltcGwgaW1wbGVtZW50cyBDb21wdXRlQ29udGV4dCB7XG4gIHJlYWRvbmx5IGFkYXB0ZXJJbmZvOiBBZGFwdGVySW5mbztcbiAgcmVhZG9ubHkgb3BLZXJuZWxDb250ZXh0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGlucHV0czogcmVhZG9ubHkgVGVuc29yVmlld1tdO1xuICByZWFkb25seSBvdXRwdXRDb3VudDogbnVtYmVyO1xuICBnZXQga2VybmVsQ3VzdG9tRGF0YSgpOiB7W2tleTogc3RyaW5nXTogdW5rbm93bn0ge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuY3VycmVudEtlcm5lbEN1c3RvbURhdGE7XG4gIH1cbiAgZ2V0IGN1c3RvbURhdGFCdWZmZXIoKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMubW9kdWxlLkhFQVBVOC5zdWJhcnJheSh0aGlzLmN1c3RvbURhdGFPZmZzZXQsIHRoaXMuY3VzdG9tRGF0YU9mZnNldCArIHRoaXMuY3VzdG9tRGF0YVNpemUpO1xuICB9XG4gIHByaXZhdGUgY3VzdG9tRGF0YU9mZnNldCA9IDA7XG4gIHByaXZhdGUgY3VzdG9tRGF0YVNpemUgPSAwO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZHVsZTogT3J0V2FzbU1vZHVsZSwgcHJpdmF0ZSBiYWNrZW5kOiBXZWJHcHVCYWNrZW5kLCBjb250ZXh0RGF0YU9mZnNldDogbnVtYmVyKSB7XG4gICAgdGhpcy5hZGFwdGVySW5mbyA9IGJhY2tlbmQuYWRhcHRlckluZm87XG4gICAgY29uc3QgaGVhcFUzMiA9IG1vZHVsZS5IRUFQVTMyO1xuXG4gICAgLy8gZXh0cmFjdCBjb250ZXh0IGRhdGFcbiAgICBsZXQgZGF0YUluZGV4ID0gKGNvbnRleHREYXRhT2Zmc2V0ID4+PiAyKTtcbiAgICB0aGlzLm9wS2VybmVsQ29udGV4dCA9IGhlYXBVMzJbZGF0YUluZGV4KytdO1xuICAgIGNvbnN0IGlucHV0Q291bnQgPSBoZWFwVTMyW2RhdGFJbmRleCsrXTtcbiAgICB0aGlzLm91dHB1dENvdW50ID0gaGVhcFUzMltkYXRhSW5kZXgrK107XG4gICAgdGhpcy5jdXN0b21EYXRhT2Zmc2V0ID0gaGVhcFUzMltkYXRhSW5kZXgrK107XG4gICAgdGhpcy5jdXN0b21EYXRhU2l6ZSA9IGhlYXBVMzJbZGF0YUluZGV4KytdO1xuXG4gICAgY29uc3QgaW5wdXRzOiBUZW5zb3JWaWV3W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgZGF0YVR5cGUgPSBoZWFwVTMyW2RhdGFJbmRleCsrXTtcbiAgICAgIGNvbnN0IGRhdGEgPSBoZWFwVTMyW2RhdGFJbmRleCsrXTtcbiAgICAgIGNvbnN0IGRpbSA9IGhlYXBVMzJbZGF0YUluZGV4KytdO1xuICAgICAgY29uc3QgZGltczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgZGltOyBkKyspIHtcbiAgICAgICAgZGltcy5wdXNoKGhlYXBVMzJbZGF0YUluZGV4KytdKTtcbiAgICAgIH1cbiAgICAgIGlucHV0cy5wdXNoKG5ldyBUZW5zb3JWaWV3SW1wbChtb2R1bGUsIGRhdGFUeXBlLCBkYXRhLCBkaW1zKSk7XG4gICAgfVxuICAgIHRoaXMuaW5wdXRzID0gaW5wdXRzO1xuICB9XG5cbiAgZ2V0TWF4Q29tcHV0ZVdvcmtncm91cFNpemVzKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuYmFja2VuZC5kZXZpY2UubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCwgdGhpcy5iYWNrZW5kLmRldmljZS5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVZLFxuICAgICAgdGhpcy5iYWNrZW5kLmRldmljZS5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVaXG4gICAgXTtcbiAgfVxuXG4gIGdldE1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZGV2aWNlLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemU7XG4gIH1cblxuICBjb21wdXRlKHByb2dyYW06IFByb2dyYW1JbmZvLCBpbnB1dHNPdXRwdXRzTWFwcGluZz86IENvbXB1dGVDb250ZXh0SW5wdXRzT3V0cHV0c01hcHBpbmcpOiBUZW5zb3JWaWV3W10ge1xuICAgIC8vIHByZXBhcmUgaW5wdXRzLiBpbnB1dHMgc2hvdWxkIGFsd2F5cyBiZSB2YWxpZCBkYXRhLlxuICAgIGNvbnN0IG1hcHBlZElucHV0cyA9XG4gICAgICAgIGlucHV0c091dHB1dHNNYXBwaW5nPy5pbnB1dHM/Lm1hcChpID0+IHR5cGVvZiBpID09PSAnbnVtYmVyJyA/IHRoaXMuaW5wdXRzW2ldIDogaSkgPz8gdGhpcy5pbnB1dHM7XG4gICAgLy8gcHJlcGFyZSBvdXRwdXRzLlxuICAgIGNvbnN0IG91dHB1dEluZGljZXMgPSBpbnB1dHNPdXRwdXRzTWFwcGluZz8ub3V0cHV0cyA/PyBbXTtcbiAgICBjb25zdCBjcmVhdGVLZXJuZWxPdXRwdXQgPSAoaW5kZXg6IG51bWJlciwgZGF0YVR5cGU6IG51bWJlciwgZGltczogcmVhZG9ubHkgbnVtYmVyW10pOiBUZW5zb3JWaWV3ID0+XG4gICAgICAgIG5ldyBUZW5zb3JWaWV3SW1wbCh0aGlzLm1vZHVsZSwgZGF0YVR5cGUsIHRoaXMub3V0cHV0KGluZGV4LCBkaW1zKSwgZGltcyk7XG4gICAgY29uc3QgY3JlYXRlVGVtcG9yYXJ5T3V0cHV0ID0gKGRhdGFUeXBlOiBudW1iZXIsIGRpbXM6IHJlYWRvbmx5IG51bWJlcltdKTogVGVuc29yVmlldyA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50U2l6ZSA9IGdldFRlbnNvckVsZW1lbnRTaXplKGRhdGFUeXBlKTtcbiAgICAgIGlmICghZWxlbWVudFNpemUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkYXRhIHR5cGU6ICR7ZGF0YVR5cGV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBidWZmZXJTaXplID0gZWxlbWVudFNpemUgKiBTaGFwZVV0aWwuc2l6ZShkaW1zKTtcbiAgICAgIGNvbnN0IGdwdURhdGFJZCA9IGJ1ZmZlclNpemUgPiAwID8gdGhpcy5iYWNrZW5kLmdwdURhdGFNYW5hZ2VyLmNyZWF0ZShidWZmZXJTaXplKS5pZCA6IDA7XG4gICAgICByZXR1cm4gbmV3IFRlbnNvclZpZXdJbXBsKHRoaXMubW9kdWxlLCBkYXRhVHlwZSwgZ3B1RGF0YUlkLCBkaW1zKTtcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucnVuKFxuICAgICAgICBwcm9ncmFtLCBtYXBwZWRJbnB1dHMsIG91dHB1dEluZGljZXMsIGNyZWF0ZUtlcm5lbE91dHB1dCwgY3JlYXRlVGVtcG9yYXJ5T3V0cHV0LCB0aGlzLm91dHB1dENvdW50KTtcbiAgfVxuXG4gIG91dHB1dChpbmRleDogbnVtYmVyLCBkaW1zOiByZWFkb25seSBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLm1vZHVsZS5zdGFja1NhdmUoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMubW9kdWxlLnN0YWNrQWxsb2MoKDEgKyBkaW1zLmxlbmd0aCkgKiA0IC8qIHNpemVvZihzaXplX3QpICovKTtcbiAgICAgIGxldCBvZmZzZXQgPSBkYXRhID4+IDI7XG4gICAgICB0aGlzLm1vZHVsZS5IRUFQVTMyW29mZnNldCsrXSA9IGRpbXMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMubW9kdWxlLkhFQVBVMzJbb2Zmc2V0KytdID0gZGltc1tpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm1vZHVsZS5fSnNlcE91dHB1dCEodGhpcy5vcEtlcm5lbENvbnRleHQsIGluZGV4LCBkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byBnZW5lcmF0ZSBrZXJuZWwncyBvdXRwdXRbJHtpbmRleH1dIHdpdGggZGltcyBbJHtkaW1zfV0uIGAgK1xuICAgICAgICAgICdJZiB5b3UgYXJlIHJ1bm5pbmcgd2l0aCBwcmUtYWxsb2NhdGVkIG91dHB1dCwgcGxlYXNlIG1ha2Ugc3VyZSB0aGUgb3V0cHV0IHR5cGUvZGltcyBhcmUgY29ycmVjdC4gJyArXG4gICAgICAgICAgYEVycm9yOiAke2V9YCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubW9kdWxlLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBKU0VQIHdpdGggV2ViR1BVIGJhY2tlbmQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgV2ViQXNzZW1ibHkgbW9kdWxlIGlzIGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQgKFwiX09ydEluaXRcIiBpcyBjYWxsZWQpLCBvbmNlIGZvclxuICogZWFjaCBvZiB0aGUgZm9sbG93aW5nIEVQcyBpZiB0aGV5IGFyZSBzcGVjaWZpZWQ6XG4gKiAtIFwid2ViZ3B1XCJcbiAqIC0gXCJ3ZWJublwiXG4gKlxuICogRm9yIFdlYkdQVSwgdGhpcyBmdW5jdGlvbiBleHBlY3RzOlxuICogIC0gV2ViR1BVIGlzIGVuYWJsZWQgaW4gYnVpbGQgKEJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgPT09IGZhbHNlKS5cbiAqICAtIFdlYkdQVSBpcyBhdmFpbGFibGUgaW4gY3VycmVudCBlbnZpcm9ubWVudC4gKGEgdmFsaWQgR1BVQWRhcHRlciBpcyBwYXNzZWQgaW4pXG4gKlxuICogRm9yIFdlYk5OLCB0aGlzIGZ1bmN0aW9uIGV4cGVjdHM6XG4gKiAtIFdlYk5OIGlzIGVuYWJsZWQgaW4gYnVpbGQgKEJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgPT09IGZhbHNlKS5cbiAqIC0gV2ViTk4gaXMgYXZhaWxhYmxlIGluIGN1cnJlbnQgZW52aXJvbm1lbnQuIChuYXZpZ2F0b3IubWwgaXMgbm90IHVuZGVmaW5lZClcbiAqXG4gKiBJZiB0aGUgV2ViQXNzZW1ibHkgbW9kdWxlIGlzIG5vdCBidWlsdCB3aXRoIEpTRVAgc3VwcG9ydCwgdGhpcyBmdW5jdGlvbiB3aWxsIHRocm93IGFuIGVycm9yLiBUaGlzIHdpbGwgaW52YWxpZGF0ZVxuICogJ3dlYmdwdScvJ3dlYm5uJyBiYWNrZW5kLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIEVQLCBlaXRoZXIgXCJ3ZWJncHVcIiBvciBcIndlYm5uXCJcbiAqIEBwYXJhbSBtb2R1bGUgLSB0aGUgT1JUIFdlYkFzc2VtYmx5IG1vZHVsZVxuICogQHBhcmFtIGVudiAtIHRoZSBPUlQgZW52aXJvbm1lbnQgdmFyaWFibGUgKG9ydC5lbnYpXG4gKiBAcGFyYW0gZ3B1QWRhcHRlciAtIHRoZSBwcmUtY3JlYXRlZCBHUFUgYWRhcHRlclxuICovXG5leHBvcnQgY29uc3QgaW5pdCA9XG4gICAgYXN5bmMobmFtZTogJ3dlYmdwdSd8J3dlYm5uJywgbW9kdWxlOiBPcnRXYXNtTW9kdWxlLCBlbnY6IEVudiwgZ3B1QWRhcHRlcj86IEdQVUFkYXB0ZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QganNlcEluaXQgPSBtb2R1bGUuanNlcEluaXQ7XG4gIGlmICghanNlcEluaXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIEpTRVAuIFRoZSBXZWJBc3NlbWJseSBtb2R1bGUgaXMgbm90IGJ1aWx0IHdpdGggSlNFUCBzdXBwb3J0LicpO1xuICB9XG5cbiAgaWYgKG5hbWUgPT09ICd3ZWJncHUnKSB7XG4gICAgY29uc3QgYmFja2VuZCA9IG5ldyBXZWJHcHVCYWNrZW5kKCk7XG4gICAgYXdhaXQgYmFja2VuZC5pbml0aWFsaXplKGVudiwgZ3B1QWRhcHRlciEpO1xuXG4gICAganNlcEluaXQoJ3dlYmdwdScsIFtcbiAgICAgIC8vIGJhY2tlbmRcbiAgICAgIGJhY2tlbmQsXG5cbiAgICAgIC8vIGpzZXBBbGxvYygpXG4gICAgICAoc2l6ZTogbnVtYmVyKSA9PiBiYWNrZW5kLmFsbG9jKHNpemUpLFxuXG4gICAgICAvLyBqc2VwRnJlZSgpXG4gICAgICAocHRyOiBudW1iZXIpID0+IGJhY2tlbmQuZnJlZShwdHIpLFxuXG4gICAgICAvLyBqc2VwQ29weShzcmMsIGRzdCwgc2l6ZSwgaXNTb3VyY2VHcHUpXG4gICAgICAoc3JjOiBudW1iZXIsIGRzdDogbnVtYmVyLCBzaXplOiBudW1iZXIsIGlzU291cmNlR3B1ID0gZmFsc2UpID0+IHtcbiAgICAgICAgaWYgKGlzU291cmNlR3B1KSB7XG4gICAgICAgICAgTE9HX0RFQlVHKCd2ZXJib3NlJywgKCkgPT4gYFtXZWJHUFVdIGpzZXBDb3B5R3B1VG9HcHU6IHNyYz0ke3NyY30sIGRzdD0ke2RzdH0sIHNpemU9JHtzaXplfWApO1xuICAgICAgICAgIGJhY2tlbmQubWVtY3B5KHNyYywgZHN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBMT0dfREVCVUcoJ3ZlcmJvc2UnLCAoKSA9PiBgW1dlYkdQVV0ganNlcENvcHlDcHVUb0dwdTogZGF0YU9mZnNldD0ke3NyY30sIGdwdURhdGFJZD0ke2RzdH0sIHNpemU9JHtzaXplfWApO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBtb2R1bGUuSEVBUFU4LnN1YmFycmF5KHNyYyA+Pj4gMCwgKHNyYyA+Pj4gMCkgKyBzaXplKTtcbiAgICAgICAgICBiYWNrZW5kLnVwbG9hZChkc3QsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBqc2VwQ29weUFzeW5jKHNyYywgZHN0LCBzaXplKVxuICAgICAgYXN5bmMoZ3B1RGF0YUlkOiBudW1iZXIsIGRhdGFPZmZzZXQ6IG51bWJlciwgc2l6ZTogbnVtYmVyKTpcbiAgICAgICAgICBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIExPR19ERUJVRyhcbiAgICAgICAgICAgICAgICAndmVyYm9zZScsXG4gICAgICAgICAgICAgICAgKCkgPT4gYFtXZWJHUFVdIGpzZXBDb3B5R3B1VG9DcHU6IGdwdURhdGFJZD0ke2dwdURhdGFJZH0sIGRhdGFPZmZzZXQ9JHtkYXRhT2Zmc2V0fSwgc2l6ZT0ke3NpemV9YCk7XG5cbiAgICAgICAgICAgIGF3YWl0IGJhY2tlbmQuZG93bmxvYWQoXG4gICAgICAgICAgICAgICAgZ3B1RGF0YUlkLCAoKSA9PiBtb2R1bGUuSEVBUFU4LnN1YmFycmF5KGRhdGFPZmZzZXQgPj4+IDAsIChkYXRhT2Zmc2V0ID4+PiAwKSArIHNpemUpKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAvLyBqc2VwQ3JlYXRlS2VybmVsXG4gICAgICAoa2VybmVsVHlwZTogc3RyaW5nLCBrZXJuZWxJZDogbnVtYmVyLCBhdHRyaWJ1dGU6IHVua25vd24pID0+IGJhY2tlbmQuY3JlYXRlS2VybmVsKFxuICAgICAgICAgIGtlcm5lbFR5cGUsIGtlcm5lbElkLCBhdHRyaWJ1dGUsIG1vZHVsZS5VVEY4VG9TdHJpbmcobW9kdWxlLl9Kc2VwR2V0Tm9kZU5hbWUhKGtlcm5lbElkKSkpLFxuXG4gICAgICAvLyBqc2VwUmVsZWFzZUtlcm5lbFxuICAgICAgKGtlcm5lbDogbnVtYmVyKSA9PiBiYWNrZW5kLnJlbGVhc2VLZXJuZWwoa2VybmVsKSxcblxuICAgICAgLy8ganNlcFJ1blxuICAgICAgKGtlcm5lbDogbnVtYmVyLCBjb250ZXh0RGF0YU9mZnNldDogbnVtYmVyLCBzZXNzaW9uSGFuZGxlOiBudW1iZXIsIGVycm9yczogQXJyYXk8UHJvbWlzZTxzdHJpbmd8bnVsbD4+KSA9PiB7XG4gICAgICAgIExPR19ERUJVRyhcbiAgICAgICAgICAgICd2ZXJib3NlJyxcbiAgICAgICAgICAgICgpID0+IGBbV2ViR1BVXSBqc2VwUnVuOiBzZXNzaW9uSGFuZGxlPSR7c2Vzc2lvbkhhbmRsZX0sIGtlcm5lbD0ke2tlcm5lbH0sIGNvbnRleHREYXRhT2Zmc2V0PSR7XG4gICAgICAgICAgICAgICAgY29udGV4dERhdGFPZmZzZXR9YCk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQ29tcHV0ZUNvbnRleHRJbXBsKG1vZHVsZSwgYmFja2VuZCwgY29udGV4dERhdGFPZmZzZXQpO1xuICAgICAgICByZXR1cm4gYmFja2VuZC5jb21wdXRlS2VybmVsKGtlcm5lbCwgY29udGV4dCwgZXJyb3JzKTtcbiAgICAgIH0sXG4gICAgICAvLyBqc2VwQ2FwdHVyZUJlZ2luXG4gICAgICAoKSA9PiBiYWNrZW5kLmNhcHR1cmVCZWdpbigpLFxuICAgICAgLy8ganNlcENhcHR1cmVFbmRcbiAgICAgICgpID0+IGJhY2tlbmQuY2FwdHVyZUVuZCgpLFxuICAgICAgLy8ganNlcFJlcGxheVxuICAgICAgKCkgPT4gYmFja2VuZC5yZXBsYXkoKVxuICAgIF0pO1xuICB9IGVsc2Uge1xuICAgIGpzZXBJbml0KCd3ZWJubicpO1xuICB9XG59O1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge0VudiwgSW5mZXJlbmNlU2Vzc2lvbiwgVGVuc29yfSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge1NlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyLCBTZXJpYWxpemFibGVTZXNzaW9uTWV0YWRhdGEsIFNlcmlhbGl6YWJsZVRlbnNvck1ldGFkYXRhLCBUZW5zb3JNZXRhZGF0YX0gZnJvbSAnLi9wcm94eS1tZXNzYWdlcyc7XG5pbXBvcnQge3NldFJ1bk9wdGlvbnN9IGZyb20gJy4vcnVuLW9wdGlvbnMnO1xuaW1wb3J0IHtzZXRTZXNzaW9uT3B0aW9uc30gZnJvbSAnLi9zZXNzaW9uLW9wdGlvbnMnO1xuaW1wb3J0IHtkYXRhTG9jYXRpb25TdHJpbmdUb0VudW0sIGdldFRlbnNvckVsZW1lbnRTaXplLCBpc0dwdUJ1ZmZlclN1cHBvcnRlZFR5cGUsIGxvZ0xldmVsU3RyaW5nVG9FbnVtLCB0ZW5zb3JEYXRhVHlwZUVudW1Ub1N0cmluZywgdGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0sIHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3Rvcn0gZnJvbSAnLi93YXNtLWNvbW1vbic7XG5pbXBvcnQge2dldEluc3RhbmNlfSBmcm9tICcuL3dhc20tZmFjdG9yeSc7XG5pbXBvcnQge2FsbG9jV2FzbVN0cmluZywgY2hlY2tMYXN0RXJyb3J9IGZyb20gJy4vd2FzbS11dGlscyc7XG5pbXBvcnQge2xvYWRGaWxlfSBmcm9tICcuL3dhc20tdXRpbHMtbG9hZC1maWxlJztcblxuLy8gI3JlZ2lvbiBJbml0aWFsaXphdGlvbnNcblxuLyoqXG4gKiBUaGVyZSBhcmUgNCBkaWZmZXJlbnQgXCJpbml0aWFsaXphdGlvblwiIHN0ZXBzIGZvciBPUlQuIFRoZXkgaGFwcGVuIGluIGRpZmZlcmVudCBwbGFjZXMgYW5kIGRpZmZlcmVudCB0aW1lLlxuICpcbiAqIDEuIEphdmFTY3JpcHQgaW5pdGlhbGl6YXRpb24gZm9yIG9ubnhydW50aW1lLWNvbW1vbiBhbmQgb25ueHJ1bnRpbWUtd2ViLlxuICogICAgVGhpcyBpcyB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24gc3RlcC4gSW4gdGhpcyBzdGVwLCBvbm54cnVudGltZS13ZWIgY2FsbHMgb25ueHJ1bnRpbWUtY29tbW9uJ3MgcmVnaXN0ZXJCYWNrZW5kKClcbiAqIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIHRvIHJlZ2lzdGVyIGFsbCB0aGUgYXZhaWxhYmxlIGJhY2tlbmRzLiBUaGUgYmFja2VuZCByZWdpc3RyYXRpb24gaXMgdmVyeSBmYXN0LiBJdCBvbmx5XG4gKiByZWdpc3RlcnMgdGhlIGJhY2tlbmQgbmFtZSB3aXRoIHRoZSB1bmluaXRpYWxpemVkIGJhY2tlbmQgb2JqZWN0LiBObyBoZWF2eSBpbml0aWFsaXphdGlvbiBpcyBkb25lIGluIHRoaXMgc3RlcC5cbiAqICAgIFJlZmVyIHRvIHdlYi9saWIvaW5kZXgudHMgZm9yIHRoZSBiYWNrZW5kIHJlZ2lzdHJhdGlvbi5cbiAqXG4gKiAyLiBXZWJBc3NlbWJseSBhcnRpZmFjdCBpbml0aWFsaXphdGlvbi5cbiAqICAgIFRoaXMgaGFwcGVucyB3aGVuIGFueSByZWdpc3RlcmVkIHdhc20gYmFja2VuZCBpcyB1c2VkIGZvciB0aGUgZmlyc3QgdGltZSAoaWUuIGBvcnQuSW5mZXJlbmNlU2Vzc2lvbi5jcmVhdGUoKWAgb3JcbiAqIGBvcnQuVHJhaW5pbmdTZXNzaW9uLmNyZWF0ZSgpYCBpcyBjYWxsZWQpLiBJbiB0aGlzIHN0ZXAsIG9ubnhydW50aW1lLXdlYiBkb2VzIHRoZSBmb2xsb3dpbmdzOlxuICogICAgIC0gY3JlYXRlIGEgcHJveHkgd29ya2VyIGFuZCBtYWtlIHN1cmUgdGhlIHByb3h5IHdvcmtlciBpcyByZWFkeSB0byByZWNlaXZlIG1lc3NhZ2VzLCBpZiBwcm94eSBpcyBlbmFibGVkLlxuICogICAgIC0gcGVyZm9ybSBmZWF0dXJlIGRldGVjdGlvbiwgbG9jYXRlIGNvcnJlY3QgV2ViQXNzZW1ibHkgYXJ0aWZhY3QgcGF0aCBhbmQgY2FsbCB0aGUgRW1zY3JpcHRlbiBnZW5lcmF0ZWRcbiAqIEphdmFTY3JpcHQgY29kZSB0byBpbml0aWFsaXplIHRoZSBXZWJBc3NlbWJseSBydW50aW1lLlxuICogICAgICAgICAtIGlmIHByb3h5IGlzIGVuYWJsZWQsIHRoaXMgc3RlcCBoYXBwZW5zIGluIHRoZSBwcm94eSB3b3JrZXIgdXNpbmcgbWVzc2FnZSAnaW5pdC13YXNtJy5cbiAqICAgICAgICAgLSBkb3dubG9hZGluZyB0aGUgJ29ydC13YXNtey4uLn0ud2FzbScgZmlsZSBpcyBkb25lIGluIHRoaXMgc3RlcC5cbiAqICAgICAgICAgLSBpZiBtdWx0aS10aHJlYWQgaXMgZW5hYmxlZCwgb25lIG9yIG1vcmUgd2Vid29ya2VyIHdpbGwgYmUgY3JlYXRlZCB0byBpbml0aWFsaXplIHRoZSBQVGhyZWFkIHRocmVhZHBvb2wuXG4gKlxuICogMy4gT1JUIGVudmlyb25tZW50IGluaXRpYWxpemF0aW9uLlxuICogICAgVGhpcyBoYXBwZW5zIGFmdGVyIHN0ZXAgMi4gSW4gdGhpcyBzdGVwLCBvbm54cnVudGltZS13ZWIgcGVyZm9ybXMgT05OWCBSdW50aW1lIGVudmlyb25tZW50IGluaXRpYWxpemF0aW9uLlxuICogRnVuY3Rpb24gYF9PcnRJbml0KClgIGlzIGNhbGxlZCBpbiB0aGlzIHN0ZXAuXG4gKiAgICAgLSBpZiBwcm94eSBpcyBlbmFibGVkLCB0aGlzIHN0ZXAgaGFwcGVucyBpbiB0aGUgcHJveHkgd29ya2VyIHVzaW5nIG1lc3NhZ2UgJ2luaXQtb3J0Jy5cbiAqICAgICAtIGxvZ2dpbmcgbGV2ZWwgKG9ydC5lbnYubG9nTGV2ZWwpIGFuZCB0aHJlYWQgbnVtYmVyIChvcnQuZW52Lndhc20ubnVtVGhyZWFkcykgYXJlIHNldCBpbiB0aGlzIHN0ZXAuXG4gKlxuICogNC4gU2Vzc2lvbiBpbml0aWFsaXphdGlvbi5cbiAqICAgIFRoaXMgaGFwcGVucyB3aGVuIGBvcnQuSW5mZXJlbmNlU2Vzc2lvbi5jcmVhdGUoKWAgb3IgYG9ydC5UcmFpbmluZ1Nlc3Npb24uY3JlYXRlKClgIGlzIGNhbGxlZC4gVW5saWtlIHRoZSBmaXJzdCAzXG4gKiBzdGVwcyAodGhleSBvbmx5IGNhbGxlZCBvbmNlKSwgdGhpcyBzdGVwIHdpbGwgYmUgZG9uZSBmb3IgZWFjaCBzZXNzaW9uLiBJbiB0aGlzIHN0ZXAsIG9ubnhydW50aW1lLXdlYiBkb2VzIHRoZVxuICogZm9sbG93aW5nczpcbiAqICAgIElmIHRoZSBwYXJhbWV0ZXIgaXMgYSBVUkw6XG4gKiAgICAtIGRvd25sb2FkIHRoZSBtb2RlbCBkYXRhIGZyb20gdGhlIFVSTC5cbiAqICAgIC0gY29weSB0aGUgbW9kZWwgZGF0YSB0byB0aGUgV0FTTSBoZWFwLiAocHJveHk6ICdjb3B5LWZyb20nKVxuICogICAgLSBkZXJlZmVyZW5jZSB0aGUgbW9kZWwgYnVmZmVyLiBUaGlzIHN0ZXAgYWxsb3dzIHRoZSBvcmlnaW5hbCBBcnJheUJ1ZmZlciB0byBiZSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAqICAgIC0gY2FsbCBgX09ydENyZWF0ZVNlc3Npb24oKWAgdG8gY3JlYXRlIHRoZSBzZXNzaW9uLiAocHJveHk6ICdjcmVhdGUnKVxuICpcbiAqICAgIElmIHRoZSBwYXJhbWV0ZXIgaXMgYSBVaW50OEFycmF5IG9iamVjdDpcbiAqICAgIC0gY29weSB0aGUgbW9kZWwgZGF0YSB0byB0aGUgV0FTTSBoZWFwLiAocHJveHk6ICdjb3B5LWZyb20nKVxuICogICAgLSBjYWxsIGBfT3J0Q3JlYXRlU2Vzc2lvbigpYCB0byBjcmVhdGUgdGhlIHNlc3Npb24uIChwcm94eTogJ2NyZWF0ZScpXG4gKlxuICpcbiAqL1xuXG4vKipcbiAqIGluaXRpYWxpemUgT1JUIGVudmlyb25tZW50LlxuICpcbiAqIEBwYXJhbSBudW1UaHJlYWRzIFNldEdsb2JhbEludHJhT3BOdW1UaHJlYWRzKG51bVRocmVhZHMpXG4gKiBAcGFyYW0gbG9nZ2luZ0xldmVsIENyZWF0ZUVudihzdGF0aWNfY2FzdDxPcnRMb2dnaW5nTGV2ZWw+KGxvZ2dpbmdfbGV2ZWwpKVxuICovXG5jb25zdCBpbml0T3J0ID0gKG51bVRocmVhZHM6IG51bWJlciwgbG9nZ2luZ0xldmVsOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgY29uc3QgZXJyb3JDb2RlID0gZ2V0SW5zdGFuY2UoKS5fT3J0SW5pdChudW1UaHJlYWRzLCBsb2dnaW5nTGV2ZWwpO1xuICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgaW5pdGlhbGl6ZSBvbm54cnVudGltZS4nKTtcbiAgfVxufTtcblxuLyoqXG4gKiBpbnRpYWxpemUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqIEBwYXJhbSBlbnYgcGFzc2VkIGluIHRoZSBlbnZpcm9ubWVudCBjb25maWcgb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgaW5pdFJ1bnRpbWUgPSBhc3luYyhlbnY6IEVudik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAvLyBpbml0IE9SVFxuICBpbml0T3J0KGVudi53YXNtLm51bVRocmVhZHMhLCBsb2dMZXZlbFN0cmluZ1RvRW51bShlbnYubG9nTGV2ZWwpKTtcbn07XG5cbi8qKlxuICogcGVyZm9ybSBFUCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi5cbiAqXG4gKiBAcGFyYW0gZW52XG4gKiBAcGFyYW0gZXBOYW1lXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0RXAgPSBhc3luYyhlbnY6IEVudiwgZXBOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMsIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICBjb25zdCBpbml0SnNlcCA9IHJlcXVpcmUoJy4vanNlcC9pbml0JykuaW5pdDtcblxuICAgIGlmIChlcE5hbWUgPT09ICd3ZWJncHUnKSB7XG4gICAgICAvLyBwZXJmb3JtIFdlYkdQVSBhdmFpbGFiaWxpdHkgY2hlY2tcbiAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJyB8fCAhbmF2aWdhdG9yLmdwdSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYkdQVSBpcyBub3Qgc3VwcG9ydGVkIGluIGN1cnJlbnQgZW52aXJvbm1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGFkYXB0ZXIgPSBlbnYud2ViZ3B1LmFkYXB0ZXIgYXMgR1BVQWRhcHRlciB8IG51bGw7XG4gICAgICBpZiAoIWFkYXB0ZXIpIHtcbiAgICAgICAgLy8gaWYgYWRhcHRlciBpcyBub3Qgc2V0LCByZXF1ZXN0IGEgbmV3IGFkYXB0ZXIuXG4gICAgICAgIGNvbnN0IHBvd2VyUHJlZmVyZW5jZSA9IGVudi53ZWJncHUucG93ZXJQcmVmZXJlbmNlO1xuICAgICAgICBpZiAocG93ZXJQcmVmZXJlbmNlICE9PSB1bmRlZmluZWQgJiYgcG93ZXJQcmVmZXJlbmNlICE9PSAnbG93LXBvd2VyJyAmJlxuICAgICAgICAgICAgcG93ZXJQcmVmZXJlbmNlICE9PSAnaGlnaC1wZXJmb3JtYW5jZScpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcG93ZXJQcmVmZXJlbmNlIHNldHRpbmc6IFwiJHtwb3dlclByZWZlcmVuY2V9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JjZUZhbGxiYWNrQWRhcHRlciA9IGVudi53ZWJncHUuZm9yY2VGYWxsYmFja0FkYXB0ZXI7XG4gICAgICAgIGlmIChmb3JjZUZhbGxiYWNrQWRhcHRlciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBmb3JjZUZhbGxiYWNrQWRhcHRlciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcmNlRmFsbGJhY2tBZGFwdGVyIHNldHRpbmc6IFwiJHtmb3JjZUZhbGxiYWNrQWRhcHRlcn1cImApO1xuICAgICAgICB9XG4gICAgICAgIGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKHtwb3dlclByZWZlcmVuY2UsIGZvcmNlRmFsbGJhY2tBZGFwdGVyfSk7XG4gICAgICAgIGlmICghYWRhcHRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBnZXQgR1BVIGFkYXB0ZXIuICcgK1xuICAgICAgICAgICAgICAnWW91IG1heSBuZWVkIHRvIGVuYWJsZSBmbGFnIFwiLS1lbmFibGUtdW5zYWZlLXdlYmdwdVwiIGlmIHlvdSBhcmUgdXNpbmcgQ2hyb21lLicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiBhZGFwdGVyIGlzIHNldCwgdmFsaWRhdGUgaXQuXG4gICAgICAgIGlmICh0eXBlb2YgYWRhcHRlci5saW1pdHMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBhZGFwdGVyLmZlYXR1cmVzICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgdHlwZW9mIGFkYXB0ZXIucmVxdWVzdERldmljZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBHUFUgYWRhcHRlciBzZXQgaW4gYGVudi53ZWJncHUuYWRhcHRlcmAuIEl0IG11c3QgYmUgYSBHUFVBZGFwdGVyIG9iamVjdC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWVudi53YXNtLnNpbWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ05vdCBzdXBwb3J0ZWQgZm9yIFdlYkdQVT1PTiBhbmQgU0lNRD1PRkYuIFBsZWFzZSBzZXQgYGVudi53YXNtLnNpbWRgIHRvIHRydWUgd2hlbiB1c2luZyBgd2ViZ3B1YCBFUCcpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBpbml0SnNlcCgnd2ViZ3B1JywgZ2V0SW5zdGFuY2UoKSwgZW52LCBhZGFwdGVyKTtcbiAgICB9XG4gICAgaWYgKGVwTmFtZSA9PT0gJ3dlYm5uJykge1xuICAgICAgLy8gcGVyZm9ybSBXZWJOTiBhdmFpbGFiaWxpdHkgY2hlY2tcbiAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJyB8fCAhKG5hdmlnYXRvciBhcyB1bmtub3duIGFzIHttbDogdW5rbm93bn0pLm1sKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViTk4gaXMgbm90IHN1cHBvcnRlZCBpbiBjdXJyZW50IGVudmlyb25tZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGluaXRKc2VwKCd3ZWJubicsIGdldEluc3RhbmNlKCksIGVudik7XG4gICAgfVxuICB9XG59O1xuXG4vLyAjZW5kcmVnaW9uIEluaXRpYWxpemF0aW9uc1xuXG4vKipcbiAqIHZhbGlkIGRhdGEgbG9jYXRpb25zIGZvciBpbnB1dC9vdXRwdXQgdGVuc29ycy5cbiAqL1xudHlwZSBTdXBwb3J0ZWRUZW5zb3JEYXRhTG9jYXRpb25Gb3JJbnB1dE91dHB1dCA9ICdjcHUnfCdjcHUtcGlubmVkJ3wnZ3B1LWJ1ZmZlcic7XG5cbnR5cGUgSU9CaW5kaW5nU3RhdGUgPSB7XG4gIC8qKlxuICAgKiB0aGUgaGFuZGxlIG9mIElPIGJpbmRpbmcuXG4gICAqL1xuICByZWFkb25seSBoYW5kbGU6IG51bWJlcjtcblxuICAvKipcbiAgICogdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBmb3IgZWFjaCBvdXRwdXQgdGVuc29yLlxuICAgKlxuICAgKiB2YWx1ZSBpcyBvbmUgb2YgJ2NwdScsICdjcHUtcGlubmVkJywgJ2dwdS1idWZmZXInLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zOiByZWFkb25seSBTdXBwb3J0ZWRUZW5zb3JEYXRhTG9jYXRpb25Gb3JJbnB1dE91dHB1dFtdO1xuXG4gIC8qKlxuICAgKiBlbnVtIHZhbHVlIG9mIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gZm9yIGVhY2ggb3V0cHV0IHRlbnNvci5cbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dFByZWZlcnJlZExvY2F0aW9uc0VuY29kZWQ6IHJlYWRvbmx5IG51bWJlcltdO1xufTtcblxuLyoqXG4gKiAgdHVwbGUgZWxlbWVudHMgYXJlOiBJbmZlcmVuY2VTZXNzaW9uIElEOyBpbnB1dE5hbWVzVVRGOEVuY29kZWQ7IG91dHB1dE5hbWVzVVRGOEVuY29kZWQ7IGJpbmRpbmdTdGF0ZVxuICovXG50eXBlIFNlc3Npb25NZXRhZGF0YSA9IFtcbiAgaW5mZXJlbmNlU2Vzc2lvbklkOiBudW1iZXIsIGlucHV0TmFtZXNVVEY4RW5jb2RlZDogbnVtYmVyW10sIG91dHB1dE5hbWVzVVRGOEVuY29kZWQ6IG51bWJlcltdLFxuICBiaW5kaW5nU3RhdGU6IElPQmluZGluZ1N0YXRlfG51bGwsIGVuYWJsZUdyYXBoQ2FwdHVyZTogYm9vbGVhbiwgaW5wdXRPdXRwdXRCb3VuZDogYm9vbGVhblxuXTtcblxuY29uc3QgYWN0aXZlU2Vzc2lvbnMgPSBuZXcgTWFwPG51bWJlciwgU2Vzc2lvbk1ldGFkYXRhPigpO1xuXG4vKipcbiAqIGdldCB0aGUgaW5wdXQvb3V0cHV0IGNvdW50IG9mIHRoZSBzZXNzaW9uLlxuICogQHBhcmFtIHNlc3Npb25IYW5kbGUgdGhlIGhhbmRsZSByZXByZXNlbnRpbmcgdGhlIHNlc3Npb24uIHNob3VsZCBiZSBub24temVyby5cbiAqIEByZXR1cm5zIGEgdHVwbGUgaW5jbHVkaW5nIDIgbnVtYmVycywgcmVwcmVzZW50aW5nIHRoZSBpbnB1dCBjb3VudCBhbmQgb3V0cHV0IGNvdW50LlxuICovXG5jb25zdCBnZXRTZXNzaW9uSW5wdXRPdXRwdXRDb3VudCA9IChzZXNzaW9uSGFuZGxlOiBudW1iZXIpOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG4gIGNvbnN0IHN0YWNrID0gd2FzbS5zdGFja1NhdmUoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKDgpO1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IHdhc20uX09ydEdldElucHV0T3V0cHV0Q291bnQoc2Vzc2lvbkhhbmRsZSwgZGF0YU9mZnNldCwgZGF0YU9mZnNldCArIDQpO1xuICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGdldCBzZXNzaW9uIGlucHV0L291dHB1dCBjb3VudC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIFt3YXNtLkhFQVAzMltkYXRhT2Zmc2V0IC8gNF0sIHdhc20uSEVBUDMyW2RhdGFPZmZzZXQgLyA0ICsgMV1dO1xuICB9IGZpbmFsbHkge1xuICAgIHdhc20uc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgfVxufTtcblxuLyoqXG4gKiBhbGxvY2F0ZSB0aGUgbWVtb3J5IGFuZCBtZW1jcHkgdGhlIGV4dGVybmFsIGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gbW9kZWwgLSB0aGUgZXh0ZXJuYWwgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG1vZGVsIGRhdGEuIE11c3Qgbm90IGJlIHRoZSBzYW1lIGJ1ZmZlciBhcyB0aGUgV0FTTSBoZWFwLlxuICogQHJldHVybnMgYSAyLWVsZW1lbnRzIHR1cGxlIC0gdGhlIHBvaW50ZXIgYW5kIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIgPSAobW9kZWw6IFVpbnQ4QXJyYXkpOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG4gIGNvbnN0IG1vZGVsRGF0YU9mZnNldCA9IHdhc20uX21hbGxvYyhtb2RlbC5ieXRlTGVuZ3RoKTtcbiAgaWYgKG1vZGVsRGF0YU9mZnNldCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgY3JlYXRlIGEgc2Vzc2lvbi4gZmFpbGVkIHRvIGFsbG9jYXRlIGEgYnVmZmVyIG9mIHNpemUgJHttb2RlbC5ieXRlTGVuZ3RofS5gKTtcbiAgfVxuICB3YXNtLkhFQVBVOC5zZXQobW9kZWwsIG1vZGVsRGF0YU9mZnNldCk7XG4gIHJldHVybiBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbC5ieXRlTGVuZ3RoXTtcbn07XG5cbi8qKlxuICogY3JlYXRlIGFuIGluZmVyZW5jZSBzZXNzaW9uIGZyb20gYSBtb2RlbCBkYXRhIGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gbW9kZWxEYXRhIC0gZWl0aGVyIGEgVWludDhBcnJheSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBtb2RlbCBkYXRhLCBvciBhIDItZWxlbWVudHMgdHVwbGUgY29udGFpbmluZyB0aGVcbiAqICAgICBwb2ludGVyIGFuZCBzaXplIG9mIHRoZSBtb2RlbCBkYXRhIGJ1ZmZlci5cbiAqIEBwYXJhbSBvcHRpb25zIGFuIG9wdGlvbmFsIHNlc3Npb24gb3B0aW9ucyBvYmplY3QuXG4gKiBAcmV0dXJucyBhIDMtZWxlbWVudHMgdHVwbGUgY29udGFpbmluZyBbc2Vzc2lvbiBoYW5kbGUsIGlucHV0IG5hbWVzLCBvdXRwdXQgbmFtZXNdXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTZXNzaW9uID0gYXN5bmMoXG4gICAgbW9kZWxEYXRhOiBVaW50OEFycmF5fFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyLFxuICAgIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogUHJvbWlzZTxTZXJpYWxpemFibGVTZXNzaW9uTWV0YWRhdGE+ID0+IHtcbiAgbGV0IG1vZGVsRGF0YU9mZnNldDogbnVtYmVyLCBtb2RlbERhdGFMZW5ndGg6IG51bWJlcjtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxEYXRhKSkge1xuICAgIC8vIGlmIG1vZGVsIGRhdGEgaXMgYW4gYXJyYXksIGl0IG11c3QgYmUgYSAyLWVsZW1lbnRzIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHBvaW50ZXIgYW5kIHNpemUgb2YgdGhlIG1vZGVsIGRhdGFcbiAgICBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGhdID0gbW9kZWxEYXRhO1xuICB9IGVsc2UgaWYgKG1vZGVsRGF0YS5idWZmZXIgPT09IHdhc20uSEVBUFU4LmJ1ZmZlcikge1xuICAgIC8vIGlmIG1vZGVsIGRhdGEgdXNlcyB0aGUgc2FtZSBidWZmZXIgYXMgdGhlIFdBU00gaGVhcCwgd2UgZG9uJ3QgbmVlZCB0byBjb3B5IGl0LlxuICAgIFttb2RlbERhdGFPZmZzZXQsIG1vZGVsRGF0YUxlbmd0aF0gPSBbbW9kZWxEYXRhLmJ5dGVPZmZzZXQsIG1vZGVsRGF0YS5ieXRlTGVuZ3RoXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UsIGNvcHkgdGhlIG1vZGVsIGRhdGEgdG8gdGhlIFdBU00gaGVhcC5cbiAgICBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGhdID0gY29weUZyb21FeHRlcm5hbEJ1ZmZlcihtb2RlbERhdGEpO1xuICB9XG5cbiAgbGV0IHNlc3Npb25IYW5kbGUgPSAwO1xuICBsZXQgc2Vzc2lvbk9wdGlvbnNIYW5kbGUgPSAwO1xuICBsZXQgaW9CaW5kaW5nSGFuZGxlID0gMDtcbiAgbGV0IGFsbG9jczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgaW5wdXROYW1lc1VURjhFbmNvZGVkID0gW107XG4gIGNvbnN0IG91dHB1dE5hbWVzVVRGOEVuY29kZWQgPSBbXTtcblxuICB0cnkge1xuICAgIFtzZXNzaW9uT3B0aW9uc0hhbmRsZSwgYWxsb2NzXSA9IHNldFNlc3Npb25PcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnM/LmV4dGVybmFsRGF0YSAmJiB3YXNtLm1vdW50RXh0ZXJuYWxEYXRhKSB7XG4gICAgICBjb25zdCBsb2FkaW5nUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRpb25zLmV4dGVybmFsRGF0YSkge1xuICAgICAgICBjb25zdCBwYXRoID0gdHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnID8gZmlsZSA6IGZpbGUucGF0aDtcbiAgICAgICAgbG9hZGluZ1Byb21pc2VzLnB1c2gobG9hZEZpbGUodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnID8gZmlsZSA6IGZpbGUuZGF0YSkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICB3YXNtLm1vdW50RXh0ZXJuYWxEYXRhIShwYXRoLCBkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyB3YWl0IGZvciBhbGwgZXh0ZXJuYWwgZGF0YSBmaWxlcyB0byBiZSBsb2FkZWRcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGxvYWRpbmdQcm9taXNlcyk7XG4gICAgfVxuXG4gICAgc2Vzc2lvbkhhbmRsZSA9IGF3YWl0IHdhc20uX09ydENyZWF0ZVNlc3Npb24obW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGgsIHNlc3Npb25PcHRpb25zSGFuZGxlKTtcbiAgICBpZiAoc2Vzc2lvbkhhbmRsZSA9PT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgY3JlYXRlIGEgc2Vzc2lvbi4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBbaW5wdXRDb3VudCwgb3V0cHV0Q291bnRdID0gZ2V0U2Vzc2lvbklucHV0T3V0cHV0Q291bnQoc2Vzc2lvbkhhbmRsZSk7XG5cbiAgICBjb25zdCBlbmFibGVHcmFwaENhcHR1cmUgPSAhIW9wdGlvbnM/LmVuYWJsZUdyYXBoQ2FwdHVyZTtcblxuICAgIGNvbnN0IGlucHV0TmFtZXMgPSBbXTtcbiAgICBjb25zdCBvdXRwdXROYW1lcyA9IFtdO1xuICAgIGNvbnN0IG91dHB1dFByZWZlcnJlZExvY2F0aW9uczogU3VwcG9ydGVkVGVuc29yRGF0YUxvY2F0aW9uRm9ySW5wdXRPdXRwdXRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBuYW1lID0gd2FzbS5fT3J0R2V0SW5wdXROYW1lKHNlc3Npb25IYW5kbGUsIGkpO1xuICAgICAgaWYgKG5hbWUgPT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoJ0NhblxcJ3QgZ2V0IGFuIGlucHV0IG5hbWUuJyk7XG4gICAgICB9XG4gICAgICBpbnB1dE5hbWVzVVRGOEVuY29kZWQucHVzaChuYW1lKTtcbiAgICAgIGlucHV0TmFtZXMucHVzaCh3YXNtLlVURjhUb1N0cmluZyhuYW1lKSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgbmFtZSA9IHdhc20uX09ydEdldE91dHB1dE5hbWUoc2Vzc2lvbkhhbmRsZSwgaSk7XG4gICAgICBpZiAobmFtZSA9PT0gMCkge1xuICAgICAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBnZXQgYW4gb3V0cHV0IG5hbWUuJyk7XG4gICAgICB9XG4gICAgICBvdXRwdXROYW1lc1VURjhFbmNvZGVkLnB1c2gobmFtZSk7XG4gICAgICBjb25zdCBuYW1lU3RyaW5nID0gd2FzbS5VVEY4VG9TdHJpbmcobmFtZSk7XG4gICAgICBvdXRwdXROYW1lcy5wdXNoKG5hbWVTdHJpbmcpO1xuXG4gICAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUpIHtcbiAgICAgICAgaWYgKGVuYWJsZUdyYXBoQ2FwdHVyZSAmJiBvcHRpb25zPy5wcmVmZXJyZWRPdXRwdXRMb2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLnB1c2goJ2dwdS1idWZmZXInKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHR5cGVvZiBvcHRpb25zPy5wcmVmZXJyZWRPdXRwdXRMb2NhdGlvbiA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgICAgb3B0aW9ucy5wcmVmZXJyZWRPdXRwdXRMb2NhdGlvbiA6XG4gICAgICAgICAgICBvcHRpb25zPy5wcmVmZXJyZWRPdXRwdXRMb2NhdGlvbj8uW25hbWVTdHJpbmddID8/ICdjcHUnO1xuICAgICAgICBpZiAobG9jYXRpb24gIT09ICdjcHUnICYmIGxvY2F0aW9uICE9PSAnY3B1LXBpbm5lZCcgJiYgbG9jYXRpb24gIT09ICdncHUtYnVmZmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IHN1cHBvcnRlZCBwcmVmZXJyZWQgb3V0cHV0IGxvY2F0aW9uOiAke2xvY2F0aW9ufS5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5hYmxlR3JhcGhDYXB0dXJlICYmIGxvY2F0aW9uICE9PSAnZ3B1LWJ1ZmZlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBzdXBwb3J0ZWQgcHJlZmVycmVkIG91dHB1dCBsb2NhdGlvbjogJHtcbiAgICAgICAgICAgICAgbG9jYXRpb259LiBPbmx5ICdncHUtYnVmZmVyJyBsb2NhdGlvbiBpcyBzdXBwb3J0ZWQgd2hlbiBlbmFibGVHcmFwaENhcHR1cmUgaXMgdHJ1ZS5gKTtcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMucHVzaChsb2NhdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdXNlIElPIGJpbmRpbmcgb25seSB3aGVuIGF0IGxlYXN0IG9uZSBvdXRwdXQgaXMgcHJlZmZlcmVkIHRvIGJlIG9uIEdQVS5cbiAgICBsZXQgYmluZGluZ1N0YXRlOiBJT0JpbmRpbmdTdGF0ZXxudWxsID0gbnVsbDtcbiAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgJiYgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLnNvbWUobCA9PiBsID09PSAnZ3B1LWJ1ZmZlcicpKSB7XG4gICAgICBpb0JpbmRpbmdIYW5kbGUgPSB3YXNtLl9PcnRDcmVhdGVCaW5kaW5nKHNlc3Npb25IYW5kbGUpO1xuICAgICAgaWYgKGlvQmluZGluZ0hhbmRsZSA9PT0gMCkge1xuICAgICAgICBjaGVja0xhc3RFcnJvcignQ2FuXFwndCBjcmVhdGUgSU8gYmluZGluZy4nKTtcbiAgICAgIH1cblxuICAgICAgYmluZGluZ1N0YXRlID0ge1xuICAgICAgICBoYW5kbGU6IGlvQmluZGluZ0hhbmRsZSxcbiAgICAgICAgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLFxuICAgICAgICBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNFbmNvZGVkOiBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMubWFwKGwgPT4gZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtKGwpKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYWN0aXZlU2Vzc2lvbnMuc2V0KFxuICAgICAgICBzZXNzaW9uSGFuZGxlLFxuICAgICAgICBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc1VURjhFbmNvZGVkLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkLCBiaW5kaW5nU3RhdGUsIGVuYWJsZUdyYXBoQ2FwdHVyZSwgZmFsc2VdKTtcbiAgICByZXR1cm4gW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXMsIG91dHB1dE5hbWVzXTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlucHV0TmFtZXNVVEY4RW5jb2RlZC5mb3JFYWNoKGJ1ZiA9PiB3YXNtLl9PcnRGcmVlKGJ1ZikpO1xuICAgIG91dHB1dE5hbWVzVVRGOEVuY29kZWQuZm9yRWFjaChidWYgPT4gd2FzbS5fT3J0RnJlZShidWYpKTtcblxuICAgIGlmIChpb0JpbmRpbmdIYW5kbGUgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VCaW5kaW5nKGlvQmluZGluZ0hhbmRsZSk7XG4gICAgfVxuXG4gICAgaWYgKHNlc3Npb25IYW5kbGUgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VTZXNzaW9uKHNlc3Npb25IYW5kbGUpO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9IGZpbmFsbHkge1xuICAgIHdhc20uX2ZyZWUobW9kZWxEYXRhT2Zmc2V0KTtcbiAgICBpZiAoc2Vzc2lvbk9wdGlvbnNIYW5kbGUgIT09IDApIHtcbiAgICAgIHdhc20uX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucyhzZXNzaW9uT3B0aW9uc0hhbmRsZSk7XG4gICAgfVxuICAgIGFsbG9jcy5mb3JFYWNoKGFsbG9jID0+IHdhc20uX2ZyZWUoYWxsb2MpKTtcblxuICAgIC8vIHVubW91bnQgZXh0ZXJuYWwgZGF0YSBpZiBuZWNlc3NhcnlcbiAgICB3YXNtLnVubW91bnRFeHRlcm5hbERhdGE/LigpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVsZWFzZVNlc3Npb24gPSAoc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgY29uc3Qgd2FzbSA9IGdldEluc3RhbmNlKCk7XG4gIGNvbnN0IHNlc3Npb24gPSBhY3RpdmVTZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgaWYgKCFzZXNzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgcmVsZWFzZSBzZXNzaW9uLiBpbnZhbGlkIHNlc3Npb24gaWQ6ICR7c2Vzc2lvbklkfWApO1xuICB9XG4gIGNvbnN0IFtzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzVVRGOEVuY29kZWQsIG91dHB1dE5hbWVzVVRGOEVuY29kZWQsIGlvQmluZGluZ1N0YXRlLCBlbmFibGVHcmFwaENhcHR1cmVdID0gc2Vzc2lvbjtcblxuICBpZiAoaW9CaW5kaW5nU3RhdGUpIHtcbiAgICBpZiAoZW5hYmxlR3JhcGhDYXB0dXJlKSB7XG4gICAgICB3YXNtLl9PcnRDbGVhckJvdW5kT3V0cHV0cyhpb0JpbmRpbmdTdGF0ZS5oYW5kbGUpO1xuICAgIH1cbiAgICB3YXNtLl9PcnRSZWxlYXNlQmluZGluZyhpb0JpbmRpbmdTdGF0ZS5oYW5kbGUpO1xuICB9XG5cbiAgd2FzbS5qc2VwT25SZWxlYXNlU2Vzc2lvbj8uKHNlc3Npb25JZCk7XG5cbiAgaW5wdXROYW1lc1VURjhFbmNvZGVkLmZvckVhY2goYnVmID0+IHdhc20uX09ydEZyZWUoYnVmKSk7XG4gIG91dHB1dE5hbWVzVVRGOEVuY29kZWQuZm9yRWFjaChidWYgPT4gd2FzbS5fT3J0RnJlZShidWYpKTtcbiAgd2FzbS5fT3J0UmVsZWFzZVNlc3Npb24oc2Vzc2lvbkhhbmRsZSk7XG4gIGFjdGl2ZVNlc3Npb25zLmRlbGV0ZShzZXNzaW9uSWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXBhcmVJbnB1dE91dHB1dFRlbnNvciA9XG4gICAgKHRlbnNvcjogVGVuc29yTWV0YWRhdGF8bnVsbCwgdGVuc29ySGFuZGxlczogbnVtYmVyW10sIGFsbG9jczogbnVtYmVyW10sIHNlc3Npb25JZDogbnVtYmVyLCBpbmRleDogbnVtYmVyLFxuICAgICBlbmFibGVHcmFwaENhcHR1cmUgPSBmYWxzZSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCF0ZW5zb3IpIHtcbiAgICAgICAgdGVuc29ySGFuZGxlcy5wdXNoKDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuXG4gICAgICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclswXTtcbiAgICAgIGNvbnN0IGRpbXMgPSB0ZW5zb3JbMV07XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IHRlbnNvclszXTtcblxuICAgICAgbGV0IHJhd0RhdGE6IG51bWJlcjtcbiAgICAgIGxldCBkYXRhQnl0ZUxlbmd0aDogbnVtYmVyO1xuXG4gICAgICBpZiAoZGF0YVR5cGUgPT09ICdzdHJpbmcnICYmIGxvY2F0aW9uID09PSAnZ3B1LWJ1ZmZlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgdGVuc29yIGlzIG5vdCBzdXBwb3J0ZWQgb24gR1BVLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5hYmxlR3JhcGhDYXB0dXJlICYmIGxvY2F0aW9uICE9PSAnZ3B1LWJ1ZmZlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEV4dGVybmFsIGJ1ZmZlciBtdXN0IGJlIHByb3ZpZGVkIGZvciBpbnB1dC9vdXRwdXQgaW5kZXggJHtpbmRleH0gd2hlbiBlbmFibGVHcmFwaENhcHR1cmUgaXMgdHJ1ZS5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxvY2F0aW9uID09PSAnZ3B1LWJ1ZmZlcicpIHtcbiAgICAgICAgY29uc3QgZ3B1QnVmZmVyID0gdGVuc29yWzJdLmdwdUJ1ZmZlciBhcyBHUFVCdWZmZXI7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTaXplSW5CeXRlcyA9IGdldFRlbnNvckVsZW1lbnRTaXplKHRlbnNvckRhdGFUeXBlU3RyaW5nVG9FbnVtKGRhdGFUeXBlKSkhO1xuICAgICAgICBkYXRhQnl0ZUxlbmd0aCA9IGRpbXMucmVkdWNlKChhLCBiKSA9PiBhICogYiwgMSkgKiBlbGVtZW50U2l6ZUluQnl0ZXM7XG5cbiAgICAgICAgY29uc3QgcmVnaXN0ZXJCdWZmZXIgPSB3YXNtLmpzZXBSZWdpc3RlckJ1ZmZlcjtcbiAgICAgICAgaWYgKCFyZWdpc3RlckJ1ZmZlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGVuc29yIGxvY2F0aW9uIFwiZ3B1LWJ1ZmZlclwiIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCB1c2luZyBXZWJHUFUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmF3RGF0YSA9IHJlZ2lzdGVyQnVmZmVyKHNlc3Npb25JZCwgaW5kZXgsIGdwdUJ1ZmZlciwgZGF0YUJ5dGVMZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRlbnNvclsyXTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgIC8vIHN0cmluZyB0ZW5zb3JcbiAgICAgICAgICBkYXRhQnl0ZUxlbmd0aCA9IDQgKiBkYXRhLmxlbmd0aDtcbiAgICAgICAgICByYXdEYXRhID0gd2FzbS5fbWFsbG9jKGRhdGFCeXRlTGVuZ3RoKTtcbiAgICAgICAgICBhbGxvY3MucHVzaChyYXdEYXRhKTtcbiAgICAgICAgICBsZXQgZGF0YUluZGV4ID0gcmF3RGF0YSAvIDQ7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHRlbnNvciBkYXRhIGF0IGluZGV4ICR7aX0gaXMgbm90IGEgc3RyaW5nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YXNtLkhFQVBVMzJbZGF0YUluZGV4KytdID0gYWxsb2NXYXNtU3RyaW5nKGRhdGFbaV0sIGFsbG9jcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGFCeXRlTGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIHJhd0RhdGEgPSB3YXNtLl9tYWxsb2MoZGF0YUJ5dGVMZW5ndGgpO1xuICAgICAgICAgIGFsbG9jcy5wdXNoKHJhd0RhdGEpO1xuICAgICAgICAgIHdhc20uSEVBUFU4LnNldChuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhQnl0ZUxlbmd0aCksIHJhd0RhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YWNrID0gd2FzbS5zdGFja1NhdmUoKTtcbiAgICAgIGNvbnN0IGRpbXNPZmZzZXQgPSB3YXNtLnN0YWNrQWxsb2MoNCAqIGRpbXMubGVuZ3RoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBkaW1JbmRleCA9IGRpbXNPZmZzZXQgLyA0O1xuICAgICAgICBkaW1zLmZvckVhY2goZCA9PiB3YXNtLkhFQVAzMltkaW1JbmRleCsrXSA9IGQpO1xuICAgICAgICBjb25zdCB0ZW5zb3IgPSB3YXNtLl9PcnRDcmVhdGVUZW5zb3IoXG4gICAgICAgICAgICB0ZW5zb3JEYXRhVHlwZVN0cmluZ1RvRW51bShkYXRhVHlwZSksIHJhd0RhdGEsIGRhdGFCeXRlTGVuZ3RoLCBkaW1zT2Zmc2V0LCBkaW1zLmxlbmd0aCxcbiAgICAgICAgICAgIGRhdGFMb2NhdGlvblN0cmluZ1RvRW51bShsb2NhdGlvbikpO1xuICAgICAgICBpZiAodGVuc29yID09PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGNyZWF0ZSB0ZW5zb3IgZm9yIGlucHV0L291dHB1dC4gc2Vzc2lvbj0ke3Nlc3Npb25JZH0sIGluZGV4PSR7aW5kZXh9LmApO1xuICAgICAgICB9XG4gICAgICAgIHRlbnNvckhhbmRsZXMucHVzaCh0ZW5zb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgd2FzbS5zdGFja1Jlc3RvcmUoc3RhY2spO1xuICAgICAgfVxuICAgIH07XG5cbi8qKlxuICogcGVyZm9ybSBpbmZlcmVuY2UgcnVuXG4gKi9cbmV4cG9ydCBjb25zdCBydW4gPSBhc3luYyhcbiAgICBzZXNzaW9uSWQ6IG51bWJlciwgaW5wdXRJbmRpY2VzOiBudW1iZXJbXSwgaW5wdXRUZW5zb3JzOiBUZW5zb3JNZXRhZGF0YVtdLCBvdXRwdXRJbmRpY2VzOiBudW1iZXJbXSxcbiAgICBvdXRwdXRUZW5zb3JzOiBBcnJheTxUZW5zb3JNZXRhZGF0YXxudWxsPiwgb3B0aW9uczogSW5mZXJlbmNlU2Vzc2lvbi5SdW5PcHRpb25zKTogUHJvbWlzZTxUZW5zb3JNZXRhZGF0YVtdPiA9PiB7XG4gIGNvbnN0IHdhc20gPSBnZXRJbnN0YW5jZSgpO1xuICBjb25zdCBzZXNzaW9uID0gYWN0aXZlU2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG4gIGlmICghc2Vzc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJ1biBpbmZlcmVuY2UuIGludmFsaWQgc2Vzc2lvbiBpZDogJHtzZXNzaW9uSWR9YCk7XG4gIH1cbiAgY29uc3Qgc2Vzc2lvbkhhbmRsZSA9IHNlc3Npb25bMF07XG4gIGNvbnN0IGlucHV0TmFtZXNVVEY4RW5jb2RlZCA9IHNlc3Npb25bMV07XG4gIGNvbnN0IG91dHB1dE5hbWVzVVRGOEVuY29kZWQgPSBzZXNzaW9uWzJdO1xuICBjb25zdCBpb0JpbmRpbmdTdGF0ZSA9IHNlc3Npb25bM107XG4gIGNvbnN0IGVuYWJsZUdyYXBoQ2FwdHVyZSA9IHNlc3Npb25bNF07XG4gIGNvbnN0IGlucHV0T3V0cHV0Qm91bmQgPSBzZXNzaW9uWzVdO1xuXG4gIGNvbnN0IGlucHV0Q291bnQgPSBpbnB1dEluZGljZXMubGVuZ3RoO1xuICBjb25zdCBvdXRwdXRDb3VudCA9IG91dHB1dEluZGljZXMubGVuZ3RoO1xuXG4gIGxldCBydW5PcHRpb25zSGFuZGxlID0gMDtcbiAgbGV0IHJ1bk9wdGlvbnNBbGxvY3M6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgaW5wdXRUZW5zb3JIYW5kbGVzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBvdXRwdXRUZW5zb3JIYW5kbGVzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBpbnB1dE91dHB1dEFsbG9jczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdCBiZWZvcmVSdW5TdGFjayA9IHdhc20uc3RhY2tTYXZlKCk7XG4gIGNvbnN0IGlucHV0VmFsdWVzT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKGlucHV0Q291bnQgKiA0KTtcbiAgY29uc3QgaW5wdXROYW1lc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyhpbnB1dENvdW50ICogNCk7XG4gIGNvbnN0IG91dHB1dFZhbHVlc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyhvdXRwdXRDb3VudCAqIDQpO1xuICBjb25zdCBvdXRwdXROYW1lc09mZnNldCA9IHdhc20uc3RhY2tBbGxvYyhvdXRwdXRDb3VudCAqIDQpO1xuXG4gIHRyeSB7XG4gICAgW3J1bk9wdGlvbnNIYW5kbGUsIHJ1bk9wdGlvbnNBbGxvY3NdID0gc2V0UnVuT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIC8vIGNyZWF0ZSBpbnB1dCB0ZW5zb3JzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgIHByZXBhcmVJbnB1dE91dHB1dFRlbnNvcihcbiAgICAgICAgICBpbnB1dFRlbnNvcnNbaV0sIGlucHV0VGVuc29ySGFuZGxlcywgaW5wdXRPdXRwdXRBbGxvY3MsIHNlc3Npb25JZCwgaW5wdXRJbmRpY2VzW2ldLCBlbmFibGVHcmFwaENhcHR1cmUpO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBvdXRwdXQgdGVuc29yc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgcHJlcGFyZUlucHV0T3V0cHV0VGVuc29yKFxuICAgICAgICAgIG91dHB1dFRlbnNvcnNbaV0sIG91dHB1dFRlbnNvckhhbmRsZXMsIGlucHV0T3V0cHV0QWxsb2NzLCBzZXNzaW9uSWQsIGlucHV0Q291bnQgKyBvdXRwdXRJbmRpY2VzW2ldLFxuICAgICAgICAgIGVuYWJsZUdyYXBoQ2FwdHVyZSk7XG4gICAgfVxuXG4gICAgbGV0IGlucHV0VmFsdWVzSW5kZXggPSBpbnB1dFZhbHVlc09mZnNldCAvIDQ7XG4gICAgbGV0IGlucHV0TmFtZXNJbmRleCA9IGlucHV0TmFtZXNPZmZzZXQgLyA0O1xuICAgIGxldCBvdXRwdXRWYWx1ZXNJbmRleCA9IG91dHB1dFZhbHVlc09mZnNldCAvIDQ7XG4gICAgbGV0IG91dHB1dE5hbWVzSW5kZXggPSBvdXRwdXROYW1lc09mZnNldCAvIDQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgIHdhc20uSEVBUFUzMltpbnB1dFZhbHVlc0luZGV4KytdID0gaW5wdXRUZW5zb3JIYW5kbGVzW2ldO1xuICAgICAgd2FzbS5IRUFQVTMyW2lucHV0TmFtZXNJbmRleCsrXSA9IGlucHV0TmFtZXNVVEY4RW5jb2RlZFtpbnB1dEluZGljZXNbaV1dO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dENvdW50OyBpKyspIHtcbiAgICAgIHdhc20uSEVBUFUzMltvdXRwdXRWYWx1ZXNJbmRleCsrXSA9IG91dHB1dFRlbnNvckhhbmRsZXNbaV07XG4gICAgICB3YXNtLkhFQVBVMzJbb3V0cHV0TmFtZXNJbmRleCsrXSA9IG91dHB1dE5hbWVzVVRGOEVuY29kZWRbb3V0cHV0SW5kaWNlc1tpXV07XG4gICAgfVxuXG4gICAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR1BVICYmIGlvQmluZGluZ1N0YXRlICYmICFpbnB1dE91dHB1dEJvdW5kKSB7XG4gICAgICBjb25zdCB7aGFuZGxlLCBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMsIG91dHB1dFByZWZlcnJlZExvY2F0aW9uc0VuY29kZWR9ID0gaW9CaW5kaW5nU3RhdGU7XG5cbiAgICAgIGlmIChpbnB1dE5hbWVzVVRGOEVuY29kZWQubGVuZ3RoICE9PSBpbnB1dENvdW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5wdXQgY291bnQgZnJvbSBmZWVkcyAoJHtcbiAgICAgICAgICAgIGlucHV0Q291bnR9KSBpcyBleHBlY3RlZCB0byBiZSBhbHdheXMgZXF1YWwgdG8gbW9kZWwncyBpbnB1dCBjb3VudCAoJHtpbnB1dE5hbWVzVVRGOEVuY29kZWQubGVuZ3RofSkuYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHByb2Nlc3MgaW5wdXRzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBpbmRleCA9IGlucHV0SW5kaWNlc1tpXTtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gYXdhaXQgd2FzbS5fT3J0QmluZElucHV0KGhhbmRsZSwgaW5wdXROYW1lc1VURjhFbmNvZGVkW2luZGV4XSwgaW5wdXRUZW5zb3JIYW5kbGVzW2ldKTtcbiAgICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBiaW5kIGlucHV0WyR7aX1dIGZvciBzZXNzaW9uPSR7c2Vzc2lvbklkfS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwcm9jZXNzIHByZS1hbGxvY2F0ZWQgb3V0cHV0c1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gb3V0cHV0SW5kaWNlc1tpXTtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBvdXRwdXRUZW5zb3JzW2ldPy5bM107ICAvLyB1bmRlZmluZWQgbWVhbnMgb3V0cHV0IGlzIG5vdCBwcmUtYWxsb2NhdGVkLlxuXG4gICAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICAgIC8vIG91dHB1dCBpcyBwcmUtYWxsb2NhdGVkLiBiaW5kIHRoZSB0ZW5zb3IuXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbS5fT3J0QmluZE91dHB1dChoYW5kbGUsIG91dHB1dE5hbWVzVVRGOEVuY29kZWRbaW5kZXhdLCBvdXRwdXRUZW5zb3JIYW5kbGVzW2ldLCAwKTtcbiAgICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgYmluZCBwcmUtYWxsb2NhdGVkIG91dHB1dFske2l9XSBmb3Igc2Vzc2lvbj0ke3Nlc3Npb25JZH0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG91dHB1dCBpcyBub3QgcHJlLWFsbG9jYXRlZC4gcmVzZXQgcHJlZmVycmVkIGxvY2F0aW9uLlxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZSA9XG4gICAgICAgICAgICAgIHdhc20uX09ydEJpbmRPdXRwdXQoaGFuZGxlLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkW2luZGV4XSwgMCwgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zRW5jb2RlZFtpbmRleF0pO1xuICAgICAgICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBiaW5kIG91dHB1dFske2l9XSB0byAke291dHB1dFByZWZlcnJlZExvY2F0aW9uc1tpXX0gZm9yIHNlc3Npb249JHtzZXNzaW9uSWR9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWN0aXZlU2Vzc2lvbnMuc2V0KFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc1VURjhFbmNvZGVkLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkLCBpb0JpbmRpbmdTdGF0ZSwgZW5hYmxlR3JhcGhDYXB0dXJlLCB0cnVlXSk7XG4gICAgfVxuXG4gICAgd2FzbS5qc2VwT25SdW5TdGFydD8uKHNlc3Npb25IYW5kbGUpO1xuICAgIGxldCBlcnJvckNvZGU6IG51bWJlcjtcbiAgICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUgJiYgaW9CaW5kaW5nU3RhdGUpIHtcbiAgICAgIGVycm9yQ29kZSA9IGF3YWl0IHdhc20uX09ydFJ1bldpdGhCaW5kaW5nKFxuICAgICAgICAgIHNlc3Npb25IYW5kbGUsIGlvQmluZGluZ1N0YXRlLmhhbmRsZSwgb3V0cHV0Q291bnQsIG91dHB1dFZhbHVlc09mZnNldCwgcnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yQ29kZSA9IGF3YWl0IHdhc20uX09ydFJ1bihcbiAgICAgICAgICBzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzT2Zmc2V0LCBpbnB1dFZhbHVlc09mZnNldCwgaW5wdXRDb3VudCwgb3V0cHV0TmFtZXNPZmZzZXQsIG91dHB1dENvdW50LFxuICAgICAgICAgIG91dHB1dFZhbHVlc09mZnNldCwgcnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoJ2ZhaWxlZCB0byBjYWxsIE9ydFJ1bigpLicpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dDogVGVuc29yTWV0YWRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB0ZW5zb3IgPSB3YXNtLkhFQVBVMzJbb3V0cHV0VmFsdWVzT2Zmc2V0IC8gNCArIGldO1xuICAgICAgaWYgKHRlbnNvciA9PT0gb3V0cHV0VGVuc29ySGFuZGxlc1tpXSkge1xuICAgICAgICAvLyBvdXRwdXQgdGVuc29yIGlzIHByZS1hbGxvY2F0ZWQuIG5vIG5lZWQgdG8gY29weSBkYXRhLlxuICAgICAgICBvdXRwdXQucHVzaChvdXRwdXRUZW5zb3JzW2ldISk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiZWZvcmVHZXRUZW5zb3JEYXRhU3RhY2sgPSB3YXNtLnN0YWNrU2F2ZSgpO1xuICAgICAgLy8gc3RhY2sgYWxsb2NhdGUgNCBwb2ludGVyIHZhbHVlXG4gICAgICBjb25zdCB0ZW5zb3JEYXRhT2Zmc2V0ID0gd2FzbS5zdGFja0FsbG9jKDQgKiA0KTtcblxuICAgICAgbGV0IGtlZXBPdXRwdXRUZW5zb3IgPSBmYWxzZTtcbiAgICAgIGxldCB0eXBlOiBUZW5zb3IuVHlwZXx1bmRlZmluZWQsIGRhdGFPZmZzZXQgPSAwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbS5fT3J0R2V0VGVuc29yRGF0YShcbiAgICAgICAgICAgIHRlbnNvciwgdGVuc29yRGF0YU9mZnNldCwgdGVuc29yRGF0YU9mZnNldCArIDQsIHRlbnNvckRhdGFPZmZzZXQgKyA4LCB0ZW5zb3JEYXRhT2Zmc2V0ICsgMTIpO1xuICAgICAgICBpZiAoZXJyb3JDb2RlICE9PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGFjY2VzcyBvdXRwdXQgdGVuc29yIGRhdGEgb24gaW5kZXggJHtpfS5gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGVuc29yRGF0YUluZGV4ID0gdGVuc29yRGF0YU9mZnNldCAvIDQ7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgZGF0YU9mZnNldCA9IHdhc20uSEVBUFUzMlt0ZW5zb3JEYXRhSW5kZXgrK107XG4gICAgICAgIGNvbnN0IGRpbXNPZmZzZXQgPSB3YXNtLkhFQVBVMzJbdGVuc29yRGF0YUluZGV4KytdO1xuICAgICAgICBjb25zdCBkaW1zTGVuZ3RoID0gd2FzbS5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgY29uc3QgZGltcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbXNMZW5ndGg7IGkrKykge1xuICAgICAgICAgIGRpbXMucHVzaCh3YXNtLkhFQVBVMzJbZGltc09mZnNldCAvIDQgKyBpXSk7XG4gICAgICAgIH1cbiAgICAgICAgd2FzbS5fT3J0RnJlZShkaW1zT2Zmc2V0KTtcblxuICAgICAgICBjb25zdCBzaXplID0gZGltcy5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiLCAxKTtcbiAgICAgICAgdHlwZSA9IHRlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nKGRhdGFUeXBlKTtcblxuICAgICAgICBjb25zdCBwcmVmZXJyZWRMb2NhdGlvbiA9IGlvQmluZGluZ1N0YXRlPy5vdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNbb3V0cHV0SW5kaWNlc1tpXV07XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHByZWZlcnJlZExvY2F0aW9uID09PSAnZ3B1LWJ1ZmZlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5nIHRlbnNvciBpcyBub3Qgc3VwcG9ydGVkIG9uIEdQVS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RyaW5nRGF0YTogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBsZXQgZGF0YUluZGV4ID0gZGF0YU9mZnNldCAvIDQ7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHdhc20uSEVBUFUzMltkYXRhSW5kZXgrK107XG4gICAgICAgICAgICBjb25zdCBtYXhCeXRlc1RvUmVhZCA9IGkgPT09IHNpemUgLSAxID8gdW5kZWZpbmVkIDogd2FzbS5IRUFQVTMyW2RhdGFJbmRleF0gLSBvZmZzZXQ7XG4gICAgICAgICAgICBzdHJpbmdEYXRhLnB1c2god2FzbS5VVEY4VG9TdHJpbmcob2Zmc2V0LCBtYXhCeXRlc1RvUmVhZCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXRwdXQucHVzaChbdHlwZSwgZGltcywgc3RyaW5nRGF0YSwgJ2NwdSddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBhIGNlcnRhaW4gb3V0cHV0J3MgcHJlZmVycmVkIGxvY2F0aW9uIGlzIEdQVSBidXQgdGhlIHRlbnNvciBpcyBlbXB0eSwgd2Ugc3RpbGwgbmVlZCB0byBjcmVhdGUgYSBDUFVcbiAgICAgICAgICAvLyB0ZW5zb3IgZm9yIGl0LiBUaGVyZSBpcyBubyBtYXBwaW5nIEdQVSBidWZmZXIgZm9yIGFuIGVtcHR5IHRlbnNvci5cbiAgICAgICAgICBpZiAocHJlZmVycmVkTG9jYXRpb24gPT09ICdncHUtYnVmZmVyJyAmJiBzaXplID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZ2V0QnVmZmVyID0gd2FzbS5qc2VwR2V0QnVmZmVyO1xuICAgICAgICAgICAgaWYgKCFnZXRCdWZmZXIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcmVmZXJyZWRMb2NhdGlvbiBcImdwdS1idWZmZXJcIiBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgdXNpbmcgV2ViR1BVLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZ3B1QnVmZmVyID0gZ2V0QnVmZmVyKGRhdGFPZmZzZXQpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNpemUgPSBnZXRUZW5zb3JFbGVtZW50U2l6ZShkYXRhVHlwZSk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudFNpemUgPT09IHVuZGVmaW5lZCB8fCAhaXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlKHR5cGUpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZGF0YSB0eXBlOiAke3R5cGV9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRvIG5vdCByZWxlYXNlIHRoZSB0ZW5zb3IgcmlnaHQgbm93LiBpdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdXNlciBjYWxscyB0ZW5zb3IuZGlzcG9zZSgpLlxuICAgICAgICAgICAga2VlcE91dHB1dFRlbnNvciA9IHRydWU7XG5cbiAgICAgICAgICAgIG91dHB1dC5wdXNoKFtcbiAgICAgICAgICAgICAgdHlwZSwgZGltcywge1xuICAgICAgICAgICAgICAgIGdwdUJ1ZmZlcixcbiAgICAgICAgICAgICAgICBkb3dubG9hZDogd2FzbS5qc2VwQ3JlYXRlRG93bmxvYWRlciEoZ3B1QnVmZmVyLCBzaXplICogZWxlbWVudFNpemUsIHR5cGUpLFxuICAgICAgICAgICAgICAgIGRpc3Bvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHdhc20uX09ydFJlbGVhc2VUZW5zb3IodGVuc29yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICdncHUtYnVmZmVyJ1xuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgdHlwZWRBcnJheUNvbnN0cnVjdG9yKHNpemUpO1xuICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuICAgICAgICAgICAgICAgIC5zZXQod2FzbS5IRUFQVTguc3ViYXJyYXkoZGF0YU9mZnNldCwgZGF0YU9mZnNldCArIGRhdGEuYnl0ZUxlbmd0aCkpO1xuICAgICAgICAgICAgb3V0cHV0LnB1c2goW3R5cGUsIGRpbXMsIGRhdGEsICdjcHUnXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB3YXNtLnN0YWNrUmVzdG9yZShiZWZvcmVHZXRUZW5zb3JEYXRhU3RhY2spO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgZGF0YU9mZnNldCkge1xuICAgICAgICAgIHdhc20uX2ZyZWUoZGF0YU9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFrZWVwT3V0cHV0VGVuc29yKSB7XG4gICAgICAgICAgd2FzbS5fT3J0UmVsZWFzZVRlbnNvcih0ZW5zb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlvQmluZGluZ1N0YXRlICYmICFlbmFibGVHcmFwaENhcHR1cmUpIHtcbiAgICAgIHdhc20uX09ydENsZWFyQm91bmRPdXRwdXRzKGlvQmluZGluZ1N0YXRlLmhhbmRsZSk7XG4gICAgICBhY3RpdmVTZXNzaW9ucy5zZXQoXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIFtzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzVVRGOEVuY29kZWQsIG91dHB1dE5hbWVzVVRGOEVuY29kZWQsIGlvQmluZGluZ1N0YXRlLCBlbmFibGVHcmFwaENhcHR1cmUsIGZhbHNlXSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0gZmluYWxseSB7XG4gICAgd2FzbS5zdGFja1Jlc3RvcmUoYmVmb3JlUnVuU3RhY2spO1xuXG4gICAgaW5wdXRUZW5zb3JIYW5kbGVzLmZvckVhY2godiA9PiB3YXNtLl9PcnRSZWxlYXNlVGVuc29yKHYpKTtcbiAgICBvdXRwdXRUZW5zb3JIYW5kbGVzLmZvckVhY2godiA9PiB3YXNtLl9PcnRSZWxlYXNlVGVuc29yKHYpKTtcbiAgICBpbnB1dE91dHB1dEFsbG9jcy5mb3JFYWNoKHAgPT4gd2FzbS5fZnJlZShwKSk7XG5cbiAgICBpZiAocnVuT3B0aW9uc0hhbmRsZSAhPT0gMCkge1xuICAgICAgd2FzbS5fT3J0UmVsZWFzZVJ1bk9wdGlvbnMocnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgfVxuICAgIHJ1bk9wdGlvbnNBbGxvY3MuZm9yRWFjaChwID0+IHdhc20uX2ZyZWUocCkpO1xuICB9XG59O1xuXG4vKipcbiAqIGVuZCBwcm9maWxpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGVuZFByb2ZpbGluZyA9IChzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICBjb25zdCB3YXNtID0gZ2V0SW5zdGFuY2UoKTtcbiAgY29uc3Qgc2Vzc2lvbiA9IGFjdGl2ZVNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICBpZiAoIXNlc3Npb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2Vzc2lvbiBpZCcpO1xuICB9XG4gIGNvbnN0IHNlc3Npb25IYW5kbGUgPSBzZXNzaW9uWzBdO1xuXG4gIC8vIHByb2ZpbGUgZmlsZSBuYW1lIGlzIG5vdCB1c2VkIHlldCwgYnV0IGl0IG11c3QgYmUgZnJlZWQuXG4gIGNvbnN0IHByb2ZpbGVGaWxlTmFtZSA9IHdhc20uX09ydEVuZFByb2ZpbGluZyhzZXNzaW9uSGFuZGxlKTtcbiAgaWYgKHByb2ZpbGVGaWxlTmFtZSA9PT0gMCkge1xuICAgIGNoZWNrTGFzdEVycm9yKCdDYW5cXCd0IGdldCBhbiBwcm9maWxlIGZpbGUgbmFtZS4nKTtcbiAgfVxuICB3YXNtLl9PcnRGcmVlKHByb2ZpbGVGaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdFRyYW5zZmVyYWJsZUJ1ZmZlcnMgPSAodGVuc29yczogcmVhZG9ubHkgU2VyaWFsaXphYmxlVGVuc29yTWV0YWRhdGFbXSk6IEFycmF5QnVmZmVyTGlrZVtdID0+IHtcbiAgY29uc3QgYnVmZmVyczogQXJyYXlCdWZmZXJMaWtlW10gPSBbXTtcbiAgZm9yIChjb25zdCB0ZW5zb3Igb2YgdGVuc29ycykge1xuICAgIGNvbnN0IGRhdGEgPSB0ZW5zb3JbMl07XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpICYmICdidWZmZXInIGluIGRhdGEpIHtcbiAgICAgIGJ1ZmZlcnMucHVzaChkYXRhLmJ1ZmZlcik7XG4gICAgfVxuICB9XG4gIHJldHVybiBidWZmZXJzO1xufTtcbiIsICIvKiFcbiAqIE9OTlggUnVudGltZSBXZWIgdjEuMTguMFxuICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuKCgpID0+IHtcbiAgdmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbiAgdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICB2YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gIHZhciBfX2VzbSA9IChmbiwgcmVzKSA9PiBmdW5jdGlvbiBfX2luaXQoKSB7XG4gICAgcmV0dXJuIGZuICYmIChyZXMgPSAoMCwgZm5bX19nZXRPd25Qcm9wTmFtZXMoZm4pWzBdXSkoZm4gPSAwKSksIHJlcztcbiAgfTtcbiAgdmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkge1xuICAgIHJldHVybiBtb2QgfHwgKDAsIGNiW19fZ2V0T3duUHJvcE5hbWVzKGNiKVswXV0pKChtb2QgPSB7IGV4cG9ydHM6IHt9IH0pLmV4cG9ydHMsIG1vZCksIG1vZC5leHBvcnRzO1xuICB9O1xuICB2YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG4gIH07XG4gIHZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG4gICAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pKVxuICAgICAgICBpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KVxuICAgICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRvO1xuICB9O1xuICB2YXIgX190b0NvbW1vbkpTID0gKG1vZCkgPT4gX19jb3B5UHJvcHMoX19kZWZQcm9wKHt9LCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KSwgbW9kKTtcblxuICAvLyBub2RlanMtaWdub3JlOmZzXG4gIHZhciBmc19leHBvcnRzID0ge307XG4gIF9fZXhwb3J0KGZzX2V4cG9ydHMsIHtcbiAgICBjcmVhdGVSZWFkU3RyZWFtOiAoKSA9PiBjcmVhdGVSZWFkU3RyZWFtLFxuICAgIHJlYWRGaWxlOiAoKSA9PiByZWFkRmlsZSxcbiAgICByZWFkRmlsZVN5bmM6ICgpID0+IHJlYWRGaWxlU3luY1xuICB9KTtcbiAgdmFyIHJlYWRGaWxlLCByZWFkRmlsZVN5bmMsIGNyZWF0ZVJlYWRTdHJlYW07XG4gIHZhciBpbml0X2ZzID0gX19lc20oe1xuICAgIFwibm9kZWpzLWlnbm9yZTpmc1wiKCkge1xuICAgICAgcmVhZEZpbGUgPSB2b2lkIDA7XG4gICAgICByZWFkRmlsZVN5bmMgPSB2b2lkIDA7XG4gICAgICBjcmVhdGVSZWFkU3RyZWFtID0gdm9pZCAwO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gbm9kZWpzLWlnbm9yZTpwYXRoXG4gIHZhciBwYXRoX2V4cG9ydHMgPSB7fTtcbiAgX19leHBvcnQocGF0aF9leHBvcnRzLCB7XG4gICAgam9pbjogKCkgPT4gam9pbjJcbiAgfSk7XG4gIHZhciBqb2luMjtcbiAgdmFyIGluaXRfcGF0aCA9IF9fZXNtKHtcbiAgICBcIm5vZGVqcy1pZ25vcmU6cGF0aFwiKCkge1xuICAgICAgam9pbjIgPSB2b2lkIDA7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS1zaW1kLmpzZXAuanNcbiAgdmFyIHJlcXVpcmVfb3J0X3dhc21fc2ltZF9qc2VwID0gX19jb21tb25KUyh7XG4gICAgXCJ3ZWIvbGliL3dhc20vYmluZGluZy9vcnQtd2FzbS1zaW1kLmpzZXAuanNcIihleHBvcnRzLCBtb2R1bGUpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgdmFyIG9ydFdhc20gPSAoKCkgPT4ge1xuICAgICAgICB2YXIgX3NjcmlwdERpciA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdD8uc3JjIDogdm9pZCAwO1xuICAgICAgICBpZiAodHlwZW9mIF9fZmlsZW5hbWUgIT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICBfc2NyaXB0RGlyIHx8PSBfX2ZpbGVuYW1lO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlQXJnID0ge30pIHtcbiAgICAgICAgICB2YXIgZyA9IG1vZHVsZUFyZywgYWEsIGJhLCByZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgYWEgPSBhO1xuICAgICAgICAgICAgYmEgPSBiO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICAgIGcubW91bnRFeHRlcm5hbERhdGEgPSAoYSwgYikgPT4ge1xuICAgICAgICAgICAgKGcuUGggfHwgKGcuUGggPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKSkuc2V0KGEsIGIpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZy51bm1vdW50RXh0ZXJuYWxEYXRhID0gKCkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGcuUGg7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBsZXQgZGEgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gKGMsIGQsIGUpID0+ICguLi5mKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGggPSB0LCBrID0gZD8uKCk7XG4gICAgICAgICAgICAgIGYgPSBjKC4uLmYpO1xuICAgICAgICAgICAgICBjb25zdCBsID0gZD8uKCk7XG4gICAgICAgICAgICAgIGsgIT09IGwgJiYgKGMgPSBsLCBlKGspLCBkID0gZSA9IG51bGwpO1xuICAgICAgICAgICAgICByZXR1cm4gdCAhPSBoID8gY2EoKSA6IGY7XG4gICAgICAgICAgICB9LCBiID0gKGMpID0+IGFzeW5jICguLi5kKSA9PiB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGcuT2gpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlNlc3Npb24gYWxyZWFkeSBzdGFydGVkXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBnLk9oID0geyBnaTogZFswXSwgZXJyb3JzOiBbXSB9LCBmID0gYXdhaXQgYyguLi5kKTtcbiAgICAgICAgICAgICAgICBpZiAoZy5PaCAhPT0gZSlcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiU2Vzc2lvbiBtaXNtYXRjaFwiKTtcbiAgICAgICAgICAgICAgICBnLlVoPy5mbHVzaCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGggPSBlLmVycm9ycztcbiAgICAgICAgICAgICAgICBpZiAoMCA8IGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgayA9IGF3YWl0IFByb21pc2UuYWxsKGgpO1xuICAgICAgICAgICAgICAgICAgayA9IGsuZmlsdGVyKChsKSA9PiBsKTtcbiAgICAgICAgICAgICAgICAgIGlmICgwIDwgay5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGsuam9pbihcIlxcblwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGcuT2ggPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZy5fT3J0Q3JlYXRlU2Vzc2lvbiA9IGEoXG4gICAgICAgICAgICAgIGcuX09ydENyZWF0ZVNlc3Npb24sXG4gICAgICAgICAgICAgICgpID0+IGcuX09ydENyZWF0ZVNlc3Npb24sXG4gICAgICAgICAgICAgIChjKSA9PiBnLl9PcnRDcmVhdGVTZXNzaW9uID0gY1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGcuX09ydFJ1biA9IGIoYShnLl9PcnRSdW4sICgpID0+IGcuX09ydFJ1biwgKGMpID0+IGcuX09ydFJ1biA9IGMpKTtcbiAgICAgICAgICAgIGcuX09ydFJ1bldpdGhCaW5kaW5nID0gYihhKGcuX09ydFJ1bldpdGhCaW5kaW5nLCAoKSA9PiBnLl9PcnRSdW5XaXRoQmluZGluZywgKGMpID0+IGcuX09ydFJ1bldpdGhCaW5kaW5nID0gYykpO1xuICAgICAgICAgICAgZy5fT3J0QmluZElucHV0ID0gYShnLl9PcnRCaW5kSW5wdXQsICgpID0+IGcuX09ydEJpbmRJbnB1dCwgKGMpID0+IGcuX09ydEJpbmRJbnB1dCA9IGMpO1xuICAgICAgICAgICAgZGEgPSB2b2lkIDA7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBnLmpzZXBJbml0ID0gKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGRhPy4oKTtcbiAgICAgICAgICAgIGlmIChcIndlYmdwdVwiID09PSBhKSB7XG4gICAgICAgICAgICAgIFtnLlVoLCBnLlpoLCBnLmNpLCBnLlZoLCBnLmJpLCBnLmplLCBnLmRpLCBnLmZpLCBnLiRoLCBnLmFpLCBnLmVpXSA9IGI7XG4gICAgICAgICAgICAgIGNvbnN0IGMgPSBnLlVoO1xuICAgICAgICAgICAgICBnLmpzZXBSZWdpc3RlckJ1ZmZlciA9IChkLCBlLCBmLCBoKSA9PiBjLnJlZ2lzdGVyQnVmZmVyKGQsIGUsIGYsIGgpO1xuICAgICAgICAgICAgICBnLmpzZXBHZXRCdWZmZXIgPSAoZCkgPT4gYy5nZXRCdWZmZXIoZCk7XG4gICAgICAgICAgICAgIGcuanNlcENyZWF0ZURvd25sb2FkZXIgPSAoZCwgZSwgZikgPT4gYy5jcmVhdGVEb3dubG9hZGVyKGQsIGUsIGYpO1xuICAgICAgICAgICAgICBnLmpzZXBPblJlbGVhc2VTZXNzaW9uID0gKGQpID0+IHtcbiAgICAgICAgICAgICAgICBjLm9uUmVsZWFzZVNlc3Npb24oZCk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGcuanNlcE9uUnVuU3RhcnQgPSAoZCkgPT4gYy5vblJ1blN0YXJ0KGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIGVhID0gT2JqZWN0LmFzc2lnbih7fSwgZyksIGZhID0gXCIuL3RoaXMucHJvZ3JhbVwiLCBoYSA9IChhLCBiKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBiO1xuICAgICAgICAgIH0sIGlhID0gXCJvYmplY3RcIiA9PSB0eXBlb2Ygd2luZG93LCBqYSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgaW1wb3J0U2NyaXB0cywga2EgPSBcIm9iamVjdFwiID09IHR5cGVvZiBwcm9jZXNzICYmIFwib2JqZWN0XCIgPT0gdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMgJiYgXCJzdHJpbmdcIiA9PSB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLCB2ID0gXCJcIiwgbGEsIG1hLCBuYTtcbiAgICAgICAgICBpZiAoa2EpIHtcbiAgICAgICAgICAgIHZhciBmcyA9IChpbml0X2ZzKCksIF9fdG9Db21tb25KUyhmc19leHBvcnRzKSksIG9hID0gKGluaXRfcGF0aCgpLCBfX3RvQ29tbW9uSlMocGF0aF9leHBvcnRzKSk7XG4gICAgICAgICAgICB2ID0gamEgPyBvYS5kaXJuYW1lKHYpICsgXCIvXCIgOiBfX2Rpcm5hbWUgKyBcIi9cIjtcbiAgICAgICAgICAgIGxhID0gKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgYSA9IHBhKGEpID8gbmV3IFVSTChhKSA6IG9hLm5vcm1hbGl6ZShhKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhhLCBiID8gdm9pZCAwIDogXCJ1dGY4XCIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG5hID0gKGEpID0+IHtcbiAgICAgICAgICAgICAgYSA9IGxhKGEsIHRydWUpO1xuICAgICAgICAgICAgICBhLmJ1ZmZlciB8fCAoYSA9IG5ldyBVaW50OEFycmF5KGEpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbWEgPSAoYSwgYiwgYywgZCA9IHRydWUpID0+IHtcbiAgICAgICAgICAgICAgYSA9IHBhKGEpID8gbmV3IFVSTChhKSA6IG9hLm5vcm1hbGl6ZShhKTtcbiAgICAgICAgICAgICAgZnMucmVhZEZpbGUoYSwgZCA/IHZvaWQgMCA6IFwidXRmOFwiLCAoZSwgZikgPT4ge1xuICAgICAgICAgICAgICAgIGUgPyBjKGUpIDogYihkID8gZi5idWZmZXIgOiBmKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgIWcudGhpc1Byb2dyYW0gJiYgMSA8IHByb2Nlc3MuYXJndi5sZW5ndGggJiYgKGZhID0gcHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpKTtcbiAgICAgICAgICAgIHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgICAgICAgICAgIGhhID0gKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IGE7XG4gICAgICAgICAgICAgIHRocm93IGI7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoaWEgfHwgamEpXG4gICAgICAgICAgICBqYSA/IHYgPSBzZWxmLmxvY2F0aW9uLmhyZWYgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBkb2N1bWVudCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmICh2ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLCBfc2NyaXB0RGlyICYmICh2ID0gX3NjcmlwdERpciksIHYuc3RhcnRzV2l0aChcImJsb2I6XCIpID8gdiA9IFwiXCIgOiB2ID0gdi5zdWJzdHIoMCwgdi5yZXBsYWNlKC9bPyNdLiovLCBcIlwiKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSwgbGEgPSAoYSkgPT4ge1xuICAgICAgICAgICAgICB2YXIgYiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICBiLm9wZW4oXCJHRVRcIiwgYSwgZmFsc2UpO1xuICAgICAgICAgICAgICBiLnNlbmQobnVsbCk7XG4gICAgICAgICAgICAgIHJldHVybiBiLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgIH0sIGphICYmIChuYSA9IChhKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBiID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgIGIub3BlbihcIkdFVFwiLCBhLCBmYWxzZSk7XG4gICAgICAgICAgICAgIGIucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuICAgICAgICAgICAgICBiLnNlbmQobnVsbCk7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiLnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pLCBtYSA9IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBkID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgIGQub3BlbihcIkdFVFwiLCBhLCB0cnVlKTtcbiAgICAgICAgICAgICAgZC5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgICAgICAgICAgIGQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIDIwMCA9PSBkLnN0YXR1cyB8fCAwID09IGQuc3RhdHVzICYmIGQucmVzcG9uc2UgPyBiKGQucmVzcG9uc2UpIDogYygpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBkLm9uZXJyb3IgPSBjO1xuICAgICAgICAgICAgICBkLnNlbmQobnVsbCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBxYSA9IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksIHcgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihnLCBlYSk7XG4gICAgICAgICAgZWEgPSBudWxsO1xuICAgICAgICAgIHZhciByYSwgeCA9IGZhbHNlLCBzYSwgeiwgRSwgdGEsIHVhLCBHLCBJLCB2YSwgd2EsIHhhLCB5YTtcbiAgICAgICAgICBmdW5jdGlvbiB6YSgpIHtcbiAgICAgICAgICAgIHZhciBhID0gcmEuYnVmZmVyO1xuICAgICAgICAgICAgZy5IRUFQOCA9IHogPSBuZXcgSW50OEFycmF5KGEpO1xuICAgICAgICAgICAgZy5IRUFQMTYgPSB0YSA9IG5ldyBJbnQxNkFycmF5KGEpO1xuICAgICAgICAgICAgZy5IRUFQVTggPSBFID0gbmV3IFVpbnQ4QXJyYXkoYSk7XG4gICAgICAgICAgICBnLkhFQVBVMTYgPSB1YSA9IG5ldyBVaW50MTZBcnJheShhKTtcbiAgICAgICAgICAgIGcuSEVBUDMyID0gRyA9IG5ldyBJbnQzMkFycmF5KGEpO1xuICAgICAgICAgICAgZy5IRUFQVTMyID0gSSA9IG5ldyBVaW50MzJBcnJheShhKTtcbiAgICAgICAgICAgIGcuSEVBUEYzMiA9IHZhID0gbmV3IEZsb2F0MzJBcnJheShhKTtcbiAgICAgICAgICAgIGcuSEVBUEY2NCA9IHlhID0gbmV3IEZsb2F0NjRBcnJheShhKTtcbiAgICAgICAgICAgIGcuSEVBUDY0ID0gd2EgPSBuZXcgQmlnSW50NjRBcnJheShhKTtcbiAgICAgICAgICAgIGcuSEVBUFU2NCA9IHhhID0gbmV3IEJpZ1VpbnQ2NEFycmF5KGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgQWEgPSBbXSwgQmEgPSBbXSwgQ2EgPSBbXSwgRGEgPSAwLCBFYSA9IG51bGwsIEZhID0gbnVsbDtcbiAgICAgICAgICBmdW5jdGlvbiBHYShhKSB7XG4gICAgICAgICAgICBhID0gXCJBYm9ydGVkKFwiICsgYSArIFwiKVwiO1xuICAgICAgICAgICAgdyhhKTtcbiAgICAgICAgICAgIHggPSB0cnVlO1xuICAgICAgICAgICAgc2EgPSAxO1xuICAgICAgICAgICAgYSA9IG5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoYSArIFwiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLlwiKTtcbiAgICAgICAgICAgIGJhKGEpO1xuICAgICAgICAgICAgdGhyb3cgYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIEhhID0gKGEpID0+IGEuc3RhcnRzV2l0aChcImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxcIiksIHBhID0gKGEpID0+IGEuc3RhcnRzV2l0aChcImZpbGU6Ly9cIiksIElhO1xuICAgICAgICAgIElhID0gXCJvcnQtd2FzbS1zaW1kLndhc21cIjtcbiAgICAgICAgICBpZiAoIUhhKElhKSkge1xuICAgICAgICAgICAgdmFyIEphID0gSWE7XG4gICAgICAgICAgICBJYSA9IGcubG9jYXRlRmlsZSA/IGcubG9jYXRlRmlsZShKYSwgdikgOiB2ICsgSmE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEthKGEpIHtcbiAgICAgICAgICAgIGlmIChuYSlcbiAgICAgICAgICAgICAgcmV0dXJuIG5hKGEpO1xuICAgICAgICAgICAgdGhyb3cgXCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBMYShhKSB7XG4gICAgICAgICAgICBpZiAoaWEgfHwgamEpIHtcbiAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZmV0Y2ggJiYgIXBhKGEpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaChhLCB7IGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIgfSkudGhlbigoYikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCFiLm9rKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBgZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnJHthfSdgO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiBLYShhKSk7XG4gICAgICAgICAgICAgIGlmIChtYSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgICAgIG1hKGEsIChkKSA9PiBiKG5ldyBVaW50OEFycmF5KGQpKSwgYyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBLYShhKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIE1hKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHJldHVybiBMYShhKS50aGVuKChkKSA9PiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShkLCBiKSkudGhlbihjLCAoZCkgPT4ge1xuICAgICAgICAgICAgICB3KGBmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAke2R9YCk7XG4gICAgICAgICAgICAgIEdhKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIE5hKGEsIGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gSWE7XG4gICAgICAgICAgICByZXR1cm4gXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyB8fCBIYShjKSB8fCBwYShjKSB8fCBrYSB8fCBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGZldGNoID8gTWEoYywgYSwgYikgOiBmZXRjaChjLCB7IGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIgfSkudGhlbigoZCkgPT4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoZCwgYSkudGhlbihiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgIHcoYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke2V9YCk7XG4gICAgICAgICAgICAgIHcoXCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvblwiKTtcbiAgICAgICAgICAgICAgcmV0dXJuIE1hKGMsIGEsIGIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgT2EgPSB7XG4gICAgICAgICAgICAxMjYxNTA0OiAoYSwgYiwgYywgZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiA9PSB0eXBlb2YgZyB8fCAhZy5QaClcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgYSA9IEooYSA+Pj4gMCk7XG4gICAgICAgICAgICAgIGEuc3RhcnRzV2l0aChcIi4vXCIpICYmIChhID0gYS5zdWJzdHJpbmcoMikpO1xuICAgICAgICAgICAgICBhID0gZy5QaC5nZXQoYSk7XG4gICAgICAgICAgICAgIGlmICghYSlcbiAgICAgICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgICBpZiAoYiArIGMgPiBhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDM7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEUuc2V0KGEuc3ViYXJyYXkoYiwgYiArIGMpLCBkID4+PiAwID4+PiAwKSwgMDtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjYyMDA1OiAoYSwgYiwgYykgPT4ge1xuICAgICAgICAgICAgICBjID0gSihjKTtcbiAgICAgICAgICAgICAgY29uc3QgZCA9IG5ldyBVaW50OEFycmF5KGIpO1xuICAgICAgICAgICAgICBkLnNldChFLnN1YmFycmF5KGEgPj4+IDAsIGEgKyBiID4+PiAwKSk7XG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT0gdHlwZW9mIHByb2Nlc3MgJiYgXCJvYmplY3RcIiA9PSB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyAmJiBcInN0cmluZ1wiID09IHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgPyAoaW5pdF9mcygpLCBfX3RvQ29tbW9uSlMoZnNfZXhwb3J0cykpLndyaXRlRmlsZVN5bmMoYywgZCkgOiAoYSA9IG5ldyBGaWxlKFtkXSwgYywgeyB0eXBlOiBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiIH0pLCBhID0gVVJMLmNyZWF0ZU9iamVjdFVSTChhKSwgd2luZG93Lm9wZW4oYSwgXCJfYmxhbmtcIikpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjI1MTM6ICgpID0+IHtcbiAgICAgICAgICAgICAgZy4kaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjI1NDQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgZy5haSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjI1NzM6ICgpID0+IHtcbiAgICAgICAgICAgICAgZy5laSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjI1OTg6IChhKSA9PiBnLlpoKGEpLFxuICAgICAgICAgICAgMTI2MjYzMTogKGEpID0+IGcuY2koYSksXG4gICAgICAgICAgICAxMjYyNjYzOiAoYSwgYiwgYykgPT4ge1xuICAgICAgICAgICAgICBnLlZoKGEsIGIsIGMsIHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjI3MDI6IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgIGcuVmgoYSwgYiwgYyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2MjczNTogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkFic1wiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjI3ODY6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJOZWdcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjYyODM3OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiRmxvb3JcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjYyODkwOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiQ2VpbFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjI5NDI6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJSZWNpcHJvY2FsXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2M2UzOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiU3FydFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjMwNTI6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJFeHBcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjYzMTAzOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiRXJmXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2MzE1NDogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlNpZ21vaWRcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjYzMjA5OiAoYSwgYiwgYykgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiSGFyZFNpZ21vaWRcIiwgYSwgeyBhbHBoYTogYiwgYmV0YTogYyB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjYzMjg4OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiTG9nXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2MzMzOTogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlNpblwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjMzOTA6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJDb3NcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjYzNDQxOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiVGFuXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2MzQ5MjogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkFzaW5cIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjYzNTQ0OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiQWNvc1wiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjM1OTY6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJBdGFuXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2MzY0ODogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlNpbmhcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjYzNzAwOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiQ29zaFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjM3NTI6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJBc2luaFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjM4MDU6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJBY29zaFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjM4NTg6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJBdGFuaFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjM5MTE6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJUYW5oXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2Mzk2MzogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIk5vdFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjQwMTQ6IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJDbGlwXCIsIGEsIHsgbWluOiBiLCBtYXg6IGMgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NDA4MzogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkNsaXBcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY0MTM1OiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiRWx1XCIsIGEsIHsgYWxwaGE6IGIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NDE5MzogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlJlbHVcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY0MjQ1OiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiTGVha3lSZWx1XCIsIGEsIHsgYWxwaGE6IGIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NDMwOTogKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlRocmVzaG9sZGVkUmVsdVwiLCBhLCB7IGFscGhhOiBiIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjQzNzk6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJDYXN0XCIsIGEsIHsgdG86IGIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NDQzNzogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkFkZFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjQ0ODg6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJTdWJcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY0NTM5OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiTXVsXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NDU5MDogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkRpdlwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjQ2NDE6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJQb3dcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY0NjkyOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiRXF1YWxcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY0NzQ1OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiR3JlYXRlclwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjQ4MDA6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJHcmVhdGVyT3JFcXVhbFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjQ4NjI6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJMZXNzXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NDkxNDogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkxlc3NPckVxdWFsXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NDk3MzogKGEsIGIsIGMsIGQsIGUpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlJlZHVjZU1lYW5cIiwgYSwgeyBrZWVwRGltczogISFiLCBub29wV2l0aEVtcHR5QXhlczogISFjLCBheGVzOiBkID8gQXJyYXkuZnJvbShHLnN1YmFycmF5KGQgPj4+IDAsIGUgPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjUxMzI6IChhLCBiLCBjLCBkLCBlKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJSZWR1Y2VNYXhcIiwgYSwgeyBrZWVwRGltczogISFiLCBub29wV2l0aEVtcHR5QXhlczogISFjLCBheGVzOiBkID8gQXJyYXkuZnJvbShHLnN1YmFycmF5KGQgPj4+IDAsIGUgPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjUyOTA6IChhLCBiLCBjLCBkLCBlKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJSZWR1Y2VNaW5cIiwgYSwgeyBrZWVwRGltczogISFiLCBub29wV2l0aEVtcHR5QXhlczogISFjLCBheGVzOiBkID8gQXJyYXkuZnJvbShHLnN1YmFycmF5KGQgPj4+IDAsIGUgPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjU0NDg6IChhLCBiLCBjLCBkLCBlKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJSZWR1Y2VQcm9kXCIsIGEsIHsga2VlcERpbXM6ICEhYiwgbm9vcFdpdGhFbXB0eUF4ZXM6ICEhYywgYXhlczogZCA/IEFycmF5LmZyb20oRy5zdWJhcnJheShkID4+PiAwLCBlID4+PiAwKSkgOiBbXSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY1NjA3OiAoYSwgYiwgYywgZCwgZSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiUmVkdWNlU3VtXCIsIGEsIHsga2VlcERpbXM6ICEhYiwgbm9vcFdpdGhFbXB0eUF4ZXM6ICEhYywgYXhlczogZCA/IEFycmF5LmZyb20oRy5zdWJhcnJheShkID4+PiAwLCBlID4+PiAwKSkgOiBbXSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY1NzY1OiAoYSwgYiwgYywgZCwgZSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiUmVkdWNlTDFcIiwgYSwgeyBrZWVwRGltczogISFiLCBub29wV2l0aEVtcHR5QXhlczogISFjLCBheGVzOiBkID8gQXJyYXkuZnJvbShHLnN1YmFycmF5KGQgPj4+IDAsIGUgPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjU5MjI6IChhLCBiLCBjLCBkLCBlKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJSZWR1Y2VMMlwiLCBhLCB7IGtlZXBEaW1zOiAhIWIsIG5vb3BXaXRoRW1wdHlBeGVzOiAhIWMsIGF4ZXM6IGQgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoZCA+Pj4gMCwgZSA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NjA3OTogKGEsIGIsIGMsIGQsIGUpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlJlZHVjZUxvZ1N1bVwiLCBhLCB7IGtlZXBEaW1zOiAhIWIsIG5vb3BXaXRoRW1wdHlBeGVzOiAhIWMsIGF4ZXM6IGQgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoZCA+Pj4gMCwgZSA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NjI0MDogKGEsIGIsIGMsIGQsIGUpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlJlZHVjZVN1bVNxdWFyZVwiLCBhLCB7IGtlZXBEaW1zOiAhIWIsIG5vb3BXaXRoRW1wdHlBeGVzOiAhIWMsIGF4ZXM6IGQgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoZCA+Pj4gMCwgZSA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NjQwNDogKGEsIGIsIGMsIGQsIGUpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlJlZHVjZUxvZ1N1bUV4cFwiLCBhLCB7IGtlZXBEaW1zOiAhIWIsIG5vb3BXaXRoRW1wdHlBeGVzOiAhIWMsIGF4ZXM6IGQgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoZCA+Pj4gMCwgZSA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NjU2ODogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIldoZXJlXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NjYyMTogKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlRyYW5zcG9zZVwiLCBhLCB7IHBlcm06IGIgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoYiA+Pj4gMCwgYyA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NjcyOTogKGEsIGIsIGMsIGQpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkRlcHRoVG9TcGFjZVwiLCBhLCB7IGJsb2Nrc2l6ZTogYiwgbW9kZTogSihjKSwgZm9ybWF0OiBkID8gXCJOSFdDXCIgOiBcIk5DSFdcIiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY2ODYyOiAoYSwgYiwgYywgZCkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiRGVwdGhUb1NwYWNlXCIsIGEsIHsgYmxvY2tzaXplOiBiLCBtb2RlOiBKKGMpLCBmb3JtYXQ6IGQgPyBcIk5IV0NcIiA6IFwiTkNIV1wiIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjY5OTU6IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1KSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJDb252VHJhbnNwb3NlXCIsIGEsIHsgZm9ybWF0OiBsID8gXCJOSFdDXCIgOiBcIk5DSFdcIiwgYXV0b1BhZDogYiwgZGlsYXRpb25zOiBbY10sIGdyb3VwOiBkLCBrZXJuZWxTaGFwZTogW2VdLCBwYWRzOiBbZiwgaF0sIHN0cmlkZXM6IFtrXSwgd0lzQ29uc3Q6ICgpID0+ICEhelttID4+PiAwXSwgb3V0cHV0UGFkZGluZzogbiA/IEFycmF5LmZyb20oRy5zdWJhcnJheShuID4+PiAwLCBxID4+PiAwKSkgOiBbXSwgb3V0cHV0U2hhcGU6IHIgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkociA+Pj4gMCwgcCA+Pj4gMCkpIDogW10sIGFjdGl2YXRpb246IEoodSkgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2NzM5NjogKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHApID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkNvbnZUcmFuc3Bvc2VcIiwgYSwgeyBmb3JtYXQ6IGsgPyBcIk5IV0NcIiA6IFwiTkNIV1wiLCBhdXRvUGFkOiBiLCBkaWxhdGlvbnM6IEFycmF5LmZyb20oRy5zdWJhcnJheShjID4+PiAwLCAoYyA+Pj4gMCkgKyAyID4+PiAwKSksIGdyb3VwOiBkLCBrZXJuZWxTaGFwZTogQXJyYXkuZnJvbShHLnN1YmFycmF5KGUgPj4+IDAsIChlID4+PiAwKSArIDIgPj4+IDApKSwgcGFkczogQXJyYXkuZnJvbShHLnN1YmFycmF5KGYgPj4+IDAsIChmID4+PiAwKSArIDQgPj4+IDApKSwgc3RyaWRlczogQXJyYXkuZnJvbShHLnN1YmFycmF5KGggPj4+IDAsIChoID4+PiAwKSArIDIgPj4+IDApKSwgd0lzQ29uc3Q6ICgpID0+ICEheltsID4+PiAwXSwgb3V0cHV0UGFkZGluZzogbSA/IEFycmF5LmZyb20oRy5zdWJhcnJheShtID4+PiAwLCBuID4+PiAwKSkgOiBbXSwgb3V0cHV0U2hhcGU6IHEgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkocSA+Pj4gMCwgciA+Pj4gMCkpIDogW10sIGFjdGl2YXRpb246IEoocCkgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2Nzk2MTogKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkNvbnZUcmFuc3Bvc2VcIiwgYSwgeyBmb3JtYXQ6IGwgPyBcIk5IV0NcIiA6IFwiTkNIV1wiLCBhdXRvUGFkOiBiLCBkaWxhdGlvbnM6IFtjXSwgZ3JvdXA6IGQsIGtlcm5lbFNoYXBlOiBbZV0sIHBhZHM6IFtmLCBoXSwgc3RyaWRlczogW2tdLCB3SXNDb25zdDogKCkgPT4gISF6W20gPj4+IDBdLCBvdXRwdXRQYWRkaW5nOiBuID8gQXJyYXkuZnJvbShHLnN1YmFycmF5KG4gPj4+IDAsIHEgPj4+IDApKSA6IFtdLCBvdXRwdXRTaGFwZTogciA/IEFycmF5LmZyb20oRy5zdWJhcnJheShyID4+PiAwLCBwID4+PiAwKSkgOiBbXSwgYWN0aXZhdGlvbjogSih1KSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY4MzYyOiAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiQ29udlRyYW5zcG9zZVwiLCBhLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBrID8gXCJOSFdDXCIgOiBcIk5DSFdcIixcbiAgICAgICAgICAgICAgICBhdXRvUGFkOiBiLFxuICAgICAgICAgICAgICAgIGRpbGF0aW9uczogQXJyYXkuZnJvbShHLnN1YmFycmF5KGMgPj4+IDAsIChjID4+PiAwKSArIDIgPj4+IDApKSxcbiAgICAgICAgICAgICAgICBncm91cDogZCxcbiAgICAgICAgICAgICAgICBrZXJuZWxTaGFwZTogQXJyYXkuZnJvbShHLnN1YmFycmF5KGUgPj4+IDAsIChlID4+PiAwKSArIDIgPj4+IDApKSxcbiAgICAgICAgICAgICAgICBwYWRzOiBBcnJheS5mcm9tKEcuc3ViYXJyYXkoZiA+Pj4gMCwgKGYgPj4+IDApICsgNCA+Pj4gMCkpLFxuICAgICAgICAgICAgICAgIHN0cmlkZXM6IEFycmF5LmZyb20oRy5zdWJhcnJheShoID4+PiAwLCAoaCA+Pj4gMCkgKyAyID4+PiAwKSksXG4gICAgICAgICAgICAgICAgd0lzQ29uc3Q6ICgpID0+ICEheltsID4+PiAwXSxcbiAgICAgICAgICAgICAgICBvdXRwdXRQYWRkaW5nOiBtID8gQXJyYXkuZnJvbShHLnN1YmFycmF5KG0gPj4+IDAsIG4gPj4+IDApKSA6IFtdLFxuICAgICAgICAgICAgICAgIG91dHB1dFNoYXBlOiBxID8gQXJyYXkuZnJvbShHLnN1YmFycmF5KHEgPj4+IDAsIHIgPj4+IDApKSA6IFtdLFxuICAgICAgICAgICAgICAgIGFjdGl2YXRpb246IEoocClcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI2ODkyNzogKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkdsb2JhbEF2ZXJhZ2VQb29sXCIsIGEsIHsgZm9ybWF0OiBiID8gXCJOSFdDXCIgOiBcIk5DSFdcIiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY5MDE4OiAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiQXZlcmFnZVBvb2xcIiwgYSwge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogeSA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIsXG4gICAgICAgICAgICAgICAgYXV0b19wYWQ6IGIsXG4gICAgICAgICAgICAgICAgY2VpbF9tb2RlOiBjLFxuICAgICAgICAgICAgICAgIGNvdW50X2luY2x1ZGVfcGFkOiBkLFxuICAgICAgICAgICAgICAgIHN0b3JhZ2Vfb3JkZXI6IGUsXG4gICAgICAgICAgICAgICAgZGlsYXRpb25zOiBbZiwgaF0sXG4gICAgICAgICAgICAgICAga2VybmVsX3NoYXBlOiBbaywgbF0sXG4gICAgICAgICAgICAgICAgcGFkczogW20sIG4sIHEsIHJdLFxuICAgICAgICAgICAgICAgIHN0cmlkZXM6IFtwLCB1XVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY5MzAyOiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiR2xvYmFsQXZlcmFnZVBvb2xcIiwgYSwgeyBmb3JtYXQ6IGIgPyBcIk5IV0NcIiA6IFwiTkNIV1wiIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjkzOTM6IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5KSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJBdmVyYWdlUG9vbFwiLCBhLCB7IGZvcm1hdDogeSA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIsIGF1dG9fcGFkOiBiLCBjZWlsX21vZGU6IGMsIGNvdW50X2luY2x1ZGVfcGFkOiBkLCBzdG9yYWdlX29yZGVyOiBlLCBkaWxhdGlvbnM6IFtmLCBoXSwga2VybmVsX3NoYXBlOiBbaywgbF0sIHBhZHM6IFttLCBuLCBxLCByXSwgc3RyaWRlczogW3AsIHVdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNjk2Nzc6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJHbG9iYWxNYXhQb29sXCIsIGEsIHsgZm9ybWF0OiBiID8gXCJOSFdDXCIgOiBcIk5DSFdcIiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjY5NzY0OiAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiTWF4UG9vbFwiLCBhLCB7IGZvcm1hdDogeSA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIsIGF1dG9fcGFkOiBiLCBjZWlsX21vZGU6IGMsIGNvdW50X2luY2x1ZGVfcGFkOiBkLCBzdG9yYWdlX29yZGVyOiBlLCBkaWxhdGlvbnM6IFtmLCBoXSwga2VybmVsX3NoYXBlOiBbaywgbF0sIHBhZHM6IFttLCBuLCBxLCByXSwgc3RyaWRlczogW3AsIHVdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzAwNDQ6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJHbG9iYWxNYXhQb29sXCIsIGEsIHsgZm9ybWF0OiBiID8gXCJOSFdDXCIgOiBcIk5DSFdcIiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjcwMTMxOiAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiTWF4UG9vbFwiLCBhLCB7IGZvcm1hdDogeSA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIsIGF1dG9fcGFkOiBiLCBjZWlsX21vZGU6IGMsIGNvdW50X2luY2x1ZGVfcGFkOiBkLCBzdG9yYWdlX29yZGVyOiBlLCBkaWxhdGlvbnM6IFtmLCBoXSwga2VybmVsX3NoYXBlOiBbaywgbF0sIHBhZHM6IFttLCBuLCBxLCByXSwgc3RyaWRlczogW3AsIHVdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzA0MTE6IChhLCBiLCBjLCBkLCBlKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJHZW1tXCIsIGEsIHsgYWxwaGE6IGIsIGJldGE6IGMsIHRyYW5zQTogZCwgdHJhbnNCOiBlIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzA1MTU6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJNYXRNdWxcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjcwNTY5OiAoYSwgYiwgYywgZCkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiQXJnTWF4XCIsIGEsIHsga2VlcERpbXM6ICEhYiwgc2VsZWN0TGFzdEluZGV4OiAhIWMsIGF4aXM6IGQgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI3MDY3NzogKGEsIGIsIGMsIGQpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkFyZ01pblwiLCBhLCB7IGtlZXBEaW1zOiAhIWIsIHNlbGVjdExhc3RJbmRleDogISFjLCBheGlzOiBkIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzA3ODU6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJTb2Z0bWF4XCIsIGEsIHsgYXhpczogYiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjcwODQ4OiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiQ29uY2F0XCIsIGEsIHsgYXhpczogYiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjcwOTA4OiAoYSwgYiwgYywgZCwgZSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiU3BsaXRcIiwgYSwgeyBheGlzOiBiLCBudW1PdXRwdXRzOiBjLCBzcGxpdFNpemVzOiBkID8gQXJyYXkuZnJvbShHLnN1YmFycmF5KGQgPj4+IDAsIGUgPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzEwNDg6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJFeHBhbmRcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjcxMTAyOiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiR2F0aGVyXCIsIGEsIHsgYXhpczogTnVtYmVyKGIpIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzExNzM6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXG4gICAgICAgICAgICAgICAgXCJHYXRoZXJFbGVtZW50c1wiLFxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgeyBheGlzOiBOdW1iZXIoYikgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzEyNTI6IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJSZXNpemVcIiwgYSwgeyBhbnRpYWxpYXM6IGIsIGF4ZXM6IGMgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoYyA+Pj4gMCwgZCA+Pj4gMCkpIDogW10sIGNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlOiBKKGUpLCBjdWJpY0NvZWZmQTogZiwgZXhjbHVkZU91dHNpZGU6IGgsIGV4dHJhcG9sYXRpb25WYWx1ZTogaywga2VlcEFzcGVjdFJhdGlvUG9saWN5OiBKKGwpLCBtb2RlOiBKKG0pLCBuZWFyZXN0TW9kZTogSihuKSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjcxNTk4OiAoYSwgYiwgYywgZCwgZSwgZiwgaCkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiU2xpY2VcIiwgYSwgeyBzdGFydHM6IGIgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoYiA+Pj4gMCwgYyA+Pj4gMCkpIDogW10sIGVuZHM6IGQgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoZCA+Pj4gMCwgZSA+Pj4gMCkpIDogW10sIGF4ZXM6IGYgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoZiA+Pj4gMCwgaCA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI3MTgxNDogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIlRpbGVcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjcxODY2OiAoYSwgYiwgYywgZCkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiTGF5ZXJOb3JtYWxpemF0aW9uXCIsIGEsIHsgYXhpczogYiwgZXBzaWxvbjogYywgc2ltcGxpZmllZDogISFkIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzE5Nzc6IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJJbnN0YW5jZU5vcm1hbGl6YXRpb25cIiwgYSwgeyBlcHNpbG9uOiBiLCBmb3JtYXQ6IGMgPyBcIk5IV0NcIiA6IFwiTkNIV1wiIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzIwOTE6IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJJbnN0YW5jZU5vcm1hbGl6YXRpb25cIiwgYSwgeyBlcHNpbG9uOiBiLCBmb3JtYXQ6IGMgPyBcIk5IV0NcIiA6IFwiTkNIV1wiIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzIyMDU6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJSYW5nZVwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzIyNTg6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJFaW5zdW1cIiwgYSwgeyBlcXVhdGlvbjogSihiKSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjcyMzM5OiAoYSwgYiwgYywgZCwgZSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiUGFkXCIsIGEsIHsgbW9kZTogYiwgdmFsdWU6IGMsIHBhZHM6IGQgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoZCA+Pj4gMCwgZSA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI3MjQ2NjogKGEsIGIsIGMsIGQsIGUsIGYpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkJhdGNoTm9ybWFsaXphdGlvblwiLCBhLCB7XG4gICAgICAgICAgICAgICAgZXBzaWxvbjogYixcbiAgICAgICAgICAgICAgICBtb21lbnR1bTogYyxcbiAgICAgICAgICAgICAgICBzcGF0aWFsOiAhIWUsXG4gICAgICAgICAgICAgICAgdHJhaW5pbmdNb2RlOiAhIWQsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBmID8gXCJOSFdDXCIgOiBcIk5DSFdcIlxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjcyNjM1OiAoYSwgYiwgYywgZCwgZSwgZikgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiQmF0Y2hOb3JtYWxpemF0aW9uXCIsIGEsIHsgZXBzaWxvbjogYiwgbW9tZW50dW06IGMsIHNwYXRpYWw6ICEhZSwgdHJhaW5pbmdNb2RlOiAhIWQsIGZvcm1hdDogZiA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI3MjgwNDogKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkN1bVN1bVwiLCBhLCB7IGV4Y2x1c2l2ZTogTnVtYmVyKGIpLCByZXZlcnNlOiBOdW1iZXIoYykgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI3MjkwMTogKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkF0dGVudGlvblwiLCBhLCB7IG51bUhlYWRzOiBiLCBpc1VuaWRpcmVjdGlvbmFsOiBjLCBtYXNrRmlsdGVyVmFsdWU6IGQsIHNjYWxlOiBlLCBkb1JvdGFyeTogZiwgcWt2SGlkZGVuU2l6ZXM6IGggPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoTnVtYmVyKGspID4+PiAwLCBOdW1iZXIoaykgKyBoID4+PiAwKSkgOiBbXSwgcGFzdFByZXNlbnRTaGFyZUJ1ZmZlcjogISFsIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzMxNzM6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXG4gICAgICAgICAgICAgICAgXCJCaWFzQWRkXCIsXG4gICAgICAgICAgICAgICAgYSxcbiAgICAgICAgICAgICAgICB2b2lkIDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjczMjI4OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiQmlhc1NwbGl0R2VsdVwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzMyODk6IChhKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJGYXN0R2VsdVwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzMzNDU6IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJDb252XCIsIGEsIHsgZm9ybWF0OiBsID8gXCJOSFdDXCIgOiBcIk5DSFdcIiwgYXV0b19wYWQ6IGIsIGRpbGF0aW9uczogW2NdLCBncm91cDogZCwga2VybmVsX3NoYXBlOiBbZV0sIHBhZHM6IGYgPyBBcnJheS5mcm9tKEcuc3ViYXJyYXkoZiA+Pj4gMCwgaCA+Pj4gMCkpIDogW10sIHN0cmlkZXM6IFtrXSwgd19pc19jb25zdDogKCkgPT4gISF6W20gPj4+IDBdLCBhY3RpdmF0aW9uOiBKKG4pLCBhY3RpdmF0aW9uX3BhcmFtczogcSA/IEFycmF5LmZyb20odmEuc3ViYXJyYXkocSA+Pj4gMCwgciA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI3MzcxNTogKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHkpID0+IHtcbiAgICAgICAgICAgICAgZy5qZShcIkNvbnZcIiwgYSwgeyBmb3JtYXQ6IHEgPyBcIk5IV0NcIiA6IFwiTkNIV1wiLCBhdXRvX3BhZDogYiwgZGlsYXRpb25zOiBbYywgZF0sIGdyb3VwOiBlLCBrZXJuZWxfc2hhcGU6IFtcbiAgICAgICAgICAgICAgICBmLFxuICAgICAgICAgICAgICAgIGhcbiAgICAgICAgICAgICAgXSwgcGFkczogayA/IEFycmF5LmZyb20oRy5zdWJhcnJheShrID4+PiAwLCBsID4+PiAwKSkgOiBbXSwgc3RyaWRlczogW20sIG5dLCB3X2lzX2NvbnN0OiAoKSA9PiAhIXpbciA+Pj4gMF0sIGFjdGl2YXRpb246IEoocCksIGFjdGl2YXRpb25fcGFyYW1zOiB1ID8gQXJyYXkuZnJvbSh2YS5zdWJhcnJheSh1ID4+PiAwLCB5ID4+PiAwKSkgOiBbXSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjc0MTA2OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiR2VsdVwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzQxNTg6IChhLCBiLCBjLCBkLCBlLCBmKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJNYXRNdWxOQml0c1wiLCBhLCB7IGs6IGIsIG46IGMsIGFjY3VyYWN5TGV2ZWw6IGQsIGJpdHM6IGUsIGJsb2NrU2l6ZTogZiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjc0Mjg1OiAoYSwgYiwgYywgZCwgZSwgZikgPT4ge1xuICAgICAgICAgICAgICBnLmplKFwiTXVsdGlIZWFkQXR0ZW50aW9uXCIsIGEsIHsgbnVtSGVhZHM6IGIsIGlzVW5pZGlyZWN0aW9uYWw6IGMsIG1hc2tGaWx0ZXJWYWx1ZTogZCwgc2NhbGU6IGUsIGRvUm90YXJ5OiBmIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzQ0NDQ6IChhLCBiLCBjLCBkLCBlKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJSb3RhcnlFbWJlZGRpbmdcIiwgYSwge1xuICAgICAgICAgICAgICAgIGludGVybGVhdmVkOiAhIWIsXG4gICAgICAgICAgICAgICAgbnVtSGVhZHM6IGMsXG4gICAgICAgICAgICAgICAgcm90YXJ5RW1iZWRkaW5nRGltOiBkLFxuICAgICAgICAgICAgICAgIHNjYWxlOiBlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzQ1ODM6IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJTa2lwTGF5ZXJOb3JtYWxpemF0aW9uXCIsIGEsIHsgZXBzaWxvbjogYiwgc2ltcGxpZmllZDogISFjIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzQ2ODU6IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJTa2lwTGF5ZXJOb3JtYWxpemF0aW9uXCIsIGEsIHsgZXBzaWxvbjogYiwgc2ltcGxpZmllZDogISFjIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDEyNzQ3ODc6IChhLCBiLCBjLCBkKSA9PiB7XG4gICAgICAgICAgICAgIGcuamUoXCJMYXllck5vcm1hbGl6YXRpb25cIiwgYSwgeyBheGlzOiBiLCBlcHNpbG9uOiBjLCBzaW1wbGlmaWVkOiAhIWQgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMTI3NDg5ODogKGEpID0+IHtcbiAgICAgICAgICAgICAgZy5kaShhKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxMjc0OTMyOiAoYSwgYikgPT4gZy5maShhLCBiLCBnLk9oLmdpLCBnLk9oLmVycm9ycylcbiAgICAgICAgICB9O1xuICAgICAgICAgIGZ1bmN0aW9uIFBhKGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IFwiRXhpdFN0YXR1c1wiO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gYFByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJHthfSlgO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgUWEgPSBbXSwgUmEgPSAwLCBMID0gMDtcbiAgICAgICAgICBjbGFzcyBTYSB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihhKSB7XG4gICAgICAgICAgICAgIHRoaXMuTmggPSBhO1xuICAgICAgICAgICAgICB0aGlzLkloID0gYSAtIDI0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgWmEgPSAoYSkgPT4ge1xuICAgICAgICAgICAgdmFyIGIgPSBMO1xuICAgICAgICAgICAgaWYgKCFiKVxuICAgICAgICAgICAgICByZXR1cm4gVGEoMCksIDA7XG4gICAgICAgICAgICB2YXIgYyA9IG5ldyBTYShiKTtcbiAgICAgICAgICAgIElbYy5JaCArIDE2ID4+PiAyID4+PiAwXSA9IGI7XG4gICAgICAgICAgICB2YXIgZCA9IElbYy5JaCArIDQgPj4+IDIgPj4+IDBdO1xuICAgICAgICAgICAgaWYgKCFkKVxuICAgICAgICAgICAgICByZXR1cm4gVGEoMCksIGI7XG4gICAgICAgICAgICBmb3IgKHZhciBlIGluIGEpIHtcbiAgICAgICAgICAgICAgdmFyIGYgPSBhW2VdO1xuICAgICAgICAgICAgICBpZiAoMCA9PT0gZiB8fCBmID09PSBkKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBpZiAoVWEoZiwgZCwgYy5JaCArIDE2KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gVGEoZiksIGI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBUYShkKTtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICAgIH0sICRhID0gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgVGV4dERlY29kZXIgPyBuZXcgVGV4dERlY29kZXIoXCJ1dGY4XCIpIDogdm9pZCAwLCBhYiA9IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgIHZhciBkID0gYiArIGM7XG4gICAgICAgICAgICBmb3IgKGMgPSBiOyBhW2NdICYmICEoYyA+PSBkKTsgKVxuICAgICAgICAgICAgICArK2M7XG4gICAgICAgICAgICBpZiAoMTYgPCBjIC0gYiAmJiBhLmJ1ZmZlciAmJiAkYSlcbiAgICAgICAgICAgICAgcmV0dXJuICRhLmRlY29kZShhLnN1YmFycmF5KGIsIGMpKTtcbiAgICAgICAgICAgIGZvciAoZCA9IFwiXCI7IGIgPCBjOyApIHtcbiAgICAgICAgICAgICAgdmFyIGUgPSBhW2IrK107XG4gICAgICAgICAgICAgIGlmIChlICYgMTI4KSB7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBhW2IrK10gJiA2MztcbiAgICAgICAgICAgICAgICBpZiAoMTkyID09IChlICYgMjI0KSlcbiAgICAgICAgICAgICAgICAgIGQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoZSAmIDMxKSA8PCA2IHwgZik7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgaCA9IGFbYisrXSAmIDYzO1xuICAgICAgICAgICAgICAgICAgZSA9IDIyNCA9PSAoZSAmIDI0MCkgPyAoZSAmIDE1KSA8PCAxMiB8IGYgPDwgNiB8IGggOiAoZSAmIDcpIDw8IDE4IHwgZiA8PCAxMiB8IGggPDwgNiB8IGFbYisrXSAmIDYzO1xuICAgICAgICAgICAgICAgICAgNjU1MzYgPiBlID8gZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpIDogKGUgLT0gNjU1MzYsIGQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IGUgPj4gMTAsIDU2MzIwIHwgZSAmIDEwMjMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkO1xuICAgICAgICAgIH0sIEogPSAoYSwgYikgPT4gKGEgPj4+PSAwKSA/IGFiKEUsIGEsIGIpIDogXCJcIiwgYmIgPSAoYSkgPT4ge1xuICAgICAgICAgICAgZm9yICh2YXIgYiA9IDAsIGMgPSAwOyBjIDwgYS5sZW5ndGg7ICsrYykge1xuICAgICAgICAgICAgICB2YXIgZCA9IGEuY2hhckNvZGVBdChjKTtcbiAgICAgICAgICAgICAgMTI3ID49IGQgPyBiKysgOiAyMDQ3ID49IGQgPyBiICs9IDIgOiA1NTI5NiA8PSBkICYmIDU3MzQzID49IGQgPyAoYiArPSA0LCArK2MpIDogYiArPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgICAgfSwgTSA9IChhLCBiLCBjLCBkKSA9PiB7XG4gICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgIGlmICghKDAgPCBkKSlcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB2YXIgZSA9IGM7XG4gICAgICAgICAgICBkID0gYyArIGQgLSAxO1xuICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBhLmxlbmd0aDsgKytmKSB7XG4gICAgICAgICAgICAgIHZhciBoID0gYS5jaGFyQ29kZUF0KGYpO1xuICAgICAgICAgICAgICBpZiAoNTUyOTYgPD0gaCAmJiA1NzM0MyA+PSBoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGsgPSBhLmNoYXJDb2RlQXQoKytmKTtcbiAgICAgICAgICAgICAgICBoID0gNjU1MzYgKyAoKGggJiAxMDIzKSA8PCAxMCkgfCBrICYgMTAyMztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoMTI3ID49IGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA+PSBkKVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgYltjKysgPj4+IDBdID0gaDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoMjA0NyA+PSBoKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoYyArIDEgPj0gZClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBiW2MrKyA+Pj4gMF0gPSAxOTIgfCBoID4+IDY7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmICg2NTUzNSA+PSBoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjICsgMiA+PSBkKVxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBiW2MrKyA+Pj4gMF0gPSAyMjQgfCBoID4+IDEyO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgKyAzID49IGQpXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDI0MCB8IGggPj4gMTg7XG4gICAgICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDEyOCB8IGggPj4gMTIgJiA2MztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDEyOCB8IGggPj4gNiAmIDYzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiW2MrKyA+Pj4gMF0gPSAxMjggfCBoICYgNjM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJbYyA+Pj4gMF0gPSAwO1xuICAgICAgICAgICAgcmV0dXJuIGMgLSBlO1xuICAgICAgICAgIH0sIGNiLCBOID0gKGEpID0+IHtcbiAgICAgICAgICAgIGZvciAodmFyIGIgPSBcIlwiOyBFW2EgPj4+IDBdOyApXG4gICAgICAgICAgICAgIGIgKz0gY2JbRVthKysgPj4+IDBdXTtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICAgIH0sIGRiID0ge30sIGViID0ge30sIGZiID0ge30sIE87XG4gICAgICAgICAgZnVuY3Rpb24gZ2IoYSwgYiwgYyA9IHt9KSB7XG4gICAgICAgICAgICB2YXIgZCA9IGIubmFtZTtcbiAgICAgICAgICAgIGlmICghYSlcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IE8oYHR5cGUgXCIke2R9XCIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcmApO1xuICAgICAgICAgICAgaWYgKGViLmhhc093blByb3BlcnR5KGEpKSB7XG4gICAgICAgICAgICAgIGlmIChjLlhoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IE8oYENhbm5vdCByZWdpc3RlciB0eXBlICcke2R9JyB0d2ljZWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWJbYV0gPSBiO1xuICAgICAgICAgICAgZGVsZXRlIGZiW2FdO1xuICAgICAgICAgICAgZGIuaGFzT3duUHJvcGVydHkoYSkgJiYgKGIgPSBkYlthXSwgZGVsZXRlIGRiW2FdLCBiLmZvckVhY2goKGUpID0+IGUoKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBQKGEsIGIsIGMgPSB7fSkge1xuICAgICAgICAgICAgaWYgKCEoXCJhcmdQYWNrQWR2YW5jZVwiIGluIGIpKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVnaXN0ZXJUeXBlIHJlZ2lzdGVyZWRJbnN0YW5jZSByZXF1aXJlcyBhcmdQYWNrQWR2YW5jZVwiKTtcbiAgICAgICAgICAgIHJldHVybiBnYihhLCBiLCBjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGhiID0gKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoYikge1xuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMgPyAoZCkgPT4geltkID4+PiAwXSA6IChkKSA9PiBFW2QgPj4+IDBdO1xuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMgPyAoZCkgPT4gdGFbZCA+Pj4gMSA+Pj4gMF0gOiAoZCkgPT4gdWFbZCA+Pj4gMSA+Pj4gMF07XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYyA/IChkKSA9PiBHW2QgPj4+IDIgPj4+IDBdIDogKGQpID0+IElbZCA+Pj4gMiA+Pj4gMF07XG4gICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICByZXR1cm4gYyA/IChkKSA9PiB3YVtkID4+PiAzXSA6IChkKSA9PiB4YVtkID4+PiAzXTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIGludGVnZXIgd2lkdGggKCR7Yn0pOiAke2F9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgaWIgPSBbXSwgUSA9IFtdO1xuICAgICAgICAgIGZ1bmN0aW9uIGpiKGEpIHtcbiAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgOSA8IGEgJiYgMCA9PT0gLS1RW2EgKyAxXSAmJiAoUVthXSA9IHZvaWQgMCwgaWIucHVzaChhKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBSID0gKGEpID0+IHtcbiAgICAgICAgICAgIGlmICghYSlcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IE8oXCJDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSBcIiArIGEpO1xuICAgICAgICAgICAgcmV0dXJuIFFbYV07XG4gICAgICAgICAgfSwgUyA9IChhKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGEpIHtcbiAgICAgICAgICAgICAgY2FzZSB2b2lkIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgICAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgICAgICAgY2FzZSB0cnVlOlxuICAgICAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgICBjYXNlIGZhbHNlOlxuICAgICAgICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBpYi5wb3AoKSB8fCBRLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBRW2JdID0gYTtcbiAgICAgICAgICAgICAgICBRW2IgKyAxXSA9IDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBmdW5jdGlvbiBrYihhKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoSVthID4+PiAyID4+PiAwXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBsYiA9IHsgbmFtZTogXCJlbXNjcmlwdGVuOjp2YWxcIiwgZnJvbVdpcmVUeXBlOiAoYSkgPT4ge1xuICAgICAgICAgICAgdmFyIGIgPSBSKGEpO1xuICAgICAgICAgICAgamIoYSk7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgICB9LCB0b1dpcmVUeXBlOiAoYSwgYikgPT4gUyhiKSwgYXJnUGFja0FkdmFuY2U6IDgsIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBrYiwgTWg6IG51bGwgfSwgbWIgPSAoYSwgYikgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChiKSB7XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHZhW2MgPj4+IDIgPj4+IDBdKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZSh5YVtjID4+PiAzID4+PiAwXSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIGZsb2F0IHdpZHRoICgke2J9KTogJHthfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIG5iID0gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgVGV4dERlY29kZXIgPyBuZXcgVGV4dERlY29kZXIoXCJ1dGYtMTZsZVwiKSA6IHZvaWQgMCwgb2IgPSAoYSwgYikgPT4ge1xuICAgICAgICAgICAgdmFyIGMgPSBhID4+IDE7XG4gICAgICAgICAgICBmb3IgKHZhciBkID0gYyArIGIgLyAyOyAhKGMgPj0gZCkgJiYgdWFbYyA+Pj4gMF07IClcbiAgICAgICAgICAgICAgKytjO1xuICAgICAgICAgICAgYyA8PD0gMTtcbiAgICAgICAgICAgIGlmICgzMiA8IGMgLSBhICYmIG5iKVxuICAgICAgICAgICAgICByZXR1cm4gbmIuZGVjb2RlKEUuc3ViYXJyYXkoYSA+Pj4gMCwgYyA+Pj4gMCkpO1xuICAgICAgICAgICAgYyA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKGQgPSAwOyAhKGQgPj0gYiAvIDIpOyArK2QpIHtcbiAgICAgICAgICAgICAgdmFyIGUgPSB0YVthICsgMiAqIGQgPj4+IDEgPj4+IDBdO1xuICAgICAgICAgICAgICBpZiAoMCA9PSBlKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICB9LCBwYiA9IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICBjID8/PSAyMTQ3NDgzNjQ3O1xuICAgICAgICAgICAgaWYgKDIgPiBjKVxuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIGMgLT0gMjtcbiAgICAgICAgICAgIHZhciBkID0gYjtcbiAgICAgICAgICAgIGMgPSBjIDwgMiAqIGEubGVuZ3RoID8gYyAvIDIgOiBhLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgYzsgKytlKVxuICAgICAgICAgICAgICB0YVtiID4+PiAxID4+PiAwXSA9IGEuY2hhckNvZGVBdChlKSwgYiArPSAyO1xuICAgICAgICAgICAgdGFbYiA+Pj4gMSA+Pj4gMF0gPSAwO1xuICAgICAgICAgICAgcmV0dXJuIGIgLSBkO1xuICAgICAgICAgIH0sIHFiID0gKGEpID0+IDIgKiBhLmxlbmd0aCwgcmIgPSAoYSwgYikgPT4ge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDAsIGQgPSBcIlwiOyAhKGMgPj0gYiAvIDQpOyApIHtcbiAgICAgICAgICAgICAgdmFyIGUgPSBHW2EgKyA0ICogYyA+Pj4gMiA+Pj4gMF07XG4gICAgICAgICAgICAgIGlmICgwID09IGUpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICsrYztcbiAgICAgICAgICAgICAgNjU1MzYgPD0gZSA/IChlIC09IDY1NTM2LCBkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYgfCBlID4+IDEwLCA1NjMyMCB8IGUgJiAxMDIzKSkgOiBkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgICB9LCBzYiA9IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgIGMgPz89IDIxNDc0ODM2NDc7XG4gICAgICAgICAgICBpZiAoNCA+IGMpXG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgdmFyIGQgPSBiO1xuICAgICAgICAgICAgYyA9IGQgKyBjIC0gNDtcbiAgICAgICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgYS5sZW5ndGg7ICsrZSkge1xuICAgICAgICAgICAgICB2YXIgZiA9IGEuY2hhckNvZGVBdChlKTtcbiAgICAgICAgICAgICAgaWYgKDU1Mjk2IDw9IGYgJiYgNTczNDMgPj0gZikge1xuICAgICAgICAgICAgICAgIHZhciBoID0gYS5jaGFyQ29kZUF0KCsrZSk7XG4gICAgICAgICAgICAgICAgZiA9IDY1NTM2ICsgKChmICYgMTAyMykgPDwgMTApIHwgaCAmIDEwMjM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgR1tiID4+PiAyID4+PiAwXSA9IGY7XG4gICAgICAgICAgICAgIGIgKz0gNDtcbiAgICAgICAgICAgICAgaWYgKGIgKyA0ID4gYylcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEdbYiA+Pj4gMiA+Pj4gMF0gPSAwO1xuICAgICAgICAgICAgcmV0dXJuIGIgLSBkO1xuICAgICAgICAgIH0sIHRiID0gKGEpID0+IHtcbiAgICAgICAgICAgIGZvciAodmFyIGIgPSAwLCBjID0gMDsgYyA8IGEubGVuZ3RoOyArK2MpIHtcbiAgICAgICAgICAgICAgdmFyIGQgPSBhLmNoYXJDb2RlQXQoYyk7XG4gICAgICAgICAgICAgIDU1Mjk2IDw9IGQgJiYgNTczNDMgPj0gZCAmJiArK2M7XG4gICAgICAgICAgICAgIGIgKz0gNDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICAgIH0sIHZiID0gKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHZhciBjID0gZWJbYV07XG4gICAgICAgICAgICBpZiAodm9pZCAwID09PSBjKVxuICAgICAgICAgICAgICB0aHJvdyBhID0gdWIoYSksIGMgPSBOKGEpLCBUKGEpLCBuZXcgTyhgJHtifSBoYXMgdW5rbm93biB0eXBlICR7Y31gKTtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgIH0sIHdiID0gKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgIHZhciBkID0gW107XG4gICAgICAgICAgICBhID0gYS50b1dpcmVUeXBlKGQsIGMpO1xuICAgICAgICAgICAgZC5sZW5ndGggJiYgKElbYiA+Pj4gMiA+Pj4gMF0gPSBTKGQpKTtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgIH0sIHhiID0gKGEpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGEoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGIpIHtcbiAgICAgICAgICAgICAgR2EoYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgeWIgPSAoYSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF4KVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGEoKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgc2EgPSBzYSA9IGEgPSBzYSwgZy5vbkV4aXQ/LihhKSwgeCA9IHRydWUsIGhhKGEsIG5ldyBQYShhKSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoYikge1xuICAgICAgICAgICAgICAgICAgYiBpbnN0YW5jZW9mIFBhIHx8IFwidW53aW5kXCIgPT0gYiB8fCBoYSgxLCBiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGIpIHtcbiAgICAgICAgICAgICAgICBiIGluc3RhbmNlb2YgUGEgfHwgXCJ1bndpbmRcIiA9PSBiIHx8IGhhKDEsIGIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBmdW5jdGlvbiB6YigpIHtcbiAgICAgICAgICAgIHZhciBhID0gVSwgYiA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgW2MsIGRdIG9mIE9iamVjdC5lbnRyaWVzKGEpKVxuICAgICAgICAgICAgICBiW2NdID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBkID8gKC4uLmUpID0+IHtcbiAgICAgICAgICAgICAgICBBYi5wdXNoKGMpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZCguLi5lKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgeCB8fCAoQWIucG9wKCksIHQgJiYgMSA9PT0gViAmJiAwID09PSBBYi5sZW5ndGggJiYgKFYgPSAwLCB4YihCYiksIFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIEZpYmVycyAmJiBGaWJlcnMubWkoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSA6IGQ7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIFYgPSAwLCB0ID0gbnVsbCwgQ2IgPSAwLCBBYiA9IFtdLCBEYiA9IHt9LCBFYiA9IHt9LCBGYiA9IDAsIEdiID0gbnVsbCwgSGIgPSBbXTtcbiAgICAgICAgICBmdW5jdGlvbiBjYSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBHYiA9IHsgcmVzb2x2ZTogYSwgcmVqZWN0OiBiIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gSWIoKSB7XG4gICAgICAgICAgICB2YXIgYSA9IEpiKDY1NTQ4KSwgYiA9IGEgKyAxMjtcbiAgICAgICAgICAgIElbYSA+Pj4gMiA+Pj4gMF0gPSBiO1xuICAgICAgICAgICAgSVthICsgNCA+Pj4gMiA+Pj4gMF0gPSBiICsgNjU1MzY7XG4gICAgICAgICAgICBiID0gQWJbMF07XG4gICAgICAgICAgICB2YXIgYyA9IERiW2JdO1xuICAgICAgICAgICAgdm9pZCAwID09PSBjICYmIChjID0gRmIrKywgRGJbYl0gPSBjLCBFYltjXSA9IGIpO1xuICAgICAgICAgICAgR1thICsgOCA+Pj4gMiA+Pj4gMF0gPSBjO1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEtiKGEpIHtcbiAgICAgICAgICAgIGlmICgheCkge1xuICAgICAgICAgICAgICBpZiAoMCA9PT0gVikge1xuICAgICAgICAgICAgICAgIHZhciBiID0gZmFsc2UsIGMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBhKChkID0gMCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCF4ICYmIChDYiA9IGQsIGIgPSB0cnVlLCBjKSkge1xuICAgICAgICAgICAgICAgICAgICBWID0gMjtcbiAgICAgICAgICAgICAgICAgICAgeGIoKCkgPT4gTGIodCkpO1xuICAgICAgICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBCcm93c2VyICYmIEJyb3dzZXIuU2guV2ggJiYgQnJvd3Nlci5TaC5yZXN1bWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gKDAsIFVbRWJbR1t0ICsgOCA+Pj4gMiA+Pj4gMF1dXSkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoaykge1xuICAgICAgICAgICAgICAgICAgICAgIGUgPSBrLCBkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IEdiO1xuICAgICAgICAgICAgICAgICAgICAgIGggJiYgKEdiID0gbnVsbCwgKGQgPyBoLnJlamVjdCA6IGgucmVzb2x2ZSkoZSksIGYgPSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZCAmJiAhZilcbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGIgfHwgKFYgPSAxLCB0ID0gSWIoKSwgXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgQnJvd3NlciAmJiBCcm93c2VyLlNoLldoICYmIEJyb3dzZXIuU2gucGF1c2UoKSwgeGIoKCkgPT4gTWIodCkpKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgMiA9PT0gViA/IChWID0gMCwgeGIoTmIpLCBUKHQpLCB0ID0gbnVsbCwgSGIuZm9yRWFjaCh5YikpIDogR2EoYGludmFsaWQgc3RhdGU6ICR7Vn1gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIENiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBPYihhKSB7XG4gICAgICAgICAgICByZXR1cm4gS2IoKGIpID0+IHtcbiAgICAgICAgICAgICAgYSgpLnRoZW4oYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIFBiID0gW10sIFFiID0ge30sIFJiID0gKGEpID0+IHtcbiAgICAgICAgICAgIHZhciBiID0gUWJbYV07XG4gICAgICAgICAgICByZXR1cm4gdm9pZCAwID09PSBiID8gTihhKSA6IGI7XG4gICAgICAgICAgfSwgU2IgPSAoKSA9PiBcIm9iamVjdFwiID09IHR5cGVvZiBnbG9iYWxUaGlzID8gZ2xvYmFsVGhpcyA6IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSwgVGIgPSAoYSkgPT4ge1xuICAgICAgICAgICAgdmFyIGIgPSBQYi5sZW5ndGg7XG4gICAgICAgICAgICBQYi5wdXNoKGEpO1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgICAgfSwgVWIgPSAoYSwgYikgPT4ge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IEFycmF5KGEpLCBkID0gMDsgZCA8IGE7ICsrZClcbiAgICAgICAgICAgICAgY1tkXSA9IHZiKElbYiArIDQgKiBkID4+PiAyID4+PiAwXSwgXCJwYXJhbWV0ZXIgXCIgKyBkKTtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgIH0sIFZiID0gKGEsIGIpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCBcIm5hbWVcIiwgeyB2YWx1ZTogYSB9KTtcbiAgICAgICAgICBmdW5jdGlvbiBXYihhKSB7XG4gICAgICAgICAgICB2YXIgYiA9IEZ1bmN0aW9uO1xuICAgICAgICAgICAgaWYgKCEoYiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSlcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgbmV3XyBjYWxsZWQgd2l0aCBjb25zdHJ1Y3RvciB0eXBlICR7dHlwZW9mIGJ9IHdoaWNoIGlzIG5vdCBhIGZ1bmN0aW9uYCk7XG4gICAgICAgICAgICB2YXIgYyA9IFZiKGIubmFtZSB8fCBcInVua25vd25GdW5jdGlvbk5hbWVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGMucHJvdG90eXBlID0gYi5wcm90b3R5cGU7XG4gICAgICAgICAgICBjID0gbmV3IGMoKTtcbiAgICAgICAgICAgIGEgPSBiLmFwcGx5KGMsIGEpO1xuICAgICAgICAgICAgcmV0dXJuIGEgaW5zdGFuY2VvZiBPYmplY3QgPyBhIDogYztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIFcgPSAoYSkgPT4gMCA9PT0gYSAlIDQgJiYgKDAgIT09IGEgJSAxMDAgfHwgMCA9PT0gYSAlIDQwMCksIFhiID0gWzAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAyNzQsIDMwNSwgMzM1XSwgWWIgPSBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdLCBaYiA9IFtdLCAkYiA9IChhLCBiKSA9PiB7XG4gICAgICAgICAgICBaYi5sZW5ndGggPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgYzsgYyA9IEVbYSsrID4+PiAwXTsgKSB7XG4gICAgICAgICAgICAgIHZhciBkID0gMTA1ICE9IGM7XG4gICAgICAgICAgICAgIGQgJj0gMTEyICE9IGM7XG4gICAgICAgICAgICAgIGIgKz0gZCAmJiBiICUgOCA/IDQgOiAwO1xuICAgICAgICAgICAgICBaYi5wdXNoKDExMiA9PSBjID8gSVtiID4+PiAyID4+PiAwXSA6IDEwNiA9PSBjID8gd2FbYiA+Pj4gM10gOiAxMDUgPT0gYyA/IEdbYiA+Pj4gMiA+Pj4gMF0gOiB5YVtiID4+PiAzID4+PiAwXSk7XG4gICAgICAgICAgICAgIGIgKz0gZCA/IDggOiA0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFpiO1xuICAgICAgICAgIH0sIGFjID0ge30sIGNjID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICB2YXIgYSA9IHsgVVNFUjogXCJ3ZWJfdXNlclwiLCBMT0dOQU1FOiBcIndlYl91c2VyXCIsIFBBVEg6IFwiL1wiLCBQV0Q6IFwiL1wiLCBIT01FOiBcIi9ob21lL3dlYl91c2VyXCIsIExBTkc6IChcIm9iamVjdFwiID09IHR5cGVvZiBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIHx8IFwiQ1wiKS5yZXBsYWNlKFwiLVwiLCBcIl9cIikgKyBcIi5VVEYtOFwiLCBfOiBmYSB8fCBcIi4vdGhpcy5wcm9ncmFtXCIgfSwgYjtcbiAgICAgICAgICAgICAgZm9yIChiIGluIGFjKVxuICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gYWNbYl0gPyBkZWxldGUgYVtiXSA6IGFbYl0gPSBhY1tiXTtcbiAgICAgICAgICAgICAgdmFyIGMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChiIGluIGEpXG4gICAgICAgICAgICAgICAgYy5wdXNoKGAke2J9PSR7YVtiXX1gKTtcbiAgICAgICAgICAgICAgYmMgPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgIH0sIGJjLCBkYyA9IFtudWxsLCBbXSwgW11dLCBlYyA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSwgZmMgPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG4gICAgICAgICAgZnVuY3Rpb24gZ2MoYSkge1xuICAgICAgICAgICAgdmFyIGIgPSBBcnJheShiYihhKSArIDEpO1xuICAgICAgICAgICAgTShhLCBiLCAwLCBiLmxlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gaGMoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZShwLCB1LCB5KSB7XG4gICAgICAgICAgICAgIGZvciAocCA9IFwibnVtYmVyXCIgPT0gdHlwZW9mIHAgPyBwLnRvU3RyaW5nKCkgOiBwIHx8IFwiXCI7IHAubGVuZ3RoIDwgdTsgKVxuICAgICAgICAgICAgICAgIHAgPSB5WzBdICsgcDtcbiAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBmKHAsIHUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGUocCwgdSwgXCIwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gaChwLCB1KSB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uIHkoQikge1xuICAgICAgICAgICAgICAgIHJldHVybiAwID4gQiA/IC0xIDogMCA8IEIgPyAxIDogMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgQTtcbiAgICAgICAgICAgICAgMCA9PT0gKEEgPSB5KHAuZ2V0RnVsbFllYXIoKSAtIHUuZ2V0RnVsbFllYXIoKSkpICYmIDAgPT09IChBID0geShwLmdldE1vbnRoKCkgLSB1LmdldE1vbnRoKCkpKSAmJiAoQSA9IHkocC5nZXREYXRlKCkgLSB1LmdldERhdGUoKSkpO1xuICAgICAgICAgICAgICByZXR1cm4gQTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGsocCkge1xuICAgICAgICAgICAgICBzd2l0Y2ggKHAuZ2V0RGF5KCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocC5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIDI5KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocC5nZXRGdWxsWWVhcigpLCAwLCAzKTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHAuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocC5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocC5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIDMxKTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocC5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIDMwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbChwKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gcC5LaDtcbiAgICAgICAgICAgICAgZm9yIChwID0gbmV3IERhdGUobmV3IERhdGUocC5MaCArIDE5MDAsIDAsIDEpLmdldFRpbWUoKSk7IDAgPCB1OyApIHtcbiAgICAgICAgICAgICAgICB2YXIgeSA9IHAuZ2V0TW9udGgoKSwgQSA9IChXKHAuZ2V0RnVsbFllYXIoKSkgPyBlYyA6IGZjKVt5XTtcbiAgICAgICAgICAgICAgICBpZiAodSA+IEEgLSBwLmdldERhdGUoKSlcbiAgICAgICAgICAgICAgICAgIHUgLT0gQSAtIHAuZ2V0RGF0ZSgpICsgMSwgcC5zZXREYXRlKDEpLCAxMSA+IHkgPyBwLnNldE1vbnRoKHkgKyAxKSA6IChwLnNldE1vbnRoKDApLCBwLnNldEZ1bGxZZWFyKHAuZ2V0RnVsbFllYXIoKSArIDEpKTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHAuc2V0RGF0ZShwLmdldERhdGUoKSArIHUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHkgPSBuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCkgKyAxLCAwLCA0KTtcbiAgICAgICAgICAgICAgdSA9IGsobmV3IERhdGUoXG4gICAgICAgICAgICAgICAgcC5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgeSA9IGsoeSk7XG4gICAgICAgICAgICAgIHJldHVybiAwID49IGgodSwgcCkgPyAwID49IGgoeSwgcCkgPyBwLmdldEZ1bGxZZWFyKCkgKyAxIDogcC5nZXRGdWxsWWVhcigpIDogcC5nZXRGdWxsWWVhcigpIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgIGQgPj4+PSAwO1xuICAgICAgICAgICAgdmFyIG0gPSBJW2QgKyA0MCA+Pj4gMiA+Pj4gMF07XG4gICAgICAgICAgICBkID0geyBqaTogR1tkID4+PiAyID4+PiAwXSwgaWk6IEdbZCArIDQgPj4+IDIgPj4+IDBdLCBRaDogR1tkICsgOCA+Pj4gMiA+Pj4gMF0sIFRoOiBHW2QgKyAxMiA+Pj4gMiA+Pj4gMF0sIFJoOiBHW2QgKyAxNiA+Pj4gMiA+Pj4gMF0sIExoOiBHW2QgKyAyMCA+Pj4gMiA+Pj4gMF0sIEpoOiBHW2QgKyAyNCA+Pj4gMiA+Pj4gMF0sIEtoOiBHW2QgKyAyOCA+Pj4gMiA+Pj4gMF0sIGxpOiBHW2QgKyAzMiA+Pj4gMiA+Pj4gMF0sIGhpOiBHW2QgKyAzNiA+Pj4gMiA+Pj4gMF0sIGtpOiBtID8gSihtKSA6IFwiXCIgfTtcbiAgICAgICAgICAgIGMgPSBKKGMpO1xuICAgICAgICAgICAgbSA9IHtcbiAgICAgICAgICAgICAgXCIlY1wiOiBcIiVhICViICVkICVIOiVNOiVTICVZXCIsXG4gICAgICAgICAgICAgIFwiJURcIjogXCIlbS8lZC8leVwiLFxuICAgICAgICAgICAgICBcIiVGXCI6IFwiJVktJW0tJWRcIixcbiAgICAgICAgICAgICAgXCIlaFwiOiBcIiViXCIsXG4gICAgICAgICAgICAgIFwiJXJcIjogXCIlSTolTTolUyAlcFwiLFxuICAgICAgICAgICAgICBcIiVSXCI6IFwiJUg6JU1cIixcbiAgICAgICAgICAgICAgXCIlVFwiOiBcIiVIOiVNOiVTXCIsXG4gICAgICAgICAgICAgIFwiJXhcIjogXCIlbS8lZC8leVwiLFxuICAgICAgICAgICAgICBcIiVYXCI6IFwiJUg6JU06JVNcIixcbiAgICAgICAgICAgICAgXCIlRWNcIjogXCIlY1wiLFxuICAgICAgICAgICAgICBcIiVFQ1wiOiBcIiVDXCIsXG4gICAgICAgICAgICAgIFwiJUV4XCI6IFwiJW0vJWQvJXlcIixcbiAgICAgICAgICAgICAgXCIlRVhcIjogXCIlSDolTTolU1wiLFxuICAgICAgICAgICAgICBcIiVFeVwiOiBcIiV5XCIsXG4gICAgICAgICAgICAgIFwiJUVZXCI6IFwiJVlcIixcbiAgICAgICAgICAgICAgXCIlT2RcIjogXCIlZFwiLFxuICAgICAgICAgICAgICBcIiVPZVwiOiBcIiVlXCIsXG4gICAgICAgICAgICAgIFwiJU9IXCI6IFwiJUhcIixcbiAgICAgICAgICAgICAgXCIlT0lcIjogXCIlSVwiLFxuICAgICAgICAgICAgICBcIiVPbVwiOiBcIiVtXCIsXG4gICAgICAgICAgICAgIFwiJU9NXCI6IFwiJU1cIixcbiAgICAgICAgICAgICAgXCIlT1NcIjogXCIlU1wiLFxuICAgICAgICAgICAgICBcIiVPdVwiOiBcIiV1XCIsXG4gICAgICAgICAgICAgIFwiJU9VXCI6IFwiJVVcIixcbiAgICAgICAgICAgICAgXCIlT1ZcIjogXCIlVlwiLFxuICAgICAgICAgICAgICBcIiVPd1wiOiBcIiV3XCIsXG4gICAgICAgICAgICAgIFwiJU9XXCI6IFwiJVdcIixcbiAgICAgICAgICAgICAgXCIlT3lcIjogXCIleVwiXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIgbiBpbiBtKVxuICAgICAgICAgICAgICBjID0gYy5yZXBsYWNlKG5ldyBSZWdFeHAobiwgXCJnXCIpLCBtW25dKTtcbiAgICAgICAgICAgIHZhciBxID0gXCJTdW5kYXkgTW9uZGF5IFR1ZXNkYXkgV2VkbmVzZGF5IFRodXJzZGF5IEZyaWRheSBTYXR1cmRheVwiLnNwbGl0KFwiIFwiKSwgciA9IFwiSmFudWFyeSBGZWJydWFyeSBNYXJjaCBBcHJpbCBNYXkgSnVuZSBKdWx5IEF1Z3VzdCBTZXB0ZW1iZXIgT2N0b2JlciBOb3ZlbWJlciBEZWNlbWJlclwiLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgIG0gPSB7IFwiJWFcIjogKHApID0+IHFbcC5KaF0uc3Vic3RyaW5nKDAsIDMpLCBcIiVBXCI6IChwKSA9PiBxW3AuSmhdLCBcIiViXCI6IChwKSA9PiByW3AuUmhdLnN1YnN0cmluZygwLCAzKSwgXCIlQlwiOiAocCkgPT4gcltwLlJoXSwgXCIlQ1wiOiAocCkgPT4gZigocC5MaCArIDE5MDApIC8gMTAwIHwgMCwgMiksIFwiJWRcIjogKHApID0+IGYocC5UaCwgMiksIFwiJWVcIjogKHApID0+IGUocC5UaCwgMiwgXCIgXCIpLCBcIiVnXCI6IChwKSA9PiBsKHApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLCBcIiVHXCI6IGwsIFwiJUhcIjogKHApID0+IGYocC5RaCwgMiksIFwiJUlcIjogKHApID0+IHtcbiAgICAgICAgICAgICAgcCA9IHAuUWg7XG4gICAgICAgICAgICAgIDAgPT0gcCA/IHAgPSAxMiA6IDEyIDwgcCAmJiAocCAtPSAxMik7XG4gICAgICAgICAgICAgIHJldHVybiBmKHAsIDIpO1xuICAgICAgICAgICAgfSwgXCIlalwiOiAocCkgPT4ge1xuICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMCwgeSA9IDA7IHkgPD0gcC5SaCAtIDE7IHUgKz0gKFcocC5MaCArIDE5MDApID8gZWMgOiBmYylbeSsrXSlcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgIHJldHVybiBmKHAuVGggKyB1LCAzKTtcbiAgICAgICAgICAgIH0sIFwiJW1cIjogKHApID0+IGYocC5SaCArIDEsIDIpLCBcIiVNXCI6IChwKSA9PiBmKHAuaWksIDIpLCBcIiVuXCI6ICgpID0+IFwiXFxuXCIsIFwiJXBcIjogKHApID0+IDAgPD0gcC5RaCAmJiAxMiA+IHAuUWggPyBcIkFNXCIgOiBcIlBNXCIsIFwiJVNcIjogKHApID0+IGYocC5qaSwgMiksIFwiJXRcIjogKCkgPT4gXCJcdFwiLCBcIiV1XCI6IChwKSA9PiBwLkpoIHx8IDcsIFwiJVVcIjogKHApID0+IGYoTWF0aC5mbG9vcigocC5LaCArIDcgLSBwLkpoKSAvIDcpLCAyKSwgXCIlVlwiOiAocCkgPT4ge1xuICAgICAgICAgICAgICB2YXIgdSA9IE1hdGguZmxvb3IoKHAuS2ggKyA3IC0gKHAuSmggKyA2KSAlIDcpIC8gNyk7XG4gICAgICAgICAgICAgIDIgPj0gKHAuSmggKyAzNzEgLSBwLktoIC0gMikgJSA3ICYmIHUrKztcbiAgICAgICAgICAgICAgaWYgKHUpXG4gICAgICAgICAgICAgICAgNTMgPT0gdSAmJiAoeSA9IChwLkpoICsgMzcxIC0gcC5LaCkgJSA3LCA0ID09IHkgfHwgMyA9PSB5ICYmIFcocC5MaCkgfHwgKHUgPSAxKSk7XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHUgPSA1MjtcbiAgICAgICAgICAgICAgICB2YXIgeSA9IChwLkpoICsgNyAtIHAuS2ggLSAxKSAlIDc7XG4gICAgICAgICAgICAgICAgKDQgPT0geSB8fCA1ID09IHkgJiYgVyhwLkxoICUgNDAwIC0gMSkpICYmIHUrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZih1LCAyKTtcbiAgICAgICAgICAgIH0sIFwiJXdcIjogKHApID0+IHAuSmgsIFwiJVdcIjogKHApID0+IGYoTWF0aC5mbG9vcigocC5LaCArIDcgLSAocC5KaCArIDYpICUgNykgLyA3KSwgMiksIFwiJXlcIjogKHApID0+IChwLkxoICsgMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIFwiJVlcIjogKHApID0+IHAuTGggKyAxOTAwLCBcIiV6XCI6IChwKSA9PiB7XG4gICAgICAgICAgICAgIHAgPSBwLmhpO1xuICAgICAgICAgICAgICB2YXIgdSA9IDAgPD0gcDtcbiAgICAgICAgICAgICAgcCA9IE1hdGguYWJzKHApIC8gNjA7XG4gICAgICAgICAgICAgIHJldHVybiAodSA/IFwiK1wiIDogXCItXCIpICsgU3RyaW5nKFwiMDAwMFwiICsgKHAgLyA2MCAqIDEwMCArIHAgJSA2MCkpLnNsaWNlKC00KTtcbiAgICAgICAgICAgIH0sIFwiJVpcIjogKHApID0+IHAua2ksIFwiJSVcIjogKCkgPT4gXCIlXCIgfTtcbiAgICAgICAgICAgIGMgPSBjLnJlcGxhY2UoLyUlL2csIFwiXFwwXFwwXCIpO1xuICAgICAgICAgICAgZm9yIChuIGluIG0pXG4gICAgICAgICAgICAgIGMuaW5jbHVkZXMobikgJiYgKGMgPSBjLnJlcGxhY2UobmV3IFJlZ0V4cChuLCBcImdcIiksIG1bbl0oZCkpKTtcbiAgICAgICAgICAgIGMgPSBjLnJlcGxhY2UoL1xcMFxcMC9nLCBcIiVcIik7XG4gICAgICAgICAgICBuID0gZ2MoYyk7XG4gICAgICAgICAgICBpZiAobi5sZW5ndGggPiBiKVxuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIHouc2V0KG4sIGEgPj4+IDApO1xuICAgICAgICAgICAgcmV0dXJuIG4ubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgaWMgPSBBcnJheSgyNTYpLCBqYyA9IDA7IDI1NiA+IGpjOyArK2pjKVxuICAgICAgICAgICAgaWNbamNdID0gU3RyaW5nLmZyb21DaGFyQ29kZShqYyk7XG4gICAgICAgICAgY2IgPSBpYztcbiAgICAgICAgICBPID0gZy5CaW5kaW5nRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKGEpIHtcbiAgICAgICAgICAgICAgc3VwZXIoYSk7XG4gICAgICAgICAgICAgIHRoaXMubmFtZSA9IFwiQmluZGluZ0Vycm9yXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBnLkludGVybmFsRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKGEpIHtcbiAgICAgICAgICAgICAgc3VwZXIoYSk7XG4gICAgICAgICAgICAgIHRoaXMubmFtZSA9IFwiSW50ZXJuYWxFcnJvclwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgUS5wdXNoKDAsIDEsIHZvaWQgMCwgMSwgbnVsbCwgMSwgdHJ1ZSwgMSwgZmFsc2UsIDEpO1xuICAgICAgICAgIGcuY291bnRfZW12YWxfaGFuZGxlcyA9ICgpID0+IFEubGVuZ3RoIC8gMiAtIDUgLSBpYi5sZW5ndGg7XG4gICAgICAgICAgdmFyIENmID0ge1xuICAgICAgICAgICAgYmQ6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9iKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBnLmJpKGEsIGIsIGMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2OiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgIGEgPSBuZXcgU2EoYSA+Pj4gMCk7XG4gICAgICAgICAgICAgIDAgPT0gelthLkloICsgMTIgPj4+IDBdICYmICh6W2EuSWggKyAxMiA+Pj4gMF0gPSAxLCBSYS0tKTtcbiAgICAgICAgICAgICAgelthLkloICsgMTMgPj4+IDBdID0gMDtcbiAgICAgICAgICAgICAgUWEucHVzaChhKTtcbiAgICAgICAgICAgICAga2MoYS5OaCk7XG4gICAgICAgICAgICAgIGlmIChsYyhJW2EuSWggKyA0ID4+PiAyID4+PiAwXSkpXG4gICAgICAgICAgICAgICAgYSA9IElbYS5OaCA+Pj4gMiA+Pj4gMF07XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBiID0gSVthLkloICsgMTYgPj4+IDIgPj4+IDBdO1xuICAgICAgICAgICAgICAgIGEgPSAwICE9PSBiID8gYiA6IGEuTmg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTjogKCkgPT4ge1xuICAgICAgICAgICAgICBYKDAsIDApO1xuICAgICAgICAgICAgICB2YXIgYSA9IFFhLnBvcCgpO1xuICAgICAgICAgICAgICBtYyhhLk5oKTtcbiAgICAgICAgICAgICAgTCA9IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBaYShbXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbTogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICByZXR1cm4gWmEoW2EgPj4+IDBdKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4OiBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBaYShbYSA+Pj4gMCwgYiA+Pj4gMF0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHE6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFphKFthID4+PiAwLCBiID4+PiAwLCBjID4+PiAwXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQmI6ICgpID0+IHtcbiAgICAgICAgICAgICAgdmFyIGEgPSBRYS5wb3AoKTtcbiAgICAgICAgICAgICAgYSB8fCBHYShcIm5vIGV4Y2VwdGlvbiB0byB0aHJvd1wiKTtcbiAgICAgICAgICAgICAgdmFyIGIgPSBhLk5oO1xuICAgICAgICAgICAgICAwID09IHpbYS5JaCArIDEzID4+PiAwXSAmJiAoUWEucHVzaChhKSwgelthLkloICsgMTMgPj4+IDBdID0gMSwgelthLkloICsgMTIgPj4+IDBdID0gMCwgUmErKyk7XG4gICAgICAgICAgICAgIEwgPSBiO1xuICAgICAgICAgICAgICB0aHJvdyBMO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIHZhciBkID0gbmV3IFNhKGEpO1xuICAgICAgICAgICAgICBJW2QuSWggKyAxNiA+Pj4gMiA+Pj4gMF0gPSAwO1xuICAgICAgICAgICAgICBJW2QuSWggKyA0ID4+PiAyID4+PiAwXSA9IGIgPj4+IDA7XG4gICAgICAgICAgICAgIElbZC5JaCArIDggPj4+IDIgPj4+IDBdID0gYyA+Pj4gMDtcbiAgICAgICAgICAgICAgTCA9IGE7XG4gICAgICAgICAgICAgIFJhKys7XG4gICAgICAgICAgICAgIHRocm93IEw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmI6ICgpID0+IFJhLFxuICAgICAgICAgICAgZzogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICBMIHx8PSBhID4+PiAwO1xuICAgICAgICAgICAgICB0aHJvdyBMO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIENiOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJGM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE1jOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBPYzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgR2M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBaYzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVWM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFljOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfYjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTmM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEtjOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfYzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTGM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFdiOiBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAgICAgIGIgPSBOKGIgPj4+IDApO1xuICAgICAgICAgICAgICBQKGEgPj4+IDAsIHsgbmFtZTogYiwgZnJvbVdpcmVUeXBlOiAoZCkgPT4gZCwgdG9XaXJlVHlwZTogZnVuY3Rpb24oZCwgZSkge1xuICAgICAgICAgICAgICAgIGlmIChcImJpZ2ludFwiICE9IHR5cGVvZiBlICYmIFwibnVtYmVyXCIgIT0gdHlwZW9mIGUpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBudWxsID09PSBlID8gZSA9IFwibnVsbFwiIDogKGQgPSB0eXBlb2YgZSwgZSA9IFwib2JqZWN0XCIgPT09IGQgfHwgXCJhcnJheVwiID09PSBkIHx8IFwiZnVuY3Rpb25cIiA9PT0gZCA/IGUudG9TdHJpbmcoKSA6IFwiXCIgKyBlKSwgbmV3IFR5cGVFcnJvcihgQ2Fubm90IGNvbnZlcnQgXCIke2V9XCIgdG8gJHt0aGlzLm5hbWV9YCk7XG4gICAgICAgICAgICAgICAgXCJudW1iZXJcIiA9PSB0eXBlb2YgZSAmJiAoZSA9IEJpZ0ludChlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICAgIH0sIGFyZ1BhY2tBZHZhbmNlOiA4LCByZWFkVmFsdWVGcm9tUG9pbnRlcjogaGIoYiwgYyA+Pj4gMCwgLTEgPT0gYi5pbmRleE9mKFwidVwiKSksIE1oOiBudWxsIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEVjOiBmdW5jdGlvbihhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICAgIGIgPSBOKGIgPj4+IDApO1xuICAgICAgICAgICAgICBQKGEgPj4+IDAsIHsgbmFtZTogYiwgZnJvbVdpcmVUeXBlOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhZTtcbiAgICAgICAgICAgICAgfSwgdG9XaXJlVHlwZTogZnVuY3Rpb24oZSwgZikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmID8gYyA6IGQ7XG4gICAgICAgICAgICAgIH0sIGFyZ1BhY2tBZHZhbmNlOiA4LCByZWFkVmFsdWVGcm9tUG9pbnRlcjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyb21XaXJlVHlwZShFW2UgPj4+IDBdKTtcbiAgICAgICAgICAgICAgfSwgTWg6IG51bGwgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQ2M6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFAoYSA+Pj4gMCwgbGIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFZiOiBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAgICAgIGIgPSBOKGIgPj4+IDApO1xuICAgICAgICAgICAgICBQKGEgPj4+IDAsIHsgbmFtZTogYiwgZnJvbVdpcmVUeXBlOiAoZCkgPT4gZCwgdG9XaXJlVHlwZTogKGQsIGUpID0+IGUsIGFyZ1BhY2tBZHZhbmNlOiA4LCByZWFkVmFsdWVGcm9tUG9pbnRlcjogbWIoYiwgYyA+Pj4gMCksIE1oOiBudWxsIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEFhOiBmdW5jdGlvbihhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgICAgYiA9IE4oYiA+Pj4gMCk7XG4gICAgICAgICAgICAgIC0xID09PSBlICYmIChlID0gNDI5NDk2NzI5NSk7XG4gICAgICAgICAgICAgIGUgPSAoaykgPT4gaztcbiAgICAgICAgICAgICAgaWYgKDAgPT09IGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IDMyIC0gOCAqIGM7XG4gICAgICAgICAgICAgICAgZSA9IChrKSA9PiBrIDw8IGYgPj4+IGY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGggPSBiLmluY2x1ZGVzKFwidW5zaWduZWRcIikgPyBmdW5jdGlvbihrLCBsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGwgPj4+IDA7XG4gICAgICAgICAgICAgIH0gOiBmdW5jdGlvbihrLCBsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIFAoYSwge1xuICAgICAgICAgICAgICAgIG5hbWU6IGIsXG4gICAgICAgICAgICAgICAgZnJvbVdpcmVUeXBlOiBlLFxuICAgICAgICAgICAgICAgIHRvV2lyZVR5cGU6IGgsXG4gICAgICAgICAgICAgICAgYXJnUGFja0FkdmFuY2U6IDgsXG4gICAgICAgICAgICAgICAgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IGhiKGIsIGMsIDAgIT09IGQpLFxuICAgICAgICAgICAgICAgIE1oOiBudWxsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF86IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgZnVuY3Rpb24gZChmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBlKHouYnVmZmVyLCBJW2YgKyA0ID4+PiAyID4+PiAwXSwgSVtmID4+PiAyID4+PiAwXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGUgPSBbSW50OEFycmF5LCBVaW50OEFycmF5LCBJbnQxNkFycmF5LCBVaW50MTZBcnJheSwgSW50MzJBcnJheSwgVWludDMyQXJyYXksIEZsb2F0MzJBcnJheSwgRmxvYXQ2NEFycmF5LCBCaWdJbnQ2NEFycmF5LCBCaWdVaW50NjRBcnJheV1bYl07XG4gICAgICAgICAgICAgIGMgPSBOKGMgPj4+IDApO1xuICAgICAgICAgICAgICBQKGEgPj4+IDAsIHsgbmFtZTogYywgZnJvbVdpcmVUeXBlOiBkLCBhcmdQYWNrQWR2YW5jZTogOCwgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IGQgfSwgeyBYaDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBYYjogZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICBiID0gTihiID4+PiAwKTtcbiAgICAgICAgICAgICAgdmFyIGMgPSBcInN0ZDo6c3RyaW5nXCIgPT09IGI7XG4gICAgICAgICAgICAgIFAoYSA+Pj4gMCwgeyBuYW1lOiBiLCBmcm9tV2lyZVR5cGU6IGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IElbZCA+Pj4gMiA+Pj4gMF0sIGYgPSBkICsgNDtcbiAgICAgICAgICAgICAgICBpZiAoYylcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGggPSBmLCBrID0gMDsgayA8PSBlOyArK2spIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBmICsgaztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT0gZSB8fCAwID09IEVbbCA+Pj4gMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICBoID0gSihoLCBsIC0gaCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gbSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gaDtcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBtICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCksIG0gKz0gaDtcbiAgICAgICAgICAgICAgICAgICAgICBoID0gbCArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG0gPSBBcnJheShlKTtcbiAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBlOyArK2spXG4gICAgICAgICAgICAgICAgICAgIG1ba10gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKEVbZiArIGsgPj4+IDBdKTtcbiAgICAgICAgICAgICAgICAgIG0gPSBtLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFQoZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICAgIH0sIHRvV2lyZVR5cGU6IGZ1bmN0aW9uKGQsIGUpIHtcbiAgICAgICAgICAgICAgICBlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgJiYgKGUgPSBuZXcgVWludDhBcnJheShlKSk7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBcInN0cmluZ1wiID09IHR5cGVvZiBlO1xuICAgICAgICAgICAgICAgIGlmICghKGYgfHwgZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgZSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5IHx8IGUgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE8oXCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nXCIpO1xuICAgICAgICAgICAgICAgIHZhciBoID0gYyAmJiBmID8gYmIoZSkgOiBlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB2YXIgayA9IEpiKDQgKyBoICsgMSksIGwgPSBrICsgNDtcbiAgICAgICAgICAgICAgICBJW2sgPj4+IDIgPj4+IDBdID0gaDtcbiAgICAgICAgICAgICAgICBpZiAoYyAmJiBmKVxuICAgICAgICAgICAgICAgICAgTShlLCBFLCBsLCBoICsgMSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZilcbiAgICAgICAgICAgICAgICAgIGZvciAoZiA9IDA7IGYgPCBoOyArK2YpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBlLmNoYXJDb2RlQXQoZik7XG4gICAgICAgICAgICAgICAgICAgIGlmICgyNTUgPCBtKVxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IFQobCksIG5ldyBPKFwiU3RyaW5nIGhhcyBVVEYtMTYgY29kZSB1bml0cyB0aGF0IGRvIG5vdCBmaXQgaW4gOCBiaXRzXCIpO1xuICAgICAgICAgICAgICAgICAgICBFW2wgKyBmID4+PiAwXSA9IG07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgZm9yIChmID0gMDsgZiA8IGg7ICsrZilcbiAgICAgICAgICAgICAgICAgICAgRVtsICsgZiA+Pj4gMF0gPSBlW2ZdO1xuICAgICAgICAgICAgICAgIG51bGwgIT09IGQgJiYgZC5wdXNoKFQsIGspO1xuICAgICAgICAgICAgICAgIHJldHVybiBrO1xuICAgICAgICAgICAgICB9LCBhcmdQYWNrQWR2YW5jZTogOCwgcmVhZFZhbHVlRnJvbVBvaW50ZXI6IGtiLCBNaChkKSB7XG4gICAgICAgICAgICAgICAgVChkKTtcbiAgICAgICAgICAgICAgfSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBYjogZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgICAgYyA+Pj49IDA7XG4gICAgICAgICAgICAgIGMgPSBOKGMpO1xuICAgICAgICAgICAgICBpZiAoMiA9PT0gYikge1xuICAgICAgICAgICAgICAgIHZhciBkID0gb2I7XG4gICAgICAgICAgICAgICAgdmFyIGUgPSBwYjtcbiAgICAgICAgICAgICAgICB2YXIgZiA9IHFiO1xuICAgICAgICAgICAgICAgIHZhciBoID0gKGspID0+IHVhW2sgPj4+IDEgPj4+IDBdO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICA0ID09PSBiICYmIChkID0gcmIsIGUgPSBzYiwgZiA9IHRiLCBoID0gKGspID0+IElbayA+Pj4gMiA+Pj4gMF0pO1xuICAgICAgICAgICAgICBQKGEgPj4+IDAsIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBjLFxuICAgICAgICAgICAgICAgIGZyb21XaXJlVHlwZTogKGspID0+IHtcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSBJW2sgPj4+IDIgPj4+IDBdLCBtLCBuID0gayArIDQsIHEgPSAwOyBxIDw9IGw7ICsrcSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGsgKyA0ICsgcSAqIGI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxID09IGwgfHwgMCA9PSBoKHIpKVxuICAgICAgICAgICAgICAgICAgICAgIG4gPSBkKG4sIHIgLSBuKSwgdm9pZCAwID09PSBtID8gbSA9IG4gOiAobSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApLCBtICs9IG4pLCBuID0gciArIGI7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBUKGspO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0b1dpcmVUeXBlOiAoaywgbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgIT0gdHlwZW9mIGwpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPKGBDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIEMrKyBzdHJpbmcgdHlwZSAke2N9YCk7XG4gICAgICAgICAgICAgICAgICB2YXIgbSA9IGYobCksIG4gPSBKYig0ICsgbSArIGIpO1xuICAgICAgICAgICAgICAgICAgSVtuID4+PiAyID4+PiAwXSA9IG0gLyBiO1xuICAgICAgICAgICAgICAgICAgZShsLCBuICsgNCwgbSArIGIpO1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gayAmJiBrLnB1c2goVCwgbik7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFyZ1BhY2tBZHZhbmNlOiA4LFxuICAgICAgICAgICAgICAgIHJlYWRWYWx1ZUZyb21Qb2ludGVyOiBrYixcbiAgICAgICAgICAgICAgICBNaChrKSB7XG4gICAgICAgICAgICAgICAgICBUKGspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRmM6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgICAgYiA9IE4oYiA+Pj4gMCk7XG4gICAgICAgICAgICAgIFAoYSA+Pj4gMCwgeyBZaDogdHJ1ZSwgbmFtZTogYiwgYXJnUGFja0FkdmFuY2U6IDAsIGZyb21XaXJlVHlwZTogKCkgPT4ge1xuICAgICAgICAgICAgICB9LCB0b1dpcmVUeXBlOiAoKSA9PiB7XG4gICAgICAgICAgICAgIH0gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWQ6ICgpID0+IDEsXG4gICAgICAgICAgICBrZDogZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgICAgYyA+Pj49IDA7XG4gICAgICAgICAgICAgIGEgPSBSKGEgPj4+IDApO1xuICAgICAgICAgICAgICBiID0gdmIoYiwgXCJlbXZhbDo6YXNcIik7XG4gICAgICAgICAgICAgIHJldHVybiB3YihiLCBjLCBhKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBDZDogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgcmV0dXJuIE9iKCgpID0+IHtcbiAgICAgICAgICAgICAgICBhID0gUihhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS50aGVuKFMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1ZDogZnVuY3Rpb24oYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgICAgZCA+Pj49IDA7XG4gICAgICAgICAgICAgIGEgPSBQYlthID4+PiAwXTtcbiAgICAgICAgICAgICAgYiA9IFIoYiA+Pj4gMCk7XG4gICAgICAgICAgICAgIHJldHVybiBhKG51bGwsIGIsIGMsIGQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlhOiBmdW5jdGlvbihhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgICBkID4+Pj0gMDtcbiAgICAgICAgICAgICAgZSA+Pj49IDA7XG4gICAgICAgICAgICAgIGEgPSBQYlthID4+PiAwXTtcbiAgICAgICAgICAgICAgYiA9IFIoYiA+Pj4gMCk7XG4gICAgICAgICAgICAgIGMgPSBSYihjKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGEoYiwgYltjXSwgZCwgZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQmM6IGpiLFxuICAgICAgICAgICAgcWQ6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICAgIGEgPSBSKGEgPj4+IDApO1xuICAgICAgICAgICAgICBiID0gUihiKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB6ZDogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgaWYgKDAgPT09IGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFMoU2IoKSk7XG4gICAgICAgICAgICAgIGEgPSBSYihhKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFMoU2IoKVthXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGE6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgYiA9IFViKGEsIGIgPj4+IDApO1xuICAgICAgICAgICAgICB2YXIgZCA9IGIuc2hpZnQoKTtcbiAgICAgICAgICAgICAgYS0tO1xuICAgICAgICAgICAgICB2YXIgZSA9IFwicmV0dXJuIGZ1bmN0aW9uIChvYmosIGZ1bmMsIGRlc3RydWN0b3JzUmVmLCBhcmdzKSB7XFxuXCIsIGYgPSAwLCBoID0gW107XG4gICAgICAgICAgICAgIDAgPT09IGMgJiYgaC5wdXNoKFwib2JqXCIpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBrID0gW1wicmV0VHlwZVwiXSwgbCA9IFtkXSwgbSA9IDA7IG0gPCBhOyArK20pXG4gICAgICAgICAgICAgICAgaC5wdXNoKFwiYXJnXCIgKyBtKSwgay5wdXNoKFwiYXJnVHlwZVwiICsgbSksIGwucHVzaChiW21dKSwgZSArPSBgICB2YXIgYXJnJHttfSA9IGFyZ1R5cGUke219LnJlYWRWYWx1ZUZyb21Qb2ludGVyKGFyZ3Mke2YgPyBcIitcIiArIGYgOiBcIlwifSk7XG5gLCBmICs9IGJbbV0uYXJnUGFja0FkdmFuY2U7XG4gICAgICAgICAgICAgIGUgKz0gYCAgdmFyIHJ2ID0gJHsxID09PSBjID8gXCJuZXcgZnVuY1wiIDogXCJmdW5jLmNhbGxcIn0oJHtoLmpvaW4oXCIsIFwiKX0pO1xuYDtcbiAgICAgICAgICAgICAgZC5ZaCB8fCAoay5wdXNoKFwiZW12YWxfcmV0dXJuVmFsdWVcIiksIGwucHVzaCh3YiksIGUgKz0gXCIgIHJldHVybiBlbXZhbF9yZXR1cm5WYWx1ZShyZXRUeXBlLCBkZXN0cnVjdG9yc1JlZiwgcnYpO1xcblwiKTtcbiAgICAgICAgICAgICAgay5wdXNoKGUgKyBcIn07XFxuXCIpO1xuICAgICAgICAgICAgICBhID0gV2IoaykoLi4ubCk7XG4gICAgICAgICAgICAgIGMgPSBgbWV0aG9kQ2FsbGVyPCgke2IubWFwKChuKSA9PiBuLm5hbWUpLmpvaW4oXCIsIFwiKX0pID0+ICR7ZC5uYW1lfT5gO1xuICAgICAgICAgICAgICByZXR1cm4gVGIoVmIoYywgYSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHlkOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgIGIgPj4+PSAwO1xuICAgICAgICAgICAgICBhID0gUihhID4+PiAwKTtcbiAgICAgICAgICAgICAgYiA9IFIoYik7XG4gICAgICAgICAgICAgIHJldHVybiBTKGFbYl0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJhOiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgICA5IDwgYSAmJiAoUVthICsgMV0gKz0gMSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gUyhbXSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgYSA9IFIoYSA+Pj4gMCk7XG4gICAgICAgICAgICAgIGZvciAodmFyIGIgPSBBcnJheShhLmxlbmd0aCksIGMgPSAwOyBjIDwgYS5sZW5ndGg7IGMrKylcbiAgICAgICAgICAgICAgICBiW2NdID0gYVtjXTtcbiAgICAgICAgICAgICAgcmV0dXJuIFMoYik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVTogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICByZXR1cm4gUyhSYihhID4+PiAwKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgWGE6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gUyh7fSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIGZvciAodmFyIGIgPSBSKGEpOyBiLmxlbmd0aDsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGMgPSBiLnBvcCgpO1xuICAgICAgICAgICAgICAgIGIucG9wKCkoYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgamIoYSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2Q6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgICBhID0gUihhID4+PiAwKTtcbiAgICAgICAgICAgICAgYiA9IFIoYik7XG4gICAgICAgICAgICAgIGMgPSBSKGMpO1xuICAgICAgICAgICAgICBhW2JdID0gYztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB6YjogZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgICAgYSA9IHZiKGEgPj4+IDAsIFwiX2VtdmFsX3Rha2VfdmFsdWVcIik7XG4gICAgICAgICAgICAgIGEgPSBhLnJlYWRWYWx1ZUZyb21Qb2ludGVyKGIpO1xuICAgICAgICAgICAgICByZXR1cm4gUyhhKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSYzogZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICBhID0gLTkwMDcxOTkyNTQ3NDA5OTIgPiBhIHx8IDkwMDcxOTkyNTQ3NDA5OTIgPCBhID8gTmFOIDogTnVtYmVyKGEpO1xuICAgICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgICAgYSA9IG5ldyBEYXRlKDFlMyAqIGEpO1xuICAgICAgICAgICAgICBHW2IgPj4+IDIgPj4+IDBdID0gYS5nZXRVVENTZWNvbmRzKCk7XG4gICAgICAgICAgICAgIEdbYiArIDQgPj4+IDIgPj4+IDBdID0gYS5nZXRVVENNaW51dGVzKCk7XG4gICAgICAgICAgICAgIEdbYiArIDggPj4+IDIgPj4+IDBdID0gYS5nZXRVVENIb3VycygpO1xuICAgICAgICAgICAgICBHW2IgKyAxMiA+Pj4gMiA+Pj4gMF0gPSBhLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgICAgICAgR1tiICsgMTYgPj4+IDIgPj4+IDBdID0gYS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgICBHW2IgKyAyMCA+Pj4gMiA+Pj4gMF0gPSBhLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwO1xuICAgICAgICAgICAgICBHW2IgKyAyNCA+Pj4gMiA+Pj4gMF0gPSBhLmdldFVUQ0RheSgpO1xuICAgICAgICAgICAgICBHW2IgKyAyOCA+Pj4gMiA+Pj4gMF0gPSAoYS5nZXRUaW1lKCkgLSBEYXRlLlVUQyhcbiAgICAgICAgICAgICAgICBhLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKSkgLyA4NjRlNSB8IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgU2M6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgICAgYSA9IC05MDA3MTk5MjU0NzQwOTkyID4gYSB8fCA5MDA3MTk5MjU0NzQwOTkyIDwgYSA/IE5hTiA6IE51bWJlcihhKTtcbiAgICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICAgIGEgPSBuZXcgRGF0ZSgxZTMgKiBhKTtcbiAgICAgICAgICAgICAgR1tiID4+PiAyID4+PiAwXSA9IGEuZ2V0U2Vjb25kcygpO1xuICAgICAgICAgICAgICBHW2IgKyA0ID4+PiAyID4+PiAwXSA9IGEuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgICBHW2IgKyA4ID4+PiAyID4+PiAwXSA9IGEuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgR1tiICsgMTIgPj4+IDIgPj4+IDBdID0gYS5nZXREYXRlKCk7XG4gICAgICAgICAgICAgIEdbYiArIDE2ID4+PiAyID4+PiAwXSA9IGEuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgICAgR1tiICsgMjAgPj4+IDIgPj4+IDBdID0gYS5nZXRGdWxsWWVhcigpIC0gMTkwMDtcbiAgICAgICAgICAgICAgR1tiICsgMjQgPj4+IDIgPj4+IDBdID0gYS5nZXREYXkoKTtcbiAgICAgICAgICAgICAgR1tiICsgMjggPj4+IDIgPj4+IDBdID0gKFcoYS5nZXRGdWxsWWVhcigpKSA/IFhiIDogWWIpW2EuZ2V0TW9udGgoKV0gKyBhLmdldERhdGUoKSAtIDEgfCAwO1xuICAgICAgICAgICAgICBHW2IgKyAzNiA+Pj4gMiA+Pj4gMF0gPSAtKDYwICogYS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICAgICAgICAgICAgdmFyIGMgPSBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksIDYsIDEpLmdldFRpbWV6b25lT2Zmc2V0KCksIGQgPSBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksIDAsIDEpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgICAgICAgIEdbYiArIDMyID4+PiAyID4+PiAwXSA9IChjICE9IGQgJiYgYS5nZXRUaW1lem9uZU9mZnNldCgpID09IE1hdGgubWluKGQsIGMpKSB8IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVGM6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIHZhciBiID0gbmV3IERhdGUoR1thICsgMjAgPj4+IDIgPj4+IDBdICsgMTkwMCwgR1thICsgMTYgPj4+IDIgPj4+IDBdLCBHW2EgKyAxMiA+Pj4gMiA+Pj4gMF0sIEdbYSArIDggPj4+IDIgPj4+IDBdLCBHW2EgKyA0ID4+PiAyID4+PiAwXSwgR1thID4+PiAyID4+PiAwXSwgMCksIGMgPSBHW2EgKyAzMiA+Pj4gMiA+Pj4gMF0sIGQgPSBiLmdldFRpbWV6b25lT2Zmc2V0KCksIGUgPSBuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksIDYsIDEpLmdldFRpbWV6b25lT2Zmc2V0KCksIGYgPSBuZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksIDAsIDEpLmdldFRpbWV6b25lT2Zmc2V0KCksIGggPSBNYXRoLm1pbihmLCBlKTtcbiAgICAgICAgICAgICAgMCA+IGMgPyBHW2EgKyAzMiA+Pj4gMiA+Pj4gMF0gPSBOdW1iZXIoZSAhPSBmICYmIGggPT0gZCkgOiAwIDwgYyAhPSAoaCA9PSBkKSAmJiAoZSA9IE1hdGgubWF4KGYsIGUpLCBiLnNldFRpbWUoYi5nZXRUaW1lKCkgKyA2ZTQgKiAoKDAgPCBjID8gaCA6IGUpIC0gZCkpKTtcbiAgICAgICAgICAgICAgR1thICsgMjQgPj4+IDIgPj4+IDBdID0gYi5nZXREYXkoKTtcbiAgICAgICAgICAgICAgR1thICsgMjggPj4+IDIgPj4+IDBdID0gKFcoYi5nZXRGdWxsWWVhcigpKSA/IFhiIDogWWIpW2IuZ2V0TW9udGgoKV0gKyBiLmdldERhdGUoKSAtIDEgfCAwO1xuICAgICAgICAgICAgICBHW2EgPj4+IDIgPj4+IDBdID0gYi5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICAgIEdbYSArIDQgPj4+IDIgPj4+IDBdID0gYi5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgIEdbYSArIDggPj4+IDIgPj4+IDBdID0gYi5nZXRIb3VycygpO1xuICAgICAgICAgICAgICBHW2EgKyAxMiA+Pj4gMiA+Pj4gMF0gPSBiLmdldERhdGUoKTtcbiAgICAgICAgICAgICAgR1thICsgMTYgPj4+IDIgPj4+IDBdID0gYi5nZXRNb250aCgpO1xuICAgICAgICAgICAgICBHW2EgKyAyMCA+Pj4gMiA+Pj4gMF0gPSBiLmdldFllYXIoKTtcbiAgICAgICAgICAgICAgYSA9IGIuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICByZXR1cm4gQmlnSW50KGlzTmFOKGEpID8gLTEgOiBhIC8gMWUzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBQYzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiAtNTI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgUWM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEljOiBmdW5jdGlvbihhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgICBkID4+Pj0gMDtcbiAgICAgICAgICAgICAgdmFyIGUgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldEZ1bGxZZWFyKCksIGYgPSBuZXcgRGF0ZShlLCAwLCAxKSwgaCA9IG5ldyBEYXRlKGUsIDYsIDEpO1xuICAgICAgICAgICAgICBlID0gZi5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICAgICAgICB2YXIgayA9IGguZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgICAgICAgSVthID4+PiAwID4+PiAyID4+PiAwXSA9IDYwICogTWF0aC5tYXgoZSwgayk7XG4gICAgICAgICAgICAgIEdbYiA+Pj4gMCA+Pj4gMiA+Pj4gMF0gPSBOdW1iZXIoZSAhPSBrKTtcbiAgICAgICAgICAgICAgYSA9IChsKSA9PiBsLnRvTG9jYWxlVGltZVN0cmluZyh2b2lkIDAsIHsgaG91cjEyOiBmYWxzZSwgdGltZVpvbmVOYW1lOiBcInNob3J0XCIgfSkuc3BsaXQoXCIgXCIpWzFdO1xuICAgICAgICAgICAgICBmID0gYShmKTtcbiAgICAgICAgICAgICAgaCA9IGEoaCk7XG4gICAgICAgICAgICAgIGsgPCBlID8gKE0oZiwgRSwgYywgMTcpLCBNKGgsIEUsIGQsIDE3KSkgOiAoTShmLCBFLCBkLCAxNyksIE0oaCwgRSwgYywgMTcpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiYjogKCkgPT4ge1xuICAgICAgICAgICAgICBHYShcIlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBBOiBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgICBiID0gJGIoYiA+Pj4gMCwgYyA+Pj4gMCk7XG4gICAgICAgICAgICAgIHJldHVybiBPYVthXSguLi5iKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiYzogZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgYiA9ICRiKGIgPj4+IDAsIGMgPj4+IDApO1xuICAgICAgICAgICAgICByZXR1cm4gT2FbYV0oLi4uYik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJGI6ICgpID0+IERhdGUubm93KCksXG4gICAgICAgICAgICBKYzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiA0Mjk0OTAxNzYwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdhOiAoKSA9PiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgICAgICAgIEhjOiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgICB2YXIgYiA9IEUubGVuZ3RoO1xuICAgICAgICAgICAgICBpZiAoNDI5NDkwMTc2MCA8IGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMTsgNCA+PSBjOyBjICo9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgZCA9IGIgKiAoMSArIDAuMiAvIGMpO1xuICAgICAgICAgICAgICAgIGQgPSBNYXRoLm1pbihkLCBhICsgMTAwNjYzMjk2KTtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IE1hdGg7XG4gICAgICAgICAgICAgICAgZCA9IE1hdGgubWF4KGEsIGQpO1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgIGUgPSAoZS5taW4uY2FsbChlLCA0Mjk0OTAxNzYwLCBkICsgKDY1NTM2IC0gZCAlIDY1NTM2KSAlIDY1NTM2KSAtIHJhLmJ1ZmZlci5ieXRlTGVuZ3RoICsgNjU1MzUpIC8gNjU1MzY7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByYS5ncm93KGUpO1xuICAgICAgICAgICAgICAgICAgICB6YSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZilcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBXYzogZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICAgIHZhciBjID0gMDtcbiAgICAgICAgICAgICAgY2MoKS5mb3JFYWNoKChkLCBlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBiICsgYztcbiAgICAgICAgICAgICAgICBlID0gSVthICsgNCAqIGUgPj4+IDIgPj4+IDBdID0gZjtcbiAgICAgICAgICAgICAgICBmb3IgKGYgPSAwOyBmIDwgZC5sZW5ndGg7ICsrZilcbiAgICAgICAgICAgICAgICAgIHpbZSsrID4+PiAwXSA9IGQuY2hhckNvZGVBdChmKTtcbiAgICAgICAgICAgICAgICB6W2UgPj4+IDBdID0gMDtcbiAgICAgICAgICAgICAgICBjICs9IGQubGVuZ3RoICsgMTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFhjOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgICAgdmFyIGMgPSBjYygpO1xuICAgICAgICAgICAgICBJW2EgPj4+IDIgPj4+IDBdID0gYy5sZW5ndGg7XG4gICAgICAgICAgICAgIHZhciBkID0gMDtcbiAgICAgICAgICAgICAgYy5mb3JFYWNoKChlKSA9PiBkICs9IGUubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICAgIElbYiA+Pj4gMiA+Pj4gMF0gPSBkO1xuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBEYjogKCkgPT4gNTIsXG4gICAgICAgICAgICBaYjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiA1MjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBWYzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiA3MDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBZYjogZnVuY3Rpb24oYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgICBiID4+Pj0gMDtcbiAgICAgICAgICAgICAgYyA+Pj49IDA7XG4gICAgICAgICAgICAgIGQgPj4+PSAwO1xuICAgICAgICAgICAgICBmb3IgKHZhciBlID0gMCwgZiA9IDA7IGYgPCBjOyBmKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaCA9IElbYiA+Pj4gMiA+Pj4gMF0sIGsgPSBJW2IgKyA0ID4+PiAyID4+PiAwXTtcbiAgICAgICAgICAgICAgICBiICs9IDg7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBrOyBsKyspIHtcbiAgICAgICAgICAgICAgICAgIHZhciBtID0gRVtoICsgbCA+Pj4gMF0sIG4gPSBkY1thXTtcbiAgICAgICAgICAgICAgICAgIDAgPT09IG0gfHwgMTAgPT09IG0gPyAoKDEgPT09IGEgPyBxYSA6IHcpKGFiKG4sIDApKSwgbi5sZW5ndGggPSAwKSA6IG4ucHVzaChtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZSArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIElbZCA+Pj4gMiA+Pj4gMF0gPSBlO1xuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB4YjogbmMsXG4gICAgICAgICAgICBjZDogb2MsXG4gICAgICAgICAgICB1YTogcGMsXG4gICAgICAgICAgICBXOiBxYyxcbiAgICAgICAgICAgICQ6IHJjLFxuICAgICAgICAgICAgcmE6IHNjLFxuICAgICAgICAgICAgdGE6IHRjLFxuICAgICAgICAgICAgZGQ6IHVjLFxuICAgICAgICAgICAgb2I6IHZjLFxuICAgICAgICAgICAgUDogd2MsXG4gICAgICAgICAgICB6OiB4YyxcbiAgICAgICAgICAgIGI6IHljLFxuICAgICAgICAgICAgVWI6IHpjLFxuICAgICAgICAgICAgeWE6IEFjLFxuICAgICAgICAgICAgZTogQmMsXG4gICAgICAgICAgICBrYjogQ2MsXG4gICAgICAgICAgICBoOiBEYyxcbiAgICAgICAgICAgIFg6IEVjLFxuICAgICAgICAgICAgaTogRmMsXG4gICAgICAgICAgICBlZDogR2MsXG4gICAgICAgICAgICBqOiBIYyxcbiAgICAgICAgICAgIHQ6IEljLFxuICAgICAgICAgICAgcjogSmMsXG4gICAgICAgICAgICBvOiBLYyxcbiAgICAgICAgICAgIFdhOiBMYyxcbiAgICAgICAgICAgIENhOiBNYyxcbiAgICAgICAgICAgIG1hOiBOYyxcbiAgICAgICAgICAgIFFiOiBPYyxcbiAgICAgICAgICAgIGRiOiBQYyxcbiAgICAgICAgICAgIEliOiBRYyxcbiAgICAgICAgICAgIG1iOiBSYyxcbiAgICAgICAgICAgIGtjOiBTYyxcbiAgICAgICAgICAgIHhjOiBUYyxcbiAgICAgICAgICAgIGhjOiBVYyxcbiAgICAgICAgICAgIGljOiBWYyxcbiAgICAgICAgICAgIGFjOiBXYyxcbiAgICAgICAgICAgIG9hOiBYYyxcbiAgICAgICAgICAgIHliOiBZYyxcbiAgICAgICAgICAgIEJhOiBaYyxcbiAgICAgICAgICAgIEViOiAkYyxcbiAgICAgICAgICAgIGVhOiBhZCxcbiAgICAgICAgICAgIGpjOiBiZCxcbiAgICAgICAgICAgIFRhOiBjZCxcbiAgICAgICAgICAgIEY6IGRkLFxuICAgICAgICAgICAgRzogZWQsXG4gICAgICAgICAgICBHYjogZmQsXG4gICAgICAgICAgICBqZDogZ2QsXG4gICAgICAgICAgICBxYTogaGQsXG4gICAgICAgICAgICBPOiBqZCxcbiAgICAgICAgICAgIFY6IGtkLFxuICAgICAgICAgICAgVDogbGQsXG4gICAgICAgICAgICB5OiBtZCxcbiAgICAgICAgICAgIEZiOiBuZCxcbiAgICAgICAgICAgIGdjOiBvZCxcbiAgICAgICAgICAgIEQ6IHBkLFxuICAgICAgICAgICAgSGI6IHFkLFxuICAgICAgICAgICAgaWQ6IHJkLFxuICAgICAgICAgICAgVWE6IHNkLFxuICAgICAgICAgICAgd2E6IHRkLFxuICAgICAgICAgICAgbGM6IHVkLFxuICAgICAgICAgICAgY2M6IHZkLFxuICAgICAgICAgICAgTmI6IHdkLFxuICAgICAgICAgICAgYWE6IHhkLFxuICAgICAgICAgICAgSTogeWQsXG4gICAgICAgICAgICBDOiB6ZCxcbiAgICAgICAgICAgIF9hOiBBZCxcbiAgICAgICAgICAgIGZjOiBCZCxcbiAgICAgICAgICAgIFE6IENkLFxuICAgICAgICAgICAgZDogRGQsXG4gICAgICAgICAgICBhYjogRWQsXG4gICAgICAgICAgICBuOiBGZCxcbiAgICAgICAgICAgIFlhOiBHZCxcbiAgICAgICAgICAgIHZhOiBIZCxcbiAgICAgICAgICAgIHdiOiBJZCxcbiAgICAgICAgICAgIGY6IEpkLFxuICAgICAgICAgICAgeWM6IEtkLFxuICAgICAgICAgICAgZGE6IExkLFxuICAgICAgICAgICAgZ2I6IE1kLFxuICAgICAgICAgICAgRGE6IE5kLFxuICAgICAgICAgICAgbGI6IE9kLFxuICAgICAgICAgICAgaGI6IFBkLFxuICAgICAgICAgICAgYzogUWQsXG4gICAgICAgICAgICB2YzogUmQsXG4gICAgICAgICAgICBvZDogU2QsXG4gICAgICAgICAgICBrOiBUZCxcbiAgICAgICAgICAgIHRjOiBVZCxcbiAgICAgICAgICAgIGw6IFZkLFxuICAgICAgICAgICAgd2M6IFdkLFxuICAgICAgICAgICAgc2M6IFhkLFxuICAgICAgICAgICAgcmQ6IFlkLFxuICAgICAgICAgICAgcDogWmQsXG4gICAgICAgICAgICBSYTogJGQsXG4gICAgICAgICAgICB0YjogYWUsXG4gICAgICAgICAgICBRYTogYmUsXG4gICAgICAgICAgICBLYjogY2UsXG4gICAgICAgICAgICBCOiBkZSxcbiAgICAgICAgICAgIEs6IGVlLFxuICAgICAgICAgICAgUzogZmUsXG4gICAgICAgICAgICAkYTogZ2UsXG4gICAgICAgICAgICBwYzogaGUsXG4gICAgICAgICAgICB1YjogaWUsXG4gICAgICAgICAgICB6YTogamUsXG4gICAgICAgICAgICBrYToga2UsXG4gICAgICAgICAgICB4YTogbGUsXG4gICAgICAgICAgICBTYjogbWUsXG4gICAgICAgICAgICBMYTogbmUsXG4gICAgICAgICAgICBqYjogb2UsXG4gICAgICAgICAgICBHYTogcGUsXG4gICAgICAgICAgICBuYzogcWUsXG4gICAgICAgICAgICBIYTogcmUsXG4gICAgICAgICAgICBJYTogc2UsXG4gICAgICAgICAgICBmZDogdGUsXG4gICAgICAgICAgICB4ZDogdWUsXG4gICAgICAgICAgICBaOiB2ZSxcbiAgICAgICAgICAgIHBhOiB3ZSxcbiAgICAgICAgICAgIHBkOiB4ZSxcbiAgICAgICAgICAgIHdkOiB5ZSxcbiAgICAgICAgICAgIE1iOiB6ZSxcbiAgICAgICAgICAgIE1hOiBBZSxcbiAgICAgICAgICAgIEthOiBCZSxcbiAgICAgICAgICAgIFRiOiBDZSxcbiAgICAgICAgICAgIHJjOiBEZSxcbiAgICAgICAgICAgIEphOiBFZSxcbiAgICAgICAgICAgIE5hOiBGZSxcbiAgICAgICAgICAgIHBiOiBHZSxcbiAgICAgICAgICAgIGxhOiBIZSxcbiAgICAgICAgICAgIEVhOiBJZSxcbiAgICAgICAgICAgIG1jOiBKZSxcbiAgICAgICAgICAgIHFjOiBLZSxcbiAgICAgICAgICAgIEpiOiBMZSxcbiAgICAgICAgICAgIEZhOiBNZSxcbiAgICAgICAgICAgIGphOiBOZSxcbiAgICAgICAgICAgIEFkOiBPZSxcbiAgICAgICAgICAgIG5kOiBQZSxcbiAgICAgICAgICAgIFI6IFFlLFxuICAgICAgICAgICAgZWI6IFJlLFxuICAgICAgICAgICAgWmE6IFNlLFxuICAgICAgICAgICAgZWM6IFRlLFxuICAgICAgICAgICAgaWI6IFVlLFxuICAgICAgICAgICAgRTogVmUsXG4gICAgICAgICAgICBNOiBXZSxcbiAgICAgICAgICAgIFZhOiBYZSxcbiAgICAgICAgICAgIGxkOiBZZSxcbiAgICAgICAgICAgIGNhOiBaZSxcbiAgICAgICAgICAgIG5iOiAkZSxcbiAgICAgICAgICAgIG5hOiBhZixcbiAgICAgICAgICAgIGRjOiBiZixcbiAgICAgICAgICAgIEFjOiBjZixcbiAgICAgICAgICAgIHU6IGRmLFxuICAgICAgICAgICAgTDogZWYsXG4gICAgICAgICAgICB0ZDogZmYsXG4gICAgICAgICAgICBQYjogZ2YsXG4gICAgICAgICAgICBvYzogaGYsXG4gICAgICAgICAgICBCZDogamYsXG4gICAgICAgICAgICBPYjoga2YsXG4gICAgICAgICAgICBMYjogbGYsXG4gICAgICAgICAgICBjYjogbWYsXG4gICAgICAgICAgICB6YzogbmYsXG4gICAgICAgICAgICBSYjogb2YsXG4gICAgICAgICAgICBPYTogcGYsXG4gICAgICAgICAgICBZOiBxZixcbiAgICAgICAgICAgIHVjOiByZixcbiAgICAgICAgICAgIEo6IHNmLFxuICAgICAgICAgICAgZ2Q6IHRmLFxuICAgICAgICAgICAgdmI6IHVmLFxuICAgICAgICAgICAgc2E6IHZmLFxuICAgICAgICAgICAgSDogd2YsXG4gICAgICAgICAgICByYjogeGYsXG4gICAgICAgICAgICBQYTogeWYsXG4gICAgICAgICAgICBTYTogemYsXG4gICAgICAgICAgICBzYjogQWYsXG4gICAgICAgICAgICBxYjogQmYsXG4gICAgICAgICAgICB3OiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhID4+PiAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIERjOiBoYyxcbiAgICAgICAgICAgIGZhOiBmdW5jdGlvbihhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYyhhID4+PiAwLCBiID4+PiAwLCBjID4+PiAwLCBkID4+PiAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBVID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBhKGMpIHtcbiAgICAgICAgICAgICAgVSA9IGMuZXhwb3J0cztcbiAgICAgICAgICAgICAgVSA9IHpiKCk7XG4gICAgICAgICAgICAgIFUgPSBEZigpO1xuICAgICAgICAgICAgICByYSA9IFUuRGQ7XG4gICAgICAgICAgICAgIHphKCk7XG4gICAgICAgICAgICAgIEJhLnVuc2hpZnQoVS5FZCk7XG4gICAgICAgICAgICAgIERhLS07XG4gICAgICAgICAgICAgIDAgPT0gRGEgJiYgKG51bGwgIT09IEVhICYmIChjbGVhckludGVydmFsKEVhKSwgRWEgPSBudWxsKSwgRmEgJiYgKGMgPSBGYSwgRmEgPSBudWxsLCBjKCkpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYiA9IHsgYTogQ2YgfTtcbiAgICAgICAgICAgIERhKys7XG4gICAgICAgICAgICBpZiAoZy5pbnN0YW50aWF0ZVdhc20pXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGcuaW5zdGFudGlhdGVXYXNtKGIsIGEpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgdyhgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtjfWApLCBiYShjKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgTmEoYiwgZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICBhKGMuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfSkuY2F0Y2goYmEpO1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH0oKSwgdWIgPSAoYSkgPT4gKHViID0gVS5GZCkoYSk7XG4gICAgICAgICAgZy5fT3J0SW5pdCA9IChhLCBiKSA9PiAoZy5fT3J0SW5pdCA9IFUuR2QpKGEsIGIpO1xuICAgICAgICAgIGcuX09ydEdldExhc3RFcnJvciA9IChhLCBiKSA9PiAoZy5fT3J0R2V0TGFzdEVycm9yID0gVS5IZCkoYSwgYik7XG4gICAgICAgICAgZy5fT3J0Q3JlYXRlU2Vzc2lvbk9wdGlvbnMgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSkgPT4gKGcuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zID0gVS5JZCkoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSk7XG4gICAgICAgICAgZy5fT3J0QXBwZW5kRXhlY3V0aW9uUHJvdmlkZXIgPSAoYSwgYikgPT4gKGcuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyID0gVS5KZCkoYSwgYik7XG4gICAgICAgICAgZy5fT3J0QWRkRnJlZURpbWVuc2lvbk92ZXJyaWRlID0gKGEsIGIsIGMpID0+IChnLl9PcnRBZGRGcmVlRGltZW5zaW9uT3ZlcnJpZGUgPSBVLktkKShhLCBiLCBjKTtcbiAgICAgICAgICBnLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkgPSAoYSwgYiwgYykgPT4gKGcuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeSA9IFUuTGQpKGEsIGIsIGMpO1xuICAgICAgICAgIGcuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucyA9IChhKSA9PiAoZy5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zID0gVS5NZCkoYSk7XG4gICAgICAgICAgZy5fT3J0Q3JlYXRlU2Vzc2lvbiA9IChhLCBiLCBjKSA9PiAoZy5fT3J0Q3JlYXRlU2Vzc2lvbiA9IFUuTmQpKGEsIGIsIGMpO1xuICAgICAgICAgIGcuX09ydFJlbGVhc2VTZXNzaW9uID0gKGEpID0+IChnLl9PcnRSZWxlYXNlU2Vzc2lvbiA9IFUuT2QpKGEpO1xuICAgICAgICAgIGcuX09ydEdldElucHV0T3V0cHV0Q291bnQgPSAoYSwgYiwgYykgPT4gKGcuX09ydEdldElucHV0T3V0cHV0Q291bnQgPSBVLlBkKShhLCBiLCBjKTtcbiAgICAgICAgICBnLl9PcnRHZXRJbnB1dE5hbWUgPSAoYSwgYikgPT4gKGcuX09ydEdldElucHV0TmFtZSA9IFUuUWQpKGEsIGIpO1xuICAgICAgICAgIGcuX09ydEdldE91dHB1dE5hbWUgPSAoYSwgYikgPT4gKGcuX09ydEdldE91dHB1dE5hbWUgPSBVLlJkKShhLCBiKTtcbiAgICAgICAgICBnLl9PcnRGcmVlID0gKGEpID0+IChnLl9PcnRGcmVlID0gVS5TZCkoYSk7XG4gICAgICAgICAgZy5fT3J0Q3JlYXRlVGVuc29yID0gKGEsIGIsIGMsIGQsIGUsIGYpID0+IChnLl9PcnRDcmVhdGVUZW5zb3IgPSBVLlRkKShhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgICAgICBnLl9PcnRHZXRUZW5zb3JEYXRhID0gKGEsIGIsIGMsIGQsIGUpID0+IChnLl9PcnRHZXRUZW5zb3JEYXRhID0gVS5VZCkoYSwgYiwgYywgZCwgZSk7XG4gICAgICAgICAgZy5fT3J0UmVsZWFzZVRlbnNvciA9IChhKSA9PiAoZy5fT3J0UmVsZWFzZVRlbnNvciA9IFUuVmQpKGEpO1xuICAgICAgICAgIGcuX09ydENyZWF0ZVJ1bk9wdGlvbnMgPSAoYSwgYiwgYywgZCkgPT4gKGcuX09ydENyZWF0ZVJ1bk9wdGlvbnMgPSBVLldkKShhLCBiLCBjLCBkKTtcbiAgICAgICAgICBnLl9PcnRBZGRSdW5Db25maWdFbnRyeSA9IChhLCBiLCBjKSA9PiAoZy5fT3J0QWRkUnVuQ29uZmlnRW50cnkgPSBVLlhkKShhLCBiLCBjKTtcbiAgICAgICAgICBnLl9PcnRSZWxlYXNlUnVuT3B0aW9ucyA9IChhKSA9PiAoZy5fT3J0UmVsZWFzZVJ1bk9wdGlvbnMgPSBVLllkKShhKTtcbiAgICAgICAgICBnLl9PcnRDcmVhdGVCaW5kaW5nID0gKGEpID0+IChnLl9PcnRDcmVhdGVCaW5kaW5nID0gVS5aZCkoYSk7XG4gICAgICAgICAgZy5fT3J0QmluZElucHV0ID0gKGEsIGIsIGMpID0+IChnLl9PcnRCaW5kSW5wdXQgPSBVLl9kKShhLCBiLCBjKTtcbiAgICAgICAgICBnLl9PcnRCaW5kT3V0cHV0ID0gKGEsIGIsIGMsIGQpID0+IChnLl9PcnRCaW5kT3V0cHV0ID0gVS4kZCkoYSwgYiwgYywgZCk7XG4gICAgICAgICAgZy5fT3J0Q2xlYXJCb3VuZE91dHB1dHMgPSAoYSkgPT4gKGcuX09ydENsZWFyQm91bmRPdXRwdXRzID0gVS5hZSkoYSk7XG4gICAgICAgICAgZy5fT3J0UmVsZWFzZUJpbmRpbmcgPSAoYSkgPT4gKGcuX09ydFJlbGVhc2VCaW5kaW5nID0gVS5iZSkoYSk7XG4gICAgICAgICAgZy5fT3J0UnVuV2l0aEJpbmRpbmcgPSAoYSwgYiwgYywgZCwgZSkgPT4gKGcuX09ydFJ1bldpdGhCaW5kaW5nID0gVS5jZSkoYSwgYiwgYywgZCwgZSk7XG4gICAgICAgICAgZy5fT3J0UnVuID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspID0+IChnLl9PcnRSdW4gPSBVLmRlKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKTtcbiAgICAgICAgICBnLl9PcnRFbmRQcm9maWxpbmcgPSAoYSkgPT4gKGcuX09ydEVuZFByb2ZpbGluZyA9IFUuZWUpKGEpO1xuICAgICAgICAgIGcuX0pzZXBPdXRwdXQgPSAoYSwgYiwgYykgPT4gKGcuX0pzZXBPdXRwdXQgPSBVLmZlKShhLCBiLCBjKTtcbiAgICAgICAgICBnLl9Kc2VwR2V0Tm9kZU5hbWUgPSAoYSkgPT4gKGcuX0pzZXBHZXROb2RlTmFtZSA9IFUuZ2UpKGEpO1xuICAgICAgICAgIHZhciBKYiA9IGcuX21hbGxvYyA9IChhKSA9PiAoSmIgPSBnLl9tYWxsb2MgPSBVLmhlKShhKSwgVCA9IGcuX2ZyZWUgPSAoYSkgPT4gKFQgPSBnLl9mcmVlID0gVS5pZSkoYSksIFggPSAoYSwgYikgPT4gKFggPSBVLmtlKShhLCBiKSwgVGEgPSAoYSkgPT4gKFRhID0gVS5sZSkoYSksIFkgPSAoYSkgPT4gKFkgPSBVLm1lKShhKSwgRWYgPSAoYSkgPT4gKEVmID0gVS5uZSkoYSksIFogPSAoKSA9PiAoWiA9IFUub2UpKCksIG1jID0gKGEpID0+IChtYyA9IFUucGUpKGEpLCBrYyA9IChhKSA9PiAoa2MgPSBVLnFlKShhKSwgVWEgPSAoYSwgYiwgYykgPT4gKFVhID0gVS5yZSkoYSwgYiwgYyksIGxjID0gKGEpID0+IChsYyA9IFUuc2UpKGEpLCBkeW5DYWxsX3ZpaSA9IGcuZHluQ2FsbF92aWkgPSAoYSwgYiwgYykgPT4gKGR5bkNhbGxfdmlpID0gZy5keW5DYWxsX3ZpaSA9IFUudGUpKGEsIGIsIGMpLCBGZiA9IGcuZHluQ2FsbF9paWlpID0gKGEsIGIsIGMsIGQpID0+IChGZiA9IGcuZHluQ2FsbF9paWlpID0gVS51ZSkoYSwgYiwgYywgZCksIGR5bkNhbGxfaWlpID0gZy5keW5DYWxsX2lpaSA9IChhLCBiLCBjKSA9PiAoZHluQ2FsbF9paWkgPSBnLmR5bkNhbGxfaWlpID0gVS52ZSkoYSwgYiwgYyksIEdmID0gZy5keW5DYWxsX2lpID0gKGEsIGIpID0+IChHZiA9IGcuZHluQ2FsbF9paSA9IFUud2UpKGEsIGIpLCBIZiA9IGcuZHluQ2FsbF9paWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgpID0+IChIZiA9IGcuZHluQ2FsbF9paWlpaWlpID0gVS54ZSkoYSwgYiwgYywgZCwgZSwgZiwgaCksIGR5bkNhbGxfdmkgPSBnLmR5bkNhbGxfdmkgPSAoYSwgYikgPT4gKGR5bkNhbGxfdmkgPSBnLmR5bkNhbGxfdmkgPSBVLnllKShhLCBiKSwgZHluQ2FsbF92ID0gZy5keW5DYWxsX3YgPSAoYSkgPT4gKGR5bkNhbGxfdiA9IGcuZHluQ2FsbF92ID0gVS56ZSkoYSksIElmID0gZy5keW5DYWxsX2lpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAoSWYgPSBnLmR5bkNhbGxfaWlpaWlpID0gVS5BZSkoYSwgYiwgYywgZCwgZSwgZiksIEpmID0gZy5keW5DYWxsX2lpaWogPSAoYSwgYiwgYywgZCkgPT4gKEpmID0gZy5keW5DYWxsX2lpaWogPSBVLkJlKShhLCBiLCBjLCBkKSwgS2YgPSBnLmR5bkNhbGxfaWlpaWkgPSAoYSwgYiwgYywgZCwgZSkgPT4gKEtmID0gZy5keW5DYWxsX2lpaWlpID0gVS5DZSkoYSwgYiwgYywgZCwgZSksIExmID0gZy5keW5DYWxsX3ZpaWkgPSAoYSwgYiwgYywgZCkgPT4gKExmID0gZy5keW5DYWxsX3ZpaWkgPSBVLkRlKShhLCBiLCBjLCBkKSwgTWYgPSBnLmR5bkNhbGxfdmlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYpID0+IChNZiA9IGcuZHluQ2FsbF92aWlpaWkgPSBVLkVlKShhLCBiLCBjLCBkLCBlLCBmKSwgTmYgPSBnLmR5bkNhbGxfdmlpaWkgPSAoYSwgYiwgYywgZCwgZSkgPT4gKE5mID0gZy5keW5DYWxsX3ZpaWlpID0gVS5GZSkoYSwgYiwgYywgZCwgZSksIE9mID0gZy5keW5DYWxsX3ZpaWlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCkgPT4gKE9mID0gZy5keW5DYWxsX3ZpaWlpaWkgPSBVLkdlKShhLCBiLCBjLCBkLCBlLCBmLCBoKSwgUGYgPSBnLmR5bkNhbGxfdmlpamkgPSAoYSwgYiwgYywgZCwgZSkgPT4gKFBmID0gZy5keW5DYWxsX3ZpaWppID0gVS5IZSkoYSwgYiwgYywgZCwgZSksIFFmID0gZy5keW5DYWxsX3ZpaWlpaWlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSA9PiAoUWYgPSBnLmR5bkNhbGxfdmlpaWlpaWlpaWlpID0gVS5JZSkoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSksIFJmID0gZy5keW5DYWxsX3ZpaWlqamppaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKSA9PiAoUmYgPSBnLmR5bkNhbGxfdmlpaWpqamlpID0gVS5KZSkoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCksIFNmID0gZy5keW5DYWxsX2lpZCA9IChhLCBiLCBjKSA9PiAoU2YgPSBnLmR5bkNhbGxfaWlkID0gVS5LZSkoYSwgYiwgYyksIFRmID0gZy5keW5DYWxsX2lpZiA9IChhLCBiLCBjKSA9PiAoVGYgPSBnLmR5bkNhbGxfaWlmID0gVS5MZSkoYSwgYiwgYyksIFVmID0gZy5keW5DYWxsX2lpaiA9IChhLCBiLCBjKSA9PiAoVWYgPSBnLmR5bkNhbGxfaWlqID0gVS5NZSkoYSwgYiwgYyksIFZmID0gZy5keW5DYWxsX2ppaSA9IChhLCBiLCBjKSA9PiAoVmYgPSBnLmR5bkNhbGxfamlpID0gVS5OZSkoYSwgYiwgYyksIFdmID0gZy5keW5DYWxsX2kgPSAoYSkgPT4gKFdmID0gZy5keW5DYWxsX2kgPSBVLk9lKShhKSwgWGYgPSBnLmR5bkNhbGxfdmlpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpID0+IChYZiA9IGcuZHluQ2FsbF92aWlpaWlpaWkgPSBVLlBlKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKSwgWWYgPSBnLmR5bkNhbGxfdmlpaWlpaiA9IChhLCBiLCBjLCBkLCBlLCBmLCBoKSA9PiAoWWYgPSBnLmR5bkNhbGxfdmlpaWlpaiA9IFUuUWUpKGEsIGIsIGMsIGQsIGUsIGYsIGgpLCBaZiA9IGcuZHluQ2FsbF9qaSA9IChhLCBiKSA9PiAoWmYgPSBnLmR5bkNhbGxfamkgPSBVLlJlKShhLCBiKSwgJGYgPSBnLmR5bkNhbGxfdmlpaiA9IChhLCBiLCBjLCBkKSA9PiAoJGYgPSBnLmR5bkNhbGxfdmlpaiA9IFUuU2UpKGEsIGIsIGMsIGQpLCBhZyA9IGcuZHluQ2FsbF9paWlpaWlpaWlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSkgPT4gKGFnID0gZy5keW5DYWxsX2lpaWlpaWlpaWlpaSA9IFUuVGUpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEpLCBiZyA9IGcuZHluQ2FsbF92aWlpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pID0+IChiZyA9IGcuZHluQ2FsbF92aWlpaWlpaWlpID0gVS5VZSkoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSksIGNnID0gZy5keW5DYWxsX2lqID0gKGEsIGIpID0+IChjZyA9IGcuZHluQ2FsbF9paiA9IFUuVmUpKGEsIGIpLCBkZyA9IGcuZHluQ2FsbF9paWlpaWogPSAoYSwgYiwgYywgZCwgZSwgZikgPT4gKGRnID0gZy5keW5DYWxsX2lpaWlpaiA9IFUuV2UpKGEsIGIsIGMsIGQsIGUsIGYpLCBlZyA9IGcuZHluQ2FsbF9qID0gKGEpID0+IChlZyA9IGcuZHluQ2FsbF9qID0gVS5YZSkoYSksIGZnID0gZy5keW5DYWxsX3ZpaiA9IChhLCBiLCBjKSA9PiAoZmcgPSBnLmR5bkNhbGxfdmlqID0gVS5ZZSkoYSwgYiwgYyksIGdnID0gZy5keW5DYWxsX3ZpaWpqamlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSA9PiAoZ2cgPSBnLmR5bkNhbGxfdmlpampqaWlpaWlpID0gVS5aZSkoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSksIGhnID0gZy5keW5DYWxsX3ZpaWlqaWlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSA9PiAoaGcgPSBnLmR5bkNhbGxfdmlpaWppaWlpaWlpID0gVS5fZSkoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSksIGlnID0gZy5keW5DYWxsX2lpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspID0+IChpZyA9IGcuZHluQ2FsbF9paWlpaWlpaSA9IFUuJGUpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspLCBqZyA9IGcuZHluQ2FsbF92aWlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSA9PiAoamcgPSBnLmR5bkNhbGxfdmlpaWlpaWkgPSBVLmFmKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSwga2cgPSBnLmR5bkNhbGxfaWlpaWlpaWlqID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpID0+IChrZyA9IGcuZHluQ2FsbF9paWlpaWlpaWogPSBVLmJmKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKSwgbGcgPSBnLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCkgPT4gKGxnID0gZy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpID0gVS5jZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCksIG1nID0gZy5keW5DYWxsX2lpaWlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKSA9PiAobWcgPSBnLmR5bkNhbGxfaWlpaWlpaWlpID0gVS5kZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCksIG5nID0gZy5keW5DYWxsX2lpaWlpamlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pID0+IChuZyA9IGcuZHluQ2FsbF9paWlpaWppaWlpaSA9IFUuZWYpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pLCBvZyA9IGcuZHluQ2FsbF92aWpqamlpaWogPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCkgPT4gKG9nID0gZy5keW5DYWxsX3ZpampqaWlpaiA9IFUuZmYpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpLCBwZyA9IGcuZHluQ2FsbF9maSA9IChhLCBiKSA9PiAocGcgPSBnLmR5bkNhbGxfZmkgPSBVLmdmKShhLCBiKSwgcWcgPSBnLmR5bkNhbGxfZmlpID0gKGEsIGIsIGMpID0+IChxZyA9IGcuZHluQ2FsbF9maWkgPSBVLmhmKShhLCBiLCBjKSwgcmcgPSBnLmR5bkNhbGxfZGkgPSAoYSwgYikgPT4gKHJnID0gZy5keW5DYWxsX2RpID0gVS5qZikoYSwgYiksIHNnID0gZy5keW5DYWxsX2RpaSA9IChhLCBiLCBjKSA9PiAoc2cgPSBnLmR5bkNhbGxfZGlpID0gVS5rZikoYSwgYiwgYyksIHRnID0gZy5keW5DYWxsX3ZpamogPSAoYSwgYiwgYywgZCkgPT4gKHRnID0gZy5keW5DYWxsX3ZpamogPSBVLmxmKShhLCBiLCBjLCBkKSwgdWcgPSBnLmR5bkNhbGxfaWlpaWlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtKSA9PiAodWcgPSBnLmR5bkNhbGxfaWlpaWlpaWlpaSA9IFUubWYpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pLCB2ZyA9IGcuZHluQ2FsbF92aWlqaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgpID0+ICh2ZyA9IGcuZHluQ2FsbF92aWlqaWlpID0gVS5uZikoYSwgYiwgYywgZCwgZSwgZiwgaCksIHdnID0gZy5keW5DYWxsX3ZpaWQgPSAoYSwgYiwgYywgZCkgPT4gKHdnID0gZy5keW5DYWxsX3ZpaWQgPSBVLm9mKShhLCBiLCBjLCBkKSwgeGcgPSBnLmR5bkNhbGxfdmlmZmlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoKSA9PiAoeGcgPSBnLmR5bkNhbGxfdmlmZmlpaSA9IFUucGYpKGEsIGIsIGMsIGQsIGUsIGYsIGgpLCB5ZyA9IGcuZHluQ2FsbF92aWlmaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgpID0+ICh5ZyA9IGcuZHluQ2FsbF92aWlmaWlpID0gVS5xZikoYSwgYiwgYywgZCwgZSwgZiwgaCksIHpnID0gZy5keW5DYWxsX3ZpaWlpaWRpaWRpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pID0+ICh6ZyA9IGcuZHluQ2FsbF92aWlpaWlkaWlkaSA9IFUucmYpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pLCBBZyA9IGcuZHluQ2FsbF92aWlpaWlpaWlpZGkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSkgPT4gKEFnID0gZy5keW5DYWxsX3ZpaWlpaWlpaWlkaSA9IFUuc2YpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEpLCBCZyA9IGcuZHluQ2FsbF9qaWlpID0gKGEsIGIsIGMsIGQpID0+IChCZyA9IGcuZHluQ2FsbF9qaWlpID0gVS50ZikoYSwgYiwgYywgZCksIENnID0gZy5keW5DYWxsX3ZqaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspID0+IChDZyA9IGcuZHluQ2FsbF92amlpaWlpaSA9IFUudWYpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspLCBEZyA9IGcuZHluQ2FsbF92aWlpZCA9IChhLCBiLCBjLCBkLCBlKSA9PiAoRGcgPSBnLmR5bkNhbGxfdmlpaWQgPSBVLnZmKShhLCBiLCBjLCBkLCBlKSwgRWcgPSBnLmR5bkNhbGxfdmlpaWlpaWlpaWppID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEpID0+IChFZyA9IGcuZHluQ2FsbF92aWlpaWlpaWlpamkgPSBVLndmKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSwgRmcgPSBnLmR5bkNhbGxfdmlqaSA9IChhLCBiLCBjLCBkKSA9PiAoRmcgPSBnLmR5bkNhbGxfdmlqaSA9IFUueGYpKGEsIGIsIGMsIGQpLCBHZyA9IGcuZHluQ2FsbF92aWpqampqampqampqamppID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHkpID0+IChHZyA9IGcuZHluQ2FsbF92aWpqampqampqampqamppID0gVS55ZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSksIEhnID0gZy5keW5DYWxsX3ZpaWlqaSA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAoSGcgPSBnLmR5bkNhbGxfdmlpaWppID0gVS56ZikoYSwgYiwgYywgZCwgZSwgZiksIElnID0gZy5keW5DYWxsX3ZpampqaWlqaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKSA9PiAoSWcgPSBnLmR5bkNhbGxfdmlqamppaWppID0gVS5BZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCksIEpnID0gZy5keW5DYWxsX2lpaWppID0gKGEsIGIsIGMsIGQsIGUpID0+IChKZyA9IGcuZHluQ2FsbF9paWlqaSA9IFUuQmYpKGEsIGIsIGMsIGQsIGUpLCBLZyA9IGcuZHluQ2FsbF9paWlqaWlpaWlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwKSA9PiAoS2cgPSBnLmR5bkNhbGxfaWlpamlpaWlpaWlpaWkgPSBVLkNmKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwKSwgTGcgPSBnLmR5bkNhbGxfdmogPSAoYSwgYikgPT4gKExnID0gZy5keW5DYWxsX3ZqID0gVS5EZikoYSwgYiksIE1nID0gZy5keW5DYWxsX2pqaiA9IChhLCBiLCBjKSA9PiAoTWcgPSBnLmR5bkNhbGxfampqID0gVS5FZikoYSwgYiwgYyksIE5nID0gZy5keW5DYWxsX2lpaWppaWlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSkgPT4gKE5nID0gZy5keW5DYWxsX2lpaWppaWlpaWkgPSBVLkZmKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtKSwgT2cgPSBnLmR5bkNhbGxfdmZpaWkgPSAoYSwgYiwgYywgZCwgZSkgPT4gKE9nID0gZy5keW5DYWxsX3ZmaWlpID0gVS5HZikoYSwgYiwgYywgZCwgZSksIFBnID0gZy5keW5DYWxsX3ZpaWlpZmYgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCkgPT4gKFBnID0gZy5keW5DYWxsX3ZpaWlpZmYgPSBVLkhmKShhLCBiLCBjLCBkLCBlLCBmLCBoKSwgUWcgPSBnLmR5bkNhbGxfdmlpaWlpZmYgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaykgPT4gKFFnID0gZy5keW5DYWxsX3ZpaWlpaWZmID0gVS5JZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgayksIFJnID0gZy5keW5DYWxsX3ZpaWZmID0gKGEsIGIsIGMsIGQsIGUpID0+IChSZyA9IGcuZHluQ2FsbF92aWlmZiA9IFUuSmYpKGEsIGIsIGMsIGQsIGUpLCBTZyA9IGcuZHluQ2FsbF92aWlpaWlpaWlpZmlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwKSA9PiAoU2cgPSBnLmR5bkNhbGxfdmlpaWlpaWlpaWZpaWkgPSBVLktmKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwKSwgVGcgPSBnLmR5bkNhbGxfdmlpaWlpaWlpamogPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbikgPT4gKFRnID0gZy5keW5DYWxsX3ZpaWlpaWlpaWpqID0gVS5MZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiksIFVnID0gZy5keW5DYWxsX2lpaWlpaWlpaWlpaWlpZmlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEpID0+IChVZyA9IGcuZHluQ2FsbF9paWlpaWlpaWlpaWlpaWZpaSA9IFUuTWYpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEpLCBWZyA9IGcuZHluQ2FsbF92aWlpaWlpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpID0+IChWZyA9IGcuZHluQ2FsbF92aWlpaWlpaWlpaWlpID0gVS5OZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciksIFdnID0gZy5keW5DYWxsX2lpaWlpaWlpaWlpaWlpaWlpZmlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQpID0+IChXZyA9IGcuZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaWZpaSA9IFUuT2YpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQpLCBYZyA9IGcuZHluQ2FsbF92aWpqaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pID0+IChYZyA9IGcuZHluQ2FsbF92aWpqaWlpaWlpID0gVS5QZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSksIFlnID0gZy5keW5DYWxsX2lpaWlqamogPSAoYSwgYiwgYywgZCwgZSwgZiwgaCkgPT4gKFlnID0gZy5keW5DYWxsX2lpaWlqamogPSBVLlFmKShhLCBiLCBjLCBkLCBlLCBmLCBoKSwgWmcgPSBnLmR5bkNhbGxfdmlpaWlpaWlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbikgPT4gKFpnID0gZy5keW5DYWxsX3ZpaWlpaWlpaWlpID0gVS5SZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiksICRnID0gZy5keW5DYWxsX2lpaWpqaiA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAoJGcgPSBnLmR5bkNhbGxfaWlpampqID0gVS5TZikoYSwgYiwgYywgZCwgZSwgZiksIGFoID0gZy5keW5DYWxsX2ZmZmZmZmYgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCkgPT4gKGFoID0gZy5keW5DYWxsX2ZmZmZmZmYgPSBVLlRmKShhLCBiLCBjLCBkLCBlLCBmLCBoKSwgYmggPSBnLmR5bkNhbGxfdmlpaWlqID0gKGEsIGIsIGMsIGQsIGUsIGYpID0+IChiaCA9IGcuZHluQ2FsbF92aWlpaWogPSBVLlVmKShhLCBiLCBjLCBkLCBlLCBmKSwgY2ggPSBnLmR5bkNhbGxfdmlpaWlpaWppaWZpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCkgPT4gKGNoID0gZy5keW5DYWxsX3ZpaWlpaWlqaWlmaWlpID0gVS5WZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCksIGRoID0gZy5keW5DYWxsX3ZqampqampmZmppZmlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCKSA9PiAoZGggPSBnLmR5bkNhbGxfdmpqampqamZmamlmaWlpaWlpID0gVS5XZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQiksIGVoID0gZy5keW5DYWxsX3ZpaWlpaWlmZmppZmlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEpID0+IChlaCA9IGcuZHluQ2FsbF92aWlpaWlpZmZqaWZpaWlpaSA9IFUuWGYpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEpLCBmaCA9IGcuZHluQ2FsbF92aWlpaWlpZmZqZmlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHkpID0+IChmaCA9IGcuZHluQ2FsbF92aWlpaWlpZmZqZmlpaWlpID0gVS5ZZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSksIGdoID0gZy5keW5DYWxsX3ZpaWlpaWlmZmppaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1KSA9PiAoZ2ggPSBnLmR5bkNhbGxfdmlpaWlpaWZmamlpaWlpID0gVS5aZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSksIGhoID0gZy5keW5DYWxsX3ZqampqampqamZmZmlpaWZpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDLCBELCBGKSA9PiAoaGggPSBnLmR5bkNhbGxfdmpqampqampqZmZmaWlpZmlpaWlpID0gVS5fZikoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQiwgQywgRCwgRiksIGloID0gZy5keW5DYWxsX3ZqampqampmZmZpZmlqaWlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQiwgQykgPT4gKGloID0gZy5keW5DYWxsX3ZqampqampmZmZpZmlqaWlpaWkgPSBVLiRmKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDKSwgamggPSBnLmR5bkNhbGxfdmpqampqamZmZmlmaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIpID0+IChqaCA9IGcuZHluQ2FsbF92ampqampqZmZmaWZpaWlpaWkgPSBVLmFnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCKSwga2ggPSBnLmR5bkNhbGxfdmpqampqampqZmZmamlmaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQsIEYpID0+IChraCA9IGcuZHluQ2FsbF92ampqampqampmZmZqaWZpaWlpaWkgPSBVLmJnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDLCBELCBGKSwgbGggPSBnLmR5bkNhbGxfdmlqaWlpaWlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKSA9PiAobGggPSBnLmR5bkNhbGxfdmlqaWlpaWlpaWlpaSA9IFUuY2cpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpLCBtaCA9IGcuZHluQ2FsbF92aWpqZmZmaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pID0+IChtaCA9IGcuZHluQ2FsbF92aWpqZmZmaWlpID0gVS5kZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSksIG5oID0gZy5keW5DYWxsX3ZpaWlpaWlpamlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcikgPT4gKG5oID0gZy5keW5DYWxsX3ZpaWlpaWlpamlpaWkgPSBVLmVnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKSwgb2ggPSBnLmR5bkNhbGxfdmlqampqamppZmlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUpID0+IChvaCA9IGcuZHluQ2FsbF92aWpqampqamlmaWlpaWkgPSBVLmZnKShcbiAgICAgICAgICAgIGEsXG4gICAgICAgICAgICBiLFxuICAgICAgICAgICAgYyxcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgICBlLFxuICAgICAgICAgICAgZixcbiAgICAgICAgICAgIGgsXG4gICAgICAgICAgICBrLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICBuLFxuICAgICAgICAgICAgcSxcbiAgICAgICAgICAgIHIsXG4gICAgICAgICAgICBwLFxuICAgICAgICAgICAgdVxuICAgICAgICAgICksIHBoID0gZy5keW5DYWxsX3ZpaWZpID0gKGEsIGIsIGMsIGQsIGUpID0+IChwaCA9IGcuZHluQ2FsbF92aWlmaSA9IFUuZ2cpKGEsIGIsIGMsIGQsIGUpLCBxaCA9IGcuZHluQ2FsbF92ampqamppaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pID0+IChxaCA9IGcuZHluQ2FsbF92ampqamppaWlpID0gVS5oZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSksIHJoID0gZy5keW5DYWxsX3ZqampqZmlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKSA9PiAocmggPSBnLmR5bkNhbGxfdmpqampmaWlpID0gVS5pZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCksIHNoID0gZy5keW5DYWxsX3ZpaWlpaWlqaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHApID0+IChzaCA9IGcuZHluQ2FsbF92aWlpaWlpamlpaWlpaSA9IFUuamcpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHApLCB0aCA9IGcuZHluQ2FsbF92aWpqaWkgPSAoYSwgYiwgYywgZCwgZSwgZikgPT4gKHRoID0gZy5keW5DYWxsX3ZpamppaSA9IFUua2cpKGEsIGIsIGMsIGQsIGUsIGYpLCB1aCA9IGcuZHluQ2FsbF92aWlpaWlqamlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpID0+ICh1aCA9IGcuZHluQ2FsbF92aWlpaWlqamlpaWlpID0gVS5sZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciksIHZoID0gZy5keW5DYWxsX2lpaWlpamkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCkgPT4gKHZoID0gZy5keW5DYWxsX2lpaWlpamkgPSBVLm1nKShhLCBiLCBjLCBkLCBlLCBmLCBoKSwgd2ggPSBnLmR5bkNhbGxfaWlpaWppID0gKGEsIGIsIGMsIGQsIGUsIGYpID0+ICh3aCA9IGcuZHluQ2FsbF9paWlpamkgPSBVLm5nKShhLCBiLCBjLCBkLCBlLCBmKSwgeGggPSBnLmR5bkNhbGxfdmlpaWlpamlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKSA9PiAoeGggPSBnLmR5bkNhbGxfdmlpaWlpamlpaWlpaSA9IFUub2cpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpLCB5aCA9IGcuZHluQ2FsbF92aWlpamlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuKSA9PiAoeWggPSBnLmR5bkNhbGxfdmlpaWppaWlpaWkgPSBVLnBnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuKSwgemggPSBnLmR5bkNhbGxfdmlpamogPSAoYSwgYiwgYywgZCwgZSkgPT4gKHpoID0gZy5keW5DYWxsX3ZpaWpqID0gVS5xZykoYSwgYiwgYywgZCwgZSksIEFoID0gZy5keW5DYWxsX3ZpaWlpamlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspID0+IChBaCA9IGcuZHluQ2FsbF92aWlpaWppaSA9IFUucmcpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspLCBCaCA9IGcuZHluQ2FsbF92aWlqamlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSA9PiAoQmggPSBnLmR5bkNhbGxfdmlpamppaWkgPSBVLnNnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSwgQ2ggPSBnLmR5bkNhbGxfaWppaSA9IChhLCBiLCBjLCBkKSA9PiAoQ2ggPSBnLmR5bkNhbGxfaWppaSA9IFUudGcpKGEsIGIsIGMsIGQpLCBEaCA9IGcuZHluQ2FsbF92aWlpaWlqamppID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pID0+IChEaCA9IGcuZHluQ2FsbF92aWlpaWlqamppID0gVS51ZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSksIEVoID0gZy5keW5DYWxsX3ZpampqamlpaiA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKSA9PiAoRWggPSBnLmR5bkNhbGxfdmlqampqaWlqID0gVS52ZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCksIEZoID0gZy5keW5DYWxsX3ZpaWlpaWppaiA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKSA9PiAoRmggPSBnLmR5bkNhbGxfdmlpaWlpamlqID0gVS53ZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCksIEdoID0gZy5keW5DYWxsX3ZpaWlpaWlqaWogPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSkgPT4gKEdoID0gZy5keW5DYWxsX3ZpaWlpaWlqaWogPSBVLnhnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtKSwgSGggPSBnLmR5bkNhbGxfdmlqaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYpID0+IChIaCA9IGcuZHluQ2FsbF92aWppaWkgPSBVLnlnKShhLCBiLCBjLCBkLCBlLCBmKSwgSWggPSBnLmR5bkNhbGxfdmlpaWlpaWlpaWZpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEpID0+IChJaCA9IGcuZHluQ2FsbF92aWlpaWlpaWlpZmkgPSBVLnpnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSwgSmggPSBnLmR5bkNhbGxfaWlpamlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaykgPT4gKEpoID0gZy5keW5DYWxsX2lpaWppaWlpID0gVS5BZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgayksIEtoID0gZy5keW5DYWxsX3ZpaWlpaWlqamlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHApID0+IChLaCA9IGcuZHluQ2FsbF92aWlpaWlpamppaWlpaSA9IFUuQmcpKFxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGIsXG4gICAgICAgICAgICBjLFxuICAgICAgICAgICAgZCxcbiAgICAgICAgICAgIGUsXG4gICAgICAgICAgICBmLFxuICAgICAgICAgICAgaCxcbiAgICAgICAgICAgIGssXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIG4sXG4gICAgICAgICAgICBxLFxuICAgICAgICAgICAgcixcbiAgICAgICAgICAgIHBcbiAgICAgICAgICApLCBMaCA9IGcuZHluQ2FsbF92aWlpaWlpaWppaWlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSkgPT4gKExoID0gZy5keW5DYWxsX3ZpaWlpaWlpamlpaWlpaSA9IFUuQ2cpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUpLCBNaCA9IGcuZHluQ2FsbF92aWYgPSAoYSwgYiwgYykgPT4gKE1oID0gZy5keW5DYWxsX3ZpZiA9IFUuRGcpKGEsIGIsIGMpLCBOaCA9IGcuZHluQ2FsbF92aWlmID0gKGEsIGIsIGMsIGQpID0+IChOaCA9IGcuZHluQ2FsbF92aWlmID0gVS5FZykoYSwgYiwgYywgZCksIE9oID0gZy5keW5DYWxsX2ZpaWkgPSAoYSwgYiwgYywgZCkgPT4gKE9oID0gZy5keW5DYWxsX2ZpaWkgPSBVLkZnKShhLCBiLCBjLCBkKSwgUGggPSBnLmR5bkNhbGxfZGlpaSA9IChhLCBiLCBjLCBkKSA9PiAoUGggPSBnLmR5bkNhbGxfZGlpaSA9IFUuR2cpKGEsIGIsIGMsIGQpLCBRaCA9IGcuZHluQ2FsbF92aWlpaWlpZmlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pID0+IChRaCA9IGcuZHluQ2FsbF92aWlpaWlpZmlpID0gVS5IZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSksIFJoID0gZy5keW5DYWxsX3ZpaWlpaWppaWlpaWlpaWlpaWlpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQsIEYsIEgsIEssIFZhLCBXYSwgWGEpID0+IChSaCA9IGcuZHluQ2FsbF92aWlpaWlqaWlpaWlpaWlpaWlpaWlpaWlpaSA9IFUuSWcpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQsIEYsIEgsIEssIFZhLCBXYSwgWGEpLCBTaCA9IGcuZHluQ2FsbF92aWlqamkgPSAoYSwgYiwgYywgZCwgZSwgZikgPT4gKFNoID0gZy5keW5DYWxsX3ZpaWpqaSA9IFUuSmcpKGEsIGIsIGMsIGQsIGUsIGYpLCBUaCA9IGcuZHluQ2FsbF9paWlpaWlpaWlpaWppID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpID0+IChUaCA9IGcuZHluQ2FsbF9paWlpaWlpaWlpaWppID0gVS5LZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciksIFVoID0gZy5keW5DYWxsX3ZpaWZpaWZpampqaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcikgPT4gKFVoID0gZy5keW5DYWxsX3ZpaWZpaWZpampqaWkgPSBVLkxnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKSwgVmggPSBnLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQsIEYpID0+IChWaCA9IGcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpaWlpaWkgPSBVLk1nKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDLCBELCBGKSwgV2ggPSBnLmR5bkNhbGxfdmlpaWlpZmlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKSA9PiAoV2ggPSBnLmR5bkNhbGxfdmlpaWlpZmlpaWlpaSA9IFUuTmcpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpLCBYaCA9IGcuZHluQ2FsbF92aWppaWlpaWlpamppaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwKSA9PiAoWGggPSBnLmR5bkNhbGxfdmlqaWlpaWlpaWpqaWkgPSBVLk9nKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwKSwgWWggPSBnLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDKSA9PiAoWWggPSBnLmR5bkNhbGxfdmlpaWlpaWlpaWlpaWlpaWlpaSA9IFUuUGcpKFxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGIsXG4gICAgICAgICAgICBjLFxuICAgICAgICAgICAgZCxcbiAgICAgICAgICAgIGUsXG4gICAgICAgICAgICBmLFxuICAgICAgICAgICAgaCxcbiAgICAgICAgICAgIGssXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIG4sXG4gICAgICAgICAgICBxLFxuICAgICAgICAgICAgcixcbiAgICAgICAgICAgIHAsXG4gICAgICAgICAgICB1LFxuICAgICAgICAgICAgeSxcbiAgICAgICAgICAgIEEsXG4gICAgICAgICAgICBCLFxuICAgICAgICAgICAgQ1xuICAgICAgICAgICksIFpoID0gZy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQpID0+IChaaCA9IGcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpaWlpaSA9IFUuUWcpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQpLCAkaCA9IGcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHkpID0+ICgkaCA9IGcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpID0gVS5SZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSksIGFpID0gZy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEpID0+IChhaSA9IGcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWlpaSA9IFUuU2cpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEpLCBiaSA9IGcuZHluQ2FsbF92aWlpaWpqaiA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSA9PiAoYmkgPSBnLmR5bkNhbGxfdmlpaWlqamogPSBVLlRnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSwgY2kgPSBnLmR5bkNhbGxfaWlpaWlkID0gKGEsIGIsIGMsIGQsIGUsIGYpID0+IChjaSA9IGcuZHluQ2FsbF9paWlpaWQgPSBVLlVnKShhLCBiLCBjLCBkLCBlLCBmKSwgZGkgPSBnLmR5bkNhbGxfdmlpaWlpaWlqamogPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbikgPT4gKGRpID0gZy5keW5DYWxsX3ZpaWlpaWlpampqID0gVS5WZykoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiksIGVpID0gZy5keW5DYWxsX2lpaWlpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pID0+IChlaSA9IGcuZHluQ2FsbF9paWlpaWlpaWlpaSA9IFUuV2cpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pLCBmaSA9IGcuZHluQ2FsbF9paWlpaWlpaWlpaWlpaWlpaWlmaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDLCBEKSA9PiAoZmkgPSBnLmR5bkNhbGxfaWlpaWlpaWlpaWlpaWlpaWlpZmkgPSBVLlhnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDLCBEKSwgZ2kgPSBnLmR5bkNhbGxfdmlpaWYgPSAoYSwgYiwgYywgZCwgZSkgPT4gKGdpID0gZy5keW5DYWxsX3ZpaWlmID0gVS5ZZykoYSwgYiwgYywgZCwgZSksIGhpID0gZy5keW5DYWxsX3ZpaWlqaWlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSkgPT4gKGhpID0gZy5keW5DYWxsX3ZpaWlqaWlpaWkgPSBVLlpnKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtKSwgaWkgPSBnLmR5bkNhbGxfdmlpaWogPSAoYSwgYiwgYywgZCwgZSkgPT4gKGlpID0gZy5keW5DYWxsX3ZpaWlqID0gVS5fZykoYSwgYiwgYywgZCwgZSksIGppID0gZy5keW5DYWxsX2lpampqID0gKGEsIGIsIGMsIGQsIGUpID0+IChqaSA9IGcuZHluQ2FsbF9paWpqaiA9IFUuJGcpKGEsIGIsIGMsIGQsIGUpLCBraSA9IGcuZHluQ2FsbF92aWlpaWppID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgpID0+IChraSA9IGcuZHluQ2FsbF92aWlpaWppID0gVS5haCkoYSwgYiwgYywgZCwgZSwgZiwgaCksIGxpID0gZy5keW5DYWxsX2lpampqaSA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAobGkgPSBnLmR5bkNhbGxfaWlqamppID0gVS5iaCkoYSwgYiwgYywgZCwgZSwgZiksIG1pID0gZy5keW5DYWxsX2lqaWpqaSA9IChhLCBiLCBjLCBkLCBlLCBmKSA9PiAobWkgPSBnLmR5bkNhbGxfaWppamppID0gVS5jaCkoXG4gICAgICAgICAgICBhLFxuICAgICAgICAgICAgYixcbiAgICAgICAgICAgIGMsXG4gICAgICAgICAgICBkLFxuICAgICAgICAgICAgZSxcbiAgICAgICAgICAgIGZcbiAgICAgICAgICApLCBuaSA9IGcuZHluQ2FsbF92aWlpamppaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCkgPT4gKG5pID0gZy5keW5DYWxsX3ZpaWlqamlpaSA9IFUuZGgpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpLCBvaSA9IGcuZHluQ2FsbF9paWlpaWpqaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSA9PiAob2kgPSBnLmR5bkNhbGxfaWlpaWlqamkgPSBVLmVoKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSwgcGkgPSBnLmR5bkNhbGxfaWlpaWZpID0gKGEsIGIsIGMsIGQsIGUsIGYpID0+IChwaSA9IGcuZHluQ2FsbF9paWlpZmkgPSBVLmZoKShhLCBiLCBjLCBkLCBlLCBmKSwgcWkgPSBnLmR5bkNhbGxfaWlpamlpID0gKGEsIGIsIGMsIGQsIGUsIGYpID0+IChxaSA9IGcuZHluQ2FsbF9paWlqaWkgPSBVLmdoKShhLCBiLCBjLCBkLCBlLCBmKSwgcmkgPSBnLmR5bkNhbGxfaWlpaWlpaWlpamlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEpID0+IChyaSA9IGcuZHluQ2FsbF9paWlpaWlpaWlqaWkgPSBVLmhoKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSwgc2kgPSBnLmR5bkNhbGxfaWlpaWpqaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaykgPT4gKHNpID0gZy5keW5DYWxsX2lpaWlqamlpID0gVS5paCkoYSwgYiwgYywgZCwgZSwgZiwgaCwgayksIHRpID0gZy5keW5DYWxsX2lpaWlpaWpqamlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pID0+ICh0aSA9IGcuZHluQ2FsbF9paWlpaWlqamppaSA9IFUuamgpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pLCB1aSA9IGcuZHluQ2FsbF9paWlqaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgpID0+ICh1aSA9IGcuZHluQ2FsbF9paWlqaWlpID0gVS5raCkoYSwgYiwgYywgZCwgZSwgZiwgaCksIHZpID0gZy5keW5DYWxsX2lpaWlpaWlpampqZmkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcikgPT4gKHZpID0gZy5keW5DYWxsX2lpaWlpaWlpampqZmkgPSBVLmxoKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKSwgd2kgPSBnLmR5bkNhbGxfaWlqaWlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoKSA9PiAod2kgPSBnLmR5bkNhbGxfaWlqaWlpaSA9IFUubWgpKGEsIGIsIGMsIGQsIGUsIGYsIGgpLCB4aSA9IGcuZHluQ2FsbF9paWpqamlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgpID0+ICh4aSA9IGcuZHluQ2FsbF9paWpqamlpID0gVS5uaCkoYSwgYiwgYywgZCwgZSwgZiwgaCksIHlpID0gZy5keW5DYWxsX2ppaiA9IChhLCBiLCBjKSA9PiAoeWkgPSBnLmR5bkNhbGxfamlqID0gVS5vaCkoYSwgYiwgYyksIHppID0gZy5keW5DYWxsX2lpamkgPSAoYSwgYiwgYywgZCkgPT4gKHppID0gZy5keW5DYWxsX2lpamkgPSBVLnBoKShhLCBiLCBjLCBkKSwgQWkgPSBnLmR5bkNhbGxfaWlpZiA9IChhLCBiLCBjLCBkKSA9PiAoQWkgPSBnLmR5bkNhbGxfaWlpZiA9IFUucWgpKGEsIGIsIGMsIGQpLCBCaSA9IGcuZHluQ2FsbF92aWRpID0gKGEsIGIsIGMsIGQpID0+IChCaSA9IGcuZHluQ2FsbF92aWRpID0gVS5yaCkoYSwgYiwgYywgZCksIENpID0gZy5keW5DYWxsX3ZqaWlpID0gKGEsIGIsIGMsIGQsIGUpID0+IChDaSA9IGcuZHluQ2FsbF92amlpaSA9IFUuc2gpKGEsIGIsIGMsIGQsIGUpLCBEaSA9IGcuZHluQ2FsbF9kaWlpaSA9IChhLCBiLCBjLCBkLCBlKSA9PiAoRGkgPSBnLmR5bkNhbGxfZGlpaWkgPSBVLnRoKShhLCBiLCBjLCBkLCBlKSwgRWkgPSBnLmR5bkNhbGxfZGlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYpID0+IChFaSA9IGcuZHluQ2FsbF9kaWlpaWkgPSBVLnVoKShhLCBiLCBjLCBkLCBlLCBmKSwgRmkgPSBnLmR5bkNhbGxfdmlpaWpqaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEpID0+IChGaSA9IGcuZHluQ2FsbF92aWlpamppaWlpaWkgPSBVLnZoKShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSwgR2kgPSBnLmR5bkNhbGxfdmlpamppampqamlpaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKSA9PiAoR2kgPSBnLmR5bkNhbGxfdmlpamppampqamlpaSA9IFUud2gpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpLCBIaSA9IGcuZHluQ2FsbF9paWlpaiA9IChhLCBiLCBjLCBkLCBlKSA9PiAoSGkgPSBnLmR5bkNhbGxfaWlpaWogPSBVLnhoKShhLCBiLCBjLCBkLCBlKSwgSWkgPSBnLmR5bkNhbGxfdmlpaWppaSA9IChhLCBiLCBjLCBkLCBlLCBmLCBoKSA9PiAoSWkgPSBnLmR5bkNhbGxfdmlpaWppaSA9IFUueWgpKGEsIGIsIGMsIGQsIGUsIGYsIGgpLCBKaSA9IGcuZHluQ2FsbF92aWlqaWlpaWlpaWlpID0gKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpID0+IChKaSA9IGcuZHluQ2FsbF92aWlqaWlpaWlpaWlpID0gVS56aCkoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciksIEtpID0gZy5keW5DYWxsX2ZpaWlpID0gKGEsIGIsIGMsIGQsIGUpID0+IChLaSA9IGcuZHluQ2FsbF9maWlpaSA9IFUuQWgpKGEsIGIsIGMsIGQsIGUpLCBMaSA9IGcuZHluQ2FsbF9qZmkgPSAoYSwgYiwgYykgPT4gKExpID0gZy5keW5DYWxsX2pmaSA9IFUuQmgpKGEsIGIsIGMpLCBNaSA9IGcuZHluQ2FsbF92aWlpaWlpaWlpaWlpaWkgPSAoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSkgPT4gKE1pID0gZy5keW5DYWxsX3ZpaWlpaWlpaWlpaWlpaSA9IFUuQ2gpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUpLCBOaSA9IGcuZHluQ2FsbF9qaWlqID0gKGEsIGIsIGMsIGQpID0+IChOaSA9IGcuZHluQ2FsbF9qaWlqID0gVS5EaCkoYSwgYiwgYywgZCksIE1iID0gKGEpID0+IChNYiA9IFUuRWgpKGEpLCBCYiA9ICgpID0+IChCYiA9IFUuRmgpKCksIExiID0gKGEpID0+IChMYiA9IFUuR2gpKGEpLCBOYiA9ICgpID0+IChOYiA9IFUuSGgpKCk7XG4gICAgICAgICAgZy5fX19zdGFydF9lbV9qcyA9IDEyNzUwNDQ7XG4gICAgICAgICAgZy5fX19zdG9wX2VtX2pzID0gMTI3NTIwNTtcbiAgICAgICAgICBmdW5jdGlvbiBEYyhhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICB2YXIgZSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBGZihhLCBiLCBjLCBkKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgICAgICAgWShlKTtcbiAgICAgICAgICAgICAgaWYgKGYgIT09IGYgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGY7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEJjKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHZhciBkID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGR5bkNhbGxfaWlpKGEsIGIsIGMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBZKGQpO1xuICAgICAgICAgICAgICBpZiAoZSAhPT0gZSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gSmQoYSwgYiwgYykge1xuICAgICAgICAgICAgdmFyIGQgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBkeW5DYWxsX3ZpaShhLCBiLCBjKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgWShkKTtcbiAgICAgICAgICAgICAgaWYgKGUgIT09IGUgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHljKGEsIGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIEdmKGEsIGIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICAgICAgICBZKGMpO1xuICAgICAgICAgICAgICBpZiAoZCAhPT0gZCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gRmQoYSwgYikge1xuICAgICAgICAgICAgdmFyIGMgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBkeW5DYWxsX3ZpKGEsIGIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICAgICAgICBZKGMpO1xuICAgICAgICAgICAgICBpZiAoZCAhPT0gZCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gZGQoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgdmFyIGUgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gSmYoYSwgYiwgYywgZCk7XG4gICAgICAgICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgICAgICAgIFkoZSk7XG4gICAgICAgICAgICAgIGlmIChmICE9PSBmICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBmO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBEZChhKSB7XG4gICAgICAgICAgICB2YXIgYiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGR5bkNhbGxfdihhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgWShiKTtcbiAgICAgICAgICAgICAgaWYgKGMgIT09IGMgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGM7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEljKGEsIGIsIGMsIGQsIGUsIGYsIGgpIHtcbiAgICAgICAgICAgIHZhciBrID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIEhmKGEsIGIsIGMsIGQsIGUsIGYsIGgpO1xuICAgICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgICBZKGspO1xuICAgICAgICAgICAgICBpZiAobCAhPT0gbCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gSGMoYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgICAgICAgdmFyIGggPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gSWYoYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgICAgIFkoaCk7XG4gICAgICAgICAgICAgIGlmIChrICE9PSBrICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBrO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBGYyhhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICB2YXIgZiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBLZihhLCBiLCBjLCBkLCBlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgWShmKTtcbiAgICAgICAgICAgICAgaWYgKGggIT09IGggKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGg7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIFFkKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgIHZhciBlID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgTGYoYSwgYiwgYywgZCk7XG4gICAgICAgICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgICAgICAgIFkoZSk7XG4gICAgICAgICAgICAgIGlmIChmICE9PSBmICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBmO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBUZChhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICB2YXIgZiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIE5mKGEsIGIsIGMsIGQsIGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBZKGYpO1xuICAgICAgICAgICAgICBpZiAoaCAhPT0gaCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gVmQoYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgICAgICAgdmFyIGggPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBNZihhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICAgICAgWShoKTtcbiAgICAgICAgICAgICAgaWYgKGsgIT09IGsgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGs7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIFpkKGEsIGIsIGMsIGQsIGUsIGYsIGgpIHtcbiAgICAgICAgICAgIHZhciBrID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgT2YoYSwgYiwgYywgZCwgZSwgZiwgaCk7XG4gICAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICAgIFkoayk7XG4gICAgICAgICAgICAgIGlmIChsICE9PSBsICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBsO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBrZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSB7XG4gICAgICAgICAgICB2YXIgciA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFFmKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEpO1xuICAgICAgICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICAgICAgICBZKHIpO1xuICAgICAgICAgICAgICBpZiAocCAhPT0gcCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgcDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gemMoYSwgYiwgYykge1xuICAgICAgICAgICAgdmFyIGQgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gU2YoYSwgYiwgYyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIFkoZCk7XG4gICAgICAgICAgICAgIGlmIChlICE9PSBlICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBBYyhhLCBiLCBjKSB7XG4gICAgICAgICAgICB2YXIgZCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBUZihhLCBiLCBjKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgWShkKTtcbiAgICAgICAgICAgICAgaWYgKGUgIT09IGUgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIG1kKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHZhciBkID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIFVmKGEsIGIsIGMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBZKGQpO1xuICAgICAgICAgICAgICBpZiAoZSAhPT0gZSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24geWQoYSwgYiwgYykge1xuICAgICAgICAgICAgdmFyIGQgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gVmYoYSwgYiwgYyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIFkoZCk7XG4gICAgICAgICAgICAgIGlmIChlICE9PSBlICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgICByZXR1cm4gMG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGVlKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpIHtcbiAgICAgICAgICAgIHZhciBtID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgWGYoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgICAgIFkobSk7XG4gICAgICAgICAgICAgIGlmIChuICE9PSBuICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB4YyhhKSB7XG4gICAgICAgICAgICB2YXIgYiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBXZihhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgWShiKTtcbiAgICAgICAgICAgICAgaWYgKGMgIT09IGMgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGM7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGRmKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHZhciBkID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZmcoYSwgYiwgYyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIFkoZCk7XG4gICAgICAgICAgICAgIGlmIChlICE9PSBlICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBXZShhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICB2YXIgZiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFBmKGEsIGIsIGMsIGQsIGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBZKGYpO1xuICAgICAgICAgICAgICBpZiAoaCAhPT0gaCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gQ2UoYSwgYiwgYywgZCwgZSwgZiwgaCkge1xuICAgICAgICAgICAgdmFyIGsgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBZZihhLCBiLCBjLCBkLCBlLCBmLCBoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgICAgWShrKTtcbiAgICAgICAgICAgICAgaWYgKGwgIT09IGwgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGw7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGNmKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEpIHtcbiAgICAgICAgICAgIHZhciByID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZ2coYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSk7XG4gICAgICAgICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgICAgICAgIFkocik7XG4gICAgICAgICAgICAgIGlmIChwICE9PSBwICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBwO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBSZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSB7XG4gICAgICAgICAgICB2YXIgciA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGhnKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEpO1xuICAgICAgICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICAgICAgICBZKHIpO1xuICAgICAgICAgICAgICBpZiAocCAhPT0gcCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgcDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gSmMoYSwgYiwgYywgZCwgZSwgZiwgaCwgaykge1xuICAgICAgICAgICAgdmFyIGwgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gaWcoYSwgYiwgYywgZCwgZSwgZiwgaCwgayk7XG4gICAgICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICAgIFkobCk7XG4gICAgICAgICAgICAgIGlmIChtICE9PSBtICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBtO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBkZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSB7XG4gICAgICAgICAgICB2YXIgbCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGpnKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspO1xuICAgICAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgICBZKGwpO1xuICAgICAgICAgICAgICBpZiAobSAhPT0gbSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gTmMoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSkge1xuICAgICAgICAgICAgdmFyIHIgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYWcoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSk7XG4gICAgICAgICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgICAgICAgIFkocik7XG4gICAgICAgICAgICAgIGlmIChwICE9PSBwICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBwO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBmZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtKSB7XG4gICAgICAgICAgICB2YXIgbiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGJnKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pO1xuICAgICAgICAgICAgfSBjYXRjaCAocSkge1xuICAgICAgICAgICAgICBZKG4pO1xuICAgICAgICAgICAgICBpZiAocSAhPT0gcSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgcTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gbWUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCkge1xuICAgICAgICAgICAgdmFyIHUgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsZyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgICAgICAgWSh1KTtcbiAgICAgICAgICAgICAgaWYgKHkgIT09IHkgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHk7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIFljKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pIHtcbiAgICAgICAgICAgIHZhciBxID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5nKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pO1xuICAgICAgICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICAgICAgICBZKHEpO1xuICAgICAgICAgICAgICBpZiAociAhPT0gciArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgcjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gS2MoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCkge1xuICAgICAgICAgICAgdmFyIG0gPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gbWcoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgICAgIFkobSk7XG4gICAgICAgICAgICAgIGlmIChuICE9PSBuICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBuZihhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKSB7XG4gICAgICAgICAgICB2YXIgbSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIG9nKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpO1xuICAgICAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgICAgICBZKG0pO1xuICAgICAgICAgICAgICBpZiAobiAhPT0gbiArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gVmUoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgdmFyIGUgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAkZihhLCBiLCBjLCBkKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgICAgICAgWShlKTtcbiAgICAgICAgICAgICAgaWYgKGYgIT09IGYgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGY7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHRjKGEsIGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHBnKGEsIGIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICAgICAgICBZKGMpO1xuICAgICAgICAgICAgICBpZiAoZCAhPT0gZCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24geGQoYSwgYikge1xuICAgICAgICAgICAgdmFyIGMgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gWmYoYSwgYik7XG4gICAgICAgICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgICAgICAgIFkoYyk7XG4gICAgICAgICAgICAgIGlmIChkICE9PSBkICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBkO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgICByZXR1cm4gMG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIG5jKGEsIGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJnKGEsIGIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICAgICAgICBZKGMpO1xuICAgICAgICAgICAgICBpZiAoZCAhPT0gZCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gamYoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgdmFyIGUgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0ZyhhLCBiLCBjLCBkKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgICAgICAgWShlKTtcbiAgICAgICAgICAgICAgaWYgKGYgIT09IGYgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGY7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIE9lKGEsIGIsIGMsIGQsIGUsIGYsIGgpIHtcbiAgICAgICAgICAgIHZhciBrID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgSWkoYSwgYiwgYywgZCwgZSwgZiwgaCk7XG4gICAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICAgIFkoayk7XG4gICAgICAgICAgICAgIGlmIChsICE9PSBsICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBsO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBaZShhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICB2YXIgZiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHpoKGEsIGIsIGMsIGQsIGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBZKGYpO1xuICAgICAgICAgICAgICBpZiAoaCAhPT0gaCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gTGMoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSkge1xuICAgICAgICAgICAgdmFyIG4gPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gdWcoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSk7XG4gICAgICAgICAgICB9IGNhdGNoIChxKSB7XG4gICAgICAgICAgICAgIFkobik7XG4gICAgICAgICAgICAgIGlmIChxICE9PSBxICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBxO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBYZShhLCBiLCBjLCBkLCBlLCBmLCBoKSB7XG4gICAgICAgICAgICB2YXIgayA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZnKGEsIGIsIGMsIGQsIGUsIGYsIGgpO1xuICAgICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgICBZKGspO1xuICAgICAgICAgICAgICBpZiAobCAhPT0gbCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gS2QoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgdmFyIGUgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB3ZyhhLCBiLCBjLCBkKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgICAgICAgWShlKTtcbiAgICAgICAgICAgICAgaWYgKGYgIT09IGYgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGY7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIFRjKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpIHtcbiAgICAgICAgICAgIHZhciBtID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGtnKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpO1xuICAgICAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgICAgICBZKG0pO1xuICAgICAgICAgICAgICBpZiAobiAhPT0gbiArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gSWQoYSwgYiwgYywgZCwgZSwgZiwgaCkge1xuICAgICAgICAgICAgdmFyIGsgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB4ZyhhLCBiLCBjLCBkLCBlLCBmLCBoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgICAgWShrKTtcbiAgICAgICAgICAgICAgaWYgKGwgIT09IGwgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGw7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIFVlKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpIHtcbiAgICAgICAgICAgIHZhciBtID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgUmYoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgICAgIFkobSk7XG4gICAgICAgICAgICAgIGlmIChuICE9PSBuICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBQZChhLCBiLCBjLCBkLCBlLCBmLCBoKSB7XG4gICAgICAgICAgICB2YXIgayA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHlnKGEsIGIsIGMsIGQsIGUsIGYsIGgpO1xuICAgICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgICBZKGspO1xuICAgICAgICAgICAgICBpZiAobCAhPT0gbCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gV2QoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbikge1xuICAgICAgICAgICAgdmFyIHEgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB6ZyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICAgICAgWShxKTtcbiAgICAgICAgICAgICAgaWYgKHIgIT09IHIgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHI7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHpkKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgIHZhciBlID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIEJnKGEsIGIsIGMsIGQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICAgICAgICBZKGUpO1xuICAgICAgICAgICAgICBpZiAoZiAhPT0gZiArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIDBuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB1ZihhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSB7XG4gICAgICAgICAgICB2YXIgbCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIENnKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspO1xuICAgICAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgICBZKGwpO1xuICAgICAgICAgICAgICBpZiAobSAhPT0gbSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gUmQoYSwgYiwgYywgZCwgZSkge1xuICAgICAgICAgICAgdmFyIGYgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBEZyhhLCBiLCBjLCBkLCBlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgWShmKTtcbiAgICAgICAgICAgICAgaWYgKGggIT09IGggKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGg7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGVmKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgIHZhciBlID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgRmcoYSwgYiwgYywgZCk7XG4gICAgICAgICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgICAgICAgIFkoZSk7XG4gICAgICAgICAgICAgIGlmIChmICE9PSBmICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBmO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiByZihhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5KSB7XG4gICAgICAgICAgICB2YXIgQSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEdnKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoQikge1xuICAgICAgICAgICAgICBZKEEpO1xuICAgICAgICAgICAgICBpZiAoQiAhPT0gQiArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgQjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gTmUoYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgICAgICAgdmFyIGggPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBIZyhhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICAgICAgWShoKTtcbiAgICAgICAgICAgICAgaWYgKGsgIT09IGsgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGs7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIG9mKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpIHtcbiAgICAgICAgICAgIHZhciBtID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgSWcoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgICAgIFkobSk7XG4gICAgICAgICAgICAgIGlmIChuICE9PSBuICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBlZChhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICB2YXIgZiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBKZyhhLCBiLCBjLCBkLCBlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgWShmKTtcbiAgICAgICAgICAgICAgaWYgKGggIT09IGggKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGg7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGtkKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHApIHtcbiAgICAgICAgICAgIHZhciB1ID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIEtnKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHApO1xuICAgICAgICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICAgICAgICBZKHUpO1xuICAgICAgICAgICAgICBpZiAoeSAhPT0geSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgeTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gc2YoYSwgYikge1xuICAgICAgICAgICAgdmFyIGMgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBMZyhhLCBiKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgICAgICAgWShjKTtcbiAgICAgICAgICAgICAgaWYgKGQgIT09IGQgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGQ7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIENkKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHZhciBkID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIE1nKGEsIGIsIGMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBZKGQpO1xuICAgICAgICAgICAgICBpZiAoZSAhPT0gZSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIDBuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBqZChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtKSB7XG4gICAgICAgICAgICB2YXIgbiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBOZyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHEpIHtcbiAgICAgICAgICAgICAgWShuKTtcbiAgICAgICAgICAgICAgaWYgKHEgIT09IHEgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHE7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGllKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHApIHtcbiAgICAgICAgICAgIHZhciB1ID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgU2coYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCk7XG4gICAgICAgICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgICAgICAgIFkodSk7XG4gICAgICAgICAgICAgIGlmICh5ICE9PSB5ICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyB5O1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBFZChhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICB2YXIgZiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIE9nKGEsIGIsIGMsIGQsIGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBZKGYpO1xuICAgICAgICAgICAgICBpZiAoaCAhPT0gaCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gVWQoYSwgYiwgYywgZCwgZSwgZiwgaCkge1xuICAgICAgICAgICAgdmFyIGsgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBQZyhhLCBiLCBjLCBkLCBlLCBmLCBoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgICAgWShrKTtcbiAgICAgICAgICAgICAgaWYgKGwgIT09IGwgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGw7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIE1kKGEsIGIsIGMsIGQsIGUpIHtcbiAgICAgICAgICAgIHZhciBmID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgUmcoYSwgYiwgYywgZCwgZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIFkoZik7XG4gICAgICAgICAgICAgIGlmIChoICE9PSBoICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBoO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBYZChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSB7XG4gICAgICAgICAgICB2YXIgbCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFFnKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspO1xuICAgICAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgICBZKGwpO1xuICAgICAgICAgICAgICBpZiAobSAhPT0gbSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gdWUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbikge1xuICAgICAgICAgICAgdmFyIHEgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBUZyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICAgICAgWShxKTtcbiAgICAgICAgICAgICAgaWYgKHIgIT09IHIgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHI7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIE9jKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEpIHtcbiAgICAgICAgICAgIHZhciBCID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIFVnKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoQykge1xuICAgICAgICAgICAgICBZKEIpO1xuICAgICAgICAgICAgICBpZiAoQyAhPT0gQyArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgQztcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gbGUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcikge1xuICAgICAgICAgICAgdmFyIHAgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBWZyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgICAgWShwKTtcbiAgICAgICAgICAgICAgaWYgKHUgIT09IHUgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHU7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHNkKGEsIGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNnKGEsIGIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICAgICAgICBZKGMpO1xuICAgICAgICAgICAgICBpZiAoZCAhPT0gZCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gd2MoYSwgYiwgYywgZCwgZSkge1xuICAgICAgICAgICAgdmFyIGYgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gS2koYSwgYiwgYywgZCwgZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIFkoZik7XG4gICAgICAgICAgICAgIGlmIChoICE9PSBoICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBoO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBQYyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDLCBEKSB7XG4gICAgICAgICAgICB2YXIgRiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBXZyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDLCBEKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKEgpIHtcbiAgICAgICAgICAgICAgWShGKTtcbiAgICAgICAgICAgICAgaWYgKEggIT09IEggKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IEg7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIG1mKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pIHtcbiAgICAgICAgICAgIHZhciBuID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgWGcoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSk7XG4gICAgICAgICAgICB9IGNhdGNoIChxKSB7XG4gICAgICAgICAgICAgIFkobik7XG4gICAgICAgICAgICAgIGlmIChxICE9PSBxICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBxO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBjZChhLCBiLCBjLCBkLCBlLCBmLCBoKSB7XG4gICAgICAgICAgICB2YXIgayA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBZZyhhLCBiLCBjLCBkLCBlLCBmLCBoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgICAgWShrKTtcbiAgICAgICAgICAgICAgaWYgKGwgIT09IGwgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGw7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGplKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pIHtcbiAgICAgICAgICAgIHZhciBxID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgWmcoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbik7XG4gICAgICAgICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgICAgICAgIFkocSk7XG4gICAgICAgICAgICAgIGlmIChyICE9PSByICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyByO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBsZChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICB2YXIgaCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiAkZyhhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICAgICAgWShoKTtcbiAgICAgICAgICAgICAgaWYgKGsgIT09IGsgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGs7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEllKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgIHZhciBoID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYmgoYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgICAgIFkoaCk7XG4gICAgICAgICAgICAgIGlmIChrICE9PSBrICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBrO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB5ZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwKSB7XG4gICAgICAgICAgICB2YXIgdSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNoKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHApO1xuICAgICAgICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICAgICAgICBZKHUpO1xuICAgICAgICAgICAgICBpZiAoeSAhPT0geSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgeTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gemYoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQikge1xuICAgICAgICAgICAgdmFyIEMgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBkaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKEQpIHtcbiAgICAgICAgICAgICAgWShDKTtcbiAgICAgICAgICAgICAgaWYgKEQgIT09IEQgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IEQ7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGFlKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEpIHtcbiAgICAgICAgICAgIHZhciBCID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZWgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSk7XG4gICAgICAgICAgICB9IGNhdGNoIChDKSB7XG4gICAgICAgICAgICAgIFkoQik7XG4gICAgICAgICAgICAgIGlmIChDICE9PSBDICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBDO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiAkZChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5KSB7XG4gICAgICAgICAgICB2YXIgQSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZoKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoQikge1xuICAgICAgICAgICAgICBZKEEpO1xuICAgICAgICAgICAgICBpZiAoQiAhPT0gQiArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgQjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gYmUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSkge1xuICAgICAgICAgICAgdmFyIHkgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBnaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKEEpIHtcbiAgICAgICAgICAgICAgWSh5KTtcbiAgICAgICAgICAgICAgaWYgKEEgIT09IEEgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IEE7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEFmKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQsIEYpIHtcbiAgICAgICAgICAgIHZhciBIID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaGgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQiwgQywgRCwgRik7XG4gICAgICAgICAgICB9IGNhdGNoIChLKSB7XG4gICAgICAgICAgICAgIFkoSCk7XG4gICAgICAgICAgICAgIGlmIChLICE9PSBLICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBLO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB5ZihhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDKSB7XG4gICAgICAgICAgICB2YXIgRCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGloKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoRikge1xuICAgICAgICAgICAgICBZKEQpO1xuICAgICAgICAgICAgICBpZiAoRiAhPT0gRiArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgRjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24geGYoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQikge1xuICAgICAgICAgICAgdmFyIEMgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBqaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKEQpIHtcbiAgICAgICAgICAgICAgWShDKTtcbiAgICAgICAgICAgICAgaWYgKEQgIT09IEQgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IEQ7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEJmKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQsIEYpIHtcbiAgICAgICAgICAgIHZhciBIID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAga2goYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQiwgQywgRCwgRik7XG4gICAgICAgICAgICB9IGNhdGNoIChLKSB7XG4gICAgICAgICAgICAgIFkoSCk7XG4gICAgICAgICAgICAgIGlmIChLICE9PSBLICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBLO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBnZihhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKSB7XG4gICAgICAgICAgICB2YXIgcCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGxoKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpO1xuICAgICAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgICAgICBZKHApO1xuICAgICAgICAgICAgICBpZiAodSAhPT0gdSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgdTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24ga2YoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSkge1xuICAgICAgICAgICAgdmFyIG4gPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBtaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHEpIHtcbiAgICAgICAgICAgICAgWShuKTtcbiAgICAgICAgICAgICAgaWYgKHEgIT09IHEgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHE7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHZlKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpIHtcbiAgICAgICAgICAgIHZhciBwID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbmgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcik7XG4gICAgICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgICAgIFkocCk7XG4gICAgICAgICAgICAgIGlmICh1ICE9PSB1ICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyB1O1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBxZihhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1KSB7XG4gICAgICAgICAgICB2YXIgeSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIG9oKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoQSkge1xuICAgICAgICAgICAgICBZKHkpO1xuICAgICAgICAgICAgICBpZiAoQSAhPT0gQSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgQTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gd2YoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSkge1xuICAgICAgICAgICAgdmFyIG4gPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBxaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHEpIHtcbiAgICAgICAgICAgICAgWShuKTtcbiAgICAgICAgICAgICAgaWYgKHEgIT09IHEgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHE7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHZmKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpIHtcbiAgICAgICAgICAgIHZhciBtID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgICAgIFkobSk7XG4gICAgICAgICAgICAgIGlmIChuICE9PSBuICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBzYyhhLCBiLCBjLCBkLCBlLCBmLCBoKSB7XG4gICAgICAgICAgICB2YXIgayA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhaChhLCBiLCBjLCBkLCBlLCBmLCBoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgICAgWShrKTtcbiAgICAgICAgICAgICAgaWYgKGwgIT09IGwgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGw7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIE5kKGEsIGIsIGMsIGQsIGUpIHtcbiAgICAgICAgICAgIHZhciBmID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcGgoYSwgYiwgYywgZCwgZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIFkoZik7XG4gICAgICAgICAgICAgIGlmIChoICE9PSBoICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBoO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB3ZChhLCBiLCBjKSB7XG4gICAgICAgICAgICB2YXIgZCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBMaShhLCBiLCBjKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgWShkKTtcbiAgICAgICAgICAgICAgaWYgKGUgIT09IGUgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICAgIHJldHVybiAwbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gemUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCkge1xuICAgICAgICAgICAgdmFyIHUgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgICAgICAgWSh1KTtcbiAgICAgICAgICAgICAgaWYgKHkgIT09IHkgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHk7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEdlKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpIHtcbiAgICAgICAgICAgIHZhciBwID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdWgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcik7XG4gICAgICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgICAgIFkocCk7XG4gICAgICAgICAgICAgIGlmICh1ICE9PSB1ICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyB1O1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBYYyhhLCBiLCBjLCBkLCBlLCBmLCBoKSB7XG4gICAgICAgICAgICB2YXIgayA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiB2aChhLCBiLCBjLCBkLCBlLCBmLCBoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgICAgWShrKTtcbiAgICAgICAgICAgICAgaWYgKGwgIT09IGwgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGw7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGFkKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgIHZhciBoID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHdoKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaykge1xuICAgICAgICAgICAgICBZKGgpO1xuICAgICAgICAgICAgICBpZiAoayAhPT0gayArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaztcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gRGUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcikge1xuICAgICAgICAgICAgdmFyIHAgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB4aChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgICAgWShwKTtcbiAgICAgICAgICAgICAgaWYgKHUgIT09IHUgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHU7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGxmKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgIHZhciBoID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGgoYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgICAgIFkoaCk7XG4gICAgICAgICAgICAgIGlmIChrICE9PSBrICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBrO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBRZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuKSB7XG4gICAgICAgICAgICB2YXIgcSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHloKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pO1xuICAgICAgICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICAgICAgICBZKHEpO1xuICAgICAgICAgICAgICBpZiAociAhPT0gciArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgcjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gS2UoYSwgYiwgYywgZCwgZSwgZiwgaCwgaykge1xuICAgICAgICAgICAgdmFyIGwgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBBaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgICAgICAgWShsKTtcbiAgICAgICAgICAgICAgaWYgKG0gIT09IG0gKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IG07XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGFmKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspIHtcbiAgICAgICAgICAgIHZhciBsID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgQmgoYSwgYiwgYywgZCwgZSwgZiwgaCwgayk7XG4gICAgICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICAgIFkobCk7XG4gICAgICAgICAgICAgIGlmIChtICE9PSBtICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBtO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB0ZChhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICB2YXIgZSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBDaChhLCBiLCBjLCBkKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgICAgICAgWShlKTtcbiAgICAgICAgICAgICAgaWYgKGYgIT09IGYgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGY7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEhlKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pIHtcbiAgICAgICAgICAgIHZhciBuID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgRGgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSk7XG4gICAgICAgICAgICB9IGNhdGNoIChxKSB7XG4gICAgICAgICAgICAgIFkobik7XG4gICAgICAgICAgICAgIGlmIChxICE9PSBxICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBxO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBwZihhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKSB7XG4gICAgICAgICAgICB2YXIgbSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEVoKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwpO1xuICAgICAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgICAgICBZKG0pO1xuICAgICAgICAgICAgICBpZiAobiAhPT0gbiArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gRmUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCkge1xuICAgICAgICAgICAgdmFyIG0gPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBGaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICAgICAgWShtKTtcbiAgICAgICAgICAgICAgaWYgKG4gIT09IG4gKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IG47XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEFlKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pIHtcbiAgICAgICAgICAgIHZhciBuID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgR2goYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSk7XG4gICAgICAgICAgICB9IGNhdGNoIChxKSB7XG4gICAgICAgICAgICAgIFkobik7XG4gICAgICAgICAgICAgIGlmIChxICE9PSBxICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBxO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBmZihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICB2YXIgaCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEhoKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaykge1xuICAgICAgICAgICAgICBZKGgpO1xuICAgICAgICAgICAgICBpZiAoayAhPT0gayArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaztcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gaGUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSkge1xuICAgICAgICAgICAgdmFyIHIgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBJaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgICAgICAgWShyKTtcbiAgICAgICAgICAgICAgaWYgKHAgIT09IHAgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHA7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGhkKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspIHtcbiAgICAgICAgICAgIHZhciBsID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIEpoKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspO1xuICAgICAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgICBZKGwpO1xuICAgICAgICAgICAgICBpZiAobSAhPT0gbSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gbmUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSkge1xuICAgICAgICAgICAgdmFyIHkgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBNaShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKEEpIHtcbiAgICAgICAgICAgICAgWSh5KTtcbiAgICAgICAgICAgICAgaWYgKEEgIT09IEEgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IEE7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEJlKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHApIHtcbiAgICAgICAgICAgIHZhciB1ID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgS2goYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCk7XG4gICAgICAgICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgICAgICAgIFkodSk7XG4gICAgICAgICAgICAgIGlmICh5ICE9PSB5ICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyB5O1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB3ZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1KSB7XG4gICAgICAgICAgICB2YXIgeSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIExoKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoQSkge1xuICAgICAgICAgICAgICBZKHkpO1xuICAgICAgICAgICAgICBpZiAoQSAhPT0gQSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgQTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gSGQoYSwgYiwgYykge1xuICAgICAgICAgICAgdmFyIGQgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBNaChhLCBiLCBjKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgWShkKTtcbiAgICAgICAgICAgICAgaWYgKGUgIT09IGUgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHZjKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgIHZhciBlID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9oKGEsIGIsIGMsIGQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICAgICAgICBZKGUpO1xuICAgICAgICAgICAgICBpZiAoZiAhPT0gZiArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gcGMoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgdmFyIGUgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gUGgoYSwgYiwgYywgZCk7XG4gICAgICAgICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgICAgICAgIFkoZSk7XG4gICAgICAgICAgICAgIGlmIChmICE9PSBmICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBmO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBjZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtKSB7XG4gICAgICAgICAgICB2YXIgbiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFFoKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pO1xuICAgICAgICAgICAgfSBjYXRjaCAocSkge1xuICAgICAgICAgICAgICBZKG4pO1xuICAgICAgICAgICAgICBpZiAocSAhPT0gcSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgcTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gRWUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQiwgQywgRCwgRiwgSCwgSywgVmEsIFdhLCBYYSkge1xuICAgICAgICAgICAgdmFyIFFpID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgUmgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQiwgQywgRCwgRiwgSCwgSywgVmEsIFdhLCBYYSk7XG4gICAgICAgICAgICB9IGNhdGNoIChZYSkge1xuICAgICAgICAgICAgICBZKFFpKTtcbiAgICAgICAgICAgICAgaWYgKFlhICE9PSBZYSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgWWE7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uICRlKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgIHZhciBoID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgU2goYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgICAgIFkoaCk7XG4gICAgICAgICAgICAgIGlmIChrICE9PSBrICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBrO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBSYyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKSB7XG4gICAgICAgICAgICB2YXIgcCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBUaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgICAgWShwKTtcbiAgICAgICAgICAgICAgaWYgKHUgIT09IHUgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHU7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIE9kKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpIHtcbiAgICAgICAgICAgIHZhciBwID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgVWgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcik7XG4gICAgICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgICAgIFkocCk7XG4gICAgICAgICAgICAgIGlmICh1ICE9PSB1ICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyB1O1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBzZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDLCBELCBGKSB7XG4gICAgICAgICAgICB2YXIgSCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFZoKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQsIEYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoSykge1xuICAgICAgICAgICAgICBZKEgpO1xuICAgICAgICAgICAgICBpZiAoSyAhPT0gSyArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgSztcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gWWQoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcikge1xuICAgICAgICAgICAgdmFyIHAgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBXaChhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgICAgWShwKTtcbiAgICAgICAgICAgICAgaWYgKHUgIT09IHUgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHU7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGhmKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHApIHtcbiAgICAgICAgICAgIHZhciB1ID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgWGgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCk7XG4gICAgICAgICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgICAgICAgIFkodSk7XG4gICAgICAgICAgICAgIGlmICh5ICE9PSB5ICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyB5O1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiByZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBLCBCLCBDLCBEKSB7XG4gICAgICAgICAgICB2YXIgRiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFpoKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMsIEQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoSCkge1xuICAgICAgICAgICAgICBZKEYpO1xuICAgICAgICAgICAgICBpZiAoSCAhPT0gSCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgSDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gcGUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSkge1xuICAgICAgICAgICAgdmFyIEIgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhaShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByLCBwLCB1LCB5LCBBKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgICAgICAgICAgWShCKTtcbiAgICAgICAgICAgICAgaWYgKEMgIT09IEMgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IEM7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHFlKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHksIEEsIEIsIEMpIHtcbiAgICAgICAgICAgIHZhciBEID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgWWgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQiwgQyk7XG4gICAgICAgICAgICB9IGNhdGNoIChGKSB7XG4gICAgICAgICAgICAgIFkoRCk7XG4gICAgICAgICAgICAgIGlmIChGICE9PSBGICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBGO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBMZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSB7XG4gICAgICAgICAgICB2YXIgbCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGJpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspO1xuICAgICAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgICBZKGwpO1xuICAgICAgICAgICAgICBpZiAobSAhPT0gbSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24geGUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbikge1xuICAgICAgICAgICAgdmFyIHEgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBkaShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICAgICAgWShxKTtcbiAgICAgICAgICAgICAgaWYgKHIgIT09IHIgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHI7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIE1jKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pIHtcbiAgICAgICAgICAgIHZhciBxID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4pO1xuICAgICAgICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICAgICAgICBZKHEpO1xuICAgICAgICAgICAgICBpZiAociAhPT0gciArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgcjtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gUWMoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQiwgQywgRCkge1xuICAgICAgICAgICAgdmFyIEYgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZmkoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSwgQSwgQiwgQywgRCk7XG4gICAgICAgICAgICB9IGNhdGNoIChIKSB7XG4gICAgICAgICAgICAgIFkoRik7XG4gICAgICAgICAgICAgIGlmIChIICE9PSBIICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBIO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBTZChhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICB2YXIgZiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGdpKGEsIGIsIGMsIGQsIGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBZKGYpO1xuICAgICAgICAgICAgICBpZiAoaCAhPT0gaCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gZ2UoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSkge1xuICAgICAgICAgICAgdmFyIHIgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBBZyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgICAgICAgWShyKTtcbiAgICAgICAgICAgICAgaWYgKHAgIT09IHAgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHA7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIFBlKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0pIHtcbiAgICAgICAgICAgIHZhciBuID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaGkoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSk7XG4gICAgICAgICAgICB9IGNhdGNoIChxKSB7XG4gICAgICAgICAgICAgIFkobik7XG4gICAgICAgICAgICAgIGlmIChxICE9PSBxICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBxO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBNZShhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICB2YXIgZiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlpKGEsIGIsIGMsIGQsIGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBZKGYpO1xuICAgICAgICAgICAgICBpZiAoaCAhPT0gaCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gWWUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcikge1xuICAgICAgICAgICAgdmFyIHAgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBKaShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxLCByKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgICAgWShwKTtcbiAgICAgICAgICAgICAgaWYgKHUgIT09IHUgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHU7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHBkKGEsIGIsIGMsIGQsIGUpIHtcbiAgICAgICAgICAgIHZhciBmID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGppKGEsIGIsIGMsIGQsIGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBZKGYpO1xuICAgICAgICAgICAgICBpZiAoaCAhPT0gaCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gQWQoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgdmFyIGUgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gTmkoYSwgYiwgYywgZCk7XG4gICAgICAgICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgICAgICAgIFkoZSk7XG4gICAgICAgICAgICAgIGlmIChmICE9PSBmICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBmO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgICByZXR1cm4gMG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEplKGEsIGIsIGMsIGQsIGUsIGYsIGgpIHtcbiAgICAgICAgICAgIHZhciBrID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAga2koYSwgYiwgYywgZCwgZSwgZiwgaCk7XG4gICAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICAgIFkoayk7XG4gICAgICAgICAgICAgIGlmIChsICE9PSBsICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBsO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBxZChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICB2YXIgaCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBsaShhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICAgICAgWShoKTtcbiAgICAgICAgICAgICAgaWYgKGsgIT09IGsgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGs7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHVkKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgIHZhciBoID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1pKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaykge1xuICAgICAgICAgICAgICBZKGgpO1xuICAgICAgICAgICAgICBpZiAoayAhPT0gayArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaztcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gU2UoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCkge1xuICAgICAgICAgICAgdmFyIG0gPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBuaShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICAgICAgWShtKTtcbiAgICAgICAgICAgICAgaWYgKG4gIT09IG4gKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IG47XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIExkKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgIHZhciBlID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgTmgoYSwgYiwgYywgZCk7XG4gICAgICAgICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgICAgICAgIFkoZSk7XG4gICAgICAgICAgICAgIGlmIChmICE9PSBmICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBmO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBaYyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKSB7XG4gICAgICAgICAgICB2YXIgbCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBvaShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgICAgICAgWShsKTtcbiAgICAgICAgICAgICAgaWYgKG0gIT09IG0gKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IG07XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEVjKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgIHZhciBoID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHBpKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaykge1xuICAgICAgICAgICAgICBZKGgpO1xuICAgICAgICAgICAgICBpZiAoayAhPT0gayArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaztcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gZmQoYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgICAgICAgdmFyIGggPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gcWkoYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgICAgIFkoaCk7XG4gICAgICAgICAgICAgIGlmIChrICE9PSBrICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBrO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBTYyhhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSB7XG4gICAgICAgICAgICB2YXIgciA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiByaShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgICAgICAgWShyKTtcbiAgICAgICAgICAgICAgaWYgKHAgIT09IHAgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHA7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGJkKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspIHtcbiAgICAgICAgICAgIHZhciBsID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGspO1xuICAgICAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgICBZKGwpO1xuICAgICAgICAgICAgICBpZiAobSAhPT0gbSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gVmMoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbikge1xuICAgICAgICAgICAgdmFyIHEgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gdGkoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbik7XG4gICAgICAgICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgICAgICAgIFkocSk7XG4gICAgICAgICAgICAgIGlmIChyICE9PSByICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyByO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBnZChhLCBiLCBjLCBkLCBlLCBmLCBoKSB7XG4gICAgICAgICAgICB2YXIgayA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiB1aShhLCBiLCBjLCBkLCBlLCBmLCBoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgICAgWShrKTtcbiAgICAgICAgICAgICAgaWYgKGwgIT09IGwgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGw7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIFVjKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpIHtcbiAgICAgICAgICAgIHZhciBwID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZpKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpO1xuICAgICAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgICAgICBZKHApO1xuICAgICAgICAgICAgICBpZiAodSAhPT0gdSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgdTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gb2QoYSwgYiwgYywgZCwgZSwgZiwgaCkge1xuICAgICAgICAgICAgdmFyIGsgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gd2koYSwgYiwgYywgZCwgZSwgZiwgaCk7XG4gICAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICAgIFkoayk7XG4gICAgICAgICAgICAgIGlmIChsICE9PSBsICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBsO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiByZChhLCBiLCBjLCBkLCBlLCBmLCBoKSB7XG4gICAgICAgICAgICB2YXIgayA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiB4aShhLCBiLCBjLCBkLCBlLCBmLCBoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgICAgWShrKTtcbiAgICAgICAgICAgICAgaWYgKGwgIT09IGwgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGw7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEJkKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHZhciBkID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHlpKGEsIGIsIGMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBZKGQpO1xuICAgICAgICAgICAgICBpZiAoZSAhPT0gZSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIDBuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBuZChhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICB2YXIgZSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiB6aShhLCBiLCBjLCBkKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgICAgICAgWShlKTtcbiAgICAgICAgICAgICAgaWYgKGYgIT09IGYgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGY7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEdkKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgIHZhciBlID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgQmkoYSwgYiwgYywgZCk7XG4gICAgICAgICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgICAgICAgIFkoZSk7XG4gICAgICAgICAgICAgIGlmIChmICE9PSBmICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBmO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBDYyhhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICB2YXIgZSA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBBaShhLCBiLCBjLCBkKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgICAgICAgWShlKTtcbiAgICAgICAgICAgICAgaWYgKGYgIT09IGYgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGY7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHRmKGEsIGIsIGMsIGQsIGUpIHtcbiAgICAgICAgICAgIHZhciBmID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgQ2koYSwgYiwgYywgZCwgZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIFkoZik7XG4gICAgICAgICAgICAgIGlmIChoICE9PSBoICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBoO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBxYyhhLCBiLCBjLCBkLCBlKSB7XG4gICAgICAgICAgICB2YXIgZiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBEaShhLCBiLCBjLCBkLCBlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgWShmKTtcbiAgICAgICAgICAgICAgaWYgKGggIT09IGggKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGg7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHJjKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgIHZhciBoID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIEVpKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaykge1xuICAgICAgICAgICAgICBZKGgpO1xuICAgICAgICAgICAgICBpZiAoayAhPT0gayArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgaztcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gVGUoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSkge1xuICAgICAgICAgICAgdmFyIHIgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBGaShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgICAgICAgWShyKTtcbiAgICAgICAgICAgICAgaWYgKHAgIT09IHAgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IHA7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGJmKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIpIHtcbiAgICAgICAgICAgIHZhciBwID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgR2koYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgcik7XG4gICAgICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgICAgIFkocCk7XG4gICAgICAgICAgICAgIGlmICh1ICE9PSB1ICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyB1O1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB0ZShhLCBiLCBjLCBkLCBlLCBmLCBoLCBrLCBsLCBtLCBuLCBxKSB7XG4gICAgICAgICAgICB2YXIgciA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEVnKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEpO1xuICAgICAgICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICAgICAgICBZKHIpO1xuICAgICAgICAgICAgICBpZiAocCAhPT0gcCArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgcDtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gJGMoYSwgYiwgYywgZCwgZSkge1xuICAgICAgICAgICAgdmFyIGYgPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gSGkoYSwgYiwgYywgZCwgZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIFkoZik7XG4gICAgICAgICAgICAgIGlmIChoICE9PSBoICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBoO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB2ZChhKSB7XG4gICAgICAgICAgICB2YXIgYiA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBlZyhhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgWShiKTtcbiAgICAgICAgICAgICAgaWYgKGMgIT09IGMgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGM7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICAgIHJldHVybiAwbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gV2MoYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgICAgICAgdmFyIGggPSBaKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZGcoYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgICAgIFkoaCk7XG4gICAgICAgICAgICAgIGlmIChrICE9PSBrICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBrO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBHYyhhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICB2YXIgaCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBjaShhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICAgICAgWShoKTtcbiAgICAgICAgICAgICAgaWYgKGsgIT09IGsgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGs7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIG9lKGEsIGIsIGMsIGQsIGUsIGYsIGgsIGssIGwsIG0sIG4sIHEsIHIsIHAsIHUsIHkpIHtcbiAgICAgICAgICAgIHZhciBBID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgJGgoYSwgYiwgYywgZCwgZSwgZiwgaCwgaywgbCwgbSwgbiwgcSwgciwgcCwgdSwgeSk7XG4gICAgICAgICAgICB9IGNhdGNoIChCKSB7XG4gICAgICAgICAgICAgIFkoQSk7XG4gICAgICAgICAgICAgIGlmIChCICE9PSBCICsgMClcbiAgICAgICAgICAgICAgICB0aHJvdyBCO1xuICAgICAgICAgICAgICBYKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB1YyhhLCBiLCBjKSB7XG4gICAgICAgICAgICB2YXIgZCA9IFooKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBxZyhhLCBiLCBjKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgWShkKTtcbiAgICAgICAgICAgICAgaWYgKGUgIT09IGUgKyAwKVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgIFgoMSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIG9jKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHZhciBkID0gWigpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNnKGEsIGIsIGMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBZKGQpO1xuICAgICAgICAgICAgICBpZiAoZSAhPT0gZSArIDApXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgWCgxLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gRGYoKSB7XG4gICAgICAgICAgICB2YXIgYSA9IFU7XG4gICAgICAgICAgICBhID0gT2JqZWN0LmFzc2lnbih7fSwgYSk7XG4gICAgICAgICAgICB2YXIgYiA9IChjKSA9PiAoZCkgPT4gYyhkKSA+Pj4gMDtcbiAgICAgICAgICAgIGEuRmQgPSBiKGEuRmQpO1xuICAgICAgICAgICAgYS5oZSA9IGIoYS5oZSk7XG4gICAgICAgICAgICBhLm5lID0gYihhLm5lKTtcbiAgICAgICAgICAgIGEub2UgPSAoKGMpID0+ICgpID0+IGMoKSA+Pj4gMCkoYS5vZSk7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZy5zdGFja1NhdmUgPSAoKSA9PiBaKCk7XG4gICAgICAgICAgZy5zdGFja1Jlc3RvcmUgPSAoYSkgPT4gWShhKTtcbiAgICAgICAgICBnLnN0YWNrQWxsb2MgPSAoYSkgPT4gRWYoYSk7XG4gICAgICAgICAgZy5VVEY4VG9TdHJpbmcgPSBKO1xuICAgICAgICAgIGcuc3RyaW5nVG9VVEY4ID0gKGEsIGIsIGMpID0+IE0oYSwgRSwgYiwgYyk7XG4gICAgICAgICAgZy5sZW5ndGhCeXRlc1VURjggPSBiYjtcbiAgICAgICAgICB2YXIgT2k7XG4gICAgICAgICAgRmEgPSBmdW5jdGlvbiBQaSgpIHtcbiAgICAgICAgICAgIE9pIHx8IFJpKCk7XG4gICAgICAgICAgICBPaSB8fCAoRmEgPSBQaSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBmdW5jdGlvbiBSaSgpIHtcbiAgICAgICAgICAgIGlmICghKDAgPCBEYSkpIHtcbiAgICAgICAgICAgICAgaWYgKGcucHJlUnVuKVxuICAgICAgICAgICAgICAgIGZvciAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBnLnByZVJ1biAmJiAoZy5wcmVSdW4gPSBbZy5wcmVSdW5dKTsgZy5wcmVSdW4ubGVuZ3RoOyApIHtcbiAgICAgICAgICAgICAgICAgIHZhciBhID0gZy5wcmVSdW4uc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIEFhLnVuc2hpZnQoYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKDsgMCA8IEFhLmxlbmd0aDsgKVxuICAgICAgICAgICAgICAgIEFhLnNoaWZ0KCkoZyk7XG4gICAgICAgICAgICAgIGlmICghKDAgPCBEYSB8fCBPaSB8fCAoT2kgPSB0cnVlLCBnLmNhbGxlZFJ1biA9IHRydWUsIHgpKSkge1xuICAgICAgICAgICAgICAgIGZvciAoOyAwIDwgQmEubGVuZ3RoOyApXG4gICAgICAgICAgICAgICAgICBCYS5zaGlmdCgpKGcpO1xuICAgICAgICAgICAgICAgIGZvciAoYWEoZyk7IDAgPCBDYS5sZW5ndGg7IClcbiAgICAgICAgICAgICAgICAgIENhLnNoaWZ0KCkoZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgUmkoKTtcbiAgICAgICAgICByZXR1cm4gcmVhZHlQcm9taXNlO1xuICAgICAgICB9O1xuICAgICAgfSkoKTtcbiAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKVxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG9ydFdhc207XG4gICAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lW1wiYW1kXCJdKVxuICAgICAgICBkZWZpbmUoW10sICgpID0+IG9ydFdhc20pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gbm9kZWpzLWlnbm9yZTp3b3JrZXJfdGhyZWFkc1xuICB2YXIgcmVxdWlyZV93b3JrZXJfdGhyZWFkcyA9IF9fY29tbW9uSlMoe1xuICAgIFwibm9kZWpzLWlnbm9yZTp3b3JrZXJfdGhyZWFkc1wiKCkge1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gbm9kZWpzLWlnbm9yZTpwZXJmX2hvb2tzXG4gIHZhciByZXF1aXJlX3BlcmZfaG9va3MgPSBfX2NvbW1vbkpTKHtcbiAgICBcIm5vZGVqcy1pZ25vcmU6cGVyZl9ob29rc1wiKCkge1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gbm9kZWpzLWlnbm9yZTpvc1xuICB2YXIgb3NfZXhwb3J0cyA9IHt9O1xuICBfX2V4cG9ydChvc19leHBvcnRzLCB7XG4gICAgY3B1czogKCkgPT4gY3B1c1xuICB9KTtcbiAgdmFyIGNwdXM7XG4gIHZhciBpbml0X29zID0gX19lc20oe1xuICAgIFwibm9kZWpzLWlnbm9yZTpvc1wiKCkge1xuICAgICAgY3B1cyA9IHZvaWQgMDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9iaW5kaW5nL29ydC13YXNtLXNpbWQtdGhyZWFkZWQuanNlcC5qc1xuICB2YXIgcmVxdWlyZV9vcnRfd2FzbV9zaW1kX3RocmVhZGVkX2pzZXAgPSBfX2NvbW1vbkpTKHtcbiAgICBcIndlYi9saWIvd2FzbS9iaW5kaW5nL29ydC13YXNtLXNpbWQtdGhyZWFkZWQuanNlcC5qc1wiKGV4cG9ydHMsIG1vZHVsZSkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICB2YXIgb3J0V2FzbVRocmVhZGVkID0gKCgpID0+IHtcbiAgICAgICAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdm9pZCAwO1xuICAgICAgICBpZiAodHlwZW9mIF9fZmlsZW5hbWUgIT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgX3NjcmlwdERpciA9IF9zY3JpcHREaXIgfHwgX19maWxlbmFtZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG1vZHVsZUFyZyA9IHt9KSB7XG4gICAgICAgICAgZnVuY3Rpb24gZCgpIHtcbiAgICAgICAgICAgIGwuYnVmZmVyICE9IHAuYnVmZmVyICYmIHQoKTtcbiAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB2KCkge1xuICAgICAgICAgICAgbC5idWZmZXIgIT0gcC5idWZmZXIgJiYgdCgpO1xuICAgICAgICAgICAgcmV0dXJuIGFhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB6KCkge1xuICAgICAgICAgICAgbC5idWZmZXIgIT0gcC5idWZmZXIgJiYgdCgpO1xuICAgICAgICAgICAgcmV0dXJuIGJhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBBKCkge1xuICAgICAgICAgICAgbC5idWZmZXIgIT0gcC5idWZmZXIgJiYgdCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBkYSgpIHtcbiAgICAgICAgICAgIGwuYnVmZmVyICE9IHAuYnVmZmVyICYmIHQoKTtcbiAgICAgICAgICAgIHJldHVybiBlYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIEIgPSBtb2R1bGVBcmcsIGZhLCBDO1xuICAgICAgICAgIEIucmVhZHkgPSBuZXcgUHJvbWlzZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgZmEgPSBhO1xuICAgICAgICAgICAgQyA9IGI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgICAgQi5qc2VwSW5pdCA9IChhLCBiLCBjLCBlLCBmLCBoLCBrLCBxKSA9PiB7XG4gICAgICAgICAgICBCLlFiID0gYTtcbiAgICAgICAgICAgIEIud2IgPSBiO1xuICAgICAgICAgICAgQi55YiA9IGM7XG4gICAgICAgICAgICBCLmpiID0gZTtcbiAgICAgICAgICAgIEIueGIgPSBmO1xuICAgICAgICAgICAgQi5FYSA9IGg7XG4gICAgICAgICAgICBCLnpiID0gaztcbiAgICAgICAgICAgIEIuQWIgPSBxO1xuICAgICAgICAgICAgYiA9IChuLCBtLCByKSA9PiAoLi4udykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB4ID0gRCwgZyA9IG0/LigpO1xuICAgICAgICAgICAgICB3ID0gbiguLi53KTtcbiAgICAgICAgICAgICAgY29uc3QgdSA9IG0/LigpO1xuICAgICAgICAgICAgICBnICE9PSB1ICYmIChuID0gdSwgcihnKSwgbSA9IHIgPSBudWxsKTtcbiAgICAgICAgICAgICAgcmV0dXJuIEQgIT0geCA/IGhhKCkgOiB3O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGMgPSAobikgPT4gYXN5bmMgKC4uLm0pID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoQi5iYilcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiU2Vzc2lvbiBhbHJlYWR5IHN0YXJ0ZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IEIuYmIgPSB7IEZiOiBtWzBdLCBlcnJvcnM6IFtdIH0sIHcgPSBhd2FpdCBuKC4uLm0pO1xuICAgICAgICAgICAgICAgIGlmIChCLmJiICE9PSByKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJTZXNzaW9uIG1pc21hdGNoXCIpO1xuICAgICAgICAgICAgICAgIGEuZmx1c2goKTtcbiAgICAgICAgICAgICAgICBjb25zdCB4ID0gci5lcnJvcnM7XG4gICAgICAgICAgICAgICAgaWYgKDAgPCB4Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgbGV0IGcgPSBhd2FpdCBQcm9taXNlLmFsbCh4KTtcbiAgICAgICAgICAgICAgICAgIGcgPSBnLmZpbHRlcigodSkgPT4gdSk7XG4gICAgICAgICAgICAgICAgICBpZiAoMCA8IGcubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihnLmpvaW4oXCJcXG5cIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdztcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBCLmJiID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIEIuX09ydFJ1biA9IGMoYihCLl9PcnRSdW4sICgpID0+IEIuX09ydFJ1biwgKG4pID0+IEIuX09ydFJ1biA9IG4pKTtcbiAgICAgICAgICAgIEIuX09ydFJ1bldpdGhCaW5kaW5nID0gYyhiKEIuX09ydFJ1bldpdGhCaW5kaW5nLCAoKSA9PiBCLl9PcnRSdW5XaXRoQmluZGluZywgKG4pID0+IEIuX09ydFJ1bldpdGhCaW5kaW5nID0gbikpO1xuICAgICAgICAgICAgQi5fT3J0QmluZElucHV0ID0gYihCLl9PcnRCaW5kSW5wdXQsICgpID0+IEIuX09ydEJpbmRJbnB1dCwgKG4pID0+IEIuX09ydEJpbmRJbnB1dCA9IG4pO1xuICAgICAgICAgICAgQi5qc2VwUmVnaXN0ZXJCdWZmZXIgPSAobiwgbSwgciwgdykgPT4gYS5yZWdpc3RlckJ1ZmZlcihuLCBtLCByLCB3KTtcbiAgICAgICAgICAgIEIuanNlcFVucmVnaXN0ZXJCdWZmZXJzID0gKG4pID0+IHtcbiAgICAgICAgICAgICAgYS51bnJlZ2lzdGVyQnVmZmVycyhuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBCLmpzZXBHZXRCdWZmZXIgPSAobikgPT4gYS5nZXRCdWZmZXIobik7XG4gICAgICAgICAgICBCLmpzZXBDcmVhdGVEb3dubG9hZGVyID0gKG4sIG0sIHIpID0+IGEuY3JlYXRlRG93bmxvYWRlcihuLCBtLCByKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBpYSA9IE9iamVjdC5hc3NpZ24oe30sIEIpLCBqYSA9IFwiLi90aGlzLnByb2dyYW1cIiwgRSA9IChhLCBiKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBiO1xuICAgICAgICAgIH0sIGthID0gXCJvYmplY3RcIiA9PSB0eXBlb2Ygd2luZG93LCBGID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBpbXBvcnRTY3JpcHRzLCBHID0gXCJvYmplY3RcIiA9PSB0eXBlb2YgcHJvY2VzcyAmJiBcIm9iamVjdFwiID09IHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zICYmIFwic3RyaW5nXCIgPT0gdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSwgSCA9IEIuRU5WSVJPTk1FTlRfSVNfUFRIUkVBRCB8fCBmYWxzZSwgSSA9IFwiXCI7XG4gICAgICAgICAgZnVuY3Rpb24gbGEoYSkge1xuICAgICAgICAgICAgcmV0dXJuIEIubG9jYXRlRmlsZSA/IEIubG9jYXRlRmlsZShhLCBJKSA6IEkgKyBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgbWEsIEosIG5hO1xuICAgICAgICAgIGlmIChHKSB7XG4gICAgICAgICAgICB2YXIgZnMgPSAoaW5pdF9mcygpLCBfX3RvQ29tbW9uSlMoZnNfZXhwb3J0cykpLCBvYSA9IChpbml0X3BhdGgoKSwgX190b0NvbW1vbkpTKHBhdGhfZXhwb3J0cykpO1xuICAgICAgICAgICAgSSA9IEYgPyBvYS5kaXJuYW1lKEkpICsgXCIvXCIgOiBfX2Rpcm5hbWUgKyBcIi9cIjtcbiAgICAgICAgICAgIG1hID0gKGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgYiA9IGIuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikgPyBuZXcgVVJMKGIpIDogb2Eubm9ybWFsaXplKGIpO1xuICAgICAgICAgICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGIsIGMgPyB2b2lkIDAgOiBcInV0ZjhcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbmEgPSAoYikgPT4ge1xuICAgICAgICAgICAgICBiID0gbWEoYiwgdHJ1ZSk7XG4gICAgICAgICAgICAgIGIuYnVmZmVyIHx8IChiID0gbmV3IFVpbnQ4QXJyYXkoYikpO1xuICAgICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBKID0gKGIsIGMsIGUsIGYgPSB0cnVlKSA9PiB7XG4gICAgICAgICAgICAgIGIgPSBiLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpID8gbmV3IFVSTChiKSA6IG9hLm5vcm1hbGl6ZShiKTtcbiAgICAgICAgICAgICAgZnMucmVhZEZpbGUoYiwgZiA/IHZvaWQgMCA6IFwidXRmOFwiLCAoaCwgaykgPT4ge1xuICAgICAgICAgICAgICAgIGggPyBlKGgpIDogYyhmID8gay5idWZmZXIgOiBrKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgIUIudGhpc1Byb2dyYW0gJiYgMSA8IHByb2Nlc3MuYXJndi5sZW5ndGggJiYgKGphID0gcHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpKTtcbiAgICAgICAgICAgIHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgICAgICAgICAgIEUgPSAoYiwgYykgPT4ge1xuICAgICAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gYjtcbiAgICAgICAgICAgICAgdGhyb3cgYztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBCLmluc3BlY3QgPSAoKSA9PiBcIltFbXNjcmlwdGVuIE1vZHVsZSBvYmplY3RdXCI7XG4gICAgICAgICAgICBsZXQgYTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGEgPSByZXF1aXJlX3dvcmtlcl90aHJlYWRzKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChiKSB7XG4gICAgICAgICAgICAgIHRocm93IGNvbnNvbGUuZXJyb3IoJ1RoZSBcIndvcmtlcl90aHJlYWRzXCIgbW9kdWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBub2RlLmpzIGJ1aWxkIC0gcGVyaGFwcyBhIG5ld2VyIHZlcnNpb24gaXMgbmVlZGVkPycpLCBiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2xvYmFsLldvcmtlciA9IGEuV29ya2VyO1xuICAgICAgICAgIH0gZWxzZSBpZiAoa2EgfHwgRilcbiAgICAgICAgICAgIEYgPyBJID0gc2VsZi5sb2NhdGlvbi5ocmVmIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiAoSSA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSwgdHlwZW9mIF9zY3JpcHREaXIgIT09IFwidW5kZWZpbmVkXCIgJiYgX3NjcmlwdERpciAmJiAoSSA9IF9zY3JpcHREaXIpLCAwICE9PSBJLmluZGV4T2YoXCJibG9iOlwiKSA/IEkgPSBJLnN1YnN0cigwLCBJLnJlcGxhY2UoL1s/I10uKi8sIFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogSSA9IFwiXCIsIEcgfHwgKG1hID0gKGEpID0+IHtcbiAgICAgICAgICAgICAgdmFyIGIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgYi5vcGVuKFwiR0VUXCIsIGEsIGZhbHNlKTtcbiAgICAgICAgICAgICAgYi5zZW5kKG51bGwpO1xuICAgICAgICAgICAgICByZXR1cm4gYi5yZXNwb25zZVRleHQ7XG4gICAgICAgICAgICB9LCBGICYmIChuYSA9IChhKSA9PiB7XG4gICAgICAgICAgICAgIHZhciBiID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgIGIub3BlbihcIkdFVFwiLCBhLCBmYWxzZSk7XG4gICAgICAgICAgICAgIGIucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuICAgICAgICAgICAgICBiLnNlbmQobnVsbCk7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiLnJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0pLCBKID0gKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgdmFyIGUgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgZS5vcGVuKFwiR0VUXCIsIGEsIHRydWUpO1xuICAgICAgICAgICAgICBlLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcbiAgICAgICAgICAgICAgZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgMjAwID09IGUuc3RhdHVzIHx8IDAgPT0gZS5zdGF0dXMgJiYgZS5yZXNwb25zZSA/IGIoZS5yZXNwb25zZSkgOiBjKCk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGUub25lcnJvciA9IGM7XG4gICAgICAgICAgICAgIGUuc2VuZChudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIEcgJiYgXCJ1bmRlZmluZWRcIiA9PSB0eXBlb2YgcGVyZm9ybWFuY2UgJiYgKGdsb2JhbC5wZXJmb3JtYW5jZSA9IHJlcXVpcmVfcGVyZl9ob29rcygpLnBlcmZvcm1hbmNlKTtcbiAgICAgICAgICB2YXIgcGEgPSBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLCBxYSA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbiAgICAgICAgICBHICYmIChwYSA9ICguLi5hKSA9PiBmcy53cml0ZVN5bmMoMSwgYS5qb2luKFwiIFwiKSArIFwiXFxuXCIpLCBxYSA9ICguLi5hKSA9PiBmcy53cml0ZVN5bmMoMiwgYS5qb2luKFwiIFwiKSArIFwiXFxuXCIpKTtcbiAgICAgICAgICB2YXIgcmEgPSBCLnByaW50IHx8IHBhLCBLID0gQi5wcmludEVyciB8fCBxYTtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKEIsIGlhKTtcbiAgICAgICAgICBpYSA9IG51bGw7XG4gICAgICAgICAgQi50aGlzUHJvZ3JhbSAmJiAoamEgPSBCLnRoaXNQcm9ncmFtKTtcbiAgICAgICAgICBCLnF1aXQgJiYgKEUgPSBCLnF1aXQpO1xuICAgICAgICAgIHZhciBMO1xuICAgICAgICAgIEIud2FzbUJpbmFyeSAmJiAoTCA9IEIud2FzbUJpbmFyeSk7XG4gICAgICAgICAgdmFyIG5vRXhpdFJ1bnRpbWUgPSBCLm5vRXhpdFJ1bnRpbWUgfHwgdHJ1ZTtcbiAgICAgICAgICBcIm9iamVjdFwiICE9IHR5cGVvZiBXZWJBc3NlbWJseSAmJiBNKFwibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZFwiKTtcbiAgICAgICAgICB2YXIgbCwgTiwgc2EsIFAgPSBmYWxzZSwgUSwgcCwgYWEsIGJhLCBjYSwgZWE7XG4gICAgICAgICAgZnVuY3Rpb24gdCgpIHtcbiAgICAgICAgICAgIHZhciBhID0gbC5idWZmZXI7XG4gICAgICAgICAgICBCLkhFQVA4ID0gcCA9IG5ldyBJbnQ4QXJyYXkoYSk7XG4gICAgICAgICAgICBCLkhFQVAxNiA9IG5ldyBJbnQxNkFycmF5KGEpO1xuICAgICAgICAgICAgQi5IRUFQMzIgPSBiYSA9IG5ldyBJbnQzMkFycmF5KGEpO1xuICAgICAgICAgICAgQi5IRUFQVTggPSBhYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICAgICAgICAgICAgQi5IRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KGEpO1xuICAgICAgICAgICAgQi5IRUFQVTMyID0gY2EgPSBuZXcgVWludDMyQXJyYXkoYSk7XG4gICAgICAgICAgICBCLkhFQVBGMzIgPSBuZXcgRmxvYXQzMkFycmF5KGEpO1xuICAgICAgICAgICAgQi5IRUFQRjY0ID0gZWEgPSBuZXcgRmxvYXQ2NEFycmF5KGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgdGEgPSBCLklOSVRJQUxfTUVNT1JZIHx8IDE2Nzc3MjE2O1xuICAgICAgICAgIDUyNDI4ODAgPD0gdGEgfHwgTShcIklOSVRJQUxfTUVNT1JZIHNob3VsZCBiZSBsYXJnZXIgdGhhbiBTVEFDS19TSVpFLCB3YXMgXCIgKyB0YSArIFwiISAoU1RBQ0tfU0laRT01MjQyODgwKVwiKTtcbiAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgIGwgPSBCLndhc21NZW1vcnk7XG4gICAgICAgICAgZWxzZSBpZiAoQi53YXNtTWVtb3J5KVxuICAgICAgICAgICAgbCA9IEIud2FzbU1lbW9yeTtcbiAgICAgICAgICBlbHNlIGlmIChsID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7IGluaXRpYWw6IHRhIC8gNjU1MzYsIG1heGltdW06IDY1NTM2LCBzaGFyZWQ6IHRydWUgfSksICEobC5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcikpXG4gICAgICAgICAgICB0aHJvdyBLKFwicmVxdWVzdGVkIGEgc2hhcmVkIFdlYkFzc2VtYmx5Lk1lbW9yeSBidXQgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyBub3QgYSBTaGFyZWRBcnJheUJ1ZmZlciwgaW5kaWNhdGluZyB0aGF0IHdoaWxlIHRoZSBicm93c2VyIGhhcyBTaGFyZWRBcnJheUJ1ZmZlciBpdCBkb2VzIG5vdCBoYXZlIFdlYkFzc2VtYmx5IHRocmVhZHMgc3VwcG9ydCAtIHlvdSBtYXkgbmVlZCB0byBzZXQgYSBmbGFnXCIpLCBHICYmIEsoXCIob24gbm9kZSB5b3UgbWF5IG5lZWQ6IC0tZXhwZXJpbWVudGFsLXdhc20tdGhyZWFkcyAtLWV4cGVyaW1lbnRhbC13YXNtLWJ1bGstbWVtb3J5IGFuZC9vciByZWNlbnQgdmVyc2lvbilcIiksIEVycm9yKFwiYmFkIG1lbW9yeVwiKTtcbiAgICAgICAgICB0KCk7XG4gICAgICAgICAgdGEgPSBsLmJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgICAgICAgIHZhciB1YSA9IFtdLCB2YSA9IFtdLCB3YSA9IFtdLCB4YSA9IDA7XG4gICAgICAgICAgZnVuY3Rpb24geWEoKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9FeGl0UnVudGltZSB8fCAwIDwgeGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBSID0gMCwgemEgPSBudWxsLCBTID0gbnVsbDtcbiAgICAgICAgICBmdW5jdGlvbiBBYSgpIHtcbiAgICAgICAgICAgIFIrKztcbiAgICAgICAgICAgIEIubW9uaXRvclJ1bkRlcGVuZGVuY2llcyAmJiBCLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoUik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEJhKCkge1xuICAgICAgICAgICAgUi0tO1xuICAgICAgICAgICAgQi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzICYmIEIubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhSKTtcbiAgICAgICAgICAgIGlmICgwID09IFIgJiYgKG51bGwgIT09IHphICYmIChjbGVhckludGVydmFsKHphKSwgemEgPSBudWxsKSwgUykpIHtcbiAgICAgICAgICAgICAgdmFyIGEgPSBTO1xuICAgICAgICAgICAgICBTID0gbnVsbDtcbiAgICAgICAgICAgICAgYSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBNKGEpIHtcbiAgICAgICAgICAgIGlmIChCLm9uQWJvcnQpXG4gICAgICAgICAgICAgIEIub25BYm9ydChhKTtcbiAgICAgICAgICAgIGEgPSBcIkFib3J0ZWQoXCIgKyBhICsgXCIpXCI7XG4gICAgICAgICAgICBLKGEpO1xuICAgICAgICAgICAgUCA9IHRydWU7XG4gICAgICAgICAgICBRID0gMTtcbiAgICAgICAgICAgIGEgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGEgKyBcIi4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby5cIik7XG4gICAgICAgICAgICBDKGEpO1xuICAgICAgICAgICAgdGhyb3cgYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gQ2EoYSkge1xuICAgICAgICAgICAgcmV0dXJuIGEuc3RhcnRzV2l0aChcImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBUO1xuICAgICAgICAgIFQgPSBcIm9ydC13YXNtLXNpbWQtdGhyZWFkZWQud2FzbVwiO1xuICAgICAgICAgIENhKFQpIHx8IChUID0gbGEoVCkpO1xuICAgICAgICAgIGZ1bmN0aW9uIERhKGEpIHtcbiAgICAgICAgICAgIGlmIChhID09IFQgJiYgTClcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEwpO1xuICAgICAgICAgICAgaWYgKG5hKVxuICAgICAgICAgICAgICByZXR1cm4gbmEoYSk7XG4gICAgICAgICAgICB0aHJvdyBcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEVhKGEpIHtcbiAgICAgICAgICAgIGlmICghTCAmJiAoa2EgfHwgRikpIHtcbiAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZmV0Y2ggJiYgIWEuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoKGEsIHsgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIiB9KS50aGVuKChiKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWIub2spXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIgKyBhICsgXCInXCI7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYi5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IERhKGEpKTtcbiAgICAgICAgICAgICAgaWYgKEopXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChiLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgICBKKGEsIChlKSA9PiBiKG5ldyBVaW50OEFycmF5KGUpKSwgYyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBEYShhKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEZhKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHJldHVybiBFYShhKS50aGVuKChlKSA9PiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShlLCBiKSkudGhlbigoZSkgPT4gZSkudGhlbihjLCAoZSkgPT4ge1xuICAgICAgICAgICAgICBLKFwiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogXCIgKyBlKTtcbiAgICAgICAgICAgICAgTShlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBHYShhLCBiKSB7XG4gICAgICAgICAgICB2YXIgYyA9IFQ7XG4gICAgICAgICAgICByZXR1cm4gTCB8fCBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nIHx8IENhKGMpIHx8IGMuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikgfHwgRyB8fCBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGZldGNoID8gRmEoYywgYSwgYikgOiBmZXRjaChjLCB7IGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIgfSkudGhlbigoZSkgPT4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoZSwgYSkudGhlbihiLCBmdW5jdGlvbihmKSB7XG4gICAgICAgICAgICAgIEsoXCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogXCIgKyBmKTtcbiAgICAgICAgICAgICAgSyhcImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uXCIpO1xuICAgICAgICAgICAgICByZXR1cm4gRmEoYywgYSwgYik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBVLCBIYSA9IHtcbiAgICAgICAgICAgIDkwNjgyODogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkFic1wiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwNjg3OTogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIk5lZ1wiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwNjkzMDogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkZsb29yXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA2OTgzOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQ2VpbFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwNzAzNTogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlJlY2lwcm9jYWxcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MDcwOTM6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJTcXJ0XCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA3MTQ1OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiRXhwXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA3MTk2OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiRXJmXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA3MjQ3OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiU2lnbW9pZFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwNzMwMjogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkxvZ1wiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwNzM1MzogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlNpblwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwNzQwNDogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkNvc1wiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwNzQ1NTogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlRhblwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwNzUwNjogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkFzaW5cIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MDc1NTg6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXG4gICAgICAgICAgICAgICAgXCJBY29zXCIsXG4gICAgICAgICAgICAgICAgYSxcbiAgICAgICAgICAgICAgICB2b2lkIDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MDc2MTA6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJBdGFuXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA3NjYyOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiU2luaFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwNzcxNDogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkNvc2hcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MDc3NjY6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJBc2luaFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwNzgxOTogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkFjb3NoXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA3ODcyOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQXRhbmhcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MDc5MjU6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJUYW5oXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA3OTc3OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiTm90XCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA4MDI4OiAoYSwgYiwgYykgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQ2xpcFYxMFwiLCBhLCB7IG1pbjogYiwgbWF4OiBjIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwODEwMDogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkNsaXBcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MDgxNTI6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJFbHVcIiwgYSwgeyBhbHBoYTogYiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MDgyMTA6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJSZWx1XCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA4MjYyOiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiTGVha3lSZWx1XCIsIGEsIHsgYWxwaGE6IGIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA4MzI2OiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiVGhyZXNob2xkZWRSZWx1XCIsIGEsIHsgYWxwaGE6IGIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA4Mzk2OiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQ2FzdFwiLCBhLCB7IHRvOiBiIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwODQ1NDogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkFkZFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwODUwNTogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlN1YlwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwODU1NjogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIk11bFwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwODYwNzogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkRpdlwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwODY1ODogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlBvd1wiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwODcwOTogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkVxdWFsXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA4NzYyOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiR3JlYXRlclwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwODgxNzogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkdyZWF0ZXJPckVxdWFsXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA4ODc5OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiTGVzc1wiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwODkzMTogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkxlc3NPckVxdWFsXCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA4OTkwOiAoYSwgYiwgYywgZSwgZikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiUmVkdWNlTWVhblwiLCBhLCB7XG4gICAgICAgICAgICAgICAga2VlcERpbXM6ICEhYixcbiAgICAgICAgICAgICAgICBub29wV2l0aEVtcHR5QXhlczogISFjLFxuICAgICAgICAgICAgICAgIGF4ZXM6IGUgPyBBcnJheS5mcm9tKHooKS5zdWJhcnJheShmID4+PiAwLCBmICsgZSA+Pj4gMCkpIDogW11cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA5MTU0OiAoYSwgYiwgYywgZSwgZikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiUmVkdWNlTWF4XCIsIGEsIHsga2VlcERpbXM6ICEhYiwgbm9vcFdpdGhFbXB0eUF4ZXM6ICEhYywgYXhlczogZSA/IEFycmF5LmZyb20oeigpLnN1YmFycmF5KGYgPj4+IDAsIGYgKyBlID4+PiAwKSkgOiBbXSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MDkzMTc6IChhLCBiLCBjLCBlLCBmKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJSZWR1Y2VNaW5cIiwgYSwgeyBrZWVwRGltczogISFiLCBub29wV2l0aEVtcHR5QXhlczogISFjLCBheGVzOiBlID8gQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZiA+Pj4gMCwgZiArIGUgPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwOTQ4MDogKGEsIGIsIGMsIGUsIGYpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlJlZHVjZVByb2RcIiwgYSwgeyBrZWVwRGltczogISFiLCBub29wV2l0aEVtcHR5QXhlczogISFjLCBheGVzOiBlID8gQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZiA+Pj4gMCwgZiArIGUgPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwOTY0NDogKGEsIGIsIGMsIGUsIGYpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlJlZHVjZVN1bVwiLCBhLCB7XG4gICAgICAgICAgICAgICAga2VlcERpbXM6ICEhYixcbiAgICAgICAgICAgICAgICBub29wV2l0aEVtcHR5QXhlczogISFjLFxuICAgICAgICAgICAgICAgIGF4ZXM6IGUgPyBBcnJheS5mcm9tKHooKS5zdWJhcnJheShmID4+PiAwLCBmICsgZSA+Pj4gMCkpIDogW11cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTA5ODA3OiAoYSwgYiwgYywgZSwgZikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiUmVkdWNlTDFcIiwgYSwgeyBrZWVwRGltczogISFiLCBub29wV2l0aEVtcHR5QXhlczogISFjLCBheGVzOiBlID8gQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZiA+Pj4gMCwgZiArIGUgPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkwOTk2OTogKGEsIGIsIGMsIGUsIGYpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlJlZHVjZUwyXCIsIGEsIHsga2VlcERpbXM6ICEhYiwgbm9vcFdpdGhFbXB0eUF4ZXM6ICEhYywgYXhlczogZSA/IEFycmF5LmZyb20oeigpLnN1YmFycmF5KGYgPj4+IDAsIGYgKyBlID4+PiAwKSkgOiBbXSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTAxMzE6IChhLCBiLCBjLCBlLCBmKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJSZWR1Y2VMb2dTdW1cIiwgYSwgeyBrZWVwRGltczogISFiLCBub29wV2l0aEVtcHR5QXhlczogISFjLCBheGVzOiBlID8gQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZiA+Pj4gMCwgZiArIGUgPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkxMDI5NzogKGEsIGIsIGMsIGUsIGYpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlJlZHVjZVN1bVNxdWFyZVwiLCBhLCB7XG4gICAgICAgICAgICAgICAga2VlcERpbXM6ICEhYixcbiAgICAgICAgICAgICAgICBub29wV2l0aEVtcHR5QXhlczogISFjLFxuICAgICAgICAgICAgICAgIGF4ZXM6IGUgPyBBcnJheS5mcm9tKHooKS5zdWJhcnJheShmID4+PiAwLCBmICsgZSA+Pj4gMCkpIDogW11cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTEwNDY2OiAoYSwgYiwgYywgZSwgZikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiUmVkdWNlTG9nU3VtRXhwXCIsIGEsIHsga2VlcERpbXM6ICEhYiwgbm9vcFdpdGhFbXB0eUF4ZXM6ICEhYywgYXhlczogZSA/IEFycmF5LmZyb20oeigpLnN1YmFycmF5KGYgPj4+IDAsIGYgKyBlID4+PiAwKSkgOiBbXSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTA2MzU6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJXaGVyZVwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkxMDY4ODogKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlRyYW5zcG9zZVwiLCBhLCB7IHBlcm06IGIgPyBBcnJheS5mcm9tKHooKS5zdWJhcnJheShjID4+PiAwLCBjICsgYiA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTEwODAxOiAoYSwgYiwgYywgZSwgZiwgaCwgaywgcSwgbiwgbSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQ29udlwiLCBhLCB7IGZvcm1hdDogbiA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIsIGF1dG9fcGFkOiBiLCBkaWxhdGlvbnM6IFtjXSwgZ3JvdXA6IGUsIGtlcm5lbF9zaGFwZTogW2ZdLCBwYWRzOiBbaCwga10sIHN0cmlkZXM6IFtxXSwgd19pc19jb25zdDogKCkgPT4gISFkKClbbSA+Pj4gMF0gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTExMDI5OiAoYSwgYiwgYywgZSwgZiwgaCwgaywgcSwgbiwgbSwgciwgdywgeCwgZywgdSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQ29udlwiLCBhLCB7IGZvcm1hdDogZyA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIsIGF1dG9fcGFkOiBiLCBkaWxhdGlvbnM6IFtjLCBlXSwgZ3JvdXA6IGYsIGtlcm5lbF9zaGFwZTogW2gsIGtdLCBwYWRzOiBbcSwgbiwgbSwgcl0sIHN0cmlkZXM6IFt3LCB4XSwgd19pc19jb25zdDogKCkgPT4gISFkKClbdSA+Pj4gMF0gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTExMjg4OiAoYSwgYiwgYywgZSwgZiwgaCwgaywgcSwgbiwgbSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQ29udlwiLCBhLCB7IGZvcm1hdDogbiA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIsIGF1dG9fcGFkOiBiLCBkaWxhdGlvbnM6IFtjXSwgZ3JvdXA6IGUsIGtlcm5lbF9zaGFwZTogW2ZdLCBwYWRzOiBbaCwga10sIHN0cmlkZXM6IFtxXSwgd19pc19jb25zdDogKCkgPT4gISFkKClbbSA+Pj4gMF0gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTExNTE2OiAoYSwgYiwgYywgZSwgZiwgaCwgaywgcSwgbiwgbSwgciwgdywgeCwgZywgdSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQ29udlwiLCBhLCB7IGZvcm1hdDogZyA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIsIGF1dG9fcGFkOiBiLCBkaWxhdGlvbnM6IFtjLCBlXSwgZ3JvdXA6IGYsIGtlcm5lbF9zaGFwZTogW1xuICAgICAgICAgICAgICAgIGgsXG4gICAgICAgICAgICAgICAga1xuICAgICAgICAgICAgICBdLCBwYWRzOiBbcSwgbiwgbSwgcl0sIHN0cmlkZXM6IFt3LCB4XSwgd19pc19jb25zdDogKCkgPT4gISFkKClbdSA+Pj4gMF0gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTExNzc1OiAoYSwgYiwgYywgZSwgZiwgaCwgaywgcSwgbiwgbSwgciwgdywgeCwgZykgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQ29udlRyYW5zcG9zZVwiLCBhLCB7IGZvcm1hdDogbiA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIsIGF1dG9QYWQ6IGIsIGRpbGF0aW9uczogW2NdLCBncm91cDogZSwga2VybmVsX3NoYXBlOiBbZl0sIHBhZHM6IFtoLCBrXSwgc3RyaWRlczogW3FdLCB3SXNDb25zdDogKCkgPT4gISFkKClbbSA+Pj4gMF0sIG91dHB1dFBhZGRpbmc6IHIgPyBBcnJheS5mcm9tKHooKS5zdWJhcnJheSh3ID4+PiAwLCB3ICsgciA+Pj4gMCkpIDogW10sIG91dHB1dFNoYXBlOiB4ID8gQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZyA+Pj4gMCwgZyArIHggPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkxMjE1NTogKGEsIGIsIGMsIGUsIGYsIGgsIGssIHEsIG4sIG0sIHIsIHcsIHgpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkNvbnZUcmFuc3Bvc2VcIiwgYSwgeyBmb3JtYXQ6IHEgPyBcIk5IV0NcIiA6IFwiTkNIV1wiLCBhdXRvUGFkOiBiLCBkaWxhdGlvbnM6IEFycmF5LmZyb20oeigpLnN1YmFycmF5KGMgPj4+IDAsIGMgKyAyID4+PiAwKSksIGdyb3VwOiBlLCBrZXJuZWxTaGFwZTogQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZiA+Pj4gMCwgZiArIDIgPj4+IDApKSwgcGFkczogQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoaCA+Pj4gMCwgaCArIDQgPj4+IDApKSwgc3RyaWRlczogQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoayA+Pj4gMCwgayArIDIgPj4+IDApKSwgd0lzQ29uc3Q6ICgpID0+ICEhZCgpW24gPj4+IDBdLCBvdXRwdXRQYWRkaW5nOiAwIDwgbSA/IEFycmF5LmZyb20oeigpLnN1YmFycmF5KHIgPj4+IDAsIHIgKyBtID4+PiAwKSkgOiBbXSwgb3V0cHV0U2hhcGU6IDAgPCB3ID8gQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoeCA+Pj4gMCwgeCArIHcgPj4+IDApKSA6IFtdIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkxMjY3ODogKGEsIGIsIGMsIGUsIGYsIGgsIGssIHEsIG4sIG0sIHIsIHcsIHgsIGcpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkNvbnZUcmFuc3Bvc2VcIiwgYSwgeyBmb3JtYXQ6IG4gPyBcIk5IV0NcIiA6IFwiTkNIV1wiLCBhdXRvUGFkOiBiLCBkaWxhdGlvbnM6IFtjXSwgZ3JvdXA6IGUsIGtlcm5lbF9zaGFwZTogW2ZdLCBwYWRzOiBbaCwga10sIHN0cmlkZXM6IFtxXSwgd0lzQ29uc3Q6ICgpID0+ICEhZCgpW20gPj4+IDBdLCBvdXRwdXRQYWRkaW5nOiByID8gQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkodyA+Pj4gMCwgdyArIHIgPj4+IDApKSA6IFtdLCBvdXRwdXRTaGFwZTogeCA/IEFycmF5LmZyb20oeigpLnN1YmFycmF5KGcgPj4+IDAsIGcgKyB4ID4+PiAwKSkgOiBbXSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTMwNTg6IChhLCBiLCBjLCBlLCBmLCBoLCBrLCBxLCBuLCBtLCByLCB3LCB4KSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJDb252VHJhbnNwb3NlXCIsIGEsIHsgZm9ybWF0OiBxID8gXCJOSFdDXCIgOiBcIk5DSFdcIiwgYXV0b1BhZDogYiwgZGlsYXRpb25zOiBBcnJheS5mcm9tKHooKS5zdWJhcnJheShjID4+PiAwLCBjICsgMiA+Pj4gMCkpLCBncm91cDogZSwga2VybmVsU2hhcGU6IEFycmF5LmZyb20oeigpLnN1YmFycmF5KGYgPj4+IDAsIGYgKyAyID4+PiAwKSksIHBhZHM6IEFycmF5LmZyb20oeigpLnN1YmFycmF5KGggPj4+IDAsIGggKyA0ID4+PiAwKSksIHN0cmlkZXM6IEFycmF5LmZyb20oeigpLnN1YmFycmF5KGsgPj4+IDAsIGsgKyAyID4+PiAwKSksIHdJc0NvbnN0OiAoKSA9PiAhIWQoKVtuID4+PiAwXSwgb3V0cHV0UGFkZGluZzogMCA8IG0gPyBBcnJheS5mcm9tKHooKS5zdWJhcnJheShyID4+PiAwLCByICsgbSA+Pj4gMCkpIDogW10sIG91dHB1dFNoYXBlOiAwIDwgdyA/IEFycmF5LmZyb20oeigpLnN1YmFycmF5KHggPj4+IDAsIHggKyB3ID4+PiAwKSkgOiBbXSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTM1ODE6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJHbG9iYWxBdmVyYWdlUG9vbFwiLCBhLCB7IGZvcm1hdDogYiA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTEzNjcyOiAoYSwgYiwgYywgZSwgZiwgaCwgaywgcSwgbiwgbSwgciwgdywgeCwgZywgdSwgeSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQXZlcmFnZVBvb2xcIiwgYSwgeyBmb3JtYXQ6IHkgPyBcIk5IV0NcIiA6IFwiTkNIV1wiLCBhdXRvX3BhZDogYiwgY2VpbF9tb2RlOiBjLCBjb3VudF9pbmNsdWRlX3BhZDogZSwgc3RvcmFnZV9vcmRlcjogZiwgZGlsYXRpb25zOiBbaCwga10sIGtlcm5lbF9zaGFwZTogW3EsIG5dLCBwYWRzOiBbbSwgciwgdywgeF0sIHN0cmlkZXM6IFtnLCB1XSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTM5NTY6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJHbG9iYWxBdmVyYWdlUG9vbFwiLCBhLCB7IGZvcm1hdDogYiA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE0MDQ3OiAoYSwgYiwgYywgZSwgZiwgaCwgaywgcSwgbiwgbSwgciwgdywgeCwgZywgdSwgeSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiQXZlcmFnZVBvb2xcIiwgYSwge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogeSA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIsXG4gICAgICAgICAgICAgICAgYXV0b19wYWQ6IGIsXG4gICAgICAgICAgICAgICAgY2VpbF9tb2RlOiBjLFxuICAgICAgICAgICAgICAgIGNvdW50X2luY2x1ZGVfcGFkOiBlLFxuICAgICAgICAgICAgICAgIHN0b3JhZ2Vfb3JkZXI6IGYsXG4gICAgICAgICAgICAgICAgZGlsYXRpb25zOiBbaCwga10sXG4gICAgICAgICAgICAgICAga2VybmVsX3NoYXBlOiBbcSwgbl0sXG4gICAgICAgICAgICAgICAgcGFkczogW20sIHIsIHcsIHhdLFxuICAgICAgICAgICAgICAgIHN0cmlkZXM6IFtnLCB1XVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTQzMzE6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJHbG9iYWxNYXhQb29sXCIsIGEsIHsgZm9ybWF0OiBiID8gXCJOSFdDXCIgOiBcIk5DSFdcIiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTQ0MTg6IChhLCBiLCBjLCBlLCBmLCBoLCBrLCBxLCBuLCBtLCByLCB3LCB4LCBnLCB1LCB5KSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJNYXhQb29sXCIsIGEsIHsgZm9ybWF0OiB5ID8gXCJOSFdDXCIgOiBcIk5DSFdcIiwgYXV0b19wYWQ6IGIsIGNlaWxfbW9kZTogYywgY291bnRfaW5jbHVkZV9wYWQ6IGUsIHN0b3JhZ2Vfb3JkZXI6IGYsIGRpbGF0aW9uczogW2gsIGtdLCBrZXJuZWxfc2hhcGU6IFtxLCBuXSwgcGFkczogW20sIHIsIHcsIHhdLCBzdHJpZGVzOiBbZywgdV0gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE0Njk4OiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiR2xvYmFsTWF4UG9vbFwiLCBhLCB7IGZvcm1hdDogYiA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE0Nzg1OiAoYSwgYiwgYywgZSwgZiwgaCwgaywgcSwgbiwgbSwgciwgdywgeCwgZywgdSwgeSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFxuICAgICAgICAgICAgICAgIFwiTWF4UG9vbFwiLFxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgeyBmb3JtYXQ6IHkgPyBcIk5IV0NcIiA6IFwiTkNIV1wiLCBhdXRvX3BhZDogYiwgY2VpbF9tb2RlOiBjLCBjb3VudF9pbmNsdWRlX3BhZDogZSwgc3RvcmFnZV9vcmRlcjogZiwgZGlsYXRpb25zOiBbaCwga10sIGtlcm5lbF9zaGFwZTogW3EsIG5dLCBwYWRzOiBbbSwgciwgdywgeF0sIHN0cmlkZXM6IFtnLCB1XSB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE1MDY1OiAoYSwgYiwgYywgZSwgZikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiR2VtbVwiLCBhLCB7IGFscGhhOiBiLCBiZXRhOiBjLCB0cmFuc0E6IGUsIHRyYW5zQjogZiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTUxNjk6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJNYXRNdWxcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTUyMjM6IChhLCBiLCBjLCBlKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJBcmdNYXhcIiwgYSwgeyBrZWVwRGltczogISFiLCBzZWxlY3RMYXN0SW5kZXg6ICEhYywgYXhpczogZSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTUzMzE6IChhLCBiLCBjLCBlKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJBcmdNaW5cIiwgYSwgeyBrZWVwRGltczogISFiLCBzZWxlY3RMYXN0SW5kZXg6ICEhYywgYXhpczogZSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTU0Mzk6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJTb2Z0bWF4XCIsIGEsIHsgYXhpczogYiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTU1MDI6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJDb25jYXRcIiwgYSwgeyBheGlzOiBiIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkxNTU2MjogKGEsIGIsIGMsIGUsIGYpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIlNwbGl0XCIsIGEsIHsgYXhpczogYiwgbnVtT3V0cHV0czogYywgc3BsaXRTaXplczogZSA/IEFycmF5LmZyb20oeigpLnN1YmFycmF5KGYgPj4+IDAsIGYgKyBlID4+PiAwKSkgOiBbXSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTU3MDc6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJFeHBhbmRcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTU3NjE6IChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJHYXRoZXJcIiwgYSwgeyBheGlzOiBOdW1iZXIoYikgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE1ODMyOiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiR2F0aGVyRWxlbWVudHNcIiwgYSwgeyBheGlzOiBOdW1iZXIoYikgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE1OTExOiAoYSwgYiwgYywgZSwgZiwgaCwgaywgcSwgbiwgbSwgcikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiUmVzaXplXCIsIGEsIHsgYW50aWFsaWFzOiBiLCBheGVzOiBjID8gQXJyYXkuZnJvbSh6KCkuc3ViYXJyYXkoZSA+Pj4gMCwgZSArIGMgPj4+IDApKSA6IFtdLCBjb29yZGluYXRlVHJhbnNmb3JtTW9kZTogVihmKSwgY3ViaWNDb2VmZkE6IGgsIGV4Y2x1ZGVPdXRzaWRlOiBrLCBleHRyYXBvbGF0aW9uVmFsdWU6IHEsIGtlZXBBc3BlY3RSYXRpb1BvbGljeTogVihuKSwgbW9kZTogVihtKSwgbmVhcmVzdE1vZGU6IFYocikgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE2MjYyOiAoYSwgYiwgYywgZSwgZiwgaCwgaykgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiU2xpY2VcIiwgYSwgeyBzdGFydHM6IGIgPyBBcnJheS5mcm9tKHooKS5zdWJhcnJheShjID4+PiAwLCBjICsgYiA+Pj4gMCkpIDogW10sIGVuZHM6IGUgPyBBcnJheS5mcm9tKHooKS5zdWJhcnJheShmID4+PiAwLCBmICsgZSA+Pj4gMCkpIDogW10sIGF4ZXM6IGggPyBBcnJheS5mcm9tKHooKS5zdWJhcnJheShrID4+PiAwLCBrICsgaCA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE2NDkzOiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiVGlsZVwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkxNjU0NTogKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkxheWVyTm9ybWFsaXphdGlvblwiLCBhLCB7IGF4aXM6IE51bWJlcihiKSwgZXBzaWxvbjogTnVtYmVyKGMpIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkxNjY1MjogKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkluc3RhbmNlTm9ybWFsaXphdGlvblwiLCBhLCB7IGVwc2lsb246IGIsIGZvcm1hdDogYyA/IFwiTkhXQ1wiIDogXCJOQ0hXXCIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE2NzY2OiAoYSwgYiwgYykgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiSW5zdGFuY2VOb3JtYWxpemF0aW9uXCIsIGEsIHsgZXBzaWxvbjogYiwgZm9ybWF0OiBjID8gXCJOSFdDXCIgOiBcIk5DSFdcIiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTY4ODA6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXG4gICAgICAgICAgICAgICAgXCJSYW5nZVwiLFxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgdm9pZCAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE2OTMzOiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiRWluc3VtXCIsIGEsIHsgZXF1YXRpb246IFYoYikgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE3MDE0OiAoYSwgYiwgYywgZSwgZikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiUGFkXCIsIGEsIHsgbW9kZTogYiwgdmFsdWU6IGMsIHBhZHM6IGUgPyBBcnJheS5mcm9tKHooKS5zdWJhcnJheShmID4+PiAwLCBmICsgZSA+Pj4gMCkpIDogW10gfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE3MTQ2OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiR2VsdVwiLCBhLCB2b2lkIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkxNzE5ODogKGEpID0+IHtcbiAgICAgICAgICAgICAgQi5FYShcIkJpYXNBZGRcIiwgYSwgdm9pZCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5MTcyNTM6IChhKSA9PiB7XG4gICAgICAgICAgICAgIEIuRWEoXCJCaWFzU3BsaXRHZWx1XCIsIGEsIHZvaWQgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE3MzE0OiAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBCLkVhKFwiU2tpcExheWVyTm9ybWFsaXphdGlvblwiLCBhLCB7IGVwc2lsb246IGIgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE3Mzk1OiAoYSkgPT4ge1xuICAgICAgICAgICAgICBCLnpiKGEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDkxNzQyOTogKGEsIGIpID0+IEIuQWIoYSwgYiwgQi5iYi5GYiwgQi5iYi5lcnJvcnMpLFxuICAgICAgICAgICAgOTE3NTQxOiAoYSkgPT4gQi53YihhKSxcbiAgICAgICAgICAgIDkxNzU3NDogKGEpID0+IEIueWIoYSksXG4gICAgICAgICAgICA5MTc2MDY6IChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgIEIuamIoYSwgYiwgYywgdHJ1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTE3NjQ1OiAoYSwgYiwgYykgPT4ge1xuICAgICAgICAgICAgICBCLmpiKGEsIGIsIGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZnVuY3Rpb24gSWEoYSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gXCJFeGl0U3RhdHVzXCI7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBgUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke2F9KWA7XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEphKGEpIHtcbiAgICAgICAgICAgIGEudGVybWluYXRlKCk7XG4gICAgICAgICAgICBhLm9ubWVzc2FnZSA9ICgpID0+IHtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIEthKGEpIHtcbiAgICAgICAgICAgIChhID0gVy5RYVthXSkgfHwgTSgpO1xuICAgICAgICAgICAgVy5FYihhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gTGEoYSkge1xuICAgICAgICAgICAgdmFyIGIgPSBXLnRiKCk7XG4gICAgICAgICAgICBpZiAoIWIpXG4gICAgICAgICAgICAgIHJldHVybiA2O1xuICAgICAgICAgICAgVy5ZYS5wdXNoKGIpO1xuICAgICAgICAgICAgVy5RYVthLlhhXSA9IGI7XG4gICAgICAgICAgICBiLlhhID0gYS5YYTtcbiAgICAgICAgICAgIHZhciBjID0geyBjbWQ6IFwicnVuXCIsIHN0YXJ0X3JvdXRpbmU6IGEuR2IsIGFyZzogYS5yYiwgcHRocmVhZF9wdHI6IGEuWGEgfTtcbiAgICAgICAgICAgIEcgJiYgYi51bnJlZigpO1xuICAgICAgICAgICAgYi5wb3N0TWVzc2FnZShjLCBhLk1iKTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgTWEgPSBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBUZXh0RGVjb2RlciA/IG5ldyBUZXh0RGVjb2RlcihcInV0ZjhcIikgOiB2b2lkIDAsIE5hID0gKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgIGIgPj4+PSAwO1xuICAgICAgICAgICAgdmFyIGUgPSBiICsgYztcbiAgICAgICAgICAgIGZvciAoYyA9IGI7IGFbY10gJiYgIShjID49IGUpOyApXG4gICAgICAgICAgICAgICsrYztcbiAgICAgICAgICAgIGlmICgxNiA8IGMgLSBiICYmIGEuYnVmZmVyICYmIE1hKVxuICAgICAgICAgICAgICByZXR1cm4gTWEuZGVjb2RlKGEuYnVmZmVyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIgPyBhLnNsaWNlKGIsIGMpIDogYS5zdWJhcnJheShiLCBjKSk7XG4gICAgICAgICAgICBmb3IgKGUgPSBcIlwiOyBiIDwgYzsgKSB7XG4gICAgICAgICAgICAgIHZhciBmID0gYVtiKytdO1xuICAgICAgICAgICAgICBpZiAoZiAmIDEyOCkge1xuICAgICAgICAgICAgICAgIHZhciBoID0gYVtiKytdICYgNjM7XG4gICAgICAgICAgICAgICAgaWYgKDE5MiA9PSAoZiAmIDIyNCkpXG4gICAgICAgICAgICAgICAgICBlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGYgJiAzMSkgPDwgNiB8IGgpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFyIGsgPSBhW2IrK10gJiA2MztcbiAgICAgICAgICAgICAgICAgIGYgPSAyMjQgPT0gKGYgJiAyNDApID8gKGYgJiAxNSkgPDwgMTIgfCBoIDw8IDYgfCBrIDogKGYgJiA3KSA8PCAxOCB8IGggPDwgMTIgfCBrIDw8IDYgfCBhW2IrK10gJiA2MztcbiAgICAgICAgICAgICAgICAgIDY1NTM2ID4gZiA/IGUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShmKSA6IChmIC09IDY1NTM2LCBlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYgfCBmID4+IDEwLCA1NjMyMCB8IGYgJiAxMDIzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9LCBWID0gKGEsIGIpID0+IChhID4+Pj0gMCkgPyBOYSh2KCksIGEsIGIpIDogXCJcIjtcbiAgICAgICAgICBmdW5jdGlvbiBPYShhKSB7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIFgoMSwgMSwgYSk7XG4gICAgICAgICAgICBRID0gYTtcbiAgICAgICAgICAgIGlmICgheWEoKSkge1xuICAgICAgICAgICAgICBXLkhiKCk7XG4gICAgICAgICAgICAgIGlmIChCLm9uRXhpdClcbiAgICAgICAgICAgICAgICBCLm9uRXhpdChhKTtcbiAgICAgICAgICAgICAgUCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFKGEsIG5ldyBJYShhKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBRYSA9IChhKSA9PiB7XG4gICAgICAgICAgICBRID0gYTtcbiAgICAgICAgICAgIGlmIChIKVxuICAgICAgICAgICAgICB0aHJvdyBQYShhKSwgXCJ1bndpbmRcIjtcbiAgICAgICAgICAgIE9hKGEpO1xuICAgICAgICAgIH0sIFcgPSB7XG4gICAgICAgICAgICBhYjogW10sXG4gICAgICAgICAgICBZYTogW10sXG4gICAgICAgICAgICBtYjogW10sXG4gICAgICAgICAgICBRYToge30sXG4gICAgICAgICAgICBnYjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIEggPyBXLnZiKCkgOiBXLnViKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdWI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB1YS51bnNoaWZ0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBBYSgpO1xuICAgICAgICAgICAgICAgIFcuQmIoKCkgPT4gQmEoKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZiOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgVy5yZWNlaXZlT2JqZWN0VHJhbnNmZXIgPSBXLkRiO1xuICAgICAgICAgICAgICBXLnRocmVhZEluaXRUTFMgPSBXLmxiO1xuICAgICAgICAgICAgICBXLnNldEV4aXRTdGF0dXMgPSBXLmtiO1xuICAgICAgICAgICAgICBub0V4aXRSdW50aW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2I6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgUSA9IGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgU2I6IFtcIiR0ZXJtaW5hdGVXb3JrZXJcIl0sXG4gICAgICAgICAgICBIYjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGEgb2YgVy5ZYSlcbiAgICAgICAgICAgICAgICBKYShhKTtcbiAgICAgICAgICAgICAgZm9yIChhIG9mIFcuYWIpXG4gICAgICAgICAgICAgICAgSmEoYSk7XG4gICAgICAgICAgICAgIFcuYWIgPSBbXTtcbiAgICAgICAgICAgICAgVy5ZYSA9IFtdO1xuICAgICAgICAgICAgICBXLlFhID0gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRWI6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgdmFyIGIgPSBhLlhhO1xuICAgICAgICAgICAgICBkZWxldGUgVy5RYVtiXTtcbiAgICAgICAgICAgICAgVy5hYi5wdXNoKGEpO1xuICAgICAgICAgICAgICBXLllhLnNwbGljZShXLllhLmluZGV4T2YoYSksIDEpO1xuICAgICAgICAgICAgICBhLlhhID0gMDtcbiAgICAgICAgICAgICAgUmEoYik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRGI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxiOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgVy5tYi5mb3JFYWNoKChhKSA9PiBhKCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIENiOiAoYSkgPT4gbmV3IFByb21pc2UoKGIpID0+IHtcbiAgICAgICAgICAgICAgYS5vbm1lc3NhZ2UgPSAoaCkgPT4ge1xuICAgICAgICAgICAgICAgIGggPSBoLmRhdGE7XG4gICAgICAgICAgICAgICAgdmFyIGsgPSBoLmNtZDtcbiAgICAgICAgICAgICAgICBpZiAoaC50YXJnZXRUaHJlYWQgJiYgaC50YXJnZXRUaHJlYWQgIT0gU2EoKSkge1xuICAgICAgICAgICAgICAgICAgdmFyIHEgPSBXLlFhW2guUmJdO1xuICAgICAgICAgICAgICAgICAgcSA/IHEucG9zdE1lc3NhZ2UoaCwgaC50cmFuc2Zlckxpc3QpIDogSygnSW50ZXJuYWwgZXJyb3IhIFdvcmtlciBzZW50IGEgbWVzc2FnZSBcIicgKyBrICsgJ1wiIHRvIHRhcmdldCBwdGhyZWFkICcgKyBoLnRhcmdldFRocmVhZCArIFwiLCBidXQgdGhhdCB0aHJlYWQgbm8gbG9uZ2VyIGV4aXN0cyFcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcImNoZWNrTWFpbGJveFwiID09PSBrKVxuICAgICAgICAgICAgICAgICAgVGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcInNwYXduVGhyZWFkXCIgPT09IGspXG4gICAgICAgICAgICAgICAgICBMYShoKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImNsZWFudXBUaHJlYWRcIiA9PT0gaylcbiAgICAgICAgICAgICAgICAgIEthKGgudGhyZWFkKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImtpbGxUaHJlYWRcIiA9PT0gaylcbiAgICAgICAgICAgICAgICAgIGggPSBoLnRocmVhZCwgayA9IFcuUWFbaF0sIGRlbGV0ZSBXLlFhW2hdLCBKYShrKSwgUmEoaCksIFcuWWEuc3BsaWNlKFxuICAgICAgICAgICAgICAgICAgICBXLllhLmluZGV4T2YoayksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICksIGsuWGEgPSAwO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwiY2FuY2VsVGhyZWFkXCIgPT09IGspXG4gICAgICAgICAgICAgICAgICBXLlFhW2gudGhyZWFkXS5wb3N0TWVzc2FnZSh7IGNtZDogXCJjYW5jZWxcIiB9KTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImxvYWRlZFwiID09PSBrKVxuICAgICAgICAgICAgICAgICAgYS5sb2FkZWQgPSB0cnVlLCBiKGEpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwiYWxlcnRcIiA9PT0gaylcbiAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiVGhyZWFkIFwiICsgaC50aHJlYWRJZCArIFwiOiBcIiArIGgudGV4dCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXCJzZXRpbW1lZGlhdGVcIiA9PT0gaC50YXJnZXQpXG4gICAgICAgICAgICAgICAgICBhLnBvc3RNZXNzYWdlKGgpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwiY2FsbEhhbmRsZXJcIiA9PT0gaylcbiAgICAgICAgICAgICAgICAgIEJbaC5oYW5kbGVyXSguLi5oLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGsgJiYgSyhcIndvcmtlciBzZW50IGFuIHVua25vd24gY29tbWFuZCBcIiArIGspO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBhLm9uZXJyb3IgPSAoaCkgPT4ge1xuICAgICAgICAgICAgICAgIEsoXCJ3b3JrZXIgc2VudCBhbiBlcnJvciEgXCIgKyBoLmZpbGVuYW1lICsgXCI6XCIgKyBoLmxpbmVubyArIFwiOiBcIiArIGgubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgaDtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgRyAmJiAoYS5vbihcIm1lc3NhZ2VcIiwgZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgICAgIGEub25tZXNzYWdlKHsgZGF0YTogaCB9KTtcbiAgICAgICAgICAgICAgfSksIGEub24oXCJlcnJvclwiLCBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgICAgICAgYS5vbmVycm9yKGgpO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHZhciBjID0gW10sIGUgPSBbXCJvbkV4aXRcIiwgXCJvbkFib3J0XCIsIFwicHJpbnRcIiwgXCJwcmludEVyclwiXSwgZjtcbiAgICAgICAgICAgICAgZm9yIChmIG9mIGUpXG4gICAgICAgICAgICAgICAgQi5oYXNPd25Qcm9wZXJ0eShmKSAmJiBjLnB1c2goZik7XG4gICAgICAgICAgICAgIGEucG9zdE1lc3NhZ2UoeyBjbWQ6IFwibG9hZFwiLCBoYW5kbGVyczogYywgdXJsT3JCbG9iOiBCLm1haW5TY3JpcHRVcmxPckJsb2IgfHwgX3NjcmlwdERpciwgd2FzbU1lbW9yeTogbCwgd2FzbU1vZHVsZTogc2EgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEJiOiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgIGEoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBxYjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBhID0gbGEoXCJvcnQtd2FzbS1zaW1kLXRocmVhZGVkLndvcmtlci5qc1wiKTtcbiAgICAgICAgICAgICAgYSA9IG5ldyBXb3JrZXIoYSk7XG4gICAgICAgICAgICAgIFcuYWIucHVzaChhKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIDAgPT0gVy5hYi5sZW5ndGggJiYgKFcucWIoKSwgVy5DYihXLmFiWzBdKSk7XG4gICAgICAgICAgICAgIHJldHVybiBXLmFiLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgQi5QVGhyZWFkID0gVztcbiAgICAgICAgICB2YXIgVWEgPSAoYSkgPT4ge1xuICAgICAgICAgICAgZm9yICg7IDAgPCBhLmxlbmd0aDsgKVxuICAgICAgICAgICAgICBhLnNoaWZ0KCkoQik7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBCLmVzdGFibGlzaFN0YWNrU3BhY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBhID0gU2EoKSwgYiA9IHooKVthICsgNTIgPj4gMiA+Pj4gMF07XG4gICAgICAgICAgICBhID0geigpW2EgKyA1NiA+PiAyID4+PiAwXTtcbiAgICAgICAgICAgIFZhKGIsIGIgLSBhKTtcbiAgICAgICAgICAgIFdhKGIpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZnVuY3Rpb24gUGEoYSkge1xuICAgICAgICAgICAgaWYgKEgpXG4gICAgICAgICAgICAgIHJldHVybiBYKDIsIDAsIGEpO1xuICAgICAgICAgICAgUWEoYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIEIuaW52b2tlRW50cnlQb2ludCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgIGEgPSBYYS5hcHBseShudWxsLCBbYSwgYl0pO1xuICAgICAgICAgICAgeWEoKSA/IFcua2IoYSkgOiBZYShhKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGZ1bmN0aW9uIFphKGEpIHtcbiAgICAgICAgICAgIHRoaXMuZmIgPSBhIC0gMjQ7XG4gICAgICAgICAgICB0aGlzLnBiID0gZnVuY3Rpb24oYikge1xuICAgICAgICAgICAgICBBKClbdGhpcy5mYiArIDQgPj4gMiA+Pj4gMF0gPSBiO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMub2IgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgICAgICAgIEEoKVt0aGlzLmZiICsgOCA+PiAyID4+PiAwXSA9IGI7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5nYiA9IGZ1bmN0aW9uKGIsIGMpIHtcbiAgICAgICAgICAgICAgdGhpcy5uYigpO1xuICAgICAgICAgICAgICB0aGlzLnBiKGIpO1xuICAgICAgICAgICAgICB0aGlzLm9iKGMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubmIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgQSgpW3RoaXMuZmIgKyAxNiA+PiAyID4+PiAwXSA9IDA7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgJGEgPSAwLCBhYiA9IDA7XG4gICAgICAgICAgZnVuY3Rpb24gYmIoYSwgYiwgYywgZSkge1xuICAgICAgICAgICAgcmV0dXJuIEggPyBYKDMsIDEsIGEsIGIsIGMsIGUpIDogY2IoYSwgYiwgYywgZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGNiKGEsIGIsIGMsIGUpIHtcbiAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgIGUgPj4+PSAwO1xuICAgICAgICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT0gdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyKVxuICAgICAgICAgICAgICByZXR1cm4gSyhcIkN1cnJlbnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTaGFyZWRBcnJheUJ1ZmZlciwgcHRocmVhZHMgYXJlIG5vdCBhdmFpbGFibGUhXCIpLCA2O1xuICAgICAgICAgICAgdmFyIGYgPSBbXTtcbiAgICAgICAgICAgIGlmIChIICYmIDAgPT09IGYubGVuZ3RoKVxuICAgICAgICAgICAgICByZXR1cm4gYmIoYSwgYiwgYywgZSk7XG4gICAgICAgICAgICBhID0geyBHYjogYywgWGE6IGEsIHJiOiBlLCBNYjogZiB9O1xuICAgICAgICAgICAgcmV0dXJuIEggPyAoYS5PYiA9IFwic3Bhd25UaHJlYWRcIiwgcG9zdE1lc3NhZ2UoYSwgZiksIDApIDogTGEoYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGRiKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHJldHVybiBIID8gWCg0LCAxLCBhLCBiLCBjKSA6IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGViKGEsIGIpIHtcbiAgICAgICAgICAgIGlmIChIKVxuICAgICAgICAgICAgICByZXR1cm4gWCg1LCAxLCBhLCBiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGZiID0gKGEpID0+IHtcbiAgICAgICAgICAgIGZvciAodmFyIGIgPSAwLCBjID0gMDsgYyA8IGEubGVuZ3RoOyArK2MpIHtcbiAgICAgICAgICAgICAgdmFyIGUgPSBhLmNoYXJDb2RlQXQoYyk7XG4gICAgICAgICAgICAgIDEyNyA+PSBlID8gYisrIDogMjA0NyA+PSBlID8gYiArPSAyIDogNTUyOTYgPD0gZSAmJiA1NzM0MyA+PSBlID8gKGIgKz0gNCwgKytjKSA6IGIgKz0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICAgIH0sIGdiID0gKGEsIGIsIGMsIGUpID0+IHtcbiAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgaWYgKCEoMCA8IGUpKVxuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIHZhciBmID0gYztcbiAgICAgICAgICAgIGUgPSBjICsgZSAtIDE7XG4gICAgICAgICAgICBmb3IgKHZhciBoID0gMDsgaCA8IGEubGVuZ3RoOyArK2gpIHtcbiAgICAgICAgICAgICAgdmFyIGsgPSBhLmNoYXJDb2RlQXQoaCk7XG4gICAgICAgICAgICAgIGlmICg1NTI5NiA8PSBrICYmIDU3MzQzID49IGspIHtcbiAgICAgICAgICAgICAgICB2YXIgcSA9IGEuY2hhckNvZGVBdCgrK2gpO1xuICAgICAgICAgICAgICAgIGsgPSA2NTUzNiArICgoayAmIDEwMjMpIDw8IDEwKSB8IHEgJiAxMDIzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICgxMjcgPj0gaykge1xuICAgICAgICAgICAgICAgIGlmIChjID49IGUpXG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBiW2MrKyA+Pj4gMF0gPSBrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICgyMDQ3ID49IGspIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjICsgMSA+PSBlKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDE5MiB8IGsgPj4gNjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKDY1NTM1ID49IGspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgKyAyID49IGUpXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDIyNCB8IGsgPj4gMTI7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYyArIDMgPj0gZSlcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgYltjKysgPj4+IDBdID0gMjQwIHwgayA+PiAxODtcbiAgICAgICAgICAgICAgICAgICAgYltjKysgPj4+IDBdID0gMTI4IHwgayA+PiAxMiAmIDYzO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYltjKysgPj4+IDBdID0gMTI4IHwgayA+PiA2ICYgNjM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJbYysrID4+PiAwXSA9IDEyOCB8IGsgJiA2MztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYltjID4+PiAwXSA9IDA7XG4gICAgICAgICAgICByZXR1cm4gYyAtIGY7XG4gICAgICAgICAgfSwgaGIgPSAoYSwgYiwgYykgPT4gZ2IoYSwgdigpLCBiLCBjKTtcbiAgICAgICAgICBmdW5jdGlvbiBpYihhLCBiKSB7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIFgoNiwgMSwgYSwgYik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIGpiKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIGlmIChIKVxuICAgICAgICAgICAgICByZXR1cm4gWCg3LCAxLCBhLCBiLCBjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24ga2IoYSwgYiwgYykge1xuICAgICAgICAgICAgcmV0dXJuIEggPyBYKDgsIDEsIGEsIGIsIGMpIDogMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gbGIoYSwgYikge1xuICAgICAgICAgICAgaWYgKEgpXG4gICAgICAgICAgICAgIHJldHVybiBYKDksIDEsIGEsIGIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBtYihhLCBiLCBjKSB7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIFgoMTAsIDEsIGEsIGIsIGMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBuYihhLCBiLCBjLCBlKSB7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIFgoMTEsIDEsIGEsIGIsIGMsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBvYihhLCBiLCBjLCBlKSB7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIFgoMTIsIDEsIGEsIGIsIGMsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBwYihhLCBiLCBjLCBlKSB7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIFgoMTMsIDEsIGEsIGIsIGMsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBxYihhKSB7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIFgoMTQsIDEsIGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiByYihhLCBiKSB7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIFgoMTUsIDEsIGEsIGIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBzYihhLCBiLCBjKSB7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIFgoMTYsIDEsIGEsIGIsIGMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgdGIgPSAoYSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFQKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChhKCksICF5YSgpKVxuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgSCA/IFlhKFEpIDogUWEoUSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChiKSB7XG4gICAgICAgICAgICAgICAgICAgIGIgaW5zdGFuY2VvZiBJYSB8fCBcInVud2luZFwiID09IGIgfHwgRSgxLCBiKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoYikge1xuICAgICAgICAgICAgICAgIGIgaW5zdGFuY2VvZiBJYSB8fCBcInVud2luZFwiID09IGIgfHwgRSgxLCBiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZnVuY3Rpb24gdWIoYSkge1xuICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBBdG9taWNzLk5iICYmIChBdG9taWNzLk5iKHooKSwgYSA+PiAyLCBhKS52YWx1ZS50aGVuKFRhKSwgYSArPSAxMjgsIEF0b21pY3Muc3RvcmUoeigpLCBhID4+IDIsIDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgQi5fX2Vtc2NyaXB0ZW5fdGhyZWFkX21haWxib3hfYXdhaXQgPSB1YjtcbiAgICAgICAgICBmdW5jdGlvbiBUYSgpIHtcbiAgICAgICAgICAgIHZhciBhID0gU2EoKTtcbiAgICAgICAgICAgIGEgJiYgKHViKGEpLCB0YigoKSA9PiB2YigpKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIEIuY2hlY2tNYWlsYm94ID0gVGE7XG4gICAgICAgICAgdmFyIFkgPSAoYSkgPT4gMCA9PT0gYSAlIDQgJiYgKDAgIT09IGEgJSAxMDAgfHwgMCA9PT0gYSAlIDQwMCksIHdiID0gWzAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAyNzQsIDMwNSwgMzM1XSwgeGIgPSBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdO1xuICAgICAgICAgIGZ1bmN0aW9uIHliKGEsIGIsIGMsIGUsIGYsIGgsIGssIHEpIHtcbiAgICAgICAgICAgIHJldHVybiBIID8gWCgxNywgMSwgYSwgYiwgYywgZSwgZiwgaCwgaywgcSkgOiAtNTI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHpiKGEsIGIsIGMsIGUsIGYsIGgsIGspIHtcbiAgICAgICAgICAgIGlmIChIKVxuICAgICAgICAgICAgICByZXR1cm4gWCgxOCwgMSwgYSwgYiwgYywgZSwgZiwgaCwgayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBCYiA9IChhKSA9PiB7XG4gICAgICAgICAgICB2YXIgYiA9IGZiKGEpICsgMSwgYyA9IEFiKGIpO1xuICAgICAgICAgICAgYyAmJiBoYihhLCBjLCBiKTtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgIH0sIENiID0gW10sIERiID0gKGEsIGIpID0+IHtcbiAgICAgICAgICAgIENiLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB2YXIgYztcbiAgICAgICAgICAgIGZvciAoYiA+Pj0gMjsgYyA9IHYoKVthKysgPj4+IDBdOyApXG4gICAgICAgICAgICAgIGIgKz0gMTA1ICE9IGMgJiBiLCBDYi5wdXNoKDEwNSA9PSBjID8geigpW2IgPj4+IDBdIDogZGEoKVtiKysgPj4+IDFdKSwgKytiO1xuICAgICAgICAgICAgcmV0dXJuIENiO1xuICAgICAgICAgIH0sIEZiID0gKGEpID0+IHtcbiAgICAgICAgICAgIHZhciBiID0gRWIoKTtcbiAgICAgICAgICAgIGEgPSBhKCk7XG4gICAgICAgICAgICBXYShiKTtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZnVuY3Rpb24gWChhLCBiKSB7XG4gICAgICAgICAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGggLSAyLCBlID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgcmV0dXJuIEZiKCgpID0+IHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgZiA9IEdiKDggKiBjKSwgaCA9IGYgPj4gMywgayA9IDA7IGsgPCBjOyBrKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcSA9IGVbMiArIGtdO1xuICAgICAgICAgICAgICAgIGRhKClbaCArIGsgPj4+IDBdID0gcTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gSGIoYSwgYywgZiwgYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIEliID0gW10sIEpiID0ge30sIExiID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFLYikge1xuICAgICAgICAgICAgICB2YXIgYSA9IHsgVVNFUjogXCJ3ZWJfdXNlclwiLCBMT0dOQU1FOiBcIndlYl91c2VyXCIsIFBBVEg6IFwiL1wiLCBQV0Q6IFwiL1wiLCBIT01FOiBcIi9ob21lL3dlYl91c2VyXCIsIExBTkc6IChcIm9iamVjdFwiID09IHR5cGVvZiBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIHx8IFwiQ1wiKS5yZXBsYWNlKFwiLVwiLCBcIl9cIikgKyBcIi5VVEYtOFwiLCBfOiBqYSB8fCBcIi4vdGhpcy5wcm9ncmFtXCIgfSwgYjtcbiAgICAgICAgICAgICAgZm9yIChiIGluIEpiKVxuICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gSmJbYl0gPyBkZWxldGUgYVtiXSA6IGFbYl0gPSBKYltiXTtcbiAgICAgICAgICAgICAgdmFyIGMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChiIGluIGEpXG4gICAgICAgICAgICAgICAgYy5wdXNoKGAke2J9PSR7YVtiXX1gKTtcbiAgICAgICAgICAgICAgS2IgPSBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEtiO1xuICAgICAgICAgIH0sIEtiO1xuICAgICAgICAgIGZ1bmN0aW9uIE1iKGEsIGIpIHtcbiAgICAgICAgICAgIGlmIChIKVxuICAgICAgICAgICAgICByZXR1cm4gWCgxOSwgMSwgYSwgYik7XG4gICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgIGIgPj4+PSAwO1xuICAgICAgICAgICAgdmFyIGMgPSAwO1xuICAgICAgICAgICAgTGIoKS5mb3JFYWNoKGZ1bmN0aW9uKGUsIGYpIHtcbiAgICAgICAgICAgICAgdmFyIGggPSBiICsgYztcbiAgICAgICAgICAgICAgZiA9IEEoKVthICsgNCAqIGYgPj4gMiA+Pj4gMF0gPSBoO1xuICAgICAgICAgICAgICBmb3IgKGggPSAwOyBoIDwgZS5sZW5ndGg7ICsraClcbiAgICAgICAgICAgICAgICBkKClbZisrID4+IDAgPj4+IDBdID0gZS5jaGFyQ29kZUF0KGgpO1xuICAgICAgICAgICAgICBkKClbZiA+PiAwID4+PiAwXSA9IDA7XG4gICAgICAgICAgICAgIGMgKz0gZS5sZW5ndGggKyAxO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gTmIoYSwgYikge1xuICAgICAgICAgICAgaWYgKEgpXG4gICAgICAgICAgICAgIHJldHVybiBYKDIwLCAxLCBhLCBiKTtcbiAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICB2YXIgYyA9IExiKCk7XG4gICAgICAgICAgICBBKClbYSA+PiAyID4+PiAwXSA9IGMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGUgPSAwO1xuICAgICAgICAgICAgYy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgICAgICAgICAgZSArPSBmLmxlbmd0aCArIDE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIEEoKVtiID4+IDIgPj4+IDBdID0gZTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBPYihhKSB7XG4gICAgICAgICAgICByZXR1cm4gSCA/IFgoMjEsIDEsIGEpIDogNTI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIFBiKGEsIGIsIGMsIGUpIHtcbiAgICAgICAgICAgIHJldHVybiBIID8gWCgyMiwgMSwgYSwgYiwgYywgZSkgOiA1MjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gUWIoYSwgYiwgYywgZSwgZikge1xuICAgICAgICAgICAgcmV0dXJuIEggPyBYKDIzLCAxLCBhLCBiLCBjLCBlLCBmKSA6IDcwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgUmIgPSBbbnVsbCwgW10sIFtdXTtcbiAgICAgICAgICBmdW5jdGlvbiBUYihhLCBiLCBjLCBlKSB7XG4gICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgcmV0dXJuIFgoMjQsIDEsIGEsIGIsIGMsIGUpO1xuICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgIGUgPj4+PSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgZiA9IDAsIGggPSAwOyBoIDwgYzsgaCsrKSB7XG4gICAgICAgICAgICAgIHZhciBrID0gQSgpW2IgPj4gMiA+Pj4gMF0sIHEgPSBBKClbYiArIDQgPj4gMiA+Pj4gMF07XG4gICAgICAgICAgICAgIGIgKz0gODtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBxOyBuKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbSA9IHYoKVtrICsgbiA+Pj4gMF0sIHIgPSBSYlthXTtcbiAgICAgICAgICAgICAgICAwID09PSBtIHx8IDEwID09PSBtID8gKCgxID09PSBhID8gcmEgOiBLKShOYShyLCAwKSksIHIubGVuZ3RoID0gMCkgOiByLnB1c2gobSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZiArPSBxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQSgpW2UgPj4gMiA+Pj4gMF0gPSBmO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBVYiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSwgVmIgPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG4gICAgICAgICAgZnVuY3Rpb24gV2IoYSkge1xuICAgICAgICAgICAgdmFyIGIgPSBBcnJheShmYihhKSArIDEpO1xuICAgICAgICAgICAgZ2IoYSwgYiwgMCwgYi5sZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBYYiA9IChhLCBiKSA9PiB7XG4gICAgICAgICAgICBkKCkuc2V0KGEsIGIgPj4+IDApO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZnVuY3Rpb24gWWIoYSwgYiwgYywgZSkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZihnLCB1LCB5KSB7XG4gICAgICAgICAgICAgIGZvciAoZyA9IFwibnVtYmVyXCIgPT0gdHlwZW9mIGcgPyBnLnRvU3RyaW5nKCkgOiBnIHx8IFwiXCI7IGcubGVuZ3RoIDwgdTsgKVxuICAgICAgICAgICAgICAgIGcgPSB5WzBdICsgZztcbiAgICAgICAgICAgICAgcmV0dXJuIGc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBoKGcsIHUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGYoZywgdSwgXCIwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gayhnLCB1KSB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uIHkoU2IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMCA+IFNiID8gLTEgOiAwIDwgU2IgPyAxIDogMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgTztcbiAgICAgICAgICAgICAgMCA9PT0gKE8gPSB5KGcuZ2V0RnVsbFllYXIoKSAtIHUuZ2V0RnVsbFllYXIoKSkpICYmIDAgPT09IChPID0geShnLmdldE1vbnRoKCkgLSB1LmdldE1vbnRoKCkpKSAmJiAoTyA9IHkoZy5nZXREYXRlKCkgLSB1LmdldERhdGUoKSkpO1xuICAgICAgICAgICAgICByZXR1cm4gTztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIHEoZykge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGcuZ2V0RGF5KCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIDI5KTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZztcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLCAwLCAzKTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIGcuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIDMxKTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZy5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIDMwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gbihnKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gZy5aYTtcbiAgICAgICAgICAgICAgZm9yIChnID0gbmV3IERhdGUobmV3IERhdGUoZy4kYSArIDE5MDAsIDAsIDEpLmdldFRpbWUoKSk7IDAgPCB1OyApIHtcbiAgICAgICAgICAgICAgICB2YXIgeSA9IGcuZ2V0TW9udGgoKSwgTyA9IChZKGcuZ2V0RnVsbFllYXIoKSkgPyBVYiA6IFZiKVt5XTtcbiAgICAgICAgICAgICAgICBpZiAodSA+IE8gLSBnLmdldERhdGUoKSlcbiAgICAgICAgICAgICAgICAgIHUgLT0gTyAtIGcuZ2V0RGF0ZSgpICsgMSwgZy5zZXREYXRlKDEpLCAxMSA+IHkgPyBnLnNldE1vbnRoKHkgKyAxKSA6IChnLnNldE1vbnRoKDApLCBnLnNldEZ1bGxZZWFyKGcuZ2V0RnVsbFllYXIoKSArIDEpKTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGcuc2V0RGF0ZShnLmdldERhdGUoKSArIHUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHkgPSBuZXcgRGF0ZShnLmdldEZ1bGxZZWFyKCkgKyAxLCAwLCA0KTtcbiAgICAgICAgICAgICAgdSA9IHEobmV3IERhdGUoXG4gICAgICAgICAgICAgICAgZy5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgNFxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgeSA9IHEoeSk7XG4gICAgICAgICAgICAgIHJldHVybiAwID49IGsodSwgZykgPyAwID49IGsoeSwgZykgPyBnLmdldEZ1bGxZZWFyKCkgKyAxIDogZy5nZXRGdWxsWWVhcigpIDogZy5nZXRGdWxsWWVhcigpIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICBjID4+Pj0gMDtcbiAgICAgICAgICAgIGUgPj4+PSAwO1xuICAgICAgICAgICAgdmFyIG0gPSB6KClbZSArIDQwID4+IDIgPj4+IDBdO1xuICAgICAgICAgICAgZSA9IHsgS2I6IHooKVtlID4+IDIgPj4+IDBdLCBKYjogeigpW2UgKyA0ID4+IDIgPj4+IDBdLCBjYjogeigpW2UgKyA4ID4+IDIgPj4+IDBdLCBpYjogeigpW2UgKyAxMiA+PiAyID4+PiAwXSwgZWI6IHooKVtlICsgMTYgPj4gMiA+Pj4gMF0sICRhOiB6KClbZSArIDIwID4+IDIgPj4+IDBdLCBXYTogeigpW2UgKyAyNCA+PiAyID4+PiAwXSwgWmE6IHooKVtlICsgMjggPj4gMiA+Pj4gMF0sIFRiOiB6KClbZSArIDMyID4+IDIgPj4+IDBdLCBJYjogeigpW2UgKyAzNiA+PiAyID4+PiAwXSwgTGI6IG0gPyBWKG0pIDogXCJcIiB9O1xuICAgICAgICAgICAgYyA9IFYoYyk7XG4gICAgICAgICAgICBtID0ge1xuICAgICAgICAgICAgICBcIiVjXCI6IFwiJWEgJWIgJWQgJUg6JU06JVMgJVlcIixcbiAgICAgICAgICAgICAgXCIlRFwiOiBcIiVtLyVkLyV5XCIsXG4gICAgICAgICAgICAgIFwiJUZcIjogXCIlWS0lbS0lZFwiLFxuICAgICAgICAgICAgICBcIiVoXCI6IFwiJWJcIixcbiAgICAgICAgICAgICAgXCIlclwiOiBcIiVJOiVNOiVTICVwXCIsXG4gICAgICAgICAgICAgIFwiJVJcIjogXCIlSDolTVwiLFxuICAgICAgICAgICAgICBcIiVUXCI6IFwiJUg6JU06JVNcIixcbiAgICAgICAgICAgICAgXCIleFwiOiBcIiVtLyVkLyV5XCIsXG4gICAgICAgICAgICAgIFwiJVhcIjogXCIlSDolTTolU1wiLFxuICAgICAgICAgICAgICBcIiVFY1wiOiBcIiVjXCIsXG4gICAgICAgICAgICAgIFwiJUVDXCI6IFwiJUNcIixcbiAgICAgICAgICAgICAgXCIlRXhcIjogXCIlbS8lZC8leVwiLFxuICAgICAgICAgICAgICBcIiVFWFwiOiBcIiVIOiVNOiVTXCIsXG4gICAgICAgICAgICAgIFwiJUV5XCI6IFwiJXlcIixcbiAgICAgICAgICAgICAgXCIlRVlcIjogXCIlWVwiLFxuICAgICAgICAgICAgICBcIiVPZFwiOiBcIiVkXCIsXG4gICAgICAgICAgICAgIFwiJU9lXCI6IFwiJWVcIixcbiAgICAgICAgICAgICAgXCIlT0hcIjogXCIlSFwiLFxuICAgICAgICAgICAgICBcIiVPSVwiOiBcIiVJXCIsXG4gICAgICAgICAgICAgIFwiJU9tXCI6IFwiJW1cIixcbiAgICAgICAgICAgICAgXCIlT01cIjogXCIlTVwiLFxuICAgICAgICAgICAgICBcIiVPU1wiOiBcIiVTXCIsXG4gICAgICAgICAgICAgIFwiJU91XCI6IFwiJXVcIixcbiAgICAgICAgICAgICAgXCIlT1VcIjogXCIlVVwiLFxuICAgICAgICAgICAgICBcIiVPVlwiOiBcIiVWXCIsXG4gICAgICAgICAgICAgIFwiJU93XCI6IFwiJXdcIixcbiAgICAgICAgICAgICAgXCIlT1dcIjogXCIlV1wiLFxuICAgICAgICAgICAgICBcIiVPeVwiOiBcIiV5XCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciByIGluIG0pXG4gICAgICAgICAgICAgIGMgPSBjLnJlcGxhY2UobmV3IFJlZ0V4cChyLCBcImdcIiksIG1bcl0pO1xuICAgICAgICAgICAgdmFyIHcgPSBcIlN1bmRheSBNb25kYXkgVHVlc2RheSBXZWRuZXNkYXkgVGh1cnNkYXkgRnJpZGF5IFNhdHVyZGF5XCIuc3BsaXQoXCIgXCIpLCB4ID0gXCJKYW51YXJ5IEZlYnJ1YXJ5IE1hcmNoIEFwcmlsIE1heSBKdW5lIEp1bHkgQXVndXN0IFNlcHRlbWJlciBPY3RvYmVyIE5vdmVtYmVyIERlY2VtYmVyXCIuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgbSA9IHsgXCIlYVwiOiAoZykgPT4gd1tnLldhXS5zdWJzdHJpbmcoMCwgMyksIFwiJUFcIjogKGcpID0+IHdbZy5XYV0sIFwiJWJcIjogKGcpID0+IHhbZy5lYl0uc3Vic3RyaW5nKDAsIDMpLCBcIiVCXCI6IChnKSA9PiB4W2cuZWJdLCBcIiVDXCI6IChnKSA9PiBoKChnLiRhICsgMTkwMCkgLyAxMDAgfCAwLCAyKSwgXCIlZFwiOiAoZykgPT4gaChnLmliLCAyKSwgXCIlZVwiOiAoZykgPT4gZihnLmliLCAyLCBcIiBcIiksIFwiJWdcIjogKGcpID0+IG4oZykudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIFwiJUdcIjogKGcpID0+IG4oZyksIFwiJUhcIjogKGcpID0+IGgoZy5jYiwgMiksIFwiJUlcIjogKGcpID0+IHtcbiAgICAgICAgICAgICAgZyA9IGcuY2I7XG4gICAgICAgICAgICAgIDAgPT0gZyA/IGcgPSAxMiA6IDEyIDwgZyAmJiAoZyAtPSAxMik7XG4gICAgICAgICAgICAgIHJldHVybiBoKGcsIDIpO1xuICAgICAgICAgICAgfSwgXCIlalwiOiAoZykgPT4ge1xuICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMCwgeSA9IDA7IHkgPD0gZy5lYiAtIDE7IHUgKz0gKFkoZy4kYSArIDE5MDApID8gVWIgOiBWYilbeSsrXSlcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgIHJldHVybiBoKGcuaWIgKyB1LCAzKTtcbiAgICAgICAgICAgIH0sIFwiJW1cIjogKGcpID0+IGgoZy5lYiArIDEsIDIpLCBcIiVNXCI6IChnKSA9PiBoKGcuSmIsIDIpLCBcIiVuXCI6ICgpID0+IFwiXFxuXCIsIFwiJXBcIjogKGcpID0+IDAgPD0gZy5jYiAmJiAxMiA+IGcuY2IgPyBcIkFNXCIgOiBcIlBNXCIsIFwiJVNcIjogKGcpID0+IGgoZy5LYiwgMiksIFwiJXRcIjogKCkgPT4gXCJcdFwiLCBcIiV1XCI6IChnKSA9PiBnLldhIHx8IDcsIFwiJVVcIjogKGcpID0+IGgoTWF0aC5mbG9vcigoZy5aYSArIDcgLSBnLldhKSAvIDcpLCAyKSwgXCIlVlwiOiAoZykgPT4ge1xuICAgICAgICAgICAgICB2YXIgdSA9IE1hdGguZmxvb3IoKGcuWmEgKyA3IC0gKGcuV2EgKyA2KSAlIDcpIC8gNyk7XG4gICAgICAgICAgICAgIDIgPj0gKGcuV2EgKyAzNzEgLSBnLlphIC0gMikgJSA3ICYmIHUrKztcbiAgICAgICAgICAgICAgaWYgKHUpXG4gICAgICAgICAgICAgICAgNTMgPT0gdSAmJiAoeSA9IChnLldhICsgMzcxIC0gZy5aYSkgJSA3LCA0ID09IHkgfHwgMyA9PSB5ICYmIFkoZy4kYSkgfHwgKHUgPSAxKSk7XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHUgPSA1MjtcbiAgICAgICAgICAgICAgICB2YXIgeSA9IChnLldhICsgNyAtIGcuWmEgLSAxKSAlIDc7XG4gICAgICAgICAgICAgICAgKDQgPT0geSB8fCA1ID09IHkgJiYgWShnLiRhICUgNDAwIC0gMSkpICYmIHUrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gaCh1LCAyKTtcbiAgICAgICAgICAgIH0sIFwiJXdcIjogKGcpID0+IGcuV2EsIFwiJVdcIjogKGcpID0+IGgoTWF0aC5mbG9vcigoZy5aYSArIDcgLSAoZy5XYSArIDYpICUgNykgLyA3KSwgMiksIFwiJXlcIjogKGcpID0+IChnLiRhICsgMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIFwiJVlcIjogKGcpID0+IGcuJGEgKyAxOTAwLCBcIiV6XCI6IChnKSA9PiB7XG4gICAgICAgICAgICAgIGcgPSBnLkliO1xuICAgICAgICAgICAgICB2YXIgdSA9IDAgPD0gZztcbiAgICAgICAgICAgICAgZyA9IE1hdGguYWJzKGcpIC8gNjA7XG4gICAgICAgICAgICAgIHJldHVybiAodSA/IFwiK1wiIDogXCItXCIpICsgU3RyaW5nKFwiMDAwMFwiICsgKGcgLyA2MCAqIDEwMCArIGcgJSA2MCkpLnNsaWNlKC00KTtcbiAgICAgICAgICAgIH0sIFwiJVpcIjogKGcpID0+IGcuTGIsIFwiJSVcIjogKCkgPT4gXCIlXCIgfTtcbiAgICAgICAgICAgIGMgPSBjLnJlcGxhY2UoLyUlL2csIFwiXFwwXFwwXCIpO1xuICAgICAgICAgICAgZm9yIChyIGluIG0pXG4gICAgICAgICAgICAgIGMuaW5jbHVkZXMocikgJiYgKGMgPSBjLnJlcGxhY2UobmV3IFJlZ0V4cChyLCBcImdcIiksIG1bcl0oZSkpKTtcbiAgICAgICAgICAgIGMgPSBjLnJlcGxhY2UoL1xcMFxcMC9nLCBcIiVcIik7XG4gICAgICAgICAgICByID0gV2IoYyk7XG4gICAgICAgICAgICBpZiAoci5sZW5ndGggPiBiKVxuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIFhiKHIsIGEpO1xuICAgICAgICAgICAgcmV0dXJuIHIubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gWmIoYSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYSgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoYikge1xuICAgICAgICAgICAgICBNKGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiAkYihhKSB7XG4gICAgICAgICAgICB2YXIgYiA9IHt9LCBjO1xuICAgICAgICAgICAgZm9yIChjIGluIGEpXG4gICAgICAgICAgICAgIChmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBhW2VdO1xuICAgICAgICAgICAgICAgIGJbZV0gPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGYgPyBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIGFjLnB1c2goZSk7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgUCB8fCAoYWMucG9wKCkgPT09IGUgfHwgTSgpLCBEICYmIDEgPT09IFogJiYgMCA9PT0gYWMubGVuZ3RoICYmIChaID0gMCwgeGEgKz0gMSwgWmIoYmMpLCBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBGaWJlcnMgJiYgRmliZXJzLlViKCkpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IDogZjtcbiAgICAgICAgICAgICAgfSkoYyk7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIFogPSAwLCBEID0gbnVsbCwgY2MgPSAwLCBhYyA9IFtdLCBkYyA9IHt9LCBlYyA9IHt9LCBmYyA9IDAsIGdjID0gbnVsbCwgaGMgPSBbXTtcbiAgICAgICAgICBmdW5jdGlvbiBoYSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICBnYyA9IHsgcmVzb2x2ZTogYSwgcmVqZWN0OiBiIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gaWMoKSB7XG4gICAgICAgICAgICB2YXIgYSA9IEFiKDY1NTQ4KSwgYiA9IGEgKyAxMjtcbiAgICAgICAgICAgIEEoKVthID4+IDIgPj4+IDBdID0gYjtcbiAgICAgICAgICAgIEEoKVthICsgNCA+PiAyID4+PiAwXSA9IGIgKyA2NTUzNjtcbiAgICAgICAgICAgIGIgPSBhY1swXTtcbiAgICAgICAgICAgIHZhciBjID0gZGNbYl07XG4gICAgICAgICAgICB2b2lkIDAgPT09IGMgJiYgKGMgPSBmYysrLCBkY1tiXSA9IGMsIGVjW2NdID0gYik7XG4gICAgICAgICAgICBiID0gYztcbiAgICAgICAgICAgIHooKVthICsgOCA+PiAyID4+PiAwXSA9IGI7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gamMoKSB7XG4gICAgICAgICAgICB2YXIgYSA9IHooKVtEICsgOCA+PiAyID4+PiAwXTtcbiAgICAgICAgICAgIGEgPSBOW2VjW2FdXTtcbiAgICAgICAgICAgIC0teGE7XG4gICAgICAgICAgICByZXR1cm4gYSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiBrYyhhKSB7XG4gICAgICAgICAgICBpZiAoIVApIHtcbiAgICAgICAgICAgICAgaWYgKDAgPT09IFopIHtcbiAgICAgICAgICAgICAgICB2YXIgYiA9IGZhbHNlLCBjID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYSgoZSA9IDApID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghUCAmJiAoY2MgPSBlLCBiID0gdHJ1ZSwgYykpIHtcbiAgICAgICAgICAgICAgICAgICAgWiA9IDI7XG4gICAgICAgICAgICAgICAgICAgIFpiKCgpID0+IGxjKEQpKTtcbiAgICAgICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgQnJvd3NlciAmJiBCcm93c2VyLmhiLnNiICYmIEJyb3dzZXIuaGIucmVzdW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGpjKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmID0gcSwgZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBnYztcbiAgICAgICAgICAgICAgICAgICAgICBrICYmIChnYyA9IG51bGwsIChlID8gay5yZWplY3QgOiBrLnJlc29sdmUpKGYpLCBoID0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgIWgpXG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBiIHx8IChaID0gMSwgRCA9IGljKCksIFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIEJyb3dzZXIgJiYgQnJvd3Nlci5oYi5zYiAmJiBCcm93c2VyLmhiLnBhdXNlKCksIFpiKCgpID0+IG1jKEQpKSk7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIDIgPT09IFogPyAoWiA9IDAsIFpiKG5jKSwgb2MoRCksIEQgPSBudWxsLCBoYy5mb3JFYWNoKChlKSA9PiB0YihlKSkpIDogTShgaW52YWxpZCBzdGF0ZTogJHtafWApO1xuICAgICAgICAgICAgICByZXR1cm4gY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHBjKGEpIHtcbiAgICAgICAgICAgIHJldHVybiBrYygoYikgPT4ge1xuICAgICAgICAgICAgICBhKCkudGhlbihiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBXLmdiKCk7XG4gICAgICAgICAgdmFyIHFjID0gW251bGwsIE9hLCBQYSwgYmIsIGRiLCBlYiwgaWIsIGpiLCBrYiwgbGIsIG1iLCBuYiwgb2IsIHBiLCBxYiwgcmIsIHNiLCB5YiwgemIsIE1iLCBOYiwgT2IsIFBiLCBRYiwgVGJdLCB0YyA9IHtcbiAgICAgICAgICAgIHI6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHBjKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBCLnhiKGEsIGIsIGMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiOiBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgICBuZXcgWmEoYSkuZ2IoYiA+Pj4gMCwgYyA+Pj4gMCk7XG4gICAgICAgICAgICAgICRhID0gYTtcbiAgICAgICAgICAgICAgYWIrKztcbiAgICAgICAgICAgICAgdGhyb3cgJGE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTzogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICByYyhhID4+PiAwLCAhRiwgMSwgIWthLCAxMzEwNzIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgVy5sYigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGw6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIEggPyBwb3N0TWVzc2FnZSh7IGNtZDogXCJjbGVhbnVwVGhyZWFkXCIsIHRocmVhZDogYSB9KSA6IEthKGEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEk6IGNiLFxuICAgICAgICAgICAgaTogZGIsXG4gICAgICAgICAgICBVOiBlYixcbiAgICAgICAgICAgIEU6IGliLFxuICAgICAgICAgICAgRzogamIsXG4gICAgICAgICAgICBWOiBrYixcbiAgICAgICAgICAgIFM6IGxiLFxuICAgICAgICAgICAgSzogbWIsXG4gICAgICAgICAgICBSOiBuYixcbiAgICAgICAgICAgIHA6IG9iLFxuICAgICAgICAgICAgRjogcGIsXG4gICAgICAgICAgICBDOiBxYixcbiAgICAgICAgICAgIFQ6IHJiLFxuICAgICAgICAgICAgRDogc2IsXG4gICAgICAgICAgICBxOiAoKSA9PiB0cnVlLFxuICAgICAgICAgICAgQTogZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgYSA9PSBiID4+PiAwID8gc2V0VGltZW91dCgoKSA9PiBUYSgpKSA6IEggPyBwb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0VGhyZWFkOiBhLFxuICAgICAgICAgICAgICAgIGNtZDogXCJjaGVja01haWxib3hcIlxuICAgICAgICAgICAgICB9KSA6IChhID0gVy5RYVthXSkgJiYgYS5wb3N0TWVzc2FnZSh7IGNtZDogXCJjaGVja01haWxib3hcIiB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBNOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE46IHViLFxuICAgICAgICAgICAgWDogZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgICBHICYmIFcuUWFbYSA+Pj4gMF0ucmVmKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdTogZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgICAgICAgICBhID0gYiArIDIwOTcxNTIgPj4+IDAgPCA0MTk0MzA1IC0gISFhID8gKGEgPj4+IDApICsgNDI5NDk2NzI5NiAqIGIgOiBOYU47XG4gICAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgICBhID0gbmV3IERhdGUoMWUzICogYSk7XG4gICAgICAgICAgICAgIHooKVtjID4+IDIgPj4+IDBdID0gYS5nZXRVVENTZWNvbmRzKCk7XG4gICAgICAgICAgICAgIHooKVtjICsgNCA+PiAyID4+PiAwXSA9IGEuZ2V0VVRDTWludXRlcygpO1xuICAgICAgICAgICAgICB6KClbYyArIDggPj4gMiA+Pj4gMF0gPSBhLmdldFVUQ0hvdXJzKCk7XG4gICAgICAgICAgICAgIHooKVtjICsgMTIgPj4gMiA+Pj4gMF0gPSBhLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgICAgICAgeigpW2MgKyAxNiA+PiAyID4+PiAwXSA9IGEuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgICAgeigpW2MgKyAyMCA+PiAyID4+PiAwXSA9IGEuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDA7XG4gICAgICAgICAgICAgIHooKVtjICsgMjQgPj4gMiA+Pj4gMF0gPSBhLmdldFVUQ0RheSgpO1xuICAgICAgICAgICAgICBhID0gKGEuZ2V0VGltZSgpIC0gRGF0ZS5VVEMoXG4gICAgICAgICAgICAgICAgYS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICkpIC8gODY0ZTUgfCAwO1xuICAgICAgICAgICAgICB6KClbYyArIDI4ID4+IDIgPj4+IDBdID0gYTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2OiBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAgICAgIGEgPSBiICsgMjA5NzE1MiA+Pj4gMCA8IDQxOTQzMDUgLSAhIWEgPyAoYSA+Pj4gMCkgKyA0Mjk0OTY3Mjk2ICogYiA6IE5hTjtcbiAgICAgICAgICAgICAgYyA+Pj49IDA7XG4gICAgICAgICAgICAgIGEgPSBuZXcgRGF0ZSgxZTMgKiBhKTtcbiAgICAgICAgICAgICAgeigpW2MgPj4gMiA+Pj4gMF0gPSBhLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgICAgeigpW2MgKyA0ID4+IDIgPj4+IDBdID0gYS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgIHooKVtjICsgOCA+PiAyID4+PiAwXSA9IGEuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgeigpW2MgKyAxMiA+PiAyID4+PiAwXSA9IGEuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgICB6KClbYyArIDE2ID4+IDIgPj4+IDBdID0gYS5nZXRNb250aCgpO1xuICAgICAgICAgICAgICB6KClbYyArIDIwID4+IDIgPj4+IDBdID0gYS5nZXRGdWxsWWVhcigpIC0gMTkwMDtcbiAgICAgICAgICAgICAgeigpW2MgKyAyNCA+PiAyID4+PiAwXSA9IGEuZ2V0RGF5KCk7XG4gICAgICAgICAgICAgIGIgPSAoWShhLmdldEZ1bGxZZWFyKCkpID8gd2IgOiB4YilbYS5nZXRNb250aCgpXSArIGEuZ2V0RGF0ZSgpIC0gMSB8IDA7XG4gICAgICAgICAgICAgIHooKVtjICsgMjggPj4gMiA+Pj4gMF0gPSBiO1xuICAgICAgICAgICAgICB6KClbYyArIDM2ID4+IDIgPj4+IDBdID0gLSg2MCAqIGEuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgICAgICAgICAgIGIgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICBhLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgNixcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgICAgICAgdmFyIGUgPSBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksIDAsIDEpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgICAgICAgIGEgPSAoYiAhPSBlICYmIGEuZ2V0VGltZXpvbmVPZmZzZXQoKSA9PSBNYXRoLm1pbihlLCBiKSkgfCAwO1xuICAgICAgICAgICAgICB6KClbYyArIDMyID4+IDIgPj4+IDBdID0gYTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3OiBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICAgIGEgPj4+PSAwO1xuICAgICAgICAgICAgICB2YXIgYiA9IG5ldyBEYXRlKHooKVthICsgMjAgPj4gMiA+Pj4gMF0gKyAxOTAwLCB6KClbYSArIDE2ID4+IDIgPj4+IDBdLCB6KClbYSArIDEyID4+IDIgPj4+IDBdLCB6KClbYSArIDggPj4gMiA+Pj4gMF0sIHooKVthICsgNCA+PiAyID4+PiAwXSwgeigpW2EgPj4gMiA+Pj4gMF0sIDApLCBjID0geigpW2EgKyAzMiA+PiAyID4+PiAwXSwgZSA9IGIuZ2V0VGltZXpvbmVPZmZzZXQoKSwgZiA9IG5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSwgNiwgMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSwgaCA9IG5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSwgMCwgMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSwgayA9IE1hdGgubWluKGgsIGYpO1xuICAgICAgICAgICAgICAwID4gYyA/IHooKVthICsgMzIgPj4gMiA+Pj4gMF0gPSBOdW1iZXIoZiAhPSBoICYmIGsgPT0gZSkgOiAwIDwgYyAhPSAoayA9PSBlKSAmJiAoZiA9IE1hdGgubWF4KGgsIGYpLCBiLnNldFRpbWUoYi5nZXRUaW1lKCkgKyA2ZTQgKiAoKDAgPCBjID8gayA6IGYpIC0gZSkpKTtcbiAgICAgICAgICAgICAgeigpW2EgKyAyNCA+PiAyID4+PiAwXSA9IGIuZ2V0RGF5KCk7XG4gICAgICAgICAgICAgIGMgPSAoWShiLmdldEZ1bGxZZWFyKCkpID8gd2IgOiB4YilbYi5nZXRNb250aCgpXSArIGIuZ2V0RGF0ZSgpIC0gMSB8IDA7XG4gICAgICAgICAgICAgIHooKVthICsgMjggPj4gMiA+Pj4gMF0gPSBjO1xuICAgICAgICAgICAgICB6KClbYSA+PiAyID4+PiAwXSA9IGIuZ2V0U2Vjb25kcygpO1xuICAgICAgICAgICAgICB6KClbYSArIDQgPj4gMiA+Pj4gMF0gPSBiLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgeigpW2EgKyA4ID4+IDIgPj4+IDBdID0gYi5nZXRIb3VycygpO1xuICAgICAgICAgICAgICB6KClbYSArIDEyID4+IDIgPj4+IDBdID0gYi5nZXREYXRlKCk7XG4gICAgICAgICAgICAgIHooKVthICsgMTYgPj4gMiA+Pj4gMF0gPSBiLmdldE1vbnRoKCk7XG4gICAgICAgICAgICAgIHooKVthICsgMjAgPj4gMiA+Pj4gMF0gPSBiLmdldFllYXIoKTtcbiAgICAgICAgICAgICAgYSA9IGIuZ2V0VGltZSgpIC8gMWUzO1xuICAgICAgICAgICAgICByZXR1cm4gc2MoKFUgPSBhLCAxIDw9ICtNYXRoLmFicyhVKSA/IDAgPCBVID8gK01hdGguZmxvb3IoVSAvIDQyOTQ5NjcyOTYpID4+PiAwIDogfn4rTWF0aC5jZWlsKChVIC0gKyh+flUgPj4+IDApKSAvIDQyOTQ5NjcyOTYpID4+PiAwIDogMCkpLCBhID4+PiAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6IHliLFxuICAgICAgICAgICAgdDogemIsXG4gICAgICAgICAgICB6OiBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGUobSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAobSA9IG0udG9UaW1lU3RyaW5nKCkubWF0Y2goL1xcKChbQS1aYS16IF0rKVxcKSQvKSkgPyBtWzFdIDogXCJHTVRcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhID4+Pj0gMDtcbiAgICAgICAgICAgICAgYiA+Pj49IDA7XG4gICAgICAgICAgICAgIGMgPj4+PSAwO1xuICAgICAgICAgICAgICB2YXIgZiA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0RnVsbFllYXIoKSwgaCA9IG5ldyBEYXRlKGYsIDAsIDEpLCBrID0gbmV3IERhdGUoZiwgNiwgMSk7XG4gICAgICAgICAgICAgIGYgPSBoLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgICAgICAgIHZhciBxID0gay5nZXRUaW1lem9uZU9mZnNldCgpLCBuID0gTWF0aC5tYXgoZiwgcSk7XG4gICAgICAgICAgICAgIEEoKVthID4+IDIgPj4+IDBdID0gNjAgKiBuO1xuICAgICAgICAgICAgICB6KClbYiA+PiAyID4+PiAwXSA9IE51bWJlcihmICE9IHEpO1xuICAgICAgICAgICAgICBhID0gZShoKTtcbiAgICAgICAgICAgICAgYiA9IGUoayk7XG4gICAgICAgICAgICAgIGEgPSBCYihhKTtcbiAgICAgICAgICAgICAgYiA9IEJiKGIpO1xuICAgICAgICAgICAgICBxIDwgZiA/IChBKClbYyA+PiAyID4+PiAwXSA9IGEsIEEoKVtjICsgNCA+PiAyID4+PiAwXSA9IGIpIDogKEEoKVtjID4+IDIgPj4+IDBdID0gYiwgQSgpW2MgKyA0ID4+IDIgPj4+IDBdID0gYSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZDogKCkgPT4ge1xuICAgICAgICAgICAgICBNKFwiXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGM6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIGIgPSBEYihiID4+PiAwLCBjID4+PiAwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIEhhW2FdLmFwcGx5KG51bGwsIGIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGs6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIGIgPSBEYihiID4+PiAwLCBjID4+PiAwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIEhhW2FdLmFwcGx5KG51bGwsIGIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG06IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGo6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBXOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHhhICs9IDE7XG4gICAgICAgICAgICAgIHRocm93IFwidW53aW5kXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiA0Mjk0OTAxNzYwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGY6ICgpID0+IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICAgICAgICAgIGc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gRyA/IChpbml0X29zKCksIF9fdG9Db21tb25KUyhvc19leHBvcnRzKSkuY3B1cygpLmxlbmd0aCA6IG5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEw6IGZ1bmN0aW9uKGEsIGIsIGMsIGUpIHtcbiAgICAgICAgICAgICAgVy5QYiA9IGIgPj4+IDA7XG4gICAgICAgICAgICAgIEliLmxlbmd0aCA9IGM7XG4gICAgICAgICAgICAgIGIgPSBlID4+PiAwID4+IDM7XG4gICAgICAgICAgICAgIGZvciAoZSA9IDA7IGUgPCBjOyBlKyspXG4gICAgICAgICAgICAgICAgSWJbZV0gPSBkYSgpW2IgKyBlID4+PiAwXTtcbiAgICAgICAgICAgICAgcmV0dXJuICgwID4gYSA/IEhhWy1hIC0gMV0gOiBxY1thXSkuYXBwbHkobnVsbCwgSWIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHk6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgICAgICAgYSA+Pj49IDA7XG4gICAgICAgICAgICAgIHZhciBiID0gdigpLmxlbmd0aDtcbiAgICAgICAgICAgICAgaWYgKGEgPD0gYiB8fCA0Mjk0OTAxNzYwIDwgYSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIGZvciAodmFyIGMgPSAxOyA0ID49IGM7IGMgKj0gMikge1xuICAgICAgICAgICAgICAgIHZhciBlID0gYiAqICgxICsgMC4yIC8gYyk7XG4gICAgICAgICAgICAgICAgZSA9IE1hdGgubWluKGUsIGEgKyAxMDA2NjMyOTYpO1xuICAgICAgICAgICAgICAgIHZhciBmID0gTWF0aDtcbiAgICAgICAgICAgICAgICBlID0gTWF0aC5tYXgoYSwgZSk7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgZiA9IGYubWluLmNhbGwoZiwgNDI5NDkwMTc2MCwgZSArICg2NTUzNiAtIGUgJSA2NTUzNikgJSA2NTUzNikgLSBsLmJ1ZmZlci5ieXRlTGVuZ3RoICsgNjU1MzUgPj4+IDE2O1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbC5ncm93KGYpO1xuICAgICAgICAgICAgICAgICAgICB0KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoID0gMTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGggPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFA6IE1iLFxuICAgICAgICAgICAgUTogTmIsXG4gICAgICAgICAgICBIOiBRYSxcbiAgICAgICAgICAgIGg6IE9iLFxuICAgICAgICAgICAgbzogUGIsXG4gICAgICAgICAgICB4OiBRYixcbiAgICAgICAgICAgIG46IFRiLFxuICAgICAgICAgICAgYTogbCB8fCBCLndhc21NZW1vcnksXG4gICAgICAgICAgICBKOiBZYixcbiAgICAgICAgICAgIGU6IGZ1bmN0aW9uKGEsIGIsIGMsIGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFliKGEgPj4+IDAsIGIgPj4+IDAsIGMgPj4+IDAsIGUgPj4+IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gYShjLCBlKSB7XG4gICAgICAgICAgICAgIGMgPSBjLmV4cG9ydHM7XG4gICAgICAgICAgICAgIGMgPSAkYihjKTtcbiAgICAgICAgICAgICAgTiA9IGMgPSB1YyhjKTtcbiAgICAgICAgICAgICAgVy5tYi5wdXNoKE4uRGEpO1xuICAgICAgICAgICAgICB2YS51bnNoaWZ0KE4uWSk7XG4gICAgICAgICAgICAgIHNhID0gZTtcbiAgICAgICAgICAgICAgQmEoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYiA9IHsgYTogdGMgfTtcbiAgICAgICAgICAgIEFhKCk7XG4gICAgICAgICAgICBpZiAoQi5pbnN0YW50aWF0ZVdhc20pXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEIuaW5zdGFudGlhdGVXYXNtKGIsIGEpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgSyhcIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6IFwiICsgYyksIEMoYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEdhKGIsIGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICAgICAgYShjLmluc3RhbmNlLCBjLm1vZHVsZSk7XG4gICAgICAgICAgICB9KS5jYXRjaChDKTtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIEIuX09ydEluaXQgPSAoYSwgYikgPT4gKEIuX09ydEluaXQgPSBOLlopKGEsIGIpO1xuICAgICAgICAgIEIuX09ydEdldExhc3RFcnJvciA9IChhLCBiKSA9PiAoQi5fT3J0R2V0TGFzdEVycm9yID0gTi5fKShhLCBiKTtcbiAgICAgICAgICBCLl9PcnRDcmVhdGVTZXNzaW9uT3B0aW9ucyA9IChhLCBiLCBjLCBlLCBmLCBoLCBrLCBxLCBuLCBtKSA9PiAoQi5fT3J0Q3JlYXRlU2Vzc2lvbk9wdGlvbnMgPSBOLiQpKGEsIGIsIGMsIGUsIGYsIGgsIGssIHEsIG4sIG0pO1xuICAgICAgICAgIEIuX09ydEFwcGVuZEV4ZWN1dGlvblByb3ZpZGVyID0gKGEsIGIpID0+IChCLl9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlciA9IE4uYWEpKGEsIGIpO1xuICAgICAgICAgIEIuX09ydEFkZEZyZWVEaW1lbnNpb25PdmVycmlkZSA9IChhLCBiLCBjKSA9PiAoQi5fT3J0QWRkRnJlZURpbWVuc2lvbk92ZXJyaWRlID0gTi5iYSkoYSwgYiwgYyk7XG4gICAgICAgICAgQi5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5ID0gKGEsIGIsIGMpID0+IChCLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkgPSBOLmNhKShhLCBiLCBjKTtcbiAgICAgICAgICBCLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnMgPSAoYSkgPT4gKEIuX09ydFJlbGVhc2VTZXNzaW9uT3B0aW9ucyA9IE4uZGEpKGEpO1xuICAgICAgICAgIEIuX09ydENyZWF0ZVNlc3Npb24gPSAoYSwgYiwgYykgPT4gKEIuX09ydENyZWF0ZVNlc3Npb24gPSBOLmVhKShhLCBiLCBjKTtcbiAgICAgICAgICBCLl9PcnRSZWxlYXNlU2Vzc2lvbiA9IChhKSA9PiAoQi5fT3J0UmVsZWFzZVNlc3Npb24gPSBOLmZhKShhKTtcbiAgICAgICAgICBCLl9PcnRHZXRJbnB1dE91dHB1dENvdW50ID0gKGEsIGIsIGMpID0+IChCLl9PcnRHZXRJbnB1dE91dHB1dENvdW50ID0gTi5nYSkoYSwgYiwgYyk7XG4gICAgICAgICAgQi5fT3J0R2V0SW5wdXROYW1lID0gKGEsIGIpID0+IChCLl9PcnRHZXRJbnB1dE5hbWUgPSBOLmhhKShhLCBiKTtcbiAgICAgICAgICBCLl9PcnRHZXRPdXRwdXROYW1lID0gKGEsIGIpID0+IChCLl9PcnRHZXRPdXRwdXROYW1lID0gTi5pYSkoYSwgYik7XG4gICAgICAgICAgQi5fT3J0RnJlZSA9IChhKSA9PiAoQi5fT3J0RnJlZSA9IE4uamEpKGEpO1xuICAgICAgICAgIEIuX09ydENyZWF0ZVRlbnNvciA9IChhLCBiLCBjLCBlLCBmLCBoKSA9PiAoQi5fT3J0Q3JlYXRlVGVuc29yID0gTi5rYSkoYSwgYiwgYywgZSwgZiwgaCk7XG4gICAgICAgICAgQi5fT3J0R2V0VGVuc29yRGF0YSA9IChhLCBiLCBjLCBlLCBmKSA9PiAoQi5fT3J0R2V0VGVuc29yRGF0YSA9IE4ubGEpKGEsIGIsIGMsIGUsIGYpO1xuICAgICAgICAgIEIuX09ydFJlbGVhc2VUZW5zb3IgPSAoYSkgPT4gKEIuX09ydFJlbGVhc2VUZW5zb3IgPSBOLm1hKShhKTtcbiAgICAgICAgICBCLl9PcnRDcmVhdGVSdW5PcHRpb25zID0gKGEsIGIsIGMsIGUpID0+IChCLl9PcnRDcmVhdGVSdW5PcHRpb25zID0gTi5uYSkoYSwgYiwgYywgZSk7XG4gICAgICAgICAgQi5fT3J0QWRkUnVuQ29uZmlnRW50cnkgPSAoYSwgYiwgYykgPT4gKEIuX09ydEFkZFJ1bkNvbmZpZ0VudHJ5ID0gTi5vYSkoYSwgYiwgYyk7XG4gICAgICAgICAgQi5fT3J0UmVsZWFzZVJ1bk9wdGlvbnMgPSAoYSkgPT4gKEIuX09ydFJlbGVhc2VSdW5PcHRpb25zID0gTi5wYSkoYSk7XG4gICAgICAgICAgQi5fT3J0Q3JlYXRlQmluZGluZyA9IChhKSA9PiAoQi5fT3J0Q3JlYXRlQmluZGluZyA9IE4ucWEpKGEpO1xuICAgICAgICAgIEIuX09ydEJpbmRJbnB1dCA9IChhLCBiLCBjKSA9PiAoQi5fT3J0QmluZElucHV0ID0gTi5yYSkoYSwgYiwgYyk7XG4gICAgICAgICAgQi5fT3J0QmluZE91dHB1dCA9IChhLCBiLCBjLCBlKSA9PiAoQi5fT3J0QmluZE91dHB1dCA9IE4uc2EpKGEsIGIsIGMsIGUpO1xuICAgICAgICAgIEIuX09ydENsZWFyQm91bmRPdXRwdXRzID0gKGEpID0+IChCLl9PcnRDbGVhckJvdW5kT3V0cHV0cyA9IE4udGEpKGEpO1xuICAgICAgICAgIEIuX09ydFJlbGVhc2VCaW5kaW5nID0gKGEpID0+IChCLl9PcnRSZWxlYXNlQmluZGluZyA9IE4udWEpKGEpO1xuICAgICAgICAgIEIuX09ydFJ1bldpdGhCaW5kaW5nID0gKGEsIGIsIGMsIGUsIGYpID0+IChCLl9PcnRSdW5XaXRoQmluZGluZyA9IE4udmEpKGEsIGIsIGMsIGUsIGYpO1xuICAgICAgICAgIEIuX09ydFJ1biA9IChhLCBiLCBjLCBlLCBmLCBoLCBrLCBxKSA9PiAoQi5fT3J0UnVuID0gTi53YSkoYSwgYiwgYywgZSwgZiwgaCwgaywgcSk7XG4gICAgICAgICAgQi5fT3J0RW5kUHJvZmlsaW5nID0gKGEpID0+IChCLl9PcnRFbmRQcm9maWxpbmcgPSBOLnhhKShhKTtcbiAgICAgICAgICBCLl9Kc2VwT3V0cHV0ID0gKGEsIGIsIGMpID0+IChCLl9Kc2VwT3V0cHV0ID0gTi55YSkoYSwgYiwgYyk7XG4gICAgICAgICAgQi5fSnNlcEdldE5vZGVOYW1lID0gKGEpID0+IChCLl9Kc2VwR2V0Tm9kZU5hbWUgPSBOLnphKShhKTtcbiAgICAgICAgICB2YXIgU2EgPSBCLl9wdGhyZWFkX3NlbGYgPSAoKSA9PiAoU2EgPSBCLl9wdGhyZWFkX3NlbGYgPSBOLkFhKSgpLCBBYiA9IEIuX21hbGxvYyA9IChhKSA9PiAoQWIgPSBCLl9tYWxsb2MgPSBOLkJhKShhKSwgb2MgPSBCLl9mcmVlID0gKGEpID0+IChvYyA9IEIuX2ZyZWUgPSBOLkNhKShhKTtcbiAgICAgICAgICBCLl9fZW1zY3JpcHRlbl90bHNfaW5pdCA9ICgpID0+IChCLl9fZW1zY3JpcHRlbl90bHNfaW5pdCA9IE4uRGEpKCk7XG4gICAgICAgICAgdmFyIHJjID0gQi5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2luaXQgPSAoYSwgYiwgYywgZSwgZiwgaCkgPT4gKHJjID0gQi5fX2Vtc2NyaXB0ZW5fdGhyZWFkX2luaXQgPSBOLkZhKShhLCBiLCBjLCBlLCBmLCBoKTtcbiAgICAgICAgICBCLl9fZW1zY3JpcHRlbl90aHJlYWRfY3Jhc2hlZCA9ICgpID0+IChCLl9fZW1zY3JpcHRlbl90aHJlYWRfY3Jhc2hlZCA9IE4uR2EpKCk7XG4gICAgICAgICAgdmFyIEhiID0gKGEsIGIsIGMsIGUpID0+IChIYiA9IE4uSGEpKGEsIGIsIGMsIGUpLCBSYSA9IChhKSA9PiAoUmEgPSBOLklhKShhKSwgWWEgPSBCLl9fZW1zY3JpcHRlbl90aHJlYWRfZXhpdCA9IChhKSA9PiAoWWEgPSBCLl9fZW1zY3JpcHRlbl90aHJlYWRfZXhpdCA9IE4uSmEpKGEpLCB2YiA9IEIuX19lbXNjcmlwdGVuX2NoZWNrX21haWxib3ggPSAoKSA9PiAodmIgPSBCLl9fZW1zY3JpcHRlbl9jaGVja19tYWlsYm94ID0gTi5LYSkoKSwgc2MgPSAoYSkgPT4gKHNjID0gTi5MYSkoYSksIFZhID0gKGEsIGIpID0+IChWYSA9IE4uTWEpKGEsIGIpLCBFYiA9ICgpID0+IChFYiA9IE4uTmEpKCksIFdhID0gKGEpID0+IChXYSA9IE4uT2EpKGEpLCBHYiA9IChhKSA9PiAoR2IgPSBOLlBhKShhKSwgWGEgPSBCLmR5bkNhbGxfaWkgPSAoYSwgYikgPT4gKFhhID0gQi5keW5DYWxsX2lpID0gTi5SYSkoYSwgYiksIG1jID0gKGEpID0+IChtYyA9IE4uU2EpKGEpLCBiYyA9ICgpID0+IChiYyA9IE4uVGEpKCksIGxjID0gKGEpID0+IChsYyA9IE4uVWEpKGEpLCBuYyA9ICgpID0+IChuYyA9IE4uVmEpKCk7XG4gICAgICAgICAgQi5fX19zdGFydF9lbV9qcyA9IDkxNzY3ODtcbiAgICAgICAgICBCLl9fX3N0b3BfZW1fanMgPSA5MTc4Mzk7XG4gICAgICAgICAgZnVuY3Rpb24gdWMoYSkge1xuICAgICAgICAgICAgYSA9IE9iamVjdC5hc3NpZ24oe30sIGEpO1xuICAgICAgICAgICAgdmFyIGIgPSAoZSkgPT4gKCkgPT4gZSgpID4+PiAwLCBjID0gKGUpID0+IChmKSA9PiBlKGYpID4+PiAwO1xuICAgICAgICAgICAgYS5fX2Vycm5vX2xvY2F0aW9uID0gYihhLl9fZXJybm9fbG9jYXRpb24pO1xuICAgICAgICAgICAgYS5wdGhyZWFkX3NlbGYgPSBiKGEucHRocmVhZF9zZWxmKTtcbiAgICAgICAgICAgIGEubWFsbG9jID0gYyhhLm1hbGxvYyk7XG4gICAgICAgICAgICBhLnN0YWNrU2F2ZSA9IGIoYS5zdGFja1NhdmUpO1xuICAgICAgICAgICAgYS5zdGFja0FsbG9jID0gYyhhLnN0YWNrQWxsb2MpO1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIEIua2VlcFJ1bnRpbWVBbGl2ZSA9IHlhO1xuICAgICAgICAgIEIud2FzbU1lbW9yeSA9IGw7XG4gICAgICAgICAgQi5zdGFja0FsbG9jID0gR2I7XG4gICAgICAgICAgQi5zdGFja1NhdmUgPSBFYjtcbiAgICAgICAgICBCLnN0YWNrUmVzdG9yZSA9IFdhO1xuICAgICAgICAgIEIuVVRGOFRvU3RyaW5nID0gVjtcbiAgICAgICAgICBCLnN0cmluZ1RvVVRGOCA9IGhiO1xuICAgICAgICAgIEIubGVuZ3RoQnl0ZXNVVEY4ID0gZmI7XG4gICAgICAgICAgQi5FeGl0U3RhdHVzID0gSWE7XG4gICAgICAgICAgQi5QVGhyZWFkID0gVztcbiAgICAgICAgICB2YXIgdmM7XG4gICAgICAgICAgUyA9IGZ1bmN0aW9uIHdjKCkge1xuICAgICAgICAgICAgdmMgfHwgeGMoKTtcbiAgICAgICAgICAgIHZjIHx8IChTID0gd2MpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgZnVuY3Rpb24geGMoKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBhKCkge1xuICAgICAgICAgICAgICBpZiAoIXZjICYmICh2YyA9IHRydWUsIEIuY2FsbGVkUnVuID0gdHJ1ZSwgIVApKSB7XG4gICAgICAgICAgICAgICAgSCB8fCBVYSh2YSk7XG4gICAgICAgICAgICAgICAgZmEoQik7XG4gICAgICAgICAgICAgICAgaWYgKEIub25SdW50aW1lSW5pdGlhbGl6ZWQpXG4gICAgICAgICAgICAgICAgICBCLm9uUnVudGltZUluaXRpYWxpemVkKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFIKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoQi5wb3N0UnVuKVxuICAgICAgICAgICAgICAgICAgICBmb3IgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgQi5wb3N0UnVuICYmIChCLnBvc3RSdW4gPSBbQi5wb3N0UnVuXSk7IEIucG9zdFJ1bi5sZW5ndGg7ICkge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gQi5wb3N0UnVuLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgd2EudW5zaGlmdChiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgVWEod2EpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEoMCA8IFIpKVxuICAgICAgICAgICAgICBpZiAoSClcbiAgICAgICAgICAgICAgICBmYShCKSwgSCB8fCBVYSh2YSksIHN0YXJ0V29ya2VyKEIpO1xuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoQi5wcmVSdW4pXG4gICAgICAgICAgICAgICAgICBmb3IgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgQi5wcmVSdW4gJiYgKEIucHJlUnVuID0gW0IucHJlUnVuXSk7IEIucHJlUnVuLmxlbmd0aDsgKVxuICAgICAgICAgICAgICAgICAgICB1YS51bnNoaWZ0KEIucHJlUnVuLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgIFVhKHVhKTtcbiAgICAgICAgICAgICAgICAwIDwgUiB8fCAoQi5zZXRTdGF0dXMgPyAoQi5zZXRTdGF0dXMoXCJSdW5uaW5nLi4uXCIpLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgQi5zZXRTdGF0dXMoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBhKCk7XG4gICAgICAgICAgICAgICAgfSwgMSkpIDogYSgpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQi5wcmVJbml0KVxuICAgICAgICAgICAgZm9yIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIEIucHJlSW5pdCAmJiAoQi5wcmVJbml0ID0gW0IucHJlSW5pdF0pOyAwIDwgQi5wcmVJbml0Lmxlbmd0aDsgKVxuICAgICAgICAgICAgICBCLnByZUluaXQucG9wKCkoKTtcbiAgICAgICAgICB4YygpO1xuICAgICAgICAgIHJldHVybiBtb2R1bGVBcmcucmVhZHk7XG4gICAgICAgIH07XG4gICAgICB9KSgpO1xuICAgICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIpXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gb3J0V2FzbVRocmVhZGVkO1xuICAgICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZVtcImFtZFwiXSlcbiAgICAgICAgZGVmaW5lKFtdLCAoKSA9PiBvcnRXYXNtVGhyZWFkZWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQud29ya2VyLmpzXG4gIHZhciByZXF1aXJlX29ydF93YXNtX3RocmVhZGVkX3dvcmtlciA9IF9fY29tbW9uSlMoe1xuICAgIFwid2ViL2xpYi93YXNtL2JpbmRpbmcvb3J0LXdhc20tdGhyZWFkZWQud29ya2VyLmpzXCIoZXhwb3J0cywgbW9kdWxlKSB7XG4gICAgICBtb2R1bGUuZXhwb3J0cyA9ICdcInVzZSBzdHJpY3RcIjt2YXIgTW9kdWxlPXt9O3ZhciBFTlZJUk9OTUVOVF9JU19OT0RFPXR5cGVvZiBwcm9jZXNzPT1cIm9iamVjdFwiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucz09XCJvYmplY3RcIiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09XCJzdHJpbmdcIjtpZihFTlZJUk9OTUVOVF9JU19OT0RFKXt2YXIgbm9kZVdvcmtlclRocmVhZHM9cmVxdWlyZShcIndvcmtlcl90aHJlYWRzXCIpO3ZhciBwYXJlbnRQb3J0PW5vZGVXb3JrZXJUaHJlYWRzLnBhcmVudFBvcnQ7cGFyZW50UG9ydC5vbihcIm1lc3NhZ2VcIixkYXRhPT5vbm1lc3NhZ2Uoe2RhdGE6ZGF0YX0pKTt2YXIgZnM9cmVxdWlyZShcImZzXCIpO09iamVjdC5hc3NpZ24oZ2xvYmFsLHtzZWxmOmdsb2JhbCxyZXF1aXJlOnJlcXVpcmUsTW9kdWxlOk1vZHVsZSxsb2NhdGlvbjp7aHJlZjpfX2ZpbGVuYW1lfSxXb3JrZXI6bm9kZVdvcmtlclRocmVhZHMuV29ya2VyLGltcG9ydFNjcmlwdHM6Zj0+KDAsZXZhbCkoZnMucmVhZEZpbGVTeW5jKGYsXCJ1dGY4XCIpK1wiLy8jIHNvdXJjZVVSTD1cIitmKSxwb3N0TWVzc2FnZTptc2c9PnBhcmVudFBvcnQucG9zdE1lc3NhZ2UobXNnKSxwZXJmb3JtYW5jZTpnbG9iYWwucGVyZm9ybWFuY2V8fHtub3c6RGF0ZS5ub3d9fSl9dmFyIGluaXRpYWxpemVkSlM9ZmFsc2U7ZnVuY3Rpb24gdGhyZWFkUHJpbnRFcnIoKXt2YXIgdGV4dD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO2lmKEVOVklST05NRU5UX0lTX05PREUpe2ZzLndyaXRlU3luYygyLHRleHQrXCJcXFxcblwiKTtyZXR1cm59Y29uc29sZS5lcnJvcih0ZXh0KX1mdW5jdGlvbiB0aHJlYWRBbGVydCgpe3ZhciB0ZXh0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7cG9zdE1lc3NhZ2Uoe2NtZDpcImFsZXJ0XCIsdGV4dDp0ZXh0LHRocmVhZElkOk1vZHVsZVtcIl9wdGhyZWFkX3NlbGZcIl0oKX0pfXZhciBlcnI9dGhyZWFkUHJpbnRFcnI7c2VsZi5hbGVydD10aHJlYWRBbGVydDtNb2R1bGVbXCJpbnN0YW50aWF0ZVdhc21cIl09KGluZm8scmVjZWl2ZUluc3RhbmNlKT0+e3ZhciBtb2R1bGU9TW9kdWxlW1wid2FzbU1vZHVsZVwiXTtNb2R1bGVbXCJ3YXNtTW9kdWxlXCJdPW51bGw7dmFyIGluc3RhbmNlPW5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsaW5mbyk7cmV0dXJuIHJlY2VpdmVJbnN0YW5jZShpbnN0YW5jZSl9O3NlbGYub251bmhhbmRsZWRyZWplY3Rpb249ZT0+e3Rocm93IGUucmVhc29uPz9lfTtmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKGUpe3RyeXtpZihlLmRhdGEuY21kPT09XCJsb2FkXCIpe2xldCBtZXNzYWdlUXVldWU9W107c2VsZi5vbm1lc3NhZ2U9ZT0+bWVzc2FnZVF1ZXVlLnB1c2goZSk7c2VsZi5zdGFydFdvcmtlcj1pbnN0YW5jZT0+e01vZHVsZT1pbnN0YW5jZTtwb3N0TWVzc2FnZSh7XCJjbWRcIjpcImxvYWRlZFwifSk7Zm9yKGxldCBtc2cgb2YgbWVzc2FnZVF1ZXVlKXtoYW5kbGVNZXNzYWdlKG1zZyl9c2VsZi5vbm1lc3NhZ2U9aGFuZGxlTWVzc2FnZX07TW9kdWxlW1wid2FzbU1vZHVsZVwiXT1lLmRhdGEud2FzbU1vZHVsZTtmb3IoY29uc3QgaGFuZGxlciBvZiBlLmRhdGEuaGFuZGxlcnMpe01vZHVsZVtoYW5kbGVyXT0oLi4uYXJncyk9Pntwb3N0TWVzc2FnZSh7Y21kOlwiY2FsbEhhbmRsZXJcIixoYW5kbGVyOmhhbmRsZXIsYXJnczphcmdzfSl9fU1vZHVsZVtcIndhc21NZW1vcnlcIl09ZS5kYXRhLndhc21NZW1vcnk7TW9kdWxlW1wiYnVmZmVyXCJdPU1vZHVsZVtcIndhc21NZW1vcnlcIl0uYnVmZmVyO01vZHVsZVtcIkVOVklST05NRU5UX0lTX1BUSFJFQURcIl09dHJ1ZTtpZih0eXBlb2YgZS5kYXRhLnVybE9yQmxvYj09XCJzdHJpbmdcIil7aW1wb3J0U2NyaXB0cyhlLmRhdGEudXJsT3JCbG9iKX1lbHNle3ZhciBvYmplY3RVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTChlLmRhdGEudXJsT3JCbG9iKTtpbXBvcnRTY3JpcHRzKG9iamVjdFVybCk7VVJMLnJldm9rZU9iamVjdFVSTChvYmplY3RVcmwpfW9ydFdhc21UaHJlYWRlZChNb2R1bGUpfWVsc2UgaWYoZS5kYXRhLmNtZD09PVwicnVuXCIpe01vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfaW5pdFwiXShlLmRhdGEucHRocmVhZF9wdHIsLyppc01haW5Ccm93c2VyVGhyZWFkPSovMCwvKmlzTWFpblJ1bnRpbWVUaHJlYWQ9Ki8wLC8qY2FuQmxvY2s9Ki8xKTtNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX21haWxib3hfYXdhaXRcIl0oZS5kYXRhLnB0aHJlYWRfcHRyKTtNb2R1bGVbXCJlc3RhYmxpc2hTdGFja1NwYWNlXCJdKCk7TW9kdWxlW1wiUFRocmVhZFwiXS5yZWNlaXZlT2JqZWN0VHJhbnNmZXIoZS5kYXRhKTtNb2R1bGVbXCJQVGhyZWFkXCJdLnRocmVhZEluaXRUTFMoKTtpZighaW5pdGlhbGl6ZWRKUyl7aW5pdGlhbGl6ZWRKUz10cnVlfXRyeXtNb2R1bGVbXCJpbnZva2VFbnRyeVBvaW50XCJdKGUuZGF0YS5zdGFydF9yb3V0aW5lLGUuZGF0YS5hcmcpfWNhdGNoKGV4KXtpZihleCE9XCJ1bndpbmRcIil7dGhyb3cgZXh9fX1lbHNlIGlmKGUuZGF0YS5jbWQ9PT1cImNhbmNlbFwiKXtpZihNb2R1bGVbXCJfcHRocmVhZF9zZWxmXCJdKCkpe01vZHVsZVtcIl9fZW1zY3JpcHRlbl90aHJlYWRfZXhpdFwiXSgtMSl9fWVsc2UgaWYoZS5kYXRhLnRhcmdldD09PVwic2V0aW1tZWRpYXRlXCIpe31lbHNlIGlmKGUuZGF0YS5jbWQ9PT1cImNoZWNrTWFpbGJveFwiKXtpZihpbml0aWFsaXplZEpTKXtNb2R1bGVbXCJjaGVja01haWxib3hcIl0oKX19ZWxzZSBpZihlLmRhdGEuY21kKXtlcnIoXCJ3b3JrZXIuanMgcmVjZWl2ZWQgdW5rbm93biBjb21tYW5kIFwiK2UuZGF0YS5jbWQpO2VycihlLmRhdGEpfX1jYXRjaChleCl7aWYoTW9kdWxlW1wiX19lbXNjcmlwdGVuX3RocmVhZF9jcmFzaGVkXCJdKXtNb2R1bGVbXCJfX2Vtc2NyaXB0ZW5fdGhyZWFkX2NyYXNoZWRcIl0oKX10aHJvdyBleH19c2VsZi5vbm1lc3NhZ2U9aGFuZGxlTWVzc2FnZTtcXG4nO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL3dhc20tY29tbW9uLnRzXG4gIHZhciB0ZW5zb3JEYXRhVHlwZVN0cmluZ1RvRW51bSwgdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcsIGdldFRlbnNvckVsZW1lbnRTaXplLCB0ZW5zb3JUeXBlVG9UeXBlZEFycmF5Q29uc3RydWN0b3IsIGxvZ0xldmVsU3RyaW5nVG9FbnVtLCBpc0dwdUJ1ZmZlclN1cHBvcnRlZFR5cGUsIGRhdGFMb2NhdGlvblN0cmluZ1RvRW51bTtcbiAgdmFyIGluaXRfd2FzbV9jb21tb24gPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vd2FzbS1jb21tb24udHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgdGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0gPSAodHlwZSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiaW50OFwiOlxuICAgICAgICAgICAgcmV0dXJuIDMgLyogaW50OCAqLztcbiAgICAgICAgICBjYXNlIFwidWludDhcIjpcbiAgICAgICAgICAgIHJldHVybiAyIC8qIHVpbnQ4ICovO1xuICAgICAgICAgIGNhc2UgXCJib29sXCI6XG4gICAgICAgICAgICByZXR1cm4gOSAvKiBib29sICovO1xuICAgICAgICAgIGNhc2UgXCJpbnQxNlwiOlxuICAgICAgICAgICAgcmV0dXJuIDUgLyogaW50MTYgKi87XG4gICAgICAgICAgY2FzZSBcInVpbnQxNlwiOlxuICAgICAgICAgICAgcmV0dXJuIDQgLyogdWludDE2ICovO1xuICAgICAgICAgIGNhc2UgXCJpbnQzMlwiOlxuICAgICAgICAgICAgcmV0dXJuIDYgLyogaW50MzIgKi87XG4gICAgICAgICAgY2FzZSBcInVpbnQzMlwiOlxuICAgICAgICAgICAgcmV0dXJuIDEyIC8qIHVpbnQzMiAqLztcbiAgICAgICAgICBjYXNlIFwiZmxvYXQxNlwiOlxuICAgICAgICAgICAgcmV0dXJuIDEwIC8qIGZsb2F0MTYgKi87XG4gICAgICAgICAgY2FzZSBcImZsb2F0MzJcIjpcbiAgICAgICAgICAgIHJldHVybiAxIC8qIGZsb2F0ICovO1xuICAgICAgICAgIGNhc2UgXCJmbG9hdDY0XCI6XG4gICAgICAgICAgICByZXR1cm4gMTEgLyogZG91YmxlICovO1xuICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgIHJldHVybiA4IC8qIHN0cmluZyAqLztcbiAgICAgICAgICBjYXNlIFwiaW50NjRcIjpcbiAgICAgICAgICAgIHJldHVybiA3IC8qIGludDY0ICovO1xuICAgICAgICAgIGNhc2UgXCJ1aW50NjRcIjpcbiAgICAgICAgICAgIHJldHVybiAxMyAvKiB1aW50NjQgKi87XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlOiAke3R5cGV9YCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0ZW5zb3JEYXRhVHlwZUVudW1Ub1N0cmluZyA9ICh0eXBlUHJvdG8pID0+IHtcbiAgICAgICAgc3dpdGNoICh0eXBlUHJvdG8pIHtcbiAgICAgICAgICBjYXNlIDMgLyogaW50OCAqLzpcbiAgICAgICAgICAgIHJldHVybiBcImludDhcIjtcbiAgICAgICAgICBjYXNlIDIgLyogdWludDggKi86XG4gICAgICAgICAgICByZXR1cm4gXCJ1aW50OFwiO1xuICAgICAgICAgIGNhc2UgOSAvKiBib29sICovOlxuICAgICAgICAgICAgcmV0dXJuIFwiYm9vbFwiO1xuICAgICAgICAgIGNhc2UgNSAvKiBpbnQxNiAqLzpcbiAgICAgICAgICAgIHJldHVybiBcImludDE2XCI7XG4gICAgICAgICAgY2FzZSA0IC8qIHVpbnQxNiAqLzpcbiAgICAgICAgICAgIHJldHVybiBcInVpbnQxNlwiO1xuICAgICAgICAgIGNhc2UgNiAvKiBpbnQzMiAqLzpcbiAgICAgICAgICAgIHJldHVybiBcImludDMyXCI7XG4gICAgICAgICAgY2FzZSAxMiAvKiB1aW50MzIgKi86XG4gICAgICAgICAgICByZXR1cm4gXCJ1aW50MzJcIjtcbiAgICAgICAgICBjYXNlIDEwIC8qIGZsb2F0MTYgKi86XG4gICAgICAgICAgICByZXR1cm4gXCJmbG9hdDE2XCI7XG4gICAgICAgICAgY2FzZSAxIC8qIGZsb2F0ICovOlxuICAgICAgICAgICAgcmV0dXJuIFwiZmxvYXQzMlwiO1xuICAgICAgICAgIGNhc2UgMTEgLyogZG91YmxlICovOlxuICAgICAgICAgICAgcmV0dXJuIFwiZmxvYXQ2NFwiO1xuICAgICAgICAgIGNhc2UgOCAvKiBzdHJpbmcgKi86XG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgICBjYXNlIDcgLyogaW50NjQgKi86XG4gICAgICAgICAgICByZXR1cm4gXCJpbnQ2NFwiO1xuICAgICAgICAgIGNhc2UgMTMgLyogdWludDY0ICovOlxuICAgICAgICAgICAgcmV0dXJuIFwidWludDY0XCI7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlOiAke3R5cGVQcm90b31gKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGdldFRlbnNvckVsZW1lbnRTaXplID0gKGRhdGVUeXBlKSA9PiBbdm9pZCAwLCA0LCAxLCAxLCAyLCAyLCA0LCA4LCB2b2lkIDAsIDEsIDIsIDgsIDQsIDgsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDBdW2RhdGVUeXBlXTtcbiAgICAgIHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3RvciA9ICh0eXBlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJmbG9hdDE2XCI6XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIEZsb2F0MTZBcnJheSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBGbG9hdDE2QXJyYXkuZnJvbSA/IEZsb2F0MTZBcnJheSA6IFVpbnQxNkFycmF5O1xuICAgICAgICAgIGNhc2UgXCJmbG9hdDMyXCI6XG4gICAgICAgICAgICByZXR1cm4gRmxvYXQzMkFycmF5O1xuICAgICAgICAgIGNhc2UgXCJ1aW50OFwiOlxuICAgICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXk7XG4gICAgICAgICAgY2FzZSBcImludDhcIjpcbiAgICAgICAgICAgIHJldHVybiBJbnQ4QXJyYXk7XG4gICAgICAgICAgY2FzZSBcInVpbnQxNlwiOlxuICAgICAgICAgICAgcmV0dXJuIFVpbnQxNkFycmF5O1xuICAgICAgICAgIGNhc2UgXCJpbnQxNlwiOlxuICAgICAgICAgICAgcmV0dXJuIEludDE2QXJyYXk7XG4gICAgICAgICAgY2FzZSBcImludDMyXCI6XG4gICAgICAgICAgICByZXR1cm4gSW50MzJBcnJheTtcbiAgICAgICAgICBjYXNlIFwiYm9vbFwiOlxuICAgICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXk7XG4gICAgICAgICAgY2FzZSBcImZsb2F0NjRcIjpcbiAgICAgICAgICAgIHJldHVybiBGbG9hdDY0QXJyYXk7XG4gICAgICAgICAgY2FzZSBcInVpbnQzMlwiOlxuICAgICAgICAgICAgcmV0dXJuIFVpbnQzMkFycmF5O1xuICAgICAgICAgIGNhc2UgXCJpbnQ2NFwiOlxuICAgICAgICAgICAgcmV0dXJuIEJpZ0ludDY0QXJyYXk7XG4gICAgICAgICAgY2FzZSBcInVpbnQ2NFwiOlxuICAgICAgICAgICAgcmV0dXJuIEJpZ1VpbnQ2NEFycmF5O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGxvZ0xldmVsU3RyaW5nVG9FbnVtID0gKGxvZ0xldmVsKSA9PiB7XG4gICAgICAgIHN3aXRjaCAobG9nTGV2ZWwpIHtcbiAgICAgICAgICBjYXNlIFwidmVyYm9zZVwiOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgY2FzZSBcImluZm9cIjpcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgIGNhc2UgXCJ3YXJuaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgICBjYXNlIFwiZXJyb3JcIjpcbiAgICAgICAgICAgIHJldHVybiAzO1xuICAgICAgICAgIGNhc2UgXCJmYXRhbFwiOlxuICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9nZ2luZyBsZXZlbDogJHtsb2dMZXZlbH1gKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlzR3B1QnVmZmVyU3VwcG9ydGVkVHlwZSA9ICh0eXBlKSA9PiB0eXBlID09PSBcImZsb2F0MzJcIiB8fCB0eXBlID09PSBcImZsb2F0MTZcIiB8fCB0eXBlID09PSBcImludDMyXCIgfHwgdHlwZSA9PT0gXCJpbnQ2NFwiIHx8IHR5cGUgPT09IFwidWludDMyXCIgfHwgdHlwZSA9PT0gXCJ1aW50OFwiIHx8IHR5cGUgPT09IFwiYm9vbFwiO1xuICAgICAgZGF0YUxvY2F0aW9uU3RyaW5nVG9FbnVtID0gKGxvY2F0aW9uKSA9PiB7XG4gICAgICAgIHN3aXRjaCAobG9jYXRpb24pIHtcbiAgICAgICAgICBjYXNlIFwibm9uZVwiOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgY2FzZSBcImNwdVwiOlxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgY2FzZSBcImNwdS1waW5uZWRcIjpcbiAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICAgIGNhc2UgXCJ0ZXh0dXJlXCI6XG4gICAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgICBjYXNlIFwiZ3B1LWJ1ZmZlclwiOlxuICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZGF0YSBsb2NhdGlvbjogJHtsb2NhdGlvbn1gKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvbW1vbi9kaXN0L2VzbS9iYWNrZW5kLWltcGwuanNcbiAgdmFyIGluaXRfYmFja2VuZF9pbXBsID0gX19lc20oe1xuICAgIFwiY29tbW9uL2Rpc3QvZXNtL2JhY2tlbmQtaW1wbC5qc1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb21tb24vZGlzdC9lc20vYmFja2VuZC5qc1xuICB2YXIgaW5pdF9iYWNrZW5kID0gX19lc20oe1xuICAgIFwiY29tbW9uL2Rpc3QvZXNtL2JhY2tlbmQuanNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF9iYWNrZW5kX2ltcGwoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvbW1vbi9kaXN0L2VzbS92ZXJzaW9uLmpzXG4gIHZhciB2ZXJzaW9uO1xuICB2YXIgaW5pdF92ZXJzaW9uID0gX19lc20oe1xuICAgIFwiY29tbW9uL2Rpc3QvZXNtL3ZlcnNpb24uanNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgdmVyc2lvbiA9IFwiMS4xOC4wXCI7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb21tb24vZGlzdC9lc20vZW52LWltcGwuanNcbiAgdmFyIGxvZ0xldmVsVmFsdWUsIGVudjtcbiAgdmFyIGluaXRfZW52X2ltcGwgPSBfX2VzbSh7XG4gICAgXCJjb21tb24vZGlzdC9lc20vZW52LWltcGwuanNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF92ZXJzaW9uKCk7XG4gICAgICBsb2dMZXZlbFZhbHVlID0gXCJ3YXJuaW5nXCI7XG4gICAgICBlbnYgPSB7XG4gICAgICAgIHdhc206IHt9LFxuICAgICAgICB3ZWJnbDoge30sXG4gICAgICAgIHdlYmdwdToge30sXG4gICAgICAgIHZlcnNpb25zOiB7IGNvbW1vbjogdmVyc2lvbiB9LFxuICAgICAgICBzZXQgbG9nTGV2ZWwodmFsdWUpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8IFtcInZlcmJvc2VcIiwgXCJpbmZvXCIsIFwid2FybmluZ1wiLCBcImVycm9yXCIsIFwiZmF0YWxcIl0uaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvZ2dpbmcgbGV2ZWw6ICR7dmFsdWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZ0xldmVsVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGxvZ0xldmVsKCkge1xuICAgICAgICAgIHJldHVybiBsb2dMZXZlbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVudiwgXCJsb2dMZXZlbFwiLCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb21tb24vZGlzdC9lc20vZW52LmpzXG4gIHZhciBlbnYyO1xuICB2YXIgaW5pdF9lbnYgPSBfX2VzbSh7XG4gICAgXCJjb21tb24vZGlzdC9lc20vZW52LmpzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfZW52X2ltcGwoKTtcbiAgICAgIGVudjIgPSBlbnY7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb21tb24vZGlzdC9lc20vdGVuc29yLWNvbnZlcnNpb24taW1wbC5qc1xuICB2YXIgaW5pdF90ZW5zb3JfY29udmVyc2lvbl9pbXBsID0gX19lc20oe1xuICAgIFwiY29tbW9uL2Rpc3QvZXNtL3RlbnNvci1jb252ZXJzaW9uLWltcGwuanNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY29tbW9uL2Rpc3QvZXNtL3RlbnNvci1mYWN0b3J5LWltcGwuanNcbiAgdmFyIGluaXRfdGVuc29yX2ZhY3RvcnlfaW1wbCA9IF9fZXNtKHtcbiAgICBcImNvbW1vbi9kaXN0L2VzbS90ZW5zb3ItZmFjdG9yeS1pbXBsLmpzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfdGVuc29yX2ltcGwoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvbW1vbi9kaXN0L2VzbS90ZW5zb3ItaW1wbC10eXBlLW1hcHBpbmcuanNcbiAgdmFyIGluaXRfdGVuc29yX2ltcGxfdHlwZV9tYXBwaW5nID0gX19lc20oe1xuICAgIFwiY29tbW9uL2Rpc3QvZXNtL3RlbnNvci1pbXBsLXR5cGUtbWFwcGluZy5qc1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb21tb24vZGlzdC9lc20vdGVuc29yLXV0aWxzLWltcGwuanNcbiAgdmFyIGluaXRfdGVuc29yX3V0aWxzX2ltcGwgPSBfX2VzbSh7XG4gICAgXCJjb21tb24vZGlzdC9lc20vdGVuc29yLXV0aWxzLWltcGwuanNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF90ZW5zb3JfaW1wbCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY29tbW9uL2Rpc3QvZXNtL3RlbnNvci1pbXBsLmpzXG4gIHZhciBpbml0X3RlbnNvcl9pbXBsID0gX19lc20oe1xuICAgIFwiY29tbW9uL2Rpc3QvZXNtL3RlbnNvci1pbXBsLmpzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfdGVuc29yX2NvbnZlcnNpb25faW1wbCgpO1xuICAgICAgaW5pdF90ZW5zb3JfZmFjdG9yeV9pbXBsKCk7XG4gICAgICBpbml0X3RlbnNvcl9pbXBsX3R5cGVfbWFwcGluZygpO1xuICAgICAgaW5pdF90ZW5zb3JfdXRpbHNfaW1wbCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY29tbW9uL2Rpc3QvZXNtL3RlbnNvci5qc1xuICB2YXIgaW5pdF90ZW5zb3IgPSBfX2VzbSh7XG4gICAgXCJjb21tb24vZGlzdC9lc20vdGVuc29yLmpzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfdGVuc29yX2ltcGwoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvbW1vbi9kaXN0L2VzbS90cmFjZS5qc1xuICB2YXIgVFJBQ0UsIFRSQUNFX0ZVTkMsIFRSQUNFX0ZVTkNfQkVHSU4sIFRSQUNFX0ZVTkNfRU5EO1xuICB2YXIgaW5pdF90cmFjZSA9IF9fZXNtKHtcbiAgICBcImNvbW1vbi9kaXN0L2VzbS90cmFjZS5qc1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X2Vudl9pbXBsKCk7XG4gICAgICBUUkFDRSA9IChkZXZpY2VUeXBlLCBsYWJlbCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGVudi50cmFjZSA9PT0gXCJ1bmRlZmluZWRcIiA/ICFlbnYud2FzbS50cmFjZSA6ICFlbnYudHJhY2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS50aW1lU3RhbXAoYCR7ZGV2aWNlVHlwZX06Ok9SVDo6JHtsYWJlbH1gKTtcbiAgICAgIH07XG4gICAgICBUUkFDRV9GVU5DID0gKG1zZywgZXh0cmFNc2cpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaz8uc3BsaXQoL1xcclxcbnxcXHJ8XFxuL2cpIHx8IFtdO1xuICAgICAgICBsZXQgaGFzVHJhY2VGdW5jID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoaGFzVHJhY2VGdW5jICYmICFzdGFja1tpXS5pbmNsdWRlcyhcIlRSQUNFX0ZVTkNcIikpIHtcbiAgICAgICAgICAgIGxldCBsYWJlbCA9IGBGVU5DXyR7bXNnfTo6JHtzdGFja1tpXS50cmltKCkuc3BsaXQoXCIgXCIpWzFdfWA7XG4gICAgICAgICAgICBpZiAoZXh0cmFNc2cpIHtcbiAgICAgICAgICAgICAgbGFiZWwgKz0gYDo6JHtleHRyYU1zZ31gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgVFJBQ0UoXCJDUFVcIiwgbGFiZWwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhY2tbaV0uaW5jbHVkZXMoXCJUUkFDRV9GVU5DXCIpKSB7XG4gICAgICAgICAgICBoYXNUcmFjZUZ1bmMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIFRSQUNFX0ZVTkNfQkVHSU4gPSAoZXh0cmFNc2cpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnYudHJhY2UgPT09IFwidW5kZWZpbmVkXCIgPyAhZW52Lndhc20udHJhY2UgOiAhZW52LnRyYWNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFRSQUNFX0ZVTkMoXCJCRUdJTlwiLCBleHRyYU1zZyk7XG4gICAgICB9O1xuICAgICAgVFJBQ0VfRlVOQ19FTkQgPSAoZXh0cmFNc2cpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnYudHJhY2UgPT09IFwidW5kZWZpbmVkXCIgPyAhZW52Lndhc20udHJhY2UgOiAhZW52LnRyYWNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFRSQUNFX0ZVTkMoXCJFTkRcIiwgZXh0cmFNc2cpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvbW1vbi9kaXN0L2VzbS9pbmZlcmVuY2Utc2Vzc2lvbi1pbXBsLmpzXG4gIHZhciBpbml0X2luZmVyZW5jZV9zZXNzaW9uX2ltcGwgPSBfX2VzbSh7XG4gICAgXCJjb21tb24vZGlzdC9lc20vaW5mZXJlbmNlLXNlc3Npb24taW1wbC5qc1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X2JhY2tlbmRfaW1wbCgpO1xuICAgICAgaW5pdF90ZW5zb3IoKTtcbiAgICAgIGluaXRfdHJhY2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvbW1vbi9kaXN0L2VzbS9pbmZlcmVuY2Utc2Vzc2lvbi5qc1xuICB2YXIgaW5pdF9pbmZlcmVuY2Vfc2Vzc2lvbiA9IF9fZXNtKHtcbiAgICBcImNvbW1vbi9kaXN0L2VzbS9pbmZlcmVuY2Utc2Vzc2lvbi5qc1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X2luZmVyZW5jZV9zZXNzaW9uX2ltcGwoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvbW1vbi9kaXN0L2VzbS90ZW5zb3ItY29udmVyc2lvbi5qc1xuICB2YXIgaW5pdF90ZW5zb3JfY29udmVyc2lvbiA9IF9fZXNtKHtcbiAgICBcImNvbW1vbi9kaXN0L2VzbS90ZW5zb3ItY29udmVyc2lvbi5qc1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb21tb24vZGlzdC9lc20vdGVuc29yLWZhY3RvcnkuanNcbiAgdmFyIGluaXRfdGVuc29yX2ZhY3RvcnkgPSBfX2VzbSh7XG4gICAgXCJjb21tb24vZGlzdC9lc20vdGVuc29yLWZhY3RvcnkuanNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gY29tbW9uL2Rpc3QvZXNtL29ubngtbW9kZWwuanNcbiAgdmFyIGluaXRfb25ueF9tb2RlbCA9IF9fZXNtKHtcbiAgICBcImNvbW1vbi9kaXN0L2VzbS9vbm54LW1vZGVsLmpzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvbW1vbi9kaXN0L2VzbS9vbm54LXZhbHVlLmpzXG4gIHZhciBpbml0X29ubnhfdmFsdWUgPSBfX2VzbSh7XG4gICAgXCJjb21tb24vZGlzdC9lc20vb25ueC12YWx1ZS5qc1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb21tb24vZGlzdC9lc20vdHJhaW5pbmctc2Vzc2lvbi1pbXBsLmpzXG4gIHZhciBpbml0X3RyYWluaW5nX3Nlc3Npb25faW1wbCA9IF9fZXNtKHtcbiAgICBcImNvbW1vbi9kaXN0L2VzbS90cmFpbmluZy1zZXNzaW9uLWltcGwuanNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF9iYWNrZW5kX2ltcGwoKTtcbiAgICAgIGluaXRfdGVuc29yKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBjb21tb24vZGlzdC9lc20vdHJhaW5pbmctc2Vzc2lvbi5qc1xuICB2YXIgaW5pdF90cmFpbmluZ19zZXNzaW9uID0gX19lc20oe1xuICAgIFwiY29tbW9uL2Rpc3QvZXNtL3RyYWluaW5nLXNlc3Npb24uanNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF90cmFpbmluZ19zZXNzaW9uX2ltcGwoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGNvbW1vbi9kaXN0L2VzbS9pbmRleC5qc1xuICB2YXIgaW5pdF9lc20gPSBfX2VzbSh7XG4gICAgXCJjb21tb24vZGlzdC9lc20vaW5kZXguanNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF9iYWNrZW5kKCk7XG4gICAgICBpbml0X2VudigpO1xuICAgICAgaW5pdF9pbmZlcmVuY2Vfc2Vzc2lvbigpO1xuICAgICAgaW5pdF90ZW5zb3IoKTtcbiAgICAgIGluaXRfdGVuc29yX2NvbnZlcnNpb24oKTtcbiAgICAgIGluaXRfdGVuc29yX2ZhY3RvcnkoKTtcbiAgICAgIGluaXRfdHJhY2UoKTtcbiAgICAgIGluaXRfb25ueF9tb2RlbCgpO1xuICAgICAgaW5pdF9vbm54X3ZhbHVlKCk7XG4gICAgICBpbml0X3RyYWluaW5nX3Nlc3Npb24oKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9qc2VwL2xvZy50c1xuICB2YXIgbG9nTGV2ZWxQcmVmaXgsIGRvTG9nLCBjb25maWdMb2dMZXZlbCwgZGVidWcsIGNvbmZpZ3VyZUxvZ2dlciwgTE9HLCBMT0dfREVCVUc7XG4gIHZhciBpbml0X2xvZyA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL2xvZy50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBsb2dMZXZlbFByZWZpeCA9IFtcIlZcIiwgXCJJXCIsIFwiV1wiLCBcIkVcIiwgXCJGXCJdO1xuICAgICAgZG9Mb2cgPSAobGV2ZWwsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYFske2xvZ0xldmVsUHJlZml4W2xldmVsXX0sJHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCl9XSR7bWVzc2FnZX1gKTtcbiAgICAgIH07XG4gICAgICBjb25maWd1cmVMb2dnZXIgPSAoJGNvbmZpZ0xvZ0xldmVsLCAkZGVidWcpID0+IHtcbiAgICAgICAgY29uZmlnTG9nTGV2ZWwgPSAkY29uZmlnTG9nTGV2ZWw7XG4gICAgICAgIGRlYnVnID0gJGRlYnVnO1xuICAgICAgfTtcbiAgICAgIExPRyA9IChsb2dMZXZlbCwgbXNnKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VMZXZlbCA9IGxvZ0xldmVsU3RyaW5nVG9FbnVtKGxvZ0xldmVsKTtcbiAgICAgICAgY29uc3QgY29uZmlnTGV2ZWwgPSBsb2dMZXZlbFN0cmluZ1RvRW51bShjb25maWdMb2dMZXZlbCk7XG4gICAgICAgIGlmIChtZXNzYWdlTGV2ZWwgPj0gY29uZmlnTGV2ZWwpIHtcbiAgICAgICAgICBkb0xvZyhtZXNzYWdlTGV2ZWwsIHR5cGVvZiBtc2cgPT09IFwiZnVuY3Rpb25cIiA/IG1zZygpIDogbXNnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIExPR19ERUJVRyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgIExPRyguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9qc2VwL3RlbnNvci12aWV3LnRzXG4gIHZhciBjcmVhdGVWaWV3O1xuICB2YXIgaW5pdF90ZW5zb3JfdmlldyA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3RlbnNvci12aWV3LnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGNyZWF0ZVZpZXcgPSAoZGF0YUJ1ZmZlciwgdHlwZSkgPT4gbmV3ICh0ZW5zb3JUeXBlVG9UeXBlZEFycmF5Q29uc3RydWN0b3IodHlwZSkpKGRhdGFCdWZmZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L3R5cGVzLnRzXG4gIHZhciBpbml0X3R5cGVzID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L3R5cGVzLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9ncHUtZGF0YS1tYW5hZ2VyLnRzXG4gIHZhciBidWNrZXRGcmVlbGlzdCwgYnVja2V0QXJyLCBjYWxjTm9ybWFsaXplZEJ1ZmZlclNpemUsIGNhbGNCdWNrZXRCdWZmZXJTaXplLCBndWlkLCBjcmVhdGVOZXdHcHVEYXRhSWQsIGRvd25sb2FkR3B1RGF0YSwgR3B1RGF0YU1hbmFnZXJJbXBsLCBjcmVhdGVHcHVEYXRhTWFuYWdlcjtcbiAgdmFyIGluaXRfZ3B1X2RhdGFfbWFuYWdlciA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9ncHUtZGF0YS1tYW5hZ2VyLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfbG9nKCk7XG4gICAgICBpbml0X3R5cGVzKCk7XG4gICAgICBidWNrZXRGcmVlbGlzdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtcbiAgICAgICAgWzY0LCAyNTBdLFxuICAgICAgICBbMTI4LCAyMDBdLFxuICAgICAgICBbMjU2LCAyMDBdLFxuICAgICAgICBbNTEyLCAyMDBdLFxuICAgICAgICBbMjA0OCwgMjMwXSxcbiAgICAgICAgWzQwOTYsIDIwMF0sXG4gICAgICAgIFs4MTkyLCA1MF0sXG4gICAgICAgIFsxNjM4NCwgNTBdLFxuICAgICAgICBbMzI3NjgsIDUwXSxcbiAgICAgICAgWzY1NTM2LCA1MF0sXG4gICAgICAgIFsxMzEwNzIsIDUwXSxcbiAgICAgICAgWzI2MjE0NCwgNTBdLFxuICAgICAgICBbNTI0Mjg4LCA1MF0sXG4gICAgICAgIFsxMDQ4NTc2LCA1MF0sXG4gICAgICAgIFsyMDk3MTUyLCAzMF0sXG4gICAgICAgIFs0MTk0MzA0LCAyMF0sXG4gICAgICAgIFs4Mzg4NjA4LCAxMF0sXG4gICAgICAgIFsxMjU4MjkxMiwgMTBdLFxuICAgICAgICBbMTY3NzcyMTYsIDEwXSxcbiAgICAgICAgWzI2MjE0NDAwLCAxNV0sXG4gICAgICAgIFszMzU1NDQzMiwgMjJdLFxuICAgICAgICBbNDQyMzY4MDAsIDJdLFxuICAgICAgICBbNTg5ODI0MDAsIDZdLFxuICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIHRoZSBidWNrZXQgc2l6ZXMgYmVsb3cgYnV0IG5vdCBjYWNoaW5nIHRoZW1cbiAgICAgICAgLy8gcmVzdWx0cyBpbiBzb21lIG1ham9yIHBlcmZvcm1hbmNlIGhpdHMgZm9yIG1vZGVscyBsaWtlIHNkLXR1cmJvLlxuICAgICAgICBbNjcxMDg4NjQsIDZdLFxuICAgICAgICBbMTM0MjE3NzI4LCA2XSxcbiAgICAgICAgWzE2Nzc3MjE2MCwgNl1cbiAgICAgIF0pO1xuICAgICAgYnVja2V0QXJyID0gW107XG4gICAgICBjYWxjTm9ybWFsaXplZEJ1ZmZlclNpemUgPSAoc2l6ZSkgPT4gTWF0aC5jZWlsKHNpemUgLyAxNikgKiAxNjtcbiAgICAgIGNhbGNCdWNrZXRCdWZmZXJTaXplID0gKHNpemUpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgYnVja2V0QXJyLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICBjb25zdCBzaXplRm9yQnVja2V0ID0gYnVja2V0QXJyW2lkeF07XG4gICAgICAgICAgaWYgKHNpemUgPD0gc2l6ZUZvckJ1Y2tldCkge1xuICAgICAgICAgICAgcmV0dXJuIHNpemVGb3JCdWNrZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwoc2l6ZSAvIDE2KSAqIDE2O1xuICAgICAgfTtcbiAgICAgIGd1aWQgPSAxO1xuICAgICAgY3JlYXRlTmV3R3B1RGF0YUlkID0gKCkgPT4gZ3VpZCsrO1xuICAgICAgZG93bmxvYWRHcHVEYXRhID0gYXN5bmMgKGJhY2tlbmQsIGdwdUJ1ZmZlciwgb3JpZ2luYWxTaXplLCBnZXRUYXJnZXRCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgYnVmZmVyU2l6ZSA9IGNhbGNOb3JtYWxpemVkQnVmZmVyU2l6ZShvcmlnaW5hbFNpemUpO1xuICAgICAgICBjb25zdCBncHVSZWFkQnVmZmVyID0gYmFja2VuZC5kZXZpY2UuY3JlYXRlQnVmZmVyKFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAgeyBzaXplOiBidWZmZXJTaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB9XG4gICAgICAgICk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBiYWNrZW5kLmdldENvbW1hbmRFbmNvZGVyKCk7XG4gICAgICAgICAgYmFja2VuZC5lbmRDb21wdXRlUGFzcygpO1xuICAgICAgICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihcbiAgICAgICAgICAgIGdwdUJ1ZmZlcixcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBncHVSZWFkQnVmZmVyLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGJ1ZmZlclNpemVcbiAgICAgICAgICAgIC8qIHNpemUgKi9cbiAgICAgICAgICApO1xuICAgICAgICAgIGJhY2tlbmQuZmx1c2goKTtcbiAgICAgICAgICBhd2FpdCBncHVSZWFkQnVmZmVyLm1hcEFzeW5jKEdQVU1hcE1vZGUuUkVBRCk7XG4gICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBncHVSZWFkQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG4gICAgICAgICAgaWYgKGdldFRhcmdldEJ1ZmZlcikge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0QnVmZmVyID0gZ2V0VGFyZ2V0QnVmZmVyKCk7XG4gICAgICAgICAgICB0YXJnZXRCdWZmZXIuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCAwLCBvcmlnaW5hbFNpemUpKTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRCdWZmZXI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlci5zbGljZSgwLCBvcmlnaW5hbFNpemUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZ3B1UmVhZEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBHcHVEYXRhTWFuYWdlckltcGwgPSBjbGFzcyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGJhY2tlbmQpIHtcbiAgICAgICAgICB0aGlzLmJhY2tlbmQgPSBiYWNrZW5kO1xuICAgICAgICAgIHRoaXMuc3RvcmFnZUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgICB0aGlzLmZyZWVCdWZmZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgICB0aGlzLmZyZWVVbmlmb3JtQnVmZmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICAgICAgdGhpcy5idWZmZXJzRm9yVXBsb2FkaW5nUGVuZGluZyA9IFtdO1xuICAgICAgICAgIHRoaXMuYnVmZmVyc1BlbmRpbmcgPSBbXTtcbiAgICAgICAgICB0aGlzLmV4dGVybmFsQnVmZmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICAgICAgdGhpcy5jYXB0dXJlZFBlbmRpbmdCdWZmZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXldIG9mIGJ1Y2tldEZyZWVsaXN0KSB7XG4gICAgICAgICAgICBidWNrZXRBcnIucHVzaChrZXkpO1xuICAgICAgICAgICAgdGhpcy5mcmVlQnVmZmVycy5zZXQoa2V5LCBbXSk7XG4gICAgICAgICAgICB0aGlzLmZyZWVVbmlmb3JtQnVmZmVycy5zZXQoa2V5LCBbXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVwbG9hZChpZCwgZGF0YSkge1xuICAgICAgICAgIGNvbnN0IHNyY0FycmF5QnVmZmVyID0gZGF0YS5idWZmZXI7XG4gICAgICAgICAgY29uc3Qgc3JjT2Zmc2V0ID0gZGF0YS5ieXRlT2Zmc2V0O1xuICAgICAgICAgIGNvbnN0IHNyY0xlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBjb25zdCBzaXplID0gY2FsY05vcm1hbGl6ZWRCdWZmZXJTaXplKHNyY0xlbmd0aCk7XG4gICAgICAgICAgY29uc3QgZ3B1RGF0YUNhY2hlID0gdGhpcy5zdG9yYWdlQ2FjaGUuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoIWdwdURhdGFDYWNoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ3B1IGRhdGEgZm9yIHVwbG9hZGluZyBkb2VzIG5vdCBleGlzdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGdwdURhdGFDYWNoZS5vcmlnaW5hbFNpemUgIT09IHNyY0xlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbmNvbnNpc3RlbnQgZGF0YSBzaXplLiBncHUgZGF0YSBzaXplPSR7Z3B1RGF0YUNhY2hlLm9yaWdpbmFsU2l6ZX0sIGRhdGEgc2l6ZT0ke3NyY0xlbmd0aH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZ3B1QnVmZmVyRm9yVXBsb2FkaW5nID0gdGhpcy5iYWNrZW5kLmRldmljZS5jcmVhdGVCdWZmZXIoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgeyBtYXBwZWRBdENyZWF0aW9uOiB0cnVlLCBzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBncHVCdWZmZXJGb3JVcGxvYWRpbmcuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAgICAgICAgICBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikuc2V0KG5ldyBVaW50OEFycmF5KHNyY0FycmF5QnVmZmVyLCBzcmNPZmZzZXQsIHNyY0xlbmd0aCkpO1xuICAgICAgICAgIGdwdUJ1ZmZlckZvclVwbG9hZGluZy51bm1hcCgpO1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gdGhpcy5iYWNrZW5kLmdldENvbW1hbmRFbmNvZGVyKCk7XG4gICAgICAgICAgdGhpcy5iYWNrZW5kLmVuZENvbXB1dGVQYXNzKCk7XG4gICAgICAgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGdwdUJ1ZmZlckZvclVwbG9hZGluZywgMCwgZ3B1RGF0YUNhY2hlLmdwdURhdGEuYnVmZmVyLCAwLCBzaXplKTtcbiAgICAgICAgICBMT0dfREVCVUcoXCJ2ZXJib3NlXCIsICgpID0+IGBbV2ViR1BVXSBHcHVEYXRhTWFuYWdlci51cGxvYWQoaWQ9JHtpZH0pYCk7XG4gICAgICAgICAgdGhpcy5idWZmZXJzRm9yVXBsb2FkaW5nUGVuZGluZy5wdXNoKGdwdUJ1ZmZlckZvclVwbG9hZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgbWVtY3B5KHNvdXJjZUlkLCBkZXN0aW5hdGlvbklkKSB7XG4gICAgICAgICAgY29uc3Qgc291cmNlR3B1RGF0YUNhY2hlID0gdGhpcy5zdG9yYWdlQ2FjaGUuZ2V0KHNvdXJjZUlkKTtcbiAgICAgICAgICBpZiAoIXNvdXJjZUdwdURhdGFDYWNoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic291cmNlIGdwdSBkYXRhIGZvciBtZW1jcHkgZG9lcyBub3QgZXhpc3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uR3B1RGF0YUNhY2hlID0gdGhpcy5zdG9yYWdlQ2FjaGUuZ2V0KGRlc3RpbmF0aW9uSWQpO1xuICAgICAgICAgIGlmICghZGVzdGluYXRpb25HcHVEYXRhQ2FjaGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRlc3RpbmF0aW9uIGdwdSBkYXRhIGZvciBtZW1jcHkgZG9lcyBub3QgZXhpc3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzb3VyY2VHcHVEYXRhQ2FjaGUub3JpZ2luYWxTaXplICE9PSBkZXN0aW5hdGlvbkdwdURhdGFDYWNoZS5vcmlnaW5hbFNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImluY29uc2lzdGVudCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGdwdSBkYXRhIHNpemVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNpemUgPSBjYWxjTm9ybWFsaXplZEJ1ZmZlclNpemUoc291cmNlR3B1RGF0YUNhY2hlLm9yaWdpbmFsU2l6ZSk7XG4gICAgICAgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSB0aGlzLmJhY2tlbmQuZ2V0Q29tbWFuZEVuY29kZXIoKTtcbiAgICAgICAgICB0aGlzLmJhY2tlbmQuZW5kQ29tcHV0ZVBhc3MoKTtcbiAgICAgICAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoXG4gICAgICAgICAgICBzb3VyY2VHcHVEYXRhQ2FjaGUuZ3B1RGF0YS5idWZmZXIsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgZGVzdGluYXRpb25HcHVEYXRhQ2FjaGUuZ3B1RGF0YS5idWZmZXIsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgc2l6ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJFeHRlcm5hbEJ1ZmZlcihidWZmZXIsIG9yaWdpbmFsU2l6ZSwgcHJldmlvdXNCdWZmZXIpIHtcbiAgICAgICAgICBsZXQgaWQ7XG4gICAgICAgICAgaWYgKHByZXZpb3VzQnVmZmVyKSB7XG4gICAgICAgICAgICBpZCA9IHRoaXMuZXh0ZXJuYWxCdWZmZXJzLmdldChwcmV2aW91c0J1ZmZlcik7XG4gICAgICAgICAgICBpZiAoaWQgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcmV2aW91cyBidWZmZXIgaXMgbm90IHJlZ2lzdGVyZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnVmZmVyID09PSBwcmV2aW91c0J1ZmZlcikge1xuICAgICAgICAgICAgICBMT0dfREVCVUcoXG4gICAgICAgICAgICAgICAgXCJ2ZXJib3NlXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4gYFtXZWJHUFVdIEdwdURhdGFNYW5hZ2VyLnJlZ2lzdGVyRXh0ZXJuYWxCdWZmZXIoc2l6ZT0ke29yaWdpbmFsU2l6ZX0pID0+IGlkPSR7aWR9LCBidWZmZXIgaXMgdGhlIHNhbWUsIHNraXAuYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYmFja2VuZC5jYXB0dXJlZENvbW1hbmRMaXN0Lmhhcyh0aGlzLmJhY2tlbmQuY3VycmVudFNlc3Npb25JZCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWdpc3RlcmluZyBhIGRpZmZlcmVudCBleHRlcm5hbCBidWZmZXIgdW5kZXIgZ3JhcGggY2FwdHVyZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LlxuICAgICAgICAgICAgIFBsZWFzZSB1c2UgdGhlIHByZXZpb3VzIGV4dGVybmFsIGJ1ZmZlciFgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxCdWZmZXJzLmRlbGV0ZShwcmV2aW91c0J1ZmZlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlkID0gY3JlYXRlTmV3R3B1RGF0YUlkKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc3RvcmFnZUNhY2hlLnNldChpZCwgeyBncHVEYXRhOiB7IGlkLCB0eXBlOiAwIC8qIGRlZmF1bHQgKi8sIGJ1ZmZlciB9LCBvcmlnaW5hbFNpemUgfSk7XG4gICAgICAgICAgdGhpcy5leHRlcm5hbEJ1ZmZlcnMuc2V0KGJ1ZmZlciwgaWQpO1xuICAgICAgICAgIExPR19ERUJVRyhcbiAgICAgICAgICAgIFwidmVyYm9zZVwiLFxuICAgICAgICAgICAgKCkgPT4gYFtXZWJHUFVdIEdwdURhdGFNYW5hZ2VyLnJlZ2lzdGVyRXh0ZXJuYWxCdWZmZXIoc2l6ZT0ke29yaWdpbmFsU2l6ZX0pID0+IGlkPSR7aWR9LCByZWdpc3RlcmVkLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICB1bnJlZ2lzdGVyRXh0ZXJuYWxCdWZmZXIoYnVmZmVyKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmV4dGVybmFsQnVmZmVycy5nZXQoYnVmZmVyKTtcbiAgICAgICAgICBpZiAoaWQgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlQ2FjaGUuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxCdWZmZXJzLmRlbGV0ZShidWZmZXIpO1xuICAgICAgICAgICAgTE9HX0RFQlVHKFwidmVyYm9zZVwiLCAoKSA9PiBgW1dlYkdQVV0gR3B1RGF0YU1hbmFnZXIudW5yZWdpc3RlckV4dGVybmFsQnVmZmVyKCkgPT4gaWQ9JHtpZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgY3JlYXRlKHNpemUsIHVzYWdlID0gR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QpIHtcbiAgICAgICAgICBjb25zdCBidWZmZXJTaXplID0gY2FsY0J1Y2tldEJ1ZmZlclNpemUoc2l6ZSk7XG4gICAgICAgICAgbGV0IGdwdUJ1ZmZlcjtcbiAgICAgICAgICBjb25zdCBpc1N0b3JhZ2UgPSAodXNhZ2UgJiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFKSA9PT0gR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRTtcbiAgICAgICAgICBjb25zdCBpc1VuaWZvcm0gPSAodXNhZ2UgJiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNKSA9PT0gR1BVQnVmZmVyVXNhZ2UuVU5JRk9STTtcbiAgICAgICAgICBpZiAoaXNTdG9yYWdlIHx8IGlzVW5pZm9ybSkge1xuICAgICAgICAgICAgY29uc3QgZnJlZUJ1ZmZlcnMgPSBpc1N0b3JhZ2UgPyB0aGlzLmZyZWVCdWZmZXJzIDogdGhpcy5mcmVlVW5pZm9ybUJ1ZmZlcnM7XG4gICAgICAgICAgICBjb25zdCBidWZmZXJzID0gZnJlZUJ1ZmZlcnMuZ2V0KGJ1ZmZlclNpemUpO1xuICAgICAgICAgICAgaWYgKCFidWZmZXJzKSB7XG4gICAgICAgICAgICAgIGdwdUJ1ZmZlciA9IHRoaXMuYmFja2VuZC5kZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6ZTogYnVmZmVyU2l6ZSwgdXNhZ2UgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoYnVmZmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZ3B1QnVmZmVyID0gYnVmZmVycy5wb3AoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncHVCdWZmZXIgPSB0aGlzLmJhY2tlbmQuZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7IHNpemU6IGJ1ZmZlclNpemUsIHVzYWdlIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdwdUJ1ZmZlciA9IHRoaXMuYmFja2VuZC5kZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6ZTogYnVmZmVyU2l6ZSwgdXNhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGdwdURhdGEgPSB7IGlkOiBjcmVhdGVOZXdHcHVEYXRhSWQoKSwgdHlwZTogMCAvKiBkZWZhdWx0ICovLCBidWZmZXI6IGdwdUJ1ZmZlciB9O1xuICAgICAgICAgIHRoaXMuc3RvcmFnZUNhY2hlLnNldChncHVEYXRhLmlkLCB7IGdwdURhdGEsIG9yaWdpbmFsU2l6ZTogc2l6ZSB9KTtcbiAgICAgICAgICBMT0dfREVCVUcoXCJ2ZXJib3NlXCIsICgpID0+IGBbV2ViR1BVXSBHcHVEYXRhTWFuYWdlci5jcmVhdGUoc2l6ZT0ke3NpemV9KSA9PiBpZD0ke2dwdURhdGEuaWR9YCk7XG4gICAgICAgICAgcmV0dXJuIGdwdURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0KGlkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZUNhY2hlLmdldChpZCk/LmdwdURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmVsZWFzZShpZCkge1xuICAgICAgICAgIGNvbnN0IGNhY2hlZERhdGEgPSB0aGlzLnN0b3JhZ2VDYWNoZS5nZXQoaWQpO1xuICAgICAgICAgIGlmICghY2FjaGVkRGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVsZWFzaW5nIGRhdGEgZG9lcyBub3QgZXhpc3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIExPR19ERUJVRyhcInZlcmJvc2VcIiwgKCkgPT4gYFtXZWJHUFVdIEdwdURhdGFNYW5hZ2VyLnJlbGVhc2UoaWQ9JHtpZH0pLCBncHVEYXRhSWQ9JHtjYWNoZWREYXRhLmdwdURhdGEuaWR9YCk7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlQ2FjaGUuZGVsZXRlKGlkKTtcbiAgICAgICAgICB0aGlzLmJ1ZmZlcnNQZW5kaW5nLnB1c2goY2FjaGVkRGF0YS5ncHVEYXRhLmJ1ZmZlcik7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlZERhdGEub3JpZ2luYWxTaXplO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGRvd25sb2FkKGlkLCBnZXRUYXJnZXRCdWZmZXIpIHtcbiAgICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gdGhpcy5zdG9yYWdlQ2FjaGUuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoIWNhY2hlZERhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRhdGEgZG9lcyBub3QgZXhpc3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IGRvd25sb2FkR3B1RGF0YSh0aGlzLmJhY2tlbmQsIGNhY2hlZERhdGEuZ3B1RGF0YS5idWZmZXIsIGNhY2hlZERhdGEub3JpZ2luYWxTaXplLCBnZXRUYXJnZXRCdWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2hQZW5kaW5nQnVmZmVycygpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiB0aGlzLmJ1ZmZlcnNGb3JVcGxvYWRpbmdQZW5kaW5nKSB7XG4gICAgICAgICAgICBidWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmJ1ZmZlcnNGb3JVcGxvYWRpbmdQZW5kaW5nID0gW107XG4gICAgICAgICAgaWYgKHRoaXMuYnVmZmVyc1BlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmJhY2tlbmQuc2Vzc2lvblN0YXR1cyA9PT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIHRoaXMuYnVmZmVyc1BlbmRpbmcpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWF4SW5GcmVlTGlzdCA9IGJ1Y2tldEZyZWVsaXN0LmdldChidWZmZXIuc2l6ZSk7XG4gICAgICAgICAgICAgIGlmICgoYnVmZmVyLnVzYWdlICYgR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSkgPT09IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmcmVlbGlzdCA9IHRoaXMuZnJlZUJ1ZmZlcnMuZ2V0KGJ1ZmZlci5zaXplKSB8fCBbXTtcbiAgICAgICAgICAgICAgICBpZiAobWF4SW5GcmVlTGlzdCA9PT0gdm9pZCAwIHx8IGZyZWVsaXN0Lmxlbmd0aCA+PSBtYXhJbkZyZWVMaXN0KSB7XG4gICAgICAgICAgICAgICAgICBidWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBmcmVlbGlzdC5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKChidWZmZXIudXNhZ2UgJiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNKSA9PT0gR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyZWVsaXN0ID0gdGhpcy5mcmVlVW5pZm9ybUJ1ZmZlcnMuZ2V0KGJ1ZmZlci5zaXplKSB8fCBbXTtcbiAgICAgICAgICAgICAgICBpZiAobWF4SW5GcmVlTGlzdCA9PT0gdm9pZCAwIHx8IGZyZWVsaXN0Lmxlbmd0aCA+PSBtYXhJbkZyZWVMaXN0KSB7XG4gICAgICAgICAgICAgICAgICBidWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBmcmVlbGlzdC5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYnVmZmVyc1BlbmRpbmcgPSBbXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNhcHR1cmVkQnVmZmVycyA9IHRoaXMuY2FwdHVyZWRQZW5kaW5nQnVmZmVycy5nZXQodGhpcy5iYWNrZW5kLmN1cnJlbnRTZXNzaW9uSWQpO1xuICAgICAgICAgICAgaWYgKCFjYXB0dXJlZEJ1ZmZlcnMpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZWRCdWZmZXJzID0gW107XG4gICAgICAgICAgICAgIHRoaXMuY2FwdHVyZWRQZW5kaW5nQnVmZmVycy5zZXQodGhpcy5iYWNrZW5kLmN1cnJlbnRTZXNzaW9uSWQsIGNhcHR1cmVkQnVmZmVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiB0aGlzLmJ1ZmZlcnNQZW5kaW5nKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVkQnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlcnNQZW5kaW5nID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgdGhpcy5mcmVlQnVmZmVycy5mb3JFYWNoKChidWZmZXJzKSA9PiB7XG4gICAgICAgICAgICBidWZmZXJzLmZvckVhY2goKGJ1ZmZlcikgPT4ge1xuICAgICAgICAgICAgICBidWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5mcmVlVW5pZm9ybUJ1ZmZlcnMuZm9yRWFjaCgoYnVmZmVycykgPT4ge1xuICAgICAgICAgICAgYnVmZmVycy5mb3JFYWNoKChidWZmZXIpID0+IHtcbiAgICAgICAgICAgICAgYnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc3RvcmFnZUNhY2hlLmZvckVhY2goKHN0b3JhZ2UpID0+IHtcbiAgICAgICAgICAgIHN0b3JhZ2UuZ3B1RGF0YS5idWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2FwdHVyZWRQZW5kaW5nQnVmZmVycy5mb3JFYWNoKChidWZmZXJzKSA9PiB7XG4gICAgICAgICAgICBidWZmZXJzLmZvckVhY2goKGJ1ZmZlcikgPT4ge1xuICAgICAgICAgICAgICBidWZmZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgICAgIHRoaXMuZnJlZUJ1ZmZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgICAgIHRoaXMuZnJlZVVuaWZvcm1CdWZmZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgICB0aGlzLmNhcHR1cmVkUGVuZGluZ0J1ZmZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uUmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkKSB7XG4gICAgICAgICAgY29uc3QgcGVuZGluZ0J1ZmZlcnMgPSB0aGlzLmNhcHR1cmVkUGVuZGluZ0J1ZmZlcnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgaWYgKHBlbmRpbmdCdWZmZXJzKSB7XG4gICAgICAgICAgICBwZW5kaW5nQnVmZmVycy5mb3JFYWNoKChidWZmZXIpID0+IHtcbiAgICAgICAgICAgICAgYnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jYXB0dXJlZFBlbmRpbmdCdWZmZXJzLmRlbGV0ZShzZXNzaW9uSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNyZWF0ZUdwdURhdGFNYW5hZ2VyID0gKC4uLmFyZ3MpID0+IG5ldyBHcHVEYXRhTWFuYWdlckltcGwoLi4uYXJncyk7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvYXR0cmlidXRlLXdpdGgtY2FjaGUta2V5LnRzXG4gIHZhciBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXlJbXBsLCBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXk7XG4gIHZhciBpbml0X2F0dHJpYnV0ZV93aXRoX2NhY2hlX2tleSA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9hdHRyaWJ1dGUtd2l0aC1jYWNoZS1rZXkudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgQXR0cmlidXRlV2l0aENhY2hlS2V5SW1wbCA9IGNsYXNzIHtcbiAgICAgICAgY29uc3RydWN0b3IoYXR0cmlidXRlKSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBhdHRyaWJ1dGUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjYWNoZUtleSgpIHtcbiAgICAgICAgICBpZiAoIXRoaXMua2V5KSB7XG4gICAgICAgICAgICB0aGlzLmtleSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpLnNvcnQoKS5tYXAoKG5hbWUpID0+IGAke3RoaXNbbmFtZV19YCkuam9pbihcIjtcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmtleTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSA9IChhdHRyaWJ1dGUpID0+IG5ldyBBdHRyaWJ1dGVXaXRoQ2FjaGVLZXlJbXBsKGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC91dGlsLnRzXG4gIHZhciBNYXRNdWxVdGlsLCBCcm9hZGNhc3RVdGlsLCBTaGFwZVV0aWwsIFBvb2xDb252VXRpbCwgR2VtbVV0aWwsIE1JTl9DTElQLCBNQVhfQ0xJUDtcbiAgdmFyIGluaXRfdXRpbCA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3V0aWwudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgTWF0TXVsVXRpbCA9IGNsYXNzIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgc2hhcGUgd2hlbiBtYXRyaXggbXVsdGlwbGljYXRpb25cbiAgICAgICAgICogQHBhcmFtIGEgVGhlIHNoYXBlIG9mIHRlbnNvciBBLiBTaG91bGQgYmUgYSB0dXBsZSBvZiAyIHBvc2l0aXZlIGludGVnZXJzXG4gICAgICAgICAqIEBwYXJhbSBiIFRoZSBzaGFwZSBvZiB0ZW5zb3IgQi4gU2hvdWxkIGJlIGEgdHVwbGUgb2YgMiBwb3NpdGl2ZSBpbnRlZ2Vyc1xuICAgICAgICAgKiBAcmV0dXJucyBUaGUgZXhwZWN0ZWQgc2hhcGUgb2YgdGhlIHJlc3VsdCwgb3IgdW5kZWZpbmVkIGlmIE4vQVxuICAgICAgICAgKi9cbiAgICAgICAgc3RhdGljIGNhbGNNYXRNdWxTaGFwZShhLCBiKSB7XG4gICAgICAgICAgcmV0dXJuIGFbMV0gIT09IGJbMF0gPyB2b2lkIDAgOiBbYVswXSwgYlsxXV07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBCcm9hZGNhc3RVdGlsID0gY2xhc3Mge1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2FsY3VsYXRlIHRoZSBleHBlY3RlZCBzaGFwZSB3aGVuIGJyb2FkY2FzdGluZyAyIHRlbnNvcnNcbiAgICAgICAgICogQHBhcmFtIGEgVGhlIHNoYXBlIG9mIHRlbnNvciBBLiBTaG91bGQgYmUgYW4gYXJyYXkgb2YgcG9zaXRpdmUgaW50ZWdlcnNcbiAgICAgICAgICogQHBhcmFtIGIgVGhlIHNoYXBlIG9mIHRlbnNvciBCLiBTaG91bGQgYmUgYW4gYXJyYXkgb2YgcG9zaXRpdmUgaW50ZWdlcnNcbiAgICAgICAgICogQHBhcmFtIGlzTWF0TXVsIFdoZXRoZXIgdGhlIG9wZXJhdGlvbiBpcyBNYXRNdWxcbiAgICAgICAgICogQHJldHVybnMgVGhlIGV4cGVjdGVkIHNoYXBlIG9mIHRoZSByZXN1bHQsIG9yIHVuZGVmaW5lZCBpZiBOL0FcbiAgICAgICAgICovXG4gICAgICAgIHN0YXRpYyBjYWxjU2hhcGUoYWRpbXMsIGJkaW1zLCBpc01hdE11bCA9IGZhbHNlKSB7XG4gICAgICAgICAgY29uc3QgYXJhbmsgPSBhZGltcy5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgYnJhbmsgPSBiZGltcy5sZW5ndGg7XG4gICAgICAgICAgaWYgKGFyYW5rID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmRpbXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChicmFuayA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGFkaW1zO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjcmFuayA9IE1hdGgubWF4KGFkaW1zLmxlbmd0aCwgYmRpbXMubGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCBjZGltcyA9IG5ldyBBcnJheShjcmFuayk7XG4gICAgICAgICAgaWYgKGlzTWF0TXVsKSB7XG4gICAgICAgICAgICBpZiAoYXJhbmsgPCAyIHx8IGJyYW5rIDwgMikge1xuICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY1NoYXBlTWF0TXVsID0gTWF0TXVsVXRpbC5jYWxjTWF0TXVsU2hhcGUoW2FkaW1zW2FyYW5rIC0gMl0sIGFkaW1zW2FyYW5rIC0gMV1dLCBbYmRpbXNbYnJhbmsgLSAyXSwgYmRpbXNbYnJhbmsgLSAxXV0pO1xuICAgICAgICAgICAgaWYgKGNTaGFwZU1hdE11bCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbY2RpbXNbY3JhbmsgLSAyXSwgY2RpbXNbY3JhbmsgLSAxXV0gPSBjU2hhcGVNYXRNdWw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSBpc01hdE11bCA/IDMgOiAxOyBpIDw9IGNyYW5rOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFMZW4gPSBhcmFuayAtIGkgPCAwID8gMSA6IGFkaW1zW2FyYW5rIC0gaV07XG4gICAgICAgICAgICBjb25zdCBiTGVuID0gYnJhbmsgLSBpIDwgMCA/IDEgOiBiZGltc1ticmFuayAtIGldO1xuICAgICAgICAgICAgaWYgKGFMZW4gIT09IGJMZW4gJiYgYUxlbiA+IDEgJiYgYkxlbiA+IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KGFMZW4sIGJMZW4pO1xuICAgICAgICAgICAgaWYgKGFMZW4gJiYgYkxlbikge1xuICAgICAgICAgICAgICBjZGltc1tjcmFuayAtIGldID0gTWF0aC5tYXgoYUxlbiwgYkxlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAobWF4ID4gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2RpbXNbY3JhbmsgLSBpXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjZGltcztcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lIGlmIGEgc2hhcGUgaXMgdW5pZGlyZWN0aW9uYWwgYnJvYWRjYXN0YWJsZSB0byBhbm90aGVyIHNoYXBlXG4gICAgICAgICAqIEBwYXJhbSBzaGFwZSBUaGUgaW5wdXQgc2hhcGVcbiAgICAgICAgICogQHBhcmFtIGZpbmFsU2hhcGUgVGhlIGRlc2lyZWQgc2hhcGUgYWZ0ZXIgYnJvYWRjYXN0aW5nXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0aWMgaXNWYWxpZEJyb2FkY2FzdChzaGFwZSwgZmluYWxTaGFwZSkge1xuICAgICAgICAgIGNvbnN0IGlucHV0UmFuayA9IHNoYXBlLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCBmaW5hbFJhbmsgPSBmaW5hbFNoYXBlLmxlbmd0aDtcbiAgICAgICAgICBpZiAoaW5wdXRSYW5rID4gZmluYWxSYW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGlucHV0UmFuazsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2hhcGVbaW5wdXRSYW5rIC0gaV0gIT09IDEgJiYgc2hhcGVbaW5wdXRSYW5rIC0gaV0gIT09IGZpbmFsU2hhcGVbZmluYWxSYW5rIC0gaV0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIFNoYXBlVXRpbCA9IGNsYXNzIF9TaGFwZVV0aWwge1xuICAgICAgICAvKipcbiAgICAgICAgICogY2FsY3VsYXRlIHRoZSBzaXplIChudW1iZXIgb2YgZWxlbWVudHMpXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0aWMgc2l6ZShkaW1zKSB7XG4gICAgICAgICAgcmV0dXJuIF9TaGFwZVV0aWwuZ2V0U2l6ZUZyb21EaW1lbnNpb25SYW5nZShkaW1zLCAwLCBkaW1zLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNvbnZlcnQgZGltcyBjb3JyZXNwb25kaW5nIHRvIHR5cGUgY2hhbmdlIHRvIHBhY2suIGV4LiB1aW50OCBkYXRhIHRvIHVpbnQzMlxuICAgICAgICAgKi9cbiAgICAgICAgc3RhdGljIGNvbnZlcnRTaGFwZShkaW1zLCBzaXplID0gNCkge1xuICAgICAgICAgIGNvbnN0IHJhbmsgPSBkaW1zLmxlbmd0aDtcbiAgICAgICAgICBpZiAocmFuayA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXdEaW1zID0gbmV3IEFycmF5KHJhbmspO1xuICAgICAgICAgIGxldCBpID0gcmFuayAtIDE7XG4gICAgICAgICAgd2hpbGUgKGkgPj0gMCkge1xuICAgICAgICAgICAgaWYgKGRpbXNbaV0gJSBzaXplID09PSAwKSB7XG4gICAgICAgICAgICAgIG5ld0RpbXNbaV0gPSBkaW1zW2ldIC8gc2l6ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2l6ZSAlIGRpbXNbaV0gIT09IDApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGNvbnZlcnQgc2hhcGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdEaW1zW2ldID0gMTtcbiAgICAgICAgICAgIHNpemUgLz0gZGltc1tpXTtcbiAgICAgICAgICAgIGktLTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChpLS07IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBuZXdEaW1zW2ldID0gZGltc1tpXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ld0RpbXM7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNhbGN1bGF0ZSB0aGUgc2l6ZSAobnVtYmVyIG9mIGVsZW1lbnRzKSBmcm9tIHRoZSBnaXZlbiBheGlzIChpbmNsdXNpdmUpXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0aWMgc2l6ZUZyb21EaW1lbnNpb24oZGltcywgYXhpcykge1xuICAgICAgICAgIGlmIChheGlzIDwgMCB8fCBheGlzID4gZGltcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaW1lbnNpb24gb2YgJHtheGlzfSBmb3Igc2l6ZUZyb21EaW1lbnNpb24gYXMgVGVuc29yIGhhcyAke2RpbXMubGVuZ3RofSBkaW1lbnNpb25zLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX1NoYXBlVXRpbC5nZXRTaXplRnJvbURpbWVuc2lvblJhbmdlKGRpbXMsIGF4aXMsIGRpbXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogY2FsY3VsYXRlIHRoZSBzaXplIChudW1iZXIgb2YgZWxlbWVudHMpIHRvIHRoZSBnaXZlbiBheGlzIChleGNsdXNpdmUpXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0aWMgc2l6ZVRvRGltZW5zaW9uKGRpbXMsIGF4aXMpIHtcbiAgICAgICAgICBpZiAoYXhpcyA8IDAgfHwgYXhpcyA+IGRpbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGltZW5zaW9uIG9mICR7YXhpc30gZm9yIHNpemVUb0RpbWVuc2lvbiBhcyBUZW5zb3IgaGFzICR7ZGltcy5sZW5ndGh9IGRpbWVuc2lvbnMuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfU2hhcGVVdGlsLmdldFNpemVGcm9tRGltZW5zaW9uUmFuZ2UoZGltcywgMCwgYXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNhbGN1bGF0ZSB0aGUgc2l6ZSAobnVtYmVyIG9mIGVsZW1lbnRzKSBmcm9tIGFuZCB0byB0aGUgZ2l2ZW4gYXhpcyBbc3RhcnQsIGVuZClcbiAgICAgICAgICovXG4gICAgICAgIHN0YXRpYyBnZXRTaXplRnJvbURpbWVuc2lvblJhbmdlKGRpbXMsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICBsZXQgc2l6ZSA9IDE7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChkaW1zW2ldIDwgMCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICBcImNhbm5vdCBnZXQgdmFsaWQgc2l6ZSBmcm9tIHNwZWNpZmllZCBkaW1lbnNpb24gcmFuZ2UuIE1vc3QgbGlrZWx5IHRoZSByYW5nZSBjb250YWlucyBuZWdhdGl2ZSB2YWx1ZXMgaW4gdGhlbS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2l6ZSAqPSBkaW1zW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgY29tcHV0ZVN0cmlkZXMoZGltcykge1xuICAgICAgICAgIGNvbnN0IHJhbmsgPSBkaW1zLmxlbmd0aDtcbiAgICAgICAgICBpZiAocmFuayA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmFuayA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIFsxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3RyaWRlcyA9IG5ldyBBcnJheShyYW5rKTtcbiAgICAgICAgICBzdHJpZGVzW3JhbmsgLSAxXSA9IDE7XG4gICAgICAgICAgc3RyaWRlc1tyYW5rIC0gMl0gPSBkaW1zW3JhbmsgLSAxXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gcmFuayAtIDM7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICBzdHJpZGVzW2ldID0gc3RyaWRlc1tpICsgMV0gKiBkaW1zW2kgKyAxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN0cmlkZXM7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIG5vcm1haWx6ZSBheGlzIG9mIHJhbmdlIFstciwgcikgaW50byBbMCwgcikuXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0aWMgbm9ybWFsaXplQXhpcyhheGlzLCB0ZW5zb3JSYW5rKSB7XG4gICAgICAgICAgaWYgKGF4aXMgPCAtdGVuc29yUmFuayAmJiBheGlzID49IHRlbnNvclJhbmspIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGF4aXMgZm9yIHRoaXMgb3BlcmF0aW9uLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGF4aXMgPCAwID8gYXhpcyArIHRlbnNvclJhbmsgOiBheGlzO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBub3JtYWxpemVBeGVzKGF4ZXMsIHRlbnNvclJhbmspIHtcbiAgICAgICAgICByZXR1cm4gYXhlcy5tYXAoKHgpID0+IHRoaXMubm9ybWFsaXplQXhpcyh4LCB0ZW5zb3JSYW5rID8/IGF4ZXMubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNvcnRzIGEgZ2l2ZW4gYXJyYXkgYmFzZWQgb24gdGhlIGluZGljZXMgaW4gdGhlIFBlcm0gYXJyYXlcbiAgICAgICAgICogVXNlZCBpbiBUcmFuc3Bvc2VcbiAgICAgICAgICogQHBhcmFtIGEgQXJyYXkgdG8gYmUgc29ydGVkIHN1Y2ggYXMgZGltcyBvciBzdHJpZGVzXG4gICAgICAgICAqIEBwYXJhbSBwZXJtIFBlcm0gZ2l2ZW47IGlmIG51bGwgYSB3aWxsIGJlIHJldmVyc2VkXG4gICAgICAgICAqL1xuICAgICAgICBzdGF0aWMgc29ydEJhc2VkT25QZXJtKGEsIHBlcm0pIHtcbiAgICAgICAgICBpZiAocGVybSkge1xuICAgICAgICAgICAgcmV0dXJuIHBlcm0ubWFwKCh2KSA9PiBhW3ZdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGEuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYWRzIGEgZ2l2ZW4gc2hhcGUgYWNjb3JkaW5nIHRvIHRoZSBwYWRkaW5nIHZhbHVlc1xuICAgICAgICAgKiBAcGFyYW0gZGltcyBzaGFwZSBvZiB0aGUgVGVuc29yIHRvIGJlIHBhZGRlZFxuICAgICAgICAgKiBAcGFyYW0gcGFkIHBhZCB2YWx1ZXNcbiAgICAgICAgICovXG4gICAgICAgIHN0YXRpYyBwYWRTaGFwZShkaW1zLCBwYWQyKSB7XG4gICAgICAgICAgY29uc3QgcmFuayA9IGRpbXMubGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBkaW1zLm1hcCgodiwgaSkgPT4gdiArIHBhZDJbaV0gKyBwYWQyW2kgKyByYW5rXSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgaWYgdGhlIHR3byBzaGFwZXMgYXJlIGlkZW50aWNhbFxuICAgICAgICAgKiBAcGFyYW0gc2hhcGUxXG4gICAgICAgICAqIEBwYXJhbSBzaGFwZTJcbiAgICAgICAgICovXG4gICAgICAgIHN0YXRpYyBhcmVFcXVhbChzaGFwZTEsIHNoYXBlMikge1xuICAgICAgICAgIGlmIChzaGFwZTEubGVuZ3RoICE9PSBzaGFwZTIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzaGFwZTEuZXZlcnkoKHYsIGkpID0+IHYgPT09IHNoYXBlMltpXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBQb29sQ29udlV0aWwgPSBjbGFzcyBfUG9vbENvbnZVdGlsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkanVzdCB0aGUga2VybmVsLCBzdHJpZGVzLCBwYWRzIHRvIGNvcnJlY3QgcmFuay4gU2V0IHRvIGRlZmF1bHQgdmFsdWUgaWYgbm90IHByZXNlbnRcbiAgICAgICAgICogQHBhcmFtIGlzR2xvYmFsT3BlcmF0b3IgSWYgdHJ1ZSwgcGVyZm9ybSBnbG9iYWwgcG9vbGluZy5cbiAgICAgICAgICogQHBhcmFtIGlucHV0RGltcyBUaGUgaW5wdXQgdGVuc29yIGRpbWVuc2lvbi5cbiAgICAgICAgICogQHBhcmFtIGtlcm5lbFNoYXBlIFRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYWxvbmcgZWFjaCBheGlzLlxuICAgICAgICAgKiBAcGFyYW0gc3RyaWRlcyBTdHJpZGUgYWxvbmcgZWFjaCBheGlzLlxuICAgICAgICAgKiBAcGFyYW0gZGlsYXRpb25zIERpbGF0aW9uIGFsb25nIGVhY2ggYXhpcy5cbiAgICAgICAgICogQHBhcmFtIHBhZHMgUGFkZGluZyBmb3IgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGFsb25nIGVhY2ggYXhpcy5cbiAgICAgICAgICovXG4gICAgICAgIHN0YXRpYyBhZGp1c3RQb29sQXR0cmlidXRlcyhpc0dsb2JhbE9wZXJhdG9yLCBpbnB1dERpbXMsIGtlcm5lbFNoYXBlLCBzdHJpZGVzLCBkaWxhdGlvbnMsIHBhZHMpIHtcbiAgICAgICAgICBpZiAoIWlzR2xvYmFsT3BlcmF0b3IgJiYga2VybmVsU2hhcGUubGVuZ3RoICE9PSBpbnB1dERpbXMubGVuZ3RoIC0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibGVuZ3RoIG9mIHNwZWNpZmllZCBrZXJuZWwgc2hhcGVzIHNob3VsZCBiZSAyIGxlc3MgdGhhbiBsZW5ndGggb2YgaW5wdXQgZGltZW5zaW9uc1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzR2xvYmFsT3BlcmF0b3IpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IGlucHV0RGltcy5sZW5ndGggLSAyOyBkaW0rKykge1xuICAgICAgICAgICAgICBpZiAoZGltID49IGtlcm5lbFNoYXBlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGtlcm5lbFNoYXBlLnB1c2goaW5wdXREaW1zW2RpbSArIDJdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXJuZWxTaGFwZVtkaW1dID0gaW5wdXREaW1zW2RpbSArIDJdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IGtlcm5lbFNoYXBlLmxlbmd0aDsgZGltKyspIHtcbiAgICAgICAgICAgIGlmIChkaW0gPCBzdHJpZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAoc3RyaWRlc1tkaW1dIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInN0cmlkZXMgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdHJpZGVzLnB1c2goMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IGtlcm5lbFNoYXBlLmxlbmd0aDsgZGltKyspIHtcbiAgICAgICAgICAgIGlmIChkaW0gPCBkaWxhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlmIChkaWxhdGlvbnNbZGltXSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkaWxhdGlvbnMgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkaWxhdGlvbnMucHVzaCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgZGltID0gMDsgZGltIDwga2VybmVsU2hhcGUubGVuZ3RoICogMjsgZGltKyspIHtcbiAgICAgICAgICAgIGlmIChkaW0gPCBwYWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAocGFkc1tkaW1dIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInBhZCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDFcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhZHMucHVzaCgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgZGltID0gMDsgZGltIDwga2VybmVsU2hhcGUubGVuZ3RoOyBkaW0rKykge1xuICAgICAgICAgICAgaWYgKGtlcm5lbFNoYXBlW2RpbV0gPD0gMCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXJuZWwgc2hhcGVzIG5lZWQgdG8gYmUgZ3JlYXRlciB0aGFuIDBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFkc1tkaW1dID49IGtlcm5lbFNoYXBlW2RpbV0gfHwgcGFkc1tkaW0gKyBrZXJuZWxTaGFwZS5sZW5ndGhdID49IGtlcm5lbFNoYXBlW2RpbV0pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicGFkcyBzaG91bGQgYmUgc21hbGxlciB0aGFuIGtlcm5lbFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRqdXN0IHBhZCB2YWx1ZXMgYmFzZWQgb24gJ2F1dG9QYWQnIGF0dHJpYnV0ZVxuICAgICAgICBzdGF0aWMgYWRqdXN0UGFkc0Jhc2VkT25BdXRvUGFkKGlucHV0RGltcywgc3RyaWRlcywgZGlsYXRpb25zLCBrZXJuZWxTaGFwZSwgcGFkcywgaXNDaGFubmVsTGFzdCwgYXV0b1BhZCkge1xuICAgICAgICAgIGlmICghYXV0b1BhZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFkcy5sZW5ndGggIT09IDIgKiAoaW5wdXREaW1zLmxlbmd0aCAtIDIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsZW5ndGggb2YgcGFkcyBzaG91bGQgYmUgdHdpY2UgdGhlIGxlbmd0aCBvZiBkYXRhIGRpbWVuc2lvbnNcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdHJpZGVzLmxlbmd0aCAhPT0gaW5wdXREaW1zLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImxlbmd0aCBvZiBzdHJpZGVzIHNob3VsZCBiZSB0aGUgbGVuZ3RoIG9mIGRhdGEgZGltZW5zaW9uc1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGtlcm5lbFNoYXBlLmxlbmd0aCAhPT0gaW5wdXREaW1zLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImxlbmd0aCBvZiBrZXJuZWwgc2hhcGVzIHNob3VsZCBiZSB0aGUgbGVuZ3RoIG9mIGRhdGEgZGltZW5zaW9uc1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgaW5wdXREaW1zLmxlbmd0aCAtIDI7IGRpbSsrKSB7XG4gICAgICAgICAgICBfUG9vbENvbnZVdGlsLmFkanVzdFBhZEFuZFJldHVyblNoYXBlKFxuICAgICAgICAgICAgICBpbnB1dERpbXNbZGltICsgKGlzQ2hhbm5lbExhc3QgPyAxIDogMildLFxuICAgICAgICAgICAgICBzdHJpZGVzW2RpbV0sXG4gICAgICAgICAgICAgIGRpbGF0aW9uc1tkaW1dLFxuICAgICAgICAgICAgICBrZXJuZWxTaGFwZVtkaW1dLFxuICAgICAgICAgICAgICBwYWRzLFxuICAgICAgICAgICAgICBkaW0sXG4gICAgICAgICAgICAgIGRpbSArIGlucHV0RGltcy5sZW5ndGggLSAyLFxuICAgICAgICAgICAgICBhdXRvUGFkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQ2FsY3VsYXRlIHRoZSBvdXRwdXQgc2hhcGUgZm9yIFBvb2wgb3BzIGJhc2VkIG9uIGlucHV0IGF0dHJpYnV0ZXMuIChTaG91bGQgYmUgdXNlZCBvbmx5IGZvciBQb29sIG9wcylcbiAgICAgICAgICogQHBhcmFtIGlzR2xvYmFsT3BlcmF0b3IgSWYgdHJ1ZSwgcGVyZm9ybSBnbG9iYWwgcG9vbGluZy5cbiAgICAgICAgICogQHBhcmFtIGlucHV0RGltcyBUaGUgaW5wdXQgdGVuc29yIGRpbWVuc2lvbi4gKGlucHV0c1swXS5kaW1zKVxuICAgICAgICAgKiBAcGFyYW0gc3RyaWRlcyBTdHJpZGUgYWxvbmcgZWFjaCBheGlzLlxuICAgICAgICAgKiBAcGFyYW0gZGlsYXRpb25zIERpbGF0aW9uIGFsb25nIGVhY2ggYXhpcy5cbiAgICAgICAgICogQHBhcmFtIGtlcm5lbFNoYXBlIFRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYWxvbmcgZWFjaCBheGlzLlxuICAgICAgICAgKiBAcGFyYW0gcGFkcyBQYWRkaW5nIGZvciB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgYWxvbmcgZWFjaCBheGlzLlxuICAgICAgICAgKiBAcGFyYW0gYXV0b1BhZCBERVBSRUNBVEVEIGF0dHJpYnV0ZSBzdXBwb3J0ZWQgZm9yIGxlZ2FjeSBtb2RlbHMuIFNwZWNpZmllcyBob3cgdG8gaW1wbGljaXRseSBjYWxjdWxhdGUgcGFkcyBpbiBlYWNoXG4gICAgICAgICAqICAgICBkaW1lbnNpb24uIENhbiB0YWtlIHZhbHVlcyBOT1RTRVQsIFNBTUVfVVBQRVIsIFNBTUVfTE9XRVIsIG9yIFZBTElELlxuICAgICAgICAgKi9cbiAgICAgICAgc3RhdGljIGNvbXB1dGVQb29sT3V0cHV0U2hhcGUoaXNHbG9iYWxPcGVyYXRvciwgaW5wdXREaW1zLCBzdHJpZGVzLCBkaWxhdGlvbnMsIGtlcm5lbFNoYXBlLCBwYWRzLCBhdXRvUGFkKSB7XG4gICAgICAgICAgaWYgKGlucHV0RGltcy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5wdXQgc2hhcGUgbXVzdCBiZSBvZiBzaXplIGdyZWF0ZXIgdGhhbiAwXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvdXRwdXREaW1zID0gW2lucHV0RGltc1swXSwgaW5wdXREaW1zWzFdXTtcbiAgICAgICAgICBfUG9vbENvbnZVdGlsLmNvbXB1dGVTaGFwZUhlbHBlcihcbiAgICAgICAgICAgIGlzR2xvYmFsT3BlcmF0b3IsXG4gICAgICAgICAgICBpbnB1dERpbXMsXG4gICAgICAgICAgICBvdXRwdXREaW1zLFxuICAgICAgICAgICAgc3RyaWRlcyxcbiAgICAgICAgICAgIGRpbGF0aW9ucyxcbiAgICAgICAgICAgIGtlcm5lbFNoYXBlLFxuICAgICAgICAgICAgcGFkcyxcbiAgICAgICAgICAgIGF1dG9QYWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBvdXRwdXREaW1zO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYWxjdWxhdGUgdGhlIG91dHB1dCBzaGFwZSBmb3IgQ29udiBvcCBiYXNlZCBvbiBpbnB1dCBhdHRyaWJ1dGVzLiAoU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgQ29udiBvcClcbiAgICAgICAgICogQHBhcmFtIGlucHV0RGltcyBUaGUgaW5wdXQgdGVuc29yIGRpbWVuc2lvbi4gKGlucHV0c1swXS5kaW1zKVxuICAgICAgICAgKiBAcGFyYW0gZmlsdGVyRGltcyBUaGUgZmlsdGVyIHRlbnNvciBkaW1lbnNpb24uIChpbnB1dHNbMV0uZGltcylcbiAgICAgICAgICogQHBhcmFtIHN0cmlkZXMgU3RyaWRlIGFsb25nIGVhY2ggYXhpcy5cbiAgICAgICAgICogQHBhcmFtIGtlcm5lbFNoYXBlIFRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYWxvbmcgZWFjaCBheGlzLlxuICAgICAgICAgKiBAcGFyYW0gcGFkcyBQYWRkaW5nIGZvciB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgYWxvbmcgZWFjaCBheGlzLlxuICAgICAgICAgKiBAcGFyYW0gYXV0b1BhZCBERVBSRUNBVEVEIGF0dHJpYnV0ZSBzdXBwb3J0ZWQgZm9yIGxlZ2FjeSBtb2RlbHMuIFNwZWNpZmllcyBob3cgdG8gaW1wbGljaXRseSBjYWxjdWxhdGUgcGFkcyBpbiBlYWNoXG4gICAgICAgICAqICAgICBkaW1lbnNpb24uIENhbiB0YWtlIHZhbHVlcyBOT1RTRVQsIFNBTUVfVVBQRVIsIFNBTUVfTE9XRVIsIG9yIFZBTElELlxuICAgICAgICAgKi9cbiAgICAgICAgc3RhdGljIGNvbXB1dGVDb252T3V0cHV0U2hhcGUoaW5wdXREaW1zLCBmaWx0ZXJEaW1zLCBzdHJpZGVzLCBkaWxhdGlvbnMsIGtlcm5lbFNoYXBlLCBwYWRzLCBhdXRvUGFkKSB7XG4gICAgICAgICAgaWYgKGlucHV0RGltcy5sZW5ndGggPD0gMCB8fCBmaWx0ZXJEaW1zLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGlucHV0IHRlbnNvciBkaW1zIG9yIGludmFsaWQgZmlsdGVyIHRlbnNvciBkaW1zXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvdXRwdXREaW1zID0gW2lucHV0RGltc1swXSwgZmlsdGVyRGltc1swXV07XG4gICAgICAgICAgX1Bvb2xDb252VXRpbC5jb21wdXRlU2hhcGVIZWxwZXIoZmFsc2UsIGlucHV0RGltcywgb3V0cHV0RGltcywgc3RyaWRlcywgZGlsYXRpb25zLCBrZXJuZWxTaGFwZSwgcGFkcywgYXV0b1BhZCk7XG4gICAgICAgICAgcmV0dXJuIG91dHB1dERpbXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2lsbCBjb21wdXRlIG91dHB1dCBzaGFwZXMgZm9yIGRhdGEgZGltZW5zaW9ucyBPTkxZIChpLmUuKSBubyBiYXRjaCBzaXplIGFuZCBjaGFubmVsc1xuICAgICAgICAvLyBjYWxsZWQgYnkgY29tcHV0ZVBvb2xPdXRwdXRTaGFwZSgpIGFuZCBjb21wdXRlQ29udk91dHB1dFNoYXBlKClcbiAgICAgICAgLy8gYWRqdXN0IHBhZHMgYmFzZWQgb24gJ2F1dG9QYWQnIGF0dHJpYnV0ZSBwcmlvciB0byBzaGFwZSBjb21wdXRhdGlvblxuICAgICAgICBzdGF0aWMgY29tcHV0ZVNoYXBlSGVscGVyKGlzR2xvYmFsT3BlcmF0b3IsIGlucHV0RGltcywgb3V0cHV0RGltcywgc3RyaWRlcywgZGlsYXRpb25zLCBrZXJuZWxTaGFwZSwgcGFkcywgYXV0b1BhZCkge1xuICAgICAgICAgIGlmIChpc0dsb2JhbE9wZXJhdG9yKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBpbnB1dERpbXMubGVuZ3RoIC0gMjsgZGltKyspIHtcbiAgICAgICAgICAgICAgb3V0cHV0RGltcy5wdXNoKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBpbnB1dERpbXMubGVuZ3RoIC0gMjsgZGltKyspIHtcbiAgICAgICAgICAgICAgb3V0cHV0RGltcy5wdXNoKF9Qb29sQ29udlV0aWwuYWRqdXN0UGFkQW5kUmV0dXJuU2hhcGUoXG4gICAgICAgICAgICAgICAgaW5wdXREaW1zW2RpbSArIDJdLFxuICAgICAgICAgICAgICAgIHN0cmlkZXNbZGltXSxcbiAgICAgICAgICAgICAgICBkaWxhdGlvbnNbZGltXSxcbiAgICAgICAgICAgICAgICBrZXJuZWxTaGFwZVtkaW1dLFxuICAgICAgICAgICAgICAgIHBhZHMsXG4gICAgICAgICAgICAgICAgZGltLFxuICAgICAgICAgICAgICAgIGRpbSArIGlucHV0RGltcy5sZW5ndGggLSAyLFxuICAgICAgICAgICAgICAgIGF1dG9QYWRcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhlbHBlciBmb3IgY29tcHV0ZVNoYXBlSGVscGVyKCkgYW5kIGFkanVzdFBhZHNCYXNlZE9uQXV0b1BhZCgpXG4gICAgICAgIC8vIGFkanVzdHMgcGFkIHZhbHVlIGZvciBnaXZlbiAnYXV0b1BhZCcgc3RyaW5nIGFuZCBjb21wdXRlcyBvdXRwdXQgc2hhcGUgYWxvbmcgYSBwYXJ0aWN1bGFyIGRpbWVuc2lvblxuICAgICAgICBzdGF0aWMgYWRqdXN0UGFkQW5kUmV0dXJuU2hhcGUoaW5TaXplLCBzdHJpZGUsIGRpbGF0aW9uLCBrZXJuZWwsIHBhZHMsIHBhZEhlYWRJbmRleCwgcGFkVGFpbEluZGV4LCBhdXRvUGFkKSB7XG4gICAgICAgICAgY29uc3QgZGtlcm5lbCA9IGRpbGF0aW9uICogKGtlcm5lbCAtIDEpICsgMTtcbiAgICAgICAgICBpZiAoYXV0b1BhZCAmJiBhdXRvUGFkICE9PSBcIk5PVFNFVFwiKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGF1dG9QYWQpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIlZBTElEXCI6XG4gICAgICAgICAgICAgICAgcGFkc1twYWRIZWFkSW5kZXhdID0gMDtcbiAgICAgICAgICAgICAgICBwYWRzW3BhZFRhaWxJbmRleF0gPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKChpblNpemUgLSBka2VybmVsKSAvIHN0cmlkZSArIDEpO1xuICAgICAgICAgICAgICBjYXNlIFwiU0FNRV9MT1dFUlwiOlxuICAgICAgICAgICAgICBjYXNlIFwiU0FNRV9VUFBFUlwiOlxuICAgICAgICAgICAgICAgIGlmIChkaWxhdGlvbiAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlsYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgU0FNRV9VUFBFUiBvciBTQU1FX0xPV0VSXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsZWdhY3lUYXJnZXRTaXplID0gKGluU2l6ZSArIHN0cmlkZSAtIDEpIC8gc3RyaWRlO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFkTmVlZGVkID0gKGxlZ2FjeVRhcmdldFNpemUgLSAxKSAqIHN0cmlkZSArIGtlcm5lbCAtIGluU2l6ZTtcbiAgICAgICAgICAgICAgICAgIHBhZHNbcGFkSGVhZEluZGV4XSA9IGF1dG9QYWQgPT09IFwiU0FNRV9MT1dFUlwiID8gTWF0aC5mbG9vcigocGFkTmVlZGVkICsgMSkgLyAyKSA6IE1hdGguZmxvb3IocGFkTmVlZGVkIC8gMik7XG4gICAgICAgICAgICAgICAgICBwYWRzW3BhZFRhaWxJbmRleF0gPSBwYWROZWVkZWQgLSBwYWRzW3BhZEhlYWRJbmRleF07XG4gICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoaW5TaXplICsgcGFkTmVlZGVkIC0ga2VybmVsKSAvIHN0cmlkZSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBBdXRvUGFkIHR5cGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKChpblNpemUgKyBwYWRzW3BhZEhlYWRJbmRleF0gKyBwYWRzW3BhZFRhaWxJbmRleF0gLSBka2VybmVsKSAvIHN0cmlkZSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIEdlbW1VdGlsID0gY2xhc3Mge1xuICAgICAgICAvLyB3aWxsIG1ha2Ugc3VyZSBpbnB1dCBzaGFwZXMgYXJlIGNvbXBhdGlibGUgZm9yIHRoaXMgb3BcbiAgICAgICAgLy8gYW5kIHJldHVybiBiYWNrIHRoZSBzaGFwZSBvZiB0aGUgb3V0cHV0IGluIHRoZSBmb3JtIG9mIGEgdHVwbGVcbiAgICAgICAgLy8gd2lsbCB0aHJvdyBleGNlcHRpb24gaWYgdGhlIGlucHV0IHNoYXBlcyBhcmUgbm90IGNvbXBhdGlibGVcbiAgICAgICAgc3RhdGljIGdldFNoYXBlT2ZHZW1tUmVzdWx0KGxlZnRTaGFwZSwgdHJhbnNMZWZ0LCByaWdodFNoYXBlLCB0cmFuc1JpZ2h0LCBiaWFzU2hhcGUpIHtcbiAgICAgICAgICBpZiAobGVmdFNoYXBlLmxlbmd0aCAhPT0gMiB8fCByaWdodFNoYXBlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2hhcGUgbmVlZCB0byBiZSBvZiBzaXplIDJcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBNO1xuICAgICAgICAgIGxldCBLO1xuICAgICAgICAgIGxldCBOO1xuICAgICAgICAgIGlmICh0cmFuc0xlZnQpIHtcbiAgICAgICAgICAgIE0gPSBsZWZ0U2hhcGVbMV07XG4gICAgICAgICAgICBLID0gbGVmdFNoYXBlWzBdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBNID0gbGVmdFNoYXBlWzBdO1xuICAgICAgICAgICAgSyA9IGxlZnRTaGFwZVsxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGtEaW0gPSAtMTtcbiAgICAgICAgICBpZiAodHJhbnNSaWdodCkge1xuICAgICAgICAgICAgTiA9IHJpZ2h0U2hhcGVbMF07XG4gICAgICAgICAgICBrRGltID0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgTiA9IHJpZ2h0U2hhcGVbMV07XG4gICAgICAgICAgICBrRGltID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJpZ2h0U2hhcGVba0RpbV0gIT09IEspIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRpbWVuc2lvbiBtaXNtYXRjaFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKE0gPD0gMCB8fCBOIDw9IDAgfHwgSyA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHNoYXBlIHNwZWNpZmllZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJpYXNTaGFwZSAmJiAhQnJvYWRjYXN0VXRpbC5pc1ZhbGlkQnJvYWRjYXN0KGJpYXNTaGFwZSwgW00sIE5dKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2VtbTogaW52YWxpZCBiaWFzIHNoYXBlIGZvciBicm9hZGNhc3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbTSwgTiwgS107XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBNSU5fQ0xJUCA9IC0zNDAyODIzNDY2Mzg1Mjg4NmUyMjtcbiAgICAgIE1BWF9DTElQID0gMzQwMjgyMzQ2NjM4NTI4ODZlMjI7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2NvbW1vbi50c1xuICB2YXIgV09SS0dST1VQX1NJWkUsIGdldFdnc2xNYXBwZWRUeXBlLCB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUsIHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUsIGNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzLCBnZXRNYXhDb21wb25lbnRzLCBmaWxsVmVjdG9yLCBjYXN0VG9GMzIsIHN1bVZlY3RvciwgZ2V0RWxlbWVudEF0LCBjcmVhdGVJbmRpY2VzSGVscGVyLCBpbnB1dFZhcmlhYmxlLCBvdXRwdXRWYXJpYWJsZSwgaW50ZXJuYWxWYXJpYWJsZSwgU2hhZGVySGVscGVySW1wbCwgY3JlYXRlU2hhZGVySGVscGVyLCBnZXRCcm9hZGNhc3REaW1zO1xuICB2YXIgaW5pdF9jb21tb24gPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2NvbW1vbi50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIFdPUktHUk9VUF9TSVpFID0gNjQ7XG4gICAgICBnZXRXZ3NsTWFwcGVkVHlwZSA9ICh0eXBlLCBjb21wb25lbnRzKSA9PiB7XG4gICAgICAgIGlmIChjb21wb25lbnRzID09PSAzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidmVjMyBoYXMgc2FtZSBhbGlnbm1lbnQgYXMgdmVjNCwgdXNlIHZlYzQgaW5zdGVhZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIDEwIC8qIGZsb2F0MTYgKi86XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cyA+IDEgPyBgdmVjJHtjb21wb25lbnRzfTxmMTY+YCA6IFwiZjE2XCI7XG4gICAgICAgICAgY2FzZSAxIC8qIGZsb2F0ICovOlxuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHMgPiAxID8gYHZlYyR7Y29tcG9uZW50c308ZjMyPmAgOiBcImYzMlwiO1xuICAgICAgICAgIGNhc2UgNiAvKiBpbnQzMiAqLzpcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzID4gMSA/IGB2ZWMke2NvbXBvbmVudHN9PGkzMj5gIDogXCJpMzJcIjtcbiAgICAgICAgICBjYXNlIDEyIC8qIHVpbnQzMiAqLzpcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzID4gMSA/IGB2ZWMke2NvbXBvbmVudHN9PHUzMj5gIDogXCJ1MzJcIjtcbiAgICAgICAgICBjYXNlIDcgLyogaW50NjQgKi86XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cyA+IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmVjWCBvZiB1aW50NjQgeWV0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtcInZlYzI8dTMyPlwiLCBcImkzMlwiXTtcbiAgICAgICAgICBjYXNlIDEzIC8qIHVpbnQ2NCAqLzpcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzID4gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2ZWNYIG9mIHVpbnQ2NCB5ZXRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW1widmVjMjx1MzI+XCIsIFwidTMyXCJdO1xuICAgICAgICAgIGNhc2UgOSAvKiBib29sICovOlxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMgIT09IDQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYm9vbCBtdXN0IGJlIHZlYzRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW1widTMyXCIsIFwidmVjNDxib29sPlwiXTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRhdGEgdHlwZTogJHt0eXBlfWApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlID0gKHR5cGUsIGNvbXBvbmVudHMgPSAxKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcHBlZFR5cGUgPSBnZXRXZ3NsTWFwcGVkVHlwZSh0eXBlLCBjb21wb25lbnRzKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBtYXBwZWRUeXBlID09PSBcInN0cmluZ1wiID8gbWFwcGVkVHlwZSA6IG1hcHBlZFR5cGVbMF07XG4gICAgICB9O1xuICAgICAgdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZSA9ICh0eXBlLCBjb21wb25lbnRzID0gMSkgPT4ge1xuICAgICAgICBjb25zdCBtYXBwZWRUeXBlID0gZ2V0V2dzbE1hcHBlZFR5cGUodHlwZSwgY29tcG9uZW50cyk7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbWFwcGVkVHlwZSA9PT0gXCJzdHJpbmdcIiA/IG1hcHBlZFR5cGUgOiBtYXBwZWRUeXBlWzFdO1xuICAgICAgfTtcbiAgICAgIGNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzID0gKC4uLmRpbXMpID0+IHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0gW107XG4gICAgICAgIGRpbXMuZm9yRWFjaCgoZGltKSA9PiB7XG4gICAgICAgICAgaWYgKGRpbS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKFxuICAgICAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogZGltIH0sXG4gICAgICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoZGltKSB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm9ncmFtVW5pZm9ybXM7XG4gICAgICB9O1xuICAgICAgZ2V0TWF4Q29tcG9uZW50cyA9IChzaXplKSA9PiB7XG4gICAgICAgIGlmIChzaXplICUgNCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICB9IGVsc2UgaWYgKHNpemUgJSAyID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9O1xuICAgICAgZmlsbFZlY3RvciA9IChkYXRhVHlwZSA9IFwiZjMyXCIsIGNvbXBvbmVudHMsIHZhbHVlID0gXCIwXCIpID0+IHtcbiAgICAgICAgaWYgKCFjb21wb25lbnRzIHx8IGNvbXBvbmVudHMgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVR5cGV9KCR7dmFsdWV9KWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGB2ZWMke2NvbXBvbmVudHN9PCR7ZGF0YVR5cGV9Pigke3ZhbHVlfSlgO1xuICAgICAgfTtcbiAgICAgIGNhc3RUb0YzMiA9IChkYXRhVHlwZSwgY29tcG9uZW50cywgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGRhdGFUeXBlID09PSBcImYzMlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRzID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIGBmMzIoJHt2YWx1ZX0pYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYHZlYyR7Y29tcG9uZW50c308ZjMyPigke3ZhbHVlfSlgO1xuICAgICAgfTtcbiAgICAgIHN1bVZlY3RvciA9IChuYW1lLCBjb21wb25lbnRzKSA9PiB7XG4gICAgICAgIGlmIChjb21wb25lbnRzID09PSA0KSB7XG4gICAgICAgICAgcmV0dXJuIGAoJHtuYW1lfS54ICsgJHtuYW1lfS55ICsgJHtuYW1lfS56ICsgJHtuYW1lfS53KWA7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50cyA9PT0gMikge1xuICAgICAgICAgIHJldHVybiBgKCR7bmFtZX0ueCArICR7bmFtZX0ueSlgO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudHMgPT09IDMpIHtcbiAgICAgICAgICByZXR1cm4gYCgke25hbWV9LnggKyAke25hbWV9LnkgKyAke25hbWV9LnopYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgIH07XG4gICAgICBnZXRFbGVtZW50QXQgPSAobmFtZSwgaW5kZXgsIGxlbmd0aCwgdHlwZSkgPT4ge1xuICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKFwidW5pZm9ybXMuXCIpICYmIGxlbmd0aCA+IDQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGluZGV4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJmMTZcIikge1xuICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX1bKCR7aW5kZXh9KSAvIDhdWygke2luZGV4fSkgJSA4IC8gNF1bKCR7aW5kZXh9KSAlIDggJSA0XWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX1bKCR7aW5kZXh9KSAvIDRdWygke2luZGV4fSkgJSA0XWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcImYxNlwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfVske01hdGguZmxvb3IoaW5kZXggLyA4KX1dWyR7TWF0aC5mbG9vcihpbmRleCAlIDggLyA0KX1dWyR7aW5kZXggJSA4ICUgNH1dYDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfVske01hdGguZmxvb3IoaW5kZXggLyA0KX1dWyR7aW5kZXggJSA0fV1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbGVuZ3RoID4gMSA/IGAke25hbWV9WyR7aW5kZXh9XWAgOiBuYW1lO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY3JlYXRlSW5kaWNlc0hlbHBlciA9IChuYW1lLCB0ZW5zb3JUeXBlLCBzaGFwZU9yUmFuaywgdXNhZ2UsIGNvbXBvbmVudHMpID0+IHtcbiAgICAgICAgY29uc3QgdXNlVW5pZm9ybSA9IHR5cGVvZiBzaGFwZU9yUmFuayA9PT0gXCJudW1iZXJcIjtcbiAgICAgICAgY29uc3QgcmFuayA9IHVzZVVuaWZvcm0gPyBzaGFwZU9yUmFuayA6IHNoYXBlT3JSYW5rLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmFua0lkZW50aXR5ID0gWy4uLm5ldyBBcnJheShyYW5rKS5rZXlzKCldO1xuICAgICAgICBjb25zdCBpbmRpY2VzVHlwZSA9IHJhbmsgPCAyID8gXCJ1MzJcIiA6IHJhbmsgPD0gNCA/IGB2ZWMke3Jhbmt9PHUzMj5gIDogYGFycmF5PHUzMiwgJHtyYW5rfT5gO1xuICAgICAgICBjb25zdCBtYXBwZWRUeXBlID0gZ2V0V2dzbE1hcHBlZFR5cGUodGVuc29yVHlwZSwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHR5cGVvZiBtYXBwZWRUeXBlID09PSBcInN0cmluZ1wiID8gbWFwcGVkVHlwZSA6IG1hcHBlZFR5cGVbMV07XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VUeXBlID0gdHlwZW9mIG1hcHBlZFR5cGUgPT09IFwic3RyaW5nXCIgPyBtYXBwZWRUeXBlIDogbWFwcGVkVHlwZVswXTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHsgaW5kaWNlczogaW5kaWNlc1R5cGUsIHZhbHVlOiB2YWx1ZVR5cGUsIHN0b3JhZ2U6IHN0b3JhZ2VUeXBlLCB0ZW5zb3I6IHRlbnNvclR5cGUgfTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplRGltID0gKGRpbSkgPT4gdHlwZW9mIGRpbSA9PT0gXCJzdHJpbmdcIiA/IGRpbSA6IGAke2RpbX11YDtcbiAgICAgICAgY29uc3QgaW1wbGVtZW50YXRpb25Vc2VkID0ge1xuICAgICAgICAgIG9mZnNldFRvSW5kaWNlczogZmFsc2UsXG4gICAgICAgICAgaW5kaWNlc1RvT2Zmc2V0OiBmYWxzZSxcbiAgICAgICAgICBicm9hZGNhc3RlZEluZGljZXNUb09mZnNldDogZmFsc2UsXG4gICAgICAgICAgc2V0OiBmYWxzZSxcbiAgICAgICAgICBzZXRCeUluZGljZXM6IGZhbHNlLFxuICAgICAgICAgIGdldDogZmFsc2UsXG4gICAgICAgICAgZ2V0QnlJbmRpY2VzOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1bmlmb3JtUHJlZml4ID0gdXNlVW5pZm9ybSA/IFwidW5pZm9ybXMuXCIgOiBcIlwiO1xuICAgICAgICBjb25zdCBzaGFwZSA9IGAke3VuaWZvcm1QcmVmaXh9JHtuYW1lfV9zaGFwZWA7XG4gICAgICAgIGNvbnN0IHN0cmlkZXMgPSBgJHt1bmlmb3JtUHJlZml4fSR7bmFtZX1fc3RyaWRlc2A7XG4gICAgICAgIGxldCBvMmlTbmlwcGV0ID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5rIC0gMTsgaSsrKSB7XG4gICAgICAgICAgbzJpU25pcHBldCArPSBgXG4gICAgbGV0IGRpbSR7aX0gPSBjdXJyZW50IC8gJHtnZXRFbGVtZW50QXQoc3RyaWRlcywgaSwgcmFuayl9O1xuICAgIGxldCByZXN0JHtpfSA9IGN1cnJlbnQgJSAke2dldEVsZW1lbnRBdChzdHJpZGVzLCBpLCByYW5rKX07XG4gICAgaW5kaWNlc1ske2l9XSA9IGRpbSR7aX07XG4gICAgY3VycmVudCA9IHJlc3Qke2l9O1xuICAgIGA7XG4gICAgICAgIH1cbiAgICAgICAgbzJpU25pcHBldCArPSBgaW5kaWNlc1ske3JhbmsgLSAxfV0gPSBjdXJyZW50O2A7XG4gICAgICAgIGNvbnN0IG9mZnNldFRvSW5kaWNlc0ltcGxlbWVudGF0aW9uID0gcmFuayA8IDIgPyBcIlwiIDogYFxuICBmbiBvMmlfJHtuYW1lfShvZmZzZXQ6IHUzMikgLT4gJHt0eXBlLmluZGljZXN9IHtcbiAgICB2YXIgaW5kaWNlczogJHt0eXBlLmluZGljZXN9O1xuICAgIHZhciBjdXJyZW50ID0gb2Zmc2V0O1xuICAgICR7bzJpU25pcHBldH1cbiAgICByZXR1cm4gaW5kaWNlcztcbiAgfWA7XG4gICAgICAgIGNvbnN0IG9mZnNldFRvSW5kaWNlcyA9ICh2YXJPZmZzZXQpID0+IHtcbiAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQub2Zmc2V0VG9JbmRpY2VzID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gcmFuayA8IDIgPyB2YXJPZmZzZXQgOiBgbzJpXyR7bmFtZX0oJHt2YXJPZmZzZXR9KWA7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9mZnNldHMgPSBbXTtcbiAgICAgICAgaWYgKHJhbmsgPj0gMikge1xuICAgICAgICAgIGZvciAobGV0IGkgPSByYW5rIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIG9mZnNldHMucHVzaChgJHtnZXRFbGVtZW50QXQoc3RyaWRlcywgaSwgcmFuayl9ICogKGluZGljZXNbJHtpfV0pYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGljZXNUb09mZnNldEltcGxlbWVudGF0aW9uID0gcmFuayA8IDIgPyBcIlwiIDogYFxuICBmbiBpMm9fJHtuYW1lfShpbmRpY2VzOiAke3R5cGUuaW5kaWNlc30pIC0+IHUzMiB7XG4gICAgcmV0dXJuICR7b2Zmc2V0cy5qb2luKFwiK1wiKX07XG4gIH1gO1xuICAgICAgICBjb25zdCBpbmRpY2VzVG9PZmZzZXQgPSAodmFySW5kaWNlcykgPT4ge1xuICAgICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5pbmRpY2VzVG9PZmZzZXQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiByYW5rIDwgMiA/IHZhckluZGljZXMgOiBgaTJvXyR7bmFtZX0oJHt2YXJJbmRpY2VzfSlgO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbmRpY2VzID0gKC4uLmluaXQyKSA9PiByYW5rID09PSAwID8gXCIwdVwiIDogYCR7dHlwZS5pbmRpY2VzfSgke2luaXQyLm1hcChub3JtYWxpemVEaW0pLmpvaW4oXCIsXCIpfSlgO1xuICAgICAgICBjb25zdCBpbmRpY2VzR2V0ID0gKHZhckluZGljZXMsIGlkeCkgPT4ge1xuICAgICAgICAgIGlmIChyYW5rIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIGAke3ZhckluZGljZXN9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2dldEVsZW1lbnRBdCh2YXJJbmRpY2VzLCBpZHgsIHJhbmspfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbmRpY2VzU2V0ID0gKHZhckluZGljZXMsIGlkeCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAocmFuayA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt2YXJJbmRpY2VzfT0ke3ZhbHVlfTtgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7Z2V0RWxlbWVudEF0KHZhckluZGljZXMsIGlkeCwgcmFuayl9PSR7dmFsdWV9O2A7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBicm9hZGNhc3RlZEluZGljZXNUb09mZnNldEltcGxlbWVudGF0aW9uID0ge307XG4gICAgICAgIGNvbnN0IGJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0ID0gKHZhckluZGljZXMsIG91dHB1dCkgPT4ge1xuICAgICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgaW1wbEtleSA9IGAke291dHB1dC5uYW1lfWJyb2FkY2FzdGVkSW5kaWNlc1RvJHtuYW1lfU9mZnNldGA7XG4gICAgICAgICAgaWYgKGltcGxLZXkgaW4gYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXRJbXBsZW1lbnRhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGAke2ltcGxLZXl9KCR7dmFySW5kaWNlc30pYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0czIgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gcmFuayAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBvdXRwdXQuaW5kaWNlc0dldChcIm91dHB1dEluZGljZXNcIiwgaSArIG91dHB1dC5yYW5rIC0gcmFuayk7XG4gICAgICAgICAgICBvZmZzZXRzMi5wdXNoKGAke2luZGljZXNHZXQoc3RyaWRlcywgaSl9ICogKCR7aWR4fSAlICR7aW5kaWNlc0dldChzaGFwZSwgaSl9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicm9hZGNhc3RlZEluZGljZXNUb09mZnNldEltcGxlbWVudGF0aW9uW2ltcGxLZXldID0gYGZuICR7aW1wbEtleX0ob3V0cHV0SW5kaWNlczogJHtvdXRwdXQudHlwZS5pbmRpY2VzfSkgLT4gdTMyIHtcbiAgICAgICAgICAgICByZXR1cm4gJHtvZmZzZXRzMi5sZW5ndGggPiAwID8gb2Zmc2V0czIuam9pbihcIitcIikgOiBcIjB1XCJ9O1xuICAgICAgICAgICB9YDtcbiAgICAgICAgICByZXR1cm4gYCR7aW1wbEtleX0oJHt2YXJJbmRpY2VzfSlgO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXRCeU9mZnNldCA9IChvZmZzZXQsIHZhbHVlKSA9PiAoKCkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlLnN0b3JhZ2UgPT09IHR5cGUudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfVske29mZnNldH1dPSR7dmFsdWV9O2A7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN0b3JhZ2UgPT09IFwidmVjMjx1MzI+XCIgJiYgdHlwZS52YWx1ZSA9PT0gXCJpMzJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9WyR7b2Zmc2V0fV09dmVjMjx1MzI+KHUzMigke3ZhbHVlfSksIHNlbGVjdCgwdSwgMHhGRkZGRkZGRnUsICR7dmFsdWV9IDwgMCkpO2A7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN0b3JhZ2UgPT09IFwidmVjMjx1MzI+XCIgJiYgdHlwZS52YWx1ZSA9PT0gXCJ1MzJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9WyR7b2Zmc2V0fV09dmVjMjx1MzI+KHUzMigke3ZhbHVlfSksIDB1KTtgO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdG9yYWdlID09PSBcInUzMlwiICYmIHR5cGUudmFsdWUgPT09IFwidmVjNDxib29sPlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bmFtZX1bJHtvZmZzZXR9XT1kb3QodmVjNDx1MzI+KDB4MSwgMHgxMDAsIDB4MTAwMDAsIDB4MTAwMDAwMCksIHZlYzQ8dTMyPigke3ZhbHVlfSkpO2A7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IHN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBzdG9yYWdlIHR5cGUgJHt0eXBlLnN0b3JhZ2V9IGFuZCB2YWx1ZSB0eXBlICR7dHlwZS52YWx1ZX0geWV0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICBjb25zdCBnZXRCeU9mZnNldCA9IChvZmZzZXQpID0+ICgoKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGUuc3RvcmFnZSA9PT0gdHlwZS52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9WyR7b2Zmc2V0fV1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdG9yYWdlID09PSBcInZlYzI8dTMyPlwiICYmIHR5cGUudmFsdWUgPT09IFwiaTMyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgaTMyKCR7bmFtZX1bJHtvZmZzZXR9XS54KWA7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN0b3JhZ2UgPT09IFwidmVjMjx1MzI+XCIgJiYgdHlwZS52YWx1ZSA9PT0gXCJ1MzJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGB1MzIoJHtuYW1lfVske29mZnNldH1dLngpYDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuc3RvcmFnZSA9PT0gXCJ1MzJcIiAmJiB0eXBlLnZhbHVlID09PSBcInZlYzQ8Ym9vbD5cIikge1xuICAgICAgICAgICAgcmV0dXJuIGB2ZWM0PGJvb2w+KGJvb2woJHtuYW1lfVske29mZnNldH1dICYgMHhGRnUpLCBib29sKCR7bmFtZX1bJHtvZmZzZXR9XSAmIDB4RkYwMHUpLCBib29sKCR7bmFtZX1bJHtvZmZzZXR9XSAmIDB4RkYwMDAwdSksIGJvb2woJHtuYW1lfVske29mZnNldH1dICYgMHhGRjAwMDAwMHUpKWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IHN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiBzdG9yYWdlIHR5cGUgJHt0eXBlLnN0b3JhZ2V9IGFuZCB2YWx1ZSB0eXBlICR7dHlwZS52YWx1ZX0geWV0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICBjb25zdCBnZXRCeUluZGljZXNJbXBsZW1lbnRhdGlvbiA9IHJhbmsgPCAyID8gXCJcIiA6IGBcbiAgZm4gZ2V0XyR7bmFtZX1CeUluZGljZXMoaW5kaWNlczogJHt0eXBlLmluZGljZXN9KSAtPiAke3ZhbHVlVHlwZX0ge1xuICAgIHJldHVybiAke2dldEJ5T2Zmc2V0KGBpMm9fJHtuYW1lfShpbmRpY2VzKWApfTtcbiAgfWA7XG4gICAgICAgIGNvbnN0IGdldEltcGxlbWVudGF0aW9uID0gcmFuayA8IDIgPyBcIlwiIDogKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBmdW5jdGlvblBhcmFtcyA9IHJhbmtJZGVudGl0eS5tYXAoKGkpID0+IGBkJHtpfTogdTMyYCkuam9pbihcIiwgXCIpO1xuICAgICAgICAgIGNvbnN0IGRpbXNQYXJhbXMgPSByYW5rSWRlbnRpdHkubWFwKChpKSA9PiBgZCR7aX1gKS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgcmV0dXJuIGBcbiAgZm4gZ2V0XyR7bmFtZX0oJHtmdW5jdGlvblBhcmFtc30pIC0+ICR7dmFsdWVUeXBlfSB7XG4gICAgcmV0dXJuIGdldF8ke25hbWV9QnlJbmRpY2VzKCR7aW5kaWNlcyhkaW1zUGFyYW1zKX0pO1xuICB9YDtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgY29uc3QgZ2V0ID0gKC4uLmluZGljZXMyKSA9PiB7XG4gICAgICAgICAgaWYgKGluZGljZXMyLmxlbmd0aCAhPT0gcmFuaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbmRpY2VzIGxlbmd0aCBtdXN0IGJlICR7cmFua31gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEluZGljZXMgPSBpbmRpY2VzMi5tYXAobm9ybWFsaXplRGltKS5qb2luKFwiLFwiKTtcbiAgICAgICAgICBpZiAocmFuayA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0KFwiMHVcIik7XG4gICAgICAgICAgfSBlbHNlIGlmIChyYW5rID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QnlPZmZzZXQobm9ybWFsaXplZEluZGljZXNbMF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuZ2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5nZXRCeUluZGljZXMgPSB0cnVlO1xuICAgICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLmluZGljZXNUb09mZnNldCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gYGdldF8ke25hbWV9KCR7bm9ybWFsaXplZEluZGljZXN9KWA7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnZXRCeUluZGljZXMgPSAodmFySW5kaWNlcykgPT4ge1xuICAgICAgICAgIGlmIChyYW5rIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIGdldEJ5T2Zmc2V0KHZhckluZGljZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuZ2V0QnlJbmRpY2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5pbmRpY2VzVG9PZmZzZXQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGBnZXRfJHtuYW1lfUJ5SW5kaWNlcygke3ZhckluZGljZXN9KWA7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXRCeUluZGljZXNJbXBsZW1lbnRhdGlvbiA9IHJhbmsgPCAyID8gXCJcIiA6IGBcbiAgZm4gc2V0XyR7bmFtZX1CeUluZGljZXMoaW5kaWNlczogJHt0eXBlLmluZGljZXN9LCB2YWx1ZTogJHt2YWx1ZVR5cGV9KSB7XG4gICAgJHtzZXRCeU9mZnNldChgaTJvXyR7bmFtZX0oaW5kaWNlcylgLCBcInZhbHVlXCIpfVxuICB9YDtcbiAgICAgICAgY29uc3Qgc2V0SW1wbGVtZW50YXRpb24gPSByYW5rIDwgMiA/IFwiXCIgOiAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uUGFyYW1zID0gcmFua0lkZW50aXR5Lm1hcCgoaSkgPT4gYGQke2l9OiB1MzJgKS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgY29uc3QgZGltc1BhcmFtcyA9IHJhbmtJZGVudGl0eS5tYXAoKGkpID0+IGBkJHtpfWApLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgICByZXR1cm4gYFxuICBmbiBzZXRfJHtuYW1lfSgke2Z1bmN0aW9uUGFyYW1zfSwgdmFsdWU6ICR7dmFsdWVUeXBlfSkge1xuICAgIHNldF8ke25hbWV9QnlJbmRpY2VzKCR7aW5kaWNlcyhkaW1zUGFyYW1zKX0sIHZhbHVlKTtcbiAgfWA7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGNvbnN0IHNldCA9ICguLi5pbmRpY2VzQW5kVmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoaW5kaWNlc0FuZFZhbHVlLmxlbmd0aCAhPT0gcmFuayArIDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5kaWNlcyBsZW5ndGggbXVzdCBiZSAke3Jhbmt9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5kaWNlc0FuZFZhbHVlW3JhbmtdO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInZhbHVlIG11c3QgYmUgc3RyaW5nXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkSW5kaWNlcyA9IGluZGljZXNBbmRWYWx1ZS5zbGljZSgwLCByYW5rKS5tYXAobm9ybWFsaXplRGltKS5qb2luKFwiLFwiKTtcbiAgICAgICAgICBpZiAocmFuayA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEJ5T2Zmc2V0KFwiMHVcIiwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmFuayA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEJ5T2Zmc2V0KG5vcm1hbGl6ZWRJbmRpY2VzWzBdLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5zZXQgPSB0cnVlO1xuICAgICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLnNldEJ5SW5kaWNlcyA9IHRydWU7XG4gICAgICAgICAgICBpbXBsZW1lbnRhdGlvblVzZWQuaW5kaWNlc1RvT2Zmc2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBgc2V0XyR7bmFtZX0oJHtub3JtYWxpemVkSW5kaWNlc30sICR7dmFsdWV9KWA7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXRCeUluZGljZXMgPSAodmFySW5kaWNlcywgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAocmFuayA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRCeU9mZnNldCh2YXJJbmRpY2VzLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltcGxlbWVudGF0aW9uVXNlZC5zZXRCeUluZGljZXMgPSB0cnVlO1xuICAgICAgICAgICAgaW1wbGVtZW50YXRpb25Vc2VkLmluZGljZXNUb09mZnNldCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gYHNldF8ke25hbWV9QnlJbmRpY2VzKCR7dmFySW5kaWNlc30sICR7dmFsdWV9KTtgO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaW1wbCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBpbXBscyA9IFtdO1xuICAgICAgICAgIGxldCBuZWVkU2hhcGVTdHJpZGVzID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGltcGxlbWVudGF0aW9uVXNlZC5vZmZzZXRUb0luZGljZXMpIHtcbiAgICAgICAgICAgIGltcGxzLnB1c2gob2Zmc2V0VG9JbmRpY2VzSW1wbGVtZW50YXRpb24pO1xuICAgICAgICAgICAgbmVlZFNoYXBlU3RyaWRlcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbXBsZW1lbnRhdGlvblVzZWQuaW5kaWNlc1RvT2Zmc2V0KSB7XG4gICAgICAgICAgICBpbXBscy5wdXNoKGluZGljZXNUb09mZnNldEltcGxlbWVudGF0aW9uKTtcbiAgICAgICAgICAgIG5lZWRTaGFwZVN0cmlkZXMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25Vc2VkLmJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0KSB7XG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKGJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0SW1wbGVtZW50YXRpb24pLmZvckVhY2goKGltcGwyKSA9PiBpbXBscy5wdXNoKGltcGwyKSk7XG4gICAgICAgICAgICBuZWVkU2hhcGVTdHJpZGVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGltcGxlbWVudGF0aW9uVXNlZC5zZXQpIHtcbiAgICAgICAgICAgIGltcGxzLnB1c2goc2V0SW1wbGVtZW50YXRpb24pO1xuICAgICAgICAgICAgbmVlZFNoYXBlU3RyaWRlcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbXBsZW1lbnRhdGlvblVzZWQuc2V0QnlJbmRpY2VzKSB7XG4gICAgICAgICAgICBpbXBscy5wdXNoKHNldEJ5SW5kaWNlc0ltcGxlbWVudGF0aW9uKTtcbiAgICAgICAgICAgIG5lZWRTaGFwZVN0cmlkZXMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW1wbGVtZW50YXRpb25Vc2VkLmdldCkge1xuICAgICAgICAgICAgaW1wbHMucHVzaChnZXRJbXBsZW1lbnRhdGlvbik7XG4gICAgICAgICAgICBuZWVkU2hhcGVTdHJpZGVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGltcGxlbWVudGF0aW9uVXNlZC5nZXRCeUluZGljZXMpIHtcbiAgICAgICAgICAgIGltcGxzLnB1c2goZ2V0QnlJbmRpY2VzSW1wbGVtZW50YXRpb24pO1xuICAgICAgICAgICAgbmVlZFNoYXBlU3RyaWRlcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdXNlVW5pZm9ybSAmJiBuZWVkU2hhcGVTdHJpZGVzKSB7XG4gICAgICAgICAgICBpbXBscy51bnNoaWZ0KFxuICAgICAgICAgICAgICBgY29uc3QgJHtzaGFwZX0gPSAke3R5cGUuaW5kaWNlc30oJHtzaGFwZU9yUmFuay5qb2luKFwiLFwiKX0pO2AsXG4gICAgICAgICAgICAgIGBjb25zdCAke3N0cmlkZXN9ID0gJHt0eXBlLmluZGljZXN9KCR7U2hhcGVVdGlsLmNvbXB1dGVTdHJpZGVzKHNoYXBlT3JSYW5rKS5qb2luKFwiLFwiKX0pO2BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpbXBscy5qb2luKFwiXFxuXCIpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGltcGwsXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBvZmZzZXRUb0luZGljZXMsXG4gICAgICAgICAgaW5kaWNlc1RvT2Zmc2V0LFxuICAgICAgICAgIGJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0LFxuICAgICAgICAgIGluZGljZXMsXG4gICAgICAgICAgaW5kaWNlc0dldCxcbiAgICAgICAgICBpbmRpY2VzU2V0LFxuICAgICAgICAgIHNldCxcbiAgICAgICAgICBzZXRCeU9mZnNldCxcbiAgICAgICAgICBzZXRCeUluZGljZXMsXG4gICAgICAgICAgZ2V0LFxuICAgICAgICAgIGdldEJ5T2Zmc2V0LFxuICAgICAgICAgIGdldEJ5SW5kaWNlcyxcbiAgICAgICAgICAvLyBpc1ZlYzQsXG4gICAgICAgICAgdXNhZ2UsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBzdHJpZGVzLFxuICAgICAgICAgIHNoYXBlLFxuICAgICAgICAgIHJhbmtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBpbnB1dFZhcmlhYmxlID0gKG5hbWUsIHR5cGUsIHNoYXBlT3JSYW5rLCBjb21wb25lbnRzID0gMSkgPT4gY3JlYXRlSW5kaWNlc0hlbHBlcihuYW1lLCB0eXBlLCBzaGFwZU9yUmFuaywgXCJpbnB1dFwiLCBjb21wb25lbnRzKTtcbiAgICAgIG91dHB1dFZhcmlhYmxlID0gKG5hbWUsIHR5cGUsIHNoYXBlT3JSYW5rLCBjb21wb25lbnRzID0gMSkgPT4gY3JlYXRlSW5kaWNlc0hlbHBlcihuYW1lLCB0eXBlLCBzaGFwZU9yUmFuaywgXCJvdXRwdXRcIiwgY29tcG9uZW50cyk7XG4gICAgICBpbnRlcm5hbFZhcmlhYmxlID0gKG5hbWUsIHR5cGUsIHNoYXBlT3JSYW5rLCBjb21wb25lbnRzID0gMSkgPT4gY3JlYXRlSW5kaWNlc0hlbHBlcihuYW1lLCB0eXBlLCBzaGFwZU9yUmFuaywgXCJpbnRlcm5hbFwiLCBjb21wb25lbnRzKTtcbiAgICAgIFNoYWRlckhlbHBlckltcGwgPSBjbGFzcyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG5vcm1hbGl6ZWREaXNwYXRjaEdyb3VwLCBsaW1pdHMpIHtcbiAgICAgICAgICB0aGlzLm5vcm1hbGl6ZWREaXNwYXRjaEdyb3VwID0gbm9ybWFsaXplZERpc3BhdGNoR3JvdXA7XG4gICAgICAgICAgdGhpcy5saW1pdHMgPSBsaW1pdHM7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbFZhcmlhYmxlcyA9IFtdO1xuICAgICAgICAgIHRoaXMudmFyaWFibGVzID0gW107XG4gICAgICAgICAgdGhpcy51bmlmb3JtcyA9IFtdO1xuICAgICAgICAgIHRoaXMudmFyaWFibGVJbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhzaXplKSB7XG4gICAgICAgICAgY29uc3Qgc2l6ZUluQ29kZSA9IHR5cGVvZiBzaXplID09PSBcIm51bWJlclwiID8gYCR7c2l6ZX11YCA6IHNpemU7XG4gICAgICAgICAgcmV0dXJuIGBpZiAoZ2xvYmFsX2lkeCA+PSAke3NpemVJbkNvZGV9KSB7IHJldHVybjsgfWA7XG4gICAgICAgIH1cbiAgICAgICAgbWFpblN0YXJ0KHdvcmtncm91cFNpemUgPSBXT1JLR1JPVVBfU0laRSkge1xuICAgICAgICAgIGNvbnN0IHdvcmtncm91cFNpemVYID0gdHlwZW9mIHdvcmtncm91cFNpemUgPT09IFwibnVtYmVyXCIgPyB3b3JrZ3JvdXBTaXplIDogd29ya2dyb3VwU2l6ZVswXTtcbiAgICAgICAgICBjb25zdCB3b3JrZ3JvdXBTaXplWSA9IHR5cGVvZiB3b3JrZ3JvdXBTaXplID09PSBcIm51bWJlclwiID8gMSA6IHdvcmtncm91cFNpemVbMV07XG4gICAgICAgICAgY29uc3Qgd29ya2dyb3VwU2l6ZVogPSB0eXBlb2Ygd29ya2dyb3VwU2l6ZSA9PT0gXCJudW1iZXJcIiA/IDEgOiB3b3JrZ3JvdXBTaXplWzJdO1xuICAgICAgICAgIGlmICh3b3JrZ3JvdXBTaXplWCA+IHRoaXMubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCB8fCB3b3JrZ3JvdXBTaXplWSA+IHRoaXMubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWSB8fCB3b3JrZ3JvdXBTaXplWiA+IHRoaXMubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB3b3JrZ3JvdXAgc2l6ZSBbJHt3b3JrZ3JvdXBTaXplWH0sICR7d29ya2dyb3VwU2l6ZVl9LCAke3dvcmtncm91cFNpemVafV0gZXhjZWVkcyB0aGUgbWF4aW11bSB3b3JrZ3JvdXAgc2l6ZSBbJHt0aGlzLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVh9LCAke3RoaXMubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWX0sICR7dGhpcy5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVafV0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh3b3JrZ3JvdXBTaXplWCAqIHdvcmtncm91cFNpemVZICogd29ya2dyb3VwU2l6ZVogPiB0aGlzLmxpbWl0cy5tYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgd29ya2dyb3VwIHNpemUgWyR7d29ya2dyb3VwU2l6ZVh9LCAke3dvcmtncm91cFNpemVZfSwgJHt3b3JrZ3JvdXBTaXplWn1dIGV4Y2VlZHMgdGhlIG1heGltdW0gd29ya2dyb3VwIGludm9jYXRpb25zICR7dGhpcy5saW1pdHMubWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwfS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXMxRGltZW5zaW9uRGlzcGF0Y2ggPSB0aGlzLm5vcm1hbGl6ZWREaXNwYXRjaEdyb3VwWzFdID09PSAxICYmIHRoaXMubm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMl0gPT09IDE7XG4gICAgICAgICAgY29uc3QgcGFyYW1MaXN0ID0gaXMxRGltZW5zaW9uRGlzcGF0Y2ggPyBgQGJ1aWx0aW4oZ2xvYmFsX2ludm9jYXRpb25faWQpIGdsb2JhbF9pZCA6IHZlYzM8dTMyPixcbiAgICBAYnVpbHRpbih3b3JrZ3JvdXBfaWQpIHdvcmtncm91cF9pZCA6IHZlYzM8dTMyPixcbiAgICBAYnVpbHRpbihsb2NhbF9pbnZvY2F0aW9uX2lkKSBsb2NhbF9pZCA6IHZlYzM8dTMyPmAgOiBgQGJ1aWx0aW4oZ2xvYmFsX2ludm9jYXRpb25faWQpIGdsb2JhbF9pZCA6IHZlYzM8dTMyPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faWQpIGxvY2FsX2lkIDogdmVjMzx1MzI+LFxuICAgIEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faW5kZXgpIGxvY2FsX2lkeCA6IHUzMixcbiAgICBAYnVpbHRpbih3b3JrZ3JvdXBfaWQpIHdvcmtncm91cF9pZCA6IHZlYzM8dTMyPixcbiAgICBAYnVpbHRpbihudW1fd29ya2dyb3VwcykgbnVtX3dvcmtncm91cHMgOiB2ZWMzPHUzMj5gO1xuICAgICAgICAgIGNvbnN0IGdsb2JhbElkeERlZmluaXRpb24gPSBpczFEaW1lbnNpb25EaXNwYXRjaCA/IFwibGV0IGdsb2JhbF9pZHggPSBnbG9iYWxfaWQueDsgbGV0IGxvY2FsX2lkeCA9IGxvY2FsX2lkLng7XCIgOiBgbGV0IGdsb2JhbF9pZHggPSAod29ya2dyb3VwX2lkLnogKiBudW1fd29ya2dyb3Vwc1swXSAqIG51bV93b3JrZ3JvdXBzWzFdICtcbiAgICAgICAgICB3b3JrZ3JvdXBfaWQueSAqIG51bV93b3JrZ3JvdXBzWzBdICsgd29ya2dyb3VwX2lkLngpICogJHt3b3JrZ3JvdXBTaXplWCAqIHdvcmtncm91cFNpemVZICogd29ya2dyb3VwU2l6ZVp9dSArIGxvY2FsX2lkeDtgO1xuICAgICAgICAgIHJldHVybiBgQGNvbXB1dGUgQHdvcmtncm91cF9zaXplKCR7d29ya2dyb3VwU2l6ZVh9LCAke3dvcmtncm91cFNpemVZfSwgJHt3b3JrZ3JvdXBTaXplWn0pXG4gIGZuIG1haW4oJHtwYXJhbUxpc3R9KSB7XG4gICAgJHtnbG9iYWxJZHhEZWZpbml0aW9ufVxuICBgO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZFZhcmlhYmxlVW5pZm9ybXModmFyaWFibGUpIHtcbiAgICAgICAgICBpZiAodmFyaWFibGUucmFuayAhPT0gMCkge1xuICAgICAgICAgICAgaWYgKHZhcmlhYmxlLnNoYXBlLnN0YXJ0c1dpdGgoXCJ1bmlmb3Jtcy5cIikpIHtcbiAgICAgICAgICAgICAgdGhpcy51bmlmb3Jtcy5wdXNoKHsgbmFtZTogdmFyaWFibGUuc2hhcGUucmVwbGFjZShcInVuaWZvcm1zLlwiLCBcIlwiKSwgdHlwZTogXCJ1MzJcIiwgbGVuZ3RoOiB2YXJpYWJsZS5yYW5rIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlLnN0cmlkZXMuc3RhcnRzV2l0aChcInVuaWZvcm1zLlwiKSkge1xuICAgICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnB1c2goeyBuYW1lOiB2YXJpYWJsZS5zdHJpZGVzLnJlcGxhY2UoXCJ1bmlmb3Jtcy5cIiwgXCJcIiksIHR5cGU6IFwidTMyXCIsIGxlbmd0aDogdmFyaWFibGUucmFuayB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVjbGFyZVZhcmlhYmxlKHZhcmlhYmxlLCBiaW5kaW5nSW5kZXgpIHtcbiAgICAgICAgICBpZiAodmFyaWFibGUudXNhZ2UgPT09IFwiaW50ZXJuYWxcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IHVzZSBpbnRlcm5hbCB2YXJpYWJsZSB3aXRoIGRlY2xhcmVWYXJpYWJsZSgpLiB1c2UgcmVnaXN0ZXJJbnRlcm5hbFZhcmlhYmxlcygpIGluc3RlYWQuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTtcbiAgICAgICAgICB0aGlzLmFwcGVuZFZhcmlhYmxlVW5pZm9ybXModmFyaWFibGUpO1xuICAgICAgICAgIGNvbnN0IGFjY2VzcyA9IHZhcmlhYmxlLnVzYWdlID09PSBcImlucHV0XCIgPyBcInJlYWRcIiA6IFwicmVhZF93cml0ZVwiO1xuICAgICAgICAgIGNvbnN0IHN0b3JhZ2VUeXBlID0gdmFyaWFibGUudHlwZS5zdG9yYWdlO1xuICAgICAgICAgIHJldHVybiBgQGdyb3VwKDApIEBiaW5kaW5nKCR7YmluZGluZ0luZGV4fSkgdmFyPHN0b3JhZ2UsICR7YWNjZXNzfT4gJHt2YXJpYWJsZS5uYW1lfTogYXJyYXk8JHtzdG9yYWdlVHlwZX0+O2A7XG4gICAgICAgIH1cbiAgICAgICAgZGVjbGFyZVZhcmlhYmxlcyguLi52YXJpYWJsZXMpIHtcbiAgICAgICAgICByZXR1cm4gdmFyaWFibGVzLm1hcCgodikgPT4gdGhpcy5kZWNsYXJlVmFyaWFibGUodiwgdGhpcy52YXJpYWJsZUluZGV4KyspKS5qb2luKFwiXFxuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlZ2lzdGVySW50ZXJuYWxWYXJpYWJsZSh2YXJpYWJsZSkge1xuICAgICAgICAgIGlmICh2YXJpYWJsZS51c2FnZSAhPT0gXCJpbnRlcm5hbFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiY2Fubm90IHVzZSBpbnB1dCBvciBvdXRwdXQgdmFyaWFibGUgd2l0aCByZWdpc3RlckludGVybmFsVmFyaWFibGUoKS4gdXNlIGRlY2xhcmVWYXJpYWJsZXMoKSBpbnN0ZWFkLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmludGVybmFsVmFyaWFibGVzLnB1c2godmFyaWFibGUpO1xuICAgICAgICAgIHRoaXMuYXBwZW5kVmFyaWFibGVVbmlmb3Jtcyh2YXJpYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJJbnRlcm5hbFZhcmlhYmxlcyguLi52YXJpYWJsZXMpIHtcbiAgICAgICAgICB2YXJpYWJsZXMuZm9yRWFjaCgodikgPT4gdGhpcy5yZWdpc3RlckludGVybmFsVmFyaWFibGUodikpO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJlZ2lzdGVyVW5pZm9ybShuYW1lLCB0eXBlLCBsZW5ndGggPSAxKSB7XG4gICAgICAgICAgdGhpcy51bmlmb3Jtcy5wdXNoKHsgbmFtZSwgdHlwZSwgbGVuZ3RoIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJlZ2lzdGVyVW5pZm9ybXMoYWRkaXRpb25hbFVuaWZvcm1zKSB7XG4gICAgICAgICAgdGhpcy51bmlmb3JtcyA9IHRoaXMudW5pZm9ybXMuY29uY2F0KGFkZGl0aW9uYWxVbmlmb3Jtcyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdW5pZm9ybURlY2xhcmF0aW9uKCkge1xuICAgICAgICAgIGlmICh0aGlzLnVuaWZvcm1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHVuaWZvcm1TbmlwcGV0cyA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB0eXBlLCBsZW5ndGggfSBvZiB0aGlzLnVuaWZvcm1zKSB7XG4gICAgICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwiZjE2XCIpIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtU25pcHBldHMucHVzaChgQGFsaWduKDE2KSAke25hbWV9OmFycmF5PG1hdDJ4NDwke3R5cGV9PiwgJHtNYXRoLmNlaWwobGVuZ3RoIC8gOCl9PmApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVuaWZvcm1TbmlwcGV0cy5wdXNoKGAke25hbWV9OmFycmF5PHZlYzQ8JHt0eXBlfT4sICR7TWF0aC5jZWlsKGxlbmd0aCAvIDQpfT5gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgdHlwZVRlbXAgPSBsZW5ndGggPT0gbnVsbCB8fCBsZW5ndGggPT09IDEgPyB0eXBlIDogYHZlYyR7bGVuZ3RofTwke3R5cGV9PmA7XG4gICAgICAgICAgICAgIHVuaWZvcm1TbmlwcGV0cy5wdXNoKGAke25hbWV9OiR7dHlwZVRlbXB9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgXG4gICAgICBzdHJ1Y3QgVW5pZm9ybXMgeyAke3VuaWZvcm1TbmlwcGV0cy5qb2luKFwiLCBcIil9IH07XG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHt0aGlzLnZhcmlhYmxlSW5kZXh9KSB2YXI8dW5pZm9ybT4gdW5pZm9ybXM6IFVuaWZvcm1zO2A7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhZGRpdGlvbmFsIGltcGxlbWVudGF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIHNoYWRlciBzb3VyY2UuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQgYWRkaXRpb25hbEltcGxlbWVudGF0aW9ucygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy51bmlmb3JtRGVjbGFyYXRpb24oKSArIHRoaXMudmFyaWFibGVzLm1hcCgoaSkgPT4gaS5pbXBsKCkpLmpvaW4oXCJcXG5cIikgKyB0aGlzLmludGVybmFsVmFyaWFibGVzLm1hcCgoaSkgPT4gaS5pbXBsKCkpLmpvaW4oXCJcXG5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCB0aGUgdmFyaWFibGUgaW5mbyBvZiB0aGUgc2hhZGVyIHByb2dyYW0uXG4gICAgICAgICAqL1xuICAgICAgICBnZXQgdmFyaWFibGVzSW5mbygpIHtcbiAgICAgICAgICBpZiAodGhpcy51bmlmb3Jtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHVuaWZvcm1XZ3NsVHlwZVRvRGF0YVR5cGUgPSAodHlwZSkgPT4gW1xuICAgICAgICAgICAgMTIgLyogdWludDMyICovLFxuICAgICAgICAgICAgMTAgLyogZmxvYXQxNiAqLyxcbiAgICAgICAgICAgIDEgLyogZmxvYXQgKi8sXG4gICAgICAgICAgICA2IC8qIGludDMyICovXG4gICAgICAgICAgXVtbXCJ1MzJcIiwgXCJmMTZcIiwgXCJmMzJcIiwgXCJpMzJcIl0uaW5kZXhPZih0eXBlKV07XG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5pZm9ybXMubWFwKCh1KSA9PiBbdW5pZm9ybVdnc2xUeXBlVG9EYXRhVHlwZSh1LnR5cGUpLCB1Lmxlbmd0aCA/PyAxXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjcmVhdGVTaGFkZXJIZWxwZXIgPSAoZGlzcGF0Y2hHcm91cCwgbGltaXRzKSA9PiBuZXcgU2hhZGVySGVscGVySW1wbChkaXNwYXRjaEdyb3VwLCBsaW1pdHMpO1xuICAgICAgZ2V0QnJvYWRjYXN0RGltcyA9IChpblNoYXBlLCBvdXRTaGFwZSkgPT4ge1xuICAgICAgICBjb25zdCBpblJhbmsgPSBpblNoYXBlLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGltcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluUmFuazsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGltID0gaW5SYW5rIC0gMSAtIGk7XG4gICAgICAgICAgY29uc3QgYSA9IGluU2hhcGVbZGltXSB8fCAxO1xuICAgICAgICAgIGNvbnN0IGIgPSBvdXRTaGFwZVtvdXRTaGFwZS5sZW5ndGggLSAxIC0gaV0gfHwgMTtcbiAgICAgICAgICBpZiAoYiA+IDEgJiYgYSA9PT0gMSkge1xuICAgICAgICAgICAgZGltcy51bnNoaWZ0KGRpbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaW1zO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvdHJhbnNwb3NlLnRzXG4gIHZhciB2YWxpZGF0ZUlucHV0cywgZ2V0QWRqdXN0ZWRQZXJtLCBnZXRPdXRwdXRTaGFwZSwgcGVybUZ1bmN0aW9uQm9keSwgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8sIHRyYW5zcG9zZSwgcGFyc2VUcmFuc3Bvc2VBdHRyaWJ1dGVzO1xuICB2YXIgaW5pdF90cmFuc3Bvc2UgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3RyYW5zcG9zZS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfYXR0cmlidXRlX3dpdGhfY2FjaGVfa2V5KCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgdmFsaWRhdGVJbnB1dHMgPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmFuc3Bvc2UgcmVxdWlyZXMgMSBpbnB1dC5cIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBnZXRBZGp1c3RlZFBlcm0gPSAoaW5wdXRSYW5rLCBwZXJtKSA9PiBwZXJtICYmIHBlcm0ubGVuZ3RoICE9PSBpbnB1dFJhbmsgPyBbLi4ubmV3IEFycmF5KGlucHV0UmFuaykua2V5cygpXS5yZXZlcnNlKCkgOiBwZXJtO1xuICAgICAgZ2V0T3V0cHV0U2hhcGUgPSAoaW5wdXRTaGFwZSwgcGVybSkgPT4gU2hhcGVVdGlsLnNvcnRCYXNlZE9uUGVybShpbnB1dFNoYXBlLCBnZXRBZGp1c3RlZFBlcm0oaW5wdXRTaGFwZS5sZW5ndGgsIHBlcm0pKTtcbiAgICAgIHBlcm1GdW5jdGlvbkJvZHkgPSAocGVybSwgcmFuaywgaW5wdXQsIG91dHB1dCkgPT4ge1xuICAgICAgICBjb25zdCByZXZlcnNlRnVuYyA9IFtdO1xuICAgICAgICByZXZlcnNlRnVuYy5wdXNoKGBmbiBwZXJtKGk6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+ICR7aW5wdXQudHlwZS5pbmRpY2VzfSB7XG4gICAgdmFyIGE6ICR7aW5wdXQudHlwZS5pbmRpY2VzfTtgKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5rOyArK2kpIHtcbiAgICAgICAgICByZXZlcnNlRnVuYy5wdXNoKGlucHV0LmluZGljZXNTZXQoXCJhXCIsIHBlcm1baV0sIGBpWyR7aX1dYCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldmVyc2VGdW5jLnB1c2goXCJyZXR1cm4gYTt9XCIpO1xuICAgICAgICByZXR1cm4gcmV2ZXJzZUZ1bmMuam9pbihcIlxcblwiKTtcbiAgICAgIH07XG4gICAgICBjcmVhdGVUcmFuc3Bvc2VQcm9ncmFtSW5mbyA9IChpbnB1dFRlbnNvciwgcGVybUF0dHIpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXREYXRhVHlwZSA9IGlucHV0VGVuc29yLmRhdGFUeXBlO1xuICAgICAgICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dFRlbnNvci5kaW1zLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcGVybSA9IGdldEFkanVzdGVkUGVybShpbnB1dFJhbmssIHBlcm1BdHRyKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBnZXRPdXRwdXRTaGFwZShpbnB1dFRlbnNvci5kaW1zLCBwZXJtKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgaW5wdXREYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKFwiYVwiLCBpbnB1dERhdGFUeXBlLCBpbnB1dFJhbmspO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiBgXG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybShcIm91dHB1dF9zaXplXCIsIFwidTMyXCIpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIG91dHB1dCl9XG5cbiAgJHtwZXJtRnVuY3Rpb25Cb2R5KHBlcm0sIGlucHV0UmFuaywgaW5wdXQsIG91dHB1dCl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhcInVuaWZvcm1zLm91dHB1dF9zaXplXCIpfVxuXG4gICAgbGV0IGluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoXCJnbG9iYWxfaWR4XCIpfTtcbiAgICBsZXQgYUluZGljZXMgPSBwZXJtKGluZGljZXMpO1xuXG4gICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIsIGlucHV0LmdldEJ5SW5kaWNlcyhcImFJbmRpY2VzXCIpKX1cbiAgfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJUcmFuc3Bvc2VcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBoaW50OiBgJHtwZXJtQXR0cn1gLCBpbnB1dERlcGVuZGVuY2llczogW1wicmFua1wiXSB9LFxuICAgICAgICAgIGdldFJ1bkRhdGE6IChpbnB1dHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZSB9XSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgICAgb3V0cHV0U2l6ZSAvIDY0XG4gICAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICAgKSB9LFxuICAgICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IFt7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0U2l6ZSB9LCAuLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMF0uZGltcywgb3V0cHV0U2hhcGUpXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHRyYW5zcG9zZSA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzKGNvbnRleHQuaW5wdXRzKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBhdHRyaWJ1dGVzLnBlcm0pKTtcbiAgICAgIH07XG4gICAgICBwYXJzZVRyYW5zcG9zZUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlcykgPT4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHsgcGVybTogYXR0cmlidXRlcy5wZXJtIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9yZWR1Y2Utc2hhcmVkLnRzXG4gIHZhciByZWR1Y2VPcHMsIHJlZHVjZVNoYXJlZE9wcywgcmVkdWNlSW5pdFZhbHVlcywgcmVkdWNlT3V0cHV0VmFsdWVzLCBnZXRJbm5lck1vc3RBeGVzLCBjb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzLCBleHBhbmRTaGFwZVRvS2VlcERpbSwgYXJlQXhlc0lubmVyTW9zdERpbXMsIGdldEF4ZXNQZXJtdXRhdGlvbiwgY3JlYXRlUmVkdWNlU2hhcmVkUHJvZ3JhbUluZm8sIHJlZHVjZUNvbW1vbiwgcmVkdWNlTWVhblNoYXJlZCwgcmVkdWNlTDFTaGFyZWQsIHJlZHVjZUwyU2hhcmVkLCByZWR1Y2VMb2dTdW1FeHBTaGFyZWQsIHJlZHVjZU1heFNoYXJlZCwgcmVkdWNlTWluU2hhcmVkLCByZWR1Y2VQcm9kU2hhcmVkLCByZWR1Y2VTdW1TaGFyZWQsIHJlZHVjZVN1bVNxdWFyZVNoYXJlZCwgcmVkdWNlTG9nU3VtU2hhcmVkO1xuICB2YXIgaW5pdF9yZWR1Y2Vfc2hhcmVkID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9yZWR1Y2Utc2hhcmVkLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfdXRpbCgpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIGluaXRfcmVkdWNlKCk7XG4gICAgICBpbml0X3RyYW5zcG9zZSgpO1xuICAgICAgcmVkdWNlT3BzID0ge1xuICAgICAgICBtYXg6IFwic2VsZWN0KGJlc3RWYWx1ZSwgY2FuZGlkYXRlLCBjYW5kaWRhdGUgPiBiZXN0VmFsdWUpXCIsXG4gICAgICAgIG1pbjogXCJzZWxlY3QoYmVzdFZhbHVlLCBjYW5kaWRhdGUsIGNhbmRpZGF0ZSA8IGJlc3RWYWx1ZSlcIixcbiAgICAgICAgbWVhbjogXCJiZXN0VmFsdWUgKyBjYW5kaWRhdGVcIixcbiAgICAgICAgc3VtOiBcImJlc3RWYWx1ZSArIGNhbmRpZGF0ZVwiLFxuICAgICAgICBwcm9kOiBcImJlc3RWYWx1ZSAqIGNhbmRpZGF0ZVwiLFxuICAgICAgICBzdW1TcXVhcmU6IFwiYmVzdFZhbHVlICsgY2FuZGlkYXRlICogY2FuZGlkYXRlXCIsXG4gICAgICAgIGxvZ1N1bUV4cDogXCJiZXN0VmFsdWUgKyBleHAoY2FuZGlkYXRlKVwiLFxuICAgICAgICBsMTogXCJiZXN0VmFsdWUgKyBhYnMoY2FuZGlkYXRlKVwiLFxuICAgICAgICBsMjogXCJiZXN0VmFsdWUgKyBjYW5kaWRhdGUgKiBjYW5kaWRhdGVcIixcbiAgICAgICAgbG9nU3VtOiBcImJlc3RWYWx1ZSArIGNhbmRpZGF0ZVwiXG4gICAgICB9O1xuICAgICAgcmVkdWNlU2hhcmVkT3BzID0ge1xuICAgICAgICBtYXg6IFwic2VsZWN0KGJlc3RWYWx1ZSwgY2FuZGlkYXRlLCBjYW5kaWRhdGUgPiBiZXN0VmFsdWUpXCIsXG4gICAgICAgIG1pbjogXCJzZWxlY3QoYmVzdFZhbHVlLCBjYW5kaWRhdGUsIGNhbmRpZGF0ZSA8IGJlc3RWYWx1ZSlcIixcbiAgICAgICAgbWVhbjogXCJiZXN0VmFsdWUgKyBjYW5kaWRhdGVcIixcbiAgICAgICAgc3VtOiBcImJlc3RWYWx1ZSArIGNhbmRpZGF0ZVwiLFxuICAgICAgICBwcm9kOiBcImJlc3RWYWx1ZSAqIGNhbmRpZGF0ZVwiLFxuICAgICAgICBzdW1TcXVhcmU6IFwiYmVzdFZhbHVlICsgY2FuZGlkYXRlXCIsXG4gICAgICAgIGxvZ1N1bUV4cDogXCJiZXN0VmFsdWUgKyBjYW5kaWRhdGVcIixcbiAgICAgICAgbDE6IFwiYmVzdFZhbHVlICsgY2FuZGlkYXRlXCIsXG4gICAgICAgIGwyOiBcImJlc3RWYWx1ZSArIGNhbmRpZGF0ZVwiLFxuICAgICAgICBsb2dTdW06IFwiYmVzdFZhbHVlICsgY2FuZGlkYXRlXCJcbiAgICAgIH07XG4gICAgICByZWR1Y2VJbml0VmFsdWVzID0ge1xuICAgICAgICBtYXg6IFwiX0Fbb2Zmc2V0XVwiLFxuICAgICAgICBtaW46IFwiX0Fbb2Zmc2V0XVwiLFxuICAgICAgICBtZWFuOiBcIjBcIixcbiAgICAgICAgc3VtOiBcIjBcIixcbiAgICAgICAgcHJvZDogXCIxXCIsXG4gICAgICAgIHN1bVNxdWFyZTogXCIwXCIsXG4gICAgICAgIGxvZ1N1bUV4cDogXCIwXCIsXG4gICAgICAgIGwxOiBcIjBcIixcbiAgICAgICAgbDI6IFwiMFwiLFxuICAgICAgICBsb2dTdW06IFwiMFwiXG4gICAgICB9O1xuICAgICAgcmVkdWNlT3V0cHV0VmFsdWVzID0ge1xuICAgICAgICBtYXg6IFwiYmVzdFZhbHVlXCIsXG4gICAgICAgIG1pbjogXCJiZXN0VmFsdWVcIixcbiAgICAgICAgc3VtOiBcImJlc3RWYWx1ZVwiLFxuICAgICAgICBwcm9kOiBcImJlc3RWYWx1ZVwiLFxuICAgICAgICBzdW1TcXVhcmU6IFwiYmVzdFZhbHVlXCIsXG4gICAgICAgIGxvZ1N1bUV4cDogXCJsb2coYmVzdFZhbHVlKVwiLFxuICAgICAgICBsMTogXCJiZXN0VmFsdWVcIixcbiAgICAgICAgbDI6IFwic3FydChiZXN0VmFsdWUpXCIsXG4gICAgICAgIGxvZ1N1bTogXCJsb2coYmVzdFZhbHVlKVwiXG4gICAgICB9O1xuICAgICAgZ2V0SW5uZXJNb3N0QXhlcyA9IChudW1Jbm5lckF4ZXMsIHJhbmspID0+IHtcbiAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSByYW5rIC0gbnVtSW5uZXJBeGVzOyBpIDwgcmFuazsgKytpKSB7XG4gICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH07XG4gICAgICBjb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzID0gKHNoYXBlLCBheGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gW107XG4gICAgICAgIGNvbnN0IHJhbmsgPSBzaGFwZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IHJhbms7IGRpbSsrKSB7XG4gICAgICAgICAgaWYgKGF4ZXMuaW5kZXhPZihkaW0pID09PSAtMSkge1xuICAgICAgICAgICAgb3V0cHV0U2hhcGUucHVzaChzaGFwZVtkaW1dKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVkdWNlU2hhcGUgPSBheGVzLm1hcCgoZGltKSA9PiBzaGFwZVtkaW1dKTtcbiAgICAgICAgcmV0dXJuIFtvdXRwdXRTaGFwZSwgcmVkdWNlU2hhcGVdO1xuICAgICAgfTtcbiAgICAgIGV4cGFuZFNoYXBlVG9LZWVwRGltID0gKHNoYXBlLCBheGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmsgPSBzaGFwZS5sZW5ndGggKyBheGVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZXhwYW5kU2hhcGUgPSBbXTtcbiAgICAgICAgbGV0IHNoYXBlSWR4ID0gMDtcbiAgICAgICAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgcmFuazsgZGltKyspIHtcbiAgICAgICAgICBpZiAoYXhlcy5pbmRleE9mKGRpbSkgPT09IC0xKSB7XG4gICAgICAgICAgICBleHBhbmRTaGFwZS5wdXNoKHNoYXBlW3NoYXBlSWR4KytdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwYW5kU2hhcGUucHVzaCgxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cGFuZFNoYXBlO1xuICAgICAgfTtcbiAgICAgIGFyZUF4ZXNJbm5lck1vc3REaW1zID0gKGF4ZXMsIHJhbmspID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBheGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaWYgKGF4ZXNbYXhlcy5sZW5ndGggLSBpIC0gMV0gIT09IHJhbmsgLSAxIC0gaSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBnZXRBeGVzUGVybXV0YXRpb24gPSAoYXhlcywgcmFuaykgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgaWYgKCFhcmVBeGVzSW5uZXJNb3N0RGltcyhheGVzLCByYW5rKSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuazsgKytpKSB7XG4gICAgICAgICAgICBpZiAoYXhlcy5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgICAgICAgICByZXMucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXhlcy5mb3JFYWNoKChheGlzKSA9PiByZXMucHVzaChheGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH07XG4gICAgICBjcmVhdGVSZWR1Y2VTaGFyZWRQcm9ncmFtSW5mbyA9IChuYW1lLCBzaGFkZXJDYWNoZSwgaW5wdXRzLCByZWR1Y2VUeXBlLCBvdXRwdXREYXRhVHlwZSwgb3V0cHV0U2hhcGUsIHJlZHVjZVNoYXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgICAgICAgY29uc3QgcmVkdWNlU2l6ZSA9IFNoYXBlVXRpbC5zaXplKHJlZHVjZVNoYXBlKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKFwiX0FcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dFNoYXBlKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgb3V0cHV0RGF0YVR5cGUsIG91dHB1dFNoYXBlKTtcbiAgICAgICAgY29uc3Qgd29ya2dyb3VwU2l6ZSA9IDMyO1xuICAgICAgICBjb25zdCBzaGFyZWRNZW1vcnlTbmlwcGV0ID0gYFxuICAgICAgICAgIHZhcjx3b3JrZ3JvdXA+IGFCZXN0VmFsdWVzIDogYXJyYXk8ZjMyLCAke3dvcmtncm91cFNpemV9PjtcbiAgICAgICBgO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiBgXG4gICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybShcInJlZHVjZVNpemVcIiwgXCJ1MzJcIikuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAgICAgJHtzaGFyZWRNZW1vcnlTbmlwcGV0fVxuICAgICAgICBmbiBESVZfQ0VJTChhIDogdTMyLCBiIDogdTMyKSAtPiB1MzIge1xuICAgICAgICAgIHJldHVybiAoKGEgLSAxdSkgLyBiICsgMXUpO1xuICAgICAgICAgfVxuICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KHdvcmtncm91cFNpemUpfVxuXG4gICAgICAgICAgbGV0IG91dHB1dEluZGV4ID0gZ2xvYmFsX2lkeCAvICR7d29ya2dyb3VwU2l6ZX07XG4gICAgICAgICAgbGV0IG9mZnNldCA9IG91dHB1dEluZGV4ICogdW5pZm9ybXMucmVkdWNlU2l6ZTtcblxuICAgICAgICAgIHZhciBiZXN0VmFsdWUgPSBmMzIoJHtyZWR1Y2VJbml0VmFsdWVzW3JlZHVjZVR5cGVdfSk7XG4gICAgICAgICAgbGV0IExlbmd0aCA9IHVuaWZvcm1zLnJlZHVjZVNpemU7XG4gICAgICAgICAgZm9yICh2YXIgayA9IGxvY2FsX2lkeDsgayA8IExlbmd0aDsgayA9IGsgKyAke3dvcmtncm91cFNpemV9KSB7XG4gICAgICAgICAgIGxldCBjYW5kaWRhdGUgPSBmMzIoJHtpbnB1dC5nZXRCeU9mZnNldChcIm9mZnNldCArIGtcIil9KTtcbiAgICAgICAgICAgYmVzdFZhbHVlID0gJHtyZWR1Y2VPcHNbcmVkdWNlVHlwZV19O1xuICAgICAgICAgIH1cbiAgICAgICAgICBhQmVzdFZhbHVlc1tsb2NhbF9pZHhdID0gYmVzdFZhbHVlO1xuICAgICAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAgICAgICAgdmFyIHJlZHVjZVNpemUgPSBtaW4oTGVuZ3RoLCAke3dvcmtncm91cFNpemV9dSk7XG4gICAgICAgICBmb3IgKHZhciBjdXJyZW50U2l6ZSA9IHJlZHVjZVNpemUgLyAydTsgcmVkdWNlU2l6ZSA+IDF1O1xuICAgICAgICAgICAgIGN1cnJlbnRTaXplID0gcmVkdWNlU2l6ZSAvIDJ1KSB7XG4gICAgICAgICAgIGxldCBpbnRlcnZhbCA9IERJVl9DRUlMKHJlZHVjZVNpemUsIDJ1KTtcbiAgICAgICAgICAgaWYgKGxvY2FsX2lkeCA8IGN1cnJlbnRTaXplKSB7XG4gICAgICAgICAgICBsZXQgY2FuZGlkYXRlID0gYUJlc3RWYWx1ZXNbbG9jYWxfaWR4ICsgaW50ZXJ2YWxdO1xuICAgICAgICAgICAgYmVzdFZhbHVlID0gJHtyZWR1Y2VTaGFyZWRPcHNbcmVkdWNlVHlwZV19O1xuICAgICAgICAgICAgYUJlc3RWYWx1ZXNbbG9jYWxfaWR4XSA9IGJlc3RWYWx1ZTtcbiAgICAgICAgICAgfVxuICAgICAgICAgICByZWR1Y2VTaXplID0gaW50ZXJ2YWw7XG4gICAgICAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcbiAgICAgICAgIH1cblxuICAgICAgICAgaWYgKGxvY2FsX2lkeCA9PSAwdSkge1xuICAgICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KFxuICAgICAgICAgIFwib3V0cHV0SW5kZXhcIixcbiAgICAgICAgICBgJHtyZWR1Y2VUeXBlID09PSBcIm1lYW5cIiA/IGAke291dHB1dC50eXBlLnN0b3JhZ2V9KGJlc3RWYWx1ZSAvIGYzMih1bmlmb3Jtcy5yZWR1Y2VTaXplKSlgIDogYCR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oJHtyZWR1Y2VPdXRwdXRWYWx1ZXNbcmVkdWNlVHlwZV19KWB9YFxuICAgICAgICApfTtcbiAgICAgICAgIH1cbiAgICAgICAgfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBzaGFkZXJDYWNoZSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogb3V0cHV0RGF0YVR5cGUgfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IG91dHB1dFNpemUgfSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3JtczogW3sgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiByZWR1Y2VTaXplIH1dXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICByZWR1Y2VDb21tb24gPSAoY29udGV4dCwgbmFtZSwgYXR0cmlidXRlcywgcmVkdWNlVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkQXR0cmlidXRlcyA9IGNvbnRleHQuaW5wdXRzLmxlbmd0aCA9PT0gMSA/IGF0dHJpYnV0ZXMgOiBjcmVhdGVSZWR1Y2VBdHRyaWJ1dGVzRnJvbUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gICAgICAgIGxldCB1cGRhdGVkQXhlcyA9IHVwZGF0ZWRBdHRyaWJ1dGVzLmF4ZXM7XG4gICAgICAgIGlmICh1cGRhdGVkQXhlcy5sZW5ndGggPT09IDAgJiYgIXVwZGF0ZWRBdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSB7XG4gICAgICAgICAgdXBkYXRlZEF4ZXMgPSBjb250ZXh0LmlucHV0c1swXS5kaW1zLm1hcCgoX2RpbSwgaSkgPT4gaSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplQXhlcyA9IFNoYXBlVXRpbC5ub3JtYWxpemVBeGVzKHVwZGF0ZWRBeGVzLCBjb250ZXh0LmlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGxldCBheGVzID0gbm9ybWFsaXplQXhlcztcbiAgICAgICAgbGV0IGlucHV0ID0gY29udGV4dC5pbnB1dHNbMF07XG4gICAgICAgIGNvbnN0IHBlcm11dGVkQXhlcyA9IGdldEF4ZXNQZXJtdXRhdGlvbihheGVzLCBjb250ZXh0LmlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGlmIChwZXJtdXRlZEF4ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlucHV0ID0gY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIHBlcm11dGVkQXhlcyksXG4gICAgICAgICAgICB7IGlucHV0czogWzBdLCBvdXRwdXRzOiBbLTFdIH1cbiAgICAgICAgICApWzBdO1xuICAgICAgICAgIGF4ZXMgPSBnZXRJbm5lck1vc3RBeGVzKGF4ZXMubGVuZ3RoLCBpbnB1dC5kaW1zLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW291dHB1dFNoYXBlLCByZWR1Y2VTaGFwZV0gPSBjb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKGlucHV0LmRpbXMsIGF4ZXMpO1xuICAgICAgICBsZXQgZmluYWxPdXRwdXRTaGFwZSA9IG91dHB1dFNoYXBlO1xuICAgICAgICBpZiAodXBkYXRlZEF0dHJpYnV0ZXMua2VlcERpbXMpIHtcbiAgICAgICAgICBmaW5hbE91dHB1dFNoYXBlID0gZXhwYW5kU2hhcGVUb0tlZXBEaW0ob3V0cHV0U2hhcGUsIG5vcm1hbGl6ZUF4ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVSZWR1Y2VTaGFyZWRQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB7IGhpbnQ6IHVwZGF0ZWRBdHRyaWJ1dGVzLmNhY2hlS2V5LCBpbnB1dERlcGVuZGVuY2llczogW1widHlwZVwiXSB9LFxuICAgICAgICAgICAgW2lucHV0XSxcbiAgICAgICAgICAgIHJlZHVjZVR5cGUsXG4gICAgICAgICAgICBjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSxcbiAgICAgICAgICAgIGZpbmFsT3V0cHV0U2hhcGUsXG4gICAgICAgICAgICByZWR1Y2VTaGFwZVxuICAgICAgICAgICksXG4gICAgICAgICAgeyBpbnB1dHM6IFtpbnB1dF0gfVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIHJlZHVjZU1lYW5TaGFyZWQgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICByZWR1Y2VDb21tb24oY29udGV4dCwgXCJSZWR1Y2VNZWFuU2hhcmVkXCIsIGF0dHJpYnV0ZXMsIFwibWVhblwiKTtcbiAgICAgIH07XG4gICAgICByZWR1Y2VMMVNoYXJlZCA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHJlZHVjZUNvbW1vbihjb250ZXh0LCBcIlJlZHVjZUwxU2hhcmVkXCIsIGF0dHJpYnV0ZXMsIFwibDFcIik7XG4gICAgICB9O1xuICAgICAgcmVkdWNlTDJTaGFyZWQgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICByZWR1Y2VDb21tb24oY29udGV4dCwgXCJSZWR1Y2VMMlNoYXJlZFwiLCBhdHRyaWJ1dGVzLCBcImwyXCIpO1xuICAgICAgfTtcbiAgICAgIHJlZHVjZUxvZ1N1bUV4cFNoYXJlZCA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHJlZHVjZUNvbW1vbihjb250ZXh0LCBcIlJlZHVjZUxvZ1N1bUV4cFNoYXJlZFwiLCBhdHRyaWJ1dGVzLCBcImxvZ1N1bUV4cFwiKTtcbiAgICAgIH07XG4gICAgICByZWR1Y2VNYXhTaGFyZWQgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICByZWR1Y2VDb21tb24oY29udGV4dCwgXCJSZWR1Y2VNYXhTaGFyZWRcIiwgYXR0cmlidXRlcywgXCJtYXhcIik7XG4gICAgICB9O1xuICAgICAgcmVkdWNlTWluU2hhcmVkID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgcmVkdWNlQ29tbW9uKGNvbnRleHQsIFwiUmVkdWNlTWluU2hhcmVkXCIsIGF0dHJpYnV0ZXMsIFwibWluXCIpO1xuICAgICAgfTtcbiAgICAgIHJlZHVjZVByb2RTaGFyZWQgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICByZWR1Y2VDb21tb24oY29udGV4dCwgXCJSZWR1Y2VQcm9kU2hhcmVkXCIsIGF0dHJpYnV0ZXMsIFwicHJvZFwiKTtcbiAgICAgIH07XG4gICAgICByZWR1Y2VTdW1TaGFyZWQgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICByZWR1Y2VDb21tb24oY29udGV4dCwgXCJSZWR1Y2VTdW1TaGFyZWRcIiwgYXR0cmlidXRlcywgXCJzdW1cIik7XG4gICAgICB9O1xuICAgICAgcmVkdWNlU3VtU3F1YXJlU2hhcmVkID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgcmVkdWNlQ29tbW9uKGNvbnRleHQsIFwiUmVkdWNlU3VtU3F1YXJlU2hhcmVkXCIsIGF0dHJpYnV0ZXMsIFwic3VtU3F1YXJlXCIpO1xuICAgICAgfTtcbiAgICAgIHJlZHVjZUxvZ1N1bVNoYXJlZCA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHJlZHVjZUNvbW1vbihjb250ZXh0LCBcIlJlZHVjZUxvZ1N1bVNoYXJlZFwiLCBhdHRyaWJ1dGVzLCBcImxvZ1N1bVwiKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3JlZHVjZS50c1xuICB2YXIgdmFsaWRhdGVJbnB1dHMyLCBub09wLCBjcmVhdGVSZWR1Y2VQcm9ncmFtSW5mbywgY3JlYXRlUmVkdWNlQXR0cmlidXRlc0Zyb21JbnB1dHMsIHJ1blJlZHVjZVByb2dyYW0sIHJlZHVjZUxvZ1N1bU5haXZlLCByZWR1Y2VMMU5haXZlLCByZWR1Y2VMMk5haXZlLCByZWR1Y2VMb2dTdW1FeHBOYWl2ZSwgcmVkdWNlTWF4TmFpdmUsIHJlZHVjZU1lYW5OYWl2ZSwgcmVkdWNlTWluTmFpdmUsIHJlZHVjZVByb2ROYWl2ZSwgcmVkdWNlU3VtTmFpdmUsIHJlZHVjZVN1bVNxdWFyZU5haXZlLCB1c2VOYWl2ZVJlZHVjZU1ldGhvZCwgcmVkdWNlTWVhbiwgcmVkdWNlTDEsIHJlZHVjZUwyLCByZWR1Y2VMb2dTdW1FeHAsIHJlZHVjZU1heCwgcmVkdWNlTWluLCByZWR1Y2VQcm9kLCByZWR1Y2VTdW0sIHJlZHVjZVN1bVNxdWFyZSwgcmVkdWNlTG9nU3VtO1xuICB2YXIgaW5pdF9yZWR1Y2UgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3JlZHVjZS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfYXR0cmlidXRlX3dpdGhfY2FjaGVfa2V5KCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgaW5pdF9yZWR1Y2Vfc2hhcmVkKCk7XG4gICAgICB2YWxpZGF0ZUlucHV0czIgPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggPT09IDAgfHwgaW5wdXRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWR1Y2Ugb3AgcmVxdWlyZXMgMSBvciAyIGlucHV0cy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT09IDIgJiYgaW5wdXRzWzFdLmRpbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBheGVzIGlucHV0IGRpbXMuXCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgbm9PcCA9IChpbnB1dCkgPT4gW1wiXCIsIFwiXCIsIGB2YXIgdmFsdWUgPSAke2lucHV0LmdldEJ5SW5kaWNlcyhcImlucHV0X2luZGljZXNcIil9O2AsIFwiXCJdO1xuICAgICAgY3JlYXRlUmVkdWNlUHJvZ3JhbUluZm8gPSAobmFtZSwgc2hhZGVyQ2FjaGUsIGlucHV0cywgcmVkdWNlT3AsIGF4ZXNJbnB1dCwgb3V0cHV0RGF0YVR5cGUsIGtlZXBEaW1zID0gZmFsc2UsIG5vb3BXaXRoRW1wdHlBeGVzID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBbXTtcbiAgICAgICAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dFNoYXBlLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYXhlcyA9IFNoYXBlVXRpbC5ub3JtYWxpemVBeGVzKGF4ZXNJbnB1dCwgaW5wdXRSYW5rKTtcbiAgICAgICAgY29uc3QgcmVkdWNlT25BbGxBeGVzID0gIW5vb3BXaXRoRW1wdHlBeGVzICYmIGF4ZXMubGVuZ3RoID09PSAwO1xuICAgICAgICBpbnB1dFNoYXBlLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICBpZiAocmVkdWNlT25BbGxBeGVzIHx8IGF4ZXMuaW5kZXhPZihpKSA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoa2VlcERpbXMpIHtcbiAgICAgICAgICAgICAgb3V0cHV0U2hhcGUucHVzaCgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0U2hhcGUucHVzaChkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvdXRwdXRSYW5rID0gb3V0cHV0U2hhcGUubGVuZ3RoO1xuICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWR4Q29weSA9IFtdO1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZShcIl9BXCIsIGlucHV0c1swXS5kYXRhVHlwZSwgaW5wdXRSYW5rKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcIm91dHB1dFwiLCBvdXRwdXREYXRhVHlwZSwgb3V0cHV0UmFuayk7XG4gICAgICAgICAgY29uc3Qgb3BzID0gcmVkdWNlT3AoaW5wdXQsIG91dHB1dCwgYXhlcyk7XG4gICAgICAgICAgbGV0IHJlZHVjZU9wczIgPSBvcHNbMl07XG4gICAgICAgICAgZm9yIChsZXQgayA9IDAsIGwgPSAwOyBrIDwgaW5wdXRSYW5rOyBrKyspIHtcbiAgICAgICAgICAgIGlmIChyZWR1Y2VPbkFsbEF4ZXMgfHwgYXhlcy5pbmRleE9mKGspID49IDApIHtcbiAgICAgICAgICAgICAgaWYgKGtlZXBEaW1zKSB7XG4gICAgICAgICAgICAgICAgbCsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlZHVjZU9wczIgPSBgZm9yKHZhciBqJHtrfTogdTMyID0gMDsgaiR7a30gPCAke2lucHV0U2hhcGVba119OyBqJHtrfSsrKSB7XG4gICAgICAgICAgICAgICAgICAke29wc1syXS5pbmNsdWRlcyhcImxhc3RfaW5kZXhcIikgPyBgbGV0IGxhc3RfaW5kZXggPSBqJHtrfTtgIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICR7aW5wdXQuaW5kaWNlc1NldChcImlucHV0X2luZGljZXNcIiwgaywgYGoke2t9YCl9XG4gICAgICAgICAgICAgICAgICAke3JlZHVjZU9wczJ9XG4gICAgICAgICAgICAgICAgfWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZHhDb3B5LnB1c2goYCR7aW5wdXQuaW5kaWNlc1NldChcImlucHV0X2luZGljZXNcIiwgaywgb3V0cHV0LmluZGljZXNHZXQoXCJvdXRwdXRfaW5kaWNlc1wiLCBsKSl9O2ApO1xuICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgXG5cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3JtKFwib3V0cHV0X3NpemVcIiwgXCJ1MzJcIikuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cblxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMub3V0cHV0X3NpemVcIil9XG4gICAgICAgICAgdmFyIGlucHV0X2luZGljZXM6ICR7aW5wdXQudHlwZS5pbmRpY2VzfTtcbiAgICAgICAgICBsZXQgb3V0cHV0X2luZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoXCJnbG9iYWxfaWR4XCIpfTtcblxuICAgICAgICAgICR7aWR4Q29weS5qb2luKFwiXFxuXCIpfVxuICAgICAgICAgICR7b3BzWzBdfSAgICAgICAvLyBpbml0IG9wcyBmb3IgcmVkdWNlIG1heC9taW5cbiAgICAgICAgICAke29wc1sxXX1cbiAgICAgICAgICAke3JlZHVjZU9wczJ9XG4gICAgICAgICAgJHtvcHNbM119XG4gICAgICAgICAgJHtvcHMubGVuZ3RoID09PSA0ID8gb3V0cHV0LnNldEJ5T2Zmc2V0KFwiZ2xvYmFsX2lkeFwiLCBcInZhbHVlXCIpIDogb3BzLnNsaWNlKDQpLmpvaW4oXCJcXG5cIil9XG4gICAgICAgIH1gO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc2hhZGVyQ2FjaGUsXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IG91dHB1dERhdGFUeXBlIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgIG91dHB1dFNpemUgLyA2NFxuICAgICAgICAgICAgICAvKiB3b3JrZ3JvdXAgc2l6ZSAqL1xuICAgICAgICAgICAgKSB9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zOiBbeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IG91dHB1dFNpemUgfSwgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRTaGFwZSwgb3V0cHV0U2hhcGUpXVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY3JlYXRlUmVkdWNlQXR0cmlidXRlc0Zyb21JbnB1dHMgPSAoaW5wdXRzLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGF4ZXMgPSBbXTtcbiAgICAgICAgaWYgKGlucHV0c1sxXS5kaW1zWzBdID4gMCkge1xuICAgICAgICAgIGlucHV0c1sxXS5nZXRCaWdJbnQ2NEFycmF5KCkuZm9yRWFjaCgodikgPT4gYXhlcy5wdXNoKE51bWJlcih2KSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoXG4gICAgICAgICAgeyBheGVzLCBrZWVwRGltczogYXR0cmlidXRlcy5rZWVwRGltcywgbm9vcFdpdGhFbXB0eUF4ZXM6IGF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMgfVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIHJ1blJlZHVjZVByb2dyYW0gPSAoY29udGV4dCwgbmFtZSwgYXR0cmlidXRlcywgcmVkdWNlT3ApID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gY29udGV4dC5pbnB1dHM7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzID0gaW5wdXRzLmxlbmd0aCA9PT0gMSA/IGF0dHJpYnV0ZXMgOiBjcmVhdGVSZWR1Y2VBdHRyaWJ1dGVzRnJvbUlucHV0cyhpbnB1dHMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlUmVkdWNlUHJvZ3JhbUluZm8oXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgeyBoaW50OiB1cGRhdGVkQXR0cmlidXRlcy5jYWNoZUtleSwgaW5wdXREZXBlbmRlbmNpZXM6IFtcInJhbmtcIl0gfSxcbiAgICAgICAgICAgIFtpbnB1dHNbMF1dLFxuICAgICAgICAgICAgdXBkYXRlZEF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMgJiYgdXBkYXRlZEF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPT09IDAgPyBub09wIDogcmVkdWNlT3AsXG4gICAgICAgICAgICB1cGRhdGVkQXR0cmlidXRlcy5heGVzLFxuICAgICAgICAgICAgaW5wdXRzWzBdLmRhdGFUeXBlLFxuICAgICAgICAgICAgdXBkYXRlZEF0dHJpYnV0ZXMua2VlcERpbXMsXG4gICAgICAgICAgICB1cGRhdGVkQXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlc1xuICAgICAgICAgICksXG4gICAgICAgICAgeyBpbnB1dHM6IFswXSB9XG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgcmVkdWNlTG9nU3VtTmFpdmUgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czIoY29udGV4dC5pbnB1dHMpO1xuICAgICAgICBjb25zdCByZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0KSA9PiBbXG4gICAgICAgICAgYHZhciB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oMCk7YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIGB2YWx1ZSArPSAke2lucHV0LmdldEJ5SW5kaWNlcyhcImlucHV0X2luZGljZXNcIil9O2AsXG4gICAgICAgICAgXCJ2YWx1ZSA9IGxvZyh2YWx1ZSk7XCJcbiAgICAgICAgXTtcbiAgICAgICAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCBcIlJlZHVjZUxvZ1N1bVwiLCBhdHRyaWJ1dGVzLCByZWR1Y2VPcCk7XG4gICAgICB9O1xuICAgICAgcmVkdWNlTDFOYWl2ZSA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzMihjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnN0IHJlZHVjZU9wID0gKGlucHV0LCBvdXRwdXQpID0+IFtcbiAgICAgICAgICBgdmFyIHZhbHVlID0gJHtvdXRwdXQudHlwZS5zdG9yYWdlfSgwKTtgLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgYHZhbHVlICs9IGFicygke2lucHV0LmdldEJ5SW5kaWNlcyhcImlucHV0X2luZGljZXNcIil9KTtgLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgXTtcbiAgICAgICAgcnVuUmVkdWNlUHJvZ3JhbShjb250ZXh0LCBcIlJlZHVjZUwxXCIsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbiAgICAgIH07XG4gICAgICByZWR1Y2VMMk5haXZlID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgdmFsaWRhdGVJbnB1dHMyKGNvbnRleHQuaW5wdXRzKTtcbiAgICAgICAgY29uc3QgcmVkdWNlT3AgPSAoaW5wdXQsIG91dHB1dCkgPT4gW1xuICAgICAgICAgIGB2YXIgdCA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KDApOyB2YXIgdmFsdWUgPSAke291dHB1dC50eXBlLnZhbHVlfSgwKTtgLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgYHQgPSAke2lucHV0LmdldEJ5SW5kaWNlcyhcImlucHV0X2luZGljZXNcIil9OyB2YWx1ZSArPSAodCAqIHQpO2AsXG4gICAgICAgICAgXCJ2YWx1ZSA9IHNxcnQodmFsdWUpO1wiXG4gICAgICAgIF07XG4gICAgICAgIHJ1blJlZHVjZVByb2dyYW0oY29udGV4dCwgXCJSZWR1Y2VMMlwiLCBhdHRyaWJ1dGVzLCByZWR1Y2VPcCk7XG4gICAgICB9O1xuICAgICAgcmVkdWNlTG9nU3VtRXhwTmFpdmUgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czIoY29udGV4dC5pbnB1dHMpO1xuICAgICAgICBjb25zdCByZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0KSA9PiBbXG4gICAgICAgICAgYHZhciB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oMCk7YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIGB2YWx1ZSArPSBleHAoJHtpbnB1dC5nZXRCeUluZGljZXMoXCJpbnB1dF9pbmRpY2VzXCIpfSk7YCxcbiAgICAgICAgICBcInZhbHVlID0gbG9nKHZhbHVlKTtcIlxuICAgICAgICBdO1xuICAgICAgICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsIFwiUmVkdWNlTG9nU3VtRXhwXCIsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbiAgICAgIH07XG4gICAgICByZWR1Y2VNYXhOYWl2ZSA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzMihjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnN0IHJlZHVjZU9wID0gKGlucHV0LCBfb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWR4WmVybyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaW5wdXQucmFuazsgaysrKSB7XG4gICAgICAgICAgICBpZiAoYXhlcy5pbmRleE9mKGspID49IDAgfHwgYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgaWR4WmVyby5wdXNoKGlucHV0LmluZGljZXNTZXQoXCJpbnB1dF9pbmRpY2VzXCIsIGssIDApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGAke2lkeFplcm8uam9pbihcIlxcblwiKX1gLFxuICAgICAgICAgICAgYHZhciB2YWx1ZSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKFwiaW5wdXRfaW5kaWNlc1wiKX07YCxcbiAgICAgICAgICAgIGB2YWx1ZSA9IG1heCh2YWx1ZSwgJHtpbnB1dC5nZXRCeUluZGljZXMoXCJpbnB1dF9pbmRpY2VzXCIpfSk7YCxcbiAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICBdO1xuICAgICAgICB9O1xuICAgICAgICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsIFwiUmVkdWNlTWF4XCIsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbiAgICAgIH07XG4gICAgICByZWR1Y2VNZWFuTmFpdmUgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czIoY29udGV4dC5pbnB1dHMpO1xuICAgICAgICBjb25zdCByZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgICAgICAgbGV0IHNpemUgPSAxO1xuICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaW5wdXQucmFuazsgaysrKSB7XG4gICAgICAgICAgICBpZiAoYXhlcy5pbmRleE9mKGspID49IDAgfHwgYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgc2l6ZSAqPSBjb250ZXh0LmlucHV0c1swXS5kaW1zW2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgXCJ2YXIgc3VtID0gZjMyKDApO1wiLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIGBzdW0gKz0gZjMyKCR7aW5wdXQuZ2V0QnlJbmRpY2VzKFwiaW5wdXRfaW5kaWNlc1wiKX0pO2AsXG4gICAgICAgICAgICBgbGV0IHZhbHVlID0gJHtvdXRwdXQudHlwZS52YWx1ZX0oc3VtIC8gJHtzaXplfSk7YFxuICAgICAgICAgIF07XG4gICAgICAgIH07XG4gICAgICAgIHJ1blJlZHVjZVByb2dyYW0oY29udGV4dCwgXCJSZWR1Y2VNZWFuXCIsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbiAgICAgIH07XG4gICAgICByZWR1Y2VNaW5OYWl2ZSA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzMihjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnN0IHJlZHVjZU9wID0gKGlucHV0LCBfb3V0cHV0LCBheGVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWR4WmVybyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgaW5wdXQucmFuazsgaysrKSB7XG4gICAgICAgICAgICBpZiAoYXhlcy5pbmRleE9mKGspID49IDAgfHwgYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgaWR4WmVyby5wdXNoKGBpbnB1dF9pbmRpY2VzWyR7a31dID0gMDtgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGAke2lkeFplcm8uam9pbihcIlxcblwiKX1gLFxuICAgICAgICAgICAgYHZhciB2YWx1ZSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKFwiaW5wdXRfaW5kaWNlc1wiKX07YCxcbiAgICAgICAgICAgIGB2YWx1ZSA9IG1pbih2YWx1ZSwgJHtpbnB1dC5nZXRCeUluZGljZXMoXCJpbnB1dF9pbmRpY2VzXCIpfSk7YCxcbiAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICBdO1xuICAgICAgICB9O1xuICAgICAgICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsIFwiUmVkdWNlTWluXCIsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbiAgICAgIH07XG4gICAgICByZWR1Y2VQcm9kTmFpdmUgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czIoY29udGV4dC5pbnB1dHMpO1xuICAgICAgICBjb25zdCByZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0KSA9PiBbXG4gICAgICAgICAgYHZhciB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oMSk7YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIGB2YWx1ZSAqPSAke2lucHV0LmdldEJ5SW5kaWNlcyhcImlucHV0X2luZGljZXNcIil9O2AsXG4gICAgICAgICAgXCJcIlxuICAgICAgICBdO1xuICAgICAgICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsIFwiUmVkdWNlUHJvZFwiLCBhdHRyaWJ1dGVzLCByZWR1Y2VPcCk7XG4gICAgICB9O1xuICAgICAgcmVkdWNlU3VtTmFpdmUgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czIoY29udGV4dC5pbnB1dHMpO1xuICAgICAgICBjb25zdCByZWR1Y2VPcCA9IChpbnB1dCwgb3V0cHV0KSA9PiBbXG4gICAgICAgICAgYHZhciB2YWx1ZSA9ICR7b3V0cHV0LnR5cGUuc3RvcmFnZX0oMCk7YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIGB2YWx1ZSArPSAke2lucHV0LmdldEJ5SW5kaWNlcyhcImlucHV0X2luZGljZXNcIil9O2AsXG4gICAgICAgICAgXCJcIlxuICAgICAgICBdO1xuICAgICAgICBydW5SZWR1Y2VQcm9ncmFtKGNvbnRleHQsIFwiUmVkdWNlU3VtXCIsIGF0dHJpYnV0ZXMsIHJlZHVjZU9wKTtcbiAgICAgIH07XG4gICAgICByZWR1Y2VTdW1TcXVhcmVOYWl2ZSA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzMihjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnN0IHJlZHVjZU9wID0gKGlucHV0LCBvdXRwdXQpID0+IFtcbiAgICAgICAgICBgdmFyIHQgPSAke291dHB1dC50eXBlLnZhbHVlfSgwKTsgdmFyIHZhbHVlID0gJHtvdXRwdXQudHlwZS52YWx1ZX0oMCk7YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIGB0ID0gJHtpbnB1dC5nZXRCeUluZGljZXMoXCJpbnB1dF9pbmRpY2VzXCIpfTsgdmFsdWUgKz0gdCAqIHQ7YCxcbiAgICAgICAgICBcIlwiXG4gICAgICAgIF07XG4gICAgICAgIHJ1blJlZHVjZVByb2dyYW0oY29udGV4dCwgXCJSZWR1Y2VTdW1TcXVhcmVcIiwgYXR0cmlidXRlcywgcmVkdWNlT3ApO1xuICAgICAgfTtcbiAgICAgIHVzZU5haXZlUmVkdWNlTWV0aG9kID0gKHNoYXBlLCBheGVzLCBub29wV2l0aEVtcHR5QXhlcykgPT4ge1xuICAgICAgICBpZiAoYXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbm9vcFdpdGhFbXB0eUF4ZXM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG91dHB1dFNpemUgPSAxO1xuICAgICAgICBsZXQgcmVkdWNlU2l6ZSA9IDE7XG4gICAgICAgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IGF4ZXMubGVuZ3RoOyBkaW0rKykge1xuICAgICAgICAgIGlmIChheGVzLmluZGV4T2YoZGltKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIG91dHB1dFNpemUgKj0gc2hhcGVbZGltXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVkdWNlU2l6ZSAqPSBzaGFwZVtkaW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVkdWNlU2l6ZSA8IDMyICYmIG91dHB1dFNpemUgPiAxMDI0O1xuICAgICAgfTtcbiAgICAgIHJlZHVjZU1lYW4gPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBpZiAodXNlTmFpdmVSZWR1Y2VNZXRob2QoY29udGV4dC5pbnB1dHNbMF0uZGltcywgYXR0cmlidXRlcy5heGVzLCBhdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSkge1xuICAgICAgICAgIHJlZHVjZU1lYW5OYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWR1Y2VNZWFuU2hhcmVkKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmVkdWNlTDEgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBpZiAodXNlTmFpdmVSZWR1Y2VNZXRob2QoY29udGV4dC5pbnB1dHNbMF0uZGltcywgYXR0cmlidXRlcy5heGVzLCBhdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSkge1xuICAgICAgICAgIHJlZHVjZUwxTmFpdmUoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVkdWNlTDFTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZWR1Y2VMMiA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGlmICh1c2VOYWl2ZVJlZHVjZU1ldGhvZChjb250ZXh0LmlucHV0c1swXS5kaW1zLCBhdHRyaWJ1dGVzLmF4ZXMsIGF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMpKSB7XG4gICAgICAgICAgcmVkdWNlTDJOYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWR1Y2VMMlNoYXJlZChjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlZHVjZUxvZ1N1bUV4cCA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGlmICh1c2VOYWl2ZVJlZHVjZU1ldGhvZChjb250ZXh0LmlucHV0c1swXS5kaW1zLCBhdHRyaWJ1dGVzLmF4ZXMsIGF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMpKSB7XG4gICAgICAgICAgcmVkdWNlTG9nU3VtRXhwTmFpdmUoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVkdWNlTG9nU3VtRXhwU2hhcmVkKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmVkdWNlTWF4ID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICAgICAgICByZWR1Y2VNYXhOYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWR1Y2VNYXhTaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZWR1Y2VNaW4gPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBpZiAodXNlTmFpdmVSZWR1Y2VNZXRob2QoY29udGV4dC5pbnB1dHNbMF0uZGltcywgYXR0cmlidXRlcy5heGVzLCBhdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSkge1xuICAgICAgICAgIHJlZHVjZU1pbk5haXZlKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZHVjZU1pblNoYXJlZChjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlZHVjZVByb2QgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBpZiAodXNlTmFpdmVSZWR1Y2VNZXRob2QoY29udGV4dC5pbnB1dHNbMF0uZGltcywgYXR0cmlidXRlcy5heGVzLCBhdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSkge1xuICAgICAgICAgIHJlZHVjZVByb2ROYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWR1Y2VQcm9kU2hhcmVkKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmVkdWNlU3VtID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgaWYgKHVzZU5haXZlUmVkdWNlTWV0aG9kKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMsIGF0dHJpYnV0ZXMuYXhlcywgYXR0cmlidXRlcy5ub29wV2l0aEVtcHR5QXhlcykpIHtcbiAgICAgICAgICByZWR1Y2VTdW1OYWl2ZShjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWR1Y2VTdW1TaGFyZWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZWR1Y2VTdW1TcXVhcmUgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBpZiAodXNlTmFpdmVSZWR1Y2VNZXRob2QoY29udGV4dC5pbnB1dHNbMF0uZGltcywgYXR0cmlidXRlcy5heGVzLCBhdHRyaWJ1dGVzLm5vb3BXaXRoRW1wdHlBeGVzKSkge1xuICAgICAgICAgIHJlZHVjZVN1bVNxdWFyZU5haXZlKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZHVjZVN1bVNxdWFyZVNoYXJlZChjb250ZXh0LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlZHVjZUxvZ1N1bSA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGlmICh1c2VOYWl2ZVJlZHVjZU1ldGhvZChjb250ZXh0LmlucHV0c1swXS5kaW1zLCBhdHRyaWJ1dGVzLmF4ZXMsIGF0dHJpYnV0ZXMubm9vcFdpdGhFbXB0eUF4ZXMpKSB7XG4gICAgICAgICAgcmVkdWNlTG9nU3VtTmFpdmUoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVkdWNlTG9nU3VtU2hhcmVkKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9hcmdtaW5tYXgudHNcbiAgdmFyIHZhbGlkYXRlSW5wdXRzMywgYXJnTWluLCBhcmdNYXgsIHBhcnNlQXJnTWluTWF4QXR0cmlidXRlcztcbiAgdmFyIGluaXRfYXJnbWlubWF4ID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9hcmdtaW5tYXgudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF9hdHRyaWJ1dGVfd2l0aF9jYWNoZV9rZXkoKTtcbiAgICAgIGluaXRfcmVkdWNlKCk7XG4gICAgICB2YWxpZGF0ZUlucHV0czMgPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggPT09IDAgfHwgaW5wdXRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcmdNaW5NYXhPcCBvcCByZXF1aXJlcyAxIG9yIDIgaW5wdXRzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRzWzBdLmRhdGFUeXBlICE9PSAxIC8qIGZsb2F0ICovKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0eXBlLlwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGFyZ01pbiA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzMyhjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnN0IGFyZ01pbk1heE9wID0gKGlucHV0LCBvdXRwdXQsIGF4ZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBpZHhaZXJvID0gW107XG4gICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBpbnB1dC5yYW5rOyBrKyspIHtcbiAgICAgICAgICAgIGlmIChheGVzLmluZGV4T2YoaykgPj0gMCB8fCBheGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBpZHhaZXJvLnB1c2goYGlucHV0X2luZGljZXNbJHtrfV0gPSAwO2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYCR7aWR4WmVyby5qb2luKFwiXFxuXCIpfWAsXG4gICAgICAgICAgICBgdmFyIHZhbHVlID0gJHtpbnB1dC5nZXRCeUluZGljZXMoXCJpbnB1dF9pbmRpY2VzXCIpfTtcbnZhciBiZXN0X2luZGV4IDogaTMyID0gMDtgLFxuICAgICAgICAgICAgYGlmICgke2lucHV0LmdldEJ5SW5kaWNlcyhcImlucHV0X2luZGljZXNcIil9ICR7YXR0cmlidXRlcy5zZWxlY3RMYXN0SW5kZXggPiAwID8gXCI8PVwiIDogXCI8XCJ9IHZhbHVlKSB7XG4gICAgICAgICB2YWx1ZSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKFwiaW5wdXRfaW5kaWNlc1wiKX07XG4gICAgICAgICBiZXN0X2luZGV4ID0gaTMyKGxhc3RfaW5kZXgpO1xuICAgICAgIH1gLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIG91dHB1dC5zZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIiwgXCJiZXN0X2luZGV4XCIpXG4gICAgICAgICAgXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIGNyZWF0ZVJlZHVjZVByb2dyYW1JbmZvKFxuICAgICAgICAgICAgXCJBcmdNaW5cIixcbiAgICAgICAgICAgIHsgaGludDogYXR0cmlidXRlcy5jYWNoZUtleSwgaW5wdXREZXBlbmRlbmNpZXM6IFtcInJhbmtcIl0gfSxcbiAgICAgICAgICAgIFtjb250ZXh0LmlucHV0c1swXV0sXG4gICAgICAgICAgICBhcmdNaW5NYXhPcCxcbiAgICAgICAgICAgIFthdHRyaWJ1dGVzLmF4aXNdLFxuICAgICAgICAgICAgNyAvKiBpbnQ2NCAqLyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMua2VlcERpbXNcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaW5wdXRzOiBbMF0gfVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIGFyZ01heCA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzMyhjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnN0IGFyZ01pbk1heE9wID0gKGlucHV0LCBvdXRwdXQsIGF4ZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBpZHhaZXJvID0gW107XG4gICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBpbnB1dC5yYW5rOyBrKyspIHtcbiAgICAgICAgICAgIGlmIChheGVzLmluZGV4T2YoaykgPj0gMCB8fCBheGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBpZHhaZXJvLnB1c2goYGlucHV0X2luZGljZXNbJHtrfV0gPSAwO2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYCR7aWR4WmVyby5qb2luKFwiXFxuXCIpfWAsXG4gICAgICAgICAgICBgdmFyIHZhbHVlID0gJHtpbnB1dC5nZXRCeUluZGljZXMoXCJpbnB1dF9pbmRpY2VzXCIpfTtcbnZhciBiZXN0X2luZGV4IDogaTMyID0gMDtgLFxuICAgICAgICAgICAgYGlmICgke2lucHV0LmdldEJ5SW5kaWNlcyhcImlucHV0X2luZGljZXNcIil9ICR7YXR0cmlidXRlcy5zZWxlY3RMYXN0SW5kZXggPiAwID8gXCI+PVwiIDogXCI+XCJ9IHZhbHVlKSB7XG4gICAgICAgICB2YWx1ZSA9ICR7aW5wdXQuZ2V0QnlJbmRpY2VzKFwiaW5wdXRfaW5kaWNlc1wiKX07XG4gICAgICAgICBiZXN0X2luZGV4ID0gaTMyKGxhc3RfaW5kZXgpO1xuICAgICAgIH1gLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIG91dHB1dC5zZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIiwgXCJiZXN0X2luZGV4XCIpXG4gICAgICAgICAgXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIGNyZWF0ZVJlZHVjZVByb2dyYW1JbmZvKFxuICAgICAgICAgICAgXCJhcmdNYXhcIixcbiAgICAgICAgICAgIHsgaGludDogYXR0cmlidXRlcy5jYWNoZUtleSwgaW5wdXREZXBlbmRlbmNpZXM6IFtcInJhbmtcIl0gfSxcbiAgICAgICAgICAgIFtjb250ZXh0LmlucHV0c1swXV0sXG4gICAgICAgICAgICBhcmdNaW5NYXhPcCxcbiAgICAgICAgICAgIFthdHRyaWJ1dGVzLmF4aXNdLFxuICAgICAgICAgICAgNyAvKiBpbnQ2NCAqLyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMua2VlcERpbXNcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaW5wdXRzOiBbMF0gfVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIHBhcnNlQXJnTWluTWF4QXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoYXR0cmlidXRlcyk7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2NvbmNhdC50c1xuICB2YXIgdmFsaWRhdGVJbnB1dHM0LCBjYWxjdWxhdGVJbnB1dEluZGV4SW1wbCwgYXNzaWduT3V0cHV0RGF0YSwgY3JlYXRlQ29uY2F0UHJvZ3JhbUluZm8sIGNvbmNhdCwgcGFyc2VDb25jYXRBdHRyaWJ1dGVzO1xuICB2YXIgaW5pdF9jb25jYXQgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2NvbmNhdC50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfYXR0cmlidXRlX3dpdGhfY2FjaGVfa2V5KCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgdmFsaWRhdGVJbnB1dHM0ID0gKGlucHV0cywgYXhpcykgPT4ge1xuICAgICAgICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRvbyBmZXcgaW5wdXRzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUluZGV4ID0gMDtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSW5wdXQgPSBpbnB1dHNbcmVmZXJlbmNlSW5kZXhdO1xuICAgICAgICBjb25zdCBpbnB1dFR5cGUgPSByZWZlcmVuY2VJbnB1dC5kYXRhVHlwZTtcbiAgICAgICAgY29uc3QgaW5wdXRSYW5rID0gcmVmZXJlbmNlSW5wdXQuZGltcy5sZW5ndGg7XG4gICAgICAgIGlucHV0cy5mb3JFYWNoKChpbnB1dCwgaSkgPT4ge1xuICAgICAgICAgIGlmIChpID09PSByZWZlcmVuY2VJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5wdXQuZGF0YVR5cGUgIT09IGlucHV0VHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5wdXQgdGVuc29ycyBzaG91bGQgYmUgb25lIHR5cGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbnB1dC5kaW1zLmxlbmd0aCAhPT0gaW5wdXRSYW5rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnB1dCB0ZW5zb3JzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHNoYXBlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC5kaW1zLmZvckVhY2goKGRpbSwgaTIpID0+IHtcbiAgICAgICAgICAgIGlmIChpMiAhPT0gYXhpcyAmJiBkaW0gIT09IHJlZmVyZW5jZUlucHV0LmRpbXNbaTJdKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vbiBjb25jYXQgZGltZW5zaW9ucyBtdXN0IG1hdGNoXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBjYWxjdWxhdGVJbnB1dEluZGV4SW1wbCA9IChudW1iZXJPZlRlbnNvcnMsIHNpemVJbkNvbmNhdEF4aXNTdHIpID0+IGBcbiAgZm4gY2FsY3VsYXRlSW5wdXRJbmRleChpbmRleDogdTMyKSAtPiB1MzIge1xuICAgIGxldCBzaXplSW5Db25jYXRBeGlzID0gYXJyYXk8dTMyLCAke251bWJlck9mVGVuc29yc311Pigke3NpemVJbkNvbmNhdEF4aXNTdHJ9KTtcbiAgICBmb3IgKHZhciBpOiB1MzIgPSAwdTsgaSA8ICR7bnVtYmVyT2ZUZW5zb3JzfTsgaSArPSAxdSApIHtcbiAgICAgIGlmIChpbmRleCA8IHNpemVJbkNvbmNhdEF4aXNbaV0pIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAke251bWJlck9mVGVuc29yc311O1xuICB9YDtcbiAgICAgIGFzc2lnbk91dHB1dERhdGEgPSAoaW5wdXRzLCBvdXRwdXQpID0+IHtcbiAgICAgICAgY29uc3QgbnVtYmVyT2ZUZW5zb3JzID0gaW5wdXRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY29kZUxpbmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW5zb3JzOyArK2kpIHtcbiAgICAgICAgICBjb25zdCByZXR1cm5TbmlwcGV0ID0gb3V0cHV0LnNldEJ5T2Zmc2V0KFwiZ2xvYmFsX2lkeFwiLCBpbnB1dHNbaV0uZ2V0QnlJbmRpY2VzKFwiaW5kaWNlc1wiKSk7XG4gICAgICAgICAgaWYgKG51bWJlck9mVGVuc29ycyA9PT0gMSkge1xuICAgICAgICAgICAgY29kZUxpbmVzLnB1c2gocmV0dXJuU25pcHBldCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICBjb2RlTGluZXMucHVzaChgaWYgKGlucHV0SW5kZXggPT0gJHtpfXUpIHsgJHtyZXR1cm5TbmlwcGV0fSB9YCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpID09PSBudW1iZXJPZlRlbnNvcnMgLSAxKSB7XG4gICAgICAgICAgICBjb2RlTGluZXMucHVzaChgZWxzZSB7ICR7cmV0dXJuU25pcHBldH0gfWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2RlTGluZXMucHVzaChgZWxzZSBpZiAoaW5wdXRJbmRleCA9PSAke2l9KSB7ICR7cmV0dXJuU25pcHBldH0gfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29kZUxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgICB9O1xuICAgICAgY3JlYXRlQ29uY2F0UHJvZ3JhbUluZm8gPSAoaW5wdXRzLCBhZGp1c3RlZEF4aXMsIG91dHB1dFNoYXBlLCBkYXRhVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgICBjb25zdCBzaXplSW5Db25jYXRBeGlzID0gbmV3IEFycmF5KGlucHV0cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBpbnB1dFZhcnMgPSBuZXcgQXJyYXkoaW5wdXRzLmxlbmd0aCk7XG4gICAgICAgIGxldCBwcmV2aW91c1N1bSA9IDA7XG4gICAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzID0gW107XG4gICAgICAgIGNvbnN0IGlucHV0UmFua3MgPSBbXTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0gW3sgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBvdXRwdXRTaXplIH1dO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHByZXZpb3VzU3VtICs9IGlucHV0c1tpXS5kaW1zW2FkanVzdGVkQXhpc107XG4gICAgICAgICAgc2l6ZUluQ29uY2F0QXhpc1tpXSA9IHByZXZpb3VzU3VtO1xuICAgICAgICAgIGlucHV0UmFua3MucHVzaChpbnB1dHNbaV0uZGltcy5sZW5ndGgpO1xuICAgICAgICAgIGlucHV0VmFyc1tpXSA9IGlucHV0VmFyaWFibGUoYGlucHV0JHtpfWAsIGRhdGFUeXBlLCBpbnB1dFJhbmtzW2ldKTtcbiAgICAgICAgICBpbnB1dERlcGVuZGVuY2llcy5wdXNoKFwicmFua1wiKTtcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCh7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogc2l6ZUluQ29uY2F0QXhpc1tpXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1tpXS5kaW1zKSk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGUpKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGluZGljZXNBeGlzID0gb3V0cHV0LmluZGljZXNHZXQoXCJpbmRpY2VzXCIsIGFkanVzdGVkQXhpcyk7XG4gICAgICAgIGNvbnN0IHNpemVJbkNvbmNhdEF4aXNTdHIgPSBBcnJheS5mcm9tKEFycmF5KHNpemVJbkNvbmNhdEF4aXMubGVuZ3RoKS5rZXlzKCkpLm1hcCgoaSkgPT4gYHVuaWZvcm1zLnNpemVJbkNvbmNhdEF4aXMke2l9YCkuam9pbihcIixcIik7XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IGBcblxuICAkeygoKSA9PiB7XG4gICAgICAgICAgc2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybShcIm91dHB1dFNpemVcIiwgXCJ1MzJcIik7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oYHNpemVJbkNvbmNhdEF4aXMke2l9YCwgXCJ1MzJcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzaGFkZXJIZWxwZXIuZGVjbGFyZVZhcmlhYmxlcyguLi5pbnB1dFZhcnMsIG91dHB1dCk7XG4gICAgICAgIH0pKCl9XG5cbiAgJHtjYWxjdWxhdGVJbnB1dEluZGV4SW1wbChzaXplSW5Db25jYXRBeGlzLmxlbmd0aCwgc2l6ZUluQ29uY2F0QXhpc1N0cil9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhcInVuaWZvcm1zLm91dHB1dFNpemVcIil9XG5cbiAgICB2YXIgaW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcyhcImdsb2JhbF9pZHhcIil9O1xuXG4gICAgbGV0IGlucHV0SW5kZXggPSBjYWxjdWxhdGVJbnB1dEluZGV4KCR7aW5kaWNlc0F4aXN9KTtcbiAgICBpZiAoaW5wdXRJbmRleCAhPSAwdSkge1xuICAgICAgbGV0IHNpemVJbkNvbmNhdEF4aXMgPSBhcnJheTx1MzIsICR7c2l6ZUluQ29uY2F0QXhpcy5sZW5ndGh9dT4oJHtzaXplSW5Db25jYXRBeGlzU3RyfSk7XG4gICAgICAke2luZGljZXNBeGlzfSAtPSBzaXplSW5Db25jYXRBeGlzW2lucHV0SW5kZXggLSAxdV07XG4gICAgfVxuXG4gICAgJHthc3NpZ25PdXRwdXREYXRhKGlucHV0VmFycywgb3V0cHV0KX1cbiAgfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJDb25jYXRcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBoaW50OiBgJHthZGp1c3RlZEF4aXN9YCwgaW5wdXREZXBlbmRlbmNpZXMgfSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogW3sgZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgIG91dHB1dFNpemUgLyA2NFxuICAgICAgICAgICAgICAvKiB3b3JrZ3JvdXAgc2l6ZSAqL1xuICAgICAgICAgICAgKSB9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29uY2F0ID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gY29udGV4dC5pbnB1dHM7XG4gICAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRBeGlzID0gU2hhcGVVdGlsLm5vcm1hbGl6ZUF4aXMoYXR0cmlidXRlcy5heGlzLCBpbnB1dFNoYXBlLmxlbmd0aCk7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzNChpbnB1dHMsIGFkanVzdGVkQXhpcyk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gaW5wdXRTaGFwZS5zbGljZSgpO1xuICAgICAgICBvdXRwdXRTaGFwZVthZGp1c3RlZEF4aXNdID0gaW5wdXRzLnJlZHVjZSgoc3VtLCBpbnB1dCkgPT4gc3VtICsgKGlucHV0LmRpbXMubGVuZ3RoID4gYWRqdXN0ZWRBeGlzID8gaW5wdXQuZGltc1thZGp1c3RlZEF4aXNdIDogMCksIDApO1xuICAgICAgICBjb25zdCBub25FbXB0eUlucHV0cyA9IGlucHV0cy5maWx0ZXIoKGlucHV0KSA9PiBTaGFwZVV0aWwuc2l6ZShpbnB1dC5kaW1zKSA+IDApO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlQ29uY2F0UHJvZ3JhbUluZm8obm9uRW1wdHlJbnB1dHMsIGFkanVzdGVkQXhpcywgb3V0cHV0U2hhcGUsIGlucHV0c1swXS5kYXRhVHlwZSksXG4gICAgICAgICAgeyBpbnB1dHM6IG5vbkVtcHR5SW5wdXRzIH1cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBwYXJzZUNvbmNhdEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlcykgPT4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHsgYXhpczogYXR0cmlidXRlcy5heGlzIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9hdHRlbnRpb24udHNcbiAgdmFyIHZhbGlkYXRlQXR0ZW50aW9uSW5wdXRzLCBjcmVhdGVJblBsYWNlU29mdG1heFByb2dyYW1JbmZvLCBjcmVhdGVBdHRlbnRpb25Qcm9ic1Byb2dyYW1JbmZvLCBjcmVhdGVWeEF0dGVudGlvblNjb3JlUHJvZ3JhbUluZm8sIGFwcGx5QXR0ZW50aW9uLCBwcmVwYXJlLCBhdHRlbnRpb247XG4gIHZhciBpbml0X2F0dGVudGlvbiA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvYXR0ZW50aW9uLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfdHlwZXMoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICBpbml0X2NvbmNhdCgpO1xuICAgICAgdmFsaWRhdGVBdHRlbnRpb25JbnB1dHMgPSAoaW5wdXRzLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzWzBdO1xuICAgICAgICBjb25zdCB3ZWlnaHRzID0gaW5wdXRzWzFdO1xuICAgICAgICBjb25zdCBiaWFzID0gaW5wdXRzWzJdO1xuICAgICAgICBjb25zdCBtYXNrSW5kZXggPSBpbnB1dHNbM107XG4gICAgICAgIGNvbnN0IHBhc3QgPSBpbnB1dHNbNF07XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUG9zaXRpb25CaWFzID0gaW5wdXRzWzVdO1xuICAgICAgICBpZiAocGFzdCAmJiByZWxhdGl2ZVBvc2l0aW9uQmlhcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0dGVudGlvbiBjYW5ub3QgaGF2ZSBib3RoIHBhc3QgYW5kIHJlbGF0aXZlX3Bvc2l0aW9uX2JpYXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0LmRpbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcImlucHV0XCIgbXVzdCBoYXZlIDMgZGltZW5zaW9ucycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IGlucHV0LmRpbXNbMF07XG4gICAgICAgIGNvbnN0IHNlcXVlbmNlTGVuZ3RoID0gaW5wdXQuZGltc1sxXTtcbiAgICAgICAgY29uc3QgaW5wdXRIaWRkZW5TaXplID0gaW5wdXQuZGltc1syXTtcbiAgICAgICAgaWYgKGJpYXMuZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwiYmlhc1wiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMSBkaW1lbnNpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlaWdodHMuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwid2VpZ2h0c1wiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMiBkaW1lbnNpb25zJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlaWdodHMuZGltc1swXSAhPT0gaW5wdXRIaWRkZW5TaXplKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgMSBkaW1lbnNpb24gMCBzaG91bGQgaGF2ZSBzYW1lIGxlbmd0aCBhcyBkaW1lbnNpb24gMiBvZiBpbnB1dCAwXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiaWFzLmRpbXNbMF0gIT09IHdlaWdodHMuZGltc1sxXSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJiaWFzXCIgZGltZW5zaW9uIDAgc2hvdWxkIGhhdmUgc2FtZSBsZW5ndGggYXMgZGltZW5zaW9uIDEgb2YgaW5wdXQgXCJ3ZWlnaHRzXCInKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcUhpZGRlblNpemUgPSBiaWFzLmRpbXNbMF0gLyAzO1xuICAgICAgICBsZXQga0hpZGRlblNpemUgPSBxSGlkZGVuU2l6ZTtcbiAgICAgICAgbGV0IHZIaWRkZW5TaXplID0ga0hpZGRlblNpemU7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLnFrdkhpZGRlblNpemVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoYXR0cmlidXRlcy5xa3ZIaWRkZW5TaXplcy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInFrdl9oaWRkZW5fc2l6ZXMgYXR0cmlidXRlIHNob3VsZCBoYXZlIDMgZWxlbWVudHNcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoY29uc3Qgc3ogb2YgYXR0cmlidXRlcy5xa3ZIaWRkZW5TaXplcykge1xuICAgICAgICAgICAgaWYgKHN6ICUgYXR0cmlidXRlcy5udW1IZWFkcyAhPT0gMCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJxa3ZfaGlkZGVuX3NpemVzIHNob3VsZCBiZSBkaXZpc2libGUgYnkgbnVtX2hlYWRzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBxSGlkZGVuU2l6ZSA9IGF0dHJpYnV0ZXMucWt2SGlkZGVuU2l6ZXNbMF07XG4gICAgICAgICAga0hpZGRlblNpemUgPSBhdHRyaWJ1dGVzLnFrdkhpZGRlblNpemVzWzFdO1xuICAgICAgICAgIHZIaWRkZW5TaXplID0gYXR0cmlidXRlcy5xa3ZIaWRkZW5TaXplc1syXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrdlNlcXVlbmNlTGVuZ3RoID0gc2VxdWVuY2VMZW5ndGg7XG4gICAgICAgIGlmIChxSGlkZGVuU2l6ZSAhPT0ga0hpZGRlblNpemUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJxa3ZfaGlkZGVuX3NpemVzIGZpcnN0IGVsZW1lbnQgc2hvdWxkIGJlIHNhbWUgYXMgdGhlIHNlY29uZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmlhcy5kaW1zWzBdICE9PSBxSGlkZGVuU2l6ZSArIGtIaWRkZW5TaXplICsgdkhpZGRlblNpemUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwiYmlhc1wiIGRpbWVuc2lvbiAwIHNob3VsZCBoYXZlIHNhbWUgbGVuZ3RoIGFzIHN1bSBvZiBRL0svViBoaWRkZW4gc2l6ZXMnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFzdFNlcXVlbmNlTGVuZ3RoID0gMDtcbiAgICAgICAgaWYgKHBhc3QpIHtcbiAgICAgICAgICBpZiAoa0hpZGRlblNpemUgIT09IHZIaWRkZW5TaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicGFzdFwiIGV4cGVjdCBrX2hpZGRlbl9zaXplID09IHZfaGlkZGVuX3NpemUnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhc3QuZGltcy5sZW5ndGggIT09IDUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0XCIgbXVzdCBoYXZlIDUgZGltZW5zaW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFzdC5kaW1zWzBdICE9PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicGFzdFwiIGZpcnN0IGRpbWVuc2lvbiBtdXN0IGJlIDInKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhc3QuZGltc1sxXSAhPT0gYmF0Y2hTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicGFzdFwiIHNlY29uZCBkaW1lbnNpb24gbXVzdCBiZSBiYXRjaF9zaXplJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXN0LmRpbXNbMl0gIT09IGF0dHJpYnV0ZXMubnVtSGVhZHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0XCIgdGhpcmQgZGltZW5zaW9uIG11c3QgYmUgbnVtX2hlYWRzJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXN0LmRpbXNbNF0gIT09IGtIaWRkZW5TaXplIC8gYXR0cmlidXRlcy5udW1IZWFkcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3RcIiBmaWZ0aCBkaW1lbnNpb24gbXVzdCBiZSBrX2hpZGRlbl9zaXplIC8gbnVtX2hlYWRzJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghYXR0cmlidXRlcy5wYXN0UHJlc2VudFNoYXJlQnVmZmVyKSB7XG4gICAgICAgICAgICBwYXN0U2VxdWVuY2VMZW5ndGggPSBwYXN0LmRpbXNbM107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsU2VxdWVuY2VMZW5ndGggPSBrdlNlcXVlbmNlTGVuZ3RoICsgcGFzdFNlcXVlbmNlTGVuZ3RoO1xuICAgICAgICBjb25zdCBtYXhTZXF1ZW5jZUxlbmd0aCA9IC0xO1xuICAgICAgICBjb25zdCBtYXNrVHlwZSA9IDAgLyogbm9uZSAqLztcbiAgICAgICAgaWYgKG1hc2tJbmRleCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1hc2sgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFzdCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInBhc3QgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJhdGNoU2l6ZSxcbiAgICAgICAgICBzZXF1ZW5jZUxlbmd0aCxcbiAgICAgICAgICBwYXN0U2VxdWVuY2VMZW5ndGgsXG4gICAgICAgICAga3ZTZXF1ZW5jZUxlbmd0aCxcbiAgICAgICAgICB0b3RhbFNlcXVlbmNlTGVuZ3RoLFxuICAgICAgICAgIG1heFNlcXVlbmNlTGVuZ3RoLFxuICAgICAgICAgIGlucHV0SGlkZGVuU2l6ZSxcbiAgICAgICAgICBoaWRkZW5TaXplOiBxSGlkZGVuU2l6ZSxcbiAgICAgICAgICB2SGlkZGVuU2l6ZSxcbiAgICAgICAgICBoZWFkU2l6ZTogTWF0aC5mbG9vcihxSGlkZGVuU2l6ZSAvIGF0dHJpYnV0ZXMubnVtSGVhZHMpLFxuICAgICAgICAgIHZIZWFkU2l6ZTogTWF0aC5mbG9vcih2SGlkZGVuU2l6ZSAvIGF0dHJpYnV0ZXMubnVtSGVhZHMpLFxuICAgICAgICAgIG51bUhlYWRzOiBhdHRyaWJ1dGVzLm51bUhlYWRzLFxuICAgICAgICAgIGlzVW5pZGlyZWN0aW9uYWw6IGZhbHNlLFxuICAgICAgICAgIHBhc3RQcmVzZW50U2hhcmVCdWZmZXI6IGZhbHNlLFxuICAgICAgICAgIG1hc2tGaWx0ZXJWYWx1ZTogYXR0cmlidXRlcy5tYXNrRmlsdGVyVmFsdWUsXG4gICAgICAgICAgbWFza1R5cGUsXG4gICAgICAgICAgc2NhbGU6IGF0dHJpYnV0ZXMuc2NhbGUsXG4gICAgICAgICAgYnJvYWRjYXN0UmVzUG9zQmlhczogZmFsc2UsXG4gICAgICAgICAgcGFzc1Bhc3RJbkt2OiBmYWxzZSxcbiAgICAgICAgICBxa3ZGb3JtYXQ6IDEgLyogcWt2Qk5TSCAqL1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNyZWF0ZUluUGxhY2VTb2Z0bWF4UHJvZ3JhbUluZm8gPSAoX2NvbnRleHQsIGlucHV0LCBuLCBkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKGQpO1xuICAgICAgICBsZXQgV0cgPSA2NDtcbiAgICAgICAgY29uc3QgZENvbXAgPSBkIC8gY29tcG9uZW50cztcbiAgICAgICAgaWYgKGRDb21wIDwgV0cpIHtcbiAgICAgICAgICBXRyA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoZENvbXAgLyA4IDwgNjQpIHtcbiAgICAgICAgICBXRyA9IE1hdGguY2VpbChkQ29tcCAvIDgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzUGVyVGhyZWFkID0gTWF0aC5jZWlsKGQgLyBjb21wb25lbnRzIC8gV0cpO1xuICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXMgPSBbXG4gICAgICAgICAgeyB0eXBlOiBpbnB1dC5kYXRhVHlwZSwgZGF0YTogMSAvIGQgfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogZENvbXAgfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogZWxlbWVudHNQZXJUaHJlYWQgfVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZShpbnB1dC5kYXRhVHlwZSwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGYzMlR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsVmFsdWVUeXBlKDEgLyogZmxvYXQgKi8sIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5wdXRIZWxwZXIgPSBvdXRwdXRWYXJpYWJsZShcInhcIiwgaW5wdXQuZGF0YVR5cGUsIGlucHV0LmRpbXMsIGNvbXBvbmVudHMpO1xuICAgICAgICAgIGNvbnN0IGVsZW1WYWx1ZVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsVmFsdWVUeXBlKGlucHV0LmRhdGFUeXBlKTtcbiAgICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJkX2ludlwiLCB0eXBlOiBlbGVtVmFsdWVUeXBlIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiZF9jb21wXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJlbGVtZW50c19wZXJfdGhyZWFkXCIsIHR5cGU6IFwidTMyXCIgfVxuICAgICAgICAgIF07XG4gICAgICAgICAgcmV0dXJuIGBcbiAgdmFyPHdvcmtncm91cD4gdGhyZWFkX21heDogYXJyYXk8ZjMyLCAke1dHfT47XG4gIHZhcjx3b3JrZ3JvdXA+IHRocmVhZF9zdW06IGFycmF5PGYzMiwgJHtXR30+O1xuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKGlucHV0SGVscGVyKX1cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFtcbiAgICAgICAgICAgIFdHLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICBdKX1cbiAgICBsZXQgbG9jYWxfb2Zmc2V0ID0gbG9jYWxfaWR4ICogdW5pZm9ybXMuZWxlbWVudHNfcGVyX3RocmVhZDtcbiAgICBsZXQgb2Zmc2V0ID0gd29ya2dyb3VwX2lkLnggKiB1bmlmb3Jtcy5kX2NvbXAgKyBsb2NhbF9vZmZzZXQ7XG5cbiAgICB2YXIgdGhyZWFkX21heF92ZWN0b3IgPSAke2YzMlR5cGV9KC0zLjQwMjgyM2UrMzhmKTtcbiAgICBmb3IgKHZhciBpOiB1MzIgPSAwOyBpIDwgdW5pZm9ybXMuZWxlbWVudHNfcGVyX3RocmVhZCAmJiBpICsgbG9jYWxfb2Zmc2V0IDwgdW5pZm9ybXMuZF9jb21wOyBpKyspIHtcbiAgICAgIHRocmVhZF9tYXhfdmVjdG9yID0gbWF4KCR7ZjMyVHlwZX0oeFtvZmZzZXQgKyBpXSksIHRocmVhZF9tYXhfdmVjdG9yKTtcbiAgICB9XG4gICAgdGhyZWFkX21heFtsb2NhbF9pZHhdID0gJHsoKCkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ0aHJlYWRfbWF4X3ZlY3RvclwiO1xuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibWF4KHRocmVhZF9tYXhfdmVjdG9yLngsIHRocmVhZF9tYXhfdmVjdG9yLnkpXCI7XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJtYXgobWF4KHRocmVhZF9tYXhfdmVjdG9yLngsIHRocmVhZF9tYXhfdmVjdG9yLnkpLCBtYXgodGhyZWFkX21heF92ZWN0b3IueiwgdGhyZWFkX21heF92ZWN0b3IudykpXCI7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb21wb25lbnRzOiAke2NvbXBvbmVudHN9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkoKX07XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgdmFyIG1heF92YWx1ZSA9ICBmMzIoLTMuNDAyODIzZSszOGYpO1xuICAgIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7V0d9OyBpKyspIHtcbiAgICAgIG1heF92YWx1ZSA9IG1heCh0aHJlYWRfbWF4W2ldLCBtYXhfdmFsdWUpO1xuICAgIH1cblxuICAgIHZhciBzdW1fdmVjdG9yID0gJHtmMzJUeXBlfSgwKTtcbiAgICBmb3IgKHZhciBpOiB1MzIgPSAwOyBpIDwgdW5pZm9ybXMuZWxlbWVudHNfcGVyX3RocmVhZCAmJiBpICsgbG9jYWxfb2Zmc2V0IDwgdW5pZm9ybXMuZF9jb21wOyBpKyspIHtcbiAgICAgIHN1bV92ZWN0b3IgKz0gZXhwKCR7ZjMyVHlwZX0oeFtvZmZzZXQgKyBpXSkgLSBtYXhfdmFsdWUpO1xuICAgIH1cbiAgICB0aHJlYWRfc3VtW2xvY2FsX2lkeF0gPSAkeygoKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInN1bV92ZWN0b3JcIjtcbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInN1bV92ZWN0b3IueCArIHN1bV92ZWN0b3IueVwiO1xuICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic3VtX3ZlY3Rvci54ICsgc3VtX3ZlY3Rvci55ICsgc3VtX3ZlY3Rvci56ICsgc3VtX3ZlY3Rvci53XCI7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb21wb25lbnRzOiAke2NvbXBvbmVudHN9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkoKX07XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgdmFyIHN1bTogZjMyID0gMDtcbiAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke1dHfTsgaSsrKSB7XG4gICAgICBzdW0gKz0gdGhyZWFkX3N1bVtpXTtcbiAgICB9XG5cbiAgICBpZiAoc3VtID09IDApIHtcbiAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCB1bmlmb3Jtcy5lbGVtZW50c19wZXJfdGhyZWFkICYmIGkgKyBsb2NhbF9vZmZzZXQgPCB1bmlmb3Jtcy5kX2NvbXA7IGkrKykge1xuICAgICAgICB4W29mZnNldCArIGldID0gJHtpbnB1dEhlbHBlci50eXBlLnZhbHVlfSh1bmlmb3Jtcy5kX2ludik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCB1bmlmb3Jtcy5lbGVtZW50c19wZXJfdGhyZWFkICYmIGkgKyBsb2NhbF9vZmZzZXQgPCB1bmlmb3Jtcy5kX2NvbXA7IGkrKykge1xuICAgICAgICB2YXIgZjMyaW5wdXQgPSAke2YzMlR5cGV9KHhbb2Zmc2V0ICsgaV0pO1xuICAgICAgICB4W29mZnNldCArIGldID0gJHtpbnB1dEhlbHBlci50eXBlLnZhbHVlfShleHAoZjMyaW5wdXQgLSBtYXhfdmFsdWUpIC8gc3VtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1gO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiQXR0ZW50aW9uUHJvYnNTb2Z0bWF4XCIsXG4gICAgICAgICAgc2hhZGVyQ2FjaGU6IHsgaGludDogYCR7V0d9OyR7ZGF0YVR5cGV9OyR7Y29tcG9uZW50c31gIH0sXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7IG91dHB1dHM6IFtdLCBkaXNwYXRjaEdyb3VwOiB7IHg6IG4gfSwgcHJvZ3JhbVVuaWZvcm1zIH0pXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY3JlYXRlQXR0ZW50aW9uUHJvYnNQcm9ncmFtSW5mbyA9IChfY29udGV4dCwgcSwga2V5LCByZWxhdGl2ZVBvc2l0aW9uQmlhcywgcGFyYW1ldGVycywgYXR0cmlidXRlcywgcGFzdFNlcXVlbmNlTGVuZ3RoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsU2VxdWVuY2VMZW5ndGggPSBwYXN0U2VxdWVuY2VMZW5ndGggKyBwYXJhbWV0ZXJzLmt2U2VxdWVuY2VMZW5ndGg7XG4gICAgICAgIGNvbnN0IHByb2JzU2hhcGUgPSBbcGFyYW1ldGVycy5iYXRjaFNpemUsIHBhcmFtZXRlcnMubnVtSGVhZHMsIHBhcmFtZXRlcnMuc2VxdWVuY2VMZW5ndGgsIHRvdGFsU2VxdWVuY2VMZW5ndGhdO1xuICAgICAgICBjb25zdCBhbHBoYSA9IGF0dHJpYnV0ZXMuc2NhbGUgPT09IDAgPyAxIC8gTWF0aC5zcXJ0KHBhcmFtZXRlcnMuaGVhZFNpemUpIDogYXR0cmlidXRlcy5zY2FsZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMocGFyYW1ldGVycy5oZWFkU2l6ZSk7XG4gICAgICAgIGNvbnN0IHZlY3Rvcml6ZWRIZWFkU2l6ZSA9IHBhcmFtZXRlcnMuaGVhZFNpemUgLyBjb21wb25lbnRzO1xuICAgICAgICBjb25zdCBUSUxFX1NJWkUgPSAxMjtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2ggPSB7XG4gICAgICAgICAgeDogTWF0aC5jZWlsKHRvdGFsU2VxdWVuY2VMZW5ndGggLyBUSUxFX1NJWkUpLFxuICAgICAgICAgIHk6IE1hdGguY2VpbChwYXJhbWV0ZXJzLnNlcXVlbmNlTGVuZ3RoIC8gVElMRV9TSVpFKSxcbiAgICAgICAgICB6OiBwYXJhbWV0ZXJzLmJhdGNoU2l6ZSAqIHBhcmFtZXRlcnMubnVtSGVhZHNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0gW1xuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBwYXJhbWV0ZXJzLnNlcXVlbmNlTGVuZ3RoIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IHZlY3Rvcml6ZWRIZWFkU2l6ZSB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiB0b3RhbFNlcXVlbmNlTGVuZ3RoIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IHBhcmFtZXRlcnMubnVtSGVhZHMgfSxcbiAgICAgICAgICB7IHR5cGU6IDEgLyogZmxvYXQgKi8sIGRhdGE6IGFscGhhIH1cbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaW5wdXREZXBlbmRlbmNpZXMgPSBbXCJ0eXBlXCIsIFwidHlwZVwiXTtcbiAgICAgICAgaWYgKHJlbGF0aXZlUG9zaXRpb25CaWFzKSB7XG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXMucHVzaChcInJhbmtcIik7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMocmVsYXRpdmVQb3NpdGlvbkJpYXMuZGltcykpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBxSW5wdXQgPSBpbnB1dFZhcmlhYmxlKFwicVwiLCBxLmRhdGFUeXBlLCBxLmRpbXMsIGNvbXBvbmVudHMpO1xuICAgICAgICAgIGNvbnN0IGtJbnB1dCA9IGlucHV0VmFyaWFibGUoXCJrZXlcIiwga2V5LmRhdGFUeXBlLCBrZXkuZGltcywgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgaW5wdXRWYXJzID0gW3FJbnB1dCwga0lucHV0XTtcbiAgICAgICAgICBjb25zdCByZWxhdGl2ZVBvc2l0aW9uQmlhc0lucHV0ID0gcmVsYXRpdmVQb3NpdGlvbkJpYXMgPyBpbnB1dFZhcmlhYmxlKFwicmVsYXRpdmVfcG9zaXRpb25fYmlhc1wiLCByZWxhdGl2ZVBvc2l0aW9uQmlhcy5kYXRhVHlwZSwgcmVsYXRpdmVQb3NpdGlvbkJpYXMuZGltcy5sZW5ndGgpIDogdm9pZCAwO1xuICAgICAgICAgIGlmIChyZWxhdGl2ZVBvc2l0aW9uQmlhc0lucHV0KSB7XG4gICAgICAgICAgICBpbnB1dFZhcnMucHVzaChyZWxhdGl2ZVBvc2l0aW9uQmlhc0lucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgcS5kYXRhVHlwZSwgcHJvYnNTaGFwZSk7XG4gICAgICAgICAgY29uc3QgZjMyVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoMSAvKiBmbG9hdCAqLywgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgdW5pZm9ybXMgPSBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiTVwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiS1wiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiTlwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwibnVtX2hlYWRzXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJhbHBoYVwiLCB0eXBlOiBcImYzMlwiIH1cbiAgICAgICAgICBdO1xuICAgICAgICAgIHJldHVybiBgXG4gIGNvbnN0IFRJTEVfU0laRSA9ICR7VElMRV9TSVpFfXU7XG5cbiAgdmFyPHdvcmtncm91cD4gdGlsZVE6IGFycmF5PCR7cUlucHV0LnR5cGUuc3RvcmFnZX0sICR7VElMRV9TSVpFICogVElMRV9TSVpFfT47XG4gIHZhcjx3b3JrZ3JvdXA+IHRpbGVLOiBhcnJheTwke3FJbnB1dC50eXBlLnN0b3JhZ2V9LCAke1RJTEVfU0laRSAqIFRJTEVfU0laRX0+O1xuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFycywgb3V0cHV0KX1cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFtcbiAgICAgICAgICAgIFRJTEVfU0laRSxcbiAgICAgICAgICAgIFRJTEVfU0laRSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICBdKX1cbiAgICAvLyB4IGhvbGRzIHRoZSBOIGFuZCB5IGhvbGRzIHRoZSBNXG4gICAgbGV0IGhlYWRJZHggPSB3b3JrZ3JvdXBfaWQuejtcbiAgICBsZXQgbSA9IHdvcmtncm91cF9pZC55ICogVElMRV9TSVpFO1xuICAgIGxldCBuID0gd29ya2dyb3VwX2lkLnggKiBUSUxFX1NJWkU7XG4gICAgbGV0IHFPZmZzZXQgPSB1bmlmb3Jtcy5NICogdW5pZm9ybXMuSyAqIGhlYWRJZHggKyBtICogdW5pZm9ybXMuSztcbiAgICBsZXQga09mZnNldCA9IHVuaWZvcm1zLk4gKiB1bmlmb3Jtcy5LICogaGVhZElkeCArIG4gKiB1bmlmb3Jtcy5LO1xuXG4gICAgdmFyIHZhbHVlID0gJHtmMzJUeXBlfSgwKTtcbiAgICBmb3IgKHZhciB3OiB1MzIgPSAwdTsgdyA8IHVuaWZvcm1zLks7IHcgKz0gVElMRV9TSVpFKSB7XG4gICAgICBpZiAoZ2xvYmFsX2lkLnkgPCB1bmlmb3Jtcy5NICYmIHcgKyBsb2NhbF9pZC54IDwgdW5pZm9ybXMuSykge1xuICAgICAgICB0aWxlUVtUSUxFX1NJWkUgKiBsb2NhbF9pZC55ICsgbG9jYWxfaWQueF0gPSBxW3FPZmZzZXQgKyBsb2NhbF9pZC55ICogdW5pZm9ybXMuSyArIHcgKyBsb2NhbF9pZC54XTtcbiAgICAgIH1cbiAgICAgIGlmIChuICsgbG9jYWxfaWQueSA8IHVuaWZvcm1zLk4gJiYgdyArIGxvY2FsX2lkLnggPCB1bmlmb3Jtcy5LKSB7XG4gICAgICAgIHRpbGVLW1RJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBsb2NhbF9pZC54XSA9IGtleVtrT2Zmc2V0ICsgbG9jYWxfaWQueSAqIHVuaWZvcm1zLksgKyB3ICsgbG9jYWxfaWQueF07XG4gICAgICB9XG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAgIGZvciAodmFyIGs6IHUzMiA9IDB1OyBrIDwgVElMRV9TSVpFICYmIHcrayA8IHVuaWZvcm1zLks7IGsrKykge1xuICAgICAgICB2YWx1ZSArPSAke2YzMlR5cGV9KHRpbGVRW1RJTEVfU0laRSAqIGxvY2FsX2lkLnkgKyBrXSAqIHRpbGVLW1RJTEVfU0laRSAqIGxvY2FsX2lkLnggKyBrXSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcbiAgICB9XG5cbiAgICBsZXQgaGVhZE9mZnNldCA9IGhlYWRJZHggKiB1bmlmb3Jtcy5NICogdW5pZm9ybXMuTjtcbiAgICBpZiAoZ2xvYmFsX2lkLnkgPCB1bmlmb3Jtcy5NICYmIGdsb2JhbF9pZC54IDwgdW5pZm9ybXMuTikge1xuICAgICAgbGV0IG91dHB1dElkeCA9IGhlYWRPZmZzZXQgKyBnbG9iYWxfaWQueSAqIHVuaWZvcm1zLk4gKyBnbG9iYWxfaWQueDtcbiAgICAgIHZhciBzdW06IGYzMiA9ICR7KCgpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidmFsdWVcIjtcbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInZhbHVlLnggKyB2YWx1ZS55XCI7XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJ2YWx1ZS54ICsgdmFsdWUueSArIHZhbHVlLnogKyB2YWx1ZS53XCI7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb21wb25lbnRzOiAke2NvbXBvbmVudHN9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkoKX07XG5cbiAgJHsoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlbGF0aXZlUG9zaXRpb25CaWFzSW5wdXQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgIGxldCBiYXRjaCA9IHdvcmtncm91cF9pZC56IC8gdW5pZm9ybXMubnVtX2hlYWRzO1xuICAgICAgbGV0IGhlYWQgPSB3b3JrZ3JvdXBfaWQueiAlIHVuaWZvcm1zLm51bV9oZWFkcztcbiAgICAgIHZhciBpbmRpY2VzID0gJHtyZWxhdGl2ZVBvc2l0aW9uQmlhc0lucHV0LnR5cGUuaW5kaWNlc30oYmF0Y2gsIGhlYWQsIGdsb2JhbF9pZC55LCBnbG9iYWxfaWQueCk7XG4gICAgICBvdXRwdXRbb3V0cHV0SWR4XSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KHN1bSAqIHVuaWZvcm1zLmFscGhhKSArICR7cmVsYXRpdmVQb3NpdGlvbkJpYXNJbnB1dC5nZXRCeUluZGljZXMoXCJpbmRpY2VzXCIpfTtgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGBvdXRwdXRbb3V0cHV0SWR4XSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9IChzdW0gKiB1bmlmb3Jtcy5hbHBoYSk7YDtcbiAgICAgICAgICB9KSgpfVxuICAgIH1cbiAgfWA7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJBdHRlbnRpb25Qcm9ic1wiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGhpbnQ6IGAke2NvbXBvbmVudHN9YCwgaW5wdXREZXBlbmRlbmNpZXMgfSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogW3sgZGltczogcHJvYnNTaGFwZSwgZGF0YVR5cGU6IHEuZGF0YVR5cGUsIGdwdURhdGFUeXBlOiAwIC8qIGRlZmF1bHQgKi8gfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiBkaXNwYXRjaCxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNyZWF0ZVZ4QXR0ZW50aW9uU2NvcmVQcm9ncmFtSW5mbyA9IChfY29udGV4dCwgcHJvYnMsIHYsIHBhcmFtcywgcGFzdFNlcXVlbmNlTGVuZ3RoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsU2VxdWVuY2VMZW5ndGggPSBwYXN0U2VxdWVuY2VMZW5ndGggKyBwYXJhbXMua3ZTZXF1ZW5jZUxlbmd0aDtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBbcGFyYW1zLmJhdGNoU2l6ZSwgcGFyYW1zLnNlcXVlbmNlTGVuZ3RoLCBwYXJhbXMudkhpZGRlblNpemVdO1xuICAgICAgICBjb25zdCBUSUxFX1NJWkUgPSAxMjtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2ggPSB7XG4gICAgICAgICAgeDogTWF0aC5jZWlsKHBhcmFtcy52SGVhZFNpemUgLyBUSUxFX1NJWkUpLFxuICAgICAgICAgIHk6IE1hdGguY2VpbChwYXJhbXMuc2VxdWVuY2VMZW5ndGggLyBUSUxFX1NJWkUpLFxuICAgICAgICAgIHo6IHBhcmFtcy5iYXRjaFNpemUgKiBwYXJhbXMubnVtSGVhZHNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0gW1xuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBwYXJhbXMuc2VxdWVuY2VMZW5ndGggfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogdG90YWxTZXF1ZW5jZUxlbmd0aCB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBwYXJhbXMudkhlYWRTaXplIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IHBhcmFtcy5udW1IZWFkcyB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBwYXJhbXMudkhpZGRlblNpemUgfVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llcyA9IFtcInR5cGVcIiwgXCJ0eXBlXCJdO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvYnNIZWxwZXIgPSBpbnB1dFZhcmlhYmxlKFwicHJvYnNcIiwgcHJvYnMuZGF0YVR5cGUsIHByb2JzLmRpbXMpO1xuICAgICAgICAgIGNvbnN0IHZIZWxwZXIgPSBpbnB1dFZhcmlhYmxlKFwidlwiLCB2LmRhdGFUeXBlLCB2LmRpbXMpO1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKFwib3V0cHV0XCIsIHByb2JzLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSk7XG4gICAgICAgICAgY29uc3QgdW5pZm9ybXMgPSBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiTVwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiS1wiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiTlwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwibnVtX2hlYWRzXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJ2X2hpZGRlbl9zaXplXCIsIHR5cGU6IFwidTMyXCIgfVxuICAgICAgICAgIF07XG4gICAgICAgICAgcmV0dXJuIGBcbiAgY29uc3QgVElMRV9TSVpFID0gJHtUSUxFX1NJWkV9dTtcbiAgdmFyPHdvcmtncm91cD4gdGlsZVE6IGFycmF5PCR7cHJvYnNIZWxwZXIudHlwZS52YWx1ZX0sICR7VElMRV9TSVpFICogVElMRV9TSVpFfT47XG4gIHZhcjx3b3JrZ3JvdXA+IHRpbGVLOiBhcnJheTwke3Byb2JzSGVscGVyLnR5cGUudmFsdWV9LCAke1RJTEVfU0laRSAqIFRJTEVfU0laRX0+O1xuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKHByb2JzSGVscGVyLCB2SGVscGVyLCBvdXRwdXQpfVxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoW1xuICAgICAgICAgICAgVElMRV9TSVpFLFxuICAgICAgICAgICAgVElMRV9TSVpFLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIF0pfVxuICAgbGV0IGhlYWRJZHggPSB3b3JrZ3JvdXBfaWQuejtcbiAgIGxldCBtID0gZ2xvYmFsX2lkLnk7XG4gICBsZXQgbiA9IGdsb2JhbF9pZC54O1xuXG4gICBsZXQgb2Zmc2V0QSA9IGhlYWRJZHggKiAodW5pZm9ybXMuTSAqIHVuaWZvcm1zLkspICsgbSAqIHVuaWZvcm1zLks7XG4gICBsZXQgb2Zmc2V0QiA9IGhlYWRJZHggKiAodW5pZm9ybXMuTiAqIHVuaWZvcm1zLkspICsgbjtcblxuICAgdmFyIHZhbHVlID0gJHtwcm9ic0hlbHBlci50eXBlLnN0b3JhZ2V9KDApO1xuICAgZm9yICh2YXIgdzogdTMyID0gMHU7IHcgPCB1bmlmb3Jtcy5LOyB3ICs9IFRJTEVfU0laRSkge1xuICAgICBpZiAobSA8IHVuaWZvcm1zLk0gJiYgdyArIGxvY2FsX2lkLnggPCB1bmlmb3Jtcy5LKSB7XG4gICAgICAgdGlsZVFbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0gcHJvYnNbb2Zmc2V0QSArIHcgKyBsb2NhbF9pZC54XTtcbiAgICAgfVxuICAgICBpZiAobiA8IHVuaWZvcm1zLk4gJiYgdyArIGxvY2FsX2lkLnkgPCB1bmlmb3Jtcy5LKSB7XG4gICAgICAgdGlsZUtbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGxvY2FsX2lkLnhdID0gdltvZmZzZXRCICsgKHcgKyBsb2NhbF9pZC55KSAqIHVuaWZvcm1zLk5dO1xuICAgICB9XG4gICAgIHdvcmtncm91cEJhcnJpZXIoKTtcbiAgICAgZm9yICh2YXIgazogdTMyID0gMHU7IGsgPCBUSUxFX1NJWkUgJiYgdytrIDwgdW5pZm9ybXMuSzsgaysrKSB7XG4gICAgICAgdmFsdWUgKz0gdGlsZVFbVElMRV9TSVpFICogbG9jYWxfaWQueSArIGtdICogdGlsZUtbVElMRV9TSVpFICogayArIGxvY2FsX2lkLnhdO1xuICAgICB9XG4gICAgIHdvcmtncm91cEJhcnJpZXIoKTtcbiAgIH1cblxuICAgLy8gd2UgbmVlZCB0byB0cmFuc3Bvc2Ugb3V0cHV0IGZyb20gQk5TSF92IHRvIEJTTkRfdlxuICAgbGV0IGJhdGNoSWR4ID0gd29ya2dyb3VwX2lkLnogLyB1bmlmb3Jtcy5udW1faGVhZHM7XG4gICBsZXQgY3VycmVudEJhdGNoSGVhZE51bWJlciA9IHdvcmtncm91cF9pZC56ICUgdW5pZm9ybXMubnVtX2hlYWRzO1xuICAgaWYgKG0gPCB1bmlmb3Jtcy5NICYmIG4gPCB1bmlmb3Jtcy5OKSB7XG4gICAgIGxldCBvdXRwdXRJZHggPSBiYXRjaElkeCAqIHVuaWZvcm1zLk0gKiB1bmlmb3Jtcy52X2hpZGRlbl9zaXplICsgbSAqIHVuaWZvcm1zLnZfaGlkZGVuX3NpemVcbiAgICAgICArIGN1cnJlbnRCYXRjaEhlYWROdW1iZXIgKiB1bmlmb3Jtcy5OICsgbjtcbiAgICAgb3V0cHV0W291dHB1dElkeF0gPSB2YWx1ZTtcbiAgIH1cbiAgfWA7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJBdHRlbnRpb25TY29yZVwiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGlucHV0RGVwZW5kZW5jaWVzIH0sXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogcHJvYnMuZGF0YVR5cGUsIGdwdURhdGFUeXBlOiAwIC8qIGRlZmF1bHQgKi8gfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiBkaXNwYXRjaCxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGFwcGx5QXR0ZW50aW9uID0gKGNvbnRleHQsIHEsIGssIHYsIF9tYXNrSW5kZXgsIF9wYXN0LCBwYXN0S2V5LCBwYXN0VmFsdWUsIHJlbGF0aXZlUG9zaXRpb25CaWFzLCBwYXJhbWV0ZXJzLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dFByZXNlbnRLZXkgPSBjb250ZXh0Lm91dHB1dENvdW50ID4gMTtcbiAgICAgICAgY29uc3Qgb3V0cHV0UHJlc2VudFZhbHVlID0gY29udGV4dC5vdXRwdXRDb3VudCA+IDI7XG4gICAgICAgIGNvbnN0IHBhc3RTZXF1ZW5jZUxlbmd0aCA9IG91dHB1dFByZXNlbnRLZXkgJiYgb3V0cHV0UHJlc2VudFZhbHVlID8gcGFyYW1ldGVycy5wYXN0U2VxdWVuY2VMZW5ndGggOiAwO1xuICAgICAgICBjb25zdCB0b3RhbFNlcXVlbmNlTGVuZ3RoID0gcGFzdFNlcXVlbmNlTGVuZ3RoICsgcGFyYW1ldGVycy5rdlNlcXVlbmNlTGVuZ3RoO1xuICAgICAgICBjb25zdCBwcmVzZW50S2V5U2hhcGUgPSBbcGFyYW1ldGVycy5iYXRjaFNpemUsIHBhcmFtZXRlcnMubnVtSGVhZHMsIHRvdGFsU2VxdWVuY2VMZW5ndGgsIHBhcmFtZXRlcnMuaGVhZFNpemVdO1xuICAgICAgICBjb25zdCBjb25jYXRLZXlJbnB1dHMgPSBwYXN0S2V5ID8gW3Bhc3RLZXksIGtdIDogW2tdO1xuICAgICAgICBjb25zdCBrZXkgPSBvdXRwdXRQcmVzZW50S2V5ID8gY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIGNyZWF0ZUNvbmNhdFByb2dyYW1JbmZvKGNvbmNhdEtleUlucHV0cywgMiwgcHJlc2VudEtleVNoYXBlLCBrLmRhdGFUeXBlKSxcbiAgICAgICAgICB7IGlucHV0czogY29uY2F0S2V5SW5wdXRzLCBvdXRwdXRzOiBbMV0gfVxuICAgICAgICApWzBdIDogaztcbiAgICAgICAgY29uc3QgcHJlc2VudFZhbHVlU2hhcGUgPSBbcGFyYW1ldGVycy5iYXRjaFNpemUsIHBhcmFtZXRlcnMubnVtSGVhZHMsIHRvdGFsU2VxdWVuY2VMZW5ndGgsIHBhcmFtZXRlcnMuaGVhZFNpemVdO1xuICAgICAgICBjb25zdCBjb25jYXRWYWx1ZUlucHV0cyA9IHBhc3RWYWx1ZSA/IFtwYXN0VmFsdWUsIHZdIDogW3ZdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG91dHB1dFByZXNlbnRWYWx1ZSA/IGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVDb25jYXRQcm9ncmFtSW5mbyhjb25jYXRWYWx1ZUlucHV0cywgMiwgcHJlc2VudFZhbHVlU2hhcGUsIHYuZGF0YVR5cGUpLFxuICAgICAgICAgIHsgaW5wdXRzOiBjb25jYXRWYWx1ZUlucHV0cywgb3V0cHV0czogWzJdIH1cbiAgICAgICAgKVswXSA6IHY7XG4gICAgICAgIGNvbnN0IGlucHV0c0sgPSBbcSwga2V5XTtcbiAgICAgICAgaWYgKHJlbGF0aXZlUG9zaXRpb25CaWFzKSB7XG4gICAgICAgICAgaW5wdXRzSy5wdXNoKHJlbGF0aXZlUG9zaXRpb25CaWFzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9icyA9IGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVBdHRlbnRpb25Qcm9ic1Byb2dyYW1JbmZvKFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIHEsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICByZWxhdGl2ZVBvc2l0aW9uQmlhcyxcbiAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgcGFzdFNlcXVlbmNlTGVuZ3RoXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7IGlucHV0czogaW5wdXRzSywgb3V0cHV0czogWy0xXSB9XG4gICAgICAgIClbMF07XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVJblBsYWNlU29mdG1heFByb2dyYW1JbmZvKFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIHByb2JzLFxuICAgICAgICAgICAgcGFyYW1ldGVycy5iYXRjaFNpemUgKiBwYXJhbWV0ZXJzLm51bUhlYWRzICogcGFyYW1ldGVycy5zZXF1ZW5jZUxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsU2VxdWVuY2VMZW5ndGhcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaW5wdXRzOiBbcHJvYnNdLCBvdXRwdXRzOiBbXSB9XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGlucHV0c1YgPSBbcHJvYnMsIHZhbHVlXTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIGNyZWF0ZVZ4QXR0ZW50aW9uU2NvcmVQcm9ncmFtSW5mbyhjb250ZXh0LCBwcm9icywgdmFsdWUsIHBhcmFtZXRlcnMsIHBhc3RTZXF1ZW5jZUxlbmd0aCksXG4gICAgICAgICAgeyBpbnB1dHM6IGlucHV0c1YsIG91dHB1dHM6IFswXSB9XG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgcHJlcGFyZSA9IChjb250ZXh0LCBwYXJhbWV0ZXJzKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gW1xuICAgICAgICAgIHBhcmFtZXRlcnMuYmF0Y2hTaXplLFxuICAgICAgICAgIHBhcmFtZXRlcnMubnVtSGVhZHMsXG4gICAgICAgICAgcGFyYW1ldGVycy5zZXF1ZW5jZUxlbmd0aCxcbiAgICAgICAgICBwYXJhbWV0ZXJzLmhlYWRTaXplXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IE0gPSBwYXJhbWV0ZXJzLnNlcXVlbmNlTGVuZ3RoO1xuICAgICAgICBjb25zdCBLID0gcGFyYW1ldGVycy5pbnB1dEhpZGRlblNpemU7XG4gICAgICAgIGNvbnN0IE4gPSBwYXJhbWV0ZXJzLmhlYWRTaXplO1xuICAgICAgICBjb25zdCBUSUxFX1NJWkUgPSAxMjtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2ggPSB7XG4gICAgICAgICAgeDogTWF0aC5jZWlsKHBhcmFtZXRlcnMuaGVhZFNpemUgLyBUSUxFX1NJWkUpLFxuICAgICAgICAgIHk6IE1hdGguY2VpbChwYXJhbWV0ZXJzLnNlcXVlbmNlTGVuZ3RoIC8gVElMRV9TSVpFKSxcbiAgICAgICAgICB6OiBwYXJhbWV0ZXJzLmJhdGNoU2l6ZSAqIHBhcmFtZXRlcnMubnVtSGVhZHNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gW2NvbnRleHQuaW5wdXRzWzBdLCBjb250ZXh0LmlucHV0c1sxXSwgY29udGV4dC5pbnB1dHNbMl1dO1xuICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXMgPSBbXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IE0gfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogSyB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBOIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IHBhcmFtZXRlcnMubnVtSGVhZHMgfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogcGFyYW1ldGVycy5oZWFkU2l6ZSB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBwYXJhbWV0ZXJzLmhpZGRlblNpemUgfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogcGFyYW1ldGVycy5oaWRkZW5TaXplICsgcGFyYW1ldGVycy5oaWRkZW5TaXplICsgcGFyYW1ldGVycy52SGlkZGVuU2l6ZSB9XG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXRRID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRfcVwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXRLID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRfa1wiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXRWID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRfdlwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlKTtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoXCJpbnB1dFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zKTtcbiAgICAgICAgICBjb25zdCB3ZWlnaHQgPSBpbnB1dFZhcmlhYmxlKFwid2VpZ2h0XCIsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMpO1xuICAgICAgICAgIGNvbnN0IGJpYXMgPSBpbnB1dFZhcmlhYmxlKFwiYmlhc1wiLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zKTtcbiAgICAgICAgICBjb25zdCBkYXRhVHlwZSA9IGlucHV0LnR5cGUuc3RvcmFnZTtcbiAgICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJNXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJLXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJOXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJudW1faGVhZHNcIiwgdHlwZTogXCJ1MzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImhlYWRfc2l6ZVwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiaGlkZGVuX3NpemVcIiwgdHlwZTogXCJ1MzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImxkYlwiLCB0eXBlOiBcInUzMlwiIH1cbiAgICAgICAgICBdO1xuICAgICAgICAgIHJldHVybiBgXG4gIGNvbnN0IFRJTEVfU0laRSA9ICR7VElMRV9TSVpFfXU7XG4gIHZhcjx3b3JrZ3JvdXA+IHRpbGVJbnB1dDogYXJyYXk8JHtkYXRhVHlwZX0sICR7VElMRV9TSVpFICogVElMRV9TSVpFfT47XG4gIHZhcjx3b3JrZ3JvdXA+IHRpbGVXZWlnaHRROiBhcnJheTwke2RhdGFUeXBlfSwgJHtUSUxFX1NJWkUgKiBUSUxFX1NJWkV9PjtcbiAgdmFyPHdvcmtncm91cD4gdGlsZVdlaWdodEs6IGFycmF5PCR7ZGF0YVR5cGV9LCAke1RJTEVfU0laRSAqIFRJTEVfU0laRX0+O1xuICB2YXI8d29ya2dyb3VwPiB0aWxlV2VpZ2h0VjogYXJyYXk8JHtkYXRhVHlwZX0sICR7VElMRV9TSVpFICogVElMRV9TSVpFfT47XG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIHdlaWdodCwgYmlhcywgb3V0cHV0USwgb3V0cHV0Sywgb3V0cHV0Vil9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydChbXG4gICAgICAgICAgICBUSUxFX1NJWkUsXG4gICAgICAgICAgICBUSUxFX1NJWkUsXG4gICAgICAgICAgICAxXG4gICAgICAgICAgXSl9XG4gICAgbGV0IGJhdGNoSW5kZXggPSB3b3JrZ3JvdXBfaWQueiAvIHVuaWZvcm1zLm51bV9oZWFkcztcbiAgICBsZXQgaGVhZE51bWJlciA9IHdvcmtncm91cF9pZC56ICUgdW5pZm9ybXMubnVtX2hlYWRzO1xuICAgIGxldCBtID0gZ2xvYmFsX2lkLnk7XG4gICAgbGV0IG4gPSBnbG9iYWxfaWQueDtcblxuICAgIGxldCBpbnB1dE9mZnNldCA9IGJhdGNoSW5kZXggKiAodW5pZm9ybXMuTSAqIHVuaWZvcm1zLkspICsgbSAqIHVuaWZvcm1zLks7XG4gICAgbGV0IGJpYXNPZmZzZXRRID0gaGVhZE51bWJlciAqIHVuaWZvcm1zLmhlYWRfc2l6ZTtcbiAgICBsZXQgYmlhc09mZnNldEsgPSB1bmlmb3Jtcy5oaWRkZW5fc2l6ZSArIGJpYXNPZmZzZXRRO1xuICAgIGxldCBiaWFzT2Zmc2V0ViA9IHVuaWZvcm1zLmhpZGRlbl9zaXplICsgYmlhc09mZnNldEs7XG5cbiAgICB2YXIgdmFsdWVRID0gJHtkYXRhVHlwZX0oMCk7XG4gICAgdmFyIHZhbHVlSyA9ICR7ZGF0YVR5cGV9KDApO1xuICAgIHZhciB2YWx1ZVYgPSAke2RhdGFUeXBlfSgwKTtcbiAgICBmb3IgKHZhciB3OiB1MzIgPSAwdTsgdyA8IHVuaWZvcm1zLks7IHcgKz0gVElMRV9TSVpFKSB7XG4gICAgICBpZiAobSA8IHVuaWZvcm1zLk0gJiYgdyArIGxvY2FsX2lkLnggPCB1bmlmb3Jtcy5LKSB7XG4gICAgICAgIHRpbGVJbnB1dFtUSUxFX1NJWkUgKiBsb2NhbF9pZC55ICsgbG9jYWxfaWQueF0gPSBpbnB1dFtpbnB1dE9mZnNldCArIHcgKyBsb2NhbF9pZC54XTtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgdW5pZm9ybXMuTiAmJiB3ICsgbG9jYWxfaWQueSA8IHVuaWZvcm1zLkspIHtcbiAgICAgICAgbGV0IG9mZnNldCA9IG4gKyAodyArIGxvY2FsX2lkLnkpICogdW5pZm9ybXMubGRiO1xuICAgICAgICB0aWxlV2VpZ2h0UVtUSUxFX1NJWkUgKiBsb2NhbF9pZC55ICsgbG9jYWxfaWQueF0gPSB3ZWlnaHRbYmlhc09mZnNldFEgKyBvZmZzZXRdO1xuICAgICAgICB0aWxlV2VpZ2h0S1tUSUxFX1NJWkUgKiBsb2NhbF9pZC55ICsgbG9jYWxfaWQueF0gPSB3ZWlnaHRbYmlhc09mZnNldEsgKyBvZmZzZXRdO1xuICAgICAgICB0aWxlV2VpZ2h0VltUSUxFX1NJWkUgKiBsb2NhbF9pZC55ICsgbG9jYWxfaWQueF0gPSB3ZWlnaHRbYmlhc09mZnNldFYgKyBvZmZzZXRdO1xuICAgICAgfVxuICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgICAgZm9yICh2YXIgazogdTMyID0gMHU7IGs8VElMRV9TSVpFICYmIHcrayA8IHVuaWZvcm1zLks7IGsrKykge1xuICAgICAgICBsZXQgaW5wdXRUaWxlT2Zmc2V0ID0gVElMRV9TSVpFICogbG9jYWxfaWQueSArIGs7XG4gICAgICAgIGxldCB3ZWlnaHRUaWxlT2Zmc2V0ID0gVElMRV9TSVpFICogayArIGxvY2FsX2lkLng7XG4gICAgICAgIHZhbHVlUSArPSB0aWxlSW5wdXRbaW5wdXRUaWxlT2Zmc2V0XSAqIHRpbGVXZWlnaHRRW3dlaWdodFRpbGVPZmZzZXRdO1xuICAgICAgICB2YWx1ZUsgKz0gdGlsZUlucHV0W2lucHV0VGlsZU9mZnNldF0gKiB0aWxlV2VpZ2h0S1t3ZWlnaHRUaWxlT2Zmc2V0XTtcbiAgICAgICAgdmFsdWVWICs9IHRpbGVJbnB1dFtpbnB1dFRpbGVPZmZzZXRdICogdGlsZVdlaWdodFZbd2VpZ2h0VGlsZU9mZnNldF07XG4gICAgICB9XG5cbiAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcbiAgICB9XG5cbiAgICBsZXQgaGVhZE9mZnNldCA9IChtICogdW5pZm9ybXMuTiArIG4pICUgdW5pZm9ybXMuaGVhZF9zaXplO1xuICAgIHZhbHVlUSArPSBiaWFzW2hlYWRPZmZzZXQgKyBiaWFzT2Zmc2V0UV07XG4gICAgdmFsdWVLICs9IGJpYXNbaGVhZE9mZnNldCArIGJpYXNPZmZzZXRLXTtcbiAgICB2YWx1ZVYgKz0gYmlhc1toZWFkT2Zmc2V0ICsgYmlhc09mZnNldFZdO1xuXG4gICAgbGV0IG9mZnNldCA9IHdvcmtncm91cF9pZC56ICogdW5pZm9ybXMuTSAqIHVuaWZvcm1zLk47XG4gICAgaWYgKG0gPCB1bmlmb3Jtcy5NICYmIG4gPCB1bmlmb3Jtcy5OKSB7XG4gICAgICBsZXQgb3V0cHV0SWR4ID0gb2Zmc2V0ICsgbSAqIHVuaWZvcm1zLk4gKyBuO1xuICAgICAgb3V0cHV0X3Fbb3V0cHV0SWR4XSA9IHZhbHVlUTtcbiAgICAgIG91dHB1dF9rW291dHB1dElkeF0gPSB2YWx1ZUs7XG4gICAgICBvdXRwdXRfdltvdXRwdXRJZHhdID0gdmFsdWVWO1xuICAgIH1cbiAgfWA7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJBdHRlbnRpb25QcmVwYXJlXCIsXG4gICAgICAgICAgICBzaGFkZXJDYWNoZTogeyBpbnB1dERlcGVuZGVuY2llczogW1widHlwZVwiLCBcInR5cGVcIiwgXCJ0eXBlXCJdIH0sXG4gICAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAgeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlLCBncHVEYXRhVHlwZTogMCAvKiBkZWZhdWx0ICovIH0sXG4gICAgICAgICAgICAgICAgeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlLCBncHVEYXRhVHlwZTogMCAvKiBkZWZhdWx0ICovIH0sXG4gICAgICAgICAgICAgICAgeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlLCBncHVEYXRhVHlwZTogMCAvKiBkZWZhdWx0ICovIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogZGlzcGF0Y2gsXG4gICAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBnZXRTaGFkZXJTb3VyY2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaW5wdXRzLCBvdXRwdXRzOiBbLTEsIC0xLCAtMV0gfVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIGF0dGVudGlvbiA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHZhbGlkYXRlQXR0ZW50aW9uSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgY29uc3QgW3EsIGssIHZdID0gcHJlcGFyZShjb250ZXh0LCBwYXJhbXMpO1xuICAgICAgICByZXR1cm4gYXBwbHlBdHRlbnRpb24oXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBxLFxuICAgICAgICAgIGssXG4gICAgICAgICAgdixcbiAgICAgICAgICBjb250ZXh0LmlucHV0c1s0XSxcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBjb250ZXh0LmlucHV0c1s1XSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgYXR0cmlidXRlc1xuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvYmF0Y2gtbm9ybS50c1xuICB2YXIgdmFsaWRhdGVJbnB1dHM1LCBjcmVhdGVCYXRjaE5vcm1JbmZlcmVuY2VQcm9ncmFtSW5mbywgcGFyc2VCYXRjaE5vcm1BdHRyaWJ1dGVzLCBiYXRjaE5vcm07XG4gIHZhciBpbml0X2JhdGNoX25vcm0gPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2JhdGNoLW5vcm0udHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF9lc20oKTtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfdXRpbCgpO1xuICAgICAgaW5pdF9hdHRyaWJ1dGVfd2l0aF9jYWNoZV9rZXkoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICB2YWxpZGF0ZUlucHV0czUgPSAoaW5wdXRzLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYXRjaE5vcm1hbGl6YXRpb24gcmVxdWlyZXMgNSBpbnB1dHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tTaGFwZUVxdWFsID0gKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCByID0gZXhwZWN0ZWQubGVuZ3RoO1xuICAgICAgICAgIGlmIChyICE9PSBhY3R1YWwubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX06IG51bSBkaW1lbnNpb25zICE9ICR7cn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXhwZWN0ZWQuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKHYgIT09IGFjdHVhbFtpXSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX06IGRpbVske2l9XSBkbyBub3QgbWF0Y2hgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGlucHV0c1swXS5kaW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBjb25zdCBzaGFwZSA9IGF0dHJpYnV0ZXMuZm9ybWF0ID09PSBcIk5IV0NcIiA/IGF0dHJpYnV0ZXMuc3BhdGlhbCA/IGlucHV0c1swXS5kaW1zLnNsaWNlKC0xKSA6IGlucHV0c1swXS5kaW1zLnNsaWNlKC0xKS5jb25jYXQoaW5wdXRzWzBdLmRpbXMuc2xpY2UoMSwgaW5wdXRzWzBdLmRpbXMubGVuZ3RoIC0gMSkpIDogaW5wdXRzWzBdLmRpbXMuc2xpY2UoMSwgYXR0cmlidXRlcy5zcGF0aWFsID8gMiA6IHZvaWQgMCk7XG4gICAgICAgICAgY2hlY2tTaGFwZUVxdWFsKGlucHV0c1sxXS5kaW1zLCBzaGFwZSwgXCJJbnZhbGlkIGlucHV0IHNjYWxlXCIpO1xuICAgICAgICAgIGNoZWNrU2hhcGVFcXVhbChpbnB1dHNbMl0uZGltcywgc2hhcGUsIFwiSW52YWxpZCBpbnB1dCBCXCIpO1xuICAgICAgICAgIGNoZWNrU2hhcGVFcXVhbChpbnB1dHNbM10uZGltcywgc2hhcGUsIFwiSW52YWxpZCBpbnB1dCBtZWFuXCIpO1xuICAgICAgICAgIGNoZWNrU2hhcGVFcXVhbChpbnB1dHNbNF0uZGltcywgc2hhcGUsIFwiSW52YWxpZCBpbnB1dCB2YXJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hlY2tTaGFwZUVxdWFsKGlucHV0c1sxXS5kaW1zLCBbMV0sIFwiSW52YWxpZCBpbnB1dCBzY2FsZVwiKTtcbiAgICAgICAgICBjaGVja1NoYXBlRXF1YWwoaW5wdXRzWzJdLmRpbXMsIFsxXSwgXCJJbnZhbGlkIGlucHV0IEJcIik7XG4gICAgICAgICAgY2hlY2tTaGFwZUVxdWFsKGlucHV0c1szXS5kaW1zLCBbMV0sIFwiSW52YWxpZCBpbnB1dCBtZWFuXCIpO1xuICAgICAgICAgIGNoZWNrU2hhcGVFcXVhbChpbnB1dHNbNF0uZGltcywgWzFdLCBcIkludmFsaWQgaW5wdXQgdmFyXCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY3JlYXRlQmF0Y2hOb3JtSW5mZXJlbmNlUHJvZ3JhbUluZm8gPSAoaW5wdXRzLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZXBzaWxvbiwgc3BhdGlhbCwgZm9ybWF0IH0gPSBhdHRyaWJ1dGVzO1xuICAgICAgICBjb25zdCB5U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNwYXRpYWwgPyBnZXRNYXhDb21wb25lbnRzKHlTaGFwZVt5U2hhcGUubGVuZ3RoIC0gMV0pIDogMTtcbiAgICAgICAgY29uc3QgY0NvbXBvbmVudHMgPSBmb3JtYXQgPT09IFwiTkhXQ1wiICYmIHlTaGFwZS5sZW5ndGggPiAxID8gY29tcG9uZW50cyA6IDE7XG4gICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZSh5U2hhcGUpIC8gY29tcG9uZW50cztcbiAgICAgICAgY29uc3QgdXNlU2hhcGVzVW5pZm9ybXMgPSBzcGF0aWFsO1xuICAgICAgICBjb25zdCBzaGFwZU9yUmFuayA9IHVzZVNoYXBlc1VuaWZvcm1zID8geVNoYXBlLmxlbmd0aCA6IHlTaGFwZTtcbiAgICAgICAgY29uc3QgeCA9IGlucHV0VmFyaWFibGUoXCJ4XCIsIGlucHV0c1swXS5kYXRhVHlwZSwgaW5wdXRzWzBdLmRpbXMsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBzY2FsZSA9IGlucHV0VmFyaWFibGUoXCJzY2FsZVwiLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zLCBjQ29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGJpYXMgPSBpbnB1dFZhcmlhYmxlKFwiYmlhc1wiLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLCBjQ29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGlucHV0TWVhbiA9IGlucHV0VmFyaWFibGUoXCJpbnB1dE1lYW5cIiwgaW5wdXRzWzNdLmRhdGFUeXBlLCBpbnB1dHNbM10uZGltcywgY0NvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBpbnB1dFZhciA9IGlucHV0VmFyaWFibGUoXCJpbnB1dFZhclwiLCBpbnB1dHNbNF0uZGF0YVR5cGUsIGlucHV0c1s0XS5kaW1zLCBjQ29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IHkgPSBvdXRwdXRWYXJpYWJsZShcInlcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBzaGFwZU9yUmFuaywgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGNhbGNDT2Zmc2V0ID0gKCkgPT4ge1xuICAgICAgICAgIGxldCBjT2Zmc2V0ID0gXCJcIjtcbiAgICAgICAgICBpZiAoc3BhdGlhbCkge1xuICAgICAgICAgICAgY09mZnNldCA9IGBsZXQgY09mZnNldCA9ICR7eVNoYXBlLmxlbmd0aCA9PT0gMSA/IFwiMHVcIiA6IGZvcm1hdCA9PT0gXCJOSFdDXCIgPyBgb3V0cHV0SW5kaWNlc1ske3lTaGFwZS5sZW5ndGggLSAxfV0gLyAke2NvbXBvbmVudHN9YCA6IFwib3V0cHV0SW5kaWNlc1sxXVwifTtgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSBcIk5DSFdcIikge1xuICAgICAgICAgICAgICBjT2Zmc2V0ID0gYFxuICAgICAgICAgICAgJHt5LmluZGljZXNTZXQoXCJvdXRwdXRJbmRpY2VzXCIsIFwiMFwiLCBcIjBcIil9XG4gICAgICAgICAgICBsZXQgY09mZnNldCA9ICR7eS5pbmRpY2VzVG9PZmZzZXQoXCJvdXRwdXRJbmRpY2VzXCIpfTtgO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY09mZnNldCA9IGB2YXIgY0luZGljZXMgPSAke3NjYWxlLnR5cGUuaW5kaWNlc30oMCk7XG4gICAgICAgICAgICAgICAgICAgICAgIGNJbmRpY2VzWzBdID0gb3V0cHV0SW5kaWNlc1ske3lTaGFwZS5sZW5ndGggLSAxfV07YDtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzY2FsZS5yYW5rOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjT2Zmc2V0ICs9IGBjSW5kaWNlc1ske2l9XSA9IG91dHB1dEluZGljZXNbJHtpfV07YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjT2Zmc2V0ICs9IGBsZXQgY09mZnNldCA9ICR7c2NhbGUuaW5kaWNlc1RvT2Zmc2V0KFwiY0luZGljZXNcIil9O2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjT2Zmc2V0O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnZXRJbmZlcmVuY2VNb2RlU2hhZGVyU291cmNlID0gKGhlbHBlcikgPT4gYFxuICBjb25zdCBlcHNpbG9uID0gJHtlcHNpbG9ufTtcbiAgJHtoZWxwZXIucmVnaXN0ZXJVbmlmb3JtKFwib3V0cHV0U2l6ZVwiLCBcInUzMlwiKS5kZWNsYXJlVmFyaWFibGVzKHgsIHNjYWxlLCBiaWFzLCBpbnB1dE1lYW4sIGlucHV0VmFyLCB5KX1cbiAgJHtoZWxwZXIubWFpblN0YXJ0KCl9XG4gICR7aGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRTaXplXCIpfVxuICAgIHZhciBvdXRwdXRJbmRpY2VzID0gJHt5Lm9mZnNldFRvSW5kaWNlcyhgZ2xvYmFsX2lkeCAqICR7Y29tcG9uZW50c31gKX07XG4gICAgJHtjYWxjQ09mZnNldCgpfVxuICAgIGxldCBzY2FsZSA9ICR7c2NhbGUuZ2V0QnlPZmZzZXQoXCJjT2Zmc2V0XCIpfTtcbiAgICBsZXQgYmlhcyA9ICR7Ymlhcy5nZXRCeU9mZnNldChcImNPZmZzZXRcIil9O1xuICAgIGxldCBpbnB1dE1lYW4gPSAke2lucHV0TWVhbi5nZXRCeU9mZnNldChcImNPZmZzZXRcIil9O1xuICAgIGxldCBpbnB1dFZhciA9ICR7aW5wdXRWYXIuZ2V0QnlPZmZzZXQoXCJjT2Zmc2V0XCIpfTtcbiAgICBsZXQgeCA9ICR7eC5nZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIil9O1xuICAgIGxldCB2YWx1ZSA9ICh4IC0gaW5wdXRNZWFuKSAqIGludmVyc2VTcXJ0KGlucHV0VmFyICsgZXBzaWxvbikgKiBzY2FsZSArIGJpYXM7XG4gICAgJHt5LnNldEJ5T2Zmc2V0KFwiZ2xvYmFsX2lkeFwiLCBcInZhbHVlXCIpfVxuICB9YDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkJhdGNoTm9ybWFsaXphdGlvblwiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgICBoaW50OiBgJHthdHRyaWJ1dGVzLmVwc2lsb259XyR7YXR0cmlidXRlcy5mb3JtYXR9XyR7c3BhdGlhbH1fJHtjb21wb25lbnRzfWAsXG4gICAgICAgICAgICBpbnB1dERlcGVuZGVuY2llczogdXNlU2hhcGVzVW5pZm9ybXMgPyBbXCJyYW5rXCIsIFwidHlwZVwiLCBcInR5cGVcIiwgXCJ0eXBlXCIsIFwidHlwZVwiXSA6IHZvaWQgMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlOiBnZXRJbmZlcmVuY2VNb2RlU2hhZGVyU291cmNlLFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBpbnB1dHNbMF0uZGltcywgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZSB9XSxcbiAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHsgeDogTWF0aC5jZWlsKFxuICAgICAgICAgICAgICBvdXRwdXRTaXplIC8gNjRcbiAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICkgfSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3JtczogdXNlU2hhcGVzVW5pZm9ybXMgPyBbXG4gICAgICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBvdXRwdXRTaXplIH0sXG4gICAgICAgICAgICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKHlTaGFwZSlcbiAgICAgICAgICAgIF0gOiBbXG4gICAgICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBvdXRwdXRTaXplIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHBhcnNlQmF0Y2hOb3JtQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoYXR0cmlidXRlcyk7XG4gICAgICBiYXRjaE5vcm0gPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCB7IGlucHV0cywgb3V0cHV0Q291bnQgfSA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzID0gcGFyc2VCYXRjaE5vcm1BdHRyaWJ1dGVzKHsgLi4uYXR0cmlidXRlcywgb3V0cHV0Q291bnQgfSk7XG4gICAgICAgIGlmIChlbnYyLndlYmdwdS52YWxpZGF0ZUlucHV0Q29udGVudCkge1xuICAgICAgICAgIHZhbGlkYXRlSW5wdXRzNShpbnB1dHMsIHVwZGF0ZWRBdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXR0cmlidXRlcy50cmFpbmluZ01vZGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYXRjaE5vcm1hbGl6YXRpb24gdHJhaW5pbmdNb2RlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQmF0Y2hOb3JtSW5mZXJlbmNlUHJvZ3JhbUluZm8oaW5wdXRzLCB1cGRhdGVkQXR0cmlidXRlcykpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9iaWFzLWFkZC50c1xuICB2YXIgdmFsaWRhdGVJbnB1dHM2LCBjcmVhdGVCaWFzQWRkUHJvZ3JhbUluZm8sIGJpYXNBZGQ7XG4gIHZhciBpbml0X2JpYXNfYWRkID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9iaWFzLWFkZC50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICB2YWxpZGF0ZUlucHV0czYgPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnB1dCBzaG91bGQgaGF2ZSAzIGRpbWVuc2lvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFbMzIwLCA2NDAsIDEyODBdLmluY2x1ZGVzKGlucHV0c1swXS5kaW1zWzJdKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm51bWJlciBvZiBjaGFubmVscyBzaG91bGQgYmUgMzIwLCA2NDAgb3IgMTI4MFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRzWzFdLmRpbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYmlhcyBpcyBleHBlY3RlZCB0byBoYXZlIDEgZGltZW5zaW9uc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRzWzBdLmRpbXNbMl0gIT09IGlucHV0c1sxXS5kaW1zWzBdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibGFzdCBkaW1lbnNpb24gb2YgaW5wdXQgYW5kIGJpYXMgYXJlIG5vdCB0aGUgc2FtZVwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNyZWF0ZUJpYXNBZGRQcm9ncmFtSW5mbyA9IChpbnB1dHMpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgY29uc3QgY2hhbm5lbHMgPSBpbnB1dHNbMF0uZGltc1syXTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKSAvIDQ7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXRzWzBdLmRhdGFUeXBlO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoXCJpbnB1dFwiLCBkYXRhVHlwZSwgb3V0cHV0U2hhcGUsIDQpO1xuICAgICAgICBjb25zdCBiaWFzID0gaW5wdXRWYXJpYWJsZShcImJpYXNcIiwgZGF0YVR5cGUsIFtjaGFubmVsc10sIDQpO1xuICAgICAgICBjb25zdCByZXNpZHVhbCA9IGlucHV0VmFyaWFibGUoXCJyZXNpZHVhbFwiLCBkYXRhVHlwZSwgb3V0cHV0U2hhcGUsIDQpO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcIm91dHB1dFwiLCBkYXRhVHlwZSwgb3V0cHV0U2hhcGUsIDQpO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiBgXG4gIGNvbnN0IGNoYW5uZWxzID0gJHtjaGFubmVsc311IC8gNDtcbiAgJHtzaGFkZXJIZWxwZXIuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgYmlhcywgcmVzaWR1YWwsIG91dHB1dCl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhvdXRwdXRTaXplKX1cbiAgICBsZXQgdmFsdWUgPSAke2lucHV0LmdldEJ5T2Zmc2V0KFwiZ2xvYmFsX2lkeFwiKX1cbiAgICAgICsgJHtiaWFzLmdldEJ5T2Zmc2V0KFwiZ2xvYmFsX2lkeCAlIGNoYW5uZWxzXCIpfSArICR7cmVzaWR1YWwuZ2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIpfTtcbiAgICAke291dHB1dC5zZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIiwgXCJ2YWx1ZVwiKX1cbiAgfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJCaWFzQWRkXCIsXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgIG91dHB1dFNpemUgLyA2NFxuICAgICAgICAgICAgICAvKiB3b3JrZ3JvdXAgc2l6ZSAqL1xuICAgICAgICAgICAgKSB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgYmlhc0FkZCA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzNihjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVCaWFzQWRkUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMpKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3VuYXJ5LW9wLnRzXG4gIHZhciBjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1TaGFkZXIsIGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8sIGFicywgYWNvcywgYWNvc2gsIGFzaW4sIGFzaW5oLCBhdGFuLCBhdGFuaCwgcGFyc2VDYXN0QXR0cmlidXRlcywgY2FzdCwgZ2VuZXJhdGVDbGlwQXR0cmlidXRlc0Zyb21JbnB1dHMsIGNsaXAsIGNlaWwsIGNvcywgY29zaCwgcGFyc2VBbHBoYUF0dHJpYnV0ZXMsIGVsdSwgZXJmSW1wbCwgZXJmLCBleHAsIGZsb29yLCBnZWx1LCBsZWFreVJlbHUsIG5vdCwgbmVnLCByZWNpcHJvY2FsLCByZWx1LCBzaWdtb2lkLCBwYXJzZUhhcmRTaWdtb2lkQXR0cmlidXRlcywgaGFyZFNpZ21vaWQsIHNpbiwgc2luaCwgc3FydCwgdGFuLCB0YW5oRXhwcmVzc2lvbiwgdGFuaCwgZmFzdEdlbHVJbXBsLCBmYXN0R2VsdUV4cHJlc3Npb24sIGZhc3RHZWx1LCB0aHJlc2hvbGRlZFJlbHUsIGxvZztcbiAgdmFyIGluaXRfdW5hcnlfb3AgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3VuYXJ5LW9wLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfdXRpbCgpO1xuICAgICAgaW5pdF9hdHRyaWJ1dGVfd2l0aF9jYWNoZV9rZXkoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICBjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1TaGFkZXIgPSAoc2hhZGVySGVscGVyLCBkYXRhc2l6ZSwgaW5wdXREYXRhVHlwZSwgb3V0cHV0RGF0YVR5cGUsIGZ1bmNDYWxsLCBhZGRpdGlvbmFsSW1wbGVtZW50YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdmVjU2l6ZSA9IE1hdGguY2VpbChkYXRhc2l6ZSAvIDQpO1xuICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IFwiXCI7XG4gICAgICAgIGlmICh0eXBlb2YgZnVuY0NhbGwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBleHByZXNzaW9uID0gYCR7ZnVuY0NhbGx9KGEpYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleHByZXNzaW9uID0gZnVuY0NhbGwoXCJhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZShcImlucHV0RGF0YVwiLCBpbnB1dERhdGFUeXBlLCBbdmVjU2l6ZV0sIDQpO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcIm91dHB1dERhdGFcIiwgb3V0cHV0RGF0YVR5cGUsIFt2ZWNTaXplXSwgNCk7XG4gICAgICAgIHJldHVybiBgXG4gICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oXCJ2ZWNfc2l6ZVwiLCBcInUzMlwiKS5kZWNsYXJlVmFyaWFibGVzKGlucHV0LCBvdXRwdXQpfVxuXG4gICR7YWRkaXRpb25hbEltcGxlbWVudGF0aW9uID8/IFwiXCJ9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhcInVuaWZvcm1zLnZlY19zaXplXCIpfVxuXG4gICAgbGV0IGEgPSAke2lucHV0LmdldEJ5T2Zmc2V0KFwiZ2xvYmFsX2lkeFwiKX07XG4gICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIsIGV4cHJlc3Npb24pfVxuICB9YDtcbiAgICAgIH07XG4gICAgICBjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvID0gKGlucHV0LCBuYW1lLCBmdW5jQ2FsbCwgYWRkaXRpb25hbEltcGxlbWVudGF0aW9uLCBjYWNoZUtleSwgb3V0cHV0RGF0YVR5cGUgPSBpbnB1dC5kYXRhVHlwZSkgPT4gKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2hhZGVyQ2FjaGU6IHsgaGludDogY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbXCJ0eXBlXCJdIH0sXG4gICAgICAgIGdldFNoYWRlclNvdXJjZTogKHNoYWRlckhlbHBlcikgPT4gY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtU2hhZGVyKFxuICAgICAgICAgIHNoYWRlckhlbHBlcixcbiAgICAgICAgICBTaGFwZVV0aWwuc2l6ZShpbnB1dC5kaW1zKSxcbiAgICAgICAgICBpbnB1dC5kYXRhVHlwZSxcbiAgICAgICAgICBvdXRwdXREYXRhVHlwZSxcbiAgICAgICAgICBmdW5jQ2FsbCxcbiAgICAgICAgICBhZGRpdGlvbmFsSW1wbGVtZW50YXRpb25cbiAgICAgICAgKSxcbiAgICAgICAgZ2V0UnVuRGF0YTogKGlucHV0VGVuc29ycykgPT4gKHtcbiAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBpbnB1dC5kaW1zLCBkYXRhVHlwZTogb3V0cHV0RGF0YVR5cGUgfV0sXG4gICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICBTaGFwZVV0aWwuc2l6ZShpbnB1dFRlbnNvcnNbMF0uZGltcykgLyA2NCAvIDRcbiAgICAgICAgICAgIC8qIHZlYyBzaXplICovXG4gICAgICAgICAgKSB9LFxuICAgICAgICAgIHByb2dyYW1Vbmlmb3JtczogW1xuICAgICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IE1hdGguY2VpbChTaGFwZVV0aWwuc2l6ZShpbnB1dC5kaW1zKSAvIDQpIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIGFicyA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBcIkFic1wiLCBcImFic1wiKSk7XG4gICAgICB9O1xuICAgICAgYWNvcyA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBcIkFjb3NcIiwgXCJhY29zXCIpKTtcbiAgICAgIH07XG4gICAgICBhY29zaCA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBcIkFjb3NoXCIsIFwiYWNvc2hcIikpO1xuICAgICAgfTtcbiAgICAgIGFzaW4gPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgXCJBc2luXCIsIFwiYXNpblwiKSk7XG4gICAgICB9O1xuICAgICAgYXNpbmggPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgXCJBc2luaFwiLCBcImFzaW5oXCIpKTtcbiAgICAgIH07XG4gICAgICBhdGFuID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiQXRhblwiLCBcImF0YW5cIikpO1xuICAgICAgfTtcbiAgICAgIGF0YW5oID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiQXRhbmhcIiwgXCJhdGFuaFwiKSk7XG4gICAgICB9O1xuICAgICAgcGFyc2VDYXN0QXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoYXR0cmlidXRlcyk7XG4gICAgICBjYXN0ID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgbGV0IGZ1bmM7XG4gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlcy50bykge1xuICAgICAgICAgIGNhc2UgMTAgLyogZmxvYXQxNiAqLzpcbiAgICAgICAgICAgIGZ1bmMgPSBcInZlYzQ8ZjE2PlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxIC8qIGZsb2F0ICovOlxuICAgICAgICAgICAgZnVuYyA9IFwidmVjNDxmMzI+XCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEyIC8qIHVpbnQzMiAqLzpcbiAgICAgICAgICAgIGZ1bmMgPSBcInZlYzQ8dTMyPlwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA2IC8qIGludDMyICovOlxuICAgICAgICAgICAgZnVuYyA9IFwidmVjNDxpMzI+XCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkgLyogYm9vbCAqLzpcbiAgICAgICAgICAgIGZ1bmMgPSBcInZlYzQ8Ym9vbD5cIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgbm90IHN1cHBvcnRlZCB0eXBlIChzcGVjaWZpZWQgaW4gYXR0cmlidXRlICd0bycgZnJvbSAnQ2FzdCcgb3BlcmF0b3IpOiAke2F0dHJpYnV0ZXMudG99YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiQ2FzdFwiLCBmdW5jLCB2b2lkIDAsIGF0dHJpYnV0ZXMuY2FjaGVLZXksIGF0dHJpYnV0ZXMudG8pXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgZ2VuZXJhdGVDbGlwQXR0cmlidXRlc0Zyb21JbnB1dHMgPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbiA9IGlucHV0cy5sZW5ndGggPj0gMiAmJiBpbnB1dHNbMV0uZGF0YSAhPT0gMCA/IGlucHV0c1sxXS5nZXRGbG9hdDMyQXJyYXkoKVswXSA6IE1JTl9DTElQO1xuICAgICAgICBjb25zdCBtYXggPSBpbnB1dHMubGVuZ3RoID49IDMgJiYgaW5wdXRzWzJdLmRhdGEgIT09IDAgPyBpbnB1dHNbMl0uZ2V0RmxvYXQzMkFycmF5KClbMF0gOiBNQVhfQ0xJUDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7IG1pbiwgbWF4IH0pO1xuICAgICAgfTtcbiAgICAgIGNsaXAgPSAoY29udGV4dCwgY2xpcEF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGNvbnRleHQuaW5wdXRzLmxlbmd0aCA9PT0gMSA/IGNsaXBBdHRyaWJ1dGVzIDogZ2VuZXJhdGVDbGlwQXR0cmlidXRlc0Zyb21JbnB1dHMoY29udGV4dC5pbnB1dHMpO1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgIGNvbnRleHQuaW5wdXRzWzBdLFxuICAgICAgICAgICAgXCJDbGlwXCIsXG4gICAgICAgICAgICAoYSkgPT4gYGNsYW1wKCR7YX0sIGNsaXBfbWluXywgY2xpcF9tYXhfKWAsXG4gICAgICAgICAgICBgXG4gICAgY29uc3QgY2xpcF9taW5fOiB2ZWM0PCR7ZGF0YVR5cGV9PiA9IHZlYzQoJHtkYXRhVHlwZX0oJHthdHRyaWJ1dGVzLm1pbn0pKTtcbiAgICBjb25zdCBjbGlwX21heF86IHZlYzQ8JHtkYXRhVHlwZX0+ID0gdmVjNCgke2RhdGFUeXBlfSgke2F0dHJpYnV0ZXMubWF4fSkpO1xuYCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMuY2FjaGVLZXlcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaW5wdXRzOiBbMF0gfVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIGNlaWwgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgXCJDZWlsXCIsIFwiY2VpbFwiKSk7XG4gICAgICB9O1xuICAgICAgY29zID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiQ29zXCIsIFwiY29zXCIpKTtcbiAgICAgIH07XG4gICAgICBjb3NoID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiQ29zaFwiLCBcImNvc2hcIikpO1xuICAgICAgfTtcbiAgICAgIHBhcnNlQWxwaGFBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleShhdHRyaWJ1dGVzKTtcbiAgICAgIGVsdSA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKFxuICAgICAgICAgIGNvbnRleHQuaW5wdXRzWzBdLFxuICAgICAgICAgIFwiRWx1XCIsXG4gICAgICAgICAgKGEpID0+IGBlbHVfdmYzMigke2F9KWAsXG4gICAgICAgICAgYFxuICBjb25zdCBlbHVfYWxwaGFfID0gJHtkYXRhVHlwZX0oJHthdHRyaWJ1dGVzLmFscGhhfSk7XG5cbiAgZm4gZWx1X2YzMihhOiAke2RhdGFUeXBlfSkgLT4gJHtkYXRhVHlwZX0ge1xuICByZXR1cm4gc2VsZWN0KChleHAoYSkgLSAxLjApICogZWx1X2FscGhhXywgYSwgYSA+PSAwLjApO1xuICB9XG5cbiAgZm4gZWx1X3ZmMzIodjogdmVjNDwke2RhdGFUeXBlfT4pIC0+IHZlYzQ8JHtkYXRhVHlwZX0+IHtcbiAgcmV0dXJuIHZlYzQoZWx1X2YzMih2LngpLCBlbHVfZjMyKHYueSksIGVsdV9mMzIodi56KSwgZWx1X2YzMih2LncpKTtcbiAgfWAsXG4gICAgICAgICAgYXR0cmlidXRlcy5jYWNoZUtleVxuICAgICAgICApKTtcbiAgICAgIH07XG4gICAgICBlcmZJbXBsID0gKHZhclR5cGUgPSBcImYzMlwiKSA9PiBgXG5jb25zdCByMDogJHt2YXJUeXBlfSA9IDAuMzI3NTkxMTtcbmNvbnN0IHIxOiAke3ZhclR5cGV9ID0gMC4yNTQ4Mjk1OTI7XG5jb25zdCByMjogJHt2YXJUeXBlfSA9IC0wLjI4NDQ5NjczNjtcbmNvbnN0IHIzOiAke3ZhclR5cGV9ID0gMS40MjE0MTM3NDE7XG5jb25zdCByNDogJHt2YXJUeXBlfSA9IC0xLjQ1MzE1MjAyNztcbmNvbnN0IHI1OiAke3ZhclR5cGV9ID0gMS4wNjE0MDU0Mjk7XG5cbmZuIGVyZl92ZjMyKHY6IHZlYzQ8JHt2YXJUeXBlfT4pIC0+IHZlYzQ8JHt2YXJUeXBlfT4ge1xuICBsZXQgYWJzdiA9IGFicyh2KTtcbiAgbGV0IHggPSAxLjAgLyAoMS4wICsgcjAgKiBhYnN2KTtcbiAgcmV0dXJuIHNpZ24odikgKiAoMS4wIC0gKCgoKHI1ICogeCArIHI0KSAqIHggKyByMykgKiB4ICsgcjIpICogeCArIHIxKSAqIHggKiBleHAoLWFic3YgKiBhYnN2KSk7XG59YDtcbiAgICAgIGVyZiA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBcIkVyZlwiLCAoYSkgPT4gYGVyZl92ZjMyKCR7YX0pYCwgZXJmSW1wbChkYXRhVHlwZSkpKTtcbiAgICAgIH07XG4gICAgICBleHAgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgXCJFeHBcIiwgXCJleHBcIikpO1xuICAgICAgfTtcbiAgICAgIGZsb29yID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiRmxvb3JcIiwgXCJmbG9vclwiKSk7XG4gICAgICB9O1xuICAgICAgZ2VsdSA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKFxuICAgICAgICAgIGNvbnRleHQuaW5wdXRzWzBdLFxuICAgICAgICAgIFwiR2VsdVwiLFxuICAgICAgICAgIChhKSA9PiBgMC41ICogJHthfSAqICgxLjAgKyBlcmZfdmYzMigke2F9ICogMC43MDcxMDY3ODExODY1NDc1KSlgLFxuICAgICAgICAgIGVyZkltcGwoZGF0YVR5cGUpXG4gICAgICAgICkpO1xuICAgICAgfTtcbiAgICAgIGxlYWt5UmVsdSA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFZhbHVlVHlwZShjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKFxuICAgICAgICAgIGNvbnRleHQuaW5wdXRzWzBdLFxuICAgICAgICAgIFwiTGVha3lSZWx1XCIsXG4gICAgICAgICAgKGEpID0+IGBzZWxlY3QobGVha3lfcmVsdV9hbHBoYV8gKiAke2F9LCAke2F9LCAke2F9ID49IHZlYzQ8JHtkYXRhVHlwZX0+KDAuMCkpYCxcbiAgICAgICAgICBgY29uc3QgbGVha3lfcmVsdV9hbHBoYV8gPSAke2RhdGFUeXBlfSgke2F0dHJpYnV0ZXMuYWxwaGF9KTtgLFxuICAgICAgICAgIGF0dHJpYnV0ZXMuY2FjaGVLZXlcbiAgICAgICAgKSk7XG4gICAgICB9O1xuICAgICAgbm90ID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiTm90XCIsIChhKSA9PiBgISR7YX1gKSk7XG4gICAgICB9O1xuICAgICAgbmVnID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiTmVnXCIsIChhKSA9PiBgLSR7YX1gKSk7XG4gICAgICB9O1xuICAgICAgcmVjaXByb2NhbCA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVFbGVtZW50d2lzZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBcIlJlY2lwcm9jYWxcIiwgKGEpID0+IGAxLjAvJHthfWApKTtcbiAgICAgIH07XG4gICAgICByZWx1ID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsVmFsdWVUeXBlKGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oXG4gICAgICAgICAgY29udGV4dC5pbnB1dHNbMF0sXG4gICAgICAgICAgXCJSZWx1XCIsXG4gICAgICAgICAgKGEpID0+IGBzZWxlY3QodmVjNDwke2RhdGFUeXBlfT4oMC4wKSwgJHthfSwgJHthfSA+IHZlYzQ8JHtkYXRhVHlwZX0+KDAuMCkpYFxuICAgICAgICApKTtcbiAgICAgIH07XG4gICAgICBzaWdtb2lkID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiU2lnbW9pZFwiLCAoYSkgPT4gYCgxLjAgLyAoMS4wICsgZXhwKC0ke2F9KSkpYCkpO1xuICAgICAgfTtcbiAgICAgIHBhcnNlSGFyZFNpZ21vaWRBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleShhdHRyaWJ1dGVzKTtcbiAgICAgIGhhcmRTaWdtb2lkID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsVmFsdWVUeXBlKGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oXG4gICAgICAgICAgY29udGV4dC5pbnB1dHNbMF0sXG4gICAgICAgICAgXCJIYXJkU2lnbW9pZFwiLFxuICAgICAgICAgIChhKSA9PiBgbWF4KHZlYzQ8JHtkYXRhVHlwZX0+KDAuMCksIG1pbih2ZWM0PCR7ZGF0YVR5cGV9PigxLjApLCAke2F0dHJpYnV0ZXMuYWxwaGF9ICogJHthfSArIHZlYzQ8JHtkYXRhVHlwZX0+KCR7YXR0cmlidXRlcy5iZXRhfSkpKWAsXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIGF0dHJpYnV0ZXMuY2FjaGVLZXlcbiAgICAgICAgKSk7XG4gICAgICB9O1xuICAgICAgc2luID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiU2luXCIsIFwic2luXCIpKTtcbiAgICAgIH07XG4gICAgICBzaW5oID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiU2luaFwiLCBcInNpbmhcIikpO1xuICAgICAgfTtcbiAgICAgIHNxcnQgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgXCJTcXJ0XCIsIFwic3FydFwiKSk7XG4gICAgICB9O1xuICAgICAgdGFuID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiVGFuXCIsIFwidGFuXCIpKTtcbiAgICAgIH07XG4gICAgICB0YW5oRXhwcmVzc2lvbiA9IChhKSA9PiBgc2lnbigke2F9KSAqICgxIC0gZXhwKC0yICogYWJzKCR7YX0pKSkgLyAoMSArIGV4cCgtMiAqIGFicygke2F9KSkpYDtcbiAgICAgIHRhbmggPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgXCJUYW5oXCIsIHRhbmhFeHByZXNzaW9uKSk7XG4gICAgICB9O1xuICAgICAgZmFzdEdlbHVJbXBsID0gKHZhclR5cGUgPSBcImYzMlwiKSA9PiBgXG5jb25zdCBmYXN0X2dlbHVfYTogJHt2YXJUeXBlfSA9IDAuNTtcbmNvbnN0IGZhc3RfZ2VsdV9iOiAke3ZhclR5cGV9ID0gMC43OTc4ODQ1NjA4MDI4NjU0O1xuY29uc3QgZmFzdF9nZWx1X2M6ICR7dmFyVHlwZX0gPSAwLjAzNTY3NzQwODEzNjMwMDEyNTtcblxuZm4gdGFuaF92KHY6IHZlYzQ8JHt2YXJUeXBlfT4pIC0+IHZlYzQ8JHt2YXJUeXBlfT4ge1xuICByZXR1cm4gJHt0YW5oRXhwcmVzc2lvbihcInZcIil9O1xufVxuYDtcbiAgICAgIGZhc3RHZWx1RXhwcmVzc2lvbiA9ICh4KSA9PiBgKGZhc3RfZ2VsdV9hICsgZmFzdF9nZWx1X2EgKiB0YW5oX3YoJHt4fSAqIChmYXN0X2dlbHVfYyAqICR7eH0gKiAke3h9ICsgZmFzdF9nZWx1X2IpKSkgKiAke3h9YDtcbiAgICAgIGZhc3RHZWx1ID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsVmFsdWVUeXBlKGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oXG4gICAgICAgICAgY29udGV4dC5pbnB1dHNbMF0sXG4gICAgICAgICAgXCJGYXN0R2VsdVwiLFxuICAgICAgICAgIGZhc3RHZWx1RXhwcmVzc2lvbixcbiAgICAgICAgICBmYXN0R2VsdUltcGwoZGF0YVR5cGUpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZVxuICAgICAgICApKTtcbiAgICAgIH07XG4gICAgICB0aHJlc2hvbGRlZFJlbHUgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUpO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWxlbWVudHdpc2VQcm9ncmFtSW5mbyhcbiAgICAgICAgICBjb250ZXh0LmlucHV0c1swXSxcbiAgICAgICAgICBcIlRocmVzaG9sZGVkUmVsdVwiLFxuICAgICAgICAgIChhKSA9PiBgc2VsZWN0KHZlYzQ8JHtkYXRhVHlwZX0+KDAuMCksICR7YX0sICR7YX0gPiB0aHJlc2hvbGRlZF9yZWx1X2FscGhhXylgLFxuICAgICAgICAgIGBjb25zdCB0aHJlc2hvbGRlZF9yZWx1X2FscGhhXyA9IHZlYzQ8JHtkYXRhVHlwZX0+KCR7YXR0cmlidXRlcy5hbHBoYX0pO2AsXG4gICAgICAgICAgYXR0cmlidXRlcy5jYWNoZUtleVxuICAgICAgICApKTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9O1xuICAgICAgbG9nID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUVsZW1lbnR3aXNlUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIFwiTG9nXCIsIFwibG9nXCIpKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2JpYXMtc3BsaXQtZ2VsdS50c1xuICB2YXIgdmFsaWRhdGVJbnB1dHM3LCBjcmVhdGVCaWFzU3BsaXRHZWx1UHJvZ3JhbUluZm8sIGJpYXNTcGxpdEdlbHU7XG4gIHZhciBpbml0X2JpYXNfc3BsaXRfZ2VsdSA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvYmlhcy1zcGxpdC1nZWx1LnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfdXRpbCgpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIGluaXRfdW5hcnlfb3AoKTtcbiAgICAgIHZhbGlkYXRlSW5wdXRzNyA9IChpbnB1dHMpID0+IHtcbiAgICAgICAgaWYgKGlucHV0c1swXS5kaW1zLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImlucHV0IHNob3VsZCBoYXZlIDMgZGltZW5zaW9uc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIVsyNTYwLCA1MTIwLCAxMDI0MF0uaW5jbHVkZXMoaW5wdXRzWzBdLmRpbXNbMl0pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaGlkZGVuIHN0YXRlIHNob3VsZCBiZSAyNTYwLCA1MTIwIG9yIDEwMjQwXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dHNbMV0uZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiaWFzIGlzIGV4cGVjdGVkIHRvIGhhdmUgMSBkaW1lbnNpb25zXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dHNbMF0uZGltc1syXSAhPT0gaW5wdXRzWzFdLmRpbXNbMF0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsYXN0IGRpbWVuc2lvbiBvZiBpbnB1dCBhbmQgYmlhcyBhcmUgbm90IHRoZSBzYW1lXCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY3JlYXRlQmlhc1NwbGl0R2VsdVByb2dyYW1JbmZvID0gKGlucHV0cykgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zLnNsaWNlKCk7XG4gICAgICAgIG91dHB1dFNoYXBlWzJdID0gb3V0cHV0U2hhcGVbMl0gLyAyO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoXCJpbnB1dFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLCA0KTtcbiAgICAgICAgY29uc3QgYmlhcyA9IGlucHV0VmFyaWFibGUoXCJiaWFzXCIsIGlucHV0c1swXS5kYXRhVHlwZSwgW2lucHV0c1swXS5kaW1zWzJdXSwgNCk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKFwib3V0cHV0XCIsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUsIDQpO1xuICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gNDtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4gYFxuICBjb25zdCBNX1NRUlQyID0gc3FydCgyLjApO1xuICBjb25zdCBoYWxmQ2hhbm5lbHMgPSAke2lucHV0c1swXS5kaW1zWzJdIC8gNCAvIDJ9dTtcblxuICAke3NoYWRlckhlbHBlci5kZWNsYXJlVmFyaWFibGVzKGlucHV0LCBiaWFzLCBvdXRwdXQpfVxuXG4gICR7ZXJmSW1wbChkYXRhVHlwZSl9XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhvdXRwdXRTaXplKX1cbiAgICBsZXQgYmlhc0lkeCA9IGdsb2JhbF9pZHggJSBoYWxmQ2hhbm5lbHM7XG4gICAgbGV0IGJhdGNoSW5kZXggPSBnbG9iYWxfaWR4IC8gaGFsZkNoYW5uZWxzO1xuICAgIGxldCBpbnB1dE9mZnNldCA9IGJpYXNJZHggKyBiYXRjaEluZGV4ICogaGFsZkNoYW5uZWxzICogMjtcbiAgICBsZXQgdmFsdWVMZWZ0ID0gaW5wdXRbaW5wdXRPZmZzZXRdICsgYmlhc1tiaWFzSWR4XTtcbiAgICBsZXQgdmFsdWVSaWdodCA9IGlucHV0W2lucHV0T2Zmc2V0ICsgaGFsZkNoYW5uZWxzXSArIGJpYXNbYmlhc0lkeCArIGhhbGZDaGFubmVsc107XG4gICAgbGV0IGdlbHVSaWdodCA9IHZhbHVlUmlnaHQgKiAwLjUgKiAoZXJmX3ZmMzIodmFsdWVSaWdodCAvIE1fU1FSVDIpICsgMSk7XG5cbiAgICAke291dHB1dC5zZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIiwgXCJ2YWx1ZUxlZnQgKiBnZWx1UmlnaHRcIil9XG4gIH1gO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiQmlhc1NwbGl0R2VsdVwiLFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZSB9XSxcbiAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHsgeDogTWF0aC5jZWlsKFxuICAgICAgICAgICAgICBvdXRwdXRTaXplIC8gNjRcbiAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICkgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGJpYXNTcGxpdEdlbHUgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czcoY29udGV4dC5pbnB1dHMpO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQmlhc1NwbGl0R2VsdVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9iaW5hcnktb3AudHNcbiAgdmFyIGNyZWF0ZUJpbmFyeU9wUHJvZ3JhbVNoYWRlciwgY3JlYXRlQmluYXJ5T3BQcm9ncmFtSW5mbywgcnVuQmluYXJ5T3AsIGFkZCwgZGl2LCBlcXVhbCwgbXVsLCBwb3csIHN1YiwgZ3JlYXRlciwgbGVzcywgZ3JlYXRlck9yRXF1YWwsIGxlc3NPckVxdWFsO1xuICB2YXIgaW5pdF9iaW5hcnlfb3AgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2JpbmFyeS1vcC50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICBjcmVhdGVCaW5hcnlPcFByb2dyYW1TaGFkZXIgPSAoc2hhZGVySGVscGVyLCBkaW1zQSwgZGltc0IsIGRpbXNPdXRwdXQsIHZlY3Rvcml6ZSwgZG9Ccm9hZGNhc3QsIHNoYXJlZERpbWVuc2lvbkRpdmlzaWJsZUJ5NCwgZnVuY0NhbGwsIHR5cGVBLCB0eXBlQiwgdHlwZU91dHB1dCwgYWRkaXRpb25hbEltcGxlbWVudGF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBleHByZXNzaW9uU2NhbGFyO1xuICAgICAgICBsZXQgZXhwcmVzc2lvblZlY3RvcjtcbiAgICAgICAgaWYgKHR5cGVvZiBmdW5jQ2FsbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGV4cHJlc3Npb25TY2FsYXIgPSBleHByZXNzaW9uVmVjdG9yID0gKGEyLCBiMikgPT4gYCR7ZnVuY0NhbGx9KCgke2EyfSksKCR7YjJ9KSlgO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmdW5jQ2FsbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgZXhwcmVzc2lvblNjYWxhciA9IGV4cHJlc3Npb25WZWN0b3IgPSBmdW5jQ2FsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleHByZXNzaW9uU2NhbGFyID0gZnVuY0NhbGwuc2NhbGFyO1xuICAgICAgICAgIGV4cHJlc3Npb25WZWN0b3IgPSBmdW5jQ2FsbC52ZWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXREYXRhXCIsIHR5cGVPdXRwdXQsIGRpbXNPdXRwdXQubGVuZ3RoLCA0KTtcbiAgICAgICAgY29uc3QgYSA9IGlucHV0VmFyaWFibGUoXCJhRGF0YVwiLCB0eXBlQSwgZGltc0EubGVuZ3RoLCA0KTtcbiAgICAgICAgY29uc3QgYiA9IGlucHV0VmFyaWFibGUoXCJiRGF0YVwiLCB0eXBlQiwgZGltc0IubGVuZ3RoLCA0KTtcbiAgICAgICAgbGV0IGFzc2lnbm1lbnQ7XG4gICAgICAgIGlmICh2ZWN0b3JpemUpIHtcbiAgICAgICAgICBpZiAoZG9Ccm9hZGNhc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQU9uZUVsZW1lbnQgPSBTaGFwZVV0aWwuc2l6ZShkaW1zQSkgPT09IDE7XG4gICAgICAgICAgICBjb25zdCBpc0JPbmVFbGVtZW50ID0gU2hhcGVVdGlsLnNpemUoZGltc0IpID09PSAxO1xuICAgICAgICAgICAgY29uc3QgYUxhc3REaW1EaXZpc2libGVCeTQgPSBkaW1zQS5sZW5ndGggPiAwICYmIGRpbXNBW2RpbXNBLmxlbmd0aCAtIDFdICUgNCA9PT0gMDtcbiAgICAgICAgICAgIGNvbnN0IGJMYXN0RGltRGl2aXNpYmxlQnk0ID0gZGltc0IubGVuZ3RoID4gMCAmJiBkaW1zQltkaW1zQi5sZW5ndGggLSAxXSAlIDQgPT09IDA7XG4gICAgICAgICAgICBpZiAoaXNBT25lRWxlbWVudCB8fCBpc0JPbmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgIGFzc2lnbm1lbnQgPSBvdXRwdXQuc2V0QnlPZmZzZXQoXG4gICAgICAgICAgICAgICAgXCJnbG9iYWxfaWR4XCIsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvblZlY3RvcihcbiAgICAgICAgICAgICAgICAgIGlzQU9uZUVsZW1lbnQgPyBgJHthLnR5cGUudmFsdWV9KCR7YS5nZXRCeU9mZnNldChcIjBcIil9LngpYCA6IGEuZ2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIpLFxuICAgICAgICAgICAgICAgICAgaXNCT25lRWxlbWVudCA/IGAke2IudHlwZS52YWx1ZX0oJHtiLmdldEJ5T2Zmc2V0KFwiMFwiKX0ueClgIDogYi5nZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgICAgICAgbGV0IG91dHB1dEluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoXCJnbG9iYWxfaWR4ICogNHVcIil9O1xuICAgICAgICAgICAgbGV0IG9mZnNldEEgPSAke2EuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoXCJvdXRwdXRJbmRpY2VzXCIsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldEIgPSAke2IuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoXCJvdXRwdXRJbmRpY2VzXCIsIG91dHB1dCl9O1xuICAgICAgICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXG4gICAgICAgICAgICAgICAgXCJnbG9iYWxfaWR4XCIsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvblZlY3RvcihcbiAgICAgICAgICAgICAgICAgIHNoYXJlZERpbWVuc2lvbkRpdmlzaWJsZUJ5NCB8fCBhTGFzdERpbURpdmlzaWJsZUJ5NCA/IGEuZ2V0QnlPZmZzZXQoXCJvZmZzZXRBIC8gNHVcIikgOiBgJHthLnR5cGUudmFsdWV9KCR7YS5nZXRCeU9mZnNldChcIm9mZnNldEEgLyA0dVwiKX1bb2Zmc2V0QSAlIDR1XSlgLFxuICAgICAgICAgICAgICAgICAgc2hhcmVkRGltZW5zaW9uRGl2aXNpYmxlQnk0IHx8IGJMYXN0RGltRGl2aXNpYmxlQnk0ID8gYi5nZXRCeU9mZnNldChcIm9mZnNldEIgLyA0dVwiKSA6IGAke2IudHlwZS52YWx1ZX0oJHtiLmdldEJ5T2Zmc2V0KFwib2Zmc2V0QiAvIDR1XCIpfVtvZmZzZXRCICUgNHVdKWBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzaWdubWVudCA9IG91dHB1dC5zZXRCeU9mZnNldChcbiAgICAgICAgICAgICAgXCJnbG9iYWxfaWR4XCIsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb25WZWN0b3IoYS5nZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIiksIGIuZ2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFkb0Jyb2FkY2FzdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gbmVjZXNzYXJ5IHRvIHVzZSBzY2FsYXIgaW1wbGVtZW50YXRpb24gZm9yIGVsZW1lbnQtd2lzZSBiaW5hcnkgb3AgaW1wbGVtZW50YXRpb24uXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzaW5nbGVBc3NpZ25tZW50ID0gKHJlc1N0ciwgeCwgdHlwZUNhc3QgPSBcIlwiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9uQSA9IGBhRGF0YVtpbmRleEEke3h9XVtjb21wb25lbnRBJHt4fV1gO1xuICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbkIgPSBgYkRhdGFbaW5kZXhCJHt4fV1bY29tcG9uZW50QiR7eH1dYDtcbiAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICBsZXQgb3V0cHV0SW5kaWNlcyR7eH0gPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoYGdsb2JhbF9pZHggKiA0dSArICR7eH11YCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldEEke3h9ID0gJHthLmJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0KGBvdXRwdXRJbmRpY2VzJHt4fWAsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldEIke3h9ID0gJHtiLmJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0KGBvdXRwdXRJbmRpY2VzJHt4fWAsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IGluZGV4QSR7eH0gPSBvZmZzZXRBJHt4fSAvIDR1O1xuICAgICAgICAgICAgbGV0IGluZGV4QiR7eH0gPSBvZmZzZXRCJHt4fSAvIDR1O1xuICAgICAgICAgICAgbGV0IGNvbXBvbmVudEEke3h9ID0gb2Zmc2V0QSR7eH0gJSA0dTtcbiAgICAgICAgICAgIGxldCBjb21wb25lbnRCJHt4fSA9IG9mZnNldEIke3h9ICUgNHU7XG4gICAgICAgICAgICAke3Jlc1N0cn1bJHt4fV0gPSAke3R5cGVDYXN0fSgke2V4cHJlc3Npb25TY2FsYXIoZXhwcmVzc2lvbkEsIGV4cHJlc3Npb25CKX0pO1xuICAgICAgICAgIGA7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodHlwZU91dHB1dCA9PT0gOSAvKiBib29sICovKSB7XG4gICAgICAgICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgICAgICAgdmFyIGRhdGEgPSB2ZWM0PHUzMj4oMCk7XG4gICAgICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoXCJkYXRhXCIsIDAsIFwidTMyXCIpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KFwiZGF0YVwiLCAxLCBcInUzMlwiKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudChcImRhdGFcIiwgMiwgXCJ1MzJcIil9XG4gICAgICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoXCJkYXRhXCIsIDMsIFwidTMyXCIpfVxuICAgICAgICAgICAgb3V0cHV0RGF0YVtnbG9iYWxfaWR4XSA9IGRvdCh2ZWM0PHUzMj4oMHgxLCAweDEwMCwgMHgxMDAwMCwgMHgxMDAwMDAwKSwgdmVjNDx1MzI+KGRhdGEpKTtgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KFwib3V0cHV0RGF0YVtnbG9iYWxfaWR4XVwiLCAwKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudChcIm91dHB1dERhdGFbZ2xvYmFsX2lkeF1cIiwgMSl9XG4gICAgICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoXCJvdXRwdXREYXRhW2dsb2JhbF9pZHhdXCIsIDIpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KFwib3V0cHV0RGF0YVtnbG9iYWxfaWR4XVwiLCAzKX1cbiAgICAgICAgICBgO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFxuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oXCJ2ZWNfc2l6ZVwiLCBcInUzMlwiKS5kZWNsYXJlVmFyaWFibGVzKGEsIGIsIG91dHB1dCl9XG5cbiAgICAgICAgJHthZGRpdGlvbmFsSW1wbGVtZW50YXRpb24gPz8gXCJcIn1cblxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhcInVuaWZvcm1zLnZlY19zaXplXCIpfVxuICAgICAgICAke2Fzc2lnbm1lbnR9XG4gICAgICB9YDtcbiAgICAgIH07XG4gICAgICBjcmVhdGVCaW5hcnlPcFByb2dyYW1JbmZvID0gKG5hbWUsIGNhY2hlS2V5LCBhLCBiLCBmdW5jQ2FsbCwgYWRkaXRpb25hbEltcGxlbWVudGF0aW9uLCBvdXRwdXREYXRhVHlwZSA9IGEuZGF0YVR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgaXNCcm9hZGNhc3QgPSAhU2hhcGVVdGlsLmFyZUVxdWFsKGEuZGltcywgYi5kaW1zKTtcbiAgICAgICAgbGV0IG91dHB1dFNoYXBlID0gYS5kaW1zO1xuICAgICAgICBsZXQgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKGEuZGltcyk7XG4gICAgICAgIGxldCB2ZWN0b3JpemUgPSBmYWxzZTtcbiAgICAgICAgbGV0IHNoYXJlZERpbWVuc2lvbkRpdmlzaWJsZUJ5NCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjYWNoZUtleUF1eCA9IFtpc0Jyb2FkY2FzdF07XG4gICAgICAgIGlmIChpc0Jyb2FkY2FzdCkge1xuICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTaGFwZSA9IEJyb2FkY2FzdFV0aWwuY2FsY1NoYXBlKGEuZGltcywgYi5kaW1zLCBmYWxzZSk7XG4gICAgICAgICAgaWYgKCFjYWxjdWxhdGVkU2hhcGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHBlcmZvcm0gYmluYXJ5IG9wIG9uIHRoZSBnaXZlbiB0ZW5zb3JzXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXRwdXRTaGFwZSA9IGNhbGN1bGF0ZWRTaGFwZTtcbiAgICAgICAgICBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgICAgIGNvbnN0IGlzQU9uZUVsZW1lbnQgPSBTaGFwZVV0aWwuc2l6ZShhLmRpbXMpID09PSAxO1xuICAgICAgICAgIGNvbnN0IGlzQk9uZUVsZW1lbnQgPSBTaGFwZVV0aWwuc2l6ZShiLmRpbXMpID09PSAxO1xuICAgICAgICAgIGNvbnN0IGFMYXN0RGltRGl2aXNpYmxlQnk0ID0gYS5kaW1zLmxlbmd0aCA+IDAgJiYgYS5kaW1zW2EuZGltcy5sZW5ndGggLSAxXSAlIDQgPT09IDA7XG4gICAgICAgICAgY29uc3QgYkxhc3REaW1EaXZpc2libGVCeTQgPSBiLmRpbXMubGVuZ3RoID4gMCAmJiBiLmRpbXNbYi5kaW1zLmxlbmd0aCAtIDFdICUgNCA9PT0gMDtcbiAgICAgICAgICBjYWNoZUtleUF1eC5wdXNoKGlzQU9uZUVsZW1lbnQpO1xuICAgICAgICAgIGNhY2hlS2V5QXV4LnB1c2goaXNCT25lRWxlbWVudCk7XG4gICAgICAgICAgY2FjaGVLZXlBdXgucHVzaChhTGFzdERpbURpdmlzaWJsZUJ5NCk7XG4gICAgICAgICAgY2FjaGVLZXlBdXgucHVzaChiTGFzdERpbURpdmlzaWJsZUJ5NCk7XG4gICAgICAgICAgbGV0IHNoYXJlZERpbWVuc2lvbiA9IDE7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvdXRwdXRTaGFwZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGltQSA9IGEuZGltc1thLmRpbXMubGVuZ3RoIC0gaV0gPz8gMTtcbiAgICAgICAgICAgIGNvbnN0IGRpbUIgPSBiLmRpbXNbYi5kaW1zLmxlbmd0aCAtIGldID8/IDE7XG4gICAgICAgICAgICBpZiAoZGltQSA9PT0gZGltQikge1xuICAgICAgICAgICAgICBzaGFyZWREaW1lbnNpb24gKj0gZGltQTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2hhcmVkRGltZW5zaW9uICUgNCA9PT0gMCkge1xuICAgICAgICAgICAgc2hhcmVkRGltZW5zaW9uRGl2aXNpYmxlQnk0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHZlY3Rvcml6ZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0FPbmVFbGVtZW50IHx8IGlzQk9uZUVsZW1lbnQgfHwgYUxhc3REaW1EaXZpc2libGVCeTQgfHwgYkxhc3REaW1EaXZpc2libGVCeTQpIHtcbiAgICAgICAgICAgIHZlY3Rvcml6ZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZlY3Rvcml6ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY2FjaGVLZXlBdXgucHVzaCh2ZWN0b3JpemUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc2hhZGVyQ2FjaGU6IHtcbiAgICAgICAgICAgIGhpbnQ6IGNhY2hlS2V5ICsgY2FjaGVLZXlBdXgubWFwKCh4KSA9PiB4LnRvU3RyaW5nKCkpLmpvaW4oXCJfXCIpLFxuICAgICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXM6IFtcInJhbmtcIiwgXCJyYW5rXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2U6IChzaGFkZXJIZWxwZXIpID0+IGNyZWF0ZUJpbmFyeU9wUHJvZ3JhbVNoYWRlcihcbiAgICAgICAgICAgIHNoYWRlckhlbHBlcixcbiAgICAgICAgICAgIGEuZGltcyxcbiAgICAgICAgICAgIGIuZGltcyxcbiAgICAgICAgICAgIG91dHB1dFNoYXBlLFxuICAgICAgICAgICAgdmVjdG9yaXplLFxuICAgICAgICAgICAgaXNCcm9hZGNhc3QsXG4gICAgICAgICAgICBzaGFyZWREaW1lbnNpb25EaXZpc2libGVCeTQsXG4gICAgICAgICAgICBmdW5jQ2FsbCxcbiAgICAgICAgICAgIGEuZGF0YVR5cGUsXG4gICAgICAgICAgICBiLmRhdGFUeXBlLFxuICAgICAgICAgICAgb3V0cHV0RGF0YVR5cGUsXG4gICAgICAgICAgICBhZGRpdGlvbmFsSW1wbGVtZW50YXRpb25cbiAgICAgICAgICApLFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IG91dHB1dERhdGFUeXBlIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgIG91dHB1dFNpemUgLyA2NCAvIDRcbiAgICAgICAgICAgICAgLyogY29tcG9uZW50IHNpemUgKi9cbiAgICAgICAgICAgICkgfSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3JtczogW1xuICAgICAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogTWF0aC5jZWlsKFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKSAvIDQpIH0sXG4gICAgICAgICAgICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGEuZGltcywgYi5kaW1zLCBvdXRwdXRTaGFwZSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJ1bkJpbmFyeU9wID0gKGNvbnRleHQsIG5hbWUsIGZ1bmNDYWxsLCBhZGRpdGlvbmFsSW1wbGVtZW50YXRpb24sIGNhY2hlS2V5LCBvdXRwdXREYXRhVHlwZSkgPT4ge1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQmluYXJ5T3BQcm9ncmFtSW5mbyhcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGNhY2hlS2V5ID8/IFwiXCIsXG4gICAgICAgICAgY29udGV4dC5pbnB1dHNbMF0sXG4gICAgICAgICAgY29udGV4dC5pbnB1dHNbMV0sXG4gICAgICAgICAgZnVuY0NhbGwsXG4gICAgICAgICAgYWRkaXRpb25hbEltcGxlbWVudGF0aW9uLFxuICAgICAgICAgIG91dHB1dERhdGFUeXBlXG4gICAgICAgICkpO1xuICAgICAgfTtcbiAgICAgIGFkZCA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIHJ1bkJpbmFyeU9wKGNvbnRleHQsIFwiQWRkXCIsIChhLCBiKSA9PiBgJHthfSske2J9YCk7XG4gICAgICB9O1xuICAgICAgZGl2ID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgcnVuQmluYXJ5T3AoY29udGV4dCwgXCJEaXZcIiwgKGEsIGIpID0+IGAke2F9LyR7Yn1gKTtcbiAgICAgIH07XG4gICAgICBlcXVhbCA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIHJ1bkJpbmFyeU9wKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgXCJFcXVhbFwiLFxuICAgICAgICAgIHsgc2NhbGFyOiAoYSwgYikgPT4gYHUzMigke2F9PT0ke2J9KWAsIHZlY3RvcjogKGEsIGIpID0+IGB2ZWM0PHUzMj4oJHthfT09JHtifSlgIH0sXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICA5IC8qIGJvb2wgKi9cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBtdWwgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBydW5CaW5hcnlPcChjb250ZXh0LCBcIk11bFwiLCAoYSwgYikgPT4gYCR7YX0qJHtifWApO1xuICAgICAgfTtcbiAgICAgIHBvdyA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBpbnB1dFZhcmlhYmxlKFwiaW5wdXRcIiwgY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXMpLnR5cGUudmFsdWU7XG4gICAgICAgIGNvbnN0IHJvdW5kU3RyID0gdHlwZSA9PT0gXCJpMzJcIiA/IFwicm91bmRcIiA6IFwiXCI7XG4gICAgICAgIHJ1bkJpbmFyeU9wKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgXCJQb3dcIixcbiAgICAgICAgICB7IHNjYWxhcjogKGEsIGIpID0+IGBwb3dfY3VzdG9tKCR7YX0sJHtifSlgLCB2ZWN0b3I6IChhLCBiKSA9PiBgcG93X3ZlY3Rvcl9jdXN0b20oJHthfSwke2J9KWAgfSxcbiAgICAgICAgICBgXG4gICAgZm4gcG93X2N1c3RvbShhIDogJHt0eXBlfSwgYiA6ICR7dHlwZX0pIC0+ICR7dHlwZX0ge1xuICAgICAgaWYgKGIgPT0gJHt0eXBlfSgwLjApKSB7XG4gICAgICAgIHJldHVybiAke3R5cGV9KDEuMCk7XG4gICAgICB9IGVsc2UgaWYgKGEgPCAke3R5cGV9KDAuMCkgJiYgZjMyKGIpICE9IGZsb29yKGYzMihiKSkpIHtcbiAgICAgICAgcmV0dXJuICR7dHlwZX0ocG93KGYzMihhKSwgZjMyKGIpKSk7IC8vIE5hTlxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGVjdChzaWduKGEpLCAke3R5cGV9KDEuMCksIHJvdW5kKGYzMihhYnMoYikgJSAke3R5cGV9KDIuMCkpKSAhPSAxLjApICogJHt0eXBlfSgke3JvdW5kU3RyfShwb3coZjMyKGFicyhhKSksIGYzMihiKSkpKTtcbiAgICB9XG4gICAgZm4gcG93X3ZlY3Rvcl9jdXN0b20oYSA6IHZlYzQ8JHt0eXBlfT4sIGIgOiB2ZWM0PCR7dHlwZX0+KSAtPiB2ZWM0PCR7dHlwZX0+IHtcbiAgICAgIC8vIFRPRE86IGltcGxlbWVudCB2ZWN0b3JpemVkIHBvd1xuICAgICAgcmV0dXJuIHZlYzQ8JHt0eXBlfT4ocG93X2N1c3RvbShhLngsIGIueCksIHBvd19jdXN0b20oYS55LCBiLnkpLCBwb3dfY3VzdG9tKGEueiwgYi56KSwgcG93X2N1c3RvbShhLncsIGIudykpO1xuICAgIH1cbiAgICAgIGBcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBzdWIgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBydW5CaW5hcnlPcChjb250ZXh0LCBcIlN1YlwiLCAoYSwgYikgPT4gYCR7YX0tJHtifWApO1xuICAgICAgfTtcbiAgICAgIGdyZWF0ZXIgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBydW5CaW5hcnlPcChcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIFwiR3JlYXRlclwiLFxuICAgICAgICAgIHsgc2NhbGFyOiAoYSwgYikgPT4gYHUzMigke2F9PiR7Yn0pYCwgdmVjdG9yOiAoYSwgYikgPT4gYHZlYzQ8dTMyPigke2F9PiR7Yn0pYCB9LFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgOSAvKiBib29sICovXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgbGVzcyA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIHJ1bkJpbmFyeU9wKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgXCJMZXNzXCIsXG4gICAgICAgICAgeyBzY2FsYXI6IChhLCBiKSA9PiBgdTMyKCR7YX08JHtifSlgLCB2ZWN0b3I6IChhLCBiKSA9PiBgdmVjNDx1MzI+KCR7YX08JHtifSlgIH0sXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICA5IC8qIGJvb2wgKi9cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBncmVhdGVyT3JFcXVhbCA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIHJ1bkJpbmFyeU9wKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgXCJHcmVhdGVyT3JFcXVhbFwiLFxuICAgICAgICAgIHsgc2NhbGFyOiAoYSwgYikgPT4gYHUzMigke2F9Pj0ke2J9KWAsIHZlY3RvcjogKGEsIGIpID0+IGB2ZWM0PHUzMj4oJHthfT49JHtifSlgIH0sXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICA5IC8qIGJvb2wgKi9cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBsZXNzT3JFcXVhbCA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIHJ1bkJpbmFyeU9wKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgXCJMZXNzT3JFcXVhbFwiLFxuICAgICAgICAgIHsgc2NhbGFyOiAoYSwgYikgPT4gYHUzMigke2F9PD0ke2J9KWAsIHZlY3RvcjogKGEsIGIpID0+IGB2ZWM0PHUzMj4oJHthfTw9JHtifSlgIH0sXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICA5IC8qIGJvb2wgKi9cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2Z1c2UtdXRpbHMudHNcbiAgdmFyIGdldEFjdGl2YXRpb25TbmlwcGV0LCBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhLCBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXMsIHBhcnNlSW50ZXJuYWxBY3RpdmF0aW9uQXR0cmlidXRlcztcbiAgdmFyIGluaXRfZnVzZV91dGlscyA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvZnVzZS11dGlscy50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGdldEFjdGl2YXRpb25TbmlwcGV0ID0gKGF0dHJpYnV0ZXMsIHZhbHVlVHlwZSwgYmFzZVR5cGUgPSBcImYzMlwiKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlcy5hY3RpdmF0aW9uKSB7XG4gICAgICAgICAgY2FzZSBcIlJlbHVcIjpcbiAgICAgICAgICAgIHJldHVybiBgdmFsdWUgPSBtYXgodmFsdWUsICR7dmFsdWVUeXBlfSgwLjApKTtgO1xuICAgICAgICAgIGNhc2UgXCJTaWdtb2lkXCI6XG4gICAgICAgICAgICByZXR1cm4gYHZhbHVlID0gKCR7dmFsdWVUeXBlfSgxLjApIC8gKCR7dmFsdWVUeXBlfSgxLjApICsgZXhwKC12YWx1ZSkpKTtgO1xuICAgICAgICAgIGNhc2UgXCJDbGlwXCI6XG4gICAgICAgICAgICByZXR1cm4gYHZhbHVlID0gY2xhbXAodmFsdWUsICR7dmFsdWVUeXBlfSgke2Jhc2VUeXBlfSh1bmlmb3Jtcy5jbGlwX21pbikpLCAke3ZhbHVlVHlwZX0oJHtiYXNlVHlwZX0odW5pZm9ybXMuY2xpcF9tYXgpKSk7YDtcbiAgICAgICAgICBjYXNlIFwiSGFyZFNpZ21vaWRcIjpcbiAgICAgICAgICAgIHJldHVybiBgdmFsdWUgPSBtYXgoJHt2YWx1ZVR5cGV9KDAuMCksIG1pbigke3ZhbHVlVHlwZX0oMS4wKSwgJHtiYXNlVHlwZX0odW5pZm9ybXMuYWxwaGEpICogdmFsdWUgKyAke2Jhc2VUeXBlfSh1bmlmb3Jtcy5iZXRhKSkpO2A7XG4gICAgICAgICAgY2FzZSBcIkxlYWt5UmVsdVwiOlxuICAgICAgICAgICAgcmV0dXJuIGB2YWx1ZSA9IHNlbGVjdCgke2Jhc2VUeXBlfSh1bmlmb3Jtcy5hbHBoYSkgKiB2YWx1ZSwgdmFsdWUsIHZhbHVlID49ICR7dmFsdWVUeXBlfSgwLjApKTtgO1xuICAgICAgICAgIGNhc2UgXCJcIjpcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGFjdGl2YXRpb24gJHthdHRyaWJ1dGVzLmFjdGl2YXRpb259YCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhID0gKGF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3JtKSA9PiB7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLmFjdGl2YXRpb24gPT09IFwiQ2xpcFwiKSB7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm0ucHVzaChcbiAgICAgICAgICAgIHsgdHlwZTogMSAvKiBmbG9hdCAqLywgZGF0YTogYXR0cmlidXRlcy5jbGlwTWF4IH0sXG4gICAgICAgICAgICB7IHR5cGU6IDEgLyogZmxvYXQgKi8sIGRhdGE6IGF0dHJpYnV0ZXMuY2xpcE1pbiB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLmFjdGl2YXRpb24gPT09IFwiSGFyZFNpZ21vaWRcIikge1xuICAgICAgICAgIHByb2dyYW1Vbmlmb3JtLnB1c2goXG4gICAgICAgICAgICB7IHR5cGU6IDEgLyogZmxvYXQgKi8sIGRhdGE6IGF0dHJpYnV0ZXMuYWxwaGEgfSxcbiAgICAgICAgICAgIHsgdHlwZTogMSAvKiBmbG9hdCAqLywgZGF0YTogYXR0cmlidXRlcy5iZXRhIH1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuYWN0aXZhdGlvbiA9PT0gXCJMZWFreVJlbHVcIikge1xuICAgICAgICAgIHByb2dyYW1Vbmlmb3JtLnB1c2goeyB0eXBlOiAxIC8qIGZsb2F0ICovLCBkYXRhOiBhdHRyaWJ1dGVzLmFscGhhIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zID0gKGF0dHJpYnV0ZXMsIHVuaWZvcm1zKSA9PiB7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLmFjdGl2YXRpb24gPT09IFwiQ2xpcFwiKSB7XG4gICAgICAgICAgdW5pZm9ybXMucHVzaCh7IG5hbWU6IFwiY2xpcF9tYXhcIiwgdHlwZTogXCJmMzJcIiB9LCB7IG5hbWU6IFwiY2xpcF9taW5cIiwgdHlwZTogXCJmMzJcIiB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLmFjdGl2YXRpb24gPT09IFwiSGFyZFNpZ21vaWRcIikge1xuICAgICAgICAgIHVuaWZvcm1zLnB1c2goeyBuYW1lOiBcImFscGhhXCIsIHR5cGU6IFwiZjMyXCIgfSwgeyBuYW1lOiBcImJldGFcIiwgdHlwZTogXCJmMzJcIiB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLmFjdGl2YXRpb24gPT09IFwiTGVha3lSZWx1XCIpIHtcbiAgICAgICAgICB1bmlmb3Jtcy5wdXNoKHsgbmFtZTogXCJhbHBoYVwiLCB0eXBlOiBcImYzMlwiIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcGFyc2VJbnRlcm5hbEFjdGl2YXRpb25BdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aXZhdGlvbiA9IGF0dHJpYnV0ZXM/LmFjdGl2YXRpb24gfHwgXCJcIjtcbiAgICAgICAgaWYgKGFjdGl2YXRpb24gPT09IFwiSGFyZFNpZ21vaWRcIikge1xuICAgICAgICAgIGNvbnN0IFthbHBoYSwgYmV0YV0gPSBhdHRyaWJ1dGVzPy5hY3RpdmF0aW9uX3BhcmFtcyB8fCBbMC4yLCAwLjVdO1xuICAgICAgICAgIHJldHVybiB7IGFjdGl2YXRpb24sIGFscGhhLCBiZXRhIH07XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aXZhdGlvbiA9PT0gXCJDbGlwXCIpIHtcbiAgICAgICAgICBjb25zdCBbY2xpcE1pbiwgY2xpcE1heF0gPSBhdHRyaWJ1dGVzPy5hY3RpdmF0aW9uX3BhcmFtcyB8fCBbTUlOX0NMSVAsIE1BWF9DTElQXTtcbiAgICAgICAgICByZXR1cm4geyBhY3RpdmF0aW9uLCBjbGlwTWF4LCBjbGlwTWluIH07XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aXZhdGlvbiA9PT0gXCJMZWFreVJlbHVcIikge1xuICAgICAgICAgIGNvbnN0IFthbHBoYV0gPSBhdHRyaWJ1dGVzPy5hY3RpdmF0aW9uX3BhcmFtcyB8fCBbMC4wMV07XG4gICAgICAgICAgcmV0dXJuIHsgYWN0aXZhdGlvbiwgYWxwaGEgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBhY3RpdmF0aW9uIH07XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy8zcmQtcGFydHkvYWN0aXZhdGlvbl91dGlsLnRzXG4gIHZhciB0eXBlU25pcHBldCwgYmlhc1NuaXBwZXQ7XG4gIHZhciBpbml0X2FjdGl2YXRpb25fdXRpbCA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L2FjdGl2YXRpb25fdXRpbC50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICB0eXBlU25pcHBldCA9IChjb21wb25lbnQsIGRhdGFUeXBlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIGRhdGFUeXBlO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiBgdmVjMjwke2RhdGFUeXBlfT5gO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiBgdmVjMzwke2RhdGFUeXBlfT5gO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiBgdmVjNDwke2RhdGFUeXBlfT5gO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y29tcG9uZW50fS1jb21wb25lbnQgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGJpYXNTbmlwcGV0ID0gKGhhc0JpYXMpID0+IGBcbiAgICAgICR7aGFzQmlhcyA/IFwidmFsdWUgPSB2YWx1ZSArIGdldEJpYXNCeU91dHB1dENvb3Jkcyhjb29yZHMpO1wiIDogXCJcIn1cbiAgICAgIGA7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzLzNyZC1wYXJ0eS9jb252X3V0aWwudHNcbiAgdmFyIHV0aWxGdW5jdGlvbnM7XG4gIHZhciBpbml0X2NvbnZfdXRpbCA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L2NvbnZfdXRpbC50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICB1dGlsRnVuY3Rpb25zID0gKHN0cmlkZVN0cikgPT4gYFxuZm4gZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmRzIDogdmVjNDxpMzI+LCBzaGFwZSA6IHZlYzQ8aTMyPikgLT4gaTMyIHtcbiAgcmV0dXJuIGRvdChjb29yZHMsIHZlYzQ8aTMyPihcbiAgICAgIHNoYXBlLnkgKiBzaGFwZS56ICogc2hhcGUudywgc2hhcGUueiAqIHNoYXBlLncsIHNoYXBlLncsIDEpKTtcbn1cbmZuIGdldE91dHB1dEluZGV4RnJvbUNvb3Jkcyhjb29yZHMgOiB2ZWM0PGkzMj4pIC0+IGkzMiB7XG4gIHJldHVybiBkb3QoY29vcmRzLCB2ZWM0PGkzMj4oXG4gICAgaTMyKCR7c3RyaWRlU3RyfS54KSwgaTMyKCR7c3RyaWRlU3RyfS55KSwgaTMyKCR7c3RyaWRlU3RyfS56KSwgMSkpO1xufVxuYDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L21hdG11bF9wYWNrZWRfd2ViZ3B1LnRzXG4gIHZhciB3cml0ZURhdGFUb1N1YkFWZWM0U25pcHBldCwgY2FsY3VsYXRlUmVzdWx0U25pcHBldCwgbWFrZU1hdE11bFBhY2tlZFZlYzRTb3VyY2UsIHdyaXRlRGF0YVRvU3ViQVNuaXBwZXQsIHJlYWREYXRhRnJvbVN1YkFTbmlwcGV0LCBtYWtlTWF0TXVsUGFja2VkU291cmNlLCBtYXRNdWxSZWFkV3JpdGVGblNvdXJjZSwgY3JlYXRlTWF0bXVsUHJvZ3JhbUluZm87XG4gIHZhciBpbml0X21hdG11bF9wYWNrZWRfd2ViZ3B1ID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy8zcmQtcGFydHkvbWF0bXVsX3BhY2tlZF93ZWJncHUudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgaW5pdF9mdXNlX3V0aWxzKCk7XG4gICAgICBpbml0X2FjdGl2YXRpb25fdXRpbCgpO1xuICAgICAgd3JpdGVEYXRhVG9TdWJBVmVjNFNuaXBwZXQgPSAodHJhbnNwb3NlMiwgYmF0Y2hEaW1zKSA9PiB7XG4gICAgICAgIGlmICh0cmFuc3Bvc2UyKSB7XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgbW1fQXN1YltpbnB1dFJvd11baW5wdXRDb2xdID0gbW1fcmVhZEEoYmF0Y2gsXG4gICAgICAgICAga1N0YXJ0ICsgaW5wdXRSb3csXG4gICAgICAgICAgZ2xvYmFsUm93U3RhcnQgLyBpbm5lckVsZW1lbnRTaXplICsgaW5wdXRDb2wke2JhdGNoRGltcyA/IFwiLCBiYXRjaEluZGljZXNcIiA6IFwiXCJ9KTtcbiAgICAgICAgYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYFxuICAgICAgICBtbV9Bc3ViW2lucHV0Um93XVtpbnB1dENvbF0gPSBtbV9yZWFkQShiYXRjaCxcbiAgICAgICAgICBnbG9iYWxSb3cgKyBpbm5lclJvdyxcbiAgICAgICAgICBrU3RhcnQgLyBpbm5lckVsZW1lbnRTaXplICsgaW5wdXRDb2wke2JhdGNoRGltcyA/IFwiLCBiYXRjaEluZGljZXNcIiA6IFwiXCJ9KTtcbiAgICAgICAgYDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNhbGN1bGF0ZVJlc3VsdFNuaXBwZXQgPSAodHJhbnNwb3NlQSwgaW5uZXJFbGVtZW50U2l6ZSkgPT4ge1xuICAgICAgICBpZiAodHJhbnNwb3NlQSkge1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgIGxldCBBQ2FjaGVkMCA9IG1tX0FzdWJbayAqIGlubmVyRWxlbWVudFNpemVdW2xvY2FsUm93XTtcbiAgICAgICAgbGV0IEFDYWNoZWQxID0gbW1fQXN1YltrICogaW5uZXJFbGVtZW50U2l6ZSArIDFdW2xvY2FsUm93XTtcbiAgICAgICAgbGV0IEFDYWNoZWQyID0gbW1fQXN1YltrICogaW5uZXJFbGVtZW50U2l6ZSArIDJdW2xvY2FsUm93XTtcbiAgICAgICAgJHtpbm5lckVsZW1lbnRTaXplID09PSAzID8gXCJcIiA6IFwibGV0IEFDYWNoZWQzID0gbW1fQXN1YltrICogaW5uZXJFbGVtZW50U2l6ZSArIDNdW2xvY2FsUm93XTtcIn1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dQZXJUaHJlYWQ7IGkgPSBpICsgMSkge1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQwICogQUNhY2hlZDBbaV0gKyBhY2NbaV07XG4gICAgICAgICAgYWNjW2ldID0gQkNhY2hlZDEgKiBBQ2FjaGVkMVtpXSArIGFjY1tpXTtcbiAgICAgICAgICBhY2NbaV0gPSBCQ2FjaGVkMiAqIEFDYWNoZWQyW2ldICsgYWNjW2ldO1xuICAgICAgICAgICR7aW5uZXJFbGVtZW50U2l6ZSA9PT0gMyA/IFwiXCIgOiBcImFjY1tpXSA9IEJDYWNoZWQzICogQUNhY2hlZDNbaV0gKyBhY2NbaV07XCJ9XG4gICAgICAgIH1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93UGVyVGhyZWFkOyBpID0gaSArIDEpIHtcbiAgICAgICAgICBsZXQgQUNhY2hlZCA9IG1tX0FzdWJbdGlsZVJvdyArIGldW2tdO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQwICogQUNhY2hlZC54ICsgYWNjW2ldO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQxICogQUNhY2hlZC55ICsgYWNjW2ldO1xuICAgICAgICAgIGFjY1tpXSA9IEJDYWNoZWQyICogQUNhY2hlZC56ICsgYWNjW2ldO1xuICAgICAgICAgICR7aW5uZXJFbGVtZW50U2l6ZSA9PT0gMyA/IFwiXCIgOiBcImFjY1tpXSA9IEJDYWNoZWQzICogQUNhY2hlZC53ICsgYWNjW2ldO1wifVxuICAgICAgICB9YDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG1ha2VNYXRNdWxQYWNrZWRWZWM0U291cmNlID0gKHdvcmtQZXJUaHJlYWQsIHdvcmtncm91cFNpemUsIHR5cGUgPSBcImYzMlwiLCBiYXRjaERpbXMsIHRyYW5zcG9zZUEgPSBmYWxzZSwgdGlsZUlubmVyID0gMzIsIHNwbGl0SyA9IGZhbHNlLCBzcGxpdGVkRGltSW5uZXIgPSAzMikgPT4ge1xuICAgICAgICBjb25zdCB0aWxlQU91dGVyID0gd29ya2dyb3VwU2l6ZVsxXSAqIHdvcmtQZXJUaHJlYWRbMV07XG4gICAgICAgIGNvbnN0IHRpbGVCT3V0ZXIgPSB3b3JrZ3JvdXBTaXplWzBdICogd29ya1BlclRocmVhZFswXTtcbiAgICAgICAgY29uc3QgdGlsZUFXaWR0aCA9IHRyYW5zcG9zZUEgPyB0aWxlQU91dGVyIDogdGlsZUlubmVyO1xuICAgICAgICBjb25zdCB0aWxlQUhpZ2h0ID0gdHJhbnNwb3NlQSA/IHRpbGVJbm5lciA6IHRpbGVBT3V0ZXI7XG4gICAgICAgIGNvbnN0IGlubmVyRWxlbWVudFNpemUgPSB0aWxlQVdpZHRoIC8gd29ya2dyb3VwU2l6ZVswXTtcbiAgICAgICAgY29uc3Qgcm93UGVyVGhyZWFkQiA9IHRpbGVJbm5lciAvIHdvcmtncm91cFNpemVbMV07XG4gICAgICAgIGlmICghKCh0cmFuc3Bvc2VBICYmIGlubmVyRWxlbWVudFNpemUgPT09IDQgJiYgd29ya1BlclRocmVhZFsxXSA9PT0gNCB8fCAhdHJhbnNwb3NlQSAmJiAoaW5uZXJFbGVtZW50U2l6ZSA9PT0gMyB8fCBpbm5lckVsZW1lbnRTaXplID09PSA0KSkgJiYgdGlsZUFXaWR0aCAlIHdvcmtncm91cFNpemVbMF0gPT09IDAgJiYgdGlsZUlubmVyICUgd29ya2dyb3VwU2l6ZVsxXSA9PT0gMCAmJiB3b3JrUGVyVGhyZWFkWzBdID09PSA0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSWYgdHJhbnNwb3NlQSAke3RyYW5zcG9zZUF9IGlzIHRydWUsIGlubmVyRWxlbWVudFNpemUgJHtpbm5lckVsZW1lbnRTaXplfSBhbmQgd29ya1BlclRocmVhZFsxXSAke3dvcmtQZXJUaHJlYWRbMV19IG11c3QgYmUgNC5cbiAgICAgIE90aGVyd2lzZSwgaW5uZXJFbGVtZW50U2l6ZSAke2lubmVyRWxlbWVudFNpemV9IG11c3QgYmUgMyBvciA0LlxuICB0aWxlQVdpZHRoICR7dGlsZUFXaWR0aH0gbXVzdCBiZSBkaXZpc2libGUgYnkgd29ya2dyb3VwU2l6ZVswXSR7d29ya2dyb3VwU2l6ZVswXX0uIHRpbGVJbm5lciAke3RpbGVJbm5lcn0gbXVzdCBiZSBkaXZpc2libGUgYnkgd29ya2dyb3VwU2l6ZVsxXSAke3dvcmtncm91cFNpemVbMV19LiBjb2xQZXJUaHJlYWQgJHt3b3JrUGVyVGhyZWFkWzBdfSBtdXN0IGJlIDQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcbnZhcjx3b3JrZ3JvdXA+IG1tX0FzdWI6IGFycmF5PGFycmF5PHZlYyR7aW5uZXJFbGVtZW50U2l6ZX08JHt0eXBlfT4sICR7dGlsZUFXaWR0aCAvIGlubmVyRWxlbWVudFNpemV9PiwgJHt0aWxlQUhpZ2h0fT47XG52YXI8d29ya2dyb3VwPiBtbV9Cc3ViOiBhcnJheTxhcnJheTx2ZWM0PCR7dHlwZX0+LCAke3RpbGVCT3V0ZXIgLyB3b3JrUGVyVGhyZWFkWzBdfT4sICR7dGlsZUlubmVyfT47XG5cbmNvbnN0IHJvd1BlclRocmVhZCA9ICR7d29ya1BlclRocmVhZFsxXX07XG5jb25zdCBjb2xQZXJUaHJlYWQgPSAke3dvcmtQZXJUaHJlYWRbMF19O1xuY29uc3QgaW5uZXJFbGVtZW50U2l6ZSA9ICR7aW5uZXJFbGVtZW50U2l6ZX07XG5jb25zdCB0aWxlSW5uZXIgPSAke3RpbGVJbm5lcn07XG5cbkBjb21wdXRlIEB3b3JrZ3JvdXBfc2l6ZSgke3dvcmtncm91cFNpemVbMF19LCAke3dvcmtncm91cFNpemVbMV19LCAke3dvcmtncm91cFNpemVbMl19KVxuZm4gbWFpbihAYnVpbHRpbihsb2NhbF9pbnZvY2F0aW9uX2lkKSBsb2NhbElkIDogdmVjMzx1MzI+LFxuICAgICAgICBAYnVpbHRpbihnbG9iYWxfaW52b2NhdGlvbl9pZCkgZ2xvYmFsSWQgOiB2ZWMzPHUzMj4sXG4gICAgICAgIEBidWlsdGluKHdvcmtncm91cF9pZCkgd29ya2dyb3VwSWQgOiB2ZWMzPHUzMj4pIHtcbiAgbGV0IGxvY2FsUm93ID0gaTMyKGxvY2FsSWQueSk7XG4gIGxldCB0aWxlUm93ID0gbG9jYWxSb3cgKiByb3dQZXJUaHJlYWQ7XG4gIGxldCB0aWxlQ29sID0gaTMyKGxvY2FsSWQueCk7XG5cbiAgbGV0IGdsb2JhbFJvdyA9aTMyKGdsb2JhbElkLnkpICogcm93UGVyVGhyZWFkO1xuICBsZXQgZ2xvYmFsQ29sID0gaTMyKGdsb2JhbElkLngpO1xuICBsZXQgYmF0Y2ggPSAke3NwbGl0SyA/IFwiMFwiIDogXCJpMzIoZ2xvYmFsSWQueilcIn07XG4gICR7YmF0Y2hEaW1zID8gYGxldCBiYXRjaEluZGljZXMgPSAke2JhdGNoRGltcy5vZmZzZXRUb0luZGljZXMoXCJ1MzIoYmF0Y2gpXCIpfTtgIDogXCJcIn1cbiAgbGV0IGdsb2JhbFJvd1N0YXJ0ID0gaTMyKHdvcmtncm91cElkLnkpICogJHt0aWxlQU91dGVyfTtcblxuICBsZXQgbnVtX3RpbGVzID0gJHtzcGxpdEsgPyBgJHtNYXRoLmNlaWwoc3BsaXRlZERpbUlubmVyIC8gdGlsZUlubmVyKX1gIDogXCIodW5pZm9ybXMuZGltX2lubmVyIC0gMSkgLyB0aWxlSW5uZXIgKyAxXCJ9O1xuICB2YXIga1N0YXJ0ID0gJHtzcGxpdEsgPyBgaTMyKGdsb2JhbElkLnopICogJHtzcGxpdGVkRGltSW5uZXJ9YCA6IFwiMFwifTtcblxuICB2YXIgYWNjOiBhcnJheTx2ZWM0PCR7dHlwZX0+LCByb3dQZXJUaHJlYWQ+O1xuXG4gIC8vIExvb3Agb3ZlciBzaGFyZWQgZGltZW5zaW9uLlxuICBsZXQgdGlsZVJvd0IgPSBsb2NhbFJvdyAqICR7cm93UGVyVGhyZWFkQn07XG4gIGZvciAodmFyIHQgPSAwOyB0IDwgbnVtX3RpbGVzOyB0ID0gdCArIDEpIHtcbiAgICAgIC8vIExvYWQgb25lIHRpbGUgb2YgQSBpbnRvIGxvY2FsIG1lbW9yeS5cbiAgICAgIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gICAgICAgICAgbGV0IGlucHV0Um93ID0gdGlsZVJvdyArIGlubmVyUm93O1xuICAgICAgICAgIGxldCBpbnB1dENvbCA9IHRpbGVDb2w7XG4gICAgICAgICAgJHt3cml0ZURhdGFUb1N1YkFWZWM0U25pcHBldCh0cmFuc3Bvc2VBLCBiYXRjaERpbXMpfVxuICAgICAgfVxuXG4gICAgICAvLyBMb2FkIG9uZSB0aWxlIG9mIEIgaW50byBsb2NhbCBtZW1vcnkuXG4gICAgICBmb3IgKHZhciBpbm5lclJvdyA9IDA7IGlubmVyUm93IDwgJHtyb3dQZXJUaHJlYWRCfTsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICAgICAgICBsZXQgaW5wdXRSb3cgPSB0aWxlUm93QiArIGlubmVyUm93O1xuICAgICAgICAgIGxldCBpbnB1dENvbCA9IHRpbGVDb2w7XG4gICAgICAgICAgbW1fQnN1YltpbnB1dFJvd11baW5wdXRDb2xdID0gbW1fcmVhZEIoYmF0Y2gsIGtTdGFydCArIGlucHV0Um93LCBnbG9iYWxDb2wke2JhdGNoRGltcyA/IFwiLCBiYXRjaEluZGljZXNcIiA6IFwiXCJ9KTtcbiAgICAgIH1cbiAgICAgIGtTdGFydCA9IGtTdGFydCArIHRpbGVJbm5lcjtcbiAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAgICAgLy8gQ29tcHV0ZSBhY2MgdmFsdWVzIGZvciBhIHNpbmdsZSB0aHJlYWQuXG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRpbGVJbm5lciAvIGlubmVyRWxlbWVudFNpemU7IGsgPSBrICsgMSkge1xuICAgICAgICAgIGxldCBCQ2FjaGVkMCA9IG1tX0JzdWJbayAqIGlubmVyRWxlbWVudFNpemVdW3RpbGVDb2xdO1xuICAgICAgICAgIGxldCBCQ2FjaGVkMSA9IG1tX0JzdWJbayAqIGlubmVyRWxlbWVudFNpemUgKyAxXVt0aWxlQ29sXTtcbiAgICAgICAgICBsZXQgQkNhY2hlZDIgPSBtbV9Cc3ViW2sgKiBpbm5lckVsZW1lbnRTaXplICsgMl1bdGlsZUNvbF07XG4gICAgICAgICAgJHtpbm5lckVsZW1lbnRTaXplID09PSAzID8gXCJcIiA6IFwibGV0IEJDYWNoZWQzID0gbW1fQnN1YltrICogaW5uZXJFbGVtZW50U2l6ZSArIDNdW3RpbGVDb2xdO1wifVxuXG4gICAgICAgICAgJHtjYWxjdWxhdGVSZXN1bHRTbmlwcGV0KHRyYW5zcG9zZUEsIGlubmVyRWxlbWVudFNpemUpfVxuICAgICAgfVxuXG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gIH1cblxuICBmb3IgKHZhciBpbm5lclJvdyA9IDA7IGlubmVyUm93IDwgcm93UGVyVGhyZWFkOyBpbm5lclJvdyA9IGlubmVyUm93ICsgMSkge1xuICAgICAgbW1fd3JpdGUoYmF0Y2gsIGdsb2JhbFJvdyArIGlubmVyUm93LCBnbG9iYWxDb2wsIGFjY1tpbm5lclJvd10pO1xuICB9XG59YDtcbiAgICAgIH07XG4gICAgICB3cml0ZURhdGFUb1N1YkFTbmlwcGV0ID0gKHRyYW5zcG9zZTIsIGJhdGNoRGltcykgPT4ge1xuICAgICAgICBpZiAodHJhbnNwb3NlMikge1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICBtbV9Bc3ViW2lucHV0Um93XVtpbnB1dENvbF0gPSBtbV9yZWFkQShiYXRjaCxcbiAgICAgICAgICAgICAga1N0YXJ0ICsgaW5wdXRSb3csXG4gICAgICAgICAgICAgIGdsb2JhbFJvd1N0YXJ0ICsgaW5wdXRDb2wke2JhdGNoRGltcyA/IFwiLCBiYXRjaEluZGljZXNcIiA6IFwiXCJ9KTtcbiAgICAgICAgICAgIGA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIG1tX0FzdWJbaW5wdXRSb3ddW2lucHV0Q29sXSA9IG1tX3JlYWRBKGJhdGNoLFxuICAgICAgICAgICAgICBnbG9iYWxSb3dTdGFydCArIGlucHV0Um93LFxuICAgICAgICAgICAgICBrU3RhcnQgKyBpbnB1dENvbCR7YmF0Y2hEaW1zID8gXCIsIGJhdGNoSW5kaWNlc1wiIDogXCJcIn0pO1xuICAgICAgICAgICAgYDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlYWREYXRhRnJvbVN1YkFTbmlwcGV0ID0gKHRyYW5zcG9zZUEpID0+IHRyYW5zcG9zZUEgPyBcImxldCBBQ2FjaGVkID0gbW1fQXN1YltrXVt0aWxlUm93ICsgaW5uZXJSb3ddO1wiIDogXCJsZXQgQUNhY2hlZCA9IG1tX0FzdWJbdGlsZVJvdyArIGlubmVyUm93XVtrXTtcIjtcbiAgICAgIG1ha2VNYXRNdWxQYWNrZWRTb3VyY2UgPSAod29ya1BlclRocmVhZCwgd29ya2dyb3VwU2l6ZSwgdHlwZSA9IFwiZjMyXCIsIGJhdGNoRGltcywgdHJhbnNwb3NlQSA9IGZhbHNlLCB0aWxlSW5uZXIgPSAzMiwgc3BsaXRLID0gZmFsc2UsIHNwbGl0ZWREaW1Jbm5lciA9IDMyLCBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3QgdGlsZUFPdXRlciA9IHdvcmtQZXJUaHJlYWRbMV0gKiB3b3JrZ3JvdXBTaXplWzFdO1xuICAgICAgICBjb25zdCB0aWxlQk91dGVyID0gd29ya1BlclRocmVhZFswXSAqIHdvcmtncm91cFNpemVbMF07XG4gICAgICAgIGNvbnN0IHRpbGVBV2lkdGggPSB0cmFuc3Bvc2VBID8gdGlsZUFPdXRlciA6IHRpbGVJbm5lcjtcbiAgICAgICAgY29uc3QgdGlsZUFIaWdodCA9IHRyYW5zcG9zZUEgPyB0aWxlSW5uZXIgOiB0aWxlQU91dGVyO1xuICAgICAgICBpZiAoISh0aWxlQUhpZ2h0ICUgd29ya2dyb3VwU2l6ZVsxXSA9PT0gMCAmJiB0aWxlQVdpZHRoICUgd29ya2dyb3VwU2l6ZVswXSA9PT0gMCAmJiB0aWxlSW5uZXIgJSB3b3JrZ3JvdXBTaXplWzFdID09PSAwKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdGlsZUFIaWdodCAke3RpbGVBSGlnaHR9IG11c3QgYmUgZGl2aXNpYmxlIGJ5IHdvcmtncm91cFNpemVbMV0ke3dvcmtncm91cFNpemVbMV19LCB0aWxlQVdpZHRoICR7dGlsZUFXaWR0aH0gbXVzdCBiZSBkaXZpc2libGUgYnkgd29ya2dyb3VwU2l6ZVswXSR7d29ya2dyb3VwU2l6ZVswXX0sIHRpbGVJbm5lciAke3RpbGVJbm5lcn0gbXVzdCBiZSBkaXZpc2libGUgYnkgd29ya2dyb3VwU2l6ZVsxXSR7d29ya2dyb3VwU2l6ZVsxXX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dQZXJUaHJlYWRBID0gdGlsZUFIaWdodCAvIHdvcmtncm91cFNpemVbMV07XG4gICAgICAgIGNvbnN0IGNvbFBlclRocmVhZEEgPSB0aWxlQVdpZHRoIC8gd29ya2dyb3VwU2l6ZVswXTtcbiAgICAgICAgY29uc3Qgcm93UGVyVGhyZWFkQiA9IHRpbGVJbm5lciAvIHdvcmtncm91cFNpemVbMV07XG4gICAgICAgIGNvbnN0IG1hdG11bFNuaXBwZXQgPSBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzID8gYFxuICAgIGxldCBsb2NhbFJvdyA9IGkzMihsb2NhbElkLnkpO1xuICAgIGxldCBsb2NhbENvbCA9IGkzMihsb2NhbElkLngpO1xuICAgIGxldCBnbG9iYWxSb3dTdGFydCA9IGkzMih3b3JrZ3JvdXBJZC55KSAqICR7dGlsZUFPdXRlcn07XG4gICAgbGV0IGdsb2JhbENvbFN0YXJ0ID0gaTMyKHdvcmtncm91cElkLngpICogJHt0aWxlQk91dGVyfTtcblxuICAgIC8vIExvb3Agb3ZlciBzaGFyZWQgZGltZW5zaW9uLlxuICAgIGZvciAodmFyIHQgPSAwOyB0IDwgbnVtX3RpbGVzOyB0ID0gdCArIDEpIHtcbiAgICAgIC8vIExvYWQgb25lIHRpbGUgb2YgQSBpbnRvIGxvY2FsIG1lbW9yeS5cbiAgICAgIGZvciAodmFyIGlucHV0Um93ID0gbG9jYWxSb3c7IGlucHV0Um93IDwgJHt0aWxlQUhpZ2h0fTsgaW5wdXRSb3cgPSBpbnB1dFJvdyArICR7d29ya2dyb3VwU2l6ZVsxXX0pIHtcbiAgICAgICAgZm9yICh2YXIgaW5wdXRDb2wgPSBsb2NhbENvbDsgaW5wdXRDb2wgPCAke3RpbGVBV2lkdGh9OyBpbnB1dENvbCA9IGlucHV0Q29sICsgJHt3b3JrZ3JvdXBTaXplWzBdfSkge1xuICAgICAgICAgICR7d3JpdGVEYXRhVG9TdWJBU25pcHBldCh0cmFuc3Bvc2VBLCBiYXRjaERpbXMpfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBMb2FkIG9uZSB0aWxlIG9mIEIgaW50byBsb2NhbCBtZW1vcnkuXG4gICAgICBmb3IgKHZhciBpbnB1dFJvdyA9IGxvY2FsUm93OyBpbnB1dFJvdyA8ICR7dGlsZUlubmVyfTsgaW5wdXRSb3cgPSBpbnB1dFJvdyArICR7d29ya2dyb3VwU2l6ZVsxXX0pIHtcbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0Q29sID0gbG9jYWxDb2w7IGlucHV0Q29sIDwgJHt0aWxlQk91dGVyfTsgaW5wdXRDb2wgPSBpbnB1dENvbCArICR7d29ya2dyb3VwU2l6ZVswXX0pIHtcbiAgICAgICAgICBtbV9Cc3ViW2lucHV0Um93XVtpbnB1dENvbF0gPSBtbV9yZWFkQihiYXRjaCxcbiAgICAgICAgICAgIGtTdGFydCArIGlucHV0Um93LFxuICAgICAgICAgICAgZ2xvYmFsQ29sU3RhcnQgKyBpbnB1dENvbCR7YmF0Y2hEaW1zID8gXCIsIGJhdGNoSW5kaWNlc1wiIDogXCJcIn0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBrU3RhcnQgPSBrU3RhcnQgKyB0aWxlSW5uZXI7XG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAgIC8vIENvbXB1dGUgYWNjIHZhbHVlcyBmb3IgYSBzaW5nbGUgdGhyZWFkLlxuICAgICAgdmFyIEJDYWNoZWQgOiBhcnJheTwke3R5cGV9LCBjb2xQZXJUaHJlYWQ+O1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aWxlSW5uZXI7IGsgPSBrICsgMSkge1xuICAgICAgICBmb3IgKHZhciBpbm5lciA9IDA7IGlubmVyIDwgY29sUGVyVGhyZWFkOyBpbm5lciA9IGlubmVyICsgMSkge1xuICAgICAgICAgIEJDYWNoZWRbaW5uZXJdID0gbW1fQnN1YltrXVtsb2NhbENvbCArIGlubmVyICogJHt3b3JrZ3JvdXBTaXplWzBdfV07XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaW5uZXJSb3cgPSAwOyBpbm5lclJvdyA8IHJvd1BlclRocmVhZDsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICAgICAgICBsZXQgQUNhY2hlZCA9ICR7dHJhbnNwb3NlQSA/IGBtbV9Bc3ViW2tdW2xvY2FsUm93ICsgaW5uZXJSb3cgKiAke3dvcmtncm91cFNpemVbMV19XTtgIDogYG1tX0FzdWJbbG9jYWxSb3cgKyBpbm5lclJvdyAqICR7d29ya2dyb3VwU2l6ZVsxXX1dW2tdO2B9XG4gICAgICAgICAgZm9yICh2YXIgaW5uZXJDb2wgPSAwOyBpbm5lckNvbCA8IGNvbFBlclRocmVhZDsgaW5uZXJDb2wgPSBpbm5lckNvbCArIDEpIHtcbiAgICAgICAgICAgIGFjY1tpbm5lclJvd11baW5uZXJDb2xdID0gYWNjW2lubmVyUm93XVtpbm5lckNvbF0gK1xuICAgICAgICAgICAgICAgIEFDYWNoZWQgKiBCQ2FjaGVkW2lubmVyQ29sXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaW5uZXJSb3cgPSAwOyBpbm5lclJvdyA8IHJvd1BlclRocmVhZDsgaW5uZXJSb3cgPSBpbm5lclJvdyArIDEpIHtcbiAgICAgIGxldCBnUm93ID0gZ2xvYmFsUm93U3RhcnQgKyBsb2NhbFJvdyArIGlubmVyUm93ICogJHt3b3JrZ3JvdXBTaXplWzFdfTtcbiAgICAgIGZvciAodmFyIGlubmVyQ29sID0gMDsgaW5uZXJDb2wgPCBjb2xQZXJUaHJlYWQ7IGlubmVyQ29sID0gaW5uZXJDb2wgKyAxKSB7XG4gICAgICAgIGxldCBnQ29sID0gZ2xvYmFsQ29sU3RhcnQgKyBsb2NhbENvbCArIGlubmVyQ29sICogJHt3b3JrZ3JvdXBTaXplWzBdfTtcbiAgICAgICAgbW1fd3JpdGUoYmF0Y2gsIGdSb3csIGdDb2wsIGFjY1tpbm5lclJvd11baW5uZXJDb2xdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYCA6IGBcbmxldCB0aWxlUm93ID0gaTMyKGxvY2FsSWQueSkgKiByb3dQZXJUaHJlYWQ7XG5sZXQgdGlsZUNvbCA9IGkzMihsb2NhbElkLngpICogY29sUGVyVGhyZWFkO1xuXG5sZXQgZ2xvYmFsUm93ID0gaTMyKGdsb2JhbElkLnkpICogcm93UGVyVGhyZWFkO1xubGV0IGdsb2JhbENvbCA9IGkzMihnbG9iYWxJZC54KSAqIGNvbFBlclRocmVhZDtcbmxldCBnbG9iYWxSb3dTdGFydCA9IGkzMih3b3JrZ3JvdXBJZC55KSAqICR7dGlsZUFPdXRlcn07XG5cbmxldCB0aWxlUm93QSA9IGkzMihsb2NhbElkLnkpICogJHtyb3dQZXJUaHJlYWRBfTtcbmxldCB0aWxlQ29sQSA9IGkzMihsb2NhbElkLngpICogJHtjb2xQZXJUaHJlYWRBfTtcbmxldCB0aWxlUm93QiA9IGkzMihsb2NhbElkLnkpICogJHtyb3dQZXJUaHJlYWRCfTtcbi8vIExvb3Agb3ZlciBzaGFyZWQgZGltZW5zaW9uLlxuZm9yICh2YXIgdCA9IDA7IHQgPCBudW1fdGlsZXM7IHQgPSB0ICsgMSkge1xuICAvLyBMb2FkIG9uZSB0aWxlIG9mIEEgaW50byBsb2NhbCBtZW1vcnkuXG4gIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCAke3Jvd1BlclRocmVhZEF9OyBpbm5lclJvdyA9IGlubmVyUm93ICsgMSkge1xuICAgIGZvciAodmFyIGlubmVyQ29sID0gMDsgaW5uZXJDb2wgPCAke2NvbFBlclRocmVhZEF9OyBpbm5lckNvbCA9IGlubmVyQ29sICsgMSkge1xuICAgICAgbGV0IGlucHV0Um93ID0gdGlsZVJvd0EgKyBpbm5lclJvdztcbiAgICAgIGxldCBpbnB1dENvbCA9IHRpbGVDb2xBICsgaW5uZXJDb2w7XG4gICAgICAke3dyaXRlRGF0YVRvU3ViQVNuaXBwZXQodHJhbnNwb3NlQSwgYmF0Y2hEaW1zKX1cbiAgICB9XG4gIH1cblxuICAvLyBMb2FkIG9uZSB0aWxlIG9mIEIgaW50byBsb2NhbCBtZW1vcnkuXG4gIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCAke3Jvd1BlclRocmVhZEJ9OyBpbm5lclJvdyA9IGlubmVyUm93ICsgMSkge1xuICAgIGZvciAodmFyIGlubmVyQ29sID0gMDsgaW5uZXJDb2wgPCBjb2xQZXJUaHJlYWQ7IGlubmVyQ29sID0gaW5uZXJDb2wgKyAxKSB7XG4gICAgICBsZXQgaW5wdXRSb3cgPSB0aWxlUm93QiArIGlubmVyUm93O1xuICAgICAgbGV0IGlucHV0Q29sID0gdGlsZUNvbCArIGlubmVyQ29sO1xuICAgICAgbW1fQnN1YltpbnB1dFJvd11baW5wdXRDb2xdID0gbW1fcmVhZEIoYmF0Y2gsXG4gICAgICAgIGtTdGFydCArIGlucHV0Um93LFxuICAgICAgICBnbG9iYWxDb2wgKyBpbm5lckNvbCR7YmF0Y2hEaW1zID8gXCIsIGJhdGNoSW5kaWNlc1wiIDogXCJcIn0pO1xuICAgIH1cbiAgfVxuICBrU3RhcnQgPSBrU3RhcnQgKyB0aWxlSW5uZXI7XG4gIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAvLyBDb21wdXRlIGFjYyB2YWx1ZXMgZm9yIGEgc2luZ2xlIHRocmVhZC5cbiAgdmFyIEJDYWNoZWQgOiBhcnJheTwke3R5cGV9LCBjb2xQZXJUaHJlYWQ+O1xuICBmb3IgKHZhciBrID0gMDsgayA8IHRpbGVJbm5lcjsgayA9IGsgKyAxKSB7XG4gICAgZm9yICh2YXIgaW5uZXIgPSAwOyBpbm5lciA8IGNvbFBlclRocmVhZDsgaW5uZXIgPSBpbm5lciArIDEpIHtcbiAgICAgIEJDYWNoZWRbaW5uZXJdID0gbW1fQnN1YltrXVt0aWxlQ29sICsgaW5uZXJdO1xuICAgIH1cblxuICAgIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gICAgICAke3JlYWREYXRhRnJvbVN1YkFTbmlwcGV0KHRyYW5zcG9zZUEpfVxuICAgICAgZm9yICh2YXIgaW5uZXJDb2wgPSAwOyBpbm5lckNvbCA8IGNvbFBlclRocmVhZDsgaW5uZXJDb2wgPSBpbm5lckNvbCArIDEpIHtcbiAgICAgICAgYWNjW2lubmVyUm93XVtpbm5lckNvbF0gPSBhY2NbaW5uZXJSb3ddW2lubmVyQ29sXSArIEFDYWNoZWQgKiBCQ2FjaGVkW2lubmVyQ29sXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG59XG5cbmZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gIGZvciAodmFyIGlubmVyQ29sID0gMDsgaW5uZXJDb2wgPCBjb2xQZXJUaHJlYWQ7IGlubmVyQ29sID0gaW5uZXJDb2wgKyAxKSB7XG4gICAgbW1fd3JpdGUoYmF0Y2gsIGdsb2JhbFJvdyArIGlubmVyUm93LCBnbG9iYWxDb2wgKyBpbm5lckNvbCxcbiAgICAgICAgYWNjW2lubmVyUm93XVtpbm5lckNvbF0pO1xuICB9XG59XG5gO1xuICAgICAgICByZXR1cm4gYFxuICB2YXI8d29ya2dyb3VwPiBtbV9Bc3ViIDogYXJyYXk8YXJyYXk8JHt0eXBlfSwgJHt0aWxlQVdpZHRofT4sICR7dGlsZUFIaWdodH0+O1xuICB2YXI8d29ya2dyb3VwPiBtbV9Cc3ViIDogYXJyYXk8YXJyYXk8JHt0eXBlfSwgJHt0aWxlQk91dGVyfT4sICR7dGlsZUlubmVyfT47XG4gIGNvbnN0IHJvd1BlclRocmVhZCA9ICR7d29ya1BlclRocmVhZFsxXX07XG4gIGNvbnN0IGNvbFBlclRocmVhZCA9ICR7d29ya1BlclRocmVhZFswXX07XG4gIGNvbnN0IHRpbGVJbm5lciA9ICR7dGlsZUlubmVyfTtcblxuQGNvbXB1dGUgQHdvcmtncm91cF9zaXplKCR7d29ya2dyb3VwU2l6ZVswXX0sICR7d29ya2dyb3VwU2l6ZVsxXX0sICR7d29ya2dyb3VwU2l6ZVsyXX0pXG5mbiBtYWluKEBidWlsdGluKGxvY2FsX2ludm9jYXRpb25faWQpIGxvY2FsSWQgOiB2ZWMzPHUzMj4sXG4gICAgICAgIEBidWlsdGluKGdsb2JhbF9pbnZvY2F0aW9uX2lkKSBnbG9iYWxJZCA6IHZlYzM8dTMyPixcbiAgICAgICAgQGJ1aWx0aW4od29ya2dyb3VwX2lkKSB3b3JrZ3JvdXBJZCA6IHZlYzM8dTMyPikge1xuICAgIGxldCBiYXRjaCA9ICR7c3BsaXRLID8gXCIwXCIgOiBcImkzMihnbG9iYWxJZC56KVwifTtcbiAgICAke2JhdGNoRGltcyA/IGBsZXQgYmF0Y2hJbmRpY2VzID0gJHtiYXRjaERpbXMub2Zmc2V0VG9JbmRpY2VzKFwidTMyKGJhdGNoKVwiKX07YCA6IFwiXCJ9XG4gICAgbGV0IG51bV90aWxlcyA9ICR7c3BsaXRLID8gYCR7TWF0aC5jZWlsKHNwbGl0ZWREaW1Jbm5lciAvIHRpbGVJbm5lcil9YCA6IFwiKHVuaWZvcm1zLmRpbV9pbm5lciAtIDEpIC8gdGlsZUlubmVyICsgMVwifTtcbiAgICB2YXIga1N0YXJ0ID0gJHtzcGxpdEsgPyBgaTMyKGdsb2JhbElkLnopICogJHtzcGxpdGVkRGltSW5uZXJ9YCA6IFwiMFwifTtcblxuICAgIHZhciBhY2MgOiBhcnJheTxhcnJheTwke3R5cGV9LCBjb2xQZXJUaHJlYWQ+LCByb3dQZXJUaHJlYWQ+O1xuXG4gICAgLy8gV2l0aG91dCB0aGlzIGluaXRpYWxpemF0aW9uIHN0cmFuZ2UgdmFsdWVzIHNob3cgdXAgaW4gYWNjLlxuICAgIGZvciAodmFyIGlubmVyUm93ID0gMDsgaW5uZXJSb3cgPCByb3dQZXJUaHJlYWQ7IGlubmVyUm93ID0gaW5uZXJSb3cgKyAxKSB7XG4gICAgICBmb3IgKHZhciBpbm5lckNvbCA9IDA7IGlubmVyQ29sIDwgY29sUGVyVGhyZWFkOyBpbm5lckNvbCA9IGlubmVyQ29sICsgMSkge1xuICAgICAgICBhY2NbaW5uZXJSb3ddW2lubmVyQ29sXSA9IDAuMDtcbiAgICAgIH1cbiAgICB9XG4gICAgJHttYXRtdWxTbmlwcGV0fVxuICB9XG5gO1xuICAgICAgfTtcbiAgICAgIG1hdE11bFJlYWRXcml0ZUZuU291cmNlID0gKGNvbXBvbmVudCwgaGFzQmlhcywgYXBwbHlBY3RpdmF0aW9uLCB2YXJpYWJsZXMsIGJhdGNoU2hhcGVzLCBpc0NoYW5uZWxzTGFzdCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IFtiYXRjaEFTaGFwZSwgYmF0Y2hCU2hhcGUsIGJhdGNoU2hhcGVdID0gYmF0Y2hTaGFwZXM7XG4gICAgICAgIGNvbnN0IFtiYXRjaFZhcmlhYmxlLCBhVmFyaWFibGUsIGJWYXJpYWJsZSwgb3V0cHV0VmFyaWFibGUyXSA9IHZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgYnJvYWRDYXN0QURpbXMgPSBnZXRCcm9hZGNhc3REaW1zKGJhdGNoQVNoYXBlLCBiYXRjaFNoYXBlKTtcbiAgICAgICAgY29uc3QgYnJvYWRDYXN0QkRpbXMgPSBnZXRCcm9hZGNhc3REaW1zKGJhdGNoQlNoYXBlLCBiYXRjaFNoYXBlKTtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUodmFyaWFibGVzWzBdLnR5cGUudGVuc29yKTtcbiAgICAgICAgY29uc3QgZ2V0QUluZGljZXMgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYVJhbmsgPSBhVmFyaWFibGUucmFuaztcbiAgICAgICAgICBjb25zdCBiYXRjaFJhbmsgPSBiYXRjaFZhcmlhYmxlLnJhbms7XG4gICAgICAgICAgbGV0IHJlc1N0ciA9IGB2YXIgYUluZGljZXM6ICR7YVZhcmlhYmxlLnR5cGUuaW5kaWNlc307YDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gYVJhbmsgLSAyIC0gMSwgaiA9IGJhdGNoUmFuayAtIDE7IGkgPj0gMDsgaS0tLCBqLS0pIHtcbiAgICAgICAgICAgIHJlc1N0ciArPSBgXG5hSW5kaWNlc1ske2l9XSA9ICR7YmF0Y2hSYW5rID4gMSA/IGBiYXRjaEluZGljZXNbJHtqfV1gIDogXCJiYXRjaEluZGljZXNcIn07YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJvYWRDYXN0QURpbXMuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICAgICAgcmVzU3RyICs9IGBcbmFJbmRpY2VzWyR7aX1dID0gMDtgO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlc1N0ciArPSBgXG5hSW5kaWNlc1ske2FSYW5rIC0gMn1dID0gdTMyKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgYUluZGljZXNbJHthUmFuayAtIDF9XSA9IHUzMihjb2xJbik7YDtcbiAgICAgICAgICByZXR1cm4gcmVzU3RyO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBnZXRCSW5kaWNlcyA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBiUmFuayA9IGJWYXJpYWJsZS5yYW5rO1xuICAgICAgICAgIGNvbnN0IGJhdGNoUmFuayA9IGJhdGNoVmFyaWFibGUucmFuaztcbiAgICAgICAgICBsZXQgcmVzU3RyID0gYHZhciBiSW5kaWNlczogJHtiVmFyaWFibGUudHlwZS5pbmRpY2VzfTtgO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBiUmFuayAtIDIgLSAxLCBqID0gYmF0Y2hSYW5rIC0gMTsgaSA+PSAwOyBpLS0sIGotLSkge1xuICAgICAgICAgICAgcmVzU3RyICs9IGBcbmJJbmRpY2VzWyR7aX1dID0gJHtiYXRjaFJhbmsgPiAxID8gYGJhdGNoSW5kaWNlc1ske2p9XWAgOiBcImJhdGNoSW5kaWNlc1wifTtgO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicm9hZENhc3RCRGltcy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgICAgICByZXNTdHIgKz0gYFxuYkluZGljZXNbJHtpfV0gPSAwO2A7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzU3RyICs9IGBcbmJJbmRpY2VzWyR7YlJhbmsgLSAyfV0gPSB1MzIocm93KTtcbiAgICAgICAgICAgICAgICAgICBiSW5kaWNlc1ske2JSYW5rIC0gMX1dID0gdTMyKGNvbEluKTtgO1xuICAgICAgICAgIHJldHVybiByZXNTdHI7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGBcbiAgICBmbiBtbV9yZWFkQShiYXRjaDogaTMyLCByb3c6IGkzMiwgY29sSW46IGkzMiwgYmF0Y2hJbmRpY2VzOiAke2JhdGNoVmFyaWFibGUudHlwZS5pbmRpY2VzfSkgLT4gJHt0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0ge1xuICAgICAgdmFyIHZhbHVlID0gJHt0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0oMC4wKTtcbiAgICAgIGxldCBjb2wgPSBjb2xJbiAqICR7Y29tcG9uZW50fTtcbiAgICAgIGlmKHJvdyA8IHVuaWZvcm1zLmRpbV9hX291dGVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9pbm5lcilcbiAgICAgIHtcbiAgICAgICAgJHtnZXRBSW5kaWNlcygpfVxuICAgICAgICB2YWx1ZSA9ICR7YVZhcmlhYmxlLmdldEJ5SW5kaWNlcyhcImFJbmRpY2VzXCIpfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmbiBtbV9yZWFkQihiYXRjaDogaTMyLCByb3c6IGkzMiwgY29sSW46IGkzMiwgYmF0Y2hJbmRpY2VzOiAke2JhdGNoVmFyaWFibGUudHlwZS5pbmRpY2VzfSkgLT4gJHt0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0ge1xuICAgICAgdmFyIHZhbHVlID0gJHt0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0oMC4wKTtcbiAgICAgIGxldCBjb2wgPSBjb2xJbiAqICR7Y29tcG9uZW50fTtcbiAgICAgIGlmKHJvdyA8IHVuaWZvcm1zLmRpbV9pbm5lciAmJiBjb2wgPCB1bmlmb3Jtcy5kaW1fYl9vdXRlcilcbiAgICAgIHtcbiAgICAgICAgJHtnZXRCSW5kaWNlcygpfVxuICAgICAgICB2YWx1ZSA9ICR7YlZhcmlhYmxlLmdldEJ5SW5kaWNlcyhcImJJbmRpY2VzXCIpfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmbiBtbV93cml0ZShiYXRjaDogaTMyLCByb3c6IGkzMiwgY29sSW46IGkzMiwgdmFsdWVJbjogJHt0eXBlU25pcHBldChjb21wb25lbnQsIGRhdGFUeXBlKX0pIHtcbiAgICAgIGxldCBjb2wgPSBjb2xJbiAqICR7Y29tcG9uZW50fTtcbiAgICAgIGlmIChyb3cgPCB1bmlmb3Jtcy5kaW1fYV9vdXRlciAmJiBjb2wgPCB1bmlmb3Jtcy5kaW1fYl9vdXRlcikge1xuICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZUluO1xuICAgICAgICBsZXQgY29vcmRzID0gdmVjMzxpMzI+KGJhdGNoLCByb3csIGNvbEluKTtcbiAgICAgICAgJHtoYXNCaWFzID8gYHZhbHVlID0gdmFsdWUgKyAke2lzQ2hhbm5lbHNMYXN0ID8gXCJiaWFzW2NvbEluXVwiIDogYCR7dHlwZVNuaXBwZXQoY29tcG9uZW50LCBkYXRhVHlwZSl9KGJpYXNbcm93XSlgfTtgIDogXCJcIn1cbiAgICAgICAgJHthcHBseUFjdGl2YXRpb259XG4gICAgICAgICR7b3V0cHV0VmFyaWFibGUyLnNldEJ5SW5kaWNlcyhcInZlYzM8dTMyPihjb29yZHMpXCIsIFwidmFsdWVcIil9XG4gICAgICB9XG4gICAgfVxuICAgIGA7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9O1xuICAgICAgY3JlYXRlTWF0bXVsUHJvZ3JhbUluZm8gPSAoaW5wdXRzLCBhY3RpdmF0aW9uQXR0cmlidXRlcywgb3V0cHV0U2hhcGUsIHJlc2hhcGVkT3V0cHV0U2hhcGUsIGlzQ2hhbm5lbHNMYXN0ID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3QgYVNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG4gICAgICAgIGNvbnN0IGJTaGFwZSA9IGlucHV0c1sxXS5kaW1zO1xuICAgICAgICBjb25zdCBvdXRlckRpbXNBID0gYVNoYXBlLnNsaWNlKDAsIC0yKTtcbiAgICAgICAgY29uc3Qgb3V0ZXJEaW1zQiA9IGJTaGFwZS5zbGljZSgwLCAtMik7XG4gICAgICAgIGNvbnN0IG91dGVyRGltcyA9IHJlc2hhcGVkT3V0cHV0U2hhcGUgPyByZXNoYXBlZE91dHB1dFNoYXBlLnNsaWNlKDAsIC0yKSA6IG91dHB1dFNoYXBlLnNsaWNlKDAsIC0yKTtcbiAgICAgICAgY29uc3QgYmF0Y2hTaXplID0gU2hhcGVVdGlsLnNpemUob3V0ZXJEaW1zKTtcbiAgICAgICAgY29uc3QgZGltQU91dGVyID0gYVNoYXBlW2FTaGFwZS5sZW5ndGggLSAyXTtcbiAgICAgICAgY29uc3QgZGltSW5uZXIgPSBhU2hhcGVbYVNoYXBlLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBkaW1CT3V0ZXIgPSBiU2hhcGVbYlNoYXBlLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBpc1ZlYzQgPSBkaW1Jbm5lciAlIDQgPT09IDAgJiYgZGltQk91dGVyICUgNCA9PT0gMDtcbiAgICAgICAgY29uc3QgZWxlbWVudHNQZXJUaHJlYWQgPSBkaW1BT3V0ZXIgPD0gOCA/IFs0LCAxLCAxXSA6IFs0LCA0LCAxXTtcbiAgICAgICAgY29uc3Qgd29ya2dyb3VwU2l6ZSA9IFs4LCA4LCAxXTtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2ggPSBbXG4gICAgICAgICAgTWF0aC5jZWlsKGRpbUJPdXRlciAvIHdvcmtncm91cFNpemVbMF0gLyBlbGVtZW50c1BlclRocmVhZFswXSksXG4gICAgICAgICAgTWF0aC5jZWlsKGRpbUFPdXRlciAvIHdvcmtncm91cFNpemVbMV0gLyBlbGVtZW50c1BlclRocmVhZFsxXSksXG4gICAgICAgICAgTWF0aC5jZWlsKGJhdGNoU2l6ZSAvIHdvcmtncm91cFNpemVbMl0gLyBlbGVtZW50c1BlclRocmVhZFsyXSlcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGlzVmVjNCA/IDQgOiAxO1xuICAgICAgICBjb25zdCBhU2hhcGVUZW1wID0gWy4uLm91dGVyRGltc0EsIGRpbUFPdXRlciwgZGltSW5uZXIgLyBjb21wb25lbnRzXTtcbiAgICAgICAgY29uc3QgYVJhbmsgPSBhU2hhcGVUZW1wLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYlNoYXBlVGVtcCA9IFsuLi5vdXRlckRpbXNCLCBkaW1Jbm5lciwgZGltQk91dGVyIC8gY29tcG9uZW50c107XG4gICAgICAgIGNvbnN0IGJSYW5rID0gYlNoYXBlVGVtcC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlVGVtcCA9IFtiYXRjaFNpemUsIGRpbUFPdXRlciwgZGltQk91dGVyIC8gY29tcG9uZW50c107XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IFtcbiAgICAgICAgICB7IHR5cGU6IDYgLyogaW50MzIgKi8sIGRhdGE6IGRpbUFPdXRlciB9LFxuICAgICAgICAgIHsgdHlwZTogNiAvKiBpbnQzMiAqLywgZGF0YTogZGltQk91dGVyIH0sXG4gICAgICAgICAgeyB0eXBlOiA2IC8qIGludDMyICovLCBkYXRhOiBkaW1Jbm5lciB9XG4gICAgICAgIF07XG4gICAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEoYWN0aXZhdGlvbkF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3Jtcyk7XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dGVyRGltcywgYVNoYXBlVGVtcCwgYlNoYXBlVGVtcCkpO1xuICAgICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llcyA9IFtcInJhbmtcIiwgXCJyYW5rXCJdO1xuICAgICAgICBjb25zdCBoYXNCaWFzID0gaW5wdXRzLmxlbmd0aCA+IDI7XG4gICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzJdLmRpbXMpKTtcbiAgICAgICAgICBpbnB1dERlcGVuZGVuY2llcy5wdXNoKFwicmFua1wiKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZVRlbXApKTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhdGNoUmFuayA9IG91dGVyRGltcy5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgYmF0Y2hEaW1zID0gaW50ZXJuYWxWYXJpYWJsZShcImJhdGNoRGltc1wiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGJhdGNoUmFuaywgMSk7XG4gICAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgICBjb25zdCBBID0gaW5wdXRWYXJpYWJsZShcImFcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBhUmFuaywgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgQiA9IGlucHV0VmFyaWFibGUoXCJiXCIsIGlucHV0c1sxXS5kYXRhVHlwZSwgYlJhbmssIGNvbXBvbmVudHMpO1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKFwicmVzdWx0XCIsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGVUZW1wLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgaW5wdXRWYXJpYWJsZXMgPSBbQSwgQl07XG4gICAgICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpYXNDb21wb25lbnRzID0gaXNDaGFubmVsc0xhc3QgPyBjb21wb25lbnRzIDogMTtcbiAgICAgICAgICAgIGlucHV0VmFyaWFibGVzLnB1c2goaW5wdXRWYXJpYWJsZShcImJpYXNcIiwgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcy5sZW5ndGgsIGJpYXNDb21wb25lbnRzKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHVuaWZvcm1zID0gW3sgbmFtZTogXCJkaW1fYV9vdXRlclwiLCB0eXBlOiBcImkzMlwiIH0sIHsgbmFtZTogXCJkaW1fYl9vdXRlclwiLCB0eXBlOiBcImkzMlwiIH0sIHsgbmFtZTogXCJkaW1faW5uZXJcIiwgdHlwZTogXCJpMzJcIiB9XTtcbiAgICAgICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXMoYWN0aXZhdGlvbkF0dHJpYnV0ZXMsIHVuaWZvcm1zKTtcbiAgICAgICAgICBjb25zdCBiYXNlVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZShvdXRwdXQudHlwZS50ZW5zb3IpO1xuICAgICAgICAgIGNvbnN0IGFwcGx5QWN0aXZhdGlvbiA9IGdldEFjdGl2YXRpb25TbmlwcGV0KGFjdGl2YXRpb25BdHRyaWJ1dGVzLCBvdXRwdXQudHlwZS52YWx1ZSwgYmFzZVR5cGUpO1xuICAgICAgICAgIGNvbnN0IGRlY2xhcmVGdW5jdGlvbnMgPSBtYXRNdWxSZWFkV3JpdGVGblNvdXJjZShcbiAgICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgICBoYXNCaWFzLFxuICAgICAgICAgICAgYXBwbHlBY3RpdmF0aW9uLFxuICAgICAgICAgICAgW2JhdGNoRGltcywgQSwgQiwgb3V0cHV0XSxcbiAgICAgICAgICAgIFtvdXRlckRpbXNBLCBvdXRlckRpbXNCLCBvdXRlckRpbXNdLFxuICAgICAgICAgICAgaXNDaGFubmVsc0xhc3RcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBgXG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLnJlZ2lzdGVySW50ZXJuYWxWYXJpYWJsZXMoYmF0Y2hEaW1zKS5kZWNsYXJlVmFyaWFibGVzKFxuICAgICAgICAgICAgLi4uaW5wdXRWYXJpYWJsZXMsXG4gICAgICAgICAgICBvdXRwdXRcbiAgICAgICAgICApfVxuICAke2RlY2xhcmVGdW5jdGlvbnN9XG4gICR7aXNWZWM0ID8gbWFrZU1hdE11bFBhY2tlZFZlYzRTb3VyY2UoZWxlbWVudHNQZXJUaHJlYWQsIHdvcmtncm91cFNpemUsIGRhdGFUeXBlLCBiYXRjaERpbXMpIDogbWFrZU1hdE11bFBhY2tlZFNvdXJjZShlbGVtZW50c1BlclRocmVhZCwgd29ya2dyb3VwU2l6ZSwgZGF0YVR5cGUsIGJhdGNoRGltcyl9XG4gICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIk1hdE11bFwiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgICBoaW50OiBgJHtlbGVtZW50c1BlclRocmVhZH07JHthY3RpdmF0aW9uQXR0cmlidXRlcy5hY3RpdmF0aW9ufTske2lzVmVjNH07JHtpc0NoYW5uZWxzTGFzdH1gLFxuICAgICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZSB9XSxcbiAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHsgeDogZGlzcGF0Y2hbMF0sIHk6IGRpc3BhdGNoWzFdLCB6OiBkaXNwYXRjaFsyXSB9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy8zcmQtcGFydHkvY29udjJkX21tX3dlYmdwdS50c1xuICB2YXIgY29udjJkQ29tbW9uU25pcHBldCwgY3JlYXRlQ29udjJETWF0TXVsUHJvZ3JhbUluZm87XG4gIHZhciBpbml0X2NvbnYyZF9tbV93ZWJncHUgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzLzNyZC1wYXJ0eS9jb252MmRfbW1fd2ViZ3B1LnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfbG9nKCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgaW5pdF9mdXNlX3V0aWxzKCk7XG4gICAgICBpbml0X2FjdGl2YXRpb25fdXRpbCgpO1xuICAgICAgaW5pdF9jb252X3V0aWwoKTtcbiAgICAgIGluaXRfbWF0bXVsX3BhY2tlZF93ZWJncHUoKTtcbiAgICAgIGNvbnYyZENvbW1vblNuaXBwZXQgPSAoaXNDaGFubmVsc0xhc3QsIGZpdEFPdXRlciwgZml0Qk91dGVyLCBmaXRJbm5lciwgYWRkQmlhcyA9IGZhbHNlLCBhdHRyaWJ1dGVzLCBpbm5lckVsZW1lbnRTaXplWCA9IDQsIGlubmVyRWxlbWVudFNpemVXID0gNCwgaW5uZXJFbGVtZW50U2l6ZSA9IDQsIGRhdGFUeXBlID0gXCJmMzJcIikgPT4ge1xuICAgICAgICBjb25zdCBnZXRYU25pcHBldCA9IChpbm5lckVsZW1lbnRTaXplMikgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoaW5uZXJFbGVtZW50U2l6ZTIpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgcmV0dXJuIFwicmVzRGF0YSA9IHhbeEluZGV4XTtcIjtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGByZXNEYXRhID0gdmVjMzwke2RhdGFUeXBlfT4oeFt4SW5kZXhdLCB4W3hJbmRleCArIDFdLCB4W3hJbmRleCArIDJdKTtgO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gXCJyZXNEYXRhID0geFt4SW5kZXggLyA0XTtcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5uZXJFbGVtZW50U2l6ZSAke2lubmVyRWxlbWVudFNpemUyfSBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZ2V0V1NuaXBwZXQgPSAoaW5uZXJFbGVtZW50U2l6ZTIpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGlubmVyRWxlbWVudFNpemUyKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHJldHVybiBcInJldHVybiB3W3JvdyAqIGkzMih1bmlmb3Jtcy53X3NoYXBlWzNdKSArIGNvbEluXTtcIjtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIFwicmV0dXJuIHdbcm93ICogaTMyKHVuaWZvcm1zLndfc2hhcGVbM10pIC8gNCArIGNvbEluXTtcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5uZXJFbGVtZW50U2l6ZSAke2lubmVyRWxlbWVudFNpemUyfSBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY29vcmRBU25pcHBldCA9IGlzQ2hhbm5lbHNMYXN0ID8gYFxuICAgIGxldCBjb29yZCA9IHZlYzQ8aTMyPihiYXRjaCwgeFJvdywgeENvbCwgeENoKTtcbiAgICBgIDogYFxuICAgIGxldCBjb29yZCA9IHZlYzQ8aTMyPihiYXRjaCwgeENoLCB4Um93LCB4Q29sKTtcbiAgICBgO1xuICAgICAgICBjb25zdCBjb29yZFJlc1NuaXBwZXQgPSBpc0NoYW5uZWxzTGFzdCA/IGBcbiAgICBsZXQgY29vcmRzID0gdmVjNDxpMzI+KFxuICAgICAgYmF0Y2gsXG4gICAgICByb3cgLyBvdXRXaWR0aCxcbiAgICAgIHJvdyAlIG91dFdpZHRoLFxuICAgICAgY29sKTtcbiAgICBgIDogYFxuICAgIGxldCBjb29yZHMgPSB2ZWM0PGkzMj4oXG4gICAgICBiYXRjaCxcbiAgICAgIHJvdyxcbiAgICAgIGNvbCAvIG91dFdpZHRoLFxuICAgICAgY29sICUgb3V0V2lkdGgpO1xuICAgIGA7XG4gICAgICAgIGNvbnN0IHhIZWlnaHQgPSBpc0NoYW5uZWxzTGFzdCA/IFwiaTMyKHVuaWZvcm1zLnhfc2hhcGVbMV0pXCIgOiBcImkzMih1bmlmb3Jtcy54X3NoYXBlWzJdKVwiO1xuICAgICAgICBjb25zdCB4V2lkdGggPSBpc0NoYW5uZWxzTGFzdCA/IFwiaTMyKHVuaWZvcm1zLnhfc2hhcGVbMl0pXCIgOiBcImkzMih1bmlmb3Jtcy54X3NoYXBlWzNdKVwiO1xuICAgICAgICBjb25zdCByb3cgPSBpc0NoYW5uZWxzTGFzdCA/IFwicm93XCIgOiBcImNvbFwiO1xuICAgICAgICBjb25zdCBjb2wgPSBpc0NoYW5uZWxzTGFzdCA/IFwiY29sXCIgOiBcInJvd1wiO1xuICAgICAgICBjb25zdCByZWFkWFNuaXBwZXQgPSBgXG4gICAgbGV0IGluQ2hhbm5lbHMgPSBpMzIodW5pZm9ybXMud19zaGFwZVsyXSk7XG4gICAgbGV0IG91dFdpZHRoID0gJHtpc0NoYW5uZWxzTGFzdCA/IFwiaTMyKHVuaWZvcm1zLnJlc3VsdF9zaGFwZVsyXSlcIiA6IFwiaTMyKHVuaWZvcm1zLnJlc3VsdF9zaGFwZVszXSlcIn07XG4gICAgbGV0IG91dFJvdyA9ICR7cm93fSAvIG91dFdpZHRoO1xuICAgIGxldCBvdXRDb2wgPSAke3Jvd30gJSBvdXRXaWR0aDtcblxuICAgIGxldCBXUm93ID0gJHtjb2x9IC8gKGkzMih1bmlmb3Jtcy53X3NoYXBlWzFdKSAqIGluQ2hhbm5lbHMpO1xuICAgIGxldCBXQ29sID0gJHtjb2x9IC8gaW5DaGFubmVscyAlIGkzMih1bmlmb3Jtcy53X3NoYXBlWzFdKTtcbiAgICBsZXQgeFJvdyA9IG91dFJvdyAqIHVuaWZvcm1zLnN0cmlkZVswXSArIHVuaWZvcm1zLmRpbGF0aW9uWzBdICogV1JvdyAtIHVuaWZvcm1zLnBhZFswXTtcbiAgICBsZXQgeENvbCA9IG91dENvbCAqIHVuaWZvcm1zLnN0cmlkZVsxXSArIHVuaWZvcm1zLmRpbGF0aW9uWzFdICogV0NvbCAtIHVuaWZvcm1zLnBhZFsxXTtcbiAgICBsZXQgeENoID0gJHtjb2x9ICUgaW5DaGFubmVscztcbiAgICB2YXIgcmVzRGF0YSA9ICR7dHlwZVNuaXBwZXQoaW5uZXJFbGVtZW50U2l6ZVgsIGRhdGFUeXBlKX0oMC4wKTtcbiAgICAvLyBUaGUgYm91bmRzIGNoZWNraW5nIGlzIGFsd2F5cyBuZWVkZWQgc2luY2Ugd2UgdXNlIGl0IHRvIHBhZCB6ZXJvIGZvclxuICAgIC8vIHRoZSAnc2FtZScgcGFkZGluZyB0eXBlLlxuICAgIGlmICh4Um93ID49IDAgJiYgeFJvdyA8ICR7eEhlaWdodH0gJiYgeENvbCA+PSAwICYmIHhDb2wgPCAke3hXaWR0aH0pIHtcbiAgICAgICR7Y29vcmRBU25pcHBldH1cbiAgICAgIGxldCB4SW5kZXggPSBnZXRJbmRleEZyb21Db29yZHM0RChjb29yZCwgdmVjNDxpMzI+KHVuaWZvcm1zLnhfc2hhcGUpKTtcbiAgICAgICR7Z2V0WFNuaXBwZXQoaW5uZXJFbGVtZW50U2l6ZVgpfVxuICAgIH1cbiAgICByZXR1cm4gcmVzRGF0YTtgO1xuICAgICAgICBjb25zdCBzYW1wbGVYID0gaXNDaGFubmVsc0xhc3QgPyBmaXRBT3V0ZXIgJiYgZml0SW5uZXIgPyBgXG4gICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplWH07XG4gICAgJHtyZWFkWFNuaXBwZXR9YCA6IGBcbiAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemVYfTtcbiAgICBpZiAocm93IDwgdW5pZm9ybXMuZGltX2Ffb3V0ZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2lubmVyKSB7XG4gICAgICAke3JlYWRYU25pcHBldH1cbiAgICB9XG4gICAgcmV0dXJuICR7dHlwZVNuaXBwZXQoaW5uZXJFbGVtZW50U2l6ZVgsIGRhdGFUeXBlKX0oMC4wKTtgIDogZml0SW5uZXIgJiYgZml0Qk91dGVyID8gYFxuICAgIGxldCBjb2wgPSBjb2xJbiAqICR7aW5uZXJFbGVtZW50U2l6ZVh9O1xuICAgICR7cmVhZFhTbmlwcGV0fWAgOiBgXG4gICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplWH07XG4gICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9pbm5lciAmJiBjb2wgPCB1bmlmb3Jtcy5kaW1fYl9vdXRlcikge1xuICAgICAgJHtyZWFkWFNuaXBwZXR9XG4gICAgfVxuICAgIHJldHVybiAke3R5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVYLCBkYXRhVHlwZSl9KDAuMCk7YDtcbiAgICAgICAgY29uc3Qgc2FtcGxlVyA9IGAke2dldFdTbmlwcGV0KGlubmVyRWxlbWVudFNpemVXKX1gO1xuICAgICAgICBjb25zdCByZXNUeXBlID0gdHlwZVNuaXBwZXQoaW5uZXJFbGVtZW50U2l6ZSwgZGF0YVR5cGUpO1xuICAgICAgICBjb25zdCBhVHlwZSA9IGlzQ2hhbm5lbHNMYXN0ID8gdHlwZVNuaXBwZXQoaW5uZXJFbGVtZW50U2l6ZVgsIGRhdGFUeXBlKSA6IHR5cGVTbmlwcGV0KGlubmVyRWxlbWVudFNpemVXLCBkYXRhVHlwZSk7XG4gICAgICAgIGNvbnN0IGJUeXBlID0gaXNDaGFubmVsc0xhc3QgPyB0eXBlU25pcHBldChpbm5lckVsZW1lbnRTaXplVywgZGF0YVR5cGUpIDogdHlwZVNuaXBwZXQoaW5uZXJFbGVtZW50U2l6ZVgsIGRhdGFUeXBlKTtcbiAgICAgICAgY29uc3QgYXBwbHlBY3RpdmF0aW9uID0gZ2V0QWN0aXZhdGlvblNuaXBwZXQoYXR0cmlidXRlcywgcmVzVHlwZSwgZGF0YVR5cGUpO1xuICAgICAgICBjb25zdCB1c2VyQ29kZSA9IGBcbiAgICBmbiBtbV9yZWFkQShiYXRjaDogaTMyLCByb3cgOiBpMzIsIGNvbEluIDogaTMyKSAtPiAke2FUeXBlfSB7XG4gICAgICAke2lzQ2hhbm5lbHNMYXN0ID8gc2FtcGxlWCA6IHNhbXBsZVd9XG4gICAgfVxuXG4gICAgZm4gbW1fcmVhZEIoYmF0Y2g6IGkzMiwgcm93IDogaTMyLCBjb2xJbiA6IGkzMikgLT4gJHtiVHlwZX0ge1xuICAgICAgJHtpc0NoYW5uZWxzTGFzdCA/IHNhbXBsZVcgOiBzYW1wbGVYfVxuICAgIH1cblxuICAgIGZuIG1tX3dyaXRlKGJhdGNoOiBpMzIsIHJvdyA6IGkzMiwgY29sSW4gOiBpMzIsIHZhbHVlSW4gOiAke3Jlc1R5cGV9KSB7XG4gICAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemV9O1xuICAgICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9hX291dGVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9iX291dGVyKVxuICAgICAge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVJbjtcbiAgICAgIGxldCBvdXRXaWR0aCA9ICR7aXNDaGFubmVsc0xhc3QgPyBcImkzMih1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbMl0pXCIgOiBcImkzMih1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbM10pXCJ9O1xuICAgICAgJHtjb29yZFJlc1NuaXBwZXR9XG4gICAgICAke2JpYXNTbmlwcGV0KGFkZEJpYXMpfVxuICAgICAgJHthcHBseUFjdGl2YXRpb259XG4gICAgICBzZXRPdXRwdXRBdENvb3Jkcyhjb29yZHNbMF0sIGNvb3Jkc1sxXSwgY29vcmRzWzJdLCBjb29yZHNbM10sIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9YDtcbiAgICAgICAgcmV0dXJuIHVzZXJDb2RlO1xuICAgICAgfTtcbiAgICAgIGNyZWF0ZUNvbnYyRE1hdE11bFByb2dyYW1JbmZvID0gKGlucHV0cywgYXR0cmlidXRlcywgb3V0cHV0U2hhcGUsIGRpbUFPdXRlciwgZGltQk91dGVyLCBkaW1Jbm5lciwgaGFzQmlhcywgc2VxdWVudGlhbEFjY2Vzc0J5VGhyZWFkcykgPT4ge1xuICAgICAgICBjb25zdCBpc0NoYW5uZWxzTGFzdCA9IGF0dHJpYnV0ZXMuZm9ybWF0ID09PSBcIk5IV0NcIjtcbiAgICAgICAgY29uc3QgaW5DaGFubmVscyA9IGlzQ2hhbm5lbHNMYXN0ID8gaW5wdXRzWzBdLmRpbXNbM10gOiBpbnB1dHNbMF0uZGltc1sxXTtcbiAgICAgICAgY29uc3QgYmF0Y2hTaXplID0gb3V0cHV0U2hhcGVbMF07XG4gICAgICAgIGNvbnN0IG91dFdpZHRoID0gaXNDaGFubmVsc0xhc3QgPyBvdXRwdXRTaGFwZVsyXSA6IG91dHB1dFNoYXBlWzNdO1xuICAgICAgICBjb25zdCBvdXRIZWlnaHQgPSBpc0NoYW5uZWxzTGFzdCA/IG91dHB1dFNoYXBlWzFdIDogb3V0cHV0U2hhcGVbMl07XG4gICAgICAgIGNvbnN0IG91dENoYW5uZWxzID0gaXNDaGFubmVsc0xhc3QgPyBvdXRwdXRTaGFwZVszXSA6IG91dHB1dFNoYXBlWzFdO1xuICAgICAgICBjb25zdCBpc1ZlYzQgPSBpc0NoYW5uZWxzTGFzdCAmJiAoaW5DaGFubmVscyAlIDQgPT09IDAgfHwgaW5DaGFubmVscyAlIDMgPT09IDApICYmIG91dENoYW5uZWxzICUgNCA9PT0gMDtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hYID0gaXNDaGFubmVsc0xhc3QgPyBvdXRDaGFubmVscyA6IG91dFdpZHRoICogb3V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBkaXNwYXRjaFkgPSBpc0NoYW5uZWxzTGFzdCA/IG91dFdpZHRoICogb3V0SGVpZ2h0IDogb3V0Q2hhbm5lbHM7XG4gICAgICAgIGNvbnN0IHdvcmtHcm91cFNpemUgPSBbOCwgOCwgMV07XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzUGVyVGhyZWFkID0gZGltQU91dGVyIDw9IDggPyBbNCwgMSwgMV0gOiBbNCwgNCwgMV07XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoID0gW1xuICAgICAgICAgIE1hdGguY2VpbChkaXNwYXRjaFggLyB3b3JrR3JvdXBTaXplWzBdIC8gZWxlbWVudHNQZXJUaHJlYWRbMF0pLFxuICAgICAgICAgIE1hdGguY2VpbChkaXNwYXRjaFkgLyB3b3JrR3JvdXBTaXplWzFdIC8gZWxlbWVudHNQZXJUaHJlYWRbMV0pLFxuICAgICAgICAgIE1hdGguY2VpbChiYXRjaFNpemUgLyB3b3JrR3JvdXBTaXplWzJdIC8gZWxlbWVudHNQZXJUaHJlYWRbMl0pXG4gICAgICAgIF07XG4gICAgICAgIExPR19ERUJVRyhcInZlcmJvc2VcIiwgKCkgPT4gYFtjb252MmRfbW1fd2ViZ3B1XSBkaXNwYXRjaCA9ICR7ZGlzcGF0Y2h9YCk7XG4gICAgICAgIGNvbnN0IGlubmVyRWxlbWVudFNpemUgPSBpc1ZlYzQgPyBpc0NoYW5uZWxzTGFzdCAmJiBpbkNoYW5uZWxzICUgNCAhPT0gMCA/IDMgOiA0IDogMTtcbiAgICAgICAgY29uc3QgdGlsZUFPdXRlciA9IHdvcmtHcm91cFNpemVbMV0gKiBlbGVtZW50c1BlclRocmVhZFsxXTtcbiAgICAgICAgY29uc3QgdGlsZUJPdXRlciA9IHdvcmtHcm91cFNpemVbMF0gKiBlbGVtZW50c1BlclRocmVhZFswXTtcbiAgICAgICAgY29uc3QgdGlsZUlubmVyID0gTWF0aC5tYXgod29ya0dyb3VwU2l6ZVswXSAqIGlubmVyRWxlbWVudFNpemUsIHdvcmtHcm91cFNpemVbMV0pO1xuICAgICAgICBjb25zdCBmaXRBT3V0ZXIgPSBkaW1BT3V0ZXIgJSB0aWxlQU91dGVyID09PSAwO1xuICAgICAgICBjb25zdCBmaXRCT3V0ZXIgPSBkaW1CT3V0ZXIgJSB0aWxlQk91dGVyID09PSAwO1xuICAgICAgICBjb25zdCBmaXRJbm5lciA9IGRpbUlubmVyICUgdGlsZUlubmVyID09PSAwO1xuICAgICAgICBjb25zdCBlbGVtZW50c1NpemUgPSBpc1ZlYzQgPyBbaW5uZXJFbGVtZW50U2l6ZSwgNCwgNF0gOiBbMSwgMSwgMV07XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IFtcbiAgICAgICAgICB7IHR5cGU6IDYgLyogaW50MzIgKi8sIGRhdGE6IGRpbUFPdXRlciB9LFxuICAgICAgICAgIHsgdHlwZTogNiAvKiBpbnQzMiAqLywgZGF0YTogZGltQk91dGVyIH0sXG4gICAgICAgICAgeyB0eXBlOiA2IC8qIGludDMyICovLCBkYXRhOiBkaW1Jbm5lciB9LFxuICAgICAgICAgIHsgdHlwZTogNiAvKiBpbnQzMiAqLywgZGF0YTogW2F0dHJpYnV0ZXMucGFkc1swXSwgYXR0cmlidXRlcy5wYWRzWzFdXSB9LFxuICAgICAgICAgIHsgdHlwZTogNiAvKiBpbnQzMiAqLywgZGF0YTogYXR0cmlidXRlcy5zdHJpZGVzIH0sXG4gICAgICAgICAgeyB0eXBlOiA2IC8qIGludDMyICovLCBkYXRhOiBhdHRyaWJ1dGVzLmRpbGF0aW9ucyB9XG4gICAgICAgIF07XG4gICAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEoYXR0cmlidXRlcywgcHJvZ3JhbVVuaWZvcm1zKTtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzBdLmRpbXMsIGlucHV0c1sxXS5kaW1zKSk7XG4gICAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzID0gW1wicmFua1wiLCBcInJhbmtcIl07XG4gICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzJdLmRpbXMpKTtcbiAgICAgICAgICBpbnB1dERlcGVuZGVuY2llcy5wdXNoKFwicmFua1wiKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZSkpO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgdW5pZm9ybXMgPSBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiZGltX2Ffb3V0ZXJcIiwgdHlwZTogXCJpMzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImRpbV9iX291dGVyXCIsIHR5cGU6IFwiaTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJkaW1faW5uZXJcIiwgdHlwZTogXCJpMzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInBhZFwiLCB0eXBlOiBcImkzMlwiLCBsZW5ndGg6IDIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJzdHJpZGVcIiwgdHlwZTogXCJpMzJcIiwgbGVuZ3RoOiAyIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiZGlsYXRpb25cIiwgdHlwZTogXCJpMzJcIiwgbGVuZ3RoOiAyIH1cbiAgICAgICAgICBdO1xuICAgICAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3JtcyhhdHRyaWJ1dGVzLCB1bmlmb3Jtcyk7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGlzVmVjNCA/IDQgOiAxO1xuICAgICAgICAgIGNvbnN0IHQgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgICBsZXQgZGVjbGFyZUZ1bmN0aW9ucyA9IGBcbiAgICAgIGZuIHNldE91dHB1dEF0SW5kZXgoZmxhdEluZGV4IDogaTMyLCB2YWx1ZSA6ICR7aXNWZWM0ID8gYHZlYzQ8JHt0fT5gIDogdH0pIHtcbiAgICAgICAgcmVzdWx0W2ZsYXRJbmRleF0gPSAke2lzVmVjNCA/IGB2ZWM0PCR7dH0+YCA6IHR9KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZuIHNldE91dHB1dEF0Q29vcmRzKGQwIDogaTMyLCBkMSA6IGkzMiwgZDIgOiBpMzIsIGQzIDogaTMyLCB2YWx1ZSA6ICR7aXNWZWM0ID8gYHZlYzQ8JHt0fT5gIDogdH0pIHtcbiAgICAgICAgbGV0IGZsYXRJbmRleCA9IGdldE91dHB1dEluZGV4RnJvbUNvb3Jkcyh2ZWM0PGkzMj4oZDAsIGQxLCBkMiwgZDMpKTtcbiAgICAgICAgc2V0T3V0cHV0QXRJbmRleChmbGF0SW5kZXggJHtpc1ZlYzQgPyBcIi8gNFwiIDogXCJcIn0sIHZhbHVlKTtcbiAgICAgIH1gO1xuICAgICAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKFxuICAgICAgICAgICAgXCJ4XCIsXG4gICAgICAgICAgICBpbnB1dHNbMF0uZGF0YVR5cGUsXG4gICAgICAgICAgICBpbnB1dHNbMF0uZGltcy5sZW5ndGgsXG4gICAgICAgICAgICBpbm5lckVsZW1lbnRTaXplID09PSAzID8gMSA6IGlubmVyRWxlbWVudFNpemVcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHcgPSBpbnB1dFZhcmlhYmxlKFwid1wiLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgaW5wdXRWYXJpYWJsZXMgPSBbeCwgd107XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJyZXN1bHRcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgICBjb25zdCBiaWFzID0gaW5wdXRWYXJpYWJsZShcImJpYXNcIiwgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcy5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICAgICAgaW5wdXRWYXJpYWJsZXMucHVzaChiaWFzKTtcbiAgICAgICAgICAgIGRlY2xhcmVGdW5jdGlvbnMgKz0gYFxuICAgICAgICBmbiBnZXRCaWFzQnlPdXRwdXRDb29yZHMoY29vcmRzIDogdmVjNDxpMzI+KSAtPiAke2lzVmVjNCA/IGB2ZWM0PCR7dH0+YCA6IHR9IHtcbiAgICAgICAgICByZXR1cm4gYmlhc1tjb29yZHMuJHtpc0NoYW5uZWxzTGFzdCA/IFwid1wiIDogXCJ5XCJ9JHtpc1ZlYzQgPyBcIi8gNFwiIDogXCJcIn1dO1xuICAgICAgICB9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgJHt1dGlsRnVuY3Rpb25zKFwidW5pZm9ybXMucmVzdWx0X3N0cmlkZXNcIil9XG4gICAgICAgIC8vc3RydWN0IFVuaWZvcm1zIHsgeFNoYXBlIDogdmVjNDxpMzI+LCB3U2hhcGUgOiB2ZWM0PGkzMj4sIG91dFNoYXBlIDogdmVjNDxpMzI+LFxuICAgICAgICAvLyAgb3V0U2hhcGVTdHJpZGVzOiB2ZWMzPGkzMj4sIGZpbHRlckRpbXMgOiB2ZWMyPGkzMj4sIHBhZCA6IHZlYzI8aTMyPiwgc3RyaWRlIDogdmVjMjxpMzI+LFxuICAgICAgICAvLyAgZGlsYXRpb24gOiB2ZWMyPGkzMj4sIGRpbUFPdXRlciA6IGkzMiwgZGltQk91dGVyIDogaTMyLCBkaW1Jbm5lciA6IGkzMiB9O1xuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFyaWFibGVzLCBvdXRwdXQpfVxuICAgICAgICAke2RlY2xhcmVGdW5jdGlvbnN9XG4gICAgICAgICR7Y29udjJkQ29tbW9uU25pcHBldChcbiAgICAgICAgICAgIGlzQ2hhbm5lbHNMYXN0LFxuICAgICAgICAgICAgZml0QU91dGVyLFxuICAgICAgICAgICAgZml0Qk91dGVyLFxuICAgICAgICAgICAgZml0SW5uZXIsXG4gICAgICAgICAgICBoYXNCaWFzLFxuICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGVsZW1lbnRzU2l6ZVswXSxcbiAgICAgICAgICAgIGVsZW1lbnRzU2l6ZVsxXSxcbiAgICAgICAgICAgIGVsZW1lbnRzU2l6ZVsyXSxcbiAgICAgICAgICAgIHRcbiAgICAgICAgICApfVxuICAgICAgICAke2lzVmVjNCA/IG1ha2VNYXRNdWxQYWNrZWRWZWM0U291cmNlKGVsZW1lbnRzUGVyVGhyZWFkLCB3b3JrR3JvdXBTaXplLCB0LCB2b2lkIDAsICFpc0NoYW5uZWxzTGFzdCwgdGlsZUlubmVyKSA6IG1ha2VNYXRNdWxQYWNrZWRTb3VyY2UoXG4gICAgICAgICAgICBlbGVtZW50c1BlclRocmVhZCxcbiAgICAgICAgICAgIHdvcmtHcm91cFNpemUsXG4gICAgICAgICAgICB0LFxuICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgIWlzQ2hhbm5lbHNMYXN0LFxuICAgICAgICAgICAgdGlsZUlubmVyLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzXG4gICAgICAgICAgKX1gO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiQ29udjJETWF0TXVsXCIsXG4gICAgICAgICAgc2hhZGVyQ2FjaGU6IHtcbiAgICAgICAgICAgIGhpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9OyR7aW5uZXJFbGVtZW50U2l6ZX07JHtpc1ZlYzR9OyR7Zml0QU91dGVyfTske2ZpdEJPdXRlcn07JHtmaXRJbm5lcn07JHt0aWxlQU91dGVyfTske3RpbGVCT3V0ZXJ9OyR7dGlsZUlubmVyfWAsXG4gICAgICAgICAgICBpbnB1dERlcGVuZGVuY2llc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBkaXNwYXRjaFswXSwgeTogZGlzcGF0Y2hbMV0sIHo6IGRpc3BhdGNoWzJdIH0sXG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2VcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2NvbnYtZ3JvdXBlZC50c1xuICB2YXIgY3JlYXRlR3JvdXBlZENvbnZQcm9ncmFtSW5mbywgY3JlYXRlR3JvdXBlZENvbnZWZWN0b3JpemVQcm9ncmFtSW5mbztcbiAgdmFyIGluaXRfY29udl9ncm91cGVkID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9jb252LWdyb3VwZWQudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgaW5pdF9jb252KCk7XG4gICAgICBpbml0X2Z1c2VfdXRpbHMoKTtcbiAgICAgIGNyZWF0ZUdyb3VwZWRDb252UHJvZ3JhbUluZm8gPSAoaW5wdXRzLCBhdHRyaWJ1dGVzLCBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBoYXNCaWFzID0gaW5wdXRzLmxlbmd0aCA+IDI7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NCaWFzID0gaGFzQmlhcyA/IFwidmFsdWUgKz0gYltvdXRwdXRfY2hhbm5lbF07XCIgOiBcIlwiO1xuICAgICAgICBjb25zdCB4U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgY29uc3Qgd1NoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG4gICAgICAgIGNvbnN0IG91dHB1dENoYW5uZWxzUGVyR3JvdXAgPSB3U2hhcGVbMF0gLyBhdHRyaWJ1dGVzLmdyb3VwO1xuICAgICAgICBjb25zdCBpc0NoYW5uZWxMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09IFwiTkhXQ1wiO1xuICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGNhbGN1bGF0ZU91dHB1dFNoYXBlKFxuICAgICAgICAgIHhTaGFwZSxcbiAgICAgICAgICB3U2hhcGUsXG4gICAgICAgICAgYXR0cmlidXRlcy5kaWxhdGlvbnMsXG4gICAgICAgICAgYXR0cmlidXRlcy5wYWRzLFxuICAgICAgICAgIGF0dHJpYnV0ZXMuc3RyaWRlcyxcbiAgICAgICAgICBpc0NoYW5uZWxMYXN0XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IFtcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0U2l6ZSB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBhdHRyaWJ1dGVzLmRpbGF0aW9ucyB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBbYXR0cmlidXRlcy5zdHJpZGVzWzBdLCBhdHRyaWJ1dGVzLnN0cmlkZXNbMV1dIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IFthdHRyaWJ1dGVzLnBhZHNbMF0sIGF0dHJpYnV0ZXMucGFkc1sxXV0gfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0Q2hhbm5lbHNQZXJHcm91cCB9XG4gICAgICAgIF07XG4gICAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3Jtc0RhdGEoYXR0cmlidXRlcywgcHJvZ3JhbVVuaWZvcm1zKTtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoeFNoYXBlLCB3U2hhcGUpKTtcbiAgICAgICAgY29uc3QgaW5wdXREZXBlbmRlbmNpZXMgPSBbXCJyYW5rXCIsIFwicmFua1wiXTtcbiAgICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMl0uZGltcykpO1xuICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzLnB1c2goXCJyYW5rXCIpO1xuICAgICAgICB9XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dHB1dFNoYXBlKSk7XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcIm91dHB1dFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgICAgICAgY29uc3QgYmFzZVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUob3V0cHV0LnR5cGUudGVuc29yKTtcbiAgICAgICAgICBjb25zdCBhcHBseUFjdGl2YXRpb24gPSBnZXRBY3RpdmF0aW9uU25pcHBldChhdHRyaWJ1dGVzLCBvdXRwdXQudHlwZS52YWx1ZSwgYmFzZVR5cGUpO1xuICAgICAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKFwieFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIHhTaGFwZS5sZW5ndGgpO1xuICAgICAgICAgIGNvbnN0IHcgPSBpbnB1dFZhcmlhYmxlKFwid1wiLCBpbnB1dHNbMV0uZGF0YVR5cGUsIHdTaGFwZS5sZW5ndGgpO1xuICAgICAgICAgIGNvbnN0IGlucHV0VmFycyA9IFt4LCB3XTtcbiAgICAgICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICAgICAgaW5wdXRWYXJzLnB1c2goaW5wdXRWYXJpYWJsZShcImJcIiwgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcy5sZW5ndGgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdW5pZm9ybXMgPSBbXG4gICAgICAgICAgICB7IG5hbWU6IFwib3V0cHV0X3NpemVcIiwgdHlwZTogXCJ1MzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImRpbGF0aW9uc1wiLCB0eXBlOiBcInUzMlwiLCBsZW5ndGg6IGF0dHJpYnV0ZXMuZGlsYXRpb25zLmxlbmd0aCB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInN0cmlkZXNcIiwgdHlwZTogXCJ1MzJcIiwgbGVuZ3RoOiAyIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwicGFkc1wiLCB0eXBlOiBcInUzMlwiLCBsZW5ndGg6IDIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJvdXRwdXRfY2hhbm5lbHNfcGVyX2dyb3VwXCIsIHR5cGU6IFwidTMyXCIgfVxuICAgICAgICAgIF07XG4gICAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zKGF0dHJpYnV0ZXMsIHVuaWZvcm1zKTtcbiAgICAgICAgICByZXR1cm4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFycywgb3V0cHV0KX1cblxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMub3V0cHV0X3NpemVcIil9XG5cbiAgICBsZXQgb3V0cHV0SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcyhcImdsb2JhbF9pZHhcIil9O1xuICAgIGxldCBiYXRjaDogdTMyID0gb3V0cHV0SW5kaWNlc1swXTtcbiAgICBsZXQgb3V0cHV0X2NoYW5uZWw6IHUzMiA9IG91dHB1dEluZGljZXNbJHtpc0NoYW5uZWxMYXN0ID8gMyA6IDF9XTtcbiAgICBsZXQgeFJDQ29ybmVyOiB2ZWMyPHUzMj4gPSB2ZWMyPHUzMj4ob3V0cHV0SW5kaWNlc1ske2lzQ2hhbm5lbExhc3QgPyAxIDogMn1dLCBvdXRwdXRJbmRpY2VzWyR7aXNDaGFubmVsTGFzdCA/IDIgOiAzfV0pICogdW5pZm9ybXMuc3RyaWRlcyAtIHVuaWZvcm1zLnBhZHM7XG4gICAgbGV0IGdyb3VwX2lkOiB1MzIgPSBvdXRwdXRfY2hhbm5lbCAvIHVuaWZvcm1zLm91dHB1dF9jaGFubmVsc19wZXJfZ3JvdXA7XG5cbiAgICB2YXIgdmFsdWU6ICR7b3V0cHV0LnR5cGUudmFsdWV9ID0gJHtvdXRwdXQudHlwZS52YWx1ZX0oMCk7XG4gICAgZm9yICh2YXIgd0luQ2hhbm5lbDogdTMyID0gMHU7IHdJbkNoYW5uZWwgPCB1bmlmb3Jtcy53X3NoYXBlWzFdOyB3SW5DaGFubmVsKyspIHtcbiAgICAgIGxldCBpbnB1dF9jaGFubmVsID0gZ3JvdXBfaWQgKiB1bmlmb3Jtcy53X3NoYXBlWzFdICsgd0luQ2hhbm5lbDtcbiAgICAgIGZvciAodmFyIHdIZWlnaHQ6IHUzMiA9IDB1OyB3SGVpZ2h0IDwgdW5pZm9ybXMud19zaGFwZVsyXTsgd0hlaWdodCsrKSB7XG4gICAgICAgIGxldCB4SGVpZ2h0ID0geFJDQ29ybmVyLnggKyB3SGVpZ2h0ICogdW5pZm9ybXMuZGlsYXRpb25zWzBdO1xuXG4gICAgICAgIGlmICh4SGVpZ2h0IDwgMHUgfHwgeEhlaWdodCA+PSB1bmlmb3Jtcy54X3NoYXBlWyR7aXNDaGFubmVsTGFzdCA/IDEgOiAyfV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIHdXaWR0aDogdTMyID0gMHU7IHdXaWR0aCA8IHVuaWZvcm1zLndfc2hhcGVbM107IHdXaWR0aCsrKSB7XG4gICAgICAgICAgbGV0IHhXaWR0aCA9IHhSQ0Nvcm5lci55ICsgd1dpZHRoICogdW5pZm9ybXMuZGlsYXRpb25zWzFdO1xuICAgICAgICAgIGlmICh4V2lkdGggPCAwdSB8fCB4V2lkdGggPj0gdW5pZm9ybXMueF9zaGFwZVske2lzQ2hhbm5lbExhc3QgPyAyIDogM31dKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgeFZhbCA9ICR7aXNDaGFubmVsTGFzdCA/IHguZ2V0KFwiYmF0Y2hcIiwgXCJ4SGVpZ2h0XCIsIFwieFdpZHRoXCIsIFwiaW5wdXRfY2hhbm5lbFwiKSA6IHguZ2V0KFwiYmF0Y2hcIiwgXCJpbnB1dF9jaGFubmVsXCIsIFwieEhlaWdodFwiLCBcInhXaWR0aFwiKX07XG4gICAgICAgICAgbGV0IHdWYWwgPSAke3cuZ2V0KFwib3V0cHV0X2NoYW5uZWxcIiwgXCJ3SW5DaGFubmVsXCIsIFwid0hlaWdodFwiLCBcIndXaWR0aFwiKX07XG4gICAgICAgICAgdmFsdWUgKz0geFZhbCp3VmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgICR7cHJvY2Vzc0JpYXN9XG4gICAgJHthcHBseUFjdGl2YXRpb259XG4gICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIsIFwidmFsdWVcIil9XG4gIH1gO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiR3JvdXBlZENvbnZcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBoaW50OiBhdHRyaWJ1dGVzLmNhY2hlS2V5LCBpbnB1dERlcGVuZGVuY2llcyB9LFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbe1xuICAgICAgICAgICAgICBkaW1zOiBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbiA/IHNxdWVlemVPdXRwdXRTaGFwZUZ1bmN0aW9uKG91dHB1dFNoYXBlKSA6IG91dHB1dFNoYXBlLFxuICAgICAgICAgICAgICBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlXG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHsgeDogTWF0aC5jZWlsKFxuICAgICAgICAgICAgICBvdXRwdXRTaXplIC8gNjRcbiAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICkgfSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNyZWF0ZUdyb3VwZWRDb252VmVjdG9yaXplUHJvZ3JhbUluZm8gPSAoaW5wdXRzLCBhdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNCaWFzID0gaW5wdXRzLmxlbmd0aCA+IDI7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKG91dHB1dFNoYXBlWzNdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0TnVtYmVyID0gZ2V0TWF4Q29tcG9uZW50cyhvdXRwdXRTaGFwZVsyXSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSkgLyBjb21wb25lbnRzIC8gb3V0cHV0TnVtYmVyO1xuICAgICAgICBjb25zdCB4U2hhcGUgPSBbaW5wdXRzWzBdLmRpbXNbMF0sIGlucHV0c1swXS5kaW1zWzFdLCBpbnB1dHNbMF0uZGltc1syXSwgaW5wdXRzWzBdLmRpbXNbM10gLyBjb21wb25lbnRzXTtcbiAgICAgICAgY29uc3Qgd1NoYXBlID0gW2lucHV0c1sxXS5kaW1zWzBdLCBpbnB1dHNbMV0uZGltc1sxXSwgaW5wdXRzWzFdLmRpbXNbMl0sIGlucHV0c1sxXS5kaW1zWzNdIC8gY29tcG9uZW50c107XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlSW5TaGFkZXIgPSBbb3V0cHV0U2hhcGVbMF0sIG91dHB1dFNoYXBlWzFdLCBvdXRwdXRTaGFwZVsyXSwgb3V0cHV0U2hhcGVbM10gLyBjb21wb25lbnRzXTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0gW1xuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBvdXRwdXRTaXplIH0sXG4gICAgICAgICAgeyB0eXBlOiA2IC8qIGludDMyICovLCBkYXRhOiBbYXR0cmlidXRlcy5zdHJpZGVzWzBdLCBhdHRyaWJ1dGVzLnN0cmlkZXNbMV1dIH0sXG4gICAgICAgICAgeyB0eXBlOiA2IC8qIGludDMyICovLCBkYXRhOiBbYXR0cmlidXRlcy5wYWRzWzBdLCBhdHRyaWJ1dGVzLnBhZHNbMV1dIH1cbiAgICAgICAgXTtcbiAgICAgICAgYXBwZW5kQWN0aXZhdGlvblVuaWZvcm1zRGF0YShhdHRyaWJ1dGVzLCBwcm9ncmFtVW5pZm9ybXMpO1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyh4U2hhcGUsIHdTaGFwZSwgb3V0cHV0U2hhcGVJblNoYWRlcikpO1xuICAgICAgICBjb25zdCB4TnVtYmVyID0gKG91dHB1dE51bWJlciAtIDEpICogYXR0cmlidXRlcy5zdHJpZGVzWzFdICsgd1NoYXBlWzFdO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZUluU2hhZGVyLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgYmFzZVR5cGUgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUob3V0cHV0LnR5cGUudGVuc29yKTtcbiAgICAgICAgICBjb25zdCBhcHBseUFjdGl2YXRpb24gPSBnZXRBY3RpdmF0aW9uU25pcHBldChhdHRyaWJ1dGVzLCBvdXRwdXQudHlwZS52YWx1ZSwgYmFzZVR5cGUpO1xuICAgICAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKFwieFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIHhTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICAgIGNvbnN0IHcgPSBpbnB1dFZhcmlhYmxlKFwid1wiLCBpbnB1dHNbMV0uZGF0YVR5cGUsIHdTaGFwZS5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICAgIGNvbnN0IGlucHV0VmFycyA9IFt4LCB3XTtcbiAgICAgICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICAgICAgaW5wdXRWYXJzLnB1c2goaW5wdXRWYXJpYWJsZShcImJcIiwgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcywgY29tcG9uZW50cykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwcm9jZXNzQmlhcyA9IGhhc0JpYXMgPyBcInZhbHVlICs9IGJbb3V0cHV0X2NoYW5uZWxdO1wiIDogXCJcIjtcbiAgICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJvdXRwdXRfc2l6ZVwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwic3RyaWRlc1wiLCB0eXBlOiBcImkzMlwiLCBsZW5ndGg6IDIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJwYWRzXCIsIHR5cGU6IFwiaTMyXCIsIGxlbmd0aDogMiB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXMoYXR0cmlidXRlcywgdW5pZm9ybXMpO1xuICAgICAgICAgIHJldHVybiBgXG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoLi4uaW5wdXRWYXJzLCBvdXRwdXQpfVxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMub3V0cHV0X3NpemVcIil9XG4gICAgbGV0IHdpZHRoMCA9IHVuaWZvcm1zLm91dHB1dF9zaGFwZVszXTtcbiAgICBsZXQgb3V0cHV0X2NoYW5uZWwgPSBnbG9iYWxfaWR4ICUgd2lkdGgwO1xuICAgIHZhciBpbmRleDEgPSBnbG9iYWxfaWR4IC8gd2lkdGgwO1xuICAgIGxldCB3aWR0aDEgPSB1bmlmb3Jtcy5vdXRwdXRfc2hhcGVbMl0gLyAke291dHB1dE51bWJlcn11O1xuICAgIGxldCBjb2wgPSAoaW5kZXgxICUgd2lkdGgxKSAqICR7b3V0cHV0TnVtYmVyfXU7XG4gICAgaW5kZXgxID0gaW5kZXgxIC8gd2lkdGgxO1xuICAgIGxldCByb3cgPSBpbmRleDEgJSB1bmlmb3Jtcy5vdXRwdXRfc2hhcGVbMV07XG4gICAgbGV0IGJhdGNoID0gaW5kZXgxIC8gdW5pZm9ybXMub3V0cHV0X3NoYXBlWzFdO1xuXG4gICAgbGV0IHhfY29ybmVyID0gdmVjMjxpMzI+KGkzMihyb3cpLCBpMzIoY29sKSkgKiB1bmlmb3Jtcy5zdHJpZGVzIC0gdW5pZm9ybXMucGFkcztcblxuICAgIHZhciB4X3ZhbHM6IGFycmF5PCR7eC50eXBlLnZhbHVlfSwgJHt4TnVtYmVyfT47XG4gICAgdmFyIHZhbHVlczogYXJyYXk8JHtvdXRwdXQudHlwZS52YWx1ZX0sICR7b3V0cHV0TnVtYmVyfT47XG4gICAgbGV0IGlucHV0X2NoYW5uZWwgPSBvdXRwdXRfY2hhbm5lbDtcbiAgICAvLyBVc2UgY29uc3RhbnQgaW5zdGVhZCBvZiB1bmlmb3JtIGNhbiBnaXZlIGJldHRlciBwZXJmb3JtYW5jZSBmb3IgdydzIGhlaWdodC93aWR0aC5cbiAgICBmb3IgKHZhciB3X2hlaWdodDogdTMyID0gMHU7IHdfaGVpZ2h0IDwgJHt3U2hhcGVbMF19OyB3X2hlaWdodCsrKSB7XG4gICAgICBsZXQgeF9oZWlnaHQgPSB4X2Nvcm5lci54ICsgaTMyKHdfaGVpZ2h0KTtcbiAgICAgIGlmICh4X2hlaWdodCA+PSAwICYmIHUzMih4X2hlaWdodCkgPCB1bmlmb3Jtcy54X3NoYXBlWzFdKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgJHt4TnVtYmVyfTsgaSsrKSB7XG4gICAgICAgICAgbGV0IHhfd2lkdGggPSB4X2Nvcm5lci55ICsgaTtcbiAgICAgICAgICBpZiAoeF93aWR0aCA+PSAwICYmIHUzMih4X3dpZHRoKSA8IHVuaWZvcm1zLnhfc2hhcGVbMl0pIHtcbiAgICAgICAgICAgIHhfdmFsc1tpXSA9ICR7eC5nZXQoXCJiYXRjaFwiLCBcInUzMih4X2hlaWdodClcIiwgXCJ1MzIoeF93aWR0aClcIiwgXCJpbnB1dF9jaGFubmVsXCIpfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeF92YWxzW2ldID0gJHt4LnR5cGUudmFsdWV9KDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciB3X3dpZHRoOiB1MzIgPSAwdTsgd193aWR0aCA8ICR7d1NoYXBlWzFdfTsgd193aWR0aCsrKSB7XG4gICAgICAgICAgbGV0IHdfdmFsID0gJHt3LmdldChcIndfaGVpZ2h0XCIsIFwid193aWR0aFwiLCBcIjBcIiwgXCJvdXRwdXRfY2hhbm5lbFwiKX07XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHtvdXRwdXROdW1iZXJ9dTsgaSsrKSB7XG4gICAgICAgICAgICB2YWx1ZXNbaV0gPSBmbWEoeF92YWxzW2kgKiB1MzIodW5pZm9ybXMuc3RyaWRlc1sxXSkgKyB3X3dpZHRoXSwgd192YWwsIHZhbHVlc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHtvdXRwdXROdW1iZXJ9dTsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAke3Byb2Nlc3NCaWFzfVxuICAgICAgJHthcHBseUFjdGl2YXRpb259XG4gICAgICAke291dHB1dC5zZXQoXCJiYXRjaFwiLCBcInJvd1wiLCBcImNvbCArIGlcIiwgXCJvdXRwdXRfY2hhbm5lbFwiLCBcInZhbHVlXCIpfTtcbiAgICB9XG4gIH1gO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiR3JvdXBlZENvbnYtVmVjdG9yaXplXCIsXG4gICAgICAgICAgc2hhZGVyQ2FjaGU6IHtcbiAgICAgICAgICAgIGhpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9OyR7Y29tcG9uZW50c307JHtvdXRwdXROdW1iZXJ9OyR7eE51bWJlcn07JHt3U2hhcGVbMF19OyR7d1NoYXBlWzFdfWAsXG4gICAgICAgICAgICBpbnB1dERlcGVuZGVuY2llczogaGFzQmlhcyA/IFtcInJhbmtcIiwgXCJyYW5rXCIsIFwidHlwZVwiXSA6IFtcInJhbmtcIiwgXCJyYW5rXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogW3sgZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGUgfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgb3V0cHV0U2l6ZSAvIDY0XG4gICAgICAgICAgICAgIC8qIHdvcmtncm91cCBzaXplICovXG4gICAgICAgICAgICApIH0sXG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2VcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL21hdG11bC50c1xuICB2YXIgY3JlYXRlTmFpdmVNYXRtdWxQcm9ncmFtSW5mbywgdmFsaWRhdGVJbnB1dHM4LCBtYXRNdWw7XG4gIHZhciBpbml0X21hdG11bCA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvbWF0bXVsLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfdXRpbCgpO1xuICAgICAgaW5pdF9tYXRtdWxfcGFja2VkX3dlYmdwdSgpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIGluaXRfZnVzZV91dGlscygpO1xuICAgICAgY3JlYXRlTmFpdmVNYXRtdWxQcm9ncmFtSW5mbyA9IChpbnB1dHMsIGFjdGl2YXRpb25BdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZSwgcmVzaGFwZWRPdXRwdXRTaGFwZSwgaXNDaGFubmVsc0xhc3QgPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zdCBhU2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgY29uc3QgYlNoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG4gICAgICAgIGNvbnN0IE0gPSBhU2hhcGVbYVNoYXBlLmxlbmd0aCAtIDJdO1xuICAgICAgICBjb25zdCBOID0gYlNoYXBlW2JTaGFwZS5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgSyA9IGFTaGFwZVthU2hhcGUubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKE4pO1xuICAgICAgICBjb25zdCBhQ29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMoSyk7XG4gICAgICAgIGNvbnN0IG91dHB1dE51bWJlciA9IGdldE1heENvbXBvbmVudHMoTSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSkgLyBjb21wb25lbnRzIC8gb3V0cHV0TnVtYmVyO1xuICAgICAgICBjb25zdCBoYXNCaWFzID0gaW5wdXRzLmxlbmd0aCA+IDI7XG4gICAgICAgIGNvbnN0IG91dGVyRGltcyA9IHJlc2hhcGVkT3V0cHV0U2hhcGUgPyByZXNoYXBlZE91dHB1dFNoYXBlLnNsaWNlKDAsIC0yKSA6IG91dHB1dFNoYXBlLnNsaWNlKDAsIC0yKTtcbiAgICAgICAgY29uc3QgYmF0Y2hTaXplID0gU2hhcGVVdGlsLnNpemUob3V0ZXJEaW1zKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGVJblNoYWRlciA9IFtiYXRjaFNpemUsIE0sIE5dO1xuICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXMgPSBbXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IG91dHB1dFNpemUgfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogTSB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBOIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IEsgfVxuICAgICAgICBdO1xuICAgICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhKGFjdGl2YXRpb25BdHRyaWJ1dGVzLCBwcm9ncmFtVW5pZm9ybXMpO1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRlckRpbXMsIGFTaGFwZSwgYlNoYXBlKSk7XG4gICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzJdLmRpbXMpKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZUluU2hhZGVyKSk7XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBiYXRjaERpbXMgPSBpbnRlcm5hbFZhcmlhYmxlKFwiYmF0Y2hfZGltc1wiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dGVyRGltcy5sZW5ndGgpO1xuICAgICAgICAgIGNvbnN0IGEgPSBpbnB1dFZhcmlhYmxlKFwiYVwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGFTaGFwZS5sZW5ndGgsIGFDb21wb25lbnRzKTtcbiAgICAgICAgICBjb25zdCBiID0gaW5wdXRWYXJpYWJsZShcImJcIiwgaW5wdXRzWzFdLmRhdGFUeXBlLCBiU2hhcGUubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcIm91dHB1dFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlSW5TaGFkZXIubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgICBjb25zdCBiYXNlVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZShvdXRwdXQudHlwZS50ZW5zb3IpO1xuICAgICAgICAgIGNvbnN0IGFwcGx5QWN0aXZhdGlvbiA9IGdldEFjdGl2YXRpb25TbmlwcGV0KGFjdGl2YXRpb25BdHRyaWJ1dGVzLCBvdXRwdXQudHlwZS52YWx1ZSwgYmFzZVR5cGUpO1xuICAgICAgICAgIGNvbnN0IGlucHV0VmFyaWFibGVzID0gW2EsIGJdO1xuICAgICAgICAgIGxldCBwcm9jZXNzQmlhcyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpYXNDb21wb25lbnRzID0gaXNDaGFubmVsc0xhc3QgPyBjb21wb25lbnRzIDogMTtcbiAgICAgICAgICAgIGlucHV0VmFyaWFibGVzLnB1c2goaW5wdXRWYXJpYWJsZShcImJpYXNcIiwgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcy5sZW5ndGgsIGJpYXNDb21wb25lbnRzKSk7XG4gICAgICAgICAgICBwcm9jZXNzQmlhcyA9IGAke2lzQ2hhbm5lbHNMYXN0ID8gYHZhbHVlICs9IGJpYXNbY29sIC8gJHtiaWFzQ29tcG9uZW50c31dO2AgOiBgdmFsdWUgKz0gJHtvdXRwdXQudHlwZS52YWx1ZX0oYmlhc1tyb3cgKyBpXSk7YH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvdXRlckRpbXNBID0gYVNoYXBlLnNsaWNlKDAsIC0yKTtcbiAgICAgICAgICBjb25zdCBvdXRlckRpbXNCID0gYlNoYXBlLnNsaWNlKDAsIC0yKTtcbiAgICAgICAgICBjb25zdCBicm9hZENhc3RBRGltcyA9IGdldEJyb2FkY2FzdERpbXMob3V0ZXJEaW1zQSwgb3V0ZXJEaW1zKTtcbiAgICAgICAgICBjb25zdCBicm9hZENhc3RCRGltcyA9IGdldEJyb2FkY2FzdERpbXMob3V0ZXJEaW1zQiwgb3V0ZXJEaW1zKTtcbiAgICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJvdXRwdXRfc2l6ZVwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiTVwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiTlwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiS1wiLCB0eXBlOiBcInUzMlwiIH1cbiAgICAgICAgICBdO1xuICAgICAgICAgIGFwcGVuZEFjdGl2YXRpb25Vbmlmb3JtcyhhY3RpdmF0aW9uQXR0cmlidXRlcywgdW5pZm9ybXMpO1xuICAgICAgICAgIGNvbnN0IGdldEluZGljZXMgPSAodmFyaWFibGUsIGJyb2FkQ2FzdERpbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmsgPSB2YXJpYWJsZS5yYW5rO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHZhcmlhYmxlLm5hbWU7XG4gICAgICAgICAgICBpZiAocmFuayA9PT0gMikge1xuICAgICAgICAgICAgICByZXR1cm4gYHZhciAke25hbWV9X2luZGljZXMgPSAke3ZhcmlhYmxlLnR5cGUuaW5kaWNlc30oMHUsIDB1KTtgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmF0Y2hSYW5rID0gYmF0Y2hEaW1zLnJhbms7XG4gICAgICAgICAgICBsZXQgcmVzU3RyID0gYHZhciAke25hbWV9X2luZGljZXM6ICR7dmFyaWFibGUudHlwZS5pbmRpY2VzfTtgO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHJhbmsgLSAyIC0gMSwgaiA9IGJhdGNoUmFuayAtIDE7IGkgPj0gMDsgaS0tLCBqLS0pIHtcbiAgICAgICAgICAgICAgcmVzU3RyICs9IGBcbiR7bmFtZX1faW5kaWNlc1ske2l9XSA9ICR7YmF0Y2hSYW5rID4gMSA/IGBiYXRjaF9pbmRpY2VzWyR7an1dYCA6IFwiYmF0Y2hfaW5kaWNlc1wifTtgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJvYWRDYXN0RGltcy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgICAgICAgIHJlc1N0ciArPSBgXG4ke25hbWV9X2luZGljZXNbJHtpfV0gPSAwO2A7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc1N0ciArPSBgJHtuYW1lfV9pbmRpY2VzWyR7cmFuayAtIDJ9XSA9IDB1O1xuICAgICAgICAgICAgICAgICAgICAgJHtuYW1lfV9pbmRpY2VzWyR7cmFuayAtIDF9XSA9IDB1O2A7XG4gICAgICAgICAgICByZXR1cm4gcmVzU3RyO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgY2FsY1Jlc3VsdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBjYWxjU3RyID0gYHZhciBhX2RhdGE6ICR7YS50eXBlLnZhbHVlfTtgO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhQ29tcG9uZW50czsgaSsrKSB7XG4gICAgICAgICAgICAgIGNhbGNTdHIgKz0gYFxuICAgICAgICAgICAgICBsZXQgYl9kYXRhJHtpfSA9IGJbKGJfb2Zmc2V0ICsgKGsgKyAke2l9KSAqIHVuaWZvcm1zLk4gKyBjb2wpIC8gJHtjb21wb25lbnRzfV07YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0TnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgICAgY2FsY1N0ciArPSBgYV9kYXRhID0gYVsoYV9vZmZzZXQgKyAocm93ICsgJHtpfSkgKiB1bmlmb3Jtcy5LICsgaykgLyAke2FDb21wb25lbnRzfV07YDtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBhQ29tcG9uZW50czsgaisrKSB7XG4gICAgICAgICAgICAgICAgY2FsY1N0ciArPSBgXG4gICAgICAgICAgICB2YWx1ZXNbJHtpfV0gPSBmbWEoJHtiLnR5cGUudmFsdWV9KGFfZGF0YSR7YUNvbXBvbmVudHMgPT09IDEgPyBcIlwiIDogYFske2p9XWB9KSwgYl9kYXRhJHtqfSwgdmFsdWVzWyR7aX1dKTtcbmA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjYWxjU3RyO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGBcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykucmVnaXN0ZXJJbnRlcm5hbFZhcmlhYmxlcyhiYXRjaERpbXMpLmRlY2xhcmVWYXJpYWJsZXMoXG4gICAgICAgICAgICAuLi5pbnB1dFZhcmlhYmxlcyxcbiAgICAgICAgICAgIG91dHB1dFxuICAgICAgICAgICl9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRfc2l6ZVwiKX1cbiAgICBsZXQgY29sID0gKGdsb2JhbF9pZHggJSAodW5pZm9ybXMuTiAvICR7Y29tcG9uZW50c30pKSAqICR7Y29tcG9uZW50c307XG4gICAgdmFyIGluZGV4MSA9IGdsb2JhbF9pZHggLyAodW5pZm9ybXMuTiAvICR7Y29tcG9uZW50c30pO1xuICAgIGxldCBzdHJpZGUxID0gdW5pZm9ybXMuTSAvICR7b3V0cHV0TnVtYmVyfTtcbiAgICBsZXQgcm93ID0gKGluZGV4MSAlIHN0cmlkZTEpICogJHtvdXRwdXROdW1iZXJ9O1xuICAgIGxldCBiYXRjaCA9IGluZGV4MSAvIHN0cmlkZTE7XG5cbiAgICAke291dHB1dFNoYXBlLmxlbmd0aCA9PT0gMiA/IFwiXCIgOiBgbGV0IGJhdGNoX2luZGljZXMgPSAke2JhdGNoRGltcy5vZmZzZXRUb0luZGljZXMoXCJiYXRjaFwiKX07YH1cbiAgICAke2dldEluZGljZXMoYSwgYnJvYWRDYXN0QURpbXMpfVxuICAgIGxldCBhX29mZnNldCA9ICR7YS5pbmRpY2VzVG9PZmZzZXQoXCJhX2luZGljZXNcIil9O1xuICAgICR7Z2V0SW5kaWNlcyhiLCBicm9hZENhc3RCRGltcyl9XG4gICAgbGV0IGJfb2Zmc2V0ID0gJHtiLmluZGljZXNUb09mZnNldChcImJfaW5kaWNlc1wiKX07XG4gICAgdmFyIHZhbHVlczogYXJyYXk8JHtvdXRwdXQudHlwZS52YWx1ZX0sICR7b3V0cHV0TnVtYmVyfT47XG4gICAgZm9yICh2YXIgazogdTMyID0gMHU7IGsgPCB1bmlmb3Jtcy5LOyBrID0gayArICR7YUNvbXBvbmVudHN9KSB7XG4gICAgICAke2NhbGNSZXN1bHQoKX1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHtvdXRwdXROdW1iZXJ9dTsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAke3Byb2Nlc3NCaWFzfVxuICAgICAgJHthcHBseUFjdGl2YXRpb259XG4gICAgICBsZXQgY3VyX2luZGljZXMgPSAke291dHB1dC50eXBlLmluZGljZXN9KGJhdGNoLCByb3cgKyBpLCBjb2wpO1xuICAgICAgbGV0IG9mZnNldCA9ICR7b3V0cHV0LmluZGljZXNUb09mZnNldChcImN1cl9pbmRpY2VzXCIpfTtcbiAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KGBvZmZzZXQgLyAke2NvbXBvbmVudHN9YCwgXCJ2YWx1ZVwiKX07XG4gICAgfVxuICB9XG4gIGA7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJNYXRNdWxOYWl2ZVwiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgICBoaW50OiBgJHthY3RpdmF0aW9uQXR0cmlidXRlcy5hY3RpdmF0aW9ufTske2NvbXBvbmVudHN9OyR7YUNvbXBvbmVudHN9OyR7b3V0cHV0TnVtYmVyfTske2lzQ2hhbm5lbHNMYXN0fWAsXG4gICAgICAgICAgICBpbnB1dERlcGVuZGVuY2llczogaGFzQmlhcyA/IFtcInJhbmtcIiwgXCJyYW5rXCIsIFwicmFua1wiXSA6IFtcInJhbmtcIiwgXCJyYW5rXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogW3sgZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGUgfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgb3V0cHV0U2l6ZSAvIDY0XG4gICAgICAgICAgICAgIC8qIHdvcmtncm91cCBzaXplICovXG4gICAgICAgICAgICApIH0sXG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2VcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICB2YWxpZGF0ZUlucHV0czggPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYXRNdWwgcmVxdWlyZXMgMiBpbnB1dHMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dHNbMF0uZGltc1tpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAxXSAhPT0gaW5wdXRzWzFdLmRpbXNbaW5wdXRzWzFdLmRpbXMubGVuZ3RoIC0gMl0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzaGFyZWQgZGltZW5zaW9uIGRvZXMgbm90IG1hdGNoLlwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG1hdE11bCA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzOChjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gQnJvYWRjYXN0VXRpbC5jYWxjU2hhcGUoY29udGV4dC5pbnB1dHNbMF0uZGltcywgY29udGV4dC5pbnB1dHNbMV0uZGltcywgdHJ1ZSk7XG4gICAgICAgIGlmICghb3V0cHV0U2hhcGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCB1c2UgbWF0bXVsIG9uIHRoZSBnaXZlbiB0ZW5zb3JzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IE4gPSBvdXRwdXRTaGFwZVtvdXRwdXRTaGFwZS5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgSyA9IGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbY29udGV4dC5pbnB1dHNbMF0uZGltcy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKE4gPCA4ICYmIEsgPCA4KSB7XG4gICAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZU5haXZlTWF0bXVsUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMsIHsgYWN0aXZhdGlvbjogXCJcIiB9LCBvdXRwdXRTaGFwZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVNYXRtdWxQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywgeyBhY3RpdmF0aW9uOiBcIlwiIH0sIG91dHB1dFNoYXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2NvbnYudHNcbiAgdmFyIGNhbGN1bGF0ZU91dHB1dFNoYXBlLCB3ZWlnaHRUcmFuc3Bvc2VBdHRyaWJ1dGUsIHZhbGlkYXRlSW5wdXRzOSwgZ2V0QWRqdXN0ZWRDb252QXR0cmlidXRlcywgcGFyc2VDb252QXR0cmlidXRlcywgY29udjJkLCBjb252MWQsIGNvbnY7XG4gIHZhciBpbml0X2NvbnYgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2NvbnYudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2NvbnYyZF9tbV93ZWJncHUoKTtcbiAgICAgIGluaXRfbWF0bXVsX3BhY2tlZF93ZWJncHUoKTtcbiAgICAgIGluaXRfY29udl9ncm91cGVkKCk7XG4gICAgICBpbml0X2Z1c2VfdXRpbHMoKTtcbiAgICAgIGluaXRfbWF0bXVsKCk7XG4gICAgICBpbml0X3RyYW5zcG9zZSgpO1xuICAgICAgY2FsY3VsYXRlT3V0cHV0U2hhcGUgPSAoaW5wdXRTaGFwZSwga2VybmVsU2hhcGUsIGRpbGF0aW9ucywgYWRqdXN0UGFkcywgc3RyaWRlcywgaXNDaGFubmVsTGFzdCkgPT4ge1xuICAgICAgICBjb25zdCBiYXRjaFNpemUgPSBpbnB1dFNoYXBlWzBdO1xuICAgICAgICBjb25zdCBpbnB1dFNwYXRpYWxTaGFwZSA9IGlucHV0U2hhcGUuc2xpY2UoaXNDaGFubmVsTGFzdCA/IDEgOiAyLCBpc0NoYW5uZWxMYXN0ID8gMyA6IDQpO1xuICAgICAgICBjb25zdCBzcGF0aWFsUmFuayA9IGlucHV0U3BhdGlhbFNoYXBlLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgb3V0Q2hhbm5lbHMgPSBrZXJuZWxTaGFwZVswXTtcbiAgICAgICAgY29uc3Qga2VybmVsU3BhdGlhbFNoYXBlID0ga2VybmVsU2hhcGUuc2xpY2UoMik7XG4gICAgICAgIGNvbnN0IGRpbGF0ZWRLZXJuZWxTaGFwZSA9IGtlcm5lbFNwYXRpYWxTaGFwZS5tYXAoKHYsIGkpID0+IHYgKyAodiAtIDEpICogKGRpbGF0aW9uc1tpXSAtIDEpKTtcbiAgICAgICAgY29uc3QgaW5wdXRTcGF0aWFsU2hhcGVXaXRoUGFkID0gaW5wdXRTcGF0aWFsU2hhcGUubWFwKCh2LCBpKSA9PiB2ICsgYWRqdXN0UGFkc1tpXSArIGFkanVzdFBhZHNbaSArIHNwYXRpYWxSYW5rXSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gaW5wdXRTcGF0aWFsU2hhcGVXaXRoUGFkLm1hcCgodiwgaSkgPT4gTWF0aC5mbG9vcigodiAtIGRpbGF0ZWRLZXJuZWxTaGFwZVtpXSArIHN0cmlkZXNbaV0pIC8gc3RyaWRlc1tpXSkpO1xuICAgICAgICBvdXRwdXRTaGFwZS5zcGxpY2UoMCwgMCwgYmF0Y2hTaXplKTtcbiAgICAgICAgb3V0cHV0U2hhcGUuc3BsaWNlKGlzQ2hhbm5lbExhc3QgPyAzIDogMSwgMCwgb3V0Q2hhbm5lbHMpO1xuICAgICAgICByZXR1cm4gb3V0cHV0U2hhcGU7XG4gICAgICB9O1xuICAgICAgd2VpZ2h0VHJhbnNwb3NlQXR0cmlidXRlID0gWzIsIDMsIDEsIDBdO1xuICAgICAgdmFsaWRhdGVJbnB1dHM5ID0gKGlucHV0cywgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoICE9PSAyICYmIGlucHV0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252IHJlcXVpcmVzIDIgb3IgMyBpbnB1dHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0c1swXS5kaW1zLmxlbmd0aCAhPT0gNCAmJiBpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50bHkgb25seSBzdXBwb3J0IGNvbnYgMUQgYW5kIDJEXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IGlucHV0c1sxXS5kaW1zLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZpbHRlciBkb2VzIG5vdCBoYXZlIHNhbWUgZGltZW5zaW9uIGFzIGlucHV0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFDaGFubmVsID0gaW5wdXRzWzBdLmRpbXNbYXR0cmlidXRlcy5mb3JtYXQgPT09IFwiTkhXQ1wiID8gaW5wdXRzWzBdLmRpbXMubGVuZ3RoIC0gMSA6IDFdO1xuICAgICAgICBjb25zdCBmaWx0ZXJJbkNoYW5uZWwgPSBpbnB1dHNbMV0uZGltc1sxXSAqIGF0dHJpYnV0ZXMuZ3JvdXA7XG4gICAgICAgIGlmIChkYXRhQ2hhbm5lbCAhPT0gZmlsdGVySW5DaGFubmVsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRklMVEVSX0lOX0NIQU5ORUwgc2hvdWxkIGJlIGVxdWFsIHRvIERBVEFfQ0hBTk5FTFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gMyAmJiAoaW5wdXRzWzJdLmRpbXMubGVuZ3RoICE9PSAxIHx8IGlucHV0c1sxXS5kaW1zWzBdICE9PSBpbnB1dHNbMl0uZGltc1swXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGJpYXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3BhdGlhbFJhbmsgPSBpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAyO1xuICAgICAgICBpZiAoYXR0cmlidXRlcy5kaWxhdGlvbnMubGVuZ3RoICE9PSBzcGF0aWFsUmFuaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGlsYXRpb25zIHNob3VsZCBiZSAke3NwYXRpYWxSYW5rfURgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXR0cmlidXRlcy5zdHJpZGVzLmxlbmd0aCAhPT0gc3BhdGlhbFJhbmspIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHN0cmlkZXMgc2hvdWxkIGJlICR7c3BhdGlhbFJhbmt9RGApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLnBhZHMubGVuZ3RoICE9PSBzcGF0aWFsUmFuayAqIDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHBhZHMgc2hvdWxkIGJlICR7c3BhdGlhbFJhbmsgKiAyfURgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggIT09IDAgJiYgYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggIT09IGlucHV0c1sxXS5kaW1zLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGtlcm5lbCBzaGFwZVwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGdldEFkanVzdGVkQ29udkF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlcywgaW5wdXRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGtlcm5lbFNoYXBlID0gYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5zbGljZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGlucHV0c1sxXS5kaW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaWYgKGtlcm5lbFNoYXBlW2kgLSAyXSA9PT0gMCkge1xuICAgICAgICAgICAga2VybmVsU2hhcGVbaSAtIDJdID0gaW5wdXRzWzFdLmRpbXNbaV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhZHMgPSBhdHRyaWJ1dGVzLnBhZHMuc2xpY2UoKTtcbiAgICAgICAgUG9vbENvbnZVdGlsLmFkanVzdFBhZHNCYXNlZE9uQXV0b1BhZChcbiAgICAgICAgICBpbnB1dHNbMF0uZGltcyxcbiAgICAgICAgICBhdHRyaWJ1dGVzLnN0cmlkZXMsXG4gICAgICAgICAgYXR0cmlidXRlcy5kaWxhdGlvbnMsXG4gICAgICAgICAga2VybmVsU2hhcGUsXG4gICAgICAgICAgcGFkcyxcbiAgICAgICAgICBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gXCJOSFdDXCIsXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvUGFkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKHt9LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdBdHRyaWJ1dGVzLCB7IGtlcm5lbFNoYXBlLCBwYWRzIH0pO1xuICAgICAgICByZXR1cm4gbmV3QXR0cmlidXRlcztcbiAgICAgIH07XG4gICAgICBwYXJzZUNvbnZBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aXZhdGlvbkF0dHJpYnV0ZXMgPSBwYXJzZUludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IGF0dHJpYnV0ZXMuZm9ybWF0O1xuICAgICAgICBjb25zdCBhdXRvUGFkID0gW1wiTk9UU0VUXCIsIFwiVkFMSURcIiwgXCJTQU1FX1VQUEVSXCIsIFwiU0FNRV9MT1dFUlwiXVthdHRyaWJ1dGVzLmF1dG9fcGFkXTtcbiAgICAgICAgY29uc3QgZGlsYXRpb25zID0gYXR0cmlidXRlcy5kaWxhdGlvbnM7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gYXR0cmlidXRlcy5ncm91cDtcbiAgICAgICAgY29uc3Qga2VybmVsU2hhcGUgPSBhdHRyaWJ1dGVzLmtlcm5lbF9zaGFwZTtcbiAgICAgICAgY29uc3QgcGFkcyA9IGF0dHJpYnV0ZXMucGFkcztcbiAgICAgICAgY29uc3Qgc3RyaWRlcyA9IGF0dHJpYnV0ZXMuc3RyaWRlcztcbiAgICAgICAgY29uc3Qgd0lzQ29uc3QgPSBhdHRyaWJ1dGVzLndfaXNfY29uc3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhdXRvUGFkLFxuICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICBkaWxhdGlvbnMsXG4gICAgICAgICAgZ3JvdXAsXG4gICAgICAgICAga2VybmVsU2hhcGUsXG4gICAgICAgICAgcGFkcyxcbiAgICAgICAgICBzdHJpZGVzLFxuICAgICAgICAgIHdJc0NvbnN0LFxuICAgICAgICAgIC4uLmFjdGl2YXRpb25BdHRyaWJ1dGVzLFxuICAgICAgICAgIGNhY2hlS2V5OiBgJHthdHRyaWJ1dGVzLmZvcm1hdH07JHthY3RpdmF0aW9uQXR0cmlidXRlcy5hY3RpdmF0aW9ufTtgXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29udjJkID0gKGNvbnRleHQsIGlucHV0cywgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBhZGp1c3RlZEF0dHJpYnV0ZXMgPSBnZXRBZGp1c3RlZENvbnZBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMsIGlucHV0cyk7XG4gICAgICAgIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09IFwiTkhXQ1wiO1xuICAgICAgICBpZiAoYXR0cmlidXRlcy5ncm91cCAhPT0gMSkge1xuICAgICAgICAgIGNvbnN0IGVuYWJsZUdyb3VwZWRDb252VmVjdG9yaXplID0gIWNvbnRleHQuYWRhcHRlckluZm8uaXNBcmNoaXRlY3R1cmUoXCJhbXBlcmVcIik7XG4gICAgICAgICAgaWYgKGVuYWJsZUdyb3VwZWRDb252VmVjdG9yaXplICYmIGlzQ2hhbm5lbHNMYXN0ICYmIGlucHV0c1sxXS5kaW1zWzBdID09PSBhdHRyaWJ1dGVzLmdyb3VwICYmIGlucHV0c1sxXS5kaW1zWzFdID09PSAxICYmIGF0dHJpYnV0ZXMuZGlsYXRpb25zWzBdID09PSAxICYmIGF0dHJpYnV0ZXMuZGlsYXRpb25zWzFdID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRTaGFwZTIgPSBjYWxjdWxhdGVPdXRwdXRTaGFwZShcbiAgICAgICAgICAgICAgaW5wdXRzWzBdLmRpbXMsXG4gICAgICAgICAgICAgIGlucHV0c1sxXS5kaW1zLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmRpbGF0aW9ucyxcbiAgICAgICAgICAgICAgYWRqdXN0ZWRBdHRyaWJ1dGVzLnBhZHMsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXMuc3RyaWRlcyxcbiAgICAgICAgICAgICAgaXNDaGFubmVsc0xhc3RcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB0cmFuc3Bvc2VkV2VpZ2h0MiA9IGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCA/PyBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgICAgIGNyZWF0ZVRyYW5zcG9zZVByb2dyYW1JbmZvKGlucHV0c1sxXSwgd2VpZ2h0VHJhbnNwb3NlQXR0cmlidXRlKSxcbiAgICAgICAgICAgICAgeyBpbnB1dHM6IFsxXSwgb3V0cHV0czogW2F0dHJpYnV0ZXMud0lzQ29uc3QgPyAtMiA6IC0xXSB9XG4gICAgICAgICAgICApWzBdO1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMud0lzQ29uc3QgJiYgIWNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCkge1xuICAgICAgICAgICAgICBjb250ZXh0Lmtlcm5lbEN1c3RvbURhdGEud1QgPSB0cmFuc3Bvc2VkV2VpZ2h0MjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbnZJbnB1dHMyID0gW2lucHV0c1swXSwgdHJhbnNwb3NlZFdlaWdodDJdO1xuICAgICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgY29udklucHV0czIucHVzaChpbnB1dHNbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgICAgICBjcmVhdGVHcm91cGVkQ29udlZlY3Rvcml6ZVByb2dyYW1JbmZvKGNvbnZJbnB1dHMyLCBhZGp1c3RlZEF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlMiksXG4gICAgICAgICAgICAgIHsgaW5wdXRzOiBjb252SW5wdXRzMiB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlR3JvdXBlZENvbnZQcm9ncmFtSW5mbyhpbnB1dHMsIGFkanVzdGVkQXR0cmlidXRlcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzQmlhcyA9IGlucHV0cy5sZW5ndGggPT09IDM7XG4gICAgICAgIGNvbnN0IGlucHV0SGVpZ2h0ID0gaW5wdXRzWzBdLmRpbXNbaXNDaGFubmVsc0xhc3QgPyAxIDogMl07XG4gICAgICAgIGNvbnN0IGlucHV0V2lkdGggPSBpbnB1dHNbMF0uZGltc1tpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXTtcbiAgICAgICAgY29uc3QgaW5wdXRDaGFubmVscyA9IGlucHV0c1swXS5kaW1zW2lzQ2hhbm5lbHNMYXN0ID8gMyA6IDFdO1xuICAgICAgICBjb25zdCB3ZWlnaHRIZWlnaHQgPSBpbnB1dHNbMV0uZGltc1syXTtcbiAgICAgICAgY29uc3Qgd2VpZ2h0V2lkdGggPSBpbnB1dHNbMV0uZGltc1szXTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBjYWxjdWxhdGVPdXRwdXRTaGFwZShcbiAgICAgICAgICBpbnB1dHNbMF0uZGltcyxcbiAgICAgICAgICBpbnB1dHNbMV0uZGltcyxcbiAgICAgICAgICBhdHRyaWJ1dGVzLmRpbGF0aW9ucyxcbiAgICAgICAgICBhZGp1c3RlZEF0dHJpYnV0ZXMucGFkcyxcbiAgICAgICAgICBhdHRyaWJ1dGVzLnN0cmlkZXMsXG4gICAgICAgICAgaXNDaGFubmVsc0xhc3RcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgb3V0SGVpZ2h0ID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAxIDogMl07XG4gICAgICAgIGNvbnN0IG91dFdpZHRoID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAyIDogM107XG4gICAgICAgIGNvbnN0IG91dENoYW5uZWxzID0gb3V0cHV0U2hhcGVbaXNDaGFubmVsc0xhc3QgPyAzIDogMV07XG4gICAgICAgIGNvbnN0IHNhbWVTaXplID0gaXNDaGFubmVsc0xhc3QgJiYgd2VpZ2h0SGVpZ2h0ID09PSBpbnB1dEhlaWdodCAmJiB3ZWlnaHRXaWR0aCA9PT0gaW5wdXRXaWR0aCAmJiBhdHRyaWJ1dGVzLnBhZHNbMF0gPT09IDAgJiYgYXR0cmlidXRlcy5wYWRzWzFdID09PSAwO1xuICAgICAgICBpZiAoc2FtZVNpemUgfHwgd2VpZ2h0SGVpZ2h0ID09PSAxICYmIHdlaWdodFdpZHRoID09PSAxICYmIGF0dHJpYnV0ZXMuZGlsYXRpb25zWzBdID09PSAxICYmIGF0dHJpYnV0ZXMuZGlsYXRpb25zWzFdID09PSAxICYmIGF0dHJpYnV0ZXMuc3RyaWRlc1swXSA9PT0gMSAmJiBhdHRyaWJ1dGVzLnN0cmlkZXNbMV0gPT09IDEgJiYgYXR0cmlidXRlcy5wYWRzWzBdID09PSAwICYmIGF0dHJpYnV0ZXMucGFkc1sxXSA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGJhdGNoID0gb3V0cHV0U2hhcGVbMF07XG4gICAgICAgICAgbGV0IHhSZXNoYXBlZCwgd1Jlc2hhcGVkLCBtYXRtdWxPdXRwdXRTaGFwZTtcbiAgICAgICAgICBjb25zdCBtYXRtdWxJbnB1dHMgPSBbXTtcbiAgICAgICAgICBpZiAoaXNDaGFubmVsc0xhc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9zZWRXZWlnaHQyID0gY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUID8/IGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oaW5wdXRzWzFdLCB3ZWlnaHRUcmFuc3Bvc2VBdHRyaWJ1dGUpLFxuICAgICAgICAgICAgICB7IGlucHV0czogWzFdLCBvdXRwdXRzOiBbYXR0cmlidXRlcy53SXNDb25zdCA/IC0yIDogLTFdIH1cbiAgICAgICAgICAgIClbMF07XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy53SXNDb25zdCAmJiAhY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCA9IHRyYW5zcG9zZWRXZWlnaHQyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNhbWVTaXplKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNoYXJlZERpbSA9IGlucHV0SGVpZ2h0ICogaW5wdXRXaWR0aCAqIGlucHV0Q2hhbm5lbHM7XG4gICAgICAgICAgICAgIHhSZXNoYXBlZCA9IGlucHV0c1swXS5yZXNoYXBlKFsxLCBiYXRjaCwgc2hhcmVkRGltXSk7XG4gICAgICAgICAgICAgIHdSZXNoYXBlZCA9IHRyYW5zcG9zZWRXZWlnaHQyLnJlc2hhcGUoWzEsIHNoYXJlZERpbSwgb3V0Q2hhbm5lbHNdKTtcbiAgICAgICAgICAgICAgbWF0bXVsT3V0cHV0U2hhcGUgPSBbMSwgYmF0Y2gsIG91dENoYW5uZWxzXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHhSZXNoYXBlZCA9IGlucHV0c1swXS5yZXNoYXBlKFtiYXRjaCwgaW5wdXRIZWlnaHQgKiBpbnB1dFdpZHRoLCBpbnB1dENoYW5uZWxzXSk7XG4gICAgICAgICAgICAgIHdSZXNoYXBlZCA9IHRyYW5zcG9zZWRXZWlnaHQyLnJlc2hhcGUoWzEsIGlucHV0Q2hhbm5lbHMsIG91dENoYW5uZWxzXSk7XG4gICAgICAgICAgICAgIG1hdG11bE91dHB1dFNoYXBlID0gW2JhdGNoLCBvdXRIZWlnaHQgKiBvdXRXaWR0aCwgb3V0Q2hhbm5lbHNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF0bXVsSW5wdXRzLnB1c2goeFJlc2hhcGVkKTtcbiAgICAgICAgICAgIG1hdG11bElucHV0cy5wdXNoKHdSZXNoYXBlZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhSZXNoYXBlZCA9IGlucHV0c1swXS5yZXNoYXBlKFtiYXRjaCwgaW5wdXRDaGFubmVscywgaW5wdXRIZWlnaHQgKiBpbnB1dFdpZHRoXSk7XG4gICAgICAgICAgICB3UmVzaGFwZWQgPSBpbnB1dHNbMV0ucmVzaGFwZShbMSwgb3V0Q2hhbm5lbHMsIGlucHV0Q2hhbm5lbHNdKTtcbiAgICAgICAgICAgIG1hdG11bE91dHB1dFNoYXBlID0gW2JhdGNoLCBvdXRDaGFubmVscywgb3V0SGVpZ2h0ICogb3V0V2lkdGhdO1xuICAgICAgICAgICAgbWF0bXVsSW5wdXRzLnB1c2god1Jlc2hhcGVkKTtcbiAgICAgICAgICAgIG1hdG11bElucHV0cy5wdXNoKHhSZXNoYXBlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgICBtYXRtdWxJbnB1dHMucHVzaChpbnB1dHNbMl0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBOID0gbWF0bXVsT3V0cHV0U2hhcGVbMl07XG4gICAgICAgICAgY29uc3QgSyA9IG1hdG11bElucHV0c1swXS5kaW1zW21hdG11bElucHV0c1swXS5kaW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChOIDwgOCAmJiBLIDwgOCkge1xuICAgICAgICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgICAgICBjcmVhdGVOYWl2ZU1hdG11bFByb2dyYW1JbmZvKFxuICAgICAgICAgICAgICAgIG1hdG11bElucHV0cyxcbiAgICAgICAgICAgICAgICBhZGp1c3RlZEF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgb3V0cHV0U2hhcGUsXG4gICAgICAgICAgICAgICAgbWF0bXVsT3V0cHV0U2hhcGUsXG4gICAgICAgICAgICAgICAgaXNDaGFubmVsc0xhc3RcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgeyBpbnB1dHM6IG1hdG11bElucHV0cyB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgICAgIGNyZWF0ZU1hdG11bFByb2dyYW1JbmZvKG1hdG11bElucHV0cywgYWRqdXN0ZWRBdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZSwgbWF0bXVsT3V0cHV0U2hhcGUsIGlzQ2hhbm5lbHNMYXN0KSxcbiAgICAgICAgICAgICAgeyBpbnB1dHM6IG1hdG11bElucHV0cyB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VxdWVudGlhbEFjY2Vzc0J5VGhyZWFkcyA9IChcbiAgICAgICAgICAvKiBiYWNrZW5kLmFkYXB0ZXJJbmZvLmlzSW50ZWwoKSAqL1xuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdHJhbnNwb3NlZFdlaWdodCA9IGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCA/PyBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oaW5wdXRzWzFdLCB3ZWlnaHRUcmFuc3Bvc2VBdHRyaWJ1dGUpLFxuICAgICAgICAgIHsgaW5wdXRzOiBbMV0sIG91dHB1dHM6IFthdHRyaWJ1dGVzLndJc0NvbnN0ID8gLTIgOiAtMV0gfVxuICAgICAgICApWzBdO1xuICAgICAgICBpZiAoYXR0cmlidXRlcy53SXNDb25zdCAmJiAhY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUKSB7XG4gICAgICAgICAgY29udGV4dC5rZXJuZWxDdXN0b21EYXRhLndUID0gdHJhbnNwb3NlZFdlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb252SW5wdXRzID0gW2lucHV0c1swXSwgdHJhbnNwb3NlZFdlaWdodF07XG4gICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgY29udklucHV0cy5wdXNoKGlucHV0c1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGltQU91dGVyID0gaXNDaGFubmVsc0xhc3QgPyBvdXRIZWlnaHQgKiBvdXRXaWR0aCA6IG91dENoYW5uZWxzO1xuICAgICAgICBjb25zdCBkaW1CT3V0ZXIgPSBpc0NoYW5uZWxzTGFzdCA/IG91dENoYW5uZWxzIDogb3V0SGVpZ2h0ICogb3V0V2lkdGg7XG4gICAgICAgIGNvbnN0IGRpbUlubmVyID0gd2VpZ2h0SGVpZ2h0ICogd2VpZ2h0V2lkdGggKiBpbnB1dENoYW5uZWxzO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlQ29udjJETWF0TXVsUHJvZ3JhbUluZm8oXG4gICAgICAgICAgICBjb252SW5wdXRzLFxuICAgICAgICAgICAgYWRqdXN0ZWRBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgb3V0cHV0U2hhcGUsXG4gICAgICAgICAgICBkaW1BT3V0ZXIsXG4gICAgICAgICAgICBkaW1CT3V0ZXIsXG4gICAgICAgICAgICBkaW1Jbm5lcixcbiAgICAgICAgICAgIGhhc0JpYXMsXG4gICAgICAgICAgICBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7IGlucHV0czogY29udklucHV0cyB9XG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgY29udjFkID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgaXNDaGFubmVsTGFzdCA9IGF0dHJpYnV0ZXMuZm9ybWF0ID09PSBcIk5IV0NcIjtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gW1xuICAgICAgICAgIGNvbnRleHQuaW5wdXRzWzBdLnJlc2hhcGUoXG4gICAgICAgICAgICBpc0NoYW5uZWxMYXN0ID8gKFxuICAgICAgICAgICAgICAvLyBbTiwgVywgQ10gLT4gW04sIEg9MSwgVywgQ11cbiAgICAgICAgICAgICAgW2NvbnRleHQuaW5wdXRzWzBdLmRpbXNbMF0sIDEsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMV0sIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMl1dXG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAvLyBbTiwgQywgV10gLT4gW04sIEMsIEg9MSwgV11cbiAgICAgICAgICAgICAgW2NvbnRleHQuaW5wdXRzWzBdLmRpbXNbMF0sIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMV0sIDEsIGNvbnRleHQuaW5wdXRzWzBdLmRpbXNbMl1dXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICAvL1tGSUxURVJfT1VUX0NIQU5ORUwsIEZJTFRFUl9JTl9DSEFOTkVMLCBrV10gLT4gW0ZJTFRFUl9PVVRfQ0hBTk5FTCwgRklMVEVSX0lOX0NIQU5ORUwsIGtIPTEsIGtXXVxuICAgICAgICAgIGNvbnRleHQuaW5wdXRzWzFdLnJlc2hhcGUoW2NvbnRleHQuaW5wdXRzWzFdLmRpbXNbMF0sIGNvbnRleHQuaW5wdXRzWzFdLmRpbXNbMV0sIDEsIGNvbnRleHQuaW5wdXRzWzFdLmRpbXNbMl1dKVxuICAgICAgICBdO1xuICAgICAgICBpZiAoY29udGV4dC5pbnB1dHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgaW5wdXRzLnB1c2goY29udGV4dC5pbnB1dHNbMl0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhZHMgPSBbMCwgYXR0cmlidXRlcy5wYWRzWzBdLCAwLCBhdHRyaWJ1dGVzLnBhZHNbMV1dO1xuICAgICAgICBjb25zdCBzdHJpZGVzID0gWzFdLmNvbmNhdChhdHRyaWJ1dGVzLnN0cmlkZXMpO1xuICAgICAgICBjb25zdCBkaWxhdGlvbnMgPSBbMV0uY29uY2F0KGF0dHJpYnV0ZXMuZGlsYXRpb25zKTtcbiAgICAgICAgY29uc3Qga2VybmVsU2hhcGUgPSBbMV0uY29uY2F0KGF0dHJpYnV0ZXMua2VybmVsU2hhcGUpO1xuICAgICAgICBjb25zdCBhZGp1c3RlZEF0dHJpYnV0ZXMgPSBnZXRBZGp1c3RlZENvbnZBdHRyaWJ1dGVzKHsgLi4uYXR0cmlidXRlcywgcGFkcywgc3RyaWRlcywgZGlsYXRpb25zLCBrZXJuZWxTaGFwZSB9LCBpbnB1dHMpO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlR3JvdXBlZENvbnZQcm9ncmFtSW5mbyhcbiAgICAgICAgICBpbnB1dHMsXG4gICAgICAgICAgYWRqdXN0ZWRBdHRyaWJ1dGVzLFxuICAgICAgICAgIChvdXRwdXRTaGFwZSkgPT4gaXNDaGFubmVsTGFzdCA/IFtvdXRwdXRTaGFwZVswXSwgb3V0cHV0U2hhcGVbMl0sIG91dHB1dFNoYXBlWzNdXSA6IFtdXG4gICAgICAgICkpO1xuICAgICAgfTtcbiAgICAgIGNvbnYgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czkoY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAoY29udGV4dC5pbnB1dHNbMF0uZGltcy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICBjb252MWQoY29udGV4dCwgYXR0cmlidXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udjJkKGNvbnRleHQsIGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvM3JkLXBhcnR5L2NvbnZfYmFja3Byb3BfbW1fd2ViZ3B1LnRzXG4gIHZhciBjb252MmRUcmFuc3Bvc2VDb21tb25TbmlwcGV0LCBjcmVhdGVDb252MkRUcmFuc3Bvc2VNYXRNdWxQcm9ncmFtSW5mbztcbiAgdmFyIGluaXRfY29udl9iYWNrcHJvcF9tbV93ZWJncHUgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzLzNyZC1wYXJ0eS9jb252X2JhY2twcm9wX21tX3dlYmdwdS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X2xvZygpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIGluaXRfZnVzZV91dGlscygpO1xuICAgICAgaW5pdF9hY3RpdmF0aW9uX3V0aWwoKTtcbiAgICAgIGluaXRfY29udl91dGlsKCk7XG4gICAgICBpbml0X21hdG11bF9wYWNrZWRfd2ViZ3B1KCk7XG4gICAgICBjb252MmRUcmFuc3Bvc2VDb21tb25TbmlwcGV0ID0gKGlzQ2hhbm5lbHNMYXN0LCBhZGRCaWFzID0gZmFsc2UsIGF0dHJpYnV0ZXMsIHR5cGUsIGlubmVyRWxlbWVudFNpemUgPSA0KSA9PiB7XG4gICAgICAgIGNvbnN0IGdldFdTbmlwcGV0ID0gKGlubmVyRWxlbWVudFNpemUyKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChpbm5lckVsZW1lbnRTaXplMikge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gXCJyZXR1cm4gd1tnZXRJbmRleEZyb21Db29yZHM0RChjb29yZCwgdmVjNDxpMzI+KHVuaWZvcm1zLndfc2hhcGUpKV07XCI7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICBsZXQgY29vcmQxID0gdmVjNDxpMzI+KGNvb3JkWCwgY29vcmRZLCBjb2wgKyAxLCByb3dJbm5lcik7XG4gICAgICAgICAgICBsZXQgY29vcmQyID0gdmVjNDxpMzI+KGNvb3JkWCwgY29vcmRZLCBjb2wgKyAyLCByb3dJbm5lcik7XG4gICAgICAgICAgICBsZXQgY29vcmQzID0gdmVjNDxpMzI+KGNvb3JkWCwgY29vcmRZLCBjb2wgKyAzLCByb3dJbm5lcik7XG4gICAgICAgICAgICBsZXQgdjAgPSB3W2dldEluZGV4RnJvbUNvb3JkczREKGNvb3JkLCB2ZWM0PGkzMj4odW5pZm9ybXMud19zaGFwZSkpXTtcbiAgICAgICAgICAgIGxldCB2MSA9IHdbZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQxLCB2ZWM0PGkzMj4odW5pZm9ybXMud19zaGFwZSkpXTtcbiAgICAgICAgICAgIGxldCB2MiA9IHdbZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQyLCB2ZWM0PGkzMj4odW5pZm9ybXMud19zaGFwZSkpXTtcbiAgICAgICAgICAgIGxldCB2MyA9IHdbZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmQzLCB2ZWM0PGkzMj4odW5pZm9ybXMud19zaGFwZSkpXTtcbiAgICAgICAgICAgIHJldHVybiAke3R5cGV9KHYwLCB2MSwgdjIsIHYzKTtcbiAgICAgICAgICAgIGA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGlubmVyRWxlbWVudFNpemUgJHtpbm5lckVsZW1lbnRTaXplMn0gaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNvb3JkQVNuaXBwZXQgPSBpc0NoYW5uZWxzTGFzdCA/IGBcbiAgICAgIGxldCBjb29yZCA9IHZlYzQ8aTMyPihiYXRjaCwgaVhSLCBpWEMsIHhDaCk7XG4gICAgICBgIDogYFxuICAgICAgbGV0IGNvb3JkID0gdmVjNDxpMzI+KGJhdGNoLCB4Q2gsIGlYUiwgaVhDKTtcbiAgICAgIGA7XG4gICAgICAgIGNvbnN0IGNvb3JkUmVzU25pcHBldCA9IGlzQ2hhbm5lbHNMYXN0ID8gYFxuICAgIGxldCBjb29yZHMgPSB2ZWM0PGkzMj4oXG4gICAgICBiYXRjaCxcbiAgICAgIHJvdyAvIG91dFdpZHRoLFxuICAgICAgcm93ICUgb3V0V2lkdGgsXG4gICAgICBjb2wpO1xuICAgIGAgOiBgXG4gICAgbGV0IGNvb3JkcyA9IHZlYzQ8aTMyPihcbiAgICAgIGJhdGNoLFxuICAgICAgcm93LFxuICAgICAgY29sIC8gb3V0V2lkdGgsXG4gICAgICBjb2wgJSBvdXRXaWR0aCk7XG4gICAgYDtcbiAgICAgICAgY29uc3QgeEhlaWdodCA9IGlzQ2hhbm5lbHNMYXN0ID8gXCJpMzIodW5pZm9ybXMueF9zaGFwZVsxXSlcIiA6IFwiaTMyKHVuaWZvcm1zLnhfc2hhcGVbMl0pXCI7XG4gICAgICAgIGNvbnN0IHhXaWR0aCA9IGlzQ2hhbm5lbHNMYXN0ID8gXCJpMzIodW5pZm9ybXMueF9zaGFwZVsyXSlcIiA6IFwiaTMyKHVuaWZvcm1zLnhfc2hhcGVbM10pXCI7XG4gICAgICAgIGNvbnN0IHJvdyA9IGlzQ2hhbm5lbHNMYXN0ID8gXCJyb3dcIiA6IFwiY29sXCI7XG4gICAgICAgIGNvbnN0IGNvbCA9IGlzQ2hhbm5lbHNMYXN0ID8gXCJjb2xcIiA6IFwicm93XCI7XG4gICAgICAgIGNvbnN0IHJlYWRBU25pcHBldCA9IGBcbiAgICAgIGxldCBpbkNoYW5uZWxzID0gJHtpc0NoYW5uZWxzTGFzdCA/IFwiaTMyKHVuaWZvcm1zLnhfc2hhcGVbM10pXCIgOiBcImkzMih1bmlmb3Jtcy54X3NoYXBlWzFdKVwifTtcbiAgICAgIGxldCBvdXRXaWR0aCA9ICR7aXNDaGFubmVsc0xhc3QgPyBcImkzMih1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbMl0pXCIgOiBcImkzMih1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbM10pXCJ9O1xuICAgICAgbGV0IG91dFJvdyA9ICR7cm93fSAvIG91dFdpZHRoO1xuICAgICAgbGV0IG91dENvbCA9ICR7cm93fSAlIG91dFdpZHRoO1xuXG4gICAgICBsZXQgV1JvdyA9ICR7Y29sfSAvICh1bmlmb3Jtcy5maWx0ZXJfZGltc1sxXSAqIGluQ2hhbm5lbHMpO1xuICAgICAgbGV0IFdDb2wgPSAke2NvbH0gLyBpbkNoYW5uZWxzICUgdW5pZm9ybXMuZmlsdGVyX2RpbXNbMV07XG4gICAgICBsZXQgeFIgPSBmMzIob3V0Um93IC0gdW5pZm9ybXMucGFkc1swXSArIHVuaWZvcm1zLmRpbGF0aW9uc1swXSAqIFdSb3cpIC8gZjMyKHVuaWZvcm1zLnN0cmlkZXNbMF0pO1xuICAgICAgbGV0IHhDID0gZjMyKG91dENvbCAtIHVuaWZvcm1zLnBhZHNbMV0gKyB1bmlmb3Jtcy5kaWxhdGlvbnNbMV0gKiBXQ29sKSAvIGYzMih1bmlmb3Jtcy5zdHJpZGVzWzFdKTtcbiAgICAgIGlmICh4UiA8IDAuMCB8fCB4UiA+PSBmMzIoJHt4SGVpZ2h0fSkgfHwgZnJhY3QoeFIpID4gMC4wKSB7XG4gICAgICAgIHJldHVybiAke3R5cGV9KDAuMCk7XG4gICAgICB9XG4gICAgICBpZiAoeEMgPCAwLjAgfHwgeEMgPj0gZjMyKCR7eFdpZHRofSkgfHwgZnJhY3QoeEMpID4gMC4wKSB7XG4gICAgICAgIHJldHVybiAke3R5cGV9KDAuMCk7XG4gICAgICB9XG4gICAgICBsZXQgaVhSID0gaTMyKHhSKTtcbiAgICAgIGxldCBpWEMgPSBpMzIoeEMpO1xuICAgICAgbGV0IHhDaCA9ICR7Y29sfSAlIGluQ2hhbm5lbHM7XG4gICAgICAke2Nvb3JkQVNuaXBwZXR9XG4gICAgICByZXR1cm4geFtnZXRJbmRleEZyb21Db29yZHM0RChjb29yZCwgdmVjNDxpMzI+KHVuaWZvcm1zLnhfc2hhcGUpKS8ke2lubmVyRWxlbWVudFNpemV9XTtgO1xuICAgICAgICBjb25zdCBzYW1wbGVBID0gaXNDaGFubmVsc0xhc3QgPyBgXG4gICAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemV9O1xuICAgICAgaWYgKHJvdyA8IHVuaWZvcm1zLmRpbV9hX291dGVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9pbm5lcikge1xuICAgICAgICAke3JlYWRBU25pcHBldH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAke3R5cGV9KDAuMCk7YCA6IGBcbiAgICAgIGxldCBjb2wgPSBjb2xJbiAqICR7aW5uZXJFbGVtZW50U2l6ZX07XG4gICAgICBpZiAocm93IDwgdW5pZm9ybXMuZGltX2lubmVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9iX291dGVyKSB7XG4gICAgICAgICR7cmVhZEFTbmlwcGV0fVxuICAgICAgfVxuICAgICAgcmV0dXJuICR7dHlwZX0oMC4wKTtgO1xuICAgICAgICBjb25zdCBzYW1wbGVXID0gYFxuICAgICAgbGV0IGNvbCA9IGNvbEluICogJHtpbm5lckVsZW1lbnRTaXplfTtcbiAgICAgIGxldCBpbkNoYW5uZWxzID0gJHtpc0NoYW5uZWxzTGFzdCA/IFwiaTMyKHVuaWZvcm1zLnhfc2hhcGVbM10pXCIgOiBcImkzMih1bmlmb3Jtcy54X3NoYXBlWzFdKVwifTtcbiAgICAgIGxldCBjb29yZFggPSB1bmlmb3Jtcy5maWx0ZXJfZGltc1swXSAtIDEgLSByb3cgLyAodW5pZm9ybXMuZmlsdGVyX2RpbXNbMV0gKiBpbkNoYW5uZWxzKTtcbiAgICAgIGxldCBjb29yZFkgPSB1bmlmb3Jtcy5maWx0ZXJfZGltc1sxXSAtIDEgLSAocm93IC8gaW5DaGFubmVscykgJSB1bmlmb3Jtcy5maWx0ZXJfZGltc1sxXTtcbiAgICAgIGlmICgke2lzQ2hhbm5lbHNMYXN0ID8gXCJyb3cgPCB1bmlmb3Jtcy5kaW1faW5uZXIgJiYgY29sIDwgdW5pZm9ybXMuZGltX2Jfb3V0ZXJcIiA6IFwicm93IDwgdW5pZm9ybXMuZGltX2lubmVyICYmIGNvbCA8IHVuaWZvcm1zLmRpbV9hX291dGVyXCJ9ICAmJiBjb29yZFggPj0gMCAmJiBjb29yZFkgPj0gMCkge1xuICAgICAgICBsZXQgcm93SW5uZXIgPSByb3cgJSBpbkNoYW5uZWxzO1xuICAgICAgICBsZXQgY29vcmQgPSB2ZWM0PGkzMj4oY29vcmRYLCBjb29yZFksIGNvbCwgcm93SW5uZXIpO1xuICAgICAgICAke2dldFdTbmlwcGV0KGlubmVyRWxlbWVudFNpemUpfVxuICAgICAgfVxuICAgICAgcmV0dXJuICR7dHlwZX0oMC4wKTtcbiAgICAgIGA7XG4gICAgICAgIGNvbnN0IGFwcGx5QWN0aXZhdGlvbiA9IGdldEFjdGl2YXRpb25TbmlwcGV0KGF0dHJpYnV0ZXMsIHR5cGUpO1xuICAgICAgICBjb25zdCB1c2VyQ29kZSA9IGBcbiAgZm4gbW1fcmVhZEEoYmF0Y2g6IGkzMiwgcm93IDogaTMyLCBjb2xJbiA6IGkzMikgLT4gJHt0eXBlfSB7XG4gICAgJHtpc0NoYW5uZWxzTGFzdCA/IHNhbXBsZUEgOiBzYW1wbGVXfVxuICB9XG5cbiAgZm4gbW1fcmVhZEIoYmF0Y2g6IGkzMiwgcm93IDogaTMyLCBjb2xJbiA6IGkzMikgLT4gJHt0eXBlfSB7XG4gICAgJHtpc0NoYW5uZWxzTGFzdCA/IHNhbXBsZVcgOiBzYW1wbGVBfVxuICB9XG5cbiAgZm4gbW1fd3JpdGUoYmF0Y2g6IGkzMiwgcm93IDogaTMyLCBjb2xJbiA6IGkzMiwgdmFsdWVJbnB1dCA6ICR7dHlwZX0pIHtcbiAgICBsZXQgY29sID0gY29sSW4gKiAke2lubmVyRWxlbWVudFNpemV9O1xuICAgIGlmIChyb3cgPCB1bmlmb3Jtcy5kaW1fYV9vdXRlciAmJiBjb2wgPCB1bmlmb3Jtcy5kaW1fYl9vdXRlcikge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVJbnB1dDtcbiAgICAgIGxldCBvdXRXaWR0aCA9ICR7aXNDaGFubmVsc0xhc3QgPyBcImkzMih1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbMl0pXCIgOiBcImkzMih1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbM10pXCJ9O1xuICAgICAgJHtjb29yZFJlc1NuaXBwZXR9XG4gICAgICAke2JpYXNTbmlwcGV0KGFkZEJpYXMpfVxuICAgICAgJHthcHBseUFjdGl2YXRpb259XG4gICAgICByZXN1bHRbZ2V0SW5kZXhGcm9tQ29vcmRzNEQoY29vcmRzLCB2ZWM0PGkzMj4odW5pZm9ybXMucmVzdWx0X3NoYXBlKSkvJHtpbm5lckVsZW1lbnRTaXplfV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1gO1xuICAgICAgICByZXR1cm4gdXNlckNvZGU7XG4gICAgICB9O1xuICAgICAgY3JlYXRlQ29udjJEVHJhbnNwb3NlTWF0TXVsUHJvZ3JhbUluZm8gPSAoaW5wdXRzLCBhdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZSwgZGltQU91dGVyLCBkaW1CT3V0ZXIsIGRpbUlubmVyLCBoYXNCaWFzLCBzZXF1ZW50aWFsQWNjZXNzQnlUaHJlYWRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09IFwiTkhXQ1wiO1xuICAgICAgICBjb25zdCBpbkNoYW5uZWxzID0gaXNDaGFubmVsc0xhc3QgPyBpbnB1dHNbMF0uZGltc1szXSA6IGlucHV0c1swXS5kaW1zWzFdO1xuICAgICAgICBjb25zdCBiYXRjaFNpemUgPSBvdXRwdXRTaGFwZVswXTtcbiAgICAgICAgY29uc3Qgb3V0V2lkdGggPSBpc0NoYW5uZWxzTGFzdCA/IG91dHB1dFNoYXBlWzJdIDogb3V0cHV0U2hhcGVbM107XG4gICAgICAgIGNvbnN0IG91dEhlaWdodCA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0cHV0U2hhcGVbMV0gOiBvdXRwdXRTaGFwZVsyXTtcbiAgICAgICAgY29uc3Qgb3V0Q2hhbm5lbHMgPSBpc0NoYW5uZWxzTGFzdCA/IG91dHB1dFNoYXBlWzNdIDogb3V0cHV0U2hhcGVbMV07XG4gICAgICAgIGNvbnN0IGlzVmVjNCA9IGlzQ2hhbm5lbHNMYXN0ICYmIChpbkNoYW5uZWxzICUgNCA9PT0gMCAmJiBpbkNoYW5uZWxzICUgMykgJiYgb3V0Q2hhbm5lbHMgJSA0ID09PSAwO1xuICAgICAgICBjb25zdCBkaXNwYXRjaFggPSBpc0NoYW5uZWxzTGFzdCA/IG91dENoYW5uZWxzIDogb3V0V2lkdGggKiBvdXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoWSA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0V2lkdGggKiBvdXRIZWlnaHQgOiBvdXRDaGFubmVscztcbiAgICAgICAgY29uc3Qgd29ya0dyb3VwU2l6ZSA9IFs4LCA4LCAxXTtcbiAgICAgICAgY29uc3QgZWxlbWVudHNQZXJUaHJlYWQgPSBkaW1BT3V0ZXIgPD0gOCA/IFs0LCAxLCAxXSA6IFs0LCA0LCAxXTtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2ggPSBbXG4gICAgICAgICAgTWF0aC5jZWlsKGRpc3BhdGNoWCAvIHdvcmtHcm91cFNpemVbMF0gLyBlbGVtZW50c1BlclRocmVhZFswXSksXG4gICAgICAgICAgTWF0aC5jZWlsKGRpc3BhdGNoWSAvIHdvcmtHcm91cFNpemVbMV0gLyBlbGVtZW50c1BlclRocmVhZFsxXSksXG4gICAgICAgICAgTWF0aC5jZWlsKGJhdGNoU2l6ZSAvIHdvcmtHcm91cFNpemVbMl0gLyBlbGVtZW50c1BlclRocmVhZFsyXSlcbiAgICAgICAgXTtcbiAgICAgICAgTE9HX0RFQlVHKFwidmVyYm9zZVwiLCAoKSA9PiBgW2NvbnZfYmFja3Byb3BfbW1fd2ViZ3B1XSBkaXNwYXRjaCA9ICR7ZGlzcGF0Y2h9YCk7XG4gICAgICAgIGNvbnN0IGlubmVyRWxlbWVudFNpemUgPSBpc1ZlYzQgPyA0IDogMTtcbiAgICAgICAgY29uc3QgdGlsZUlubmVyID0gTWF0aC5tYXgod29ya0dyb3VwU2l6ZVswXSAqIGlubmVyRWxlbWVudFNpemUsIHdvcmtHcm91cFNpemVbMV0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gaXNWZWM0ID8gNCA6IDE7XG4gICAgICAgIGNvbnN0IGZpbHRlckRpbXMgPSBbYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDEgOiAyXSwgYXR0cmlidXRlcy5rZXJuZWxTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXV07XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlckRpbXMgPSBbXG4gICAgICAgICAgZmlsdGVyRGltc1swXSArIChhdHRyaWJ1dGVzLmRpbGF0aW9uc1swXSA8PSAxID8gMCA6IChmaWx0ZXJEaW1zWzBdIC0gMSkgKiAoYXR0cmlidXRlcy5kaWxhdGlvbnNbMF0gLSAxKSksXG4gICAgICAgICAgZmlsdGVyRGltc1sxXSArIChhdHRyaWJ1dGVzLmRpbGF0aW9uc1sxXSA8PSAxID8gMCA6IChmaWx0ZXJEaW1zWzFdIC0gMSkgKiAoYXR0cmlidXRlcy5kaWxhdGlvbnNbMV0gLSAxKSlcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgcGFkcyA9IFtcbiAgICAgICAgICBlZmZlY3RpdmVGaWx0ZXJEaW1zWzBdIC0gMSAtIE1hdGguZmxvb3IoKGF0dHJpYnV0ZXMucGFkc1swXSArIGF0dHJpYnV0ZXMucGFkc1syXSkgLyAyKSxcbiAgICAgICAgICBlZmZlY3RpdmVGaWx0ZXJEaW1zWzFdIC0gMSAtIE1hdGguZmxvb3IoKGF0dHJpYnV0ZXMucGFkc1sxXSArIGF0dHJpYnV0ZXMucGFkc1szXSkgLyAyKVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXMgPSBbXG4gICAgICAgICAgeyB0eXBlOiA2IC8qIGludDMyICovLCBkYXRhOiBkaW1BT3V0ZXIgfSxcbiAgICAgICAgICB7IHR5cGU6IDYgLyogaW50MzIgKi8sIGRhdGE6IGRpbUJPdXRlciB9LFxuICAgICAgICAgIHsgdHlwZTogNiAvKiBpbnQzMiAqLywgZGF0YTogZGltSW5uZXIgfSxcbiAgICAgICAgICB7IHR5cGU6IDYgLyogaW50MzIgKi8sIGRhdGE6IGF0dHJpYnV0ZXMuc3RyaWRlcyB9LFxuICAgICAgICAgIHsgdHlwZTogNiAvKiBpbnQzMiAqLywgZGF0YTogYXR0cmlidXRlcy5kaWxhdGlvbnMgfSxcbiAgICAgICAgICB7IHR5cGU6IDYgLyogaW50MzIgKi8sIGRhdGE6IGZpbHRlckRpbXMgfSxcbiAgICAgICAgICB7IHR5cGU6IDYgLyogaW50MzIgKi8sIGRhdGE6IHBhZHMgfVxuICAgICAgICBdO1xuICAgICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXNEYXRhKGF0dHJpYnV0ZXMsIHByb2dyYW1Vbmlmb3Jtcyk7XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBpbnB1dHNbMV0uZGltcykpO1xuICAgICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llcyA9IFtcInJhbmtcIiwgXCJyYW5rXCJdO1xuICAgICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1syXS5kaW1zKSk7XG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXMucHVzaChcInJhbmtcIik7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGUpKTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKFwieFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgdyA9IGlucHV0VmFyaWFibGUoXCJ3XCIsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoLCAxKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcInJlc3VsdFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgaW5wdXRWYXJpYWJsZXMgPSBbeCwgd107XG4gICAgICAgICAgbGV0IGRlY2xhcmVGdW5jdGlvbnMgPSBcIlwiO1xuICAgICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgICBjb25zdCBiaWFzID0gaW5wdXRWYXJpYWJsZShcImJpYXNcIiwgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcy5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICAgICAgaW5wdXRWYXJpYWJsZXMucHVzaChiaWFzKTtcbiAgICAgICAgICAgIGRlY2xhcmVGdW5jdGlvbnMgKz0gYFxuICAgICAgICAgIGZuIGdldEJpYXNCeU91dHB1dENvb3Jkcyhjb29yZHMgOiB2ZWM0PGkzMj4pIC0+ICR7Ymlhcy50eXBlLnZhbHVlfSB7XG4gICAgICAgICAgICByZXR1cm4gYmlhc1tjb29yZHMuJHtpc0NoYW5uZWxzTGFzdCA/IFwid1wiIDogXCJ5XCJ9JHtpc1ZlYzQgPyBcIi8gNFwiIDogXCJcIn1dO1xuICAgICAgICAgIH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJkaW1fYV9vdXRlclwiLCB0eXBlOiBcImkzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiZGltX2Jfb3V0ZXJcIiwgdHlwZTogXCJpMzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImRpbV9pbm5lclwiLCB0eXBlOiBcImkzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwic3RyaWRlc1wiLCB0eXBlOiBcImkzMlwiLCBsZW5ndGg6IDIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJkaWxhdGlvbnNcIiwgdHlwZTogXCJpMzJcIiwgbGVuZ3RoOiAyIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiZmlsdGVyX2RpbXNcIiwgdHlwZTogXCJpMzJcIiwgbGVuZ3RoOiBmaWx0ZXJEaW1zLmxlbmd0aCB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInBhZHNcIiwgdHlwZTogXCJpMzJcIiwgbGVuZ3RoOiBwYWRzLmxlbmd0aCB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICBhcHBlbmRBY3RpdmF0aW9uVW5pZm9ybXMoYXR0cmlidXRlcywgdW5pZm9ybXMpO1xuICAgICAgICAgIGNvbnN0IGVsZW1UeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0c1swXS5kYXRhVHlwZSwgMSk7XG4gICAgICAgICAgaWYgKGVsZW1UeXBlICE9PSBcImYxNlwiICYmIGVsZW1UeXBlICE9PSBcImYzMlwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGVsZW1UeXBlICR7ZWxlbVR5cGV9IGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICR7dXRpbEZ1bmN0aW9ucyhcInVuaWZvcm1zLnJlc3VsdF9zdHJpZGVzXCIpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFyaWFibGVzLCBvdXRwdXQpfTtcbiAgICAgICAgJHtkZWNsYXJlRnVuY3Rpb25zfVxuICAgICAgICAke2NvbnYyZFRyYW5zcG9zZUNvbW1vblNuaXBwZXQoaXNDaGFubmVsc0xhc3QsIGhhc0JpYXMsIGF0dHJpYnV0ZXMsIHgudHlwZS52YWx1ZSwgaW5uZXJFbGVtZW50U2l6ZSl9XG4gICAgICAgICR7aXNWZWM0ID8gbWFrZU1hdE11bFBhY2tlZFZlYzRTb3VyY2UoXG4gICAgICAgICAgICBlbGVtZW50c1BlclRocmVhZCxcbiAgICAgICAgICAgIHdvcmtHcm91cFNpemUsXG4gICAgICAgICAgICBlbGVtVHlwZSxcbiAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgICFpc0NoYW5uZWxzTGFzdCxcbiAgICAgICAgICAgIHRpbGVJbm5lclxuICAgICAgICAgICkgOiBtYWtlTWF0TXVsUGFja2VkU291cmNlKFxuICAgICAgICAgICAgZWxlbWVudHNQZXJUaHJlYWQsXG4gICAgICAgICAgICB3b3JrR3JvdXBTaXplLFxuICAgICAgICAgICAgZWxlbVR5cGUsXG4gICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICAhaXNDaGFubmVsc0xhc3QsXG4gICAgICAgICAgICB0aWxlSW5uZXIsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgIHNlcXVlbnRpYWxBY2Nlc3NCeVRocmVhZHNcbiAgICAgICAgICApfWA7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJDb252MkRUcmFuc3Bvc2VNYXRNdWxcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBoaW50OiBgJHthdHRyaWJ1dGVzLmNhY2hlS2V5fTske2VsZW1lbnRzUGVyVGhyZWFkfTske3dvcmtHcm91cFNpemV9OyR7aXNWZWM0fWAsIGlucHV0RGVwZW5kZW5jaWVzIH0sXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBkaXNwYXRjaFswXSwgeTogZGlzcGF0Y2hbMV0sIHo6IGRpc3BhdGNoWzJdIH0sXG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2VcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzLzNyZC1wYXJ0eS9jb252X2JhY2twcm9wX3dlYmdwdS50c1xuICB2YXIgY3JlYXRlQ29udlRyYW5zcG9zZTJET3BQcm9ncmFtU2hhZGVyU291cmNlLCBjcmVhdGVDb252VHJhbnNwb3NlMkRQcm9ncmFtSW5mbztcbiAgdmFyIGluaXRfY29udl9iYWNrcHJvcF93ZWJncHUgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzLzNyZC1wYXJ0eS9jb252X2JhY2twcm9wX3dlYmdwdS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X2xvZygpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgY3JlYXRlQ29udlRyYW5zcG9zZTJET3BQcm9ncmFtU2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlciwgaW5wdXRzLCBvdXRwdXRTaGFwZSwgaGFzQmlhcywgaXMxRGltZW5zaW9uRGlzcGF0Y2gsIGlzVmVjNCA9IGZhbHNlLCBkYXRhVHlwZSwgdW5pZm9ybXMsIGlzQ2hhbm5lbHNMYXN0ID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3Qgcm93RGltID0gaXNDaGFubmVsc0xhc3QgPyAxIDogMjtcbiAgICAgICAgY29uc3QgY29sRGltID0gaXNDaGFubmVsc0xhc3QgPyAyIDogMztcbiAgICAgICAgY29uc3QgY2hhbm5lbERpbSA9IGlzQ2hhbm5lbHNMYXN0ID8gMyA6IDE7XG4gICAgICAgIGNvbnN0IHdvcmtQZXJUaHJlYWQgPSBpc1ZlYzQgPyAyIDogMTtcbiAgICAgICAgbGV0IGRlY2xhcmVGdW5jdGlvbnMgPSBgXG4gIGZuIHNldE91dHB1dEF0SW5kZXgoZmxhdEluZGV4IDogdTMyLCB2YWx1ZSA6ICR7aXNWZWM0ID8gYHZlYzQ8JHtkYXRhVHlwZX0+YCA6IGRhdGFUeXBlfSkge1xuICAgIHJlc3VsdFtmbGF0SW5kZXhdID0gJHtpc1ZlYzQgPyBgdmVjNDwke2RhdGFUeXBlfT5gIDogZGF0YVR5cGV9KHZhbHVlKTtcbiAgfWA7XG4gICAgICAgIGlmIChoYXNCaWFzKSB7XG4gICAgICAgICAgZGVjbGFyZUZ1bmN0aW9ucyArPSBgXG4gICAgZm4gZ2V0Qmlhc0J5T3V0cHV0Q29vcmRzKGNvb3JkcyA6IHZlYzQ8dTMyPikgLT4gJHtpc1ZlYzQgPyBgdmVjNDwke2RhdGFUeXBlfT5gIDogZGF0YVR5cGV9IHtcbiAgICAgIHJldHVybiBiaWFzW2Nvb3Jkcy4ke2lzQ2hhbm5lbHNMYXN0ID8gXCJ3XCIgOiBcInlcIn0ke2lzVmVjNCA/IFwiLyA0XCIgOiBcIlwifV07XG4gICAgfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGlzVmVjNCA/IDQgOiAxO1xuICAgICAgICBjb25zdCB3ID0gaW5wdXRWYXJpYWJsZShcIldcIiwgaW5wdXRzWzFdLmRhdGFUeXBlLCBpbnB1dHNbMV0uZGltcy5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBkeSA9IGlucHV0VmFyaWFibGUoXCJEeVwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFyaWFibGVzID0gW2R5LCB3XTtcbiAgICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgICBpbnB1dFZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoXCJiaWFzXCIsIGlucHV0c1syXS5kYXRhVHlwZSwgW291dHB1dFNoYXBlW2NoYW5uZWxEaW1dXS5sZW5ndGgsIGNvbXBvbmVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcInJlc3VsdFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGNvZGVTbmlwcGV0NCA9IGB7XG4gICAgICAgIGxldCBiYXRjaDogdTMyID0gJHtpczFEaW1lbnNpb25EaXNwYXRjaCA/IFwiZ2xvYmFsX2lkLnpcIiA6IFwid29ya2dyb3VwX2lkLnpcIn0gLyB1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbMV07XG4gICAgICAgIGxldCByID0gJHtpczFEaW1lbnNpb25EaXNwYXRjaCA/IFwiZ2xvYmFsX2lkLnpcIiA6IFwid29ya2dyb3VwX2lkLnpcIn0gJSB1bmlmb3Jtcy5yZXN1bHRfc2hhcGVbMV07XG4gICAgICAgIGxldCBjID0gJHtpczFEaW1lbnNpb25EaXNwYXRjaCA/IFwiZ2xvYmFsX2lkLnlcIiA6IFwid29ya2dyb3VwX2lkLnlcIn0gKiAke3dvcmtQZXJUaHJlYWR9O1xuICAgICAgICBsZXQgZDE6IHUzMiA9ICR7aXMxRGltZW5zaW9uRGlzcGF0Y2ggPyBcImdsb2JhbF9pZC54XCIgOiBcIndvcmtncm91cF9pZC54XCJ9ICogNDtcblxuICAgICAgICBsZXQgZHlDb3JuZXIgPSB2ZWMyPGkzMj4oaTMyKHIpLCBpMzIoYykpIC0gdmVjMjxpMzI+KHVuaWZvcm1zLnBhZHMpO1xuXG4gICAgICAgIC8vIENvbnZvbHZlIGR5KD8sID8sIGQyKSB3aXRoIHcoOiwgOiwgZDEsIGQyKSB0byBjb21wdXRlIGR4KHhSLCB4QywgZDEpLlxuICAgICAgICAvLyA/ID0gdG8gYmUgZGV0ZXJtaW5lZC4gOiA9IGFjcm9zcyBhbGwgdmFsdWVzIGluIHRoYXQgYXhpcy5cbiAgICAgICAgdmFyIGRvdFByb2Q6IGFycmF5PHZlYzQ8JHtkYXRhVHlwZX0+LCAke3dvcmtQZXJUaHJlYWR9PjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAke3dvcmtQZXJUaHJlYWR9OyBpKyspIHtcbiAgICAgICAgICBkb3RQcm9kW2ldID0gdmVjNDwke2RhdGFUeXBlfT4oMC4wKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciB3UjogdTMyID0gMDsgd1IgPCB1bmlmb3Jtcy5maWx0ZXJfZGltc1swXTsgd1IgPSB3UiArIDEpIHtcbiAgICAgICAgICB2YXIgZHlSID0gKCR7ZGF0YVR5cGV9KGR5Q29ybmVyLngpICsgJHtkYXRhVHlwZX0od1IpKSAvICR7ZGF0YVR5cGV9KHVuaWZvcm1zLnN0cmlkZXMueCk7XG4gICAgICAgICAgbGV0IHdSUGVybSA9IHVuaWZvcm1zLmZpbHRlcl9kaW1zWzBdIC0gMSAtIHdSO1xuICAgICAgICAgIGlmIChkeVIgPCAwLjAgfHwgZHlSID49ICR7ZGF0YVR5cGV9KHVuaWZvcm1zLkR5X3NoYXBlWzFdKSB8fFxuICAgICAgICAgICAgICBmcmFjdChkeVIpID4gMC4wIHx8IHdSUGVybSA8IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgaWR5UjogdTMyID0gdTMyKGR5Uik7XG5cbiAgICAgICAgICBmb3IgKHZhciB3QzogdTMyID0gMDsgd0MgPCB1bmlmb3Jtcy5maWx0ZXJfZGltc1sxXTsgd0MgPSB3QyArIDEpIHtcbiAgICAgICAgICAgIGxldCBkeUMgPSAoJHtkYXRhVHlwZX0oZHlDb3JuZXIueSkgKyAke2RhdGFUeXBlfSh3QykpIC8gJHtkYXRhVHlwZX0odW5pZm9ybXMuc3RyaWRlcy55KTtcbiAgICAgICAgICAgIGxldCBkeUMyID0gKCR7ZGF0YVR5cGV9KGR5Q29ybmVyLnkpICsgMS4wICsgJHtkYXRhVHlwZX0od0MpKSAvICR7ZGF0YVR5cGV9KHVuaWZvcm1zLnN0cmlkZXMueSk7XG4gICAgICAgICAgICBsZXQgd0NQZXJtID0gdW5pZm9ybXMuZmlsdGVyX2RpbXNbMV0gLSAxIC0gd0M7XG4gICAgICAgICAgICBpZiAod0NQZXJtIDwgMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBiRHlDVmFsID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBiRHlDVmFsMiA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZHlDIDwgMC4wIHx8IGR5QyA+PSAke2RhdGFUeXBlfSh1bmlmb3Jtcy5EeV9zaGFwZVsyXSkgfHxcbiAgICAgICAgICAgICAgICBmcmFjdChkeUMpID4gMC4wKSB7XG4gICAgICAgICAgICAgIGJEeUNWYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkeUMyIDwgMC4wIHx8IGR5QzIgPj0gJHtkYXRhVHlwZX0odW5pZm9ybXMuRHlfc2hhcGVbMl0pIHx8XG4gICAgICAgICAgICAgICAgZnJhY3QoZHlDMikgPiAwLjApIHtcbiAgICAgICAgICAgICAgYkR5Q1ZhbDIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlkeUM6IHUzMiA9IHUzMihkeUMpO1xuICAgICAgICAgICAgbGV0IGlkeUMyOiB1MzIgPSB1MzIoZHlDMik7XG4gICAgICAgICAgICBpZiAoYkR5Q1ZhbCAmJiBiRHlDVmFsMikge1xuICAgICAgICAgICAgICBsZXQgZDJMZW5ndGggPSB1bmlmb3Jtcy5EeV9zaGFwZVszXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgZDIgOnUzMiA9IDA7IGQyIDwgZDJMZW5ndGg7IGQyID0gZDIgKyA0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHdWYWx1ZTAgPSAke3cuZ2V0KFwidTMyKHdSUGVybSlcIiwgXCJ1MzIod0NQZXJtKVwiLCBcImQxXCIsIFwiZDJcIil9O1xuICAgICAgICAgICAgICAgIGxldCB3VmFsdWUxID0gJHt3LmdldChcInUzMih3UlBlcm0pXCIsIFwidTMyKHdDUGVybSlcIiwgXCJkMSArIDFcIiwgXCJkMlwiKX07XG4gICAgICAgICAgICAgICAgbGV0IHdWYWx1ZTIgPSAke3cuZ2V0KFwidTMyKHdSUGVybSlcIiwgXCJ1MzIod0NQZXJtKVwiLCBcImQxICsgMlwiLCBcImQyXCIpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMyA9ICR7dy5nZXQoXCJ1MzIod1JQZXJtKVwiLCBcInUzMih3Q1Blcm0pXCIsIFwiZDEgKyAzXCIsIFwiZDJcIil9O1xuXG4gICAgICAgICAgICAgICAgdmFyIHhWYWx1ZSA9ICR7ZHkuZ2V0KFwiYmF0Y2hcIiwgXCJpZHlSXCIsIFwiaWR5Q1wiLCBcImQyXCIpfTtcbiAgICAgICAgICAgICAgICBsZXQgdG1wdmFsID0gdmVjNDwke2RhdGFUeXBlfT4oZG90KHhWYWx1ZSwgd1ZhbHVlMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QoeFZhbHVlLCB3VmFsdWUyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHhWYWx1ZSwgd1ZhbHVlMykpO1xuICAgICAgICAgICAgICAgIGRvdFByb2RbMF0gPSBkb3RQcm9kWzBdICsgdG1wdmFsO1xuXG4gICAgICAgICAgICAgICAgeFZhbHVlID0gICR7ZHkuZ2V0KFwiYmF0Y2hcIiwgXCJpZHlSXCIsIFwiaWR5QzJcIiwgXCJkMlwiKX07XG5cbiAgICAgICAgICAgICAgICBkb3RQcm9kWzFdID0gZG90UHJvZFsxXSArIHZlYzQ8JHtkYXRhVHlwZX0+KGRvdCh4VmFsdWUsIHdWYWx1ZTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTMpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChiRHlDVmFsKSB7XG4gICAgICAgICAgICAgIGxldCBkMkxlbmd0aCA9IHVuaWZvcm1zLkR5X3NoYXBlWyR7Y2hhbm5lbERpbX1dO1xuICAgICAgICAgICAgICBmb3IgKHZhciBkMjogdTMyID0gMDsgZDIgPCBkMkxlbmd0aDsgZDIgPSBkMiArIDQpIHtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMCA9ICR7dy5nZXQoXCJ1MzIod1JQZXJtKVwiLCBcInUzMih3Q1Blcm0pXCIsIFwiZDFcIiwgXCJkMlwiKX07XG4gICAgICAgICAgICAgICAgbGV0IHdWYWx1ZTEgPSAke3cuZ2V0KFwidTMyKHdSUGVybSlcIiwgXCJ1MzIod0NQZXJtKVwiLCBcImQxICsgMVwiLCBcImQyXCIpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMiA9ICR7dy5nZXQoXCJ1MzIod1JQZXJtKVwiLCBcInUzMih3Q1Blcm0pXCIsIFwiZDEgKyAyXCIsIFwiZDJcIil9O1xuICAgICAgICAgICAgICAgIGxldCB3VmFsdWUzID0gJHt3LmdldChcInUzMih3UlBlcm0pXCIsIFwidTMyKHdDUGVybSlcIiwgXCJkMSArIDNcIiwgXCJkMlwiKX07XG5cbiAgICAgICAgICAgICAgICB2YXIgeFZhbHVlID0gJHtkeS5nZXQoXCJiYXRjaFwiLCBcImlkeVJcIiwgXCJpZHlDXCIsIFwiZDJcIil9O1xuICAgICAgICAgICAgICAgIGxldCB0bXB2YWwgPSB2ZWM0PCR7ZGF0YVR5cGV9Pihkb3QoeFZhbHVlLCB3VmFsdWUwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHhWYWx1ZSwgd1ZhbHVlMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QoeFZhbHVlLCB3VmFsdWUzKSk7XG4gICAgICAgICAgICAgICAgZG90UHJvZFswXSA9IGRvdFByb2RbMF0gKyB0bXB2YWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYkR5Q1ZhbDIpIHtcbiAgICAgICAgICAgICAgbGV0IGQyTGVuZ3RoID0gdW5pZm9ybXMuRHlfc2hhcGVbM107XG4gICAgICAgICAgICAgIGZvciAodmFyIGQyOiB1MzIgPSAwOyBkMiA8IGQyTGVuZ3RoOyBkMiA9IGQyICsgNCkge1xuICAgICAgICAgICAgICAgIGxldCB3VmFsdWUwID0gJHt3LmdldChcInUzMih3UlBlcm0pXCIsIFwidTMyKHdDUGVybSlcIiwgXCJkMVwiLCBcImQyXCIpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlMSA9ICR7dy5nZXQoXCJ1MzIod1JQZXJtKVwiLCBcInUzMih3Q1Blcm0pXCIsIFwiZDEgKyAxXCIsIFwiZDJcIil9O1xuICAgICAgICAgICAgICAgIGxldCB3VmFsdWUyID0gJHt3LmdldChcInUzMih3UlBlcm0pXCIsIFwidTMyKHdDUGVybSlcIiwgXCJkMSArIDJcIiwgXCJkMlwiKX07XG4gICAgICAgICAgICAgICAgbGV0IHdWYWx1ZTMgPSAke3cuZ2V0KFwidTMyKHdSUGVybSlcIiwgXCJ1MzIod0NQZXJtKVwiLCBcImQxICsgM1wiLCBcImQyXCIpfTtcblxuICAgICAgICAgICAgICAgIHZhciB4VmFsdWUgPSAke2R5LmdldChcImJhdGNoXCIsIFwiaWR5UlwiLCBcImlkeUMyXCIsIFwiZDJcIil9O1xuICAgICAgICAgICAgICAgIGxldCB0bXB2YWwgPSB2ZWM0PCR7ZGF0YVR5cGV9Pihkb3QoeFZhbHVlLCB3VmFsdWUwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHhWYWx1ZSwgd1ZhbHVlMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCh4VmFsdWUsIHdWYWx1ZTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QoeFZhbHVlLCB3VmFsdWUzKSk7XG4gICAgICAgICAgICAgICAgZG90UHJvZFsxXSA9IGRvdFByb2RbMV0gKyB0bXB2YWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpOiB1MzIgPSAwOyBpIDwgJHt3b3JrUGVyVGhyZWFkfTsgaSA9IGkgKyAxKSB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gZG90UHJvZFtpXSArICR7aGFzQmlhcyA/IFwiYmlhc1tjK2ldXCIgOiBgdmVjNDwke2RhdGFUeXBlfT4oMC4wKWB9O1xuICAgICAgICAgICR7b3V0cHV0LnNldChcImJhdGNoXCIsIFwiclwiLCBcImMgKyBpXCIsIFwiZDFcIiwgXCJ2YWx1ZVwiKX07XG4gICAgICAgIH1cbiAgICAgIH1gO1xuICAgICAgICBjb25zdCBjb2RlU25pcHBldCA9IGBcbiAgICAgICAgICBsZXQgb3V0cHV0SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcyhcImdsb2JhbF9pZHhcIil9O1xuICAgICAgICAgIGxldCBiYXRjaCA9ICR7b3V0cHV0LmluZGljZXNHZXQoXCJvdXRwdXRJbmRpY2VzXCIsIDApfTtcbiAgICAgICAgICBsZXQgZDEgPSAke291dHB1dC5pbmRpY2VzR2V0KFwib3V0cHV0SW5kaWNlc1wiLCBjaGFubmVsRGltKX07XG4gICAgICAgICAgbGV0IHIgPSAke291dHB1dC5pbmRpY2VzR2V0KFwib3V0cHV0SW5kaWNlc1wiLCByb3dEaW0pfTtcbiAgICAgICAgICBsZXQgYyA9ICR7b3V0cHV0LmluZGljZXNHZXQoXCJvdXRwdXRJbmRpY2VzXCIsIGNvbERpbSl9O1xuICAgICAgICAgIGxldCBkeUNvcm5lciA9IHZlYzI8aTMyPihpMzIociksIGkzMihjKSkgLSB1bmlmb3Jtcy5wYWRzO1xuICAgICAgICAgIGxldCBkeVJDb3JuZXIgPSBkeUNvcm5lci54O1xuICAgICAgICAgIGxldCBkeUNDb3JuZXIgPSBkeUNvcm5lci55O1xuICAgICAgICAgIGxldCBncm91cElkID0gZDEgLyB1bmlmb3Jtcy5vdXRwdXRfY2hhbm5lbHNfcGVyX2dyb3VwO1xuICAgICAgICAgIGxldCB3T3V0Q2hhbm5lbCA9IGQxIC0gZ3JvdXBJZCAqIHVuaWZvcm1zLm91dHB1dF9jaGFubmVsc19wZXJfZ3JvdXA7XG4gICAgICAgICAgLy8gQ29udm9sdmUgZHkoPywgPywgZDIpIHdpdGggdyg6LCA6LCBkMSwgZDIpIHRvIGNvbXB1dGUgZHgoeFIsIHhDLCBkMSkuXG4gICAgICAgICAgLy8gPyA9IHRvIGJlIGRldGVybWluZWQuIDogPSBhY3Jvc3MgYWxsIHZhbHVlcyBpbiB0aGF0IGF4aXMuXG4gICAgICAgICAgdmFyIGRvdFByb2QgPSAke2RhdGFUeXBlfSgwLjApO1xuICAgICAgICAgIGZvciAodmFyIHdSOiB1MzIgPSAwOyB3UiA8IHVuaWZvcm1zLmVmZmVjdGl2ZV9maWx0ZXJfZGltcy54OyB3UiA9IHdSICsgMSkge1xuICAgICAgICAgICAgaWYgKHdSICUgdW5pZm9ybXMuZGlsYXRpb25zLnggIT0gMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkeVIgPSAoJHtkYXRhVHlwZX0oZHlSQ29ybmVyKSArICR7ZGF0YVR5cGV9KHdSKSkgLyAke2RhdGFUeXBlfSh1bmlmb3Jtcy5zdHJpZGVzWzBdKTtcbiAgICAgICAgICAgIGxldCB3UlBlcm0gPSB1bmlmb3Jtcy5maWx0ZXJfZGltcy54IC0gMSAtIHdSIC8gdW5pZm9ybXMuZGlsYXRpb25zLng7XG4gICAgICAgICAgICBpZiAoZHlSIDwgMC4wIHx8IGR5UiA+PSAke2RhdGFUeXBlfSh1bmlmb3Jtcy5EeV9zaGFwZVske3Jvd0RpbX1dKSB8fCBmcmFjdChkeVIpID4gMC4wIHx8XG4gICAgICAgICAgICAgICAgd1JQZXJtIDwgMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpZHlSOiB1MzIgPSB1MzIoZHlSKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgd0M6IHUzMiA9IDA7IHdDIDwgdW5pZm9ybXMuZWZmZWN0aXZlX2ZpbHRlcl9kaW1zLnk7IHdDID0gd0MgKyAxKSB7XG4gICAgICAgICAgICAgIGlmICh3QyAlIHVuaWZvcm1zLmRpbGF0aW9ucy55ICE9IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgZHlDID0gKCR7ZGF0YVR5cGV9KGR5Q0Nvcm5lcikgKyAke2RhdGFUeXBlfSh3QykpIC8gJHtkYXRhVHlwZX0odW5pZm9ybXMuc3RyaWRlcy55KTtcbiAgICAgICAgICAgICAgbGV0IHdDUGVybSA9IHVuaWZvcm1zLmZpbHRlcl9kaW1zLnkgLSAxIC0gd0MgLyB1bmlmb3Jtcy5kaWxhdGlvbnMueTtcbiAgICAgICAgICAgICAgaWYgKGR5QyA8IDAuMCB8fCBkeUMgPj0gJHtkYXRhVHlwZX0odW5pZm9ybXMuRHlfc2hhcGVbJHtjb2xEaW19XSkgfHxcbiAgICAgICAgICAgICAgICAgIGZyYWN0KGR5QykgPiAwLjAgfHwgd0NQZXJtIDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBpZHlDOiB1MzIgPSB1MzIoZHlDKTtcbiAgICAgICAgICAgICAgdmFyIGlucHV0Q2hhbm5lbCA9IGdyb3VwSWQgKiB1bmlmb3Jtcy5pbnB1dF9jaGFubmVsc19wZXJfZ3JvdXA7XG4gICAgICAgICAgICAgIGZvciAodmFyIGQyOiB1MzIgPSAwOyBkMiA8IHVuaWZvcm1zLmlucHV0X2NoYW5uZWxzX3Blcl9ncm91cDsgZDIgPSBkMiArIDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgeFZhbHVlID0gJHtpc0NoYW5uZWxzTGFzdCA/IGR5LmdldChcImJhdGNoXCIsIFwiaWR5UlwiLCBcImlkeUNcIiwgXCJpbnB1dENoYW5uZWxcIikgOiBkeS5nZXQoXCJiYXRjaFwiLCBcImlucHV0Q2hhbm5lbFwiLCBcImlkeVJcIiwgXCJpZHlDXCIpfTtcbiAgICAgICAgICAgICAgICBsZXQgd1ZhbHVlID0gJHt3LmdldChcImlucHV0Q2hhbm5lbFwiLCBcIndPdXRDaGFubmVsXCIsIFwidTMyKHdSUGVybSlcIiwgXCJ1MzIod0NQZXJtKVwiKX07XG4gICAgICAgICAgICAgICAgZG90UHJvZCA9IGRvdFByb2QgKyB4VmFsdWUgKiB3VmFsdWU7XG4gICAgICAgICAgICAgICAgaW5wdXRDaGFubmVsID0gaW5wdXRDaGFubmVsICsgMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdmFsdWUgPSBkb3RQcm9kICsgJHtoYXNCaWFzID8gXCJiaWFzW2QxXVwiIDogYCR7ZGF0YVR5cGV9KDAuMClgfTtcbiAgICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIiwgXCJ2YWx1ZVwiKX07XG4gICAgICAgIGA7XG4gICAgICAgIHJldHVybiBgXG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoLi4uaW5wdXRWYXJpYWJsZXMsIG91dHB1dCl9XG4gICR7ZGVjbGFyZUZ1bmN0aW9uc31cblxuICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRfc2l6ZVwiKX07XG4gICR7aXNWZWM0ID8gY29kZVNuaXBwZXQ0IDogY29kZVNuaXBwZXR9fWA7XG4gICAgICB9O1xuICAgICAgY3JlYXRlQ29udlRyYW5zcG9zZTJEUHJvZ3JhbUluZm8gPSAoaW5wdXRzLCBhdHRyaWJ1dGVzLCBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBoYXNCaWFzID0gaW5wdXRzLmxlbmd0aCA+IDI7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gYXR0cmlidXRlcy5vdXRwdXRTaGFwZTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2ggPSBbXG4gICAgICAgICAgTWF0aC5jZWlsKG91dHB1dFNpemUgLyA2NCksXG4gICAgICAgICAgMSxcbiAgICAgICAgICAxXG4gICAgICAgIF07XG4gICAgICAgIExPR19ERUJVRyhcInZlcmJvc2VcIiwgKCkgPT4gYFtjb252MmRfYmFja3Byb3Bfd2ViZ3B1XSBkaXNwYXRjaCA9ICR7ZGlzcGF0Y2h9YCk7XG4gICAgICAgIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09IFwiTkhXQ1wiO1xuICAgICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llcyA9IFtcInJhbmtcIiwgXCJyYW5rXCJdO1xuICAgICAgICBjb25zdCBzdHJpZGVzID0gW2F0dHJpYnV0ZXMuc3RyaWRlc1swXSwgYXR0cmlidXRlcy5zdHJpZGVzWzFdXTtcbiAgICAgICAgY29uc3QgZmlsdGVyRGltcyA9IFthdHRyaWJ1dGVzLmtlcm5lbFNoYXBlW2lzQ2hhbm5lbHNMYXN0ID8gMSA6IDJdLCBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlW2lzQ2hhbm5lbHNMYXN0ID8gMiA6IDNdXTtcbiAgICAgICAgY29uc3QgZGlsYXRpb25zID0gW2F0dHJpYnV0ZXMuZGlsYXRpb25zWzBdLCBhdHRyaWJ1dGVzLmRpbGF0aW9uc1sxXV07XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlckRpbXMgPSBbXG4gICAgICAgICAgZmlsdGVyRGltc1swXSArIChhdHRyaWJ1dGVzLmRpbGF0aW9uc1swXSA8PSAxID8gMCA6IChhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlW2lzQ2hhbm5lbHNMYXN0ID8gMSA6IDJdIC0gMSkgKiAoYXR0cmlidXRlcy5kaWxhdGlvbnNbMF0gLSAxKSksXG4gICAgICAgICAgZmlsdGVyRGltc1sxXSArIChhdHRyaWJ1dGVzLmRpbGF0aW9uc1sxXSA8PSAxID8gMCA6IChhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlW2lzQ2hhbm5lbHNMYXN0ID8gMiA6IDNdIC0gMSkgKiAoYXR0cmlidXRlcy5kaWxhdGlvbnNbMV0gLSAxKSlcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgcGFkcyA9IFtcbiAgICAgICAgICBlZmZlY3RpdmVGaWx0ZXJEaW1zWzBdIC0gMSAtIE1hdGguZmxvb3IoKGF0dHJpYnV0ZXMucGFkc1swXSArIGF0dHJpYnV0ZXMucGFkc1syXSkgLyAyKSxcbiAgICAgICAgICBlZmZlY3RpdmVGaWx0ZXJEaW1zWzFdIC0gMSAtIE1hdGguZmxvb3IoYXR0cmlidXRlcy5wYWRzWzFdICsgYXR0cmlidXRlcy5wYWRzWzNdKSAvIDJcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaXNWZWM0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gYXR0cmlidXRlcy5ncm91cDtcbiAgICAgICAgY29uc3Qgd1NoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG4gICAgICAgIGNvbnN0IGlucHV0Q2hhbm5lbHNQZXJHcm91cCA9IHdTaGFwZVswXSAvIGdyb3VwO1xuICAgICAgICBjb25zdCBvdXRwdXRDaGFubmVsc1Blckdyb3VwID0gd1NoYXBlWzFdO1xuICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXMgPSBbXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IG91dHB1dFNpemUgfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogc3RyaWRlcyB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBmaWx0ZXJEaW1zIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IGRpbGF0aW9ucyB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBlZmZlY3RpdmVGaWx0ZXJEaW1zIH0sXG4gICAgICAgICAgeyB0eXBlOiA2IC8qIGludDMyICovLCBkYXRhOiBwYWRzIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IGlucHV0Q2hhbm5lbHNQZXJHcm91cCB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBvdXRwdXRDaGFubmVsc1Blckdyb3VwIH0sXG4gICAgICAgICAgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRzWzBdLmRpbXMsIGlucHV0c1sxXS5kaW1zKVxuICAgICAgICBdO1xuICAgICAgICBpZiAoaGFzQmlhcykge1xuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1syXS5kaW1zKSk7XG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXMucHVzaChcInJhbmtcIik7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMob3V0cHV0U2hhcGUpKTtcbiAgICAgICAgY29uc3QgaXMxRGltZW5zaW9uRGlzcGF0Y2ggPSBkaXNwYXRjaFsxXSA9PT0gMSAmJiBkaXNwYXRjaFsyXSA9PT0gMTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuaWZvcm1zID0gW1xuICAgICAgICAgICAgeyBuYW1lOiBcIm91dHB1dF9zaXplXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJzdHJpZGVzXCIsIHR5cGU6IFwidTMyXCIsIGxlbmd0aDogc3RyaWRlcy5sZW5ndGggfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJmaWx0ZXJfZGltc1wiLCB0eXBlOiBcInUzMlwiLCBsZW5ndGg6IGZpbHRlckRpbXMubGVuZ3RoIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiZGlsYXRpb25zXCIsIHR5cGU6IFwidTMyXCIsIGxlbmd0aDogZmlsdGVyRGltcy5sZW5ndGggfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJlZmZlY3RpdmVfZmlsdGVyX2RpbXNcIiwgdHlwZTogXCJ1MzJcIiwgbGVuZ3RoOiBlZmZlY3RpdmVGaWx0ZXJEaW1zLmxlbmd0aCB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInBhZHNcIiwgdHlwZTogXCJpMzJcIiwgbGVuZ3RoOiBwYWRzLmxlbmd0aCB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImlucHV0X2NoYW5uZWxzX3Blcl9ncm91cFwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwib3V0cHV0X2NoYW5uZWxzX3Blcl9ncm91cFwiLCB0eXBlOiBcInUzMlwiIH1cbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0c1swXS5kYXRhVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIGAke2NyZWF0ZUNvbnZUcmFuc3Bvc2UyRE9wUHJvZ3JhbVNoYWRlclNvdXJjZShcbiAgICAgICAgICAgIHNoYWRlckhlbHBlcixcbiAgICAgICAgICAgIGlucHV0cyxcbiAgICAgICAgICAgIG91dHB1dFNoYXBlLFxuICAgICAgICAgICAgaGFzQmlhcyxcbiAgICAgICAgICAgIGlzMURpbWVuc2lvbkRpc3BhdGNoLFxuICAgICAgICAgICAgaXNWZWM0LFxuICAgICAgICAgICAgZGF0YVR5cGUsXG4gICAgICAgICAgICB1bmlmb3JtcyxcbiAgICAgICAgICAgIGlzQ2hhbm5lbHNMYXN0XG4gICAgICAgICAgKX1gO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiQ29udlRyYW5zcG9zZTJEXCIsXG4gICAgICAgICAgc2hhZGVyQ2FjaGU6IHsgaGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX07YCwgaW5wdXREZXBlbmRlbmNpZXMgfSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBkaXNwYXRjaFswXSwgeTogZGlzcGF0Y2hbMV0sIHo6IGRpc3BhdGNoWzJdIH0sXG4gICAgICAgICAgICBvdXRwdXRzOiBbe1xuICAgICAgICAgICAgICBkaW1zOiBzcXVlZXplT3V0cHV0U2hhcGVGdW5jdGlvbiA/IHNxdWVlemVPdXRwdXRTaGFwZUZ1bmN0aW9uKG91dHB1dFNoYXBlKSA6IG91dHB1dFNoYXBlLFxuICAgICAgICAgICAgICBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlXG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvY29udi10cmFuc3Bvc2UudHNcbiAgdmFyIGNvbXB1dGVUb3RhbFBhZCwgZGlzdHJpYnV0ZVBhZGRpbmcsIGNhbGN1bGF0ZU91dHB1dFNoYXBlQW5kUGFkcywgZ2V0QWRqdXN0ZWRDb252VHJhbnNwb3NlQXR0cmlidXRlcywgcGFyc2VDb252VHJhbnNwb3NlQXR0cmlidXRlcywgdmFsaWRhdGVJbnB1dHMxMCwgd2VpZ2h0VHJhbnNwb3NlUGVybSwgY29udlRyYW5zcG9zZTJkLCBjb252VHJhbnNwb3NlMWQsIGNvbnZUcmFuc3Bvc2U7XG4gIHZhciBpbml0X2NvbnZfdHJhbnNwb3NlID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9jb252LXRyYW5zcG9zZS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X2NvbnZfYmFja3Byb3BfbW1fd2ViZ3B1KCk7XG4gICAgICBpbml0X2NvbnZfYmFja3Byb3Bfd2ViZ3B1KCk7XG4gICAgICBpbml0X2Z1c2VfdXRpbHMoKTtcbiAgICAgIGluaXRfdHJhbnNwb3NlKCk7XG4gICAgICBjb21wdXRlVG90YWxQYWQgPSAoaW5EaW0sIHN0cmlkZSwgYWRqLCBrZXJuZWwsIGRpbGF0aW9uLCBvdXRTaXplKSA9PiAoaW5EaW0gLSAxKSAqIHN0cmlkZSArIGFkaiArIChrZXJuZWwgLSAxKSAqIGRpbGF0aW9uICsgMSAtIG91dFNpemU7XG4gICAgICBkaXN0cmlidXRlUGFkZGluZyA9ICh0b3RhbFBhZCwgYXV0b1BhZCwgcGFkcywgaGVhZCwgdGFpbCkgPT4ge1xuICAgICAgICBjb25zdCBzbWFsbFBhZCA9IE1hdGguZmxvb3IodG90YWxQYWQgLyAyKTtcbiAgICAgICAgaWYgKGF1dG9QYWQgPT09IFwiU0FNRV9VUFBFUlwiKSB7XG4gICAgICAgICAgcGFkc1toZWFkXSA9IHNtYWxsUGFkO1xuICAgICAgICAgIHBhZHNbdGFpbF0gPSB0b3RhbFBhZCAtIHNtYWxsUGFkO1xuICAgICAgICB9IGVsc2UgaWYgKGF1dG9QYWQgPT09IFwiU0FNRV9MT1dFUlwiKSB7XG4gICAgICAgICAgcGFkc1toZWFkXSA9IHRvdGFsUGFkIC0gc21hbGxQYWQ7XG4gICAgICAgICAgcGFkc1t0YWlsXSA9IHNtYWxsUGFkO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2FsY3VsYXRlT3V0cHV0U2hhcGVBbmRQYWRzID0gKGlucHV0U2hhcGUsIGtlcm5lbFNoYXBlLCBkaWxhdGlvbnMsIGF1dG9QYWQsIGdyb3VwLCBwYWRzLCBzdHJpZGVzLCBpc0NoYW5uZWxMYXN0LCBvdXRwdXRQYWRkaW5nLCBvdXRwdXRTaGFwZSkgPT4ge1xuICAgICAgICBjb25zdCBzcGF0aWFsUmFuayA9IGlucHV0U2hhcGUubGVuZ3RoIC0gMjtcbiAgICAgICAgY29uc3QgdXBkYXRlT3V0cHV0U2hhcGUgPSBvdXRwdXRTaGFwZS5sZW5ndGggPT09IDA7XG4gICAgICAgIGlmIChvdXRwdXRQYWRkaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BhdGlhbFJhbms7ICsraSkge1xuICAgICAgICAgICAgb3V0cHV0UGFkZGluZy5wdXNoKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYXRjaFNpemUgPSBpbnB1dFNoYXBlWzBdO1xuICAgICAgICBjb25zdCBvdXRDaGFubmVscyA9IGtlcm5lbFNoYXBlW2lzQ2hhbm5lbExhc3QgPyAzIDogMV0gKiBncm91cDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSBpbnB1dFNoYXBlLmxlbmd0aCAtIHNwYXRpYWxSYW5rIC0gKGlzQ2hhbm5lbExhc3QgPyAxIDogMCk7IGkgPCBzcGF0aWFsUmFuazsgKytpLCArK2opIHtcbiAgICAgICAgICBjb25zdCBpblNpemUgPSBpbnB1dFNoYXBlW2pdO1xuICAgICAgICAgIGNvbnN0IG91dFNpemUgPSB1cGRhdGVPdXRwdXRTaGFwZSA/IGluU2l6ZSAqIHN0cmlkZXNbaV0gOiBvdXRwdXRTaGFwZVtpXTtcbiAgICAgICAgICBjb25zdCB0b3RhbFBhZCA9IGNvbXB1dGVUb3RhbFBhZChpblNpemUsIHN0cmlkZXNbaV0sIHBhZHNbaV0sIGtlcm5lbFNoYXBlW2pdLCBkaWxhdGlvbnNbaV0sIG91dFNpemUpO1xuICAgICAgICAgIGRpc3RyaWJ1dGVQYWRkaW5nKHRvdGFsUGFkLCBhdXRvUGFkLCBwYWRzLCBpLCBpICsgc3BhdGlhbFJhbmspO1xuICAgICAgICAgIGlmICh1cGRhdGVPdXRwdXRTaGFwZSkge1xuICAgICAgICAgICAgb3V0cHV0U2hhcGUucHVzaChcbiAgICAgICAgICAgICAgc3RyaWRlc1tpXSAqIChpblNpemUgLSAxKSArIG91dHB1dFBhZGRpbmdbaV0gKyAoa2VybmVsU2hhcGVbal0gLSAxKSAqIGRpbGF0aW9uc1tpXSArIDEgLSBwYWRzW2ldIC0gcGFkc1tpICsgc3BhdGlhbFJhbmtdXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvdXRwdXRTaGFwZS5zcGxpY2UoMCwgMCwgYmF0Y2hTaXplKTtcbiAgICAgICAgb3V0cHV0U2hhcGUuc3BsaWNlKGlzQ2hhbm5lbExhc3QgPyAzIDogMSwgMCwgb3V0Q2hhbm5lbHMpO1xuICAgICAgfTtcbiAgICAgIGdldEFkanVzdGVkQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlcywgaW5wdXRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGtlcm5lbFNoYXBlID0gYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5zbGljZSgpO1xuICAgICAgICBpZiAoYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggPT09IDAgfHwgYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiLCAxKSA9PT0gMCkge1xuICAgICAgICAgIGtlcm5lbFNoYXBlLmxlbmd0aCA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBpbnB1dHNbMV0uZGltcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAga2VybmVsU2hhcGUucHVzaChpbnB1dHNbMV0uZGltc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09IFwiTkhXQ1wiO1xuICAgICAgICBrZXJuZWxTaGFwZS5zcGxpY2UoMCwgMCwgaW5wdXRzWzFdLmRpbXNbMF0pO1xuICAgICAgICBrZXJuZWxTaGFwZS5zcGxpY2UoaXNDaGFubmVsc0xhc3QgPyAzIDogMSwgMCwgaW5wdXRzWzFdLmRpbXNbMV0pO1xuICAgICAgICBjb25zdCBwYWRzID0gYXR0cmlidXRlcy5wYWRzLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gYXR0cmlidXRlcy5vdXRwdXRTaGFwZS5zbGljZSgpO1xuICAgICAgICBjb25zdCBvdXRwdXRQYWRkaW5nID0gYXR0cmlidXRlcy5vdXRwdXRQYWRkaW5nLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgbGV0IGRpbGF0aW9ucyA9IGF0dHJpYnV0ZXMuZGlsYXRpb25zLnNsaWNlKCk7XG4gICAgICAgIGlmIChkaWxhdGlvbnMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgPT09IDApIHtcbiAgICAgICAgICBjb25zdCBzcGF0aWFsUmFuayA9IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDI7XG4gICAgICAgICAgZGlsYXRpb25zID0gbmV3IEFycmF5KHNwYXRpYWxSYW5rKS5maWxsKDEpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJpZGVzID0gYXR0cmlidXRlcy5zdHJpZGVzLnNsaWNlKCk7XG4gICAgICAgIGlmIChzdHJpZGVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApID09PSAwKSB7XG4gICAgICAgICAgY29uc3Qgc3BhdGlhbFJhbmsgPSBpbnB1dHNbMF0uZGltcy5sZW5ndGggLSAyO1xuICAgICAgICAgIHN0cmlkZXMgPSBuZXcgQXJyYXkoc3BhdGlhbFJhbmspLmZpbGwoMSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsY3VsYXRlT3V0cHV0U2hhcGVBbmRQYWRzKFxuICAgICAgICAgIGlucHV0U2hhcGUsXG4gICAgICAgICAga2VybmVsU2hhcGUsXG4gICAgICAgICAgZGlsYXRpb25zLFxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b1BhZCxcbiAgICAgICAgICBhdHRyaWJ1dGVzLmdyb3VwLFxuICAgICAgICAgIHBhZHMsXG4gICAgICAgICAgc3RyaWRlcyxcbiAgICAgICAgICBpc0NoYW5uZWxzTGFzdCxcbiAgICAgICAgICBvdXRwdXRQYWRkaW5nLFxuICAgICAgICAgIG91dHB1dFNoYXBlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKHt9LCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdBdHRyaWJ1dGVzLCB7IGtlcm5lbFNoYXBlLCBwYWRzLCBvdXRwdXRQYWRkaW5nLCBvdXRwdXRTaGFwZSwgZGlsYXRpb25zLCBzdHJpZGVzIH0pO1xuICAgICAgICByZXR1cm4gbmV3QXR0cmlidXRlcztcbiAgICAgIH07XG4gICAgICBwYXJzZUNvbnZUcmFuc3Bvc2VBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aXZhdGlvbkF0dHJpYnV0ZXMgPSBwYXJzZUludGVybmFsQWN0aXZhdGlvbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IGF0dHJpYnV0ZXMuZm9ybWF0O1xuICAgICAgICBjb25zdCBhdXRvUGFkID0gW1xuICAgICAgICAgIFwiTk9UU0VUXCIsXG4gICAgICAgICAgXCJWQUxJRFwiLFxuICAgICAgICAgIFwiU0FNRV9VUFBFUlwiLFxuICAgICAgICAgIFwiU0FNRV9MT1dFUlwiXG4gICAgICAgIF1bdHlwZW9mIGF0dHJpYnV0ZXMuYXV0b1BhZCA9PSBcInVuZGVmaW5lZFwiID8gMCA6IGF0dHJpYnV0ZXMuYXV0b1BhZF07XG4gICAgICAgIGNvbnN0IGRpbGF0aW9ucyA9IGF0dHJpYnV0ZXMuZGlsYXRpb25zO1xuICAgICAgICBjb25zdCBncm91cCA9IGF0dHJpYnV0ZXMuZ3JvdXA7XG4gICAgICAgIGNvbnN0IGtlcm5lbFNoYXBlID0gYXR0cmlidXRlcy5rZXJuZWxTaGFwZTtcbiAgICAgICAgY29uc3QgcGFkcyA9IGF0dHJpYnV0ZXMucGFkcztcbiAgICAgICAgY29uc3Qgc3RyaWRlcyA9IGF0dHJpYnV0ZXMuc3RyaWRlcztcbiAgICAgICAgY29uc3Qgd0lzQ29uc3QgPSBhdHRyaWJ1dGVzLndJc0NvbnN0KCk7XG4gICAgICAgIGNvbnN0IG91dHB1dFBhZGRpbmcgPSBhdHRyaWJ1dGVzLm91dHB1dFBhZGRpbmc7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gYXR0cmlidXRlcy5vdXRwdXRTaGFwZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhdXRvUGFkLFxuICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICBkaWxhdGlvbnMsXG4gICAgICAgICAgZ3JvdXAsXG4gICAgICAgICAga2VybmVsU2hhcGUsXG4gICAgICAgICAgb3V0cHV0UGFkZGluZyxcbiAgICAgICAgICBvdXRwdXRTaGFwZSxcbiAgICAgICAgICBwYWRzLFxuICAgICAgICAgIHN0cmlkZXMsXG4gICAgICAgICAgd0lzQ29uc3QsXG4gICAgICAgICAgLi4uYWN0aXZhdGlvbkF0dHJpYnV0ZXMsXG4gICAgICAgICAgY2FjaGVLZXk6IGAke2F0dHJpYnV0ZXMuZm9ybWF0fTske2FjdGl2YXRpb25BdHRyaWJ1dGVzLmFjdGl2YXRpb259O2BcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICB2YWxpZGF0ZUlucHV0czEwID0gKGlucHV0cywgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoICE9PSAyICYmIGlucHV0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252IHJlcXVpcmVzIDIgb3IgMyBpbnB1dHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0c1swXS5kaW1zLmxlbmd0aCAhPT0gNCAmJiBpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50bHkgb25seSBzdXBwb3J0IDItZGltZW5zaW9uYWwgY29udlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSBpbnB1dHNbMV0uZGltcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaWx0ZXIgZG9lcyBub3QgaGF2ZSBzYW1lIGRpbWVuc2lvbiBhcyBpbnB1dFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhQ2hhbm5lbCA9IGlucHV0c1swXS5kaW1zW2F0dHJpYnV0ZXMuZm9ybWF0ID09PSBcIk5IV0NcIiA/IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDEgOiAxXTtcbiAgICAgICAgY29uc3QgZmlsdGVySW5DaGFubmVsID0gaW5wdXRzWzFdLmRpbXNbMF07XG4gICAgICAgIGlmIChkYXRhQ2hhbm5lbCAhPT0gZmlsdGVySW5DaGFubmVsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRklMVEVSX0lOX0NIQU5ORUwgc2hvdWxkIGJlIGVxdWFsIHRvIERBVEFfQ0hBTk5FTFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmZWF0dXJlTWFwcyA9IGlucHV0c1sxXS5kaW1zWzFdICogYXR0cmlidXRlcy5ncm91cDtcbiAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT09IDMgJiYgKGlucHV0c1syXS5kaW1zLmxlbmd0aCAhPT0gMSB8fCBpbnB1dHNbMl0uZGltc1swXSAhPT0gZmVhdHVyZU1hcHMpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBiaWFzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNwYXRpYWxSYW5rID0gaW5wdXRzWzBdLmRpbXMubGVuZ3RoIC0gMjtcbiAgICAgICAgY29uc3QgZGlsYXRpb25zU2V0ID0gYXR0cmlidXRlcy5kaWxhdGlvbnMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgPiAwO1xuICAgICAgICBpZiAoZGlsYXRpb25zU2V0ICYmIGF0dHJpYnV0ZXMuZGlsYXRpb25zLmxlbmd0aCAhPT0gc3BhdGlhbFJhbmspIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRpbGF0aW9ucyBzaG91bGQgYmUgJHtzcGF0aWFsUmFua31EYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyaWRlc1NldCA9IGF0dHJpYnV0ZXMuc3RyaWRlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSA+IDA7XG4gICAgICAgIGlmIChzdHJpZGVzU2V0ICYmIGF0dHJpYnV0ZXMuc3RyaWRlcy5sZW5ndGggIT09IHNwYXRpYWxSYW5rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdHJpZGVzIHNob3VsZCBiZSAke3NwYXRpYWxSYW5rfURgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWRzU2V0ID0gYXR0cmlidXRlcy5wYWRzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApID4gMDtcbiAgICAgICAgaWYgKHBhZHNTZXQgJiYgYXR0cmlidXRlcy5wYWRzLmxlbmd0aCAhPT0gc3BhdGlhbFJhbmsgKiAyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwYWRzIHNob3VsZCBiZSAke3NwYXRpYWxSYW5rICogMn1EYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMub3V0cHV0UGFkZGluZy5sZW5ndGggIT09IHNwYXRpYWxSYW5rICYmIGF0dHJpYnV0ZXMub3V0cHV0UGFkZGluZy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG91dHB1dF9wYWRkaW5nIHNob3VsZCBiZSAke3NwYXRpYWxSYW5rfURgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXJuZWxTaGFwZVNldCA9IGF0dHJpYnV0ZXMua2VybmVsU2hhcGUucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgPiAwO1xuICAgICAgICBpZiAoa2VybmVsU2hhcGVTZXQgJiYgYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggIT09IDAgJiYgYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggIT09IGlucHV0c1sxXS5kaW1zLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGtlcm5lbCBzaGFwZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXR0cmlidXRlcy5vdXRwdXRTaGFwZS5sZW5ndGggIT09IDAgJiYgYXR0cmlidXRlcy5vdXRwdXRTaGFwZS5sZW5ndGggIT09IGlucHV0c1swXS5kaW1zLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG91dHB1dCBzaGFwZVwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHdlaWdodFRyYW5zcG9zZVBlcm0gPSBbMiwgMywgMSwgMF07XG4gICAgICBjb252VHJhbnNwb3NlMmQgPSAoY29udGV4dCwgaW5wdXRzLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkQXR0cmlidXRlcyA9IGdldEFkanVzdGVkQ29udlRyYW5zcG9zZUF0dHJpYnV0ZXMoYXR0cmlidXRlcywgaW5wdXRzKTtcbiAgICAgICAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gXCJOSFdDXCI7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gYWRqdXN0ZWRBdHRyaWJ1dGVzLm91dHB1dFNoYXBlO1xuICAgICAgICBjb25zdCBvdXRDaGFubmVscyA9IG91dHB1dFNoYXBlW2lzQ2hhbm5lbHNMYXN0ID8gMyA6IDFdO1xuICAgICAgICBjb25zdCBpbnB1dENoYW5uZWxzID0gaW5wdXRzWzBdLmRpbXNbaXNDaGFubmVsc0xhc3QgPyAzIDogMV07XG4gICAgICAgIGlmIChhZGp1c3RlZEF0dHJpYnV0ZXMuZ3JvdXAgIT09IDEgfHwgb3V0Q2hhbm5lbHMgPT09IDEgJiYgaW5wdXRDaGFubmVscyA9PT0gMSkge1xuICAgICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVDb252VHJhbnNwb3NlMkRQcm9ncmFtSW5mbyhpbnB1dHMsIGFkanVzdGVkQXR0cmlidXRlcykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRIZWlnaHQgPSBvdXRwdXRTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDEgOiAyXTtcbiAgICAgICAgY29uc3Qgb3V0V2lkdGggPSBvdXRwdXRTaGFwZVtpc0NoYW5uZWxzTGFzdCA/IDIgOiAzXTtcbiAgICAgICAgY29uc3Qgd2VpZ2h0SGVpZ2h0ID0gaW5wdXRzWzFdLmRpbXNbMl07XG4gICAgICAgIGNvbnN0IHdlaWdodFdpZHRoID0gaW5wdXRzWzFdLmRpbXNbM107XG4gICAgICAgIGNvbnN0IGRpbUFPdXRlciA9IGlzQ2hhbm5lbHNMYXN0ID8gb3V0SGVpZ2h0ICogb3V0V2lkdGggOiBvdXRDaGFubmVscztcbiAgICAgICAgY29uc3QgZGltQk91dGVyID0gaXNDaGFubmVsc0xhc3QgPyBvdXRDaGFubmVscyA6IG91dEhlaWdodCAqIG91dFdpZHRoO1xuICAgICAgICBjb25zdCBkaW1Jbm5lciA9IHdlaWdodEhlaWdodCAqIHdlaWdodFdpZHRoICogaW5wdXRDaGFubmVscztcbiAgICAgICAgY29uc3Qgc2VxdWVudGlhbEFjY2Vzc0J5VGhyZWFkcyA9IChcbiAgICAgICAgICAvKiBiYWNrZW5kLmFkYXB0ZXJJbmZvLmlzSW50ZWwoKSAqL1xuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdHJhbnNwb3NlZFdlaWdodCA9IGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCA/PyBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8oaW5wdXRzWzFdLCB3ZWlnaHRUcmFuc3Bvc2VQZXJtKSxcbiAgICAgICAgICB7IGlucHV0czogWzFdLCBvdXRwdXRzOiBbYXR0cmlidXRlcy53SXNDb25zdCA/IC0yIDogLTFdIH1cbiAgICAgICAgKVswXTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMud0lzQ29uc3QgJiYgIWNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCkge1xuICAgICAgICAgIGNvbnRleHQua2VybmVsQ3VzdG9tRGF0YS53VCA9IHRyYW5zcG9zZWRXZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udlRyYW5zcG9zZUlucHV0cyA9IFtpbnB1dHNbMF0sIHRyYW5zcG9zZWRXZWlnaHRdO1xuICAgICAgICBjb25zdCBoYXNCaWFzID0gaW5wdXRzLmxlbmd0aCA9PT0gMztcbiAgICAgICAgaWYgKGhhc0JpYXMpIHtcbiAgICAgICAgICBpZiAoIWlzQ2hhbm5lbHNMYXN0ICYmIGlucHV0c1syXS5kaW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29udlRyYW5zcG9zZUlucHV0cy5wdXNoKGlucHV0c1syXS5yZXNoYXBlKFtpbnB1dHNbMl0uZGltc1swXSwgMSwgMV0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udlRyYW5zcG9zZUlucHV0cy5wdXNoKGlucHV0c1syXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVDb252MkRUcmFuc3Bvc2VNYXRNdWxQcm9ncmFtSW5mbyhcbiAgICAgICAgICAgIGNvbnZUcmFuc3Bvc2VJbnB1dHMsXG4gICAgICAgICAgICBhZGp1c3RlZEF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBvdXRwdXRTaGFwZSxcbiAgICAgICAgICAgIGRpbUFPdXRlcixcbiAgICAgICAgICAgIGRpbUJPdXRlcixcbiAgICAgICAgICAgIGRpbUlubmVyLFxuICAgICAgICAgICAgaGFzQmlhcyxcbiAgICAgICAgICAgIHNlcXVlbnRpYWxBY2Nlc3NCeVRocmVhZHNcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaW5wdXRzOiBjb252VHJhbnNwb3NlSW5wdXRzIH1cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBjb252VHJhbnNwb3NlMWQgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBpc0NoYW5uZWxMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09IFwiTkhXQ1wiO1xuICAgICAgICBjb25zdCBpbnB1dHMgPSBbXG4gICAgICAgICAgY29udGV4dC5pbnB1dHNbMF0ucmVzaGFwZShcbiAgICAgICAgICAgIGlzQ2hhbm5lbExhc3QgPyAoXG4gICAgICAgICAgICAgIC8vIFtOLCBXLCBDXSAtPiBbTiwgSD0xLCBXLCBDXVxuICAgICAgICAgICAgICBbY29udGV4dC5pbnB1dHNbMF0uZGltc1swXSwgMSwgY29udGV4dC5pbnB1dHNbMF0uZGltc1sxXSwgY29udGV4dC5pbnB1dHNbMF0uZGltc1syXV1cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIC8vIFtOLCBDLCBXXSAtPiBbTiwgQywgSD0xLCBXXVxuICAgICAgICAgICAgICBbY29udGV4dC5pbnB1dHNbMF0uZGltc1swXSwgY29udGV4dC5pbnB1dHNbMF0uZGltc1sxXSwgMSwgY29udGV4dC5pbnB1dHNbMF0uZGltc1syXV1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIC8vW0ZJTFRFUl9PVVRfQ0hBTk5FTCwgRklMVEVSX0lOX0NIQU5ORUwsIGtXXSAtPiBbRklMVEVSX09VVF9DSEFOTkVMLCBGSUxURVJfSU5fQ0hBTk5FTCwga0g9MSwga1ddXG4gICAgICAgICAgY29udGV4dC5pbnB1dHNbMV0ucmVzaGFwZShbY29udGV4dC5pbnB1dHNbMV0uZGltc1swXSwgY29udGV4dC5pbnB1dHNbMV0uZGltc1sxXSwgMSwgY29udGV4dC5pbnB1dHNbMV0uZGltc1syXV0pXG4gICAgICAgIF07XG4gICAgICAgIGlmIChjb250ZXh0LmlucHV0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICBpbnB1dHMucHVzaChjb250ZXh0LmlucHV0c1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGtlcm5lbFNoYXBlID0gYXR0cmlidXRlcy5rZXJuZWxTaGFwZTtcbiAgICAgICAgaWYgKGtlcm5lbFNoYXBlLmxlbmd0aCA9PT0gMCB8fCBrZXJuZWxTaGFwZVswXSA9PT0gMCkge1xuICAgICAgICAgIGtlcm5lbFNoYXBlID0gW2NvbnRleHQuaW5wdXRzWzFdLmRpbXNbMl1dO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkaWxhdGlvbnMgPSBhdHRyaWJ1dGVzLmRpbGF0aW9ucztcbiAgICAgICAgaWYgKGRpbGF0aW9ucy5sZW5ndGggPT09IDAgfHwgZGlsYXRpb25zWzBdID09PSAwKSB7XG4gICAgICAgICAgZGlsYXRpb25zID0gWzFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJpZGVzID0gYXR0cmlidXRlcy5zdHJpZGVzO1xuICAgICAgICBpZiAoc3RyaWRlcy5sZW5ndGggPT09IDAgfHwgc3RyaWRlc1swXSA9PT0gMCkge1xuICAgICAgICAgIHN0cmlkZXMgPSBbMV07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhZHMgPSBhdHRyaWJ1dGVzLnBhZHM7XG4gICAgICAgIGlmIChwYWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHBhZHMgPSBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgcGFkcyA9IFswLCBwYWRzWzBdLCAwLCBwYWRzWzFdXTtcbiAgICAgICAgc3RyaWRlcyA9IFsxXS5jb25jYXQoc3RyaWRlcyk7XG4gICAgICAgIGRpbGF0aW9ucyA9IFsxXS5jb25jYXQoZGlsYXRpb25zKTtcbiAgICAgICAga2VybmVsU2hhcGUgPSBbMV0uY29uY2F0KGtlcm5lbFNoYXBlKTtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRBdHRyaWJ1dGVzID0gZ2V0QWRqdXN0ZWRDb252VHJhbnNwb3NlQXR0cmlidXRlcyh7IC4uLmF0dHJpYnV0ZXMsIHBhZHMsIHN0cmlkZXMsIGRpbGF0aW9ucywga2VybmVsU2hhcGUgfSwgaW5wdXRzKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUNvbnZUcmFuc3Bvc2UyRFByb2dyYW1JbmZvKFxuICAgICAgICAgIGlucHV0cyxcbiAgICAgICAgICBhZGp1c3RlZEF0dHJpYnV0ZXMsXG4gICAgICAgICAgKG91dHB1dFNoYXBlKSA9PiBpc0NoYW5uZWxMYXN0ID8gW291dHB1dFNoYXBlWzBdLCBvdXRwdXRTaGFwZVsyXSwgb3V0cHV0U2hhcGVbM11dIDogW291dHB1dFNoYXBlWzBdLCBvdXRwdXRTaGFwZVsxXSwgb3V0cHV0U2hhcGVbM11dXG4gICAgICAgICkpO1xuICAgICAgfTtcbiAgICAgIGNvbnZUcmFuc3Bvc2UgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czEwKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKGNvbnRleHQuaW5wdXRzWzBdLmRpbXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgY29udlRyYW5zcG9zZTFkKGNvbnRleHQsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnZUcmFuc3Bvc2UyZChjb250ZXh0LCBjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2N1bXN1bS50c1xuICB2YXIgY3JlYXRlQ3Vtc3VtUHJvZ3JhbUluZm8sIGN1bXN1bSwgcGFyc2VDdW1TdW1BdHRyaWJ1dGVzO1xuICB2YXIgaW5pdF9jdW1zdW0gPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2N1bXN1bS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfYXR0cmlidXRlX3dpdGhfY2FjaGVfa2V5KCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgY3JlYXRlQ3Vtc3VtUHJvZ3JhbUluZm8gPSAoaW5wdXRUeXBlLCBpbnB1dFNoYXBlLCBheGlzSW5wdXQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKGlucHV0U2hhcGUpO1xuICAgICAgICBjb25zdCByYW5rID0gaW5wdXRTaGFwZS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZShcImlucHV0XCIsIGlucHV0VHlwZSwgcmFuayk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKFwib3V0cHV0XCIsIGlucHV0VHlwZSwgcmFuayk7XG4gICAgICAgIGNvbnN0IGF4aXNWYWx1ZSA9IGF4aXNJbnB1dC5kYXRhVHlwZSA9PT0gNiAvKiBpbnQzMiAqLyA/IGF4aXNJbnB1dC5nZXRJbnQzMkFycmF5KClbMF0gOiBOdW1iZXIoYXhpc0lucHV0LmdldEJpZ0ludDY0QXJyYXkoKVswXSk7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBTaGFwZVV0aWwubm9ybWFsaXplQXhpcyhheGlzVmFsdWUsIHJhbmspO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBgIGkzMigke2lucHV0LmluZGljZXNHZXQoXCJpbnB1dEluZGljZXNcIiwgXCJ1bmlmb3Jtcy5heGlzXCIpfSkgYDtcbiAgICAgICAgICBjb25zdCBtYXggPSBnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy5pbnB1dF9zaGFwZVwiLCBcInVuaWZvcm1zLmF4aXNcIiwgcmFuayk7XG4gICAgICAgICAgY29uc3QgbG93ZXJMaW1pdCA9IGF0dHJpYnV0ZXMucmV2ZXJzZSA/IGluZGV4ICsgKGF0dHJpYnV0ZXMuZXhjbHVzaXZlID8gXCIgKyAxXCIgOiBcIlwiKSA6IFwiMFwiO1xuICAgICAgICAgIGNvbnN0IHVwcGVyTGltaXQgPSBhdHRyaWJ1dGVzLnJldmVyc2UgPyBtYXggOiBpbmRleCArIChhdHRyaWJ1dGVzLmV4Y2x1c2l2ZSA/IFwiXCIgOiBcIiArIDFcIik7XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oXCJvdXRwdXRTaXplXCIsIFwidTMyXCIpLnJlZ2lzdGVyVW5pZm9ybShcImF4aXNcIiwgXCJ1MzJcIikuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAgICAgICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRTaXplXCIpfVxuICAgICAgICAgICAgICAgICAgdmFyIGlucHV0SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcyhcImdsb2JhbF9pZHhcIil9O1xuICAgICAgICAgICAgICAgICAgdmFyIHN1bSA9ICR7b3V0cHV0LnR5cGUudmFsdWV9KDApO1xuICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0IDogaTMyID0gJHtsb3dlckxpbWl0fTtcbiAgICAgICAgICAgICAgICAgIGxldCBsYXN0IDogaTMyID0gJHt1cHBlckxpbWl0fTtcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgOiBpMzIgPSBmaXJzdDsgaSA8IGxhc3Q7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAke2lucHV0LmluZGljZXNTZXQoXCJpbnB1dEluZGljZXNcIiwgXCJ1bmlmb3Jtcy5heGlzXCIsIFwidTMyKGkpXCIpfTtcbiAgICAgICAgICAgICAgICAgICAgc3VtID0gc3VtICsgJHtpbnB1dC5nZXRCeUluZGljZXMoXCJpbnB1dEluZGljZXNcIil9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIsIFwic3VtXCIpfTtcbiAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkN1bVN1bVwiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGhpbnQ6IGF0dHJpYnV0ZXMuY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbXCJyYW5rXCJdIH0sXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IGlucHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dFR5cGUgfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgb3V0cHV0U2l6ZSAvIDY0XG4gICAgICAgICAgICAgIC8qIHdvcmtncm91cCBzaXplICovXG4gICAgICAgICAgICApIH0sXG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IFtcbiAgICAgICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IG91dHB1dFNpemUgfSxcbiAgICAgICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IGF4aXMgfSxcbiAgICAgICAgICAgICAgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRTaGFwZSwgaW5wdXRTaGFwZSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2VcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjdW1zdW0gPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dFNoYXBlID0gY29udGV4dC5pbnB1dHNbMF0uZGltcztcbiAgICAgICAgY29uc3QgaW5wdXRUeXBlID0gY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGU7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBjb250ZXh0LmlucHV0c1sxXTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUN1bXN1bVByb2dyYW1JbmZvKGlucHV0VHlwZSwgaW5wdXRTaGFwZSwgYXhpcywgYXR0cmlidXRlcyksIHsgaW5wdXRzOiBbMF0gfSk7XG4gICAgICB9O1xuICAgICAgcGFyc2VDdW1TdW1BdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgZXhjbHVzaXZlID0gYXR0cmlidXRlcy5leGNsdXNpdmUgPT09IDE7XG4gICAgICAgIGNvbnN0IHJldmVyc2UgPSBhdHRyaWJ1dGVzLnJldmVyc2UgPT09IDE7XG4gICAgICAgIHJldHVybiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoeyBleGNsdXNpdmUsIHJldmVyc2UgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9kZXB0aC10by1zcGFjZS50c1xuICB2YXIgdmFsaWRhdGVJbnB1dHMxMSwgcGVybUZ1bmN0aW9uQm9keTIsIGNyZWF0ZURlcHRoVG9TcGFjZVByb2dyYW1JbmZvLCBkZXB0aFRvU3BhY2UsIHBhcnNlRGVwdGhUb1NwYWNlQXR0cmlidXRlcztcbiAgdmFyIGluaXRfZGVwdGhfdG9fc3BhY2UgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2RlcHRoLXRvLXNwYWNlLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfdXRpbCgpO1xuICAgICAgaW5pdF9hdHRyaWJ1dGVfd2l0aF9jYWNoZV9rZXkoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICB2YWxpZGF0ZUlucHV0czExID0gKGlucHV0cykgPT4ge1xuICAgICAgICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVwdGhUb1NwYWNlIHJlcXVpcmVzIDEgaW5wdXQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dHNbMF0uZGltcy5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZXB0aFRvU3BhY2UgcmVxdWlyZXMgNEQgaW5wdXQuXCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcGVybUZ1bmN0aW9uQm9keTIgPSAocGVybSwgcmFuaywgaW5wdXQsIG91dHB1dCkgPT4ge1xuICAgICAgICBjb25zdCByZXZlcnNlRnVuYyA9IFtdO1xuICAgICAgICByZXZlcnNlRnVuYy5wdXNoKGBmbiBwZXJtKGk6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+ICR7aW5wdXQudHlwZS5pbmRpY2VzfSB7XG4gICAgdmFyIGE6ICR7aW5wdXQudHlwZS5pbmRpY2VzfTtgKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5rOyArK2kpIHtcbiAgICAgICAgICByZXZlcnNlRnVuYy5wdXNoKGlucHV0LmluZGljZXNTZXQoXCJhXCIsIHBlcm1baV0sIGBpWyR7aX1dYCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldmVyc2VGdW5jLnB1c2goXCJyZXR1cm4gYTt9XCIpO1xuICAgICAgICByZXR1cm4gcmV2ZXJzZUZ1bmMuam9pbihcIlxcblwiKTtcbiAgICAgIH07XG4gICAgICBjcmVhdGVEZXB0aFRvU3BhY2VQcm9ncmFtSW5mbyA9IChpbnB1dFRlbnNvciwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBsZXQgbiwgaCwgdywgYztcbiAgICAgICAgbGV0IHNoYXBlO1xuICAgICAgICBsZXQgcGVybTtcbiAgICAgICAgY29uc3QgaXNDaGFubmVsTGFzdCA9IGF0dHJpYnV0ZXMuZm9ybWF0ID09PSBcIk5IV0NcIjtcbiAgICAgICAgY29uc3QgYmxvY2tzaXplID0gYXR0cmlidXRlcy5ibG9ja3NpemU7XG4gICAgICAgIGNvbnN0IGlzRENSbW9kZSA9IGF0dHJpYnV0ZXMubW9kZSA9PT0gXCJEQ1JcIjtcbiAgICAgICAgaWYgKGlzQ2hhbm5lbExhc3QpIHtcbiAgICAgICAgICBbbiwgaCwgdywgY10gPSBpbnB1dFRlbnNvci5kaW1zO1xuICAgICAgICAgIHNoYXBlID0gaXNEQ1Jtb2RlID8gW24sIGgsIHcsIGJsb2Nrc2l6ZSwgYmxvY2tzaXplLCBjIC8gYmxvY2tzaXplICoqIDJdIDogW24sIGgsIHcsIGMgLyBibG9ja3NpemUgKiogMiwgYmxvY2tzaXplLCBibG9ja3NpemVdO1xuICAgICAgICAgIHBlcm0gPSBpc0RDUm1vZGUgPyBbMCwgMSwgMywgMiwgNCwgNV0gOiBbMCwgMSwgNCwgMiwgNSwgM107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgW24sIGgsIHcsIGNdID0gW2lucHV0VGVuc29yLmRpbXNbMF0sIGlucHV0VGVuc29yLmRpbXNbMl0sIGlucHV0VGVuc29yLmRpbXNbM10sIGlucHV0VGVuc29yLmRpbXNbMV1dO1xuICAgICAgICAgIHNoYXBlID0gaXNEQ1Jtb2RlID8gW24sIGJsb2Nrc2l6ZSwgYmxvY2tzaXplLCBjIC8gYmxvY2tzaXplICoqIDIsIGgsIHddIDogW24sIGMgLyBibG9ja3NpemUgKiogMiwgYmxvY2tzaXplLCBibG9ja3NpemUsIGgsIHddO1xuICAgICAgICAgIHBlcm0gPSBpc0RDUm1vZGUgPyBbMCwgMywgNCwgMSwgNSwgMl0gOiBbMCwgMSwgNCwgMiwgNSwgM107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzaGFwZWRJbnB1dFRlbnNvciA9IGlucHV0VGVuc29yLnJlc2hhcGUoc2hhcGUpO1xuICAgICAgICBjb25zdCByZXNoYXBlZElucHV0UmFuayA9IHJlc2hhcGVkSW5wdXRUZW5zb3IuZGltcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGlucHV0RGF0YVR5cGUgPSBpbnB1dFRlbnNvci5kYXRhVHlwZTtcbiAgICAgICAgY29uc3QgcmVzaGFwZWRJbnB1dCA9IGlucHV0VmFyaWFibGUoXCJhXCIsIGlucHV0RGF0YVR5cGUsIHJlc2hhcGVkSW5wdXRSYW5rKTtcbiAgICAgICAgY29uc3QgcGVybWVkT3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgaW5wdXREYXRhVHlwZSwgcmVzaGFwZWRJbnB1dFJhbmspO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiBgXG4gICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybShcIm91dHB1dF9zaXplXCIsIFwidTMyXCIpLmRlY2xhcmVWYXJpYWJsZXMocmVzaGFwZWRJbnB1dCwgcGVybWVkT3V0cHV0KX1cblxuICAke3Blcm1GdW5jdGlvbkJvZHkyKHBlcm0sIHJlc2hhcGVkSW5wdXRSYW5rLCByZXNoYXBlZElucHV0LCBwZXJtZWRPdXRwdXQpfVxuXG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRfc2l6ZVwiKX1cblxuICAgIGxldCBpbmRpY2VzID0gJHtwZXJtZWRPdXRwdXQub2Zmc2V0VG9JbmRpY2VzKFwiZ2xvYmFsX2lkeFwiKX07XG4gICAgbGV0IGFJbmRpY2VzID0gcGVybShpbmRpY2VzKTtcblxuICAgICR7cGVybWVkT3V0cHV0LnNldEJ5T2Zmc2V0KFwiZ2xvYmFsX2lkeFwiLCByZXNoYXBlZElucHV0LmdldEJ5SW5kaWNlcyhcImFJbmRpY2VzXCIpKX1cbiAgfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJEZXB0aFRvU3BhY2VcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBoaW50OiBgJHtpbnB1dFRlbnNvci5kaW1zfTske2F0dHJpYnV0ZXMuYmxvY2tzaXplfTske2F0dHJpYnV0ZXMubW9kZX1gLCBpbnB1dERlcGVuZGVuY2llczogW1wicmFua1wiXSB9LFxuICAgICAgICAgIGdldFJ1bkRhdGE6IChpbnB1dHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gaXNDaGFubmVsTGFzdCA/IFtuLCBoICogYmxvY2tzaXplLCB3ICogYmxvY2tzaXplLCBjIC8gYmxvY2tzaXplICoqIDJdIDogW24sIGMgLyBibG9ja3NpemUgKiogMiwgaCAqIGJsb2Nrc2l6ZSwgdyAqIGJsb2Nrc2l6ZV07XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgICAgICAgY29uc3Qgc2hhcGVCZWZvcmVQZXJtID0gcmVzaGFwZWRJbnB1dFRlbnNvci5kaW1zO1xuICAgICAgICAgICAgY29uc3Qgc2hhcGVBZnRlclBlcm0gPSBTaGFwZVV0aWwuc29ydEJhc2VkT25QZXJtKHNoYXBlQmVmb3JlUGVybSwgcGVybSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZSB9XSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgICAgb3V0cHV0U2l6ZSAvIDY0XG4gICAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICAgKSB9LFxuICAgICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IFt7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0U2l6ZSB9LCAuLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhzaGFwZUJlZm9yZVBlcm0sIHNoYXBlQWZ0ZXJQZXJtKV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2VcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBkZXB0aFRvU3BhY2UgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czExKGNvbnRleHQuaW5wdXRzKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZURlcHRoVG9TcGFjZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzWzBdLCBhdHRyaWJ1dGVzKSk7XG4gICAgICB9O1xuICAgICAgcGFyc2VEZXB0aFRvU3BhY2VBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7XG4gICAgICAgIGJsb2Nrc2l6ZTogYXR0cmlidXRlcy5ibG9ja3NpemUsXG4gICAgICAgIG1vZGU6IGF0dHJpYnV0ZXMubW9kZSxcbiAgICAgICAgZm9ybWF0OiBhdHRyaWJ1dGVzLmZvcm1hdFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2VpbnN1bS50c1xuICB2YXIgc3ltYm9sUGF0dGVybiwgdGVybVBhdHRlcm4sIHRlcm1QYXR0ZXJuT25seSwgbGhzUGF0dGVybiwgbGhzUGF0dGVybk9ubHksIEVpbnN1bVRlcm0sIEVpbnN1bUVxdWF0aW9uLCBhcHBlbmRNYXgsIGNyZWF0ZUVpbnN1bVByb2dyYW1JbmZvLCBlaW5zdW0sIHBhcnNlRWluc3VtQXR0cmlidXRlcztcbiAgdmFyIGluaXRfZWluc3VtID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9laW5zdW0udHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2F0dHJpYnV0ZV93aXRoX2NhY2hlX2tleSgpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIHN5bWJvbFBhdHRlcm4gPSBcIlthLXpBLVpdfFxcXFwuXFxcXC5cXFxcLlwiO1xuICAgICAgdGVybVBhdHRlcm4gPSBcIihcIiArIHN5bWJvbFBhdHRlcm4gKyBcIikrXCI7XG4gICAgICB0ZXJtUGF0dGVybk9ubHkgPSBcIl5cIiArIHRlcm1QYXR0ZXJuICsgXCIkXCI7XG4gICAgICBsaHNQYXR0ZXJuID0gXCIoXCIgKyB0ZXJtUGF0dGVybiArIFwiLCkqXCIgKyB0ZXJtUGF0dGVybjtcbiAgICAgIGxoc1BhdHRlcm5Pbmx5ID0gXCJeXCIgKyBsaHNQYXR0ZXJuICsgXCIkXCI7XG4gICAgICBFaW5zdW1UZXJtID0gY2xhc3Mge1xuICAgICAgICBjb25zdHJ1Y3RvcihpbnB1dEluZGV4ID0gLTEpIHtcbiAgICAgICAgICB0aGlzLnN5bWJvbFRvSW5kaWNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICAgICAgdGhpcy5pbnB1dEluZGV4ID0gaW5wdXRJbmRleDtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgYSBzeW1ib2wgdG8gdGhlIHRlcm1cbiAgICAgICAgYWRkU3ltYm9sKHN5bWJvbCwgaW5kZXgpIHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnN5bWJvbFRvSW5kaWNlcy5nZXQoc3ltYm9sKTtcbiAgICAgICAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgdmFsdWUgPSBbaW5kZXhdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKGluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zeW1ib2xUb0luZGljZXMuc2V0KHN5bWJvbCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0xIGZvciBvdXRwdXQgYW5kIDAsIDEsIDIsIC4uLiBmb3IgaW5wdXRzXG4gICAgICB9O1xuICAgICAgRWluc3VtRXF1YXRpb24gPSBjbGFzcyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGlucHV0cywgZXF1YXRpb24pIHtcbiAgICAgICAgICB0aGlzLmVxdWF0aW9uID0gZXF1YXRpb247XG4gICAgICAgICAgdGhpcy5oYXNFbGxpcHNpcyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3ltYm9sVG9JbmZvID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgICB0aGlzLmxocyA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgIHRoaXMub3V0cHV0RGltcyA9IFtdO1xuICAgICAgICAgIGxldCBbbGhzLCByaHNdID0gZXF1YXRpb24uaW5jbHVkZXMoXCItPlwiKSA/IGVxdWF0aW9uLnNwbGl0KFwiLT5cIiwgMikgOiBbZXF1YXRpb24sIFwiXCJdO1xuICAgICAgICAgIGlmICghbGhzLm1hdGNoKFJlZ0V4cChsaHNQYXR0ZXJuT25seSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIExIUyB0ZXJtXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpbnB1dFRlcm1zID0gbGhzLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICBpbnB1dFRlcm1zLmZvckVhY2goKGlucHV0VGVybSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpbXMgPSBpbnB1dHNbaW5kZXhdLmRpbXMuc2xpY2UoKTtcbiAgICAgICAgICAgIGlmICghaW5wdXRUZXJtLm1hdGNoKFJlZ0V4cCh0ZXJtUGF0dGVybk9ubHkpKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIExIUyB0ZXJtXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWluc3VtVGVybSA9IHRoaXMucHJvY2Vzc1Rlcm0oaW5wdXRUZXJtLCB0cnVlLCBkaW1zLCBpbmRleCk7XG4gICAgICAgICAgICB0aGlzLmxocy5wdXNoKGVpbnN1bVRlcm0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChyaHMgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJocyArPSBbLi4udGhpcy5zeW1ib2xUb0luZm8uZW50cmllcygpXS5maWx0ZXIoKFtzeW0sIGluZm9dKSA9PiBpbmZvLmNvdW50ID09PSAxIHx8IHN5bSA9PT0gXCIuLi5cIikubWFwKChbc3ltXSkgPT4gc3ltKS5qb2luKFwiXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXJocy5tYXRjaChSZWdFeHAodGVybVBhdHRlcm4pKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFJIU1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmhzU3ltYm9scyA9IHJocy5tYXRjaChSZWdFeHAoc3ltYm9sUGF0dGVybiwgXCJnXCIpKTtcbiAgICAgICAgICByaHNTeW1ib2xzPy5mb3JFYWNoKChzeW1ib2wpID0+IHtcbiAgICAgICAgICAgIGlmIChzeW1ib2wgPT09IFwiLi4uXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5vdXRwdXREaW1zID0gdGhpcy5vdXRwdXREaW1zLmNvbmNhdCh0aGlzLmVsbGlwc2lzRGltcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5zeW1ib2xUb0luZm8uZ2V0KHN5bWJvbCk7XG4gICAgICAgICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFJIUyBzeW1ib2xcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5vdXRwdXREaW1zLnB1c2goaW5mby5kaW1WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5yaHMgPSB0aGlzLnByb2Nlc3NUZXJtKHJocywgZmFsc2UsIHRoaXMub3V0cHV0RGltcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIG9mIEVpbnN1bUVxYXRpb24gY29uc3RydWN0b3JcbiAgICAgICAgLy8gQWRkIGEgc3ltYm9sIHRvIHRoZSBlcXVhdGlvblxuICAgICAgICBhZGRTeW1ib2woc3ltYm9sLCBkaW1WYWx1ZSwgaW5wdXRJbmRleCkge1xuICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5zeW1ib2xUb0luZm8uZ2V0KHN5bWJvbCk7XG4gICAgICAgICAgaWYgKGluZm8gIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgaWYgKGluZm8uZGltVmFsdWUgIT09IGRpbVZhbHVlICYmIGluZm8uY291bnQgIT09IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW5mby5jb3VudCsrO1xuICAgICAgICAgICAgICBpbmZvLmlucHV0SW5kaWNlcy5wdXNoKGlucHV0SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmZvID0geyBjb3VudDogMSwgZGltVmFsdWUsIGlucHV0SW5kaWNlczogW2lucHV0SW5kZXhdIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc3ltYm9sVG9JbmZvLnNldChzeW1ib2wsIGluZm8pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByb2Nlc3Mgb25lIGlucHV0L291dHB1dCB0ZXJtXG4gICAgICAgIHByb2Nlc3NUZXJtKHRlcm0sIGlzSW5wdXQsIGRpbXMsIGluZGV4ID0gLTEpIHtcbiAgICAgICAgICBjb25zdCByYW5rID0gZGltcy5sZW5ndGg7XG4gICAgICAgICAgbGV0IGVsbGlwc2lzID0gZmFsc2U7XG4gICAgICAgICAgbGV0IGVsbGlwc2lzRGltcyA9IFtdO1xuICAgICAgICAgIGxldCBuZXh0RGltID0gMDtcbiAgICAgICAgICBpZiAoIXRlcm0ubWF0Y2goUmVnRXhwKHRlcm1QYXR0ZXJuT25seSkpICYmICghaXNJbnB1dCAmJiB0ZXJtICE9PSBcIlwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBMSFMgdGVybVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaW5kZXhTeW1ib2xzID0gdGVybS5tYXRjaChSZWdFeHAoc3ltYm9sUGF0dGVybiwgXCJnXCIpKTtcbiAgICAgICAgICBjb25zdCBlaW5zdW1UZXJtID0gbmV3IEVpbnN1bVRlcm0oaW5kZXgpO1xuICAgICAgICAgIGluZGV4U3ltYm9scz8uZm9yRWFjaCgoc3ltYm9sLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sID09PSBcIi4uLlwiKSB7XG4gICAgICAgICAgICAgIGlmIChlbGxpcHNpcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgb25lIGVsbGlwc2lzIGlzIGFsbG93ZWQgcGVyIGlucHV0IHRlcm1cIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxsaXBzaXMgPSB0cnVlO1xuICAgICAgICAgICAgICBjb25zdCBlbGxpcHNpc0RpbUxlbmd0aCA9IHJhbmsgLSBpbmRleFN5bWJvbHMubGVuZ3RoICsgMTtcbiAgICAgICAgICAgICAgaWYgKGVsbGlwc2lzRGltTGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVsbGlwc2lzIG91dCBvZiBib3VuZHNcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxsaXBzaXNEaW1zID0gZGltcy5zbGljZShuZXh0RGltLCBuZXh0RGltICsgZWxsaXBzaXNEaW1MZW5ndGgpO1xuICAgICAgICAgICAgICBpZiAodGhpcy5oYXNFbGxpcHNpcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVsbGlwc2lzRGltcy5sZW5ndGggIT09IGVsbGlwc2lzRGltcy5sZW5ndGggfHwgdGhpcy5lbGxpcHNpc0RpbXMudG9TdHJpbmcoKSAhPT0gZWxsaXBzaXNEaW1zLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVsbGlwc2lzIGRpbWVuc2lvbnMgbWlzbWF0Y2hcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0VsbGlwc2lzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsbGlwc2lzRGltcyA9IGVsbGlwc2lzRGltcztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbGxpcHNpcyBtdXN0IGJlIHNwZWNpZmllZCBpbiB0aGUgTEhTXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWxsaXBzaXNEaW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ltYm9sMiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoXCIwXCIuY2hhckNvZGVBdCgwKSArIGopO1xuICAgICAgICAgICAgICAgIGVpbnN1bVRlcm0uYWRkU3ltYm9sKHN5bWJvbDIsIGkgKyBqKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFN5bWJvbChzeW1ib2wyLCBkaW1zW25leHREaW0rK10sIGluZGV4KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWluc3VtVGVybS5hZGRTeW1ib2woc3ltYm9sLCBpICsgKHRoaXMuaGFzRWxsaXBzaXMgPyB0aGlzLmVsbGlwc2lzRGltcy5sZW5ndGggLSAxIDogMCkpO1xuICAgICAgICAgICAgICB0aGlzLmFkZFN5bWJvbChzeW1ib2wsIGRpbXNbbmV4dERpbSsrXSwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBlaW5zdW1UZXJtO1xuICAgICAgICB9XG4gICAgICAgIC8vIE91dHB1dCBkaW1lbnNpb25zIG9mIHRoZSBlcXVhdGlvblxuICAgICAgfTtcbiAgICAgIGFwcGVuZE1heCA9IChuYW1lKSA9PiBuYW1lICsgXCJfbWF4XCI7XG4gICAgICBjcmVhdGVFaW5zdW1Qcm9ncmFtSW5mbyA9IChpbnB1dFNoYXBlcywgZGF0YVR5cGUsIGVpbnN1bUVxdWF0aW9uLCBvdXRwdXRTaGFwZSkgPT4ge1xuICAgICAgICBjb25zdCByYW5rcyA9IGlucHV0U2hhcGVzLm1hcCgoZGltcykgPT4gZGltcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBpbnB1dFZhcnMgPSByYW5rcy5tYXAoKHJhbmssIGluZGV4KSA9PiBpbnB1dFZhcmlhYmxlKGBpbnB1dCR7aW5kZXh9YCwgZGF0YVR5cGUsIHJhbmspKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1zU3ltYm9scyA9IFsuLi5laW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8ua2V5cygpXS5maWx0ZXIoKHN5bWJvbCkgPT4gIWVpbnN1bUVxdWF0aW9uLnJocy5zeW1ib2xUb0luZGljZXMuaGFzKHN5bWJvbCkpO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWR4Q29weSA9IFtdO1xuICAgICAgICAgIGNvbnN0IGluaXRQcm9kID0gXCJ2YXIgcHJvZCA9IDEuMDtcIjtcbiAgICAgICAgICBjb25zdCBpbml0U3VtID0gXCJ2YXIgc3VtID0gMC4wO1wiO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZVN1bSA9IFwic3VtICs9IHByb2Q7XCI7XG4gICAgICAgICAgY29uc3QgcmVkdWNlT3BzU2V0SW5kaWNlcyA9IFtdO1xuICAgICAgICAgIGNvbnN0IHJlZHVjZU9wc0xvb3BIZWFkZXJzID0gW107XG4gICAgICAgICAgY29uc3QgcmVkdWNlT3BzTG9vcEZvb3RlcnMgPSBbXTtcbiAgICAgICAgICBjb25zdCByZWR1Y2VPcENvbXB1dGUgPSBbXTtcbiAgICAgICAgICBjb25zdCBpc1JlZHVjZU9wc1dpdGhvdXRMb29wID0gZWluc3VtRXF1YXRpb24uc3ltYm9sVG9JbmZvLnNpemUgPT09IGVpbnN1bUVxdWF0aW9uLnJocy5zeW1ib2xUb0luZGljZXMuc2l6ZTtcbiAgICAgICAgICBlaW5zdW1FcXVhdGlvbi5zeW1ib2xUb0luZm8uZm9yRWFjaCgoaW5mbywgc3ltYm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWluc3VtRXF1YXRpb24ucmhzLnN5bWJvbFRvSW5kaWNlcy5oYXMoc3ltYm9sKSkge1xuICAgICAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IGVpbnN1bUVxdWF0aW9uLnJocy5zeW1ib2xUb0luZGljZXMuZ2V0KHN5bWJvbCk/LlswXTtcbiAgICAgICAgICAgICAgaWYgKG91dHB1dEluZGV4ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICBlaW5zdW1FcXVhdGlvbi5saHMuZm9yRWFjaCgodGVybSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGluZm8uaW5wdXRJbmRpY2VzLmluY2x1ZGVzKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSB0ZXJtLnN5bWJvbFRvSW5kaWNlcy5nZXQoc3ltYm9sKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGljZXMgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3ltYm9sIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGluZGljZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZHhDb3B5LnB1c2goYCR7aW5wdXRWYXJzW2ldLmluZGljZXNTZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBgaW5wdXQke2l9SW5kaWNlc2AsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5pbmRpY2VzR2V0KFwib3V0cHV0SW5kaWNlc1wiLCBvdXRwdXRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICApfWApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWluc3VtRXF1YXRpb24ubGhzLmZvckVhY2goKHRlcm0sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5mby5pbnB1dEluZGljZXMuaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSB0ZXJtLnN5bWJvbFRvSW5kaWNlcy5nZXQoc3ltYm9sKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRpY2VzID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzeW1ib2wgZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpbmRpY2VzLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZHVjZU9wc1NldEluZGljZXMucHVzaChgJHtpbnB1dFZhcnNbaV0uaW5kaWNlc1NldChgaW5wdXQke2l9SW5kaWNlc2AsIGluZGV4LCBgJHtzeW1ib2x9YCl9YCk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHJlZHVjZU9wQ29tcHV0ZS5wdXNoKGBwcm9kICo9ICR7aW5wdXRWYXJzW2ldLmdldEJ5SW5kaWNlcyhgaW5wdXQke2l9SW5kaWNlc2ApfTtgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZWR1Y2VPcHNMb29wSGVhZGVycy5wdXNoKFxuICAgICAgICAgICAgICAgIGBmb3IodmFyICR7c3ltYm9sfTogdTMyID0gMDsgJHtzeW1ib2x9IDwgdW5pZm9ybXMuJHthcHBlbmRNYXgoc3ltYm9sKX07ICR7c3ltYm9sfSsrKSB7YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZWR1Y2VPcHNMb29wRm9vdGVycy5wdXNoKFwifVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCByZWR1Y2VPcHMyID0gaXNSZWR1Y2VPcHNXaXRob3V0TG9vcCA/IFtcbiAgICAgICAgICAgIC4uLmlkeENvcHksXG4gICAgICAgICAgICBgbGV0IHN1bSA9ICR7aW5wdXRWYXJzLm1hcCgoaW5wdXRWYXIsIGkpID0+IGlucHV0VmFyLmdldEJ5SW5kaWNlcyhgaW5wdXQke2l9SW5kaWNlc2ApKS5qb2luKFwiICogXCIpfTtgXG4gICAgICAgICAgXSA6IFtcbiAgICAgICAgICAgIC4uLmlkeENvcHksXG4gICAgICAgICAgICBpbml0U3VtLFxuICAgICAgICAgICAgLi4ucmVkdWNlT3BzTG9vcEhlYWRlcnMsXG4gICAgICAgICAgICAuLi5yZWR1Y2VPcHNTZXRJbmRpY2VzLFxuICAgICAgICAgICAgaW5pdFByb2QsXG4gICAgICAgICAgICAuLi5yZWR1Y2VPcENvbXB1dGUsXG4gICAgICAgICAgICB1cGRhdGVTdW0sXG4gICAgICAgICAgICAuLi5yZWR1Y2VPcHNMb29wRm9vdGVyc1xuICAgICAgICAgIF07XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXNTeW1ib2xzLm1hcCgoc3ltYm9sKSA9PiAoeyBuYW1lOiBgJHthcHBlbmRNYXgoc3ltYm9sKX1gLCB0eXBlOiBcInUzMlwiIH0pKSkucmVnaXN0ZXJVbmlmb3JtKFwib3V0cHV0U2l6ZVwiLCBcInUzMlwiKS5kZWNsYXJlVmFyaWFibGVzKC4uLmlucHV0VmFycywgb3V0cHV0KX1cblxuICAgICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMub3V0cHV0U2l6ZVwiKX1cbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKFwiZ2xvYmFsX2lkeFwiKX07XG4gICAgICAgICAgICAke2lucHV0VmFycy5tYXAoKF92YXIsIGkpID0+IGB2YXIgaW5wdXQke2l9SW5kaWNlczogJHtpbnB1dFZhcnNbaV0udHlwZS5pbmRpY2VzfTtgKS5qb2luKFwiXFxuXCIpfVxuICAgICAgICAgICAgJHtyZWR1Y2VPcHMyLmpvaW4oXCJcXG5cIil9O1xuICAgICAgICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIsIFwic3VtXCIpfTtcbiAgICAgICAgICB9YDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkVpbnN1bVwiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGhpbnQ6IGVpbnN1bUVxdWF0aW9uLmVxdWF0aW9uLCBpbnB1dERlcGVuZGVuY2llczogaW5wdXRTaGFwZXMubWFwKCgpID0+IFwicmFua1wiKSB9LFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3Jtc0luaXQgPSB1bmlmb3Jtc1N5bWJvbHMuZmlsdGVyKChzeW1ib2wpID0+IGVpbnN1bUVxdWF0aW9uLnN5bWJvbFRvSW5mby5oYXMoc3ltYm9sKSkubWFwKFxuICAgICAgICAgICAgICAoc3ltYm9sKSA9PiAoeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IGVpbnN1bUVxdWF0aW9uLnN5bWJvbFRvSW5mby5nZXQoc3ltYm9sKT8uZGltVmFsdWUgfHwgMCB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc0luaXQucHVzaCh7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0U2l6ZSB9KTtcbiAgICAgICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IGlucHV0U2hhcGVzLm1hcCgoZGltcywgXykgPT4gWy4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGRpbXMpXSkucmVkdWNlKChhY2MsIGlucHV0UHJvZ3JhbVVuaWZvcm1zKSA9PiBhY2MuY29uY2F0KGlucHV0UHJvZ3JhbVVuaWZvcm1zKSwgcHJvZ3JhbVVuaWZvcm1zSW5pdCk7XG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgb3V0cHV0czogW3sgZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgICBvdXRwdXRTaXplIC8gNjRcbiAgICAgICAgICAgICAgICAvKiB3b3JrZ3JvdXAgc2l6ZSAqL1xuICAgICAgICAgICAgICApIH0sXG4gICAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGVpbnN1bSA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGVpbnN1bUVxdWF0aW9uID0gbmV3IEVpbnN1bUVxdWF0aW9uKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzLmVxdWF0aW9uKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBlaW5zdW1FcXVhdGlvbi5vdXRwdXREaW1zO1xuICAgICAgICBjb25zdCBpbnB1dFNoYXBlcyA9IGNvbnRleHQuaW5wdXRzLm1hcCgoaW5wdXQsIF8pID0+IGlucHV0LmRpbXMpO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRWluc3VtUHJvZ3JhbUluZm8oaW5wdXRTaGFwZXMsIGNvbnRleHQuaW5wdXRzWzBdLmRhdGFUeXBlLCBlaW5zdW1FcXVhdGlvbiwgb3V0cHV0U2hhcGUpKTtcbiAgICAgIH07XG4gICAgICBwYXJzZUVpbnN1bUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBlcXVhdGlvbiA9IGF0dHJpYnV0ZXMuZXF1YXRpb24ucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7IGVxdWF0aW9uIH0pO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvZXhwYW5kLnRzXG4gIHZhciB2YWxpZGF0ZUlucHV0czEyLCBnZXRBZGp1c3RlZFNoYXBlLCBjYWxjdWxhdGVPdXRwdXRTaGFwZTIsIGNyZWF0ZUV4cGFuZFByb2dyYW1JbmZvLCBleHBhbmQ7XG4gIHZhciBpbml0X2V4cGFuZCA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvZXhwYW5kLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfdXRpbCgpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIHZhbGlkYXRlSW5wdXRzMTIgPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBhbmQgcmVxdWlyZXMgMiBpbnB1dC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgICBjb25zdCBzaGFwZSA9IEFycmF5LmZyb20oaW5wdXRzWzFdLmdldEJpZ0ludDY0QXJyYXkoKSwgTnVtYmVyKTtcbiAgICAgICAgbGV0IHNoYXBlSW5kZXggPSBzaGFwZS5sZW5ndGggPCBpbnB1dFNoYXBlLmxlbmd0aCA/IDAgOiBzaGFwZS5sZW5ndGggLSBpbnB1dFNoYXBlLmxlbmd0aDtcbiAgICAgICAgbGV0IGlucHV0U2hhcGVJbmRleCA9IGlucHV0U2hhcGUubGVuZ3RoIDwgc2hhcGUubGVuZ3RoID8gMCA6IGlucHV0U2hhcGUubGVuZ3RoIC0gc2hhcGUubGVuZ3RoO1xuICAgICAgICBmb3IgKDsgc2hhcGVJbmRleCA8IHNoYXBlLmxlbmd0aCAmJiBpbnB1dFNoYXBlSW5kZXggPCBpbnB1dFNoYXBlLmxlbmd0aDsgKytzaGFwZUluZGV4LCArK2lucHV0U2hhcGVJbmRleCkge1xuICAgICAgICAgIGlmIChzaGFwZVtzaGFwZUluZGV4XSAhPT0gaW5wdXRTaGFwZVtpbnB1dFNoYXBlSW5kZXhdICYmIHNoYXBlW3NoYXBlSW5kZXhdICE9PSAxICYmIGlucHV0U2hhcGVbaW5wdXRTaGFwZUluZGV4XSAhPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwYW5kIHJlcXVpcmVzIHNoYXBlIHRvIGJlIGJyb2FkY2FzdGFibGUgdG8gaW5wdXRcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZ2V0QWRqdXN0ZWRTaGFwZSA9IChzaGFwZTEsIHNoYXBlMikgPT4ge1xuICAgICAgICBjb25zdCBkaWZmID0gc2hhcGUxLmxlbmd0aCAtIHNoYXBlMi5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZjsgKytpKSB7XG4gICAgICAgICAgc2hhcGUucHVzaChzaGFwZTFbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGUyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgc2hhcGUucHVzaChzaGFwZTJbaV0gPT09IDEgPyBzaGFwZTFbaSArIGRpZmZdIDogc2hhcGUyW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgICB9O1xuICAgICAgY2FsY3VsYXRlT3V0cHV0U2hhcGUyID0gKGlucHV0U2hhcGUsIHNoYXBlKSA9PiBpbnB1dFNoYXBlLmxlbmd0aCA+IHNoYXBlLmxlbmd0aCA/IGdldEFkanVzdGVkU2hhcGUoaW5wdXRTaGFwZSwgc2hhcGUpIDogZ2V0QWRqdXN0ZWRTaGFwZShzaGFwZSwgaW5wdXRTaGFwZSk7XG4gICAgICBjcmVhdGVFeHBhbmRQcm9ncmFtSW5mbyA9IChpbnB1dHMpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgICBjb25zdCBzaGFwZSA9IEFycmF5LmZyb20oaW5wdXRzWzFdLmdldEJpZ0ludDY0QXJyYXkoKSwgTnVtYmVyKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBjYWxjdWxhdGVPdXRwdXRTaGFwZTIoaW5wdXRTaGFwZSwgc2hhcGUpO1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IGlucHV0c1swXS5kYXRhVHlwZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGRhdGFUeXBlID09PSA5IC8qIGJvb2wgKi8gPyA0IDogMTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IE1hdGguY2VpbChTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSkgLyBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZShcImlucHV0XCIsIGRhdGFUeXBlLCBpbnB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgbGV0IGFzc2lnbm1lbnQ7XG4gICAgICAgICAgaWYgKGRhdGFUeXBlID09PSA5IC8qIGJvb2wgKi8pIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZUFzc2lnbm1lbnQgPSAocmVzU3RyLCB4LCB0eXBlQ2FzdCA9IFwiXCIpID0+IGBcbiAgICAgICAgICBsZXQgb3V0cHV0SW5kaWNlcyR7eH0gPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoYG91dHB1dE9mZnNldCArICR7eH11YCl9O1xuICAgICAgICAgIGxldCBvZmZzZXQke3h9ID0gJHtpbnB1dC5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldChgb3V0cHV0SW5kaWNlcyR7eH1gLCBvdXRwdXQpfTtcbiAgICAgICAgICBsZXQgaW5kZXgke3h9ID0gb2Zmc2V0JHt4fSAvIDR1O1xuICAgICAgICAgIGxldCBjb21wb25lbnQke3h9ID0gb2Zmc2V0JHt4fSAlIDR1O1xuICAgICAgICAgICR7cmVzU3RyfVske3h9XSA9ICR7dHlwZUNhc3R9KCR7aW5wdXQuZ2V0QnlPZmZzZXQoYGluZGV4JHt4fWApfVtjb21wb25lbnQke3h9XSk7XG4gICAgICAgIGA7XG4gICAgICAgICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgICBsZXQgb3V0cHV0T2Zmc2V0ID0gZ2xvYmFsX2lkeCAqICR7Y29tcG9uZW50c307XG4gICAgICAgIHZhciBkYXRhID0gdmVjNDx1MzI+KDApO1xuICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoXCJkYXRhXCIsIDAsIFwidTMyXCIpfVxuICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoXCJkYXRhXCIsIDEsIFwidTMyXCIpfVxuICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoXCJkYXRhXCIsIDIsIFwidTMyXCIpfVxuICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoXCJkYXRhXCIsIDMsIFwidTMyXCIpfVxuICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIiwgXCJkYXRhXCIpfVxuICAgICAgfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFzc2lnbm1lbnQgPSBgXG4gICAgICAgIGxldCBvdXRwdXRJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKFwiZ2xvYmFsX2lkeFwiKX07XG4gICAgICAgIGxldCBpbnB1dE9mZnNldCA9ICR7aW5wdXQuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoXCJvdXRwdXRJbmRpY2VzXCIsIG91dHB1dCl9O1xuICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIiwgaW5wdXQuZ2V0QnlPZmZzZXQoXCJpbnB1dE9mZnNldFwiKSl9XG4gICAgICB9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oXCJ2ZWNfc2l6ZVwiLCBcInUzMlwiKS5kZWNsYXJlVmFyaWFibGVzKGlucHV0LCBvdXRwdXQpfVxuICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy52ZWNfc2l6ZVwiKX1cbiAgICAke2Fzc2lnbm1lbnR9YDtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0gW3sgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBvdXRwdXRTaXplIH0sIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIG91dHB1dFNoYXBlKV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJFeHBhbmRcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBoaW50OiBgJHtvdXRwdXRTaGFwZS5sZW5ndGh9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFtcInJhbmtcIl0gfSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgIG91dHB1dFNpemUgLyA2NFxuICAgICAgICAgICAgICAvKiB3b3JrZ3JvdXAgc2l6ZSAqL1xuICAgICAgICAgICAgKSB9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBleHBhbmQgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czEyKGNvbnRleHQuaW5wdXRzKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUV4cGFuZFByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzKSwgeyBpbnB1dHM6IFswXSB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2Zhc3QtZ2VsdS50c1xuICB2YXIgY3JlYXRlRmFzdEdlbHVQcm9ncmFtSW5mbywgZmFzdEdlbHUyO1xuICB2YXIgaW5pdF9mYXN0X2dlbHUgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2Zhc3QtZ2VsdS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICBpbml0X3VuYXJ5X29wKCk7XG4gICAgICBjcmVhdGVGYXN0R2VsdVByb2dyYW1JbmZvID0gKGlucHV0VGVuc29ycykgPT4ge1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IGlucHV0VGVuc29yc1swXS5kYXRhVHlwZTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKGlucHV0VGVuc29yc1swXS5kaW1zKTtcbiAgICAgICAgY29uc3QgYmlhc0xlbmd0aCA9IFNoYXBlVXRpbC5zaXplKGlucHV0VGVuc29yc1sxXS5kaW1zKTtcbiAgICAgICAgY29uc3QgdXNlVmVjNCA9IGJpYXNMZW5ndGggJSA0ID09PSAwO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgeCA9IGlucHV0VmFyaWFibGUoXCJ4XCIsIGRhdGFUeXBlLCBbMV0sIDQpO1xuICAgICAgICAgIGNvbnN0IGJpYXMgPSBpbnB1dFZhcmlhYmxlKFwiYmlhc1wiLCBkYXRhVHlwZSwgWzFdLCA0KTtcbiAgICAgICAgICBjb25zdCB5ID0gb3V0cHV0VmFyaWFibGUoXCJ5XCIsIGRhdGFUeXBlLCBbMV0sIDQpO1xuICAgICAgICAgIGNvbnN0IHVuaWZvcm1zID0gW3sgbmFtZTogXCJvdXRwdXRfdmVjX3NpemVcIiwgdHlwZTogXCJ1MzJcIiB9LCB7IG5hbWU6IFwiYmlhc19zaXplXCIsIHR5cGU6IFwidTMyXCIgfV07XG4gICAgICAgICAgY29uc3Qgc2luZ2xlRWxlbWVudEJpYXMgPSAoaSkgPT4gYFxuICAgICAgbGV0IGJpYXMke2l9X29mZnNldDogdTMyID0gKGdsb2JhbF9pZHggKiA0ICsgJHtpfSkgJSB1bmlmb3Jtcy5iaWFzX3NpemU7XG4gICAgICBsZXQgYmlhcyR7aX0gPSAke2JpYXMuZ2V0QnlPZmZzZXQoYGJpYXMke2l9X29mZnNldCAvIDRgKX1bYmlhcyR7aX1fb2Zmc2V0ICUgNF07YDtcbiAgICAgICAgICBjb25zdCBiaWFzR2V0RXhwcmVzc2lvbiA9IHVzZVZlYzQgPyBgXG4gICAgICBsZXQgYmlhcyA9ICR7Ymlhcy5nZXRCeU9mZnNldChcImdsb2JhbF9pZHggJSAodW5pZm9ybXMuYmlhc19zaXplIC8gNClcIil9O2AgOiBgJHtzaW5nbGVFbGVtZW50QmlhcygwKX0ke3NpbmdsZUVsZW1lbnRCaWFzKDEpfSR7c2luZ2xlRWxlbWVudEJpYXMoMil9JHtzaW5nbGVFbGVtZW50QmlhcygzKX1cbiAgICAgIGxldCBiaWFzID0gJHt4LnR5cGUudmFsdWV9KGJpYXMwLCBiaWFzMSwgYmlhczIsIGJpYXMzKTtgO1xuICAgICAgICAgIHJldHVybiBgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyh4LCBiaWFzLCB5KX1cblxuICAgICR7ZmFzdEdlbHVJbXBsKHRlbnNvclR5cGVUb1dzZ2xWYWx1ZVR5cGUoZGF0YVR5cGUpKX1cblxuICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydChXT1JLR1JPVVBfU0laRSl9XG4gICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMub3V0cHV0X3ZlY19zaXplXCIpfVxuXG4gICAgICBsZXQgeCA9ICR7eC5nZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIil9O1xuICAgICAgJHtiaWFzR2V0RXhwcmVzc2lvbn1cbiAgICAgIGxldCB4X2luID0geCArIGJpYXM7XG4gICAgICAke3kuc2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIsIGZhc3RHZWx1RXhwcmVzc2lvbihcInhfaW5cIikpfVxuICAgIH1gO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiRmFzdEdlbHVXaXRoQmlhc1wiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGhpbnQ6IGAke3VzZVZlYzR9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFtcInR5cGVcIiwgXCJ0eXBlXCJdIH0sXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgICAgIGdldFJ1bkRhdGE6IChpbnB1dHMpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBpbnB1dHNbMF0uZGltcywgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZSB9XSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3JtczogW3sgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDQpIH0sIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBiaWFzTGVuZ3RoIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIFdPUktHUk9VUF9TSVpFIC8gNCkgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgZmFzdEdlbHUyID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgaWYgKGNvbnRleHQuaW5wdXRzLmxlbmd0aCA8IDIgfHwgU2hhcGVVdGlsLnNpemUoY29udGV4dC5pbnB1dHNbMV0uZGltcykgPT09IDApIHtcbiAgICAgICAgICBmYXN0R2VsdShjb250ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlRmFzdEdlbHVQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cykpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9nYXRoZXIudHNcbiAgdmFyIHZhbGlkYXRlSW5wdXRzMTMsIGNyZWF0ZUdhdGhlclByb2dyYW1JbmZvLCBwYXJzZUdhdGhlckF0dHJpYnV0ZXMsIGdhdGhlcjtcbiAgdmFyIGluaXRfZ2F0aGVyID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9nYXRoZXIudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2F0dHJpYnV0ZV93aXRoX2NhY2hlX2tleSgpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIHZhbGlkYXRlSW5wdXRzMTMgPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHYXRoZXIgcmVxdWlyZXMgMiBpbnB1dHMuXCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY3JlYXRlR2F0aGVyUHJvZ3JhbUluZm8gPSAoaW5wdXRzLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgY29uc3QgaW5kaWNlc1NoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG4gICAgICAgIGNvbnN0IGlucHV0UmFuayA9IGlucHV0U2hhcGUubGVuZ3RoO1xuICAgICAgICBjb25zdCBheGlzID0gU2hhcGVVdGlsLm5vcm1hbGl6ZUF4aXMoYXR0cmlidXRlcy5heGlzLCBpbnB1dFJhbmspO1xuICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0U2hhcGUuc2xpY2UoMCk7XG4gICAgICAgIG91dHB1dFNoYXBlLnNwbGljZShheGlzLCAxLCAuLi5pbmRpY2VzU2hhcGUpO1xuICAgICAgICBjb25zdCBheGlzRGltTGltaXQgPSBpbnB1dFNoYXBlW2F4aXNdO1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gaW5wdXRzWzBdLmRhdGFUeXBlID09PSA5IC8qIGJvb2wgKi8gPyA0IDogMTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IE1hdGguY2VpbChTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSkgLyBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0gW1xuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBvdXRwdXRTaXplIH0sXG4gICAgICAgICAgeyB0eXBlOiA2IC8qIGludDMyICovLCBkYXRhOiBheGlzRGltTGltaXQgfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogYXhpcyB9LFxuICAgICAgICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBpbnB1dHNbMV0uZGltcywgb3V0cHV0U2hhcGUpXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gaW5wdXRWYXJpYWJsZShcImRhdGFcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcy5sZW5ndGgsIGNvbXBvbmVudHMpO1xuICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBpbnB1dFZhcmlhYmxlKFwiaW5wdXRJbmRpY2VzXCIsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcIm91dHB1dFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgY2FsY0RhdGFJbmRpY2VzID0gKHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGljZXNSYW5rID0gaW5kaWNlc1NoYXBlLmxlbmd0aDtcbiAgICAgICAgICAgIGxldCBjYWxjU3RyID0gYHZhciBpbmRpY2VzSW5kaWNlcyR7eH0gID0gJHtpbmRpY2VzLnR5cGUuaW5kaWNlc30oMCk7YDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlc1Jhbms7IGkrKykge1xuICAgICAgICAgICAgICBjYWxjU3RyICs9IGAke2luZGljZXNSYW5rID4gMSA/IGBpbmRpY2VzSW5kaWNlcyR7eH1bJHtpfV1gIDogYGluZGljZXNJbmRpY2VzJHt4fWB9ID0gJHtvdXRwdXRTaGFwZS5sZW5ndGggPiAxID8gYG91dHB1dEluZGljZXMke3h9W3VuaWZvcm1zLmF4aXMgKyAke2l9XWAgOiBgb3V0cHV0SW5kaWNlcyR7eH1gfTtgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsY1N0ciArPSBgXG4gICAgICAgICAgdmFyIGlkeCR7eH0gPSAke2luZGljZXMuZ2V0QnlJbmRpY2VzKGBpbmRpY2VzSW5kaWNlcyR7eH1gKX07XG4gICAgICAgICAgaWYgKGlkeCR7eH0gPCAwKSB7XG4gICAgICAgICAgICBpZHgke3h9ID0gaWR4JHt4fSArIHVuaWZvcm1zLmF4aXNEaW1MaW1pdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGRhdGFJbmRpY2VzJHt4fSA6ICR7ZGF0YS50eXBlLmluZGljZXN9O1xuICAgICAgICBgO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgaW5wdXRSYW5rOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKGkgPT09IGF4aXMpIHtcbiAgICAgICAgICAgICAgICBjYWxjU3RyICs9IGAke2lucHV0UmFuayA+IDEgPyBgZGF0YUluZGljZXMke3h9WyR7aX1dYCA6IGBkYXRhSW5kaWNlcyR7eH1gfSA9IHUzMihpZHgke3h9KTtgO1xuICAgICAgICAgICAgICAgIGogKz0gaW5kaWNlc1Jhbms7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsY1N0ciArPSBgJHtpbnB1dFJhbmsgPiAxID8gYGRhdGFJbmRpY2VzJHt4fVske2l9XWAgOiBgZGF0YUluZGljZXMke3h9YH0gPSAke291dHB1dFNoYXBlLmxlbmd0aCA+IDEgPyBgb3V0cHV0SW5kaWNlcyR7eH1bJHtqfV1gIDogYG91dHB1dEluZGljZXMke3h9YH07YDtcbiAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjYWxjU3RyO1xuICAgICAgICAgIH07XG4gICAgICAgICAgbGV0IGFzc2lnbm1lbnQ7XG4gICAgICAgICAgaWYgKGlucHV0c1swXS5kYXRhVHlwZSA9PT0gOSAvKiBib29sICovKSB7XG4gICAgICAgICAgICBjb25zdCBzaW5nbGVBc3NpZ25tZW50ID0gKHJlc1N0ciwgeCwgdHlwZUNhc3QgPSBcIlwiKSA9PiBgXG4gICAgICAgICAgbGV0IG91dHB1dEluZGljZXMke3h9ID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKGBvdXRwdXRPZmZzZXQgKyAke3h9dWApfTtcbiAgICAgICAgICAke2NhbGNEYXRhSW5kaWNlcyh4KX07XG4gICAgICAgICAgbGV0IG9mZnNldCR7eH0gPSAke2RhdGEuaW5kaWNlc1RvT2Zmc2V0KGBkYXRhSW5kaWNlcyR7eH1gKX07XG4gICAgICAgICAgbGV0IGluZGV4JHt4fSA9IG9mZnNldCR7eH0gLyA0dTtcbiAgICAgICAgICBsZXQgY29tcG9uZW50JHt4fSA9IG9mZnNldCR7eH0gJSA0dTtcbiAgICAgICAgICAke3Jlc1N0cn1bJHt4fV0gPSAke3R5cGVDYXN0fSgke2RhdGEuZ2V0QnlPZmZzZXQoYGluZGV4JHt4fWApfVtjb21wb25lbnQke3h9XSk7XG4gICAgICAgIGA7XG4gICAgICAgICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgICBsZXQgb3V0cHV0T2Zmc2V0ID0gZ2xvYmFsX2lkeCAqICR7Y29tcG9uZW50c307XG4gICAgICAgIHZhciB2YWx1ZSA9IHZlYzQ8dTMyPigwKTtcbiAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KFwidmFsdWVcIiwgMCwgXCJ1MzJcIil9XG4gICAgICAgICR7c2luZ2xlQXNzaWdubWVudChcInZhbHVlXCIsIDEsIFwidTMyXCIpfVxuICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoXCJ2YWx1ZVwiLCAyLCBcInUzMlwiKX1cbiAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KFwidmFsdWVcIiwgMywgXCJ1MzJcIil9XG4gICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KFwiZ2xvYmFsX2lkeFwiLCBcInZhbHVlXCIpfVxuICAgICAgYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzaWdubWVudCA9IGBcbiAgICAgIGxldCBvdXRwdXRJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKFwiZ2xvYmFsX2lkeFwiKX07XG4gICAgICAke2NhbGNEYXRhSW5kaWNlcyhcIlwiKX07XG4gICAgICBsZXQgdmFsdWUgPSAke2RhdGEuZ2V0QnlJbmRpY2VzKFwiZGF0YUluZGljZXNcIil9O1xuICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIsIFwidmFsdWVcIil9O1xuICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybShcIm91dHB1dFNpemVcIiwgXCJ1MzJcIikucmVnaXN0ZXJVbmlmb3JtKFwiYXhpc0RpbUxpbWl0XCIsIFwiaTMyXCIpLnJlZ2lzdGVyVW5pZm9ybShcImF4aXNcIiwgXCJ1MzJcIikuZGVjbGFyZVZhcmlhYmxlcyhkYXRhLCBpbmRpY2VzLCBvdXRwdXQpfVxuICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRTaXplXCIpfVxuICAgICAgICAke2Fzc2lnbm1lbnR9XG4gICAgICB9YDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkdhdGhlclwiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGhpbnQ6IGF0dHJpYnV0ZXMuY2FjaGVLZXksIGlucHV0RGVwZW5kZW5jaWVzOiBbXCJyYW5rXCIsIFwicmFua1wiXSB9LFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgIHsgZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGUgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHsgeDogTWF0aC5jZWlsKFxuICAgICAgICAgICAgICBvdXRwdXRTaXplIC8gNjRcbiAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICkgfSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHBhcnNlR2F0aGVyQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoeyBheGlzOiBhdHRyaWJ1dGVzLmF4aXMgfSk7XG4gICAgICBnYXRoZXIgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dHMgPSBjb250ZXh0LmlucHV0cztcbiAgICAgICAgdmFsaWRhdGVJbnB1dHMxMyhpbnB1dHMpO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlR2F0aGVyUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2dhdGhlci1lbGVtZW50cy50c1xuICB2YXIgdmFsaWRhdGVJbnB1dHMxNCwgY3JlYXRlR2F0aGVyRWxlbWVudHNQcm9ncmFtSW5mbywgcGFyc2VHYXRoZXJFbGVtZW50c0F0dHJpYnV0ZXMsIGdhdGhlckVsZW1lbnRzO1xuICB2YXIgaW5pdF9nYXRoZXJfZWxlbWVudHMgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2dhdGhlci1lbGVtZW50cy50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfYXR0cmlidXRlX3dpdGhfY2FjaGVfa2V5KCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgdmFsaWRhdGVJbnB1dHMxNCA9IChpbnB1dHMpID0+IHtcbiAgICAgICAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdhdGhlckVsZW1lbnRzIHJlcXVpcmVzIDIgaW5wdXRzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdhdGhlckVsZW1lbnRzIHJlcXVpcmVzIHRoYXQgdGhlIGRhdGEgaW5wdXQgYmUgcmFuayA+PSAxLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRzWzBdLmRpbXMubGVuZ3RoICE9PSBpbnB1dHNbMV0uZGltcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdhdGhlckVsZW1lbnRzIHJlcXVpcmVzIHRoYXQgdGhlIGRhdGEgaW5wdXQgYW5kXG4gICAgICAgICAgICAgICAgICAgICBpbmRpY2VzIGlucHV0IHRlbnNvcnMgYmUgb2Ygc2FtZSByYW5rLmApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY3JlYXRlR2F0aGVyRWxlbWVudHNQcm9ncmFtSW5mbyA9IChpbnB1dHMsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgICBjb25zdCBpbnB1dE91dHB1dERhdGFUeXBlID0gaW5wdXRzWzBdLmRhdGFUeXBlO1xuICAgICAgICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dFNoYXBlLmxlbmd0aDtcbiAgICAgICAgY29uc3QgaW5kaWNlc1NoYXBlID0gaW5wdXRzWzFdLmRpbXM7XG4gICAgICAgIGNvbnN0IGluZGljZXNEYXRhVHlwZSA9IGlucHV0c1sxXS5kYXRhVHlwZTtcbiAgICAgICAgY29uc3QgYXhpcyA9IFNoYXBlVXRpbC5ub3JtYWxpemVBeGlzKGF0dHJpYnV0ZXMuYXhpcywgaW5wdXRSYW5rKTtcbiAgICAgICAgY29uc3QgYXhpc0RpbUxpbWl0ID0gaW5wdXRTaGFwZVtheGlzXTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbmRpY2VzU2hhcGUuc2xpY2UoMCk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZShcImlucHV0XCIsIGlucHV0T3V0cHV0RGF0YVR5cGUsIGlucHV0UmFuayk7XG4gICAgICAgIGNvbnN0IGluZGljZXMgPSBpbnB1dFZhcmlhYmxlKFwiaW5kaWNlc0lucHV0XCIsIGluZGljZXNEYXRhVHlwZSwgaW5kaWNlc1NoYXBlLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKFwib3V0cHV0XCIsIGlucHV0T3V0cHV0RGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IFtcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0U2l6ZSB9LFxuICAgICAgICAgIHsgdHlwZTogNiAvKiBpbnQzMiAqLywgZGF0YTogYXhpc0RpbUxpbWl0IH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IGF4aXMgfVxuICAgICAgICBdO1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dFNoYXBlLCBpbmRpY2VzU2hhcGUsIG91dHB1dFNoYXBlKSk7XG4gICAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzID0gW1wicmFua1wiLCBcInJhbmtcIl07XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IGBcbiAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybShcIm91dHB1dFNpemVcIiwgXCJ1MzJcIikucmVnaXN0ZXJVbmlmb3JtKFwiYXhpc0RpbUxpbWl0XCIsIFwiaTMyXCIpLnJlZ2lzdGVyVW5pZm9ybShcImF4aXNcIiwgXCJ1MzJcIikuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgaW5kaWNlcywgb3V0cHV0KX1cbiAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhcInVuaWZvcm1zLm91dHB1dFNpemVcIil9XG5cbiAgICAgIGxldCBvdXRwdXRJbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKFwiZ2xvYmFsX2lkeFwiKX07XG5cbiAgICAgIHZhciBpZHggPSAke2luZGljZXMuZ2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIpfTtcbiAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgIGlkeCA9IGlkeCArIHVuaWZvcm1zLmF4aXNEaW1MaW1pdDtcbiAgICAgIH1cbiAgICAgIHZhciBpbnB1dEluZGljZXMgPSAke2lucHV0LnR5cGUuaW5kaWNlc30ob3V0cHV0SW5kaWNlcyk7XG4gICAgICAke2lucHV0LmluZGljZXNTZXQoXCJpbnB1dEluZGljZXNcIiwgXCJ1bmlmb3Jtcy5heGlzXCIsIFwidTMyKGlkeClcIil9O1xuICAgICAgbGV0IHZhbHVlID0gJHtpbnB1dC5nZXRCeUluZGljZXMoXCJpbnB1dEluZGljZXNcIil9O1xuXG4gICAgICAke291dHB1dC5zZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIiwgXCJ2YWx1ZVwiKX07XG4gIH1gO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiR2F0aGVyRWxlbWVudHNcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBpbnB1dERlcGVuZGVuY2llcyB9LFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZSB9XSxcbiAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHsgeDogTWF0aC5jZWlsKFxuICAgICAgICAgICAgICBvdXRwdXRTaXplIC8gNjRcbiAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICkgfSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHBhcnNlR2F0aGVyRWxlbWVudHNBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7IGF4aXM6IGF0dHJpYnV0ZXMuYXhpcyB9KTtcbiAgICAgIGdhdGhlckVsZW1lbnRzID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gY29udGV4dC5pbnB1dHM7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzMTQoaW5wdXRzKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUdhdGhlckVsZW1lbnRzUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2dlbW0udHNcbiAgdmFyIHZhbGlkYXRlSW5wdXRzMTUsIGNyZWF0ZUdlbW1Qcm9ncmFtSW5mbywgcGFyc2VHZW1tQXR0cmlidXRlcywgZ2VtbTtcbiAgdmFyIGluaXRfZ2VtbSA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvZ2VtbS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICB2YWxpZGF0ZUlucHV0czE1ID0gKGlucHV0cykgPT4ge1xuICAgICAgICBpZiAoIWlucHV0cykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIklucHV0IGlzIG1pc3NpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPCAyIHx8IGlucHV0cy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWlkIGlucHV0IG51bWJlci5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT09IDMgJiYgaW5wdXRzWzJdLmRpbXMubGVuZ3RoID4gMikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgc2hhcGUgb2YgQ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRzWzBdLmRhdGFUeXBlICE9PSBpbnB1dHNbMV0uZGF0YVR5cGUgfHwgaW5wdXRzLmxlbmd0aCA9PT0gMyAmJiBpbnB1dHNbMF0uZGF0YVR5cGUgIT09IGlucHV0c1syXS5kYXRhVHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIklucHV0IHR5cGVzIGFyZSBtaXNtYXRjaGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY3JlYXRlR2VtbVByb2dyYW1JbmZvID0gKGlucHV0cywgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBhU2hhcGUgPSBpbnB1dHNbMF0uZGltcy5zbGljZSgpO1xuICAgICAgICBjb25zdCBiU2hhcGUgPSBpbnB1dHNbMV0uZGltcy5zbGljZSgpO1xuICAgICAgICBjb25zdCBbTSwgTiwgS10gPSBHZW1tVXRpbC5nZXRTaGFwZU9mR2VtbVJlc3VsdChcbiAgICAgICAgICBhU2hhcGUsXG4gICAgICAgICAgYXR0cmlidXRlcy50cmFuc0EsXG4gICAgICAgICAgYlNoYXBlLFxuICAgICAgICAgIGF0dHJpYnV0ZXMudHJhbnNCLFxuICAgICAgICAgIGlucHV0cy5sZW5ndGggPT09IDMgPyBpbnB1dHNbMl0uZGltcyA6IHZvaWQgMFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IFtNLCBOXTtcbiAgICAgICAgaWYgKCFvdXRwdXRTaGFwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHVzZSBnZW1tIG9uIHRoZSBnaXZlbiB0ZW5zb3JzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IFtcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0U2l6ZSB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBNIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IE4gfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogSyB9LFxuICAgICAgICAgIHsgdHlwZTogMSAvKiBmbG9hdCAqLywgZGF0YTogYXR0cmlidXRlcy5hbHBoYSB9LFxuICAgICAgICAgIHsgdHlwZTogMSAvKiBmbG9hdCAqLywgZGF0YTogYXR0cmlidXRlcy5iZXRhIH1cbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaW5wdXREZXBlbmRlbmNpZXMgPSBbXCJ0eXBlXCIsIFwidHlwZVwiXTtcbiAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMl0uZGltcykpO1xuICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzLnB1c2goXCJyYW5rXCIpO1xuICAgICAgICB9XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKG91dHB1dFNoYXBlKSk7XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICBsZXQgbGluZSA9IFwiXCI7XG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZXMudHJhbnNBICYmIGF0dHJpYnV0ZXMudHJhbnNCKSB7XG4gICAgICAgICAgICBsaW5lID0gXCJ2YWx1ZSArPSBhW2sgKiB1bmlmb3Jtcy5NICsgbV0gKiBiW24gKiB1bmlmb3Jtcy5LICsga107XCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnRyYW5zQSAmJiAhYXR0cmlidXRlcy50cmFuc0IpIHtcbiAgICAgICAgICAgIGxpbmUgPSBcInZhbHVlICs9IGFbayAqIHVuaWZvcm1zLk0gKyBtXSAqIGJbayAqIHVuaWZvcm1zLk4gKyBuXTtcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFhdHRyaWJ1dGVzLnRyYW5zQSAmJiBhdHRyaWJ1dGVzLnRyYW5zQikge1xuICAgICAgICAgICAgbGluZSA9IFwidmFsdWUgKz0gYVttICogdW5pZm9ybXMuSyArIGtdICogYltuICogdW5pZm9ybXMuSyArIGtdO1wiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWF0dHJpYnV0ZXMudHJhbnNBICYmICFhdHRyaWJ1dGVzLnRyYW5zQikge1xuICAgICAgICAgICAgbGluZSA9IFwidmFsdWUgKz0gYVttICogdW5pZm9ybXMuSyArIGtdICogYltrICogdW5pZm9ybXMuTiArIG5dO1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjYWxjdWxhdGVBbHBoYSA9IGF0dHJpYnV0ZXMuYWxwaGEgPT09IDEgPyBcIlwiIDogXCJ2YWx1ZSAqPSB1bmlmb3Jtcy5hbHBoYTtcIjtcbiAgICAgICAgICBjb25zdCBhID0gaW5wdXRWYXJpYWJsZShcImFcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcyk7XG4gICAgICAgICAgY29uc3QgYiA9IGlucHV0VmFyaWFibGUoXCJiXCIsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMpO1xuICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gYS50eXBlLnZhbHVlO1xuICAgICAgICAgIGxldCBjID0gbnVsbDtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBbYSwgYl07XG4gICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGMgPSBpbnB1dFZhcmlhYmxlKFwiY1wiLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgICAgICB2YXJpYWJsZXMucHVzaChjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgpO1xuICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKG91dHB1dCk7XG4gICAgICAgICAgY29uc3QgdW5pZm9ybXMgPSBbXG4gICAgICAgICAgICB7IG5hbWU6IFwib3V0cHV0X3NpemVcIiwgdHlwZTogXCJ1MzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcIk1cIiwgdHlwZTogXCJ1MzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcIk5cIiwgdHlwZTogXCJ1MzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcIktcIiwgdHlwZTogXCJ1MzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImFscGhhXCIsIHR5cGU6IFwiZjMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJiZXRhXCIsIHR5cGU6IFwiZjMyXCIgfVxuICAgICAgICAgIF07XG4gICAgICAgICAgcmV0dXJuIGBcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyguLi52YXJpYWJsZXMpfVxuXG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRfc2l6ZVwiKX1cblxuICAgIGxldCBtID0gZ2xvYmFsX2lkeCAvIHVuaWZvcm1zLk47XG4gICAgbGV0IG4gPSBnbG9iYWxfaWR4ICUgdW5pZm9ybXMuTjtcblxuICAgIHZhciB2YWx1ZSA9ICR7ZGF0YVR5cGV9KDApO1xuICAgIGZvciAodmFyIGs6IHUzMiA9IDB1OyBrIDwgdW5pZm9ybXMuSzsgaysrKSB7XG4gICAgICAke2xpbmV9XG4gICAgfVxuXG4gICAgJHtjYWxjdWxhdGVBbHBoYX1cbiAgICAkeygoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBgbGV0IGNPZmZzZXQgPSAke2MuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoXCJ2ZWMyKG0sIG4pXCIsIG91dHB1dCl9OyB2YWx1ZSArPSAke2RhdGFUeXBlfSh1bmlmb3Jtcy5iZXRhKSAqICR7Yy5nZXRCeU9mZnNldChcImNPZmZzZXRcIil9O2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICB9KSgpfVxuICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9IHZhbHVlO1xuICB9YDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIkdlbW1cIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBoaW50OiBgJHthdHRyaWJ1dGVzLmNhY2hlS2V5fWAsIGlucHV0RGVwZW5kZW5jaWVzIH0sXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgIG91dHB1dFNpemUgLyA2NFxuICAgICAgICAgICAgICAvKiB3b3JrZ3JvdXAgc2l6ZSAqL1xuICAgICAgICAgICAgKSB9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgcGFyc2VHZW1tQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zQSA9IGF0dHJpYnV0ZXMudHJhbnNBO1xuICAgICAgICBjb25zdCB0cmFuc0IgPSBhdHRyaWJ1dGVzLnRyYW5zQjtcbiAgICAgICAgY29uc3QgYWxwaGEgPSBhdHRyaWJ1dGVzLmFscGhhO1xuICAgICAgICBjb25zdCBiZXRhID0gYXR0cmlidXRlcy5iZXRhO1xuICAgICAgICByZXR1cm4geyB0cmFuc0EsIHRyYW5zQiwgYWxwaGEsIGJldGEsIGNhY2hlS2V5OiBgJHthdHRyaWJ1dGVzLnRyYW5zQX07JHthdHRyaWJ1dGVzLnRyYW5zQn07JHthdHRyaWJ1dGVzLmFscGhhID09PSAxfWAgfTtcbiAgICAgIH07XG4gICAgICBnZW1tID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgdmFsaWRhdGVJbnB1dHMxNShjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVHZW1tUHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2luc3RhbmNlLW5vcm0udHNcbiAgdmFyIGNyZWF0ZUluc3RhbmNlTm9ybVByb2dyYW1JbmZvLCBjb21wdXRlTWVhbiwgY3JlYXRlSW5zdGFuY2VOb3JtTkhXQ1Byb2dyYW1JbmZvLCBpbnN0YW5jZU5vcm07XG4gIHZhciBpbml0X2luc3RhbmNlX25vcm0gPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL2luc3RhbmNlLW5vcm0udHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgY3JlYXRlSW5zdGFuY2VOb3JtUHJvZ3JhbUluZm8gPSAoaW5wdXRzLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHhTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IHhTaGFwZTtcbiAgICAgICAgY29uc3QgYXhpcyA9IDI7XG4gICAgICAgIGNvbnN0IG5vcm1Db3VudCA9IFNoYXBlVXRpbC5zaXplVG9EaW1lbnNpb24oeFNoYXBlLCBheGlzKTtcbiAgICAgICAgY29uc3Qgbm9ybVNpemUgPSBTaGFwZVV0aWwuc2l6ZUZyb21EaW1lbnNpb24oeFNoYXBlLCBheGlzKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMobm9ybVNpemUpO1xuICAgICAgICBjb25zdCBub3JtUGFja2VkU2l6ZSA9IG5vcm1TaXplIC8gY29tcG9uZW50cztcbiAgICAgICAgY29uc3QgaW5wdXRTaGFwZSA9IFt4U2hhcGVbMF0sIHhTaGFwZVsxXSwgbm9ybVBhY2tlZFNpemVdO1xuICAgICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llcyA9IFtcInJhbmtcIiwgXCJ0eXBlXCIsIFwidHlwZVwiXTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0gW3sgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBub3JtU2l6ZSB9LCB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogbm9ybVBhY2tlZFNpemUgfV07XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIGlucHV0U2hhcGUpKTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKFwieFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0U2hhcGUubGVuZ3RoLCBjb21wb25lbnRzKTtcbiAgICAgICAgICBjb25zdCBzY2FsZSA9IGlucHV0VmFyaWFibGUoXCJzY2FsZVwiLCBpbnB1dHNbMV0uZGF0YVR5cGUsIGlucHV0c1sxXS5kaW1zKTtcbiAgICAgICAgICBjb25zdCBiaWFzID0gaW5wdXRWYXJpYWJsZShcImJpYXNcIiwgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcyk7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dFNoYXBlLmxlbmd0aCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gW3gsIHNjYWxlLCBiaWFzLCBvdXRwdXRdO1xuICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0geC50eXBlLnZhbHVlO1xuICAgICAgICAgIGNvbnN0IGYzMlR5cGUgPSBjb21wb25lbnRzID09PSAxID8gXCJmMzJcIiA6IGB2ZWMke2NvbXBvbmVudHN9PGYzMj5gO1xuICAgICAgICAgIGNvbnN0IHdvcmtncm91cFNpemUgPSA2NDtcbiAgICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFt7IG5hbWU6IFwibm9ybVNpemVcIiwgdHlwZTogXCJ1MzJcIiB9LCB7IG5hbWU6IFwibm9ybVBhY2tlZFNpemVcIiwgdHlwZTogXCJ1MzJcIiB9XTtcbiAgICAgICAgICByZXR1cm4gYFxuICB2YXI8d29ya2dyb3VwPiBtZWFuU2hhcmVkIDogZjMyO1xuICB2YXI8d29ya2dyb3VwPiBzcXVhcmVkTm9ybVNoYXJlZCA6IGYzMjtcbiAgdmFyPHdvcmtncm91cD4gd29ya2dyb3VwU2hhcmVkIDogYXJyYXk8JHtmMzJUeXBlfSwgJHt3b3JrZ3JvdXBTaXplfT47XG4gIGNvbnN0IHdvcmtncm91cFNpemUgPSAke3dvcmtncm91cFNpemV9dTtcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyguLi52YXJpYWJsZXMpfVxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQod29ya2dyb3VwU2l6ZSl9XG4gICAgbGV0IG5vcm0gPSBnbG9iYWxfaWR4IC8gd29ya2dyb3VwU2l6ZTtcbiAgICBsZXQgYmF0Y2ggPSBub3JtIC8gdW5pZm9ybXMueF9zaGFwZVsxXTtcbiAgICBsZXQgY2hhbm5lbCA9IG5vcm0gJSB1bmlmb3Jtcy54X3NoYXBlWzFdO1xuICAgIGxldCBsb2NhbEluZGV4ID0gbG9jYWxfaWQueDtcblxuICAgIC8vIGluaXRpYWxpemUgd29ya2dyb3VwIG1lbW9yeVxuICAgIHZhciBpbml0aWFsID0gJHtmMzJUeXBlfSgwKTtcbiAgICBmb3IgKHZhciBoID0gbG9jYWxJbmRleDsgaCA8IHVuaWZvcm1zLm5vcm1QYWNrZWRTaXplOyBoICs9IHdvcmtncm91cFNpemUpIHtcbiAgICAgIGluaXRpYWwgPSBpbml0aWFsICsgJHtmMzJUeXBlfSgke3guZ2V0KFwiYmF0Y2hcIiwgXCJjaGFubmVsXCIsIFwiaFwiKX0pO1xuICAgIH1cbiAgICB3b3JrZ3JvdXBTaGFyZWRbbG9jYWxJbmRleF0gPSBpbml0aWFsO1xuICAgIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgbWVhbiBvZiBjdXJyZW50IGNoYW5uZWwgZGF0YS5cbiAgICBmb3IgKHZhciBjdXJyU2l6ZSA9IHdvcmtncm91cFNpemUgPj4gMTsgIGN1cnJTaXplID4gMDsgY3VyclNpemUgPSBjdXJyU2l6ZSA+PiAxKSB7XG4gICAgICBpZiAobG9jYWxJbmRleCA8IGN1cnJTaXplKSB7XG4gICAgICAgIHdvcmtncm91cFNoYXJlZFtsb2NhbEluZGV4XSA9IHdvcmtncm91cFNoYXJlZFtsb2NhbEluZGV4XSArIHdvcmtncm91cFNoYXJlZFtsb2NhbEluZGV4ICsgY3VyclNpemVdO1xuICAgICAgfVxuICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgIH1cbiAgICBpZiAobG9jYWxJbmRleCA9PSAwKSB7XG4gICAgICBtZWFuU2hhcmVkID0gJHtzdW1WZWN0b3IoXCJ3b3JrZ3JvdXBTaGFyZWRbMF1cIiwgY29tcG9uZW50cyl9IC8gZjMyKHVuaWZvcm1zLm5vcm1TaXplKTtcbiAgICB9XG4gICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgLy8gcmVpbml0aWFsaXplIHdvcmtncm91cCBtZW1vcnkuXG4gICAgaW5pdGlhbCA9ICR7ZjMyVHlwZX0oMCk7XG4gICAgZm9yICh2YXIgaCA9IGxvY2FsSW5kZXg7IGggPCB1bmlmb3Jtcy5ub3JtUGFja2VkU2l6ZTsgaCArPSB3b3JrZ3JvdXBTaXplKSB7XG4gICAgICBsZXQgZGV2aWF0aW9uID0gICR7ZjMyVHlwZX0oJHt4LmdldChcImJhdGNoXCIsIFwiY2hhbm5lbFwiLCBcImhcIil9KSAtICR7ZjMyVHlwZX0obWVhblNoYXJlZCk7XG4gICAgICBpbml0aWFsID0gaW5pdGlhbCArIGRldmlhdGlvbiAqIGRldmlhdGlvbjtcbiAgICB9XG4gICAgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdID0gaW5pdGlhbDtcbiAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIHN1bSBvZiBzcXVhcmUgb2YgZGV2aWF0aW9uIG9mIGN1cnJlbnQgY2hhbm5lbCBkYXRhLlxuICAgIGZvciAodmFyIGN1cnJTaXplID0gd29ya2dyb3VwU2l6ZSA+PiAxOyAgY3VyclNpemUgPiAwOyBjdXJyU2l6ZSA9IGN1cnJTaXplID4+IDEpIHtcbiAgICAgIGlmIChsb2NhbEluZGV4IDwgY3VyclNpemUpIHtcbiAgICAgICAgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdID0gd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXhdICsgd29ya2dyb3VwU2hhcmVkW2xvY2FsSW5kZXggKyBjdXJyU2l6ZV07XG4gICAgICB9XG4gICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgfVxuICAgIGlmIChsb2NhbEluZGV4ID09IDApIHtcbiAgICAgIHNxdWFyZWROb3JtU2hhcmVkID0gJHtzdW1WZWN0b3IoXCJ3b3JrZ3JvdXBTaGFyZWRbMF1cIiwgY29tcG9uZW50cyl9O1xuICAgIH1cbiAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG5cbiAgICBsZXQgaW52U3RkRGV2ID0gaW52ZXJzZVNxcnQoc3F1YXJlZE5vcm1TaGFyZWQgLyBmMzIodW5pZm9ybXMubm9ybVNpemUpICsgZjMyKCR7YXR0cmlidXRlcy5lcHNpbG9ufSkpO1xuICAgIGxldCBjaGFubmVsU2NhbGUgPSBpbnZTdGREZXYgKiBmMzIoJHtzY2FsZS5nZXRCeU9mZnNldChcImNoYW5uZWxcIil9KTtcbiAgICBsZXQgY2hhbm5lbFNoaWZ0ID0gZjMyKCR7Ymlhcy5nZXRCeU9mZnNldChcImNoYW5uZWxcIil9KSAtIG1lYW5TaGFyZWQgKiBjaGFubmVsU2NhbGU7XG4gICAgZm9yICh2YXIgaCA9IGxvY2FsSW5kZXg7IGggPCB1bmlmb3Jtcy5ub3JtUGFja2VkU2l6ZTsgaCArPSB3b3JrZ3JvdXBTaXplKSB7XG4gICAgICBsZXQgdmFsdWUgPSAke3guZ2V0KFwiYmF0Y2hcIiwgXCJjaGFubmVsXCIsIFwiaFwiKX0gKiAke2RhdGFUeXBlfSgke2YzMlR5cGV9KGNoYW5uZWxTY2FsZSkpICsgJHtkYXRhVHlwZX0oJHtmMzJUeXBlfShjaGFubmVsU2hpZnQpKTtcbiAgICAgICR7b3V0cHV0LnNldChcImJhdGNoXCIsIFwiY2hhbm5lbFwiLCBcImhcIiwgXCJ2YWx1ZVwiKX07XG4gICAgfVxuICB9YDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi57IG5hbWU6IFwiSW5zdGFuY2VOb3JtYWxpemF0aW9uXCIgfSxcbiAgICAgICAgICAvLyBUT0RPOiB1c2UgZXBzaWxvbiBhcyB1bmlmb3JtLiBDdXJyZW50bHkgZXBzaWxvbiBhcyB1bmlmb3JtIGZhaWxzIHRlc3RfaW5zdGFuY2Vub3JtX2Vwc2lsb24uXG4gICAgICAgICAgc2hhZGVyQ2FjaGU6IHsgaGludDogYCR7YXR0cmlidXRlcy5lcHNpbG9ufTske2NvbXBvbmVudHN9YCwgaW5wdXREZXBlbmRlbmNpZXMgfSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAgICB7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IG5vcm1Db3VudCB9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgY29tcHV0ZU1lYW4gPSAoY29udGV4dCwgaW5wdXQsIHNjYWxlLCBiaWFzLCBuLCBoLCBjLCBlcHNpbG9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRNYXhDb21wb25lbnRzKGMpO1xuICAgICAgICBjb25zdCBXRyA9IDY0O1xuICAgICAgICBjb25zdCBvdXRwdXRUeXBlID0gY29tcG9uZW50cyA9PT0gMSA/IFwidmVjMmZcIiA6IGBtYXQyeCR7Y29tcG9uZW50c31mYDtcbiAgICAgICAgY29uc3Qgc3VtQ2FzdFR5cGUgPSBjb21wb25lbnRzID09PSAxID8gXCJmMzJcIiA6IGB2ZWMke2NvbXBvbmVudHN9ZmA7XG4gICAgICAgIGNvbnN0IHNldE91dHB1dFZhbHVlID0gKHZhcjEsIHZhcjIpID0+IGAke291dHB1dFR5cGV9KCR7dmFyMX0sICR7dmFyMn0pYDtcbiAgICAgICAgY29uc3QgdW5pdHNPZldvcmsgPSBuICogYyAvIGNvbXBvbmVudHM7XG4gICAgICAgIGNvbnN0IHdnU2l6ZSA9IE1hdGguY2VpbChoIC8gV0cpO1xuICAgICAgICBjb25zdCBtZWFuSW5wdXREZXBlbmRlbmNpZXMgPSBbXCJ0eXBlXCJdO1xuICAgICAgICBjb25zdCBtZWFuUHJvZ3JhbVVuaWZvcm1zID0gW1xuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiB3Z1NpemUgfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogaCB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBNYXRoLmZsb29yKGMgLyBjb21wb25lbnRzKSB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBNYXRoLmZsb29yKGggKiBjIC8gY29tcG9uZW50cykgfVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBnZXRNZWFuU2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0SGVscGVyID0gaW5wdXRWYXJpYWJsZShcImlucHV0XCIsIGlucHV0LmRhdGFUeXBlLCBpbnB1dC5kaW1zLCBjb21wb25lbnRzKTtcbiAgICAgICAgICByZXR1cm4gYFxuICAke3NoYWRlckhlbHBlci5kZWNsYXJlVmFyaWFibGVzKGlucHV0SGVscGVyKX1cbiAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhcjxzdG9yYWdlLCByZWFkX3dyaXRlPiBvdXRwdXQgOiBhcnJheTwke291dHB1dFR5cGV9PjtcbiAgc3RydWN0IFVuaWZvcm1zIHt3Z19zaXplOnUzMiwgSDp1MzIsIEM6dTMyLCBpbWFnZV9zaXplOnUzMn07XG4gIEBncm91cCgwKSBAYmluZGluZygyKSB2YXI8dW5pZm9ybT4gdW5pZm9ybXM6IFVuaWZvcm1zO1xuXG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydChXRyl9XG4gICAgbGV0IGN1cnJlbnRJbWFnZU51bWJlciA9IGdsb2JhbF9pZHggLyAke1dHfSAvIHVuaWZvcm1zLkM7XG4gICAgbGV0IGN1cnJlbnRDaGFubmVsTnVtYmVyID0gKGdsb2JhbF9pZHggLyAke1dHfSkgJSB1bmlmb3Jtcy5DO1xuICAgIGxldCB3Z09mZnNldCA9IGxvY2FsX2lkLnggKiB1bmlmb3Jtcy53Z19zaXplO1xuICAgIGlmICh3Z09mZnNldCA+PSB1bmlmb3Jtcy5IKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHdnTWF4ID0gbWluKHdnT2Zmc2V0ICsgdW5pZm9ybXMud2dfc2l6ZSwgdW5pZm9ybXMuSCk7XG5cbiAgICBsZXQgb2Zmc2V0ID0gY3VycmVudEltYWdlTnVtYmVyICogdW5pZm9ybXMuaW1hZ2Vfc2l6ZSArIGN1cnJlbnRDaGFubmVsTnVtYmVyO1xuICAgIHZhciBzdW0gPSAke2ZpbGxWZWN0b3IoXCJmMzJcIiwgY29tcG9uZW50cyl9O1xuICAgIHZhciBzcXVhcmVkU3VtID0gJHtmaWxsVmVjdG9yKFwiZjMyXCIsIGNvbXBvbmVudHMpfTtcbiAgICBmb3IgKHZhciBpOiB1MzIgPSB3Z09mZnNldDsgaSA8IHdnTWF4OyBpKyspIHtcbiAgICAgICAgbGV0IHZhbHVlID0gJHtzdW1DYXN0VHlwZX0oaW5wdXRbb2Zmc2V0ICsgaSAqIHVuaWZvcm1zLkNdKTtcbiAgICAgICAgc3VtICs9IHZhbHVlO1xuICAgICAgICBzcXVhcmVkU3VtICs9IHZhbHVlICogdmFsdWU7XG4gICAgfVxuICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9ICR7c2V0T3V0cHV0VmFsdWUoXCJzdW1cIiwgXCJzcXVhcmVkU3VtXCIpfTtcbiAgfWA7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG1lYW5WYWx1ZXMgPSBjb250ZXh0LmNvbXB1dGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJJbnN0YW5jZU5vcm1Db21wdXRlTWVhblwiLFxuICAgICAgICAgICAgc2hhZGVyQ2FjaGU6IHsgaGludDogYCR7Y29tcG9uZW50c31gLCBpbnB1dERlcGVuZGVuY2llczogbWVhbklucHV0RGVwZW5kZW5jaWVzIH0sXG4gICAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAgeyBkaW1zOiBbbiwgYywgV0csIDJdLCBkYXRhVHlwZTogMSAvKiBmbG9hdCAqLyB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHsgeDogbiAqIGMgLyBjb21wb25lbnRzIH0sXG4gICAgICAgICAgICAgIHByb2dyYW1Vbmlmb3JtczogbWVhblByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBnZXRTaGFkZXJTb3VyY2U6IGdldE1lYW5TaGFkZXJTb3VyY2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaW5wdXRzOiBbaW5wdXRdLCBvdXRwdXRzOiBbLTFdIH1cbiAgICAgICAgKVswXTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0gW1xuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiB1bml0c09mV29yayB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBoIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IE1hdGguZmxvb3IoYyAvIGNvbXBvbmVudHMpIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IE1hdGguZmxvb3IoV0cgKiBjIC8gY29tcG9uZW50cykgfVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llcyA9IFtcInR5cGVcIiwgXCJ0eXBlXCIsIFwidHlwZVwiXTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjYWxlSGVscGVyID0gaW5wdXRWYXJpYWJsZShcInNjYWxlXCIsIHNjYWxlLmRhdGFUeXBlLCBzY2FsZS5kaW1zLCBjb21wb25lbnRzKTtcbiAgICAgICAgICBjb25zdCBiaWFzSGVscGVyID0gaW5wdXRWYXJpYWJsZShcImJpYXNcIiwgYmlhcy5kYXRhVHlwZSwgYmlhcy5kaW1zLCBjb21wb25lbnRzKTtcbiAgICAgICAgICByZXR1cm4gYFxuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGlucHV0IDogYXJyYXk8JHtvdXRwdXRUeXBlfT47XG4gIEBncm91cCgwKSBAYmluZGluZygxKSB2YXI8c3RvcmFnZSwgcmVhZD4gc2NhbGUgOiBhcnJheTwke3NjYWxlSGVscGVyLnR5cGUuc3RvcmFnZX0+O1xuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMikgdmFyPHN0b3JhZ2UsIHJlYWQ+IGJpYXMgOiBhcnJheTwke2JpYXNIZWxwZXIudHlwZS5zdG9yYWdlfT47XG4gIEBncm91cCgwKSBAYmluZGluZygzKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gb3V0cHV0IDogYXJyYXk8JHtvdXRwdXRUeXBlfT47XG4gIHN0cnVjdCBVbmlmb3JtcyB7dW5pdHNfb2Zfd29yayA6IHUzMiwgSDogdTMyLCBDIDogdTMyLCBpbWFnZV9zaXplIDogdTMyfTtcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDQpIHZhcjx1bmlmb3JtPiB1bmlmb3JtczogVW5pZm9ybXM7XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhcInVuaWZvcm1zLnVuaXRzX29mX3dvcmtcIil9XG4gICAgbGV0IGN1cnJlbnRJbWFnZU51bWJlciA9IGdsb2JhbF9pZHggLyB1bmlmb3Jtcy5DO1xuICAgIGxldCBjdXJyZW50Q2hhbm5lbE51bWJlciA9IGdsb2JhbF9pZHggJSB1bmlmb3Jtcy5DO1xuXG4gICAgbGV0IG9mZnNldCA9IGN1cnJlbnRJbWFnZU51bWJlciAqIHVuaWZvcm1zLmltYWdlX3NpemU7XG4gICAgdmFyIHN1bSA9ICR7ZmlsbFZlY3RvcihcImYzMlwiLCBjb21wb25lbnRzKX07XG4gICAgdmFyIHNxdWFyZWRTdW0gPSAke2ZpbGxWZWN0b3IoXCJmMzJcIiwgY29tcG9uZW50cyl9O1xuICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCBtaW4oJHtXR30sIHVuaWZvcm1zLkgpOyBpKyspIHtcbiAgICAgICAgbGV0IHZhbHVlID0gaW5wdXRbb2Zmc2V0ICsgaSArIGN1cnJlbnRDaGFubmVsTnVtYmVyICogJHtXR31dO1xuICAgICAgICBzdW0gKz0gdmFsdWVbMF07XG4gICAgICAgIHNxdWFyZWRTdW0gKz0gdmFsdWVbMV07XG4gICAgfVxuICAgIHN1bSA9IHN1bSAvIGYzMih1bmlmb3Jtcy5IKTtcbiAgICBzcXVhcmVkU3VtID0gc3F1YXJlZFN1bSAvIGYzMih1bmlmb3Jtcy5IKTtcbiAgICBsZXQgaW52U3RkRGV2ID0gaW52ZXJzZVNxcnQoc3F1YXJlZFN1bSAtIHN1bSAqIHN1bSArIGYzMigke2Vwc2lsb259KSk7XG4gICAgbGV0IGNoYW5uZWxTY2FsZSA9IGludlN0ZERldiAqICR7c3VtQ2FzdFR5cGV9KHNjYWxlW2N1cnJlbnRDaGFubmVsTnVtYmVyXSk7XG4gICAgbGV0IGNoYW5uZWxTaGlmdCA9ICR7c3VtQ2FzdFR5cGV9KGJpYXNbY3VycmVudENoYW5uZWxOdW1iZXJdKSAtIHN1bSAqIGNoYW5uZWxTY2FsZTtcblxuICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9ICR7c2V0T3V0cHV0VmFsdWUoXCJjaGFubmVsU2NhbGVcIiwgXCJjaGFubmVsU2hpZnRcIil9O1xuICB9YDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkluc3RhbmNlTm9ybUNvbXB1dGVDaGFubmVsU2NhbGVTaGlmdFwiLFxuICAgICAgICAgICAgLy8gVE9ETzogdXNlIGVwc2lsb24gYXMgdW5pZm9ybS4gQ3VycmVudGx5IGVwc2lsb24gYXMgdW5pZm9ybSBmYWlscyB0ZXN0X2luc3RhbmNlbm9ybV9lcHNpbG9uLlxuICAgICAgICAgICAgc2hhZGVyQ2FjaGU6IHsgaGludDogYCR7Y29tcG9uZW50c307JHtlcHNpbG9ufWAsIGlucHV0RGVwZW5kZW5jaWVzIH0sXG4gICAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAgeyBkaW1zOiBbbiwgYywgMl0sIGRhdGFUeXBlOiAxIC8qIGZsb2F0ICovIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgICAgdW5pdHNPZldvcmsgLyA2NFxuICAgICAgICAgICAgICAgIC8qIHdvcmtncm91cCBzaXplICovXG4gICAgICAgICAgICAgICkgfSxcbiAgICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBpbnB1dHM6IFttZWFuVmFsdWVzLCBzY2FsZSwgYmlhc10sIG91dHB1dHM6IFstMV0gfVxuICAgICAgICApWzBdO1xuICAgICAgfTtcbiAgICAgIGNyZWF0ZUluc3RhbmNlTm9ybU5IV0NQcm9ncmFtSW5mbyA9IChjb250ZXh0LCBpbnB1dHMsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgeFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0geFNoYXBlO1xuICAgICAgICBjb25zdCBOID0geFNoYXBlWzBdO1xuICAgICAgICBjb25zdCBDID0geFNoYXBlW3hTaGFwZS5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgSCA9IFNoYXBlVXRpbC5zaXplRnJvbURpbWVuc2lvbih4U2hhcGUsIDEpIC8gQztcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMoQyk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSkgLyBjb21wb25lbnRzO1xuICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXMgPSBbeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IEggfSwgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IE1hdGguZmxvb3IoQyAvIGNvbXBvbmVudHMpIH1dO1xuICAgICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llcyA9IFtcInR5cGVcIiwgXCJ0eXBlXCJdO1xuICAgICAgICBjb25zdCBjaGFubmVsU2NhbGVTaGlmdCA9IGNvbXB1dGVNZWFuKGNvbnRleHQsIGlucHV0c1swXSwgaW5wdXRzWzFdLCBpbnB1dHNbMl0sIE4sIEgsIEMsIGF0dHJpYnV0ZXMuZXBzaWxvbik7XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclR5cGVUb1dzZ2xTdG9yYWdlVHlwZShpbnB1dHNbMF0uZGF0YVR5cGUpO1xuICAgICAgICAgIGNvbnN0IHNjYWxlVHlwZSA9IGNvbXBvbmVudHMgPT09IDEgPyBcInZlYzJmXCIgOiBgbWF0Mngke2NvbXBvbmVudHN9ZmA7XG4gICAgICAgICAgY29uc3Qgc2NhbGVDYXN0VHlwZSA9IGNvbXBvbmVudHMgPT09IDEgPyBkYXRhVHlwZSA6IGB2ZWMke2NvbXBvbmVudHN9PCR7ZGF0YVR5cGV9PmA7XG4gICAgICAgICAgY29uc3QgaW5wdXRIZWxwZXIgPSBpbnB1dFZhcmlhYmxlKFwiaW5wdXRcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcywgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0SGVscGVyID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBvdXRwdXRTaGFwZSwgY29tcG9uZW50cyk7XG4gICAgICAgICAgcmV0dXJuIGBcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhcjxzdG9yYWdlLCByZWFkPiBpbnB1dCA6IGFycmF5PCR7aW5wdXRIZWxwZXIudHlwZS5zdG9yYWdlfT47XG4gIEBncm91cCgwKSBAYmluZGluZygxKSB2YXI8c3RvcmFnZSwgcmVhZD4gc2NhbGVJbnB1dCA6IGFycmF5PCR7c2NhbGVUeXBlfT47XG4gIEBncm91cCgwKSBAYmluZGluZygyKSB2YXI8c3RvcmFnZSwgcmVhZF93cml0ZT4gb3V0cHV0IDogYXJyYXk8JHtvdXRwdXRIZWxwZXIudHlwZS5zdG9yYWdlfT47XG4gIHN0cnVjdCBVbmlmb3JtcyB7SDogdTMyLCBDIDogdTMyfTtcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDMpIHZhcjx1bmlmb3JtPiB1bmlmb3JtczogVW5pZm9ybXM7XG5cbiAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgbGV0IGN1cnJlbnRJbWFnZU51bWJlciA9IGdsb2JhbF9pZHggLyAodW5pZm9ybXMuQyAqIHVuaWZvcm1zLkgpO1xuICAgIGxldCBjdXJyZW50Q2hhbm5lbE51bWJlciA9IGdsb2JhbF9pZHggJSB1bmlmb3Jtcy5DO1xuXG4gICAgbGV0IHNjYWxlT2Zmc2V0ID0gY3VycmVudEltYWdlTnVtYmVyICogdW5pZm9ybXMuQyArIGN1cnJlbnRDaGFubmVsTnVtYmVyO1xuICAgIGxldCBzY2FsZSA9IHNjYWxlSW5wdXRbc2NhbGVPZmZzZXRdO1xuICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9IGZtYShpbnB1dFtnbG9iYWxfaWR4XSwgJHtzY2FsZUNhc3RUeXBlfShzY2FsZVswXSksICR7c2NhbGVDYXN0VHlwZX0oc2NhbGVbMV0pKTtcbiAgfWA7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkluc3RhbmNlTm9ybWFsaXphdGlvbk5IV0NcIixcbiAgICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGhpbnQ6IGAke2NvbXBvbmVudHN9YCwgaW5wdXREZXBlbmRlbmNpZXMgfSxcbiAgICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgICBvdXRwdXRTaXplIC8gNjRcbiAgICAgICAgICAgICAgICAvKiB3b3JrZ3JvdXAgc2l6ZSAqL1xuICAgICAgICAgICAgICApIH0sXG4gICAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBnZXRTaGFkZXJTb3VyY2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaW5wdXRzOiBbaW5wdXRzWzBdLCBjaGFubmVsU2NhbGVTaGlmdF0gfVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIGluc3RhbmNlTm9ybSA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gXCJOSFdDXCIpIHtcbiAgICAgICAgICBjcmVhdGVJbnN0YW5jZU5vcm1OSFdDUHJvZ3JhbUluZm8oY29udGV4dCwgY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVJbnN0YW5jZU5vcm1Qcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcykpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9sYXllci1ub3JtLnRzXG4gIHZhciB2YWxpZGF0ZUlucHV0czE2LCBjcmVhdGVMYXllck5vcm1Qcm9ncmFtSW5mbywgbGF5ZXJOb3JtO1xuICB2YXIgaW5pdF9sYXllcl9ub3JtID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9sYXllci1ub3JtLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfdXRpbCgpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIHZhbGlkYXRlSW5wdXRzMTYgPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibGF5ZXJOb3JtIHJlcXVpcmVzIGF0IGxlYXN0IDIgaW5wdXRzLlwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNyZWF0ZUxheWVyTm9ybVByb2dyYW1JbmZvID0gKGlucHV0cywgYXR0cmlidXRlcywgb3V0cHV0Q291bnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2ltcGxpZmllZCA9IGF0dHJpYnV0ZXMuc2ltcGxpZmllZDtcbiAgICAgICAgY29uc3QgeFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gaW5wdXRzWzFdO1xuICAgICAgICBjb25zdCBiaWFzID0gIXNpbXBsaWZpZWQgJiYgaW5wdXRzWzJdO1xuICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IHhTaGFwZTtcbiAgICAgICAgY29uc3QgYXhpcyA9IFNoYXBlVXRpbC5ub3JtYWxpemVBeGlzKGF0dHJpYnV0ZXMuYXhpcywgeFNoYXBlLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IG5vcm1Db3VudCA9IFNoYXBlVXRpbC5zaXplVG9EaW1lbnNpb24oeFNoYXBlLCBheGlzKTtcbiAgICAgICAgY29uc3Qgbm9ybVNpemUgPSBTaGFwZVV0aWwuc2l6ZUZyb21EaW1lbnNpb24oeFNoYXBlLCBheGlzKTtcbiAgICAgICAgY29uc3Qgc2NhbGVTaXplID0gU2hhcGVVdGlsLnNpemUoc2NhbGUuZGltcyk7XG4gICAgICAgIGNvbnN0IGJpYXNTaXplID0gYmlhcyA/IFNoYXBlVXRpbC5zaXplKGJpYXMuZGltcykgOiAwO1xuICAgICAgICBpZiAoc2NhbGVTaXplICE9PSBub3JtU2l6ZSB8fCBiaWFzICYmIGJpYXNTaXplICE9PSBub3JtU2l6ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2l6ZSBvZiBYLnNoYXBlKClbYXhpczpdID09ICR7bm9ybVNpemV9LlxuICAgICAgIFNpemUgb2Ygc2NhbGUgYW5kIGJpYXMgKGlmIHByb3ZpZGVkKSBtdXN0IG1hdGNoIHRoaXMuXG4gICAgICAgR290IHNjYWxlIHNpemUgb2YgJHtzY2FsZVNpemV9IGFuZCBiaWFzIHNpemUgb2YgJHtiaWFzU2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZWFuSW52U3RkRGV2RGltID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeFNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaWYgKGkgPCBheGlzKSB7XG4gICAgICAgICAgICBtZWFuSW52U3RkRGV2RGltLnB1c2goeFNoYXBlW2ldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVhbkludlN0ZERldkRpbS5wdXNoKDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0TWF4Q29tcG9uZW50cyhub3JtU2l6ZSk7XG4gICAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzID0gW1widHlwZVwiLCBcInR5cGVcIl07XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IFtcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogbm9ybUNvdW50IH0sXG4gICAgICAgICAgeyB0eXBlOiAxIC8qIGZsb2F0ICovLCBkYXRhOiBub3JtU2l6ZSB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBNYXRoLmZsb29yKG5vcm1TaXplIC8gY29tcG9uZW50cykgfSxcbiAgICAgICAgICB7IHR5cGU6IDEgLyogZmxvYXQgKi8sIGRhdGE6IGF0dHJpYnV0ZXMuZXBzaWxvbiB9XG4gICAgICAgIF07XG4gICAgICAgIGlmIChiaWFzKSB7XG4gICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXMucHVzaChcInR5cGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzTWVhbkRhdGFPdXRwdXQgPSBvdXRwdXRDb3VudCA+IDE7XG4gICAgICAgIGNvbnN0IGhhc0ludlN0ZE91dHB1dCA9IG91dHB1dENvdW50ID4gMjtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0c1swXS5kYXRhVHlwZSk7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gW1xuICAgICAgICAgICAgaW5wdXRWYXJpYWJsZShcInhcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcywgY29tcG9uZW50cyksXG4gICAgICAgICAgICBpbnB1dFZhcmlhYmxlKFwic2NhbGVcIiwgc2NhbGUuZGF0YVR5cGUsIHNjYWxlLmRpbXMsIGNvbXBvbmVudHMpXG4gICAgICAgICAgXTtcbiAgICAgICAgICBpZiAoYmlhcykge1xuICAgICAgICAgICAgdmFyaWFibGVzLnB1c2goaW5wdXRWYXJpYWJsZShcImJpYXNcIiwgYmlhcy5kYXRhVHlwZSwgYmlhcy5kaW1zLCBjb21wb25lbnRzKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKG91dHB1dFZhcmlhYmxlKFwib3V0cHV0XCIsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUsIGNvbXBvbmVudHMpKTtcbiAgICAgICAgICBpZiAoaGFzTWVhbkRhdGFPdXRwdXQpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKG91dHB1dFZhcmlhYmxlKFwibWVhbl9kYXRhX291dHB1dFwiLCAxIC8qIGZsb2F0ICovLCBtZWFuSW52U3RkRGV2RGltKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYXNJbnZTdGRPdXRwdXQpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKG91dHB1dFZhcmlhYmxlKFwiaW52X3N0ZF9vdXRwdXRcIiwgMSAvKiBmbG9hdCAqLywgbWVhbkludlN0ZERldkRpbSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFtcbiAgICAgICAgICAgIHsgbmFtZTogXCJub3JtX2NvdW50XCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJub3JtX3NpemVcIiwgdHlwZTogXCJmMzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcIm5vcm1fc2l6ZV92ZWN0b3JpemVkXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJlcHNpbG9uXCIsIHR5cGU6IFwiZjMyXCIgfVxuICAgICAgICAgIF07XG4gICAgICAgICAgcmV0dXJuIGBcbiAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyguLi52YXJpYWJsZXMpfVxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMubm9ybV9jb3VudFwiKX1cbiAgICBsZXQgb2Zmc2V0ID0gZ2xvYmFsX2lkeCAqIHVuaWZvcm1zLm5vcm1fc2l6ZV92ZWN0b3JpemVkO1xuICAgIHZhciBtZWFuX3ZlY3RvciA9ICR7ZmlsbFZlY3RvcihcImYzMlwiLCBjb21wb25lbnRzKX07XG4gICAgdmFyIG1lYW5fc3F1YXJlX3ZlY3RvciA9ICR7ZmlsbFZlY3RvcihcImYzMlwiLCBjb21wb25lbnRzKX07XG5cbiAgICBmb3IgKHZhciBoOiB1MzIgPSAwdTsgaCA8IHVuaWZvcm1zLm5vcm1fc2l6ZV92ZWN0b3JpemVkOyBoKyspIHtcbiAgICAgIGxldCB2YWx1ZSA9ICR7Y2FzdFRvRjMyKGRhdGFUeXBlLCBjb21wb25lbnRzLCBcInhbaCArIG9mZnNldF1cIil9O1xuICAgICAgbWVhbl92ZWN0b3IgKz0gdmFsdWU7XG4gICAgICBtZWFuX3NxdWFyZV92ZWN0b3IgKz0gdmFsdWUgKiB2YWx1ZTtcbiAgICB9XG4gICAgbGV0IG1lYW4gPSAke3N1bVZlY3RvcihcIm1lYW5fdmVjdG9yXCIsIGNvbXBvbmVudHMpfSAvIHVuaWZvcm1zLm5vcm1fc2l6ZTtcbiAgICBsZXQgaW52X3N0ZF9kZXYgPSBpbnZlcnNlU3FydCgke3N1bVZlY3RvcihcIm1lYW5fc3F1YXJlX3ZlY3RvclwiLCBjb21wb25lbnRzKX0gLyB1bmlmb3Jtcy5ub3JtX3NpemUgJHtzaW1wbGlmaWVkID8gXCJcIiA6IFwiLSBtZWFuICogbWVhblwifSArIHVuaWZvcm1zLmVwc2lsb24pO1xuXG4gICAgZm9yICh2YXIgajogdTMyID0gMDsgaiA8IHVuaWZvcm1zLm5vcm1fc2l6ZV92ZWN0b3JpemVkOyBqKyspIHtcbiAgICAgIGxldCBmMzJpbnB1dCA9ICR7Y2FzdFRvRjMyKGRhdGFUeXBlLCBjb21wb25lbnRzLCBcInhbaiArIG9mZnNldF1cIil9O1xuICAgICAgbGV0IGYzMnNjYWxlID0gJHtjYXN0VG9GMzIoZGF0YVR5cGUsIGNvbXBvbmVudHMsIFwic2NhbGVbal1cIil9O1xuICAgICAgb3V0cHV0W2ogKyBvZmZzZXRdID0gJHt2YXJpYWJsZXNbMF0udHlwZS52YWx1ZX0oKGYzMmlucHV0ICR7c2ltcGxpZmllZCA/IFwiXCIgOiBcIi0gbWVhblwifSkgKiBpbnZfc3RkX2RldiAqIGYzMnNjYWxlXG4gICAgICAgICR7YmlhcyA/IGArICR7Y2FzdFRvRjMyKGRhdGFUeXBlLCBjb21wb25lbnRzLCBcImJpYXNbal1cIil9YCA6IFwiXCJ9XG4gICAgICApO1xuICAgIH1cblxuICAgICR7aGFzTWVhbkRhdGFPdXRwdXQgPyBcIm1lYW5fZGF0YV9vdXRwdXRbZ2xvYmFsX2lkeF0gPSBtZWFuXCIgOiBcIlwifTtcbiAgICAke2hhc0ludlN0ZE91dHB1dCA/IFwiaW52X3N0ZF9vdXRwdXRbZ2xvYmFsX2lkeF0gPSBpbnZfc3RkX2RldlwiIDogXCJcIn07XG4gIH1gO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvdXRwdXRzID0gW3sgZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGUgfV07XG4gICAgICAgIGlmIChoYXNNZWFuRGF0YU91dHB1dCkge1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7IGRpbXM6IG1lYW5JbnZTdGREZXZEaW0sIGRhdGFUeXBlOiAxIC8qIGZsb2F0ICovIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNJbnZTdGRPdXRwdXQpIHtcbiAgICAgICAgICBvdXRwdXRzLnB1c2goeyBkaW1zOiBtZWFuSW52U3RkRGV2RGltLCBkYXRhVHlwZTogMSAvKiBmbG9hdCAqLyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiTGF5ZXJOb3JtYWxpemF0aW9uXCIsXG4gICAgICAgICAgc2hhZGVyQ2FjaGU6IHsgaGludDogYCR7Y29tcG9uZW50c307JHtvdXRwdXRDb3VudH07JHtzaW1wbGlmaWVkfWAsIGlucHV0RGVwZW5kZW5jaWVzIH0sXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHsgb3V0cHV0cywgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICBub3JtQ291bnQgLyA2NFxuICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICApIH0sIHByb2dyYW1Vbmlmb3JtcyB9KSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2VcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBsYXllck5vcm0gPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czE2KGNvbnRleHQuaW5wdXRzKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZUxheWVyTm9ybVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzLCBjb250ZXh0Lm91dHB1dENvdW50KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9tYXRtdWxuYml0cy50c1xuICB2YXIgdmFsaWRhdGVJbnB1dHMxNywgY3JlYXRlTWF0TXVsTkJpdHNQcm9ncmFtSW5mbywgbWF0TXVsTkJpdHMsIHBhcnNlTWF0TXVsTkJpdHNBdHRyaWJ1dGVzO1xuICB2YXIgaW5pdF9tYXRtdWxuYml0cyA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvbWF0bXVsbmJpdHMudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2F0dHJpYnV0ZV93aXRoX2NhY2hlX2tleSgpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIHZhbGlkYXRlSW5wdXRzMTcgPSAoaW5wdXRzLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dHMubGVuZ3RoIDwgMyB8fCBpbnB1dHMubGVuZ3RoID4gNCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1hdE11bE5CaXRzIHJlcXVpcmVzIDMgb3IgNCBpbnB1dHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYSA9IGlucHV0c1swXTtcbiAgICAgICAgY29uc3QgYVJhbmsgPSBhLmRpbXMubGVuZ3RoO1xuICAgICAgICBpZiAoYS5kaW1zW2FSYW5rIC0gMV0gIT09IGF0dHJpYnV0ZXMuaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBsYXN0IGRpbSBvZiBpbnB1dCBzaGFwZSBkb2VzIG5vdCBtYXRjaCB0aGUgayB2YWx1ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuQmxvY2tzUGVyQ29sID0gTWF0aC5mbG9vcigoYXR0cmlidXRlcy5rICsgYXR0cmlidXRlcy5ibG9ja1NpemUgLSAxKSAvIGF0dHJpYnV0ZXMuYmxvY2tTaXplKTtcbiAgICAgICAgY29uc3QgYmxvYlNpemUgPSBhdHRyaWJ1dGVzLmJsb2NrU2l6ZSAvIDggKiBhdHRyaWJ1dGVzLmJpdHM7XG4gICAgICAgIGNvbnN0IGIgPSBpbnB1dHNbMV07XG4gICAgICAgIGlmICghU2hhcGVVdGlsLmFyZUVxdWFsKGIuZGltcywgW2F0dHJpYnV0ZXMubiwgbkJsb2Nrc1BlckNvbCwgYmxvYlNpemVdKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBzZWNvbmQgaW5wdXRzIG11c3QgYmUgM0QgdGVuc29yIHdpdGggc2hhcGUgTiBYIG5CbG9ja3NQZXJDb2wgWCBibG9iU2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY2FsZXMgPSBpbnB1dHNbMl07XG4gICAgICAgIGNvbnN0IHNjYWxlc1NoYXBlID0gc2NhbGVzLmRpbXM7XG4gICAgICAgIGlmIChTaGFwZVV0aWwuc2l6ZShzY2FsZXNTaGFwZSkgIT09IGF0dHJpYnV0ZXMubiAqIG5CbG9ja3NQZXJDb2wpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY2FsZXMgaW5wdXQgc2l6ZSBlcnJvci5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICBjb25zdCB6ZXJvUG9pbnRzID0gaW5wdXRzWzNdO1xuICAgICAgICAgIGNvbnN0IHplcm9Qb2ludHNTaGFwZSA9IHplcm9Qb2ludHMuZGltcztcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFplcm9Qb2ludHNTaXplID0gYXR0cmlidXRlcy5iaXRzID4gNCA/IGF0dHJpYnV0ZXMubiAqIG5CbG9ja3NQZXJDb2wgOiBhdHRyaWJ1dGVzLm4gKiBNYXRoLmZsb29yKChuQmxvY2tzUGVyQ29sICsgMSkgLyAyKTtcbiAgICAgICAgICBpZiAoU2hhcGVVdGlsLnNpemUoemVyb1BvaW50c1NoYXBlKSAhPT0gZXhwZWN0ZWRaZXJvUG9pbnRzU2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiemVyb1BvaW50cyBpbnB1dCBzaXplIGVycm9yLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjcmVhdGVNYXRNdWxOQml0c1Byb2dyYW1JbmZvID0gKGlucHV0cywgYXR0cmlidXRlcywgbWF4Q29tcHV0ZVdvcmtncm91cFNpemVzLCBtYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgICBjb25zdCBhUmFuayA9IGlucHV0U2hhcGUubGVuZ3RoO1xuICAgICAgICBjb25zdCBuQmxvY2tzUGVyQ29sID0gTWF0aC5mbG9vcigoYXR0cmlidXRlcy5rICsgYXR0cmlidXRlcy5ibG9ja1NpemUgLSAxKSAvIGF0dHJpYnV0ZXMuYmxvY2tTaXplKTtcbiAgICAgICAgY29uc3QgZGltQU91dGVyID0gaW5wdXRTaGFwZVthUmFuayAtIDJdO1xuICAgICAgICBjb25zdCBkaW1Jbm5lciA9IGF0dHJpYnV0ZXMuaztcbiAgICAgICAgY29uc3QgZGltQk91dGVyID0gYXR0cmlidXRlcy5uO1xuICAgICAgICBjb25zdCBiYXRjaERpbXMgPSBpbnB1dFNoYXBlLnNsaWNlKDAsIGFSYW5rIC0gMik7XG4gICAgICAgIGNvbnN0IGJhdGNoU2l6ZSA9IFNoYXBlVXRpbC5zaXplKGJhdGNoRGltcyk7XG4gICAgICAgIGNvbnN0IGJsb2JTaXplID0gYXR0cmlidXRlcy5ibG9ja1NpemUgLyA4ICogYXR0cmlidXRlcy5iaXRzO1xuICAgICAgICBjb25zdCBibG9iU2l6ZUluV29yZHMgPSBibG9iU2l6ZSAvIDQ7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXRzWzBdLmRhdGFUeXBlO1xuICAgICAgICBjb25zdCBvdXRwdXROdW1iZXIgPSBnZXRNYXhDb21wb25lbnRzKGRpbUFPdXRlcik7XG4gICAgICAgIGNvbnN0IGFDb21wb25lbnRzID0gZ2V0TWF4Q29tcG9uZW50cyhhdHRyaWJ1dGVzLmspO1xuICAgICAgICBjb25zdCBiQ29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMoYmxvYlNpemVJbldvcmRzKTtcbiAgICAgICAgY29uc3QgZWxlbWVudFNpemUgPSBnZXRUZW5zb3JFbGVtZW50U2l6ZShkYXRhVHlwZSk7XG4gICAgICAgIGNvbnN0IHdvcmtncm91cE91dHB1dFNpemUgPSBkaW1BT3V0ZXIgKiBuQmxvY2tzUGVyQ29sICogZWxlbWVudFNpemU7XG4gICAgICAgIGNvbnN0IG1heE51bWJlck9mQ29tcG9uZW50cyA9IE1hdGguZmxvb3IobWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplIC8gd29ya2dyb3VwT3V0cHV0U2l6ZSk7XG4gICAgICAgIGNvbnN0IHVzZUJsb2Nrd2lzZU1hdE11bE5CaXRzID0gbkJsb2Nrc1BlckNvbCA8PSBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZXNbMF0gJiYgbWF4TnVtYmVyT2ZDb21wb25lbnRzID4gMDtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9ICF1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyB8fCBtYXhOdW1iZXJPZkNvbXBvbmVudHMgPj0gNCA/IGdldE1heENvbXBvbmVudHMoZGltQk91dGVyKSA6IG1heE51bWJlck9mQ29tcG9uZW50cyA+PSAyICYmIGdldE1heENvbXBvbmVudHMoZGltQk91dGVyKSA+PSAyID8gMiA6IDE7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gYmF0Y2hEaW1zLmNvbmNhdChbZGltQU91dGVyLCBkaW1CT3V0ZXJdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKSAvIGNvbXBvbmVudHMgLyBvdXRwdXROdW1iZXI7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IHVzZUJsb2Nrd2lzZU1hdE11bE5CaXRzID8gW10gOiBbeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IG91dHB1dFNpemUgfSwgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IGF0dHJpYnV0ZXMuYmxvY2tTaXplIH1dO1xuICAgICAgICBjb25zdCBpbnB1dFNoYXBlVGVtcCA9IFtiYXRjaFNpemUsIGRpbUFPdXRlciwgZGltSW5uZXIgLyBhQ29tcG9uZW50c107XG4gICAgICAgIGNvbnN0IGJTaGFwZSA9IFNoYXBlVXRpbC5jb252ZXJ0U2hhcGUoaW5wdXRzWzFdLmRpbXMpLnNsaWNlKCk7XG4gICAgICAgIGJTaGFwZS5zcGxpY2UoLTEsIDEsIGJsb2JTaXplSW5Xb3JkcyAvIGJDb21wb25lbnRzKTtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRTaGFwZVRlbXApKTtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoYlNoYXBlKSk7XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1syXS5kaW1zKSk7XG4gICAgICAgIGlmIChpbnB1dHMubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoU2hhcGVVdGlsLmNvbnZlcnRTaGFwZShpbnB1dHNbM10uZGltcykpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXRTaGFwZVRlbXAgPSBbYmF0Y2hTaXplLCBkaW1BT3V0ZXIsIGRpbUJPdXRlciAvIGNvbXBvbmVudHNdO1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZVRlbXApKTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0UmFuayA9IGlucHV0U2hhcGVUZW1wLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCBhID0gaW5wdXRWYXJpYWJsZShcImFcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dFJhbmssIGFDb21wb25lbnRzKTtcbiAgICAgICAgICBjb25zdCBiID0gaW5wdXRWYXJpYWJsZShcImJcIiwgMTIgLyogdWludDMyICovLCBiU2hhcGUubGVuZ3RoLCBiQ29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3Qgc2NhbGVzID0gaW5wdXRWYXJpYWJsZShcInNjYWxlc1wiLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgICAgY29uc3QgaW5wdXRWYXJpYWJsZXMgPSBbYSwgYiwgc2NhbGVzXTtcbiAgICAgICAgICBjb25zdCB6ZXJvUG9pbnRzID0gaW5wdXRzLmxlbmd0aCA9PT0gNCA/IGlucHV0VmFyaWFibGUoXCJ6ZXJvX3BvaW50c1wiLCAxMiAvKiB1aW50MzIgKi8sIGlucHV0c1szXS5kaW1zLmxlbmd0aCkgOiB2b2lkIDA7XG4gICAgICAgICAgaWYgKHplcm9Qb2ludHMpIHtcbiAgICAgICAgICAgIGlucHV0VmFyaWFibGVzLnB1c2goemVyb1BvaW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG91dHB1dFJhbmsgPSBvdXRwdXRTaGFwZVRlbXAubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKFwib3V0cHV0XCIsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0UmFuaywgY29tcG9uZW50cyk7XG4gICAgICAgICAgY29uc3QgdW5pZm9ybXMgPSBbeyBuYW1lOiBcIm91dHB1dF9zaXplXCIsIHR5cGU6IFwidTMyXCIgfSwgeyBuYW1lOiBcImJsb2NrX3NpemVcIiwgdHlwZTogXCJ1MzJcIiB9XTtcbiAgICAgICAgICBjb25zdCBkYXRhVHlwZTIgPSB0ZW5zb3JUeXBlVG9Xc2dsU3RvcmFnZVR5cGUoaW5wdXRzWzBdLmRhdGFUeXBlKTtcbiAgICAgICAgICBjb25zdCBxRHFEYXRhVHlwZSA9ICgoKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGFDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZXR1cm4gYGFycmF5PCR7ZGF0YVR5cGUyfSwgOD5gO1xuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBtYXQ0eDI8JHtkYXRhVHlwZTJ9PmA7XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYG1hdDJ4NDwke2RhdGFUeXBlMn0+YDtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YUNvbXBvbmVudHN9LWNvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgY29uc3QgcHJvY2Vzc09uZUJsb2NrID0gYFxuICAgICAgICBmb3IgKHZhciB3b3JkOiB1MzIgPSAwOyB3b3JkIDwgJHtibG9iU2l6ZUluV29yZHN9OyB3b3JkICs9ICR7YkNvbXBvbmVudHN9KSB7XG4gICAgICAgICAgJHtiLmluZGljZXNTZXQoXCJiX2luZGljZXNcIiwgXCIyXCIsIFwid29yZFwiKX07XG4gICAgICAgICAgbGV0IGJfZGF0YSA9ICR7Yi5nZXRCeUluZGljZXMoXCJiX2luZGljZXNcIil9O1xuICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCAke2JDb21wb25lbnRzfTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYl92YWx1ZTogdTMyID0gJHtiQ29tcG9uZW50cyA9PT0gMSA/IFwiYl9kYXRhXCIgOiBcImJfZGF0YVt3b3JkICsgaV1cIn07XG4gICAgICAgICAgICBsZXQgYl9tYXNrOiB1MzIgPSAweDBGMEYwRjBGdTtcbiAgICAgICAgICAgIGxldCBiX3ZhbHVlX2xvd2VyOiB2ZWM0PHUzMj4gPSB1bnBhY2s0eFU4KGJfdmFsdWUgJiBiX21hc2spO1xuICAgICAgICAgICAgbGV0IGJfdmFsdWVfdXBwZXI6IHZlYzQ8dTMyPiA9IHVucGFjazR4VTgoKGJfdmFsdWUgPj4gNCkgJiBiX21hc2spO1xuICAgICAgICAgICAgbGV0IGJfcXVhbnRpemVkX3ZhbHVlcyA9ICR7cURxRGF0YVR5cGV9KCR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNCB9LCAoXywgaSkgPT4gYCR7ZGF0YVR5cGUyfShiX3ZhbHVlX2xvd2VyWyR7aX1dKSwgJHtkYXRhVHlwZTJ9KGJfdmFsdWVfdXBwZXJbJHtpfV0pYCkuam9pbihcIiwgXCIpfSk7XG4gICAgICAgICAgICBsZXQgYl9kZXF1YW50aXplZF92YWx1ZXMgPSAkeygoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYUNvbXBvbmVudHMgPT09IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke3FEcURhdGFUeXBlfSgke0FycmF5LmZyb20oeyBsZW5ndGg6IDggfSwgKF8sIGkpID0+IGAoYl9xdWFudGl6ZWRfdmFsdWVzWyR7aX1dIC0gemVyb19wb2ludCkgKiBzY2FsZWApLmpvaW4oXCIsIFwiKX0pO2A7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gYChiX3F1YW50aXplZF92YWx1ZXMgLSAke3FEcURhdGFUeXBlfSgke0FycmF5KDgpLmZpbGwoXCJ6ZXJvX3BvaW50XCIpLmpvaW4oXCIsXCIpfSkpICogc2NhbGU7YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpfTtcbiAgICAgICAgICAgIC8vIE51bWJlciBvZiBCIGVsZW1lbnRzIHBlciAzMi1iaXQgd29yZCBpcyAzMi9iaXRzID0gMzIvNCA9IDhcbiAgICAgICAgICAgIGZvciAodmFyIG06IHUzMiA9IDA7IG0gPCAke3VzZUJsb2Nrd2lzZU1hdE11bE5CaXRzID8gZGltQU91dGVyIDogb3V0cHV0TnVtYmVyfXU7IG0rKykge1xuICAgICAgICAgICAgICAke2EuaW5kaWNlc1NldChcImFfaW5kaWNlc1wiLCBpbnB1dFJhbmsgLSAyLCB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/IFwibVwiIDogYHJvdyAqICR7b3V0cHV0TnVtYmVyfSArIG1gKX07XG4gICAgICAgICAgICAgICR7YS5pbmRpY2VzU2V0KFwiYV9pbmRpY2VzXCIsIGlucHV0UmFuayAtIDEsIFwid29yZF9vZmZzZXRcIil9O1xuICAgICAgICAgICAgICB2YXIgaW5wdXRfb2Zmc2V0ID0gJHthLmluZGljZXNUb09mZnNldChcImFfaW5kaWNlc1wiKX07XG4gICAgICAgICAgICAgIHZhciBhX2RhdGE6ICR7cURxRGF0YVR5cGV9O1xuICAgICAgICAgICAgICBmb3IgKHZhciBqOiB1MzIgPSAwOyBqIDwgJHs4IC8gYUNvbXBvbmVudHN9OyBqKyspIHtcbiAgICAgICAgICAgICAgICBhX2RhdGFbal0gPSAke2EuZ2V0QnlPZmZzZXQoXCJpbnB1dF9vZmZzZXRcIil9O1xuICAgICAgICAgICAgICAgIGlucHV0X29mZnNldCsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICR7dXNlQmxvY2t3aXNlTWF0TXVsTkJpdHMgPyBcIndvcmtncm91cF9zaGFyZWRbd29ya2dyb3VwX3NoYXJlZF9vZmZzZXQgKyBtXVwiIDogXCJvdXRwdXRfdmFsdWVzW21dXCJ9JHtjb21wb25lbnRzID4gMSA/IFwiW2NdXCIgOiBcIlwifSArPSAke0FycmF5LmZyb20oXG4gICAgICAgICAgICB7IGxlbmd0aDogOCAvIGFDb21wb25lbnRzIH0sXG4gICAgICAgICAgICAoXywgaSkgPT4gYCR7YUNvbXBvbmVudHMgPT09IDEgPyBgYV9kYXRhWyR7aX1dICogYl9kZXF1YW50aXplZF92YWx1ZXNbJHtpfV1gIDogYGRvdChhX2RhdGFbJHtpfV0sIGJfZGVxdWFudGl6ZWRfdmFsdWVzWyR7aX1dKWB9YFxuICAgICAgICAgICkuam9pbihcIiArIFwiKX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3b3JkX29mZnNldCArPSAkezggLyBhQ29tcG9uZW50c307XG4gICAgICAgICAgfVxuICAgICAgICB9YDtcbiAgICAgICAgICBjb25zdCB1cGRhdGVaZXJvUG9pbnRJbmRleCA9IHplcm9Qb2ludHMgPyBgXG4gICAgICAgICAgemVyb19wb2ludF9vZmZzZXQgKz0gNDtcbiAgICAgICAgICBpZiAoemVyb19wb2ludF9vZmZzZXQgPT0gMzIpIHtcbiAgICAgICAgICAgIHplcm9fcG9pbnRfb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHplcm9fcG9pbnRfaW5kZXgrKztcbiAgICAgICAgICAgIHplcm9fcG9pbnRfd29yZCA9ICR7emVyb1BvaW50cy5nZXRCeU9mZnNldChcInplcm9fcG9pbnRfaW5kZXhcIil9O1xuICAgICAgICAgIH1gIDogXCJcIjtcbiAgICAgICAgICByZXR1cm4gdXNlQmxvY2t3aXNlTWF0TXVsTkJpdHMgPyBgXG4gICAgICAgIHZhcjx3b3JrZ3JvdXA+IHdvcmtncm91cF9zaGFyZWQ6IGFycmF5PCR7b3V0cHV0LnR5cGUudmFsdWV9LCAke2RpbUFPdXRlciAqIG5CbG9ja3NQZXJDb2x9PjtcbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZGVjbGFyZVZhcmlhYmxlcyguLi5pbnB1dFZhcmlhYmxlcywgb3V0cHV0KX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KFtcbiAgICAgICAgICAgIG5CbG9ja3NQZXJDb2wsXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHZhciBhX2luZGljZXM6ICR7YS50eXBlLmluZGljZXN9O1xuICAgICAgICAgIHZhciBibG9jayA9IGxvY2FsX2lkLng7XG4gICAgICAgICAgdmFyIGNvbCA9IHdvcmtncm91cF9pZC55O1xuICAgICAgICAgIHZhciBiYXRjaCA9IHdvcmtncm91cF9pZC56O1xuICAgICAgICAgICR7YS5pbmRpY2VzU2V0KFwiYV9pbmRpY2VzXCIsIFwiMFwiLCBcImJhdGNoXCIpfTtcbiAgICAgICAgICAvLyBUd28gemVybyBwb2ludHMgYXJlIHBhY2tlZCBpbnRvIG9uZSBieXRlIHdoZW4gdW5pZm9ybXMuYml0cyBpcyA0LlxuICAgICAgICAgIGZvciAodmFyIGM6IHUzMiA9IDA7IGMgPCAke2NvbXBvbmVudHN9OyBjKyspIHtcbiAgICAgICAgICAgIGxldCBjb2xfdGltZXNfY29tcG9uZW50c19wbHVzX2MgPSBjb2wgKiAke2NvbXBvbmVudHN9ICsgYztcbiAgICAgICAgICAgICAgJHt6ZXJvUG9pbnRzID8gYFxuICAgICAgICAgICAgdmFyIHplcm9fcG9pbnRfYnl0ZXNfcGVyX2NvbDogdTMyID0gKCR7bkJsb2Nrc1BlckNvbH0gKyAxKSAvIDI7XG4gICAgICAgICAgICB2YXIgemVyb19wb2ludF9ieXRlX2NvdW50OiB1MzIgPSBjb2xfdGltZXNfY29tcG9uZW50c19wbHVzX2MgKiB6ZXJvX3BvaW50X2J5dGVzX3Blcl9jb2wgKyAoYmxvY2sgPj4gMHgxdSk7XG4gICAgICAgICAgICB2YXIgemVyb19wb2ludF93b3JkX2luZGV4OiB1MzIgPSB6ZXJvX3BvaW50X2J5dGVfY291bnQgPj4gMHgydTtcbiAgICAgICAgICAgIHZhciB6ZXJvX3BvaW50X2J5dGVfb2Zmc2V0OiB1MzIgPSB6ZXJvX3BvaW50X2J5dGVfY291bnQgJiAweDN1O1xuICAgICAgICAgICAgdmFyIHplcm9fcG9pbnRfbmliYmxlX29mZnNldDogdTMyID0gYmxvY2sgJiAweDF1O1xuICAgICAgICAgICAgdmFyIHplcm9fcG9pbnRfYml0c19vZmZzZXQ6IHUzMiA9ICh6ZXJvX3BvaW50X2J5dGVfb2Zmc2V0IDw8IDMpICsgKHplcm9fcG9pbnRfbmliYmxlX29mZnNldCA8PCAyKTtcbiAgICAgICAgICAgIHZhciB6ZXJvX3BvaW50X3dvcmQ6IHUzMiA9ICR7emVyb1BvaW50cy5nZXRCeU9mZnNldChcInplcm9fcG9pbnRfd29yZF9pbmRleFwiKX0gPj4gemVyb19wb2ludF9iaXRzX29mZnNldDtgIDogXCJcIn1cbiAgICAgICAgICAgIHZhciBiX2luZGljZXM6ICR7Yi50eXBlLmluZGljZXN9O1xuICAgICAgICAgICAgJHtiLmluZGljZXNTZXQoXCJiX2luZGljZXNcIiwgXCIwXCIsIFwiY29sX3RpbWVzX2NvbXBvbmVudHNfcGx1c19jXCIpfTtcbiAgICAgICAgICAgIC8vIFRoZSBzY2FsZSBhbmQgemVybyBwb2ludHMgYXJlIGNvbXB1dGVkIHBlciBibG9jay5cbiAgICAgICAgICAgIHZhciBzY2FsZXNfaW5kZXggPSBjb2xfdGltZXNfY29tcG9uZW50c19wbHVzX2MgKiAke25CbG9ja3NQZXJDb2x9ICsgYmxvY2s7XG4gICAgICAgICAgICBsZXQgc2NhbGUgPSAke3NjYWxlcy5nZXRCeU9mZnNldChcInNjYWxlc19pbmRleFwiKX07XG4gICAgICAgICAgICAvLyBUaGUgZGVmYXVsdCB6ZXJvIHBvaW50IGlzIDggZm9yIHVuc2lnbmVkIDQtYml0IHF1YW50aXphdGlvbi5cbiAgICAgICAgICAgIGxldCB6ZXJvX3BvaW50ID0gJHtkYXRhVHlwZTJ9KCR7emVyb1BvaW50cyA/IFwiKHplcm9fcG9pbnRfd29yZCkgJiAweEZ1XCIgOiA4fSk7XG4gICAgICAgICAgICAke2IuaW5kaWNlc1NldChcImJfaW5kaWNlc1wiLCBcIjFcIiwgXCJibG9ja1wiKX07XG4gICAgICAgICAgICB2YXIgd29yZF9vZmZzZXQ6IHUzMiA9IGJsb2NrICogJHthdHRyaWJ1dGVzLmJsb2NrU2l6ZSAvIGFDb21wb25lbnRzfTtcbiAgICAgICAgICAgIHZhciB3b3JrZ3JvdXBfc2hhcmVkX29mZnNldDogdTMyID0gYmxvY2sgKiAke2RpbUFPdXRlcn07XG4gICAgICAgICAgICAke3Byb2Nlc3NPbmVCbG9ja31cbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgICAgICAgIGlmIChsb2NhbF9pZC54ID09IDB1KSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0X2luZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc307XG4gICAgICAgICAgICAke291dHB1dC5pbmRpY2VzU2V0KFwib3V0cHV0X2luZGljZXNcIiwgXCIwXCIsIFwiYmF0Y2hcIil9O1xuICAgICAgICAgICAgJHtvdXRwdXQuaW5kaWNlc1NldChcIm91dHB1dF9pbmRpY2VzXCIsIG91dHB1dFJhbmsgLSAxLCBcImNvbFwiKX07XG4gICAgICAgICAgICAke291dHB1dC5pbmRpY2VzU2V0KFwib3V0cHV0X2luZGljZXNcIiwgb3V0cHV0UmFuayAtIDIsIFwiMFwiKX07XG4gICAgICAgICAgICB2YXIgb3V0cHV0X29mZnNldCA9ICR7b3V0cHV0LmluZGljZXNUb09mZnNldChcIm91dHB1dF9pbmRpY2VzXCIpfTtcbiAgICAgICAgICAgIGZvciAodmFyIG06IHUzMiA9IDB1OyBtIDwgJHtkaW1BT3V0ZXJ9dTsgbSsrKSB7XG4gICAgICAgICAgICAgIHZhciBvdXRwdXRfdmFsdWU6ICR7b3V0cHV0LnR5cGUudmFsdWV9ID0gJHtvdXRwdXQudHlwZS52YWx1ZX0oMCk7XG4gICAgICAgICAgICAgIHZhciB3b3JrZ3JvdXBfc2hhcmVkX29mZnNldDogdTMyID0gbTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgYjogdTMyID0gMHU7IGIgPCAke25CbG9ja3NQZXJDb2x9dTsgYisrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0X3ZhbHVlICs9IHdvcmtncm91cF9zaGFyZWRbd29ya2dyb3VwX3NoYXJlZF9vZmZzZXRdO1xuICAgICAgICAgICAgICAgIHdvcmtncm91cF9zaGFyZWRfb2Zmc2V0ICs9ICR7ZGltQU91dGVyfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAke291dHB1dC5zZXRCeU9mZnNldChcIm91dHB1dF9vZmZzZXRcIiwgXCJvdXRwdXRfdmFsdWVcIil9O1xuICAgICAgICAgICAgICBvdXRwdXRfb2Zmc2V0ICs9ICR7ZGltQk91dGVyIC8gY29tcG9uZW50c307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9YCA6IGBcbiAgICAgICAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyguLi5pbnB1dFZhcmlhYmxlcywgb3V0cHV0KX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhcInVuaWZvcm1zLm91dHB1dF9zaXplXCIpfVxuICAgICAgICAgIHZhciBvdXRwdXRfdmFsdWVzOiBhcnJheTwke291dHB1dC50eXBlLnZhbHVlfSwgJHtvdXRwdXROdW1iZXJ9PjtcbiAgICAgICAgICB2YXIgb3V0cHV0X2luZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoXCJnbG9iYWxfaWR4XCIpfTtcbiAgICAgICAgICB2YXIgY29sID0gJHtvdXRwdXQuaW5kaWNlc0dldChcIm91dHB1dF9pbmRpY2VzXCIsIG91dHB1dFJhbmsgLSAxKX07XG4gICAgICAgICAgdmFyIHJvdyA9ICR7b3V0cHV0LmluZGljZXNHZXQoXCJvdXRwdXRfaW5kaWNlc1wiLCBvdXRwdXRSYW5rIC0gMil9O1xuICAgICAgICAgIHZhciBhX2luZGljZXM6ICR7YS50eXBlLmluZGljZXN9ID0gb3V0cHV0X2luZGljZXM7XG4gICAgICAgICAgLy8gVHdvIHplcm8gcG9pbnRzIGFyZSBwYWNrZWQgaW50byBvbmUgYnl0ZSBiZWNhdXNlIHVuaWZvcm1zLmJpdHMgPD0gNC5cbiAgICAgICAgICAvLyB6ZXJvX3BvaW50X29mZnNldCBpcyBlaXRoZXIgMCBvciA0LiBJdCBpcyBiaXQgb2Zmc2V0IHdpdGhpbiBvbmUgYnl0ZS5cbiAgICAgICAgICAvLyBUT0RPIHN1cHBvcnQgemVyb19wb2ludF9vZmZzZXQgZm9yIGJpdHMgPiA0XG4gICAgICAgICAgJHt6ZXJvUG9pbnRzID8gYFxuICAgICAgICAgIHZhciB6ZXJvX3BvaW50X2Fic19vZmZzZXQgPSBjb2wgKiAke2NvbXBvbmVudHN9ICogKCgke25CbG9ja3NQZXJDb2x9ICsgMSkgLyAyKTtcbiAgICAgICAgICB2YXIgemVyb19wb2ludF9pbmRleDogdTMyID0gemVyb19wb2ludF9hYnNfb2Zmc2V0IC8gNDtcbiAgICAgICAgICB2YXIgemVyb19wb2ludF93b3JkOiB1MzIgPSAke3plcm9Qb2ludHMuZ2V0QnlPZmZzZXQoXCJ6ZXJvX3BvaW50X2luZGV4XCIpfTtcbiAgICAgICAgICB2YXIgemVyb19wb2ludF9vZmZzZXQ6IHUzMiA9ICh6ZXJvX3BvaW50X2Fic19vZmZzZXQgJSA0KSAqIDg7YCA6IFwiXCJ9XG4gICAgICAgICAgdmFyIHNjYWxlX2luZGV4ID0gY29sICogJHtuQmxvY2tzUGVyQ29sICogY29tcG9uZW50c307XG4gICAgICAgICAgdmFyIGJfaW5kaWNlczogJHtiLnR5cGUuaW5kaWNlc307XG4gICAgICAgICAgZm9yICh2YXIgYzogdTMyID0gMDsgYyA8ICR7Y29tcG9uZW50c307IGMrKykge1xuICAgICAgICAgICAgJHtiLmluZGljZXNTZXQoXCJiX2luZGljZXNcIiwgXCIwXCIsIGBjb2wgKiAke2NvbXBvbmVudHN9ICsgY2ApfTtcbiAgICAgICAgICAgIHZhciBibG9ja19vZmZzZXQ6IHUzMiA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBibG9jazogdTMyID0gMDsgYmxvY2sgPCAke25CbG9ja3NQZXJDb2x9OyBibG9jaysrKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBzY2FsZSBhbmQgemVybyBwb2ludHMgYXJlIGNvbXB1dGVkIHBlciBibG9jay5cbiAgICAgICAgICAgICAgbGV0IHNjYWxlID0gJHtzY2FsZXMuZ2V0QnlPZmZzZXQoXCJzY2FsZV9pbmRleFwiKX07XG4gICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IHplcm8gcG9pbnQgaXMgOCBmb3IgdW5zaWduZWQgNC1iaXQgcXVhbnRpemF0aW9uLlxuICAgICAgICAgICAgICBsZXQgemVyb19wb2ludCA9ICR7ZGF0YVR5cGUyfSgke3plcm9Qb2ludHMgPyBcImV4dHJhY3RCaXRzKHplcm9fcG9pbnRfd29yZCwgemVyb19wb2ludF9vZmZzZXQsIDQpXCIgOiA4fSk7XG4gICAgICAgICAgICAgICR7Yi5pbmRpY2VzU2V0KFwiYl9pbmRpY2VzXCIsIFwiMVwiLCBcImJsb2NrXCIpfTtcbiAgICAgICAgICAgICAgdmFyIHdvcmRfb2Zmc2V0OiB1MzIgPSBibG9ja19vZmZzZXQ7XG4gICAgICAgICAgICAgICR7cHJvY2Vzc09uZUJsb2NrfVxuICAgICAgICAgICAgICBzY2FsZV9pbmRleCsrO1xuICAgICAgICAgICAgICAke3VwZGF0ZVplcm9Qb2ludEluZGV4fVxuICAgICAgICAgICAgICBibG9ja19vZmZzZXQgKz0gdW5pZm9ybXMuYmxvY2tfc2l6ZSAvICR7YUNvbXBvbmVudHN9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRHJvcCB0aGUgdHJhaWxpbmcgNCBiaXRzIGlmIHRoZSB6ZXJvX3BvaXRfb2Zmc2V0IGlzIG5vdCBhIGJ5dGUgYm91bmRhcnkgdG8gYWxpZ24gd2l0aCB0aGUgbmV4dCBieXRlLlxuICAgICAgICAgICAgJHt6ZXJvUG9pbnRzID8gYGlmICh6ZXJvX3BvaW50X29mZnNldCAlIDggPiAwKSB7XG4gICAgICAgICAgICAgICAgJHt1cGRhdGVaZXJvUG9pbnRJbmRleH1cbiAgICAgICAgICAgICAgfWAgOiBcIlwifVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgazogdTMyID0gMHU7IGsgPCAke291dHB1dE51bWJlcn11OyBrKyspIHtcbiAgICAgICAgICAgICAgJHtvdXRwdXQuaW5kaWNlc1NldChcIm91dHB1dF9pbmRpY2VzXCIsIG91dHB1dFJhbmsgLSAyLCBgJHtvdXRwdXROdW1iZXJ9ICogcm93ICsga2ApfTtcbiAgICAgICAgICAgICAgJHtvdXRwdXQuc2V0QnlJbmRpY2VzKFwib3V0cHV0X2luZGljZXNcIiwgXCJvdXRwdXRfdmFsdWVzW2tdXCIpfVxuICAgICAgICAgICAgfVxuICAgICAgICB9YDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/IFwiQmxvY2t3aXNlTWF0TXVsTkJpdHNcIiA6IFwiTWF0TXVsTkJpdHNcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZToge1xuICAgICAgICAgICAgaGludDogYCR7YXR0cmlidXRlcy5jYWNoZUtleX07JHtkaW1BT3V0ZXJ9OyR7ZGF0YVR5cGV9OyR7aW5wdXRzLmxlbmd0aH1gLFxuICAgICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXM6IEFycmF5KGlucHV0cy5sZW5ndGgpLmZpbGwoXCJyYW5rXCIpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogW3sgZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgbmFtZTogdXNlQmxvY2t3aXNlTWF0TXVsTkJpdHMgPyBcIkJsb2Nrd2lzZU1hdE11bE5CaXRzXCIgOiBcIk1hdE11bE5CaXRzXCIsXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB1c2VCbG9ja3dpc2VNYXRNdWxOQml0cyA/IHsgeDogMSwgeTogTWF0aC5jZWlsKGRpbUJPdXRlciAvIGNvbXBvbmVudHMpLCB6OiBiYXRjaFNpemUgfSA6IHsgeDogTWF0aC5jZWlsKFxuICAgICAgICAgICAgICBvdXRwdXRTaXplIC8gNjRcbiAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICkgfSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIG1hdE11bE5CaXRzID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgdmFsaWRhdGVJbnB1dHMxNyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnN0IG1heENvbXB1dGVXb3JrZ3JvdXBTaXplcyA9IGNvbnRleHQuZ2V0TWF4Q29tcHV0ZVdvcmtncm91cFNpemVzKCk7XG4gICAgICAgIGNvbnN0IG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZSA9IGNvbnRleHQuZ2V0TWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VzaXplKCk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVNYXRNdWxOQml0c1Byb2dyYW1JbmZvKFxuICAgICAgICAgIGNvbnRleHQuaW5wdXRzLFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgbWF4Q29tcHV0ZVdvcmtncm91cFNpemVzLFxuICAgICAgICAgIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZVxuICAgICAgICApKTtcbiAgICAgIH07XG4gICAgICBwYXJzZU1hdE11bE5CaXRzQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoYXR0cmlidXRlcyk7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL211bHRpaGVhZC1hdHRlbnRpaW9uLnRzXG4gIHZhciBnZXRJbnB1dCwgdmFsaWRhdGVJbnB1dHMxOCwgcGFyc2VNdWx0aUhlYWRBdHRlbnRpb25BdHRyaWJ1dGVzLCB3ZWlnaHRUcmFuc3Bvc2VBdHRyaWJ1dGUyLCBhZGRCaWFzVHJhbnNwb3NlLCBtYXliZVRyYW5zcG9zZVRvQk5TSEFuZEFkZEJpYXMsIG11bHRpSGVhZEF0dGVudGlvbjtcbiAgdmFyIGluaXRfbXVsdGloZWFkX2F0dGVudGlpb24gPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL211bHRpaGVhZC1hdHRlbnRpaW9uLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfdXRpbCgpO1xuICAgICAgaW5pdF9hdHRyaWJ1dGVfd2l0aF9jYWNoZV9rZXkoKTtcbiAgICAgIGluaXRfdHlwZXMoKTtcbiAgICAgIGluaXRfYXR0ZW50aW9uKCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgaW5pdF90cmFuc3Bvc2UoKTtcbiAgICAgIGdldElucHV0ID0gKGlucHV0cywgaSkgPT4gaW5wdXRzLmxlbmd0aCA+IGkgJiYgaW5wdXRzW2ldLmRpbXMubGVuZ3RoID4gMCAmJiBTaGFwZVV0aWwuc2l6ZShpbnB1dHNbaV0uZGltcykgPiAwID8gaW5wdXRzW2ldIDogdm9pZCAwO1xuICAgICAgdmFsaWRhdGVJbnB1dHMxOCA9IChpbnB1dHMsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnB1dHNbMF07XG4gICAgICAgIGNvbnN0IGtleSA9IGdldElucHV0KGlucHV0cywgMSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0SW5wdXQoaW5wdXRzLCAyKTtcbiAgICAgICAgY29uc3QgYmlhcyA9IGdldElucHV0KGlucHV0cywgMyk7XG4gICAgICAgIGNvbnN0IGtleVBhZGRpbmdNYXNrID0gZ2V0SW5wdXQoaW5wdXRzLCA0KTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQb3NpdGlvbkJpYXMgPSBnZXRJbnB1dChpbnB1dHMsIDUpO1xuICAgICAgICBjb25zdCBwYXN0S2V5ID0gZ2V0SW5wdXQoaW5wdXRzLCA2KTtcbiAgICAgICAgY29uc3QgcGFzdFZhbHVlID0gZ2V0SW5wdXQoaW5wdXRzLCA3KTtcbiAgICAgICAgaWYgKHF1ZXJ5LmRpbXMubGVuZ3RoICE9PSAzICYmIHF1ZXJ5LmRpbXMubGVuZ3RoICE9PSA1KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgcXVlcnkgaXMgZXhwZWN0ZWQgdG8gaGF2ZSAzIG9yIDUgZGltZW5zaW9uc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkbW1oYVBhY2tpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgYmF0Y2hTaXplID0gcXVlcnkuZGltc1swXTtcbiAgICAgICAgY29uc3Qgc2VxdWVuY2VMZW5ndGggPSBxdWVyeS5kaW1zWzFdO1xuICAgICAgICBjb25zdCBoaWRkZW5TaXplID0gcXVlcnkuZGltcy5sZW5ndGggPT09IDMgPyBkbW1oYVBhY2tpbmcgPyBxdWVyeS5kaW1zWzJdIC8gMyA6IHF1ZXJ5LmRpbXNbMl0gOiBhdHRyaWJ1dGVzLm51bUhlYWRzICogcXVlcnkuZGltc1s0XTtcbiAgICAgICAgbGV0IGt2U2VxdWVuY2VMZW5ndGggPSBzZXF1ZW5jZUxlbmd0aDtcbiAgICAgICAgbGV0IHBhc3RTZXF1ZW5jZUxlbmd0aCA9IDA7XG4gICAgICAgIGxldCBtYXhTZXF1ZW5jZUxlbmd0aCA9IDA7XG4gICAgICAgIGNvbnN0IGhlYWRTaXplID0gTWF0aC5mbG9vcihoaWRkZW5TaXplIC8gYXR0cmlidXRlcy5udW1IZWFkcyk7XG4gICAgICAgIGlmIChwYXN0S2V5ICYmIHBhc3RWYWx1ZSkge1xuICAgICAgICAgIGlmIChwYXN0S2V5LmRpbXMubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicGFzdF9rZXlcIiBpcyBleHBlY3RlZCB0byBoYXZlIDQgZGltZW5zaW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFzdEtleS5kaW1zWzBdICE9PSBiYXRjaFNpemUgfHwgcGFzdEtleS5kaW1zWzFdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8IHBhc3RLZXkuZGltc1szXSAhPT0gaGVhZFNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0X2tleVwiIHNoYXBlIChiYXRjaF9zaXplLCBudW1faGVhZHMsIHBhc3Rfc2VxdWVuY2VfbGVuZ3RoLCBoZWFkX3NpemUpJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXN0VmFsdWUuZGltc1swXSAhPT0gYmF0Y2hTaXplIHx8IHBhc3RWYWx1ZS5kaW1zWzFdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8IHBhc3RWYWx1ZS5kaW1zWzNdICE9PSBoZWFkU2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3RfdmFsdWVcIiBzaGFwZSAoYmF0Y2hfc2l6ZSwgbnVtX2hlYWRzLCBwYXN0X3NlcXVlbmNlX2xlbmd0aCwgaGVhZF9zaXplKScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFzdEtleS5kaW1zWzJdICE9PSBwYXN0VmFsdWUuZGltc1syXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3Rfa2V5XCIgYW5kIFwicGFzdF92YWx1ZVwiIHNoYWxsIGhhdmUgc2FtZSBkaW0gMiAocGFzdF9zZXF1ZW5jZV9sZW5ndGgpJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXN0VmFsdWUuZGltcy5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0X3ZhbHVlXCIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSA0IGRpbWVuc2lvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFzdFNlcXVlbmNlTGVuZ3RoID0gcGFzdEtleS5kaW1zWzJdO1xuICAgICAgICAgIG1heFNlcXVlbmNlTGVuZ3RoID0gcGFzdEtleS5kaW1zWzJdO1xuICAgICAgICB9IGVsc2UgaWYgKHBhc3RLZXkgfHwgcGFzdFZhbHVlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInBhc3Rfa2V5XCIgYW5kIFwicGFzdF92YWx1ZVwiIHNoYWxsIGJlIGJvdGggcHJlc2VudCBvciBib3RoIGFic2VudCcpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBxa3ZGb3JtYXQ7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBpZiAocXVlcnkuZGltcy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJxdWVyeVwiIGlzIGV4cGVjdGVkIHRvIGhhdmUgMyBkaW1lbnNpb25zIHdoZW4ga2V5IGlzIGdpdmVuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChrZXkuZGltcy5sZW5ndGggPCAzIHx8IGtleS5kaW1zLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJrZXlcIiBpcyBleHBlY3RlZCB0byBoYXZlIDMsIDQsIG9yIDUgZGltZW5zaW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocXVlcnkuZGltc1swXSAhPT0ga2V5LmRpbXNbMF0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJxdWVyeVwiIGFuZCBcImtleVwiIHNoYWxsIGhhdmUgc2FtZSBkaW0gMCAoYmF0Y2ggc2l6ZSknKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGtleS5kaW1zLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgaWYgKGtleS5kaW1zWzJdICE9PSBxdWVyeS5kaW1zWzJdKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJxdWVyeVwiIGFuZCBcImtleVwiIHNoYWxsIGhhdmUgc2FtZSBkaW0gMiAoaGlkZGVuX3NpemUpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxa3ZGb3JtYXQgPSAyIC8qIHFrdkJTTkggKi87XG4gICAgICAgICAgICBrdlNlcXVlbmNlTGVuZ3RoID0ga2V5LmRpbXNbMV07XG4gICAgICAgICAgfSBlbHNlIGlmIChrZXkuZGltcy5sZW5ndGggPT09IDUpIHtcbiAgICAgICAgICAgIGlmIChrZXkuZGltc1syXSAhPT0gYXR0cmlidXRlcy5udW1IZWFkcyB8fCBrZXkuZGltc1szXSAhPT0gMiB8fCBrZXkuZGltc1s0XSAhPT0gaGVhZFNpemUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3QgXCJrZXlcIiBzaGFwZSAoYmF0Y2hfc2l6ZSwga3Zfc2VxdWVuY2VfbGVuZ3RoLCBudW1faGVhZHMsIDIsIGhlYWRfc2l6ZSkgZm9yIHBhY2tlZCBrdicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0IFwidmFsdWVcIiBiZSBub25lIHdoZW4gXCJrZXlcIiBoYXMgcGFja2VkIGt2IGZvcm1hdC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHFrdkZvcm1hdCA9IDUgLyogcUt2QlNOSHhCU04ySCAqLztcbiAgICAgICAgICAgIGt2U2VxdWVuY2VMZW5ndGggPSBrZXkuZGltc1sxXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGtleS5kaW1zWzFdICE9PSBhdHRyaWJ1dGVzLm51bUhlYWRzIHx8IGtleS5kaW1zWzNdICE9PSBoZWFkU2l6ZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdCBcImtleVwiIHNoYXBlIChiYXRjaF9zaXplLCBudW1faGVhZHMsIGt2X3NlcXVlbmNlX2xlbmd0aCwgaGVhZF9zaXplKSBmb3IgcGFzdF9rZXknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHFrdkZvcm1hdCA9IDAgLyogdW5rbm93biAqLztcbiAgICAgICAgICAgIGt2U2VxdWVuY2VMZW5ndGggPSBrZXkuZGltc1syXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHF1ZXJ5LmRpbXMubGVuZ3RoICE9PSAzICYmIHF1ZXJ5LmRpbXMubGVuZ3RoICE9PSA1KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicXVlcnlcIiBpcyBleHBlY3RlZCB0byBoYXZlIDMgb3IgNSBkaW1lbnNpb25zIHdoZW4ga2V5IGlzIGVtcHR5Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChxdWVyeS5kaW1zLmxlbmd0aCA9PT0gNSAmJiAocXVlcnkuZGltc1syXSAhPT0gYXR0cmlidXRlcy5udW1IZWFkcyB8fCBxdWVyeS5kaW1zWzNdICE9PSAzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3QgXCJxdWVyeVwiIHNoYXBlIChiYXRjaF9zaXplLCBrdl9zZXF1ZW5jZV9sZW5ndGgsIG51bV9oZWFkcywgMywgaGVhZF9zaXplKSBmb3IgcGFja2VkIGt2Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHFrdkZvcm1hdCA9IDMgLyogcWt2QlNOM0ggKi87XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJpYXMpIHtcbiAgICAgICAgICBpZiAoYmlhcy5kaW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcImJpYXNcIiBpcyBleHBlY3RlZCB0byBoYXZlIDEgZGltZW5zaW9uJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5LmRpbXMubGVuZ3RoID09PSA1ICYmIHF1ZXJ5LmRpbXNbM10gPT09IDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYmlhcyBpcyBub3QgYWxsb3dlZCBmb3IgcGFja2VkIGt2LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1hc2tUeXBlID0gMCAvKiBub25lICovO1xuICAgICAgICBpZiAoa2V5UGFkZGluZ01hc2spIHtcbiAgICAgICAgICBtYXNrVHlwZSA9IDggLyogbWFza1Vua25vd24gKi87XG4gICAgICAgICAgY29uc3QgbWFza0RpbXMgPSBrZXlQYWRkaW5nTWFzay5kaW1zO1xuICAgICAgICAgIGlmIChtYXNrRGltcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChtYXNrRGltc1swXSA9PT0gYmF0Y2hTaXplKSB7XG4gICAgICAgICAgICAgIG1hc2tUeXBlID0gMSAvKiBtYXNrMWRLZXlTZXFMZW4gKi87XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hc2tEaW1zWzBdID09PSAzICogYmF0Y2hTaXplICsgMikge1xuICAgICAgICAgICAgICBtYXNrVHlwZSA9IDMgLyogbWFzazFES2V5U2VxTGVuU3RhcnQgKi87XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChtYXNrRGltcy5sZW5ndGggPT09IDIgJiYgbWFza0RpbXNbMF0gPT09IGJhdGNoU2l6ZSAmJiBtYXNrRGltc1sxXSA9PT0ga3ZTZXF1ZW5jZUxlbmd0aCkge1xuICAgICAgICAgICAgbWFza1R5cGUgPSA1IC8qIG1hc2syZEtleVBhZGRpbmcgKi87XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXNrVHlwZSA9PT0gOCAvKiBtYXNrVW5rbm93biAqLykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcImtleV9wYWRkaW5nX21hc2tcIiBzaGFwZSBzaGFsbCBiZSAoYmF0Y2hfc2l6ZSkgb3IgKGJhdGNoX3NpemUsIGt2X3NlcXVlbmNlX2xlbmd0aCknKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWFzayBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXNzUGFzdEluS3YgPSBmYWxzZTtcbiAgICAgICAgbGV0IHZIaWRkZW5TaXplID0gaGlkZGVuU2l6ZTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHZhbHVlLmRpbXMubGVuZ3RoICE9PSAzICYmIHZhbHVlLmRpbXMubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwidmFsdWVcIiBpcyBleHBlY3RlZCB0byBoYXZlIDMgb3IgNCBkaW1lbnNpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChxdWVyeS5kaW1zWzBdICE9PSB2YWx1ZS5kaW1zWzBdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicXVlcnlcIiBhbmQgXCJ2YWx1ZVwiIHNoYWxsIGhhdmUgc2FtZSBkaW0gMCAoYmF0Y2hfc2l6ZSknKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlLmRpbXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBpZiAoa3ZTZXF1ZW5jZUxlbmd0aCAhPT0gdmFsdWUuZGltc1sxXSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwia2V5XCIgYW5kIFwidmFsdWVcIiBzaGFsbCBoYXZlIHRoZSBzYW1lIGRpbSAxIChrdl9zZXF1ZW5jZV9sZW5ndGgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2SGlkZGVuU2l6ZSA9IHZhbHVlLmRpbXNbMl07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChrdlNlcXVlbmNlTGVuZ3RoICE9PSB2YWx1ZS5kaW1zWzJdKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJwYXN0X2tleVwiIGFuZCBcInBhc3RfdmFsdWVcIiBzaGFsbCBoYXZlIHRoZSBzYW1lIGRpbSAyIChrdl9zZXF1ZW5jZV9sZW5ndGgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2SGlkZGVuU2l6ZSA9IHZhbHVlLmRpbXNbMV0gKiB2YWx1ZS5kaW1zWzNdO1xuICAgICAgICAgICAgcGFzc1Bhc3RJbkt2ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxTZXF1ZW5jZUxlbmd0aCA9IHBhc3RTZXF1ZW5jZUxlbmd0aCArIGt2U2VxdWVuY2VMZW5ndGg7XG4gICAgICAgIGNvbnN0IGJyb2FkY2FzdFJlc1Bvc0JpYXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKGtleVBhZGRpbmdNYXNrKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS2V5IHBhZGRpbmcgbWFzayBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWxhdGl2ZVBvc2l0aW9uQmlhcykge1xuICAgICAgICAgIGlmIChyZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zLmxlbmd0aCAhPT0gNCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcInJlbGF0aXZlX3Bvc2l0aW9uX2JpYXNcIiBpcyBleHBlY3RlZCB0byBoYXZlIDQgZGltZW5zaW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVsYXRpdmVQb3NpdGlvbkJpYXMuZGltc1swXSAhPT0gYmF0Y2hTaXplICYmIHJlbGF0aXZlUG9zaXRpb25CaWFzLmRpbXNbMF0gIT09IDEgfHwgcmVsYXRpdmVQb3NpdGlvbkJpYXMuZGltc1sxXSAhPT0gYXR0cmlidXRlcy5udW1IZWFkcyB8fCByZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zWzJdICE9PSBzZXF1ZW5jZUxlbmd0aCB8fCByZWxhdGl2ZVBvc2l0aW9uQmlhcy5kaW1zWzNdICE9PSB0b3RhbFNlcXVlbmNlTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IFwicmVsYXRpdmVfcG9zaXRpb25fYmlhc1wiIHNoYXBlIChiYXRjaF9zaXplLCAxLCBzZXF1ZW5jZV9sZW5ndGgsIGt2X3NlcXVlbmNlX2xlbmd0aCknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBiYXRjaFNpemUsXG4gICAgICAgICAgc2VxdWVuY2VMZW5ndGgsXG4gICAgICAgICAgcGFzdFNlcXVlbmNlTGVuZ3RoLFxuICAgICAgICAgIGt2U2VxdWVuY2VMZW5ndGgsXG4gICAgICAgICAgdG90YWxTZXF1ZW5jZUxlbmd0aCxcbiAgICAgICAgICBtYXhTZXF1ZW5jZUxlbmd0aCxcbiAgICAgICAgICBpbnB1dEhpZGRlblNpemU6IDAsXG4gICAgICAgICAgaGlkZGVuU2l6ZSxcbiAgICAgICAgICB2SGlkZGVuU2l6ZSxcbiAgICAgICAgICBoZWFkU2l6ZSxcbiAgICAgICAgICB2SGVhZFNpemU6IE1hdGguZmxvb3IodkhpZGRlblNpemUgLyBhdHRyaWJ1dGVzLm51bUhlYWRzKSxcbiAgICAgICAgICBudW1IZWFkczogYXR0cmlidXRlcy5udW1IZWFkcyxcbiAgICAgICAgICBpc1VuaWRpcmVjdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgICBwYXN0UHJlc2VudFNoYXJlQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgICBtYXNrRmlsdGVyVmFsdWU6IGF0dHJpYnV0ZXMubWFza0ZpbHRlclZhbHVlLFxuICAgICAgICAgIG1hc2tUeXBlLFxuICAgICAgICAgIHNjYWxlOiBhdHRyaWJ1dGVzLnNjYWxlLFxuICAgICAgICAgIGJyb2FkY2FzdFJlc1Bvc0JpYXMsXG4gICAgICAgICAgcGFzc1Bhc3RJbkt2LFxuICAgICAgICAgIHFrdkZvcm1hdFxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHBhcnNlTXVsdGlIZWFkQXR0ZW50aW9uQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoeyAuLi5hdHRyaWJ1dGVzIH0pO1xuICAgICAgd2VpZ2h0VHJhbnNwb3NlQXR0cmlidXRlMiA9IGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7IHBlcm06IFswLCAyLCAxLCAzXSB9KTtcbiAgICAgIGFkZEJpYXNUcmFuc3Bvc2UgPSAoY29udGV4dCwgcWt2LCBiaWFzLCBiYXRjaFNpemUsIHNlcXVlbmNlTGVuZ3RoLCBoaWRkZW5TaXplLCBiaWFzT2Zmc2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gW2JhdGNoU2l6ZSwgc2VxdWVuY2VMZW5ndGgsIGhpZGRlblNpemVdO1xuICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXMgPSBbXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IG91dHB1dFNpemUgfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogYmlhc09mZnNldCB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBoaWRkZW5TaXplIH1cbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKFwicWt2X3dpdGhfYmlhc1wiLCBxa3YuZGF0YVR5cGUsIG91dHB1dFNoYXBlKTtcbiAgICAgICAgICBjb25zdCBxa3ZJbnB1dCA9IGlucHV0VmFyaWFibGUoXCJxa3ZcIiwgcWt2LmRhdGFUeXBlLCBvdXRwdXRTaGFwZSk7XG4gICAgICAgICAgY29uc3QgYmlhc0lucHV0ID0gaW5wdXRWYXJpYWJsZShcImJpYXNcIiwgYmlhcy5kYXRhVHlwZSwgb3V0cHV0U2hhcGUpO1xuICAgICAgICAgIGNvbnN0IHVuaWZvcm1zID0gW1xuICAgICAgICAgICAgeyBuYW1lOiBcIm91dHB1dF9zaXplXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJiaWFzX29mZnNldFwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiaGlkZGVuX3NpemVcIiwgdHlwZTogXCJ1MzJcIiB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICByZXR1cm4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKHFrdklucHV0LCBiaWFzSW5wdXQsIG91dHB1dCl9XG4gICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRfc2l6ZVwiKX1cbiAgICBsZXQgYmlhc19vZmZzZXRfaWR4ID0gKGdsb2JhbF9pZHggJSB1bmlmb3Jtcy5oaWRkZW5fc2l6ZSkgKyB1bmlmb3Jtcy5iaWFzX29mZnNldDtcblxuICAgIHFrdl93aXRoX2JpYXNbZ2xvYmFsX2lkeF0gPSBxa3ZbZ2xvYmFsX2lkeF0gKyBiaWFzW2JpYXNfb2Zmc2V0X2lkeF07XG4gIH1gO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiTXVsdGlIZWFkQXR0ZW50aW9uQWRkQmlhc1wiLFxuICAgICAgICAgICAgc2hhZGVyQ2FjaGU6IHsgaW5wdXREZXBlbmRlbmNpZXM6IFtcInR5cGVcIiwgXCJ0eXBlXCJdIH0sXG4gICAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IHFrdi5kYXRhVHlwZSwgZ3B1RGF0YVR5cGU6IDAgLyogZGVmYXVsdCAqLyB9XSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgICAgb3V0cHV0U2l6ZSAvIDY0XG4gICAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICAgKSB9LFxuICAgICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZ2V0U2hhZGVyU291cmNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGlucHV0czogW3FrdiwgYmlhc10sIG91dHB1dHM6IFstMV0gfVxuICAgICAgICApWzBdO1xuICAgICAgfTtcbiAgICAgIG1heWJlVHJhbnNwb3NlVG9CTlNIQW5kQWRkQmlhcyA9IChjb250ZXh0LCBiYXRjaFNpemUsIG51bUhlYWRzLCBzZXF1ZW5jZUxlbmd0aCwgaGVhZFNpemUsIGlucHV0LCBiaWFzLCBiaWFzT2Zmc2V0KSA9PiB7XG4gICAgICAgIGxldCByZXNoYXBlZElucHV0ID0gaW5wdXQ7XG4gICAgICAgIGlmICghYmlhcykge1xuICAgICAgICAgIGlmIChpbnB1dC5kaW1zLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmVzaGFwZWRJbnB1dCA9IGlucHV0LnJlc2hhcGUoW2JhdGNoU2l6ZSwgc2VxdWVuY2VMZW5ndGgsIG51bUhlYWRzLCBoZWFkU2l6ZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8ocmVzaGFwZWRJbnB1dCwgd2VpZ2h0VHJhbnNwb3NlQXR0cmlidXRlMi5wZXJtKSxcbiAgICAgICAgICAgIHsgaW5wdXRzOiBbcmVzaGFwZWRJbnB1dF0sIG91dHB1dHM6IFstMV0gfVxuICAgICAgICAgIClbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHNlcXVlbmNlTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGRCaWFzUmVzaGFwZSBpcyBub3QgaW1wbGVtZW50ZWQuIFBsZWFzZSBleHBvcnQgeW91ciBtb2RlbCB3aXRoIHBhY2tlZCBRS1Ygb3IgS1ZcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc2hhcGVkSW5wdXQgPSBhZGRCaWFzVHJhbnNwb3NlKGNvbnRleHQsIGlucHV0LCBiaWFzLCBiYXRjaFNpemUsIHNlcXVlbmNlTGVuZ3RoLCBudW1IZWFkcyAqIGhlYWRTaXplLCBiaWFzT2Zmc2V0KTtcbiAgICAgICAgICAgIHJlc2hhcGVkSW5wdXQgPSByZXNoYXBlZElucHV0LnJlc2hhcGUoW2JhdGNoU2l6ZSwgc2VxdWVuY2VMZW5ndGgsIG51bUhlYWRzLCBoZWFkU2l6ZV0pO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICAgICAgY3JlYXRlVHJhbnNwb3NlUHJvZ3JhbUluZm8ocmVzaGFwZWRJbnB1dCwgd2VpZ2h0VHJhbnNwb3NlQXR0cmlidXRlMi5wZXJtKSxcbiAgICAgICAgICAgICAgeyBpbnB1dHM6IFtyZXNoYXBlZElucHV0XSwgb3V0cHV0czogWy0xXSB9XG4gICAgICAgICAgICApWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIG11bHRpSGVhZEF0dGVudGlvbiA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHZhbGlkYXRlSW5wdXRzMTgoY29udGV4dC5pbnB1dHMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICBjb25zdCBxdWVyeSA9IGNvbnRleHQuaW5wdXRzWzBdO1xuICAgICAgICBjb25zdCBrZXkgPSBnZXRJbnB1dChjb250ZXh0LmlucHV0cywgMSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0SW5wdXQoY29udGV4dC5pbnB1dHMsIDIpO1xuICAgICAgICBjb25zdCBiaWFzID0gZ2V0SW5wdXQoY29udGV4dC5pbnB1dHMsIDMpO1xuICAgICAgICBjb25zdCBrZXlQYWRkaW5nTWFzayA9IGdldElucHV0KGNvbnRleHQuaW5wdXRzLCA0KTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQb3NpdGlvbkJpYXMgPSBnZXRJbnB1dChjb250ZXh0LmlucHV0cywgNSk7XG4gICAgICAgIGNvbnN0IHBhc3RLZXkgPSBnZXRJbnB1dChjb250ZXh0LmlucHV0cywgNik7XG4gICAgICAgIGNvbnN0IHBhc3RWYWx1ZSA9IGdldElucHV0KGNvbnRleHQuaW5wdXRzLCA3KTtcbiAgICAgICAgaWYgKHF1ZXJ5LmRpbXMubGVuZ3RoID09PSA1KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFja2VkIFFLViBpcyBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleT8uZGltcy5sZW5ndGggPT09IDUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYWNrZWQgS1YgaXMgbm90IGltcGxlbWVudGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGt2Qk5TSCA9IGtleSAmJiB2YWx1ZSAmJiBrZXkuZGltcy5sZW5ndGggPT09IDQgJiYgdmFsdWUuZGltcy5sZW5ndGggPT09IDQ7XG4gICAgICAgIGNvbnN0IFEgPSBtYXliZVRyYW5zcG9zZVRvQk5TSEFuZEFkZEJpYXMoXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBwYXJhbXMuYmF0Y2hTaXplLFxuICAgICAgICAgIHBhcmFtcy5udW1IZWFkcyxcbiAgICAgICAgICBwYXJhbXMuc2VxdWVuY2VMZW5ndGgsXG4gICAgICAgICAgcGFyYW1zLmhlYWRTaXplLFxuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIGJpYXMsXG4gICAgICAgICAgMFxuICAgICAgICApO1xuICAgICAgICBpZiAoa3ZCTlNIKSB7XG4gICAgICAgICAgcmV0dXJuIGFwcGx5QXR0ZW50aW9uKFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIFEsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGtleVBhZGRpbmdNYXNrLFxuICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgcGFzdEtleSxcbiAgICAgICAgICAgIHBhc3RWYWx1ZSxcbiAgICAgICAgICAgIHJlbGF0aXZlUG9zaXRpb25CaWFzLFxuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgYXR0cmlidXRlc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFrZXkgfHwgIXZhbHVlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5IGFuZCB2YWx1ZSBtdXN0IGJlIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEsgPSBtYXliZVRyYW5zcG9zZVRvQk5TSEFuZEFkZEJpYXMoXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBwYXJhbXMuYmF0Y2hTaXplLFxuICAgICAgICAgIHBhcmFtcy5udW1IZWFkcyxcbiAgICAgICAgICBwYXJhbXMua3ZTZXF1ZW5jZUxlbmd0aCxcbiAgICAgICAgICBwYXJhbXMuaGVhZFNpemUsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGJpYXMsXG4gICAgICAgICAgcGFyYW1zLmhpZGRlblNpemVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgViA9IG1heWJlVHJhbnNwb3NlVG9CTlNIQW5kQWRkQmlhcyhcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHBhcmFtcy5iYXRjaFNpemUsXG4gICAgICAgICAgcGFyYW1zLm51bUhlYWRzLFxuICAgICAgICAgIHBhcmFtcy5rdlNlcXVlbmNlTGVuZ3RoLFxuICAgICAgICAgIHBhcmFtcy52SGVhZFNpemUsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgYmlhcyxcbiAgICAgICAgICAyICogcGFyYW1zLmhpZGRlblNpemVcbiAgICAgICAgKTtcbiAgICAgICAgYXBwbHlBdHRlbnRpb24oXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBRLFxuICAgICAgICAgIEssXG4gICAgICAgICAgVixcbiAgICAgICAgICBrZXlQYWRkaW5nTWFzayxcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgcGFzdEtleSxcbiAgICAgICAgICBwYXN0VmFsdWUsXG4gICAgICAgICAgcmVsYXRpdmVQb3NpdGlvbkJpYXMsXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3BhZC50c1xuICB2YXIgdmFsaWRhdGVJbnB1dHMxOSwgZ2V0UGFkQ29uc3RhbnQsIGdldFBhZFJlZmxlY3QsIGdldFBhZEVkZ2UsIGdldFBhZFdyYXAsIGdldFBhZFNuaXBwZXQsIGNyZWF0ZVBhZFByb2dyYW1JbmZvLCBjcmVhdGVQYWRBdHRyaWJ1dGVzRnJvbUlucHV0cywgcGFkO1xuICB2YXIgaW5pdF9wYWQgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3BhZC50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICB2YWxpZGF0ZUlucHV0czE5ID0gKGlucHV0cykgPT4ge1xuICAgICAgICBpZiAoIWlucHV0cyB8fCBpbnB1dHMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRvbyBmZXcgaW5wdXRzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dHNbMF0uZGF0YVR5cGUgIT09IDEgLyogZmxvYXQgKi8gJiYgaW5wdXRzWzBdLmRhdGFUeXBlICE9PSAxMCAvKiBmbG9hdDE2ICovKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgdHlwZSBtdXN0IGJlIGZsb2F0IG9yIGZsb2F0MTYuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBsZXQgdmFsaWRQYWRzID0gaW5wdXRzWzBdLmRpbXMubGVuZ3RoICogMiA9PT0gaW5wdXRzWzFdLmRpbXNbMF07XG4gICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIHZhbGlkUGFkcyA9IGlucHV0c1szXS5kaW1zWzBdICogMiA9PT0gaW5wdXRzWzFdLmRpbXNbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdmFsaWRQYWRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFkcyBzaG91bGQgYmUgYSAxRCB0ZW5zb3Igb2Ygc2hhcGUgWzIgKiBpbnB1dF9yYW5rXSBvciBbMiAqIG51bV9heGVzXS5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZ2V0UGFkQ29uc3RhbnQgPSAob3V0cHV0LCBpbnB1dFJhbmssIHBhZHNMZW5ndGgpID0+IHtcbiAgICAgICAgbGV0IGJsb2NrID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IGlucHV0UmFuayAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgYmxvY2sgKz0gYFxuICAgICAgICAgICAgayA9IGkzMigke291dHB1dC5pbmRpY2VzR2V0KFwiaW5kaWNlc1wiLCBpKX0pIC0gJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy5wYWRzXCIsIGksIHBhZHNMZW5ndGgpfTtcbiAgICAgICAgICAgIGlmIChrIDwgMCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrID49IGkzMigke2dldEVsZW1lbnRBdChcInVuaWZvcm1zLnhfc2hhcGVcIiwgaSwgaW5wdXRSYW5rKX0pKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ICs9IGsgKiBpMzIoJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy54X3N0cmlkZXNcIiwgaSwgaW5wdXRSYW5rKX0pO1xuICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgXG4gICAgICAgICAgdmFsdWUgPSAke291dHB1dC50eXBlLnZhbHVlfSh1bmlmb3Jtcy5jb25zdGFudF92YWx1ZSk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgJHtibG9ja31cbiAgICAgICAgICAgIHZhbHVlID0geFtvZmZzZXRdO1xuICAgICAgICAgIH1cbiAgICAgIGA7XG4gICAgICB9O1xuICAgICAgZ2V0UGFkUmVmbGVjdCA9IChvdXRwdXQsIGlucHV0UmFuaywgcGFkc0xlbmd0aCkgPT4ge1xuICAgICAgICBsZXQgYmxvY2sgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gaW5wdXRSYW5rIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICBibG9jayArPSBgXG4gICAgICAgICAgICAgICAgayA9IGkzMigke291dHB1dC5pbmRpY2VzR2V0KFwiaW5kaWNlc1wiLCBpKX0pIC0gJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy5wYWRzXCIsIGksIHBhZHNMZW5ndGgpfTtcbiAgICAgICAgICAgICAgICBpZiAoayA8IDApIHtcbiAgICAgICAgICAgICAgICAgIGsgPSAtaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbGV0IF8ybl8xID0gMiAqIChpMzIoJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy54X3NoYXBlXCIsIGksIGlucHV0UmFuayl9KSAtIDEpO1xuICAgICAgICAgICAgICAgICAgayA9IGsgJSBfMm5fMTtcbiAgICAgICAgICAgICAgICAgIGlmKGsgPj0gaTMyKCR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMueF9zaGFwZVwiLCBpLCBpbnB1dFJhbmspfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IF8ybl8xIC0gaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGsgKiBpMzIoJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy54X3N0cmlkZXNcIiwgaSwgaW5wdXRSYW5rKX0pO1xuICAgICAgICAgICAgYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgICAke2Jsb2NrfVxuICAgICAgICAgICAgICB2YWx1ZSA9IHhbb2Zmc2V0XTtcbiAgICAgICAgICBgO1xuICAgICAgfTtcbiAgICAgIGdldFBhZEVkZ2UgPSAob3V0cHV0LCBpbnB1dFJhbmssIHBhZHNMZW5ndGgpID0+IHtcbiAgICAgICAgbGV0IGJsb2NrID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaSA9IGlucHV0UmFuayAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgYmxvY2sgKz0gYFxuICAgICAgICAgICAgICAgIGsgPSBpMzIoJHtvdXRwdXQuaW5kaWNlc0dldChcImluZGljZXNcIiwgaSl9KSAtICR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMucGFkc1wiLCBpLCBwYWRzTGVuZ3RoKX07XG4gICAgICAgICAgICAgICAgaWYgKGsgPCAwKSB7XG4gICAgICAgICAgICAgICAgICBrID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGsgPj0gaTMyKCR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMueF9zaGFwZVwiLCBpLCBpbnB1dFJhbmspfSkpIHtcbiAgICAgICAgICAgICAgICAgIGsgPSBpMzIoJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy54X3NoYXBlXCIsIGksIGlucHV0UmFuayl9KSAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNldCArPSBrICogaTMyKCR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMueF9zdHJpZGVzXCIsIGksIGlucHV0UmFuayl9KTtcbiAgICAgICAgICAgIGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgICAgICAgJHtibG9ja31cbiAgICAgICAgICAgICAgdmFsdWUgPSB4W29mZnNldF07XG4gICAgICAgICAgYDtcbiAgICAgIH07XG4gICAgICBnZXRQYWRXcmFwID0gKG91dHB1dCwgaW5wdXRSYW5rLCBwYWRzTGVuZ3RoKSA9PiB7XG4gICAgICAgIGxldCBibG9jayA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbnB1dFJhbmsgLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgIGJsb2NrICs9IGBcbiAgICAgICAgICAgICAgICBrID0gaTMyKCR7b3V0cHV0LmluZGljZXNHZXQoXCJpbmRpY2VzXCIsIGkpfSkgLSAke2dldEVsZW1lbnRBdChcInVuaWZvcm1zLnBhZHNcIiwgaSwgcGFkc0xlbmd0aCl9O1xuICAgICAgICAgICAgICAgIGlmIChrIDwgMCkgIHtcbiAgICAgICAgICAgICAgICAgIGsgKz0gaTMyKCR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMueF9zaGFwZVwiLCBpLCBpbnB1dFJhbmspfV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoayA+PSBpMzIoJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy54X3NoYXBlXCIsIGksIGlucHV0UmFuayl9KSkge1xuICAgICAgICAgICAgICAgICAgayAtPSBpMzIoJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy54X3NoYXBlXCIsIGksIGlucHV0UmFuayl9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGsgKiBpMzIoJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy54X3N0cmlkZXNcIiwgaSwgaW5wdXRSYW5rKX0pO1xuICAgICAgICAgICAgYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgICAke2Jsb2NrfVxuICAgICAgICAgICAgICB2YWx1ZSA9IHhbb2Zmc2V0XTtcbiAgICAgICAgICBgO1xuICAgICAgfTtcbiAgICAgIGdldFBhZFNuaXBwZXQgPSAob3V0cHV0LCBpbnB1dFJhbmssIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVzLm1vZGUpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gZ2V0UGFkQ29uc3RhbnQob3V0cHV0LCBpbnB1dFJhbmssIGF0dHJpYnV0ZXMucGFkcy5sZW5ndGgpO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiBnZXRQYWRSZWZsZWN0KG91dHB1dCwgaW5wdXRSYW5rLCBhdHRyaWJ1dGVzLnBhZHMubGVuZ3RoKTtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0UGFkRWRnZShvdXRwdXQsIGlucHV0UmFuaywgYXR0cmlidXRlcy5wYWRzLmxlbmd0aCk7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIGdldFBhZFdyYXAob3V0cHV0LCBpbnB1dFJhbmssIGF0dHJpYnV0ZXMucGFkcy5sZW5ndGgpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG1vZGVcIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjcmVhdGVQYWRQcm9ncmFtSW5mbyA9IChpbnB1dHMsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBTaGFwZVV0aWwucGFkU2hhcGUoaW5wdXRzWzBdLmRpbXMuc2xpY2UoKSwgYXR0cmlidXRlcy5wYWRzKTtcbiAgICAgICAgY29uc3QgaW5wdXREaW1zID0gaW5wdXRzWzBdLmRpbXM7XG4gICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IFt7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0U2l6ZSB9LCB7IHR5cGU6IDYgLyogaW50MzIgKi8sIGRhdGE6IGF0dHJpYnV0ZXMucGFkcyB9XTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMubW9kZSA9PT0gMCkge1xuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKHsgdHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlLCBkYXRhOiBhdHRyaWJ1dGVzLnZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBvdXRwdXRTaGFwZSkpO1xuICAgICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llcyA9IFtcInJhbmtcIl07XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcIm91dHB1dFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLmxlbmd0aCk7XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKFwieFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0RGltcy5sZW5ndGgpO1xuICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXQudHlwZS52YWx1ZTtcbiAgICAgICAgICBjb25zdCBwYWRTbmlwcGV0ID0gZ2V0UGFkU25pcHBldChvdXRwdXQsIGlucHV0RGltcy5sZW5ndGgsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgIGNvbnN0IHVuaWZvcm1zID0gW3sgbmFtZTogXCJvdXRwdXRfc2l6ZVwiLCB0eXBlOiBcInUzMlwiIH0sIHsgbmFtZTogXCJwYWRzXCIsIHR5cGU6IFwiaTMyXCIsIGxlbmd0aDogYXR0cmlidXRlcy5wYWRzLmxlbmd0aCB9XTtcbiAgICAgICAgICBpZiAoYXR0cmlidXRlcy5tb2RlID09PSAwKSB7XG4gICAgICAgICAgICB1bmlmb3Jtcy5wdXNoKHsgbmFtZTogXCJjb25zdGFudF92YWx1ZVwiLCB0eXBlOiBkYXRhVHlwZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoaW5wdXQsIG91dHB1dCl9XG4gICAgICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRfc2l6ZVwiKX1cblxuICAgICAgICAgICAgbGV0IGluZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoXCJnbG9iYWxfaWR4XCIpfTtcblxuICAgICAgICAgICAgdmFyIHZhbHVlID0gJHtkYXRhVHlwZX0oMCk7XG4gICAgICAgICAgICAke3BhZFNuaXBwZXR9XG4gICAgICAgICAgICBvdXRwdXRbZ2xvYmFsX2lkeF0gPSB2YWx1ZTtcbiAgICAgICAgfWA7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJQYWRcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBoaW50OiBgJHthdHRyaWJ1dGVzLm1vZGV9YCwgaW5wdXREZXBlbmRlbmNpZXMgfSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogW3sgZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGUgfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpIC8gNjRcbiAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICkgfSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIGNyZWF0ZVBhZEF0dHJpYnV0ZXNGcm9tSW5wdXRzID0gKGlucHV0cywgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBpZiAoaW5wdXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBjb25zdCBiaWdJbnQ2NFBhZHMgPSBpbnB1dHNbMV0uZ2V0QmlnSW50NjRBcnJheSgpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRzLmxlbmd0aCA+PSAzICYmIGlucHV0c1syXS5kYXRhID8gaW5wdXRzWzJdLmdldEZsb2F0MzJBcnJheSgpWzBdIDogMDtcbiAgICAgICAgICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dHNbMF0uZGltcy5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgdXBkYXRlUGFkcyA9IG5ldyBJbnQzMkFycmF5KDIgKiBpbnB1dFJhbmspLmZpbGwoMCk7XG4gICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPj0gNCkge1xuICAgICAgICAgICAgY29uc3QgYXhlcyA9IGlucHV0c1szXS5nZXRCaWdJbnQ2NEFycmF5KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdXBkYXRlUGFkc1tOdW1iZXIoYXhlc1tpXSldID0gTnVtYmVyKGJpZ0ludDY0UGFkc1tpXSk7XG4gICAgICAgICAgICAgIHVwZGF0ZVBhZHNbTnVtYmVyKGF4ZXNbaV0pICsgaW5wdXRSYW5rXSA9IE51bWJlcihiaWdJbnQ2NFBhZHNbaSArIGF4ZXMubGVuZ3RoXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJpZ0ludDY0UGFkcy5mb3JFYWNoKCh2LCBpKSA9PiB1cGRhdGVQYWRzW051bWJlcihpKV0gPSBOdW1iZXIodikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwYWRzID0gW107XG4gICAgICAgICAgdXBkYXRlUGFkcy5mb3JFYWNoKCh2KSA9PiBwYWRzLnB1c2godikpO1xuICAgICAgICAgIHJldHVybiB7IG1vZGU6IGF0dHJpYnV0ZXMubW9kZSwgdmFsdWUsIHBhZHMgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHBhZCA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzMTkoY29udGV4dC5pbnB1dHMpO1xuICAgICAgICBjb25zdCB1cGRhdGVkQXR0cmlidXRlcyA9IGNyZWF0ZVBhZEF0dHJpYnV0ZXNGcm9tSW5wdXRzKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVBhZFByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCB1cGRhdGVkQXR0cmlidXRlcyksIHsgaW5wdXRzOiBbMF0gfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9wb29sLnRzXG4gIHZhciB2YWxpZGF0ZUlucHV0czIwLCBnZXRBZGp1c3RlZFBvb2xBdHRyaWJ1dGVzQW5kT3V0cHV0U2hhcGUsIGdldFVuaWZvcm1BbmRQYWRJbmZvLCBnZW5lcmF0ZVBvb2xpbmdDb2RlLCBjcmVhdGVTaGFkZXJLZXlGcm9tQXR0cmlidXRlcywgY3JlYXRlQXZlcmFnZVBvb2xTaGFkZXJLZXlGcm9tQXR0cmlidXRlcywgY3JlYXRlTWF4UG9vbFNoYWRlcktleUZyb21BdHRyaWJ1dGVzLCBwYXJzZVBvb2xDb21tb25BdHRyaWJ1dGVzLCBjcmVhdGVBdmVyYWdlUG9vbFByb2dyYW1JbmZvLCBwYXJzZUF2ZXJhZ2VQb29sQXR0cmlidXRlcywgYXZlcmFnZVBvb2wsIGdsb2JhbFBvb2xBdHRyaWJ1dGVzLCBwYXJzZUdsb2JhbEF2ZXJhZ2VQb29sQXR0cmlidXRlcywgZ2xvYmFsQXZlcmFnZVBvb2wsIGNyZWF0ZU1heFBvb2xQcm9ncmFtSW5mbywgbWF4UG9vbCwgcGFyc2VNYXhQb29sQXR0cmlidXRlcywgcGFyc2VHbG9iYWxNYXhQb29sQXR0cmlidXRlcywgZ2xvYmFsTWF4UG9vbDtcbiAgdmFyIGluaXRfcG9vbCA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvcG9vbC50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X2VzbSgpO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgdmFsaWRhdGVJbnB1dHMyMCA9IChpbnB1dHMpID0+IHtcbiAgICAgICAgaWYgKGVudjIud2ViZ3B1LnZhbGlkYXRlSW5wdXRDb250ZW50ICYmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDEpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9vbCBvcHMgcmVxdWlyZXMgMSBpbnB1dC5cIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBnZXRBZGp1c3RlZFBvb2xBdHRyaWJ1dGVzQW5kT3V0cHV0U2hhcGUgPSAoaW5wdXQsIGF0dHJpYnV0ZXMsIGlzR2xvYmFsT3BlcmF0b3IpID0+IHtcbiAgICAgICAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gXCJOSFdDXCI7XG4gICAgICAgIGNvbnN0IGlucHV0U2hhcGVBc0NoYW5uZWxGaXJzdCA9IGlucHV0LmRpbXMuc2xpY2UoKTtcbiAgICAgICAgaWYgKGlzQ2hhbm5lbHNMYXN0KSB7XG4gICAgICAgICAgaW5wdXRTaGFwZUFzQ2hhbm5lbEZpcnN0LnNwbGljZSgxLCAwLCBpbnB1dFNoYXBlQXNDaGFubmVsRmlyc3QucG9wKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc0RpbGF0aW9ucyA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGF0dHJpYnV0ZXMsIFwiZGlsYXRpb25zXCIpO1xuICAgICAgICBjb25zdCBrZXJuZWxTaGFwZSA9IGF0dHJpYnV0ZXMua2VybmVsU2hhcGUuc2xpY2UoKTtcbiAgICAgICAgY29uc3Qgc3RyaWRlcyA9IGF0dHJpYnV0ZXMuc3RyaWRlcy5zbGljZSgpO1xuICAgICAgICBjb25zdCBkaWxhdGlvbnMgPSBoYXNEaWxhdGlvbnMgPyBhdHRyaWJ1dGVzLmRpbGF0aW9ucy5zbGljZSgpIDogW107XG4gICAgICAgIGNvbnN0IHBhZHMgPSBhdHRyaWJ1dGVzLnBhZHMuc2xpY2UoKTtcbiAgICAgICAgUG9vbENvbnZVdGlsLmFkanVzdFBvb2xBdHRyaWJ1dGVzKGlzR2xvYmFsT3BlcmF0b3IsIGlucHV0U2hhcGVBc0NoYW5uZWxGaXJzdCwga2VybmVsU2hhcGUsIHN0cmlkZXMsIGRpbGF0aW9ucywgcGFkcyk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlQXNDaGFubmVsRmlyc3QgPSBQb29sQ29udlV0aWwuY29tcHV0ZVBvb2xPdXRwdXRTaGFwZShcbiAgICAgICAgICBpc0dsb2JhbE9wZXJhdG9yLFxuICAgICAgICAgIGlucHV0U2hhcGVBc0NoYW5uZWxGaXJzdCxcbiAgICAgICAgICBzdHJpZGVzLFxuICAgICAgICAgIGRpbGF0aW9ucyxcbiAgICAgICAgICBrZXJuZWxTaGFwZSxcbiAgICAgICAgICBwYWRzLFxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b1BhZFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdBdHRyaWJ1dGVzID0gT2JqZWN0LmFzc2lnbih7fSwgYXR0cmlidXRlcyk7XG4gICAgICAgIGlmIChoYXNEaWxhdGlvbnMpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld0F0dHJpYnV0ZXMsIHsga2VybmVsU2hhcGUsIHN0cmlkZXMsIHBhZHMsIGRpbGF0aW9ucywgY2FjaGVLZXk6IGF0dHJpYnV0ZXMuY2FjaGVLZXkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdBdHRyaWJ1dGVzLCB7IGtlcm5lbFNoYXBlLCBzdHJpZGVzLCBwYWRzLCBjYWNoZUtleTogYXR0cmlidXRlcy5jYWNoZUtleSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXRTaGFwZUFzQ2hhbm5lbExhc3QgPSBvdXRwdXRTaGFwZUFzQ2hhbm5lbEZpcnN0LnNsaWNlKCk7XG4gICAgICAgIG91dHB1dFNoYXBlQXNDaGFubmVsTGFzdC5wdXNoKG91dHB1dFNoYXBlQXNDaGFubmVsTGFzdC5zcGxpY2UoMSwgMSlbMF0pO1xuICAgICAgICByZXR1cm4gW25ld0F0dHJpYnV0ZXMsIGlzQ2hhbm5lbHNMYXN0ID8gb3V0cHV0U2hhcGVBc0NoYW5uZWxMYXN0IDogb3V0cHV0U2hhcGVBc0NoYW5uZWxGaXJzdF07XG4gICAgICB9O1xuICAgICAgZ2V0VW5pZm9ybUFuZFBhZEluZm8gPSAob3V0cHV0U2hhcGUsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBhdHRyaWJ1dGVzLmZvcm1hdCA9PT0gXCJOSFdDXCI7XG4gICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICAgIGNvbnN0IGtlcm5lbFNpemUgPSBTaGFwZVV0aWwuc2l6ZShhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlKTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0gW3sgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBvdXRwdXRTaXplIH0sIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBrZXJuZWxTaXplIH1dO1xuICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFt7IG5hbWU6IFwib3V0cHV0U2l6ZVwiLCB0eXBlOiBcInUzMlwiIH0sIHsgbmFtZTogXCJrZXJuZWxTaXplXCIsIHR5cGU6IFwidTMyXCIgfV07XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgY29uc3Qga3cgPSBhdHRyaWJ1dGVzLmtlcm5lbFNoYXBlW2F0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoIC0gMV07XG4gICAgICAgICAgY29uc3Qgc3cgPSBhdHRyaWJ1dGVzLnN0cmlkZXNbYXR0cmlidXRlcy5zdHJpZGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGNvbnN0IHB3U3RhcnQgPSBhdHRyaWJ1dGVzLnBhZHNbYXR0cmlidXRlcy5wYWRzLmxlbmd0aCAvIDIgLSAxXTtcbiAgICAgICAgICBjb25zdCBwd0VuZCA9IGF0dHJpYnV0ZXMucGFkc1thdHRyaWJ1dGVzLnBhZHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgY29uc3QgcHdTdGFydEVuZE5vdFplcm8gPSAhIShwd1N0YXJ0ICsgcHdFbmQpO1xuICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKFxuICAgICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IGt3IH0sXG4gICAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogc3cgfSxcbiAgICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBwd1N0YXJ0IH0sXG4gICAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogcHdFbmQgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgdW5pZm9ybXMucHVzaChcbiAgICAgICAgICAgIHsgbmFtZTogXCJrd1wiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwic3dcIiwgdHlwZTogXCJ1MzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInB3U3RhcnRcIiwgdHlwZTogXCJ1MzJcIiB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInB3RW5kXCIsIHR5cGU6IFwidTMyXCIgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgbGV0IHBoU3RhcnRFbmROb3RaZXJvID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBraCA9IGF0dHJpYnV0ZXMua2VybmVsU2hhcGVbYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggLSAyXTtcbiAgICAgICAgICAgIGNvbnN0IHNoID0gYXR0cmlidXRlcy5zdHJpZGVzW2F0dHJpYnV0ZXMuc3RyaWRlcy5sZW5ndGggLSAyXTtcbiAgICAgICAgICAgIGNvbnN0IHBoU3RhcnQgPSBhdHRyaWJ1dGVzLnBhZHNbYXR0cmlidXRlcy5wYWRzLmxlbmd0aCAvIDIgLSAyXTtcbiAgICAgICAgICAgIGNvbnN0IHBoRW5kID0gYXR0cmlidXRlcy5wYWRzW2F0dHJpYnV0ZXMucGFkcy5sZW5ndGggLSAyXTtcbiAgICAgICAgICAgIHBoU3RhcnRFbmROb3RaZXJvID0gISEocGhTdGFydCArIHBoRW5kKTtcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5wdXNoKFxuICAgICAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YToga2ggfSxcbiAgICAgICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IHNoIH0sXG4gICAgICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBwaFN0YXJ0IH0sXG4gICAgICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBwaEVuZCB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdW5pZm9ybXMucHVzaChcbiAgICAgICAgICAgICAgeyBuYW1lOiBcImtoXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiBcInNoXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiBcInBoU3RhcnRcIiwgdHlwZTogXCJ1MzJcIiB9LFxuICAgICAgICAgICAgICB7IG5hbWU6IFwicGhFbmRcIiwgdHlwZTogXCJ1MzJcIiB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW3Byb2dyYW1Vbmlmb3JtcywgdW5pZm9ybXMsIHRydWUsIHB3U3RhcnRFbmROb3RaZXJvLCBwaFN0YXJ0RW5kTm90WmVyb107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzQ2hhbm5lbHNMYXN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb29saW5nIHdpdGgga2VybmVsU2hhcGUubGVuZ3RoID4gMiBpcyBub3Qgc3VwcG9ydGVkIGZvciBOSFdDIGZvcm1hdC5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGtlcm5lbFN0cmlkZXMgPSBTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoYXR0cmlidXRlcy5rZXJuZWxTaGFwZSk7XG4gICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goXG4gICAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YToga2VybmVsU3RyaWRlcyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IGF0dHJpYnV0ZXMucGFkcyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IGF0dHJpYnV0ZXMuc3RyaWRlcyB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICB1bmlmb3Jtcy5wdXNoKFxuICAgICAgICAgICAgeyBuYW1lOiBcImtlcm5lbFN0cmlkZXNcIiwgdHlwZTogXCJ1MzJcIiwgbGVuZ3RoOiBrZXJuZWxTdHJpZGVzLmxlbmd0aCB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInBhZHNcIiwgdHlwZTogXCJ1MzJcIiwgbGVuZ3RoOiBhdHRyaWJ1dGVzLnBhZHMubGVuZ3RoIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwic3RyaWRlc1wiLCB0eXBlOiBcInUzMlwiLCBsZW5ndGg6IGF0dHJpYnV0ZXMuc3RyaWRlcy5sZW5ndGggfVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgaGFzUGFkcyA9IGF0dHJpYnV0ZXMucGFkcy5yZWR1Y2UoKHN1bSwgY3VyKSA9PiBzdW0gKyBjdXIpO1xuICAgICAgICAgIHJldHVybiBbcHJvZ3JhbVVuaWZvcm1zLCB1bmlmb3JtcywgISFoYXNQYWRzLCBmYWxzZSwgZmFsc2VdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZ2VuZXJhdGVQb29saW5nQ29kZSA9IChzaGFkZXJIZWxwZXIsIHgsIHJhbmssIG91dHB1dFNoYXBlUmFuaywgYXR0cmlidXRlcywgb3AxLCBvcDIsIHN0YXJ0LCB1bmlmb3JtcywgaGFzUGFkcywgcHdTdGFydEVuZE5vdFplcm8sIHBoU3RhcnRFbmROb3RaZXJvKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gYXR0cmlidXRlcy5mb3JtYXQgPT09IFwiTkhXQ1wiO1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHgudHlwZS52YWx1ZTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRcIiwgeC50eXBlLnRlbnNvciwgb3V0cHV0U2hhcGVSYW5rKTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICBsZXQgY29kZVcgPSBcIlwiO1xuICAgICAgICAgIGxldCBjb2RlSCA9IFwiXCI7XG4gICAgICAgICAgbGV0IGNvZGVIRW5kID0gXCJcIjtcbiAgICAgICAgICBjb25zdCBkaW1JZHhXID0gcmFuayAtIChpc0NoYW5uZWxzTGFzdCA/IDIgOiAxKTtcbiAgICAgICAgICBpZiAocHdTdGFydEVuZE5vdFplcm8pIHtcbiAgICAgICAgICAgIGNvZGVXID0gYFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGk6IHUzMiA9IDB1OyBpIDwgdW5pZm9ybXMua3c7IGkrKykge1xuICAgICAgICAgICAgICAgICAgeEluZGljZXNbJHtkaW1JZHhXfV0gPSBpbmRpY2VzWyR7ZGltSWR4V31dICogdW5pZm9ybXMuc3cgLSB1bmlmb3Jtcy5wd1N0YXJ0ICsgaTtcbiAgICAgICAgICAgICAgICAgIGlmICh4SW5kaWNlc1ske2RpbUlkeFd9XSA8IDAgfHwgeEluZGljZXNbJHtkaW1JZHhXfV1cbiAgICAgICAgICAgICAgICAgICAgICA+PSB1bmlmb3Jtcy54X3NoYXBlWyR7ZGltSWR4V31dKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZCsrO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGxldCB4X3ZhbCA9IHhbJHt4LmluZGljZXNUb09mZnNldChcInhJbmRpY2VzXCIpfV07XG4gICAgICAgICAgICAgICAgICAke29wMX1cbiAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29kZVcgPSBgXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaTogdTMyID0gMHU7IGkgPCB1bmlmb3Jtcy5rdzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICB4SW5kaWNlc1ske2RpbUlkeFd9XSA9IGluZGljZXNbJHtkaW1JZHhXfV0gKiB1bmlmb3Jtcy5zdyAtIHVuaWZvcm1zLnB3U3RhcnQgKyBpO1xuICAgICAgICAgICAgICAgICAgbGV0IHhfdmFsID0geFske3guaW5kaWNlc1RvT2Zmc2V0KFwieEluZGljZXNcIil9XTtcbiAgICAgICAgICAgICAgICAgICR7b3AxfVxuICAgICAgICAgICAgICAgIH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpbUlkeEggPSByYW5rIC0gKGlzQ2hhbm5lbHNMYXN0ID8gMyA6IDIpO1xuICAgICAgICAgICAgaWYgKHBoU3RhcnRFbmROb3RaZXJvKSB7XG4gICAgICAgICAgICAgIGNvZGVIID0gYFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGo6IHUzMiA9IDB1OyBqIDwgdW5pZm9ybXMua2g7IGorKykge1xuICAgICAgICAgICAgICAgICAgeEluZGljZXNbJHtkaW1JZHhIfV0gPSBpbmRpY2VzWyR7ZGltSWR4SH1dICogdW5pZm9ybXMuc2ggLSB1bmlmb3Jtcy5waFN0YXJ0ICsgajtcbiAgICAgICAgICAgICAgICAgIGlmICh4SW5kaWNlc1ske2RpbUlkeEh9XSA8IDAgfHwgeEluZGljZXNbJHtkaW1JZHhIfV0gPj0gdW5pZm9ybXMueF9zaGFwZVske2RpbUlkeEh9XSkge1xuICAgICAgICAgICAgICAgICAgICBwYWQgKz0gaTMyKHVuaWZvcm1zLmt3KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb2RlSCA9IGBcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqOiB1MzIgPSAwdTsgaiA8IHVuaWZvcm1zLmtoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgIHhJbmRpY2VzWyR7ZGltSWR4SH1dID0gaW5kaWNlc1ske2RpbUlkeEh9XSAqIHVuaWZvcm1zLnNoIC0gdW5pZm9ybXMucGhTdGFydCArIGo7XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvZGVIRW5kID0gYFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwb29saW5nQ29kZSA9IGBcbiAgICAgICAgICAgICR7c2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXModW5pZm9ybXMpLmRlY2xhcmVWYXJpYWJsZXMoeCwgb3V0cHV0KX1cblxuICAgICAgICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRTaXplXCIpfVxuXG4gICAgICAgICAgICAgIGxldCBpbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKFwiZ2xvYmFsX2lkeFwiKX07XG4gICAgICAgICAgICAgIHZhciB4SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcyhcImdsb2JhbF9pZHhcIil9O1xuXG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICR7ZGF0YVR5cGV9KCR7c3RhcnR9KTtcbiAgICAgICAgICAgICAgdmFyIHBhZCA9IDA7XG4gICAgICAgICAgICAgICR7Y29kZUh9XG4gICAgICAgICAgICAgICR7Y29kZVd9XG4gICAgICAgICAgICAgICR7Y29kZUhFbmR9XG4gICAgICAgICAgICAgICR7b3AyfVxuXG4gICAgICAgICAgICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfWA7XG4gICAgICAgICAgcmV0dXJuIHBvb2xpbmdDb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpc0NoYW5uZWxzTGFzdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9vbGluZyB3aXRoIGtlcm5lbFNoYXBlLmxlbmd0aCA+IDIgaXMgbm90IHN1cHBvcnRlZCBmb3IgTkhXQyBmb3JtYXQuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdHJpZGVzUmFuayA9IGF0dHJpYnV0ZXMua2VybmVsU2hhcGUubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IHBhZHNSYW5rID0gYXR0cmlidXRlcy5wYWRzLmxlbmd0aDtcbiAgICAgICAgICBsZXQgcGFkQ29kZSA9IFwiXCI7XG4gICAgICAgICAgaWYgKGhhc1BhZHMpIHtcbiAgICAgICAgICAgIHBhZENvZGUgPSBgXG4gICAgICAgICAgICAgICAgaWYgKHhJbmRpY2VzW2pdID49IHVuaWZvcm1zLnhfc2hhcGVbal0pIHtcbiAgICAgICAgICAgICAgICAgIHBhZCsrO1xuICAgICAgICAgICAgICAgICAgaXNQYWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghaXNQYWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgeF92YWwgPSB4WyR7eC5pbmRpY2VzVG9PZmZzZXQoXCJ4SW5kaWNlc1wiKX1dO1xuICAgICAgICAgICAgICAgICR7b3AxfVxuICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFkQ29kZSA9IGBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgeF92YWwgPSB4WyR7eC5pbmRpY2VzVG9PZmZzZXQoXCJ4SW5kaWNlc1wiKX1dO1xuICAgICAgICAgICAgICAke29wMX1cbiAgICAgICAgICAgIGA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBvb2xpbmdDb2RlID0gYFxuICAgICAgICAgICAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyh4LCBvdXRwdXQpfVxuXG4gICAgICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhcInVuaWZvcm1zLm91dHB1dFNpemVcIil9XG4gICAgICAgICAgICAgIGxldCBpbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKFwiZ2xvYmFsX2lkeFwiKX07XG4gICAgICAgICAgICAgIHZhciB4SW5kaWNlcyA9ICR7b3V0cHV0Lm9mZnNldFRvSW5kaWNlcyhcImdsb2JhbF9pZHhcIil9O1xuXG4gICAgICAgICAgICAgIHZhciBvZmZzZXRzOiBhcnJheTx1MzIsICR7c3RyaWRlc1Jhbmt9PjtcblxuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAke2RhdGFUeXBlfSgke3N0YXJ0fSk7XG4gICAgICAgICAgICAgIHZhciBwYWQgPSAwO1xuICAgICAgICAgICAgICB2YXIgaXNQYWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICBmb3IgKHZhciBpOiB1MzIgPSAwdTsgaSA8IHVuaWZvcm1zLmtlcm5lbFNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwdTsgaiA8ICR7c3RyaWRlc1JhbmsgLSAxfXU7IGorKykge1xuICAgICAgICAgICAgICAgICAgb2Zmc2V0c1tqXSA9IG9mZnNldCAvICR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMua2VybmVsU3RyaWRlc1wiLCBcImpcIiwgc3RyaWRlc1JhbmspfTtcbiAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBvZmZzZXRzW2pdICogJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy5rZXJuZWxTdHJpZGVzXCIsIFwialwiLCBzdHJpZGVzUmFuayl9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvZmZzZXRzWyR7c3RyaWRlc1JhbmsgLSAxfV0gPSBvZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICBpc1BhZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAke3JhbmsgLSBzdHJpZGVzUmFua311OyBqIDwgJHtyYW5rfXU7IGorKykge1xuICAgICAgICAgICAgICAgICAgeEluZGljZXNbal0gPSBpbmRpY2VzW2pdICogJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy5zdHJpZGVzXCIsIGBqIC0gJHtyYW5rIC0gc3RyaWRlc1Jhbmt9dWAsIHN0cmlkZXNSYW5rKX1cbiAgICAgICAgICAgICAgICAgICAgKyBvZmZzZXRzW2ogLSAke3JhbmsgLSBzdHJpZGVzUmFua311XSAtICR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMucGFkc1wiLCBcImogLSAydVwiLCBwYWRzUmFuayl9O1xuICAgICAgICAgICAgICAgICAgJHtwYWRDb2RlfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICR7b3AyfVxuXG4gICAgICAgICAgICAgIG91dHB1dFtnbG9iYWxfaWR4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfWA7XG4gICAgICAgICAgcmV0dXJuIHBvb2xpbmdDb2RlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY3JlYXRlU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlcykgPT4gYCR7YXR0cmlidXRlcy5mb3JtYXR9OyR7YXR0cmlidXRlcy5jZWlsTW9kZX07JHthdHRyaWJ1dGVzLmF1dG9QYWR9OyR7YXR0cmlidXRlcy5rZXJuZWxTaGFwZS5sZW5ndGh9YDtcbiAgICAgIGNyZWF0ZUF2ZXJhZ2VQb29sU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlcykgPT4gYCR7Y3JlYXRlU2hhZGVyS2V5RnJvbUF0dHJpYnV0ZXMoYXR0cmlidXRlcyl9OyR7YXR0cmlidXRlcy5jb3VudEluY2x1ZGVQYWR9YDtcbiAgICAgIGNyZWF0ZU1heFBvb2xTaGFkZXJLZXlGcm9tQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiBgJHtjcmVhdGVTaGFkZXJLZXlGcm9tQXR0cmlidXRlcyhhdHRyaWJ1dGVzKX07JHthdHRyaWJ1dGVzLnN0b3JhZ2VPcmRlcn07JHthdHRyaWJ1dGVzLmRpbGF0aW9uc31gO1xuICAgICAgcGFyc2VQb29sQ29tbW9uQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiAoe1xuICAgICAgICBmb3JtYXQ6IGF0dHJpYnV0ZXMuZm9ybWF0LFxuICAgICAgICBhdXRvUGFkOiBbXCJOT1RTRVRcIiwgXCJWQUxJRFwiLCBcIlNBTUVfVVBQRVJcIiwgXCJTQU1FX0xPV0VSXCJdW2F0dHJpYnV0ZXMuYXV0b19wYWRdLFxuICAgICAgICBjZWlsTW9kZTogYXR0cmlidXRlcy5jZWlsX21vZGUsXG4gICAgICAgIGtlcm5lbFNoYXBlOiBhdHRyaWJ1dGVzLmtlcm5lbF9zaGFwZSxcbiAgICAgICAgc3RyaWRlczogYXR0cmlidXRlcy5zdHJpZGVzLFxuICAgICAgICBwYWRzOiBhdHRyaWJ1dGVzLnBhZHNcbiAgICAgIH0pO1xuICAgICAgY3JlYXRlQXZlcmFnZVBvb2xQcm9ncmFtSW5mbyA9IChuYW1lLCBpbnB1dCwgaXNHbG9iYWxPcGVyYXRvciwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBbYWRqdXN0ZWRBdHRyaWJ1dGVzLCBvdXRwdXRTaGFwZV0gPSBnZXRBZGp1c3RlZFBvb2xBdHRyaWJ1dGVzQW5kT3V0cHV0U2hhcGUoaW5wdXQsIGF0dHJpYnV0ZXMsIGlzR2xvYmFsT3BlcmF0b3IpO1xuICAgICAgICBjb25zdCB4ID0gaW5wdXRWYXJpYWJsZShcInhcIiwgaW5wdXQuZGF0YVR5cGUsIGlucHV0LmRpbXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB4LnR5cGUudmFsdWU7XG4gICAgICAgIGNvbnN0IG9wMSA9IFwidmFsdWUgKz0geF92YWw7XCI7XG4gICAgICAgIGxldCBvcDIgPSBcIlwiO1xuICAgICAgICBpZiAoYWRqdXN0ZWRBdHRyaWJ1dGVzLmNvdW50SW5jbHVkZVBhZCkge1xuICAgICAgICAgIG9wMiArPSBgdmFsdWUgLz0gJHtkYXRhVHlwZX0odW5pZm9ybXMua2VybmVsU2l6ZSk7YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcDIgKz0gYHZhbHVlIC89ICR7ZGF0YVR5cGV9KGkzMih1bmlmb3Jtcy5rZXJuZWxTaXplKSAtIHBhZCk7YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbcHJvZ3JhbVVuaWZvcm1zLCB1bmlmb3JtcywgaGFzUGFkcywgcHdTdGFydEVuZE5vdFplcm8sIHBoU3RhcnRFbmROb3RaZXJvXSA9IGdldFVuaWZvcm1BbmRQYWRJbmZvKG91dHB1dFNoYXBlLCBhZGp1c3RlZEF0dHJpYnV0ZXMpO1xuICAgICAgICBwcm9ncmFtVW5pZm9ybXMucHVzaCguLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dC5kaW1zLCBvdXRwdXRTaGFwZSkpO1xuICAgICAgICBjb25zdCBpbnB1dERlcGVuZGVuY2llcyA9IFtcInJhbmtcIl07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBoaW50OiBgJHthdHRyaWJ1dGVzLmNhY2hlS2V5fTske2hhc1BhZHN9OyR7cHdTdGFydEVuZE5vdFplcm99OyR7cGhTdGFydEVuZE5vdFplcm99YCwgaW5wdXREZXBlbmRlbmNpZXMgfSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogW3sgZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dC5kYXRhVHlwZSB9XSxcbiAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHsgeDogTWF0aC5jZWlsKFxuICAgICAgICAgICAgICBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSkgLyA2NFxuICAgICAgICAgICAgICAvKiB3b3JrZ3JvdXAgc2l6ZSAqL1xuICAgICAgICAgICAgKSB9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlOiAoc2hhZGVySGVscGVyKSA9PiBnZW5lcmF0ZVBvb2xpbmdDb2RlKFxuICAgICAgICAgICAgc2hhZGVySGVscGVyLFxuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIGlucHV0LmRpbXMubGVuZ3RoLFxuICAgICAgICAgICAgb3V0cHV0U2hhcGUubGVuZ3RoLFxuICAgICAgICAgICAgYWRqdXN0ZWRBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgb3AxLFxuICAgICAgICAgICAgb3AyLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHVuaWZvcm1zLFxuICAgICAgICAgICAgaGFzUGFkcyxcbiAgICAgICAgICAgIHB3U3RhcnRFbmROb3RaZXJvLFxuICAgICAgICAgICAgcGhTdGFydEVuZE5vdFplcm9cbiAgICAgICAgICApXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgcGFyc2VBdmVyYWdlUG9vbEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBjb3VudEluY2x1ZGVQYWQgPSBhdHRyaWJ1dGVzLmNvdW50X2luY2x1ZGVfcGFkID09PSAwID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICBjb25zdCBhdHRyID0gcGFyc2VQb29sQ29tbW9uQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKGF0dHIuY2VpbE1vZGUgIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2luZyBjZWlsKCkgaW4gc2hhcGUgY29tcHV0YXRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIEF2ZXJhZ2VQb29sXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF2ZXJhZ2VQb29sQXR0cmlidXRlcyA9IHsgY291bnRJbmNsdWRlUGFkLCAuLi5hdHRyLCBjYWNoZUtleTogXCJcIiB9O1xuICAgICAgICByZXR1cm4geyAuLi5hdmVyYWdlUG9vbEF0dHJpYnV0ZXMsIGNhY2hlS2V5OiBjcmVhdGVBdmVyYWdlUG9vbFNoYWRlcktleUZyb21BdHRyaWJ1dGVzKGF2ZXJhZ2VQb29sQXR0cmlidXRlcykgfTtcbiAgICAgIH07XG4gICAgICBhdmVyYWdlUG9vbCA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzMjAoY29udGV4dC5pbnB1dHMpO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQXZlcmFnZVBvb2xQcm9ncmFtSW5mbyhcIkF2ZXJhZ2VQb29sXCIsIGNvbnRleHQuaW5wdXRzWzBdLCBmYWxzZSwgYXR0cmlidXRlcykpO1xuICAgICAgfTtcbiAgICAgIGdsb2JhbFBvb2xBdHRyaWJ1dGVzID0ge1xuICAgICAgICBhdXRvUGFkOiBcIlwiLFxuICAgICAgICBjZWlsTW9kZTogMCxcbiAgICAgICAgY291bnRJbmNsdWRlUGFkOiBmYWxzZSxcbiAgICAgICAga2VybmVsU2hhcGU6IFtdLFxuICAgICAgICBzdHJpZGVzOiBbXSxcbiAgICAgICAgcGFkczogW10sXG4gICAgICAgIHN0b3JhZ2VPcmRlcjogMCxcbiAgICAgICAgZGlsYXRpb25zOiBbXVxuICAgICAgfTtcbiAgICAgIHBhcnNlR2xvYmFsQXZlcmFnZVBvb2xBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gYXR0cmlidXRlcy5mb3JtYXQ7XG4gICAgICAgIHJldHVybiB7IGZvcm1hdCwgLi4uZ2xvYmFsUG9vbEF0dHJpYnV0ZXMsIGNhY2hlS2V5OiBmb3JtYXQgfTtcbiAgICAgIH07XG4gICAgICBnbG9iYWxBdmVyYWdlUG9vbCA9IChjb250ZXh0LCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlSW5wdXRzMjAoY29udGV4dC5pbnB1dHMpO1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlQXZlcmFnZVBvb2xQcm9ncmFtSW5mbyhcIkdsb2JhbEF2ZXJhZ2VQb29sXCIsIGNvbnRleHQuaW5wdXRzWzBdLCB0cnVlLCBhdHRyaWJ1dGVzKSk7XG4gICAgICB9O1xuICAgICAgY3JlYXRlTWF4UG9vbFByb2dyYW1JbmZvID0gKG5hbWUsIGlucHV0LCBpc0dsb2JhbE9wZXJhdG9yLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IFthZGp1c3RlZEF0dHJpYnV0ZXMsIG91dHB1dFNoYXBlXSA9IGdldEFkanVzdGVkUG9vbEF0dHJpYnV0ZXNBbmRPdXRwdXRTaGFwZShpbnB1dCwgYXR0cmlidXRlcywgaXNHbG9iYWxPcGVyYXRvcik7XG4gICAgICAgIGNvbnN0IG9wMSA9IGBcbiAgICAgIHZhbHVlID0gbWF4KHhfdmFsLCB2YWx1ZSk7XG4gICAgYDtcbiAgICAgICAgY29uc3Qgb3AyID0gXCJcIjtcbiAgICAgICAgY29uc3QgeCA9IGlucHV0VmFyaWFibGUoXCJ4XCIsIGlucHV0LmRhdGFUeXBlLCBpbnB1dC5kaW1zLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGlucHV0RGVwZW5kZW5jaWVzID0gW1wicmFua1wiXTtcbiAgICAgICAgY29uc3QgW3Byb2dyYW1Vbmlmb3JtcywgdW5pZm9ybXMsIGhhc1BhZHMsIHB3U3RhcnRFbmROb3RaZXJvLCBwaFN0YXJ0RW5kTm90WmVyb10gPSBnZXRVbmlmb3JtQW5kUGFkSW5mbyhvdXRwdXRTaGFwZSwgYWRqdXN0ZWRBdHRyaWJ1dGVzKTtcbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXQuZGltcywgb3V0cHV0U2hhcGUpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGhpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9OyR7aGFzUGFkc307JHtwd1N0YXJ0RW5kTm90WmVyb307JHtwaFN0YXJ0RW5kTm90WmVyb31gLCBpbnB1dERlcGVuZGVuY2llcyB9LFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBvdXRwdXRTaGFwZSwgZGF0YVR5cGU6IGlucHV0LmRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgIFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKSAvIDY0XG4gICAgICAgICAgICAgIC8qIHdvcmtncm91cCBzaXplICovXG4gICAgICAgICAgICApIH0sXG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2U6IChzaGFkZXJIZWxwZXIpID0+IGdlbmVyYXRlUG9vbGluZ0NvZGUoXG4gICAgICAgICAgICBzaGFkZXJIZWxwZXIsXG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgaW5wdXQuZGltcy5sZW5ndGgsXG4gICAgICAgICAgICBvdXRwdXRTaGFwZS5sZW5ndGgsXG4gICAgICAgICAgICBhZGp1c3RlZEF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBvcDEsXG4gICAgICAgICAgICBvcDIsXG4gICAgICAgICAgICBpbnB1dC5kYXRhVHlwZSA9PT0gMTAgLyogZmxvYXQxNiAqLyA/IC02NTUwNCA6IC0xZTUsXG4gICAgICAgICAgICB1bmlmb3JtcyxcbiAgICAgICAgICAgIGhhc1BhZHMsXG4gICAgICAgICAgICBwd1N0YXJ0RW5kTm90WmVybyxcbiAgICAgICAgICAgIHBoU3RhcnRFbmROb3RaZXJvXG4gICAgICAgICAgKVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIG1heFBvb2wgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czIwKGNvbnRleHQuaW5wdXRzKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZU1heFBvb2xQcm9ncmFtSW5mbyhcIk1heFBvb2xcIiwgY29udGV4dC5pbnB1dHNbMF0sIGZhbHNlLCBhdHRyaWJ1dGVzKSk7XG4gICAgICB9O1xuICAgICAgcGFyc2VNYXhQb29sQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VPcmRlciA9IGF0dHJpYnV0ZXMuc3RvcmFnZV9vcmRlcjtcbiAgICAgICAgY29uc3QgZGlsYXRpb25zID0gYXR0cmlidXRlcy5kaWxhdGlvbnM7XG4gICAgICAgIGNvbnN0IGF0dHIgPSBwYXJzZVBvb2xDb21tb25BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpO1xuICAgICAgICBpZiAoc3RvcmFnZU9yZGVyICE9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY29sdW1uIG1ham9yIHN0b3JhZ2Ugb3JkZXIgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIE1heFBvb2xcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF0dHIuY2VpbE1vZGUgIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2luZyBjZWlsKCkgaW4gc2hhcGUgY29tcHV0YXRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIE1heFBvb2xcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4UG9vbEF0dHJpYnV0ZXMgPSB7IHN0b3JhZ2VPcmRlciwgZGlsYXRpb25zLCAuLi5hdHRyLCBjYWNoZUtleTogXCJcIiB9O1xuICAgICAgICByZXR1cm4geyAuLi5tYXhQb29sQXR0cmlidXRlcywgY2FjaGVLZXk6IGNyZWF0ZU1heFBvb2xTaGFkZXJLZXlGcm9tQXR0cmlidXRlcyhtYXhQb29sQXR0cmlidXRlcykgfTtcbiAgICAgIH07XG4gICAgICBwYXJzZUdsb2JhbE1heFBvb2xBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gYXR0cmlidXRlcy5mb3JtYXQ7XG4gICAgICAgIHJldHVybiB7IGZvcm1hdCwgLi4uZ2xvYmFsUG9vbEF0dHJpYnV0ZXMsIGNhY2hlS2V5OiBmb3JtYXQgfTtcbiAgICAgIH07XG4gICAgICBnbG9iYWxNYXhQb29sID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgdmFsaWRhdGVJbnB1dHMyMChjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVNYXhQb29sUHJvZ3JhbUluZm8oXCJHbG9iYWxNYXhQb29sXCIsIGNvbnRleHQuaW5wdXRzWzBdLCB0cnVlLCBhdHRyaWJ1dGVzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9yYW5nZS50c1xuICB2YXIgdmFsaWRhdGVJbnB1dHNDb250ZW50LCBjcmVhdGVSYW5nZVByb2dyYW1JbmZvLCByYW5nZTtcbiAgdmFyIGluaXRfcmFuZ2UgPSBfX2VzbSh7XG4gICAgXCJ3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3JhbmdlLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfZXNtKCk7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgdmFsaWRhdGVJbnB1dHNDb250ZW50ID0gKHN0YXJ0LCBsaW1pdCwgZGVsdGEpID0+IHtcbiAgICAgICAgY29uc3Qgc2FtZVN0YXJ0TGltaXQgPSBzdGFydCA9PT0gbGltaXQ7XG4gICAgICAgIGNvbnN0IGluY3JlYXNpbmdSYW5nZU5lZ2F0aXZlU3RlcCA9IHN0YXJ0IDwgbGltaXQgJiYgZGVsdGEgPCAwO1xuICAgICAgICBjb25zdCBkZWNyZWFzaW5nUmFuZ2VQb3NpdGl2ZVN0ZXAgPSBzdGFydCA+IGxpbWl0ICYmIGRlbHRhID4gMDtcbiAgICAgICAgaWYgKHNhbWVTdGFydExpbWl0IHx8IGluY3JlYXNpbmdSYW5nZU5lZ2F0aXZlU3RlcCB8fCBkZWNyZWFzaW5nUmFuZ2VQb3NpdGl2ZVN0ZXApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSYW5nZSB0aGVzZSBpbnB1dHMnIGNvbnRlbnRzIGFyZSBpbnZhbGlkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNyZWF0ZVJhbmdlUHJvZ3JhbUluZm8gPSAoc3RhcnQsIGxpbWl0LCBkZWx0YSwgZGF0YVR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgbnVtRWxlbWVudHMgPSBNYXRoLmFicyhNYXRoLmNlaWwoKGxpbWl0IC0gc3RhcnQpIC8gZGVsdGEpKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBbbnVtRWxlbWVudHNdO1xuICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gbnVtRWxlbWVudHM7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IFtcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0U2l6ZSB9LFxuICAgICAgICAgIHsgdHlwZTogZGF0YVR5cGUsIGRhdGE6IHN0YXJ0IH0sXG4gICAgICAgICAgeyB0eXBlOiBkYXRhVHlwZSwgZGF0YTogZGVsdGEgfSxcbiAgICAgICAgICAuLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhvdXRwdXRTaGFwZSlcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKFwib3V0cHV0XCIsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgpO1xuICAgICAgICAgIGNvbnN0IHdnc2xUeXBlID0gb3V0cHV0LnR5cGUudmFsdWU7XG4gICAgICAgICAgY29uc3QgdW5pZm9ybXMgPSBbXG4gICAgICAgICAgICB7IG5hbWU6IFwib3V0cHV0U2l6ZVwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwic3RhcnRcIiwgdHlwZTogd2dzbFR5cGUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJkZWx0YVwiLCB0eXBlOiB3Z3NsVHlwZSB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm1zKHVuaWZvcm1zKS5kZWNsYXJlVmFyaWFibGVzKG91dHB1dCl9XG4gICAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMub3V0cHV0U2l6ZVwiKX1cbiAgICAgICAgb3V0cHV0W2dsb2JhbF9pZHhdID0gdW5pZm9ybXMuc3RhcnQgKyAke3dnc2xUeXBlfShnbG9iYWxfaWR4KSAqIHVuaWZvcm1zLmRlbHRhO1xuICAgICAgfWA7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJSYW5nZVwiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGhpbnQ6IGAke2RhdGFUeXBlfWAgfSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZSB9XSxcbiAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHsgeDogTWF0aC5jZWlsKFxuICAgICAgICAgICAgICBvdXRwdXRTaXplIC8gNjRcbiAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICkgfSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgcmFuZ2UgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgbGltaXQgPSAwO1xuICAgICAgICBsZXQgZGVsdGEgPSAwO1xuICAgICAgICBpZiAoY29udGV4dC5pbnB1dHNbMF0uZGF0YVR5cGUgPT09IDYgLyogaW50MzIgKi8pIHtcbiAgICAgICAgICBzdGFydCA9IGNvbnRleHQuaW5wdXRzWzBdLmdldEludDMyQXJyYXkoKVswXTtcbiAgICAgICAgICBsaW1pdCA9IGNvbnRleHQuaW5wdXRzWzFdLmdldEludDMyQXJyYXkoKVswXTtcbiAgICAgICAgICBkZWx0YSA9IGNvbnRleHQuaW5wdXRzWzJdLmdldEludDMyQXJyYXkoKVswXTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSA9PT0gMSAvKiBmbG9hdCAqLykge1xuICAgICAgICAgIHN0YXJ0ID0gY29udGV4dC5pbnB1dHNbMF0uZ2V0RmxvYXQzMkFycmF5KClbMF07XG4gICAgICAgICAgbGltaXQgPSBjb250ZXh0LmlucHV0c1sxXS5nZXRGbG9hdDMyQXJyYXkoKVswXTtcbiAgICAgICAgICBkZWx0YSA9IGNvbnRleHQuaW5wdXRzWzJdLmdldEZsb2F0MzJBcnJheSgpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnYyLndlYmdwdS52YWxpZGF0ZUlucHV0Q29udGVudCkge1xuICAgICAgICAgIHZhbGlkYXRlSW5wdXRzQ29udGVudChzdGFydCwgbGltaXQsIGRlbHRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlUmFuZ2VQcm9ncmFtSW5mbyhzdGFydCwgbGltaXQsIGRlbHRhLCBjb250ZXh0LmlucHV0c1swXS5kYXRhVHlwZSksIHsgaW5wdXRzOiBbXSB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3Jlc2l6ZS50c1xuICB2YXIgdmFsaWRhdGVTY2FsZXMsIHVwZGF0ZVNjYWxlcywgdmFsaWRhdGVJbnB1dHMyMSwgZ2V0T3JpZ2luYWxDb29yZGluYXRlRnJvbVJlc2l6ZWRDb29yZGluYXRlLCBnZXROZWFyZXN0UGl4ZWxGcm9tT3JpZ2luYWwsIHVwZGF0ZVJvSSwgaW5pdE91dHB1dFNoYXBlLCBhZGp1c3RPdXRwdXRTaGFwZSwgY2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMsIGNhbGN1bGF0ZUlucHV0SW5kaWNlc0Zyb21PdXRwdXRJbmRpY2VzLCBjaGVja0lucHV0SW5kaWNlcywgc2V0Q2hhbm5lbEFuZEJhdGNoSW5kaWNlcywgYmlsaW5lYXJJbnRlcnBvbGF0aW9uLCBiaWN1YmljSW50ZXJwb2xhdGlvbiwgdHJpbGluZWFySW50ZXJwb2xhdGlvbiwgY3JlYXRlUmVzaXplUHJvZ3JhbUluZm8sIGdldE9wc2V0VmVyc2lvbkZyb21DdXN0b21EYXRhQnVmZmVyLCByZXNpemUsIHBhcnNlUmVzaXplQXR0cmlidXRlcztcbiAgdmFyIGluaXRfcmVzaXplID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9yZXNpemUudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2F0dHJpYnV0ZV93aXRoX2NhY2hlX2tleSgpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIHZhbGlkYXRlU2NhbGVzID0gKHNjYWxlcywgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBzY2FsZXMuZXZlcnkoKHZhbHVlKSA9PiB2YWx1ZSA+IDAgfHwgKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXNpemUgcmVxdWlyZXMgc2NhbGVzIGlucHV0IHZhbHVlcyB0byBiZSBwb3NpdGl2ZVwiKTtcbiAgICAgICAgfSkpO1xuICAgICAgICBpZiAoc2NhbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoYXR0cmlidXRlcy5tb2RlID09PSBcImxpbmVhclwiKSB7XG4gICAgICAgICAgICBpZiAoIShzY2FsZXMubGVuZ3RoID09PSAyIHx8IHNjYWxlcy5sZW5ndGggPT09IDMgfHwgc2NhbGVzLmxlbmd0aCA9PT0gNCAmJiBzY2FsZXNbMF0gPT09IDEgJiYgc2NhbGVzWzFdID09PSAxIHx8IHNjYWxlcy5sZW5ndGggPT09IDQgJiYgc2NhbGVzWzBdID09PSAxICYmIHNjYWxlc1szXSA9PT0gMSB8fCBzY2FsZXMubGVuZ3RoID09PSA1ICYmIHNjYWxlc1swXSA9PT0gMSAmJiBzY2FsZXNbMV0gPT09IDEpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgRm9yIGxpbmVhciBtb2RlLCBSZXNpemUgcmVxdWlyZXMgc2NhbGVzIHRvIGJlIDJELCAzRCwgNEQgd2l0aCBlaXRoZXIgdHdvIG91dGVybW9zdCBvciBvbmUgaW5uZXJtb3N0IGFuZFxuICAgICAgICAgICAgb25lIG91dGVybW9zdCBzY2FsZSB2YWx1ZXMgZXF1YWwgdG8gMSwgb3IgNUQgd2l0aCB0d28gb3V0ZXJtb3N0IHNjYWxlIHZhbHVlcyBlcXVhbCB0byAxYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcy5tb2RlID09PSBcImN1YmljXCIpIHtcbiAgICAgICAgICAgIGlmICghKHNjYWxlcy5sZW5ndGggPT09IDIgfHwgc2NhbGVzLmxlbmd0aCA9PT0gNCAmJiBzY2FsZXNbMF0gPT09IDEgJiYgc2NhbGVzWzFdID09PSAxIHx8IHNjYWxlcy5sZW5ndGggPT09IDQgJiYgc2NhbGVzWzBdID09PSAxICYmIHNjYWxlc1szXSA9PT0gMSkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVzaXplIHJlcXVpcmVzIHNjYWxlcyBpbnB1dCBzaXplIHRvIGJlIDIgb3IgNCBmb3IgY3ViaWMgbW9kZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB1cGRhdGVTY2FsZXMgPSAoc2NhbGVzLCBheGVzLCByYW5rKSA9PiB7XG4gICAgICAgIGF4ZXMuZXZlcnkoKHZhbHVlKSA9PiB2YWx1ZSA+PSAwICYmIHZhbHVlIDwgcmFuayB8fCAoKCkgPT4ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlc2l6ZSByZXF1aXJlcyBheGVzIGlucHV0IHZhbHVlcyB0byBiZSBwb3NpdGl2ZSBhbmQgbGVzcyB0aGFuIHJhbmtcIik7XG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgbmV3U2NhbGVzID0gbmV3IEFycmF5KHJhbmspLmZpbGwoMSk7XG4gICAgICAgIGF4ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiBuZXdTY2FsZXNbdmFsdWVdID0gc2NhbGVzW2luZGV4XSk7XG4gICAgICAgIHJldHVybiBuZXdTY2FsZXM7XG4gICAgICB9O1xuICAgICAgdmFsaWRhdGVJbnB1dHMyMSA9IChpbnB1dHMsIGF0dHJpYnV0ZXMsIG9wc2V0VmVyc2lvbiwgc2NhbGVzLCBzaXplcywgcm9pKSA9PiB7XG4gICAgICAgIGNvbnN0IFtyb2lJbnB1dEluZGV4LCBzY2FsZXNJbnB1dEluZGV4LCBzaXplc0lucHV0SW5kZXhdID0gb3BzZXRWZXJzaW9uID4gMTAgPyBbMSwgMiwgM10gOiBbLTEsIGlucHV0cy5sZW5ndGggPiAxID8gMSA6IC0xLCAtMV07XG4gICAgICAgIGNvbnN0IHJhbmsgPSBpbnB1dHNbMF0uZGltcy5sZW5ndGg7XG4gICAgICAgIGlmIChyb2lJbnB1dEluZGV4ID4gMCAmJiBpbnB1dHMubGVuZ3RoID4gcm9pSW5wdXRJbmRleCAmJiBpbnB1dHNbcm9pSW5wdXRJbmRleF0uZGltcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaW5wdXRzW3JvaUlucHV0SW5kZXhdLmdldEZsb2F0MzJBcnJheSgpLmZvckVhY2goKHZhbHVlKSA9PiByb2kucHVzaCh2YWx1ZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuY29vcmRpbmF0ZVRyYW5zZm9ybU1vZGUgPT09IFwidGZfY3JvcF9hbmRfcmVzaXplXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXNpemUgcmVxdWlyZXMgUm9JIGlucHV0IHRvIGJlIHNwZWNpZmllZCB3aGVuIGNvb3JkaW5hdGVUcmFuc2Zvcm1Nb2RlIGlzIHRmQ3JvcEFuZFJlc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NhbGVzSW5wdXRJbmRleCA+IDAgJiYgaW5wdXRzLmxlbmd0aCA+IHNjYWxlc0lucHV0SW5kZXggJiYgaW5wdXRzW3NjYWxlc0lucHV0SW5kZXhdLmRpbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlucHV0c1tzY2FsZXNJbnB1dEluZGV4XS5nZXRGbG9hdDMyQXJyYXkoKS5mb3JFYWNoKCh2YWx1ZSkgPT4gc2NhbGVzLnB1c2godmFsdWUpKTtcbiAgICAgICAgICBpZiAoc2NhbGVzLmxlbmd0aCAhPT0gMCAmJiAoc2NhbGVzLmxlbmd0aCAhPT0gcmFuayAmJiAob3BzZXRWZXJzaW9uID49IDE4ICYmIHNjYWxlcy5sZW5ndGggIT09IGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIlJlc2l6ZSByZXF1aXJlcyBzY2FsZXMgaW5wdXQgc2l6ZSB0byBiZSBzYW1lIGFzIGlucHV0IHJhbmsgb3IgYXhlcyBzaXplIGZvciBvcHNldCAxOCBhbmQgdXBcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsaWRhdGVTY2FsZXMoc2NhbGVzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICBpZiAoYXR0cmlidXRlcy5heGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVwZGF0ZVNjYWxlcyhzY2FsZXMsIGF0dHJpYnV0ZXMuYXhlcywgcmFuaykuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiBzY2FsZXNbaW5kZXhdID0gdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2l6ZXNJbnB1dEluZGV4ID4gMCAmJiBpbnB1dHMubGVuZ3RoID4gc2l6ZXNJbnB1dEluZGV4KSB7XG4gICAgICAgICAgaW5wdXRzW3NpemVzSW5wdXRJbmRleF0uZ2V0QmlnSW50NjRBcnJheSgpLmZvckVhY2goKHZhbHVlKSA9PiBzaXplcy5wdXNoKE51bWJlcih2YWx1ZSkpKTtcbiAgICAgICAgICBpZiAoc2l6ZXMubGVuZ3RoICE9PSByYW5rIHx8IG9wc2V0VmVyc2lvbiA+PSAxOCAmJiBzaXplcy5sZW5ndGggPT09IGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlc2l6ZSByZXF1aXJlcyBzaXplcyBpbnB1dCBzaXplIHRvIGJlIHNhbWUgYXMgaW5wdXQgcmFuayBvciBheGVzIHNpemUgZm9yIG9wc2V0IDE4IGFuZCB1cFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHNjYWxlcy5sZW5ndGggIT09IGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVzaXplIHJlcXVpcmVzIFwic2NhbGVzXCIgaW5wdXQgc2l6ZSB0byBiZSBvZiBheGVzIHJhbmsgd2hlbiBheGVzIGF0dHJpYnV0ZXMgaXMgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzaXplcy5sZW5ndGggIT09IGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ1Jlc2l6ZSByZXF1aXJlcyBcInNpemVzXCIgaW5wdXQgc2l6ZSB0byBiZSBvZiByYW5rIGF4ZXMgcmFuayB3aGVuIGF4ZXMgYXR0cmlidXRlcyBpcyBzcGVjaWZpZWQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNjYWxlcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygc2l6ZXMgIT09IFwidW5kZWZpbmVkXCIgJiYgc2NhbGVzLmxlbmd0aCA+IDAgJiYgc2l6ZXMubGVuZ3RoID4gcmFuaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlc2l6ZSByZXF1aXJlcyBvbmx5IG9mIHNjYWxlcyBvciBzaXplcyB0byBiZSBzcGVjaWZpZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBnZXRPcmlnaW5hbENvb3JkaW5hdGVGcm9tUmVzaXplZENvb3JkaW5hdGUgPSAoY29vcmRpbmF0ZVRyYW5zZmVyTW9kZSwgZFR5cGUpID0+IGBmbiBnZXRPcmlnaW5hbENvb3JkaW5hdGVGcm9tUmVzaXplZENvb3JkaW5hdGUoeFJlc2l6ZWQ6IHUzMiwgeFNjYWxlOiBmMzIsIGxlbmd0aFJlc2l6ZWQ6IHUzMixcbiAgICAgbGVuZ3RoT3JpZ2luYWw6IHUzMiwgcm9pU3RhcnQ6IGYzMiwgcm9pRW5kOiBmMzIpIC0+ICR7ZFR5cGV9IHsgYCArICgoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoY29vcmRpbmF0ZVRyYW5zZmVyTW9kZSkge1xuICAgICAgICAgIGNhc2UgXCJhc3ltbWV0cmljXCI6XG4gICAgICAgICAgICByZXR1cm4gYHJldHVybiAke2RUeXBlfSh4UmVzaXplZCkgLyAke2RUeXBlfSh4U2NhbGUpO2A7XG4gICAgICAgICAgY2FzZSBcInB5dG9yY2hfaGFsZl9waXhlbFwiOlxuICAgICAgICAgICAgcmV0dXJuIGBpZiAobGVuZ3RoUmVzaXplZCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgke2RUeXBlfSh4UmVzaXplZCkgKyAwLjUpIC8gJHtkVHlwZX0oeFNjYWxlKSAtIDAuNTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA7XG4gICAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICBjYXNlIFwidGZfaGFsZl9waXhlbF9mb3Jfbm5cIjpcbiAgICAgICAgICAgIHJldHVybiBgcmV0dXJuICgke2RUeXBlfSh4UmVzaXplZCkgKyAwLjUpIC8gJHtkVHlwZX0oeFNjYWxlKTtgO1xuICAgICAgICAgIGNhc2UgXCJhbGlnbl9jb3JuZXJzXCI6XG4gICAgICAgICAgICByZXR1cm4gYGlmIChsZW5ndGhSZXNpemVkID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBwYXJ0IGFuZCB0aGUgZnJhY3Rpb25hbCBwYXJ0IGFyZSBjYWxjdWxhdGVkIHNlcGFyYXRlbHkgZHVlIHRvIGluYWNjdXJhY3kgb2YgZmxvYXRpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnQgZGl2aXNpb24uIEFzIGFuIGV4YW1wbGUsIGYzMigyMSkgLyBmMzIoNykgbWF5IGV2YWx1YXRlIHRvIDIuOTkuLi4gaW5zdGVhZCBvZiAzLCBjYXVzaW5nIGFuXG4gICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldC1ieS1vbmUgZXJyb3IgbGF0ZXIgaW4gZmxvb3IoKS5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHdob2xlID0gJHtkVHlwZX0oeFJlc2l6ZWQgKiAobGVuZ3RoT3JpZ2luYWwgLSAxKSAvIChsZW5ndGhSZXNpemVkIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3QgPVxuICAgICAgICAgICAgICAgICAgICAgICAgJHtkVHlwZX0oeFJlc2l6ZWQgKiAobGVuZ3RoT3JpZ2luYWwgLSAxKSAlIChsZW5ndGhSZXNpemVkIC0gMSkpIC8gJHtkVHlwZX0obGVuZ3RoUmVzaXplZCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2hvbGUgKyBmcmFjdDtcbiAgICAgICAgICAgICAgICAgIH1gO1xuICAgICAgICAgIGNhc2UgXCJ0Zl9jcm9wX2FuZF9yZXNpemVcIjpcbiAgICAgICAgICAgIHJldHVybiBgaWYgKGxlbmd0aFJlc2l6ZWQgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAke2RUeXBlfShyb2lTdGFydCkgKiAke2RUeXBlfShsZW5ndGhPcmlnaW5hbCAtIDEpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICgke2RUeXBlfSh4UmVzaXplZCkgKiAke2RUeXBlfShyb2lFbmQgLSByb2lTdGFydCkgKiAke2RUeXBlfShsZW5ndGhPcmlnaW5hbCAtIDEpKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAke2RUeXBlfShsZW5ndGhSZXNpemVkIC0gMSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC41ICogJHtkVHlwZX0ocm9pU3RhcnQgKyByb2lFbmQpICogJHtkVHlwZX0obGVuZ3RoT3JpZ2luYWwgLSAxKTtcbiAgICAgICAgICAgICAgICAgIH1gO1xuICAgICAgICAgIGNhc2UgXCJoYWxmX3BpeGVsX3N5bW1ldHJpY1wiOlxuICAgICAgICAgICAgcmV0dXJuIGBjb25zdCBvdXRwdXRXaWR0aCA9ICR7ZFR5cGV9eFNjYWxlICogJHtkVHlwZX0obGVuZ3RoUmVzaXplZCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RtZW50ID0gJHtkVHlwZX0obGVuZ3RoUmVzaXplZCkgLyBvdXRwdXRXaWR0aDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9ICR7ZFR5cGV9KGxlbmd0aE9yaWdpbmFsKSAvIDI7XG4gICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBjZW50ZXIgKiAoMSAtIGFkanVzdG1lbnQpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldCArICgoJHtkVHlwZX0oeFJlc2l6ZWQpICsgMC41KSAvICR7ZFR5cGV9KHhTY2FsZSkpIC0gMC41O2A7XG4gICAgICAgICAgY2FzZSBcImhhbGZfcGl4ZWxcIjpcbiAgICAgICAgICAgIHJldHVybiBgcmV0dXJuICgoJHtkVHlwZX0oeFJlc2l6ZWQpICsgMC41KSAvICR7ZFR5cGV9KHhTY2FsZSkpIC0gMC41O2A7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29vcmRpbmF0ZSB0cmFuc2Zvcm0gbW9kZSAke2Nvb3JkaW5hdGVUcmFuc2Zlck1vZGV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgfSkoKSArIFwifVwiO1xuICAgICAgZ2V0TmVhcmVzdFBpeGVsRnJvbU9yaWdpbmFsID0gKG5lYXJlc3RNb2RlLCBvcHNldFZlcnNpb24sIGRUeXBlKSA9PiBgZm4gZ2V0TmVhcmVzdFBpeGVsRnJvbU9yaWdpbmFsKHhPcmlnaW5hbDogJHtkVHlwZX0sIGlzRG93blNhbXBsZTogYm9vbCkgLT4gJHtkVHlwZX0ge2AgKyAoKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKG5lYXJlc3RNb2RlKSB7XG4gICAgICAgICAgY2FzZSBcInJvdW5kX3ByZWZlcl9jZWlsXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJpZiAoZnJhY3QoeE9yaWdpbmFsKSA9PSAwLjUpIHsgICAgICAgICAgICAgcmV0dXJuIGNlaWwoeE9yaWdpbmFsKTsgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgIHJldHVybiByb3VuZCh4T3JpZ2luYWwpOyAgICAgICAgICAgfVwiO1xuICAgICAgICAgIGNhc2UgXCJmbG9vclwiOlxuICAgICAgICAgICAgcmV0dXJuIFwicmV0dXJuIGZsb29yKHhPcmlnaW5hbCk7XCI7XG4gICAgICAgICAgY2FzZSBcImNlaWxcIjpcbiAgICAgICAgICAgIHJldHVybiBcInJldHVybiBjZWlsKHhPcmlnaW5hbCk7XCI7XG4gICAgICAgICAgY2FzZSBcInJvdW5kX3ByZWZlcl9mbG9vclwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiaWYgKGZyYWN0KHhPcmlnaW5hbCkgPT0gMC41KSB7ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZsb29yKHhPcmlnaW5hbCk7ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdW5kKHhPcmlnaW5hbCk7ICAgICAgICAgICAgICAgICAgIH1cIjtcbiAgICAgICAgICBjYXNlIFwic2ltcGxlXCI6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChvcHNldFZlcnNpb24gPCAxMSkge1xuICAgICAgICAgICAgICByZXR1cm4gXCJpZiAoaXNEb3duU2FtcGxlKSAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjZWlsKHhPcmlnaW5hbCk7ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4T3JpZ2luYWw7ICAgICAgICAgICAgICAgICAgICAgfVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOZWFyZXN0IG1vZGUgJHtuZWFyZXN0TW9kZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgICB9KSgpICsgXCJ9XCI7XG4gICAgICB1cGRhdGVSb0kgPSAocm9pLCBheGVzLCByYW5rKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvaVRtcCA9IG5ldyBBcnJheShyYW5rKS5maWxsKDApLmNvbmNhdChuZXcgQXJyYXkocmFuaykuZmlsbCgxKSk7XG4gICAgICAgIGNvbnN0IHJvaUxvY2FsID0gcm9pLmxlbmd0aCA9PT0gMCA/IHJvaVRtcCA6IHJvaS5zbGljZSgpO1xuICAgICAgICBpZiAoYXhlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYXhlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgICAgICByb2lUbXBbdl0gPSByb2lMb2NhbFtpXTtcbiAgICAgICAgICAgIHJvaVRtcFtpICsgcmFua10gPSByb2lMb2NhbFtheGVzLmxlbmd0aCArIGldO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByb2lUbXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvaUxvY2FsO1xuICAgICAgfTtcbiAgICAgIGluaXRPdXRwdXRTaGFwZSA9IChpbnB1dFNoYXBlLCBzY2FsZXMsIHNpemVzLCBheGVzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXRTaGFwZSA9IFtdO1xuICAgICAgICBpZiAoc2l6ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChheGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlucHV0U2hhcGUuZm9yRWFjaCgodikgPT4gb3V0cHV0U2hhcGUucHVzaCh2KSk7XG4gICAgICAgICAgICBpZiAoTWF0aC5tYXgoLi4uYXhlcykgPiBpbnB1dFNoYXBlLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJheGVzIGlzIG91dCBvZiBib3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF4ZXMuZm9yRWFjaCgodiwgaSkgPT4gb3V0cHV0U2hhcGVbdl0gPSBzaXplc1tpXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNpemVzLmZvckVhY2goKHYpID0+IG91dHB1dFNoYXBlLnB1c2godikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc2NhbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVzaXplIHJlcXVpcmVzIGVpdGhlciBzY2FsZXMgb3Igc2l6ZXMuXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRwdXRTaGFwZSA9IGlucHV0U2hhcGUubWFwKCh2YWx1ZSwgaW5kZXgpID0+IE1hdGgucm91bmQodmFsdWUgKiBzY2FsZXNbaW5kZXhdKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXRTaGFwZTtcbiAgICAgIH07XG4gICAgICBhZGp1c3RPdXRwdXRTaGFwZSA9IChpbnB1dFNoYXBlLCBzY2FsZXMsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc2NhbGVJblBvbGljeSA9ICgoKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVzLmtlZXBBc3BlY3RSYXRpb1BvbGljeSkge1xuICAgICAgICAgICAgY2FzZSBcIm5vdF9sYXJnZXJcIjpcbiAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuYXhlcy5sZW5ndGggPiAwID8gTWF0aC5taW4oLi4uYXR0cmlidXRlcy5heGVzLm1hcCgoaSkgPT4gc2NhbGVzW2ldKSwgTnVtYmVyLk1BWF9WQUxVRSkgOiBNYXRoLm1pbiguLi5zY2FsZXMsIE51bWJlci5NQVhfVkFMVUUpO1xuICAgICAgICAgICAgY2FzZSBcIm5vdF9zbWFsbGVyXCI6XG4gICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoID4gMCA/IE1hdGgubWF4KC4uLmF0dHJpYnV0ZXMuYXhlcy5tYXAoKGkpID0+IHNjYWxlc1tpXSksIE51bWJlci5NSU5fVkFMVUUpIDogTWF0aC5tYXgoLi4uc2NhbGVzLCBOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2VlcCBhc3BlY3QgcmF0aW8gcG9saWN5ICR7YXR0cmlidXRlcy5rZWVwQXNwZWN0UmF0aW9Qb2xpY3l9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHNjYWxlcy5maWxsKDEsIDAsIHNjYWxlcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBhZGp1c3RlZE91dHB1dFNoYXBlID0gaW5wdXRTaGFwZS5zbGljZSgpO1xuICAgICAgICBpZiAoYXR0cmlidXRlcy5heGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF4ZXMuZm9yRWFjaCgodikgPT4gc2NhbGVzW3ZdID0gc2NhbGVJblBvbGljeSk7XG4gICAgICAgICAgYXR0cmlidXRlcy5heGVzLmZvckVhY2goKHYpID0+IGFkanVzdGVkT3V0cHV0U2hhcGVbdl0gPSBNYXRoLnJvdW5kKGlucHV0U2hhcGVbdl0gKiBzY2FsZXNbdl0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY2FsZXMuZmlsbChzY2FsZUluUG9saWN5LCAwLCBzY2FsZXMubGVuZ3RoKTtcbiAgICAgICAgICBhZGp1c3RlZE91dHB1dFNoYXBlLmZvckVhY2goKHYsIGkpID0+IGFkanVzdGVkT3V0cHV0U2hhcGVbaV0gPSBNYXRoLnJvdW5kKHYgKiBzY2FsZXNbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWRqdXN0ZWRPdXRwdXRTaGFwZTtcbiAgICAgIH07XG4gICAgICBjYWxjdWxhdGVPcmlnaW5hbEluZGljZXNGcm9tT3V0cHV0SW5kaWNlcyA9IChvdXRwdXQsIGlucHV0U2hhcGUsIG91dHB1dFNoYXBlLCBzY2FsZXNMZW5ndGgsIHJvaUxlbmd0aCkgPT4gYFxuICAgIGZuIGNhbGN1bGF0ZU9yaWdpbmFsSW5kaWNlc0Zyb21PdXRwdXRJbmRpY2VzKG91dHB1dF9pbmRpY2VzOiAke291dHB1dC50eXBlLmluZGljZXN9KSAtPiBhcnJheTwke291dHB1dC50eXBlLnZhbHVlfSwgJHtvdXRwdXRTaGFwZS5sZW5ndGh9PiB7XG4gICAgICB2YXIgb3JpZ2luYWxfaW5kaWNlczogYXJyYXk8JHtvdXRwdXQudHlwZS52YWx1ZX0sICR7b3V0cHV0U2hhcGUubGVuZ3RofT47XG4gICAgICBmb3IgKHZhciBpOnUzMiA9IDA7IGkgPCAke291dHB1dFNoYXBlLmxlbmd0aH07IGkrKykge1xuICAgICAgICB2YXIgb3V0cHV0X2luZGV4ID0gJHtvdXRwdXQuaW5kaWNlc0dldChcIm91dHB1dF9pbmRpY2VzXCIsIFwiaVwiKX07XG4gICAgICAgIHZhciBzY2FsZSA9ICR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMuc2NhbGVzXCIsIFwiaVwiLCBzY2FsZXNMZW5ndGgpfTtcbiAgICAgICAgdmFyIHJvaV9sb3cgPSAke2dldEVsZW1lbnRBdChcInVuaWZvcm1zLnJvaVwiLCBcImlcIiwgcm9pTGVuZ3RoKX07XG4gICAgICAgIHZhciByb2lfaGkgPSAke2dldEVsZW1lbnRBdChcInVuaWZvcm1zLnJvaVwiLCBgaSArICR7aW5wdXRTaGFwZS5sZW5ndGh9YCwgcm9pTGVuZ3RoKX07XG4gICAgICAgIGlmIChzY2FsZSA9PSAxLjApIHtcbiAgICAgICAgICBvcmlnaW5hbF9pbmRpY2VzW2ldID0gJHtvdXRwdXQudHlwZS52YWx1ZX0ob3V0cHV0X2luZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW5wdXRfc2hhcGVfaSA9ICR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMuaW5wdXRfc2hhcGVcIiwgXCJpXCIsIGlucHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgdmFyIG91dHB1dF9zaGFwZV9pID0gJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy5vdXRwdXRfc2hhcGVcIiwgXCJpXCIsIG91dHB1dFNoYXBlLmxlbmd0aCl9O1xuICAgICAgICAgIG9yaWdpbmFsX2luZGljZXNbaV0gPSBnZXRPcmlnaW5hbENvb3JkaW5hdGVGcm9tUmVzaXplZENvb3JkaW5hdGUob3V0cHV0X2luZGV4LCBzY2FsZSwgb3V0cHV0X3NoYXBlX2ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9zaGFwZV9pLCByb2lfbG93LCByb2lfaGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3JpZ2luYWxfaW5kaWNlcztcbiAgICB9YDtcbiAgICAgIGNhbGN1bGF0ZUlucHV0SW5kaWNlc0Zyb21PdXRwdXRJbmRpY2VzID0gKGlucHV0LCBvdXRwdXQsIGlucHV0U2hhcGUsIG91dHB1dFNoYXBlLCBzY2FsZXNMZW5ndGgsIHJvaUxlbmd0aCwgdXNlRXh0cmFwb2xhdGlvbikgPT4gYFxuICAgIGZuIGNhbGN1bGF0ZUlucHV0SW5kaWNlc0Zyb21PdXRwdXRJbmRpY2VzKG91dHB1dF9pbmRpY2VzOiAke291dHB1dC50eXBlLmluZGljZXN9KSAtPiAke2lucHV0LnR5cGUuaW5kaWNlc30ge1xuICAgICAgdmFyIGlucHV0X2luZGljZXM6ICR7aW5wdXQudHlwZS5pbmRpY2VzfTtcbiAgICAgIGZvciAodmFyIGk6dTMyID0gMDsgaSA8ICR7b3V0cHV0U2hhcGUubGVuZ3RofTsgaSsrKSB7XG4gICAgICAgIHZhciBvdXRwdXRfaW5kZXggPSAke291dHB1dC5pbmRpY2VzR2V0KFwib3V0cHV0X2luZGljZXNcIiwgXCJpXCIpfTtcbiAgICAgICAgdmFyIGlucHV0X2luZGV4OiB1MzI7XG4gICAgICAgIHZhciBzY2FsZSA9ICR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMuc2NhbGVzXCIsIFwiaVwiLCBzY2FsZXNMZW5ndGgpfTtcbiAgICAgICAgaWYgKHNjYWxlID09IDEuMCkge1xuICAgICAgICAgIGlucHV0X2luZGV4ID0gb3V0cHV0X2luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciByb2lfbG93ID0gJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy5yb2lcIiwgXCJpXCIsIHJvaUxlbmd0aCl9O1xuICAgICAgICAgIHZhciByb2lfaGkgPSAke2dldEVsZW1lbnRBdChcInVuaWZvcm1zLnJvaVwiLCBgaSArICR7aW5wdXRTaGFwZS5sZW5ndGh9YCwgcm9pTGVuZ3RoKX07XG4gICAgICAgICAgdmFyIGlucHV0X3NoYXBlX2kgPSAke2dldEVsZW1lbnRBdChcInVuaWZvcm1zLmlucHV0X3NoYXBlXCIsIFwiaVwiLCBpbnB1dFNoYXBlLmxlbmd0aCl9O1xuICAgICAgICAgIHZhciBvdXRwdXRfc2hhcGVfaSA9ICR7Z2V0RWxlbWVudEF0KFwidW5pZm9ybXMub3V0cHV0X3NoYXBlXCIsIFwiaVwiLCBvdXRwdXRTaGFwZS5sZW5ndGgpfTtcbiAgICAgICAgICB2YXIgb3JpZ2luYWxfaWR4ID0gZ2V0T3JpZ2luYWxDb29yZGluYXRlRnJvbVJlc2l6ZWRDb29yZGluYXRlKG91dHB1dF9pbmRleCwgc2NhbGUsIG91dHB1dF9zaGFwZV9pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfc2hhcGVfaSwgcm9pX2xvdywgcm9pX2hpKTtcbiAgICAgICAgICBpZiAoISR7dXNlRXh0cmFwb2xhdGlvbn0gfHwgKG9yaWdpbmFsX2lkeCA+PSAwICYmIG9yaWdpbmFsX2lkeCA8ICR7b3V0cHV0LnR5cGUudmFsdWV9KGlucHV0X3NoYXBlX2kpKSkge1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsX2lkeCA8IDApIHtcbiAgICAgICAgICAgICAgaW5wdXRfaW5kZXggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnaW5hbF9pZHggPiAke291dHB1dC50eXBlLnZhbHVlfShpbnB1dF9zaGFwZV9pIC0gMSkpIHtcbiAgICAgICAgICAgICAgaW5wdXRfaW5kZXggPSBpbnB1dF9zaGFwZV9pIC0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlucHV0X2luZGV4ID0gdTMyKGdldE5lYXJlc3RQaXhlbEZyb21PcmlnaW5hbChvcmlnaW5hbF9pZHgsIHNjYWxlIDwgMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dF9pbmRleCA9IHUzMihvcmlnaW5hbF9pZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAke2lucHV0LmluZGljZXNTZXQoXCJpbnB1dF9pbmRpY2VzXCIsIFwiaVwiLCBcIiBpbnB1dF9pbmRleFwiKX1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnB1dF9pbmRpY2VzO1xuICAgIH1gO1xuICAgICAgY2hlY2tJbnB1dEluZGljZXMgPSAoaW5wdXQsIGlucHV0U2hhcGUpID0+IGBcbiAgICBmbiBjaGVja0lucHV0SW5kaWNlcyhpbnB1dF9pbmRpY2VzOiAke2lucHV0LnR5cGUuaW5kaWNlc30pIC0+IGJvb2wge1xuICAgICAgZm9yICh2YXIgaTp1MzIgPSAwOyBpIDwgJHtpbnB1dFNoYXBlLmxlbmd0aH07IGkrKykge1xuICAgICAgICB2YXIgaW5wdXRfaW5kZXggPSAke2lucHV0LmluZGljZXNHZXQoXCJpbnB1dF9pbmRpY2VzXCIsIFwiaVwiKX07XG4gICAgICAgIGlmIChpbnB1dF9pbmRleCA8IDAgfHwgaW5wdXRfaW5kZXggPj0gJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy5pbnB1dF9zaGFwZVwiLCBcImlcIiwgaW5wdXRTaGFwZS5sZW5ndGgpfSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfWA7XG4gICAgICBzZXRDaGFubmVsQW5kQmF0Y2hJbmRpY2VzID0gKGlucHV0LCBjaGFubmVsSWR4LCBiYXRjaElkeCwgc3BhY2lhbERpbXMpID0+IGlucHV0LnJhbmsgPiBzcGFjaWFsRGltcyA/IGBcbiAgICAke2lucHV0LmluZGljZXNTZXQoXCJpbnB1dF9pbmRpY2VzXCIsIGNoYW5uZWxJZHgsIFwiY2hhbm5lbFwiKX07XG4gICAgJHtpbnB1dC5pbmRpY2VzU2V0KFwiaW5wdXRfaW5kaWNlc1wiLCBiYXRjaElkeCwgXCJiYXRjaFwiKX07XG5gIDogXCJcIjtcbiAgICAgIGJpbGluZWFySW50ZXJwb2xhdGlvbiA9IChpbnB1dCwgb3V0cHV0LCBpbnB1dFNoYXBlLCB1c2VFeHRyYXBvbGF0aW9uLCBleHRyYXBvbGF0aW9uVmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgaXNOY2h3ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgW2JhdGNoSWR4LCBoZWlnaHRJZHgsIHdpZHRoSWR4LCBjaGFubmVsSWR4XSA9IGlucHV0U2hhcGUubGVuZ3RoID09PSAyID8gWy0xLCAwLCAxLCAtMV0gOiBpc05jaHcgPyBbMCwgMiwgMywgMV0gOiBbMCwgMSwgMiwgM107XG4gICAgICAgIGNvbnN0IGRUeXBlID0gaW5wdXQudHlwZS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGBcbiAgICBmbiBnZXRJbnB1dFZhbHVlKGJhdGNoOiB1MzIsIGNoYW5uZWw6IHUzMiwgcm93OiB1MzIsIGNvbDogdTMyKSAtPiAke2RUeXBlfSB7XG4gICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KFwiaW5wdXRfaW5kaWNlc1wiLCBoZWlnaHRJZHgsIGBtYXgoMCwgbWluKHJvdywgJHtpbnB1dFNoYXBlW2hlaWdodElkeF19IC0gMSkpYCl9O1xuICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KFwiaW5wdXRfaW5kaWNlc1wiLCB3aWR0aElkeCwgYG1heCgwLCBtaW4oY29sLCAke2lucHV0U2hhcGVbd2lkdGhJZHhdfSAtIDEpKWApfTtcbiAgICAgICR7c2V0Q2hhbm5lbEFuZEJhdGNoSW5kaWNlcyhpbnB1dCwgY2hhbm5lbElkeCwgYmF0Y2hJZHgsIDIpfVxuICAgICAgcmV0dXJuICR7aW5wdXQuZ2V0QnlJbmRpY2VzKFwiaW5wdXRfaW5kaWNlc1wiKX07XG4gICAgfVxuXG4gICAgZm4gYmlsaW5lYXJJbnRlcnBvbGF0aW9uKG91dHB1dF9pbmRpY2VzOiAke291dHB1dC50eXBlLmluZGljZXN9KSAtPiAke2RUeXBlfSB7XG4gICAgICB2YXIgb3JpZ2luYWxJbmRpY2VzID0gY2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0X2luZGljZXMpO1xuICAgICAgdmFyIHJvdzoke2RUeXBlfSA9IG9yaWdpbmFsSW5kaWNlc1ske2hlaWdodElkeH1dO1xuICAgICAgdmFyIGNvbDoke2RUeXBlfSA9IG9yaWdpbmFsSW5kaWNlc1ske3dpZHRoSWR4fV07XG4gICAgICAke3VzZUV4dHJhcG9sYXRpb24gPyBgaWYgKHJvdyA8IDAgfHwgcm93ID4gKCR7aW5wdXRTaGFwZVtoZWlnaHRJZHhdfSAtIDEpIHx8IGNvbCA8IDAgfHwgY29sID4gKCR7aW5wdXRTaGFwZVt3aWR0aElkeF19IC0gMSkpIHtcbiAgICAgICAgcmV0dXJuICR7ZXh0cmFwb2xhdGlvblZhbHVlfTtcbiAgICAgIH1gIDogXCJcIn07XG4gICAgICByb3cgPSBtYXgoMCwgbWluKHJvdywgJHtpbnB1dFNoYXBlW2hlaWdodElkeF19IC0gMSkpO1xuICAgICAgY29sID0gbWF4KDAsIG1pbihjb2wsICR7aW5wdXRTaGFwZVt3aWR0aElkeF19IC0gMSkpO1xuICAgICAgdmFyIHJvdzE6IHUzMiA9IHUzMihyb3cpO1xuICAgICAgdmFyIGNvbDE6IHUzMiA9IHUzMihjb2wpO1xuICAgICAgdmFyIHJvdzI6IHUzMiA9IHUzMihyb3cgKyAxKTtcbiAgICAgIHZhciBjb2wyOiB1MzIgPSB1MzIoY29sICsgMSk7XG4gICAgICB2YXIgY2hhbm5lbDogdTMyID0gJHtpbnB1dFNoYXBlLmxlbmd0aCA+IDIgPyBgdTMyKG9yaWdpbmFsSW5kaWNlc1ske2NoYW5uZWxJZHh9XSlgIDogXCIwXCJ9O1xuICAgICAgdmFyIGJhdGNoOiB1MzIgPSAgJHtpbnB1dFNoYXBlLmxlbmd0aCA+IDIgPyBgdTMyKG9yaWdpbmFsSW5kaWNlc1ske2JhdGNoSWR4fV0pYCA6IFwiMFwifTtcbiAgICAgIHZhciB4MTE6ICR7ZFR5cGV9ID0gZ2V0SW5wdXRWYWx1ZShiYXRjaCwgY2hhbm5lbCwgcm93MSwgY29sMSk7XG4gICAgICB2YXIgeDEyOiAke2RUeXBlfSA9IGdldElucHV0VmFsdWUoYmF0Y2gsIGNoYW5uZWwsIHJvdzEsIGNvbDIpO1xuICAgICAgdmFyIHgyMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCByb3cyLCBjb2wxKTtcbiAgICAgIHZhciB4MjI6ICR7ZFR5cGV9ID0gZ2V0SW5wdXRWYWx1ZShiYXRjaCwgY2hhbm5lbCwgcm93MiwgY29sMik7XG4gICAgICB2YXIgZHgxOiAke2RUeXBlfSA9IGFicyhyb3cgLSAke2RUeXBlfShyb3cxKSk7XG4gICAgICB2YXIgZHgyOiAke2RUeXBlfSA9IGFicygke2RUeXBlfShyb3cyKSAtIHJvdyk7XG4gICAgICB2YXIgZHkxOiAke2RUeXBlfSA9IGFicyhjb2wgLSAke2RUeXBlfShjb2wxKSk7XG4gICAgICB2YXIgZHkyOiAke2RUeXBlfSA9IGFicygke2RUeXBlfShjb2wyKSAtIGNvbCk7XG4gICAgICBpZiAocm93MSA9PSByb3cyKSB7XG4gICAgICAgIGR4MSA9IDAuNTtcbiAgICAgICAgZHgyID0gMC41O1xuICAgICAgfVxuICAgICAgaWYgKGNvbDEgPT0gY29sMikge1xuICAgICAgICBkeTEgPSAwLjU7XG4gICAgICAgIGR5MiA9IDAuNTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoeDExICogZHgyICogZHkyICsgeDEyICogZHgyICogZHkxICsgeDIxICogZHgxICogZHkyICsgeDIyICogZHgxICogZHkxKTtcbiAgICB9YDtcbiAgICAgIH07XG4gICAgICBiaWN1YmljSW50ZXJwb2xhdGlvbiA9IChpbnB1dCwgb3V0cHV0LCBpbnB1dFNoYXBlLCBvdXRwdXRTaGFwZSwgc2NhbGVzLCByb2ksIGN1YmljQ29lZmZBLCB1c2VFeHRyYXBvbGF0aW9uLCBleHRyYXBvbGF0aW9uVmFsdWUsIGV4Y2x1ZGVPdXRzaWRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzMkQgPSBpbnB1dFNoYXBlLmxlbmd0aCA9PT0gMjtcbiAgICAgICAgY29uc3QgaXNOY2h3ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgW2hlaWdodElkeCwgd2lkdGhJZHhdID0gaXMyRCA/IFswLCAxXSA6IGlzTmNodyA/IFsyLCAzXSA6IFsxLCAyXTtcbiAgICAgICAgY29uc3QgZFR5cGUgPSBpbnB1dC50eXBlLnZhbHVlO1xuICAgICAgICBjb25zdCBjcmVhdGVDdWJpY0ludGVycG9sYXRpb25GdW5jdGlvbiA9IChpZHgpID0+IHtcbiAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBpZHggPT09IGhlaWdodElkeCA/IFwicm93XCIgOiBcImNvbFwiO1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICBmbiAke2RpcmVjdGlvbn1DdWJpY0ludGVycG9sYXRpb24oaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9LCBvdXRwdXRfaW5kaWNlczogJHtvdXRwdXQudHlwZS5pbmRpY2VzfSkgLT4gJHtkVHlwZX0ge1xuICAgICAgICB2YXIgb3V0cHV0X2luZGV4ID0gJHtvdXRwdXQuaW5kaWNlc0dldChcIm91dHB1dF9pbmRpY2VzXCIsIGlkeCl9O1xuICAgICAgICB2YXIgb3JpZ2luYWxJZHg6ICR7ZFR5cGV9ID0gZ2V0T3JpZ2luYWxDb29yZGluYXRlRnJvbVJlc2l6ZWRDb29yZGluYXRlKG91dHB1dF9pbmRleCwgJHtzY2FsZXNbaWR4XX0sXG4gICAgICAgICR7b3V0cHV0U2hhcGVbaWR4XX0sICR7aW5wdXRTaGFwZVtpZHhdfSwgJHtyb2lbaWR4XX0sICR7cm9pW2lkeF19ICsgJHtpbnB1dFNoYXBlLmxlbmd0aH0pO1xuICAgICAgICB2YXIgZnJhY3RPcmlnaW5hbElkeDogJHtkVHlwZX0gPSBvcmlnaW5hbElkeCAtIGZsb29yKG9yaWdpbmFsSWR4KTtcbiAgICAgICAgdmFyIGNvZWZzID0gZ2V0Q3ViaWNJbnRlcnBvbGF0aW9uQ29lZnMoZnJhY3RPcmlnaW5hbElkeCk7XG5cbiAgICAgICAgaWYgKCR7dXNlRXh0cmFwb2xhdGlvbn0gJiYgKG9yaWdpbmFsSWR4IDwgMCB8fCBvcmlnaW5hbElkeCA+ICgke2lucHV0U2hhcGVbaWR4XX0gLSAxKSkpIHtcbiAgICAgICAgICByZXR1cm4gJHtleHRyYXBvbGF0aW9uVmFsdWV9O1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXRhOiBhcnJheTwke2RUeXBlfSwgND4gPSBhcnJheTwke2RUeXBlfSwgND4oMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgICAgICAgZm9yICh2YXIgaTogaTMyID0gLTE7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICB2YXIgJHtkaXJlY3Rpb259OiAke2RUeXBlfSA9IG9yaWdpbmFsSWR4ICsgJHtkVHlwZX0oaSk7XG4gICAgICAgICAgaWYgKCR7ZGlyZWN0aW9ufSA8IDAgfHwgJHtkaXJlY3Rpb259ID49ICR7aW5wdXRTaGFwZVtpZHhdfSkge1xuICAgICAgICAgICAgJHsoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVPdXRzaWRlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBgY29lZnNbaSArIDFdID0gMC4wO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7YDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlRXh0cmFwb2xhdGlvbikge1xuICAgICAgICAgICAgICByZXR1cm4gYHJldHVybiAke2V4dHJhcG9sYXRpb25WYWx1ZX07YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkaXJlY3Rpb259ID0gbWF4KDAsIG1pbigke2RpcmVjdGlvbn0sICR7aW5wdXRTaGFwZVtpZHhdfSAtIDEpKTtgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKCl9O1xuICAgICAgICAgIH1cbiAgICAgICAgdmFyIGlucHV0X2luZGljZXNfY29weTogJHtpbnB1dC50eXBlLmluZGljZXN9ID0gaW5wdXRfaW5kaWNlcztcbiAgICAgICAgICAke2lucHV0LmluZGljZXNTZXQoXCJpbnB1dF9pbmRpY2VzX2NvcHlcIiwgaWR4LCBgdTMyKCR7ZGlyZWN0aW9ufSlgKX07XG4gICAgICAgICAgZGF0YVtpICsgMV0gPSAke2lkeCA9PT0gaGVpZ2h0SWR4ID8gaW5wdXQuZ2V0QnlJbmRpY2VzKFwiaW5wdXRfaW5kaWNlc19jb3B5XCIpIDogXCJyb3dDdWJpY0ludGVycG9sYXRpb24oaW5wdXRfaW5kaWNlc19jb3B5LCBvdXRwdXRfaW5kaWNlcylcIn07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1YmljSW50ZXJwb2xhdGlvbjFEKGRhdGEsIGNvZWZzKTtcbiAgICAgIH1gO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYFxuICAgICR7Y3JlYXRlQ3ViaWNJbnRlcnBvbGF0aW9uRnVuY3Rpb24oaGVpZ2h0SWR4KX07XG4gICAgJHtjcmVhdGVDdWJpY0ludGVycG9sYXRpb25GdW5jdGlvbih3aWR0aElkeCl9O1xuICBmbiBnZXRDdWJpY0ludGVycG9sYXRpb25Db2VmcyhzOiAke2RUeXBlfSkgLT4gYXJyYXk8JHtkVHlwZX0sIDQ+IHtcbiAgICB2YXIgYWJzUyA9IGFicyhzKTtcbiAgICB2YXIgY29lZmZzOiBhcnJheTwke2RUeXBlfSwgND4gPSBhcnJheTwke2RUeXBlfSwgND4oMC4wLCAwLjAsIDAuMCwgMC4wKTtcbiAgICB2YXIgb25lTWludXNBYnNTOiAke2RUeXBlfSA9IDEuMCAtIGFic1M7XG4gICAgdmFyIHR3b01pbnVzQWJzUzogJHtkVHlwZX0gPSAyLjAgLSBhYnNTO1xuICAgIHZhciBvbmVQbHVzQWJzUzogJHtkVHlwZX0gPSAxLjAgKyBhYnNTO1xuICAgIGNvZWZmc1swXSA9ICgoJHtjdWJpY0NvZWZmQX0gKiBvbmVQbHVzQWJzUyAtIDUgKiAke2N1YmljQ29lZmZBfSkgKiBvbmVQbHVzQWJzUyArIDggKiAke2N1YmljQ29lZmZBfSkgKiBvbmVQbHVzQWJzUyAtIDQgKiAke2N1YmljQ29lZmZBfTtcbiAgICBjb2VmZnNbMV0gPSAoKCR7Y3ViaWNDb2VmZkF9ICsgMikgKiBhYnNTIC0gKCR7Y3ViaWNDb2VmZkF9ICsgMykpICogYWJzUyAqIGFic1MgKyAxO1xuICAgIGNvZWZmc1syXSA9ICgoJHtjdWJpY0NvZWZmQX0gKyAyKSAqIG9uZU1pbnVzQWJzUyAtICgke2N1YmljQ29lZmZBfSArIDMpKSAqIG9uZU1pbnVzQWJzUyAqIG9uZU1pbnVzQWJzUyArIDE7XG4gICAgY29lZmZzWzNdID0gKCgke2N1YmljQ29lZmZBfSAqIHR3b01pbnVzQWJzUyAtIDUgKiAke2N1YmljQ29lZmZBfSkgKiB0d29NaW51c0Fic1MgKyA4ICogJHtjdWJpY0NvZWZmQX0pICogdHdvTWludXNBYnNTIC0gNCAqICR7Y3ViaWNDb2VmZkF9O1xuICAgIHJldHVybiBjb2VmZnM7XG4gIH1cblxuICBmbiBjdWJpY0ludGVycG9sYXRpb24xRCh4OiBhcnJheTwke2RUeXBlfSwgND4sIGNvZWZzOiBhcnJheTwke2RUeXBlfSwgND4pIC0+ICR7ZFR5cGV9IHtcbiAgICB2YXIgY29lZnNTdW06ICR7ZFR5cGV9ID0gY29lZnNbMF0gKyBjb2Vmc1sxXSArIGNvZWZzWzJdICsgY29lZnNbM107XG4gICAgcmV0dXJuICh4WzBdICogY29lZnNbMF0gKyB4WzFdICogY29lZnNbMV0rIHhbMl0gKiBjb2Vmc1syXSsgeFszXSAqIGNvZWZzWzNdKSAvIGNvZWZzU3VtO1xuICB9XG5cbiAgZm4gYmljdWJpY0ludGVycG9sYXRpb24ob3V0cHV0X2luZGljZXM6ICR7b3V0cHV0LnR5cGUuaW5kaWNlc30pIC0+ICR7ZFR5cGV9IHtcbiAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9ID0gb3V0cHV0X2luZGljZXM7XG4gICAgcmV0dXJuIGNvbEN1YmljSW50ZXJwb2xhdGlvbihpbnB1dF9pbmRpY2VzLCBvdXRwdXRfaW5kaWNlcyk7XG4gIH1cbiAgICBgO1xuICAgICAgfTtcbiAgICAgIHRyaWxpbmVhckludGVycG9sYXRpb24gPSAoaW5wdXQsIG91dHB1dCwgaW5wdXRTaGFwZSwgdXNlRXh0cmFwb2xhdGlvbiwgZXh0cmFwb2xhdGlvblZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTmNodyA9IHRydWU7XG4gICAgICAgIGNvbnN0IFtiYXRjaElkeCwgZGVwdGhJZHgsIGhlaWdodElkeCwgd2lkdGhJZHgsIGNoYW5uZWxJZHhdID0gaW5wdXRTaGFwZS5sZW5ndGggPT09IDMgPyBbLTEsIDAsIDEsIDIsIC0xXSA6IGlzTmNodyA/IFswLCAyLCAzLCA0LCAxXSA6IFswLCAxLCAyLCAzLCA0XTtcbiAgICAgICAgY29uc3QgZFR5cGUgPSBpbnB1dC50eXBlLnZhbHVlO1xuICAgICAgICByZXR1cm4gYFxuICAgIGZuIGdldElucHV0VmFsdWUoYmF0Y2g6IHUzMiwgY2hhbm5lbDogdTMyLCBkZXB0aDp1MzIsIGhlaWdodDogdTMyLCB3aWR0aDogdTMyKSAtPiAke2RUeXBlfSB7XG4gICAgICB2YXIgaW5wdXRfaW5kaWNlczogJHtpbnB1dC50eXBlLmluZGljZXN9O1xuICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KFwiaW5wdXRfaW5kaWNlc1wiLCBkZXB0aElkeCwgYG1heCgwLCBtaW4oZGVwdGgsICR7aW5wdXRTaGFwZVtkZXB0aElkeF19IC0gMSkpYCl9O1xuICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KFwiaW5wdXRfaW5kaWNlc1wiLCBoZWlnaHRJZHgsIGBtYXgoMCwgbWluKGhlaWdodCwgJHtpbnB1dFNoYXBlW2hlaWdodElkeF19IC0gMSkpYCl9O1xuICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KFwiaW5wdXRfaW5kaWNlc1wiLCB3aWR0aElkeCwgYG1heCgwLCBtaW4od2lkdGgsICR7aW5wdXRTaGFwZVt3aWR0aElkeF19IC0gMSkpYCl9O1xuICAgICAgJHtzZXRDaGFubmVsQW5kQmF0Y2hJbmRpY2VzKGlucHV0LCBjaGFubmVsSWR4LCBiYXRjaElkeCwgMyl9XG4gICAgICByZXR1cm4gJHtpbnB1dC5nZXRCeUluZGljZXMoXCJpbnB1dF9pbmRpY2VzXCIpfTtcbiAgICB9XG5cbiAgICBmbiB0cmlsaW5lYXJJbnRlcnBvbGF0aW9uKG91dHB1dF9pbmRpY2VzOiAke291dHB1dC50eXBlLmluZGljZXN9KSAtPiAke2RUeXBlfSB7XG4gICAgICB2YXIgb3JpZ2luYWxJbmRpY2VzID0gY2FsY3VsYXRlT3JpZ2luYWxJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0X2luZGljZXMpO1xuICAgICAgdmFyIGRlcHRoOiR7ZFR5cGV9ID0gb3JpZ2luYWxJbmRpY2VzWyR7ZGVwdGhJZHh9XTtcbiAgICAgIHZhciBoZWlnaHQ6JHtkVHlwZX0gPSBvcmlnaW5hbEluZGljZXNbJHtoZWlnaHRJZHh9XTtcbiAgICAgIHZhciB3aWR0aDoke2RUeXBlfSA9IG9yaWdpbmFsSW5kaWNlc1ske3dpZHRoSWR4fV07XG4gICAgICAke3VzZUV4dHJhcG9sYXRpb24gPyBgaWYgKGRlcHRoIDwgMCB8fCBkZXB0aCA+ICgke2lucHV0U2hhcGVbZGVwdGhJZHhdfSAtIDEpIHx8IGhlaWdodCA8IDAgfHwgaGVpZ2h0ID4gKCR7aW5wdXRTaGFwZVtoZWlnaHRJZHhdfSAtIDEpIHx8IHdpZHRoIDwgMCB8fCAod2lkdGggPiAke2lucHV0U2hhcGVbd2lkdGhJZHhdfSAtIDEpKSB7XG4gICAgICByZXR1cm4gJHtleHRyYXBvbGF0aW9uVmFsdWV9O1xuICAgICAgICB9YCA6IFwiXCJ9O1xuXG4gICAgZGVwdGggPSBtYXgoMCwgbWluKGRlcHRoLCAke2lucHV0U2hhcGVbZGVwdGhJZHhdfSAtIDEpKTtcbiAgICAgIGhlaWdodCA9IG1heCgwLCBtaW4oaGVpZ2h0LCAke2lucHV0U2hhcGVbaGVpZ2h0SWR4XX0gLSAxKSk7XG4gICAgICB3aWR0aCA9IG1heCgwLCBtaW4od2lkdGgsICR7aW5wdXRTaGFwZVt3aWR0aElkeF19IC0gMSkpO1xuICAgICAgdmFyIGRlcHRoMTogdTMyID0gdTMyKGRlcHRoKTtcbiAgICAgIHZhciBoZWlnaHQxOiB1MzIgPSB1MzIoaGVpZ2h0KTtcbiAgICAgIHZhciB3aWR0aDE6IHUzMiA9IHUzMih3aWR0aCk7XG4gICAgICB2YXIgZGVwdGgyOiB1MzIgPSB1MzIoZGVwdGggKyAxKTtcbiAgICAgIHZhciBoZWlnaHQyOiB1MzIgPSB1MzIoaGVpZ2h0ICsgMSk7XG4gICAgICB2YXIgd2lkdGgyOiB1MzIgPSB1MzIod2lkdGggKyAxKTtcbiAgICAgIHZhciBjaGFubmVsOiB1MzIgPSAke2lucHV0U2hhcGUubGVuZ3RoID4gMyA/IGB1MzIob3JpZ2luYWxJbmRpY2VzWyR7Y2hhbm5lbElkeH1dKWAgOiBcIjBcIn07XG4gICAgICB2YXIgYmF0Y2g6IHUzMiA9ICAke2lucHV0U2hhcGUubGVuZ3RoID4gMyA/IGB1MzIob3JpZ2luYWxJbmRpY2VzWyR7YmF0Y2hJZHh9XSlgIDogXCIwXCJ9O1xuXG4gICAgICB2YXIgeDExMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDEsIHdpZHRoMSk7XG4gICAgICB2YXIgeDExMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDEsIHdpZHRoMik7XG4gICAgICB2YXIgeDEyMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDIsIHdpZHRoMSk7XG4gICAgICB2YXIgeDEyMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDEsIGhlaWdodDIsIHdpZHRoMik7XG4gICAgICB2YXIgeDIxMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDEsIHdpZHRoMSk7XG4gICAgICB2YXIgeDIxMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDEsIHdpZHRoMik7XG4gICAgICB2YXIgeDIyMTogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDIsIHdpZHRoMSk7XG4gICAgICB2YXIgeDIyMjogJHtkVHlwZX0gPSBnZXRJbnB1dFZhbHVlKGJhdGNoLCBjaGFubmVsLCBkZXB0aDIsIGhlaWdodDIsIHdpZHRoMik7XG4gICAgICB2YXIgZHgxOiAke2RUeXBlfSA9IGFicyhkZXB0aCAtICR7ZFR5cGV9KGRlcHRoMSkpO1xuICAgICAgdmFyIGR4MjogJHtkVHlwZX0gPSBhYnMoJHtkVHlwZX0oZGVwdGgyKSAtIGRlcHRoKTtcbiAgICAgIHZhciBkeTE6ICR7ZFR5cGV9ID0gYWJzKGhlaWdodCAtICR7ZFR5cGV9KGhlaWdodDEpKTtcbiAgICAgIHZhciBkeTI6ICR7ZFR5cGV9ID0gYWJzKCR7ZFR5cGV9KGhlaWdodDIpIC0gaGVpZ2h0KTtcbiAgICAgIHZhciBkejE6ICR7ZFR5cGV9ID0gYWJzKHdpZHRoIC0gJHtkVHlwZX0od2lkdGgxKSk7XG4gICAgICB2YXIgZHoyOiAke2RUeXBlfSA9IGFicygke2RUeXBlfSh3aWR0aDIpIC0gd2lkdGgpO1xuICAgICAgaWYgKGRlcHRoMSA9PSBkZXB0aDIpIHtcbiAgICAgICAgZHgxID0gMC41O1xuICAgICAgICBkeDIgPSAwLjU7XG4gICAgICB9XG4gICAgICBpZiAoaGVpZ2h0MSA9PSBoZWlnaHQyKSB7XG4gICAgICAgIGR5MSA9IDAuNTtcbiAgICAgICAgZHkyID0gMC41O1xuICAgICAgfVxuICAgICAgaWYgKHdpZHRoMSA9PSB3aWR0aDIpIHtcbiAgICAgICAgZHoxID0gMC41O1xuICAgICAgICBkejIgPSAwLjU7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHgxMTEgKiBkeDIgKiBkeTIgKiBkejIgKyB4MTEyICogZHgyICogZHkyICogZHoxICsgeDEyMSAqIGR4MiAqIGR5MSAqZHoyICsgeDEyMiAqIGR4MiAqIGR5MSAqIGR6MSArXG4gICAgICAgICAgICAgIHgyMTEgKiBkeDEgKiBkeTIgKiBkejIgKyB4MjEyICogZHgxICogZHkyICogZHoxICsgeDIyMSAqIGR4MSAqIGR5MSAqZHoyICsgeDIyMiAqIGR4MSAqIGR5MSAqIGR6MSk7XG4gICAgfWA7XG4gICAgICB9O1xuICAgICAgY3JlYXRlUmVzaXplUHJvZ3JhbUluZm8gPSAoaW5wdXRUZW5zb3IsIGF0dHJpYnV0ZXMsIG9wc2V0VmVyc2lvbiwgc2NhbGVzSW5wdXQsIHNpemVzLCByb2lJbnB1dCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXRUZW5zb3IuZGltcztcbiAgICAgICAgY29uc3Qgcm9pID0gdXBkYXRlUm9JKHJvaUlucHV0LCBhdHRyaWJ1dGVzLmF4ZXMsIGlucHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgICAgbGV0IG91dHB1dFNoYXBlID0gaW5pdE91dHB1dFNoYXBlKGlucHV0U2hhcGUsIHNjYWxlc0lucHV0LCBzaXplcywgYXR0cmlidXRlcy5heGVzKTtcbiAgICAgICAgbGV0IHNjYWxlcyA9IHNjYWxlc0lucHV0LnNsaWNlKCk7XG4gICAgICAgIGlmIChzY2FsZXNJbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBzY2FsZXMgPSBpbnB1dFNoYXBlLm1hcCgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gMCA/IDEgOiBvdXRwdXRTaGFwZVtpbmRleF0gLyB2YWx1ZSk7XG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZXMua2VlcEFzcGVjdFJhdGlvUG9saWN5ICE9PSBcInN0cmV0Y2hcIikge1xuICAgICAgICAgICAgb3V0cHV0U2hhcGUgPSBhZGp1c3RPdXRwdXRTaGFwZShpbnB1dFNoYXBlLCBzY2FsZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcIm91dHB1dFwiLCBpbnB1dFRlbnNvci5kYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKFwiaW5wdXRcIiwgaW5wdXRUZW5zb3IuZGF0YVR5cGUsIGlucHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKG91dHB1dFNoYXBlKTtcbiAgICAgICAgY29uc3Qgbm9TY2FsZSA9IGlucHV0U2hhcGUubGVuZ3RoID09PSBvdXRwdXRTaGFwZS5sZW5ndGggJiYgaW5wdXRTaGFwZS5ldmVyeSgoZCwgaSkgPT4gZCA9PT0gb3V0cHV0U2hhcGVbaV0pO1xuICAgICAgICBjb25zdCB1c2VFeHRyYXBvbGF0aW9uID0gYXR0cmlidXRlcy5jb29yZGluYXRlVHJhbnNmb3JtTW9kZSA9PT0gXCJ0Zl9jcm9wX2FuZF9yZXNpemVcIjtcbiAgICAgICAgY29uc3QgZXh0cmFwb2xhdGlvblZhbHVlID0gYXR0cmlidXRlcy5leHRyYXBvbGF0aW9uVmFsdWU7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXQudHlwZS52YWx1ZTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgJHtub1NjYWxlID8gXCJcIiA6IGBcbiAgICAgICR7Z2V0T3JpZ2luYWxDb29yZGluYXRlRnJvbVJlc2l6ZWRDb29yZGluYXRlKGF0dHJpYnV0ZXMuY29vcmRpbmF0ZVRyYW5zZm9ybU1vZGUsIGRhdGFUeXBlKX07XG4gICAgICAkeygoKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVzLm1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJuZWFyZXN0XCI6XG4gICAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICR7Y2hlY2tJbnB1dEluZGljZXMoaW5wdXQsIGlucHV0U2hhcGUpfTtcbiAgICAgICAgICAgICAgJHtnZXROZWFyZXN0UGl4ZWxGcm9tT3JpZ2luYWwoYXR0cmlidXRlcy5uZWFyZXN0TW9kZSwgb3BzZXRWZXJzaW9uLCBkYXRhVHlwZSl9O1xuICAgICAgICAgICAgICAke2NhbGN1bGF0ZUlucHV0SW5kaWNlc0Zyb21PdXRwdXRJbmRpY2VzKFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBpbnB1dFNoYXBlLFxuICAgICAgICAgICAgICAgIG91dHB1dFNoYXBlLFxuICAgICAgICAgICAgICAgIHNjYWxlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgcm9pLmxlbmd0aCxcbiAgICAgICAgICAgICAgICB1c2VFeHRyYXBvbGF0aW9uXG4gICAgICAgICAgICAgICl9O1xuICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgY2FzZSBcImxpbmVhclwiOlxuICAgICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAke2NhbGN1bGF0ZU9yaWdpbmFsSW5kaWNlc0Zyb21PdXRwdXRJbmRpY2VzKG91dHB1dCwgaW5wdXRTaGFwZSwgb3V0cHV0U2hhcGUsIHNjYWxlcy5sZW5ndGgsIHJvaS5sZW5ndGgpfTtcbiAgICAgICAgICAgICAgJHsoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNoYXBlLmxlbmd0aCA9PT0gMiB8fCBpbnB1dFNoYXBlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2JpbGluZWFySW50ZXJwb2xhdGlvbihpbnB1dCwgb3V0cHV0LCBpbnB1dFNoYXBlLCB1c2VFeHRyYXBvbGF0aW9uLCBleHRyYXBvbGF0aW9uVmFsdWUpfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dFNoYXBlLmxlbmd0aCA9PT0gMyB8fCBpbnB1dFNoYXBlLmxlbmd0aCA9PT0gNSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3RyaWxpbmVhckludGVycG9sYXRpb24oaW5wdXQsIG91dHB1dCwgaW5wdXRTaGFwZSwgdXNlRXh0cmFwb2xhdGlvbiwgZXh0cmFwb2xhdGlvblZhbHVlKX1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkxpbmVhciBtb2RlIG9ubHkgc3VwcG9ydHMgaW5wdXQgZGltcyAyLCAzLCA0IGFuZCA1IGFyZSBzdXBwb3J0ZWQgaW4gbGluZWFyIG1vZGUuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkoKX07XG4gICAgICAgICAgICBgO1xuICAgICAgICAgICAgY2FzZSBcImN1YmljXCI6XG4gICAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAkeygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2hhcGUubGVuZ3RoID09PSAyIHx8IGlucHV0U2hhcGUubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYCR7YmljdWJpY0ludGVycG9sYXRpb24oXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgICAgIGlucHV0U2hhcGUsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFNoYXBlLFxuICAgICAgICAgICAgICAgICAgICBzY2FsZXMsXG4gICAgICAgICAgICAgICAgICAgIHJvaSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5jdWJpY0NvZWZmQSxcbiAgICAgICAgICAgICAgICAgICAgdXNlRXh0cmFwb2xhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5leHRyYXBvbGF0aW9uVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuZXhjbHVkZU91dHNpZGVcbiAgICAgICAgICAgICAgICAgICl9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDdWJpYyBtb2RlIG9ubHkgc3VwcG9ydHMgaW5wdXQgZGltcyAyIGFuZCA0IGFyZSBzdXBwb3J0ZWQgaW4gbGluZWFyIG1vZGUuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkoKX07XG4gICAgICAgICAgICBgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHJlc2l6ZSBtb2RlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKX07XG4gICAgICBgfVxuICAgICAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3JtKFwib3V0cHV0X3NpemVcIiwgXCJ1MzJcIikucmVnaXN0ZXJVbmlmb3JtKFwic2NhbGVzXCIsIFwiZjMyXCIsIHNjYWxlcy5sZW5ndGgpLnJlZ2lzdGVyVW5pZm9ybShcInJvaVwiLCBcImYzMlwiLCByb2kubGVuZ3RoKS5kZWNsYXJlVmFyaWFibGVzKGlucHV0LCBvdXRwdXQpfVxuICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJ1bmlmb3Jtcy5vdXRwdXRfc2l6ZVwiKX1cbiAgICAgICAgJHtub1NjYWxlID8gXCJvdXRwdXRbZ2xvYmFsX2lkeF0gPSBpbnB1dFtnbG9iYWxfaWR4XTtcIiA6IGBcbiAgICAgICAgbGV0IG91dHB1dF9pbmRpY2VzID0gJHtvdXRwdXQub2Zmc2V0VG9JbmRpY2VzKFwiZ2xvYmFsX2lkeFwiKX07XG4gICAgICAgIHZhciBpbnB1dF9pbmRpY2VzOiAke2lucHV0LnR5cGUuaW5kaWNlc307XG4gICAgICAgICR7KCgpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZXMubW9kZSkge1xuICAgICAgICAgICAgY2FzZSBcIm5lYXJlc3RcIjpcbiAgICAgICAgICAgICAgcmV0dXJuIGBpbnB1dF9pbmRpY2VzID0gY2FsY3VsYXRlSW5wdXRJbmRpY2VzRnJvbU91dHB1dEluZGljZXMob3V0cHV0X2luZGljZXMpO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0lucHV0SW5kaWNlcyhpbnB1dF9pbmRpY2VzKSkge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0W2dsb2JhbF9pZHhdID0gJHtpbnB1dC5nZXRCeUluZGljZXMoXCJpbnB1dF9pbmRpY2VzXCIpfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0W2dsb2JhbF9pZHhdID0gJHthdHRyaWJ1dGVzLmV4dHJhcG9sYXRpb25WYWx1ZX07XG4gICAgICAgICAgICAgICAgfWA7XG4gICAgICAgICAgICBjYXNlIFwibGluZWFyXCI6XG4gICAgICAgICAgICAgIHJldHVybiBgb3V0cHV0W2dsb2JhbF9pZHhdID0gJHtpbnB1dFNoYXBlLmxlbmd0aCA9PT0gMiB8fCBpbnB1dFNoYXBlLmxlbmd0aCA9PT0gNCA/IFwiYmlsaW5lYXJJbnRlcnBvbGF0aW9uXCIgOiBcInRyaWxpbmVhckludGVycG9sYXRpb25cIn0ob3V0cHV0X2luZGljZXMpO2A7XG4gICAgICAgICAgICBjYXNlIFwiY3ViaWNcIjpcbiAgICAgICAgICAgICAgcmV0dXJuIFwib3V0cHV0W2dsb2JhbF9pZHhdID0gYmljdWJpY0ludGVycG9sYXRpb24ob3V0cHV0X2luZGljZXMpO1wiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFVuc3VwcG9ydGVkIHJlc2l6ZSBtb2RlOiAke2F0dHJpYnV0ZXMubW9kZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCl9O1xuYH1cbiAgICAgIH1gO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiUmVzaXplXCIsXG4gICAgICAgICAgc2hhZGVyQ2FjaGU6IHtcbiAgICAgICAgICAgIGhpbnQ6IGAke2F0dHJpYnV0ZXMuY2FjaGVLZXl9fCR7b3BzZXRWZXJzaW9ufXwke3NjYWxlcy5sZW5ndGggPiAwID8gc2NhbGVzIDogXCJcIn18JHtzaXplcy5sZW5ndGggPiAwID8gc2l6ZXMgOiBcIlwifXwke3JvaS5sZW5ndGggPiAwID8gcm9pIDogXCJcIn18JHtub1NjYWxlfXwke2lucHV0U2hhcGV9YCxcbiAgICAgICAgICAgIGlucHV0RGVwZW5kZW5jaWVzOiBbXCJyYW5rXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2UsXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRUZW5zb3IuZGF0YVR5cGUgfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgb3V0cHV0U2l6ZSAvIDY0XG4gICAgICAgICAgICAgIC8qIHdvcmtncm91cCBzaXplICovXG4gICAgICAgICAgICApIH0sXG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IFtcbiAgICAgICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IG91dHB1dFNpemUgfSxcbiAgICAgICAgICAgICAgeyB0eXBlOiAxIC8qIGZsb2F0ICovLCBkYXRhOiBzY2FsZXMgfSxcbiAgICAgICAgICAgICAgeyB0eXBlOiAxIC8qIGZsb2F0ICovLCBkYXRhOiByb2kgfSxcbiAgICAgICAgICAgICAgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoaW5wdXRTaGFwZSwgb3V0cHV0U2hhcGUpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBnZXRPcHNldFZlcnNpb25Gcm9tQ3VzdG9tRGF0YUJ1ZmZlciA9IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbURhdGFCdWZmZXIgPSBjb250ZXh0LmN1c3RvbURhdGFCdWZmZXI7XG4gICAgICAgIGNvbnN0IGN1c3RvbURhdGFCdWZmZXIzMiA9IG5ldyBVaW50MzJBcnJheShjdXN0b21EYXRhQnVmZmVyLCBjdXN0b21EYXRhQnVmZmVyLmJ5dGVPZmZzZXQsIDEpO1xuICAgICAgICBjb25zdCBvcHNldFZlcnNpb24gPSBjdXN0b21EYXRhQnVmZmVyMzJbMF07XG4gICAgICAgIHJldHVybiBvcHNldFZlcnNpb247XG4gICAgICB9O1xuICAgICAgcmVzaXplID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc2NhbGVzID0gW107XG4gICAgICAgIGNvbnN0IHNpemVzID0gW107XG4gICAgICAgIGNvbnN0IHJvaSA9IFtdO1xuICAgICAgICBjb25zdCBvcHNldFZlcnNpb24gPSBnZXRPcHNldFZlcnNpb25Gcm9tQ3VzdG9tRGF0YUJ1ZmZlcihjb250ZXh0KTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzICE9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJPbmx5IGRlZmF1bHQgdmFsdWUgKDApIGZvciBBbnRpYWxpYXMgYXR0cmlidXRlIGlzIHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUlucHV0czIxKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzLCBvcHNldFZlcnNpb24sIHNjYWxlcywgc2l6ZXMsIHJvaSk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShcbiAgICAgICAgICBjcmVhdGVSZXNpemVQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0c1swXSwgYXR0cmlidXRlcywgb3BzZXRWZXJzaW9uLCBzY2FsZXMsIHNpemVzLCByb2kpLFxuICAgICAgICAgIHsgaW5wdXRzOiBbMF0gfVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIHBhcnNlUmVzaXplQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGFudGlhbGlhcyA9IGF0dHJpYnV0ZXMuYW50aWFsaWFzO1xuICAgICAgICBjb25zdCBheGVzID0gYXR0cmlidXRlcy5heGVzO1xuICAgICAgICBjb25zdCBjb29yZGluYXRlVHJhbnNmb3JtTW9kZSA9IGF0dHJpYnV0ZXMuY29vcmRpbmF0ZVRyYW5zZm9ybU1vZGU7XG4gICAgICAgIGNvbnN0IGN1YmljQ29lZmZBID0gYXR0cmlidXRlcy5jdWJpY0NvZWZmQTtcbiAgICAgICAgY29uc3QgZXhjbHVkZU91dHNpZGUgPSBhdHRyaWJ1dGVzLmV4Y2x1ZGVPdXRzaWRlICE9PSAwO1xuICAgICAgICBjb25zdCBleHRyYXBvbGF0aW9uVmFsdWUgPSBhdHRyaWJ1dGVzLmV4dHJhcG9sYXRpb25WYWx1ZTtcbiAgICAgICAgY29uc3Qga2VlcEFzcGVjdFJhdGlvUG9saWN5ID0gYXR0cmlidXRlcy5rZWVwQXNwZWN0UmF0aW9Qb2xpY3k7XG4gICAgICAgIGNvbnN0IG1vZGUgPSBhdHRyaWJ1dGVzLm1vZGU7XG4gICAgICAgIGNvbnN0IG5lYXJlc3RNb2RlID0gYXR0cmlidXRlcy5uZWFyZXN0TW9kZSA9PT0gXCJcIiA/IFwic2ltcGxlXCIgOiBhdHRyaWJ1dGVzLm5lYXJlc3RNb2RlO1xuICAgICAgICByZXR1cm4gY3JlYXRlQXR0cmlidXRlV2l0aENhY2hlS2V5KHtcbiAgICAgICAgICBhbnRpYWxpYXMsXG4gICAgICAgICAgYXhlcyxcbiAgICAgICAgICBjb29yZGluYXRlVHJhbnNmb3JtTW9kZSxcbiAgICAgICAgICBjdWJpY0NvZWZmQSxcbiAgICAgICAgICBleGNsdWRlT3V0c2lkZSxcbiAgICAgICAgICBleHRyYXBvbGF0aW9uVmFsdWUsXG4gICAgICAgICAga2VlcEFzcGVjdFJhdGlvUG9saWN5LFxuICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgbmVhcmVzdE1vZGVcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9yb3RhcnktZW1iZWRkaW5nLnRzXG4gIHZhciB2YWxpZGF0ZUlucHV0czIyLCBjcmVhdGVSb3RhcnlFbWJlZGRpbmdQcm9ncmFtSW5mbywgcm90YXJ5RW1iZWRkaW5nO1xuICB2YXIgaW5pdF9yb3RhcnlfZW1iZWRkaW5nID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9yb3RhcnktZW1iZWRkaW5nLnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfd2FzbV9jb21tb24oKTtcbiAgICAgIGluaXRfdXRpbCgpO1xuICAgICAgaW5pdF9hdHRyaWJ1dGVfd2l0aF9jYWNoZV9rZXkoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICB2YWxpZGF0ZUlucHV0czIyID0gKGlucHV0cywgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBbaW5wdXQsIHBvc2l0aW9uSWRzLCBjb3NDYWNoZSwgc2luQ2FjaGVdID0gaW5wdXRzO1xuICAgICAgICBjb25zdCB7IG51bUhlYWRzLCByb3RhcnlFbWJlZGRpbmdEaW0gfSA9IGF0dHJpYnV0ZXM7XG4gICAgICAgIGlmIChpbnB1dC5kaW1zLmxlbmd0aCAhPT0gMyAmJiBpbnB1dC5kaW1zLmxlbmd0aCAhPT0gNCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgJ3gnIGlzIGV4cGVjdGVkIHRvIGhhdmUgMyBvciA0IGRpbWVuc2lvbnMsIGdvdCAke2lucHV0LmRpbXMubGVuZ3RofWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghU2hhcGVVdGlsLmFyZUVxdWFsKHBvc2l0aW9uSWRzLmRpbXMsIFtdKSAmJiAhU2hhcGVVdGlsLmFyZUVxdWFsKHBvc2l0aW9uSWRzLmRpbXMsIFsxXSkgJiYgcG9zaXRpb25JZHMuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdwb3NpdGlvbl9pZHMnIGlzIGV4cGVjdGVkIHRvIGhhdmUgMCwgMSwgb3IgMiBkaW1lbnNpb25zLCBnb3QgJHtwb3NpdGlvbklkcy5kaW1zLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29zQ2FjaGUuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdjb3NfY2FjaGUnIGlzIGV4cGVjdGVkIHRvIGhhdmUgMiBkaW1lbnNpb25zLCBnb3QgJHtjb3NDYWNoZS5kaW1zLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2luQ2FjaGUuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdzaW5fY2FjaGUnIGlzIGV4cGVjdGVkIHRvIGhhdmUgMiBkaW1lbnNpb25zLCBnb3QgJHtzaW5DYWNoZS5kaW1zLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIVNoYXBlVXRpbC5hcmVFcXVhbChjb3NDYWNoZS5kaW1zLCBzaW5DYWNoZS5kaW1zKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIklucHV0cyAnY29zX2NhY2hlJyBhbmQgJ3Npbl9jYWNoZScgYXJlIGV4cGVjdGVkIHRvIGhhdmUgdGhlIHNhbWUgc2hhcGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdGFyeUVtYmVkZGluZ0RpbSA+IDAgJiYgbnVtSGVhZHMgPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJudW1faGVhZHMgbXVzdCBiZSBwcm92aWRlZCBpZiByb3RhcnlfZW1iZWRkaW5nX2RpbSBpcyBzcGVjaWZpZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmF0Y2hTaXplID0gaW5wdXQuZGltc1swXTtcbiAgICAgICAgY29uc3Qgc2VxdWVuY2VMZW5ndGggPSBpbnB1dC5kaW1zW2lucHV0LmRpbXMubGVuZ3RoIC0gMl07XG4gICAgICAgIGNvbnN0IG1heFNlcXVlbmNlTGVuZ3RoID0gY29zQ2FjaGUuZGltc1swXTtcbiAgICAgICAgY29uc3QgaGlkZGVuU2l6ZSA9IFNoYXBlVXRpbC5zaXplRnJvbURpbWVuc2lvbihpbnB1dC5kaW1zLCAxKSAvIHNlcXVlbmNlTGVuZ3RoO1xuICAgICAgICBjb25zdCBoZWFkU2l6ZSA9IHJvdGFyeUVtYmVkZGluZ0RpbSA9PT0gMCA/IGNvc0NhY2hlLmRpbXNbMV0gKiAyIDogaGlkZGVuU2l6ZSAvIG51bUhlYWRzO1xuICAgICAgICBpZiAocm90YXJ5RW1iZWRkaW5nRGltID4gaGVhZFNpemUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyb3RhcnlfZW1iZWRkaW5nX2RpbSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBoZWFkX3NpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uSWRzLmRpbXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgaWYgKGJhdGNoU2l6ZSAhPT0gcG9zaXRpb25JZHMuZGltc1swXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAncG9zaXRpb25faWRzJyBkaW1lbnNpb24gMCBzaG91bGQgYmUgb2Ygc2l6ZSBiYXRjaF9zaXplLCBnb3QgJHtwb3NpdGlvbklkcy5kaW1zWzBdfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2VxdWVuY2VMZW5ndGggIT09IHBvc2l0aW9uSWRzLmRpbXNbMV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgJ3Bvc2l0aW9uX2lkcycgZGltZW5zaW9uIDEgc2hvdWxkIGJlIG9mIHNpemUgc2VxdWVuY2VfbGVuZ3RoLCBnb3QgJHtwb3NpdGlvbklkcy5kaW1zWzFdfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaGVhZFNpemUgLyAyICE9PSBjb3NDYWNoZS5kaW1zWzFdICYmIHJvdGFyeUVtYmVkZGluZ0RpbSAvIDIgIT09IGNvc0NhY2hlLmRpbXNbMV0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0ICdjb3NfY2FjaGUnIGRpbWVuc2lvbiAxIHNob3VsZCBiZSBzYW1lIGFzIGhlYWRfc2l6ZSAvIDIgb3Igcm90YXJ5X2VtYmVkZGluZ19kaW0gLyAyLCBnb3QgJHtjb3NDYWNoZS5kaW1zWzFdfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXF1ZW5jZUxlbmd0aCA+IG1heFNlcXVlbmNlTGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVXBkYXRpbmcgY29zX2NhY2hlIGFuZCBzaW5fY2FjaGUgaW4gUm90YXJ5RW1iZWRkaW5nIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY3JlYXRlUm90YXJ5RW1iZWRkaW5nUHJvZ3JhbUluZm8gPSAoaW5wdXRzLCBhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaW50ZXJsZWF2ZWQsIG51bUhlYWRzLCByb3RhcnlFbWJlZGRpbmdEaW0sIHNjYWxlIH0gPSBhdHRyaWJ1dGVzO1xuICAgICAgICBjb25zdCBiYXRjaFNpemUgPSBpbnB1dHNbMF0uZGltc1swXTtcbiAgICAgICAgY29uc3QgYmF0Y2hTdHJpZGUgPSBTaGFwZVV0aWwuc2l6ZUZyb21EaW1lbnNpb24oaW5wdXRzWzBdLmRpbXMsIDEpO1xuICAgICAgICBjb25zdCBzZXF1ZW5jZUxlbmd0aCA9IGlucHV0c1swXS5kaW1zW2lucHV0c1swXS5kaW1zLmxlbmd0aCAtIDJdO1xuICAgICAgICBjb25zdCBoaWRkZW5TaXplID0gYmF0Y2hTdHJpZGUgLyBzZXF1ZW5jZUxlbmd0aDtcbiAgICAgICAgY29uc3QgaGFsZlJvdGFyeUVtYmVkZGluZ0RpbSA9IGlucHV0c1syXS5kaW1zWzFdO1xuICAgICAgICBjb25zdCBoZWFkU2l6ZSA9IHJvdGFyeUVtYmVkZGluZ0RpbSA9PT0gMCA/IGhhbGZSb3RhcnlFbWJlZGRpbmdEaW0gKiAyIDogaGlkZGVuU2l6ZSAvIG51bUhlYWRzO1xuICAgICAgICBjb25zdCBnbG9iYWxTaGFwZSA9IG5ldyBBcnJheShiYXRjaFNpemUsIHNlcXVlbmNlTGVuZ3RoLCBoaWRkZW5TaXplIC8gaGVhZFNpemUsIGhlYWRTaXplIC0gaGFsZlJvdGFyeUVtYmVkZGluZ0RpbSk7XG4gICAgICAgIGNvbnN0IGdsb2JhbFN0cmlkZXMgPSBTaGFwZVV0aWwuY29tcHV0ZVN0cmlkZXMoZ2xvYmFsU2hhcGUpO1xuICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXMgPSBbXG4gICAgICAgICAgeyB0eXBlOiAxIC8qIGZsb2F0ICovLCBkYXRhOiBzY2FsZSB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBnbG9iYWxTaGFwZSB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBnbG9iYWxTdHJpZGVzIH0sXG4gICAgICAgICAgLy8gc3RyaWRlcyBmb3IgYWRkcmVzc2luZyB0aGUgaW5wdXQvb3V0cHV0IHRlbnNvciwgaW4gcGVybXV0YXRlZCBvcmRlciB0byBhbGlnbiB3aXRoIHRoZSB1bmZvbGRlZCBnbG9iYWwgaW5kZXgsXG4gICAgICAgICAgLy8gaS5lLiBCU05IXG4gICAgICAgICAgLi4uaW5wdXRzWzBdLmRpbXMubGVuZ3RoID09PSAzID8gbmV3IEFycmF5KHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBbYmF0Y2hTdHJpZGUsIGhpZGRlblNpemUsIGhlYWRTaXplLCAxXSB9KSA6IFtdLFxuICAgICAgICAgIC4uLmlucHV0c1swXS5kaW1zLmxlbmd0aCA9PT0gNCA/IG5ldyBBcnJheShcbiAgICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBbYmF0Y2hTdHJpZGUsIGhlYWRTaXplLCBzZXF1ZW5jZUxlbmd0aCAqIGhlYWRTaXplLCAxXSB9XG4gICAgICAgICAgKSA6IFtdLFxuICAgICAgICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBpbnB1dHNbMV0uZGltcywgaW5wdXRzWzJdLmRpbXMsIGlucHV0c1szXS5kaW1zLCBpbnB1dHNbMF0uZGltcylcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRWYXJpYWJsZShcImlucHV0XCIsIGlucHV0c1swXS5kYXRhVHlwZSwgaW5wdXRzWzBdLmRpbXMubGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbklkcyA9IGlucHV0VmFyaWFibGUoXCJwb3NpdGlvbl9pZHNcIiwgaW5wdXRzWzFdLmRhdGFUeXBlLCBpbnB1dHNbMV0uZGltcy5sZW5ndGgpO1xuICAgICAgICAgIGNvbnN0IGNvc0NhY2hlID0gaW5wdXRWYXJpYWJsZShcImNvc19jYWNoZVwiLCBpbnB1dHNbMl0uZGF0YVR5cGUsIGlucHV0c1syXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgICAgY29uc3Qgc2luQ2FjaGUgPSBpbnB1dFZhcmlhYmxlKFwic2luX2NhY2hlXCIsIGlucHV0c1szXS5kYXRhVHlwZSwgaW5wdXRzWzNdLmRpbXMubGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcIm91dHB1dFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCk7XG4gICAgICAgICAgc2hhZGVySGVscGVyLnJlZ2lzdGVyVW5pZm9ybXMoW1xuICAgICAgICAgICAgeyBuYW1lOiBcInNjYWxlXCIsIHR5cGU6IFwiZjMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJnbG9iYWxfc2hhcGVcIiwgdHlwZTogXCJ1MzJcIiwgbGVuZ3RoOiBnbG9iYWxTaGFwZS5sZW5ndGggfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJnbG9iYWxfc3RyaWRlc1wiLCB0eXBlOiBcInUzMlwiLCBsZW5ndGg6IGdsb2JhbFN0cmlkZXMubGVuZ3RoIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiaW5wdXRfb3V0cHV0X3N0cmlkZXNcIiwgdHlwZTogXCJ1MzJcIiwgbGVuZ3RoOiBnbG9iYWxTdHJpZGVzLmxlbmd0aCB9XG4gICAgICAgICAgXSk7XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgcG9zaXRpb25JZHMsIGNvc0NhY2hlLCBzaW5DYWNoZSwgb3V0cHV0KX1cblxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoV09SS0dST1VQX1NJWkUpfVxuICAgICAgICAgIGxldCBoYWxmX3JvdGFyeV9lbWJfZGltID0gdW5pZm9ybXMuJHtjb3NDYWNoZS5uYW1lfV9zaGFwZVsxXTtcbiAgICAgICAgICBsZXQgYnNuaCA9IGdsb2JhbF9pZHggLyB1bmlmb3Jtcy5nbG9iYWxfc3RyaWRlcyAlIHVuaWZvcm1zLmdsb2JhbF9zaGFwZTtcbiAgICAgICAgICBsZXQgc2l6ZSA9IHVuaWZvcm1zLmdsb2JhbF9zaGFwZVswXSAqIHVuaWZvcm1zLmdsb2JhbF9zdHJpZGVzWzBdO1xuICAgICAgICAgICR7c2hhZGVySGVscGVyLmd1YXJkQWdhaW5zdE91dE9mQm91bmRzV29ya2dyb3VwU2l6ZXMoXCJzaXplXCIpfVxuXG4gICAgICAgICAgaWYgKGJzbmhbM10gPCBoYWxmX3JvdGFyeV9lbWJfZGltKSB7XG4gICAgICAgICAgICBsZXQgcG9zaXRpb25faWRzX2lkeCA9XG4gICAgICAgICAgICAgICAgJHtwb3NpdGlvbklkcy5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldChcImJzbmgueHlcIiwgb3V0cHV0VmFyaWFibGUoXCJcIiwgcG9zaXRpb25JZHMudHlwZS50ZW5zb3IsIDIpKX07XG4gICAgICAgICAgICBsZXQgcG9zaXRpb25faWQgPVxuICAgICAgICAgICAgICAgIHUzMigke3Bvc2l0aW9uSWRzLmdldEJ5T2Zmc2V0KFwicG9zaXRpb25faWRzX2lkeFwiKX0pICsgc2VsZWN0KDAsIGJzbmhbMV0sIHBvc2l0aW9uX2lkc19pZHggPT0gMCk7XG4gICAgICAgICAgICBsZXQgaSA9IGRvdChic25oLCB1bmlmb3Jtcy5pbnB1dF9vdXRwdXRfc3RyaWRlcykgKyBzZWxlY3QoMCwgYnNuaFszXSwgJHtpbnRlcmxlYXZlZH0pO1xuICAgICAgICAgICAgbGV0IGogPSBpICsgc2VsZWN0KGhhbGZfcm90YXJ5X2VtYl9kaW0sIDEsICR7aW50ZXJsZWF2ZWR9KTtcbiAgICAgICAgICAgIGxldCByZSA9ICR7aW5wdXQuZ2V0QnlPZmZzZXQoXCJpXCIpfSAqICR7Y29zQ2FjaGUuZ2V0KFwicG9zaXRpb25faWRcIiwgXCJic25oWzNdXCIpfSAtXG4gICAgICAgICAgICAgICAgJHtpbnB1dC5nZXRCeU9mZnNldChcImpcIil9ICogJHtzaW5DYWNoZS5nZXQoXCJwb3NpdGlvbl9pZFwiLCBcImJzbmhbM11cIil9O1xuICAgICAgICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXCJpXCIsIFwicmVcIil9XG4gICAgICAgICAgICBsZXQgaW0gPSAke2lucHV0LmdldEJ5T2Zmc2V0KFwiaVwiKX0gKiAke3NpbkNhY2hlLmdldChcInBvc2l0aW9uX2lkXCIsIFwiYnNuaFszXVwiKX0gK1xuICAgICAgICAgICAgICAgICR7aW5wdXQuZ2V0QnlPZmZzZXQoXCJqXCIpfSAqICR7Y29zQ2FjaGUuZ2V0KFwicG9zaXRpb25faWRcIiwgXCJic25oWzNdXCIpfTtcbiAgICAgICAgICAgICR7b3V0cHV0LnNldEJ5T2Zmc2V0KFwialwiLCBcImltXCIpfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgayA9IGRvdChic25oLCB1bmlmb3Jtcy5pbnB1dF9vdXRwdXRfc3RyaWRlcykgKyBoYWxmX3JvdGFyeV9lbWJfZGltO1xuICAgICAgICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXCJrXCIsIGlucHV0LmdldEJ5T2Zmc2V0KFwia1wiKSl9XG4gICAgICAgICAgfVxuICAgICAgICB9YDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBcIlJvdGFyeUVtYmVkZGluZ1wiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7XG4gICAgICAgICAgICBoaW50OiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoe1xuICAgICAgICAgICAgICBpbnRlcmxlYXZlZFxuICAgICAgICAgICAgfSkuY2FjaGVLZXksXG4gICAgICAgICAgICBpbnB1dERlcGVuZGVuY2llczogW1wicmFua1wiLCBcInJhbmtcIiwgXCJyYW5rXCIsIFwicmFua1wiXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlLFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBpbnB1dHNbMF0uZGltcywgZGF0YVR5cGU6IGlucHV0c1swXS5kYXRhVHlwZSB9XSxcbiAgICAgICAgICAgIGRpc3BhdGNoR3JvdXA6IHsgeDogTWF0aC5jZWlsKFNoYXBlVXRpbC5zaXplKGdsb2JhbFNoYXBlKSAvIFdPUktHUk9VUF9TSVpFKSB9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICByb3RhcnlFbWJlZGRpbmcgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czIyKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVJvdGFyeUVtYmVkZGluZ1Byb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCBhdHRyaWJ1dGVzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9za2lwLWxheWVyLW5vcm0udHNcbiAgdmFyIHZhbGlkYXRlSW5wdXRzMjMsIGNyZWF0ZVNraXBMYXllck5vcm1Qcm9ncmFtSW5mbywgc2tpcExheWVyTm9ybTtcbiAgdmFyIGluaXRfc2tpcF9sYXllcl9ub3JtID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9za2lwLWxheWVyLW5vcm0udHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgdmFsaWRhdGVJbnB1dHMyMyA9IChpbnB1dHMpID0+IHtcbiAgICAgICAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsYXllck5vcm0gcmVxdWlyZXMgYXQgbGVhc3QgMyBpbnB1dHMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzWzBdO1xuICAgICAgICBjb25zdCBza2lwID0gaW5wdXRzWzFdO1xuICAgICAgICBjb25zdCBnYW1tYSA9IGlucHV0c1syXTtcbiAgICAgICAgaWYgKGlucHV0LmRhdGFUeXBlICE9PSBza2lwLmRhdGFUeXBlIHx8IGlucHV0LmRhdGFUeXBlICE9PSBnYW1tYS5kYXRhVHlwZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFsbCBpbnB1dHMgbXVzdCBoYXZlIHRoZSBzYW1lIGRhdGEgdHlwZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQuZGltcy5sZW5ndGggIT09IDMgJiYgaW5wdXQuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBtdXN0IGJlIDJEIG9yIDNEXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChza2lwLmRpbXMubGVuZ3RoICE9PSAzICYmIHNraXAuZGltcy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTa2lwIG11c3QgYmUgMkQgb3IgM0RcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGlkZGVuU2l6ZSA9IGlucHV0LmRpbXNbaW5wdXQuZGltcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgc2VxdWVuY2VMZW5ndGggPSBpbnB1dC5kaW1zW2lucHV0LmRpbXMubGVuZ3RoIC0gMl07XG4gICAgICAgIGlmIChza2lwLmRpbXNbc2tpcC5kaW1zLmxlbmd0aCAtIDFdICE9PSBoaWRkZW5TaXplKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2tpcCBtdXN0IGhhdmUgdGhlIHNhbWUgaGlkZGVuIHNpemUgYXMgaW5wdXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNraXAuZGltc1tza2lwLmRpbXMubGVuZ3RoIC0gMl0gIT09IHNlcXVlbmNlTGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2tpcCBtdXN0IGhhdmUgdGhlIHNhbWUgc2VxdWVuY2UgbGVuZ3RoIGFzIGlucHV0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnYW1tYS5kaW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdhbW1hIG11c3QgYmUgMURcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdhbW1hLmRpbXNbZ2FtbWEuZGltcy5sZW5ndGggLSAxXSAhPT0gaGlkZGVuU2l6ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdhbW1hIG11c3QgaGF2ZSB0aGUgc2FtZSBoaWRkZW4gc2l6ZSBhcyBpbnB1dFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICBjb25zdCBiZXRhID0gaW5wdXRzWzNdO1xuICAgICAgICAgIGlmIChiZXRhLmRpbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCZXRhIG11c3QgYmUgMURcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChiZXRhLmRpbXNbYmV0YS5kaW1zLmxlbmd0aCAtIDFdICE9PSBoaWRkZW5TaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCZXRhIG11c3QgaGF2ZSB0aGUgc2FtZSBoaWRkZW4gc2l6ZSBhcyBpbnB1dFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgY29uc3QgYmlhcyA9IGlucHV0c1s0XTtcbiAgICAgICAgICBpZiAoYmlhcy5kaW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlhcyBtdXN0IGJlIDFEXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmlhcy5kaW1zW2JpYXMuZGltcy5sZW5ndGggLSAxXSAhPT0gaGlkZGVuU2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlhcyBtdXN0IGhhdmUgdGhlIHNhbWUgaGlkZGVuIHNpemUgYXMgaW5wdXRcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY3JlYXRlU2tpcExheWVyTm9ybVByb2dyYW1JbmZvID0gKGlucHV0cywgYXR0cmlidXRlcywgb3V0cHV0Q291bnQsIGlzVHJhaW5pbmcpID0+IHtcbiAgICAgICAgY29uc3Qgc2ltcGxpZmllZCA9IGF0dHJpYnV0ZXMuc2ltcGxpZmllZDtcbiAgICAgICAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgICBjb25zdCBpbnB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShpbnB1dFNoYXBlKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlO1xuICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gaW5wdXRTaXplO1xuICAgICAgICBjb25zdCBoaWRkZW5TaXplID0gaW5wdXRTaGFwZS5zbGljZSgtMSlbMF07XG4gICAgICAgIGNvbnN0IG1lYW5JbnZTdGREZXZEaW0gPSBpc1RyYWluaW5nID8gaW5wdXRTaGFwZS5zbGljZSgwLCAtMSkuY29uY2F0KDEpIDogW107XG4gICAgICAgIGNvbnN0IGhhc0JldGFJbnB1dCA9ICFzaW1wbGlmaWVkICYmIGlucHV0cy5sZW5ndGggPiAzO1xuICAgICAgICBjb25zdCBoYXNCaWFzSW5wdXQgPSBpbnB1dHMubGVuZ3RoID4gNDtcbiAgICAgICAgY29uc3QgaGFzTWVhbk91dHB1dCA9IGlzVHJhaW5pbmcgJiYgb3V0cHV0Q291bnQgPiAxO1xuICAgICAgICBjb25zdCBoYXNJbnZTdGREZXZPdXRwdXQgPSBpc1RyYWluaW5nICYmIG91dHB1dENvdW50ID4gMjtcbiAgICAgICAgY29uc3QgaGFzSW5wdXRTa2lwQmlhc1N1bU91dHB1dCA9IG91dHB1dENvdW50ID4gMztcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMoaGlkZGVuU2l6ZSk7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IFtcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0U2l6ZSB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBjb21wb25lbnRzIH0sXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IGhpZGRlblNpemUgfSxcbiAgICAgICAgICB7IHR5cGU6IDEgLyogZmxvYXQgKi8sIGRhdGE6IGF0dHJpYnV0ZXMuZXBzaWxvbiB9XG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGdldFNoYWRlclNvdXJjZSA9IChzaGFkZXJIZWxwZXIpID0+IHtcbiAgICAgICAgICBjb25zdCB1bmlmb3Jtc0FycmF5ID0gW1xuICAgICAgICAgICAgeyBuYW1lOiBcIm91dHB1dF9zaXplXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJjb21wb25lbnRzXCIsIHR5cGU6IFwidTMyXCIgfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJoaWRkZW5fc2l6ZVwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiZXBzaWxvblwiLCB0eXBlOiBcImYzMlwiIH1cbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IFtcbiAgICAgICAgICAgIGlucHV0VmFyaWFibGUoXCJ4XCIsIGlucHV0c1swXS5kYXRhVHlwZSwgaW5wdXRzWzBdLmRpbXMsIGNvbXBvbmVudHMpLFxuICAgICAgICAgICAgaW5wdXRWYXJpYWJsZShcInNraXBcIiwgaW5wdXRzWzFdLmRhdGFUeXBlLCBpbnB1dHNbMV0uZGltcywgY29tcG9uZW50cyksXG4gICAgICAgICAgICBpbnB1dFZhcmlhYmxlKFwiZ2FtbWFcIiwgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcywgY29tcG9uZW50cylcbiAgICAgICAgICBdO1xuICAgICAgICAgIGlmIChoYXNCZXRhSW5wdXQpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKGlucHV0VmFyaWFibGUoXCJiZXRhXCIsIGlucHV0c1szXS5kYXRhVHlwZSwgaW5wdXRzWzNdLmRpbXMsIGNvbXBvbmVudHMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhc0JpYXNJbnB1dCkge1xuICAgICAgICAgICAgdmFyaWFibGVzLnB1c2goaW5wdXRWYXJpYWJsZShcImJpYXNcIiwgaW5wdXRzWzRdLmRhdGFUeXBlLCBpbnB1dHNbNF0uZGltcywgY29tcG9uZW50cykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXJpYWJsZXMucHVzaChvdXRwdXRWYXJpYWJsZShcIm91dHB1dFwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLCBjb21wb25lbnRzKSk7XG4gICAgICAgICAgaWYgKGhhc01lYW5PdXRwdXQpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKG91dHB1dFZhcmlhYmxlKFwibWVhbl9vdXRwdXRcIiwgMSAvKiBmbG9hdCAqLywgbWVhbkludlN0ZERldkRpbSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFzSW52U3RkRGV2T3V0cHV0KSB7XG4gICAgICAgICAgICB2YXJpYWJsZXMucHVzaChvdXRwdXRWYXJpYWJsZShcImludl9zdGRfb3V0cHV0XCIsIDEgLyogZmxvYXQgKi8sIG1lYW5JbnZTdGREZXZEaW0pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhc0lucHV0U2tpcEJpYXNTdW1PdXRwdXQpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKG91dHB1dFZhcmlhYmxlKFwiaW5wdXRfc2tpcF9iaWFzX3N1bVwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIG91dHB1dFNoYXBlLCBjb21wb25lbnRzKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0c1swXS5kYXRhVHlwZSk7XG4gICAgICAgICAgcmV0dXJuIGBcblxuICAgICAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3Jtc0FycmF5KS5kZWNsYXJlVmFyaWFibGVzKC4uLnZhcmlhYmxlcyl9XG5cbiAgICAgICR7c2hhZGVySGVscGVyLm1haW5TdGFydCgpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMub3V0cHV0X3NpemUgLyB1bmlmb3Jtcy5oaWRkZW5fc2l6ZVwiKX1cbiAgICAgICAgbGV0IGhpZGRlbl9zaXplX3ZlY3Rvcml6ZWQ6IHUzMiA9IHVuaWZvcm1zLmhpZGRlbl9zaXplIC8gdW5pZm9ybXMuY29tcG9uZW50cztcbiAgICAgICAgbGV0IG9mZnNldCA9IGdsb2JhbF9pZHggKiBoaWRkZW5fc2l6ZV92ZWN0b3JpemVkO1xuICAgICAgICB2YXIgc3VtID0gJHtmaWxsVmVjdG9yKFwiZjMyXCIsIGNvbXBvbmVudHMpfTtcbiAgICAgICAgdmFyIHNxdWFyZVN1bSA9ICR7ZmlsbFZlY3RvcihcImYzMlwiLCBjb21wb25lbnRzKX07XG4gICAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCBoaWRkZW5fc2l6ZV92ZWN0b3JpemVkOyBpKyspIHtcbiAgICAgICAgICBsZXQgc2tpcF92YWx1ZSA9IHNraXBbb2Zmc2V0ICsgaV07XG4gICAgICAgICAgbGV0IGJpYXNfdmFsdWUgPSAke2hhc0JpYXNJbnB1dCA/IFwiYmlhc1tpXVwiIDogZGF0YVR5cGUgKyBcIigwLjApXCJ9O1xuICAgICAgICAgIGxldCBpbnB1dF92YWx1ZSA9IHhbb2Zmc2V0ICsgaV07XG4gICAgICAgICAgbGV0IHZhbHVlID0gaW5wdXRfdmFsdWUgKyBza2lwX3ZhbHVlICsgYmlhc192YWx1ZTtcbiAgICAgICAgICAke2hhc0lucHV0U2tpcEJpYXNTdW1PdXRwdXQgPyBcImlucHV0X3NraXBfYmlhc19zdW1bb2Zmc2V0ICsgaV0gPSB2YWx1ZTtcIiA6IFwiXCJ9XG4gICAgICAgICAgb3V0cHV0W29mZnNldCArIGldID0gdmFsdWU7XG4gICAgICAgICAgbGV0IGYzMl92YWx1ZSA9ICR7Y2FzdFRvRjMyKGRhdGFUeXBlLCBjb21wb25lbnRzLCBcInZhbHVlXCIpfTtcbiAgICAgICAgICBzdW0gKz0gZjMyX3ZhbHVlO1xuICAgICAgICAgIHNxdWFyZVN1bSArPSBmMzJfdmFsdWUgKiBmMzJfdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lYW4gPSAke3N1bVZlY3RvcihcInN1bVwiLCBjb21wb25lbnRzKX0gLyBmMzIodW5pZm9ybXMuaGlkZGVuX3NpemUpO1xuICAgICAgICBsZXQgaW52X3N0ZF9kZXYgPSBpbnZlcnNlU3FydCgke3N1bVZlY3RvcihcInNxdWFyZVN1bVwiLCBjb21wb25lbnRzKX0gLyBmMzIodW5pZm9ybXMuaGlkZGVuX3NpemUpICR7c2ltcGxpZmllZCA/IFwiXCIgOiBcIi0gbWVhbiAqIG1lYW5cIn0gKyB1bmlmb3Jtcy5lcHNpbG9uKTtcbiAgICAgICAgJHtoYXNNZWFuT3V0cHV0ID8gXCJtZWFuX291dHB1dFtnbG9iYWxfaWR4XSA9IG1lYW47XCIgOiBcIlwifVxuICAgICAgICAke2hhc0ludlN0ZERldk91dHB1dCA/IFwiaW52X3N0ZF9vdXRwdXRbZ2xvYmFsX2lkeF0gPSBpbnZfc3RkX2RldjtcIiA6IFwiXCJ9XG4gICAgICAgIGZvciAodmFyIGk6IHUzMiA9IDA7IGkgPCBoaWRkZW5fc2l6ZV92ZWN0b3JpemVkOyBpKyspIHtcbiAgICAgICAgICBvdXRwdXRbb2Zmc2V0ICsgaV0gPSAob3V0cHV0W29mZnNldCArIGldICR7c2ltcGxpZmllZCA/IFwiXCIgOiBgLSAke2RhdGFUeXBlfShtZWFuKWB9KSAqICR7ZGF0YVR5cGV9KGludl9zdGRfZGV2KSAqIGdhbW1hW2ldICR7aGFzQmV0YUlucHV0ID8gXCIrIGJldGFbaV1cIiA6IFwiXCJ9O1xuICAgICAgICB9XG4gICAgICB9YDtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlIH1dO1xuICAgICAgICBpZiAob3V0cHV0Q291bnQgPiAxKSB7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHsgZGltczogbWVhbkludlN0ZERldkRpbSwgZGF0YVR5cGU6IDEgLyogZmxvYXQgKi8gfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG91dHB1dENvdW50ID4gMikge1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7IGRpbXM6IG1lYW5JbnZTdGREZXZEaW0sIGRhdGFUeXBlOiAxIC8qIGZsb2F0ICovIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdXRwdXRDb3VudCA+IDMpIHtcbiAgICAgICAgICBvdXRwdXRzLnB1c2goeyBkaW1zOiBpbnB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJTa2lwTGF5ZXJOb3JtYWxpemF0aW9uXCIsXG4gICAgICAgICAgc2hhZGVyQ2FjaGU6IHtcbiAgICAgICAgICAgIGhpbnQ6IGAke2NvbXBvbmVudHN9OyR7aGFzTWVhbk91dHB1dH07JHtoYXNJbnZTdGREZXZPdXRwdXR9OyR7aGFzSW5wdXRTa2lwQmlhc1N1bU91dHB1dH1gLFxuICAgICAgICAgICAgaW5wdXREZXBlbmRlbmNpZXM6IGlucHV0cy5tYXAoKF9pbnB1dCwgX2luZGV4KSA9PiBcInR5cGVcIilcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoeyBvdXRwdXRzLCBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChvdXRwdXRTaXplIC8gaGlkZGVuU2l6ZSAvIDY0KSB9LCBwcm9ncmFtVW5pZm9ybXMgfSlcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBza2lwTGF5ZXJOb3JtID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgaXNUcmFpbmluZyA9IGZhbHNlO1xuICAgICAgICB2YWxpZGF0ZUlucHV0czIzKGNvbnRleHQuaW5wdXRzKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IFswXTtcbiAgICAgICAgaWYgKGNvbnRleHQub3V0cHV0Q291bnQgPiAxKSB7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKGlzVHJhaW5pbmcgPyAxIDogLTMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0Lm91dHB1dENvdW50ID4gMikge1xuICAgICAgICAgIG91dHB1dHMucHVzaChpc1RyYWluaW5nID8gMiA6IC0zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dC5vdXRwdXRDb3VudCA+IDMpIHtcbiAgICAgICAgICBvdXRwdXRzLnB1c2goMyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5jb21wdXRlKFxuICAgICAgICAgIGNyZWF0ZVNraXBMYXllck5vcm1Qcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcywgY29udGV4dC5vdXRwdXRDb3VudCwgaXNUcmFpbmluZyksXG4gICAgICAgICAgeyBvdXRwdXRzIH1cbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3NsaWNlLnRzXG4gIHZhciB2YWxpZGF0ZUlucHV0czI0LCByZWFkSW5wdXQsIGNyZWF0ZVNsaWNlQXR0cmlidXRlc0Zyb21JbnB1dHMsIGZpeFN0YXJ0RW5kVmFsdWVzLCBjYWxjdWxhdGVJbnB1dEluZGljZXNJbXBsLCBjcmVhdGVTbGljZVByb2dyYW1JbmZvLCBzbGljZSwgcGFyc2VTbGljZUF0dHJpYnV0ZXM7XG4gIHZhciBpbml0X3NsaWNlID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy9zbGljZS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfYXR0cmlidXRlX3dpdGhfY2FjaGVfa2V5KCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgdmFsaWRhdGVJbnB1dHMyNCA9IChpbnB1dHMsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gZmV3IGlucHV0c1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXR0cmlidXRlcy5heGVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmF4ZXMubGVuZ3RoICE9PSBhdHRyaWJ1dGVzLnN0YXJ0cy5sZW5ndGggfHwgYXR0cmlidXRlcy5heGVzLmxlbmd0aCAhPT0gYXR0cmlidXRlcy5lbmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXhlcywgc3RhcnRzIGFuZCBlbmRzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RhcnRzLmxlbmd0aCAhPT0gYXR0cmlidXRlcy5lbmRzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInN0YXJ0cyBhbmQgZW5kcyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0cy5zbGljZSgxKS5mb3JFYWNoKChfLCBpZHgpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXRzW2lkeCArIDFdLmRhdGFUeXBlICE9PSA2IC8qIGludDMyICovICYmIGlucHV0c1tpZHggKyAxXS5kYXRhVHlwZSAhPT0gNyAvKiBpbnQ2NCAqLykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAke2lkeH0gbXVzdCBiZSBhbiBhcnJheSBvZiBpbnQzMiBvciBpbnQ2NGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVhZElucHV0ID0gKGlucHV0cywgaWR4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gW107XG4gICAgICAgIGlmIChpbnB1dHMubGVuZ3RoID4gaWR4KSB7XG4gICAgICAgICAgaWYgKGlucHV0c1tpZHhdLmRhdGFUeXBlID09PSA3IC8qIGludDY0ICovKSB7XG4gICAgICAgICAgICBpbnB1dHNbaWR4XS5nZXRCaWdJbnQ2NEFycmF5KCkuZm9yRWFjaCgodikgPT4gaW5wdXQucHVzaChOdW1iZXIodikpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0c1tpZHhdLmRhdGFUeXBlID09PSA2IC8qIGludDMyICovKSB7XG4gICAgICAgICAgICBpbnB1dHNbaWR4XS5nZXRJbnQzMkFycmF5KCkuZm9yRWFjaCgodikgPT4gaW5wdXQucHVzaChOdW1iZXIodikpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAke2lkeH0gbXVzdCBiZSBhbiBhcnJheSBvZiBpbnQzMiBvciBpbnQ2NGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICB9O1xuICAgICAgY3JlYXRlU2xpY2VBdHRyaWJ1dGVzRnJvbUlucHV0cyA9IChpbnB1dHMsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRzID0gcmVhZElucHV0KGlucHV0cywgMSk7XG4gICAgICAgICAgY29uc3QgZW5kcyA9IHJlYWRJbnB1dChpbnB1dHMsIDIpO1xuICAgICAgICAgIGxldCBheGVzID0gcmVhZElucHV0KGlucHV0cywgMyk7XG4gICAgICAgICAgaWYgKGF4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBheGVzID0gWy4uLkFycmF5KGlucHV0c1swXS5kaW1zLmxlbmd0aCkua2V5cygpXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7IHN0YXJ0cywgZW5kcywgYXhlcyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGZpeFN0YXJ0RW5kVmFsdWVzID0gKHZhbHVlLCBpbmRleCwgaW5wdXRTaGFwZSwgYXhlcywgc3RlcHMpID0+IHtcbiAgICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgICBuZXdWYWx1ZSArPSBpbnB1dFNoYXBlW2F4ZXNbaW5kZXhdXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcHNbaW5kZXhdIDwgMCkge1xuICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihuZXdWYWx1ZSwgaW5wdXRTaGFwZVtheGVzW2luZGV4XV0gLSAxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKG5ld1ZhbHVlLCBpbnB1dFNoYXBlW2F4ZXNbaW5kZXhdXSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2FsY3VsYXRlSW5wdXRJbmRpY2VzSW1wbCA9IChpbnB1dCwgb3V0cHV0LCBpbnB1dFNoYXBlKSA9PiBgZm4gY2FsY3VsYXRlSW5wdXRJbmRpY2VzKG91dHB1dF9pbmRpY2VzOiAke291dHB1dC50eXBlLmluZGljZXN9KSAtPiAke2lucHV0LnR5cGUuaW5kaWNlc30ge1xuICAgICAgICAgIHZhciBpbnB1dF9pbmRpY2VzOiAke2lucHV0LnR5cGUuaW5kaWNlc307XG4gICAgICAgICAgdmFyIGNhcnJ5ID0gMHU7XG4gICAgICAgICAgZm9yICh2YXIgaSA9ICR7aW5wdXRTaGFwZS5sZW5ndGh9OyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgbGV0IGlucHV0X3NoYXBlX2kgPSAke2dldEVsZW1lbnRBdChcInVuaWZvcm1zLmlucHV0X3NoYXBlXCIsIFwiaVwiLCBpbnB1dFNoYXBlLmxlbmd0aCl9O1xuICAgICAgICAgICAgbGV0IHN0ZXBzX2kgPSAke2dldEVsZW1lbnRBdChcInVuaWZvcm1zLnN0ZXBzXCIsIFwiaVwiLCBpbnB1dFNoYXBlLmxlbmd0aCl9O1xuICAgICAgICAgICAgbGV0IHNpZ25zX2kgPSAke2dldEVsZW1lbnRBdChcInVuaWZvcm1zLnNpZ25zXCIsIFwiaVwiLCBpbnB1dFNoYXBlLmxlbmd0aCl9O1xuICAgICAgICAgICAgbGV0IHN0YXJ0c19pID0gJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy5zdGFydHNcIiwgXCJpXCIsIGlucHV0U2hhcGUubGVuZ3RoKX07XG4gICAgICAgICAgICB2YXIgb3V0cHV0X2luZGV4ID0gJHtvdXRwdXQuaW5kaWNlc0dldChcIm91dHB1dF9pbmRpY2VzXCIsIFwiaVwiKX07XG4gICAgICAgICAgICB2YXIgaW5wdXRfaW5kZXggPSBvdXRwdXRfaW5kZXggKiBzdGVwc19pICsgc3RhcnRzX2kgKyBjYXJyeTtcbiAgICAgICAgICAgIGNhcnJ5ID0gaW5wdXRfaW5kZXggLyBpbnB1dF9zaGFwZV9pO1xuICAgICAgICAgICAgaW5wdXRfaW5kZXggPSBpbnB1dF9pbmRleCAlIGlucHV0X3NoYXBlX2k7XG4gICAgICAgICAgICBpZiAoc2lnbnNfaSA8IDApIHtcbiAgICAgICAgICAgICAgaW5wdXRfaW5kZXggPSBpbnB1dF9zaGFwZV9pIC0gaW5wdXRfaW5kZXggLSAxdSArIHN0YXJ0c19pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHtpbnB1dC5pbmRpY2VzU2V0KFwiaW5wdXRfaW5kaWNlc1wiLCBcImlcIiwgXCJpbnB1dF9pbmRleFwiKX07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpbnB1dF9pbmRpY2VzO1xuICAgICAgfWA7XG4gICAgICBjcmVhdGVTbGljZVByb2dyYW1JbmZvID0gKGlucHV0cywgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXRzWzBdLmRpbXM7XG4gICAgICAgIGNvbnN0IGlucHV0U2l6ZSA9IFNoYXBlVXRpbC5zaXplKGlucHV0U2hhcGUpO1xuICAgICAgICBjb25zdCBheGVzID0gYXR0cmlidXRlcy5heGVzLmxlbmd0aCA+IDAgPyBTaGFwZVV0aWwubm9ybWFsaXplQXhlcyhhdHRyaWJ1dGVzLmF4ZXMsIGlucHV0U2hhcGUubGVuZ3RoKSA6IFsuLi5BcnJheShpbnB1dFNoYXBlLmxlbmd0aCkua2V5cygpXTtcbiAgICAgICAgbGV0IHN0ZXBzID0gcmVhZElucHV0KGlucHV0cywgNCk7XG4gICAgICAgIHN0ZXBzLmZvckVhY2goKHN0ZXApID0+IHN0ZXAgIT09IDAgfHwgKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdGVwIGNhbm5vdCBiZSAwXCIpO1xuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChzdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBzdGVwcyA9IEFycmF5KGF4ZXMubGVuZ3RoKS5maWxsKDEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0cyA9IGF0dHJpYnV0ZXMuc3RhcnRzLm1hcCgoc3RhcnQsIGkpID0+IGZpeFN0YXJ0RW5kVmFsdWVzKHN0YXJ0LCBpLCBpbnB1dFNoYXBlLCBheGVzLCBzdGVwcykpO1xuICAgICAgICBjb25zdCBlbmRzID0gYXR0cmlidXRlcy5lbmRzLm1hcCgoZW5kLCBpKSA9PiBmaXhTdGFydEVuZFZhbHVlcyhlbmQsIGksIGlucHV0U2hhcGUsIGF4ZXMsIHN0ZXBzKSk7XG4gICAgICAgIGlmIChheGVzLmxlbmd0aCAhPT0gc3RhcnRzLmxlbmd0aCB8fCBheGVzLmxlbmd0aCAhPT0gZW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdGFydCwgZW5kcyBhbmQgYXhlcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4ZXMubGVuZ3RoICE9PSBpbnB1dFNoYXBlLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTaGFwZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFheGVzLmluY2x1ZGVzKGkpKSB7XG4gICAgICAgICAgICAgIHN0YXJ0cy5zcGxpY2UoaSwgMCwgMCk7XG4gICAgICAgICAgICAgIGVuZHMuc3BsaWNlKGksIDAsIGlucHV0U2hhcGVbaV0pO1xuICAgICAgICAgICAgICBzdGVwcy5zcGxpY2UoaSwgMCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25zID0gc3RlcHMubWFwKChzdGVwKSA9PiBNYXRoLnNpZ24oc3RlcCkpO1xuICAgICAgICBzdGVwcy5mb3JFYWNoKChzdGVwLCBpLCBhcnJheSkgPT4ge1xuICAgICAgICAgIGlmIChzdGVwIDwgMCkge1xuICAgICAgICAgICAgY29uc3QgbnVtU3RlcHMgPSAoZW5kc1tpXSAtIHN0YXJ0c1tpXSkgLyBzdGVwO1xuICAgICAgICAgICAgY29uc3QgbmV3RW5kID0gc3RhcnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBuZXdFbmQgKyBudW1TdGVwcyAqIHN0ZXBzW2ldO1xuICAgICAgICAgICAgc3RhcnRzW2ldID0gbmV3U3RhcnQ7XG4gICAgICAgICAgICBlbmRzW2ldID0gbmV3RW5kO1xuICAgICAgICAgICAgYXJyYXlbaV0gPSAtc3RlcDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IGlucHV0U2hhcGUuc2xpY2UoMCk7XG4gICAgICAgIGF4ZXMuZm9yRWFjaCgoYXhpcywgXykgPT4ge1xuICAgICAgICAgIG91dHB1dFNoYXBlW2F4aXNdID0gTWF0aC5jZWlsKChlbmRzW2F4aXNdIC0gc3RhcnRzW2F4aXNdKSAvIHN0ZXBzW2F4aXNdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFRlbnNvckluZm8gPSB7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogaW5wdXRzWzBdLmRhdGFUeXBlIH07XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKFwib3V0cHV0XCIsIGlucHV0c1swXS5kYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dFZhcmlhYmxlKFwiaW5wdXRcIiwgaW5wdXRzWzBdLmRhdGFUeXBlLCBpbnB1dHNbMF0uZGltcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFtcbiAgICAgICAgICB7IG5hbWU6IFwib3V0cHV0U2l6ZVwiLCB0eXBlOiBcInUzMlwiIH0sXG4gICAgICAgICAgeyBuYW1lOiBcInN0YXJ0c1wiLCB0eXBlOiBcInUzMlwiLCBsZW5ndGg6IHN0YXJ0cy5sZW5ndGggfSxcbiAgICAgICAgICB7IG5hbWU6IFwic2lnbnNcIiwgdHlwZTogXCJpMzJcIiwgbGVuZ3RoOiBzaWducy5sZW5ndGggfSxcbiAgICAgICAgICB7IG5hbWU6IFwic3RlcHNcIiwgdHlwZTogXCJ1MzJcIiwgbGVuZ3RoOiBzdGVwcy5sZW5ndGggfVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBwcm9ncmFtVW5pZm9ybXMgPSBbXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IG91dHB1dFNpemUgfSxcbiAgICAgICAgICB7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogc3RhcnRzIH0sXG4gICAgICAgICAgeyB0eXBlOiA2IC8qIGludDMyICovLCBkYXRhOiBzaWducyB9LFxuICAgICAgICAgIHsgdHlwZTogMTIgLyogdWludDMyICovLCBkYXRhOiBzdGVwcyB9LFxuICAgICAgICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0c1swXS5kaW1zLCBvdXRwdXRTaGFwZSlcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3Jtcyh1bmlmb3JtcykuZGVjbGFyZVZhcmlhYmxlcyhpbnB1dCwgb3V0cHV0KX1cbiAgICAgICAgJHtjYWxjdWxhdGVJbnB1dEluZGljZXNJbXBsKGlucHV0LCBvdXRwdXQsIGlucHV0U2hhcGUpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMub3V0cHV0U2l6ZVwiKX1cbiAgICAgICAgICBsZXQgb3V0cHV0X2luZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoXCJnbG9iYWxfaWR4XCIpfTtcbiAgICAgICAgICBsZXQgaW5wdXRfaW5kaWNlcyA9IGNhbGN1bGF0ZUlucHV0SW5kaWNlcyhvdXRwdXRfaW5kaWNlcyk7XG4gICAgICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIsIGlucHV0LmdldEJ5SW5kaWNlcyhcImlucHV0X2luZGljZXNcIikpfVxuICAgICAgfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJTbGljZVwiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGhpbnQ6IGAke3NpZ25zLmxlbmd0aH1fJHtzdGFydHMubGVuZ3RofV8ke3N0ZXBzLmxlbmd0aH1gLCBpbnB1dERlcGVuZGVuY2llczogW1wicmFua1wiXSB9LFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogW291dHB1dFRlbnNvckluZm9dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiBNYXRoLmNlaWwoXG4gICAgICAgICAgICAgIGlucHV0U2l6ZSAvIDY0XG4gICAgICAgICAgICAgIC8qIHdvcmtncm91cCBzaXplICovXG4gICAgICAgICAgICApIH0sXG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXNcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHNsaWNlID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgdmFsaWRhdGVJbnB1dHMyNChjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRBdHRyaWJ1dGVzID0gY3JlYXRlU2xpY2VBdHRyaWJ1dGVzRnJvbUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVTbGljZVByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCB1cGRhdGVkQXR0cmlidXRlcyksIHsgaW5wdXRzOiBbMF0gfSk7XG4gICAgICB9O1xuICAgICAgcGFyc2VTbGljZUF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBzdGFydHMgPSBhdHRyaWJ1dGVzLnN0YXJ0cztcbiAgICAgICAgY29uc3QgZW5kcyA9IGF0dHJpYnV0ZXMuZW5kcztcbiAgICAgICAgY29uc3QgYXhlcyA9IGF0dHJpYnV0ZXMuYXhlcztcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7IHN0YXJ0cywgZW5kcywgYXhlcyB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvb3BzL3NvZnRtYXgudHNcbiAgdmFyIHZhbGlkYXRlSW5wdXRzMjUsIGNyZWF0ZVNvZnRtYXhQcm9ncmFtSW5mbywgc29mdG1heCwgcGFyc2VTb2Z0bWF4QXR0cmlidXRlcztcbiAgdmFyIGluaXRfc29mdG1heCA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvc29mdG1heC50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfYXR0cmlidXRlX3dpdGhfY2FjaGVfa2V5KCk7XG4gICAgICBpbml0X2NvbW1vbigpO1xuICAgICAgdmFsaWRhdGVJbnB1dHMyNSA9IChpbnB1dHMpID0+IHtcbiAgICAgICAgaWYgKCFpbnB1dHMgfHwgaW5wdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvZnRtYXggb3AgcmVxdWlyZXMgMSBpbnB1dC5cIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjcmVhdGVTb2Z0bWF4UHJvZ3JhbUluZm8gPSAoaW5wdXQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBpbnB1dC5kaW1zO1xuICAgICAgICBjb25zdCBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUoc2hhcGUpO1xuICAgICAgICBjb25zdCBXRyA9IDY0O1xuICAgICAgICBsZXQgYXhpcyA9IGF0dHJpYnV0ZXMuYXhpcztcbiAgICAgICAgaWYgKGF4aXMgPCAwKSB7XG4gICAgICAgICAgYXhpcyA9IHNoYXBlLmxlbmd0aCArIGF4aXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aXMgPCBzaGFwZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic29mdG1heCBvbmx5IHN1cHBvcnRzIGxhc3QgYXhpcyBmb3Igbm93LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzID0gc2hhcGVbYXhpc107XG4gICAgICAgIGNvbnN0IHJvd3MgPSBvdXRwdXRTaXplIC8gY29scztcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldE1heENvbXBvbmVudHMoY29scyk7XG4gICAgICAgIGNvbnN0IHBhY2tlZENvbHMgPSBjb2xzIC8gY29tcG9uZW50cztcbiAgICAgICAgY29uc3QgbWF4VmVjdG9yID0gKG5hbWUsIGNvbXBvbmVudHMyKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMyID09PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYG1heChtYXgoJHtuYW1lfS54LCAke25hbWV9LnkpLCBtYXgoJHtuYW1lfS56LCAke25hbWV9LncpKWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb21wb25lbnRzMiA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIGBtYXgoJHtuYW1lfS54LCAke25hbWV9LnkpYDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudHMyID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gYG1heChtYXgoJHtuYW1lfS54LCAke25hbWV9LnkpLCAke25hbWV9LnopYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHggPSBpbnB1dFZhcmlhYmxlKFwieFwiLCBpbnB1dC5kYXRhVHlwZSwgaW5wdXQuZGltcywgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dFZhcmlhYmxlKFwicmVzdWx0XCIsIGlucHV0LmRhdGFUeXBlLCBpbnB1dC5kaW1zLCBjb21wb25lbnRzKTtcbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0geC50eXBlLnZhbHVlO1xuICAgICAgICBjb25zdCB0aHJlYWRNYXhEZWNsID0gdGVuc29yVHlwZVRvV3NnbFN0b3JhZ2VUeXBlKGlucHV0LmRhdGFUeXBlKSA9PT0gXCJmMzJcIiA/IGB2YXIgdGhyZWFkTWF4ID0gJHt2YWx1ZVR5cGV9KC0zLjQwMjgyM2UrMzhmKTtgIDogYHZhciB0aHJlYWRNYXggPSAke3ZhbHVlVHlwZX0oLTY1NTA0LjBoKTtgO1xuICAgICAgICBjb25zdCBnZXRTaGFkZXJTb3VyY2UgPSAoc2hhZGVySGVscGVyKSA9PiBgXG4gICAgICB2YXI8d29ya2dyb3VwPiByb3dNYXhTaGFyZWQgOiAke3ZhbHVlVHlwZX07XG4gICAgICB2YXI8d29ya2dyb3VwPiByb3dTdW1TaGFyZWQgOiAke3ZhbHVlVHlwZX07XG4gICAgICB2YXI8d29ya2dyb3VwPiB0aHJlYWRTaGFyZWQgOiBhcnJheTwke3ZhbHVlVHlwZX0sICR7V0d9PjtcblxuICAgICAgZm4gZ2V0VmFsdWUocm93OiBpMzIsIGNvbDogaTMyLCByb3dfc3RyaWRlOiBpMzIpIC0+ICR7dmFsdWVUeXBlfSB7XG4gICAgICAgIGxldCBpbmRleCA9IHJvdyAqIHJvd19zdHJpZGUgKyBjb2w7XG4gICAgICAgIHJldHVybiB4W2luZGV4XTtcbiAgICAgIH1cblxuICAgICAgZm4gc2V0VmFsdWUocm93OiBpMzIsIGNvbDogaTMyLCByb3dfc3RyaWRlOiBpMzIsIHZhbHVlOiAke3ZhbHVlVHlwZX0pIHtcbiAgICAgICAgbGV0IGluZGV4ID0gcm93ICogcm93X3N0cmlkZSArIGNvbDtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3JtKFwicGFja2VkQ29sc1wiLCBcImkzMlwiKS5kZWNsYXJlVmFyaWFibGVzKHgsIG91dHB1dCl9XG4gICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgbGV0IGdpbmRleCA9IGkzMihnbG9iYWxfaWR4KTtcbiAgICAgICAgbGV0IGxpbmRleCA9IGkzMihsb2NhbF9pZHgpO1xuICAgICAgICBjb25zdCB3ZyA9ICR7V0d9O1xuICAgICAgICBsZXQgcm93ID0gZ2luZGV4IC8gd2c7XG4gICAgICAgIGxldCBjb2xzID0gdW5pZm9ybXMucGFja2VkQ29scztcbiAgICAgICAgbGV0IHJvd19zdHJpZGUgOiBpMzIgPSB1bmlmb3Jtcy5wYWNrZWRDb2xzO1xuXG4gICAgICAgIC8vIGZpbmQgdGhlIHJvd3MgbWF4XG4gICAgICAgICR7dGhyZWFkTWF4RGVjbH1cbiAgICAgICAgZm9yICh2YXIgY29sID0gbGluZGV4OyBjb2wgPCBjb2xzOyBjb2wgKz0gd2cpIHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZShyb3csIGNvbCwgcm93X3N0cmlkZSk7XG4gICAgICAgICAgdGhyZWFkTWF4ID0gbWF4KHRocmVhZE1heCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5kZXggPCBjb2xzKSB7XG4gICAgICAgICAgdGhyZWFkU2hhcmVkW2xpbmRleF0gPSB0aHJlYWRNYXg7XG4gICAgICAgIH1cbiAgICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgICAgIHZhciByZWR1Y2VTaXplID0gbWluKGNvbHMsIHdnKTtcbiAgICAgICAgZm9yICh2YXIgY3VyclNpemUgPSByZWR1Y2VTaXplID4+IDE7ICBjdXJyU2l6ZSA+IDA7IGN1cnJTaXplID0gcmVkdWNlU2l6ZSA+PiAxKSB7XG4gICAgICAgICAgcmVkdWNlU2l6ZSA9IGN1cnJTaXplICsgKHJlZHVjZVNpemUgJiAxKTtcbiAgICAgICAgICBpZiAobGluZGV4IDwgY3VyclNpemUpIHtcbiAgICAgICAgICAgIHRocmVhZFNoYXJlZFtsaW5kZXhdID0gbWF4KHRocmVhZFNoYXJlZFtsaW5kZXhdLCB0aHJlYWRTaGFyZWRbbGluZGV4ICsgcmVkdWNlU2l6ZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3b3JrZ3JvdXBCYXJyaWVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmRleCA9PSAwKSB7XG4gICAgICAgICAgcm93TWF4U2hhcmVkID0gJHt2YWx1ZVR5cGV9KCR7bWF4VmVjdG9yKFwidGhyZWFkU2hhcmVkWzBdXCIsIGNvbXBvbmVudHMpfSk7XG4gICAgICAgIH1cbiAgICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgICAgIC8vIGZpbmQgdGhlIHJvd3Mgc3VtXG4gICAgICAgIHZhciB0aHJlYWRTdW0gPSAke3ZhbHVlVHlwZX0oMC4wKTtcbiAgICAgICAgZm9yICh2YXIgY29sID0gbGluZGV4OyBjb2wgPCBjb2xzOyBjb2wgKz0gd2cpIHtcbiAgICAgICAgICBsZXQgc3ViRXhwID0gZXhwKGdldFZhbHVlKHJvdywgY29sLCByb3dfc3RyaWRlKSAtIHJvd01heFNoYXJlZCk7XG4gICAgICAgICAgdGhyZWFkU3VtICs9IHN1YkV4cDtcbiAgICAgICAgfVxuICAgICAgICB0aHJlYWRTaGFyZWRbbGluZGV4XSA9IHRocmVhZFN1bTtcbiAgICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuXG4gICAgICAgIGZvciAodmFyIGN1cnJTaXplID0gd2cgPj4gMTsgIGN1cnJTaXplID4gMDsgY3VyclNpemUgPSBjdXJyU2l6ZSA+PiAxKSB7XG4gICAgICAgICAgaWYgKGxpbmRleCA8IGN1cnJTaXplKSB7XG4gICAgICAgICAgICB0aHJlYWRTaGFyZWRbbGluZGV4XSA9IHRocmVhZFNoYXJlZFtsaW5kZXhdICsgdGhyZWFkU2hhcmVkW2xpbmRleCArIGN1cnJTaXplXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya2dyb3VwQmFycmllcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5kZXggPT0gMCkge1xuICAgICAgICAgIHJvd1N1bVNoYXJlZCA9ICR7dmFsdWVUeXBlfSgke3N1bVZlY3RvcihcInRocmVhZFNoYXJlZFswXVwiLCBjb21wb25lbnRzKX0pO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtncm91cEJhcnJpZXIoKTtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWUgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgcm93XG4gICAgICAgIGZvciAodmFyIGNvbCA9IGxpbmRleDsgY29sIDwgY29sczsgY29sICs9IHdnKSB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gZXhwKGdldFZhbHVlKHJvdywgY29sLCByb3dfc3RyaWRlKSAtIHJvd01heFNoYXJlZCkgLyByb3dTdW1TaGFyZWQ7XG4gICAgICAgICAgc2V0VmFsdWUocm93LCBjb2wsIHJvd19zdHJpZGUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogXCJTb2Z0bWF4XCIsXG4gICAgICAgICAgc2hhZGVyQ2FjaGU6IHsgaGludDogYCR7Y29tcG9uZW50c31gLCBpbnB1dERlcGVuZGVuY2llczogW1widHlwZVwiXSB9LFxuICAgICAgICAgIGdldFJ1bkRhdGE6ICgpID0+ICh7XG4gICAgICAgICAgICBvdXRwdXRzOiBbeyBkaW1zOiBzaGFwZSwgZGF0YVR5cGU6IGlucHV0LmRhdGFUeXBlIH1dLFxuICAgICAgICAgICAgZGlzcGF0Y2hHcm91cDogeyB4OiByb3dzIH0sXG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IFt7IHR5cGU6IDYgLyogaW50MzIgKi8sIGRhdGE6IHBhY2tlZENvbHMgfV1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBnZXRTaGFkZXJTb3VyY2VcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBzb2Z0bWF4ID0gKGNvbnRleHQsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgdmFsaWRhdGVJbnB1dHMyNShjb250ZXh0LmlucHV0cyk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVTb2Z0bWF4UHJvZ3JhbUluZm8oY29udGV4dC5pbnB1dHNbMF0sIGF0dHJpYnV0ZXMpKTtcbiAgICAgIH07XG4gICAgICBwYXJzZVNvZnRtYXhBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXMpID0+IGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7IGF4aXM6IGF0dHJpYnV0ZXMuYXhpcyB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHdlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvc3BsaXQudHNcbiAgdmFyIHZhbGlkYXRlSW5wdXRzMjYsIGNyZWF0ZVNwbGl0QXR0cmlidXRlc0Zyb21JbnB1dHMsIGNhbGN1bGF0ZU91dHB1dEluZGV4SW1wbCwgd3JpdGVCdWZmZXJEYXRhSW1wbCwgY3JlYXRlU3BsaXRQcm9ncmFtSW5mbywgc3BsaXQsIHBhcnNlU3BsaXRBdHRyaWJ1dGVzO1xuICB2YXIgaW5pdF9zcGxpdCA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvc3BsaXQudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF93YXNtX2NvbW1vbigpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBpbml0X2F0dHJpYnV0ZV93aXRoX2NhY2hlX2tleSgpO1xuICAgICAgaW5pdF9jb21tb24oKTtcbiAgICAgIHZhbGlkYXRlSW5wdXRzMjYgPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9vIGZldyBpbnB1dHNcIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjcmVhdGVTcGxpdEF0dHJpYnV0ZXNGcm9tSW5wdXRzID0gKGlucHV0cywgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBzcGxpdFNpemVzID0gW107XG4gICAgICAgIGxldCBudW1PdXRwdXRzID0gYXR0cmlidXRlcy5udW1PdXRwdXRzO1xuICAgICAgICBpZiAoaW5wdXRzWzFdLmRpbXNbMF0gPiAwKSB7XG4gICAgICAgICAgaW5wdXRzWzFdLmdldEJpZ0ludDY0QXJyYXkoKS5mb3JFYWNoKCh2KSA9PiBzcGxpdFNpemVzLnB1c2goTnVtYmVyKHYpKSk7XG4gICAgICAgICAgbnVtT3V0cHV0cyA9IHNwbGl0U2l6ZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVBdHRyaWJ1dGVXaXRoQ2FjaGVLZXkoeyBudW1PdXRwdXRzLCBheGlzOiBhdHRyaWJ1dGVzLmF4aXMsIHNwbGl0U2l6ZXMgfSk7XG4gICAgICB9O1xuICAgICAgY2FsY3VsYXRlT3V0cHV0SW5kZXhJbXBsID0gKG51bWJlck9mVGVuc29ycykgPT4gYFxuZm4gY2FsY3VsYXRlT3V0cHV0SW5kZXgoaW5kZXg6IHUzMikgLT4gdTMyIHtcbiAgICBmb3IgKHZhciBpOiB1MzIgPSAwdTsgaSA8ICR7bnVtYmVyT2ZUZW5zb3JzfXU7IGkgKz0gMXUgKSB7XG4gICAgaWYgKGluZGV4IDwgJHtnZXRFbGVtZW50QXQoXCJ1bmlmb3Jtcy5zaXplX2luX3NwbGl0X2F4aXNcIiwgXCJpXCIsIG51bWJlck9mVGVuc29ycyl9KSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICR7bnVtYmVyT2ZUZW5zb3JzfXU7XG59YDtcbiAgICAgIHdyaXRlQnVmZmVyRGF0YUltcGwgPSAob3V0cHV0cykgPT4ge1xuICAgICAgICBjb25zdCBudW1iZXJPZlRlbnNvcnMgPSBvdXRwdXRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY29kZUxpbmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZUZW5zb3JzOyArK2kpIHtcbiAgICAgICAgICBjb25zdCByZXR1cm5TbmlwcGV0ID0gb3V0cHV0c1tpXS5zZXRCeUluZGljZXMoXCJpbmRpY2VzXCIsIFwiaW5wdXRbZ2xvYmFsX2lkeF1cIik7XG4gICAgICAgICAgaWYgKG51bWJlck9mVGVuc29ycyA9PT0gMSkge1xuICAgICAgICAgICAgY29kZUxpbmVzLnB1c2gocmV0dXJuU25pcHBldCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICBjb2RlTGluZXMucHVzaChgaWYgKG91dHB1dF9udW1iZXIgPT0gJHtpfXUpIHsgJHtyZXR1cm5TbmlwcGV0fSB9YCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpID09PSBudW1iZXJPZlRlbnNvcnMgLSAxKSB7XG4gICAgICAgICAgICBjb2RlTGluZXMucHVzaChgZWxzZSB7ICR7cmV0dXJuU25pcHBldH0gfWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2RlTGluZXMucHVzaChgZWxzZSBpZiAob3V0cHV0X251bWJlciA9PSAke2l9KSB7ICR7cmV0dXJuU25pcHBldH0gfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFxuICAgICAgZm4gd3JpdGVCdWZmZXJEYXRhKG91dHB1dF9udW1iZXI6IHUzMiwgaW5kaWNlczogJHtvdXRwdXRzWzBdLnR5cGUuaW5kaWNlc30sIGdsb2JhbF9pZHg6IHUzMikge1xuICAgICAgICAke2NvZGVMaW5lcy5qb2luKFwiXFxuXCIpfVxuICAgICAgfWA7XG4gICAgICB9O1xuICAgICAgY3JlYXRlU3BsaXRQcm9ncmFtSW5mbyA9IChpbnB1dHMsIGF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRTaGFwZSA9IGlucHV0c1swXS5kaW1zO1xuICAgICAgICBjb25zdCBpbnB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShpbnB1dFNoYXBlKTtcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSBpbnB1dHNbMF0uZGF0YVR5cGU7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBTaGFwZVV0aWwubm9ybWFsaXplQXhpcyhhdHRyaWJ1dGVzLmF4aXMsIGlucHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IG5ldyBBcnJheShhdHRyaWJ1dGVzLm51bU91dHB1dHMpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoXCJpbnB1dFwiLCBkYXRhVHlwZSwgaW5wdXRTaGFwZS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBzaXplSW5TcGxpdEF4aXMgPSBuZXcgQXJyYXkoYXR0cmlidXRlcy5udW1PdXRwdXRzKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0c1RlbnNvckluZm8gPSBbXTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGVzID0gW107XG4gICAgICAgIGxldCBwcmV2aW91c1N1bSA9IDA7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Vbmlmb3JtcyA9IFt7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogaW5wdXRTaXplIH1dO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubnVtT3V0cHV0czsgaSsrKSB7XG4gICAgICAgICAgcHJldmlvdXNTdW0gKz0gYXR0cmlidXRlcy5zcGxpdFNpemVzW2ldO1xuICAgICAgICAgIHNpemVJblNwbGl0QXhpc1tpXSA9IHByZXZpb3VzU3VtO1xuICAgICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gaW5wdXRTaGFwZS5zbGljZSgpO1xuICAgICAgICAgIG91dHB1dFNoYXBlW2F0dHJpYnV0ZXMuYXhpc10gPSBhdHRyaWJ1dGVzLnNwbGl0U2l6ZXNbaV07XG4gICAgICAgICAgb3V0cHV0U2hhcGVzLnB1c2gob3V0cHV0U2hhcGUpO1xuICAgICAgICAgIG91dHB1dHNbaV0gPSBvdXRwdXRWYXJpYWJsZShgb3V0cHV0JHtpfWAsIGRhdGFUeXBlLCBvdXRwdXRTaGFwZS5sZW5ndGgpO1xuICAgICAgICAgIG91dHB1dHNUZW5zb3JJbmZvLnB1c2goeyBkaW1zOiBvdXRwdXRTaGFwZXNbaV0sIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLnB1c2goXG4gICAgICAgICAgeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IHNpemVJblNwbGl0QXhpcyB9LFxuICAgICAgICAgIC4uLmNyZWF0ZVRlbnNvclNoYXBlVmFyaWFibGVzKGlucHV0U2hhcGUsIC4uLm91dHB1dFNoYXBlcylcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4gYFxuICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oXCJpbnB1dF9zaXplXCIsIFwidTMyXCIpLnJlZ2lzdGVyVW5pZm9ybShcInNpemVfaW5fc3BsaXRfYXhpc1wiLCBcInUzMlwiLCBzaXplSW5TcGxpdEF4aXMubGVuZ3RoKS5kZWNsYXJlVmFyaWFibGVzKGlucHV0LCAuLi5vdXRwdXRzKX1cbiAgJHtjYWxjdWxhdGVPdXRwdXRJbmRleEltcGwoc2l6ZUluU3BsaXRBeGlzLmxlbmd0aCl9XG4gICR7d3JpdGVCdWZmZXJEYXRhSW1wbChvdXRwdXRzKX1cblxuICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMuaW5wdXRfc2l6ZVwiKX1cblxuICAgIHZhciBpbmRpY2VzID0gJHtpbnB1dC5vZmZzZXRUb0luZGljZXMoXCJnbG9iYWxfaWR4XCIpfTtcbiAgICB2YXIgaW5kZXggPSAke2lucHV0LmluZGljZXNHZXQoXCJpbmRpY2VzXCIsIGF4aXMpfTtcbiAgICBsZXQgb3V0cHV0X251bWJlciA9IGNhbGN1bGF0ZU91dHB1dEluZGV4KGluZGV4KTtcbiAgICBpZiAob3V0cHV0X251bWJlciAhPSAwKSB7XG4gICAgICBpbmRleCAtPSAke2dldEVsZW1lbnRBdChcInVuaWZvcm1zLnNpemVfaW5fc3BsaXRfYXhpc1wiLCBcIm91dHB1dF9udW1iZXIgLSAxdVwiLCBzaXplSW5TcGxpdEF4aXMubGVuZ3RoKX07XG4gICAgICAke2lucHV0LmluZGljZXNTZXQoXCJpbmRpY2VzXCIsIGF4aXMsIFwiaW5kZXhcIil9O1xuICAgIH1cbiAgICB3cml0ZUJ1ZmZlckRhdGEob3V0cHV0X251bWJlciwgaW5kaWNlcywgZ2xvYmFsX2lkeCk7XG4gIH1gO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiU3BsaXRcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBoaW50OiBhdHRyaWJ1dGVzLmNhY2hlS2V5LCBpbnB1dERlcGVuZGVuY2llczogW1wicmFua1wiXSB9LFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1RlbnNvckluZm8sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgaW5wdXRTaXplIC8gNjRcbiAgICAgICAgICAgICAgLyogd29ya2dyb3VwIHNpemUgKi9cbiAgICAgICAgICAgICkgfSxcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtc1xuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgc3BsaXQgPSAoY29udGV4dCwgYXR0cmlidXRlcykgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czI2KGNvbnRleHQuaW5wdXRzKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZEF0dHJpYnV0ZXMgPSBjb250ZXh0LmlucHV0cy5sZW5ndGggPT09IDEgPyBhdHRyaWJ1dGVzIDogY3JlYXRlU3BsaXRBdHRyaWJ1dGVzRnJvbUlucHV0cyhjb250ZXh0LmlucHV0cywgYXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnRleHQuY29tcHV0ZShjcmVhdGVTcGxpdFByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzLCB1cGRhdGVkQXR0cmlidXRlcyksIHsgaW5wdXRzOiBbMF0gfSk7XG4gICAgICB9O1xuICAgICAgcGFyc2VTcGxpdEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBjb25zdCBheGlzID0gYXR0cmlidXRlcy5heGlzO1xuICAgICAgICBjb25zdCBzcGxpdFNpemVzID0gYXR0cmlidXRlcy5zcGxpdFNpemVzO1xuICAgICAgICBjb25zdCBudW1PdXRwdXRzID0gYXR0cmlidXRlcy5udW1PdXRwdXRzIDwgMCA/IHNwbGl0U2l6ZXMubGVuZ3RoIDogYXR0cmlidXRlcy5udW1PdXRwdXRzO1xuICAgICAgICBpZiAobnVtT3V0cHV0cyAhPT0gc3BsaXRTaXplcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJudW1PdXRwdXRzIGFuZCBzcGxpdFNpemVzIGxlbmdoIG11c3QgYmUgZXF1YWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUF0dHJpYnV0ZVdpdGhDYWNoZUtleSh7IGF4aXMsIG51bU91dHB1dHMsIHNwbGl0U2l6ZXMgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy90aWxlLnRzXG4gIHZhciBnZXRSZXBlYXRzLCB2YWxpZGF0ZUlucHV0czI3LCBnZXRPdXRwdXRTaGFwZTIsIGNyZWF0ZVRpbGVQcm9ncmFtSW5mbywgdGlsZTtcbiAgdmFyIGluaXRfdGlsZSA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL3dlYmdwdS9vcHMvdGlsZS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICBnZXRSZXBlYXRzID0gKHJlcGVhdHNUZW5zb3JWaWV3KSA9PiBBcnJheS5mcm9tKHJlcGVhdHNUZW5zb3JWaWV3LmdldEJpZ0ludDY0QXJyYXkoKSwgTnVtYmVyKTtcbiAgICAgIHZhbGlkYXRlSW5wdXRzMjcgPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGlmICghaW5wdXRzIHx8IGlucHV0cy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaWxlIHJlcXVpcmVzIDIgaW5wdXRzLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXRzWzBdLmRhdGFUeXBlICE9PSAxIC8qIGZsb2F0ICovICYmIGlucHV0c1swXS5kYXRhVHlwZSAhPT0gNiAvKiBpbnQzMiAqLyAmJiBpbnB1dHNbMF0uZGF0YVR5cGUgIT09IDEyIC8qIHVpbnQzMiAqLykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRpbGUgb25seSBzdXBwb3J0IGZsb2F0LCBpbnQzMiwgYW5kIHVpbnQzMiBkYXRhIHR5cGVzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dHNbMV0uZGF0YVR5cGUgIT09IDcgLyogaW50NjQgKi8pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaWxlIGByZXBlYXRzYCBpbnB1dCBzaG91bGQgYmUgb2YgaW50NjQgZGF0YSB0eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dHNbMV0uZGltcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaWxlIGByZXBlYXRzYCBpbnB1dCBzaG91bGQgYmUgMS1EXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcGVhdHMgPSBnZXRSZXBlYXRzKGlucHV0c1sxXSk7XG4gICAgICAgIGlmIChyZXBlYXRzLmxlbmd0aCAhPT0gaW5wdXRzWzBdLmRpbXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGlsZSBgcmVwZWF0c2AgaW5wdXQgc2hvdWxkIGhhdmUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMgYXMgcmFuayBvZiBpbnB1dCBkYXRhIHRlbnNvclwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGdldE91dHB1dFNoYXBlMiA9IChpbnB1dFNoYXBlLCByZXBlYXRzKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dFNoYXBlID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTaGFwZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIG91dHB1dFNoYXBlLnB1c2goaW5wdXRTaGFwZVtpXSAqIHJlcGVhdHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXRTaGFwZTtcbiAgICAgIH07XG4gICAgICBjcmVhdGVUaWxlUHJvZ3JhbUluZm8gPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dHNbMF0uZGltcztcbiAgICAgICAgY29uc3QgcmVwZWF0cyA9IGdldFJlcGVhdHMoaW5wdXRzWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBnZXRPdXRwdXRTaGFwZTIoaW5wdXRTaGFwZSwgcmVwZWF0cyk7XG4gICAgICAgIGNvbnN0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShvdXRwdXRTaGFwZSk7XG4gICAgICAgIGNvbnN0IGRhdGFUeXBlID0gaW5wdXRzWzBdLmRhdGFUeXBlO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0VmFyaWFibGUoXCJpbnB1dFwiLCBkYXRhVHlwZSwgaW5wdXRTaGFwZS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRWYXJpYWJsZShcIm91dHB1dFwiLCBkYXRhVHlwZSwgb3V0cHV0U2hhcGUubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZ2V0U2hhZGVyU291cmNlID0gKHNoYWRlckhlbHBlcikgPT4gYFxuICAgICAgY29uc3QgaW5wdXRTaGFwZSA9ICR7aW5wdXQuaW5kaWNlcyguLi5pbnB1dFNoYXBlKX07XG4gICAgICAke3NoYWRlckhlbHBlci5yZWdpc3RlclVuaWZvcm0oXCJvdXRwdXRfc2l6ZVwiLCBcInUzMlwiKS5kZWNsYXJlVmFyaWFibGVzKGlucHV0LCBvdXRwdXQpfVxuICAgICAgJHtzaGFkZXJIZWxwZXIubWFpblN0YXJ0KCl9XG4gICAgICAke3NoYWRlckhlbHBlci5ndWFyZEFnYWluc3RPdXRPZkJvdW5kc1dvcmtncm91cFNpemVzKFwidW5pZm9ybXMub3V0cHV0X3NpemVcIil9XG4gICAgICBsZXQgb3V0cHV0X2luZGljZXMgPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoXCJnbG9iYWxfaWR4XCIpfTtcbiAgICAgIHZhciBpbnB1dF9pbmRpY2VzOiAke2lucHV0LnR5cGUuaW5kaWNlc307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8ICR7aW5wdXRTaGFwZS5sZW5ndGh9OyBpKyspIHtcbiAgICAgICAgbGV0IGlucHV0X2RpbV9pID0gJHtpbnB1dC5pbmRpY2VzR2V0KFwidW5pZm9ybXMuaW5wdXRfc2hhcGVcIiwgXCJpXCIpfTtcbiAgICAgICAgbGV0IGlucHV0X2RpbV92YWx1ZSA9ICR7b3V0cHV0LmluZGljZXNHZXQoXCJvdXRwdXRfaW5kaWNlc1wiLCBcImlcIil9ICAlIGlucHV0X2RpbV9pO1xuXG4gICAgICAgICR7aW5wdXQuaW5kaWNlc1NldChcImlucHV0X2luZGljZXNcIiwgXCJpXCIsIFwiaW5wdXRfZGltX3ZhbHVlXCIpfVxuICAgICAgfVxuICAgICAgJHtvdXRwdXQuc2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIsIGlucHV0LmdldEJ5SW5kaWNlcyhcImlucHV0X2luZGljZXNcIikpfVxuICAgIH1gO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiVGlsZVwiLFxuICAgICAgICAgIHNoYWRlckNhY2hlOiB7IGhpbnQ6IGAke3JlcGVhdHN9YCwgaW5wdXREZXBlbmRlbmNpZXM6IFtcInJhbmtcIl0gfSxcbiAgICAgICAgICBnZXRSdW5EYXRhOiAoKSA9PiAoe1xuICAgICAgICAgICAgb3V0cHV0czogW3sgZGltczogb3V0cHV0U2hhcGUsIGRhdGFUeXBlOiBpbnB1dHNbMF0uZGF0YVR5cGUgfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgb3V0cHV0U2l6ZSAvIDY0XG4gICAgICAgICAgICAgIC8qIHdvcmtncm91cCBzaXplICovXG4gICAgICAgICAgICApIH0sXG4gICAgICAgICAgICBwcm9ncmFtVW5pZm9ybXM6IFt7IHR5cGU6IDEyIC8qIHVpbnQzMiAqLywgZGF0YTogb3V0cHV0U2l6ZSB9LCAuLi5jcmVhdGVUZW5zb3JTaGFwZVZhcmlhYmxlcyhpbnB1dHNbMF0uZGltcywgb3V0cHV0U2hhcGUpXVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGdldFNoYWRlclNvdXJjZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHRpbGUgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICB2YWxpZGF0ZUlucHV0czI3KGNvbnRleHQuaW5wdXRzKTtcbiAgICAgICAgY29udGV4dC5jb21wdXRlKGNyZWF0ZVRpbGVQcm9ncmFtSW5mbyhjb250ZXh0LmlucHV0cyksIHsgaW5wdXRzOiBbMF0gfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy93aGVyZS50c1xuICB2YXIgY3JlYXRlV2hlcmVPcFByb2dyYW1TaGFkZXIsIGNyZWF0ZVdoZXJlT3BQcm9ncmFtSW5mbywgd2hlcmU7XG4gIHZhciBpbml0X3doZXJlID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wcy93aGVyZS50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X3V0aWwoKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICBjcmVhdGVXaGVyZU9wUHJvZ3JhbVNoYWRlciA9IChzaGFkZXJIZWxwZXIsIGlucHV0cywgZGltc091dHB1dCwgaXNCcm9hZGNhc3QsIHR5cGVPdXRwdXQpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0VmFyaWFibGUoXCJvdXRwdXRfZGF0YVwiLCB0eXBlT3V0cHV0LCBkaW1zT3V0cHV0Lmxlbmd0aCwgNCk7XG4gICAgICAgIGNvbnN0IGEgPSBpbnB1dFZhcmlhYmxlKFwiYV9kYXRhXCIsIGlucHV0c1sxXS5kYXRhVHlwZSwgaW5wdXRzWzFdLmRpbXMubGVuZ3RoLCA0KTtcbiAgICAgICAgY29uc3QgYiA9IGlucHV0VmFyaWFibGUoXCJiX2RhdGFcIiwgaW5wdXRzWzJdLmRhdGFUeXBlLCBpbnB1dHNbMl0uZGltcy5sZW5ndGgsIDQpO1xuICAgICAgICBjb25zdCBjID0gaW5wdXRWYXJpYWJsZShcImNfZGF0YVwiLCBpbnB1dHNbMF0uZGF0YVR5cGUsIGlucHV0c1swXS5kaW1zLmxlbmd0aCwgNCk7XG4gICAgICAgIGxldCBhc3NpZ25tZW50O1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gKGEyLCBiMiwgYzIpID0+IGBzZWxlY3QoJHtiMn0sICR7YTJ9LCAke2MyfSlgO1xuICAgICAgICBpZiAoIWlzQnJvYWRjYXN0KSB7XG4gICAgICAgICAgYXNzaWdubWVudCA9IG91dHB1dC5zZXRCeU9mZnNldChcbiAgICAgICAgICAgIFwiZ2xvYmFsX2lkeFwiLFxuICAgICAgICAgICAgZXhwcmVzc2lvbihhLmdldEJ5T2Zmc2V0KFwiZ2xvYmFsX2lkeFwiKSwgYi5nZXRCeU9mZnNldChcImdsb2JhbF9pZHhcIiksIGMuZ2V0QnlPZmZzZXQoXCJnbG9iYWxfaWR4XCIpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc2luZ2xlQXNzaWdubWVudCA9IChyZXNTdHIsIHgsIHR5cGVDYXN0ID0gXCJcIikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbkEgPSBgYV9kYXRhW2luZGV4X2Eke3h9XVtjb21wb25lbnRfYSR7eH1dYDtcbiAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25CID0gYGJfZGF0YVtpbmRleF9iJHt4fV1bY29tcG9uZW50X2Ike3h9XWA7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9uQyA9IGBib29sKGNfZGF0YVtpbmRleF9jJHt4fV0gJiAoMHhmZnUgPDwgKGNvbXBvbmVudF9jJHt4fSAqIDgpKSlgO1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIGxldCBvdXRwdXRfaW5kaWNlcyR7eH0gPSAke291dHB1dC5vZmZzZXRUb0luZGljZXMoYGdsb2JhbF9pZHggKiA0dSArICR7eH11YCl9O1xuICAgICAgICAgICAgbGV0IG9mZnNldF9hJHt4fSA9ICR7YS5icm9hZGNhc3RlZEluZGljZXNUb09mZnNldChgb3V0cHV0X2luZGljZXMke3h9YCwgb3V0cHV0KX07XG4gICAgICAgICAgICBsZXQgb2Zmc2V0X2Ike3h9ID0gJHtiLmJyb2FkY2FzdGVkSW5kaWNlc1RvT2Zmc2V0KGBvdXRwdXRfaW5kaWNlcyR7eH1gLCBvdXRwdXQpfTtcbiAgICAgICAgICAgIGxldCBvZmZzZXRfYyR7eH0gPSAke2MuYnJvYWRjYXN0ZWRJbmRpY2VzVG9PZmZzZXQoYG91dHB1dF9pbmRpY2VzJHt4fWAsIG91dHB1dCl9O1xuICAgICAgICAgICAgbGV0IGluZGV4X2Eke3h9ID0gb2Zmc2V0X2Eke3h9IC8gNHU7XG4gICAgICAgICAgICBsZXQgaW5kZXhfYiR7eH0gPSBvZmZzZXRfYiR7eH0gLyA0dTtcbiAgICAgICAgICAgIGxldCBpbmRleF9jJHt4fSA9IG9mZnNldF9jJHt4fSAvIDR1O1xuICAgICAgICAgICAgbGV0IGNvbXBvbmVudF9hJHt4fSA9IG9mZnNldF9hJHt4fSAlIDR1O1xuICAgICAgICAgICAgbGV0IGNvbXBvbmVudF9iJHt4fSA9IG9mZnNldF9iJHt4fSAlIDR1O1xuICAgICAgICAgICAgbGV0IGNvbXBvbmVudF9jJHt4fSA9IG9mZnNldF9jJHt4fSAlIDR1O1xuICAgICAgICAgICAgJHtyZXNTdHJ9WyR7eH1dID0gJHt0eXBlQ2FzdH0oJHtleHByZXNzaW9uKGV4cHJlc3Npb25BLCBleHByZXNzaW9uQiwgZXhwcmVzc2lvbkMpfSk7XG4gICAgICAgICAgYDtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0eXBlT3V0cHV0ID09PSA5IC8qIGJvb2wgKi8pIHtcbiAgICAgICAgICAgIGFzc2lnbm1lbnQgPSBgXG4gICAgICAgICAgICB2YXIgZGF0YSA9IHZlYzQ8dTMyPigwKTtcbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudChcImRhdGFcIiwgMCwgXCJ1MzJcIil9XG4gICAgICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoXCJkYXRhXCIsIDEsIFwidTMyXCIpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KFwiZGF0YVwiLCAyLCBcInUzMlwiKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudChcImRhdGFcIiwgMywgXCJ1MzJcIil9XG4gICAgICAgICAgICBvdXRwdXRfZGF0YVtnbG9iYWxfaWR4XSA9IGRvdCh2ZWM0PHUzMj4oMHgxLCAweDEwMCwgMHgxMDAwMCwgMHgxMDAwMDAwKSwgdmVjNDx1MzI+KGRhdGEpKTtgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NpZ25tZW50ID0gYFxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KFwib3V0cHV0X2RhdGFbZ2xvYmFsX2lkeF1cIiwgMCl9XG4gICAgICAgICAgICAke3NpbmdsZUFzc2lnbm1lbnQoXCJvdXRwdXRfZGF0YVtnbG9iYWxfaWR4XVwiLCAxKX1cbiAgICAgICAgICAgICR7c2luZ2xlQXNzaWdubWVudChcIm91dHB1dF9kYXRhW2dsb2JhbF9pZHhdXCIsIDIpfVxuICAgICAgICAgICAgJHtzaW5nbGVBc3NpZ25tZW50KFwib3V0cHV0X2RhdGFbZ2xvYmFsX2lkeF1cIiwgMyl9XG4gICAgICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgJHtzaGFkZXJIZWxwZXIucmVnaXN0ZXJVbmlmb3JtKFwidmVjX3NpemVcIiwgXCJ1MzJcIikuZGVjbGFyZVZhcmlhYmxlcyhjLCBhLCBiLCBvdXRwdXQpfVxuICAgICAgICAke3NoYWRlckhlbHBlci5tYWluU3RhcnQoKX1cbiAgICAgICAgJHtzaGFkZXJIZWxwZXIuZ3VhcmRBZ2FpbnN0T3V0T2ZCb3VuZHNXb3JrZ3JvdXBTaXplcyhcInVuaWZvcm1zLnZlY19zaXplXCIpfVxuICAgICAgICAke2Fzc2lnbm1lbnR9XG4gICAgICB9YDtcbiAgICAgIH07XG4gICAgICBjcmVhdGVXaGVyZU9wUHJvZ3JhbUluZm8gPSAoaW5wdXRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpbXNBID0gaW5wdXRzWzFdLmRpbXM7XG4gICAgICAgIGNvbnN0IGRpbXNCID0gaW5wdXRzWzJdLmRpbXM7XG4gICAgICAgIGNvbnN0IGRpbXNDID0gaW5wdXRzWzBdLmRpbXM7XG4gICAgICAgIGNvbnN0IG91dHB1dERhdGFUeXBlID0gaW5wdXRzWzFdLmRhdGFUeXBlO1xuICAgICAgICBjb25zdCBpc0Jyb2FkY2FzdCA9ICEoU2hhcGVVdGlsLmFyZUVxdWFsKGRpbXNBLCBkaW1zQikgJiYgU2hhcGVVdGlsLmFyZUVxdWFsKGRpbXNCLCBkaW1zQykpO1xuICAgICAgICBsZXQgb3V0cHV0U2hhcGUgPSBkaW1zQTtcbiAgICAgICAgbGV0IG91dHB1dFNpemUgPSBTaGFwZVV0aWwuc2l6ZShkaW1zQSk7XG4gICAgICAgIGlmIChpc0Jyb2FkY2FzdCkge1xuICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTaGFwZSA9IEJyb2FkY2FzdFV0aWwuY2FsY1NoYXBlKEJyb2FkY2FzdFV0aWwuY2FsY1NoYXBlKGRpbXNBLCBkaW1zQiwgZmFsc2UpLCBkaW1zQywgZmFsc2UpO1xuICAgICAgICAgIGlmICghY2FsY3VsYXRlZFNoYXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBwZXJmb3JtIHdoZXJlIG9wIG9uIHRoZSBnaXZlbiB0ZW5zb3JzXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXRwdXRTaGFwZSA9IGNhbGN1bGF0ZWRTaGFwZTtcbiAgICAgICAgICBvdXRwdXRTaXplID0gU2hhcGVVdGlsLnNpemUob3V0cHV0U2hhcGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZlY1NpemUgPSBNYXRoLmNlaWwob3V0cHV0U2l6ZSAvIDQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFwiV2hlcmVcIixcbiAgICAgICAgICBzaGFkZXJDYWNoZTogeyBpbnB1dERlcGVuZGVuY2llczogW1wicmFua1wiLCBcInJhbmtcIiwgXCJyYW5rXCJdIH0sXG4gICAgICAgICAgZ2V0U2hhZGVyU291cmNlOiAoc2hhZGVySGVscGVyKSA9PiBjcmVhdGVXaGVyZU9wUHJvZ3JhbVNoYWRlcihzaGFkZXJIZWxwZXIsIGlucHV0cywgb3V0cHV0U2hhcGUsIGlzQnJvYWRjYXN0LCBvdXRwdXREYXRhVHlwZSksXG4gICAgICAgICAgZ2V0UnVuRGF0YTogKCkgPT4gKHtcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IGRpbXM6IG91dHB1dFNoYXBlLCBkYXRhVHlwZTogb3V0cHV0RGF0YVR5cGUgfV0sXG4gICAgICAgICAgICBkaXNwYXRjaEdyb3VwOiB7IHg6IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgb3V0cHV0U2l6ZSAvIDY0IC8gNFxuICAgICAgICAgICAgICAvKiB2ZWMgc2l6ZSAqL1xuICAgICAgICAgICAgKSB9LFxuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zOiBbeyB0eXBlOiAxMiAvKiB1aW50MzIgKi8sIGRhdGE6IHZlY1NpemUgfSwgLi4uY3JlYXRlVGVuc29yU2hhcGVWYXJpYWJsZXMoZGltc0MsIGRpbXNBLCBkaW1zQiwgb3V0cHV0U2hhcGUpXVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgd2hlcmUgPSAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb250ZXh0LmNvbXB1dGUoY3JlYXRlV2hlcmVPcFByb2dyYW1JbmZvKGNvbnRleHQuaW5wdXRzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wLXJlc29sdmUtcnVsZXMudHNcbiAgdmFyIFdFQkdQVV9PUF9SRVNPTFZFX1JVTEVTO1xuICB2YXIgaW5pdF9vcF9yZXNvbHZlX3J1bGVzID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L29wLXJlc29sdmUtcnVsZXMudHNcIigpIHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgaW5pdF9hcmdtaW5tYXgoKTtcbiAgICAgIGluaXRfYXR0ZW50aW9uKCk7XG4gICAgICBpbml0X2JhdGNoX25vcm0oKTtcbiAgICAgIGluaXRfYmlhc19hZGQoKTtcbiAgICAgIGluaXRfYmlhc19zcGxpdF9nZWx1KCk7XG4gICAgICBpbml0X2JpbmFyeV9vcCgpO1xuICAgICAgaW5pdF9jb25jYXQoKTtcbiAgICAgIGluaXRfY29udigpO1xuICAgICAgaW5pdF9jb252X3RyYW5zcG9zZSgpO1xuICAgICAgaW5pdF9jdW1zdW0oKTtcbiAgICAgIGluaXRfZGVwdGhfdG9fc3BhY2UoKTtcbiAgICAgIGluaXRfZWluc3VtKCk7XG4gICAgICBpbml0X2V4cGFuZCgpO1xuICAgICAgaW5pdF9mYXN0X2dlbHUoKTtcbiAgICAgIGluaXRfZ2F0aGVyKCk7XG4gICAgICBpbml0X2dhdGhlcl9lbGVtZW50cygpO1xuICAgICAgaW5pdF9nZW1tKCk7XG4gICAgICBpbml0X2luc3RhbmNlX25vcm0oKTtcbiAgICAgIGluaXRfbGF5ZXJfbm9ybSgpO1xuICAgICAgaW5pdF9tYXRtdWwoKTtcbiAgICAgIGluaXRfbWF0bXVsbmJpdHMoKTtcbiAgICAgIGluaXRfbXVsdGloZWFkX2F0dGVudGlpb24oKTtcbiAgICAgIGluaXRfcGFkKCk7XG4gICAgICBpbml0X3Bvb2woKTtcbiAgICAgIGluaXRfcmFuZ2UoKTtcbiAgICAgIGluaXRfcmVkdWNlKCk7XG4gICAgICBpbml0X3Jlc2l6ZSgpO1xuICAgICAgaW5pdF9yb3RhcnlfZW1iZWRkaW5nKCk7XG4gICAgICBpbml0X3NraXBfbGF5ZXJfbm9ybSgpO1xuICAgICAgaW5pdF9zbGljZSgpO1xuICAgICAgaW5pdF9zb2Z0bWF4KCk7XG4gICAgICBpbml0X3NwbGl0KCk7XG4gICAgICBpbml0X3RpbGUoKTtcbiAgICAgIGluaXRfdHJhbnNwb3NlKCk7XG4gICAgICBpbml0X3VuYXJ5X29wKCk7XG4gICAgICBpbml0X3doZXJlKCk7XG4gICAgICBXRUJHUFVfT1BfUkVTT0xWRV9SVUxFUyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFtcbiAgICAgICAgW1wiQWJzXCIsIFthYnNdXSxcbiAgICAgICAgW1wiQWNvc1wiLCBbYWNvc11dLFxuICAgICAgICBbXCJBY29zaFwiLCBbYWNvc2hdXSxcbiAgICAgICAgW1wiQWRkXCIsIFthZGRdXSxcbiAgICAgICAgW1wiQXJnTWF4XCIsIFthcmdNYXgsIHBhcnNlQXJnTWluTWF4QXR0cmlidXRlc11dLFxuICAgICAgICBbXCJBcmdNaW5cIiwgW2FyZ01pbiwgcGFyc2VBcmdNaW5NYXhBdHRyaWJ1dGVzXV0sXG4gICAgICAgIFtcIkFzaW5cIiwgW2FzaW5dXSxcbiAgICAgICAgW1wiQXNpbmhcIiwgW2FzaW5oXV0sXG4gICAgICAgIFtcIkF0YW5cIiwgW2F0YW5dXSxcbiAgICAgICAgW1wiQXRhbmhcIiwgW2F0YW5oXV0sXG4gICAgICAgIFtcIkF0dGVudGlvblwiLCBbYXR0ZW50aW9uXV0sXG4gICAgICAgIC8vIFRPRE86IHN1cHBvcnQgbmV3IGF0dHJpYnV0ZXMgZm9yIEF2ZXJhZ2VQb29sLTEwXG4gICAgICAgIFtcIkF2ZXJhZ2VQb29sXCIsIFthdmVyYWdlUG9vbCwgcGFyc2VBdmVyYWdlUG9vbEF0dHJpYnV0ZXNdXSxcbiAgICAgICAgW1wiQmF0Y2hOb3JtYWxpemF0aW9uXCIsIFtiYXRjaE5vcm1dXSxcbiAgICAgICAgW1wiQmlhc0FkZFwiLCBbYmlhc0FkZF1dLFxuICAgICAgICBbXCJCaWFzU3BsaXRHZWx1XCIsIFtiaWFzU3BsaXRHZWx1XV0sXG4gICAgICAgIFtcIkNhc3RcIiwgW2Nhc3QsIHBhcnNlQ2FzdEF0dHJpYnV0ZXNdXSxcbiAgICAgICAgW1wiQ2VpbFwiLCBbY2VpbF1dLFxuICAgICAgICBbXCJDbGlwXCIsIFtjbGlwXV0sXG4gICAgICAgIFtcIkNvbmNhdFwiLCBbY29uY2F0LCBwYXJzZUNvbmNhdEF0dHJpYnV0ZXNdXSxcbiAgICAgICAgW1wiQ29udlwiLCBbY29udiwgcGFyc2VDb252QXR0cmlidXRlc11dLFxuICAgICAgICBbXCJDb252VHJhbnNwb3NlXCIsIFtjb252VHJhbnNwb3NlLCBwYXJzZUNvbnZUcmFuc3Bvc2VBdHRyaWJ1dGVzXV0sXG4gICAgICAgIFtcIkNvc1wiLCBbY29zXV0sXG4gICAgICAgIFtcIkNvc2hcIiwgW2Nvc2hdXSxcbiAgICAgICAgW1wiQ3VtU3VtXCIsIFtjdW1zdW0sIHBhcnNlQ3VtU3VtQXR0cmlidXRlc11dLFxuICAgICAgICBbXCJEZXB0aFRvU3BhY2VcIiwgW2RlcHRoVG9TcGFjZSwgcGFyc2VEZXB0aFRvU3BhY2VBdHRyaWJ1dGVzXV0sXG4gICAgICAgIFtcIkRpdlwiLCBbZGl2XV0sXG4gICAgICAgIFtcIkVpbnN1bVwiLCBbZWluc3VtLCBwYXJzZUVpbnN1bUF0dHJpYnV0ZXNdXSxcbiAgICAgICAgW1wiRWx1XCIsIFtlbHUsIHBhcnNlQWxwaGFBdHRyaWJ1dGVzXV0sXG4gICAgICAgIFtcIkVxdWFsXCIsIFtlcXVhbF1dLFxuICAgICAgICBbXCJFcmZcIiwgW2VyZl1dLFxuICAgICAgICBbXCJFeHBcIiwgW2V4cF1dLFxuICAgICAgICBbXCJFeHBhbmRcIiwgW2V4cGFuZF1dLFxuICAgICAgICBbXCJGYXN0R2VsdVwiLCBbZmFzdEdlbHUyXV0sXG4gICAgICAgIFtcIkZsb29yXCIsIFtmbG9vcl1dLFxuICAgICAgICBbXCJGdXNlZENvbnZcIiwgW2NvbnYsIHBhcnNlQ29udkF0dHJpYnV0ZXNdXSxcbiAgICAgICAgW1wiR2F0aGVyXCIsIFtnYXRoZXIsIHBhcnNlR2F0aGVyQXR0cmlidXRlc11dLFxuICAgICAgICBbXCJHYXRoZXJFbGVtZW50c1wiLCBbZ2F0aGVyRWxlbWVudHMsIHBhcnNlR2F0aGVyRWxlbWVudHNBdHRyaWJ1dGVzXV0sXG4gICAgICAgIFtcIkdlbHVcIiwgW2dlbHVdXSxcbiAgICAgICAgW1wiR2VtbVwiLCBbZ2VtbSwgcGFyc2VHZW1tQXR0cmlidXRlc11dLFxuICAgICAgICBbXCJHbG9iYWxBdmVyYWdlUG9vbFwiLCBbZ2xvYmFsQXZlcmFnZVBvb2wsIHBhcnNlR2xvYmFsQXZlcmFnZVBvb2xBdHRyaWJ1dGVzXV0sXG4gICAgICAgIFtcIkdsb2JhbE1heFBvb2xcIiwgW2dsb2JhbE1heFBvb2wsIHBhcnNlR2xvYmFsTWF4UG9vbEF0dHJpYnV0ZXNdXSxcbiAgICAgICAgW1wiR3JlYXRlclwiLCBbZ3JlYXRlcl1dLFxuICAgICAgICBbXCJHcmVhdGVyT3JFcXVhbFwiLCBbZ3JlYXRlck9yRXF1YWxdXSxcbiAgICAgICAgW1wiSGFyZFNpZ21vaWRcIiwgW2hhcmRTaWdtb2lkLCBwYXJzZUhhcmRTaWdtb2lkQXR0cmlidXRlc11dLFxuICAgICAgICBbXCJJbnN0YW5jZU5vcm1hbGl6YXRpb25cIiwgW2luc3RhbmNlTm9ybV1dLFxuICAgICAgICBbXCJMYXllck5vcm1hbGl6YXRpb25cIiwgW2xheWVyTm9ybV1dLFxuICAgICAgICBbXCJMZWFreVJlbHVcIiwgW2xlYWt5UmVsdSwgcGFyc2VBbHBoYUF0dHJpYnV0ZXNdXSxcbiAgICAgICAgW1wiTGVzc1wiLCBbbGVzc11dLFxuICAgICAgICBbXCJMZXNzT3JFcXVhbFwiLCBbbGVzc09yRXF1YWxdXSxcbiAgICAgICAgW1wiTG9nXCIsIFtsb2ddXSxcbiAgICAgICAgW1wiTWF0TXVsXCIsIFttYXRNdWxdXSxcbiAgICAgICAgW1wiTWF0TXVsTkJpdHNcIiwgW21hdE11bE5CaXRzLCBwYXJzZU1hdE11bE5CaXRzQXR0cmlidXRlc11dLFxuICAgICAgICAvLyBUT0RPOiBzdXBwb3J0IG5ldyBhdHRyaWJ1dGVzIGZvciBNYXhQb29sLTggYW5kIE1heFBvb2wtMTBcbiAgICAgICAgW1wiTWF4UG9vbFwiLCBbbWF4UG9vbCwgcGFyc2VNYXhQb29sQXR0cmlidXRlc11dLFxuICAgICAgICBbXCJNdWxcIiwgW211bF1dLFxuICAgICAgICBbXCJNdWx0aUhlYWRBdHRlbnRpb25cIiwgW211bHRpSGVhZEF0dGVudGlvbiwgcGFyc2VNdWx0aUhlYWRBdHRlbnRpb25BdHRyaWJ1dGVzXV0sXG4gICAgICAgIFtcIk5lZ1wiLCBbbmVnXV0sXG4gICAgICAgIFtcIk5vdFwiLCBbbm90XV0sXG4gICAgICAgIFtcIlBhZFwiLCBbcGFkXV0sXG4gICAgICAgIFtcIlBvd1wiLCBbcG93XV0sXG4gICAgICAgIFtcIlJhbmdlXCIsIFtyYW5nZV1dLFxuICAgICAgICBbXCJSZWNpcHJvY2FsXCIsIFtyZWNpcHJvY2FsXV0sXG4gICAgICAgIFtcIlJlZHVjZU1pblwiLCBbcmVkdWNlTWluXV0sXG4gICAgICAgIFtcIlJlZHVjZU1lYW5cIiwgW3JlZHVjZU1lYW5dXSxcbiAgICAgICAgW1wiUmVkdWNlTWF4XCIsIFtyZWR1Y2VNYXhdXSxcbiAgICAgICAgW1wiUmVkdWNlU3VtXCIsIFtyZWR1Y2VTdW1dXSxcbiAgICAgICAgW1wiUmVkdWNlUHJvZFwiLCBbcmVkdWNlUHJvZF1dLFxuICAgICAgICBbXCJSZWR1Y2VMMVwiLCBbcmVkdWNlTDFdXSxcbiAgICAgICAgW1wiUmVkdWNlTDJcIiwgW3JlZHVjZUwyXV0sXG4gICAgICAgIFtcIlJlZHVjZUxvZ1N1bVwiLCBbcmVkdWNlTG9nU3VtXV0sXG4gICAgICAgIFtcIlJlZHVjZUxvZ1N1bUV4cFwiLCBbcmVkdWNlTG9nU3VtRXhwXV0sXG4gICAgICAgIFtcIlJlZHVjZVN1bVNxdWFyZVwiLCBbcmVkdWNlU3VtU3F1YXJlXV0sXG4gICAgICAgIFtcIlJlbHVcIiwgW3JlbHVdXSxcbiAgICAgICAgW1wiUmVzaXplXCIsIFtyZXNpemUsIHBhcnNlUmVzaXplQXR0cmlidXRlc11dLFxuICAgICAgICBbXCJSb3RhcnlFbWJlZGRpbmdcIiwgW3JvdGFyeUVtYmVkZGluZ11dLFxuICAgICAgICBbXCJTaWdtb2lkXCIsIFtzaWdtb2lkXV0sXG4gICAgICAgIFtcIlNpblwiLCBbc2luXV0sXG4gICAgICAgIFtcIlNpbmhcIiwgW3NpbmhdXSxcbiAgICAgICAgW1wiU2xpY2VcIiwgW3NsaWNlLCBwYXJzZVNsaWNlQXR0cmlidXRlc11dLFxuICAgICAgICBbXCJTa2lwTGF5ZXJOb3JtYWxpemF0aW9uXCIsIFtza2lwTGF5ZXJOb3JtXV0sXG4gICAgICAgIFtcIlNwbGl0XCIsIFtzcGxpdCwgcGFyc2VTcGxpdEF0dHJpYnV0ZXNdXSxcbiAgICAgICAgW1wiU3FydFwiLCBbc3FydF1dLFxuICAgICAgICBbXCJTb2Z0bWF4XCIsIFtzb2Z0bWF4LCBwYXJzZVNvZnRtYXhBdHRyaWJ1dGVzXV0sXG4gICAgICAgIFtcIlN1YlwiLCBbc3ViXV0sXG4gICAgICAgIFtcIlRhblwiLCBbdGFuXV0sXG4gICAgICAgIFtcIlRhbmhcIiwgW3RhbmhdXSxcbiAgICAgICAgW1wiVGhyZXNob2xkZWRSZWx1XCIsIFt0aHJlc2hvbGRlZFJlbHUsIHBhcnNlQWxwaGFBdHRyaWJ1dGVzXV0sXG4gICAgICAgIFtcIlRpbGVcIiwgW3RpbGVdXSxcbiAgICAgICAgW1wiVHJhbnNwb3NlXCIsIFt0cmFuc3Bvc2UsIHBhcnNlVHJhbnNwb3NlQXR0cmlidXRlc11dLFxuICAgICAgICBbXCJXaGVyZVwiLCBbd2hlcmVdXVxuICAgICAgXSk7XG4gICAgfVxuICB9KTtcblxuICAvLyB3ZWIvbGliL3dhc20vanNlcC93ZWJncHUvcHJvZ3JhbS1tYW5hZ2VyLnRzXG4gIHZhciBQcm9ncmFtTWFuYWdlcjtcbiAgdmFyIGluaXRfcHJvZ3JhbV9tYW5hZ2VyID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvd2ViZ3B1L3Byb2dyYW0tbWFuYWdlci50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X2VzbSgpO1xuICAgICAgaW5pdF9sb2coKTtcbiAgICAgIGluaXRfY29tbW9uKCk7XG4gICAgICBQcm9ncmFtTWFuYWdlciA9IGNsYXNzIHtcbiAgICAgICAgY29uc3RydWN0b3IoYmFja2VuZCkge1xuICAgICAgICAgIHRoaXMuYmFja2VuZCA9IGJhY2tlbmQ7XG4gICAgICAgICAgdGhpcy5yZXBvID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNCb3VuZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGdldEFydGlmYWN0KGtleSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlcG8uZ2V0KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0QXJ0aWZhY3Qoa2V5LCBhcnRpZmFjdCkge1xuICAgICAgICAgIHRoaXMucmVwby5zZXQoa2V5LCBhcnRpZmFjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcnVuKGJ1aWxkQXJ0aWZhY3QsIGlucHV0cywgb3V0cHV0cywgZGlzcGF0Y2hHcm91cCwgdW5pZm9ybUJ1ZmZlckJpbmRpbmcpIHtcbiAgICAgICAgICBUUkFDRV9GVU5DX0JFR0lOKGJ1aWxkQXJ0aWZhY3QucHJvZ3JhbUluZm8ubmFtZSk7XG4gICAgICAgICAgY29uc3QgZGV2aWNlID0gdGhpcy5iYWNrZW5kLmRldmljZTtcbiAgICAgICAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSB0aGlzLmJhY2tlbmQuZ2V0Q29tcHV0ZVBhc3NFbmNvZGVyKCk7XG4gICAgICAgICAgdGhpcy5iYWNrZW5kLndyaXRlVGltZXN0YW1wKHRoaXMuYmFja2VuZC5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyKTtcbiAgICAgICAgICBjb25zdCBlbnRyaWVzID0gW107XG4gICAgICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaCh7IGJpbmRpbmc6IGVudHJpZXMubGVuZ3RoLCByZXNvdXJjZTogeyBidWZmZXI6IGlucHV0LmJ1ZmZlciB9IH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBvdXRwdXRzKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goeyBiaW5kaW5nOiBlbnRyaWVzLmxlbmd0aCwgcmVzb3VyY2U6IHsgYnVmZmVyOiBvdXRwdXQuYnVmZmVyIH0gfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyQmluZGluZykge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKHsgYmluZGluZzogZW50cmllcy5sZW5ndGgsIHJlc291cmNlOiB1bmlmb3JtQnVmZmVyQmluZGluZyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChcbiAgICAgICAgICAgIHsgbGF5b3V0OiBidWlsZEFydGlmYWN0LmNvbXB1dGVQaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCksIGVudHJpZXMsIGxhYmVsOiBidWlsZEFydGlmYWN0LnByb2dyYW1JbmZvLm5hbWUgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuYmFja2VuZC5zZXNzaW9uU3RhdHVzID09PSBcImNhcHR1cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kSW5mbyA9IHtcbiAgICAgICAgICAgICAga2VybmVsSWQ6IHRoaXMuYmFja2VuZC5jdXJyZW50S2VybmVsSWQsXG4gICAgICAgICAgICAgIGNvbXB1dGVQaXBlbGluZTogYnVpbGRBcnRpZmFjdC5jb21wdXRlUGlwZWxpbmUsXG4gICAgICAgICAgICAgIGJpbmRHcm91cCxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hHcm91cFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25Db21tYW5kTGlzdCA9IHRoaXMuYmFja2VuZC5jYXB0dXJlZENvbW1hbmRMaXN0LmdldCh0aGlzLmJhY2tlbmQuY3VycmVudFNlc3Npb25JZCk7XG4gICAgICAgICAgICBzZXNzaW9uQ29tbWFuZExpc3QucHVzaChjb21tYW5kSW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShidWlsZEFydGlmYWN0LmNvbXB1dGVQaXBlbGluZSk7XG4gICAgICAgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApO1xuICAgICAgICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaFdvcmtncm91cHMoLi4uZGlzcGF0Y2hHcm91cCk7XG4gICAgICAgICAgdGhpcy5iYWNrZW5kLndyaXRlVGltZXN0YW1wKHRoaXMuYmFja2VuZC5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyICsgMSk7XG4gICAgICAgICAgdGhpcy5iYWNrZW5kLnBlbmRpbmdEaXNwYXRjaE51bWJlcisrO1xuICAgICAgICAgIGlmICh0aGlzLmJhY2tlbmQucGVuZGluZ0Rpc3BhdGNoTnVtYmVyID49IHRoaXMuYmFja2VuZC5tYXhEaXNwYXRjaE51bWJlciB8fCB0aGlzLmJhY2tlbmQucXVlcnlUeXBlID09PSBcImF0LXBhc3Nlc1wiKSB7XG4gICAgICAgICAgICB0aGlzLmJhY2tlbmQuZW5kQ29tcHV0ZVBhc3MoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuYmFja2VuZC5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgPj0gdGhpcy5iYWNrZW5kLm1heERpc3BhdGNoTnVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJhY2tlbmQuZmx1c2goKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgVFJBQ0VfRlVOQ19FTkQoYnVpbGRBcnRpZmFjdC5wcm9ncmFtSW5mby5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICB9XG4gICAgICAgIGJ1aWxkKHByb2dyYW1JbmZvLCBub3JtYWxpemVkRGlzcGF0Y2hHcm91cFNpemUpIHtcbiAgICAgICAgICBUUkFDRV9GVU5DX0JFR0lOKHByb2dyYW1JbmZvLm5hbWUpO1xuICAgICAgICAgIGNvbnN0IGRldmljZSA9IHRoaXMuYmFja2VuZC5kZXZpY2U7XG4gICAgICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFtdO1xuICAgICAgICAgIGlmIChkZXZpY2UuZmVhdHVyZXMuaGFzKFwic2hhZGVyLWYxNlwiKSkge1xuICAgICAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKFwiZW5hYmxlIGYxNjtcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNoYWRlckhlbHBlciA9IGNyZWF0ZVNoYWRlckhlbHBlcihub3JtYWxpemVkRGlzcGF0Y2hHcm91cFNpemUsIHRoaXMuYmFja2VuZC5kZXZpY2UubGltaXRzKTtcbiAgICAgICAgICBjb25zdCB1c2VyQ29kZSA9IHByb2dyYW1JbmZvLmdldFNoYWRlclNvdXJjZShzaGFkZXJIZWxwZXIpO1xuICAgICAgICAgIGNvbnN0IGNvZGUgPSBgJHtleHRlbnNpb25zLmpvaW4oXCJcXG5cIil9XG4ke3NoYWRlckhlbHBlci5hZGRpdGlvbmFsSW1wbGVtZW50YXRpb25zfVxuJHt1c2VyQ29kZX1gO1xuICAgICAgICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeyBjb2RlLCBsYWJlbDogcHJvZ3JhbUluZm8ubmFtZSB9KTtcbiAgICAgICAgICBMT0dfREVCVUcoXCJ2ZXJib3NlXCIsICgpID0+IGBbV2ViR1BVXSAke3Byb2dyYW1JbmZvLm5hbWV9IHNoYWRlciBjb2RlOiAke2NvZGV9YCk7XG4gICAgICAgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShcbiAgICAgICAgICAgIHsgY29tcHV0ZTogeyBtb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogXCJtYWluXCIgfSwgbGF5b3V0OiBcImF1dG9cIiwgbGFiZWw6IHByb2dyYW1JbmZvLm5hbWUgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgVFJBQ0VfRlVOQ19FTkQocHJvZ3JhbUluZm8ubmFtZSk7XG4gICAgICAgICAgcmV0dXJuIHsgcHJvZ3JhbUluZm8sIGNvbXB1dGVQaXBlbGluZSwgdW5pZm9ybVZhcmlhYmxlc0luZm86IHNoYWRlckhlbHBlci52YXJpYWJsZXNJbmZvIH07XG4gICAgICAgIH1cbiAgICAgICAgbm9ybWFsaXplRGlzcGF0Y2hHcm91cFNpemUoZGlzcGF0Y2hHcm91cCkge1xuICAgICAgICAgIGNvbnN0IHggPSB0eXBlb2YgZGlzcGF0Y2hHcm91cCA9PT0gXCJudW1iZXJcIiA/IGRpc3BhdGNoR3JvdXAgOiBkaXNwYXRjaEdyb3VwLng7XG4gICAgICAgICAgY29uc3QgeSA9IHR5cGVvZiBkaXNwYXRjaEdyb3VwID09PSBcIm51bWJlclwiID8gMSA6IGRpc3BhdGNoR3JvdXAueSB8fCAxO1xuICAgICAgICAgIGNvbnN0IHogPSB0eXBlb2YgZGlzcGF0Y2hHcm91cCA9PT0gXCJudW1iZXJcIiA/IDEgOiBkaXNwYXRjaEdyb3VwLnogfHwgMTtcbiAgICAgICAgICBjb25zdCBsaW1pdFBlckRpbWVuc2lvbiA9IHRoaXMuYmFja2VuZC5kZXZpY2UubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGltZW5zaW9uO1xuICAgICAgICAgIGlmICh4IDw9IGxpbWl0UGVyRGltZW5zaW9uICYmIHkgPD0gbGltaXRQZXJEaW1lbnNpb24gJiYgeiA8PSBsaW1pdFBlckRpbWVuc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIFt4LCB5LCB6XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc2l6ZSA9IHggKiB5ICogejtcbiAgICAgICAgICBsZXQgZGlzcGF0Y2hBdmVyYWdlID0gTWF0aC5jZWlsKE1hdGguc3FydChzaXplKSk7XG4gICAgICAgICAgaWYgKGRpc3BhdGNoQXZlcmFnZSA+IGxpbWl0UGVyRGltZW5zaW9uKSB7XG4gICAgICAgICAgICBkaXNwYXRjaEF2ZXJhZ2UgPSBNYXRoLmNlaWwoTWF0aC5jYnJ0KHNpemUpKTtcbiAgICAgICAgICAgIGlmIChkaXNwYXRjaEF2ZXJhZ2UgPiBsaW1pdFBlckRpbWVuc2lvbikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUb3RhbCBkaXNwYXRjaCBzaXplIGV4Y2VlZHMgV2ViR1BVIG1heGltdW0uXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtkaXNwYXRjaEF2ZXJhZ2UsIGRpc3BhdGNoQXZlcmFnZSwgZGlzcGF0Y2hBdmVyYWdlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtkaXNwYXRjaEF2ZXJhZ2UsIGRpc3BhdGNoQXZlcmFnZSwgMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvYmFja2VuZC13ZWJncHUudHNcbiAgdmFyIGdldFByb2dyYW1JbnB1dFRlbnNvckluZm9EZXBlbmRlbmN5S2V5LCBnZXRQcm9ncmFtSW5mb1VuaXF1ZUtleSwgQWRhcHRlckluZm9JbXBsLCBXZWJHcHVCYWNrZW5kO1xuICB2YXIgaW5pdF9iYWNrZW5kX3dlYmdwdSA9IF9fZXNtKHtcbiAgICBcIndlYi9saWIvd2FzbS9qc2VwL2JhY2tlbmQtd2ViZ3B1LnRzXCIoKSB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgIGluaXRfZXNtKCk7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X2xvZygpO1xuICAgICAgaW5pdF90ZW5zb3JfdmlldygpO1xuICAgICAgaW5pdF9ncHVfZGF0YV9tYW5hZ2VyKCk7XG4gICAgICBpbml0X29wX3Jlc29sdmVfcnVsZXMoKTtcbiAgICAgIGluaXRfcHJvZ3JhbV9tYW5hZ2VyKCk7XG4gICAgICBnZXRQcm9ncmFtSW5wdXRUZW5zb3JJbmZvRGVwZW5kZW5jeUtleSA9IChpbnB1dFRlbnNvcnMsIGlucHV0RGVwZW5kZW5jaWVzKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dERlcGVuZGVuY2llcy5sZW5ndGggIT09IGlucHV0VGVuc29ycy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0RGVwZW5kZW5jaWVzIGxlbmd0aCAke2lucHV0RGVwZW5kZW5jaWVzLmxlbmd0aH0gaXMgbm90IGVxdWFsIHRvIGlucHV0VGVuc29ycyBsZW5ndGggJHtpbnB1dFRlbnNvcnMubGVuZ3RofS5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dEluZm9zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRUZW5zb3JzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IGlucHV0VGVuc29yc1tpXS5kYXRhVHlwZTtcbiAgICAgICAgICBzd2l0Y2ggKGlucHV0RGVwZW5kZW5jaWVzW2ldKSB7XG4gICAgICAgICAgICBjYXNlIFwibm9uZVwiOiB7XG4gICAgICAgICAgICAgIGlucHV0SW5mb3MucHVzaChcIlwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidHlwZVwiOiB7XG4gICAgICAgICAgICAgIGlucHV0SW5mb3MucHVzaChgJHt0eXBlfWApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyYW5rXCI6IHtcbiAgICAgICAgICAgICAgY29uc3QgcmFuayA9IGlucHV0VGVuc29yc1tpXS5kaW1zLmxlbmd0aDtcbiAgICAgICAgICAgICAgaW5wdXRJbmZvcy5wdXNoKGAke3R5cGV9OyR7cmFua31gKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiZGltc1wiOiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpbXMgPSBpbnB1dFRlbnNvcnNbaV0uZGltcy5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgaW5wdXRJbmZvcy5wdXNoKGAke3R5cGV9OyR7ZGltc31gKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGlucHV0IGRlcGVuZGVuY3k6ICR7aW5wdXREZXBlbmRlbmNpZXNbaV19YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dEluZm9zLmpvaW4oXCJ8XCIpO1xuICAgICAgfTtcbiAgICAgIGdldFByb2dyYW1JbmZvVW5pcXVlS2V5ID0gKHByb2dyYW1JbmZvLCBpbnB1dFRlbnNvcnMsIGlzMURpbWVuc2lvbkRpc3BhdGNoKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBwcm9ncmFtSW5mby5uYW1lO1xuICAgICAgICBpZiAocHJvZ3JhbUluZm8uc2hhZGVyQ2FjaGU/LmhpbnQpIHtcbiAgICAgICAgICBrZXkgKz0gXCJbXCIgKyBwcm9ncmFtSW5mby5zaGFkZXJDYWNoZS5oaW50ICsgXCJdXCI7XG4gICAgICAgIH1cbiAgICAgICAga2V5ICs9IFwiOlwiICsgaXMxRGltZW5zaW9uRGlzcGF0Y2ggKyBgOiR7Z2V0UHJvZ3JhbUlucHV0VGVuc29ySW5mb0RlcGVuZGVuY3lLZXkoXG4gICAgICAgICAgaW5wdXRUZW5zb3JzLFxuICAgICAgICAgIHByb2dyYW1JbmZvLnNoYWRlckNhY2hlPy5pbnB1dERlcGVuZGVuY2llcyA/PyBuZXcgQXJyYXkoaW5wdXRUZW5zb3JzLmxlbmd0aCkuZmlsbChcImRpbXNcIilcbiAgICAgICAgKX1gO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfTtcbiAgICAgIEFkYXB0ZXJJbmZvSW1wbCA9IGNsYXNzIHtcbiAgICAgICAgY29uc3RydWN0b3IoYWRhcHRlckluZm8pIHtcbiAgICAgICAgICBpZiAoYWRhcHRlckluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuYXJjaGl0ZWN0dXJlID0gYWRhcHRlckluZm8uYXJjaGl0ZWN0dXJlO1xuICAgICAgICAgICAgdGhpcy52ZW5kb3IgPSBhZGFwdGVySW5mby52ZW5kb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlzQXJjaGl0ZWN0dXJlKGFyY2hpdGVjdHVyZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmFyY2hpdGVjdHVyZSA9PT0gYXJjaGl0ZWN0dXJlO1xuICAgICAgICB9XG4gICAgICAgIGlzVmVuZG9yKHZlbmRvcikge1xuICAgICAgICAgIHJldHVybiB0aGlzLnZlbmRvciA9PT0gdmVuZG9yO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgV2ViR3B1QmFja2VuZCA9IGNsYXNzIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogcmVwcmVzZW50aW5nIHRoZSBzZXNzaW9uIElEIG9mIHdoaWNoIGlzIGN1cnJlbnRseSBiZWluZyBydW4uXG4gICAgICAgICAgICogYG51bGxgIG1lYW5zIG5vIHNlc3Npb24gaXMgYmVpbmcgcnVuLlxuICAgICAgICAgICAqIG9ubHkgdmFsaWQgd2hlbiBzZXNzaW9uLnJ1biBpcyBleGVjdXRlZC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQgPSBudWxsO1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIHJlcHJlc2VudGluZyB0aGUga2VybmVsIElEIG9mIHdoaWNoIGlzIGN1cnJlbnRseSBiZWluZyBjb21wdXRlZCAoQ1BVIGNvZGUgcGVyc3BlY3RpdmUpLlxuICAgICAgICAgICAqIGBudWxsYCBtZWFucyBubyBrZXJuZWwgaXMgYmVpbmcgY29tcHV0ZWQuXG4gICAgICAgICAgICogb25seSBvbmUga2VybmVsIGNhbiBiZSBjb21wdXRlZCBhdCBhIG1vbWVudC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmN1cnJlbnRLZXJuZWxJZCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5jb21tYW5kRW5jb2RlciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5jb21wdXRlUGFzc0VuY29kZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMubWF4RGlzcGF0Y2hOdW1iZXIgPSAxNjtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciA9IDA7XG4gICAgICAgICAgLy8gaW5mbyBvZiBrZXJuZWxzIHBlbmRpbmcgc3VibWlzc2lvbiBmb3IgYSBzaW5nbGUgYmF0Y2hcbiAgICAgICAgICB0aGlzLnBlbmRpbmdLZXJuZWxzID0gW107XG4gICAgICAgICAgLy8gcXVlcnlSZWFkQnVmZmVyIC0+IHBlbmRpbmdLZXJuZWxzIG1hcHBpbmcgZm9yIGFsbCB0aGUgYmF0Y2hlc1xuICAgICAgICAgIHRoaXMucGVuZGluZ1F1ZXJpZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9IFwiZGVmYXVsdFwiO1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIGEgU2Vzc2lvbklEIC0+IENvbW1hbmRJbmZvW10gbWFwcGluZy4gSXQncyB1c2VkIHRvIHJlY29yZCBhbGwgR1BVIGNvbW1hbmRzIGZvciBjb3JyZXNwb25kaW5nIHNlc3Npb24uXG4gICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5jYXB0dXJlZENvbW1hbmRMaXN0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBhIFNlc3Npb25JRCAtPiBQZW5kaW5nS2VybmVsSW5mb1tdIG1hcHBpbmcgZm9yIHByb2ZpbGluZy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLmNhcHR1cmVkUGVuZGluZ0tlcm5lbHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIGEgU2Vzc2lvbklEIC0+IGEgTWFwIG9mIChJbnB1dE91dHB1dEluZGV4IC0+IFtJRCwgR1BVQnVmZmVyXSkgbWFwcGluZy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0aGlzLnNlc3Npb25FeHRlcm5hbERhdGFNYXBwaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogZ2V0IHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgY3VycmVudCBrZXJuZWxcbiAgICAgICAgICovXG4gICAgICAgIGdldCBjdXJyZW50S2VybmVsQ3VzdG9tRGF0YSgpIHtcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50S2VybmVsSWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImN1cnJlbnRLZXJuZWxDdXN0b21EYXRhKCk6IGN1cnJlbnRLZXJuZWxJZCBpcyBudWxsLiAoc2hvdWxkIG5vdCBoYXBwZW4pXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMua2VybmVsQ3VzdG9tRGF0YS5nZXQodGhpcy5jdXJyZW50S2VybmVsSWQpO1xuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICAgICAgdGhpcy5rZXJuZWxDdXN0b21EYXRhLnNldCh0aGlzLmN1cnJlbnRLZXJuZWxJZCwgZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGluaXRpYWxpemUoZW52MywgYWRhcHRlcikge1xuICAgICAgICAgIHRoaXMuZW52ID0gZW52MztcbiAgICAgICAgICBjb25zdCByZXF1aXJlZEZlYXR1cmVzID0gW107XG4gICAgICAgICAgY29uc3QgZGV2aWNlRGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHJlcXVpcmVkTGltaXRzOiB7XG4gICAgICAgICAgICAgIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZTogYWRhcHRlci5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplLFxuICAgICAgICAgICAgICBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbjogYWRhcHRlci5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cHNQZXJEaW1lbnNpb24sXG4gICAgICAgICAgICAgIG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZTogYWRhcHRlci5saW1pdHMubWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplLFxuICAgICAgICAgICAgICBtYXhCdWZmZXJTaXplOiBhZGFwdGVyLmxpbWl0cy5tYXhCdWZmZXJTaXplLFxuICAgICAgICAgICAgICBtYXhDb21wdXRlSW52b2NhdGlvbnNQZXJXb3JrZ3JvdXA6IGFkYXB0ZXIubGltaXRzLm1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCxcbiAgICAgICAgICAgICAgbWF4Q29tcHV0ZVdvcmtncm91cFNpemVYOiBhZGFwdGVyLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgsXG4gICAgICAgICAgICAgIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWTogYWRhcHRlci5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFNpemVZLFxuICAgICAgICAgICAgICBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVo6IGFkYXB0ZXIubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVkRmVhdHVyZXNcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChhZGFwdGVyLmZlYXR1cmVzLmhhcyhcImNocm9taXVtLWV4cGVyaW1lbnRhbC10aW1lc3RhbXAtcXVlcnktaW5zaWRlLXBhc3Nlc1wiKSkge1xuICAgICAgICAgICAgcmVxdWlyZWRGZWF0dXJlcy5wdXNoKFwiY2hyb21pdW0tZXhwZXJpbWVudGFsLXRpbWVzdGFtcC1xdWVyeS1pbnNpZGUtcGFzc2VzXCIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYWRhcHRlci5mZWF0dXJlcy5oYXMoXCJ0aW1lc3RhbXAtcXVlcnlcIikpIHtcbiAgICAgICAgICAgIHJlcXVpcmVkRmVhdHVyZXMucHVzaChcInRpbWVzdGFtcC1xdWVyeVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFkYXB0ZXIuZmVhdHVyZXMuaGFzKFwic2hhZGVyLWYxNlwiKSkge1xuICAgICAgICAgICAgcmVxdWlyZWRGZWF0dXJlcy5wdXNoKFwic2hhZGVyLWYxNlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoZGV2aWNlRGVzY3JpcHRvcik7XG4gICAgICAgICAgdGhpcy5hZGFwdGVySW5mbyA9IG5ldyBBZGFwdGVySW5mb0ltcGwoYXdhaXQgYWRhcHRlci5yZXF1ZXN0QWRhcHRlckluZm8oKSk7XG4gICAgICAgICAgdGhpcy5ncHVEYXRhTWFuYWdlciA9IGNyZWF0ZUdwdURhdGFNYW5hZ2VyKHRoaXMpO1xuICAgICAgICAgIHRoaXMucHJvZ3JhbU1hbmFnZXIgPSBuZXcgUHJvZ3JhbU1hbmFnZXIodGhpcyk7XG4gICAgICAgICAgdGhpcy5rZXJuZWxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgICB0aGlzLmtlcm5lbFBlcnNpc3RlbnREYXRhID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgICB0aGlzLmtlcm5lbEN1c3RvbURhdGEgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgICAgIGNvbmZpZ3VyZUxvZ2dlcihlbnYzLmxvZ0xldmVsLCAhIWVudjMuZGVidWcpO1xuICAgICAgICAgIHRoaXMuZGV2aWNlLm9udW5jYXB0dXJlZGVycm9yID0gKGV2KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXYuZXJyb3IgaW5zdGFuY2VvZiBHUFVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQW4gdW5jYXVnaHQgV2ViR1BVIHZhbGlkYXRpb24gZXJyb3Igd2FzIHJhaXNlZDogJHtldi5lcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgdGhpcy5lbnYud2ViZ3B1LFxuICAgICAgICAgICAgXCJkZXZpY2VcIixcbiAgICAgICAgICAgIHsgdmFsdWU6IHRoaXMuZGV2aWNlLCB3cml0YWJsZTogZmFsc2UsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogZmFsc2UgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgdGhpcy5lbnYud2ViZ3B1LFxuICAgICAgICAgICAgXCJhZGFwdGVyXCIsXG4gICAgICAgICAgICB7IHZhbHVlOiBhZGFwdGVyLCB3cml0YWJsZTogZmFsc2UsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogZmFsc2UgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zZXRRdWVyeVR5cGUoKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWVyeVNldCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdGhpcy5xdWVyeVNldC5kZXN0cm95KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3B1RGF0YU1hbmFnZXIuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGdldENvbW1hbmRFbmNvZGVyKCkge1xuICAgICAgICAgIGlmICghdGhpcy5jb21tYW5kRW5jb2Rlcikge1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kRW5jb2RlciA9IHRoaXMuZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1hbmRFbmNvZGVyO1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXB1dGVQYXNzRW5jb2RlcigpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuY29tcHV0ZVBhc3NFbmNvZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IHRoaXMuZ2V0Q29tbWFuZEVuY29kZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVQYXNzRGVzY3JpcHRvciA9IHt9O1xuICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlUeXBlID09PSBcImF0LXBhc3Nlc1wiKSB7XG4gICAgICAgICAgICAgIGNvbXB1dGVQYXNzRGVzY3JpcHRvci50aW1lc3RhbXBXcml0ZXMgPSB7XG4gICAgICAgICAgICAgICAgcXVlcnlTZXQ6IHRoaXMucXVlcnlTZXQsXG4gICAgICAgICAgICAgICAgYmVnaW5uaW5nT2ZQYXNzV3JpdGVJbmRleDogdGhpcy5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyLFxuICAgICAgICAgICAgICAgIGVuZE9mUGFzc1dyaXRlSW5kZXg6IHRoaXMucGVuZGluZ0Rpc3BhdGNoTnVtYmVyICogMiArIDFcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcyhjb21wdXRlUGFzc0Rlc2NyaXB0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlUGFzc0VuY29kZXI7XG4gICAgICAgIH1cbiAgICAgICAgZW5kQ29tcHV0ZVBhc3MoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29tcHV0ZVBhc3NFbmNvZGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVQYXNzRW5jb2Rlci5lbmQoKTtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZVBhc3NFbmNvZGVyID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmx1c2goKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbW1hbmRFbmNvZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIFRSQUNFX0ZVTkNfQkVHSU4oKTtcbiAgICAgICAgICB0aGlzLmVuZENvbXB1dGVQYXNzKCk7XG4gICAgICAgICAgbGV0IHF1ZXJ5UmVhZEJ1ZmZlcjtcbiAgICAgICAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09IFwibm9uZVwiKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRFbmNvZGVyLnJlc29sdmVRdWVyeVNldChcbiAgICAgICAgICAgICAgdGhpcy5xdWVyeVNldCxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyLFxuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5UmVzb2x2ZUJ1ZmZlcixcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHF1ZXJ5UmVhZEJ1ZmZlciA9IHRoaXMuZGV2aWNlLmNyZWF0ZUJ1ZmZlcihcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgeyBzaXplOiB0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciAqIDIgKiA4LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5DT1BZX0RTVCB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUXVlcmllcy5zZXQocXVlcnlSZWFkQnVmZmVyLCB0aGlzLnBlbmRpbmdLZXJuZWxzKTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0tlcm5lbHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKFxuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5UmVzb2x2ZUJ1ZmZlcixcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgcXVlcnlSZWFkQnVmZmVyLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciAqIDIgKiA4XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRldmljZS5xdWV1ZS5zdWJtaXQoW3RoaXMuY29tbWFuZEVuY29kZXIuZmluaXNoKCldKTtcbiAgICAgICAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLnJlZnJlc2hQZW5kaW5nQnVmZmVycygpO1xuICAgICAgICAgIHRoaXMuY29tbWFuZEVuY29kZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMucGVuZGluZ0Rpc3BhdGNoTnVtYmVyID0gMDtcbiAgICAgICAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09IFwibm9uZVwiKSB7XG4gICAgICAgICAgICB2b2lkIHF1ZXJ5UmVhZEJ1ZmZlci5tYXBBc3luYyhHUFVNYXBNb2RlLlJFQUQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXBwZWREYXRhID0gbmV3IEJpZ1VpbnQ2NEFycmF5KHF1ZXJ5UmVhZEJ1ZmZlci5nZXRNYXBwZWRSYW5nZSgpKTtcbiAgICAgICAgICAgICAgY29uc3QgcGVuZGluZ0tlcm5lbHMgPSB0aGlzLnBlbmRpbmdRdWVyaWVzLmdldChxdWVyeVJlYWRCdWZmZXIpO1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcHBlZERhdGEubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGVuZGluZ0tlcm5lbEluZm8gPSBwZW5kaW5nS2VybmVsc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXJuZWxJZCA9IHBlbmRpbmdLZXJuZWxJbmZvLmtlcm5lbElkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtlcm5lbEluZm8gPSB0aGlzLmtlcm5lbHMuZ2V0KGtlcm5lbElkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXJuZWxUeXBlID0ga2VybmVsSW5mby5rZXJuZWxUeXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtlcm5lbE5hbWUgPSBrZXJuZWxJbmZvLmtlcm5lbE5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZ3JhbU5hbWUgPSBwZW5kaW5nS2VybmVsSW5mby5wcm9ncmFtTmFtZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFRlbnNvclZpZXdzID0gcGVuZGluZ0tlcm5lbEluZm8uaW5wdXRUZW5zb3JWaWV3cztcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRUZW5zb3JWaWV3cyA9IHBlbmRpbmdLZXJuZWxJbmZvLm91dHB1dFRlbnNvclZpZXdzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZVU2NCA9IG1hcHBlZERhdGFbaSAqIDJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWVVNjQgPSBtYXBwZWREYXRhW2kgKiAyICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnF1ZXJ5VGltZUJhc2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlUaW1lQmFzZSA9IHN0YXJ0VGltZVU2NDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gTnVtYmVyKHN0YXJ0VGltZVU2NCAtIHRoaXMucXVlcnlUaW1lQmFzZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IE51bWJlcihlbmRUaW1lVTY0IC0gdGhpcy5xdWVyeVRpbWVCYXNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHN0YXJ0VGltZSkgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGVuZFRpbWUpKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluY29ycmVjdCB0aW1lc3RhbXAgcmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVudi53ZWJncHUucHJvZmlsaW5nPy5vbmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZW52LndlYmdwdS5wcm9maWxpbmcub25kYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRzTWV0YWRhdGE6IGlucHV0VGVuc29yVmlld3MubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSkgPT4gKHsgZGltczogdmFsdWUuZGltcywgZGF0YVR5cGU6IHRlbnNvckRhdGFUeXBlRW51bVRvU3RyaW5nKHZhbHVlLmRhdGFUeXBlKSB9KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRzTWV0YWRhdGE6IG91dHB1dFRlbnNvclZpZXdzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAodmFsdWUpID0+ICh7IGRpbXM6IHZhbHVlLmRpbXMsIGRhdGFUeXBlOiB0ZW5zb3JEYXRhVHlwZUVudW1Ub1N0cmluZyh2YWx1ZS5kYXRhVHlwZSkgfSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAga2VybmVsSWQsXG4gICAgICAgICAgICAgICAgICAgIGtlcm5lbFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGtlcm5lbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW1OYW1lLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIGVuZFRpbWVcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBsZXQgaW5wdXRTaGFwZXMgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgaW5wdXRUZW5zb3JWaWV3cy5mb3JFYWNoKCh2YWx1ZSwgaTIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRTaGFwZXMgKz0gYGlucHV0WyR7aTJ9XTogWyR7dmFsdWUuZGltc31dIHwgJHt0ZW5zb3JEYXRhVHlwZUVudW1Ub1N0cmluZyh2YWx1ZS5kYXRhVHlwZSl9LCBgO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBsZXQgb3V0cHV0U2hhcGVzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFRlbnNvclZpZXdzLmZvckVhY2goKHZhbHVlLCBpMikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRTaGFwZXMgKz0gYG91dHB1dFske2kyfV06IFske3ZhbHVlLmRpbXN9XSB8ICR7dGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcodmFsdWUuZGF0YVR5cGUpfSwgYDtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtwcm9maWxpbmddIGtlcm5lbCBcIiR7a2VybmVsSWR9fCR7a2VybmVsVHlwZX18JHtrZXJuZWxOYW1lfXwke3Byb2dyYW1OYW1lfVwiICR7aW5wdXRTaGFwZXN9JHtvdXRwdXRTaGFwZXN9ZXhlY3V0aW9uIHRpbWU6ICR7ZW5kVGltZSAtIHN0YXJ0VGltZX0gbnNgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgVFJBQ0UoXCJHUFVcIiwgYCR7cHJvZ3JhbU5hbWV9Ojoke3N0YXJ0VGltZVU2NH06OiR7ZW5kVGltZVU2NH1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBxdWVyeVJlYWRCdWZmZXIudW5tYXAoKTtcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nUXVlcmllcy5kZWxldGUocXVlcnlSZWFkQnVmZmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBUUkFDRV9GVU5DX0VORCgpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBydW4gYSBXZWJHUFUgcHJvZ3JhbS5cbiAgICAgICAgICogQHBhcmFtIHByb2dyYW0gYSBQcm9ncmFtSW5mbyBpbnN0YW5jZVxuICAgICAgICAgKiBAcGFyYW0gaW5wdXRUZW5zb3JWaWV3cyBhIFRlbnNvclZpZXcgYXJyYXkuIGVhY2ggZWxlbWVudCByZXByZXNlbnRzIGEgdmFsdWUgYWxyZWFkeSBleGlzdHMgaW4gR1BVLlxuICAgICAgICAgKiBAcGFyYW0gb3V0cHV0SW5kaWNlcyBhbiBpbmRpY2VzIGFycmF5LiBlYWNoIGVsZW1lbnQgY2FuIGJlIGVpdGhlciAtMSAodGVtcG9yYXJ5IGRhdGEpLCAtMiAocGVyc2lzdGVudCBkYXRhKSBvciBhblxuICAgICAgICAgKiBpbmRleCB0byB0aGUga2VybmVsJ3Mgb3V0cHV0LlxuICAgICAgICAgKiBAcGFyYW0gY3JlYXRlS2VybmVsT3V0cHV0IGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjcmVhdGUgYSB2YWx1ZSB0byBrZXJuZWwncyBvdXRwdXQgd2l0aCB0aGUgZ2l2ZW4gaW5kZXhcbiAgICAgICAgICogQHBhcmFtIGNyZWF0ZUludGVybWVkaWF0ZU91dHB1dCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY3JlYXRlIGEgdmFsdWUgYXMgYSBpbnRlcm1lZGlhdGUgdmFsdWUsIGVpdGhlciB0ZW1wb3JhcnlcbiAgICAgICAgICogb3IgcGVyc2lzdGVudCAob3duZWQgYnkgdGhlIGN1cnJlbnQga2VybmVsKVxuICAgICAgICAgKiBAcmV0dXJucyBhIFRlbnNvclZpZXcgYXJyYXkgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gICAgICAgICAqL1xuICAgICAgICBydW4ocHJvZ3JhbSwgaW5wdXRUZW5zb3JWaWV3cywgb3V0cHV0SW5kaWNlcywgY3JlYXRlS2VybmVsT3V0cHV0LCBjcmVhdGVJbnRlcm1lZGlhdGVPdXRwdXQsIG91dHB1dENvdW50KSB7XG4gICAgICAgICAgVFJBQ0VfRlVOQ19CRUdJTihwcm9ncmFtLm5hbWUpO1xuICAgICAgICAgIGNvbnN0IGlucHV0RGF0YXMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0VGVuc29yVmlld3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBpbnB1dFRlbnNvclZpZXdzW2ldLmRhdGE7XG4gICAgICAgICAgICBpZiAoZGF0YSA9PT0gMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdwdURhdGEgPSB0aGlzLmdwdURhdGFNYW5hZ2VyLmdldChkYXRhKTtcbiAgICAgICAgICAgIGlmICghZ3B1RGF0YSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIEdQVSBkYXRhIGZvciBpbnB1dDogJHtkYXRhfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5wdXREYXRhcy5wdXNoKGdwdURhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IG91dHB1dHMsIGRpc3BhdGNoR3JvdXAsIHByb2dyYW1Vbmlmb3JtcyB9ID0gcHJvZ3JhbS5nZXRSdW5EYXRhKGlucHV0VGVuc29yVmlld3MpO1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZE91dHB1dEluZGljZXMgPSBvdXRwdXRJbmRpY2VzLmxlbmd0aCA9PT0gMCA/IG91dHB1dHMubWFwKChfLCBpKSA9PiBpKSA6IG91dHB1dEluZGljZXM7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlZE91dHB1dEluZGljZXMubGVuZ3RoICE9PSBvdXRwdXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPdXRwdXQgc2l6ZSAke3ZhbGlkYXRlZE91dHB1dEluZGljZXMubGVuZ3RofSBtdXN0IGJlIGVxdWFsIHRvICR7b3V0cHV0cy5sZW5ndGh9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvdXRwdXRUZW5zb3JWaWV3cyA9IFtdO1xuICAgICAgICAgIGNvbnN0IG91dHB1dERhdGFzID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsaWRhdGVkT3V0cHV0SW5kaWNlc1tpXSkgfHwgdmFsaWRhdGVkT3V0cHV0SW5kaWNlc1tpXSA8IC0zIHx8IHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPj0gb3V0cHV0Q291bnQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG91dHB1dCBpbmRleDogJHt2YWxpZGF0ZWRPdXRwdXRJbmRpY2VzW2ldfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPT09IC0zKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNUZW1wb3JhcnkgPSB2YWxpZGF0ZWRPdXRwdXRJbmRpY2VzW2ldID09PSAtMTtcbiAgICAgICAgICAgIGNvbnN0IGlzUGVyc2lzdGVudCA9IHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0gPT09IC0yO1xuICAgICAgICAgICAgY29uc3QgdGVuc29yVmlldyA9IGlzVGVtcG9yYXJ5IHx8IGlzUGVyc2lzdGVudCA/IGNyZWF0ZUludGVybWVkaWF0ZU91dHB1dChvdXRwdXRzW2ldLmRhdGFUeXBlLCBvdXRwdXRzW2ldLmRpbXMpIDogY3JlYXRlS2VybmVsT3V0cHV0KHZhbGlkYXRlZE91dHB1dEluZGljZXNbaV0sIG91dHB1dHNbaV0uZGF0YVR5cGUsIG91dHB1dHNbaV0uZGltcyk7XG4gICAgICAgICAgICBvdXRwdXRUZW5zb3JWaWV3cy5wdXNoKHRlbnNvclZpZXcpO1xuICAgICAgICAgICAgaWYgKHRlbnNvclZpZXcuZGF0YSA9PT0gMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdwdURhdGEgPSB0aGlzLmdwdURhdGFNYW5hZ2VyLmdldCh0ZW5zb3JWaWV3LmRhdGEpO1xuICAgICAgICAgICAgaWYgKCFncHVEYXRhKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gR1BVIGRhdGEgZm9yIG91dHB1dDogJHt0ZW5zb3JWaWV3LmRhdGF9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnkpIHtcbiAgICAgICAgICAgICAgdGhpcy50ZW1wb3JhcnlEYXRhLnB1c2goZ3B1RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNQZXJzaXN0ZW50KSB7XG4gICAgICAgICAgICAgIGxldCBwZXJzaXN0ZW50RGF0YSA9IHRoaXMua2VybmVsUGVyc2lzdGVudERhdGEuZ2V0KHRoaXMuY3VycmVudEtlcm5lbElkKTtcbiAgICAgICAgICAgICAgaWYgKCFwZXJzaXN0ZW50RGF0YSkge1xuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnREYXRhID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5rZXJuZWxQZXJzaXN0ZW50RGF0YS5zZXQodGhpcy5jdXJyZW50S2VybmVsSWQsIHBlcnNpc3RlbnREYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwZXJzaXN0ZW50RGF0YS5wdXNoKGdwdURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0RGF0YXMucHVzaChncHVEYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlucHV0RGF0YXMubGVuZ3RoICE9PSBpbnB1dFRlbnNvclZpZXdzLmxlbmd0aCB8fCBvdXRwdXREYXRhcy5sZW5ndGggIT09IG91dHB1dFRlbnNvclZpZXdzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKG91dHB1dERhdGFzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBUUkFDRV9GVU5DX0VORChwcm9ncmFtLm5hbWUpO1xuICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0VGVuc29yVmlld3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBQcm9ncmFtICR7cHJvZ3JhbS5uYW1lfSBoYXMgemVyby1zaXplZCB0ZW5zb3IocykgaW4gaW5wdXRzIG9yIG91dHB1dHMuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBub3cuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHVuaWZvcm1CdWZmZXJCaW5kaW5nO1xuICAgICAgICAgIGlmIChwcm9ncmFtVW5pZm9ybXMpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBbXTtcbiAgICAgICAgICAgIHByb2dyYW1Vbmlmb3Jtcy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2Ygdi5kYXRhID09PSBcIm51bWJlclwiID8gW3YuZGF0YV0gOiB2LmRhdGE7XG4gICAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzaXplT2ZFbGVtZW50ID0gdi50eXBlID09PSAxMCAvKiBmbG9hdDE2ICovID8gMiA6IDQ7XG4gICAgICAgICAgICAgIGxldCBzaXplT2ZWZWNPck1hdDtcbiAgICAgICAgICAgICAgbGV0IGJhc2VBbGlnbm1lbnQ7XG4gICAgICAgICAgICAgIGlmICh2LnR5cGUgPT09IDEwIC8qIGZsb2F0MTYgKi8pIHtcbiAgICAgICAgICAgICAgICBiYXNlQWxpZ25tZW50ID0gZGF0YS5sZW5ndGggPiA0ID8gMTYgOiBkYXRhLmxlbmd0aCA+IDIgPyA4IDogZGF0YS5sZW5ndGggKiBzaXplT2ZFbGVtZW50O1xuICAgICAgICAgICAgICAgIHNpemVPZlZlY09yTWF0ID0gZGF0YS5sZW5ndGggPiA0ID8gMTYgOiBzaXplT2ZFbGVtZW50ICogZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYmFzZUFsaWdubWVudCA9IGRhdGEubGVuZ3RoIDw9IDIgPyBkYXRhLmxlbmd0aCAqIHNpemVPZkVsZW1lbnQgOiAxNjtcbiAgICAgICAgICAgICAgICBzaXplT2ZWZWNPck1hdCA9IDE2O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBNYXRoLmNlaWwoY3VycmVudE9mZnNldCAvIGJhc2VBbGlnbm1lbnQpICogYmFzZUFsaWdubWVudDtcbiAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKGN1cnJlbnRPZmZzZXQpO1xuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50UGVyVmVjT3JNYXQgPSB2LnR5cGUgPT09IDEwIC8qIGZsb2F0MTYgKi8gPyA4IDogNDtcbiAgICAgICAgICAgICAgY3VycmVudE9mZnNldCArPSBkYXRhLmxlbmd0aCA+IDQgPyBNYXRoLmNlaWwoZGF0YS5sZW5ndGggLyBlbGVtZW50UGVyVmVjT3JNYXQpICogc2l6ZU9mVmVjT3JNYXQgOiBkYXRhLmxlbmd0aCAqIHNpemVPZkVsZW1lbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG1heEFsaWdubWVudE9mRmllbGQgPSAxNjtcbiAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSBNYXRoLmNlaWwoY3VycmVudE9mZnNldCAvIG1heEFsaWdubWVudE9mRmllbGQpICogbWF4QWxpZ25tZW50T2ZGaWVsZDtcbiAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGN1cnJlbnRPZmZzZXQpO1xuICAgICAgICAgICAgcHJvZ3JhbVVuaWZvcm1zLmZvckVhY2goKHYsIGkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gb2Zmc2V0c1tpXTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHR5cGVvZiB2LmRhdGEgPT09IFwibnVtYmVyXCIgPyBbdi5kYXRhXSA6IHYuZGF0YTtcbiAgICAgICAgICAgICAgaWYgKHYudHlwZSA9PT0gNiAvKiBpbnQzMiAqLykge1xuICAgICAgICAgICAgICAgIG5ldyBJbnQzMkFycmF5KGFycmF5QnVmZmVyLCBvZmZzZXQsIGRhdGEubGVuZ3RoKS5zZXQoZGF0YSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodi50eXBlID09PSAxMiAvKiB1aW50MzIgKi8pIHtcbiAgICAgICAgICAgICAgICBuZXcgVWludDMyQXJyYXkoYXJyYXlCdWZmZXIsIG9mZnNldCwgZGF0YS5sZW5ndGgpLnNldChkYXRhKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2LnR5cGUgPT09IDEwIC8qIGZsb2F0MTYgKi8pIHtcbiAgICAgICAgICAgICAgICBuZXcgVWludDE2QXJyYXkoYXJyYXlCdWZmZXIsIG9mZnNldCwgZGF0YS5sZW5ndGgpLnNldChkYXRhKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2LnR5cGUgPT09IDEgLyogZmxvYXQgKi8pIHtcbiAgICAgICAgICAgICAgICBuZXcgRmxvYXQzMkFycmF5KGFycmF5QnVmZmVyLCBvZmZzZXQsIGRhdGEubGVuZ3RoKS5zZXQoZGF0YSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB1bmlmb3JtIHR5cGU6ICR7dGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcodi50eXBlKX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB1bmlmb3JtQnVmZmVyRGF0YSA9IChcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgdGhpcy5ncHVEYXRhTWFuYWdlci5jcmVhdGUoY3VycmVudE9mZnNldCwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9EU1QgfCBHUFVCdWZmZXJVc2FnZS5VTklGT1JNKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZGV2aWNlLnF1ZXVlLndyaXRlQnVmZmVyKHVuaWZvcm1CdWZmZXJEYXRhLmJ1ZmZlciwgMCwgYXJyYXlCdWZmZXIsIDAsIGN1cnJlbnRPZmZzZXQpO1xuICAgICAgICAgICAgdGhpcy5ncHVEYXRhTWFuYWdlci5yZWxlYXNlKHVuaWZvcm1CdWZmZXJEYXRhLmlkKTtcbiAgICAgICAgICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5nID0geyBvZmZzZXQ6IDAsIHNpemU6IGN1cnJlbnRPZmZzZXQsIGJ1ZmZlcjogdW5pZm9ybUJ1ZmZlckRhdGEuYnVmZmVyIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREaXNwYXRjaEdyb3VwID0gdGhpcy5wcm9ncmFtTWFuYWdlci5ub3JtYWxpemVEaXNwYXRjaEdyb3VwU2l6ZShkaXNwYXRjaEdyb3VwKTtcbiAgICAgICAgICBjb25zdCBpczFEaW1lbnNpb25EaXNwYXRjaCA9IG5vcm1hbGl6ZWREaXNwYXRjaEdyb3VwWzFdID09PSAxICYmIG5vcm1hbGl6ZWREaXNwYXRjaEdyb3VwWzJdID09PSAxO1xuICAgICAgICAgIGNvbnN0IGtleSA9IGdldFByb2dyYW1JbmZvVW5pcXVlS2V5KHByb2dyYW0sIGlucHV0VGVuc29yVmlld3MsIGlzMURpbWVuc2lvbkRpc3BhdGNoKTtcbiAgICAgICAgICBsZXQgYXJ0aWZhY3QgPSB0aGlzLnByb2dyYW1NYW5hZ2VyLmdldEFydGlmYWN0KGtleSk7XG4gICAgICAgICAgaWYgKCFhcnRpZmFjdCkge1xuICAgICAgICAgICAgYXJ0aWZhY3QgPSB0aGlzLnByb2dyYW1NYW5hZ2VyLmJ1aWxkKHByb2dyYW0sIG5vcm1hbGl6ZWREaXNwYXRjaEdyb3VwKTtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbU1hbmFnZXIuc2V0QXJ0aWZhY3Qoa2V5LCBhcnRpZmFjdCk7XG4gICAgICAgICAgICBMT0dfREVCVUcoXCJpbmZvXCIsICgpID0+IGBbYXJ0aWZhY3RdIGtleTogJHtrZXl9LCBwcm9ncmFtTmFtZTogJHtwcm9ncmFtLm5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcm9ncmFtVW5pZm9ybXMgJiYgYXJ0aWZhY3QudW5pZm9ybVZhcmlhYmxlc0luZm8pIHtcbiAgICAgICAgICAgIGlmIChwcm9ncmFtVW5pZm9ybXMubGVuZ3RoICE9PSBhcnRpZmFjdC51bmlmb3JtVmFyaWFibGVzSW5mby5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmlmb3JtIHZhcmlhYmxlcyBjb3VudCBtaXNtYXRjaDogZXhwZWN0ICR7YXJ0aWZhY3QudW5pZm9ybVZhcmlhYmxlc0luZm8ubGVuZ3RofSwgZ290ICR7cHJvZ3JhbVVuaWZvcm1zLmxlbmd0aH0gaW4gcHJvZ3JhbSBcIiR7YXJ0aWZhY3QucHJvZ3JhbUluZm8ubmFtZX1cIi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvZ3JhbVVuaWZvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHVuaWZvcm0gPSBwcm9ncmFtVW5pZm9ybXNbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGFjdHVhbFR5cGUgPSB1bmlmb3JtLnR5cGU7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdHVhbExlbmd0aCA9IHR5cGVvZiB1bmlmb3JtLmRhdGEgPT09IFwibnVtYmVyXCIgPyAxIDogdW5pZm9ybS5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgY29uc3QgW3R5cGUsIGxlbmd0aF0gPSBhcnRpZmFjdC51bmlmb3JtVmFyaWFibGVzSW5mb1tpXTtcbiAgICAgICAgICAgICAgaWYgKGFjdHVhbFR5cGUgIT09IHR5cGUgfHwgYWN0dWFsTGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaWZvcm0gdmFyaWFibGUgJHtpfSBtaXNtYXRjaDogZXhwZWN0IHR5cGUgJHt0eXBlfSB3aXRoIHNpemUgJHtsZW5ndGh9LCBnb3QgdHlwZSAke2FjdHVhbFR5cGV9IHdpdGggc2l6ZSAke2FjdHVhbExlbmd0aH0gaW4gcHJvZ3JhbSBcIiR7YXJ0aWZhY3QucHJvZ3JhbUluZm8ubmFtZX1cIi5gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBMT0dfREVCVUcoXG4gICAgICAgICAgICBcImluZm9cIixcbiAgICAgICAgICAgICgpID0+IGBbUHJvZ3JhbU1hbmFnZXJdIHJ1biBcIiR7cHJvZ3JhbS5uYW1lfVwiIChrZXk9JHtrZXl9KSB3aXRoICR7bm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMF19eCR7bm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMV19eCR7bm9ybWFsaXplZERpc3BhdGNoR3JvdXBbMl19YFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMucXVlcnlUeXBlICE9PSBcIm5vbmVcIiB8fCB0aGlzLnNlc3Npb25TdGF0dXMgPT09IFwiY2FwdHVyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHBlbmRpbmdLZXJuZWxJbmZvID0ge1xuICAgICAgICAgICAgICBrZXJuZWxJZDogdGhpcy5jdXJyZW50S2VybmVsSWQsXG4gICAgICAgICAgICAgIHByb2dyYW1OYW1lOiBhcnRpZmFjdC5wcm9ncmFtSW5mby5uYW1lLFxuICAgICAgICAgICAgICBpbnB1dFRlbnNvclZpZXdzLFxuICAgICAgICAgICAgICBvdXRwdXRUZW5zb3JWaWV3c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0tlcm5lbHMucHVzaChwZW5kaW5nS2VybmVsSW5mbyk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uU3RhdHVzID09PSBcImNhcHR1cmluZ1wiKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25QZW5kaW5nS2VybmVscyA9IHRoaXMuY2FwdHVyZWRQZW5kaW5nS2VybmVscy5nZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgc2Vzc2lvblBlbmRpbmdLZXJuZWxzLnB1c2gocGVuZGluZ0tlcm5lbEluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnByb2dyYW1NYW5hZ2VyLnJ1bihhcnRpZmFjdCwgaW5wdXREYXRhcywgb3V0cHV0RGF0YXMsIG5vcm1hbGl6ZWREaXNwYXRjaEdyb3VwLCB1bmlmb3JtQnVmZmVyQmluZGluZyk7XG4gICAgICAgICAgVFJBQ0VfRlVOQ19FTkQocHJvZ3JhbS5uYW1lKTtcbiAgICAgICAgICByZXR1cm4gb3V0cHV0VGVuc29yVmlld3M7XG4gICAgICAgIH1cbiAgICAgICAgdXBsb2FkKGdwdURhdGFJZCwgZGF0YSkge1xuICAgICAgICAgIHRoaXMuZ3B1RGF0YU1hbmFnZXIudXBsb2FkKGdwdURhdGFJZCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgbWVtY3B5KHNyYywgZHN0KSB7XG4gICAgICAgICAgdGhpcy5ncHVEYXRhTWFuYWdlci5tZW1jcHkoc3JjLCBkc3QpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGRvd25sb2FkKGdwdURhdGFJZCwgZ2V0VGFyZ2V0QnVmZmVyKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5ncHVEYXRhTWFuYWdlci5kb3dubG9hZChncHVEYXRhSWQsIGdldFRhcmdldEJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgYWxsb2Moc2l6ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdwdURhdGFNYW5hZ2VyLmNyZWF0ZShzaXplKS5pZDtcbiAgICAgICAgfVxuICAgICAgICBmcmVlKHB0cikge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdwdURhdGFNYW5hZ2VyLnJlbGVhc2UocHRyKTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVLZXJuZWwoa2VybmVsVHlwZSwga2VybmVsSWQsIGF0dHJpYnV0ZSwga2VybmVsTmFtZSkge1xuICAgICAgICAgIGNvbnN0IG9wID0gV0VCR1BVX09QX1JFU09MVkVfUlVMRVMuZ2V0KGtlcm5lbFR5cGUpO1xuICAgICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2VybmVsIG5vdCBpbXBsZW1lbnRlZDogJHtrZXJuZWxUeXBlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXJuZWxJbmZvID0ge1xuICAgICAgICAgICAga2VybmVsVHlwZSxcbiAgICAgICAgICAgIGtlcm5lbE5hbWUsXG4gICAgICAgICAgICBrZXJuZWxFbnRyeTogb3BbMF0sXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbb3BbMV0sIGF0dHJpYnV0ZV1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMua2VybmVscy5zZXQoa2VybmVsSWQsIGtlcm5lbEluZm8pO1xuICAgICAgICB9XG4gICAgICAgIHJlbGVhc2VLZXJuZWwoa2VybmVsSWQpIHtcbiAgICAgICAgICBjb25zdCBwZXJzaXN0ZW50RGF0YSA9IHRoaXMua2VybmVsUGVyc2lzdGVudERhdGEuZ2V0KGtlcm5lbElkKTtcbiAgICAgICAgICBpZiAocGVyc2lzdGVudERhdGEpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZGF0YSBvZiBwZXJzaXN0ZW50RGF0YSkge1xuICAgICAgICAgICAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLnJlbGVhc2UoZGF0YS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmtlcm5lbFBlcnNpc3RlbnREYXRhLmRlbGV0ZShrZXJuZWxJZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMua2VybmVsQ3VzdG9tRGF0YS5kZWxldGUoa2VybmVsSWQpO1xuICAgICAgICAgIHRoaXMua2VybmVscy5kZWxldGUoa2VybmVsSWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbXB1dGVLZXJuZWwoa2VybmVsSWQsIGNvbnRleHQsIGVycm9ycykge1xuICAgICAgICAgIGNvbnN0IGtlcm5lbCA9IHRoaXMua2VybmVscy5nZXQoa2VybmVsSWQpO1xuICAgICAgICAgIGlmICgha2VybmVsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtlcm5lbCBub3QgY3JlYXRlZDogJHtrZXJuZWxJZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qga2VybmVsVHlwZSA9IGtlcm5lbC5rZXJuZWxUeXBlO1xuICAgICAgICAgIGNvbnN0IGtlcm5lbE5hbWUgPSBrZXJuZWwua2VybmVsTmFtZTtcbiAgICAgICAgICBjb25zdCBrZXJuZWxFbnRyeSA9IGtlcm5lbC5rZXJuZWxFbnRyeTtcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ga2VybmVsLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudEtlcm5lbElkICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGtlcm5lbCBcIlske2tlcm5lbFR5cGV9XSAke2tlcm5lbE5hbWV9XCIgaXMgbm90IGFsbG93ZWQgdG8gYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VycmVudEtlcm5lbElkID0ga2VybmVsSWQ7XG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbMF0pIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbMV0gPSBhdHRyaWJ1dGVzWzBdKGF0dHJpYnV0ZXNbMV0pO1xuICAgICAgICAgICAgYXR0cmlidXRlc1swXSA9IHZvaWQgMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgTE9HX0RFQlVHKFwiaW5mb1wiLCAoKSA9PiBgW1dlYkdQVV0gU3RhcnQgdG8gcnVuIGtlcm5lbCBcIlske2tlcm5lbFR5cGV9XSAke2tlcm5lbE5hbWV9XCIuLi5gKTtcbiAgICAgICAgICBjb25zdCB1c2VFcnJvclNjb3BlID0gdGhpcy5lbnYuZGVidWc7XG4gICAgICAgICAgdGhpcy50ZW1wb3JhcnlEYXRhID0gW107XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh1c2VFcnJvclNjb3BlKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnB1c2hFcnJvclNjb3BlKFwidmFsaWRhdGlvblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtlcm5lbEVudHJ5KGNvbnRleHQsIGF0dHJpYnV0ZXNbMV0pO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goUHJvbWlzZS5yZXNvbHZlKGBbV2ViR1BVXSBLZXJuZWwgXCJbJHtrZXJuZWxUeXBlfV0gJHtrZXJuZWxOYW1lfVwiIGZhaWxlZC4gJHtlfWApKTtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAodXNlRXJyb3JTY29wZSkge1xuICAgICAgICAgICAgICBlcnJvcnMucHVzaCh0aGlzLmRldmljZS5wb3BFcnJvclNjb3BlKCkudGhlbihcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiBlcnIgPyBgR1BVIHZhbGlkYXRpb24gZXJyb3IgZm9yIGtlcm5lbCBcIlske2tlcm5lbFR5cGV9XSAke2tlcm5lbE5hbWV9XCI6ICR7ZXJyLm1lc3NhZ2V9YCA6IG51bGxcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRhdGEgb2YgdGhpcy50ZW1wb3JhcnlEYXRhKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3B1RGF0YU1hbmFnZXIucmVsZWFzZShkYXRhLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGVtcG9yYXJ5RGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50S2VybmVsSWQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyAjcmVnaW9uIGV4dGVybmFsIGJ1ZmZlclxuICAgICAgICByZWdpc3RlckJ1ZmZlcihzZXNzaW9uSWQsIGluZGV4LCBidWZmZXIsIHNpemUpIHtcbiAgICAgICAgICBsZXQgc2Vzc2lvbklucHV0T3V0cHV0TWFwcGluZyA9IHRoaXMuc2Vzc2lvbkV4dGVybmFsRGF0YU1hcHBpbmcuZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgaWYgKCFzZXNzaW9uSW5wdXRPdXRwdXRNYXBwaW5nKSB7XG4gICAgICAgICAgICBzZXNzaW9uSW5wdXRPdXRwdXRNYXBwaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbkV4dGVybmFsRGF0YU1hcHBpbmcuc2V0KHNlc3Npb25JZCwgc2Vzc2lvbklucHV0T3V0cHV0TWFwcGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnVmZmVyID0gc2Vzc2lvbklucHV0T3V0cHV0TWFwcGluZy5nZXQoaW5kZXgpO1xuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5ncHVEYXRhTWFuYWdlci5yZWdpc3RlckV4dGVybmFsQnVmZmVyKGJ1ZmZlciwgc2l6ZSwgcHJldmlvdXNCdWZmZXI/LlsxXSk7XG4gICAgICAgICAgc2Vzc2lvbklucHV0T3V0cHV0TWFwcGluZy5zZXQoaW5kZXgsIFtpZCwgYnVmZmVyXSk7XG4gICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIHVucmVnaXN0ZXJCdWZmZXJzKHNlc3Npb25JZCkge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25JbnB1dE91dHB1dE1hcHBpbmcgPSB0aGlzLnNlc3Npb25FeHRlcm5hbERhdGFNYXBwaW5nLmdldChzZXNzaW9uSWQpO1xuICAgICAgICAgIGlmIChzZXNzaW9uSW5wdXRPdXRwdXRNYXBwaW5nKSB7XG4gICAgICAgICAgICBzZXNzaW9uSW5wdXRPdXRwdXRNYXBwaW5nLmZvckVhY2goKGJ1ZmZlckluZm8pID0+IHRoaXMuZ3B1RGF0YU1hbmFnZXIudW5yZWdpc3RlckV4dGVybmFsQnVmZmVyKGJ1ZmZlckluZm9bMV0pKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbkV4dGVybmFsRGF0YU1hcHBpbmcuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldEJ1ZmZlcihncHVEYXRhSWQpIHtcbiAgICAgICAgICBjb25zdCBncHVEYXRhID0gdGhpcy5ncHVEYXRhTWFuYWdlci5nZXQoZ3B1RGF0YUlkKTtcbiAgICAgICAgICBpZiAoIWdwdURhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gR1BVIGRhdGEgZm9yIGJ1ZmZlcjogJHtncHVEYXRhSWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBncHVEYXRhLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVEb3dubG9hZGVyKGdwdUJ1ZmZlciwgc2l6ZSwgdHlwZSkge1xuICAgICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZG93bmxvYWRHcHVEYXRhKHRoaXMsIGdwdUJ1ZmZlciwgc2l6ZSk7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlldyhkYXRhLmJ1ZmZlciwgdHlwZSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyAjZW5kcmVnaW9uXG4gICAgICAgIHdyaXRlVGltZXN0YW1wKGluZGV4KSB7XG4gICAgICAgICAgaWYgKHRoaXMucXVlcnlUeXBlICE9PSBcImluc2lkZS1wYXNzZXNcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNvbXB1dGVQYXNzRW5jb2Rlci53cml0ZVRpbWVzdGFtcCh0aGlzLnF1ZXJ5U2V0LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UXVlcnlUeXBlKCkge1xuICAgICAgICAgIHRoaXMucXVlcnlUeXBlID0gXCJub25lXCI7XG4gICAgICAgICAgaWYgKHRoaXMuZW52LndlYmdwdS5wcm9maWxpbmc/Lm1vZGUgPT09IFwiZGVmYXVsdFwiIHx8ICh0eXBlb2YgdGhpcy5lbnYudHJhY2UgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzLmVudi53YXNtLnRyYWNlIDogdGhpcy5lbnYudHJhY2UpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZXZpY2UuZmVhdHVyZXMuaGFzKFwiY2hyb21pdW0tZXhwZXJpbWVudGFsLXRpbWVzdGFtcC1xdWVyeS1pbnNpZGUtcGFzc2VzXCIpKSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlcnlUeXBlID0gXCJpbnNpZGUtcGFzc2VzXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGV2aWNlLmZlYXR1cmVzLmhhcyhcInRpbWVzdGFtcC1xdWVyeVwiKSkge1xuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5VHlwZSA9IFwiYXQtcGFzc2VzXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5xdWVyeVR5cGUgIT09IFwibm9uZVwiICYmIHR5cGVvZiB0aGlzLnF1ZXJ5U2V0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlcnlTZXQgPSB0aGlzLmRldmljZS5jcmVhdGVRdWVyeVNldCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICAgICAgICBjb3VudDogdGhpcy5tYXhEaXNwYXRjaE51bWJlciAqIDJcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMucXVlcnlSZXNvbHZlQnVmZmVyID0gdGhpcy5kZXZpY2UuY3JlYXRlQnVmZmVyKFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAgICAgICAgeyBzaXplOiB0aGlzLm1heERpc3BhdGNoTnVtYmVyICogMiAqIDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQyB8IEdQVUJ1ZmZlclVzYWdlLlFVRVJZX1JFU09MVkUgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXB0dXJlQmVnaW4oKSB7XG4gICAgICAgICAgTE9HX0RFQlVHKFwiaW5mb1wiLCBcImNhcHR1cmVCZWdpblwiKTtcbiAgICAgICAgICBpZiAoIXRoaXMuY2FwdHVyZWRDb21tYW5kTGlzdC5nZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkKSkge1xuICAgICAgICAgICAgdGhpcy5jYXB0dXJlZENvbW1hbmRMaXN0LnNldCh0aGlzLmN1cnJlbnRTZXNzaW9uSWQsIFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmNhcHR1cmVkUGVuZGluZ0tlcm5lbHMuZ2V0KHRoaXMuY3VycmVudFNlc3Npb25JZCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FwdHVyZWRQZW5kaW5nS2VybmVscy5zZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkLCBbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgICAgICB0aGlzLnNlc3Npb25TdGF0dXMgPSBcImNhcHR1cmluZ1wiO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmVFbmQoKSB7XG4gICAgICAgICAgTE9HX0RFQlVHKFwiaW5mb1wiLCBcImNhcHR1cmVFbmRcIik7XG4gICAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9IFwiZGVmYXVsdFwiO1xuICAgICAgICB9XG4gICAgICAgIHJlcGxheSgpIHtcbiAgICAgICAgICBMT0dfREVCVUcoXCJpbmZvXCIsIFwicmVwbGF5XCIpO1xuICAgICAgICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9IFwicmVwbGF5aW5nXCI7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbkNvbW1hbmRMaXN0ID0gdGhpcy5jYXB0dXJlZENvbW1hbmRMaXN0LmdldCh0aGlzLmN1cnJlbnRTZXNzaW9uSWQpO1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25QZW5kaW5nS2VybmVscyA9IHRoaXMuY2FwdHVyZWRQZW5kaW5nS2VybmVscy5nZXQodGhpcy5jdXJyZW50U2Vzc2lvbklkKTtcbiAgICAgICAgICBjb25zdCBsZW5ndGggPSBzZXNzaW9uQ29tbWFuZExpc3QubGVuZ3RoO1xuICAgICAgICAgIHRoaXMucGVuZGluZ0tlcm5lbHMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSB0aGlzLmdldENvbXB1dGVQYXNzRW5jb2RlcigpO1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IHNlc3Npb25Db21tYW5kTGlzdFtpXTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVUaW1lc3RhbXAodGhpcy5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyKTtcbiAgICAgICAgICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21tYW5kLmNvbXB1dGVQaXBlbGluZSk7XG4gICAgICAgICAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGNvbW1hbmQuYmluZEdyb3VwKTtcbiAgICAgICAgICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaFdvcmtncm91cHMoLi4uY29tbWFuZC5kaXNwYXRjaEdyb3VwKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVUaW1lc3RhbXAodGhpcy5wZW5kaW5nRGlzcGF0Y2hOdW1iZXIgKiAyICsgMSk7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlcisrO1xuICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlUeXBlICE9PSBcIm5vbmVcIikge1xuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdLZXJuZWxzLnB1c2goc2Vzc2lvblBlbmRpbmdLZXJuZWxzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciA+PSB0aGlzLm1heERpc3BhdGNoTnVtYmVyIHx8IHRoaXMucXVlcnlUeXBlID09PSBcImF0LXBhc3Nlc1wiKSB7XG4gICAgICAgICAgICAgIHRoaXMuZW5kQ29tcHV0ZVBhc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdEaXNwYXRjaE51bWJlciA+PSB0aGlzLm1heERpc3BhdGNoTnVtYmVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgICAgIHRoaXMuc2Vzc2lvblN0YXR1cyA9IFwiZGVmYXVsdFwiO1xuICAgICAgICB9XG4gICAgICAgIG9uUmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkKSB7XG4gICAgICAgICAgdGhpcy51bnJlZ2lzdGVyQnVmZmVycyhzZXNzaW9uSWQpO1xuICAgICAgICAgIGlmICh0aGlzLmNhcHR1cmVkQ29tbWFuZExpc3QuaGFzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FwdHVyZWRDb21tYW5kTGlzdC5kZWxldGUoc2Vzc2lvbklkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuY2FwdHVyZWRQZW5kaW5nS2VybmVscy5oYXMoc2Vzc2lvbklkKSkge1xuICAgICAgICAgICAgdGhpcy5jYXB0dXJlZFBlbmRpbmdLZXJuZWxzLmRlbGV0ZShzZXNzaW9uSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdwdURhdGFNYW5hZ2VyLm9uUmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkKTtcbiAgICAgICAgfVxuICAgICAgICBvblJ1blN0YXJ0KHNlc3Npb25JZCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICAgICAgICB0aGlzLnNldFF1ZXJ5VHlwZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL2pzZXAvaW5pdC50c1xuICB2YXIgaW5pdF9leHBvcnRzID0ge307XG4gIF9fZXhwb3J0KGluaXRfZXhwb3J0cywge1xuICAgIGluaXQ6ICgpID0+IGluaXRcbiAgfSk7XG4gIHZhciBUZW5zb3JWaWV3SW1wbCwgQ29tcHV0ZUNvbnRleHRJbXBsLCBpbml0O1xuICB2YXIgaW5pdF9pbml0ID0gX19lc20oe1xuICAgIFwid2ViL2xpYi93YXNtL2pzZXAvaW5pdC50c1wiKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICBpbml0X3dhc21fY29tbW9uKCk7XG4gICAgICBpbml0X2JhY2tlbmRfd2ViZ3B1KCk7XG4gICAgICBpbml0X2xvZygpO1xuICAgICAgaW5pdF91dGlsKCk7XG4gICAgICBUZW5zb3JWaWV3SW1wbCA9IGNsYXNzIF9UZW5zb3JWaWV3SW1wbCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG1vZHVsZSwgZGF0YVR5cGUsIGRhdGEsIGRpbXMpIHtcbiAgICAgICAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTtcbiAgICAgICAgICB0aGlzLmRhdGFUeXBlID0gZGF0YVR5cGU7XG4gICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgICB0aGlzLmRpbXMgPSBkaW1zO1xuICAgICAgICB9XG4gICAgICAgIGdldEZsb2F0MzJBcnJheSgpIHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhVHlwZSAhPT0gMSAvKiBmbG9hdCAqLykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkYXRhIHR5cGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGVsZW1lbnRDb3VudCA9IFNoYXBlVXRpbC5zaXplKHRoaXMuZGltcyk7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnRDb3VudCA9PT0gMCA/IG5ldyBGbG9hdDMyQXJyYXkoKSA6IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5tb2R1bGUuSEVBUDguYnVmZmVyLCB0aGlzLmRhdGEsIGVsZW1lbnRDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QmlnSW50NjRBcnJheSgpIHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhVHlwZSAhPT0gNyAvKiBpbnQ2NCAqLykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkYXRhIHR5cGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGVsZW1lbnRDb3VudCA9IFNoYXBlVXRpbC5zaXplKHRoaXMuZGltcyk7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnRDb3VudCA9PT0gMCA/IG5ldyBCaWdJbnQ2NEFycmF5KCkgOiBuZXcgQmlnSW50NjRBcnJheSh0aGlzLm1vZHVsZS5IRUFQOC5idWZmZXIsIHRoaXMuZGF0YSwgZWxlbWVudENvdW50KTtcbiAgICAgICAgfVxuICAgICAgICBnZXRJbnQzMkFycmF5KCkge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFUeXBlICE9PSA2IC8qIGludDMyICovKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGEgdHlwZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZWxlbWVudENvdW50ID0gU2hhcGVVdGlsLnNpemUodGhpcy5kaW1zKTtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudENvdW50ID09PSAwID8gbmV3IEludDMyQXJyYXkoKSA6IG5ldyBJbnQzMkFycmF5KHRoaXMubW9kdWxlLkhFQVA4LmJ1ZmZlciwgdGhpcy5kYXRhLCBlbGVtZW50Q291bnQpO1xuICAgICAgICB9XG4gICAgICAgIHJlc2hhcGUobmV3RGltcykge1xuICAgICAgICAgIGlmIChTaGFwZVV0aWwuc2l6ZShuZXdEaW1zKSAhPT0gU2hhcGVVdGlsLnNpemUodGhpcy5kaW1zKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBuZXcgc2hhcGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgX1RlbnNvclZpZXdJbXBsKHRoaXMubW9kdWxlLCB0aGlzLmRhdGFUeXBlLCB0aGlzLmRhdGEsIG5ld0RpbXMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgQ29tcHV0ZUNvbnRleHRJbXBsID0gY2xhc3Mge1xuICAgICAgICBjb25zdHJ1Y3Rvcihtb2R1bGUsIGJhY2tlbmQsIGNvbnRleHREYXRhT2Zmc2V0KSB7XG4gICAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7XG4gICAgICAgICAgdGhpcy5iYWNrZW5kID0gYmFja2VuZDtcbiAgICAgICAgICB0aGlzLmN1c3RvbURhdGFPZmZzZXQgPSAwO1xuICAgICAgICAgIHRoaXMuY3VzdG9tRGF0YVNpemUgPSAwO1xuICAgICAgICAgIHRoaXMuYWRhcHRlckluZm8gPSBiYWNrZW5kLmFkYXB0ZXJJbmZvO1xuICAgICAgICAgIGNvbnN0IGhlYXBVMzIgPSBtb2R1bGUuSEVBUFUzMjtcbiAgICAgICAgICBsZXQgZGF0YUluZGV4ID0gY29udGV4dERhdGFPZmZzZXQgPj4+IDI7XG4gICAgICAgICAgdGhpcy5vcEtlcm5lbENvbnRleHQgPSBoZWFwVTMyW2RhdGFJbmRleCsrXTtcbiAgICAgICAgICBjb25zdCBpbnB1dENvdW50ID0gaGVhcFUzMltkYXRhSW5kZXgrK107XG4gICAgICAgICAgdGhpcy5vdXRwdXRDb3VudCA9IGhlYXBVMzJbZGF0YUluZGV4KytdO1xuICAgICAgICAgIHRoaXMuY3VzdG9tRGF0YU9mZnNldCA9IGhlYXBVMzJbZGF0YUluZGV4KytdO1xuICAgICAgICAgIHRoaXMuY3VzdG9tRGF0YVNpemUgPSBoZWFwVTMyW2RhdGFJbmRleCsrXTtcbiAgICAgICAgICBjb25zdCBpbnB1dHMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGF0YVR5cGUgPSBoZWFwVTMyW2RhdGFJbmRleCsrXTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBoZWFwVTMyW2RhdGFJbmRleCsrXTtcbiAgICAgICAgICAgIGNvbnN0IGRpbSA9IGhlYXBVMzJbZGF0YUluZGV4KytdO1xuICAgICAgICAgICAgY29uc3QgZGltcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBkaW07IGQrKykge1xuICAgICAgICAgICAgICBkaW1zLnB1c2goaGVhcFUzMltkYXRhSW5kZXgrK10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5wdXRzLnB1c2gobmV3IFRlbnNvclZpZXdJbXBsKG1vZHVsZSwgZGF0YVR5cGUsIGRhdGEsIGRpbXMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pbnB1dHMgPSBpbnB1dHM7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGtlcm5lbEN1c3RvbURhdGEoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZC5jdXJyZW50S2VybmVsQ3VzdG9tRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY3VzdG9tRGF0YUJ1ZmZlcigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGUuSEVBUFU4LnN1YmFycmF5KHRoaXMuY3VzdG9tRGF0YU9mZnNldCwgdGhpcy5jdXN0b21EYXRhT2Zmc2V0ICsgdGhpcy5jdXN0b21EYXRhU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TWF4Q29tcHV0ZVdvcmtncm91cFNpemVzKCkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLmJhY2tlbmQuZGV2aWNlLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgsXG4gICAgICAgICAgICB0aGlzLmJhY2tlbmQuZGV2aWNlLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVksXG4gICAgICAgICAgICB0aGlzLmJhY2tlbmQuZGV2aWNlLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVpcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGdldE1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlc2l6ZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmRldmljZS5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplO1xuICAgICAgICB9XG4gICAgICAgIGNvbXB1dGUocHJvZ3JhbSwgaW5wdXRzT3V0cHV0c01hcHBpbmcpIHtcbiAgICAgICAgICBjb25zdCBtYXBwZWRJbnB1dHMgPSBpbnB1dHNPdXRwdXRzTWFwcGluZz8uaW5wdXRzPy5tYXAoKGkpID0+IHR5cGVvZiBpID09PSBcIm51bWJlclwiID8gdGhpcy5pbnB1dHNbaV0gOiBpKSA/PyB0aGlzLmlucHV0cztcbiAgICAgICAgICBjb25zdCBvdXRwdXRJbmRpY2VzID0gaW5wdXRzT3V0cHV0c01hcHBpbmc/Lm91dHB1dHMgPz8gW107XG4gICAgICAgICAgY29uc3QgY3JlYXRlS2VybmVsT3V0cHV0ID0gKGluZGV4LCBkYXRhVHlwZSwgZGltcykgPT4gbmV3IFRlbnNvclZpZXdJbXBsKHRoaXMubW9kdWxlLCBkYXRhVHlwZSwgdGhpcy5vdXRwdXQoaW5kZXgsIGRpbXMpLCBkaW1zKTtcbiAgICAgICAgICBjb25zdCBjcmVhdGVUZW1wb3JhcnlPdXRwdXQgPSAoZGF0YVR5cGUsIGRpbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTaXplID0gZ2V0VGVuc29yRWxlbWVudFNpemUoZGF0YVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50U2l6ZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRhdGEgdHlwZTogJHtkYXRhVHlwZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSBlbGVtZW50U2l6ZSAqIFNoYXBlVXRpbC5zaXplKGRpbXMpO1xuICAgICAgICAgICAgY29uc3QgZ3B1RGF0YUlkID0gYnVmZmVyU2l6ZSA+IDAgPyB0aGlzLmJhY2tlbmQuZ3B1RGF0YU1hbmFnZXIuY3JlYXRlKGJ1ZmZlclNpemUpLmlkIDogMDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGVuc29yVmlld0ltcGwodGhpcy5tb2R1bGUsIGRhdGFUeXBlLCBncHVEYXRhSWQsIGRpbXMpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZC5ydW4oXG4gICAgICAgICAgICBwcm9ncmFtLFxuICAgICAgICAgICAgbWFwcGVkSW5wdXRzLFxuICAgICAgICAgICAgb3V0cHV0SW5kaWNlcyxcbiAgICAgICAgICAgIGNyZWF0ZUtlcm5lbE91dHB1dCxcbiAgICAgICAgICAgIGNyZWF0ZVRlbXBvcmFyeU91dHB1dCxcbiAgICAgICAgICAgIHRoaXMub3V0cHV0Q291bnRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dChpbmRleCwgZGltcykge1xuICAgICAgICAgIGNvbnN0IHN0YWNrID0gdGhpcy5tb2R1bGUuc3RhY2tTYXZlKCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLm1vZHVsZS5zdGFja0FsbG9jKFxuICAgICAgICAgICAgICAoMSArIGRpbXMubGVuZ3RoKSAqIDRcbiAgICAgICAgICAgICAgLyogc2l6ZW9mKHNpemVfdCkgKi9cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gZGF0YSA+PiAyO1xuICAgICAgICAgICAgdGhpcy5tb2R1bGUuSEVBUFUzMltvZmZzZXQrK10gPSBkaW1zLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB0aGlzLm1vZHVsZS5IRUFQVTMyW29mZnNldCsrXSA9IGRpbXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGUuX0pzZXBPdXRwdXQodGhpcy5vcEtlcm5lbENvbnRleHQsIGluZGV4LCBkYXRhKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gZ2VuZXJhdGUga2VybmVsJ3Mgb3V0cHV0WyR7aW5kZXh9XSB3aXRoIGRpbXMgWyR7ZGltc31dLiBJZiB5b3UgYXJlIHJ1bm5pbmcgd2l0aCBwcmUtYWxsb2NhdGVkIG91dHB1dCwgcGxlYXNlIG1ha2Ugc3VyZSB0aGUgb3V0cHV0IHR5cGUvZGltcyBhcmUgY29ycmVjdC4gRXJyb3I6ICR7ZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLm1vZHVsZS5zdGFja1Jlc3RvcmUoc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGluaXQgPSBhc3luYyAobmFtZSwgbW9kdWxlLCBlbnYzLCBncHVBZGFwdGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGpzZXBJbml0ID0gbW9kdWxlLmpzZXBJbml0O1xuICAgICAgICBpZiAoIWpzZXBJbml0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgSlNFUC4gVGhlIFdlYkFzc2VtYmx5IG1vZHVsZSBpcyBub3QgYnVpbHQgd2l0aCBKU0VQIHN1cHBvcnQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lID09PSBcIndlYmdwdVwiKSB7XG4gICAgICAgICAgY29uc3QgYmFja2VuZCA9IG5ldyBXZWJHcHVCYWNrZW5kKCk7XG4gICAgICAgICAgYXdhaXQgYmFja2VuZC5pbml0aWFsaXplKGVudjMsIGdwdUFkYXB0ZXIpO1xuICAgICAgICAgIGpzZXBJbml0KFwid2ViZ3B1XCIsIFtcbiAgICAgICAgICAgIC8vIGJhY2tlbmRcbiAgICAgICAgICAgIGJhY2tlbmQsXG4gICAgICAgICAgICAvLyBqc2VwQWxsb2MoKVxuICAgICAgICAgICAgKHNpemUpID0+IGJhY2tlbmQuYWxsb2Moc2l6ZSksXG4gICAgICAgICAgICAvLyBqc2VwRnJlZSgpXG4gICAgICAgICAgICAocHRyKSA9PiBiYWNrZW5kLmZyZWUocHRyKSxcbiAgICAgICAgICAgIC8vIGpzZXBDb3B5KHNyYywgZHN0LCBzaXplLCBpc1NvdXJjZUdwdSlcbiAgICAgICAgICAgIChzcmMsIGRzdCwgc2l6ZSwgaXNTb3VyY2VHcHUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNTb3VyY2VHcHUpIHtcbiAgICAgICAgICAgICAgICBMT0dfREVCVUcoXCJ2ZXJib3NlXCIsICgpID0+IGBbV2ViR1BVXSBqc2VwQ29weUdwdVRvR3B1OiBzcmM9JHtzcmN9LCBkc3Q9JHtkc3R9LCBzaXplPSR7c2l6ZX1gKTtcbiAgICAgICAgICAgICAgICBiYWNrZW5kLm1lbWNweShzcmMsIGRzdCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgTE9HX0RFQlVHKFwidmVyYm9zZVwiLCAoKSA9PiBgW1dlYkdQVV0ganNlcENvcHlDcHVUb0dwdTogZGF0YU9mZnNldD0ke3NyY30sIGdwdURhdGFJZD0ke2RzdH0sIHNpemU9JHtzaXplfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBtb2R1bGUuSEVBUFU4LnN1YmFycmF5KHNyYyA+Pj4gMCwgKHNyYyA+Pj4gMCkgKyBzaXplKTtcbiAgICAgICAgICAgICAgICBiYWNrZW5kLnVwbG9hZChkc3QsIGRhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8ganNlcENvcHlBc3luYyhzcmMsIGRzdCwgc2l6ZSlcbiAgICAgICAgICAgIGFzeW5jIChncHVEYXRhSWQsIGRhdGFPZmZzZXQsIHNpemUpID0+IHtcbiAgICAgICAgICAgICAgTE9HX0RFQlVHKFxuICAgICAgICAgICAgICAgIFwidmVyYm9zZVwiLFxuICAgICAgICAgICAgICAgICgpID0+IGBbV2ViR1BVXSBqc2VwQ29weUdwdVRvQ3B1OiBncHVEYXRhSWQ9JHtncHVEYXRhSWR9LCBkYXRhT2Zmc2V0PSR7ZGF0YU9mZnNldH0sIHNpemU9JHtzaXplfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYXdhaXQgYmFja2VuZC5kb3dubG9hZChcbiAgICAgICAgICAgICAgICBncHVEYXRhSWQsXG4gICAgICAgICAgICAgICAgKCkgPT4gbW9kdWxlLkhFQVBVOC5zdWJhcnJheShkYXRhT2Zmc2V0ID4+PiAwLCAoZGF0YU9mZnNldCA+Pj4gMCkgKyBzaXplKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGpzZXBDcmVhdGVLZXJuZWxcbiAgICAgICAgICAgIChrZXJuZWxUeXBlLCBrZXJuZWxJZCwgYXR0cmlidXRlKSA9PiBiYWNrZW5kLmNyZWF0ZUtlcm5lbChcbiAgICAgICAgICAgICAga2VybmVsVHlwZSxcbiAgICAgICAgICAgICAga2VybmVsSWQsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgbW9kdWxlLlVURjhUb1N0cmluZyhtb2R1bGUuX0pzZXBHZXROb2RlTmFtZShrZXJuZWxJZCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgLy8ganNlcFJlbGVhc2VLZXJuZWxcbiAgICAgICAgICAgIChrZXJuZWwpID0+IGJhY2tlbmQucmVsZWFzZUtlcm5lbChrZXJuZWwpLFxuICAgICAgICAgICAgLy8ganNlcFJ1blxuICAgICAgICAgICAgKGtlcm5lbCwgY29udGV4dERhdGFPZmZzZXQsIHNlc3Npb25IYW5kbGUsIGVycm9ycykgPT4ge1xuICAgICAgICAgICAgICBMT0dfREVCVUcoXG4gICAgICAgICAgICAgICAgXCJ2ZXJib3NlXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4gYFtXZWJHUFVdIGpzZXBSdW46IHNlc3Npb25IYW5kbGU9JHtzZXNzaW9uSGFuZGxlfSwga2VybmVsPSR7a2VybmVsfSwgY29udGV4dERhdGFPZmZzZXQ9JHtjb250ZXh0RGF0YU9mZnNldH1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQ29tcHV0ZUNvbnRleHRJbXBsKG1vZHVsZSwgYmFja2VuZCwgY29udGV4dERhdGFPZmZzZXQpO1xuICAgICAgICAgICAgICByZXR1cm4gYmFja2VuZC5jb21wdXRlS2VybmVsKGtlcm5lbCwgY29udGV4dCwgZXJyb3JzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBqc2VwQ2FwdHVyZUJlZ2luXG4gICAgICAgICAgICAoKSA9PiBiYWNrZW5kLmNhcHR1cmVCZWdpbigpLFxuICAgICAgICAgICAgLy8ganNlcENhcHR1cmVFbmRcbiAgICAgICAgICAgICgpID0+IGJhY2tlbmQuY2FwdHVyZUVuZCgpLFxuICAgICAgICAgICAgLy8ganNlcFJlcGxheVxuICAgICAgICAgICAgKCkgPT4gYmFja2VuZC5yZXBsYXkoKVxuICAgICAgICAgIF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpzZXBJbml0KFwid2Vibm5cIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBub2RlanMtaWdub3JlOm5vZGU6cGF0aFxuICB2YXIgam9pbiA9IHZvaWQgMDtcblxuICAvLyB3ZWIvbGliL3dhc20vd2FzbS1mYWN0b3J5LnRzXG4gIHZhciBvcnRXYXNtRmFjdG9yeTtcbiAgaWYgKGZhbHNlKSB7XG4gICAgb3J0V2FzbUZhY3RvcnkgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIG9ydFdhc21GYWN0b3J5ID0gZmFsc2UgPyBudWxsIDogcmVxdWlyZV9vcnRfd2FzbV9zaW1kX2pzZXAoKTtcbiAgfVxuICB2YXIgb3J0V2FzbUZhY3RvcnlUaHJlYWRlZCA9IHRydWUgPyBmYWxzZSA/IG51bGwgOiByZXF1aXJlX29ydF93YXNtX3NpbWRfdGhyZWFkZWRfanNlcCgpIDogb3J0V2FzbUZhY3Rvcnk7XG4gIHZhciB3YXNtO1xuICB2YXIgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgdmFyIGluaXRpYWxpemluZyA9IGZhbHNlO1xuICB2YXIgYWJvcnRlZCA9IGZhbHNlO1xuICB2YXIgaXNNdWx0aVRocmVhZFN1cHBvcnRlZCA9IChudW1UaHJlYWRzKSA9PiB7XG4gICAgaWYgKG51bVRocmVhZHMgPT09IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmICFzZWxmLmNyb3NzT3JpZ2luSXNvbGF0ZWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiZW52Lndhc20ubnVtVGhyZWFkcyBpcyBzZXQgdG8gXCIgKyBudW1UaHJlYWRzICsgXCIsIGJ1dCB0aGlzIHdpbGwgbm90IHdvcmsgdW5sZXNzIHlvdSBlbmFibGUgY3Jvc3NPcmlnaW5Jc29sYXRlZCBtb2RlLiBTZWUgaHR0cHM6Ly93ZWIuZGV2L2Nyb3NzLW9yaWdpbi1pc29sYXRpb24tZ3VpZGUvIGZvciBtb3JlIGluZm8uXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiZW52Lndhc20ubnVtVGhyZWFkcyBpcyBzZXQgdG8gXCIgKyBudW1UaHJlYWRzICsgXCIsIGhvd2V2ZXIsIGN1cnJlbnRseSBvbm54cnVudGltZS13ZWIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS10aHJlYWRzIGluIE5vZGUuanMuIFBsZWFzZSBjb25zaWRlciB1c2luZyBvbm54cnVudGltZS1ub2RlIGZvciBwZXJmb3JtYW5jZSBjcml0aWNhbCBzY2VuYXJpb3MuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG5ldyBNZXNzYWdlQ2hhbm5lbCgpLnBvcnQxLnBvc3RNZXNzYWdlKG5ldyBTaGFyZWRBcnJheUJ1ZmZlcigxKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gV2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAwLFxuICAgICAgICA5NyxcbiAgICAgICAgMTE1LFxuICAgICAgICAxMDksXG4gICAgICAgIDEsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIDEsXG4gICAgICAgIDQsXG4gICAgICAgIDEsXG4gICAgICAgIDk2LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICAzLFxuICAgICAgICAyLFxuICAgICAgICAxLFxuICAgICAgICAwLFxuICAgICAgICA1LFxuICAgICAgICA0LFxuICAgICAgICAxLFxuICAgICAgICAzLFxuICAgICAgICAxLFxuICAgICAgICAxLFxuICAgICAgICAxMCxcbiAgICAgICAgMTEsXG4gICAgICAgIDEsXG4gICAgICAgIDksXG4gICAgICAgIDAsXG4gICAgICAgIDY1LFxuICAgICAgICAwLFxuICAgICAgICAyNTQsXG4gICAgICAgIDE2LFxuICAgICAgICAyLFxuICAgICAgICAwLFxuICAgICAgICAyNixcbiAgICAgICAgMTFcbiAgICAgIF0pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICB2YXIgaXNTaW1kU3VwcG9ydGVkID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gV2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAwLFxuICAgICAgICA5NyxcbiAgICAgICAgMTE1LFxuICAgICAgICAxMDksXG4gICAgICAgIDEsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIDAsXG4gICAgICAgIDEsXG4gICAgICAgIDQsXG4gICAgICAgIDEsXG4gICAgICAgIDk2LFxuICAgICAgICAwLFxuICAgICAgICAwLFxuICAgICAgICAzLFxuICAgICAgICAyLFxuICAgICAgICAxLFxuICAgICAgICAwLFxuICAgICAgICAxMCxcbiAgICAgICAgMzAsXG4gICAgICAgIDEsXG4gICAgICAgIDI4LFxuICAgICAgICAwLFxuICAgICAgICA2NSxcbiAgICAgICAgMCxcbiAgICAgICAgMjUzLFxuICAgICAgICAxNSxcbiAgICAgICAgMjUzLFxuICAgICAgICAxMixcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMjUzLFxuICAgICAgICAxODYsXG4gICAgICAgIDEsXG4gICAgICAgIDI2LFxuICAgICAgICAxMVxuICAgICAgXSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG4gIHZhciBnZXRXYXNtRmlsZU5hbWUgPSAodXNlU2ltZCwgdXNlVGhyZWFkcykgPT4ge1xuICAgIGlmICh1c2VTaW1kKSB7XG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFwib3J0LXRyYWluaW5nLXdhc20tc2ltZC53YXNtXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXNlVGhyZWFkcyA/IFwib3J0LXdhc20tc2ltZC10aHJlYWRlZC53YXNtXCIgOiBcIm9ydC13YXNtLXNpbWQud2FzbVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdXNlVGhyZWFkcyA/IFwib3J0LXdhc20tdGhyZWFkZWQud2FzbVwiIDogXCJvcnQtd2FzbS53YXNtXCI7XG4gICAgfVxuICB9O1xuICB2YXIgaW5pdGlhbGl6ZVdlYkFzc2VtYmx5ID0gYXN5bmMgKGZsYWdzKSA9PiB7XG4gICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIGlmIChpbml0aWFsaXppbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm11bHRpcGxlIGNhbGxzIHRvICdpbml0aWFsaXplV2ViQXNzZW1ibHkoKScgZGV0ZWN0ZWQuXCIpO1xuICAgIH1cbiAgICBpZiAoYWJvcnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJldmlvdXMgY2FsbCB0byAnaW5pdGlhbGl6ZVdlYkFzc2VtYmx5KCknIGZhaWxlZC5cIik7XG4gICAgfVxuICAgIGluaXRpYWxpemluZyA9IHRydWU7XG4gICAgY29uc3QgdGltZW91dCA9IGZsYWdzLmluaXRUaW1lb3V0O1xuICAgIGNvbnN0IG51bVRocmVhZHMgPSBmbGFncy5udW1UaHJlYWRzO1xuICAgIGNvbnN0IHNpbWQgPSBmbGFncy5zaW1kO1xuICAgIGNvbnN0IHVzZVRocmVhZHMgPSBpc011bHRpVGhyZWFkU3VwcG9ydGVkKG51bVRocmVhZHMpO1xuICAgIGNvbnN0IHVzZVNpbWQgPSBzaW1kICYmIGlzU2ltZFN1cHBvcnRlZCgpO1xuICAgIGNvbnN0IHdhc21QYXRocyA9IGZsYWdzLndhc21QYXRocztcbiAgICBjb25zdCB3YXNtUHJlZml4T3ZlcnJpZGUgPSB0eXBlb2Ygd2FzbVBhdGhzID09PSBcInN0cmluZ1wiID8gd2FzbVBhdGhzIDogdm9pZCAwO1xuICAgIGNvbnN0IHdhc21GaWxlTmFtZSA9IGdldFdhc21GaWxlTmFtZSh1c2VTaW1kLCB1c2VUaHJlYWRzKTtcbiAgICBjb25zdCB3YXNtUGF0aE92ZXJyaWRlID0gdHlwZW9mIHdhc21QYXRocyA9PT0gXCJvYmplY3RcIiA/IHdhc21QYXRoc1t3YXNtRmlsZU5hbWVdIDogdm9pZCAwO1xuICAgIGxldCBpc1RpbWVvdXQgPSBmYWxzZTtcbiAgICBjb25zdCB0YXNrcyA9IFtdO1xuICAgIGlmICh0aW1lb3V0ID4gMCkge1xuICAgICAgdGFza3MucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpc1RpbWVvdXQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIHRhc2tzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yeSA9IHVzZVRocmVhZHMgPyBvcnRXYXNtRmFjdG9yeVRocmVhZGVkIDogb3J0V2FzbUZhY3Rvcnk7XG4gICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgIGxvY2F0ZUZpbGU6IChmaWxlTmFtZSwgc2NyaXB0RGlyZWN0b3J5KSA9PiB7XG4gICAgICAgICAgaWYgKHVzZVRocmVhZHMgJiYgZmlsZU5hbWUuZW5kc1dpdGgoXCIud29ya2VyLmpzXCIpICYmIHR5cGVvZiBCbG9iICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgcmVxdWlyZSgpIGZ1bmN0aW9uIGlzIGhhbmRsZWQgYnkgZXNidWlsZCBwbHVnaW4gdG8gbG9hZCBmaWxlIGNvbnRlbnQgYXMgc3RyaW5nLlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICAgICAgICAgICAgcmVxdWlyZV9vcnRfd2FzbV90aHJlYWRlZF93b3JrZXIoKVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB7IHR5cGU6IFwidGV4dC9qYXZhc2NyaXB0XCIgfVxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWxlTmFtZS5lbmRzV2l0aChcIi53YXNtXCIpKSB7XG4gICAgICAgICAgICBpZiAod2FzbVBhdGhPdmVycmlkZSkge1xuICAgICAgICAgICAgICByZXR1cm4gd2FzbVBhdGhPdmVycmlkZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHdhc21QcmVmaXhPdmVycmlkZSA/PyBzY3JpcHREaXJlY3Rvcnk7XG4gICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICBpZiAod2FzbUZpbGVOYW1lID09PSBcIm9ydC13YXNtLXNpbWQud2FzbVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIFwib3J0LXdhc20tc2ltZC5qc2VwLndhc21cIjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh3YXNtRmlsZU5hbWUgPT09IFwib3J0LXdhc20tc2ltZC10aHJlYWRlZC53YXNtXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgXCJvcnQtd2FzbS1zaW1kLXRocmVhZGVkLmpzZXAud2FzbVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgd2FzbUZpbGVOYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgZmlsZU5hbWU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAodXNlVGhyZWFkcykge1xuICAgICAgICBjb25maWcubnVtVGhyZWFkcyA9IG51bVRocmVhZHM7XG4gICAgICAgIGlmICh0eXBlb2YgQmxvYiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGNvbmZpZy5tYWluU2NyaXB0VXJsT3JCbG9iID0gam9pbihfX2Rpcm5hbWUsIFwib3J0LXdhc20tdGhyZWFkZWQuanNcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc2NyaXB0U291cmNlQ29kZSA9IGB2YXIgb3J0V2FzbVRocmVhZGVkPSR7ZmFjdG9yeS50b1N0cmluZygpfTtgO1xuICAgICAgICAgIGNvbmZpZy5tYWluU2NyaXB0VXJsT3JCbG9iID0gbmV3IEJsb2IoW3NjcmlwdFNvdXJjZUNvZGVdLCB7IHR5cGU6IFwidGV4dC9qYXZhc2NyaXB0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZhY3RvcnkoY29uZmlnKS50aGVuKFxuICAgICAgICAvLyB3YXNtIG1vZHVsZSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgKG1vZHVsZSkgPT4ge1xuICAgICAgICAgIGluaXRpYWxpemluZyA9IGZhbHNlO1xuICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICB3YXNtID0gbW9kdWxlO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gd2FzbSBtb2R1bGUgZmFpbGVkIHRvIGluaXRpYWxpemVcbiAgICAgICAgKHdoYXQpID0+IHtcbiAgICAgICAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICByZWplY3Qod2hhdCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSkpO1xuICAgIGF3YWl0IFByb21pc2UucmFjZSh0YXNrcyk7XG4gICAgaWYgKGlzVGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBXZWJBc3NlbWJseSBiYWNrZW5kIGluaXRpYWxpemluZyBmYWlsZWQgZHVlIHRvIHRpbWVvdXQ6ICR7dGltZW91dH1tc2ApO1xuICAgIH1cbiAgfTtcbiAgdmFyIGdldEluc3RhbmNlID0gKCkgPT4ge1xuICAgIGlmIChpbml0aWFsaXplZCAmJiB3YXNtKSB7XG4gICAgICByZXR1cm4gd2FzbTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiV2ViQXNzZW1ibHkgaXMgbm90IGluaXRpYWxpemVkIHlldC5cIik7XG4gIH07XG5cbiAgLy8gd2ViL2xpYi93YXNtL3dhc20tdXRpbHMudHNcbiAgdmFyIGFsbG9jV2FzbVN0cmluZyA9IChkYXRhLCBhbGxvY3MpID0+IHtcbiAgICBjb25zdCB3YXNtMiA9IGdldEluc3RhbmNlKCk7XG4gICAgY29uc3QgZGF0YUxlbmd0aCA9IHdhc20yLmxlbmd0aEJ5dGVzVVRGOChkYXRhKSArIDE7XG4gICAgY29uc3QgZGF0YU9mZnNldCA9IHdhc20yLl9tYWxsb2MoZGF0YUxlbmd0aCk7XG4gICAgd2FzbTIuc3RyaW5nVG9VVEY4KGRhdGEsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgpO1xuICAgIGFsbG9jcy5wdXNoKGRhdGFPZmZzZXQpO1xuICAgIHJldHVybiBkYXRhT2Zmc2V0O1xuICB9O1xuICB2YXIgaXRlcmF0ZUV4dHJhT3B0aW9ucyA9IChvcHRpb25zLCBwcmVmaXgsIHNlZW4sIGhhbmRsZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gXCJvYmplY3RcIiAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMob3B0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2lyY3VsYXIgcmVmZXJlbmNlIGluIG9wdGlvbnNcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWVuLmFkZChvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcHJlZml4ID8gcHJlZml4ICsga2V5IDoga2V5O1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpdGVyYXRlRXh0cmFPcHRpb25zKHZhbHVlLCBuYW1lICsgXCIuXCIsIHNlZW4sIGhhbmRsZXIpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGhhbmRsZXIobmFtZSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgaGFuZGxlcihuYW1lLCB2YWx1ZSA/IFwiMVwiIDogXCIwXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBoYW5kbGUgZXh0cmEgY29uZmlnIHR5cGU6ICR7dHlwZW9mIHZhbHVlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICB2YXIgY2hlY2tMYXN0RXJyb3IgPSAobWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IHdhc20yID0gZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBzdGFjayA9IHdhc20yLnN0YWNrU2F2ZSgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXNPZmZzZXQgPSB3YXNtMi5zdGFja0FsbG9jKDgpO1xuICAgICAgd2FzbTIuX09ydEdldExhc3RFcnJvcihwYXJhbXNPZmZzZXQsIHBhcmFtc09mZnNldCArIDQpO1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbTIuSEVBUDMyW3BhcmFtc09mZnNldCAvIDRdO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlUG9pbnRlciA9IHdhc20yLkhFQVBVMzJbcGFyYW1zT2Zmc2V0IC8gNCArIDFdO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlUG9pbnRlciA/IHdhc20yLlVURjhUb1N0cmluZyhlcnJvck1lc3NhZ2VQb2ludGVyKSA6IFwiXCI7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZX0gRVJST1JfQ09ERTogJHtlcnJvckNvZGV9LCBFUlJPUl9NRVNTQUdFOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgd2FzbTIuc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gd2ViL2xpYi93YXNtL3J1bi1vcHRpb25zLnRzXG4gIHZhciBzZXRSdW5PcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB3YXNtMiA9IGdldEluc3RhbmNlKCk7XG4gICAgbGV0IHJ1bk9wdGlvbnNIYW5kbGUgPSAwO1xuICAgIGNvbnN0IGFsbG9jcyA9IFtdO1xuICAgIGNvbnN0IHJ1bk9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRyeSB7XG4gICAgICBpZiAob3B0aW9ucz8ubG9nU2V2ZXJpdHlMZXZlbCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHJ1bk9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA9IDI7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgIT09IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sb2dTZXZlcml0eUxldmVsKSB8fCBvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgPCAwIHx8IG9wdGlvbnMubG9nU2V2ZXJpdHlMZXZlbCA+IDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgc2VydmVyaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtvcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWx9YCk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucz8ubG9nVmVyYm9zaXR5TGV2ZWwgPT09IHZvaWQgMCkge1xuICAgICAgICBydW5PcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsID0gMDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMubG9nVmVyYm9zaXR5TGV2ZWwgIT09IFwibnVtYmVyXCIgfHwgIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5sb2dWZXJib3NpdHlMZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgdmVyYm9zaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtvcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsfWApO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnM/LnRlcm1pbmF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHJ1bk9wdGlvbnMudGVybWluYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBsZXQgdGFnRGF0YU9mZnNldCA9IDA7XG4gICAgICBpZiAob3B0aW9ucz8udGFnICE9PSB2b2lkIDApIHtcbiAgICAgICAgdGFnRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhvcHRpb25zLnRhZywgYWxsb2NzKTtcbiAgICAgIH1cbiAgICAgIHJ1bk9wdGlvbnNIYW5kbGUgPSB3YXNtMi5fT3J0Q3JlYXRlUnVuT3B0aW9ucyhcbiAgICAgICAgcnVuT3B0aW9ucy5sb2dTZXZlcml0eUxldmVsLFxuICAgICAgICBydW5PcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsLFxuICAgICAgICAhIXJ1bk9wdGlvbnMudGVybWluYXRlLFxuICAgICAgICB0YWdEYXRhT2Zmc2V0XG4gICAgICApO1xuICAgICAgaWYgKHJ1bk9wdGlvbnNIYW5kbGUgPT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoXCJDYW4ndCBjcmVhdGUgcnVuIG9wdGlvbnMuXCIpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnM/LmV4dHJhICE9PSB2b2lkIDApIHtcbiAgICAgICAgaXRlcmF0ZUV4dHJhT3B0aW9ucyhvcHRpb25zLmV4dHJhLCBcIlwiLCAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGtleSwgYWxsb2NzKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcodmFsdWUsIGFsbG9jcyk7XG4gICAgICAgICAgaWYgKHdhc20yLl9PcnRBZGRSdW5Db25maWdFbnRyeShydW5PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PSAwKSB7XG4gICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgcnVuIGNvbmZpZyBlbnRyeTogJHtrZXl9IC0gJHt2YWx1ZX0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbcnVuT3B0aW9uc0hhbmRsZSwgYWxsb2NzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAocnVuT3B0aW9uc0hhbmRsZSAhPT0gMCkge1xuICAgICAgICB3YXNtMi5fT3J0UmVsZWFzZVJ1bk9wdGlvbnMocnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgICB9XG4gICAgICBhbGxvY3MuZm9yRWFjaCgoYWxsb2MpID0+IHdhc20yLl9mcmVlKGFsbG9jKSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfTtcblxuICAvLyB3ZWIvbGliL3dhc20vc2Vzc2lvbi1vcHRpb25zLnRzXG4gIHZhciBnZXRHcmFwaE9wdGltemF0aW9uTGV2ZWwgPSAoZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCkgPT4ge1xuICAgIHN3aXRjaCAoZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCkge1xuICAgICAgY2FzZSBcImRpc2FibGVkXCI6XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgY2FzZSBcImJhc2ljXCI6XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgY2FzZSBcImV4dGVuZGVkXCI6XG4gICAgICAgIHJldHVybiAyO1xuICAgICAgY2FzZSBcImFsbFwiOlxuICAgICAgICByZXR1cm4gOTk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGdyYXBoIG9wdGltaXphdGlvbiBsZXZlbDogJHtncmFwaE9wdGltaXphdGlvbkxldmVsfWApO1xuICAgIH1cbiAgfTtcbiAgdmFyIGdldEV4ZWN1dGlvbk1vZGUgPSAoZXhlY3V0aW9uTW9kZSkgPT4ge1xuICAgIHN3aXRjaCAoZXhlY3V0aW9uTW9kZSkge1xuICAgICAgY2FzZSBcInNlcXVlbnRpYWxcIjpcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICBjYXNlIFwicGFyYWxsZWxcIjpcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGV4ZWN1dGlvbiBtb2RlOiAke2V4ZWN1dGlvbk1vZGV9YCk7XG4gICAgfVxuICB9O1xuICB2YXIgYXBwZW5kRGVmYXVsdE9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuICAgIGlmICghb3B0aW9ucy5leHRyYSkge1xuICAgICAgb3B0aW9ucy5leHRyYSA9IHt9O1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuZXh0cmEuc2Vzc2lvbikge1xuICAgICAgb3B0aW9ucy5leHRyYS5zZXNzaW9uID0ge307XG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSBvcHRpb25zLmV4dHJhLnNlc3Npb247XG4gICAgaWYgKCFzZXNzaW9uLnVzZV9vcnRfbW9kZWxfYnl0ZXNfZGlyZWN0bHkpIHtcbiAgICAgIHNlc3Npb24udXNlX29ydF9tb2RlbF9ieXRlc19kaXJlY3RseSA9IFwiMVwiO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMgJiYgb3B0aW9ucy5leGVjdXRpb25Qcm92aWRlcnMuc29tZSgoZXApID0+ICh0eXBlb2YgZXAgPT09IFwic3RyaW5nXCIgPyBlcCA6IGVwLm5hbWUpID09PSBcIndlYmdwdVwiKSkge1xuICAgICAgb3B0aW9ucy5lbmFibGVNZW1QYXR0ZXJuID0gZmFsc2U7XG4gICAgfVxuICB9O1xuICB2YXIgc2V0RXhlY3V0aW9uUHJvdmlkZXJzID0gKHNlc3Npb25PcHRpb25zSGFuZGxlLCBleGVjdXRpb25Qcm92aWRlcnMsIGFsbG9jcykgPT4ge1xuICAgIGZvciAoY29uc3QgZXAgb2YgZXhlY3V0aW9uUHJvdmlkZXJzKSB7XG4gICAgICBsZXQgZXBOYW1lID0gdHlwZW9mIGVwID09PSBcInN0cmluZ1wiID8gZXAgOiBlcC5uYW1lO1xuICAgICAgc3dpdGNoIChlcE5hbWUpIHtcbiAgICAgICAgY2FzZSBcIndlYm5uXCI6XG4gICAgICAgICAgZXBOYW1lID0gXCJXRUJOTlwiO1xuICAgICAgICAgIGlmICh0eXBlb2YgZXAgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHdlYm5uT3B0aW9ucyA9IGVwO1xuICAgICAgICAgICAgaWYgKHdlYm5uT3B0aW9ucz8uZGV2aWNlVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKFwiZGV2aWNlVHlwZVwiLCBhbGxvY3MpO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZURhdGFPZmZzZXQgPSBhbGxvY1dhc21TdHJpbmcod2Vibm5PcHRpb25zLmRldmljZVR5cGUsIGFsbG9jcyk7XG4gICAgICAgICAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdkZXZpY2VUeXBlJyAtICR7d2Vibm5PcHRpb25zLmRldmljZVR5cGV9LmApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Vibm5PcHRpb25zPy5udW1UaHJlYWRzKSB7XG4gICAgICAgICAgICAgIGxldCBudW1UaHJlYWRzID0gd2Vibm5PcHRpb25zLm51bVRocmVhZHM7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtVGhyZWFkcyAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG51bVRocmVhZHMpIHx8IG51bVRocmVhZHMgPCAwKSB7XG4gICAgICAgICAgICAgICAgbnVtVGhyZWFkcyA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhcIm51bVRocmVhZHNcIiwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKG51bVRocmVhZHMudG9TdHJpbmcoKSwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeShzZXNzaW9uT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ251bVRocmVhZHMnIC0gJHt3ZWJubk9wdGlvbnMubnVtVGhyZWFkc30uYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3ZWJubk9wdGlvbnM/LnBvd2VyUHJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKFwicG93ZXJQcmVmZXJlbmNlXCIsIGFsbG9jcyk7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh3ZWJubk9wdGlvbnMucG93ZXJQcmVmZXJlbmNlLCBhbGxvY3MpO1xuICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2UoKS5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tMYXN0RXJyb3IoXG4gICAgICAgICAgICAgICAgICBgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICdwb3dlclByZWZlcmVuY2UnIC0gJHt3ZWJubk9wdGlvbnMucG93ZXJQcmVmZXJlbmNlfS5gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIndlYmdwdVwiOlxuICAgICAgICAgIGVwTmFtZSA9IFwiSlNcIjtcbiAgICAgICAgICBpZiAodHlwZW9mIGVwICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCB3ZWJncHVPcHRpb25zID0gZXA7XG4gICAgICAgICAgICBpZiAod2ViZ3B1T3B0aW9ucz8ucHJlZmVycmVkTGF5b3V0KSB7XG4gICAgICAgICAgICAgIGlmICh3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dCAhPT0gXCJOQ0hXXCIgJiYgd2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXQgIT09IFwiTkhXQ1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmVmZXJyZWRMYXlvdXQgbXVzdCBiZSBlaXRoZXIgJ05DSFcnIG9yICdOSFdDJzogJHt3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dH1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKFwicHJlZmVycmVkTGF5b3V0XCIsIGFsbG9jcyk7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyh3ZWJncHVPcHRpb25zLnByZWZlcnJlZExheW91dCwgYWxsb2NzKTtcbiAgICAgICAgICAgICAgaWYgKGdldEluc3RhbmNlKCkuX09ydEFkZFNlc3Npb25Db25maWdFbnRyeShzZXNzaW9uT3B0aW9uc0hhbmRsZSwga2V5RGF0YU9mZnNldCwgdmFsdWVEYXRhT2Zmc2V0KSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKFxuICAgICAgICAgICAgICAgICAgYENhbid0IHNldCBhIHNlc3Npb24gY29uZmlnIGVudHJ5OiAncHJlZmVycmVkTGF5b3V0JyAtICR7d2ViZ3B1T3B0aW9ucy5wcmVmZXJyZWRMYXlvdXR9LmBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwid2FzbVwiOlxuICAgICAgICBjYXNlIFwiY3B1XCI6XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub3Qgc3VwcG9ydGVkIGV4ZWN1dGlvbiBwcm92aWRlcjogJHtlcE5hbWV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBlcE5hbWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKGVwTmFtZSwgYWxsb2NzKTtcbiAgICAgIGlmIChnZXRJbnN0YW5jZSgpLl9PcnRBcHBlbmRFeGVjdXRpb25Qcm92aWRlcihzZXNzaW9uT3B0aW9uc0hhbmRsZSwgZXBOYW1lRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoYENhbid0IGFwcGVuZCBleGVjdXRpb24gcHJvdmlkZXI6ICR7ZXBOYW1lfS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBzZXRTZXNzaW9uT3B0aW9ucyA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgd2FzbTIgPSBnZXRJbnN0YW5jZSgpO1xuICAgIGxldCBzZXNzaW9uT3B0aW9uc0hhbmRsZSA9IDA7XG4gICAgY29uc3QgYWxsb2NzID0gW107XG4gICAgY29uc3Qgc2Vzc2lvbk9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGFwcGVuZERlZmF1bHRPcHRpb25zKHNlc3Npb25PcHRpb25zKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3JhcGhPcHRpbWl6YXRpb25MZXZlbCA9IGdldEdyYXBoT3B0aW16YXRpb25MZXZlbChzZXNzaW9uT3B0aW9ucy5ncmFwaE9wdGltaXphdGlvbkxldmVsID8/IFwiYWxsXCIpO1xuICAgICAgY29uc3QgZXhlY3V0aW9uTW9kZSA9IGdldEV4ZWN1dGlvbk1vZGUoc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uTW9kZSA/PyBcInNlcXVlbnRpYWxcIik7XG4gICAgICBjb25zdCBsb2dJZERhdGFPZmZzZXQgPSB0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMubG9nSWQgPT09IFwic3RyaW5nXCIgPyBhbGxvY1dhc21TdHJpbmcoc2Vzc2lvbk9wdGlvbnMubG9nSWQsIGFsbG9jcykgOiAwO1xuICAgICAgY29uc3QgbG9nU2V2ZXJpdHlMZXZlbCA9IHNlc3Npb25PcHRpb25zLmxvZ1NldmVyaXR5TGV2ZWwgPz8gMjtcbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsb2dTZXZlcml0eUxldmVsKSB8fCBsb2dTZXZlcml0eUxldmVsIDwgMCB8fCBsb2dTZXZlcml0eUxldmVsID4gNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGxvZyBzZXJ2ZXJpdHkgbGV2ZWwgaXMgbm90IHZhbGlkOiAke2xvZ1NldmVyaXR5TGV2ZWx9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsb2dWZXJib3NpdHlMZXZlbCA9IHNlc3Npb25PcHRpb25zLmxvZ1ZlcmJvc2l0eUxldmVsID8/IDA7XG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobG9nVmVyYm9zaXR5TGV2ZWwpIHx8IGxvZ1ZlcmJvc2l0eUxldmVsIDwgMCB8fCBsb2dWZXJib3NpdHlMZXZlbCA+IDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBsb2cgdmVyYm9zaXR5IGxldmVsIGlzIG5vdCB2YWxpZDogJHtsb2dWZXJib3NpdHlMZXZlbH1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGltaXplZE1vZGVsRmlsZVBhdGhPZmZzZXQgPSB0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMub3B0aW1pemVkTW9kZWxGaWxlUGF0aCA9PT0gXCJzdHJpbmdcIiA/IGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5vcHRpbWl6ZWRNb2RlbEZpbGVQYXRoLCBhbGxvY3MpIDogMDtcbiAgICAgIHNlc3Npb25PcHRpb25zSGFuZGxlID0gd2FzbTIuX09ydENyZWF0ZVNlc3Npb25PcHRpb25zKFxuICAgICAgICBncmFwaE9wdGltaXphdGlvbkxldmVsLFxuICAgICAgICAhIXNlc3Npb25PcHRpb25zLmVuYWJsZUNwdU1lbUFyZW5hLFxuICAgICAgICAhIXNlc3Npb25PcHRpb25zLmVuYWJsZU1lbVBhdHRlcm4sXG4gICAgICAgIGV4ZWN1dGlvbk1vZGUsXG4gICAgICAgICEhc2Vzc2lvbk9wdGlvbnMuZW5hYmxlUHJvZmlsaW5nLFxuICAgICAgICAwLFxuICAgICAgICBsb2dJZERhdGFPZmZzZXQsXG4gICAgICAgIGxvZ1NldmVyaXR5TGV2ZWwsXG4gICAgICAgIGxvZ1ZlcmJvc2l0eUxldmVsLFxuICAgICAgICBvcHRpbWl6ZWRNb2RlbEZpbGVQYXRoT2Zmc2V0XG4gICAgICApO1xuICAgICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlID09PSAwKSB7XG4gICAgICAgIGNoZWNrTGFzdEVycm9yKFwiQ2FuJ3QgY3JlYXRlIHNlc3Npb24gb3B0aW9ucy5cIik7XG4gICAgICB9XG4gICAgICBpZiAoc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzKSB7XG4gICAgICAgIHNldEV4ZWN1dGlvblByb3ZpZGVycyhzZXNzaW9uT3B0aW9uc0hhbmRsZSwgc2Vzc2lvbk9wdGlvbnMuZXhlY3V0aW9uUHJvdmlkZXJzLCBhbGxvY3MpO1xuICAgICAgfVxuICAgICAgaWYgKHNlc3Npb25PcHRpb25zLmVuYWJsZUdyYXBoQ2FwdHVyZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2Vzc2lvbk9wdGlvbnMuZW5hYmxlR3JhcGhDYXB0dXJlICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZW5hYmxlR3JhcGhDYXB0dXJlIG11c3QgYmUgYSBib29sZWFuIHZhbHVlOiAke3Nlc3Npb25PcHRpb25zLmVuYWJsZUdyYXBoQ2FwdHVyZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKFwiZW5hYmxlR3JhcGhDYXB0dXJlXCIsIGFsbG9jcyk7XG4gICAgICAgIGNvbnN0IHZhbHVlRGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhzZXNzaW9uT3B0aW9ucy5lbmFibGVHcmFwaENhcHR1cmUudG9TdHJpbmcoKSwgYWxsb2NzKTtcbiAgICAgICAgaWYgKHdhc20yLl9PcnRBZGRTZXNzaW9uQ29uZmlnRW50cnkoc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGtleURhdGFPZmZzZXQsIHZhbHVlRGF0YU9mZnNldCkgIT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihcbiAgICAgICAgICAgIGBDYW4ndCBzZXQgYSBzZXNzaW9uIGNvbmZpZyBlbnRyeTogJ2VuYWJsZUdyYXBoQ2FwdHVyZScgLSAke3Nlc3Npb25PcHRpb25zLmVuYWJsZUdyYXBoQ2FwdHVyZX0uYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzZXNzaW9uT3B0aW9ucy5mcmVlRGltZW5zaW9uT3ZlcnJpZGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZXNzaW9uT3B0aW9ucy5mcmVlRGltZW5zaW9uT3ZlcnJpZGVzKSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmcmVlIGRpbWVuc2lvbiBvdmVycmlkZSBuYW1lIG11c3QgYmUgYSBzdHJpbmc6ICR7bmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZyZWUgZGltZW5zaW9uIG92ZXJyaWRlIHZhbHVlIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcjogJHt2YWx1ZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbmFtZU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhuYW1lLCBhbGxvY3MpO1xuICAgICAgICAgIGlmICh3YXNtMi5fT3J0QWRkRnJlZURpbWVuc2lvbk92ZXJyaWRlKHNlc3Npb25PcHRpb25zSGFuZGxlLCBuYW1lT2Zmc2V0LCB2YWx1ZSkgIT09IDApIHtcbiAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBzZXQgYSBmcmVlIGRpbWVuc2lvbiBvdmVycmlkZTogJHtuYW1lfSAtICR7dmFsdWV9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNlc3Npb25PcHRpb25zLmV4dHJhICE9PSB2b2lkIDApIHtcbiAgICAgICAgaXRlcmF0ZUV4dHJhT3B0aW9ucyhzZXNzaW9uT3B0aW9ucy5leHRyYSwgXCJcIiwgLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCksIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5RGF0YU9mZnNldCA9IGFsbG9jV2FzbVN0cmluZyhrZXksIGFsbG9jcyk7XG4gICAgICAgICAgY29uc3QgdmFsdWVEYXRhT2Zmc2V0ID0gYWxsb2NXYXNtU3RyaW5nKHZhbHVlLCBhbGxvY3MpO1xuICAgICAgICAgIGlmICh3YXNtMi5fT3J0QWRkU2Vzc2lvbkNvbmZpZ0VudHJ5KHNlc3Npb25PcHRpb25zSGFuZGxlLCBrZXlEYXRhT2Zmc2V0LCB2YWx1ZURhdGFPZmZzZXQpICE9PSAwKSB7XG4gICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3Qgc2V0IGEgc2Vzc2lvbiBjb25maWcgZW50cnk6ICR7a2V5fSAtICR7dmFsdWV9LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25PcHRpb25zSGFuZGxlLCBhbGxvY3NdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChzZXNzaW9uT3B0aW9uc0hhbmRsZSAhPT0gMCkge1xuICAgICAgICB3YXNtMi5fT3J0UmVsZWFzZVNlc3Npb25PcHRpb25zKHNlc3Npb25PcHRpb25zSGFuZGxlKTtcbiAgICAgIH1cbiAgICAgIGFsbG9jcy5mb3JFYWNoKChhbGxvYykgPT4gd2FzbTIuX2ZyZWUoYWxsb2MpKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xuXG4gIC8vIHdlYi9saWIvd2FzbS93YXNtLWNvcmUtaW1wbC50c1xuICBpbml0X3dhc21fY29tbW9uKCk7XG5cbiAgLy8gd2ViL2xpYi93YXNtL3dhc20tdXRpbHMtbG9hZC1maWxlLnRzXG4gIGluaXRfZnMoKTtcblxuICAvLyBub2RlanMtaWdub3JlOm5vZGU6ZnMvcHJvbWlzZXNcbiAgdmFyIHJlYWRGaWxlMiA9IHZvaWQgMDtcblxuICAvLyB3ZWIvbGliL3dhc20vd2FzbS11dGlscy1sb2FkLWZpbGUudHNcbiAgdmFyIGxvYWRGaWxlID0gYXN5bmMgKGZpbGUpID0+IHtcbiAgICBpZiAodHlwZW9mIGZpbGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCByZWFkRmlsZTIoZmlsZSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUuY29kZSA9PT0gXCJFUlJfRlNfRklMRV9UT09fTEFSR0VcIikge1xuICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbShmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmlsZSk7XG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRhdGEgZmlsZTogJHtmaWxlfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtTGVuZ3RoXCIpO1xuICAgICAgICBjb25zdCBmaWxlU2l6ZSA9IGNvbnRlbnRMZW5ndGhIZWFkZXIgPyBwYXJzZUludChjb250ZW50TGVuZ3RoSGVhZGVyLCAxMCkgOiAwO1xuICAgICAgICBpZiAoZmlsZVNpemUgPCAxMDczNzQxODI0KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghcmVzcG9uc2UuYm9keSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCBleHRlcm5hbCBkYXRhIGZpbGU6ICR7ZmlsZX0sIG5vIHJlc3BvbnNlIGJvZHkuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGZpbGVTaXplKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwoZmlsZVNpemUgLyA2NTUzNik7XG4gICAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoeyBpbml0aWFsOiBwYWdlcywgbWF4aW11bTogcGFnZXMgfSkuYnVmZmVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBjaHVua1NpemUpO1xuICAgICAgICAgICAgY2h1bmsuc2V0KHZhbHVlKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjaHVua1NpemU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIsIDAsIGZpbGVTaXplKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmlsZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCkpO1xuICAgIH0gZWxzZSBpZiAoZmlsZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZmlsZSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIHdlYi9saWIvd2FzbS93YXNtLWNvcmUtaW1wbC50c1xuICB2YXIgaW5pdE9ydCA9IChudW1UaHJlYWRzLCBsb2dnaW5nTGV2ZWwpID0+IHtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBnZXRJbnN0YW5jZSgpLl9PcnRJbml0KG51bVRocmVhZHMsIGxvZ2dpbmdMZXZlbCk7XG4gICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgY2hlY2tMYXN0RXJyb3IoXCJDYW4ndCBpbml0aWFsaXplIG9ubnhydW50aW1lLlwiKTtcbiAgICB9XG4gIH07XG4gIHZhciBpbml0UnVudGltZSA9IGFzeW5jIChlbnYzKSA9PiB7XG4gICAgaW5pdE9ydChlbnYzLndhc20ubnVtVGhyZWFkcywgbG9nTGV2ZWxTdHJpbmdUb0VudW0oZW52My5sb2dMZXZlbCkpO1xuICB9O1xuICB2YXIgaW5pdEVwID0gYXN5bmMgKGVudjMsIGVwTmFtZSkgPT4ge1xuICAgIGlmICh0cnVlKSB7XG4gICAgICBjb25zdCBpbml0SnNlcCA9IChpbml0X2luaXQoKSwgX190b0NvbW1vbkpTKGluaXRfZXhwb3J0cykpLmluaXQ7XG4gICAgICBpZiAoZXBOYW1lID09PSBcIndlYmdwdVwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcInVuZGVmaW5lZFwiIHx8ICFuYXZpZ2F0b3IuZ3B1KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV2ViR1BVIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY3VycmVudCBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWRhcHRlciA9IGVudjMud2ViZ3B1LmFkYXB0ZXI7XG4gICAgICAgIGlmICghYWRhcHRlcikge1xuICAgICAgICAgIGNvbnN0IHBvd2VyUHJlZmVyZW5jZSA9IGVudjMud2ViZ3B1LnBvd2VyUHJlZmVyZW5jZTtcbiAgICAgICAgICBpZiAocG93ZXJQcmVmZXJlbmNlICE9PSB2b2lkIDAgJiYgcG93ZXJQcmVmZXJlbmNlICE9PSBcImxvdy1wb3dlclwiICYmIHBvd2VyUHJlZmVyZW5jZSAhPT0gXCJoaWdoLXBlcmZvcm1hbmNlXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3dlclByZWZlcmVuY2Ugc2V0dGluZzogXCIke3Bvd2VyUHJlZmVyZW5jZX1cImApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmb3JjZUZhbGxiYWNrQWRhcHRlciA9IGVudjMud2ViZ3B1LmZvcmNlRmFsbGJhY2tBZGFwdGVyO1xuICAgICAgICAgIGlmIChmb3JjZUZhbGxiYWNrQWRhcHRlciAhPT0gdm9pZCAwICYmIHR5cGVvZiBmb3JjZUZhbGxiYWNrQWRhcHRlciAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JjZUZhbGxiYWNrQWRhcHRlciBzZXR0aW5nOiBcIiR7Zm9yY2VGYWxsYmFja0FkYXB0ZXJ9XCJgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoeyBwb3dlclByZWZlcmVuY2UsIGZvcmNlRmFsbGJhY2tBZGFwdGVyIH0pO1xuICAgICAgICAgIGlmICghYWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRmFpbGVkIHRvIGdldCBHUFUgYWRhcHRlci4gWW91IG1heSBuZWVkIHRvIGVuYWJsZSBmbGFnIFwiLS1lbmFibGUtdW5zYWZlLXdlYmdwdVwiIGlmIHlvdSBhcmUgdXNpbmcgQ2hyb21lLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgYWRhcHRlci5saW1pdHMgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGFkYXB0ZXIuZmVhdHVyZXMgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGFkYXB0ZXIucmVxdWVzdERldmljZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIEdQVSBhZGFwdGVyIHNldCBpbiBgZW52LndlYmdwdS5hZGFwdGVyYC4gSXQgbXVzdCBiZSBhIEdQVUFkYXB0ZXIgb2JqZWN0LlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbnYzLndhc20uc2ltZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiTm90IHN1cHBvcnRlZCBmb3IgV2ViR1BVPU9OIGFuZCBTSU1EPU9GRi4gUGxlYXNlIHNldCBgZW52Lndhc20uc2ltZGAgdG8gdHJ1ZSB3aGVuIHVzaW5nIGB3ZWJncHVgIEVQXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGluaXRKc2VwKFwid2ViZ3B1XCIsIGdldEluc3RhbmNlKCksIGVudjMsIGFkYXB0ZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGVwTmFtZSA9PT0gXCJ3ZWJublwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcInVuZGVmaW5lZFwiIHx8ICFuYXZpZ2F0b3IubWwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXZWJOTiBpcyBub3Qgc3VwcG9ydGVkIGluIGN1cnJlbnQgZW52aXJvbm1lbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaW5pdEpzZXAoXCJ3ZWJublwiLCBnZXRJbnN0YW5jZSgpLCBlbnYzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBhY3RpdmVTZXNzaW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIHZhciBnZXRTZXNzaW9uSW5wdXRPdXRwdXRDb3VudCA9IChzZXNzaW9uSGFuZGxlKSA9PiB7XG4gICAgY29uc3Qgd2FzbTIgPSBnZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHN0YWNrID0gd2FzbTIuc3RhY2tTYXZlKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGFPZmZzZXQgPSB3YXNtMi5zdGFja0FsbG9jKDgpO1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gd2FzbTIuX09ydEdldElucHV0T3V0cHV0Q291bnQoc2Vzc2lvbkhhbmRsZSwgZGF0YU9mZnNldCwgZGF0YU9mZnNldCArIDQpO1xuICAgICAgaWYgKGVycm9yQ29kZSAhPT0gMCkge1xuICAgICAgICBjaGVja0xhc3RFcnJvcihcIkNhbid0IGdldCBzZXNzaW9uIGlucHV0L291dHB1dCBjb3VudC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3dhc20yLkhFQVAzMltkYXRhT2Zmc2V0IC8gNF0sIHdhc20yLkhFQVAzMltkYXRhT2Zmc2V0IC8gNCArIDFdXTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgd2FzbTIuc3RhY2tSZXN0b3JlKHN0YWNrKTtcbiAgICB9XG4gIH07XG4gIHZhciBjb3B5RnJvbUV4dGVybmFsQnVmZmVyID0gKG1vZGVsKSA9PiB7XG4gICAgY29uc3Qgd2FzbTIgPSBnZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IG1vZGVsRGF0YU9mZnNldCA9IHdhc20yLl9tYWxsb2MobW9kZWwuYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG1vZGVsRGF0YU9mZnNldCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBjcmVhdGUgYSBzZXNzaW9uLiBmYWlsZWQgdG8gYWxsb2NhdGUgYSBidWZmZXIgb2Ygc2l6ZSAke21vZGVsLmJ5dGVMZW5ndGh9LmApO1xuICAgIH1cbiAgICB3YXNtMi5IRUFQVTguc2V0KG1vZGVsLCBtb2RlbERhdGFPZmZzZXQpO1xuICAgIHJldHVybiBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbC5ieXRlTGVuZ3RoXTtcbiAgfTtcbiAgdmFyIGNyZWF0ZVNlc3Npb24gPSBhc3luYyAobW9kZWxEYXRhLCBvcHRpb25zKSA9PiB7XG4gICAgbGV0IG1vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoO1xuICAgIGNvbnN0IHdhc20yID0gZ2V0SW5zdGFuY2UoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbERhdGEpKSB7XG4gICAgICBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGhdID0gbW9kZWxEYXRhO1xuICAgIH0gZWxzZSBpZiAobW9kZWxEYXRhLmJ1ZmZlciA9PT0gd2FzbTIuSEVBUFU4LmJ1ZmZlcikge1xuICAgICAgW21vZGVsRGF0YU9mZnNldCwgbW9kZWxEYXRhTGVuZ3RoXSA9IFttb2RlbERhdGEuYnl0ZU9mZnNldCwgbW9kZWxEYXRhLmJ5dGVMZW5ndGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICBbbW9kZWxEYXRhT2Zmc2V0LCBtb2RlbERhdGFMZW5ndGhdID0gY29weUZyb21FeHRlcm5hbEJ1ZmZlcihtb2RlbERhdGEpO1xuICAgIH1cbiAgICBsZXQgc2Vzc2lvbkhhbmRsZSA9IDA7XG4gICAgbGV0IHNlc3Npb25PcHRpb25zSGFuZGxlID0gMDtcbiAgICBsZXQgaW9CaW5kaW5nSGFuZGxlID0gMDtcbiAgICBsZXQgYWxsb2NzID0gW107XG4gICAgY29uc3QgaW5wdXROYW1lc1VURjhFbmNvZGVkID0gW107XG4gICAgY29uc3Qgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBbc2Vzc2lvbk9wdGlvbnNIYW5kbGUsIGFsbG9jc10gPSBzZXRTZXNzaW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zPy5leHRlcm5hbERhdGEgJiYgd2FzbTIubW91bnRFeHRlcm5hbERhdGEpIHtcbiAgICAgICAgY29uc3QgbG9hZGluZ1Byb21pc2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRpb25zLmV4dGVybmFsRGF0YSkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0eXBlb2YgZmlsZSA9PT0gXCJzdHJpbmdcIiA/IGZpbGUgOiBmaWxlLnBhdGg7XG4gICAgICAgICAgbG9hZGluZ1Byb21pc2VzLnB1c2gobG9hZEZpbGUodHlwZW9mIGZpbGUgPT09IFwic3RyaW5nXCIgPyBmaWxlIDogZmlsZS5kYXRhKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICB3YXNtMi5tb3VudEV4dGVybmFsRGF0YShwYXRoLCBkYXRhKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobG9hZGluZ1Byb21pc2VzKTtcbiAgICAgIH1cbiAgICAgIHNlc3Npb25IYW5kbGUgPSBhd2FpdCB3YXNtMi5fT3J0Q3JlYXRlU2Vzc2lvbihtb2RlbERhdGFPZmZzZXQsIG1vZGVsRGF0YUxlbmd0aCwgc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgICAgaWYgKHNlc3Npb25IYW5kbGUgPT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoXCJDYW4ndCBjcmVhdGUgYSBzZXNzaW9uLlwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IFtpbnB1dENvdW50LCBvdXRwdXRDb3VudF0gPSBnZXRTZXNzaW9uSW5wdXRPdXRwdXRDb3VudChzZXNzaW9uSGFuZGxlKTtcbiAgICAgIGNvbnN0IGVuYWJsZUdyYXBoQ2FwdHVyZSA9ICEhb3B0aW9ucz8uZW5hYmxlR3JhcGhDYXB0dXJlO1xuICAgICAgY29uc3QgaW5wdXROYW1lcyA9IFtdO1xuICAgICAgY29uc3Qgb3V0cHV0TmFtZXMgPSBbXTtcbiAgICAgIGNvbnN0IG91dHB1dFByZWZlcnJlZExvY2F0aW9ucyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHdhc20yLl9PcnRHZXRJbnB1dE5hbWUoc2Vzc2lvbkhhbmRsZSwgaSk7XG4gICAgICAgIGlmIChuYW1lID09PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoXCJDYW4ndCBnZXQgYW4gaW5wdXQgbmFtZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXROYW1lc1VURjhFbmNvZGVkLnB1c2gobmFtZSk7XG4gICAgICAgIGlucHV0TmFtZXMucHVzaCh3YXNtMi5VVEY4VG9TdHJpbmcobmFtZSkpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB3YXNtMi5fT3J0R2V0T3V0cHV0TmFtZShzZXNzaW9uSGFuZGxlLCBpKTtcbiAgICAgICAgaWYgKG5hbWUgPT09IDApIHtcbiAgICAgICAgICBjaGVja0xhc3RFcnJvcihcIkNhbid0IGdldCBhbiBvdXRwdXQgbmFtZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZC5wdXNoKG5hbWUpO1xuICAgICAgICBjb25zdCBuYW1lU3RyaW5nID0gd2FzbTIuVVRGOFRvU3RyaW5nKG5hbWUpO1xuICAgICAgICBvdXRwdXROYW1lcy5wdXNoKG5hbWVTdHJpbmcpO1xuICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgIGlmIChlbmFibGVHcmFwaENhcHR1cmUgJiYgb3B0aW9ucz8ucHJlZmVycmVkT3V0cHV0TG9jYXRpb24gPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLnB1c2goXCJncHUtYnVmZmVyXCIpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdHlwZW9mIG9wdGlvbnM/LnByZWZlcnJlZE91dHB1dExvY2F0aW9uID09PSBcInN0cmluZ1wiID8gb3B0aW9ucy5wcmVmZXJyZWRPdXRwdXRMb2NhdGlvbiA6IG9wdGlvbnM/LnByZWZlcnJlZE91dHB1dExvY2F0aW9uPy5bbmFtZVN0cmluZ10gPz8gXCJjcHVcIjtcbiAgICAgICAgICBpZiAobG9jYXRpb24gIT09IFwiY3B1XCIgJiYgbG9jYXRpb24gIT09IFwiY3B1LXBpbm5lZFwiICYmIGxvY2F0aW9uICE9PSBcImdwdS1idWZmZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3Qgc3VwcG9ydGVkIHByZWZlcnJlZCBvdXRwdXQgbG9jYXRpb246ICR7bG9jYXRpb259LmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZW5hYmxlR3JhcGhDYXB0dXJlICYmIGxvY2F0aW9uICE9PSBcImdwdS1idWZmZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3Qgc3VwcG9ydGVkIHByZWZlcnJlZCBvdXRwdXQgbG9jYXRpb246ICR7bG9jYXRpb259LiBPbmx5ICdncHUtYnVmZmVyJyBsb2NhdGlvbiBpcyBzdXBwb3J0ZWQgd2hlbiBlbmFibGVHcmFwaENhcHR1cmUgaXMgdHJ1ZS5gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0cHV0UHJlZmVycmVkTG9jYXRpb25zLnB1c2gobG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYmluZGluZ1N0YXRlID0gbnVsbDtcbiAgICAgIGlmIChvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMuc29tZSgobCkgPT4gbCA9PT0gXCJncHUtYnVmZmVyXCIpKSB7XG4gICAgICAgIGlvQmluZGluZ0hhbmRsZSA9IHdhc20yLl9PcnRDcmVhdGVCaW5kaW5nKHNlc3Npb25IYW5kbGUpO1xuICAgICAgICBpZiAoaW9CaW5kaW5nSGFuZGxlID09PSAwKSB7XG4gICAgICAgICAgY2hlY2tMYXN0RXJyb3IoXCJDYW4ndCBjcmVhdGUgSU8gYmluZGluZy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgYmluZGluZ1N0YXRlID0ge1xuICAgICAgICAgIGhhbmRsZTogaW9CaW5kaW5nSGFuZGxlLFxuICAgICAgICAgIG91dHB1dFByZWZlcnJlZExvY2F0aW9ucyxcbiAgICAgICAgICBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnNFbmNvZGVkOiBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMubWFwKChsKSA9PiBkYXRhTG9jYXRpb25TdHJpbmdUb0VudW0obCkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBhY3RpdmVTZXNzaW9ucy5zZXQoXG4gICAgICAgIHNlc3Npb25IYW5kbGUsXG4gICAgICAgIFtzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzVVRGOEVuY29kZWQsIG91dHB1dE5hbWVzVVRGOEVuY29kZWQsIGJpbmRpbmdTdGF0ZSwgZW5hYmxlR3JhcGhDYXB0dXJlLCBmYWxzZV1cbiAgICAgICk7XG4gICAgICByZXR1cm4gW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXMsIG91dHB1dE5hbWVzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpbnB1dE5hbWVzVVRGOEVuY29kZWQuZm9yRWFjaCgoYnVmKSA9PiB3YXNtMi5fT3J0RnJlZShidWYpKTtcbiAgICAgIG91dHB1dE5hbWVzVVRGOEVuY29kZWQuZm9yRWFjaCgoYnVmKSA9PiB3YXNtMi5fT3J0RnJlZShidWYpKTtcbiAgICAgIGlmIChpb0JpbmRpbmdIYW5kbGUgIT09IDApIHtcbiAgICAgICAgd2FzbTIuX09ydFJlbGVhc2VCaW5kaW5nKGlvQmluZGluZ0hhbmRsZSk7XG4gICAgICB9XG4gICAgICBpZiAoc2Vzc2lvbkhhbmRsZSAhPT0gMCkge1xuICAgICAgICB3YXNtMi5fT3J0UmVsZWFzZVNlc3Npb24oc2Vzc2lvbkhhbmRsZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB3YXNtMi5fZnJlZShtb2RlbERhdGFPZmZzZXQpO1xuICAgICAgaWYgKHNlc3Npb25PcHRpb25zSGFuZGxlICE9PSAwKSB7XG4gICAgICAgIHdhc20yLl9PcnRSZWxlYXNlU2Vzc2lvbk9wdGlvbnMoc2Vzc2lvbk9wdGlvbnNIYW5kbGUpO1xuICAgICAgfVxuICAgICAgYWxsb2NzLmZvckVhY2goKGFsbG9jKSA9PiB3YXNtMi5fZnJlZShhbGxvYykpO1xuICAgICAgd2FzbTIudW5tb3VudEV4dGVybmFsRGF0YT8uKCk7XG4gICAgfVxuICB9O1xuICB2YXIgcmVsZWFzZVNlc3Npb24gPSAoc2Vzc2lvbklkKSA9PiB7XG4gICAgY29uc3Qgd2FzbTIgPSBnZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHNlc3Npb24gPSBhY3RpdmVTZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHJlbGVhc2Ugc2Vzc2lvbi4gaW52YWxpZCBzZXNzaW9uIGlkOiAke3Nlc3Npb25JZH1gKTtcbiAgICB9XG4gICAgY29uc3QgW3Nlc3Npb25IYW5kbGUsIGlucHV0TmFtZXNVVEY4RW5jb2RlZCwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZCwgaW9CaW5kaW5nU3RhdGUsIGVuYWJsZUdyYXBoQ2FwdHVyZV0gPSBzZXNzaW9uO1xuICAgIGlmIChpb0JpbmRpbmdTdGF0ZSkge1xuICAgICAgaWYgKGVuYWJsZUdyYXBoQ2FwdHVyZSkge1xuICAgICAgICB3YXNtMi5fT3J0Q2xlYXJCb3VuZE91dHB1dHMoaW9CaW5kaW5nU3RhdGUuaGFuZGxlKTtcbiAgICAgIH1cbiAgICAgIHdhc20yLl9PcnRSZWxlYXNlQmluZGluZyhpb0JpbmRpbmdTdGF0ZS5oYW5kbGUpO1xuICAgIH1cbiAgICB3YXNtMi5qc2VwT25SZWxlYXNlU2Vzc2lvbj8uKHNlc3Npb25JZCk7XG4gICAgaW5wdXROYW1lc1VURjhFbmNvZGVkLmZvckVhY2goKGJ1ZikgPT4gd2FzbTIuX09ydEZyZWUoYnVmKSk7XG4gICAgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZC5mb3JFYWNoKChidWYpID0+IHdhc20yLl9PcnRGcmVlKGJ1ZikpO1xuICAgIHdhc20yLl9PcnRSZWxlYXNlU2Vzc2lvbihzZXNzaW9uSGFuZGxlKTtcbiAgICBhY3RpdmVTZXNzaW9ucy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgfTtcbiAgdmFyIHByZXBhcmVJbnB1dE91dHB1dFRlbnNvciA9ICh0ZW5zb3IsIHRlbnNvckhhbmRsZXMsIGFsbG9jcywgc2Vzc2lvbklkLCBpbmRleCwgZW5hYmxlR3JhcGhDYXB0dXJlID0gZmFsc2UpID0+IHtcbiAgICBpZiAoIXRlbnNvcikge1xuICAgICAgdGVuc29ySGFuZGxlcy5wdXNoKDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB3YXNtMiA9IGdldEluc3RhbmNlKCk7XG4gICAgY29uc3QgZGF0YVR5cGUgPSB0ZW5zb3JbMF07XG4gICAgY29uc3QgZGltcyA9IHRlbnNvclsxXTtcbiAgICBjb25zdCBsb2NhdGlvbiA9IHRlbnNvclszXTtcbiAgICBsZXQgcmF3RGF0YTtcbiAgICBsZXQgZGF0YUJ5dGVMZW5ndGg7XG4gICAgaWYgKGRhdGFUeXBlID09PSBcInN0cmluZ1wiICYmIGxvY2F0aW9uID09PSBcImdwdS1idWZmZXJcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5nIHRlbnNvciBpcyBub3Qgc3VwcG9ydGVkIG9uIEdQVS5cIik7XG4gICAgfVxuICAgIGlmIChlbmFibGVHcmFwaENhcHR1cmUgJiYgbG9jYXRpb24gIT09IFwiZ3B1LWJ1ZmZlclwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFeHRlcm5hbCBidWZmZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgaW5wdXQvb3V0cHV0IGluZGV4ICR7aW5kZXh9IHdoZW4gZW5hYmxlR3JhcGhDYXB0dXJlIGlzIHRydWUuYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGxvY2F0aW9uID09PSBcImdwdS1idWZmZXJcIikge1xuICAgICAgY29uc3QgZ3B1QnVmZmVyID0gdGVuc29yWzJdLmdwdUJ1ZmZlcjtcbiAgICAgIGNvbnN0IGVsZW1lbnRTaXplSW5CeXRlcyA9IGdldFRlbnNvckVsZW1lbnRTaXplKHRlbnNvckRhdGFUeXBlU3RyaW5nVG9FbnVtKGRhdGFUeXBlKSk7XG4gICAgICBkYXRhQnl0ZUxlbmd0aCA9IGRpbXMucmVkdWNlKChhLCBiKSA9PiBhICogYiwgMSkgKiBlbGVtZW50U2l6ZUluQnl0ZXM7XG4gICAgICBjb25zdCByZWdpc3RlckJ1ZmZlciA9IHdhc20yLmpzZXBSZWdpc3RlckJ1ZmZlcjtcbiAgICAgIGlmICghcmVnaXN0ZXJCdWZmZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZW5zb3IgbG9jYXRpb24gXCJncHUtYnVmZmVyXCIgaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IHVzaW5nIFdlYkdQVS4nKTtcbiAgICAgIH1cbiAgICAgIHJhd0RhdGEgPSByZWdpc3RlckJ1ZmZlcihzZXNzaW9uSWQsIGluZGV4LCBncHVCdWZmZXIsIGRhdGFCeXRlTGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0YSA9IHRlbnNvclsyXTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIGRhdGFCeXRlTGVuZ3RoID0gNCAqIGRhdGEubGVuZ3RoO1xuICAgICAgICByYXdEYXRhID0gd2FzbTIuX21hbGxvYyhkYXRhQnl0ZUxlbmd0aCk7XG4gICAgICAgIGFsbG9jcy5wdXNoKHJhd0RhdGEpO1xuICAgICAgICBsZXQgZGF0YUluZGV4ID0gcmF3RGF0YSAvIDQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtpXSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgdGVuc29yIGRhdGEgYXQgaW5kZXggJHtpfSBpcyBub3QgYSBzdHJpbmdgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2FzbTIuSEVBUFUzMltkYXRhSW5kZXgrK10gPSBhbGxvY1dhc21TdHJpbmcoZGF0YVtpXSwgYWxsb2NzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YUJ5dGVMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIHJhd0RhdGEgPSB3YXNtMi5fbWFsbG9jKGRhdGFCeXRlTGVuZ3RoKTtcbiAgICAgICAgYWxsb2NzLnB1c2gocmF3RGF0YSk7XG4gICAgICAgIHdhc20yLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YUJ5dGVMZW5ndGgpLCByYXdEYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RhY2sgPSB3YXNtMi5zdGFja1NhdmUoKTtcbiAgICBjb25zdCBkaW1zT2Zmc2V0ID0gd2FzbTIuc3RhY2tBbGxvYyg0ICogZGltcy5sZW5ndGgpO1xuICAgIHRyeSB7XG4gICAgICBsZXQgZGltSW5kZXggPSBkaW1zT2Zmc2V0IC8gNDtcbiAgICAgIGRpbXMuZm9yRWFjaCgoZCkgPT4gd2FzbTIuSEVBUDMyW2RpbUluZGV4KytdID0gZCk7XG4gICAgICBjb25zdCB0ZW5zb3IyID0gd2FzbTIuX09ydENyZWF0ZVRlbnNvcihcbiAgICAgICAgdGVuc29yRGF0YVR5cGVTdHJpbmdUb0VudW0oZGF0YVR5cGUpLFxuICAgICAgICByYXdEYXRhLFxuICAgICAgICBkYXRhQnl0ZUxlbmd0aCxcbiAgICAgICAgZGltc09mZnNldCxcbiAgICAgICAgZGltcy5sZW5ndGgsXG4gICAgICAgIGRhdGFMb2NhdGlvblN0cmluZ1RvRW51bShsb2NhdGlvbilcbiAgICAgICk7XG4gICAgICBpZiAodGVuc29yMiA9PT0gMCkge1xuICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgY3JlYXRlIHRlbnNvciBmb3IgaW5wdXQvb3V0cHV0LiBzZXNzaW9uPSR7c2Vzc2lvbklkfSwgaW5kZXg9JHtpbmRleH0uYCk7XG4gICAgICB9XG4gICAgICB0ZW5zb3JIYW5kbGVzLnB1c2godGVuc29yMik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHdhc20yLnN0YWNrUmVzdG9yZShzdGFjayk7XG4gICAgfVxuICB9O1xuICB2YXIgcnVuID0gYXN5bmMgKHNlc3Npb25JZCwgaW5wdXRJbmRpY2VzLCBpbnB1dFRlbnNvcnMsIG91dHB1dEluZGljZXMsIG91dHB1dFRlbnNvcnMsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB3YXNtMiA9IGdldEluc3RhbmNlKCk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGFjdGl2ZVNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgcnVuIGluZmVyZW5jZS4gaW52YWxpZCBzZXNzaW9uIGlkOiAke3Nlc3Npb25JZH1gKTtcbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbkhhbmRsZSA9IHNlc3Npb25bMF07XG4gICAgY29uc3QgaW5wdXROYW1lc1VURjhFbmNvZGVkID0gc2Vzc2lvblsxXTtcbiAgICBjb25zdCBvdXRwdXROYW1lc1VURjhFbmNvZGVkID0gc2Vzc2lvblsyXTtcbiAgICBjb25zdCBpb0JpbmRpbmdTdGF0ZSA9IHNlc3Npb25bM107XG4gICAgY29uc3QgZW5hYmxlR3JhcGhDYXB0dXJlID0gc2Vzc2lvbls0XTtcbiAgICBjb25zdCBpbnB1dE91dHB1dEJvdW5kID0gc2Vzc2lvbls1XTtcbiAgICBjb25zdCBpbnB1dENvdW50ID0gaW5wdXRJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBvdXRwdXRDb3VudCA9IG91dHB1dEluZGljZXMubGVuZ3RoO1xuICAgIGxldCBydW5PcHRpb25zSGFuZGxlID0gMDtcbiAgICBsZXQgcnVuT3B0aW9uc0FsbG9jcyA9IFtdO1xuICAgIGNvbnN0IGlucHV0VGVuc29ySGFuZGxlcyA9IFtdO1xuICAgIGNvbnN0IG91dHB1dFRlbnNvckhhbmRsZXMgPSBbXTtcbiAgICBjb25zdCBpbnB1dE91dHB1dEFsbG9jcyA9IFtdO1xuICAgIGNvbnN0IGJlZm9yZVJ1blN0YWNrID0gd2FzbTIuc3RhY2tTYXZlKCk7XG4gICAgY29uc3QgaW5wdXRWYWx1ZXNPZmZzZXQgPSB3YXNtMi5zdGFja0FsbG9jKGlucHV0Q291bnQgKiA0KTtcbiAgICBjb25zdCBpbnB1dE5hbWVzT2Zmc2V0ID0gd2FzbTIuc3RhY2tBbGxvYyhpbnB1dENvdW50ICogNCk7XG4gICAgY29uc3Qgb3V0cHV0VmFsdWVzT2Zmc2V0ID0gd2FzbTIuc3RhY2tBbGxvYyhvdXRwdXRDb3VudCAqIDQpO1xuICAgIGNvbnN0IG91dHB1dE5hbWVzT2Zmc2V0ID0gd2FzbTIuc3RhY2tBbGxvYyhvdXRwdXRDb3VudCAqIDQpO1xuICAgIHRyeSB7XG4gICAgICBbcnVuT3B0aW9uc0hhbmRsZSwgcnVuT3B0aW9uc0FsbG9jc10gPSBzZXRSdW5PcHRpb25zKG9wdGlvbnMpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgICAgcHJlcGFyZUlucHV0T3V0cHV0VGVuc29yKFxuICAgICAgICAgIGlucHV0VGVuc29yc1tpXSxcbiAgICAgICAgICBpbnB1dFRlbnNvckhhbmRsZXMsXG4gICAgICAgICAgaW5wdXRPdXRwdXRBbGxvY3MsXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIGlucHV0SW5kaWNlc1tpXSxcbiAgICAgICAgICBlbmFibGVHcmFwaENhcHR1cmVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgICBwcmVwYXJlSW5wdXRPdXRwdXRUZW5zb3IoXG4gICAgICAgICAgb3V0cHV0VGVuc29yc1tpXSxcbiAgICAgICAgICBvdXRwdXRUZW5zb3JIYW5kbGVzLFxuICAgICAgICAgIGlucHV0T3V0cHV0QWxsb2NzLFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBpbnB1dENvdW50ICsgb3V0cHV0SW5kaWNlc1tpXSxcbiAgICAgICAgICBlbmFibGVHcmFwaENhcHR1cmVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGxldCBpbnB1dFZhbHVlc0luZGV4ID0gaW5wdXRWYWx1ZXNPZmZzZXQgLyA0O1xuICAgICAgbGV0IGlucHV0TmFtZXNJbmRleCA9IGlucHV0TmFtZXNPZmZzZXQgLyA0O1xuICAgICAgbGV0IG91dHB1dFZhbHVlc0luZGV4ID0gb3V0cHV0VmFsdWVzT2Zmc2V0IC8gNDtcbiAgICAgIGxldCBvdXRwdXROYW1lc0luZGV4ID0gb3V0cHV0TmFtZXNPZmZzZXQgLyA0O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dENvdW50OyBpKyspIHtcbiAgICAgICAgd2FzbTIuSEVBUFUzMltpbnB1dFZhbHVlc0luZGV4KytdID0gaW5wdXRUZW5zb3JIYW5kbGVzW2ldO1xuICAgICAgICB3YXNtMi5IRUFQVTMyW2lucHV0TmFtZXNJbmRleCsrXSA9IGlucHV0TmFtZXNVVEY4RW5jb2RlZFtpbnB1dEluZGljZXNbaV1dO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRDb3VudDsgaSsrKSB7XG4gICAgICAgIHdhc20yLkhFQVBVMzJbb3V0cHV0VmFsdWVzSW5kZXgrK10gPSBvdXRwdXRUZW5zb3JIYW5kbGVzW2ldO1xuICAgICAgICB3YXNtMi5IRUFQVTMyW291dHB1dE5hbWVzSW5kZXgrK10gPSBvdXRwdXROYW1lc1VURjhFbmNvZGVkW291dHB1dEluZGljZXNbaV1dO1xuICAgICAgfVxuICAgICAgaWYgKGlvQmluZGluZ1N0YXRlICYmICFpbnB1dE91dHB1dEJvdW5kKSB7XG4gICAgICAgIGNvbnN0IHsgaGFuZGxlLCBvdXRwdXRQcmVmZXJyZWRMb2NhdGlvbnMsIG91dHB1dFByZWZlcnJlZExvY2F0aW9uc0VuY29kZWQgfSA9IGlvQmluZGluZ1N0YXRlO1xuICAgICAgICBpZiAoaW5wdXROYW1lc1VURjhFbmNvZGVkLmxlbmd0aCAhPT0gaW5wdXRDb3VudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5wdXQgY291bnQgZnJvbSBmZWVkcyAoJHtpbnB1dENvdW50fSkgaXMgZXhwZWN0ZWQgdG8gYmUgYWx3YXlzIGVxdWFsIHRvIG1vZGVsJ3MgaW5wdXQgY291bnQgKCR7aW5wdXROYW1lc1VURjhFbmNvZGVkLmxlbmd0aH0pLmApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRDb3VudDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBpbnB1dEluZGljZXNbaV07XG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlMiA9IGF3YWl0IHdhc20yLl9PcnRCaW5kSW5wdXQoaGFuZGxlLCBpbnB1dE5hbWVzVVRGOEVuY29kZWRbaW5kZXhdLCBpbnB1dFRlbnNvckhhbmRsZXNbaV0pO1xuICAgICAgICAgIGlmIChlcnJvckNvZGUyICE9PSAwKSB7XG4gICAgICAgICAgICBjaGVja0xhc3RFcnJvcihgQ2FuJ3QgYmluZCBpbnB1dFske2l9XSBmb3Igc2Vzc2lvbj0ke3Nlc3Npb25JZH0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3V0cHV0SW5kaWNlc1tpXTtcbiAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IG91dHB1dFRlbnNvcnNbaV0/LlszXTtcbiAgICAgICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yQ29kZTIgPSB3YXNtMi5fT3J0QmluZE91dHB1dChoYW5kbGUsIG91dHB1dE5hbWVzVVRGOEVuY29kZWRbaW5kZXhdLCBvdXRwdXRUZW5zb3JIYW5kbGVzW2ldLCAwKTtcbiAgICAgICAgICAgIGlmIChlcnJvckNvZGUyICE9PSAwKSB7XG4gICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBiaW5kIHByZS1hbGxvY2F0ZWQgb3V0cHV0WyR7aX1dIGZvciBzZXNzaW9uPSR7c2Vzc2lvbklkfS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JDb2RlMiA9IHdhc20yLl9PcnRCaW5kT3V0cHV0KGhhbmRsZSwgb3V0cHV0TmFtZXNVVEY4RW5jb2RlZFtpbmRleF0sIDAsIG91dHB1dFByZWZlcnJlZExvY2F0aW9uc0VuY29kZWRbaW5kZXhdKTtcbiAgICAgICAgICAgIGlmIChlcnJvckNvZGUyICE9PSAwKSB7XG4gICAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBiaW5kIG91dHB1dFske2l9XSB0byAke291dHB1dFByZWZlcnJlZExvY2F0aW9uc1tpXX0gZm9yIHNlc3Npb249JHtzZXNzaW9uSWR9LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhY3RpdmVTZXNzaW9ucy5zZXQoXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIFtzZXNzaW9uSGFuZGxlLCBpbnB1dE5hbWVzVVRGOEVuY29kZWQsIG91dHB1dE5hbWVzVVRGOEVuY29kZWQsIGlvQmluZGluZ1N0YXRlLCBlbmFibGVHcmFwaENhcHR1cmUsIHRydWVdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB3YXNtMi5qc2VwT25SdW5TdGFydD8uKHNlc3Npb25IYW5kbGUpO1xuICAgICAgbGV0IGVycm9yQ29kZTtcbiAgICAgIGlmIChpb0JpbmRpbmdTdGF0ZSkge1xuICAgICAgICBlcnJvckNvZGUgPSBhd2FpdCB3YXNtMi5fT3J0UnVuV2l0aEJpbmRpbmcoXG4gICAgICAgICAgc2Vzc2lvbkhhbmRsZSxcbiAgICAgICAgICBpb0JpbmRpbmdTdGF0ZS5oYW5kbGUsXG4gICAgICAgICAgb3V0cHV0Q291bnQsXG4gICAgICAgICAgb3V0cHV0VmFsdWVzT2Zmc2V0LFxuICAgICAgICAgIHJ1bk9wdGlvbnNIYW5kbGVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yQ29kZSA9IGF3YWl0IHdhc20yLl9PcnRSdW4oXG4gICAgICAgICAgc2Vzc2lvbkhhbmRsZSxcbiAgICAgICAgICBpbnB1dE5hbWVzT2Zmc2V0LFxuICAgICAgICAgIGlucHV0VmFsdWVzT2Zmc2V0LFxuICAgICAgICAgIGlucHV0Q291bnQsXG4gICAgICAgICAgb3V0cHV0TmFtZXNPZmZzZXQsXG4gICAgICAgICAgb3V0cHV0Q291bnQsXG4gICAgICAgICAgb3V0cHV0VmFsdWVzT2Zmc2V0LFxuICAgICAgICAgIHJ1bk9wdGlvbnNIYW5kbGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChlcnJvckNvZGUgIT09IDApIHtcbiAgICAgICAgY2hlY2tMYXN0RXJyb3IoXCJmYWlsZWQgdG8gY2FsbCBPcnRSdW4oKS5cIik7XG4gICAgICB9XG4gICAgICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0Q291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCB0ZW5zb3IgPSB3YXNtMi5IRUFQVTMyW291dHB1dFZhbHVlc09mZnNldCAvIDQgKyBpXTtcbiAgICAgICAgaWYgKHRlbnNvciA9PT0gb3V0cHV0VGVuc29ySGFuZGxlc1tpXSkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKG91dHB1dFRlbnNvcnNbaV0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJlZm9yZUdldFRlbnNvckRhdGFTdGFjayA9IHdhc20yLnN0YWNrU2F2ZSgpO1xuICAgICAgICBjb25zdCB0ZW5zb3JEYXRhT2Zmc2V0ID0gd2FzbTIuc3RhY2tBbGxvYyg0ICogNCk7XG4gICAgICAgIGxldCBrZWVwT3V0cHV0VGVuc29yID0gZmFsc2U7XG4gICAgICAgIGxldCB0eXBlLCBkYXRhT2Zmc2V0ID0gMDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGUyID0gd2FzbTIuX09ydEdldFRlbnNvckRhdGEoXG4gICAgICAgICAgICB0ZW5zb3IsXG4gICAgICAgICAgICB0ZW5zb3JEYXRhT2Zmc2V0LFxuICAgICAgICAgICAgdGVuc29yRGF0YU9mZnNldCArIDQsXG4gICAgICAgICAgICB0ZW5zb3JEYXRhT2Zmc2V0ICsgOCxcbiAgICAgICAgICAgIHRlbnNvckRhdGFPZmZzZXQgKyAxMlxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGVycm9yQ29kZTIgIT09IDApIHtcbiAgICAgICAgICAgIGNoZWNrTGFzdEVycm9yKGBDYW4ndCBhY2Nlc3Mgb3V0cHV0IHRlbnNvciBkYXRhIG9uIGluZGV4ICR7aX0uYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB0ZW5zb3JEYXRhSW5kZXggPSB0ZW5zb3JEYXRhT2Zmc2V0IC8gNDtcbiAgICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHdhc20yLkhFQVBVMzJbdGVuc29yRGF0YUluZGV4KytdO1xuICAgICAgICAgIGRhdGFPZmZzZXQgPSB3YXNtMi5IRUFQVTMyW3RlbnNvckRhdGFJbmRleCsrXTtcbiAgICAgICAgICBjb25zdCBkaW1zT2Zmc2V0ID0gd2FzbTIuSEVBUFUzMlt0ZW5zb3JEYXRhSW5kZXgrK107XG4gICAgICAgICAgY29uc3QgZGltc0xlbmd0aCA9IHdhc20yLkhFQVBVMzJbdGVuc29yRGF0YUluZGV4KytdO1xuICAgICAgICAgIGNvbnN0IGRpbXMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpMiA9IDA7IGkyIDwgZGltc0xlbmd0aDsgaTIrKykge1xuICAgICAgICAgICAgZGltcy5wdXNoKHdhc20yLkhFQVBVMzJbZGltc09mZnNldCAvIDQgKyBpMl0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3YXNtMi5fT3J0RnJlZShkaW1zT2Zmc2V0KTtcbiAgICAgICAgICBjb25zdCBzaXplID0gZGltcy5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiLCAxKTtcbiAgICAgICAgICB0eXBlID0gdGVuc29yRGF0YVR5cGVFbnVtVG9TdHJpbmcoZGF0YVR5cGUpO1xuICAgICAgICAgIGNvbnN0IHByZWZlcnJlZExvY2F0aW9uID0gaW9CaW5kaW5nU3RhdGU/Lm91dHB1dFByZWZlcnJlZExvY2F0aW9uc1tvdXRwdXRJbmRpY2VzW2ldXTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKHByZWZlcnJlZExvY2F0aW9uID09PSBcImdwdS1idWZmZXJcIikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdHJpbmcgdGVuc29yIGlzIG5vdCBzdXBwb3J0ZWQgb24gR1BVLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ0RhdGEgPSBbXTtcbiAgICAgICAgICAgIGxldCBkYXRhSW5kZXggPSBkYXRhT2Zmc2V0IC8gNDtcbiAgICAgICAgICAgIGZvciAobGV0IGkyID0gMDsgaTIgPCBzaXplOyBpMisrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHdhc20yLkhFQVBVMzJbZGF0YUluZGV4KytdO1xuICAgICAgICAgICAgICBjb25zdCBtYXhCeXRlc1RvUmVhZCA9IGkyID09PSBzaXplIC0gMSA/IHZvaWQgMCA6IHdhc20yLkhFQVBVMzJbZGF0YUluZGV4XSAtIG9mZnNldDtcbiAgICAgICAgICAgICAgc3RyaW5nRGF0YS5wdXNoKHdhc20yLlVURjhUb1N0cmluZyhvZmZzZXQsIG1heEJ5dGVzVG9SZWFkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRwdXQucHVzaChbdHlwZSwgZGltcywgc3RyaW5nRGF0YSwgXCJjcHVcIl0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJlZmVycmVkTG9jYXRpb24gPT09IFwiZ3B1LWJ1ZmZlclwiICYmIHNpemUgPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGdldEJ1ZmZlciA9IHdhc20yLmpzZXBHZXRCdWZmZXI7XG4gICAgICAgICAgICAgIGlmICghZ2V0QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcmVmZXJyZWRMb2NhdGlvbiBcImdwdS1idWZmZXJcIiBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgdXNpbmcgV2ViR1BVLicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGdwdUJ1ZmZlciA9IGdldEJ1ZmZlcihkYXRhT2Zmc2V0KTtcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudFNpemUgPSBnZXRUZW5zb3JFbGVtZW50U2l6ZShkYXRhVHlwZSk7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50U2l6ZSA9PT0gdm9pZCAwIHx8ICFpc0dwdUJ1ZmZlclN1cHBvcnRlZFR5cGUodHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRhdGEgdHlwZTogJHt0eXBlfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGtlZXBPdXRwdXRUZW5zb3IgPSB0cnVlO1xuICAgICAgICAgICAgICBvdXRwdXQucHVzaChbXG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBkaW1zLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGdwdUJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB3YXNtMi5qc2VwQ3JlYXRlRG93bmxvYWRlcihncHVCdWZmZXIsIHNpemUgKiBlbGVtZW50U2l6ZSwgdHlwZSksXG4gICAgICAgICAgICAgICAgICBkaXNwb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHdhc20yLl9PcnRSZWxlYXNlVGVuc29yKHRlbnNvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImdwdS1idWZmZXJcIlxuICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHRlbnNvclR5cGVUb1R5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0eXBlKTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyB0eXBlZEFycmF5Q29uc3RydWN0b3Ioc2l6ZSk7XG4gICAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCkuc2V0KHdhc20yLkhFQVBVOC5zdWJhcnJheShkYXRhT2Zmc2V0LCBkYXRhT2Zmc2V0ICsgZGF0YS5ieXRlTGVuZ3RoKSk7XG4gICAgICAgICAgICAgIG91dHB1dC5wdXNoKFt0eXBlLCBkaW1zLCBkYXRhLCBcImNwdVwiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHdhc20yLnN0YWNrUmVzdG9yZShiZWZvcmVHZXRUZW5zb3JEYXRhU3RhY2spO1xuICAgICAgICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiICYmIGRhdGFPZmZzZXQpIHtcbiAgICAgICAgICAgIHdhc20yLl9mcmVlKGRhdGFPZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWtlZXBPdXRwdXRUZW5zb3IpIHtcbiAgICAgICAgICAgIHdhc20yLl9PcnRSZWxlYXNlVGVuc29yKHRlbnNvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW9CaW5kaW5nU3RhdGUgJiYgIWVuYWJsZUdyYXBoQ2FwdHVyZSkge1xuICAgICAgICB3YXNtMi5fT3J0Q2xlYXJCb3VuZE91dHB1dHMoaW9CaW5kaW5nU3RhdGUuaGFuZGxlKTtcbiAgICAgICAgYWN0aXZlU2Vzc2lvbnMuc2V0KFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBbc2Vzc2lvbkhhbmRsZSwgaW5wdXROYW1lc1VURjhFbmNvZGVkLCBvdXRwdXROYW1lc1VURjhFbmNvZGVkLCBpb0JpbmRpbmdTdGF0ZSwgZW5hYmxlR3JhcGhDYXB0dXJlLCBmYWxzZV1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHdhc20yLnN0YWNrUmVzdG9yZShiZWZvcmVSdW5TdGFjayk7XG4gICAgICBpbnB1dFRlbnNvckhhbmRsZXMuZm9yRWFjaCgodikgPT4gd2FzbTIuX09ydFJlbGVhc2VUZW5zb3IodikpO1xuICAgICAgb3V0cHV0VGVuc29ySGFuZGxlcy5mb3JFYWNoKCh2KSA9PiB3YXNtMi5fT3J0UmVsZWFzZVRlbnNvcih2KSk7XG4gICAgICBpbnB1dE91dHB1dEFsbG9jcy5mb3JFYWNoKChwKSA9PiB3YXNtMi5fZnJlZShwKSk7XG4gICAgICBpZiAocnVuT3B0aW9uc0hhbmRsZSAhPT0gMCkge1xuICAgICAgICB3YXNtMi5fT3J0UmVsZWFzZVJ1bk9wdGlvbnMocnVuT3B0aW9uc0hhbmRsZSk7XG4gICAgICB9XG4gICAgICBydW5PcHRpb25zQWxsb2NzLmZvckVhY2goKHApID0+IHdhc20yLl9mcmVlKHApKTtcbiAgICB9XG4gIH07XG4gIHZhciBlbmRQcm9maWxpbmcgPSAoc2Vzc2lvbklkKSA9PiB7XG4gICAgY29uc3Qgd2FzbTIgPSBnZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IHNlc3Npb24gPSBhY3RpdmVTZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgc2Vzc2lvbiBpZFwiKTtcbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbkhhbmRsZSA9IHNlc3Npb25bMF07XG4gICAgY29uc3QgcHJvZmlsZUZpbGVOYW1lID0gd2FzbTIuX09ydEVuZFByb2ZpbGluZyhzZXNzaW9uSGFuZGxlKTtcbiAgICBpZiAocHJvZmlsZUZpbGVOYW1lID09PSAwKSB7XG4gICAgICBjaGVja0xhc3RFcnJvcihcIkNhbid0IGdldCBhbiBwcm9maWxlIGZpbGUgbmFtZS5cIik7XG4gICAgfVxuICAgIHdhc20yLl9PcnRGcmVlKHByb2ZpbGVGaWxlTmFtZSk7XG4gIH07XG4gIHZhciBleHRyYWN0VHJhbnNmZXJhYmxlQnVmZmVycyA9ICh0ZW5zb3JzKSA9PiB7XG4gICAgY29uc3QgYnVmZmVycyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGVuc29yIG9mIHRlbnNvcnMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0ZW5zb3JbMl07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgJiYgXCJidWZmZXJcIiBpbiBkYXRhKSB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChkYXRhLmJ1ZmZlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBidWZmZXJzO1xuICB9O1xuXG4gIC8vIHdlYi9saWIvd2FzbS9wcm94eS13b3JrZXIvbWFpbi50c1xuICBzZWxmLm9ubWVzc2FnZSA9IChldikgPT4ge1xuICAgIGNvbnN0IHsgdHlwZSwgaW46IG1lc3NhZ2UgfSA9IGV2LmRhdGE7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiaW5pdC13YXNtXCI6XG4gICAgICAgICAgaW5pdGlhbGl6ZVdlYkFzc2VtYmx5KG1lc3NhZ2Uud2FzbSkudGhlbihcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgaW5pdFJ1bnRpbWUobWVzc2FnZSkudGhlbihcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7IHR5cGUgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7IHR5cGUsIGVyciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7IHR5cGUsIGVyciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5pdC1lcFwiOiB7XG4gICAgICAgICAgY29uc3QgeyBlcE5hbWUsIGVudjogZW52MyB9ID0gbWVzc2FnZTtcbiAgICAgICAgICBpbml0RXAoZW52MywgZXBOYW1lKS50aGVuKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7IHR5cGUgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7IHR5cGUsIGVyciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJjb3B5LWZyb21cIjoge1xuICAgICAgICAgIGNvbnN0IHsgYnVmZmVyIH0gPSBtZXNzYWdlO1xuICAgICAgICAgIGNvbnN0IGJ1ZmZlckRhdGEgPSBjb3B5RnJvbUV4dGVybmFsQnVmZmVyKGJ1ZmZlcik7XG4gICAgICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlLCBvdXQ6IGJ1ZmZlckRhdGEgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImNyZWF0ZVwiOiB7XG4gICAgICAgICAgY29uc3QgeyBtb2RlbCwgb3B0aW9ucyB9ID0gbWVzc2FnZTtcbiAgICAgICAgICBjcmVhdGVTZXNzaW9uKG1vZGVsLCBvcHRpb25zKS50aGVuKFxuICAgICAgICAgICAgKHNlc3Npb25NZXRhZGF0YSkgPT4ge1xuICAgICAgICAgICAgICBwb3N0TWVzc2FnZSh7IHR5cGUsIG91dDogc2Vzc2lvbk1ldGFkYXRhIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlLCBlcnIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmVsZWFzZVwiOlxuICAgICAgICAgIHJlbGVhc2VTZXNzaW9uKG1lc3NhZ2UpO1xuICAgICAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJ1blwiOiB7XG4gICAgICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIGlucHV0SW5kaWNlcywgaW5wdXRzLCBvdXRwdXRJbmRpY2VzLCBvcHRpb25zIH0gPSBtZXNzYWdlO1xuICAgICAgICAgIHJ1bihzZXNzaW9uSWQsIGlucHV0SW5kaWNlcywgaW5wdXRzLCBvdXRwdXRJbmRpY2VzLCBuZXcgQXJyYXkob3V0cHV0SW5kaWNlcy5sZW5ndGgpLmZpbGwobnVsbCksIG9wdGlvbnMpLnRoZW4oXG4gICAgICAgICAgICAob3V0cHV0cykgPT4ge1xuICAgICAgICAgICAgICBpZiAob3V0cHV0cy5zb21lKChvKSA9PiBvWzNdICE9PSBcImNwdVwiKSkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKHsgdHlwZSwgZXJyOiBcIlByb3h5IGRvZXMgbm90IHN1cHBvcnQgbm9uLWNwdSB0ZW5zb3IgbG9jYXRpb24uXCIgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICB7IHR5cGUsIG91dDogb3V0cHV0cyB9LFxuICAgICAgICAgICAgICAgICAgZXh0cmFjdFRyYW5zZmVyYWJsZUJ1ZmZlcnMoWy4uLmlucHV0cywgLi4ub3V0cHV0c10pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoeyB0eXBlLCBlcnIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZW5kLXByb2ZpbGluZ1wiOlxuICAgICAgICAgIGVuZFByb2ZpbGluZyhtZXNzYWdlKTtcbiAgICAgICAgICBwb3N0TWVzc2FnZSh7IHR5cGUgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBwb3N0TWVzc2FnZSh7IHR5cGUsIGVyciB9KTtcbiAgICB9XG4gIH07XG59KSgpO1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxld29nSUNKMlpYSnphVzl1SWpvZ015d0tJQ0FpYzI5MWNtTmxjeUk2SUZzaWJtOWtaV3B6TFdsbmJtOXlaVHBtY3lJc0lDSnViMlJsYW5NdGFXZHViM0psT25CaGRHZ2lMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZZbWx1WkdsdVp5OXZjblF0ZDJGemJTMXphVzFrTG1welpYQXVhbk1pTENBaWJtOWtaV3B6TFdsbmJtOXlaVHAzYjNKclpYSmZkR2h5WldGa2N5SXNJQ0p1YjJSbGFuTXRhV2R1YjNKbE9uQmxjbVpmYUc5dmEzTWlMQ0FpYm05a1pXcHpMV2xuYm05eVpUcHZjeUlzSUNJdUxpOHVMaTlzYVdJdmQyRnpiUzlpYVc1a2FXNW5MMjl5ZEMxM1lYTnRMWE5wYldRdGRHaHlaV0ZrWldRdWFuTmxjQzVxY3lJc0lDSXVMaTh1TGk5c2FXSXZkMkZ6YlM5aWFXNWthVzVuTDI5eWRDMTNZWE50TFhSb2NtVmhaR1ZrTG5kdmNtdGxjaTVxY3lJc0lDSXVMaTh1TGk5c2FXSXZkMkZ6YlM5M1lYTnRMV052YlcxdmJpNTBjeUlzSUNJdUxpOHVMaTh1TGk5amIyMXRiMjR2YkdsaUwySmhZMnRsYm1RdGFXMXdiQzUwY3lJc0lDSXVMaTh1TGk4dUxpOWpiMjF0YjI0dmJHbGlMMkpoWTJ0bGJtUXVkSE1pTENBaUxpNHZMaTR2TGk0dlkyOXRiVzl1TDJ4cFlpOTJaWEp6YVc5dUxuUnpJaXdnSWk0dUx5NHVMeTR1TDJOdmJXMXZiaTlzYVdJdlpXNTJMV2x0Y0d3dWRITWlMQ0FpTGk0dkxpNHZMaTR2WTI5dGJXOXVMMnhwWWk5bGJuWXVkSE1pTENBaUxpNHZMaTR2TGk0dlkyOXRiVzl1TDJ4cFlpOTBaVzV6YjNJdFkyOXVkbVZ5YzJsdmJpMXBiWEJzTG5Seklpd2dJaTR1THk0dUx5NHVMMk52YlcxdmJpOXNhV0l2ZEdWdWMyOXlMV1poWTNSdmNua3RhVzF3YkM1MGN5SXNJQ0l1TGk4dUxpOHVMaTlqYjIxdGIyNHZiR2xpTDNSbGJuTnZjaTFwYlhCc0xYUjVjR1V0YldGd2NHbHVaeTUwY3lJc0lDSXVMaTh1TGk4dUxpOWpiMjF0YjI0dmJHbGlMM1JsYm5OdmNpMTFkR2xzY3kxcGJYQnNMblJ6SWl3Z0lpNHVMeTR1THk0dUwyTnZiVzF2Ymk5c2FXSXZkR1Z1YzI5eUxXbHRjR3d1ZEhNaUxDQWlMaTR2TGk0dkxpNHZZMjl0Ylc5dUwyeHBZaTkwWlc1emIzSXVkSE1pTENBaUxpNHZMaTR2TGk0dlkyOXRiVzl1TDJ4cFlpOTBjbUZqWlM1MGN5SXNJQ0l1TGk4dUxpOHVMaTlqYjIxdGIyNHZiR2xpTDJsdVptVnlaVzVqWlMxelpYTnphVzl1TFdsdGNHd3VkSE1pTENBaUxpNHZMaTR2TGk0dlkyOXRiVzl1TDJ4cFlpOXBibVpsY21WdVkyVXRjMlZ6YzJsdmJpNTBjeUlzSUNJdUxpOHVMaTh1TGk5amIyMXRiMjR2YkdsaUwzUmxibk52Y2kxamIyNTJaWEp6YVc5dUxuUnpJaXdnSWk0dUx5NHVMeTR1TDJOdmJXMXZiaTlzYVdJdmRHVnVjMjl5TFdaaFkzUnZjbmt1ZEhNaUxDQWlMaTR2TGk0dkxpNHZZMjl0Ylc5dUwyeHBZaTl2Ym01NExXMXZaR1ZzTG5Seklpd2dJaTR1THk0dUx5NHVMMk52YlcxdmJpOXNhV0l2YjI1dWVDMTJZV3gxWlM1MGN5SXNJQ0l1TGk4dUxpOHVMaTlqYjIxdGIyNHZiR2xpTDNSeVlXbHVhVzVuTFhObGMzTnBiMjR0YVcxd2JDNTBjeUlzSUNJdUxpOHVMaTh1TGk5amIyMXRiMjR2YkdsaUwzUnlZV2x1YVc1bkxYTmxjM05wYjI0dWRITWlMQ0FpTGk0dkxpNHZMaTR2WTI5dGJXOXVMMnhwWWk5cGJtUmxlQzUwY3lJc0lDSXVMaTh1TGk5c2FXSXZkMkZ6YlM5cWMyVndMMnh2Wnk1MGN5SXNJQ0l1TGk4dUxpOXNhV0l2ZDJGemJTOXFjMlZ3TDNSbGJuTnZjaTEyYVdWM0xuUnpJaXdnSWk0dUx5NHVMMnhwWWk5M1lYTnRMMnB6WlhBdmQyVmlaM0IxTDNSNWNHVnpMblJ6SWl3Z0lpNHVMeTR1TDJ4cFlpOTNZWE50TDJwelpYQXZkMlZpWjNCMUwyZHdkUzFrWVhSaExXMWhibUZuWlhJdWRITWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZhbk5sY0M5M1pXSm5jSFV2WVhSMGNtbGlkWFJsTFhkcGRHZ3RZMkZqYUdVdGEyVjVMblJ6SWl3Z0lpNHVMeTR1TDJ4cFlpOTNZWE50TDJwelpYQXZkWFJwYkM1MGN5SXNJQ0l1TGk4dUxpOXNhV0l2ZDJGemJTOXFjMlZ3TDNkbFltZHdkUzl2Y0hNdlkyOXRiVzl1TG5Seklpd2dJaTR1THk0dUwyeHBZaTkzWVhOdEwycHpaWEF2ZDJWaVozQjFMMjl3Y3k5MGNtRnVjM0J2YzJVdWRITWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZhbk5sY0M5M1pXSm5jSFV2YjNCekwzSmxaSFZqWlMxemFHRnlaV1F1ZEhNaUxDQWlMaTR2TGk0dmJHbGlMM2RoYzIwdmFuTmxjQzkzWldKbmNIVXZiM0J6TDNKbFpIVmpaUzUwY3lJc0lDSXVMaTh1TGk5c2FXSXZkMkZ6YlM5cWMyVndMM2RsWW1kd2RTOXZjSE12WVhKbmJXbHViV0Y0TG5Seklpd2dJaTR1THk0dUwyeHBZaTkzWVhOdEwycHpaWEF2ZDJWaVozQjFMMjl3Y3k5amIyNWpZWFF1ZEhNaUxDQWlMaTR2TGk0dmJHbGlMM2RoYzIwdmFuTmxjQzkzWldKbmNIVXZiM0J6TDJGMGRHVnVkR2x2Ymk1MGN5SXNJQ0l1TGk4dUxpOXNhV0l2ZDJGemJTOXFjMlZ3TDNkbFltZHdkUzl2Y0hNdlltRjBZMmd0Ym05eWJTNTBjeUlzSUNJdUxpOHVMaTlzYVdJdmQyRnpiUzlxYzJWd0wzZGxZbWR3ZFM5dmNITXZZbWxoY3kxaFpHUXVkSE1pTENBaUxpNHZMaTR2YkdsaUwzZGhjMjB2YW5ObGNDOTNaV0puY0hVdmIzQnpMM1Z1WVhKNUxXOXdMblJ6SWl3Z0lpNHVMeTR1TDJ4cFlpOTNZWE50TDJwelpYQXZkMlZpWjNCMUwyOXdjeTlpYVdGekxYTndiR2wwTFdkbGJIVXVkSE1pTENBaUxpNHZMaTR2YkdsaUwzZGhjMjB2YW5ObGNDOTNaV0puY0hVdmIzQnpMMkpwYm1GeWVTMXZjQzUwY3lJc0lDSXVMaTh1TGk5c2FXSXZkMkZ6YlM5cWMyVndMM2RsWW1kd2RTOXZjSE12Wm5WelpTMTFkR2xzY3k1MGN5SXNJQ0l1TGk4dUxpOXNhV0l2ZDJGemJTOXFjMlZ3TDNkbFltZHdkUzl2Y0hNdk0zSmtMWEJoY25SNUwyRmpkR2wyWVhScGIyNWZkWFJwYkM1MGN5SXNJQ0l1TGk4dUxpOXNhV0l2ZDJGemJTOXFjMlZ3TDNkbFltZHdkUzl2Y0hNdk0zSmtMWEJoY25SNUwyTnZiblpmZFhScGJDNTBjeUlzSUNJdUxpOHVMaTlzYVdJdmQyRnpiUzlxYzJWd0wzZGxZbWR3ZFM5dmNITXZNM0prTFhCaGNuUjVMMjFoZEcxMWJGOXdZV05yWldSZmQyVmlaM0IxTG5Seklpd2dJaTR1THk0dUwyeHBZaTkzWVhOdEwycHpaWEF2ZDJWaVozQjFMMjl3Y3k4emNtUXRjR0Z5ZEhrdlkyOXVkakprWDIxdFgzZGxZbWR3ZFM1MGN5SXNJQ0l1TGk4dUxpOXNhV0l2ZDJGemJTOXFjMlZ3TDNkbFltZHdkUzl2Y0hNdlkyOXVkaTFuY205MWNHVmtMblJ6SWl3Z0lpNHVMeTR1TDJ4cFlpOTNZWE50TDJwelpYQXZkMlZpWjNCMUwyOXdjeTl0WVhSdGRXd3VkSE1pTENBaUxpNHZMaTR2YkdsaUwzZGhjMjB2YW5ObGNDOTNaV0puY0hVdmIzQnpMMk52Ym5ZdWRITWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZhbk5sY0M5M1pXSm5jSFV2YjNCekx6TnlaQzF3WVhKMGVTOWpiMjUyWDJKaFkydHdjbTl3WDIxdFgzZGxZbWR3ZFM1MGN5SXNJQ0l1TGk4dUxpOXNhV0l2ZDJGemJTOXFjMlZ3TDNkbFltZHdkUzl2Y0hNdk0zSmtMWEJoY25SNUwyTnZiblpmWW1GamEzQnliM0JmZDJWaVozQjFMblJ6SWl3Z0lpNHVMeTR1TDJ4cFlpOTNZWE50TDJwelpYQXZkMlZpWjNCMUwyOXdjeTlqYjI1MkxYUnlZVzV6Y0c5elpTNTBjeUlzSUNJdUxpOHVMaTlzYVdJdmQyRnpiUzlxYzJWd0wzZGxZbWR3ZFM5dmNITXZZM1Z0YzNWdExuUnpJaXdnSWk0dUx5NHVMMnhwWWk5M1lYTnRMMnB6WlhBdmQyVmlaM0IxTDI5d2N5OWtaWEIwYUMxMGJ5MXpjR0ZqWlM1MGN5SXNJQ0l1TGk4dUxpOXNhV0l2ZDJGemJTOXFjMlZ3TDNkbFltZHdkUzl2Y0hNdlpXbHVjM1Z0TG5Seklpd2dJaTR1THk0dUwyeHBZaTkzWVhOdEwycHpaWEF2ZDJWaVozQjFMMjl3Y3k5bGVIQmhibVF1ZEhNaUxDQWlMaTR2TGk0dmJHbGlMM2RoYzIwdmFuTmxjQzkzWldKbmNIVXZiM0J6TDJaaGMzUXRaMlZzZFM1MGN5SXNJQ0l1TGk4dUxpOXNhV0l2ZDJGemJTOXFjMlZ3TDNkbFltZHdkUzl2Y0hNdloyRjBhR1Z5TG5Seklpd2dJaTR1THk0dUwyeHBZaTkzWVhOdEwycHpaWEF2ZDJWaVozQjFMMjl3Y3k5bllYUm9aWEl0Wld4bGJXVnVkSE11ZEhNaUxDQWlMaTR2TGk0dmJHbGlMM2RoYzIwdmFuTmxjQzkzWldKbmNIVXZiM0J6TDJkbGJXMHVkSE1pTENBaUxpNHZMaTR2YkdsaUwzZGhjMjB2YW5ObGNDOTNaV0puY0hVdmIzQnpMMmx1YzNSaGJtTmxMVzV2Y20wdWRITWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZhbk5sY0M5M1pXSm5jSFV2YjNCekwyeGhlV1Z5TFc1dmNtMHVkSE1pTENBaUxpNHZMaTR2YkdsaUwzZGhjMjB2YW5ObGNDOTNaV0puY0hVdmIzQnpMMjFoZEcxMWJHNWlhWFJ6TG5Seklpd2dJaTR1THk0dUwyeHBZaTkzWVhOdEwycHpaWEF2ZDJWaVozQjFMMjl3Y3k5dGRXeDBhV2hsWVdRdFlYUjBaVzUwYVdsdmJpNTBjeUlzSUNJdUxpOHVMaTlzYVdJdmQyRnpiUzlxYzJWd0wzZGxZbWR3ZFM5dmNITXZjR0ZrTG5Seklpd2dJaTR1THk0dUwyeHBZaTkzWVhOdEwycHpaWEF2ZDJWaVozQjFMMjl3Y3k5d2IyOXNMblJ6SWl3Z0lpNHVMeTR1TDJ4cFlpOTNZWE50TDJwelpYQXZkMlZpWjNCMUwyOXdjeTl5WVc1blpTNTBjeUlzSUNJdUxpOHVMaTlzYVdJdmQyRnpiUzlxYzJWd0wzZGxZbWR3ZFM5dmNITXZjbVZ6YVhwbExuUnpJaXdnSWk0dUx5NHVMMnhwWWk5M1lYTnRMMnB6WlhBdmQyVmlaM0IxTDI5d2N5OXliM1JoY25rdFpXMWlaV1JrYVc1bkxuUnpJaXdnSWk0dUx5NHVMMnhwWWk5M1lYTnRMMnB6WlhBdmQyVmlaM0IxTDI5d2N5OXphMmx3TFd4aGVXVnlMVzV2Y20wdWRITWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZhbk5sY0M5M1pXSm5jSFV2YjNCekwzTnNhV05sTG5Seklpd2dJaTR1THk0dUwyeHBZaTkzWVhOdEwycHpaWEF2ZDJWaVozQjFMMjl3Y3k5emIyWjBiV0Y0TG5Seklpd2dJaTR1THk0dUwyeHBZaTkzWVhOdEwycHpaWEF2ZDJWaVozQjFMMjl3Y3k5emNHeHBkQzUwY3lJc0lDSXVMaTh1TGk5c2FXSXZkMkZ6YlM5cWMyVndMM2RsWW1kd2RTOXZjSE12ZEdsc1pTNTBjeUlzSUNJdUxpOHVMaTlzYVdJdmQyRnpiUzlxYzJWd0wzZGxZbWR3ZFM5dmNITXZkMmhsY21VdWRITWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZhbk5sY0M5M1pXSm5jSFV2YjNBdGNtVnpiMngyWlMxeWRXeGxjeTUwY3lJc0lDSXVMaTh1TGk5c2FXSXZkMkZ6YlM5cWMyVndMM2RsWW1kd2RTOXdjbTluY21GdExXMWhibUZuWlhJdWRITWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZhbk5sY0M5aVlXTnJaVzVrTFhkbFltZHdkUzUwY3lJc0lDSXVMaTh1TGk5c2FXSXZkMkZ6YlM5cWMyVndMMmx1YVhRdWRITWlMQ0FpYm05a1pXcHpMV2xuYm05eVpUcHViMlJsT25CaGRHZ2lMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZkMkZ6YlMxbVlXTjBiM0o1TG5Seklpd2dJaTR1THk0dUwyeHBZaTkzWVhOdEwzZGhjMjB0ZFhScGJITXVkSE1pTENBaUxpNHZMaTR2YkdsaUwzZGhjMjB2Y25WdUxXOXdkR2x2Ym5NdWRITWlMQ0FpTGk0dkxpNHZiR2xpTDNkaGMyMHZjMlZ6YzJsdmJpMXZjSFJwYjI1ekxuUnpJaXdnSWk0dUx5NHVMMnhwWWk5M1lYTnRMM2RoYzIwdFkyOXlaUzFwYlhCc0xuUnpJaXdnSWk0dUx5NHVMMnhwWWk5M1lYTnRMM2RoYzIwdGRYUnBiSE10Ykc5aFpDMW1hV3hsTG5Seklpd2dJbTV2WkdWcWN5MXBaMjV2Y21VNmJtOWtaVHBtY3k5d2NtOXRhWE5sY3lJc0lDSXVMaTh1TGk5c2FXSXZkMkZ6YlM5d2NtOTRlUzEzYjNKclpYSXZiV0ZwYmk1MGN5SmRMQW9nSUNKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2SUZzaVpYaHdiM0owSUdOdmJuTjBJSEpsWVdSR2FXeGxJRDBnZFc1a1pXWnBibVZrTzJWNGNHOXlkQ0JqYjI1emRDQnlaV0ZrUm1sc1pWTjVibU1nUFNCMWJtUmxabWx1WldRN1pYaHdiM0owSUdOdmJuTjBJR055WldGMFpWSmxZV1JUZEhKbFlXMGdQU0IxYm1SbFptbHVaV1E3SWl3Z0ltVjRjRzl5ZENCamIyNXpkQ0JxYjJsdUlEMGdkVzVrWldacGJtVmtPeUlzSUNKY2JuWmhjaUJ2Y25SWFlYTnRJRDBnS0NncElEMCtJSHRjYmlBZ2RtRnlJRjl6WTNKcGNIUkVhWElnUFNCMGVYQmxiMllnWkc5amRXMWxiblFnSVQwZ0ozVnVaR1ZtYVc1bFpDY2dQeUJrYjJOMWJXVnVkQzVqZFhKeVpXNTBVMk55YVhCMFB5NXpjbU1nT2lCMWJtUmxabWx1WldRN1hHNGdJR2xtSUNoMGVYQmxiMllnWDE5bWFXeGxibUZ0WlNBaFBTQW5kVzVrWldacGJtVmtKeWtnWDNOamNtbHdkRVJwY2lCOGZEMGdYMTltYVd4bGJtRnRaVHRjYmlBZ2NtVjBkWEp1SUNoY2JtWjFibU4wYVc5dUtHMXZaSFZzWlVGeVp5QTlJSHQ5S1NCN1hHNWNiblpoY2lCblBXMXZaSFZzWlVGeVp5eGhZU3hpWVN4eVpXRmtlVkJ5YjIxcGMyVTlibVYzSUZCeWIyMXBjMlVvS0dFc1lpazlQbnRoWVQxaE8ySmhQV0o5S1R0Y0luVnpaU0J6ZEhKcFkzUmNJanRuTG0xdmRXNTBSWGgwWlhKdVlXeEVZWFJoUFNoaExHSXBQVDU3S0djdVVHaDhmQ2huTGxCb1BXNWxkeUJOWVhBcEtTNXpaWFFvWVN4aUtYMDdaeTUxYm0xdmRXNTBSWGgwWlhKdVlXeEVZWFJoUFNncFBUNTdaR1ZzWlhSbElHY3VVR2g5TzF4dWJHVjBJR1JoUFNncFBUNTdZMjl1YzNRZ1lUMG9ZeXhrTEdVcFBUNG9MaTR1WmlrOVBudGpiMjV6ZENCb1BYUXNhejFrUHk0b0tUdG1QV01vTGk0dVppazdZMjl1YzNRZ2JEMWtQeTRvS1R0cklUMDliQ1ltS0dNOWJDeGxLR3NwTEdROVpUMXVkV3hzS1R0eVpYUjFjbTRnZENFOWFEOWpZU2dwT21aOUxHSTlZejArWVhONWJtTW9MaTR1WkNrOVBudDBjbmw3YVdZb1p5NVBhQ2wwYUhKdmR5QkZjbkp2Y2loY0lsTmxjM05wYjI0Z1lXeHlaV0ZrZVNCemRHRnlkR1ZrWENJcE8yTnZibk4wSUdVOVp5NVBhRDE3WjJrNlpGc3dYU3hsY25KdmNuTTZXMTE5TEdZOVlYZGhhWFFnWXlndUxpNWtLVHRwWmlobkxrOW9JVDA5WlNsMGFISnZkeUJGY25KdmNpaGNJbE5sYzNOcGIyNGdiV2x6YldGMFkyaGNJaWs3Wnk1VmFEOHVabXgxYzJnb0tUdGpiMjV6ZENCb1BXVXVaWEp5YjNKek8ybG1LREE4YUM1c1pXNW5kR2dwZTJ4bGRDQnJQV0YzWVdsMElGQnliMjFwYzJVdVlXeHNLR2dwTzJzOWF5NW1hV3gwWlhJb2JEMCtiQ2s3YVdZb01EeHJMbXhsYm1kMGFDbDBhSEp2ZHlCRmNuSnZjaWhyTG1wdmFXNG9YQ0pjWEc1Y0lpa3BPMzF5WlhSMWNtNGdabjFtYVc1aGJHeDVlMmN1VDJnOWJuVnNiSDE5TzJjdVgwOXlkRU55WldGMFpWTmxjM05wYjI0OVlTaG5MbDlQY25SRGNtVmhkR1ZUWlhOemFXOXVMQ2dwUFQ1bkxsOVBjblJEY21WaGRHVlRaWE56YVc5dUxGeHVZejArWnk1ZlQzSjBRM0psWVhSbFUyVnpjMmx2YmoxaktUdG5MbDlQY25SU2RXNDlZaWhoS0djdVgwOXlkRkoxYml3b0tUMCtaeTVmVDNKMFVuVnVMR005UG1jdVgwOXlkRkoxYmoxaktTazdaeTVmVDNKMFVuVnVWMmwwYUVKcGJtUnBibWM5WWloaEtHY3VYMDl5ZEZKMWJsZHBkR2hDYVc1a2FXNW5MQ2dwUFQ1bkxsOVBjblJTZFc1WGFYUm9RbWx1WkdsdVp5eGpQVDVuTGw5UGNuUlNkVzVYYVhSb1FtbHVaR2x1WnoxaktTazdaeTVmVDNKMFFtbHVaRWx1Y0hWMFBXRW9aeTVmVDNKMFFtbHVaRWx1Y0hWMExDZ3BQVDVuTGw5UGNuUkNhVzVrU1c1d2RYUXNZejArWnk1ZlQzSjBRbWx1WkVsdWNIVjBQV01wTzJSaFBYWnZhV1FnTUgwN1hHNW5MbXB6WlhCSmJtbDBQU2hoTEdJcFBUNTdaR0UvTGlncE8ybG1LRndpZDJWaVozQjFYQ0k5UFQxaEtYdGJaeTVWYUN4bkxscG9MR2N1WTJrc1p5NVdhQ3huTG1KcExHY3VhbVVzWnk1a2FTeG5MbVpwTEdjdUpHZ3NaeTVoYVN4bkxtVnBYVDFpTzJOdmJuTjBJR005Wnk1VmFEdG5MbXB6WlhCU1pXZHBjM1JsY2tKMVptWmxjajBvWkN4bExHWXNhQ2s5UG1NdWNtVm5hWE4wWlhKQ2RXWm1aWElvWkN4bExHWXNhQ2s3Wnk1cWMyVndSMlYwUW5WbVptVnlQV1E5UG1NdVoyVjBRblZtWm1WeUtHUXBPMmN1YW5ObGNFTnlaV0YwWlVSdmQyNXNiMkZrWlhJOUtHUXNaU3htS1QwK1l5NWpjbVZoZEdWRWIzZHViRzloWkdWeUtHUXNaU3htS1R0bkxtcHpaWEJQYmxKbGJHVmhjMlZUWlhOemFXOXVQV1E5UG50akxtOXVVbVZzWldGelpWTmxjM05wYjI0b1pDbDlPMmN1YW5ObGNFOXVVblZ1VTNSaGNuUTlaRDArWXk1dmJsSjFibE4wWVhKMEtHUXBmWDA3WEc1MllYSWdaV0U5VDJKcVpXTjBMbUZ6YzJsbmJpaDdmU3huS1N4bVlUMWNJaTR2ZEdocGN5NXdjbTluY21GdFhDSXNhR0U5S0dFc1lpazlQbnQwYUhKdmR5QmlPMzBzYVdFOVhDSnZZbXBsWTNSY0lqMDlkSGx3Wlc5bUlIZHBibVJ2ZHl4cVlUMWNJbVoxYm1OMGFXOXVYQ0k5UFhSNWNHVnZaaUJwYlhCdmNuUlRZM0pwY0hSekxHdGhQVndpYjJKcVpXTjBYQ0k5UFhSNWNHVnZaaUJ3Y205alpYTnpKaVpjSW05aWFtVmpkRndpUFQxMGVYQmxiMllnY0hKdlkyVnpjeTUyWlhKemFXOXVjeVltWENKemRISnBibWRjSWowOWRIbHdaVzltSUhCeWIyTmxjM011ZG1WeWMybHZibk11Ym05a1pTeDJQVndpWENJc2JHRXNiV0VzYm1FN1hHNXBaaWhyWVNsN2RtRnlJR1p6UFhKbGNYVnBjbVVvWENKbWMxd2lLU3h2WVQxeVpYRjFhWEpsS0Z3aWNHRjBhRndpS1R0MlBXcGhQMjloTG1ScGNtNWhiV1VvZGlrclhDSXZYQ0k2WDE5a2FYSnVZVzFsSzF3aUwxd2lPMnhoUFNoaExHSXBQVDU3WVQxd1lTaGhLVDl1WlhjZ1ZWSk1LR0VwT205aExtNXZjbTFoYkdsNlpTaGhLVHR5WlhSMWNtNGdabk11Y21WaFpFWnBiR1ZUZVc1aktHRXNZajkyYjJsa0lEQTZYQ0oxZEdZNFhDSXBmVHR1WVQxaFBUNTdZVDFzWVNoaExDRXdLVHRoTG1KMVptWmxjbng4S0dFOWJtVjNJRlZwYm5RNFFYSnlZWGtvWVNrcE8zSmxkSFZ5YmlCaGZUdHRZVDBvWVN4aUxHTXNaRDBoTUNrOVBudGhQWEJoS0dFcFAyNWxkeUJWVWt3b1lTazZiMkV1Ym05eWJXRnNhWHBsS0dFcE8yWnpMbkpsWVdSR2FXeGxLR0VzWkQ5MmIybGtJREE2WENKMWRHWTRYQ0lzS0dVc1ppazlQbnRsUDJNb1pTazZZaWhrUDJZdVluVm1abVZ5T21ZcGZTbDlPeUZuTG5Sb2FYTlFjbTluY21GdEppWXhQSEJ5YjJObGMzTXVZWEpuZGk1c1pXNW5kR2dtSmlobVlUMXdjbTlqWlhOekxtRnlaM1piTVYwdWNtVndiR0ZqWlNndlhGeGNYQzluTEZ3aUwxd2lLU2s3Y0hKdlkyVnpjeTVoY21kMkxuTnNhV05sS0RJcE8yaGhQU2hoTEdJcFBUNTdjSEp2WTJWemN5NWxlR2wwUTI5a1pUMWhPM1JvY205M0lHSTdmWDFsYkhObElHbG1LR2xoZkh4Y2JtcGhLV3BoUDNZOWMyVnNaaTVzYjJOaGRHbHZiaTVvY21WbU9sd2lkVzVrWldacGJtVmtYQ0loUFhSNWNHVnZaaUJrYjJOMWJXVnVkQ1ltWkc5amRXMWxiblF1WTNWeWNtVnVkRk5qY21sd2RDWW1LSFk5Wkc5amRXMWxiblF1WTNWeWNtVnVkRk5qY21sd2RDNXpjbU1wTEY5elkzSnBjSFJFYVhJbUppaDJQVjl6WTNKcGNIUkVhWElwTEhZdWMzUmhjblJ6VjJsMGFDaGNJbUpzYjJJNlhDSXBQM1k5WENKY0lqcDJQWFl1YzNWaWMzUnlLREFzZGk1eVpYQnNZV05sS0M5YlB5TmRMaW92TEZ3aVhDSXBMbXhoYzNSSmJtUmxlRTltS0Z3aUwxd2lLU3N4S1N4c1lUMWhQVDU3ZG1GeUlHSTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBPMkl1YjNCbGJpaGNJa2RGVkZ3aUxHRXNJVEVwTzJJdWMyVnVaQ2h1ZFd4c0tUdHlaWFIxY200Z1lpNXlaWE53YjI1elpWUmxlSFI5TEdwaEppWW9ibUU5WVQwK2UzWmhjaUJpUFc1bGR5QllUVXhJZEhSd1VtVnhkV1Z6ZER0aUxtOXdaVzRvWENKSFJWUmNJaXhoTENFeEtUdGlMbkpsYzNCdmJuTmxWSGx3WlQxY0ltRnljbUY1WW5WbVptVnlYQ0k3WWk1elpXNWtLRzUxYkd3cE8zSmxkSFZ5YmlCdVpYY2dWV2x1ZERoQmNuSmhlU2hpTG5KbGMzQnZibk5sS1gwcExHMWhQU2hoTEdJc1l5azlQbnQyWVhJZ1pEMXVaWGNnV0UxTVNIUjBjRkpsY1hWbGMzUTdaQzV2Y0dWdUtGd2lSMFZVWENJc1lTd2hNQ2s3WkM1eVpYTndiMjV6WlZSNWNHVTlYRzVjSW1GeWNtRjVZblZtWm1WeVhDSTdaQzV2Ym14dllXUTlLQ2s5UG5zeU1EQTlQV1F1YzNSaGRIVnpmSHd3UFQxa0xuTjBZWFIxY3lZbVpDNXlaWE53YjI1elpUOWlLR1F1Y21WemNHOXVjMlVwT21Nb0tYMDdaQzV2Ym1WeWNtOXlQV003WkM1elpXNWtLRzUxYkd3cGZUdDJZWElnY1dFOVkyOXVjMjlzWlM1c2IyY3VZbWx1WkNoamIyNXpiMnhsS1N4M1BXTnZibk52YkdVdVpYSnliM0l1WW1sdVpDaGpiMjV6YjJ4bEtUdFBZbXBsWTNRdVlYTnphV2R1S0djc1pXRXBPMlZoUFc1MWJHdzdkbUZ5SUhKaExIZzlJVEVzYzJFc2VpeEZMSFJoTEhWaExFY3NTU3gyWVN4M1lTeDRZU3g1WVR0Y2JtWjFibU4wYVc5dUlIcGhLQ2w3ZG1GeUlHRTljbUV1WW5WbVptVnlPMmN1U0VWQlVEZzllajF1WlhjZ1NXNTBPRUZ5Y21GNUtHRXBPMmN1U0VWQlVERTJQWFJoUFc1bGR5QkpiblF4TmtGeWNtRjVLR0VwTzJjdVNFVkJVRlU0UFVVOWJtVjNJRlZwYm5RNFFYSnlZWGtvWVNrN1p5NUlSVUZRVlRFMlBYVmhQVzVsZHlCVmFXNTBNVFpCY25KaGVTaGhLVHRuTGtoRlFWQXpNajFIUFc1bGR5QkpiblF6TWtGeWNtRjVLR0VwTzJjdVNFVkJVRlV6TWoxSlBXNWxkeUJWYVc1ME16SkJjbkpoZVNoaEtUdG5Ma2hGUVZCR016STlkbUU5Ym1WM0lFWnNiMkYwTXpKQmNuSmhlU2hoS1R0bkxraEZRVkJHTmpROWVXRTlibVYzSUVac2IyRjBOalJCY25KaGVTaGhLVHRuTGtoRlFWQTJORDEzWVQxdVpYY2dRbWxuU1c1ME5qUkJjbkpoZVNoaEtUdG5Ma2hGUVZCVk5qUTllR0U5Ym1WM0lFSnBaMVZwYm5RMk5FRnljbUY1S0dFcGZYWmhjaUJCWVQxYlhTeENZVDFiWFN4RFlUMWJYU3hFWVQwd0xFVmhQVzUxYkd3c1JtRTliblZzYkR0Y2JtWjFibU4wYVc5dUlFZGhLR0VwZTJFOVhDSkJZbTl5ZEdWa0tGd2lLMkVyWENJcFhDSTdkeWhoS1R0NFBTRXdPM05oUFRFN1lUMXVaWGNnVjJWaVFYTnpaVzFpYkhrdVVuVnVkR2x0WlVWeWNtOXlLR0VyWENJdUlFSjFhV3hrSUhkcGRHZ2dMWE5CVTFORlVsUkpUMDVUSUdadmNpQnRiM0psSUdsdVptOHVYQ0lwTzJKaEtHRXBPM1JvY205M0lHRTdmWFpoY2lCSVlUMWhQVDVoTG5OMFlYSjBjMWRwZEdnb1hDSmtZWFJoT21Gd2NHeHBZMkYwYVc5dUwyOWpkR1YwTFhOMGNtVmhiVHRpWVhObE5qUXNYQ0lwTEhCaFBXRTlQbUV1YzNSaGNuUnpWMmwwYUNoY0ltWnBiR1U2THk5Y0lpa3NTV0U3U1dFOVhDSnZjblF0ZDJGemJTMXphVzFrTG5kaGMyMWNJanRwWmlnaFNHRW9TV0VwS1h0MllYSWdTbUU5U1dFN1NXRTlaeTVzYjJOaGRHVkdhV3hsUDJjdWJHOWpZWFJsUm1sc1pTaEtZU3gyS1RwMkswcGhmV1oxYm1OMGFXOXVJRXRoS0dFcGUybG1LRzVoS1hKbGRIVnliaUJ1WVNoaEtUdDBhSEp2ZDF3aVltOTBhQ0JoYzNsdVl5QmhibVFnYzNsdVl5Qm1aWFJqYUdsdVp5QnZaaUIwYUdVZ2QyRnpiU0JtWVdsc1pXUmNJanQ5WEc1bWRXNWpkR2x2YmlCTVlTaGhLWHRwWmlocFlYeDhhbUVwZTJsbUtGd2lablZ1WTNScGIyNWNJajA5ZEhsd1pXOW1JR1psZEdOb0ppWWhjR0VvWVNrcGNtVjBkWEp1SUdabGRHTm9LR0VzZTJOeVpXUmxiblJwWVd4ek9sd2ljMkZ0WlMxdmNtbG5hVzVjSW4wcExuUm9aVzRvWWowK2UybG1LQ0ZpTG05cktYUm9jbTkzWUdaaGFXeGxaQ0IwYnlCc2IyRmtJSGRoYzIwZ1ltbHVZWEo1SUdacGJHVWdZWFFnSnlSN1lYMG5ZRHR5WlhSMWNtNGdZaTVoY25KaGVVSjFabVpsY2lncGZTa3VZMkYwWTJnb0tDazlQa3RoS0dFcEtUdHBaaWh0WVNseVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tHSXNZeWs5UG50dFlTaGhMR1E5UG1Jb2JtVjNJRlZwYm5RNFFYSnlZWGtvWkNrcExHTXBmU2w5Y21WMGRYSnVJRkJ5YjIxcGMyVXVjbVZ6YjJ4MlpTZ3BMblJvWlc0b0tDazlQa3RoS0dFcEtYMW1kVzVqZEdsdmJpQk5ZU2hoTEdJc1l5bDdjbVYwZFhKdUlFeGhLR0VwTG5Sb1pXNG9aRDArVjJWaVFYTnpaVzFpYkhrdWFXNXpkR0Z1ZEdsaGRHVW9aQ3hpS1NrdWRHaGxiaWhqTEdROVBudDNLR0JtWVdsc1pXUWdkRzhnWVhONWJtTm9jbTl1YjNWemJIa2djSEpsY0dGeVpTQjNZWE50T2lBa2UyUjlZQ2s3UjJFb1pDbDlLWDFjYm1aMWJtTjBhVzl1SUU1aEtHRXNZaWw3ZG1GeUlHTTlTV0U3Y21WMGRYSnVYQ0ptZFc1amRHbHZibHdpSVQxMGVYQmxiMllnVjJWaVFYTnpaVzFpYkhrdWFXNXpkR0Z1ZEdsaGRHVlRkSEpsWVcxcGJtZDhmRWhoS0dNcGZIeHdZU2hqS1h4OGEyRjhmRndpWm5WdVkzUnBiMjVjSWlFOWRIbHdaVzltSUdabGRHTm9QMDFoS0dNc1lTeGlLVHBtWlhSamFDaGpMSHRqY21Wa1pXNTBhV0ZzY3pwY0luTmhiV1V0YjNKcFoybHVYQ0o5S1M1MGFHVnVLR1E5UGxkbFlrRnpjMlZ0WW14NUxtbHVjM1JoYm5ScFlYUmxVM1J5WldGdGFXNW5LR1FzWVNrdWRHaGxiaWhpTEdaMWJtTjBhVzl1S0dVcGUzY29ZSGRoYzIwZ2MzUnlaV0Z0YVc1bklHTnZiWEJwYkdVZ1ptRnBiR1ZrT2lBa2UyVjlZQ2s3ZHloY0ltWmhiR3hwYm1jZ1ltRmpheUIwYnlCQmNuSmhlVUoxWm1abGNpQnBibk4wWVc1MGFXRjBhVzl1WENJcE8zSmxkSFZ5YmlCTllTaGpMR0VzWWlsOUtTbDlYRzUyWVhJZ1QyRTllekV5TmpFMU1EUTZLR0VzWWl4akxHUXBQVDU3YVdZb1hDSjFibVJsWm1sdVpXUmNJajA5ZEhsd1pXOW1JR2Q4ZkNGbkxsQm9LWEpsZEhWeWJpQXhPMkU5U2loaFBqNCtNQ2s3WVM1emRHRnlkSE5YYVhSb0tGd2lMaTljSWlrbUppaGhQV0V1YzNWaWMzUnlhVzVuS0RJcEtUdGhQV2N1VUdndVoyVjBLR0VwTzJsbUtDRmhLWEpsZEhWeWJpQXlPMkkrUGo0OU1EdGpQajQrUFRBN2FXWW9ZaXRqUG1FdVlubDBaVXhsYm1kMGFDbHlaWFIxY200Z016dDBjbmw3Y21WMGRYSnVJRVV1YzJWMEtHRXVjM1ZpWVhKeVlYa29ZaXhpSzJNcExHUStQajR3UGo0K01Da3NNSDFqWVhSamFIdHlaWFIxY200Z05IMTlMREV5TmpJd01EVTZLR0VzWWl4aktUMCtlMk05U2loaktUdGpiMjV6ZENCa1BXNWxkeUJWYVc1ME9FRnljbUY1S0dJcE8yUXVjMlYwS0VVdWMzVmlZWEp5WVhrb1lUNCtQakFzWVN0aVBqNCtNQ2twTzF3aWIySnFaV04wWENJOVBYUjVjR1Z2WmlCd2NtOWpaWE56SmlaY0ltOWlhbVZqZEZ3aVBUMTBlWEJsYjJZZ2NISnZZMlZ6Y3k1MlpYSnphVzl1Y3lZbVhDSnpkSEpwYm1kY0lqMDlkSGx3Wlc5bUlIQnliMk5sYzNNdWRtVnljMmx2Ym5NdWJtOWtaVDl5WlhGMWFYSmxLRndpWm5OY0lpa3VkM0pwZEdWR2FXeGxVM2x1WXloakxHUXBPaWhoUFc1bGR5QkdhV3hsS0Z0a1hTeGpMSHQwZVhCbE9sd2lZWEJ3YkdsallYUnBiMjR2YjJOMFpYUXRjM1J5WldGdFhDSjlLU3hjYm1FOVZWSk1MbU55WldGMFpVOWlhbVZqZEZWU1RDaGhLU3gzYVc1a2IzY3ViM0JsYmloaExGd2lYMkpzWVc1clhDSXBLWDBzTVRJMk1qVXhNem9vS1QwK2UyY3VKR2dvS1gwc01USTJNalUwTkRvb0tUMCtlMmN1WVdrb0tYMHNNVEkyTWpVM016b29LVDArZTJjdVpXa29LWDBzTVRJMk1qVTVPRHBoUFQ1bkxscG9LR0VwTERFeU5qSTJNekU2WVQwK1p5NWphU2hoS1N3eE1qWXlOall6T2loaExHSXNZeWs5UG50bkxsWm9LR0VzWWl4akxDRXdLWDBzTVRJMk1qY3dNam9vWVN4aUxHTXBQVDU3Wnk1V2FDaGhMR0lzWXlsOUxERXlOakkzTXpVNllUMCtlMmN1YW1Vb1hDSkJZbk5jSWl4aExIWnZhV1FnTUNsOUxERXlOakkzT0RZNllUMCtlMmN1YW1Vb1hDSk9aV2RjSWl4aExIWnZhV1FnTUNsOUxERXlOakk0TXpjNllUMCtlMmN1YW1Vb1hDSkdiRzl2Y2x3aUxHRXNkbTlwWkNBd0tYMHNNVEkyTWpnNU1EcGhQVDU3Wnk1cVpTaGNJa05sYVd4Y0lpeGhMSFp2YVdRZ01DbDlMREV5TmpJNU5ESTZZVDArZTJjdWFtVW9YQ0pTWldOcGNISnZZMkZzWENJc1lTeDJiMmxrSURBcGZTd3hNall6UlRNNllUMCtlMmN1YW1Vb1hDSlRjWEowWENJc1lTeDJiMmxrSURBcGZTd3hNall6TURVeU9tRTlQbnRuTG1wbEtGd2lSWGh3WENJc1lTeDJiMmxrSURBcGZTd3hNall6TVRBek9tRTlQbnRuTG1wbEtGd2lSWEptWENJc1lTeDJiMmxrSURBcGZTd3hNall6TVRVME9tRTlQbHh1ZTJjdWFtVW9YQ0pUYVdkdGIybGtYQ0lzWVN4MmIybGtJREFwZlN3eE1qWXpNakE1T2loaExHSXNZeWs5UG50bkxtcGxLRndpU0dGeVpGTnBaMjF2YVdSY0lpeGhMSHRoYkhCb1lUcGlMR0psZEdFNlkzMHBmU3d4TWpZek1qZzRPbUU5UG50bkxtcGxLRndpVEc5blhDSXNZU3gyYjJsa0lEQXBmU3d4TWpZek16TTVPbUU5UG50bkxtcGxLRndpVTJsdVhDSXNZU3gyYjJsa0lEQXBmU3d4TWpZek16a3dPbUU5UG50bkxtcGxLRndpUTI5elhDSXNZU3gyYjJsa0lEQXBmU3d4TWpZek5EUXhPbUU5UG50bkxtcGxLRndpVkdGdVhDSXNZU3gyYjJsa0lEQXBmU3d4TWpZek5Ea3lPbUU5UG50bkxtcGxLRndpUVhOcGJsd2lMR0VzZG05cFpDQXdLWDBzTVRJMk16VTBORHBoUFQ1N1p5NXFaU2hjSWtGamIzTmNJaXhoTEhadmFXUWdNQ2w5TERFeU5qTTFPVFk2WVQwK2UyY3VhbVVvWENKQmRHRnVYQ0lzWVN4MmIybGtJREFwZlN3eE1qWXpOalE0T21FOVBudG5MbXBsS0Z3aVUybHVhRndpTEdFc2RtOXBaQ0F3S1gwc01USTJNemN3TURwaFBUNTdaeTVxWlNoY0lrTnZjMmhjSWl4aExIWnZhV1FnTUNsOUxERXlOak0zTlRJNllUMCtlMmN1YW1Vb1hDSkJjMmx1YUZ3aUxHRXNkbTlwWkNBd0tYMHNNVEkyTXpnd05UcGhQVDU3Wnk1cVpTaGNJa0ZqYjNOb1hDSXNZU3gyYjJsa0lEQXBmU3d4TWpZek9EVTRPbUU5UG50bkxtcGxLRndpUVhSaGJtaGNJaXhoTEhadmFXUWdNQ2w5TEZ4dU1USTJNemt4TVRwaFBUNTdaeTVxWlNoY0lsUmhibWhjSWl4aExIWnZhV1FnTUNsOUxERXlOak01TmpNNllUMCtlMmN1YW1Vb1hDSk9iM1JjSWl4aExIWnZhV1FnTUNsOUxERXlOalF3TVRRNktHRXNZaXhqS1QwK2UyY3VhbVVvWENKRGJHbHdYQ0lzWVN4N2JXbHVPbUlzYldGNE9tTjlLWDBzTVRJMk5EQTRNenBoUFQ1N1p5NXFaU2hjSWtOc2FYQmNJaXhoTEhadmFXUWdNQ2w5TERFeU5qUXhNelU2S0dFc1lpazlQbnRuTG1wbEtGd2lSV3gxWENJc1lTeDdZV3h3YUdFNlluMHBmU3d4TWpZME1Ua3pPbUU5UG50bkxtcGxLRndpVW1Wc2RWd2lMR0VzZG05cFpDQXdLWDBzTVRJMk5ESTBOVG9vWVN4aUtUMCtlMmN1YW1Vb1hDSk1aV0ZyZVZKbGJIVmNJaXhoTEh0aGJIQm9ZVHBpZlNsOUxERXlOalF6TURrNktHRXNZaWs5UG50bkxtcGxLRndpVkdoeVpYTm9iMnhrWldSU1pXeDFYQ0lzWVN4N1lXeHdhR0U2WW4wcGZTd3hNalkwTXpjNU9paGhMR0lwUFQ1N1p5NXFaU2hjSWtOaGMzUmNJaXhoTEh0MGJ6cGlmU2w5TERFeU5qUTBNemM2WVQwK2UyY3VhbVVvWENKQlpHUmNJaXhoTEhadmFXUWdNQ2w5TERFeU5qUTBPRGc2WVQwK2UyY3VhbVVvWENKVGRXSmNJaXhoTEhadmFXUWdNQ2w5TERFeU5qUTFNems2WVQwK2UyY3VhbVVvWENKTmRXeGNJaXhoTEhadmFXUWdNQ2w5TERFeU5qUTFPVEE2WVQwK2UyY3VhbVVvWENKRWFYWmNJaXhoTEhadmFXUWdNQ2w5TEZ4dU1USTJORFkwTVRwaFBUNTdaeTVxWlNoY0lsQnZkMXdpTEdFc2RtOXBaQ0F3S1gwc01USTJORFk1TWpwaFBUNTdaeTVxWlNoY0lrVnhkV0ZzWENJc1lTeDJiMmxrSURBcGZTd3hNalkwTnpRMU9tRTlQbnRuTG1wbEtGd2lSM0psWVhSbGNsd2lMR0VzZG05cFpDQXdLWDBzTVRJMk5EZ3dNRHBoUFQ1N1p5NXFaU2hjSWtkeVpXRjBaWEpQY2tWeGRXRnNYQ0lzWVN4MmIybGtJREFwZlN3eE1qWTBPRFl5T21FOVBudG5MbXBsS0Z3aVRHVnpjMXdpTEdFc2RtOXBaQ0F3S1gwc01USTJORGt4TkRwaFBUNTdaeTVxWlNoY0lreGxjM05QY2tWeGRXRnNYQ0lzWVN4MmIybGtJREFwZlN3eE1qWTBPVGN6T2loaExHSXNZeXhrTEdVcFBUNTdaeTVxWlNoY0lsSmxaSFZqWlUxbFlXNWNJaXhoTEh0clpXVndSR2x0Y3pvaElXSXNibTl2Y0ZkcGRHaEZiWEIwZVVGNFpYTTZJU0ZqTEdGNFpYTTZaRDlCY25KaGVTNW1jbTl0S0VjdWMzVmlZWEp5WVhrb1pENCtQakFzWlQ0K1BqQXBLVHBiWFgwcGZTd3hNalkxTVRNeU9paGhMR0lzWXl4a0xHVXBQVDU3Wnk1cVpTaGNJbEpsWkhWalpVMWhlRndpTEdFc2UydGxaWEJFYVcxek9pRWhZaXh1YjI5d1YybDBhRVZ0Y0hSNVFYaGxjem9oSVdNc1lYaGxjenBrUDBGeWNtRjVMbVp5YjIwb1J5NXpkV0poY25KaGVTaGtQajQrTUN4bFBqNCtNQ2twT2x0ZGZTbDlMREV5TmpVeU9UQTZLR0VzWWl4akxHUXNaU2s5UGx4dWUyY3VhbVVvWENKU1pXUjFZMlZOYVc1Y0lpeGhMSHRyWldWd1JHbHRjem9oSVdJc2JtOXZjRmRwZEdoRmJYQjBlVUY0WlhNNklTRmpMR0Y0WlhNNlpEOUJjbkpoZVM1bWNtOXRLRWN1YzNWaVlYSnlZWGtvWkQ0K1BqQXNaVDQrUGpBcEtUcGJYWDBwZlN3eE1qWTFORFE0T2loaExHSXNZeXhrTEdVcFBUNTdaeTVxWlNoY0lsSmxaSFZqWlZCeWIyUmNJaXhoTEh0clpXVndSR2x0Y3pvaElXSXNibTl2Y0ZkcGRHaEZiWEIwZVVGNFpYTTZJU0ZqTEdGNFpYTTZaRDlCY25KaGVTNW1jbTl0S0VjdWMzVmlZWEp5WVhrb1pENCtQakFzWlQ0K1BqQXBLVHBiWFgwcGZTd3hNalkxTmpBM09paGhMR0lzWXl4a0xHVXBQVDU3Wnk1cVpTaGNJbEpsWkhWalpWTjFiVndpTEdFc2UydGxaWEJFYVcxek9pRWhZaXh1YjI5d1YybDBhRVZ0Y0hSNVFYaGxjem9oSVdNc1lYaGxjenBrUDBGeWNtRjVMbVp5YjIwb1J5NXpkV0poY25KaGVTaGtQajQrTUN4bFBqNCtNQ2twT2x0ZGZTbDlMREV5TmpVM05qVTZLR0VzWWl4akxHUXNaU2s5UG50bkxtcGxLRndpVW1Wa2RXTmxUREZjSWl4aExIdHJaV1Z3UkdsdGN6b2hJV0lzYm05dmNGZHBkR2hGYlhCMGVVRjRaWE02SVNGakxHRjRaWE02WkQ5QmNuSmhlUzVtY205dEtFY3VjM1ZpWVhKeVlYa29aRDQrUGpBc1pUNCtQakFwS1RwYlhYMHBmU3d4TWpZMU9USXlPaWhoTEdJc1l5eGtMR1VwUFQ1Y2JudG5MbXBsS0Z3aVVtVmtkV05sVERKY0lpeGhMSHRyWldWd1JHbHRjem9oSVdJc2JtOXZjRmRwZEdoRmJYQjBlVUY0WlhNNklTRmpMR0Y0WlhNNlpEOUJjbkpoZVM1bWNtOXRLRWN1YzNWaVlYSnlZWGtvWkQ0K1BqQXNaVDQrUGpBcEtUcGJYWDBwZlN3eE1qWTJNRGM1T2loaExHSXNZeXhrTEdVcFBUNTdaeTVxWlNoY0lsSmxaSFZqWlV4dloxTjFiVndpTEdFc2UydGxaWEJFYVcxek9pRWhZaXh1YjI5d1YybDBhRVZ0Y0hSNVFYaGxjem9oSVdNc1lYaGxjenBrUDBGeWNtRjVMbVp5YjIwb1J5NXpkV0poY25KaGVTaGtQajQrTUN4bFBqNCtNQ2twT2x0ZGZTbDlMREV5TmpZeU5EQTZLR0VzWWl4akxHUXNaU2s5UG50bkxtcGxLRndpVW1Wa2RXTmxVM1Z0VTNGMVlYSmxYQ0lzWVN4N2EyVmxjRVJwYlhNNklTRmlMRzV2YjNCWGFYUm9SVzF3ZEhsQmVHVnpPaUVoWXl4aGVHVnpPbVEvUVhKeVlYa3Vabkp2YlNoSExuTjFZbUZ5Y21GNUtHUStQajR3TEdVK1BqNHdLU2s2VzExOUtYMHNNVEkyTmpRd05Eb29ZU3hpTEdNc1pDeGxLVDArZTJjdWFtVW9YQ0pTWldSMVkyVk1iMmRUZFcxRmVIQmNJaXhoTEh0clpXVndSR2x0Y3pvaElXSXNibTl2Y0ZkcGRHaEZiWEIwZVVGNFpYTTZJU0ZqTEdGNFpYTTZaRDlCY25KaGVTNW1jbTl0S0VjdWMzVmlZWEp5WVhrb1pENCtQakFzWlQ0K1BqQXBLVHBiWFgwcGZTd3hNalkyTlRZNE9tRTlQbHh1ZTJjdWFtVW9YQ0pYYUdWeVpWd2lMR0VzZG05cFpDQXdLWDBzTVRJMk5qWXlNVG9vWVN4aUxHTXBQVDU3Wnk1cVpTaGNJbFJ5WVc1emNHOXpaVndpTEdFc2UzQmxjbTA2WWo5QmNuSmhlUzVtY205dEtFY3VjM1ZpWVhKeVlYa29ZajQrUGpBc1l6NCtQakFwS1RwYlhYMHBmU3d4TWpZMk56STVPaWhoTEdJc1l5eGtLVDArZTJjdWFtVW9YQ0pFWlhCMGFGUnZVM0JoWTJWY0lpeGhMSHRpYkc5amEzTnBlbVU2WWl4dGIyUmxPa29vWXlrc1ptOXliV0YwT21RL1hDSk9TRmREWENJNlhDSk9RMGhYWENKOUtYMHNNVEkyTmpnMk1qb29ZU3hpTEdNc1pDazlQbnRuTG1wbEtGd2lSR1Z3ZEdoVWIxTndZV05sWENJc1lTeDdZbXh2WTJ0emFYcGxPbUlzYlc5a1pUcEtLR01wTEdadmNtMWhkRHBrUDF3aVRraFhRMXdpT2x3aVRrTklWMXdpZlNsOUxERXlOalk1T1RVNktHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDeDFLVDArZTJjdWFtVW9YQ0pEYjI1MlZISmhibk53YjNObFhDSXNZU3g3Wm05eWJXRjBPbXcvWENKT1NGZERYQ0k2WENKT1EwaFhYQ0lzWVhWMGIxQmhaRHBpTEdScGJHRjBhVzl1Y3pwYlkxMHNaM0p2ZFhBNlpDeHJaWEp1Wld4VGFHRndaVHBiWlYwc2NHRmtjenBiWml4b1hTeHpkSEpwWkdWek9sdHJYU3gzU1hORGIyNXpkRG9vS1QwK0lTRjZXMjArUGo0d1hTeHZkWFJ3ZFhSUVlXUmthVzVuT200L1FYSnlZWGt1Wm5KdmJTaEhMbk4xWW1GeWNtRjVLRzQrUGo1Y2JqQXNjVDQrUGpBcEtUcGJYU3h2ZFhSd2RYUlRhR0Z3WlRweVAwRnljbUY1TG1aeWIyMG9SeTV6ZFdKaGNuSmhlU2h5UGo0K01DeHdQajQrTUNrcE9sdGRMR0ZqZEdsMllYUnBiMjQ2U2loMUtYMHBmU3d4TWpZM016azJPaWhoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFwUFQ1N1p5NXFaU2hjSWtOdmJuWlVjbUZ1YzNCdmMyVmNJaXhoTEh0bWIzSnRZWFE2YXo5Y0lrNUlWME5jSWpwY0lrNURTRmRjSWl4aGRYUnZVR0ZrT21Jc1pHbHNZWFJwYjI1ek9rRnljbUY1TG1aeWIyMG9SeTV6ZFdKaGNuSmhlU2hqUGo0K01Dd29ZejQrUGpBcEt6SStQajR3S1Nrc1ozSnZkWEE2WkN4clpYSnVaV3hUYUdGd1pUcEJjbkpoZVM1bWNtOXRLRWN1YzNWaVlYSnlZWGtvWlQ0K1BqQXNLR1UrUGo0d0tTc3lQajQrTUNrcExIQmhaSE02UVhKeVlYa3Vabkp2YlNoSExuTjFZbUZ5Y21GNUtHWStQajR3TENobVBqNCtNQ2tyTkQ0K1BqQXBLU3h6ZEhKcFpHVnpPa0Z5Y21GNUxtWnliMjBvUnk1emRXSmhjbkpoZVNob1BqNCtNQ3dvYUQ0K1BqQXBLekkrUGo0d0tTa3NkMGx6UTI5dWMzUTZLQ2s5UGlFaGVsdHNQajQrTUYwc2IzVjBjSFYwVUdGa1pHbHVaenB0UDBGeWNtRjVMbVp5YjIwb1J5NXpkV0poY25KaGVTaHRQajQrTUN4dVBqNCtNQ2twT2x0ZExHOTFkSEIxZEZOb1lYQmxPbkUvUVhKeVlYa3Vabkp2YlNoSExuTjFZbUZ5Y21GNUtIRStQajVjYmpBc2NqNCtQakFwS1RwYlhTeGhZM1JwZG1GMGFXOXVPa29vY0NsOUtYMHNNVEkyTnprMk1Ub29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdMSFVwUFQ1N1p5NXFaU2hjSWtOdmJuWlVjbUZ1YzNCdmMyVmNJaXhoTEh0bWIzSnRZWFE2YkQ5Y0lrNUlWME5jSWpwY0lrNURTRmRjSWl4aGRYUnZVR0ZrT21Jc1pHbHNZWFJwYjI1ek9sdGpYU3huY205MWNEcGtMR3RsY201bGJGTm9ZWEJsT2x0bFhTeHdZV1J6T2x0bUxHaGRMSE4wY21sa1pYTTZXMnRkTEhkSmMwTnZibk4wT2lncFBUNGhJWHBiYlQ0K1BqQmRMRzkxZEhCMWRGQmhaR1JwYm1jNmJqOUJjbkpoZVM1bWNtOXRLRWN1YzNWaVlYSnlZWGtvYmo0K1BqQXNjVDQrUGpBcEtUcGJYU3h2ZFhSd2RYUlRhR0Z3WlRweVAwRnljbUY1TG1aeWIyMG9SeTV6ZFdKaGNuSmhlU2h5UGo0K01DeHdQajQrTUNrcE9sdGRMR0ZqZEdsMllYUnBiMjQ2U2loMUtYMHBmU3d4TWpZNE16WXlPaWhoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFwUFQ1N1p5NXFaU2hjSWtOdmJuWlVjbUZ1YzNCdmMyVmNJaXhoTEh0bWIzSnRZWFE2YXo5Y0lrNUlWME5jSWpwY0lrNURTRmRjSWl4aGRYUnZVR0ZrT21Jc1pHbHNZWFJwYjI1ek9rRnljbUY1TG1aeWIyMG9SeTV6ZFdKaGNuSmhlU2hqUGo0K01Dd29ZejQrUGpBcEt6SStQajR3S1Nrc1ozSnZkWEE2WkN4Y2JtdGxjbTVsYkZOb1lYQmxPa0Z5Y21GNUxtWnliMjBvUnk1emRXSmhjbkpoZVNobFBqNCtNQ3dvWlQ0K1BqQXBLekkrUGo0d0tTa3NjR0ZrY3pwQmNuSmhlUzVtY205dEtFY3VjM1ZpWVhKeVlYa29aajQrUGpBc0tHWStQajR3S1NzMFBqNCtNQ2twTEhOMGNtbGtaWE02UVhKeVlYa3Vabkp2YlNoSExuTjFZbUZ5Y21GNUtHZytQajR3TENob1BqNCtNQ2tyTWo0K1BqQXBLU3gzU1hORGIyNXpkRG9vS1QwK0lTRjZXMncrUGo0d1hTeHZkWFJ3ZFhSUVlXUmthVzVuT20wL1FYSnlZWGt1Wm5KdmJTaEhMbk4xWW1GeWNtRjVLRzArUGo0d0xHNCtQajR3S1NrNlcxMHNiM1YwY0hWMFUyaGhjR1U2Y1Q5QmNuSmhlUzVtY205dEtFY3VjM1ZpWVhKeVlYa29jVDQrUGpBc2NqNCtQakFwS1RwYlhTeGhZM1JwZG1GMGFXOXVPa29vY0NsOUtYMHNNVEkyT0RreU56b29ZU3hpS1QwK2UyY3VhbVVvWENKSGJHOWlZV3hCZG1WeVlXZGxVRzl2YkZ3aUxHRXNlMlp2Y20xaGREcGlQMXdpVGtoWFExd2lPbHdpVGtOSVYxd2lmU2w5TERFeU5qa3dNVGc2S0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUxIa3BQVDU3Wnk1cVpTaGNJa0YyWlhKaFoyVlFiMjlzWENJc1lTeDdabTl5YldGME9uay9YQ0pPU0ZkRFhDSTZYQ0pPUTBoWFhDSXNZWFYwYjE5d1lXUTZZaXhqWldsc1gyMXZaR1U2WXl4amIzVnVkRjlwYm1Oc2RXUmxYM0JoWkRwa0xGeHVjM1J2Y21GblpWOXZjbVJsY2pwbExHUnBiR0YwYVc5dWN6cGJaaXhvWFN4clpYSnVaV3hmYzJoaGNHVTZXMnNzYkYwc2NHRmtjenBiYlN4dUxIRXNjbDBzYzNSeWFXUmxjenBiY0N4MVhYMHBmU3d4TWpZNU16QXlPaWhoTEdJcFBUNTdaeTVxWlNoY0lrZHNiMkpoYkVGMlpYSmhaMlZRYjI5c1hDSXNZU3g3Wm05eWJXRjBPbUkvWENKT1NGZERYQ0k2WENKT1EwaFhYQ0o5S1gwc01USTJPVE01TXpvb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0xIVXNlU2s5UG50bkxtcGxLRndpUVhabGNtRm5aVkJ2YjJ4Y0lpeGhMSHRtYjNKdFlYUTZlVDljSWs1SVYwTmNJanBjSWs1RFNGZGNJaXhoZFhSdlgzQmhaRHBpTEdObGFXeGZiVzlrWlRwakxHTnZkVzUwWDJsdVkyeDFaR1ZmY0dGa09tUXNjM1J2Y21GblpWOXZjbVJsY2pwbExHUnBiR0YwYVc5dWN6cGJaaXhvWFN4clpYSnVaV3hmYzJoaGNHVTZXMnNzYkYwc2NHRmtjenBiYlN4dUxIRXNjbDBzYzNSeWFXUmxjenBiY0N4MVhYMHBmU3d4TWpZNU5qYzNPaWhoTEdJcFBUNTdaeTVxWlNoY0lrZHNiMkpoYkUxaGVGQnZiMnhjSWl4aExIdG1iM0p0WVhRNllqOWNJazVJVjBOY0lqcGNJazVEU0ZkY0luMHBmU3d4TWpZNU56WTBPaWhoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFzZFN4NUtUMCtlMmN1YW1Vb1hDSk5ZWGhRYjI5c1hDSXNZU3g3Wm05eWJXRjBPbmsvWEc1Y0lrNUlWME5jSWpwY0lrNURTRmRjSWl4aGRYUnZYM0JoWkRwaUxHTmxhV3hmYlc5a1pUcGpMR052ZFc1MFgybHVZMngxWkdWZmNHRmtPbVFzYzNSdmNtRm5aVjl2Y21SbGNqcGxMR1JwYkdGMGFXOXVjenBiWml4b1hTeHJaWEp1Wld4ZmMyaGhjR1U2VzJzc2JGMHNjR0ZrY3pwYmJTeHVMSEVzY2wwc2MzUnlhV1JsY3pwYmNDeDFYWDBwZlN3eE1qY3dNRFEwT2loaExHSXBQVDU3Wnk1cVpTaGNJa2RzYjJKaGJFMWhlRkJ2YjJ4Y0lpeGhMSHRtYjNKdFlYUTZZajljSWs1SVYwTmNJanBjSWs1RFNGZGNJbjBwZlN3eE1qY3dNVE14T2loaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBc2RTeDVLVDArZTJjdWFtVW9YQ0pOWVhoUWIyOXNYQ0lzWVN4N1ptOXliV0YwT25rL1hDSk9TRmREWENJNlhDSk9RMGhYWENJc1lYVjBiMTl3WVdRNllpeGpaV2xzWDIxdlpHVTZZeXhqYjNWdWRGOXBibU5zZFdSbFgzQmhaRHBrTEhOMGIzSmhaMlZmYjNKa1pYSTZaU3hrYVd4aGRHbHZibk02VzJZc2FGMHNhMlZ5Ym1Wc1gzTm9ZWEJsT2x0ckxHeGRMSEJoWkhNNlcyMHNiaXh4TEhKZExITjBjbWxrWlhNNlczQXNkVjE5S1gwc01USTNNRFF4TVRvb1lTeGlMR01zWkN4bEtUMCtlMmN1YW1Vb1hDSkhaVzF0WENJc1lTeDdZV3h3YUdFNllpeGlaWFJoT21Nc2RISmhibk5CT21Rc2RISmhibk5DT21WOUtYMHNNVEkzTURVeE5UcGhQVDVjYm50bkxtcGxLRndpVFdGMFRYVnNYQ0lzWVN4MmIybGtJREFwZlN3eE1qY3dOVFk1T2loaExHSXNZeXhrS1QwK2UyY3VhbVVvWENKQmNtZE5ZWGhjSWl4aExIdHJaV1Z3UkdsdGN6b2hJV0lzYzJWc1pXTjBUR0Z6ZEVsdVpHVjRPaUVoWXl4aGVHbHpPbVI5S1gwc01USTNNRFkzTnpvb1lTeGlMR01zWkNrOVBudG5MbXBsS0Z3aVFYSm5UV2x1WENJc1lTeDdhMlZsY0VScGJYTTZJU0ZpTEhObGJHVmpkRXhoYzNSSmJtUmxlRG9oSVdNc1lYaHBjenBrZlNsOUxERXlOekEzT0RVNktHRXNZaWs5UG50bkxtcGxLRndpVTI5bWRHMWhlRndpTEdFc2UyRjRhWE02WW4wcGZTd3hNamN3T0RRNE9paGhMR0lwUFQ1N1p5NXFaU2hjSWtOdmJtTmhkRndpTEdFc2UyRjRhWE02WW4wcGZTd3hNamN3T1RBNE9paGhMR0lzWXl4a0xHVXBQVDU3Wnk1cVpTaGNJbE53YkdsMFhDSXNZU3g3WVhocGN6cGlMRzUxYlU5MWRIQjFkSE02WXl4emNHeHBkRk5wZW1Wek9tUS9RWEp5WVhrdVpuSnZiU2hITG5OMVltRnljbUY1S0dRK1BqNHdMR1UrUGo0d0tTazZXMTE5S1gwc01USTNNVEEwT0RwaFBUNTdaeTVxWlNoY0lrVjRjR0Z1WkZ3aUxHRXNkbTlwWkNBd0tYMHNNVEkzTVRFd01qb29ZU3hpS1QwK2UyY3VhbVVvWENKSFlYUm9aWEpjSWl4aExIdGhlR2x6T2s1MWJXSmxjaWhpS1gwcGZTd3hNamN4TVRjek9paGhMR0lwUFQ1N1p5NXFaU2hjSWtkaGRHaGxja1ZzWlcxbGJuUnpYQ0lzWEc1aExIdGhlR2x6T2s1MWJXSmxjaWhpS1gwcGZTd3hNamN4TWpVeU9paGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRwUFQ1N1p5NXFaU2hjSWxKbGMybDZaVndpTEdFc2UyRnVkR2xoYkdsaGN6cGlMR0Y0WlhNNll6OUJjbkpoZVM1bWNtOXRLRWN1YzNWaVlYSnlZWGtvWXo0K1BqQXNaRDQrUGpBcEtUcGJYU3hqYjI5eVpHbHVZWFJsVkhKaGJuTm1iM0p0VFc5a1pUcEtLR1VwTEdOMVltbGpRMjlsWm1aQk9tWXNaWGhqYkhWa1pVOTFkSE5wWkdVNmFDeGxlSFJ5WVhCdmJHRjBhVzl1Vm1Gc2RXVTZheXhyWldWd1FYTndaV04wVW1GMGFXOVFiMnhwWTNrNlNpaHNLU3h0YjJSbE9rb29iU2tzYm1WaGNtVnpkRTF2WkdVNlNpaHVLWDBwZlN3eE1qY3hOVGs0T2loaExHSXNZeXhrTEdVc1ppeG9LVDArZTJjdWFtVW9YQ0pUYkdsalpWd2lMR0VzZTNOMFlYSjBjenBpUDBGeWNtRjVMbVp5YjIwb1J5NXpkV0poY25KaGVTaGlQajQrTUN4alBqNCtNQ2twT2x0ZExHVnVaSE02WkQ5QmNuSmhlUzVtY205dEtFY3VjM1ZpWVhKeVlYa29aRDQrUGpBc1pUNCtQakFwS1RwYlhTeGhlR1Z6T21ZL1FYSnlZWGt1Wm5KdmJTaEhMbk4xWW1GeWNtRjVLR1krUGo0d0xHZytQajR3S1NrNlcxMTlLWDBzTVRJM01UZ3hORHBoUFQ1N1p5NXFaU2hjSWxScGJHVmNJaXhoTEhadmFXUWdNQ2w5TERFeU56RTROalk2S0dFc1lpeGNibU1zWkNrOVBudG5MbXBsS0Z3aVRHRjVaWEpPYjNKdFlXeHBlbUYwYVc5dVhDSXNZU3g3WVhocGN6cGlMR1Z3YzJsc2IyNDZZeXh6YVcxd2JHbG1hV1ZrT2lFaFpIMHBmU3d4TWpjeE9UYzNPaWhoTEdJc1l5azlQbnRuTG1wbEtGd2lTVzV6ZEdGdVkyVk9iM0p0WVd4cGVtRjBhVzl1WENJc1lTeDdaWEJ6YVd4dmJqcGlMR1p2Y20xaGREcGpQMXdpVGtoWFExd2lPbHdpVGtOSVYxd2lmU2w5TERFeU56SXdPVEU2S0dFc1lpeGpLVDArZTJjdWFtVW9YQ0pKYm5OMFlXNWpaVTV2Y20xaGJHbDZZWFJwYjI1Y0lpeGhMSHRsY0hOcGJHOXVPbUlzWm05eWJXRjBPbU0vWENKT1NGZERYQ0k2WENKT1EwaFhYQ0o5S1gwc01USTNNakl3TlRwaFBUNTdaeTVxWlNoY0lsSmhibWRsWENJc1lTeDJiMmxrSURBcGZTd3hNamN5TWpVNE9paGhMR0lwUFQ1N1p5NXFaU2hjSWtWcGJuTjFiVndpTEdFc2UyVnhkV0YwYVc5dU9rb29ZaWw5S1gwc01USTNNak16T1Rvb1lTeGlMR01zWkN4bEtUMCtlMmN1YW1Vb1hDSlFZV1JjSWl4aExIdHRiMlJsT21Jc2RtRnNkV1U2WXl4d1lXUnpPbVEvUVhKeVlYa3Vabkp2YlNoSExuTjFZbUZ5Y21GNUtHUStQajR3TEdVK1BqNHdLU2s2VzExOUtYMHNNVEkzTWpRMk5qb29ZU3hpTEdNc1pDeGxMR1lwUFQ1N1p5NXFaU2hjSWtKaGRHTm9UbTl5YldGc2FYcGhkR2x2Ymx3aUxHRXNlMlZ3YzJsc2IyNDZZaXh0YjIxbGJuUjFiVHBqTEZ4dWMzQmhkR2xoYkRvaElXVXNkSEpoYVc1cGJtZE5iMlJsT2lFaFpDeG1iM0p0WVhRNlpqOWNJazVJVjBOY0lqcGNJazVEU0ZkY0luMHBmU3d4TWpjeU5qTTFPaWhoTEdJc1l5eGtMR1VzWmlrOVBudG5MbXBsS0Z3aVFtRjBZMmhPYjNKdFlXeHBlbUYwYVc5dVhDSXNZU3g3WlhCemFXeHZianBpTEcxdmJXVnVkSFZ0T21Nc2MzQmhkR2xoYkRvaElXVXNkSEpoYVc1cGJtZE5iMlJsT2lFaFpDeG1iM0p0WVhRNlpqOWNJazVJVjBOY0lqcGNJazVEU0ZkY0luMHBmU3d4TWpjeU9EQTBPaWhoTEdJc1l5azlQbnRuTG1wbEtGd2lRM1Z0VTNWdFhDSXNZU3g3WlhoamJIVnphWFpsT2s1MWJXSmxjaWhpS1N4eVpYWmxjbk5sT2s1MWJXSmxjaWhqS1gwcGZTd3hNamN5T1RBeE9paGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDazlQbnRuTG1wbEtGd2lRWFIwWlc1MGFXOXVYQ0lzWVN4N2JuVnRTR1ZoWkhNNllpeHBjMVZ1YVdScGNtVmpkR2x2Ym1Gc09tTXNiV0Z6YTBacGJIUmxjbFpoYkhWbE9tUXNjMk5oYkdVNlpTeGtiMUp2ZEdGeWVUcG1MSEZyZGtocFpHUmxibE5wZW1Wek9tZy9RWEp5WVhrdVpuSnZiU2hITG5OMVltRnljbUY1S0U1MWJXSmxjaWhyS1Q0K1BqQXNUblZ0WW1WeUtHc3BLMmcrUGo0d0tTazZXMTBzY0dGemRGQnlaWE5sYm5SVGFHRnlaVUoxWm1abGNqb2hJV3g5S1gwc01USTNNekUzTXpwaFBUNTdaeTVxWlNoY0lrSnBZWE5CWkdSY0lpeGNibUVzZG05cFpDQXdLWDBzTVRJM016SXlPRHBoUFQ1N1p5NXFaU2hjSWtKcFlYTlRjR3hwZEVkbGJIVmNJaXhoTEhadmFXUWdNQ2w5TERFeU56TXlPRGs2WVQwK2UyY3VhbVVvWENKR1lYTjBSMlZzZFZ3aUxHRXNkbTlwWkNBd0tYMHNNVEkzTXpNME5Ub29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpazlQbnRuTG1wbEtGd2lRMjl1ZGx3aUxHRXNlMlp2Y20xaGREcHNQMXdpVGtoWFExd2lPbHdpVGtOSVYxd2lMR0YxZEc5ZmNHRmtPbUlzWkdsc1lYUnBiMjV6T2x0alhTeG5jbTkxY0Rwa0xHdGxjbTVsYkY5emFHRndaVHBiWlYwc2NHRmtjenBtUDBGeWNtRjVMbVp5YjIwb1J5NXpkV0poY25KaGVTaG1QajQrTUN4b1BqNCtNQ2twT2x0ZExITjBjbWxrWlhNNlcydGRMSGRmYVhOZlkyOXVjM1E2S0NrOVBpRWhlbHR0UGo0K01GMHNZV04wYVhaaGRHbHZianBLS0c0cExHRmpkR2wyWVhScGIyNWZjR0Z5WVcxek9uRS9RWEp5WVhrdVpuSnZiU2gyWVM1emRXSmhjbkpoZVNoeFBqNCtNQ3h5UGo0K01Da3BPbHRkZlNsOUxERXlOek0zTVRVNktHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDeDFMSGtwUFQ1N1p5NXFaU2hjSWtOdmJuWmNJaXhoTEh0bWIzSnRZWFE2Y1Q5Y0lrNUlWME5jSWpwY0lrNURTRmRjSWl4aGRYUnZYM0JoWkRwaUxHUnBiR0YwYVc5dWN6cGJZeXhrWFN4bmNtOTFjRHBsTEd0bGNtNWxiRjl6YUdGd1pUcGJaaXhjYm1oZExIQmhaSE02YXo5QmNuSmhlUzVtY205dEtFY3VjM1ZpWVhKeVlYa29hejQrUGpBc2JENCtQakFwS1RwYlhTeHpkSEpwWkdWek9sdHRMRzVkTEhkZmFYTmZZMjl1YzNRNktDazlQaUVoZWx0eVBqNCtNRjBzWVdOMGFYWmhkR2x2YmpwS0tIQXBMR0ZqZEdsMllYUnBiMjVmY0dGeVlXMXpPblUvUVhKeVlYa3Vabkp2YlNoMllTNXpkV0poY25KaGVTaDFQajQrTUN4NVBqNCtNQ2twT2x0ZGZTbDlMREV5TnpReE1EWTZZVDArZTJjdWFtVW9YQ0pIWld4MVhDSXNZU3gyYjJsa0lEQXBmU3d4TWpjME1UVTRPaWhoTEdJc1l5eGtMR1VzWmlrOVBudG5MbXBsS0Z3aVRXRjBUWFZzVGtKcGRITmNJaXhoTEh0ck9tSXNianBqTEdGalkzVnlZV041VEdWMlpXdzZaQ3hpYVhSek9tVXNZbXh2WTJ0VGFYcGxPbVo5S1gwc01USTNOREk0TlRvb1lTeGlMR01zWkN4bExHWXBQVDU3Wnk1cVpTaGNJazExYkhScFNHVmhaRUYwZEdWdWRHbHZibHdpTEdFc2UyNTFiVWhsWVdSek9tSXNhWE5WYm1sa2FYSmxZM1JwYjI1aGJEcGpMRzFoYzJ0R2FXeDBaWEpXWVd4MVpUcGtMSE5qWVd4bE9tVXNaRzlTYjNSaGNuazZabjBwZlN3eE1qYzBORFEwT2loaExHSXNZeXhrTEdVcFBUNTdaeTVxWlNoY0lsSnZkR0Z5ZVVWdFltVmtaR2x1WjF3aUxHRXNlMmx1ZEdWeWJHVmhkbVZrT2lFaFlpeHVkVzFJWldGa2N6cGpMSEp2ZEdGeWVVVnRZbVZrWkdsdVowUnBiVHBrTEZ4dWMyTmhiR1U2WlgwcGZTd3hNamMwTlRnek9paGhMR0lzWXlrOVBudG5MbXBsS0Z3aVUydHBjRXhoZVdWeVRtOXliV0ZzYVhwaGRHbHZibHdpTEdFc2UyVndjMmxzYjI0NllpeHphVzF3YkdsbWFXVmtPaUVoWTMwcGZTd3hNamMwTmpnMU9paGhMR0lzWXlrOVBudG5MbXBsS0Z3aVUydHBjRXhoZVdWeVRtOXliV0ZzYVhwaGRHbHZibHdpTEdFc2UyVndjMmxzYjI0NllpeHphVzF3YkdsbWFXVmtPaUVoWTMwcGZTd3hNamMwTnpnM09paGhMR0lzWXl4a0tUMCtlMmN1YW1Vb1hDSk1ZWGxsY2s1dmNtMWhiR2w2WVhScGIyNWNJaXhoTEh0aGVHbHpPbUlzWlhCemFXeHZianBqTEhOcGJYQnNhV1pwWldRNklTRmtmU2w5TERFeU56UTRPVGc2WVQwK2UyY3VaR2tvWVNsOUxERXlOelE1TXpJNktHRXNZaWs5UG1jdVpta29ZU3hpTEdjdVQyZ3VaMmtzWnk1UGFDNWxjbkp2Y25NcGZUdG1kVzVqZEdsdmJpQlFZU2hoS1h0MGFHbHpMbTVoYldVOVhDSkZlR2wwVTNSaGRIVnpYQ0k3ZEdocGN5NXRaWE56WVdkbFBXQlFjbTluY21GdElIUmxjbTFwYm1GMFpXUWdkMmwwYUNCbGVHbDBLQ1I3WVgwcFlEdDBhR2x6TG5OMFlYUjFjejFoZlhaaGNpQlJZVDFiWFN4U1lUMHdMRXc5TUR0amJHRnpjeUJUWVh0amIyNXpkSEoxWTNSdmNpaGhLWHQwYUdsekxrNW9QV0U3ZEdocGN5NUphRDFoTFRJMGZYMWNiblpoY2lCYVlUMWhQVDU3ZG1GeUlHSTlURHRwWmlnaFlpbHlaWFIxY200Z1ZHRW9NQ2tzTUR0MllYSWdZejF1WlhjZ1UyRW9ZaWs3U1Z0akxrbG9LekUyUGo0K01qNCtQakJkUFdJN2RtRnlJR1E5U1Z0akxrbG9LelErUGo0eVBqNCtNRjA3YVdZb0lXUXBjbVYwZFhKdUlGUmhLREFwTEdJN1ptOXlLSFpoY2lCbElHbHVJR0VwZTNaaGNpQm1QV0ZiWlYwN2FXWW9NRDA5UFdaOGZHWTlQVDFrS1dKeVpXRnJPMmxtS0ZWaEtHWXNaQ3hqTGtsb0t6RTJLU2x5WlhSMWNtNGdWR0VvWmlrc1luMVVZU2hrS1R0eVpYUjFjbTRnWW4wc0pHRTlYQ0oxYm1SbFptbHVaV1JjSWlFOWRIbHdaVzltSUZSbGVIUkVaV052WkdWeVAyNWxkeUJVWlhoMFJHVmpiMlJsY2loY0luVjBaamhjSWlrNmRtOXBaQ0F3TEdGaVBTaGhMR0lzWXlrOVBudGlQajQrUFRBN2RtRnlJR1E5WWl0ak8yWnZjaWhqUFdJN1lWdGpYU1ltSVNoalBqMWtLVHNwS3l0ak8ybG1LREUyUEdNdFlpWW1ZUzVpZFdabVpYSW1KaVJoS1hKbGRIVnliaUFrWVM1a1pXTnZaR1VvWVM1emRXSmhjbkpoZVNoaUxHTXBLVHRtYjNJb1pEMWNJbHdpTzJJOFl6c3BlM1poY2lCbFBXRmJZaXNyWFR0cFppaGxKakV5T0NsN2RtRnlJR1k5WVZ0aUt5dGRKall6TzJsbUtERTVNajA5S0dVbU1qSTBLU2xrS3oxVGRISnBibWN1Wm5KdmJVTm9ZWEpEYjJSbEtDaGxKak14S1R3OFhHNDJmR1lwTzJWc2MyVjdkbUZ5SUdnOVlWdGlLeXRkSmpZek8yVTlNakkwUFQwb1pTWXlOREFwUHlobEpqRTFLVHc4TVRKOFpqdzhObnhvT2lobEpqY3BQRHd4T0h4bVBEd3hNbnhvUER3MmZHRmJZaXNyWFNZMk16czJOVFV6Tmo1bFAyUXJQVk4wY21sdVp5NW1jbTl0UTJoaGNrTnZaR1VvWlNrNktHVXRQVFkxTlRNMkxHUXJQVk4wY21sdVp5NW1jbTl0UTJoaGNrTnZaR1VvTlRVeU9UWjhaVDQrTVRBc05UWXpNakI4WlNZeE1ESXpLU2w5ZldWc2MyVWdaQ3M5VTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlNobEtYMXlaWFIxY200Z1pIMHNTajBvWVN4aUtUMCtLR0UrUGo0OU1Day9ZV0lvUlN4aExHSXBPbHdpWENJc1ltSTlZVDArZTJadmNpaDJZWElnWWowd0xHTTlNRHRqUEdFdWJHVnVaM1JvT3lzcll5bDdkbUZ5SUdROVlTNWphR0Z5UTI5a1pVRjBLR01wT3pFeU56NDlaRDlpS3lzNk1qQTBOejQ5WkQ5aUt6MHlPalUxTWprMlBEMWtKaVkxTnpNME16NDlaRDhvWWlzOU5Dd3JLMk1wT21JclBUTjljbVYwZFhKdUlHSjlMRTA5S0dFc1lpeGpMR1FwUFQ1N1l6NCtQajB3TzJsbUtDRW9NRHhrS1NseVpYUjFjbTRnTUR0MllYSWdaVDFqTzJROVl5dGtMVEU3Wm05eUtIWmhjaUJtUFRBN1pqeGhMbXhsYm1kMGFEc3JLMllwZTNaaGNpQm9QV0V1WTJoaGNrTnZaR1ZCZENobUtUdHBaaWcxTlRJNU5qdzlYRzVvSmlZMU56TTBNejQ5YUNsN2RtRnlJR3M5WVM1amFHRnlRMjlrWlVGMEtDc3JaaWs3YUQwMk5UVXpOaXNvS0dnbU1UQXlNeWs4UERFd0tYeHJKakV3TWpOOWFXWW9NVEkzUGoxb0tYdHBaaWhqUGoxa0tXSnlaV0ZyTzJKYll5c3JQajQrTUYwOWFIMWxiSE5sZTJsbUtESXdORGMrUFdncGUybG1LR01yTVQ0OVpDbGljbVZoYXp0aVcyTXJLejQrUGpCZFBURTVNbnhvUGo0MmZXVnNjMlY3YVdZb05qVTFNelUrUFdncGUybG1LR01yTWo0OVpDbGljbVZoYXp0aVcyTXJLejQrUGpCZFBUSXlOSHhvUGo0eE1uMWxiSE5sZTJsbUtHTXJNejQ5WkNsaWNtVmhhenRpVzJNckt6NCtQakJkUFRJME1IeG9QajR4T0R0aVcyTXJLejQrUGpCZFBURXlPSHhvUGo0eE1pWTJNMzFpVzJNckt6NCtQakJkUFRFeU9IeG9QajQySmpZemZXSmJZeXNyUGo0K01GMDlNVEk0ZkdnbU5qTjlmV0piWXo0K1BqQmRQVEE3Y21WMGRYSnVJR010Wlgwc1kySXNUajFoUFQ1N1ptOXlLSFpoY2lCaVBWd2lYQ0k3UlZ0aFBqNCtNRjA3S1dJclBXTmlXMFZiWVNzclBqNCtNRjFkTzNKbGRIVnliaUJpZlN4a1lqMTdmU3hsWWoxN2ZTeG1ZajE3ZlN4UE8xeHVablZ1WTNScGIyNGdaMklvWVN4aUxHTTllMzBwZTNaaGNpQmtQV0l1Ym1GdFpUdHBaaWdoWVNsMGFISnZkeUJ1WlhjZ1R5aGdkSGx3WlNCY0lpUjdaSDFjSWlCdGRYTjBJR2hoZG1VZ1lTQndiM05wZEdsMlpTQnBiblJsWjJWeUlIUjVjR1ZwWkNCd2IybHVkR1Z5WUNrN2FXWW9aV0l1YUdGelQzZHVVSEp2Y0dWeWRIa29ZU2twZTJsbUtHTXVXR2dwY21WMGRYSnVPM1JvY205M0lHNWxkeUJQS0dCRFlXNXViM1FnY21WbmFYTjBaWElnZEhsd1pTQW5KSHRrZlNjZ2RIZHBZMlZnS1R0OVpXSmJZVjA5WWp0a1pXeGxkR1VnWm1KYllWMDdaR0l1YUdGelQzZHVVSEp2Y0dWeWRIa29ZU2ttSmloaVBXUmlXMkZkTEdSbGJHVjBaU0JrWWx0aFhTeGlMbVp2Y2tWaFkyZ29aVDArWlNncEtTbDlablZ1WTNScGIyNGdVQ2hoTEdJc1l6MTdmU2w3YVdZb0lTaGNJbUZ5WjFCaFkydEJaSFpoYm1ObFhDSnBiaUJpS1NsMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtGd2ljbVZuYVhOMFpYSlVlWEJsSUhKbFoybHpkR1Z5WldSSmJuTjBZVzVqWlNCeVpYRjFhWEpsY3lCaGNtZFFZV05yUVdSMllXNWpaVndpS1R0eVpYUjFjbTRnWjJJb1lTeGlMR01wZlZ4dWRtRnlJR2hpUFNoaExHSXNZeWs5UG50emQybDBZMmdvWWlsN1kyRnpaU0F4T25KbGRIVnliaUJqUDJROVBucGJaRDQrUGpCZE9tUTlQa1ZiWkQ0K1BqQmRPMk5oYzJVZ01qcHlaWFIxY200Z1l6OWtQVDUwWVZ0a1BqNCtNVDQrUGpCZE9tUTlQblZoVzJRK1BqNHhQajQrTUYwN1kyRnpaU0EwT25KbGRIVnliaUJqUDJROVBrZGJaRDQrUGpJK1BqNHdYVHBrUFQ1SlcyUStQajR5UGo0K01GMDdZMkZ6WlNBNE9uSmxkSFZ5YmlCalAyUTlQbmRoVzJRK1BqNHpYVHBrUFQ1NFlWdGtQajQrTTEwN1pHVm1ZWFZzZERwMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtHQnBiblpoYkdsa0lHbHVkR1ZuWlhJZ2QybGtkR2dnS0NSN1luMHBPaUFrZTJGOVlDazdmWDBzYVdJOVcxMHNVVDFiWFR0bWRXNWpkR2x2YmlCcVlpaGhLWHRoUGo0K1BUQTdPVHhoSmlZd1BUMDlMUzFSVzJFck1WMG1KaWhSVzJGZFBYWnZhV1FnTUN4cFlpNXdkWE5vS0dFcEtYMWNiblpoY2lCU1BXRTlQbnRwWmlnaFlTbDBhSEp2ZHlCdVpYY2dUeWhjSWtOaGJtNXZkQ0IxYzJVZ1pHVnNaWFJsWkNCMllXd3VJR2hoYm1Sc1pTQTlJRndpSzJFcE8zSmxkSFZ5YmlCUlcyRmRmU3hUUFdFOVBudHpkMmwwWTJnb1lTbDdZMkZ6WlNCMmIybGtJREE2Y21WMGRYSnVJREk3WTJGelpTQnVkV3hzT25KbGRIVnliaUEwTzJOaGMyVWdJVEE2Y21WMGRYSnVJRFk3WTJGelpTQWhNVHB5WlhSMWNtNGdPRHRrWldaaGRXeDBPbU52Ym5OMElHSTlhV0l1Y0c5d0tDbDhmRkV1YkdWdVozUm9PMUZiWWwwOVlUdFJXMklyTVYwOU1UdHlaWFIxY200Z1luMTlPMloxYm1OMGFXOXVJR3RpS0dFcGUzSmxkSFZ5YmlCMGFHbHpMbVp5YjIxWGFYSmxWSGx3WlNoSlcyRStQajR5UGo0K01GMHBmVnh1ZG1GeUlHeGlQWHR1WVcxbE9sd2laVzF6WTNKcGNIUmxiam82ZG1Gc1hDSXNabkp2YlZkcGNtVlVlWEJsT21FOVBudDJZWElnWWoxU0tHRXBPMnBpS0dFcE8zSmxkSFZ5YmlCaWZTeDBiMWRwY21WVWVYQmxPaWhoTEdJcFBUNVRLR0lwTEdGeVoxQmhZMnRCWkhaaGJtTmxPamdzY21WaFpGWmhiSFZsUm5KdmJWQnZhVzUwWlhJNmEySXNUV2c2Ym5Wc2JIMHNiV0k5S0dFc1lpazlQbnR6ZDJsMFkyZ29ZaWw3WTJGelpTQTBPbkpsZEhWeWJpQm1kVzVqZEdsdmJpaGpLWHR5WlhSMWNtNGdkR2hwY3k1bWNtOXRWMmx5WlZSNWNHVW9kbUZiWXo0K1BqSStQajR3WFNsOU8yTmhjMlVnT0RweVpYUjFjbTRnWm5WdVkzUnBiMjRvWXlsN2NtVjBkWEp1SUhSb2FYTXVabkp2YlZkcGNtVlVlWEJsS0hsaFcyTStQajR6UGo0K01GMHBmVHRrWldaaGRXeDBPblJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvWUdsdWRtRnNhV1FnWm14dllYUWdkMmxrZEdnZ0tDUjdZbjBwT2lBa2UyRjlZQ2s3Zlgwc2JtSTlYQ0oxYm1SbFptbHVaV1JjSWlFOWRIbHdaVzltSUZSbGVIUkVaV052WkdWeVAyNWxkeUJVWlhoMFJHVmpiMlJsY2loY0luVjBaaTB4Tm14bFhDSXBPblp2YVdRZ01DeHZZajBvWVN4aUtUMCtlM1poY2lCalBXRStQakU3Wm05eUtIWmhjaUJrUFdNcllpOHlPeUVvWXo0OVpDa21KblZoVzJNK1BqNHdYVHNwS3l0ak8xeHVZenc4UFRFN2FXWW9Nekk4WXkxaEppWnVZaWx5WlhSMWNtNGdibUl1WkdWamIyUmxLRVV1YzNWaVlYSnlZWGtvWVQ0K1BqQXNZejQrUGpBcEtUdGpQVndpWENJN1ptOXlLR1E5TURzaEtHUStQV0l2TWlrN0t5dGtLWHQyWVhJZ1pUMTBZVnRoS3pJcVpENCtQakUrUGo0d1hUdHBaaWd3UFQxbEtXSnlaV0ZyTzJNclBWTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVW9aU2w5Y21WMGRYSnVJR045TEhCaVBTaGhMR0lzWXlrOVBudGpQejg5TWpFME56UTRNelkwTnp0cFppZ3lQbU1wY21WMGRYSnVJREE3WXkwOU1qdDJZWElnWkQxaU8yTTlZend5S21FdWJHVnVaM1JvUDJNdk1qcGhMbXhsYm1kMGFEdG1iM0lvZG1GeUlHVTlNRHRsUEdNN0t5dGxLWFJoVzJJK1BqNHhQajQrTUYwOVlTNWphR0Z5UTI5a1pVRjBLR1VwTEdJclBUSTdkR0ZiWWo0K1BqRStQajR3WFQwd08zSmxkSFZ5YmlCaUxXUjlMSEZpUFdFOVBqSXFZUzVzWlc1bmRHZ3NjbUk5S0dFc1lpazlQbnRtYjNJb2RtRnlJR005TUN4a1BWd2lYQ0k3SVNoalBqMWlMelFwT3lsN2RtRnlJR1U5UjF0aEt6UXFZejQrUGpJK1BqNHdYVHRwWmlnd1BUMWxLV0p5WldGck95c3JZenMyTlRVek5qdzlaVDhvWlMwOU5qVTFNellzWkNzOVUzUnlhVzVuTG1aeWIyMURhR0Z5UTI5a1pTZzFOVEk1Tm54bFBqNHhNQ3cxTmpNeU1IeGxKakV3TWpNcEtUcGtLejFjYmxOMGNtbHVaeTVtY205dFEyaGhja052WkdVb1pTbDljbVYwZFhKdUlHUjlMSE5pUFNoaExHSXNZeWs5UG50aVBqNCtQVEE3WXo4L1BUSXhORGMwT0RNMk5EYzdhV1lvTkQ1aktYSmxkSFZ5YmlBd08zWmhjaUJrUFdJN1l6MWtLMk10TkR0bWIzSW9kbUZ5SUdVOU1EdGxQR0V1YkdWdVozUm9PeXNyWlNsN2RtRnlJR1k5WVM1amFHRnlRMjlrWlVGMEtHVXBPMmxtS0RVMU1qazJQRDFtSmlZMU56TTBNejQ5WmlsN2RtRnlJR2c5WVM1amFHRnlRMjlrWlVGMEtDc3JaU2s3WmowMk5UVXpOaXNvS0dZbU1UQXlNeWs4UERFd0tYeG9KakV3TWpOOVIxdGlQajQrTWo0K1BqQmRQV1k3WWlzOU5EdHBaaWhpS3pRK1l5bGljbVZoYTMxSFcySStQajR5UGo0K01GMDlNRHR5WlhSMWNtNGdZaTFrZlN4MFlqMWhQVDU3Wm05eUtIWmhjaUJpUFRBc1l6MHdPMk04WVM1c1pXNW5kR2c3S3l0aktYdDJZWElnWkQxaExtTm9ZWEpEYjJSbFFYUW9ZeWs3TlRVeU9UWThQV1FtSmpVM016UXpQajFrSmlZcksyTTdZaXM5TkgxeVpYUjFjbTRnWW4wc2RtSTlLR0VzWWlrOVBudDJZWElnWXoxbFlsdGhYVHRwWmloMmIybGtJREE5UFQxaktYUm9jbTkzSUdFOWRXSW9ZU2tzWXoxT0tHRXBMRlFvWVNrc2JtVjNJRThvWUNSN1luMGdhR0Z6SUhWdWEyNXZkMjRnZEhsd1pTQWtlMk45WUNrN2NtVjBkWEp1SUdOOUxIZGlQVnh1S0dFc1lpeGpLVDArZTNaaGNpQmtQVnRkTzJFOVlTNTBiMWRwY21WVWVYQmxLR1FzWXlrN1pDNXNaVzVuZEdnbUppaEpXMkkrUGo0eVBqNCtNRjA5VXloa0tTazdjbVYwZFhKdUlHRjlMSGhpUFdFOVBudDBjbmw3WVNncGZXTmhkR05vS0dJcGUwZGhLR0lwZlgwc2VXSTlZVDArZTJsbUtDRjRLWFJ5ZVh0aEtDazdkSEo1ZTNOaFBYTmhQV0U5YzJFc1p5NXZia1Y0YVhRL0xpaGhLU3g0UFNFd0xHaGhLR0VzYm1WM0lGQmhLR0VwS1gxallYUmphQ2hpS1h0aUlHbHVjM1JoYm1ObGIyWWdVR0Y4ZkZ3aWRXNTNhVzVrWENJOVBXSjhmR2hoS0RFc1lpbDlmV05oZEdOb0tHSXBlMklnYVc1emRHRnVZMlZ2WmlCUVlYeDhYQ0oxYm5kcGJtUmNJajA5WW54OGFHRW9NU3hpS1gxOU8xeHVablZ1WTNScGIyNGdlbUlvS1h0MllYSWdZVDFWTEdJOWUzMDdabTl5S0d4bGRDQmJZeXhrWFc5bUlFOWlhbVZqZEM1bGJuUnlhV1Z6S0dFcEtXSmJZMTA5WENKbWRXNWpkR2x2Ymx3aVBUMTBlWEJsYjJZZ1pEOG9MaTR1WlNrOVBudEJZaTV3ZFhOb0tHTXBPM1J5ZVh0eVpYUjFjbTRnWkNndUxpNWxLWDFtYVc1aGJHeDVlM2g4ZkNoQllpNXdiM0FvS1N4MEppWXhQVDA5VmlZbU1EMDlQVUZpTG14bGJtZDBhQ1ltS0ZZOU1DeDRZaWhDWWlrc1hDSjFibVJsWm1sdVpXUmNJaUU5ZEhsd1pXOW1JRVpwWW1WeWN5WW1SbWxpWlhKekxtMXBLQ2twS1gxOU9tUTdjbVYwZFhKdUlHSjlkbUZ5SUZZOU1DeDBQVzUxYkd3c1EySTlNQ3hCWWoxYlhTeEVZajE3ZlN4RllqMTdmU3hHWWowd0xFZGlQVzUxYkd3c1NHSTlXMTA3Wm5WdVkzUnBiMjRnWTJFb0tYdHlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9LR0VzWWlrOVBudEhZajE3Y21WemIyeDJaVHBoTEhKbGFtVmpkRHBpZlgwcGZWeHVablZ1WTNScGIyNGdTV0lvS1h0MllYSWdZVDFLWWlnMk5UVTBPQ2tzWWoxaEt6RXlPMGxiWVQ0K1BqSStQajR3WFQxaU8wbGJZU3MwUGo0K01qNCtQakJkUFdJck5qVTFNelk3WWoxQllsc3dYVHQyWVhJZ1l6MUVZbHRpWFR0MmIybGtJREE5UFQxakppWW9ZejFHWWlzckxFUmlXMkpkUFdNc1JXSmJZMTA5WWlrN1IxdGhLemcrUGo0eVBqNCtNRjA5WXp0eVpYUjFjbTRnWVgxY2JtWjFibU4wYVc5dUlFdGlLR0VwZTJsbUtDRjRLWHRwWmlnd1BUMDlWaWw3ZG1GeUlHSTlJVEVzWXowaE1UdGhLQ2hrUFRBcFBUNTdhV1lvSVhnbUppaERZajFrTEdJOUlUQXNZeWtwZTFZOU1qdDRZaWdvS1QwK1RHSW9kQ2twTzF3aWRXNWtaV1pwYm1Wa1hDSWhQWFI1Y0dWdlppQkNjbTkzYzJWeUppWkNjbTkzYzJWeUxsTm9MbGRvSmlaQ2NtOTNjMlZ5TGxOb0xuSmxjM1Z0WlNncE8yUTlJVEU3ZEhKNWUzWmhjaUJsUFNnd0xGVmJSV0piUjF0MEt6ZytQajR5UGo0K01GMWRYU2tvS1gxallYUmphQ2hyS1h0bFBXc3NaRDBoTUgxMllYSWdaajBoTVR0cFppZ2hkQ2w3ZG1GeUlHZzlSMkk3YUNZbUtFZGlQVzUxYkd3c0tHUS9hQzV5WldwbFkzUTZhQzV5WlhOdmJIWmxLU2hsS1N4bVBTRXdLWDFwWmloa0ppWWhaaWwwYUhKdmR5QmxPMzE5S1R0alBTRXdPMko4ZkNoV1BURXNkRDFKWWlncExGd2lkVzVrWldacGJtVmtYQ0loUFhSNWNHVnZaaUJDY205M2MyVnlKaVpDY205M2MyVnlMbE5vTGxkb0ppWkNjbTkzYzJWeUxsTm9MbkJoZFhObEtDa3NlR0lvS0NrOVBrMWlLSFFwS1NsOVpXeHpaU0F5UFQwOVZqOG9WajB3TEhoaUtFNWlLU3hVS0hRcExIUTliblZzYkN4SVlpNW1iM0pGWVdOb0tIbGlLU2s2UjJFb1lHbHVkbUZzYVdRZ2MzUmhkR1U2SUNSN1ZuMWdLVHR5WlhSMWNtNGdRMko5ZlZ4dVpuVnVZM1JwYjI0Z1QySW9ZU2w3Y21WMGRYSnVJRXRpS0dJOVBudGhLQ2t1ZEdobGJpaGlLWDBwZlhaaGNpQlFZajFiWFN4UllqMTdmU3hTWWoxaFBUNTdkbUZ5SUdJOVVXSmJZVjA3Y21WMGRYSnVJSFp2YVdRZ01EMDlQV0kvVGloaEtUcGlmU3hUWWowb0tUMCtYQ0p2WW1wbFkzUmNJajA5ZEhsd1pXOW1JR2RzYjJKaGJGUm9hWE0vWjJ4dlltRnNWR2hwY3pwR2RXNWpkR2x2YmloY0luSmxkSFZ5YmlCMGFHbHpYQ0lwS0Nrc1ZHSTlZVDArZTNaaGNpQmlQVkJpTG14bGJtZDBhRHRRWWk1d2RYTm9LR0VwTzNKbGRIVnliaUJpZlN4VllqMG9ZU3hpS1QwK2UyWnZjaWgyWVhJZ1l6MUJjbkpoZVNoaEtTeGtQVEE3WkR4aE95c3JaQ2xqVzJSZFBYWmlLRWxiWWlzMEttUStQajR5UGo0K01GMHNYQ0p3WVhKaGJXVjBaWElnWENJclpDazdjbVYwZFhKdUlHTjlMRlppUFNoaExHSXBQVDVQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb1lpeGNJbTVoYldWY0lpeDdkbUZzZFdVNllYMHBPMXh1Wm5WdVkzUnBiMjRnVjJJb1lTbDdkbUZ5SUdJOVJuVnVZM1JwYjI0N2FXWW9JU2hpSUdsdWMzUmhibU5sYjJZZ1JuVnVZM1JwYjI0cEtYUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9ZRzVsZDE4Z1kyRnNiR1ZrSUhkcGRHZ2dZMjl1YzNSeWRXTjBiM0lnZEhsd1pTQWtlM1I1Y0dWdlppQmlmU0IzYUdsamFDQnBjeUJ1YjNRZ1lTQm1kVzVqZEdsdmJtQXBPM1poY2lCalBWWmlLR0l1Ym1GdFpYeDhYQ0oxYm10dWIzZHVSblZ1WTNScGIyNU9ZVzFsWENJc1puVnVZM1JwYjI0b0tYdDlLVHRqTG5CeWIzUnZkSGx3WlQxaUxuQnliM1J2ZEhsd1pUdGpQVzVsZHlCak8yRTlZaTVoY0hCc2VTaGpMR0VwTzNKbGRIVnliaUJoSUdsdWMzUmhibU5sYjJZZ1QySnFaV04wUDJFNlkzMWNiblpoY2lCWFBXRTlQakE5UFQxaEpUUW1KaWd3SVQwOVlTVXhNREI4ZkRBOVBUMWhKVFF3TUNrc1dHSTlXekFzTXpFc05qQXNPVEVzTVRJeExERTFNaXd4T0RJc01qRXpMREkwTkN3eU56UXNNekExTERNek5WMHNXV0k5V3pBc016RXNOVGtzT1RBc01USXdMREUxTVN3eE9ERXNNakV5TERJME15d3lOek1zTXpBMExETXpORjBzV21JOVcxMHNKR0k5S0dFc1lpazlQbnRhWWk1c1pXNW5kR2c5TUR0bWIzSW9kbUZ5SUdNN1l6MUZXMkVyS3o0K1BqQmRPeWw3ZG1GeUlHUTlNVEExSVQxak8yUW1QVEV4TWlFOVl6dGlLejFrSmlaaUpUZy9ORG93TzFwaUxuQjFjMmdvTVRFeVBUMWpQMGxiWWo0K1BqSStQajR3WFRveE1EWTlQV00vZDJGYllqNCtQak5kT2pFd05UMDlZejlIVzJJK1BqNHlQajQrTUYwNmVXRmJZajQrUGpNK1BqNHdYU2s3WWlzOVpEODRPalI5Y21WMGRYSnVJRnBpZlN4aFl6MTdmU3hqWXowb0tUMCtlMmxtS0NGaVl5bDdkbUZ5SUdFOWUxVlRSVkk2WENKM1pXSmZkWE5sY2x3aUxFeFBSMDVCVFVVNlhDSjNaV0pmZFhObGNsd2lMRkJCVkVnNlhDSXZYQ0lzVUZkRU9sd2lMMXdpTEVoUFRVVTZYQ0l2YUc5dFpTOTNaV0pmZFhObGNsd2lMRXhCVGtjNktGd2liMkpxWldOMFhDSTlQWFI1Y0dWdlppQnVZWFpwWjJGMGIzSW1KbTVoZG1sbllYUnZjaTVzWVc1bmRXRm5aWE1tSm01aGRtbG5ZWFJ2Y2k1c1lXNW5kV0ZuWlhOYk1GMThmRnh1WENKRFhDSXBMbkpsY0d4aFkyVW9YQ0l0WENJc1hDSmZYQ0lwSzF3aUxsVlVSaTA0WENJc1h6cG1ZWHg4WENJdUwzUm9hWE11Y0hKdlozSmhiVndpZlN4aU8yWnZjaWhpSUdsdUlHRmpLWFp2YVdRZ01EMDlQV0ZqVzJKZFAyUmxiR1YwWlNCaFcySmRPbUZiWWwwOVlXTmJZbDA3ZG1GeUlHTTlXMTA3Wm05eUtHSWdhVzRnWVNsakxuQjFjMmdvWUNSN1luMDlKSHRoVzJKZGZXQXBPMkpqUFdOOWNtVjBkWEp1SUdKamZTeGlZeXhrWXoxYmJuVnNiQ3hiWFN4YlhWMHNaV005V3pNeExESTVMRE14TERNd0xETXhMRE13TERNeExETXhMRE13TERNeExETXdMRE14WFN4bVl6MWJNekVzTWpnc016RXNNekFzTXpFc016QXNNekVzTXpFc016QXNNekVzTXpBc016RmRPMloxYm1OMGFXOXVJR2RqS0dFcGUzWmhjaUJpUFVGeWNtRjVLR0ppS0dFcEt6RXBPMDBvWVN4aUxEQXNZaTVzWlc1bmRHZ3BPM0psZEhWeWJpQmlmVnh1Wm5WdVkzUnBiMjRnYUdNb1lTeGlMR01zWkNsN1puVnVZM1JwYjI0Z1pTaHdMSFVzZVNsN1ptOXlLSEE5WENKdWRXMWlaWEpjSWowOWRIbHdaVzltSUhBL2NDNTBiMU4wY21sdVp5Z3BPbkI4ZkZ3aVhDSTdjQzVzWlc1bmRHZzhkVHNwY0QxNVd6QmRLM0E3Y21WMGRYSnVJSEI5Wm5WdVkzUnBiMjRnWmlod0xIVXBlM0psZEhWeWJpQmxLSEFzZFN4Y0lqQmNJaWw5Wm5WdVkzUnBiMjRnYUNod0xIVXBlMloxYm1OMGFXOXVJSGtvUWlsN2NtVjBkWEp1SURBK1FqOHRNVG93UEVJL01Ub3dmWFpoY2lCQk96QTlQVDBvUVQxNUtIQXVaMlYwUm5Wc2JGbGxZWElvS1MxMUxtZGxkRVoxYkd4WlpXRnlLQ2twS1NZbU1EMDlQU2hCUFhrb2NDNW5aWFJOYjI1MGFDZ3BMWFV1WjJWMFRXOXVkR2dvS1NrcEppWW9RVDE1S0hBdVoyVjBSR0YwWlNncExYVXVaMlYwUkdGMFpTZ3BLU2s3Y21WMGRYSnVJRUY5Wm5WdVkzUnBiMjRnYXlod0tYdHpkMmwwWTJnb2NDNW5aWFJFWVhrb0tTbDdZMkZ6WlNBd09uSmxkSFZ5YmlCdVpYY2dSR0YwWlNod0xtZGxkRVoxYkd4WlpXRnlLQ2t0TVN3eE1Td3lPU2s3WTJGelpTQXhPbkpsZEhWeWJpQndPMk5oYzJVZ01qcHlaWFIxY200Z2JtVjNJRVJoZEdVb2NDNW5aWFJHZFd4c1dXVmhjaWdwTERBc015azdZMkZ6WlNBek9uSmxkSFZ5YmlCdVpYY2dSR0YwWlNod0xtZGxkRVoxYkd4WlpXRnlLQ2tzWEc0d0xESXBPMk5oYzJVZ05EcHlaWFIxY200Z2JtVjNJRVJoZEdVb2NDNW5aWFJHZFd4c1dXVmhjaWdwTERBc01TazdZMkZ6WlNBMU9uSmxkSFZ5YmlCdVpYY2dSR0YwWlNod0xtZGxkRVoxYkd4WlpXRnlLQ2t0TVN3eE1Td3pNU2s3WTJGelpTQTJPbkpsZEhWeWJpQnVaWGNnUkdGMFpTaHdMbWRsZEVaMWJHeFpaV0Z5S0NrdE1Td3hNU3d6TUNsOWZXWjFibU4wYVc5dUlHd29jQ2w3ZG1GeUlIVTljQzVMYUR0bWIzSW9jRDF1WlhjZ1JHRjBaU2dvYm1WM0lFUmhkR1VvY0M1TWFDc3hPVEF3TERBc01Ta3BMbWRsZEZScGJXVW9LU2s3TUR4MU95bDdkbUZ5SUhrOWNDNW5aWFJOYjI1MGFDZ3BMRUU5S0Zjb2NDNW5aWFJHZFd4c1dXVmhjaWdwS1Q5bFl6cG1ZeWxiZVYwN2FXWW9kVDVCTFhBdVoyVjBSR0YwWlNncEtYVXRQVUV0Y0M1blpYUkVZWFJsS0Nrck1TeHdMbk5sZEVSaGRHVW9NU2tzTVRFK2VUOXdMbk5sZEUxdmJuUm9LSGtyTVNrNktIQXVjMlYwVFc5dWRHZ29NQ2tzY0M1elpYUkdkV3hzV1dWaGNpaHdMbWRsZEVaMWJHeFpaV0Z5S0Nrck1Ta3BPMlZzYzJWN2NDNXpaWFJFWVhSbEtIQXVaMlYwUkdGMFpTZ3BLM1VwTzJKeVpXRnJmWDE1UFc1bGR5QkVZWFJsS0hBdVoyVjBSblZzYkZsbFlYSW9LU3N4TERBc05DazdkVDFyS0c1bGR5QkVZWFJsS0hBdVoyVjBSblZzYkZsbFlYSW9LU3hjYmpBc05Da3BPM2s5YXloNUtUdHlaWFIxY200Z01ENDlhQ2gxTEhBcFB6QStQV2dvZVN4d0tUOXdMbWRsZEVaMWJHeFpaV0Z5S0Nrck1UcHdMbWRsZEVaMWJHeFpaV0Z5S0NrNmNDNW5aWFJHZFd4c1dXVmhjaWdwTFRGOVlUNCtQajB3TzJJK1BqNDlNRHRqUGo0K1BUQTdaRDQrUGowd08zWmhjaUJ0UFVsYlpDczBNRDQrUGpJK1BqNHdYVHRrUFh0cWFUcEhXMlErUGo0eVBqNCtNRjBzYVdrNlIxdGtLelErUGo0eVBqNCtNRjBzVVdnNlIxdGtLemcrUGo0eVBqNCtNRjBzVkdnNlIxdGtLekV5UGo0K01qNCtQakJkTEZKb09rZGJaQ3N4Tmo0K1BqSStQajR3WFN4TWFEcEhXMlFyTWpBK1BqNHlQajQrTUYwc1NtZzZSMXRrS3pJMFBqNCtNajQrUGpCZExFdG9Pa2RiWkNzeU9ENCtQakkrUGo0d1hTeHNhVHBIVzJRck16SStQajR5UGo0K01GMHNhR2s2UjF0a0t6TTJQajQrTWo0K1BqQmRMR3RwT20wL1NpaHRLVHBjSWx3aWZUdGpQVW9vWXlrN2JUMTdYQ0lsWTF3aU9sd2lKV0VnSldJZ0pXUWdKVWc2SlUwNkpWTWdKVmxjSWl4Y0lpVkVYQ0k2WENJbGJTOGxaQzhsZVZ3aUxGd2lKVVpjSWpwY0lpVlpMU1Z0TFNWa1hDSXNYQ0lsYUZ3aU9sd2lKV0pjSWl4Y0lpVnlYQ0k2WENJbFNUb2xUVG9sVXlBbGNGd2lMRndpSlZKY0lqcGNJaVZJT2lWTlhDSXNYQ0lsVkZ3aU9sd2lKVWc2SlUwNkpWTmNJaXhjSWlWNFhDSTZYQ0lsYlM4bFpDOGxlVndpTEZ3aUpWaGNJanBjSWlWSU9pVk5PaVZUWENJc1hHNWNJaVZGWTF3aU9sd2lKV05jSWl4Y0lpVkZRMXdpT2x3aUpVTmNJaXhjSWlWRmVGd2lPbHdpSlcwdkpXUXZKWGxjSWl4Y0lpVkZXRndpT2x3aUpVZzZKVTA2SlZOY0lpeGNJaVZGZVZ3aU9sd2lKWGxjSWl4Y0lpVkZXVndpT2x3aUpWbGNJaXhjSWlWUFpGd2lPbHdpSldSY0lpeGNJaVZQWlZ3aU9sd2lKV1ZjSWl4Y0lpVlBTRndpT2x3aUpVaGNJaXhjSWlWUFNWd2lPbHdpSlVsY0lpeGNJaVZQYlZ3aU9sd2lKVzFjSWl4Y0lpVlBUVndpT2x3aUpVMWNJaXhjSWlWUFUxd2lPbHdpSlZOY0lpeGNJaVZQZFZ3aU9sd2lKWFZjSWl4Y0lpVlBWVndpT2x3aUpWVmNJaXhjSWlWUFZsd2lPbHdpSlZaY0lpeGNJaVZQZDF3aU9sd2lKWGRjSWl4Y0lpVlBWMXdpT2x3aUpWZGNJaXhjSWlWUGVWd2lPbHdpSlhsY0luMDdabTl5S0haaGNpQnVJR2x1SUcwcFl6MWpMbkpsY0d4aFkyVW9ibVYzSUZKbFowVjRjQ2h1TEZ3aVoxd2lLU3h0VzI1ZEtUdDJZWElnY1QxY0lsTjFibVJoZVNCTmIyNWtZWGtnVkhWbGMyUmhlU0JYWldSdVpYTmtZWGtnVkdoMWNuTmtZWGtnUm5KcFpHRjVJRk5oZEhWeVpHRjVYQ0l1YzNCc2FYUW9YQ0lnWENJcExISTlYQ0pLWVc1MVlYSjVJRVpsWW5KMVlYSjVJRTFoY21Ob0lFRndjbWxzSUUxaGVTQktkVzVsSUVwMWJIa2dRWFZuZFhOMElGTmxjSFJsYldKbGNpQlBZM1J2WW1WeUlFNXZkbVZ0WW1WeUlFUmxZMlZ0WW1WeVhDSXVjM0JzYVhRb1hDSWdYQ0lwTzIwOWUxd2lKV0ZjSWpwd1BUNXhXM0F1U21oZExuTjFZbk4wY21sdVp5Z3dMRE1wTEZ3aUpVRmNJanB3UFQ1eFczQXVTbWhkTEZ3aUpXSmNJanB3UFQ1Y2JuSmJjQzVTYUYwdWMzVmljM1J5YVc1bktEQXNNeWtzWENJbFFsd2lPbkE5UG5KYmNDNVNhRjBzWENJbFExd2lPbkE5UG1Zb0tIQXVUR2dyTVRrd01Da3ZNVEF3ZkRBc01pa3NYQ0lsWkZ3aU9uQTlQbVlvY0M1VWFDd3lLU3hjSWlWbFhDSTZjRDArWlNod0xsUm9MRElzWENJZ1hDSXBMRndpSldkY0lqcHdQVDVzS0hBcExuUnZVM1J5YVc1bktDa3VjM1ZpYzNSeWFXNW5LRElwTEZ3aUpVZGNJanBzTEZ3aUpVaGNJanB3UFQ1bUtIQXVVV2dzTWlrc1hDSWxTVndpT25BOVBudHdQWEF1VVdnN01EMDljRDl3UFRFeU9qRXlQSEFtSmlod0xUMHhNaWs3Y21WMGRYSnVJR1lvY0N3eUtYMHNYQ0lsYWx3aU9uQTlQbnRtYjNJb2RtRnlJSFU5TUN4NVBUQTdlVHc5Y0M1U2FDMHhPM1VyUFNoWEtIQXVUR2dyTVRrd01Day9aV002Wm1NcFcza3JLMTBwTzNKbGRIVnliaUJtS0hBdVZHZ3JkU3d6S1gwc1hDSWxiVndpT25BOVBtWW9jQzVTYUNzeExESXBMRndpSlUxY0lqcHdQVDVtS0hBdWFXa3NNaWtzWENJbGJsd2lPaWdwUFQ1Y0lseGNibHdpTEZ3aUpYQmNJanB3UFQ0d1BEMXdMbEZvSmlZeE1qNXdMbEZvUDF3aVFVMWNJanBjSWxCTlhDSXNYQ0lsVTF3aU9uQTlQbVlvY0M1cWFTd3lLU3hjSWlWMFhDSTZLQ2s5UGx3aVhGeDBYQ0lzWENJbGRWd2lPbkE5UG5BdVNtaDhmRGNzWENJbFZWd2lPbkE5UG1Zb1RXRjBhQzVtYkc5dmNpZ29jQzVMYUNzM0xYQXVTbWdwTHpjcExESXBMRndpSlZaY0lqcHdQVDU3ZG1GeUlIVTlYRzVOWVhSb0xtWnNiMjl5S0Nod0xrdG9LemN0S0hBdVNtZ3JOaWtsTnlrdk55azdNajQ5S0hBdVNtZ3JNemN4TFhBdVMyZ3RNaWtsTnlZbWRTc3JPMmxtS0hVcE5UTTlQWFVtSmloNVBTaHdMa3BvS3pNM01TMXdMa3RvS1NVM0xEUTlQWGw4ZkRNOVBYa21KbGNvY0M1TWFDbDhmQ2gxUFRFcEtUdGxiSE5sZTNVOU5USTdkbUZ5SUhrOUtIQXVTbWdyTnkxd0xrdG9MVEVwSlRjN0tEUTlQWGw4ZkRVOVBYa21KbGNvY0M1TWFDVTBNREF0TVNrcEppWjFLeXQ5Y21WMGRYSnVJR1lvZFN3eUtYMHNYQ0lsZDF3aU9uQTlQbkF1U21nc1hDSWxWMXdpT25BOVBtWW9UV0YwYUM1bWJHOXZjaWdvY0M1TGFDczNMU2h3TGtwb0t6WXBKVGNwTHpjcExESXBMRndpSlhsY0lqcHdQVDRvY0M1TWFDc3hPVEF3S1M1MGIxTjBjbWx1WnlncExuTjFZbk4wY21sdVp5Z3lLU3hjSWlWWlhDSTZjRDArY0M1TWFDc3hPVEF3TEZ3aUpYcGNJanB3UFQ1N2NEMXdMbWhwTzNaaGNpQjFQVEE4UFhBN2NEMU5ZWFJvTG1GaWN5aHdLUzgyTUR0eVpYUjFjbTRvZFQ5Y0lpdGNJanBjSWkxY0lpa3JVM1J5YVc1bktGd2lNREF3TUZ3aUt5aHdMell3S2pFd01DdHdKVFl3S1NrdWMyeHBZMlVvTFRRcGZTeGNJaVZhWENJNmNEMCtjQzVyYVN4Y0lpVWxYQ0k2S0NrOVBsd2lKVndpZlR0alBXTXVjbVZ3YkdGalpTZ3ZKU1V2Wnl4Y0lseGNlREF3WEZ4NE1EQmNJaWs3Wm05eUtHNGdhVzRnYlNsakxtbHVZMngxWkdWektHNHBKaVpjYmloalBXTXVjbVZ3YkdGalpTaHVaWGNnVW1WblJYaHdLRzRzWENKblhDSXBMRzFiYmwwb1pDa3BLVHRqUFdNdWNtVndiR0ZqWlNndlhGd3dYRnd3TDJjc1hDSWxYQ0lwTzI0OVoyTW9ZeWs3YVdZb2JpNXNaVzVuZEdnK1lpbHlaWFIxY200Z01EdDZMbk5sZENodUxHRStQajR3S1R0eVpYUjFjbTRnYmk1c1pXNW5kR2d0TVgxbWIzSW9kbUZ5SUdsalBVRnljbUY1S0RJMU5pa3NhbU05TURzeU5UWSthbU03S3l0cVl5bHBZMXRxWTEwOVUzUnlhVzVuTG1aeWIyMURhR0Z5UTI5a1pTaHFZeWs3WTJJOWFXTTdUejFuTGtKcGJtUnBibWRGY25KdmNqMWpiR0Z6Y3lCbGVIUmxibVJ6SUVWeWNtOXllMk52Ym5OMGNuVmpkRzl5S0dFcGUzTjFjR1Z5S0dFcE8zUm9hWE11Ym1GdFpUMWNJa0pwYm1ScGJtZEZjbkp2Y2x3aWZYMDdaeTVKYm5SbGNtNWhiRVZ5Y205eVBXTnNZWE56SUdWNGRHVnVaSE1nUlhKeWIzSjdZMjl1YzNSeWRXTjBiM0lvWVNsN2MzVndaWElvWVNrN2RHaHBjeTV1WVcxbFBWd2lTVzUwWlhKdVlXeEZjbkp2Y2x3aWZYMDdVUzV3ZFhOb0tEQXNNU3gyYjJsa0lEQXNNU3h1ZFd4c0xERXNJVEFzTVN3aE1Td3hLVHRuTG1OdmRXNTBYMlZ0ZG1Gc1gyaGhibVJzWlhNOUtDazlQbEV1YkdWdVozUm9Mekl0TlMxcFlpNXNaVzVuZEdnN1hHNTJZWElnUTJZOWUySmtPbVoxYm1OMGFXOXVLR0VzWWl4aktYdHlaWFIxY200Z1QySW9ZWE41Ym1Nb0tUMCtlMkYzWVdsMElHY3VZbWtvWVN4aUxHTXBmU2w5TEhZNlpuVnVZM1JwYjI0b1lTbDdZVDF1WlhjZ1UyRW9ZVDQrUGpBcE96QTlQWHBiWVM1SmFDc3hNajQrUGpCZEppWW9lbHRoTGtsb0t6RXlQajQrTUYwOU1TeFNZUzB0S1R0NlcyRXVTV2dyTVRNK1BqNHdYVDB3TzFGaExuQjFjMmdvWVNrN2EyTW9ZUzVPYUNrN2FXWW9iR01vU1Z0aExrbG9LelErUGo0eVBqNCtNRjBwS1dFOVNWdGhMazVvUGo0K01qNCtQakJkTzJWc2MyVjdkbUZ5SUdJOVNWdGhMa2xvS3pFMlBqNCtNajQrUGpCZE8yRTlNQ0U5UFdJL1lqcGhMazVvZlhKbGRIVnliaUJoZlN4T09pZ3BQVDU3V0Nnd0xEQXBPM1poY2lCaFBWRmhMbkJ2Y0NncE8yMWpLR0V1VG1ncE8wdzlNSDBzWVRwbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCYVlTaGJYU2w5TEcwNlpuVnVZM1JwYjI0b1lTbDdjbVYwZFhKdUlGcGhLRnRoUGo0K01GMHBmU3g0T21aMWJtTjBhVzl1S0dFc1lpbDdjbVYwZFhKdUlGcGhLRnRoUGo0K01DeGlQajQrTUYwcGZTeHhPbVoxYm1OMGFXOXVLR0VzWWl4aktYdHlaWFIxY200Z1dtRW9XMkUrUGo0d0xHSStQajR3TEdNK1BqNHdYU2w5TEVKaU9pZ3BQVDU3ZG1GeUlHRTlVV0V1Y0c5d0tDazdZWHg4UjJFb1hDSnVieUJsZUdObGNIUnBiMjRnZEc4Z2RHaHliM2RjSWlrN1hHNTJZWElnWWoxaExrNW9PekE5UFhwYllTNUphQ3N4TXo0K1BqQmRKaVlvVVdFdWNIVnphQ2hoS1N4NlcyRXVTV2dyTVRNK1BqNHdYVDB4TEhwYllTNUphQ3N4TWo0K1BqQmRQVEFzVW1Fckt5azdURDFpTzNSb2NtOTNJRXc3ZlN4ek9tWjFibU4wYVc5dUtHRXNZaXhqS1h0aFBqNCtQVEE3ZG1GeUlHUTlibVYzSUZOaEtHRXBPMGxiWkM1SmFDc3hOajQrUGpJK1BqNHdYVDB3TzBsYlpDNUphQ3MwUGo0K01qNCtQakJkUFdJK1BqNHdPMGxiWkM1SmFDczRQajQrTWo0K1BqQmRQV00rUGo0d08wdzlZVHRTWVNzck8zUm9jbTkzSUV3N2ZTeG1Zam9vS1QwK1VtRXNaenBtZFc1amRHbHZiaWhoS1h0TWZIdzlZVDQrUGpBN2RHaHliM2NnVER0OUxFTmlPbVoxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJREI5TENSak9tWjFibU4wYVc5dUtDbDdmU3hOWXpwbWRXNWpkR2x2YmlncGUzMHNUMk02Wm5WdVkzUnBiMjRvS1h0OUxFZGpPbVoxYm1OMGFXOXVLQ2w3Y21WMGRYSnVJREI5TEZwak9tWjFibU4wYVc5dUtDbDdmU3hWWXpwbWRXNWpkR2x2YmlncGUzMHNXV002Wm5WdVkzUnBiMjRvS1h0OUxGOWlPbVoxYm1OMGFXOXVLQ2w3ZlN4T1l6cG1kVzVqZEdsdmJpZ3BlMzBzUzJNNlpuVnVZM1JwYjI0b0tYdDlMRjlqT21aMWJtTjBhVzl1S0NsN2ZTeE1ZenBtZFc1amRHbHZiaWdwZTMwc1YySTZablZ1WTNScGIyNG9ZU3hjYm1Jc1l5bDdZajFPS0dJK1BqNHdLVHRRS0dFK1BqNHdMSHR1WVcxbE9tSXNabkp2YlZkcGNtVlVlWEJsT21ROVBtUXNkRzlYYVhKbFZIbHdaVHBtZFc1amRHbHZiaWhrTEdVcGUybG1LRndpWW1sbmFXNTBYQ0loUFhSNWNHVnZaaUJsSmlaY0ltNTFiV0psY2x3aUlUMTBlWEJsYjJZZ1pTbDBhSEp2ZHlCdWRXeHNQVDA5WlQ5bFBWd2liblZzYkZ3aU9paGtQWFI1Y0dWdlppQmxMR1U5WENKdlltcGxZM1JjSWowOVBXUjhmRndpWVhKeVlYbGNJajA5UFdSOGZGd2lablZ1WTNScGIyNWNJajA5UFdRL1pTNTBiMU4wY21sdVp5Z3BPbHdpWENJclpTa3NibVYzSUZSNWNHVkZjbkp2Y2loZ1EyRnVibTkwSUdOdmJuWmxjblFnWENJa2UyVjlYQ0lnZEc4Z0pIdDBhR2x6TG01aGJXVjlZQ2s3WENKdWRXMWlaWEpjSWowOWRIbHdaVzltSUdVbUppaGxQVUpwWjBsdWRDaGxLU2s3Y21WMGRYSnVJR1Y5TEdGeVoxQmhZMnRCWkhaaGJtTmxPamdzY21WaFpGWmhiSFZsUm5KdmJWQnZhVzUwWlhJNmFHSW9ZaXhqUGo0K01Dd3RNVDA5WWk1cGJtUmxlRTltS0Z3aWRWd2lLU2tzVFdnNmJuVnNiSDBwZlN4Rll6cG1kVzVqZEdsdmJpaGhMR0lzWXl4a0tYdGlQVTRvWWo0K1BqQXBPMUFvWVQ0K1BqQXNlMjVoYldVNllpeG1jbTl0VjJseVpWUjVjR1U2Wm5WdVkzUnBiMjRvWlNsN2NtVjBkWEp1SVNGbGZTeDBiMWRwY21WVWVYQmxPbVoxYm1OMGFXOXVLR1VzWEc1bUtYdHlaWFIxY200Z1pqOWpPbVI5TEdGeVoxQmhZMnRCWkhaaGJtTmxPamdzY21WaFpGWmhiSFZsUm5KdmJWQnZhVzUwWlhJNlpuVnVZM1JwYjI0b1pTbDdjbVYwZFhKdUlIUm9hWE11Wm5KdmJWZHBjbVZVZVhCbEtFVmJaVDQrUGpCZEtYMHNUV2c2Ym5Wc2JIMHBmU3hEWXpwbWRXNWpkR2x2YmloaEtYdHlaWFIxY200Z1VDaGhQajQrTUN4c1lpbDlMRlppT21aMWJtTjBhVzl1S0dFc1lpeGpLWHRpUFU0b1lqNCtQakFwTzFBb1lUNCtQakFzZTI1aGJXVTZZaXhtY205dFYybHlaVlI1Y0dVNlpEMCtaQ3gwYjFkcGNtVlVlWEJsT2loa0xHVXBQVDVsTEdGeVoxQmhZMnRCWkhaaGJtTmxPamdzY21WaFpGWmhiSFZsUm5KdmJWQnZhVzUwWlhJNmJXSW9ZaXhqUGo0K01Da3NUV2c2Ym5Wc2JIMHBmU3hCWVRwbWRXNWpkR2x2YmloaExHSXNZeXhrTEdVcGUyRStQajQ5TUR0alBqNCtQVEE3WWoxT0tHSStQajR3S1RzdE1UMDlQV1VtSmlobFBUUXlPVFE1TmpjeU9UVXBPMlU5YXowK2F6dHBaaWd3UFQwOVpDbDdkbUZ5SUdZOU16SXRPQ3BqTzJVOWF6MCthenc4Wmo0K1BtWjlkbUZ5SUdnOVlpNXBibU5zZFdSbGN5aGNJblZ1YzJsbmJtVmtYQ0lwUDJaMWJtTjBhVzl1S0dzc2JDbDdjbVYwZFhKdUlHdytQajR3ZlRwbWRXNWpkR2x2YmlockxHd3BlM0psZEhWeWJpQnNmVHRRS0dFc2UyNWhiV1U2WWl4Y2JtWnliMjFYYVhKbFZIbHdaVHBsTEhSdlYybHlaVlI1Y0dVNmFDeGhjbWRRWVdOclFXUjJZVzVqWlRvNExISmxZV1JXWVd4MVpVWnliMjFRYjJsdWRHVnlPbWhpS0dJc1l5d3dJVDA5WkNrc1RXZzZiblZzYkgwcGZTeGZPbVoxYm1OMGFXOXVLR0VzWWl4aktYdG1kVzVqZEdsdmJpQmtLR1lwZTNKbGRIVnliaUJ1WlhjZ1pTaDZMbUoxWm1abGNpeEpXMllyTkQ0K1BqSStQajR3WFN4SlcyWStQajR5UGo0K01GMHBmWFpoY2lCbFBWdEpiblE0UVhKeVlYa3NWV2x1ZERoQmNuSmhlU3hKYm5ReE5rRnljbUY1TEZWcGJuUXhOa0Z5Y21GNUxFbHVkRE15UVhKeVlYa3NWV2x1ZERNeVFYSnlZWGtzUm14dllYUXpNa0Z5Y21GNUxFWnNiMkYwTmpSQmNuSmhlU3hDYVdkSmJuUTJORUZ5Y21GNUxFSnBaMVZwYm5RMk5FRnljbUY1WFZ0aVhUdGpQVTRvWXo0K1BqQXBPMUFvWVQ0K1BqQXNlMjVoYldVNll5eG1jbTl0VjJseVpWUjVjR1U2WkN4aGNtZFFZV05yUVdSMllXNWpaVG80TEhKbFlXUldZV3gxWlVaeWIyMVFiMmx1ZEdWeU9tUjlMSHRZYURvaE1IMHBmU3hZWWpwbWRXNWpkR2x2YmloaExHSXBlMkk5VGloaVBqNCtNQ2s3ZG1GeUlHTTlYQ0p6ZEdRNk9uTjBjbWx1WjF3aVBUMDlZanRRS0dFK1BqNHdMSHR1WVcxbE9tSXNabkp2YlZkcGNtVlVlWEJsT21aMWJtTjBhVzl1S0dRcGUzWmhjaUJsUFVsYlpENCtQbHh1TWo0K1BqQmRMR1k5WkNzME8ybG1LR01wWm05eUtIWmhjaUJvUFdZc2F6MHdPMnM4UFdVN0t5dHJLWHQyWVhJZ2JEMW1LMnM3YVdZb2F6MDlaWHg4TUQwOVJWdHNQajQrTUYwcGUyZzlTaWhvTEd3dGFDazdhV1lvZG05cFpDQXdQVDA5YlNsMllYSWdiVDFvTzJWc2MyVWdiU3M5VTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlNnd0tTeHRLejFvTzJnOWJDc3hmWDFsYkhObGUyMDlRWEp5WVhrb1pTazdabTl5S0dzOU1EdHJQR1U3S3l0cktXMWJhMTA5VTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlNoRlcyWXJhejQrUGpCZEtUdHRQVzB1YW05cGJpaGNJbHdpS1gxVUtHUXBPM0psZEhWeWJpQnRmU3gwYjFkcGNtVlVlWEJsT21aMWJtTjBhVzl1S0dRc1pTbDdaU0JwYm5OMFlXNWpaVzltSUVGeWNtRjVRblZtWm1WeUppWW9aVDF1WlhjZ1ZXbHVkRGhCY25KaGVTaGxLU2s3ZG1GeUlHWTlYQ0p6ZEhKcGJtZGNJajA5ZEhsd1pXOW1JR1U3YVdZb0lTaG1mSHhsSUdsdWMzUmhibU5sYjJZZ1ZXbHVkRGhCY25KaGVYeDhaU0JwYm5OMFlXNWpaVzltSUZWcGJuUTRRMnhoYlhCbFpFRnljbUY1Zkh4bElHbHVjM1JoYm1ObGIyWWdTVzUwT0VGeWNtRjVLU2wwYUhKdmR5QnVaWGNnVHloY0lrTmhibTV2ZENCd1lYTnpJRzV2YmkxemRISnBibWNnZEc4Z2MzUmtPanB6ZEhKcGJtZGNJaWs3ZG1GeUlHZzlZeVltWmo5aVlpaGxLVHBjYm1VdWJHVnVaM1JvTzNaaGNpQnJQVXBpS0RRcmFDc3hLU3hzUFdzck5EdEpXMnMrUGo0eVBqNCtNRjA5YUR0cFppaGpKaVptS1Uwb1pTeEZMR3dzYUNzeEtUdGxiSE5sSUdsbUtHWXBabTl5S0dZOU1EdG1QR2c3S3l0bUtYdDJZWElnYlQxbExtTm9ZWEpEYjJSbFFYUW9aaWs3YVdZb01qVTFQRzBwZEdoeWIzY2dWQ2hzS1N4dVpYY2dUeWhjSWxOMGNtbHVaeUJvWVhNZ1ZWUkdMVEUySUdOdlpHVWdkVzVwZEhNZ2RHaGhkQ0JrYnlCdWIzUWdabWwwSUdsdUlEZ2dZbWwwYzF3aUtUdEZXMndyWmo0K1BqQmRQVzE5Wld4elpTQm1iM0lvWmowd08yWThhRHNySzJZcFJWdHNLMlkrUGo0d1hUMWxXMlpkTzI1MWJHd2hQVDFrSmlaa0xuQjFjMmdvVkN4cktUdHlaWFIxY200Z2EzMHNZWEpuVUdGamEwRmtkbUZ1WTJVNk9DeHlaV0ZrVm1Gc2RXVkdjbTl0VUc5cGJuUmxjanByWWl4TmFDaGtLWHRVS0dRcGZYMHBmU3hCWWpwbWRXNWpkR2x2YmloaExHSXNZeWw3WWo0K1BqMHdPMk0rUGo0OU1EdGpQVTRvWXlrN2FXWW9NajA5UFdJcGUzWmhjaUJrUFc5aU8zWmhjaUJsUFhCaU8zWmhjaUJtUFhGaU8zWmhjaUJvUFdzOVBuVmhXMnMrUGo0eFBqNCtNRjE5Wld4elpTQTBQVDA5WWlZbUtHUTljbUlzWlQxellpeG1QWFJpTEdnOWF6MCtTVnRyUGo0K01qNCtQakJkS1R0UUtHRStQajR3TEh0dVlXMWxPbU1zWEc1bWNtOXRWMmx5WlZSNWNHVTZhejArZTJadmNpaDJZWElnYkQxSlcycytQajR5UGo0K01GMHNiU3h1UFdzck5DeHhQVEE3Y1R3OWJEc3JLM0VwZTNaaGNpQnlQV3NyTkN0eEttSTdhV1lvY1QwOWJIeDhNRDA5YUNoeUtTbHVQV1FvYml4eUxXNHBMSFp2YVdRZ01EMDlQVzAvYlQxdU9paHRLejFUZEhKcGJtY3Vabkp2YlVOb1lYSkRiMlJsS0RBcExHMHJQVzRwTEc0OWNpdGlmVlFvYXlrN2NtVjBkWEp1SUcxOUxIUnZWMmx5WlZSNWNHVTZLR3NzYkNrOVBudHBaaWhjSW5OMGNtbHVaMXdpSVQxMGVYQmxiMllnYkNsMGFISnZkeUJ1WlhjZ1R5aGdRMkZ1Ym05MElIQmhjM01nYm05dUxYTjBjbWx1WnlCMGJ5QkRLeXNnYzNSeWFXNW5JSFI1Y0dVZ0pIdGpmV0FwTzNaaGNpQnRQV1lvYkNrc2JqMUtZaWcwSzIwcllpazdTVnR1UGo0K01qNCtQakJkUFcwdllqdGxLR3dzYmlzMExHMHJZaWs3Ym5Wc2JDRTlQV3NtSm1zdWNIVnphQ2hVTEc0cE8zSmxkSFZ5YmlCdWZTeGhjbWRRWVdOclFXUjJZVzVqWlRvNExISmxZV1JXWVd4MVpVWnliMjFRYjJsdWRHVnlPbXRpTEUxb0tHc3BlMVFvYXlsOWZTbDlMRVpqT21aMWJtTjBhVzl1S0dFc1lpbDdZajFPS0dJK1BqNHdLVHRRS0dFK1BqNHdMSHRaYURvaE1DeHVZVzFsT21Jc1lYSm5VR0ZqYTBGa2RtRnVZMlU2TUN4bWNtOXRWMmx5WlZSNWNHVTZLQ2s5UGx4dWUzMHNkRzlYYVhKbFZIbHdaVG9vS1QwK2UzMTlLWDBzWVdRNktDazlQakVzYTJRNlpuVnVZM1JwYjI0b1lTeGlMR01wZTJJK1BqNDlNRHRqUGo0K1BUQTdZVDFTS0dFK1BqNHdLVHRpUFhaaUtHSXNYQ0psYlhaaGJEbzZZWE5jSWlrN2NtVjBkWEp1SUhkaUtHSXNZeXhoS1gwc1EyUTZablZ1WTNScGIyNG9ZU2w3WVQ0K1BqMHdPM0psZEhWeWJpQlBZaWdvS1QwK2UyRTlVaWhoS1R0eVpYUjFjbTRnWVM1MGFHVnVLRk1wZlNsOUxIVmtPbVoxYm1OMGFXOXVLR0VzWWl4akxHUXBlMk0rUGo0OU1EdGtQajQrUFRBN1lUMVFZbHRoUGo0K01GMDdZajFTS0dJK1BqNHdLVHR5WlhSMWNtNGdZU2h1ZFd4c0xHSXNZeXhrS1gwc2FXRTZablZ1WTNScGIyNG9ZU3hpTEdNc1pDeGxLWHRqUGo0K1BUQTdaRDQrUGowd08yVStQajQ5TUR0aFBWQmlXMkUrUGo0d1hUdGlQVklvWWo0K1BqQXBPMk05VW1Jb1l5azdjbVYwZFhKdUlHRW9ZaXhpVzJOZExHUXNaU2w5TEVKak9tcGlMSEZrT21aMWJtTjBhVzl1S0dFc1lpbDdZajQrUGowd08yRTlVaWhoUGo0K01DazdZajFTS0dJcE8zSmxkSFZ5YmlCaFBUMWlmU3g2WkRwbWRXNWpkR2x2YmloaEtYdGhQajQrUFRBN2FXWW9NRDA5UFdFcGNtVjBkWEp1SUZNb1UySW9LU2s3WVQxU1lpaGhLVHR5WlhSMWNtNGdVeWhUWWlncFcyRmRLWDBzYUdFNlpuVnVZM1JwYjI0b1lTeGNibUlzWXlsN1lqMVZZaWhoTEdJK1BqNHdLVHQyWVhJZ1pEMWlMbk5vYVdaMEtDazdZUzB0TzNaaGNpQmxQVndpY21WMGRYSnVJR1oxYm1OMGFXOXVJQ2h2WW1vc0lHWjFibU1zSUdSbGMzUnlkV04wYjNKelVtVm1MQ0JoY21kektTQjdYRnh1WENJc1pqMHdMR2c5VzEwN01EMDlQV01tSm1ndWNIVnphQ2hjSW05aWFsd2lLVHRtYjNJb2RtRnlJR3M5VzF3aWNtVjBWSGx3WlZ3aVhTeHNQVnRrWFN4dFBUQTdiVHhoT3lzcmJTbG9MbkIxYzJnb1hDSmhjbWRjSWl0dEtTeHJMbkIxYzJnb1hDSmhjbWRVZVhCbFhDSXJiU2tzYkM1d2RYTm9LR0piYlYwcExHVXJQV0FnSUhaaGNpQmhjbWNrZTIxOUlEMGdZWEpuVkhsd1pTUjdiWDB1Y21WaFpGWmhiSFZsUm5KdmJWQnZhVzUwWlhJb1lYSm5jeVI3Wmo5Y0lpdGNJaXRtT2x3aVhDSjlLVHRjWEc1Z0xHWXJQV0piYlYwdVlYSm5VR0ZqYTBGa2RtRnVZMlU3WlNzOVlDQWdkbUZ5SUhKMklEMGdKSHN4UFQwOVl6OWNJbTVsZHlCbWRXNWpYQ0k2WENKbWRXNWpMbU5oYkd4Y0luMG9KSHRvTG1wdmFXNG9YQ0lzSUZ3aUtYMHBPMXhjYm1BN1pDNVphSHg4S0dzdWNIVnphQ2hjSW1WdGRtRnNYM0psZEhWeWJsWmhiSFZsWENJcExHd3VjSFZ6YUNoM1lpa3NaU3M5WENJZ0lISmxkSFZ5YmlCbGJYWmhiRjl5WlhSMWNtNVdZV3gxWlNoeVpYUlVlWEJsTENCa1pYTjBjblZqZEc5eWMxSmxaaXdnY25ZcE8xeGNibHdpS1R0ckxuQjFjMmdvWlN0Y2Jsd2lmVHRjWEc1Y0lpazdZVDFYWWlocktTZ3VMaTVzS1R0alBXQnRaWFJvYjJSRFlXeHNaWEk4S0NSN1lpNXRZWEFvYmowK2JpNXVZVzFsS1M1cWIybHVLRndpTENCY0lpbDlLU0E5UGlBa2UyUXVibUZ0WlgwK1lEdHlaWFIxY200Z1ZHSW9WbUlvWXl4aEtTbDlMSGxrT21aMWJtTjBhVzl1S0dFc1lpbDdZajQrUGowd08yRTlVaWhoUGo0K01DazdZajFTS0dJcE8zSmxkSFZ5YmlCVEtHRmJZbDBwZlN4aVlUcG1kVzVqZEdsdmJpaGhLWHRoUGo0K1BUQTdPVHhoSmlZb1VWdGhLekZkS3oweEtYMHNiV1E2Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnVXloYlhTbDlMR2hrT21aMWJtTjBhVzl1S0dFcGUyRTlVaWhoUGo0K01DazdabTl5S0haaGNpQmlQVUZ5Y21GNUtHRXViR1Z1WjNSb0tTeGpQVEE3WXp4aExteGxibWQwYUR0akt5c3BZbHRqWFQxaFcyTmRPM0psZEhWeWJpQlRLR0lwZlN4Vk9tWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQlRLRkppS0dFK1BqNHdLU2w5TEZoaE9tWjFibU4wYVc5dUtDbDdjbVYwZFhKdUlGTW9lMzBwZlN4MlpEcG1kVzVqZEdsdmJpaGhLWHRoUGo0K1BUQTdabTl5S0haaGNpQmlQVklvWVNrN1lpNXNaVzVuZEdnN0tYdDJZWElnWXoxaUxuQnZjQ2dwTzJJdWNHOXdLQ2tvWXlsOWFtSW9ZU2w5TEhOa09tWjFibU4wYVc5dUtHRXNZaXhqS1h0aVBqNCtQVEE3WXo0K1BqMHdPMXh1WVQxU0tHRStQajR3S1R0aVBWSW9ZaWs3WXoxU0tHTXBPMkZiWWwwOVkzMHNlbUk2Wm5WdVkzUnBiMjRvWVN4aUtYdGlQajQrUFRBN1lUMTJZaWhoUGo0K01DeGNJbDlsYlhaaGJGOTBZV3RsWDNaaGJIVmxYQ0lwTzJFOVlTNXlaV0ZrVm1Gc2RXVkdjbTl0VUc5cGJuUmxjaWhpS1R0eVpYUjFjbTRnVXloaEtYMHNVbU02Wm5WdVkzUnBiMjRvWVN4aUtYdGhQUzA1TURBM01UazVNalUwTnpRd09Ua3lQbUY4ZkRrd01EY3hPVGt5TlRRM05EQTVPVEk4WVQ5T1lVNDZUblZ0WW1WeUtHRXBPMkkrUGo0OU1EdGhQVzVsZHlCRVlYUmxLREZGTXlwaEtUdEhXMkkrUGo0eVBqNCtNRjA5WVM1blpYUlZWRU5UWldOdmJtUnpLQ2s3UjF0aUt6UStQajR5UGo0K01GMDlZUzVuWlhSVlZFTk5hVzUxZEdWektDazdSMXRpS3pnK1BqNHlQajQrTUYwOVlTNW5aWFJWVkVOSWIzVnljeWdwTzBkYllpc3hNajQrUGpJK1BqNHdYVDFoTG1kbGRGVlVRMFJoZEdVb0tUdEhXMklyTVRZK1BqNHlQajQrTUYwOVlTNW5aWFJWVkVOTmIyNTBhQ2dwTzBkYllpc3lNRDQrUGpJK1BqNHdYVDFoTG1kbGRGVlVRMFoxYkd4WlpXRnlLQ2t0TVRrd01EdEhXMklyTWpRK1BqNHlQajQrTUYwOVlTNW5aWFJWVkVORVlYa29LVHRIVzJJck1qZytQajR5UGo0K01GMDlLR0V1WjJWMFZHbHRaU2dwTFVSaGRHVXVWVlJES0dFdVoyVjBWVlJEUm5Wc2JGbGxZWElvS1N4Y2JqQXNNU3d3TERBc01Dd3dLU2t2T0RZMFJUVjhNSDBzVTJNNlpuVnVZM1JwYjI0b1lTeGlLWHRoUFMwNU1EQTNNVGs1TWpVME56UXdPVGt5UG1GOGZEa3dNRGN4T1RreU5UUTNOREE1T1RJOFlUOU9ZVTQ2VG5WdFltVnlLR0VwTzJJK1BqNDlNRHRoUFc1bGR5QkVZWFJsS0RGRk15cGhLVHRIVzJJK1BqNHlQajQrTUYwOVlTNW5aWFJUWldOdmJtUnpLQ2s3UjF0aUt6UStQajR5UGo0K01GMDlZUzVuWlhSTmFXNTFkR1Z6S0NrN1IxdGlLemcrUGo0eVBqNCtNRjA5WVM1blpYUkliM1Z5Y3lncE8wZGJZaXN4TWo0K1BqSStQajR3WFQxaExtZGxkRVJoZEdVb0tUdEhXMklyTVRZK1BqNHlQajQrTUYwOVlTNW5aWFJOYjI1MGFDZ3BPMGRiWWlzeU1ENCtQakkrUGo0d1hUMWhMbWRsZEVaMWJHeFpaV0Z5S0NrdE1Ua3dNRHRIVzJJck1qUStQajR5UGo0K01GMDlZUzVuWlhSRVlYa29LVHRIVzJJck1qZytQajR5UGo0K01GMDlLRmNvWVM1blpYUkdkV3hzV1dWaGNpZ3BLVDlZWWpwWllpbGJZUzVuWlhSTmIyNTBhQ2dwWFN0aExtZGxkRVJoZEdVb0tTMHhmREE3UjF0aUt6TTJQajQrTWo0K1BqQmRQUzBvTmpBcVlTNW5aWFJVYVcxbGVtOXVaVTltWm5ObGRDZ3BLVHQyWVhJZ1l6MG9ibVYzSUVSaGRHVW9ZUzVuWlhSR2RXeHNXV1ZoY2lncExEWXNNU2twTG1kbGRGUnBiV1Y2YjI1bFQyWm1jMlYwS0Nrc1hHNWtQU2h1WlhjZ1JHRjBaU2hoTG1kbGRFWjFiR3haWldGeUtDa3NNQ3d4S1NrdVoyVjBWR2x0WlhwdmJtVlBabVp6WlhRb0tUdEhXMklyTXpJK1BqNHlQajQrTUYwOUtHTWhQV1FtSm1FdVoyVjBWR2x0WlhwdmJtVlBabVp6WlhRb0tUMDlUV0YwYUM1dGFXNG9aQ3hqS1NsOE1IMHNWR002Wm5WdVkzUnBiMjRvWVNsN1lUNCtQajB3TzNaaGNpQmlQVzVsZHlCRVlYUmxLRWRiWVNzeU1ENCtQakkrUGo0d1hTc3hPVEF3TEVkYllTc3hOajQrUGpJK1BqNHdYU3hIVzJFck1USStQajR5UGo0K01GMHNSMXRoS3pnK1BqNHlQajQrTUYwc1IxdGhLelErUGo0eVBqNCtNRjBzUjF0aFBqNCtNajQrUGpCZExEQXBMR005UjF0aEt6TXlQajQrTWo0K1BqQmRMR1E5WWk1blpYUlVhVzFsZW05dVpVOW1abk5sZENncExHVTlLRzVsZHlCRVlYUmxLR0l1WjJWMFJuVnNiRmxsWVhJb0tTdzJMREVwS1M1blpYUlVhVzFsZW05dVpVOW1abk5sZENncExHWTlLRzVsZHlCRVlYUmxLR0l1WjJWMFJuVnNiRmxsWVhJb0tTd3dMREVwS1M1blpYUlVhVzFsZW05dVpVOW1abk5sZENncExHZzlUV0YwYUM1dGFXNG9aaXhsS1Rzd1BtTS9SMXRoS3pNeVBqNCtNajQrUGpCZFBVNTFiV0psY2lobElUMW1KaVpvUFQxa0tUb3dQR01oUFNob1BUMWtLU1ltS0dVOVRXRjBhQzV0WVhnb1ppeGxLU3hpTG5ObGRGUnBiV1VvWWk1blpYUlVhVzFsS0NrclhHNDJSVFFxS0Nnd1BHTS9hRHBsS1Mxa0tTa3BPMGRiWVNzeU5ENCtQakkrUGo0d1hUMWlMbWRsZEVSaGVTZ3BPMGRiWVNzeU9ENCtQakkrUGo0d1hUMG9WeWhpTG1kbGRFWjFiR3haWldGeUtDa3BQMWhpT2xsaUtWdGlMbWRsZEUxdmJuUm9LQ2xkSzJJdVoyVjBSR0YwWlNncExURjhNRHRIVzJFK1BqNHlQajQrTUYwOVlpNW5aWFJUWldOdmJtUnpLQ2s3UjF0aEt6UStQajR5UGo0K01GMDlZaTVuWlhSTmFXNTFkR1Z6S0NrN1IxdGhLemcrUGo0eVBqNCtNRjA5WWk1blpYUkliM1Z5Y3lncE8wZGJZU3N4TWo0K1BqSStQajR3WFQxaUxtZGxkRVJoZEdVb0tUdEhXMkVyTVRZK1BqNHlQajQrTUYwOVlpNW5aWFJOYjI1MGFDZ3BPMGRiWVNzeU1ENCtQakkrUGo0d1hUMWlMbWRsZEZsbFlYSW9LVHRoUFdJdVoyVjBWR2x0WlNncE8zSmxkSFZ5YmlCQ2FXZEpiblFvYVhOT1lVNG9ZU2svTFRFNllTOHhSVE1wZlN4UVl6cG1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpMDFNbjBzVVdNNlpuVnVZM1JwYjI0b0tYdDlMRWxqT21aMWJtTjBhVzl1S0dFc1lpeGpMR1FwZTJNK1BqNDlNRHRrUGo0K1BUQTdkbUZ5SUdVOUtHNWxkeUJFWVhSbEtTNW5aWFJHZFd4c1dXVmhjaWdwTEdZOWJtVjNJRVJoZEdVb1pTd3dMREVwTEdnOWJtVjNJRVJoZEdVb1pTdzJMREVwTzJVOVppNW5aWFJVYVcxbGVtOXVaVTltWm5ObGRDZ3BPMXh1ZG1GeUlHczlhQzVuWlhSVWFXMWxlbTl1WlU5bVpuTmxkQ2dwTzBsYllUNCtQakErUGo0eVBqNCtNRjA5TmpBcVRXRjBhQzV0WVhnb1pTeHJLVHRIVzJJK1BqNHdQajQrTWo0K1BqQmRQVTUxYldKbGNpaGxJVDFyS1R0aFBXdzlQbXd1ZEc5TWIyTmhiR1ZVYVcxbFUzUnlhVzVuS0hadmFXUWdNQ3g3YUc5MWNqRXlPaUV4TEhScGJXVmFiMjVsVG1GdFpUcGNJbk5vYjNKMFhDSjlLUzV6Y0d4cGRDaGNJaUJjSWlsYk1WMDdaajFoS0dZcE8yZzlZU2hvS1R0clBHVS9LRTBvWml4RkxHTXNNVGNwTEUwb2FDeEZMR1FzTVRjcEtUb29UU2htTEVVc1pDd3hOeWtzVFNob0xFVXNZeXd4TnlrcGZTeGlZam9vS1QwK2UwZGhLRndpWENJcGZTeEJPbVoxYm1OMGFXOXVLR0VzWWl4aktYdGhQajQrUFRBN1lqMGtZaWhpUGo0K01DeGpQajQrTUNrN2NtVjBkWEp1SUU5aFcyRmRLQzR1TG1JcGZTeGlZenBtZFc1amRHbHZiaWhoTEdJc1l5bDdZVDQrUGowd08ySTlKR0lvWWo0K1BqQXNZejQrUGpBcE8zSmxkSFZ5YmlCUFlWdGhYU2d1TGk1aUtYMHNKR0k2S0NrOVBrUmhkR1V1Ym05M0tDa3NTbU02Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnTkRJNU5Ea3dNVGMyTUgwc1oyRTZLQ2s5UG5CbGNtWnZjbTFoYm1ObExtNXZkeWdwTEVoak9tWjFibU4wYVc5dUtHRXBlMkUrUGo0OU1EdDJZWElnWWoxRkxteGxibWQwYUR0cFppZzBNamswT1RBeE56WXdQRnh1WVNseVpYUjFjbTRoTVR0bWIzSW9kbUZ5SUdNOU1UczBQajFqTzJNcVBUSXBlM1poY2lCa1BXSXFLREVyTGpJdll5azdaRDFOWVhSb0xtMXBiaWhrTEdFck1UQXdOall6TWprMktUdDJZWElnWlQxTllYUm9PMlE5VFdGMGFDNXRZWGdvWVN4a0tUdGhPbnRsUFNobExtMXBiaTVqWVd4c0tHVXNOREk1TkRrd01UYzJNQ3hrS3lnMk5UVXpOaTFrSlRZMU5UTTJLU1UyTlRVek5pa3RjbUV1WW5WbVptVnlMbUo1ZEdWTVpXNW5kR2dyTmpVMU16VXBMelkxTlRNMk8zUnllWHR5WVM1bmNtOTNLR1VwTzNwaEtDazdkbUZ5SUdZOU1UdGljbVZoYXlCaGZXTmhkR05vS0dncGUzMW1QWFp2YVdRZ01IMXBaaWhtS1hKbGRIVnliaUV3ZlhKbGRIVnliaUV4ZlN4WFl6cG1kVzVqZEdsdmJpaGhMR0lwZTJFK1BqNDlNRHRpUGo0K1BUQTdkbUZ5SUdNOU1EdGpZeWdwTG1admNrVmhZMmdvS0dRc1pTazlQbnQyWVhJZ1pqMWlLMk03WlQxSlcyRXJOQ3BsUGo0K01qNCtQakJkUFdZN1ptOXlLR1k5TUR0bVBHUXViR1Z1WjNSb095c3JaaWw2VzJVckt6NCtQakJkUFdRdVkyaGhja052WkdWQmRDaG1LVHQ2VzJVK1BqNHdYVDB3TzJNclBXUXViR1Z1WjNSb0t6RjlLVHR5WlhSMWNtNGdNSDBzV0dNNlpuVnVZM1JwYjI0b1lTeGlLWHRoUGo0K1BUQTdZajQrUGowd08zWmhjaUJqUFdOaktDazdTVnRoUGo0K01qNCtQbHh1TUYwOVl5NXNaVzVuZEdnN2RtRnlJR1E5TUR0akxtWnZja1ZoWTJnb1pUMCtaQ3M5WlM1c1pXNW5kR2dyTVNrN1NWdGlQajQrTWo0K1BqQmRQV1E3Y21WMGRYSnVJREI5TEVSaU9pZ3BQVDQxTWl4YVlqcG1kVzVqZEdsdmJpZ3BlM0psZEhWeWJpQTFNbjBzVm1NNlpuVnVZM1JwYjI0b0tYdHlaWFIxY200Z056QjlMRmxpT21aMWJtTjBhVzl1S0dFc1lpeGpMR1FwZTJJK1BqNDlNRHRqUGo0K1BUQTdaRDQrUGowd08yWnZjaWgyWVhJZ1pUMHdMR1k5TUR0bVBHTTdaaXNyS1h0MllYSWdhRDFKVzJJK1BqNHlQajQrTUYwc2F6MUpXMklyTkQ0K1BqSStQajR3WFR0aUt6MDRPMlp2Y2loMllYSWdiRDB3TzJ3OGF6dHNLeXNwZTNaaGNpQnRQVVZiYUN0c1BqNCtNRjBzYmoxa1kxdGhYVHN3UFQwOWJYeDhNVEE5UFQxdFB5Z29NVDA5UFdFL2NXRTZkeWtvWVdJb2Jpd3dLU2tzYmk1c1pXNW5kR2c5TUNrNmJpNXdkWE5vS0cwcGZXVXJQV3Q5U1Z0a1BqNCtNajQrUGpCZFBXVTdjbVYwZFhKdUlEQjlMSGhpT201akxHTmtPbTlqTEhWaE9uQmpMRmM2Y1dNc0pEcHlZeXh5WVRwell5eDBZVHAwWXl4a1pEcDFZeXh2WWpwMll5eFFPbmRqTEhvNmVHTXNZanA1WXl4VllqcDZZeXg1WVRwQll5eGxPa0pqTEd0aU9rTmpMR2c2UkdNc1dEcEZZeXhwT2taakxHVmtPa2RqTEdvNlNHTXNkRHBKWXl4eU9rcGpMRnh1YnpwTFl5eFhZVHBNWXl4RFlUcE5ZeXh0WVRwT1l5eFJZanBQWXl4a1lqcFFZeXhKWWpwUll5eHRZanBTWXl4cll6cFRZeXg0WXpwVVl5eG9ZenBWWXl4cFl6cFdZeXhoWXpwWFl5eHZZVHBZWXl4NVlqcFpZeXhDWVRwYVl5eEZZam9rWXl4bFlUcGhaQ3hxWXpwaVpDeFVZVHBqWkN4R09tUmtMRWM2WldRc1IySTZabVFzYW1RNloyUXNjV0U2YUdRc1R6cHFaQ3hXT210a0xGUTZiR1FzZVRwdFpDeEdZanB1WkN4bll6cHZaQ3hFT25Ca0xFaGlPbkZrTEdsa09uSmtMRlZoT25Oa0xIZGhPblJrTEd4ak9uVmtMR05qT25aa0xFNWlPbmRrTEdGaE9uaGtMRWs2ZVdRc1F6cDZaQ3hmWVRwQlpDeG1ZenBDWkN4Uk9rTmtMR1E2UkdRc1lXSTZSV1FzYmpwR1pDeFpZVHBIWkN4MllUcElaQ3gzWWpwSlpDeG1Pa3BrTEhsak9rdGtMR1JoT2t4a0xHZGlPazFrTEVSaE9rNWtMR3hpT2s5a0xHaGlPbEJrTEdNNlVXUXNkbU02VW1Rc2IyUTZVMlFzYXpwVVpDeDBZenBWWkN4c09sWmtMSGRqT2xka0xITmpPbGhrTEhKa09sbGtMSEE2V21Rc1VtRTZKR1FzZEdJNllXVXNVV0U2WW1Vc1MySTZZMlVzUWpwa1pTeExPbVZsTEZNNlptVXNKR0U2WjJVc2NHTTZhR1VzZFdJNmFXVXNlbUU2YW1Vc2EyRTZhMlVzZUdFNmJHVXNVMkk2YldVc1RHRTZibVVzYW1JNmIyVXNSMkU2Y0dVc2JtTTZjV1VzU0dFNmNtVXNYRzVKWVRwelpTeG1aRHAwWlN4NFpEcDFaU3hhT25abExIQmhPbmRsTEhCa09uaGxMSGRrT25sbExFMWlPbnBsTEUxaE9rRmxMRXRoT2tKbExGUmlPa05sTEhKak9rUmxMRXBoT2tWbExFNWhPa1psTEhCaU9rZGxMR3hoT2tobExFVmhPa2xsTEcxak9rcGxMSEZqT2t0bExFcGlPa3hsTEVaaE9rMWxMR3BoT2s1bExFRmtPazlsTEc1a09sQmxMRkk2VVdVc1pXSTZVbVVzV21FNlUyVXNaV002VkdVc2FXSTZWV1VzUlRwV1pTeE5PbGRsTEZaaE9saGxMR3hrT2xsbExHTmhPbHBsTEc1aU9pUmxMRzVoT21GbUxHUmpPbUptTEVGak9tTm1MSFU2WkdZc1REcGxaaXgwWkRwbVppeFFZanBuWml4dll6cG9aaXhDWkRwcVppeFBZanByWml4TVlqcHNaaXhqWWpwdFppeDZZenB1Wml4U1lqcHZaaXhQWVRwd1ppeFpPbkZtTEhWak9uSm1MRW82YzJZc1oyUTZkR1lzZG1JNmRXWXNjMkU2ZG1Zc1NEcDNaaXh5WWpwNFppeFFZVHA1Wml4VFlUcDZaaXh6WWpwQlppeHhZanBDWml4M09tWjFibU4wYVc5dUtHRXBlM0psZEhWeWJpQmhQajQrTUgwc1JHTTZhR01zWm1FNlpuVnVZM1JwYjI0b1lTeGlMR01zWkNsN2NtVjBkWEp1SUdoaktHRStQajR3TEdJK1BqNHdMR00rUGo0d0xHUStQajR3S1gxOUxGVTlablZ1WTNScGIyNG9LWHRtZFc1amRHbHZiaUJoS0dNcGUxVTlZeTVsZUhCdmNuUnpPMVU5ZW1Jb0tUdGNibFU5UkdZb0tUdHlZVDFWTGtSa08zcGhLQ2s3UW1FdWRXNXphR2xtZENoVkxrVmtLVHRFWVMwdE96QTlQVVJoSmlZb2JuVnNiQ0U5UFVWaEppWW9ZMnhsWVhKSmJuUmxjblpoYkNoRllTa3NSV0U5Ym5Wc2JDa3NSbUVtSmloalBVWmhMRVpoUFc1MWJHd3NZeWdwS1NrN2NtVjBkWEp1SUZWOWRtRnlJR0k5ZTJFNlEyWjlPMFJoS3lzN2FXWW9aeTVwYm5OMFlXNTBhV0YwWlZkaGMyMHBkSEo1ZTNKbGRIVnliaUJuTG1sdWMzUmhiblJwWVhSbFYyRnpiU2hpTEdFcGZXTmhkR05vS0dNcGUzY29ZRTF2WkhWc1pTNXBibk4wWVc1MGFXRjBaVmRoYzIwZ1kyRnNiR0poWTJzZ1ptRnBiR1ZrSUhkcGRHZ2daWEp5YjNJNklDUjdZMzFnS1N4aVlTaGpLWDFPWVNoaUxHWjFibU4wYVc5dUtHTXBlMkVvWXk1cGJuTjBZVzVqWlNsOUtTNWpZWFJqYUNoaVlTazdjbVYwZFhKdWUzMTlLQ2tzZFdJOVlUMCtLSFZpUFZVdVJtUXBLR0VwTzJjdVgwOXlkRWx1YVhROUtHRXNZaWs5UGlobkxsOVBjblJKYm1sMFBWVXVSMlFwS0dFc1lpazdaeTVmVDNKMFIyVjBUR0Z6ZEVWeWNtOXlQU2hoTEdJcFBUNG9aeTVmVDNKMFIyVjBUR0Z6ZEVWeWNtOXlQVlV1U0dRcEtHRXNZaWs3WEc1bkxsOVBjblJEY21WaGRHVlRaWE56YVc5dVQzQjBhVzl1Y3owb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTazlQaWhuTGw5UGNuUkRjbVZoZEdWVFpYTnphVzl1VDNCMGFXOXVjejFWTGtsa0tTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRLVHRuTGw5UGNuUkJjSEJsYm1SRmVHVmpkWFJwYjI1UWNtOTJhV1JsY2owb1lTeGlLVDArS0djdVgwOXlkRUZ3Y0dWdVpFVjRaV04xZEdsdmJsQnliM1pwWkdWeVBWVXVTbVFwS0dFc1lpazdaeTVmVDNKMFFXUmtSbkpsWlVScGJXVnVjMmx2Yms5MlpYSnlhV1JsUFNoaExHSXNZeWs5UGlobkxsOVBjblJCWkdSR2NtVmxSR2x0Wlc1emFXOXVUM1psY25KcFpHVTlWUzVMWkNrb1lTeGlMR01wTzJjdVgwOXlkRUZrWkZObGMzTnBiMjVEYjI1bWFXZEZiblJ5ZVQwb1lTeGlMR01wUFQ0b1p5NWZUM0owUVdSa1UyVnpjMmx2YmtOdmJtWnBaMFZ1ZEhKNVBWVXVUR1FwS0dFc1lpeGpLVHRuTGw5UGNuUlNaV3hsWVhObFUyVnpjMmx2Yms5d2RHbHZibk05WVQwK0tHY3VYMDl5ZEZKbGJHVmhjMlZUWlhOemFXOXVUM0IwYVc5dWN6MVZMazFrS1NoaEtUdG5MbDlQY25SRGNtVmhkR1ZUWlhOemFXOXVQU2hoTEdJc1l5azlQaWhuTGw5UGNuUkRjbVZoZEdWVFpYTnphVzl1UFZVdVRtUXBLR0VzWWl4aktUdGNibWN1WDA5eWRGSmxiR1ZoYzJWVFpYTnphVzl1UFdFOVBpaG5MbDlQY25SU1pXeGxZWE5sVTJWemMybHZiajFWTGs5a0tTaGhLVHRuTGw5UGNuUkhaWFJKYm5CMWRFOTFkSEIxZEVOdmRXNTBQU2hoTEdJc1l5azlQaWhuTGw5UGNuUkhaWFJKYm5CMWRFOTFkSEIxZEVOdmRXNTBQVlV1VUdRcEtHRXNZaXhqS1R0bkxsOVBjblJIWlhSSmJuQjFkRTVoYldVOUtHRXNZaWs5UGlobkxsOVBjblJIWlhSSmJuQjFkRTVoYldVOVZTNVJaQ2tvWVN4aUtUdG5MbDlQY25SSFpYUlBkWFJ3ZFhST1lXMWxQU2hoTEdJcFBUNG9aeTVmVDNKMFIyVjBUM1YwY0hWMFRtRnRaVDFWTGxKa0tTaGhMR0lwTzJjdVgwOXlkRVp5WldVOVlUMCtLR2N1WDA5eWRFWnlaV1U5VlM1VFpDa29ZU2s3Wnk1ZlQzSjBRM0psWVhSbFZHVnVjMjl5UFNoaExHSXNZeXhrTEdVc1ppazlQaWhuTGw5UGNuUkRjbVZoZEdWVVpXNXpiM0k5VlM1VVpDa29ZU3hpTEdNc1pDeGxMR1lwTzJjdVgwOXlkRWRsZEZSbGJuTnZja1JoZEdFOUtHRXNZaXhqTEdRc1pTazlQaWhuTGw5UGNuUkhaWFJVWlc1emIzSkVZWFJoUFZVdVZXUXBLR0VzWWl4akxHUXNaU2s3Wnk1ZlQzSjBVbVZzWldGelpWUmxibk52Y2oxaFBUNG9aeTVmVDNKMFVtVnNaV0Z6WlZSbGJuTnZjajFWTGxaa0tTaGhLVHRjYm1jdVgwOXlkRU55WldGMFpWSjFiazl3ZEdsdmJuTTlLR0VzWWl4akxHUXBQVDRvWnk1ZlQzSjBRM0psWVhSbFVuVnVUM0IwYVc5dWN6MVZMbGRrS1NoaExHSXNZeXhrS1R0bkxsOVBjblJCWkdSU2RXNURiMjVtYVdkRmJuUnllVDBvWVN4aUxHTXBQVDRvWnk1ZlQzSjBRV1JrVW5WdVEyOXVabWxuUlc1MGNuazlWUzVZWkNrb1lTeGlMR01wTzJjdVgwOXlkRkpsYkdWaGMyVlNkVzVQY0hScGIyNXpQV0U5UGlobkxsOVBjblJTWld4bFlYTmxVblZ1VDNCMGFXOXVjejFWTGxsa0tTaGhLVHRuTGw5UGNuUkRjbVZoZEdWQ2FXNWthVzVuUFdFOVBpaG5MbDlQY25SRGNtVmhkR1ZDYVc1a2FXNW5QVlV1V21RcEtHRXBPMmN1WDA5eWRFSnBibVJKYm5CMWREMG9ZU3hpTEdNcFBUNG9aeTVmVDNKMFFtbHVaRWx1Y0hWMFBWVXVYMlFwS0dFc1lpeGpLVHRuTGw5UGNuUkNhVzVrVDNWMGNIVjBQU2hoTEdJc1l5eGtLVDArS0djdVgwOXlkRUpwYm1SUGRYUndkWFE5VlM0a1pDa29ZU3hpTEdNc1pDazdaeTVmVDNKMFEyeGxZWEpDYjNWdVpFOTFkSEIxZEhNOVlUMCtLR2N1WDA5eWRFTnNaV0Z5UW05MWJtUlBkWFJ3ZFhSelBWVXVZV1VwS0dFcE8yY3VYMDl5ZEZKbGJHVmhjMlZDYVc1a2FXNW5QV0U5UGlobkxsOVBjblJTWld4bFlYTmxRbWx1WkdsdVp6MVZMbUpsS1NoaEtUdGNibWN1WDA5eWRGSjFibGRwZEdoQ2FXNWthVzVuUFNoaExHSXNZeXhrTEdVcFBUNG9aeTVmVDNKMFVuVnVWMmwwYUVKcGJtUnBibWM5VlM1alpTa29ZU3hpTEdNc1pDeGxLVHRuTGw5UGNuUlNkVzQ5S0dFc1lpeGpMR1FzWlN4bUxHZ3NheWs5UGlobkxsOVBjblJTZFc0OVZTNWtaU2tvWVN4aUxHTXNaQ3hsTEdZc2FDeHJLVHRuTGw5UGNuUkZibVJRY205bWFXeHBibWM5WVQwK0tHY3VYMDl5ZEVWdVpGQnliMlpwYkdsdVp6MVZMbVZsS1NoaEtUdG5MbDlLYzJWd1QzVjBjSFYwUFNoaExHSXNZeWs5UGlobkxsOUtjMlZ3VDNWMGNIVjBQVlV1Wm1VcEtHRXNZaXhqS1R0bkxsOUtjMlZ3UjJWMFRtOWtaVTVoYldVOVlUMCtLR2N1WDBwelpYQkhaWFJPYjJSbFRtRnRaVDFWTG1kbEtTaGhLVHRjYm5aaGNpQktZajFuTGw5dFlXeHNiMk05WVQwK0tFcGlQV2N1WDIxaGJHeHZZejFWTG1obEtTaGhLU3hVUFdjdVgyWnlaV1U5WVQwK0tGUTlaeTVmWm5KbFpUMVZMbWxsS1NoaEtTeFlQU2hoTEdJcFBUNG9XRDFWTG10bEtTaGhMR0lwTEZSaFBXRTlQaWhVWVQxVkxteGxLU2hoS1N4WlBXRTlQaWhaUFZVdWJXVXBLR0VwTEVWbVBXRTlQaWhGWmoxVkxtNWxLU2hoS1N4YVBTZ3BQVDRvV2oxVkxtOWxLU2dwTEcxalBXRTlQaWh0WXoxVkxuQmxLU2hoS1N4cll6MWhQVDRvYTJNOVZTNXhaU2tvWVNrc1ZXRTlLR0VzWWl4aktUMCtLRlZoUFZVdWNtVXBLR0VzWWl4aktTeHNZejFoUFQ0b2JHTTlWUzV6WlNrb1lTa3NaSGx1UTJGc2JGOTJhV2s5Wnk1a2VXNURZV3hzWDNacGFUMG9ZU3hpTEdNcFBUNG9aSGx1UTJGc2JGOTJhV2s5Wnk1a2VXNURZV3hzWDNacGFUMVZMblJsS1NoaExHSXNZeWtzUm1ZOVp5NWtlVzVEWVd4c1gybHBhV2s5S0dFc1lpeGpMR1FwUFQ0b1JtWTlaeTVrZVc1RFlXeHNYMmxwYVdrOVZTNTFaU2tvWVN4aUxHTXNaQ2tzWkhsdVEyRnNiRjlwYVdrOVp5NWtlVzVEWVd4c1gybHBhVDBvWVN4aUxHTXBQVDRvWkhsdVEyRnNiRjlwYVdrOVp5NWtlVzVEWVd4c1gybHBhVDFWTG5abEtTaGhMR0lzWXlrc1IyWTlaeTVrZVc1RFlXeHNYMmxwUFNoaExHSXBQVDRvUjJZOVp5NWtlVzVEWVd4c1gybHBQVnh1VlM1M1pTa29ZU3hpS1N4SVpqMW5MbVI1YmtOaGJHeGZhV2xwYVdscGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUNrOVBpaElaajFuTG1SNWJrTmhiR3hmYVdscGFXbHBhVDFWTG5obEtTaGhMR0lzWXl4a0xHVXNaaXhvS1N4a2VXNURZV3hzWDNacFBXY3VaSGx1UTJGc2JGOTJhVDBvWVN4aUtUMCtLR1I1YmtOaGJHeGZkbWs5Wnk1a2VXNURZV3hzWDNacFBWVXVlV1VwS0dFc1lpa3NaSGx1UTJGc2JGOTJQV2N1WkhsdVEyRnNiRjkyUFdFOVBpaGtlVzVEWVd4c1gzWTlaeTVrZVc1RFlXeHNYM1k5VlM1NlpTa29ZU2tzU1dZOVp5NWtlVzVEWVd4c1gybHBhV2xwYVQwb1lTeGlMR01zWkN4bExHWXBQVDRvU1dZOVp5NWtlVzVEWVd4c1gybHBhV2xwYVQxVkxrRmxLU2hoTEdJc1l5eGtMR1VzWmlrc1NtWTlaeTVrZVc1RFlXeHNYMmxwYVdvOUtHRXNZaXhqTEdRcFBUNG9TbVk5Wnk1a2VXNURZV3hzWDJscGFXbzlWUzVDWlNrb1lTeGlMR01zWkNrc1MyWTlaeTVrZVc1RFlXeHNYMmxwYVdscFBTaGhMR0lzWXl4a0xHVXBQVDRvUzJZOVp5NWtlVzVEWVd4c1gybHBhV2xwUFZVdVEyVXBLR0VzWWl4akxHUXNaU2tzVEdZOVp5NWtlVzVEWVd4c1gzWnBhV2s5S0dFc1lpeGpMR1FwUFQ0b1RHWTlaeTVrZVc1RFlXeHNYM1pwYVdrOVZTNUVaU2tvWVN4aUxHTXNaQ2tzVFdZOVp5NWtlVzVEWVd4c1gzWnBhV2xwYVQxY2JpaGhMR0lzWXl4a0xHVXNaaWs5UGloTlpqMW5MbVI1YmtOaGJHeGZkbWxwYVdscFBWVXVSV1VwS0dFc1lpeGpMR1FzWlN4bUtTeE9aajFuTG1SNWJrTmhiR3hmZG1scGFXazlLR0VzWWl4akxHUXNaU2s5UGloT1pqMW5MbVI1YmtOaGJHeGZkbWxwYVdrOVZTNUdaU2tvWVN4aUxHTXNaQ3hsS1N4UFpqMW5MbVI1YmtOaGJHeGZkbWxwYVdscGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUNrOVBpaFBaajFuTG1SNWJrTmhiR3hmZG1scGFXbHBhVDFWTGtkbEtTaGhMR0lzWXl4a0xHVXNaaXhvS1N4UVpqMW5MbVI1YmtOaGJHeGZkbWxwYW1rOUtHRXNZaXhqTEdRc1pTazlQaWhRWmoxbkxtUjVia05oYkd4ZmRtbHBhbWs5VlM1SVpTa29ZU3hpTEdNc1pDeGxLU3hSWmoxbkxtUjVia05oYkd4ZmRtbHBhV2xwYVdscGFXbHBQU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTazlQaWhSWmoxbkxtUjVia05oYkd4ZmRtbHBhV2xwYVdscGFXbHBQVlV1U1dVcEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4S1N4U1pqMW5MbVI1YmtOaGJHeGZkbWxwYVdwcWFtbHBQU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ2s5UGloU1pqMW5MbVI1YmtOaGJHeGZkbWxwYVdwcWFtbHBQVlV1U21VcEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0tTeFRaajFuTG1SNWJrTmhiR3hmYVdsa1BTaGhMR0lzWXlrOVBseHVLRk5tUFdjdVpIbHVRMkZzYkY5cGFXUTlWUzVMWlNrb1lTeGlMR01wTEZSbVBXY3VaSGx1UTJGc2JGOXBhV1k5S0dFc1lpeGpLVDArS0ZSbVBXY3VaSGx1UTJGc2JGOXBhV1k5VlM1TVpTa29ZU3hpTEdNcExGVm1QV2N1WkhsdVEyRnNiRjlwYVdvOUtHRXNZaXhqS1QwK0tGVm1QV2N1WkhsdVEyRnNiRjlwYVdvOVZTNU5aU2tvWVN4aUxHTXBMRlptUFdjdVpIbHVRMkZzYkY5cWFXazlLR0VzWWl4aktUMCtLRlptUFdjdVpIbHVRMkZzYkY5cWFXazlWUzVPWlNrb1lTeGlMR01wTEZkbVBXY3VaSGx1UTJGc2JGOXBQV0U5UGloWFpqMW5MbVI1YmtOaGJHeGZhVDFWTGs5bEtTaGhLU3hZWmoxbkxtUjVia05oYkd4ZmRtbHBhV2xwYVdscFBTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDazlQaWhZWmoxbkxtUjVia05oYkd4ZmRtbHBhV2xwYVdscFBWVXVVR1VwS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzS1N4WlpqMW5MbVI1YmtOaGJHeGZkbWxwYVdscGFqMG9ZU3hpTEdNc1pDeGxMR1lzYUNrOVBpaFpaajFuTG1SNWJrTmhiR3hmZG1scGFXbHBhajFWTGxGbEtTaGhMR0lzWXl4a0xHVXNaaXhvS1N4YVpqMW5MbVI1YmtOaGJHeGZhbWs5S0dFc1lpazlQaWhhWmoxbkxtUjVia05oYkd4ZmFtazlWUzVTWlNrb1lTeGlLU3drWmoxbkxtUjVia05oYkd4ZmRtbHBhajBvWVN4aUxHTXNaQ2s5UGlna1pqMWNibWN1WkhsdVEyRnNiRjkyYVdscVBWVXVVMlVwS0dFc1lpeGpMR1FwTEdGblBXY3VaSGx1UTJGc2JGOXBhV2xwYVdscGFXbHBhV2s5S0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhLVDArS0dGblBXY3VaSGx1UTJGc2JGOXBhV2xwYVdscGFXbHBhV2s5VlM1VVpTa29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFcExHSm5QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBhV2xwUFNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dEtUMCtLR0puUFdjdVpIbHVRMkZzYkY5MmFXbHBhV2xwYVdscFBWVXVWV1VwS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwcExHTm5QV2N1WkhsdVEyRnNiRjlwYWowb1lTeGlLVDArS0dOblBXY3VaSGx1UTJGc2JGOXBhajFWTGxabEtTaGhMR0lwTEdSblBXY3VaSGx1UTJGc2JGOXBhV2xwYVdvOUtHRXNZaXhqTEdRc1pTeG1LVDArS0dSblBXY3VaSGx1UTJGc2JGOXBhV2xwYVdvOVZTNVhaU2tvWVN4aUxHTXNaQ3hsTEdZcExHVm5QV2N1WkhsdVEyRnNiRjlxUFdFOVBpaGxaejFuTG1SNWJrTmhiR3hmYWoxVkxsaGxLU2hoS1N4bVp6MW5MbVI1YmtOaGJHeGZkbWxxUFNoaExHSXNZeWs5UGlobVp6MW5MbVI1YmtOaGJHeGZkbWxxUFZVdVdXVXBLR0VzWWl4aktTeG5aejFuTG1SNWJrTmhiR3hmZG1scGFtcHFhV2xwYVdscFBTaGhMR0lzWXl4a0xGeHVaU3htTEdnc2F5eHNMRzBzYml4eEtUMCtLR2RuUFdjdVpIbHVRMkZzYkY5MmFXbHFhbXBwYVdscGFXazlWUzVhWlNrb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVwTEdoblBXY3VaSGx1UTJGc2JGOTJhV2xwYW1scGFXbHBhV2s5S0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhLVDArS0doblBXY3VaSGx1UTJGc2JGOTJhV2xwYW1scGFXbHBhV2s5VlM1ZlpTa29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFcExHbG5QV2N1WkhsdVEyRnNiRjlwYVdscGFXbHBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDeHJLVDArS0dsblBXY3VaSGx1UTJGc2JGOXBhV2xwYVdscGFUMVZMaVJsS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NwTEdwblBXY3VaSGx1UTJGc2JGOTJhV2xwYVdscGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4cktUMCtLR3BuUFdjdVpIbHVRMkZzYkY5MmFXbHBhV2xwYVQxVkxtRm1LU2hoTEdJc1l5eGtMR1VzWml4b0xHc3BMR3RuUFdjdVpIbHVRMkZzYkY5cGFXbHBhV2xwYVdvOUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0tUMCtLR3RuUFdjdVpIbHVRMkZzYkY5cGFXbHBhV2xwYVdvOVZTNWlaaWtvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dwTEd4blBXY3VaSGx1UTJGc2JGOTJhV2xwYVdscGFXbHBhV2xwYVQwb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c1hHNXRMRzRzY1N4eUxIQXBQVDRvYkdjOVp5NWtlVzVEWVd4c1gzWnBhV2xwYVdscGFXbHBhV2xwUFZVdVkyWXBLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ2tzYldjOVp5NWtlVzVEWVd4c1gybHBhV2xwYVdscGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BQVDRvYldjOVp5NWtlVzVEWVd4c1gybHBhV2xwYVdscGFUMVZMbVJtS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkNrc2JtYzlaeTVrZVc1RFlXeHNYMmxwYVdscGFtbHBhV2xwUFNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHBQVDRvYm1jOVp5NWtlVzVEWVd4c1gybHBhV2xwYW1scGFXbHBQVlV1WldZcEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaWtzYjJjOVp5NWtlVzVEWVd4c1gzWnBhbXBxYVdscGFqMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BQVDRvYjJjOVp5NWtlVzVEWVd4c1gzWnBhbXBxYVdscGFqMVZMbVptS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkNrc2NHYzlaeTVrZVc1RFlXeHNYMlpwUFNoaExHSXBQVDRvY0djOVp5NWtlVzVEWVd4c1gyWnBQVlV1WjJZcEtHRXNZaWtzY1djOVp5NWtlVzVEWVd4c1gyWnBhVDBvWVN4aUxHTXBQVDRvY1djOVp5NWtlVzVEWVd4c1gyWnBhVDFWTG1obUtTaGhMR0lzWXlrc2NtYzlaeTVrZVc1RFlXeHNYMlJwUFNoaExHSXBQVDRvY21jOVhHNW5MbVI1YmtOaGJHeGZaR2s5VlM1cVppa29ZU3hpS1N4elp6MW5MbVI1YmtOaGJHeGZaR2xwUFNoaExHSXNZeWs5UGloelp6MW5MbVI1YmtOaGJHeGZaR2xwUFZVdWEyWXBLR0VzWWl4aktTeDBaejFuTG1SNWJrTmhiR3hmZG1scWFqMG9ZU3hpTEdNc1pDazlQaWgwWnoxbkxtUjVia05oYkd4ZmRtbHFhajFWTG14bUtTaGhMR0lzWXl4a0tTeDFaejFuTG1SNWJrTmhiR3hmYVdscGFXbHBhV2xwYVQwb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTazlQaWgxWnoxbkxtUjVia05oYkd4ZmFXbHBhV2xwYVdscGFUMVZMbTFtS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dEtTeDJaejFuTG1SNWJrTmhiR3hmZG1scGFtbHBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDazlQaWgyWnoxbkxtUjVia05oYkd4ZmRtbHBhbWxwYVQxVkxtNW1LU2hoTEdJc1l5eGtMR1VzWml4b0tTeDNaejFuTG1SNWJrTmhiR3hmZG1scFpEMG9ZU3hpTEdNc1pDazlQaWgzWnoxbkxtUjVia05oYkd4ZmRtbHBaRDFWTG05bUtTaGhMR0lzWXl4a0tTeDRaejFuTG1SNWJrTmhiR3hmZG1sbVptbHBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDazlQaWg0WnoxbkxtUjVia05oYkd4ZmRtbG1abWxwYVQxVkxuQm1LU2hoTEdJc1l5eGtMR1VzWml4b0tTeDVaejFuTG1SNWJrTmhiR3hmZG1scFptbHBhVDBvWVN4aUxHTXNaQ3hsTEdZc1hHNW9LVDArS0hsblBXY3VaSGx1UTJGc2JGOTJhV2xtYVdscFBWVXVjV1lwS0dFc1lpeGpMR1FzWlN4bUxHZ3BMSHBuUFdjdVpIbHVRMkZzYkY5MmFXbHBhV2xrYVdsa2FUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1S1QwK0tIcG5QV2N1WkhsdVEyRnNiRjkyYVdscGFXbGthV2xrYVQxVkxuSm1LU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0cExFRm5QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBhV2xwWkdrOUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4S1QwK0tFRm5QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBhV2xwWkdrOVZTNXpaaWtvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXBMRUpuUFdjdVpIbHVRMkZzYkY5cWFXbHBQU2hoTEdJc1l5eGtLVDArS0VKblBXY3VaSGx1UTJGc2JGOXFhV2xwUFZVdWRHWXBLR0VzWWl4akxHUXBMRU5uUFdjdVpIbHVRMkZzYkY5MmFtbHBhV2xwYVQwb1lTeGlMR01zWkN4bExHWXNhQ3hyS1QwK0tFTm5QV2N1WkhsdVEyRnNiRjkyYW1scGFXbHBhVDFWTG5WbUtTaGhMR0lzWXl4a0xHVXNaaXhvTEdzcExFUm5QV2N1WkhsdVEyRnNiRjkyYVdscFpEMG9ZU3hpTEdNc1pDeGxLVDArS0VSblBXY3VaSGx1UTJGc2JGOTJhV2xwWkQxVkxuWm1LU2hoTEdJc1l5eGtMR1VwTEVWblBXY3VaSGx1UTJGc2JGOTJhV2xwYVdscGFXbHBhbWs5WEc0b1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVwUFQ0b1JXYzlaeTVrZVc1RFlXeHNYM1pwYVdscGFXbHBhV2xxYVQxVkxuZG1LU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTa3NSbWM5Wnk1a2VXNURZV3hzWDNacGFtazlLR0VzWWl4akxHUXBQVDRvUm1jOVp5NWtlVzVEWVd4c1gzWnBhbWs5VlM1NFppa29ZU3hpTEdNc1pDa3NSMmM5Wnk1a2VXNURZV3hzWDNacGFtcHFhbXBxYW1wcWFtcHFhbWs5S0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUxIa3BQVDRvUjJjOVp5NWtlVzVEWVd4c1gzWnBhbXBxYW1wcWFtcHFhbXBxYW1rOVZTNTVaaWtvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3TEhVc2VTa3NTR2M5Wnk1a2VXNURZV3hzWDNacGFXbHFhVDBvWVN4aUxHTXNaQ3hsTEdZcFBUNG9TR2M5Wnk1a2VXNURZV3hzWDNacGFXbHFhVDFWTG5wbUtTaGhMR0lzWXl4a0xHVXNaaWtzU1djOVp5NWtlVzVEWVd4c1gzWnBhbXBxYVdscWFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BQVDRvU1djOVp5NWtlVzVEWVd4c1gzWnBhbXBxYVdscWFUMVZMa0ZtS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkNrc1NtYzlaeTVrZVc1RFlXeHNYMmxwYVdwcFBTaGhMR0lzWXl4a0xHVXBQVDRvU21jOVp5NWtlVzVEWVd4c1gybHBhV3BwUFZ4dVZTNUNaaWtvWVN4aUxHTXNaQ3hsS1N4TFp6MW5MbVI1YmtOaGJHeGZhV2xwYW1scGFXbHBhV2xwYVdrOUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDazlQaWhMWnoxbkxtUjVia05oYkd4ZmFXbHBhbWxwYVdscGFXbHBhV2s5VlM1RFppa29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdLU3hNWnoxbkxtUjVia05oYkd4ZmRtbzlLR0VzWWlrOVBpaE1aejFuTG1SNWJrTmhiR3hmZG1vOVZTNUVaaWtvWVN4aUtTeE5aejFuTG1SNWJrTmhiR3hmYW1wcVBTaGhMR0lzWXlrOVBpaE5aejFuTG1SNWJrTmhiR3hmYW1wcVBWVXVSV1lwS0dFc1lpeGpLU3hPWnoxbkxtUjVia05oYkd4ZmFXbHBhbWxwYVdscGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU2s5UGloT1p6MW5MbVI1YmtOaGJHeGZhV2xwYW1scGFXbHBhVDFWTGtabUtTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRLU3hQWnoxbkxtUjVia05oYkd4ZmRtWnBhV2s5S0dFc1lpeGpMR1FzWlNrOVBpaFBaejFuTG1SNWJrTmhiR3hmZG1acGFXazlWUzVIWmlrb1lTeGlMR01zWkN4bEtTeFFaejFuTG1SNWJrTmhiR3hmZG1scGFXbG1aajBvWVN4aUxHTXNaQ3hsTEdZc2FDazlQaWhRWnoxbkxtUjVia05oYkd4ZmRtbHBhV2xtWmoxVkxraG1LU2hoTEdJc1l5eGtMR1VzWml4b0tTeFJaejFuTG1SNWJrTmhiR3hmZG1scGFXbHBabVk5WEc0b1lTeGlMR01zWkN4bExHWXNhQ3hyS1QwK0tGRm5QV2N1WkhsdVEyRnNiRjkyYVdscGFXbG1aajFWTGtsbUtTaGhMR0lzWXl4a0xHVXNaaXhvTEdzcExGSm5QV2N1WkhsdVEyRnNiRjkyYVdsbVpqMG9ZU3hpTEdNc1pDeGxLVDArS0ZKblBXY3VaSGx1UTJGc2JGOTJhV2xtWmoxVkxrcG1LU2hoTEdJc1l5eGtMR1VwTEZOblBXY3VaSGx1UTJGc2JGOTJhV2xwYVdscGFXbHBabWxwYVQwb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0tUMCtLRk5uUFdjdVpIbHVRMkZzYkY5MmFXbHBhV2xwYVdscFptbHBhVDFWTGt0bUtTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXBMRlJuUFdjdVpIbHVRMkZzYkY5MmFXbHBhV2xwYVdscWFqMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1S1QwK0tGUm5QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBhV2xxYWoxVkxreG1LU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0cExGVm5QV2N1WkhsdVEyRnNiRjlwYVdscGFXbHBhV2xwYVdscGFXWnBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3TEhVc2VTeEJLVDArS0ZWblBXY3VaSGx1UTJGc2JGOXBhV2xwYVdscGFXbHBhV2xwYVdacGFUMVZMazFtS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBc2RTeDVMRUVwTEZ4dVZtYzlaeTVrZVc1RFlXeHNYM1pwYVdscGFXbHBhV2xwYVdrOUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJcFBUNG9WbWM5Wnk1a2VXNURZV3hzWDNacGFXbHBhV2xwYVdscGFXazlWUzVPWmlrb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2lrc1YyYzlaeTVrZVc1RFlXeHNYMmxwYVdscGFXbHBhV2xwYVdscGFXbHBabWxwUFNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBc2RTeDVMRUVzUWl4RExFUXBQVDRvVjJjOVp5NWtlVzVEWVd4c1gybHBhV2xwYVdscGFXbHBhV2xwYVdscFptbHBQVlV1VDJZcEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDeDFMSGtzUVN4Q0xFTXNSQ2tzV0djOVp5NWtlVzVEWVd4c1gzWnBhbXBwYVdscGFXazlLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBwUFQ0b1dHYzlaeTVrZVc1RFlXeHNYM1pwYW1wcGFXbHBhV2s5VlM1UVppa29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU2tzV1djOVp5NWtlVzVEWVd4c1gybHBhV2xxYW1vOUtHRXNZaXhqTEdRc1pTeG1MR2dwUFQ0b1dXYzlaeTVrZVc1RFlXeHNYMmxwYVdscWFtbzlWUzVSWmlrb1lTeGlMR01zWkN4bExHWXNhQ2tzV21jOVp5NWtlVzVEWVd4c1gzWnBhV2xwYVdscGFXbHBQU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEZ4dWJpazlQaWhhWnoxbkxtUjVia05oYkd4ZmRtbHBhV2xwYVdscGFXazlWUzVTWmlrb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVLU3drWnoxbkxtUjVia05oYkd4ZmFXbHBhbXBxUFNoaExHSXNZeXhrTEdVc1ppazlQaWdrWnoxbkxtUjVia05oYkd4ZmFXbHBhbXBxUFZVdVUyWXBLR0VzWWl4akxHUXNaU3htS1N4aGFEMW5MbVI1YmtOaGJHeGZabVptWm1abVpqMG9ZU3hpTEdNc1pDeGxMR1lzYUNrOVBpaGhhRDFuTG1SNWJrTmhiR3hmWm1abVptWm1aajFWTGxSbUtTaGhMR0lzWXl4a0xHVXNaaXhvS1N4aWFEMW5MbVI1YmtOaGJHeGZkbWxwYVdscVBTaGhMR0lzWXl4a0xHVXNaaWs5UGloaWFEMW5MbVI1YmtOaGJHeGZkbWxwYVdscVBWVXVWV1lwS0dFc1lpeGpMR1FzWlN4bUtTeGphRDFuTG1SNWJrTmhiR3hmZG1scGFXbHBhV3BwYVdacGFXazlLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ2s5UGloamFEMW5MbVI1YmtOaGJHeGZkbWxwYVdscGFXcHBhV1pwYVdrOVZTNVdaaWtvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3S1N4a2FEMW5MbVI1YmtOaGJHeGZkbXBxYW1wcWFtWm1hbWxtYVdscGFXbHBQU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFzZFN4NUxFRXNRaWs5UGloa2FEMW5MbVI1YmtOaGJHeGZkbXBxYW1wcWFtWm1hbWxtYVdscGFXbHBQVnh1VlM1WFppa29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdMSFVzZVN4QkxFSXBMR1ZvUFdjdVpIbHVRMkZzYkY5MmFXbHBhV2xwWm1acWFXWnBhV2xwYVQwb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0xIVXNlU3hCS1QwK0tHVm9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBabVpxYVdacGFXbHBhVDFWTGxobUtTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU3g1TEVFcExHWm9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBabVpxWm1scGFXbHBQU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFzZFN4NUtUMCtLR1pvUFdjdVpIbHVRMkZzYkY5MmFXbHBhV2xwWm1acVptbHBhV2xwUFZVdVdXWXBLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ3gxTEhrcExHZG9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBabVpxYVdscGFXazlLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ3gxS1QwK0tHZG9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBabVpxYVdscGFXazlWUzVhWmlrb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0xIVXBMR2hvUFdjdVpIbHVRMkZzYkY5MmFtcHFhbXBxYW1wbVptWnBhV2xtYVdscGFXazlLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRnh1YlN4dUxIRXNjaXh3TEhVc2VTeEJMRUlzUXl4RUxFWXBQVDRvYUdnOVp5NWtlVzVEWVd4c1gzWnFhbXBxYW1wcWFtWm1abWxwYVdacGFXbHBhVDFWTGw5bUtTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU3g1TEVFc1FpeERMRVFzUmlrc2FXZzlaeTVrZVc1RFlXeHNYM1pxYW1wcWFtcG1abVpwWm1scWFXbHBhV2s5S0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUxIa3NRU3hDTEVNcFBUNG9hV2c5Wnk1a2VXNURZV3hzWDNacWFtcHFhbXBtWm1acFptbHFhV2xwYVdrOVZTNGtaaWtvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3TEhVc2VTeEJMRUlzUXlrc2FtZzlaeTVrZVc1RFlXeHNYM1pxYW1wcWFtcG1abVpwWm1scGFXbHBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3TEhVc2VTeEJMRUlwUFQ0b2FtZzlaeTVrZVc1RFlXeHNYM1pxYW1wcWFtcG1abVpwWm1scGFXbHBhVDFWTG1GbktTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU3g1TEVFc1Fpa3NhMmc5Wnk1a2VXNURZV3hzWDNacWFtcHFhbXBxYW1abVptcHBabWxwYVdscGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdMSFVzZVN4QkxFSXNReXhFTEVZcFBUNG9hMmc5Wnk1a2VXNURZV3hzWDNacWFtcHFhbXBxYW1abVptcHBabWxwYVdscGFUMWNibFV1WW1jcEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDeDFMSGtzUVN4Q0xFTXNSQ3hHS1N4c2FEMW5MbVI1YmtOaGJHeGZkbWxxYVdscGFXbHBhV2xwYVQwb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2lrOVBpaHNhRDFuTG1SNWJrTmhiR3hmZG1scWFXbHBhV2xwYVdscGFUMVZMbU5uS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5S1N4dGFEMW5MbVI1YmtOaGJHeGZkbWxxYW1abVptbHBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlNrOVBpaHRhRDFuTG1SNWJrTmhiR3hmZG1scWFtWm1abWxwYVQxVkxtUm5LU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0S1N4dWFEMW5MbVI1YmtOaGJHeGZkbWxwYVdscGFXbHFhV2xwYVQwb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2lrOVBpaHVhRDFuTG1SNWJrTmhiR3hmZG1scGFXbHBhV2xxYVdscGFUMVZMbVZuS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5S1N4dmFEMW5MbVI1YmtOaGJHeGZkbWxxYW1wcWFtcHBabWxwYVdscFBTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU2s5UGlodmFEMW5MbVI1YmtOaGJHeGZkbWxxYW1wcWFtcHBabWxwYVdscFBWVXVabWNwS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeGNibkVzY2l4d0xIVXBMSEJvUFdjdVpIbHVRMkZzYkY5MmFXbG1hVDBvWVN4aUxHTXNaQ3hsS1QwK0tIQm9QV2N1WkhsdVEyRnNiRjkyYVdsbWFUMVZMbWRuS1NoaExHSXNZeXhrTEdVcExIRm9QV2N1WkhsdVEyRnNiRjkyYW1wcWFtcHBhV2xwUFNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dEtUMCtLSEZvUFdjdVpIbHVRMkZzYkY5MmFtcHFhbXBwYVdscFBWVXVhR2NwS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwcExISm9QV2N1WkhsdVEyRnNiRjkyYW1wcWFtWnBhV2s5S0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzS1QwK0tISm9QV2N1WkhsdVEyRnNiRjkyYW1wcWFtWnBhV2s5VlM1cFp5a29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BMSE5vUFdjdVpIbHVRMkZzYkY5MmFXbHBhV2xwYW1scGFXbHBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3S1QwK0tITm9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBhbWxwYVdscGFUMVZMbXBuS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBcExIUm9QV2N1WkhsdVEyRnNiRjkyYVdwcWFXazlLR0VzWWl4akxHUXNaU3htS1QwK0tIUm9QV2N1WkhsdVEyRnNiRjkyYVdwcWFXazlWUzVyWnlrb1lTeGlMR01zWkN4bExHWXBMSFZvUFdjdVpIbHVRMkZzYkY5MmFXbHBhV2xxYW1scGFXbHBQU2hoTEdJc1l5eGNibVFzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElwUFQ0b2RXZzlaeTVrZVc1RFlXeHNYM1pwYVdscGFXcHFhV2xwYVdrOVZTNXNaeWtvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaWtzZG1nOVp5NWtlVzVEWVd4c1gybHBhV2xwYW1rOUtHRXNZaXhqTEdRc1pTeG1MR2dwUFQ0b2RtZzlaeTVrZVc1RFlXeHNYMmxwYVdscGFtazlWUzV0Wnlrb1lTeGlMR01zWkN4bExHWXNhQ2tzZDJnOVp5NWtlVzVEWVd4c1gybHBhV2xxYVQwb1lTeGlMR01zWkN4bExHWXBQVDRvZDJnOVp5NWtlVzVEWVd4c1gybHBhV2xxYVQxVkxtNW5LU2hoTEdJc1l5eGtMR1VzWmlrc2VHZzlaeTVrZVc1RFlXeHNYM1pwYVdscGFXcHBhV2xwYVdrOUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJcFBUNG9lR2c5Wnk1a2VXNURZV3hzWDNacGFXbHBhV3BwYVdscGFXazlWUzV2Wnlrb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2lrc2VXZzlaeTVrZVc1RFlXeHNYM1pwYVdscWFXbHBhV2xwUFNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHBQVDRvZVdnOVp5NWtlVzVEWVd4c1gzWnBhV2xxYVdscGFXbHBQVlV1Y0djcEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaWtzZW1nOVp5NWtlVzVEWVd4c1gzWnBhV3BxUFNoaExHSXNZeXhrTEdVcFBUNG9lbWc5Wnk1a2VXNURZV3hzWDNacGFXcHFQVnh1VlM1eFp5a29ZU3hpTEdNc1pDeGxLU3hCYUQxbkxtUjVia05oYkd4ZmRtbHBhV2xxYVdrOUtHRXNZaXhqTEdRc1pTeG1MR2dzYXlrOVBpaEJhRDFuTG1SNWJrTmhiR3hmZG1scGFXbHFhV2s5VlM1eVp5a29ZU3hpTEdNc1pDeGxMR1lzYUN4cktTeENhRDFuTG1SNWJrTmhiR3hmZG1scGFtcHBhV2s5S0dFc1lpeGpMR1FzWlN4bUxHZ3NheWs5UGloQ2FEMW5MbVI1YmtOaGJHeGZkbWxwYW1wcGFXazlWUzV6Wnlrb1lTeGlMR01zWkN4bExHWXNhQ3hyS1N4RGFEMW5MbVI1YmtOaGJHeGZhV3BwYVQwb1lTeGlMR01zWkNrOVBpaERhRDFuTG1SNWJrTmhiR3hmYVdwcGFUMVZMblJuS1NoaExHSXNZeXhrS1N4RWFEMW5MbVI1YmtOaGJHeGZkbWxwYVdscGFtcHFhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlNrOVBpaEVhRDFuTG1SNWJrTmhiR3hmZG1scGFXbHBhbXBxYVQxVkxuVm5LU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0S1N4RmFEMW5MbVI1YmtOaGJHeGZkbWxxYW1wcWFXbHFQU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ2s5UGloRmFEMW5MbVI1YmtOaGJHeGZkbWxxYW1wcWFXbHFQVlV1ZG1jcEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0tTeEdhRDFuTG1SNWJrTmhiR3hmZG1scGFXbHBhbWxxUFNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkNrOVBpaEdhRDFuTG1SNWJrTmhiR3hmZG1scGFXbHBhbWxxUFZ4dVZTNTNaeWtvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dwTEVkb1BXY3VaSGx1UTJGc2JGOTJhV2xwYVdscGFtbHFQU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0S1QwK0tFZG9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBhbWxxUFZVdWVHY3BLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBwTEVob1BXY3VaSGx1UTJGc2JGOTJhV3BwYVdrOUtHRXNZaXhqTEdRc1pTeG1LVDArS0Vob1BXY3VaSGx1UTJGc2JGOTJhV3BwYVdrOVZTNTVaeWtvWVN4aUxHTXNaQ3hsTEdZcExFbG9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBhV2xwWm1rOUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4S1QwK0tFbG9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBhV2xwWm1rOVZTNTZaeWtvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXBMRXBvUFdjdVpIbHVRMkZzYkY5cGFXbHFhV2xwYVQwb1lTeGlMR01zWkN4bExHWXNhQ3hyS1QwK0tFcG9QV2N1WkhsdVEyRnNiRjlwYVdscWFXbHBhVDFWTGtGbktTaGhMR0lzWXl4a0xHVXNaaXhvTEdzcExFdG9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBhbXBwYVdscGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdLVDArS0V0b1BXY3VaSGx1UTJGc2JGOTJhV2xwYVdscGFtcHBhV2xwYVQxVkxrSm5LU2hoTEdJc1l5eGtMR1VzWEc1bUxHZ3NheXhzTEcwc2JpeHhMSElzY0Nrc1RHZzlaeTVrZVc1RFlXeHNYM1pwYVdscGFXbHBhbWxwYVdscGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdMSFVwUFQ0b1RHZzlaeTVrZVc1RFlXeHNYM1pwYVdscGFXbHBhbWxwYVdscGFUMVZMa05uS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBc2RTa3NUV2c5Wnk1a2VXNURZV3hzWDNacFpqMG9ZU3hpTEdNcFBUNG9UV2c5Wnk1a2VXNURZV3hzWDNacFpqMVZMa1JuS1NoaExHSXNZeWtzVG1nOVp5NWtlVzVEWVd4c1gzWnBhV1k5S0dFc1lpeGpMR1FwUFQ0b1RtZzlaeTVrZVc1RFlXeHNYM1pwYVdZOVZTNUZaeWtvWVN4aUxHTXNaQ2tzVDJnOVp5NWtlVzVEWVd4c1gyWnBhV2s5S0dFc1lpeGpMR1FwUFQ0b1QyZzlaeTVrZVc1RFlXeHNYMlpwYVdrOVZTNUdaeWtvWVN4aUxHTXNaQ2tzVUdnOVp5NWtlVzVEWVd4c1gyUnBhV2s5S0dFc1lpeGpMR1FwUFQ0b1VHZzlaeTVrZVc1RFlXeHNYMlJwYVdrOVZTNUhaeWtvWVN4aUxHTXNaQ2tzVVdnOVp5NWtlVzVEWVd4c1gzWnBhV2xwYVdsbWFXazlLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBwUFQ0b1VXZzlaeTVrZVc1RFlXeHNYM1pwYVdscGFXbG1hV2s5VlM1SVp5a29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU2tzVW1nOVp5NWtlVzVEWVd4c1gzWnBhV2xwYVdwcGFXbHBhV2xwYVdscGFXbHBhV2xwYVdscFBWeHVLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ3gxTEhrc1FTeENMRU1zUkN4R0xFZ3NTeXhXWVN4WFlTeFlZU2s5UGloU2FEMW5MbVI1YmtOaGJHeGZkbWxwYVdscGFtbHBhV2xwYVdscGFXbHBhV2xwYVdscGFXazlWUzVKWnlrb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0xIVXNlU3hCTEVJc1F5eEVMRVlzU0N4TExGWmhMRmRoTEZoaEtTeFRhRDFuTG1SNWJrTmhiR3hmZG1scGFtcHBQU2hoTEdJc1l5eGtMR1VzWmlrOVBpaFRhRDFuTG1SNWJrTmhiR3hmZG1scGFtcHBQVlV1U21jcEtHRXNZaXhqTEdRc1pTeG1LU3hVYUQxbkxtUjVia05oYkd4ZmFXbHBhV2xwYVdscGFXbHFhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaWs5UGloVWFEMW5MbVI1YmtOaGJHeGZhV2xwYVdscGFXbHBhV2xxYVQxVkxrdG5LU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlLU3hWYUQxbkxtUjVia05oYkd4ZmRtbHBabWxwWm1scWFtcHBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaWs5UGloVmFEMW5MbVI1YmtOaGJHeGZkbWxwWm1scFptbHFhbXBwYVQxVkxreG5LU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlLU3hXYUQxbkxtUjVia05oYkd4ZmRtbHBhV2xwYVdscGFXbHBhV2xwYVdscGFXbHBQVnh1S0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUxIa3NRU3hDTEVNc1JDeEdLVDArS0Zab1BXY3VaSGx1UTJGc2JGOTJhV2xwYVdscGFXbHBhV2xwYVdscGFXbHBhV2s5VlM1Tlp5a29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdMSFVzZVN4QkxFSXNReXhFTEVZcExGZG9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbG1hV2xwYVdscFBTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUtUMCtLRmRvUFdjdVpIbHVRMkZzYkY5MmFXbHBhV2xtYVdscGFXbHBQVlV1VG1jcEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJcExGaG9QV2N1WkhsdVEyRnNiRjkyYVdwcGFXbHBhV2xwYW1wcGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdLVDArS0Zob1BXY3VaSGx1UTJGc2JGOTJhV3BwYVdscGFXbHBhbXBwYVQxVkxrOW5LU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFwTEZsb1BXY3VaSGx1UTJGc2JGOTJhV2xwYVdscGFXbHBhV2xwYVdscGFXbHBQU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFzZFN4NUxFRXNRaXhES1QwK0tGbG9QV2N1WkhsdVEyRnNiRjkyYVdscGFXbHBhV2xwYVdscGFXbHBhV2xwUFZVdVVHY3BLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRnh1YlN4dUxIRXNjaXh3TEhVc2VTeEJMRUlzUXlrc1dtZzlaeTVrZVc1RFlXeHNYM1pwYVdscGFXbHBhV2xwYVdscGFXbHBhV2xwUFNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBc2RTeDVMRUVzUWl4RExFUXBQVDRvV21nOVp5NWtlVzVEWVd4c1gzWnBhV2xwYVdscGFXbHBhV2xwYVdscGFXbHBQVlV1VVdjcEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDeDFMSGtzUVN4Q0xFTXNSQ2tzSkdnOVp5NWtlVzVEWVd4c1gzWnBhV2xwYVdscGFXbHBhV2xwYVdrOUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDeDFMSGtwUFQ0b0pHZzlaeTVrZVc1RFlXeHNYM1pwYVdscGFXbHBhV2xwYVdscGFXazlWUzVTWnlrb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0xIVXNlU2tzWVdrOVp5NWtlVzVEWVd4c1gzWnBhV2xwYVdscGFXbHBhV2xwYVdscFBTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU3g1TEVFcFBUNG9ZV2s5Wnk1a2VXNURZV3hzWDNacGFXbHBhV2xwYVdscGFXbHBhV2xwUFZVdVUyY3BLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ3gxTEhrc1FTa3NZbWs5Wnk1a2VXNURZV3hzWDNacGFXbHBhbXBxUFNoaExHSXNZeXhrTEdVc1ppeG9MR3NwUFQ0b1ltazlYRzVuTG1SNWJrTmhiR3hmZG1scGFXbHFhbW85VlM1VVp5a29ZU3hpTEdNc1pDeGxMR1lzYUN4cktTeGphVDFuTG1SNWJrTmhiR3hmYVdscGFXbGtQU2hoTEdJc1l5eGtMR1VzWmlrOVBpaGphVDFuTG1SNWJrTmhiR3hmYVdscGFXbGtQVlV1VldjcEtHRXNZaXhqTEdRc1pTeG1LU3hrYVQxbkxtUjVia05oYkd4ZmRtbHBhV2xwYVdscWFtbzlLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYmlrOVBpaGthVDFuTG1SNWJrTmhiR3hmZG1scGFXbHBhV2xxYW1vOVZTNVdaeWtvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUtTeGxhVDFuTG1SNWJrTmhiR3hmYVdscGFXbHBhV2xwYVdrOUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaWs5UGlobGFUMW5MbVI1YmtOaGJHeGZhV2xwYVdscGFXbHBhV2s5VlM1WFp5a29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1S1N4bWFUMW5MbVI1YmtOaGJHeGZhV2xwYVdscGFXbHBhV2xwYVdscGFXbHBabWs5S0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUxIa3NRU3hDTEVNc1JDazlQaWhtYVQxbkxtUjVia05oYkd4ZmFXbHBhV2xwYVdscGFXbHBhV2xwYVdscFptazlWUzVZWnlrb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0xIVXNlU3hCTEVJc1F5eEVLU3huYVQxbkxtUjVia05oYkd4ZmRtbHBhV1k5WEc0b1lTeGlMR01zWkN4bEtUMCtLR2RwUFdjdVpIbHVRMkZzYkY5MmFXbHBaajFWTGxsbktTaGhMR0lzWXl4a0xHVXBMR2hwUFdjdVpIbHVRMkZzYkY5MmFXbHBhbWxwYVdscFBTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRLVDArS0docFBXY3VaSGx1UTJGc2JGOTJhV2xwYW1scGFXbHBQVlV1V21jcEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHBMR2xwUFdjdVpIbHVRMkZzYkY5MmFXbHBhajBvWVN4aUxHTXNaQ3hsS1QwK0tHbHBQV2N1WkhsdVEyRnNiRjkyYVdscGFqMVZMbDluS1NoaExHSXNZeXhrTEdVcExHcHBQV2N1WkhsdVEyRnNiRjlwYVdwcWFqMG9ZU3hpTEdNc1pDeGxLVDArS0dwcFBXY3VaSGx1UTJGc2JGOXBhV3BxYWoxVkxpUm5LU2hoTEdJc1l5eGtMR1VwTEd0cFBXY3VaSGx1UTJGc2JGOTJhV2xwYVdwcFBTaGhMR0lzWXl4a0xHVXNaaXhvS1QwK0tHdHBQV2N1WkhsdVEyRnNiRjkyYVdscGFXcHBQVlV1WVdncEtHRXNZaXhqTEdRc1pTeG1MR2dwTEd4cFBXY3VaSGx1UTJGc2JGOXBhV3BxYW1rOUtHRXNZaXhqTEdRc1pTeG1LVDArS0d4cFBXY3VaSGx1UTJGc2JGOXBhV3BxYW1rOVZTNWlhQ2tvWVN4aUxHTXNaQ3hsTEdZcExHMXBQV2N1WkhsdVEyRnNiRjlwYW1scWFtazlLR0VzWWl4akxHUXNaU3htS1QwK0tHMXBQV2N1WkhsdVEyRnNiRjlwYW1scWFtazlWUzVqYUNrb1lTeGNibUlzWXl4a0xHVXNaaWtzYm1rOVp5NWtlVzVEWVd4c1gzWnBhV2xxYW1scGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BQVDRvYm1rOVp5NWtlVzVEWVd4c1gzWnBhV2xxYW1scGFUMVZMbVJvS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkNrc2IyazlaeTVrZVc1RFlXeHNYMmxwYVdscGFtcHBQU2hoTEdJc1l5eGtMR1VzWml4b0xHc3BQVDRvYjJrOVp5NWtlVzVEWVd4c1gybHBhV2xwYW1wcFBWVXVaV2dwS0dFc1lpeGpMR1FzWlN4bUxHZ3NheWtzY0drOVp5NWtlVzVEWVd4c1gybHBhV2xtYVQwb1lTeGlMR01zWkN4bExHWXBQVDRvY0drOVp5NWtlVzVEWVd4c1gybHBhV2xtYVQxVkxtWm9LU2hoTEdJc1l5eGtMR1VzWmlrc2NXazlaeTVrZVc1RFlXeHNYMmxwYVdwcGFUMG9ZU3hpTEdNc1pDeGxMR1lwUFQ0b2NXazlaeTVrZVc1RFlXeHNYMmxwYVdwcGFUMVZMbWRvS1NoaExHSXNZeXhrTEdVc1ppa3NjbWs5Wnk1a2VXNURZV3hzWDJscGFXbHBhV2xwYVdwcGFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFcFBUNG9jbWs5Wnk1a2VXNURZV3hzWDJscGFXbHBhV2xwYVdwcGFUMVZMbWhvS1NoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU2tzYzJrOVp5NWtlVzVEWVd4c1gybHBhV2xxYW1scFBTaGhMR0lzWXl4a0xHVXNaaXhvTEdzcFBUNG9jMms5Wnk1a2VXNURZV3hzWDJscGFXbHFhbWxwUFZ4dVZTNXBhQ2tvWVN4aUxHTXNaQ3hsTEdZc2FDeHJLU3gwYVQxbkxtUjVia05oYkd4ZmFXbHBhV2xwYW1wcWFXazlLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYmlrOVBpaDBhVDFuTG1SNWJrTmhiR3hmYVdscGFXbHBhbXBxYVdrOVZTNXFhQ2tvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUtTeDFhVDFuTG1SNWJrTmhiR3hmYVdscGFtbHBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDazlQaWgxYVQxbkxtUjVia05oYkd4ZmFXbHBhbWxwYVQxVkxtdG9LU2hoTEdJc1l5eGtMR1VzWml4b0tTeDJhVDFuTG1SNWJrTmhiR3hmYVdscGFXbHBhV2xxYW1wbWFUMG9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpazlQaWgyYVQxbkxtUjVia05oYkd4ZmFXbHBhV2xwYVdscWFtcG1hVDFWTG14b0tTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUtTeDNhVDFuTG1SNWJrTmhiR3hmYVdscWFXbHBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDazlQaWgzYVQxbkxtUjVia05oYkd4ZmFXbHFhV2xwYVQxVkxtMW9LU2hoTEdJc1l5eGtMR1VzWml4b0tTeDRhVDFuTG1SNWJrTmhiR3hmYVdscWFtcHBhVDBvWVN4aUxHTXNaQ3hsTEdZc2FDazlQaWg0YVQxbkxtUjVia05oYkd4ZmFXbHFhbXBwYVQxVkxtNW9LU2hoTEdJc1l5eGtMR1VzWml4b0tTeDVhVDFuTG1SNWJrTmhiR3hmYW1scVBWeHVLR0VzWWl4aktUMCtLSGxwUFdjdVpIbHVRMkZzYkY5cWFXbzlWUzV2YUNrb1lTeGlMR01wTEhwcFBXY3VaSGx1UTJGc2JGOXBhV3BwUFNoaExHSXNZeXhrS1QwK0tIcHBQV2N1WkhsdVEyRnNiRjlwYVdwcFBWVXVjR2dwS0dFc1lpeGpMR1FwTEVGcFBXY3VaSGx1UTJGc2JGOXBhV2xtUFNoaExHSXNZeXhrS1QwK0tFRnBQV2N1WkhsdVEyRnNiRjlwYVdsbVBWVXVjV2dwS0dFc1lpeGpMR1FwTEVKcFBXY3VaSGx1UTJGc2JGOTJhV1JwUFNoaExHSXNZeXhrS1QwK0tFSnBQV2N1WkhsdVEyRnNiRjkyYVdScFBWVXVjbWdwS0dFc1lpeGpMR1FwTEVOcFBXY3VaSGx1UTJGc2JGOTJhbWxwYVQwb1lTeGlMR01zWkN4bEtUMCtLRU5wUFdjdVpIbHVRMkZzYkY5MmFtbHBhVDFWTG5Ob0tTaGhMR0lzWXl4a0xHVXBMRVJwUFdjdVpIbHVRMkZzYkY5a2FXbHBhVDBvWVN4aUxHTXNaQ3hsS1QwK0tFUnBQV2N1WkhsdVEyRnNiRjlrYVdscGFUMVZMblJvS1NoaExHSXNZeXhrTEdVcExFVnBQV2N1WkhsdVEyRnNiRjlrYVdscGFXazlLR0VzWWl4akxHUXNaU3htS1QwK0tFVnBQV2N1WkhsdVEyRnNiRjlrYVdscGFXazlWUzUxYUNrb1lTeGlMR01zWkN4bExHWXBMRVpwUFdjdVpIbHVRMkZzYkY5MmFXbHBhbXBwYVdscGFXazlLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eEtUMCtLRVpwUFdjdVpIbHVRMkZzYkY5MmFXbHBhbXBwYVdscGFXazlYRzVWTG5ab0tTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1Nrc1IyazlaeTVrZVc1RFlXeHNYM1pwYVdwcWFXcHFhbXBwYVdrOUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJcFBUNG9SMms5Wnk1a2VXNURZV3hzWDNacGFXcHFhV3BxYW1wcGFXazlWUzUzYUNrb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2lrc1NHazlaeTVrZVc1RFlXeHNYMmxwYVdscVBTaGhMR0lzWXl4a0xHVXBQVDRvU0drOVp5NWtlVzVEWVd4c1gybHBhV2xxUFZVdWVHZ3BLR0VzWWl4akxHUXNaU2tzU1drOVp5NWtlVzVEWVd4c1gzWnBhV2xxYVdrOUtHRXNZaXhqTEdRc1pTeG1MR2dwUFQ0b1NXazlaeTVrZVc1RFlXeHNYM1pwYVdscWFXazlWUzU1YUNrb1lTeGlMR01zWkN4bExHWXNhQ2tzU21rOVp5NWtlVzVEWVd4c1gzWnBhV3BwYVdscGFXbHBhV2s5S0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElwUFQ0b1NtazlaeTVrZVc1RFlXeHNYM1pwYVdwcGFXbHBhV2xwYVdrOVZTNTZhQ2tvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaWtzUzJrOVp5NWtlVzVEWVd4c1gyWnBhV2xwUFNoaExHSXNZeXhrTEdVcFBUNG9TMms5Wnk1a2VXNURZV3hzWDJacGFXbHBQVlV1UVdncEtHRXNZaXhqTEdRc1pTa3NUR2s5Wnk1a2VXNURZV3hzWDJwbWFUMWNiaWhoTEdJc1l5azlQaWhNYVQxbkxtUjVia05oYkd4ZmFtWnBQVlV1UW1ncEtHRXNZaXhqS1N4TmFUMW5MbVI1YmtOaGJHeGZkbWxwYVdscGFXbHBhV2xwYVdscFBTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU2s5UGloTmFUMW5MbVI1YmtOaGJHeGZkbWxwYVdscGFXbHBhV2xwYVdscFBWVXVRMmdwS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUtTeE9hVDFuTG1SNWJrTmhiR3hmYW1scGFqMG9ZU3hpTEdNc1pDazlQaWhPYVQxbkxtUjVia05oYkd4ZmFtbHBhajFWTGtSb0tTaGhMR0lzWXl4a0tTeE5ZajFoUFQ0b1RXSTlWUzVGYUNrb1lTa3NRbUk5S0NrOVBpaENZajFWTGtab0tTZ3BMRXhpUFdFOVBpaE1ZajFWTGtkb0tTaGhLU3hPWWowb0tUMCtLRTVpUFZVdVNHZ3BLQ2s3Wnk1ZlgxOXpkR0Z5ZEY5bGJWOXFjejB4TWpjMU1EUTBPMmN1WDE5ZmMzUnZjRjlsYlY5cWN6MHhNamMxTWpBMU8yWjFibU4wYVc5dUlFUmpLR0VzWWl4akxHUXBlM1poY2lCbFBWb29LVHQwY25sN2NtVjBkWEp1SUVabUtHRXNZaXhqTEdRcGZXTmhkR05vS0dZcGUxa29aU2s3YVdZb1ppRTlQV1lyTUNsMGFISnZkeUJtTzFnb01Td3dLWDE5WEc1bWRXNWpkR2x2YmlCQ1l5aGhMR0lzWXlsN2RtRnlJR1E5V2lncE8zUnllWHR5WlhSMWNtNGdaSGx1UTJGc2JGOXBhV2tvWVN4aUxHTXBmV05oZEdOb0tHVXBlMWtvWkNrN2FXWW9aU0U5UFdVck1DbDBhSEp2ZHlCbE8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1NtUW9ZU3hpTEdNcGUzWmhjaUJrUFZvb0tUdDBjbmw3WkhsdVEyRnNiRjkyYVdrb1lTeGlMR01wZldOaGRHTm9LR1VwZTFrb1pDazdhV1lvWlNFOVBXVXJNQ2wwYUhKdmR5QmxPMWdvTVN3d0tYMTlablZ1WTNScGIyNGdlV01vWVN4aUtYdDJZWElnWXoxYUtDazdkSEo1ZTNKbGRIVnliaUJIWmloaExHSXBmV05oZEdOb0tHUXBlMWtvWXlrN2FXWW9aQ0U5UFdRck1DbDBhSEp2ZHlCa08xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1JtUW9ZU3hpS1h0MllYSWdZejFhS0NrN2RISjVlMlI1YmtOaGJHeGZkbWtvWVN4aUtYMWpZWFJqYUNoa0tYdFpLR01wTzJsbUtHUWhQVDFrS3pBcGRHaHliM2NnWkR0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUdSa0tHRXNZaXhqTEdRcGUzWmhjaUJsUFZvb0tUdDBjbmw3Y21WMGRYSnVJRXBtS0dFc1lpeGpMR1FwZldOaGRHTm9LR1lwZTFrb1pTazdhV1lvWmlFOVBXWXJNQ2wwYUhKdmR5Qm1PMWdvTVN3d0tYMTlYRzVtZFc1amRHbHZiaUJFWkNoaEtYdDJZWElnWWoxYUtDazdkSEo1ZTJSNWJrTmhiR3hmZGloaEtYMWpZWFJqYUNoaktYdFpLR0lwTzJsbUtHTWhQVDFqS3pBcGRHaHliM2NnWXp0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUVsaktHRXNZaXhqTEdRc1pTeG1MR2dwZTNaaGNpQnJQVm9vS1R0MGNubDdjbVYwZFhKdUlFaG1LR0VzWWl4akxHUXNaU3htTEdncGZXTmhkR05vS0d3cGUxa29heWs3YVdZb2JDRTlQV3dyTUNsMGFISnZkeUJzTzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnU0dNb1lTeGlMR01zWkN4bExHWXBlM1poY2lCb1BWb29LVHQwY25sN2NtVjBkWEp1SUVsbUtHRXNZaXhqTEdRc1pTeG1LWDFqWVhSamFDaHJLWHRaS0dncE8ybG1LR3NoUFQxckt6QXBkR2h5YjNjZ2F6dFlLREVzTUNsOWZXWjFibU4wYVc5dUlFWmpLR0VzWWl4akxHUXNaU2w3ZG1GeUlHWTlXaWdwTzNSeWVYdHlaWFIxY200Z1MyWW9ZU3hpTEdNc1pDeGxLWDFqWVhSamFDaG9LWHRaS0dZcE8ybG1LR2doUFQxb0t6QXBkR2h5YjNjZ2FEdFlLREVzTUNsOWZXWjFibU4wYVc5dUlGRmtLR0VzWWl4akxHUXBlM1poY2lCbFBWb29LVHQwY25sN1RHWW9ZU3hpTEdNc1pDbDlZMkYwWTJnb1ppbDdXU2hsS1R0cFppaG1JVDA5Wmlzd0tYUm9jbTkzSUdZN1dDZ3hMREFwZlgxY2JtWjFibU4wYVc5dUlGUmtLR0VzWWl4akxHUXNaU2w3ZG1GeUlHWTlXaWdwTzNSeWVYdE9aaWhoTEdJc1l5eGtMR1VwZldOaGRHTm9LR2dwZTFrb1ppazdhV1lvYUNFOVBXZ3JNQ2wwYUhKdmR5Qm9PMWdvTVN3d0tYMTlablZ1WTNScGIyNGdWbVFvWVN4aUxHTXNaQ3hsTEdZcGUzWmhjaUJvUFZvb0tUdDBjbmw3VFdZb1lTeGlMR01zWkN4bExHWXBmV05oZEdOb0tHc3BlMWtvYUNrN2FXWW9heUU5UFdzck1DbDBhSEp2ZHlCck8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1dtUW9ZU3hpTEdNc1pDeGxMR1lzYUNsN2RtRnlJR3M5V2lncE8zUnllWHRQWmloaExHSXNZeXhrTEdVc1ppeG9LWDFqWVhSamFDaHNLWHRaS0dzcE8ybG1LR3doUFQxc0t6QXBkR2h5YjNjZ2JEdFlLREVzTUNsOWZXWjFibU4wYVc5dUlHdGxLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eEtYdDJZWElnY2oxYUtDazdkSEo1ZTFGbUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4S1gxallYUmphQ2h3S1h0WktISXBPMmxtS0hBaFBUMXdLekFwZEdoeWIzY2djRHRZS0RFc01DbDlmV1oxYm1OMGFXOXVJSHBqS0dFc1lpeGpLWHQyWVhJZ1pEMWFLQ2s3ZEhKNWUzSmxkSFZ5YmlCVFppaGhMR0lzWXlsOVkyRjBZMmdvWlNsN1dTaGtLVHRwWmlobElUMDlaU3N3S1hSb2NtOTNJR1U3V0NneExEQXBmWDFjYm1aMWJtTjBhVzl1SUVGaktHRXNZaXhqS1h0MllYSWdaRDFhS0NrN2RISjVlM0psZEhWeWJpQlVaaWhoTEdJc1l5bDlZMkYwWTJnb1pTbDdXU2hrS1R0cFppaGxJVDA5WlNzd0tYUm9jbTkzSUdVN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCdFpDaGhMR0lzWXlsN2RtRnlJR1E5V2lncE8zUnllWHR5WlhSMWNtNGdWV1lvWVN4aUxHTXBmV05oZEdOb0tHVXBlMWtvWkNrN2FXWW9aU0U5UFdVck1DbDBhSEp2ZHlCbE8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z2VXUW9ZU3hpTEdNcGUzWmhjaUJrUFZvb0tUdDBjbmw3Y21WMGRYSnVJRlptS0dFc1lpeGpLWDFqWVhSamFDaGxLWHRaS0dRcE8ybG1LR1VoUFQxbEt6QXBkR2h5YjNjZ1pUdFlLREVzTUNrN2NtVjBkWEp1SURCdWZYMW1kVzVqZEdsdmJpQmxaU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ2w3ZG1GeUlHMDlXaWdwTzNSeWVYdFlaaWhoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ2w5WTJGMFkyZ29iaWw3V1NodEtUdHBaaWh1SVQwOWJpc3dLWFJvY205M0lHNDdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQjRZeWhoS1h0MllYSWdZajFhS0NrN2RISjVlM0psZEhWeWJpQlhaaWhoS1gxallYUmphQ2hqS1h0WktHSXBPMmxtS0dNaFBUMWpLekFwZEdoeWIzY2dZenRZS0RFc01DbDlmVnh1Wm5WdVkzUnBiMjRnWkdZb1lTeGlMR01wZTNaaGNpQmtQVm9vS1R0MGNubDdabWNvWVN4aUxHTXBmV05oZEdOb0tHVXBlMWtvWkNrN2FXWW9aU0U5UFdVck1DbDBhSEp2ZHlCbE8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1YyVW9ZU3hpTEdNc1pDeGxLWHQyWVhJZ1pqMWFLQ2s3ZEhKNWUxQm1LR0VzWWl4akxHUXNaU2w5WTJGMFkyZ29hQ2w3V1NobUtUdHBaaWhvSVQwOWFDc3dLWFJvY205M0lHZzdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQkRaU2hoTEdJc1l5eGtMR1VzWml4b0tYdDJZWElnYXoxYUtDazdkSEo1ZTFsbUtHRXNZaXhqTEdRc1pTeG1MR2dwZldOaGRHTm9LR3dwZTFrb2F5azdhV1lvYkNFOVBXd3JNQ2wwYUhKdmR5QnNPMWdvTVN3d0tYMTlablZ1WTNScGIyNGdZMllvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXBlM1poY2lCeVBWb29LVHQwY25sN1oyY29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFcGZXTmhkR05vS0hBcGUxa29jaWs3YVdZb2NDRTlQWEFyTUNsMGFISnZkeUJ3TzFnb01Td3dLWDE5WEc1bWRXNWpkR2x2YmlCU1pTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1NsN2RtRnlJSEk5V2lncE8zUnllWHRvWnloaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU2w5WTJGMFkyZ29jQ2w3V1NoeUtUdHBaaWh3SVQwOWNDc3dLWFJvY205M0lIQTdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQktZeWhoTEdJc1l5eGtMR1VzWml4b0xHc3BlM1poY2lCc1BWb29LVHQwY25sN2NtVjBkWEp1SUdsbktHRXNZaXhqTEdRc1pTeG1MR2dzYXlsOVkyRjBZMmdvYlNsN1dTaHNLVHRwWmlodElUMDliU3N3S1hSb2NtOTNJRzA3V0NneExEQXBmWDFtZFc1amRHbHZiaUJrWlNoaExHSXNZeXhrTEdVc1ppeG9MR3NwZTNaaGNpQnNQVm9vS1R0MGNubDdhbWNvWVN4aUxHTXNaQ3hsTEdZc2FDeHJLWDFqWVhSamFDaHRLWHRaS0d3cE8ybG1LRzBoUFQxdEt6QXBkR2h5YjNjZ2JUdFlLREVzTUNsOWZXWjFibU4wYVc5dUlFNWpLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eEtYdDJZWElnY2oxYUtDazdkSEo1ZTNKbGRIVnliaUJoWnloaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU2w5WTJGMFkyZ29jQ2w3V1NoeUtUdHBaaWh3SVQwOWNDc3dLWFJvY205M0lIQTdXQ2d4TERBcGZYMWNibVoxYm1OMGFXOXVJR1psS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwcGUzWmhjaUJ1UFZvb0tUdDBjbmw3WW1jb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTbDlZMkYwWTJnb2NTbDdXU2h1S1R0cFppaHhJVDA5Y1Nzd0tYUm9jbTkzSUhFN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCdFpTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXBlM1poY2lCMVBWb29LVHQwY25sN2JHY29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdLWDFqWVhSamFDaDVLWHRaS0hVcE8ybG1LSGtoUFQxNUt6QXBkR2h5YjNjZ2VUdFlLREVzTUNsOWZXWjFibU4wYVc5dUlGbGpLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYmlsN2RtRnlJSEU5V2lncE8zUnllWHR5WlhSMWNtNGdibWNvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUtYMWpZWFJqYUNoeUtYdFpLSEVwTzJsbUtISWhQVDF5S3pBcGRHaHliM2NnY2p0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUV0aktHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0tYdDJZWElnYlQxYUtDazdkSEo1ZTNKbGRIVnliaUJ0WnloaExHSXNZeXhrTEdVc1ppeG9MR3NzYkNsOVkyRjBZMmdvYmlsN1dTaHRLVHRwWmlodUlUMDliaXN3S1hSb2NtOTNJRzQ3V0NneExEQXBmWDFjYm1aMWJtTjBhVzl1SUc1bUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0tYdDJZWElnYlQxYUtDazdkSEo1ZTI5bktHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0tYMWpZWFJqYUNodUtYdFpLRzBwTzJsbUtHNGhQVDF1S3pBcGRHaHliM2NnYmp0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUZabEtHRXNZaXhqTEdRcGUzWmhjaUJsUFZvb0tUdDBjbmw3SkdZb1lTeGlMR01zWkNsOVkyRjBZMmdvWmlsN1dTaGxLVHRwWmlobUlUMDlaaXN3S1hSb2NtOTNJR1k3V0NneExEQXBmWDFtZFc1amRHbHZiaUIwWXloaExHSXBlM1poY2lCalBWb29LVHQwY25sN2NtVjBkWEp1SUhCbktHRXNZaWw5WTJGMFkyZ29aQ2w3V1NoaktUdHBaaWhrSVQwOVpDc3dLWFJvY205M0lHUTdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQjRaQ2hoTEdJcGUzWmhjaUJqUFZvb0tUdDBjbmw3Y21WMGRYSnVJRnBtS0dFc1lpbDlZMkYwWTJnb1pDbDdXU2hqS1R0cFppaGtJVDA5WkNzd0tYUm9jbTkzSUdRN1dDZ3hMREFwTzNKbGRIVnliaUF3Ym4xOVpuVnVZM1JwYjI0Z2JtTW9ZU3hpS1h0MllYSWdZejFhS0NrN2RISjVlM0psZEhWeWJpQnlaeWhoTEdJcGZXTmhkR05vS0dRcGUxa29ZeWs3YVdZb1pDRTlQV1FyTUNsMGFISnZkeUJrTzFnb01Td3dLWDE5WEc1bWRXNWpkR2x2YmlCcVppaGhMR0lzWXl4a0tYdDJZWElnWlQxYUtDazdkSEo1ZTNSbktHRXNZaXhqTEdRcGZXTmhkR05vS0dZcGUxa29aU2s3YVdZb1ppRTlQV1lyTUNsMGFISnZkeUJtTzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnVDJVb1lTeGlMR01zWkN4bExHWXNhQ2w3ZG1GeUlHczlXaWdwTzNSeWVYdEphU2hoTEdJc1l5eGtMR1VzWml4b0tYMWpZWFJqYUNoc0tYdFpLR3NwTzJsbUtHd2hQVDFzS3pBcGRHaHliM2NnYkR0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUZwbEtHRXNZaXhqTEdRc1pTbDdkbUZ5SUdZOVdpZ3BPM1J5ZVh0NmFDaGhMR0lzWXl4a0xHVXBmV05oZEdOb0tHZ3BlMWtvWmlrN2FXWW9hQ0U5UFdnck1DbDBhSEp2ZHlCb08xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1RHTW9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU2w3ZG1GeUlHNDlXaWdwTzNSeWVYdHlaWFIxY200Z2RXY29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU2w5WTJGMFkyZ29jU2w3V1NodUtUdHBaaWh4SVQwOWNTc3dLWFJvY205M0lIRTdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQllaU2hoTEdJc1l5eGtMR1VzWml4b0tYdDJZWElnYXoxYUtDazdkSEo1ZTNabktHRXNZaXhqTEdRc1pTeG1MR2dwZldOaGRHTm9LR3dwZTFrb2F5azdhV1lvYkNFOVBXd3JNQ2wwYUhKdmR5QnNPMWdvTVN3d0tYMTlYRzVtZFc1amRHbHZiaUJMWkNoaExHSXNZeXhrS1h0MllYSWdaVDFhS0NrN2RISjVlM2RuS0dFc1lpeGpMR1FwZldOaGRHTm9LR1lwZTFrb1pTazdhV1lvWmlFOVBXWXJNQ2wwYUhKdmR5Qm1PMWdvTVN3d0tYMTlablZ1WTNScGIyNGdWR01vWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dwZTNaaGNpQnRQVm9vS1R0MGNubDdjbVYwZFhKdUlHdG5LR0VzWWl4akxHUXNaU3htTEdnc2F5eHNLWDFqWVhSamFDaHVLWHRaS0cwcE8ybG1LRzRoUFQxdUt6QXBkR2h5YjNjZ2JqdFlLREVzTUNsOWZXWjFibU4wYVc5dUlFbGtLR0VzWWl4akxHUXNaU3htTEdncGUzWmhjaUJyUFZvb0tUdDBjbmw3ZUdjb1lTeGlMR01zWkN4bExHWXNhQ2w5WTJGMFkyZ29iQ2w3V1NocktUdHBaaWhzSVQwOWJDc3dLWFJvY205M0lHdzdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQlZaU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ2w3ZG1GeUlHMDlXaWdwTzNSeWVYdFNaaWhoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ2w5WTJGMFkyZ29iaWw3V1NodEtUdHBaaWh1SVQwOWJpc3dLWFJvY205M0lHNDdXQ2d4TERBcGZYMWNibVoxYm1OMGFXOXVJRkJrS0dFc1lpeGpMR1FzWlN4bUxHZ3BlM1poY2lCclBWb29LVHQwY25sN2VXY29ZU3hpTEdNc1pDeGxMR1lzYUNsOVkyRjBZMmdvYkNsN1dTaHJLVHRwWmloc0lUMDliQ3N3S1hSb2NtOTNJR3c3V0NneExEQXBmWDFtZFc1amRHbHZiaUJYWkNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHBlM1poY2lCeFBWb29LVHQwY25sN2VtY29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1S1gxallYUmphQ2h5S1h0WktIRXBPMmxtS0hJaFBUMXlLekFwZEdoeWIzY2djanRZS0RFc01DbDlmV1oxYm1OMGFXOXVJSHBrS0dFc1lpeGpMR1FwZTNaaGNpQmxQVm9vS1R0MGNubDdjbVYwZFhKdUlFSm5LR0VzWWl4akxHUXBmV05oZEdOb0tHWXBlMWtvWlNrN2FXWW9aaUU5UFdZck1DbDBhSEp2ZHlCbU8xZ29NU3d3S1R0eVpYUjFjbTRnTUc1OWZXWjFibU4wYVc5dUlIVm1LR0VzWWl4akxHUXNaU3htTEdnc2F5bDdkbUZ5SUd3OVdpZ3BPM1J5ZVh0RFp5aGhMR0lzWXl4a0xHVXNaaXhvTEdzcGZXTmhkR05vS0cwcGUxa29iQ2s3YVdZb2JTRTlQVzByTUNsMGFISnZkeUJ0TzFnb01Td3dLWDE5WEc1bWRXNWpkR2x2YmlCU1pDaGhMR0lzWXl4a0xHVXBlM1poY2lCbVBWb29LVHQwY25sN1JHY29ZU3hpTEdNc1pDeGxLWDFqWVhSamFDaG9LWHRaS0dZcE8ybG1LR2doUFQxb0t6QXBkR2h5YjNjZ2FEdFlLREVzTUNsOWZXWjFibU4wYVc5dUlHVm1LR0VzWWl4akxHUXBlM1poY2lCbFBWb29LVHQwY25sN1JtY29ZU3hpTEdNc1pDbDlZMkYwWTJnb1ppbDdXU2hsS1R0cFppaG1JVDA5Wmlzd0tYUm9jbTkzSUdZN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCeVppaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU3g1S1h0MllYSWdRVDFhS0NrN2RISjVlMGRuS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUxIa3BmV05oZEdOb0tFSXBlMWtvUVNrN2FXWW9RaUU5UFVJck1DbDBhSEp2ZHlCQ08xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1RtVW9ZU3hpTEdNc1pDeGxMR1lwZTNaaGNpQm9QVm9vS1R0MGNubDdTR2NvWVN4aUxHTXNaQ3hsTEdZcGZXTmhkR05vS0dzcGUxa29hQ2s3YVdZb2F5RTlQV3NyTUNsMGFISnZkeUJyTzFnb01Td3dLWDE5WEc1bWRXNWpkR2x2YmlCdlppaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDbDdkbUZ5SUcwOVdpZ3BPM1J5ZVh0Slp5aGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDbDlZMkYwWTJnb2JpbDdXU2h0S1R0cFppaHVJVDA5Ymlzd0tYUm9jbTkzSUc0N1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCbFpDaGhMR0lzWXl4a0xHVXBlM1poY2lCbVBWb29LVHQwY25sN2NtVjBkWEp1SUVwbktHRXNZaXhqTEdRc1pTbDlZMkYwWTJnb2FDbDdXU2htS1R0cFppaG9JVDA5YUNzd0tYUm9jbTkzSUdnN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCclpDaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXBlM1poY2lCMVBWb29LVHQwY25sN2NtVjBkWEp1SUV0bktHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDbDlZMkYwWTJnb2VTbDdXU2gxS1R0cFppaDVJVDA5ZVNzd0tYUm9jbTkzSUhrN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCelppaGhMR0lwZTNaaGNpQmpQVm9vS1R0MGNubDdUR2NvWVN4aUtYMWpZWFJqYUNoa0tYdFpLR01wTzJsbUtHUWhQVDFrS3pBcGRHaHliM2NnWkR0WUtERXNNQ2w5ZlZ4dVpuVnVZM1JwYjI0Z1EyUW9ZU3hpTEdNcGUzWmhjaUJrUFZvb0tUdDBjbmw3Y21WMGRYSnVJRTFuS0dFc1lpeGpLWDFqWVhSamFDaGxLWHRaS0dRcE8ybG1LR1VoUFQxbEt6QXBkR2h5YjNjZ1pUdFlLREVzTUNrN2NtVjBkWEp1SURCdWZYMW1kVzVqZEdsdmJpQnFaQ2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0S1h0MllYSWdiajFhS0NrN2RISjVlM0psZEhWeWJpQk9aeWhoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0S1gxallYUmphQ2h4S1h0WktHNHBPMmxtS0hFaFBUMXhLekFwZEdoeWIzY2djVHRZS0RFc01DbDlmV1oxYm1OMGFXOXVJR2xsS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0NsN2RtRnlJSFU5V2lncE8zUnllWHRUWnloaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBcGZXTmhkR05vS0hrcGUxa29kU2s3YVdZb2VTRTlQWGtyTUNsMGFISnZkeUI1TzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnUldRb1lTeGlMR01zWkN4bEtYdDJZWElnWmoxYUtDazdkSEo1ZTA5bktHRXNZaXhqTEdRc1pTbDlZMkYwWTJnb2FDbDdXU2htS1R0cFppaG9JVDA5YUNzd0tYUm9jbTkzSUdnN1dDZ3hMREFwZlgxY2JtWjFibU4wYVc5dUlGVmtLR0VzWWl4akxHUXNaU3htTEdncGUzWmhjaUJyUFZvb0tUdDBjbmw3VUdjb1lTeGlMR01zWkN4bExHWXNhQ2w5WTJGMFkyZ29iQ2w3V1NocktUdHBaaWhzSVQwOWJDc3dLWFJvY205M0lHdzdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQk5aQ2hoTEdJc1l5eGtMR1VwZTNaaGNpQm1QVm9vS1R0MGNubDdVbWNvWVN4aUxHTXNaQ3hsS1gxallYUmphQ2hvS1h0WktHWXBPMmxtS0dnaFBUMW9LekFwZEdoeWIzY2dhRHRZS0RFc01DbDlmV1oxYm1OMGFXOXVJRmhrS0dFc1lpeGpMR1FzWlN4bUxHZ3NheWw3ZG1GeUlHdzlXaWdwTzNSeWVYdFJaeWhoTEdJc1l5eGtMR1VzWml4b0xHc3BmV05oZEdOb0tHMHBlMWtvYkNrN2FXWW9iU0U5UFcwck1DbDBhSEp2ZHlCdE8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z2RXVW9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1S1h0MllYSWdjVDFhS0NrN2RISjVlMVJuS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpbDlZMkYwWTJnb2NpbDdXU2h4S1R0cFppaHlJVDA5Y2lzd0tYUm9jbTkzSUhJN1dDZ3hMREFwZlgxY2JtWjFibU4wYVc5dUlFOWpLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ3gxTEhrc1FTbDdkbUZ5SUVJOVdpZ3BPM1J5ZVh0eVpYUjFjbTRnVldjb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0xIVXNlU3hCS1gxallYUmphQ2hES1h0WktFSXBPMmxtS0VNaFBUMURLekFwZEdoeWIzY2dRenRZS0RFc01DbDlmV1oxYm1OMGFXOXVJR3hsS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElwZTNaaGNpQndQVm9vS1R0MGNubDdWbWNvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaWw5WTJGMFkyZ29kU2w3V1Nod0tUdHBaaWgxSVQwOWRTc3dLWFJvY205M0lIVTdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQnpaQ2hoTEdJcGUzWmhjaUJqUFZvb0tUdDBjbmw3Y21WMGRYSnVJR05uS0dFc1lpbDlZMkYwWTJnb1pDbDdXU2hqS1R0cFppaGtJVDA5WkNzd0tYUm9jbTkzSUdRN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCM1l5aGhMR0lzWXl4a0xHVXBlM1poY2lCbVBWb29LVHQwY25sN2NtVjBkWEp1SUV0cEtHRXNZaXhqTEdRc1pTbDlZMkYwWTJnb2FDbDdXU2htS1R0cFppaG9JVDA5YUNzd0tYUm9jbTkzSUdnN1dDZ3hMREFwZlgxY2JtWjFibU4wYVc5dUlGQmpLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ3gxTEhrc1FTeENMRU1zUkNsN2RtRnlJRVk5V2lncE8zUnllWHR5WlhSMWNtNGdWMmNvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3TEhVc2VTeEJMRUlzUXl4RUtYMWpZWFJqYUNoSUtYdFpLRVlwTzJsbUtFZ2hQVDFJS3pBcGRHaHliM2NnU0R0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUcxbUtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHBlM1poY2lCdVBWb29LVHQwY25sN1dHY29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU2w5WTJGMFkyZ29jU2w3V1NodUtUdHBaaWh4SVQwOWNTc3dLWFJvY205M0lIRTdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQmpaQ2hoTEdJc1l5eGtMR1VzWml4b0tYdDJZWElnYXoxYUtDazdkSEo1ZTNKbGRIVnliaUJaWnloaExHSXNZeXhrTEdVc1ppeG9LWDFqWVhSamFDaHNLWHRaS0dzcE8ybG1LR3doUFQxc0t6QXBkR2h5YjNjZ2JEdFlLREVzTUNsOWZXWjFibU4wYVc5dUlHcGxLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYmlsN2RtRnlJSEU5V2lncE8zUnllWHRhWnloaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHBmV05oZEdOb0tISXBlMWtvY1NrN2FXWW9jaUU5UFhJck1DbDBhSEp2ZHlCeU8xZ29NU3d3S1gxOVhHNW1kVzVqZEdsdmJpQnNaQ2hoTEdJc1l5eGtMR1VzWmlsN2RtRnlJR2c5V2lncE8zUnllWHR5WlhSMWNtNGdKR2NvWVN4aUxHTXNaQ3hsTEdZcGZXTmhkR05vS0dzcGUxa29hQ2s3YVdZb2F5RTlQV3NyTUNsMGFISnZkeUJyTzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnU1dVb1lTeGlMR01zWkN4bExHWXBlM1poY2lCb1BWb29LVHQwY25sN1ltZ29ZU3hpTEdNc1pDeGxMR1lwZldOaGRHTm9LR3NwZTFrb2FDazdhV1lvYXlFOVBXc3JNQ2wwYUhKdmR5QnJPMWdvTVN3d0tYMTlablZ1WTNScGIyNGdlV1VvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3S1h0MllYSWdkVDFhS0NrN2RISjVlMk5vS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0NsOVkyRjBZMmdvZVNsN1dTaDFLVHRwWmloNUlUMDllU3N3S1hSb2NtOTNJSGs3V0NneExEQXBmWDFtZFc1amRHbHZiaUI2WmloaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBc2RTeDVMRUVzUWlsN2RtRnlJRU05V2lncE8zUnllWHRrYUNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBc2RTeDVMRUVzUWlsOVkyRjBZMmdvUkNsN1dTaERLVHRwWmloRUlUMDlSQ3N3S1hSb2NtOTNJRVE3V0NneExEQXBmWDFjYm1aMWJtTjBhVzl1SUdGbEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDeDFMSGtzUVNsN2RtRnlJRUk5V2lncE8zUnllWHRsYUNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBc2RTeDVMRUVwZldOaGRHTm9LRU1wZTFrb1FpazdhV1lvUXlFOVBVTXJNQ2wwYUhKdmR5QkRPMWdvTVN3d0tYMTlablZ1WTNScGIyNGdKR1FvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3TEhVc2VTbDdkbUZ5SUVFOVdpZ3BPM1J5ZVh0bWFDaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU3g1S1gxallYUmphQ2hDS1h0WktFRXBPMmxtS0VJaFBUMUNLekFwZEdoeWIzY2dRanRZS0RFc01DbDlmV1oxYm1OMGFXOXVJR0psS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUtYdDJZWElnZVQxYUtDazdkSEo1ZTJkb0tHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDeDFLWDFqWVhSamFDaEJLWHRaS0hrcE8ybG1LRUVoUFQxQkt6QXBkR2h5YjNjZ1FUdFlLREVzTUNsOWZWeHVablZ1WTNScGIyNGdRV1lvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3TEhVc2VTeEJMRUlzUXl4RUxFWXBlM1poY2lCSVBWb29LVHQwY25sN2FHZ29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdMSFVzZVN4QkxFSXNReXhFTEVZcGZXTmhkR05vS0VzcGUxa29TQ2s3YVdZb1N5RTlQVXNyTUNsMGFISnZkeUJMTzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnZVdZb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0xIVXNlU3hCTEVJc1F5bDdkbUZ5SUVROVdpZ3BPM1J5ZVh0cGFDaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU3g1TEVFc1FpeERLWDFqWVhSamFDaEdLWHRaS0VRcE8ybG1LRVloUFQxR0t6QXBkR2h5YjNjZ1JqdFlLREVzTUNsOWZXWjFibU4wYVc5dUlIaG1LR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ3gxTEhrc1FTeENLWHQyWVhJZ1F6MWFLQ2s3ZEhKNWUycG9LR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ3gxTEhrc1FTeENLWDFqWVhSamFDaEVLWHRaS0VNcE8ybG1LRVFoUFQxRUt6QXBkR2h5YjNjZ1JEdFlLREVzTUNsOWZWeHVablZ1WTNScGIyNGdRbVlvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3TEhVc2VTeEJMRUlzUXl4RUxFWXBlM1poY2lCSVBWb29LVHQwY25sN2EyZ29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdMSFVzZVN4QkxFSXNReXhFTEVZcGZXTmhkR05vS0VzcGUxa29TQ2s3YVdZb1N5RTlQVXNyTUNsMGFISnZkeUJMTzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnWjJZb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2lsN2RtRnlJSEE5V2lncE8zUnllWHRzYUNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5S1gxallYUmphQ2gxS1h0WktIQXBPMmxtS0hVaFBUMTFLekFwZEdoeWIzY2dkVHRZS0RFc01DbDlmV1oxYm1OMGFXOXVJR3RtS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwcGUzWmhjaUJ1UFZvb0tUdDBjbmw3Yldnb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTbDlZMkYwWTJnb2NTbDdXU2h1S1R0cFppaHhJVDA5Y1Nzd0tYUm9jbTkzSUhFN1dDZ3hMREFwZlgxY2JtWjFibU4wYVc5dUlIWmxLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXBlM1poY2lCd1BWb29LVHQwY25sN2JtZ29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpbDlZMkYwWTJnb2RTbDdXU2h3S1R0cFppaDFJVDA5ZFNzd0tYUm9jbTkzSUhVN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCeFppaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU2w3ZG1GeUlIazlXaWdwTzNSeWVYdHZhQ2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFzZFNsOVkyRjBZMmdvUVNsN1dTaDVLVHRwWmloQklUMDlRU3N3S1hSb2NtOTNJRUU3V0NneExEQXBmWDFtZFc1amRHbHZiaUIzWmloaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dEtYdDJZWElnYmoxYUtDazdkSEo1ZTNGb0tHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHBmV05oZEdOb0tIRXBlMWtvYmlrN2FXWW9jU0U5UFhFck1DbDBhSEp2ZHlCeE8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z2RtWW9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BlM1poY2lCdFBWb29LVHQwY25sN2NtZ29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BmV05oZEdOb0tHNHBlMWtvYlNrN2FXWW9iaUU5UFc0ck1DbDBhSEp2ZHlCdU8xZ29NU3d3S1gxOVhHNW1kVzVqZEdsdmJpQnpZeWhoTEdJc1l5eGtMR1VzWml4b0tYdDJZWElnYXoxYUtDazdkSEo1ZTNKbGRIVnliaUJoYUNoaExHSXNZeXhrTEdVc1ppeG9LWDFqWVhSamFDaHNLWHRaS0dzcE8ybG1LR3doUFQxc0t6QXBkR2h5YjNjZ2JEdFlLREVzTUNsOWZXWjFibU4wYVc5dUlFNWtLR0VzWWl4akxHUXNaU2w3ZG1GeUlHWTlXaWdwTzNSeWVYdHdhQ2hoTEdJc1l5eGtMR1VwZldOaGRHTm9LR2dwZTFrb1ppazdhV1lvYUNFOVBXZ3JNQ2wwYUhKdmR5Qm9PMWdvTVN3d0tYMTlablZ1WTNScGIyNGdkMlFvWVN4aUxHTXBlM1poY2lCa1BWb29LVHQwY25sN2NtVjBkWEp1SUV4cEtHRXNZaXhqS1gxallYUmphQ2hsS1h0WktHUXBPMmxtS0dVaFBUMWxLekFwZEdoeWIzY2daVHRZS0RFc01DazdjbVYwZFhKdUlEQnVmWDFtZFc1amRHbHZiaUI2WlNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBcGUzWmhjaUIxUFZvb0tUdDBjbmw3YzJnb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0tYMWpZWFJqYUNoNUtYdFpLSFVwTzJsbUtIa2hQVDE1S3pBcGRHaHliM2NnZVR0WUtERXNNQ2w5ZlZ4dVpuVnVZM1JwYjI0Z1IyVW9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpbDdkbUZ5SUhBOVdpZ3BPM1J5ZVh0MWFDaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUtYMWpZWFJqYUNoMUtYdFpLSEFwTzJsbUtIVWhQVDExS3pBcGRHaHliM2NnZFR0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUZoaktHRXNZaXhqTEdRc1pTeG1MR2dwZTNaaGNpQnJQVm9vS1R0MGNubDdjbVYwZFhKdUlIWm9LR0VzWWl4akxHUXNaU3htTEdncGZXTmhkR05vS0d3cGUxa29heWs3YVdZb2JDRTlQV3dyTUNsMGFISnZkeUJzTzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnWVdRb1lTeGlMR01zWkN4bExHWXBlM1poY2lCb1BWb29LVHQwY25sN2NtVjBkWEp1SUhkb0tHRXNZaXhqTEdRc1pTeG1LWDFqWVhSamFDaHJLWHRaS0dncE8ybG1LR3NoUFQxckt6QXBkR2h5YjNjZ2F6dFlLREVzTUNsOWZXWjFibU4wYVc5dUlFUmxLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXBlM1poY2lCd1BWb29LVHQwY25sN2VHZ29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpbDlZMkYwWTJnb2RTbDdXU2h3S1R0cFppaDFJVDA5ZFNzd0tYUm9jbTkzSUhVN1dDZ3hMREFwZlgxY2JtWjFibU4wYVc5dUlHeG1LR0VzWWl4akxHUXNaU3htS1h0MllYSWdhRDFhS0NrN2RISjVlM1JvS0dFc1lpeGpMR1FzWlN4bUtYMWpZWFJqYUNocktYdFpLR2dwTzJsbUtHc2hQVDFyS3pBcGRHaHliM2NnYXp0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUZGbEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaWw3ZG1GeUlIRTlXaWdwTzNSeWVYdDVhQ2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0cGZXTmhkR05vS0hJcGUxa29jU2s3YVdZb2NpRTlQWElyTUNsMGFISnZkeUJ5TzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnUzJVb1lTeGlMR01zWkN4bExHWXNhQ3hyS1h0MllYSWdiRDFhS0NrN2RISjVlMEZvS0dFc1lpeGpMR1FzWlN4bUxHZ3NheWw5WTJGMFkyZ29iU2w3V1Noc0tUdHBaaWh0SVQwOWJTc3dLWFJvY205M0lHMDdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQmhaaWhoTEdJc1l5eGtMR1VzWml4b0xHc3BlM1poY2lCc1BWb29LVHQwY25sN1FtZ29ZU3hpTEdNc1pDeGxMR1lzYUN4cktYMWpZWFJqYUNodEtYdFpLR3dwTzJsbUtHMGhQVDF0S3pBcGRHaHliM2NnYlR0WUtERXNNQ2w5ZlZ4dVpuVnVZM1JwYjI0Z2RHUW9ZU3hpTEdNc1pDbDdkbUZ5SUdVOVdpZ3BPM1J5ZVh0eVpYUjFjbTRnUTJnb1lTeGlMR01zWkNsOVkyRjBZMmdvWmlsN1dTaGxLVHRwWmlobUlUMDlaaXN3S1hSb2NtOTNJR1k3V0NneExEQXBmWDFtZFc1amRHbHZiaUJJWlNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dEtYdDJZWElnYmoxYUtDazdkSEo1ZTBSb0tHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHBmV05oZEdOb0tIRXBlMWtvYmlrN2FXWW9jU0U5UFhFck1DbDBhSEp2ZHlCeE8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z2NHWW9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BlM1poY2lCdFBWb29LVHQwY25sN1JXZ29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BmV05oZEdOb0tHNHBlMWtvYlNrN2FXWW9iaUU5UFc0ck1DbDBhSEp2ZHlCdU8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1JtVW9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BlM1poY2lCdFBWb29LVHQwY25sN1JtZ29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BmV05oZEdOb0tHNHBlMWtvYlNrN2FXWW9iaUU5UFc0ck1DbDBhSEp2ZHlCdU8xZ29NU3d3S1gxOVhHNW1kVzVqZEdsdmJpQkJaU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0S1h0MllYSWdiajFhS0NrN2RISjVlMGRvS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwcGZXTmhkR05vS0hFcGUxa29iaWs3YVdZb2NTRTlQWEVyTUNsMGFISnZkeUJ4TzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnWm1Zb1lTeGlMR01zWkN4bExHWXBlM1poY2lCb1BWb29LVHQwY25sN1NHZ29ZU3hpTEdNc1pDeGxMR1lwZldOaGRHTm9LR3NwZTFrb2FDazdhV1lvYXlFOVBXc3JNQ2wwYUhKdmR5QnJPMWdvTVN3d0tYMTlablZ1WTNScGIyNGdhR1VvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXBlM1poY2lCeVBWb29LVHQwY25sN1NXZ29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFcGZXTmhkR05vS0hBcGUxa29jaWs3YVdZb2NDRTlQWEFyTUNsMGFISnZkeUJ3TzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnYUdRb1lTeGlMR01zWkN4bExHWXNhQ3hyS1h0MllYSWdiRDFhS0NrN2RISjVlM0psZEhWeWJpQkthQ2hoTEdJc1l5eGtMR1VzWml4b0xHc3BmV05oZEdOb0tHMHBlMWtvYkNrN2FXWW9iU0U5UFcwck1DbDBhSEp2ZHlCdE8xZ29NU3d3S1gxOVhHNW1kVzVqZEdsdmJpQnVaU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFzZFNsN2RtRnlJSGs5V2lncE8zUnllWHROYVNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5TEhBc2RTbDlZMkYwWTJnb1FTbDdXU2g1S1R0cFppaEJJVDA5UVNzd0tYUm9jbTkzSUVFN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCQ1pTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXBlM1poY2lCMVBWb29LVHQwY25sN1MyZ29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFc2NpeHdLWDFqWVhSamFDaDVLWHRaS0hVcE8ybG1LSGtoUFQxNUt6QXBkR2h5YjNjZ2VUdFlLREVzTUNsOWZXWjFibU4wYVc5dUlIZGxLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ3gxS1h0MllYSWdlVDFhS0NrN2RISjVlMHhvS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUtYMWpZWFJqYUNoQktYdFpLSGtwTzJsbUtFRWhQVDFCS3pBcGRHaHliM2NnUVR0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUVoa0tHRXNZaXhqS1h0MllYSWdaRDFhS0NrN2RISjVlMDFvS0dFc1lpeGpLWDFqWVhSamFDaGxLWHRaS0dRcE8ybG1LR1VoUFQxbEt6QXBkR2h5YjNjZ1pUdFlLREVzTUNsOWZWeHVablZ1WTNScGIyNGdkbU1vWVN4aUxHTXNaQ2w3ZG1GeUlHVTlXaWdwTzNSeWVYdHlaWFIxY200Z1QyZ29ZU3hpTEdNc1pDbDlZMkYwWTJnb1ppbDdXU2hsS1R0cFppaG1JVDA5Wmlzd0tYUm9jbTkzSUdZN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCd1l5aGhMR0lzWXl4a0tYdDJZWElnWlQxYUtDazdkSEo1ZTNKbGRIVnliaUJRYUNoaExHSXNZeXhrS1gxallYUmphQ2htS1h0WktHVXBPMmxtS0dZaFBUMW1LekFwZEdoeWIzY2daanRZS0RFc01DbDlmV1oxYm1OMGFXOXVJR05sS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwcGUzWmhjaUJ1UFZvb0tUdDBjbmw3VVdnb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTbDlZMkYwWTJnb2NTbDdXU2h1S1R0cFppaHhJVDA5Y1Nzd0tYUm9jbTkzSUhFN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCRlpTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU3g1TEVFc1FpeERMRVFzUml4SUxFc3NWbUVzVjJFc1dHRXBlM1poY2lCUmFUMWFLQ2s3ZEhKNWUxSm9LR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXNjQ3gxTEhrc1FTeENMRU1zUkN4R0xFZ3NTeXhXWVN4WFlTeFlZU2w5WTJGMFkyZ29XV0VwZTFrb1VXa3BPMmxtS0ZsaElUMDlXV0VyTUNsMGFISnZkeUJaWVR0WUtERXNNQ2w5ZlZ4dVpuVnVZM1JwYjI0Z0pHVW9ZU3hpTEdNc1pDeGxMR1lwZTNaaGNpQm9QVm9vS1R0MGNubDdVMmdvWVN4aUxHTXNaQ3hsTEdZcGZXTmhkR05vS0dzcGUxa29hQ2s3YVdZb2F5RTlQV3NyTUNsMGFISnZkeUJyTzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnVW1Nb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2lsN2RtRnlJSEE5V2lncE8zUnllWHR5WlhSMWNtNGdWR2dvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaWw5WTJGMFkyZ29kU2w3V1Nod0tUdHBaaWgxSVQwOWRTc3dLWFJvY205M0lIVTdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQlBaQ2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlLWHQyWVhJZ2NEMWFLQ2s3ZEhKNWUxVm9LR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eExISXBmV05oZEdOb0tIVXBlMWtvY0NrN2FXWW9kU0U5UFhVck1DbDBhSEp2ZHlCMU8xZ29NU3d3S1gxOVhHNW1kVzVqZEdsdmJpQnpaU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFzZFN4NUxFRXNRaXhETEVRc1JpbDdkbUZ5SUVnOVdpZ3BPM1J5ZVh0V2FDaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU3g1TEVFc1FpeERMRVFzUmlsOVkyRjBZMmdvU3lsN1dTaElLVHRwWmloTElUMDlTeXN3S1hSb2NtOTNJRXM3V0NneExEQXBmWDFtZFc1amRHbHZiaUJaWkNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5S1h0MllYSWdjRDFhS0NrN2RISjVlMWRvS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElwZldOaGRHTm9LSFVwZTFrb2NDazdhV1lvZFNFOVBYVXJNQ2wwYUhKdmR5QjFPMWdvTVN3d0tYMTlablZ1WTNScGIyNGdhR1lvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3S1h0MllYSWdkVDFhS0NrN2RISjVlMWhvS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0NsOVkyRjBZMmdvZVNsN1dTaDFLVHRwWmloNUlUMDllU3N3S1hSb2NtOTNJSGs3V0NneExEQXBmWDFjYm1aMWJtTjBhVzl1SUhKbEtHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4TEhJc2NDeDFMSGtzUVN4Q0xFTXNSQ2w3ZG1GeUlFWTlXaWdwTzNSeWVYdGFhQ2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFzZFN4NUxFRXNRaXhETEVRcGZXTmhkR05vS0VncGUxa29SaWs3YVdZb1NDRTlQVWdyTUNsMGFISnZkeUJJTzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnY0dVb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2l4d0xIVXNlU3hCS1h0MllYSWdRajFhS0NrN2RISjVlMkZwS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUxIa3NRU2w5WTJGMFkyZ29ReWw3V1NoQ0tUdHBaaWhESVQwOVF5c3dLWFJvY205M0lFTTdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQnhaU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFzZFN4NUxFRXNRaXhES1h0MllYSWdSRDFhS0NrN2RISjVlMWxvS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUxIa3NRU3hDTEVNcGZXTmhkR05vS0VZcGUxa29SQ2s3YVdZb1JpRTlQVVlyTUNsMGFISnZkeUJHTzFnb01Td3dLWDE5WEc1bWRXNWpkR2x2YmlCTVpTaGhMR0lzWXl4a0xHVXNaaXhvTEdzcGUzWmhjaUJzUFZvb0tUdDBjbmw3WW1rb1lTeGlMR01zWkN4bExHWXNhQ3hyS1gxallYUmphQ2h0S1h0WktHd3BPMmxtS0cwaFBUMXRLekFwZEdoeWIzY2diVHRZS0RFc01DbDlmV1oxYm1OMGFXOXVJSGhsS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpbDdkbUZ5SUhFOVdpZ3BPM1J5ZVh0a2FTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRwZldOaGRHTm9LSElwZTFrb2NTazdhV1lvY2lFOVBYSXJNQ2wwYUhKdmR5QnlPMWdvTVN3d0tYMTlablZ1WTNScGIyNGdUV01vWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUtYdDJZWElnY1QxYUtDazdkSEo1ZTNKbGRIVnliaUJsYVNoaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHBmV05oZEdOb0tISXBlMWtvY1NrN2FXWW9jaUU5UFhJck1DbDBhSEp2ZHlCeU8xZ29NU3d3S1gxOVhHNW1kVzVqZEdsdmJpQlJZeWhoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlMSEFzZFN4NUxFRXNRaXhETEVRcGUzWmhjaUJHUFZvb0tUdDBjbmw3Y21WMGRYSnVJR1pwS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElzY0N4MUxIa3NRU3hDTEVNc1JDbDlZMkYwWTJnb1NDbDdXU2hHS1R0cFppaElJVDA5U0Nzd0tYUm9jbTkzSUVnN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCVFpDaGhMR0lzWXl4a0xHVXBlM1poY2lCbVBWb29LVHQwY25sN1oya29ZU3hpTEdNc1pDeGxLWDFqWVhSamFDaG9LWHRaS0dZcE8ybG1LR2doUFQxb0t6QXBkR2h5YjNjZ2FEdFlLREVzTUNsOWZXWjFibU4wYVc5dUlHZGxLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYml4eEtYdDJZWElnY2oxYUtDazdkSEo1ZTBGbktHRXNZaXhqTEdRc1pTeG1MR2dzYXl4c0xHMHNiaXh4S1gxallYUmphQ2h3S1h0WktISXBPMmxtS0hBaFBUMXdLekFwZEdoeWIzY2djRHRZS0RFc01DbDlmV1oxYm1OMGFXOXVJRkJsS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwcGUzWmhjaUJ1UFZvb0tUdDBjbmw3YUdrb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTbDlZMkYwWTJnb2NTbDdXU2h1S1R0cFppaHhJVDA5Y1Nzd0tYUm9jbTkzSUhFN1dDZ3hMREFwZlgxY2JtWjFibU4wYVc5dUlFMWxLR0VzWWl4akxHUXNaU2w3ZG1GeUlHWTlXaWdwTzNSeWVYdHBhU2hoTEdJc1l5eGtMR1VwZldOaGRHTm9LR2dwZTFrb1ppazdhV1lvYUNFOVBXZ3JNQ2wwYUhKdmR5Qm9PMWdvTVN3d0tYMTlablZ1WTNScGIyNGdXV1VvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaWw3ZG1GeUlIQTlXaWdwTzNSeWVYdEthU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTeHlLWDFqWVhSamFDaDFLWHRaS0hBcE8ybG1LSFVoUFQxMUt6QXBkR2h5YjNjZ2RUdFlLREVzTUNsOWZXWjFibU4wYVc5dUlIQmtLR0VzWWl4akxHUXNaU2w3ZG1GeUlHWTlXaWdwTzNSeWVYdHlaWFIxY200Z2Fta29ZU3hpTEdNc1pDeGxLWDFqWVhSamFDaG9LWHRaS0dZcE8ybG1LR2doUFQxb0t6QXBkR2h5YjNjZ2FEdFlLREVzTUNsOWZXWjFibU4wYVc5dUlFRmtLR0VzWWl4akxHUXBlM1poY2lCbFBWb29LVHQwY25sN2NtVjBkWEp1SUU1cEtHRXNZaXhqTEdRcGZXTmhkR05vS0dZcGUxa29aU2s3YVdZb1ppRTlQV1lyTUNsMGFISnZkeUJtTzFnb01Td3dLVHR5WlhSMWNtNGdNRzU5ZlZ4dVpuVnVZM1JwYjI0Z1NtVW9ZU3hpTEdNc1pDeGxMR1lzYUNsN2RtRnlJR3M5V2lncE8zUnllWHRyYVNoaExHSXNZeXhrTEdVc1ppeG9LWDFqWVhSamFDaHNLWHRaS0dzcE8ybG1LR3doUFQxc0t6QXBkR2h5YjNjZ2JEdFlLREVzTUNsOWZXWjFibU4wYVc5dUlIRmtLR0VzWWl4akxHUXNaU3htS1h0MllYSWdhRDFhS0NrN2RISjVlM0psZEhWeWJpQnNhU2hoTEdJc1l5eGtMR1VzWmlsOVkyRjBZMmdvYXlsN1dTaG9LVHRwWmlocklUMDlheXN3S1hSb2NtOTNJR3M3V0NneExEQXBmWDFtZFc1amRHbHZiaUIxWkNoaExHSXNZeXhrTEdVc1ppbDdkbUZ5SUdnOVdpZ3BPM1J5ZVh0eVpYUjFjbTRnYldrb1lTeGlMR01zWkN4bExHWXBmV05oZEdOb0tHc3BlMWtvYUNrN2FXWW9heUU5UFdzck1DbDBhSEp2ZHlCck8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1UyVW9ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BlM1poY2lCdFBWb29LVHQwY25sN2Jta29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3BmV05oZEdOb0tHNHBlMWtvYlNrN2FXWW9iaUU5UFc0ck1DbDBhSEp2ZHlCdU8xZ29NU3d3S1gxOVhHNW1kVzVqZEdsdmJpQk1aQ2hoTEdJc1l5eGtLWHQyWVhJZ1pUMWFLQ2s3ZEhKNWUwNW9LR0VzWWl4akxHUXBmV05oZEdOb0tHWXBlMWtvWlNrN2FXWW9aaUU5UFdZck1DbDBhSEp2ZHlCbU8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1dtTW9ZU3hpTEdNc1pDeGxMR1lzYUN4cktYdDJZWElnYkQxYUtDazdkSEo1ZTNKbGRIVnliaUJ2YVNoaExHSXNZeXhrTEdVc1ppeG9MR3NwZldOaGRHTm9LRzBwZTFrb2JDazdhV1lvYlNFOVBXMHJNQ2wwYUhKdmR5QnRPMWdvTVN3d0tYMTlablZ1WTNScGIyNGdSV01vWVN4aUxHTXNaQ3hsTEdZcGUzWmhjaUJvUFZvb0tUdDBjbmw3Y21WMGRYSnVJSEJwS0dFc1lpeGpMR1FzWlN4bUtYMWpZWFJqYUNocktYdFpLR2dwTzJsbUtHc2hQVDFyS3pBcGRHaHliM2NnYXp0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUdaa0tHRXNZaXhqTEdRc1pTeG1LWHQyWVhJZ2FEMWFLQ2s3ZEhKNWUzSmxkSFZ5YmlCeGFTaGhMR0lzWXl4a0xHVXNaaWw5WTJGMFkyZ29heWw3V1Nob0tUdHBaaWhySVQwOWF5c3dLWFJvY205M0lHczdXQ2d4TERBcGZYMWNibVoxYm1OMGFXOXVJRk5qS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhLWHQyWVhJZ2NqMWFLQ2s3ZEhKNWUzSmxkSFZ5YmlCeWFTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1NsOVkyRjBZMmdvY0NsN1dTaHlLVHRwWmlod0lUMDljQ3N3S1hSb2NtOTNJSEE3V0NneExEQXBmWDFtZFc1amRHbHZiaUJpWkNoaExHSXNZeXhrTEdVc1ppeG9MR3NwZTNaaGNpQnNQVm9vS1R0MGNubDdjbVYwZFhKdUlITnBLR0VzWWl4akxHUXNaU3htTEdnc2F5bDlZMkYwWTJnb2JTbDdXU2hzS1R0cFppaHRJVDA5YlNzd0tYUm9jbTkzSUcwN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCV1l5aGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRwZTNaaGNpQnhQVm9vS1R0MGNubDdjbVYwZFhKdUlIUnBLR0VzWWl4akxHUXNaU3htTEdnc2F5eHNMRzBzYmlsOVkyRjBZMmdvY2lsN1dTaHhLVHRwWmloeUlUMDljaXN3S1hSb2NtOTNJSEk3V0NneExEQXBmWDFtZFc1amRHbHZiaUJuWkNoaExHSXNZeXhrTEdVc1ppeG9LWHQyWVhJZ2F6MWFLQ2s3ZEhKNWUzSmxkSFZ5YmlCMWFTaGhMR0lzWXl4a0xHVXNaaXhvS1gxallYUmphQ2hzS1h0WktHc3BPMmxtS0d3aFBUMXNLekFwZEdoeWIzY2diRHRZS0RFc01DbDlmVnh1Wm5WdVkzUnBiMjRnVldNb1lTeGlMR01zWkN4bExHWXNhQ3hyTEd3c2JTeHVMSEVzY2lsN2RtRnlJSEE5V2lncE8zUnllWHR5WlhSMWNtNGdkbWtvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaWw5WTJGMFkyZ29kU2w3V1Nod0tUdHBaaWgxSVQwOWRTc3dLWFJvY205M0lIVTdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQnZaQ2hoTEdJc1l5eGtMR1VzWml4b0tYdDJZWElnYXoxYUtDazdkSEo1ZTNKbGRIVnliaUIzYVNoaExHSXNZeXhrTEdVc1ppeG9LWDFqWVhSamFDaHNLWHRaS0dzcE8ybG1LR3doUFQxc0t6QXBkR2h5YjNjZ2JEdFlLREVzTUNsOWZXWjFibU4wYVc5dUlISmtLR0VzWWl4akxHUXNaU3htTEdncGUzWmhjaUJyUFZvb0tUdDBjbmw3Y21WMGRYSnVJSGhwS0dFc1lpeGpMR1FzWlN4bUxHZ3BmV05oZEdOb0tHd3BlMWtvYXlrN2FXWW9iQ0U5UFd3ck1DbDBhSEp2ZHlCc08xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1FtUW9ZU3hpTEdNcGUzWmhjaUJrUFZvb0tUdDBjbmw3Y21WMGRYSnVJSGxwS0dFc1lpeGpLWDFqWVhSamFDaGxLWHRaS0dRcE8ybG1LR1VoUFQxbEt6QXBkR2h5YjNjZ1pUdFlLREVzTUNrN2NtVjBkWEp1SURCdWZYMWNibVoxYm1OMGFXOXVJRzVrS0dFc1lpeGpMR1FwZTNaaGNpQmxQVm9vS1R0MGNubDdjbVYwZFhKdUlIcHBLR0VzWWl4akxHUXBmV05oZEdOb0tHWXBlMWtvWlNrN2FXWW9aaUU5UFdZck1DbDBhSEp2ZHlCbU8xZ29NU3d3S1gxOVpuVnVZM1JwYjI0Z1IyUW9ZU3hpTEdNc1pDbDdkbUZ5SUdVOVdpZ3BPM1J5ZVh0Q2FTaGhMR0lzWXl4a0tYMWpZWFJqYUNobUtYdFpLR1VwTzJsbUtHWWhQVDFtS3pBcGRHaHliM2NnWmp0WUtERXNNQ2w5ZldaMWJtTjBhVzl1SUVOaktHRXNZaXhqTEdRcGUzWmhjaUJsUFZvb0tUdDBjbmw3Y21WMGRYSnVJRUZwS0dFc1lpeGpMR1FwZldOaGRHTm9LR1lwZTFrb1pTazdhV1lvWmlFOVBXWXJNQ2wwYUhKdmR5Qm1PMWdvTVN3d0tYMTlablZ1WTNScGIyNGdkR1lvWVN4aUxHTXNaQ3hsS1h0MllYSWdaajFhS0NrN2RISjVlME5wS0dFc1lpeGpMR1FzWlNsOVkyRjBZMmdvYUNsN1dTaG1LVHRwWmlob0lUMDlhQ3N3S1hSb2NtOTNJR2c3V0NneExEQXBmWDFtZFc1amRHbHZiaUJ4WXloaExHSXNZeXhrTEdVcGUzWmhjaUJtUFZvb0tUdDBjbmw3Y21WMGRYSnVJRVJwS0dFc1lpeGpMR1FzWlNsOVkyRjBZMmdvYUNsN1dTaG1LVHRwWmlob0lUMDlhQ3N3S1hSb2NtOTNJR2c3V0NneExEQXBmWDFjYm1aMWJtTjBhVzl1SUhKaktHRXNZaXhqTEdRc1pTeG1LWHQyWVhJZ2FEMWFLQ2s3ZEhKNWUzSmxkSFZ5YmlCRmFTaGhMR0lzWXl4a0xHVXNaaWw5WTJGMFkyZ29heWw3V1Nob0tUdHBaaWhySVQwOWF5c3dLWFJvY205M0lHczdXQ2d4TERBcGZYMW1kVzVqZEdsdmJpQlVaU2hoTEdJc1l5eGtMR1VzWml4b0xHc3NiQ3h0TEc0c2NTbDdkbUZ5SUhJOVdpZ3BPM1J5ZVh0R2FTaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1NsOVkyRjBZMmdvY0NsN1dTaHlLVHRwWmlod0lUMDljQ3N3S1hSb2NtOTNJSEE3V0NneExEQXBmWDFtZFc1amRHbHZiaUJpWmloaExHSXNZeXhrTEdVc1ppeG9MR3NzYkN4dExHNHNjU3h5S1h0MllYSWdjRDFhS0NrN2RISjVlMGRwS0dFc1lpeGpMR1FzWlN4bUxHZ3NheXhzTEcwc2JpeHhMSElwZldOaGRHTm9LSFVwZTFrb2NDazdhV1lvZFNFOVBYVXJNQ2wwYUhKdmR5QjFPMWdvTVN3d0tYMTlablZ1WTNScGIyNGdkR1VvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXBlM1poY2lCeVBWb29LVHQwY25sN1JXY29ZU3hpTEdNc1pDeGxMR1lzYUN4ckxHd3NiU3h1TEhFcGZXTmhkR05vS0hBcGUxa29jaWs3YVdZb2NDRTlQWEFyTUNsMGFISnZkeUJ3TzFnb01Td3dLWDE5WEc1bWRXNWpkR2x2YmlBa1l5aGhMR0lzWXl4a0xHVXBlM1poY2lCbVBWb29LVHQwY25sN2NtVjBkWEp1SUVocEtHRXNZaXhqTEdRc1pTbDlZMkYwWTJnb2FDbDdXU2htS1R0cFppaG9JVDA5YUNzd0tYUm9jbTkzSUdnN1dDZ3hMREFwZlgxbWRXNWpkR2x2YmlCMlpDaGhLWHQyWVhJZ1lqMWFLQ2s3ZEhKNWUzSmxkSFZ5YmlCbFp5aGhLWDFqWVhSamFDaGpLWHRaS0dJcE8ybG1LR01oUFQxakt6QXBkR2h5YjNjZ1l6dFlLREVzTUNrN2NtVjBkWEp1SURCdWZYMW1kVzVqZEdsdmJpQlhZeWhoTEdJc1l5eGtMR1VzWmlsN2RtRnlJR2c5V2lncE8zUnllWHR5WlhSMWNtNGdaR2NvWVN4aUxHTXNaQ3hsTEdZcGZXTmhkR05vS0dzcGUxa29hQ2s3YVdZb2F5RTlQV3NyTUNsMGFISnZkeUJyTzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnUjJNb1lTeGlMR01zWkN4bExHWXBlM1poY2lCb1BWb29LVHQwY25sN2NtVjBkWEp1SUdOcEtHRXNZaXhqTEdRc1pTeG1LWDFqWVhSamFDaHJLWHRaS0dncE8ybG1LR3NoUFQxckt6QXBkR2h5YjNjZ2F6dFlLREVzTUNsOWZWeHVablZ1WTNScGIyNGdiMlVvWVN4aUxHTXNaQ3hsTEdZc2FDeHJMR3dzYlN4dUxIRXNjaXh3TEhVc2VTbDdkbUZ5SUVFOVdpZ3BPM1J5ZVhza2FDaGhMR0lzWXl4a0xHVXNaaXhvTEdzc2JDeHRMRzRzY1N4eUxIQXNkU3g1S1gxallYUmphQ2hDS1h0WktFRXBPMmxtS0VJaFBUMUNLekFwZEdoeWIzY2dRanRZS0RFc01DbDlmV1oxYm1OMGFXOXVJSFZqS0dFc1lpeGpLWHQyWVhJZ1pEMWFLQ2s3ZEhKNWUzSmxkSFZ5YmlCeFp5aGhMR0lzWXlsOVkyRjBZMmdvWlNsN1dTaGtLVHRwWmlobElUMDlaU3N3S1hSb2NtOTNJR1U3V0NneExEQXBmWDFtZFc1amRHbHZiaUJ2WXloaExHSXNZeWw3ZG1GeUlHUTlXaWdwTzNSeWVYdHlaWFIxY200Z2MyY29ZU3hpTEdNcGZXTmhkR05vS0dVcGUxa29aQ2s3YVdZb1pTRTlQV1VyTUNsMGFISnZkeUJsTzFnb01Td3dLWDE5Wm5WdVkzUnBiMjRnUkdZb0tYdDJZWElnWVQxVk8yRTlUMkpxWldOMExtRnpjMmxuYmloN2ZTeGhLVHQyWVhJZ1lqMWpQVDVrUFQ1aktHUXBQajQrTUR0aExrWmtQV0lvWVM1R1pDazdZUzVvWlQxaUtHRXVhR1VwTzJFdWJtVTlZaWhoTG01bEtUdGhMbTlsUFNoalBUNG9LVDArWXlncFBqNCtNQ2tvWVM1dlpTazdjbVYwZFhKdUlHRjlaeTV6ZEdGamExTmhkbVU5S0NrOVBsb29LVHRuTG5OMFlXTnJVbVZ6ZEc5eVpUMWhQVDVaS0dFcE8xeHVaeTV6ZEdGamEwRnNiRzlqUFdFOVBrVm1LR0VwTzJjdVZWUkdPRlJ2VTNSeWFXNW5QVW83Wnk1emRISnBibWRVYjFWVVJqZzlLR0VzWWl4aktUMCtUU2hoTEVVc1lpeGpLVHRuTG14bGJtZDBhRUo1ZEdWelZWUkdPRDFpWWp0MllYSWdUMms3Um1FOVpuVnVZM1JwYjI0Z1VHa29LWHRQYVh4OFVta29LVHRQYVh4OEtFWmhQVkJwS1gwN1puVnVZM1JwYjI0Z1Vta29LWHRwWmlnaEtEQThSR0VwS1h0cFppaG5MbkJ5WlZKMWJpbG1iM0lvWENKbWRXNWpkR2x2Ymx3aVBUMTBlWEJsYjJZZ1p5NXdjbVZTZFc0bUppaG5MbkJ5WlZKMWJqMWJaeTV3Y21WU2RXNWRLVHRuTG5CeVpWSjFiaTVzWlc1bmRHZzdLWHQyWVhJZ1lUMW5MbkJ5WlZKMWJpNXphR2xtZENncE8wRmhMblZ1YzJocFpuUW9ZU2w5Wm05eUtEc3dQRUZoTG14bGJtZDBhRHNwUVdFdWMyaHBablFvS1NobktUdHBaaWdoS0RBOFJHRjhmRTlwZkh3b1QyazlJVEFzWnk1allXeHNaV1JTZFc0OUlUQXNlQ2twS1h0bWIzSW9PekE4UW1FdWJHVnVaM1JvT3lsQ1lTNXphR2xtZENncEtHY3BPMlp2Y2loaFlTaG5LVHN3UEVOaExteGxibWQwYURzcFEyRXVjMmhwWm5Rb0tTaG5LWDE5ZlZKcEtDazdYRzVjYmx4dUlDQnlaWFIxY200Z2NtVmhaSGxRY205dGFYTmxYRzU5WEc0cE8xeHVmU2tvS1R0Y2JtbG1JQ2gwZVhCbGIyWWdaWGh3YjNKMGN5QTlQVDBnSjI5aWFtVmpkQ2NnSmlZZ2RIbHdaVzltSUcxdlpIVnNaU0E5UFQwZ0oyOWlhbVZqZENjcFhHNGdJRzF2WkhWc1pTNWxlSEJ2Y25SeklEMGdiM0owVjJGemJUdGNibVZzYzJVZ2FXWWdLSFI1Y0dWdlppQmtaV1pwYm1VZ1BUMDlJQ2RtZFc1amRHbHZiaWNnSmlZZ1pHVm1hVzVsV3lkaGJXUW5YU2xjYmlBZ1pHVm1hVzVsS0Z0ZExDQW9LU0E5UGlCdmNuUlhZWE50S1R0Y2JpSXNJQ0lpTENBaUlpd2dJbVY0Y0c5eWRDQmpiMjV6ZENCamNIVnpJRDBnZFc1a1pXWnBibVZrT3lJc0lDSmNiblpoY2lCdmNuUlhZWE50VkdoeVpXRmtaV1FnUFNBb0tDa2dQVDRnZTF4dUlDQjJZWElnWDNOamNtbHdkRVJwY2lBOUlIUjVjR1Z2WmlCa2IyTjFiV1Z1ZENBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NnSmlZZ1pHOWpkVzFsYm5RdVkzVnljbVZ1ZEZOamNtbHdkQ0EvSUdSdlkzVnRaVzUwTG1OMWNuSmxiblJUWTNKcGNIUXVjM0pqSURvZ2RXNWtaV1pwYm1Wa08xeHVJQ0JwWmlBb2RIbHdaVzltSUY5ZlptbHNaVzVoYldVZ0lUMDlJQ2QxYm1SbFptbHVaV1FuS1NCZmMyTnlhWEIwUkdseUlEMGdYM05qY21sd2RFUnBjaUI4ZkNCZlgyWnBiR1Z1WVcxbE8xeHVJQ0J5WlhSMWNtNGdLRnh1Wm5WdVkzUnBiMjRvYlc5a2RXeGxRWEpuSUQwZ2UzMHBJSHRjYmx4dVpuVnVZM1JwYjI0Z1pDZ3BlMnd1WW5WbVptVnlJVDF3TG1KMVptWmxjaVltZENncE8zSmxkSFZ5YmlCd2ZXWjFibU4wYVc5dUlIWW9LWHRzTG1KMVptWmxjaUU5Y0M1aWRXWm1aWEltSm5Rb0tUdHlaWFIxY200Z1lXRjlablZ1WTNScGIyNGdlaWdwZTJ3dVluVm1abVZ5SVQxd0xtSjFabVpsY2lZbWRDZ3BPM0psZEhWeWJpQmlZWDFtZFc1amRHbHZiaUJCS0NsN2JDNWlkV1ptWlhJaFBYQXVZblZtWm1WeUppWjBLQ2s3Y21WMGRYSnVJR05oZldaMWJtTjBhVzl1SUdSaEtDbDdiQzVpZFdabVpYSWhQWEF1WW5WbVptVnlKaVowS0NrN2NtVjBkWEp1SUdWaGZYWmhjaUJDUFcxdlpIVnNaVUZ5Wnl4bVlTeERPMEl1Y21WaFpIazlibVYzSUZCeWIyMXBjMlVvS0dFc1lpazlQbnRtWVQxaE8wTTlZbjBwTzF3aWRYTmxJSE4wY21samRGd2lPMXh1UWk1cWMyVndTVzVwZEQwb1lTeGlMR01zWlN4bUxHZ3NheXh4S1QwK2UwSXVVV0k5WVR0Q0xuZGlQV0k3UWk1NVlqMWpPMEl1YW1JOVpUdENMbmhpUFdZN1FpNUZZVDFvTzBJdWVtSTlhenRDTGtGaVBYRTdZajBvYml4dExISXBQVDRvTGk0dWR5azlQbnRqYjI1emRDQjRQVVFzWnoxdFB5NG9LVHQzUFc0b0xpNHVkeWs3WTI5dWMzUWdkVDF0UHk0b0tUdG5JVDA5ZFNZbUtHNDlkU3h5S0djcExHMDljajF1ZFd4c0tUdHlaWFIxY200Z1JDRTllRDlvWVNncE9uZDlPMk05YmowK1lYTjVibU1vTGk0dWJTazlQbnQwY25sN2FXWW9RaTVpWWlsMGFISnZkeUJGY25KdmNpaGNJbE5sYzNOcGIyNGdZV3h5WldGa2VTQnpkR0Z5ZEdWa1hDSXBPMk52Ym5OMElISTlRaTVpWWoxN1JtSTZiVnN3WFN4bGNuSnZjbk02VzExOUxIYzlZWGRoYVhRZ2JpZ3VMaTV0S1R0cFppaENMbUppSVQwOWNpbDBhSEp2ZHlCRmNuSnZjaWhjSWxObGMzTnBiMjRnYldsemJXRjBZMmhjSWlrN1lTNW1iSFZ6YUNncE8yTnZibk4wSUhnOWNpNWxjbkp2Y25NN2FXWW9NRHg0TG14bGJtZDBhQ2w3YkdWMElHYzlZWGRoYVhRZ1VISnZiV2x6WlM1aGJHd29lQ2s3WnoxbkxtWnBiSFJsY2loMVBUNTFLVHRwWmlnd1BHY3ViR1Z1WjNSb0tYUm9jbTkzSUVWeWNtOXlLR2N1YW05cGJpaGNJbHhjYmx3aUtTazdmWEpsZEhWeWJpQjNmV1pwYm1Gc2JIbDdRaTVpWWoxY2JtNTFiR3g5ZlR0Q0xsOVBjblJTZFc0OVl5aGlLRUl1WDA5eWRGSjFiaXdvS1QwK1FpNWZUM0owVW5WdUxHNDlQa0l1WDA5eWRGSjFiajF1S1NrN1FpNWZUM0owVW5WdVYybDBhRUpwYm1ScGJtYzlZeWhpS0VJdVgwOXlkRkoxYmxkcGRHaENhVzVrYVc1bkxDZ3BQVDVDTGw5UGNuUlNkVzVYYVhSb1FtbHVaR2x1Wnl4dVBUNUNMbDlQY25SU2RXNVhhWFJvUW1sdVpHbHVaejF1S1NrN1FpNWZUM0owUW1sdVpFbHVjSFYwUFdJb1FpNWZUM0owUW1sdVpFbHVjSFYwTENncFBUNUNMbDlQY25SQ2FXNWtTVzV3ZFhRc2JqMCtRaTVmVDNKMFFtbHVaRWx1Y0hWMFBXNHBPMEl1YW5ObGNGSmxaMmx6ZEdWeVFuVm1abVZ5UFNodUxHMHNjaXgzS1QwK1lTNXlaV2RwYzNSbGNrSjFabVpsY2lodUxHMHNjaXgzS1R0Q0xtcHpaWEJWYm5KbFoybHpkR1Z5UW5WbVptVnljejF1UFQ1N1lTNTFibkpsWjJsemRHVnlRblZtWm1WeWN5aHVLWDA3UWk1cWMyVndSMlYwUW5WbVptVnlQVzQ5UG1FdVoyVjBRblZtWm1WeUtHNHBPMEl1YW5ObGNFTnlaV0YwWlVSdmQyNXNiMkZrWlhJOUtHNHNiU3h5S1QwK1lTNWpjbVZoZEdWRWIzZHViRzloWkdWeUtHNHNiU3h5S1gwN1hHNTJZWElnYVdFOVQySnFaV04wTG1GemMybG5iaWg3ZlN4Q0tTeHFZVDFjSWk0dmRHaHBjeTV3Y205bmNtRnRYQ0lzUlQwb1lTeGlLVDArZTNSb2NtOTNJR0k3ZlN4cllUMWNJbTlpYW1WamRGd2lQVDEwZVhCbGIyWWdkMmx1Wkc5M0xFWTlYQ0ptZFc1amRHbHZibHdpUFQxMGVYQmxiMllnYVcxd2IzSjBVMk55YVhCMGN5eEhQVndpYjJKcVpXTjBYQ0k5UFhSNWNHVnZaaUJ3Y205alpYTnpKaVpjSW05aWFtVmpkRndpUFQxMGVYQmxiMllnY0hKdlkyVnpjeTUyWlhKemFXOXVjeVltWENKemRISnBibWRjSWowOWRIbHdaVzltSUhCeWIyTmxjM011ZG1WeWMybHZibk11Ym05a1pTeElQVUl1UlU1V1NWSlBUazFGVGxSZlNWTmZVRlJJVWtWQlJIeDhJVEVzU1QxY0lsd2lPMloxYm1OMGFXOXVJR3hoS0dFcGUzSmxkSFZ5YmlCQ0xteHZZMkYwWlVacGJHVS9RaTVzYjJOaGRHVkdhV3hsS0dFc1NTazZTU3RoZlhaaGNpQnRZU3hLTEc1aE8xeHVhV1lvUnlsN2RtRnlJR1p6UFhKbGNYVnBjbVVvWENKbWMxd2lLU3h2WVQxeVpYRjFhWEpsS0Z3aWNHRjBhRndpS1R0SlBVWS9iMkV1WkdseWJtRnRaU2hKS1N0Y0lpOWNJanBmWDJScGNtNWhiV1VyWENJdlhDSTdiV0U5S0dJc1l5azlQbnRpUFdJdWMzUmhjblJ6VjJsMGFDaGNJbVpwYkdVNkx5OWNJaWsvYm1WM0lGVlNUQ2hpS1RwdllTNXViM0p0WVd4cGVtVW9ZaWs3Y21WMGRYSnVJR1p6TG5KbFlXUkdhV3hsVTNsdVl5aGlMR00vZG05cFpDQXdPbHdpZFhSbU9Gd2lLWDA3Ym1FOVlqMCtlMkk5YldFb1lpd2hNQ2s3WWk1aWRXWm1aWEo4ZkNoaVBXNWxkeUJWYVc1ME9FRnljbUY1S0dJcEtUdHlaWFIxY200Z1luMDdTajBvWWl4akxHVXNaajBoTUNrOVBudGlQV0l1YzNSaGNuUnpWMmwwYUNoY0ltWnBiR1U2THk5Y0lpay9ibVYzSUZWU1RDaGlLVHB2WVM1dWIzSnRZV3hwZW1Vb1lpazdabk11Y21WaFpFWnBiR1VvWWl4bVAzWnZhV1FnTURwY0luVjBaamhjSWl3b2FDeHJLVDArZTJnL1pTaG9LVHBqS0dZL2F5NWlkV1ptWlhJNmF5bDlLWDA3SVVJdWRHaHBjMUJ5YjJkeVlXMG1KakU4Y0hKdlkyVnpjeTVoY21kMkxteGxibWQwYUNZbUtHcGhQWEJ5YjJObGMzTXVZWEpuZGxzeFhTNXlaWEJzWVdObEtDOWNYRnhjTDJjc1hDSXZYQ0lwS1R0d2NtOWpaWE56TG1GeVozWXVjMnhwWTJVb01pazdSVDBvWWl4aktUMCtlM0J5YjJObGMzTXVaWGhwZEVOdlpHVTlYRzVpTzNSb2NtOTNJR003ZlR0Q0xtbHVjM0JsWTNROUtDazlQbHdpVzBWdGMyTnlhWEIwWlc0Z1RXOWtkV3hsSUc5aWFtVmpkRjFjSWp0c1pYUWdZVHQwY25sN1lUMXlaWEYxYVhKbEtGd2lkMjl5YTJWeVgzUm9jbVZoWkhOY0lpbDlZMkYwWTJnb1lpbDdkR2h5YjNjZ1kyOXVjMjlzWlM1bGNuSnZjaWduVkdobElGd2lkMjl5YTJWeVgzUm9jbVZoWkhOY0lpQnRiMlIxYkdVZ2FYTWdibTkwSUhOMWNIQnZjblJsWkNCcGJpQjBhR2x6SUc1dlpHVXVhbk1nWW5WcGJHUWdMU0J3WlhKb1lYQnpJR0VnYm1WM1pYSWdkbVZ5YzJsdmJpQnBjeUJ1WldWa1pXUS9KeWtzWWp0OVoyeHZZbUZzTGxkdmNtdGxjajFoTGxkdmNtdGxjbjFsYkhObElHbG1LR3RoZkh4R0tVWS9TVDF6Wld4bUxteHZZMkYwYVc5dUxtaHlaV1k2WENKMWJtUmxabWx1WldSY0lpRTlkSGx3Wlc5bUlHUnZZM1Z0Wlc1MEppWmtiMk4xYldWdWRDNWpkWEp5Wlc1MFUyTnlhWEIwSmlZb1NUMWtiMk4xYldWdWRDNWpkWEp5Wlc1MFUyTnlhWEIwTG5OeVl5a3NLSFI1Y0dWdlppQmZjMk55YVhCMFJHbHlJQ0U5UFNCY0luVnVaR1ZtYVc1bFpGd2lJQ1ltSUY5elkzSnBjSFJFYVhJcEppWW9TVDFmYzJOeWFYQjBSR2x5S1N3d0lUMDlTUzVwYm1SbGVFOW1LRndpWW14dllqcGNJaWsvU1QxSkxuTjFZbk4wY2lnd0xFa3VjbVZ3YkdGalpTZ3ZXejhqWFM0cUx5eGNJbHdpS1M1c1lYTjBTVzVrWlhoUFppaGNJaTljSWlrck1TazZTVDFjSWx3aUxFZDhmQ2h0WVQxaFBUNTdkbUZ5SUdJOVhHNXVaWGNnV0UxTVNIUjBjRkpsY1hWbGMzUTdZaTV2Y0dWdUtGd2lSMFZVWENJc1lTd2hNU2s3WWk1elpXNWtLRzUxYkd3cE8zSmxkSFZ5YmlCaUxuSmxjM0J2Ym5ObFZHVjRkSDBzUmlZbUtHNWhQV0U5UG50MllYSWdZajF1WlhjZ1dFMU1TSFIwY0ZKbGNYVmxjM1E3WWk1dmNHVnVLRndpUjBWVVhDSXNZU3doTVNrN1lpNXlaWE53YjI1elpWUjVjR1U5WENKaGNuSmhlV0oxWm1abGNsd2lPMkl1YzJWdVpDaHVkV3hzS1R0eVpYUjFjbTRnYm1WM0lGVnBiblE0UVhKeVlYa29ZaTV5WlhOd2IyNXpaU2w5S1N4S1BTaGhMR0lzWXlrOVBudDJZWElnWlQxdVpYY2dXRTFNU0hSMGNGSmxjWFZsYzNRN1pTNXZjR1Z1S0Z3aVIwVlVYQ0lzWVN3aE1DazdaUzV5WlhOd2IyNXpaVlI1Y0dVOVhDSmhjbkpoZVdKMVptWmxjbHdpTzJVdWIyNXNiMkZrUFNncFBUNTdNakF3UFQxbExuTjBZWFIxYzN4OE1EMDlaUzV6ZEdGMGRYTW1KbVV1Y21WemNHOXVjMlUvWWlobExuSmxjM0J2Ym5ObEtUcGpLQ2w5TzJVdWIyNWxjbkp2Y2oxak8yVXVjMlZ1WkNodWRXeHNLWDBwTzBjbUpsd2lkVzVrWldacGJtVmtYQ0k5UFhSNWNHVnZaaUJ3WlhKbWIzSnRZVzVqWlNZbUtHZHNiMkpoYkM1d1pYSm1iM0p0WVc1alpUMXlaWEYxYVhKbEtGd2ljR1Z5Wmw5b2IyOXJjMXdpS1M1d1pYSm1iM0p0WVc1alpTazdYRzUyWVhJZ2NHRTlZMjl1YzI5c1pTNXNiMmN1WW1sdVpDaGpiMjV6YjJ4bEtTeHhZVDFqYjI1emIyeGxMbVZ5Y205eUxtSnBibVFvWTI5dWMyOXNaU2s3UnlZbUtIQmhQU2d1TGk1aEtUMCtabk11ZDNKcGRHVlRlVzVqS0RFc1lTNXFiMmx1S0Z3aUlGd2lLU3RjSWx4Y2Jsd2lLU3h4WVQwb0xpNHVZU2s5UG1aekxuZHlhWFJsVTNsdVl5Z3lMR0V1YW05cGJpaGNJaUJjSWlrclhDSmNYRzVjSWlrcE8zWmhjaUJ5WVQxQ0xuQnlhVzUwZkh4d1lTeExQVUl1Y0hKcGJuUkZjbko4ZkhGaE8wOWlhbVZqZEM1aGMzTnBaMjRvUWl4cFlTazdhV0U5Ym5Wc2JEdENMblJvYVhOUWNtOW5jbUZ0SmlZb2FtRTlRaTUwYUdselVISnZaM0poYlNrN1FpNXhkV2wwSmlZb1JUMUNMbkYxYVhRcE8zWmhjaUJNTzBJdWQyRnpiVUpwYm1GeWVTWW1LRXc5UWk1M1lYTnRRbWx1WVhKNUtUdDJZWElnYm05RmVHbDBVblZ1ZEdsdFpUMUNMbTV2UlhocGRGSjFiblJwYldWOGZDRXdPMXdpYjJKcVpXTjBYQ0loUFhSNWNHVnZaaUJYWldKQmMzTmxiV0pzZVNZbVRTaGNJbTV2SUc1aGRHbDJaU0IzWVhOdElITjFjSEJ2Y25RZ1pHVjBaV04wWldSY0lpazdkbUZ5SUd3c1RpeHpZU3hRUFNFeExGRXNjQ3hoWVN4aVlTeGpZU3hsWVR0Y2JtWjFibU4wYVc5dUlIUW9LWHQyWVhJZ1lUMXNMbUoxWm1abGNqdENMa2hGUVZBNFBYQTlibVYzSUVsdWREaEJjbkpoZVNoaEtUdENMa2hGUVZBeE5qMXVaWGNnU1c1ME1UWkJjbkpoZVNoaEtUdENMa2hGUVZBek1qMWlZVDF1WlhjZ1NXNTBNekpCY25KaGVTaGhLVHRDTGtoRlFWQlZPRDFoWVQxdVpYY2dWV2x1ZERoQmNuSmhlU2hoS1R0Q0xraEZRVkJWTVRZOWJtVjNJRlZwYm5ReE5rRnljbUY1S0dFcE8wSXVTRVZCVUZVek1qMWpZVDF1WlhjZ1ZXbHVkRE15UVhKeVlYa29ZU2s3UWk1SVJVRlFSak15UFc1bGR5QkdiRzloZERNeVFYSnlZWGtvWVNrN1FpNUlSVUZRUmpZMFBXVmhQVzVsZHlCR2JHOWhkRFkwUVhKeVlYa29ZU2w5ZG1GeUlIUmhQVUl1U1U1SlZFbEJURjlOUlUxUFVsbDhmREUyTnpjM01qRTJPelV5TkRJNE9EQThQWFJoZkh4TktGd2lTVTVKVkVsQlRGOU5SVTFQVWxrZ2MyaHZkV3hrSUdKbElHeGhjbWRsY2lCMGFHRnVJRk5VUVVOTFgxTkpXa1VzSUhkaGN5QmNJaXQwWVN0Y0lpRWdLRk5VUVVOTFgxTkpXa1U5TlRJME1qZzRNQ2xjSWlrN1hHNXBaaWhJS1d3OVFpNTNZWE50VFdWdGIzSjVPMlZzYzJVZ2FXWW9RaTUzWVhOdFRXVnRiM0o1S1d3OVFpNTNZWE50VFdWdGIzSjVPMlZzYzJVZ2FXWW9iRDF1WlhjZ1YyVmlRWE56WlcxaWJIa3VUV1Z0YjNKNUtIdHBibWwwYVdGc09uUmhMelkxTlRNMkxHMWhlR2x0ZFcwNk5qVTFNellzYzJoaGNtVmtPaUV3ZlNrc0lTaHNMbUoxWm1abGNpQnBibk4wWVc1alpXOW1JRk5vWVhKbFpFRnljbUY1UW5WbVptVnlLU2wwYUhKdmR5QkxLRndpY21WeGRXVnpkR1ZrSUdFZ2MyaGhjbVZrSUZkbFlrRnpjMlZ0WW14NUxrMWxiVzl5ZVNCaWRYUWdkR2hsSUhKbGRIVnlibVZrSUdKMVptWmxjaUJwY3lCdWIzUWdZU0JUYUdGeVpXUkJjbkpoZVVKMVptWmxjaXdnYVc1a2FXTmhkR2x1WnlCMGFHRjBJSGRvYVd4bElIUm9aU0JpY205M2MyVnlJR2hoY3lCVGFHRnlaV1JCY25KaGVVSjFabVpsY2lCcGRDQmtiMlZ6SUc1dmRDQm9ZWFpsSUZkbFlrRnpjMlZ0WW14NUlIUm9jbVZoWkhNZ2MzVndjRzl5ZENBdElIbHZkU0J0WVhrZ2JtVmxaQ0IwYnlCelpYUWdZU0JtYkdGblhDSXBMRWNtSmtzb1hDSW9iMjRnYm05a1pTQjViM1VnYldGNUlHNWxaV1E2SUMwdFpYaHdaWEpwYldWdWRHRnNMWGRoYzIwdGRHaHlaV0ZrY3lBdExXVjRjR1Z5YVcxbGJuUmhiQzEzWVhOdExXSjFiR3N0YldWdGIzSjVJR0Z1WkM5dmNpQnlaV05sYm5RZ2RtVnljMmx2YmlsY0lpa3NYRzVGY25KdmNpaGNJbUpoWkNCdFpXMXZjbmxjSWlrN2RDZ3BPM1JoUFd3dVluVm1abVZ5TG1KNWRHVk1aVzVuZEdnN2RtRnlJSFZoUFZ0ZExIWmhQVnRkTEhkaFBWdGRMSGhoUFRBN1puVnVZM1JwYjI0Z2VXRW9LWHR5WlhSMWNtNGdibTlGZUdsMFVuVnVkR2x0Wlh4OE1EeDRZWDEyWVhJZ1VqMHdMSHBoUFc1MWJHd3NVejF1ZFd4c08yWjFibU4wYVc5dUlFRmhLQ2w3VWlzck8wSXViVzl1YVhSdmNsSjFia1JsY0dWdVpHVnVZMmxsY3lZbVFpNXRiMjVwZEc5eVVuVnVSR1Z3Wlc1a1pXNWphV1Z6S0ZJcGZXWjFibU4wYVc5dUlFSmhLQ2w3VWkwdE8wSXViVzl1YVhSdmNsSjFia1JsY0dWdVpHVnVZMmxsY3lZbVFpNXRiMjVwZEc5eVVuVnVSR1Z3Wlc1a1pXNWphV1Z6S0ZJcE8ybG1LREE5UFZJbUppaHVkV3hzSVQwOWVtRW1KaWhqYkdWaGNrbHVkR1Z5ZG1Gc0tIcGhLU3g2WVQxdWRXeHNLU3hUS1NsN2RtRnlJR0U5VXp0VFBXNTFiR3c3WVNncGZYMWNibVoxYm1OMGFXOXVJRTBvWVNsN2FXWW9RaTV2YmtGaWIzSjBLVUl1YjI1QlltOXlkQ2hoS1R0aFBWd2lRV0p2Y25SbFpDaGNJaXRoSzF3aUtWd2lPMHNvWVNrN1VEMGhNRHRSUFRFN1lUMXVaWGNnVjJWaVFYTnpaVzFpYkhrdVVuVnVkR2x0WlVWeWNtOXlLR0VyWENJdUlFSjFhV3hrSUhkcGRHZ2dMWE5CVTFORlVsUkpUMDVUSUdadmNpQnRiM0psSUdsdVptOHVYQ0lwTzBNb1lTazdkR2h5YjNjZ1lUdDlablZ1WTNScGIyNGdRMkVvWVNsN2NtVjBkWEp1SUdFdWMzUmhjblJ6VjJsMGFDaGNJbVJoZEdFNllYQndiR2xqWVhScGIyNHZiMk4wWlhRdGMzUnlaV0Z0TzJKaGMyVTJOQ3hjSWlsOWRtRnlJRlE3VkQxY0ltOXlkQzEzWVhOdExYTnBiV1F0ZEdoeVpXRmtaV1F1ZDJGemJWd2lPME5oS0ZRcGZId29WRDFzWVNoVUtTazdablZ1WTNScGIyNGdSR0VvWVNsN2FXWW9ZVDA5VkNZbVRDbHlaWFIxY200Z2JtVjNJRlZwYm5RNFFYSnlZWGtvVENrN2FXWW9ibUVwY21WMGRYSnVJRzVoS0dFcE8zUm9jbTkzWENKaWIzUm9JR0Z6ZVc1aklHRnVaQ0J6ZVc1aklHWmxkR05vYVc1bklHOW1JSFJvWlNCM1lYTnRJR1poYVd4bFpGd2lPMzFjYm1aMWJtTjBhVzl1SUVWaEtHRXBlMmxtS0NGTUppWW9hMkY4ZkVZcEtYdHBaaWhjSW1aMWJtTjBhVzl1WENJOVBYUjVjR1Z2WmlCbVpYUmphQ1ltSVdFdWMzUmhjblJ6VjJsMGFDaGNJbVpwYkdVNkx5OWNJaWtwY21WMGRYSnVJR1psZEdOb0tHRXNlMk55WldSbGJuUnBZV3h6T2x3aWMyRnRaUzF2Y21sbmFXNWNJbjBwTG5Sb1pXNG9ZajArZTJsbUtDRmlMbTlyS1hSb2NtOTNYQ0ptWVdsc1pXUWdkRzhnYkc5aFpDQjNZWE50SUdKcGJtRnllU0JtYVd4bElHRjBJQ2RjSWl0aEsxd2lKMXdpTzNKbGRIVnliaUJpTG1GeWNtRjVRblZtWm1WeUtDbDlLUzVqWVhSamFDZ29LVDArUkdFb1lTa3BPMmxtS0VvcGNtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaGlMR01wUFQ1N1NpaGhMR1U5UG1Jb2JtVjNJRlZwYm5RNFFYSnlZWGtvWlNrcExHTXBmU2w5Y21WMGRYSnVJRkJ5YjIxcGMyVXVjbVZ6YjJ4MlpTZ3BMblJvWlc0b0tDazlQa1JoS0dFcEtYMW1kVzVqZEdsdmJpQkdZU2hoTEdJc1l5bDdjbVYwZFhKdUlFVmhLR0VwTG5Sb1pXNG9aVDArVjJWaVFYTnpaVzFpYkhrdWFXNXpkR0Z1ZEdsaGRHVW9aU3hpS1NrdWRHaGxiaWhsUFQ1bEtTNTBhR1Z1S0dNc1pUMCtlMHNvWENKbVlXbHNaV1FnZEc4Z1lYTjVibU5vY205dWIzVnpiSGtnY0hKbGNHRnlaU0IzWVhOdE9pQmNJaXRsS1R0TktHVXBmU2w5WEc1bWRXNWpkR2x2YmlCSFlTaGhMR0lwZTNaaGNpQmpQVlE3Y21WMGRYSnVJRXg4ZkZ3aVpuVnVZM1JwYjI1Y0lpRTlkSGx3Wlc5bUlGZGxZa0Z6YzJWdFlteDVMbWx1YzNSaGJuUnBZWFJsVTNSeVpXRnRhVzVuZkh4RFlTaGpLWHg4WXk1emRHRnlkSE5YYVhSb0tGd2labWxzWlRvdkwxd2lLWHg4UjN4OFhDSm1kVzVqZEdsdmJsd2lJVDEwZVhCbGIyWWdabVYwWTJnL1JtRW9ZeXhoTEdJcE9tWmxkR05vS0dNc2UyTnlaV1JsYm5ScFlXeHpPbHdpYzJGdFpTMXZjbWxuYVc1Y0luMHBMblJvWlc0b1pUMCtWMlZpUVhOelpXMWliSGt1YVc1emRHRnVkR2xoZEdWVGRISmxZVzFwYm1jb1pTeGhLUzUwYUdWdUtHSXNablZ1WTNScGIyNG9aaWw3U3loY0luZGhjMjBnYzNSeVpXRnRhVzVuSUdOdmJYQnBiR1VnWm1GcGJHVmtPaUJjSWl0bUtUdExLRndpWm1Gc2JHbHVaeUJpWVdOcklIUnZJRUZ5Y21GNVFuVm1abVZ5SUdsdWMzUmhiblJwWVhScGIyNWNJaWs3Y21WMGRYSnVJRVpoS0dNc1lTeGlLWDBwS1gxY2JuWmhjaUJWTEVoaFBYczVNRFk0TWpnNllUMCtlMEl1UldFb1hDSkJZbk5jSWl4aExIWnZhV1FnTUNsOUxEa3dOamczT1RwaFBUNTdRaTVGWVNoY0lrNWxaMXdpTEdFc2RtOXBaQ0F3S1gwc09UQTJPVE13T21FOVBudENMa1ZoS0Z3aVJteHZiM0pjSWl4aExIWnZhV1FnTUNsOUxEa3dOams0TXpwaFBUNTdRaTVGWVNoY0lrTmxhV3hjSWl4aExIWnZhV1FnTUNsOUxEa3dOekF6TlRwaFBUNTdRaTVGWVNoY0lsSmxZMmx3Y205allXeGNJaXhoTEhadmFXUWdNQ2w5TERrd056QTVNenBoUFQ1N1FpNUZZU2hjSWxOeGNuUmNJaXhoTEhadmFXUWdNQ2w5TERrd056RTBOVHBoUFQ1N1FpNUZZU2hjSWtWNGNGd2lMR0VzZG05cFpDQXdLWDBzT1RBM01UazJPbUU5UG50Q0xrVmhLRndpUlhKbVhDSXNZU3gyYjJsa0lEQXBmU3c1TURjeU5EYzZZVDArZTBJdVJXRW9YQ0pUYVdkdGIybGtYQ0lzWVN4MmIybGtJREFwZlN3NU1EY3pNREk2WVQwK2UwSXVSV0VvWENKTWIyZGNJaXhoTEhadmFXUWdNQ2w5TERrd056TTFNenBoUFQ1N1FpNUZZU2hjSWxOcGJsd2lMR0VzZG05cFpDQXdLWDBzT1RBM05EQTBPbUU5UG50Q0xrVmhLRndpUTI5elhDSXNZU3gyYjJsa0lEQXBmU3c1TURjME5UVTZZVDArZTBJdVJXRW9YQ0pVWVc1Y0lpeGhMSFp2YVdRZ01DbDlMRGt3TnpVd05qcGhQVDU3UWk1RllTaGNJa0Z6YVc1Y0lpeGhMSFp2YVdRZ01DbDlMRGt3TnpVMU9EcGhQVDU3UWk1RllTaGNJa0ZqYjNOY0lpeGNibUVzZG05cFpDQXdLWDBzT1RBM05qRXdPbUU5UG50Q0xrVmhLRndpUVhSaGJsd2lMR0VzZG05cFpDQXdLWDBzT1RBM05qWXlPbUU5UG50Q0xrVmhLRndpVTJsdWFGd2lMR0VzZG05cFpDQXdLWDBzT1RBM056RTBPbUU5UG50Q0xrVmhLRndpUTI5emFGd2lMR0VzZG05cFpDQXdLWDBzT1RBM056WTJPbUU5UG50Q0xrVmhLRndpUVhOcGJtaGNJaXhoTEhadmFXUWdNQ2w5TERrd056Z3hPVHBoUFQ1N1FpNUZZU2hjSWtGamIzTm9YQ0lzWVN4MmIybGtJREFwZlN3NU1EYzROekk2WVQwK2UwSXVSV0VvWENKQmRHRnVhRndpTEdFc2RtOXBaQ0F3S1gwc09UQTNPVEkxT21FOVBudENMa1ZoS0Z3aVZHRnVhRndpTEdFc2RtOXBaQ0F3S1gwc09UQTNPVGMzT21FOVBudENMa1ZoS0Z3aVRtOTBYQ0lzWVN4MmIybGtJREFwZlN3NU1EZ3dNamc2S0dFc1lpeGpLVDArZTBJdVJXRW9YQ0pEYkdsd1ZqRXdYQ0lzWVN4N2JXbHVPbUlzYldGNE9tTjlLWDBzT1RBNE1UQXdPbUU5UG50Q0xrVmhLRndpUTJ4cGNGd2lMR0VzZG05cFpDQXdLWDBzT1RBNE1UVXlPaWhoTEdJcFBUNTdRaTVGWVNoY0lrVnNkVndpTEdFc2UyRnNjR2hoT21KOUtYMHNPVEE0TWpFd09tRTlQbnRDTGtWaEtGd2lVbVZzZFZ3aUxHRXNkbTlwWkNBd0tYMHNPVEE0TWpZeU9paGhMR0lwUFQ1N1FpNUZZU2hjSWt4bFlXdDVVbVZzZFZ3aUxHRXNlMkZzY0doaE9tSjlLWDBzT1RBNE16STJPaWhoTEdJcFBUNWNibnRDTGtWaEtGd2lWR2h5WlhOb2IyeGtaV1JTWld4MVhDSXNZU3g3WVd4d2FHRTZZbjBwZlN3NU1EZ3pPVFk2S0dFc1lpazlQbnRDTGtWaEtGd2lRMkZ6ZEZ3aUxHRXNlM1J2T21KOUtYMHNPVEE0TkRVME9tRTlQbnRDTGtWaEtGd2lRV1JrWENJc1lTeDJiMmxrSURBcGZTdzVNRGcxTURVNllUMCtlMEl1UldFb1hDSlRkV0pjSWl4aExIWnZhV1FnTUNsOUxEa3dPRFUxTmpwaFBUNTdRaTVGWVNoY0lrMTFiRndpTEdFc2RtOXBaQ0F3S1gwc09UQTROakEzT21FOVBudENMa1ZoS0Z3aVJHbDJYQ0lzWVN4MmIybGtJREFwZlN3NU1EZzJOVGc2WVQwK2UwSXVSV0VvWENKUWIzZGNJaXhoTEhadmFXUWdNQ2w5TERrd09EY3dPVHBoUFQ1N1FpNUZZU2hjSWtWeGRXRnNYQ0lzWVN4MmIybGtJREFwZlN3NU1EZzNOakk2WVQwK2UwSXVSV0VvWENKSGNtVmhkR1Z5WENJc1lTeDJiMmxrSURBcGZTdzVNRGc0TVRjNllUMCtlMEl1UldFb1hDSkhjbVZoZEdWeVQzSkZjWFZoYkZ3aUxHRXNkbTlwWkNBd0tYMHNPVEE0T0RjNU9tRTlQbnRDTGtWaEtGd2lUR1Z6YzF3aUxHRXNkbTlwWkNBd0tYMHNPVEE0T1RNeE9tRTlQbnRDTGtWaEtGd2lUR1Z6YzA5eVJYRjFZV3hjSWl4aExIWnZhV1FnTUNsOUxEa3dPRGs1TURvb1lTeGlMR01zWlN4bUtUMCtlMEl1UldFb1hDSlNaV1IxWTJWTlpXRnVYQ0lzWVN4N2EyVmxjRVJwYlhNNklTRmlMRzV2YjNCWGFYUm9SVzF3ZEhsQmVHVnpPaUVoWXl4Y2JtRjRaWE02WlQ5QmNuSmhlUzVtY205dEtIb29LUzV6ZFdKaGNuSmhlU2htUGo0K01DeG1LMlUrUGo0d0tTazZXMTE5S1gwc09UQTVNVFUwT2loaExHSXNZeXhsTEdZcFBUNTdRaTVGWVNoY0lsSmxaSFZqWlUxaGVGd2lMR0VzZTJ0bFpYQkVhVzF6T2lFaFlpeHViMjl3VjJsMGFFVnRjSFI1UVhobGN6b2hJV01zWVhobGN6cGxQMEZ5Y21GNUxtWnliMjBvZWlncExuTjFZbUZ5Y21GNUtHWStQajR3TEdZclpUNCtQakFwS1RwYlhYMHBmU3c1TURrek1UYzZLR0VzWWl4akxHVXNaaWs5UG50Q0xrVmhLRndpVW1Wa2RXTmxUV2x1WENJc1lTeDdhMlZsY0VScGJYTTZJU0ZpTEc1dmIzQlhhWFJvUlcxd2RIbEJlR1Z6T2lFaFl5eGhlR1Z6T21VL1FYSnlZWGt1Wm5KdmJTaDZLQ2t1YzNWaVlYSnlZWGtvWmo0K1BqQXNaaXRsUGo0K01Da3BPbHRkZlNsOUxEa3dPVFE0TURvb1lTeGlMR01zWlN4bUtUMCtlMEl1UldFb1hDSlNaV1IxWTJWUWNtOWtYQ0lzWVN4N2EyVmxjRVJwYlhNNklTRmlMRzV2YjNCWGFYUm9SVzF3ZEhsQmVHVnpPaUVoWXl4aGVHVnpPbVUvUVhKeVlYa3Vabkp2YlNoNktDa3VjM1ZpWVhKeVlYa29aajQrUGpBc1ppdGxQajQrTUNrcE9sdGRmU2w5TERrd09UWTBORG9vWVN4aUxHTXNaU3htS1QwK2UwSXVSV0VvWENKU1pXUjFZMlZUZFcxY0lpeGhMSHRyWldWd1JHbHRjem9oSVdJc2JtOXZjRmRwZEdoRmJYQjBlVUY0WlhNNklTRmpMRnh1WVhobGN6cGxQMEZ5Y21GNUxtWnliMjBvZWlncExuTjFZbUZ5Y21GNUtHWStQajR3TEdZclpUNCtQakFwS1RwYlhYMHBmU3c1TURrNE1EYzZLR0VzWWl4akxHVXNaaWs5UG50Q0xrVmhLRndpVW1Wa2RXTmxUREZjSWl4aExIdHJaV1Z3UkdsdGN6b2hJV0lzYm05dmNGZHBkR2hGYlhCMGVVRjRaWE02SVNGakxHRjRaWE02WlQ5QmNuSmhlUzVtY205dEtIb29LUzV6ZFdKaGNuSmhlU2htUGo0K01DeG1LMlUrUGo0d0tTazZXMTE5S1gwc09UQTVPVFk1T2loaExHSXNZeXhsTEdZcFBUNTdRaTVGWVNoY0lsSmxaSFZqWlV3eVhDSXNZU3g3YTJWbGNFUnBiWE02SVNGaUxHNXZiM0JYYVhSb1JXMXdkSGxCZUdWek9pRWhZeXhoZUdWek9tVS9RWEp5WVhrdVpuSnZiU2g2S0NrdWMzVmlZWEp5WVhrb1pqNCtQakFzWml0bFBqNCtNQ2twT2x0ZGZTbDlMRGt4TURFek1Ub29ZU3hpTEdNc1pTeG1LVDArZTBJdVJXRW9YQ0pTWldSMVkyVk1iMmRUZFcxY0lpeGhMSHRyWldWd1JHbHRjem9oSVdJc2JtOXZjRmRwZEdoRmJYQjBlVUY0WlhNNklTRmpMR0Y0WlhNNlpUOUJjbkpoZVM1bWNtOXRLSG9vS1M1emRXSmhjbkpoZVNobVBqNCtNQ3htSzJVK1BqNHdLU2s2VzExOUtYMHNPVEV3TWprM09paGhMR0lzWXl4bExHWXBQVDU3UWk1RllTaGNJbEpsWkhWalpWTjFiVk54ZFdGeVpWd2lMR0VzZTJ0bFpYQkVhVzF6T2lFaFlpeGNibTV2YjNCWGFYUm9SVzF3ZEhsQmVHVnpPaUVoWXl4aGVHVnpPbVUvUVhKeVlYa3Vabkp2YlNoNktDa3VjM1ZpWVhKeVlYa29aajQrUGpBc1ppdGxQajQrTUNrcE9sdGRmU2w5TERreE1EUTJOam9vWVN4aUxHTXNaU3htS1QwK2UwSXVSV0VvWENKU1pXUjFZMlZNYjJkVGRXMUZlSEJjSWl4aExIdHJaV1Z3UkdsdGN6b2hJV0lzYm05dmNGZHBkR2hGYlhCMGVVRjRaWE02SVNGakxHRjRaWE02WlQ5QmNuSmhlUzVtY205dEtIb29LUzV6ZFdKaGNuSmhlU2htUGo0K01DeG1LMlUrUGo0d0tTazZXMTE5S1gwc09URXdOak0xT21FOVBudENMa1ZoS0Z3aVYyaGxjbVZjSWl4aExIWnZhV1FnTUNsOUxEa3hNRFk0T0Rvb1lTeGlMR01wUFQ1N1FpNUZZU2hjSWxSeVlXNXpjRzl6WlZ3aUxHRXNlM0JsY20wNllqOUJjbkpoZVM1bWNtOXRLSG9vS1M1emRXSmhjbkpoZVNoalBqNCtNQ3hqSzJJK1BqNHdLU2s2VzExOUtYMHNPVEV3T0RBeE9paGhMR0lzWXl4bExHWXNhQ3hyTEhFc2JpeHRLVDArZTBJdVJXRW9YQ0pEYjI1MlhDSXNZU3g3Wm05eWJXRjBPbTQvWENKT1NGZERYQ0k2WENKT1EwaFhYQ0lzWVhWMGIxOXdZV1E2WWl4a2FXeGhkR2x2Ym5NNlcyTmRMR2R5YjNWd09tVXNhMlZ5Ym1Wc1gzTm9ZWEJsT2x0bVhTeHdZV1J6T2x0b0xHdGRMSE4wY21sa1pYTTZXM0ZkTEhkZmFYTmZZMjl1YzNRNktDazlQaUVoWkNncFcyMCtQajVjYmpCZGZTbDlMRGt4TVRBeU9Ub29ZU3hpTEdNc1pTeG1MR2dzYXl4eExHNHNiU3h5TEhjc2VDeG5MSFVwUFQ1N1FpNUZZU2hjSWtOdmJuWmNJaXhoTEh0bWIzSnRZWFE2Wno5Y0lrNUlWME5jSWpwY0lrNURTRmRjSWl4aGRYUnZYM0JoWkRwaUxHUnBiR0YwYVc5dWN6cGJZeXhsWFN4bmNtOTFjRHBtTEd0bGNtNWxiRjl6YUdGd1pUcGJhQ3hyWFN4d1lXUnpPbHR4TEc0c2JTeHlYU3h6ZEhKcFpHVnpPbHQzTEhoZExIZGZhWE5mWTI5dWMzUTZLQ2s5UGlFaFpDZ3BXM1UrUGo0d1hYMHBmU3c1TVRFeU9EZzZLR0VzWWl4akxHVXNaaXhvTEdzc2NTeHVMRzBwUFQ1N1FpNUZZU2hjSWtOdmJuWmNJaXhoTEh0bWIzSnRZWFE2Ymo5Y0lrNUlWME5jSWpwY0lrNURTRmRjSWl4aGRYUnZYM0JoWkRwaUxHUnBiR0YwYVc5dWN6cGJZMTBzWjNKdmRYQTZaU3hyWlhKdVpXeGZjMmhoY0dVNlcyWmRMSEJoWkhNNlcyZ3NhMTBzYzNSeWFXUmxjenBiY1Ywc2QxOXBjMTlqYjI1emREb29LVDArSVNGa0tDbGJiVDQrUGpCZGZTbDlMRGt4TVRVeE5qb29ZU3hpTEdNc1pTeG1MR2dzYXl4eExHNHNiU3h5TEhjc2VDeG5MSFVwUFQ1N1FpNUZZU2hjSWtOdmJuWmNJaXhoTEh0bWIzSnRZWFE2Wno5Y0lrNUlWME5jSWpwY0lrNURTRmRjSWl4aGRYUnZYM0JoWkRwaUxHUnBiR0YwYVc5dWN6cGJZeXhsWFN4bmNtOTFjRHBtTEd0bGNtNWxiRjl6YUdGd1pUcGJhQ3hjYm10ZExIQmhaSE02VzNFc2JpeHRMSEpkTEhOMGNtbGtaWE02VzNjc2VGMHNkMTlwYzE5amIyNXpkRG9vS1QwK0lTRmtLQ2xiZFQ0K1BqQmRmU2w5TERreE1UYzNOVG9vWVN4aUxHTXNaU3htTEdnc2F5eHhMRzRzYlN4eUxIY3NlQ3huS1QwK2UwSXVSV0VvWENKRGIyNTJWSEpoYm5Od2IzTmxYQ0lzWVN4N1ptOXliV0YwT200L1hDSk9TRmREWENJNlhDSk9RMGhYWENJc1lYVjBiMUJoWkRwaUxHUnBiR0YwYVc5dWN6cGJZMTBzWjNKdmRYQTZaU3hyWlhKdVpXeGZjMmhoY0dVNlcyWmRMSEJoWkhNNlcyZ3NhMTBzYzNSeWFXUmxjenBiY1Ywc2QwbHpRMjl1YzNRNktDazlQaUVoWkNncFcyMCtQajR3WFN4dmRYUndkWFJRWVdSa2FXNW5PbkkvUVhKeVlYa3Vabkp2YlNoNktDa3VjM1ZpWVhKeVlYa29kejQrUGpBc2R5dHlQajQrTUNrcE9sdGRMRzkxZEhCMWRGTm9ZWEJsT25nL1FYSnlZWGt1Wm5KdmJTaDZLQ2t1YzNWaVlYSnlZWGtvWno0K1BqQXNaeXQ0UGo0K01Da3BPbHRkZlNsOUxEa3hNakUxTlRvb1lTeGlMR01zWlN4bUxHZ3NheXh4TEc0c2JTeHlMSGNzZUNrOVBudENMa1ZoS0Z3aVEyOXVkbFJ5WVc1emNHOXpaVndpTEdFc2UyWnZjbTFoZERweFAxd2lUa2hYUTF3aU9sd2lUa05JVjF3aUxHRjFkRzlRWVdRNllpeGthV3hoZEdsdmJuTTZRWEp5WVhrdVpuSnZiU2g2S0NrdWMzVmlZWEp5WVhrb1l6NCtQakFzWXl0Y2JqSStQajR3S1Nrc1ozSnZkWEE2WlN4clpYSnVaV3hUYUdGd1pUcEJjbkpoZVM1bWNtOXRLSG9vS1M1emRXSmhjbkpoZVNobVBqNCtNQ3htS3pJK1BqNHdLU2tzY0dGa2N6cEJjbkpoZVM1bWNtOXRLSG9vS1M1emRXSmhjbkpoZVNob1BqNCtNQ3hvS3pRK1BqNHdLU2tzYzNSeWFXUmxjenBCY25KaGVTNW1jbTl0S0hvb0tTNXpkV0poY25KaGVTaHJQajQrTUN4ckt6SStQajR3S1Nrc2QwbHpRMjl1YzNRNktDazlQaUVoWkNncFcyNCtQajR3WFN4dmRYUndkWFJRWVdSa2FXNW5PakE4YlQ5QmNuSmhlUzVtY205dEtIb29LUzV6ZFdKaGNuSmhlU2h5UGo0K01DeHlLMjArUGo0d0tTazZXMTBzYjNWMGNIVjBVMmhoY0dVNk1EeDNQMEZ5Y21GNUxtWnliMjBvZWlncExuTjFZbUZ5Y21GNUtIZytQajR3TEhncmR6NCtQakFwS1RwYlhYMHBmU3c1TVRJMk56ZzZLR0VzWWl4akxHVXNaaXhvTEdzc2NTeHVMRzBzY2l4M0xIZ3NaeWs5UG50Q0xrVmhLRndpUTI5dWRsUnlZVzV6Y0c5elpWd2lMR0VzZTJadmNtMWhkRHB1UDF3aVRraFhRMXdpT2x3aVRrTklWMXdpTEdGMWRHOVFZV1E2WWl4a2FXeGhkR2x2Ym5NNlcyTmRMR2R5YjNWd09tVXNhMlZ5Ym1Wc1gzTm9ZWEJsT2x0bVhTeHdZV1J6T2x0b0xHdGRMSE4wY21sa1pYTTZXM0ZkTEhkSmMwTnZibk4wT2lncFBUNGhJV1FvS1Z0dFBqNCtNRjBzYjNWMGNIVjBVR0ZrWkdsdVp6cHlQMXh1UVhKeVlYa3Vabkp2YlNoNktDa3VjM1ZpWVhKeVlYa29kejQrUGpBc2R5dHlQajQrTUNrcE9sdGRMRzkxZEhCMWRGTm9ZWEJsT25nL1FYSnlZWGt1Wm5KdmJTaDZLQ2t1YzNWaVlYSnlZWGtvWno0K1BqQXNaeXQ0UGo0K01Da3BPbHRkZlNsOUxEa3hNekExT0Rvb1lTeGlMR01zWlN4bUxHZ3NheXh4TEc0c2JTeHlMSGNzZUNrOVBudENMa1ZoS0Z3aVEyOXVkbFJ5WVc1emNHOXpaVndpTEdFc2UyWnZjbTFoZERweFAxd2lUa2hYUTF3aU9sd2lUa05JVjF3aUxHRjFkRzlRWVdRNllpeGthV3hoZEdsdmJuTTZRWEp5WVhrdVpuSnZiU2g2S0NrdWMzVmlZWEp5WVhrb1l6NCtQakFzWXlzeVBqNCtNQ2twTEdkeWIzVndPbVVzYTJWeWJtVnNVMmhoY0dVNlFYSnlZWGt1Wm5KdmJTaDZLQ2t1YzNWaVlYSnlZWGtvWmo0K1BqQXNaaXN5UGo0K01Da3BMSEJoWkhNNlFYSnlZWGt1Wm5KdmJTaDZLQ2t1YzNWaVlYSnlZWGtvYUQ0K1BqQXNhQ3MwUGo0K01Da3BMSE4wY21sa1pYTTZRWEp5WVhrdVpuSnZiU2g2S0NrdWMzVmlZWEp5WVhrb2F6NCtQakFzYXlzeVBqNCtNQ2twTEhkSmMwTnZibk4wT2lncFBUNGhJV1FvS1Z0dVBqNCtNRjBzYjNWMGNIVjBVR0ZrWkdsdVp6b3dQRzAvUVhKeVlYa3Vabkp2YlNoNktDa3VjM1ZpWVhKeVlYa29jajQrUGpBc2NpdHRQajQrTUNrcE9sdGRMRzkxZEhCMWRGTm9ZWEJsT2pBOFhHNTNQMEZ5Y21GNUxtWnliMjBvZWlncExuTjFZbUZ5Y21GNUtIZytQajR3TEhncmR6NCtQakFwS1RwYlhYMHBmU3c1TVRNMU9ERTZLR0VzWWlrOVBudENMa1ZoS0Z3aVIyeHZZbUZzUVhabGNtRm5aVkJ2YjJ4Y0lpeGhMSHRtYjNKdFlYUTZZajljSWs1SVYwTmNJanBjSWs1RFNGZGNJbjBwZlN3NU1UTTJOekk2S0dFc1lpeGpMR1VzWml4b0xHc3NjU3h1TEcwc2NpeDNMSGdzWnl4MUxIa3BQVDU3UWk1RllTaGNJa0YyWlhKaFoyVlFiMjlzWENJc1lTeDdabTl5YldGME9uay9YQ0pPU0ZkRFhDSTZYQ0pPUTBoWFhDSXNZWFYwYjE5d1lXUTZZaXhqWldsc1gyMXZaR1U2WXl4amIzVnVkRjlwYm1Oc2RXUmxYM0JoWkRwbExITjBiM0poWjJWZmIzSmtaWEk2Wml4a2FXeGhkR2x2Ym5NNlcyZ3NhMTBzYTJWeWJtVnNYM05vWVhCbE9sdHhMRzVkTEhCaFpITTZXMjBzY2l4M0xIaGRMSE4wY21sa1pYTTZXMmNzZFYxOUtYMHNPVEV6T1RVMk9paGhMR0lwUFQ1N1FpNUZZU2hjSWtkc2IySmhiRUYyWlhKaFoyVlFiMjlzWENJc1lTeDdabTl5YldGME9tSS9YQ0pPU0ZkRFhDSTZYQ0pPUTBoWFhDSjlLWDBzT1RFME1EUTNPaWhoTEdJc1l5eGxMR1lzYUN4ckxIRXNiaXh0TEhJc2R5eDRMR2NzZFN4NUtUMCtlMEl1UldFb1hDSkJkbVZ5WVdkbFVHOXZiRndpTEdFc2UyWnZjbTFoZERwNVAxd2lUa2hYUTF3aU9sd2lUa05JVjF3aUxHRjFkRzlmY0dGa09tSXNZMlZwYkY5dGIyUmxPbU1zWEc1amIzVnVkRjlwYm1Oc2RXUmxYM0JoWkRwbExITjBiM0poWjJWZmIzSmtaWEk2Wml4a2FXeGhkR2x2Ym5NNlcyZ3NhMTBzYTJWeWJtVnNYM05vWVhCbE9sdHhMRzVkTEhCaFpITTZXMjBzY2l4M0xIaGRMSE4wY21sa1pYTTZXMmNzZFYxOUtYMHNPVEUwTXpNeE9paGhMR0lwUFQ1N1FpNUZZU2hjSWtkc2IySmhiRTFoZUZCdmIyeGNJaXhoTEh0bWIzSnRZWFE2WWo5Y0lrNUlWME5jSWpwY0lrNURTRmRjSW4wcGZTdzVNVFEwTVRnNktHRXNZaXhqTEdVc1ppeG9MR3NzY1N4dUxHMHNjaXgzTEhnc1p5eDFMSGtwUFQ1N1FpNUZZU2hjSWsxaGVGQnZiMnhjSWl4aExIdG1iM0p0WVhRNmVUOWNJazVJVjBOY0lqcGNJazVEU0ZkY0lpeGhkWFJ2WDNCaFpEcGlMR05sYVd4ZmJXOWtaVHBqTEdOdmRXNTBYMmx1WTJ4MVpHVmZjR0ZrT21Vc2MzUnZjbUZuWlY5dmNtUmxjanBtTEdScGJHRjBhVzl1Y3pwYmFDeHJYU3hyWlhKdVpXeGZjMmhoY0dVNlczRXNibDBzY0dGa2N6cGJiU3h5TEhjc2VGMHNjM1J5YVdSbGN6cGJaeXgxWFgwcGZTdzVNVFEyT1RnNktHRXNZaWs5UG50Q0xrVmhLRndpUjJ4dlltRnNUV0Y0VUc5dmJGd2lMR0VzZTJadmNtMWhkRHBpUDF3aVRraFhRMXdpT2x3aVRrTklWMXdpZlNsOUxEa3hORGM0TlRvb1lTeGlMR01zWlN4bUxHZ3NheXh4TEc0c2JTeHlMSGNzZUN4bkxIVXNlU2s5UG50Q0xrVmhLRndpVFdGNFVHOXZiRndpTEZ4dVlTeDdabTl5YldGME9uay9YQ0pPU0ZkRFhDSTZYQ0pPUTBoWFhDSXNZWFYwYjE5d1lXUTZZaXhqWldsc1gyMXZaR1U2WXl4amIzVnVkRjlwYm1Oc2RXUmxYM0JoWkRwbExITjBiM0poWjJWZmIzSmtaWEk2Wml4a2FXeGhkR2x2Ym5NNlcyZ3NhMTBzYTJWeWJtVnNYM05vWVhCbE9sdHhMRzVkTEhCaFpITTZXMjBzY2l4M0xIaGRMSE4wY21sa1pYTTZXMmNzZFYxOUtYMHNPVEUxTURZMU9paGhMR0lzWXl4bExHWXBQVDU3UWk1RllTaGNJa2RsYlcxY0lpeGhMSHRoYkhCb1lUcGlMR0psZEdFNll5eDBjbUZ1YzBFNlpTeDBjbUZ1YzBJNlpuMHBmU3c1TVRVeE5qazZZVDArZTBJdVJXRW9YQ0pOWVhSTmRXeGNJaXhoTEhadmFXUWdNQ2w5TERreE5USXlNem9vWVN4aUxHTXNaU2s5UG50Q0xrVmhLRndpUVhKblRXRjRYQ0lzWVN4N2EyVmxjRVJwYlhNNklTRmlMSE5sYkdWamRFeGhjM1JKYm1SbGVEb2hJV01zWVhocGN6cGxmU2w5TERreE5UTXpNVG9vWVN4aUxHTXNaU2s5UG50Q0xrVmhLRndpUVhKblRXbHVYQ0lzWVN4N2EyVmxjRVJwYlhNNklTRmlMSE5sYkdWamRFeGhjM1JKYm1SbGVEb2hJV01zWVhocGN6cGxmU2w5TERreE5UUXpPVG9vWVN4aUtUMCtlMEl1UldFb1hDSlRiMlowYldGNFhDSXNZU3g3WVhocGN6cGlmU2w5TERreE5UVXdNam9vWVN4aUtUMCtlMEl1UldFb1hDSkRiMjVqWVhSY0lpeGhMSHRoZUdsek9tSjlLWDBzWEc0NU1UVTFOakk2S0dFc1lpeGpMR1VzWmlrOVBudENMa1ZoS0Z3aVUzQnNhWFJjSWl4aExIdGhlR2x6T21Jc2JuVnRUM1YwY0hWMGN6cGpMSE53YkdsMFUybDZaWE02WlQ5QmNuSmhlUzVtY205dEtIb29LUzV6ZFdKaGNuSmhlU2htUGo0K01DeG1LMlUrUGo0d0tTazZXMTE5S1gwc09URTFOekEzT21FOVBudENMa1ZoS0Z3aVJYaHdZVzVrWENJc1lTeDJiMmxrSURBcGZTdzVNVFUzTmpFNktHRXNZaWs5UG50Q0xrVmhLRndpUjJGMGFHVnlYQ0lzWVN4N1lYaHBjenBPZFcxaVpYSW9ZaWw5S1gwc09URTFPRE15T2loaExHSXBQVDU3UWk1RllTaGNJa2RoZEdobGNrVnNaVzFsYm5SelhDSXNZU3g3WVhocGN6cE9kVzFpWlhJb1lpbDlLWDBzT1RFMU9URXhPaWhoTEdJc1l5eGxMR1lzYUN4ckxIRXNiaXh0TEhJcFBUNTdRaTVGWVNoY0lsSmxjMmw2WlZ3aUxHRXNlMkZ1ZEdsaGJHbGhjenBpTEdGNFpYTTZZejlCY25KaGVTNW1jbTl0S0hvb0tTNXpkV0poY25KaGVTaGxQajQrTUN4bEsyTStQajR3S1NrNlcxMHNZMjl2Y21ScGJtRjBaVlJ5WVc1elptOXliVTF2WkdVNlZpaG1LU3hqZFdKcFkwTnZaV1ptUVRwb0xHVjRZMngxWkdWUGRYUnphV1JsT21zc1pYaDBjbUZ3YjJ4aGRHbHZibFpoYkhWbE9uRXNhMlZsY0VGemNHVmpkRkpoZEdsdlVHOXNhV041T2xZb2Jpa3NiVzlrWlRwV0tHMHBMRzVsWVhKbGMzUk5iMlJsT2xZb2NpbDlLWDBzWEc0NU1UWXlOakk2S0dFc1lpeGpMR1VzWml4b0xHc3BQVDU3UWk1RllTaGNJbE5zYVdObFhDSXNZU3g3YzNSaGNuUnpPbUkvUVhKeVlYa3Vabkp2YlNoNktDa3VjM1ZpWVhKeVlYa29ZejQrUGpBc1l5dGlQajQrTUNrcE9sdGRMR1Z1WkhNNlpUOUJjbkpoZVM1bWNtOXRLSG9vS1M1emRXSmhjbkpoZVNobVBqNCtNQ3htSzJVK1BqNHdLU2s2VzEwc1lYaGxjenBvUDBGeWNtRjVMbVp5YjIwb2VpZ3BMbk4xWW1GeWNtRjVLR3MrUGo0d0xHc3JhRDQrUGpBcEtUcGJYWDBwZlN3NU1UWTBPVE02WVQwK2UwSXVSV0VvWENKVWFXeGxYQ0lzWVN4MmIybGtJREFwZlN3NU1UWTFORFU2S0dFc1lpeGpLVDArZTBJdVJXRW9YQ0pNWVhsbGNrNXZjbTFoYkdsNllYUnBiMjVjSWl4aExIdGhlR2x6T2s1MWJXSmxjaWhpS1N4bGNITnBiRzl1T2s1MWJXSmxjaWhqS1gwcGZTdzVNVFkyTlRJNktHRXNZaXhqS1QwK2UwSXVSV0VvWENKSmJuTjBZVzVqWlU1dmNtMWhiR2w2WVhScGIyNWNJaXhoTEh0bGNITnBiRzl1T21Jc1ptOXliV0YwT21NL1hDSk9TRmREWENJNlhDSk9RMGhYWENKOUtYMHNPVEUyTnpZMk9paGhMR0lzWXlrOVBudENMa1ZoS0Z3aVNXNXpkR0Z1WTJWT2IzSnRZV3hwZW1GMGFXOXVYQ0lzWVN4N1pYQnphV3h2YmpwaUxHWnZjbTFoZERwalAxd2lUa2hYUTF3aU9sd2lUa05JVjF3aWZTbDlMRGt4TmpnNE1EcGhQVDU3UWk1RllTaGNJbEpoYm1kbFhDSXNYRzVoTEhadmFXUWdNQ2w5TERreE5qa3pNem9vWVN4aUtUMCtlMEl1UldFb1hDSkZhVzV6ZFcxY0lpeGhMSHRsY1hWaGRHbHZianBXS0dJcGZTbDlMRGt4TnpBeE5Eb29ZU3hpTEdNc1pTeG1LVDArZTBJdVJXRW9YQ0pRWVdSY0lpeGhMSHR0YjJSbE9tSXNkbUZzZFdVNll5eHdZV1J6T21VL1FYSnlZWGt1Wm5KdmJTaDZLQ2t1YzNWaVlYSnlZWGtvWmo0K1BqQXNaaXRsUGo0K01Da3BPbHRkZlNsOUxEa3hOekUwTmpwaFBUNTdRaTVGWVNoY0lrZGxiSFZjSWl4aExIWnZhV1FnTUNsOUxEa3hOekU1T0RwaFBUNTdRaTVGWVNoY0lrSnBZWE5CWkdSY0lpeGhMSFp2YVdRZ01DbDlMRGt4TnpJMU16cGhQVDU3UWk1RllTaGNJa0pwWVhOVGNHeHBkRWRsYkhWY0lpeGhMSFp2YVdRZ01DbDlMRGt4TnpNeE5Eb29ZU3hpS1QwK2UwSXVSV0VvWENKVGEybHdUR0Y1WlhKT2IzSnRZV3hwZW1GMGFXOXVYQ0lzWVN4N1pYQnphV3h2YmpwaWZTbDlMRGt4TnpNNU5UcGhQVDU3UWk1NllpaGhLWDBzT1RFM05ESTVPaWhoTEdJcFBUNUNMa0ZpS0dFc1lpeENMbUppTGtaaUxFSXVZbUl1WlhKeWIzSnpLU3c1TVRjMU5ERTZZVDArUWk1M1lpaGhLU3c1TVRjMU56UTZZVDArUWk1NVlpaGhLU3c1TVRjMk1EWTZLR0VzWWl4aktUMCtlMEl1YW1Jb1lTeGlMR01zSVRBcGZTdzVNVGMyTkRVNktHRXNZaXhqS1QwK2UwSXVhbUlvWVN4aUxHTXBmWDA3WEc1bWRXNWpkR2x2YmlCSllTaGhLWHQwYUdsekxtNWhiV1U5WENKRmVHbDBVM1JoZEhWelhDSTdkR2hwY3k1dFpYTnpZV2RsUFdCUWNtOW5jbUZ0SUhSbGNtMXBibUYwWldRZ2QybDBhQ0JsZUdsMEtDUjdZWDBwWUR0MGFHbHpMbk4wWVhSMWN6MWhmV1oxYm1OMGFXOXVJRXBoS0dFcGUyRXVkR1Z5YldsdVlYUmxLQ2s3WVM1dmJtMWxjM05oWjJVOUtDazlQbnQ5ZldaMWJtTjBhVzl1SUV0aEtHRXBleWhoUFZjdVVXRmJZVjBwZkh4TktDazdWeTVGWWloaEtYMW1kVzVqZEdsdmJpQk1ZU2hoS1h0MllYSWdZajFYTG5SaUtDazdhV1lvSVdJcGNtVjBkWEp1SURZN1Z5NVpZUzV3ZFhOb0tHSXBPMWN1VVdGYllTNVlZVjA5WWp0aUxsaGhQV0V1V0dFN2RtRnlJR005ZTJOdFpEcGNJbkoxYmx3aUxITjBZWEowWDNKdmRYUnBibVU2WVM1SFlpeGhjbWM2WVM1eVlpeHdkR2h5WldGa1gzQjBjanBoTGxoaGZUdEhKaVppTG5WdWNtVm1LQ2s3WWk1d2IzTjBUV1Z6YzJGblpTaGpMR0V1VFdJcE8zSmxkSFZ5YmlBd2ZWeHVkbUZ5SUUxaFBWd2lkVzVrWldacGJtVmtYQ0loUFhSNWNHVnZaaUJVWlhoMFJHVmpiMlJsY2o5dVpYY2dWR1Y0ZEVSbFkyOWtaWElvWENKMWRHWTRYQ0lwT25admFXUWdNQ3hPWVQwb1lTeGlMR01wUFQ1N1lqNCtQajB3TzNaaGNpQmxQV0lyWXp0bWIzSW9ZejFpTzJGYlkxMG1KaUVvWXo0OVpTazdLU3NyWXp0cFppZ3hOanhqTFdJbUptRXVZblZtWm1WeUppWk5ZU2x5WlhSMWNtNGdUV0V1WkdWamIyUmxLR0V1WW5WbVptVnlJR2x1YzNSaGJtTmxiMllnVTJoaGNtVmtRWEp5WVhsQ2RXWm1aWEkvWVM1emJHbGpaU2hpTEdNcE9tRXVjM1ZpWVhKeVlYa29ZaXhqS1NrN1ptOXlLR1U5WENKY0lqdGlQR003S1h0MllYSWdaajFoVzJJcksxMDdhV1lvWmlZeE1qZ3BlM1poY2lCb1BXRmJZaXNyWFNZMk16dHBaaWd4T1RJOVBTaG1Kakl5TkNrcFpTczlVM1J5YVc1bkxtWnliMjFEYUdGeVEyOWtaU2dvWmlZek1TazhQRFo4YUNrN1pXeHpaWHQyWVhJZ2F6MWhXMklySzEwbU5qTTdaajB5TWpROVBTaG1KakkwTUNrL0tHWW1NVFVwUER3eE1ueG9QRHcyZkdzNktHWW1OeWs4UERFNGZHZzhQREV5ZkdzOFBEWjhZVnRpS3l0ZEpqWXpPelkxTlRNMlBtWS9aU3M5VTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlNobUtUb29aaTA5TmpVMU16WXNaU3M5VTNSeWFXNW5MbVp5YjIxRGFHRnlRMjlrWlNnMU5USTVObnhtUGo1Y2JqRXdMRFUyTXpJd2ZHWW1NVEF5TXlrcGZYMWxiSE5sSUdVclBWTjBjbWx1Wnk1bWNtOXRRMmhoY2tOdlpHVW9aaWw5Y21WMGRYSnVJR1Y5TEZZOUtHRXNZaWs5UGloaFBqNCtQVEFwUDA1aEtIWW9LU3hoTEdJcE9sd2lYQ0k3Wm5WdVkzUnBiMjRnVDJFb1lTbDdhV1lvU0NseVpYUjFjbTRnV0NneExERXNZU2s3VVQxaE8ybG1LQ0Y1WVNncEtYdFhMa2hpS0NrN2FXWW9RaTV2YmtWNGFYUXBRaTV2YmtWNGFYUW9ZU2s3VUQwaE1IMUZLR0VzYm1WM0lFbGhLR0VwS1gxY2JuWmhjaUJSWVQxaFBUNTdVVDFoTzJsbUtFZ3BkR2h5YjNjZ1VHRW9ZU2tzWENKMWJuZHBibVJjSWp0UFlTaGhLWDBzVnoxN1lXSTZXMTBzV1dFNlcxMHNiV0k2VzEwc1VXRTZlMzBzWjJJNlpuVnVZM1JwYjI0b0tYdElQMWN1ZG1Jb0tUcFhMblZpS0NsOUxIVmlPbVoxYm1OMGFXOXVLQ2w3ZFdFdWRXNXphR2xtZENnb0tUMCtlMEZoS0NrN1Z5NUNZaWdvS1QwK1FtRW9LU2w5S1gwc2RtSTZablZ1WTNScGIyNG9LWHRYTG5KbFkyVnBkbVZQWW1wbFkzUlVjbUZ1YzJabGNqMVhMa1JpTzFjdWRHaHlaV0ZrU1c1cGRGUk1VejFYTG14aU8xY3VjMlYwUlhocGRGTjBZWFIxY3oxWExtdGlPMjV2UlhocGRGSjFiblJwYldVOUlURjlMR3RpT21aMWJtTjBhVzl1S0dFcGUxRTlZWDBzVTJJNlcxd2lKSFJsY20xcGJtRjBaVmR2Y210bGNsd2lYU3hJWWpwbWRXNWpkR2x2YmlncGUyWnZjaWgyWVhJZ1lTQnZaaUJYTGxsaEtVcGhLR0VwTzJadmNpaGhJRzltSUZjdVlXSXBTbUVvWVNrN1Z5NWhZajFiWFR0WExsbGhQVnRkTzFjdVVXRTlXMTE5TEVWaU9tWjFibU4wYVc5dUtHRXBlM1poY2lCaVBXRXVXR0U3WkdWc1pYUmxJRmN1VVdGYllsMDdWeTVoWWk1d2RYTm9LR0VwTzFjdVdXRXVjM0JzYVdObEtGY3VXV0V1YVc1a1pYaFBaaWhoS1N3eEtUdGhMbGhoUFRBN1VtRW9ZaWw5TEVSaU9tWjFibU4wYVc5dUtDbDdmU3hjYm14aU9tWjFibU4wYVc5dUtDbDdWeTV0WWk1bWIzSkZZV05vS0dFOVBtRW9LU2w5TEVOaU9tRTlQbTVsZHlCUWNtOXRhWE5sS0dJOVBudGhMbTl1YldWemMyRm5aVDFvUFQ1N2FEMW9MbVJoZEdFN2RtRnlJR3M5YUM1amJXUTdhV1lvYUM1MFlYSm5aWFJVYUhKbFlXUW1KbWd1ZEdGeVoyVjBWR2h5WldGa0lUMVRZU2dwS1h0MllYSWdjVDFYTGxGaFcyZ3VVbUpkTzNFL2NTNXdiM04wVFdWemMyRm5aU2hvTEdndWRISmhibk5tWlhKTWFYTjBLVHBMS0NkSmJuUmxjbTVoYkNCbGNuSnZjaUVnVjI5eWEyVnlJSE5sYm5RZ1lTQnRaWE56WVdkbElGd2lKeXRyS3lkY0lpQjBieUIwWVhKblpYUWdjSFJvY21WaFpDQW5LMmd1ZEdGeVoyVjBWR2h5WldGa0sxd2lMQ0JpZFhRZ2RHaGhkQ0IwYUhKbFlXUWdibThnYkc5dVoyVnlJR1Y0YVhOMGN5RmNJaWw5Wld4elpTQnBaaWhjSW1Ob1pXTnJUV0ZwYkdKdmVGd2lQVDA5YXlsVVlTZ3BPMlZzYzJVZ2FXWW9YQ0p6Y0dGM2JsUm9jbVZoWkZ3aVBUMDlheWxNWVNob0tUdGxiSE5sSUdsbUtGd2lZMnhsWVc1MWNGUm9jbVZoWkZ3aVBUMDlheWxMWVNob0xuUm9jbVZoWkNrN1pXeHpaU0JwWmloY0ltdHBiR3hVYUhKbFlXUmNJajA5UFdzcGFEMW9MblJvY21WaFpDeHJQVmN1VVdGYmFGMHNaR1ZzWlhSbElGY3VVV0ZiYUYwc1NtRW9heWtzVW1Fb2FDa3NWeTVaWVM1emNHeHBZMlVvVnk1WllTNXBibVJsZUU5bUtHc3BMRnh1TVNrc2F5NVlZVDB3TzJWc2MyVWdhV1lvWENKallXNWpaV3hVYUhKbFlXUmNJajA5UFdzcFZ5NVJZVnRvTG5Sb2NtVmhaRjB1Y0c5emRFMWxjM05oWjJVb2UyTnRaRHBjSW1OaGJtTmxiRndpZlNrN1pXeHpaU0JwWmloY0lteHZZV1JsWkZ3aVBUMDlheWxoTG14dllXUmxaRDBoTUN4aUtHRXBPMlZzYzJVZ2FXWW9YQ0poYkdWeWRGd2lQVDA5YXlsaGJHVnlkQ2hjSWxSb2NtVmhaQ0JjSWl0b0xuUm9jbVZoWkVsa0sxd2lPaUJjSWl0b0xuUmxlSFFwTzJWc2MyVWdhV1lvWENKelpYUnBiVzFsWkdsaGRHVmNJajA5UFdndWRHRnlaMlYwS1dFdWNHOXpkRTFsYzNOaFoyVW9hQ2s3Wld4elpTQnBaaWhjSW1OaGJHeElZVzVrYkdWeVhDSTlQVDFyS1VKYmFDNW9ZVzVrYkdWeVhTZ3VMaTVvTG1GeVozTXBPMlZzYzJVZ2F5WW1TeWhjSW5kdmNtdGxjaUJ6Wlc1MElHRnVJSFZ1YTI1dmQyNGdZMjl0YldGdVpDQmNJaXRyS1gwN1lTNXZibVZ5Y205eVBXZzlQbnRMS0Z3aWQyOXlhMlZ5SUhObGJuUWdZVzRnWlhKeWIzSWhJRndpSzJndVptbHNaVzVoYldVclhDSTZYQ0lyYUM1c2FXNWxibThyWENJNklGd2lLMmd1YldWemMyRm5aU2s3ZEdoeWIzY2dhRHQ5TzBjbUppaGhMbTl1S0Z3aWJXVnpjMkZuWlZ3aUxHWjFibU4wYVc5dUtHZ3BlMkV1YjI1dFpYTnpZV2RsS0h0a1lYUmhPbWg5S1gwcExHRXViMjRvWENKbGNuSnZjbHdpTEdaMWJtTjBhVzl1S0dncGUyRXViMjVsY25KdmNpaG9LWDBwS1R0Y2JuWmhjaUJqUFZ0ZExHVTlXMXdpYjI1RmVHbDBYQ0lzWENKdmJrRmliM0owWENJc1hDSndjbWx1ZEZ3aUxGd2ljSEpwYm5SRmNuSmNJbDBzWmp0bWIzSW9aaUJ2WmlCbEtVSXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb1ppa21KbU11Y0hWemFDaG1LVHRoTG5CdmMzUk5aWE56WVdkbEtIdGpiV1E2WENKc2IyRmtYQ0lzYUdGdVpHeGxjbk02WXl4MWNteFBja0pzYjJJNlFpNXRZV2x1VTJOeWFYQjBWWEpzVDNKQ2JHOWlmSHhmYzJOeWFYQjBSR2x5TEhkaGMyMU5aVzF2Y25rNmJDeDNZWE50VFc5a2RXeGxPbk5oZlNsOUtTeENZanBtZFc1amRHbHZiaWhoS1h0aEtDbDlMSEZpT21aMWJtTjBhVzl1S0NsN2RtRnlJR0U5YkdFb1hDSnZjblF0ZDJGemJTMXphVzFrTFhSb2NtVmhaR1ZrTG5kdmNtdGxjaTVxYzF3aUtUdGhQVzVsZHlCWGIzSnJaWElvWVNrN1Z5NWhZaTV3ZFhOb0tHRXBmU3gwWWpwbWRXNWpkR2x2YmlncGV6QTlQVmN1WVdJdWJHVnVaM1JvSmlZb1Z5NXhZaWdwTEZjdVEySW9WeTVoWWxzd1hTa3BPM0psZEhWeWJpQlhMbUZpTG5CdmNDZ3BmWDA3UWk1UVZHaHlaV0ZrUFZjN2RtRnlJRlZoUFdFOVBudG1iM0lvT3pBOFlTNXNaVzVuZEdnN0tXRXVjMmhwWm5Rb0tTaENLWDA3WEc1Q0xtVnpkR0ZpYkdsemFGTjBZV05yVTNCaFkyVTlablZ1WTNScGIyNG9LWHQyWVhJZ1lUMVRZU2dwTEdJOWVpZ3BXMkVyTlRJK1BqSStQajR3WFR0aFBYb29LVnRoS3pVMlBqNHlQajQrTUYwN1ZtRW9ZaXhpTFdFcE8xZGhLR0lwZlR0bWRXNWpkR2x2YmlCUVlTaGhLWHRwWmloSUtYSmxkSFZ5YmlCWUtESXNNQ3hoS1R0UllTaGhLWDFDTG1sdWRtOXJaVVZ1ZEhKNVVHOXBiblE5Wm5WdVkzUnBiMjRvWVN4aUtYdGhQVmhoTG1Gd2NHeDVLRzUxYkd3c1cyRXNZbDBwTzNsaEtDay9WeTVyWWloaEtUcFpZU2hoS1gwN1puVnVZM1JwYjI0Z1dtRW9ZU2w3ZEdocGN5NW1ZajFoTFRJME8zUm9hWE11Y0dJOVpuVnVZM1JwYjI0b1lpbDdRU2dwVzNSb2FYTXVabUlyTkQ0K01qNCtQakJkUFdKOU8zUm9hWE11YjJJOVpuVnVZM1JwYjI0b1lpbDdRU2dwVzNSb2FYTXVabUlyT0Q0K01qNCtQakJkUFdKOU8zUm9hWE11WjJJOVpuVnVZM1JwYjI0b1lpeGpLWHQwYUdsekxtNWlLQ2s3ZEdocGN5NXdZaWhpS1R0MGFHbHpMbTlpS0dNcGZUdDBhR2x6TG01aVBXWjFibU4wYVc5dUtDbDdRU2dwVzNSb2FYTXVabUlyTVRZK1BqSStQajR3WFQwd2ZYMTJZWElnSkdFOU1DeGhZajB3TzF4dVpuVnVZM1JwYjI0Z1ltSW9ZU3hpTEdNc1pTbDdjbVYwZFhKdUlFZy9XQ2d6TERFc1lTeGlMR01zWlNrNlkySW9ZU3hpTEdNc1pTbDlablZ1WTNScGIyNGdZMklvWVN4aUxHTXNaU2w3WVQ0K1BqMHdPMkkrUGo0OU1EdGpQajQrUFRBN1pUNCtQajB3TzJsbUtGd2lkVzVrWldacGJtVmtYQ0k5UFhSNWNHVnZaaUJUYUdGeVpXUkJjbkpoZVVKMVptWmxjaWx5WlhSMWNtNGdTeWhjSWtOMWNuSmxiblFnWlc1MmFYSnZibTFsYm5RZ1pHOWxjeUJ1YjNRZ2MzVndjRzl5ZENCVGFHRnlaV1JCY25KaGVVSjFabVpsY2l3Z2NIUm9jbVZoWkhNZ1lYSmxJRzV2ZENCaGRtRnBiR0ZpYkdVaFhDSXBMRFk3ZG1GeUlHWTlXMTA3YVdZb1NDWW1NRDA5UFdZdWJHVnVaM1JvS1hKbGRIVnliaUJpWWloaExHSXNZeXhsS1R0aFBYdEhZanBqTEZoaE9tRXNjbUk2WlN4TllqcG1mVHR5WlhSMWNtNGdTRDhvWVM1UFlqMWNJbk53WVhkdVZHaHlaV0ZrWENJc2NHOXpkRTFsYzNOaFoyVW9ZU3htS1N3d0tUcE1ZU2hoS1gxbWRXNWpkR2x2YmlCa1lpaGhMR0lzWXlsN2NtVjBkWEp1SUVnL1dDZzBMREVzWVN4aUxHTXBPakI5Wm5WdVkzUnBiMjRnWldJb1lTeGlLWHRwWmloSUtYSmxkSFZ5YmlCWUtEVXNNU3hoTEdJcGZWeHVkbUZ5SUdaaVBXRTlQbnRtYjNJb2RtRnlJR0k5TUN4alBUQTdZenhoTG14bGJtZDBhRHNySzJNcGUzWmhjaUJsUFdFdVkyaGhja052WkdWQmRDaGpLVHN4TWpjK1BXVS9ZaXNyT2pJd05EYytQV1UvWWlzOU1qbzFOVEk1Tmp3OVpTWW1OVGN6TkRNK1BXVS9LR0lyUFRRc0t5dGpLVHBpS3owemZYSmxkSFZ5YmlCaWZTeG5ZajBvWVN4aUxHTXNaU2s5UG50alBqNCtQVEE3YVdZb0lTZ3dQR1VwS1hKbGRIVnliaUF3TzNaaGNpQm1QV003WlQxaksyVXRNVHRtYjNJb2RtRnlJR2c5TUR0b1BHRXViR1Z1WjNSb095c3JhQ2w3ZG1GeUlHczlZUzVqYUdGeVEyOWtaVUYwS0dncE8ybG1LRFUxTWprMlBEMXJKaVkxTnpNME16NDlheWw3ZG1GeUlIRTlZUzVqYUdGeVEyOWtaVUYwS0NzcmFDazdhejAyTlRVek5pc29LR3NtTVRBeU15azhQREV3S1h4eEpqRXdNak45YVdZb01USTNQajFyS1h0cFppaGpQajFsS1dKeVpXRnJPMkpiWXlzclBqNCtNRjA5YTMxbGJITmxlMmxtS0RJd05EYytQV3NwZTJsbUtHTXJNVDQ5WlNsaWNtVmhhenRpVzJNckt6NCtQakJkUFRFNU1ueHJQajQyZldWc2MyVjdhV1lvTmpVMU16VStQV3NwZTJsbUtHTXJNajQ5WlNsaWNtVmhhenRpVzJNckt6NCtQakJkUFRJeU5IeHJQajR4TW4xbGJITmxlMmxtS0dNck16NDlaU2xpY21WaGF6dGlXMk1yS3o0K1BqQmRQVEkwTUh4clBqNWNiakU0TzJKYll5c3JQajQrTUYwOU1USTRmR3MrUGpFeUpqWXpmV0piWXlzclBqNCtNRjA5TVRJNGZHcytQalltTmpOOVlsdGpLeXMrUGo0d1hUMHhNamg4YXlZMk0zMTlZbHRqUGo0K01GMDlNRHR5WlhSMWNtNGdZeTFtZlN4b1lqMG9ZU3hpTEdNcFBUNW5ZaWhoTEhZb0tTeGlMR01wTzJaMWJtTjBhVzl1SUdsaUtHRXNZaWw3YVdZb1NDbHlaWFIxY200Z1dDZzJMREVzWVN4aUtYMW1kVzVqZEdsdmJpQnFZaWhoTEdJc1l5bDdhV1lvU0NseVpYUjFjbTRnV0NnM0xERXNZU3hpTEdNcGZXWjFibU4wYVc5dUlHdGlLR0VzWWl4aktYdHlaWFIxY200Z1NEOVlLRGdzTVN4aExHSXNZeWs2TUgxbWRXNWpkR2x2YmlCc1lpaGhMR0lwZTJsbUtFZ3BjbVYwZFhKdUlGZ29PU3d4TEdFc1lpbDlablZ1WTNScGIyNGdiV0lvWVN4aUxHTXBlMmxtS0VncGNtVjBkWEp1SUZnb01UQXNNU3hoTEdJc1l5bDlablZ1WTNScGIyNGdibUlvWVN4aUxHTXNaU2w3YVdZb1NDbHlaWFIxY200Z1dDZ3hNU3d4TEdFc1lpeGpMR1VwZldaMWJtTjBhVzl1SUc5aUtHRXNZaXhqTEdVcGUybG1LRWdwY21WMGRYSnVJRmdvTVRJc01TeGhMR0lzWXl4bEtYMW1kVzVqZEdsdmJpQndZaWhoTEdJc1l5eGxLWHRwWmloSUtYSmxkSFZ5YmlCWUtERXpMREVzWVN4aUxHTXNaU2w5WEc1bWRXNWpkR2x2YmlCeFlpaGhLWHRwWmloSUtYSmxkSFZ5YmlCWUtERTBMREVzWVNsOVpuVnVZM1JwYjI0Z2NtSW9ZU3hpS1h0cFppaElLWEpsZEhWeWJpQllLREUxTERFc1lTeGlLWDFtZFc1amRHbHZiaUJ6WWloaExHSXNZeWw3YVdZb1NDbHlaWFIxY200Z1dDZ3hOaXd4TEdFc1lpeGpLWDEyWVhJZ2RHSTlZVDArZTJsbUtDRlFLWFJ5ZVh0cFppaGhLQ2tzSVhsaEtDa3BkSEo1ZTBnL1dXRW9VU2s2VVdFb1VTbDlZMkYwWTJnb1lpbDdZaUJwYm5OMFlXNWpaVzltSUVsaGZIeGNJblZ1ZDJsdVpGd2lQVDFpZkh4RktERXNZaWw5ZldOaGRHTm9LR0lwZTJJZ2FXNXpkR0Z1WTJWdlppQkpZWHg4WENKMWJuZHBibVJjSWowOVlueDhSU2d4TEdJcGZYMDdablZ1WTNScGIyNGdkV0lvWVNsN1lUNCtQajB3TzF3aVpuVnVZM1JwYjI1Y0lqMDlQWFI1Y0dWdlppQkJkRzl0YVdOekxrNWlKaVlvUVhSdmJXbGpjeTVPWWloNktDa3NZVDQrTWl4aEtTNTJZV3gxWlM1MGFHVnVLRlJoS1N4aEt6MHhNamdzUVhSdmJXbGpjeTV6ZEc5eVpTaDZLQ2tzWVQ0K01pd3hLU2w5UWk1ZlgyVnRjMk55YVhCMFpXNWZkR2h5WldGa1gyMWhhV3hpYjNoZllYZGhhWFE5ZFdJN1puVnVZM1JwYjI0Z1ZHRW9LWHQyWVhJZ1lUMVRZU2dwTzJFbUppaDFZaWhoS1N4MFlpZ29LVDArZG1Jb0tTa3BmVUl1WTJobFkydE5ZV2xzWW05NFBWUmhPMXh1ZG1GeUlGazlZVDArTUQwOVBXRWxOQ1ltS0RBaFBUMWhKVEV3TUh4OE1EMDlQV0VsTkRBd0tTeDNZajFiTUN3ek1TdzJNQ3c1TVN3eE1qRXNNVFV5TERFNE1pd3lNVE1zTWpRMExESTNOQ3d6TURVc016TTFYU3g0WWoxYk1Dd3pNU3cxT1N3NU1Dd3hNakFzTVRVeExERTRNU3d5TVRJc01qUXpMREkzTXl3ek1EUXNNek0wWFR0bWRXNWpkR2x2YmlCNVlpaGhMR0lzWXl4bExHWXNhQ3hyTEhFcGUzSmxkSFZ5YmlCSVAxZ29NVGNzTVN4aExHSXNZeXhsTEdZc2FDeHJMSEVwT2kwMU1uMW1kVzVqZEdsdmJpQjZZaWhoTEdJc1l5eGxMR1lzYUN4cktYdHBaaWhJS1hKbGRIVnliaUJZS0RFNExERXNZU3hpTEdNc1pTeG1MR2dzYXlsOWRtRnlJRUppUFdFOVBudDJZWElnWWoxbVlpaGhLU3N4TEdNOVFXSW9ZaWs3WXlZbWFHSW9ZU3hqTEdJcE8zSmxkSFZ5YmlCamZTeERZajFiWFN4RVlqMG9ZU3hpS1QwK2UwTmlMbXhsYm1kMGFEMHdPM1poY2lCak8yWnZjaWhpUGo0OU1qdGpQWFlvS1Z0aEt5cytQajR3WFRzcFlpczlNVEExSVQxakptSXNRMkl1Y0hWemFDZ3hNRFU5UFdNL2VpZ3BXMkkrUGo0d1hUcGtZU2dwVzJJckt6NCtQakZkS1N3cksySTdjbVYwZFhKdUlFTmlmU3hHWWoxaFBUNTdkbUZ5SUdJOVJXSW9LVHRoUFdFb0tUdFhZU2hpS1R0eVpYUjFjbTRnWVgwN1hHNW1kVzVqZEdsdmJpQllLR0VzWWlsN2RtRnlJR005WVhKbmRXMWxiblJ6TG14bGJtZDBhQzB5TEdVOVlYSm5kVzFsYm5Sek8zSmxkSFZ5YmlCR1lpZ29LVDArZTJadmNpaDJZWElnWmoxSFlpZzRLbU1wTEdnOVpqNCtNeXhyUFRBN2F6eGpPMnNyS3lsN2RtRnlJSEU5WlZzeUsydGRPMlJoS0NsYmFDdHJQajQrTUYwOWNYMXlaWFIxY200Z1NHSW9ZU3hqTEdZc1lpbDlLWDFjYm5aaGNpQkpZajFiWFN4S1lqMTdmU3hNWWowb0tUMCtlMmxtS0NGTFlpbDdkbUZ5SUdFOWUxVlRSVkk2WENKM1pXSmZkWE5sY2x3aUxFeFBSMDVCVFVVNlhDSjNaV0pmZFhObGNsd2lMRkJCVkVnNlhDSXZYQ0lzVUZkRU9sd2lMMXdpTEVoUFRVVTZYQ0l2YUc5dFpTOTNaV0pmZFhObGNsd2lMRXhCVGtjNktGd2liMkpxWldOMFhDSTlQWFI1Y0dWdlppQnVZWFpwWjJGMGIzSW1KbTVoZG1sbllYUnZjaTVzWVc1bmRXRm5aWE1tSm01aGRtbG5ZWFJ2Y2k1c1lXNW5kV0ZuWlhOYk1GMThmRndpUTF3aUtTNXlaWEJzWVdObEtGd2lMVndpTEZ3aVgxd2lLU3RjSWk1VlZFWXRPRndpTEY4NmFtRjhmRndpTGk5MGFHbHpMbkJ5YjJkeVlXMWNJbjBzWWp0bWIzSW9ZaUJwYmlCS1lpbDJiMmxrSURBOVBUMUtZbHRpWFQ5a1pXeGxkR1VnWVZ0aVhUcGhXMkpkUFVwaVcySmRPM1poY2lCalBWdGRPMlp2Y2loaUlHbHVJR0VwWXk1d2RYTm9LR0FrZTJKOVBTUjdZVnRpWFgxZ0tUdExZajFqZlhKbGRIVnliaUJMWW4wc1MySTdYRzVtZFc1amRHbHZiaUJOWWloaExHSXBlMmxtS0VncGNtVjBkWEp1SUZnb01Ua3NNU3hoTEdJcE8yRStQajQ5TUR0aVBqNCtQVEE3ZG1GeUlHTTlNRHRNWWlncExtWnZja1ZoWTJnb1puVnVZM1JwYjI0b1pTeG1LWHQyWVhJZ2FEMWlLMk03WmoxQktDbGJZU3MwS21ZK1BqSStQajR3WFQxb08yWnZjaWhvUFRBN2FEeGxMbXhsYm1kMGFEc3JLMmdwWkNncFcyWXJLejQrTUQ0K1BqQmRQV1V1WTJoaGNrTnZaR1ZCZENob0tUdGtLQ2xiWmo0K01ENCtQakJkUFRBN1l5czlaUzVzWlc1bmRHZ3JNWDBwTzNKbGRIVnliaUF3ZldaMWJtTjBhVzl1SUU1aUtHRXNZaWw3YVdZb1NDbHlaWFIxY200Z1dDZ3lNQ3d4TEdFc1lpazdZVDQrUGowd08ySStQajQ5TUR0MllYSWdZejFNWWlncE8wRW9LVnRoUGo0eVBqNCtNRjA5WXk1c1pXNW5kR2c3ZG1GeUlHVTlNRHRqTG1admNrVmhZMmdvWm5WdVkzUnBiMjRvWmlsN1pTczlaaTVzWlc1bmRHZ3JNWDBwTzBFb0tWdGlQajR5UGo0K01GMDlaVHR5WlhSMWNtNGdNSDFtZFc1amRHbHZiaUJQWWloaEtYdHlaWFIxY200Z1NEOVlLREl4TERFc1lTazZOVEo5Wm5WdVkzUnBiMjRnVUdJb1lTeGlMR01zWlNsN2NtVjBkWEp1SUVnL1dDZ3lNaXd4TEdFc1lpeGpMR1VwT2pVeWZWeHVablZ1WTNScGIyNGdVV0lvWVN4aUxHTXNaU3htS1h0eVpYUjFjbTRnU0Q5WUtESXpMREVzWVN4aUxHTXNaU3htS1RvM01IMTJZWElnVW1JOVcyNTFiR3dzVzEwc1cxMWRPMloxYm1OMGFXOXVJRlJpS0dFc1lpeGpMR1VwZTJsbUtFZ3BjbVYwZFhKdUlGZ29NalFzTVN4aExHSXNZeXhsS1R0aVBqNCtQVEE3WXo0K1BqMHdPMlUrUGo0OU1EdG1iM0lvZG1GeUlHWTlNQ3hvUFRBN2FEeGpPMmdyS3lsN2RtRnlJR3M5UVNncFcySStQakkrUGo0d1hTeHhQVUVvS1Z0aUt6UStQakkrUGo0d1hUdGlLejA0TzJadmNpaDJZWElnYmowd08yNDhjVHR1S3lzcGUzWmhjaUJ0UFhZb0tWdHJLMjQrUGo0d1hTeHlQVkppVzJGZE96QTlQVDF0Zkh3eE1EMDlQVzAvS0NneFBUMDlZVDl5WVRwTEtTaE9ZU2h5TERBcEtTeHlMbXhsYm1kMGFEMHdLVHB5TG5CMWMyZ29iU2w5WmlzOWNYMUJLQ2xiWlQ0K01qNCtQakJkUFdZN2NtVjBkWEp1SURCOWRtRnlJRlZpUFZzek1Td3lPU3d6TVN3ek1Dd3pNU3d6TUN3ek1Td3pNU3d6TUN3ek1Td3pNQ3d6TVYwc1ZtSTlXek14TERJNExETXhMRE13TERNeExETXdMRE14TERNeExETXdMRE14TERNd0xETXhYVHRtZFc1amRHbHZiaUJYWWloaEtYdDJZWElnWWoxQmNuSmhlU2htWWloaEtTc3hLVHRuWWloaExHSXNNQ3hpTG14bGJtZDBhQ2s3Y21WMGRYSnVJR0o5WEc1MllYSWdXR0k5S0dFc1lpazlQbnRrS0NrdWMyVjBLR0VzWWo0K1BqQXBmVHRjYm1aMWJtTjBhVzl1SUZsaUtHRXNZaXhqTEdVcGUyWjFibU4wYVc5dUlHWW9aeXgxTEhrcGUyWnZjaWhuUFZ3aWJuVnRZbVZ5WENJOVBYUjVjR1Z2WmlCblAyY3VkRzlUZEhKcGJtY29LVHBuZkh4Y0lsd2lPMmN1YkdWdVozUm9QSFU3S1djOWVWc3dYU3RuTzNKbGRIVnliaUJuZldaMWJtTjBhVzl1SUdnb1p5eDFLWHR5WlhSMWNtNGdaaWhuTEhVc1hDSXdYQ0lwZldaMWJtTjBhVzl1SUdzb1p5eDFLWHRtZFc1amRHbHZiaUI1S0ZOaUtYdHlaWFIxY200Z01ENVRZajh0TVRvd1BGTmlQekU2TUgxMllYSWdUenN3UFQwOUtFODllU2huTG1kbGRFWjFiR3haWldGeUtDa3RkUzVuWlhSR2RXeHNXV1ZoY2lncEtTa21KakE5UFQwb1R6MTVLR2N1WjJWMFRXOXVkR2dvS1MxMUxtZGxkRTF2Ym5Sb0tDa3BLU1ltS0U4OWVTaG5MbWRsZEVSaGRHVW9LUzExTG1kbGRFUmhkR1VvS1NrcE8zSmxkSFZ5YmlCUGZXWjFibU4wYVc5dUlIRW9aeWw3YzNkcGRHTm9LR2N1WjJWMFJHRjVLQ2twZTJOaGMyVWdNRHB5WlhSMWNtNGdibVYzSUVSaGRHVW9aeTVuWlhSR2RXeHNXV1ZoY2lncExURXNNVEVzTWprcE8yTmhjMlVnTVRweVpYUjFjbTRnWnp0allYTmxJREk2Y21WMGRYSnVJRzVsZHlCRVlYUmxLR2N1WjJWMFJuVnNiRmxsWVhJb0tTd3dMRE1wTzJOaGMyVWdNenB5WlhSMWNtNGdibVYzSUVSaGRHVW9aeTVuWlhSR2RXeHNXV1ZoY2lncExGeHVNQ3d5S1R0allYTmxJRFE2Y21WMGRYSnVJRzVsZHlCRVlYUmxLR2N1WjJWMFJuVnNiRmxsWVhJb0tTd3dMREVwTzJOaGMyVWdOVHB5WlhSMWNtNGdibVYzSUVSaGRHVW9aeTVuWlhSR2RXeHNXV1ZoY2lncExURXNNVEVzTXpFcE8yTmhjMlVnTmpweVpYUjFjbTRnYm1WM0lFUmhkR1VvWnk1blpYUkdkV3hzV1dWaGNpZ3BMVEVzTVRFc016QXBmWDFtZFc1amRHbHZiaUJ1S0djcGUzWmhjaUIxUFdjdVdtRTdabTl5S0djOWJtVjNJRVJoZEdVb0tHNWxkeUJFWVhSbEtHY3VKR0VyTVRrd01Dd3dMREVwS1M1blpYUlVhVzFsS0NrcE96QThkVHNwZTNaaGNpQjVQV2N1WjJWMFRXOXVkR2dvS1N4UFBTaFpLR2N1WjJWMFJuVnNiRmxsWVhJb0tTay9WV0k2Vm1JcFczbGRPMmxtS0hVK1R5MW5MbWRsZEVSaGRHVW9LU2wxTFQxUExXY3VaMlYwUkdGMFpTZ3BLekVzWnk1elpYUkVZWFJsS0RFcExERXhQbmsvWnk1elpYUk5iMjUwYUNoNUt6RXBPaWhuTG5ObGRFMXZiblJvS0RBcExHY3VjMlYwUm5Wc2JGbGxZWElvWnk1blpYUkdkV3hzV1dWaGNpZ3BLekVwS1R0bGJITmxlMmN1YzJWMFJHRjBaU2huTG1kbGRFUmhkR1VvS1N0MUtUdGljbVZoYTMxOWVUMXVaWGNnUkdGMFpTaG5MbWRsZEVaMWJHeFpaV0Z5S0Nrck1Td3dMRFFwTzNVOWNTaHVaWGNnUkdGMFpTaG5MbWRsZEVaMWJHeFpaV0Z5S0Nrc1hHNHdMRFFwS1R0NVBYRW9lU2s3Y21WMGRYSnVJREErUFdzb2RTeG5LVDh3UGoxcktIa3NaeWsvWnk1blpYUkdkV3hzV1dWaGNpZ3BLekU2Wnk1blpYUkdkV3hzV1dWaGNpZ3BPbWN1WjJWMFJuVnNiRmxsWVhJb0tTMHhmV0UrUGo0OU1EdGlQajQrUFRBN1l6NCtQajB3TzJVK1BqNDlNRHQyWVhJZ2JUMTZLQ2xiWlNzME1ENCtNajQrUGpCZE8yVTllMHRpT25vb0tWdGxQajR5UGo0K01GMHNTbUk2ZWlncFcyVXJORDQrTWo0K1BqQmRMR05pT25vb0tWdGxLemcrUGpJK1BqNHdYU3hwWWpwNktDbGJaU3N4TWo0K01qNCtQakJkTEdWaU9ub29LVnRsS3pFMlBqNHlQajQrTUYwc0pHRTZlaWdwVzJVck1qQStQakkrUGo0d1hTeFhZVHA2S0NsYlpTc3lORDQrTWo0K1BqQmRMRnBoT25vb0tWdGxLekk0UGo0eVBqNCtNRjBzVkdJNmVpZ3BXMlVyTXpJK1BqSStQajR3WFN4SllqcDZLQ2xiWlNzek5qNCtNajQrUGpCZExFeGlPbTAvVmlodEtUcGNJbHdpZlR0alBWWW9ZeWs3YlQxN1hDSWxZMXdpT2x3aUpXRWdKV0lnSldRZ0pVZzZKVTA2SlZNZ0pWbGNJaXhjSWlWRVhDSTZYQ0lsYlM4bFpDOGxlVndpTEZ3aUpVWmNJanBjSWlWWkxTVnRMU1ZrWENJc1hDSWxhRndpT2x3aUpXSmNJaXhjSWlWeVhDSTZYQ0lsU1RvbFRUb2xVeUFsY0Z3aUxGd2lKVkpjSWpwY0lpVklPaVZOWENJc1hDSWxWRndpT2x3aUpVZzZKVTA2SlZOY0lpeGNJaVY0WENJNlhDSWxiUzhsWkM4bGVWd2lMRndpSlZoY0lqcGNJaVZJT2lWTk9pVlRYQ0lzWEc1Y0lpVkZZMXdpT2x3aUpXTmNJaXhjSWlWRlExd2lPbHdpSlVOY0lpeGNJaVZGZUZ3aU9sd2lKVzB2SldRdkpYbGNJaXhjSWlWRldGd2lPbHdpSlVnNkpVMDZKVk5jSWl4Y0lpVkZlVndpT2x3aUpYbGNJaXhjSWlWRldWd2lPbHdpSlZsY0lpeGNJaVZQWkZ3aU9sd2lKV1JjSWl4Y0lpVlBaVndpT2x3aUpXVmNJaXhjSWlWUFNGd2lPbHdpSlVoY0lpeGNJaVZQU1Z3aU9sd2lKVWxjSWl4Y0lpVlBiVndpT2x3aUpXMWNJaXhjSWlWUFRWd2lPbHdpSlUxY0lpeGNJaVZQVTF3aU9sd2lKVk5jSWl4Y0lpVlBkVndpT2x3aUpYVmNJaXhjSWlWUFZWd2lPbHdpSlZWY0lpeGNJaVZQVmx3aU9sd2lKVlpjSWl4Y0lpVlBkMXdpT2x3aUpYZGNJaXhjSWlWUFYxd2lPbHdpSlZkY0lpeGNJaVZQZVZ3aU9sd2lKWGxjSW4wN1ptOXlLSFpoY2lCeUlHbHVJRzBwWXoxakxuSmxjR3hoWTJVb2JtVjNJRkpsWjBWNGNDaHlMRndpWjF3aUtTeHRXM0pkS1R0MllYSWdkejFjSWxOMWJtUmhlU0JOYjI1a1lYa2dWSFZsYzJSaGVTQlhaV1J1WlhOa1lYa2dWR2gxY25Oa1lYa2dSbkpwWkdGNUlGTmhkSFZ5WkdGNVhDSXVjM0JzYVhRb1hDSWdYQ0lwTEhnOVhDSktZVzUxWVhKNUlFWmxZbkoxWVhKNUlFMWhjbU5vSUVGd2NtbHNJRTFoZVNCS2RXNWxJRXAxYkhrZ1FYVm5kWE4wSUZObGNIUmxiV0psY2lCUFkzUnZZbVZ5SUU1dmRtVnRZbVZ5SUVSbFkyVnRZbVZ5WENJdWMzQnNhWFFvWENJZ1hDSXBPMjA5ZTF3aUpXRmNJanBuUFQ1M1cyY3VWMkZkTG5OMVluTjBjbWx1Wnlnd0xETXBMRndpSlVGY0lqcG5QVDUzVzJjdVYyRmRMRndpSldKY0lqcG5QVDVjYm5oYlp5NWxZbDB1YzNWaWMzUnlhVzVuS0RBc015a3NYQ0lsUWx3aU9tYzlQbmhiWnk1bFlsMHNYQ0lsUTF3aU9tYzlQbWdvS0djdUpHRXJNVGt3TUNrdk1UQXdmREFzTWlrc1hDSWxaRndpT21jOVBtZ29aeTVwWWl3eUtTeGNJaVZsWENJNlp6MCtaaWhuTG1saUxESXNYQ0lnWENJcExGd2lKV2RjSWpwblBUNXVLR2NwTG5SdlUzUnlhVzVuS0NrdWMzVmljM1J5YVc1bktESXBMRndpSlVkY0lqcG5QVDV1S0djcExGd2lKVWhjSWpwblBUNW9LR2N1WTJJc01pa3NYQ0lsU1Z3aU9tYzlQbnRuUFdjdVkySTdNRDA5Wno5blBURXlPakV5UEdjbUppaG5MVDB4TWlrN2NtVjBkWEp1SUdnb1p5d3lLWDBzWENJbGFsd2lPbWM5UG50bWIzSW9kbUZ5SUhVOU1DeDVQVEE3ZVR3OVp5NWxZaTB4TzNVclBTaFpLR2N1SkdFck1Ua3dNQ2svVldJNlZtSXBXM2tySzEwcE8zSmxkSFZ5YmlCb0tHY3VhV0lyZFN3ektYMHNYQ0lsYlZ3aU9tYzlQbWdvWnk1bFlpc3hMRElwTEZ3aUpVMWNJanBuUFQ1b0tHY3VTbUlzTWlrc1hDSWxibHdpT2lncFBUNWNJbHhjYmx3aUxGd2lKWEJjSWpwblBUNHdQRDFuTG1OaUppWXhNajVuTG1OaVAxd2lRVTFjSWpwY0lsQk5YQ0lzWENJbFUxd2lPbWM5UG1nb1p5NUxZaXd5S1N4Y0lpVjBYQ0k2S0NrOVBsd2lYRngwWENJc1hDSWxkVndpT21jOVBtY3VWMkY4ZkRjc1hDSWxWVndpT21jOVBtZ29UV0YwYUM1bWJHOXZjaWdvWnk1YVlTczNMV2N1VjJFcEx6Y3BMRElwTEZ3aUpWWmNJanBuUFQ1Y2JudDJZWElnZFQxTllYUm9MbVpzYjI5eUtDaG5MbHBoS3pjdEtHY3VWMkVyTmlrbE55a3ZOeWs3TWo0OUtHY3VWMkVyTXpjeExXY3VXbUV0TWlrbE55WW1kU3NyTzJsbUtIVXBOVE05UFhVbUppaDVQU2huTGxkaEt6TTNNUzFuTGxwaEtTVTNMRFE5UFhsOGZETTlQWGttSmxrb1p5NGtZU2w4ZkNoMVBURXBLVHRsYkhObGUzVTlOVEk3ZG1GeUlIazlLR2N1VjJFck55MW5MbHBoTFRFcEpUYzdLRFE5UFhsOGZEVTlQWGttSmxrb1p5NGtZU1UwTURBdE1Ta3BKaVoxS3l0OWNtVjBkWEp1SUdnb2RTd3lLWDBzWENJbGQxd2lPbWM5UG1jdVYyRXNYQ0lsVjF3aU9tYzlQbWdvVFdGMGFDNW1iRzl2Y2lnb1p5NWFZU3MzTFNobkxsZGhLellwSlRjcEx6Y3BMRElwTEZ3aUpYbGNJanBuUFQ0b1p5NGtZU3N4T1RBd0tTNTBiMU4wY21sdVp5Z3BMbk4xWW5OMGNtbHVaeWd5S1N4Y0lpVlpYQ0k2WnowK1p5NGtZU3N4T1RBd0xGd2lKWHBjSWpwblBUNTdaejFuTGtsaU8zWmhjaUIxUFRBOFBXYzdaejFOWVhSb0xtRmljeWhuS1M4Mk1EdHlaWFIxY200b2RUOWNJaXRjSWpwY0lpMWNJaWtyVTNSeWFXNW5LRndpTURBd01Gd2lLeWhuTHpZd0tqRXdNQ3RuSlRZd0tTa3VjMnhwWTJVb0xUUXBmU3hjSWlWYVhDSTZaejArWnk1TVlpeGNJaVVsWENJNktDazlQbHdpSlZ3aWZUdGpQV011Y21Wd2JHRmpaU2d2SlNVdlp5eGNJbHhjZURBd1hGeDRNREJjSWlrN1ptOXlLSElnYVc0Z2JTbGpMbWx1WTJ4MVpHVnpLSElwSmlaY2JpaGpQV011Y21Wd2JHRmpaU2h1WlhjZ1VtVm5SWGh3S0hJc1hDSm5YQ0lwTEcxYmNsMG9aU2twS1R0alBXTXVjbVZ3YkdGalpTZ3ZYRnd3WEZ3d0wyY3NYQ0lsWENJcE8zSTlWMklvWXlrN2FXWW9jaTVzWlc1bmRHZytZaWx5WlhSMWNtNGdNRHRZWWloeUxHRXBPM0psZEhWeWJpQnlMbXhsYm1kMGFDMHhmV1oxYm1OMGFXOXVJRnBpS0dFcGUzUnllWHRoS0NsOVkyRjBZMmdvWWlsN1RTaGlLWDE5Wm5WdVkzUnBiMjRnSkdJb1lTbDdkbUZ5SUdJOWUzMHNZenRtYjNJb1l5QnBiaUJoS1NobWRXNWpkR2x2YmlobEtYdDJZWElnWmoxaFcyVmRPMkpiWlYwOVhDSm1kVzVqZEdsdmJsd2lQVDEwZVhCbGIyWWdaajltZFc1amRHbHZiaWdwZTJGakxuQjFjMmdvWlNrN2RISjVlM0psZEhWeWJpQm1MbUZ3Y0d4NUtHNTFiR3dzWVhKbmRXMWxiblJ6S1gxbWFXNWhiR3g1ZTFCOGZDaGhZeTV3YjNBb0tUMDlQV1Y4ZkUwb0tTeEVKaVl4UFQwOVdpWW1NRDA5UFdGakxteGxibWQwYUNZbUtGbzlNQ3g0WVNzOU1TeGFZaWhpWXlrc1hDSjFibVJsWm1sdVpXUmNJaUU5ZEhsd1pXOW1JRVpwWW1WeWN5WW1SbWxpWlhKekxsVmlLQ2twS1gxOU9tWjlLU2hqS1R0eVpYUjFjbTRnWW4xMllYSWdXajB3TEVROWJuVnNiQ3hqWXowd0xHRmpQVnRkTEdSalBYdDlMR1ZqUFh0OUxHWmpQVEFzWjJNOWJuVnNiQ3hvWXoxYlhUdGNibVoxYm1OMGFXOXVJR2hoS0NsN2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaGhMR0lwUFQ1N1oyTTllM0psYzI5c2RtVTZZU3h5WldwbFkzUTZZbjE5S1gxbWRXNWpkR2x2YmlCcFl5Z3BlM1poY2lCaFBVRmlLRFkxTlRRNEtTeGlQV0VyTVRJN1FTZ3BXMkUrUGpJK1BqNHdYVDFpTzBFb0tWdGhLelErUGpJK1BqNHdYVDFpS3pZMU5UTTJPMkk5WVdOYk1GMDdkbUZ5SUdNOVpHTmJZbDA3ZG05cFpDQXdQVDA5WXlZbUtHTTlabU1yS3l4a1kxdGlYVDFqTEdWalcyTmRQV0lwTzJJOVl6dDZLQ2xiWVNzNFBqNHlQajQrTUYwOVlqdHlaWFIxY200Z1lYMW1kVzVqZEdsdmJpQnFZeWdwZTNaaGNpQmhQWG9vS1Z0RUt6ZytQakkrUGo0d1hUdGhQVTViWldOYllWMWRPeTB0ZUdFN2NtVjBkWEp1SUdFb0tYMWNibVoxYm1OMGFXOXVJR3RqS0dFcGUybG1LQ0ZRS1h0cFppZ3dQVDA5V2lsN2RtRnlJR0k5SVRFc1l6MGhNVHRoS0NobFBUQXBQVDU3YVdZb0lWQW1KaWhqWXoxbExHSTlJVEFzWXlrcGUxbzlNanRhWWlnb0tUMCtiR01vUkNrcE8xd2lkVzVrWldacGJtVmtYQ0loUFhSNWNHVnZaaUJDY205M2MyVnlKaVpDY205M2MyVnlMbWhpTG5OaUppWkNjbTkzYzJWeUxtaGlMbkpsYzNWdFpTZ3BPMlU5SVRFN2RISjVlM1poY2lCbVBXcGpLQ2w5WTJGMFkyZ29jU2w3WmoxeExHVTlJVEI5ZG1GeUlHZzlJVEU3YVdZb0lVUXBlM1poY2lCclBXZGpPMnNtSmlobll6MXVkV3hzTENobFAyc3VjbVZxWldOME9tc3VjbVZ6YjJ4MlpTa29aaWtzYUQwaE1DbDlhV1lvWlNZbUlXZ3BkR2h5YjNjZ1pqdDlmU2s3WXowaE1EdGlmSHdvV2oweExFUTlhV01vS1N4Y0luVnVaR1ZtYVc1bFpGd2lJVDEwZVhCbGIyWWdRbkp2ZDNObGNpWW1Rbkp2ZDNObGNpNW9ZaTV6WWlZbVFuSnZkM05sY2k1b1lpNXdZWFZ6WlNncExGcGlLQ2dwUFQ1dFl5aEVLU2twZldWc2MyVWdNajA5UFZvL0tGbzlNQ3hhWWlodVl5a3NiMk1vUkNrc1JEMXVkV3hzTEdoakxtWnZja1ZoWTJnb1pUMCtkR0lvWlNrcEtUcE5LR0JwYm5aaGJHbGtJSE4wWVhSbE9pQWtlMXA5WUNrN2NtVjBkWEp1SUdOamZYMWNibVoxYm1OMGFXOXVJSEJqS0dFcGUzSmxkSFZ5YmlCcll5aGlQVDU3WVNncExuUm9aVzRvWWlsOUtYMVhMbWRpS0NrN1hHNTJZWElnY1dNOVcyNTFiR3dzVDJFc1VHRXNZbUlzWkdJc1pXSXNhV0lzYW1Jc2EySXNiR0lzYldJc2JtSXNiMklzY0dJc2NXSXNjbUlzYzJJc2VXSXNlbUlzVFdJc1RtSXNUMklzVUdJc1VXSXNWR0pkTEhSalBYdHlPbVoxYm1OMGFXOXVLR0VzWWl4aktYdHlaWFIxY200Z2NHTW9ZWE41Ym1Nb0tUMCtlMkYzWVdsMElFSXVlR0lvWVN4aUxHTXBmU2w5TEdJNlpuVnVZM1JwYjI0b1lTeGlMR01wZTJFK1BqNDlNRHNvYm1WM0lGcGhLR0VwS1M1bllpaGlQajQrTUN4alBqNCtNQ2s3SkdFOVlUdGhZaXNyTzNSb2NtOTNJQ1JoTzMwc1R6cG1kVzVqZEdsdmJpaGhLWHR5WXloaFBqNCtNQ3doUml3eExDRnJZU3d4TXpFd056SXNJVEVwTzFjdWJHSW9LWDBzYkRwbWRXNWpkR2x2YmloaEtYdGhQajQrUFRBN1NEOXdiM04wVFdWemMyRm5aU2g3WTIxa09sd2lZMnhsWVc1MWNGUm9jbVZoWkZ3aUxIUm9jbVZoWkRwaGZTazZTMkVvWVNsOUxFazZZMklzYVRwa1lpeFZPbVZpTEVVNmFXSXNSenBxWWl4V09tdGlMRk02YkdJc1N6cHRZaXhTT201aUxIQTZiMklzUmpwd1lpeERPbkZpTEZRNmNtSXNSRHB6WWl4eE9pZ3BQVDRoTUN4Qk9tWjFibU4wYVc5dUtHRXNZaWw3WVQ0K1BqMHdPMkU5UFdJK1BqNHdQM05sZEZScGJXVnZkWFFvS0NrOVBsUmhLQ2twT2tnL2NHOXpkRTFsYzNOaFoyVW9lM1JoY21kbGRGUm9jbVZoWkRwaExGeHVZMjFrT2x3aVkyaGxZMnROWVdsc1ltOTRYQ0o5S1Rvb1lUMVhMbEZoVzJGZEtTWW1ZUzV3YjNOMFRXVnpjMkZuWlNoN1kyMWtPbHdpWTJobFkydE5ZV2xzWW05NFhDSjlLWDBzVFRwbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmkweGZTeE9PblZpTEZnNlpuVnVZM1JwYjI0b1lTbDdSeVltVnk1UllWdGhQajQrTUYwdWNtVm1LQ2w5TEhVNlpuVnVZM1JwYjI0b1lTeGlMR01wZTJFOVlpc3lNRGszTVRVeVBqNCtNRHcwTVRrME16QTFMU0VoWVQ4b1lUNCtQakFwS3pReU9UUTVOamN5T1RZcVlqcE9ZVTQ3WXo0K1BqMHdPMkU5Ym1WM0lFUmhkR1VvTVVVekttRXBPM29vS1Z0alBqNHlQajQrTUYwOVlTNW5aWFJWVkVOVFpXTnZibVJ6S0NrN2VpZ3BXMk1yTkQ0K01qNCtQakJkUFdFdVoyVjBWVlJEVFdsdWRYUmxjeWdwTzNvb0tWdGpLemcrUGpJK1BqNHdYVDFoTG1kbGRGVlVRMGh2ZFhKektDazdlaWdwVzJNck1USStQakkrUGo0d1hUMWhMbWRsZEZWVVEwUmhkR1VvS1R0NktDbGJZeXN4Tmo0K01qNCtQakJkUFdFdVoyVjBWVlJEVFc5dWRHZ29LVHQ2S0NsYll5c3lNRDQrTWo0K1BqQmRQV0V1WjJWMFZWUkRSblZzYkZsbFlYSW9LUzB4T1RBd08zb29LVnRqS3pJMFBqNHlQajQrTUYwOVlTNW5aWFJWVkVORVlYa29LVHRoUFNoaExtZGxkRlJwYldVb0tTMUVZWFJsTGxWVVF5aGhMbWRsZEZWVVEwWjFiR3haWldGeUtDa3NYRzR3TERFc01Dd3dMREFzTUNrcEx6ZzJORVUxZkRBN2VpZ3BXMk1yTWpnK1BqSStQajR3WFQxaGZTeDJPbVoxYm1OMGFXOXVLR0VzWWl4aktYdGhQV0lyTWpBNU56RTFNajQrUGpBOE5ERTVORE13TlMwaElXRS9LR0UrUGo0d0tTczBNamswT1RZM01qazJLbUk2VG1GT08yTStQajQ5TUR0aFBXNWxkeUJFWVhSbEtERkZNeXBoS1R0NktDbGJZejQrTWo0K1BqQmRQV0V1WjJWMFUyVmpiMjVrY3lncE8zb29LVnRqS3pRK1BqSStQajR3WFQxaExtZGxkRTFwYm5WMFpYTW9LVHQ2S0NsYll5czRQajR5UGo0K01GMDlZUzVuWlhSSWIzVnljeWdwTzNvb0tWdGpLekV5UGo0eVBqNCtNRjA5WVM1blpYUkVZWFJsS0NrN2VpZ3BXMk1yTVRZK1BqSStQajR3WFQxaExtZGxkRTF2Ym5Sb0tDazdlaWdwVzJNck1qQStQakkrUGo0d1hUMWhMbWRsZEVaMWJHeFpaV0Z5S0NrdE1Ua3dNRHQ2S0NsYll5c3lORDQrTWo0K1BqQmRQV0V1WjJWMFJHRjVLQ2s3WWowb1dTaGhMbWRsZEVaMWJHeFpaV0Z5S0NrcFAzZGlPbmhpS1Z0aExtZGxkRTF2Ym5Sb0tDbGRLMkV1WjJWMFJHRjBaU2dwTFRGOE1EdDZLQ2xiWXlzeU9ENCtNajQrUGpCZFBXSTdlaWdwVzJNck16WStQakkrUGo0d1hUMHRLRFl3S21FdVoyVjBWR2x0WlhwdmJtVlBabVp6WlhRb0tTazdZajBvYm1WM0lFUmhkR1VvWVM1blpYUkdkV3hzV1dWaGNpZ3BMRnh1Tml3eEtTa3VaMlYwVkdsdFpYcHZibVZQWm1aelpYUW9LVHQyWVhJZ1pUMG9ibVYzSUVSaGRHVW9ZUzVuWlhSR2RXeHNXV1ZoY2lncExEQXNNU2twTG1kbGRGUnBiV1Y2YjI1bFQyWm1jMlYwS0NrN1lUMG9ZaUU5WlNZbVlTNW5aWFJVYVcxbGVtOXVaVTltWm5ObGRDZ3BQVDFOWVhSb0xtMXBiaWhsTEdJcEtYd3dPM29vS1Z0akt6TXlQajR5UGo0K01GMDlZWDBzZHpwbWRXNWpkR2x2YmloaEtYdGhQajQrUFRBN2RtRnlJR0k5Ym1WM0lFUmhkR1VvZWlncFcyRXJNakErUGpJK1BqNHdYU3N4T1RBd0xIb29LVnRoS3pFMlBqNHlQajQrTUYwc2VpZ3BXMkVyTVRJK1BqSStQajR3WFN4NktDbGJZU3M0UGo0eVBqNCtNRjBzZWlncFcyRXJORDQrTWo0K1BqQmRMSG9vS1Z0aFBqNHlQajQrTUYwc01Da3NZejE2S0NsYllTc3pNajQrTWo0K1BqQmRMR1U5WWk1blpYUlVhVzFsZW05dVpVOW1abk5sZENncExHWTlLRzVsZHlCRVlYUmxLR0l1WjJWMFJuVnNiRmxsWVhJb0tTdzJMREVwS1M1blpYUlVhVzFsZW05dVpVOW1abk5sZENncExHZzlLRzVsZHlCRVlYUmxLR0l1WjJWMFJuVnNiRmxsWVhJb0tTd3dMREVwS1M1blpYUlVhVzFsZW05dVpVOW1abk5sZENncExHczlUV0YwYUM1dGFXNG9hQ3htS1Rzd1BtTS9laWdwVzJFck16SStQakkrUGo0d1hUMU9kVzFpWlhJb1ppRTlhQ1ltYXowOVpTazZYRzR3UEdNaFBTaHJQVDFsS1NZbUtHWTlUV0YwYUM1dFlYZ29hQ3htS1N4aUxuTmxkRlJwYldVb1lpNW5aWFJVYVcxbEtDa3JOa1UwS2lnb01EeGpQMnM2WmlrdFpTa3BLVHQ2S0NsYllTc3lORDQrTWo0K1BqQmRQV0l1WjJWMFJHRjVLQ2s3WXowb1dTaGlMbWRsZEVaMWJHeFpaV0Z5S0NrcFAzZGlPbmhpS1Z0aUxtZGxkRTF2Ym5Sb0tDbGRLMkl1WjJWMFJHRjBaU2dwTFRGOE1EdDZLQ2xiWVNzeU9ENCtNajQrUGpCZFBXTTdlaWdwVzJFK1BqSStQajR3WFQxaUxtZGxkRk5sWTI5dVpITW9LVHQ2S0NsYllTczBQajR5UGo0K01GMDlZaTVuWlhSTmFXNTFkR1Z6S0NrN2VpZ3BXMkVyT0Q0K01qNCtQakJkUFdJdVoyVjBTRzkxY25Nb0tUdDZLQ2xiWVNzeE1qNCtNajQrUGpCZFBXSXVaMlYwUkdGMFpTZ3BPM29vS1Z0aEt6RTJQajR5UGo0K01GMDlZaTVuWlhSTmIyNTBhQ2dwTzNvb0tWdGhLekl3UGo0eVBqNCtNRjA5WWk1blpYUlpaV0Z5S0NrN1lUMWlMbWRsZEZScGJXVW9LUzh4UlRNN2NtVjBkWEp1SUhOaktDaFZQV0VzTVR3OUswMWhkR2d1WVdKektGVXBQekE4VlQ4clRXRjBhQzVtYkc5dmNpaFZMelF5T1RRNU5qY3lPVFlwUGo0K01EcCtmaXROWVhSb0xtTmxhV3dvS0ZVdEt5aCtmbFUrUGo0d0tTa3ZOREk1TkRrMk56STVOaWsrUGo0d09qQXBLU3hoUGo0K01IMHNjenA1WWl4ME9ucGlMRnh1ZWpwbWRXNWpkR2x2YmloaExHSXNZeWw3Wm5WdVkzUnBiMjRnWlNodEtYdHlaWFIxY200b2JUMXRMblJ2VkdsdFpWTjBjbWx1WnlncExtMWhkR05vS0M5Y1hDZ29XMEV0V21FdGVpQmRLeWxjWENra0x5a3BQMjFiTVYwNlhDSkhUVlJjSW4xaFBqNCtQVEE3WWo0K1BqMHdPMk0rUGo0OU1EdDJZWElnWmowb2JtVjNJRVJoZEdVcExtZGxkRVoxYkd4WlpXRnlLQ2tzYUQxdVpYY2dSR0YwWlNobUxEQXNNU2tzYXoxdVpYY2dSR0YwWlNobUxEWXNNU2s3Wmoxb0xtZGxkRlJwYldWNmIyNWxUMlptYzJWMEtDazdkbUZ5SUhFOWF5NW5aWFJVYVcxbGVtOXVaVTltWm5ObGRDZ3BMRzQ5VFdGMGFDNXRZWGdvWml4eEtUdEJLQ2xiWVQ0K01qNCtQakJkUFRZd0ttNDdlaWdwVzJJK1BqSStQajR3WFQxT2RXMWlaWElvWmlFOWNTazdZVDFsS0dncE8ySTlaU2hyS1R0aFBVSmlLR0VwTzJJOVFtSW9ZaWs3Y1R4bVB5aEJLQ2xiWXo0K01qNCtQakJkUFdFc1FTZ3BXMk1yTkQ0K01qNCtQakJkUFdJcE9paEJLQ2xiWXo0K01qNCtQakJkUFdJc1FTZ3BXMk1yTkQ0K01qNCtQakJkUFdFcGZTeGtPaWdwUFQ1N1RTaGNJbHdpS1gwc1l6cG1kVzVqZEdsdmJpaGhMR0lzWXlsN1lUNCtQajB3TzJJOVJHSW9ZajQrUGpBc1l6NCtQakFwTzNKbGRIVnliaUJJWVZ0aFhTNWhjSEJzZVNodWRXeHNMR0lwZlN4ck9tWjFibU4wYVc5dUtHRXNYRzVpTEdNcGUyRStQajQ5TUR0aVBVUmlLR0krUGo0d0xHTStQajR3S1R0eVpYUjFjbTRnU0dGYllWMHVZWEJ3Ykhrb2JuVnNiQ3hpS1gwc2JUcG1kVzVqZEdsdmJpZ3BlMzBzYWpwbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlCRVlYUmxMbTV2ZHlncGZTeFhPaWdwUFQ1N2VHRXJQVEU3ZEdoeWIzZGNJblZ1ZDJsdVpGd2lPMzBzUWpwbWRXNWpkR2x2YmlncGUzSmxkSFZ5YmlBME1qazBPVEF4TnpZd2ZTeG1PaWdwUFQ1d1pYSm1iM0p0WVc1alpTNTBhVzFsVDNKcFoybHVLM0JsY21admNtMWhibU5sTG01dmR5Z3BMR2M2Wm5WdVkzUnBiMjRvS1h0eVpYUjFjbTRnUno5eVpYRjFhWEpsS0Z3aWIzTmNJaWt1WTNCMWN5Z3BMbXhsYm1kMGFEcHVZWFpwWjJGMGIzSXVhR0Z5WkhkaGNtVkRiMjVqZFhKeVpXNWplWDBzVERwbWRXNWpkR2x2YmloaExHSXNZeXhsS1h0WExsQmlQV0krUGo0d08wbGlMbXhsYm1kMGFEMWpPMkk5WlQ0K1BqQStQak03Wm05eUtHVTlNRHRsUEdNN1pTc3JLVWxpVzJWZFBXUmhLQ2xiWWl0bFBqNCtNRjA3Y21WMGRYSnVLREErWVQ5SVlWc3RZUzB4WFRweFkxdGhYU2t1WVhCd2JIa29iblZzYkN4SllpbDlMSGs2Wm5WdVkzUnBiMjRvWVNsN1lUNCtQajB3TzNaaGNpQmlQWFlvS1M1c1pXNW5kR2c3YVdZb1lUdzlZbng4TkRJNU5Ea3dNVGMyTUR4aEtYSmxkSFZ5YmlFeE8yWnZjaWgyWVhJZ1l6MWNiakU3TkQ0OVl6dGpLajB5S1h0MllYSWdaVDFpS2lneEt5NHlMMk1wTzJVOVRXRjBhQzV0YVc0b1pTeGhLekV3TURZMk16STVOaWs3ZG1GeUlHWTlUV0YwYUR0bFBVMWhkR2d1YldGNEtHRXNaU2s3WVRwN1pqMW1MbTFwYmk1allXeHNLR1lzTkRJNU5Ea3dNVGMyTUN4bEt5ZzJOVFV6TmkxbEpUWTFOVE0yS1NVMk5UVXpOaWt0YkM1aWRXWm1aWEl1WW5sMFpVeGxibWQwYUNzMk5UVXpOVDQrUGpFMk8zUnllWHRzTG1keWIzY29aaWs3ZENncE8zWmhjaUJvUFRFN1luSmxZV3NnWVgxallYUmphQ2hyS1h0OWFEMTJiMmxrSURCOWFXWW9hQ2x5WlhSMWNtNGhNSDF5WlhSMWNtNGhNWDBzVURwTllpeFJPazVpTEVnNlVXRXNhRHBQWWl4dk9sQmlMSGc2VVdJc2JqcFVZaXhoT214OGZFSXVkMkZ6YlUxbGJXOXllU3hLT2xsaUxHVTZablZ1WTNScGIyNG9ZU3hpTEdNc1pTbDdjbVYwZFhKdUlGbGlLR0UrUGo0d0xHSStQajR3TEdNK1BqNHdMR1UrUGo0d0tYMTlPMXh1S0daMWJtTjBhVzl1S0NsN1puVnVZM1JwYjI0Z1lTaGpMR1VwZTJNOVl5NWxlSEJ2Y25Sek8yTTlKR0lvWXlrN1RqMWpQWFZqS0dNcE8xY3ViV0l1Y0hWemFDaE9Ma1JoS1R0MllTNTFibk5vYVdaMEtFNHVXU2s3YzJFOVpUdENZU2dwTzNKbGRIVnliaUJqZlhaaGNpQmlQWHRoT25SamZUdEJZU2dwTzJsbUtFSXVhVzV6ZEdGdWRHbGhkR1ZYWVhOdEtYUnllWHR5WlhSMWNtNGdRaTVwYm5OMFlXNTBhV0YwWlZkaGMyMG9ZaXhoS1gxallYUmphQ2hqS1h0TEtGd2lUVzlrZFd4bExtbHVjM1JoYm5ScFlYUmxWMkZ6YlNCallXeHNZbUZqYXlCbVlXbHNaV1FnZDJsMGFDQmxjbkp2Y2pvZ1hDSXJZeWtzUXloaktYMUhZU2hpTEdaMWJtTjBhVzl1S0dNcGUyRW9ZeTVwYm5OMFlXNWpaU3hqTG0xdlpIVnNaU2w5S1M1allYUmphQ2hES1R0eVpYUjFjbTU3ZlgwcEtDazdRaTVmVDNKMFNXNXBkRDBvWVN4aUtUMCtLRUl1WDA5eWRFbHVhWFE5VGk1YUtTaGhMR0lwTzBJdVgwOXlkRWRsZEV4aGMzUkZjbkp2Y2owb1lTeGlLVDArS0VJdVgwOXlkRWRsZEV4aGMzUkZjbkp2Y2oxT0xsOHBLR0VzWWlrN1hHNUNMbDlQY25SRGNtVmhkR1ZUWlhOemFXOXVUM0IwYVc5dWN6MG9ZU3hpTEdNc1pTeG1MR2dzYXl4eExHNHNiU2s5UGloQ0xsOVBjblJEY21WaGRHVlRaWE56YVc5dVQzQjBhVzl1Y3oxT0xpUXBLR0VzWWl4akxHVXNaaXhvTEdzc2NTeHVMRzBwTzBJdVgwOXlkRUZ3Y0dWdVpFVjRaV04xZEdsdmJsQnliM1pwWkdWeVBTaGhMR0lwUFQ0b1FpNWZUM0owUVhCd1pXNWtSWGhsWTNWMGFXOXVVSEp2ZG1sa1pYSTlUaTVoWVNrb1lTeGlLVHRDTGw5UGNuUkJaR1JHY21WbFJHbHRaVzV6YVc5dVQzWmxjbkpwWkdVOUtHRXNZaXhqS1QwK0tFSXVYMDl5ZEVGa1pFWnlaV1ZFYVcxbGJuTnBiMjVQZG1WeWNtbGtaVDFPTG1KaEtTaGhMR0lzWXlrN1FpNWZUM0owUVdSa1UyVnpjMmx2YmtOdmJtWnBaMFZ1ZEhKNVBTaGhMR0lzWXlrOVBpaENMbDlQY25SQlpHUlRaWE56YVc5dVEyOXVabWxuUlc1MGNuazlUaTVqWVNrb1lTeGlMR01wTzBJdVgwOXlkRkpsYkdWaGMyVlRaWE56YVc5dVQzQjBhVzl1Y3oxaFBUNG9RaTVmVDNKMFVtVnNaV0Z6WlZObGMzTnBiMjVQY0hScGIyNXpQVTR1WkdFcEtHRXBPMEl1WDA5eWRFTnlaV0YwWlZObGMzTnBiMjQ5S0dFc1lpeGpLVDArS0VJdVgwOXlkRU55WldGMFpWTmxjM05wYjI0OVRpNWxZU2tvWVN4aUxHTXBPMXh1UWk1ZlQzSjBVbVZzWldGelpWTmxjM05wYjI0OVlUMCtLRUl1WDA5eWRGSmxiR1ZoYzJWVFpYTnphVzl1UFU0dVptRXBLR0VwTzBJdVgwOXlkRWRsZEVsdWNIVjBUM1YwY0hWMFEyOTFiblE5S0dFc1lpeGpLVDArS0VJdVgwOXlkRWRsZEVsdWNIVjBUM1YwY0hWMFEyOTFiblE5VGk1bllTa29ZU3hpTEdNcE8wSXVYMDl5ZEVkbGRFbHVjSFYwVG1GdFpUMG9ZU3hpS1QwK0tFSXVYMDl5ZEVkbGRFbHVjSFYwVG1GdFpUMU9MbWhoS1NoaExHSXBPMEl1WDA5eWRFZGxkRTkxZEhCMWRFNWhiV1U5S0dFc1lpazlQaWhDTGw5UGNuUkhaWFJQZFhSd2RYUk9ZVzFsUFU0dWFXRXBLR0VzWWlrN1FpNWZUM0owUm5KbFpUMWhQVDRvUWk1ZlQzSjBSbkpsWlQxT0xtcGhLU2hoS1R0Q0xsOVBjblJEY21WaGRHVlVaVzV6YjNJOUtHRXNZaXhqTEdVc1ppeG9LVDArS0VJdVgwOXlkRU55WldGMFpWUmxibk52Y2oxT0xtdGhLU2hoTEdJc1l5eGxMR1lzYUNrN1FpNWZUM0owUjJWMFZHVnVjMjl5UkdGMFlUMG9ZU3hpTEdNc1pTeG1LVDArS0VJdVgwOXlkRWRsZEZSbGJuTnZja1JoZEdFOVRpNXNZU2tvWVN4aUxHTXNaU3htS1R0Q0xsOVBjblJTWld4bFlYTmxWR1Z1YzI5eVBXRTlQaWhDTGw5UGNuUlNaV3hsWVhObFZHVnVjMjl5UFU0dWJXRXBLR0VwTzF4dVFpNWZUM0owUTNKbFlYUmxVblZ1VDNCMGFXOXVjejBvWVN4aUxHTXNaU2s5UGloQ0xsOVBjblJEY21WaGRHVlNkVzVQY0hScGIyNXpQVTR1Ym1FcEtHRXNZaXhqTEdVcE8wSXVYMDl5ZEVGa1pGSjFia052Ym1acFowVnVkSEo1UFNoaExHSXNZeWs5UGloQ0xsOVBjblJCWkdSU2RXNURiMjVtYVdkRmJuUnllVDFPTG05aEtTaGhMR0lzWXlrN1FpNWZUM0owVW1Wc1pXRnpaVkoxYms5d2RHbHZibk05WVQwK0tFSXVYMDl5ZEZKbGJHVmhjMlZTZFc1UGNIUnBiMjV6UFU0dWNHRXBLR0VwTzBJdVgwOXlkRU55WldGMFpVSnBibVJwYm1jOVlUMCtLRUl1WDA5eWRFTnlaV0YwWlVKcGJtUnBibWM5VGk1eFlTa29ZU2s3UWk1ZlQzSjBRbWx1WkVsdWNIVjBQU2hoTEdJc1l5azlQaWhDTGw5UGNuUkNhVzVrU1c1d2RYUTlUaTV5WVNrb1lTeGlMR01wTzBJdVgwOXlkRUpwYm1SUGRYUndkWFE5S0dFc1lpeGpMR1VwUFQ0b1FpNWZUM0owUW1sdVpFOTFkSEIxZEQxT0xuTmhLU2hoTEdJc1l5eGxLVHRDTGw5UGNuUkRiR1ZoY2tKdmRXNWtUM1YwY0hWMGN6MWhQVDRvUWk1ZlQzSjBRMnhsWVhKQ2IzVnVaRTkxZEhCMWRITTlUaTUwWVNrb1lTazdRaTVmVDNKMFVtVnNaV0Z6WlVKcGJtUnBibWM5WVQwK0tFSXVYMDl5ZEZKbGJHVmhjMlZDYVc1a2FXNW5QVTR1ZFdFcEtHRXBPMXh1UWk1ZlQzSjBVblZ1VjJsMGFFSnBibVJwYm1jOUtHRXNZaXhqTEdVc1ppazlQaWhDTGw5UGNuUlNkVzVYYVhSb1FtbHVaR2x1WnoxT0xuWmhLU2hoTEdJc1l5eGxMR1lwTzBJdVgwOXlkRkoxYmowb1lTeGlMR01zWlN4bUxHZ3NheXh4S1QwK0tFSXVYMDl5ZEZKMWJqMU9MbmRoS1NoaExHSXNZeXhsTEdZc2FDeHJMSEVwTzBJdVgwOXlkRVZ1WkZCeWIyWnBiR2x1WnoxaFBUNG9RaTVmVDNKMFJXNWtVSEp2Wm1sc2FXNW5QVTR1ZUdFcEtHRXBPMEl1WDBwelpYQlBkWFJ3ZFhROUtHRXNZaXhqS1QwK0tFSXVYMHB6WlhCUGRYUndkWFE5VGk1NVlTa29ZU3hpTEdNcE8wSXVYMHB6WlhCSFpYUk9iMlJsVG1GdFpUMWhQVDRvUWk1ZlNuTmxjRWRsZEU1dlpHVk9ZVzFsUFU0dWVtRXBLR0VwTzNaaGNpQlRZVDFDTGw5d2RHaHlaV0ZrWDNObGJHWTlLQ2s5UGloVFlUMUNMbDl3ZEdoeVpXRmtYM05sYkdZOVRpNUJZU2tvS1N4QllqMUNMbDl0WVd4c2IyTTlZVDArS0VGaVBVSXVYMjFoYkd4dll6MU9Ma0poS1NoaEtTeHZZejFDTGw5bWNtVmxQV0U5UGlodll6MUNMbDltY21WbFBVNHVRMkVwS0dFcE8wSXVYMTlsYlhOamNtbHdkR1Z1WDNSc2MxOXBibWwwUFNncFBUNG9RaTVmWDJWdGMyTnlhWEIwWlc1ZmRHeHpYMmx1YVhROVRpNUVZU2tvS1R0Y2JuWmhjaUJ5WXoxQ0xsOWZaVzF6WTNKcGNIUmxibDkwYUhKbFlXUmZhVzVwZEQwb1lTeGlMR01zWlN4bUxHZ3BQVDRvY21NOVFpNWZYMlZ0YzJOeWFYQjBaVzVmZEdoeVpXRmtYMmx1YVhROVRpNUdZU2tvWVN4aUxHTXNaU3htTEdncE8wSXVYMTlsYlhOamNtbHdkR1Z1WDNSb2NtVmhaRjlqY21GemFHVmtQU2dwUFQ0b1FpNWZYMlZ0YzJOeWFYQjBaVzVmZEdoeVpXRmtYMk55WVhOb1pXUTlUaTVIWVNrb0tUdGNiblpoY2lCSVlqMG9ZU3hpTEdNc1pTazlQaWhJWWoxT0xraGhLU2hoTEdJc1l5eGxLU3hTWVQxaFBUNG9VbUU5VGk1SllTa29ZU2tzV1dFOVFpNWZYMlZ0YzJOeWFYQjBaVzVmZEdoeVpXRmtYMlY0YVhROVlUMCtLRmxoUFVJdVgxOWxiWE5qY21sd2RHVnVYM1JvY21WaFpGOWxlR2wwUFU0dVNtRXBLR0VwTEhaaVBVSXVYMTlsYlhOamNtbHdkR1Z1WDJOb1pXTnJYMjFoYVd4aWIzZzlLQ2s5UGloMllqMUNMbDlmWlcxelkzSnBjSFJsYmw5amFHVmphMTl0WVdsc1ltOTRQVTR1UzJFcEtDa3NjMk05WVQwK0tITmpQVTR1VEdFcEtHRXBMRlpoUFNoaExHSXBQVDRvVm1FOVRpNU5ZU2tvWVN4aUtTeEZZajBvS1QwK0tFVmlQVTR1VG1FcEtDa3NWMkU5WVQwK0tGZGhQVTR1VDJFcEtHRXBMRWRpUFdFOVBpaEhZajFPTGxCaEtTaGhLU3hZWVQxQ0xtUjVia05oYkd4ZmFXazlLR0VzWWlrOVBpaFlZVDFDTG1SNWJrTmhiR3hmYVdrOVRpNVNZU2tvWVN4aUtTeHRZejFoUFQ0b2JXTTlUaTVUWVNrb1lTa3NZbU05S0NrOVBpaGlZejFPTGxSaEtTZ3BMR3hqUFdFOVBpaHNZejFPTGxWaEtTaGhLU3h1WXowb0tUMCtLRzVqUFU0dVZtRXBLQ2s3UWk1ZlgxOXpkR0Z5ZEY5bGJWOXFjejA1TVRjMk56ZzdRaTVmWDE5emRHOXdYMlZ0WDJwelBUa3hOemd6T1R0Y2JtWjFibU4wYVc5dUlIVmpLR0VwZTJFOVQySnFaV04wTG1GemMybG5iaWg3ZlN4aEtUdDJZWElnWWoxbFBUNG9LVDArWlNncFBqNCtNQ3hqUFdVOVBtWTlQbVVvWmlrK1BqNHdPMkV1WDE5bGNuSnViMTlzYjJOaGRHbHZiajFpS0dFdVgxOWxjbkp1YjE5c2IyTmhkR2x2YmlrN1lTNXdkR2h5WldGa1gzTmxiR1k5WWloaExuQjBhSEpsWVdSZmMyVnNaaWs3WVM1dFlXeHNiMk05WXloaExtMWhiR3h2WXlrN1lTNXpkR0ZqYTFOaGRtVTlZaWhoTG5OMFlXTnJVMkYyWlNrN1lTNXpkR0ZqYTBGc2JHOWpQV01vWVM1emRHRmphMEZzYkc5aktUdHlaWFIxY200Z1lYMUNMbXRsWlhCU2RXNTBhVzFsUVd4cGRtVTllV0U3UWk1M1lYTnRUV1Z0YjNKNVBXdzdRaTV6ZEdGamEwRnNiRzlqUFVkaU8wSXVjM1JoWTJ0VFlYWmxQVVZpTzBJdWMzUmhZMnRTWlhOMGIzSmxQVmRoTzBJdVZWUkdPRlJ2VTNSeWFXNW5QVlk3UWk1emRISnBibWRVYjFWVVJqZzlhR0k3UWk1c1pXNW5kR2hDZVhSbGMxVlVSamc5Wm1JN1FpNUZlR2wwVTNSaGRIVnpQVWxoTzBJdVVGUm9jbVZoWkQxWE8zWmhjaUIyWXp0VFBXWjFibU4wYVc5dUlIZGpLQ2w3ZG1OOGZIaGpLQ2s3ZG1OOGZDaFRQWGRqS1gwN1hHNW1kVzVqZEdsdmJpQjRZeWdwZTJaMWJtTjBhVzl1SUdFb0tYdHBaaWdoZG1NbUppaDJZejBoTUN4Q0xtTmhiR3hsWkZKMWJqMGhNQ3doVUNrcGUwaDhmRlZoS0haaEtUdG1ZU2hDS1R0cFppaENMbTl1VW5WdWRHbHRaVWx1YVhScFlXeHBlbVZrS1VJdWIyNVNkVzUwYVcxbFNXNXBkR2xoYkdsNlpXUW9LVHRwWmlnaFNDbDdhV1lvUWk1d2IzTjBVblZ1S1dadmNpaGNJbVoxYm1OMGFXOXVYQ0k5UFhSNWNHVnZaaUJDTG5CdmMzUlNkVzRtSmloQ0xuQnZjM1JTZFc0OVcwSXVjRzl6ZEZKMWJsMHBPMEl1Y0c5emRGSjFiaTVzWlc1bmRHZzdLWHQyWVhJZ1lqMUNMbkJ2YzNSU2RXNHVjMmhwWm5Rb0tUdDNZUzUxYm5Ob2FXWjBLR0lwZlZWaEtIZGhLWDE5ZldsbUtDRW9NRHhTS1NscFppaElLV1poS0VJcExFaDhmRlZoS0haaEtTeHpkR0Z5ZEZkdmNtdGxjaWhDS1R0bGJITmxlMmxtS0VJdWNISmxVblZ1S1dadmNpaGNJbVoxYm1OMGFXOXVYQ0k5UFhSNWNHVnZaaUJDTG5CeVpWSjFiaVltS0VJdWNISmxVblZ1UFZ0Q0xuQnlaVkoxYmwwcE8wSXVjSEpsVW5WdUxteGxibWQwYURzcGRXRXVkVzV6YUdsbWRDaENMbkJ5WlZKMWJpNXphR2xtZENncEtUdFZZU2gxWVNrN01EeFNmSHdvUWk1elpYUlRkR0YwZFhNL0tFSXVjMlYwVTNSaGRIVnpLRndpVW5WdWJtbHVaeTR1TGx3aUtTeHpaWFJVYVcxbGIzVjBLR1oxYm1OMGFXOXVLQ2w3YzJWMFZHbHRaVzkxZENobWRXNWpkR2x2YmlncGUwSXVjMlYwVTNSaGRIVnpLRndpWENJcGZTeGNiakVwTzJFb0tYMHNNU2twT21Fb0tTbDlmV2xtS0VJdWNISmxTVzVwZENsbWIzSW9YQ0ptZFc1amRHbHZibHdpUFQxMGVYQmxiMllnUWk1d2NtVkpibWwwSmlZb1FpNXdjbVZKYm1sMFBWdENMbkJ5WlVsdWFYUmRLVHN3UEVJdWNISmxTVzVwZEM1c1pXNW5kR2c3S1VJdWNISmxTVzVwZEM1d2IzQW9LU2dwTzNoaktDazdYRzVjYmx4dUlDQnlaWFIxY200Z2JXOWtkV3hsUVhKbkxuSmxZV1I1WEc1OVhHNWNiaWs3WEc1OUtTZ3BPMXh1YVdZZ0tIUjVjR1Z2WmlCbGVIQnZjblJ6SUQwOVBTQW5iMkpxWldOMEp5QW1KaUIwZVhCbGIyWWdiVzlrZFd4bElEMDlQU0FuYjJKcVpXTjBKeWxjYmlBZ2JXOWtkV3hsTG1WNGNHOXlkSE1nUFNCdmNuUlhZWE50VkdoeVpXRmtaV1E3WEc1bGJITmxJR2xtSUNoMGVYQmxiMllnWkdWbWFXNWxJRDA5UFNBblpuVnVZM1JwYjI0bklDWW1JR1JsWm1sdVpWc25ZVzFrSjEwcFhHNGdJR1JsWm1sdVpTaGJYU3dnS0NrZ1BUNGdiM0owVjJGemJWUm9jbVZoWkdWa0tUdGNiaUlzSUNKY0luVnpaU0J6ZEhKcFkzUmNJanQyWVhJZ1RXOWtkV3hsUFh0OU8zWmhjaUJGVGxaSlVrOU9UVVZPVkY5SlUxOU9UMFJGUFhSNWNHVnZaaUJ3Y205alpYTnpQVDFjSW05aWFtVmpkRndpSmlaMGVYQmxiMllnY0hKdlkyVnpjeTUyWlhKemFXOXVjejA5WENKdlltcGxZM1JjSWlZbWRIbHdaVzltSUhCeWIyTmxjM011ZG1WeWMybHZibk11Ym05a1pUMDlYQ0p6ZEhKcGJtZGNJanRwWmloRlRsWkpVazlPVFVWT1ZGOUpVMTlPVDBSRktYdDJZWElnYm05a1pWZHZjbXRsY2xSb2NtVmhaSE05Y21WeGRXbHlaU2hjSW5kdmNtdGxjbDkwYUhKbFlXUnpYQ0lwTzNaaGNpQndZWEpsYm5SUWIzSjBQVzV2WkdWWGIzSnJaWEpVYUhKbFlXUnpMbkJoY21WdWRGQnZjblE3Y0dGeVpXNTBVRzl5ZEM1dmJpaGNJbTFsYzNOaFoyVmNJaXhrWVhSaFBUNXZibTFsYzNOaFoyVW9lMlJoZEdFNlpHRjBZWDBwS1R0MllYSWdabk05Y21WeGRXbHlaU2hjSW1aelhDSXBPMDlpYW1WamRDNWhjM05wWjI0b1oyeHZZbUZzTEh0elpXeG1PbWRzYjJKaGJDeHlaWEYxYVhKbE9uSmxjWFZwY21Vc1RXOWtkV3hsT2sxdlpIVnNaU3hzYjJOaGRHbHZianA3YUhKbFpqcGZYMlpwYkdWdVlXMWxmU3hYYjNKclpYSTZibTlrWlZkdmNtdGxjbFJvY21WaFpITXVWMjl5YTJWeUxHbHRjRzl5ZEZOamNtbHdkSE02WmowK0tEQXNaWFpoYkNrb1puTXVjbVZoWkVacGJHVlRlVzVqS0dZc1hDSjFkR1k0WENJcEsxd2lMeThqSUhOdmRYSmpaVlZTVEQxY0lpdG1LU3h3YjNOMFRXVnpjMkZuWlRwdGMyYzlQbkJoY21WdWRGQnZjblF1Y0c5emRFMWxjM05oWjJVb2JYTm5LU3h3WlhKbWIzSnRZVzVqWlRwbmJHOWlZV3d1Y0dWeVptOXliV0Z1WTJWOGZIdHViM2M2UkdGMFpTNXViM2Q5ZlNsOWRtRnlJR2x1YVhScFlXeHBlbVZrU2xNOVptRnNjMlU3Wm5WdVkzUnBiMjRnZEdoeVpXRmtVSEpwYm5SRmNuSW9LWHQyWVhJZ2RHVjRkRDFCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2hoY21kMWJXVnVkSE1wTG1wdmFXNG9YQ0lnWENJcE8ybG1LRVZPVmtsU1QwNU5SVTVVWDBsVFgwNVBSRVVwZTJaekxuZHlhWFJsVTNsdVl5Z3lMSFJsZUhRclhDSmNYRzVjSWlrN2NtVjBkWEp1ZldOdmJuTnZiR1V1WlhKeWIzSW9kR1Y0ZENsOVpuVnVZM1JwYjI0Z2RHaHlaV0ZrUVd4bGNuUW9LWHQyWVhJZ2RHVjRkRDFCY25KaGVTNXdjbTkwYjNSNWNHVXVjMnhwWTJVdVkyRnNiQ2hoY21kMWJXVnVkSE1wTG1wdmFXNG9YQ0lnWENJcE8zQnZjM1JOWlhOellXZGxLSHRqYldRNlhDSmhiR1Z5ZEZ3aUxIUmxlSFE2ZEdWNGRDeDBhSEpsWVdSSlpEcE5iMlIxYkdWYlhDSmZjSFJvY21WaFpGOXpaV3htWENKZEtDbDlLWDEyWVhJZ1pYSnlQWFJvY21WaFpGQnlhVzUwUlhKeU8zTmxiR1l1WVd4bGNuUTlkR2h5WldGa1FXeGxjblE3VFc5a2RXeGxXMXdpYVc1emRHRnVkR2xoZEdWWFlYTnRYQ0pkUFNocGJtWnZMSEpsWTJWcGRtVkpibk4wWVc1alpTazlQbnQyWVhJZ2JXOWtkV3hsUFUxdlpIVnNaVnRjSW5kaGMyMU5iMlIxYkdWY0lsMDdUVzlrZFd4bFcxd2lkMkZ6YlUxdlpIVnNaVndpWFQxdWRXeHNPM1poY2lCcGJuTjBZVzVqWlQxdVpYY2dWMlZpUVhOelpXMWliSGt1U1c1emRHRnVZMlVvYlc5a2RXeGxMR2x1Wm04cE8zSmxkSFZ5YmlCeVpXTmxhWFpsU1c1emRHRnVZMlVvYVc1emRHRnVZMlVwZlR0elpXeG1MbTl1ZFc1b1lXNWtiR1ZrY21WcVpXTjBhVzl1UFdVOVBudDBhSEp2ZHlCbExuSmxZWE52Ymo4L1pYMDdablZ1WTNScGIyNGdhR0Z1Wkd4bFRXVnpjMkZuWlNobEtYdDBjbmw3YVdZb1pTNWtZWFJoTG1OdFpEMDlQVndpYkc5aFpGd2lLWHRzWlhRZ2JXVnpjMkZuWlZGMVpYVmxQVnRkTzNObGJHWXViMjV0WlhOellXZGxQV1U5UG0xbGMzTmhaMlZSZFdWMVpTNXdkWE5vS0dVcE8zTmxiR1l1YzNSaGNuUlhiM0pyWlhJOWFXNXpkR0Z1WTJVOVBudE5iMlIxYkdVOWFXNXpkR0Z1WTJVN2NHOXpkRTFsYzNOaFoyVW9lMXdpWTIxa1hDSTZYQ0pzYjJGa1pXUmNJbjBwTzJadmNpaHNaWFFnYlhObklHOW1JRzFsYzNOaFoyVlJkV1YxWlNsN2FHRnVaR3hsVFdWemMyRm5aU2h0YzJjcGZYTmxiR1l1YjI1dFpYTnpZV2RsUFdoaGJtUnNaVTFsYzNOaFoyVjlPMDF2WkhWc1pWdGNJbmRoYzIxTmIyUjFiR1ZjSWwwOVpTNWtZWFJoTG5kaGMyMU5iMlIxYkdVN1ptOXlLR052Ym5OMElHaGhibVJzWlhJZ2IyWWdaUzVrWVhSaExtaGhibVJzWlhKektYdE5iMlIxYkdWYmFHRnVaR3hsY2wwOUtDNHVMbUZ5WjNNcFBUNTdjRzl6ZEUxbGMzTmhaMlVvZTJOdFpEcGNJbU5oYkd4SVlXNWtiR1Z5WENJc2FHRnVaR3hsY2pwb1lXNWtiR1Z5TEdGeVozTTZZWEpuYzMwcGZYMU5iMlIxYkdWYlhDSjNZWE50VFdWdGIzSjVYQ0pkUFdVdVpHRjBZUzUzWVhOdFRXVnRiM0o1TzAxdlpIVnNaVnRjSW1KMVptWmxjbHdpWFQxTmIyUjFiR1ZiWENKM1lYTnRUV1Z0YjNKNVhDSmRMbUoxWm1abGNqdE5iMlIxYkdWYlhDSkZUbFpKVWs5T1RVVk9WRjlKVTE5UVZFaFNSVUZFWENKZFBYUnlkV1U3YVdZb2RIbHdaVzltSUdVdVpHRjBZUzUxY214UGNrSnNiMkk5UFZ3aWMzUnlhVzVuWENJcGUybHRjRzl5ZEZOamNtbHdkSE1vWlM1a1lYUmhMblZ5YkU5eVFteHZZaWw5Wld4elpYdDJZWElnYjJKcVpXTjBWWEpzUFZWU1RDNWpjbVZoZEdWUFltcGxZM1JWVWt3b1pTNWtZWFJoTG5WeWJFOXlRbXh2WWlrN2FXMXdiM0owVTJOeWFYQjBjeWh2WW1wbFkzUlZjbXdwTzFWU1RDNXlaWFp2YTJWUFltcGxZM1JWVWt3b2IySnFaV04wVlhKc0tYMXZjblJYWVhOdFZHaHlaV0ZrWldRb1RXOWtkV3hsS1gxbGJITmxJR2xtS0dVdVpHRjBZUzVqYldROVBUMWNJbkoxYmx3aUtYdE5iMlIxYkdWYlhDSmZYMlZ0YzJOeWFYQjBaVzVmZEdoeVpXRmtYMmx1YVhSY0lsMG9aUzVrWVhSaExuQjBhSEpsWVdSZmNIUnlMQzhxYVhOTllXbHVRbkp2ZDNObGNsUm9jbVZoWkQwcUx6QXNMeXBwYzAxaGFXNVNkVzUwYVcxbFZHaHlaV0ZrUFNvdk1Dd3ZLbU5oYmtKc2IyTnJQU292TVNrN1RXOWtkV3hsVzF3aVgxOWxiWE5qY21sd2RHVnVYM1JvY21WaFpGOXRZV2xzWW05NFgyRjNZV2wwWENKZEtHVXVaR0YwWVM1d2RHaHlaV0ZrWDNCMGNpazdUVzlrZFd4bFcxd2laWE4wWVdKc2FYTm9VM1JoWTJ0VGNHRmpaVndpWFNncE8wMXZaSFZzWlZ0Y0lsQlVhSEpsWVdSY0lsMHVjbVZqWldsMlpVOWlhbVZqZEZSeVlXNXpabVZ5S0dVdVpHRjBZU2s3VFc5a2RXeGxXMXdpVUZSb2NtVmhaRndpWFM1MGFISmxZV1JKYm1sMFZFeFRLQ2s3YVdZb0lXbHVhWFJwWVd4cGVtVmtTbE1wZTJsdWFYUnBZV3hwZW1Wa1NsTTlkSEoxWlgxMGNubDdUVzlrZFd4bFcxd2lhVzUyYjJ0bFJXNTBjbmxRYjJsdWRGd2lYU2hsTG1SaGRHRXVjM1JoY25SZmNtOTFkR2x1WlN4bExtUmhkR0V1WVhKbktYMWpZWFJqYUNobGVDbDdhV1lvWlhnaFBWd2lkVzUzYVc1a1hDSXBlM1JvY205M0lHVjRmWDE5Wld4elpTQnBaaWhsTG1SaGRHRXVZMjFrUFQwOVhDSmpZVzVqWld4Y0lpbDdhV1lvVFc5a2RXeGxXMXdpWDNCMGFISmxZV1JmYzJWc1psd2lYU2dwS1h0TmIyUjFiR1ZiWENKZlgyVnRjMk55YVhCMFpXNWZkR2h5WldGa1gyVjRhWFJjSWwwb0xURXBmWDFsYkhObElHbG1LR1V1WkdGMFlTNTBZWEpuWlhROVBUMWNJbk5sZEdsdGJXVmthV0YwWlZ3aUtYdDlaV3h6WlNCcFppaGxMbVJoZEdFdVkyMWtQVDA5WENKamFHVmphMDFoYVd4aWIzaGNJaWw3YVdZb2FXNXBkR2xoYkdsNlpXUktVeWw3VFc5a2RXeGxXMXdpWTJobFkydE5ZV2xzWW05NFhDSmRLQ2w5ZldWc2MyVWdhV1lvWlM1a1lYUmhMbU50WkNsN1pYSnlLRndpZDI5eWEyVnlMbXB6SUhKbFkyVnBkbVZrSUhWdWEyNXZkMjRnWTI5dGJXRnVaQ0JjSWl0bExtUmhkR0V1WTIxa0tUdGxjbklvWlM1a1lYUmhLWDE5WTJGMFkyZ29aWGdwZTJsbUtFMXZaSFZzWlZ0Y0lsOWZaVzF6WTNKcGNIUmxibDkwYUhKbFlXUmZZM0poYzJobFpGd2lYU2w3VFc5a2RXeGxXMXdpWDE5bGJYTmpjbWx3ZEdWdVgzUm9jbVZoWkY5amNtRnphR1ZrWENKZEtDbDlkR2h5YjNjZ1pYaDlmWE5sYkdZdWIyNXRaWE56WVdkbFBXaGhibVJzWlUxbGMzTmhaMlU3WEc0aUxDQWlMeThnUTI5d2VYSnBaMmgwSUNoaktTQk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNHZMeUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnVFVsVUlFeHBZMlZ1YzJVdVhHNWNibWx0Y0c5eWRDQjdWR1Z1YzI5eWZTQm1jbTl0SUNkdmJtNTRjblZ1ZEdsdFpTMWpiMjF0YjI0bk8xeHVYRzR2THlCaElHUjFiVzE1SUhSNWNHVWdaR1ZqYkdGeVlYUnBiMjRnWm05eUlFWnNiMkYwTVRaQmNuSmhlU0JwYmlCallYTmxJR0Z1ZVNCd2IyeDVabWxzYkNCcGN5QmhkbUZwYkdGaWJHVXVYRzVrWldOc1lYSmxJR2RzYjJKaGJDQjdYRzRnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCQWRIbHdaWE5qY21sd2RDMWxjMnhwYm5RdmJtRnRhVzVuTFdOdmJuWmxiblJwYjI0c0lFQjBlWEJsYzJOeWFYQjBMV1Z6YkdsdWRDOXVieTFsZUhCc2FXTnBkQzFoYm5sY2JpQWdZMjl1YzNRZ1JteHZZWFF4TmtGeWNtRjVPaUJoYm5rN1hHNTlYRzVjYmk4dklGUm9hWE1nWm1sc1pTQnBibU5zZFdSbGN5QmpiMjF0YjI0Z1pHVm1hVzVwZEdsdmJuTXVJRlJvWlhrZ1pHOGdUazlVSUdoaGRtVWdaR1Z3Wlc1a1pXNWplU0J2YmlCMGFHVWdWMlZpUVhOelpXMWliSGtnYVc1emRHRnVZMlV1WEc1Y2JpOHFLbHh1SUNvZ1EyOXdhV1ZrSUdaeWIyMGdUMDVPV0NCa1pXWnBibWwwYVc5dUxpQlZjMlVnZEdocGN5QjBieUJrY205d0lHUmxjR1Z1WkdWdVkza2dKMjl1Ym5oZmNISnZkRzhuSUhSdklHUmxZM0psWVhObElHTnZiWEJwYkdWa0lDNXFjeUJtYVd4bElITnBlbVV1WEc0Z0tpOWNibVY0Y0c5eWRDQmpiMjV6ZENCbGJuVnRJRVJoZEdGVWVYQmxJSHRjYmlBZ2RXNWtaV1pwYm1Wa0lEMGdNQ3hjYmlBZ1pteHZZWFFnUFNBeExGeHVJQ0IxYVc1ME9DQTlJRElzWEc0Z0lHbHVkRGdnUFNBekxGeHVJQ0IxYVc1ME1UWWdQU0EwTEZ4dUlDQnBiblF4TmlBOUlEVXNYRzRnSUdsdWRETXlJRDBnTml4Y2JpQWdhVzUwTmpRZ1BTQTNMRnh1SUNCemRISnBibWNnUFNBNExGeHVJQ0JpYjI5c0lEMGdPU3hjYmlBZ1pteHZZWFF4TmlBOUlERXdMRnh1SUNCa2IzVmliR1VnUFNBeE1TeGNiaUFnZFdsdWRETXlJRDBnTVRJc1hHNGdJSFZwYm5RMk5DQTlJREV6TEZ4dUlDQmpiMjF3YkdWNE5qUWdQU0F4TkN4Y2JpQWdZMjl0Y0d4bGVERXlPQ0E5SURFMUxGeHVJQ0JpWm14dllYUXhOaUE5SURFMlhHNTlYRzVjYmk4cUtseHVJQ29nVFdGd0lITjBjbWx1WnlCMFpXNXpiM0lnWkdGMFlTQjBieUJsYm5WdElIWmhiSFZsWEc0Z0tpOWNibVY0Y0c5eWRDQmpiMjV6ZENCMFpXNXpiM0pFWVhSaFZIbHdaVk4wY21sdVoxUnZSVzUxYlNBOUlDaDBlWEJsT2lCemRISnBibWNwT2lCRVlYUmhWSGx3WlNBOVBpQjdYRzRnSUhOM2FYUmphQ0FvZEhsd1pTa2dlMXh1SUNBZ0lHTmhjMlVnSjJsdWREZ25PbHh1SUNBZ0lDQWdjbVYwZFhKdUlFUmhkR0ZVZVhCbExtbHVkRGc3WEc0Z0lDQWdZMkZ6WlNBbmRXbHVkRGduT2x4dUlDQWdJQ0FnY21WMGRYSnVJRVJoZEdGVWVYQmxMblZwYm5RNE8xeHVJQ0FnSUdOaGMyVWdKMkp2YjJ3bk9seHVJQ0FnSUNBZ2NtVjBkWEp1SUVSaGRHRlVlWEJsTG1KdmIydzdYRzRnSUNBZ1kyRnpaU0FuYVc1ME1UWW5PbHh1SUNBZ0lDQWdjbVYwZFhKdUlFUmhkR0ZVZVhCbExtbHVkREUyTzF4dUlDQWdJR05oYzJVZ0ozVnBiblF4TmljNlhHNGdJQ0FnSUNCeVpYUjFjbTRnUkdGMFlWUjVjR1V1ZFdsdWRERTJPMXh1SUNBZ0lHTmhjMlVnSjJsdWRETXlKenBjYmlBZ0lDQWdJSEpsZEhWeWJpQkVZWFJoVkhsd1pTNXBiblF6TWp0Y2JpQWdJQ0JqWVhObElDZDFhVzUwTXpJbk9seHVJQ0FnSUNBZ2NtVjBkWEp1SUVSaGRHRlVlWEJsTG5WcGJuUXpNanRjYmlBZ0lDQmpZWE5sSUNkbWJHOWhkREUySnpwY2JpQWdJQ0FnSUhKbGRIVnliaUJFWVhSaFZIbHdaUzVtYkc5aGRERTJPMXh1SUNBZ0lHTmhjMlVnSjJac2IyRjBNekluT2x4dUlDQWdJQ0FnY21WMGRYSnVJRVJoZEdGVWVYQmxMbVpzYjJGME8xeHVJQ0FnSUdOaGMyVWdKMlpzYjJGME5qUW5PbHh1SUNBZ0lDQWdjbVYwZFhKdUlFUmhkR0ZVZVhCbExtUnZkV0pzWlR0Y2JpQWdJQ0JqWVhObElDZHpkSEpwYm1jbk9seHVJQ0FnSUNBZ2NtVjBkWEp1SUVSaGRHRlVlWEJsTG5OMGNtbHVaenRjYmlBZ0lDQmpZWE5sSUNkcGJuUTJOQ2M2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdSR0YwWVZSNWNHVXVhVzUwTmpRN1hHNGdJQ0FnWTJGelpTQW5kV2x1ZERZMEp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlCRVlYUmhWSGx3WlM1MWFXNTBOalE3WEc1Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQjFibk4xY0hCdmNuUmxaQ0JrWVhSaElIUjVjR1U2SUNSN2RIbHdaWDFnS1R0Y2JpQWdmVnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQk5ZWEFnWlc1MWJTQjJZV3gxWlNCMGJ5QnpkSEpwYm1jZ2RHVnVjMjl5SUdSaGRHRmNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJSFJsYm5OdmNrUmhkR0ZVZVhCbFJXNTFiVlJ2VTNSeWFXNW5JRDBnS0hSNWNHVlFjbTkwYnpvZ1JHRjBZVlI1Y0dVcE9pQlVaVzV6YjNJdVZIbHdaU0E5UGlCN1hHNGdJSE4zYVhSamFDQW9kSGx3WlZCeWIzUnZLU0I3WEc0Z0lDQWdZMkZ6WlNCRVlYUmhWSGx3WlM1cGJuUTRPbHh1SUNBZ0lDQWdjbVYwZFhKdUlDZHBiblE0Snp0Y2JpQWdJQ0JqWVhObElFUmhkR0ZVZVhCbExuVnBiblE0T2x4dUlDQWdJQ0FnY21WMGRYSnVJQ2QxYVc1ME9DYzdYRzRnSUNBZ1kyRnpaU0JFWVhSaFZIbHdaUzVpYjI5c09seHVJQ0FnSUNBZ2NtVjBkWEp1SUNkaWIyOXNKenRjYmlBZ0lDQmpZWE5sSUVSaGRHRlVlWEJsTG1sdWRERTJPbHh1SUNBZ0lDQWdjbVYwZFhKdUlDZHBiblF4TmljN1hHNGdJQ0FnWTJGelpTQkVZWFJoVkhsd1pTNTFhVzUwTVRZNlhHNGdJQ0FnSUNCeVpYUjFjbTRnSjNWcGJuUXhOaWM3WEc0Z0lDQWdZMkZ6WlNCRVlYUmhWSGx3WlM1cGJuUXpNanBjYmlBZ0lDQWdJSEpsZEhWeWJpQW5hVzUwTXpJbk8xeHVJQ0FnSUdOaGMyVWdSR0YwWVZSNWNHVXVkV2x1ZERNeU9seHVJQ0FnSUNBZ2NtVjBkWEp1SUNkMWFXNTBNekluTzF4dUlDQWdJR05oYzJVZ1JHRjBZVlI1Y0dVdVpteHZZWFF4TmpwY2JpQWdJQ0FnSUhKbGRIVnliaUFuWm14dllYUXhOaWM3WEc0Z0lDQWdZMkZ6WlNCRVlYUmhWSGx3WlM1bWJHOWhkRHBjYmlBZ0lDQWdJSEpsZEhWeWJpQW5abXh2WVhRek1pYzdYRzRnSUNBZ1kyRnpaU0JFWVhSaFZIbHdaUzVrYjNWaWJHVTZYRzRnSUNBZ0lDQnlaWFIxY200Z0oyWnNiMkYwTmpRbk8xeHVJQ0FnSUdOaGMyVWdSR0YwWVZSNWNHVXVjM1J5YVc1bk9seHVJQ0FnSUNBZ2NtVjBkWEp1SUNkemRISnBibWNuTzF4dUlDQWdJR05oYzJVZ1JHRjBZVlI1Y0dVdWFXNTBOalE2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdKMmx1ZERZMEp6dGNiaUFnSUNCallYTmxJRVJoZEdGVWVYQmxMblZwYm5RMk5EcGNiaUFnSUNBZ0lISmxkSFZ5YmlBbmRXbHVkRFkwSnp0Y2JseHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZSFZ1YzNWd2NHOXlkR1ZrSUdSaGRHRWdkSGx3WlRvZ0pIdDBlWEJsVUhKdmRHOTlZQ2s3WEc0Z0lIMWNibjA3WEc1Y2JpOHFLbHh1SUNvZ1oyVjBJSFJsYm5OdmNpQmxiR1Z0Wlc1MElITnBlbVVnYVc0Z1lubDBaWE1nWW5rZ2RHaGxJR2RwZG1WdUlHUmhkR0VnZEhsd1pWeHVJQ29nUUhKbGRIVnlibk1nYzJsNlpTQnBiaUJwYm5SbFoyVnlJRzl5SUhWdVpHVm1hVzVsWkNCcFppQjBhR1VnWkdGMFlTQjBlWEJsSUdseklHNXZkQ0J6ZFhCd2IzSjBaV1JjYmlBcUwxeHVaWGh3YjNKMElHTnZibk4wSUdkbGRGUmxibk52Y2tWc1pXMWxiblJUYVhwbElEMGdLR1JoZEdWVWVYQmxPaUJ1ZFcxaVpYSXBPaUJ1ZFcxaVpYSjhYRzRnSUNBZ2RXNWtaV1pwYm1Wa0lEMCtJRnQxYm1SbFptbHVaV1FzSURRc0lERXNJREVzSURJc0lESXNJRFFzSURnc0lIVnVaR1ZtYVc1bFpDd2dNU3dnTWl3Z09Dd2dOQ3dnT0N3Z2RXNWtaV1pwYm1Wa0xDQjFibVJsWm1sdVpXUXNJSFZ1WkdWbWFXNWxaRjFiWkdGMFpWUjVjR1ZkTzF4dVhHNHZLaXBjYmlBcUlHZGxkQ0IwZVhCbFpDQmhjbkpoZVNCamIyNXpkSEoxWTNSdmNpQmllU0IwYUdVZ1oybDJaVzRnZEdWdWMyOXlJSFI1Y0dWY2JpQXFMMXh1Wlhod2IzSjBJR052Ym5OMElIUmxibk52Y2xSNWNHVlViMVI1Y0dWa1FYSnlZWGxEYjI1emRISjFZM1J2Y2lBOUlDaDBlWEJsT2lCVVpXNXpiM0l1Vkhsd1pTazZJRVpzYjJGME16SkJjbkpoZVVOdmJuTjBjblZqZEc5eWZGVnBiblE0UVhKeVlYbERiMjV6ZEhKMVkzUnZjbnhjYmlBZ0lDQkpiblE0UVhKeVlYbERiMjV6ZEhKMVkzUnZjbnhWYVc1ME1UWkJjbkpoZVVOdmJuTjBjblZqZEc5eWZFbHVkREUyUVhKeVlYbERiMjV6ZEhKMVkzUnZjbnhKYm5Rek1rRnljbUY1UTI5dWMzUnlkV04wYjNKOFFtbG5TVzUwTmpSQmNuSmhlVU52Ym5OMGNuVmpkRzl5ZkZ4dUlDQWdJRlZwYm5RNFFYSnlZWGxEYjI1emRISjFZM1J2Y254R2JHOWhkRFkwUVhKeVlYbERiMjV6ZEhKMVkzUnZjbnhWYVc1ME16SkJjbkpoZVVOdmJuTjBjblZqZEc5eWZFSnBaMVZwYm5RMk5FRnljbUY1UTI5dWMzUnlkV04wYjNJZ1BUNGdlMXh1SUNBZ0lDQWdjM2RwZEdOb0lDaDBlWEJsS1NCN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnSjJac2IyRjBNVFluT2x4dUlDQWdJQ0FnSUNBZ0lDOHZJR0ZzYkc5M0lFWnNiMkYwTVRaQmNuSmhlU0J3YjJ4NVptbHNiQzVjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEhsd1pXOW1JRVpzYjJGME1UWkJjbkpoZVNBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NnSmlZZ1JteHZZWFF4TmtGeWNtRjVMbVp5YjIwZ1B5QkdiRzloZERFMlFYSnlZWGtnT2lCVmFXNTBNVFpCY25KaGVUdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBblpteHZZWFF6TWljNlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFWnNiMkYwTXpKQmNuSmhlVHRjYmlBZ0lDQWdJQ0FnWTJGelpTQW5kV2x1ZERnbk9seHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQlZhVzUwT0VGeWNtRjVPMXh1SUNBZ0lDQWdJQ0JqWVhObElDZHBiblE0SnpwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1NXNTBPRUZ5Y21GNU8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNkMWFXNTBNVFluT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCVmFXNTBNVFpCY25KaGVUdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbmFXNTBNVFluT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCSmJuUXhOa0Z5Y21GNU8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNkcGJuUXpNaWM2WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUVsdWRETXlRWEp5WVhrN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnSjJKdmIyd25PbHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJWYVc1ME9FRnljbUY1TzF4dUlDQWdJQ0FnSUNCallYTmxJQ2RtYkc5aGREWTBKenBjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnUm14dllYUTJORUZ5Y21GNU8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNkMWFXNTBNekluT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCVmFXNTBNekpCY25KaGVUdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbmFXNTBOalFuT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCQ2FXZEpiblEyTkVGeWNtRjVPMXh1SUNBZ0lDQWdJQ0JqWVhObElDZDFhVzUwTmpRbk9seHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQkNhV2RWYVc1ME5qUkJjbkpoZVR0Y2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lIVnVjM1Z3Y0c5eWRHVmtJSFI1Y0dVNklDUjdkSGx3WlgxZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVYRzR2S2lwY2JpQXFJRTFoY0NCemRISnBibWNnYkc5bklHeGxkbVZzSUhSdklHbHVkR1ZuWlhJZ2RtRnNkV1ZjYmlBcUwxeHVaWGh3YjNKMElHTnZibk4wSUd4dloweGxkbVZzVTNSeWFXNW5WRzlGYm5WdElEMGdLR3h2WjB4bGRtVnNQem9nSjNabGNtSnZjMlVuZkNkcGJtWnZKM3duZDJGeWJtbHVaeWQ4SjJWeWNtOXlKM3duWm1GMFlXd25LVG9nYm5WdFltVnlJRDArSUh0Y2JpQWdjM2RwZEdOb0lDaHNiMmRNWlhabGJDa2dlMXh1SUNBZ0lHTmhjMlVnSjNabGNtSnZjMlVuT2x4dUlDQWdJQ0FnY21WMGRYSnVJREE3WEc0Z0lDQWdZMkZ6WlNBbmFXNW1ieWM2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdNVHRjYmlBZ0lDQmpZWE5sSUNkM1lYSnVhVzVuSnpwY2JpQWdJQ0FnSUhKbGRIVnliaUF5TzF4dUlDQWdJR05oYzJVZ0oyVnljbTl5SnpwY2JpQWdJQ0FnSUhKbGRIVnliaUF6TzF4dUlDQWdJR05oYzJVZ0oyWmhkR0ZzSnpwY2JpQWdJQ0FnSUhKbGRIVnliaUEwTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lIVnVjM1Z3Y0c5eWRHVmtJR3h2WjJkcGJtY2diR1YyWld3NklDUjdiRzluVEdWMlpXeDlZQ2s3WEc0Z0lIMWNibjA3WEc1Y2JpOHFLbHh1SUNvZ1EyaGxZMnNnZDJobGRHaGxjaUIwYUdVZ1oybDJaVzRnZEdWdWMyOXlJSFI1Y0dVZ2FYTWdjM1Z3Y0c5eWRHVmtJR0o1SUVkUVZTQmlkV1ptWlhKY2JpQXFMMXh1Wlhod2IzSjBJR052Ym5OMElHbHpSM0IxUW5WbVptVnlVM1Z3Y0c5eWRHVmtWSGx3WlNBOUlDaDBlWEJsT2lCVVpXNXpiM0l1Vkhsd1pTazZJSFI1Y0dVZ2FYTWdWR1Z1YzI5eUxrZHdkVUoxWm1abGNrUmhkR0ZVZVhCbGN5QTlQaUIwZVhCbElEMDlQU0FuWm14dllYUXpNaWNnZkh4Y2JpQWdJQ0IwZVhCbElEMDlQU0FuWm14dllYUXhOaWNnZkh3Z2RIbHdaU0E5UFQwZ0oybHVkRE15SnlCOGZDQjBlWEJsSUQwOVBTQW5hVzUwTmpRbklIeDhJSFI1Y0dVZ1BUMDlJQ2QxYVc1ME16SW5JSHg4SUhSNWNHVWdQVDA5SUNkMWFXNTBPQ2NnZkh4Y2JpQWdJQ0IwZVhCbElEMDlQU0FuWW05dmJDYzdYRzVjYmk4cUtseHVJQ29nVFdGd0lITjBjbWx1WnlCa1lYUmhJR3h2WTJGMGFXOXVJSFJ2SUdsdWRHVm5aWElnZG1Gc2RXVmNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJR1JoZEdGTWIyTmhkR2x2YmxOMGNtbHVaMVJ2Ulc1MWJTQTlJQ2hzYjJOaGRHbHZiam9nVkdWdWMyOXlMa1JoZEdGTWIyTmhkR2x2YmlrNklHNTFiV0psY2lBOVBpQjdYRzRnSUhOM2FYUmphQ0FvYkc5allYUnBiMjRwSUh0Y2JpQWdJQ0JqWVhObElDZHViMjVsSnpwY2JpQWdJQ0FnSUhKbGRIVnliaUF3TzF4dUlDQWdJR05oYzJVZ0oyTndkU2M2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdNVHRjYmlBZ0lDQmpZWE5sSUNkamNIVXRjR2x1Ym1Wa0p6cGNiaUFnSUNBZ0lISmxkSFZ5YmlBeU8xeHVJQ0FnSUdOaGMyVWdKM1JsZUhSMWNtVW5PbHh1SUNBZ0lDQWdjbVYwZFhKdUlETTdYRzRnSUNBZ1kyRnpaU0FuWjNCMUxXSjFabVpsY2ljNlhHNGdJQ0FnSUNCeVpYUjFjbTRnTkR0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQjFibk4xY0hCdmNuUmxaQ0JrWVhSaElHeHZZMkYwYVc5dU9pQWtlMnh2WTJGMGFXOXVmV0FwTzF4dUlDQjlYRzU5TzF4dVhHNHZLaXBjYmlBcUlFMWhjQ0JwYm5SbFoyVnlJR1JoZEdFZ2JHOWpZWFJwYjI0Z2RHOGdjM1J5YVc1bklIWmhiSFZsWEc0Z0tpOWNibVY0Y0c5eWRDQmpiMjV6ZENCa1lYUmhURzlqWVhScGIyNUZiblZ0Vkc5VGRISnBibWNnUFNBb2JHOWpZWFJwYjI0NklHNTFiV0psY2lrNklGUmxibk52Y2k1RVlYUmhURzlqWVhScGIyNThkVzVrWldacGJtVmtJRDArWEc0Z0lDQWdLRnNuYm05dVpTY3NJQ2RqY0hVbkxDQW5ZM0IxTFhCcGJtNWxaQ2NzSUNkMFpYaDBkWEpsSnl3Z0oyZHdkUzFpZFdabVpYSW5YU0JoY3lCamIyNXpkQ2xiYkc5allYUnBiMjVkTzF4dUlpd2dJaTh2SUVOdmNIbHlhV2RvZENBb1l5a2dUV2xqY205emIyWjBJRU52Y25CdmNtRjBhVzl1TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVMeThnVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUUxSlZDQk1hV05sYm5ObExseHVYRzVwYlhCdmNuUWdlMEpoWTJ0bGJtUjlJR1p5YjIwZ0p5NHZZbUZqYTJWdVpDNXFjeWM3WEc1cGJYQnZjblFnZTBsdVptVnlaVzVqWlZObGMzTnBiMjU5SUdaeWIyMGdKeTR2YVc1bVpYSmxibU5sTFhObGMzTnBiMjR1YW5Nbk8xeHVYRzVwYm5SbGNtWmhZMlVnUW1GamEyVnVaRWx1Wm04Z2UxeHVJQ0JpWVdOclpXNWtPaUJDWVdOclpXNWtPMXh1SUNCd2NtbHZjbWwwZVRvZ2JuVnRZbVZ5TzF4dVhHNGdJR2x1YVhSUWNtOXRhWE5sUHpvZ1VISnZiV2x6WlR4MmIybGtQanRjYmlBZ2FXNXBkR2xoYkdsNlpXUS9PaUJpYjI5c1pXRnVPMXh1SUNCaFltOXlkR1ZrUHpvZ1ltOXZiR1ZoYmp0Y2JpQWdaWEp5YjNJL09pQnpkSEpwYm1jN1hHNTlYRzVjYm1OdmJuTjBJR0poWTJ0bGJtUnpPaUJOWVhBOGMzUnlhVzVuTENCQ1lXTnJaVzVrU1c1bWJ6NGdQU0J1WlhjZ1RXRndLQ2s3WEc1amIyNXpkQ0JpWVdOclpXNWtjMU52Y25SbFpFSjVVSEpwYjNKcGRIazZJSE4wY21sdVoxdGRJRDBnVzEwN1hHNWNiaThxS2x4dUlDb2dVbVZuYVhOMFpYSWdZU0JpWVdOclpXNWtMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQnVZVzFsSUMwZ2RHaGxJRzVoYldVZ1lYTWdZU0JyWlhrZ2RHOGdiRzl2YTNWd0lHRnpJR0Z1SUdWNFpXTjFkR2x2YmlCd2NtOTJhV1JsY2k1Y2JpQXFJRUJ3WVhKaGJTQmlZV05yWlc1a0lDMGdkR2hsSUdKaFkydGxibVFnYjJKcVpXTjBMbHh1SUNvZ1FIQmhjbUZ0SUhCeWFXOXlhWFI1SUMwZ1lXNGdhVzUwWldkbGNpQnBibVJwWTJGMGFXNW5JSFJvWlNCd2NtbHZjbWwwZVNCdlppQjBhR1VnWW1GamEyVnVaQzRnU0dsbmFHVnlJRzUxYldKbGNpQnRaV0Z1Y3lCb2FXZG9aWElnY0hKcGIzSnBkSGt1SUdsbUlIQnlhVzl5YVhSNVhHNGdLaUE4SURBc0lHbDBJSGRwYkd3Z1ltVWdZMjl1YzJsa1pYSmxaQ0JoY3lCaElDZGlaWFJoSnlCMlpYSnphVzl1SUdGdVpDQjNhV3hzSUc1dmRDQmlaU0IxYzJWa0lHRnpJR0VnWm1Gc2JHSmhZMnNnWW1GamEyVnVaQ0JpZVNCa1pXWmhkV3gwTGx4dUlDcGNiaUFxSUVCcFoyNXZjbVZjYmlBcUwxeHVaWGh3YjNKMElHTnZibk4wSUhKbFoybHpkR1Z5UW1GamEyVnVaQ0E5SUNodVlXMWxPaUJ6ZEhKcGJtY3NJR0poWTJ0bGJtUTZJRUpoWTJ0bGJtUXNJSEJ5YVc5eWFYUjVPaUJ1ZFcxaVpYSXBPaUIyYjJsa0lEMCtJSHRjYmlBZ2FXWWdLR0poWTJ0bGJtUWdKaVlnZEhsd1pXOW1JR0poWTJ0bGJtUXVhVzVwZENBOVBUMGdKMloxYm1OMGFXOXVKeUFtSmlCMGVYQmxiMllnWW1GamEyVnVaQzVqY21WaGRHVkpibVpsY21WdVkyVlRaWE56YVc5dVNHRnVaR3hsY2lBOVBUMGdKMloxYm1OMGFXOXVKeWtnZTF4dUlDQWdJR052Ym5OMElHTjFjbkpsYm5SQ1lXTnJaVzVrSUQwZ1ltRmphMlZ1WkhNdVoyVjBLRzVoYldVcE8xeHVJQ0FnSUdsbUlDaGpkWEp5Wlc1MFFtRmphMlZ1WkNBOVBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0JpWVdOclpXNWtjeTV6WlhRb2JtRnRaU3dnZTJKaFkydGxibVFzSUhCeWFXOXlhWFI1ZlNrN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoamRYSnlaVzUwUW1GamEyVnVaQzV3Y21sdmNtbDBlU0ErSUhCeWFXOXlhWFI1S1NCN1hHNGdJQ0FnSUNBdkx5QnpZVzFsSUc1aGJXVWdhWE1nWVd4eVpXRmtlU0J5WldkcGMzUmxjbVZrSUhkcGRHZ2dZU0JvYVdkb1pYSWdjSEpwYjNKcGRIa3VJSE5yYVhBZ2NtVm5hWE4wWlhKaGRHbHZiaTVjYmlBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHTjFjbkpsYm5SQ1lXTnJaVzVrTG5CeWFXOXlhWFI1SUQwOVBTQndjbWx2Y21sMGVTa2dlMXh1SUNBZ0lDQWdhV1lnS0dOMWNuSmxiblJDWVdOclpXNWtMbUpoWTJ0bGJtUWdJVDA5SUdKaFkydGxibVFwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCallXNXViM1FnY21WbmFYTjBaWElnWW1GamEyVnVaQ0JjSWlSN2JtRnRaWDFjSWlCMWMybHVaeUJ3Y21sdmNtbDBlU0FrZTNCeWFXOXlhWFI1ZldBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHdjbWx2Y21sMGVTQStQU0F3S1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JwSUQwZ1ltRmphMlZ1WkhOVGIzSjBaV1JDZVZCeWFXOXlhWFI1TG1sdVpHVjRUMllvYm1GdFpTazdYRzRnSUNBZ0lDQnBaaUFvYVNBaFBUMGdMVEVwSUh0Y2JpQWdJQ0FnSUNBZ1ltRmphMlZ1WkhOVGIzSjBaV1JDZVZCeWFXOXlhWFI1TG5Od2JHbGpaU2hwTENBeEtUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JpWVdOclpXNWtjMU52Y25SbFpFSjVVSEpwYjNKcGRIa3ViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR0poWTJ0bGJtUnpMbWRsZENoaVlXTnJaVzVrYzFOdmNuUmxaRUo1VUhKcGIzSnBkSGxiYVYwcElTNXdjbWx2Y21sMGVTQThQU0J3Y21sdmNtbDBlU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHSmhZMnRsYm1SelUyOXlkR1ZrUW5sUWNtbHZjbWwwZVM1emNHeHBZMlVvYVN3Z01Dd2dibUZ0WlNrN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmlZV05yWlc1a2MxTnZjblJsWkVKNVVISnBiM0pwZEhrdWNIVnphQ2h1WVcxbEtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNWNiaUFnZEdoeWIzY2dibVYzSUZSNWNHVkZjbkp2Y2lnbmJtOTBJR0VnZG1Gc2FXUWdZbUZqYTJWdVpDY3BPMXh1ZlR0Y2JseHVMeW9xWEc0Z0tpQlVjbmtnZEc4Z2NtVnpiMngyWlNCaGJtUWdhVzVwZEdsaGJHbDZaU0JoSUdKaFkydGxibVF1WEc0Z0tseHVJQ29nUUhCaGNtRnRJR0poWTJ0bGJtUk9ZVzFsSUMwZ2RHaGxJRzVoYldVZ2IyWWdkR2hsSUdKaFkydGxibVF1WEc0Z0tpQkFjbVYwZFhKdWN5QjBhR1VnWW1GamEyVnVaQ0JwYm5OMFlXNWpaU0JwWmlCeVpYTnZiSFpsWkNCaGJtUWdhVzVwZEdsaGJHbDZaV1FnYzNWalkyVnpjMloxYkd4NUxDQnZjaUJoYmlCbGNuSnZjaUJ0WlhOellXZGxJR2xtSUdaaGFXeGxaQzVjYmlBcUwxeHVZMjl1YzNRZ2RISjVVbVZ6YjJ4MlpVRnVaRWx1YVhScFlXeHBlbVZDWVdOclpXNWtJRDBnWVhONWJtTW9ZbUZqYTJWdVpFNWhiV1U2SUhOMGNtbHVaeWs2SUZCeWIyMXBjMlU4UW1GamEyVnVaSHh6ZEhKcGJtYytJRDArSUh0Y2JpQWdZMjl1YzNRZ1ltRmphMlZ1WkVsdVptOGdQU0JpWVdOclpXNWtjeTVuWlhRb1ltRmphMlZ1WkU1aGJXVXBPMXh1SUNCcFppQW9JV0poWTJ0bGJtUkpibVp2S1NCN1hHNGdJQ0FnY21WMGRYSnVJQ2RpWVdOclpXNWtJRzV2ZENCbWIzVnVaQzRuTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR0poWTJ0bGJtUkpibVp2TG1sdWFYUnBZV3hwZW1Wa0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUdKaFkydGxibVJKYm1adkxtSmhZMnRsYm1RN1hHNGdJSDBnWld4elpTQnBaaUFvWW1GamEyVnVaRWx1Wm04dVlXSnZjblJsWkNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJpWVdOclpXNWtTVzVtYnk1bGNuSnZjaUU3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnWTI5dWMzUWdhWE5KYm1sMGFXRnNhWHBwYm1jZ1BTQWhJV0poWTJ0bGJtUkpibVp2TG1sdWFYUlFjbTl0YVhObE8xeHVJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQnBaaUFvSVdselNXNXBkR2xoYkdsNmFXNW5LU0I3WEc0Z0lDQWdJQ0FnSUdKaFkydGxibVJKYm1adkxtbHVhWFJRY205dGFYTmxJRDBnWW1GamEyVnVaRWx1Wm04dVltRmphMlZ1WkM1cGJtbDBLR0poWTJ0bGJtUk9ZVzFsS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdGM1lXbDBJR0poWTJ0bGJtUkpibVp2TG1sdWFYUlFjbTl0YVhObE8xeHVJQ0FnSUNBZ1ltRmphMlZ1WkVsdVptOHVhVzVwZEdsaGJHbDZaV1FnUFNCMGNuVmxPMXh1SUNBZ0lDQWdjbVYwZFhKdUlHSmhZMnRsYm1SSmJtWnZMbUpoWTJ0bGJtUTdYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdhV1lnS0NGcGMwbHVhWFJwWVd4cGVtbHVaeWtnZTF4dUlDQWdJQ0FnSUNCaVlXTnJaVzVrU1c1bWJ5NWxjbkp2Y2lBOUlHQWtlMlY5WUR0Y2JpQWdJQ0FnSUNBZ1ltRmphMlZ1WkVsdVptOHVZV0p2Y25SbFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCeVpYUjFjbTRnWW1GamEyVnVaRWx1Wm04dVpYSnliM0loTzF4dUlDQWdJSDBnWm1sdVlXeHNlU0I3WEc0Z0lDQWdJQ0JrWld4bGRHVWdZbUZqYTJWdVpFbHVabTh1YVc1cGRGQnliMjFwYzJVN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5TzF4dVhHNHZLaXBjYmlBcUlGSmxjMjlzZG1VZ1pYaGxZM1YwYVc5dUlIQnliM1pwWkdWeWN5Qm1jbTl0SUhSb1pTQnpjR1ZqYVdacFl5QnpaWE56YVc5dUlHOXdkR2x2Ym5NdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUc5d2RHbHZibk1nTFNCMGFHVWdjMlZ6YzJsdmJpQnZjSFJwYjI1eklHOWlhbVZqZEM1Y2JpQXFJRUJ5WlhSMWNtNXpJR0VnY0hKdmJXbHpaU0IwYUdGMElISmxjMjlzZG1WeklIUnZJR0VnZEhWd2JHVWdiMllnWVc0Z2FXNXBkR2xoYkdsNlpXUWdZbUZqYTJWdVpDQnBibk4wWVc1alpTQmhibVFnWVNCelpYTnphVzl1SUc5d2RHbHZibk1nYjJKcVpXTjBJSGRwZEdoY2JpQXFJR1pwYkhSbGNtVmtJRVZRSUd4cGMzUXVYRzRnS2x4dUlDb2dRR2xuYm05eVpWeHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdjbVZ6YjJ4MlpVSmhZMnRsYm1SQmJtUkZlR1ZqZFhScGIyNVFjbTkyYVdSbGNuTWdQU0JoYzNsdVl5aHZjSFJwYjI1ek9pQkpibVpsY21WdVkyVlRaWE56YVc5dUxsTmxjM05wYjI1UGNIUnBiMjV6S1RwY2JpQWdJQ0JRY205dGFYTmxQRnRpWVdOclpXNWtPaUJDWVdOclpXNWtMQ0J2Y0hScGIyNXpPaUJKYm1abGNtVnVZMlZUWlhOemFXOXVMbE5sYzNOcGIyNVBjSFJwYjI1elhUNGdQVDRnZTF4dUlDQWdJQ0FnTHk4Z1pYaDBjbUZqZENCaVlXTnJaVzVrSUdocGJuUnpJR1p5YjIwZ2MyVnpjMmx2YmlCdmNIUnBiMjV6WEc0Z0lDQWdJQ0JqYjI1emRDQmxjSE1nUFNCdmNIUnBiMjV6TG1WNFpXTjFkR2x2YmxCeWIzWnBaR1Z5Y3lCOGZDQmJYVHRjYmlBZ0lDQWdJR052Ym5OMElHSmhZMnRsYm1SSWFXNTBjeUE5SUdWd2N5NXRZWEFvYVNBOVBpQjBlWEJsYjJZZ2FTQTlQVDBnSjNOMGNtbHVaeWNnUHlCcElEb2dhUzV1WVcxbEtUdGNiaUFnSUNBZ0lHTnZibk4wSUdKaFkydGxibVJPWVcxbGN5QTlJR0poWTJ0bGJtUklhVzUwY3k1c1pXNW5kR2dnUFQwOUlEQWdQeUJpWVdOclpXNWtjMU52Y25SbFpFSjVVSEpwYjNKcGRIa2dPaUJpWVdOclpXNWtTR2x1ZEhNN1hHNWNiaUFnSUNBZ0lDOHZJSFJ5ZVNCMGJ5QnlaWE52YkhabElHRnVaQ0JwYm1sMGFXRnNhWHBsSUdGc2JDQnlaWEYxWlhOMFpXUWdZbUZqYTJWdVpITmNiaUFnSUNBZ0lHeGxkQ0JpWVdOclpXNWtPaUJDWVdOclpXNWtmSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQWdJR052Ym5OMElHVnljbTl5Y3lBOUlGdGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ1lYWmhhV3hoWW14bFFtRmphMlZ1WkU1aGJXVnpJRDBnYm1WM0lGTmxkRHh6ZEhKcGJtYytLQ2s3WEc0Z0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUdKaFkydGxibVJPWVcxbElHOW1JR0poWTJ0bGJtUk9ZVzFsY3lrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCeVpYTnZiSFpsVW1WemRXeDBJRDBnWVhkaGFYUWdkSEo1VW1WemIyeDJaVUZ1WkVsdWFYUnBZV3hwZW1WQ1lXTnJaVzVrS0dKaFkydGxibVJPWVcxbEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ5WlhOdmJIWmxVbVZ6ZFd4MElEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHVnljbTl5Y3k1d2RYTm9LSHR1WVcxbE9pQmlZV05yWlc1a1RtRnRaU3dnWlhKeU9pQnlaWE52YkhabFVtVnpkV3gwZlNrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0NGaVlXTnJaVzVrS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpWVdOclpXNWtJRDBnY21WemIyeDJaVkpsYzNWc2REdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR0poWTJ0bGJtUWdQVDA5SUhKbGMyOXNkbVZTWlhOMWJIUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRjJZV2xzWVdKc1pVSmhZMnRsYm1ST1lXMWxjeTVoWkdRb1ltRmphMlZ1WkU1aGJXVXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQXZMeUJwWmlCdWJ5QmlZV05yWlc1a0lHbHpJR0YyWVdsc1lXSnNaU3dnZEdoeWIzY2daWEp5YjNJdVhHNGdJQ0FnSUNCcFppQW9JV0poWTJ0bGJtUXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0J1YnlCaGRtRnBiR0ZpYkdVZ1ltRmphMlZ1WkNCbWIzVnVaQzRnUlZKU09pQWtlMlZ5Y205eWN5NXRZWEFvWlNBOVBpQmdXeVI3WlM1dVlXMWxmVjBnSkh0bExtVnljbjFnS1M1cWIybHVLQ2NzSUNjcGZXQXBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0F2THlCbWIzSWdaV0ZqYUNCbGVIQnNhV05wZEd4NUlISmxjWFZsYzNSbFpDQmlZV05yWlc1a0xDQnBaaUJwZENkeklHNXZkQ0JoZG1GcGJHRmliR1VzSUc5MWRIQjFkQ0IzWVhKdWFXNW5JRzFsYzNOaFoyVXVYRzRnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJSHR1WVcxbExDQmxjbko5SUc5bUlHVnljbTl5Y3lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWW1GamEyVnVaRWhwYm5SekxtbHVZMngxWkdWektHNWhiV1VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJRzV2TFdOdmJuTnZiR1ZjYmlBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG5kaGNtNG9ZSEpsYlc5MmFXNW5JSEpsY1hWbGMzUmxaQ0JsZUdWamRYUnBiMjRnY0hKdmRtbGtaWElnWENJa2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVlXMWxmVndpSUdaeWIyMGdjMlZ6YzJsdmJpQnZjSFJwYjI1eklHSmxZMkYxYzJVZ2FYUWdhWE1nYm05MElHRjJZV2xzWVdKc1pUb2dKSHRsY25KOVlDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWTI5dWMzUWdabWxzZEdWeVpXUkZjSE1nUFNCbGNITXVabWxzZEdWeUtHa2dQVDRnWVhaaGFXeGhZbXhsUW1GamEyVnVaRTVoYldWekxtaGhjeWgwZVhCbGIyWWdhU0E5UFQwZ0ozTjBjbWx1WnljZ1B5QnBJRG9nYVM1dVlXMWxLU2s3WEc1Y2JpQWdJQ0FnSUhKbGRIVnliaUJiWEc0Z0lDQWdJQ0FnSUdKaFkydGxibVFzSUc1bGR5QlFjbTk0ZVNodmNIUnBiMjV6TENCN1hHNGdJQ0FnSUNBZ0lDQWdaMlYwT2lBb2RHRnlaMlYwTENCd2NtOXdLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NISnZjQ0E5UFQwZ0oyVjRaV04xZEdsdmJsQnliM1pwWkdWeWN5Y3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHWnBiSFJsY21Wa1JYQnpPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRkpsWm14bFkzUXVaMlYwS0hSaGNtZGxkQ3dnY0hKdmNDazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUNBZ1hUdGNiaUFnSUNCOU8xeHVJaXdnSWk4dklFTnZjSGx5YVdkb2RDQW9ZeWtnVFdsamNtOXpiMlowSUVOdmNuQnZjbUYwYVc5dUxpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1THk4Z1RHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFMUpWQ0JNYVdObGJuTmxMbHh1WEc1cGJYQnZjblFnZTBsdVptVnlaVzVqWlZObGMzTnBiMjU5SUdaeWIyMGdKeTR2YVc1bVpYSmxibU5sTFhObGMzTnBiMjR1YW5Nbk8xeHVhVzF3YjNKMElIdFBibTU0Vm1Gc2RXVjlJR1p5YjIwZ0p5NHZiMjV1ZUMxMllXeDFaUzVxY3ljN1hHNXBiWEJ2Y25RZ2UxUnlZV2x1YVc1blUyVnpjMmx2Ym4wZ1puSnZiU0FuTGk5MGNtRnBibWx1WnkxelpYTnphVzl1TG1wekp6dGNibHh1THlvcVhHNGdLaUJBYVdkdWIzSmxYRzRnS2k5Y2JtVjRjRzl5ZENCa1pXTnNZWEpsSUc1aGJXVnpjR0ZqWlNCVFpYTnphVzl1U0dGdVpHeGxjaUI3WEc0Z0lIUjVjR1VnUm1WbFpITlVlWEJsSUQwZ2UxdHVZVzFsT2lCemRISnBibWRkT2lCUGJtNTRWbUZzZFdWOU8xeHVJQ0IwZVhCbElFWmxkR05vWlhOVWVYQmxJRDBnZTF0dVlXMWxPaUJ6ZEhKcGJtZGRPaUJQYm01NFZtRnNkV1VnZkNCdWRXeHNmVHRjYmlBZ2RIbHdaU0JTWlhSMWNtNVVlWEJsSUQwZ2UxdHVZVzFsT2lCemRISnBibWRkT2lCUGJtNTRWbUZzZFdWOU8xeHVmVnh1WEc0dktpcGNiaUFxSUZKbGNISmxjMlZ1ZEhNZ2MyaGhjbVZrSUZObGMzTnBiMjVJWVc1a2JHVnlJR1oxYm1OMGFXOXVZV3hwZEhsY2JpQXFYRzRnS2lCQWFXZHViM0psWEc0Z0tpOWNibWx1ZEdWeVptRmpaU0JUWlhOemFXOXVTR0Z1Wkd4bGNpQjdYRzRnSUdScGMzQnZjMlVvS1RvZ1VISnZiV2x6WlR4MmIybGtQanRjYmx4dUlDQnlaV0ZrYjI1c2VTQnBibkIxZEU1aGJXVnpPaUJ5WldGa2IyNXNlU0J6ZEhKcGJtZGJYVHRjYmlBZ2NtVmhaRzl1YkhrZ2IzVjBjSFYwVG1GdFpYTTZJSEpsWVdSdmJteDVJSE4wY21sdVoxdGRPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGSmxjSEpsYzJWdWRDQmhJR2hoYm1Sc1pYSWdhVzV6ZEdGdVkyVWdiMllnWVc0Z2FXNW1aWEpsYm1ObElITmxjM05wYjI0dVhHNGdLbHh1SUNvZ1FHbG5ibTl5WlZ4dUlDb3ZYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNUlZVzVrYkdWeUlHVjRkR1Z1WkhNZ1UyVnpjMmx2YmtoaGJtUnNaWElnZTF4dUlDQnpkR0Z5ZEZCeWIyWnBiR2x1WnlncE9pQjJiMmxrTzF4dUlDQmxibVJRY205bWFXeHBibWNvS1RvZ2RtOXBaRHRjYmx4dUlDQnlkVzRvWm1WbFpITTZJRk5sYzNOcGIyNUlZVzVrYkdWeUxrWmxaV1J6Vkhsd1pTd2dabVYwWTJobGN6b2dVMlZ6YzJsdmJraGhibVJzWlhJdVJtVjBZMmhsYzFSNWNHVXNYRzRnSUNBZ0lDQnZjSFJwYjI1ek9pQkpibVpsY21WdVkyVlRaWE56YVc5dUxsSjFiazl3ZEdsdmJuTXBPaUJRY205dGFYTmxQRk5sYzNOcGIyNUlZVzVrYkdWeUxsSmxkSFZ5YmxSNWNHVStPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGSmxjSEpsYzJWdWRDQmhJR2hoYm1Sc1pYSWdhVzV6ZEdGdVkyVWdiMllnWVNCMGNtRnBibWx1WnlCcGJtWmxjbVZ1WTJVZ2MyVnpjMmx2Ymk1Y2JpQXFYRzRnS2lCQWFXZHViM0psWEc0Z0tpOWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdWSEpoYVc1cGJtZFRaWE56YVc5dVNHRnVaR3hsY2lCbGVIUmxibVJ6SUZObGMzTnBiMjVJWVc1a2JHVnlJSHRjYmlBZ2NtVmhaRzl1YkhrZ1pYWmhiRWx1Y0hWMFRtRnRaWE02SUhKbFlXUnZibXg1SUhOMGNtbHVaMXRkTzF4dUlDQnlaV0ZrYjI1c2VTQmxkbUZzVDNWMGNIVjBUbUZ0WlhNNklISmxZV1J2Ym14NUlITjBjbWx1WjF0ZE8xeHVYRzRnSUd4aGVubFNaWE5sZEVkeVlXUW9LVG9nVUhKdmJXbHpaVHgyYjJsa1BqdGNiaUFnY25WdVZISmhhVzVUZEdWd0tGeHVJQ0FnSUNBZ1ptVmxaSE02SUZObGMzTnBiMjVJWVc1a2JHVnlMa1psWldSelZIbHdaU3dnWm1WMFkyaGxjem9nVTJWemMybHZia2hoYm1Sc1pYSXVSbVYwWTJobGMxUjVjR1VzWEc0Z0lDQWdJQ0J2Y0hScGIyNXpPaUJKYm1abGNtVnVZMlZUWlhOemFXOXVMbEoxYms5d2RHbHZibk1wT2lCUWNtOXRhWE5sUEZObGMzTnBiMjVJWVc1a2JHVnlMbEpsZEhWeWJsUjVjR1UrTzF4dUlDQnlkVzVQY0hScGJXbDZaWEpUZEdWd0tHOXdkR2x2Ym5NNklFbHVabVZ5Wlc1alpWTmxjM05wYjI0dVVuVnVUM0IwYVc5dWN5azZJRkJ5YjIxcGMyVThkbTlwWkQ0N1hHNGdJSEoxYmtWMllXeFRkR1Z3S0Z4dUlDQWdJQ0FnWm1WbFpITTZJRk5sYzNOcGIyNUlZVzVrYkdWeUxrWmxaV1J6Vkhsd1pTd2dabVYwWTJobGN6b2dVMlZ6YzJsdmJraGhibVJzWlhJdVJtVjBZMmhsYzFSNWNHVXNYRzRnSUNBZ0lDQnZjSFJwYjI1ek9pQkpibVpsY21WdVkyVlRaWE56YVc5dUxsSjFiazl3ZEdsdmJuTXBPaUJRY205dGFYTmxQRk5sYzNOcGIyNUlZVzVrYkdWeUxsSmxkSFZ5YmxSNWNHVStPMXh1WEc0Z0lHZGxkRkJoY21GdFpYUmxjbk5UYVhwbEtIUnlZV2x1WVdKc1pVOXViSGs2SUdKdmIyeGxZVzRwT2lCUWNtOXRhWE5sUEc1MWJXSmxjajQ3WEc0Z0lHeHZZV1JRWVhKaGJXVjBaWEp6UW5WbVptVnlLR0oxWm1abGNqb2dWV2x1ZERoQmNuSmhlU3dnZEhKaGFXNWhZbXhsVDI1c2VUb2dZbTl2YkdWaGJpazZJRkJ5YjIxcGMyVThkbTlwWkQ0N1hHNGdJR2RsZEVOdmJuUnBaM1Z2ZFhOUVlYSmhiV1YwWlhKektIUnlZV2x1WVdKc1pVOXViSGs2SUdKdmIyeGxZVzRwT2lCUWNtOXRhWE5sUEU5dWJuaFdZV3gxWlQ0N1hHNTlYRzVjYmk4cUtseHVJQ29nVW1Wd2NtVnpaVzUwSUdFZ1ltRmphMlZ1WkNCMGFHRjBJSEJ5YjNacFpHVnpJR2x0Y0d4bGJXVnVkR0YwYVc5dUlHOW1JRzF2WkdWc0lHbHVabVZ5Wlc1amFXNW5MbHh1SUNwY2JpQXFJRUJwWjI1dmNtVmNiaUFxTDF4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCQ1lXTnJaVzVrSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRWx1YVhScFlXeHBlbVVnZEdobElHSmhZMnRsYm1RZ1lYTjVibU5vY205dWIzVnpiSGt1SUZOb2IzVnNaQ0IwYUhKdmR5QjNhR1Z1SUdaaGFXeGxaQzVjYmlBZ0lDb3ZYRzRnSUdsdWFYUW9ZbUZqYTJWdVpFNWhiV1U2SUhOMGNtbHVaeWs2SUZCeWIyMXBjMlU4ZG05cFpENDdYRzVjYmlBZ1kzSmxZWFJsU1c1bVpYSmxibU5sVTJWemMybHZia2hoYm1Sc1pYSW9kWEpwVDNKQ2RXWm1aWEk2SUhOMGNtbHVaM3hWYVc1ME9FRnljbUY1TENCdmNIUnBiMjV6UHpvZ1NXNW1aWEpsYm1ObFUyVnpjMmx2Ymk1VFpYTnphVzl1VDNCMGFXOXVjeWs2WEc0Z0lDQWdJQ0JRY205dGFYTmxQRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNUlZVzVrYkdWeVBqdGNibHh1SUNCamNtVmhkR1ZVY21GcGJtbHVaMU5sYzNOcGIyNUlZVzVrYkdWeVAxeHVJQ0FnSUNBZ0tHTm9aV05yY0c5cGJuUlRkR0YwWlZWeWFVOXlRblZtWm1WeU9pQlVjbUZwYm1sdVoxTmxjM05wYjI0dVZYSnBUM0pDZFdabVpYSXNJSFJ5WVdsdVRXOWtaV3hWY21sUGNrSjFabVpsY2pvZ1ZISmhhVzVwYm1kVFpYTnphVzl1TGxWeWFVOXlRblZtWm1WeUxGeHVJQ0FnSUNBZ0lHVjJZV3hOYjJSbGJGVnlhVTl5UW5WbVptVnlPaUJVY21GcGJtbHVaMU5sYzNOcGIyNHVWWEpwVDNKQ2RXWm1aWElzSUc5d2RHbHRhWHBsY2sxdlpHVnNWWEpwVDNKQ2RXWm1aWEk2SUZSeVlXbHVhVzVuVTJWemMybHZiaTVWY21sUGNrSjFabVpsY2l4Y2JpQWdJQ0FnSUNCdmNIUnBiMjV6T2lCSmJtWmxjbVZ1WTJWVFpYTnphVzl1TGxObGMzTnBiMjVQY0hScGIyNXpLVG9nVUhKdmJXbHpaVHhVY21GcGJtbHVaMU5sYzNOcGIyNUlZVzVrYkdWeVBqdGNibjFjYmx4dVpYaHdiM0owSUh0eVpXZHBjM1JsY2tKaFkydGxibVI5SUdaeWIyMGdKeTR2WW1GamEyVnVaQzFwYlhCc0xtcHpKenRjYmlJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVMeThnVkdocGN5Qm1hV3hsSUdseklHZGxibVZ5WVhSbFpDQmllU0F2YW5NdmMyTnlhWEIwY3k5MWNHUmhkR1V0ZG1WeWMybHZiaTUwYzF4dUx5OGdSRzhnYm05MElHMXZaR2xtZVNCbWFXeGxJR052Ym5SbGJuUWdiV0Z1ZFdGc2JIa3VYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQjJaWEp6YVc5dUlEMGdKekV1TVRndU1DYzdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1JXNTJmU0JtY205dElDY3VMMlZ1ZGk1cWN5YzdYRzVwYlhCdmNuUWdlM1psY25OcGIyNTlJR1p5YjIwZ0p5NHZkbVZ5YzJsdmJpNXFjeWM3WEc1Y2JuUjVjR1VnVEc5blRHVjJaV3hVZVhCbElEMGdSVzUyV3lkc2IyZE1aWFpsYkNkZE8xeHVYRzVzWlhRZ2JHOW5UR1YyWld4V1lXeDFaVG9nVW1WeGRXbHlaV1E4VEc5blRHVjJaV3hVZVhCbFBpQTlJQ2QzWVhKdWFXNW5KenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1Z1ZGpvZ1JXNTJJRDBnZTF4dUlDQjNZWE50T2lCN2ZTQmhjeUJGYm5ZdVYyVmlRWE56WlcxaWJIbEdiR0ZuY3l4Y2JpQWdkMlZpWjJ3NklIdDlJR0Z6SUVWdWRpNVhaV0pIVEVac1lXZHpMRnh1SUNCM1pXSm5jSFU2SUh0OUlHRnpJRVZ1ZGk1WFpXSkhjSFZHYkdGbmN5eGNiaUFnZG1WeWMybHZibk02SUh0amIyMXRiMjQ2SUhabGNuTnBiMjU5TEZ4dVhHNGdJSE5sZENCc2IyZE1aWFpsYkNoMllXeDFaVG9nVEc5blRHVjJaV3hVZVhCbEtTQjdYRzRnSUNBZ2FXWWdLSFpoYkhWbElEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQjJZV3gxWlNBaFBUMGdKM04wY21sdVp5Y2dmSHdnV3lkMlpYSmliM05sSnl3Z0oybHVabThuTENBbmQyRnlibWx1Wnljc0lDZGxjbkp2Y2ljc0lDZG1ZWFJoYkNkZExtbHVaR1Y0VDJZb2RtRnNkV1VwSUQwOVBTQXRNU2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JWYm5OMWNIQnZjblJsWkNCc2IyZG5hVzVuSUd4bGRtVnNPaUFrZTNaaGJIVmxmV0FwTzF4dUlDQWdJSDFjYmlBZ0lDQnNiMmRNWlhabGJGWmhiSFZsSUQwZ2RtRnNkV1U3WEc0Z0lIMHNYRzRnSUdkbGRDQnNiMmRNWlhabGJDZ3BPaUJTWlhGMWFYSmxaRHhNYjJkTVpYWmxiRlI1Y0dVK0lIdGNiaUFnSUNCeVpYUjFjbTRnYkc5blRHVjJaV3hXWVd4MVpUdGNiaUFnZlN4Y2JuMDdYRzVjYmk4dklITmxkQ0J3Y205d1pYSjBlU0FuYkc5blRHVjJaV3duSUhOdklIUm9ZWFFnZEdobGVTQmpZVzRnWW1VZ1kyOXljbVZqZEd4NUlIUnlZVzV6Wm1WeWNtVmtJSFJ2SUhkdmNtdGxjaUJpZVNCZ2NHOXpkRTFsYzNOaFoyVW9LV0F1WEc1UFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29aVzUyTENBbmJHOW5UR1YyWld3bkxDQjdaVzUxYldWeVlXSnNaVG9nZEhKMVpYMHBPMXh1SWl3Z0lpOHZJRU52Y0hseWFXZG9kQ0FvWXlrZ1RXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUx5OGdUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRTFKVkNCTWFXTmxibk5sTGx4dVhHNXBiWEJ2Y25RZ2UyVnVkaUJoY3lCbGJuWkpiWEJzZlNCbWNtOXRJQ2N1TDJWdWRpMXBiWEJzTG1wekp6dGNibHh1Wlhod2IzSjBJR1JsWTJ4aGNtVWdibUZ0WlhOd1lXTmxJRVZ1ZGlCN1hHNGdJR1Y0Y0c5eWRDQjBlWEJsSUZkaGMyMVFjbVZtYVhoUGNrWnBiR1ZRWVhSb2N5QTlJSE4wY21sdVozeDdYRzRnSUNBZ0x5b2daWE5zYVc1MExXUnBjMkZpYkdVZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNWhiV2x1WnkxamIyNTJaVzUwYVc5dUlDb3ZYRzRnSUNBZ0oyOXlkQzEzWVhOdExuZGhjMjBuUHpvZ2MzUnlhVzVuTzF4dUlDQWdJQ2R2Y25RdGQyRnpiUzEwYUhKbFlXUmxaQzUzWVhOdEp6ODZJSE4wY21sdVp6dGNiaUFnSUNBbmIzSjBMWGRoYzIwdGMybHRaQzUzWVhOdEp6ODZJSE4wY21sdVp6dGNiaUFnSUNBbmIzSjBMWFJ5WVdsdWFXNW5MWGRoYzIwdGMybHRaQzUzWVhOdEp6ODZJSE4wY21sdVp6dGNiaUFnSUNBbmIzSjBMWGRoYzIwdGMybHRaQzEwYUhKbFlXUmxaQzUzWVhOdEp6ODZJSE4wY21sdVp6dGNiaUFnSUNBdktpQmxjMnhwYm5RdFpXNWhZbXhsSUVCMGVYQmxjMk55YVhCMExXVnpiR2x1ZEM5dVlXMXBibWN0WTI5dWRtVnVkR2x2YmlBcUwxeHVJQ0I5TzF4dUlDQmxlSEJ2Y25RZ2FXNTBaWEptWVdObElGZGxZa0Z6YzJWdFlteDVSbXhoWjNNZ2UxeHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlITmxkQ0J2Y2lCblpYUWdiblZ0WW1WeUlHOW1JSFJvY21WaFpDaHpLUzRnU1dZZ2IyMXBkSFJsWkNCdmNpQnpaWFFnZEc4Z01Dd2diblZ0WW1WeUlHOW1JSFJvY21WaFpDaHpLU0IzYVd4c0lHSmxJR1JsZEdWeWJXbHVaV1FnWW5rZ2MzbHpkR1Z0TGlCSlppQnpaWFJjYmlBZ0lDQWdLaUIwYnlBeExDQnVieUIzYjNKclpYSWdkR2h5WldGa0lIZHBiR3dnWW1VZ2MzQmhkMjVsWkM1Y2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUZSb2FYTWdjMlYwZEdsdVp5QnBjeUJoZG1GcGJHRmliR1VnYjI1c2VTQjNhR1Z1SUZkbFlrRnpjMlZ0WW14NUlHMTFiSFJwZEdoeVpXRmtJR1psWVhSMWNtVWdhWE1nWVhaaGFXeGhZbXhsSUdsdUlHTjFjbkpsYm5RZ1kyOXVkR1Y0ZEM1Y2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUVCa1pXWmhkV3gwVm1Gc2RXVWdZREJnWEc0Z0lDQWdJQ292WEc0Z0lDQWdiblZ0VkdoeVpXRmtjejg2SUc1MWJXSmxjanRjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUhObGRDQnZjaUJuWlhRZ1lTQmliMjlzWldGdUlIWmhiSFZsSUdsdVpHbGpZWFJwYm1jZ2QyaGxkR2hsY2lCMGJ5QmxibUZpYkdVZ1UwbE5SQzRnU1dZZ2MyVjBJSFJ2SUdaaGJITmxMQ0JUU1UxRUlIZHBiR3dnWW1VZ1ptOXlZMlZzZVNCa2FYTmhZbXhsWkM1Y2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUZSb2FYTWdjMlYwZEdsdVp5QnBjeUJoZG1GcGJHRmliR1VnYjI1c2VTQjNhR1Z1SUZkbFlrRnpjMlZ0WW14NUlGTkpUVVFnWm1WaGRIVnlaU0JwY3lCaGRtRnBiR0ZpYkdVZ2FXNGdZM1Z5Y21WdWRDQmpiMjUwWlhoMExseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1FHUmxabUYxYkhSV1lXeDFaU0JnZEhKMVpXQmNiaUFnSUNBZ0tpOWNiaUFnSUNCemFXMWtQem9nWW05dmJHVmhianRjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUhObGRDQnZjaUJuWlhRZ1lTQmliMjlzWldGdUlIWmhiSFZsSUdsdVpHbGpZWFJwYm1jZ2QyaGxkR2hsY2lCMGJ5QmxibUZpYkdVZ2RISmhZMlV1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJBWkdWd2NtVmpZWFJsWkNCVmMyVWdZR1Z1ZGk1MGNtRmpaV0FnYVc1emRHVmhaQzRnU1dZZ1lHVnVkaTUwY21GalpXQWdhWE1nYzJWMExDQjBhR2x6SUhCeWIzQmxjblI1SUhkcGJHd2dZbVVnYVdkdWIzSmxaQzVjYmlBZ0lDQWdLaUJBWkdWbVlYVnNkRlpoYkhWbElHQm1ZV3h6WldCY2JpQWdJQ0FnS2k5Y2JpQWdJQ0IwY21GalpUODZJR0p2YjJ4bFlXNDdYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJUWlhRZ2IzSWdaMlYwSUdFZ2JuVnRZbVZ5SUhOd1pXTnBabmxwYm1jZ2RHaGxJSFJwYldWdmRYUWdabTl5SUdsdWFYUnBZV3hwZW1GMGFXOXVJRzltSUZkbFlrRnpjMlZ0WW14NUlHSmhZMnRsYm1Rc0lHbHVJRzFwYkd4cGMyVmpiMjVrY3k0Z1FTQjZaWEp2WEc0Z0lDQWdJQ29nZG1Gc2RXVWdhVzVrYVdOaGRHVnpJRzV2SUhScGJXVnZkWFFnYVhNZ2MyVjBMbHh1SUNBZ0lDQXFYRzRnSUNBZ0lDb2dRR1JsWm1GMWJIUldZV3gxWlNCZ01HQmNiaUFnSUNBZ0tpOWNiaUFnSUNCcGJtbDBWR2x0Wlc5MWREODZJRzUxYldKbGNqdGNibHh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRk5sZENCaElHTjFjM1J2YlNCVlVrd2djSEpsWm1sNElIUnZJSFJvWlNBdWQyRnpiU0JtYVd4bGN5QnZjaUJoSUhObGRDQnZaaUJ2ZG1WeWNtbGtaWE1nWm05eUlHVmhZMmdnTG5kaGMyMGdabWxzWlM0Z1ZHaGxJRzkyWlhKeWFXUmxJSEJoZEdnZ2MyaHZkV3hrSUdKbFhHNGdJQ0FnSUNvZ1lXNGdZV0p6YjJ4MWRHVWdjR0YwYUM1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0IzWVhOdFVHRjBhSE0vT2lCWFlYTnRVSEpsWm1sNFQzSkdhV3hsVUdGMGFITTdYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJUWlhRZ2IzSWdaMlYwSUdFZ1ltOXZiR1ZoYmlCMllXeDFaU0JwYm1ScFkyRjBhVzVuSUhkb1pYUm9aWElnZEc4Z2NISnZlSGtnZEdobElHVjRaV04xZEdsdmJpQnZaaUJ0WVdsdUlIUm9jbVZoWkNCMGJ5QmhJSGR2Y210bGNpQjBhSEpsWVdRdVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCQVpHVm1ZWFZzZEZaaGJIVmxJR0JtWVd4elpXQmNiaUFnSUNBZ0tpOWNiaUFnSUNCd2NtOTRlVDg2SUdKdmIyeGxZVzQ3WEc0Z0lIMWNibHh1SUNCbGVIQnZjblFnYVc1MFpYSm1ZV05sSUZkbFlrZE1SbXhoWjNNZ2UxeHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlGTmxkQ0J2Y2lCblpYUWdkR2hsSUZkbFlrZE1JRU52Ym5SbGVIUWdTVVFnS0hkbFltZHNJRzl5SUhkbFltZHNNaWt1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJBWkdWbVlYVnNkRlpoYkhWbElHQW5kMlZpWjJ3eUoyQmNiaUFnSUNBZ0tpOWNiaUFnSUNCamIyNTBaWGgwU1dRL09pQW5kMlZpWjJ3bmZDZDNaV0puYkRJbk8xeHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlFZGxkQ0IwYUdVZ1YyVmlSMHdnY21WdVpHVnlhVzVuSUdOdmJuUmxlSFF1WEc0Z0lDQWdJQ292WEc0Z0lDQWdjbVZoWkc5dWJIa2dZMjl1ZEdWNGREb2dWMlZpUjB4U1pXNWtaWEpwYm1kRGIyNTBaWGgwTzF4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUZObGRDQnZjaUJuWlhRZ2RHaGxJRzFoZUdsdGRXMGdZbUYwWTJnZ2MybDZaU0JtYjNJZ2JXRjBiWFZzTGlBd0lHMWxZVzV6SUhSdklHUnBjMkZpYkdVZ1ltRjBZMmhwYm1jdVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCQVpHVndjbVZqWVhSbFpGeHVJQ0FnSUNBcUwxeHVJQ0FnSUcxaGRHMTFiRTFoZUVKaGRHTm9VMmw2WlQ4NklHNTFiV0psY2p0Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCVFpYUWdiM0lnWjJWMElIUm9aU0IwWlhoMGRYSmxJR05oWTJobElHMXZaR1V1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJBWkdWbVlYVnNkRlpoYkhWbElHQW5ablZzYkNkZ1hHNGdJQ0FnSUNvdlhHNGdJQ0FnZEdWNGRIVnlaVU5oWTJobFRXOWtaVDg2SUNkcGJtbDBhV0ZzYVhwbGNrOXViSGtuZkNkbWRXeHNKenRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJUWlhRZ2IzSWdaMlYwSUhSb1pTQndZV05yWldRZ2RHVjRkSFZ5WlNCdGIyUmxYRzRnSUNBZ0lDcGNiaUFnSUNBZ0tpQkFaR1ZtWVhWc2RGWmhiSFZsSUdCbVlXeHpaV0JjYmlBZ0lDQWdLaTljYmlBZ0lDQndZV05yUHpvZ1ltOXZiR1ZoYmp0Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCVFpYUWdiM0lnWjJWMElIZG9aWFJvWlhJZ1pXNWhZbXhsSUdGemVXNWpJR1J2ZDI1c2IyRmtMbHh1SUNBZ0lDQXFYRzRnSUNBZ0lDb2dRR1JsWm1GMWJIUldZV3gxWlNCZ1ptRnNjMlZnWEc0Z0lDQWdJQ292WEc0Z0lDQWdZWE41Ym1NL09pQmliMjlzWldGdU8xeHVJQ0I5WEc1Y2JpQWdaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQlhaV0pIY0hWUWNtOW1hV3hwYm1kRVlYUmhWakZVWlc1emIzSk5aWFJoWkdGMFlTQjdYRzRnSUNBZ1pHbHRjem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTA3WEc0Z0lDQWdaR0YwWVZSNWNHVTZJSE4wY21sdVp6dGNiaUFnZlZ4dUlDQmxlSEJ2Y25RZ2FXNTBaWEptWVdObElGZGxZa2R3ZFZCeWIyWnBiR2x1WjBSaGRHRldNU0I3WEc0Z0lDQWdkbVZ5YzJsdmJqb2dNVHRjYmlBZ0lDQnBibkIxZEhOTlpYUmhaR0YwWVRvZ2NtVmhaRzl1YkhrZ1YyVmlSM0IxVUhKdlptbHNhVzVuUkdGMFlWWXhWR1Z1YzI5eVRXVjBZV1JoZEdGYlhUdGNiaUFnSUNCdmRYUndkWFJ6VFdWMFlXUmhkR0U2SUhKbFlXUnZibXg1SUZkbFlrZHdkVkJ5YjJacGJHbHVaMFJoZEdGV01WUmxibk52Y2sxbGRHRmtZWFJoVzEwN1hHNGdJQ0FnYTJWeWJtVnNTV1E2SUc1MWJXSmxjanRjYmlBZ0lDQnJaWEp1Wld4VWVYQmxPaUJ6ZEhKcGJtYzdYRzRnSUNBZ2EyVnlibVZzVG1GdFpUb2djM1J5YVc1bk8xeHVJQ0FnSUhCeWIyZHlZVzFPWVcxbE9pQnpkSEpwYm1jN1hHNGdJQ0FnYzNSaGNuUlVhVzFsT2lCdWRXMWlaWEk3WEc0Z0lDQWdaVzVrVkdsdFpUb2diblZ0WW1WeU8xeHVJQ0I5WEc1Y2JpQWdaWGh3YjNKMElIUjVjR1VnVjJWaVIzQjFVSEp2Wm1sc2FXNW5SR0YwWVNBOUlGZGxZa2R3ZFZCeWIyWnBiR2x1WjBSaGRHRldNVHRjYmx4dUlDQmxlSEJ2Y25RZ2FXNTBaWEptWVdObElGZGxZa2R3ZFVac1lXZHpJSHRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJUWlhRZ2IzSWdaMlYwSUhSb1pTQndjbTltYVd4cGJtY2diVzlrWlM1Y2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUVCa1pYQnlaV05oZEdWa0lGVnpaU0JnWlc1MkxuZGxZbWR3ZFM1d2NtOW1hV3hwYm1jdWJXOWtaV0FnYVc1emRHVmhaQzRnU1dZZ1lHVnVkaTUzWldKbmNIVXVjSEp2Wm1sc2FXNW5MbTF2WkdWZ0lHbHpJSE5sZEN3Z2RHaHBjeUJ3Y205d1pYSjBlU0IzYVd4c0lHSmxYRzRnSUNBZ0lDb2dhV2R1YjNKbFpDNWNiaUFnSUNBZ0tpOWNiaUFnSUNCd2NtOW1hV3hwYm1kTmIyUmxQem9nSjI5bVppZDhKMlJsWm1GMWJIUW5PMXh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRk5sZENCdmNpQm5aWFFnZEdobElIQnliMlpwYkdsdVp5QmpiMjVtYVdkMWNtRjBhVzl1TGx4dUlDQWdJQ0FxTDF4dUlDQWdJSEJ5YjJacGJHbHVaejg2SUh0Y2JpQWdJQ0FnSUM4cUtseHVJQ0FnSUNBZ0lDb2dVMlYwSUc5eUlHZGxkQ0IwYUdVZ2NISnZabWxzYVc1bklHMXZaR1V1WEc0Z0lDQWdJQ0FnS2x4dUlDQWdJQ0FnSUNvZ1FHUmxabUYxYkhSV1lXeDFaU0JnSjI5bVppZGdYRzRnSUNBZ0lDQWdLaTljYmlBZ0lDQWdJRzF2WkdVL09pQW5iMlptSjN3blpHVm1ZWFZzZENjN1hHNWNiaUFnSUNBZ0lDOHFLbHh1SUNBZ0lDQWdJQ29nVTJWMElHOXlJR2RsZENCaElHTmhiR3hpWVdOcklHWjFibU4wYVc5dUlIZG9aVzRnWVNCd2NtOW1hV3hwYm1jZ1pHRjBZU0JwY3lCeVpXTmxhWFpsWkM0Z1NXWWdibTkwSUhObGRDd2dkR2hsSUhCeWIyWnBiR2x1WnlCa1lYUmhJSGRwYkd3Z1ltVmNiaUFnSUNBZ0lDQXFJSEJ5YVc1MFpXUWdkRzhnWTI5dWMyOXNaUzVjYmlBZ0lDQWdJQ0FxTDF4dUlDQWdJQ0FnYjI1a1lYUmhQem9nS0dSaGRHRTZJRmRsWWtkd2RWQnliMlpwYkdsdVowUmhkR0VwSUQwK0lIWnZhV1E3WEc0Z0lDQWdmVHRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJUWlhRZ2IzSWdaMlYwSUhSb1pTQndiM2RsY2lCd2NtVm1aWEpsYm1ObExseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1UyVjBkR2x1WnlCMGFHbHpJSEJ5YjNCbGNuUjVJRzl1YkhrZ2FHRnpJR1ZtWm1WamRDQmlaV1p2Y21VZ2RHaGxJR1pwY25OMElGZGxZa2RRVlNCcGJtWmxjbVZ1WTJVZ2MyVnpjMmx2YmlCcGN5QmpjbVZoZEdWa0xpQlVhR1VnZG1Gc2RXVWdkMmxzYkNCaVpWeHVJQ0FnSUNBcUlIVnpaV1FnWVhNZ2IzQjBhVzl1Y3lCbWIzSWdZRzVoZG1sbllYUnZjaTVuY0hVdWNtVnhkV1Z6ZEVGa1lYQjBaWElvS1dBdVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCVFpXVWdlMEJzYVc1cklHaDBkSEJ6T2k4dlozQjFkMlZpTG1kcGRHaDFZaTVwYnk5bmNIVjNaV0l2STJScFkzUmtaV1l0WjNCMWNtVnhkV1Z6ZEdGa1lYQjBaWEp2Y0hScGIyNXpmU0JtYjNJZ2JXOXlaU0JrWlhSaGFXeHpMbHh1SUNBZ0lDQXFYRzRnSUNBZ0lDb2dRR1JsWm1GMWJIUldZV3gxWlNCZ2RXNWtaV1pwYm1Wa1lGeHVJQ0FnSUNBcUwxeHVJQ0FnSUhCdmQyVnlVSEpsWm1WeVpXNWpaVDg2SUNkc2IzY3RjRzkzWlhJbmZDZG9hV2RvTFhCbGNtWnZjbTFoYm1ObEp6dGNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQlRaWFFnYjNJZ1oyVjBJSFJvWlNCbWIzSmpaU0JtWVd4c1ltRmpheUJoWkdGd2RHVnlJR1pzWVdjdVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCVFpYUjBhVzVuSUhSb2FYTWdjSEp2Y0dWeWRIa2diMjVzZVNCb1lYTWdaV1ptWldOMElHSmxabTl5WlNCMGFHVWdabWx5YzNRZ1YyVmlSMUJWSUdsdVptVnlaVzVqWlNCelpYTnphVzl1SUdseklHTnlaV0YwWldRdUlGUm9aU0IyWVd4MVpTQjNhV3hzSUdKbFhHNGdJQ0FnSUNvZ2RYTmxaQ0JoY3lCdmNIUnBiMjV6SUdadmNpQmdibUYyYVdkaGRHOXlMbWR3ZFM1eVpYRjFaWE4wUVdSaGNIUmxjaWdwWUM1Y2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUZObFpTQjdRR3hwYm1zZ2FIUjBjSE02THk5bmNIVjNaV0l1WjJsMGFIVmlMbWx2TDJkd2RYZGxZaThqWkdsamRHUmxaaTFuY0hWeVpYRjFaWE4wWVdSaGNIUmxjbTl3ZEdsdmJuTjlJR1p2Y2lCdGIzSmxJR1JsZEdGcGJITXVYRzRnSUNBZ0lDcGNiaUFnSUNBZ0tpQkFaR1ZtWVhWc2RGWmhiSFZsSUdCMWJtUmxabWx1WldSZ1hHNGdJQ0FnSUNvdlhHNGdJQ0FnWm05eVkyVkdZV3hzWW1GamEwRmtZWEIwWlhJL09pQmliMjlzWldGdU8xeHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlGTmxkQ0J2Y2lCblpYUWdkR2hsSUdGa1lYQjBaWElnWm05eUlGZGxZa2RRVlM1Y2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUZObGRIUnBibWNnZEdocGN5QndjbTl3WlhKMGVTQnZibXg1SUdoaGN5QmxabVpsWTNRZ1ltVm1iM0psSUhSb1pTQm1hWEp6ZENCWFpXSkhVRlVnYVc1bVpYSmxibU5sSUhObGMzTnBiMjRnYVhNZ1kzSmxZWFJsWkM0Z1ZHaGxJSFpoYkhWbElIZHBiR3dnWW1WY2JpQWdJQ0FnS2lCMWMyVmtJR0Z6SUhSb1pTQkhVRlVnWVdSaGNIUmxjaUJtYjNJZ2RHaGxJSFZ1WkdWeWJIbHBibWNnVjJWaVIxQlZJR0poWTJ0bGJtUWdkRzhnWTNKbFlYUmxJRWRRVlNCa1pYWnBZMlV1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJKWmlCMGFHbHpJSEJ5YjNCbGNuUjVJR2x6SUc1dmRDQnpaWFFzSUdsMElIZHBiR3dnWW1VZ1lYWmhhV3hoWW14bElIUnZJR2RsZENCaFpuUmxjaUIwYUdVZ1ptbHljM1FnVjJWaVIxQlZJR2x1Wm1WeVpXNWpaU0J6WlhOemFXOXVJR2x6SUdOeVpXRjBaV1F1SUZSb1pWeHVJQ0FnSUNBcUlIWmhiSFZsSUhkcGJHd2dZbVVnZEdobElFZFFWU0JoWkdGd2RHVnlJSFJvWVhRZ1kzSmxZWFJsWkNCaWVTQjBhR1VnZFc1a1pYSnNlV2x1WnlCWFpXSkhVRlVnWW1GamEyVnVaQzVjYmlBZ0lDQWdLbHh1SUNBZ0lDQXFJRmRvWlc0Z2RYTmxJSGRwZEdnZ1ZIbHdaVk5qY21sd2RDd2dkR2hsSUhSNWNHVWdiMllnZEdocGN5QndjbTl3WlhKMGVTQnBjeUJnUjFCVlFXUmhjSFJsY21BZ1pHVm1hVzVsWkNCcGJpQmNJa0IzWldKbmNIVXZkSGx3WlhOY0lpNWNiaUFnSUNBZ0tpQlZjMlVnWUdOdmJuTjBJR0ZrWVhCMFpYSWdQU0JsYm5ZdWQyVmlaM0IxTG1Ga1lYQjBaWElnWVhNZ1IxQlZRV1JoY0hSbGNqdGdJR2x1SUZSNWNHVlRZM0pwY0hRZ2RHOGdZV05qWlhOeklIUm9hWE1nY0hKdmNHVnlkSGtnZDJsMGFDQmpiM0p5WldOMElIUjVjR1V1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJ6WldVZ1kyOXRiV1Z1ZEhNZ2IyNGdlMEJzYVc1cklGUmxibk52Y2k1SGNIVkNkV1ptWlhKVWVYQmxmVnh1SUNBZ0lDQXFMMXh1SUNBZ0lHRmtZWEIwWlhJNklIVnVhMjV2ZDI0N1hHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNvZ1IyVjBJSFJvWlNCa1pYWnBZMlVnWm05eUlGZGxZa2RRVlM1Y2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUZSb2FYTWdjSEp2Y0dWeWRIa2dhWE1nYjI1c2VTQmhkbUZwYkdGaWJHVWdZV1owWlhJZ2RHaGxJR1pwY25OMElGZGxZa2RRVlNCcGJtWmxjbVZ1WTJVZ2MyVnpjMmx2YmlCcGN5QmpjbVZoZEdWa0xseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1YyaGxiaUIxYzJVZ2QybDBhQ0JVZVhCbFUyTnlhWEIwTENCMGFHVWdkSGx3WlNCdlppQjBhR2x6SUhCeWIzQmxjblI1SUdseklHQkhVRlZFWlhacFkyVmdJR1JsWm1sdVpXUWdhVzRnWENKQWQyVmlaM0IxTDNSNWNHVnpYQ0l1WEc0Z0lDQWdJQ29nVlhObElHQmpiMjV6ZENCa1pYWnBZMlVnUFNCbGJuWXVkMlZpWjNCMUxtUmxkbWxqWlNCaGN5QkhVRlZFWlhacFkyVTdZQ0JwYmlCVWVYQmxVMk55YVhCMElIUnZJR0ZqWTJWemN5QjBhR2x6SUhCeWIzQmxjblI1SUhkcGRHZ2dZMjl5Y21WamRDQjBlWEJsTGx4dUlDQWdJQ0FxWEc0Z0lDQWdJQ29nYzJWbElHTnZiVzFsYm5SeklHOXVJSHRBYkdsdWF5QlVaVzV6YjNJdVIzQjFRblZtWm1WeVZIbHdaWDBnWm05eUlHMXZjbVVnWkdWMFlXbHNjeUJoWW05MWRDQjNhSGtnYm05MElIVnpaU0IwZVhCbGN5QmtaV1pwYm1Wa0lHbHVJRndpUUhkbFltZHdkUzkwZVhCbGMxd2lMbHh1SUNBZ0lDQXFMMXh1SUNBZ0lISmxZV1J2Ym14NUlHUmxkbWxqWlRvZ2RXNXJibTkzYmp0Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCVFpYUWdiM0lnWjJWMElIZG9aWFJvWlhJZ2RtRnNhV1JoZEdVZ2FXNXdkWFFnWTI5dWRHVnVkQzVjYmlBZ0lDQWdLbHh1SUNBZ0lDQXFJRUJrWldaaGRXeDBWbUZzZFdVZ1lHWmhiSE5sWUZ4dUlDQWdJQ0FxTDF4dUlDQWdJSFpoYkdsa1lYUmxTVzV3ZFhSRGIyNTBaVzUwUHpvZ1ltOXZiR1ZoYmp0Y2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFVnVkaUI3WEc0Z0lDOHFLbHh1SUNBZ0tpQnpaWFFnZEdobElITmxkbVZ5YVhSNUlHeGxkbVZzSUdadmNpQnNiMmRuYVc1bkxseHVJQ0FnS2x4dUlDQWdLaUJBWkdWbVlYVnNkRlpoYkhWbElHQW5kMkZ5Ym1sdVp5ZGdYRzRnSUNBcUwxeHVJQ0JzYjJkTVpYWmxiRDg2SUNkMlpYSmliM05sSjN3bmFXNW1ieWQ4SjNkaGNtNXBibWNuZkNkbGNuSnZjaWQ4SjJaaGRHRnNKenRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzVrYVdOaGRHVWdkMmhsZEdobGNpQnlkVzRnYVc0Z1pHVmlkV2NnYlc5a1pTNWNiaUFnSUNwY2JpQWdJQ29nUUdSbFptRjFiSFJXWVd4MVpTQmdabUZzYzJWZ1hHNGdJQ0FxTDF4dUlDQmtaV0oxWno4NklHSnZiMnhsWVc0N1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUhObGRDQnZjaUJuWlhRZ1lTQmliMjlzWldGdUlIWmhiSFZsSUdsdVpHbGpZWFJwYm1jZ2QyaGxkR2hsY2lCMGJ5QmxibUZpYkdVZ2RISmhZMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQmtaV1poZFd4MFZtRnNkV1VnWUdaaGJITmxZRnh1SUNBZ0tpOWNiaUFnZEhKaFkyVS9PaUJpYjI5c1pXRnVPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkhaWFFnZG1WeWMybHZiaUJ2WmlCMGFHVWdZM1Z5Y21WdWRDQndZV05yWVdkbExseHVJQ0FnS2k5Y2JpQWdjbVZoWkc5dWJIa2dkbVZ5YzJsdmJuTTZJSHRjYmlBZ0lDQnlaV0ZrYjI1c2VTQmpiMjF0YjI0NklITjBjbWx1Wnp0Y2JpQWdJQ0J5WldGa2IyNXNlU0IzWldJL09pQnpkSEpwYm1jN1hHNGdJQ0FnY21WaFpHOXViSGtnYm05a1pUODZJSE4wY21sdVp6dGNiaUFnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNWhiV2x1WnkxamIyNTJaVzUwYVc5dVhHNGdJQ0FnY21WaFpHOXViSGtnSjNKbFlXTjBMVzVoZEdsMlpTYy9PaUJ6ZEhKcGJtYzdYRzRnSUgwN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGNISmxjMlZ1ZENCaElITmxkQ0J2WmlCbWJHRm5jeUJtYjNJZ1YyVmlRWE56WlcxaWJIbGNiaUFnSUNvdlhHNGdJSEpsWVdSdmJteDVJSGRoYzIwNklFVnVkaTVYWldKQmMzTmxiV0pzZVVac1lXZHpPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWEJ5WlhObGJuUWdZU0J6WlhRZ2IyWWdabXhoWjNNZ1ptOXlJRmRsWWtkTVhHNGdJQ0FxTDF4dUlDQnlaV0ZrYjI1c2VTQjNaV0puYkRvZ1JXNTJMbGRsWWtkTVJteGhaM003WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsY0hKbGMyVnVkQ0JoSUhObGRDQnZaaUJtYkdGbmN5Qm1iM0lnVjJWaVIxQlZYRzRnSUNBcUwxeHVJQ0J5WldGa2IyNXNlU0IzWldKbmNIVTZJRVZ1ZGk1WFpXSkhjSFZHYkdGbmN6dGNibHh1SUNCYmJtRnRaVG9nYzNSeWFXNW5YVG9nZFc1cmJtOTNianRjYm4xY2JseHVMeW9xWEc0Z0tpQlNaWEJ5WlhObGJuUWdZU0J6WlhRZ2IyWWdabXhoWjNNZ1lYTWdZU0JuYkc5aVlXd2djMmx1WjJ4bGRHOXVMbHh1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnWlc1Mk9pQkZibllnUFNCbGJuWkpiWEJzTzF4dUlpd2dJaTh2SUVOdmNIbHlhV2RvZENBb1l5a2dUV2xqY205emIyWjBJRU52Y25CdmNtRjBhVzl1TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVMeThnVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUUxSlZDQk1hV05sYm5ObExseHVYRzVwYlhCdmNuUWdlMVJsYm5OdmNsUnZSR0YwWVZWeWJFOXdkR2x2Ym5Nc0lGUmxibk52Y2xSdlNXMWhaMlZFWVhSaFQzQjBhVzl1YzMwZ1puSnZiU0FuTGk5MFpXNXpiM0l0WTI5dWRtVnljMmx2Ymk1cWN5YzdYRzVwYlhCdmNuUWdlMVJsYm5OdmNuMGdabkp2YlNBbkxpOTBaVzV6YjNJdWFuTW5PMXh1WEc0dktpcGNiaUFxSUdsdGNHeGxiV1Z1ZEdGMGFXOXVJRzltSUZSbGJuTnZjaTUwYjBSaGRHRlZVa3dvS1Z4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ2RHVnVjMjl5Vkc5RVlYUmhWVkpNSUQwZ0tIUmxibk52Y2pvZ1ZHVnVjMjl5TENCdmNIUnBiMjV6UHpvZ1ZHVnVjMjl5Vkc5RVlYUmhWWEpzVDNCMGFXOXVjeWs2SUhOMGNtbHVaeUE5UGlCN1hHNGdJR052Ym5OMElHTmhiblpoY3lBOUlIUjVjR1Z2WmlCa2IyTjFiV1Z1ZENBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NnUHlCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZGYkdWdFpXNTBLQ2RqWVc1MllYTW5LU0E2SUNodVpYY2dUMlptYzJOeVpXVnVRMkZ1ZG1GektERXNJREVwS1R0Y2JpQWdZMkZ1ZG1GekxuZHBaSFJvSUQwZ2RHVnVjMjl5TG1ScGJYTmJNMTA3WEc0Z0lHTmhiblpoY3k1b1pXbG5hSFFnUFNCMFpXNXpiM0l1WkdsdGMxc3lYVHRjYmlBZ1kyOXVjM1FnY0dsNFpXeHpNa1JEYjI1MFpYaDBJRDFjYmlBZ0lDQWdJR05oYm5aaGN5NW5aWFJEYjI1MFpYaDBLQ2N5WkNjcElHRnpJQ2hEWVc1MllYTlNaVzVrWlhKcGJtZERiMjUwWlhoME1rUWdmQ0JQWm1aelkzSmxaVzVEWVc1MllYTlNaVzVrWlhKcGJtZERiMjUwWlhoME1rUWdmQ0J1ZFd4c0tUdGNibHh1SUNCcFppQW9jR2w0Wld4ek1rUkRiMjUwWlhoMElDRTlJRzUxYkd3cElIdGNiaUFnSUNBdkx5QkVaV1poZFd4MElIWmhiSFZsY3lCbWIzSWdhR1ZwWjJoMElHRnVaQ0IzYVdSMGFDQW1JR1p2Y20xaGRGeHVJQ0FnSUd4bGRDQjNhV1IwYURvZ2JuVnRZbVZ5TzF4dUlDQWdJR3hsZENCb1pXbG5hSFE2SUc1MWJXSmxjanRjYmlBZ0lDQnBaaUFvYjNCMGFXOXVjejh1ZEdWdWMyOXlUR0Y1YjNWMElDRTlQU0IxYm1SbFptbHVaV1FnSmlZZ2IzQjBhVzl1Y3k1MFpXNXpiM0pNWVhsdmRYUWdQVDA5SUNkT1NGZERKeWtnZTF4dUlDQWdJQ0FnZDJsa2RHZ2dQU0IwWlc1emIzSXVaR2x0YzFzeVhUdGNiaUFnSUNBZ0lHaGxhV2RvZENBOUlIUmxibk52Y2k1a2FXMXpXek5kTzF4dUlDQWdJSDBnWld4elpTQjdJQ0F2THlCRVpXWmhkV3gwSUd4aGVXOTFkQ0JwY3lCT1ExZElYRzRnSUNBZ0lDQjNhV1IwYUNBOUlIUmxibk52Y2k1a2FXMXpXek5kTzF4dUlDQWdJQ0FnYUdWcFoyaDBJRDBnZEdWdWMyOXlMbVJwYlhOYk1sMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnYVc1d2RYUm1iM0p0WVhRZ1BTQnZjSFJwYjI1elB5NW1iM0p0WVhRZ0lUMDlJSFZ1WkdWbWFXNWxaQ0EvSUc5d2RHbHZibk11Wm05eWJXRjBJRG9nSjFKSFFpYzdYRzVjYmlBZ0lDQmpiMjV6ZENCdWIzSnRJRDBnYjNCMGFXOXVjejh1Ym05eWJUdGNiaUFnSUNCc1pYUWdibTl5YlUxbFlXNDZJRnR1ZFcxaVpYSXNJRzUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhKZE8xeHVJQ0FnSUd4bGRDQnViM0p0UW1saGN6b2dXMjUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhJc0lHNTFiV0psY2wwN1hHNGdJQ0FnYVdZZ0tHNXZjbTBnUFQwOUlIVnVaR1ZtYVc1bFpDQjhmQ0J1YjNKdExtMWxZVzRnUFQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdibTl5YlUxbFlXNGdQU0JiTWpVMUxDQXlOVFVzSURJMU5Td2dNalUxWFR0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUFvYm05eWJTNXRaV0Z1S1NBOVBUMGdKMjUxYldKbGNpY3BJSHRjYmlBZ0lDQWdJQ0FnYm05eWJVMWxZVzRnUFNCYmJtOXliUzV0WldGdUxDQnViM0p0TG0xbFlXNHNJRzV2Y20wdWJXVmhiaXdnYm05eWJTNXRaV0Z1WFR0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUc1dmNtMU5aV0Z1SUQwZ1cyNXZjbTB1YldWaGJsc3dYU3dnYm05eWJTNXRaV0Z1V3pGZExDQnViM0p0TG0xbFlXNWJNbDBzSURCZE8xeHVJQ0FnSUNBZ0lDQnBaaUFvYm05eWJTNXRaV0Z1V3pOZElDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnViM0p0VFdWaGJsc3pYU0E5SUc1dmNtMHViV1ZoYmxzelhUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ibTl5YlNBOVBUMGdkVzVrWldacGJtVmtJSHg4SUc1dmNtMHVZbWxoY3lBOVBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0J1YjNKdFFtbGhjeUE5SUZzd0xDQXdMQ0F3TENBd1hUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlBb2JtOXliUzVpYVdGektTQTlQVDBnSjI1MWJXSmxjaWNwSUh0Y2JpQWdJQ0FnSUNBZ2JtOXliVUpwWVhNZ1BTQmJibTl5YlM1aWFXRnpMQ0J1YjNKdExtSnBZWE1zSUc1dmNtMHVZbWxoY3l3Z2JtOXliUzVpYVdGelhUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHNXZjbTFDYVdGeklEMGdXMjV2Y20wdVltbGhjMXN3WFN3Z2JtOXliUzVpYVdGeld6RmRMQ0J1YjNKdExtSnBZWE5iTWwwc0lEQmRPMXh1SUNBZ0lDQWdJQ0JwWmlBb2JtOXliUzVpYVdGeld6TmRJQ0U5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lDQWdJQ0J1YjNKdFFtbGhjMXN6WFNBOUlHNXZjbTB1WW1saGMxc3pYVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElITjBjbWxrWlNBOUlHaGxhV2RvZENBcUlIZHBaSFJvTzF4dUlDQWdJQzh2SUVSbFptRjFiSFFnY0c5cGJuUmxjaUJoYzNOcFoyNXRaVzUwYzF4dUlDQWdJR3hsZENCeVZHVnVjMjl5VUc5cGJuUmxjaUE5SURBc0lHZFVaVzV6YjNKUWIybHVkR1Z5SUQwZ2MzUnlhV1JsTENCaVZHVnVjMjl5VUc5cGJuUmxjaUE5SUhOMGNtbGtaU0FxSURJc0lHRlVaVzV6YjNKUWIybHVkR1Z5SUQwZ0xURTdYRzVjYmlBZ0lDQXZMeUJWY0dSaGRHbHVaeUIwYUdVZ2NHOXBiblJsY2lCaGMzTnBaMjV0Wlc1MGN5QmlZWE5sWkNCdmJpQjBhR1VnYVc1d2RYUWdhVzFoWjJVZ1ptOXliV0YwWEc0Z0lDQWdhV1lnS0dsdWNIVjBabTl5YldGMElEMDlQU0FuVWtkQ1FTY3BJSHRjYmlBZ0lDQWdJSEpVWlc1emIzSlFiMmx1ZEdWeUlEMGdNRHRjYmlBZ0lDQWdJR2RVWlc1emIzSlFiMmx1ZEdWeUlEMGdjM1J5YVdSbE8xeHVJQ0FnSUNBZ1lsUmxibk52Y2xCdmFXNTBaWElnUFNCemRISnBaR1VnS2lBeU8xeHVJQ0FnSUNBZ1lWUmxibk52Y2xCdmFXNTBaWElnUFNCemRISnBaR1VnS2lBek8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2FXNXdkWFJtYjNKdFlYUWdQVDA5SUNkU1IwSW5LU0I3WEc0Z0lDQWdJQ0J5VkdWdWMyOXlVRzlwYm5SbGNpQTlJREE3WEc0Z0lDQWdJQ0JuVkdWdWMyOXlVRzlwYm5SbGNpQTlJSE4wY21sa1pUdGNiaUFnSUNBZ0lHSlVaVzV6YjNKUWIybHVkR1Z5SUQwZ2MzUnlhV1JsSUNvZ01qdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHbHVjSFYwWm05eWJXRjBJRDA5UFNBblVrSkhKeWtnZTF4dUlDQWdJQ0FnY2xSbGJuTnZjbEJ2YVc1MFpYSWdQU0F3TzF4dUlDQWdJQ0FnWWxSbGJuTnZjbEJ2YVc1MFpYSWdQU0J6ZEhKcFpHVTdYRzRnSUNBZ0lDQm5WR1Z1YzI5eVVHOXBiblJsY2lBOUlITjBjbWxrWlNBcUlESTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQm9aV2xuYUhRN0lHa3JLeWtnZTF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYWlBOUlEQTdJR29nUENCM2FXUjBhRHNnYWlzcktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElGSWdQU0FvS0hSbGJuTnZjaTVrWVhSaFczSlVaVzV6YjNKUWIybHVkR1Z5S3l0ZElHRnpJRzUxYldKbGNpa2dMU0J1YjNKdFFtbGhjMXN3WFNrZ0tpQnViM0p0VFdWaGJsc3dYVHNnSUM4dklGSWdkbUZzZFdWY2JpQWdJQ0FnSUNBZ1kyOXVjM1FnUnlBOUlDZ29kR1Z1YzI5eUxtUmhkR0ZiWjFSbGJuTnZjbEJ2YVc1MFpYSXJLMTBnWVhNZ2JuVnRZbVZ5S1NBdElHNXZjbTFDYVdGeld6RmRLU0FxSUc1dmNtMU5aV0Z1V3pGZE95QWdMeThnUnlCMllXeDFaVnh1SUNBZ0lDQWdJQ0JqYjI1emRDQkNJRDBnS0NoMFpXNXpiM0l1WkdGMFlWdGlWR1Z1YzI5eVVHOXBiblJsY2lzclhTQmhjeUJ1ZFcxaVpYSXBJQzBnYm05eWJVSnBZWE5iTWwwcElDb2dibTl5YlUxbFlXNWJNbDA3SUNBdkx5QkNJSFpoYkhWbFhHNGdJQ0FnSUNBZ0lHTnZibk4wSUVFZ1BTQmhWR1Z1YzI5eVVHOXBiblJsY2lBOVBUMGdMVEVnUDF4dUlDQWdJQ0FnSUNBZ0lDQWdNalUxSURwY2JpQWdJQ0FnSUNBZ0lDQWdJQ2dvZEdWdWMyOXlMbVJoZEdGYllWUmxibk52Y2xCdmFXNTBaWElySzEwZ1lYTWdiblZ0WW1WeUtTQXRJRzV2Y20xQ2FXRnpXek5kS1NBcUlHNXZjbTFOWldGdVd6TmRPeUFnTHk4Z1FTQjJZV3gxWlZ4dUlDQWdJQ0FnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwzSmxjM1J5YVdOMExYQnNkWE10YjNCbGNtRnVaSE5jYmlBZ0lDQWdJQ0FnY0dsNFpXeHpNa1JEYjI1MFpYaDBMbVpwYkd4VGRIbHNaU0E5SUNkeVoySmhLQ2NnS3lCU0lDc2dKeXduSUNzZ1J5QXJJQ2NzSnlBcklFSWdLeUFuTENjZ0t5QkJJQ3NnSnlrbk8xeHVJQ0FnSUNBZ0lDQndhWGhsYkhNeVJFTnZiblJsZUhRdVptbHNiRkpsWTNRb2Fpd2dhU3dnTVN3Z01TazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDZ25kRzlFWVhSaFZWSk1KeUJwYmlCallXNTJZWE1wSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJqWVc1MllYTXVkRzlFWVhSaFZWSk1LQ2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmRHOUVZWFJoVlZKTUlHbHpJRzV2ZENCemRYQndiM0owWldRbktUdGNiaUFnSUNCOVhHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkRFlXNGdibTkwSUdGalkyVnpjeUJwYldGblpTQmtZWFJoSnlrN1hHNGdJSDFjYm4wN1hHNWNiaThxS2x4dUlDb2dhVzF3YkdWdFpXNTBZWFJwYjI0Z2IyWWdWR1Z1YzI5eUxuUnZTVzFoWjJWRVlYUmhLQ2xjYmlBcUwxeHVaWGh3YjNKMElHTnZibk4wSUhSbGJuTnZjbFJ2U1cxaFoyVkVZWFJoSUQwZ0tIUmxibk52Y2pvZ1ZHVnVjMjl5TENCdmNIUnBiMjV6UHpvZ1ZHVnVjMjl5Vkc5SmJXRm5aVVJoZEdGUGNIUnBiMjV6S1RvZ1NXMWhaMlZFWVhSaElEMCtJSHRjYmlBZ1kyOXVjM1FnY0dsNFpXeHpNa1JEYjI1MFpYaDBJRDBnZEhsd1pXOW1JR1J2WTNWdFpXNTBJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QS9YRzRnSUNBZ0lDQmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwS0NkallXNTJZWE1uS1M1blpYUkRiMjUwWlhoMEtDY3laQ2NwSURwY2JpQWdJQ0FnSUc1bGR5QlBabVp6WTNKbFpXNURZVzUyWVhNb01Td2dNU2t1WjJWMFEyOXVkR1Y0ZENnbk1tUW5LU0JoY3lCUFptWnpZM0psWlc1RFlXNTJZWE5TWlc1a1pYSnBibWREYjI1MFpYaDBNa1E3WEc0Z0lHeGxkQ0JwYldGblpUb2dTVzFoWjJWRVlYUmhPMXh1SUNCcFppQW9jR2w0Wld4ek1rUkRiMjUwWlhoMElDRTlJRzUxYkd3cElIdGNiaUFnSUNBdkx5QkVaV1poZFd4MElIWmhiSFZsY3lCbWIzSWdhR1ZwWjJoMElHRnVaQ0IzYVdSMGFDQW1JR1p2Y20xaGRGeHVJQ0FnSUd4bGRDQjNhV1IwYURvZ2JuVnRZbVZ5TzF4dUlDQWdJR3hsZENCb1pXbG5hSFE2SUc1MWJXSmxjanRjYmlBZ0lDQnNaWFFnWTJoaGJtNWxiSE02SUc1MWJXSmxjanRjYmlBZ0lDQnBaaUFvYjNCMGFXOXVjejh1ZEdWdWMyOXlUR0Y1YjNWMElDRTlQU0IxYm1SbFptbHVaV1FnSmlZZ2IzQjBhVzl1Y3k1MFpXNXpiM0pNWVhsdmRYUWdQVDA5SUNkT1NGZERKeWtnZTF4dUlDQWdJQ0FnZDJsa2RHZ2dQU0IwWlc1emIzSXVaR2x0YzFzeVhUdGNiaUFnSUNBZ0lHaGxhV2RvZENBOUlIUmxibk52Y2k1a2FXMXpXekZkTzF4dUlDQWdJQ0FnWTJoaGJtNWxiSE1nUFNCMFpXNXpiM0l1WkdsdGMxc3pYVHRjYmlBZ0lDQjlJR1ZzYzJVZ2V5QWdMeThnUkdWbVlYVnNkQ0JzWVhsdmRYUWdhWE1nVGtOWFNGeHVJQ0FnSUNBZ2QybGtkR2dnUFNCMFpXNXpiM0l1WkdsdGMxc3pYVHRjYmlBZ0lDQWdJR2hsYVdkb2RDQTlJSFJsYm5OdmNpNWthVzF6V3pKZE8xeHVJQ0FnSUNBZ1kyaGhibTVsYkhNZ1BTQjBaVzV6YjNJdVpHbHRjMXN4WFR0Y2JpQWdJQ0I5WEc0Z0lDQWdZMjl1YzNRZ2FXNXdkWFJtYjNKdFlYUWdQU0J2Y0hScGIyNXpJQ0U5UFNCMWJtUmxabWx1WldRZ1B5QW9iM0IwYVc5dWN5NW1iM0p0WVhRZ0lUMDlJSFZ1WkdWbWFXNWxaQ0EvSUc5d2RHbHZibk11Wm05eWJXRjBJRG9nSjFKSFFpY3BJRG9nSjFKSFFpYzdYRzVjYmlBZ0lDQmpiMjV6ZENCdWIzSnRJRDBnYjNCMGFXOXVjejh1Ym05eWJUdGNiaUFnSUNCc1pYUWdibTl5YlUxbFlXNDZJRnR1ZFcxaVpYSXNJRzUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhKZE8xeHVJQ0FnSUd4bGRDQnViM0p0UW1saGN6b2dXMjUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhJc0lHNTFiV0psY2wwN1hHNGdJQ0FnYVdZZ0tHNXZjbTBnUFQwOUlIVnVaR1ZtYVc1bFpDQjhmQ0J1YjNKdExtMWxZVzRnUFQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdibTl5YlUxbFlXNGdQU0JiTWpVMUxDQXlOVFVzSURJMU5Td2dNalUxWFR0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUFvYm05eWJTNXRaV0Z1S1NBOVBUMGdKMjUxYldKbGNpY3BJSHRjYmlBZ0lDQWdJQ0FnYm05eWJVMWxZVzRnUFNCYmJtOXliUzV0WldGdUxDQnViM0p0TG0xbFlXNHNJRzV2Y20wdWJXVmhiaXdnYm05eWJTNXRaV0Z1WFR0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUc1dmNtMU5aV0Z1SUQwZ1cyNXZjbTB1YldWaGJsc3dYU3dnYm05eWJTNXRaV0Z1V3pGZExDQnViM0p0TG0xbFlXNWJNbDBzSURJMU5WMDdYRzRnSUNBZ0lDQWdJR2xtSUNodWIzSnRMbTFsWVc1Yk0xMGdJVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJRzV2Y20xTlpXRnVXek5kSUQwZ2JtOXliUzV0WldGdVd6TmRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2h1YjNKdElEMDlQU0IxYm1SbFptbHVaV1FnZkh3Z2JtOXliUzVpYVdGeklEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUc1dmNtMUNhV0Z6SUQwZ1d6QXNJREFzSURBc0lEQmRPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlDaHViM0p0TG1KcFlYTXBJRDA5UFNBbmJuVnRZbVZ5SnlrZ2UxeHVJQ0FnSUNBZ0lDQnViM0p0UW1saGN5QTlJRnR1YjNKdExtSnBZWE1zSUc1dmNtMHVZbWxoY3l3Z2JtOXliUzVpYVdGekxDQnViM0p0TG1KcFlYTmRPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdibTl5YlVKcFlYTWdQU0JiYm05eWJTNWlhV0Z6V3pCZExDQnViM0p0TG1KcFlYTmJNVjBzSUc1dmNtMHVZbWxoYzFzeVhTd2dNRjA3WEc0Z0lDQWdJQ0FnSUdsbUlDaHViM0p0TG1KcFlYTmJNMTBnSVQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdJQ0FnSUc1dmNtMUNhV0Z6V3pOZElEMGdibTl5YlM1aWFXRnpXek5kTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnWTI5dWMzUWdjM1J5YVdSbElEMGdhR1ZwWjJoMElDb2dkMmxrZEdnN1hHNGdJQ0FnYVdZZ0tHOXdkR2x2Ym5NZ0lUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdVptOXliV0YwSUNFOVBTQjFibVJsWm1sdVpXUWdKaVlnS0dOb1lXNXVaV3h6SUQwOVBTQTBJQ1ltSUc5d2RHbHZibk11Wm05eWJXRjBJQ0U5UFNBblVrZENRU2NwSUh4OFhHNGdJQ0FnSUNBZ0lDQWdLR05vWVc1dVpXeHpJRDA5UFNBeklDWW1JQ2h2Y0hScGIyNXpMbVp2Y20xaGRDQWhQVDBnSjFKSFFpY2dKaVlnYjNCMGFXOXVjeTVtYjNKdFlYUWdJVDA5SUNkQ1IxSW5LU2twSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkVVpXNXpiM0lnWm05eWJXRjBJR1J2WlhOdVhGd25kQ0J0WVhSamFDQnBibkIxZENCMFpXNXpiM0lnWkdsdGN5Y3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRVJsWm1GMWJIUWdjRzlwYm5SbGNpQmhjM05wWjI1dFpXNTBjMXh1SUNBZ0lHTnZibk4wSUhOMFpYQWdQU0EwTzF4dUlDQWdJR3hsZENCeVNXMWhaMlZRYjJsdWRHVnlJRDBnTUN3Z1owbHRZV2RsVUc5cGJuUmxjaUE5SURFc0lHSkpiV0ZuWlZCdmFXNTBaWElnUFNBeUxDQmhTVzFoWjJWUWIybHVkR1Z5SUQwZ016dGNiaUFnSUNCc1pYUWdjbFJsYm5OdmNsQnZhVzUwWlhJZ1BTQXdMQ0JuVkdWdWMyOXlVRzlwYm5SbGNpQTlJSE4wY21sa1pTd2dZbFJsYm5OdmNsQnZhVzUwWlhJZ1BTQnpkSEpwWkdVZ0tpQXlMQ0JoVkdWdWMyOXlVRzlwYm5SbGNpQTlJQzB4TzF4dVhHNGdJQ0FnTHk4Z1ZYQmtZWFJwYm1jZ2RHaGxJSEJ2YVc1MFpYSWdZWE56YVdkdWJXVnVkSE1nWW1GelpXUWdiMjRnZEdobElHbHVjSFYwSUdsdFlXZGxJR1p2Y20xaGRGeHVJQ0FnSUdsbUlDaHBibkIxZEdadmNtMWhkQ0E5UFQwZ0oxSkhRa0VuS1NCN1hHNGdJQ0FnSUNCeVZHVnVjMjl5VUc5cGJuUmxjaUE5SURBN1hHNGdJQ0FnSUNCblZHVnVjMjl5VUc5cGJuUmxjaUE5SUhOMGNtbGtaVHRjYmlBZ0lDQWdJR0pVWlc1emIzSlFiMmx1ZEdWeUlEMGdjM1J5YVdSbElDb2dNanRjYmlBZ0lDQWdJR0ZVWlc1emIzSlFiMmx1ZEdWeUlEMGdjM1J5YVdSbElDb2dNenRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR2x1Y0hWMFptOXliV0YwSUQwOVBTQW5Va2RDSnlrZ2UxeHVJQ0FnSUNBZ2NsUmxibk52Y2xCdmFXNTBaWElnUFNBd08xeHVJQ0FnSUNBZ1oxUmxibk52Y2xCdmFXNTBaWElnUFNCemRISnBaR1U3WEc0Z0lDQWdJQ0JpVkdWdWMyOXlVRzlwYm5SbGNpQTlJSE4wY21sa1pTQXFJREk3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hwYm5CMWRHWnZjbTFoZENBOVBUMGdKMUpDUnljcElIdGNiaUFnSUNBZ0lISlVaVzV6YjNKUWIybHVkR1Z5SUQwZ01EdGNiaUFnSUNBZ0lHSlVaVzV6YjNKUWIybHVkR1Z5SUQwZ2MzUnlhV1JsTzF4dUlDQWdJQ0FnWjFSbGJuTnZjbEJ2YVc1MFpYSWdQU0J6ZEhKcFpHVWdLaUF5TzF4dUlDQWdJSDFjYmx4dUlDQWdJR2x0WVdkbElEMGdjR2w0Wld4ek1rUkRiMjUwWlhoMExtTnlaV0YwWlVsdFlXZGxSR0YwWVNoM2FXUjBhQ3dnYUdWcFoyaDBLVHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYUdWcFoyaDBJQ29nZDJsa2RHZzdYRzRnSUNBZ0lDQWdJQ0J5U1cxaFoyVlFiMmx1ZEdWeUlDczlJSE4wWlhBc0lHZEpiV0ZuWlZCdmFXNTBaWElnS3owZ2MzUmxjQ3dnWWtsdFlXZGxVRzlwYm5SbGNpQXJQU0J6ZEdWd0xDQmhTVzFoWjJWUWIybHVkR1Z5SUNzOUlITjBaWEFzSUdrckt5a2dlMXh1SUNBZ0lDQWdhVzFoWjJVdVpHRjBZVnR5U1cxaFoyVlFiMmx1ZEdWeVhTQTlJQ2dvZEdWdWMyOXlMbVJoZEdGYmNsUmxibk52Y2xCdmFXNTBaWElySzEwZ1lYTWdiblZ0WW1WeUtTQXRJRzV2Y20xQ2FXRnpXekJkS1NBcUlHNXZjbTFOWldGdVd6QmRPeUFnTHk4Z1VpQjJZV3gxWlZ4dUlDQWdJQ0FnYVcxaFoyVXVaR0YwWVZ0blNXMWhaMlZRYjJsdWRHVnlYU0E5SUNnb2RHVnVjMjl5TG1SaGRHRmJaMVJsYm5OdmNsQnZhVzUwWlhJcksxMGdZWE1nYm5WdFltVnlLU0F0SUc1dmNtMUNhV0Z6V3pGZEtTQXFJRzV2Y20xTlpXRnVXekZkT3lBZ0x5OGdSeUIyWVd4MVpWeHVJQ0FnSUNBZ2FXMWhaMlV1WkdGMFlWdGlTVzFoWjJWUWIybHVkR1Z5WFNBOUlDZ29kR1Z1YzI5eUxtUmhkR0ZiWWxSbGJuTnZjbEJ2YVc1MFpYSXJLMTBnWVhNZ2JuVnRZbVZ5S1NBdElHNXZjbTFDYVdGeld6SmRLU0FxSUc1dmNtMU5aV0Z1V3pKZE95QWdMeThnUWlCMllXeDFaVnh1SUNBZ0lDQWdhVzFoWjJVdVpHRjBZVnRoU1cxaFoyVlFiMmx1ZEdWeVhTQTlJR0ZVWlc1emIzSlFiMmx1ZEdWeUlEMDlQU0F0TVNBL1hHNGdJQ0FnSUNBZ0lDQWdNalUxSURwY2JpQWdJQ0FnSUNBZ0lDQW9LSFJsYm5OdmNpNWtZWFJoVzJGVVpXNXpiM0pRYjJsdWRHVnlLeXRkSUdGeklHNTFiV0psY2lrZ0xTQnViM0p0UW1saGMxc3pYU2tnS2lCdWIzSnRUV1ZoYmxzelhUc2dJQzh2SUVFZ2RtRnNkV1ZjYmlBZ0lDQjlYRzVjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KME5oYmlCdWIzUWdZV05qWlhOeklHbHRZV2RsSUdSaGRHRW5LVHRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdhVzFoWjJVN1hHNTlPMXh1SWl3Z0lpOHZJRU52Y0hseWFXZG9kQ0FvWXlrZ1RXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUx5OGdUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRTFKVkNCTWFXTmxibk5sTGx4dVhHNXBiWEJ2Y25RZ2UwOXdkR2x2Ym5ORWFXMWxibk5wYjI1ekxDQlBjSFJwYjI1elJtOXliV0YwTENCUGNIUnBiMjV6VG05eWJXRnNhWHBoZEdsdmJsQmhjbUZ0WlhSbGNuTXNJRTl3ZEdsdmJuTlVaVzV6YjNKR2IzSnRZWFFzSUU5d2RHbHZibk5VWlc1emIzSk1ZWGx2ZFhRc0lGUmxibk52Y2taeWIyMUhjSFZDZFdabVpYSlBjSFJwYjI1ekxDQlVaVzV6YjNKR2NtOXRTVzFoWjJWQ2FYUnRZWEJQY0hScGIyNXpMQ0JVWlc1emIzSkdjbTl0U1cxaFoyVkVZWFJoVDNCMGFXOXVjeXdnVkdWdWMyOXlSbkp2YlVsdFlXZGxSV3hsYldWdWRFOXdkR2x2Ym5Nc0lGUmxibk52Y2taeWIyMVVaWGgwZFhKbFQzQjBhVzl1Y3l3Z1ZHVnVjMjl5Um5KdmJWVnliRTl3ZEdsdmJuTjlJR1p5YjIwZ0p5NHZkR1Z1YzI5eUxXWmhZM1J2Y25rdWFuTW5PMXh1YVcxd2IzSjBJSHRVWlc1emIzSjlJR1p5YjIwZ0p5NHZkR1Z1YzI5eUxXbHRjR3d1YW5Nbk8xeHVhVzF3YjNKMElIdFVaVzV6YjNJZ1lYTWdWR1Z1YzI5eVNXNTBaWEptWVdObGZTQm1jbTl0SUNjdUwzUmxibk52Y2k1cWN5YzdYRzVjYm1sdWRHVnlabUZqWlNCQ2RXWm1aWEpVYjFSbGJuTnZjazl3ZEdsdmJuTWdaWGgwWlc1a2N5QlBjSFJwYjI1elJHbHRaVzV6YVc5dWN5d2dUM0IwYVc5dWMxUmxibk52Y2t4aGVXOTFkQ3dnVDNCMGFXOXVjMDV2Y20xaGJHbDZZWFJwYjI1UVlYSmhiV1YwWlhKekxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUU5d2RHbHZibk5HYjNKdFlYUXNJRTl3ZEdsdmJuTlVaVzV6YjNKR2IzSnRZWFFnZTMxY2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdVZ1lTQnVaWGNnZEdWdWMyOXlJRzlpYW1WamRDQm1jbTl0SUdsdFlXZGxJRzlpYW1WamRGeHVJQ3BjYmlBcUlFQndZWEpoYlNCaWRXWm1aWElnTFNCRmVIUnlZV04wWldRZ2FXMWhaMlVnWW5WbVptVnlJR1JoZEdFZ0xTQmhjM04xYldsdVp5QlNSMEpCSUdadmNtMWhkRnh1SUNvZ1FIQmhjbUZ0SUdsdFlXZGxSbTl5YldGMElDMGdhVzV3ZFhRZ2FXMWhaMlVnWTI5dVptbG5kWEpoZEdsdmJpQXRJSEpsY1hWcGNtVmtJR052Ym1acFozVnlZWFJwYjI1eklHaGxhV2RvZEN3Z2QybGtkR2dzSUdadmNtMWhkRnh1SUNvZ1FIQmhjbUZ0SUhSbGJuTnZja1p2Y20xaGRDQXRJRzkxZEhCMWRDQjBaVzV6YjNJZ1kyOXVabWxuZFhKaGRHbHZiaUF0SUVSbFptRjFiSFFnYVhNZ1VrZENJR1p2Y20xaGRGeHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdZblZtWm1WeVZHOVVaVzV6YjNJZ1BTQW9ZblZtWm1WeU9pQlZhVzUwT0VOc1lXMXdaV1JCY25KaGVYeDFibVJsWm1sdVpXUXNJRzl3ZEdsdmJuTTZJRUoxWm1abGNsUnZWR1Z1YzI5eVQzQjBhVzl1Y3lrNklGUmxibk52Y2lBOVBpQjdYRzRnSUdsbUlDaGlkV1ptWlhJZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25TVzFoWjJVZ1luVm1abVZ5SUcxMWMzUWdZbVVnWkdWbWFXNWxaQ2NwTzF4dUlDQjlYRzRnSUdsbUlDaHZjSFJwYjI1ekxtaGxhV2RvZENBOVBUMGdkVzVrWldacGJtVmtJSHg4SUc5d2RHbHZibk11ZDJsa2RHZ2dQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduU1cxaFoyVWdhR1ZwWjJoMElHRnVaQ0IzYVdSMGFDQnRkWE4wSUdKbElHUmxabWx1WldRbktUdGNiaUFnZlZ4dUlDQnBaaUFvYjNCMGFXOXVjeTUwWlc1emIzSk1ZWGx2ZFhRZ1BUMDlJQ2RPU0ZkREp5a2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblRraFhReUJVWlc1emIzSWdiR0Y1YjNWMElHbHpJRzV2ZENCemRYQndiM0owWldRZ2VXVjBKeWs3WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0I3YUdWcFoyaDBMQ0IzYVdSMGFIMGdQU0J2Y0hScGIyNXpPMXh1WEc0Z0lHTnZibk4wSUc1dmNtMGdQU0J2Y0hScGIyNXpMbTV2Y20wZ1B6OGdlMjFsWVc0NklESTFOU3dnWW1saGN6b2dNSDA3WEc0Z0lHeGxkQ0J1YjNKdFRXVmhiam9nVzI1MWJXSmxjaXdnYm5WdFltVnlMQ0J1ZFcxaVpYSXNJRzUxYldKbGNsMDdYRzRnSUd4bGRDQnViM0p0UW1saGN6b2dXMjUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhJc0lHNTFiV0psY2wwN1hHNWNiaUFnYVdZZ0tIUjVjR1Z2WmlBb2JtOXliUzV0WldGdUtTQTlQVDBnSjI1MWJXSmxjaWNwSUh0Y2JpQWdJQ0J1YjNKdFRXVmhiaUE5SUZ0dWIzSnRMbTFsWVc0c0lHNXZjbTB1YldWaGJpd2dibTl5YlM1dFpXRnVMQ0J1YjNKdExtMWxZVzVkTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUc1dmNtMU5aV0Z1SUQwZ1cyNXZjbTB1YldWaGJpRmJNRjBzSUc1dmNtMHViV1ZoYmlGYk1WMHNJRzV2Y20wdWJXVmhiaUZiTWwwc0lHNXZjbTB1YldWaGJpRmJNMTBnUHo4Z01qVTFYVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaDBlWEJsYjJZZ0tHNXZjbTB1WW1saGN5a2dQVDA5SUNkdWRXMWlaWEluS1NCN1hHNGdJQ0FnYm05eWJVSnBZWE1nUFNCYmJtOXliUzVpYVdGekxDQnViM0p0TG1KcFlYTXNJRzV2Y20wdVltbGhjeXdnYm05eWJTNWlhV0Z6WFR0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCdWIzSnRRbWxoY3lBOUlGdHViM0p0TG1KcFlYTWhXekJkTENCdWIzSnRMbUpwWVhNaFd6RmRMQ0J1YjNKdExtSnBZWE1oV3pKZExDQnViM0p0TG1KcFlYTWhXek5kSUQ4L0lEQmRPMXh1SUNCOVhHNWNiaUFnWTI5dWMzUWdhVzV3ZFhSbWIzSnRZWFFnUFNCdmNIUnBiMjV6TG1admNtMWhkQ0FoUFQwZ2RXNWtaV1pwYm1Wa0lEOGdiM0IwYVc5dWN5NW1iM0p0WVhRZ09pQW5Va2RDUVNjN1hHNGdJQzh2SUdSbFptRjFiSFFnZG1Gc2RXVWdhWE1nVWtkQ1FTQnphVzVqWlNCcGJXRm5aV1JoZEdFZ1lXNWtJRWhVVFV4SmJXRm5aVVZzWlcxbGJuUWdkWE5sY3lCcGRGeHVYRzRnSUdOdmJuTjBJRzkxZEhCMWRHWnZjbTFoZENBOVhHNGdJQ0FnSUNCdmNIUnBiMjV6TG5SbGJuTnZja1p2Y20xaGRDQWhQVDBnZFc1a1pXWnBibVZrSUQ4Z0tHOXdkR2x2Ym5NdWRHVnVjMjl5Um05eWJXRjBJQ0U5UFNCMWJtUmxabWx1WldRZ1B5QnZjSFJwYjI1ekxuUmxibk52Y2tadmNtMWhkQ0E2SUNkU1IwSW5LU0E2SUNkU1IwSW5PMXh1SUNCamIyNXpkQ0J6ZEhKcFpHVWdQU0JvWldsbmFIUWdLaUIzYVdSMGFEdGNiaUFnWTI5dWMzUWdabXh2WVhRek1rUmhkR0VnUFNCdmRYUndkWFJtYjNKdFlYUWdQVDA5SUNkU1IwSkJKeUEvSUc1bGR5QkdiRzloZERNeVFYSnlZWGtvYzNSeWFXUmxJQ29nTkNrZ09pQnVaWGNnUm14dllYUXpNa0Z5Y21GNUtITjBjbWxrWlNBcUlETXBPMXh1WEc0Z0lDOHZJRVJsWm1GMWJIUWdjRzlwYm5SbGNpQmhjM05wWjI1dFpXNTBjMXh1SUNCc1pYUWdjM1JsY0NBOUlEUXNJSEpKYldGblpWQnZhVzUwWlhJZ1BTQXdMQ0JuU1cxaFoyVlFiMmx1ZEdWeUlEMGdNU3dnWWtsdFlXZGxVRzlwYm5SbGNpQTlJRElzSUdGSmJXRm5aVkJ2YVc1MFpYSWdQU0F6TzF4dUlDQnNaWFFnY2xSbGJuTnZjbEJ2YVc1MFpYSWdQU0F3TENCblZHVnVjMjl5VUc5cGJuUmxjaUE5SUhOMGNtbGtaU3dnWWxSbGJuTnZjbEJ2YVc1MFpYSWdQU0J6ZEhKcFpHVWdLaUF5TENCaFZHVnVjMjl5VUc5cGJuUmxjaUE5SUMweE8xeHVYRzRnSUM4dklGVndaR0YwYVc1bklIUm9aU0J3YjJsdWRHVnlJR0Z6YzJsbmJtMWxiblJ6SUdKaGMyVmtJRzl1SUhSb1pTQnBibkIxZENCcGJXRm5aU0JtYjNKdFlYUmNiaUFnYVdZZ0tHbHVjSFYwWm05eWJXRjBJRDA5UFNBblVrZENKeWtnZTF4dUlDQWdJSE4wWlhBZ1BTQXpPMXh1SUNBZ0lISkpiV0ZuWlZCdmFXNTBaWElnUFNBd08xeHVJQ0FnSUdkSmJXRm5aVkJ2YVc1MFpYSWdQU0F4TzF4dUlDQWdJR0pKYldGblpWQnZhVzUwWlhJZ1BTQXlPMXh1SUNBZ0lHRkpiV0ZuWlZCdmFXNTBaWElnUFNBdE1UdGNiaUFnZlZ4dVhHNGdJQzh2SUZWd1pHRjBhVzVuSUhSb1pTQndiMmx1ZEdWeUlHRnpjMmxuYm0xbGJuUnpJR0poYzJWa0lHOXVJSFJvWlNCdmRYUndkWFFnZEdWdWMyOXlJR1p2Y20xaGRGeHVJQ0JwWmlBb2IzVjBjSFYwWm05eWJXRjBJRDA5UFNBblVrZENRU2NwSUh0Y2JpQWdJQ0JoVkdWdWMyOXlVRzlwYm5SbGNpQTlJSE4wY21sa1pTQXFJRE03WEc0Z0lIMGdaV3h6WlNCcFppQW9iM1YwY0hWMFptOXliV0YwSUQwOVBTQW5Va0pISnlrZ2UxeHVJQ0FnSUhKVVpXNXpiM0pRYjJsdWRHVnlJRDBnTUR0Y2JpQWdJQ0JpVkdWdWMyOXlVRzlwYm5SbGNpQTlJSE4wY21sa1pUdGNiaUFnSUNCblZHVnVjMjl5VUc5cGJuUmxjaUE5SUhOMGNtbGtaU0FxSURJN1hHNGdJSDBnWld4elpTQnBaaUFvYjNWMGNIVjBabTl5YldGMElEMDlQU0FuUWtkU0p5a2dlMXh1SUNBZ0lHSlVaVzV6YjNKUWIybHVkR1Z5SUQwZ01EdGNiaUFnSUNCblZHVnVjMjl5VUc5cGJuUmxjaUE5SUhOMGNtbGtaVHRjYmlBZ0lDQnlWR1Z1YzI5eVVHOXBiblJsY2lBOUlITjBjbWxrWlNBcUlESTdYRzRnSUgxY2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhOMGNtbGtaVHRjYmlBZ0lDQWdJQ0JwS3lzc0lISkpiV0ZuWlZCdmFXNTBaWElnS3owZ2MzUmxjQ3dnWWtsdFlXZGxVRzlwYm5SbGNpQXJQU0J6ZEdWd0xDQm5TVzFoWjJWUWIybHVkR1Z5SUNzOUlITjBaWEFzSUdGSmJXRm5aVkJ2YVc1MFpYSWdLejBnYzNSbGNDa2dlMXh1SUNBZ0lHWnNiMkYwTXpKRVlYUmhXM0pVWlc1emIzSlFiMmx1ZEdWeUt5dGRJRDBnS0dKMVptWmxjbHR5U1cxaFoyVlFiMmx1ZEdWeVhTQXJJRzV2Y20xQ2FXRnpXekJkS1NBdklHNXZjbTFOWldGdVd6QmRPMXh1SUNBZ0lHWnNiMkYwTXpKRVlYUmhXMmRVWlc1emIzSlFiMmx1ZEdWeUt5dGRJRDBnS0dKMVptWmxjbHRuU1cxaFoyVlFiMmx1ZEdWeVhTQXJJRzV2Y20xQ2FXRnpXekZkS1NBdklHNXZjbTFOWldGdVd6RmRPMXh1SUNBZ0lHWnNiMkYwTXpKRVlYUmhXMkpVWlc1emIzSlFiMmx1ZEdWeUt5dGRJRDBnS0dKMVptWmxjbHRpU1cxaFoyVlFiMmx1ZEdWeVhTQXJJRzV2Y20xQ2FXRnpXekpkS1NBdklHNXZjbTFOWldGdVd6SmRPMXh1SUNBZ0lHbG1JQ2hoVkdWdWMyOXlVRzlwYm5SbGNpQWhQVDBnTFRFZ0ppWWdZVWx0WVdkbFVHOXBiblJsY2lBaFBUMGdMVEVwSUh0Y2JpQWdJQ0FnSUdac2IyRjBNekpFWVhSaFcyRlVaVzV6YjNKUWIybHVkR1Z5S3l0ZElEMGdLR0oxWm1abGNsdGhTVzFoWjJWUWIybHVkR1Z5WFNBcklHNXZjbTFDYVdGeld6TmRLU0F2SUc1dmNtMU5aV0Z1V3pOZE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRVpzYjJGME16SkJjbkpoZVNBdFBpQnZjblF1VkdWdWMyOXlYRzRnSUdOdmJuTjBJRzkxZEhCMWRGUmxibk52Y2lBOUlHOTFkSEIxZEdadmNtMWhkQ0E5UFQwZ0oxSkhRa0VuSUQ4Z2JtVjNJRlJsYm5OdmNpZ25abXh2WVhRek1pY3NJR1pzYjJGME16SkVZWFJoTENCYk1Td2dOQ3dnYUdWcFoyaDBMQ0IzYVdSMGFGMHBJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGNnVkdWdWMyOXlLQ2RtYkc5aGRETXlKeXdnWm14dllYUXpNa1JoZEdFc0lGc3hMQ0F6TENCb1pXbG5hSFFzSUhkcFpIUm9YU2s3WEc0Z0lISmxkSFZ5YmlCdmRYUndkWFJVWlc1emIzSTdYRzU5TzF4dVhHNHZLaXBjYmlBcUlHbHRjR3hsYldWdWRHRjBhVzl1SUc5bUlGUmxibk52Y2k1bWNtOXRTVzFoWjJVb0tTNWNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJSFJsYm5OdmNrWnliMjFKYldGblpTQTlJR0Z6ZVc1aktGeHVJQ0FnSUdsdFlXZGxPaUJKYldGblpVUmhkR0Y4U0ZSTlRFbHRZV2RsUld4bGJXVnVkSHhKYldGblpVSnBkRzFoY0h4emRISnBibWNzWEc0Z0lDQWdiM0IwYVc5dWN6ODZJRlJsYm5OdmNrWnliMjFKYldGblpVUmhkR0ZQY0hScGIyNXpmRlJsYm5OdmNrWnliMjFKYldGblpVVnNaVzFsYm5SUGNIUnBiMjV6ZkZSbGJuTnZja1p5YjIxSmJXRm5aVUpwZEcxaGNFOXdkR2x2Ym5OOFhHNGdJQ0FnVkdWdWMyOXlSbkp2YlZWeWJFOXdkR2x2Ym5NcE9pQlFjbTl0YVhObFBGUmxibk52Y2o0Z1BUNGdlMXh1SUNBdkx5QmphR1ZqYTJsdVp5QjBhR1VnZEhsd1pTQnZaaUJwYldGblpTQnZZbXBsWTNSY2JpQWdZMjl1YzNRZ2FYTklWRTFNU1cxaFoyVkZiR1VnUFNCMGVYQmxiMllnS0VoVVRVeEpiV0ZuWlVWc1pXMWxiblFwSUNFOVBTQW5kVzVrWldacGJtVmtKeUFtSmlCcGJXRm5aU0JwYm5OMFlXNWpaVzltSUVoVVRVeEpiV0ZuWlVWc1pXMWxiblE3WEc0Z0lHTnZibk4wSUdselNXMWhaMlZFWVhSaFJXeGxJRDBnZEhsd1pXOW1JQ2hKYldGblpVUmhkR0VwSUNFOVBTQW5kVzVrWldacGJtVmtKeUFtSmlCcGJXRm5aU0JwYm5OMFlXNWpaVzltSUVsdFlXZGxSR0YwWVR0Y2JpQWdZMjl1YzNRZ2FYTkpiV0ZuWlVKcGRHMWhjQ0E5SUhSNWNHVnZaaUFvU1cxaFoyVkNhWFJ0WVhBcElDRTlQU0FuZFc1a1pXWnBibVZrSnlBbUppQnBiV0ZuWlNCcGJuTjBZVzVqWlc5bUlFbHRZV2RsUW1sMGJXRndPMXh1SUNCamIyNXpkQ0JwYzFOMGNtbHVaeUE5SUhSNWNHVnZaaUJwYldGblpTQTlQVDBnSjNOMGNtbHVaeWM3WEc1Y2JpQWdiR1YwSUdSaGRHRTZJRlZwYm5RNFEyeGhiWEJsWkVGeWNtRjVmSFZ1WkdWbWFXNWxaRHRjYmlBZ2JHVjBJR0oxWm1abGNsUnZWR1Z1YzI5eVQzQjBhVzl1Y3pvZ1FuVm1abVZ5Vkc5VVpXNXpiM0pQY0hScGIyNXpJRDBnYjNCMGFXOXVjeUEvUHlCN2ZUdGNibHh1SUNCamIyNXpkQ0JqY21WaGRHVkRZVzUyWVhNZ1BTQW9LU0E5UGlCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCa2IyTjFiV1Z1ZENBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJrYjJOMWJXVnVkQzVqY21WaGRHVkZiR1Z0Wlc1MEtDZGpZVzUyWVhNbktUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCUFptWnpZM0psWlc1RFlXNTJZWE1nSVQwOUlDZDFibVJsWm1sdVpXUW5LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdibVYzSUU5bVpuTmpjbVZsYmtOaGJuWmhjeWd4TENBeEtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2REWVc1MllYTWdhWE1nYm05MElITjFjSEJ2Y25SbFpDY3BPMXh1SUNBZ0lIMWNiaUFnZlR0Y2JpQWdZMjl1YzNRZ1kzSmxZWFJsUTJGdWRtRnpRMjl1ZEdWNGRDQTlJQ2hqWVc1MllYTTZJRWhVVFV4RFlXNTJZWE5GYkdWdFpXNTBmRTltWm5OamNtVmxia05oYm5aaGN5a2dQVDRnZTF4dUlDQWdJR2xtSUNoallXNTJZWE1nYVc1emRHRnVZMlZ2WmlCSVZFMU1RMkZ1ZG1GelJXeGxiV1Z1ZENrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdOaGJuWmhjeTVuWlhSRGIyNTBaWGgwS0NjeVpDY3BPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9ZMkZ1ZG1GeklHbHVjM1JoYm1ObGIyWWdUMlptYzJOeVpXVnVRMkZ1ZG1GektTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1kyRnVkbUZ6TG1kbGRFTnZiblJsZUhRb0p6SmtKeWtnWVhNZ1QyWm1jMk55WldWdVEyRnVkbUZ6VW1WdVpHVnlhVzVuUTI5dWRHVjRkREpFTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2JuVnNiRHRjYmlBZ0lDQjlYRzRnSUgwN1hHNGdJQzh2SUdacGJHeHBibWNnWVc1a0lHTm9aV05yYVc1bklHbHRZV2RsSUdOdmJtWnBaM1Z5WVhScGIyNGdiM0IwYVc5dWMxeHVJQ0JwWmlBb2FYTklWRTFNU1cxaFoyVkZiR1VwSUh0Y2JpQWdJQ0F2THlCSVZFMU1TVzFoWjJWRmJHVnRaVzUwSUMwZ2FXMWhaMlVnYjJKcVpXTjBJQzBnWm05eWJXRjBJR2x6SUZKSFFrRWdZbmtnWkdWbVlYVnNkRnh1SUNBZ0lHTnZibk4wSUdOaGJuWmhjeUE5SUdOeVpXRjBaVU5oYm5aaGN5Z3BPMXh1SUNBZ0lHTmhiblpoY3k1M2FXUjBhQ0E5SUdsdFlXZGxMbmRwWkhSb08xeHVJQ0FnSUdOaGJuWmhjeTVvWldsbmFIUWdQU0JwYldGblpTNW9aV2xuYUhRN1hHNGdJQ0FnWTI5dWMzUWdjR2w0Wld4ek1rUkRiMjUwWlhoMElEMGdZM0psWVhSbFEyRnVkbUZ6UTI5dWRHVjRkQ2hqWVc1MllYTXBPMXh1WEc0Z0lDQWdhV1lnS0hCcGVHVnNjekpFUTI5dWRHVjRkQ0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0JzWlhRZ2FHVnBaMmgwSUQwZ2FXMWhaMlV1YUdWcFoyaDBPMXh1SUNBZ0lDQWdiR1YwSUhkcFpIUm9JRDBnYVcxaFoyVXVkMmxrZEdnN1hHNGdJQ0FnSUNCcFppQW9iM0IwYVc5dWN5QWhQVDBnZFc1a1pXWnBibVZrSUNZbUlHOXdkR2x2Ym5NdWNtVnphWHBsWkVobGFXZG9kQ0FoUFQwZ2RXNWtaV1pwYm1Wa0lDWW1JRzl3ZEdsdmJuTXVjbVZ6YVhwbFpGZHBaSFJvSUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnYUdWcFoyaDBJRDBnYjNCMGFXOXVjeTV5WlhOcGVtVmtTR1ZwWjJoME8xeHVJQ0FnSUNBZ0lDQjNhV1IwYUNBOUlHOXdkR2x2Ym5NdWNtVnphWHBsWkZkcFpIUm9PMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JwWmlBb2IzQjBhVzl1Y3lBaFBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0FnSUdKMVptWmxjbFJ2VkdWdWMyOXlUM0IwYVc5dWN5QTlJRzl3ZEdsdmJuTTdYRzRnSUNBZ0lDQWdJR2xtSUNodmNIUnBiMjV6TG5SbGJuTnZja1p2Y20xaGRDQWhQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpiV0ZuWlNCcGJuQjFkQ0JqYjI1bWFXY2dabTl5YldGMElHMTFjM1FnWW1VZ1VrZENRU0JtYjNJZ1NGUk5URWx0WVdkbFJXeGxiV1Z1ZENjcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJR0oxWm1abGNsUnZWR1Z1YzI5eVQzQjBhVzl1Y3k1MFpXNXpiM0pHYjNKdFlYUWdQU0FuVWtkQ1FTYzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWW5WbVptVnlWRzlVWlc1emIzSlBjSFJwYjI1ekxtaGxhV2RvZENBOUlHaGxhV2RvZER0Y2JpQWdJQ0FnSUNBZ1luVm1abVZ5Vkc5VVpXNXpiM0pQY0hScGIyNXpMbmRwWkhSb0lEMGdkMmxrZEdnN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCaWRXWm1aWEpVYjFSbGJuTnZjazl3ZEdsdmJuTXVkR1Z1YzI5eVJtOXliV0YwSUQwZ0oxSkhRa0VuTzF4dUlDQWdJQ0FnSUNCaWRXWm1aWEpVYjFSbGJuTnZjazl3ZEdsdmJuTXVhR1ZwWjJoMElEMGdhR1ZwWjJoME8xeHVJQ0FnSUNBZ0lDQmlkV1ptWlhKVWIxUmxibk52Y2s5d2RHbHZibk11ZDJsa2RHZ2dQU0IzYVdSMGFEdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdjR2w0Wld4ek1rUkRiMjUwWlhoMExtUnlZWGRKYldGblpTaHBiV0ZuWlN3Z01Dd2dNQ2s3WEc0Z0lDQWdJQ0JrWVhSaElEMGdjR2w0Wld4ek1rUkRiMjUwWlhoMExtZGxkRWx0WVdkbFJHRjBZU2d3TENBd0xDQjNhV1IwYUN3Z2FHVnBaMmgwS1M1a1lYUmhPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBOaGJpQnViM1FnWVdOalpYTnpJR2x0WVdkbElHUmhkR0VuS1R0Y2JpQWdJQ0I5WEc0Z0lIMGdaV3h6WlNCcFppQW9hWE5KYldGblpVUmhkR0ZGYkdVcElIdGNiaUFnSUNCc1pYUWdhR1ZwWjJoME9pQnVkVzFpWlhJN1hHNGdJQ0FnYkdWMElIZHBaSFJvT2lCdWRXMWlaWEk3WEc1Y2JpQWdJQ0JwWmlBb2IzQjBhVzl1Y3lBaFBUMGdkVzVrWldacGJtVmtJQ1ltSUc5d2RHbHZibk11Y21WemFYcGxaRmRwWkhSb0lDRTlQU0IxYm1SbFptbHVaV1FnSmlZZ2IzQjBhVzl1Y3k1eVpYTnBlbVZrU0dWcFoyaDBJQ0U5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lHaGxhV2RvZENBOUlHOXdkR2x2Ym5NdWNtVnphWHBsWkVobGFXZG9kRHRjYmlBZ0lDQWdJSGRwWkhSb0lEMGdiM0IwYVc5dWN5NXlaWE5wZW1Wa1YybGtkR2c3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHaGxhV2RvZENBOUlHbHRZV2RsTG1obGFXZG9kRHRjYmlBZ0lDQWdJSGRwWkhSb0lEMGdhVzFoWjJVdWQybGtkR2c3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk1nSVQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdZblZtWm1WeVZHOVVaVzV6YjNKUGNIUnBiMjV6SUQwZ2IzQjBhVzl1Y3p0Y2JpQWdJQ0I5WEc0Z0lDQWdZblZtWm1WeVZHOVVaVzV6YjNKUGNIUnBiMjV6TG1admNtMWhkQ0E5SUNkU1IwSkJKenRjYmlBZ0lDQmlkV1ptWlhKVWIxUmxibk52Y2s5d2RHbHZibk11YUdWcFoyaDBJRDBnYUdWcFoyaDBPMXh1SUNBZ0lHSjFabVpsY2xSdlZHVnVjMjl5VDNCMGFXOXVjeTUzYVdSMGFDQTlJSGRwWkhSb08xeHVYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZEdWdGNFTmhiblpoY3lBOUlHTnlaV0YwWlVOaGJuWmhjeWdwTzF4dVhHNGdJQ0FnSUNCMFpXMXdRMkZ1ZG1GekxuZHBaSFJvSUQwZ2QybGtkR2c3WEc0Z0lDQWdJQ0IwWlcxd1EyRnVkbUZ6TG1obGFXZG9kQ0E5SUdobGFXZG9kRHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdjR2w0Wld4ek1rUkRiMjUwWlhoMElEMGdZM0psWVhSbFEyRnVkbUZ6UTI5dWRHVjRkQ2gwWlcxd1EyRnVkbUZ6S1R0Y2JseHVJQ0FnSUNBZ2FXWWdLSEJwZUdWc2N6SkVRMjl1ZEdWNGRDQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSEJwZUdWc2N6SkVRMjl1ZEdWNGRDNXdkWFJKYldGblpVUmhkR0VvYVcxaFoyVXNJREFzSURBcE8xeHVJQ0FnSUNBZ0lDQmtZWFJoSUQwZ2NHbDRaV3h6TWtSRGIyNTBaWGgwTG1kbGRFbHRZV2RsUkdGMFlTZ3dMQ0F3TENCM2FXUjBhQ3dnYUdWcFoyaDBLUzVrWVhSaE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkRFlXNGdibTkwSUdGalkyVnpjeUJwYldGblpTQmtZWFJoSnlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR1JoZEdFZ1BTQnBiV0ZuWlM1a1lYUmhPMXh1SUNBZ0lIMWNiaUFnZlNCbGJITmxJR2xtSUNocGMwbHRZV2RsUW1sMGJXRndLU0I3WEc0Z0lDQWdMeThnU1cxaFoyVkNhWFJ0WVhBZ0xTQnBiV0ZuWlNCdlltcGxZM1FnTFNCbWIzSnRZWFFnYlhWemRDQmlaU0J3Y205MmFXUmxaQ0JpZVNCMWMyVnlYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTWdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkUWJHVmhjMlVnY0hKdmRtbGtaU0JwYldGblpTQmpiMjVtYVdjZ2QybDBhQ0JtYjNKdFlYUWdabTl5SUVsdFlXZGxZbWwwYldGd0p5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnWTJGdWRtRnpJRDBnWTNKbFlYUmxRMkZ1ZG1GektDazdYRzRnSUNBZ1kyRnVkbUZ6TG5kcFpIUm9JRDBnYVcxaFoyVXVkMmxrZEdnN1hHNGdJQ0FnWTJGdWRtRnpMbWhsYVdkb2RDQTlJR2x0WVdkbExtaGxhV2RvZER0Y2JpQWdJQ0JqYjI1emRDQndhWGhsYkhNeVJFTnZiblJsZUhRZ1BTQmpjbVZoZEdWRFlXNTJZWE5EYjI1MFpYaDBLR05oYm5aaGN5azdYRzVjYmlBZ0lDQnBaaUFvY0dsNFpXeHpNa1JEYjI1MFpYaDBJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHaGxhV2RvZENBOUlHbHRZV2RsTG1obGFXZG9kRHRjYmlBZ0lDQWdJR052Ym5OMElIZHBaSFJvSUQwZ2FXMWhaMlV1ZDJsa2RHZzdYRzRnSUNBZ0lDQndhWGhsYkhNeVJFTnZiblJsZUhRdVpISmhkMGx0WVdkbEtHbHRZV2RsTENBd0xDQXdMQ0IzYVdSMGFDd2dhR1ZwWjJoMEtUdGNiaUFnSUNBZ0lHUmhkR0VnUFNCd2FYaGxiSE15UkVOdmJuUmxlSFF1WjJWMFNXMWhaMlZFWVhSaEtEQXNJREFzSUhkcFpIUm9MQ0JvWldsbmFIUXBMbVJoZEdFN1hHNGdJQ0FnSUNCaWRXWm1aWEpVYjFSbGJuTnZjazl3ZEdsdmJuTXVhR1ZwWjJoMElEMGdhR1ZwWjJoME8xeHVJQ0FnSUNBZ1luVm1abVZ5Vkc5VVpXNXpiM0pQY0hScGIyNXpMbmRwWkhSb0lEMGdkMmxrZEdnN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWW5WbVptVnlWRzlVWlc1emIzSW9aR0YwWVN3Z1luVm1abVZ5Vkc5VVpXNXpiM0pQY0hScGIyNXpLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkRFlXNGdibTkwSUdGalkyVnpjeUJwYldGblpTQmtZWFJoSnlrN1hHNGdJQ0FnZlZ4dUlDQjlJR1ZzYzJVZ2FXWWdLR2x6VTNSeWFXNW5LU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxMQ0J5WldwbFkzUXBJRDArSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR05oYm5aaGN5QTlJR055WldGMFpVTmhiblpoY3lncE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWTI5dWRHVjRkQ0E5SUdOeVpXRjBaVU5oYm5aaGMwTnZiblJsZUhRb1kyRnVkbUZ6S1R0Y2JpQWdJQ0FnSUdsbUlDZ2hhVzFoWjJVZ2ZId2dJV052Ym5SbGVIUXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdZMjl1YzNRZ2JtVjNTVzFoWjJVZ1BTQnVaWGNnU1cxaFoyVW9LVHRjYmlBZ0lDQWdJRzVsZDBsdFlXZGxMbU55YjNOelQzSnBaMmx1SUQwZ0owRnViMjU1Ylc5MWN5YzdYRzRnSUNBZ0lDQnVaWGRKYldGblpTNXpjbU1nUFNCcGJXRm5aVHRjYmlBZ0lDQWdJRzVsZDBsdFlXZGxMbTl1Ykc5aFpDQTlJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMkZ1ZG1GekxuZHBaSFJvSUQwZ2JtVjNTVzFoWjJVdWQybGtkR2c3WEc0Z0lDQWdJQ0FnSUdOaGJuWmhjeTVvWldsbmFIUWdQU0J1WlhkSmJXRm5aUzVvWldsbmFIUTdYRzRnSUNBZ0lDQWdJR052Ym5SbGVIUXVaSEpoZDBsdFlXZGxLRzVsZDBsdFlXZGxMQ0F3TENBd0xDQmpZVzUyWVhNdWQybGtkR2dzSUdOaGJuWmhjeTVvWldsbmFIUXBPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBiV2NnUFNCamIyNTBaWGgwTG1kbGRFbHRZV2RsUkdGMFlTZ3dMQ0F3TENCallXNTJZWE11ZDJsa2RHZ3NJR05oYm5aaGN5NW9aV2xuYUhRcE8xeHVYRzRnSUNBZ0lDQWdJR0oxWm1abGNsUnZWR1Z1YzI5eVQzQjBhVzl1Y3k1b1pXbG5hSFFnUFNCallXNTJZWE11YUdWcFoyaDBPMXh1SUNBZ0lDQWdJQ0JpZFdabVpYSlViMVJsYm5OdmNrOXdkR2x2Ym5NdWQybGtkR2dnUFNCallXNTJZWE11ZDJsa2RHZzdYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9ZblZtWm1WeVZHOVVaVzV6YjNJb2FXMW5MbVJoZEdFc0lHSjFabVpsY2xSdlZHVnVjMjl5VDNCMGFXOXVjeWtwTzF4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5S1R0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBsdWNIVjBJR1JoZEdFZ2NISnZkbWxrWldRZ2FYTWdibTkwSUhOMWNIQnZjblJsWkNBdElHRmliM0owWldRZ2RHVnVjMjl5SUdOeVpXRjBhVzl1SnlrN1hHNGdJSDFjYmx4dUlDQnBaaUFvWkdGMFlTQWhQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnY21WMGRYSnVJR0oxWm1abGNsUnZWR1Z1YzI5eUtHUmhkR0VzSUdKMVptWmxjbFJ2VkdWdWMyOXlUM0IwYVc5dWN5azdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpibkIxZENCa1lYUmhJSEJ5YjNacFpHVmtJR2x6SUc1dmRDQnpkWEJ3YjNKMFpXUWdMU0JoWW05eWRHVmtJSFJsYm5OdmNpQmpjbVZoZEdsdmJpY3BPMXh1SUNCOVhHNTlPMXh1WEc0dktpcGNiaUFxSUdsdGNHeGxiV1Z1ZEdGMGFXOXVJRzltSUZSbGJuTnZjaTVtY205dFZHVjRkSFZ5WlNncExseHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdkR1Z1YzI5eVJuSnZiVlJsZUhSMWNtVWdQU0E4VkNCbGVIUmxibVJ6SUZSbGJuTnZja2x1ZEdWeVptRmpaUzVVWlhoMGRYSmxSR0YwWVZSNWNHVnpQaWhjYmlBZ0lDQjBaWGgwZFhKbE9pQlVaVzV6YjNKSmJuUmxjbVpoWTJVdVZHVjRkSFZ5WlZSNWNHVXNJRzl3ZEdsdmJuTTZJRlJsYm5OdmNrWnliMjFVWlhoMGRYSmxUM0IwYVc5dWN6eFVQaWs2SUZSbGJuTnZjaUE5UGlCN1hHNGdJR052Ym5OMElIdDNhV1IwYUN3Z2FHVnBaMmgwTENCa2IzZHViRzloWkN3Z1pHbHpjRzl6WlgwZ1BTQnZjSFJwYjI1ek8xeHVJQ0F2THlCQmJIZGhlWE1nWVhOemRXMWxJRkpIUWtGR016SXVJRlJQUkU4NklITjFjSEJ2Y25RZ1pHbG1abVZ5Wlc1MElIUmxlSFIxY21VZ1ptOXliV0YwWEc0Z0lHTnZibk4wSUdScGJYTWdQU0JiTVN3Z2FHVnBaMmgwTENCM2FXUjBhQ3dnTkYwN1hHNGdJSEpsZEhWeWJpQnVaWGNnVkdWdWMyOXlLSHRzYjJOaGRHbHZiam9nSjNSbGVIUjFjbVVuTENCMGVYQmxPaUFuWm14dllYUXpNaWNzSUhSbGVIUjFjbVVzSUdScGJYTXNJR1J2ZDI1c2IyRmtMQ0JrYVhOd2IzTmxmU2s3WEc1OU8xeHVYRzR2S2lwY2JpQXFJR2x0Y0d4bGJXVnVkR0YwYVc5dUlHOW1JRlJsYm5OdmNpNW1jbTl0UjNCMVFuVm1abVZ5S0NrdVhHNGdLaTljYm1WNGNHOXlkQ0JqYjI1emRDQjBaVzV6YjNKR2NtOXRSM0IxUW5WbVptVnlJRDBnUEZRZ1pYaDBaVzVrY3lCVVpXNXpiM0pKYm5SbGNtWmhZMlV1UjNCMVFuVm1abVZ5UkdGMFlWUjVjR1Z6UGloY2JpQWdJQ0JuY0hWQ2RXWm1aWEk2SUZSbGJuTnZja2x1ZEdWeVptRmpaUzVIY0hWQ2RXWm1aWEpVZVhCbExDQnZjSFJwYjI1ek9pQlVaVzV6YjNKR2NtOXRSM0IxUW5WbVptVnlUM0IwYVc5dWN6eFVQaWs2SUZSbGJuTnZjaUE5UGlCN1hHNGdJR052Ym5OMElIdGtZWFJoVkhsd1pTd2daR2x0Y3l3Z1pHOTNibXh2WVdRc0lHUnBjM0J2YzJWOUlEMGdiM0IwYVc5dWN6dGNiaUFnY21WMGRYSnVJRzVsZHlCVVpXNXpiM0lvZTJ4dlkyRjBhVzl1T2lBblozQjFMV0oxWm1abGNpY3NJSFI1Y0dVNklHUmhkR0ZVZVhCbElEOC9JQ2RtYkc5aGRETXlKeXdnWjNCMVFuVm1abVZ5TENCa2FXMXpMQ0JrYjNkdWJHOWhaQ3dnWkdsemNHOXpaWDBwTzF4dWZUdGNibHh1THlvcVhHNGdLaUJwYlhCc1pXMWxiblJoZEdsdmJpQnZaaUJVWlc1emIzSXVabkp2YlZCcGJtNWxaRUoxWm1abGNpZ3BMbHh1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnZEdWdWMyOXlSbkp2YlZCcGJtNWxaRUoxWm1abGNpQTlJRHhVSUdWNGRHVnVaSE1nVkdWdWMyOXlTVzUwWlhKbVlXTmxMa053ZFZCcGJtNWxaRVJoZEdGVWVYQmxjejRvWEc0Z0lDQWdkSGx3WlRvZ1ZDd2dZblZtWm1WeU9pQlVaVzV6YjNKSmJuUmxjbVpoWTJVdVJHRjBZVlI1Y0dWTllYQmJWRjBzSUdScGJYTS9PaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU2s2SUZSbGJuTnZjaUE5UGx4dUlDQWdJRzVsZHlCVVpXNXpiM0lvZTJ4dlkyRjBhVzl1T2lBblkzQjFMWEJwYm01bFpDY3NJSFI1Y0dVc0lHUmhkR0U2SUdKMVptWmxjaXdnWkdsdGN6b2daR2x0Y3lBL1B5QmJZblZtWm1WeUxteGxibWQwYUYxOUtUdGNiaUlzSUNJdkx5QkRiM0I1Y21sbmFIUWdLR01wSUUxcFkzSnZjMjltZENCRGIzSndiM0poZEdsdmJpNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmk4dklFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQk5TVlFnVEdsalpXNXpaUzVjYmx4dWFXMXdiM0owSUh0VVpXNXpiM0o5SUdaeWIyMGdKeTR2ZEdWdWMyOXlMbXB6Snp0Y2JseHVaWGh3YjNKMElIUjVjR1VnVTNWd2NHOXlkR1ZrVkhsd1pXUkJjbkpoZVVOdmJuTjBjblZqZEc5eWN5QTlJRVpzYjJGME16SkJjbkpoZVVOdmJuTjBjblZqZEc5eWZGVnBiblE0UVhKeVlYbERiMjV6ZEhKMVkzUnZjbnhKYm5RNFFYSnlZWGxEYjI1emRISjFZM1J2Y254Y2JpQWdJQ0JWYVc1ME1UWkJjbkpoZVVOdmJuTjBjblZqZEc5eWZFbHVkREUyUVhKeVlYbERiMjV6ZEhKMVkzUnZjbnhKYm5Rek1rRnljbUY1UTI5dWMzUnlkV04wYjNKOFFtbG5TVzUwTmpSQmNuSmhlVU52Ym5OMGNuVmpkRzl5ZkZWcGJuUTRRWEp5WVhsRGIyNXpkSEoxWTNSdmNueGNiaUFnSUNCR2JHOWhkRFkwUVhKeVlYbERiMjV6ZEhKMVkzUnZjbnhWYVc1ME16SkJjbkpoZVVOdmJuTjBjblZqZEc5eWZFSnBaMVZwYm5RMk5FRnljbUY1UTI5dWMzUnlkV04wYjNJN1hHNWxlSEJ2Y25RZ2RIbHdaU0JUZFhCd2IzSjBaV1JVZVhCbFpFRnljbUY1SUQwZ1NXNXpkR0Z1WTJWVWVYQmxQRk4xY0hCdmNuUmxaRlI1Y0dWa1FYSnlZWGxEYjI1emRISjFZM1J2Y25NK08xeHVYRzR2THlCaElISjFiblJwYldVZ2JXRndJSFJvWVhRZ2JXRndjeUIwZVhCbElITjBjbWx1WnlCMGJ5QlVlWEJsWkVGeWNtRjVJR052Ym5OMGNuVmpkRzl5TGlCVGFHOTFiR1FnYldGMFkyZ2dWR1Z1YzI5eUxrUmhkR0ZVZVhCbFRXRndMbHh1Wlhod2IzSjBJR052Ym5OMElFNVZUVVZTU1VOZlZFVk9VMDlTWDFSWlVFVmZWRTlmVkZsUVJVUkJVbEpCV1Y5TlFWQWdQU0J1WlhjZ1RXRndQSE4wY21sdVp5d2dVM1Z3Y0c5eWRHVmtWSGx3WldSQmNuSmhlVU52Ym5OMGNuVmpkRzl5Y3o0b1cxeHVJQ0JiSjJac2IyRjBNekluTENCR2JHOWhkRE15UVhKeVlYbGRMRnh1SUNCYkozVnBiblE0Snl3Z1ZXbHVkRGhCY25KaGVWMHNYRzRnSUZzbmFXNTBPQ2NzSUVsdWREaEJjbkpoZVYwc1hHNGdJRnNuZFdsdWRERTJKeXdnVldsdWRERTJRWEp5WVhsZExGeHVJQ0JiSjJsdWRERTJKeXdnU1c1ME1UWkJjbkpoZVYwc1hHNGdJRnNuYVc1ME16SW5MQ0JKYm5Rek1rRnljbUY1WFN4Y2JpQWdXeWRpYjI5c0p5d2dWV2x1ZERoQmNuSmhlVjBzWEc0Z0lGc25abXh2WVhRMk5DY3NJRVpzYjJGME5qUkJjbkpoZVYwc1hHNGdJRnNuZFdsdWRETXlKeXdnVldsdWRETXlRWEp5WVhsZExGeHVYU2s3WEc1Y2JpOHZJR0VnY25WdWRHbHRaU0J0WVhBZ2RHaGhkQ0J0WVhCeklIUjVjR1VnYzNSeWFXNW5JSFJ2SUZSNWNHVmtRWEp5WVhrZ1kyOXVjM1J5ZFdOMGIzSXVJRk5vYjNWc1pDQnRZWFJqYUNCVVpXNXpiM0l1UkdGMFlWUjVjR1ZOWVhBdVhHNWxlSEJ2Y25RZ1kyOXVjM1FnVGxWTlJWSkpRMTlVUlU1VFQxSmZWRmxRUlVSQlVsSkJXVjlVVDE5VVdWQkZYMDFCVUNBOUlHNWxkeUJOWVhBOFUzVndjRzl5ZEdWa1ZIbHdaV1JCY25KaGVVTnZibk4wY25WamRHOXljeXdnVkdWdWMyOXlMbFI1Y0dVK0tGdGNiaUFnVzBac2IyRjBNekpCY25KaGVTd2dKMlpzYjJGME16SW5YU3hjYmlBZ1cxVnBiblE0UVhKeVlYa3NJQ2QxYVc1ME9DZGRMRnh1SUNCYlNXNTBPRUZ5Y21GNUxDQW5hVzUwT0NkZExGeHVJQ0JiVldsdWRERTJRWEp5WVhrc0lDZDFhVzUwTVRZblhTeGNiaUFnVzBsdWRERTJRWEp5WVhrc0lDZHBiblF4TmlkZExGeHVJQ0JiU1c1ME16SkJjbkpoZVN3Z0oybHVkRE15SjEwc1hHNGdJRnRHYkc5aGREWTBRWEp5WVhrc0lDZG1iRzloZERZMEoxMHNYRzRnSUZ0VmFXNTBNekpCY25KaGVTd2dKM1ZwYm5Rek1pZGRMRnh1WFNrN1hHNWNiaTh2SUdFZ1pIVnRiWGtnZEhsd1pTQmtaV05zWVhKaGRHbHZiaUJtYjNJZ1JteHZZWFF4TmtGeWNtRjVJR2x1SUdOaGMyVWdZVzU1SUhCdmJIbG1hV3hzSUdseklHRjJZV2xzWVdKc1pTNWNibVJsWTJ4aGNtVWdaMnh2WW1Gc0lIdGNiaUFnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUVCMGVYQmxjMk55YVhCMExXVnpiR2x1ZEM5dVlXMXBibWN0WTI5dWRtVnVkR2x2Yml3Z1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNXZMV1Y0Y0d4cFkybDBMV0Z1ZVZ4dUlDQmpiMjV6ZENCR2JHOWhkREUyUVhKeVlYazZJR0Z1ZVR0Y2JuMWNibHh1THk4Z2RHaGxJR1p2Ykd4dmQybHVaeUJqYjJSbElHRnNiRzkzY3lCa1pXeGhlV2x1WnlCbGVHVmpkWFJwYjI0Z2IyWWdRbWxuU1c1MEwwWnNiMkYwTVRaQmNuSmhlU0JqYUdWamEybHVaeTRnVkdocGN5QmhiR3h2ZDNNZ2JHRjZlU0JwYm1sMGFXRnNhWHBoZEdsdmJpQm1iM0pjYmk4dklFNVZUVVZTU1VOZlZFVk9VMDlTWDFSWlVFVmZWRTlmVkZsUVJVUkJVbEpCV1Y5TlFWQWdZVzVrSUU1VlRVVlNTVU5mVkVWT1UwOVNYMVJaVUVWRVFWSlNRVmxmVkU5ZlZGbFFSVjlOUVZBc0lIZG9hV05vSUdGc2JHOTNjeUJDYVdkSmJuUXZSbXh2WVhReE5rRnljbUY1WEc0dkx5QndiMng1Wm1sc2JDQnBaaUJoZG1GcGJHRmliR1V1WEc1c1pYUWdhWE5VZVhCbFpFRnljbUY1UTJobFkydGxaQ0E5SUdaaGJITmxPMXh1Wlhod2IzSjBJR052Ym5OMElHTm9aV05yVkhsd1pXUkJjbkpoZVNBOUlDZ3BJRDArSUh0Y2JpQWdhV1lnS0NGcGMxUjVjR1ZrUVhKeVlYbERhR1ZqYTJWa0tTQjdYRzRnSUNBZ2FYTlVlWEJsWkVGeWNtRjVRMmhsWTJ0bFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnWTI5dWMzUWdhWE5DYVdkSmJuUTJORUZ5Y21GNVFYWmhhV3hoWW14bElEMGdkSGx3Wlc5bUlFSnBaMGx1ZERZMFFYSnlZWGtnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltSUVKcFowbHVkRFkwUVhKeVlYa3Vabkp2YlR0Y2JpQWdJQ0JqYjI1emRDQnBjMEpwWjFWcGJuUTJORUZ5Y21GNVFYWmhhV3hoWW14bElEMGdkSGx3Wlc5bUlFSnBaMVZwYm5RMk5FRnljbUY1SUNFOVBTQW5kVzVrWldacGJtVmtKeUFtSmlCQ2FXZFZhVzUwTmpSQmNuSmhlUzVtY205dE8xeHVJQ0FnSUdOdmJuTjBJR2x6Um14dllYUXhOa0Z5Y21GNVFYWmhhV3hoWW14bElEMGdkSGx3Wlc5bUlFWnNiMkYwTVRaQmNuSmhlU0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY2dKaVlnUm14dllYUXhOa0Z5Y21GNUxtWnliMjA3WEc1Y2JpQWdJQ0JwWmlBb2FYTkNhV2RKYm5RMk5FRnljbUY1UVhaaGFXeGhZbXhsS1NCN1hHNGdJQ0FnSUNCT1ZVMUZVa2xEWDFSRlRsTlBVbDlVV1ZCRlgxUlBYMVJaVUVWRVFWSlNRVmxmVFVGUUxuTmxkQ2duYVc1ME5qUW5MQ0JDYVdkSmJuUTJORUZ5Y21GNUtUdGNiaUFnSUNBZ0lFNVZUVVZTU1VOZlZFVk9VMDlTWDFSWlVFVkVRVkpTUVZsZlZFOWZWRmxRUlY5TlFWQXVjMlYwS0VKcFowbHVkRFkwUVhKeVlYa3NJQ2RwYm5RMk5DY3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9hWE5DYVdkVmFXNTBOalJCY25KaGVVRjJZV2xzWVdKc1pTa2dlMXh1SUNBZ0lDQWdUbFZOUlZKSlExOVVSVTVUVDFKZlZGbFFSVjlVVDE5VVdWQkZSRUZTVWtGWlgwMUJVQzV6WlhRb0ozVnBiblEyTkNjc0lFSnBaMVZwYm5RMk5FRnljbUY1S1R0Y2JpQWdJQ0FnSUU1VlRVVlNTVU5mVkVWT1UwOVNYMVJaVUVWRVFWSlNRVmxmVkU5ZlZGbFFSVjlOUVZBdWMyVjBLRUpwWjFWcGJuUTJORUZ5Y21GNUxDQW5kV2x1ZERZMEp5azdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaHBjMFpzYjJGME1UWkJjbkpoZVVGMllXbHNZV0pzWlNrZ2UxeHVJQ0FnSUNBZ1RsVk5SVkpKUTE5VVJVNVRUMUpmVkZsUVJWOVVUMTlVV1ZCRlJFRlNVa0ZaWDAxQlVDNXpaWFFvSjJac2IyRjBNVFluTENCR2JHOWhkREUyUVhKeVlYa3BPMXh1SUNBZ0lDQWdUbFZOUlZKSlExOVVSVTVUVDFKZlZGbFFSVVJCVWxKQldWOVVUMTlVV1ZCRlgwMUJVQzV6WlhRb1JteHZZWFF4TmtGeWNtRjVMQ0FuWm14dllYUXhOaWNwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQXZMeUJwWmlCR2JHOWhkREUyUVhKeVlYa2dhWE1nYm05MElHRjJZV2xzWVdKc1pTd2dkWE5sSUNkVmFXNTBNVFpCY25KaGVTY2dkRzhnYzNSdmNtVWdkR2hsSUdSaGRHRXVYRzRnSUNBZ0lDQk9WVTFGVWtsRFgxUkZUbE5QVWw5VVdWQkZYMVJQWDFSWlVFVkVRVkpTUVZsZlRVRlFMbk5sZENnblpteHZZWFF4Tmljc0lGVnBiblF4TmtGeWNtRjVLVHRjYmlBZ0lDQjlYRzRnSUgxY2JuMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1EzQjFVR2x1Ym1Wa1EyOXVjM1J5ZFdOMGIzSlFZWEpoYldWMFpYSnpMQ0JIY0hWQ2RXWm1aWEpEYjI1emRISjFZM1J2Y2xCaGNtRnRaWFJsY25Nc0lGUmxlSFIxY21WRGIyNXpkSEoxWTNSdmNsQmhjbUZ0WlhSbGNuTjlJR1p5YjIwZ0p5NHZkR1Z1YzI5eUxXWmhZM1J2Y25rdWFuTW5PMXh1YVcxd2IzSjBJSHRVWlc1emIzSjlJR1p5YjIwZ0p5NHZkR1Z1YzI5eUxXbHRjR3d1YW5Nbk8xeHVYRzR2S2lwY2JpQXFJR05oYkdOMWJHRjBaU0J6YVhwbElHWnliMjBnWkdsdGN5NWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ1pHbHRjeUIwYUdVZ1pHbHRjeUJoY25KaGVTNGdUV0Y1SUdKbElHRnVJR2xzYkdWbllXd2dhVzV3ZFhRdVhHNGdLaTljYm1WNGNHOXlkQ0JqYjI1emRDQmpZV3hqZFd4aGRHVlRhWHBsSUQwZ0tHUnBiWE02SUhKbFlXUnZibXg1SUhWdWEyNXZkMjViWFNrNklHNTFiV0psY2lBOVBpQjdYRzRnSUd4bGRDQnphWHBsSUQwZ01UdGNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCa2FXMXpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnWTI5dWMzUWdaR2x0SUQwZ1pHbHRjMXRwWFR0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdScGJTQWhQVDBnSjI1MWJXSmxjaWNnZkh3Z0lVNTFiV0psY2k1cGMxTmhabVZKYm5SbFoyVnlLR1JwYlNrcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9ZR1JwYlhOYkpIdHBmVjBnYlhWemRDQmlaU0JoYmlCcGJuUmxaMlZ5TENCbmIzUTZJQ1I3WkdsdGZXQXBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9aR2x0SUR3Z01Da2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRkpoYm1kbFJYSnliM0lvWUdScGJYTmJKSHRwZlYwZ2JYVnpkQ0JpWlNCaElHNXZiaTF1WldkaGRHbDJaU0JwYm5SbFoyVnlMQ0JuYjNRNklDUjdaR2x0ZldBcE8xeHVJQ0FnSUgxY2JpQWdJQ0J6YVhwbElDbzlJR1JwYlR0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYzJsNlpUdGNibjA3WEc1Y2JpOHFLbHh1SUNvZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRnYjJZZ1ZHVnVjMjl5TG5KbGMyaGhjR1VvS1Z4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ2RHVnVjMjl5VW1WemFHRndaU0E5SUNoMFpXNXpiM0k2SUZSbGJuTnZjaXdnWkdsdGN6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJVWlc1emIzSWdQVDRnZTF4dUlDQnpkMmwwWTJnZ0tIUmxibk52Y2k1c2IyTmhkR2x2YmlrZ2UxeHVJQ0FnSUdOaGMyVWdKMk53ZFNjNlhHNGdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGUmxibk52Y2loMFpXNXpiM0l1ZEhsd1pTd2dkR1Z1YzI5eUxtUmhkR0VzSUdScGJYTXBPMXh1SUNBZ0lHTmhjMlVnSjJOd2RTMXdhVzV1WldRbk9seHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QlVaVzV6YjNJb2UxeHVJQ0FnSUNBZ0lDQnNiMk5oZEdsdmJqb2dKMk53ZFMxd2FXNXVaV1FuTEZ4dUlDQWdJQ0FnSUNCa1lYUmhPaUIwWlc1emIzSXVaR0YwWVNCaGN5QkRjSFZRYVc1dVpXUkRiMjV6ZEhKMVkzUnZjbEJoY21GdFpYUmxjbk5iSjJSaGRHRW5YU3hjYmlBZ0lDQWdJQ0FnZEhsd1pUb2dkR1Z1YzI5eUxuUjVjR1VnWVhNZ1EzQjFVR2x1Ym1Wa1EyOXVjM1J5ZFdOMGIzSlFZWEpoYldWMFpYSnpXeWQwZVhCbEoxMHNYRzRnSUNBZ0lDQWdJR1JwYlhNc1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCallYTmxJQ2QwWlhoMGRYSmxKenBjYmlBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnVkdWdWMyOXlLSHRjYmlBZ0lDQWdJQ0FnYkc5allYUnBiMjQ2SUNkMFpYaDBkWEpsSnl4Y2JpQWdJQ0FnSUNBZ2RHVjRkSFZ5WlRvZ2RHVnVjMjl5TG5SbGVIUjFjbVVzWEc0Z0lDQWdJQ0FnSUhSNWNHVTZJSFJsYm5OdmNpNTBlWEJsSUdGeklGUmxlSFIxY21WRGIyNXpkSEoxWTNSdmNsQmhjbUZ0WlhSbGNuTmJKM1I1Y0dVblhTeGNiaUFnSUNBZ0lDQWdaR2x0Y3l4Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUdOaGMyVWdKMmR3ZFMxaWRXWm1aWEluT2x4dUlDQWdJQ0FnY21WMGRYSnVJRzVsZHlCVVpXNXpiM0lvZTF4dUlDQWdJQ0FnSUNCc2IyTmhkR2x2YmpvZ0oyZHdkUzFpZFdabVpYSW5MRnh1SUNBZ0lDQWdJQ0JuY0hWQ2RXWm1aWEk2SUhSbGJuTnZjaTVuY0hWQ2RXWm1aWElzWEc0Z0lDQWdJQ0FnSUhSNWNHVTZJSFJsYm5OdmNpNTBlWEJsSUdGeklFZHdkVUoxWm1abGNrTnZibk4wY25WamRHOXlVR0Z5WVcxbGRHVnljMXNuZEhsd1pTZGRMRnh1SUNBZ0lDQWdJQ0JrYVcxekxGeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnZEdWdWMyOXlVbVZ6YUdGd1pUb2dkR1Z1YzI5eUlHeHZZMkYwYVc5dUlDUjdkR1Z1YzI5eUxteHZZMkYwYVc5dWZTQnBjeUJ1YjNRZ2MzVndjRzl5ZEdWa1lDazdYRzRnSUgxY2JuMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN2RHVnVjMjl5Vkc5RVlYUmhWVkpNTENCMFpXNXpiM0pVYjBsdFlXZGxSR0YwWVgwZ1puSnZiU0FuTGk5MFpXNXpiM0l0WTI5dWRtVnljMmx2YmkxcGJYQnNMbXB6Snp0Y2JtbHRjRzl5ZENCN1ZHVnVjMjl5Vkc5RVlYUmhWWEpzVDNCMGFXOXVjeXdnVkdWdWMyOXlWRzlKYldGblpVUmhkR0ZQY0hScGIyNXpmU0JtY205dElDY3VMM1JsYm5OdmNpMWpiMjUyWlhKemFXOXVMbXB6Snp0Y2JtbHRjRzl5ZENCN2RHVnVjMjl5Um5KdmJVZHdkVUoxWm1abGNpd2dkR1Z1YzI5eVJuSnZiVWx0WVdkbExDQjBaVzV6YjNKR2NtOXRVR2x1Ym1Wa1FuVm1abVZ5TENCMFpXNXpiM0pHY205dFZHVjRkSFZ5WlgwZ1puSnZiU0FuTGk5MFpXNXpiM0l0Wm1GamRHOXllUzFwYlhCc0xtcHpKenRjYm1sdGNHOXlkQ0I3UTNCMVVHbHVibVZrUTI5dWMzUnlkV04wYjNKUVlYSmhiV1YwWlhKekxDQkhjSFZDZFdabVpYSkRiMjV6ZEhKMVkzUnZjbEJoY21GdFpYUmxjbk1zSUZSbGJuTnZja1p5YjIxSGNIVkNkV1ptWlhKUGNIUnBiMjV6TENCVVpXNXpiM0pHY205dFNXMWhaMlZDYVhSdFlYQlBjSFJwYjI1ekxDQlVaVzV6YjNKR2NtOXRTVzFoWjJWRVlYUmhUM0IwYVc5dWN5d2dWR1Z1YzI5eVJuSnZiVWx0WVdkbFJXeGxiV1Z1ZEU5d2RHbHZibk1zSUZSbGJuTnZja1p5YjIxVVpYaDBkWEpsVDNCMGFXOXVjeXdnVkdWdWMyOXlSbkp2YlZWeWJFOXdkR2x2Ym5Nc0lGUmxlSFIxY21WRGIyNXpkSEoxWTNSdmNsQmhjbUZ0WlhSbGNuTjlJR1p5YjIwZ0p5NHZkR1Z1YzI5eUxXWmhZM1J2Y25rdWFuTW5PMXh1YVcxd2IzSjBJSHRqYUdWamExUjVjR1ZrUVhKeVlYa3NJRTVWVFVWU1NVTmZWRVZPVTA5U1gxUlpVRVZmVkU5ZlZGbFFSVVJCVWxKQldWOU5RVkFzSUU1VlRVVlNTVU5mVkVWT1UwOVNYMVJaVUVWRVFWSlNRVmxmVkU5ZlZGbFFSVjlOUVZBc0lGTjFjSEJ2Y25SbFpGUjVjR1ZrUVhKeVlYa3NJRk4xY0hCdmNuUmxaRlI1Y0dWa1FYSnlZWGxEYjI1emRISjFZM1J2Y25OOUlHWnliMjBnSnk0dmRHVnVjMjl5TFdsdGNHd3RkSGx3WlMxdFlYQndhVzVuTG1wekp6dGNibWx0Y0c5eWRDQjdZMkZzWTNWc1lYUmxVMmw2WlN3Z2RHVnVjMjl5VW1WemFHRndaWDBnWm5KdmJTQW5MaTkwWlc1emIzSXRkWFJwYkhNdGFXMXdiQzVxY3ljN1hHNXBiWEJ2Y25RZ2UxUmxibk52Y2lCaGN5QlVaVzV6YjNKSmJuUmxjbVpoWTJWOUlHWnliMjBnSnk0dmRHVnVjMjl5TG1wekp6dGNibHh1THk4Z2RIbHdaU0JoYkdsaGMyVnpJR1p2Y2lCMGFHOXpaU0JsZUhCdmNuUmxaQ0JtY205dElGUmxibk52Y2lCcGJuUmxjbVpoWTJWY2JseHVkSGx3WlNCVVpXNXpiM0pVZVhCbElEMGdWR1Z1YzI5eVNXNTBaWEptWVdObExsUjVjR1U3WEc1MGVYQmxJRlJsYm5OdmNrUmhkR0ZVZVhCbElEMGdWR1Z1YzI5eVNXNTBaWEptWVdObExrUmhkR0ZVZVhCbE8xeHVkSGx3WlNCVVpXNXpiM0pFWVhSaFRHOWpZWFJwYjI0Z1BTQlVaVzV6YjNKSmJuUmxjbVpoWTJVdVJHRjBZVXh2WTJGMGFXOXVPMXh1ZEhsd1pTQlVaVzV6YjNKVVpYaDBkWEpsVkhsd1pTQTlJRlJsYm5OdmNrbHVkR1Z5Wm1GalpTNVVaWGgwZFhKbFZIbHdaVHRjYm5SNWNHVWdWR1Z1YzI5eVIzQjFRblZtWm1WeVZIbHdaU0E5SUZSbGJuTnZja2x1ZEdWeVptRmpaUzVIY0hWQ2RXWm1aWEpVZVhCbE8xeHVYRzR2S2lwY2JpQXFJSFJvWlNCcGJYQnNaVzFsYm5SaGRHbHZiaUJ2WmlCVVpXNXpiM0lnYVc1MFpYSm1ZV05sTGx4dUlDcGNiaUFxSUVCcFoyNXZjbVZjYmlBcUwxeHVaWGh3YjNKMElHTnNZWE56SUZSbGJuTnZjaUJwYlhCc1pXMWxiblJ6SUZSbGJuTnZja2x1ZEdWeVptRmpaU0I3WEc0Z0lDOHZJQ055WldkcGIyNGdZMjl1YzNSeWRXTjBiM0p6WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU52Ym5OMGNuVmpkQ0JoSUc1bGR5QkRVRlVnZEdWdWMyOXlJRzlpYW1WamRDQm1jbTl0SUhSb1pTQm5hWFpsYmlCMGVYQmxMQ0JrWVhSaElHRnVaQ0JrYVcxekxseHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBiM0lvWEc0Z0lDQWdJQ0IwZVhCbE9pQlVaVzV6YjNKVWVYQmxMQ0JrWVhSaE9pQlVaVzV6YjNKRVlYUmhWSGx3Wlh4eVpXRmtiMjVzZVNCemRISnBibWRiWFh4eVpXRmtiMjVzZVNCdWRXMWlaWEpiWFh4eVpXRmtiMjVzZVNCaWIyOXNaV0Z1VzEwc1hHNGdJQ0FnSUNCa2FXMXpQem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBwTzF4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1YzNSeWRXTjBJR0VnYm1WM0lFTlFWU0IwWlc1emIzSWdiMkpxWldOMElHWnliMjBnZEdobElHZHBkbVZ1SUdSaGRHRWdZVzVrSUdScGJYTXVJRlI1Y0dVZ2FYTWdhVzVtWlhKeVpXUWdabkp2YlNCa1lYUmhMbHh1SUNBZ0tpOWNiaUFnWTI5dWMzUnlkV04wYjNJb1pHRjBZVG9nVkdWdWMyOXlSR0YwWVZSNWNHVjhjbVZoWkc5dWJIa2djM1J5YVc1blcxMThjbVZoWkc5dWJIa2dZbTl2YkdWaGJsdGRMQ0JrYVcxelB6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPMXh1SUNBdktpcGNiaUFnSUNvZ1EyOXVjM1J5ZFdOMElHRWdibVYzSUhSbGJuTnZjaUJ2WW1wbFkzUWdabkp2YlNCMGFHVWdjR2x1Ym1Wa0lFTlFWU0JrWVhSaElIZHBkR2dnZEdobElHZHBkbVZ1SUhSNWNHVWdZVzVrSUdScGJYTXVYRzRnSUNBcVhHNGdJQ0FxSUZSbGJuTnZjaWR6SUd4dlkyRjBhVzl1SUhkcGJHd2dZbVVnYzJWMElIUnZJQ2RqY0hVdGNHbHVibVZrSnk1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIQmhjbUZ0Y3lBdElGTndaV05wWm5rZ2RHaGxJSEJoY21GdFpYUmxjbk1nZEc4Z1kyOXVjM1J5ZFdOMElIUm9aU0IwWlc1emIzSXVYRzRnSUNBcUwxeHVJQ0JqYjI1emRISjFZM1J2Y2lod1lYSmhiWE02SUVOd2RWQnBibTVsWkVOdmJuTjBjblZqZEc5eVVHRnlZVzFsZEdWeWN5azdYRzRnSUM4cUtseHVJQ0FnS2lCRGIyNXpkSEoxWTNRZ1lTQnVaWGNnZEdWdWMyOXlJRzlpYW1WamRDQm1jbTl0SUhSb1pTQlhaV0pIVENCMFpYaDBkWEpsSUhkcGRHZ2dkR2hsSUdkcGRtVnVJSFI1Y0dVZ1lXNWtJR1JwYlhNdVhHNGdJQ0FxWEc0Z0lDQXFJRlJsYm5OdmNpZHpJR3h2WTJGMGFXOXVJSGRwYkd3Z1ltVWdjMlYwSUhSdklDZDBaWGgwZFhKbEp5NWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSEJoY21GdGN5QXRJRk53WldOcFpua2dkR2hsSUhCaGNtRnRaWFJsY25NZ2RHOGdZMjl1YzNSeWRXTjBJSFJvWlNCMFpXNXpiM0l1WEc0Z0lDQXFMMXh1SUNCamIyNXpkSEoxWTNSdmNpaHdZWEpoYlhNNklGUmxlSFIxY21WRGIyNXpkSEoxWTNSdmNsQmhjbUZ0WlhSbGNuTXBPMXh1SUNBdktpcGNiaUFnSUNvZ1EyOXVjM1J5ZFdOMElHRWdibVYzSUhSbGJuTnZjaUJ2WW1wbFkzUWdabkp2YlNCMGFHVWdWMlZpUjFCVklHSjFabVpsY2lCM2FYUm9JSFJvWlNCbmFYWmxiaUIwZVhCbElHRnVaQ0JrYVcxekxseHVJQ0FnS2x4dUlDQWdLaUJVWlc1emIzSW5jeUJzYjJOaGRHbHZiaUIzYVd4c0lHSmxJSE5sZENCMGJ5QW5aM0IxTFdKMVptWmxjaWN1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCd1lYSmhiWE1nTFNCVGNHVmphV1o1SUhSb1pTQndZWEpoYldWMFpYSnpJSFJ2SUdOdmJuTjBjblZqZENCMGFHVWdkR1Z1YzI5eUxseHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBiM0lvY0dGeVlXMXpPaUJIY0hWQ2RXWm1aWEpEYjI1emRISjFZM1J2Y2xCaGNtRnRaWFJsY25NcE8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCcGJYQnNaVzFsYm5SaGRHbHZiaTVjYmlBZ0lDb3ZYRzRnSUdOdmJuTjBjblZqZEc5eUtGeHVJQ0FnSUNBZ1lYSm5NRG9nVkdWdWMyOXlWSGx3Wlh4VVpXNXpiM0pFWVhSaFZIbHdaWHh5WldGa2IyNXNlU0J6ZEhKcGJtZGJYWHh5WldGa2IyNXNlU0JpYjI5c1pXRnVXMTE4UTNCMVVHbHVibVZrUTI5dWMzUnlkV04wYjNKUVlYSmhiV1YwWlhKemZGeHVJQ0FnSUNBZ1ZHVjRkSFZ5WlVOdmJuTjBjblZqZEc5eVVHRnlZVzFsZEdWeWMzeEhjSFZDZFdabVpYSkRiMjV6ZEhKMVkzUnZjbEJoY21GdFpYUmxjbk1zWEc0Z0lDQWdJQ0JoY21jeFB6b2dWR1Z1YzI5eVJHRjBZVlI1Y0dWOGNtVmhaRzl1YkhrZ2JuVnRZbVZ5VzExOGNtVmhaRzl1YkhrZ2MzUnlhVzVuVzExOGNtVmhaRzl1YkhrZ1ltOXZiR1ZoYmx0ZExDQmhjbWN5UHpvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwcElIdGNiaUFnSUNBdkx5QndaWEptYjNKdElHOXVaUzEwYVcxbElHTm9aV05ySUdadmNpQkNhV2RKYm5RdlJteHZZWFF4TmtGeWNtRjVJSE4xY0hCdmNuUmNiaUFnSUNCamFHVmphMVI1Y0dWa1FYSnlZWGtvS1R0Y2JseHVJQ0FnSUd4bGRDQjBlWEJsT2lCVVpXNXpiM0pVZVhCbE8xeHVJQ0FnSUd4bGRDQmthVzF6T2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFR0Y2JseHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ1lYSm5NQ0E5UFQwZ0oyOWlhbVZqZENjZ0ppWWdKMnh2WTJGMGFXOXVKeUJwYmlCaGNtY3dLU0I3WEc0Z0lDQWdJQ0F2TDF4dUlDQWdJQ0FnTHk4Z1kyOXVjM1J5ZFdOMGFXNW5JSFJsYm5OdmNpQm1jbTl0SUhOd1pXTnBabWxqSUd4dlkyRjBhVzl1WEc0Z0lDQWdJQ0F2TDF4dUlDQWdJQ0FnZEdocGN5NWtZWFJoVEc5allYUnBiMjRnUFNCaGNtY3dMbXh2WTJGMGFXOXVPMXh1SUNBZ0lDQWdkSGx3WlNBOUlHRnlaekF1ZEhsd1pUdGNiaUFnSUNBZ0lHUnBiWE1nUFNCaGNtY3dMbVJwYlhNN1hHNGdJQ0FnSUNCemQybDBZMmdnS0dGeVp6QXViRzlqWVhScGIyNHBJSHRjYmlBZ0lDQWdJQ0FnWTJGelpTQW5ZM0IxTFhCcGJtNWxaQ2M2SUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGVIQmxZM1JsWkZSNWNHVmtRWEp5WVhsRGIyNXpkSEoxWTNSdmNpQTlJRTVWVFVWU1NVTmZWRVZPVTA5U1gxUlpVRVZmVkU5ZlZGbFFSVVJCVWxKQldWOU5RVkF1WjJWMEtIUjVjR1VwTzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2doWlhod1pXTjBaV1JVZVhCbFpFRnljbUY1UTI5dWMzUnlkV04wYjNJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb1lIVnVjM1Z3Y0c5eWRHVmtJSFI1Y0dVZ1hDSWtlM1I1Y0dWOVhDSWdkRzhnWTNKbFlYUmxJSFJsYm5OdmNpQm1jbTl0SUhCcGJtNWxaQ0JpZFdabVpYSmdLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0NFb1lYSm5NQzVrWVhSaElHbHVjM1JoYm1ObGIyWWdaWGh3WldOMFpXUlVlWEJsWkVGeWNtRjVRMjl1YzNSeWRXTjBiM0lwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0dCaWRXWm1aWElnYzJodmRXeGtJR0psSUc5bUlIUjVjR1VnSkh0bGVIQmxZM1JsWkZSNWNHVmtRWEp5WVhsRGIyNXpkSEoxWTNSdmNpNXVZVzFsZldBcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbU53ZFVSaGRHRWdQU0JoY21jd0xtUmhkR0U3WEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1kyRnpaU0FuZEdWNGRIVnlaU2M2SUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pTQWhQVDBnSjJac2IyRjBNekluS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0dCMWJuTjFjSEJ2Y25SbFpDQjBlWEJsSUZ3aUpIdDBlWEJsZlZ3aUlIUnZJR055WldGMFpTQjBaVzV6YjNJZ1puSnZiU0IwWlhoMGRYSmxZQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVozQjFWR1Y0ZEhWeVpVUmhkR0VnUFNCaGNtY3dMblJsZUhSMWNtVTdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NWtiM2R1Ykc5aFpHVnlJRDBnWVhKbk1DNWtiM2R1Ykc5aFpEdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtUnBjM0J2YzJWeUlEMGdZWEpuTUM1a2FYTndiM05sTzF4dUlDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTmhjMlVnSjJkd2RTMWlkV1ptWlhJbk9pQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tDaDBlWEJsSUNFOVBTQW5abXh2WVhRek1pY2dKaVlnZEhsd1pTQWhQVDBnSjJac2IyRjBNVFluSUNZbUlIUjVjR1VnSVQwOUlDZHBiblF6TWljZ0ppWWdkSGx3WlNBaFBUMGdKMmx1ZERZMEp5QW1KaUIwZVhCbElDRTlQU0FuZFdsdWRETXlKeUFtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhsd1pTQWhQVDBnSjNWcGJuUTRKeUFtSmlCMGVYQmxJQ0U5UFNBblltOXZiQ2NwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0dCMWJuTjFjSEJ2Y25SbFpDQjBlWEJsSUZ3aUpIdDBlWEJsZlZ3aUlIUnZJR055WldGMFpTQjBaVzV6YjNJZ1puSnZiU0JuY0hVZ1luVm1abVZ5WUNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVaM0IxUW5WbVptVnlSR0YwWVNBOUlHRnlaekF1WjNCMVFuVm1abVZ5TzF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Wkc5M2JteHZZV1JsY2lBOUlHRnlaekF1Wkc5M2JteHZZV1E3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVrYVhOd2IzTmxjaUE5SUdGeVp6QXVaR2x6Y0c5elpUdGNiaUFnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnVkdWdWMyOXlJR052Ym5OMGNuVmpkRzl5T2lCMWJuTjFjSEJ2Y25SbFpDQnNiMk5oZEdsdmJpQW5KSHQwYUdsekxtUmhkR0ZNYjJOaGRHbHZibjBuWUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQzh2WEc0Z0lDQWdJQ0F2THlCamIyNXpkSEoxWTNScGJtY2dkR1Z1YzI5eUlHOW1JR3h2WTJGMGFXOXVJQ2RqY0hVblhHNGdJQ0FnSUNBdkwxeHVJQ0FnSUNBZ2JHVjBJR1JoZEdFNklGUmxibk52Y2tSaGRHRlVlWEJsTzF4dUlDQWdJQ0FnYkdWMElHMWhlV0psUkdsdGN6b2dkSGx3Wlc5bUlHRnlaekY4ZEhsd1pXOW1JR0Z5WnpJN1hHNGdJQ0FnSUNBdkx5QmphR1ZqYXlCM2FHVjBhR1Z5SUdGeVp6QWdhWE1nZEhsd1pTQnZjaUJrWVhSaFhHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHRnlaekFnUFQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ0lDQWdJQzh2WEc0Z0lDQWdJQ0FnSUM4dklFOTJaWEp5YVdSbE9pQmpiMjV6ZEhKMVkzUnZjaWgwZVhCbExDQmtZWFJoTENBdUxpNHBYRzRnSUNBZ0lDQWdJQzh2WEc0Z0lDQWdJQ0FnSUhSNWNHVWdQU0JoY21jd08xeHVJQ0FnSUNBZ0lDQnRZWGxpWlVScGJYTWdQU0JoY21jeU8xeHVJQ0FnSUNBZ0lDQnBaaUFvWVhKbk1DQTlQVDBnSjNOMGNtbHVaeWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJ6ZEhKcGJtY2dkR1Z1YzI5eVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0NGQmNuSmhlUzVwYzBGeWNtRjVLR0Z5WnpFcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtDZEJJSE4wY21sdVp5QjBaVzV6YjNKY1hDZHpJR1JoZEdFZ2JYVnpkQ0JpWlNCaElITjBjbWx1WnlCaGNuSmhlUzRuS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2QyVWdaRzl1SjNRZ1kyaGxZMnNnZDJobGRHaGxjaUJsZG1WeWVTQmxiR1Z0Wlc1MElHbHVJSFJvWlNCaGNuSmhlU0JwY3lCemRISnBibWM3SUhSb2FYTWdhWE1nZEc5dklITnNiM2N1SUhkbElHRnpjM1Z0WlNCcGRDZHpJR052Y25KbFkzUWdZVzVrWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdaWEp5YjNJZ2QybHNiQ0JpWlNCd2IzQjFiR0YwWldRZ1lYUWdhVzVtWlhKbGJtTmxYRzRnSUNBZ0lDQWdJQ0FnWkdGMFlTQTlJR0Z5WnpFN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnYm5WdFpYSnBZeUIwWlc1emIzSmNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQjBlWEJsWkVGeWNtRjVRMjl1YzNSeWRXTjBiM0lnUFNCT1ZVMUZVa2xEWDFSRlRsTlBVbDlVV1ZCRlgxUlBYMVJaVUVWRVFWSlNRVmxmVFVGUUxtZGxkQ2hoY21jd0tUdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaV1JCY25KaGVVTnZibk4wY25WamRHOXlJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb1lGVnVjM1Z3Y0c5eWRHVmtJSFJsYm5OdmNpQjBlWEJsT2lBa2UyRnlaekI5TG1BcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCcFppQW9RWEp5WVhrdWFYTkJjbkpoZVNoaGNtY3hLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dGeVp6QWdQVDA5SUNkbWJHOWhkREUySnlBbUppQjBlWEJsWkVGeWNtRjVRMjl1YzNSeWRXTjBiM0lnUFQwOUlGVnBiblF4TmtGeWNtRjVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUZkb1pXNGdibThnUm14dllYUXhOa0Z5Y21GNUlIQnZiSGxtYVd4c0lHbHpJSFZ6WldRc0lIZGxJR05oYm01dmRDQmpjbVZoZEdVZ0oyWnNiMkYwTVRZbklIUmxibk52Y2lCbWNtOXRJRzUxYldKbGNpQmhjbkpoZVM1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1ZHaHliM2NnWlhKeWIzSWdhR1Z5WlNCaVpXTmhkWE5sSUhkb1pXNGdkWE5sY2lCMGNua2dkRzhnZFhObElHNTFiV0psY2lCaGNuSmhlU0JoY3lCa1lYUmhMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJsTG1jdUlHNWxkeUJVWlc1emIzSW9KMlpzYjJGME1UWW5MQ0JiTVN3Z01pd2dNeXdnTkYwc0lHUnBiWE1wS1N3Z2FYUWdkMmxzYkNCaFkzUjFZV3hzZVNCallXeHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRlZwYm5ReE5rRnljbUY1TG1aeWIyMG9ZWEpuTVNrZ2QyaHBZMmdnWjJWdVpYSmhkR1Z6SUhkeWIyNW5JR1JoZEdFdVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5RM0psWVhScGJtY2dZU0JtYkc5aGRERTJJSFJsYm5OdmNpQm1jbTl0SUc1MWJXSmxjaUJoY25KaGVTQnBjeUJ1YjNRZ2MzVndjRzl5ZEdWa0xpQlFiR1ZoYzJVZ2RYTmxJRlZwYm5ReE5rRnljbUY1SUdGeklHUmhkR0V1SnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dGeVp6QWdQVDA5SUNkMWFXNTBOalFuSUh4OElHRnlaekFnUFQwOUlDZHBiblEyTkNjcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdkWE5sSUNkaGN5QmhibmtuSUdobGNtVWdZbVZqWVhWelpUcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdNUzRnVkhsd1pWTmpjbWx3ZENkeklHTm9aV05ySUc5dUlIUjVjR1VnYjJZZ0owRnljbUY1TG1selFYSnlZWGtvS1NjZ1pHOWxjeUJ1YjNRZ2QyOXlheUIzYVhSb0lISmxZV1J2Ym14NUlHRnljbUY1Y3k1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2MyVmxJR2gwZEhCek9pOHZaMmwwYUhWaUxtTnZiUzl0YVdOeWIzTnZablF2Vkhsd1pWTmpjbWx3ZEM5cGMzTjFaWE12TVRjd01ESmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdNaTRnVkhsd1pWTmpjbWx3ZENkeklHTm9aV05ySUc5dUlIVnVhVzl1SUhSNWNHVWdiMllnSnloQ2FXZEpiblEyTkVGeWNtRjVRMjl1YzNSeWRXTjBiM0o4UW1sblZXbHVkRFkwUVhKeVlYbERiMjV6ZEhKMVkzUnZjaWt1Wm5KdmJTZ3BKMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJrYjJWeklHNXZkQ0JoWTJObGNIUWdjR0Z5WVcxbGRHVnlJRzFoY0VadUxseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QXpMaUJ3WVhKaGJXVjBaWEp6SUc5bUlDZFRkWEJ3YjNKMFpXUlVlWEJsWkVGeWNtRjVRMjl1YzNSeWRXTjBiM0p6TG1aeWIyMG9LU2NnWkc5bGN5QnViM1FnYldGMFkyZ2dkR2hsSUhKbGNYVnBjbVZ0Wlc1MElHOW1JSFJvWlNCMWJtbHZibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUIwZVhCbExseHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJR0Z6YzNWdFpTQW5ZWEpuTVNjZ2FYTWdiMllnZEhsd1pTQmNJbkpsWVdSdmJteDVJRzUxYldKbGNsdGRmSEpsWVdSdmJteDVJR0pwWjJsdWRGdGRYQ0lnYUdWeVpTNWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdRSFI1Y0dWelkzSnBjSFF0WlhOc2FXNTBMMjV2TFdWNGNHeHBZMmwwTFdGdWVWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhJRDBnS0hSNWNHVmtRWEp5WVhsRGIyNXpkSEoxWTNSdmNpQmhjeUJoYm5rcExtWnliMjBvWVhKbk1Td2dRbWxuU1c1MEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUdGemMzVnRaU0FuWVhKbk1TY2dhWE1nYjJZZ2RIbHdaU0JjSW5KbFlXUnZibXg1SUc1MWJXSmxjbHRkWENJZ2FHVnlaUzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJRUIwZVhCbGMyTnlhWEIwTFdWemJHbHVkQzl1YnkxbGVIQnNhV05wZEMxaGJubGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZU0E5SUNoMGVYQmxaRUZ5Y21GNVEyOXVjM1J5ZFdOMGIzSWdZWE1nWVc1NUtTNW1jbTl0S0dGeVp6RXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWVhKbk1TQnBibk4wWVc1alpXOW1JSFI1Y0dWa1FYSnlZWGxEYjI1emRISjFZM1J2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlTQTlJR0Z5WnpFN1hHNGdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb1lFRWdKSHQwZVhCbGZTQjBaVzV6YjNJbmN5QmtZWFJoSUcxMWMzUWdZbVVnZEhsd1pTQnZaaUFrZTNSNWNHVmtRWEp5WVhsRGIyNXpkSEoxWTNSdmNuMWdLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDOHZYRzRnSUNBZ0lDQWdJQzh2SUU5MlpYSnlhV1JsT2lCamIyNXpkSEoxWTNSdmNpaGtZWFJoTENBdUxpNHBYRzRnSUNBZ0lDQWdJQzh2WEc0Z0lDQWdJQ0FnSUcxaGVXSmxSR2x0Y3lBOUlHRnlaekU3WEc0Z0lDQWdJQ0FnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0dGeVp6QXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdiMjVzZVNCaWIyOXNaV0Z1VzEwZ1lXNWtJSE4wY21sdVoxdGRJR2x6SUhOMWNIQnZjblJsWkZ4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hoY21jd0xteGxibWQwYUNBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRlI1Y0dWRmNuSnZjaWduVkdWdWMyOXlJSFI1Y0dVZ1kyRnVibTkwSUdKbElHbHVabVZ5Y21Wa0lHWnliMjBnWVc0Z1pXMXdkSGtnWVhKeVlYa3VKeWs3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHWnBjbk4wUld4bGJXVnVkRlI1Y0dVZ1BTQjBlWEJsYjJZZ1lYSm5NRnN3WFR0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvWm1seWMzUkZiR1Z0Wlc1MFZIbHdaU0E5UFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSNWNHVWdQU0FuYzNSeWFXNW5KenRjYmlBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0VnUFNCaGNtY3dPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1ptbHljM1JGYkdWdFpXNTBWSGx3WlNBOVBUMGdKMkp2YjJ4bFlXNG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBlWEJsSUQwZ0oySnZiMnduTzF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnSjJGeVp6QW5JR2x6SUc5bUlIUjVjR1VnSjJKdmIyeGxZVzViWFNjdUlGVnBiblE0UVhKeVlYa3Vabkp2YlNoaWIyOXNaV0Z1VzEwcElHRmpkSFZoYkd4NUlIZHZjbXR6TENCaWRYUWdkSGx3WlhOamNtbHdkQ0IwYUdsdWEzTWdkR2hwY3lCcGMxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2QzSnZibWNnZEhsd1pTNGdWMlVnZFhObElDZGhjeUJoYm5rbklIUnZJRzFoYTJVZ2FYUWdhR0Z3Y0hrdVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnUUhSNWNHVnpZM0pwY0hRdFpYTnNhVzUwTDI1dkxXVjRjR3hwWTJsMExXRnVlVnh1SUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZU0E5SUZWcGJuUTRRWEp5WVhrdVpuSnZiU2hoY21jd0lHRnpJR0Z1ZVZ0ZEtUdGNiaUFnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpaGdTVzUyWVd4cFpDQmxiR1Z0Wlc1MElIUjVjR1VnYjJZZ1pHRjBZU0JoY25KaGVUb2dKSHRtYVhKemRFVnNaVzFsYm5SVWVYQmxmUzVnS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1oyVjBJSFJsYm5OdmNpQjBlWEJsSUdaeWIyMGdWSGx3WldSQmNuSmhlVnh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzFoY0hCbFpGUjVjR1VnUFZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JPVlUxRlVrbERYMVJGVGxOUFVsOVVXVkJGUkVGU1VrRlpYMVJQWDFSWlVFVmZUVUZRTG1kbGRDaGhjbWN3TG1OdmJuTjBjblZqZEc5eUlHRnpJRk4xY0hCdmNuUmxaRlI1Y0dWa1FYSnlZWGxEYjI1emRISjFZM1J2Y25NcE8xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNodFlYQndaV1JVZVhCbElEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvWUZWdWMzVndjRzl5ZEdWa0lIUjVjR1VnWm05eUlIUmxibk52Y2lCa1lYUmhPaUFrZTJGeVp6QXVZMjl1YzNSeWRXTjBiM0o5TG1BcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCMGVYQmxJRDBnYldGd2NHVmtWSGx3WlR0Y2JpQWdJQ0FnSUNBZ0lDQmtZWFJoSUQwZ1lYSm5NQ0JoY3lCVGRYQndiM0owWldSVWVYQmxaRUZ5Y21GNU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQzh2SUhSNWNHVWdZVzVrSUdSaGRHRWdhWE1nY0hKdlkyVnpjMlZrTENCdWIzY2djSEp2WTJWemMybHVaeUJrYVcxelhHNGdJQ0FnSUNCcFppQW9iV0Y1WW1WRWFXMXpJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lDQWdMeThnWVhOemRXMWxJREV0UkNCMFpXNXpiM0lnYVdZZ1pHbHRjeUJ2YldsMGRHVmtYRzRnSUNBZ0lDQWdJRzFoZVdKbFJHbHRjeUE5SUZ0a1lYUmhMbXhsYm1kMGFGMDdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLQ0ZCY25KaGVTNXBjMEZ5Y21GNUtHMWhlV0psUkdsdGN5a3BJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUZSNWNHVkZjbkp2Y2lnblFTQjBaVzV6YjNKY1hDZHpJR1JwYlhNZ2JYVnpkQ0JpWlNCaElHNTFiV0psY2lCaGNuSmhlU2NwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWkdsdGN5QTlJRzFoZVdKbFJHbHRjeUJoY3lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFR0Y2JseHVJQ0FnSUNBZ2RHaHBjeTVqY0hWRVlYUmhJRDBnWkdGMFlUdGNiaUFnSUNBZ0lIUm9hWE11WkdGMFlVeHZZMkYwYVc5dUlEMGdKMk53ZFNjN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z2NHVnlabTl5YlNCamFHVmpheUJ2YmlCa2FXMXpYRzRnSUNBZ1kyOXVjM1FnYzJsNlpTQTlJR05oYkdOMWJHRjBaVk5wZW1Vb1pHbHRjeWs3WEc0Z0lDQWdMeThnYVdZZ1pHRjBZU0JwY3lCdmJpQkRVRlVzSUdOb1pXTnJJSGRvWlhSb1pYSWdaR0YwWVNCc1pXNW5kR2dnYldGMFkyaGxjeUIwWlc1emIzSWdjMmw2WlZ4dUlDQWdJR2xtSUNoMGFHbHpMbU53ZFVSaGRHRWdKaVlnYzJsNlpTQWhQVDBnZEdocGN5NWpjSFZFWVhSaExteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCVVpXNXpiM0luY3lCemFYcGxLQ1I3YzJsNlpYMHBJR1J2WlhNZ2JtOTBJRzFoZEdOb0lHUmhkR0VnYkdWdVozUm9LQ1I3ZEdocGN5NWpjSFZFWVhSaExteGxibWQwYUgwcExtQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11ZEhsd1pTQTlJSFI1Y0dVN1hHNGdJQ0FnZEdocGN5NWthVzF6SUQwZ1pHbHRjenRjYmlBZ0lDQjBhR2x6TG5OcGVtVWdQU0J6YVhwbE8xeHVJQ0I5WEc0Z0lDOHZJQ05sYm1SeVpXZHBiMjVjYmx4dUlDQXZMeUFqY21WbmFXOXVJR1poWTNSdmNubGNiaUFnYzNSaGRHbGpJR0Z6ZVc1aklHWnliMjFKYldGblpTaGNiaUFnSUNBZ0lHbHRZV2RsT2lCSmJXRm5aVVJoZEdGOFNGUk5URWx0WVdkbFJXeGxiV1Z1ZEh4SmJXRm5aVUpwZEcxaGNIeHpkSEpwYm1jc1hHNGdJQ0FnSUNCdmNIUnBiMjV6UHpvZ1ZHVnVjMjl5Um5KdmJVbHRZV2RsUkdGMFlVOXdkR2x2Ym5OOFZHVnVjMjl5Um5KdmJVbHRZV2RsUld4bGJXVnVkRTl3ZEdsdmJuTjhWR1Z1YzI5eVJuSnZiVWx0WVdkbFFtbDBiV0Z3VDNCMGFXOXVjM3hjYmlBZ0lDQWdJRlJsYm5OdmNrWnliMjFWY214UGNIUnBiMjV6S1RvZ1VISnZiV2x6WlR4VVpXNXpiM0pKYm5SbGNtWmhZMlUrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR1Z1YzI5eVJuSnZiVWx0WVdkbEtHbHRZV2RsTENCdmNIUnBiMjV6S1R0Y2JpQWdmVnh1WEc0Z0lITjBZWFJwWXlCbWNtOXRWR1Y0ZEhWeVpUeFVJR1Y0ZEdWdVpITWdWR1Z1YzI5eVNXNTBaWEptWVdObExsUmxlSFIxY21WRVlYUmhWSGx3WlhNK0tGeHVJQ0FnSUNBZ2RHVjRkSFZ5WlRvZ1ZHVnVjMjl5VkdWNGRIVnlaVlI1Y0dVc0lHOXdkR2x2Ym5NNklGUmxibk52Y2taeWIyMVVaWGgwZFhKbFQzQjBhVzl1Y3p4VVBpazZJRlJsYm5OdmNrbHVkR1Z5Wm1GalpTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSbGJuTnZja1p5YjIxVVpYaDBkWEpsS0hSbGVIUjFjbVVzSUc5d2RHbHZibk1wTzF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMUhjSFZDZFdabVpYSThWQ0JsZUhSbGJtUnpJRlJsYm5OdmNrbHVkR1Z5Wm1GalpTNUhjSFZDZFdabVpYSkVZWFJoVkhsd1pYTStLRnh1SUNBZ0lDQWdaM0IxUW5WbVptVnlPaUJVWlc1emIzSkhjSFZDZFdabVpYSlVlWEJsTENCdmNIUnBiMjV6T2lCVVpXNXpiM0pHY205dFIzQjFRblZtWm1WeVQzQjBhVzl1Y3p4VVBpazZJRlJsYm5OdmNrbHVkR1Z5Wm1GalpTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSbGJuTnZja1p5YjIxSGNIVkNkV1ptWlhJb1ozQjFRblZtWm1WeUxDQnZjSFJwYjI1ektUdGNiaUFnZlZ4dVhHNGdJSE4wWVhScFl5Qm1jbTl0VUdsdWJtVmtRblZtWm1WeVBGUWdaWGgwWlc1a2N5QlVaVzV6YjNKSmJuUmxjbVpoWTJVdVEzQjFVR2x1Ym1Wa1JHRjBZVlI1Y0dWelBpaGNiaUFnSUNBZ0lIUjVjR1U2SUZRc0lHSjFabVpsY2pvZ1ZHVnVjMjl5U1c1MFpYSm1ZV05sTGtSaGRHRlVlWEJsVFdGd1cxUmRMQ0JrYVcxelB6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJVWlc1emIzSWdlMXh1SUNBZ0lISmxkSFZ5YmlCMFpXNXpiM0pHY205dFVHbHVibVZrUW5WbVptVnlLSFI1Y0dVc0lHSjFabVpsY2l3Z1pHbHRjeWs3WEc0Z0lIMWNibHh1SUNBdkx5QWpaVzVrY21WbmFXOXVYRzVjYmlBZ0x5OGdJM0psWjJsdmJpQmpiMjUyWlhKemFXOXVjMXh1SUNCMGIwUmhkR0ZWVWt3b2IzQjBhVzl1Y3o4NklGUmxibk52Y2xSdlJHRjBZVlZ5YkU5d2RHbHZibk1wT2lCemRISnBibWNnZTF4dUlDQWdJSEpsZEhWeWJpQjBaVzV6YjNKVWIwUmhkR0ZWVWt3b2RHaHBjeXdnYjNCMGFXOXVjeWs3WEc0Z0lIMWNibHh1SUNCMGIwbHRZV2RsUkdGMFlTaHZjSFJwYjI1elB6b2dWR1Z1YzI5eVZHOUpiV0ZuWlVSaGRHRlBjSFJwYjI1ektUb2dTVzFoWjJWRVlYUmhJSHRjYmlBZ0lDQnlaWFIxY200Z2RHVnVjMjl5Vkc5SmJXRm5aVVJoZEdFb2RHaHBjeXdnYjNCMGFXOXVjeWs3WEc0Z0lIMWNiaUFnTHk4Z0kyVnVaSEpsWjJsdmJseHVYRzRnSUM4dklDTnlaV2RwYjI0Z2NIVmliR2xqSUdacFpXeGtjMXh1SUNCeVpXRmtiMjVzZVNCa2FXMXpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYVHRjYmlBZ2NtVmhaRzl1YkhrZ2RIbHdaVG9nVkdWdWMyOXlWSGx3WlR0Y2JpQWdjbVZoWkc5dWJIa2djMmw2WlRvZ2JuVnRZbVZ5TzF4dUlDQXZMeUFqWlc1a2NtVm5hVzl1WEc1Y2JpQWdMeThnSTNKbFoybHZiaUJ3Y21sMllYUmxJR1pwWld4a2MxeHVYRzRnSUM4cUtseHVJQ0FnS2lCemRHOXlaWE1nZEdobElHeHZZMkYwYVc5dUlHOW1JSFJvWlNCa1lYUmhMbHh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0JrWVhSaFRHOWpZWFJwYjI0NklGUmxibk52Y2tSaGRHRk1iMk5oZEdsdmJqdGNibHh1SUNBdktpcGNiaUFnSUNvZ2MzUnZjbVZ6SUhSb1pTQmtZWFJoSUc5dUlFTlFWU3dnYVdZZ2JHOWpZWFJwYjI0Z2FYTWdKMk53ZFNjZ2IzSWdKMk53ZFMxd2FXNXVaV1FuTGlCdmRHaGxjbmRwYzJVZ1pXMXdkSGt1WEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUdOd2RVUmhkR0UvT2lCVVpXNXpiM0pFWVhSaFZIbHdaVHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2djM1J2Y21WeklIUm9aU0IxYm1SbGNteDVhVzVuSUhSbGVIUjFjbVVnZDJobGJpQnNiMk5oZEdsdmJpQnBjeUFuZEdWNGRIVnlaU2N1SUc5MGFHVnlkMmx6WlNCbGJYQjBlUzVjYmlBZ0lDb3ZYRzRnSUhCeWFYWmhkR1VnWjNCMVZHVjRkSFZ5WlVSaGRHRS9PaUJVWlc1emIzSlVaWGgwZFhKbFZIbHdaVHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2djM1J2Y21WeklIUm9aU0IxYm1SbGNteDVhVzVuSUVkUVZTQmlkV1ptWlhJZ2QyaGxiaUJzYjJOaGRHbHZiaUJwY3lBblozQjFMV0oxWm1abGNpY3VJRzkwYUdWeWQybHpaU0JsYlhCMGVTNWNiaUFnSUNvdlhHNGdJSEJ5YVhaaGRHVWdaM0IxUW5WbVptVnlSR0YwWVQ4NklGUmxibk52Y2tkd2RVSjFabVpsY2xSNWNHVTdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlITjBiM0psY3lCaGJpQnZjSFJwYjI1aGJDQmtiM2R1Ykc5aFpHVnlJR1oxYm1OMGFXOXVJSFJ2SUdSdmQyNXNiMkZrSUdSaGRHRWdabkp2YlNCSFVGVWdkRzhnUTFCVkxseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQmtiM2R1Ykc5aFpHVnlQeWdwT2lCUWNtOXRhWE5sUEZSbGJuTnZja1JoZEdGVWVYQmxQanRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dZU0JtYkdGbklHbHVaR2xqWVhScGJtY2dkMmhsZEdobGNpQjBhR1VnWkdGMFlTQnBjeUJpWldsdVp5QmtiM2R1Ykc5aFpHVmtJR1p5YjIwZ1IxQlZJSFJ2SUVOUVZTNWNiaUFnSUNvdlhHNGdJSEJ5YVhaaGRHVWdhWE5FYjNkdWJHOWhaR2x1Wno4NklHSnZiMnhsWVc0N1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUhOMGIzSmxjeUJoYmlCdmNIUnBiMjVoYkNCa2FYTndiM05sY2lCbWRXNWpkR2x2YmlCMGJ5QmthWE53YjNObElIUm9aU0IxYm1SbGNteDVhVzVuSUdSaGRHRXVYRzRnSUNBcUwxeHVJQ0J3Y21sMllYUmxJR1JwYzNCdmMyVnlQeWdwT2lCMmIybGtPMXh1SUNBdkx5QWpaVzVrY21WbmFXOXVYRzVjYmlBZ0x5OGdJM0psWjJsdmJpQndjbTl3WlhKMGFXVnpYRzRnSUdkbGRDQmtZWFJoS0NrNklGUmxibk52Y2tSaGRHRlVlWEJsSUh0Y2JpQWdJQ0IwYUdsekxtVnVjM1Z5WlZaaGJHbGtLQ2s3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbU53ZFVSaGRHRXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGNiaUFnSUNBZ0lDQWdJQ0FuVkdobElHUmhkR0VnYVhNZ2JtOTBJRzl1SUVOUVZTNGdWWE5sSUdCblpYUkVZWFJoS0NsZ0lIUnZJR1J2ZDI1c2IyRmtJRWRRVlNCa1lYUmhJSFJ2SUVOUVZTd2dKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oyOXlJSFZ6WlNCZ2RHVjRkSFZ5WldBZ2IzSWdZR2R3ZFVKMVptWmxjbUFnY0hKdmNHVnlkSGtnZEc4Z1lXTmpaWE56SUhSb1pTQkhVRlVnWkdGMFlTQmthWEpsWTNSc2VTNG5LVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZM0IxUkdGMFlUdGNiaUFnZlZ4dVhHNGdJR2RsZENCc2IyTmhkR2x2YmlncE9pQlVaVzV6YjNKRVlYUmhURzlqWVhScGIyNGdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbVJoZEdGTWIyTmhkR2x2Ymp0Y2JpQWdmVnh1WEc0Z0lHZGxkQ0IwWlhoMGRYSmxLQ2s2SUZSbGJuTnZjbFJsZUhSMWNtVlVlWEJsSUh0Y2JpQWdJQ0IwYUdsekxtVnVjM1Z5WlZaaGJHbGtLQ2s3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbWR3ZFZSbGVIUjFjbVZFWVhSaEtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxUm9aU0JrWVhSaElHbHpJRzV2ZENCemRHOXlaV1FnWVhNZ1lTQlhaV0pIVENCMFpYaDBkWEpsTGljcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1bmNIVlVaWGgwZFhKbFJHRjBZVHRjYmlBZ2ZWeHVYRzRnSUdkbGRDQm5jSFZDZFdabVpYSW9LVG9nVkdWdWMyOXlSM0IxUW5WbVptVnlWSGx3WlNCN1hHNGdJQ0FnZEdocGN5NWxibk4xY21WV1lXeHBaQ2dwTzF4dUlDQWdJR2xtSUNnaGRHaHBjeTVuY0hWQ2RXWm1aWEpFWVhSaEtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxUm9aU0JrWVhSaElHbHpJRzV2ZENCemRHOXlaV1FnWVhNZ1lTQlhaV0pIVUZVZ1luVm1abVZ5TGljcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1bmNIVkNkV1ptWlhKRVlYUmhPMXh1SUNCOVhHNGdJQzh2SUNObGJtUnlaV2RwYjI1Y2JseHVJQ0F2THlBamNtVm5hVzl1SUcxbGRHaHZaSE5jYmx4dUlDQmhjM2x1WXlCblpYUkVZWFJoS0hKbGJHVmhjMlZFWVhSaFB6b2dZbTl2YkdWaGJpazZJRkJ5YjIxcGMyVThWR1Z1YzI5eVJHRjBZVlI1Y0dVK0lIdGNiaUFnSUNCMGFHbHpMbVZ1YzNWeVpWWmhiR2xrS0NrN1hHNGdJQ0FnYzNkcGRHTm9JQ2gwYUdsekxtUmhkR0ZNYjJOaGRHbHZiaWtnZTF4dUlDQWdJQ0FnWTJGelpTQW5ZM0IxSnpwY2JpQWdJQ0FnSUdOaGMyVWdKMk53ZFMxd2FXNXVaV1FuT2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NWtZWFJoTzF4dUlDQWdJQ0FnWTJGelpTQW5kR1Y0ZEhWeVpTYzZYRzRnSUNBZ0lDQmpZWE5sSUNkbmNIVXRZblZtWm1WeUp6b2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lYUm9hWE11Wkc5M2JteHZZV1JsY2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25WR2hsSUdOMWNuSmxiblFnZEdWdWMyOXlJR2x6SUc1dmRDQmpjbVZoZEdWa0lIZHBkR2dnWVNCemNHVmphV1pwWldRZ1pHRjBZU0JrYjNkdWJHOWhaR1Z5TGljcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbWx6Ukc5M2JteHZZV1JwYm1jcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMVJvWlNCamRYSnlaVzUwSUhSbGJuTnZjaUJwY3lCaVpXbHVaeUJrYjNkdWJHOWhaR1ZrTGljcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1cGMwUnZkMjVzYjJGa2FXNW5JRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmtZWFJoSUQwZ1lYZGhhWFFnZEdocGN5NWtiM2R1Ykc5aFpHVnlLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVrYjNkdWJHOWhaR1Z5SUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVpHRjBZVXh2WTJGMGFXOXVJRDBnSjJOd2RTYzdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NWpjSFZFWVhSaElEMGdaR0YwWVR0Y2JseHVJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpXeGxZWE5sUkdGMFlTQW1KaUIwYUdsekxtUnBjM0J2YzJWeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbVJwYzNCdmMyVnlLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1ScGMzQnZjMlZ5SUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCa1lYUmhPMXh1WEc0Z0lDQWdJQ0FnSUgwZ1ptbHVZV3hzZVNCN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1cGMwUnZkMjVzYjJGa2FXNW5JRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdZMkZ1Ym05MElHZGxkQ0JrWVhSaElHWnliMjBnYkc5allYUnBiMjQ2SUNSN2RHaHBjeTVrWVhSaFRHOWpZWFJwYjI1OVlDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdaR2x6Y0c5elpTZ3BPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9kR2hwY3k1cGMwUnZkMjVzYjJGa2FXNW5LU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMVJvWlNCamRYSnlaVzUwSUhSbGJuTnZjaUJwY3lCaVpXbHVaeUJrYjNkdWJHOWhaR1ZrTGljcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1ScGMzQnZjMlZ5S1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVJwYzNCdmMyVnlLQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtUnBjM0J2YzJWeUlEMGdkVzVrWldacGJtVmtPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbU53ZFVSaGRHRWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdkR2hwY3k1bmNIVlVaWGgwZFhKbFJHRjBZU0E5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0IwYUdsekxtZHdkVUoxWm1abGNrUmhkR0VnUFNCMWJtUmxabWx1WldRN1hHNGdJQ0FnZEdocGN5NWtiM2R1Ykc5aFpHVnlJRDBnZFc1a1pXWnBibVZrTzF4dUlDQWdJSFJvYVhNdWFYTkViM2R1Ykc5aFpHbHVaeUE5SUhWdVpHVm1hVzVsWkR0Y2JseHVJQ0FnSUhSb2FYTXVaR0YwWVV4dlkyRjBhVzl1SUQwZ0oyNXZibVVuTzF4dUlDQjlYRzVjYmlBZ0x5OGdJMlZ1WkhKbFoybHZibHh1WEc0Z0lDOHZJQ055WldkcGIyNGdkR1Z1YzI5eUlIVjBhV3hwZEdsbGMxeHVJQ0J3Y21sMllYUmxJR1Z1YzNWeVpWWmhiR2xrS0NrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbVJoZEdGTWIyTmhkR2x2YmlBOVBUMGdKMjV2Ym1VbktTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxUm9aU0IwWlc1emIzSWdhWE1nWkdsemNHOXpaV1F1SnlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVnphR0Z3WlNoa2FXMXpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU2s2SUZSbGJuTnZja2x1ZEdWeVptRmpaU0I3WEc0Z0lDQWdkR2hwY3k1bGJuTjFjbVZXWVd4cFpDZ3BPMXh1SUNBZ0lHbG1JQ2gwYUdsekxtUnZkMjVzYjJGa1pYSWdmSHdnZEdocGN5NWthWE53YjNObGNpa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZERZVzV1YjNRZ2NtVnphR0Z3WlNCaElIUmxibk52Y2lCMGFHRjBJRzkzYm5NZ1IxQlZJSEpsYzI5MWNtTmxMaWNwTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2RHVnVjMjl5VW1WemFHRndaU2gwYUdsekxDQmthVzF6S1R0Y2JpQWdmVnh1SUNBdkx5QWpaVzVrY21WbmFXOXVYRzU5WEc0aUxDQWlMeThnUTI5d2VYSnBaMmgwSUNoaktTQk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNHZMeUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnVFVsVUlFeHBZMlZ1YzJVdVhHNWNibWx0Y0c5eWRDQjdWR1Z1YzI5eVJtRmpkRzl5ZVgwZ1puSnZiU0FuTGk5MFpXNXpiM0l0Wm1GamRHOXllUzVxY3ljN1hHNXBiWEJ2Y25RZ2UxUmxibk52Y2lCaGN5QlVaVzV6YjNKSmJYQnNmU0JtY205dElDY3VMM1JsYm5OdmNpMXBiWEJzTG1wekp6dGNibWx0Y0c5eWRDQjdWSGx3WldSVVpXNXpiM0pWZEdsc2MzMGdabkp2YlNBbkxpOTBaVzV6YjNJdGRYUnBiSE11YW5Nbk8xeHVYRzR2S2lCbGMyeHBiblF0WkdsellXSnNaU0JBZEhsd1pYTmpjbWx3ZEMxbGMyeHBiblF2Ym04dGNtVmtaV05zWVhKbElDb3ZYRzVjYmk4cUtseHVJQ29nY21Wd2NtVnpaVzUwSUdFZ1ltRnphV01nZEdWdWMyOXlJSGRwZEdnZ2MzQmxZMmxtYVdWa0lHUnBiV1Z1YzJsdmJuTWdZVzVrSUdSaGRHRWdkSGx3WlM1Y2JpQXFMMXh1YVc1MFpYSm1ZV05sSUZSNWNHVmtWR1Z1YzI5eVFtRnpaVHhVSUdWNGRHVnVaSE1nVkdWdWMyOXlMbFI1Y0dVK0lIdGNiaUFnTHlvcVhHNGdJQ0FxSUVkbGRDQjBhR1VnWkdsdFpXNXphVzl1Y3lCdlppQjBhR1VnZEdWdWMyOXlMbHh1SUNBZ0tpOWNiaUFnY21WaFpHOXViSGtnWkdsdGN6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMDdYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUWdkR2hsSUdSaGRHRWdkSGx3WlNCdlppQjBhR1VnZEdWdWMyOXlMbHh1SUNBZ0tpOWNiaUFnY21WaFpHOXViSGtnZEhsd1pUb2dWRHRjYmlBZ0x5b3FYRzRnSUNBcUlFZGxkQ0IwYUdVZ1luVm1abVZ5SUdSaGRHRWdiMllnZEdobElIUmxibk52Y2k1Y2JpQWdJQ3BjYmlBZ0lDb2dTV1lnZEdobElHUmhkR0VnYVhNZ2JtOTBJRzl1SUVOUVZTQW9aV2N1SUdsMEozTWdhVzRnZEdobElHWnZjbTBnYjJZZ1YyVmlSMHdnZEdWNGRIVnlaU0J2Y2lCWFpXSkhVRlVnWW5WbVptVnlLU3dnZEdoeWIzY2daWEp5YjNJdVhHNGdJQ0FxTDF4dUlDQnlaV0ZrYjI1c2VTQmtZWFJoT2lCVVpXNXpiM0l1UkdGMFlWUjVjR1ZOWVhCYlZGMDdYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUWdkR2hsSUd4dlkyRjBhVzl1SUc5bUlIUm9aU0JrWVhSaExseHVJQ0FnS2k5Y2JpQWdjbVZoWkc5dWJIa2diRzlqWVhScGIyNDZJRlJsYm5OdmNpNUVZWFJoVEc5allYUnBiMjQ3WEc0Z0lDOHFLbHh1SUNBZ0tpQkhaWFFnZEdobElGZGxZa2RNSUhSbGVIUjFjbVVnZEdoaGRDQm9iMnhrY3lCMGFHVWdkR1Z1YzI5eUlHUmhkR0V1WEc0Z0lDQXFYRzRnSUNBcUlFbG1JSFJvWlNCa1lYUmhJR2x6SUc1dmRDQnZiaUJIVUZVZ1lYTWdWMlZpUjB3Z2RHVjRkSFZ5WlN3Z2RHaHliM2NnWlhKeWIzSXVYRzRnSUNBcUwxeHVJQ0J5WldGa2IyNXNlU0IwWlhoMGRYSmxPaUJVWlc1emIzSXVWR1Y0ZEhWeVpWUjVjR1U3WEc0Z0lDOHFLbHh1SUNBZ0tpQkhaWFFnZEdobElGZGxZa2RRVlNCaWRXWm1aWElnZEdoaGRDQm9iMnhrY3lCMGFHVWdkR1Z1YzI5eUlHUmhkR0V1WEc0Z0lDQXFYRzRnSUNBcUlFbG1JSFJvWlNCa1lYUmhJR2x6SUc1dmRDQnZiaUJIVUZVZ1lYTWdWMlZpUjFCVklHSjFabVpsY2l3Z2RHaHliM2NnWlhKeWIzSXVYRzRnSUNBcUwxeHVJQ0J5WldGa2IyNXNlU0JuY0hWQ2RXWm1aWEk2SUZSbGJuTnZjaTVIY0hWQ2RXWm1aWEpVZVhCbE8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUWdkR2hsSUdKMVptWmxjaUJrWVhSaElHOW1JSFJvWlNCMFpXNXpiM0l1WEc0Z0lDQXFYRzRnSUNBcUlFbG1JSFJvWlNCa1lYUmhJR2x6SUc5dUlFTlFWU3dnY21WMGRYSnVjeUIwYUdVZ1pHRjBZU0JwYlcxbFpHbGhkR1ZzZVM1Y2JpQWdJQ29nU1dZZ2RHaGxJR1JoZEdFZ2FYTWdiMjRnUjFCVkxDQmtiM2R1Ykc5aFpITWdkR2hsSUdSaGRHRWdZVzVrSUhKbGRIVnlibk1nZEdobElIQnliMjFwYzJVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQnlaV3hsWVhObFJHRjBZU0F0SUhkb1pYUm9aWElnY21Wc1pXRnpaU0IwYUdVZ1pHRjBZU0J2YmlCSFVGVXVJRWxuYm05eVpTQnBaaUJrWVhSaElHbHpJR0ZzY21WaFpIa2diMjRnUTFCVkxseHVJQ0FnS2k5Y2JpQWdaMlYwUkdGMFlTaHlaV3hsWVhObFJHRjBZVDg2SUdKdmIyeGxZVzRwT2lCUWNtOXRhWE5sUEZSbGJuTnZjaTVFWVhSaFZIbHdaVTFoY0Z0VVhUNDdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFUnBjM0J2YzJVZ2RHaGxJSFJsYm5OdmNpQmtZWFJoTGx4dUlDQWdLbHh1SUNBZ0tpQkpaaUIwYUdVZ1pHRjBZU0JwY3lCdmJpQkRVRlVzSUhKbGJXOTJaU0JwZEhNZ2FXNTBaWEp1WVd3Z2NtVm1aWEpsYm1ObElIUnZJSFJvWlNCMWJtUmxjbXg1YVc1bklHUmhkR0V1WEc0Z0lDQXFJRWxtSUhSb1pTQmtZWFJoSUdseklHOXVJRWRRVlN3Z2NtVnNaV0Z6WlNCMGFHVWdaR0YwWVNCdmJpQkhVRlV1WEc0Z0lDQXFYRzRnSUNBcUlFRm1kR1Z5SUdOaGJHeHBibWNnZEdocGN5Qm1kVzVqZEdsdmJpd2dkR2hsSUhSbGJuTnZjaUJwY3lCamIyNXphV1JsY21Wa0lHNXZJR3h2Ym1kbGNpQjJZV3hwWkM0Z1NYUnpJR3h2WTJGMGFXOXVJSGRwYkd3Z1ltVWdjMlYwSUhSdklDZHViMjVsSnk1Y2JpQWdJQ292WEc0Z0lHUnBjM0J2YzJVb0tUb2dkbTlwWkR0Y2JuMWNibHh1Wlhod2IzSjBJR1JsWTJ4aGNtVWdibUZ0WlhOd1lXTmxJRlJsYm5OdmNpQjdYRzRnSUdsdWRHVnlabUZqWlNCRVlYUmhWSGx3WlUxaGNDQjdYRzRnSUNBZ1pteHZZWFF6TWpvZ1JteHZZWFF6TWtGeWNtRjVPMXh1SUNBZ0lIVnBiblE0T2lCVmFXNTBPRUZ5Y21GNU8xeHVJQ0FnSUdsdWREZzZJRWx1ZERoQmNuSmhlVHRjYmlBZ0lDQjFhVzUwTVRZNklGVnBiblF4TmtGeWNtRjVPMXh1SUNBZ0lHbHVkREUyT2lCSmJuUXhOa0Z5Y21GNU8xeHVJQ0FnSUdsdWRETXlPaUJKYm5Rek1rRnljbUY1TzF4dUlDQWdJR2x1ZERZME9pQkNhV2RKYm5RMk5FRnljbUY1TzF4dUlDQWdJSE4wY21sdVp6b2djM1J5YVc1blcxMDdYRzRnSUNBZ1ltOXZiRG9nVldsdWREaEJjbkpoZVR0Y2JpQWdJQ0JtYkc5aGRERTJPaUJWYVc1ME1UWkJjbkpoZVRzZ0lDOHZJRXRsWlhBZ2RYTnBibWNnVldsdWRERTJRWEp5WVhrZ2RXNTBhV3dnZDJVZ2FHRjJaU0JoSUdOdmJtTnlaWFJsSUhOdmJIVjBhVzl1SUdadmNpQm1iRzloZENBeE5pNWNiaUFnSUNCbWJHOWhkRFkwT2lCR2JHOWhkRFkwUVhKeVlYazdYRzRnSUNBZ2RXbHVkRE15T2lCVmFXNTBNekpCY25KaGVUdGNiaUFnSUNCMWFXNTBOalE2SUVKcFoxVnBiblEyTkVGeWNtRjVPMXh1SUNBZ0lDOHZJR052YlhCc1pYZzJORG9nYm1WMlpYSTdYRzRnSUNBZ0x5OGdZMjl0Y0d4bGVERXlPRG9nYm1WMlpYSTdYRzRnSUNBZ0x5OGdZbVpzYjJGME1UWTZJRzVsZG1WeU8xeHVJQ0I5WEc1Y2JpQWdhVzUwWlhKbVlXTmxJRVZzWlcxbGJuUlVlWEJsVFdGd0lIdGNiaUFnSUNCbWJHOWhkRE15T2lCdWRXMWlaWEk3WEc0Z0lDQWdkV2x1ZERnNklHNTFiV0psY2p0Y2JpQWdJQ0JwYm5RNE9pQnVkVzFpWlhJN1hHNGdJQ0FnZFdsdWRERTJPaUJ1ZFcxaVpYSTdYRzRnSUNBZ2FXNTBNVFk2SUc1MWJXSmxjanRjYmlBZ0lDQnBiblF6TWpvZ2JuVnRZbVZ5TzF4dUlDQWdJR2x1ZERZME9pQmlhV2RwYm5RN1hHNGdJQ0FnYzNSeWFXNW5PaUJ6ZEhKcGJtYzdYRzRnSUNBZ1ltOXZiRG9nWW05dmJHVmhianRjYmlBZ0lDQm1iRzloZERFMk9pQnVkVzFpWlhJN0lDQXZMeUJMWldWd0lIVnphVzVuSUZWcGJuUXhOa0Z5Y21GNUlIVnVkR2xzSUhkbElHaGhkbVVnWVNCamIyNWpjbVYwWlNCemIyeDFkR2x2YmlCbWIzSWdabXh2WVhRZ01UWXVYRzRnSUNBZ1pteHZZWFEyTkRvZ2JuVnRZbVZ5TzF4dUlDQWdJSFZwYm5Rek1qb2diblZ0WW1WeU8xeHVJQ0FnSUhWcGJuUTJORG9nWW1sbmFXNTBPMXh1SUNBZ0lDOHZJR052YlhCc1pYZzJORG9nYm1WMlpYSTdYRzRnSUNBZ0x5OGdZMjl0Y0d4bGVERXlPRG9nYm1WMlpYSTdYRzRnSUNBZ0x5OGdZbVpzYjJGME1UWTZJRzVsZG1WeU8xeHVJQ0I5WEc1Y2JpQWdkSGx3WlNCRVlYUmhWSGx3WlNBOUlFUmhkR0ZVZVhCbFRXRndXMVI1Y0dWZE8xeHVJQ0IwZVhCbElFVnNaVzFsYm5SVWVYQmxJRDBnUld4bGJXVnVkRlI1Y0dWTllYQmJWSGx3WlYwN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUhOMWNIQnZjblJsWkNCa1lYUmhJSFI1Y0dWeklHWnZjaUJqYjI1emRISjFZM1JwYm1jZ1lTQjBaVzV6YjNJZ1puSnZiU0JoSUhCcGJtNWxaQ0JEVUZVZ1luVm1abVZ5WEc0Z0lDQXFMMXh1SUNCbGVIQnZjblFnZEhsd1pTQkRjSFZRYVc1dVpXUkVZWFJoVkhsd1pYTWdQU0JGZUdOc2RXUmxQRlJsYm5OdmNpNVVlWEJsTENBbmMzUnlhVzVuSno0N1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUhSNWNHVWdZV3hwWVhNZ1ptOXlJRmRsWWtkTUlIUmxlSFIxY21WY2JpQWdJQ292WEc0Z0lHVjRjRzl5ZENCMGVYQmxJRlJsZUhSMWNtVlVlWEJsSUQwZ1YyVmlSMHhVWlhoMGRYSmxPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQnpkWEJ3YjNKMFpXUWdaR0YwWVNCMGVYQmxjeUJtYjNJZ1kyOXVjM1J5ZFdOMGFXNW5JR0VnZEdWdWMyOXlJR1p5YjIwZ1lTQlhaV0pIVENCMFpYaDBkWEpsWEc0Z0lDQXFMMXh1SUNCbGVIQnZjblFnZEhsd1pTQlVaWGgwZFhKbFJHRjBZVlI1Y0dWeklEMGdKMlpzYjJGME16SW5PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQjBlWEJsSUdGc2FXRnpJR1p2Y2lCWFpXSkhVRlVnWW5WbVptVnlYRzRnSUNBcVhHNGdJQ0FxSUZSb1pTQnlaV0Z6YjI0Z2QyaDVJSGRsSUdSdmJpZDBJSFZ6WlNCMGVYQmxJRndpUjFCVlFuVm1abVZ5WENJZ1pHVm1hVzVsWkNCcGJpQjNaV0puY0hVdVpDNTBjeUJtY205dElFQjNaV0puY0hVdmRIbHdaWE1nYVhNZ1ltVmpZWFZ6WlNCY0lrQjNaV0puY0hVdmRIbHdaWE5jSWx4dUlDQWdLaUJ5WlhGMWFYSmxjeUJjSWtCMGVYQmxjeTlrYjIwdGQyVmlZMjlrWldOelhDSWdZWE1nY0dWbGNpQmtaWEJsYm1SbGJtTjVJSGRvWlc0Z2RYTnBibWNnVkhsd1pWTmpjbWx3ZENBOElIWTFMakVnWVc1a0lHbDBjeUIyWlhKemFXOXVJRzVsWldRZ2RHOGdZbVVnWTJodmMyVnVYRzRnSUNBcUlHTmhjbVZtZFd4c2VTQmhZMk52Y21ScGJtY2dkRzhnZEdobElGUjVjR1ZUWTNKcGNIUWdkbVZ5YzJsdmJpQmlaV2x1WnlCMWMyVmtMaUJVYUdseklHMWxZVzV6SUhOdklHWmhjaUIwYUdWeVpTQnBjeUJ1YjNRZ1lTQjNZWGtnZEc4Z2EyVmxjQ0JsZG1WeWVWeHVJQ0FnS2lCVWVYQmxVMk55YVhCMElIWmxjbk5wYjI0Z2FHRndjSGt1SUVsMElIUjFjbTV6SUc5MWRDQjBhR0YwSUhkbElIZHBiR3dnWldGemFXeDVJR0p5YjJ0bElIVnpaWEp6SUc5dUlITnZiV1VnVkhsd1pWTmpjbWx3ZENCMlpYSnphVzl1TGx4dUlDQWdLbHh1SUNBZ0tpQm1iM0lnYlc5eVpTQnBibVp2SUhObFpTQm9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZaM0IxZDJWaUwzUjVjR1Z6TDJsemMzVmxjeTh4TWpkY2JpQWdJQ292WEc0Z0lHVjRjRzl5ZENCMGVYQmxJRWR3ZFVKMVptWmxjbFI1Y0dVZ1BTQjdjMmw2WlRvZ2JuVnRZbVZ5T3lCdFlYQlRkR0YwWlRvZ0ozVnViV0Z3Y0dWa0p5QjhJQ2R3Wlc1a2FXNW5KeUI4SUNkdFlYQndaV1FuZlR0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nYzNWd2NHOXlkR1ZrSUdSaGRHRWdkSGx3WlhNZ1ptOXlJR052Ym5OMGNuVmpkR2x1WnlCaElIUmxibk52Y2lCbWNtOXRJR0VnVjJWaVIxQlZJR0oxWm1abGNseHVJQ0FnS2k5Y2JpQWdaWGh3YjNKMElIUjVjR1VnUjNCMVFuVm1abVZ5UkdGMFlWUjVjR1Z6SUQwZ0oyWnNiMkYwTXpJbmZDZG1iRzloZERFMkozd25hVzUwTXpJbmZDZHBiblEyTkNkOEozVnBiblF6TWlkOEozVnBiblE0SjN3blltOXZiQ2M3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJSEpsY0hKbGMyVnVkQ0IzYUdWeVpTQjBhR1VnZEdWdWMyOXlJR1JoZEdFZ2FYTWdjM1J2Y21Wa1hHNGdJQ0FxTDF4dUlDQmxlSEJ2Y25RZ2RIbHdaU0JFWVhSaFRHOWpZWFJwYjI0Z1BTQW5ibTl1WlNkOEoyTndkU2Q4SjJOd2RTMXdhVzV1WldRbmZDZDBaWGgwZFhKbEozd25aM0IxTFdKMVptWmxjaWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJSEpsY0hKbGMyVnVkQ0IwYUdVZ1pHRjBZU0IwZVhCbElHOW1JR0VnZEdWdWMyOXlYRzRnSUNBcUwxeHVJQ0JsZUhCdmNuUWdkSGx3WlNCVWVYQmxJRDBnYTJWNWIyWWdSR0YwWVZSNWNHVk5ZWEE3WEc1OVhHNWNiaThxS2x4dUlDb2dVbVZ3Y21WelpXNTBJRzExYkhScExXUnBiV1Z1YzJsdmJtRnNJR0Z5Y21GNWN5QjBieUJtWldWa0lIUnZJRzl5SUdabGRHTm9JR1p5YjIwZ2JXOWtaV3dnYVc1bVpYSmxibU5wYm1jdVhHNGdLaTljYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVkhsd1pXUlVaVzV6YjNJOFZDQmxlSFJsYm1SeklGUmxibk52Y2k1VWVYQmxQaUJsZUhSbGJtUnpJRlI1Y0dWa1ZHVnVjMjl5UW1GelpUeFVQaXdnVkhsd1pXUlVaVzV6YjNKVmRHbHNjenhVUGlCN2ZWeHVMeW9xWEc0Z0tpQlNaWEJ5WlhObGJuUWdiWFZzZEdrdFpHbHRaVzV6YVc5dVlXd2dZWEp5WVhseklIUnZJR1psWldRZ2RHOGdiM0lnWm1WMFkyZ2dabkp2YlNCdGIyUmxiQ0JwYm1abGNtVnVZMmx1Wnk1Y2JpQXFMMXh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JVWlc1emIzSWdaWGgwWlc1a2N5QlVlWEJsWkZSbGJuTnZja0poYzJVOFZHVnVjMjl5TGxSNWNHVStMQ0JVZVhCbFpGUmxibk52Y2xWMGFXeHpQRlJsYm5OdmNpNVVlWEJsUGlCN2ZWeHVYRzR2S2lwY2JpQXFJSFI1Y0dVZ1ZHVnVjMjl5UTI5dWMzUnlkV04wYjNJZ1pHVm1hVzVsY3lCMGFHVWdZMjl1YzNSeWRXTjBiM0p6SUc5bUlDZFVaVzV6YjNJbklIUnZJR055WldGMFpTQkRVRlVnZEdWdWMyOXlJR2x1YzNSaGJtTmxjeTVjYmlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQlVaVzV6YjNKRGIyNXpkSEoxWTNSdmNpQmxlSFJsYm1SeklGUmxibk52Y2taaFkzUnZjbmtnZTF4dUlDQXZMeUFqY21WbmFXOXVJRU5RVlNCMFpXNXpiM0lnTFNCemNHVmphV1o1SUdWc1pXMWxiblFnZEhsd1pWeHVJQ0F2S2lwY2JpQWdJQ29nUTI5dWMzUnlkV04wSUdFZ2JtVjNJSE4wY21sdVp5QjBaVzV6YjNJZ2IySnFaV04wSUdaeWIyMGdkR2hsSUdkcGRtVnVJSFI1Y0dVc0lHUmhkR0VnWVc1a0lHUnBiWE11WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCMGVYQmxJQzBnVTNCbFkybG1lU0IwYUdVZ1pXeGxiV1Z1ZENCMGVYQmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ1pHRjBZU0F0SUZOd1pXTnBabmtnZEdobElFTlFWU0IwWlc1emIzSWdaR0YwWVM1Y2JpQWdJQ29nUUhCaGNtRnRJR1JwYlhNZ0xTQlRjR1ZqYVdaNUlIUm9aU0JrYVcxbGJuTnBiMjRnYjJZZ2RHaGxJSFJsYm5OdmNpNGdTV1lnYjIxcGRIUmxaQ3dnWVNBeExVUWdkR1Z1YzI5eUlHbHpJR0Z6YzNWdFpXUXVYRzRnSUNBcUwxeHVJQ0J1Wlhjb2RIbHdaVG9nSjNOMGNtbHVaeWNzSUdSaGRHRTZJRlJsYm5OdmNpNUVZWFJoVkhsd1pVMWhjRnNuYzNSeWFXNW5KMTE4Y21WaFpHOXViSGtnYzNSeWFXNW5XMTBzWEc0Z0lDQWdJQ0JrYVcxelB6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJVZVhCbFpGUmxibk52Y2p3bmMzUnlhVzVuSno0N1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOdmJuTjBjblZqZENCaElHNWxkeUJpYjI5c0lIUmxibk52Y2lCdlltcGxZM1FnWm5KdmJTQjBhR1VnWjJsMlpXNGdkSGx3WlN3Z1pHRjBZU0JoYm1RZ1pHbHRjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUhSNWNHVWdMU0JUY0dWamFXWjVJSFJvWlNCbGJHVnRaVzUwSUhSNWNHVXVYRzRnSUNBcUlFQndZWEpoYlNCa1lYUmhJQzBnVTNCbFkybG1lU0IwYUdVZ1ExQlZJSFJsYm5OdmNpQmtZWFJoTGx4dUlDQWdLaUJBY0dGeVlXMGdaR2x0Y3lBdElGTndaV05wWm5rZ2RHaGxJR1JwYldWdWMybHZiaUJ2WmlCMGFHVWdkR1Z1YzI5eUxpQkpaaUJ2YldsMGRHVmtMQ0JoSURFdFJDQjBaVzV6YjNJZ2FYTWdZWE56ZFcxbFpDNWNiaUFnSUNvdlhHNGdJRzVsZHloMGVYQmxPaUFuWW05dmJDY3NJR1JoZEdFNklGUmxibk52Y2k1RVlYUmhWSGx3WlUxaGNGc25ZbTl2YkNkZGZISmxZV1J2Ym14NUlHSnZiMnhsWVc1YlhTd2daR2x0Y3o4NklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZEtUb2dWSGx3WldSVVpXNXpiM0k4SjJKdmIyd25QanRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1YzNSeWRXTjBJR0VnYm1WM0lEWTBMV0pwZENCcGJuUmxaMlZ5SUhSNWNHVmtJSFJsYm5OdmNpQnZZbXBsWTNRZ1puSnZiU0IwYUdVZ1oybDJaVzRnZEhsd1pTd2daR0YwWVNCaGJtUWdaR2x0Y3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIUjVjR1VnTFNCVGNHVmphV1o1SUhSb1pTQmxiR1Z0Wlc1MElIUjVjR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQmtZWFJoSUMwZ1UzQmxZMmxtZVNCMGFHVWdRMUJWSUhSbGJuTnZjaUJrWVhSaExseHVJQ0FnS2lCQWNHRnlZVzBnWkdsdGN5QXRJRk53WldOcFpua2dkR2hsSUdScGJXVnVjMmx2YmlCdlppQjBhR1VnZEdWdWMyOXlMaUJKWmlCdmJXbDBkR1ZrTENCaElERXRSQ0IwWlc1emIzSWdhWE1nWVhOemRXMWxaQzVjYmlBZ0lDb3ZYRzRnSUc1bGR6eFVJR1Y0ZEdWdVpITWdKM1ZwYm5RMk5DZDhKMmx1ZERZMEp6NG9YRzRnSUNBZ0lDQjBlWEJsT2lCVUxDQmtZWFJoT2lCVVpXNXpiM0l1UkdGMFlWUjVjR1ZOWVhCYlZGMThjbVZoWkc5dWJIa2dZbWxuYVc1MFcxMThjbVZoWkc5dWJIa2diblZ0WW1WeVcxMHNYRzRnSUNBZ0lDQmthVzF6UHpvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwcE9pQlVlWEJsWkZSbGJuTnZjanhVUGp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTI5dWMzUnlkV04wSUdFZ2JtVjNJRzUxYldWeWFXTWdkR1Z1YzI5eUlHOWlhbVZqZENCbWNtOXRJSFJvWlNCbmFYWmxiaUIwZVhCbExDQmtZWFJoSUdGdVpDQmthVzF6TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2RIbHdaU0F0SUZOd1pXTnBabmtnZEdobElHVnNaVzFsYm5RZ2RIbHdaUzVjYmlBZ0lDb2dRSEJoY21GdElHUmhkR0VnTFNCVGNHVmphV1o1SUhSb1pTQkRVRlVnZEdWdWMyOXlJR1JoZEdFdVhHNGdJQ0FxSUVCd1lYSmhiU0JrYVcxeklDMGdVM0JsWTJsbWVTQjBhR1VnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0IwWlc1emIzSXVJRWxtSUc5dGFYUjBaV1FzSUdFZ01TMUVJSFJsYm5OdmNpQnBjeUJoYzNOMWJXVmtMbHh1SUNBZ0tpOWNiaUFnYm1WM1BGUWdaWGgwWlc1a2N5QkZlR05zZFdSbFBGUmxibk52Y2k1VWVYQmxMQ0FuYzNSeWFXNW5KM3duWW05dmJDZDhKM1ZwYm5RMk5DZDhKMmx1ZERZMEp6NCtLRnh1SUNBZ0lDQWdkSGx3WlRvZ1ZDd2daR0YwWVRvZ1ZHVnVjMjl5TGtSaGRHRlVlWEJsVFdGd1cxUmRmSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0JrYVcxelB6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJVZVhCbFpGUmxibk52Y2p4VVBqdGNiaUFnTHk4Z0kyVnVaSEpsWjJsdmJseHVYRzRnSUM4dklDTnlaV2RwYjI0Z1ExQlZJSFJsYm5OdmNpQXRJR2x1Wm1WeUlHVnNaVzFsYm5RZ2RIbHdaWE5jYmx4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1YzNSeWRXTjBJR0VnYm1WM0lHWnNiMkYwTXpJZ2RHVnVjMjl5SUc5aWFtVmpkQ0JtY205dElIUm9aU0JuYVhabGJpQmtZWFJoSUdGdVpDQmthVzF6TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ1pHRjBZU0F0SUZOd1pXTnBabmtnZEdobElFTlFWU0IwWlc1emIzSWdaR0YwWVM1Y2JpQWdJQ29nUUhCaGNtRnRJR1JwYlhNZ0xTQlRjR1ZqYVdaNUlIUm9aU0JrYVcxbGJuTnBiMjRnYjJZZ2RHaGxJSFJsYm5OdmNpNGdTV1lnYjIxcGRIUmxaQ3dnWVNBeExVUWdkR1Z1YzI5eUlHbHpJR0Z6YzNWdFpXUXVYRzRnSUNBcUwxeHVJQ0J1Wlhjb1pHRjBZVG9nUm14dllYUXpNa0Z5Y21GNUxDQmthVzF6UHpvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwcE9pQlVlWEJsWkZSbGJuTnZjanduWm14dllYUXpNaWMrTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYjI1emRISjFZM1FnWVNCdVpYY2dhVzUwT0NCMFpXNXpiM0lnYjJKcVpXTjBJR1p5YjIwZ2RHaGxJR2RwZG1WdUlHUmhkR0VnWVc1a0lHUnBiWE11WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCa1lYUmhJQzBnVTNCbFkybG1lU0IwYUdVZ1ExQlZJSFJsYm5OdmNpQmtZWFJoTGx4dUlDQWdLaUJBY0dGeVlXMGdaR2x0Y3lBdElGTndaV05wWm5rZ2RHaGxJR1JwYldWdWMybHZiaUJ2WmlCMGFHVWdkR1Z1YzI5eUxpQkpaaUJ2YldsMGRHVmtMQ0JoSURFdFJDQjBaVzV6YjNJZ2FYTWdZWE56ZFcxbFpDNWNiaUFnSUNvdlhHNGdJRzVsZHloa1lYUmhPaUJKYm5RNFFYSnlZWGtzSUdScGJYTS9PaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU2s2SUZSNWNHVmtWR1Z1YzI5eVBDZHBiblE0Sno0N1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOdmJuTjBjblZqZENCaElHNWxkeUIxYVc1ME9DQjBaVzV6YjNJZ2IySnFaV04wSUdaeWIyMGdkR2hsSUdkcGRtVnVJR1JoZEdFZ1lXNWtJR1JwYlhNdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQmtZWFJoSUMwZ1UzQmxZMmxtZVNCMGFHVWdRMUJWSUhSbGJuTnZjaUJrWVhSaExseHVJQ0FnS2lCQWNHRnlZVzBnWkdsdGN5QXRJRk53WldOcFpua2dkR2hsSUdScGJXVnVjMmx2YmlCdlppQjBhR1VnZEdWdWMyOXlMaUJKWmlCdmJXbDBkR1ZrTENCaElERXRSQ0IwWlc1emIzSWdhWE1nWVhOemRXMWxaQzVjYmlBZ0lDb3ZYRzRnSUc1bGR5aGtZWFJoT2lCVmFXNTBPRUZ5Y21GNUxDQmthVzF6UHpvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwcE9pQlVlWEJsWkZSbGJuTnZjanduZFdsdWREZ25QanRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1YzNSeWRXTjBJR0VnYm1WM0lIVnBiblF4TmlCMFpXNXpiM0lnYjJKcVpXTjBJR1p5YjIwZ2RHaGxJR2RwZG1WdUlHUmhkR0VnWVc1a0lHUnBiWE11WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCa1lYUmhJQzBnVTNCbFkybG1lU0IwYUdVZ1ExQlZJSFJsYm5OdmNpQmtZWFJoTGx4dUlDQWdLaUJBY0dGeVlXMGdaR2x0Y3lBdElGTndaV05wWm5rZ2RHaGxJR1JwYldWdWMybHZiaUJ2WmlCMGFHVWdkR1Z1YzI5eUxpQkpaaUJ2YldsMGRHVmtMQ0JoSURFdFJDQjBaVzV6YjNJZ2FYTWdZWE56ZFcxbFpDNWNiaUFnSUNvdlhHNGdJRzVsZHloa1lYUmhPaUJWYVc1ME1UWkJjbkpoZVN3Z1pHbHRjejg2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkS1RvZ1ZIbHdaV1JVWlc1emIzSThKM1ZwYm5ReE5pYytPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRiMjV6ZEhKMVkzUWdZU0J1WlhjZ2FXNTBNVFlnZEdWdWMyOXlJRzlpYW1WamRDQm1jbTl0SUhSb1pTQm5hWFpsYmlCa1lYUmhJR0Z1WkNCa2FXMXpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnWkdGMFlTQXRJRk53WldOcFpua2dkR2hsSUVOUVZTQjBaVzV6YjNJZ1pHRjBZUzVjYmlBZ0lDb2dRSEJoY21GdElHUnBiWE1nTFNCVGNHVmphV1o1SUhSb1pTQmthVzFsYm5OcGIyNGdiMllnZEdobElIUmxibk52Y2k0Z1NXWWdiMjFwZEhSbFpDd2dZU0F4TFVRZ2RHVnVjMjl5SUdseklHRnpjM1Z0WldRdVhHNGdJQ0FxTDF4dUlDQnVaWGNvWkdGMFlUb2dTVzUwTVRaQmNuSmhlU3dnWkdsdGN6ODZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRLVG9nVkhsd1pXUlVaVzV6YjNJOEoybHVkREUySno0N1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOdmJuTjBjblZqZENCaElHNWxkeUJwYm5Rek1pQjBaVzV6YjNJZ2IySnFaV04wSUdaeWIyMGdkR2hsSUdkcGRtVnVJR1JoZEdFZ1lXNWtJR1JwYlhNdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQmtZWFJoSUMwZ1UzQmxZMmxtZVNCMGFHVWdRMUJWSUhSbGJuTnZjaUJrWVhSaExseHVJQ0FnS2lCQWNHRnlZVzBnWkdsdGN5QXRJRk53WldOcFpua2dkR2hsSUdScGJXVnVjMmx2YmlCdlppQjBhR1VnZEdWdWMyOXlMaUJKWmlCdmJXbDBkR1ZrTENCaElERXRSQ0IwWlc1emIzSWdhWE1nWVhOemRXMWxaQzVjYmlBZ0lDb3ZYRzRnSUc1bGR5aGtZWFJoT2lCSmJuUXpNa0Z5Y21GNUxDQmthVzF6UHpvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwcE9pQlVlWEJsWkZSbGJuTnZjanduYVc1ME16SW5QanRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1YzNSeWRXTjBJR0VnYm1WM0lHbHVkRFkwSUhSbGJuTnZjaUJ2WW1wbFkzUWdabkp2YlNCMGFHVWdaMmwyWlc0Z1pHRjBZU0JoYm1RZ1pHbHRjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUdSaGRHRWdMU0JUY0dWamFXWjVJSFJvWlNCRFVGVWdkR1Z1YzI5eUlHUmhkR0V1WEc0Z0lDQXFJRUJ3WVhKaGJTQmthVzF6SUMwZ1UzQmxZMmxtZVNCMGFHVWdaR2x0Wlc1emFXOXVJRzltSUhSb1pTQjBaVzV6YjNJdUlFbG1JRzl0YVhSMFpXUXNJR0VnTVMxRUlIUmxibk52Y2lCcGN5QmhjM04xYldWa0xseHVJQ0FnS2k5Y2JpQWdibVYzS0dSaGRHRTZJRUpwWjBsdWREWTBRWEp5WVhrc0lHUnBiWE0vT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFNrNklGUjVjR1ZrVkdWdWMyOXlQQ2RwYm5RMk5DYytPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRiMjV6ZEhKMVkzUWdZU0J1WlhjZ2MzUnlhVzVuSUhSbGJuTnZjaUJ2WW1wbFkzUWdabkp2YlNCMGFHVWdaMmwyWlc0Z1pHRjBZU0JoYm1RZ1pHbHRjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUdSaGRHRWdMU0JUY0dWamFXWjVJSFJvWlNCRFVGVWdkR1Z1YzI5eUlHUmhkR0V1WEc0Z0lDQXFJRUJ3WVhKaGJTQmthVzF6SUMwZ1UzQmxZMmxtZVNCMGFHVWdaR2x0Wlc1emFXOXVJRzltSUhSb1pTQjBaVzV6YjNJdUlFbG1JRzl0YVhSMFpXUXNJR0VnTVMxRUlIUmxibk52Y2lCcGN5QmhjM04xYldWa0xseHVJQ0FnS2k5Y2JpQWdibVYzS0dSaGRHRTZJSEpsWVdSdmJteDVJSE4wY21sdVoxdGRMQ0JrYVcxelB6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJVZVhCbFpGUmxibk52Y2p3bmMzUnlhVzVuSno0N1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOdmJuTjBjblZqZENCaElHNWxkeUJpYjI5c0lIUmxibk52Y2lCdlltcGxZM1FnWm5KdmJTQjBhR1VnWjJsMlpXNGdaR0YwWVNCaGJtUWdaR2x0Y3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElHUmhkR0VnTFNCVGNHVmphV1o1SUhSb1pTQkRVRlVnZEdWdWMyOXlJR1JoZEdFdVhHNGdJQ0FxSUVCd1lYSmhiU0JrYVcxeklDMGdVM0JsWTJsbWVTQjBhR1VnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0IwWlc1emIzSXVJRWxtSUc5dGFYUjBaV1FzSUdFZ01TMUVJSFJsYm5OdmNpQnBjeUJoYzNOMWJXVmtMbHh1SUNBZ0tpOWNiaUFnYm1WM0tHUmhkR0U2SUhKbFlXUnZibXg1SUdKdmIyeGxZVzViWFN3Z1pHbHRjejg2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkS1RvZ1ZIbHdaV1JVWlc1emIzSThKMkp2YjJ3blBqdGNibHh1SUNBdktpcGNiaUFnSUNvZ1EyOXVjM1J5ZFdOMElHRWdibVYzSUdac2IyRjBOalFnZEdWdWMyOXlJRzlpYW1WamRDQm1jbTl0SUhSb1pTQm5hWFpsYmlCa1lYUmhJR0Z1WkNCa2FXMXpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnWkdGMFlTQXRJRk53WldOcFpua2dkR2hsSUVOUVZTQjBaVzV6YjNJZ1pHRjBZUzVjYmlBZ0lDb2dRSEJoY21GdElHUnBiWE1nTFNCVGNHVmphV1o1SUhSb1pTQmthVzFsYm5OcGIyNGdiMllnZEdobElIUmxibk52Y2k0Z1NXWWdiMjFwZEhSbFpDd2dZU0F4TFVRZ2RHVnVjMjl5SUdseklHRnpjM1Z0WldRdVhHNGdJQ0FxTDF4dUlDQnVaWGNvWkdGMFlUb2dSbXh2WVhRMk5FRnljbUY1TENCa2FXMXpQem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBwT2lCVWVYQmxaRlJsYm5OdmNqd25abXh2WVhRMk5DYytPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRiMjV6ZEhKMVkzUWdZU0J1WlhjZ2RXbHVkRE15SUhSbGJuTnZjaUJ2WW1wbFkzUWdabkp2YlNCMGFHVWdaMmwyWlc0Z1pHRjBZU0JoYm1RZ1pHbHRjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUdSaGRHRWdMU0JUY0dWamFXWjVJSFJvWlNCRFVGVWdkR1Z1YzI5eUlHUmhkR0V1WEc0Z0lDQXFJRUJ3WVhKaGJTQmthVzF6SUMwZ1UzQmxZMmxtZVNCMGFHVWdaR2x0Wlc1emFXOXVJRzltSUhSb1pTQjBaVzV6YjNJdUlFbG1JRzl0YVhSMFpXUXNJR0VnTVMxRUlIUmxibk52Y2lCcGN5QmhjM04xYldWa0xseHVJQ0FnS2k5Y2JpQWdibVYzS0dSaGRHRTZJRlZwYm5Rek1rRnljbUY1TENCa2FXMXpQem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBwT2lCVWVYQmxaRlJsYm5OdmNqd25kV2x1ZERNeUp6NDdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTnZibk4wY25WamRDQmhJRzVsZHlCMWFXNTBOalFnZEdWdWMyOXlJRzlpYW1WamRDQm1jbTl0SUhSb1pTQm5hWFpsYmlCa1lYUmhJR0Z1WkNCa2FXMXpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnWkdGMFlTQXRJRk53WldOcFpua2dkR2hsSUVOUVZTQjBaVzV6YjNJZ1pHRjBZUzVjYmlBZ0lDb2dRSEJoY21GdElHUnBiWE1nTFNCVGNHVmphV1o1SUhSb1pTQmthVzFsYm5OcGIyNGdiMllnZEdobElIUmxibk52Y2k0Z1NXWWdiMjFwZEhSbFpDd2dZU0F4TFVRZ2RHVnVjMjl5SUdseklHRnpjM1Z0WldRdVhHNGdJQ0FxTDF4dUlDQnVaWGNvWkdGMFlUb2dRbWxuVldsdWREWTBRWEp5WVhrc0lHUnBiWE0vT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFNrNklGUjVjR1ZrVkdWdWMyOXlQQ2QxYVc1ME5qUW5QanRjYmx4dUlDQXZMeUFqWlc1a2NtVm5hVzl1WEc1Y2JpQWdMeThnSTNKbFoybHZiaUJEVUZVZ2RHVnVjMjl5SUMwZ1ptRnNiQ0JpWVdOcklIUnZJRzV2YmkxblpXNWxjbWxqSUhSbGJuTnZjaUIwZVhCbElHUmxZMnhoY21GMGFXOXVYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTnZibk4wY25WamRDQmhJRzVsZHlCMFpXNXpiM0lnYjJKcVpXTjBJR1p5YjIwZ2RHaGxJR2RwZG1WdUlIUjVjR1VzSUdSaGRHRWdZVzVrSUdScGJYTXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0IwZVhCbElDMGdVM0JsWTJsbWVTQjBhR1VnWld4bGJXVnVkQ0IwZVhCbExseHVJQ0FnS2lCQWNHRnlZVzBnWkdGMFlTQXRJRk53WldOcFpua2dkR2hsSUVOUVZTQjBaVzV6YjNJZ1pHRjBZUzVjYmlBZ0lDb2dRSEJoY21GdElHUnBiWE1nTFNCVGNHVmphV1o1SUhSb1pTQmthVzFsYm5OcGIyNGdiMllnZEdobElIUmxibk52Y2k0Z1NXWWdiMjFwZEhSbFpDd2dZU0F4TFVRZ2RHVnVjMjl5SUdseklHRnpjM1Z0WldRdVhHNGdJQ0FxTDF4dUlDQnVaWGNvZEhsd1pUb2dWR1Z1YzI5eUxsUjVjR1VzSUdSaGRHRTZJRlJsYm5OdmNpNUVZWFJoVkhsd1pYeHlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhYeHlaV0ZrYjI1c2VTQnpkSEpwYm1kYlhYeHlaV0ZrYjI1c2VTQmlhV2RwYm5SYlhYeHlaV0ZrYjI1c2VTQmliMjlzWldGdVcxMHNYRzRnSUNBZ0lDQmthVzF6UHpvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwcE9pQlVaVzV6YjNJN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOdmJuTjBjblZqZENCaElHNWxkeUIwWlc1emIzSWdiMkpxWldOMElHWnliMjBnZEdobElHZHBkbVZ1SUdSaGRHRWdZVzVrSUdScGJYTXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0JrWVhSaElDMGdVM0JsWTJsbWVTQjBhR1VnUTFCVklIUmxibk52Y2lCa1lYUmhMbHh1SUNBZ0tpQkFjR0Z5WVcwZ1pHbHRjeUF0SUZOd1pXTnBabmtnZEdobElHUnBiV1Z1YzJsdmJpQnZaaUIwYUdVZ2RHVnVjMjl5TGlCSlppQnZiV2wwZEdWa0xDQmhJREV0UkNCMFpXNXpiM0lnYVhNZ1lYTnpkVzFsWkM1Y2JpQWdJQ292WEc0Z0lHNWxkeWhrWVhSaE9pQlVaVzV6YjNJdVJHRjBZVlI1Y0dVc0lHUnBiWE0vT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFNrNklGUmxibk52Y2p0Y2JpQWdMeThnSTJWdVpISmxaMmx2Ymx4dWZWeHVYRzR2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnUUhSNWNHVnpZM0pwY0hRdFpYTnNhVzUwTDI1aGJXbHVaeTFqYjI1MlpXNTBhVzl1WEc1bGVIQnZjblFnWTI5dWMzUWdWR1Z1YzI5eUlEMGdWR1Z1YzI5eVNXMXdiQ0JoY3lCVVpXNXpiM0pEYjI1emRISjFZM1J2Y2p0Y2JpSXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJSHRsYm5aOUlHWnliMjBnSnk0dlpXNTJMV2x0Y0d3dWFuTW5PMXh1WEc0dktpcGNiaUFxSUVCcFoyNXZjbVZjYmlBcUwxeHVaWGh3YjNKMElHTnZibk4wSUZSU1FVTkZJRDBnS0dSbGRtbGpaVlI1Y0dVNklITjBjbWx1Wnl3Z2JHRmlaV3c2SUhOMGNtbHVaeWtnUFQ0Z2UxeHVJQ0JwWmlBb2RIbHdaVzltSUdWdWRpNTBjbUZqWlNBOVBUMGdKM1Z1WkdWbWFXNWxaQ2NnUHlBaFpXNTJMbmRoYzIwdWRISmhZMlVnT2lBaFpXNTJMblJ5WVdObEtTQjdYRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzRnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCdWJ5MWpiMjV6YjJ4bFhHNGdJR052Ym5OdmJHVXVkR2x0WlZOMFlXMXdLR0FrZTJSbGRtbGpaVlI1Y0dWOU9qcFBVbFE2T2lSN2JHRmlaV3g5WUNrN1hHNTlPMXh1WEc1amIyNXpkQ0JVVWtGRFJWOUdWVTVESUQwZ0tHMXpaem9nYzNSeWFXNW5MQ0JsZUhSeVlVMXpaejg2SUhOMGNtbHVaeWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQnpkR0ZqYXlBOUlHNWxkeUJGY25KdmNpZ3BMbk4wWVdOclB5NXpjR3hwZENndlhGeHlYRnh1ZkZ4Y2NueGNYRzR2WnlrZ2ZId2dXMTA3WEc0Z0lHeGxkQ0JvWVhOVWNtRmpaVVoxYm1NZ1BTQm1ZV3h6WlR0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0J6ZEdGamF5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR2xtSUNob1lYTlVjbUZqWlVaMWJtTWdKaVlnSVhOMFlXTnJXMmxkTG1sdVkyeDFaR1Z6S0NkVVVrRkRSVjlHVlU1REp5a3BJSHRjYmlBZ0lDQWdJR3hsZENCc1lXSmxiQ0E5SUdCR1ZVNURYeVI3YlhObmZUbzZKSHR6ZEdGamExdHBYUzUwY21sdEtDa3VjM0JzYVhRb0p5QW5LVnN4WFgxZ08xeHVJQ0FnSUNBZ2FXWWdLR1Y0ZEhKaFRYTm5LU0I3WEc0Z0lDQWdJQ0FnSUd4aFltVnNJQ3M5SUdBNk9pUjdaWGgwY21GTmMyZDlZRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJRlJTUVVORktDZERVRlVuTENCc1lXSmxiQ2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaHpkR0ZqYTF0cFhTNXBibU5zZFdSbGN5Z25WRkpCUTBWZlJsVk9ReWNwS1NCN1hHNGdJQ0FnSUNCb1lYTlVjbUZqWlVaMWJtTWdQU0IwY25WbE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkFhV2R1YjNKbFhHNGdLaTljYm1WNGNHOXlkQ0JqYjI1emRDQlVVa0ZEUlY5R1ZVNURYMEpGUjBsT0lEMGdLR1Y0ZEhKaFRYTm5Qem9nYzNSeWFXNW5LU0E5UGlCN1hHNGdJR2xtSUNoMGVYQmxiMllnWlc1MkxuUnlZV05sSUQwOVBTQW5kVzVrWldacGJtVmtKeUEvSUNGbGJuWXVkMkZ6YlM1MGNtRmpaU0E2SUNGbGJuWXVkSEpoWTJVcElIdGNiaUFnSUNCeVpYUjFjbTQ3WEc0Z0lIMWNiaUFnVkZKQlEwVmZSbFZPUXlnblFrVkhTVTRuTENCbGVIUnlZVTF6WnlrN1hHNTlPMXh1WEc0dktpcGNiaUFxSUVCcFoyNXZjbVZjYmlBcUwxeHVaWGh3YjNKMElHTnZibk4wSUZSU1FVTkZYMFpWVGtOZlJVNUVJRDBnS0dWNGRISmhUWE5uUHpvZ2MzUnlhVzVuS1NBOVBpQjdYRzRnSUdsbUlDaDBlWEJsYjJZZ1pXNTJMblJ5WVdObElEMDlQU0FuZFc1a1pXWnBibVZrSnlBL0lDRmxibll1ZDJGemJTNTBjbUZqWlNBNklDRmxibll1ZEhKaFkyVXBJSHRjYmlBZ0lDQnlaWFIxY200N1hHNGdJSDFjYmlBZ1ZGSkJRMFZmUmxWT1F5Z25SVTVFSnl3Z1pYaDBjbUZOYzJjcE8xeHVmVHRjYmlJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVhVzF3YjNKMElIdHlaWE52YkhabFFtRmphMlZ1WkVGdVpFVjRaV04xZEdsdmJsQnliM1pwWkdWeWMzMGdabkp2YlNBbkxpOWlZV05yWlc1a0xXbHRjR3d1YW5Nbk8xeHVhVzF3YjNKMElIdEpibVpsY21WdVkyVlRaWE56YVc5dVNHRnVaR3hsY24wZ1puSnZiU0FuTGk5aVlXTnJaVzVrTG1wekp6dGNibWx0Y0c5eWRDQjdTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpQmhjeUJKYm1abGNtVnVZMlZUWlhOemFXOXVTVzUwWlhKbVlXTmxmU0JtY205dElDY3VMMmx1Wm1WeVpXNWpaUzF6WlhOemFXOXVMbXB6Snp0Y2JtbHRjRzl5ZENCN1QyNXVlRlpoYkhWbGZTQm1jbTl0SUNjdUwyOXVibmd0ZG1Gc2RXVXVhbk1uTzF4dWFXMXdiM0owSUh0VVpXNXpiM0o5SUdaeWIyMGdKeTR2ZEdWdWMyOXlMbXB6Snp0Y2JtbHRjRzl5ZENCN1ZGSkJRMFZmUmxWT1ExOUNSVWRKVGl3Z1ZGSkJRMFZmUmxWT1ExOUZUa1I5SUdaeWIyMGdKeTR2ZEhKaFkyVXVhbk1uTzF4dVhHNTBlWEJsSUZObGMzTnBiMjVQY0hScGIyNXpJRDBnU1c1bVpYSmxibU5sVTJWemMybHZia2x1ZEdWeVptRmpaUzVUWlhOemFXOXVUM0IwYVc5dWN6dGNiblI1Y0dVZ1VuVnVUM0IwYVc5dWN5QTlJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNUpiblJsY21aaFkyVXVVblZ1VDNCMGFXOXVjenRjYm5SNWNHVWdSbVZsWkhOVWVYQmxJRDBnU1c1bVpYSmxibU5sVTJWemMybHZia2x1ZEdWeVptRmpaUzVHWldWa2MxUjVjR1U3WEc1MGVYQmxJRVpsZEdOb1pYTlVlWEJsSUQwZ1NXNW1aWEpsYm1ObFUyVnpjMmx2YmtsdWRHVnlabUZqWlM1R1pYUmphR1Z6Vkhsd1pUdGNiblI1Y0dVZ1VtVjBkWEp1Vkhsd1pTQTlJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNUpiblJsY21aaFkyVXVVbVYwZFhKdVZIbHdaVHRjYmx4dVpYaHdiM0owSUdOc1lYTnpJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNGdhVzF3YkdWdFpXNTBjeUJKYm1abGNtVnVZMlZUWlhOemFXOXVTVzUwWlhKbVlXTmxJSHRjYmlBZ2NISnBkbUYwWlNCamIyNXpkSEoxWTNSdmNpaG9ZVzVrYkdWeU9pQkpibVpsY21WdVkyVlRaWE56YVc5dVNHRnVaR3hsY2lrZ2UxeHVJQ0FnSUhSb2FYTXVhR0Z1Wkd4bGNpQTlJR2hoYm1Sc1pYSTdYRzRnSUgxY2JpQWdjblZ1S0dabFpXUnpPaUJHWldWa2MxUjVjR1VzSUc5d2RHbHZibk0vT2lCU2RXNVBjSFJwYjI1ektUb2dVSEp2YldselpUeFNaWFIxY201VWVYQmxQanRjYmlBZ2NuVnVLR1psWldSek9pQkdaV1ZrYzFSNWNHVXNJR1psZEdOb1pYTTZJRVpsZEdOb1pYTlVlWEJsTENCdmNIUnBiMjV6UHpvZ1VuVnVUM0IwYVc5dWN5azZJRkJ5YjIxcGMyVThVbVYwZFhKdVZIbHdaVDQ3WEc0Z0lHRnplVzVqSUhKMWJpaG1aV1ZrY3pvZ1JtVmxaSE5VZVhCbExDQmhjbWN4UHpvZ1JtVjBZMmhsYzFSNWNHVjhVblZ1VDNCMGFXOXVjeXdnWVhKbk1qODZJRkoxYms5d2RHbHZibk1wT2lCUWNtOXRhWE5sUEZKbGRIVnlibFI1Y0dVK0lIdGNiaUFnSUNCVVVrRkRSVjlHVlU1RFgwSkZSMGxPS0NrN1hHNGdJQ0FnWTI5dWMzUWdabVYwWTJobGN6b2dlMXR1WVcxbE9pQnpkSEpwYm1kZE9pQlBibTU0Vm1Gc2RXVjhiblZzYkgwZ1BTQjdmVHRjYmlBZ0lDQnNaWFFnYjNCMGFXOXVjem9nVW5WdVQzQjBhVzl1Y3lBOUlIdDlPMXh1SUNBZ0lDOHZJR05vWldOcklHbHVjSFYwYzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWm1WbFpITWdJVDA5SUNkdlltcGxZM1FuSUh4OElHWmxaV1J6SUQwOVBTQnVkV3hzSUh4OElHWmxaV1J6SUdsdWMzUmhibU5sYjJZZ1ZHVnVjMjl5SUh4OElFRnljbUY1TG1selFYSnlZWGtvWm1WbFpITXBLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0Z4dUlDQWdJQ0FnSUNBZ0lDZGNYQ2RtWldWa2MxeGNKeUJ0ZFhOMElHSmxJR0Z1SUc5aWFtVmpkQ0IwYUdGMElIVnpaU0JwYm5CMWRDQnVZVzFsY3lCaGN5QnJaWGx6SUdGdVpDQlBibTU0Vm1Gc2RXVWdZWE1nWTI5eWNtVnpjRzl1WkdsdVp5QjJZV3gxWlhNdUp5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2JHVjBJR2x6Um1WMFkyaGxjMFZ0Y0hSNUlEMGdkSEoxWlR0Y2JpQWdJQ0F2THlCa1pYUmxjbTFwYm1VZ2QyaHBZMmdnYjNabGNuSnBaR1VnYVhNZ1ltVnBibWNnZFhObFpGeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ1lYSm5NU0E5UFQwZ0oyOWlhbVZqZENjcElIdGNiaUFnSUNBZ0lHbG1JQ2hoY21jeElEMDlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvSjFWdVpYaHdaV04wWldRZ1lYSm5kVzFsYm5SYk1WMDZJR05oYm01dmRDQmlaU0J1ZFd4c0xpY3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0dGeVp6RWdhVzV6ZEdGdVkyVnZaaUJVWlc1emIzSXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUZSNWNHVkZjbkp2Y2lnblhGd25abVYwWTJobGMxeGNKeUJqWVc1dWIzUWdZbVVnWVNCVVpXNXpiM0luS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLRUZ5Y21GNUxtbHpRWEp5WVhrb1lYSm5NU2twSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR0Z5WnpFdWJHVnVaM1JvSUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ25YRnduWm1WMFkyaGxjMXhjSnlCallXNXViM1FnWW1VZ1lXNGdaVzF3ZEhrZ1lYSnlZWGt1SnlrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhWE5HWlhSamFHVnpSVzF3ZEhrZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0x5OGdiM1YwY0hWMElHNWhiV1Z6WEc0Z0lDQWdJQ0FnSUdadmNpQW9ZMjl1YzNRZ2JtRnRaU0J2WmlCaGNtY3hLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnVZVzFsSUNFOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ25YRnduWm1WMFkyaGxjMXhjSnlCdGRYTjBJR0psSUdFZ2MzUnlhVzVuSUdGeWNtRjVJRzl5SUdGdUlHOWlhbVZqZEM0bktUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWIzVjBjSFYwVG1GdFpYTXVhVzVrWlhoUFppaHVZVzFsS1NBOVBUMGdMVEVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJTWVc1blpVVnljbTl5S0dBblptVjBZMmhsY3ljZ1kyOXVkR0ZwYm5NZ2FXNTJZV3hwWkNCdmRYUndkWFFnYm1GdFpUb2dKSHR1WVcxbGZTNWdLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdabVYwWTJobGMxdHVZVzFsWFNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JR0Z5WnpJZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUdGeVp6SWdJVDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnSUNCdmNIUnBiMjV6SUQwZ1lYSm5NanRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnWVhKbk1pQWhQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0NkY1hDZHZjSFJwYjI1elhGd25JRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBMaWNwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBdkx5QmtaV05wWkdVZ2QyaGxkR2hsY2lCaGNtY3hJR2x6SUdabGRHTm9aWE1nYjNJZ2IzQjBhVzl1YzF4dUlDQWdJQ0FnSUNBdkx5QnBaaUJoYm5rZ2IzVjBjSFYwSUc1aGJXVWdhWE1nY0hKbGMyVnVkQ0JoYm1RZ2FYUnpJSFpoYkhWbElHbHpJSFpoYkdsa0lFOXVibmhXWVd4MVpTd2dkMlVnWTI5dWMybGtaWElnYVhRZ1ptVjBZMmhsYzF4dUlDQWdJQ0FnSUNCc1pYUWdhWE5HWlhSamFHVnpJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJR052Ym5OMElHRnlaekZMWlhseklEMGdUMkpxWldOMExtZGxkRTkzYmxCeWIzQmxjblI1VG1GdFpYTW9ZWEpuTVNrN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvWTI5dWMzUWdibUZ0WlNCdlppQjBhR2x6TG05MWRIQjFkRTVoYldWektTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHRnlaekZMWlhsekxtbHVaR1Y0VDJZb2JtRnRaU2tnSVQwOUlDMHhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCMklEMGdLR0Z5WnpFZ1lYTWdTVzVtWlhKbGJtTmxVMlZ6YzJsdmJrbHVkR1Z5Wm1GalpTNU9kV3hzWVdKc1pVOXVibmhXWVd4MVpVMWhjRlI1Y0dVcFcyNWhiV1ZkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hZZ1BUMDlJRzUxYkd3Z2ZId2dkaUJwYm5OMFlXNWpaVzltSUZSbGJuTnZjaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwYzBabGRHTm9aWE1nUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnBjMFpsZEdOb1pYTkZiWEIwZVNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JtWlhSamFHVnpXMjVoYldWZElEMGdkanRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnBaaUFvYVhOR1pYUmphR1Z6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJoY21jeUlEMDlQU0FuYjJKcVpXTjBKeUFtSmlCaGNtY3lJQ0U5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnZjSFJwYjI1eklEMGdZWEpuTWp0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQmhjbWN5SUNFOVBTQW5kVzVrWldacGJtVmtKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRlI1Y0dWRmNuSnZjaWduWEZ3bmIzQjBhVzl1YzF4Y0p5QnRkWE4wSUdKbElHRnVJRzlpYW1WamRDNG5LVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdiM0IwYVc5dWN5QTlJR0Z5WnpFZ1lYTWdVblZ1VDNCMGFXOXVjenRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JR0Z5WnpFZ0lUMDlJQ2QxYm1SbFptbHVaV1FuS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtDZFZibVY0Y0dWamRHVmtJR0Z5WjNWdFpXNTBXekZkT2lCdGRYTjBJR0psSUZ4Y0oyWmxkR05vWlhOY1hDY2diM0lnWEZ3bmIzQjBhVzl1YzF4Y0p5NG5LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJqYUdWamF5QnBaaUJoYkd3Z2FXNXdkWFJ6SUdGeVpTQnBiaUJtWldWa1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCdVlXMWxJRzltSUhSb2FYTXVhVzV3ZFhST1lXMWxjeWtnZTF4dUlDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCbVpXVmtjMXR1WVcxbFhTQTlQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQnBibkIxZENBbkpIdHVZVzFsZlNjZ2FYTWdiV2x6YzJsdVp5QnBiaUFuWm1WbFpITW5MbUFwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUdsbUlHNXZJR1psZEdOb1pYTWdhWE1nYzNCbFkybG1hV1ZrTENCM1pTQjFjMlVnZEdobElHWjFiR3dnYjNWMGNIVjBJRzVoYldWeklHeHBjM1JjYmlBZ0lDQnBaaUFvYVhOR1pYUmphR1Z6Ulcxd2RIa3BJSHRjYmlBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnYm1GdFpTQnZaaUIwYUdsekxtOTFkSEIxZEU1aGJXVnpLU0I3WEc0Z0lDQWdJQ0FnSUdabGRHTm9aWE5iYm1GdFpWMGdQU0J1ZFd4c08xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklHWmxaV1J6TENCbVpYUmphR1Z6SUdGdVpDQnZjSFJwYjI1eklHRnlaU0J3Y21Wd1lYSmxaRnh1WEc0Z0lDQWdZMjl1YzNRZ2NtVnpkV3gwY3lBOUlHRjNZV2wwSUhSb2FYTXVhR0Z1Wkd4bGNpNXlkVzRvWm1WbFpITXNJR1psZEdOb1pYTXNJRzl3ZEdsdmJuTXBPMXh1SUNBZ0lHTnZibk4wSUhKbGRIVnlibFpoYkhWbE9pQjdXMjVoYldVNklITjBjbWx1WjEwNklFOXVibmhXWVd4MVpYMGdQU0I3ZlR0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUd0bGVTQnBiaUJ5WlhOMWJIUnpLU0I3WEc0Z0lDQWdJQ0JwWmlBb1QySnFaV04wTG1oaGMwOTNibEJ5YjNCbGNuUjVMbU5oYkd3b2NtVnpkV3gwY3l3Z2EyVjVLU2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J5WlhOMWJIUWdQU0J5WlhOMWJIUnpXMnRsZVYwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WlhOMWJIUWdhVzV6ZEdGdVkyVnZaaUJVWlc1emIzSXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTVXWVd4MVpWdHJaWGxkSUQwZ2NtVnpkV3gwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmxaaGJIVmxXMnRsZVYwZ1BTQnVaWGNnVkdWdWMyOXlLSEpsYzNWc2RDNTBlWEJsTENCeVpYTjFiSFF1WkdGMFlTd2djbVZ6ZFd4MExtUnBiWE1wTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJRlJTUVVORlgwWlZUa05mUlU1RUtDazdYRzRnSUNBZ2NtVjBkWEp1SUhKbGRIVnlibFpoYkhWbE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2NtVnNaV0Z6WlNncE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1b1lXNWtiR1Z5TG1ScGMzQnZjMlVvS1R0Y2JpQWdmVnh1WEc0Z0lITjBZWFJwWXlCamNtVmhkR1VvY0dGMGFEb2djM1J5YVc1bkxDQnZjSFJwYjI1elB6b2dVMlZ6YzJsdmJrOXdkR2x2Ym5NcE9pQlFjbTl0YVhObFBFbHVabVZ5Wlc1alpWTmxjM05wYjI1SmJuUmxjbVpoWTJVK08xeHVJQ0J6ZEdGMGFXTWdZM0psWVhSbEtHSjFabVpsY2pvZ1FYSnlZWGxDZFdabVpYSk1hV3RsTENCdmNIUnBiMjV6UHpvZ1UyVnpjMmx2Yms5d2RHbHZibk1wT2lCUWNtOXRhWE5sUEVsdVptVnlaVzVqWlZObGMzTnBiMjVKYm5SbGNtWmhZMlUrTzF4dUlDQnpkR0YwYVdNZ1kzSmxZWFJsS0dKMVptWmxjam9nUVhKeVlYbENkV1ptWlhKTWFXdGxMQ0JpZVhSbFQyWm1jMlYwT2lCdWRXMWlaWElzSUdKNWRHVk1aVzVuZEdnL09pQnVkVzFpWlhJc0lHOXdkR2x2Ym5NL09pQlRaWE56YVc5dVQzQjBhVzl1Y3lrNlhHNGdJQ0FnSUNCUWNtOXRhWE5sUEVsdVptVnlaVzVqWlZObGMzTnBiMjVKYm5SbGNtWmhZMlUrTzF4dUlDQnpkR0YwYVdNZ1kzSmxZWFJsS0dKMVptWmxjam9nVldsdWREaEJjbkpoZVN3Z2IzQjBhVzl1Y3o4NklGTmxjM05wYjI1UGNIUnBiMjV6S1RvZ1VISnZiV2x6WlR4SmJtWmxjbVZ1WTJWVFpYTnphVzl1U1c1MFpYSm1ZV05sUGp0Y2JpQWdjM1JoZEdsaklHRnplVzVqSUdOeVpXRjBaU2hjYmlBZ0lDQWdJR0Z5WnpBNklITjBjbWx1WjN4QmNuSmhlVUoxWm1abGNreHBhMlY4VldsdWREaEJjbkpoZVN3Z1lYSm5NVDg2SUZObGMzTnBiMjVQY0hScGIyNXpmRzUxYldKbGNpd2dZWEpuTWo4NklHNTFiV0psY2l4Y2JpQWdJQ0FnSUdGeVp6TS9PaUJUWlhOemFXOXVUM0IwYVc5dWN5azZJRkJ5YjIxcGMyVThTVzVtWlhKbGJtTmxVMlZ6YzJsdmJrbHVkR1Z5Wm1GalpUNGdlMXh1SUNBZ0lGUlNRVU5GWDBaVlRrTmZRa1ZIU1U0b0tUdGNiaUFnSUNBdkx5QmxhWFJvWlhJZ2JHOWhaQ0JtY205dElHRWdabWxzWlNCdmNpQmlkV1ptWlhKY2JpQWdJQ0JzWlhRZ1ptbHNaVkJoZEdoUGNsVnBiblE0UVhKeVlYazZJSE4wY21sdVozeFZhVzUwT0VGeWNtRjVPMXh1SUNBZ0lHeGxkQ0J2Y0hScGIyNXpPaUJUWlhOemFXOXVUM0IwYVc5dWN5QTlJSHQ5TzF4dVhHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCaGNtY3dJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ1ptbHNaVkJoZEdoUGNsVnBiblE0UVhKeVlYa2dQU0JoY21jd08xeHVJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQmhjbWN4SUQwOVBTQW5iMkpxWldOMEp5QW1KaUJoY21jeElDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJRzl3ZEdsdmJuTWdQU0JoY21jeE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1lYSm5NU0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUZSNWNHVkZjbkp2Y2lnblhGd25iM0IwYVc5dWMxeGNKeUJ0ZFhOMElHSmxJR0Z1SUc5aWFtVmpkQzRuS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0dGeVp6QWdhVzV6ZEdGdVkyVnZaaUJWYVc1ME9FRnljbUY1S1NCN1hHNGdJQ0FnSUNCbWFXeGxVR0YwYUU5eVZXbHVkRGhCY25KaGVTQTlJR0Z5WnpBN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHRnlaekVnUFQwOUlDZHZZbXBsWTNRbklDWW1JR0Z5WnpFZ0lUMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdiM0IwYVc5dWN5QTlJR0Z5WnpFN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCaGNtY3hJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5a2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnVkhsd1pVVnljbTl5S0NkY1hDZHZjSFJwYjI1elhGd25JRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBMaWNwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBnWld4elpTQnBaaUFvWEc0Z0lDQWdJQ0FnSUdGeVp6QWdhVzV6ZEdGdVkyVnZaaUJCY25KaGVVSjFabVpsY2lCOGZGeHVJQ0FnSUNBZ0lDQW9kSGx3Wlc5bUlGTm9ZWEpsWkVGeWNtRjVRblZtWm1WeUlDRTlQU0FuZFc1a1pXWnBibVZrSnlBbUppQmhjbWN3SUdsdWMzUmhibU5sYjJZZ1UyaGhjbVZrUVhKeVlYbENkV1ptWlhJcEtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCaWRXWm1aWElnUFNCaGNtY3dPMXh1SUNBZ0lDQWdiR1YwSUdKNWRHVlBabVp6WlhRZ1BTQXdPMXh1SUNBZ0lDQWdiR1YwSUdKNWRHVk1aVzVuZEdnZ1BTQmhjbWN3TG1KNWRHVk1aVzVuZEdnN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHRnlaekVnUFQwOUlDZHZZbXBsWTNRbklDWW1JR0Z5WnpFZ0lUMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdiM0IwYVc5dWN5QTlJR0Z5WnpFN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCaGNtY3hJRDA5UFNBbmJuVnRZbVZ5SnlrZ2UxeHVJQ0FnSUNBZ0lDQmllWFJsVDJabWMyVjBJRDBnWVhKbk1UdGNiaUFnSUNBZ0lDQWdhV1lnS0NGT2RXMWlaWEl1YVhOVFlXWmxTVzUwWldkbGNpaGllWFJsVDJabWMyVjBLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QlNZVzVuWlVWeWNtOXlLQ2RjWENkaWVYUmxUMlptYzJWMFhGd25JRzExYzNRZ1ltVWdZVzRnYVc1MFpXZGxjaTRuS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnBaaUFvWW5sMFpVOW1abk5sZENBOElEQWdmSHdnWW5sMFpVOW1abk5sZENBK1BTQmlkV1ptWlhJdVlubDBaVXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCU1lXNW5aVVZ5Y205eUtHQW5ZbmwwWlU5bVpuTmxkQ2NnYVhNZ2IzVjBJRzltSUhKaGJtZGxJRnN3TENBa2UySjFabVpsY2k1aWVYUmxUR1Z1WjNSb2ZTa3VZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1lubDBaVXhsYm1kMGFDQTlJR0Z5WnpBdVlubDBaVXhsYm1kMGFDQXRJR0o1ZEdWUFptWnpaWFE3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ1lYSm5NaUE5UFQwZ0oyNTFiV0psY2ljcElIdGNiaUFnSUNBZ0lDQWdJQ0JpZVhSbFRHVnVaM1JvSUQwZ1lYSm5NanRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9JVTUxYldKbGNpNXBjMU5oWm1WSmJuUmxaMlZ5S0dKNWRHVk1aVzVuZEdncEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1VtRnVaMlZGY25KdmNpZ25YRnduWW5sMFpVeGxibWQwYUZ4Y0p5QnRkWE4wSUdKbElHRnVJR2x1ZEdWblpYSXVKeWs3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoaWVYUmxUR1Z1WjNSb0lEdzlJREFnZkh3Z1lubDBaVTltWm5ObGRDQXJJR0o1ZEdWTVpXNW5kR2dnUGlCaWRXWm1aWEl1WW5sMFpVeGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUZKaGJtZGxSWEp5YjNJb1lDZGllWFJsVEdWdVozUm9KeUJwY3lCdmRYUWdiMllnY21GdVoyVWdLREFzSUNSN1luVm1abVZ5TG1KNWRHVk1aVzVuZEdnZ0xTQmllWFJsVDJabWMyVjBmVjB1WUNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ1lYSm5NeUE5UFQwZ0oyOWlhbVZqZENjZ0ppWWdZWEpuTXlBaFBUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYjNCMGFXOXVjeUE5SUdGeVp6TTdYRzRnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnWVhKbk15QWhQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCVWVYQmxSWEp5YjNJb0oxeGNKMjl3ZEdsdmJuTmNYQ2NnYlhWemRDQmlaU0JoYmlCdlltcGxZM1F1SnlrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJoY21jeUlDRTlQU0FuZFc1a1pXWnBibVZrSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvSjF4Y0oySjVkR1ZNWlc1bmRHaGNYQ2NnYlhWemRDQmlaU0JoSUc1MWJXSmxjaTRuS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1lYSm5NU0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUZSNWNHVkZjbkp2Y2lnblhGd25iM0IwYVc5dWMxeGNKeUJ0ZFhOMElHSmxJR0Z1SUc5aWFtVmpkQzRuS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdacGJHVlFZWFJvVDNKVmFXNTBPRUZ5Y21GNUlEMGdibVYzSUZWcGJuUTRRWEp5WVhrb1luVm1abVZ5TENCaWVYUmxUMlptYzJWMExDQmllWFJsVEdWdVozUm9LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ25WVzVsZUhCbFkzUmxaQ0JoY21kMWJXVnVkRnN3WFRvZ2JYVnpkQ0JpWlNCY1hDZHdZWFJvWEZ3bklHOXlJRnhjSjJKMVptWmxjbHhjSnk0bktUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QnlaWE52YkhabElHSmhZMnRsYm1Rc0lIVndaR0YwWlNCelpYTnphVzl1SUc5d2RHbHZibk1nZDJsMGFDQjJZV3hwWkdGMFpXUWdSVkJ6TENCaGJtUWdZM0psWVhSbElITmxjM05wYjI0Z2FHRnVaR3hsY2x4dUlDQWdJR052Ym5OMElGdGlZV05yWlc1a0xDQnZjSFJwYjI1elYybDBhRlpoYkdsa1lYUmxaRVZRYzEwZ1BTQmhkMkZwZENCeVpYTnZiSFpsUW1GamEyVnVaRUZ1WkVWNFpXTjFkR2x2YmxCeWIzWnBaR1Z5Y3lodmNIUnBiMjV6S1R0Y2JpQWdJQ0JqYjI1emRDQm9ZVzVrYkdWeUlEMGdZWGRoYVhRZ1ltRmphMlZ1WkM1amNtVmhkR1ZKYm1abGNtVnVZMlZUWlhOemFXOXVTR0Z1Wkd4bGNpaG1hV3hsVUdGMGFFOXlWV2x1ZERoQmNuSmhlU3dnYjNCMGFXOXVjMWRwZEdoV1lXeHBaR0YwWldSRlVITXBPMXh1SUNBZ0lGUlNRVU5GWDBaVlRrTmZSVTVFS0NrN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCSmJtWmxjbVZ1WTJWVFpYTnphVzl1S0doaGJtUnNaWElwTzF4dUlDQjlYRzVjYmlBZ2MzUmhjblJRY205bWFXeHBibWNvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1b1lXNWtiR1Z5TG5OMFlYSjBVSEp2Wm1sc2FXNW5LQ2s3WEc0Z0lIMWNiaUFnWlc1a1VISnZabWxzYVc1bktDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVhR0Z1Wkd4bGNpNWxibVJRY205bWFXeHBibWNvS1R0Y2JpQWdmVnh1WEc0Z0lHZGxkQ0JwYm5CMWRFNWhiV1Z6S0NrNklISmxZV1J2Ym14NUlITjBjbWx1WjF0ZElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NW9ZVzVrYkdWeUxtbHVjSFYwVG1GdFpYTTdYRzRnSUgxY2JpQWdaMlYwSUc5MWRIQjFkRTVoYldWektDazZJSEpsWVdSdmJteDVJSE4wY21sdVoxdGRJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVvWVc1a2JHVnlMbTkxZEhCMWRFNWhiV1Z6TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCb1lXNWtiR1Z5T2lCSmJtWmxjbVZ1WTJWVFpYTnphVzl1U0dGdVpHeGxjanRjYm4xY2JpSXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJSHRKYm1abGNtVnVZMlZUWlhOemFXOXVJR0Z6SUVsdVptVnlaVzVqWlZObGMzTnBiMjVKYlhCc2ZTQm1jbTl0SUNjdUwybHVabVZ5Wlc1alpTMXpaWE56YVc5dUxXbHRjR3d1YW5Nbk8xeHVhVzF3YjNKMElIdFBibTU0VFc5a1pXeFBjSFJwYjI1emZTQm1jbTl0SUNjdUwyOXVibmd0Ylc5a1pXd3Vhbk1uTzF4dWFXMXdiM0owSUh0UGJtNTRWbUZzZFdVc0lFOXVibmhXWVd4MVpVUmhkR0ZNYjJOaGRHbHZibjBnWm5KdmJTQW5MaTl2Ym01NExYWmhiSFZsTG1wekp6dGNibHh1THlvZ1pYTnNhVzUwTFdScGMyRmliR1VnUUhSNWNHVnpZM0pwY0hRdFpYTnNhVzUwTDI1dkxYSmxaR1ZqYkdGeVpTQXFMMXh1WEc1bGVIQnZjblFnWkdWamJHRnlaU0J1WVcxbGMzQmhZMlVnU1c1bVpYSmxibU5sVTJWemMybHZiaUI3WEc0Z0lDOHZJQ055WldkcGIyNGdhVzV3ZFhRdmIzVjBjSFYwSUhSNWNHVnpYRzVjYmlBZ2RIbHdaU0JQYm01NFZtRnNkV1ZOWVhCVWVYQmxJRDBnZTNKbFlXUnZibXg1SUZ0dVlXMWxPaUJ6ZEhKcGJtZGRPaUJQYm01NFZtRnNkV1Y5TzF4dUlDQjBlWEJsSUU1MWJHeGhZbXhsVDI1dWVGWmhiSFZsVFdGd1ZIbHdaU0E5SUh0eVpXRmtiMjVzZVNCYmJtRnRaVG9nYzNSeWFXNW5YVG9nVDI1dWVGWmhiSFZsSUh3Z2JuVnNiSDA3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUVnWm1WbFpITWdLRzF2WkdWc0lHbHVjSFYwY3lrZ2FYTWdZVzRnYjJKcVpXTjBJSFJvWVhRZ2RYTmxjeUJwYm5CMWRDQnVZVzFsY3lCaGN5QnJaWGx6SUdGdVpDQlBibTU0Vm1Gc2RXVWdZWE1nWTI5eWNtVnpjRzl1WkdsdVp5QjJZV3gxWlhNdVhHNGdJQ0FxTDF4dUlDQjBlWEJsSUVabFpXUnpWSGx3WlNBOUlFOXVibmhXWVd4MVpVMWhjRlI1Y0dVN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVFZ1ptVjBZMmhsY3lBb2JXOWtaV3dnYjNWMGNIVjBjeWtnWTI5MWJHUWdZbVVnYjI1bElHOW1JSFJvWlNCbWIyeHNiM2RwYm1jNlhHNGdJQ0FxWEc0Z0lDQXFJQzBnVDIxcGRIUmxaQzRnVlhObElHMXZaR1ZzSjNNZ2IzVjBjSFYwSUc1aGJXVnpJR1JsWm1sdWFYUnBiMjR1WEc0Z0lDQXFJQzBnUVc0Z1lYSnlZWGtnYjJZZ2MzUnlhVzVuSUdsdVpHbGpZWFJwYm1jZ2RHaGxJRzkxZEhCMWRDQnVZVzFsY3k1Y2JpQWdJQ29nTFNCQmJpQnZZbXBsWTNRZ2RHaGhkQ0IxYzJVZ2IzVjBjSFYwSUc1aGJXVnpJR0Z6SUd0bGVYTWdZVzVrSUU5dWJuaFdZV3gxWlNCdmNpQnVkV3hzSUdGeklHTnZjbkpsYzNCdmJtUnBibWNnZG1Gc2RXVnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNtVnRZWEpyWEc0Z0lDQXFJR1JwWm1abGNtVnVkQ0JtY205dElHbHVjSFYwSUdGeVozVnRaVzUwTENCcGJpQnZkWFJ3ZFhRc0lFOXVibmhXWVd4MVpTQnBjeUJ2Y0hScGIyNWhiQzRnU1dZZ1lXNGdUMjV1ZUZaaGJIVmxJR2x6SUhCeVpYTmxiblFnYVhRZ2QybHNiQ0JpWlZ4dUlDQWdLaUIxYzJWa0lHRnpJR0VnY0hKbExXRnNiRzlqWVhSbFpDQjJZV3gxWlNCaWVTQjBhR1VnYVc1bVpYSmxibU5sSUdWdVoybHVaVHNnYVdZZ2IyMXBkSFJsWkN3Z2FXNW1aWEpsYm1ObElHVnVaMmx1WlNCM2FXeHNJR0ZzYkc5allYUmxJR0oxWm1abGNseHVJQ0FnS2lCcGJuUmxjbTVoYkd4NUxseHVJQ0FnS2k5Y2JpQWdkSGx3WlNCR1pYUmphR1Z6Vkhsd1pTQTlJSEpsWVdSdmJteDVJSE4wY21sdVoxdGRmRTUxYkd4aFlteGxUMjV1ZUZaaGJIVmxUV0Z3Vkhsd1pUdGNibHh1SUNBdktpcGNiaUFnSUNvZ1FTQnBibVpsY21WdVkybHVaeUJ5WlhSMWNtNGdkSGx3WlNCcGN5QmhiaUJ2WW1wbFkzUWdkR2hoZENCMWMyVnpJRzkxZEhCMWRDQnVZVzFsY3lCaGN5QnJaWGx6SUdGdVpDQlBibTU0Vm1Gc2RXVWdZWE1nWTI5eWNtVnpjRzl1WkdsdVp5QjJZV3gxWlhNdVhHNGdJQ0FxTDF4dUlDQjBlWEJsSUZKbGRIVnlibFI1Y0dVZ1BTQlBibTU0Vm1Gc2RXVk5ZWEJVZVhCbE8xeHVYRzRnSUM4dklDTmxibVJ5WldkcGIyNWNibHh1SUNBdkx5QWpjbVZuYVc5dUlITmxjM05wYjI0Z2IzQjBhVzl1YzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJCSUhObGRDQnZaaUJqYjI1bWFXZDFjbUYwYVc5dWN5Qm1iM0lnYzJWemMybHZiaUJpWldoaGRtbHZjaTVjYmlBZ0lDb3ZYRzRnSUdWNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVTJWemMybHZiazl3ZEdsdmJuTWdaWGgwWlc1a2N5QlBibTU0VFc5a1pXeFBjSFJwYjI1eklIdGNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkJiaUJoY25KaGVTQnZaaUJsZUdWamRYUnBiMjRnY0hKdmRtbGtaWElnYjNCMGFXOXVjeTVjYmlBZ0lDQWdLbHh1SUNBZ0lDQXFJRUZ1SUdWNFpXTjFkR2x2YmlCd2NtOTJhV1JsY2lCdmNIUnBiMjRnWTJGdUlHSmxJR0VnYzNSeWFXNW5JR2x1WkdsallYUnBibWNnZEdobElHNWhiV1VnYjJZZ2RHaGxJR1Y0WldOMWRHbHZiaUJ3Y205MmFXUmxjaXhjYmlBZ0lDQWdLaUJ2Y2lCaGJpQnZZbXBsWTNRZ2IyWWdZMjl5Y21WemNHOXVaR2x1WnlCMGVYQmxMbHh1SUNBZ0lDQXFMMXh1SUNBZ0lHVjRaV04xZEdsdmJsQnliM1pwWkdWeWN6ODZJSEpsWVdSdmJteDVJRVY0WldOMWRHbHZibEJ5YjNacFpHVnlRMjl1Wm1sblcxMDdYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJVYUdVZ2FXNTBjbUVnVDFBZ2RHaHlaV0ZrY3lCdWRXMWlaWEl1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJVYUdseklITmxkSFJwYm1jZ2FYTWdZWFpoYVd4aFlteGxJRzl1YkhrZ2FXNGdUMDVPV0ZKMWJuUnBiV1VnS0U1dlpHVXVhbk1nWW1sdVpHbHVaeUJoYm1RZ2NtVmhZM1F0Ym1GMGFYWmxLUzVjYmlBZ0lDQWdLaTljYmlBZ0lDQnBiblJ5WVU5d1RuVnRWR2h5WldGa2N6ODZJRzUxYldKbGNqdGNibHh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRlJvWlNCcGJuUmxjaUJQVUNCMGFISmxZV1J6SUc1MWJXSmxjaTVjYmlBZ0lDQWdLbHh1SUNBZ0lDQXFJRlJvYVhNZ2MyVjBkR2x1WnlCcGN5QmhkbUZwYkdGaWJHVWdiMjVzZVNCcGJpQlBUazVZVW5WdWRHbHRaU0FvVG05a1pTNXFjeUJpYVc1a2FXNW5JR0Z1WkNCeVpXRmpkQzF1WVhScGRtVXBMbHh1SUNBZ0lDQXFMMXh1SUNBZ0lHbHVkR1Z5VDNCT2RXMVVhSEpsWVdSelB6b2diblZ0WW1WeU8xeHVYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dWR2hsSUdaeVpXVWdaR2x0Wlc1emFXOXVJRzkyWlhKeWFXUmxMbHh1SUNBZ0lDQXFYRzRnSUNBZ0lDb2dWR2hwY3lCelpYUjBhVzVuSUdseklHRjJZV2xzWVdKc1pTQnZibXg1SUdsdUlFOU9UbGhTZFc1MGFXMWxJQ2hPYjJSbExtcHpJR0pwYm1ScGJtY2dZVzVrSUhKbFlXTjBMVzVoZEdsMlpTa2diM0lnVjJWaVFYTnpaVzFpYkhrZ1ltRmphMlZ1WkZ4dUlDQWdJQ0FxTDF4dUlDQWdJR1p5WldWRWFXMWxibk5wYjI1UGRtVnljbWxrWlhNL09pQjdjbVZoWkc5dWJIa2dXMlJwYldWdWMybHZiazVoYldVNklITjBjbWx1WjEwNklHNTFiV0psY24wN1hHNWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQlVhR1VnYjNCMGFXMXBlbUYwYVc5dUlHeGxkbVZzTGx4dUlDQWdJQ0FxWEc0Z0lDQWdJQ29nVkdocGN5QnpaWFIwYVc1bklHbHpJR0YyWVdsc1lXSnNaU0J2Ym14NUlHbHVJRTlPVGxoU2RXNTBhVzFsSUNoT2IyUmxMbXB6SUdKcGJtUnBibWNnWVc1a0lISmxZV04wTFc1aGRHbDJaU2tnYjNJZ1YyVmlRWE56WlcxaWJIa2dZbUZqYTJWdVpGeHVJQ0FnSUNBcUwxeHVJQ0FnSUdkeVlYQm9UM0IwYVcxcGVtRjBhVzl1VEdWMlpXdy9PaUFuWkdsellXSnNaV1FuZkNkaVlYTnBZeWQ4SjJWNGRHVnVaR1ZrSjN3bllXeHNKenRjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUZkb1pYUm9aWElnWlc1aFlteGxJRU5RVlNCdFpXMXZjbmtnWVhKbGJtRXVYRzRnSUNBZ0lDcGNiaUFnSUNBZ0tpQlVhR2x6SUhObGRIUnBibWNnYVhNZ1lYWmhhV3hoWW14bElHOXViSGtnYVc0Z1QwNU9XRkoxYm5ScGJXVWdLRTV2WkdVdWFuTWdZbWx1WkdsdVp5QmhibVFnY21WaFkzUXRibUYwYVhabEtTQnZjaUJYWldKQmMzTmxiV0pzZVNCaVlXTnJaVzVrWEc0Z0lDQWdJQ292WEc0Z0lDQWdaVzVoWW14bFEzQjFUV1Z0UVhKbGJtRS9PaUJpYjI5c1pXRnVPMXh1WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nVjJobGRHaGxjaUJsYm1GaWJHVWdiV1Z0YjNKNUlIQmhkSFJsY200dVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCVWFHbHpJSE5sZEhScGJtY2dhWE1nWVhaaGFXeGhZbXhsSUc5dWJIa2dhVzRnVDA1T1dGSjFiblJwYldVZ0tFNXZaR1V1YW5NZ1ltbHVaR2x1WnlCaGJtUWdjbVZoWTNRdGJtRjBhWFpsS1NCdmNpQlhaV0pCYzNObGJXSnNlU0JpWVdOclpXNWtYRzRnSUNBZ0lDb3ZYRzRnSUNBZ1pXNWhZbXhsVFdWdFVHRjBkR1Z5Ymo4NklHSnZiMnhsWVc0N1hHNWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkZlR1ZqZFhScGIyNGdiVzlrWlM1Y2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUZSb2FYTWdjMlYwZEdsdVp5QnBjeUJoZG1GcGJHRmliR1VnYjI1c2VTQnBiaUJQVGs1WVVuVnVkR2x0WlNBb1RtOWtaUzVxY3lCaWFXNWthVzVuSUdGdVpDQnlaV0ZqZEMxdVlYUnBkbVVwSUc5eUlGZGxZa0Z6YzJWdFlteDVJR0poWTJ0bGJtUmNiaUFnSUNBZ0tpOWNiaUFnSUNCbGVHVmpkWFJwYjI1TmIyUmxQem9nSjNObGNYVmxiblJwWVd3bmZDZHdZWEpoYkd4bGJDYzdYRzVjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJQY0hScGJXbDZaV1FnYlc5a1pXd2dabWxzWlNCd1lYUm9MbHh1SUNBZ0lDQXFYRzRnSUNBZ0lDb2dTV1lnZEdocGN5QnpaWFIwYVc1bklHbHpJSE53WldOcFptbGxaQ3dnZEdobElHOXdkR2x0YVhwbFpDQnRiMlJsYkNCM2FXeHNJR0psSUdSMWJYQmxaQzRnU1c0Z1luSnZkM05sY2l3Z1lTQmliRzlpSUhkcGJHd2dZbVVnWTNKbFlYUmxaRnh1SUNBZ0lDQXFJSGRwZEdnZ1lTQndiM0F0ZFhBZ2QybHVaRzkzTGx4dUlDQWdJQ0FxTDF4dUlDQWdJRzl3ZEdsdGFYcGxaRTF2WkdWc1JtbHNaVkJoZEdnL09pQnpkSEpwYm1jN1hHNWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQlhhR1YwYUdWeUlHVnVZV0pzWlNCd2NtOW1hV3hwYm1jdVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCVWFHbHpJSE5sZEhScGJtY2dhWE1nWVNCd2JHRmpaV2h2YkdSbGNpQm1iM0lnWVNCbWRYUjFjbVVnZFhObExseHVJQ0FnSUNBcUwxeHVJQ0FnSUdWdVlXSnNaVkJ5YjJacGJHbHVaejg2SUdKdmIyeGxZVzQ3WEc1Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCR2FXeGxJSEJ5WldacGVDQm1iM0lnY0hKdlptbHNhVzVuTGx4dUlDQWdJQ0FxWEc0Z0lDQWdJQ29nVkdocGN5QnpaWFIwYVc1bklHbHpJR0VnY0d4aFkyVm9iMnhrWlhJZ1ptOXlJR0VnWm5WMGRYSmxJSFZ6WlM1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0J3Y205bWFXeGxSbWxzWlZCeVpXWnBlRDg2SUhOMGNtbHVaenRjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUV4dlp5QkpSQzVjYmlBZ0lDQWdLbHh1SUNBZ0lDQXFJRlJvYVhNZ2MyVjBkR2x1WnlCcGN5QmhkbUZwYkdGaWJHVWdiMjVzZVNCcGJpQlBUazVZVW5WdWRHbHRaU0FvVG05a1pTNXFjeUJpYVc1a2FXNW5JR0Z1WkNCeVpXRmpkQzF1WVhScGRtVXBJRzl5SUZkbFlrRnpjMlZ0WW14NUlHSmhZMnRsYm1SY2JpQWdJQ0FnS2k5Y2JpQWdJQ0JzYjJkSlpEODZJSE4wY21sdVp6dGNibHh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRXh2WnlCelpYWmxjbWwwZVNCc1pYWmxiQzRnVTJWbFhHNGdJQ0FnSUNvZ2FIUjBjSE02THk5bmFYUm9kV0l1WTI5dEwyMXBZM0p2YzI5bWRDOXZibTU0Y25WdWRHbHRaUzlpYkc5aUwyMWhhVzR2YVc1amJIVmtaUzl2Ym01NGNuVnVkR2x0WlM5amIzSmxMMk52YlcxdmJpOXNiMmRuYVc1bkwzTmxkbVZ5YVhSNUxtaGNiaUFnSUNBZ0tseHVJQ0FnSUNBcUlGUm9hWE1nYzJWMGRHbHVaeUJwY3lCaGRtRnBiR0ZpYkdVZ2IyNXNlU0JwYmlCUFRrNVlVblZ1ZEdsdFpTQW9UbTlrWlM1cWN5QmlhVzVrYVc1bklHRnVaQ0J5WldGamRDMXVZWFJwZG1VcElHOXlJRmRsWWtGemMyVnRZbXg1SUdKaFkydGxibVJjYmlBZ0lDQWdLaTljYmlBZ0lDQnNiMmRUWlhabGNtbDBlVXhsZG1Wc1B6b2dNSHd4ZkRKOE0zdzBPMXh1WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nVEc5bklIWmxjbUp2YzJsMGVTQnNaWFpsYkM1Y2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUZSb2FYTWdjMlYwZEdsdVp5QnBjeUJoZG1GcGJHRmliR1VnYjI1c2VTQnBiaUJYWldKQmMzTmxiV0pzZVNCaVlXTnJaVzVrTGlCWGFXeHNJSE4xY0hCdmNuUWdUbTlrWlM1cWN5QmlhVzVrYVc1bklHRnVaQ0J5WldGamRDMXVZWFJwZG1VZ2JHRjBaWEpjYmlBZ0lDQWdLaTljYmlBZ0lDQnNiMmRXWlhKaWIzTnBkSGxNWlhabGJEODZJRzUxYldKbGNqdGNibHh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRk53WldOcFpua2djM1J5YVc1bklHRnpJR0VnY0hKbFptVnljbVZrSUdSaGRHRWdiRzlqWVhScGIyNGdabTl5SUdGc2JDQnZkWFJ3ZFhSekxDQnZjaUJoYmlCdlltcGxZM1FnZEdoaGRDQjFjMlVnYjNWMGNIVjBJRzVoYldWeklHRnpJR3RsZVhNZ1lXNWtJR0ZjYmlBZ0lDQWdLaUJ3Y21WbVpYSnlaV1FnWkdGMFlTQnNiMk5oZEdsdmJpQmhjeUJqYjNKeVpYTndiMjVrYVc1bklIWmhiSFZsY3k1Y2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUZSb2FYTWdjMlYwZEdsdVp5QnBjeUJoZG1GcGJHRmliR1VnYjI1c2VTQnBiaUJQVGs1WVVuVnVkR2x0WlNCWFpXSWdabTl5SUZkbFlrZE1JR0Z1WkNCWFpXSkhVRlVnUlZBdVhHNGdJQ0FnSUNvdlhHNGdJQ0FnY0hKbFptVnljbVZrVDNWMGNIVjBURzlqWVhScGIyNC9PaUJQYm01NFZtRnNkV1ZFWVhSaFRHOWpZWFJwYjI1OGUzSmxZV1J2Ym14NUlGdHZkWFJ3ZFhST1lXMWxPaUJ6ZEhKcGJtZGRPaUJQYm01NFZtRnNkV1ZFWVhSaFRHOWpZWFJwYjI1OU8xeHVYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dWMmhsZEdobGNpQmxibUZpYkdVZ1ozSmhjR2dnWTJGd2RIVnlaUzVjYmlBZ0lDQWdLaUJVYUdseklITmxkSFJwYm1jZ2FYTWdZWFpoYVd4aFlteGxJRzl1YkhrZ2FXNGdUMDVPV0ZKMWJuUnBiV1VnVjJWaUlHWnZjaUJYWldKSFVGVWdSVkF1WEc0Z0lDQWdJQ292WEc0Z0lDQWdaVzVoWW14bFIzSmhjR2hEWVhCMGRYSmxQem9nWW05dmJHVmhianRjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUZOMGIzSmxJR052Ym1acFozVnlZWFJwYjI1eklHWnZjaUJoSUhObGMzTnBiMjR1SUZObFpWeHVJQ0FnSUNBcUlHaDBkSEJ6T2k4dloybDBhSFZpTG1OdmJTOXRhV055YjNOdlpuUXZiMjV1ZUhKMWJuUnBiV1V2WW14dllpOXRZV2x1TDJsdVkyeDFaR1V2YjI1dWVISjFiblJwYldVdlkyOXlaUzl6WlhOemFXOXVMMXh1SUNBZ0lDQXFJRzl1Ym5oeWRXNTBhVzFsWDNObGMzTnBiMjVmYjNCMGFXOXVjMTlqYjI1bWFXZGZhMlY1Y3k1b1hHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCVWFHbHpJSE5sZEhScGJtY2dhWE1nWVhaaGFXeGhZbXhsSUc5dWJIa2dhVzRnVjJWaVFYTnpaVzFpYkhrZ1ltRmphMlZ1WkM0Z1YybHNiQ0J6ZFhCd2IzSjBJRTV2WkdVdWFuTWdZbWx1WkdsdVp5QmhibVFnY21WaFkzUXRibUYwYVhabElHeGhkR1Z5WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJBWlhoaGJYQnNaVnh1SUNBZ0lDQXFJR0JnWUdwelhHNGdJQ0FnSUNvZ1pYaDBjbUU2SUh0Y2JpQWdJQ0FnS2lBZ0lITmxjM05wYjI0NklIdGNiaUFnSUNBZ0tpQWdJQ0FnYzJWMFgyUmxibTl5YldGc1gyRnpYM3BsY204NklGd2lNVndpTEZ4dUlDQWdJQ0FxSUNBZ0lDQmthWE5oWW14bFgzQnlaWEJoWTJ0cGJtYzZJRndpTVZ3aVhHNGdJQ0FnSUNvZ0lDQjlMRnh1SUNBZ0lDQXFJQ0FnYjNCMGFXMXBlbUYwYVc5dU9pQjdYRzRnSUNBZ0lDb2dJQ0FnSUdWdVlXSnNaVjluWld4MVgyRndjSEp2ZUdsdFlYUnBiMjQ2SUZ3aU1Wd2lYRzRnSUNBZ0lDb2dJQ0I5WEc0Z0lDQWdJQ29nZlZ4dUlDQWdJQ0FxSUdCZ1lGeHVJQ0FnSUNBcUwxeHVJQ0FnSUdWNGRISmhQem9nVW1WamIzSmtQSE4wY21sdVp5d2dkVzVyYm05M2JqNDdYRzRnSUgxY2JseHVJQ0F2THlBamNtVm5hVzl1SUdWNFpXTjFkR2x2YmlCd2NtOTJhV1JsY25OY2JseHVJQ0F2THlCRGRYSnlaVzUwYkhrc0lIZGxJR2hoZG1VZ2RHaGxJR1p2Ykd4dmQybHVaeUJpWVdOclpXNWtjeUIwYnlCemRYQndiM0owSUdWNFpXTjFkR2x2YmlCd2NtOTJhV1JsY25NNlhHNGdJQzh2SUVKaFkydGxibVFnVG05a1pTNXFjeUJpYVc1a2FXNW5PaUJ6ZFhCd2IzSjBjeUFuWTNCMUp5d2dKMlJ0YkNjZ0tIZHBiak15S1N3Z0oyTnZjbVZ0YkNjZ0tHMWhZMDlUS1NCaGJtUWdKMk4xWkdFbklDaHNhVzUxZUNrdVhHNGdJQzh2SUVKaFkydGxibVFnVjJWaVFYTnpaVzFpYkhrNklITjFjSEJ2Y25SeklDZGpjSFVuTENBbmQyRnpiU2NzSUNkM1pXSm5jSFVuSUdGdVpDQW5kMlZpYm00bkxseHVJQ0F2THlCQ1lXTnJaVzVrSUU5T1RsZ3Vhbk02SUhOMWNIQnZjblJ6SUNkM1pXSm5iQ2N1WEc0Z0lDOHZJRUpoWTJ0bGJtUWdVbVZoWTNRZ1RtRjBhWFpsT2lCemRYQndiM0owY3lBblkzQjFKeXdnSjNodWJuQmhZMnNuTENBblkyOXlaVzFzSnlBb2FVOVRLU3dnSjI1dVlYQnBKeUFvUVc1a2NtOXBaQ2t1WEc0Z0lHbHVkR1Z5Wm1GalpTQkZlR1ZqZFhScGIyNVFjbTkyYVdSbGNrOXdkR2x2YmsxaGNDQjdYRzRnSUNBZ1kyOXlaVzFzT2lCRGIzSmxUVXhGZUdWamRYUnBiMjVRY205MmFXUmxjazl3ZEdsdmJqdGNiaUFnSUNCamNIVTZJRU53ZFVWNFpXTjFkR2x2YmxCeWIzWnBaR1Z5VDNCMGFXOXVPMXh1SUNBZ0lHTjFaR0U2SUVOMVpHRkZlR1ZqZFhScGIyNVFjbTkyYVdSbGNrOXdkR2x2Ymp0Y2JpQWdJQ0JrYld3NklFUnRiRVY0WldOMWRHbHZibEJ5YjNacFpHVnlUM0IwYVc5dU8xeHVJQ0FnSUc1dVlYQnBPaUJPYm1Gd2FVVjRaV04xZEdsdmJsQnliM1pwWkdWeVQzQjBhVzl1TzF4dUlDQWdJSFJsYm5OdmNuSjBPaUJVWlc1emIzSlNkRVY0WldOMWRHbHZibEJ5YjNacFpHVnlUM0IwYVc5dU8xeHVJQ0FnSUhkaGMyMDZJRmRsWWtGemMyVnRZbXg1UlhobFkzVjBhVzl1VUhKdmRtbGtaWEpQY0hScGIyNDdYRzRnSUNBZ2QyVmlaMnc2SUZkbFlrZE1SWGhsWTNWMGFXOXVVSEp2ZG1sa1pYSlBjSFJwYjI0N1hHNGdJQ0FnZDJWaVozQjFPaUJYWldKSGNIVkZlR1ZqZFhScGIyNVFjbTkyYVdSbGNrOXdkR2x2Ymp0Y2JpQWdJQ0IzWldKdWJqb2dWMlZpVGs1RmVHVmpkWFJwYjI1UWNtOTJhV1JsY2s5d2RHbHZianRjYmlBZ0lDQjRibTV3WVdOck9pQllibTV3WVdOclJYaGxZM1YwYVc5dVVISnZkbWxrWlhKUGNIUnBiMjQ3WEc0Z0lIMWNibHh1SUNCMGVYQmxJRVY0WldOMWRHbHZibEJ5YjNacFpHVnlUbUZ0WlNBOUlHdGxlVzltSUVWNFpXTjFkR2x2YmxCeWIzWnBaR1Z5VDNCMGFXOXVUV0Z3TzF4dUlDQjBlWEJsSUVWNFpXTjFkR2x2YmxCeWIzWnBaR1Z5UTI5dVptbG5JRDFjYmlBZ0lDQWdJRVY0WldOMWRHbHZibEJ5YjNacFpHVnlUM0IwYVc5dVRXRndXMFY0WldOMWRHbHZibEJ5YjNacFpHVnlUbUZ0WlYxOFJYaGxZM1YwYVc5dVVISnZkbWxrWlhKUGNIUnBiMjU4UlhobFkzVjBhVzl1VUhKdmRtbGtaWEpPWVcxbGZITjBjbWx1Wnp0Y2JseHVJQ0JsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRVY0WldOMWRHbHZibEJ5YjNacFpHVnlUM0IwYVc5dUlIdGNiaUFnSUNCeVpXRmtiMjVzZVNCdVlXMWxPaUJ6ZEhKcGJtYzdYRzRnSUgxY2JpQWdaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkRjSFZGZUdWamRYUnBiMjVRY205MmFXUmxjazl3ZEdsdmJpQmxlSFJsYm1SeklFVjRaV04xZEdsdmJsQnliM1pwWkdWeVQzQjBhVzl1SUh0Y2JpQWdJQ0J5WldGa2IyNXNlU0J1WVcxbE9pQW5ZM0IxSnp0Y2JpQWdJQ0IxYzJWQmNtVnVZVDg2SUdKdmIyeGxZVzQ3WEc0Z0lIMWNiaUFnWlhod2IzSjBJR2x1ZEdWeVptRmpaU0JEZFdSaFJYaGxZM1YwYVc5dVVISnZkbWxrWlhKUGNIUnBiMjRnWlhoMFpXNWtjeUJGZUdWamRYUnBiMjVRY205MmFXUmxjazl3ZEdsdmJpQjdYRzRnSUNBZ2NtVmhaRzl1YkhrZ2JtRnRaVG9nSjJOMVpHRW5PMXh1SUNBZ0lHUmxkbWxqWlVsa1B6b2diblZ0WW1WeU8xeHVJQ0I5WEc0Z0lHVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1JHMXNSWGhsWTNWMGFXOXVVSEp2ZG1sa1pYSlBjSFJwYjI0Z1pYaDBaVzVrY3lCRmVHVmpkWFJwYjI1UWNtOTJhV1JsY2s5d2RHbHZiaUI3WEc0Z0lDQWdjbVZoWkc5dWJIa2dibUZ0WlRvZ0oyUnRiQ2M3WEc0Z0lDQWdaR1YyYVdObFNXUS9PaUJ1ZFcxaVpYSTdYRzRnSUgxY2JpQWdaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQlVaVzV6YjNKU2RFVjRaV04xZEdsdmJsQnliM1pwWkdWeVQzQjBhVzl1SUdWNGRHVnVaSE1nUlhobFkzVjBhVzl1VUhKdmRtbGtaWEpQY0hScGIyNGdlMXh1SUNBZ0lISmxZV1J2Ym14NUlHNWhiV1U2SUNkMFpXNXpiM0p5ZENjN1hHNGdJQ0FnWkdWMmFXTmxTV1EvT2lCdWRXMWlaWEk3WEc0Z0lIMWNiaUFnWlhod2IzSjBJR2x1ZEdWeVptRmpaU0JYWldKQmMzTmxiV0pzZVVWNFpXTjFkR2x2YmxCeWIzWnBaR1Z5VDNCMGFXOXVJR1Y0ZEdWdVpITWdSWGhsWTNWMGFXOXVVSEp2ZG1sa1pYSlBjSFJwYjI0Z2UxeHVJQ0FnSUhKbFlXUnZibXg1SUc1aGJXVTZJQ2QzWVhOdEp6dGNiaUFnZlZ4dUlDQmxlSEJ2Y25RZ2FXNTBaWEptWVdObElGZGxZa2RNUlhobFkzVjBhVzl1VUhKdmRtbGtaWEpQY0hScGIyNGdaWGgwWlc1a2N5QkZlR1ZqZFhScGIyNVFjbTkyYVdSbGNrOXdkR2x2YmlCN1hHNGdJQ0FnY21WaFpHOXViSGtnYm1GdFpUb2dKM2RsWW1kc0p6dGNiaUFnSUNBdkx5QlVUMFJQT2lCaFpHUWdabXhoWjNOY2JpQWdmVnh1SUNCbGVIQnZjblFnYVc1MFpYSm1ZV05sSUZodWJuQmhZMnRGZUdWamRYUnBiMjVRY205MmFXUmxjazl3ZEdsdmJpQmxlSFJsYm1SeklFVjRaV04xZEdsdmJsQnliM1pwWkdWeVQzQjBhVzl1SUh0Y2JpQWdJQ0J5WldGa2IyNXNlU0J1WVcxbE9pQW5lRzV1Y0dGamF5YzdYRzRnSUgxY2JpQWdaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQlhaV0pIY0hWRmVHVmpkWFJwYjI1UWNtOTJhV1JsY2s5d2RHbHZiaUJsZUhSbGJtUnpJRVY0WldOMWRHbHZibEJ5YjNacFpHVnlUM0IwYVc5dUlIdGNiaUFnSUNCeVpXRmtiMjVzZVNCdVlXMWxPaUFuZDJWaVozQjFKenRjYmlBZ0lDQndjbVZtWlhKeVpXUk1ZWGx2ZFhRL09pQW5Ua05JVnlkOEowNUlWME1uTzF4dUlDQjlYRzRnSUdWNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVjJWaVRrNUZlR1ZqZFhScGIyNVFjbTkyYVdSbGNrOXdkR2x2YmlCbGVIUmxibVJ6SUVWNFpXTjFkR2x2YmxCeWIzWnBaR1Z5VDNCMGFXOXVJSHRjYmlBZ0lDQnlaV0ZrYjI1c2VTQnVZVzFsT2lBbmQyVmlibTRuTzF4dUlDQWdJR1JsZG1salpWUjVjR1UvT2lBblkzQjFKM3duWjNCMUozd25ibkIxSnp0Y2JpQWdJQ0J1ZFcxVWFISmxZV1J6UHpvZ2JuVnRZbVZ5TzF4dUlDQWdJSEJ2ZDJWeVVISmxabVZ5Wlc1alpUODZJQ2RrWldaaGRXeDBKM3duYkc5M0xYQnZkMlZ5SjN3bmFHbG5hQzF3WlhKbWIzSnRZVzVqWlNjN1hHNGdJSDFjYmlBZ1pYaHdiM0owSUdsdWRHVnlabUZqWlNCRGIzSmxUVXhGZUdWamRYUnBiMjVRY205MmFXUmxjazl3ZEdsdmJpQmxlSFJsYm1SeklFVjRaV04xZEdsdmJsQnliM1pwWkdWeVQzQjBhVzl1SUh0Y2JpQWdJQ0J5WldGa2IyNXNlU0J1WVcxbE9pQW5ZMjl5Wlcxc0p6dGNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQlVhR1VnWW1sMElHWnNZV2R6SUdadmNpQkRiM0psVFV3Z1pYaGxZM1YwYVc5dUlIQnliM1pwWkdWeUxseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1lHQmdYRzRnSUNBZ0lDb2dRMDlTUlUxTVgwWk1RVWRmVlZORlgwTlFWVjlQVGt4WklEMGdNSGd3TURGY2JpQWdJQ0FnS2lCRFQxSkZUVXhmUmt4QlIxOUZUa0ZDVEVWZlQwNWZVMVZDUjFKQlVFZ2dQU0F3ZURBd01seHVJQ0FnSUNBcUlFTlBVa1ZOVEY5R1RFRkhYMDlPVEZsZlJVNUJRa3hGWDBSRlZrbERSVjlYU1ZSSVgwRk9SU0E5SURCNE1EQTBYRzRnSUNBZ0lDb2dRMDlTUlUxTVgwWk1RVWRmVDA1TVdWOUJURXhQVjE5VFZFRlVTVU5mU1U1UVZWUmZVMGhCVUVWVElEMGdNSGd3TURoY2JpQWdJQ0FnS2lCRFQxSkZUVXhmUmt4QlIxOURVa1ZCVkVWZlRVeFFVazlIVWtGTklEMGdNSGd3TVRCY2JpQWdJQ0FnS2lCZ1lHQmNiaUFnSUNBZ0tseHVJQ0FnSUNBcUlGTmxaU0JwYm1Oc2RXUmxMMjl1Ym5oeWRXNTBhVzFsTDJOdmNtVXZjSEp2ZG1sa1pYSnpMMk52Y21WdGJDOWpiM0psYld4ZmNISnZkbWxrWlhKZlptRmpkRzl5ZVM1b0lHWnZjaUJ0YjNKbElHUmxkR0ZwYkhNdVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCVWFHbHpJR1pzWVdjZ2FYTWdZWFpoYVd4aFlteGxJRzl1YkhrZ2FXNGdUMDVPV0ZKMWJuUnBiV1VnS0U1dlpHVXVhbk1nWW1sdVpHbHVaeWt1WEc0Z0lDQWdJQ292WEc0Z0lDQWdZMjl5WlUxc1JteGhaM00vT2lCdWRXMWlaWEk3WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nVTNCbFkybG1lU0IzYUdWMGFHVnlJSFJ2SUhWelpTQkRVRlVnYjI1c2VTQnBiaUJEYjNKbFRVd2dSVkF1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJVYUdseklITmxkSFJwYm1jZ2FYTWdZWFpoYVd4aFlteGxJRzl1YkhrZ2FXNGdUMDVPV0ZKMWJuUnBiV1VnS0hKbFlXTjBMVzVoZEdsMlpTa3VYRzRnSUNBZ0lDb3ZYRzRnSUNBZ2RYTmxRMUJWVDI1c2VUODZJR0p2YjJ4bFlXNDdYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dVM0JsWTJsbWVTQjNhR1YwYUdWeUlIUnZJR1Z1WVdKc1pTQkRiM0psVFV3Z1JWQWdiMjRnYzNWaVozSmhjR2d1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJVYUdseklITmxkSFJwYm1jZ2FYTWdZWFpoYVd4aFlteGxJRzl1YkhrZ2FXNGdUMDVPV0ZKMWJuUnBiV1VnS0hKbFlXTjBMVzVoZEdsMlpTa3VYRzRnSUNBZ0lDb3ZYRzRnSUNBZ1pXNWhZbXhsVDI1VGRXSm5jbUZ3YUQ4NklHSnZiMnhsWVc0N1hHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNvZ1UzQmxZMmxtZVNCM2FHVjBhR1Z5SUhSdklHOXViSGtnWlc1aFlteGxJRU52Y21WTlRDQkZVQ0JtYjNJZ1FYQndiR1VnWkdWMmFXTmxjeUIzYVhSb0lFRk9SU0FvUVhCd2JHVWdUbVYxY21Gc0lFVnVaMmx1WlNrdVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCVWFHbHpJSE5sZEhScGJtY2dhWE1nWVhaaGFXeGhZbXhsSUc5dWJIa2dhVzRnVDA1T1dGSjFiblJwYldVZ0tISmxZV04wTFc1aGRHbDJaU2t1WEc0Z0lDQWdJQ292WEc0Z0lDQWdiMjVzZVVWdVlXSnNaVVJsZG1salpWZHBkR2hCVGtVL09pQmliMjlzWldGdU8xeHVJQ0I5WEc0Z0lHVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1RtNWhjR2xGZUdWamRYUnBiMjVRY205MmFXUmxjazl3ZEdsdmJpQmxlSFJsYm1SeklFVjRaV04xZEdsdmJsQnliM1pwWkdWeVQzQjBhVzl1SUh0Y2JpQWdJQ0J5WldGa2IyNXNlU0J1WVcxbE9pQW5ibTVoY0drbk8xeHVJQ0FnSUhWelpVWlFNVFkvT2lCaWIyOXNaV0Z1TzF4dUlDQWdJSFZ6WlU1RFNGYy9PaUJpYjI5c1pXRnVPMXh1SUNBZ0lHTndkVVJwYzJGaWJHVmtQem9nWW05dmJHVmhianRjYmlBZ0lDQmpjSFZQYm14NVB6b2dZbTl2YkdWaGJqdGNiaUFnZlZ4dUlDQXZMeUFqWlc1a2NtVm5hVzl1WEc1Y2JpQWdMeThnSTJWdVpISmxaMmx2Ymx4dVhHNGdJQzh2SUNOeVpXZHBiMjRnY25WdUlHOXdkR2x2Ym5OY2JseHVJQ0F2S2lwY2JpQWdJQ29nUVNCelpYUWdiMllnWTI5dVptbG5kWEpoZEdsdmJuTWdabTl5SUdsdVptVnlaVzVqWlNCeWRXNGdZbVZvWVhacGIzSmNiaUFnSUNvdlhHNGdJR1Y0Y0c5eWRDQnBiblJsY21aaFkyVWdVblZ1VDNCMGFXOXVjeUI3WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nVEc5bklITmxkbVZ5YVhSNUlHeGxkbVZzTGlCVFpXVmNiaUFnSUNBZ0tpQm9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZiV2xqY205emIyWjBMMjl1Ym5oeWRXNTBhVzFsTDJKc2IySXZiV0ZwYmk5cGJtTnNkV1JsTDI5dWJuaHlkVzUwYVcxbEwyTnZjbVV2WTI5dGJXOXVMMnh2WjJkcGJtY3ZjMlYyWlhKcGRIa3VhRnh1SUNBZ0lDQXFYRzRnSUNBZ0lDb2dWR2hwY3lCelpYUjBhVzVuSUdseklHRjJZV2xzWVdKc1pTQnZibXg1SUdsdUlFOU9UbGhTZFc1MGFXMWxJQ2hPYjJSbExtcHpJR0pwYm1ScGJtY2dZVzVrSUhKbFlXTjBMVzVoZEdsMlpTa2diM0lnVjJWaVFYTnpaVzFpYkhrZ1ltRmphMlZ1WkZ4dUlDQWdJQ0FxTDF4dUlDQWdJR3h2WjFObGRtVnlhWFI1VEdWMlpXdy9PaUF3ZkRGOE1ud3pmRFE3WEc1Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCTWIyY2dkbVZ5WW05emFYUjVJR3hsZG1Wc0xseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1ZHaHBjeUJ6WlhSMGFXNW5JR2x6SUdGMllXbHNZV0pzWlNCdmJteDVJR2x1SUZkbFlrRnpjMlZ0WW14NUlHSmhZMnRsYm1RdUlGZHBiR3dnYzNWd2NHOXlkQ0JPYjJSbExtcHpJR0pwYm1ScGJtY2dZVzVrSUhKbFlXTjBMVzVoZEdsMlpTQnNZWFJsY2x4dUlDQWdJQ0FxTDF4dUlDQWdJR3h2WjFabGNtSnZjMmwwZVV4bGRtVnNQem9nYm5WdFltVnlPMXh1WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nVkdWeWJXbHVZWFJsSUdGc2JDQnBibU52YlhCc1pYUmxJRTl5ZEZKMWJpQmpZV3hzY3lCaGN5QnpiMjl1SUdGeklIQnZjM05wWW14bElHbG1JSFJ5ZFdWY2JpQWdJQ0FnS2x4dUlDQWdJQ0FxSUZSb2FYTWdjMlYwZEdsdVp5QnBjeUJoZG1GcGJHRmliR1VnYjI1c2VTQnBiaUJYWldKQmMzTmxiV0pzZVNCaVlXTnJaVzVrTGlCWGFXeHNJSE4xY0hCdmNuUWdUbTlrWlM1cWN5QmlhVzVrYVc1bklHRnVaQ0J5WldGamRDMXVZWFJwZG1VZ2JHRjBaWEpjYmlBZ0lDQWdLaTljYmlBZ0lDQjBaWEp0YVc1aGRHVS9PaUJpYjI5c1pXRnVPMXh1WEc0Z0lDQWdMeW9xWEc0Z0lDQWdJQ29nUVNCMFlXY2dabTl5SUhSb1pTQlNkVzRvS1NCallXeHNjeUIxYzJsdVp5QjBhR2x6WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJVYUdseklITmxkSFJwYm1jZ2FYTWdZWFpoYVd4aFlteGxJRzl1YkhrZ2FXNGdUMDVPV0ZKMWJuUnBiV1VnS0U1dlpHVXVhbk1nWW1sdVpHbHVaeUJoYm1RZ2NtVmhZM1F0Ym1GMGFYWmxLU0J2Y2lCWFpXSkJjM05sYldKc2VTQmlZV05yWlc1a1hHNGdJQ0FnSUNvdlhHNGdJQ0FnZEdGblB6b2djM1J5YVc1bk8xeHVYRzRnSUNBZ0x5b3FYRzRnSUNBZ0lDb2dVMlYwSUdFZ2MybHVaMnhsSUhKMWJpQmpiMjVtYVdkMWNtRjBhVzl1SUdWdWRISjVMaUJUWldWY2JpQWdJQ0FnS2lCb2RIUndjem92TDJkcGRHaDFZaTVqYjIwdmJXbGpjbTl6YjJaMEwyOXVibmh5ZFc1MGFXMWxMMkpzYjJJdmJXRnBiaTlwYm1Oc2RXUmxMMjl1Ym5oeWRXNTBhVzFsTDJOdmNtVXZjMlZ6YzJsdmJpOWNiaUFnSUNBZ0tpQnZibTU0Y25WdWRHbHRaVjl5ZFc1ZmIzQjBhVzl1YzE5amIyNW1hV2RmYTJWNWN5NW9YRzRnSUNBZ0lDcGNiaUFnSUNBZ0tpQlVhR2x6SUhObGRIUnBibWNnYVhNZ1lYWmhhV3hoWW14bElHOXViSGtnYVc0Z1YyVmlRWE56WlcxaWJIa2dZbUZqYTJWdVpDNGdWMmxzYkNCemRYQndiM0owSUU1dlpHVXVhbk1nWW1sdVpHbHVaeUJoYm1RZ2NtVmhZM1F0Ym1GMGFYWmxJR3hoZEdWeVhHNGdJQ0FnSUNwY2JpQWdJQ0FnS2lCQVpYaGhiWEJzWlZ4dUlDQWdJQ0FxWEc0Z0lDQWdJQ29nWUdCZ2FuTmNiaUFnSUNBZ0tpQmxlSFJ5WVRvZ2UxeHVJQ0FnSUNBcUlDQWdiV1Z0YjNKNU9pQjdYRzRnSUNBZ0lDb2dJQ0FnSUdWdVlXSnNaVjl0WlcxdmNubGZZWEpsYm1GZmMyaHlhVzVyWVdkbE9pQmNJakZjSWl4Y2JpQWdJQ0FnS2lBZ0lIMWNiaUFnSUNBZ0tpQjlYRzRnSUNBZ0lDb2dZR0JnWEc0Z0lDQWdJQ292WEc0Z0lDQWdaWGgwY21FL09pQlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGp0Y2JpQWdmVnh1WEc0Z0lDOHZJQ05sYm1SeVpXZHBiMjVjYmx4dUlDQXZMeUFqY21WbmFXOXVJSFpoYkhWbElHMWxkR0ZrWVhSaFhHNWNiaUFnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUVCMGVYQmxjMk55YVhCMExXVnpiR2x1ZEM5dWJ5MWxiWEIwZVMxcGJuUmxjbVpoWTJWY2JpQWdhVzUwWlhKbVlXTmxJRlpoYkhWbFRXVjBZV1JoZEdFZ2UxeHVJQ0FnSUM4dklGUkNSRnh1SUNCOVhHNWNiaUFnTHk4Z0kyVnVaSEpsWjJsdmJseHVmVnh1WEc0dktpcGNiaUFxSUZKbGNISmxjMlZ1ZENCaElISjFiblJwYldVZ2FXNXpkR0Z1WTJVZ2IyWWdZVzRnVDA1T1dDQnRiMlJsYkM1Y2JpQXFMMXh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JKYm1abGNtVnVZMlZUWlhOemFXOXVJSHRjYmlBZ0x5OGdJM0psWjJsdmJpQnlkVzRvS1Z4dVhHNGdJQzhxS2x4dUlDQWdLaUJGZUdWamRYUmxJSFJvWlNCdGIyUmxiQ0JoYzNsdVkyaHliMjV2ZFhOc2VTQjNhWFJvSUhSb1pTQm5hWFpsYmlCbVpXVmtjeUJoYm1RZ2IzQjBhVzl1Y3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElHWmxaV1J6SUMwZ1VtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaGxJRzF2WkdWc0lHbHVjSFYwTGlCVFpXVWdkSGx3WlNCa1pYTmpjbWx3ZEdsdmJpQnZaaUJnU1c1bVpYSmxibU5sVTJWemMybHZiaTVKYm5CMWRGUjVjR1ZnSUdadmNpQmtaWFJoYVd3dVhHNGdJQ0FxSUVCd1lYSmhiU0J2Y0hScGIyNXpJQzBnVDNCMGFXOXVZV3d1SUVFZ2MyVjBJRzltSUc5d2RHbHZibk1nZEdoaGRDQmpiMjUwY205c2N5QjBhR1VnWW1Wb1lYWnBiM0lnYjJZZ2JXOWtaV3dnYVc1bVpYSmxibU5sTGx4dUlDQWdLaUJBY21WMGRYSnVjeUJCSUhCeWIyMXBjMlVnZEdoaGRDQnlaWE52YkhabGN5QjBieUJoSUcxaGNDd2dkMmhwWTJnZ2RYTmxjeUJ2ZFhSd2RYUWdibUZ0WlhNZ1lYTWdhMlY1Y3lCaGJtUWdUMjV1ZUZaaGJIVmxJR0Z6SUdOdmNuSmxjM0J2Ym1ScGJtY2dkbUZzZFdWekxseHVJQ0FnS2k5Y2JpQWdjblZ1S0dabFpXUnpPaUJKYm1abGNtVnVZMlZUWlhOemFXOXVMa1psWldSelZIbHdaU3dnYjNCMGFXOXVjejg2SUVsdVptVnlaVzVqWlZObGMzTnBiMjR1VW5WdVQzQjBhVzl1Y3lrNklGQnliMjFwYzJVOFNXNW1aWEpsYm1ObFUyVnpjMmx2Ymk1U1pYUjFjbTVVZVhCbFBqdGNibHh1SUNBdktpcGNiaUFnSUNvZ1JYaGxZM1YwWlNCMGFHVWdiVzlrWld3Z1lYTjVibU5vY205dWIzVnpiSGtnZDJsMGFDQjBhR1VnWjJsMlpXNGdabVZsWkhNc0lHWmxkR05vWlhNZ1lXNWtJRzl3ZEdsdmJuTXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0JtWldWa2N5QXRJRkpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvWlNCdGIyUmxiQ0JwYm5CMWRDNGdVMlZsSUhSNWNHVWdaR1Z6WTNKcGNIUnBiMjRnYjJZZ1lFbHVabVZ5Wlc1alpWTmxjM05wYjI0dVNXNXdkWFJVZVhCbFlDQm1iM0lnWkdWMFlXbHNMbHh1SUNBZ0tpQkFjR0Z5WVcwZ1ptVjBZMmhsY3lBdElGSmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9aU0J0YjJSbGJDQnZkWFJ3ZFhRdUlGTmxaU0IwZVhCbElHUmxjMk55YVhCMGFXOXVJRzltSUdCSmJtWmxjbVZ1WTJWVFpYTnphVzl1TGs5MWRIQjFkRlI1Y0dWZ0lHWnZjbHh1SUNBZ0tpQmtaWFJoYVd3dVhHNGdJQ0FxSUVCd1lYSmhiU0J2Y0hScGIyNXpJQzBnVDNCMGFXOXVZV3d1SUVFZ2MyVjBJRzltSUc5d2RHbHZibk1nZEdoaGRDQmpiMjUwY205c2N5QjBhR1VnWW1Wb1lYWnBiM0lnYjJZZ2JXOWtaV3dnYVc1bVpYSmxibU5sTGx4dUlDQWdLaUJBY21WMGRYSnVjeUJCSUhCeWIyMXBjMlVnZEdoaGRDQnlaWE52YkhabGN5QjBieUJoSUcxaGNDd2dkMmhwWTJnZ2RYTmxjeUJ2ZFhSd2RYUWdibUZ0WlhNZ1lYTWdhMlY1Y3lCaGJtUWdUMjV1ZUZaaGJIVmxJR0Z6SUdOdmNuSmxjM0J2Ym1ScGJtY2dkbUZzZFdWekxseHVJQ0FnS2k5Y2JpQWdjblZ1S0dabFpXUnpPaUJKYm1abGNtVnVZMlZUWlhOemFXOXVMa1psWldSelZIbHdaU3dnWm1WMFkyaGxjem9nU1c1bVpYSmxibU5sVTJWemMybHZiaTVHWlhSamFHVnpWSGx3WlN4Y2JpQWdJQ0FnSUc5d2RHbHZibk0vT2lCSmJtWmxjbVZ1WTJWVFpYTnphVzl1TGxKMWJrOXdkR2x2Ym5NcE9pQlFjbTl0YVhObFBFbHVabVZ5Wlc1alpWTmxjM05wYjI0dVVtVjBkWEp1Vkhsd1pUNDdYRzVjYmlBZ0x5OGdJMlZ1WkhKbFoybHZibHh1WEc0Z0lDOHZJQ055WldkcGIyNGdjbVZzWldGelpTZ3BYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxiR1ZoYzJVZ2RHaGxJR2x1Wm1WeVpXNWpaU0J6WlhOemFXOXVJR0Z1WkNCMGFHVWdkVzVrWlhKc2VXbHVaeUJ5WlhOdmRYSmpaWE11WEc0Z0lDQXFMMXh1SUNCeVpXeGxZWE5sS0NrNklGQnliMjFwYzJVOGRtOXBaRDQ3WEc1Y2JpQWdMeThnSTJWdVpISmxaMmx2Ymx4dVhHNGdJQzh2SUNOeVpXZHBiMjRnY0hKdlptbHNhVzVuWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRk4wWVhKMElIQnliMlpwYkdsdVp5NWNiaUFnSUNvdlhHNGdJSE4wWVhKMFVISnZabWxzYVc1bktDazZJSFp2YVdRN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVWdVpDQndjbTltYVd4cGJtY3VYRzRnSUNBcUwxeHVJQ0JsYm1SUWNtOW1hV3hwYm1jb0tUb2dkbTlwWkR0Y2JseHVJQ0F2THlBalpXNWtjbVZuYVc5dVhHNWNiaUFnTHk4Z0kzSmxaMmx2YmlCdFpYUmhaR0YwWVZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJIWlhRZ2FXNXdkWFFnYm1GdFpYTWdiMllnZEdobElHeHZZV1JsWkNCdGIyUmxiQzVjYmlBZ0lDb3ZYRzRnSUhKbFlXUnZibXg1SUdsdWNIVjBUbUZ0WlhNNklISmxZV1J2Ym14NUlITjBjbWx1WjF0ZE8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUWdiM1YwY0hWMElHNWhiV1Z6SUc5bUlIUm9aU0JzYjJGa1pXUWdiVzlrWld3dVhHNGdJQ0FxTDF4dUlDQnlaV0ZrYjI1c2VTQnZkWFJ3ZFhST1lXMWxjem9nY21WaFpHOXViSGtnYzNSeWFXNW5XMTA3WEc1Y2JpQWdMeThnTHlvcVhHNGdJQzh2SUNBcUlFZGxkQ0JwYm5CMWRDQnRaWFJoWkdGMFlTQnZaaUIwYUdVZ2JHOWhaR1ZrSUcxdlpHVnNMbHh1SUNBdkx5QWdLaTljYmlBZ0x5OGdjbVZoWkc5dWJIa2dhVzV3ZFhSTlpYUmhaR0YwWVRvZ1VtVmhaRzl1YkhsQmNuSmhlVHhTWldGa2IyNXNlVHhKYm1abGNtVnVZMlZUWlhOemFXOXVMbFpoYkhWbFRXVjBZV1JoZEdFK1BqdGNibHh1SUNBdkx5QXZLaXBjYmlBZ0x5OGdJQ29nUjJWMElHOTFkSEIxZENCdFpYUmhaR0YwWVNCdlppQjBhR1VnYkc5aFpHVmtJRzF2WkdWc0xseHVJQ0F2THlBZ0tpOWNiaUFnTHk4Z2NtVmhaRzl1YkhrZ2IzVjBjSFYwVFdWMFlXUmhkR0U2SUZKbFlXUnZibXg1UVhKeVlYazhVbVZoWkc5dWJIazhTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpNVdZV3gxWlUxbGRHRmtZWFJoUGo0N1hHNWNiaUFnTHk4Z0kyVnVaSEpsWjJsdmJseHVmVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVsdVptVnlaVzVqWlZObGMzTnBiMjVHWVdOMGIzSjVJSHRjYmlBZ0x5OGdJM0psWjJsdmJpQmpjbVZoZEdVb0tWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1VnWVNCdVpYY2dhVzVtWlhKbGJtTmxJSE5sYzNOcGIyNGdZVzVrSUd4dllXUWdiVzlrWld3Z1lYTjVibU5vY205dWIzVnpiSGtnWm5KdmJTQmhiaUJQVGs1WUlHMXZaR1ZzSUdacGJHVXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0IxY21rZ0xTQlVhR1VnVlZKSklHOXlJR1pwYkdVZ2NHRjBhQ0J2WmlCMGFHVWdiVzlrWld3Z2RHOGdiRzloWkM1Y2JpQWdJQ29nUUhCaGNtRnRJRzl3ZEdsdmJuTWdMU0J6Y0dWamFXWjVJR052Ym1acFozVnlZWFJwYjI0Z1ptOXlJR055WldGMGFXNW5JR0VnYm1WM0lHbHVabVZ5Wlc1alpTQnpaWE56YVc5dUxseHVJQ0FnS2lCQWNtVjBkWEp1Y3lCQklIQnliMjFwYzJVZ2RHaGhkQ0J5WlhOdmJIWmxjeUIwYnlCaGJpQkpibVpsY21WdVkyVlRaWE56YVc5dUlHOWlhbVZqZEM1Y2JpQWdJQ292WEc0Z0lHTnlaV0YwWlNoMWNtazZJSE4wY21sdVp5d2diM0IwYVc5dWN6ODZJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNHVVMlZ6YzJsdmJrOXdkR2x2Ym5NcE9pQlFjbTl0YVhObFBFbHVabVZ5Wlc1alpWTmxjM05wYjI0K08xeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1VnWVNCdVpYY2dhVzVtWlhKbGJtTmxJSE5sYzNOcGIyNGdZVzVrSUd4dllXUWdiVzlrWld3Z1lYTjVibU5vY205dWIzVnpiSGtnWm5KdmJTQmhiaUJoY25KaGVTQmlkV1psY2k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElHSjFabVpsY2lBdElFRnVJRUZ5Y21GNVFuVm1abVZ5SUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUdGdUlFOU9UbGdnYlc5a1pXd3VYRzRnSUNBcUlFQndZWEpoYlNCdmNIUnBiMjV6SUMwZ2MzQmxZMmxtZVNCamIyNW1hV2QxY21GMGFXOXVJR1p2Y2lCamNtVmhkR2x1WnlCaElHNWxkeUJwYm1abGNtVnVZMlVnYzJWemMybHZiaTVjYmlBZ0lDb2dRSEpsZEhWeWJuTWdRU0J3Y205dGFYTmxJSFJvWVhRZ2NtVnpiMngyWlhNZ2RHOGdZVzRnU1c1bVpYSmxibU5sVTJWemMybHZiaUJ2WW1wbFkzUXVYRzRnSUNBcUwxeHVJQ0JqY21WaGRHVW9ZblZtWm1WeU9pQkJjbkpoZVVKMVptWmxja3hwYTJVc0lHOXdkR2x2Ym5NL09pQkpibVpsY21WdVkyVlRaWE56YVc5dUxsTmxjM05wYjI1UGNIUnBiMjV6S1RvZ1VISnZiV2x6WlR4SmJtWmxjbVZ1WTJWVFpYTnphVzl1UGp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxJR0VnYm1WM0lHbHVabVZ5Wlc1alpTQnpaWE56YVc5dUlHRnVaQ0JzYjJGa0lHMXZaR1ZzSUdGemVXNWphSEp2Ym05MWMyeDVJR1p5YjIwZ2MyVm5iV1Z1ZENCdlppQmhiaUJoY25KaGVTQmlkV1psY2k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElHSjFabVpsY2lBdElFRnVJRUZ5Y21GNVFuVm1abVZ5SUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUdGdUlFOU9UbGdnYlc5a1pXd3VYRzRnSUNBcUlFQndZWEpoYlNCaWVYUmxUMlptYzJWMElDMGdWR2hsSUdKbFoybHVibWx1WnlCdlppQjBhR1VnYzNCbFkybG1hV1ZrSUhCdmNuUnBiMjRnYjJZZ2RHaGxJR0Z5Y21GNUlHSjFabVpsY2k1Y2JpQWdJQ29nUUhCaGNtRnRJR0o1ZEdWTVpXNW5kR2dnTFNCVWFHVWdiR1Z1WjNSb0lHbHVJR0o1ZEdWeklHOW1JSFJvWlNCaGNuSmhlU0JpZFdabVpYSXVYRzRnSUNBcUlFQndZWEpoYlNCdmNIUnBiMjV6SUMwZ2MzQmxZMmxtZVNCamIyNW1hV2QxY21GMGFXOXVJR1p2Y2lCamNtVmhkR2x1WnlCaElHNWxkeUJwYm1abGNtVnVZMlVnYzJWemMybHZiaTVjYmlBZ0lDb2dRSEpsZEhWeWJuTWdRU0J3Y205dGFYTmxJSFJvWVhRZ2NtVnpiMngyWlhNZ2RHOGdZVzRnU1c1bVpYSmxibU5sVTJWemMybHZiaUJ2WW1wbFkzUXVYRzRnSUNBcUwxeHVJQ0JqY21WaGRHVW9ZblZtWm1WeU9pQkJjbkpoZVVKMVptWmxja3hwYTJVc0lHSjVkR1ZQWm1aelpYUTZJRzUxYldKbGNpd2dZbmwwWlV4bGJtZDBhRDg2SUc1MWJXSmxjaXdnYjNCMGFXOXVjejg2SUVsdVptVnlaVzVqWlZObGMzTnBiMjR1VTJWemMybHZiazl3ZEdsdmJuTXBPbHh1SUNBZ0lDQWdVSEp2YldselpUeEpibVpsY21WdVkyVlRaWE56YVc5dVBqdGNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsSUdFZ2JtVjNJR2x1Wm1WeVpXNWpaU0J6WlhOemFXOXVJR0Z1WkNCc2IyRmtJRzF2WkdWc0lHRnplVzVqYUhKdmJtOTFjMng1SUdaeWIyMGdZU0JWYVc1ME9FRnljbUY1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ1luVm1abVZ5SUMwZ1FTQlZhVzUwT0VGeWNtRjVJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JR0Z1SUU5T1RsZ2diVzlrWld3dVhHNGdJQ0FxSUVCd1lYSmhiU0J2Y0hScGIyNXpJQzBnYzNCbFkybG1lU0JqYjI1bWFXZDFjbUYwYVc5dUlHWnZjaUJqY21WaGRHbHVaeUJoSUc1bGR5QnBibVpsY21WdVkyVWdjMlZ6YzJsdmJpNWNiaUFnSUNvZ1FISmxkSFZ5Ym5NZ1FTQndjbTl0YVhObElIUm9ZWFFnY21WemIyeDJaWE1nZEc4Z1lXNGdTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpQnZZbXBsWTNRdVhHNGdJQ0FxTDF4dUlDQmpjbVZoZEdVb1luVm1abVZ5T2lCVmFXNTBPRUZ5Y21GNUxDQnZjSFJwYjI1elB6b2dTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpNVRaWE56YVc5dVQzQjBhVzl1Y3lrNklGQnliMjFwYzJVOFNXNW1aWEpsYm1ObFUyVnpjMmx2Ymo0N1hHNWNiaUFnTHk4Z0kyVnVaSEpsWjJsdmJseHVmVnh1WEc0dkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNWhiV2x1WnkxamIyNTJaVzUwYVc5dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnU1c1bVpYSmxibU5sVTJWemMybHZiam9nU1c1bVpYSmxibU5sVTJWemMybHZia1poWTNSdmNua2dQU0JKYm1abGNtVnVZMlZUWlhOemFXOXVTVzF3YkR0Y2JpSXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJSHRQY0hScGIyNXpSbTl5YldGMExDQlBjSFJwYjI1elRtOXliV0ZzYVhwaGRHbHZibEJoY21GdFpYUmxjbk1zSUU5d2RHbHZibk5VWlc1emIzSk1ZWGx2ZFhSOUlHWnliMjBnSnk0dmRHVnVjMjl5TFdaaFkzUnZjbmt1YW5Nbk8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlJsYm5OdmNsUnZSR0YwWVZWeWJFOXdkR2x2Ym5NZ1pYaDBaVzVrY3lCUGNIUnBiMjV6VkdWdWMyOXlUR0Y1YjNWMExDQlBjSFJwYjI1elJtOXliV0YwTENCUGNIUnBiMjV6VG05eWJXRnNhWHBoZEdsdmJsQmhjbUZ0WlhSbGNuTWdlMzFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCVVpXNXpiM0pVYjBsdFlXZGxSR0YwWVU5d2RHbHZibk1nWlhoMFpXNWtjeUJQY0hScGIyNXpWR1Z1YzI5eVRHRjViM1YwTENCUGNIUnBiMjV6Um05eWJXRjBMQ0JQY0hScGIyNXpUbTl5YldGc2FYcGhkR2x2YmxCaGNtRnRaWFJsY25NZ2UzMWNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JEYjI1MlpYSnphVzl1VlhScGJITWdlMXh1SUNBdktpcGNiaUFnSUNvZ1kzSmxZWFJsY3lCaElFUmhkR0ZWVWt3Z2FXNXpkR0Z1WTJVZ1puSnZiU0IwWlc1emIzSmNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJRzl3ZEdsdmJuTWdMU0JCYmlCdmNIUnBiMjVoYkNCdlltcGxZM1FnY21Wd2NtVnpaVzUwYVc1bklHOXdkR2x2Ym5NZ1ptOXlJR055WldGMGFXNW5JR0VnUkdGMFlWVlNUQ0JwYm5OMFlXNWpaU0JtY205dElIUm9aU0IwWlc1emIzSXVYRzRnSUNBcVhHNGdJQ0FxSUZSb1pTQm1iMnhzYjNkcGJtY2daR1ZtWVhWc2RDQnpaWFIwYVc1bmN5QjNhV3hzSUdKbElHRndjR3hwWldRNlhHNGdJQ0FxSUMwZ1lHWnZjbTFoZEdBNklHQW5Va2RDSjJCY2JpQWdJQ29nTFNCZ2RHVnVjMjl5VEdGNWIzVjBZRG9nWUNkT1EwaFhKMkJjYmlBZ0lDb2dRSEpsZEhWeWJuTWdZU0JFWVhSaFZWSk1JSE4wY21sdVp5QnlaWEJ5WlhObGJuUnBibWNnZEdobElHbHRZV2RsSUdOdmJuWmxjblJsWkNCbWNtOXRJSFJsYm5OdmNpQmtZWFJoWEc0Z0lDQXFMMXh1SUNCMGIwUmhkR0ZWVWt3b2IzQjBhVzl1Y3o4NklGUmxibk52Y2xSdlJHRjBZVlZ5YkU5d2RHbHZibk1wT2lCemRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJR055WldGMFpYTWdZVzRnU1cxaFoyVkVZWFJoSUdsdWMzUmhibU5sSUdaeWIyMGdkR1Z1YzI5eVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQnZjSFJwYjI1eklDMGdRVzRnYjNCMGFXOXVZV3dnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR2x1WnlCdmNIUnBiMjV6SUdadmNpQmpjbVZoZEdsdVp5QmhiaUJKYldGblpVUmhkR0VnYVc1emRHRnVZMlVnWm5KdmJTQjBhR1VnZEdWdWMyOXlMbHh1SUNBZ0tseHVJQ0FnS2lCVWFHVWdabTlzYkc5M2FXNW5JR1JsWm1GMWJIUWdjMlYwZEdsdVozTWdkMmxzYkNCaVpTQmhjSEJzYVdWa09seHVJQ0FnS2lBdElHQm1iM0p0WVhSZ09pQmdKMUpIUWlkZ1hHNGdJQ0FxSUMwZ1lIUmxibk52Y2t4aGVXOTFkR0E2SUdBblRrTklWeWRnWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJR0Z1SUVsdFlXZGxSR0YwWVNCcGJuTjBZVzVqWlNCeVpYQnlaWE5sYm5ScGJtY2dkR2hsSUdsdFlXZGxJR052Ym5abGNuUmxaQ0JtY205dElIUmxibk52Y2lCa1lYUmhYRzRnSUNBcUwxeHVJQ0IwYjBsdFlXZGxSR0YwWVNodmNIUnBiMjV6UHpvZ1ZHVnVjMjl5Vkc5SmJXRm5aVVJoZEdGUGNIUnBiMjV6S1RvZ1NXMWhaMlZFWVhSaE8xeHVmVnh1SWl3Z0lpOHZJRU52Y0hseWFXZG9kQ0FvWXlrZ1RXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUx5OGdUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRTFKVkNCTWFXTmxibk5sTGx4dVhHNXBiWEJ2Y25RZ2UxUmxibk52Y2l3Z1ZIbHdaV1JVWlc1emIzSjlJR1p5YjIwZ0p5NHZkR1Z1YzI5eUxtcHpKenRjYmx4dVpYaHdiM0owSUhSNWNHVWdTVzFoWjJWR2IzSnRZWFFnUFNBblVrZENKM3duVWtkQ1FTZDhKMEpIVWlkOEoxSkNSeWM3WEc1bGVIQnZjblFnZEhsd1pTQkpiV0ZuWlZSbGJuTnZja3hoZVc5MWRDQTlJQ2RPU0ZkREozd25Ua05JVnljN1hHNWNiaTh2SUhSb1pTQm1iMnhzYjNkcGJtY2djbVZuYVc5dUlHTnZiblJoYVc1eklIUjVjR1VnWkdWbWFXNXBkR2x2Ym5NZ1ptOXlJR052Ym5OMGNuVmpkR2x1WnlCMFpXNXpiM0lnWm5KdmJTQmhJSE53WldOcFptbGpJR3h2WTJGMGFXOXVMbHh1WEc0dkx5QWpjbVZuYVc5dUlIUjVjR1Z6SUdadmNpQmpiMjV6ZEhKMVkzUnBibWNnWVNCMFpXNXpiM0lnWm5KdmJTQmhJSE53WldOcFptbGpJR3h2WTJGMGFXOXVYRzVjYmk4cUtseHVJQ29nY21Wd2NtVnpaVzUwSUdOdmJXMXZiaUJ3Y205d1pYSjBhV1Z6SUc5bUlIUm9aU0J3WVhKaGJXVjBaWElnWm05eUlHTnZibk4wY25WamRHbHVaeUJoSUhSbGJuTnZjaUJtY205dElHRWdjM0JsWTJsbWFXTWdiRzlqWVhScGIyNHVYRzRnS2k5Y2JtbHVkR1Z5Wm1GalpTQkRiMjF0YjI1RGIyNXpkSEoxWTNSdmNsQmhjbUZ0WlhSbGNuTThWRDRnWlhoMFpXNWtjeUJRYVdOclBGUmxibk52Y2l3Z0oyUnBiWE1uUGlCN1hHNGdJQzhxS2x4dUlDQWdLaUJUY0dWamFXWjVJSFJvWlNCa1lYUmhJSFI1Y0dVZ2IyWWdkR2hsSUhSbGJuTnZjaTVjYmlBZ0lDb3ZYRzRnSUhKbFlXUnZibXg1SUhSNWNHVTZJRlE3WEc1OVhHNWNiaThxS2x4dUlDb2djbVZ3Y21WelpXNTBJSFJvWlNCd1lYSmhiV1YwWlhJZ1ptOXlJR052Ym5OMGNuVmpkR2x1WnlCaElIUmxibk52Y2lCbWNtOXRJR0VnUjFCVklISmxjMjkxY21ObExseHVJQ292WEc1cGJuUmxjbVpoWTJVZ1IzQjFVbVZ6YjNWeVkyVkRiMjV6ZEhKMVkzUnZjbEJoY21GdFpYUmxjbk04VkNCbGVIUmxibVJ6SUZSbGJuTnZjaTVVZVhCbFBpQjdYRzRnSUM4cUtseHVJQ0FnS2lCaGJpQnZjSFJwYjI1aGJDQmpZV3hzWW1GamF5Qm1kVzVqZEdsdmJpQjBieUJrYjNkdWJHOWhaQ0JrWVhSaElHWnliMjBnUjFCVklIUnZJRU5RVlM1Y2JpQWdJQ3BjYmlBZ0lDb2dTV1lnYm05MElIQnliM1pwWkdWa0xDQjBhR1VnZEdWdWMyOXlJSFJ5WldGMElIUm9aU0JIVUZVZ1pHRjBZU0JoY3lCbGVIUmxjbTVoYkNCeVpYTnZkWEpqWlM1Y2JpQWdJQ292WEc0Z0lHUnZkMjVzYjJGa1B5Z3BPaUJRY205dGFYTmxQRlJsYm5OdmNpNUVZWFJoVkhsd1pVMWhjRnRVWFQ0N1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUdGdUlHOXdkR2x2Ym1Gc0lHTmhiR3hpWVdOcklHWjFibU4wYVc5dUlIUm9ZWFFnZDJsc2JDQmlaU0JqWVd4c1pXUWdkMmhsYmlCMGFHVWdkR1Z1YzI5eUlHbHpJR1JwYzNCdmMyVmtMbHh1SUNBZ0tseHVJQ0FnS2lCSlppQnViM1FnY0hKdmRtbGtaV1FzSUhSb1pTQjBaVzV6YjNJZ2RISmxZWFFnZEdobElFZFFWU0JrWVhSaElHRnpJR1Y0ZEdWeWJtRnNJSEpsYzI5MWNtTmxMbHh1SUNBZ0tpOWNiaUFnWkdsemNHOXpaVDhvS1RvZ2RtOXBaRHRjYm4xY2JseHVMeW9xWEc0Z0tpQnlaWEJ5WlhObGJuUWdkR2hsSUhCaGNtRnRaWFJsY2lCbWIzSWdZMjl1YzNSeWRXTjBhVzVuSUdFZ2RHVnVjMjl5SUdaeWIyMGdZU0J3YVc1dVpXUWdRMUJWSUdKMVptWmxjbHh1SUNvdlhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFTndkVkJwYm01bFpFTnZibk4wY25WamRHOXlVR0Z5WVcxbGRHVnljenhVSUdWNGRHVnVaSE1nVkdWdWMyOXlMa053ZFZCcGJtNWxaRVJoZEdGVWVYQmxjeUE5SUZSbGJuTnZjaTVEY0hWUWFXNXVaV1JFWVhSaFZIbHdaWE0rSUdWNGRHVnVaSE5jYmlBZ0lDQkRiMjF0YjI1RGIyNXpkSEoxWTNSdmNsQmhjbUZ0WlhSbGNuTThWRDRnZTF4dUlDQXZLaXBjYmlBZ0lDb2dVM0JsWTJsbWVTQjBhR1VnYkc5allYUnBiMjRnYjJZZ2RHaGxJR1JoZEdFZ2RHOGdZbVVnSjJOd2RTMXdhVzV1WldRbkxseHVJQ0FnS2k5Y2JpQWdjbVZoWkc5dWJIa2diRzlqWVhScGIyNDZJQ2RqY0hVdGNHbHVibVZrSnp0Y2JpQWdMeW9xWEc0Z0lDQXFJRk53WldOcFpua2dkR2hsSUVOUVZTQndhVzV1WldRZ1luVm1abVZ5SUhSb1lYUWdhRzlzWkhNZ2RHaGxJSFJsYm5OdmNpQmtZWFJoTGx4dUlDQWdLaTljYmlBZ2NtVmhaRzl1YkhrZ1pHRjBZVG9nVkdWdWMyOXlMa1JoZEdGVWVYQmxUV0Z3VzFSZE8xeHVmVnh1WEc0dktpcGNiaUFxSUhKbGNISmxjMlZ1ZENCMGFHVWdjR0Z5WVcxbGRHVnlJR1p2Y2lCamIyNXpkSEoxWTNScGJtY2dZU0IwWlc1emIzSWdabkp2YlNCaElGZGxZa2RNSUhSbGVIUjFjbVZjYmlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQlVaWGgwZFhKbFEyOXVjM1J5ZFdOMGIzSlFZWEpoYldWMFpYSnpQRlFnWlhoMFpXNWtjeUJVWlc1emIzSXVWR1Y0ZEhWeVpVUmhkR0ZVZVhCbGN5QTlJRlJsYm5OdmNpNVVaWGgwZFhKbFJHRjBZVlI1Y0dWelBpQmxlSFJsYm1SelhHNGdJQ0FnUTI5dGJXOXVRMjl1YzNSeWRXTjBiM0pRWVhKaGJXVjBaWEp6UEZRK0xDQkhjSFZTWlhOdmRYSmpaVU52Ym5OMGNuVmpkRzl5VUdGeVlXMWxkR1Z5Y3p4VVBpQjdYRzRnSUM4cUtseHVJQ0FnS2lCVGNHVmphV1o1SUhSb1pTQnNiMk5oZEdsdmJpQnZaaUIwYUdVZ1pHRjBZU0IwYnlCaVpTQW5kR1Y0ZEhWeVpTY3VYRzRnSUNBcUwxeHVJQ0J5WldGa2IyNXNlU0JzYjJOaGRHbHZiam9nSjNSbGVIUjFjbVVuTzF4dUlDQXZLaXBjYmlBZ0lDb2dVM0JsWTJsbWVTQjBhR1VnVjJWaVIwd2dkR1Y0ZEhWeVpTQjBhR0YwSUdodmJHUnpJSFJvWlNCMFpXNXpiM0lnWkdGMFlTNWNiaUFnSUNvdlhHNGdJSEpsWVdSdmJteDVJSFJsZUhSMWNtVTZJRlJsYm5OdmNpNVVaWGgwZFhKbFZIbHdaVHRjYm4xY2JseHVMeW9xWEc0Z0tpQnlaWEJ5WlhObGJuUWdkR2hsSUhCaGNtRnRaWFJsY2lCbWIzSWdZMjl1YzNSeWRXTjBhVzVuSUdFZ2RHVnVjMjl5SUdaeWIyMGdZU0JYWldKSFVGVWdZblZtWm1WeVhHNGdLaTljYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnUjNCMVFuVm1abVZ5UTI5dWMzUnlkV04wYjNKUVlYSmhiV1YwWlhKelBGUWdaWGgwWlc1a2N5QlVaVzV6YjNJdVIzQjFRblZtWm1WeVJHRjBZVlI1Y0dWeklEMGdWR1Z1YzI5eUxrZHdkVUoxWm1abGNrUmhkR0ZVZVhCbGN6NGdaWGgwWlc1a2MxeHVJQ0FnSUVOdmJXMXZia052Ym5OMGNuVmpkRzl5VUdGeVlXMWxkR1Z5Y3p4VVBpd2dSM0IxVW1WemIzVnlZMlZEYjI1emRISjFZM1J2Y2xCaGNtRnRaWFJsY25NOFZENGdlMXh1SUNBdktpcGNiaUFnSUNvZ1UzQmxZMmxtZVNCMGFHVWdiRzlqWVhScGIyNGdiMllnZEdobElHUmhkR0VnZEc4Z1ltVWdKMmR3ZFMxaWRXWm1aWEluTGx4dUlDQWdLaTljYmlBZ2NtVmhaRzl1YkhrZ2JHOWpZWFJwYjI0NklDZG5jSFV0WW5WbVptVnlKenRjYmlBZ0x5b3FYRzRnSUNBcUlGTndaV05wWm5rZ2RHaGxJRmRsWWtkUVZTQmlkV1ptWlhJZ2RHaGhkQ0JvYjJ4a2N5QjBhR1VnZEdWdWMyOXlJR1JoZEdFdVhHNGdJQ0FxTDF4dUlDQnlaV0ZrYjI1c2VTQm5jSFZDZFdabVpYSTZJRlJsYm5OdmNpNUhjSFZDZFdabVpYSlVlWEJsTzF4dWZWeHVYRzR2THlBalpXNWtjbVZuYVc5dVhHNWNiaTh2SUhSb1pTQm1iMnhzYjNkcGJtY2djbVZuYVc5dUlHTnZiblJoYVc1eklIUjVjR1VnWkdWbWFXNXBkR2x2Ym5NZ2IyWWdaV0ZqYUNCcGJtUnBkbWxrZFdGc0lHOXdkR2x2Ym5NdVhHNHZMeUIwYUdVZ2RHVnVjMjl5SUdaaFkzUnZjbmtnWm5WdVkzUnBiMjV6SUhWelpTQmhJR052YlhCdmMybDBhVzl1SUc5bUlIUm9iM05sSUc5d2RHbHZibk1nWVhNZ2RHaGxJSEJoY21GdFpYUmxjaUIwZVhCbExseHVYRzR2THlBamNtVm5hVzl1SUU5d2RHbHZibk1nWm1sbGJHUnpYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVDNCMGFXOXVjMFp2Y20xaGRDQjdYRzRnSUM4cUtseHVJQ0FnS2lCRVpYTmpjbWxpWlhNZ2RHaGxJR2x0WVdkbElHWnZjbTFoZENCeVpYQnlaWE5sYm5SbFpDQnBiaUJTUjBKQklHTnZiRzl5SUhOd1lXTmxMbHh1SUNBZ0tpOWNiaUFnWm05eWJXRjBQem9nU1cxaFoyVkdiM0p0WVhRN1hHNTlYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVDNCMGFXOXVjMVJsYm5OdmNrWnZjbTFoZENCN1hHNGdJQzhxS2x4dUlDQWdLaUJFWlhOamNtbGlaWE1nZEdobElHbHRZV2RsSUdadmNtMWhkQ0J2WmlCMGFHVWdkR1Z1YzI5eUxseHVJQ0FnS2x4dUlDQWdLaUJPVDFSRk9pQjBhR2x6SUdseklHUnBabVpsY21WdWRDQm1jbTl0SUc5d2RHbHZiaUFuWm05eWJXRjBKeTRnVjJocGJHVWdiM0IwYVc5dUlDZG1iM0p0WVhRbklISmxjSEpsYzJWdWRITWdkR2hsSUc5eWFXZHBibUZzSUdsdFlXZGxMQ0FuZEdWdWMyOXlSbTl5YldGMEoxeHVJQ0FnS2lCeVpYQnlaWE5sYm5SeklIUm9aU0IwWVhKblpYUWdabTl5YldGMElHOW1JSFJvWlNCMFpXNXpiM0l1SUVFZ2RISmhibk53YjNObElIZHBiR3dnWW1VZ2NHVnlabTl5YldWa0lHbG1JSFJvWlhrZ1lYSmxJR1JwWm1abGNtVnVkQzVjYmlBZ0lDb3ZYRzRnSUhSbGJuTnZja1p2Y20xaGREODZJRWx0WVdkbFJtOXliV0YwTzF4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRTl3ZEdsdmJuTlVaVzV6YjNKRVlYUmhWSGx3WlNCN1hHNGdJQzhxS2x4dUlDQWdLaUJFWlhOamNtbGlaWE1nZEdobElHUmhkR0VnZEhsd1pTQnZaaUIwYUdVZ2RHVnVjMjl5TGx4dUlDQWdLaTljYmlBZ1pHRjBZVlI1Y0dVL09pQW5abXh2WVhRek1pZDhKM1ZwYm5RNEp6dGNibjFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCUGNIUnBiMjV6VkdWdWMyOXlUR0Y1YjNWMElIdGNiaUFnTHlvcVhHNGdJQ0FxSUVSbGMyTnlhV0psY3lCMGFHVWdkR1Z1YzI5eUlHeGhlVzkxZENCM2FHVnVJSEpsY0hKbGMyVnVkR2x1WnlCa1lYUmhJRzltSUc5dVpTQnZjaUJ0YjNKbElHbHRZV2RsS0hNcExseHVJQ0FnS2k5Y2JpQWdkR1Z1YzI5eVRHRjViM1YwUHpvZ1NXMWhaMlZVWlc1emIzSk1ZWGx2ZFhRN1hHNTlYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVDNCMGFXOXVjMFJwYldWdWMybHZibk1nZTF4dUlDQXZLaXBjYmlBZ0lDb2dSR1Z6WTNKcFltVnpJSFJvWlNCcGJXRm5aU0JvWldsbmFIUWdhVzRnY0dsNFpXeGNiaUFnSUNvdlhHNGdJR2hsYVdkb2REODZJRzUxYldKbGNqdGNiaUFnTHlvcVhHNGdJQ0FxSUVSbGMyTnlhV0psY3lCMGFHVWdhVzFoWjJVZ2QybGtkR2dnYVc0Z2NHbDRaV3hjYmlBZ0lDb3ZYRzRnSUhkcFpIUm9Qem9nYm5WdFltVnlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFOXdkR2x2YmxKbGMybDZaV1JFYVcxbGJuTnBiMjV6SUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRVJsYzJOeWFXSmxjeUIwYUdVZ2NtVnphWHBsWkNCb1pXbG5hSFF1SUVsbUlHOXRhWFIwWldRc0lHOXlhV2RwYm1Gc0lHaGxhV2RvZENCM2FXeHNJR0psSUhWelpXUXVYRzRnSUNBcUwxeHVJQ0J5WlhOcGVtVmtTR1ZwWjJoMFB6b2diblZ0WW1WeU8xeHVJQ0F2S2lwY2JpQWdJQ29nUkdWelkzSnBZbVZ6SUhKbGMybDZaV1FnZDJsa2RHZ2dMU0JqWVc0Z1ltVWdZV05qWlhOelpXUWdkbWxoSUhSbGJuTnZjaUJrYVcxbGJuTnBiMjV6SUdGeklIZGxiR3hjYmlBZ0lDb3ZYRzRnSUhKbGMybDZaV1JYYVdSMGFEODZJRzUxYldKbGNqdGNibjFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCUGNIUnBiMjV6VG05eWJXRnNhWHBoZEdsdmJsQmhjbUZ0WlhSbGNuTWdlMXh1SUNBdktpcGNiaUFnSUNvZ1JHVnpZM0pwWW1WeklHNXZjbTFoYkdsNllYUnBiMjRnY0dGeVlXMWxkR1Z5Y3lCM2FHVnVJSEJ5WlhCeWIyTmxjM05wYm1jZ2RHaGxJR2x0WVdkbElHRnpJRzF2WkdWc0lHbHVjSFYwTGx4dUlDQWdLbHh1SUNBZ0tpQkVZWFJoSUdWc1pXMWxiblFnWVhKbElISmhibWRsWkNCbWNtOXRJREFnZEc4Z01qVTFMbHh1SUNBZ0tpOWNiaUFnYm05eWJUODZJSHRjYmlBZ0lDQXZLaXBjYmlBZ0lDQWdLaUJVYUdVZ0oySnBZWE1uSUhaaGJIVmxJR1p2Y2lCcGJXRm5aU0J1YjNKdFlXeHBlbUYwYVc5dUxseHVJQ0FnSUNBcUlDMGdTV1lnYjIxcGRIUmxaQ3dnZFhObElHUmxabUYxYkhRZ2RtRnNkV1VnTUM1Y2JpQWdJQ0FnS2lBdElFbG1JR2wwSjNNZ1lTQnphVzVuYkdVZ2JuVnRZbVZ5TENCaGNIQnNlU0IwYnlCbFlXTm9JR05vWVc1dVpXeGNiaUFnSUNBZ0tpQXRJRWxtSUdsMEozTWdZVzRnWVhKeVlYa2diMllnTXlCdmNpQTBJRzUxYldKbGNuTXNJR0Z3Y0d4NUlHVnNaVzFsYm5RdGQybHpaUzRnVG5WdFltVnlJRzltSUdWc1pXMWxiblJ6SUc1bFpXUWdkRzhnYldGMFkyZ2dkR2hsSUc1MWJXSmxjaUJ2WmlCamFHRnVibVZzYzF4dUlDQWdJQ0FxSUdadmNpQjBhR1VnWTI5eWNtVnpjRzl1WkdsdVp5QnBiV0ZuWlNCbWIzSnRZWFJjYmlBZ0lDQWdLaTljYmlBZ0lDQmlhV0Z6UHpvZ2JuVnRZbVZ5ZkZ0dWRXMWlaWElzSUc1MWJXSmxjaXdnYm5WdFltVnlYWHhiYm5WdFltVnlMQ0J1ZFcxaVpYSXNJRzUxYldKbGNpd2diblZ0WW1WeVhUdGNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQlVhR1VnSjIxbFlXNG5JSFpoYkhWbElHWnZjaUJwYldGblpTQnViM0p0WVd4cGVtRjBhVzl1TGx4dUlDQWdJQ0FxSUMwZ1NXWWdiMjFwZEhSbFpDd2dkWE5sSUdSbFptRjFiSFFnZG1Gc2RXVWdNalUxTGx4dUlDQWdJQ0FxSUMwZ1NXWWdhWFFuY3lCaElITnBibWRzWlNCdWRXMWlaWElzSUdGd2NHeDVJSFJ2SUdWaFkyZ2dZMmhoYm01bGJGeHVJQ0FnSUNBcUlDMGdTV1lnYVhRbmN5QmhiaUJoY25KaGVTQnZaaUF6SUc5eUlEUWdiblZ0WW1WeWN5d2dZWEJ3YkhrZ1pXeGxiV1Z1ZEMxM2FYTmxMaUJPZFcxaVpYSWdiMllnWld4bGJXVnVkSE1nYm1WbFpDQjBieUJ0WVhSamFDQjBhR1VnYm5WdFltVnlJRzltSUdOb1lXNXVaV3h6WEc0Z0lDQWdJQ29nWm05eUlIUm9aU0JqYjNKeVpYTndiMjVrYVc1bklHbHRZV2RsSUdadmNtMWhkRnh1SUNBZ0lDQXFMMXh1SUNBZ0lHMWxZVzQvT2lCdWRXMWlaWElnZkNCYmJuVnRZbVZ5TENCdWRXMWlaWElzSUc1MWJXSmxjbDBnZkNCYmJuVnRZbVZ5TENCdWRXMWlaWElzSUc1MWJXSmxjaXdnYm5WdFltVnlYVHRjYmlBZ2ZUdGNibjFjYmx4dUx5OGdJMlZ1WkhKbFoybHZibHh1WEc0dkx5QWpjbVZuYVc5dUlFOXdkR2x2Ym5NZ1kyOXRjRzl6YVhScGIyNWNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JVWlc1emIzSkdjbTl0U1cxaFoyVkVZWFJoVDNCMGFXOXVjeUJsZUhSbGJtUnpJRTl3ZEdsdmJsSmxjMmw2WldSRWFXMWxibk5wYjI1ekxDQlBjSFJwYjI1elZHVnVjMjl5Um05eWJXRjBMQ0JQY0hScGIyNXpWR1Z1YzI5eVRHRjViM1YwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUU5d2RHbHZibk5VWlc1emIzSkVZWFJoVkhsd1pTd2dUM0IwYVc5dWMwNXZjbTFoYkdsNllYUnBiMjVRWVhKaGJXVjBaWEp6SUh0OVhHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdWR1Z1YzI5eVJuSnZiVWx0WVdkbFJXeGxiV1Z1ZEU5d2RHbHZibk1nWlhoMFpXNWtjeUJQY0hScGIyNVNaWE5wZW1Wa1JHbHRaVzV6YVc5dWN5d2dUM0IwYVc5dWMxUmxibk52Y2tadmNtMWhkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCUGNIUnBiMjV6VkdWdWMyOXlUR0Y1YjNWMExDQlBjSFJwYjI1elZHVnVjMjl5UkdGMFlWUjVjR1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1QzQjBhVzl1YzA1dmNtMWhiR2w2WVhScGIyNVFZWEpoYldWMFpYSnpJSHQ5WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1ZHVnVjMjl5Um5KdmJWVnliRTl3ZEdsdmJuTWdaWGgwWlc1a2N5QlBjSFJwYjI1elJHbHRaVzV6YVc5dWN5d2dUM0IwYVc5dVVtVnphWHBsWkVScGJXVnVjMmx2Ym5Nc0lFOXdkR2x2Ym5OVVpXNXpiM0pHYjNKdFlYUXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnVDNCMGFXOXVjMVJsYm5OdmNreGhlVzkxZEN3Z1QzQjBhVzl1YzFSbGJuTnZja1JoZEdGVWVYQmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUU5d2RHbHZibk5PYjNKdFlXeHBlbUYwYVc5dVVHRnlZVzFsZEdWeWN5QjdmVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUZSbGJuTnZja1p5YjIxSmJXRm5aVUpwZEcxaGNFOXdkR2x2Ym5NZ1pYaDBaVzVrY3lCUGNIUnBiMjVTWlhOcGVtVmtSR2x0Wlc1emFXOXVjeXdnVDNCMGFXOXVjMVJsYm5OdmNrWnZjbTFoZEN3Z1QzQjBhVzl1YzFSbGJuTnZja3hoZVc5MWRDeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRTl3ZEdsdmJuTlVaVzV6YjNKRVlYUmhWSGx3WlN3Z1QzQjBhVzl1YzA1dmNtMWhiR2w2WVhScGIyNVFZWEpoYldWMFpYSnpJSHQ5WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1ZHVnVjMjl5Um5KdmJWUmxlSFIxY21WUGNIUnBiMjV6UEZRZ1pYaDBaVzVrY3lCVVpXNXpiM0l1VkdWNGRIVnlaVVJoZEdGVWVYQmxjejRnWlhoMFpXNWtjMXh1SUNBZ0lGSmxjWFZwY21Wa1BFOXdkR2x2Ym5ORWFXMWxibk5wYjI1elBpd2dUM0IwYVc5dWMwWnZjbTFoZEN3Z1IzQjFVbVZ6YjNWeVkyVkRiMjV6ZEhKMVkzUnZjbEJoY21GdFpYUmxjbk04VkQ0dktpQlVUMFJQT2lCaFpHUWdiVzl5WlNBcUx5QjdmVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUZSbGJuTnZja1p5YjIxSGNIVkNkV1ptWlhKUGNIUnBiMjV6UEZRZ1pYaDBaVzVrY3lCVVpXNXpiM0l1UjNCMVFuVm1abVZ5UkdGMFlWUjVjR1Z6UGlCbGVIUmxibVJ6WEc0Z0lDQWdVR2xqYXp4VVpXNXpiM0lzSUNka2FXMXpKejRzSUVkd2RWSmxjMjkxY21ObFEyOXVjM1J5ZFdOMGIzSlFZWEpoYldWMFpYSnpQRlErSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRVJsYzJOeWFXSmxjeUIwYUdVZ1pHRjBZU0IwZVhCbElHOW1JSFJvWlNCMFpXNXpiM0l1WEc0Z0lDQXFMMXh1SUNCa1lYUmhWSGx3WlQ4NklGUTdYRzU5WEc1Y2JpOHZJQ05sYm1SeVpXZHBiMjVjYmx4dUx5b3FYRzRnS2lCMGVYQmxJRlJsYm5OdmNrWmhZM1J2Y25rZ1pHVm1hVzVsY3lCMGFHVWdabUZqZEc5eWVTQm1kVzVqZEdsdmJuTWdiMllnSjFSbGJuTnZjaWNnZEc4Z1kzSmxZWFJsSUhSbGJuTnZjaUJwYm5OMFlXNWpaWE1nWm5KdmJTQmxlR2x6ZEdsdVp5QmtZWFJoSUc5eVhHNGdLaUJ5WlhOdmRYSmpaWE11WEc0Z0tpOWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdWR1Z1YzI5eVJtRmpkRzl5ZVNCN1hHNGdJQzhxS2x4dUlDQWdLaUJqY21WaGRHVWdZU0IwWlc1emIzSWdabkp2YlNCaGJpQkpiV0ZuWlVSaGRHRWdiMkpxWldOMFhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQnBiV0ZuWlVSaGRHRWdMU0IwYUdVZ1NXMWhaMlZFWVhSaElHOWlhbVZqZENCMGJ5QmpjbVZoZEdVZ2RHVnVjMjl5SUdaeWIyMWNiaUFnSUNvZ1FIQmhjbUZ0SUc5d2RHbHZibk1nTFNCQmJpQnZjSFJwYjI1aGJDQnZZbXBsWTNRZ2NtVndjbVZ6Wlc1MGFXNW5JRzl3ZEdsdmJuTWdabTl5SUdOeVpXRjBhVzVuSUhSbGJuTnZjaUJtY205dElFbHRZV2RsUkdGMFlTNWNiaUFnSUNwY2JpQWdJQ29nVkdobElHWnZiR3h2ZDJsdVp5QmtaV1poZFd4MElITmxkSFJwYm1keklIZHBiR3dnWW1VZ1lYQndiR2xsWkRwY2JpQWdJQ29nTFNCZ2RHVnVjMjl5Um05eWJXRjBZRG9nWUNkU1IwSW5ZRnh1SUNBZ0tpQXRJR0IwWlc1emIzSk1ZWGx2ZFhSZ09pQmdKMDVEU0ZjbllGeHVJQ0FnS2lBdElHQmtZWFJoVkhsd1pXQTZJR0FuWm14dllYUXpNaWRnWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRUVnY0hKdmJXbHpaU0IwYUdGMElISmxjMjlzZG1WeklIUnZJR0VnZEdWdWMyOXlJRzlpYW1WamRGeHVJQ0FnS2k5Y2JpQWdabkp2YlVsdFlXZGxLR2x0WVdkbFJHRjBZVG9nU1cxaFoyVkVZWFJoTENCdmNIUnBiMjV6UHpvZ1ZHVnVjMjl5Um5KdmJVbHRZV2RsUkdGMFlVOXdkR2x2Ym5NcE9seHVJQ0FnSUNBZ1VISnZiV2x6WlR4VWVYQmxaRlJsYm5OdmNqd25abXh2WVhRek1pYytmRlI1Y0dWa1ZHVnVjMjl5UENkMWFXNTBPQ2MrUGp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nWTNKbFlYUmxJR0VnZEdWdWMyOXlJR1p5YjIwZ1lTQklWRTFNU1cxaFoyVkZiR1Z0Wlc1MElHOWlhbVZqZEZ4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2FXMWhaMlZGYkdWdFpXNTBJQzBnZEdobElFaFVUVXhKYldGblpVVnNaVzFsYm5RZ2IySnFaV04wSUhSdklHTnlaV0YwWlNCMFpXNXpiM0lnWm5KdmJWeHVJQ0FnS2lCQWNHRnlZVzBnYjNCMGFXOXVjeUF0SUVGdUlHOXdkR2x2Ym1Gc0lHOWlhbVZqZENCeVpYQnlaWE5sYm5ScGJtY2diM0IwYVc5dWN5Qm1iM0lnWTNKbFlYUnBibWNnZEdWdWMyOXlJR1p5YjIwZ1NGUk5URWx0WVdkbFJXeGxiV1Z1ZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dWR2hsSUdadmJHeHZkMmx1WnlCa1pXWmhkV3gwSUhObGRIUnBibWR6SUhkcGJHd2dZbVVnWVhCd2JHbGxaRHBjYmlBZ0lDb2dMU0JnZEdWdWMyOXlSbTl5YldGMFlEb2dZQ2RTUjBJbllGeHVJQ0FnS2lBdElHQjBaVzV6YjNKTVlYbHZkWFJnT2lCZ0owNURTRmNuWUZ4dUlDQWdLaUF0SUdCa1lYUmhWSGx3WldBNklHQW5abXh2WVhRek1pZGdYRzRnSUNBcUlFQnlaWFIxY201eklFRWdjSEp2YldselpTQjBhR0YwSUhKbGMyOXNkbVZ6SUhSdklHRWdkR1Z1YzI5eUlHOWlhbVZqZEZ4dUlDQWdLaTljYmlBZ1puSnZiVWx0WVdkbEtHbHRZV2RsUld4bGJXVnVkRG9nU0ZSTlRFbHRZV2RsUld4bGJXVnVkQ3dnYjNCMGFXOXVjejg2SUZSbGJuTnZja1p5YjIxSmJXRm5aVVZzWlcxbGJuUlBjSFJwYjI1ektUcGNiaUFnSUNBZ0lGQnliMjFwYzJVOFZIbHdaV1JVWlc1emIzSThKMlpzYjJGME16SW5QbnhVZVhCbFpGUmxibk52Y2p3bmRXbHVkRGduUGo0N1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUdOeVpXRjBaU0JoSUhSbGJuTnZjaUJtY205dElGVlNURnh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZFhKc1UyOTFjbU5sSUMwZ1lTQnpkSEpwYm1jZ1lYTWdZU0JWVWt3Z2RHOGdkR2hsSUdsdFlXZGxJRzl5SUdFZ1pHRjBZU0JWVWt3Z1kyOXVkR0ZwYm1sdVp5QjBhR1VnYVcxaFoyVWdaR0YwWVM1Y2JpQWdJQ29nUUhCaGNtRnRJRzl3ZEdsdmJuTWdMU0JCYmlCdmNIUnBiMjVoYkNCdlltcGxZM1FnY21Wd2NtVnpaVzUwYVc1bklHOXdkR2x2Ym5NZ1ptOXlJR055WldGMGFXNW5JSFJsYm5OdmNpQm1jbTl0SUZWU1RDNWNiaUFnSUNwY2JpQWdJQ29nVkdobElHWnZiR3h2ZDJsdVp5QmtaV1poZFd4MElITmxkSFJwYm1keklIZHBiR3dnWW1VZ1lYQndiR2xsWkRwY2JpQWdJQ29nTFNCZ2RHVnVjMjl5Um05eWJXRjBZRG9nWUNkU1IwSW5ZRnh1SUNBZ0tpQXRJR0IwWlc1emIzSk1ZWGx2ZFhSZ09pQmdKMDVEU0ZjbllGeHVJQ0FnS2lBdElHQmtZWFJoVkhsd1pXQTZJR0FuWm14dllYUXpNaWRnWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRUVnY0hKdmJXbHpaU0IwYUdGMElISmxjMjlzZG1WeklIUnZJR0VnZEdWdWMyOXlJRzlpYW1WamRGeHVJQ0FnS2k5Y2JpQWdabkp2YlVsdFlXZGxLSFZ5YkZOdmRYSmpaVG9nYzNSeWFXNW5MQ0J2Y0hScGIyNXpQem9nVkdWdWMyOXlSbkp2YlZWeWJFOXdkR2x2Ym5NcE9pQlFjbTl0YVhObFBGUjVjR1ZrVkdWdWMyOXlQQ2RtYkc5aGRETXlKejU4Vkhsd1pXUlVaVzV6YjNJOEozVnBiblE0Sno0K08xeHVYRzRnSUM4cUtseHVJQ0FnS2lCamNtVmhkR1VnWVNCMFpXNXpiM0lnWm5KdmJTQmhiaUJKYldGblpVSnBkRzFoY0NCdlltcGxZM1JjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUdKcGRHMWhjQ0F0SUhSb1pTQkpiV0ZuWlVKcGRHMWhjQ0J2WW1wbFkzUWdkRzhnWTNKbFlYUmxJSFJsYm5OdmNpQm1jbTl0WEc0Z0lDQXFJRUJ3WVhKaGJTQnZjSFJwYjI1eklDMGdRVzRnYjNCMGFXOXVZV3dnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR2x1WnlCdmNIUnBiMjV6SUdadmNpQmpjbVZoZEdsdVp5QjBaVzV6YjNJZ1puSnZiU0JWVWt3dVhHNGdJQ0FxWEc0Z0lDQXFJRlJvWlNCbWIyeHNiM2RwYm1jZ1pHVm1ZWFZzZENCelpYUjBhVzVuY3lCM2FXeHNJR0psSUdGd2NHeHBaV1E2WEc0Z0lDQXFJQzBnWUhSbGJuTnZja1p2Y20xaGRHQTZJR0FuVWtkQ0oyQmNiaUFnSUNvZ0xTQmdkR1Z1YzI5eVRHRjViM1YwWURvZ1lDZE9RMGhYSjJCY2JpQWdJQ29nTFNCZ1pHRjBZVlI1Y0dWZ09pQmdKMlpzYjJGME16SW5ZRnh1SUNBZ0tpQkFjbVYwZFhKdWN5QkJJSEJ5YjIxcGMyVWdkR2hoZENCeVpYTnZiSFpsY3lCMGJ5QmhJSFJsYm5OdmNpQnZZbXBsWTNSY2JpQWdJQ292WEc0Z0lHWnliMjFKYldGblpTaGlhWFJ0WVhBNklFbHRZV2RsUW1sMGJXRndMQ0J2Y0hScGIyNXpPaUJVWlc1emIzSkdjbTl0U1cxaFoyVkNhWFJ0WVhCUGNIUnBiMjV6S1RwY2JpQWdJQ0FnSUZCeWIyMXBjMlU4Vkhsd1pXUlVaVzV6YjNJOEoyWnNiMkYwTXpJblBueFVlWEJsWkZSbGJuTnZjanduZFdsdWREZ25QajQ3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJR055WldGMFpTQmhJSFJsYm5OdmNpQm1jbTl0SUdFZ1YyVmlSMHdnZEdWNGRIVnlaVnh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZEdWNGRIVnlaU0F0SUhSb1pTQlhaV0pIVEZSbGVIUjFjbVVnYjJKcVpXTjBJSFJ2SUdOeVpXRjBaU0IwWlc1emIzSWdabkp2YlZ4dUlDQWdLaUJBY0dGeVlXMGdiM0IwYVc5dWN5QXRJRUZ1SUc5d2RHbHZibUZzSUc5aWFtVmpkQ0J5WlhCeVpYTmxiblJwYm1jZ2IzQjBhVzl1Y3lCbWIzSWdZM0psWVhScGJtY2dkR1Z1YzI5eUlHWnliMjBnVjJWaVIwd2dkR1Y0ZEhWeVpTNWNiaUFnSUNwY2JpQWdJQ29nVkdobElHOXdkR2x2Ym5NZ2FXNWpiSFZrWlNCbWIyeHNiM2RwYm1jZ2NISnZjR1Z5ZEdsbGN6cGNiaUFnSUNvZ0xTQmdkMmxrZEdoZ09pQjBhR1VnZDJsa2RHZ2diMllnZEdobElIUmxlSFIxY21VdUlGSmxjWFZwY21Wa0xseHVJQ0FnS2lBdElHQm9aV2xuYUhSZ09pQjBhR1VnYUdWcFoyaDBJRzltSUhSb1pTQjBaWGgwZFhKbExpQlNaWEYxYVhKbFpDNWNiaUFnSUNvZ0xTQmdabTl5YldGMFlEb2dkR2hsSUdadmNtMWhkQ0J2WmlCMGFHVWdkR1Y0ZEhWeVpTNGdTV1lnYjIxcGRIUmxaQ3dnWVhOemRXMWxJQ2RTUjBKQkp5NWNiaUFnSUNvZ0xTQmdaRzkzYm14dllXUmdPaUJoYmlCdmNIUnBiMjVoYkNCbWRXNWpkR2x2YmlCMGJ5QmtiM2R1Ykc5aFpDQjBhR1VnZEdWdWMyOXlJR1JoZEdFZ1puSnZiU0JIVUZVZ2RHOGdRMUJWTGlCSlppQnZiV2wwZEdWa0xDQjBhR1VnUjFCVklHUmhkR0ZjYmlBZ0lDb2dkMmxzYkNCdWIzUWdZbVVnWVdKc1pTQjBieUJrYjNkdWJHOWhaQzRnVlhOMVlXeHNlU3dnZEdocGN5QnBjeUJ3Y205MmFXUmxaQ0JpZVNCaElFZFFWU0JpWVdOclpXNWtJR1p2Y2lCMGFHVWdhVzVtWlhKbGJtTmxJRzkxZEhCMWRITXVJRlZ6WlhKeklHUnZiaWQwWEc0Z0lDQXFJRzVsWldRZ2RHOGdjSEp2ZG1sa1pTQjBhR2x6SUdaMWJtTjBhVzl1TGx4dUlDQWdLaUF0SUdCa2FYTndiM05sWURvZ1lXNGdiM0IwYVc5dVlXd2dablZ1WTNScGIyNGdkRzhnWkdsemNHOXpaU0IwYUdVZ2RHVnVjMjl5SUdSaGRHRWdiMjRnUjFCVkxpQkpaaUJ2YldsMGRHVmtMQ0IwYUdVZ1IxQlZJR1JoZEdFZ2QybHNiQ0J1YjNRZ1ltVWdaR2x6Y0c5elpXUXVYRzRnSUNBcUlGVnpkV0ZzYkhrc0lIUm9hWE1nYVhNZ2NISnZkbWxrWldRZ1lua2dZU0JIVUZVZ1ltRmphMlZ1WkNCbWIzSWdkR2hsSUdsdVptVnlaVzVqWlNCdmRYUndkWFJ6TGlCVmMyVnljeUJrYjI0bmRDQnVaV1ZrSUhSdklIQnliM1pwWkdVZ2RHaHBjeUJtZFc1amRHbHZiaTVjYmlBZ0lDcGNiaUFnSUNvZ1FISmxkSFZ5Ym5NZ1lTQjBaVzV6YjNJZ2IySnFaV04wWEc0Z0lDQXFMMXh1SUNCbWNtOXRWR1Y0ZEhWeVpUeFVJR1Y0ZEdWdVpITWdWR1Z1YzI5eUxsUmxlSFIxY21WRVlYUmhWSGx3WlhNZ1BTQW5abXh2WVhRek1pYytLRnh1SUNBZ0lDQWdkR1Y0ZEhWeVpUb2dWR1Z1YzI5eUxsUmxlSFIxY21WVWVYQmxMQ0J2Y0hScGIyNXpPaUJVWlc1emIzSkdjbTl0VkdWNGRIVnlaVTl3ZEdsdmJuTThWRDRwT2lCVWVYQmxaRlJsYm5OdmNqd25abXh2WVhRek1pYytPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQmpjbVZoZEdVZ1lTQjBaVzV6YjNJZ1puSnZiU0JoSUZkbFlrZFFWU0JpZFdabVpYSmNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJR0oxWm1abGNpQXRJSFJvWlNCSFVGVkNkV1ptWlhJZ2IySnFaV04wSUhSdklHTnlaV0YwWlNCMFpXNXpiM0lnWm5KdmJWeHVJQ0FnS2lCQWNHRnlZVzBnYjNCMGFXOXVjeUF0SUVGdUlHOXdkR2x2Ym1Gc0lHOWlhbVZqZENCeVpYQnlaWE5sYm5ScGJtY2diM0IwYVc5dWN5Qm1iM0lnWTNKbFlYUnBibWNnZEdWdWMyOXlJR1p5YjIwZ1YyVmlSMUJWSUdKMVptWmxjaTVjYmlBZ0lDcGNiaUFnSUNvZ1ZHaGxJRzl3ZEdsdmJuTWdhVzVqYkhWa1pTQm1iMnhzYjNkcGJtY2djSEp2Y0dWeWRHbGxjenBjYmlBZ0lDb2dMU0JnWkdGMFlWUjVjR1ZnT2lCMGFHVWdaR0YwWVNCMGVYQmxJRzltSUhSb1pTQjBaVzV6YjNJdUlFbG1JRzl0YVhSMFpXUXNJR0Z6YzNWdFpTQW5abXh2WVhRek1pY3VYRzRnSUNBcUlDMGdZR1JwYlhOZ09pQjBhR1VnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0IwWlc1emIzSXVJRkpsY1hWcGNtVmtMbHh1SUNBZ0tpQXRJR0JrYjNkdWJHOWhaR0E2SUdGdUlHOXdkR2x2Ym1Gc0lHWjFibU4wYVc5dUlIUnZJR1J2ZDI1c2IyRmtJSFJvWlNCMFpXNXpiM0lnWkdGMFlTQm1jbTl0SUVkUVZTQjBieUJEVUZVdUlFbG1JRzl0YVhSMFpXUXNJSFJvWlNCSFVGVWdaR0YwWVZ4dUlDQWdLaUIzYVd4c0lHNXZkQ0JpWlNCaFlteGxJSFJ2SUdSdmQyNXNiMkZrTGlCVmMzVmhiR3g1TENCMGFHbHpJR2x6SUhCeWIzWnBaR1ZrSUdKNUlHRWdSMUJWSUdKaFkydGxibVFnWm05eUlIUm9aU0JwYm1abGNtVnVZMlVnYjNWMGNIVjBjeTRnVlhObGNuTWdaRzl1SjNSY2JpQWdJQ29nYm1WbFpDQjBieUJ3Y205MmFXUmxJSFJvYVhNZ1puVnVZM1JwYjI0dVhHNGdJQ0FxSUMwZ1lHUnBjM0J2YzJWZ09pQmhiaUJ2Y0hScGIyNWhiQ0JtZFc1amRHbHZiaUIwYnlCa2FYTndiM05sSUhSb1pTQjBaVzV6YjNJZ1pHRjBZU0J2YmlCSFVGVXVJRWxtSUc5dGFYUjBaV1FzSUhSb1pTQkhVRlVnWkdGMFlTQjNhV3hzSUc1dmRDQmlaU0JrYVhOd2IzTmxaQzVjYmlBZ0lDb2dWWE4xWVd4c2VTd2dkR2hwY3lCcGN5QndjbTkyYVdSbFpDQmllU0JoSUVkUVZTQmlZV05yWlc1a0lHWnZjaUIwYUdVZ2FXNW1aWEpsYm1ObElHOTFkSEIxZEhNdUlGVnpaWEp6SUdSdmJpZDBJRzVsWldRZ2RHOGdjSEp2ZG1sa1pTQjBhR2x6SUdaMWJtTjBhVzl1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjbVYwZFhKdWN5QmhJSFJsYm5OdmNpQnZZbXBsWTNSY2JpQWdJQ292WEc0Z0lHWnliMjFIY0hWQ2RXWm1aWEk4VkNCbGVIUmxibVJ6SUZSbGJuTnZjaTVIY0hWQ2RXWm1aWEpFWVhSaFZIbHdaWE0rS0Z4dUlDQWdJQ0FnWW5WbVptVnlPaUJVWlc1emIzSXVSM0IxUW5WbVptVnlWSGx3WlN3Z2IzQjBhVzl1Y3pvZ1ZHVnVjMjl5Um5KdmJVZHdkVUoxWm1abGNrOXdkR2x2Ym5NOFZENHBPaUJVZVhCbFpGUmxibk52Y2p4VVBqdGNibHh1SUNBdktpcGNiaUFnSUNvZ1kzSmxZWFJsSUdFZ2RHVnVjMjl5SUdaeWIyMGdZU0J3Y21VdFlXeHNiMk5oZEdWa0lHSjFabVpsY2k0Z1ZHaGxJR0oxWm1abGNpQjNhV3hzSUdKbElIVnpaV1FnWVhNZ1lTQndhVzV1WldRZ1luVm1abVZ5TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2RIbHdaU0F0SUhSb1pTQjBaVzV6YjNJZ1pXeGxiV1Z1ZENCMGVYQmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ1luVm1abVZ5SUMwZ1lTQlVlWEJsWkVGeWNtRjVJR052Y25KbGMzQnZibVJwYm1jZ2RHOGdkR2hsSUhSNWNHVXVYRzRnSUNBcUlFQndZWEpoYlNCa2FXMXpJQzBnYzNCbFkybG1lU0IwYUdVZ1pHbHRaVzV6YVc5dUlHOW1JSFJvWlNCMFpXNXpiM0l1SUVsbUlHOXRhWFIwWldRc0lHRWdNUzFFSUhSbGJuTnZjaUJwY3lCaGMzTjFiV1ZrTGx4dUlDQWdLbHh1SUNBZ0tpQkFjbVYwZFhKdWN5QmhJSFJsYm5OdmNpQnZZbXBsWTNSY2JpQWdJQ292WEc0Z0lHWnliMjFRYVc1dVpXUkNkV1ptWlhJOFZDQmxlSFJsYm1SeklFVjRZMngxWkdVOFZHVnVjMjl5TGxSNWNHVXNJQ2R6ZEhKcGJtY25QajRvWEc0Z0lDQWdJQ0IwZVhCbE9pQlVMQ0JpZFdabVpYSTZJRlJsYm5OdmNpNUVZWFJoVkhsd1pVMWhjRnRVWFN3Z1pHbHRjejg2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkS1RvZ1ZIbHdaV1JVWlc1emIzSThWRDQ3WEc1OVhHNGlMQ0FpTHk4Z1EyOXdlWEpwWjJoMElDaGpLU0JOYVdOeWIzTnZablFnUTI5eWNHOXlZWFJwYjI0dUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzR2THlCTWFXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1RVbFVJRXhwWTJWdWMyVXVYRzVjYmk4cUtseHVJQ29nUVNCemRISnBibWNnZEdoaGRDQnlaWEJ5WlhObGJuUnpJR0VnWm1sc1pTZHpJRlZTVENCdmNpQndZWFJvTGx4dUlDcGNiaUFxSUZCaGRHZ2dhWE1nZG1GcGJHRmliR1VnYjI1c2VTQnBiaUJ2Ym01NGNuVnVkR2x0WlMxdWIyUmxJRzl5SUc5dWJuaHlkVzUwYVcxbExYZGxZaUJ5ZFc1dWFXNW5JR2x1SUU1dlpHVXVhbk11WEc0Z0tpOWNibVY0Y0c5eWRDQjBlWEJsSUVacGJHVlZjbXhQY2xCaGRHZ2dQU0J6ZEhKcGJtYzdYRzVjYmk4cUtseHVJQ29nUVNCQ2JHOWlJRzlpYW1WamRDQjBhR0YwSUhKbGNISmxjMlZ1ZEhNZ1lTQm1hV3hsTGx4dUlDb3ZYRzVsZUhCdmNuUWdkSGx3WlNCR2FXeGxRbXh2WWlBOUlFSnNiMkk3WEc1Y2JpOHFLbHh1SUNvZ1FTQlZhVzUwT0VGeWNtRjVMQ0JCY25KaGVVSjFabVpsY2lCdmNpQlRhR0Z5WldSQmNuSmhlVUoxWm1abGNpQnZZbXBsWTNRZ2RHaGhkQ0J5WlhCeVpYTmxiblJ6SUdFZ1ptbHNaU0JqYjI1MFpXNTBMbHh1SUNwY2JpQXFJRmRvWlc0Z2FYUWdhWE1nWVc0Z1FYSnlZWGxDZFdabVpYSWdiM0lnVTJoaGNtVmtRWEp5WVhsQ2RXWm1aWElzSUhSb1pTQjNhRzlzWlNCaWRXWm1aWElnYVhNZ1lYTnpkVzFsWkNCMGJ5QmlaU0IwYUdVZ1ptbHNaU0JqYjI1MFpXNTBMbHh1SUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JHYVd4bFJHRjBZU0E5SUZWcGJuUTRRWEp5WVhsOFFYSnlZWGxDZFdabVpYSk1hV3RsTzF4dVhHNHZLaXBjYmlBcUlGSmxjSEpsYzJWdWRITWdZU0JtYVd4bElIUm9ZWFFnWTJGdUlHSmxJR3h2WVdSbFpDQmllU0IwYUdVZ1QwNU9XQ0JTZFc1MGFXMWxJRXBoZG1GVFkzSnBjSFFnUVZCSkxseHVJQ292WEc1bGVIQnZjblFnZEhsd1pTQkdhV3hsVkhsd1pTQTlJRVpwYkdWVmNteFBjbEJoZEdoOFJtbHNaVUpzYjJKOFJtbHNaVVJoZEdFN1hHNWNiaThxS2x4dUlDb2dVbVZ3Y21WelpXNTBjeUJoYmlCbGVIUmxjbTVoYkNCa1lYUmhJR1pwYkdVdVhHNGdLaTljYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnUlhoMFpYSnVZV3hFWVhSaFJtbHNaVVJsYzJOeWFYQjBhVzl1SUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRk53WldOcFpua2dkR2hsSUdWNGRHVnlibUZzSUdSaGRHRWdabWxzWlM1Y2JpQWdJQ292WEc0Z0lHUmhkR0U2SUVacGJHVlVlWEJsTzF4dUlDQXZLaXBjYmlBZ0lDb2dVM0JsWTJsbWVTQjBhR1VnWm1sc1pTQndZWFJvTGx4dUlDQWdLaTljYmlBZ2NHRjBhRG9nYzNSeWFXNW5PMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGSmxjSEpsYzJWdWRITWdZVzRnWlhoMFpYSnVZV3dnWkdGMFlTQm1hV3hsTGx4dUlDcGNiaUFxSUZkb1pXNGdkWE5wYm1jZ1lTQnpkSEpwYm1jc0lHbDBJSE5vYjNWc1pDQmlaU0JoSUdacGJHVWdWVkpNSUc5eUlIQmhkR2dnZEdoaGRDQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmtnWVhNZ2RHaGxJRzF2WkdWc0lHWnBiR1V1WEc0Z0tpOWNibVY0Y0c5eWRDQjBlWEJsSUVWNGRHVnlibUZzUkdGMFlVWnBiR1ZVZVhCbElEMGdSWGgwWlhKdVlXeEVZWFJoUm1sc1pVUmxjMk55YVhCMGFXOXVmRVpwYkdWVmNteFBjbEJoZEdnN1hHNWNiaThxS2x4dUlDb2dUM0IwYVc5dWN5Qm1iM0lnYlc5a1pXd2diRzloWkdsdVp5NWNiaUFxTDF4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCUGJtNTRUVzlrWld4UGNIUnBiMjV6SUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRk53WldOcFpubHBibWNnWVNCc2FYTjBJRzltSUdacGJHVnpJSFJvWVhRZ2NtVndjbVZ6Wlc1MGN5QjBhR1VnWlhoMFpYSnVZV3dnWkdGMFlTNWNiaUFnSUNvdlhHNGdJR1Y0ZEdWeWJtRnNSR0YwWVQ4NklISmxZV1J2Ym14NUlFVjRkR1Z5Ym1Gc1JHRjBZVVpwYkdWVWVYQmxXMTA3WEc1OVhHNGlMQ0FpTHk4Z1EyOXdlWEpwWjJoMElDaGpLU0JOYVdOeWIzTnZablFnUTI5eWNHOXlZWFJwYjI0dUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzR2THlCTWFXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1RVbFVJRXhwWTJWdWMyVXVYRzVjYm1sdGNHOXlkQ0I3VkdWdWMyOXlmU0JtY205dElDY3VMM1JsYm5OdmNpNXFjeWM3WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRTV2YmxSbGJuTnZjbFI1Y0dVZ1BTQnVaWFpsY2p0Y2JseHVMeW9xWEc0Z0tpQlVlWEJsSUU5dWJuaFdZV3gxWlNCU1pYQnlaWE5sYm5SeklHSnZkR2dnZEdWdWMyOXljeUJoYm1RZ2JtOXVMWFJsYm5OdmNuTWdkbUZzZFdVZ1ptOXlJRzF2WkdWc0ozTWdhVzV3ZFhSekwyOTFkSEIxZEhNdVhHNGdLbHh1SUNvZ1RrOVVSVG9nWTNWeWNtVnVkR3g1SUc1dmRDQnpkWEJ3YjNKMElHNXZiaTEwWlc1emIzSmNiaUFxTDF4dVpYaHdiM0owSUhSNWNHVWdUMjV1ZUZaaGJIVmxJRDBnVkdWdWMyOXlmRTV2YmxSbGJuTnZjbFI1Y0dVN1hHNWNiaThxS2x4dUlDb2dWSGx3WlNCUGJtNTRWbUZzZFdWRVlYUmhURzlqWVhScGIyNGdjbVZ3Y21WelpXNTBjeUIwYUdVZ2JHOWpZWFJwYjI0Z2IyWWdkR2hsSUdSaGRHRWdiMllnWVc0Z1QyNXVlRlpoYkhWbExseHVJQ292WEc1bGVIQnZjblFnZEhsd1pTQlBibTU0Vm1Gc2RXVkVZWFJoVEc5allYUnBiMjRnUFNCVVpXNXpiM0l1UkdGMFlVeHZZMkYwYVc5dU8xeHVJaXdnSWk4dklFTnZjSGx5YVdkb2RDQW9ZeWtnVFdsamNtOXpiMlowSUVOdmNuQnZjbUYwYVc5dUxpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1THk4Z1RHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFMUpWQ0JNYVdObGJuTmxMbHh1WEc1cGJYQnZjblFnZTNKbGMyOXNkbVZDWVdOclpXNWtRVzVrUlhobFkzVjBhVzl1VUhKdmRtbGtaWEp6ZlNCbWNtOXRJQ2N1TDJKaFkydGxibVF0YVcxd2JDNXFjeWM3WEc1cGJYQnZjblFnZTFObGMzTnBiMjVJWVc1a2JHVnlMQ0JVY21GcGJtbHVaMU5sYzNOcGIyNUlZVzVrYkdWeWZTQm1jbTl0SUNjdUwySmhZMnRsYm1RdWFuTW5PMXh1YVcxd2IzSjBJSHRKYm1abGNtVnVZMlZUWlhOemFXOXVJR0Z6SUVsdVptVnlaVzVqWlZObGMzTnBiMjU5SUdaeWIyMGdKeTR2YVc1bVpYSmxibU5sTFhObGMzTnBiMjR1YW5Nbk8xeHVhVzF3YjNKMElIdFBibTU0Vm1Gc2RXVjlJR1p5YjIwZ0p5NHZiMjV1ZUMxMllXeDFaUzVxY3ljN1hHNXBiWEJ2Y25RZ2UxUmxibk52Y24wZ1puSnZiU0FuTGk5MFpXNXpiM0l1YW5Nbk8xeHVhVzF3YjNKMElIdFVjbUZwYm1sdVoxTmxjM05wYjI0Z1lYTWdWSEpoYVc1cGJtZFRaWE56YVc5dVNXNTBaWEptWVdObExDQlVjbUZwYm1sdVoxTmxjM05wYjI1RGNtVmhkR1ZQY0hScGIyNXpmU0JtY205dElDY3VMM1J5WVdsdWFXNW5MWE5sYzNOcGIyNHVhbk1uTzF4dVhHNTBlWEJsSUZObGMzTnBiMjVQY0hScGIyNXpJRDBnU1c1bVpYSmxibU5sVTJWemMybHZiaTVUWlhOemFXOXVUM0IwYVc5dWN6dGNiblI1Y0dVZ1JtVmxaSE5VZVhCbElEMGdTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpNUdaV1ZrYzFSNWNHVTdYRzUwZVhCbElFWmxkR05vWlhOVWVYQmxJRDBnU1c1bVpYSmxibU5sVTJWemMybHZiaTVHWlhSamFHVnpWSGx3WlR0Y2JuUjVjR1VnVW1WMGRYSnVWSGx3WlNBOUlFbHVabVZ5Wlc1alpWTmxjM05wYjI0dVVtVjBkWEp1Vkhsd1pUdGNiblI1Y0dVZ1VuVnVUM0IwYVc5dWN5QTlJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNHVVblZ1VDNCMGFXOXVjenRjYmx4dVkyOXVjM1FnYm05Q1lXTnJaVzVrUlhKeVRYTm5PaUJ6ZEhKcGJtY2dQU0FuVkhKaGFXNXBibWNnWW1GamEyVnVaQ0JqYjNWc1pDQnViM1FnWW1VZ2NtVnpiMngyWldRdUlDY2dLMXh1SUNBZ0lDZE5ZV3RsSUhOMWNtVWdlVzkxWEZ3bmNtVWdkWE5wYm1jZ2RHaGxJR052Y25KbFkzUWdZMjl1Wm1sbmRYSmhkR2x2YmlBbUlGZGxZa0Z6YzJWdFlteDVJR1pwYkdWekxpYzdYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlVjbUZwYm1sdVoxTmxjM05wYjI0Z2FXMXdiR1Z0Wlc1MGN5QlVjbUZwYm1sdVoxTmxjM05wYjI1SmJuUmxjbVpoWTJVZ2UxeHVJQ0J3Y21sMllYUmxJR052Ym5OMGNuVmpkRzl5S0doaGJtUnNaWEk2SUZSeVlXbHVhVzVuVTJWemMybHZia2hoYm1Sc1pYSXNJR2hoYzA5d2RHbHRhWHBsY2sxdlpHVnNPaUJpYjI5c1pXRnVMQ0JvWVhORmRtRnNUVzlrWld3NklHSnZiMnhsWVc0cElIdGNiaUFnSUNCMGFHbHpMbWhoYm1Sc1pYSWdQU0JvWVc1a2JHVnlPMXh1SUNBZ0lIUm9hWE11YUdGelQzQjBhVzFwZW1WeVRXOWtaV3dnUFNCb1lYTlBjSFJwYldsNlpYSk5iMlJsYkR0Y2JpQWdJQ0IwYUdsekxtaGhjMFYyWVd4TmIyUmxiQ0E5SUdoaGMwVjJZV3hOYjJSbGJEdGNiaUFnZlZ4dUlDQndjbWwyWVhSbElHaGhibVJzWlhJNklGUnlZV2x1YVc1blUyVnpjMmx2YmtoaGJtUnNaWEk3WEc0Z0lIQnlhWFpoZEdVZ2FHRnpUM0IwYVcxcGVtVnlUVzlrWld3NklHSnZiMnhsWVc0N1hHNGdJSEJ5YVhaaGRHVWdhR0Z6UlhaaGJFMXZaR1ZzT2lCaWIyOXNaV0Z1TzF4dVhHNGdJR2RsZENCMGNtRnBibWx1WjBsdWNIVjBUbUZ0WlhNb0tUb2djbVZoWkc5dWJIa2djM1J5YVc1blcxMGdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWhoYm1Sc1pYSXVhVzV3ZFhST1lXMWxjenRjYmlBZ2ZWeHVJQ0JuWlhRZ2RISmhhVzVwYm1kUGRYUndkWFJPWVcxbGN5Z3BPaUJ5WldGa2IyNXNlU0J6ZEhKcGJtZGJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YUdGdVpHeGxjaTV2ZFhSd2RYUk9ZVzFsY3p0Y2JpQWdmVnh1WEc0Z0lHZGxkQ0JsZG1Gc1NXNXdkWFJPWVcxbGN5Z3BPaUJ5WldGa2IyNXNlU0J6ZEhKcGJtZGJYU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVhR0Z6UlhaaGJFMXZaR1ZzS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NW9ZVzVrYkdWeUxtVjJZV3hKYm5CMWRFNWhiV1Z6TzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxUm9hWE1nZEhKaGFXNXBibWNnYzJWemMybHZiaUJvWVhNZ2JtOGdaWFpoYkUxdlpHVnNJR3h2WVdSbFpDNG5LVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdaMlYwSUdWMllXeFBkWFJ3ZFhST1lXMWxjeWdwT2lCeVpXRmtiMjVzZVNCemRISnBibWRiWFNCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11YUdGelJYWmhiRTF2WkdWc0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVvWVc1a2JHVnlMbVYyWVd4UGRYUndkWFJPWVcxbGN6dGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RVYUdseklIUnlZV2x1YVc1bklITmxjM05wYjI0Z2FHRnpJRzV2SUdWMllXeE5iMlJsYkNCc2IyRmtaV1F1SnlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdGemVXNWpJR055WldGMFpTaDBjbUZwYm1sdVowOXdkR2x2Ym5NNklGUnlZV2x1YVc1blUyVnpjMmx2YmtOeVpXRjBaVTl3ZEdsdmJuTXNJSE5sYzNOcGIyNVBjSFJwYjI1elB6b2dVMlZ6YzJsdmJrOXdkR2x2Ym5NcE9seHVJQ0FnSUNBZ1VISnZiV2x6WlR4VWNtRnBibWx1WjFObGMzTnBiMjQrSUh0Y2JpQWdJQ0JqYjI1emRDQmxkbUZzVFc5a1pXdzZJSE4wY21sdVozeFZhVzUwT0VGeWNtRjVJRDBnZEhKaGFXNXBibWRQY0hScGIyNXpMbVYyWVd4TmIyUmxiQ0I4ZkNBbkp6dGNiaUFnSUNCamIyNXpkQ0J2Y0hScGJXbDZaWEpOYjJSbGJEb2djM1J5YVc1bmZGVnBiblE0UVhKeVlYa2dQU0IwY21GcGJtbHVaMDl3ZEdsdmJuTXViM0IwYVcxcGVtVnlUVzlrWld3Z2ZId2dKeWM3WEc0Z0lDQWdZMjl1YzNRZ2IzQjBhVzl1Y3pvZ1UyVnpjMmx2Yms5d2RHbHZibk1nUFNCelpYTnphVzl1VDNCMGFXOXVjeUI4ZkNCN2ZUdGNibHh1SUNBZ0lDOHZJSEpsYzI5c2RtVWdZbUZqYTJWdVpDd2dkWEJrWVhSbElITmxjM05wYjI0Z2IzQjBhVzl1Y3lCM2FYUm9JSFpoYkdsa1lYUmxaQ0JGVUhNc0lHRnVaQ0JqY21WaGRHVWdjMlZ6YzJsdmJpQm9ZVzVrYkdWeVhHNGdJQ0FnWTI5dWMzUWdXMkpoWTJ0bGJtUXNJRzl3ZEdsdmJuTlhhWFJvVm1Gc2FXUmhkR1ZrUlZCelhTQTlJR0YzWVdsMElISmxjMjlzZG1WQ1lXTnJaVzVrUVc1a1JYaGxZM1YwYVc5dVVISnZkbWxrWlhKektHOXdkR2x2Ym5NcE8xeHVJQ0FnSUdsbUlDaGlZV05yWlc1a0xtTnlaV0YwWlZSeVlXbHVhVzVuVTJWemMybHZia2hoYm1Sc1pYSXBJSHRjYmlBZ0lDQWdJR052Ym5OMElHaGhibVJzWlhJZ1BTQmhkMkZwZENCaVlXTnJaVzVrTG1OeVpXRjBaVlJ5WVdsdWFXNW5VMlZ6YzJsdmJraGhibVJzWlhJb1hHNGdJQ0FnSUNBZ0lDQWdkSEpoYVc1cGJtZFBjSFJwYjI1ekxtTm9aV05yY0c5cGJuUlRkR0YwWlN3Z2RISmhhVzVwYm1kUGNIUnBiMjV6TG5SeVlXbHVUVzlrWld3c0lHVjJZV3hOYjJSbGJDd2diM0IwYVcxcGVtVnlUVzlrWld3c1hHNGdJQ0FnSUNBZ0lDQWdiM0IwYVc5dWMxZHBkR2hXWVd4cFpHRjBaV1JGVUhNcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QlVjbUZwYm1sdVoxTmxjM05wYjI0b2FHRnVaR3hsY2l3Z0lTRjBjbUZwYm1sdVowOXdkR2x2Ym5NdWIzQjBhVzFwZW1WeVRXOWtaV3dzSUNFaGRISmhhVzVwYm1kUGNIUnBiMjV6TG1WMllXeE5iMlJsYkNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaHViMEpoWTJ0bGJtUkZjbkpOYzJjcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQklaV3h3WlhJZ1puVnVZM1JwYjI0Z1ptOXlJSEoxYmxSeVlXbHVVM1JsY0NCaGJtUWdablYwZFhKbElISjFibE4wWlhBZ2JXVjBhRzlrY3lCMGFHRjBJR2hoYm1Sc1pYTWdkR2hsSUhSNWNHVXRibUZ5Y205M2FXNW5JR052Ym5abGNuTnBiMjRnWm5KdmJWeHVJQ0FnS2lCMGFHVWdaMmwyWlc0Z2NHRnlZVzFsZEdWeWN5QjBieUJUWlhOemFXOXVTR0Z1Wkd4bGNpNUdaWFJqYUdWelZIbHdaU0JoYm1RZ1VuVnVUM0IwYVc5dWN5NWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJR2x1Y0hWMFRtRnRaWE1nZEdobElHWmxaV1J6SUc5aWFtVmpkQ0JwY3lCamFHVmphMlZrSUhSb1lYUWdkR2hsZVNCamIyNTBZV2x1SUdGc2JDQnBibkIxZENCdVlXMWxjeUJwYmlCMGFHVWdjSEp2ZG1sa1pXUWdiR2x6ZENCdlppQnBibkIxZEZ4dUlDQWdLaUJ1WVcxbGN5NWNiaUFnSUNvZ1FIQmhjbUZ0SUc5MWRIQjFkRTVoYldWeklIUm9aU0JtWlhSamFHVnpJRzlpYW1WamRDQnBjeUJqYUdWamEyVmtJSFJvWVhRZ2RHaGxhWElnYTJWNWN5QnRZWFJqYUNCMWNDQjNhWFJvSUhaaGJHbGtJRzVoYldWeklHbHVJSFJvWlNCc2FYTjBJRzltSUc5MWRIQjFkRnh1SUNBZ0tpQnVZVzFsY3k1Y2JpQWdJQ29nUUhCaGNtRnRJR1psWldSeklIUm9aU0J5WlhGMWFYSmxaQ0JwYm5CMWRGeHVJQ0FnS2lCQWNHRnlZVzBnWVhKbk1TQnVZWEp5YjNkbFpDQW1JR052Ym5abGNuUmxaQ0JwYm5SdklIUm9aU0JUWlhOemFXOXVTR0Z1Wkd4bGNpNUdaWFJqYUdWelZIbHdaU0J2Y2lCU2RXNVBjSFJwYjI1eklHOWlhbVZqZEZ4dUlDQWdLaUJBY0dGeVlXMGdZWEpuTWlCdmNIUnBiMjVoYkNCU2RXNVBjSFJwYjI1eklHOWlhbVZqZEM1Y2JpQWdJQ29nUUhKbGRIVnlibk5jYmlBZ0lDb3ZYRzRnSUhSNWNHVk9ZWEp5YjNkcGJtZEdiM0pTZFc1VGRHVndLRnh1SUNBZ0lDQWdhVzV3ZFhST1lXMWxjem9nY21WaFpHOXViSGtnYzNSeWFXNW5XMTBzSUc5MWRIQjFkRTVoYldWek9pQnlaV0ZrYjI1c2VTQnpkSEpwYm1kYlhTd2dabVZsWkhNNklFWmxaV1J6Vkhsd1pTd2dZWEpuTVQ4NklFWmxkR05vWlhOVWVYQmxmRkoxYms5d2RHbHZibk1zWEc0Z0lDQWdJQ0JoY21jeVB6b2dVblZ1VDNCMGFXOXVjeWs2SUZ0VFpYTnphVzl1U0dGdVpHeGxjaTVHWlhSamFHVnpWSGx3WlN3Z1VuVnVUM0IwYVc5dWMxMGdlMXh1SUNBZ0lHTnZibk4wSUdabGRHTm9aWE02SUh0YmJtRnRaVG9nYzNSeWFXNW5YVG9nVDI1dWVGWmhiSFZsZkc1MWJHeDlJRDBnZTMwN1hHNGdJQ0FnYkdWMElHOXdkR2x2Ym5NNklGSjFiazl3ZEdsdmJuTWdQU0I3ZlR0Y2JpQWdJQ0F2THlCamFHVmpheUJwYm5CMWRITmNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHWmxaV1J6SUNFOVBTQW5iMkpxWldOMEp5QjhmQ0JtWldWa2N5QTlQVDBnYm5Wc2JDQjhmQ0JtWldWa2N5QnBibk4wWVc1alpXOW1JRlJsYm5OdmNpQjhmQ0JCY25KaGVTNXBjMEZ5Y21GNUtHWmxaV1J6S1NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpaGNiaUFnSUNBZ0lDQWdJQ0FuWEZ3blptVmxaSE5jWENjZ2JYVnpkQ0JpWlNCaGJpQnZZbXBsWTNRZ2RHaGhkQ0IxYzJVZ2FXNXdkWFFnYm1GdFpYTWdZWE1nYTJWNWN5QmhibVFnVDI1dWVGWmhiSFZsSUdGeklHTnZjbkpsYzNCdmJtUnBibWNnZG1Gc2RXVnpMaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCcGMwWmxkR05vWlhORmJYQjBlU0E5SUhSeWRXVTdYRzRnSUNBZ0x5OGdaR1YwWlhKdGFXNWxJSGRvYVdOb0lHOTJaWEp5YVdSbElHbHpJR0psYVc1bklIVnpaV1JjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR0Z5WnpFZ1BUMDlJQ2R2WW1wbFkzUW5LU0I3WEc0Z0lDQWdJQ0JwWmlBb1lYSm5NU0E5UFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1ZIbHdaVVZ5Y205eUtDZFZibVY0Y0dWamRHVmtJR0Z5WjNWdFpXNTBXekZkT2lCallXNXViM1FnWW1VZ2JuVnNiQzRuS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDaGhjbWN4SUdsdWMzUmhibU5sYjJZZ1ZHVnVjMjl5S1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9KMXhjSjJabGRHTm9aWE5jWENjZ1kyRnVibTkwSUdKbElHRWdWR1Z1YzI5eUp5azdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR2xtSUNoQmNuSmhlUzVwYzBGeWNtRjVLR0Z5WnpFcEtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoaGNtY3hMbXhsYm1kMGFDQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvSjF4Y0oyWmxkR05vWlhOY1hDY2dZMkZ1Ym05MElHSmxJR0Z1SUdWdGNIUjVJR0Z5Y21GNUxpY3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdselJtVjBZMmhsYzBWdGNIUjVJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJQzh2SUc5MWRIQjFkQ0J1WVcxbGMxeHVJQ0FnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJRzVoYldVZ2IyWWdZWEpuTVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYm1GdFpTQWhQVDBnSjNOMGNtbHVaeWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvSjF4Y0oyWmxkR05vWlhOY1hDY2diWFZ6ZENCaVpTQmhJSE4wY21sdVp5QmhjbkpoZVNCdmNpQmhiaUJ2WW1wbFkzUXVKeWs3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJR2xtSUNodmRYUndkWFJPWVcxbGN5NXBibVJsZUU5bUtHNWhiV1VwSUQwOVBTQXRNU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRkpoYm1kbFJYSnliM0lvWUNkbVpYUmphR1Z6SnlCamIyNTBZV2x1Y3lCcGJuWmhiR2xrSUc5MWRIQjFkQ0J1WVcxbE9pQWtlMjVoYldWOUxtQXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQm1aWFJqYUdWelcyNWhiV1ZkSUQwZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdZWEpuTWlBOVBUMGdKMjlpYW1WamRDY2dKaVlnWVhKbk1pQWhQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0FnSUc5d2RHbHZibk1nUFNCaGNtY3lPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJoY21jeUlDRTlQU0FuZFc1a1pXWnBibVZrSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvSjF4Y0oyOXdkR2x2Ym5OY1hDY2diWFZ6ZENCaVpTQmhiaUJ2WW1wbFkzUXVKeWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUM4dklHUmxZMmxrWlNCM2FHVjBhR1Z5SUdGeVp6RWdhWE1nWm1WMFkyaGxjeUJ2Y2lCdmNIUnBiMjV6WEc0Z0lDQWdJQ0FnSUM4dklHbG1JR0Z1ZVNCdmRYUndkWFFnYm1GdFpTQnBjeUJ3Y21WelpXNTBJR0Z1WkNCcGRITWdkbUZzZFdVZ2FYTWdkbUZzYVdRZ1QyNXVlRlpoYkhWbExDQjNaU0JqYjI1emFXUmxjaUJwZENCbVpYUmphR1Z6WEc0Z0lDQWdJQ0FnSUd4bGRDQnBjMFpsZEdOb1pYTWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1lYSm5NVXRsZVhNZ1BTQlBZbXBsWTNRdVoyVjBUM2R1VUhKdmNHVnlkSGxPWVcxbGN5aGhjbWN4S1R0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQnVZVzFsSUc5bUlHOTFkSEIxZEU1aGJXVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR0Z5WnpGTFpYbHpMbWx1WkdWNFQyWW9ibUZ0WlNrZ0lUMDlJQzB4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQjJJRDBnS0dGeVp6RWdZWE1nU1c1bVpYSmxibU5sVTJWemMybHZiaTVPZFd4c1lXSnNaVTl1Ym5oV1lXeDFaVTFoY0ZSNWNHVXBXMjVoYldWZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIWWdQVDA5SUc1MWJHd2dmSHdnZGlCcGJuTjBZVzVqWlc5bUlGUmxibk52Y2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGMwWmxkR05vWlhNZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwYzBabGRHTm9aWE5GYlhCMGVTQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbVpYUmphR1Z6VzI1aGJXVmRJRDBnZGp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JwWmlBb2FYTkdaWFJqYUdWektTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCaGNtY3lJRDA5UFNBbmIySnFaV04wSnlBbUppQmhjbWN5SUNFOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2Y0hScGIyNXpJRDBnWVhKbk1qdGNiaUFnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJoY21jeUlDRTlQU0FuZFc1a1pXWnBibVZrSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUZSNWNHVkZjbkp2Y2lnblhGd25iM0IwYVc5dWMxeGNKeUJ0ZFhOMElHSmxJR0Z1SUc5aWFtVmpkQzRuS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnYjNCMGFXOXVjeUE5SUdGeVp6RWdZWE1nVW5WdVQzQjBhVzl1Y3p0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaVzltSUdGeVp6RWdJVDA5SUNkMWJtUmxabWx1WldRbktTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RWYm1WNGNHVmpkR1ZrSUdGeVozVnRaVzUwV3pGZE9pQnRkWE4wSUdKbElGeGNKMlpsZEdOb1pYTmNYQ2NnYjNJZ1hGd25iM0IwYVc5dWMxeGNKeTRuS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCamFHVmpheUJwWmlCaGJHd2dhVzV3ZFhSeklHRnlaU0JwYmlCbVpXVmtYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQnVZVzFsSUc5bUlHbHVjSFYwVG1GdFpYTXBJSHRjYmlBZ0lDQWdJR2xtSUNoMGVYQmxiMllnWm1WbFpITmJibUZ0WlYwZ1BUMDlJQ2QxYm1SbFptbHVaV1FuS1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ2FXNXdkWFFnSnlSN2JtRnRaWDBuSUdseklHMXBjM05wYm1jZ2FXNGdKMlpsWldSekp5NWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJwWmlCdWJ5Qm1aWFJqYUdWeklHbHpJSE53WldOcFptbGxaQ3dnZDJVZ2RYTmxJSFJvWlNCbWRXeHNJRzkxZEhCMWRDQnVZVzFsY3lCc2FYTjBYRzRnSUNBZ2FXWWdLR2x6Um1WMFkyaGxjMFZ0Y0hSNUtTQjdYRzRnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJRzVoYldVZ2IyWWdiM1YwY0hWMFRtRnRaWE1wSUh0Y2JpQWdJQ0FnSUNBZ1ptVjBZMmhsYzF0dVlXMWxYU0E5SUc1MWJHdzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUZ0bVpYUmphR1Z6TENCdmNIUnBiMjV6WFR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQklaV3h3WlhJZ2JXVjBhRzlrSUdadmNpQnlkVzVVY21GcGJsTjBaWEFnWVc1a0lHRnVlU0J2ZEdobGNpQnlkVzVUZEdWd0lHMWxkR2h2WkhNdUlGUmhhMlZ6SUhSb1pTQlNaWFIxY201VWVYQmxJSEpsYzNWc2RDQm1jbTl0SUhSb1pTQlRaWE56YVc5dVNHRnVaR3hsY2x4dUlDQWdLaUJoYm1RZ1kyaGhibWRsY3lCcGRDQnBiblJ2SUdFZ2JXRndJRzltSUZSbGJuTnZjbk11WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCeVpYTjFiSFJ6WEc0Z0lDQXFJRUJ5WlhSMWNtNXpYRzRnSUNBcUwxeHVJQ0JqYjI1MlpYSjBTR0Z1Wkd4bGNsSmxkSFZ5YmxSNWNHVlViMDFoY0U5bVZHVnVjMjl5Y3loeVpYTjFiSFJ6T2lCVFpYTnphVzl1U0dGdVpHeGxjaTVTWlhSMWNtNVVlWEJsS1RvZ1VtVjBkWEp1Vkhsd1pTQjdYRzRnSUNBZ1kyOXVjM1FnY21WMGRYSnVWbUZzZFdVNklIdGJibUZ0WlRvZ2MzUnlhVzVuWFRvZ1QyNXVlRlpoYkhWbGZTQTlJSHQ5TzF4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnYTJWNUlHbHVJSEpsYzNWc2RITXBJSHRjYmlBZ0lDQWdJR2xtSUNoUFltcGxZM1F1YUdGelQzZHVVSEp2Y0dWeWRIa3VZMkZzYkNoeVpYTjFiSFJ6TENCclpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsYzNWc2RDQTlJSEpsYzNWc2RITmJhMlY1WFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEpsYzNWc2RDQnBibk4wWVc1alpXOW1JRlJsYm5OdmNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnlibFpoYkhWbFcydGxlVjBnUFNCeVpYTjFiSFE3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1Vm1Gc2RXVmJhMlY1WFNBOUlHNWxkeUJVWlc1emIzSW9jbVZ6ZFd4MExuUjVjR1VzSUhKbGMzVnNkQzVrWVhSaExDQnlaWE4xYkhRdVpHbHRjeWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlISmxkSFZ5YmxaaGJIVmxPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdiR0Y2ZVZKbGMyVjBSM0poWkNncE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0JoZDJGcGRDQjBhR2x6TG1oaGJtUnNaWEl1YkdGNmVWSmxjMlYwUjNKaFpDZ3BPMXh1SUNCOVhHNWNiaUFnY25WdVZISmhhVzVUZEdWd0tHWmxaV1J6T2lCR1pXVmtjMVI1Y0dVc0lHOXdkR2x2Ym5NL09pQlNkVzVQY0hScGIyNXpLVG9nVUhKdmJXbHpaVHhTWlhSMWNtNVVlWEJsUGp0Y2JpQWdjblZ1VkhKaGFXNVRkR1Z3S0dabFpXUnpPaUJHWldWa2MxUjVjR1VzSUdabGRHTm9aWE02SUVabGRHTm9aWE5VZVhCbExDQnZjSFJwYjI1elB6b2dVblZ1VDNCMGFXOXVjeWs2SUZCeWIyMXBjMlU4VW1WMGRYSnVWSGx3WlQ0N1hHNGdJR0Z6ZVc1aklISjFibFJ5WVdsdVUzUmxjQ2htWldWa2N6b2dSbVZsWkhOVWVYQmxMQ0JoY21jeFB6b2dSbVYwWTJobGMxUjVjR1Y4VW5WdVQzQjBhVzl1Y3l3Z1lYSm5Najg2SUZKMWJrOXdkR2x2Ym5NcE9pQlFjbTl0YVhObFBGSmxkSFZ5YmxSNWNHVStJSHRjYmlBZ0lDQmpiMjV6ZENCYlptVjBZMmhsY3l3Z2IzQjBhVzl1YzEwZ1BWeHVJQ0FnSUNBZ0lDQjBhR2x6TG5SNWNHVk9ZWEp5YjNkcGJtZEdiM0pTZFc1VGRHVndLSFJvYVhNdWRISmhhVzVwYm1kSmJuQjFkRTVoYldWekxDQjBhR2x6TG5SeVlXbHVhVzVuVDNWMGNIVjBUbUZ0WlhNc0lHWmxaV1J6TENCaGNtY3hMQ0JoY21jeUtUdGNiaUFnSUNCamIyNXpkQ0J5WlhOMWJIUnpJRDBnWVhkaGFYUWdkR2hwY3k1b1lXNWtiR1Z5TG5KMWJsUnlZV2x1VTNSbGNDaG1aV1ZrY3l3Z1ptVjBZMmhsY3l3Z2IzQjBhVzl1Y3lrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVkyOXVkbVZ5ZEVoaGJtUnNaWEpTWlhSMWNtNVVlWEJsVkc5TllYQlBabFJsYm5OdmNuTW9jbVZ6ZFd4MGN5azdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QnlkVzVQY0hScGJXbDZaWEpUZEdWd0tHOXdkR2x2Ym5NL09pQkpibVpsY21WdVkyVlRaWE56YVc5dUxsSjFiazl3ZEdsdmJuTjhkVzVrWldacGJtVmtLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdWFHRnpUM0IwYVcxcGVtVnlUVzlrWld3cElIdGNiaUFnSUNBZ0lHRjNZV2wwSUhSb2FYTXVhR0Z1Wkd4bGNpNXlkVzVQY0hScGJXbDZaWEpUZEdWd0tHOXdkR2x2Ym5NZ2ZId2dlMzBwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxUm9hWE1nVkhKaGFXNXBibWRUWlhOemFXOXVJR2hoY3lCdWJ5QlBjSFJwYldsNlpYSk5iMlJsYkNCc2IyRmtaV1F1SnlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NuVnVSWFpoYkZOMFpYQW9abVZsWkhNNklFWmxaV1J6Vkhsd1pTd2diM0IwYVc5dWN6ODZJRkoxYms5d2RHbHZibk44ZFc1a1pXWnBibVZrS1RvZ1VISnZiV2x6WlR4U1pYUjFjbTVVZVhCbFBqdGNiaUFnY25WdVJYWmhiRk4wWlhBb1ptVmxaSE02SUVabFpXUnpWSGx3WlN3Z1ptVjBZMmhsY3pvZ1JtVjBZMmhsYzFSNWNHVXNJRzl3ZEdsdmJuTS9PaUJTZFc1UGNIUnBiMjV6ZkhWdVpHVm1hVzVsWkNrNklGQnliMjFwYzJVOFVtVjBkWEp1Vkhsd1pUNDdYRzRnSUdGemVXNWpJSEoxYmtWMllXeFRkR1Z3S0dabFpXUnpPaUJHWldWa2MxUjVjR1VzSUdGeVp6RS9PaUJHWlhSamFHVnpWSGx3Wlh4U2RXNVBjSFJwYjI1ekxDQmhjbWN5UHpvZ1VuVnVUM0IwYVc5dWN5azZJRkJ5YjIxcGMyVThVbVYwZFhKdVZIbHdaVDRnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbWhoYzBWMllXeE5iMlJsYkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnVzJabGRHTm9aWE1zSUc5d2RHbHZibk5kSUQxY2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG5SNWNHVk9ZWEp5YjNkcGJtZEdiM0pTZFc1VGRHVndLSFJvYVhNdVpYWmhiRWx1Y0hWMFRtRnRaWE1zSUhSb2FYTXVaWFpoYkU5MWRIQjFkRTVoYldWekxDQm1aV1ZrY3l3Z1lYSm5NU3dnWVhKbk1pazdYRzRnSUNBZ0lDQmpiMjV6ZENCeVpYTjFiSFJ6SUQwZ1lYZGhhWFFnZEdocGN5NW9ZVzVrYkdWeUxuSjFia1YyWVd4VGRHVndLR1psWldSekxDQm1aWFJqYUdWekxDQnZjSFJwYjI1ektUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbU52Ym5abGNuUklZVzVrYkdWeVVtVjBkWEp1Vkhsd1pWUnZUV0Z3VDJaVVpXNXpiM0p6S0hKbGMzVnNkSE1wTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxUm9hWE1nVkhKaGFXNXBibWRUWlhOemFXOXVJR2hoY3lCdWJ5QkZkbUZzVFc5a1pXd2diRzloWkdWa0xpY3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHZGxkRkJoY21GdFpYUmxjbk5UYVhwbEtIUnlZV2x1WVdKc1pVOXViSGtnUFNCMGNuVmxLVG9nVUhKdmJXbHpaVHh1ZFcxaVpYSStJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVvWVc1a2JHVnlMbWRsZEZCaGNtRnRaWFJsY25OVGFYcGxLSFJ5WVdsdVlXSnNaVTl1YkhrcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2JHOWhaRkJoY21GdFpYUmxjbk5DZFdabVpYSW9ZWEp5WVhrNklGVnBiblE0UVhKeVlYa3NJSFJ5WVdsdVlXSnNaVTl1YkhrZ1BTQjBjblZsS1RvZ1VISnZiV2x6WlR4MmIybGtQaUI3WEc0Z0lDQWdZMjl1YzNRZ2NHRnlZVzF6VTJsNlpTQTlJR0YzWVdsMElIUm9hWE11WjJWMFVHRnlZVzFsZEdWeWMxTnBlbVVvZEhKaGFXNWhZbXhsVDI1c2VTazdYRzRnSUNBZ0x5OGdZMmhsWTJ0cGJtY2dkR2hoZENCMGFHVWdjMmw2WlNCdlppQjBhR1VnVldsdWREaEJjbkpoZVNCcGN5QmxjWFZwZG1Gc1pXNTBJSFJ2SUhSb1pTQmllWFJsSUd4bGJtZDBhQ0J2WmlCaElFWnNiMkYwTXpKQmNuSmhlU0J2WmlCMGFHVWdiblZ0WW1WeVhHNGdJQ0FnTHk4Z2IyWWdjR0Z5WVcxbGRHVnljMXh1SUNBZ0lHbG1JQ2hoY25KaGVTNXNaVzVuZEdnZ0lUMDlJRFFnS2lCd1lYSmhiWE5UYVhwbEtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lDQWdKMU5wZW1VZ2IyWWdkR2hsSUdKMVptWmxjaUJ3WVhOelpXUWdhVzUwYnlCc2IyRmtVR0Z5WVcxbGRHVnljMEoxWm1abGNpQnRkWE4wSUcxaGRHTm9JSFJvWlNCdWRXMWlaWElnYjJZZ2NHRnlZVzFsZEdWeWN5QnBiaUFuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5kR2hsSUcxdlpHVnNMaUJRYkdWaGMyVWdkWE5sSUdkbGRGQmhjbUZ0WlhSbGNuTlRhWHBsSUcxbGRHaHZaQ0IwYnlCamFHVmpheTRuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YUdGdVpHeGxjaTVzYjJGa1VHRnlZVzFsZEdWeWMwSjFabVpsY2loaGNuSmhlU3dnZEhKaGFXNWhZbXhsVDI1c2VTazdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5Qm5aWFJEYjI1MGFXZDFiM1Z6VUdGeVlXMWxkR1Z5Y3loMGNtRnBibUZpYkdWUGJteDVJRDBnZEhKMVpTazZJRkJ5YjIxcGMyVThUMjV1ZUZaaGJIVmxQaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YUdGdVpHeGxjaTVuWlhSRGIyNTBhV2QxYjNWelVHRnlZVzFsZEdWeWN5aDBjbUZwYm1GaWJHVlBibXg1S1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUhKbGJHVmhjMlVvS1RvZ1VISnZiV2x6WlR4MmIybGtQaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YUdGdVpHeGxjaTVrYVhOd2IzTmxLQ2s3WEc0Z0lIMWNibjFjYmlJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVhVzF3YjNKMElIdEpibVpsY21WdVkyVlRaWE56YVc5dWZTQm1jbTl0SUNjdUwybHVabVZ5Wlc1alpTMXpaWE56YVc5dUxtcHpKenRjYm1sdGNHOXlkQ0I3VDI1dWVGWmhiSFZsZlNCbWNtOXRJQ2N1TDI5dWJuZ3RkbUZzZFdVdWFuTW5PMXh1YVcxd2IzSjBJSHRVY21GcGJtbHVaMU5sYzNOcGIyNGdZWE1nVkhKaGFXNXBibWRUWlhOemFXOXVTVzF3YkgwZ1puSnZiU0FuTGk5MGNtRnBibWx1WnkxelpYTnphVzl1TFdsdGNHd3Vhbk1uTzF4dVhHNHZLaUJsYzJ4cGJuUXRaR2x6WVdKc1pTQkFkSGx3WlhOamNtbHdkQzFsYzJ4cGJuUXZibTh0Y21Wa1pXTnNZWEpsSUNvdlhHNWNibVY0Y0c5eWRDQmtaV05zWVhKbElHNWhiV1Z6Y0dGalpTQlVjbUZwYm1sdVoxTmxjM05wYjI0Z2UxeHVJQ0F2S2lwY2JpQWdJQ29nUldsMGFHVnlJRlZTU1NCbWFXeGxJSEJoZEdnZ0tITjBjbWx1WnlrZ2IzSWdWV2x1ZERoQmNuSmhlU0JqYjI1MFlXbHVhVzVuSUcxdlpHVnNJRzl5SUdOb1pXTnJjRzlwYm5RZ2FXNW1iM0p0WVhScGIyNHVYRzRnSUNBcUwxeHVJQ0IwZVhCbElGVnlhVTl5UW5WbVptVnlJRDBnYzNSeWFXNW5mRlZwYm5RNFFYSnlZWGs3WEc1OVhHNWNiaThxS2x4dUlDb2dVbVZ3Y21WelpXNTBJR0VnY25WdWRHbHRaU0JwYm5OMFlXNWpaU0J2WmlCaGJpQlBUazVZSUhSeVlXbHVhVzVuSUhObGMzTnBiMjRzWEc0Z0tpQjNhR2xqYUNCamIyNTBZV2x1Y3lCaElHMXZaR1ZzSUhSb1lYUWdZMkZ1SUdKbElIUnlZV2x1WldRc0lHRnVaQ3dnYjNCMGFXOXVZV3hzZVN4Y2JpQXFJR0Z1SUdWMllXd2dZVzVrSUc5d2RHbHRhWHBsY2lCdGIyUmxiQzVjYmlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQlVjbUZwYm1sdVoxTmxjM05wYjI0Z2UxeHVJQ0F2THlBamNtVm5hVzl1SUhKMWJpZ3BYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFeGhlbWxzZVNCeVpYTmxkSE1nZEdobElHZHlZV1JwWlc1MGN5QnZaaUJoYkd3Z2RISmhhVzVoWW14bElIQmhjbUZ0WlhSbGNuTWdkRzhnZW1WeWJ5NGdVMmh2ZFd4a0lHaGhjSEJsYmlCaFpuUmxjaUIwYUdVZ2FXNTJiMk5oZEdsdmJpQnZabHh1SUNBZ0tpQnlkVzVQY0hScGJXbDZaWEpUZEdWd0xseHVJQ0FnS2k5Y2JpQWdiR0Y2ZVZKbGMyVjBSM0poWkNncE9pQlFjbTl0YVhObFBIWnZhV1ErTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJTZFc0Z1ZISmhhVzVUZEdWd0lHRnplVzVqYUhKdmJtOTFjMng1SUhkcGRHZ2dkR2hsSUdkcGRtVnVJR1psWldSeklHRnVaQ0J2Y0hScGIyNXpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnWm1WbFpITWdMU0JTWlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdVZ2JXOWtaV3dnYVc1d2RYUXVJRk5sWlNCMGVYQmxJR1JsYzJOeWFYQjBhVzl1SUc5bUlHQkpibVpsY21WdVkyVlRaWE56YVc5dUxrbHVjSFYwVkhsd1pXQWdabTl5WEc0Z0lDQmtaWFJoYVd3dVhHNGdJQ0FxSUVCd1lYSmhiU0J2Y0hScGIyNXpJQzBnVDNCMGFXOXVZV3d1SUVFZ2MyVjBJRzltSUc5d2RHbHZibk1nZEdoaGRDQmpiMjUwY205c2N5QjBhR1VnWW1Wb1lYWnBiM0lnYjJZZ2JXOWtaV3dnZEhKaGFXNXBibWN1WEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRUVnY0hKdmJXbHpaU0IwYUdGMElISmxjMjlzZG1WeklIUnZJR0VnYldGd0xDQjNhR2xqYUNCMWMyVnpJRzkxZEhCMWRDQnVZVzFsY3lCaGN5QnJaWGx6SUdGdVpDQlBibTU0Vm1Gc2RXVWdZWE1nWTI5eWNtVnpjRzl1WkdsdVp5QjJZV3gxWlhNdVhHNGdJQ0FxTDF4dUlDQnlkVzVVY21GcGJsTjBaWEFvWm1WbFpITTZJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNHVSbVZsWkhOVWVYQmxMQ0J2Y0hScGIyNXpQem9nU1c1bVpYSmxibU5sVTJWemMybHZiaTVTZFc1UGNIUnBiMjV6S1RwY2JpQWdJQ0FnSUZCeWIyMXBjMlU4U1c1bVpYSmxibU5sVTJWemMybHZiaTVTWlhSMWNtNVVlWEJsUGp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVW5WdUlHRWdjMmx1WjJ4bElIUnlZV2x1SUhOMFpYQWdkMmwwYUNCMGFHVWdaMmwyWlc0Z2FXNXdkWFJ6SUdGdVpDQnZjSFJwYjI1ekxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdabVZsWkhNZ0xTQlNaWEJ5WlhObGJuUmhkR2x2YmlCdlppQjBhR1VnYlc5a1pXd2dhVzV3ZFhRdVhHNGdJQ0FxSUVCd1lYSmhiU0JtWlhSamFHVnpJQzBnVW1Wd2NtVnpaVzUwWVhScGIyNGdiMllnZEdobElHMXZaR1ZzSUc5MWRIQjFkQzVjYmlBZ0lDb2daR1YwWVdsc0xseHVJQ0FnS2lCQWNHRnlZVzBnYjNCMGFXOXVjeUF0SUU5d2RHbHZibUZzTGlCQklITmxkQ0J2WmlCdmNIUnBiMjV6SUhSb1lYUWdZMjl1ZEhKdmJITWdkR2hsSUdKbGFHRjJhVzl5SUc5bUlHMXZaR1ZzSUhSeVlXbHVhVzVuTGx4dUlDQWdLaUJBY21WMGRYSnVjeUJCSUhCeWIyMXBjMlVnZEdoaGRDQnlaWE52YkhabGN5QjBieUJoSUcxaGNDd2dkMmhwWTJnZ2RYTmxjeUJ2ZFhSd2RYUWdibUZ0WlhNZ1lYTWdhMlY1Y3lCaGJtUWdUMjV1ZUZaaGJIVmxJR0Z6SUdOdmNuSmxjM0J2Ym1ScGJtZGNiaUFnSUhaaGJIVmxjeTVjYmlBZ0lDb3ZYRzRnSUhKMWJsUnlZV2x1VTNSbGNDaGNiaUFnSUNBZ0lHWmxaV1J6T2lCSmJtWmxjbVZ1WTJWVFpYTnphVzl1TGtabFpXUnpWSGx3WlN3Z1ptVjBZMmhsY3pvZ1NXNW1aWEpsYm1ObFUyVnpjMmx2Ymk1R1pYUmphR1Z6Vkhsd1pTeGNiaUFnSUNBZ0lHOXdkR2x2Ym5NL09pQkpibVpsY21WdVkyVlRaWE56YVc5dUxsSjFiazl3ZEdsdmJuTXBPaUJRY205dGFYTmxQRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNHVVbVYwZFhKdVZIbHdaVDQ3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkoxYm5NZ1lTQnphVzVuYkdVZ2IzQjBhVzFwZW1WeUlITjBaWEFzSUhkb2FXTm9JSEJsY21admNtMXpJSGRsYVdkb2RDQjFjR1JoZEdWeklHWnZjaUIwYUdVZ2RISmhhVzVoWW14bElIQmhjbUZ0WlhSbGNuTWdkWE5wYm1jZ2RHaGxJRzl3ZEdsdGFYcGxjaUJ0YjJSbGJDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJRzl3ZEdsdmJuTWdMU0JQY0hScGIyNWhiQzRnUVNCelpYUWdiMllnYjNCMGFXOXVjeUIwYUdGMElHTnZiblJ5YjJ4eklIUm9aU0JpWldoaGRtbHZjaUJ2WmlCdGIyUmxiQ0J2Y0hScGJXbDZhVzVuTGx4dUlDQWdLaTljYmlBZ2NuVnVUM0IwYVcxcGVtVnlVM1JsY0NodmNIUnBiMjV6UHpvZ1NXNW1aWEpsYm1ObFUyVnpjMmx2Ymk1U2RXNVBjSFJwYjI1ektUb2dVSEp2YldselpUeDJiMmxrUGp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVW5WdUlHRWdjMmx1WjJ4bElHVjJZV3dnYzNSbGNDQjNhWFJvSUhSb1pTQm5hWFpsYmlCcGJuQjFkSE1nWVc1a0lHOXdkR2x2Ym5NZ2RYTnBibWNnZEdobElHVjJZV3dnYlc5a1pXd3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0JtWldWa2N5QXRJRkpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JSFJvWlNCdGIyUmxiQ0JwYm5CMWRDNWNiaUFnSUNvZ1FIQmhjbUZ0SUc5d2RHbHZibk1nTFNCUGNIUnBiMjVoYkM0Z1FTQnpaWFFnYjJZZ2IzQjBhVzl1Y3lCMGFHRjBJR052Ym5SeWIyeHpJSFJvWlNCaVpXaGhkbWx2Y2lCdlppQnRiMlJsYkNCbGRtRnNJSE4wWlhBdVhHNGdJQ0FxSUVCeVpYUjFjbTV6SUVFZ2NISnZiV2x6WlNCMGFHRjBJSEpsYzI5c2RtVnpJSFJ2SUdFZ2JXRndMQ0IzYUdsamFDQjFjMlZ6SUc5MWRIQjFkQ0J1WVcxbGN5QmhjeUJyWlhseklHRnVaQ0JQYm01NFZtRnNkV1VnWVhNZ1kyOXljbVZ6Y0c5dVpHbHVaMXh1SUNBZ2RtRnNkV1Z6TGx4dUlDQWdLaTljYmlBZ2NuVnVSWFpoYkZOMFpYQW9abVZsWkhNNklFbHVabVZ5Wlc1alpWTmxjM05wYjI0dVJtVmxaSE5VZVhCbExDQnZjSFJwYjI1elB6b2dTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpNVNkVzVQY0hScGIyNXpLVHBjYmlBZ0lDQWdJRkJ5YjIxcGMyVThTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpNVNaWFIxY201VWVYQmxQanRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVblZ1SUdFZ2MybHVaMnhsSUdWMllXd2djM1JsY0NCM2FYUm9JSFJvWlNCbmFYWmxiaUJwYm5CMWRITWdZVzVrSUc5d2RHbHZibk1nZFhOcGJtY2dkR2hsSUdWMllXd2diVzlrWld3dVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQm1aV1ZrY3lBdElGSmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlIUm9aU0J0YjJSbGJDQnBibkIxZEM1Y2JpQWdJQ29nUUhCaGNtRnRJR1psZEdOb1pYTWdMU0JTWlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdVZ2JXOWtaV3dnYjNWMGNIVjBMbHh1SUNBZ0tpQmtaWFJoYVd3dVhHNGdJQ0FxSUVCd1lYSmhiU0J2Y0hScGIyNXpJQzBnVDNCMGFXOXVZV3d1SUVFZ2MyVjBJRzltSUc5d2RHbHZibk1nZEdoaGRDQmpiMjUwY205c2N5QjBhR1VnWW1Wb1lYWnBiM0lnYjJZZ2JXOWtaV3dnWlhaaGJDQnpkR1Z3TGx4dUlDQWdLaUJBY21WMGRYSnVjeUJCSUhCeWIyMXBjMlVnZEdoaGRDQnlaWE52YkhabGN5QjBieUJoSUcxaGNDd2dkMmhwWTJnZ2RYTmxjeUJ2ZFhSd2RYUWdibUZ0WlhNZ1lYTWdhMlY1Y3lCaGJtUWdUMjV1ZUZaaGJIVmxJR0Z6SUdOdmNuSmxjM0J2Ym1ScGJtZGNiaUFnSUhaaGJIVmxjeTVjYmlBZ0lDb3ZYRzRnSUhKMWJrVjJZV3hUZEdWd0tGeHVJQ0FnSUNBZ1ptVmxaSE02SUVsdVptVnlaVzVqWlZObGMzTnBiMjR1Um1WbFpITlVlWEJsTENCbVpYUmphR1Z6T2lCSmJtWmxjbVZ1WTJWVFpYTnphVzl1TGtabGRHTm9aWE5VZVhCbExGeHVJQ0FnSUNBZ2IzQjBhVzl1Y3o4NklFbHVabVZ5Wlc1alpWTmxjM05wYjI0dVVuVnVUM0IwYVc5dWN5azZJRkJ5YjIxcGMyVThTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpNVNaWFIxY201VWVYQmxQanRjYmx4dUlDQXZMeUFqWlc1a2NtVm5hVzl1WEc1Y2JpQWdMeThnSTNKbFoybHZiaUJqYjNCNUlIQmhjbUZ0WlhSbGNuTmNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVjBjbWxsZG1WeklIUm9aU0J6YVhwbElHOW1JR0ZzYkNCd1lYSmhiV1YwWlhKeklHWnZjaUIwYUdVZ2RISmhhVzVwYm1jZ2MzUmhkR1V1SUVOaGJHTjFiR0YwWlhNZ2RHaGxJSFJ2ZEdGc0lHNTFiV0psY2lCdlppQndjbWx0YVhScGRtVWdLR1JoZEdGMGVYQmxJRzltWEc0Z0lDQXFJSFJvWlNCd1lYSmhiV1YwWlhKektTQmxiR1Z0Wlc1MGN5QnZaaUJoYkd3Z2RHaGxJSEJoY21GdFpYUmxjbk1nYVc0Z2RHaGxJSFJ5WVdsdWFXNW5JSE4wWVhSbExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdkSEpoYVc1aFlteGxUMjVzZVNBdElGZG9aVzRnYzJWMElIUnZJSFJ5ZFdVc0lIUm9aU0J6YVhwbElHbHpJR05oYkdOMWJHRjBaV1FnWm05eUlIUnlZV2x1WVdKc1pTQndZWEpoYlhNZ2IyNXNlUzRnUkdWbVlYVnNkQ0IyWVd4MVpTQnBjeUIwY25WbExseHVJQ0FnS2k5Y2JpQWdaMlYwVUdGeVlXMWxkR1Z5YzFOcGVtVW9kSEpoYVc1aFlteGxUMjVzZVRvZ1ltOXZiR1ZoYmlrNklGQnliMjFwYzJVOGJuVnRZbVZ5UGp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTI5d2FXVnpJSEJoY21GdFpYUmxjaUIyWVd4MVpYTWdabkp2YlNCMGFHVWdaMmwyWlc0Z1luVm1abVZ5SUhSdklIUm9aU0IwY21GcGJtbHVaeUJ6ZEdGMFpTNGdRM1Z5Y21WdWRHeDVMQ0J2Ym14NUlITjFjSEJ2Y25ScGJtY2diVzlrWld4eklIZHBkR2hjYmlBZ0lDb2djR0Z5WVcxbGRHVnljeUJ2WmlCMGVYQmxJRVpzYjJGME16SXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0JpZFdabVpYSWdMU0JCSUZWcGJuUTRRWEp5WVhrZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ1JteHZZWFF6TWlCd1lYSmhiV1YwWlhKekxseHVJQ0FnS2lCQWNHRnlZVzBnZEhKaGFXNWhZbXhsVDI1c2VTQXRJRlJ5ZFdVZ2FXWWdkSEpoYVc1aFlteGxJSEJoY21GdFpYUmxjbk1nYjI1c2VTQjBieUJpWlNCdGIyUnBabWxsWkN3Z1ptRnNjMlVnYjNSb1pYSjNhWE5sTGlCRVpXWmhkV3gwSUhaaGJIVmxJR2x6SUhSeWRXVXVYRzRnSUNBcUwxeHVJQ0JzYjJGa1VHRnlZVzFsZEdWeWMwSjFabVpsY2loaWRXWm1aWEk2SUZWcGJuUTRRWEp5WVhrc0lIUnlZV2x1WVdKc1pVOXViSGs2SUdKdmIyeGxZVzRwT2lCUWNtOXRhWE5sUEhadmFXUStPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRiM0JwWlhNZ2RHaGxJRzF2WkdWc0lIQmhjbUZ0WlhSbGNuTWdkRzhnWVNCamIyNTBhV2QxYjNWeklHSjFabVpsY2k0Z1ZYTjFZV3hzZVNCMWMyVmtJR2x1SUhSb1pTQmpiMjUwWlhoMElHOW1JRVpsWkdWeVlYUmxaQ0JNWldGeWJtbHVaeTVjYmlBZ0lDb2dRM1Z5Y21WdWRHeDVMQ0J2Ym14NUlITjFjSEJ2Y25ScGJtY2diVzlrWld4eklIZHBkR2dnY0dGeVlXMWxkR1Z5Y3lCdlppQjBlWEJsSUVac2IyRjBNekl1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCMGNtRnBibUZpYkdWUGJteDVJQzBnVjJobGJpQnpaWFFnZEc4Z2RISjFaU3dnYjI1c2VTQjBjbUZwYm1GaWJHVWdjR0Z5WVcxbGRHVnljeUJoY21VZ1kyOXdhV1ZrTGlCVWNtRnBibUZpYkdVZ2NHRnlZVzFsZEdWeWN5QmhjbVVnY0dGeVlXMWxkR1Z5YzF4dUlDQWdLaUJtYjNJZ2QyaHBZMmdnY21WeGRXbHlaWE5mWjNKaFpDQnBjeUJ6WlhRZ2RHOGdkSEoxWlM0Z1JHVm1ZWFZzZENCMllXeDFaU0JwY3lCMGNuVmxMbHh1SUNBZ0tpQkFjbVYwZFhKdWN5QkJJSEJ5YjIxcGMyVWdkR2hoZENCeVpYTnZiSFpsY3lCMGJ5QmhJRVpzYjJGME16SWdUMjV1ZUZaaGJIVmxJRzltSUhSb1pTQnlaWEYxWlhOMFpXUWdjR0Z5WVcxbGRHVnljeTVjYmlBZ0lDb3ZYRzRnSUdkbGRFTnZiblJwWjNWdmRYTlFZWEpoYldWMFpYSnpLSFJ5WVdsdVlXSnNaVTl1YkhrNklHSnZiMnhsWVc0cE9pQlFjbTl0YVhObFBFOXVibmhXWVd4MVpUNDdYRzRnSUM4dklDTmxibVJ5WldkcGIyNWNibHh1SUNBdkx5QWpjbVZuYVc5dUlISmxiR1ZoYzJVb0tWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pXeGxZWE5sSUhSb1pTQnBibVpsY21WdVkyVWdjMlZ6YzJsdmJpQmhibVFnZEdobElIVnVaR1Z5YkhscGJtY2djbVZ6YjNWeVkyVnpMbHh1SUNBZ0tpOWNiaUFnY21Wc1pXRnpaU2dwT2lCUWNtOXRhWE5sUEhadmFXUStPMXh1SUNBdkx5QWpaVzVrY21WbmFXOXVYRzVjYmlBZ0x5OGdJM0psWjJsdmJpQnRaWFJoWkdGMFlWeHVYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUWdhVzV3ZFhRZ2JtRnRaWE1nYjJZZ2RHaGxJR3h2WVdSbFpDQjBjbUZwYm1sdVp5QnRiMlJsYkM1Y2JpQWdJQ292WEc0Z0lISmxZV1J2Ym14NUlIUnlZV2x1YVc1blNXNXdkWFJPWVcxbGN6b2djbVZoWkc5dWJIa2djM1J5YVc1blcxMDdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFZGxkQ0J2ZFhSd2RYUWdibUZ0WlhNZ2IyWWdkR2hsSUd4dllXUmxaQ0IwY21GcGJtbHVaeUJ0YjJSbGJDNWNiaUFnSUNvdlhHNGdJSEpsWVdSdmJteDVJSFJ5WVdsdWFXNW5UM1YwY0hWMFRtRnRaWE02SUhKbFlXUnZibXg1SUhOMGNtbHVaMXRkTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJIWlhRZ2FXNXdkWFFnYm1GdFpYTWdiMllnZEdobElHeHZZV1JsWkNCbGRtRnNJRzF2WkdWc0xpQkpjeUJoYmlCbGJYQjBlU0JoY25KaGVTQnBaaUJ1YnlCbGRtRnNJRzF2WkdWc0lHbHpJR3h2WVdSbFpDNWNiaUFnSUNvdlhHNGdJSEpsWVdSdmJteDVJR1YyWVd4SmJuQjFkRTVoYldWek9pQnlaV0ZrYjI1c2VTQnpkSEpwYm1kYlhUdGNibHh1SUNBdktpcGNiaUFnSUNvZ1IyVjBJRzkxZEhCMWRDQnVZVzFsY3lCdlppQjBhR1VnYkc5aFpHVmtJR1YyWVd3Z2JXOWtaV3d1SUVseklHRnVJR1Z0Y0hSNUlHRnljbUY1SUdsbUlHNXZJR1YyWVd3Z2JXOWtaV3dnYVhNZ2JHOWhaR1ZrTGx4dUlDQWdLaTljYmlBZ2NtVmhaRzl1YkhrZ1pYWmhiRTkxZEhCMWRFNWhiV1Z6T2lCeVpXRmtiMjVzZVNCemRISnBibWRiWFR0Y2JseHVJQ0F2THlBalpXNWtjbVZuYVc5dVhHNTlYRzVjYmk4cUtseHVJQ29nVW1Wd2NtVnpaVzUwY3lCMGFHVWdiM0IwYVc5dVlXd2djR0Z5WVcxbGRHVnljeUIwYUdGMElHTmhiaUJpWlNCd1lYTnpaV1FnYVc1MGJ5QjBhR1VnVkhKaGFXNXBibWRUWlhOemFXOXVSbUZqZEc5eWVTNWNiaUFxTDF4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCVWNtRnBibWx1WjFObGMzTnBiMjVEY21WaGRHVlBjSFJwYjI1eklIdGNiaUFnTHlvcVhHNGdJQ0FxSUZWU1NTQnZjaUJpZFdabVpYSWdabTl5SUdFZ0xtTnJjSFFnWm1sc1pTQjBhR0YwSUdOdmJuUmhhVzV6SUhSb1pTQmphR1ZqYTNCdmFXNTBJR1p2Y2lCMGFHVWdkSEpoYVc1cGJtY2diVzlrWld3dVhHNGdJQ0FxTDF4dUlDQmphR1ZqYTNCdmFXNTBVM1JoZEdVNklGUnlZV2x1YVc1blUyVnpjMmx2Ymk1VmNtbFBja0oxWm1abGNqdGNiaUFnTHlvcVhHNGdJQ0FxSUZWU1NTQnZjaUJpZFdabVpYSWdabTl5SUhSb1pTQXViMjV1ZUNCMGNtRnBibWx1WnlCbWFXeGxMbHh1SUNBZ0tpOWNiaUFnZEhKaGFXNU5iMlJsYkRvZ1ZISmhhVzVwYm1kVFpYTnphVzl1TGxWeWFVOXlRblZtWm1WeU8xeHVJQ0F2S2lwY2JpQWdJQ29nVDNCMGFXOXVZV3d1SUZWU1NTQnZjaUJpZFdabVpYSWdabTl5SUhSb1pTQXViMjV1ZUNCdmNIUnBiV2w2WlhJZ2JXOWtaV3dnWm1sc1pTNWNiaUFnSUNvdlhHNGdJRzl3ZEdsdGFYcGxjazF2WkdWc1B6b2dWSEpoYVc1cGJtZFRaWE56YVc5dUxsVnlhVTl5UW5WbVptVnlPMXh1SUNBdktpcGNiaUFnSUNvZ1QzQjBhVzl1WVd3dUlGVlNTU0J2Y2lCaWRXWm1aWElnWm05eUlIUm9aU0F1YjI1dWVDQmxkbUZzSUcxdlpHVnNJR1pwYkdVdVhHNGdJQ0FxTDF4dUlDQmxkbUZzVFc5a1pXdy9PaUJVY21GcGJtbHVaMU5sYzNOcGIyNHVWWEpwVDNKQ2RXWm1aWEk3WEc1OVhHNWNiaThxS2x4dUlDb2dSR1ZtYVc1bGN5QnRaWFJvYjJRZ2IzWmxjbXh2WVdRZ2NHOXpjMmxpYVd4cGRHbGxjeUJtYjNJZ1kzSmxZWFJwYm1jZ1lTQlVjbUZwYm1sdVoxTmxjM05wYjI0dVhHNGdLaTljYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVkhKaGFXNXBibWRUWlhOemFXOXVSbUZqZEc5eWVTQjdYRzRnSUM4dklDTnlaV2RwYjI0Z1kzSmxZWFJsS0NsY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxjeUJoSUc1bGR5QlVjbUZwYm1sdVoxTmxjM05wYjI0Z1lXNWtJR0Z6ZVc1amFISnZibTkxYzJ4NUlHeHZZV1J6SUdGdWVTQnRiMlJsYkhNZ2NHRnpjMlZrSUdsdUlIUm9jbTkxWjJnZ2RISmhhVzVwYm1kUGNIUnBiMjV6WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCMGNtRnBibWx1WjA5d2RHbHZibk1nYzNCbFkybG1lU0J0YjJSbGJITWdZVzVrSUdOb1pXTnJjRzlwYm5SeklIUnZJR3h2WVdRZ2FXNTBieUIwYUdVZ1ZISmhhVzVwYm1jZ1UyVnpjMmx2Ymx4dUlDQWdLaUJBY0dGeVlXMGdjMlZ6YzJsdmJrOXdkR2x2Ym5NZ2MzQmxZMmxtZVNCamIyNW1hV2QxY21GMGFXOXVJR1p2Y2lCMGNtRnBibWx1WnlCelpYTnphVzl1SUdKbGFHRjJhVzl5WEc0Z0lDQXFYRzRnSUNBcUlFQnlaWFIxY201eklGQnliMjFwYzJVZ2RHaGhkQ0J5WlhOdmJIWmxjeUIwYnlCaElGUnlZV2x1YVc1blUyVnpjMmx2YmlCdlltcGxZM1JjYmlBZ0lDb3ZYRzRnSUdOeVpXRjBaU2gwY21GcGJtbHVaMDl3ZEdsdmJuTTZJRlJ5WVdsdWFXNW5VMlZ6YzJsdmJrTnlaV0YwWlU5d2RHbHZibk1zSUhObGMzTnBiMjVQY0hScGIyNXpQem9nU1c1bVpYSmxibU5sVTJWemMybHZiaTVUWlhOemFXOXVUM0IwYVc5dWN5azZYRzRnSUNBZ0lDQlFjbTl0YVhObFBGUnlZV2x1YVc1blUyVnpjMmx2Ymo0N1hHNWNiaUFnTHk4Z0kyVnVaSEpsWjJsdmJseHVmVnh1WEc0dkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNWhiV2x1WnkxamIyNTJaVzUwYVc5dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnVkhKaGFXNXBibWRUWlhOemFXOXVPaUJVY21GcGJtbHVaMU5sYzNOcGIyNUdZV04wYjNKNUlEMGdWSEpoYVc1cGJtZFRaWE56YVc5dVNXMXdiRHRjYmlJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVMeW9xWEc0Z0tpQWpJRTlPVGxnZ1VuVnVkR2x0WlNCS1lYWmhVMk55YVhCMElFRlFTVnh1SUNwY2JpQXFJRTlPVGxnZ1VuVnVkR2x0WlNCS1lYWmhVMk55YVhCMElFRlFTU0JwY3lCaElIVnVhV1pwWldRZ1FWQkpJR1p2Y2lCaGJHd2dTbUYyWVZOamNtbHdkQ0IxYzJGblpYTXNJR2x1WTJ4MVpHbHVaeUIwYUdVZ1ptOXNiRzkzYVc1bklFNVFUU0J3WVdOcllXZGxjenBjYmlBcVhHNGdLaUF0SUZ0dmJtNTRjblZ1ZEdsdFpTMXViMlJsWFNob2RIUndjem92TDNkM2R5NXVjRzFxY3k1amIyMHZjR0ZqYTJGblpTOXZibTU0Y25WdWRHbHRaUzF1YjJSbEtWeHVJQ29nTFNCYmIyNXVlSEoxYm5ScGJXVXRkMlZpWFNob2RIUndjem92TDNkM2R5NXVjRzFxY3k1amIyMHZjR0ZqYTJGblpTOXZibTU0Y25WdWRHbHRaUzEzWldJcFhHNGdLaUF0SUZ0dmJtNTRjblZ1ZEdsdFpTMXlaV0ZqZEMxdVlYUnBkbVZkS0doMGRIQnpPaTh2ZDNkM0xtNXdiV3B6TG1OdmJTOXdZV05yWVdkbEwyOXVibmh5ZFc1MGFXMWxMWEpsWVdOMExXNWhkR2wyWlNsY2JpQXFYRzRnS2lCVFpXVWdZV3h6YnpwY2JpQXFJQzBnVzBkbGRDQlRkR0Z5ZEdWa1hTaG9kSFJ3Y3pvdkwyOXVibmh5ZFc1MGFXMWxMbUZwTDJSdlkzTXZaMlYwTFhOMFlYSjBaV1F2ZDJsMGFDMXFZWFpoYzJOeWFYQjBMeWxjYmlBcUlDMGdXMGx1Wm1WeVpXNWpaU0JsZUdGdGNHeGxjMTBvYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDIxcFkzSnZjMjltZEM5dmJtNTRjblZ1ZEdsdFpTMXBibVpsY21WdVkyVXRaWGhoYlhCc1pYTXZkSEpsWlM5dFlXbHVMMnB6S1Z4dUlDcGNiaUFxSUVCd1lXTnJZV2RsUkc5amRXMWxiblJoZEdsdmJseHVJQ292WEc1Y2JtVjRjRzl5ZENBcUlHWnliMjBnSnk0dlltRmphMlZ1WkM1cWN5YzdYRzVsZUhCdmNuUWdLaUJtY205dElDY3VMMlZ1ZGk1cWN5YzdYRzVsZUhCdmNuUWdLaUJtY205dElDY3VMMmx1Wm1WeVpXNWpaUzF6WlhOemFXOXVMbXB6Snp0Y2JtVjRjRzl5ZENBcUlHWnliMjBnSnk0dmRHVnVjMjl5TG1wekp6dGNibVY0Y0c5eWRDQXFJR1p5YjIwZ0p5NHZkR1Z1YzI5eUxXTnZiblpsY25OcGIyNHVhbk1uTzF4dVpYaHdiM0owSUNvZ1puSnZiU0FuTGk5MFpXNXpiM0l0Wm1GamRHOXllUzVxY3ljN1hHNWxlSEJ2Y25RZ0tpQm1jbTl0SUNjdUwzUnlZV05sTG1wekp6dGNibVY0Y0c5eWRDQXFJR1p5YjIwZ0p5NHZiMjV1ZUMxdGIyUmxiQzVxY3ljN1hHNWxlSEJ2Y25RZ0tpQm1jbTl0SUNjdUwyOXVibmd0ZG1Gc2RXVXVhbk1uTzF4dVpYaHdiM0owSUNvZ1puSnZiU0FuTGk5MGNtRnBibWx1WnkxelpYTnphVzl1TG1wekp6dGNiaUlzSUNJdkx5QkRiM0I1Y21sbmFIUWdLR01wSUUxcFkzSnZjMjltZENCRGIzSndiM0poZEdsdmJpNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmk4dklFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQk5TVlFnVEdsalpXNXpaUzVjYmx4dWFXMXdiM0owSUh0RmJuWjlJR1p5YjIwZ0oyOXVibmh5ZFc1MGFXMWxMV052YlcxdmJpYzdYRzVjYm1sdGNHOXlkQ0I3Ykc5blRHVjJaV3hUZEhKcGJtZFViMFZ1ZFcxOUlHWnliMjBnSnk0dUwzZGhjMjB0WTI5dGJXOXVKenRjYmx4dWRIbHdaU0JNYjJkTVpYWmxiQ0E5SUU1dmJrNTFiR3hoWW14bFBFVnVkbHNuYkc5blRHVjJaV3duWFQ0N1hHNTBlWEJsSUUxbGMzTmhaMlZUZEhKcGJtY2dQU0J6ZEhKcGJtYzdYRzUwZVhCbElFMWxjM05oWjJWR2RXNWpkR2x2YmlBOUlDZ3BJRDArSUhOMGNtbHVaenRjYm5SNWNHVWdUV1Z6YzJGblpTQTlJRTFsYzNOaFoyVlRkSEpwYm1kOFRXVnpjMkZuWlVaMWJtTjBhVzl1TzF4dVhHNWpiMjV6ZENCc2IyZE1aWFpsYkZCeVpXWnBlQ0E5SUZzblZpY3NJQ2RKSnl3Z0oxY25MQ0FuUlNjc0lDZEdKMTA3WEc1Y2JtTnZibk4wSUdSdlRHOW5JRDBnS0d4bGRtVnNPaUJ1ZFcxaVpYSXNJRzFsYzNOaFoyVTZJSE4wY21sdVp5azZJSFp2YVdRZ1BUNGdlMXh1SUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ2JtOHRZMjl1YzI5c1pWeHVJQ0JqYjI1emIyeGxMbXh2WnloZ1d5UjdiRzluVEdWMlpXeFFjbVZtYVhoYmJHVjJaV3hkZlN3a2UyNWxkeUJFWVhSbEtDa3VkRzlKVTA5VGRISnBibWNvS1gxZEpIdHRaWE56WVdkbGZXQXBPMXh1ZlR0Y2JseHViR1YwSUdOdmJtWnBaMHh2WjB4bGRtVnNPaUJNYjJkTVpYWmxiSHgxYm1SbFptbHVaV1E3WEc1c1pYUWdaR1ZpZFdjNklHSnZiMnhsWVc1OGRXNWtaV1pwYm1Wa08xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1kyOXVabWxuZFhKbFRHOW5aMlZ5SUQwZ0tDUmpiMjVtYVdkTWIyZE1aWFpsYkRvZ1RHOW5UR1YyWld3c0lDUmtaV0oxWnpvZ1ltOXZiR1ZoYmlrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JqYjI1bWFXZE1iMmRNWlhabGJDQTlJQ1JqYjI1bWFXZE1iMmRNWlhabGJEdGNiaUFnWkdWaWRXY2dQU0FrWkdWaWRXYzdYRzU5TzF4dVhHNHZLaXBjYmlBcUlFRWdjMmx0Y0d4bElHeHZaMmRwYm1jZ2RYUnBiR2wwZVNCMGJ5QnNiMmNnYldWemMyRm5aWE1nZEc4Z2RHaGxJR052Ym5OdmJHVXVYRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JNVDBjZ1BTQW9iRzluVEdWMlpXdzZJRXh2WjB4bGRtVnNMQ0J0YzJjNklFMWxjM05oWjJVcE9pQjJiMmxrSUQwK0lIdGNiaUFnWTI5dWMzUWdiV1Z6YzJGblpVeGxkbVZzSUQwZ2JHOW5UR1YyWld4VGRISnBibWRVYjBWdWRXMG9iRzluVEdWMlpXd3BPMXh1SUNCamIyNXpkQ0JqYjI1bWFXZE1aWFpsYkNBOUlHeHZaMHhsZG1Wc1UzUnlhVzVuVkc5RmJuVnRLR052Ym1acFoweHZaMHhsZG1Wc0tUdGNiaUFnYVdZZ0tHMWxjM05oWjJWTVpYWmxiQ0ErUFNCamIyNW1hV2RNWlhabGJDa2dlMXh1SUNBZ0lHUnZURzluS0cxbGMzTmhaMlZNWlhabGJDd2dkSGx3Wlc5bUlHMXpaeUE5UFQwZ0oyWjFibU4wYVc5dUp5QS9JRzF6WnlncElEb2diWE5uS1R0Y2JpQWdmVnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkJJSE5wYlhCc1pTQnNiMmRuYVc1bklIVjBhV3hwZEhrZ2RHOGdiRzluSUcxbGMzTmhaMlZ6SUhSdklIUm9aU0JqYjI1emIyeGxMaUJQYm14NUlHeHZaM01nZDJobGJpQmtaV0oxWnlCcGN5QmxibUZpYkdWa0xseHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdURTlIWDBSRlFsVkhPaUIwZVhCbGIyWWdURTlISUQwZ0tDNHVMbUZ5WjNNNklGQmhjbUZ0WlhSbGNuTThkSGx3Wlc5bUlFeFBSejRwSUQwK0lIdGNiaUFnYVdZZ0tHUmxZblZuS1NCN1hHNGdJQ0FnVEU5SEtDNHVMbUZ5WjNNcE8xeHVJQ0I5WEc1OU8xeHVJaXdnSWk4dklFTnZjSGx5YVdkb2RDQW9ZeWtnVFdsamNtOXpiMlowSUVOdmNuQnZjbUYwYVc5dUxpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1THk4Z1RHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFMUpWQ0JNYVdObGJuTmxMbHh1WEc1cGJYQnZjblFnZTFSbGJuTnZjbjBnWm5KdmJTQW5iMjV1ZUhKMWJuUnBiV1V0WTI5dGJXOXVKenRjYmx4dWFXMXdiM0owSUh0MFpXNXpiM0pVZVhCbFZHOVVlWEJsWkVGeWNtRjVRMjl1YzNSeWRXTjBiM0o5SUdaeWIyMGdKeTR1TDNkaGMyMHRZMjl0Ylc5dUp6dGNibHh1Wlhod2IzSjBJR052Ym5OMElHTnlaV0YwWlZacFpYY2dQU0FvWkdGMFlVSjFabVpsY2pvZ1FYSnlZWGxDZFdabVpYSXNJSFI1Y0dVNklGUmxibk52Y2k1VWVYQmxLVG9nU1c1ME16SkJjbkpoZVh4VmFXNTBNekpCY25KaGVYeENhV2RKYm5RMk5FRnljbUY1ZkZ4dUlDQWdJRUpwWjFWcGJuUTJORUZ5Y21GNWZGVnBiblE0UVhKeVlYbDhSbXh2WVhRek1rRnljbUY1ZkVac2IyRjBOalJCY25KaGVYeEpiblE0UVhKeVlYbDhTVzUwTVRaQmNuSmhlWHhWYVc1ME1UWkJjbkpoZVNBOVBseHVJQ0FnSUNBZ0lDQnVaWGNnS0hSbGJuTnZjbFI1Y0dWVWIxUjVjR1ZrUVhKeVlYbERiMjV6ZEhKMVkzUnZjaWgwZVhCbEtTa29aR0YwWVVKMVptWmxjaWs3WEc1Y2JpOHFLbHh1SUNvZ1lTQlVaVzV6YjNKV2FXVjNJR1J2WlhNZ2JtOTBJRzkzYmlCMGFHVWdaR0YwWVM1Y2JpQXFMMXh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JVWlc1emIzSldhV1YzSUh0Y2JpQWdjbVZoWkc5dWJIa2daR0YwWVRvZ2JuVnRZbVZ5TzF4dUlDQnlaV0ZrYjI1c2VTQmtZWFJoVkhsd1pUb2diblZ0WW1WeU8xeHVJQ0J5WldGa2IyNXNlU0JrYVcxek9pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhUdGNibHh1SUNBdktpcGNiaUFnSUNvZ1oyVjBJR0VnUm14dllYUXpNa0Z5Y21GNUlHUmhkR0VnZG1sbGR5QnZaaUIwYUdVZ2RHVnVjMjl5SUdSaGRHRXVJSFJsYm5OdmNpQmtZWFJoSUcxMWMzUWdZbVVnYjI0Z1ExQlZMbHh1SUNBZ0tpOWNiaUFnWjJWMFJteHZZWFF6TWtGeWNtRjVLQ2s2SUVac2IyRjBNekpCY25KaGVUdGNibHh1SUNBdktpcGNiaUFnSUNvZ1oyVjBJR0VnUW1sblNXNTBOalJCY25KaGVTQmtZWFJoSUhacFpYY2diMllnZEdobElIUmxibk52Y2lCa1lYUmhMaUIwWlc1emIzSWdaR0YwWVNCdGRYTjBJR0psSUc5dUlFTlFWUzVjYmlBZ0lDb3ZYRzRnSUdkbGRFSnBaMGx1ZERZMFFYSnlZWGtvS1RvZ1FtbG5TVzUwTmpSQmNuSmhlVHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2daMlYwSUdFZ1NXNTBNekpCY25KaGVTQmtZWFJoSUhacFpYY2diMllnZEdobElIUmxibk52Y2lCa1lYUmhMaUIwWlc1emIzSWdaR0YwWVNCdGRYTjBJR0psSUc5dUlFTlFWUzVjYmlBZ0lDb3ZYRzRnSUdkbGRFbHVkRE15UVhKeVlYa29LVG9nU1c1ME16SkJjbkpoZVR0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nWTNKbFlYUmxJR0VnYm1WM0lIUmxibk52Y2lCMmFXVjNJSGRwZEdnZ2RHaGxJSE5oYldVZ1pHRjBZU0JpZFhRZ1pHbG1abVZ5Wlc1MElHUnBiV1Z1YzJsdmJuTXVYRzRnSUNBcUwxeHVJQ0J5WlhOb1lYQmxLRzVsZDBScGJYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRLVG9nVkdWdWMyOXlWbWxsZHp0Y2JuMWNiaUlzSUNJdkx5QkRiM0I1Y21sbmFIUWdLR01wSUUxcFkzSnZjMjltZENCRGIzSndiM0poZEdsdmJpNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmk4dklFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQk5TVlFnVEdsalpXNXpaUzVjYmx4dWFXMXdiM0owSUh0RVlYUmhWSGx3WlgwZ1puSnZiU0FuTGk0dkxpNHZkMkZ6YlMxamIyMXRiMjRuTzF4dWFXMXdiM0owSUh0VVpXNXpiM0pXYVdWM2ZTQm1jbTl0SUNjdUxpOTBaVzV6YjNJdGRtbGxkeWM3WEc1Y2JtbHRjRzl5ZENCN1UyaGhaR1Z5U0dWc2NHVnlmU0JtY205dElDY3VMMjl3Y3k5amIyMXRiMjRuTzF4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JUWlhOemFXOXVVM1JoZEdVZ1BTQW5aR1ZtWVhWc2RDZDhKMk5oY0hSMWNtbHVaeWQ4SjNKbGNHeGhlV2x1WnljN1hHNWNibVY0Y0c5eWRDQmxiblZ0SUVkd2RVUmhkR0ZVZVhCbElIdGNiaUFnWkdWbVlYVnNkQ0E5SURBc1hHNGdJSFZ3Ykc5aFpDQTlJREVzWEc0Z0lIQnliMlpwYkdVZ1BTQXlYRzU5WEc1bGVIQnZjblFnZEhsd1pTQkhjSFZFWVhSaFNXUWdQU0J1ZFcxaVpYSTdYRzVjYm1WNGNHOXlkQ0IwZVhCbElFZHdkVUZ5WTJocGRHVmpkSFZ5WlNBOUlDZGhiWEJsY21Vbk8xeHVaWGh3YjNKMElIUjVjR1VnUjNCMVZtVnVaRzl5SUQwZ0oyRnRaQ2Q4SjJsdWRHVnNKM3duYm5acFpHbGhKenRjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnUVdSaGNIUmxja2x1Wm04Z2UxeHVJQ0JwYzBGeVkyaHBkR1ZqZEhWeVpUb2dLR0Z5WTJocGRHVmpkSFZ5WlRvZ1IzQjFRWEpqYUdsMFpXTjBkWEpsS1NBOVBpQmliMjlzWldGdU8xeHVJQ0JwYzFabGJtUnZjam9nS0habGJtUnZjam9nUjNCMVZtVnVaRzl5S1NBOVBpQmliMjlzWldGdU8xeHVmVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVkd2RVUmhkR0VnZTF4dUlDQjBlWEJsT2lCSGNIVkVZWFJoVkhsd1pUdGNiaUFnYVdRNklFZHdkVVJoZEdGSlpEdGNiaUFnWW5WbVptVnlPaUJIVUZWQ2RXWm1aWEk3WEc1OVhHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdWR1Z1YzI5eVNXNW1ieUI3WEc0Z0lHUnBiWE02SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkTzF4dUlDQmtZWFJoVkhsd1pUb2diblZ0WW1WeU8xeHVmVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUZCeWIyZHlZVzFWYm1sbWIzSnRJSHRjYmlBZ2RIbHdaVG9nUkdGMFlWUjVjR1U3WEc0Z0lHUmhkR0U2SUc1MWJXSmxjbnh5WldGa2IyNXNlU0J1ZFcxaVpYSmJYVHRjYm4xY2JseHVaWGh3YjNKMElIUjVjR1VnVUhKdlozSmhiVlZ1YVdadmNtMVdZWEpwWVdKc1pVbHVabThnUFNCYmRIbHdaVG9nUkdGMFlWUjVjR1VzSUd4bGJtZDBhRG9nYm5WdFltVnlYVHRjYmx4dUx5b3FYRzRnS2lCU1pYQnlaWE5sYm5RZ2RHaGxJR1JsY0dWdVpHVnVZM2tnYjJZZ1lTQndjbTluY21GdElHOXVJR0VnYzNCbFkybG1hV01nYVc1d2RYUWdkR1Z1YzI5eUxseHVJQ3BjYmlBcUlDMGdKMjV2Ym1Vbk9pQjBhR1VnYzJoaFpHVnlMM1Z1YVdadmNtMGdaRzlsY3lCdWIzUWdaR1Z3Wlc1a0lHOXVJSFJvYVhNZ2FXNXdkWFFuY3lCcGJtWnZYRzRnS2lBdElDZDBlWEJsSnpvZ2RHaGxJSE5vWVdSbGNpOTFibWxtYjNKdElHUmxjR1Z1WkhNZ2IyNGdaR0YwWVNCMGVYQmxJRzltSUhSb2FYTWdhVzV3ZFhSY2JpQXFJQzBnSjNKaGJtc25PaUIwYUdVZ2MyaGhaR1Z5TDNWdWFXWnZjbTBnWkdWd1pXNWtjeUJ2YmlCa1lYUmhJSFI1Y0dVZ1lXNWtJSFJvWlNCeVlXNXJJRzltSUhSb2FYTWdhVzV3ZFhSY2JpQXFJQzBnSjJScGJYTW5PaUIwYUdVZ2MyaGhaR1Z5TDNWdWFXWnZjbTBnWkdWd1pXNWtjeUJ2YmlCa1lYUmhJSFI1Y0dVZ1lXNWtJSFJvWlNCa2FXMXpJRzltSUhSb2FYTWdhVzV3ZFhSY2JpQXFJQzBnSjJSaGRHRW5PaUIwYUdVZ2MyaGhaR1Z5TDNWdWFXWnZjbTBnWkdWd1pXNWtjeUJ2YmlCa1lYUmhJSFI1Y0dVc0lIUm9aU0JrYVcxeklHRnVaQ0IwYUdVZ1pHRjBZU0J2WmlCMGFHbHpJR2x1Y0hWMFhHNGdLaTljYm1WNGNHOXlkQ0IwZVhCbElGQnliMmR5WVcxSmJuQjFkRlJsYm5OdmNrbHVabTlFWlhCbGJtUmxibU41SUQwZ0oyNXZibVVuZkNkMGVYQmxKM3duY21GdWF5ZDhKMlJwYlhNbmZDZGtZWFJoSnp0Y2JseHVMeW9xWEc0Z0tpQlNaWEJ5WlhObGJuUWdhVzVtYjNKdFlYUnBiMjRnWVdKdmRYUWdZU0J3Y205bmNtRnRKM01nWTJGamFHVWdabTl5SUhOb1lXUmxjaTVjYmlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQlFjbTluY21GdFUyaGhaR1Z5UTJGamFHVkpibVp2SUh0Y2JpQWdMeW9xWEc0Z0lDQXFJR0Z1SUc5d2RHbHZibUZzSUhOMGNtbHVaeUJoY3lCaElHTmhZMmhsSUdocGJuUWdhVzRnZEdobElHRnlkR2xtWVdOMElHTmhZMmhsTGlCSlppQjBhR2x6SUdseklHNXZkQ0J6Y0dWamFXWnBaV1FzSUhSb1pTQmpZV05vWlNCb2FXNTBJSGRwYkd3Z1ltVWdaVzF3ZEhrdVhHNGdJQ0FxWEc0Z0lDQXFJRlJvYVhNZ2FHbHVkQ0J6ZEhKcGJtY2djMmh2ZFd4a0lHOXViSGtnWTI5dWRHRnBibk1nYVc1cGRHbGhiR2w2YVc1bkxYUnBiV1VnYVc1bWIzSnRZWFJwYjI0c0lITjFZMmdnWVhNZ2RHaGxJR0YwZEhKcFluVjBaWE1nYjNJZ1lXNTVJR2x1Wm05eWJXRjBhVzl1SUc5bVhHNGdJQ0FxSUdsdWFYUnBZV3hwZW1WeWN5NGdTWFFnYzJodmRXeGtJRTVQVkNCamIyNTBZV2x1SUdGdWVTQnlkVzUwYVcxbElHbHVabTl5YldGMGFXOXVMQ0J6ZFdOb0lHRnpJSFJvWlNCemFHRndaU0J2WmlCcGJuQjFkSE11WEc0Z0lDQXFMMXh1SUNCb2FXNTBQem9nYzNSeWFXNW5PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQmhiaUJ2Y0hScGIyNWhiQ0JzYVhOMElHOW1JR1JsY0dWdVpHVnVZMmxsY3lCdlppQjBhR1VnY0hKdlozSmhiU0J2YmlCMGFHVWdhVzV3ZFhRZ2RHVnVjMjl5Y3k0Z1NXWWdkR2hwY3lCcGN5QnViM1FnYzNCbFkybG1hV1ZrTENCMGFHVWdjSEp2WjNKaGJTQmtaWEJsYm1SelhHNGdJQ0FxSUc5dUlDZGthVzF6SnlCdlppQmhiR3dnYVc1d2RYUnpMbHh1SUNBZ0tpOWNiaUFnYVc1d2RYUkVaWEJsYm1SbGJtTnBaWE0vT2lCUWNtOW5jbUZ0U1c1d2RYUlVaVzV6YjNKSmJtWnZSR1Z3Wlc1a1pXNWplVnRkTzF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsY0hKbGMyVnVkQ0JwYm1admNtMWhkR2x2YmlCaFltOTFkQ0JoSUhCeWIyZHlZVzBuY3lCallXTm9aU0JtYjNJZ2RXNXBabTl5YlM1Y2JpQXFMMXh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JRY205bmNtRnRWVzVwWm05eWJVTmhZMmhsU1c1bWJ5QjdYRzRnSUM4cUtseHVJQ0FnS2lCaGJpQnZjSFJwYjI1aGJDQnpkSEpwYm1jZ1lYTWdZU0JqWVdOb1pTQm9hVzUwSUdsdUlIUm9aU0IxYm1sbWIzSnRJR05oWTJobExpQkpaaUIwYUdseklHbHpJRzV2ZENCemNHVmphV1pwWldRc0lIUm9aU0JqWVdOb1pTQm9hVzUwSUhkcGJHd2dZbVVnWlcxd2RIa3VYRzRnSUNBcVhHNGdJQ0FxSUZSb2FYTWdhR2x1ZENCemRISnBibWNnYzJodmRXeGtJRzl1YkhrZ1kyOXVkR0ZwYm5NZ2NuVnVkR2x0WlNCcGJtWnZjbTFoZEdsdmJpd2djM1ZqYUNCaGN5QjBhR1VnYzJoaGNHVWdiMllnYVc1d2RYUnpMbHh1SUNBZ0tpOWNiaUFnYUdsdWREODZJSE4wY21sdVp6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1lXNGdiM0IwYVc5dVlXd2diR2x6ZENCdlppQmtaWEJsYm1SbGJtTnBaWE1nYjJZZ2RHaGxJSEJ5YjJkeVlXMGdiMjRnZEdobElHbHVjSFYwSUhSbGJuTnZjbk11SUVsbUlIUm9hWE1nYVhNZ2JtOTBJSE53WldOcFptbGxaQ3dnZEdobElIQnliMmR5WVcwZ1pHVndaVzVrYzF4dUlDQWdLaUJ2YmlBbmJtOXVaU2NnYjJZZ1lXeHNJR2x1Y0hWMGN5NWNiaUFnSUNvdlhHNGdJR2x1Y0hWMFJHVndaVzVrWlc1amFXVnpQem9nVUhKdlozSmhiVWx1Y0hWMFZHVnVjMjl5U1c1bWIwUmxjR1Z1WkdWdVkzbGJYVHRjYm4xY2JseHVYRzR2S2lwY2JpQXFJRUVnYzJWMElHOW1JR1JoZEdFZ2RHaGhkQ0J5WlhCeVpYTmxiblFnWVNCemFHRmtaWElnY0hKdlozSmhiVnh1SUNvdlhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElGQnliMmR5WVcxSmJtWnZJSHRjYmlBZ0x5b3FYRzRnSUNBcUlIUm9aU0J1WVcxbElHOW1JSFJvWlNCd2NtOW5jbUZ0TGlCMWMyVmtJR1p2Y2lCa1pXSjFaMmRwYm1jZ1lXNWtJSEJ5YjJacGJHbHVaMXh1SUNBZ0tpOWNiaUFnYm1GdFpUb2djM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCaGJpQnZjSFJwYjI1aGJDQnZZbXBsWTNRZ1pHVnpZM0pwWW1sdVp5QjBhR1VnWTJGamFHVWdhVzVtYjNKdFlYUnBiMjRnYjJZZ2RHaGxJSEJ5YjJkeVlXMGdjMmhoWkdWeUxseHVJQ0FnS2x4dUlDQWdLaUJKWmlCMGFHbHpJR2x6SUc1dmRDQnpjR1ZqYVdacFpXUXNJR0Z6YzNWdFpTQm9hVzUwSUdseklHVnRjSFI1SUdGdVpDQnBibkIxZEVSbGNHVnVaR1Z1WTJsbGN5QmhjbVVnV3lka2FXMXpKMTBnWm05eUlHRnNiQ0JwYm5CMWRITXVYRzRnSUNBcUwxeHVJQ0J6YUdGa1pYSkRZV05vWlQ4NklGQnliMmR5WVcxVGFHRmtaWEpEWVdOb1pVbHVabTg3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJSFJvWlNCemFHRmtaWEluY3lCd2NtOWpaWE56YVc1bklITnZkWEpqWlNCamIyUmxMbHh1SUNBZ0tseHVJQ0FnS2lCVWFHbHpJR1oxYm1OMGFXOXVJSGRwYkd3Z1ltVWdZMkZzYkdWa0lIZG9aVzRnYzJoaFpHVnlJR05oWTJobElHMXBjM05sWkM1Y2JpQWdJQ292WEc0Z0lHZGxkRk5vWVdSbGNsTnZkWEpqWlRvZ0tITm9ZV1JsY2tobGJIQmxjam9nVTJoaFpHVnlTR1ZzY0dWeUtTQTlQaUJ6ZEhKcGJtYzdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFRWdablZ1WTNScGIyNGdkRzhnWjJWMElISjFiaUJrWVhSaElISmxjWFZwY21Wa0lIUnZJSEoxYmlCMGFHVWdjSEp2WjNKaGJTNWNiaUFnSUNwY2JpQWdJQ29nVkdocGN5Qm1kVzVqZEdsdmJpQjNhV3hzSUdKbElHTmhiR3hsWkNCbGRtVnllU0IwYVcxbElIUm9aU0J3Y205bmNtRnRJR2x6SUdWNFpXTjFkR1ZrTGlCVGFHOTFiR1FnYTJWbGNDQjBhR2x6SUdaMWJtTjBhVzl1SUdGeklITnBiWEJzWlNCaGN5QndiM056YVdKc1pTNWNiaUFnSUNvdlhHNGdJR2RsZEZKMWJrUmhkR0U2SUNocGJuQjFkSE02SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhTa2dQVDRnZTF4dUlDQWdJRzkxZEhCMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNrbHVabTliWFR0Y2JpQWdJQ0JrYVhOd1lYUmphRWR5YjNWd09pQjdlRG9nYm5WdFltVnlPeUI1UHpvZ2JuVnRZbVZ5T3lCNlB6b2diblZ0WW1WeWZUdGNiaUFnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE0vT2lCeVpXRmtiMjVzZVNCUWNtOW5jbUZ0Vlc1cFptOXliVnRkTzF4dUlDQjlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFRnlkR2xtWVdOMElIdGNiaUFnY0hKdlozSmhiVWx1Wm04NklGQnliMmR5WVcxSmJtWnZPMXh1SUNCamIyMXdkWFJsVUdsd1pXeHBibVU2SUVkUVZVTnZiWEIxZEdWUWFYQmxiR2x1WlR0Y2JpQWdkVzVwWm05eWJWWmhjbWxoWW14bGMwbHVabTg2SUhKbFlXUnZibXg1SUZCeWIyZHlZVzFWYm1sbWIzSnRWbUZ5YVdGaWJHVkpibVp2VzExOGRXNWtaV1pwYm1Wa08xeHVmVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVOdmJYQjFkR1ZEYjI1MFpYaDBTVzV3ZFhSelQzVjBjSFYwYzAxaGNIQnBibWNnZTF4dUlDQXZLaXBjYmlBZ0lDb2djM0JsWTJsbWVTQjBhR1VnYldGd2NHbHVaeUIwYnlCMGFHVWdjSEp2WjNKaGJTZHpJR2x1Y0hWMGN5NGdkR2hsSUhaaGJIVmxJR05oYmlCaVpTQmhJRzUxYldKbGNpQnZjaUJoSUhSbGJuTnZjaUIyYVdWM0xseHVJQ0FnS2lBdElHbG1JR2wwSjNNZ1lTQnVkVzFpWlhJc0lHbDBKM01nZEdobElHbHVaR1Y0SUc5bUlIUm9aU0JyWlhKdVpXd25jeUJwYm5CMWRGeHVJQ0FnS2lBdElHbG1JR2wwSjNNZ1lTQjBaVzV6YjNJZ2RtbGxkeXdnYVhRbmN5QmhiaUJsZUdsemRHbHVaeUIwWlc1emIzSWdkbWxsZHlCMGFHRjBJSGRwYkd3Z1ltVWdkWE5sWkNCaGN5QjBhR1VnYVc1d2RYUmNiaUFnSUNwY2JpQWdJQ29nYVdZZ2FXNXdkWFJ6SUdseklHNXZkQ0J6Y0dWamFXWnBaV1FzSUhSb1pTQnRZWEJ3YVc1bklIZHBiR3dnWW1VZ2RHaGxJR3RsY201bGJDZHpJR2x1Y0hWMGN5QnBiaUJ2Y21SbGNpNWNiaUFnSUNvdlhHNGdJSEpsWVdSdmJteDVJR2x1Y0hWMGN6ODZJRkpsWVdSdmJteDVRWEp5WVhrOFZHVnVjMjl5Vm1sbGQzeHVkVzFpWlhJK08xeHVJQ0F2S2lwY2JpQWdJQ29nYzNCbFkybG1lU0IwYUdVZ2JXRndjR2x1WnlCMGJ5QjBhR1VnY0hKdlozSmhiU2R6SUc5MWRIQjFkSE11SUhSb1pTQjJZV3gxWlNCdGRYTjBJR0psSUdFZ2JuVnRZbVZ5TGx4dUlDQWdLaUF0SUdsbUlHbDBKM01nWVNCdWIyNHRibVZuWVhScGRtVWdiblZ0WW1WeUxDQnBkQ2R6SUhSb1pTQnBibVJsZUNCdlppQjBhR1VnYTJWeWJtVnNKM01nYjNWMGNIVjBYRzRnSUNBcUlDMGdhV1lnYVhRbmN5QXRNU3dnYVhRbmN5QmhiaUJ2ZFhSd2RYUWdkR2hoZENCM2FXeHNJR0psSUdOeVpXRjBaV1FnWVhNZ1lTQjBaVzF3YjNKaGNua2dkbUZzZFdVdUlIUm9hWE1nZG1Gc2RXVWdkMmxzYkNCaVpTQnlaV3hsWVhObFpDQmhablJsY2x4dUlDQWdLaUIwYUdVZ2EyVnlibVZzSUdseklHVjRaV04xZEdWa0xseHVJQ0FnS2lBdElHbG1JR2wwSjNNZ0xUSXNJR2wwSjNNZ1lXNGdiM1YwY0hWMElIUm9ZWFFnZDJsc2JDQmlaU0JqY21WaGRHVmtJR0Z6SUdFZ2NHVnljMmx6ZEdWdWRDQjJZV3gxWlM0Z2RHaHBjeUIyWVd4MVpTQjNhV3hzSUdKbElISmxiR1ZoYzJWa0lIZG9aVzRnZEdobFhHNGdJQ0FxSUd0bGNtNWxiQ0JwY3lCeVpXeGxZWE5sWkM1Y2JpQWdJQ3BjYmlBZ0lDb2dhV1lnYjNWMGNIVjBjeUJwY3lCdWIzUWdjM0JsWTJsbWFXVmtMQ0IwYUdVZ2JXRndjR2x1WnlCM2FXeHNJR0psSUhSb1pTQnJaWEp1Wld3bmN5QnZkWFJ3ZFhSeklHbHVJRzl5WkdWeUxseHVJQ0FnS2k5Y2JpQWdjbVZoWkc5dWJIa2diM1YwY0hWMGN6ODZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFRWdRMjl0Y0hWMFpVTnZiblJsZUhRZ2FXNXpkR0Z1WTJVZ1kyRnljbWxsY3lCMGFHVWdjM1JoZEdWeklIUm9ZWFFnY21Wd2NtVnpaVzUwYVc1bklIUm9aU0JqZFhKeVpXNTBJSEoxYm01cGJtY2diMllnWVNCclpYSnVaV3d1WEc0Z0tpOWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdRMjl0Y0hWMFpVTnZiblJsZUhRZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nWjNCMUlHRmtZWEIwWlhJZ2FXNW1iMXh1SUNBZ0tpOWNiaUFnY21WaFpHOXViSGtnWVdSaGNIUmxja2x1Wm04NklFRmtZWEIwWlhKSmJtWnZPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQnpkRzl5WlhNZ2RHaGxJSEJ2YVc1MFpYSWdkRzhnVDNCTFpYSnVaV3hEYjI1MFpYaDBYRzRnSUNBcUwxeHVJQ0J5WldGa2IyNXNlU0J2Y0V0bGNtNWxiRU52Ym5SbGVIUTZJRzUxYldKbGNqdGNibHh1SUNBdktpcGNiaUFnSUNvZ1lTQnNhWE4wSUc5bUlHbHVjSFYwY3l3Z1pXRmphQ0JwYm5CMWRDQnBjeUJoYmlCcGJuTjBZVzVqWlNCdlppQlVaVzV6YjNKV2FXVjNYRzRnSUNBcUwxeHVJQ0J5WldGa2IyNXNlU0JwYm5CMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFR0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nWVNCamRYTjBiMjBnWkdGMFlTQnZZbXBsWTNRZ2RHaGhkQ0JqWVc0Z1ltVWdkWE5sWkNCMGJ5QnpkRzl5WlNCaGJua2daR0YwWVNCMGFHRjBJR2x6SUc1bFpXUmxaQ0JpZVNCMGFHVWdhMlZ5Ym1Wc1hHNGdJQ0FxTDF4dUlDQnlaV0ZrYjI1c2VTQnJaWEp1Wld4RGRYTjBiMjFFWVhSaE9pQjdXMnRsZVRvZ2MzUnlhVzVuWFRvZ2RXNXJibTkzYm4wN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUdFZ1luVm1abVZ5SUhSb1lYUWdZMkZ1SUdKbElIVnpaV1FnZEc4Z1lXTmpaWE56SUdOMWMzUnZiU0JrWVhSaElHTnlaV0YwWldRZ1pXRmphQ0IwYVcxbElIUm9aU0JyWlhKdVpXd2dhWE1nWlhobFkzVjBaV1JjYmlBZ0lDb3ZYRzRnSUhKbFlXUnZibXg1SUdOMWMzUnZiVVJoZEdGQ2RXWm1aWEk2SUZWcGJuUTRRWEp5WVhrN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUdFZ2JuVnRZbVZ5SUc5bUlHOTFkSEIxZEhNZ1ptOXlJSFJvWlNCdWIyUmxYRzRnSUNBcUwxeHVJQ0J5WldGa2IyNXNlU0J2ZFhSd2RYUkRiM1Z1ZERvZ2JuVnRZbVZ5TzF4dVhHNGdJR052YlhCMWRHVW9jSEp2WjNKaGJUb2dVSEp2WjNKaGJVbHVabThzSUdsdWNIVjBjMDkxZEhCMWRITk5ZWEJ3YVc1blB6b2dRMjl0Y0hWMFpVTnZiblJsZUhSSmJuQjFkSE5QZFhSd2RYUnpUV0Z3Y0dsdVp5azZJRlJsYm5OdmNsWnBaWGRiWFR0Y2JpQWdiM1YwY0hWMEtHbHVaR1Y0T2lCdWRXMWlaWElzSUdScGJYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRLVG9nYm5WdFltVnlPMXh1SUNCblpYUk5ZWGhEYjIxd2RYUmxWMjl5YTJkeWIzVndVMmw2WlhNb0tUb2dXMjUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhKZE8xeHVJQ0JuWlhSTllYaERiMjF3ZFhSbFYyOXlhMmR5YjNWd1UzUnZjbUZuWlhOcGVtVW9LVG9nYm5WdFltVnlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JVYVcxbGMzUmhiWEJSZFdWeWVTQTlJQ2R1YjI1bEozd25hVzV6YVdSbExYQmhjM05sY3lkOEoyRjBMWEJoYzNObGN5YzdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1YyVmlSM0IxUW1GamEyVnVaSDBnWm5KdmJTQW5MaTR2WW1GamEyVnVaQzEzWldKbmNIVW5PMXh1YVcxd2IzSjBJSHRNVDBkZlJFVkNWVWQ5SUdaeWIyMGdKeTR1TDJ4dlp5YzdYRzVjYm1sdGNHOXlkQ0I3UjNCMVJHRjBZU3dnUjNCMVJHRjBZVWxrTENCSGNIVkVZWFJoVkhsd1pYMGdabkp2YlNBbkxpOTBlWEJsY3ljN1hHNWNiaThxS2x4dUlDb2diV0Z1WVdkbGN5QkhjSFZFWVhSaFNXUWdMVDRnUjNCMVFuVm1abVZ5WEc0Z0tpOWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdSM0IxUkdGMFlVMWhibUZuWlhJZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nWTI5d2VTQmtZWFJoSUdaeWIyMGdRMUJWSUhSdklFZFFWUzVjYmlBZ0lDb3ZYRzRnSUhWd2JHOWhaQ2hwWkRvZ1IzQjFSR0YwWVVsa0xDQmtZWFJoT2lCVmFXNTBPRUZ5Y21GNUtUb2dkbTlwWkR0Y2JpQWdMeW9xWEc0Z0lDQXFJR052Y0hrZ1pHRjBZU0JtY205dElFZFFWU0IwYnlCSFVGVXVYRzRnSUNBcUwxeHVJQ0J0WlcxamNIa29jMjkxY21ObFNXUTZJRWR3ZFVSaGRHRkpaQ3dnWkdWemRHbHVZWFJwYjI1SlpEb2dSM0IxUkdGMFlVbGtLVG9nZG05cFpEdGNiaUFnTHlvcVhHNGdJQ0FxSUdOeVpXRjBaU0J1WlhjZ1pHRjBZU0J2YmlCSFVGVXVYRzRnSUNBcUwxeHVJQ0JqY21WaGRHVW9jMmw2WlRvZ2JuVnRZbVZ5TENCMWMyRm5aVDg2SUc1MWJXSmxjaWs2SUVkd2RVUmhkR0U3WEc0Z0lDOHFLbHh1SUNBZ0tpQm5aWFFnUjFCVklHUmhkR0VnWW5rZ1NVUXVYRzRnSUNBcUwxeHVJQ0JuWlhRb2FXUTZJRWR3ZFVSaGRHRkpaQ2s2SUVkd2RVUmhkR0Y4ZFc1a1pXWnBibVZrTzF4dUlDQXZLaXBjYmlBZ0lDb2djbVZzWldGelpTQjBhR1VnWkdGMFlTQnZiaUJIVUZVZ1lua2dTVVF1WEc0Z0lDQXFYRzRnSUNBcUlFQnlaWFIxY200Z2MybDZaU0J2WmlCMGFHVWdaR0YwWVNCeVpXeGxZWE5sWkZ4dUlDQWdLaTljYmlBZ2NtVnNaV0Z6WlNocFpEb2dSM0IxUkdGMFlVbGtLVG9nYm5WdFltVnlPMXh1SUNBdktpcGNiaUFnSUNvZ1kyOXdlU0JrWVhSaElHWnliMjBnUjFCVklIUnZJRU5RVlM1Y2JpQWdJQ292WEc0Z0lHUnZkMjVzYjJGa0tHbGtPaUJIY0hWRVlYUmhTV1FzSUdkbGRGUmhjbWRsZEVKMVptWmxjam9nS0NrZ1BUNGdWV2x1ZERoQmNuSmhlU2s2SUZCeWIyMXBjMlU4ZG05cFpENDdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlISmxabkpsYzJnZ2RHaGxJR0oxWm1abGNuTWdkR2hoZENCdFlYSnJaV1FnWm05eUlISmxiR1ZoYzJVdVhHNGdJQ0FxWEc0Z0lDQXFJSGRvWlc0Z2NtVnNaV0Z6WlNncElHbHpJR05oYkd4bFpDd2dkR2hsSUdKMVptWmxjaUJwY3lCdWIzUWdjbVZzWldGelpXUWdhVzF0WldScFlYUmxiSGt1SUhSb2FYTWdhWE1nWW1WallYVnpaU0IzWlNCdVpXVmtJSFJ2SUhkaGFYUWdabTl5SUhSb1pTQmpiMjF0WVc1a2MxeHVJQ0FnS2lCMGJ5QmlaU0J6ZFdKdGFYUjBaV1FnZEc4Z2RHaGxJRWRRVlM0Z2RHaHBjeUJtZFc1amRHbHZiaUJwY3lCallXeHNaV1FnWVdaMFpYSWdkR2hsSUdOdmJXMWhibVJ6SUdGeVpTQnpkV0p0YVhSMFpXUWdjMjhnZEdoaGRDQjBhR1VnWW5WbVptVnljeUJqWVc0Z1ltVmNiaUFnSUNvZ1lXTjBkV0ZzYkhrZ2NtVnNaV0Z6WldRdVhHNGdJQ0FxTDF4dUlDQnlaV1p5WlhOb1VHVnVaR2x1WjBKMVptWmxjbk1vS1RvZ2RtOXBaRHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2djbVZuYVhOMFpYSWdZVzRnWlhoMFpYSnVZV3dnWW5WbVptVnlJR1p2Y2lCSlR5QkNhVzVrYVc1bkxpQkpaaUIwYUdVZ1luVm1abVZ5SUdseklHRnNjbVZoWkhrZ2NtVm5hWE4wWlhKbFpDd2djbVYwZFhKdUlIUm9aU0JsZUdsemRHbHVaeUJIVUZVZ1pHRjBZU0JKUkM1Y2JpQWdJQ3BjYmlBZ0lDb2dSMUJWSUdSaGRHRWdiV0Z1WVdkbGNpQnZibXg1SUcxaGJtRm5aWE1nWVNCdFlYQndhVzVuSUdKbGRIZGxaVzRnZEdobElHSjFabVpsY2lCaGJtUWdkR2hsSUVkUVZTQmtZWFJoSUVsRUxpQkpkQ0IzYVd4c0lHNXZkQ0J0WVc1aFoyVWdkR2hsSUd4cFptVmplV05zWlNCdlpseHVJQ0FnS2lCMGFHVWdaWGgwWlhKdVlXd2dZblZtWm1WeUxseHVJQ0FnS2k5Y2JpQWdjbVZuYVhOMFpYSkZlSFJsY201aGJFSjFabVpsY2loaWRXWm1aWEk2SUVkUVZVSjFabVpsY2l3Z2IzSnBaMmx1WVd4VGFYcGxPaUJ1ZFcxaVpYSXNJSEJ5WlhacGIzVnpRblZtWm1WeVB6b2dSMUJWUW5WbVptVnlLVG9nYm5WdFltVnlPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQjFibkpsWjJsemRHVnlJR0Z1SUdWNGRHVnlibUZzSUdKMVptWmxjaUJtYjNJZ1NVOGdRbWx1WkdsdVp5NWNiaUFnSUNvdlhHNGdJSFZ1Y21WbmFYTjBaWEpGZUhSbGNtNWhiRUoxWm1abGNpaGlkV1ptWlhJNklFZFFWVUoxWm1abGNpazZJSFp2YVdRN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUdSbGMzUnliM2tnWVd4c0lHZHdkU0JpZFdabVpYSnpMbHh1SUNBZ0tpOWNiaUFnWkdsemNHOXpaU2dwT2lCMmIybGtPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQnlaV3hsWVhObElITmxjM05wYjI0Z2NtVnNZWFJsWkNCa1lYUmhMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2MyVnpjMmx2Ymtsa0lDMGdjM0JsWTJsbWVTQjBhR1VnYzJWemMybHZiaUJKUkM1Y2JpQWdJQ292WEc0Z0lHOXVVbVZzWldGelpWTmxjM05wYjI0b2MyVnpjMmx2Ymtsa09pQnVkVzFpWlhJcE9pQjJiMmxrTzF4dWZWeHVYRzVwYm5SbGNtWmhZMlVnVTNSdmNtRm5aVU5oWTJobFZtRnNkV1VnZTF4dUlDQm5jSFZFWVhSaE9pQkhjSFZFWVhSaE8xeHVJQ0J2Y21sbmFXNWhiRk5wZW1VNklHNTFiV0psY2p0Y2JuMWNibHh1WTI5dWMzUWdZblZqYTJWMFJuSmxaV3hwYzNRNklFMWhjRHh1ZFcxaVpYSXNJRzUxYldKbGNqNGdQU0J1WlhjZ1RXRndLRnRjYmlBZ1d6WTBMQ0F5TlRCZExGeHVJQ0JiTVRJNExDQXlNREJkTEZ4dUlDQmJNalUyTENBeU1EQmRMRnh1SUNCYk5URXlMQ0F5TURCZExGeHVJQ0JiTWpBME9Dd2dNak13WFN4Y2JpQWdXelF3T1RZc0lESXdNRjBzWEc0Z0lGczRNVGt5TENBMU1GMHNYRzRnSUZzeE5qTTROQ3dnTlRCZExGeHVJQ0JiTXpJM05qZ3NJRFV3WFN4Y2JpQWdXelkxTlRNMkxDQTFNRjBzWEc0Z0lGc3hNekV3TnpJc0lEVXdYU3hjYmlBZ1d6STJNakUwTkN3Z05UQmRMRnh1SUNCYk5USTBNamc0TENBMU1GMHNYRzRnSUZzeE1EUTROVGMyTENBMU1GMHNYRzRnSUZzeU1EazNNVFV5TENBek1GMHNYRzRnSUZzME1UazBNekEwTENBeU1GMHNYRzRnSUZzNE16ZzROakE0TENBeE1GMHNYRzRnSUZzeE1qVTRNamt4TWl3Z01UQmRMRnh1SUNCYk1UWTNOemN5TVRZc0lERXdYU3hjYmlBZ1d6STJNakUwTkRBd0xDQXhOVjBzWEc0Z0lGc3pNelUxTkRRek1pd2dNakpkTEZ4dUlDQmJORFF5TXpZNE1EQXNJREpkTEZ4dUlDQmJOVGc1T0RJME1EQXNJRFpkTEZ4dUlDQXZMeUIzWlNCa2IyNG5kQ0IzWVc1MElIUnZJR05oWTJobElIUm9aU0JpZFdOclpYUWdjMmw2WlhNZ1ltVnNiM2NnWW5WMElHNXZkQ0JqWVdOb2FXNW5JSFJvWlcxY2JpQWdMeThnY21WemRXeDBjeUJwYmlCemIyMWxJRzFoYW05eUlIQmxjbVp2Y20xaGJtTmxJR2hwZEhNZ1ptOXlJRzF2WkdWc2N5QnNhV3RsSUhOa0xYUjFjbUp2TGx4dUlDQmJOamN4TURnNE5qUXNJRFpkTEZ4dUlDQmJNVE0wTWpFM056STRMQ0EyWFN4Y2JpQWdXekUyTnpjM01qRTJNQ3dnTmwwc1hHNWRLVHRjYmx4dVkyOXVjM1FnWW5WamEyVjBRWEp5T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1WEc0dktpcGNiaUFxSUc1dmNtMWhiR2w2WlNCMGFHVWdZblZtWm1WeUlITnBlbVVnYzI4Z2RHaGhkQ0JwZENCbWFYUnpJSFJvWlNBeE1qZ3RZbWwwY3lBb01UWWdZbmwwWlhNcElHRnNhV2R1YldWdWRDNWNiaUFxTDF4dVkyOXVjM1FnWTJGc1kwNXZjbTFoYkdsNlpXUkNkV1ptWlhKVGFYcGxJRDBnS0hOcGVtVTZJRzUxYldKbGNpa2dQVDRnVFdGMGFDNWpaV2xzS0hOcGVtVWdMeUF4TmlrZ0tpQXhOanRjYmx4dUx5b3FYRzRnS2lCallXeGpkV3hoZEdVZ2RHaGxJR0oxWm1abGNpQnphWHBsSUhOdklIUm9ZWFFnYVhRZ1ptbDBjeUJwYm5SdklHSjFZMnRsZEhNdVhHNGdLaTljYm1OdmJuTjBJR05oYkdOQ2RXTnJaWFJDZFdabVpYSlRhWHBsSUQwZ0tITnBlbVU2SUc1MWJXSmxjaWtnUFQ0Z2UxeHVJQ0JtYjNJZ0tHeGxkQ0JwWkhnZ1BTQXdPeUJwWkhnZ1BDQmlkV05yWlhSQmNuSXViR1Z1WjNSb095QnBaSGdyS3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSE5wZW1WR2IzSkNkV05yWlhRZ1BTQmlkV05yWlhSQmNuSmJhV1I0WFR0Y2JpQWdJQ0JwWmlBb2MybDZaU0E4UFNCemFYcGxSbTl5UW5WamEyVjBLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdjMmw2WlVadmNrSjFZMnRsZER0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnTHk4Z2JtOTBJR2x1SUdKMVkydGxkQ0JzYVhOMElDMCtJR05oYkd4bGNpQjNhV3hzSUc1dmRDQmpZV05vWlN3Z2NtOTFibVFnZFhBZ2RHOGdNVFl1WEc0Z0lISmxkSFZ5YmlCTllYUm9MbU5sYVd3b2MybDZaU0F2SURFMktTQXFJREUyTzF4dWZUdGNibHh1YkdWMElHZDFhV1FnUFNBeE8xeHVZMjl1YzNRZ1kzSmxZWFJsVG1WM1IzQjFSR0YwWVVsa0lEMGdLQ2tnUFQ0Z1ozVnBaQ3NyTzF4dVhHNHZLaXBjYmlBcUlHVjRjRzl5ZEdWa0lITjBZVzVrWVhKa0lHUnZkMjVzYjJGa0lHWjFibU4wYVc5dUxpQlVhR2x6SUdaMWJtTjBhVzl1SUdseklIVnpaV1FnWW5rZ2RHaGxJSE5sYzNOcGIyNGdkRzhnWkc5M2JteHZZV1FnZEdobElHUmhkR0VnWm5KdmJTQkhVRlVzSUdGdVpDQmhiSE52SUdKNVhHNGdLaUJtWVdOMGIzSjVJSFJ2SUdOeVpXRjBaU0JIVUZVZ2RHVnVjMjl5Y3lCM2FYUm9JSFJvWlNCallYQmhZMmwwZVNCdlppQmtiM2R1Ykc5aFpHbHVaeUJrWVhSaElHWnliMjBnUjFCVkxseHVJQ3BjYmlBcUlFQndZWEpoYlNCaVlXTnJaVzVrSUMwZ2RHaGxJRmRsWWtkUVZTQmlZV05yWlc1a1hHNGdLaUJBY0dGeVlXMGdaM0IxUW5WbVptVnlJQzBnZEdobElFZFFWU0JpZFdabVpYSWdkRzhnWkc5M2JteHZZV1JjYmlBcUlFQndZWEpoYlNCdmNtbG5hVzVoYkZOcGVtVWdMU0IwYUdVZ2IzSnBaMmx1WVd3Z2MybDZaU0J2WmlCMGFHVWdaR0YwWVZ4dUlDb2dRSEJoY21GdElHZGxkRlJoY21kbGRFSjFabVpsY2lBdElHOXdkR2x2Ym1Gc0xpQkpaaUJ3Y205MmFXUmxaQ3dnZEdobElHUmhkR0VnZDJsc2JDQmlaU0JqYjNCcFpXUWdkRzhnZEdobElIUmhjbWRsZENCaWRXWm1aWEl1SUU5MGFHVnlkMmx6WlN3Z1lTQnVaWGNnWW5WbVptVnlYRzRnS2lCM2FXeHNJR0psSUdOeVpXRjBaV1FnWVc1a0lISmxkSFZ5Ym1Wa0xseHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdaRzkzYm14dllXUkhjSFZFWVhSaElEMWNiaUFnSUNCaGMzbHVZeWhpWVdOclpXNWtPaUJYWldKSGNIVkNZV05yWlc1a0xDQm5jSFZDZFdabVpYSTZJRWRRVlVKMVptWmxjaXdnYjNKcFoybHVZV3hUYVhwbE9pQnVkVzFpWlhJc0lHZGxkRlJoY21kbGRFSjFabVpsY2o4NklDZ3BJRDArSUZWcGJuUTRRWEp5WVhrcE9seHVJQ0FnSUNBZ0lDQlFjbTl0YVhObFBGVnBiblE0UVhKeVlYaytJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCaWRXWm1aWEpUYVhwbElEMGdZMkZzWTA1dmNtMWhiR2w2WldSQ2RXWm1aWEpUYVhwbEtHOXlhV2RwYm1Gc1UybDZaU2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWjNCMVVtVmhaRUoxWm1abGNpQTlJR0poWTJ0bGJtUXVaR1YyYVdObExtTnlaV0YwWlVKMVptWmxjaWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJRzV2TFdKcGRIZHBjMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdlM05wZW1VNklHSjFabVpsY2xOcGVtVXNJSFZ6WVdkbE9pQkhVRlZDZFdabVpYSlZjMkZuWlM1RFQxQlpYMFJUVkNCOElFZFFWVUoxWm1abGNsVnpZV2RsTGsxQlVGOVNSVUZFZlNrN1hHNGdJQ0FnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHTnZiVzFoYm1SRmJtTnZaR1Z5SUQwZ1ltRmphMlZ1WkM1blpYUkRiMjF0WVc1a1JXNWpiMlJsY2lncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWW1GamEyVnVaQzVsYm1SRGIyMXdkWFJsVUdGemN5Z3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXRiV0Z1WkVWdVkyOWtaWEl1WTI5d2VVSjFabVpsY2xSdlFuVm1abVZ5S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdkd2RVSjFabVpsY2lBdktpQnpiM1Z5WTJVZ1luVm1abVZ5SUNvdkxDQXdJQzhxSUhOdmRYSmpaU0J2Wm1aelpYUWdLaThzSUdkd2RWSmxZV1JDZFdabVpYSWdMeW9nWkdWemRHbHVZWFJwYjI0Z1luVm1abVZ5SUNvdkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEQWdMeW9nWkdWemRHbHVZWFJwYjI0Z2IyWm1jMlYwSUNvdkxDQmlkV1ptWlhKVGFYcGxJQzhxSUhOcGVtVWdLaTljYmlBZ0lDQWdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCaVlXTnJaVzVrTG1ac2RYTm9LQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR0YzWVdsMElHZHdkVkpsWVdSQ2RXWm1aWEl1YldGd1FYTjVibU1vUjFCVlRXRndUVzlrWlM1U1JVRkVLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1lYSnlZWGxDZFdabVpYSWdQU0JuY0hWU1pXRmtRblZtWm1WeUxtZGxkRTFoY0hCbFpGSmhibWRsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1oyVjBWR0Z5WjJWMFFuVm1abVZ5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklHbG1JSGRsSUdGc2NtVmhaSGtnYUdGMlpTQmhJRU5RVlNCaWRXWm1aWElnZEc4Z1lXTmpaWEIwSUhSb1pTQmtZWFJoTENCdWJ5QnVaV1ZrSUhSdklHTnNiMjVsSUhSb1pTQkJjbkpoZVVKMVptWmxjaTVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RHRnlaMlYwUW5WbVptVnlJRDBnWjJWMFZHRnlaMlYwUW5WbVptVnlLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFJoY21kbGRFSjFabVpsY2k1elpYUW9ibVYzSUZWcGJuUTRRWEp5WVhrb1lYSnlZWGxDZFdabVpYSXNJREFzSUc5eWFXZHBibUZzVTJsNlpTa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHRnlaMlYwUW5WbVptVnlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2RHaGxJRzFoY0hCbFpDQkJjbkpoZVVKMVptWmxjaUIzYVd4c0lHSmxJSEpsYkdWaGMyVmtJSGRvWlc0Z2RHaGxJRWRRVlNCaWRXWm1aWElnYVhNZ1pHVnpkSEp2ZVdWa0xpQk9aV1ZrSUhSdklHTnNiMjVsSUhSb1pWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QkJjbkpoZVVKMVptWmxjaTVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJWYVc1ME9FRnljbUY1S0dGeWNtRjVRblZtWm1WeUxuTnNhV05sS0RBc0lHOXlhV2RwYm1Gc1UybDZaU2twTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUgwZ1ptbHVZV3hzZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JuY0hWU1pXRmtRblZtWm1WeUxtUmxjM1J5YjNrb0tUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwN1hHNWNibU5zWVhOeklFZHdkVVJoZEdGTllXNWhaMlZ5U1cxd2JDQnBiWEJzWlcxbGJuUnpJRWR3ZFVSaGRHRk5ZVzVoWjJWeUlIdGNiaUFnTHk4Z1IxQlZJRVJoZEdFZ1NVUWdQVDRnUjFCVklFUmhkR0VnS0NCemRHOXlZV2RsSUdKMVptWmxjaUFwWEc0Z0lIQnlhWFpoZEdVZ2MzUnZjbUZuWlVOaFkyaGxPaUJOWVhBOFIzQjFSR0YwWVVsa0xDQlRkRzl5WVdkbFEyRmphR1ZXWVd4MVpUNDdYRzVjYmlBZ0x5OGdjR1Z1WkdsdVp5QmlkV1ptWlhKeklHWnZjaUIxY0d4dllXUnBibWNnS0NCa1lYUmhJR2x6SUhWdWJXRndjR1ZrSUNsY2JpQWdjSEpwZG1GMFpTQmlkV1ptWlhKelJtOXlWWEJzYjJGa2FXNW5VR1Z1WkdsdVp6b2dSMUJWUW5WbVptVnlXMTA3WEc0Z0lDOHZJSEJsYm1ScGJtY2dZblZtWm1WeWN5Qm1iM0lnWTI5dGNIVjBhVzVuWEc0Z0lIQnlhWFpoZEdVZ1luVm1abVZ5YzFCbGJtUnBibWM2SUVkUVZVSjFabVpsY2x0ZE8xeHVYRzRnSUM4dklGUm9aU0J5WlhWellXSnNaU0J6ZEc5eVlXZGxJR0oxWm1abGNuTWdabTl5SUdOdmJYQjFkR2x1Wnk1Y2JpQWdjSEpwZG1GMFpTQm1jbVZsUW5WbVptVnljem9nVFdGd1BHNTFiV0psY2l3Z1IxQlZRblZtWm1WeVcxMCtPMXh1SUNBdkx5QlVhR1VnY21WMWMyRmliR1VnZFc1cFptOXliU0JpZFdabVpYSnpYRzRnSUhCeWFYWmhkR1VnWm5KbFpWVnVhV1p2Y20xQ2RXWm1aWEp6T2lCTllYQThiblZ0WW1WeUxDQkhVRlZDZFdabVpYSmJYVDQ3WEc1Y2JpQWdMeThnVkdobElHVjRkR1Z5Ym1Gc0lHSjFabVpsY25NZ2NtVm5hWE4wWlhKbFpDQjFjMlZ5Y3lCbWIzSWdTVThnUW1sdVpHbHVaeTVjYmlBZ2NISnBkbUYwWlNCbGVIUmxjbTVoYkVKMVptWmxjbk02SUUxaGNEeEhVRlZDZFdabVpYSXNJRWR3ZFVSaGRHRkpaRDQ3WEc1Y2JpQWdMeThnVkdobElIQmxibVJwYm1kQ2RXWm1aWEp6SUdadmNpQmpZWEIwZFhKbElHZHlZWEJvTGx4dUlDQXZMeUJoSUZObGMzTnBiMjVKUkNBdFBpQkhVRlZDZFdabVpYSmJYU0J0WVhCd2FXNW5MbHh1SUNCd2NtbDJZWFJsSUdOaGNIUjFjbVZrVUdWdVpHbHVaMEoxWm1abGNuTTZJRTFoY0R4dWRXMWlaWElzSUVkUVZVSjFabVpsY2x0ZFBqdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaHdjbWwyWVhSbElHSmhZMnRsYm1RNklGZGxZa2R3ZFVKaFkydGxibVFwSUh0Y2JpQWdJQ0IwYUdsekxuTjBiM0poWjJWRFlXTm9aU0E5SUc1bGR5Qk5ZWEFvS1R0Y2JpQWdJQ0IwYUdsekxtWnlaV1ZDZFdabVpYSnpJRDBnYm1WM0lFMWhjQ2dwTzF4dUlDQWdJSFJvYVhNdVpuSmxaVlZ1YVdadmNtMUNkV1ptWlhKeklEMGdibVYzSUUxaGNDZ3BPMXh1SUNBZ0lIUm9hWE11WW5WbVptVnljMFp2Y2xWd2JHOWhaR2x1WjFCbGJtUnBibWNnUFNCYlhUdGNiaUFnSUNCMGFHbHpMbUoxWm1abGNuTlFaVzVrYVc1bklEMGdXMTA3WEc0Z0lDQWdkR2hwY3k1bGVIUmxjbTVoYkVKMVptWmxjbk1nUFNCdVpYY2dUV0Z3S0NrN1hHNGdJQ0FnZEdocGN5NWpZWEIwZFhKbFpGQmxibVJwYm1kQ2RXWm1aWEp6SUQwZ2JtVjNJRTFoY0NncE8xeHVYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQmJhMlY1TENCZElHOW1JR0oxWTJ0bGRFWnlaV1ZzYVhOMEtTQjdYRzRnSUNBZ0lDQmlkV05yWlhSQmNuSXVjSFZ6YUNoclpYa3BPMXh1SUNBZ0lDQWdkR2hwY3k1bWNtVmxRblZtWm1WeWN5NXpaWFFvYTJWNUxDQmJYU2s3WEc0Z0lDQWdJQ0IwYUdsekxtWnlaV1ZWYm1sbWIzSnRRblZtWm1WeWN5NXpaWFFvYTJWNUxDQmJYU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnZFhCc2IyRmtLR2xrT2lCSGNIVkVZWFJoU1dRc0lHUmhkR0U2SUZWcGJuUTRRWEp5WVhrcE9pQjJiMmxrSUh0Y2JpQWdJQ0JqYjI1emRDQnpjbU5CY25KaGVVSjFabVpsY2lBOUlHUmhkR0V1WW5WbVptVnlPMXh1SUNBZ0lHTnZibk4wSUhOeVkwOW1abk5sZENBOUlHUmhkR0V1WW5sMFpVOW1abk5sZER0Y2JpQWdJQ0JqYjI1emRDQnpjbU5NWlc1bmRHZ2dQU0JrWVhSaExtSjVkR1ZNWlc1bmRHZzdYRzRnSUNBZ1kyOXVjM1FnYzJsNlpTQTlJR05oYkdOT2IzSnRZV3hwZW1Wa1FuVm1abVZ5VTJsNlpTaHpjbU5NWlc1bmRHZ3BPMXh1WEc0Z0lDQWdMeThnWjJWMElHUmxjM1JwYm1GMGFXOXVJR2R3ZFNCaWRXWm1aWEpjYmlBZ0lDQmpiMjV6ZENCbmNIVkVZWFJoUTJGamFHVWdQU0IwYUdsekxuTjBiM0poWjJWRFlXTm9aUzVuWlhRb2FXUXBPMXh1SUNBZ0lHbG1JQ2doWjNCMVJHRjBZVU5oWTJobEtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oyZHdkU0JrWVhSaElHWnZjaUIxY0d4dllXUnBibWNnWkc5bGN5QnViM1FnWlhocGMzUW5LVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLR2R3ZFVSaGRHRkRZV05vWlM1dmNtbG5hVzVoYkZOcGVtVWdJVDA5SUhOeVkweGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCcGJtTnZibk5wYzNSbGJuUWdaR0YwWVNCemFYcGxMaUJuY0hVZ1pHRjBZU0J6YVhwbFBTUjdaM0IxUkdGMFlVTmhZMmhsTG05eWFXZHBibUZzVTJsNlpYMHNJR1JoZEdFZ2MybDZaVDBrZTNOeVkweGxibWQwYUgxZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QmpjbVZoZEdVZ1ozQjFJR0oxWm1abGNseHVJQ0FnSUdOdmJuTjBJR2R3ZFVKMVptWmxja1p2Y2xWd2JHOWhaR2x1WnlBOUlIUm9hWE11WW1GamEyVnVaQzVrWlhacFkyVXVZM0psWVhSbFFuVm1abVZ5S0Z4dUlDQWdJQ0FnSUNBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxdVpYaDBMV3hwYm1VZ2JtOHRZbWwwZDJselpWeHVJQ0FnSUNBZ0lDQjdiV0Z3Y0dWa1FYUkRjbVZoZEdsdmJqb2dkSEoxWlN3Z2MybDZaU3dnZFhOaFoyVTZJRWRRVlVKMVptWmxjbFZ6WVdkbExrMUJVRjlYVWtsVVJTQjhJRWRRVlVKMVptWmxjbFZ6WVdkbExrTlBVRmxmVTFKRGZTazdYRzVjYmlBZ0lDQXZMeUJqYjNCNUlDaDFjR3h2WVdRcElHUmhkR0ZjYmlBZ0lDQmpiMjV6ZENCaGNuSmhlVUoxWm1abGNpQTlJR2R3ZFVKMVptWmxja1p2Y2xWd2JHOWhaR2x1Wnk1blpYUk5ZWEJ3WldSU1lXNW5aU2dwTzF4dUlDQWdJRzVsZHlCVmFXNTBPRUZ5Y21GNUtHRnljbUY1UW5WbVptVnlLUzV6WlhRb2JtVjNJRlZwYm5RNFFYSnlZWGtvYzNKalFYSnlZWGxDZFdabVpYSXNJSE55WTA5bVpuTmxkQ3dnYzNKalRHVnVaM1JvS1NrN1hHNGdJQ0FnWjNCMVFuVm1abVZ5Um05eVZYQnNiMkZrYVc1bkxuVnViV0Z3S0NrN1hHNWNibHh1SUNBZ0lDOHZJRWRRVlNCamIzQjVYRzRnSUNBZ1kyOXVjM1FnWTI5dGJXRnVaRVZ1WTI5a1pYSWdQU0IwYUdsekxtSmhZMnRsYm1RdVoyVjBRMjl0YldGdVpFVnVZMjlrWlhJb0tUdGNiaUFnSUNCMGFHbHpMbUpoWTJ0bGJtUXVaVzVrUTI5dGNIVjBaVkJoYzNNb0tUdGNiaUFnSUNCamIyMXRZVzVrUlc1amIyUmxjaTVqYjNCNVFuVm1abVZ5Vkc5Q2RXWm1aWElvWjNCMVFuVm1abVZ5Um05eVZYQnNiMkZrYVc1bkxDQXdMQ0JuY0hWRVlYUmhRMkZqYUdVdVozQjFSR0YwWVM1aWRXWm1aWElzSURBc0lITnBlbVVwTzF4dVhHNGdJQ0FnVEU5SFgwUkZRbFZIS0NkMlpYSmliM05sSnl3Z0tDa2dQVDRnWUZ0WFpXSkhVRlZkSUVkd2RVUmhkR0ZOWVc1aFoyVnlMblZ3Ykc5aFpDaHBaRDBrZTJsa2ZTbGdLVHRjYmx4dUlDQWdJSFJvYVhNdVluVm1abVZ5YzBadmNsVndiRzloWkdsdVoxQmxibVJwYm1jdWNIVnphQ2huY0hWQ2RXWm1aWEpHYjNKVmNHeHZZV1JwYm1jcE8xeHVJQ0I5WEc1Y2JpQWdiV1Z0WTNCNUtITnZkWEpqWlVsa09pQkhjSFZFWVhSaFNXUXNJR1JsYzNScGJtRjBhVzl1U1dRNklFZHdkVVJoZEdGSlpDazZJSFp2YVdRZ2UxeHVJQ0FnSUM4dklHZGxkQ0J6YjNWeVkyVWdaM0IxSUdKMVptWmxjbHh1SUNBZ0lHTnZibk4wSUhOdmRYSmpaVWR3ZFVSaGRHRkRZV05vWlNBOUlIUm9hWE11YzNSdmNtRm5aVU5oWTJobExtZGxkQ2h6YjNWeVkyVkpaQ2s3WEc0Z0lDQWdhV1lnS0NGemIzVnlZMlZIY0hWRVlYUmhRMkZqYUdVcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmMyOTFjbU5sSUdkd2RTQmtZWFJoSUdadmNpQnRaVzFqY0hrZ1pHOWxjeUJ1YjNRZ1pYaHBjM1FuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdMeThnWjJWMElHUmxjM1JwYm1GMGFXOXVJR2R3ZFNCaWRXWm1aWEpjYmlBZ0lDQmpiMjV6ZENCa1pYTjBhVzVoZEdsdmJrZHdkVVJoZEdGRFlXTm9aU0E5SUhSb2FYTXVjM1J2Y21GblpVTmhZMmhsTG1kbGRDaGtaWE4wYVc1aGRHbHZia2xrS1R0Y2JpQWdJQ0JwWmlBb0lXUmxjM1JwYm1GMGFXOXVSM0IxUkdGMFlVTmhZMmhsS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJSbGMzUnBibUYwYVc5dUlHZHdkU0JrWVhSaElHWnZjaUJ0WlcxamNIa2daRzlsY3lCdWIzUWdaWGhwYzNRbktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tITnZkWEpqWlVkd2RVUmhkR0ZEWVdOb1pTNXZjbWxuYVc1aGJGTnBlbVVnSVQwOUlHUmxjM1JwYm1GMGFXOXVSM0IxUkdGMFlVTmhZMmhsTG05eWFXZHBibUZzVTJsNlpTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHBibU52Ym5OcGMzUmxiblFnYzI5MWNtTmxJR0Z1WkNCa1pYTjBhVzVoZEdsdmJpQm5jSFVnWkdGMFlTQnphWHBsSnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWTI5dWMzUWdjMmw2WlNBOUlHTmhiR05PYjNKdFlXeHBlbVZrUW5WbVptVnlVMmw2WlNoemIzVnlZMlZIY0hWRVlYUmhRMkZqYUdVdWIzSnBaMmx1WVd4VGFYcGxLVHRjYmx4dUlDQWdJQzh2SUVkUVZTQmpiM0I1WEc0Z0lDQWdZMjl1YzNRZ1kyOXRiV0Z1WkVWdVkyOWtaWElnUFNCMGFHbHpMbUpoWTJ0bGJtUXVaMlYwUTI5dGJXRnVaRVZ1WTI5a1pYSW9LVHRjYmlBZ0lDQjBhR2x6TG1KaFkydGxibVF1Wlc1a1EyOXRjSFYwWlZCaGMzTW9LVHRjYmlBZ0lDQmpiMjF0WVc1a1JXNWpiMlJsY2k1amIzQjVRblZtWm1WeVZHOUNkV1ptWlhJb1hHNGdJQ0FnSUNBZ0lITnZkWEpqWlVkd2RVUmhkR0ZEWVdOb1pTNW5jSFZFWVhSaExtSjFabVpsY2l3Z01Dd2daR1Z6ZEdsdVlYUnBiMjVIY0hWRVlYUmhRMkZqYUdVdVozQjFSR0YwWVM1aWRXWm1aWElzSURBc0lITnBlbVVwTzF4dUlDQjlYRzVjYmlBZ2NtVm5hWE4wWlhKRmVIUmxjbTVoYkVKMVptWmxjaWhpZFdabVpYSTZJRWRRVlVKMVptWmxjaXdnYjNKcFoybHVZV3hUYVhwbE9pQnVkVzFpWlhJc0lIQnlaWFpwYjNWelFuVm1abVZ5UHpvZ1IxQlZRblZtWm1WeUtUb2diblZ0WW1WeUlIdGNiaUFnSUNCc1pYUWdhV1E2SUc1MWJXSmxjbngxYm1SbFptbHVaV1E3WEc0Z0lDQWdhV1lnS0hCeVpYWnBiM1Z6UW5WbVptVnlLU0I3WEc0Z0lDQWdJQ0JwWkNBOUlIUm9hWE11WlhoMFpYSnVZV3hDZFdabVpYSnpMbWRsZENod2NtVjJhVzkxYzBKMVptWmxjaWs3WEc0Z0lDQWdJQ0JwWmlBb2FXUWdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0ozQnlaWFpwYjNWeklHSjFabVpsY2lCcGN5QnViM1FnY21WbmFYTjBaWEpsWkNjcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLR0oxWm1abGNpQTlQVDBnY0hKbGRtbHZkWE5DZFdabVpYSXBJSHRjYmlBZ0lDQWdJQ0FnVEU5SFgwUkZRbFZIS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdKM1psY21KdmMyVW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0tDa2dQVDRnWUZ0WFpXSkhVRlZkSUVkd2RVUmhkR0ZOWVc1aFoyVnlMbkpsWjJsemRHVnlSWGgwWlhKdVlXeENkV1ptWlhJb2MybDZaVDBrZTI5eWFXZHBibUZzVTJsNlpYMHBJRDArSUdsa1BTUjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1I5TENCaWRXWm1aWElnYVhNZ2RHaGxJSE5oYldVc0lITnJhWEF1WUNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCcFpEdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9kR2hwY3k1aVlXTnJaVzVrTG1OaGNIUjFjbVZrUTI5dGJXRnVaRXhwYzNRdWFHRnpLSFJvYVhNdVltRmphMlZ1WkM1amRYSnlaVzUwVTJWemMybHZia2xrSVNrcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQlNaV2RwYzNSbGNtbHVaeUJoSUdScFptWmxjbVZ1ZENCbGVIUmxjbTVoYkNCaWRXWm1aWElnZFc1a1pYSWdaM0poY0dnZ1kyRndkSFZ5WlNCdGIyUmxJR2x6SUc1dmRDQnpkWEJ3YjNKMFpXUWdlV1YwTGx4dUlDQWdJQ0FnSUNBZ0lDQWdJRkJzWldGelpTQjFjMlVnZEdobElIQnlaWFpwYjNWeklHVjRkR1Z5Ym1Gc0lHSjFabVpsY2lGZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIUm9hWE11WlhoMFpYSnVZV3hDZFdabVpYSnpMbVJsYkdWMFpTaHdjbVYyYVc5MWMwSjFabVpsY2lrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR2xrSUQwZ1kzSmxZWFJsVG1WM1IzQjFSR0YwWVVsa0tDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RHaHBjeTV6ZEc5eVlXZGxRMkZqYUdVdWMyVjBLR2xrTENCN1ozQjFSR0YwWVRvZ2UybGtMQ0IwZVhCbE9pQkhjSFZFWVhSaFZIbHdaUzVrWldaaGRXeDBMQ0JpZFdabVpYSjlMQ0J2Y21sbmFXNWhiRk5wZW1WOUtUdGNiaUFnSUNCMGFHbHpMbVY0ZEdWeWJtRnNRblZtWm1WeWN5NXpaWFFvWW5WbVptVnlMQ0JwWkNrN1hHNGdJQ0FnVEU5SFgwUkZRbFZIS0Z4dUlDQWdJQ0FnSUNBbmRtVnlZbTl6WlNjc1hHNGdJQ0FnSUNBZ0lDZ3BJRDArSUdCYlYyVmlSMUJWWFNCSGNIVkVZWFJoVFdGdVlXZGxjaTV5WldkcGMzUmxja1Y0ZEdWeWJtRnNRblZtWm1WeUtITnBlbVU5Skh0dmNtbG5hVzVoYkZOcGVtVjlLU0E5UGlCcFpEMGtlMmxrZlN3Z2NtVm5hWE4wWlhKbFpDNWdLVHRjYmlBZ0lDQnlaWFIxY200Z2FXUTdYRzRnSUgxY2JseHVJQ0IxYm5KbFoybHpkR1Z5UlhoMFpYSnVZV3hDZFdabVpYSW9ZblZtWm1WeU9pQkhVRlZDZFdabVpYSXBPaUIyYjJsa0lIdGNiaUFnSUNCamIyNXpkQ0JwWkNBOUlIUm9hWE11WlhoMFpYSnVZV3hDZFdabVpYSnpMbWRsZENoaWRXWm1aWElwTzF4dUlDQWdJR2xtSUNocFpDQWhQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbk4wYjNKaFoyVkRZV05vWlM1a1pXeGxkR1VvYVdRcE8xeHVJQ0FnSUNBZ2RHaHBjeTVsZUhSbGNtNWhiRUoxWm1abGNuTXVaR1ZzWlhSbEtHSjFabVpsY2lrN1hHNGdJQ0FnSUNCTVQwZGZSRVZDVlVjb0ozWmxjbUp2YzJVbkxDQW9LU0E5UGlCZ1cxZGxZa2RRVlYwZ1IzQjFSR0YwWVUxaGJtRm5aWEl1ZFc1eVpXZHBjM1JsY2tWNGRHVnlibUZzUW5WbVptVnlLQ2tnUFQ0Z2FXUTlKSHRwWkgxZ0tUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdibTh0WW1sMGQybHpaVnh1SUNCamNtVmhkR1VvYzJsNlpUb2diblZ0WW1WeUxDQjFjMkZuWlNBOUlFZFFWVUoxWm1abGNsVnpZV2RsTGxOVVQxSkJSMFVnZkNCSFVGVkNkV1ptWlhKVmMyRm5aUzVEVDFCWlgxTlNReUI4SUVkUVZVSjFabVpsY2xWellXZGxMa05QVUZsZlJGTlVLVG9nUjNCMVJHRjBZU0I3WEc0Z0lDQWdZMjl1YzNRZ1luVm1abVZ5VTJsNlpTQTlJR05oYkdOQ2RXTnJaWFJDZFdabVpYSlRhWHBsS0hOcGVtVXBPMXh1WEc0Z0lDQWdiR1YwSUdkd2RVSjFabVpsY2p0Y2JpQWdJQ0F2THlCRGRYSnlaVzUwYkhrc0lHOXViSGtnYzNSdmNtRm5aU0JpZFdabVpYSnpJR0Z5WlNCeVpYVnpaV1F1WEc0Z0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJRzV2TFdKcGRIZHBjMlZjYmlBZ0lDQmpiMjV6ZENCcGMxTjBiM0poWjJVZ1BTQW9kWE5oWjJVZ0ppQkhVRlZDZFdabVpYSlZjMkZuWlM1VFZFOVNRVWRGS1NBOVBUMGdSMUJWUW5WbVptVnlWWE5oWjJVdVUxUlBVa0ZIUlR0Y2JpQWdJQ0F2THlCbGMyeHBiblF0WkdsellXSnNaUzF1WlhoMExXeHBibVVnYm04dFltbDBkMmx6WlZ4dUlDQWdJR052Ym5OMElHbHpWVzVwWm05eWJTQTlJQ2gxYzJGblpTQW1JRWRRVlVKMVptWmxjbFZ6WVdkbExsVk9TVVpQVWswcElEMDlQU0JIVUZWQ2RXWm1aWEpWYzJGblpTNVZUa2xHVDFKTk8xeHVJQ0FnSUdsbUlDaHBjMU4wYjNKaFoyVWdmSHdnYVhOVmJtbG1iM0p0S1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JtY21WbFFuVm1abVZ5Y3lBOUlHbHpVM1J2Y21GblpTQS9JSFJvYVhNdVpuSmxaVUoxWm1abGNuTWdPaUIwYUdsekxtWnlaV1ZWYm1sbWIzSnRRblZtWm1WeWN6dGNiaUFnSUNBZ0lHTnZibk4wSUdKMVptWmxjbk1nUFNCbWNtVmxRblZtWm1WeWN5NW5aWFFvWW5WbVptVnlVMmw2WlNrN1hHNGdJQ0FnSUNCcFppQW9JV0oxWm1abGNuTXBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2JtOGdjM1ZqYUNCaWRXTnJaWFF2Wm5KbFpXeHBjM1FnTFNCamNtVmhkR1VnWjNCMUlHSjFabVpsY2x4dUlDQWdJQ0FnSUNCbmNIVkNkV1ptWlhJZ1BTQjBhR2x6TG1KaFkydGxibVF1WkdWMmFXTmxMbU55WldGMFpVSjFabVpsY2loN2MybDZaVG9nWW5WbVptVnlVMmw2WlN3Z2RYTmhaMlY5S1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaGlkV1ptWlhKekxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QnBiaUJtY21WbGJHbHpkQ3dnZFhObElHbDBYRzRnSUNBZ0lDQWdJQ0FnWjNCMVFuVm1abVZ5SUQwZ1luVm1abVZ5Y3k1d2IzQW9LU0JoY3lCSFVGVkNkV1ptWlhJN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnWW5WamEyVjBJR1Z0Y0hSNUxDQmpjbVZoZEdVZ1ozQjFJR0oxWm1abGNseHVJQ0FnSUNBZ0lDQWdJR2R3ZFVKMVptWmxjaUE5SUhSb2FYTXVZbUZqYTJWdVpDNWtaWFpwWTJVdVkzSmxZWFJsUW5WbVptVnlLSHR6YVhwbE9pQmlkV1ptWlhKVGFYcGxMQ0IxYzJGblpYMHBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDOHZJR055WldGMFpTQm5jSFVnWW5WbVptVnlYRzRnSUNBZ0lDQm5jSFZDZFdabVpYSWdQU0IwYUdsekxtSmhZMnRsYm1RdVpHVjJhV05sTG1OeVpXRjBaVUoxWm1abGNpaDdjMmw2WlRvZ1luVm1abVZ5VTJsNlpTd2dkWE5oWjJWOUtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCamIyNXpkQ0JuY0hWRVlYUmhJRDBnZTJsa09pQmpjbVZoZEdWT1pYZEhjSFZFWVhSaFNXUW9LU3dnZEhsd1pUb2dSM0IxUkdGMFlWUjVjR1V1WkdWbVlYVnNkQ3dnWW5WbVptVnlPaUJuY0hWQ2RXWm1aWEo5TzF4dUlDQWdJSFJvYVhNdWMzUnZjbUZuWlVOaFkyaGxMbk5sZENobmNIVkVZWFJoTG1sa0xDQjdaM0IxUkdGMFlTd2diM0pwWjJsdVlXeFRhWHBsT2lCemFYcGxmU2s3WEc1Y2JpQWdJQ0JNVDBkZlJFVkNWVWNvSjNabGNtSnZjMlVuTENBb0tTQTlQaUJnVzFkbFlrZFFWVjBnUjNCMVJHRjBZVTFoYm1GblpYSXVZM0psWVhSbEtITnBlbVU5Skh0emFYcGxmU2tnUFQ0Z2FXUTlKSHRuY0hWRVlYUmhMbWxrZldBcE8xeHVJQ0FnSUhKbGRIVnliaUJuY0hWRVlYUmhPMXh1SUNCOVhHNWNiaUFnWjJWMEtHbGtPaUJIY0hWRVlYUmhTV1FwT2lCSGNIVkVZWFJoZkhWdVpHVm1hVzVsWkNCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWMzUnZjbUZuWlVOaFkyaGxMbWRsZENocFpDay9MbWR3ZFVSaGRHRTdYRzRnSUgxY2JseHVJQ0J5Wld4bFlYTmxLR2xrT2lCSGNIVkVZWFJoU1dRcE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUdOdmJuTjBJR05oWTJobFpFUmhkR0VnUFNCMGFHbHpMbk4wYjNKaFoyVkRZV05vWlM1blpYUW9hV1FwTzF4dUlDQWdJR2xtSUNnaFkyRmphR1ZrUkdGMFlTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHlaV3hsWVhOcGJtY2daR0YwWVNCa2IyVnpJRzV2ZENCbGVHbHpkQ2NwTzF4dUlDQWdJSDFjYmx4dUlDQWdJRXhQUjE5RVJVSlZSeWduZG1WeVltOXpaU2NzSUNncElEMCtJR0JiVjJWaVIxQlZYU0JIY0hWRVlYUmhUV0Z1WVdkbGNpNXlaV3hsWVhObEtHbGtQU1I3YVdSOUtTd2daM0IxUkdGMFlVbGtQU1I3WTJGamFHVmtSR0YwWVM1bmNIVkVZWFJoTG1sa2ZXQXBPMXh1WEc0Z0lDQWdkR2hwY3k1emRHOXlZV2RsUTJGamFHVXVaR1ZzWlhSbEtHbGtLVHRjYmlBZ0lDQjBhR2x6TG1KMVptWmxjbk5RWlc1a2FXNW5MbkIxYzJnb1kyRmphR1ZrUkdGMFlTNW5jSFZFWVhSaExtSjFabVpsY2lrN1hHNGdJQ0FnTHk4Z1kyRmphR1ZrUkdGMFlTNW5jSFZFWVhSaExtSjFabVpsY2k1a1pYTjBjbTk1S0NrN1hHNWNiaUFnSUNCeVpYUjFjbTRnWTJGamFHVmtSR0YwWVM1dmNtbG5hVzVoYkZOcGVtVTdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QmtiM2R1Ykc5aFpDaHBaRG9nUjNCMVJHRjBZVWxrTENCblpYUlVZWEpuWlhSQ2RXWm1aWEk2SUNncElEMCtJRlZwYm5RNFFYSnlZWGtwT2lCUWNtOXRhWE5sUEhadmFXUStJSHRjYmlBZ0lDQmpiMjV6ZENCallXTm9aV1JFWVhSaElEMGdkR2hwY3k1emRHOXlZV2RsUTJGamFHVXVaMlYwS0dsa0tUdGNiaUFnSUNCcFppQW9JV05oWTJobFpFUmhkR0VwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduWkdGMFlTQmtiMlZ6SUc1dmRDQmxlR2x6ZENjcE8xeHVJQ0FnSUgxY2JpQWdJQ0JoZDJGcGRDQmtiM2R1Ykc5aFpFZHdkVVJoZEdFb2RHaHBjeTVpWVdOclpXNWtMQ0JqWVdOb1pXUkVZWFJoTG1kd2RVUmhkR0V1WW5WbVptVnlMQ0JqWVdOb1pXUkVZWFJoTG05eWFXZHBibUZzVTJsNlpTd2daMlYwVkdGeVoyVjBRblZtWm1WeUtUdGNiaUFnZlZ4dVhHNGdJSEpsWm5KbGMyaFFaVzVrYVc1blFuVm1abVZ5Y3lncE9pQjJiMmxrSUh0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUdKMVptWmxjaUJ2WmlCMGFHbHpMbUoxWm1abGNuTkdiM0pWY0d4dllXUnBibWRRWlc1a2FXNW5LU0I3WEc0Z0lDQWdJQ0F2THlCMWNHeHZZV1FnWW5WbVptVnlJR2x6SUc5dWJIa2dkWE5sWm5Wc0lHbHVJSFJvWlNCelpYTnphVzl1SUdOeVpXRjBhVzl1SUhScGJXVXVJRk52SUhkbElHUnZiaWQwSUc1bFpXUWdkRzhnY21WMWMyVWdkR2hsYlNCcGJpQnpaWE56YVc5dUlISjFibTVwYm1jdVhHNGdJQ0FnSUNCaWRXWm1aWEl1WkdWemRISnZlU2dwTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG1KMVptWmxjbk5HYjNKVmNHeHZZV1JwYm1kUVpXNWthVzVuSUQwZ1cxMDdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWlkV1ptWlhKelVHVnVaR2x1Wnk1c1pXNW5kR2dnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9kR2hwY3k1aVlXTnJaVzVrTG5ObGMzTnBiMjVUZEdGMGRYTWdQVDA5SUNka1pXWmhkV3gwSnlrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQmlkV1ptWlhJZ2IyWWdkR2hwY3k1aWRXWm1aWEp6VUdWdVpHbHVaeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J0WVhoSmJrWnlaV1ZNYVhOMElEMGdZblZqYTJWMFJuSmxaV3hwYzNRdVoyVjBLR0oxWm1abGNpNXphWHBsS1R0Y2JseHVJQ0FnSUNBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdibTh0WW1sMGQybHpaVnh1SUNBZ0lDQWdJQ0JwWmlBb0tHSjFabVpsY2k1MWMyRm5aU0FtSUVkUVZVSjFabVpsY2xWellXZGxMbE5VVDFKQlIwVXBJRDA5UFNCSFVGVkNkV1ptWlhKVmMyRm5aUzVUVkU5U1FVZEZLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdVSFYwSUhSb1pTQndaVzVrYVc1bklHSjFabVpsY2lCMGJ5Qm1jbVZsUW5WbVptVnljeUJzYVhOMElHbHVjM1JsWVdRZ2IyWWdjbVZoYkd4NUlHUmxjM1J5YjNscGJtY2dhWFFnWm05eUlHSjFabVpsY2lCeVpYVnphVzVuTGx4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdaeVpXVnNhWE4wSUQwZ2RHaHBjeTVtY21WbFFuVm1abVZ5Y3k1blpYUW9ZblZtWm1WeUxuTnBlbVVwSUh4OElGdGRPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHRZWGhKYmtaeVpXVk1hWE4wSUQwOVBTQjFibVJsWm1sdVpXUWdmSHdnWm5KbFpXeHBjM1F1YkdWdVozUm9JRDQ5SUcxaGVFbHVSbkpsWlV4cGMzUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHSjFabVpsY2k1a1pYTjBjbTk1S0NrN1hHNGdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdaeVpXVnNhWE4wTG5CMWMyZ29ZblZtWm1WeUtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElHNXZMV0pwZEhkcGMyVmNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2dvWW5WbVptVnlMblZ6WVdkbElDWWdSMUJWUW5WbVptVnlWWE5oWjJVdVZVNUpSazlTVFNrZ1BUMDlJRWRRVlVKMVptWmxjbFZ6WVdkbExsVk9TVVpQVWswcElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCUWRYUWdkR2hsSUhCbGJtUnBibWNnWW5WbVptVnlJSFJ2SUdaeVpXVlZibWxtYjNKdFFuVm1abVZ5Y3lCc2FYTjBJR2x1YzNSbFlXUWdiMllnY21WaGJHeDVJR1JsYzNSeWIzbHBibWNnYVhRZ1ptOXlJR0oxWm1abGNpQnlaWFZ6YVc1bkxseHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHWnlaV1ZzYVhOMElEMGdkR2hwY3k1bWNtVmxWVzVwWm05eWJVSjFabVpsY25NdVoyVjBLR0oxWm1abGNpNXphWHBsS1NCOGZDQmJYVHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9iV0Y0U1c1R2NtVmxUR2x6ZENBOVBUMGdkVzVrWldacGJtVmtJSHg4SUdaeVpXVnNhWE4wTG14bGJtZDBhQ0ErUFNCdFlYaEpia1p5WldWTWFYTjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmlkV1ptWlhJdVpHVnpkSEp2ZVNncE8xeHVJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCbWNtVmxiR2x6ZEM1d2RYTm9LR0oxWm1abGNpazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lHSjFabVpsY2k1a1pYTjBjbTk1S0NrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIUm9hWE11WW5WbVptVnljMUJsYm1ScGJtY2dQU0JiWFR0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdMeThnUkc5dUozUWdjbVZzWldGelpTQnBiblJsY20xbFpHbGhkR1VnZEdWdWMyOXljeUJwYmlCdWIyNHRaR1ZtWVhWc2RDQnRiMlJsTGx4dUlDQWdJQ0FnTHk4Z1ZFOUVUem9nY21WMWMyVWdkR2hsSUhOMGIzSmhaMlVnWW5WbVptVnljeUJwYmlCdWIyNHRaR1ZtWVhWc2RDQnRiMlJsTGx4dUlDQWdJQ0FnYkdWMElHTmhjSFIxY21Wa1FuVm1abVZ5Y3lBOUlIUm9hWE11WTJGd2RIVnlaV1JRWlc1a2FXNW5RblZtWm1WeWN5NW5aWFFvZEdocGN5NWlZV05yWlc1a0xtTjFjbkpsYm5SVFpYTnphVzl1U1dRaEtUdGNiaUFnSUNBZ0lHbG1JQ2doWTJGd2RIVnlaV1JDZFdabVpYSnpLU0I3WEc0Z0lDQWdJQ0FnSUdOaGNIUjFjbVZrUW5WbVptVnljeUE5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1OaGNIUjFjbVZrVUdWdVpHbHVaMEoxWm1abGNuTXVjMlYwS0hSb2FYTXVZbUZqYTJWdVpDNWpkWEp5Wlc1MFUyVnpjMmx2Ymtsa0lTd2dZMkZ3ZEhWeVpXUkNkV1ptWlhKektUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHWnZjaUFvWTI5dWMzUWdZblZtWm1WeUlHOW1JSFJvYVhNdVluVm1abVZ5YzFCbGJtUnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ1kyRndkSFZ5WldSQ2RXWm1aWEp6TG5CMWMyZ29ZblZtWm1WeUtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIUm9hWE11WW5WbVptVnljMUJsYm1ScGJtY2dQU0JiWFR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCa2FYTndiM05sS0NrZ2UxeHVJQ0FnSUhSb2FYTXVabkpsWlVKMVptWmxjbk11Wm05eVJXRmphQ2dvWW5WbVptVnljeWtnUFQ0Z2UxeHVJQ0FnSUNBZ1luVm1abVZ5Y3k1bWIzSkZZV05vS0dKMVptWmxjaUE5UGlCN1hHNGdJQ0FnSUNBZ0lHSjFabVpsY2k1a1pYTjBjbTk1S0NrN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOUtUdGNiaUFnSUNCMGFHbHpMbVp5WldWVmJtbG1iM0p0UW5WbVptVnljeTVtYjNKRllXTm9LQ2hpZFdabVpYSnpLU0E5UGlCN1hHNGdJQ0FnSUNCaWRXWm1aWEp6TG1admNrVmhZMmdvWW5WbVptVnlJRDArSUh0Y2JpQWdJQ0FnSUNBZ1luVm1abVZ5TG1SbGMzUnliM2tvS1R0Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUgwcE8xeHVYRzRnSUNBZ2RHaHBjeTV6ZEc5eVlXZGxRMkZqYUdVdVptOXlSV0ZqYUNnb2MzUnZjbUZuWlNrZ1BUNGdlMXh1SUNBZ0lDQWdjM1J2Y21GblpTNW5jSFZFWVhSaExtSjFabVpsY2k1a1pYTjBjbTk1S0NrN1hHNGdJQ0FnZlNrN1hHNWNiaUFnSUNCMGFHbHpMbU5oY0hSMWNtVmtVR1Z1WkdsdVowSjFabVpsY25NdVptOXlSV0ZqYUNnb1luVm1abVZ5Y3lrZ1BUNGdlMXh1SUNBZ0lDQWdZblZtWm1WeWN5NW1iM0pGWVdOb0tHSjFabVpsY2lBOVBpQjdYRzRnSUNBZ0lDQWdJR0oxWm1abGNpNWtaWE4wY205NUtDazdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlLVHRjYmlBZ0lDQjBhR2x6TG5OMGIzSmhaMlZEWVdOb1pTQTlJRzVsZHlCTllYQW9LVHRjYmlBZ0lDQjBhR2x6TG1aeVpXVkNkV1ptWlhKeklEMGdibVYzSUUxaGNDZ3BPMXh1SUNBZ0lIUm9hWE11Wm5KbFpWVnVhV1p2Y20xQ2RXWm1aWEp6SUQwZ2JtVjNJRTFoY0NncE8xeHVJQ0FnSUhSb2FYTXVZMkZ3ZEhWeVpXUlFaVzVrYVc1blFuVm1abVZ5Y3lBOUlHNWxkeUJOWVhBb0tUdGNiaUFnZlZ4dVhHNGdJRzl1VW1Wc1pXRnpaVk5sYzNOcGIyNG9jMlZ6YzJsdmJrbGtPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQXZMeUJ5Wld4bFlYTmxJSFJvWlNCallYQjBkWEpsWkNCd1pXNWthVzVuSUdKMVptWmxjbk11WEc0Z0lDQWdZMjl1YzNRZ2NHVnVaR2x1WjBKMVptWmxjbk1nUFNCMGFHbHpMbU5oY0hSMWNtVmtVR1Z1WkdsdVowSjFabVpsY25NdVoyVjBLSE5sYzNOcGIyNUpaQ2s3WEc0Z0lDQWdhV1lnS0hCbGJtUnBibWRDZFdabVpYSnpLU0I3WEc0Z0lDQWdJQ0J3Wlc1a2FXNW5RblZtWm1WeWN5NW1iM0pGWVdOb0tHSjFabVpsY2lBOVBpQjdYRzRnSUNBZ0lDQWdJR0oxWm1abGNpNWtaWE4wY205NUtDazdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJSFJvYVhNdVkyRndkSFZ5WldSUVpXNWthVzVuUW5WbVptVnljeTVrWld4bGRHVW9jMlZ6YzJsdmJrbGtLVHRjYmlBZ0lDQjlYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR052Ym5OMElHTnlaV0YwWlVkd2RVUmhkR0ZOWVc1aFoyVnlJRDBnS0M0dUxtRnlaM002SUVOdmJuTjBjblZqZEc5eVVHRnlZVzFsZEdWeWN6eDBlWEJsYjJZZ1IzQjFSR0YwWVUxaGJtRm5aWEpKYlhCc1BpazZJRWR3ZFVSaGRHRk5ZVzVoWjJWeUlEMCtYRzRnSUNBZ2JtVjNJRWR3ZFVSaGRHRk5ZVzVoWjJWeVNXMXdiQ2d1TGk1aGNtZHpLVHRjYmlJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVZMnhoYzNNZ1FYUjBjbWxpZFhSbFYybDBhRU5oWTJobFMyVjVTVzF3YkNCN1hHNGdJR052Ym5OMGNuVmpkRzl5S0dGMGRISnBZblYwWlRvZ1VtVmpiM0prUEhOMGNtbHVaeXdnZFc1cmJtOTNiajRwSUh0Y2JpQWdJQ0JQWW1wbFkzUXVZWE56YVdkdUtIUm9hWE1zSUdGMGRISnBZblYwWlNrN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElHdGxlVG9nYzNSeWFXNW5PMXh1SUNCd2RXSnNhV01nWjJWMElHTmhZMmhsUzJWNUtDazZJSE4wY21sdVp5QjdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtdGxlU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXJaWGtnUFZ4dUlDQWdJQ0FnSUNBZ0lFOWlhbVZqZEM1blpYUlBkMjVRY205d1pYSjBlVTVoYldWektIUm9hWE1wTG5OdmNuUW9LUzV0WVhBb2JtRnRaU0E5UGlCZ0pIc29kR2hwY3lCaGN5QlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGlsYmJtRnRaVjE5WUNrdWFtOXBiaWduT3ljcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1clpYazdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrZ2UxeHVJQ0J5WldGa2IyNXNlU0JqWVdOb1pVdGxlVG9nYzNSeWFXNW5PMXh1ZlZ4dVhHNHZLaXBjYmlBcUlHTnlaV0YwWlNCaElHNWxkeUJ2WW1wbFkzUWdabkp2YlNCMGFHVWdaMmwyWlc0Z1lYUjBjbWxpZFhSbExDQmhibVFnWVdSa0lHRWdZMkZqYUdWTFpYa2djSEp2Y0dWeWRIa2dkRzhnYVhSY2JpQXFMMXh1Wlhod2IzSjBJR052Ym5OMElHTnlaV0YwWlVGMGRISnBZblYwWlZkcGRHaERZV05vWlV0bGVTQTlJRHhVSUdWNGRHVnVaSE1nVW1WamIzSmtQSE4wY21sdVp5d2dkVzVyYm05M2JqNCtLR0YwZEhKcFluVjBaVG9nVkNrNklGUW1RWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1SUQwK1hHNGdJQ0FnYm1WM0lFRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlVWx0Y0d3b1lYUjBjbWxpZFhSbEtTQmhjeUIxYm10dWIzZHVJR0Z6SUZRZ0ppQkJkSFJ5YVdKMWRHVlhhWFJvUTJGamFHVkxaWGs3WEc0aUxDQWlMeThnUTI5d2VYSnBaMmgwSUNoaktTQk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNHZMeUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnVFVsVUlFeHBZMlZ1YzJVdVhHNWNiaThxSUdWemJHbHVkQzFrYVhOaFlteGxJRzV2TFhCaGNtRnRMWEpsWVhOemFXZHVJQ292WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJOWVhSTmRXeFZkR2xzSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRU5oYkdOMWJHRjBaU0IwYUdVZ1pYaHdaV04wWldRZ2MyaGhjR1VnZDJobGJpQnRZWFJ5YVhnZ2JYVnNkR2x3YkdsallYUnBiMjVjYmlBZ0lDb2dRSEJoY21GdElHRWdWR2hsSUhOb1lYQmxJRzltSUhSbGJuTnZjaUJCTGlCVGFHOTFiR1FnWW1VZ1lTQjBkWEJzWlNCdlppQXlJSEJ2YzJsMGFYWmxJR2x1ZEdWblpYSnpYRzRnSUNBcUlFQndZWEpoYlNCaUlGUm9aU0J6YUdGd1pTQnZaaUIwWlc1emIzSWdRaTRnVTJodmRXeGtJR0psSUdFZ2RIVndiR1VnYjJZZ01pQndiM05wZEdsMlpTQnBiblJsWjJWeWMxeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCVWFHVWdaWGh3WldOMFpXUWdjMmhoY0dVZ2IyWWdkR2hsSUhKbGMzVnNkQ3dnYjNJZ2RXNWtaV1pwYm1Wa0lHbG1JRTR2UVZ4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdOaGJHTk5ZWFJOZFd4VGFHRndaU2hoT2lCYmJuVnRZbVZ5TENCdWRXMWlaWEpkTENCaU9pQmJiblZ0WW1WeUxDQnVkVzFpWlhKZEtUb2dXMjUxYldKbGNpd2diblZ0WW1WeVhYeDFibVJsWm1sdVpXUWdlMXh1SUNBZ0lISmxkSFZ5YmlBb1lWc3hYU0FoUFQwZ1lsc3dYU2tnUHlCMWJtUmxabWx1WldRZ09pQmJZVnN3WFN3Z1lsc3hYVjA3WEc0Z0lIMWNibjFjYmx4dVhHNWxlSEJ2Y25RZ1kyeGhjM01nUW5KdllXUmpZWE4wVlhScGJDQjdYRzRnSUM4cUtseHVJQ0FnS2lCRFlXeGpkV3hoZEdVZ2RHaGxJR1Y0Y0dWamRHVmtJSE5vWVhCbElIZG9aVzRnWW5KdllXUmpZWE4wYVc1bklESWdkR1Z1YzI5eWMxeHVJQ0FnS2lCQWNHRnlZVzBnWVNCVWFHVWdjMmhoY0dVZ2IyWWdkR1Z1YzI5eUlFRXVJRk5vYjNWc1pDQmlaU0JoYmlCaGNuSmhlU0J2WmlCd2IzTnBkR2wyWlNCcGJuUmxaMlZ5YzF4dUlDQWdLaUJBY0dGeVlXMGdZaUJVYUdVZ2MyaGhjR1VnYjJZZ2RHVnVjMjl5SUVJdUlGTm9iM1ZzWkNCaVpTQmhiaUJoY25KaGVTQnZaaUJ3YjNOcGRHbDJaU0JwYm5SbFoyVnljMXh1SUNBZ0tpQkFjR0Z5WVcwZ2FYTk5ZWFJOZFd3Z1YyaGxkR2hsY2lCMGFHVWdiM0JsY21GMGFXOXVJR2x6SUUxaGRFMTFiRnh1SUNBZ0tpQkFjbVYwZFhKdWN5QlVhR1VnWlhod1pXTjBaV1FnYzJoaGNHVWdiMllnZEdobElISmxjM1ZzZEN3Z2IzSWdkVzVrWldacGJtVmtJR2xtSUU0dlFWeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHTmhiR05UYUdGd1pTaGhaR2x0Y3pvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwc0lHSmthVzF6T2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z2FYTk5ZWFJOZFd3Z1BTQm1ZV3h6WlNrNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZGZIVnVaR1ZtYVc1bFpDQjdYRzRnSUNBZ1kyOXVjM1FnWVhKaGJtc2dQU0JoWkdsdGN5NXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdZbkpoYm1zZ1BTQmlaR2x0Y3k1c1pXNW5kR2c3WEc0Z0lDQWdhV1lnS0dGeVlXNXJJRDA5UFNBd0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1ltUnBiWE03WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2hpY21GdWF5QTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdGa2FXMXpPMXh1SUNBZ0lIMWNiaUFnSUNCamIyNXpkQ0JqY21GdWF5QTlJRTFoZEdndWJXRjRLR0ZrYVcxekxteGxibWQwYUN3Z1ltUnBiWE11YkdWdVozUm9LVHRjYmlBZ0lDQmpiMjV6ZENCalpHbHRjeUE5SUc1bGR5QkJjbkpoZVR4dWRXMWlaWEkrS0dOeVlXNXJLVHRjYmx4dUlDQWdJQzh2SUdOaGJHTjFiR0YwWlNCMGFHVWdiR0Z6ZENBeUlHUnBiV1Z1YzJsdmJpQnBaaUJwZENCcGN5Qk5ZWFJOZFd4Y2JpQWdJQ0JwWmlBb2FYTk5ZWFJOZFd3cElIdGNiaUFnSUNBZ0lHbG1JQ2hoY21GdWF5QThJRElnZkh3Z1luSmhibXNnUENBeUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiMjV6ZENCalUyaGhjR1ZOWVhSTmRXd2dQVnh1SUNBZ0lDQWdJQ0FnSUUxaGRFMTFiRlYwYVd3dVkyRnNZMDFoZEUxMWJGTm9ZWEJsS0Z0aFpHbHRjMXRoY21GdWF5QXRJREpkTENCaFpHbHRjMXRoY21GdWF5QXRJREZkWFN3Z1cySmthVzF6VzJKeVlXNXJJQzBnTWwwc0lHSmthVzF6VzJKeVlXNXJJQzBnTVYxZEtUdGNiaUFnSUNBZ0lHbG1JQ2hqVTJoaGNHVk5ZWFJOZFd3Z1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnVzJOa2FXMXpXMk55WVc1cklDMGdNbDBzSUdOa2FXMXpXMk55WVc1cklDMGdNVjFkSUQwZ1kxTm9ZWEJsVFdGMFRYVnNPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0JwYzAxaGRFMTFiQ0EvSURNZ09pQXhPeUJwSUR3OUlHTnlZVzVyT3lCcEt5c3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHRk1aVzRnUFNCaGNtRnVheUF0SUdrZ1BDQXdJRDhnTVNBNklHRmthVzF6VzJGeVlXNXJJQzBnYVYwN1hHNGdJQ0FnSUNCamIyNXpkQ0JpVEdWdUlEMGdZbkpoYm1zZ0xTQnBJRHdnTUNBL0lERWdPaUJpWkdsdGMxdGljbUZ1YXlBdElHbGRPMXh1WEc0Z0lDQWdJQ0JwWmlBb1lVeGxiaUFoUFQwZ1lreGxiaUFtSmlCaFRHVnVJRDRnTVNBbUppQmlUR1Z1SUQ0Z01Ta2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdZMjl1YzNRZ2JXRjRJRDBnVFdGMGFDNXRZWGdvWVV4bGJpd2dZa3hsYmlrN1hHNGdJQ0FnSUNCcFppQW9ZVXhsYmlBbUppQmlUR1Z1S1NCN1hHNGdJQ0FnSUNBZ0lHTmthVzF6VzJOeVlXNXJJQzBnYVYwZ1BTQk5ZWFJvTG0xaGVDaGhUR1Z1TENCaVRHVnVLVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQzh2SUhkb1pXNGdaV2wwYUdWeUlHRk1aVzRnYjNJZ1lreGxiaUJwY3lBd0xDQjBhR1VnYjNSb1pYSWdjMmh2ZFd4a0lHSmxJR1ZwZEdobGNpQXdJRzl5SURFc0lHOTBhR1Z5ZDJselpTQnBkQ0JwY3lCdWIzUWdZbkp2WVdSallYTjBZV0pzWlM1Y2JpQWdJQ0FnSUNBZ2FXWWdLRzFoZUNBK0lERXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTmthVzF6VzJOeVlXNXJJQzBnYVYwZ1BTQXdPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCalpHbHRjenRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCRVpYUmxjbTFwYm1VZ2FXWWdZU0J6YUdGd1pTQnBjeUIxYm1sa2FYSmxZM1JwYjI1aGJDQmljbTloWkdOaGMzUmhZbXhsSUhSdklHRnViM1JvWlhJZ2MyaGhjR1ZjYmlBZ0lDb2dRSEJoY21GdElITm9ZWEJsSUZSb1pTQnBibkIxZENCemFHRndaVnh1SUNBZ0tpQkFjR0Z5WVcwZ1ptbHVZV3hUYUdGd1pTQlVhR1VnWkdWemFYSmxaQ0J6YUdGd1pTQmhablJsY2lCaWNtOWhaR05oYzNScGJtZGNiaUFnSUNvdlhHNGdJSE4wWVhScFl5QnBjMVpoYkdsa1FuSnZZV1JqWVhOMEtITm9ZWEJsT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z1ptbHVZV3hUYUdGd1pUb2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJpYjI5c1pXRnVJSHRjYmlBZ0lDQXZMeUJoYkdsbmJpQnphR0Z3WlNCMGJ5QjBhR1VnY21sbmFIUmNiaUFnSUNCamIyNXpkQ0JwYm5CMWRGSmhibXNnUFNCemFHRndaUzVzWlc1bmRHZzdYRzRnSUNBZ1kyOXVjM1FnWm1sdVlXeFNZVzVySUQwZ1ptbHVZV3hUYUdGd1pTNXNaVzVuZEdnN1hHNGdJQ0FnYVdZZ0tHbHVjSFYwVW1GdWF5QStJR1pwYm1Gc1VtRnVheWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUgxY2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Uc2dhU0E4UFNCcGJuQjFkRkpoYm1zN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYVdZZ0tITm9ZWEJsVzJsdWNIVjBVbUZ1YXlBdElHbGRJQ0U5UFNBeElDWW1JSE5vWVhCbFcybHVjSFYwVW1GdWF5QXRJR2xkSUNFOVBTQm1hVzVoYkZOb1lYQmxXMlpwYm1Gc1VtRnVheUF0SUdsZEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUnlkV1U3WEc0Z0lIMWNibjFjYmx4dVhHNWxlSEJ2Y25RZ1kyeGhjM01nVTJoaGNHVlZkR2xzSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJR05oYkdOMWJHRjBaU0IwYUdVZ2MybDZaU0FvYm5WdFltVnlJRzltSUdWc1pXMWxiblJ6S1Z4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUhOcGVtVW9aR2x0Y3pvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwcE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUJUYUdGd1pWVjBhV3d1WjJWMFUybDZaVVp5YjIxRWFXMWxibk5wYjI1U1lXNW5aU2hrYVcxekxDQXdMQ0JrYVcxekxteGxibWQwYUNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dZMjl1ZG1WeWRDQmthVzF6SUdOdmNuSmxjM0J2Ym1ScGJtY2dkRzhnZEhsd1pTQmphR0Z1WjJVZ2RHOGdjR0ZqYXk0Z1pYZ3VJSFZwYm5RNElHUmhkR0VnZEc4Z2RXbHVkRE15WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWTI5dWRtVnlkRk5vWVhCbEtHUnBiWE02SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkTENCemFYcGxJRDBnTkNrNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZElIdGNiaUFnSUNCamIyNXpkQ0J5WVc1cklEMGdaR2x0Y3k1c1pXNW5kR2c3WEc0Z0lDQWdhV1lnS0hKaGJtc2dQVDA5SURBcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCYlhUdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdibVYzUkdsdGN5QTlJRzVsZHlCQmNuSmhlU2h5WVc1cktUdGNiaUFnSUNCc1pYUWdhU0E5SUhKaGJtc2dMU0F4TzF4dUlDQWdJSGRvYVd4bElDaHBJRDQ5SURBcElIdGNiaUFnSUNBZ0lHbG1JQ2hrYVcxelcybGRJQ1VnYzJsNlpTQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQnVaWGRFYVcxelcybGRJRDBnWkdsdGMxdHBYU0F2SUhOcGVtVTdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSE5wZW1VZ0pTQmthVzF6VzJsZElDRTlQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblkyRnVibTkwSUdOdmJuWmxjblFnYzJoaGNHVW5LVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJRzVsZDBScGJYTmJhVjBnUFNBeE8xeHVJQ0FnSUNBZ2MybDZaU0F2UFNCa2FXMXpXMmxkTzF4dUlDQWdJQ0FnYVMwdE8xeHVJQ0FnSUgxY2JpQWdJQ0JtYjNJZ0tHa3RMVHNnYVNBK1BTQXdPeUJwTFMwcElIdGNiaUFnSUNBZ0lHNWxkMFJwYlhOYmFWMGdQU0JrYVcxelcybGRPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYm1WM1JHbHRjenRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCallXeGpkV3hoZEdVZ2RHaGxJSE5wZW1VZ0tHNTFiV0psY2lCdlppQmxiR1Z0Wlc1MGN5a2dabkp2YlNCMGFHVWdaMmwyWlc0Z1lYaHBjeUFvYVc1amJIVnphWFpsS1Z4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUhOcGVtVkdjbTl0UkdsdFpXNXphVzl1S0dScGJYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0JoZUdsek9pQnVkVzFpWlhJcE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUdsbUlDaGhlR2x6SUR3Z01DQjhmQ0JoZUdseklENGdaR2x0Y3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnYVc1MllXeHBaQ0JrYVcxbGJuTnBiMjRnYjJZZ0pIdGhlR2x6ZlNCbWIzSWdjMmw2WlVaeWIyMUVhVzFsYm5OcGIyNGdZWE1nVkdWdWMyOXlJR2hoY3lBa2UyUnBiWE11YkdWdVozUm9mU0JrYVcxbGJuTnBiMjV6TG1BcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdVMmhoY0dWVmRHbHNMbWRsZEZOcGVtVkdjbTl0UkdsdFpXNXphVzl1VW1GdVoyVW9aR2x0Y3l3Z1lYaHBjeXdnWkdsdGN5NXNaVzVuZEdncE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJR05oYkdOMWJHRjBaU0IwYUdVZ2MybDZaU0FvYm5WdFltVnlJRzltSUdWc1pXMWxiblJ6S1NCMGJ5QjBhR1VnWjJsMlpXNGdZWGhwY3lBb1pYaGpiSFZ6YVhabEtWeHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklITnBlbVZVYjBScGJXVnVjMmx2Ymloa2FXMXpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnWVhocGN6b2diblZ0WW1WeUtUb2diblZ0WW1WeUlIdGNiaUFnSUNCcFppQW9ZWGhwY3lBOElEQWdmSHdnWVhocGN5QStJR1JwYlhNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUdsdWRtRnNhV1FnWkdsdFpXNXphVzl1SUc5bUlDUjdZWGhwYzMwZ1ptOXlJSE5wZW1WVWIwUnBiV1Z1YzJsdmJpQmhjeUJVWlc1emIzSWdhR0Z6SUNSN1pHbHRjeTVzWlc1bmRHaDlJR1JwYldWdWMybHZibk11WUNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQlRhR0Z3WlZWMGFXd3VaMlYwVTJsNlpVWnliMjFFYVcxbGJuTnBiMjVTWVc1blpTaGthVzF6TENBd0xDQmhlR2x6S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQmpZV3hqZFd4aGRHVWdkR2hsSUhOcGVtVWdLRzUxYldKbGNpQnZaaUJsYkdWdFpXNTBjeWtnWm5KdmJTQmhibVFnZEc4Z2RHaGxJR2RwZG1WdUlHRjRhWE1nVzNOMFlYSjBMQ0JsYm1RcFhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ1oyVjBVMmw2WlVaeWIyMUVhVzFsYm5OcGIyNVNZVzVuWlNoa2FXMXpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnYzNSaGNuUTZJRzUxYldKbGNpd2daVzVrT2lCdWRXMWlaWElwT2lCdWRXMWlaWElnZTF4dUlDQWdJR3hsZENCemFYcGxJRDBnTVR0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ2MzUmhjblE3SUdrZ1BDQmxibVE3SUdrckt5a2dlMXh1SUNBZ0lDQWdMeThnYzJGbVpYUjVJR05vWldOcklHRnpJSFJvYVhNZ2JXVjBhRzlrSUdseklHTmhiR3hsWkNCaWVTQnRkV3gwYVhCc1pTQnZkR2hsY2lCdFpYUm9iMlJ6SUhKbGNYVnBjbWx1WnlCemFYcGxMbHh1SUNBZ0lDQWdMeThnYzJsNlpTQmpZVzV1YjNRZ1ltVWdibVZuWVhScGRtVXVYRzRnSUNBZ0lDQnBaaUFvWkdsdGMxdHBYU0E4SURBcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUcxaGVDMXNaVzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDZGpZVzV1YjNRZ1oyVjBJSFpoYkdsa0lITnBlbVVnWm5KdmJTQnpjR1ZqYVdacFpXUWdaR2x0Wlc1emFXOXVJSEpoYm1kbExpQk5iM04wSUd4cGEyVnNlU0IwYUdVZ2NtRnVaMlVnWTI5dWRHRnBibk1nYm1WbllYUnBkbVVnZG1Gc2RXVnpJR2x1SUhSb1pXMHVKeWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J6YVhwbElDbzlJR1JwYlhOYmFWMDdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ6YVhwbE8xeHVJQ0I5WEc1Y2JpQWdjM1JoZEdsaklHTnZiWEIxZEdWVGRISnBaR1Z6S0dScGJYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRLVG9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBnZTF4dUlDQWdJR052Ym5OMElISmhibXNnUFNCa2FXMXpMbXhsYm1kMGFEdGNiaUFnSUNCcFppQW9jbUZ1YXlBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRnRkTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvY21GdWF5QTlQVDBnTVNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUZzeFhUdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdjM1J5YVdSbGN5QTlJRzVsZHlCQmNuSmhlU2h5WVc1cktUdGNiaUFnSUNCemRISnBaR1Z6VzNKaGJtc2dMU0F4WFNBOUlERTdYRzRnSUNBZ2MzUnlhV1JsYzF0eVlXNXJJQzBnTWwwZ1BTQmthVzF6VzNKaGJtc2dMU0F4WFR0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ2NtRnVheUF0SURNN0lHa2dQajBnTURzZ0xTMXBLU0I3WEc0Z0lDQWdJQ0J6ZEhKcFpHVnpXMmxkSUQwZ2MzUnlhV1JsYzF0cElDc2dNVjBnS2lCa2FXMXpXMmtnS3lBeFhUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSE4wY21sa1pYTTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nYm05eWJXRnBiSHBsSUdGNGFYTWdiMllnY21GdVoyVWdXeTF5TENCeUtTQnBiblJ2SUZzd0xDQnlLUzVjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJ1YjNKdFlXeHBlbVZCZUdsektHRjRhWE02SUc1MWJXSmxjaXdnZEdWdWMyOXlVbUZ1YXpvZ2JuVnRZbVZ5S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0JwWmlBb1lYaHBjeUE4SUMxMFpXNXpiM0pTWVc1cklDWW1JR0Y0YVhNZ1BqMGdkR1Z1YzI5eVVtRnVheWtnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2QxYm5OMWNIQnZjblJsWkNCaGVHbHpJR1p2Y2lCMGFHbHpJRzl3WlhKaGRHbHZiaTRuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHRjRhWE1nUENBd0lEOGdZWGhwY3lBcklIUmxibk52Y2xKaGJtc2dPaUJoZUdsek8xeHVJQ0I5WEc1Y2JpQWdjM1JoZEdsaklHNXZjbTFoYkdsNlpVRjRaWE1vWVhobGN6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHNJSFJsYm5OdmNsSmhibXMvT2lCdWRXMWlaWElwT2lCdWRXMWlaWEpiWFNCN1hHNGdJQ0FnY21WMGRYSnVJR0Y0WlhNdWJXRndLSGdnUFQ0Z2RHaHBjeTV1YjNKdFlXeHBlbVZCZUdsektIZ3NJSFJsYm5OdmNsSmhibXNnUHo4Z1lYaGxjeTVzWlc1bmRHZ3BLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCVGIzSjBjeUJoSUdkcGRtVnVJR0Z5Y21GNUlHSmhjMlZrSUc5dUlIUm9aU0JwYm1ScFkyVnpJR2x1SUhSb1pTQlFaWEp0SUdGeWNtRjVYRzRnSUNBcUlGVnpaV1FnYVc0Z1ZISmhibk53YjNObFhHNGdJQ0FxSUVCd1lYSmhiU0JoSUVGeWNtRjVJSFJ2SUdKbElITnZjblJsWkNCemRXTm9JR0Z6SUdScGJYTWdiM0lnYzNSeWFXUmxjMXh1SUNBZ0tpQkFjR0Z5WVcwZ2NHVnliU0JRWlhKdElHZHBkbVZ1T3lCcFppQnVkV3hzSUdFZ2QybHNiQ0JpWlNCeVpYWmxjbk5sWkZ4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUhOdmNuUkNZWE5sWkU5dVVHVnliU2hoT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z2NHVnliVDg2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkS1RvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwZ2UxeHVJQ0FnSUdsbUlDaHdaWEp0S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnY0dWeWJTNXRZWEFvS0hZcElEMCtJR0ZiZGwwcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZUzV6YkdsalpTZ3BMbkpsZG1WeWMyVW9LVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVUdGa2N5QmhJR2RwZG1WdUlITm9ZWEJsSUdGalkyOXlaR2x1WnlCMGJ5QjBhR1VnY0dGa1pHbHVaeUIyWVd4MVpYTmNiaUFnSUNvZ1FIQmhjbUZ0SUdScGJYTWdjMmhoY0dVZ2IyWWdkR2hsSUZSbGJuTnZjaUIwYnlCaVpTQndZV1JrWldSY2JpQWdJQ29nUUhCaGNtRnRJSEJoWkNCd1lXUWdkbUZzZFdWelhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ2NHRmtVMmhoY0dVb1pHbHRjem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBzSUhCaFpEb2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU0I3WEc0Z0lDQWdZMjl1YzNRZ2NtRnVheUE5SUdScGJYTXViR1Z1WjNSb08xeHVJQ0FnSUhKbGRIVnliaUJrYVcxekxtMWhjQ2dvZGl3Z2FTa2dQVDRnZGlBcklIQmhaRnRwWFNBcklIQmhaRnRwSUNzZ2NtRnVhMTBwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFUmxkR1Z5YldsdVpYTWdhV1lnZEdobElIUjNieUJ6YUdGd1pYTWdZWEpsSUdsa1pXNTBhV05oYkZ4dUlDQWdLaUJBY0dGeVlXMGdjMmhoY0dVeFhHNGdJQ0FxSUVCd1lYSmhiU0J6YUdGd1pUSmNiaUFnSUNvdlhHNGdJSE4wWVhScFl5QmhjbVZGY1hWaGJDaHphR0Z3WlRFNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZExDQnphR0Z3WlRJNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZEtUb2dZbTl2YkdWaGJpQjdYRzRnSUNBZ2FXWWdLSE5vWVhCbE1TNXNaVzVuZEdnZ0lUMDlJSE5vWVhCbE1pNXNaVzVuZEdncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhOb1lYQmxNUzVsZG1WeWVTZ29kaXdnYVNrZ1BUNGdkaUE5UFQwZ2MyaGhjR1V5VzJsZEtUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1VHOXZiRU52Ym5aVmRHbHNJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFRmthblZ6ZENCMGFHVWdhMlZ5Ym1Wc0xDQnpkSEpwWkdWekxDQndZV1J6SUhSdklHTnZjbkpsWTNRZ2NtRnVheTRnVTJWMElIUnZJR1JsWm1GMWJIUWdkbUZzZFdVZ2FXWWdibTkwSUhCeVpYTmxiblJjYmlBZ0lDb2dRSEJoY21GdElHbHpSMnh2WW1Gc1QzQmxjbUYwYjNJZ1NXWWdkSEoxWlN3Z2NHVnlabTl5YlNCbmJHOWlZV3dnY0c5dmJHbHVaeTVjYmlBZ0lDb2dRSEJoY21GdElHbHVjSFYwUkdsdGN5QlVhR1VnYVc1d2RYUWdkR1Z1YzI5eUlHUnBiV1Z1YzJsdmJpNWNiaUFnSUNvZ1FIQmhjbUZ0SUd0bGNtNWxiRk5vWVhCbElGUm9aU0J6YVhwbElHOW1JSFJvWlNCclpYSnVaV3dnWVd4dmJtY2daV0ZqYUNCaGVHbHpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2MzUnlhV1JsY3lCVGRISnBaR1VnWVd4dmJtY2daV0ZqYUNCaGVHbHpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ1pHbHNZWFJwYjI1eklFUnBiR0YwYVc5dUlHRnNiMjVuSUdWaFkyZ2dZWGhwY3k1Y2JpQWdJQ29nUUhCaGNtRnRJSEJoWkhNZ1VHRmtaR2x1WnlCbWIzSWdkR2hsSUdKbFoybHVibWx1WnlCaGJtUWdaVzVrYVc1bklHRnNiMjVuSUdWaFkyZ2dZWGhwY3k1Y2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCaFpHcDFjM1JRYjI5c1FYUjBjbWxpZFhSbGN5aGNiaUFnSUNBZ0lHbHpSMnh2WW1Gc1QzQmxjbUYwYjNJNklHSnZiMnhsWVc0c0lHbHVjSFYwUkdsdGN6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHNJR3RsY201bGJGTm9ZWEJsT2lCdWRXMWlaWEpiWFN3Z2MzUnlhV1JsY3pvZ2JuVnRZbVZ5VzEwc1hHNGdJQ0FnSUNCa2FXeGhkR2x2Ym5NNklHNTFiV0psY2x0ZExDQndZV1J6T2lCdWRXMWlaWEpiWFNrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNnaGFYTkhiRzlpWVd4UGNHVnlZWFJ2Y2lBbUppQnJaWEp1Wld4VGFHRndaUzVzWlc1bmRHZ2dJVDA5SUdsdWNIVjBSR2x0Y3k1c1pXNW5kR2dnTFNBeUtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oyeGxibWQwYUNCdlppQnpjR1ZqYVdacFpXUWdhMlZ5Ym1Wc0lITm9ZWEJsY3lCemFHOTFiR1FnWW1VZ01pQnNaWE56SUhSb1lXNGdiR1Z1WjNSb0lHOW1JR2x1Y0hWMElHUnBiV1Z1YzJsdmJuTW5LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYVhOSGJHOWlZV3hQY0dWeVlYUnZjaWtnZTF4dUlDQWdJQ0FnTHk4Z1lXUnFkWE4wSUd0bGNtNWxiQ0J6YUdGd1pTQjBieUJqYjNabGNpQjBhR1VnYVc1d2RYUWdaR2x0YzF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnWkdsdElEMGdNRHNnWkdsdElEd2dhVzV3ZFhSRWFXMXpMbXhsYm1kMGFDQXRJREk3SUdScGJTc3JLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaGthVzBnUGowZ2EyVnlibVZzVTJoaGNHVXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnYTJWeWJtVnNVMmhoY0dVdWNIVnphQ2hwYm5CMWRFUnBiWE5iWkdsdElDc2dNbDBwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lHdGxjbTVsYkZOb1lYQmxXMlJwYlYwZ1BTQnBibkIxZEVScGJYTmJaR2x0SUNzZ01sMDdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJoWkdwMWMzUWdjM1J5YVdSbGN5QnNaVzVuZEdnZ2RHOGdiV0YwWTJnZ2EyVnlibVZzSUhOb1lYQmxJR3hsYm1kMGFGeHVJQ0FnSUdadmNpQW9iR1YwSUdScGJTQTlJREE3SUdScGJTQThJR3RsY201bGJGTm9ZWEJsTG14bGJtZDBhRHNnWkdsdEt5c3BJSHRjYmlBZ0lDQWdJR2xtSUNoa2FXMGdQQ0J6ZEhKcFpHVnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2MzUnlhV1JsYzF0a2FXMWRJRHdnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25jM1J5YVdSbGN5QnphRzkxYkdRZ1ltVWdaM0psWVhSbGNpQjBhR0Z1SUc5eUlHVnhkV0ZzSUhSdklERW5LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYzNSeWFXUmxjeTV3ZFhOb0tERXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJR0ZrYW5WemRDQmthV3hoZEdsdmJpQjJZV3gxWlZ4dUlDQWdJR1p2Y2lBb2JHVjBJR1JwYlNBOUlEQTdJR1JwYlNBOElHdGxjbTVsYkZOb1lYQmxMbXhsYm1kMGFEc2daR2x0S3lzcElIdGNiaUFnSUNBZ0lHbG1JQ2hrYVcwZ1BDQmthV3hoZEdsdmJuTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoa2FXeGhkR2x2Ym5OYlpHbHRYU0E4SURBcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMlJwYkdGMGFXOXVjeUJ6YUc5MWJHUWdZbVVnWjNKbFlYUmxjaUIwYUdGdUlHOXlJR1Z4ZFdGc0lIUnZJREVuS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1pHbHNZWFJwYjI1ekxuQjFjMmdvTVNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1lXUnFkWE4wSUhCaFpITWdiR1Z1WjNSb0lIUnZJRzFoZEdOb0lESWdLaUJyWlhKdVpXd2djMmhoY0dVZ2JHVnVaM1JvWEc0Z0lDQWdabTl5SUNoc1pYUWdaR2x0SUQwZ01Ec2daR2x0SUR3Z2EyVnlibVZzVTJoaGNHVXViR1Z1WjNSb0lDb2dNanNnWkdsdEt5c3BJSHRjYmlBZ0lDQWdJR2xtSUNoa2FXMGdQQ0J3WVdSekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvY0dGa2MxdGthVzFkSUR3Z01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduY0dGa0lITm9iM1ZzWkNCaVpTQm5jbVZoZEdWeUlIUm9ZVzRnYjNJZ1pYRjFZV3dnZEc4Z01TY3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0J3WVdSekxuQjFjMmdvTUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z2MyRnVhWFI1SUdOb1pXTnJjeUJtYjNJZ2RtRnNkV1Z6SUdsdUlHdGxjbTVsYkNCemFHRndaWE1nWVc1a0lIQmhaSE5jYmlBZ0lDQm1iM0lnS0d4bGRDQmthVzBnUFNBd095QmthVzBnUENCclpYSnVaV3hUYUdGd1pTNXNaVzVuZEdnN0lHUnBiU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9hMlZ5Ym1Wc1UyaGhjR1ZiWkdsdFhTQThQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmEyVnlibVZzSUhOb1lYQmxjeUJ1WldWa0lIUnZJR0psSUdkeVpXRjBaWElnZEdoaGJpQXdKeWs3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdsbUlDaHdZV1J6VzJScGJWMGdQajBnYTJWeWJtVnNVMmhoY0dWYlpHbHRYU0I4ZkNCd1lXUnpXMlJwYlNBcklHdGxjbTVsYkZOb1lYQmxMbXhsYm1kMGFGMGdQajBnYTJWeWJtVnNVMmhoY0dWYlpHbHRYU2tnZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjNCaFpITWdjMmh2ZFd4a0lHSmxJSE50WVd4c1pYSWdkR2hoYmlCclpYSnVaV3duS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdkx5QmhaR3AxYzNRZ2NHRmtJSFpoYkhWbGN5QmlZWE5sWkNCdmJpQW5ZWFYwYjFCaFpDY2dZWFIwY21saWRYUmxYRzRnSUhOMFlYUnBZeUJoWkdwMWMzUlFZV1J6UW1GelpXUlBia0YxZEc5UVlXUW9YRzRnSUNBZ0lDQnBibkIxZEVScGJYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0J6ZEhKcFpHVnpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnWkdsc1lYUnBiMjV6T2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN4Y2JpQWdJQ0FnSUd0bGNtNWxiRk5vWVhCbE9pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhTd2djR0ZrY3pvZ2JuVnRZbVZ5VzEwc0lHbHpRMmhoYm01bGJFeGhjM1E2SUdKdmIyeGxZVzRzSUdGMWRHOVFZV1EvT2lCemRISnBibWNwT2lCMmIybGtJSHRjYmlBZ0lDQnBaaUFvSVdGMWRHOVFZV1FwSUh0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvY0dGa2N5NXNaVzVuZEdnZ0lUMDlJRElnS2lBb2FXNXdkWFJFYVcxekxteGxibWQwYUNBdElESXBLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMnhsYm1kMGFDQnZaaUJ3WVdSeklITm9iM1ZzWkNCaVpTQjBkMmxqWlNCMGFHVWdiR1Z1WjNSb0lHOW1JR1JoZEdFZ1pHbHRaVzV6YVc5dWN5Y3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h6ZEhKcFpHVnpMbXhsYm1kMGFDQWhQVDBnS0dsdWNIVjBSR2x0Y3k1c1pXNW5kR2dnTFNBeUtTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHNaVzVuZEdnZ2IyWWdjM1J5YVdSbGN5QnphRzkxYkdRZ1ltVWdkR2hsSUd4bGJtZDBhQ0J2WmlCa1lYUmhJR1JwYldWdWMybHZibk1uS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2EyVnlibVZzVTJoaGNHVXViR1Z1WjNSb0lDRTlQU0FvYVc1d2RYUkVhVzF6TG14bGJtZDBhQ0F0SURJcEtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oyeGxibWQwYUNCdlppQnJaWEp1Wld3Z2MyaGhjR1Z6SUhOb2IzVnNaQ0JpWlNCMGFHVWdiR1Z1WjNSb0lHOW1JR1JoZEdFZ1pHbHRaVzV6YVc5dWN5Y3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHWnZjaUFvYkdWMElHUnBiU0E5SURBN0lHUnBiU0E4SUdsdWNIVjBSR2x0Y3k1c1pXNW5kR2dnTFNBeU95QmthVzByS3lrZ2UxeHVJQ0FnSUNBZ1VHOXZiRU52Ym5aVmRHbHNMbUZrYW5WemRGQmhaRUZ1WkZKbGRIVnlibE5vWVhCbEtGeHVJQ0FnSUNBZ0lDQWdJR2x1Y0hWMFJHbHRjMXRrYVcwZ0t5QW9hWE5EYUdGdWJtVnNUR0Z6ZENBL0lERWdPaUF5S1Ywc0lITjBjbWxrWlhOYlpHbHRYU3dnWkdsc1lYUnBiMjV6VzJScGJWMHNJR3RsY201bGJGTm9ZWEJsVzJScGJWMHNJSEJoWkhNc0lHUnBiU3hjYmlBZ0lDQWdJQ0FnSUNCa2FXMGdLeUJwYm5CMWRFUnBiWE11YkdWdVozUm9JQzBnTWl3Z1lYVjBiMUJoWkNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTmhiR04xYkdGMFpTQjBhR1VnYjNWMGNIVjBJSE5vWVhCbElHWnZjaUJRYjI5c0lHOXdjeUJpWVhObFpDQnZiaUJwYm5CMWRDQmhkSFJ5YVdKMWRHVnpMaUFvVTJodmRXeGtJR0psSUhWelpXUWdiMjVzZVNCbWIzSWdVRzl2YkNCdmNITXBYRzRnSUNBcUlFQndZWEpoYlNCcGMwZHNiMkpoYkU5d1pYSmhkRzl5SUVsbUlIUnlkV1VzSUhCbGNtWnZjbTBnWjJ4dlltRnNJSEJ2YjJ4cGJtY3VYRzRnSUNBcUlFQndZWEpoYlNCcGJuQjFkRVJwYlhNZ1ZHaGxJR2x1Y0hWMElIUmxibk52Y2lCa2FXMWxibk5wYjI0dUlDaHBibkIxZEhOYk1GMHVaR2x0Y3lsY2JpQWdJQ29nUUhCaGNtRnRJSE4wY21sa1pYTWdVM1J5YVdSbElHRnNiMjVuSUdWaFkyZ2dZWGhwY3k1Y2JpQWdJQ29nUUhCaGNtRnRJR1JwYkdGMGFXOXVjeUJFYVd4aGRHbHZiaUJoYkc5dVp5QmxZV05vSUdGNGFYTXVYRzRnSUNBcUlFQndZWEpoYlNCclpYSnVaV3hUYUdGd1pTQlVhR1VnYzJsNlpTQnZaaUIwYUdVZ2EyVnlibVZzSUdGc2IyNW5JR1ZoWTJnZ1lYaHBjeTVjYmlBZ0lDb2dRSEJoY21GdElIQmhaSE1nVUdGa1pHbHVaeUJtYjNJZ2RHaGxJR0psWjJsdWJtbHVaeUJoYm1RZ1pXNWthVzVuSUdGc2IyNW5JR1ZoWTJnZ1lYaHBjeTVjYmlBZ0lDb2dRSEJoY21GdElHRjFkRzlRWVdRZ1JFVlFVa1ZEUVZSRlJDQmhkSFJ5YVdKMWRHVWdjM1Z3Y0c5eWRHVmtJR1p2Y2lCc1pXZGhZM2tnYlc5a1pXeHpMaUJUY0dWamFXWnBaWE1nYUc5M0lIUnZJR2x0Y0d4cFkybDBiSGtnWTJGc1kzVnNZWFJsSUhCaFpITWdhVzRnWldGamFGeHVJQ0FnS2lBZ0lDQWdaR2x0Wlc1emFXOXVMaUJEWVc0Z2RHRnJaU0IyWVd4MVpYTWdUazlVVTBWVUxDQlRRVTFGWDFWUVVFVlNMQ0JUUVUxRlgweFBWMFZTTENCdmNpQldRVXhKUkM1Y2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCamIyMXdkWFJsVUc5dmJFOTFkSEIxZEZOb1lYQmxLRnh1SUNBZ0lDQWdhWE5IYkc5aVlXeFBjR1Z5WVhSdmNqb2dZbTl2YkdWaGJpd2dhVzV3ZFhSRWFXMXpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnYzNSeWFXUmxjem9nYm5WdFltVnlXMTBzSUdScGJHRjBhVzl1Y3pvZ2JuVnRZbVZ5VzEwc1hHNGdJQ0FnSUNCclpYSnVaV3hUYUdGd1pUb2diblZ0WW1WeVcxMHNJSEJoWkhNNklHNTFiV0psY2x0ZExDQmhkWFJ2VUdGa1B6b2djM1J5YVc1bktUb2diblZ0WW1WeVcxMGdlMXh1SUNBZ0lHbG1JQ2hwYm5CMWRFUnBiWE11YkdWdVozUm9JRHc5SURBcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmFXNXdkWFFnYzJoaGNHVWdiWFZ6ZENCaVpTQnZaaUJ6YVhwbElHZHlaV0YwWlhJZ2RHaGhiaUF3SnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1FXUmtJR0poZEdOb0lITnBlbVVnWVc1a0lHNTFiV0psY2lCdlppQmphR0Z1Ym1Wc2N5QnZaaUJ2ZFhSd2RYUmNiaUFnSUNCamIyNXpkQ0J2ZFhSd2RYUkVhVzF6SUQwZ1cybHVjSFYwUkdsdGMxc3dYU3dnYVc1d2RYUkVhVzF6V3pGZFhUdGNibHh1SUNBZ0lGQnZiMnhEYjI1MlZYUnBiQzVqYjIxd2RYUmxVMmhoY0dWSVpXeHdaWElvWEc0Z0lDQWdJQ0FnSUdselIyeHZZbUZzVDNCbGNtRjBiM0lzSUdsdWNIVjBSR2x0Y3l3Z2IzVjBjSFYwUkdsdGN5d2djM1J5YVdSbGN5d2daR2xzWVhScGIyNXpMQ0JyWlhKdVpXeFRhR0Z3WlN3Z2NHRmtjeXdnWVhWMGIxQmhaQ2s3WEc0Z0lDQWdjbVYwZFhKdUlHOTFkSEIxZEVScGJYTTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUTJGc1kzVnNZWFJsSUhSb1pTQnZkWFJ3ZFhRZ2MyaGhjR1VnWm05eUlFTnZibllnYjNBZ1ltRnpaV1FnYjI0Z2FXNXdkWFFnWVhSMGNtbGlkWFJsY3k0Z0tGTm9iM1ZzWkNCaVpTQjFjMlZrSUc5dWJIa2dabTl5SUVOdmJuWWdiM0FwWEc0Z0lDQXFJRUJ3WVhKaGJTQnBibkIxZEVScGJYTWdWR2hsSUdsdWNIVjBJSFJsYm5OdmNpQmthVzFsYm5OcGIyNHVJQ2hwYm5CMWRITmJNRjB1WkdsdGN5bGNiaUFnSUNvZ1FIQmhjbUZ0SUdacGJIUmxja1JwYlhNZ1ZHaGxJR1pwYkhSbGNpQjBaVzV6YjNJZ1pHbHRaVzV6YVc5dUxpQW9hVzV3ZFhSeld6RmRMbVJwYlhNcFhHNGdJQ0FxSUVCd1lYSmhiU0J6ZEhKcFpHVnpJRk4wY21sa1pTQmhiRzl1WnlCbFlXTm9JR0Y0YVhNdVhHNGdJQ0FxSUVCd1lYSmhiU0JyWlhKdVpXeFRhR0Z3WlNCVWFHVWdjMmw2WlNCdlppQjBhR1VnYTJWeWJtVnNJR0ZzYjI1bklHVmhZMmdnWVhocGN5NWNiaUFnSUNvZ1FIQmhjbUZ0SUhCaFpITWdVR0ZrWkdsdVp5Qm1iM0lnZEdobElHSmxaMmx1Ym1sdVp5QmhibVFnWlc1a2FXNW5JR0ZzYjI1bklHVmhZMmdnWVhocGN5NWNiaUFnSUNvZ1FIQmhjbUZ0SUdGMWRHOVFZV1FnUkVWUVVrVkRRVlJGUkNCaGRIUnlhV0oxZEdVZ2MzVndjRzl5ZEdWa0lHWnZjaUJzWldkaFkza2diVzlrWld4ekxpQlRjR1ZqYVdacFpYTWdhRzkzSUhSdklHbHRjR3hwWTJsMGJIa2dZMkZzWTNWc1lYUmxJSEJoWkhNZ2FXNGdaV0ZqYUZ4dUlDQWdLaUFnSUNBZ1pHbHRaVzV6YVc5dUxpQkRZVzRnZEdGclpTQjJZV3gxWlhNZ1RrOVVVMFZVTENCVFFVMUZYMVZRVUVWU0xDQlRRVTFGWDB4UFYwVlNMQ0J2Y2lCV1FVeEpSQzVjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJqYjIxd2RYUmxRMjl1ZGs5MWRIQjFkRk5vWVhCbEtGeHVJQ0FnSUNBZ2FXNXdkWFJFYVcxek9pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhTd2dabWxzZEdWeVJHbHRjem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBzSUhOMGNtbGtaWE02SUc1MWJXSmxjbHRkTENCa2FXeGhkR2x2Ym5NNklHNTFiV0psY2x0ZExGeHVJQ0FnSUNBZ2EyVnlibVZzVTJoaGNHVTZJRzUxYldKbGNsdGRMQ0J3WVdSek9pQnVkVzFpWlhKYlhTd2dZWFYwYjFCaFpEODZJSE4wY21sdVp5azZJRzUxYldKbGNsdGRJSHRjYmlBZ0lDQnBaaUFvYVc1d2RYUkVhVzF6TG14bGJtZDBhQ0E4UFNBd0lIeDhJR1pwYkhSbGNrUnBiWE11YkdWdVozUm9JRHc5SURBcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmFXNTJZV3hwWkNCcGJuQjFkQ0IwWlc1emIzSWdaR2x0Y3lCdmNpQnBiblpoYkdsa0lHWnBiSFJsY2lCMFpXNXpiM0lnWkdsdGN5Y3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRUZrWkNCaVlYUmphQ0J6YVhwbElHRnVaQ0J1ZFcxaVpYSWdiMllnWTJoaGJtNWxiSE1nYjJZZ2IzVjBjSFYwWEc0Z0lDQWdZMjl1YzNRZ2IzVjBjSFYwUkdsdGN5QTlJRnRwYm5CMWRFUnBiWE5iTUYwc0lHWnBiSFJsY2tScGJYTmJNRjFkTzF4dVhHNGdJQ0FnVUc5dmJFTnZiblpWZEdsc0xtTnZiWEIxZEdWVGFHRndaVWhsYkhCbGNpaG1ZV3h6WlN3Z2FXNXdkWFJFYVcxekxDQnZkWFJ3ZFhSRWFXMXpMQ0J6ZEhKcFpHVnpMQ0JrYVd4aGRHbHZibk1zSUd0bGNtNWxiRk5vWVhCbExDQndZV1J6TENCaGRYUnZVR0ZrS1R0Y2JpQWdJQ0J5WlhSMWNtNGdiM1YwY0hWMFJHbHRjenRjYmlBZ2ZWeHVYRzRnSUM4dklIZHBiR3dnWTI5dGNIVjBaU0J2ZFhSd2RYUWdjMmhoY0dWeklHWnZjaUJrWVhSaElHUnBiV1Z1YzJsdmJuTWdUMDVNV1NBb2FTNWxMaWtnYm04Z1ltRjBZMmdnYzJsNlpTQmhibVFnWTJoaGJtNWxiSE5jYmlBZ0x5OGdZMkZzYkdWa0lHSjVJR052YlhCMWRHVlFiMjlzVDNWMGNIVjBVMmhoY0dVb0tTQmhibVFnWTI5dGNIVjBaVU52Ym5aUGRYUndkWFJUYUdGd1pTZ3BYRzRnSUM4dklHRmthblZ6ZENCd1lXUnpJR0poYzJWa0lHOXVJQ2RoZFhSdlVHRmtKeUJoZEhSeWFXSjFkR1VnY0hKcGIzSWdkRzhnYzJoaGNHVWdZMjl0Y0hWMFlYUnBiMjVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWTI5dGNIVjBaVk5vWVhCbFNHVnNjR1Z5S0Z4dUlDQWdJQ0FnYVhOSGJHOWlZV3hQY0dWeVlYUnZjam9nWW05dmJHVmhiaXdnYVc1d2RYUkVhVzF6T2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z2IzVjBjSFYwUkdsdGN6b2diblZ0WW1WeVcxMHNJSE4wY21sa1pYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMRnh1SUNBZ0lDQWdaR2xzWVhScGIyNXpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnYTJWeWJtVnNVMmhoY0dVNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZExDQndZV1J6T2lCdWRXMWlaWEpiWFN3Z1lYVjBiMUJoWkQ4NklITjBjbWx1WnlrZ2UxeHVJQ0FnSUdsbUlDaHBjMGRzYjJKaGJFOXdaWEpoZEc5eUtTQjdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQmthVzBnUFNBd095QmthVzBnUENCcGJuQjFkRVJwYlhNdWJHVnVaM1JvSUMwZ01qc2daR2x0S3lzcElIdGNiaUFnSUNBZ0lDQWdiM1YwY0hWMFJHbHRjeTV3ZFhOb0tERXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCa2FXMGdQU0F3T3lCa2FXMGdQQ0JwYm5CMWRFUnBiWE11YkdWdVozUm9JQzBnTWpzZ1pHbHRLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2IzVjBjSFYwUkdsdGN5NXdkWE5vS0ZCdmIyeERiMjUyVlhScGJDNWhaR3AxYzNSUVlXUkJibVJTWlhSMWNtNVRhR0Z3WlNoY2JpQWdJQ0FnSUNBZ0lDQWdJR2x1Y0hWMFJHbHRjMXRrYVcwZ0t5QXlYU3dnYzNSeWFXUmxjMXRrYVcxZExDQmthV3hoZEdsdmJuTmJaR2x0WFN3Z2EyVnlibVZzVTJoaGNHVmJaR2x0WFN3Z2NHRmtjeXdnWkdsdExDQmthVzBnS3lCcGJuQjFkRVJwYlhNdWJHVnVaM1JvSUMwZ01peGNiaUFnSUNBZ0lDQWdJQ0FnSUdGMWRHOVFZV1FwS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdkx5Qm9aV3h3WlhJZ1ptOXlJR052YlhCMWRHVlRhR0Z3WlVobGJIQmxjaWdwSUdGdVpDQmhaR3AxYzNSUVlXUnpRbUZ6WldSUGJrRjFkRzlRWVdRb0tWeHVJQ0F2THlCaFpHcDFjM1J6SUhCaFpDQjJZV3gxWlNCbWIzSWdaMmwyWlc0Z0oyRjFkRzlRWVdRbklITjBjbWx1WnlCaGJtUWdZMjl0Y0hWMFpYTWdiM1YwY0hWMElITm9ZWEJsSUdGc2IyNW5JR0VnY0dGeWRHbGpkV3hoY2lCa2FXMWxibk5wYjI1Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ1lXUnFkWE4wVUdGa1FXNWtVbVYwZFhKdVUyaGhjR1VvWEc0Z0lDQWdJQ0JwYmxOcGVtVTZJRzUxYldKbGNpd2djM1J5YVdSbE9pQnVkVzFpWlhJc0lHUnBiR0YwYVc5dU9pQnVkVzFpWlhJc0lHdGxjbTVsYkRvZ2JuVnRZbVZ5TENCd1lXUnpPaUJ1ZFcxaVpYSmJYU3dnY0dGa1NHVmhaRWx1WkdWNE9pQnVkVzFpWlhJc1hHNGdJQ0FnSUNCd1lXUlVZV2xzU1c1a1pYZzZJRzUxYldKbGNpd2dZWFYwYjFCaFpEODZJSE4wY21sdVp5azZJRzUxYldKbGNpQjdYRzRnSUNBZ1kyOXVjM1FnWkd0bGNtNWxiQ0E5SUdScGJHRjBhVzl1SUNvZ0tHdGxjbTVsYkNBdElERXBJQ3NnTVR0Y2JpQWdJQ0JwWmlBb1lYVjBiMUJoWkNBbUppQmhkWFJ2VUdGa0lDRTlQU0FuVGs5VVUwVlVKeWtnZTF4dUlDQWdJQ0FnYzNkcGRHTm9JQ2hoZFhSdlVHRmtLU0I3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdKMVpCVEVsRUp6cGNiaUFnSUNBZ0lDQWdJQ0J3WVdSelczQmhaRWhsWVdSSmJtUmxlRjBnUFNBd08xeHVJQ0FnSUNBZ0lDQWdJSEJoWkhOYmNHRmtWR0ZwYkVsdVpHVjRYU0E5SURBN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlFMWhkR2d1Wm14dmIzSW9LQ2hwYmxOcGVtVWdMU0JrYTJWeWJtVnNLU0F2SUhOMGNtbGtaU2tnS3lBeEtUdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBblUwRk5SVjlNVDFkRlVpYzZYRzRnSUNBZ0lDQWdJR05oYzJVZ0oxTkJUVVZmVlZCUVJWSW5PbHh1SUNBZ0lDQWdJQ0FnSUdsbUlDaGthV3hoZEdsdmJpQWhQVDBnTVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RFYVd4aGRHbHZiaUJ1YjNRZ2MzVndjRzl5ZEdWa0lHWnZjaUJUUVUxRlgxVlFVRVZTSUc5eUlGTkJUVVZmVEU5WFJWSW5LVHRjYmlBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JHVm5ZV041VkdGeVoyVjBVMmw2WlNBOUlDaHBibE5wZW1VZ0t5QnpkSEpwWkdVZ0xTQXhLU0F2SUhOMGNtbGtaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhCaFpFNWxaV1JsWkNBOUlDaHNaV2RoWTNsVVlYSm5aWFJUYVhwbElDMGdNU2tnS2lCemRISnBaR1VnS3lCclpYSnVaV3dnTFNCcGJsTnBlbVU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQndZV1J6VzNCaFpFaGxZV1JKYm1SbGVGMGdQVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2hoZFhSdlVHRmtJRDA5UFNBblUwRk5SVjlNVDFkRlVpY3BJRDhnVFdGMGFDNW1iRzl2Y2lnb2NHRmtUbVZsWkdWa0lDc2dNU2tnTHlBeUtTQTZJRTFoZEdndVpteHZiM0lvY0dGa1RtVmxaR1ZrSUM4Z01pazdYRzRnSUNBZ0lDQWdJQ0FnSUNCd1lXUnpXM0JoWkZSaGFXeEpibVJsZUYwZ1BTQndZV1JPWldWa1pXUWdMU0J3WVdSelczQmhaRWhsWVdSSmJtUmxlRjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1RXRjBhQzVtYkc5dmNpZ29LR2x1VTJsNlpTQXJJSEJoWkU1bFpXUmxaQ0F0SUd0bGNtNWxiQ2tnTHlCemRISnBaR1VwSUNzZ01TazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblZXNXpkWEJ3YjNKMFpXUWdRWFYwYjFCaFpDQjBlWEJsSnlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQk5ZWFJvTG1ac2IyOXlLQ2dvYVc1VGFYcGxJQ3NnY0dGa2MxdHdZV1JJWldGa1NXNWtaWGhkSUNzZ2NHRmtjMXR3WVdSVVlXbHNTVzVrWlhoZElDMGdaR3RsY201bGJDa2dMeUJ6ZEhKcFpHVXBJQ3NnTVNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJIWlcxdFZYUnBiQ0I3WEc0Z0lDOHZJSGRwYkd3Z2JXRnJaU0J6ZFhKbElHbHVjSFYwSUhOb1lYQmxjeUJoY21VZ1kyOXRjR0YwYVdKc1pTQm1iM0lnZEdocGN5QnZjRnh1SUNBdkx5QmhibVFnY21WMGRYSnVJR0poWTJzZ2RHaGxJSE5vWVhCbElHOW1JSFJvWlNCdmRYUndkWFFnYVc0Z2RHaGxJR1p2Y20wZ2IyWWdZU0IwZFhCc1pWeHVJQ0F2THlCM2FXeHNJSFJvY205M0lHVjRZMlZ3ZEdsdmJpQnBaaUIwYUdVZ2FXNXdkWFFnYzJoaGNHVnpJR0Z5WlNCdWIzUWdZMjl0Y0dGMGFXSnNaVnh1SUNCemRHRjBhV01nWjJWMFUyaGhjR1ZQWmtkbGJXMVNaWE4xYkhRb1hHNGdJQ0FnSUNCc1pXWjBVMmhoY0dVNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZExDQjBjbUZ1YzB4bFpuUTZJR0p2YjJ4bFlXNHNJSEpwWjJoMFUyaGhjR1U2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkTENCMGNtRnVjMUpwWjJoME9pQmliMjlzWldGdUxGeHVJQ0FnSUNBZ1ltbGhjMU5vWVhCbFB6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU0I3WEc0Z0lDQWdhV1lnS0d4bFpuUlRhR0Z3WlM1c1pXNW5kR2dnSVQwOUlESWdmSHdnY21sbmFIUlRhR0Z3WlM1c1pXNW5kR2dnSVQwOUlESXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25jMmhoY0dVZ2JtVmxaQ0IwYnlCaVpTQnZaaUJ6YVhwbElESW5LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnNaWFFnVFRvZ2JuVnRZbVZ5TzF4dUlDQWdJR3hsZENCTE9pQnVkVzFpWlhJN1hHNGdJQ0FnYkdWMElFNDZJRzUxYldKbGNqdGNibHh1SUNBZ0lHbG1JQ2gwY21GdWMweGxablFwSUh0Y2JpQWdJQ0FnSUUwZ1BTQnNaV1owVTJoaGNHVmJNVjA3WEc0Z0lDQWdJQ0JMSUQwZ2JHVm1kRk5vWVhCbFd6QmRPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCTklEMGdiR1ZtZEZOb1lYQmxXekJkTzF4dUlDQWdJQ0FnU3lBOUlHeGxablJUYUdGd1pWc3hYVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnNaWFFnYTBScGJTQTlJQzB4TzF4dVhHNGdJQ0FnYVdZZ0tIUnlZVzV6VW1sbmFIUXBJSHRjYmlBZ0lDQWdJRTRnUFNCeWFXZG9kRk5vWVhCbFd6QmRPMXh1SUNBZ0lDQWdhMFJwYlNBOUlERTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUU0Z1BTQnlhV2RvZEZOb1lYQmxXekZkTzF4dUlDQWdJQ0FnYTBScGJTQTlJREE3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0hKcFoyaDBVMmhoY0dWYmEwUnBiVjBnSVQwOUlFc3BJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25aR2x0Wlc1emFXOXVJRzFwYzIxaGRHTm9KeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0UwZ1BEMGdNQ0I4ZkNCT0lEdzlJREFnZkh3Z1N5QThQU0F3S1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJsdWRtRnNhV1FnYzJoaGNHVWdjM0JsWTJsbWFXVmtKeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0dKcFlYTlRhR0Z3WlNBbUppQWhRbkp2WVdSallYTjBWWFJwYkM1cGMxWmhiR2xrUW5KdllXUmpZWE4wS0dKcFlYTlRhR0Z3WlN3Z1cwMHNJRTVkS1NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkblpXMXRPaUJwYm5aaGJHbGtJR0pwWVhNZ2MyaGhjR1VnWm05eUlHSnliMkZrWTJGemRDY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCYlRTd2dUaXdnUzEwN1hHNGdJSDFjYm4xY2JseHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1RVbE9YME5NU1ZBZ1BTQXRNeTQwTURJNE1qTTBOall6T0RVeU9EZzJaU3N6T0R0Y2JtVjRjRzl5ZENCamIyNXpkQ0JOUVZoZlEweEpVQ0E5SURNdU5EQXlPREl6TkRZMk16ZzFNamc0Tm1Vck16ZzdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1JHRjBZVlI1Y0dWOUlHWnliMjBnSnk0dUx5NHVMeTR1TDNkaGMyMHRZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdVMmhoY0dWVmRHbHNmU0JtY205dElDY3VMaTh1TGk5MWRHbHNKenRjYm1sdGNHOXlkQ0I3VUhKdlozSmhiVlZ1YVdadmNtMHNJRkJ5YjJkeVlXMVZibWxtYjNKdFZtRnlhV0ZpYkdWSmJtWnZmU0JtY205dElDY3VMaTkwZVhCbGN5YzdYRzVjYmk4cUtseHVJQ29nWTI5dWMzUmhiblFnZG1Gc2RXVWdabTl5SUdFZ2QyOXlhMmR5YjNWd0lITnBlbVV1WEc0Z0tseHVJQ29nVjJVZ1pHVm1hVzVwZEdWc2VTQmpZVzRnWkc4Z1puVnlkR2hsY2lCdmNIUnBiV2w2WVhScGIyNGdhVzRnWm5WMGRYSmxMQ0JpZFhRZ1ptOXlJRzV2ZHlCM1pTQjFjMlVnTmpRdVhHNGdLbHh1SUNvZ2NuVnNaU0J2WmlCMGFIVnRZam9nVlhObElGdGhJSGR2Y210bmNtOTFjQ0J6YVhwbElHOW1YU0EyTkNCMWJteGxjM01nZVc5MUlHdHViM2NnZDJoaGRDQkhVRlVnZVc5MUlHRnlaU0IwWVhKblpYUnBibWNnYjNJZ2RHaGhkQ0I1YjNWeUlIZHZjbXRzYjJGa1hHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaV1ZrY3lCemIyMWxkR2hwYm1jZ1pHbG1abVZ5Wlc1MExseHVJQ3BjYmlBcUlHWnliMjA2SUdoMGRIQnpPaTh2YzNWeWJXRXVaR1YyTDNSb2FXNW5jeTkzWldKbmNIVXZYRzRnS2lvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnVjA5U1MwZFNUMVZRWDFOSldrVWdQU0EyTkR0Y2JseHVhVzUwWlhKbVlXTmxJRWx1WkdsalpYTklaV3h3WlhKVWVYQmxjeUI3WEc0Z0lDOHFLbHh1SUNBZ0tpQlhSMU5NSUhSNWNHVWdiMllnYVc1a2FXTmxjeUJsZUhCeVpYTnphVzl1WEc0Z0lDQXFMMXh1SUNCeVpXRmtiMjVzZVNCcGJtUnBZMlZ6T2lCemRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRmRIVTB3Z2RIbHdaU0J2WmlCaElIWmhiSFZsWEc0Z0lDQXFMMXh1SUNCeVpXRmtiMjVzZVNCMllXeDFaVG9nYzNSeWFXNW5PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlhSMU5NSUhSNWNHVWdiMllnYzNSdmNtRm5aU0IwZVhCbElISmxjSEpsYzJWdWRHbHVaeUJoSUhaaGJIVmxYRzRnSUNBcVhHNGdJQ0FxSUZSb2FYTWdhWE1nZFhOMVlXeHNlU0IwYUdVZ2MyRnRaU0IwYnlCZ2RtRnNkV1ZnTENCaWRYUWdabTl5SUhOdmJXVWdkSGx3WlNBb1pXY3VJR0p2YjJ3cExDQjNaU0J1WldWa0lIUnZJSFZ6WlNCZ2RUTXlZQ0JoY3lCemRHOXlZV2RsSUhSNWNHVWdabTl5WEc0Z0lDQXFJSFpoYkhWbElIUjVjR1VnWUhabFl6UThZbTl2YkQ1Z1hHNGdJQ0FxTDF4dUlDQnlaV0ZrYjI1c2VTQnpkRzl5WVdkbE9pQnpkSEpwYm1jN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUhSbGJuTnZjaUIwZVhCbElHRnpJSEpsY0hKbGMyVnVkR1ZrSUdsdUlGUmxibk52Y2xacFpYZGNiaUFnSUNvdlhHNGdJSEpsWVdSdmJteDVJSFJsYm5OdmNqb2diblZ0WW1WeU8xeHVmVnh1WEc0dktpcGNiaUFxSUVFZ2FHVnNjR1Z5SUdOc1lYTnpJR1p2Y2lCblpXNWxjbUYwYVc1bklGZEhVMHdnWTI5a1pTQm1iM0lnYldGdWFYQjFiR0YwYVc1bklHbHVaR2xqWlhNZ1lXNWtJR1JoZEdFZ1ptOXlJR0VnYzJoaFpHVnlKM01nYVc1d2RYUWdiM0lnYjNWMGNIVjBMbHh1SUNwY2JpQXFJRlJvYVhNZ1kyeGhjM01nYVhNZ1pHVnphV2R1WldRZ2RHOGdiMlptWlhJZ1lTQjFibWxtYVdWa0lIZGhlU0IwYnlCblpXNWxjbUYwWlNCWFIxTk1JR052WkdVZ1ptOXlJRzFoYm1sd2RXeGhkR2x1WnlCcGJtUnBZMlZ6SUdGdVpDQmtZWFJoSUdadmNpQmhJSE5vWVdSbGNpZHpYRzRnS2lCcGJuQjFkQ0J2Y2lCdmRYUndkWFF1WEc0Z0tseHVJQ29nVkdobElHWnZiR3h2ZDJsdVp5QnBjeUJoSUd4cGMzUWdiMllnZEdWeWJXbHViMnh2WjJsbGN5QjFjMlZrSUdsdUlIUm9hWE1nWTJ4aGMzTTZYRzRnS2lBdElHQnZabVp6WlhSZ09pQmhJSFZwYm5Rek1pQjJZV3gxWlNCeVpYQnlaWE5sYm5ScGJtY2dkR2hsSUc5bVpuTmxkQ0J2WmlCaGJpQmxiR1Z0Wlc1MElHbHVJSFJvWlNCa1lYUmhJR0oxWm1abGNpNWNiaUFxSUMwZ1lHbHVaR2xqWlhOZ09pQmhiaUJoWW5OMGNtRmpkR2x2YmlCdlppQmhJRzExYkhScExXUnBiV1Z1YzJsdmJtRnNJR0Z5Y21GNUozTWdhVzVrYVdObGN5QnlaWEJ5WlhObGJuUnBibWNnZEdobElHUmhkR0VuY3lCcGJtUmxlQ0J2YmlCbFlXTm9JR1JwYldWdWMybHZiaTVjYmlBcUlDMGdZSFpoYkhWbFlEb2dZU0IyWVd4MVpTQnZaaUJoSUdSaGRHRWdaV3hsYldWdWRDNWNiaUFxWEc0Z0tpQlZjMlZ5Y3lCaGNtVWdaWGh3WldOMFpXUWdkRzhnWTNKbFlYUmxJR0Z1SUdsdWMzUmhibU5sSUc5bUlIUm9hWE1nWTJ4aGMzTWdabTl5SUdWaFkyZ2djMmhoWkdWeUozTWdhVzV3ZFhRZ2IzSWdiM1YwY0hWMExDQmhibVFnZFhObElIUm9aU0JwYm5OMFlXNWpaU0IwYjF4dUlDb2daMlZ1WlhKaGRHVWdWMGRUVENCamIyUmxJR1p2Y2lCdFlXNXBjSFZzWVhScGJtY2dhVzVrYVdObGN5QmhibVFnWkdGMFlTNGdWR2hsSUdadmJHeHZkMmx1WnlBeUlHVjRjRzl5ZEdWa0lHWjFibU4wYVc5dWN5QmhjbVVnWm05eUlIVnpaWEp6SUhSdklHTmhiR3dnZEc5Y2JpQXFJR055WldGMFpTQmhiaUJwYm5OMFlXNWpaU0J2WmlCaGJpQnBibVJwWTJWeklHaGxiSEJsY2pwY2JpQXFJQzBnWUdsdWNIVjBWbUZ5YVdGaWJHVW9LV0E2SUdOeVpXRjBaU0JoYmlCcGJtUnBZMlZ6SUdobGJIQmxjaUJwYm5OMFlXNWpaU0JtYjNJZ1lXNGdhVzV3ZFhRdVhHNGdLaUF0SUdCdmRYUndkWFJXWVhKcFlXSnNaU2dwWURvZ1kzSmxZWFJsSUdGdUlHbHVaR2xqWlhNZ2FHVnNjR1Z5SUdsdWMzUmhibU5sSUdadmNpQmhiaUJ2ZFhSd2RYUXVYRzRnS2lBdElHQnBiblJsY201aGJGWmhjbWxoWW14bEtDbGdPaUJqY21WaGRHVWdZVzRnYVc1a2FXTmxjeUJvWld4d1pYSWdhVzV6ZEdGdVkyVWdabTl5SUdGdUlHbHVkR1Z5Ym1Gc0lIWmhjbWxoWW14bExseHVJQ3BjYmlBcUlFRnVJR2x1WkdsalpYTWdhR1ZzY0dWeUlHbHVjM1JoYm1ObElHTnZiblJoYVc1eklHaGxiSEJsY2lCbWRXNWpkR2x2Ym5NZ1ptOXlJSFJvWlNCbWIyeHNiM2RwYm1jZ2IzQmxjbUYwYVc5dWN6cGNiaUFxSUMwZ1lXTmpaWE56SUhKbFlXUnZibXg1SUdKaGMybGpJR2x1Wm05eWJXRjBhVzl1TENCcGJtTnNkV1JwYm1jNklHQnVZVzFsWUNoMGFHVWdibUZ0WlNCdlppQjBhR1VnYVc1d2RYUWdiM0lnYjNWMGNIVjBLU3dnWUhWellXZGxZQ2gzYUdWMGFHVnlJR2wwSjNNZ1lXNWNiaUFxSUdsdWNIVjBMQ0JoYmlCdmRYUndkWFFnYjNJZ1lXNGdhVzUwWlhKdVlXd2dkbUZ5YVdGaWJHVXBJR0Z1WkNCZ2MyaGhjR1ZnS0hSb1pTQndZWE56WldRZ2FXNGdjMmhoY0dVcExseHVJQ29nTFNCZ2RIbHdaV0E2SUdGalkyVnpjeUJ5WldGa2IyNXNlU0IwZVhCbElHbHVabTl5YldGMGFXOXVMQ0JwYm1Oc2RXUnBibWM2SUdCcGJtUnBZMlZ6WUNoMGFHVWdkSGx3WlNCdlppQnBibVJwWTJWektTd2dZSFpoYkhWbFlDaDBhR1VnZEhsd1pTQnZaaUIyWVd4MVpTQmhkRnh1SUNvZ2NuVnVkR2x0WlNrc0lHQnpkRzl5WVdkbFlDaDBhR1VnZEhsd1pTQnZaaUIyWVd4MVpTQmhkQ0J6ZEc5eVlXZGxLU0JoYm1RZ1lIUmxibk52Y21Bb2RHaGxJSFJsYm5OdmNpQjBlWEJsSUdGeklISmxjSEpsYzJWdWRHVmtJR2x1SUZSbGJuTnZjbFpwWlhjcExseHVJQ29nTFNCblpXNWxjbUYwWlNCWFIxTk1JR052WkdVZ1ptOXlJR2RsZEhScGJtY2dhVzVrYVdObGN5Qm1jbTl0SUc5bVpuTmxkQzRnVlhObElHQnZabVp6WlhSVWIwbHVaR2xqWlhNb0tXQWdabTl5SUZkSFUwd2dZMjlrWlNCemJtbHdjR1YwSUhSdklHTmhiR04xYkdGMFpWeHVJQ29nYVc1a2FXTmxjeUJtY205dElHOW1abk5sZEN3Z1lXNWtJSFZ6WlNCZ2FXNWthV05sYzFSdlQyWm1jMlYwS0NsZ0lHWnZjaUJYUjFOTUlHTnZaR1VnYzI1cGNIQmxkQ0IwYnlCallXeGpkV3hoZEdVZ2IyWm1jMlYwSUdaeWIyMGdhVzVrYVdObGN5NWNiaUFxSUMwZ2RHOGdiV0Z1YVhCMWJHRjBaU0JoYmlCcGJuTjBZVzVqWlNCdlppQnBibVJwWTJWekxDQjFjMlVnWUhObGRFbHVaR2xqWlhNb0tXQWdZVzVrSUdCblpYUkpibVJwWTJWektDbGdJSFJ2SUhObGRDQmhibVFnWjJWMElIUm9aU0JwYm1ScFkyVnpJRzl1SUdGdVhHNGdLaUJwYm1ScFkyVnpJSFpoY21saFlteGxMbHh1SUNvZ0xTQjBieUJ0WVc1cGNIVnNZWFJsSUdSaGRHRXNJSFZ6WlNCZ2MyVjBLQ2xnTDJCblpYUW9LV0FnZEc4Z1lXTmpaWE56SUdSaGRHRWdZWFFnZEdobElHZHBkbVZ1SUdsdVpHbGpaWE1nWm5KdmJTQndZWEpoYldWMFpYSWdiR2x6ZEN3Z2RYTmxYRzRnS2lCZ2MyVjBRbmxKYm1ScFkyVnpLQ2xnTDJCblpYUkNlVWx1WkdsalpYTW9LV0FnZEc4Z1lXTmpaWE56SUdSaGRHRWdZWFFnZEdobElHZHBkbVZ1SUdsdVpHbGpaWE1nWm5KdmJTQmhiaUJwYm1ScFkyVnpJSFpoY21saFlteGxMQ0JoYm1RZ2RYTmxYRzRnS2lCZ2MyVjBRbmxQWm1aelpYUW9LV0F2WUdkbGRFSjVUMlptYzJWMEtDbGdJSFJ2SUdGalkyVnpjeUJrWVhSaElHRjBJSFJvWlNCbmFYWmxiaUJ2Wm1aelpYUXVYRzRnS2lBdElHQnBiWEJzWURvZ1oyVjBJRmRIVTB3Z1kyOWtaU0J2WmlCbWRXNWpkR2x2YmlCcGJYQnNaVzFsYm5SaGRHbHZiaUJtYjNJZ2RHaGxJSFYwYVd3Z1puVnVZM1JwYjI1eklHMWxiblJwYjI1bFpDQmhZbTkyWlM1Y2JpQXFMMXh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JKYm1ScFkyVnpTR1ZzY0dWeUlIdGNiaUFnTHlvcVhHNGdJQ0FxSUdkbGRDQlhSMU5NSUdOdlpHVWdiMllnWm5WdVkzUnBiMjRnYVcxd2JHVnRaVzUwWVhScGIyNGdabTl5SUhSb1pTQjFkR2xzSUdaMWJtTjBhVzl1Y3k1Y2JpQWdJQ3BjYmlBZ0lDb3ZYRzRnSUhKbFlXUnZibXg1SUdsdGNHdzZJQ2dwSUQwK0lITjBjbWx1Wnp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nWjJWMElIUjVjR1VnYVc1bWIxeHVJQ0FnS2k5Y2JpQWdjbVZoWkc5dWJIa2dkSGx3WlRvZ1NXNWthV05sYzBobGJIQmxjbFI1Y0dWek8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCWFIxTk1JR052WkdVZ2IyWWdZU0JsZUhCeVpYTnphVzl1SUdadmNpQm5aWFIwYVc1bklHbHVaR2xqWlhNZ1puSnZiU0J2Wm1aelpYUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0IyWVhKUFptWnpaWFFnTFNCaElIVXpNaUJsZUhCeVpYTnphVzl1SUhKbGNISmxjMlZ1ZEdsdVp5QjBhR1VnYjJabWMyVjBMbHh1SUNBZ0tseHVJQ0FnS2lCQWNtVjBkWEp1Y3lCaGJpQmdkSGx3WlM1cGJtUnBZMlZ6WUNCbGVIQnlaWE56YVc5dVhHNGdJQ0FxTDF4dUlDQnlaV0ZrYjI1c2VTQnZabVp6WlhSVWIwbHVaR2xqWlhNNklDaDJZWEpQWm1aelpYUTZJSE4wY21sdVp5a2dQVDRnYzNSeWFXNW5PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlhSMU5NSUdOdlpHVWdiMllnWVc0Z1lIVXpNbUFnWlhod2NtVnpjMmx2YmlCbWIzSWdaMlYwZEdsdVp5QnZabVp6WlhRZ1puSnZiU0JwYm1ScFkyVnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZG1GeVNXNWthV05sY3lBdElHRWdZSFI1Y0dVdWFXNWthV05sYzJBZ1pYaHdjbVZ6YzJsdmJpQnlaWEJ5WlhObGJuUnBibWNnZEdobElHbHVaR2xqWlhNdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJR0Z1SUdCMU16SmdJR1Y0Y0hKbGMzTnBiMjVjYmlBZ0lDb3ZYRzRnSUhKbFlXUnZibXg1SUdsdVpHbGpaWE5VYjA5bVpuTmxkRG9nS0haaGNrbHVaR2xqWlhNNklITjBjbWx1WnlrZ1BUNGdjM1J5YVc1bk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCWFIxTk1JR052WkdVZ2IyWWdZVzRnWUhVek1tQWdaWGh3Y21WemMybHZiaUJtYjNJZ1oyVjBkR2x1WnlCdmNtbG5hVzVoYkNCdlptWnpaWFFnWm5KdmJTQmljbTloWkdOaGMzUmxaQ0JwYm1ScFkyVnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZG1GeVNXNWthV05sY3lBdElHRWdZSFI1Y0dVdWFXNWthV05sYzJBZ1pYaHdjbVZ6YzJsdmJpQnlaWEJ5WlhObGJuUnBibWNnZEdobElHOTFkSEIxZENCcGJtUnBZMlZ6TGx4dUlDQWdLaUJBY0dGeVlXMGdiM1YwY0hWMElDMGdiM1YwY0hWMElFbHVaR2xqWlhOSVpXeHdaWEl1WEc0Z0lDQXFYRzRnSUNBcUlFQnlaWFIxY201eklHRnVJR0IxTXpKZ0lHVjRjSEpsYzNOcGIyNWNiaUFnSUNvdlhHNGdJSEpsWVdSdmJteDVJR0p5YjJGa1kyRnpkR1ZrU1c1a2FXTmxjMVJ2VDJabWMyVjBPaUFvZG1GeVNXNWthV05sY3pvZ2MzUnlhVzVuTENCdmRYUndkWFE2SUVsdVpHbGpaWE5JWld4d1pYSXBJRDArSUhOMGNtbHVaenRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWMGRUVENCamIyUmxJRzltSUdkbGJtVnlZWFJwYm1jZ1lXNGdhVzVrYVdObGN5QnNhWFJsY21Gc1hHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQnBibWwwSUMwZ2FXNXBkR2xoYkNCMllXeDFaUzVjYmlBZ0lDb3ZYRzRnSUhKbFlXUnZibXg1SUdsdVpHbGpaWE02SUNndUxpNXBibWwwT2lCU1pXRmtiMjVzZVVGeWNtRjVQRzUxYldKbGNueHpkSEpwYm1jK0tTQTlQaUJ6ZEhKcGJtYzdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGZEhVMHdnWTI5a1pTQnZaaUJoSUhOMFlYUmxiV1Z1ZENCbWIzSWdjMlYwZEdsdVp5QnBibVJwWTJWekxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdkbUZ5U1c1a2FXTmxjeUF0SUdFZ2RtRnlhV0ZpYkdVZ2JtRnRaU0JtYjNJZ2RHaGxJR2x1WkdsalpYTXVYRzRnSUNBcUlFQndZWEpoYlNCcFpIZ2dMU0IwYUdVZ2FXNWtaWGdnYjJZZ2RHaGxJR2x1WkdsalpYTWdkRzhnYzJWMExpQmpZVzRnWW1VZ1lTQnVkVzFpWlhJZ2IzSWdZU0J6ZEhKcGJtY2dLRmRIVTB3Z1lIVXpNbUFnWlhod2NtVnpjMmx2YmlrdVhHNGdJQ0FxSUVCd1lYSmhiU0IyWVd4MVpTQXRJSFJvWlNCMllXeDFaU0IwYnlCelpYUXVJR05oYmlCaVpTQmhJRzUxYldKbGNpQnZjaUJoSUhOMGNtbHVaeUFvVjBkVFRDQmdkVE15WUNCbGVIQnlaWE56YVc5dUtTNWNiaUFnSUNwY2JpQWdJQ29nUUhKbGRIVnlibk1nWVNCWFIxTk1JSE4wWVhSbGJXVnVkRnh1SUNBZ0tpOWNiaUFnY21WaFpHOXViSGtnYVc1a2FXTmxjMU5sZERvZ0tIWmhja2x1WkdsalpYTTZJSE4wY21sdVp5d2dhV1I0T2lCdWRXMWlaWEo4YzNSeWFXNW5MQ0IyWVd4MVpUb2diblZ0WW1WeWZITjBjbWx1WnlrZ1BUNGdkbTlwWkR0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVjBkVFRDQmpiMlJsSUc5bUlHRnVJR0IxTXpKZ0lHVjRjSEpsYzNOcGIyNGdabTl5SUdkbGRIUnBibWNnYVc1a2FXTmxjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUhaaGNrbHVaR2xqWlhNZ0xTQmhJSFpoY21saFlteGxJRzVoYldVZ1ptOXlJSFJvWlNCcGJtUnBZMlZ6TGx4dUlDQWdLaUJBY0dGeVlXMGdhV1I0SUMwZ2RHaGxJR2x1WkdWNElHOW1JSFJvWlNCcGJtUnBZMlZ6SUhSdklHZGxkQzRnWTJGdUlHSmxJR0VnYm5WdFltVnlJRzl5SUdFZ2MzUnlhVzVuSUNoWFIxTk1JR0IxTXpKZ0lHVjRjSEpsYzNOcGIyNHBMbHh1SUNBZ0tseHVJQ0FnS2lCQWNtVjBkWEp1Y3lCaGJpQmdkVE15WUNCbGVIQnlaWE56YVc5dVhHNGdJQ0FxTDF4dUlDQnlaV0ZrYjI1c2VTQnBibVJwWTJWelIyVjBPaUFvZG1GeVNXNWthV05sY3pvZ2MzUnlhVzVuTENCcFpIZzZJRzUxYldKbGNueHpkSEpwYm1jcElEMCtJSE4wY21sdVp6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1YwZFRUQ0JqYjJSbElHWnZjaUJoSUhOMFlYUmxiV1Z1ZENCbWIzSWdjMlYwZEdsdVp5QmtZWFJoSUdGMElIUm9aU0JuYVhabGJpQnBibVJwWTJWekxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdhVzVrYVdObGMwRnVaRlpoYkhWbElDMGdZVzRnWVhKeVlYa2diMllnYm5WdFltVnljeUJ2Y2lCemRISnBibWR6SUNoWFIxTk1JR0IxTXpKZ0lHVjRjSEpsYzNOcGIyNHBJSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdhVzVrYVdObGN5d2dabTlzYkc5M1pXUmNiaUFnSUNvZ0lDQWdJR0o1SUhSb1pTQjJZV3gxWlNCMGJ5QnpaWFF1SUZSb2FYTWdZWEp5WVhrZ2MyaHZkV3hrSUdoaGRtVWdaWGhoWTNSc2VTQmdjMmhoY0dVdWJHVnVaM1JvSUNzZ01XQWdaV3hsYldWdWRITXVYRzRnSUNBcUwxeHVJQ0J5WldGa2IyNXNlU0J6WlhRNklDZ3VMaTVwYm1ScFkyVnpRVzVrVm1Gc2RXVTZJRkpsWVdSdmJteDVRWEp5WVhrOGJuVnRZbVZ5ZkhOMGNtbHVaejRwSUQwK0lITjBjbWx1Wnp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVjBkVFRDQmpiMlJsSUdadmNpQmhJSE4wWVhSbGJXVnVkQ0JtYjNJZ2MyVjBkR2x1WnlCa1lYUmhJR0YwSUhSb1pTQm5hWFpsYmlCcGJtUnBZMlZ6SUhaaGNtbGhZbXhsTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2RtRnlTVzVrYVdObGN5QXRJR0VnZG1GeWFXRmliR1VnYm1GdFpTQm1iM0lnZEdobElHbHVaR2xqWlhNdVhHNGdJQ0FxSUVCd1lYSmhiU0IyWVd4MVpTQXRJSFJvWlNCMllXeDFaU0IwYnlCelpYUXVJSE5vYjNWc1pDQmlaU0JoSUZkSFUwd2daWGh3Y21WemMybHZiaTVjYmlBZ0lDb3ZYRzRnSUhKbFlXUnZibXg1SUhObGRFSjVTVzVrYVdObGN6b2dLSFpoY2tsdVpHbGpaWE02SUhOMGNtbHVaeXdnZG1Gc2RXVTZJSE4wY21sdVp5a2dQVDRnYzNSeWFXNW5PMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlhSMU5NSUdOdlpHVWdabTl5SUdFZ2MzUmhkR1Z0Wlc1MElHWnZjaUJ6WlhSMGFXNW5JR1JoZEdFZ1lYUWdkR2hsSUdkcGRtVnVJRzltWm5ObGRDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJRzltWm5ObGRDQXRJR0VnYm5WdFltVnlJRzl5SUdFZ2MzUnlhVzVuSUNoWFIxTk1JR0IxTXpKZ0lHVjRjSEpsYzNOcGIyNHBJSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdiMlptYzJWMExseHVJQ0FnS2lCQWNHRnlZVzBnZG1Gc2RXVWdMU0IwYUdVZ2RtRnNkV1VnZEc4Z2MyVjBMaUJ6YUc5MWJHUWdZbVVnWVNCWFIxTk1JR1Y0Y0hKbGMzTnBiMjR1WEc0Z0lDQXFMMXh1SUNCeVpXRmtiMjVzZVNCelpYUkNlVTltWm5ObGREb2dLRzltWm5ObGREb2diblZ0WW1WeWZITjBjbWx1Wnl3Z2RtRnNkV1U2SUhOMGNtbHVaeWtnUFQ0Z2MzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJYUjFOTUlHTnZaR1VnWm05eUlHRnVJR1Y0Y0hKbGMzTnBiMjRnWm05eUlHZGxkSFJwYm1jZ1pHRjBZU0JoZENCMGFHVWdaMmwyWlc0Z2FXNWthV05sY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElHbHVaR2xqWlhNZ0xTQmhiaUJoY25KaGVTQnZaaUJ1ZFcxaVpYSnpJRzl5SUhOMGNtbHVaM01nS0ZkSFUwd2dZSFV6TW1BZ1pYaHdjbVZ6YzJsdmJpa2djbVZ3Y21WelpXNTBhVzVuSUhSb1pTQnBibVJwWTJWekxseHVJQ0FnS2k5Y2JpQWdjbVZoWkc5dWJIa2daMlYwT2lBb0xpNHVhVzVrYVdObGN6b2dVbVZoWkc5dWJIbEJjbkpoZVR4dWRXMWlaWEo4YzNSeWFXNW5QaWtnUFQ0Z2MzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJYUjFOTUlHTnZaR1VnWm05eUlHRnVJR1Y0Y0hKbGMzTnBiMjRnWm05eUlHZGxkSFJwYm1jZ1pHRjBZU0JoZENCMGFHVWdaMmwyWlc0Z2FXNWthV05sY3lCMllYSnBZV0pzWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIWmhja2x1WkdsalpYTWdMU0JoSUhaaGNtbGhZbXhsSUc1aGJXVWdabTl5SUhSb1pTQnBibVJwWTJWekxseHVJQ0FnS2k5Y2JpQWdjbVZoWkc5dWJIa2daMlYwUW5sSmJtUnBZMlZ6T2lBb2RtRnlTVzVrYVdObGN6b2djM1J5YVc1bktTQTlQaUJ6ZEhKcGJtYzdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGZEhVMHdnWTI5a1pTQm1iM0lnWVc0Z1pYaHdjbVZ6YzJsdmJpQm1iM0lnWjJWMGRHbHVaeUJrWVhSaElHRjBJSFJvWlNCbmFYWmxiaUJ2Wm1aelpYUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0J2Wm1aelpYUWdMU0JoSUc1MWJXSmxjaUJ2Y2lCaElITjBjbWx1WnlBb1YwZFRUQ0JnZFRNeVlDQmxlSEJ5WlhOemFXOXVLU0J5WlhCeVpYTmxiblJwYm1jZ2RHaGxJRzltWm5ObGRDNWNiaUFnSUNvdlhHNGdJSEpsWVdSdmJteDVJR2RsZEVKNVQyWm1jMlYwT2lBb2IyWm1jMlYwT2lCdWRXMWlaWEo4YzNSeWFXNW5LU0E5UGlCemRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRzVoYldVZ2IyWWdkR2hsSUdSaGRHRWdkbUZ5YVdGaWJHVmNiaUFnSUNvdlhHNGdJSEpsWVdSdmJteDVJRzVoYldVNklITjBjbWx1Wnp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nZDJobGRHaGxjaUIwYUdVZ2FHVnNjR1Z5SUdseklHWnZjaUJoYmlCcGJuQjFkQ3dnWVc0Z2IzVjBjSFYwSUc5eUlHRnVJR2x1ZEdWeWJtRnNJSFpoY21saFlteGxMbHh1SUNBZ0tpOWNiaUFnY21WaFpHOXViSGtnZFhOaFoyVTZJQ2RwYm5CMWRDZDhKMjkxZEhCMWRDZDhKMmx1ZEdWeWJtRnNKenRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dkR2hsSUhKaGJtc2diMllnZEdobElHbHVjSFYwSUc5eUlHOTFkSEIxZEM1Y2JpQWdJQ292WEc0Z0lISmxZV1J2Ym14NUlISmhibXM2SUc1MWJXSmxjanRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dZU0J6ZEhKcGJtY2djbVZ3Y21WelpXNTBhVzVuSUhSb1pTQjJZWEpwWVdKc1pTQnVZVzFsSUdadmNpQjBhR1VnYzJoaGNHVWdiMllnZEdobElHbHVjSFYwSUc5eUlHOTFkSEIxZEM1Y2JpQWdJQ292WEc0Z0lISmxZV1J2Ym14NUlITm9ZWEJsT2lCemRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJR0VnYzNSeWFXNW5JSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdkbUZ5YVdGaWJHVWdibUZ0WlNCbWIzSWdkR2hsSUhOMGNtbGtaWE1nYjJZZ2RHaGxJR2x1Y0hWMElHOXlJRzkxZEhCMWRDNWNiaUFnSUNvdlhHNGdJSEpsWVdSdmJteDVJSE4wY21sa1pYTTZJSE4wY21sdVp6dGNibjFjYmx4dVkyOXVjM1FnWjJWMFYyZHpiRTFoY0hCbFpGUjVjR1VnUFNBb2RIbHdaVG9nYm5WdFltVnlMQ0JqYjIxd2IyNWxiblJ6T2lBeGZESjhNM3cwS1RvZ2MzUnlhVzVuZkZ0emRISnBibWNzSUhOMGNtbHVaMTBnUFQ0Z2UxeHVJQ0JwWmlBb1kyOXRjRzl1Wlc1MGN5QTlQVDBnTXlrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduZG1Wak15Qm9ZWE1nYzJGdFpTQmhiR2xuYm0xbGJuUWdZWE1nZG1Wak5Dd2dkWE5sSUhabFl6UWdhVzV6ZEdWaFpDY3BPMXh1SUNCOVhHNWNiaUFnTHk4Z2NtVjBkWEp1SUhSNWNHVWdhWE1nV3lCemRHOXlZV2RsSUhSNWNHVXNJSEoxYm5ScGJXVWdkSGx3WlNCZElHOXlJR0VnYzJsdVoyeGxJSE4wY21sdVp5Qm1iM0lnWW05MGFGeHVJQ0J6ZDJsMFkyZ2dLSFI1Y0dVcElIdGNiaUFnSUNCallYTmxJRVJoZEdGVWVYQmxMbVpzYjJGME1UWTZYRzRnSUNBZ0lDQnlaWFIxY200Z1kyOXRjRzl1Wlc1MGN5QStJREVnUHlCZ2RtVmpKSHRqYjIxd2IyNWxiblJ6ZlR4bU1UWStZQ0E2SUNkbU1UWW5PMXh1SUNBZ0lHTmhjMlVnUkdGMFlWUjVjR1V1Wm14dllYUTZYRzRnSUNBZ0lDQnlaWFIxY200Z1kyOXRjRzl1Wlc1MGN5QStJREVnUHlCZ2RtVmpKSHRqYjIxd2IyNWxiblJ6ZlR4bU16SStZQ0E2SUNkbU16SW5PMXh1SUNBZ0lHTmhjMlVnUkdGMFlWUjVjR1V1YVc1ME16STZYRzRnSUNBZ0lDQnlaWFIxY200Z1kyOXRjRzl1Wlc1MGN5QStJREVnUHlCZ2RtVmpKSHRqYjIxd2IyNWxiblJ6ZlR4cE16SStZQ0E2SUNkcE16SW5PMXh1SUNBZ0lHTmhjMlVnUkdGMFlWUjVjR1V1ZFdsdWRETXlPbHh1SUNBZ0lDQWdjbVYwZFhKdUlHTnZiWEJ2Ym1WdWRITWdQaUF4SUQ4Z1lIWmxZeVI3WTI5dGNHOXVaVzUwYzMwOGRUTXlQbUFnT2lBbmRUTXlKenRjYmlBZ0lDQmpZWE5sSUVSaGRHRlVlWEJsTG1sdWREWTBPbHh1SUNBZ0lDQWdhV1lnS0dOdmJYQnZibVZ1ZEhNZ1BpQXhLU0I3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduWTNWeWNtVnVkR3g1SUc1dmRDQnpkWEJ3YjNKMFpXUWdkbVZqV0NCdlppQjFhVzUwTmpRZ2VXVjBKeWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdXeWQyWldNeVBIVXpNajRuTENBbmFUTXlKMTA3WEc0Z0lDQWdZMkZ6WlNCRVlYUmhWSGx3WlM1MWFXNTBOalE2WEc0Z0lDQWdJQ0JwWmlBb1kyOXRjRzl1Wlc1MGN5QStJREVwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkamRYSnlaVzUwYkhrZ2JtOTBJSE4xY0hCdmNuUmxaQ0IyWldOWUlHOW1JSFZwYm5RMk5DQjVaWFFuS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUJiSjNabFl6SThkVE15UGljc0lDZDFNekluWFR0Y2JpQWdJQ0JqWVhObElFUmhkR0ZVZVhCbExtSnZiMnc2WEc0Z0lDQWdJQ0JwWmlBb1kyOXRjRzl1Wlc1MGN5QWhQVDBnTkNrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oySnZiMndnYlhWemRDQmlaU0IyWldNMEp5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnlaWFIxY200Z1d5ZDFNekluTENBbmRtVmpORHhpYjI5c1BpZGRPMXh1WEc0Z0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1ZXNXJibTkzYmlCa1lYUmhJSFI1Y0dVNklDUjdkSGx3WlgxZ0tUdGNiaUFnZlZ4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElIUmxibk52Y2xSNWNHVlViMWR6WjJ4VGRHOXlZV2RsVkhsd1pTQTlJQ2gwZVhCbE9pQkVZWFJoVkhsd1pTd2dZMjl0Y0c5dVpXNTBjem9nTVh3eWZETjhOQ0E5SURFcElEMCtJSHRjYmlBZ1kyOXVjM1FnYldGd2NHVmtWSGx3WlNBOUlHZGxkRmRuYzJ4TllYQndaV1JVZVhCbEtIUjVjR1VzSUdOdmJYQnZibVZ1ZEhNcE8xeHVJQ0J5WlhSMWNtNGdkSGx3Wlc5bUlHMWhjSEJsWkZSNWNHVWdQVDA5SUNkemRISnBibWNuSUQ4Z2JXRndjR1ZrVkhsd1pTQTZJRzFoY0hCbFpGUjVjR1ZiTUYwN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdkR1Z1YzI5eVZIbHdaVlJ2VjNObmJGWmhiSFZsVkhsd1pTQTlJQ2gwZVhCbE9pQkVZWFJoVkhsd1pTd2dZMjl0Y0c5dVpXNTBjem9nTVh3eWZETjhOQ0E5SURFcElEMCtJSHRjYmlBZ1kyOXVjM1FnYldGd2NHVmtWSGx3WlNBOUlHZGxkRmRuYzJ4TllYQndaV1JVZVhCbEtIUjVjR1VzSUdOdmJYQnZibVZ1ZEhNcE8xeHVJQ0J5WlhSMWNtNGdkSGx3Wlc5bUlHMWhjSEJsWkZSNWNHVWdQVDA5SUNkemRISnBibWNuSUQ4Z2JXRndjR1ZrVkhsd1pTQTZJRzFoY0hCbFpGUjVjR1ZiTVYwN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdZM0psWVhSbFZHVnVjMjl5VTJoaGNHVldZWEpwWVdKc1pYTWdQU0FvTGk0dVpHbHRjem9nVW1WaFpHOXViSGxCY25KaGVUeHlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhUNHBPaUJRY205bmNtRnRWVzVwWm05eWJWdGRJRDArSUh0Y2JpQWdZMjl1YzNRZ2NISnZaM0poYlZWdWFXWnZjbTF6T2lCUWNtOW5jbUZ0Vlc1cFptOXliVnRkSUQwZ1cxMDdYRzRnSUdScGJYTXVabTl5UldGamFDaGthVzBnUFQ0Z2UxeHVJQ0FnSUdsbUlDaGthVzB1YkdWdVozUm9JQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNdWNIVnphQ2hjYmlBZ0lDQWdJQ0FnSUNCN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQmthVzE5TENCN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQlRhR0Z3WlZWMGFXd3VZMjl0Y0hWMFpWTjBjbWxrWlhNb1pHbHRLWDBwTzF4dUlDQWdJSDFjYmlBZ2ZTazdYRzRnSUhKbGRIVnliaUJ3Y205bmNtRnRWVzVwWm05eWJYTTdYRzU5TzF4dVhHNHZLaXBjYmlBcUlFRWdhR1ZzY0dWeUlHWjFibU4wYVc5dUlIUnZJR2RsZENCdFlYaHBiWFZ0SUhabFkzUnZjaUJ6YVhwbElHWnZjaUJ6Y0dWamFXWnBaV1FnWkdGMFlTQnNaVzVuZEdoY2JpQXFJRUJ3WVhKaGJTQnphWHBsWEc0Z0tpOWNibVY0Y0c5eWRDQmpiMjV6ZENCblpYUk5ZWGhEYjIxd2IyNWxiblJ6SUQwZ0tITnBlbVU2SUc1MWJXSmxjaWtnUFQ0Z2UxeHVJQ0F2THlCM1pTQmpZVzV1YjNRZ2RYTmxJSFpsWXpNZ2RIbHdaU0J6YVc1alpTQnBkQ0JvWVhNZ1lXeHBaMjV0Wlc1MElHOW1JREUySUdKNWRHVnpYRzRnSUdsbUlDaHphWHBsSUNVZ05DQTlQVDBnTUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUEwTzF4dUlDQjlJR1ZzYzJVZ2FXWWdLSE5wZW1VZ0pTQXlJRDA5UFNBd0tTQjdYRzRnSUNBZ2NtVjBkWEp1SURJN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z01UdGNibjA3WEc1Y2JpOHFLbHh1SUNvZ1FTQm9aV3h3WlhJZ1puVnVZM1JwYjI0Z2RHaGhkQ0JwYm1sMGFXRnNhWHBsY3lCMllYSnBZV0pzWlNCaGN5QmhJSE5qWVd4aGNpQnZjaUIyWldOMGIzSXVJR1V1Wnk0Z1pqTXlLREFwSUc5eUlIWmxZelJtS0RBc01Dd3dMREFwWEc0Z0tpQkFjR0Z5WVcwZ1pHRjBZVlI1Y0dWY2JpQXFJRUJ3WVhKaGJTQmpiMjF3YjI1bGJuUnpYRzRnS2lCQWNHRnlZVzBnZG1Gc2RXVmNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJR1pwYkd4V1pXTjBiM0lnUFNBb1pHRjBZVlI1Y0dVZ1BTQW5aak15Snl3Z1kyOXRjRzl1Wlc1MGN6ODZJRzUxYldKbGNpd2dkbUZzZFdVZ1BTQW5NQ2NwSUQwK0lIdGNiaUFnYVdZZ0tDRmpiMjF3YjI1bGJuUnpJSHg4SUdOdmJYQnZibVZ1ZEhNZ1BUMDlJREVwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZQ1I3WkdGMFlWUjVjR1Y5S0NSN2RtRnNkV1Y5S1dBN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z1lIWmxZeVI3WTI5dGNHOXVaVzUwYzMwOEpIdGtZWFJoVkhsd1pYMCtLQ1I3ZG1Gc2RXVjlLV0E3WEc1OU8xeHVYRzR2S2lwY2JpQXFJRUVnYUdWc2NHVnlJR1oxYm1OMGFXOXVJSFJvWVhRZ1kyRnpkSE1nZG1Gc2RXVWdiM0lnZG1WamRHOXlJSFJ2SUdZek1seHVJQ29nUUhCaGNtRnRJR1JoZEdGVWVYQmxYRzRnS2lCQWNHRnlZVzBnWTI5dGNHOXVaVzUwYzF4dUlDb2dRSEJoY21GdElIWmhiSFZsWEc0Z0tpOWNibVY0Y0c5eWRDQmpiMjV6ZENCallYTjBWRzlHTXpJZ1BTQW9aR0YwWVZSNWNHVTZJSE4wY21sdVp5d2dZMjl0Y0c5dVpXNTBjem9nYm5WdFltVnlMQ0IyWVd4MVpUb2djM1J5YVc1bktTQTlQaUI3WEc0Z0lHbG1JQ2hrWVhSaFZIbHdaU0E5UFQwZ0oyWXpNaWNwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkbUZzZFdVN1hHNGdJSDFjYmlBZ2FXWWdLR052YlhCdmJtVnVkSE1nUFQwOUlERXBJSHRjYmlBZ0lDQnlaWFIxY200Z1lHWXpNaWdrZTNaaGJIVmxmU2xnTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUdCMlpXTWtlMk52YlhCdmJtVnVkSE45UEdZek1qNG9KSHQyWVd4MVpYMHBZRHRjYm4wN1hHNWNiaThxS2x4dUlDb2dRU0JvWld4d1pYSWdablZ1WTNScGIyNGdkR2hoZENCeVpYUjFjbTV6SUhOallXeGhjaUJ2Y2lCemRXMXpJR0ZzYkNCamIyMXdiMjVsYm5SeklHOW1JR0VnZG1WamRHOXlYRzRnS2lCQWNHRnlZVzBnYm1GdFpWeHVJQ29nUUhCaGNtRnRJR052YlhCdmJtVnVkSE5jYmlBcUwxeHVaWGh3YjNKMElHTnZibk4wSUhOMWJWWmxZM1J2Y2lBOUlDaHVZVzFsT2lCemRISnBibWNzSUdOdmJYQnZibVZ1ZEhNNklHNTFiV0psY2lrZ1BUNGdlMXh1SUNCcFppQW9ZMjl0Y0c5dVpXNTBjeUE5UFQwZ05Da2dlMXh1SUNBZ0lISmxkSFZ5YmlCZ0tDUjdibUZ0WlgwdWVDQXJJQ1I3Ym1GdFpYMHVlU0FySUNSN2JtRnRaWDB1ZWlBcklDUjdibUZ0WlgwdWR5bGdPMXh1SUNCOUlHVnNjMlVnYVdZZ0tHTnZiWEJ2Ym1WdWRITWdQVDA5SURJcElIdGNiaUFnSUNCeVpYUjFjbTRnWUNna2UyNWhiV1Y5TG5nZ0t5QWtlMjVoYldWOUxua3BZRHRjYmlBZ2ZTQmxiSE5sSUdsbUlDaGpiMjF3YjI1bGJuUnpJRDA5UFNBektTQjdYRzRnSUNBZ2NtVjBkWEp1SUdBb0pIdHVZVzFsZlM1NElDc2dKSHR1WVcxbGZTNTVJQ3NnSkh0dVlXMWxmUzU2S1dBN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2JtRnRaVHRjYm4wN1hHNWNiaThxS2x4dUlDb2dRU0JvWld4d1pYSWdablZ1WTNScGIyNGdkR2hoZENCeVpYUjFjbTV6SUhaaGNtbGhZbXhsSUdWc1pXMWxiblFnWVhRZ2FXNWtaWGd1WEc0Z0tpQkFjR0Z5WVcwZ2JtRnRaU0F0SUhSb1pTQnVZVzFsSUc5bUlIWmhjbWxoWW14bExseHVJQ29nUUhCaGNtRnRJR2x1WkdWNElDMGdkR2hsSUdsdVpHVjRJRzltSUhaaGNtbGhZbXhsSUdWc1pXMWxiblF1WEc0Z0tpQkFjR0Z5WVcwZ2JHVnVaM1JvSUMwZ2RHaGxJR3hsYm1kMGFDQnZaaUIyWVhKcFlXSnNaUzVjYmlBcUlFQndZWEpoYlNCMGVYQmxJQzBnZEdobElIUjVjR1VnYjJZZ2RtRnlhV0ZpYkdVc0lHOXdkR2x2Ym1Gc0xseHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdaMlYwUld4bGJXVnVkRUYwSUQxY2JpQWdJQ0FvYm1GdFpUb2djM1J5YVc1bkxDQnBibVJsZURvZ2JuVnRZbVZ5ZkhOMGNtbHVaeXdnYkdWdVozUm9PaUJ1ZFcxaVpYSXNJSFI1Y0dVL09pQlZibWxtYjNKdFJHRjBZVVZzWlcxbGJuUlVlWEJsS1RvZ2MzUnlhVzVuSUQwK0lIdGNiaUFnSUNBZ0lHbG1JQ2h1WVcxbExuTjBZWEowYzFkcGRHZ29KM1Z1YVdadmNtMXpMaWNwSUNZbUlHeGxibWQwYUNBK0lEUXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlBb2FXNWtaWGdwSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaDBlWEJsSUQwOVBTQW5aakUySnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0FrZTI1aGJXVjlXeWdrZTJsdVpHVjRmU2tnTHlBNFhWc29KSHRwYm1SbGVIMHBJQ1VnT0NBdklEUmRXeWdrZTJsdVpHVjRmU2tnSlNBNElDVWdORjFnTzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZQ1I3Ym1GdFpYMWJLQ1I3YVc1a1pYaDlLU0F2SURSZFd5Z2tlMmx1WkdWNGZTa2dKU0EwWFdBN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaDBlWEJsSUQwOVBTQW5aakUySnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0FrZTI1aGJXVjlXeVI3VFdGMGFDNW1iRzl2Y2locGJtUmxlQ0F2SURncGZWMWJKSHROWVhSb0xtWnNiMjl5S0dsdVpHVjRJQ1VnT0NBdklEUXBmVjFiSkh0cGJtUmxlQ0FsSURnZ0pTQTBmVjFnTzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZQ1I3Ym1GdFpYMWJKSHROWVhSb0xtWnNiMjl5S0dsdVpHVjRJQzhnTkNsOVhWc2tlMmx1WkdWNElDVWdOSDFkWUR0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnNaVzVuZEdnZ1BpQXhJRDhnWUNSN2JtRnRaWDFiSkh0cGJtUmxlSDFkWUNBNklHNWhiV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVHRjYmx4dUx5b3FYRzRnS2lCQklHaGxiSEJsY2lCbWRXNWpkR2x2YmlCMGJ5Qm5aWFFnWVNCSmJtUnBZMlZ6U0dWc2NHVnlJR1p2Y2lCaElHZHBkbVZ1SUdsdWNIVjBJRzl5SUc5MWRIQjFkQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdibUZ0WlNBdElIUm9aU0J1WVcxbElHOW1JSFJvWlNCcGJuQjFkQ0J2Y2lCdmRYUndkWFF1WEc0Z0tpQkFjR0Z5WVcwZ2RHVnVjMjl5Vkhsd1pTQXRJSFJvWlNCMFpXNXpiM0lnZEhsd1pTQnZaaUIwYUdVZ2FXNXdkWFFnYjNJZ2IzVjBjSFYwTGx4dUlDb2dRSEJoY21GdElITm9ZWEJsVDNKU1lXNXJJQzBnZEdobElIUmxibk52Y2lCemFHRndaU0J2Y2lCMGFHVWdjbUZ1YXlCdlppQjBhR1VnYVc1d2RYUWdiM0lnYjNWMGNIVjBMbHh1SUNvZ1FIQmhjbUZ0SUhWellXZGxJQzBnZEdobElIVnpZV2RsSUc5bUlIUm9aU0JwYm1ScFkyVnpJR2hsYkhCbGNpNWNiaUFxSUVCd1lYSmhiU0JqYjIxd2IyNWxiblJ6SUMwZ2FXNWthV05oZEdWeklIUm9aU0J1ZFcxaVpYSWdiMllnWTI5dGNHOXVaVzUwY3lCdlppQmxZV05vSUdWc1pXMWxiblF1SURFZ1ptOXlJSE5qWVd4aGNpd2dNaUJtYjNJZ2RtVmpNaXdnTXlCbWIzSWdkbVZqTXl3Z05DQm1iM0pjYmlBcUlDQWdJSFpsWXpRdVhHNGdLaTljYm1OdmJuTjBJR055WldGMFpVbHVaR2xqWlhOSVpXeHdaWElnUFZ4dUlDQWdJQ2h1WVcxbE9pQnpkSEpwYm1jc0lIUmxibk52Y2xSNWNHVTZJRzUxYldKbGNpd2djMmhoY0dWUGNsSmhibXM2SUc1MWJXSmxjbnh5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnZFhOaFoyVTZJRWx1WkdsalpYTklaV3h3WlhKYkozVnpZV2RsSjEwc1hHNGdJQ0FnSUdOdmJYQnZibVZ1ZEhNNklERjhNbnd6ZkRRcE9pQkpibVJwWTJWelNHVnNjR1Z5SUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUhWelpWVnVhV1p2Y20wZ1BTQjBlWEJsYjJZZ2MyaGhjR1ZQY2xKaGJtc2dQVDA5SUNkdWRXMWlaWEluTzF4dUlDQWdJQ0FnWTI5dWMzUWdjbUZ1YXlBOUlIVnpaVlZ1YVdadmNtMGdQeUJ6YUdGd1pVOXlVbUZ1YXlBNklITm9ZWEJsVDNKU1lXNXJMbXhsYm1kMGFEdGNiaUFnSUNBZ0lHTnZibk4wSUhKaGJtdEpaR1Z1ZEdsMGVTQTlJRnN1TGk1dVpYY2dRWEp5WVhrb2NtRnVheWt1YTJWNWN5Z3BYVHRjYmlBZ0lDQWdJR052Ym5OMElHbHVaR2xqWlhOVWVYQmxJRDBnY21GdWF5QThJRElnUHlBbmRUTXlKeUE2SUhKaGJtc2dQRDBnTkNBL0lHQjJaV01rZTNKaGJtdDlQSFV6TWo1Z0lEb2dZR0Z5Y21GNVBIVXpNaXdnSkh0eVlXNXJmVDVnTzF4dUlDQWdJQ0FnWTI5dWMzUWdiV0Z3Y0dWa1ZIbHdaU0E5SUdkbGRGZG5jMnhOWVhCd1pXUlVlWEJsS0hSbGJuTnZjbFI1Y0dVc0lHTnZiWEJ2Ym1WdWRITXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ2RtRnNkV1ZVZVhCbElEMGdkSGx3Wlc5bUlHMWhjSEJsWkZSNWNHVWdQVDA5SUNkemRISnBibWNuSUQ4Z2JXRndjR1ZrVkhsd1pTQTZJRzFoY0hCbFpGUjVjR1ZiTVYwN1hHNGdJQ0FnSUNCamIyNXpkQ0J6ZEc5eVlXZGxWSGx3WlNBOUlIUjVjR1Z2WmlCdFlYQndaV1JVZVhCbElEMDlQU0FuYzNSeWFXNW5KeUEvSUcxaGNIQmxaRlI1Y0dVZ09pQnRZWEJ3WldSVWVYQmxXekJkTzF4dUlDQWdJQ0FnWTI5dWMzUWdkSGx3WlNBOUlIdHBibVJwWTJWek9pQnBibVJwWTJWelZIbHdaU3dnZG1Gc2RXVTZJSFpoYkhWbFZIbHdaU3dnYzNSdmNtRm5aVG9nYzNSdmNtRm5aVlI1Y0dVc0lIUmxibk52Y2pvZ2RHVnVjMjl5Vkhsd1pYMDdYRzVjYmlBZ0lDQWdJR052Ym5OMElHNXZjbTFoYkdsNlpVUnBiU0E5SUNoa2FXMDZJRzUxYldKbGNueHpkSEpwYm1jcE9pQnpkSEpwYm1jZ1BUNGdkSGx3Wlc5bUlHUnBiU0E5UFQwZ0ozTjBjbWx1WnljZ1B5QmthVzBnT2lCZ0pIdGthVzE5ZFdBN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdsdGNHeGxiV1Z1ZEdGMGFXOXVWWE5sWkNBOUlIdGNiaUFnSUNBZ0lDQWdiMlptYzJWMFZHOUpibVJwWTJWek9pQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ2FXNWthV05sYzFSdlQyWm1jMlYwT2lCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnWW5KdllXUmpZWE4wWldSSmJtUnBZMlZ6Vkc5UFptWnpaWFE2SUdaaGJITmxMRnh1SUNBZ0lDQWdJQ0J6WlhRNklHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNCelpYUkNlVWx1WkdsalpYTTZJR1poYkhObExGeHVJQ0FnSUNBZ0lDQm5aWFE2SUdaaGJITmxMRnh1SUNBZ0lDQWdJQ0JuWlhSQ2VVbHVaR2xqWlhNNklHWmhiSE5sTEZ4dUlDQWdJQ0FnZlR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnZFc1cFptOXliVkJ5WldacGVDQTlJSFZ6WlZWdWFXWnZjbTBnUHlBbmRXNXBabTl5YlhNdUp5QTZJQ2NuTzF4dUlDQWdJQ0FnWTI5dWMzUWdjMmhoY0dVZ1BTQmdKSHQxYm1sbWIzSnRVSEpsWm1sNGZTUjdibUZ0WlgxZmMyaGhjR1ZnTzF4dUlDQWdJQ0FnWTI5dWMzUWdjM1J5YVdSbGN5QTlJR0FrZTNWdWFXWnZjbTFRY21WbWFYaDlKSHR1WVcxbGZWOXpkSEpwWkdWellEdGNibHh1SUNBZ0lDQWdiR1YwSUc4eWFWTnVhWEJ3WlhRZ1BTQW5KenRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnY21GdWF5QXRJREU3SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0J2TW1sVGJtbHdjR1YwSUNzOUlHQmNiaUFnSUNCc1pYUWdaR2x0Skh0cGZTQTlJR04xY25KbGJuUWdMeUFrZTJkbGRFVnNaVzFsYm5SQmRDaHpkSEpwWkdWekxDQnBMQ0J5WVc1cktYMDdYRzRnSUNBZ2JHVjBJSEpsYzNRa2UybDlJRDBnWTNWeWNtVnVkQ0FsSUNSN1oyVjBSV3hsYldWdWRFRjBLSE4wY21sa1pYTXNJR2tzSUhKaGJtc3BmVHRjYmlBZ0lDQnBibVJwWTJWeld5UjdhWDFkSUQwZ1pHbHRKSHRwZlR0Y2JpQWdJQ0JqZFhKeVpXNTBJRDBnY21WemRDUjdhWDA3WEc0Z0lDQWdZRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJRzh5YVZOdWFYQndaWFFnS3owZ1lHbHVaR2xqWlhOYkpIdHlZVzVySUMwZ01YMWRJRDBnWTNWeWNtVnVkRHRnTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0J2Wm1aelpYUlViMGx1WkdsalpYTkpiWEJzWlcxbGJuUmhkR2x2YmlBOUlISmhibXNnUENBeUlEOGdKeWNnT2lCZ1hHNGdJR1p1SUc4eWFWOGtlMjVoYldWOUtHOW1abk5sZERvZ2RUTXlLU0F0UGlBa2UzUjVjR1V1YVc1a2FXTmxjMzBnZTF4dUlDQWdJSFpoY2lCcGJtUnBZMlZ6T2lBa2UzUjVjR1V1YVc1a2FXTmxjMzA3WEc0Z0lDQWdkbUZ5SUdOMWNuSmxiblFnUFNCdlptWnpaWFE3WEc0Z0lDQWdKSHR2TW1sVGJtbHdjR1YwZlZ4dUlDQWdJSEpsZEhWeWJpQnBibVJwWTJWek8xeHVJQ0I5WUR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnYjJabWMyVjBWRzlKYm1ScFkyVnpJRDBnS0haaGNrOW1abk5sZERvZ2MzUnlhVzVuS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR2x0Y0d4bGJXVnVkR0YwYVc5dVZYTmxaQzV2Wm1aelpYUlViMGx1WkdsalpYTWdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtRnVheUE4SURJZ1B5QjJZWEpQWm1aelpYUWdPaUJnYnpKcFh5UjdibUZ0Wlgwb0pIdDJZWEpQWm1aelpYUjlLV0E3WEc0Z0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0J2Wm1aelpYUnpPaUJ6ZEhKcGJtZGJYU0E5SUZ0ZE8xeHVJQ0FnSUNBZ2FXWWdLSEpoYm1zZ1BqMGdNaWtnZTF4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdjbUZ1YXlBdElERTdJR2tnUGowZ01Ec2dhUzB0S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiMlptYzJWMGN5NXdkWE5vS0dBa2UyZGxkRVZzWlcxbGJuUkJkQ2h6ZEhKcFpHVnpMQ0JwTENCeVlXNXJLWDBnS2lBb2FXNWthV05sYzFza2UybDlYU2xnS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQmpiMjV6ZENCcGJtUnBZMlZ6Vkc5UFptWnpaWFJKYlhCc1pXMWxiblJoZEdsdmJpQTlJSEpoYm1zZ1BDQXlJRDhnSnljZ09pQmdYRzRnSUdadUlHa3liMThrZTI1aGJXVjlLR2x1WkdsalpYTTZJQ1I3ZEhsd1pTNXBibVJwWTJWemZTa2dMVDRnZFRNeUlIdGNiaUFnSUNCeVpYUjFjbTRnSkh0dlptWnpaWFJ6TG1wdmFXNG9KeXNuS1gwN1hHNGdJSDFnTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0JwYm1ScFkyVnpWRzlQWm1aelpYUWdQU0FvZG1GeVNXNWthV05sY3pvZ2MzUnlhVzVuS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR2x0Y0d4bGJXVnVkR0YwYVc5dVZYTmxaQzVwYm1ScFkyVnpWRzlQWm1aelpYUWdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtRnVheUE4SURJZ1B5QjJZWEpKYm1ScFkyVnpJRG9nWUdreWIxOGtlMjVoYldWOUtDUjdkbUZ5U1c1a2FXTmxjMzBwWUR0Y2JpQWdJQ0FnSUgwN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdsdVpHbGpaWE1nUFNBb0xpNHVhVzVwZERvZ1VtVmhaRzl1YkhsQmNuSmhlVHh1ZFcxaVpYSjhjM1J5YVc1blBpa2dQVDVjYmlBZ0lDQWdJQ0FnSUNCeVlXNXJJRDA5UFNBd0lEOGdKekIxSnlBNklHQWtlM1I1Y0dVdWFXNWthV05sYzMwb0pIdHBibWwwTG0xaGNDaHViM0p0WVd4cGVtVkVhVzBwTG1wdmFXNG9KeXduS1gwcFlEdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2FXNWthV05sYzBkbGRDQTlJQ2gyWVhKSmJtUnBZMlZ6T2lCemRISnBibWNzSUdsa2VEb2diblZ0WW1WeWZITjBjbWx1WnlrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb2NtRnVheUE4SURJcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZQ1I3ZG1GeVNXNWthV05sYzMxZ08xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdKSHRuWlhSRmJHVnRaVzUwUVhRb2RtRnlTVzVrYVdObGN5d2dhV1I0TENCeVlXNXJLWDFnTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOU8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCcGJtUnBZMlZ6VTJWMElEMGdLSFpoY2tsdVpHbGpaWE02SUhOMGNtbHVaeXdnYVdSNE9pQnVkVzFpWlhKOGMzUnlhVzVuTENCMllXeDFaVG9nYzNSeWFXNW5LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5WVc1cklEd2dNaWtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ0pIdDJZWEpKYm1ScFkyVnpmVDBrZTNaaGJIVmxmVHRnTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ0pIdG5aWFJGYkdWdFpXNTBRWFFvZG1GeVNXNWthV05sY3l3Z2FXUjRMQ0J5WVc1cktYMDlKSHQyWVd4MVpYMDdZRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnWW5KdllXUmpZWE4wWldSSmJtUnBZMlZ6Vkc5UFptWnpaWFJKYlhCc1pXMWxiblJoZEdsdmJqb2dlMXRyWlhrNklITjBjbWx1WjEwNklITjBjbWx1WjMwZ1BTQjdmVHRjYmlBZ0lDQWdJR052Ym5OMElHSnliMkZrWTJGemRHVmtTVzVrYVdObGMxUnZUMlptYzJWMElEMGdLSFpoY2tsdVpHbGpaWE02SUhOMGNtbHVaeXdnYjNWMGNIVjBPaUJKYm1ScFkyVnpTR1ZzY0dWeUtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsdGNHeGxiV1Z1ZEdGMGFXOXVWWE5sWkM1aWNtOWhaR05oYzNSbFpFbHVaR2xqWlhOVWIwOW1abk5sZENBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2x0Y0d4TFpYa2dQU0JnSkh0dmRYUndkWFF1Ym1GdFpYMWljbTloWkdOaGMzUmxaRWx1WkdsalpYTlVieVI3Ym1GdFpYMVBabVp6WlhSZ08xeHVJQ0FnSUNBZ0lDQnBaaUFvYVcxd2JFdGxlU0JwYmlCaWNtOWhaR05oYzNSbFpFbHVaR2xqWlhOVWIwOW1abk5sZEVsdGNHeGxiV1Z1ZEdGMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdBa2UybHRjR3hMWlhsOUtDUjdkbUZ5U1c1a2FXTmxjMzBwWUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdlptWnpaWFJ6SUQwZ1cxMDdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCeVlXNXJJQzBnTVRzZ2FTQStQU0F3T3lCcExTMHBJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JwWkhnZ1BTQnZkWFJ3ZFhRdWFXNWthV05sYzBkbGRDZ25iM1YwY0hWMFNXNWthV05sY3ljc0lHa2dLeUJ2ZFhSd2RYUXVjbUZ1YXlBdElISmhibXNwTzF4dUlDQWdJQ0FnSUNBZ0lHOW1abk5sZEhNdWNIVnphQ2hnSkh0cGJtUnBZMlZ6UjJWMEtITjBjbWxrWlhNc0lHa3BmU0FxSUNna2UybGtlSDBnSlNBa2UybHVaR2xqWlhOSFpYUW9jMmhoY0dVc0lHa3BmU2xnS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmljbTloWkdOaGMzUmxaRWx1WkdsalpYTlViMDltWm5ObGRFbHRjR3hsYldWdWRHRjBhVzl1VzJsdGNHeExaWGxkSUQxY2JpQWdJQ0FnSUNBZ0lDQWdJR0JtYmlBa2UybHRjR3hMWlhsOUtHOTFkSEIxZEVsdVpHbGpaWE02SUNSN2IzVjBjSFYwTG5SNWNHVXVhVzVrYVdObGMzMHBJQzArSUhVek1pQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNSN2IyWm1jMlYwY3k1c1pXNW5kR2dnUGlBd0lEOGdiMlptYzJWMGN5NXFiMmx1S0Njckp5a2dPaUFuTUhVbmZUdGNiaUFnSUNBZ0lDQWdJQ0FnZldBN1hHNWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHQWtlMmx0Y0d4TFpYbDlLQ1I3ZG1GeVNXNWthV05sYzMwcFlEdGNiaUFnSUNBZ0lIMDdYRzVjYmlBZ0lDQWdJR052Ym5OMElITmxkRUo1VDJabWMyVjBJRDBnS0c5bVpuTmxkRG9nYm5WdFltVnlmSE4wY21sdVp5d2dkbUZzZFdVNklITjBjbWx1WnlrZ1BUNGdLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVXVjM1J2Y21GblpTQTlQVDBnZEhsd1pTNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdKSHR1WVcxbGZWc2tlMjltWm5ObGRIMWRQU1I3ZG1Gc2RXVjlPMkE3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaUzV6ZEc5eVlXZGxJRDA5UFNBbmRtVmpNangxTXpJK0p5QW1KaUIwZVhCbExuWmhiSFZsSUQwOVBTQW5hVE15SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUdsdWREWTBMQ0JqYjIxd2IyNWxiblJ6SUQwOVBTQXhYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0FrZTI1aGJXVjlXeVI3YjJabWMyVjBmVjA5ZG1Wak1qeDFNekkrS0hVek1pZ2tlM1poYkhWbGZTa3NJSE5sYkdWamRDZ3dkU3dnTUhoR1JrWkdSa1pHUm5Vc0lDUjdkbUZzZFdWOUlEd2dNQ2twTzJBN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3WlM1emRHOXlZV2RsSUQwOVBTQW5kbVZqTWp4MU16SStKeUFtSmlCMGVYQmxMblpoYkhWbElEMDlQU0FuZFRNeUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUM4dklIVnBiblEyTkN3Z1kyOXRjRzl1Wlc1MGN5QTlQVDBnTVZ4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ0pIdHVZVzFsZlZza2UyOW1abk5sZEgxZFBYWmxZekk4ZFRNeVBpaDFNeklvSkh0MllXeDFaWDBwTENBd2RTazdZRHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxMbk4wYjNKaFoyVWdQVDA5SUNkMU16SW5JQ1ltSUhSNWNHVXVkbUZzZFdVZ1BUMDlJQ2QyWldNMFBHSnZiMncrSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUdKdmIyd3NJR052YlhCdmJtVnVkSE1nUFQwOUlEUmNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZQ1I3Ym1GdFpYMWJKSHR2Wm1aelpYUjlYVDFrYjNRb2RtVmpORHgxTXpJK0tEQjRNU3dnTUhneE1EQXNJREI0TVRBd01EQXNJREI0TVRBd01EQXdNQ2tzSUhabFl6UThkVE15UGlna2UzWmhiSFZsZlNrcE8yQTdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0J1YjNRZ2MzVndjRzl5ZEdWa0lHTnZiV0pwYm1GMGFXOXVJRzltSUhOMGIzSmhaMlVnZEhsd1pTQWtlM1I1Y0dVdWMzUnZjbUZuWlgwZ1lXNWtJSFpoYkhWbElIUjVjR1VnSkh0MGVYQmxMblpoYkhWbGZTQjVaWFJnS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTa29LVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdaMlYwUW5sUFptWnpaWFFnUFNBb2IyWm1jMlYwT2lCdWRXMWlaWEo4YzNSeWFXNW5LU0E5UGlBb0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3WlM1emRHOXlZV2RsSUQwOVBTQjBlWEJsTG5aaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdBa2UyNWhiV1Y5V3lSN2IyWm1jMlYwZlYxZ08xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dVdWMzUnZjbUZuWlNBOVBUMGdKM1psWXpJOGRUTXlQaWNnSmlZZ2RIbHdaUzUyWVd4MVpTQTlQVDBnSjJrek1pY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QnBiblEyTkN3Z1kyOXRjRzl1Wlc1MGN5QTlQVDBnTVZ4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ2FUTXlLQ1I3Ym1GdFpYMWJKSHR2Wm1aelpYUjlYUzU0S1dBN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3WlM1emRHOXlZV2RsSUQwOVBTQW5kbVZqTWp4MU16SStKeUFtSmlCMGVYQmxMblpoYkhWbElEMDlQU0FuZFRNeUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUM4dklIVnBiblEyTkN3Z1kyOXRjRzl1Wlc1MGN5QTlQVDBnTVZ4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ2RUTXlLQ1I3Ym1GdFpYMWJKSHR2Wm1aelpYUjlYUzU0S1dBN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3WlM1emRHOXlZV2RsSUQwOVBTQW5kVE15SnlBbUppQjBlWEJsTG5aaGJIVmxJRDA5UFNBbmRtVmpORHhpYjI5c1BpY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QmliMjlzTENCamIyMXdiMjVsYm5SeklEMDlQU0EwWEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdCMlpXTTBQR0p2YjJ3K0tHSnZiMndvSkh0dVlXMWxmVnNrZTI5bVpuTmxkSDFkSUNZZ01IaEdSblVwTENCaWIyOXNLQ1I3Ym1GdFpYMWJKSHR2Wm1aelpYUjlYU0FtSURCNFJrWXdNSFVwTENCaWIyOXNLQ1I3Ym1GdFpYMWJKSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdiMlptYzJWMGZWMGdKaUF3ZUVaR01EQXdNSFVwTENCaWIyOXNLQ1I3Ym1GdFpYMWJKSHR2Wm1aelpYUjlYU0FtSURCNFJrWXdNREF3TURCMUtTbGdPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnYm05MElITjFjSEJ2Y25SbFpDQmpiMjFpYVc1aGRHbHZiaUJ2WmlCemRHOXlZV2RsSUhSNWNHVWdKSHQwZVhCbExuTjBiM0poWjJWOUlHRnVaQ0IyWVd4MVpTQjBlWEJsSUNSN2RIbHdaUzUyWVd4MVpYMGdlV1YwWUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMHBLQ2s3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR2RsZEVKNVNXNWthV05sYzBsdGNHeGxiV1Z1ZEdGMGFXOXVJRDBnY21GdWF5QThJRElnUHlBbkp5QTZJR0JjYmlBZ1ptNGdaMlYwWHlSN2JtRnRaWDFDZVVsdVpHbGpaWE1vYVc1a2FXTmxjem9nSkh0MGVYQmxMbWx1WkdsalpYTjlLU0F0UGlBa2UzWmhiSFZsVkhsd1pYMGdlMXh1SUNBZ0lISmxkSFZ5YmlBa2UyZGxkRUo1VDJabWMyVjBLR0JwTW05ZkpIdHVZVzFsZlNocGJtUnBZMlZ6S1dBcGZUdGNiaUFnZldBN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdkbGRFbHRjR3hsYldWdWRHRjBhVzl1SUQwZ2NtRnVheUE4SURJZ1B5QW5KeUE2SUNnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1oxYm1OMGFXOXVVR0Z5WVcxeklEMGdjbUZ1YTBsa1pXNTBhWFI1TG0xaGNDaHBJRDArSUdCa0pIdHBmVG9nZFRNeVlDa3VhbTlwYmlnbkxDQW5LVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaR2x0YzFCaGNtRnRjeUE5SUhKaGJtdEpaR1Z1ZEdsMGVTNXRZWEFvYVNBOVBpQmdaQ1I3YVgxZ0tTNXFiMmx1S0Njc0lDY3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZRnh1SUNCbWJpQm5aWFJmSkh0dVlXMWxmU2drZTJaMWJtTjBhVzl1VUdGeVlXMXpmU2tnTFQ0Z0pIdDJZV3gxWlZSNWNHVjlJSHRjYmlBZ0lDQnlaWFIxY200Z1oyVjBYeVI3Ym1GdFpYMUNlVWx1WkdsalpYTW9KSHRwYm1ScFkyVnpLR1JwYlhOUVlYSmhiWE1wZlNrN1hHNGdJSDFnTzF4dUlDQWdJQ0FnZlNrb0tUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ1oyVjBJRDBnS0M0dUxtbHVaR2xqWlhNNklGSmxZV1J2Ym14NVFYSnlZWGs4Ym5WdFltVnlmSE4wY21sdVp6NHBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2x1WkdsalpYTXViR1Z1WjNSb0lDRTlQU0J5WVc1cktTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JwYm1ScFkyVnpJR3hsYm1kMGFDQnRkWE4wSUdKbElDUjdjbUZ1YTMxZ0tUdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1JKYm1ScFkyVnpJRDBnYVc1a2FXTmxjeTV0WVhBb2JtOXliV0ZzYVhwbFJHbHRLUzVxYjJsdUtDY3NKeWs3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLSEpoYm1zZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1oyVjBRbmxQWm1aelpYUW9KekIxSnlrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9jbUZ1YXlBOVBUMGdNU2tnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCblpYUkNlVTltWm5ObGRDaHViM0p0WVd4cGVtVmtTVzVrYVdObGMxc3dYU2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXMXdiR1Z0Wlc1MFlYUnBiMjVWYzJWa0xtZGxkQ0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnYVcxd2JHVnRaVzUwWVhScGIyNVZjMlZrTG1kbGRFSjVTVzVrYVdObGN5QTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdhVzF3YkdWdFpXNTBZWFJwYjI1VmMyVmtMbWx1WkdsalpYTlViMDltWm5ObGRDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHQm5aWFJmSkh0dVlXMWxmU2drZTI1dmNtMWhiR2w2WldSSmJtUnBZMlZ6ZlNsZ08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQm5aWFJDZVVsdVpHbGpaWE1nUFNBb2RtRnlTVzVrYVdObGN6b2djM1J5YVc1bktTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaHlZVzVySUR3Z01pa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJuWlhSQ2VVOW1abk5sZENoMllYSkpibVJwWTJWektUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0JwYlhCc1pXMWxiblJoZEdsdmJsVnpaV1F1WjJWMFFubEpibVJwWTJWeklEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQnBiWEJzWlcxbGJuUmhkR2x2YmxWelpXUXVhVzVrYVdObGMxUnZUMlptYzJWMElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lHZGxkRjhrZTI1aGJXVjlRbmxKYm1ScFkyVnpLQ1I3ZG1GeVNXNWthV05sYzMwcFlEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdjMlYwUW5sSmJtUnBZMlZ6U1cxd2JHVnRaVzUwWVhScGIyNGdQU0J5WVc1cklEd2dNaUEvSUNjbklEb2dZRnh1SUNCbWJpQnpaWFJmSkh0dVlXMWxmVUo1U1c1a2FXTmxjeWhwYm1ScFkyVnpPaUFrZTNSNWNHVXVhVzVrYVdObGMzMHNJSFpoYkhWbE9pQWtlM1poYkhWbFZIbHdaWDBwSUh0Y2JpQWdJQ0FrZTNObGRFSjVUMlptYzJWMEtHQnBNbTlmSkh0dVlXMWxmU2hwYm1ScFkyVnpLV0FzSUNkMllXeDFaU2NwZlZ4dUlDQjlZRHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdjMlYwU1cxd2JHVnRaVzUwWVhScGIyNGdQU0J5WVc1cklEd2dNaUEvSUNjbklEb2dLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1puVnVZM1JwYjI1UVlYSmhiWE1nUFNCeVlXNXJTV1JsYm5ScGRIa3ViV0Z3S0drZ1BUNGdZR1FrZTJsOU9pQjFNekpnS1M1cWIybHVLQ2NzSUNjcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCa2FXMXpVR0Z5WVcxeklEMGdjbUZ1YTBsa1pXNTBhWFI1TG0xaGNDaHBJRDArSUdCa0pIdHBmV0FwTG1wdmFXNG9KeXdnSnlrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ1hHNGdJR1p1SUhObGRGOGtlMjVoYldWOUtDUjdablZ1WTNScGIyNVFZWEpoYlhOOUxDQjJZV3gxWlRvZ0pIdDJZV3gxWlZSNWNHVjlLU0I3WEc0Z0lDQWdjMlYwWHlSN2JtRnRaWDFDZVVsdVpHbGpaWE1vSkh0cGJtUnBZMlZ6S0dScGJYTlFZWEpoYlhNcGZTd2dkbUZzZFdVcE8xeHVJQ0I5WUR0Y2JpQWdJQ0FnSUgwcEtDazdYRzVjYmlBZ0lDQWdJR052Ym5OMElITmxkQ0E5SUNndUxpNXBibVJwWTJWelFXNWtWbUZzZFdVNklGSmxZV1J2Ym14NVFYSnlZWGs4Ym5WdFltVnlmSE4wY21sdVp6NHBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2x1WkdsalpYTkJibVJXWVd4MVpTNXNaVzVuZEdnZ0lUMDlJSEpoYm1zZ0t5QXhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCcGJtUnBZMlZ6SUd4bGJtZDBhQ0J0ZFhOMElHSmxJQ1I3Y21GdWEzMWdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCamIyNXpkQ0IyWVd4MVpTQTlJR2x1WkdsalpYTkJibVJXWVd4MVpWdHlZVzVyWFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQjJZV3gxWlNBaFBUMGdKM04wY21sdVp5Y3BJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjNaaGJIVmxJRzExYzNRZ1ltVWdjM1J5YVc1bkp5azdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrU1c1a2FXTmxjeUE5SUdsdVpHbGpaWE5CYm1SV1lXeDFaUzV6YkdsalpTZ3dMQ0J5WVc1cktTNXRZWEFvYm05eWJXRnNhWHBsUkdsdEtTNXFiMmx1S0Njc0p5azdYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tISmhibXNnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzJWMFFubFBabVp6WlhRb0p6QjFKeXdnZG1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hKaGJtc2dQVDA5SURFcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjMlYwUW5sUFptWnpaWFFvYm05eWJXRnNhWHBsWkVsdVpHbGpaWE5iTUYwc0lIWmhiSFZsS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBiWEJzWlcxbGJuUmhkR2x2YmxWelpXUXVjMlYwSUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNCcGJYQnNaVzFsYm5SaGRHbHZibFZ6WldRdWMyVjBRbmxKYm1ScFkyVnpJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0JwYlhCc1pXMWxiblJoZEdsdmJsVnpaV1F1YVc1a2FXTmxjMVJ2VDJabWMyVjBJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZSE5sZEY4a2UyNWhiV1Y5S0NSN2JtOXliV0ZzYVhwbFpFbHVaR2xqWlhOOUxDQWtlM1poYkhWbGZTbGdPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0J6WlhSQ2VVbHVaR2xqWlhNZ1BTQW9kbUZ5U1c1a2FXTmxjem9nYzNSeWFXNW5MQ0IyWVd4MVpUb2djM1J5YVc1bktTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaHlZVzVySUR3Z01pa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ6WlhSQ2VVOW1abk5sZENoMllYSkpibVJwWTJWekxDQjJZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdhVzF3YkdWdFpXNTBZWFJwYjI1VmMyVmtMbk5sZEVKNVNXNWthV05sY3lBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ2FXMXdiR1Z0Wlc1MFlYUnBiMjVWYzJWa0xtbHVaR2xqWlhOVWIwOW1abk5sZENBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdCelpYUmZKSHR1WVcxbGZVSjVTVzVrYVdObGN5Z2tlM1poY2tsdVpHbGpaWE45TENBa2UzWmhiSFZsZlNrN1lEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdhVzF3YkNBOUlDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYVcxd2JITWdQU0JiWFR0Y2JpQWdJQ0FnSUNBZ2JHVjBJRzVsWldSVGFHRndaVk4wY21sa1pYTWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdhV1lnS0dsdGNHeGxiV1Z1ZEdGMGFXOXVWWE5sWkM1dlptWnpaWFJVYjBsdVpHbGpaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBiWEJzY3k1d2RYTm9LRzltWm5ObGRGUnZTVzVrYVdObGMwbHRjR3hsYldWdWRHRjBhVzl1S1R0Y2JpQWdJQ0FnSUNBZ0lDQnVaV1ZrVTJoaGNHVlRkSEpwWkdWeklEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnBaaUFvYVcxd2JHVnRaVzUwWVhScGIyNVZjMlZrTG1sdVpHbGpaWE5VYjA5bVpuTmxkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbHRjR3h6TG5CMWMyZ29hVzVrYVdObGMxUnZUMlptYzJWMFNXMXdiR1Z0Wlc1MFlYUnBiMjRwTzF4dUlDQWdJQ0FnSUNBZ0lHNWxaV1JUYUdGd1pWTjBjbWxrWlhNZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2hwYlhCc1pXMWxiblJoZEdsdmJsVnpaV1F1WW5KdllXUmpZWE4wWldSSmJtUnBZMlZ6Vkc5UFptWnpaWFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQlBZbXBsWTNRdWRtRnNkV1Z6S0dKeWIyRmtZMkZ6ZEdWa1NXNWthV05sYzFSdlQyWm1jMlYwU1cxd2JHVnRaVzUwWVhScGIyNHBMbVp2Y2tWaFkyZ29hVzF3YkNBOVBpQnBiWEJzY3k1d2RYTm9LR2x0Y0d3cEtUdGNiaUFnSUNBZ0lDQWdJQ0J1WldWa1UyaGhjR1ZUZEhKcFpHVnpJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JwWmlBb2FXMXdiR1Z0Wlc1MFlYUnBiMjVWYzJWa0xuTmxkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbHRjR3h6TG5CMWMyZ29jMlYwU1cxd2JHVnRaVzUwWVhScGIyNHBPMXh1SUNBZ0lDQWdJQ0FnSUc1bFpXUlRhR0Z3WlZOMGNtbGtaWE1nUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDaHBiWEJzWlcxbGJuUmhkR2x2YmxWelpXUXVjMlYwUW5sSmJtUnBZMlZ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdhVzF3YkhNdWNIVnphQ2h6WlhSQ2VVbHVaR2xqWlhOSmJYQnNaVzFsYm5SaGRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUNBZ2JtVmxaRk5vWVhCbFUzUnlhV1JsY3lBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLR2x0Y0d4bGJXVnVkR0YwYVc5dVZYTmxaQzVuWlhRcElIdGNiaUFnSUNBZ0lDQWdJQ0JwYlhCc2N5NXdkWE5vS0dkbGRFbHRjR3hsYldWdWRHRjBhVzl1S1R0Y2JpQWdJQ0FnSUNBZ0lDQnVaV1ZrVTJoaGNHVlRkSEpwWkdWeklEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnBaaUFvYVcxd2JHVnRaVzUwWVhScGIyNVZjMlZrTG1kbGRFSjVTVzVrYVdObGN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUdsdGNHeHpMbkIxYzJnb1oyVjBRbmxKYm1ScFkyVnpTVzF3YkdWdFpXNTBZWFJwYjI0cE8xeHVJQ0FnSUNBZ0lDQWdJRzVsWldSVGFHRndaVk4wY21sa1pYTWdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNnaGRYTmxWVzVwWm05eWJTQW1KaUJ1WldWa1UyaGhjR1ZUZEhKcFpHVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXMXdiSE11ZFc1emFHbG1kQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZR052Ym5OMElDUjdjMmhoY0dWOUlEMGdKSHQwZVhCbExtbHVaR2xqWlhOOUtDUjdjMmhoY0dWUGNsSmhibXN1YW05cGJpZ25MQ2NwZlNrN1lDeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1lHTnZibk4wSUNSN2MzUnlhV1JsYzMwZ1BTQWtlM1I1Y0dVdWFXNWthV05sYzMwb0pIdFRhR0Z3WlZWMGFXd3VZMjl0Y0hWMFpWTjBjbWxrWlhNb2MyaGhjR1ZQY2xKaGJtc3BMbXB2YVc0b0p5d25LWDBwTzJBcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnBiWEJzY3k1cWIybHVLQ2RjWEc0bktUdGNiaUFnSUNBZ0lIMDdYRzVjYmlBZ0lDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJR2x0Y0d3c1hHNGdJQ0FnSUNBZ0lIUjVjR1VzWEc0Z0lDQWdJQ0FnSUc5bVpuTmxkRlJ2U1c1a2FXTmxjeXhjYmlBZ0lDQWdJQ0FnYVc1a2FXTmxjMVJ2VDJabWMyVjBMRnh1SUNBZ0lDQWdJQ0JpY205aFpHTmhjM1JsWkVsdVpHbGpaWE5VYjA5bVpuTmxkQ3hjYmlBZ0lDQWdJQ0FnYVc1a2FXTmxjeXhjYmlBZ0lDQWdJQ0FnYVc1a2FXTmxjMGRsZEN4Y2JpQWdJQ0FnSUNBZ2FXNWthV05sYzFObGRDeGNiaUFnSUNBZ0lDQWdjMlYwTEZ4dUlDQWdJQ0FnSUNCelpYUkNlVTltWm5ObGRDeGNiaUFnSUNBZ0lDQWdjMlYwUW5sSmJtUnBZMlZ6TEZ4dUlDQWdJQ0FnSUNCblpYUXNYRzRnSUNBZ0lDQWdJR2RsZEVKNVQyWm1jMlYwTEZ4dUlDQWdJQ0FnSUNCblpYUkNlVWx1WkdsalpYTXNYRzRnSUNBZ0lDQWdJQzh2SUdselZtVmpOQ3hjYmlBZ0lDQWdJQ0FnZFhOaFoyVXNYRzRnSUNBZ0lDQWdJRzVoYldVc1hHNGdJQ0FnSUNBZ0lITjBjbWxrWlhNc1hHNGdJQ0FnSUNBZ0lITm9ZWEJsTEZ4dUlDQWdJQ0FnSUNCeVlXNXJYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMDdYRzVjYmk4cUtseHVJQ29nUTNKbFlYUmxJR0VnU1c1a2FXTmxjMGhsYkhCbGNpQm1iM0lnWVc0Z2FXNXdkWFF1WEc0Z0tseHVJQ29nUUhCaGNtRnRJRzVoYldVZ0xTQjBhR1VnYm1GdFpTQnZaaUIwYUdVZ2FXNXdkWFF1WEc0Z0tpQkFjR0Z5WVcwZ2RIbHdaU0F0SUhSb1pTQjBaVzV6YjNJZ2RIbHdaU0J2WmlCMGFHVWdhVzV3ZFhRdVhHNGdLaUJBY0dGeVlXMGdjMmhoY0dWUGNsSmhibXNnTFNCMGFHVWdkR1Z1YzI5eUlITm9ZWEJsSUc5eUlIUm9aU0J5WVc1cklHOW1JSFJvWlNCcGJuQjFkQzVjYmlBcUlFQndZWEpoYlNCamIyMXdiMjVsYm5SeklDMGdkR2hsSUc1MWJXSmxjaUJ2WmlCamIyMXdiMjVsYm5SeklHOW1JSFJvWlNCcGJuQjFkQzRnWVhaaGFXeGhZbXhsSUhaaGJIVmxjeUJoY21VZ01Td2dNaXdnTXl3Z05DNGdaR1ZtWVhWc2RDQnBjeUF4TGx4dUlDb2dRSEpsZEhWeWJuTWdZVzRnU1c1a2FXTmxjMGhsYkhCbGNpQm1iM0lnZEdobElHbHVjSFYwTGx4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ2FXNXdkWFJXWVhKcFlXSnNaU0E5WEc0Z0lDQWdLRzVoYldVNklITjBjbWx1Wnl3Z2RIbHdaVG9nYm5WdFltVnlMQ0J6YUdGd1pVOXlVbUZ1YXpvZ2JuVnRZbVZ5ZkhKbFlXUnZibXg1SUc1MWJXSmxjbHRkTENCamIyMXdiMjVsYm5Sek9pQXhmREo4TTN3MElEMGdNU2s2SUVsdVpHbGpaWE5JWld4d1pYSWdQVDVjYmlBZ0lDQWdJQ0FnWTNKbFlYUmxTVzVrYVdObGMwaGxiSEJsY2lodVlXMWxMQ0IwZVhCbExDQnphR0Z3WlU5eVVtRnVheXdnSjJsdWNIVjBKeXdnWTI5dGNHOXVaVzUwY3lrN1hHNWNiaThxS2x4dUlDb2dRM0psWVhSbElHRWdTVzVrYVdObGMwaGxiSEJsY2lCbWIzSWdZVzRnYjNWMGNIVjBMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQnVZVzFsSUMwZ2RHaGxJRzVoYldVZ2IyWWdkR2hsSUc5MWRIQjFkQzVjYmlBcUlFQndZWEpoYlNCMGVYQmxJQzBnZEdobElIUmxibk52Y2lCMGVYQmxJRzltSUhSb1pTQnZkWFJ3ZFhRdVhHNGdLaUJBY0dGeVlXMGdjMmhoY0dWUGNsSmhibXNnTFNCMGFHVWdkR1Z1YzI5eUlITm9ZWEJsSUc5eUlIUm9aU0J5WVc1cklHOW1JSFJvWlNCdmRYUndkWFF1WEc0Z0tpQkFjR0Z5WVcwZ1kyOXRjRzl1Wlc1MGN5QXRJSFJvWlNCdWRXMWlaWElnYjJZZ1kyOXRjRzl1Wlc1MGN5QnZaaUIwYUdVZ2IzVjBjSFYwTGlCaGRtRnBiR0ZpYkdVZ2RtRnNkV1Z6SUdGeVpTQXhMQ0F5TENBekxDQTBMaUJrWldaaGRXeDBJR2x6SURFdVhHNGdLaUJBY21WMGRYSnVjeUJoYmlCSmJtUnBZMlZ6U0dWc2NHVnlJR1p2Y2lCMGFHVWdiM1YwY0hWMExseHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdiM1YwY0hWMFZtRnlhV0ZpYkdVZ1BWeHVJQ0FnSUNodVlXMWxPaUJ6ZEhKcGJtY3NJSFI1Y0dVNklHNTFiV0psY2l3Z2MyaGhjR1ZQY2xKaGJtczZJRzUxYldKbGNueHlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhTd2dZMjl0Y0c5dVpXNTBjem9nTVh3eWZETjhOQ0E5SURFcE9pQkpibVJwWTJWelNHVnNjR1Z5SUQwK1hHNGdJQ0FnSUNBZ0lHTnlaV0YwWlVsdVpHbGpaWE5JWld4d1pYSW9ibUZ0WlN3Z2RIbHdaU3dnYzJoaGNHVlBjbEpoYm1zc0lDZHZkWFJ3ZFhRbkxDQmpiMjF3YjI1bGJuUnpLVHRjYmx4dUx5b3FYRzRnS2lCRGNtVmhkR1VnWVNCSmJtUnBZMlZ6U0dWc2NHVnlJR1p2Y2lCaGJpQnBiblJsY201aGJDQjJZWEpwWVdKc1pTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2JtRnRaU0F0SUhSb1pTQnVZVzFsSUc5bUlIUm9aU0IyWVhKcFlXSnNaUzVjYmlBcUlFQndZWEpoYlNCMGVYQmxJQzBnZEdobElIUmxibk52Y2lCMGVYQmxJRzltSUhSb1pTQjJZWEpwWVdKc1pTNWNiaUFxSUVCd1lYSmhiU0J6YUdGd1pVOXlVbUZ1YXlBdElIUm9aU0IwWlc1emIzSWdjMmhoY0dVZ2IzSWdkR2hsSUhKaGJtc2diMllnZEdobElIWmhjbWxoWW14bExseHVJQ29nUUhCaGNtRnRJR052YlhCdmJtVnVkSE1nTFNCMGFHVWdiblZ0WW1WeUlHOW1JR052YlhCdmJtVnVkSE1nYjJZZ2RHaGxJSFpoY21saFlteGxMaUJoZG1GcGJHRmliR1VnZG1Gc2RXVnpJR0Z5WlNBeExDQXlMQ0F6TENBMExpQmtaV1poZFd4MElHbHpJREV1WEc0Z0tpQkFjbVYwZFhKdWN5QmhiaUJKYm1ScFkyVnpTR1ZzY0dWeUlHWnZjaUIwYUdVZ2RtRnlhV0ZpYkdVdVhHNGdLaTljYm1WNGNHOXlkQ0JqYjI1emRDQnBiblJsY201aGJGWmhjbWxoWW14bElEMWNiaUFnSUNBb2JtRnRaVG9nYzNSeWFXNW5MQ0IwZVhCbE9pQnVkVzFpWlhJc0lITm9ZWEJsVDNKU1lXNXJPaUJ1ZFcxaVpYSjhjbVZoWkc5dWJIa2diblZ0WW1WeVcxMHNJR052YlhCdmJtVnVkSE02SURGOE1ud3pmRFFnUFNBeEtUb2dTVzVrYVdObGMwaGxiSEJsY2lBOVBseHVJQ0FnSUNBZ0lDQmpjbVZoZEdWSmJtUnBZMlZ6U0dWc2NHVnlLRzVoYldVc0lIUjVjR1VzSUhOb1lYQmxUM0pTWVc1ckxDQW5hVzUwWlhKdVlXd25MQ0JqYjIxd2IyNWxiblJ6S1R0Y2JseHVaWGh3YjNKMElIUjVjR1VnVlc1cFptOXliVVJoZEdGRmJHVnRaVzUwVkhsd1pTQTlJQ2QxTXpJbmZDZG1NVFluZkNkbU16SW5mQ2RwTXpJbk8xeHVaWGh3YjNKMElIUjVjR1VnVlc1cFptOXliWE5CY25KaGVWUjVjR1VnUFNCQmNuSmhlVHg3Ym1GdFpUb2djM1J5YVc1bk95QjBlWEJsT2lCVmJtbG1iM0p0UkdGMFlVVnNaVzFsYm5SVWVYQmxPeUJzWlc1bmRHZy9PaUJ1ZFcxaVpYSjlQanRjYmx4dUx5b3FYRzRnS2lCQklGTm9ZV1JsY2tobGJIQmxjaUJwY3lCaElHaGxiSEJsY2lCamJHRnpjeUJtYjNJZ1oyVnVaWEpoZEdsdVp5QlhSMU5NSUdOdlpHVXVYRzRnS2k5Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1UyaGhaR1Z5U0dWc2NHVnlJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFRWdhR1ZzY0dWeUlHWjFibU4wYVc5dUlIUnZJR2RsYm1WeVlYUmxJSFJvWlNCemRHRnlkQ0J2WmlCdFlXbHVJR1oxYm1OMGFXOXVJR2x1SUZkSFUwd2djMjkxY21ObElHTnZaR1V1WEc0Z0lDQXFYRzRnSUNBcUlFQmxlR0Z0Y0d4bFhHNGdJQ0FxSUdOdmJuTjBJR2RsZEZOb1lXUmxjbE52ZFhKalpTQTlJQ2h6YUdGa1pYSklaV3h3WlhJNklGTm9ZV1JsY2tobGJIQmxjaWtnUFQ0Z1lGeHVJQ0FnS2lBZ0xpNHVYRzRnSUNBcVhHNGdJQ0FxSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV0WVdsdVUzUmhjblFvS1gxY2JpQWdJQ29nSUNBZ0x5OGdlVzkxY2lCamIyUmxJR2hsY21VZ2FXNXphV1JsSUcxaGFXNG9LU0JtZFc1amRHbHZibHh1SUNBZ0tpQWdJQ0F1TGk1Y2JpQWdJQ29nSUgxY2JpQWdJQ29nWUR0Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIZHZjbXRuY205MWNGTnBlbVVnTFNCaGJpQnZjSFJwYjI1aGJDQjNiM0pyWjNKdmRYQWdjMmw2WlM0Z1pHVm1ZWFZzZENCcGN5QlhUMUpMUjFKUFZWQmZVMGxhUlM1Y2JpQWdJQ292WEc0Z0lHMWhhVzVUZEdGeWRDaDNiM0pyWjNKdmRYQlRhWHBsUHpvZ2JuVnRZbVZ5ZkZ0dWRXMWlaWElzSUc1MWJXSmxjaXdnYm5WdFltVnlYU2s2SUhOMGNtbHVaenRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRU0JvWld4d1pYSWdablZ1WTNScGIyNGdkRzhnWjJWdVpYSmhkR1VnZEdobElHTnZaR1VnYzI1cGNIQmxkQ0JtYjNJZ1ozVmhjbVJwYm1jZ1lXZGhhVzV6ZENCdmRYUXRiMll0WW05MWJtUnpJSE5wZW1VdVhHNGdJQ0FxWEc0Z0lDQXFJRUJsZUdGdGNHeGxYRzRnSUNBcUlHTnZibk4wSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU0E5SUNoemFHRmtaWEpJWld4d1pYSTZJRk5vWVdSbGNraGxiSEJsY2lrZ1BUNGdZRnh1SUNBZ0tpQWdMaTR1WEc0Z0lDQXFYRzRnSUNBcUlDQWtlM05vWVdSbGNraGxiSEJsY2k1dFlXbHVVM1JoY25Rb0tYMWNiaUFnSUNvZ0lDQWdKSHR6YUdGa1pYSklaV3h3WlhJdVozVmhjbVJCWjJGcGJuTjBUM1YwVDJaQ2IzVnVaSE5YYjNKclozSnZkWEJUYVhwbGN5aHZkWFJ3ZFhSVGFYcGxLWDFjYmlBZ0lDcGNiaUFnSUNvZ0lDQWdMeThnZVc5MWNpQmpiMlJsSUdobGNtVWdhVzV6YVdSbElHMWhhVzRvS1NCbWRXNWpkR2x2Ymx4dUlDQWdLaUFnSUNBdUxpNWNiaUFnSUNvZ0lIMWNiaUFnSUNvZ1lEdGNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSE5wZW1VZ0xTQjBhR1VnYzJsNlpTQnZaaUIwYUdVZ1pHRjBZU0IwYnlCbmRXRnlaQ0JoWjJGcGJuTjBMaUJqWVc0Z1ltVWdZU0J1ZFcxaVpYSWdiM0lnWVNCemRISnBibWNnS0ZkSFUwd2dZSFV6TW1BZ1pYaHdjbVZ6YzJsdmJpa3VYRzRnSUNBcUwxeHVJQ0JuZFdGeVpFRm5ZV2x1YzNSUGRYUlBaa0p2ZFc1a2MxZHZjbXRuY205MWNGTnBlbVZ6S0hOcGVtVTZJSFZ1YTI1dmQyNHBPaUJ6ZEhKcGJtYzdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFRWdhR1ZzY0dWeUlHWjFibU4wYVc5dUlIUnZJR2RsYm1WeVlYUmxJSFJvWlNCamIyUmxJSE51YVhCd1pYUWdabTl5SUdSbFkyeGhjbWx1WnlCdGRXeDBhWEJzWlNCcGJuQjFkSE1nYjNJZ2IzVjBjSFYwY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIWmhjbWxoWW14bGN5QXRJR0Z1SUdGeWNtRjVJRzltSUVsdVpHbGpaWE5JWld4d1pYSWdabTl5SUhSb1pTQjJZWEpwWVdKc1pYTXVYRzRnSUNBcUwxeHVJQ0JrWldOc1lYSmxWbUZ5YVdGaWJHVnpLQzR1TG5aaGNtbGhZbXhsY3pvZ1NXNWthV05sYzBobGJIQmxjbHRkS1RvZ2MzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJCSUdobGJIQmxjaUJtZFc1amRHbHZiaUIwYnlCeVpXZHBjM1JsY2lCdmJtVWdkVzVwWm05eWJTNGdRMkZ1SUdKbElHTmhiR3hsWkNCdGRXeDBhWEJzWlNCMGFXMWxjeUIwYnlCeVpXZHBjM1JsY2lCdGRXeDBhWEJzWlNCMWJtbG1iM0p0Y3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElHNWhiV1VnTFNCMGFHVWdibUZ0WlNCdlppQjBhR1VnZFc1cFptOXliUzVjYmlBZ0lDb2dRSEJoY21GdElIUjVjR1VnTFNCMGFHVWdkSGx3WlNCdlppQjBhR1VnZFc1cFptOXliUzVjYmlBZ0lDb2dRSEJoY21GdElHeGxibWQwYUNBdElIUm9aU0JzWlc1bmRHZ2diMllnZEdobElIVnVhV1p2Y20wc0lHUmxabUYxYkhRZ2RHOGdNU0IzYUdWdUlHbDBJR2x6SUc1dmRDQndjbTkyYVdSbFpDNWNiaUFnSUNvdlhHNGdJSEpsWjJsemRHVnlWVzVwWm05eWJTaHVZVzFsT2lCemRISnBibWNzSUhSNWNHVTZJSE4wY21sdVp5d2diR1Z1WjNSb1B6b2diblZ0WW1WeUtUb2dVMmhoWkdWeVNHVnNjR1Z5TzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJCSUdobGJIQmxjaUJtZFc1amRHbHZiaUIwYnlCeVpXZHBjM1JsY2lCdGRXeDBhWEJzWlNCMWJtbG1iM0p0Y3k0Z1EyRnVJR0psSUdOaGJHeGxaQ0J0ZFd4MGFYQnNaU0IwYVcxbGN5QjBieUJ5WldkcGMzUmxjaUJ0ZFd4MGFYQnNaU0IxYm1sbWIzSnRjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUhWdWFXWnZjbTF6SUMwZ1lXNGdZWEp5WVhrZ2IyWWdkVzVwWm05eWJYTXVJRVZoWTJnZ1pXeGxiV1Z1ZENCdlppQjBhR1VnWVhKeVlYa2dhWE1nWVc0Z2IySnFaV04wSUhkcGRHZ2dNaUJ3Y205d1pYSjBhV1Z6T2lCZ2JtRnRaV0FnWVc1a1hHNGdJQ0FxSUNBZ0lDQmdkSGx3WldBdVhHNGdJQ0FxTDF4dUlDQnlaV2RwYzNSbGNsVnVhV1p2Y20xektIVnVhV1p2Y20xek9pQlZibWxtYjNKdGMwRnljbUY1Vkhsd1pTazZJRk5vWVdSbGNraGxiSEJsY2p0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUVNCb1pXeHdaWElnWm5WdVkzUnBiMjRnZEc4Z2NtVm5hWE4wWlhJZ2JYVnNkR2x3YkdVZ2FXNTBaWEp1WVd3Z2RtRnlhV0ZpYkdWekxpQkRZVzRnWW1VZ1kyRnNiR1ZrSUcxMWJIUnBjR3hsSUhScGJXVnpJSFJ2SUhKbFoybHpkR1Z5SUcxMWJIUnBjR3hsWEc0Z0lDQXFJR2x1ZEdWeWJtRnNJSFpoY21saFlteGxjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUhaaGNtbGhZbXhsY3lBdElHRnVJR0Z5Y21GNUlHOW1JRWx1WkdsalpYTklaV3h3WlhJZ1ptOXlJSFJvWlNCMllYSnBZV0pzWlhNdVhHNGdJQ0FxTDF4dUlDQnlaV2RwYzNSbGNrbHVkR1Z5Ym1Gc1ZtRnlhV0ZpYkdWektDNHVMblpoY21saFlteGxjem9nU1c1a2FXTmxjMGhsYkhCbGNsdGRLVG9nVTJoaFpHVnlTR1ZzY0dWeU8xeHVmVnh1WEc1amJHRnpjeUJUYUdGa1pYSklaV3h3WlhKSmJYQnNJR2x0Y0d4bGJXVnVkSE1nVTJoaFpHVnlTR1ZzY0dWeUlIdGNiaUFnWTI5dWMzUnlkV04wYjNJb2NISnBkbUYwWlNCdWIzSnRZV3hwZW1Wa1JHbHpjR0YwWTJoSGNtOTFjRG9nVzI1MWJXSmxjaXdnYm5WdFltVnlMQ0J1ZFcxaVpYSmRMQ0J3Y21sMllYUmxJR3hwYldsMGN6b2dSMUJWVTNWd2NHOXlkR1ZrVEdsdGFYUnpLU0I3ZlZ4dVhHNGdJR2QxWVhKa1FXZGhhVzV6ZEU5MWRFOW1RbTkxYm1SelYyOXlhMmR5YjNWd1UybDZaWE1vYzJsNlpUb2diblZ0WW1WeWZITjBjbWx1WnlrNklITjBjbWx1WnlCN1hHNGdJQ0FnTHk4Z1IzVmhjbVFnWVdkaGFXNXpkQ0J2ZFhRdGIyWXRZbTkxYm1SeklIZHZjbXNnWjNKdmRYQWdjMmw2WlhOY2JpQWdJQ0JqYjI1emRDQnphWHBsU1c1RGIyUmxJRDBnZEhsd1pXOW1JSE5wZW1VZ1BUMDlJQ2R1ZFcxaVpYSW5JRDhnWUNSN2MybDZaWDExWUNBNklITnBlbVU3WEc0Z0lDQWdjbVYwZFhKdUlHQnBaaUFvWjJ4dlltRnNYMmxrZUNBK1BTQWtlM05wZW1WSmJrTnZaR1Y5S1NCN0lISmxkSFZ5YmpzZ2ZXQTdYRzRnSUgxY2JseHVJQ0J0WVdsdVUzUmhjblFvZDI5eWEyZHliM1Z3VTJsNlpUb2diblZ0WW1WeWZGdHVkVzFpWlhJc0lHNTFiV0psY2l3Z2JuVnRZbVZ5WFNBOUlGZFBVa3RIVWs5VlVGOVRTVnBGS1NCN1hHNGdJQ0FnWTI5dWMzUWdkMjl5YTJkeWIzVndVMmw2WlZnZ1BTQjBlWEJsYjJZZ2QyOXlhMmR5YjNWd1UybDZaU0E5UFQwZ0oyNTFiV0psY2ljZ1B5QjNiM0pyWjNKdmRYQlRhWHBsSURvZ2QyOXlhMmR5YjNWd1UybDZaVnN3WFR0Y2JpQWdJQ0JqYjI1emRDQjNiM0pyWjNKdmRYQlRhWHBsV1NBOUlIUjVjR1Z2WmlCM2IzSnJaM0p2ZFhCVGFYcGxJRDA5UFNBbmJuVnRZbVZ5SnlBL0lERWdPaUIzYjNKclozSnZkWEJUYVhwbFd6RmRPMXh1SUNBZ0lHTnZibk4wSUhkdmNtdG5jbTkxY0ZOcGVtVmFJRDBnZEhsd1pXOW1JSGR2Y210bmNtOTFjRk5wZW1VZ1BUMDlJQ2R1ZFcxaVpYSW5JRDhnTVNBNklIZHZjbXRuY205MWNGTnBlbVZiTWwwN1hHNWNiaUFnSUNCcFppQW9kMjl5YTJkeWIzVndVMmw2WlZnZ1BpQjBhR2x6TG14cGJXbDBjeTV0WVhoRGIyMXdkWFJsVjI5eWEyZHliM1Z3VTJsNlpWZ2dmSHhjYmlBZ0lDQWdJQ0FnZDI5eWEyZHliM1Z3VTJsNlpWa2dQaUIwYUdsekxteHBiV2wwY3k1dFlYaERiMjF3ZFhSbFYyOXlhMmR5YjNWd1UybDZaVmtnZkh4Y2JpQWdJQ0FnSUNBZ2QyOXlhMmR5YjNWd1UybDZaVm9nUGlCMGFHbHpMbXhwYldsMGN5NXRZWGhEYjIxd2RYUmxWMjl5YTJkeWIzVndVMmw2WlZvcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ2QyOXlhMmR5YjNWd0lITnBlbVVnV3lSN2QyOXlhMmR5YjNWd1UybDZaVmg5TENBa2UzZHZjbXRuY205MWNGTnBlbVZaZlN3Z0pIdGNiaUFnSUNBZ0lDQWdJQ0IzYjNKclozSnZkWEJUYVhwbFduMWRJR1Y0WTJWbFpITWdkR2hsSUcxaGVHbHRkVzBnZDI5eWEyZHliM1Z3SUhOcGVtVWdXeVI3ZEdocGN5NXNhVzFwZEhNdWJXRjRRMjl0Y0hWMFpWZHZjbXRuY205MWNGTnBlbVZZZlN3Z0pIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxteHBiV2wwY3k1dFlYaERiMjF3ZFhSbFYyOXlhMmR5YjNWd1UybDZaVmw5TENBa2UzUm9hWE11YkdsdGFYUnpMbTFoZUVOdmJYQjFkR1ZYYjNKclozSnZkWEJUYVhwbFduMWRMbUFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoM2IzSnJaM0p2ZFhCVGFYcGxXQ0FxSUhkdmNtdG5jbTkxY0ZOcGVtVlpJQ29nZDI5eWEyZHliM1Z3VTJsNlpWb2dQaUIwYUdsekxteHBiV2wwY3k1dFlYaERiMjF3ZFhSbFNXNTJiMk5oZEdsdmJuTlFaWEpYYjNKclozSnZkWEFwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnZDI5eWEyZHliM1Z3SUhOcGVtVWdXeVI3ZDI5eWEyZHliM1Z3VTJsNlpWaDlMQ0FrZTNkdmNtdG5jbTkxY0ZOcGVtVlpmU3dnSkh0Y2JpQWdJQ0FnSUNBZ0lDQjNiM0pyWjNKdmRYQlRhWHBsV24xZElHVjRZMlZsWkhNZ2RHaGxJRzFoZUdsdGRXMGdkMjl5YTJkeWIzVndJR2x1ZG05allYUnBiMjV6SUNSN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1c2FXMXBkSE11YldGNFEyOXRjSFYwWlVsdWRtOWpZWFJwYjI1elVHVnlWMjl5YTJkeWIzVndmUzVnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRDQnBjekZFYVcxbGJuTnBiMjVFYVhOd1lYUmphQ0E5SUhSb2FYTXVibTl5YldGc2FYcGxaRVJwYzNCaGRHTm9SM0p2ZFhCYk1WMGdQVDA5SURFZ0ppWWdkR2hwY3k1dWIzSnRZV3hwZW1Wa1JHbHpjR0YwWTJoSGNtOTFjRnN5WFNBOVBUMGdNVHRjYmlBZ0lDQmpiMjV6ZENCd1lYSmhiVXhwYzNRZ1BTQnBjekZFYVcxbGJuTnBiMjVFYVhOd1lYUmphQ0EvSUdCQVluVnBiSFJwYmlobmJHOWlZV3hmYVc1MmIyTmhkR2x2Ymw5cFpDa2daMnh2WW1Gc1gybGtJRG9nZG1Wak16eDFNekkrTEZ4dUlDQWdJRUJpZFdsc2RHbHVLSGR2Y210bmNtOTFjRjlwWkNrZ2QyOXlhMmR5YjNWd1gybGtJRG9nZG1Wak16eDFNekkrTEZ4dUlDQWdJRUJpZFdsc2RHbHVLR3h2WTJGc1gybHVkbTlqWVhScGIyNWZhV1FwSUd4dlkyRnNYMmxrSURvZ2RtVmpNengxTXpJK1lDQTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JnUUdKMWFXeDBhVzRvWjJ4dlltRnNYMmx1ZG05allYUnBiMjVmYVdRcElHZHNiMkpoYkY5cFpDQTZJSFpsWXpNOGRUTXlQaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUVCaWRXbHNkR2x1S0d4dlkyRnNYMmx1ZG05allYUnBiMjVmYVdRcElHeHZZMkZzWDJsa0lEb2dkbVZqTXp4MU16SStMRnh1SUNBZ0lFQmlkV2xzZEdsdUtHeHZZMkZzWDJsdWRtOWpZWFJwYjI1ZmFXNWtaWGdwSUd4dlkyRnNYMmxrZUNBNklIVXpNaXhjYmlBZ0lDQkFZblZwYkhScGJpaDNiM0pyWjNKdmRYQmZhV1FwSUhkdmNtdG5jbTkxY0Y5cFpDQTZJSFpsWXpNOGRUTXlQaXhjYmlBZ0lDQkFZblZwYkhScGJpaHVkVzFmZDI5eWEyZHliM1Z3Y3lrZ2JuVnRYM2R2Y210bmNtOTFjSE1nT2lCMlpXTXpQSFV6TWo1Z08xeHVJQ0FnSUdOdmJuTjBJR2RzYjJKaGJFbGtlRVJsWm1sdWFYUnBiMjRnUFNCcGN6RkVhVzFsYm5OcGIyNUVhWE53WVhSamFDQS9YRzRnSUNBZ0lDQWdJQ2RzWlhRZ1oyeHZZbUZzWDJsa2VDQTlJR2RzYjJKaGJGOXBaQzU0T3lCc1pYUWdiRzlqWVd4ZmFXUjRJRDBnYkc5allXeGZhV1F1ZURzbklEcGNiaUFnSUNBZ0lDQWdZR3hsZENCbmJHOWlZV3hmYVdSNElEMGdLSGR2Y210bmNtOTFjRjlwWkM1NklDb2diblZ0WDNkdmNtdG5jbTkxY0hOYk1GMGdLaUJ1ZFcxZmQyOXlhMmR5YjNWd2Mxc3hYU0FyWEc0Z0lDQWdJQ0FnSUNBZ2QyOXlhMmR5YjNWd1gybGtMbmtnS2lCdWRXMWZkMjl5YTJkeWIzVndjMXN3WFNBcklIZHZjbXRuY205MWNGOXBaQzU0S1NBcUlDUjdYRzRnSUNBZ0lDQWdJQ0FnSUNCM2IzSnJaM0p2ZFhCVGFYcGxXQ0FxSUhkdmNtdG5jbTkxY0ZOcGVtVlpJQ29nZDI5eWEyZHliM1Z3VTJsNlpWcDlkU0FySUd4dlkyRnNYMmxrZUR0Z08xeHVYRzRnSUNBZ2NtVjBkWEp1SUdCQVkyOXRjSFYwWlNCQWQyOXlhMmR5YjNWd1gzTnBlbVVvSkh0M2IzSnJaM0p2ZFhCVGFYcGxXSDBzSUNSN2QyOXlhMmR5YjNWd1UybDZaVmw5TENBa2UzZHZjbXRuY205MWNGTnBlbVZhZlNsY2JpQWdabTRnYldGcGJpZ2tlM0JoY21GdFRHbHpkSDBwSUh0Y2JpQWdJQ0FrZTJkc2IySmhiRWxrZUVSbFptbHVhWFJwYjI1OVhHNGdJR0E3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUdGd2NHVnVaRlpoY21saFlteGxWVzVwWm05eWJYTW9kbUZ5YVdGaWJHVTZJRWx1WkdsalpYTklaV3h3WlhJcE9pQjJiMmxrSUh0Y2JpQWdJQ0JwWmlBb2RtRnlhV0ZpYkdVdWNtRnVheUFoUFQwZ01Da2dlMXh1SUNBZ0lDQWdhV1lnS0haaGNtbGhZbXhsTG5Ob1lYQmxMbk4wWVhKMGMxZHBkR2dvSjNWdWFXWnZjbTF6TGljcEtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWRXNXBabTl5YlhNdWNIVnphQ2g3Ym1GdFpUb2dkbUZ5YVdGaWJHVXVjMmhoY0dVdWNtVndiR0ZqWlNnbmRXNXBabTl5YlhNdUp5d2dKeWNwTENCMGVYQmxPaUFuZFRNeUp5d2diR1Z1WjNSb09pQjJZWEpwWVdKc1pTNXlZVzVyZlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9kbUZ5YVdGaWJHVXVjM1J5YVdSbGN5NXpkR0Z5ZEhOWGFYUm9LQ2QxYm1sbWIzSnRjeTRuS1NrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5WdWFXWnZjbTF6TG5CMWMyZ29lMjVoYldVNklIWmhjbWxoWW14bExuTjBjbWxrWlhNdWNtVndiR0ZqWlNnbmRXNXBabTl5YlhNdUp5d2dKeWNwTENCMGVYQmxPaUFuZFRNeUp5d2diR1Z1WjNSb09pQjJZWEpwWVdKc1pTNXlZVzVyZlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCa1pXTnNZWEpsVm1GeWFXRmliR1VvZG1GeWFXRmliR1U2SUVsdVpHbGpaWE5JWld4d1pYSXNJR0pwYm1ScGJtZEpibVJsZURvZ2JuVnRZbVZ5S1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0JwWmlBb2RtRnlhV0ZpYkdVdWRYTmhaMlVnUFQwOUlDZHBiblJsY201aGJDY3BJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25ZMkZ1Ym05MElIVnpaU0JwYm5SbGNtNWhiQ0IyWVhKcFlXSnNaU0IzYVhSb0lHUmxZMnhoY21WV1lYSnBZV0pzWlNncExpQjFjMlVnY21WbmFYTjBaWEpKYm5SbGNtNWhiRlpoY21saFlteGxjeWdwSUdsdWMzUmxZV1F1SnlrN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWRtRnlhV0ZpYkdWekxuQjFjMmdvZG1GeWFXRmliR1VwTzF4dUlDQWdJSFJvYVhNdVlYQndaVzVrVm1GeWFXRmliR1ZWYm1sbWIzSnRjeWgyWVhKcFlXSnNaU2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhZMk5sYzNNZ1BTQjJZWEpwWVdKc1pTNTFjMkZuWlNBOVBUMGdKMmx1Y0hWMEp5QS9JQ2R5WldGa0p5QTZJQ2R5WldGa1gzZHlhWFJsSnp0Y2JpQWdJQ0JqYjI1emRDQnpkRzl5WVdkbFZIbHdaU0E5SUhaaGNtbGhZbXhsTG5SNWNHVXVjM1J2Y21GblpUdGNiaUFnSUNCeVpYUjFjbTRnWUVCbmNtOTFjQ2d3S1NCQVltbHVaR2x1Wnlna2UySnBibVJwYm1kSmJtUmxlSDBwSUhaaGNqeHpkRzl5WVdkbExDQWtlMkZqWTJWemMzMCtJQ1I3ZG1GeWFXRmliR1V1Ym1GdFpYMDZJR0Z5Y21GNVBDUjdjM1J2Y21GblpWUjVjR1Y5UGp0Z08xeHVJQ0I5WEc1Y2JpQWdaR1ZqYkdGeVpWWmhjbWxoWW14bGN5Z3VMaTUyWVhKcFlXSnNaWE02SUVsdVpHbGpaWE5JWld4d1pYSmJYU2s2SUhOMGNtbHVaeUI3WEc0Z0lDQWdjbVYwZFhKdUlIWmhjbWxoWW14bGN5NXRZWEFvZGlBOVBpQjBhR2x6TG1SbFkyeGhjbVZXWVhKcFlXSnNaU2gyTENCMGFHbHpMblpoY21saFlteGxTVzVrWlhnckt5a3BMbXB2YVc0b0oxeGNiaWNwTzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCeVpXZHBjM1JsY2tsdWRHVnlibUZzVm1GeWFXRmliR1VvZG1GeWFXRmliR1U2SUVsdVpHbGpaWE5JWld4d1pYSXBPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9kbUZ5YVdGaWJHVXVkWE5oWjJVZ0lUMDlJQ2RwYm5SbGNtNWhiQ2NwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjYmlBZ0lDQWdJQ0FnSUNBblkyRnVibTkwSUhWelpTQnBibkIxZENCdmNpQnZkWFJ3ZFhRZ2RtRnlhV0ZpYkdVZ2QybDBhQ0J5WldkcGMzUmxja2x1ZEdWeWJtRnNWbUZ5YVdGaWJHVW9LUzRnZFhObElHUmxZMnhoY21WV1lYSnBZV0pzWlhNb0tTQnBibk4wWldGa0xpY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YVc1MFpYSnVZV3hXWVhKcFlXSnNaWE11Y0hWemFDaDJZWEpwWVdKc1pTazdYRzRnSUNBZ2RHaHBjeTVoY0hCbGJtUldZWEpwWVdKc1pWVnVhV1p2Y20xektIWmhjbWxoWW14bEtUdGNiaUFnZlZ4dVhHNGdJSEpsWjJsemRHVnlTVzUwWlhKdVlXeFdZWEpwWVdKc1pYTW9MaTR1ZG1GeWFXRmliR1Z6T2lCSmJtUnBZMlZ6U0dWc2NHVnlXMTBwT2lCVGFHRmtaWEpJWld4d1pYSWdlMXh1SUNBZ0lIWmhjbWxoWW14bGN5NW1iM0pGWVdOb0tIWWdQVDRnZEdocGN5NXlaV2RwYzNSbGNrbHVkR1Z5Ym1Gc1ZtRnlhV0ZpYkdVb2Rpa3BPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNWNiaUFnY21WbmFYTjBaWEpWYm1sbWIzSnRLRzVoYldVNklITjBjbWx1Wnl3Z2RIbHdaVG9nVlc1cFptOXliVVJoZEdGRmJHVnRaVzUwVkhsd1pTd2diR1Z1WjNSb0lEMGdNU2s2SUZOb1lXUmxja2hsYkhCbGNpQjdYRzRnSUNBZ2RHaHBjeTUxYm1sbWIzSnRjeTV3ZFhOb0tIdHVZVzFsTENCMGVYQmxMQ0JzWlc1bmRHaDlLVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUhKbFoybHpkR1Z5Vlc1cFptOXliWE1vWVdSa2FYUnBiMjVoYkZWdWFXWnZjbTF6T2lCVmJtbG1iM0p0YzBGeWNtRjVWSGx3WlNrNklGTm9ZV1JsY2tobGJIQmxjaUI3WEc0Z0lDQWdkR2hwY3k1MWJtbG1iM0p0Y3lBOUlIUm9hWE11ZFc1cFptOXliWE11WTI5dVkyRjBLR0ZrWkdsMGFXOXVZV3hWYm1sbWIzSnRjeWs3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUdsdWRHVnlibUZzVm1GeWFXRmliR1Z6T2lCSmJtUnBZMlZ6U0dWc2NHVnlXMTBnUFNCYlhUdGNiaUFnY0hKcGRtRjBaU0IyWVhKcFlXSnNaWE02SUVsdVpHbGpaWE5JWld4d1pYSmJYU0E5SUZ0ZE8xeHVJQ0J3Y21sMllYUmxJSFZ1YVdadmNtMXpPaUJWYm1sbWIzSnRjMEZ5Y21GNVZIbHdaU0E5SUZ0ZE8xeHVJQ0J3Y21sMllYUmxJSFZ1YVdadmNtMUVaV05zWVhKaGRHbHZiaWdwT2lCemRISnBibWNnZTF4dUlDQWdJR2xtSUNoMGFHbHpMblZ1YVdadmNtMXpMbXhsYm1kMGFDQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUNjbk8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJSFZ1YVdadmNtMVRibWx3Y0dWMGN6b2djM1J5YVc1blcxMGdQU0JiWFR0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUh0dVlXMWxMQ0IwZVhCbExDQnNaVzVuZEdoOUlHOW1JSFJvYVhNdWRXNXBabTl5YlhNcElIdGNiaUFnSUNBZ0lHbG1JQ2hzWlc1bmRHZ2dKaVlnYkdWdVozUm9JRDRnTkNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pTQTlQVDBnSjJZeE5pY3BJSHRjYmlBZ0lDQWdJQ0FnSUNCMWJtbG1iM0p0VTI1cGNIQmxkSE11Y0hWemFDaGdRR0ZzYVdkdUtERTJLU0FrZTI1aGJXVjlPbUZ5Y21GNVBHMWhkREo0TkR3a2UzUjVjR1Y5UGl3Z0pIdE5ZWFJvTG1ObGFXd29iR1Z1WjNSb0lDOGdPQ2w5UG1BcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSFZ1YVdadmNtMVRibWx3Y0dWMGN5NXdkWE5vS0dBa2UyNWhiV1Y5T21GeWNtRjVQSFpsWXpROEpIdDBlWEJsZlQ0c0lDUjdUV0YwYUM1alpXbHNLR3hsYm1kMGFDQXZJRFFwZlQ1Z0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RIbHdaVlJsYlhBZ1BTQnNaVzVuZEdnZ1BUMGdiblZzYkNCOGZDQnNaVzVuZEdnZ1BUMDlJREVnUHlCMGVYQmxJRG9nWUhabFl5UjdiR1Z1WjNSb2ZUd2tlM1I1Y0dWOVBtQTdYRzRnSUNBZ0lDQWdJSFZ1YVdadmNtMVRibWx3Y0dWMGN5NXdkWE5vS0dBa2UyNWhiV1Y5T2lSN2RIbHdaVlJsYlhCOVlDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUdCY2JpQWdJQ0FnSUhOMGNuVmpkQ0JWYm1sbWIzSnRjeUI3SUNSN2RXNXBabTl5YlZOdWFYQndaWFJ6TG1wdmFXNG9KeXdnSnlsOUlIMDdYRzRnSUNBZ0lDQkFaM0p2ZFhBb01Da2dRR0pwYm1ScGJtY29KSHQwYUdsekxuWmhjbWxoWW14bFNXNWtaWGg5S1NCMllYSThkVzVwWm05eWJUNGdkVzVwWm05eWJYTTZJRlZ1YVdadmNtMXpPMkE3WEc0Z0lIMWNiaUFnY0hKcGRtRjBaU0IyWVhKcFlXSnNaVWx1WkdWNElEMGdNRHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSMlYwSUdGa1pHbDBhVzl1WVd3Z2FXMXdiR1Z0Wlc1MFlYUnBiMjRnZEdoaGRDQnVaV1ZrY3lCMGJ5QmlaU0JoWkdSbFpDQjBieUIwYUdVZ2MyaGhaR1Z5SUhOdmRYSmpaUzVjYmlBZ0lDb3ZYRzRnSUdkbGRDQmhaR1JwZEdsdmJtRnNTVzF3YkdWdFpXNTBZWFJwYjI1ektDazZJSE4wY21sdVp5QjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVkVzVwWm05eWJVUmxZMnhoY21GMGFXOXVLQ2tnS3lCMGFHbHpMblpoY21saFlteGxjeTV0WVhBb2FTQTlQaUJwTG1sdGNHd29LU2t1YW05cGJpZ25YRnh1SnlrZ0sxeHVJQ0FnSUNBZ0lDQjBhR2x6TG1sdWRHVnlibUZzVm1GeWFXRmliR1Z6TG0xaGNDaHBJRDArSUdrdWFXMXdiQ2dwS1M1cWIybHVLQ2RjWEc0bktUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJIWlhRZ2RHaGxJSFpoY21saFlteGxJR2x1Wm04Z2IyWWdkR2hsSUhOb1lXUmxjaUJ3Y205bmNtRnRMbHh1SUNBZ0tpOWNiaUFnWjJWMElIWmhjbWxoWW14bGMwbHVabThvS1RvZ1VISnZaM0poYlZWdWFXWnZjbTFXWVhKcFlXSnNaVWx1Wm05YlhYeDFibVJsWm1sdVpXUWdlMXh1SUNBZ0lHbG1JQ2gwYUdsekxuVnVhV1p2Y20xekxteGxibWQwYUNBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCMWJtbG1iM0p0VjJkemJGUjVjR1ZVYjBSaGRHRlVlWEJsSUQwZ0tIUjVjR1U2SUZWdWFXWnZjbTFFWVhSaFJXeGxiV1Z1ZEZSNWNHVXBJRDArWEc0Z0lDQWdJQ0FnSUNoYlJHRjBZVlI1Y0dVdWRXbHVkRE15TENCRVlYUmhWSGx3WlM1bWJHOWhkREUyTENCRVlYUmhWSGx3WlM1bWJHOWhkQ3hjYmlBZ0lDQWdJQ0FnSUNCRVlYUmhWSGx3WlM1cGJuUXpNbDFiV3lkMU16SW5MQ0FuWmpFMkp5d2dKMll6TWljc0lDZHBNekluWFM1cGJtUmxlRTltS0hSNWNHVXBYU2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11ZFc1cFptOXliWE11YldGd0tIVWdQVDRnS0Z0MWJtbG1iM0p0VjJkemJGUjVjR1ZVYjBSaGRHRlVlWEJsS0hVdWRIbHdaU2tzSUhVdWJHVnVaM1JvSUQ4L0lERmRLU2s3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdOdmJuTjBJR055WldGMFpWTm9ZV1JsY2tobGJIQmxjaUE5SUNoa2FYTndZWFJqYUVkeWIzVndPaUJiYm5WdFltVnlMQ0J1ZFcxaVpYSXNJRzUxYldKbGNsMHNJR3hwYldsMGN6b2dSMUJWVTNWd2NHOXlkR1ZrVEdsdGFYUnpLU0E5UGx4dUlDQWdJRzVsZHlCVGFHRmtaWEpJWld4d1pYSkpiWEJzS0dScGMzQmhkR05vUjNKdmRYQXNJR3hwYldsMGN5azdYRzVjYmk4cUtseHVJQ29nVkdocGN5Qm1kVzVqZEdsdmJpQmpiMjFsY3lCbWNtOXRJR2gwZEhCek9pOHZaMmwwYUhWaUxtTnZiUzkwWlc1emIzSm1iRzkzTDNSbWFuTXZZbXh2WWk5dFlYTjBaWEl2ZEdacWN5MWpiM0psTDNOeVl5OXZjSE12WW5KdllXUmpZWE4wWDNWMGFXd3VkSE1qVERFNExVdzBNRnh1SUNvZ1VtVjBkWEp1Y3lCMGFHVWdaR2x0Wlc1emFXOXVjeUJwYmlCMGFHVWdhVzV3ZFhRZ2MyaGhjR1VnZEdoaGRDQmhjbVVnWW5KdllXUmpZWE4wWldRZ2RHOWNiaUFxSUhCeWIyUjFZMlVnZEdobElIQnliM1pwWkdWa0lHOTFkSEIxZENCemFHRndaUzVjYmlBcVhHNGdLaUJVYUdVZ2NtVjBkWEp1WldRZ1pHbHRaVzV6YVc5dWN5QmhjbVVnTUMxcGJtUmxlR1ZrSUdGdVpDQnpiM0owWldRdUlFRnVJR1Y0WVcxd2JHVTZYRzRnS2lCcGJsTm9ZWEJsSUQwZ1d6UXNJREVzSUROZFhHNGdLaUJ2ZFhSVGFHRndaU0E5SUZzMUxDQTBMQ0F6TENBelhWeHVJQ29nY21WemRXeDBJRDBnV3pGZExpQkVhVzFsYm5OcGIyNGdNU0FvTW01a0lHUnBiV1Z1YzJsdmJpQnZaaUJwYm5CMWRDa2daMlYwY3lCaWNtOWhaR05oYzNSbFpDQXhJRDArSURNdVhHNGdLaTljYm1WNGNHOXlkQ0JqYjI1emRDQm5aWFJDY205aFpHTmhjM1JFYVcxeklEMGdLR2x1VTJoaGNHVTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0J2ZFhSVGFHRndaVG9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBwT2lCdWRXMWlaWEpiWFNBOVBpQjdYRzRnSUdOdmJuTjBJR2x1VW1GdWF5QTlJR2x1VTJoaGNHVXViR1Z1WjNSb08xeHVJQ0JqYjI1emRDQmthVzF6T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHbHVVbUZ1YXpzZ2FTc3JLU0I3WEc0Z0lDQWdZMjl1YzNRZ1pHbHRJRDBnYVc1U1lXNXJJQzBnTVNBdElHazdYRzRnSUNBZ1kyOXVjM1FnWVNBOUlHbHVVMmhoY0dWYlpHbHRYU0I4ZkNBeE8xeHVJQ0FnSUdOdmJuTjBJR0lnUFNCdmRYUlRhR0Z3WlZ0dmRYUlRhR0Z3WlM1c1pXNW5kR2dnTFNBeElDMGdhVjBnZkh3Z01UdGNiaUFnSUNCcFppQW9ZaUErSURFZ0ppWWdZU0E5UFQwZ01Ta2dlMXh1SUNBZ0lDQWdaR2x0Y3k1MWJuTm9hV1owS0dScGJTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCa2FXMXpPMXh1ZlR0Y2JpSXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJSHRFWVhSaFZIbHdaWDBnWm5KdmJTQW5MaTR2TGk0dkxpNHZkMkZ6YlMxamIyMXRiMjRuTzF4dWFXMXdiM0owSUh0VVpXNXpiM0pXYVdWM2ZTQm1jbTl0SUNjdUxpOHVMaTkwWlc1emIzSXRkbWxsZHljN1hHNXBiWEJ2Y25RZ2UxTm9ZWEJsVlhScGJIMGdabkp2YlNBbkxpNHZMaTR2ZFhScGJDYzdYRzVwYlhCdmNuUWdlMEYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVN3Z1kzSmxZWFJsUVhSMGNtbGlkWFJsVjJsMGFFTmhZMmhsUzJWNWZTQm1jbTl0SUNjdUxpOWhkSFJ5YVdKMWRHVXRkMmwwYUMxallXTm9aUzFyWlhrbk8xeHVhVzF3YjNKMElIdERiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1VISnZaM0poYlVsdVptOTlJR1p5YjIwZ0p5NHVMM1I1Y0dWekp6dGNibHh1YVcxd2IzSjBJSHRqY21WaGRHVlVaVzV6YjNKVGFHRndaVlpoY21saFlteGxjeXdnU1c1a2FXTmxjMGhsYkhCbGNpd2dhVzV3ZFhSV1lYSnBZV0pzWlN3Z2IzVjBjSFYwVm1GeWFXRmliR1VzSUZOb1lXUmxja2hsYkhCbGNuMGdabkp2YlNBbkxpOWpiMjF0YjI0bk8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlJ5WVc1emNHOXpaVUYwZEhKcFluVjBaWE1nWlhoMFpXNWtjeUJCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrZ2UxeHVJQ0J5WldGa2IyNXNlU0J3WlhKdE9pQnVkVzFpWlhKYlhUdGNibjFjYmx4dVkyOXVjM1FnZG1Gc2FXUmhkR1ZKYm5CMWRITWdQU0FvYVc1d2RYUnpPaUJ5WldGa2IyNXNlU0JVWlc1emIzSldhV1YzVzEwcE9pQjJiMmxrSUQwK0lIdGNiaUFnYVdZZ0tDRnBibkIxZEhNZ2ZId2dhVzV3ZFhSekxteGxibWQwYUNBaFBUMGdNU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25WSEpoYm5Od2IzTmxJSEpsY1hWcGNtVnpJREVnYVc1d2RYUXVKeWs3WEc0Z0lIMWNibjA3WEc1Y2JtTnZibk4wSUdkbGRFRmthblZ6ZEdWa1VHVnliU0E5SUNocGJuQjFkRkpoYm1zNklHNTFiV0psY2l3Z2NHVnliVG9nYm5WdFltVnlXMTBwT2lCdWRXMWlaWEpiWFNBOVBseHVJQ0FnSUNod1pYSnRJQ1ltSUhCbGNtMHViR1Z1WjNSb0lDRTlQU0JwYm5CMWRGSmhibXNwSUQ4Z1d5NHVMaWh1WlhjZ1FYSnlZWGtvYVc1d2RYUlNZVzVyS1M1clpYbHpLQ2twWFM1eVpYWmxjbk5sS0NrZ09pQndaWEp0TzF4dVhHNWpiMjV6ZENCblpYUlBkWFJ3ZFhSVGFHRndaU0E5SUNocGJuQjFkRk5vWVhCbE9pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhTd2djR1Z5YlRvZ2JuVnRZbVZ5VzEwcE9pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhTQTlQbHh1SUNBZ0lGTm9ZWEJsVlhScGJDNXpiM0owUW1GelpXUlBibEJsY20wb2FXNXdkWFJUYUdGd1pTd2daMlYwUVdScWRYTjBaV1JRWlhKdEtHbHVjSFYwVTJoaGNHVXViR1Z1WjNSb0xDQndaWEp0S1NrN1hHNWNibU52Ym5OMElIQmxjbTFHZFc1amRHbHZia0p2WkhrZ1BTQW9jR1Z5YlRvZ2JuVnRZbVZ5VzEwc0lISmhibXM2SUc1MWJXSmxjaXdnYVc1d2RYUTZJRWx1WkdsalpYTklaV3h3WlhJc0lHOTFkSEIxZERvZ1NXNWthV05sYzBobGJIQmxjaWs2SUhOMGNtbHVaeUE5UGlCN1hHNGdJR052Ym5OMElISmxkbVZ5YzJWR2RXNWpJRDBnVzEwN1hHNGdJSEpsZG1WeWMyVkdkVzVqTG5CMWMyZ29ZR1p1SUhCbGNtMG9hVG9nSkh0dmRYUndkWFF1ZEhsd1pTNXBibVJwWTJWemZTa2dMVDRnSkh0cGJuQjFkQzUwZVhCbExtbHVaR2xqWlhOOUlIdGNiaUFnSUNCMllYSWdZVG9nSkh0cGJuQjFkQzUwZVhCbExtbHVaR2xqWlhOOU8yQXBPMXh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElISmhibXM3SUNzcmFTa2dlMXh1SUNBZ0lISmxkbVZ5YzJWR2RXNWpMbkIxYzJnb2FXNXdkWFF1YVc1a2FXTmxjMU5sZENnbllTY3NJSEJsY20xYmFWMHNJR0JwV3lSN2FYMWRZQ2twTzF4dUlDQjlYRzRnSUhKbGRtVnljMlZHZFc1akxuQjFjMmdvSjNKbGRIVnliaUJoTzMwbktUdGNiaUFnY21WMGRYSnVJSEpsZG1WeWMyVkdkVzVqTG1wdmFXNG9KMXhjYmljcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR055WldGMFpWUnlZVzV6Y0c5elpWQnliMmR5WVcxSmJtWnZJRDBnS0dsdWNIVjBWR1Z1YzI5eU9pQlVaVzV6YjNKV2FXVjNMQ0J3WlhKdFFYUjBjam9nYm5WdFltVnlXMTBwT2lCUWNtOW5jbUZ0U1c1bWJ5QTlQaUI3WEc0Z0lHTnZibk4wSUdsdWNIVjBSR0YwWVZSNWNHVWdQU0JwYm5CMWRGUmxibk52Y2k1a1lYUmhWSGx3WlR0Y2JpQWdZMjl1YzNRZ2FXNXdkWFJTWVc1cklEMGdhVzV3ZFhSVVpXNXpiM0l1WkdsdGN5NXNaVzVuZEdnN1hHNGdJR052Ym5OMElIQmxjbTBnUFNCblpYUkJaR3AxYzNSbFpGQmxjbTBvYVc1d2RYUlNZVzVyTENCd1pYSnRRWFIwY2lrN1hHNGdJR052Ym5OMElHOTFkSEIxZEZOb1lYQmxJRDBnWjJWMFQzVjBjSFYwVTJoaGNHVW9hVzV3ZFhSVVpXNXpiM0l1WkdsdGN5d2djR1Z5YlNrN1hHNGdJR052Ym5OMElHOTFkSEIxZENBOUlHOTFkSEIxZEZaaGNtbGhZbXhsS0NkdmRYUndkWFFuTENCcGJuQjFkRVJoZEdGVWVYQmxMQ0J2ZFhSd2RYUlRhR0Z3WlM1c1pXNW5kR2dwTzF4dUlDQmpiMjV6ZENCcGJuQjFkQ0E5SUdsdWNIVjBWbUZ5YVdGaWJHVW9KMkVuTENCcGJuQjFkRVJoZEdGVWVYQmxMQ0JwYm5CMWRGSmhibXNwTzF4dVhHNGdJR052Ym5OMElHZGxkRk5vWVdSbGNsTnZkWEpqWlNBOUlDaHphR0ZrWlhKSVpXeHdaWEk2SUZOb1lXUmxja2hsYkhCbGNpa2dQVDRnWUZ4dUlDQWtlM05vWVdSbGNraGxiSEJsY2k1eVpXZHBjM1JsY2xWdWFXWnZjbTBvSjI5MWRIQjFkRjl6YVhwbEp5d2dKM1V6TWljcExtUmxZMnhoY21WV1lYSnBZV0pzWlhNb2FXNXdkWFFzSUc5MWRIQjFkQ2w5WEc1Y2JpQWdKSHR3WlhKdFJuVnVZM1JwYjI1Q2IyUjVLSEJsY20wc0lHbHVjSFYwVW1GdWF5d2dhVzV3ZFhRc0lHOTFkSEIxZENsOVhHNWNiaUFnSkh0emFHRmtaWEpJWld4d1pYSXViV0ZwYmxOMFlYSjBLQ2w5WEc0Z0lDQWdKSHR6YUdGa1pYSklaV3h3WlhJdVozVmhjbVJCWjJGcGJuTjBUM1YwVDJaQ2IzVnVaSE5YYjNKclozSnZkWEJUYVhwbGN5Z25kVzVwWm05eWJYTXViM1YwY0hWMFgzTnBlbVVuS1gxY2JseHVJQ0FnSUd4bGRDQnBibVJwWTJWeklEMGdKSHR2ZFhSd2RYUXViMlptYzJWMFZHOUpibVJwWTJWektDZG5iRzlpWVd4ZmFXUjRKeWw5TzF4dUlDQWdJR3hsZENCaFNXNWthV05sY3lBOUlIQmxjbTBvYVc1a2FXTmxjeWs3WEc1Y2JpQWdJQ0FrZTI5MWRIQjFkQzV6WlhSQ2VVOW1abk5sZENnbloyeHZZbUZzWDJsa2VDY3NJR2x1Y0hWMExtZGxkRUo1U1c1a2FXTmxjeWduWVVsdVpHbGpaWE1uS1NsOVhHNGdJSDFnTzF4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUc1aGJXVTZJQ2RVY21GdWMzQnZjMlVuTEZ4dUlDQWdJSE5vWVdSbGNrTmhZMmhsT2lCN2FHbHVkRG9nWUNSN2NHVnliVUYwZEhKOVlDd2dhVzV3ZFhSRVpYQmxibVJsYm1OcFpYTTZJRnNuY21GdWF5ZGRmU3hjYmlBZ0lDQm5aWFJTZFc1RVlYUmhPaUFvYVc1d2RYUnpLU0E5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0J2ZFhSd2RYUlRhWHBsSUQwZ1UyaGhjR1ZWZEdsc0xuTnBlbVVvYjNWMGNIVjBVMmhoY0dVcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ2IzVjBjSFYwY3pvZ1czdGthVzF6T2lCdmRYUndkWFJUYUdGd1pTd2daR0YwWVZSNWNHVTZJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaWDFkTEZ4dUlDQWdJQ0FnSUNCa2FYTndZWFJqYUVkeWIzVndPaUI3ZURvZ1RXRjBhQzVqWldsc0tHOTFkSEIxZEZOcGVtVWdMeUEyTkNBdktpQjNiM0pyWjNKdmRYQWdjMmw2WlNBcUx5bDlMRnh1SUNBZ0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTTZYRzRnSUNBZ0lDQWdJQ0FnSUNCYmUzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2diM1YwY0hWMFUybDZaWDBzSUM0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHbHVjSFYwYzFzd1hTNWthVzF6TENCdmRYUndkWFJUYUdGd1pTbGRMRnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlMRnh1SUNBZ0lHZGxkRk5vWVdSbGNsTnZkWEpqWlN4Y2JpQWdmVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCMGNtRnVjM0J2YzJVZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRlJ5WVc1emNHOXpaVUYwZEhKcFluVjBaWE1wT2lCMmIybGtJRDArSUh0Y2JpQWdkbUZzYVdSaGRHVkpibkIxZEhNb1kyOXVkR1Y0ZEM1cGJuQjFkSE1wTzF4dUlDQmpiMjUwWlhoMExtTnZiWEIxZEdVb1kzSmxZWFJsVkhKaGJuTndiM05sVUhKdlozSmhiVWx1Wm04b1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwc0lHRjBkSEpwWW5WMFpYTXVjR1Z5YlNrcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSEJoY25ObFZISmhibk53YjNObFFYUjBjbWxpZFhSbGN5QTlJQ2hoZEhSeWFXSjFkR1Z6T2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0IxYm10dWIzZHVQaWs2SUZSeVlXNXpjRzl6WlVGMGRISnBZblYwWlhNZ1BUNWNiaUFnSUNCamNtVmhkR1ZCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrb2UzQmxjbTA2SUdGMGRISnBZblYwWlhNdWNHVnliU0JoY3lCdWRXMWlaWEpiWFgwcE8xeHVJaXdnSWk4dklFTnZjSGx5YVdkb2RDQW9ZeWtnVFdsamNtOXpiMlowSUVOdmNuQnZjbUYwYVc5dUxpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1THk4Z1RHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFMUpWQ0JNYVdObGJuTmxMbHh1WEc1cGJYQnZjblFnZTBSaGRHRlVlWEJsZlNCbWNtOXRJQ2N1TGk4dUxpOHVMaTkzWVhOdExXTnZiVzF2YmljN1hHNXBiWEJ2Y25RZ2UxUmxibk52Y2xacFpYZDlJR1p5YjIwZ0p5NHVMeTR1TDNSbGJuTnZjaTEyYVdWM0p6dGNibWx0Y0c5eWRDQjdVMmhoY0dWVmRHbHNmU0JtY205dElDY3VMaTh1TGk5MWRHbHNKenRjYm1sdGNHOXlkQ0I3UTI5dGNIVjBaVU52Ym5SbGVIUXNJRkJ5YjJkeVlXMUpibVp2TENCUWNtOW5jbUZ0VTJoaFpHVnlRMkZqYUdWSmJtWnZmU0JtY205dElDY3VMaTkwZVhCbGN5YzdYRzVjYm1sdGNHOXlkQ0I3YVc1d2RYUldZWEpwWVdKc1pTd2diM1YwY0hWMFZtRnlhV0ZpYkdVc0lGTm9ZV1JsY2tobGJIQmxjbjBnWm5KdmJTQW5MaTlqYjIxdGIyNG5PMXh1YVcxd2IzSjBJSHRqY21WaGRHVlNaV1IxWTJWQmRIUnlhV0oxZEdWelJuSnZiVWx1Y0hWMGN5d2dVbVZrZFdObFFYUjBjbWxpZFhSbGMzMGdabkp2YlNBbkxpOXlaV1IxWTJVbk8xeHVhVzF3YjNKMElIdGpjbVZoZEdWVWNtRnVjM0J2YzJWUWNtOW5jbUZ0U1c1bWIzMGdabkp2YlNBbkxpOTBjbUZ1YzNCdmMyVW5PMXh1WEc1amIyNXpkQ0J5WldSMVkyVlBjSE02SUh0YmEyVjVPaUJ6ZEhKcGJtZGRPaUJ6ZEhKcGJtZDlJRDBnZTF4dUlDQnRZWGc2SUNkelpXeGxZM1FvWW1WemRGWmhiSFZsTENCallXNWthV1JoZEdVc0lHTmhibVJwWkdGMFpTQStJR0psYzNSV1lXeDFaU2tuTEZ4dUlDQnRhVzQ2SUNkelpXeGxZM1FvWW1WemRGWmhiSFZsTENCallXNWthV1JoZEdVc0lHTmhibVJwWkdGMFpTQThJR0psYzNSV1lXeDFaU2tuTEZ4dUlDQnRaV0Z1T2lBblltVnpkRlpoYkhWbElDc2dZMkZ1Wkdsa1lYUmxKeXhjYmlBZ2MzVnRPaUFuWW1WemRGWmhiSFZsSUNzZ1kyRnVaR2xrWVhSbEp5eGNiaUFnY0hKdlpEb2dKMkpsYzNSV1lXeDFaU0FxSUdOaGJtUnBaR0YwWlNjc1hHNGdJSE4xYlZOeGRXRnlaVG9nSjJKbGMzUldZV3gxWlNBcklHTmhibVJwWkdGMFpTQXFJR05oYm1ScFpHRjBaU2NzWEc0Z0lHeHZaMU4xYlVWNGNEb2dKMkpsYzNSV1lXeDFaU0FySUdWNGNDaGpZVzVrYVdSaGRHVXBKeXhjYmlBZ2JERTZJQ2RpWlhOMFZtRnNkV1VnS3lCaFluTW9ZMkZ1Wkdsa1lYUmxLU2NzWEc0Z0lHd3lPaUFuWW1WemRGWmhiSFZsSUNzZ1kyRnVaR2xrWVhSbElDb2dZMkZ1Wkdsa1lYUmxKeXhjYmlBZ2JHOW5VM1Z0T2lBblltVnpkRlpoYkhWbElDc2dZMkZ1Wkdsa1lYUmxKMXh1ZlR0Y2JseHVZMjl1YzNRZ2NtVmtkV05sVTJoaGNtVmtUM0J6T2lCN1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5mU0E5SUh0Y2JpQWdiV0Y0T2lBbmMyVnNaV04wS0dKbGMzUldZV3gxWlN3Z1kyRnVaR2xrWVhSbExDQmpZVzVrYVdSaGRHVWdQaUJpWlhOMFZtRnNkV1VwSnl4Y2JpQWdiV2x1T2lBbmMyVnNaV04wS0dKbGMzUldZV3gxWlN3Z1kyRnVaR2xrWVhSbExDQmpZVzVrYVdSaGRHVWdQQ0JpWlhOMFZtRnNkV1VwSnl4Y2JpQWdiV1ZoYmpvZ0oySmxjM1JXWVd4MVpTQXJJR05oYm1ScFpHRjBaU2NzWEc0Z0lITjFiVG9nSjJKbGMzUldZV3gxWlNBcklHTmhibVJwWkdGMFpTY3NYRzRnSUhCeWIyUTZJQ2RpWlhOMFZtRnNkV1VnS2lCallXNWthV1JoZEdVbkxGeHVJQ0J6ZFcxVGNYVmhjbVU2SUNkaVpYTjBWbUZzZFdVZ0t5QmpZVzVrYVdSaGRHVW5MRnh1SUNCc2IyZFRkVzFGZUhBNklDZGlaWE4wVm1Gc2RXVWdLeUJqWVc1a2FXUmhkR1VuTEZ4dUlDQnNNVG9nSjJKbGMzUldZV3gxWlNBcklHTmhibVJwWkdGMFpTY3NYRzRnSUd3eU9pQW5ZbVZ6ZEZaaGJIVmxJQ3NnWTJGdVpHbGtZWFJsSnl4Y2JpQWdiRzluVTNWdE9pQW5ZbVZ6ZEZaaGJIVmxJQ3NnWTJGdVpHbGtZWFJsSjF4dWZUdGNibHh1WTI5dWMzUWdjbVZrZFdObFNXNXBkRlpoYkhWbGN6b2dlMXRyWlhrNklITjBjbWx1WjEwNklITjBjbWx1WjMwZ1BTQjdYRzRnSUcxaGVEb2dKMTlCVzI5bVpuTmxkRjBuTEZ4dUlDQnRhVzQ2SUNkZlFWdHZabVp6WlhSZEp5eGNiaUFnYldWaGJqb2dKekFuTEZ4dUlDQnpkVzA2SUNjd0p5eGNiaUFnY0hKdlpEb2dKekVuTEZ4dUlDQnpkVzFUY1hWaGNtVTZJQ2N3Snl4Y2JpQWdiRzluVTNWdFJYaHdPaUFuTUNjc1hHNGdJR3d4T2lBbk1DY3NYRzRnSUd3eU9pQW5NQ2NzWEc0Z0lHeHZaMU4xYlRvZ0p6QW5YRzU5TzF4dVhHNWpiMjV6ZENCeVpXUjFZMlZQZFhSd2RYUldZV3gxWlhNNklIdGJhMlY1T2lCemRISnBibWRkT2lCemRISnBibWQ5SUQwZ2UxeHVJQ0J0WVhnNklDZGlaWE4wVm1Gc2RXVW5MRnh1SUNCdGFXNDZJQ2RpWlhOMFZtRnNkV1VuTEZ4dUlDQnpkVzA2SUNkaVpYTjBWbUZzZFdVbkxGeHVJQ0J3Y205a09pQW5ZbVZ6ZEZaaGJIVmxKeXhjYmlBZ2MzVnRVM0YxWVhKbE9pQW5ZbVZ6ZEZaaGJIVmxKeXhjYmlBZ2JHOW5VM1Z0Ulhod09pQW5iRzluS0dKbGMzUldZV3gxWlNrbkxGeHVJQ0JzTVRvZ0oySmxjM1JXWVd4MVpTY3NYRzRnSUd3eU9pQW5jM0Z5ZENoaVpYTjBWbUZzZFdVcEp5eGNiaUFnYkc5blUzVnRPaUFuYkc5bktHSmxjM1JXWVd4MVpTa25YRzU5TzF4dVhHNWpiMjV6ZENCblpYUkpibTVsY2sxdmMzUkJlR1Z6SUQwZ0tHNTFiVWx1Ym1WeVFYaGxjem9nYm5WdFltVnlMQ0J5WVc1ck9pQnVkVzFpWlhJcE9pQnVkVzFpWlhKYlhTQTlQaUI3WEc0Z0lHTnZibk4wSUhKbGN5QTlJRnRkTzF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnY21GdWF5QXRJRzUxYlVsdWJtVnlRWGhsY3pzZ2FTQThJSEpoYm1zN0lDc3JhU2tnZTF4dUlDQWdJSEpsY3k1d2RYTm9LR2twTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhNN1hHNTlPMXh1WEc1amIyNXpkQ0JqYjIxd2RYUmxUM1YwUVc1a1VtVmtkV05sVTJoaGNHVnpJRDBnS0hOb1lYQmxPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnWVhobGN6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJiYm5WdFltVnlXMTBzSUc1MWJXSmxjbHRkWFNBOVBpQjdYRzRnSUdOdmJuTjBJRzkxZEhCMWRGTm9ZWEJsSUQwZ1cxMDdYRzRnSUdOdmJuTjBJSEpoYm1zZ1BTQnphR0Z3WlM1c1pXNW5kR2c3WEc0Z0lHWnZjaUFvYkdWMElHUnBiU0E5SURBN0lHUnBiU0E4SUhKaGJtczdJR1JwYlNzcktTQjdYRzRnSUNBZ2FXWWdLR0Y0WlhNdWFXNWtaWGhQWmloa2FXMHBJRDA5UFNBdE1Ta2dlMXh1SUNBZ0lDQWdiM1YwY0hWMFUyaGhjR1V1Y0hWemFDaHphR0Z3WlZ0a2FXMWRLVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdZMjl1YzNRZ2NtVmtkV05sVTJoaGNHVWdQU0JoZUdWekxtMWhjQ2hrYVcwZ1BUNGdjMmhoY0dWYlpHbHRYU2s3WEc0Z0lISmxkSFZ5YmlCYmIzVjBjSFYwVTJoaGNHVXNJSEpsWkhWalpWTm9ZWEJsWFR0Y2JuMDdYRzVjYm1OdmJuTjBJR1Y0Y0dGdVpGTm9ZWEJsVkc5TFpXVndSR2x0SUQwZ0tITm9ZWEJsT2lCdWRXMWlaWEpiWFN3Z1lYaGxjem9nYm5WdFltVnlXMTBwT2lCdWRXMWlaWEpiWFNBOVBpQjdYRzRnSUdOdmJuTjBJSEpoYm1zZ1BTQnphR0Z3WlM1c1pXNW5kR2dnS3lCaGVHVnpMbXhsYm1kMGFEdGNiaUFnWTI5dWMzUWdaWGh3WVc1a1UyaGhjR1VnUFNCYlhUdGNiaUFnYkdWMElITm9ZWEJsU1dSNElEMGdNRHRjYmlBZ1ptOXlJQ2hzWlhRZ1pHbHRJRDBnTURzZ1pHbHRJRHdnY21GdWF6c2daR2x0S3lzcElIdGNiaUFnSUNCcFppQW9ZWGhsY3k1cGJtUmxlRTltS0dScGJTa2dQVDA5SUMweEtTQjdYRzRnSUNBZ0lDQmxlSEJoYm1SVGFHRndaUzV3ZFhOb0tITm9ZWEJsVzNOb1lYQmxTV1I0S3l0ZEtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWlhod1lXNWtVMmhoY0dVdWNIVnphQ2d4S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJR1Y0Y0dGdVpGTm9ZWEJsTzF4dWZUdGNibHh1WTI5dWMzUWdZWEpsUVhobGMwbHVibVZ5VFc5emRFUnBiWE1nUFNBb1lYaGxjem9nYm5WdFltVnlXMTBzSUhKaGJtczZJRzUxYldKbGNpazZJR0p2YjJ4bFlXNGdQVDRnZTF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR0Y0WlhNdWJHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQnBaaUFvWVhobGMxdGhlR1Z6TG14bGJtZDBhQ0F0SUdrZ0xTQXhYU0FoUFQwZ2NtRnVheUF0SURFZ0xTQnBLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUIwY25WbE8xeHVmVHRjYmx4dVkyOXVjM1FnWjJWMFFYaGxjMUJsY20xMWRHRjBhVzl1SUQwZ0tHRjRaWE02SUc1MWJXSmxjbHRkTENCeVlXNXJPaUJ1ZFcxaVpYSXBPaUJ1ZFcxaVpYSmJYU0E5UGlCN1hHNGdJR052Ym5OMElISmxjeUE5SUZ0ZE8xeHVJQ0JwWmlBb0lXRnlaVUY0WlhOSmJtNWxjazF2YzNSRWFXMXpLR0Y0WlhNc0lISmhibXNwS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCeVlXNXJPeUFySzJrcElIdGNiaUFnSUNBZ0lHbG1JQ2hoZUdWekxtbHVaR1Y0VDJZb2FTa2dQVDA5SUMweEtTQjdYRzRnSUNBZ0lDQWdJSEpsY3k1d2RYTm9LR2twTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQmhlR1Z6TG1admNrVmhZMmdvWVhocGN5QTlQaUJ5WlhNdWNIVnphQ2hoZUdsektTazdYRzRnSUgxY2JpQWdjbVYwZFhKdUlISmxjenRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCamNtVmhkR1ZTWldSMVkyVlRhR0Z5WldSUWNtOW5jbUZ0U1c1bWJ5QTlYRzRnSUNBZ0tHNWhiV1U2SUhOMGNtbHVaeXdnYzJoaFpHVnlRMkZqYUdVNklGQnliMmR5WVcxVGFHRmtaWEpEWVdOb1pVbHVabThzSUdsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZExDQnlaV1IxWTJWVWVYQmxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ0lHOTFkSEIxZEVSaGRHRlVlWEJsT2lCRVlYUmhWSGx3WlN3Z2IzVjBjSFYwVTJoaGNHVTZJRzUxYldKbGNsdGRMQ0J5WldSMVkyVlRhR0Z3WlRvZ2JuVnRZbVZ5VzEwcE9pQlFjbTluY21GdFNXNW1ieUE5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRGTm9ZWEJsSUQwZ2FXNXdkWFJ6V3pCZExtUnBiWE03WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJRzkxZEhCMWRGTnBlbVVnUFNCVGFHRndaVlYwYVd3dWMybDZaU2h2ZFhSd2RYUlRhR0Z3WlNrN1hHNGdJQ0FnSUNCamIyNXpkQ0J5WldSMVkyVlRhWHBsSUQwZ1UyaGhjR1ZWZEdsc0xuTnBlbVVvY21Wa2RXTmxVMmhoY0dVcE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCcGJuQjFkQ0E5SUdsdWNIVjBWbUZ5YVdGaWJHVW9KMTlCSnl3Z2FXNXdkWFJ6V3pCZExtUmhkR0ZVZVhCbExDQnBibkIxZEZOb1lYQmxLVHRjYmlBZ0lDQWdJR052Ym5OMElHOTFkSEIxZENBOUlHOTFkSEIxZEZaaGNtbGhZbXhsS0NkdmRYUndkWFFuTENCdmRYUndkWFJFWVhSaFZIbHdaU3dnYjNWMGNIVjBVMmhoY0dVcE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCM2IzSnJaM0p2ZFhCVGFYcGxJRDBnTXpJN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUhOb1lYSmxaRTFsYlc5eWVWTnVhWEJ3WlhRZ1BTQmdYRzRnSUNBZ0lDQWdJQ0FnZG1GeVBIZHZjbXRuY205MWNENGdZVUpsYzNSV1lXeDFaWE1nT2lCaGNuSmhlVHhtTXpJc0lDUjdkMjl5YTJkeWIzVndVMmw2WlgwK08xeHVJQ0FnSUNBZ0lHQTdYRzVjYmlBZ0lDQWdJR052Ym5OMElHZGxkRk5vWVdSbGNsTnZkWEpqWlNBOUlDaHphR0ZrWlhKSVpXeHdaWEk2SUZOb1lXUmxja2hsYkhCbGNpa2dQVDRnWUZ4dUlDQWdJQ0FnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV5WldkcGMzUmxjbFZ1YVdadmNtMG9KM0psWkhWalpWTnBlbVVuTENBbmRUTXlKeWt1WkdWamJHRnlaVlpoY21saFlteGxjeWhwYm5CMWRDd2diM1YwY0hWMEtYMWNiaUFnSUNBZ0lDQWdKSHR6YUdGeVpXUk5aVzF2Y25sVGJtbHdjR1YwZlZ4dUlDQWdJQ0FnSUNCbWJpQkVTVlpmUTBWSlRDaGhJRG9nZFRNeUxDQmlJRG9nZFRNeUtTQXRQaUIxTXpJZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW9LR0VnTFNBeGRTa2dMeUJpSUNzZ01YVXBPMXh1SUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1YldGcGJsTjBZWEowS0hkdmNtdG5jbTkxY0ZOcGVtVXBmVnh1WEc0Z0lDQWdJQ0FnSUNBZ2JHVjBJRzkxZEhCMWRFbHVaR1Y0SUQwZ1oyeHZZbUZzWDJsa2VDQXZJQ1I3ZDI5eWEyZHliM1Z3VTJsNlpYMDdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElHOW1abk5sZENBOUlHOTFkSEIxZEVsdVpHVjRJQ29nZFc1cFptOXliWE11Y21Wa2RXTmxVMmw2WlR0Y2JseHVJQ0FnSUNBZ0lDQWdJSFpoY2lCaVpYTjBWbUZzZFdVZ1BTQm1NeklvSkh0eVpXUjFZMlZKYm1sMFZtRnNkV1Z6VzNKbFpIVmpaVlI1Y0dWZGZTazdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElFeGxibWQwYUNBOUlIVnVhV1p2Y20xekxuSmxaSFZqWlZOcGVtVTdYRzRnSUNBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYXlBOUlHeHZZMkZzWDJsa2VEc2dheUE4SUV4bGJtZDBhRHNnYXlBOUlHc2dLeUFrZTNkdmNtdG5jbTkxY0ZOcGVtVjlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lHeGxkQ0JqWVc1a2FXUmhkR1VnUFNCbU16SW9KSHRwYm5CMWRDNW5aWFJDZVU5bVpuTmxkQ2duYjJabWMyVjBJQ3NnYXljcGZTazdYRzRnSUNBZ0lDQWdJQ0FnSUdKbGMzUldZV3gxWlNBOUlDUjdjbVZrZFdObFQzQnpXM0psWkhWalpWUjVjR1ZkZlR0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnWVVKbGMzUldZV3gxWlhOYmJHOWpZV3hmYVdSNFhTQTlJR0psYzNSV1lXeDFaVHRjYmlBZ0lDQWdJQ0FnSUNCM2IzSnJaM0p2ZFhCQ1lYSnlhV1Z5S0NrN1hHNWNiaUFnSUNBZ0lDQWdJSFpoY2lCeVpXUjFZMlZUYVhwbElEMGdiV2x1S0V4bGJtZDBhQ3dnSkh0M2IzSnJaM0p2ZFhCVGFYcGxmWFVwTzF4dUlDQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ1kzVnljbVZ1ZEZOcGVtVWdQU0J5WldSMVkyVlRhWHBsSUM4Z01uVTdJSEpsWkhWalpWTnBlbVVnUGlBeGRUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNCamRYSnlaVzUwVTJsNlpTQTlJSEpsWkhWalpWTnBlbVVnTHlBeWRTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNCc1pYUWdhVzUwWlhKMllXd2dQU0JFU1ZaZlEwVkpUQ2h5WldSMVkyVlRhWHBsTENBeWRTazdYRzRnSUNBZ0lDQWdJQ0FnSUdsbUlDaHNiMk5oYkY5cFpIZ2dQQ0JqZFhKeVpXNTBVMmw2WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHTmhibVJwWkdGMFpTQTlJR0ZDWlhOMFZtRnNkV1Z6VzJ4dlkyRnNYMmxrZUNBcklHbHVkR1Z5ZG1Gc1hUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdKbGMzUldZV3gxWlNBOUlDUjdjbVZrZFdObFUyaGhjbVZrVDNCelczSmxaSFZqWlZSNWNHVmRmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRkNaWE4wVm1Gc2RXVnpXMnh2WTJGc1gybGtlRjBnUFNCaVpYTjBWbUZzZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ2NtVmtkV05sVTJsNlpTQTlJR2x1ZEdWeWRtRnNPMXh1SUNBZ0lDQWdJQ0FnSUNCM2IzSnJaM0p2ZFhCQ1lYSnlhV1Z5S0NrN1hHNGdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUdsbUlDaHNiMk5oYkY5cFpIZ2dQVDBnTUhVcElIdGNiaUFnSUNBZ0lDQWdJQ0FrZTF4dUlDQWdJQ0FnSUNBZ0lHOTFkSEIxZEM1elpYUkNlVTltWm5ObGRDaGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0oyOTFkSEIxZEVsdVpHVjRKeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZQ1I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpXUjFZMlZVZVhCbElEMDlQU0FuYldWaGJpY2dQeUJnSkh0dmRYUndkWFF1ZEhsd1pTNXpkRzl5WVdkbGZTaGlaWE4wVm1Gc2RXVWdMeUJtTXpJb2RXNXBabTl5YlhNdWNtVmtkV05sVTJsNlpTa3BZQ0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JnSkh0dmRYUndkWFF1ZEhsd1pTNXpkRzl5WVdkbGZTZ2tlM0psWkhWalpVOTFkSEIxZEZaaGJIVmxjMXR5WldSMVkyVlVlWEJsWFgwcFlIMWdLWDA3WEc0Z0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWdPMXh1WEc0Z0lDQWdJQ0F2THlCUGJtVWdkMjl5YXlCbmNtOTFjQ0JwY3lCeVpYTndiMjV6YVdKc1pTQm1iM0lnYjI1c2VTQnZibVVnWld4bGJXVnVkQ0J2WmlCdmRYUndkWFF1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0J1WVcxbExGeHVJQ0FnSUNBZ0lDQnphR0ZrWlhKRFlXTm9aU3hjYmlBZ0lDQWdJQ0FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxMRnh1SUNBZ0lDQWdJQ0JuWlhSU2RXNUVZWFJoT2lBb0tTQTlQaUFvZTF4dUlDQWdJQ0FnSUNBZ0lHOTFkSEIxZEhNNklGdDdaR2x0Y3pvZ2IzVjBjSFYwVTJoaGNHVXNJR1JoZEdGVWVYQmxPaUJ2ZFhSd2RYUkVZWFJoVkhsd1pYMWRMRnh1SUNBZ0lDQWdJQ0FnSUdScGMzQmhkR05vUjNKdmRYQTZJSHQ0T2lCdmRYUndkWFJUYVhwbGZTeGNiaUFnSUNBZ0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTTZJRnQ3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCeVpXUjFZMlZUYVhwbGZWMWNiaUFnSUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDA3WEc1Y2JtTnZibk4wSUhKbFpIVmpaVU52YlcxdmJpQTlYRzRnSUNBZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwTENCdVlXMWxPaUJ6ZEhKcGJtY3NJR0YwZEhKcFluVjBaWE02SUZKbFpIVmpaVUYwZEhKcFluVjBaWE1zWEc0Z0lDQWdJSEpsWkhWalpWUjVjR1U2SUNkemRXMG5mQ2R6ZFcxVGNYVmhjbVVuZkNkd2NtOWtKM3duYldsdUozd25iV0Y0SjN3bmJXVmhiaWQ4SjJ4dloxTjFiVVY0Y0NkOEoyd3hKM3duYkRJbmZDZHNiMmRUZFcwbktUb2dkbTlwWkNBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCMWNHUmhkR1ZrUVhSMGNtbGlkWFJsY3pvZ1VtVmtkV05sUVhSMGNtbGlkWFJsY3lBOVhHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRDNXBibkIxZEhNdWJHVnVaM1JvSUQwOVBTQXhJRDhnWVhSMGNtbGlkWFJsY3lBNklHTnlaV0YwWlZKbFpIVmpaVUYwZEhKcFluVjBaWE5HY205dFNXNXdkWFJ6S0dOdmJuUmxlSFF1YVc1d2RYUnpMQ0JoZEhSeWFXSjFkR1Z6S1R0Y2JseHVJQ0FnSUNBZ2JHVjBJSFZ3WkdGMFpXUkJlR1Z6SUQwZ2RYQmtZWFJsWkVGMGRISnBZblYwWlhNdVlYaGxjenRjYmlBZ0lDQWdJR2xtSUNoMWNHUmhkR1ZrUVhobGN5NXNaVzVuZEdnZ1BUMDlJREFnSmlZZ0lYVndaR0YwWldSQmRIUnlhV0oxZEdWekxtNXZiM0JYYVhSb1JXMXdkSGxCZUdWektTQjdYRzRnSUNBZ0lDQWdJSFZ3WkdGMFpXUkJlR1Z6SUQwZ1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwdVpHbHRjeTV0WVhBb0tGOWthVzBzSUdrcElEMCtJR2twTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWTI5dWMzUWdibTl5YldGc2FYcGxRWGhsY3lBOUlGTm9ZWEJsVlhScGJDNXViM0p0WVd4cGVtVkJlR1Z6S0hWd1pHRjBaV1JCZUdWekxDQmpiMjUwWlhoMExtbHVjSFYwYzFzd1hTNWthVzF6TG14bGJtZDBhQ2s3WEc1Y2JpQWdJQ0FnSUd4bGRDQmhlR1Z6SUQwZ2JtOXliV0ZzYVhwbFFYaGxjenRjYmlBZ0lDQWdJR3hsZENCcGJuQjFkQ0E5SUdOdmJuUmxlSFF1YVc1d2RYUnpXekJkTzF4dUlDQWdJQ0FnWTI5dWMzUWdjR1Z5YlhWMFpXUkJlR1Z6SUQwZ1oyVjBRWGhsYzFCbGNtMTFkR0YwYVc5dUtHRjRaWE1zSUdOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1ScGJYTXViR1Z1WjNSb0tUdGNiaUFnSUNBZ0lHbG1JQ2h3WlhKdGRYUmxaRUY0WlhNdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdJQ0JwYm5CMWRDQTlJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGNiaUFnSUNBZ0lDQWdJQ0FnSUdOeVpXRjBaVlJ5WVc1emNHOXpaVkJ5YjJkeVlXMUpibVp2S0dOdmJuUmxlSFF1YVc1d2RYUnpXekJkTENCd1pYSnRkWFJsWkVGNFpYTXBMQ0I3YVc1d2RYUnpPaUJiTUYwc0lHOTFkSEIxZEhNNklGc3RNVjE5S1Zzd1hUdGNiaUFnSUNBZ0lDQWdZWGhsY3lBOUlHZGxkRWx1Ym1WeVRXOXpkRUY0WlhNb1lYaGxjeTVzWlc1bmRHZ3NJR2x1Y0hWMExtUnBiWE11YkdWdVozUm9LVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWTI5dWMzUWdXMjkxZEhCMWRGTm9ZWEJsTENCeVpXUjFZMlZUYUdGd1pWMGdQU0JqYjIxd2RYUmxUM1YwUVc1a1VtVmtkV05sVTJoaGNHVnpLR2x1Y0hWMExtUnBiWE1zSUdGNFpYTXBPMXh1SUNBZ0lDQWdiR1YwSUdacGJtRnNUM1YwY0hWMFUyaGhjR1VnUFNCdmRYUndkWFJUYUdGd1pUdGNiaUFnSUNBZ0lHbG1JQ2gxY0dSaGRHVmtRWFIwY21saWRYUmxjeTVyWldWd1JHbHRjeWtnZTF4dUlDQWdJQ0FnSUNCbWFXNWhiRTkxZEhCMWRGTm9ZWEJsSUQwZ1pYaHdZVzVrVTJoaGNHVlViMHRsWlhCRWFXMG9iM1YwY0hWMFUyaGhjR1VzSUc1dmNtMWhiR2w2WlVGNFpYTXBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9YRzRnSUNBZ0lDQWdJQ0FnWTNKbFlYUmxVbVZrZFdObFUyaGhjbVZrVUhKdlozSmhiVWx1Wm04b1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUc1aGJXVXNJSHRvYVc1ME9pQjFjR1JoZEdWa1FYUjBjbWxpZFhSbGN5NWpZV05vWlV0bGVTd2dhVzV3ZFhSRVpYQmxibVJsYm1OcFpYTTZJRnNuZEhsd1pTZGRmU3dnVzJsdWNIVjBYU3dnY21Wa2RXTmxWSGx3WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWRHVjRkQzVwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1VzSUdacGJtRnNUM1YwY0hWMFUyaGhjR1VzSUhKbFpIVmpaVk5vWVhCbEtTeGNiaUFnSUNBZ0lDQWdJQ0I3YVc1d2RYUnpPaUJiYVc1d2RYUmRmU2s3WEc0Z0lDQWdmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSEpsWkhWalpVMWxZVzVUYUdGeVpXUWdQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXNJR0YwZEhKcFluVjBaWE02SUZKbFpIVmpaVUYwZEhKcFluVjBaWE1wT2lCMmIybGtJRDArSUh0Y2JpQWdjbVZrZFdObFEyOXRiVzl1S0dOdmJuUmxlSFFzSUNkU1pXUjFZMlZOWldGdVUyaGhjbVZrSnl3Z1lYUjBjbWxpZFhSbGN5d2dKMjFsWVc0bktUdGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J5WldSMVkyVk1NVk5vWVhKbFpDQTlJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDd2dZWFIwY21saWRYUmxjem9nVW1Wa2RXTmxRWFIwY21saWRYUmxjeWs2SUhadmFXUWdQVDRnZTF4dUlDQnlaV1IxWTJWRGIyMXRiMjRvWTI5dWRHVjRkQ3dnSjFKbFpIVmpaVXd4VTJoaGNtVmtKeXdnWVhSMGNtbGlkWFJsY3l3Z0oyd3hKeWs3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2NtVmtkV05sVERKVGFHRnlaV1FnUFNBb1kyOXVkR1Y0ZERvZ1EyOXRjSFYwWlVOdmJuUmxlSFFzSUdGMGRISnBZblYwWlhNNklGSmxaSFZqWlVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnY21Wa2RXTmxRMjl0Ylc5dUtHTnZiblJsZUhRc0lDZFNaV1IxWTJWTU1sTm9ZWEpsWkNjc0lHRjBkSEpwWW5WMFpYTXNJQ2RzTWljcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSEpsWkhWalpVeHZaMU4xYlVWNGNGTm9ZWEpsWkNBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN6b2dVbVZrZFdObFFYUjBjbWxpZFhSbGN5azZJSFp2YVdRZ1BUNGdlMXh1SUNCeVpXUjFZMlZEYjIxdGIyNG9ZMjl1ZEdWNGRDd2dKMUpsWkhWalpVeHZaMU4xYlVWNGNGTm9ZWEpsWkNjc0lHRjBkSEpwWW5WMFpYTXNJQ2RzYjJkVGRXMUZlSEFuS1R0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnlaV1IxWTJWTllYaFRhR0Z5WldRZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRkpsWkhWalpVRjBkSEpwWW5WMFpYTXBPaUIyYjJsa0lEMCtJSHRjYmlBZ2NtVmtkV05sUTI5dGJXOXVLR052Ym5SbGVIUXNJQ2RTWldSMVkyVk5ZWGhUYUdGeVpXUW5MQ0JoZEhSeWFXSjFkR1Z6TENBbmJXRjRKeWs3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2NtVmtkV05sVFdsdVUyaGhjbVZrSUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwTENCaGRIUnlhV0oxZEdWek9pQlNaV1IxWTJWQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUhKbFpIVmpaVU52YlcxdmJpaGpiMjUwWlhoMExDQW5VbVZrZFdObFRXbHVVMmhoY21Wa0p5d2dZWFIwY21saWRYUmxjeXdnSjIxcGJpY3BPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUhKbFpIVmpaVkJ5YjJSVGFHRnlaV1FnUFNBb1kyOXVkR1Y0ZERvZ1EyOXRjSFYwWlVOdmJuUmxlSFFzSUdGMGRISnBZblYwWlhNNklGSmxaSFZqWlVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnY21Wa2RXTmxRMjl0Ylc5dUtHTnZiblJsZUhRc0lDZFNaV1IxWTJWUWNtOWtVMmhoY21Wa0p5d2dZWFIwY21saWRYUmxjeXdnSjNCeWIyUW5LVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCeVpXUjFZMlZUZFcxVGFHRnlaV1FnUFNBb1kyOXVkR1Y0ZERvZ1EyOXRjSFYwWlVOdmJuUmxlSFFzSUdGMGRISnBZblYwWlhNNklGSmxaSFZqWlVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnY21Wa2RXTmxRMjl0Ylc5dUtHTnZiblJsZUhRc0lDZFNaV1IxWTJWVGRXMVRhR0Z5WldRbkxDQmhkSFJ5YVdKMWRHVnpMQ0FuYzNWdEp5azdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnY21Wa2RXTmxVM1Z0VTNGMVlYSmxVMmhoY21Wa0lEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJTWldSMVkyVkJkSFJ5YVdKMWRHVnpLVG9nZG05cFpDQTlQaUI3WEc0Z0lISmxaSFZqWlVOdmJXMXZiaWhqYjI1MFpYaDBMQ0FuVW1Wa2RXTmxVM1Z0VTNGMVlYSmxVMmhoY21Wa0p5d2dZWFIwY21saWRYUmxjeXdnSjNOMWJWTnhkV0Z5WlNjcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSEpsWkhWalpVeHZaMU4xYlZOb1lYSmxaQ0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3pvZ1VtVmtkV05sUVhSMGNtbGlkWFJsY3lrNklIWnZhV1FnUFQ0Z2UxeHVJQ0J5WldSMVkyVkRiMjF0YjI0b1kyOXVkR1Y0ZEN3Z0oxSmxaSFZqWlV4dloxTjFiVk5vWVhKbFpDY3NJR0YwZEhKcFluVjBaWE1zSUNkc2IyZFRkVzBuS1R0Y2JuMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1JHRjBZVlI1Y0dWOUlHWnliMjBnSnk0dUx5NHVMeTR1TDNkaGMyMHRZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdWR1Z1YzI5eVZtbGxkMzBnWm5KdmJTQW5MaTR2TGk0dmRHVnVjMjl5TFhacFpYY25PMXh1YVcxd2IzSjBJSHRUYUdGd1pWVjBhV3g5SUdaeWIyMGdKeTR1THk0dUwzVjBhV3duTzF4dWFXMXdiM0owSUh0QmRIUnlhV0oxZEdWWGFYUm9RMkZqYUdWTFpYa3NJR055WldGMFpVRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlWDBnWm5KdmJTQW5MaTR2WVhSMGNtbGlkWFJsTFhkcGRHZ3RZMkZqYUdVdGEyVjVKenRjYm1sdGNHOXlkQ0I3UTI5dGNIVjBaVU52Ym5SbGVIUXNJRkJ5YjJkeVlXMUpibVp2TENCUWNtOW5jbUZ0VTJoaFpHVnlRMkZqYUdWSmJtWnZmU0JtY205dElDY3VMaTkwZVhCbGN5YzdYRzVjYm1sdGNHOXlkQ0I3WTNKbFlYUmxWR1Z1YzI5eVUyaGhjR1ZXWVhKcFlXSnNaWE1zSUVsdVpHbGpaWE5JWld4d1pYSXNJR2x1Y0hWMFZtRnlhV0ZpYkdVc0lHOTFkSEIxZEZaaGNtbGhZbXhsTENCVGFHRmtaWEpJWld4d1pYSjlJR1p5YjIwZ0p5NHZZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdjbVZrZFdObFRERlRhR0Z5WldRc0lISmxaSFZqWlV3eVUyaGhjbVZrTENCeVpXUjFZMlZNYjJkVGRXMUZlSEJUYUdGeVpXUXNJSEpsWkhWalpVeHZaMU4xYlZOb1lYSmxaQ3dnY21Wa2RXTmxUV0Y0VTJoaGNtVmtMQ0J5WldSMVkyVk5aV0Z1VTJoaGNtVmtMQ0J5WldSMVkyVk5hVzVUYUdGeVpXUXNJSEpsWkhWalpWQnliMlJUYUdGeVpXUXNJSEpsWkhWalpWTjFiVk5vWVhKbFpDd2djbVZrZFdObFUzVnRVM0YxWVhKbFUyaGhjbVZrZlNCbWNtOXRJQ2N1TDNKbFpIVmpaUzF6YUdGeVpXUW5PMXh1WEc1amIyNXpkQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5QTlJQ2hwYm5CMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFNrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JwWmlBb0lXbHVjSFYwY3lCOGZDQnBibkIxZEhNdWJHVnVaM1JvSUQwOVBTQXdJSHg4SUdsdWNIVjBjeTVzWlc1bmRHZ2dQaUF5S1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RTWldSMVkyVWdiM0FnY21WeGRXbHlaWE1nTVNCdmNpQXlJR2x1Y0hWMGN5NG5LVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBibkIxZEhNdWJHVnVaM1JvSUQwOVBTQXlJQ1ltSUdsdWNIVjBjMXN4WFM1a2FXMXpMbXhsYm1kMGFDQWhQVDBnTVNrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduU1c1MllXeHBaQ0JoZUdWeklHbHVjSFYwSUdScGJYTXVKeWs3WEc0Z0lIMWNibjA3WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1VtVmtkV05sUVhSMGNtbGlkWFJsY3lCbGVIUmxibVJ6SUVGMGRISnBZblYwWlZkcGRHaERZV05vWlV0bGVTQjdYRzRnSUd0bFpYQkVhVzF6T2lCaWIyOXNaV0Z1TzF4dUlDQnViMjl3VjJsMGFFVnRjSFI1UVhobGN6b2dZbTl2YkdWaGJqdGNiaUFnWVhobGN6b2diblZ0WW1WeVcxMDdYRzU5WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRkpsWkhWalpVOXdJRDFjYmlBZ0lDQW9hVzV3ZFhRNklFbHVaR2xqWlhOSVpXeHdaWElzSUc5MWRIQjFkRG9nU1c1a2FXTmxjMGhsYkhCbGNpeGNiaUFnSUNBZ1lYaGxjem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBwSUQwK0lGdHpkSEpwYm1jc0lITjBjbWx1Wnl3Z2MzUnlhVzVuTENCemRISnBibWNzSUM0dUxuTjBjbWx1WjF0ZFhUdGNibHh1WTI5dWMzUWdibTlQY0RvZ1VtVmtkV05sVDNBZ1BTQW9hVzV3ZFhRcElEMCtJRnNuSnl3Z0p5Y3NJR0IyWVhJZ2RtRnNkV1VnUFNBa2UybHVjSFYwTG1kbGRFSjVTVzVrYVdObGN5Z25hVzV3ZFhSZmFXNWthV05sY3ljcGZUdGdMQ0FuSjEwN1hHNWxlSEJ2Y25RZ1kyOXVjM1FnWTNKbFlYUmxVbVZrZFdObFVISnZaM0poYlVsdVptOGdQVnh1SUNBZ0lDaHVZVzFsT2lCemRISnBibWNzSUhOb1lXUmxja05oWTJobE9pQlFjbTluY21GdFUyaGhaR1Z5UTJGamFHVkpibVp2TENCcGJuQjFkSE02SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhTd2djbVZrZFdObFQzQTZJRkpsWkhWalpVOXdMRnh1SUNBZ0lDQmhlR1Z6U1c1d2RYUTZJRzUxYldKbGNsdGRMQ0J2ZFhSd2RYUkVZWFJoVkhsd1pUb2dSR0YwWVZSNWNHVXNJR3RsWlhCRWFXMXpJRDBnWm1Gc2MyVXNJRzV2YjNCWGFYUm9SVzF3ZEhsQmVHVnpJRDBnWm1Gc2MyVXBPaUJRY205bmNtRnRTVzVtYnlBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCdmRYUndkWFJUYUdGd1pUb2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMFUyaGhjR1VnUFNCcGJuQjFkSE5iTUYwdVpHbHRjenRjYmlBZ0lDQWdJR052Ym5OMElHbHVjSFYwVW1GdWF5QTlJR2x1Y0hWMFUyaGhjR1V1YkdWdVozUm9PMXh1SUNBZ0lDQWdZMjl1YzNRZ1lYaGxjeUE5SUZOb1lYQmxWWFJwYkM1dWIzSnRZV3hwZW1WQmVHVnpLR0Y0WlhOSmJuQjFkQ3dnYVc1d2RYUlNZVzVyS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSEpsWkhWalpVOXVRV3hzUVhobGN5QTlJQ0Z1YjI5d1YybDBhRVZ0Y0hSNVFYaGxjeUFtSmlCaGVHVnpMbXhsYm1kMGFDQTlQVDBnTUR0Y2JpQWdJQ0FnSUdsdWNIVjBVMmhoY0dVdVptOXlSV0ZqYUNnb1pDd2dhU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvY21Wa2RXTmxUMjVCYkd4QmVHVnpJSHg4SUdGNFpYTXVhVzVrWlhoUFppaHBLU0ErUFNBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHdGxaWEJFYVcxektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCdmRYUndkWFJUYUdGd1pTNXdkWE5vS0RFcE8xeHVJQ0FnSUNBZ0lDQWdJSDBnSUM4dklHVnNjMlVnZXlBdkx5QnphMmx3SUhSb2FYTWdZWGhwYzMxY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSVGFHRndaUzV3ZFhOb0tHUXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUdOdmJuTjBJRzkxZEhCMWRGSmhibXNnUFNCdmRYUndkWFJUYUdGd1pTNXNaVzVuZEdnN1hHNGdJQ0FnSUNCamIyNXpkQ0J2ZFhSd2RYUlRhWHBsSUQwZ1UyaGhjR1ZWZEdsc0xuTnBlbVVvYjNWMGNIVjBVMmhoY0dVcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxJRDBnS0hOb1lXUmxja2hsYkhCbGNqb2dVMmhoWkdWeVNHVnNjR1Z5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHbGtlRU52Y0hrNklITjBjbWx1WjF0ZElEMGdXMTA3SUNBdkx5QmpiM0I1SUc5MWRIQjFkQ0JwYm1SbGVHVnpJSFJ2SUdsdWNIVjBJR2x1WkdWNFpYTmNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBibkIxZENBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjE5Qkp5d2dhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxMQ0JwYm5CMWRGSmhibXNwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J2ZFhSd2RYUWdQU0J2ZFhSd2RYUldZWEpwWVdKc1pTZ25iM1YwY0hWMEp5d2diM1YwY0hWMFJHRjBZVlI1Y0dVc0lHOTFkSEIxZEZKaGJtc3BPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnZjSE1nUFNCeVpXUjFZMlZQY0NocGJuQjFkQ3dnYjNWMGNIVjBMQ0JoZUdWektUdGNiaUFnSUNBZ0lDQWdiR1YwSUhKbFpIVmpaVTl3Y3lBOUlHOXdjMXN5WFR0Y2JseHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnJJRDBnTUN3Z2JDQTlJREE3SUdzZ1BDQnBibkIxZEZKaGJtczdJR3NyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUdsbUlIUm9hWE1nWVhocGN5QnBjeUJ5WldSMVkyVmtYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxaSFZqWlU5dVFXeHNRWGhsY3lCOGZDQmhlR1Z6TG1sdVpHVjRUMllvYXlrZ1BqMGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0d0bFpYQkVhVzF6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUd3ckt6dGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUd4dmIzQWdiM1psY2lCMGFHVWdaQzEwYUNCaGVHbHpYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpXUjFZMlZQY0hNZ1BTQmdabTl5S0haaGNpQnFKSHRyZlRvZ2RUTXlJRDBnTURzZ2FpUjdhMzBnUENBa2UybHVjSFYwVTJoaGNHVmJhMTE5T3lCcUpIdHJmU3NyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtlMjl3YzFzeVhTNXBibU5zZFdSbGN5Z25iR0Z6ZEY5cGJtUmxlQ2NwSUQ4Z1lHeGxkQ0JzWVhOMFgybHVaR1Y0SUQwZ2FpUjdhMzA3WUNBNklDY25mVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkh0cGJuQjFkQzVwYm1ScFkyVnpVMlYwS0NkcGJuQjFkRjlwYm1ScFkyVnpKeXdnYXl3Z1lHb2tlMnQ5WUNsOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtlM0psWkhWalpVOXdjMzFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WUR0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdSNFEyOXdlUzV3ZFhOb0tHQWtlMmx1Y0hWMExtbHVaR2xqWlhOVFpYUW9KMmx1Y0hWMFgybHVaR2xqWlhNbkxDQnJMQ0J2ZFhSd2RYUXVhVzVrYVdObGMwZGxkQ2duYjNWMGNIVjBYMmx1WkdsalpYTW5MQ0JzS1NsOU8yQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JDc3JPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lGeHVYRzRnSUNBZ0lDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxuSmxaMmx6ZEdWeVZXNXBabTl5YlNnbmIzVjBjSFYwWDNOcGVtVW5MQ0FuZFRNeUp5a3VaR1ZqYkdGeVpWWmhjbWxoWW14bGN5aHBibkIxZEN3Z2IzVjBjSFYwS1gxY2JseHVJQ0FnSUNBZ0lDQWtlM05vWVdSbGNraGxiSEJsY2k1dFlXbHVVM1JoY25Rb0tYMWNiaUFnSUNBZ0lDQWdJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNW5kV0Z5WkVGbllXbHVjM1JQZFhSUFprSnZkVzVrYzFkdmNtdG5jbTkxY0ZOcGVtVnpLQ2QxYm1sbWIzSnRjeTV2ZFhSd2RYUmZjMmw2WlNjcGZWeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCcGJuQjFkRjlwYm1ScFkyVnpPaUFrZTJsdWNIVjBMblI1Y0dVdWFXNWthV05sYzMwN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUc5MWRIQjFkRjlwYm1ScFkyVnpJRDBnSkh0dmRYUndkWFF1YjJabWMyVjBWRzlKYm1ScFkyVnpLQ2RuYkc5aVlXeGZhV1I0SnlsOU8xeHVYRzRnSUNBZ0lDQWdJQ0FnSkh0cFpIaERiM0I1TG1wdmFXNG9KMXhjYmljcGZWeHVJQ0FnSUNBZ0lDQWdJQ1I3YjNCeld6QmRmU0FnSUNBZ0lDQXZMeUJwYm1sMElHOXdjeUJtYjNJZ2NtVmtkV05sSUcxaGVDOXRhVzVjYmlBZ0lDQWdJQ0FnSUNBa2UyOXdjMXN4WFgxY2JpQWdJQ0FnSUNBZ0lDQWtlM0psWkhWalpVOXdjMzFjYmlBZ0lDQWdJQ0FnSUNBa2UyOXdjMXN6WFgxY2JpQWdJQ0FnSUNBZ0lDQWtlMjl3Y3k1c1pXNW5kR2dnUFQwOUlEUWdQeUJ2ZFhSd2RYUXVjMlYwUW5sUFptWnpaWFFvSjJkc2IySmhiRjlwWkhnbkxDQW5kbUZzZFdVbktTQTZJRzl3Y3k1emJHbGpaU2cwS1M1cWIybHVLQ2RjWEc0bktYMWNiaUFnSUNBZ0lDQWdmV0E3WEc0Z0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnSUNCdVlXMWxMRnh1SUNBZ0lDQWdJQ0J6YUdGa1pYSkRZV05vWlN4Y2JpQWdJQ0FnSUNBZ1oyVjBVMmhoWkdWeVUyOTFjbU5sTEZ4dUlDQWdJQ0FnSUNCblpYUlNkVzVFWVhSaE9pQW9LU0E5UGlBb2UxeHVJQ0FnSUNBZ0lDQWdJRzkxZEhCMWRITTZJRnQ3WkdsdGN6b2diM1YwY0hWMFUyaGhjR1VzSUdSaGRHRlVlWEJsT2lCdmRYUndkWFJFWVhSaFZIbHdaWDFkTEZ4dUlDQWdJQ0FnSUNBZ0lHUnBjM0JoZEdOb1IzSnZkWEE2SUh0NE9pQk5ZWFJvTG1ObGFXd29iM1YwY0hWMFUybDZaU0F2SURZMElDOHFJSGR2Y210bmNtOTFjQ0J6YVhwbElDb3ZLWDBzWEc0Z0lDQWdJQ0FnSUNBZ2NISnZaM0poYlZWdWFXWnZjbTF6T2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JiZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2IzVjBjSFYwVTJsNlpYMHNJQzR1TG1OeVpXRjBaVlJsYm5OdmNsTm9ZWEJsVm1GeWFXRmliR1Z6S0dsdWNIVjBVMmhoY0dVc0lHOTFkSEIxZEZOb1lYQmxLVjFjYmlBZ0lDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNCOU8xeHVJQ0FnSUgwN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCamNtVmhkR1ZTWldSMVkyVkJkSFJ5YVdKMWRHVnpSbkp2YlVsdWNIVjBjeUE5WEc0Z0lDQWdLR2x1Y0hWMGN6b2djbVZoWkc5dWJIa2dWR1Z1YzI5eVZtbGxkMXRkTENCaGRIUnlhV0oxZEdWek9pQlNaV1IxWTJWQmRIUnlhV0oxZEdWektUb2dVbVZrZFdObFFYUjBjbWxpZFhSbGN5QTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQmhlR1Z6T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNBZ0lDQWdhV1lnS0dsdWNIVjBjMXN4WFM1a2FXMXpXekJkSUQ0Z01Da2dlMXh1SUNBZ0lDQWdJQ0JwYm5CMWRITmJNVjB1WjJWMFFtbG5TVzUwTmpSQmNuSmhlU2dwTG1admNrVmhZMmdvZGlBOVBpQmhlR1Z6TG5CMWMyZ29UblZ0WW1WeUtIWXBLU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZM0psWVhSbFFYUjBjbWxpZFhSbFYybDBhRU5oWTJobFMyVjVLRnh1SUNBZ0lDQWdJQ0FnSUh0aGVHVnpMQ0JyWldWd1JHbHRjem9nWVhSMGNtbGlkWFJsY3k1clpXVndSR2x0Y3l3Z2JtOXZjRmRwZEdoRmJYQjBlVUY0WlhNNklHRjBkSEpwWW5WMFpYTXVibTl2Y0ZkcGRHaEZiWEIwZVVGNFpYTjlLVHRjYmlBZ0lDQjlPMXh1WEc1amIyNXpkQ0J5ZFc1U1pXUjFZMlZRY205bmNtRnRJRDFjYmlBZ0lDQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHNWhiV1U2SUhOMGNtbHVaeXdnWVhSMGNtbGlkWFJsY3pvZ1VtVmtkV05sUVhSMGNtbGlkWFJsY3l3Z2NtVmtkV05sVDNBNklGSmxaSFZqWlU5d0tUb2dkbTlwWkNBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCcGJuQjFkSE1nUFNCamIyNTBaWGgwTG1sdWNIVjBjenRjYmlBZ0lDQWdJR052Ym5OMElIVndaR0YwWldSQmRIUnlhV0oxZEdWek9pQlNaV1IxWTJWQmRIUnlhV0oxZEdWeklEMWNiaUFnSUNBZ0lDQWdJQ0JwYm5CMWRITXViR1Z1WjNSb0lEMDlQU0F4SUQ4Z1lYUjBjbWxpZFhSbGN5QTZJR055WldGMFpWSmxaSFZqWlVGMGRISnBZblYwWlhOR2NtOXRTVzV3ZFhSektHbHVjSFYwY3l3Z1lYUjBjbWxpZFhSbGN5azdYRzVjYmlBZ0lDQWdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGNiaUFnSUNBZ0lDQWdJQ0JqY21WaGRHVlNaV1IxWTJWUWNtOW5jbUZ0U1c1bWJ5aGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JtRnRaU3dnZTJocGJuUTZJSFZ3WkdGMFpXUkJkSFJ5YVdKMWRHVnpMbU5oWTJobFMyVjVMQ0JwYm5CMWRFUmxjR1Z1WkdWdVkybGxjem9nV3lkeVlXNXJKMTE5TENCYmFXNXdkWFJ6V3pCZFhTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RYQmtZWFJsWkVGMGRISnBZblYwWlhNdWJtOXZjRmRwZEdoRmJYQjBlVUY0WlhNZ0ppWWdkWEJrWVhSbFpFRjBkSEpwWW5WMFpYTXVZWGhsY3k1c1pXNW5kR2dnUFQwOUlEQWdQeUJ1YjA5d0lEb2djbVZrZFdObFQzQXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIVndaR0YwWldSQmRIUnlhV0oxZEdWekxtRjRaWE1zSUdsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlN3Z2RYQmtZWFJsWkVGMGRISnBZblYwWlhNdWEyVmxjRVJwYlhNc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhWd1pHRjBaV1JCZEhSeWFXSjFkR1Z6TG01dmIzQlhhWFJvUlcxd2RIbEJlR1Z6S1N4Y2JpQWdJQ0FnSUNBZ0lDQjdhVzV3ZFhSek9pQmJNRjE5S1R0Y2JpQWdJQ0I5TzF4dVhHNWpiMjV6ZENCeVpXUjFZMlZNYjJkVGRXMU9ZV2wyWlNBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN6b2dVbVZrZFdObFFYUjBjbWxpZFhSbGN5azZJSFp2YVdRZ1BUNGdlMXh1SUNCMllXeHBaR0YwWlVsdWNIVjBjeWhqYjI1MFpYaDBMbWx1Y0hWMGN5azdYRzRnSUdOdmJuTjBJSEpsWkhWalpVOXdPaUJTWldSMVkyVlBjQ0E5SUNocGJuQjFkQ3dnYjNWMGNIVjBLU0E5UGx4dUlDQWdJQ0FnVzJCMllYSWdkbUZzZFdVZ1BTQWtlMjkxZEhCMWRDNTBlWEJsTG5OMGIzSmhaMlY5S0RBcE8yQXNYRzRnSUNBZ0lDQWdKeWNzWEc0Z0lDQWdJQ0FnWUhaaGJIVmxJQ3M5SUNSN2FXNXdkWFF1WjJWMFFubEpibVJwWTJWektDZHBibkIxZEY5cGJtUnBZMlZ6SnlsOU8yQXNYRzRnSUNBZ0lDQWdKM1poYkhWbElEMGdiRzluS0haaGJIVmxLVHNuTEZ4dUlDQmRPMXh1SUNCeWRXNVNaV1IxWTJWUWNtOW5jbUZ0S0dOdmJuUmxlSFFzSUNkU1pXUjFZMlZNYjJkVGRXMG5MQ0JoZEhSeWFXSjFkR1Z6TENCeVpXUjFZMlZQY0NrN1hHNTlPMXh1WEc1amIyNXpkQ0J5WldSMVkyVk1NVTVoYVhabElEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJTWldSMVkyVkJkSFJ5YVdKMWRHVnpLVG9nZG05cFpDQTlQaUI3WEc0Z0lIWmhiR2xrWVhSbFNXNXdkWFJ6S0dOdmJuUmxlSFF1YVc1d2RYUnpLVHRjYmlBZ1kyOXVjM1FnY21Wa2RXTmxUM0E2SUZKbFpIVmpaVTl3SUQwZ0tHbHVjSFYwTENCdmRYUndkWFFwSUQwK1hHNGdJQ0FnSUNCYllIWmhjaUIyWVd4MVpTQTlJQ1I3YjNWMGNIVjBMblI1Y0dVdWMzUnZjbUZuWlgwb01DazdZQ3hjYmlBZ0lDQWdJQ0FuSnl4Y2JpQWdJQ0FnSUNCZ2RtRnNkV1VnS3owZ1lXSnpLQ1I3YVc1d2RYUXVaMlYwUW5sSmJtUnBZMlZ6S0NkcGJuQjFkRjlwYm1ScFkyVnpKeWw5S1R0Z0xGeHVJQ0FnSUNBZ0lDY25MRnh1SUNCZE8xeHVJQ0J5ZFc1U1pXUjFZMlZRY205bmNtRnRLR052Ym5SbGVIUXNJQ2RTWldSMVkyVk1NU2NzSUdGMGRISnBZblYwWlhNc0lISmxaSFZqWlU5d0tUdGNibjA3WEc1Y2JtTnZibk4wSUhKbFpIVmpaVXd5VG1GcGRtVWdQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXNJR0YwZEhKcFluVjBaWE02SUZKbFpIVmpaVUYwZEhKcFluVjBaWE1wT2lCMmIybGtJRDArSUh0Y2JpQWdkbUZzYVdSaGRHVkpibkIxZEhNb1kyOXVkR1Y0ZEM1cGJuQjFkSE1wTzF4dUlDQmpiMjV6ZENCeVpXUjFZMlZQY0RvZ1VtVmtkV05sVDNBZ1BTQW9hVzV3ZFhRc0lHOTFkSEIxZENrZ1BUNWNiaUFnSUNBZ0lGdGdkbUZ5SUhRZ1BTQWtlMjkxZEhCMWRDNTBlWEJsTG5aaGJIVmxmU2d3S1RzZ2RtRnlJSFpoYkhWbElEMGdKSHR2ZFhSd2RYUXVkSGx3WlM1MllXeDFaWDBvTUNrN1lDeGNiaUFnSUNBZ0lDQW5KeXhjYmlBZ0lDQWdJQ0JnZENBOUlDUjdhVzV3ZFhRdVoyVjBRbmxKYm1ScFkyVnpLQ2RwYm5CMWRGOXBibVJwWTJWekp5bDlPeUIyWVd4MVpTQXJQU0FvZENBcUlIUXBPMkFzWEc0Z0lDQWdJQ0FnSjNaaGJIVmxJRDBnYzNGeWRDaDJZV3gxWlNrN0p5eGNiaUFnWFR0Y2JpQWdjblZ1VW1Wa2RXTmxVSEp2WjNKaGJTaGpiMjUwWlhoMExDQW5VbVZrZFdObFRESW5MQ0JoZEhSeWFXSjFkR1Z6TENCeVpXUjFZMlZQY0NrN1hHNTlPMXh1WEc1amIyNXpkQ0J5WldSMVkyVk1iMmRUZFcxRmVIQk9ZV2wyWlNBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN6b2dVbVZrZFdObFFYUjBjbWxpZFhSbGN5azZJSFp2YVdRZ1BUNGdlMXh1SUNCMllXeHBaR0YwWlVsdWNIVjBjeWhqYjI1MFpYaDBMbWx1Y0hWMGN5azdYRzRnSUdOdmJuTjBJSEpsWkhWalpVOXdPaUJTWldSMVkyVlBjQ0E5SUNocGJuQjFkQ3dnYjNWMGNIVjBLU0E5UGx4dUlDQWdJQ0FnVzJCMllYSWdkbUZzZFdVZ1BTQWtlMjkxZEhCMWRDNTBlWEJsTG5OMGIzSmhaMlY5S0RBcE8yQXNYRzRnSUNBZ0lDQWdKeWNzWEc0Z0lDQWdJQ0FnWUhaaGJIVmxJQ3M5SUdWNGNDZ2tlMmx1Y0hWMExtZGxkRUo1U1c1a2FXTmxjeWduYVc1d2RYUmZhVzVrYVdObGN5Y3BmU2s3WUN4Y2JpQWdJQ0FnSUNBbmRtRnNkV1VnUFNCc2IyY29kbUZzZFdVcE95Y3NYRzRnSUYwN1hHNGdJSEoxYmxKbFpIVmpaVkJ5YjJkeVlXMG9ZMjl1ZEdWNGRDd2dKMUpsWkhWalpVeHZaMU4xYlVWNGNDY3NJR0YwZEhKcFluVjBaWE1zSUhKbFpIVmpaVTl3S1R0Y2JuMDdYRzVjYm1OdmJuTjBJSEpsWkhWalpVMWhlRTVoYVhabElEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJTWldSMVkyVkJkSFJ5YVdKMWRHVnpLVG9nZG05cFpDQTlQaUI3WEc0Z0lIWmhiR2xrWVhSbFNXNXdkWFJ6S0dOdmJuUmxlSFF1YVc1d2RYUnpLVHRjYmlBZ1kyOXVjM1FnY21Wa2RXTmxUM0E2SUZKbFpIVmpaVTl3SUQwZ0tHbHVjSFYwTENCZmIzVjBjSFYwTENCaGVHVnpLU0E5UGlCN1hHNGdJQ0FnWTI5dWMzUWdhV1I0V21WeWJ5QTlJRnRkTzF4dUlDQWdJR1p2Y2lBb2JHVjBJR3NnUFNBd095QnJJRHdnYVc1d2RYUXVjbUZ1YXpzZ2F5c3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb1lYaGxjeTVwYm1SbGVFOW1LR3NwSUQ0OUlEQWdmSHdnWVhobGN5NXNaVzVuZEdnZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2FXUjRXbVZ5Ynk1d2RYTm9LR2x1Y0hWMExtbHVaR2xqWlhOVFpYUW9KMmx1Y0hWMFgybHVaR2xqWlhNbkxDQnJMQ0F3S1NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJRnRjYmlBZ0lDQWdJR0FrZTJsa2VGcGxjbTh1YW05cGJpZ25YRnh1SnlsOVlDeGNiaUFnSUNBZ0lHQjJZWElnZG1Gc2RXVWdQU0FrZTJsdWNIVjBMbWRsZEVKNVNXNWthV05sY3lnbmFXNXdkWFJmYVc1a2FXTmxjeWNwZlR0Z0xGeHVJQ0FnSUNBZ1lIWmhiSFZsSUQwZ2JXRjRLSFpoYkhWbExDQWtlMmx1Y0hWMExtZGxkRUo1U1c1a2FXTmxjeWduYVc1d2RYUmZhVzVrYVdObGN5Y3BmU2s3WUN4Y2JpQWdJQ0FnSUNjbkxGeHVJQ0FnSUYwN1hHNGdJSDA3WEc0Z0lISjFibEpsWkhWalpWQnliMmR5WVcwb1kyOXVkR1Y0ZEN3Z0oxSmxaSFZqWlUxaGVDY3NJR0YwZEhKcFluVjBaWE1zSUhKbFpIVmpaVTl3S1R0Y2JuMDdYRzVjYm1OdmJuTjBJSEpsWkhWalpVMWxZVzVPWVdsMlpTQTlJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDd2dZWFIwY21saWRYUmxjem9nVW1Wa2RXTmxRWFIwY21saWRYUmxjeWs2SUhadmFXUWdQVDRnZTF4dUlDQjJZV3hwWkdGMFpVbHVjSFYwY3loamIyNTBaWGgwTG1sdWNIVjBjeWs3WEc0Z0lHTnZibk4wSUhKbFpIVmpaVTl3T2lCU1pXUjFZMlZQY0NBOUlDaHBibkIxZEN3Z2IzVjBjSFYwTENCaGVHVnpLU0E5UGlCN1hHNGdJQ0FnYkdWMElITnBlbVVnUFNBeExqQTdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2F5QTlJREE3SUdzZ1BDQnBibkIxZEM1eVlXNXJPeUJyS3lzcElIdGNiaUFnSUNBZ0lHbG1JQ2hoZUdWekxtbHVaR1Y0VDJZb2F5a2dQajBnTUNCOGZDQmhlR1Z6TG14bGJtZDBhQ0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0F2THlCVVQwUlBPaUIwYUdseklHUmxjR1Z1WkhNZ2IyNGdkR2hsSUdsdWNIVjBJR1JwYlhNdUlFbG1JSGRsSUhkaGJuUWdkRzhnZFhObElIVnVhV1p2Y20wc0lIUm9hWE1nYm1WbFpDQjBieUJpWlNCMWNHUmhkR1ZrTGx4dUlDQWdJQ0FnSUNCemFYcGxJQ285SUdOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1ScGJYTmJhMTA3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlGdGNiaUFnSUNBZ0lDZDJZWElnYzNWdElEMGdaak15S0RBcE95Y3NYRzRnSUNBZ0lDQW5KeXhjYmlBZ0lDQWdJR0J6ZFcwZ0t6MGdaak15S0NSN2FXNXdkWFF1WjJWMFFubEpibVJwWTJWektDZHBibkIxZEY5cGJtUnBZMlZ6SnlsOUtUdGdMRnh1SUNBZ0lDQWdZR3hsZENCMllXeDFaU0E5SUNSN2IzVjBjSFYwTG5SNWNHVXVkbUZzZFdWOUtITjFiU0F2SUNSN2MybDZaWDBwTzJBc1hHNGdJQ0FnWFR0Y2JpQWdmVHRjYmlBZ2NuVnVVbVZrZFdObFVISnZaM0poYlNoamIyNTBaWGgwTENBblVtVmtkV05sVFdWaGJpY3NJR0YwZEhKcFluVjBaWE1zSUhKbFpIVmpaVTl3S1R0Y2JuMDdYRzVjYm1OdmJuTjBJSEpsWkhWalpVMXBiazVoYVhabElEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJTWldSMVkyVkJkSFJ5YVdKMWRHVnpLVG9nZG05cFpDQTlQaUI3WEc0Z0lIWmhiR2xrWVhSbFNXNXdkWFJ6S0dOdmJuUmxlSFF1YVc1d2RYUnpLVHRjYmlBZ1kyOXVjM1FnY21Wa2RXTmxUM0E2SUZKbFpIVmpaVTl3SUQwZ0tHbHVjSFYwTENCZmIzVjBjSFYwTENCaGVHVnpLU0E5UGlCN1hHNGdJQ0FnWTI5dWMzUWdhV1I0V21WeWJ5QTlJRnRkTzF4dUlDQWdJR1p2Y2lBb2JHVjBJR3NnUFNBd095QnJJRHdnYVc1d2RYUXVjbUZ1YXpzZ2F5c3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb1lYaGxjeTVwYm1SbGVFOW1LR3NwSUQ0OUlEQWdmSHdnWVhobGN5NXNaVzVuZEdnZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2FXUjRXbVZ5Ynk1d2RYTm9LR0JwYm5CMWRGOXBibVJwWTJWeld5UjdhMzFkSUQwZ01EdGdLVHNnSUM4dklHWnBjbk4wSUdWc1pXMWxiblJjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z1cxeHVJQ0FnSUNBZ1lDUjdhV1I0V21WeWJ5NXFiMmx1S0NkY1hHNG5LWDFnTEZ4dUlDQWdJQ0FnWUhaaGNpQjJZV3gxWlNBOUlDUjdhVzV3ZFhRdVoyVjBRbmxKYm1ScFkyVnpLQ2RwYm5CMWRGOXBibVJwWTJWekp5bDlPMkFzWEc0Z0lDQWdJQ0JnZG1Gc2RXVWdQU0J0YVc0b2RtRnNkV1VzSUNSN2FXNXdkWFF1WjJWMFFubEpibVJwWTJWektDZHBibkIxZEY5cGJtUnBZMlZ6SnlsOUtUdGdMRnh1SUNBZ0lDQWdKeWNzWEc0Z0lDQWdYVHRjYmlBZ2ZUdGNiaUFnY25WdVVtVmtkV05sVUhKdlozSmhiU2hqYjI1MFpYaDBMQ0FuVW1Wa2RXTmxUV2x1Snl3Z1lYUjBjbWxpZFhSbGN5d2djbVZrZFdObFQzQXBPMXh1ZlR0Y2JseHVZMjl1YzNRZ2NtVmtkV05sVUhKdlpFNWhhWFpsSUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwTENCaGRIUnlhV0oxZEdWek9pQlNaV1IxWTJWQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUhaaGJHbGtZWFJsU1c1d2RYUnpLR052Ym5SbGVIUXVhVzV3ZFhSektUdGNiaUFnWTI5dWMzUWdjbVZrZFdObFQzQTZJRkpsWkhWalpVOXdJRDBnS0dsdWNIVjBMQ0J2ZFhSd2RYUXBJRDArWEc0Z0lDQWdJQ0JiWUhaaGNpQjJZV3gxWlNBOUlDUjdiM1YwY0hWMExuUjVjR1V1YzNSdmNtRm5aWDBvTVNrN1lDeGNiaUFnSUNBZ0lDQW5KeXhjYmlBZ0lDQWdJQ0JnZG1Gc2RXVWdLajBnSkh0cGJuQjFkQzVuWlhSQ2VVbHVaR2xqWlhNb0oybHVjSFYwWDJsdVpHbGpaWE1uS1gwN1lDeGNiaUFnSUNBZ0lDQW5KeXhjYmlBZ1hUdGNiaUFnY25WdVVtVmtkV05sVUhKdlozSmhiU2hqYjI1MFpYaDBMQ0FuVW1Wa2RXTmxVSEp2WkNjc0lHRjBkSEpwWW5WMFpYTXNJSEpsWkhWalpVOXdLVHRjYm4wN1hHNWNibU52Ym5OMElISmxaSFZqWlZOMWJVNWhhWFpsSUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwTENCaGRIUnlhV0oxZEdWek9pQlNaV1IxWTJWQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUhaaGJHbGtZWFJsU1c1d2RYUnpLR052Ym5SbGVIUXVhVzV3ZFhSektUdGNiaUFnWTI5dWMzUWdjbVZrZFdObFQzQTZJRkpsWkhWalpVOXdJRDBnS0dsdWNIVjBMQ0J2ZFhSd2RYUXBJRDArWEc0Z0lDQWdJQ0JiWUhaaGNpQjJZV3gxWlNBOUlDUjdiM1YwY0hWMExuUjVjR1V1YzNSdmNtRm5aWDBvTUNrN1lDeGNiaUFnSUNBZ0lDQW5KeXhjYmlBZ0lDQWdJQ0JnZG1Gc2RXVWdLejBnSkh0cGJuQjFkQzVuWlhSQ2VVbHVaR2xqWlhNb0oybHVjSFYwWDJsdVpHbGpaWE1uS1gwN1lDeGNiaUFnSUNBZ0lDQW5KeXhjYmlBZ1hUdGNiaUFnY25WdVVtVmtkV05sVUhKdlozSmhiU2hqYjI1MFpYaDBMQ0FuVW1Wa2RXTmxVM1Z0Snl3Z1lYUjBjbWxpZFhSbGN5d2djbVZrZFdObFQzQXBPMXh1ZlR0Y2JseHVZMjl1YzNRZ2NtVmtkV05sVTNWdFUzRjFZWEpsVG1GcGRtVWdQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXNJR0YwZEhKcFluVjBaWE02SUZKbFpIVmpaVUYwZEhKcFluVjBaWE1wT2lCMmIybGtJRDArSUh0Y2JpQWdkbUZzYVdSaGRHVkpibkIxZEhNb1kyOXVkR1Y0ZEM1cGJuQjFkSE1wTzF4dUlDQmpiMjV6ZENCeVpXUjFZMlZQY0RvZ1VtVmtkV05sVDNBZ1BTQW9hVzV3ZFhRc0lHOTFkSEIxZENrZ1BUNWNiaUFnSUNBZ0lGdGdkbUZ5SUhRZ1BTQWtlMjkxZEhCMWRDNTBlWEJsTG5aaGJIVmxmU2d3S1RzZ2RtRnlJSFpoYkhWbElEMGdKSHR2ZFhSd2RYUXVkSGx3WlM1MllXeDFaWDBvTUNrN1lDeGNiaUFnSUNBZ0lDQW5KeXhjYmlBZ0lDQWdJQ0JnZENBOUlDUjdhVzV3ZFhRdVoyVjBRbmxKYm1ScFkyVnpLQ2RwYm5CMWRGOXBibVJwWTJWekp5bDlPeUIyWVd4MVpTQXJQU0IwSUNvZ2REdGdMRnh1SUNBZ0lDQWdJQ2NuTEZ4dUlDQmRPMXh1SUNCeWRXNVNaV1IxWTJWUWNtOW5jbUZ0S0dOdmJuUmxlSFFzSUNkU1pXUjFZMlZUZFcxVGNYVmhjbVVuTENCaGRIUnlhV0oxZEdWekxDQnlaV1IxWTJWUGNDazdYRzU5TzF4dVhHNWpiMjV6ZENCMWMyVk9ZV2wyWlZKbFpIVmpaVTFsZEdodlpDQTlYRzRnSUNBZ0tITm9ZWEJsT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z1lYaGxjem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBzSUc1dmIzQlhhWFJvUlcxd2RIbEJlR1Z6T2lCaWIyOXNaV0Z1S1RvZ1ltOXZiR1ZoYmlBOVBpQjdYRzRnSUNBZ0lDQnBaaUFvWVhobGN5NXNaVzVuZEdnZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1dmIzQlhhWFJvUlcxd2RIbEJlR1Z6TzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCc1pYUWdiM1YwY0hWMFUybDZaU0E5SURFN1hHNGdJQ0FnSUNCc1pYUWdjbVZrZFdObFUybDZaU0E5SURFN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCa2FXMGdQU0F3T3lCa2FXMGdQQ0JoZUdWekxteGxibWQwYURzZ1pHbHRLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR0Y0WlhNdWFXNWtaWGhQWmloa2FXMHBJRDA5UFNBdE1Ta2dlMXh1SUNBZ0lDQWdJQ0FnSUc5MWRIQjFkRk5wZW1VZ0tqMGdjMmhoY0dWYlpHbHRYVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpXUjFZMlZUYVhwbElDbzlJSE5vWVhCbFcyUnBiVjA3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0x5OGdWR2hsSUdOdmJtUnBkR2x2YmlCa1lYUmhJR2x6SUhabGNua2djbTkxWjJnc0lHRnNkR2h2ZFdkb0lHTnZibk5wWkdWeWFXNW5JSFJvWlNCamIzVnVkQ0J2WmlCRmVHVmpkWFJwYjI0Z1ZXNXBkQ0FvUlZVcExDQjBhR1VnY0c5MFpXNTBhV0ZzWEc0Z0lDQWdJQ0F2THlCM2IzSnJJR2R5YjNWd2N5QnBiaUJoSUVWVklHRnVaQ0IwYUdVZ1kyOTFiblJ6SUc5bUlHeHZiM0J6SUdsdUlIUm9aU0J1WVdsMlpTQmhibVFnYzJoaGNtVmtJRzFsZEdodlpITXNJR0ZzYzI4Z1pHOXBibWNnWlhod1pYSnBiV1Z1ZEhOY2JpQWdJQ0FnSUM4dklHOXVJSE52YldVZ2JXRmphR2x1WlhNdVhHNGdJQ0FnSUNCeVpYUjFjbTRnY21Wa2RXTmxVMmw2WlNBOElETXlJQ1ltSUc5MWRIQjFkRk5wZW1VZ1BpQXhNREkwTzF4dUlDQWdJSDA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J5WldSMVkyVk5aV0Z1SUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwTENCaGRIUnlhV0oxZEdWek9pQlNaV1IxWTJWQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUdsbUlDaDFjMlZPWVdsMlpWSmxaSFZqWlUxbGRHaHZaQ2hqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYUzVrYVcxekxDQmhkSFJ5YVdKMWRHVnpMbUY0WlhNc0lHRjBkSEpwWW5WMFpYTXVibTl2Y0ZkcGRHaEZiWEIwZVVGNFpYTXBLU0I3WEc0Z0lDQWdjbVZrZFdObFRXVmhiazVoYVhabEtHTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTXBPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsWkhWalpVMWxZVzVUYUdGeVpXUW9ZMjl1ZEdWNGRDd2dZWFIwY21saWRYUmxjeWs3WEc0Z0lIMWNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J5WldSMVkyVk1NU0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3pvZ1VtVmtkV05sUVhSMGNtbGlkWFJsY3lrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JwWmlBb2RYTmxUbUZwZG1WU1pXUjFZMlZOWlhSb2IyUW9ZMjl1ZEdWNGRDNXBibkIxZEhOYk1GMHVaR2x0Y3l3Z1lYUjBjbWxpZFhSbGN5NWhlR1Z6TENCaGRIUnlhV0oxZEdWekxtNXZiM0JYYVhSb1JXMXdkSGxCZUdWektTa2dlMXh1SUNBZ0lISmxaSFZqWlV3eFRtRnBkbVVvWTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3lrN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVmtkV05sVERGVGFHRnlaV1FvWTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3lrN1hHNGdJSDFjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCeVpXUjFZMlZNTWlBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN6b2dVbVZrZFdObFFYUjBjbWxpZFhSbGN5azZJSFp2YVdRZ1BUNGdlMXh1SUNCcFppQW9kWE5sVG1GcGRtVlNaV1IxWTJWTlpYUm9iMlFvWTI5dWRHVjRkQzVwYm5CMWRITmJNRjB1WkdsdGN5d2dZWFIwY21saWRYUmxjeTVoZUdWekxDQmhkSFJ5YVdKMWRHVnpMbTV2YjNCWGFYUm9SVzF3ZEhsQmVHVnpLU2tnZTF4dUlDQWdJSEpsWkhWalpVd3lUbUZwZG1Vb1kyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN5azdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdjbVZrZFdObFRESlRhR0Z5WldRb1kyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN5azdYRzRnSUgxY2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnlaV1IxWTJWTWIyZFRkVzFGZUhBZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRkpsWkhWalpVRjBkSEpwWW5WMFpYTXBPaUIyYjJsa0lEMCtJSHRjYmlBZ2FXWWdLSFZ6WlU1aGFYWmxVbVZrZFdObFRXVjBhRzlrS0dOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1ScGJYTXNJR0YwZEhKcFluVjBaWE11WVhobGN5d2dZWFIwY21saWRYUmxjeTV1YjI5d1YybDBhRVZ0Y0hSNVFYaGxjeWtwSUh0Y2JpQWdJQ0J5WldSMVkyVk1iMmRUZFcxRmVIQk9ZV2wyWlNoamIyNTBaWGgwTENCaGRIUnlhV0oxZEdWektUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnlaV1IxWTJWTWIyZFRkVzFGZUhCVGFHRnlaV1FvWTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3lrN1hHNGdJSDFjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCeVpXUjFZMlZOWVhnZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRkpsWkhWalpVRjBkSEpwWW5WMFpYTXBPaUIyYjJsa0lEMCtJSHRjYmlBZ2FXWWdLSFZ6WlU1aGFYWmxVbVZrZFdObFRXVjBhRzlrS0dOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1ScGJYTXNJR0YwZEhKcFluVjBaWE11WVhobGN5d2dZWFIwY21saWRYUmxjeTV1YjI5d1YybDBhRVZ0Y0hSNVFYaGxjeWtwSUh0Y2JpQWdJQ0J5WldSMVkyVk5ZWGhPWVdsMlpTaGpiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpLVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0J5WldSMVkyVk5ZWGhUYUdGeVpXUW9ZMjl1ZEdWNGRDd2dZWFIwY21saWRYUmxjeWs3WEc0Z0lIMWNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J5WldSMVkyVk5hVzRnUFNBb1kyOXVkR1Y0ZERvZ1EyOXRjSFYwWlVOdmJuUmxlSFFzSUdGMGRISnBZblYwWlhNNklGSmxaSFZqWlVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnYVdZZ0tIVnpaVTVoYVhabFVtVmtkV05sVFdWMGFHOWtLR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMbVJwYlhNc0lHRjBkSEpwWW5WMFpYTXVZWGhsY3l3Z1lYUjBjbWxpZFhSbGN5NXViMjl3VjJsMGFFVnRjSFI1UVhobGN5a3BJSHRjYmlBZ0lDQnlaV1IxWTJWTmFXNU9ZV2wyWlNoamIyNTBaWGgwTENCaGRIUnlhV0oxZEdWektUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnlaV1IxWTJWTmFXNVRhR0Z5WldRb1kyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN5azdYRzRnSUgxY2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnlaV1IxWTJWUWNtOWtJRDBnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBMQ0JoZEhSeWFXSjFkR1Z6T2lCU1pXUjFZMlZCZEhSeWFXSjFkR1Z6S1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR2xtSUNoMWMyVk9ZV2wyWlZKbFpIVmpaVTFsZEdodlpDaGpiMjUwWlhoMExtbHVjSFYwYzFzd1hTNWthVzF6TENCaGRIUnlhV0oxZEdWekxtRjRaWE1zSUdGMGRISnBZblYwWlhNdWJtOXZjRmRwZEdoRmJYQjBlVUY0WlhNcEtTQjdYRzRnSUNBZ2NtVmtkV05sVUhKdlpFNWhhWFpsS0dOdmJuUmxlSFFzSUdGMGRISnBZblYwWlhNcE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxaSFZqWlZCeWIyUlRhR0Z5WldRb1kyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN5azdYRzRnSUgxY2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnlaV1IxWTJWVGRXMGdQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXNJR0YwZEhKcFluVjBaWE02SUZKbFpIVmpaVUYwZEhKcFluVjBaWE1wT2lCMmIybGtJRDArSUh0Y2JpQWdhV1lnS0hWelpVNWhhWFpsVW1Wa2RXTmxUV1YwYUc5a0tHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExtUnBiWE1zSUdGMGRISnBZblYwWlhNdVlYaGxjeXdnWVhSMGNtbGlkWFJsY3k1dWIyOXdWMmwwYUVWdGNIUjVRWGhsY3lrcElIdGNiaUFnSUNCeVpXUjFZMlZUZFcxT1lXbDJaU2hqYjI1MFpYaDBMQ0JoZEhSeWFXSjFkR1Z6S1R0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCeVpXUjFZMlZUZFcxVGFHRnlaV1FvWTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3lrN1hHNGdJSDFjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCeVpXUjFZMlZUZFcxVGNYVmhjbVVnUFNBb1kyOXVkR1Y0ZERvZ1EyOXRjSFYwWlVOdmJuUmxlSFFzSUdGMGRISnBZblYwWlhNNklGSmxaSFZqWlVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnYVdZZ0tIVnpaVTVoYVhabFVtVmtkV05sVFdWMGFHOWtLR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMbVJwYlhNc0lHRjBkSEpwWW5WMFpYTXVZWGhsY3l3Z1lYUjBjbWxpZFhSbGN5NXViMjl3VjJsMGFFVnRjSFI1UVhobGN5a3BJSHRjYmlBZ0lDQnlaV1IxWTJWVGRXMVRjWFZoY21WT1lXbDJaU2hqYjI1MFpYaDBMQ0JoZEhSeWFXSjFkR1Z6S1R0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCeVpXUjFZMlZUZFcxVGNYVmhjbVZUYUdGeVpXUW9ZMjl1ZEdWNGRDd2dZWFIwY21saWRYUmxjeWs3WEc0Z0lIMWNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J5WldSMVkyVk1iMmRUZFcwZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRkpsWkhWalpVRjBkSEpwWW5WMFpYTXBPaUIyYjJsa0lEMCtJSHRjYmlBZ2FXWWdLSFZ6WlU1aGFYWmxVbVZrZFdObFRXVjBhRzlrS0dOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1ScGJYTXNJR0YwZEhKcFluVjBaWE11WVhobGN5d2dZWFIwY21saWRYUmxjeTV1YjI5d1YybDBhRVZ0Y0hSNVFYaGxjeWtwSUh0Y2JpQWdJQ0J5WldSMVkyVk1iMmRUZFcxT1lXbDJaU2hqYjI1MFpYaDBMQ0JoZEhSeWFXSjFkR1Z6S1R0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCeVpXUjFZMlZNYjJkVGRXMVRhR0Z5WldRb1kyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN5azdYRzRnSUgxY2JuMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JpOHZJRlJQUkU4NklIUm9hWE1nYVhNZ2RHaGxJSE5oYldVZ2JtRnBkbVVnYVcxd2JHVnRaVzUwWVhScGIyNGdkMlVnZFhObElHWnZjaUJ5WldSMVkyVWdkR2hoZENCb1lYTmNiaTh2SUhCbGNtWnZjbTFoYm1ObElHeHBiV2wwWVhScGIyNXpJSGRvWlc0Z2RHaGxJSEpsWkhWalpXUWdZWGhwY3lCcGN5QnNiMjVuTGlCT1pXVmtJSFJ2SUdGa1pGeHVMeThnWVNCdmNIUnBiV2w2WldRZ1kyOWtaWEJoZEdnZ1ptOXlJSFJvYVhNdVhHNWNibWx0Y0c5eWRDQjdSR0YwWVZSNWNHVjlJR1p5YjIwZ0p5NHVMeTR1THk0dUwzZGhjMjB0WTI5dGJXOXVKenRjYm1sdGNHOXlkQ0I3VkdWdWMyOXlWbWxsZDMwZ1puSnZiU0FuTGk0dkxpNHZkR1Z1YzI5eUxYWnBaWGNuTzF4dWFXMXdiM0owSUh0QmRIUnlhV0oxZEdWWGFYUm9RMkZqYUdWTFpYa3NJR055WldGMFpVRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlWDBnWm5KdmJTQW5MaTR2WVhSMGNtbGlkWFJsTFhkcGRHZ3RZMkZqYUdVdGEyVjVKenRjYm1sdGNHOXlkQ0I3UTI5dGNIVjBaVU52Ym5SbGVIUjlJR1p5YjIwZ0p5NHVMM1I1Y0dWekp6dGNibHh1YVcxd2IzSjBJSHRqY21WaGRHVlNaV1IxWTJWUWNtOW5jbUZ0U1c1bWJ5d2dVbVZrZFdObFQzQjlJR1p5YjIwZ0p5NHZjbVZrZFdObEp6dGNibHh1WTI5dWMzUWdkbUZzYVdSaGRHVkpibkIxZEhNZ1BTQW9hVzV3ZFhSek9pQnlaV0ZrYjI1c2VTQlVaVzV6YjNKV2FXVjNXMTBwT2lCMmIybGtJRDArSUh0Y2JpQWdhV1lnS0NGcGJuQjFkSE1nZkh3Z2FXNXdkWFJ6TG14bGJtZDBhQ0E5UFQwZ01DQjhmQ0JwYm5CMWRITXViR1Z1WjNSb0lENGdNaWtnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RWEpuVFdsdVRXRjRUM0FnYjNBZ2NtVnhkV2x5WlhNZ01TQnZjaUF5SUdsdWNIVjBjeTRuS1R0Y2JpQWdmVnh1SUNCcFppQW9hVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxJQ0U5UFNCRVlYUmhWSGx3WlM1bWJHOWhkQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25TVzUyWVd4cFpDQnBibkIxZENCMGVYQmxMaWNwTzF4dUlDQjlYRzU5TzF4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFRnlaMDFwYmsxaGVFRjBkSEpwWW5WMFpYTWdaWGgwWlc1a2N5QkJkSFJ5YVdKMWRHVlhhWFJvUTJGamFHVkxaWGtnZTF4dUlDQnJaV1Z3UkdsdGN6b2dZbTl2YkdWaGJqdGNiaUFnWVhocGN6b2diblZ0WW1WeU8xeHVJQ0J6Wld4bFkzUk1ZWE4wU1c1a1pYZzZJRzUxYldKbGNqdGNibjFjYmx4dVpYaHdiM0owSUdOdmJuTjBJR0Z5WjAxcGJpQTlJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDd2dZWFIwY21saWRYUmxjem9nUVhKblRXbHVUV0Y0UVhSMGNtbGlkWFJsY3lrNklIWnZhV1FnUFQ0Z2UxeHVJQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5aGpiMjUwWlhoMExtbHVjSFYwY3lrN1hHNGdJR052Ym5OMElHRnlaMDFwYmsxaGVFOXdPaUJTWldSMVkyVlBjQ0E5SUNocGJuQjFkQ3dnYjNWMGNIVjBMQ0JoZUdWektTQTlQaUI3WEc0Z0lDQWdZMjl1YzNRZ2FXUjRXbVZ5YnlBOUlGdGRPMXh1SUNBZ0lHWnZjaUFvYkdWMElHc2dQU0F3T3lCcklEd2dhVzV3ZFhRdWNtRnVhenNnYXlzcktTQjdYRzRnSUNBZ0lDQnBaaUFvWVhobGN5NXBibVJsZUU5bUtHc3BJRDQ5SURBZ2ZId2dZWGhsY3k1c1pXNW5kR2dnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnYVdSNFdtVnlieTV3ZFhOb0tHQnBibkIxZEY5cGJtUnBZMlZ6V3lSN2EzMWRJRDBnTUR0Z0tUc2dJQzh2SUdacGNuTjBJR1ZzWlcxbGJuUmNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRnRjYmlBZ0lDQWdJR0FrZTJsa2VGcGxjbTh1YW05cGJpZ25YRnh1SnlsOVlDd2dZSFpoY2lCMllXeDFaU0E5SUNSN2FXNXdkWFF1WjJWMFFubEpibVJwWTJWektDZHBibkIxZEY5cGJtUnBZMlZ6SnlsOU8xeGNiblpoY2lCaVpYTjBYMmx1WkdWNElEb2dhVE15SUQwZ01EdGdMRnh1SUNBZ0lDQWdZR2xtSUNna2UybHVjSFYwTG1kbGRFSjVTVzVrYVdObGN5Z25hVzV3ZFhSZmFXNWthV05sY3ljcGZTQWtlMkYwZEhKcFluVjBaWE11YzJWc1pXTjBUR0Z6ZEVsdVpHVjRJRDRnTUNBL0lDYzhQU2NnT2lBblBDZDlJSFpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJQ0IyWVd4MVpTQTlJQ1I3YVc1d2RYUXVaMlYwUW5sSmJtUnBZMlZ6S0NkcGJuQjFkRjlwYm1ScFkyVnpKeWw5TzF4dUlDQWdJQ0FnSUNBZ1ltVnpkRjlwYm1SbGVDQTlJR2t6TWloc1lYTjBYMmx1WkdWNEtUdGNiaUFnSUNBZ0lDQjlZQ3hjYmlBZ0lDQWdJQ2NuTENCdmRYUndkWFF1YzJWMFFubFBabVp6WlhRb0oyZHNiMkpoYkY5cFpIZ25MQ0FuWW1WemRGOXBibVJsZUNjcFhHNGdJQ0FnWFR0Y2JpQWdmVHRjYmx4dUlDQmpiMjUwWlhoMExtTnZiWEIxZEdVb1hHNGdJQ0FnSUNCamNtVmhkR1ZTWldSMVkyVlFjbTluY21GdFNXNW1ieWhjYmlBZ0lDQWdJQ0FnSUNBblFYSm5UV2x1Snl3Z2UyaHBiblE2SUdGMGRISnBZblYwWlhNdVkyRmphR1ZMWlhrc0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWek9pQmJKM0poYm1zblhYMHNJRnRqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYVjBzSUdGeVowMXBiazFoZUU5d0xGeHVJQ0FnSUNBZ0lDQWdJRnRoZEhSeWFXSjFkR1Z6TG1GNGFYTmRMQ0JFWVhSaFZIbHdaUzVwYm5RMk5Dd2dZWFIwY21saWRYUmxjeTVyWldWd1JHbHRjeWtzWEc0Z0lDQWdJQ0I3YVc1d2RYUnpPaUJiTUYxOUtUdGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JoY21kTllYZ2dQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXNJR0YwZEhKcFluVjBaWE02SUVGeVowMXBiazFoZUVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnZG1Gc2FXUmhkR1ZKYm5CMWRITW9ZMjl1ZEdWNGRDNXBibkIxZEhNcE8xeHVJQ0JqYjI1emRDQmhjbWROYVc1TllYaFBjRG9nVW1Wa2RXTmxUM0FnUFNBb2FXNXdkWFFzSUc5MWRIQjFkQ3dnWVhobGN5a2dQVDRnZTF4dUlDQWdJR052Ym5OMElHbGtlRnBsY204Z1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnJJRDBnTURzZ2F5QThJR2x1Y0hWMExuSmhibXM3SUdzckt5a2dlMXh1SUNBZ0lDQWdhV1lnS0dGNFpYTXVhVzVrWlhoUFppaHJLU0ErUFNBd0lIeDhJR0Y0WlhNdWJHVnVaM1JvSUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUdsa2VGcGxjbTh1Y0hWemFDaGdhVzV3ZFhSZmFXNWthV05sYzFza2UydDlYU0E5SURBN1lDazdJQ0F2THlCbWFYSnpkQ0JsYkdWdFpXNTBYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJiWEc0Z0lDQWdJQ0JnSkh0cFpIaGFaWEp2TG1wdmFXNG9KMXhjYmljcGZXQXNJR0IyWVhJZ2RtRnNkV1VnUFNBa2UybHVjSFYwTG1kbGRFSjVTVzVrYVdObGN5Z25hVzV3ZFhSZmFXNWthV05sY3ljcGZUdGNYRzUyWVhJZ1ltVnpkRjlwYm1SbGVDQTZJR2t6TWlBOUlEQTdZQ3hjYmlBZ0lDQWdJR0JwWmlBb0pIdHBibkIxZEM1blpYUkNlVWx1WkdsalpYTW9KMmx1Y0hWMFgybHVaR2xqWlhNbktYMGdKSHRoZEhSeWFXSjFkR1Z6TG5ObGJHVmpkRXhoYzNSSmJtUmxlQ0ErSURBZ1B5QW5QajBuSURvZ0p6NG5mU0IyWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0FnZG1Gc2RXVWdQU0FrZTJsdWNIVjBMbWRsZEVKNVNXNWthV05sY3lnbmFXNXdkWFJmYVc1a2FXTmxjeWNwZlR0Y2JpQWdJQ0FnSUNBZ0lHSmxjM1JmYVc1a1pYZ2dQU0JwTXpJb2JHRnpkRjlwYm1SbGVDazdYRzRnSUNBZ0lDQWdmV0FzWEc0Z0lDQWdJQ0FuSnl3Z2IzVjBjSFYwTG5ObGRFSjVUMlptYzJWMEtDZG5iRzlpWVd4ZmFXUjRKeXdnSjJKbGMzUmZhVzVrWlhnbktWeHVJQ0FnSUYwN1hHNGdJSDA3WEc1Y2JpQWdZMjl1ZEdWNGRDNWpiMjF3ZFhSbEtGeHVJQ0FnSUNBZ1kzSmxZWFJsVW1Wa2RXTmxVSEp2WjNKaGJVbHVabThvWEc0Z0lDQWdJQ0FnSUNBZ0oyRnlaMDFoZUNjc0lIdG9hVzUwT2lCaGRIUnlhV0oxZEdWekxtTmhZMmhsUzJWNUxDQnBibkIxZEVSbGNHVnVaR1Z1WTJsbGN6b2dXeWR5WVc1ckoxMTlMQ0JiWTI5dWRHVjRkQzVwYm5CMWRITmJNRjFkTENCaGNtZE5hVzVOWVhoUGNDeGNiaUFnSUNBZ0lDQWdJQ0JiWVhSMGNtbGlkWFJsY3k1aGVHbHpYU3dnUkdGMFlWUjVjR1V1YVc1ME5qUXNJR0YwZEhKcFluVjBaWE11YTJWbGNFUnBiWE1wTEZ4dUlDQWdJQ0FnZTJsdWNIVjBjem9nV3pCZGZTazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnY0dGeWMyVkJjbWROYVc1TllYaEJkSFJ5YVdKMWRHVnpJRDBnS0dGMGRISnBZblYwWlhNNklGSmxZMjl5WkR4emRISnBibWNzSUhWdWEyNXZkMjQrS1RvZ1FYSm5UV2x1VFdGNFFYUjBjbWxpZFhSbGN5QTlQbHh1SUNBZ0lHTnlaV0YwWlVGMGRISnBZblYwWlZkcGRHaERZV05vWlV0bGVTaGhkSFJ5YVdKMWRHVnpJR0Z6SUU5dGFYUThRWEpuVFdsdVRXRjRRWFIwY21saWRYUmxjeXdnYTJWNWIyWWdRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1UGlrN1hHNGlMQ0FpTHk4Z1EyOXdlWEpwWjJoMElDaGpLU0JOYVdOeWIzTnZablFnUTI5eWNHOXlZWFJwYjI0dUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzR2THlCTWFXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1RVbFVJRXhwWTJWdWMyVXVYRzVjYm1sdGNHOXlkQ0I3UkdGMFlWUjVjR1Y5SUdaeWIyMGdKeTR1THk0dUx5NHVMM2RoYzIwdFkyOXRiVzl1Snp0Y2JtbHRjRzl5ZENCN1ZHVnVjMjl5Vm1sbGQzMGdabkp2YlNBbkxpNHZMaTR2ZEdWdWMyOXlMWFpwWlhjbk8xeHVhVzF3YjNKMElIdFRhR0Z3WlZWMGFXeDlJR1p5YjIwZ0p5NHVMeTR1TDNWMGFXd25PMXh1YVcxd2IzSjBJSHRCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrc0lHTnlaV0YwWlVGMGRISnBZblYwWlZkcGRHaERZV05vWlV0bGVYMGdabkp2YlNBbkxpNHZZWFIwY21saWRYUmxMWGRwZEdndFkyRmphR1V0YTJWNUp6dGNibWx0Y0c5eWRDQjdRMjl0Y0hWMFpVTnZiblJsZUhRc0lGQnliMmR5WVcxSmJtWnZMQ0JRY205bmNtRnRTVzV3ZFhSVVpXNXpiM0pKYm1adlJHVndaVzVrWlc1amVTd2dVSEp2WjNKaGJWVnVhV1p2Y20xOUlHWnliMjBnSnk0dUwzUjVjR1Z6Snp0Y2JseHVhVzF3YjNKMElIdGpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5d2dTVzVrYVdObGMwaGxiSEJsY2l3Z2FXNXdkWFJXWVhKcFlXSnNaU3dnYjNWMGNIVjBWbUZ5YVdGaWJHVXNJRk5vWVdSbGNraGxiSEJsY24wZ1puSnZiU0FuTGk5amIyMXRiMjRuTzF4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFTnZibU5oZEVGMGRISnBZblYwWlhNZ1pYaDBaVzVrY3lCQmRIUnlhV0oxZEdWWGFYUm9RMkZqYUdWTFpYa2dlMXh1SUNCeVpXRmtiMjVzZVNCaGVHbHpPaUJ1ZFcxaVpYSTdYRzU5WEc1Y2JtTnZibk4wSUhaaGJHbGtZWFJsU1c1d2RYUnpJRDBnS0dsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZExDQmhlR2x6T2lCdWRXMWlaWElwT2lCMmIybGtJRDArSUh0Y2JpQWdhV1lnS0NGcGJuQjFkSE1nZkh3Z2FXNXdkWFJ6TG14bGJtZDBhQ0E4SURFcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjNSdmJ5Qm1aWGNnYVc1d2RYUnpKeWs3WEc0Z0lIMWNiaUFnWTI5dWMzUWdjbVZtWlhKbGJtTmxTVzVrWlhnZ1BTQXdPMXh1SUNCamIyNXpkQ0J5WldabGNtVnVZMlZKYm5CMWRDQTlJR2x1Y0hWMGMxdHlaV1psY21WdVkyVkpibVJsZUYwN1hHNGdJR052Ym5OMElHbHVjSFYwVkhsd1pTQTlJSEpsWm1WeVpXNWpaVWx1Y0hWMExtUmhkR0ZVZVhCbE8xeHVJQ0JqYjI1emRDQnBibkIxZEZKaGJtc2dQU0J5WldabGNtVnVZMlZKYm5CMWRDNWthVzF6TG14bGJtZDBhRHRjYmlBZ2FXNXdkWFJ6TG1admNrVmhZMmdvS0dsdWNIVjBMQ0JwS1NBOVBpQjdYRzRnSUNBZ2FXWWdLR2tnUFQwOUlISmxabVZ5Wlc1alpVbHVaR1Y0S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1SUNBZ0lDOHZJRzFoYTJVZ2MzVnlaU0IwZVhCbGN5QnZaaUJoYkd3Z2FXNXdkWFJ6SUcxaGRHTm9YRzRnSUNBZ2FXWWdLR2x1Y0hWMExtUmhkR0ZVZVhCbElDRTlQU0JwYm5CMWRGUjVjR1VwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYVc1d2RYUWdkR1Z1YzI5eWN5QnphRzkxYkdRZ1ltVWdiMjVsSUhSNWNHVW5LVHRjYmlBZ0lDQjlYRzRnSUNBZ0x5OGdiV0ZyWlNCemRYSmxJSFJvWlNCa2FXMWxibk5wYjI1aGJHbDBlU0J2WmlCaGJHd2dhVzV3ZFhSeklHRnlaU0IwYUdVZ2MyRnRaVnh1SUNBZ0lHbG1JQ2hwYm5CMWRDNWthVzF6TG14bGJtZDBhQ0FoUFQwZ2FXNXdkWFJTWVc1cktTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oybHVjSFYwSUhSbGJuTnZjbk1nYzJodmRXeGtJR2hoZG1VZ2RHaGxJSE5oYldVZ2MyaGhjR1VuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhVzV3ZFhRdVpHbHRjeTVtYjNKRllXTm9LQ2hrYVcwc0lHa3BJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDaHBJQ0U5UFNCaGVHbHpJQ1ltSUdScGJTQWhQVDBnY21WbVpYSmxibU5sU1c1d2RYUXVaR2x0YzF0cFhTa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMjV2YmlCamIyNWpZWFFnWkdsdFpXNXphVzl1Y3lCdGRYTjBJRzFoZEdOb0p5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTazdYRzRnSUgwcE8xeHVmVHRjYmx4dVkyOXVjM1FnWTJGc1kzVnNZWFJsU1c1d2RYUkpibVJsZUVsdGNHd2dQU0FvYm5WdFltVnlUMlpVWlc1emIzSnpPaUJ1ZFcxaVpYSXNJSE5wZW1WSmJrTnZibU5oZEVGNGFYTlRkSEk2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUE5UGlCZ1hHNGdJR1p1SUdOaGJHTjFiR0YwWlVsdWNIVjBTVzVrWlhnb2FXNWtaWGc2SUhVek1pa2dMVDRnZFRNeUlIdGNiaUFnSUNCc1pYUWdjMmw2WlVsdVEyOXVZMkYwUVhocGN5QTlJR0Z5Y21GNVBIVXpNaXdnSkh0dWRXMWlaWEpQWmxSbGJuTnZjbk45ZFQ0b0pIdHphWHBsU1c1RGIyNWpZWFJCZUdselUzUnlmU2s3WEc0Z0lDQWdabTl5SUNoMllYSWdhVG9nZFRNeUlEMGdNSFU3SUdrZ1BDQWtlMjUxYldKbGNrOW1WR1Z1YzI5eWMzMDdJR2tnS3owZ01YVWdLU0I3WEc0Z0lDQWdJQ0JwWmlBb2FXNWtaWGdnUENCemFYcGxTVzVEYjI1allYUkJlR2x6VzJsZEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnSkh0dWRXMWlaWEpQWmxSbGJuTnZjbk45ZFR0Y2JpQWdmV0E3WEc1Y2JtTnZibk4wSUdGemMybG5iazkxZEhCMWRFUmhkR0VnUFNBb2FXNXdkWFJ6T2lCeVpXRmtiMjVzZVNCSmJtUnBZMlZ6U0dWc2NHVnlXMTBzSUc5MWRIQjFkRG9nU1c1a2FXTmxjMGhsYkhCbGNpa2dQVDRnZTF4dUlDQmpiMjV6ZENCdWRXMWlaWEpQWmxSbGJuTnZjbk1nUFNCcGJuQjFkSE11YkdWdVozUm9PMXh1WEc0Z0lHTnZibk4wSUdOdlpHVk1hVzVsY3pvZ2MzUnlhVzVuVzEwZ1BTQmJYVHRjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnVkVzFpWlhKUFpsUmxibk52Y25NN0lDc3JhU2tnZTF4dUlDQWdJR052Ym5OMElISmxkSFZ5YmxOdWFYQndaWFFnUFNCdmRYUndkWFF1YzJWMFFubFBabVp6WlhRb0oyZHNiMkpoYkY5cFpIZ25MQ0JwYm5CMWRITmJhVjB1WjJWMFFubEpibVJwWTJWektDZHBibVJwWTJWekp5a3BPMXh1SUNBZ0lHbG1JQ2h1ZFcxaVpYSlBabFJsYm5OdmNuTWdQVDA5SURFcElIdGNiaUFnSUNBZ0lHTnZaR1ZNYVc1bGN5NXdkWE5vS0hKbGRIVnlibE51YVhCd1pYUXBPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9hU0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdZMjlrWlV4cGJtVnpMbkIxYzJnb1lHbG1JQ2hwYm5CMWRFbHVaR1Y0SUQwOUlDUjdhWDExS1NCN0lDUjdjbVYwZFhKdVUyNXBjSEJsZEgwZ2ZXQXBPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9hU0E5UFQwZ2JuVnRZbVZ5VDJaVVpXNXpiM0p6SUMwZ01Ta2dlMXh1SUNBZ0lDQWdZMjlrWlV4cGJtVnpMbkIxYzJnb1lHVnNjMlVnZXlBa2UzSmxkSFZ5YmxOdWFYQndaWFI5SUgxZ0tUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWTI5a1pVeHBibVZ6TG5CMWMyZ29ZR1ZzYzJVZ2FXWWdLR2x1Y0hWMFNXNWtaWGdnUFQwZ0pIdHBmU2tnZXlBa2UzSmxkSFZ5YmxOdWFYQndaWFI5SUgxZ0tUdGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUdOdlpHVk1hVzVsY3k1cWIybHVLQ2RjWEc0bktUdGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JqY21WaGRHVkRiMjVqWVhSUWNtOW5jbUZ0U1c1bWJ5QTlYRzRnSUNBZ0tHbHVjSFYwY3pvZ2NtVmhaRzl1YkhrZ1ZHVnVjMjl5Vm1sbGQxdGRMQ0JoWkdwMWMzUmxaRUY0YVhNNklHNTFiV0psY2l3Z2IzVjBjSFYwVTJoaGNHVTZJRzUxYldKbGNsdGRMQ0JrWVhSaFZIbHdaVG9nUkdGMFlWUjVjR1VwT2lCUWNtOW5jbUZ0U1c1bWJ5QTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQnZkWFJ3ZFhSVGFYcGxJRDBnVTJoaGNHVlZkR2xzTG5OcGVtVW9iM1YwY0hWMFUyaGhjR1VwTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0J6YVhwbFNXNURiMjVqWVhSQmVHbHpJRDBnYm1WM0lFRnljbUY1UEc1MWJXSmxjajRvYVc1d2RYUnpMbXhsYm1kMGFDazdYRzRnSUNBZ0lDQmpiMjV6ZENCcGJuQjFkRlpoY25NZ1BTQnVaWGNnUVhKeVlYazhTVzVrYVdObGMwaGxiSEJsY2o0b2FXNXdkWFJ6TG14bGJtZDBhQ2s3WEc1Y2JpQWdJQ0FnSUd4bGRDQndjbVYyYVc5MWMxTjFiU0E5SURBN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRFUmxjR1Z1WkdWdVkybGxjem9nVUhKdlozSmhiVWx1Y0hWMFZHVnVjMjl5U1c1bWIwUmxjR1Z1WkdWdVkzbGJYU0E5SUZ0ZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUlNZVzVyY3lBOUlGdGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ2NISnZaM0poYlZWdWFXWnZjbTF6T2lCUWNtOW5jbUZ0Vlc1cFptOXliVnRkSUQwZ1czdDBlWEJsT2lCRVlYUmhWSGx3WlM1MWFXNTBNeklzSUdSaGRHRTZJRzkxZEhCMWRGTnBlbVY5WFR0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2FXNXdkWFJ6TG14bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ0lDQWdJSEJ5WlhacGIzVnpVM1Z0SUNzOUlHbHVjSFYwYzF0cFhTNWthVzF6VzJGa2FuVnpkR1ZrUVhocGMxMDdYRzRnSUNBZ0lDQWdJSE5wZW1WSmJrTnZibU5oZEVGNGFYTmJhVjBnUFNCd2NtVjJhVzkxYzFOMWJUdGNiaUFnSUNBZ0lDQWdhVzV3ZFhSU1lXNXJjeTV3ZFhOb0tHbHVjSFYwYzF0cFhTNWthVzF6TG14bGJtZDBhQ2s3WEc0Z0lDQWdJQ0FnSUdsdWNIVjBWbUZ5YzF0cFhTQTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb1lHbHVjSFYwSkh0cGZXQXNJR1JoZEdGVWVYQmxMQ0JwYm5CMWRGSmhibXR6VzJsZEtUdGNiaUFnSUNBZ0lDQWdhVzV3ZFhSRVpYQmxibVJsYm1OcFpYTXVjSFZ6YUNnbmNtRnVheWNwTzF4dUlDQWdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE11Y0hWemFDaDdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJ6YVhwbFNXNURiMjVqWVhSQmVHbHpXMmxkZlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHbHVjSFYwY3k1c1pXNW5kR2c3SUNzcmFTa2dlMXh1SUNBZ0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTXVjSFZ6YUNndUxpNWpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5aHBibkIxZEhOYmFWMHVaR2x0Y3lrcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2NISnZaM0poYlZWdWFXWnZjbTF6TG5CMWMyZ29MaTR1WTNKbFlYUmxWR1Z1YzI5eVUyaGhjR1ZXWVhKcFlXSnNaWE1vYjNWMGNIVjBVMmhoY0dVcEtUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwSUQwZ2IzVjBjSFYwVm1GeWFXRmliR1VvSjI5MWRIQjFkQ2NzSUdSaGRHRlVlWEJsTENCdmRYUndkWFJUYUdGd1pTNXNaVzVuZEdncE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1a2FXTmxjMEY0YVhNZ1BTQnZkWFJ3ZFhRdWFXNWthV05sYzBkbGRDZ25hVzVrYVdObGN5Y3NJR0ZrYW5WemRHVmtRWGhwY3lrN1hHNGdJQ0FnSUNCamIyNXpkQ0J6YVhwbFNXNURiMjVqWVhSQmVHbHpVM1J5SUQxY2JpQWdJQ0FnSUNBZ0lDQkJjbkpoZVM1bWNtOXRLRUZ5Y21GNUtITnBlbVZKYmtOdmJtTmhkRUY0YVhNdWJHVnVaM1JvS1M1clpYbHpLQ2twTG0xaGNDaHBJRDArSUdCMWJtbG1iM0p0Y3k1emFYcGxTVzVEYjI1allYUkJlR2x6Skh0cGZXQXBMbXB2YVc0b0p5d25LVHRjYmlBZ0lDQWdJR052Ym5OMElHZGxkRk5vWVdSbGNsTnZkWEpqWlNBOUlDaHphR0ZrWlhKSVpXeHdaWEk2SUZOb1lXUmxja2hsYkhCbGNpa2dQVDRnWUZ4dVhHNGdJQ1I3S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnYzJoaFpHVnlTR1ZzY0dWeUxuSmxaMmx6ZEdWeVZXNXBabTl5YlNnbmIzVjBjSFYwVTJsNlpTY3NJQ2QxTXpJbktUdGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JwYm5CMWRITXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnphR0ZrWlhKSVpXeHdaWEl1Y21WbmFYTjBaWEpWYm1sbWIzSnRLR0J6YVhwbFNXNURiMjVqWVhSQmVHbHpKSHRwZldBc0lDZDFNekluS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2MyaGhaR1Z5U0dWc2NHVnlMbVJsWTJ4aGNtVldZWEpwWVdKc1pYTW9MaTR1YVc1d2RYUldZWEp6TENCdmRYUndkWFFwTzF4dUlDQWdJQ0FnZlNrb0tYMWNibHh1SUNBa2UyTmhiR04xYkdGMFpVbHVjSFYwU1c1a1pYaEpiWEJzS0hOcGVtVkpia052Ym1OaGRFRjRhWE11YkdWdVozUm9MQ0J6YVhwbFNXNURiMjVqWVhSQmVHbHpVM1J5S1gxY2JseHVJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNXRZV2x1VTNSaGNuUW9LWDFjYmlBZ0lDQWtlM05vWVdSbGNraGxiSEJsY2k1bmRXRnlaRUZuWVdsdWMzUlBkWFJQWmtKdmRXNWtjMWR2Y210bmNtOTFjRk5wZW1WektDZDFibWxtYjNKdGN5NXZkWFJ3ZFhSVGFYcGxKeWw5WEc1Y2JpQWdJQ0IyWVhJZ2FXNWthV05sY3lBOUlDUjdiM1YwY0hWMExtOW1abk5sZEZSdlNXNWthV05sY3lnbloyeHZZbUZzWDJsa2VDY3BmVHRjYmx4dUlDQWdJR3hsZENCcGJuQjFkRWx1WkdWNElEMGdZMkZzWTNWc1lYUmxTVzV3ZFhSSmJtUmxlQ2drZTJsdVpHbGpaWE5CZUdsemZTazdYRzRnSUNBZ2FXWWdLR2x1Y0hWMFNXNWtaWGdnSVQwZ01IVXBJSHRjYmlBZ0lDQWdJR3hsZENCemFYcGxTVzVEYjI1allYUkJlR2x6SUQwZ1lYSnlZWGs4ZFRNeUxDQWtlM05wZW1WSmJrTnZibU5oZEVGNGFYTXViR1Z1WjNSb2ZYVStLQ1I3YzJsNlpVbHVRMjl1WTJGMFFYaHBjMU4wY24wcE8xeHVJQ0FnSUNBZ0pIdHBibVJwWTJWelFYaHBjMzBnTFQwZ2MybDZaVWx1UTI5dVkyRjBRWGhwYzF0cGJuQjFkRWx1WkdWNElDMGdNWFZkTzF4dUlDQWdJSDFjYmx4dUlDQWdJQ1I3WVhOemFXZHVUM1YwY0hWMFJHRjBZU2hwYm5CMWRGWmhjbk1zSUc5MWRIQjFkQ2w5WEc0Z0lIMWdPMXh1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0J1WVcxbE9pQW5RMjl1WTJGMEp5eGNiaUFnSUNBZ0lDQWdjMmhoWkdWeVEyRmphR1U2SUh0b2FXNTBPaUJnSkh0aFpHcDFjM1JsWkVGNGFYTjlZQ3dnYVc1d2RYUkVaWEJsYm1SbGJtTnBaWE45TEZ4dUlDQWdJQ0FnSUNCblpYUlNkVzVFWVhSaE9pQW9LU0E5UGlBb2UxeHVJQ0FnSUNBZ0lDQWdJRzkxZEhCMWRITTZJRnQ3WkdsdGN6b2diM1YwY0hWMFUyaGhjR1VzSUdSaGRHRlVlWEJsZlYwc1hHNGdJQ0FnSUNBZ0lDQWdaR2x6Y0dGMFkyaEhjbTkxY0RvZ2UzZzZJRTFoZEdndVkyVnBiQ2h2ZFhSd2RYUlRhWHBsSUM4Z05qUWdMeW9nZDI5eWEyZHliM1Z3SUhOcGVtVWdLaThwZlN4Y2JpQWdJQ0FnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNc1hHNGdJQ0FnSUNBZ0lIMHBMRnh1SUNBZ0lDQWdJQ0JuWlhSVGFHRmtaWEpUYjNWeVkyVXNYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQmpiMjVqWVhRZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRU52Ym1OaGRFRjBkSEpwWW5WMFpYTXBPaUIyYjJsa0lEMCtJSHRjYmlBZ1kyOXVjM1FnYVc1d2RYUnpJRDBnWTI5dWRHVjRkQzVwYm5CMWRITTdYRzRnSUdOdmJuTjBJR2x1Y0hWMFUyaGhjR1VnUFNCcGJuQjFkSE5iTUYwdVpHbHRjenRjYmlBZ1kyOXVjM1FnWVdScWRYTjBaV1JCZUdseklEMGdVMmhoY0dWVmRHbHNMbTV2Y20xaGJHbDZaVUY0YVhNb1lYUjBjbWxpZFhSbGN5NWhlR2x6TENCcGJuQjFkRk5vWVhCbExteGxibWQwYUNrN1hHNGdJSFpoYkdsa1lYUmxTVzV3ZFhSektHbHVjSFYwY3l3Z1lXUnFkWE4wWldSQmVHbHpLVHRjYmlBZ1kyOXVjM1FnYjNWMGNIVjBVMmhoY0dVZ1BTQnBibkIxZEZOb1lYQmxMbk5zYVdObEtDazdYRzRnSUc5MWRIQjFkRk5vWVhCbFcyRmthblZ6ZEdWa1FYaHBjMTBnUFZ4dUlDQWdJQ0FnYVc1d2RYUnpMbkpsWkhWalpTZ29jM1Z0TENCcGJuQjFkQ2tnUFQ0Z2MzVnRJQ3NnS0dsdWNIVjBMbVJwYlhNdWJHVnVaM1JvSUQ0Z1lXUnFkWE4wWldSQmVHbHpJRDhnYVc1d2RYUXVaR2x0YzF0aFpHcDFjM1JsWkVGNGFYTmRJRG9nTUNrc0lEQXBPMXh1SUNBdkx5QXdJR3hsYm1kMGFDQjBaVzV6YjNKeklHRnlaU0IyWVd4cFpDQm1iM0lnWTI5dVkyRjBMQ0J5WlcxdmRtVWdkR2hsYlZ4dUlDQmpiMjV6ZENCdWIyNUZiWEIwZVVsdWNIVjBjeUE5SUdsdWNIVjBjeTVtYVd4MFpYSW9hVzV3ZFhRZ1BUNGdVMmhoY0dWVmRHbHNMbk5wZW1Vb2FXNXdkWFF1WkdsdGN5a2dQaUF3S1R0Y2JpQWdZMjl1ZEdWNGRDNWpiMjF3ZFhSbEtGeHVJQ0FnSUNBZ1kzSmxZWFJsUTI5dVkyRjBVSEp2WjNKaGJVbHVabThvYm05dVJXMXdkSGxKYm5CMWRITXNJR0ZrYW5WemRHVmtRWGhwY3l3Z2IzVjBjSFYwVTJoaGNHVXNJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU2tzSUh0cGJuQjFkSE02SUc1dmJrVnRjSFI1U1c1d2RYUnpmU2s3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2NHRnljMlZEYjI1allYUkJkSFJ5YVdKMWRHVnpJRDBnS0dGMGRISnBZblYwWlhNNklGSmxZMjl5WkR4emRISnBibWNzSUhWdWEyNXZkMjQrS1RvZ1EyOXVZMkYwUVhSMGNtbGlkWFJsY3lBOVBseHVJQ0FnSUdOeVpXRjBaVUYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVNoN1lYaHBjem9nWVhSMGNtbGlkWFJsY3k1aGVHbHpJR0Z6SUc1MWJXSmxjbjBwTzF4dUlpd2dJaTh2SUVOdmNIbHlhV2RvZENBb1l5a2dUV2xqY205emIyWjBJRU52Y25CdmNtRjBhVzl1TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVMeThnVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUUxSlZDQk1hV05sYm5ObExseHVYRzVwYlhCdmNuUWdlMFJoZEdGVWVYQmxmU0JtY205dElDY3VMaTh1TGk4dUxpOTNZWE50TFdOdmJXMXZiaWM3WEc1cGJYQnZjblFnZTFSbGJuTnZjbFpwWlhkOUlHWnliMjBnSnk0dUx5NHVMM1JsYm5OdmNpMTJhV1YzSnp0Y2JtbHRjRzl5ZENCN1EyOXRjSFYwWlVOdmJuUmxlSFFzSUVkd2RVUmhkR0ZVZVhCbExDQlFjbTluY21GdFNXNXdkWFJVWlc1emIzSkpibVp2UkdWd1pXNWtaVzVqZVN3Z1VISnZaM0poYlZWdWFXWnZjbTE5SUdaeWIyMGdKeTR1TDNSNWNHVnpKenRjYmx4dWFXMXdiM0owSUh0amNtVmhkR1ZVWlc1emIzSlRhR0Z3WlZaaGNtbGhZbXhsY3l3Z1oyVjBUV0Y0UTI5dGNHOXVaVzUwY3l3Z2FXNXdkWFJXWVhKcFlXSnNaU3dnYjNWMGNIVjBWbUZ5YVdGaWJHVXNJRk5vWVdSbGNraGxiSEJsY2l3Z2RHVnVjMjl5Vkhsd1pWUnZWM05uYkZOMGIzSmhaMlZVZVhCbExDQjBaVzV6YjNKVWVYQmxWRzlYYzJkc1ZtRnNkV1ZVZVhCbExDQlZibWxtYjNKdFJHRjBZVVZzWlcxbGJuUlVlWEJsTENCVmJtbG1iM0p0YzBGeWNtRjVWSGx3WlgwZ1puSnZiU0FuTGk5amIyMXRiMjRuTzF4dWFXMXdiM0owSUh0amNtVmhkR1ZEYjI1allYUlFjbTluY21GdFNXNW1iMzBnWm5KdmJTQW5MaTlqYjI1allYUW5PMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdaVzUxYlNCQmRIUmxiblJwYjI1UmEzWkdiM0p0WVhRZ2UxeHVJQ0IxYm10dWIzZHVMQ0FnSUNBZ0lDQWdJQ0F2THlCbGJuVnRJSFpoYkhWbElHNXZkQ0J6WlhRc0lHOXlJR1JsY0dWdVpITWdiMjRnY1d0MklIQnliMnBsWTNScGIyNGdhVzF3YkdWdFpXNTBZWFJwYjI0Z1pHVjBZV2xzYzF4dUlDQnhhM1pDVGxOSUxDQWdJQ0FnSUNBZ0lDQXZMeUJtYjNJZ2JtOXVMWEJoWTJ0bFpDQnhhM1lzSUhCbGNtMTFkR1ZrWEc0Z0lIRnJka0pUVGtnc0lDQWdJQ0FnSUNBZ0lDOHZJR1p2Y2lCdWIyNHRjR0ZqYTJWa0lIRnJkaXdnYm05MElIQmxjbTExZEdWa0xDQjFjMlZrSUdKNUlHMWxiVzl5ZVNCbFptWnBZMmxsYm5RZ1lYUjBaVzUwYVc5dUlHOXlJRTExYkhScFNHVmhaRUYwZEdWdWRHbHZibHh1SUNCeGEzWkNVMDR6U0N3Z0lDQWdJQ0FnSUNBdkx5Qm1iM0lnVkZKVUlHWjFjMlZrSUdGMGRHVnVkR2x2Yml3Z2NXdDJJR0Z5WlNCd1lXTnJaV1JjYmlBZ2NXdDJRazVUU0hGcmRrSlRNMDVJTENBZ0x5OGdabTl5SUZSU1ZDQm1kWE5sWkNCallYVnpZV3dnWVhSMFpXNTBhVzl1TENCa1lYUmhJR2hoY3lCMGQyOGdabTl5YldGMGN5QW9jV3QySUdseklETkNUbE5JTENCblpXMXRYMkoxWm1abGNpQnBjeUJDVXpOT1NDbGNiaUFnY1V0MlFsTk9TSGhDVTA0eVNDd2dJQ0FnTHk4Z1ptOXlJRlJTVkNCbWRYTmxaQ0JqY205emN5QmhkSFJsYm5ScGIyNHNJR3QySUdGeVpTQndZV05yWldSY2JpQWdjV3QyVkU1SUxDQWdJQ0FnSUNBZ0lDQWdMeThnWm05eUlHMWxiVzl5ZVNCbFptWnBZMmxsYm5RZ1lYUjBaVzUwYVc5dUxDQnhhM1lnWVhKbElHNXZkQ0J3WVdOclpXUXNJR0Z1WkNCd1lXUmthVzVuY3lCaGNtVWdjbVZ0YjNabFpDNWNiaUFnY1d0MlZFNHpTQ3dnSUNBZ0lDQWdJQ0FnTHk4Z1ptOXlJRlJTVkNCbWRYTmxaQ0JoZEhSbGJuUnBiMjRzSUhGcmRpQmhjbVVnY0dGamEyVmtJR0Z1WkNCd1lXUmthVzVuY3lCaGNtVWdjbVZ0YjNabFpGeHVmVnh1WEc1bGVIQnZjblFnWTI5dWMzUWdaVzUxYlNCQmRIUmxiblJwYjI1TllYTnJWSGx3WlNCN1hHNGdJRzV2Ym1Vc0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdUbThnYldGemExeHVJQ0J0WVhOck1XUkxaWGxUWlhGTVpXNHNJQ0FnSUNBZ0lDOHZJRnRpWVhSamFGOXphWHBsWFN3Z2EyVjVJSE5sY1hWbGJtTmxJR3hsYm1kMGFGeHVJQ0J0WVhOck1XUkZibVJUZEdGeWRDd2dJQ0FnSUNBZ0lDOHZJRnN5SUNvZ1ltRjBZMmhmYzJsNlpWMGdkMmwwYUNCbGJtUWdjRzl6YVhScGIyNXpJR0Z1WkNCemRHRnlkQ0J3YjNOcGRHbHZibk5jYmlBZ2JXRnphekZFUzJWNVUyVnhUR1Z1VTNSaGNuUXNJQ0F2THlCYk15QXFJR0poZEdOb1gzTnBlbVVnS3lBeVhTQjNhWFJvSUZ0clpYbGZiR1Z1V3pCZExDQXVMaTRzSUd0bGVWOXNaVzViWW1GMFkyaGZjMmw2WlNBdElERmRMQ0J4ZFdWeWVWOXpkR0Z5ZEZzd1hTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeUF1TGk0c0lIRjFaWEo1WDNOMFlYSjBXMkpoZEdOb1gzTnBlbVVnTFNBeFhTd2djWFZsY25sZlpXNWtXMkpoZEdOb1gzTnBlbVVnTFNBeFhTd2dhMlY1WDNOMFlYSjBXekJkTENBdUxpNHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnYTJWNVgzTjBZWEowVzJKaGRHTm9YM05wZW1VZ0xTQXhYU3dnYTJWNVgyVnVaRnRpWVhSamFGOXphWHBsSUMwZ01WMWRYRzRnSUcxaGMyc3laRVIxYlcxNUxDQWdJQ0FnSUNBZ0lDQWdMeThnWkhWdGJYa2diV0Z6YXlCM2FYUm9JSE5vWVhCbElGc3hMQ0F4WFNCdmNpQmJZbUYwWTJoZmMybDZaU3dnTVYwdUlFbDBJR2hoY3lCellXMWxJR1ZtWm1WamRDQmhjeUJ1YnlCdFlYTnJMbHh1SUNCdFlYTnJNbVJMWlhsUVlXUmthVzVuTENBZ0lDQWdJQzh2SUZ0aVlYUmphRjl6YVhwbExDQjBiM1JoYkY5elpYRjFaVzVqWlY5c1pXNW5kR2hkWEc0Z0lHMWhjMnN6WkVGMGRHVnVkR2x2Yml3Z0lDQWdJQ0FnTHk4Z1cySmhkR05vWDNOcGVtVXNJSE5sY1hWbGJtTmxYMnhsYm1kMGFDd2dkRzkwWVd4ZmMyVnhkV1Z1WTJWZmJHVnVaM1JvWFZ4dUlDQnRZWE5yTkdSTlpXZGhkSEp2Yml3Z0lDQWdJQ0FnSUM4dklFMWxaMkYwY205dUlHTmhkWE5oYkNCdFlYTnJJSGRwZEdnZ2MyaGhjR1VnVzJKaGRHTm9YM05wZW1Vc0lERXNJRzFoZUY5elpYRjFaVzVqWlY5c1pXNW5kR2dzSUcxaGVGOXpaWEYxWlc1alpWOXNaVzVuZEdoZFhHNGdJRzFoYzJ0VmJtdHViM2R1WEc1OVhHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdRWFIwWlc1MGFXOXVVR0Z5WVcxbGRHVnljeUI3WEc0Z0lHSmhkR05vVTJsNlpUb2diblZ0WW1WeU8xeHVJQ0J6WlhGMVpXNWpaVXhsYm1kMGFEb2diblZ0WW1WeU8xeHVJQ0J3WVhOMFUyVnhkV1Z1WTJWTVpXNW5kR2c2SUc1MWJXSmxjanRjYmlBZ2EzWlRaWEYxWlc1alpVeGxibWQwYURvZ2JuVnRZbVZ5TzF4dUlDQjBiM1JoYkZObGNYVmxibU5sVEdWdVozUm9PaUJ1ZFcxaVpYSTdYRzRnSUcxaGVGTmxjWFZsYm1ObFRHVnVaM1JvT2lCdWRXMWlaWEk3WEc0Z0lHbHVjSFYwU0dsa1pHVnVVMmw2WlRvZ2JuVnRZbVZ5TzF4dUlDQm9hV1JrWlc1VGFYcGxPaUJ1ZFcxaVpYSTdYRzRnSUhaSWFXUmtaVzVUYVhwbE9pQnVkVzFpWlhJN1hHNGdJR2hsWVdSVGFYcGxPaUJ1ZFcxaVpYSTdYRzRnSUhaSVpXRmtVMmw2WlRvZ2JuVnRZbVZ5TzF4dUlDQnVkVzFJWldGa2N6b2diblZ0WW1WeU8xeHVJQ0JwYzFWdWFXUnBjbVZqZEdsdmJtRnNPaUJpYjI5c1pXRnVPMXh1SUNCd1lYTjBVSEpsYzJWdWRGTm9ZWEpsUW5WbVptVnlPaUJpYjI5c1pXRnVPMXh1SUNCdFlYTnJSbWxzZEdWeVZtRnNkV1U2SUc1MWJXSmxjanRjYmlBZ2JXRnphMVI1Y0dVNklFRjBkR1Z1ZEdsdmJrMWhjMnRVZVhCbE8xeHVJQ0J6WTJGc1pUb2diblZ0WW1WeU8xeHVJQ0JpY205aFpHTmhjM1JTWlhOUWIzTkNhV0Z6T2lCaWIyOXNaV0Z1TzF4dUlDQndZWE56VUdGemRFbHVTM1k2SUdKdmIyeGxZVzQ3WEc0Z0lIRnJka1p2Y20xaGREb2dRWFIwWlc1MGFXOXVVV3QyUm05eWJXRjBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFRjBkR1Z1ZEdsdmJrRjBkSEp6SUh0Y2JpQWdiblZ0U0dWaFpITTZJRzUxYldKbGNqdGNiaUFnYVhOVmJtbGthWEpsWTNScGIyNWhiRG9nYm5WdFltVnlPMXh1SUNCdFlYTnJSbWxzZEdWeVZtRnNkV1U2SUc1MWJXSmxjanRjYmlBZ2MyTmhiR1U2SUc1MWJXSmxjanRjYmlBZ1pHOVNiM1JoY25rNklHNTFiV0psY2p0Y2JpQWdjV3QyU0dsa1pHVnVVMmw2WlhNNklHNTFiV0psY2x0ZE8xeHVJQ0J3WVhOMFVISmxjMlZ1ZEZOb1lYSmxRblZtWm1WeU9pQmliMjlzWldGdU8xeHVmVnh1WEc1amIyNXpkQ0IyWVd4cFpHRjBaVUYwZEdWdWRHbHZia2x1Y0hWMGN5QTlJQ2hwYm5CMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFN3Z1lYUjBjbWxpZFhSbGN6b2dRWFIwWlc1MGFXOXVRWFIwY25NcE9pQkJkSFJsYm5ScGIyNVFZWEpoYldWMFpYSnpJRDArSUh0Y2JpQWdMeThnUVdKaWNtVjJhV0YwYVc5dUlHRnVaQ0JOWldGdWFXNW5jenBjYmlBZ0x5OGdJQ0JDT2lBZ0lDQmlZWFJqYUY5emFYcGxYRzRnSUM4dklDQWdVem9nSUNBZ2MyVnhkV1Z1WTJWZmJHVnVaM1JvSUNocGJuQjFkQ0J6WlhGMVpXNWpaU0JzWlc1bmRHZ2diMllnY1hWbGNua3BYRzRnSUM4dklDQWdVRG9nSUNBZ2NHRnpkRjl6WlhGMVpXNWpaVjlzWlc1bmRHZ2dLSEJoYzNRZ2MyVnhkV1Z1WTJVZ2JHVnVaM1JvSUc5bUlHdGxlU0J2Y2lCMllXeDFaU2xjYmlBZ0x5OGdJQ0JNT2lBZ0lDQnJkbDl6WlhGMVpXNWpaVjlzWlc1bmRHZ2dLR2x1Y0hWMElITmxjWFZsYm1ObElHeGxibWQwYUNCdlppQnJaWGtnYjNJZ2RtRnNkV1VwWEc0Z0lDOHZJQ0FnVFRvZ0lDQWdiV0Y0WDNObGNYVmxibU5sWDJ4bGJtZDBhRnh1SUNBdkx5QWdJRlE2SUNBZ0lIUnZkR0ZzWDNObGNYVmxibU5sWDJ4bGJtZDBhQ0E5SUhCaGMzUmZjMlZ4ZFdWdVkyVmZiR1Z1WjNSb0lDc2dhM1pmYzJWeGRXVnVZMlZmYkdWdVozUm9YRzRnSUM4dklDQWdUam9nSUNBZ2JuVnRYMmhsWVdSelhHNGdJQzh2SUNBZ1NEb2dJQ0FnYUdWaFpDQnphWHBsSUdadmNpQlJJR0Z1WkNCTExDQmhhMkVnY1Y5b1pXRmtYM05wZW1VZ2IzSWdhMTlvWldGa1gzTnBlbVVnYjNJZ2NXdGZhR1ZoWkY5emFYcGxYRzRnSUM4dklDQWdTRjkyT2lBZ2RsOW9aV0ZrWDNOcGVtVmNiaUFnTHk4Z0lDQkVYMms2SUNCcGJuQjFkQ0JvYVdSa1pXNGdjMmw2WlZ4dUlDQXZMeUFnSUVRNklDQWdJR2hwWkdSbGJpQnphWHBsSUdadmNpQlJJR0Z1WkNCTElDaEVJRDBnVGlBcUlFZ3BMQ0JoYTJFZ2NWOW9hV1JrWlc1ZmMybDZaU0J2Y2lCclgyaHBaR1JsYmw5emFYcGxJRzl5SUhGclgyaHBaR1JsYmw5emFYcGxYRzRnSUM4dklDQWdSRjkyT2lBZ2RsOW9hV1JrWlc1ZmMybDZaU0E5SUc1MWJWOW9aV0ZrY3lBcUlIWmZhR1ZoWkY5emFYcGxYRzVjYmlBZ0x5OGdWMmhsYmlCd1lYTjBJSE4wWVhSbElHbHpJSFZ6WldRc0lGRXNJRXNnWVc1a0lGWWdjMmh2ZFd4a0lHaGhkbVVnYzJGdFpTQm9hV1JrWlc0Z2MybDZaU0FvZFc1c1pYTnpJSGRsSUhOd2JHbDBJR2wwSUdsdWRHOGdjR0Z6ZEY5clpYa2dZVzVrSUhCaGMzUmZkbUZzZFdVcExseHVYRzRnSUM4dklFbHVjSFYwSUhOb1lYQmxjenBjYmlBZ0x5OGdJQ0JwYm5CMWRDQWdJQ0FnSUNBZ0tGRXZTeTlXS1NBZ0lDQTZJQ2hDTENCVExDQkVYMmtwWEc0Z0lDOHZJQ0FnZDJWcFoyaDBjeUFnSUNBZ0lDaFJMMHN2VmlrZ0lDQWdPaUFvUkY5cExDQkVJQ3NnUkNBcklFUmZkaWxjYmlBZ0x5OGdJQ0JpYVdGeklDQWdJQ0FnSUNBZ0tGRXZTeTlXS1NBZ0lDQTZJQ2hFSUNzZ1JDQXJJRVJmZGlsY2JpQWdMeThnSUNCdFlYTnJYMmx1WkdWNElDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUhObFpTQmlaV3h2ZDF4dUlDQXZMeUFnSUhCaGMzUWdJQ0FnSUNBZ0lDQW9TeTlXS1NBZ0lDQWdJRG9nS0RJc0lFSXNJRTRzSUZBc0lFZ3BJRzl5SUU1VlRFeGNiaUFnTHk4Z0lDQnlaV3hoZEdsMlpWOXdiM05wZEdsdmJsOWlhV0Z6SUNBZ0lDQWdJQ0FnSUNBZ09pQW9RaXdnVGl3Z1V5d2dWQ2tnYjNJZ1RsVk1URnh1WEc0Z0lDOHZJRVp2Y2lCdFlYTnJYMmx1WkdWNExDQjBhR1VnWm05c2JHOTNhVzVuSUhOb1lYQmxjeUJoY21VZ2MzVndjRzl5ZEdWa09seHVJQ0F2THlBZ0lDQWdUbFZNVEN3Z0tFSXNJREVwTENBb01Td2dNU2xjYmlBZ0x5OGdJQ0FnSUNoQ0tTd2dLRElnS2lCQ0tTd2dLRE1nS2lCQ0lDc2dNaWxjYmlBZ0x5OGdJQ0FnSUNoQ0xDQlVLVnh1SUNBdkx5QWdJQ0FnS0VJc0lGTXNJRlFwWEc0Z0lDOHZJQ0FnSUNBb1Fpd2dNU3dnVFN3Z1RTbGNiaUFnTHk5Y2JpQWdMeThnVjJobGJpQmhJRzF2WkdWc0lHbHpJSEJ5ZFc1bFpDQW9iR2xyWlNCemIyMWxJR0YwZEdWdWRHbHZiaUJvWldGa2N5QmhjbVVnY21WdGIzWmxaQ0JwYmlCUkwwc3ZWaWtzSUdsdWNIVjBYMmhwWkdSbGJsOXphWHBsSUdOdmRXeGtJR0psSUd4aGNtZGxjbHh1SUNBdkx5QjBhR0Z1SUdocFpHUmxiaUJrYVcxbGJuTnBiMjRnYjJZZ1VTd2dTeUJoYm1RZ1ZpNWNibHh1SUNCamIyNXpkQ0JwYm5CMWRDQTlJR2x1Y0hWMGMxc3dYVHRjYmlBZ1kyOXVjM1FnZDJWcFoyaDBjeUE5SUdsdWNIVjBjMXN4WFR0Y2JpQWdZMjl1YzNRZ1ltbGhjeUE5SUdsdWNIVjBjMXN5WFR0Y2JpQWdZMjl1YzNRZ2JXRnphMGx1WkdWNElEMGdhVzV3ZFhSeld6TmRPMXh1SUNCamIyNXpkQ0J3WVhOMElEMGdhVzV3ZFhSeld6UmRPMXh1SUNCamIyNXpkQ0J5Wld4aGRHbDJaVkJ2YzJsMGFXOXVRbWxoY3lBOUlHbHVjSFYwYzFzMVhUdGNibHh1SUNCcFppQW9jR0Z6ZENBbUppQnlaV3hoZEdsMlpWQnZjMmwwYVc5dVFtbGhjeWtnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RWFIwWlc1MGFXOXVJR05oYm01dmRDQm9ZWFpsSUdKdmRHZ2djR0Z6ZENCaGJtUWdjbVZzWVhScGRtVmZjRzl6YVhScGIyNWZZbWxoY3ljcE8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0dsdWNIVjBMbVJwYlhNdWJHVnVaM1JvSUNFOVBTQXpLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpibkIxZENCY0ltbHVjSFYwWENJZ2JYVnpkQ0JvWVhabElETWdaR2x0Wlc1emFXOXVjeWNwTzF4dUlDQjlYRzVjYmlBZ1kyOXVjM1FnWW1GMFkyaFRhWHBsSUQwZ2FXNXdkWFF1WkdsdGMxc3dYVHRjYmlBZ1kyOXVjM1FnYzJWeGRXVnVZMlZNWlc1bmRHZ2dQU0JwYm5CMWRDNWthVzF6V3pGZE8xeHVJQ0JqYjI1emRDQnBibkIxZEVocFpHUmxibE5wZW1VZ1BTQnBibkIxZEM1a2FXMXpXekpkTzF4dVhHNGdJR2xtSUNoaWFXRnpMbVJwYlhNdWJHVnVaM1JvSUNFOVBTQXhLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpibkIxZENCY0ltSnBZWE5jSWlCcGN5QmxlSEJsWTNSbFpDQjBieUJvWVhabElERWdaR2x0Wlc1emFXOXVjeWNwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLSGRsYVdkb2RITXVaR2x0Y3k1c1pXNW5kR2dnSVQwOUlESXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owbHVjSFYwSUZ3aWQyVnBaMmgwYzF3aUlHbHpJR1Y0Y0dWamRHVmtJSFJ2SUdoaGRtVWdNaUJrYVcxbGJuTnBiMjV6SnlrN1hHNGdJSDFjYmx4dUlDQnBaaUFvZDJWcFoyaDBjeTVrYVcxeld6QmRJQ0U5UFNCcGJuQjFkRWhwWkdSbGJsTnBlbVVwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1Y0hWMElERWdaR2x0Wlc1emFXOXVJREFnYzJodmRXeGtJR2hoZG1VZ2MyRnRaU0JzWlc1bmRHZ2dZWE1nWkdsdFpXNXphVzl1SURJZ2IyWWdhVzV3ZFhRZ01DY3BPMXh1SUNCOVhHNWNiaUFnYVdZZ0tHSnBZWE11WkdsdGMxc3dYU0FoUFQwZ2QyVnBaMmgwY3k1a2FXMXpXekZkS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RKYm5CMWRDQmNJbUpwWVhOY0lpQmthVzFsYm5OcGIyNGdNQ0J6YUc5MWJHUWdhR0YyWlNCellXMWxJR3hsYm1kMGFDQmhjeUJrYVcxbGJuTnBiMjRnTVNCdlppQnBibkIxZENCY0luZGxhV2RvZEhOY0lpY3BPMXh1SUNCOVhHNWNiaUFnYkdWMElIRklhV1JrWlc1VGFYcGxJRDBnWW1saGN5NWthVzF6V3pCZElDOGdNenRjYmlBZ2JHVjBJR3RJYVdSa1pXNVRhWHBsSUQwZ2NVaHBaR1JsYmxOcGVtVTdYRzRnSUd4bGRDQjJTR2xrWkdWdVUybDZaU0E5SUd0SWFXUmtaVzVUYVhwbE8xeHVJQ0JwWmlBb1lYUjBjbWxpZFhSbGN5NXhhM1pJYVdSa1pXNVRhWHBsY3k1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2FXWWdLR0YwZEhKcFluVjBaWE11Y1d0MlNHbGtaR1Z1VTJsNlpYTXViR1Z1WjNSb0lDRTlQU0F6S1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjNGcmRsOW9hV1JrWlc1ZmMybDZaWE1nWVhSMGNtbGlkWFJsSUhOb2IzVnNaQ0JvWVhabElETWdaV3hsYldWdWRITW5LVHRjYmlBZ0lDQjlYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQnplaUJ2WmlCaGRIUnlhV0oxZEdWekxuRnJka2hwWkdSbGJsTnBlbVZ6S1NCN1hHNGdJQ0FnSUNCcFppQW9jM29nSlNCaGRIUnlhV0oxZEdWekxtNTFiVWhsWVdSeklDRTlQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmNXdDJYMmhwWkdSbGJsOXphWHBsY3lCemFHOTFiR1FnWW1VZ1pHbDJhWE5wWW14bElHSjVJRzUxYlY5b1pXRmtjeWNwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJSEZJYVdSa1pXNVRhWHBsSUQwZ1lYUjBjbWxpZFhSbGN5NXhhM1pJYVdSa1pXNVRhWHBsYzFzd1hUdGNiaUFnSUNCclNHbGtaR1Z1VTJsNlpTQTlJR0YwZEhKcFluVjBaWE11Y1d0MlNHbGtaR1Z1VTJsNlpYTmJNVjA3WEc0Z0lDQWdka2hwWkdSbGJsTnBlbVVnUFNCaGRIUnlhV0oxZEdWekxuRnJka2hwWkdSbGJsTnBlbVZ6V3pKZE8xeHVJQ0I5WEc1Y2JpQWdZMjl1YzNRZ2EzWlRaWEYxWlc1alpVeGxibWQwYUNBOUlITmxjWFZsYm1ObFRHVnVaM1JvTzF4dVhHNGdJR2xtSUNoeFNHbGtaR1Z1VTJsNlpTQWhQVDBnYTBocFpHUmxibE5wZW1VcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjNGcmRsOW9hV1JrWlc1ZmMybDZaWE1nWm1seWMzUWdaV3hsYldWdWRDQnphRzkxYkdRZ1ltVWdjMkZ0WlNCaGN5QjBhR1VnYzJWamIyNWtKeWs3WEc0Z0lIMWNibHh1SUNCcFppQW9ZbWxoY3k1a2FXMXpXekJkSUNFOVBTQnhTR2xrWkdWdVUybDZaU0FySUd0SWFXUmtaVzVUYVhwbElDc2dka2hwWkdSbGJsTnBlbVVwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1Y0hWMElGd2lZbWxoYzF3aUlHUnBiV1Z1YzJsdmJpQXdJSE5vYjNWc1pDQm9ZWFpsSUhOaGJXVWdiR1Z1WjNSb0lHRnpJSE4xYlNCdlppQlJMMHN2VmlCb2FXUmtaVzRnYzJsNlpYTW5LVHRjYmlBZ2ZWeHVYRzRnSUd4bGRDQndZWE4wVTJWeGRXVnVZMlZNWlc1bmRHZ2dQU0F3TzF4dUlDQnBaaUFvY0dGemRDa2dlMXh1SUNBZ0lHbG1JQ2hyU0dsa1pHVnVVMmw2WlNBaFBUMGdka2hwWkdSbGJsTnBlbVVwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduU1c1d2RYUWdYQ0p3WVhOMFhDSWdaWGh3WldOMElHdGZhR2xrWkdWdVgzTnBlbVVnUFQwZ2RsOW9hV1JrWlc1ZmMybDZaU2NwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvY0dGemRDNWthVzF6TG14bGJtZDBhQ0FoUFQwZ05Ta2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpibkIxZENCY0luQmhjM1JjSWlCdGRYTjBJR2hoZG1VZ05TQmthVzFsYm5OcGIyNXpKeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2h3WVhOMExtUnBiWE5iTUYwZ0lUMDlJRElwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduU1c1d2RYUWdYQ0p3WVhOMFhDSWdabWx5YzNRZ1pHbHRaVzV6YVc5dUlHMTFjM1FnWW1VZ01pY3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9jR0Z6ZEM1a2FXMXpXekZkSUNFOVBTQmlZWFJqYUZOcGVtVXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25TVzV3ZFhRZ1hDSndZWE4wWENJZ2MyVmpiMjVrSUdScGJXVnVjMmx2YmlCdGRYTjBJR0psSUdKaGRHTm9YM05wZW1VbktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tIQmhjM1F1WkdsdGMxc3lYU0FoUFQwZ1lYUjBjbWxpZFhSbGN5NXVkVzFJWldGa2N5a2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpibkIxZENCY0luQmhjM1JjSWlCMGFHbHlaQ0JrYVcxbGJuTnBiMjRnYlhWemRDQmlaU0J1ZFcxZmFHVmhaSE1uS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hCaGMzUXVaR2x0YzFzMFhTQWhQVDBnYTBocFpHUmxibE5wZW1VZ0x5QmhkSFJ5YVdKMWRHVnpMbTUxYlVobFlXUnpLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1Y0hWMElGd2ljR0Z6ZEZ3aUlHWnBablJvSUdScGJXVnVjMmx2YmlCdGRYTjBJR0psSUd0ZmFHbGtaR1Z1WDNOcGVtVWdMeUJ1ZFcxZmFHVmhaSE1uS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb0lXRjBkSEpwWW5WMFpYTXVjR0Z6ZEZCeVpYTmxiblJUYUdGeVpVSjFabVpsY2lrZ2UxeHVJQ0FnSUNBZ2NHRnpkRk5sY1hWbGJtTmxUR1Z1WjNSb0lEMGdjR0Z6ZEM1a2FXMXpXek5kTzF4dUlDQWdJSDFjYmlBZ0lDQXZMeUJVVDBSUE9pQm9ZVzVrYkdVZ2NHRnpkRjl6WlhGZmJHVnVYRzRnSUgxY2JseHVJQ0JqYjI1emRDQjBiM1JoYkZObGNYVmxibU5sVEdWdVozUm9JRDBnYTNaVFpYRjFaVzVqWlV4bGJtZDBhQ0FySUhCaGMzUlRaWEYxWlc1alpVeGxibWQwYUR0Y2JpQWdZMjl1YzNRZ2JXRjRVMlZ4ZFdWdVkyVk1aVzVuZEdnZ1BTQXRNVHRjYmx4dUlDQmpiMjV6ZENCdFlYTnJWSGx3WlNBOUlFRjBkR1Z1ZEdsdmJrMWhjMnRVZVhCbExtNXZibVU3WEc0Z0lHbG1JQ2h0WVhOclNXNWtaWGdwSUh0Y2JpQWdJQ0F2THlCdFlYTnJWSGx3WlNBOUlFRjBkR1Z1ZEdsdmJrMWhjMnRVZVhCbExrMUJVMHRmVlU1TFRrOVhUanRjYmlBZ0lDQXZMeUJVVDBSUE9pQm9ZVzVrYkdVZ2JXRnphMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblRXRnpheUJ1YjNRZ2MzVndjRzl5ZEdWa0p5azdYRzRnSUgxY2JseHVJQ0JwWmlBb2NHRnpkQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25jR0Z6ZENCcGN5QnViM1FnYzNWd2NHOXlkR1ZrSnlrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUdKaGRHTm9VMmw2WlN4Y2JpQWdJQ0J6WlhGMVpXNWpaVXhsYm1kMGFDeGNiaUFnSUNCd1lYTjBVMlZ4ZFdWdVkyVk1aVzVuZEdnc1hHNGdJQ0FnYTNaVFpYRjFaVzVqWlV4bGJtZDBhQ3hjYmlBZ0lDQjBiM1JoYkZObGNYVmxibU5sVEdWdVozUm9MRnh1SUNBZ0lHMWhlRk5sY1hWbGJtTmxUR1Z1WjNSb0xGeHVJQ0FnSUdsdWNIVjBTR2xrWkdWdVUybDZaU3hjYmlBZ0lDQm9hV1JrWlc1VGFYcGxPaUJ4U0dsa1pHVnVVMmw2WlN4Y2JpQWdJQ0IyU0dsa1pHVnVVMmw2WlN4Y2JpQWdJQ0JvWldGa1UybDZaVG9nVFdGMGFDNW1iRzl2Y2loeFNHbGtaR1Z1VTJsNlpTQXZJR0YwZEhKcFluVjBaWE11Ym5WdFNHVmhaSE1wTEZ4dUlDQWdJSFpJWldGa1UybDZaVG9nVFdGMGFDNW1iRzl2Y2loMlNHbGtaR1Z1VTJsNlpTQXZJR0YwZEhKcFluVjBaWE11Ym5WdFNHVmhaSE1wTEZ4dUlDQWdJRzUxYlVobFlXUnpPaUJoZEhSeWFXSjFkR1Z6TG01MWJVaGxZV1J6TEZ4dUlDQWdJR2x6Vlc1cFpHbHlaV04wYVc5dVlXdzZJR1poYkhObExGeHVJQ0FnSUhCaGMzUlFjbVZ6Wlc1MFUyaGhjbVZDZFdabVpYSTZJR1poYkhObExGeHVJQ0FnSUcxaGMydEdhV3gwWlhKV1lXeDFaVG9nWVhSMGNtbGlkWFJsY3k1dFlYTnJSbWxzZEdWeVZtRnNkV1VzWEc0Z0lDQWdiV0Z6YTFSNWNHVXNYRzRnSUNBZ2MyTmhiR1U2SUdGMGRISnBZblYwWlhNdWMyTmhiR1VzWEc0Z0lDQWdZbkp2WVdSallYTjBVbVZ6VUc5elFtbGhjem9nWm1Gc2MyVXNYRzRnSUNBZ2NHRnpjMUJoYzNSSmJrdDJPaUJtWVd4elpTeGNiaUFnSUNCeGEzWkdiM0p0WVhRNklFRjBkR1Z1ZEdsdmJsRnJka1p2Y20xaGRDNXhhM1pDVGxOSUxGeHVJQ0I5TzF4dWZUdGNibHh1WTI5dWMzUWdZM0psWVhSbFNXNVFiR0ZqWlZOdlpuUnRZWGhRY205bmNtRnRTVzVtYnlBOUlDaGZZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHbHVjSFYwT2lCVVpXNXpiM0pXYVdWM0xDQnVPaUJ1ZFcxaVpYSXNJR1E2SUc1MWJXSmxjaWtnUFQ0Z2UxeHVJQ0JqYjI1emRDQmpiMjF3YjI1bGJuUnpJRDBnWjJWMFRXRjRRMjl0Y0c5dVpXNTBjeWhrS1R0Y2JpQWdiR1YwSUZkSElEMGdOalE3WEc0Z0lHTnZibk4wSUdSRGIyMXdJRDBnWkNBdklHTnZiWEJ2Ym1WdWRITTdYRzRnSUdsbUlDaGtRMjl0Y0NBOElGZEhLU0I3WEc0Z0lDQWdWMGNnUFNBeE8xeHVJQ0I5SUdWc2MyVWdhV1lnS0dSRGIyMXdJQzhnT0NBOElEWTBLU0I3WEc0Z0lDQWdWMGNnUFNCTllYUm9MbU5sYVd3b1pFTnZiWEFnTHlBNEtUdGNiaUFnZlZ4dUlDQmpiMjV6ZENCbGJHVnRaVzUwYzFCbGNsUm9jbVZoWkNBOUlFMWhkR2d1WTJWcGJDaGtJQzhnWTI5dGNHOXVaVzUwY3lBdklGZEhLVHRjYmlBZ1kyOXVjM1FnY0hKdlozSmhiVlZ1YVdadmNtMXpPaUJRY205bmNtRnRWVzVwWm05eWJWdGRJRDBnVzF4dUlDQWdJSHQwZVhCbE9pQnBibkIxZEM1a1lYUmhWSGx3WlN3Z1pHRjBZVG9nTVNBdklHUjlMQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCa1EyOXRjSDBzWEc0Z0lDQWdlM1I1Y0dVNklFUmhkR0ZVZVhCbExuVnBiblF6TWl3Z1pHRjBZVG9nWld4bGJXVnVkSE5RWlhKVWFISmxZV1I5WEc0Z0lGMDdYRzRnSUdOdmJuTjBJR1JoZEdGVWVYQmxJRDBnZEdWdWMyOXlWSGx3WlZSdlYzTm5iRk4wYjNKaFoyVlVlWEJsS0dsdWNIVjBMbVJoZEdGVWVYQmxMQ0JqYjIxd2IyNWxiblJ6S1R0Y2JpQWdZMjl1YzNRZ1pqTXlWSGx3WlNBOUlIUmxibk52Y2xSNWNHVlViMWR6WjJ4V1lXeDFaVlI1Y0dVb1JHRjBZVlI1Y0dVdVpteHZZWFFzSUdOdmJYQnZibVZ1ZEhNcE8xeHVYRzRnSUdOdmJuTjBJR2RsZEZOb1lXUmxjbE52ZFhKalpTQTlJQ2h6YUdGa1pYSklaV3h3WlhJNklGTm9ZV1JsY2tobGJIQmxjaWtnUFQ0Z2UxeHVJQ0FnSUdOdmJuTjBJR2x1Y0hWMFNHVnNjR1Z5SUQwZ2IzVjBjSFYwVm1GeWFXRmliR1VvSjNnbkxDQnBibkIxZEM1a1lYUmhWSGx3WlN3Z2FXNXdkWFF1WkdsdGN5d2dZMjl0Y0c5dVpXNTBjeWs3WEc0Z0lDQWdZMjl1YzNRZ1pXeGxiVlpoYkhWbFZIbHdaU0E5SUhSbGJuTnZjbFI1Y0dWVWIxZHpaMnhXWVd4MVpWUjVjR1VvYVc1d2RYUXVaR0YwWVZSNWNHVXBPMXh1SUNBZ0lHTnZibk4wSUhWdWFXWnZjbTF6T2lCVmJtbG1iM0p0YzBGeWNtRjVWSGx3WlNBOUlGdGNiaUFnSUNBZ0lIdHVZVzFsT2lBblpGOXBiblluTENCMGVYQmxPaUJsYkdWdFZtRnNkV1ZVZVhCbElHRnpJRlZ1YVdadmNtMUVZWFJoUld4bGJXVnVkRlI1Y0dWOUxDQjdibUZ0WlRvZ0oyUmZZMjl0Y0Njc0lIUjVjR1U2SUNkMU16SW5mU3hjYmlBZ0lDQWdJSHR1WVcxbE9pQW5aV3hsYldWdWRITmZjR1Z5WDNSb2NtVmhaQ2NzSUhSNWNHVTZJQ2QxTXpJbmZWeHVJQ0FnSUYwN1hHNWNiaUFnSUNCeVpYUjFjbTRnWUZ4dUlDQjJZWEk4ZDI5eWEyZHliM1Z3UGlCMGFISmxZV1JmYldGNE9pQmhjbkpoZVR4bU16SXNJQ1I3VjBkOVBqdGNiaUFnZG1GeVBIZHZjbXRuY205MWNENGdkR2h5WldGa1gzTjFiVG9nWVhKeVlYazhaak15TENBa2UxZEhmVDQ3WEc0Z0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG5KbFoybHpkR1Z5Vlc1cFptOXliWE1vZFc1cFptOXliWE1wTG1SbFkyeGhjbVZXWVhKcFlXSnNaWE1vYVc1d2RYUklaV3h3WlhJcGZWeHVJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNXRZV2x1VTNSaGNuUW9XMXh1SUNBZ0lDQWdWMGNzSURFc0lERmNiaUFnSUNCZEtYMWNiaUFnSUNCc1pYUWdiRzlqWVd4ZmIyWm1jMlYwSUQwZ2JHOWpZV3hmYVdSNElDb2dkVzVwWm05eWJYTXVaV3hsYldWdWRITmZjR1Z5WDNSb2NtVmhaRHRjYmlBZ0lDQnNaWFFnYjJabWMyVjBJRDBnZDI5eWEyZHliM1Z3WDJsa0xuZ2dLaUIxYm1sbWIzSnRjeTVrWDJOdmJYQWdLeUJzYjJOaGJGOXZabVp6WlhRN1hHNWNiaUFnSUNCMllYSWdkR2h5WldGa1gyMWhlRjkyWldOMGIzSWdQU0FrZTJZek1sUjVjR1Y5S0MwekxqUXdNamd5TTJVck16aG1LVHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBPaUIxTXpJZ1BTQXdPeUJwSUR3Z2RXNXBabTl5YlhNdVpXeGxiV1Z1ZEhOZmNHVnlYM1JvY21WaFpDQW1KaUJwSUNzZ2JHOWpZV3hmYjJabWMyVjBJRHdnZFc1cFptOXliWE11WkY5amIyMXdPeUJwS3lzcElIdGNiaUFnSUNBZ0lIUm9jbVZoWkY5dFlYaGZkbVZqZEc5eUlEMGdiV0Y0S0NSN1pqTXlWSGx3Wlgwb2VGdHZabVp6WlhRZ0t5QnBYU2tzSUhSb2NtVmhaRjl0WVhoZmRtVmpkRzl5S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2h5WldGa1gyMWhlRnRzYjJOaGJGOXBaSGhkSUQwZ0pIc29LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ2MzZHBkR05vSUNoamIyMXdiMjVsYm5SektTQjdYRzRnSUNBZ0lDQWdJR05oYzJVZ01UcGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdKM1JvY21WaFpGOXRZWGhmZG1WamRHOXlKenRjYmlBZ0lDQWdJQ0FnWTJGelpTQXlPbHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuYldGNEtIUm9jbVZoWkY5dFlYaGZkbVZqZEc5eUxuZ3NJSFJvY21WaFpGOXRZWGhmZG1WamRHOXlMbmtwSnp0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0EwT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbmJXRjRLRzFoZUNoMGFISmxZV1JmYldGNFgzWmxZM1J2Y2k1NExDQjBhSEpsWVdSZmJXRjRYM1psWTNSdmNpNTVLU3dnYldGNEtIUm9jbVZoWkY5dFlYaGZkbVZqZEc5eUxub3NJSFJvY21WaFpGOXRZWGhmZG1WamRHOXlMbmNwS1NjN1hHNGdJQ0FnSUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQlZibk4xY0hCdmNuUmxaQ0JqYjIxd2IyNWxiblJ6T2lBa2UyTnZiWEJ2Ym1WdWRITjlZQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU2tvS1gwN1hHNGdJQ0FnZDI5eWEyZHliM1Z3UW1GeWNtbGxjaWdwTzF4dVhHNGdJQ0FnZG1GeUlHMWhlRjkyWVd4MVpTQTlJQ0JtTXpJb0xUTXVOREF5T0RJelpTc3pPR1lwTzF4dUlDQWdJR1p2Y2lBb2RtRnlJR2tnUFNBd2RUc2dhU0E4SUNSN1YwZDlPeUJwS3lzcElIdGNiaUFnSUNBZ0lHMWhlRjkyWVd4MVpTQTlJRzFoZUNoMGFISmxZV1JmYldGNFcybGRMQ0J0WVhoZmRtRnNkV1VwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCemRXMWZkbVZqZEc5eUlEMGdKSHRtTXpKVWVYQmxmU2d3S1R0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwT2lCMU16SWdQU0F3T3lCcElEd2dkVzVwWm05eWJYTXVaV3hsYldWdWRITmZjR1Z5WDNSb2NtVmhaQ0FtSmlCcElDc2diRzlqWVd4ZmIyWm1jMlYwSUR3Z2RXNXBabTl5YlhNdVpGOWpiMjF3T3lCcEt5c3BJSHRjYmlBZ0lDQWdJSE4xYlY5MlpXTjBiM0lnS3owZ1pYaHdLQ1I3WmpNeVZIbHdaWDBvZUZ0dlptWnpaWFFnS3lCcFhTa2dMU0J0WVhoZmRtRnNkV1VwTzF4dUlDQWdJSDFjYmlBZ0lDQjBhSEpsWVdSZmMzVnRXMnh2WTJGc1gybGtlRjBnUFNBa2V5Z29LU0E5UGlCN1hHNGdJQ0FnSUNCemQybDBZMmdnS0dOdmJYQnZibVZ1ZEhNcElIdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5jM1Z0WDNabFkzUnZjaWM3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSjNOMWJWOTJaV04wYjNJdWVDQXJJSE4xYlY5MlpXTjBiM0l1ZVNjN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnTkRwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0ozTjFiVjkyWldOMGIzSXVlQ0FySUhOMWJWOTJaV04wYjNJdWVTQXJJSE4xYlY5MlpXTjBiM0l1ZWlBcklITjFiVjkyWldOMGIzSXVkeWM3WEc0Z0lDQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCVmJuTjFjSEJ2Y25SbFpDQmpiMjF3YjI1bGJuUnpPaUFrZTJOdmJYQnZibVZ1ZEhOOVlDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTa29LWDA3WEc0Z0lDQWdkMjl5YTJkeWIzVndRbUZ5Y21sbGNpZ3BPMXh1WEc0Z0lDQWdkbUZ5SUhOMWJUb2daak15SUQwZ01EdGNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNSFU3SUdrZ1BDQWtlMWRIZlRzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0J6ZFcwZ0t6MGdkR2h5WldGa1gzTjFiVnRwWFR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2MzVnRJRDA5SURBcElIdGNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHazZJSFV6TWlBOUlEQTdJR2tnUENCMWJtbG1iM0p0Y3k1bGJHVnRaVzUwYzE5d1pYSmZkR2h5WldGa0lDWW1JR2tnS3lCc2IyTmhiRjl2Wm1aelpYUWdQQ0IxYm1sbWIzSnRjeTVrWDJOdmJYQTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQjRXMjltWm5ObGRDQXJJR2xkSUQwZ0pIdHBibkIxZEVobGJIQmxjaTUwZVhCbExuWmhiSFZsZlNoMWJtbG1iM0p0Y3k1a1gybHVkaWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHazZJSFV6TWlBOUlEQTdJR2tnUENCMWJtbG1iM0p0Y3k1bGJHVnRaVzUwYzE5d1pYSmZkR2h5WldGa0lDWW1JR2tnS3lCc2IyTmhiRjl2Wm1aelpYUWdQQ0IxYm1sbWIzSnRjeTVrWDJOdmJYQTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnWmpNeWFXNXdkWFFnUFNBa2UyWXpNbFI1Y0dWOUtIaGJiMlptYzJWMElDc2dhVjBwTzF4dUlDQWdJQ0FnSUNCNFcyOW1abk5sZENBcklHbGRJRDBnSkh0cGJuQjFkRWhsYkhCbGNpNTBlWEJsTG5aaGJIVmxmU2hsZUhBb1pqTXlhVzV3ZFhRZ0xTQnRZWGhmZG1Gc2RXVXBJQzhnYzNWdEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFnTzF4dUlDQjlPMXh1WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYm1GdFpUb2dKMEYwZEdWdWRHbHZibEJ5YjJKelUyOW1kRzFoZUNjc1hHNGdJQ0FnYzJoaFpHVnlRMkZqYUdVNklIdG9hVzUwT2lCZ0pIdFhSMzA3Skh0a1lYUmhWSGx3WlgwN0pIdGpiMjF3YjI1bGJuUnpmV0I5TEZ4dUlDQWdJR2RsZEZOb1lXUmxjbE52ZFhKalpTeGNiaUFnSUNCblpYUlNkVzVFWVhSaE9pQW9LU0E5UGlBb2UyOTFkSEIxZEhNNklGdGRMQ0JrYVhOd1lYUmphRWR5YjNWd09pQjdlRG9nYm4wc0lIQnliMmR5WVcxVmJtbG1iM0p0YzMwcExGeHVJQ0I5TzF4dWZUdGNibHh1WTI5dWMzUWdZM0psWVhSbFFYUjBaVzUwYVc5dVVISnZZbk5RY205bmNtRnRTVzVtYnlBOVhHNGdJQ0FnS0Y5amIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ3dnY1RvZ1ZHVnVjMjl5Vm1sbGR5d2dhMlY1T2lCVVpXNXpiM0pXYVdWM0xDQnlaV3hoZEdsMlpWQnZjMmwwYVc5dVFtbGhjem9nVkdWdWMyOXlWbWxsZDN4MWJtUmxabWx1WldRc1hHNGdJQ0FnSUhCaGNtRnRaWFJsY25NNklFRjBkR1Z1ZEdsdmJsQmhjbUZ0WlhSbGNuTXNJR0YwZEhKcFluVjBaWE02SUVGMGRHVnVkR2x2YmtGMGRISnpMQ0J3WVhOMFUyVnhkV1Z1WTJWTVpXNW5kR2c2SUc1MWJXSmxjaWtnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZEc5MFlXeFRaWEYxWlc1alpVeGxibWQwYUNBOUlIQmhjM1JUWlhGMVpXNWpaVXhsYm1kMGFDQXJJSEJoY21GdFpYUmxjbk11YTNaVFpYRjFaVzVqWlV4bGJtZDBhRHRjYmlBZ0lDQWdJR052Ym5OMElIQnliMkp6VTJoaGNHVWdQU0JiY0dGeVlXMWxkR1Z5Y3k1aVlYUmphRk5wZW1Vc0lIQmhjbUZ0WlhSbGNuTXViblZ0U0dWaFpITXNJSEJoY21GdFpYUmxjbk11YzJWeGRXVnVZMlZNWlc1bmRHZ3NJSFJ2ZEdGc1UyVnhkV1Z1WTJWTVpXNW5kR2hkTzF4dVhHNGdJQ0FnSUNBdkx5QlVUMFJQT2lCb1lXNWtiR1VnYldGemExeHVYRzRnSUNBZ0lDQmpiMjV6ZENCaGJIQm9ZU0E5SUdGMGRISnBZblYwWlhNdWMyTmhiR1VnUFQwOUlEQWdQeUF4TGpBZ0x5Qk5ZWFJvTG5OeGNuUW9jR0Z5WVcxbGRHVnljeTVvWldGa1UybDZaU2tnT2lCaGRIUnlhV0oxZEdWekxuTmpZV3hsTzF4dUlDQWdJQ0FnWTI5dWMzUWdZMjl0Y0c5dVpXNTBjeUE5SUdkbGRFMWhlRU52YlhCdmJtVnVkSE1vY0dGeVlXMWxkR1Z5Y3k1b1pXRmtVMmw2WlNrN1hHNGdJQ0FnSUNCamIyNXpkQ0IyWldOMGIzSnBlbVZrU0dWaFpGTnBlbVVnUFNCd1lYSmhiV1YwWlhKekxtaGxZV1JUYVhwbElDOGdZMjl0Y0c5dVpXNTBjenRjYmlBZ0lDQWdJR052Ym5OMElGUkpURVZmVTBsYVJTQTlJREV5TzF4dUlDQWdJQ0FnWTI5dWMzUWdaR2x6Y0dGMFkyZ2dQU0I3WEc0Z0lDQWdJQ0FnSUhnNklFMWhkR2d1WTJWcGJDaDBiM1JoYkZObGNYVmxibU5sVEdWdVozUm9JQzhnVkVsTVJWOVRTVnBGS1N4Y2JpQWdJQ0FnSUNBZ2VUb2dUV0YwYUM1alpXbHNLSEJoY21GdFpYUmxjbk11YzJWeGRXVnVZMlZNWlc1bmRHZ2dMeUJVU1V4RlgxTkpXa1VwTEZ4dUlDQWdJQ0FnSUNCNk9pQndZWEpoYldWMFpYSnpMbUpoZEdOb1UybDZaU0FxSUhCaGNtRnRaWFJsY25NdWJuVnRTR1ZoWkhOY2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCamIyNXpkQ0J3Y205bmNtRnRWVzVwWm05eWJYTTZJRkJ5YjJkeVlXMVZibWxtYjNKdFcxMGdQU0JiWEc0Z0lDQWdJQ0FnSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklIQmhjbUZ0WlhSbGNuTXVjMlZ4ZFdWdVkyVk1aVzVuZEdoOUxDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUIyWldOMGIzSnBlbVZrU0dWaFpGTnBlbVY5TEZ4dUlDQWdJQ0FnSUNCN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQjBiM1JoYkZObGNYVmxibU5sVEdWdVozUm9mU3dnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2NHRnlZVzFsZEdWeWN5NXVkVzFJWldGa2MzMHNYRzRnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNW1iRzloZEN3Z1pHRjBZVG9nWVd4d2FHRjlYRzRnSUNBZ0lDQmRPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQnBibkIxZEVSbGNHVnVaR1Z1WTJsbGN6b2dVSEp2WjNKaGJVbHVjSFYwVkdWdWMyOXlTVzVtYjBSbGNHVnVaR1Z1WTNsYlhTQTlJRnNuZEhsd1pTY3NJQ2QwZVhCbEoxMDdYRzRnSUNBZ0lDQnBaaUFvY21Wc1lYUnBkbVZRYjNOcGRHbHZia0pwWVhNcElIdGNiaUFnSUNBZ0lDQWdhVzV3ZFhSRVpYQmxibVJsYm1OcFpYTXVjSFZ6YUNnbmNtRnVheWNwTzF4dUlDQWdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE11Y0hWemFDZ3VMaTVqY21WaGRHVlVaVzV6YjNKVGFHRndaVlpoY21saFlteGxjeWh5Wld4aGRHbDJaVkJ2YzJsMGFXOXVRbWxoY3k1a2FXMXpLU2s3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR2RsZEZOb1lXUmxjbE52ZFhKalpTQTlJQ2h6YUdGa1pYSklaV3h3WlhJNklGTm9ZV1JsY2tobGJIQmxjaWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCeFNXNXdkWFFnUFNCcGJuQjFkRlpoY21saFlteGxLQ2R4Snl3Z2NTNWtZWFJoVkhsd1pTd2djUzVrYVcxekxDQmpiMjF3YjI1bGJuUnpLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhMGx1Y0hWMElEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnbmEyVjVKeXdnYTJWNUxtUmhkR0ZVZVhCbExDQnJaWGt1WkdsdGN5d2dZMjl0Y0c5dVpXNTBjeWs3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMFZtRnljeUE5SUZ0eFNXNXdkWFFzSUd0SmJuQjFkRjA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsYkdGMGFYWmxVRzl6YVhScGIyNUNhV0Z6U1c1d2RYUWdQU0J5Wld4aGRHbDJaVkJ2YzJsMGFXOXVRbWxoY3lBL1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwYm5CMWRGWmhjbWxoWW14bEtDZHlaV3hoZEdsMlpWOXdiM05wZEdsdmJsOWlhV0Z6Snl3Z2NtVnNZWFJwZG1WUWIzTnBkR2x2YmtKcFlYTXVaR0YwWVZSNWNHVXNJSEpsYkdGMGFYWmxVRzl6YVhScGIyNUNhV0Z6TG1ScGJYTXViR1Z1WjNSb0tTQTZYRzRnSUNBZ0lDQWdJQ0FnSUNCMWJtUmxabWx1WldRN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5Wld4aGRHbDJaVkJ2YzJsMGFXOXVRbWxoYzBsdWNIVjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXNXdkWFJXWVhKekxuQjFjMmdvY21Wc1lYUnBkbVZRYjNOcGRHbHZia0pwWVhOSmJuQjFkQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYjNWMGNIVjBJRDBnYjNWMGNIVjBWbUZ5YVdGaWJHVW9KMjkxZEhCMWRDY3NJSEV1WkdGMFlWUjVjR1VzSUhCeWIySnpVMmhoY0dVcE8xeHVJQ0FnSUNBZ0lDQXZMeUJqYjI1emRDQmtZWFJoVkhsd1pTQTlJSFJsYm5OdmNsUjVjR1ZVYjFkeloyeFRkRzl5WVdkbFZIbHdaU2h4TG1SaGRHRlVlWEJsS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWmpNeVZIbHdaU0E5SUhSbGJuTnZjbFI1Y0dWVWIxZHpaMnhXWVd4MVpWUjVjR1VvUkdGMFlWUjVjR1V1Wm14dllYUXNJR052YlhCdmJtVnVkSE1wTzF4dVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUhWdWFXWnZjbTF6T2lCVmJtbG1iM0p0YzBGeWNtRjVWSGx3WlNBOUlGdGNiaUFnSUNBZ0lDQWdJQ0I3Ym1GdFpUb2dKMDBuTENCMGVYQmxPaUFuZFRNeUozMHNJSHR1WVcxbE9pQW5TeWNzSUhSNWNHVTZJQ2QxTXpJbmZTd2dlMjVoYldVNklDZE9KeXdnZEhsd1pUb2dKM1V6TWlkOUxGeHVJQ0FnSUNBZ0lDQWdJSHR1WVcxbE9pQW5iblZ0WDJobFlXUnpKeXdnZEhsd1pUb2dKM1V6TWlkOUxDQjdibUZ0WlRvZ0oyRnNjR2hoSnl3Z2RIbHdaVG9nSjJZek1pY2dZWE1nVlc1cFptOXliVVJoZEdGRmJHVnRaVzUwVkhsd1pYMWNiaUFnSUNBZ0lDQWdYVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR0JjYmlBZ1kyOXVjM1FnVkVsTVJWOVRTVnBGSUQwZ0pIdFVTVXhGWDFOSldrVjlkVHRjYmx4dUlDQjJZWEk4ZDI5eWEyZHliM1Z3UGlCMGFXeGxVVG9nWVhKeVlYazhKSHR4U1c1d2RYUXVkSGx3WlM1emRHOXlZV2RsZlN3Z0pIdFVTVXhGWDFOSldrVWdLaUJVU1V4RlgxTkpXa1Y5UGp0Y2JpQWdkbUZ5UEhkdmNtdG5jbTkxY0Q0Z2RHbHNaVXM2SUdGeWNtRjVQQ1I3Y1VsdWNIVjBMblI1Y0dVdWMzUnZjbUZuWlgwc0lDUjdWRWxNUlY5VFNWcEZJQ29nVkVsTVJWOVRTVnBGZlQ0N1hHNGdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxuSmxaMmx6ZEdWeVZXNXBabTl5YlhNb2RXNXBabTl5YlhNcExtUmxZMnhoY21WV1lYSnBZV0pzWlhNb0xpNHVhVzV3ZFhSV1lYSnpMQ0J2ZFhSd2RYUXBmVnh1SUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV0WVdsdVUzUmhjblFvVzF4dUlDQWdJQ0FnSUNBZ0lGUkpURVZmVTBsYVJTd2dWRWxNUlY5VFNWcEZMQ0F4WEc0Z0lDQWdJQ0FnSUYwcGZWeHVJQ0FnSUM4dklIZ2dhRzlzWkhNZ2RHaGxJRTRnWVc1a0lIa2dhRzlzWkhNZ2RHaGxJRTFjYmlBZ0lDQnNaWFFnYUdWaFpFbGtlQ0E5SUhkdmNtdG5jbTkxY0Y5cFpDNTZPMXh1SUNBZ0lHeGxkQ0J0SUQwZ2QyOXlhMmR5YjNWd1gybGtMbmtnS2lCVVNVeEZYMU5KV2tVN1hHNGdJQ0FnYkdWMElHNGdQU0IzYjNKclozSnZkWEJmYVdRdWVDQXFJRlJKVEVWZlUwbGFSVHRjYmlBZ0lDQnNaWFFnY1U5bVpuTmxkQ0E5SUhWdWFXWnZjbTF6TGswZ0tpQjFibWxtYjNKdGN5NUxJQ29nYUdWaFpFbGtlQ0FySUcwZ0tpQjFibWxtYjNKdGN5NUxPMXh1SUNBZ0lHeGxkQ0JyVDJabWMyVjBJRDBnZFc1cFptOXliWE11VGlBcUlIVnVhV1p2Y20xekxrc2dLaUJvWldGa1NXUjRJQ3NnYmlBcUlIVnVhV1p2Y20xekxrczdYRzVjYmlBZ0lDQjJZWElnZG1Gc2RXVWdQU0FrZTJZek1sUjVjR1Y5S0RBcE8xeHVJQ0FnSUdadmNpQW9kbUZ5SUhjNklIVXpNaUE5SURCMU95QjNJRHdnZFc1cFptOXliWE11U3pzZ2R5QXJQU0JVU1V4RlgxTkpXa1VwSUh0Y2JpQWdJQ0FnSUdsbUlDaG5iRzlpWVd4ZmFXUXVlU0E4SUhWdWFXWnZjbTF6TGswZ0ppWWdkeUFySUd4dlkyRnNYMmxrTG5nZ1BDQjFibWxtYjNKdGN5NUxLU0I3WEc0Z0lDQWdJQ0FnSUhScGJHVlJXMVJKVEVWZlUwbGFSU0FxSUd4dlkyRnNYMmxrTG5rZ0t5QnNiMk5oYkY5cFpDNTRYU0E5SUhGYmNVOW1abk5sZENBcklHeHZZMkZzWDJsa0xua2dLaUIxYm1sbWIzSnRjeTVMSUNzZ2R5QXJJR3h2WTJGc1gybGtMbmhkTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tHNGdLeUJzYjJOaGJGOXBaQzU1SUR3Z2RXNXBabTl5YlhNdVRpQW1KaUIzSUNzZ2JHOWpZV3hmYVdRdWVDQThJSFZ1YVdadmNtMXpMa3NwSUh0Y2JpQWdJQ0FnSUNBZ2RHbHNaVXRiVkVsTVJWOVRTVnBGSUNvZ2JHOWpZV3hmYVdRdWVTQXJJR3h2WTJGc1gybGtMbmhkSUQwZ2EyVjVXMnRQWm1aelpYUWdLeUJzYjJOaGJGOXBaQzU1SUNvZ2RXNXBabTl5YlhNdVN5QXJJSGNnS3lCc2IyTmhiRjlwWkM1NFhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIZHZjbXRuY205MWNFSmhjbkpwWlhJb0tUdGNibHh1SUNBZ0lDQWdabTl5SUNoMllYSWdhem9nZFRNeUlEMGdNSFU3SUdzZ1BDQlVTVXhGWDFOSldrVWdKaVlnZHl0cklEd2dkVzVwWm05eWJYTXVTenNnYXlzcktTQjdYRzRnSUNBZ0lDQWdJSFpoYkhWbElDczlJQ1I3WmpNeVZIbHdaWDBvZEdsc1pWRmJWRWxNUlY5VFNWcEZJQ29nYkc5allXeGZhV1F1ZVNBcklHdGRJQ29nZEdsc1pVdGJWRWxNUlY5VFNWcEZJQ29nYkc5allXeGZhV1F1ZUNBcklHdGRLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnZDI5eWEyZHliM1Z3UW1GeWNtbGxjaWdwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCb1pXRmtUMlptYzJWMElEMGdhR1ZoWkVsa2VDQXFJSFZ1YVdadmNtMXpMazBnS2lCMWJtbG1iM0p0Y3k1T08xeHVJQ0FnSUdsbUlDaG5iRzlpWVd4ZmFXUXVlU0E4SUhWdWFXWnZjbTF6TGswZ0ppWWdaMnh2WW1Gc1gybGtMbmdnUENCMWJtbG1iM0p0Y3k1T0tTQjdYRzRnSUNBZ0lDQnNaWFFnYjNWMGNIVjBTV1I0SUQwZ2FHVmhaRTltWm5ObGRDQXJJR2RzYjJKaGJGOXBaQzU1SUNvZ2RXNXBabTl5YlhNdVRpQXJJR2RzYjJKaGJGOXBaQzU0TzF4dUlDQWdJQ0FnZG1GeUlITjFiVG9nWmpNeUlEMGdKSHNvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUhOM2FYUmphQ0FvWTI5dGNHOXVaVzUwY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0ozWmhiSFZsSnp0Y2JpQWdJQ0FnSUNBZ0lDQWdJR05oYzJVZ01qcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNkMllXeDFaUzU0SUNzZ2RtRnNkV1V1ZVNjN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElEUTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbmRtRnNkV1V1ZUNBcklIWmhiSFZsTG5rZ0t5QjJZV3gxWlM1NklDc2dkbUZzZFdVdWR5YzdYRzRnSUNBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRlZ1YzNWd2NHOXlkR1ZrSUdOdmJYQnZibVZ1ZEhNNklDUjdZMjl0Y0c5dVpXNTBjMzFnS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBwS0NsOU8xeHVYRzRnSUNSN0tDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvY21Wc1lYUnBkbVZRYjNOcGRHbHZia0pwWVhOSmJuQjFkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHQmNiaUFnSUNBZ0lHeGxkQ0JpWVhSamFDQTlJSGR2Y210bmNtOTFjRjlwWkM1NklDOGdkVzVwWm05eWJYTXViblZ0WDJobFlXUnpPMXh1SUNBZ0lDQWdiR1YwSUdobFlXUWdQU0IzYjNKclozSnZkWEJmYVdRdWVpQWxJSFZ1YVdadmNtMXpMbTUxYlY5b1pXRmtjenRjYmlBZ0lDQWdJSFpoY2lCcGJtUnBZMlZ6SUQwZ0pIdHlaV3hoZEdsMlpWQnZjMmwwYVc5dVFtbGhjMGx1Y0hWMExuUjVjR1V1YVc1a2FXTmxjMzBvWW1GMFkyZ3NJR2hsWVdRc0lHZHNiMkpoYkY5cFpDNTVMQ0JuYkc5aVlXeGZhV1F1ZUNrN1hHNGdJQ0FnSUNCdmRYUndkWFJiYjNWMGNIVjBTV1I0WFNBOUlDUjdiM1YwY0hWMExuUjVjR1V1ZG1Gc2RXVjlLSE4xYlNBcUlIVnVhV1p2Y20xekxtRnNjR2hoS1NBcklDUjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZzWVhScGRtVlFiM05wZEdsdmJrSnBZWE5KYm5CMWRDNW5aWFJDZVVsdVpHbGpaWE1vSjJsdVpHbGpaWE1uS1gwN1lEdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdCdmRYUndkWFJiYjNWMGNIVjBTV1I0WFNBOUlDUjdiM1YwY0hWMExuUjVjR1V1ZG1Gc2RXVjlJQ2h6ZFcwZ0tpQjFibWxtYjNKdGN5NWhiSEJvWVNrN1lEdGNiaUFnSUNBZ0lDQWdmU2tvS1gxY2JpQWdJQ0I5WEc0Z0lIMWdPMXh1SUNBZ0lDQWdmVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJRzVoYldVNklDZEJkSFJsYm5ScGIyNVFjbTlpY3ljc1hHNGdJQ0FnSUNBZ0lITm9ZV1JsY2tOaFkyaGxPaUI3YUdsdWREb2dZQ1I3WTI5dGNHOXVaVzUwYzMxZ0xDQnBibkIxZEVSbGNHVnVaR1Z1WTJsbGMzMHNYRzRnSUNBZ0lDQWdJR2RsZEZKMWJrUmhkR0U2SUNncElEMCtJQ2g3WEc0Z0lDQWdJQ0FnSUNBZ2IzVjBjSFYwY3pvZ1czdGthVzF6T2lCd2NtOWljMU5vWVhCbExDQmtZWFJoVkhsd1pUb2djUzVrWVhSaFZIbHdaU3dnWjNCMVJHRjBZVlI1Y0dVNklFZHdkVVJoZEdGVWVYQmxMbVJsWm1GMWJIUjlYU3hjYmlBZ0lDQWdJQ0FnSUNCa2FYTndZWFJqYUVkeWIzVndPaUJrYVhOd1lYUmphQ3hjYmlBZ0lDQWdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE5jYmlBZ0lDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNBZ0lHZGxkRk5vWVdSbGNsTnZkWEpqWlN4Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnZlR0Y2JseHVYRzVqYjI1emRDQmpjbVZoZEdWV2VFRjBkR1Z1ZEdsdmJsTmpiM0psVUhKdlozSmhiVWx1Wm04Z1BWeHVJQ0FnSUNoZlkyOXVkR1Y0ZERvZ1EyOXRjSFYwWlVOdmJuUmxlSFFzSUhCeWIySnpPaUJVWlc1emIzSldhV1YzTENCMk9pQlVaVzV6YjNKV2FXVjNMQ0J3WVhKaGJYTTZJRUYwZEdWdWRHbHZibEJoY21GdFpYUmxjbk1zWEc0Z0lDQWdJSEJoYzNSVFpYRjFaVzVqWlV4bGJtZDBhRG9nYm5WdFltVnlLU0E5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0IwYjNSaGJGTmxjWFZsYm1ObFRHVnVaM1JvSUQwZ2NHRnpkRk5sY1hWbGJtTmxUR1Z1WjNSb0lDc2djR0Z5WVcxekxtdDJVMlZ4ZFdWdVkyVk1aVzVuZEdnN1hHNGdJQ0FnSUNCamIyNXpkQ0J2ZFhSd2RYUlRhR0Z3WlNBOUlGdHdZWEpoYlhNdVltRjBZMmhUYVhwbExDQndZWEpoYlhNdWMyVnhkV1Z1WTJWTVpXNW5kR2dzSUhCaGNtRnRjeTUyU0dsa1pHVnVVMmw2WlYwN1hHNGdJQ0FnSUNCamIyNXpkQ0JVU1V4RlgxTkpXa1VnUFNBeE1qdGNiaUFnSUNBZ0lHTnZibk4wSUdScGMzQmhkR05vSUQwZ2UxeHVJQ0FnSUNBZ0lDQjRPaUJOWVhSb0xtTmxhV3dvY0dGeVlXMXpMblpJWldGa1UybDZaU0F2SUZSSlRFVmZVMGxhUlNrc1hHNGdJQ0FnSUNBZ0lIazZJRTFoZEdndVkyVnBiQ2h3WVhKaGJYTXVjMlZ4ZFdWdVkyVk1aVzVuZEdnZ0x5QlVTVXhGWDFOSldrVXBMRnh1SUNBZ0lDQWdJQ0I2T2lCd1lYSmhiWE11WW1GMFkyaFRhWHBsSUNvZ2NHRnlZVzF6TG01MWJVaGxZV1J6WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJQ0FnWTI5dWMzUWdjSEp2WjNKaGJWVnVhV1p2Y20xek9pQlFjbTluY21GdFZXNXBabTl5YlZ0ZElEMGdXMXh1SUNBZ0lDQWdJQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCd1lYSmhiWE11YzJWeGRXVnVZMlZNWlc1bmRHaDlMQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCMGIzUmhiRk5sY1hWbGJtTmxUR1Z1WjNSb2ZTeGNiaUFnSUNBZ0lDQWdlM1I1Y0dVNklFUmhkR0ZVZVhCbExuVnBiblF6TWl3Z1pHRjBZVG9nY0dGeVlXMXpMblpJWldGa1UybDZaWDBzSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklIQmhjbUZ0Y3k1dWRXMUlaV0ZrYzMwc1hHNGdJQ0FnSUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1MWFXNTBNeklzSUdSaGRHRTZJSEJoY21GdGN5NTJTR2xrWkdWdVUybDZaWDFjYmlBZ0lDQWdJRjA3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMFJHVndaVzVrWlc1amFXVnpPaUJRY205bmNtRnRTVzV3ZFhSVVpXNXpiM0pKYm1adlJHVndaVzVrWlc1amVWdGRJRDBnV3lkMGVYQmxKeXdnSjNSNWNHVW5YVHRjYmlBZ0lDQWdJR052Ym5OMElHZGxkRk5vWVdSbGNsTnZkWEpqWlNBOUlDaHphR0ZrWlhKSVpXeHdaWEk2SUZOb1lXUmxja2hsYkhCbGNpa2dQVDRnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3Y205aWMwaGxiSEJsY2lBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjNCeWIySnpKeXdnY0hKdlluTXVaR0YwWVZSNWNHVXNJSEJ5YjJKekxtUnBiWE1wTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IyU0dWc2NHVnlJRDBnYVc1d2RYUldZWEpwWVdKc1pTZ25kaWNzSUhZdVpHRjBZVlI1Y0dVc0lIWXVaR2x0Y3lrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUc5MWRIQjFkQ0E5SUc5MWRIQjFkRlpoY21saFlteGxLQ2R2ZFhSd2RYUW5MQ0J3Y205aWN5NWtZWFJoVkhsd1pTd2diM1YwY0hWMFUyaGhjR1VwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IxYm1sbWIzSnRjem9nVlc1cFptOXliWE5CY25KaGVWUjVjR1VnUFNCYlhHNGdJQ0FnSUNBZ0lDQWdlMjVoYldVNklDZE5KeXdnZEhsd1pUb2dKM1V6TWlkOUxDQjdibUZ0WlRvZ0owc25MQ0IwZVhCbE9pQW5kVE15SjMwc0lIdHVZVzFsT2lBblRpY3NJSFI1Y0dVNklDZDFNekluZlN4Y2JpQWdJQ0FnSUNBZ0lDQjdibUZ0WlRvZ0oyNTFiVjlvWldGa2N5Y3NJSFI1Y0dVNklDZDFNekluZlN3Z2UyNWhiV1U2SUNkMlgyaHBaR1JsYmw5emFYcGxKeXdnZEhsd1pUb2dKM1V6TWlkOVhHNGdJQ0FnSUNBZ0lGMDdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmdYRzRnSUdOdmJuTjBJRlJKVEVWZlUwbGFSU0E5SUNSN1ZFbE1SVjlUU1ZwRmZYVTdYRzRnSUhaaGNqeDNiM0pyWjNKdmRYQStJSFJwYkdWUk9pQmhjbkpoZVR3a2UzQnliMkp6U0dWc2NHVnlMblI1Y0dVdWRtRnNkV1Y5TENBa2UxUkpURVZmVTBsYVJTQXFJRlJKVEVWZlUwbGFSWDArTzF4dUlDQjJZWEk4ZDI5eWEyZHliM1Z3UGlCMGFXeGxTem9nWVhKeVlYazhKSHR3Y205aWMwaGxiSEJsY2k1MGVYQmxMblpoYkhWbGZTd2dKSHRVU1V4RlgxTkpXa1VnS2lCVVNVeEZYMU5KV2tWOVBqdGNiaUFnSkh0emFHRmtaWEpJWld4d1pYSXVjbVZuYVhOMFpYSlZibWxtYjNKdGN5aDFibWxtYjNKdGN5a3VaR1ZqYkdGeVpWWmhjbWxoWW14bGN5aHdjbTlpYzBobGJIQmxjaXdnZGtobGJIQmxjaXdnYjNWMGNIVjBLWDFjYmlBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1YldGcGJsTjBZWEowS0Z0Y2JpQWdJQ0FnSUNBZ0lDQlVTVXhGWDFOSldrVXNJRlJKVEVWZlUwbGFSU3dnTVZ4dUlDQWdJQ0FnSUNCZEtYMWNiaUFnSUd4bGRDQm9aV0ZrU1dSNElEMGdkMjl5YTJkeWIzVndYMmxrTG5vN1hHNGdJQ0JzWlhRZ2JTQTlJR2RzYjJKaGJGOXBaQzU1TzF4dUlDQWdiR1YwSUc0Z1BTQm5iRzlpWVd4ZmFXUXVlRHRjYmx4dUlDQWdiR1YwSUc5bVpuTmxkRUVnUFNCb1pXRmtTV1I0SUNvZ0tIVnVhV1p2Y20xekxrMGdLaUIxYm1sbWIzSnRjeTVMS1NBcklHMGdLaUIxYm1sbWIzSnRjeTVMTzF4dUlDQWdiR1YwSUc5bVpuTmxkRUlnUFNCb1pXRmtTV1I0SUNvZ0tIVnVhV1p2Y20xekxrNGdLaUIxYm1sbWIzSnRjeTVMS1NBcklHNDdYRzVjYmlBZ0lIWmhjaUIyWVd4MVpTQTlJQ1I3Y0hKdlluTklaV3h3WlhJdWRIbHdaUzV6ZEc5eVlXZGxmU2d3S1R0Y2JpQWdJR1p2Y2lBb2RtRnlJSGM2SUhVek1pQTlJREIxT3lCM0lEd2dkVzVwWm05eWJYTXVTenNnZHlBclBTQlVTVXhGWDFOSldrVXBJSHRjYmlBZ0lDQWdhV1lnS0cwZ1BDQjFibWxtYjNKdGN5NU5JQ1ltSUhjZ0t5QnNiMk5oYkY5cFpDNTRJRHdnZFc1cFptOXliWE11U3lrZ2UxeHVJQ0FnSUNBZ0lIUnBiR1ZSVzFSSlRFVmZVMGxhUlNBcUlHeHZZMkZzWDJsa0xua2dLeUJzYjJOaGJGOXBaQzU0WFNBOUlIQnliMkp6VzI5bVpuTmxkRUVnS3lCM0lDc2diRzlqWVd4ZmFXUXVlRjA3WEc0Z0lDQWdJSDFjYmlBZ0lDQWdhV1lnS0c0Z1BDQjFibWxtYjNKdGN5NU9JQ1ltSUhjZ0t5QnNiMk5oYkY5cFpDNTVJRHdnZFc1cFptOXliWE11U3lrZ2UxeHVJQ0FnSUNBZ0lIUnBiR1ZMVzFSSlRFVmZVMGxhUlNBcUlHeHZZMkZzWDJsa0xua2dLeUJzYjJOaGJGOXBaQzU0WFNBOUlIWmJiMlptYzJWMFFpQXJJQ2gzSUNzZ2JHOWpZV3hmYVdRdWVTa2dLaUIxYm1sbWIzSnRjeTVPWFR0Y2JpQWdJQ0FnZlZ4dUlDQWdJQ0IzYjNKclozSnZkWEJDWVhKeWFXVnlLQ2s3WEc0Z0lDQWdJR1p2Y2lBb2RtRnlJR3M2SUhVek1pQTlJREIxT3lCcklEd2dWRWxNUlY5VFNWcEZJQ1ltSUhjcmF5QThJSFZ1YVdadmNtMXpMa3M3SUdzckt5a2dlMXh1SUNBZ0lDQWdJSFpoYkhWbElDczlJSFJwYkdWUlcxUkpURVZmVTBsYVJTQXFJR3h2WTJGc1gybGtMbmtnS3lCclhTQXFJSFJwYkdWTFcxUkpURVZmVTBsYVJTQXFJR3NnS3lCc2IyTmhiRjlwWkM1NFhUdGNiaUFnSUNBZ2ZWeHVJQ0FnSUNCM2IzSnJaM0p2ZFhCQ1lYSnlhV1Z5S0NrN1hHNGdJQ0I5WEc1Y2JpQWdJQzh2SUhkbElHNWxaV1FnZEc4Z2RISmhibk53YjNObElHOTFkSEIxZENCbWNtOXRJRUpPVTBoZmRpQjBieUJDVTA1RVgzWmNiaUFnSUd4bGRDQmlZWFJqYUVsa2VDQTlJSGR2Y210bmNtOTFjRjlwWkM1NklDOGdkVzVwWm05eWJYTXViblZ0WDJobFlXUnpPMXh1SUNBZ2JHVjBJR04xY25KbGJuUkNZWFJqYUVobFlXUk9kVzFpWlhJZ1BTQjNiM0pyWjNKdmRYQmZhV1F1ZWlBbElIVnVhV1p2Y20xekxtNTFiVjlvWldGa2N6dGNiaUFnSUdsbUlDaHRJRHdnZFc1cFptOXliWE11VFNBbUppQnVJRHdnZFc1cFptOXliWE11VGlrZ2UxeHVJQ0FnSUNCc1pYUWdiM1YwY0hWMFNXUjRJRDBnWW1GMFkyaEpaSGdnS2lCMWJtbG1iM0p0Y3k1TklDb2dkVzVwWm05eWJYTXVkbDlvYVdSa1pXNWZjMmw2WlNBcklHMGdLaUIxYm1sbWIzSnRjeTUyWDJocFpHUmxibDl6YVhwbFhHNGdJQ0FnSUNBZ0t5QmpkWEp5Wlc1MFFtRjBZMmhJWldGa1RuVnRZbVZ5SUNvZ2RXNXBabTl5YlhNdVRpQXJJRzQ3WEc0Z0lDQWdJRzkxZEhCMWRGdHZkWFJ3ZFhSSlpIaGRJRDBnZG1Gc2RXVTdYRzRnSUNCOVhHNGdJSDFnTzF4dUlDQWdJQ0FnZlR0Y2JseHVJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ2JtRnRaVG9nSjBGMGRHVnVkR2x2YmxOamIzSmxKeXhjYmlBZ0lDQWdJQ0FnYzJoaFpHVnlRMkZqYUdVNklIdHBibkIxZEVSbGNHVnVaR1Z1WTJsbGMzMHNYRzRnSUNBZ0lDQWdJR2RsZEZKMWJrUmhkR0U2SUNncElEMCtJQ2g3WEc0Z0lDQWdJQ0FnSUNBZ2IzVjBjSFYwY3pvZ1czdGthVzF6T2lCdmRYUndkWFJUYUdGd1pTd2daR0YwWVZSNWNHVTZJSEJ5YjJKekxtUmhkR0ZVZVhCbExDQm5jSFZFWVhSaFZIbHdaVG9nUjNCMVJHRjBZVlI1Y0dVdVpHVm1ZWFZzZEgxZExGeHVJQ0FnSUNBZ0lDQWdJR1JwYzNCaGRHTm9SM0p2ZFhBNklHUnBjM0JoZEdOb0xGeHVJQ0FnSUNBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGMxeHVJQ0FnSUNBZ0lDQjlLU3hjYmlBZ0lDQWdJQ0FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxMRnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdZWEJ3YkhsQmRIUmxiblJwYjI0Z1BWeHVJQ0FnSUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ3dnY1RvZ1ZHVnVjMjl5Vm1sbGR5d2dhem9nVkdWdWMyOXlWbWxsZHl3Z2Rqb2dWR1Z1YzI5eVZtbGxkeXdnWDIxaGMydEpibVJsZURvZ1ZHVnVjMjl5Vm1sbGQzeDFibVJsWm1sdVpXUXNYRzRnSUNBZ0lGOXdZWE4wT2lCVVpXNXpiM0pXYVdWM2ZIVnVaR1ZtYVc1bFpDd2djR0Z6ZEV0bGVUb2dWR1Z1YzI5eVZtbGxkM3gxYm1SbFptbHVaV1FzSUhCaGMzUldZV3gxWlRvZ1ZHVnVjMjl5Vm1sbGQzeDFibVJsWm1sdVpXUXNYRzRnSUNBZ0lISmxiR0YwYVhabFVHOXphWFJwYjI1Q2FXRnpPaUJVWlc1emIzSldhV1YzZkhWdVpHVm1hVzVsWkN3Z2NHRnlZVzFsZEdWeWN6b2dRWFIwWlc1MGFXOXVVR0Z5WVcxbGRHVnljeXdnWVhSMGNtbGlkWFJsY3pvZ1FYUjBaVzUwYVc5dVFYUjBjbk1wSUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUc5MWRIQjFkRkJ5WlhObGJuUkxaWGtnUFNCamIyNTBaWGgwTG05MWRIQjFkRU52ZFc1MElENGdNVHRjYmlBZ0lDQWdJR052Ym5OMElHOTFkSEIxZEZCeVpYTmxiblJXWVd4MVpTQTlJR052Ym5SbGVIUXViM1YwY0hWMFEyOTFiblFnUGlBeU8xeHVJQ0FnSUNBZ1kyOXVjM1FnY0dGemRGTmxjWFZsYm1ObFRHVnVaM1JvSUQwZ0tHOTFkSEIxZEZCeVpYTmxiblJMWlhrZ0ppWWdiM1YwY0hWMFVISmxjMlZ1ZEZaaGJIVmxLU0EvSUhCaGNtRnRaWFJsY25NdWNHRnpkRk5sY1hWbGJtTmxUR1Z1WjNSb0lEb2dNRHRjYmlBZ0lDQWdJR052Ym5OMElIUnZkR0ZzVTJWeGRXVnVZMlZNWlc1bmRHZ2dQU0J3WVhOMFUyVnhkV1Z1WTJWTVpXNW5kR2dnS3lCd1lYSmhiV1YwWlhKekxtdDJVMlZ4ZFdWdVkyVk1aVzVuZEdnN1hHNGdJQ0FnSUNBdkx5QkRiMjVqWVhScGJtRjBaU0J3WVhOMFMyVjVJR0Z1WkNCTElIUnZJSEJ5YjJSMVkyVWdjSEpsYzJWdWRFdGxlUzVjYmlBZ0lDQWdJR052Ym5OMElIQnlaWE5sYm5STFpYbFRhR0Z3WlNBOUlGdHdZWEpoYldWMFpYSnpMbUpoZEdOb1UybDZaU3dnY0dGeVlXMWxkR1Z5Y3k1dWRXMUlaV0ZrY3l3Z2RHOTBZV3hUWlhGMVpXNWpaVXhsYm1kMGFDd2djR0Z5WVcxbGRHVnljeTVvWldGa1UybDZaVjA3WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMjVqWVhSTFpYbEpibkIxZEhNZ1BTQndZWE4wUzJWNUlEOGdXM0JoYzNSTFpYa3NJR3RkSURvZ1cydGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ2EyVjVJRDBnYjNWMGNIVjBVSEpsYzJWdWRFdGxlU0EvSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZM0psWVhSbFEyOXVZMkYwVUhKdlozSmhiVWx1Wm04b1kyOXVZMkYwUzJWNVNXNXdkWFJ6TENBeUxDQndjbVZ6Wlc1MFMyVjVVMmhoY0dVc0lHc3VaR0YwWVZSNWNHVXBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdhVzV3ZFhSek9pQmpiMjVqWVhSTFpYbEpibkIxZEhNc0lHOTFkSEIxZEhNNklGc3hYWDBwV3pCZElEcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JyTzF4dVhHNGdJQ0FnSUNBdkx5QkRiMjVqWVhScGJtRjBaU0J3WVhOMFZtRnNkV1VnWVc1a0lGWWdkRzhnY0hKdlpIVmpaU0J3Y21WelpXNTBWbUZzZFdVdVhHNGdJQ0FnSUNCamIyNXpkQ0J3Y21WelpXNTBWbUZzZFdWVGFHRndaU0E5SUZ0d1lYSmhiV1YwWlhKekxtSmhkR05vVTJsNlpTd2djR0Z5WVcxbGRHVnljeTV1ZFcxSVpXRmtjeXdnZEc5MFlXeFRaWEYxWlc1alpVeGxibWQwYUN3Z2NHRnlZVzFsZEdWeWN5NW9aV0ZrVTJsNlpWMDdYRzRnSUNBZ0lDQmpiMjV6ZENCamIyNWpZWFJXWVd4MVpVbHVjSFYwY3lBOUlIQmhjM1JXWVd4MVpTQS9JRnR3WVhOMFZtRnNkV1VzSUhaZElEb2dXM1pkTzF4dUlDQWdJQ0FnWTI5dWMzUWdkbUZzZFdVZ1BTQnZkWFJ3ZFhSUWNtVnpaVzUwVm1Gc2RXVWdQMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZM0psWVhSbFEyOXVZMkYwVUhKdlozSmhiVWx1Wm04b1kyOXVZMkYwVm1Gc2RXVkpibkIxZEhNc0lESXNJSEJ5WlhObGJuUldZV3gxWlZOb1lYQmxMQ0IyTG1SaGRHRlVlWEJsS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZTJsdWNIVjBjem9nWTI5dVkyRjBWbUZzZFdWSmJuQjFkSE1zSUc5MWRIQjFkSE02SUZzeVhYMHBXekJkSURwY2JpQWdJQ0FnSUNBZ0lDQjJPMXh1SUNBZ0lDQWdZMjl1YzNRZ2FXNXdkWFJ6U3lBOUlGdHhMQ0JyWlhsZE8xeHVJQ0FnSUNBZ2FXWWdLSEpsYkdGMGFYWmxVRzl6YVhScGIyNUNhV0Z6S1NCN1hHNGdJQ0FnSUNBZ0lHbHVjSFYwYzBzdWNIVnphQ2h5Wld4aGRHbDJaVkJ2YzJsMGFXOXVRbWxoY3lrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJRkoxYmlCQmRIUmxiblJwYjI1UWNtOWljMXh1SUNBZ0lDQWdZMjl1YzNRZ2NISnZZbk1nUFNCamIyNTBaWGgwTG1OdmJYQjFkR1VvWEc0Z0lDQWdJQ0FnSUNBZ1kzSmxZWFJsUVhSMFpXNTBhVzl1VUhKdlluTlFjbTluY21GdFNXNW1ieWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRDd2djU3dnYTJWNUxDQnlaV3hoZEdsMlpWQnZjMmwwYVc5dVFtbGhjeXdnY0dGeVlXMWxkR1Z5Y3l3Z1lYUjBjbWxpZFhSbGN5d2djR0Z6ZEZObGNYVmxibU5sVEdWdVozUm9LU3hjYmlBZ0lDQWdJQ0FnSUNCN2FXNXdkWFJ6T2lCcGJuQjFkSE5MTENCdmRYUndkWFJ6T2lCYkxURmRmU2xiTUYwN1hHNWNiaUFnSUNBZ0lDOHZJRkoxYmlCVGIyWjBiV0Y0WEc0Z0lDQWdJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9YRzRnSUNBZ0lDQWdJQ0FnWTNKbFlYUmxTVzVRYkdGalpWTnZablJ0WVhoUWNtOW5jbUZ0U1c1bWJ5aGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR1Y0ZEN3Z2NISnZZbk1zSUhCaGNtRnRaWFJsY25NdVltRjBZMmhUYVhwbElDb2djR0Z5WVcxbGRHVnljeTV1ZFcxSVpXRmtjeUFxSUhCaGNtRnRaWFJsY25NdWMyVnhkV1Z1WTJWTVpXNW5kR2dzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFJ2ZEdGc1UyVnhkV1Z1WTJWTVpXNW5kR2dwTEZ4dUlDQWdJQ0FnSUNBZ0lIdHBibkIxZEhNNklGdHdjbTlpYzEwc0lHOTFkSEIxZEhNNklGdGRmU2s3WEc1Y2JpQWdJQ0FnSUM4dklGSjFiaUJCZEhSeWFXOXVVMk52Y21WY2JpQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMGMxWWdQU0JiY0hKdlluTXNJSFpoYkhWbFhUdGNiaUFnSUNBZ0lHTnZiblJsZUhRdVkyOXRjSFYwWlNoY2JpQWdJQ0FnSUNBZ0lDQmpjbVZoZEdWV2VFRjBkR1Z1ZEdsdmJsTmpiM0psVUhKdlozSmhiVWx1Wm04b1kyOXVkR1Y0ZEN3Z2NISnZZbk1zSUhaaGJIVmxMQ0J3WVhKaGJXVjBaWEp6TENCd1lYTjBVMlZ4ZFdWdVkyVk1aVzVuZEdncExGeHVJQ0FnSUNBZ0lDQWdJSHRwYm5CMWRITTZJR2x1Y0hWMGMxWXNJRzkxZEhCMWRITTZJRnN3WFgwcE8xeHVJQ0FnSUgwN1hHNWNibU52Ym5OMElIQnlaWEJoY21VZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lIQmhjbUZ0WlhSbGNuTTZJRUYwZEdWdWRHbHZibEJoY21GdFpYUmxjbk1wSUQwK0lIdGNiaUFnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1VnUFNCYlhHNGdJQ0FnY0dGeVlXMWxkR1Z5Y3k1aVlYUmphRk5wZW1Vc1hHNGdJQ0FnY0dGeVlXMWxkR1Z5Y3k1dWRXMUlaV0ZrY3l4Y2JpQWdJQ0J3WVhKaGJXVjBaWEp6TG5ObGNYVmxibU5sVEdWdVozUm9MRnh1SUNBZ0lIQmhjbUZ0WlhSbGNuTXVhR1ZoWkZOcGVtVXNYRzRnSUYwN1hHNGdJR052Ym5OMElFMGdQU0J3WVhKaGJXVjBaWEp6TG5ObGNYVmxibU5sVEdWdVozUm9PMXh1SUNCamIyNXpkQ0JMSUQwZ2NHRnlZVzFsZEdWeWN5NXBibkIxZEVocFpHUmxibE5wZW1VN1hHNGdJR052Ym5OMElFNGdQU0J3WVhKaGJXVjBaWEp6TG1obFlXUlRhWHBsTzF4dUlDQmpiMjV6ZENCVVNVeEZYMU5KV2tVZ1BTQXhNanRjYmlBZ1kyOXVjM1FnWkdsemNHRjBZMmdnUFNCN1hHNGdJQ0FnZURvZ1RXRjBhQzVqWldsc0tIQmhjbUZ0WlhSbGNuTXVhR1ZoWkZOcGVtVWdMeUJVU1V4RlgxTkpXa1VwTEZ4dUlDQWdJSGs2SUUxaGRHZ3VZMlZwYkNod1lYSmhiV1YwWlhKekxuTmxjWFZsYm1ObFRHVnVaM1JvSUM4Z1ZFbE1SVjlUU1ZwRktTeGNiaUFnSUNCNk9pQndZWEpoYldWMFpYSnpMbUpoZEdOb1UybDZaU0FxSUhCaGNtRnRaWFJsY25NdWJuVnRTR1ZoWkhOY2JpQWdmVHRjYmlBZ1kyOXVjM1FnYVc1d2RYUnpJRDBnVzJOdmJuUmxlSFF1YVc1d2RYUnpXekJkTENCamIyNTBaWGgwTG1sdWNIVjBjMXN4WFN3Z1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTWwxZE8xeHVJQ0JqYjI1emRDQndjbTluY21GdFZXNXBabTl5YlhNNklGQnliMmR5WVcxVmJtbG1iM0p0VzEwZ1BTQmJYRzRnSUNBZ2UzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2dUWDBzSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklFdDlMQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCT2ZTeGNiaUFnSUNCN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQndZWEpoYldWMFpYSnpMbTUxYlVobFlXUnpmU3dnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2NHRnlZVzFsZEdWeWN5NW9aV0ZrVTJsNlpYMHNYRzRnSUNBZ2UzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2djR0Z5WVcxbGRHVnljeTVvYVdSa1pXNVRhWHBsZlN4Y2JpQWdJQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCd1lYSmhiV1YwWlhKekxtaHBaR1JsYmxOcGVtVWdLeUJ3WVhKaGJXVjBaWEp6TG1ocFpHUmxibE5wZW1VZ0t5QndZWEpoYldWMFpYSnpMblpJYVdSa1pXNVRhWHBsZlZ4dUlDQmRPMXh1WEc0Z0lHTnZibk4wSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU0E5SUNoemFHRmtaWEpJWld4d1pYSTZJRk5vWVdSbGNraGxiSEJsY2lrZ1BUNGdlMXh1SUNBZ0lHTnZibk4wSUc5MWRIQjFkRkVnUFNCdmRYUndkWFJXWVhKcFlXSnNaU2duYjNWMGNIVjBYM0VuTENCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVc0lHOTFkSEIxZEZOb1lYQmxLVHRjYmlBZ0lDQmpiMjV6ZENCdmRYUndkWFJMSUQwZ2IzVjBjSFYwVm1GeWFXRmliR1VvSjI5MWRIQjFkRjlySnl3Z2FXNXdkWFJ6V3pCZExtUmhkR0ZVZVhCbExDQnZkWFJ3ZFhSVGFHRndaU2s3WEc0Z0lDQWdZMjl1YzNRZ2IzVjBjSFYwVmlBOUlHOTFkSEIxZEZaaGNtbGhZbXhsS0NkdmRYUndkWFJmZGljc0lHbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pTd2diM1YwY0hWMFUyaGhjR1VwTzF4dUlDQWdJR052Ym5OMElHbHVjSFYwSUQwZ2FXNXdkWFJXWVhKcFlXSnNaU2duYVc1d2RYUW5MQ0JwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1VzSUdsdWNIVjBjMXN3WFM1a2FXMXpLVHRjYmlBZ0lDQmpiMjV6ZENCM1pXbG5hSFFnUFNCcGJuQjFkRlpoY21saFlteGxLQ2QzWldsbmFIUW5MQ0JwYm5CMWRITmJNVjB1WkdGMFlWUjVjR1VzSUdsdWNIVjBjMXN4WFM1a2FXMXpLVHRjYmlBZ0lDQmpiMjV6ZENCaWFXRnpJRDBnYVc1d2RYUldZWEpwWVdKc1pTZ25ZbWxoY3ljc0lHbHVjSFYwYzFzeVhTNWtZWFJoVkhsd1pTd2dhVzV3ZFhSeld6SmRMbVJwYlhNcE8xeHVJQ0FnSUdOdmJuTjBJR1JoZEdGVWVYQmxJRDBnYVc1d2RYUXVkSGx3WlM1emRHOXlZV2RsTzF4dVhHNGdJQ0FnWTI5dWMzUWdkVzVwWm05eWJYTTZJRlZ1YVdadmNtMXpRWEp5WVhsVWVYQmxJRDBnVzF4dUlDQWdJQ0FnZTI1aGJXVTZJQ2ROSnl3Z2RIbHdaVG9nSjNVek1pZDlMQ0I3Ym1GdFpUb2dKMHNuTENCMGVYQmxPaUFuZFRNeUozMHNJSHR1WVcxbE9pQW5UaWNzSUhSNWNHVTZJQ2QxTXpJbmZTd2dlMjVoYldVNklDZHVkVzFmYUdWaFpITW5MQ0IwZVhCbE9pQW5kVE15SjMwc1hHNGdJQ0FnSUNCN2JtRnRaVG9nSjJobFlXUmZjMmw2WlNjc0lIUjVjR1U2SUNkMU16SW5mU3dnZTI1aGJXVTZJQ2RvYVdSa1pXNWZjMmw2WlNjc0lIUjVjR1U2SUNkMU16SW5mU3dnZTI1aGJXVTZJQ2RzWkdJbkxDQjBlWEJsT2lBbmRUTXlKMzFjYmlBZ0lDQmRPMXh1SUNBZ0lISmxkSFZ5YmlCZ1hHNGdJR052Ym5OMElGUkpURVZmVTBsYVJTQTlJQ1I3VkVsTVJWOVRTVnBGZlhVN1hHNGdJSFpoY2p4M2IzSnJaM0p2ZFhBK0lIUnBiR1ZKYm5CMWREb2dZWEp5WVhrOEpIdGtZWFJoVkhsd1pYMHNJQ1I3VkVsTVJWOVRTVnBGSUNvZ1ZFbE1SVjlUU1ZwRmZUNDdYRzRnSUhaaGNqeDNiM0pyWjNKdmRYQStJSFJwYkdWWFpXbG5hSFJST2lCaGNuSmhlVHdrZTJSaGRHRlVlWEJsZlN3Z0pIdFVTVXhGWDFOSldrVWdLaUJVU1V4RlgxTkpXa1Y5UGp0Y2JpQWdkbUZ5UEhkdmNtdG5jbTkxY0Q0Z2RHbHNaVmRsYVdkb2RFczZJR0Z5Y21GNVBDUjdaR0YwWVZSNWNHVjlMQ0FrZTFSSlRFVmZVMGxhUlNBcUlGUkpURVZmVTBsYVJYMCtPMXh1SUNCMllYSThkMjl5YTJkeWIzVndQaUIwYVd4bFYyVnBaMmgwVmpvZ1lYSnlZWGs4Skh0a1lYUmhWSGx3Wlgwc0lDUjdWRWxNUlY5VFNWcEZJQ29nVkVsTVJWOVRTVnBGZlQ0N1hHNGdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxuSmxaMmx6ZEdWeVZXNXBabTl5YlhNb2RXNXBabTl5YlhNcExtUmxZMnhoY21WV1lYSnBZV0pzWlhNb2FXNXdkWFFzSUhkbGFXZG9kQ3dnWW1saGN5d2diM1YwY0hWMFVTd2diM1YwY0hWMFN5d2diM1YwY0hWMFZpbDlYRzRnSUNSN2MyaGhaR1Z5U0dWc2NHVnlMbTFoYVc1VGRHRnlkQ2hiWEc0Z0lDQWdJQ0JVU1V4RlgxTkpXa1VzSUZSSlRFVmZVMGxhUlN3Z01WeHVJQ0FnSUYwcGZWeHVJQ0FnSUd4bGRDQmlZWFJqYUVsdVpHVjRJRDBnZDI5eWEyZHliM1Z3WDJsa0xub2dMeUIxYm1sbWIzSnRjeTV1ZFcxZmFHVmhaSE03WEc0Z0lDQWdiR1YwSUdobFlXUk9kVzFpWlhJZ1BTQjNiM0pyWjNKdmRYQmZhV1F1ZWlBbElIVnVhV1p2Y20xekxtNTFiVjlvWldGa2N6dGNiaUFnSUNCc1pYUWdiU0E5SUdkc2IySmhiRjlwWkM1NU8xeHVJQ0FnSUd4bGRDQnVJRDBnWjJ4dlltRnNYMmxrTG5nN1hHNWNiaUFnSUNCc1pYUWdhVzV3ZFhSUFptWnpaWFFnUFNCaVlYUmphRWx1WkdWNElDb2dLSFZ1YVdadmNtMXpMazBnS2lCMWJtbG1iM0p0Y3k1TEtTQXJJRzBnS2lCMWJtbG1iM0p0Y3k1TE8xeHVJQ0FnSUd4bGRDQmlhV0Z6VDJabWMyVjBVU0E5SUdobFlXUk9kVzFpWlhJZ0tpQjFibWxtYjNKdGN5NW9aV0ZrWDNOcGVtVTdYRzRnSUNBZ2JHVjBJR0pwWVhOUFptWnpaWFJMSUQwZ2RXNXBabTl5YlhNdWFHbGtaR1Z1WDNOcGVtVWdLeUJpYVdGelQyWm1jMlYwVVR0Y2JpQWdJQ0JzWlhRZ1ltbGhjMDltWm5ObGRGWWdQU0IxYm1sbWIzSnRjeTVvYVdSa1pXNWZjMmw2WlNBcklHSnBZWE5QWm1aelpYUkxPMXh1WEc0Z0lDQWdkbUZ5SUhaaGJIVmxVU0E5SUNSN1pHRjBZVlI1Y0dWOUtEQXBPMXh1SUNBZ0lIWmhjaUIyWVd4MVpVc2dQU0FrZTJSaGRHRlVlWEJsZlNnd0tUdGNiaUFnSUNCMllYSWdkbUZzZFdWV0lEMGdKSHRrWVhSaFZIbHdaWDBvTUNrN1hHNGdJQ0FnWm05eUlDaDJZWElnZHpvZ2RUTXlJRDBnTUhVN0lIY2dQQ0IxYm1sbWIzSnRjeTVMT3lCM0lDczlJRlJKVEVWZlUwbGFSU2tnZTF4dUlDQWdJQ0FnYVdZZ0tHMGdQQ0IxYm1sbWIzSnRjeTVOSUNZbUlIY2dLeUJzYjJOaGJGOXBaQzU0SUR3Z2RXNXBabTl5YlhNdVN5a2dlMXh1SUNBZ0lDQWdJQ0IwYVd4bFNXNXdkWFJiVkVsTVJWOVRTVnBGSUNvZ2JHOWpZV3hmYVdRdWVTQXJJR3h2WTJGc1gybGtMbmhkSUQwZ2FXNXdkWFJiYVc1d2RYUlBabVp6WlhRZ0t5QjNJQ3NnYkc5allXeGZhV1F1ZUYwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9iaUE4SUhWdWFXWnZjbTF6TGs0Z0ppWWdkeUFySUd4dlkyRnNYMmxrTG5rZ1BDQjFibWxtYjNKdGN5NUxLU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQnZabVp6WlhRZ1BTQnVJQ3NnS0hjZ0t5QnNiMk5oYkY5cFpDNTVLU0FxSUhWdWFXWnZjbTF6TG14a1lqdGNiaUFnSUNBZ0lDQWdkR2xzWlZkbGFXZG9kRkZiVkVsTVJWOVRTVnBGSUNvZ2JHOWpZV3hmYVdRdWVTQXJJR3h2WTJGc1gybGtMbmhkSUQwZ2QyVnBaMmgwVzJKcFlYTlBabVp6WlhSUklDc2diMlptYzJWMFhUdGNiaUFnSUNBZ0lDQWdkR2xzWlZkbGFXZG9kRXRiVkVsTVJWOVRTVnBGSUNvZ2JHOWpZV3hmYVdRdWVTQXJJR3h2WTJGc1gybGtMbmhkSUQwZ2QyVnBaMmgwVzJKcFlYTlBabVp6WlhSTElDc2diMlptYzJWMFhUdGNiaUFnSUNBZ0lDQWdkR2xzWlZkbGFXZG9kRlpiVkVsTVJWOVRTVnBGSUNvZ2JHOWpZV3hmYVdRdWVTQXJJR3h2WTJGc1gybGtMbmhkSUQwZ2QyVnBaMmgwVzJKcFlYTlBabVp6WlhSV0lDc2diMlptYzJWMFhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIZHZjbXRuY205MWNFSmhjbkpwWlhJb0tUdGNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHczZJSFV6TWlBOUlEQjFPeUJyUEZSSlRFVmZVMGxhUlNBbUppQjNLMnNnUENCMWJtbG1iM0p0Y3k1TE95QnJLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJR2x1Y0hWMFZHbHNaVTltWm5ObGRDQTlJRlJKVEVWZlUwbGFSU0FxSUd4dlkyRnNYMmxrTG5rZ0t5QnJPMXh1SUNBZ0lDQWdJQ0JzWlhRZ2QyVnBaMmgwVkdsc1pVOW1abk5sZENBOUlGUkpURVZmVTBsYVJTQXFJR3NnS3lCc2IyTmhiRjlwWkM1NE8xeHVJQ0FnSUNBZ0lDQjJZV3gxWlZFZ0t6MGdkR2xzWlVsdWNIVjBXMmx1Y0hWMFZHbHNaVTltWm5ObGRGMGdLaUIwYVd4bFYyVnBaMmgwVVZ0M1pXbG5hSFJVYVd4bFQyWm1jMlYwWFR0Y2JpQWdJQ0FnSUNBZ2RtRnNkV1ZMSUNzOUlIUnBiR1ZKYm5CMWRGdHBibkIxZEZScGJHVlBabVp6WlhSZElDb2dkR2xzWlZkbGFXZG9kRXRiZDJWcFoyaDBWR2xzWlU5bVpuTmxkRjA3WEc0Z0lDQWdJQ0FnSUhaaGJIVmxWaUFyUFNCMGFXeGxTVzV3ZFhSYmFXNXdkWFJVYVd4bFQyWm1jMlYwWFNBcUlIUnBiR1ZYWldsbmFIUldXM2RsYVdkb2RGUnBiR1ZQWm1aelpYUmRPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IzYjNKclozSnZkWEJDWVhKeWFXVnlLQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUdobFlXUlBabVp6WlhRZ1BTQW9iU0FxSUhWdWFXWnZjbTF6TGs0Z0t5QnVLU0FsSUhWdWFXWnZjbTF6TG1obFlXUmZjMmw2WlR0Y2JpQWdJQ0IyWVd4MVpWRWdLejBnWW1saGMxdG9aV0ZrVDJabWMyVjBJQ3NnWW1saGMwOW1abk5sZEZGZE8xeHVJQ0FnSUhaaGJIVmxTeUFyUFNCaWFXRnpXMmhsWVdSUFptWnpaWFFnS3lCaWFXRnpUMlptYzJWMFMxMDdYRzRnSUNBZ2RtRnNkV1ZXSUNzOUlHSnBZWE5iYUdWaFpFOW1abk5sZENBcklHSnBZWE5QWm1aelpYUldYVHRjYmx4dUlDQWdJR3hsZENCdlptWnpaWFFnUFNCM2IzSnJaM0p2ZFhCZmFXUXVlaUFxSUhWdWFXWnZjbTF6TGswZ0tpQjFibWxtYjNKdGN5NU9PMXh1SUNBZ0lHbG1JQ2h0SUR3Z2RXNXBabTl5YlhNdVRTQW1KaUJ1SUR3Z2RXNXBabTl5YlhNdVRpa2dlMXh1SUNBZ0lDQWdiR1YwSUc5MWRIQjFkRWxrZUNBOUlHOW1abk5sZENBcklHMGdLaUIxYm1sbWIzSnRjeTVPSUNzZ2JqdGNiaUFnSUNBZ0lHOTFkSEIxZEY5eFcyOTFkSEIxZEVsa2VGMGdQU0IyWVd4MVpWRTdYRzRnSUNBZ0lDQnZkWFJ3ZFhSZmExdHZkWFJ3ZFhSSlpIaGRJRDBnZG1Gc2RXVkxPMXh1SUNBZ0lDQWdiM1YwY0hWMFgzWmJiM1YwY0hWMFNXUjRYU0E5SUhaaGJIVmxWanRjYmlBZ0lDQjlYRzRnSUgxZ08xeHVJQ0I5TzF4dVhHNGdJSEpsZEhWeWJpQmpiMjUwWlhoMExtTnZiWEIxZEdVb1hHNGdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lHNWhiV1U2SUNkQmRIUmxiblJwYjI1UWNtVndZWEpsSnl4Y2JpQWdJQ0FnSUNBZ2MyaGhaR1Z5UTJGamFHVTZJSHRwYm5CMWRFUmxjR1Z1WkdWdVkybGxjem9nV3lkMGVYQmxKeXdnSjNSNWNHVW5MQ0FuZEhsd1pTZGRmU3hjYmlBZ0lDQWdJQ0FnWjJWMFVuVnVSR0YwWVRvZ0tDa2dQVDRnS0h0Y2JpQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSek9pQmJYRzRnSUNBZ0lDQWdJQ0FnSUNCN1pHbHRjem9nYjNWMGNIVjBVMmhoY0dVc0lHUmhkR0ZVZVhCbE9pQmpiMjUwWlhoMExtbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pTd2daM0IxUkdGMFlWUjVjR1U2SUVkd2RVUmhkR0ZVZVhCbExtUmxabUYxYkhSOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnZTJScGJYTTZJRzkxZEhCMWRGTm9ZWEJsTENCa1lYUmhWSGx3WlRvZ1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVc0lHZHdkVVJoZEdGVWVYQmxPaUJIY0hWRVlYUmhWSGx3WlM1a1pXWmhkV3gwZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSHRrYVcxek9pQnZkWFJ3ZFhSVGFHRndaU3dnWkdGMFlWUjVjR1U2SUdOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsTENCbmNIVkVZWFJoVkhsd1pUb2dSM0IxUkdGMFlWUjVjR1V1WkdWbVlYVnNkSDBzWEc0Z0lDQWdJQ0FnSUNBZ1hTeGNiaUFnSUNBZ0lDQWdJQ0JrYVhOd1lYUmphRWR5YjNWd09pQmthWE53WVhSamFDeGNiaUFnSUNBZ0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTmNiaUFnSUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0FnSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU3hjYmlBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0I3YVc1d2RYUnpMQ0J2ZFhSd2RYUnpPaUJiTFRFc0lDMHhMQ0F0TVYxOUtUdGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JoZEhSbGJuUnBiMjRnUFNBb1kyOXVkR1Y0ZERvZ1EyOXRjSFYwWlVOdmJuUmxlSFFzSUdGMGRISnBZblYwWlhNNklFRjBkR1Z1ZEdsdmJrRjBkSEp6S1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR052Ym5OMElIQmhjbUZ0Y3lBOUlIWmhiR2xrWVhSbFFYUjBaVzUwYVc5dVNXNXdkWFJ6S0dOdmJuUmxlSFF1YVc1d2RYUnpMQ0JoZEhSeWFXSjFkR1Z6S1R0Y2JseHVJQ0JqYjI1emRDQmJjU3dnYXl3Z2RsMGdQU0J3Y21Wd1lYSmxLR052Ym5SbGVIUXNJSEJoY21GdGN5azdYRzVjYmlBZ2NtVjBkWEp1SUdGd2NHeDVRWFIwWlc1MGFXOXVLRnh1SUNBZ0lDQWdZMjl1ZEdWNGRDd2djU3dnYXl3Z2Rpd2dZMjl1ZEdWNGRDNXBibkIxZEhOYk5GMHNJSFZ1WkdWbWFXNWxaQ3dnZFc1a1pXWnBibVZrTENCMWJtUmxabWx1WldRc0lHTnZiblJsZUhRdWFXNXdkWFJ6V3pWZExDQndZWEpoYlhNc0lHRjBkSEpwWW5WMFpYTXBPMXh1ZlR0Y2JpSXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJSHRsYm5aOUlHWnliMjBnSjI5dWJuaHlkVzUwYVcxbExXTnZiVzF2YmljN1hHNWNibWx0Y0c5eWRDQjdSR0YwWVZSNWNHVjlJR1p5YjIwZ0p5NHVMeTR1THk0dUwzZGhjMjB0WTI5dGJXOXVKenRjYm1sdGNHOXlkQ0I3VkdWdWMyOXlWbWxsZDMwZ1puSnZiU0FuTGk0dkxpNHZkR1Z1YzI5eUxYWnBaWGNuTzF4dWFXMXdiM0owSUh0VGFHRndaVlYwYVd4OUlHWnliMjBnSnk0dUx5NHVMM1YwYVd3bk8xeHVhVzF3YjNKMElIdEJkSFJ5YVdKMWRHVlhhWFJvUTJGamFHVkxaWGtzSUdOeVpXRjBaVUYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVgwZ1puSnZiU0FuTGk0dllYUjBjbWxpZFhSbExYZHBkR2d0WTJGamFHVXRhMlY1Snp0Y2JtbHRjRzl5ZENCN1EyOXRjSFYwWlVOdmJuUmxlSFFzSUZCeWIyZHlZVzFKYm1admZTQm1jbTl0SUNjdUxpOTBlWEJsY3ljN1hHNWNibWx0Y0c5eWRDQjdZM0psWVhSbFZHVnVjMjl5VTJoaGNHVldZWEpwWVdKc1pYTXNJR2RsZEUxaGVFTnZiWEJ2Ym1WdWRITXNJR2x1Y0hWMFZtRnlhV0ZpYkdVc0lHOTFkSEIxZEZaaGNtbGhZbXhsTENCVGFHRmtaWEpJWld4d1pYSjlJR1p5YjIwZ0p5NHZZMjl0Ylc5dUp6dGNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JDWVhSamFFNXZjbTFCZEhSeWFXSjFkR1Z6SUdWNGRHVnVaSE1nUVhSMGNtbGlkWFJsVjJsMGFFTmhZMmhsUzJWNUlIdGNiaUFnY21WaFpHOXViSGtnWlhCemFXeHZiam9nYm5WdFltVnlPMXh1SUNCeVpXRmtiMjVzZVNCdGIyMWxiblIxYlRvZ2JuVnRZbVZ5TzF4dUlDQnlaV0ZrYjI1c2VTQnpjR0YwYVdGc09pQmliMjlzWldGdU8xeHVJQ0J5WldGa2IyNXNlU0IwY21GcGJtbHVaMDF2WkdVNklHSnZiMnhsWVc0N1hHNGdJSEpsWVdSdmJteDVJR1p2Y20xaGREb2dKMDVJVjBNbmZDZE9RMGhYSnp0Y2JpQWdjbVZoWkc5dWJIa2diM1YwY0hWMFEyOTFiblE2SUc1MWJXSmxjanRjYm4xY2JseHVZMjl1YzNRZ2RtRnNhV1JoZEdWSmJuQjFkSE1nUFNBb2FXNXdkWFJ6T2lCeVpXRmtiMjVzZVNCVVpXNXpiM0pXYVdWM1cxMHNJR0YwZEhKcFluVjBaWE02SUVKaGRHTm9UbTl5YlVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnYVdZZ0tDRnBibkIxZEhNZ2ZId2dhVzV3ZFhSekxteGxibWQwYUNBaFBUMGdOU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RbUYwWTJoT2IzSnRZV3hwZW1GMGFXOXVJSEpsY1hWcGNtVnpJRFVnYVc1d2RYUnpKeWs3WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0JqYUdWamExTm9ZWEJsUlhGMVlXd2dQU0FvWVdOMGRXRnNPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnWlhod1pXTjBaV1E2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkTENCdFpYTnpZV2RsT2lCemRISnBibWNwSUQwK0lIdGNiaUFnSUNCamIyNXpkQ0J5SUQwZ1pYaHdaV04wWldRdWJHVnVaM1JvTzF4dUlDQWdJR2xtSUNoeUlDRTlQU0JoWTNSMVlXd3ViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lDUjdiV1Z6YzJGblpYMDZJRzUxYlNCa2FXMWxibk5wYjI1eklDRTlJQ1I3Y24xZ0tUdGNiaUFnSUNCOVhHNGdJQ0FnWlhod1pXTjBaV1F1Wm05eVJXRmphQ2dvZGl3Z2FTa2dQVDRnZTF4dUlDQWdJQ0FnYVdZZ0tIWWdJVDA5SUdGamRIVmhiRnRwWFNrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lDUjdiV1Z6YzJGblpYMDZJR1JwYlZza2UybDlYU0JrYnlCdWIzUWdiV0YwWTJoZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUtUdGNiaUFnZlR0Y2JseHVJQ0JwWmlBb2FXNXdkWFJ6V3pCZExtUnBiWE11YkdWdVozUm9JRDRnTVNrZ2UxeHVJQ0FnSUdOdmJuTjBJSE5vWVhCbElEMGdZWFIwY21saWRYUmxjeTVtYjNKdFlYUWdQVDA5SUNkT1NGZERKeUEvWEc0Z0lDQWdJQ0FnSUNoaGRIUnlhV0oxZEdWekxuTndZWFJwWVd3Z1B5QnBibkIxZEhOYk1GMHVaR2x0Y3k1emJHbGpaU2d0TVNrZ09seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVc1d2RYUnpXekJkTG1ScGJYTXVjMnhwWTJVb0xURXBMbU52Ym1OaGRDaHBibkIxZEhOYk1GMHVaR2x0Y3k1emJHbGpaU2d4TENCcGJuQjFkSE5iTUYwdVpHbHRjeTVzWlc1bmRHZ2dMU0F4S1NrcElEcGNiaUFnSUNBZ0lDQWdhVzV3ZFhSeld6QmRMbVJwYlhNdWMyeHBZMlVvTVN3Z1lYUjBjbWxpZFhSbGN5NXpjR0YwYVdGc0lEOGdNaUE2SUhWdVpHVm1hVzVsWkNrN1hHNGdJQ0FnWTJobFkydFRhR0Z3WlVWeGRXRnNLR2x1Y0hWMGMxc3hYUzVrYVcxekxDQnphR0Z3WlN3Z0owbHVkbUZzYVdRZ2FXNXdkWFFnYzJOaGJHVW5LVHRjYmlBZ0lDQmphR1ZqYTFOb1lYQmxSWEYxWVd3b2FXNXdkWFJ6V3pKZExtUnBiWE1zSUhOb1lYQmxMQ0FuU1c1MllXeHBaQ0JwYm5CMWRDQkNKeWs3WEc0Z0lDQWdZMmhsWTJ0VGFHRndaVVZ4ZFdGc0tHbHVjSFYwYzFzelhTNWthVzF6TENCemFHRndaU3dnSjBsdWRtRnNhV1FnYVc1d2RYUWdiV1ZoYmljcE8xeHVJQ0FnSUdOb1pXTnJVMmhoY0dWRmNYVmhiQ2hwYm5CMWRITmJORjB1WkdsdGN5d2djMmhoY0dVc0lDZEpiblpoYkdsa0lHbHVjSFYwSUhaaGNpY3BPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR05vWldOclUyaGhjR1ZGY1hWaGJDaHBibkIxZEhOYk1WMHVaR2x0Y3l3Z1d6RmRMQ0FuU1c1MllXeHBaQ0JwYm5CMWRDQnpZMkZzWlNjcE8xeHVJQ0FnSUdOb1pXTnJVMmhoY0dWRmNYVmhiQ2hwYm5CMWRITmJNbDB1WkdsdGN5d2dXekZkTENBblNXNTJZV3hwWkNCcGJuQjFkQ0JDSnlrN1hHNGdJQ0FnWTJobFkydFRhR0Z3WlVWeGRXRnNLR2x1Y0hWMGMxc3pYUzVrYVcxekxDQmJNVjBzSUNkSmJuWmhiR2xrSUdsdWNIVjBJRzFsWVc0bktUdGNiaUFnSUNCamFHVmphMU5vWVhCbFJYRjFZV3dvYVc1d2RYUnpXelJkTG1ScGJYTXNJRnN4WFN3Z0owbHVkbUZzYVdRZ2FXNXdkWFFnZG1GeUp5azdYRzRnSUgxY2JuMDdYRzVjYm1OdmJuTjBJR055WldGMFpVSmhkR05vVG05eWJVbHVabVZ5Wlc1alpWQnliMmR5WVcxSmJtWnZJRDFjYmlBZ0lDQW9hVzV3ZFhSek9pQnlaV0ZrYjI1c2VTQlVaVzV6YjNKV2FXVjNXMTBzSUdGMGRISnBZblYwWlhNNklFSmhkR05vVG05eWJVRjBkSEpwWW5WMFpYTXBPaUJRY205bmNtRnRTVzVtYnlBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCN1pYQnphV3h2Yml3Z2MzQmhkR2xoYkN3Z1ptOXliV0YwZlNBOUlHRjBkSEpwWW5WMFpYTTdYRzRnSUNBZ0lDQmpiMjV6ZENCNVUyaGhjR1VnUFNCcGJuQjFkSE5iTUYwdVpHbHRjenRjYmlBZ0lDQWdJR052Ym5OMElHTnZiWEJ2Ym1WdWRITWdQU0J6Y0dGMGFXRnNJRDhnWjJWMFRXRjRRMjl0Y0c5dVpXNTBjeWg1VTJoaGNHVmJlVk5vWVhCbExteGxibWQwYUNBdElERmRLU0E2SURFN1hHNGdJQ0FnSUNCamIyNXpkQ0JqUTI5dGNHOXVaVzUwY3lBOUlHWnZjbTFoZENBOVBUMGdKMDVJVjBNbklDWW1JSGxUYUdGd1pTNXNaVzVuZEdnZ1BpQXhJRDhnWTI5dGNHOXVaVzUwY3lBNklERTdYRzRnSUNBZ0lDQmpiMjV6ZENCdmRYUndkWFJUYVhwbElEMGdVMmhoY0dWVmRHbHNMbk5wZW1Vb2VWTm9ZWEJsS1NBdklHTnZiWEJ2Ym1WdWRITTdYRzRnSUNBZ0lDQXZMeUJQYm14NUlITjFjSEJ2Y25RZ2RXNXBabTl5YlhNZ1ptOXlJRzl3YzJWMElIWmxjbk5wYjI0Z1BqMGdPU0FvYzNCaGRHbGhiQ0E5SUhSeWRXVXBMbHh1SUNBZ0lDQWdZMjl1YzNRZ2RYTmxVMmhoY0dWelZXNXBabTl5YlhNZ1BTQnpjR0YwYVdGc08xeHVJQ0FnSUNBZ1kyOXVjM1FnYzJoaGNHVlBjbEpoYm1zZ1BTQjFjMlZUYUdGd1pYTlZibWxtYjNKdGN5QS9JSGxUYUdGd1pTNXNaVzVuZEdnZ09pQjVVMmhoY0dVN1hHNGdJQ0FnSUNCamIyNXpkQ0I0SUQwZ2FXNXdkWFJXWVhKcFlXSnNaU2duZUNjc0lHbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pTd2dhVzV3ZFhSeld6QmRMbVJwYlhNc0lHTnZiWEJ2Ym1WdWRITXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ2MyTmhiR1VnUFNCcGJuQjFkRlpoY21saFlteGxLQ2R6WTJGc1pTY3NJR2x1Y0hWMGMxc3hYUzVrWVhSaFZIbHdaU3dnYVc1d2RYUnpXekZkTG1ScGJYTXNJR05EYjIxd2IyNWxiblJ6S1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR0pwWVhNZ1BTQnBibkIxZEZaaGNtbGhZbXhsS0NkaWFXRnpKeXdnYVc1d2RYUnpXekpkTG1SaGRHRlVlWEJsTENCcGJuQjFkSE5iTWwwdVpHbHRjeXdnWTBOdmJYQnZibVZ1ZEhNcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUk5aV0Z1SUQwZ2FXNXdkWFJXWVhKcFlXSnNaU2duYVc1d2RYUk5aV0Z1Snl3Z2FXNXdkWFJ6V3pOZExtUmhkR0ZVZVhCbExDQnBibkIxZEhOYk0xMHVaR2x0Y3l3Z1kwTnZiWEJ2Ym1WdWRITXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ2FXNXdkWFJXWVhJZ1BTQnBibkIxZEZaaGNtbGhZbXhsS0NkcGJuQjFkRlpoY2ljc0lHbHVjSFYwYzFzMFhTNWtZWFJoVkhsd1pTd2dhVzV3ZFhSeld6UmRMbVJwYlhNc0lHTkRiMjF3YjI1bGJuUnpLVHRjYmlBZ0lDQWdJR052Ym5OMElIa2dQU0J2ZFhSd2RYUldZWEpwWVdKc1pTZ25lU2NzSUdsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlN3Z2MyaGhjR1ZQY2xKaGJtc3NJR052YlhCdmJtVnVkSE1wTzF4dUlDQWdJQ0FnTHk4Z1ZFOUVUem9nYzNWd2NHOXlkQ0JwYm5CMWRITWdkMmwwYUNCa2FXWm1aWEpsYm5RZ1pHRjBZU0IwZVhCbExpQkRkWEp5Wlc1MElIZGxJRzVsWldRZ2RHOGdiV0ZyWlNCemRYSmxJR0ZzYkNCcGJuQjFkSE1nYUdGMlpTQjBhR1VnYzJGdFpTQmtZWFJoSUhSNWNHVXVYRzRnSUNBZ0lDQXZMeUJQZEdobGNuZHBjMlVzSUhSb1pTQnphR0ZrWlhJZ1kyOXRjR2xzWVhScGIyNGdkMmxzYkNCbVlXbHNMbHh1SUNBZ0lDQWdZMjl1YzNRZ1kyRnNZME5QWm1aelpYUWdQU0FvS1RvZ2MzUnlhVzVuSUQwK0lIdGNiaUFnSUNBZ0lDQWdiR1YwSUdOUFptWnpaWFFnUFNBbkp6dGNiaUFnSUNBZ0lDQWdhV1lnS0hOd1lYUnBZV3dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpUMlptYzJWMElEMGdZR3hsZENCalQyWm1jMlYwSUQwZ0pIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2VWTm9ZWEJsTG14bGJtZDBhQ0E5UFQwZ01TQWdJRDhnSnpCMUp5QTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtYjNKdFlYUWdQVDA5SUNkT1NGZERKeUEvSUdCdmRYUndkWFJKYm1ScFkyVnpXeVI3ZVZOb1lYQmxMbXhsYm1kMGFDQXRJREY5WFNBdklDUjdZMjl0Y0c5dVpXNTBjMzFnSURwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKMjkxZEhCMWRFbHVaR2xqWlhOYk1WMG5mVHRnTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2htYjNKdFlYUWdQVDA5SUNkT1EwaFhKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMDltWm5ObGRDQTlJR0JjYmlBZ0lDQWdJQ0FnSUNBZ0lDUjdlUzVwYm1ScFkyVnpVMlYwS0NkdmRYUndkWFJKYm1ScFkyVnpKeXdnSnpBbkxDQW5NQ2NwZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdOUFptWnpaWFFnUFNBa2Uza3VhVzVrYVdObGMxUnZUMlptYzJWMEtDZHZkWFJ3ZFhSSmJtUnBZMlZ6SnlsOU8yQTdYRzRnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJSFZ3WkdGMFpTQkRJR05vWVc1dVpXd3VYRzRnSUNBZ0lDQWdJQ0FnSUNCalQyWm1jMlYwSUQwZ1lIWmhjaUJqU1c1a2FXTmxjeUE5SUNSN2MyTmhiR1V1ZEhsd1pTNXBibVJwWTJWemZTZ3dLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMGx1WkdsalpYTmJNRjBnUFNCdmRYUndkWFJKYm1ScFkyVnpXeVI3ZVZOb1lYQmxMbXhsYm1kMGFDQXRJREY5WFR0Z08xeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2RYQmtZWFJsSUVReElIZ2dMaTR1SUhnZ1JHNGdZMmhoYm01bGJITXVYRzRnSUNBZ0lDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNVHNnYVNBOElITmpZV3hsTG5KaGJtczdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCalQyWm1jMlYwSUNzOUlHQmpTVzVrYVdObGMxc2tlMmw5WFNBOUlHOTFkSEIxZEVsdVpHbGpaWE5iSkh0cGZWMDdZRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdOUFptWnpaWFFnS3owZ1lHeGxkQ0JqVDJabWMyVjBJRDBnSkh0elkyRnNaUzVwYm1ScFkyVnpWRzlQWm1aelpYUW9KMk5KYm1ScFkyVnpKeWw5TzJBN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJqVDJabWMyVjBPMXh1SUNBZ0lDQWdmVHRjYmlBZ0lDQWdJR052Ym5OMElHZGxkRWx1Wm1WeVpXNWpaVTF2WkdWVGFHRmtaWEpUYjNWeVkyVWdQU0FvYUdWc2NHVnlPaUJUYUdGa1pYSklaV3h3WlhJcElEMCtJR0JjYmlBZ1kyOXVjM1FnWlhCemFXeHZiaUE5SUNSN1pYQnphV3h2Ym4wN1hHNGdJQ1I3YUdWc2NHVnlMbkpsWjJsemRHVnlWVzVwWm05eWJTZ25iM1YwY0hWMFUybDZaU2NzSUNkMU16SW5LUzVrWldOc1lYSmxWbUZ5YVdGaWJHVnpLSGdzSUhOallXeGxMQ0JpYVdGekxDQnBibkIxZEUxbFlXNHNJR2x1Y0hWMFZtRnlMQ0I1S1gxY2JpQWdKSHRvWld4d1pYSXViV0ZwYmxOMFlYSjBLQ2w5WEc0Z0lDUjdhR1ZzY0dWeUxtZDFZWEprUVdkaGFXNXpkRTkxZEU5bVFtOTFibVJ6VjI5eWEyZHliM1Z3VTJsNlpYTW9KM1Z1YVdadmNtMXpMbTkxZEhCMWRGTnBlbVVuS1gxY2JpQWdJQ0IyWVhJZ2IzVjBjSFYwU1c1a2FXTmxjeUE5SUNSN2VTNXZabVp6WlhSVWIwbHVaR2xqWlhNb1lHZHNiMkpoYkY5cFpIZ2dLaUFrZTJOdmJYQnZibVZ1ZEhOOVlDbDlPMXh1SUNBZ0lDUjdZMkZzWTBOUFptWnpaWFFvS1gxY2JpQWdJQ0JzWlhRZ2MyTmhiR1VnUFNBa2UzTmpZV3hsTG1kbGRFSjVUMlptYzJWMEtDZGpUMlptYzJWMEp5bDlPMXh1SUNBZ0lHeGxkQ0JpYVdGeklEMGdKSHRpYVdGekxtZGxkRUo1VDJabWMyVjBLQ2RqVDJabWMyVjBKeWw5TzF4dUlDQWdJR3hsZENCcGJuQjFkRTFsWVc0Z1BTQWtlMmx1Y0hWMFRXVmhiaTVuWlhSQ2VVOW1abk5sZENnblkwOW1abk5sZENjcGZUdGNiaUFnSUNCc1pYUWdhVzV3ZFhSV1lYSWdQU0FrZTJsdWNIVjBWbUZ5TG1kbGRFSjVUMlptYzJWMEtDZGpUMlptYzJWMEp5bDlPMXh1SUNBZ0lHeGxkQ0I0SUQwZ0pIdDRMbWRsZEVKNVQyWm1jMlYwS0NkbmJHOWlZV3hmYVdSNEp5bDlPMXh1SUNBZ0lHeGxkQ0IyWVd4MVpTQTlJQ2g0SUMwZ2FXNXdkWFJOWldGdUtTQXFJR2x1ZG1WeWMyVlRjWEowS0dsdWNIVjBWbUZ5SUNzZ1pYQnphV3h2YmlrZ0tpQnpZMkZzWlNBcklHSnBZWE03WEc0Z0lDQWdKSHQ1TG5ObGRFSjVUMlptYzJWMEtDZG5iRzlpWVd4ZmFXUjRKeXdnSjNaaGJIVmxKeWw5WEc0Z0lIMWdPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lDQWdibUZ0WlRvZ0owSmhkR05vVG05eWJXRnNhWHBoZEdsdmJpY3NYRzRnSUNBZ0lDQWdJSE5vWVdSbGNrTmhZMmhsT2lCN1hHNGdJQ0FnSUNBZ0lDQWdhR2x1ZERvZ1lDUjdZWFIwY21saWRYUmxjeTVsY0hOcGJHOXVmVjhrZTJGMGRISnBZblYwWlhNdVptOXliV0YwZlY4a2UzTndZWFJwWVd4OVh5UjdZMjl0Y0c5dVpXNTBjMzFnTEZ4dUlDQWdJQ0FnSUNBZ0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWek9pQjFjMlZUYUdGd1pYTlZibWxtYjNKdGN5QS9JRnNuY21GdWF5Y3NJQ2QwZVhCbEp5d2dKM1I1Y0dVbkxDQW5kSGx3WlNjc0lDZDBlWEJsSjEwZ09pQjFibVJsWm1sdVpXUXNYRzRnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUdkbGRGTm9ZV1JsY2xOdmRYSmpaVG9nWjJWMFNXNW1aWEpsYm1ObFRXOWtaVk5vWVdSbGNsTnZkWEpqWlN4Y2JpQWdJQ0FnSUNBZ1oyVjBVblZ1UkdGMFlUb2dLQ2tnUFQ0Z0tIdGNiaUFnSUNBZ0lDQWdJQ0J2ZFhSd2RYUnpPaUJiZTJScGJYTTZJR2x1Y0hWMGMxc3dYUzVrYVcxekxDQmtZWFJoVkhsd1pUb2dhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxmVjBzWEc0Z0lDQWdJQ0FnSUNBZ1pHbHpjR0YwWTJoSGNtOTFjRG9nZTNnNklFMWhkR2d1WTJWcGJDaHZkWFJ3ZFhSVGFYcGxJQzhnTmpRZ0x5b2dkMjl5YTJkeWIzVndJSE5wZW1VZ0tpOHBmU3hjYmlBZ0lDQWdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE02SUhWelpWTm9ZWEJsYzFWdWFXWnZjbTF6SUQ5Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnVzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklHOTFkSEIxZEZOcGVtVjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzR1TG1OeVpXRjBaVlJsYm5OdmNsTm9ZWEJsVm1GeWFXRmliR1Z6S0hsVGFHRndaU2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRjBnT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JiWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2IzVjBjSFYwVTJsNlpYMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lGMHNYRzRnSUNBZ0lDQWdJSDBwTEZ4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnY0dGeWMyVkNZWFJqYUU1dmNtMUJkSFJ5YVdKMWRHVnpJRDBnS0dGMGRISnBZblYwWlhNNklGSmxZMjl5WkR4emRISnBibWNzSUhWdWEyNXZkMjQrS1RvZ1FtRjBZMmhPYjNKdFFYUjBjbWxpZFhSbGN5QTlQbHh1SUNBZ0lHTnlaV0YwWlVGMGRISnBZblYwWlZkcGRHaERZV05vWlV0bGVTaGhkSFJ5YVdKMWRHVnpJR0Z6SUU5dGFYUThRbUYwWTJoT2IzSnRRWFIwY21saWRYUmxjeXdnYTJWNWIyWWdRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1UGlrN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCaVlYUmphRTV2Y20wZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lIVnVhMjV2ZDI0K0tUb2dkbTlwWkNBOVBpQjdYRzRnSUdOdmJuTjBJSHRwYm5CMWRITXNJRzkxZEhCMWRFTnZkVzUwZlNBOUlHTnZiblJsZUhRN1hHNGdJR052Ym5OMElIVndaR0YwWldSQmRIUnlhV0oxZEdWeklEMGdjR0Z5YzJWQ1lYUmphRTV2Y20xQmRIUnlhV0oxZEdWektIc3VMaTVoZEhSeWFXSjFkR1Z6TENCdmRYUndkWFJEYjNWdWRIMHBPMXh1SUNCcFppQW9aVzUyTG5kbFltZHdkUzUyWVd4cFpHRjBaVWx1Y0hWMFEyOXVkR1Z1ZENrZ2UxeHVJQ0FnSUhaaGJHbGtZWFJsU1c1d2RYUnpLR2x1Y0hWMGN5d2dkWEJrWVhSbFpFRjBkSEpwWW5WMFpYTXBPMXh1SUNCOVhHNGdJR2xtSUNoaGRIUnlhV0oxZEdWekxuUnlZV2x1YVc1blRXOWtaU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RbUYwWTJoT2IzSnRZV3hwZW1GMGFXOXVJSFJ5WVdsdWFXNW5UVzlrWlNCcGN5QnViM1FnYzNWd2NHOXlkR1ZrSUhsbGRDNG5LVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFFtRjBZMmhPYjNKdFNXNW1aWEpsYm1ObFVISnZaM0poYlVsdVptOG9hVzV3ZFhSekxDQjFjR1JoZEdWa1FYUjBjbWxpZFhSbGN5a3BPMXh1SUNCOVhHNTlPMXh1SWl3Z0lpOHZJRU52Y0hseWFXZG9kQ0FvWXlrZ1RXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUx5OGdUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRTFKVkNCTWFXTmxibk5sTGx4dVhHNXBiWEJ2Y25RZ2UxUmxibk52Y2xacFpYZDlJR1p5YjIwZ0p5NHVMeTR1TDNSbGJuTnZjaTEyYVdWM0p6dGNibWx0Y0c5eWRDQjdVMmhoY0dWVmRHbHNmU0JtY205dElDY3VMaTh1TGk5MWRHbHNKenRjYm1sdGNHOXlkQ0I3UTI5dGNIVjBaVU52Ym5SbGVIUXNJRkJ5YjJkeVlXMUpibVp2ZlNCbWNtOXRJQ2N1TGk5MGVYQmxjeWM3WEc1Y2JtbHRjRzl5ZENCN2FXNXdkWFJXWVhKcFlXSnNaU3dnYjNWMGNIVjBWbUZ5YVdGaWJHVXNJRk5vWVdSbGNraGxiSEJsY24wZ1puSnZiU0FuTGk5amIyMXRiMjRuTzF4dVhHNWpiMjV6ZENCMllXeHBaR0YwWlVsdWNIVjBjeUE5SUNocGJuQjFkSE02SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhTazZJSFp2YVdRZ1BUNGdlMXh1SUNCcFppQW9hVzV3ZFhSeld6QmRMbVJwYlhNdWJHVnVaM1JvSUNFOVBTQXpLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHBibkIxZENCemFHOTFiR1FnYUdGMlpTQXpJR1JwYldWdWMybHZibk1uS1R0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2doV3pNeU1Dd2dOalF3TENBeE1qZ3dYUzVwYm1Oc2RXUmxjeWhwYm5CMWRITmJNRjB1WkdsdGMxc3lYU2twSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMjUxYldKbGNpQnZaaUJqYUdGdWJtVnNjeUJ6YUc5MWJHUWdZbVVnTXpJd0xDQTJOREFnYjNJZ01USTRNQ2NwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR2x1Y0hWMGMxc3hYUzVrYVcxekxteGxibWQwYUNBaFBUMGdNU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25ZbWxoY3lCcGN5QmxlSEJsWTNSbFpDQjBieUJvWVhabElERWdaR2x0Wlc1emFXOXVjeWNwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR2x1Y0hWMGMxc3dYUzVrYVcxeld6SmRJQ0U5UFNCcGJuQjFkSE5iTVYwdVpHbHRjMXN3WFNrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYkdGemRDQmthVzFsYm5OcGIyNGdiMllnYVc1d2RYUWdZVzVrSUdKcFlYTWdZWEpsSUc1dmRDQjBhR1VnYzJGdFpTY3BPMXh1SUNCOVhHNTlPMXh1WEc1amIyNXpkQ0JqY21WaGRHVkNhV0Z6UVdSa1VISnZaM0poYlVsdVptOGdQU0FvYVc1d2RYUnpPaUJ5WldGa2IyNXNlU0JVWlc1emIzSldhV1YzVzEwcE9pQlFjbTluY21GdFNXNW1ieUE5UGlCN1hHNGdJR052Ym5OMElHOTFkSEIxZEZOb1lYQmxJRDBnYVc1d2RYUnpXekJkTG1ScGJYTTdYRzVjYmlBZ1kyOXVjM1FnWTJoaGJtNWxiSE1nUFNCcGJuQjFkSE5iTUYwdVpHbHRjMXN5WFR0Y2JpQWdMeThnYzJsdVkyVWdZMmhoYm01bGJDQnVkVzFpWlhJZ1kyRnVJR0psSUc5dWJIa2dNekl3THpZME1DOHhNamd3TENCcGRDZHpJR0ZzZDJGNWN5QmthWFpwYzJGaWJHVWdZbmtnTkZ4dUlDQmpiMjV6ZENCdmRYUndkWFJUYVhwbElEMGdVMmhoY0dWVmRHbHNMbk5wZW1Vb2IzVjBjSFYwVTJoaGNHVXBJQzhnTkR0Y2JseHVJQ0JqYjI1emRDQmtZWFJoVkhsd1pTQTlJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaVHRjYmlBZ1kyOXVjM1FnYVc1d2RYUWdQU0JwYm5CMWRGWmhjbWxoWW14bEtDZHBibkIxZENjc0lHUmhkR0ZVZVhCbExDQnZkWFJ3ZFhSVGFHRndaU3dnTkNrN1hHNGdJR052Ym5OMElHSnBZWE1nUFNCcGJuQjFkRlpoY21saFlteGxLQ2RpYVdGekp5d2daR0YwWVZSNWNHVXNJRnRqYUdGdWJtVnNjMTBzSURRcE8xeHVJQ0JqYjI1emRDQnlaWE5wWkhWaGJDQTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb0ozSmxjMmxrZFdGc0p5d2daR0YwWVZSNWNHVXNJRzkxZEhCMWRGTm9ZWEJsTENBMEtUdGNiaUFnWTI5dWMzUWdiM1YwY0hWMElEMGdiM1YwY0hWMFZtRnlhV0ZpYkdVb0oyOTFkSEIxZENjc0lHUmhkR0ZVZVhCbExDQnZkWFJ3ZFhSVGFHRndaU3dnTkNrN1hHNWNiaUFnWTI5dWMzUWdaMlYwVTJoaFpHVnlVMjkxY21ObElEMGdLSE5vWVdSbGNraGxiSEJsY2pvZ1UyaGhaR1Z5U0dWc2NHVnlLU0E5UGlCZ1hHNGdJR052Ym5OMElHTm9ZVzV1Wld4eklEMGdKSHRqYUdGdWJtVnNjMzExSUM4Z05EdGNiaUFnSkh0emFHRmtaWEpJWld4d1pYSXVaR1ZqYkdGeVpWWmhjbWxoWW14bGN5aHBibkIxZEN3Z1ltbGhjeXdnY21WemFXUjFZV3dzSUc5MWRIQjFkQ2w5WEc1Y2JpQWdKSHR6YUdGa1pYSklaV3h3WlhJdWJXRnBibE4wWVhKMEtDbDlYRzRnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1WjNWaGNtUkJaMkZwYm5OMFQzVjBUMlpDYjNWdVpITlhiM0pyWjNKdmRYQlRhWHBsY3lodmRYUndkWFJUYVhwbEtYMWNiaUFnSUNCc1pYUWdkbUZzZFdVZ1BTQWtlMmx1Y0hWMExtZGxkRUo1VDJabWMyVjBLQ2RuYkc5aVlXeGZhV1I0SnlsOVhHNGdJQ0FnSUNBcklDUjdZbWxoY3k1blpYUkNlVTltWm5ObGRDZ25aMnh2WW1Gc1gybGtlQ0FsSUdOb1lXNXVaV3h6SnlsOUlDc2dKSHR5WlhOcFpIVmhiQzVuWlhSQ2VVOW1abk5sZENnbloyeHZZbUZzWDJsa2VDY3BmVHRjYmlBZ0lDQWtlMjkxZEhCMWRDNXpaWFJDZVU5bVpuTmxkQ2duWjJ4dlltRnNYMmxrZUNjc0lDZDJZV3gxWlNjcGZWeHVJQ0I5WUR0Y2JseHVJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lHNWhiV1U2SUNkQ2FXRnpRV1JrSnl4Y2JpQWdJQ0JuWlhSU2RXNUVZWFJoT2lBb0tTQTlQaUFvZTF4dUlDQWdJQ0FnYjNWMGNIVjBjem9nVzN0a2FXMXpPaUJ2ZFhSd2RYUlRhR0Z3WlN3Z1pHRjBZVlI1Y0dVNklHbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pYMWRMRnh1SUNBZ0lDQWdaR2x6Y0dGMFkyaEhjbTkxY0RvZ2UzZzZJRTFoZEdndVkyVnBiQ2h2ZFhSd2RYUlRhWHBsSUM4Z05qUWdMeW9nZDI5eWEyZHliM1Z3SUhOcGVtVWdLaThwZlZ4dUlDQWdJSDBwTEZ4dUlDQWdJR2RsZEZOb1lXUmxjbE52ZFhKalpTeGNiaUFnZlR0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQmlhV0Z6UVdSa0lEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMEtUb2dkbTlwWkNBOVBpQjdYRzRnSUhaaGJHbGtZWFJsU1c1d2RYUnpLR052Ym5SbGVIUXVhVzV3ZFhSektUdGNiaUFnWTI5dWRHVjRkQzVqYjIxd2RYUmxLR055WldGMFpVSnBZWE5CWkdSUWNtOW5jbUZ0U1c1bWJ5aGpiMjUwWlhoMExtbHVjSFYwY3lrcE8xeHVmVHRjYmlJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVhVzF3YjNKMElIdEVZWFJoVkhsd1pYMGdabkp2YlNBbkxpNHZMaTR2TGk0dmQyRnpiUzFqYjIxdGIyNG5PMXh1YVcxd2IzSjBJSHRVWlc1emIzSldhV1YzZlNCbWNtOXRJQ2N1TGk4dUxpOTBaVzV6YjNJdGRtbGxkeWM3WEc1cGJYQnZjblFnZTAxQldGOURURWxRTENCTlNVNWZRMHhKVUN3Z1UyaGhjR1ZWZEdsc2ZTQm1jbTl0SUNjdUxpOHVMaTkxZEdsc0p6dGNibWx0Y0c5eWRDQjdRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1TENCamNtVmhkR1ZCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhsOUlHWnliMjBnSnk0dUwyRjBkSEpwWW5WMFpTMTNhWFJvTFdOaFkyaGxMV3RsZVNjN1hHNXBiWEJ2Y25RZ2UwTnZiWEIxZEdWRGIyNTBaWGgwTENCUWNtOW5jbUZ0U1c1bWIzMGdabkp2YlNBbkxpNHZkSGx3WlhNbk8xeHVYRzVwYlhCdmNuUWdlMmx1Y0hWMFZtRnlhV0ZpYkdVc0lHOTFkSEIxZEZaaGNtbGhZbXhsTENCVGFHRmtaWEpJWld4d1pYSXNJSFJsYm5OdmNsUjVjR1ZVYjFkeloyeFdZV3gxWlZSNWNHVjlJR1p5YjIwZ0p5NHZZMjl0Ylc5dUp6dGNibHh1ZEhsd1pTQkNkV2xzZEdsdVJuVnVZM1JwYjI1T1lXMWxJRDBnYzNSeWFXNW5PMXh1ZEhsd1pTQkZiR1Z0Wlc1MGQybHpaVU4xYzNSdmJVVjRjSEpsYzNOcGIyNGdQU0FvWlhod2NtVnpjMmx2YmpvZ2MzUnlhVzVuS1NBOVBpQnpkSEpwYm1jN1hHNTBlWEJsSUVWc1pXMWxiblIzYVhObFJuVnVZM1JwYjI1RFlXeHNJRDBnUW5WcGJIUnBia1oxYm1OMGFXOXVUbUZ0Wlh4RmJHVnRaVzUwZDJselpVTjFjM1J2YlVWNGNISmxjM05wYjI0N1hHNWNibU52Ym5OMElHTnlaV0YwWlVWc1pXMWxiblIzYVhObFVISnZaM0poYlZOb1lXUmxjaUE5WEc0Z0lDQWdLSE5vWVdSbGNraGxiSEJsY2pvZ1UyaGhaR1Z5U0dWc2NHVnlMQ0JrWVhSaGMybDZaVG9nYm5WdFltVnlMQ0JwYm5CMWRFUmhkR0ZVZVhCbE9pQnVkVzFpWlhJc0lHOTFkSEIxZEVSaGRHRlVlWEJsT2lCdWRXMWlaWElzWEc0Z0lDQWdJR1oxYm1ORFlXeHNPaUJGYkdWdFpXNTBkMmx6WlVaMWJtTjBhVzl1UTJGc2JDd2dZV1JrYVhScGIyNWhiRWx0Y0d4bGJXVnVkR0YwYVc5dVB6b2djM1J5YVc1bktUb2djM1J5YVc1bklEMCtJSHRjYmlBZ0lDQWdJR052Ym5OMElIWmxZMU5wZW1VZ1BTQk5ZWFJvTG1ObGFXd29aR0YwWVhOcGVtVWdMeUEwS1R0Y2JseHVJQ0FnSUNBZ2JHVjBJR1Y0Y0hKbGMzTnBiMjRnUFNBbkp6dGNiaUFnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdablZ1WTBOaGJHd2dQVDA5SUNkemRISnBibWNuS1NCN1hHNGdJQ0FnSUNBZ0lHVjRjSEpsYzNOcGIyNGdQU0JnSkh0bWRXNWpRMkZzYkgwb1lTbGdPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdaWGh3Y21WemMybHZiaUE5SUdaMWJtTkRZV3hzS0NkaEp5azdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR052Ym5OMElHbHVjSFYwSUQwZ2FXNXdkWFJXWVhKcFlXSnNaU2duYVc1d2RYUkVZWFJoSnl3Z2FXNXdkWFJFWVhSaFZIbHdaU3dnVzNabFkxTnBlbVZkTENBMEtUdGNiaUFnSUNBZ0lHTnZibk4wSUc5MWRIQjFkQ0E5SUc5MWRIQjFkRlpoY21saFlteGxLQ2R2ZFhSd2RYUkVZWFJoSnl3Z2IzVjBjSFYwUkdGMFlWUjVjR1VzSUZ0MlpXTlRhWHBsWFN3Z05DazdYRzVjYmlBZ0lDQWdJSEpsZEhWeWJpQmdYRzRnSUNBZ0lDQWtlM05vWVdSbGNraGxiSEJsY2k1eVpXZHBjM1JsY2xWdWFXWnZjbTBvSjNabFkxOXphWHBsSnl3Z0ozVXpNaWNwTG1SbFkyeGhjbVZXWVhKcFlXSnNaWE1vYVc1d2RYUXNJRzkxZEhCMWRDbDlYRzVjYmlBZ0pIdGhaR1JwZEdsdmJtRnNTVzF3YkdWdFpXNTBZWFJwYjI0Z1B6OGdKeWQ5WEc1Y2JpQWdKSHR6YUdGa1pYSklaV3h3WlhJdWJXRnBibE4wWVhKMEtDbDlYRzRnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1WjNWaGNtUkJaMkZwYm5OMFQzVjBUMlpDYjNWdVpITlhiM0pyWjNKdmRYQlRhWHBsY3lnbmRXNXBabTl5YlhNdWRtVmpYM05wZW1VbktYMWNibHh1SUNBZ0lHeGxkQ0JoSUQwZ0pIdHBibkIxZEM1blpYUkNlVTltWm5ObGRDZ25aMnh2WW1Gc1gybGtlQ2NwZlR0Y2JpQWdJQ0FrZTI5MWRIQjFkQzV6WlhSQ2VVOW1abk5sZENnbloyeHZZbUZzWDJsa2VDY3NJR1Y0Y0hKbGMzTnBiMjRwZlZ4dUlDQjlZRHRjYmlBZ0lDQjlPMXh1WEc1amIyNXpkQ0JqY21WaGRHVkZiR1Z0Wlc1MGQybHpaVkJ5YjJkeVlXMUpibVp2SUQxY2JpQWdJQ0FvYVc1d2RYUTZJRlJsYm5OdmNsWnBaWGNzSUc1aGJXVTZJSE4wY21sdVp5d2dablZ1WTBOaGJHdzZJRVZzWlcxbGJuUjNhWE5sUm5WdVkzUnBiMjVEWVd4c0xDQmhaR1JwZEdsdmJtRnNTVzF3YkdWdFpXNTBZWFJwYjI0L09pQnpkSEpwYm1jc1hHNGdJQ0FnSUdOaFkyaGxTMlY1UHpvZ2MzUnlhVzVuTENCdmRYUndkWFJFWVhSaFZIbHdaVG9nYm5WdFltVnlJRDBnYVc1d2RYUXVaR0YwWVZSNWNHVXBPaUJRY205bmNtRnRTVzVtYnlBOVBpQW9lMXh1SUNBZ0lDQWdibUZ0WlN4Y2JpQWdJQ0FnSUhOb1lXUmxja05oWTJobE9pQjdhR2x1ZERvZ1kyRmphR1ZMWlhrc0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWek9pQmJKM1I1Y0dVblhYMHNYRzRnSUNBZ0lDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVNklITm9ZV1JsY2tobGJIQmxjaUE5UGlCamNtVmhkR1ZGYkdWdFpXNTBkMmx6WlZCeWIyZHlZVzFUYUdGa1pYSW9YRzRnSUNBZ0lDQWdJQ0FnYzJoaFpHVnlTR1ZzY0dWeUxDQlRhR0Z3WlZWMGFXd3VjMmw2WlNocGJuQjFkQzVrYVcxektTd2dhVzV3ZFhRdVpHRjBZVlI1Y0dVc0lHOTFkSEIxZEVSaGRHRlVlWEJsTENCbWRXNWpRMkZzYkN3Z1lXUmthWFJwYjI1aGJFbHRjR3hsYldWdWRHRjBhVzl1S1N4Y2JpQWdJQ0FnSUdkbGRGSjFia1JoZEdFNklDaHBibkIxZEZSbGJuTnZjbk1wSUQwK0lDaDdYRzRnSUNBZ0lDQWdJRzkxZEhCMWRITTZJRnQ3WkdsdGN6b2dhVzV3ZFhRdVpHbHRjeXdnWkdGMFlWUjVjR1U2SUc5MWRIQjFkRVJoZEdGVWVYQmxmVjBzWEc0Z0lDQWdJQ0FnSUdScGMzQmhkR05vUjNKdmRYQTZYRzRnSUNBZ0lDQWdJQ0FnSUNCN2VEb2dUV0YwYUM1alpXbHNLRk5vWVhCbFZYUnBiQzV6YVhwbEtHbHVjSFYwVkdWdWMyOXljMXN3WFM1a2FXMXpLU0F2SURZMElDOHFJSGR2Y210bmNtOTFjQ0J6YVhwbElDb3ZJQzhnTkNBdktpQjJaV01nYzJsNlpTQXFMeWw5TEZ4dUlDQWdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE02SUZ0Y2JpQWdJQ0FnSUNBZ0lDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJOWVhSb0xtTmxhV3dvVTJoaGNHVlZkR2xzTG5OcGVtVW9hVzV3ZFhRdVpHbHRjeWtnTHlBMEtYMHNYRzRnSUNBZ0lDQWdJRjBzWEc0Z0lDQWdJQ0I5S1Z4dUlDQWdJSDBwTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWVdKeklEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMEtUb2dkbTlwWkNBOVBpQjdYRzRnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hqY21WaGRHVkZiR1Z0Wlc1MGQybHpaVkJ5YjJkeVlXMUpibVp2S0dOdmJuUmxlSFF1YVc1d2RYUnpXekJkTENBblFXSnpKeXdnSjJGaWN5Y3BLVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCaFkyOXpJRDBnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBLVG9nZG05cFpDQTlQaUI3WEc0Z0lHTnZiblJsZUhRdVkyOXRjSFYwWlNoamNtVmhkR1ZGYkdWdFpXNTBkMmx6WlZCeWIyZHlZVzFKYm1adktHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExDQW5RV052Y3ljc0lDZGhZMjl6SnlrcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR0ZqYjNOb0lEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMEtUb2dkbTlwWkNBOVBpQjdYRzRnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hqY21WaGRHVkZiR1Z0Wlc1MGQybHpaVkJ5YjJkeVlXMUpibVp2S0dOdmJuUmxlSFF1YVc1d2RYUnpXekJkTENBblFXTnZjMmduTENBbllXTnZjMmduS1NrN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdZWE5wYmlBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZENrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFJXeGxiV1Z1ZEhkcGMyVlFjbTluY21GdFNXNW1ieWhqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYU3dnSjBGemFXNG5MQ0FuWVhOcGJpY3BLVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCaGMybHVhQ0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ2s2SUhadmFXUWdQVDRnZTF4dUlDQmpiMjUwWlhoMExtTnZiWEIxZEdVb1kzSmxZWFJsUld4bGJXVnVkSGRwYzJWUWNtOW5jbUZ0U1c1bWJ5aGpiMjUwWlhoMExtbHVjSFYwYzFzd1hTd2dKMEZ6YVc1b0p5d2dKMkZ6YVc1b0p5a3BPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdGMFlXNGdQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXBPaUIyYjJsa0lEMCtJSHRjYmlBZ1kyOXVkR1Y0ZEM1amIyMXdkWFJsS0dOeVpXRjBaVVZzWlcxbGJuUjNhWE5sVUhKdlozSmhiVWx1Wm04b1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwc0lDZEJkR0Z1Snl3Z0oyRjBZVzRuS1NrN1hHNTlPMXh1Wlhod2IzSjBJR052Ym5OMElHRjBZVzVvSUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwS1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGpjbVZoZEdWRmJHVnRaVzUwZDJselpWQnliMmR5WVcxSmJtWnZLR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMQ0FuUVhSaGJtZ25MQ0FuWVhSaGJtZ25LU2s3WEc1OU8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRU5oYzNSQmRIUnlhV0oxZEdWeklHVjRkR1Z1WkhNZ1FYUjBjbWxpZFhSbFYybDBhRU5oWTJobFMyVjVJSHRjYmlBZ2NtVmhaRzl1YkhrZ2RHODZJRzUxYldKbGNqdGNiaUFnY21WaFpHOXViSGtnYzJGMGRYSmhkR1UvT2lCaWIyOXNaV0Z1TzF4dWZWeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2NHRnljMlZEWVhOMFFYUjBjbWxpZFhSbGN5QTlJQ2hoZEhSeWFXSjFkR1Z6T2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0IxYm10dWIzZHVQaWs2SUVOaGMzUkJkSFJ5YVdKMWRHVnpJRDArWEc0Z0lDQWdZM0psWVhSbFFYUjBjbWxpZFhSbFYybDBhRU5oWTJobFMyVjVLR0YwZEhKcFluVjBaWE1nWVhNZ2UzUnZPaUJ1ZFcxaVpYSjlLVHRjYmx4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWTJGemRDQTlJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDd2dZWFIwY21saWRYUmxjem9nUTJGemRFRjBkSEpwWW5WMFpYTXBPaUIyYjJsa0lEMCtJSHRjYmlBZ2JHVjBJR1oxYm1NNklFVnNaVzFsYm5SM2FYTmxSblZ1WTNScGIyNURZV3hzTzF4dUlDQnpkMmwwWTJnZ0tHRjBkSEpwWW5WMFpYTXVkRzhwSUh0Y2JpQWdJQ0JqWVhObElFUmhkR0ZVZVhCbExtWnNiMkYwTVRZNlhHNGdJQ0FnSUNCbWRXNWpJRDBnSjNabFl6UThaakUyUGljN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSUVSaGRHRlVlWEJsTG1ac2IyRjBPbHh1SUNBZ0lDQWdablZ1WXlBOUlDZDJaV00wUEdZek1qNG5PMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQkVZWFJoVkhsd1pTNTFhVzUwTXpJNlhHNGdJQ0FnSUNCbWRXNWpJRDBnSjNabFl6UThkVE15UGljN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSUVSaGRHRlVlWEJsTG1sdWRETXlPbHh1SUNBZ0lDQWdablZ1WXlBOUlDZDJaV00wUEdrek1qNG5PMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQkVZWFJoVkhsd1pTNWliMjlzT2x4dUlDQWdJQ0FnWm5WdVl5QTlJQ2QyWldNMFBHSnZiMncrSnp0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1VtRnVaMlZGY25KdmNpaGdibTkwSUhOMWNIQnZjblJsWkNCMGVYQmxJQ2h6Y0dWamFXWnBaV1FnYVc0Z1lYUjBjbWxpZFhSbElDZDBieWNnWm5KdmJTQW5RMkZ6ZENjZ2IzQmxjbUYwYjNJcE9pQWtlMkYwZEhKcFluVjBaWE11ZEc5OVlDazdYRzRnSUgxY2JpQWdZMjl1ZEdWNGRDNWpiMjF3ZFhSbEtGeHVJQ0FnSUNBZ1kzSmxZWFJsUld4bGJXVnVkSGRwYzJWUWNtOW5jbUZ0U1c1bWJ5aGpiMjUwWlhoMExtbHVjSFYwYzFzd1hTd2dKME5oYzNRbkxDQm1kVzVqTENCMWJtUmxabWx1WldRc0lHRjBkSEpwWW5WMFpYTXVZMkZqYUdWTFpYa3NJR0YwZEhKcFluVjBaWE11ZEc4cEtUdGNibjA3WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1EyeHBjRUYwZEhKcFluVjBaWE1nWlhoMFpXNWtjeUJCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrZ2UxeHVJQ0J5WldGa2IyNXNlU0J0YVc0NklHNTFiV0psY2p0Y2JpQWdjbVZoWkc5dWJIa2diV0Y0T2lCdWRXMWlaWEk3WEc1OVhHNWNibU52Ym5OMElHZGxibVZ5WVhSbFEyeHBjRUYwZEhKcFluVjBaWE5HY205dFNXNXdkWFJ6SUQwZ0tHbHVjSFYwY3pvZ2NtVmhaRzl1YkhrZ1ZHVnVjMjl5Vm1sbGQxdGRLVG9nUTJ4cGNFRjBkSEpwWW5WMFpYTWdQVDRnZTF4dUlDQmpiMjV6ZENCdGFXNGdQU0FvYVc1d2RYUnpMbXhsYm1kMGFDQStQU0F5SUNZbUlHbHVjSFYwYzFzeFhTNWtZWFJoSUNFOVBTQXdLU0EvSUdsdWNIVjBjMXN4WFM1blpYUkdiRzloZERNeVFYSnlZWGtvS1Zzd1hTQTZJRTFKVGw5RFRFbFFPMXh1SUNCamIyNXpkQ0J0WVhnZ1BTQW9hVzV3ZFhSekxteGxibWQwYUNBK1BTQXpJQ1ltSUdsdWNIVjBjMXN5WFM1a1lYUmhJQ0U5UFNBd0tTQS9JR2x1Y0hWMGMxc3lYUzVuWlhSR2JHOWhkRE15UVhKeVlYa29LVnN3WFNBNklFMUJXRjlEVEVsUU8xeHVJQ0J5WlhSMWNtNGdZM0psWVhSbFFYUjBjbWxpZFhSbFYybDBhRU5oWTJobFMyVjVLSHR0YVc0c0lHMWhlSDBwTzF4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHTnNhWEFnUFNBb1kyOXVkR1Y0ZERvZ1EyOXRjSFYwWlVOdmJuUmxlSFFzSUdOc2FYQkJkSFJ5YVdKMWRHVnpPaUJEYkdsd1FYUjBjbWxpZFhSbGN5azZJSFp2YVdRZ1BUNGdlMXh1SUNCamIyNXpkQ0JoZEhSeWFXSjFkR1Z6SUQwZ1kyOXVkR1Y0ZEM1cGJuQjFkSE11YkdWdVozUm9JRDA5UFNBeElEOGdZMnhwY0VGMGRISnBZblYwWlhNZ09pQm5aVzVsY21GMFpVTnNhWEJCZEhSeWFXSjFkR1Z6Um5KdmJVbHVjSFYwY3loamIyNTBaWGgwTG1sdWNIVjBjeWs3WEc0Z0lHTnZibk4wSUdSaGRHRlVlWEJsSUQwZ2RHVnVjMjl5Vkhsd1pWUnZWM05uYkZaaGJIVmxWSGx3WlNoamIyNTBaWGgwTG1sdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlNrN1hHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGNiaUFnSUNBZ0lHTnlaV0YwWlVWc1pXMWxiblIzYVhObFVISnZaM0poYlVsdVptOG9YRzRnSUNBZ0lDQWdJQ0FnWTI5dWRHVjRkQzVwYm5CMWRITmJNRjBzSUNkRGJHbHdKeXdnWVNBOVBpQmdZMnhoYlhBb0pIdGhmU3dnWTJ4cGNGOXRhVzVmTENCamJHbHdYMjFoZUY4cFlDd2dZRnh1SUNBZ0lHTnZibk4wSUdOc2FYQmZiV2x1WHpvZ2RtVmpORHdrZTJSaGRHRlVlWEJsZlQ0Z1BTQjJaV00wS0NSN1pHRjBZVlI1Y0dWOUtDUjdZWFIwY21saWRYUmxjeTV0YVc1OUtTazdYRzRnSUNBZ1kyOXVjM1FnWTJ4cGNGOXRZWGhmT2lCMlpXTTBQQ1I3WkdGMFlWUjVjR1Y5UGlBOUlIWmxZelFvSkh0a1lYUmhWSGx3Wlgwb0pIdGhkSFJ5YVdKMWRHVnpMbTFoZUgwcEtUdGNibUFzWEc0Z0lDQWdJQ0FnSUNBZ1lYUjBjbWxpZFhSbGN5NWpZV05vWlV0bGVTa3NYRzRnSUNBZ0lDQjdhVzV3ZFhSek9pQmJNRjE5S1R0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQmpaV2xzSUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwS1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGpjbVZoZEdWRmJHVnRaVzUwZDJselpWQnliMmR5WVcxSmJtWnZLR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMQ0FuUTJWcGJDY3NJQ2RqWldsc0p5a3BPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdOdmN5QTlJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDazZJSFp2YVdRZ1BUNGdlMXh1SUNCamIyNTBaWGgwTG1OdmJYQjFkR1VvWTNKbFlYUmxSV3hsYldWdWRIZHBjMlZRY205bmNtRnRTVzVtYnloamIyNTBaWGgwTG1sdWNIVjBjMXN3WFN3Z0owTnZjeWNzSUNkamIzTW5LU2s3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1kyOXphQ0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ2s2SUhadmFXUWdQVDRnZTF4dUlDQmpiMjUwWlhoMExtTnZiWEIxZEdVb1kzSmxZWFJsUld4bGJXVnVkSGRwYzJWUWNtOW5jbUZ0U1c1bWJ5aGpiMjUwWlhoMExtbHVjSFYwYzFzd1hTd2dKME52YzJnbkxDQW5ZMjl6YUNjcEtUdGNibjA3WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1FXeHdhR0ZCZEhSeWFXSjFkR1Z6SUdWNGRHVnVaSE1nUVhSMGNtbGlkWFJsVjJsMGFFTmhZMmhsUzJWNUlIdGNiaUFnY21WaFpHOXViSGtnWVd4d2FHRTZJRzUxYldKbGNqdGNibjFjYmx4dVpYaHdiM0owSUdOdmJuTjBJSEJoY25ObFFXeHdhR0ZCZEhSeWFXSjFkR1Z6SUQwZ0tHRjBkSEpwWW5WMFpYTTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lIVnVhMjV2ZDI0K0tUb2dRV3h3YUdGQmRIUnlhV0oxZEdWeklEMCtYRzRnSUNBZ1kzSmxZWFJsUVhSMGNtbGlkWFJsVjJsMGFFTmhZMmhsUzJWNUtHRjBkSEpwWW5WMFpYTWdZWE1nZTJGc2NHaGhPaUJ1ZFcxaVpYSjlLVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1ZzZFNBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN6b2dRV3h3YUdGQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUdOdmJuTjBJR1JoZEdGVWVYQmxJRDBnZEdWdWMyOXlWSGx3WlZSdlYzTm5iRlpoYkhWbFZIbHdaU2hqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU2s3WEc0Z0lHTnZiblJsZUhRdVkyOXRjSFYwWlNoamNtVmhkR1ZGYkdWdFpXNTBkMmx6WlZCeWIyZHlZVzFKYm1adktGeHVJQ0FnSUNBZ1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwc0lDZEZiSFVuTENCaElEMCtJR0JsYkhWZmRtWXpNaWdrZTJGOUtXQXNJR0JjYmlBZ1kyOXVjM1FnWld4MVgyRnNjR2hoWHlBOUlDUjdaR0YwWVZSNWNHVjlLQ1I3WVhSMGNtbGlkWFJsY3k1aGJIQm9ZWDBwTzF4dVhHNGdJR1p1SUdWc2RWOW1NeklvWVRvZ0pIdGtZWFJoVkhsd1pYMHBJQzArSUNSN1pHRjBZVlI1Y0dWOUlIdGNiaUFnY21WMGRYSnVJSE5sYkdWamRDZ29aWGh3S0dFcElDMGdNUzR3S1NBcUlHVnNkVjloYkhCb1lWOHNJR0VzSUdFZ1BqMGdNQzR3S1R0Y2JpQWdmVnh1WEc0Z0lHWnVJR1ZzZFY5MlpqTXlLSFk2SUhabFl6UThKSHRrWVhSaFZIbHdaWDArS1NBdFBpQjJaV00wUENSN1pHRjBZVlI1Y0dWOVBpQjdYRzRnSUhKbGRIVnliaUIyWldNMEtHVnNkVjltTXpJb2RpNTRLU3dnWld4MVgyWXpNaWgyTG5rcExDQmxiSFZmWmpNeUtIWXVlaWtzSUdWc2RWOW1NeklvZGk1M0tTazdYRzRnSUgxZ0xGeHVJQ0FnSUNBZ1lYUjBjbWxpZFhSbGN5NWpZV05vWlV0bGVTa3BPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdWeVprbHRjR3dnUFNBb2RtRnlWSGx3WlNBOUlDZG1NekluS1NBOVBpQmdYRzVqYjI1emRDQnlNRG9nSkh0MllYSlVlWEJsZlNBOUlEQXVNekkzTlRreE1UdGNibU52Ym5OMElISXhPaUFrZTNaaGNsUjVjR1Y5SUQwZ01DNHlOVFE0TWprMU9USTdYRzVqYjI1emRDQnlNam9nSkh0MllYSlVlWEJsZlNBOUlDMHdMakk0TkRRNU5qY3pOanRjYm1OdmJuTjBJSEl6T2lBa2UzWmhjbFI1Y0dWOUlEMGdNUzQwTWpFME1UTTNOREU3WEc1amIyNXpkQ0J5TkRvZ0pIdDJZWEpVZVhCbGZTQTlJQzB4TGpRMU16RTFNakF5Tnp0Y2JtTnZibk4wSUhJMU9pQWtlM1poY2xSNWNHVjlJRDBnTVM0d05qRTBNRFUwTWprN1hHNWNibVp1SUdWeVpsOTJaak15S0hZNklIWmxZelE4Skh0MllYSlVlWEJsZlQ0cElDMCtJSFpsWXpROEpIdDJZWEpVZVhCbGZUNGdlMXh1SUNCc1pYUWdZV0p6ZGlBOUlHRmljeWgyS1R0Y2JpQWdiR1YwSUhnZ1BTQXhMakFnTHlBb01TNHdJQ3NnY2pBZ0tpQmhZbk4yS1R0Y2JpQWdjbVYwZFhKdUlITnBaMjRvZGlrZ0tpQW9NUzR3SUMwZ0tDZ29LSEkxSUNvZ2VDQXJJSEkwS1NBcUlIZ2dLeUJ5TXlrZ0tpQjRJQ3NnY2pJcElDb2dlQ0FySUhJeEtTQXFJSGdnS2lCbGVIQW9MV0ZpYzNZZ0tpQmhZbk4yS1NrN1hHNTlZRHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1Z5WmlBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZENrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JqYjI1emRDQmtZWFJoVkhsd1pTQTlJSFJsYm5OdmNsUjVjR1ZVYjFkeloyeFdZV3gxWlZSNWNHVW9ZMjl1ZEdWNGRDNXBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVXBPMXh1SUNCamIyNTBaWGgwTG1OdmJYQjFkR1VvWTNKbFlYUmxSV3hsYldWdWRIZHBjMlZRY205bmNtRnRTVzVtYnloamIyNTBaWGgwTG1sdWNIVjBjMXN3WFN3Z0owVnlaaWNzSUdFZ1BUNGdZR1Z5Wmw5MlpqTXlLQ1I3WVgwcFlDd2daWEptU1cxd2JDaGtZWFJoVkhsd1pTa3BLVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCbGVIQWdQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXBPaUIyYjJsa0lEMCtJSHRjYmlBZ1kyOXVkR1Y0ZEM1amIyMXdkWFJsS0dOeVpXRjBaVVZzWlcxbGJuUjNhWE5sVUhKdlozSmhiVWx1Wm04b1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwc0lDZEZlSEFuTENBblpYaHdKeWtwTzF4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHWnNiMjl5SUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwS1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGpjbVZoZEdWRmJHVnRaVzUwZDJselpWQnliMmR5WVcxSmJtWnZLR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMQ0FuUm14dmIzSW5MQ0FuWm14dmIzSW5LU2s3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1oyVnNkU0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ2s2SUhadmFXUWdQVDRnZTF4dUlDQmpiMjV6ZENCa1lYUmhWSGx3WlNBOUlIUmxibk52Y2xSNWNHVlViMWR6WjJ4V1lXeDFaVlI1Y0dVb1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVcE8xeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFJXeGxiV1Z1ZEhkcGMyVlFjbTluY21GdFNXNW1ieWhjYmlBZ0lDQWdJR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMQ0FuUjJWc2RTY3NJR0VnUFQ0Z1lEQXVOU0FxSUNSN1lYMGdLaUFvTVM0d0lDc2daWEptWDNabU16SW9KSHRoZlNBcUlEQXVOekEzTVRBMk56Z3hNVGcyTlRRM05Ta3BZQ3dnWlhKbVNXMXdiQ2hrWVhSaFZIbHdaU2twS1R0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnNaV0ZyZVZKbGJIVWdQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXNJR0YwZEhKcFluVjBaWE02SUVGc2NHaGhRWFIwY21saWRYUmxjeWs2SUhadmFXUWdQVDRnZTF4dUlDQmpiMjV6ZENCa1lYUmhWSGx3WlNBOUlIUmxibk52Y2xSNWNHVlViMWR6WjJ4V1lXeDFaVlI1Y0dVb1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVcE8xeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFJXeGxiV1Z1ZEhkcGMyVlFjbTluY21GdFNXNW1ieWhjYmlBZ0lDQWdJR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMQ0FuVEdWaGEzbFNaV3gxSnl3Z1lTQTlQaUJnYzJWc1pXTjBLR3hsWVd0NVgzSmxiSFZmWVd4d2FHRmZJQ29nSkh0aGZTd2dKSHRoZlN3Z0pIdGhmU0ErUFNCMlpXTTBQQ1I3WkdGMFlWUjVjR1Y5UGlnd0xqQXBLV0FzWEc0Z0lDQWdJQ0JnWTI5dWMzUWdiR1ZoYTNsZmNtVnNkVjloYkhCb1lWOGdQU0FrZTJSaGRHRlVlWEJsZlNna2UyRjBkSEpwWW5WMFpYTXVZV3h3YUdGOUtUdGdMQ0JoZEhSeWFXSjFkR1Z6TG1OaFkyaGxTMlY1S1NrN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdibTkwSUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwS1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGpjbVZoZEdWRmJHVnRaVzUwZDJselpWQnliMmR5WVcxSmJtWnZLR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMQ0FuVG05MEp5d2dZU0E5UGlCZ0lTUjdZWDFnS1NrN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdibVZuSUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwS1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGpjbVZoZEdWRmJHVnRaVzUwZDJselpWQnliMmR5WVcxSmJtWnZLR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMQ0FuVG1Wbkp5d2dZU0E5UGlCZ0xTUjdZWDFnS1NrN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdjbVZqYVhCeWIyTmhiQ0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ2s2SUhadmFXUWdQVDRnZTF4dUlDQmpiMjUwWlhoMExtTnZiWEIxZEdVb1kzSmxZWFJsUld4bGJXVnVkSGRwYzJWUWNtOW5jbUZ0U1c1bWJ5aGpiMjUwWlhoMExtbHVjSFYwYzFzd1hTd2dKMUpsWTJsd2NtOWpZV3duTENCaElEMCtJR0F4TGpBdkpIdGhmV0FwS1R0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQnlaV3gxSUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwS1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR052Ym5OMElHUmhkR0ZVZVhCbElEMGdkR1Z1YzI5eVZIbHdaVlJ2VjNObmJGWmhiSFZsVkhsd1pTaGpiMjUwWlhoMExtbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pTazdYRzRnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hqY21WaGRHVkZiR1Z0Wlc1MGQybHpaVkJ5YjJkeVlXMUpibVp2S0Z4dUlDQWdJQ0FnWTI5dWRHVjRkQzVwYm5CMWRITmJNRjBzSUNkU1pXeDFKeXdnWVNBOVBpQmdjMlZzWldOMEtIWmxZelE4Skh0a1lYUmhWSGx3WlgwK0tEQXVNQ2tzSUNSN1lYMHNJQ1I3WVgwZ1BpQjJaV00wUENSN1pHRjBZVlI1Y0dWOVBpZ3dMakFwS1dBcEtUdGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J6YVdkdGIybGtJRDBnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBLVG9nZG05cFpDQTlQaUI3WEc0Z0lHTnZiblJsZUhRdVkyOXRjSFYwWlNoamNtVmhkR1ZGYkdWdFpXNTBkMmx6WlZCeWIyZHlZVzFKYm1adktHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExDQW5VMmxuYlc5cFpDY3NJR0VnUFQ0Z1lDZ3hMakFnTHlBb01TNHdJQ3NnWlhod0tDMGtlMkY5S1NrcFlDa3BPMXh1ZlR0Y2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQklZWEprVTJsbmJXOXBaRUYwZEhKcFluVjBaWE1nWlhoMFpXNWtjeUJCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrZ2UxeHVJQ0J5WldGa2IyNXNlU0JoYkhCb1lUb2diblZ0WW1WeU8xeHVJQ0J5WldGa2IyNXNlU0JpWlhSaE9pQnVkVzFpWlhJN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQndZWEp6WlVoaGNtUlRhV2R0YjJsa1FYUjBjbWxpZFhSbGN5QTlJQ2hoZEhSeWFXSjFkR1Z6T2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0IxYm10dWIzZHVQaWs2SUVoaGNtUlRhV2R0YjJsa1FYUjBjbWxpZFhSbGN5QTlQbHh1SUNBZ0lHTnlaV0YwWlVGMGRISnBZblYwWlZkcGRHaERZV05vWlV0bGVTaGhkSFJ5YVdKMWRHVnpJR0Z6SUh0Y2JpQWdJQ0FnSUdGc2NHaGhPaUJ1ZFcxaVpYSTdYRzRnSUNBZ0lDQmlaWFJoT2lCdWRXMWlaWEk3WEc0Z0lDQWdmU2s3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JvWVhKa1UybG5iVzlwWkNBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN6b2dTR0Z5WkZOcFoyMXZhV1JCZEhSeWFXSjFkR1Z6S1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR052Ym5OMElHUmhkR0ZVZVhCbElEMGdkR1Z1YzI5eVZIbHdaVlJ2VjNObmJGWmhiSFZsVkhsd1pTaGpiMjUwWlhoMExtbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pTazdYRzRnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hqY21WaGRHVkZiR1Z0Wlc1MGQybHpaVkJ5YjJkeVlXMUpibVp2S0Z4dUlDQWdJQ0FnWTI5dWRHVjRkQzVwYm5CMWRITmJNRjBzSUNkSVlYSmtVMmxuYlc5cFpDY3NYRzRnSUNBZ0lDQmhJRDArSUdCdFlYZ29kbVZqTkR3a2UyUmhkR0ZVZVhCbGZUNG9NQzR3S1N3Z2JXbHVLSFpsWXpROEpIdGtZWFJoVkhsd1pYMCtLREV1TUNrc0lDUjdZWFIwY21saWRYUmxjeTVoYkhCb1lYMGdLaUFrZTJGOUlDc2dkbVZqTkR3a2UyUmhkR0ZVZVhCbGZUNG9KSHRjYmlBZ0lDQWdJQ0FnSUNCaGRIUnlhV0oxZEdWekxtSmxkR0Y5S1NrcFlDeGNiaUFnSUNBZ0lIVnVaR1ZtYVc1bFpDd2dZWFIwY21saWRYUmxjeTVqWVdOb1pVdGxlU2twTzF4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElITnBiaUE5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ2s2SUhadmFXUWdQVDRnZTF4dUlDQmpiMjUwWlhoMExtTnZiWEIxZEdVb1kzSmxZWFJsUld4bGJXVnVkSGRwYzJWUWNtOW5jbUZ0U1c1bWJ5aGpiMjUwWlhoMExtbHVjSFYwYzFzd1hTd2dKMU5wYmljc0lDZHphVzRuS1NrN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdjMmx1YUNBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZENrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFJXeGxiV1Z1ZEhkcGMyVlFjbTluY21GdFNXNW1ieWhqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYU3dnSjFOcGJtZ25MQ0FuYzJsdWFDY3BLVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCemNYSjBJRDBnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBLVG9nZG05cFpDQTlQaUI3WEc0Z0lHTnZiblJsZUhRdVkyOXRjSFYwWlNoamNtVmhkR1ZGYkdWdFpXNTBkMmx6WlZCeWIyZHlZVzFKYm1adktHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExDQW5VM0Z5ZENjc0lDZHpjWEowSnlrcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSFJoYmlBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZENrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFJXeGxiV1Z1ZEhkcGMyVlFjbTluY21GdFNXNW1ieWhqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYU3dnSjFSaGJpY3NJQ2QwWVc0bktTazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnZEdGdWFFVjRjSEpsYzNOcGIyNGdQU0FvWVRvZ2MzUnlhVzVuS1NBOVBpQmdjMmxuYmlna2UyRjlLU0FxSUNneElDMGdaWGh3S0MweUlDb2dZV0p6S0NSN1lYMHBLU2tnTHlBb01TQXJJR1Y0Y0NndE1pQXFJR0ZpY3lna2UyRjlLU2twWUR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUhSaGJtZ2dQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXBPaUIyYjJsa0lEMCtJSHRjYmlBZ0x5OGdWRTlFVHpvZ2NtVjJhWE5wZENCaFpuUmxjaUJvZEhSd2N6b3ZMMmRwZEdoMVlpNWpiMjB2WjNCMWQyVmlMMmR3ZFhkbFlpOXBjM04xWlhNdk5EUTFPQ0JwY3lCeVpYTnZiSFpsWkZ4dUlDQmpiMjUwWlhoMExtTnZiWEIxZEdVb1kzSmxZWFJsUld4bGJXVnVkSGRwYzJWUWNtOW5jbUZ0U1c1bWJ5aGpiMjUwWlhoMExtbHVjSFYwYzFzd1hTd2dKMVJoYm1nbkxDQjBZVzVvUlhod2NtVnpjMmx2YmlrcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1poYzNSSFpXeDFTVzF3YkNBOUlDaDJZWEpVZVhCbElEMGdKMll6TWljcElEMCtJR0JjYm1OdmJuTjBJR1poYzNSZloyVnNkVjloT2lBa2UzWmhjbFI1Y0dWOUlEMGdNQzQxTzF4dVkyOXVjM1FnWm1GemRGOW5aV3gxWDJJNklDUjdkbUZ5Vkhsd1pYMGdQU0F3TGpjNU56ZzRORFUyTURnd01qZzJOVFE3WEc1amIyNXpkQ0JtWVhOMFgyZGxiSFZmWXpvZ0pIdDJZWEpVZVhCbGZTQTlJREF1TURNMU5qYzNOREE0TVRNMk16QXdNVEkxTzF4dVhHNW1iaUIwWVc1b1gzWW9kam9nZG1Wak5Ed2tlM1poY2xSNWNHVjlQaWtnTFQ0Z2RtVmpORHdrZTNaaGNsUjVjR1Y5UGlCN1hHNGdJSEpsZEhWeWJpQWtlM1JoYm1oRmVIQnlaWE56YVc5dUtDZDJKeWw5TzF4dWZWeHVZRHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1poYzNSSFpXeDFSWGh3Y21WemMybHZiaUE5SUNoNE9pQnpkSEpwYm1jcElEMCtYRzRnSUNBZ1lDaG1ZWE4wWDJkbGJIVmZZU0FySUdaaGMzUmZaMlZzZFY5aElDb2dkR0Z1YUY5MktDUjdlSDBnS2lBb1ptRnpkRjluWld4MVgyTWdLaUFrZTNoOUlDb2dKSHQ0ZlNBcklHWmhjM1JmWjJWc2RWOWlLU2twSUNvZ0pIdDRmV0E3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JtWVhOMFIyVnNkU0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ2s2SUhadmFXUWdQVDRnZTF4dUlDQmpiMjV6ZENCa1lYUmhWSGx3WlNBOUlIUmxibk52Y2xSNWNHVlViMWR6WjJ4V1lXeDFaVlI1Y0dVb1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVcE8xeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFJXeGxiV1Z1ZEhkcGMyVlFjbTluY21GdFNXNW1ieWhjYmlBZ0lDQWdJR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMQ0FuUm1GemRFZGxiSFVuTENCbVlYTjBSMlZzZFVWNGNISmxjM05wYjI0c0lHWmhjM1JIWld4MVNXMXdiQ2hrWVhSaFZIbHdaU2tzSUhWdVpHVm1hVzVsWkN4Y2JpQWdJQ0FnSUdOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsS1NrN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdkR2h5WlhOb2IyeGtaV1JTWld4MUlEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJCYkhCb1lVRjBkSEpwWW5WMFpYTXBPaUJ1ZFcxaVpYSWdQVDRnZTF4dUlDQmpiMjV6ZENCa1lYUmhWSGx3WlNBOUlIUmxibk52Y2xSNWNHVlViMWR6WjJ4V1lXeDFaVlI1Y0dVb1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVcE8xeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFJXeGxiV1Z1ZEhkcGMyVlFjbTluY21GdFNXNW1ieWhjYmlBZ0lDQWdJR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMQ0FuVkdoeVpYTm9iMnhrWldSU1pXeDFKeXdnWVNBOVBpQmdjMlZzWldOMEtIWmxZelE4Skh0a1lYUmhWSGx3WlgwK0tEQXVNQ2tzSUNSN1lYMHNJQ1I3WVgwZ1BpQjBhSEpsYzJodmJHUmxaRjl5Wld4MVgyRnNjR2hoWHlsZ0xGeHVJQ0FnSUNBZ1lHTnZibk4wSUhSb2NtVnphRzlzWkdWa1gzSmxiSFZmWVd4d2FHRmZJRDBnZG1Wak5Ed2tlMlJoZEdGVWVYQmxmVDRvSkh0aGRIUnlhV0oxZEdWekxtRnNjR2hoZlNrN1lDd2dZWFIwY21saWRYUmxjeTVqWVdOb1pVdGxlU2twTzF4dUlDQnlaWFIxY200Z01EdGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JzYjJjZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRcE9pQjJiMmxrSUQwK0lIdGNiaUFnWTI5dWRHVjRkQzVqYjIxd2RYUmxLR055WldGMFpVVnNaVzFsYm5SM2FYTmxVSEp2WjNKaGJVbHVabThvWTI5dWRHVjRkQzVwYm5CMWRITmJNRjBzSUNkTWIyY25MQ0FuYkc5bkp5a3BPMXh1ZlR0Y2JpSXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJSHRVWlc1emIzSldhV1YzZlNCbWNtOXRJQ2N1TGk4dUxpOTBaVzV6YjNJdGRtbGxkeWM3WEc1cGJYQnZjblFnZTFOb1lYQmxWWFJwYkgwZ1puSnZiU0FuTGk0dkxpNHZkWFJwYkNjN1hHNXBiWEJ2Y25RZ2UwTnZiWEIxZEdWRGIyNTBaWGgwTENCUWNtOW5jbUZ0U1c1bWIzMGdabkp2YlNBbkxpNHZkSGx3WlhNbk8xeHVYRzVwYlhCdmNuUWdlMmx1Y0hWMFZtRnlhV0ZpYkdVc0lHOTFkSEIxZEZaaGNtbGhZbXhsTENCVGFHRmtaWEpJWld4d1pYSXNJSFJsYm5OdmNsUjVjR1ZVYjFkeloyeFRkRzl5WVdkbFZIbHdaWDBnWm5KdmJTQW5MaTlqYjIxdGIyNG5PMXh1YVcxd2IzSjBJSHRsY21aSmJYQnNmU0JtY205dElDY3VMM1Z1WVhKNUxXOXdKenRjYmx4dVkyOXVjM1FnZG1Gc2FXUmhkR1ZKYm5CMWRITWdQU0FvYVc1d2RYUnpPaUJ5WldGa2IyNXNlU0JVWlc1emIzSldhV1YzVzEwcE9pQjJiMmxrSUQwK0lIdGNiaUFnYVdZZ0tHbHVjSFYwYzFzd1hTNWthVzF6TG14bGJtZDBhQ0FoUFQwZ015a2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmFXNXdkWFFnYzJodmRXeGtJR2hoZG1VZ015QmthVzFsYm5OcGIyNXpKeWs3WEc0Z0lIMWNibHh1SUNCcFppQW9JVnN5TlRZd0xDQTFNVEl3TENBeE1ESTBNRjB1YVc1amJIVmtaWE1vYVc1d2RYUnpXekJkTG1ScGJYTmJNbDBwS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RvYVdSa1pXNGdjM1JoZEdVZ2MyaHZkV3hrSUdKbElESTFOakFzSURVeE1qQWdiM0lnTVRBeU5EQW5LVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBibkIxZEhOYk1WMHVaR2x0Y3k1c1pXNW5kR2dnSVQwOUlERXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oySnBZWE1nYVhNZ1pYaHdaV04wWldRZ2RHOGdhR0YyWlNBeElHUnBiV1Z1YzJsdmJuTW5LVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBibkIxZEhOYk1GMHVaR2x0YzFzeVhTQWhQVDBnYVc1d2RYUnpXekZkTG1ScGJYTmJNRjBwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMnhoYzNRZ1pHbHRaVzV6YVc5dUlHOW1JR2x1Y0hWMElHRnVaQ0JpYVdGeklHRnlaU0J1YjNRZ2RHaGxJSE5oYldVbktUdGNiaUFnZlZ4dWZUdGNibHh1WTI5dWMzUWdZM0psWVhSbFFtbGhjMU53YkdsMFIyVnNkVkJ5YjJkeVlXMUpibVp2SUQwZ0tHbHVjSFYwY3pvZ2NtVmhaRzl1YkhrZ1ZHVnVjMjl5Vm1sbGQxdGRLVG9nVUhKdlozSmhiVWx1Wm04Z1BUNGdlMXh1SUNCamIyNXpkQ0J2ZFhSd2RYUlRhR0Z3WlNBOUlHbHVjSFYwYzFzd1hTNWthVzF6TG5Oc2FXTmxLQ2s3WEc0Z0lHOTFkSEIxZEZOb1lYQmxXekpkSUQwZ2IzVjBjSFYwVTJoaGNHVmJNbDBnTHlBeU8xeHVYRzRnSUdOdmJuTjBJR2x1Y0hWMElEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnbmFXNXdkWFFuTENCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzd1hTNWthVzF6TENBMEtUdGNiaUFnWTI5dWMzUWdZbWxoY3lBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjJKcFlYTW5MQ0JwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1VzSUZ0cGJuQjFkSE5iTUYwdVpHbHRjMXN5WFYwc0lEUXBPMXh1SUNCamIyNXpkQ0J2ZFhSd2RYUWdQU0J2ZFhSd2RYUldZWEpwWVdKc1pTZ25iM1YwY0hWMEp5d2dhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxMQ0J2ZFhSd2RYUlRhR0Z3WlN3Z05DazdYRzVjYmlBZ1kyOXVjM1FnYjNWMGNIVjBVMmw2WlNBOUlGTm9ZWEJsVlhScGJDNXphWHBsS0c5MWRIQjFkRk5vWVhCbEtTQXZJRFE3WEc0Z0lHTnZibk4wSUdSaGRHRlVlWEJsSUQwZ2RHVnVjMjl5Vkhsd1pWUnZWM05uYkZOMGIzSmhaMlZVZVhCbEtHbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pTazdYRzVjYmlBZ1kyOXVjM1FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxJRDBnS0hOb1lXUmxja2hsYkhCbGNqb2dVMmhoWkdWeVNHVnNjR1Z5S1NBOVBpQmdYRzRnSUdOdmJuTjBJRTFmVTFGU1ZESWdQU0J6Y1hKMEtESXVNQ2s3WEc0Z0lHTnZibk4wSUdoaGJHWkRhR0Z1Ym1Wc2N5QTlJQ1I3YVc1d2RYUnpXekJkTG1ScGJYTmJNbDBnTHlBMElDOGdNbjExTzF4dVhHNGdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxtUmxZMnhoY21WV1lYSnBZV0pzWlhNb2FXNXdkWFFzSUdKcFlYTXNJRzkxZEhCMWRDbDlYRzVjYmlBZ0pIdGxjbVpKYlhCc0tHUmhkR0ZVZVhCbEtYMWNibHh1SUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV0WVdsdVUzUmhjblFvS1gxY2JpQWdJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNW5kV0Z5WkVGbllXbHVjM1JQZFhSUFprSnZkVzVrYzFkdmNtdG5jbTkxY0ZOcGVtVnpLRzkxZEhCMWRGTnBlbVVwZlZ4dUlDQWdJR3hsZENCaWFXRnpTV1I0SUQwZ1oyeHZZbUZzWDJsa2VDQWxJR2hoYkdaRGFHRnVibVZzY3p0Y2JpQWdJQ0JzWlhRZ1ltRjBZMmhKYm1SbGVDQTlJR2RzYjJKaGJGOXBaSGdnTHlCb1lXeG1RMmhoYm01bGJITTdYRzRnSUNBZ2JHVjBJR2x1Y0hWMFQyWm1jMlYwSUQwZ1ltbGhjMGxrZUNBcklHSmhkR05vU1c1a1pYZ2dLaUJvWVd4bVEyaGhibTVsYkhNZ0tpQXlPMXh1SUNBZ0lHeGxkQ0IyWVd4MVpVeGxablFnUFNCcGJuQjFkRnRwYm5CMWRFOW1abk5sZEYwZ0t5QmlhV0Z6VzJKcFlYTkpaSGhkTzF4dUlDQWdJR3hsZENCMllXeDFaVkpwWjJoMElEMGdhVzV3ZFhSYmFXNXdkWFJQWm1aelpYUWdLeUJvWVd4bVEyaGhibTVsYkhOZElDc2dZbWxoYzF0aWFXRnpTV1I0SUNzZ2FHRnNaa05vWVc1dVpXeHpYVHRjYmlBZ0lDQnNaWFFnWjJWc2RWSnBaMmgwSUQwZ2RtRnNkV1ZTYVdkb2RDQXFJREF1TlNBcUlDaGxjbVpmZG1Zek1paDJZV3gxWlZKcFoyaDBJQzhnVFY5VFVWSlVNaWtnS3lBeEtUdGNibHh1SUNBZ0lDUjdiM1YwY0hWMExuTmxkRUo1VDJabWMyVjBLQ2RuYkc5aVlXeGZhV1I0Snl3Z0ozWmhiSFZsVEdWbWRDQXFJR2RsYkhWU2FXZG9kQ2NwZlZ4dUlDQjlZRHRjYmx4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUc1aGJXVTZJQ2RDYVdGelUzQnNhWFJIWld4MUp5eGNiaUFnSUNCblpYUlNkVzVFWVhSaE9pQW9LU0E5UGlBb2UxeHVJQ0FnSUNBZ2IzVjBjSFYwY3pvZ1czdGthVzF6T2lCdmRYUndkWFJUYUdGd1pTd2daR0YwWVZSNWNHVTZJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaWDFkTEZ4dUlDQWdJQ0FnWkdsemNHRjBZMmhIY205MWNEb2dlM2c2SUUxaGRHZ3VZMlZwYkNodmRYUndkWFJUYVhwbElDOGdOalFnTHlvZ2QyOXlhMmR5YjNWd0lITnBlbVVnS2k4cGZWeHVJQ0FnSUgwcExGeHVJQ0FnSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU3hjYmlBZ2ZUdGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JpYVdGelUzQnNhWFJIWld4MUlEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMEtUb2dkbTlwWkNBOVBpQjdYRzRnSUhaaGJHbGtZWFJsU1c1d2RYUnpLR052Ym5SbGVIUXVhVzV3ZFhSektUdGNiaUFnWTI5dWRHVjRkQzVqYjIxd2RYUmxLR055WldGMFpVSnBZWE5UY0d4cGRFZGxiSFZRY205bmNtRnRTVzVtYnloamIyNTBaWGgwTG1sdWNIVjBjeWtwTzF4dWZUdGNiaUlzSUNJdkx5QkRiM0I1Y21sbmFIUWdLR01wSUUxcFkzSnZjMjltZENCRGIzSndiM0poZEdsdmJpNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmk4dklFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQk5TVlFnVEdsalpXNXpaUzVjYmx4dWFXMXdiM0owSUh0RVlYUmhWSGx3WlgwZ1puSnZiU0FuTGk0dkxpNHZMaTR2ZDJGemJTMWpiMjF0YjI0bk8xeHVhVzF3YjNKMElIdFVaVzV6YjNKV2FXVjNmU0JtY205dElDY3VMaTh1TGk5MFpXNXpiM0l0ZG1sbGR5YzdYRzVwYlhCdmNuUWdlMEp5YjJGa1kyRnpkRlYwYVd3c0lGTm9ZWEJsVlhScGJIMGdabkp2YlNBbkxpNHZMaTR2ZFhScGJDYzdYRzVwYlhCdmNuUWdlME52YlhCMWRHVkRiMjUwWlhoMExDQlFjbTluY21GdFNXNW1iMzBnWm5KdmJTQW5MaTR2ZEhsd1pYTW5PMXh1WEc1cGJYQnZjblFnZTJOeVpXRjBaVlJsYm5OdmNsTm9ZWEJsVm1GeWFXRmliR1Z6TENCcGJuQjFkRlpoY21saFlteGxMQ0J2ZFhSd2RYUldZWEpwWVdKc1pTd2dVMmhoWkdWeVNHVnNjR1Z5ZlNCbWNtOXRJQ2N1TDJOdmJXMXZiaWM3WEc1Y2JuUjVjR1VnUW5WcGJIUnBia1oxYm1OMGFXOXVUbUZ0WlNBOUlITjBjbWx1Wnp0Y2JuUjVjR1VnUW1sdVlYSjVRM1Z6ZEc5dFJYaHdjbVZ6YzJsdmJpQTlJQ2hsZUhCeVpYTnphVzl1UVRvZ2MzUnlhVzVuTENCbGVIQnlaWE56YVc5dVFqb2djM1J5YVc1bktTQTlQaUJ6ZEhKcGJtYzdYRzUwZVhCbElFSnBibUZ5ZVVaMWJtTjBhVzl1UTJGc2JDQTlJRUoxYVd4MGFXNUdkVzVqZEdsdmJrNWhiV1Y4UW1sdVlYSjVRM1Z6ZEc5dFJYaHdjbVZ6YzJsdmJueDdYRzRnSUhOallXeGhjam9nUW1sdVlYSjVRM1Z6ZEc5dFJYaHdjbVZ6YzJsdmJqdGNiaUFnZG1WamRHOXlPaUJDYVc1aGNubERkWE4wYjIxRmVIQnlaWE56YVc5dU8xeHVmVHRjYmx4dVkyOXVjM1FnWTNKbFlYUmxRbWx1WVhKNVQzQlFjbTluY21GdFUyaGhaR1Z5SUQxY2JpQWdJQ0FvYzJoaFpHVnlTR1ZzY0dWeU9pQlRhR0ZrWlhKSVpXeHdaWElzSUdScGJYTkJPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnWkdsdGMwSTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0JrYVcxelQzVjBjSFYwT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN4Y2JpQWdJQ0FnZG1WamRHOXlhWHBsT2lCaWIyOXNaV0Z1TENCa2IwSnliMkZrWTJGemREb2dZbTl2YkdWaGJpd2djMmhoY21Wa1JHbHRaVzV6YVc5dVJHbDJhWE5wWW14bFFuazBPaUJpYjI5c1pXRnVMQ0JtZFc1alEyRnNiRG9nUW1sdVlYSjVSblZ1WTNScGIyNURZV3hzTEZ4dUlDQWdJQ0IwZVhCbFFUb2diblZ0WW1WeUxDQjBlWEJsUWpvZ2JuVnRZbVZ5TENCMGVYQmxUM1YwY0hWME9pQnVkVzFpWlhJc0lHRmtaR2wwYVc5dVlXeEpiWEJzWlcxbGJuUmhkR2x2Ymo4NklITjBjbWx1WnlrZ1BUNGdlMXh1SUNBZ0lDQWdiR1YwSUdWNGNISmxjM05wYjI1VFkyRnNZWEk2SUVKcGJtRnllVU4xYzNSdmJVVjRjSEpsYzNOcGIyNDdYRzRnSUNBZ0lDQnNaWFFnWlhod2NtVnpjMmx2YmxabFkzUnZjam9nUW1sdVlYSjVRM1Z6ZEc5dFJYaHdjbVZ6YzJsdmJqdGNiaUFnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdablZ1WTBOaGJHd2dQVDA5SUNkemRISnBibWNuS1NCN1hHNGdJQ0FnSUNBZ0lHVjRjSEpsYzNOcGIyNVRZMkZzWVhJZ1BTQmxlSEJ5WlhOemFXOXVWbVZqZEc5eUlEMGdLR0VzSUdJcElEMCtJR0FrZTJaMWJtTkRZV3hzZlNnb0pIdGhmU2tzS0NSN1luMHBLV0E3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJtZFc1alEyRnNiQ0E5UFQwZ0oyWjFibU4wYVc5dUp5a2dlMXh1SUNBZ0lDQWdJQ0JsZUhCeVpYTnphVzl1VTJOaGJHRnlJRDBnWlhod2NtVnpjMmx2YmxabFkzUnZjaUE5SUdaMWJtTkRZV3hzTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnWlhod2NtVnpjMmx2YmxOallXeGhjaUE5SUdaMWJtTkRZV3hzTG5OallXeGhjanRjYmlBZ0lDQWdJQ0FnWlhod2NtVnpjMmx2YmxabFkzUnZjaUE5SUdaMWJtTkRZV3hzTG5abFkzUnZjanRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMElEMGdiM1YwY0hWMFZtRnlhV0ZpYkdVb0oyOTFkSEIxZEVSaGRHRW5MQ0IwZVhCbFQzVjBjSFYwTENCa2FXMXpUM1YwY0hWMExteGxibWQwYUN3Z05DazdYRzRnSUNBZ0lDQmpiMjV6ZENCaElEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnbllVUmhkR0VuTENCMGVYQmxRU3dnWkdsdGMwRXViR1Z1WjNSb0xDQTBLVHRjYmlBZ0lDQWdJR052Ym5OMElHSWdQU0JwYm5CMWRGWmhjbWxoWW14bEtDZGlSR0YwWVNjc0lIUjVjR1ZDTENCa2FXMXpRaTVzWlc1bmRHZ3NJRFFwTzF4dVhHNGdJQ0FnSUNCc1pYUWdZWE56YVdkdWJXVnVkRG9nYzNSeWFXNW5PMXh1SUNBZ0lDQWdhV1lnS0habFkzUnZjbWw2WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWkc5Q2NtOWhaR05oYzNRcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnBjMEZQYm1WRmJHVnRaVzUwSUQwZ1UyaGhjR1ZWZEdsc0xuTnBlbVVvWkdsdGMwRXBJRDA5UFNBeE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHbHpRazl1WlVWc1pXMWxiblFnUFNCVGFHRndaVlYwYVd3dWMybDZaU2hrYVcxelFpa2dQVDA5SURFN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1lVeGhjM1JFYVcxRWFYWnBjMmxpYkdWQ2VUUWdQU0JrYVcxelFTNXNaVzVuZEdnZ1BpQXdJQ1ltSUdScGJYTkJXMlJwYlhOQkxteGxibWQwYUNBdElERmRJQ1VnTkNBOVBUMGdNRHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JpVEdGemRFUnBiVVJwZG1semFXSnNaVUo1TkNBOUlHUnBiWE5DTG14bGJtZDBhQ0ErSURBZ0ppWWdaR2x0YzBKYlpHbHRjMEl1YkdWdVozUm9JQzBnTVYwZ0pTQTBJRDA5UFNBd08xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNocGMwRlBibVZGYkdWdFpXNTBJSHg4SUdselFrOXVaVVZzWlcxbGJuUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRnpjMmxuYm0xbGJuUWdQU0J2ZFhSd2RYUXVjMlYwUW5sUFptWnpaWFFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSjJkc2IySmhiRjlwWkhnbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVjRjSEpsYzNOcGIyNVdaV04wYjNJb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2x6UVU5dVpVVnNaVzFsYm5RZ1B5QmdKSHRoTG5SNWNHVXVkbUZzZFdWOUtDUjdZUzVuWlhSQ2VVOW1abk5sZENnbk1DY3BmUzU0S1dBZ09pQmhMbWRsZEVKNVQyWm1jMlYwS0NkbmJHOWlZV3hmYVdSNEp5a3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdselFrOXVaVVZzWlcxbGJuUWdQeUJnSkh0aUxuUjVjR1V1ZG1Gc2RXVjlLQ1I3WWk1blpYUkNlVTltWm5ObGRDZ25NQ2NwZlM1NEtXQWdPaUJpTG1kbGRFSjVUMlptYzJWMEtDZG5iRzlpWVd4ZmFXUjRKeWtwS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWVhOemFXZHViV1Z1ZENBOUlHQmNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnZkWFJ3ZFhSSmJtUnBZMlZ6SUQwZ0pIdHZkWFJ3ZFhRdWIyWm1jMlYwVkc5SmJtUnBZMlZ6S0NkbmJHOWlZV3hmYVdSNElDb2dOSFVuS1gwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2IyWm1jMlYwUVNBOUlDUjdZUzVpY205aFpHTmhjM1JsWkVsdVpHbGpaWE5VYjA5bVpuTmxkQ2duYjNWMGNIVjBTVzVrYVdObGN5Y3NJRzkxZEhCMWRDbDlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJRzltWm5ObGRFSWdQU0FrZTJJdVluSnZZV1JqWVhOMFpXUkpibVJwWTJWelZHOVBabVp6WlhRb0oyOTFkSEIxZEVsdVpHbGpaWE1uTENCdmRYUndkWFFwZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ1I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjNWMGNIVjBMbk5sZEVKNVQyWm1jMlYwS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5aMnh2WW1Gc1gybGtlQ2NzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVjRjSEpsYzNOcGIyNVdaV04wYjNJb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemFHRnlaV1JFYVcxbGJuTnBiMjVFYVhacGMybGliR1ZDZVRRZ2ZId2dZVXhoYzNSRWFXMUVhWFpwYzJsaWJHVkNlVFFnUDF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHRXVaMlYwUW5sUFptWnpaWFFvSjI5bVpuTmxkRUVnTHlBMGRTY3BJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCZ0pIdGhMblI1Y0dVdWRtRnNkV1Y5S0NSN1lTNW5aWFJDZVU5bVpuTmxkQ2duYjJabWMyVjBRU0F2SURSMUp5bDlXMjltWm5ObGRFRWdKU0EwZFYwcFlDeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITm9ZWEpsWkVScGJXVnVjMmx2YmtScGRtbHphV0pzWlVKNU5DQjhmQ0JpVEdGemRFUnBiVVJwZG1semFXSnNaVUo1TkNBL1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZaTVuWlhSQ2VVOW1abk5sZENnbmIyWm1jMlYwUWlBdklEUjFKeWtnT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHQWtlMkl1ZEhsd1pTNTJZV3gxWlgwb0pIdGlMbWRsZEVKNVQyWm1jMlYwS0NkdlptWnpaWFJDSUM4Z05IVW5LWDFiYjJabWMyVjBRaUFsSURSMVhTbGdLU2w5WEc0Z0lDQWdJQ0FnSUNBZ1lEdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lYTnphV2R1YldWdWRDQTlJRzkxZEhCMWRDNXpaWFJDZVU5bVpuTmxkQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdKMmRzYjJKaGJGOXBaSGduTENCbGVIQnlaWE56YVc5dVZtVmpkRzl5S0dFdVoyVjBRbmxQWm1aelpYUW9KMmRzYjJKaGJGOXBaSGduS1N3Z1lpNW5aWFJDZVU5bVpuTmxkQ2duWjJ4dlltRnNYMmxrZUNjcEtTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaFpHOUNjbTloWkdOaGMzUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjI1dklHNWxZMlZ6YzJGeWVTQjBieUIxYzJVZ2MyTmhiR0Z5SUdsdGNHeGxiV1Z1ZEdGMGFXOXVJR1p2Y2lCbGJHVnRaVzUwTFhkcGMyVWdZbWx1WVhKNUlHOXdJR2x0Y0d4bGJXVnVkR0YwYVc5dUxpY3BPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzJsdVoyeGxRWE56YVdkdWJXVnVkQ0E5SUNoeVpYTlRkSEk2SUhOMGNtbHVaeXdnZURvZ2JuVnRZbVZ5TENCMGVYQmxRMkZ6ZENBOUlDY25LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1pYaHdjbVZ6YzJsdmJrRWdQU0JnWVVSaGRHRmJhVzVrWlhoQkpIdDRmVjFiWTI5dGNHOXVaVzUwUVNSN2VIMWRZRHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JsZUhCeVpYTnphVzl1UWlBOUlHQmlSR0YwWVZ0cGJtUmxlRUlrZTNoOVhWdGpiMjF3YjI1bGJuUkNKSHQ0ZlYxZ08xeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdiM1YwY0hWMFNXNWthV05sY3lSN2VIMGdQU0FrZTI5MWRIQjFkQzV2Wm1aelpYUlViMGx1WkdsalpYTW9ZR2RzYjJKaGJGOXBaSGdnS2lBMGRTQXJJQ1I3ZUgxMVlDbDlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJRzltWm5ObGRFRWtlM2g5SUQwZ0pIdGhMbUp5YjJGa1kyRnpkR1ZrU1c1a2FXTmxjMVJ2VDJabWMyVjBLR0J2ZFhSd2RYUkpibVJwWTJWekpIdDRmV0FzSUc5MWRIQjFkQ2w5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUc5bVpuTmxkRUlrZTNoOUlEMGdKSHRpTG1KeWIyRmtZMkZ6ZEdWa1NXNWthV05sYzFSdlQyWm1jMlYwS0dCdmRYUndkWFJKYm1ScFkyVnpKSHQ0ZldBc0lHOTFkSEIxZENsOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHbHVaR1Y0UVNSN2VIMGdQU0J2Wm1aelpYUkJKSHQ0ZlNBdklEUjFPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2x1WkdWNFFpUjdlSDBnUFNCdlptWnpaWFJDSkh0NGZTQXZJRFIxTzF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdOdmJYQnZibVZ1ZEVFa2UzaDlJRDBnYjJabWMyVjBRU1I3ZUgwZ0pTQTBkVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0JqYjIxd2IyNWxiblJDSkh0NGZTQTlJRzltWm5ObGRFSWtlM2g5SUNVZ05IVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBa2UzSmxjMU4wY24xYkpIdDRmVjBnUFNBa2UzUjVjR1ZEWVhOMGZTZ2tlMlY0Y0hKbGMzTnBiMjVUWTJGc1lYSW9aWGh3Y21WemMybHZia0VzSUdWNGNISmxjM05wYjI1Q0tYMHBPMXh1SUNBZ0lDQWdJQ0FnSUdBN1hHNGdJQ0FnSUNBZ0lIMDdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxUM1YwY0hWMElEMDlQU0JFWVhSaFZIbHdaUzVpYjI5c0tTQjdYRzRnSUNBZ0lDQWdJQ0FnWVhOemFXZHViV1Z1ZENBOUlHQmNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQmtZWFJoSUQwZ2RtVmpORHgxTXpJK0tEQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0pIdHphVzVuYkdWQmMzTnBaMjV0Wlc1MEtDZGtZWFJoSnl3Z01Dd2dKM1V6TWljcGZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSkh0emFXNW5iR1ZCYzNOcFoyNXRaVzUwS0Nka1lYUmhKeXdnTVN3Z0ozVXpNaWNwZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdKSHR6YVc1bmJHVkJjM05wWjI1dFpXNTBLQ2RrWVhSaEp5d2dNaXdnSjNVek1pY3BmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0pIdHphVzVuYkdWQmMzTnBaMjV0Wlc1MEtDZGtZWFJoSnl3Z015d2dKM1V6TWljcGZWeHVJQ0FnSUNBZ0lDQWdJQ0FnYjNWMGNIVjBSR0YwWVZ0bmJHOWlZV3hmYVdSNFhTQTlJR1J2ZENoMlpXTTBQSFV6TWo0b01IZ3hMQ0F3ZURFd01Dd2dNSGd4TURBd01Dd2dNSGd4TURBd01EQXdLU3dnZG1Wak5EeDFNekkrS0dSaGRHRXBLVHRnTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lHRnpjMmxuYm0xbGJuUWdQU0JnWEc0Z0lDQWdJQ0FnSUNBZ0lDQWtlM05wYm1kc1pVRnpjMmxuYm0xbGJuUW9KMjkxZEhCMWRFUmhkR0ZiWjJ4dlltRnNYMmxrZUYwbkxDQXdLWDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDUjdjMmx1WjJ4bFFYTnphV2R1YldWdWRDZ25iM1YwY0hWMFJHRjBZVnRuYkc5aVlXeGZhV1I0WFNjc0lERXBmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0pIdHphVzVuYkdWQmMzTnBaMjV0Wlc1MEtDZHZkWFJ3ZFhSRVlYUmhXMmRzYjJKaGJGOXBaSGhkSnl3Z01pbDlYRzRnSUNBZ0lDQWdJQ0FnSUNBa2UzTnBibWRzWlVGemMybG5ibTFsYm5Rb0oyOTFkSEIxZEVSaGRHRmJaMnh2WW1Gc1gybGtlRjBuTENBektYMWNiaUFnSUNBZ0lDQWdJQ0JnTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lISmxkSFZ5YmlCZ1hHNGdJQ0FnSUNBZ0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG5KbFoybHpkR1Z5Vlc1cFptOXliU2duZG1WalgzTnBlbVVuTENBbmRUTXlKeWt1WkdWamJHRnlaVlpoY21saFlteGxjeWhoTENCaUxDQnZkWFJ3ZFhRcGZWeHVYRzRnSUNBZ0lDQWdJQ1I3WVdSa2FYUnBiMjVoYkVsdGNHeGxiV1Z1ZEdGMGFXOXVJRDgvSUNjbmZWeHVYRzRnSUNBZ0lDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxtMWhhVzVUZEdGeWRDZ3BmVnh1SUNBZ0lDQWdJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNW5kV0Z5WkVGbllXbHVjM1JQZFhSUFprSnZkVzVrYzFkdmNtdG5jbTkxY0ZOcGVtVnpLQ2QxYm1sbWIzSnRjeTUyWldOZmMybDZaU2NwZlZ4dUlDQWdJQ0FnSUNBa2UyRnpjMmxuYm0xbGJuUjlYRzRnSUNBZ0lDQjlZRHRjYmlBZ0lDQjlPMXh1WEc1amIyNXpkQ0JqY21WaGRHVkNhVzVoY25sUGNGQnliMmR5WVcxSmJtWnZJRDFjYmlBZ0lDQW9ibUZ0WlRvZ2MzUnlhVzVuTENCallXTm9aVXRsZVRvZ2MzUnlhVzVuTENCaE9pQlVaVzV6YjNKV2FXVjNMQ0JpT2lCVVpXNXpiM0pXYVdWM0xDQm1kVzVqUTJGc2JEb2dRbWx1WVhKNVJuVnVZM1JwYjI1RFlXeHNMRnh1SUNBZ0lDQmhaR1JwZEdsdmJtRnNTVzF3YkdWdFpXNTBZWFJwYjI0L09pQnpkSEpwYm1jc0lHOTFkSEIxZEVSaGRHRlVlWEJsT2lCdWRXMWlaWElnUFNCaExtUmhkR0ZVZVhCbEtUb2dVSEp2WjNKaGJVbHVabThnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYVhOQ2NtOWhaR05oYzNRZ1BTQWhVMmhoY0dWVmRHbHNMbUZ5WlVWeGRXRnNLR0V1WkdsdGN5d2dZaTVrYVcxektUdGNiaUFnSUNBZ0lHeGxkQ0J2ZFhSd2RYUlRhR0Z3WlNBOUlHRXVaR2x0Y3p0Y2JpQWdJQ0FnSUd4bGRDQnZkWFJ3ZFhSVGFYcGxJRDBnVTJoaGNHVlZkR2xzTG5OcGVtVW9ZUzVrYVcxektUdGNibHh1SUNBZ0lDQWdiR1YwSUhabFkzUnZjbWw2WlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnYkdWMElITm9ZWEpsWkVScGJXVnVjMmx2YmtScGRtbHphV0pzWlVKNU5DQTlJR1poYkhObE8xeHVYRzRnSUNBZ0lDQXZMeUJVVDBSUE9pQmtaV0ZzSUhkcGRHZ2dlbVZ5YnkxemFYcGxaQ0IwWlc1emIzSnpJQ2hsWnk0Z1pHbHRjejFiTVN3d1hTbGNiaUFnSUNBZ0lHTnZibk4wSUdOaFkyaGxTMlY1UVhWNElEMGdXMmx6UW5KdllXUmpZWE4wWFR0Y2JpQWdJQ0FnSUdsbUlDaHBjMEp5YjJGa1kyRnpkQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JqWVd4amRXeGhkR1ZrVTJoaGNHVWdQU0JDY205aFpHTmhjM1JWZEdsc0xtTmhiR05UYUdGd1pTaGhMbVJwYlhNc0lHSXVaR2x0Y3l3Z1ptRnNjMlVwTzF4dUlDQWdJQ0FnSUNCcFppQW9JV05oYkdOMWJHRjBaV1JUYUdGd1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduUTJGdVhGd25kQ0J3WlhKbWIzSnRJR0pwYm1GeWVTQnZjQ0J2YmlCMGFHVWdaMmwyWlc0Z2RHVnVjMjl5Y3ljcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJRzkxZEhCMWRGTm9ZWEJsSUQwZ1kyRnNZM1ZzWVhSbFpGTm9ZWEJsTzF4dUlDQWdJQ0FnSUNCdmRYUndkWFJUYVhwbElEMGdVMmhoY0dWVmRHbHNMbk5wZW1Vb2IzVjBjSFYwVTJoaGNHVXBPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBjMEZQYm1WRmJHVnRaVzUwSUQwZ1UyaGhjR1ZWZEdsc0xuTnBlbVVvWVM1a2FXMXpLU0E5UFQwZ01UdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FYTkNUMjVsUld4bGJXVnVkQ0E5SUZOb1lYQmxWWFJwYkM1emFYcGxLR0l1WkdsdGN5a2dQVDA5SURFN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdGTVlYTjBSR2x0UkdsMmFYTnBZbXhsUW5rMElEMGdZUzVrYVcxekxteGxibWQwYUNBK0lEQWdKaVlnWVM1a2FXMXpXMkV1WkdsdGN5NXNaVzVuZEdnZ0xTQXhYU0FsSURRZ1BUMDlJREE3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0pNWVhOMFJHbHRSR2wyYVhOcFlteGxRbmswSUQwZ1lpNWthVzF6TG14bGJtZDBhQ0ErSURBZ0ppWWdZaTVrYVcxelcySXVaR2x0Y3k1c1pXNW5kR2dnTFNBeFhTQWxJRFFnUFQwOUlEQTdYRzRnSUNBZ0lDQWdJR05oWTJobFMyVjVRWFY0TG5CMWMyZ29hWE5CVDI1bFJXeGxiV1Z1ZENrN1hHNGdJQ0FnSUNBZ0lHTmhZMmhsUzJWNVFYVjRMbkIxYzJnb2FYTkNUMjVsUld4bGJXVnVkQ2s3WEc0Z0lDQWdJQ0FnSUdOaFkyaGxTMlY1UVhWNExuQjFjMmdvWVV4aGMzUkVhVzFFYVhacGMybGliR1ZDZVRRcE8xeHVJQ0FnSUNBZ0lDQmpZV05vWlV0bGVVRjFlQzV3ZFhOb0tHSk1ZWE4wUkdsdFJHbDJhWE5wWW14bFFuazBLVHRjYmlBZ0lDQWdJQ0FnTHk4Z1kyaGxZMnNnZDJobGRHaGxjaUIyWldOMGIzSnBlbVVnWTJGdUlHSmxJR1Z1WVdKc1pXUmNiaUFnSUNBZ0lDQWdiR1YwSUhOb1lYSmxaRVJwYldWdWMybHZiaUE5SURFN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F4T3lCcElEd2diM1YwY0hWMFUyaGhjR1V1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmthVzFCSUQwZ1lTNWthVzF6VzJFdVpHbHRjeTVzWlc1bmRHZ2dMU0JwWFNBL1B5QXhPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1JwYlVJZ1BTQmlMbVJwYlhOYllpNWthVzF6TG14bGJtZDBhQ0F0SUdsZElEOC9JREU3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1JwYlVFZ1BUMDlJR1JwYlVJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhOb1lYSmxaRVJwYldWdWMybHZiaUFxUFNCa2FXMUJPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tITm9ZWEpsWkVScGJXVnVjMmx2YmlBbElEUWdQVDA5SURBcElIdGNiaUFnSUNBZ0lDQWdJQ0J6YUdGeVpXUkVhVzFsYm5OcGIyNUVhWFpwYzJsaWJHVkNlVFFnUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUhabFkzUnZjbWw2WlNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2FYTkJUMjVsUld4bGJXVnVkQ0I4ZkNCcGMwSlBibVZGYkdWdFpXNTBJSHg4SUdGTVlYTjBSR2x0UkdsMmFYTnBZbXhsUW5rMElIeDhJR0pNWVhOMFJHbHRSR2wyYVhOcFlteGxRbmswS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkbVZqZEc5eWFYcGxJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdMeThnWld4bGJXVnVkQzEzYVhObFhHNGdJQ0FnSUNBZ0lIWmxZM1J2Y21sNlpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCallXTm9aVXRsZVVGMWVDNXdkWE5vS0habFkzUnZjbWw2WlNrN1hHNWNiaUFnSUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lHNWhiV1VzWEc0Z0lDQWdJQ0FnSUhOb1lXUmxja05oWTJobE9pQjdYRzRnSUNBZ0lDQWdJQ0FnYUdsdWREb2dZMkZqYUdWTFpYa2dLeUJqWVdOb1pVdGxlVUYxZUM1dFlYQW9LSGdwSUQwK0lIZ3VkRzlUZEhKcGJtY29LU2t1YW05cGJpZ25YeWNwTEZ4dUlDQWdJQ0FnSUNBZ0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWek9pQmJKM0poYm1zbkxDQW5jbUZ1YXlkZExGeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0JuWlhSVGFHRmtaWEpUYjNWeVkyVTZJQ2h6YUdGa1pYSklaV3h3WlhJcElEMCtJR055WldGMFpVSnBibUZ5ZVU5d1VISnZaM0poYlZOb1lXUmxjaWhjYmlBZ0lDQWdJQ0FnSUNBZ0lITm9ZV1JsY2tobGJIQmxjaXdnWVM1a2FXMXpMQ0JpTG1ScGJYTXNJRzkxZEhCMWRGTm9ZWEJsTENCMlpXTjBiM0pwZW1Vc0lHbHpRbkp2WVdSallYTjBMQ0J6YUdGeVpXUkVhVzFsYm5OcGIyNUVhWFpwYzJsaWJHVkNlVFFzSUdaMWJtTkRZV3hzTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZUzVrWVhSaFZIbHdaU3dnWWk1a1lYUmhWSGx3WlN3Z2IzVjBjSFYwUkdGMFlWUjVjR1VzSUdGa1pHbDBhVzl1WVd4SmJYQnNaVzFsYm5SaGRHbHZiaWtzWEc0Z0lDQWdJQ0FnSUdkbGRGSjFia1JoZEdFNklDZ3BJRDArSUNoN1hHNGdJQ0FnSUNBZ0lDQWdiM1YwY0hWMGN6b2dXM3RrYVcxek9pQnZkWFJ3ZFhSVGFHRndaU3dnWkdGMFlWUjVjR1U2SUc5MWRIQjFkRVJoZEdGVWVYQmxmVjBzWEc0Z0lDQWdJQ0FnSUNBZ1pHbHpjR0YwWTJoSGNtOTFjRG9nZTNnNklFMWhkR2d1WTJWcGJDaHZkWFJ3ZFhSVGFYcGxJQzhnTmpRZ0x5b2dkMjl5YTJkeWIzVndJSE5wZW1VZ0tpOGdMeUEwSUM4cUlHTnZiWEJ2Ym1WdWRDQnphWHBsSUNvdktYMHNYRzRnSUNBZ0lDQWdJQ0FnY0hKdlozSmhiVlZ1YVdadmNtMXpPaUJiWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJOWVhSb0xtTmxhV3dvVTJoaGNHVlZkR2xzTG5OcGVtVW9iM1YwY0hWMFUyaGhjR1VwSUM4Z05DbDlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0xpNHVZM0psWVhSbFZHVnVjMjl5VTJoaGNHVldZWEpwWVdKc1pYTW9ZUzVrYVcxekxDQmlMbVJwYlhNc0lHOTFkSEIxZEZOb1lYQmxLVnh1SUNBZ0lDQWdJQ0FnSUYwc1hHNGdJQ0FnSUNBZ0lIMHBMRnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlPMXh1WEc1amIyNXpkQ0J5ZFc1Q2FXNWhjbmxQY0NBOVhHNGdJQ0FnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBMQ0J1WVcxbE9pQnpkSEpwYm1jc0lHWjFibU5EWVd4c09pQkNhVzVoY25sR2RXNWpkR2x2YmtOaGJHd3NJR0ZrWkdsMGFXOXVZV3hKYlhCc1pXMWxiblJoZEdsdmJqODZJSE4wY21sdVp5eGNiaUFnSUNBZ1kyRmphR1ZMWlhrL09pQnpkSEpwYm1jc0lHOTFkSEIxZEVSaGRHRlVlWEJsUHpvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0E5UGlCN1hHNGdJQ0FnSUNCamIyNTBaWGgwTG1OdmJYQjFkR1VvWTNKbFlYUmxRbWx1WVhKNVQzQlFjbTluY21GdFNXNW1ieWhjYmlBZ0lDQWdJQ0FnSUNCdVlXMWxMQ0JqWVdOb1pVdGxlU0EvUHlBbkp5d2dZMjl1ZEdWNGRDNXBibkIxZEhOYk1GMHNJR052Ym5SbGVIUXVhVzV3ZFhSeld6RmRMQ0JtZFc1alEyRnNiQ3dnWVdSa2FYUnBiMjVoYkVsdGNHeGxiV1Z1ZEdGMGFXOXVMRnh1SUNBZ0lDQWdJQ0FnSUc5MWRIQjFkRVJoZEdGVWVYQmxLU2s3WEc0Z0lDQWdmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR0ZrWkNBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZENrNklIWnZhV1FnUFQ0Z2UxeHVJQ0J5ZFc1Q2FXNWhjbmxQY0NoamIyNTBaWGgwTENBblFXUmtKeXdnS0dFc0lHSXBJRDArSUdBa2UyRjlLeVI3WW4xZ0tUdGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JrYVhZZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRcE9pQjJiMmxrSUQwK0lIdGNiaUFnY25WdVFtbHVZWEo1VDNBb1kyOXVkR1Y0ZEN3Z0owUnBkaWNzSUNoaExDQmlLU0E5UGlCZ0pIdGhmUzhrZTJKOVlDazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWlhGMVlXd2dQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXBPaUIyYjJsa0lEMCtJSHRjYmlBZ2NuVnVRbWx1WVhKNVQzQW9YRzRnSUNBZ0lDQmpiMjUwWlhoMExDQW5SWEYxWVd3bkxDQW9lM05qWVd4aGNqb2dLR0VzSUdJcElEMCtJR0IxTXpJb0pIdGhmVDA5Skh0aWZTbGdMQ0IyWldOMGIzSTZJQ2hoTENCaUtTQTlQaUJnZG1Wak5EeDFNekkrS0NSN1lYMDlQU1I3WW4wcFlIMHBMQ0IxYm1SbFptbHVaV1FzWEc0Z0lDQWdJQ0IxYm1SbFptbHVaV1FzSUVSaGRHRlVlWEJsTG1KdmIyd3BPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUcxMWJDQTlJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDazZJSFp2YVdRZ1BUNGdlMXh1SUNCeWRXNUNhVzVoY25sUGNDaGpiMjUwWlhoMExDQW5UWFZzSnl3Z0tHRXNJR0lwSUQwK0lHQWtlMkY5S2lSN1luMWdLVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCd2IzY2dQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXBPaUIyYjJsa0lEMCtJSHRjYmlBZ1kyOXVjM1FnZEhsd1pTQTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb0oybHVjSFYwSnl3Z1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVc0lHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExtUnBiWE1wTG5SNWNHVXVkbUZzZFdVN1hHNGdJR052Ym5OMElISnZkVzVrVTNSeUlEMGdkSGx3WlNBOVBUMGdKMmt6TWljZ1B5QW5jbTkxYm1RbklEb2dKeWM3WEc0Z0lISjFia0pwYm1GeWVVOXdLRnh1SUNBZ0lDQWdZMjl1ZEdWNGRDd2dKMUJ2ZHljc0lDaDdjMk5oYkdGeU9pQW9ZU3dnWWlrZ1BUNGdZSEJ2ZDE5amRYTjBiMjBvSkh0aGZTd2tlMko5S1dBc0lIWmxZM1J2Y2pvZ0tHRXNJR0lwSUQwK0lHQndiM2RmZG1WamRHOXlYMk4xYzNSdmJTZ2tlMkY5TENSN1luMHBZSDBwTEZ4dUlDQWdJQ0FnWUZ4dUlDQWdJR1p1SUhCdmQxOWpkWE4wYjIwb1lTQTZJQ1I3ZEhsd1pYMHNJR0lnT2lBa2UzUjVjR1Y5S1NBdFBpQWtlM1I1Y0dWOUlIdGNiaUFnSUNBZ0lHbG1JQ2hpSUQwOUlDUjdkSGx3Wlgwb01DNHdLU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnSkh0MGVYQmxmU2d4TGpBcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGhJRHdnSkh0MGVYQmxmU2d3TGpBcElDWW1JR1l6TWloaUtTQWhQU0JtYkc5dmNpaG1NeklvWWlrcEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQWtlM1I1Y0dWOUtIQnZkeWhtTXpJb1lTa3NJR1l6TWloaUtTa3BPeUF2THlCT1lVNWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCelpXeGxZM1FvYzJsbmJpaGhLU3dnSkh0MGVYQmxmU2d4TGpBcExDQnliM1Z1WkNobU16SW9ZV0p6S0dJcElDVWdKSHQwZVhCbGZTZ3lMakFwS1NrZ0lUMGdNUzR3S1NBcUlDUjdkSGx3Wlgwb0pIdGNiaUFnSUNBZ0lDQWdJQ0J5YjNWdVpGTjBjbjBvY0c5M0tHWXpNaWhoWW5Nb1lTa3BMQ0JtTXpJb1lpa3BLU2s3WEc0Z0lDQWdmVnh1SUNBZ0lHWnVJSEJ2ZDE5MlpXTjBiM0pmWTNWemRHOXRLR0VnT2lCMlpXTTBQQ1I3ZEhsd1pYMCtMQ0JpSURvZ2RtVmpORHdrZTNSNWNHVjlQaWtnTFQ0Z2RtVmpORHdrZTNSNWNHVjlQaUI3WEc0Z0lDQWdJQ0F2THlCVVQwUlBPaUJwYlhCc1pXMWxiblFnZG1WamRHOXlhWHBsWkNCd2IzZGNiaUFnSUNBZ0lISmxkSFZ5YmlCMlpXTTBQQ1I3ZEhsd1pYMCtLSEJ2ZDE5amRYTjBiMjBvWVM1NExDQmlMbmdwTENCd2IzZGZZM1Z6ZEc5dEtHRXVlU3dnWWk1NUtTd2djRzkzWDJOMWMzUnZiU2hoTG5vc0lHSXVlaWtzSUhCdmQxOWpkWE4wYjIwb1lTNTNMQ0JpTG5jcEtUdGNiaUFnSUNCOVhHNGdJQ0FnSUNCZ0tUdGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J6ZFdJZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRcE9pQjJiMmxrSUQwK0lIdGNiaUFnY25WdVFtbHVZWEo1VDNBb1kyOXVkR1Y0ZEN3Z0oxTjFZaWNzSUNoaExDQmlLU0E5UGlCZ0pIdGhmUzBrZTJKOVlDazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWjNKbFlYUmxjaUE5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ2s2SUhadmFXUWdQVDRnZTF4dUlDQnlkVzVDYVc1aGNubFBjQ2hjYmlBZ0lDQWdJR052Ym5SbGVIUXNJQ2RIY21WaGRHVnlKeXdnS0h0elkyRnNZWEk2SUNoaExDQmlLU0E5UGlCZ2RUTXlLQ1I3WVgwK0pIdGlmU2xnTENCMlpXTjBiM0k2SUNoaExDQmlLU0E5UGlCZ2RtVmpORHgxTXpJK0tDUjdZWDArSkh0aWZTbGdmU2tzSUhWdVpHVm1hVzVsWkN4Y2JpQWdJQ0FnSUhWdVpHVm1hVzVsWkN3Z1JHRjBZVlI1Y0dVdVltOXZiQ2s3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2JHVnpjeUE5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ2s2SUhadmFXUWdQVDRnZTF4dUlDQnlkVzVDYVc1aGNubFBjQ2hjYmlBZ0lDQWdJR052Ym5SbGVIUXNJQ2RNWlhOekp5d2dLSHR6WTJGc1lYSTZJQ2hoTENCaUtTQTlQaUJnZFRNeUtDUjdZWDA4Skh0aWZTbGdMQ0IyWldOMGIzSTZJQ2hoTENCaUtTQTlQaUJnZG1Wak5EeDFNekkrS0NSN1lYMDhKSHRpZlNsZ2ZTa3NJSFZ1WkdWbWFXNWxaQ3hjYmlBZ0lDQWdJSFZ1WkdWbWFXNWxaQ3dnUkdGMFlWUjVjR1V1WW05dmJDazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWjNKbFlYUmxjazl5UlhGMVlXd2dQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXBPaUIyYjJsa0lEMCtJSHRjYmlBZ2NuVnVRbWx1WVhKNVQzQW9YRzRnSUNBZ0lDQmpiMjUwWlhoMExDQW5SM0psWVhSbGNrOXlSWEYxWVd3bkxDQW9lM05qWVd4aGNqb2dLR0VzSUdJcElEMCtJR0IxTXpJb0pIdGhmVDQ5Skh0aWZTbGdMQ0IyWldOMGIzSTZJQ2hoTENCaUtTQTlQaUJnZG1Wak5EeDFNekkrS0NSN1lYMCtQU1I3WW4wcFlIMHBMRnh1SUNBZ0lDQWdkVzVrWldacGJtVmtMQ0IxYm1SbFptbHVaV1FzSUVSaGRHRlVlWEJsTG1KdmIyd3BPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUd4bGMzTlBja1Z4ZFdGc0lEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMEtUb2dkbTlwWkNBOVBpQjdYRzRnSUhKMWJrSnBibUZ5ZVU5d0tGeHVJQ0FnSUNBZ1kyOXVkR1Y0ZEN3Z0oweGxjM05QY2tWeGRXRnNKeXdnS0h0elkyRnNZWEk2SUNoaExDQmlLU0E5UGlCZ2RUTXlLQ1I3WVgwOFBTUjdZbjBwWUN3Z2RtVmpkRzl5T2lBb1lTd2dZaWtnUFQ0Z1lIWmxZelE4ZFRNeVBpZ2tlMkY5UEQwa2UySjlLV0I5S1N4Y2JpQWdJQ0FnSUhWdVpHVm1hVzVsWkN3Z2RXNWtaV1pwYm1Wa0xDQkVZWFJoVkhsd1pTNWliMjlzS1R0Y2JuMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1JHRjBZVlI1Y0dWOUlHWnliMjBnSnk0dUx5NHVMeTR1TDNkaGMyMHRZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdUVUZZWDBOTVNWQXNJRTFKVGw5RFRFbFFmU0JtY205dElDY3VMaTh1TGk5MWRHbHNKenRjYm1sdGNHOXlkQ0I3VUhKdlozSmhiVlZ1YVdadmNtMTlJR1p5YjIwZ0p5NHVMM1I1Y0dWekp6dGNibHh1YVcxd2IzSjBJSHRWYm1sbWIzSnRjMEZ5Y21GNVZIbHdaWDBnWm5KdmJTQW5MaTlqYjIxdGIyNG5PMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVsdWRHVnlibUZzUVdOMGFYWmhkR2x2YmtGMGRISnBZblYwWlhNZ2UxeHVJQ0J5WldGa2IyNXNlU0JoWTNScGRtRjBhVzl1T2lCemRISnBibWM3WEc0Z0lISmxZV1J2Ym14NUlHTnNhWEJOYVc0L09pQnVkVzFpWlhJN1hHNGdJSEpsWVdSdmJteDVJR05zYVhCTllYZy9PaUJ1ZFcxaVpYSTdYRzRnSUhKbFlXUnZibXg1SUdGc2NHaGhQem9nYm5WdFltVnlPMXh1SUNCeVpXRmtiMjVzZVNCaVpYUmhQem9nYm5WdFltVnlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWjJWMFFXTjBhWFpoZEdsdmJsTnVhWEJ3WlhRZ1BWeHVJQ0FnSUNoaGRIUnlhV0oxZEdWek9pQkpiblJsY201aGJFRmpkR2wyWVhScGIyNUJkSFJ5YVdKMWRHVnpMQ0IyWVd4MVpWUjVjR1U2SUhOMGNtbHVaeXdnWW1GelpWUjVjR1VnUFNBblpqTXlKeWs2SUhOMGNtbHVaeUE5UGlCN1hHNGdJQ0FnSUNCemQybDBZMmdnS0dGMGRISnBZblYwWlhNdVlXTjBhWFpoZEdsdmJpa2dlMXh1SUNBZ0lDQWdJQ0JqWVhObElDZFNaV3gxSnpwY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lIWmhiSFZsSUQwZ2JXRjRLSFpoYkhWbExDQWtlM1poYkhWbFZIbHdaWDBvTUM0d0tTazdZRHRjYmlBZ0lDQWdJQ0FnWTJGelpTQW5VMmxuYlc5cFpDYzZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0IyWVd4MVpTQTlJQ2drZTNaaGJIVmxWSGx3Wlgwb01TNHdLU0F2SUNna2UzWmhiSFZsVkhsd1pYMG9NUzR3S1NBcklHVjRjQ2d0ZG1Gc2RXVXBLU2s3WUR0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0FuUTJ4cGNDYzZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0IyWVd4MVpTQTlJR05zWVcxd0tIWmhiSFZsTENBa2UzWmhiSFZsVkhsd1pYMG9KSHRpWVhObFZIbHdaWDBvZFc1cFptOXliWE11WTJ4cGNGOXRhVzRwS1N3Z0pIdDJZV3gxWlZSNWNHVjlLQ1I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR0poYzJWVWVYQmxmU2gxYm1sbWIzSnRjeTVqYkdsd1gyMWhlQ2twS1R0Z08xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNkSVlYSmtVMmxuYlc5cFpDYzZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0IyWVd4MVpTQTlJRzFoZUNna2UzWmhiSFZsVkhsd1pYMG9NQzR3S1N3Z2JXbHVLQ1I3ZG1Gc2RXVlVlWEJsZlNneExqQXBMQ0FrZTJKaGMyVlVlWEJsZlNoMWJtbG1iM0p0Y3k1aGJIQm9ZU2tnS2lCMllXeDFaU0FySUNSN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdKaGMyVlVlWEJsZlNoMWJtbG1iM0p0Y3k1aVpYUmhLU2twTzJBN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnSjB4bFlXdDVVbVZzZFNjNlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHQjJZV3gxWlNBOUlITmxiR1ZqZENna2UySmhjMlZVZVhCbGZTaDFibWxtYjNKdGN5NWhiSEJvWVNrZ0tpQjJZV3gxWlN3Z2RtRnNkV1VzSUhaaGJIVmxJRDQ5SUNSN2RtRnNkV1ZVZVhCbGZTZ3dMakFwS1R0Z08xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNjbk9seHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5KenRjYmlBZ0lDQWdJQ0FnTHk4Z1ZFOUVUem9nWVdSa2FXNW5JRzkwYUdWeUlHRmpkR2wyWVhScGIyNXpJSFJvWVhRZ1kyRnVJR0psSUdaMWMyVmtMbHh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnVlc1emRYQndiM0owWldRZ1lXTjBhWFpoZEdsdmJpQWtlMkYwZEhKcFluVjBaWE11WVdOMGFYWmhkR2x2Ym4xZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1lYQndaVzVrUVdOMGFYWmhkR2x2YmxWdWFXWnZjbTF6UkdGMFlTQTlYRzRnSUNBZ0tHRjBkSEpwWW5WMFpYTTZJRWx1ZEdWeWJtRnNRV04wYVhaaGRHbHZia0YwZEhKcFluVjBaWE1zSUhCeWIyZHlZVzFWYm1sbWIzSnRPaUJRY205bmNtRnRWVzVwWm05eWJWdGRLU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9ZWFIwY21saWRYUmxjeTVoWTNScGRtRjBhVzl1SUQwOVBTQW5RMnhwY0NjcElIdGNiaUFnSUNBZ0lDQWdjSEp2WjNKaGJWVnVhV1p2Y20wdWNIVnphQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1bWJHOWhkQ3dnWkdGMFlUb2dZWFIwY21saWRYUmxjeTVqYkdsd1RXRjRJWDBzSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzVtYkc5aGRDd2daR0YwWVRvZ1lYUjBjbWxpZFhSbGN5NWpiR2x3VFdsdUlYMHBPMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hoZEhSeWFXSjFkR1Z6TG1GamRHbDJZWFJwYjI0Z1BUMDlJQ2RJWVhKa1UybG5iVzlwWkNjcElIdGNiaUFnSUNBZ0lDQWdjSEp2WjNKaGJWVnVhV1p2Y20wdWNIVnphQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1bWJHOWhkQ3dnWkdGMFlUb2dZWFIwY21saWRYUmxjeTVoYkhCb1lTRjlMQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVabXh2WVhRc0lHUmhkR0U2SUdGMGRISnBZblYwWlhNdVltVjBZU0Y5S1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1lYUjBjbWxpZFhSbGN5NWhZM1JwZG1GMGFXOXVJRDA5UFNBblRHVmhhM2xTWld4MUp5a2dlMXh1SUNBZ0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJTNXdkWE5vS0h0MGVYQmxPaUJFWVhSaFZIbHdaUzVtYkc5aGRDd2daR0YwWVRvZ1lYUjBjbWxpZFhSbGN5NWhiSEJvWVNGOUtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1lYQndaVzVrUVdOMGFYWmhkR2x2YmxWdWFXWnZjbTF6SUQwZ0tHRjBkSEpwWW5WMFpYTTZJRWx1ZEdWeWJtRnNRV04wYVhaaGRHbHZia0YwZEhKcFluVjBaWE1zSUhWdWFXWnZjbTF6T2lCVmJtbG1iM0p0YzBGeWNtRjVWSGx3WlNrZ1BUNGdlMXh1SUNCcFppQW9ZWFIwY21saWRYUmxjeTVoWTNScGRtRjBhVzl1SUQwOVBTQW5RMnhwY0NjcElIdGNiaUFnSUNCMWJtbG1iM0p0Y3k1d2RYTm9LSHR1WVcxbE9pQW5ZMnhwY0Y5dFlYZ25MQ0IwZVhCbE9pQW5aak15SjMwc0lIdHVZVzFsT2lBblkyeHBjRjl0YVc0bkxDQjBlWEJsT2lBblpqTXlKMzBwTzF4dUlDQjlJR1ZzYzJVZ2FXWWdLR0YwZEhKcFluVjBaWE11WVdOMGFYWmhkR2x2YmlBOVBUMGdKMGhoY21SVGFXZHRiMmxrSnlrZ2UxeHVJQ0FnSUhWdWFXWnZjbTF6TG5CMWMyZ29lMjVoYldVNklDZGhiSEJvWVNjc0lIUjVjR1U2SUNkbU16SW5mU3dnZTI1aGJXVTZJQ2RpWlhSaEp5d2dkSGx3WlRvZ0oyWXpNaWQ5S1R0Y2JpQWdmU0JsYkhObElHbG1JQ2hoZEhSeWFXSjFkR1Z6TG1GamRHbDJZWFJwYjI0Z1BUMDlJQ2RNWldGcmVWSmxiSFVuS1NCN1hHNGdJQ0FnZFc1cFptOXliWE11Y0hWemFDaDdibUZ0WlRvZ0oyRnNjR2hoSnl3Z2RIbHdaVG9nSjJZek1pZDlLVHRjYmlBZ2ZWeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSEJoY25ObFNXNTBaWEp1WVd4QlkzUnBkbUYwYVc5dVFYUjBjbWxpZFhSbGN5QTlYRzRnSUNBZ0tHRjBkSEpwWW5WMFpYTTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lIVnVhMjV2ZDI0K2ZIVnVaR1ZtYVc1bFpDazZJRWx1ZEdWeWJtRnNRV04wYVhaaGRHbHZia0YwZEhKcFluVjBaWE1nUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWVdOMGFYWmhkR2x2YmlBOUlHRjBkSEpwWW5WMFpYTS9MbUZqZEdsMllYUnBiMjRnWVhNZ2MzUnlhVzVuSUh4OElDY25PMXh1SUNBZ0lDQWdhV1lnS0dGamRHbDJZWFJwYjI0Z1BUMDlJQ2RJWVhKa1UybG5iVzlwWkNjcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1cyRnNjR2hoTENCaVpYUmhYU0E5SUdGMGRISnBZblYwWlhNL0xtRmpkR2wyWVhScGIyNWZjR0Z5WVcxeklHRnpJRnR1ZFcxaVpYSXNJRzUxYldKbGNsMGdmSHdnV3pBdU1pd2dNQzQxWFR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUh0aFkzUnBkbUYwYVc5dUxDQmhiSEJvWVN3Z1ltVjBZWDA3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dGamRHbDJZWFJwYjI0Z1BUMDlJQ2REYkdsd0p5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmJZMnhwY0UxcGJpd2dZMnhwY0UxaGVGMGdQU0JoZEhSeWFXSjFkR1Z6UHk1aFkzUnBkbUYwYVc5dVgzQmhjbUZ0Y3lCaGN5QmJiblZ0WW1WeUxDQnVkVzFpWlhKZElIeDhJRnROU1U1ZlEweEpVQ3dnVFVGWVgwTk1TVkJkTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZTJGamRHbDJZWFJwYjI0c0lHTnNhWEJOWVhnc0lHTnNhWEJOYVc1OU8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGhZM1JwZG1GMGFXOXVJRDA5UFNBblRHVmhhM2xTWld4MUp5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmJZV3h3YUdGZElEMGdZWFIwY21saWRYUmxjejh1WVdOMGFYWmhkR2x2Ymw5d1lYSmhiWE1nWVhNZ1cyNTFiV0psY2wwZ2ZId2dXekF1TURGZE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2UyRmpkR2wyWVhScGIyNHNJR0ZzY0doaGZUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCN1lXTjBhWFpoZEdsdmJuMDdYRzRnSUNBZ2ZUdGNiaUlzSUNJdktpcGNiaUFxSUVCc2FXTmxibk5sWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF5TVNCSGIyOW5iR1VnVEV4RExpQkJiR3dnVW1sbmFIUnpJRkpsYzJWeWRtVmtMbHh1SUNvZ1RHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFRndZV05vWlNCTWFXTmxibk5sTENCV1pYSnphVzl1SURJdU1DQW9kR2hsSUZ3aVRHbGpaVzV6WlZ3aUtUdGNiaUFxSUhsdmRTQnRZWGtnYm05MElIVnpaU0IwYUdseklHWnBiR1VnWlhoalpYQjBJR2x1SUdOdmJYQnNhV0Z1WTJVZ2QybDBhQ0IwYUdVZ1RHbGpaVzV6WlM1Y2JpQXFJRmx2ZFNCdFlYa2diMkowWVdsdUlHRWdZMjl3ZVNCdlppQjBhR1VnVEdsalpXNXpaU0JoZEZ4dUlDcGNiaUFxSUdoMGRIQTZMeTkzZDNjdVlYQmhZMmhsTG05eVp5OXNhV05sYm5ObGN5OU1TVU5GVGxORkxUSXVNRnh1SUNwY2JpQXFJRlZ1YkdWemN5QnlaWEYxYVhKbFpDQmllU0JoY0hCc2FXTmhZbXhsSUd4aGR5QnZjaUJoWjNKbFpXUWdkRzhnYVc0Z2QzSnBkR2x1Wnl3Z2MyOW1kSGRoY21WY2JpQXFJR1JwYzNSeWFXSjFkR1ZrSUhWdVpHVnlJSFJvWlNCTWFXTmxibk5sSUdseklHUnBjM1J5YVdKMWRHVmtJRzl1SUdGdUlGd2lRVk1nU1ZOY0lpQkNRVk5KVXl4Y2JpQXFJRmRKVkVoUFZWUWdWMEZTVWtGT1ZFbEZVeUJQVWlCRFQwNUVTVlJKVDA1VElFOUdJRUZPV1NCTFNVNUVMQ0JsYVhSb1pYSWdaWGh3Y21WemN5QnZjaUJwYlhCc2FXVmtMbHh1SUNvZ1UyVmxJSFJvWlNCTWFXTmxibk5sSUdadmNpQjBhR1VnYzNCbFkybG1hV01nYkdGdVozVmhaMlVnWjI5MlpYSnVhVzVuSUhCbGNtMXBjM05wYjI1eklHRnVaRnh1SUNvZ2JHbHRhWFJoZEdsdmJuTWdkVzVrWlhJZ2RHaGxJRXhwWTJWdWMyVXVYRzRnS2lBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1SUNvdlhHNWNiaTh2SUhOaGJYQnNaV1FnWm5KdmJTQmJRSFJsYm5OdmNtWnNiM2N2ZEdacWMxMGdkR1pxY3kxaVlXTnJaVzVrTFhkbFltZHdkUzl6Y21NdllXTjBhWFpoZEdsdmJsOTFkR2xzTG5SelhHNHZMMXh1THk4Z2JXOWthV1pwWldRZ2RHOGdabWwwSUhSb1pTQnVaV1ZrY3lCdlppQjBhR1VnY0hKdmFtVmpkRnh1WEc1bGVIQnZjblFnWTI5dWMzUWdkSGx3WlZOdWFYQndaWFFnUFNBb1kyOXRjRzl1Wlc1ME9pQnVkVzFpWlhJc0lHUmhkR0ZVZVhCbE9pQnpkSEpwYm1jcElEMCtJSHRjYmlBZ2MzZHBkR05vSUNoamIyMXdiMjVsYm5RcElIdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdaR0YwWVZSNWNHVTdYRzRnSUNBZ1kyRnpaU0F5T2x4dUlDQWdJQ0FnY21WMGRYSnVJR0IyWldNeVBDUjdaR0YwWVZSNWNHVjlQbUE3WEc0Z0lDQWdZMkZ6WlNBek9seHVJQ0FnSUNBZ2NtVjBkWEp1SUdCMlpXTXpQQ1I3WkdGMFlWUjVjR1Y5UG1BN1hHNGdJQ0FnWTJGelpTQTBPbHh1SUNBZ0lDQWdjbVYwZFhKdUlHQjJaV00wUENSN1pHRjBZVlI1Y0dWOVBtQTdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnSkh0amIyMXdiMjVsYm5SOUxXTnZiWEJ2Ym1WdWRDQnBjeUJ1YjNRZ2MzVndjRzl5ZEdWa0xtQXBPMXh1SUNCOVhHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdZbWxoYzFOdWFYQndaWFFnUFNBb2FHRnpRbWxoY3pvZ1ltOXZiR1ZoYmlrNklITjBjbWx1WnlBOVBpQmdYRzRnSUNBZ0lDQWtlMmhoYzBKcFlYTWdQeUFuZG1Gc2RXVWdQU0IyWVd4MVpTQXJJR2RsZEVKcFlYTkNlVTkxZEhCMWRFTnZiM0prY3loamIyOXlaSE1wT3ljZ09pQW5KMzFjYmlBZ0lDQWdJR0E3WEc0aUxDQWlMeW9xWEc0Z0tpQkFiR2xqWlc1elpWeHVJQ29nUTI5d2VYSnBaMmgwSURJd01qQWdSMjl2WjJ4bElFeE1ReTRnUVd4c0lGSnBaMmgwY3lCU1pYTmxjblpsWkM1Y2JpQXFJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JCY0dGamFHVWdUR2xqWlc1elpTd2dWbVZ5YzJsdmJpQXlMakFnS0hSb1pTQmNJa3hwWTJWdWMyVmNJaWs3WEc0Z0tpQjViM1VnYldGNUlHNXZkQ0IxYzJVZ2RHaHBjeUJtYVd4bElHVjRZMlZ3ZENCcGJpQmpiMjF3YkdsaGJtTmxJSGRwZEdnZ2RHaGxJRXhwWTJWdWMyVXVYRzRnS2lCWmIzVWdiV0Y1SUc5aWRHRnBiaUJoSUdOdmNIa2diMllnZEdobElFeHBZMlZ1YzJVZ1lYUmNiaUFxWEc0Z0tpQm9kSFJ3T2k4dmQzZDNMbUZ3WVdOb1pTNXZjbWN2YkdsalpXNXpaWE12VEVsRFJVNVRSUzB5TGpCY2JpQXFYRzRnS2lCVmJteGxjM01nY21WeGRXbHlaV1FnWW5rZ1lYQndiR2xqWVdKc1pTQnNZWGNnYjNJZ1lXZHlaV1ZrSUhSdklHbHVJSGR5YVhScGJtY3NJSE52Wm5SM1lYSmxYRzRnS2lCa2FYTjBjbWxpZFhSbFpDQjFibVJsY2lCMGFHVWdUR2xqWlc1elpTQnBjeUJrYVhOMGNtbGlkWFJsWkNCdmJpQmhiaUJjSWtGVElFbFRYQ0lnUWtGVFNWTXNYRzRnS2lCWFNWUklUMVZVSUZkQlVsSkJUbFJKUlZNZ1QxSWdRMDlPUkVsVVNVOU9VeUJQUmlCQlRsa2dTMGxPUkN3Z1pXbDBhR1Z5SUdWNGNISmxjM01nYjNJZ2FXMXdiR2xsWkM1Y2JpQXFJRk5sWlNCMGFHVWdUR2xqWlc1elpTQm1iM0lnZEdobElITndaV05wWm1saklHeGhibWQxWVdkbElHZHZkbVZ5Ym1sdVp5QndaWEp0YVhOemFXOXVjeUJoYm1SY2JpQXFJR3hwYldsMFlYUnBiMjV6SUhWdVpHVnlJSFJvWlNCTWFXTmxibk5sTGx4dUlDb2dQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JpQXFMMXh1WEc0dkx5QnpZVzF3YkdWa0lHWnliMjBnVzBCMFpXNXpiM0ptYkc5M0wzUm1hbk5kSUhSbWFuTXRZMjl5WlM5emNtTXZiM0J6TDJOdmJuWmZkWFJwYkM1MGMxeHVMeTljYmk4dklHMXZaR2xtYVdWa0lIUnZJR1pwZENCMGFHVWdibVZsWkhNZ2IyWWdkR2hsSUhCeWIycGxZM1JjYmx4dVpYaHdiM0owSUdOdmJuTjBJSFYwYVd4R2RXNWpkR2x2Ym5NZ1BTQW9jM1J5YVdSbFUzUnlPaUJ6ZEhKcGJtY3BJRDArSUNoZ1hHNW1iaUJuWlhSSmJtUmxlRVp5YjIxRGIyOXlaSE0wUkNoamIyOXlaSE1nT2lCMlpXTTBQR2t6TWo0c0lITm9ZWEJsSURvZ2RtVmpORHhwTXpJK0tTQXRQaUJwTXpJZ2UxeHVJQ0J5WlhSMWNtNGdaRzkwS0dOdmIzSmtjeXdnZG1Wak5EeHBNekkrS0Z4dUlDQWdJQ0FnYzJoaGNHVXVlU0FxSUhOb1lYQmxMbm9nS2lCemFHRndaUzUzTENCemFHRndaUzU2SUNvZ2MyaGhjR1V1ZHl3Z2MyaGhjR1V1ZHl3Z01Ta3BPMXh1ZlZ4dVptNGdaMlYwVDNWMGNIVjBTVzVrWlhoR2NtOXRRMjl2Y21SektHTnZiM0prY3lBNklIWmxZelE4YVRNeVBpa2dMVDRnYVRNeUlIdGNiaUFnY21WMGRYSnVJR1J2ZENoamIyOXlaSE1zSUhabFl6UThhVE15UGloY2JpQWdJQ0JwTXpJb0pIdHpkSEpwWkdWVGRISjlMbmdwTENCcE16SW9KSHR6ZEhKcFpHVlRkSEo5TG5rcExDQnBNeklvSkh0emRISnBaR1ZUZEhKOUxub3BMQ0F4S1NrN1hHNTlYRzVnS1R0Y2JpSXNJQ0l2S2lwY2JpQXFJRUJzYVdObGJuTmxYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhPU0JIYjI5bmJHVWdURXhETGlCQmJHd2dVbWxuYUhSeklGSmxjMlZ5ZG1Wa0xseHVJQ29nVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVGd1lXTm9aU0JNYVdObGJuTmxMQ0JXWlhKemFXOXVJREl1TUNBb2RHaGxJRndpVEdsalpXNXpaVndpS1R0Y2JpQXFJSGx2ZFNCdFlYa2dibTkwSUhWelpTQjBhR2x6SUdacGJHVWdaWGhqWlhCMElHbHVJR052YlhCc2FXRnVZMlVnZDJsMGFDQjBhR1VnVEdsalpXNXpaUzVjYmlBcUlGbHZkU0J0WVhrZ2IySjBZV2x1SUdFZ1kyOXdlU0J2WmlCMGFHVWdUR2xqWlc1elpTQmhkRnh1SUNwY2JpQXFJR2gwZEhBNkx5OTNkM2N1WVhCaFkyaGxMbTl5Wnk5c2FXTmxibk5sY3k5TVNVTkZUbE5GTFRJdU1GeHVJQ3BjYmlBcUlGVnViR1Z6Y3lCeVpYRjFhWEpsWkNCaWVTQmhjSEJzYVdOaFlteGxJR3hoZHlCdmNpQmhaM0psWldRZ2RHOGdhVzRnZDNKcGRHbHVaeXdnYzI5bWRIZGhjbVZjYmlBcUlHUnBjM1J5YVdKMWRHVmtJSFZ1WkdWeUlIUm9aU0JNYVdObGJuTmxJR2x6SUdScGMzUnlhV0oxZEdWa0lHOXVJR0Z1SUZ3aVFWTWdTVk5jSWlCQ1FWTkpVeXhjYmlBcUlGZEpWRWhQVlZRZ1YwRlNVa0ZPVkVsRlV5QlBVaUJEVDA1RVNWUkpUMDVUSUU5R0lFRk9XU0JMU1U1RUxDQmxhWFJvWlhJZ1pYaHdjbVZ6Y3lCdmNpQnBiWEJzYVdWa0xseHVJQ29nVTJWbElIUm9aU0JNYVdObGJuTmxJR1p2Y2lCMGFHVWdjM0JsWTJsbWFXTWdiR0Z1WjNWaFoyVWdaMjkyWlhKdWFXNW5JSEJsY20xcGMzTnBiMjV6SUdGdVpGeHVJQ29nYkdsdGFYUmhkR2x2Ym5NZ2RXNWtaWElnZEdobElFeHBZMlZ1YzJVdVhHNGdLaUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVJQ292WEc1Y2JpOHZJSE5oYlhCc1pXUWdabkp2YlNCYlFIUmxibk52Y21ac2IzY3ZkR1pxYzEwZ2RHWnFjeTFpWVdOclpXNWtMWGRsWW1kd2RTOXpjbU12YldGMGJYVnNYM0JoWTJ0bFpGOTNaV0puY0hVdWRITmNiaTh2WEc0dkx5QnRiMlJwWm1sbFpDQjBieUJtYVhRZ2RHaGxJRzVsWldSeklHOW1JSFJvWlNCd2NtOXFaV04wWEc1Y2JtbHRjRzl5ZENCN1JHRjBZVlI1Y0dWOUlHWnliMjBnSnk0dUx5NHVMeTR1THk0dUwzZGhjMjB0WTI5dGJXOXVKenRjYm1sdGNHOXlkQ0I3VkdWdWMyOXlWbWxsZDMwZ1puSnZiU0FuTGk0dkxpNHZMaTR2ZEdWdWMyOXlMWFpwWlhjbk8xeHVhVzF3YjNKMElIdFRhR0Z3WlZWMGFXeDlJR1p5YjIwZ0p5NHVMeTR1THk0dUwzVjBhV3duTzF4dWFXMXdiM0owSUh0UWNtOW5jbUZ0U1c1bWJ5d2dVSEp2WjNKaGJVbHVjSFYwVkdWdWMyOXlTVzVtYjBSbGNHVnVaR1Z1WTNrc0lGQnliMmR5WVcxVmJtbG1iM0p0ZlNCbWNtOXRJQ2N1TGk4dUxpOTBlWEJsY3ljN1hHNXBiWEJ2Y25RZ2UyTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWekxDQm5aWFJDY205aFpHTmhjM1JFYVcxekxDQkpibVJwWTJWelNHVnNjR1Z5TENCcGJuQjFkRlpoY21saFlteGxMQ0JwYm5SbGNtNWhiRlpoY21saFlteGxMQ0J2ZFhSd2RYUldZWEpwWVdKc1pTd2dVMmhoWkdWeVNHVnNjR1Z5TENCMFpXNXpiM0pVZVhCbFZHOVhjMmRzVTNSdmNtRm5aVlI1Y0dVc0lGVnVhV1p2Y20xelFYSnlZWGxVZVhCbGZTQm1jbTl0SUNjdUxpOWpiMjF0YjI0bk8xeHVhVzF3YjNKMElIdGhjSEJsYm1SQlkzUnBkbUYwYVc5dVZXNXBabTl5YlhNc0lHRndjR1Z1WkVGamRHbDJZWFJwYjI1VmJtbG1iM0p0YzBSaGRHRXNJR2RsZEVGamRHbDJZWFJwYjI1VGJtbHdjR1YwTENCSmJuUmxjbTVoYkVGamRHbDJZWFJwYjI1QmRIUnlhV0oxZEdWemZTQm1jbTl0SUNjdUxpOW1kWE5sTFhWMGFXeHpKenRjYmx4dWFXMXdiM0owSUh0MGVYQmxVMjVwY0hCbGRIMGdabkp2YlNBbkxpOWhZM1JwZG1GMGFXOXVYM1YwYVd3bk8xeHVYRzVqYjI1emRDQjNjbWwwWlVSaGRHRlViMU4xWWtGV1pXTTBVMjVwY0hCbGRDQTlJQ2gwY21GdWMzQnZjMlU2SUdKdmIyeGxZVzRzSUdKaGRHTm9SR2x0Y3o4NklFbHVaR2xqWlhOSVpXeHdaWElwSUQwK0lIdGNiaUFnYVdZZ0tIUnlZVzV6Y0c5elpTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCZ1hHNGdJQ0FnSUNBZ0lHMXRYMEZ6ZFdKYmFXNXdkWFJTYjNkZFcybHVjSFYwUTI5c1hTQTlJRzF0WDNKbFlXUkJLR0poZEdOb0xGeHVJQ0FnSUNBZ0lDQWdJR3RUZEdGeWRDQXJJR2x1Y0hWMFVtOTNMRnh1SUNBZ0lDQWdJQ0FnSUdkc2IySmhiRkp2ZDFOMFlYSjBJQzhnYVc1dVpYSkZiR1Z0Wlc1MFUybDZaU0FySUdsdWNIVjBRMjlzSkh0aVlYUmphRVJwYlhNZ1B5QW5MQ0JpWVhSamFFbHVaR2xqWlhNbklEb2dKeWQ5S1R0Y2JpQWdJQ0FnSUNBZ1lEdGNibHh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQmdYRzRnSUNBZ0lDQWdJRzF0WDBGemRXSmJhVzV3ZFhSU2IzZGRXMmx1Y0hWMFEyOXNYU0E5SUcxdFgzSmxZV1JCS0dKaGRHTm9MRnh1SUNBZ0lDQWdJQ0FnSUdkc2IySmhiRkp2ZHlBcklHbHVibVZ5VW05M0xGeHVJQ0FnSUNBZ0lDQWdJR3RUZEdGeWRDQXZJR2x1Ym1WeVJXeGxiV1Z1ZEZOcGVtVWdLeUJwYm5CMWRFTnZiQ1I3WW1GMFkyaEVhVzF6SUQ4Z0p5d2dZbUYwWTJoSmJtUnBZMlZ6SnlBNklDY25mU2s3WEc0Z0lDQWdJQ0FnSUdBN1hHNGdJSDFjYm4wN1hHNWNibU52Ym5OMElHTmhiR04xYkdGMFpWSmxjM1ZzZEZOdWFYQndaWFFnUFNBb2RISmhibk53YjNObFFUb2dZbTl2YkdWaGJpd2dhVzV1WlhKRmJHVnRaVzUwVTJsNlpUb2diblZ0WW1WeUtTQTlQaUI3WEc0Z0lHbG1JQ2gwY21GdWMzQnZjMlZCS1NCN1hHNGdJQ0FnY21WMGRYSnVJR0JjYmlBZ0lDQWdJQ0FnYkdWMElFRkRZV05vWldRd0lEMGdiVzFmUVhOMVlsdHJJQ29nYVc1dVpYSkZiR1Z0Wlc1MFUybDZaVjFiYkc5allXeFNiM2RkTzF4dUlDQWdJQ0FnSUNCc1pYUWdRVU5oWTJobFpERWdQU0J0YlY5QmMzVmlXMnNnS2lCcGJtNWxja1ZzWlcxbGJuUlRhWHBsSUNzZ01WMWJiRzlqWVd4U2IzZGRPMXh1SUNBZ0lDQWdJQ0JzWlhRZ1FVTmhZMmhsWkRJZ1BTQnRiVjlCYzNWaVcyc2dLaUJwYm01bGNrVnNaVzFsYm5SVGFYcGxJQ3NnTWwxYmJHOWpZV3hTYjNkZE8xeHVJQ0FnSUNBZ0lDQWtlMmx1Ym1WeVJXeGxiV1Z1ZEZOcGVtVWdQVDA5SURNZ1B5QW5KeUE2SUNkc1pYUWdRVU5oWTJobFpETWdQU0J0YlY5QmMzVmlXMnNnS2lCcGJtNWxja1ZzWlcxbGJuUlRhWHBsSUNzZ00xMWJiRzlqWVd4U2IzZGRPeWQ5WEc0Z0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z2NtOTNVR1Z5VkdoeVpXRmtPeUJwSUQwZ2FTQXJJREVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmhZMk5iYVYwZ1BTQkNRMkZqYUdWa01DQXFJRUZEWVdOb1pXUXdXMmxkSUNzZ1lXTmpXMmxkTzF4dUlDQWdJQ0FnSUNBZ0lHRmpZMXRwWFNBOUlFSkRZV05vWldReElDb2dRVU5oWTJobFpERmJhVjBnS3lCaFkyTmJhVjA3WEc0Z0lDQWdJQ0FnSUNBZ1lXTmpXMmxkSUQwZ1FrTmhZMmhsWkRJZ0tpQkJRMkZqYUdWa01sdHBYU0FySUdGalkxdHBYVHRjYmlBZ0lDQWdJQ0FnSUNBa2UybHVibVZ5Uld4bGJXVnVkRk5wZW1VZ1BUMDlJRE1nUHlBbkp5QTZJQ2RoWTJOYmFWMGdQU0JDUTJGamFHVmtNeUFxSUVGRFlXTm9aV1F6VzJsZElDc2dZV05qVzJsZE95ZDlYRzRnSUNBZ0lDQWdJSDFnTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUJnWEc0Z0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z2NtOTNVR1Z5VkdoeVpXRmtPeUJwSUQwZ2FTQXJJREVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNaWFFnUVVOaFkyaGxaQ0E5SUcxdFgwRnpkV0piZEdsc1pWSnZkeUFySUdsZFcydGRPMXh1SUNBZ0lDQWdJQ0FnSUdGalkxdHBYU0E5SUVKRFlXTm9aV1F3SUNvZ1FVTmhZMmhsWkM1NElDc2dZV05qVzJsZE8xeHVJQ0FnSUNBZ0lDQWdJR0ZqWTF0cFhTQTlJRUpEWVdOb1pXUXhJQ29nUVVOaFkyaGxaQzU1SUNzZ1lXTmpXMmxkTzF4dUlDQWdJQ0FnSUNBZ0lHRmpZMXRwWFNBOUlFSkRZV05vWldReUlDb2dRVU5oWTJobFpDNTZJQ3NnWVdOalcybGRPMXh1SUNBZ0lDQWdJQ0FnSUNSN2FXNXVaWEpGYkdWdFpXNTBVMmw2WlNBOVBUMGdNeUEvSUNjbklEb2dKMkZqWTF0cFhTQTlJRUpEWVdOb1pXUXpJQ29nUVVOaFkyaGxaQzUzSUNzZ1lXTmpXMmxkT3lkOVhHNGdJQ0FnSUNBZ0lIMWdPMXh1SUNCOVhHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdiV0ZyWlUxaGRFMTFiRkJoWTJ0bFpGWmxZelJUYjNWeVkyVWdQVnh1SUNBZ0lDaDNiM0pyVUdWeVZHaHlaV0ZrT2lCdWRXMWlaWEpiWFN3Z2QyOXlhMmR5YjNWd1UybDZaVG9nVzI1MWJXSmxjaXdnYm5WdFltVnlMQ0J1ZFcxaVpYSmRMQ0IwZVhCbElEMGdKMll6TWljc0lHSmhkR05vUkdsdGN6ODZJRWx1WkdsalpYTklaV3h3WlhJc1hHNGdJQ0FnSUhSeVlXNXpjRzl6WlVFZ1BTQm1ZV3h6WlN3Z2RHbHNaVWx1Ym1WeUlEMGdNeklzSUhOd2JHbDBTeUE5SUdaaGJITmxMQ0J6Y0d4cGRHVmtSR2x0U1c1dVpYSWdQU0F6TWlrNklITjBjbWx1WnlBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCMGFXeGxRVTkxZEdWeUlEMGdkMjl5YTJkeWIzVndVMmw2WlZzeFhTQXFJSGR2Y210UVpYSlVhSEpsWVdSYk1WMDdYRzRnSUNBZ0lDQmpiMjV6ZENCMGFXeGxRazkxZEdWeUlEMGdkMjl5YTJkeWIzVndVMmw2WlZzd1hTQXFJSGR2Y210UVpYSlVhSEpsWVdSYk1GMDdYRzRnSUNBZ0lDQmpiMjV6ZENCMGFXeGxRVmRwWkhSb0lEMGdkSEpoYm5Od2IzTmxRU0EvSUhScGJHVkJUM1YwWlhJZ09pQjBhV3hsU1c1dVpYSTdYRzRnSUNBZ0lDQmpiMjV6ZENCMGFXeGxRVWhwWjJoMElEMGdkSEpoYm5Od2IzTmxRU0EvSUhScGJHVkpibTVsY2lBNklIUnBiR1ZCVDNWMFpYSTdYRzRnSUNBZ0lDQmpiMjV6ZENCcGJtNWxja1ZzWlcxbGJuUlRhWHBsSUQwZ2RHbHNaVUZYYVdSMGFDQXZJSGR2Y210bmNtOTFjRk5wZW1WYk1GMDdYRzRnSUNBZ0lDQmpiMjV6ZENCeWIzZFFaWEpVYUhKbFlXUkNJRDBnZEdsc1pVbHVibVZ5SUM4Z2QyOXlhMmR5YjNWd1UybDZaVnN4WFR0Y2JseHVJQ0FnSUNBZ2FXWWdLQ0VvS0NoMGNtRnVjM0J2YzJWQklDWW1JR2x1Ym1WeVJXeGxiV1Z1ZEZOcGVtVWdQVDA5SURRZ0ppWWdkMjl5YTFCbGNsUm9jbVZoWkZzeFhTQTlQVDBnTkNrZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBb0lYUnlZVzV6Y0c5elpVRWdKaVlnS0dsdWJtVnlSV3hsYldWdWRGTnBlbVVnUFQwOUlETWdmSHdnYVc1dVpYSkZiR1Z0Wlc1MFUybDZaU0E5UFQwZ05Da3BLU0FtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdkR2xzWlVGWGFXUjBhQ0FsSUhkdmNtdG5jbTkxY0ZOcGVtVmJNRjBnUFQwOUlEQWdKaVlnZEdsc1pVbHVibVZ5SUNVZ2QyOXlhMmR5YjNWd1UybDZaVnN4WFNBOVBUMGdNQ0FtSmlCM2IzSnJVR1Z5VkdoeVpXRmtXekJkSUQwOVBTQTBLU2tnZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVsbUlIUnlZVzV6Y0c5elpVRWdKSHQwY21GdWMzQnZjMlZCZlNCcGN5QjBjblZsTENCcGJtNWxja1ZzWlcxbGJuUlRhWHBsSUNSN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwYm01bGNrVnNaVzFsYm5SVGFYcGxmU0JoYm1RZ2QyOXlhMUJsY2xSb2NtVmhaRnN4WFNBa2UzZHZjbXRRWlhKVWFISmxZV1JiTVYxOUlHMTFjM1FnWW1VZ05DNWNiaUFnSUNBZ0lFOTBhR1Z5ZDJselpTd2dhVzV1WlhKRmJHVnRaVzUwVTJsNlpTQWtlMmx1Ym1WeVJXeGxiV1Z1ZEZOcGVtVjlJRzExYzNRZ1ltVWdNeUJ2Y2lBMExseHVJQ0IwYVd4bFFWZHBaSFJvSUNSN2RHbHNaVUZYYVdSMGFIMGdiWFZ6ZENCaVpTQmthWFpwYzJsaWJHVWdZbmtnZDI5eWEyZHliM1Z3VTJsNlpWc3dYU1I3ZDI5eWEyZHliM1Z3VTJsNlpWc3dYWDB1SUhScGJHVkpibTVsY2lBa2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdsc1pVbHVibVZ5ZlNCdGRYTjBJR0psSUdScGRtbHphV0pzWlNCaWVTQjNiM0pyWjNKdmRYQlRhWHBsV3pGZElDUjdkMjl5YTJkeWIzVndVMmw2WlZzeFhYMHVJR052YkZCbGNsUm9jbVZoWkNBa2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZDI5eWExQmxjbFJvY21WaFpGc3dYWDBnYlhWemRDQmlaU0EwTG1BcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2NtVjBkWEp1SUdCY2JuWmhjangzYjNKclozSnZkWEErSUcxdFgwRnpkV0k2SUdGeWNtRjVQR0Z5Y21GNVBIWmxZeVI3YVc1dVpYSkZiR1Z0Wlc1MFUybDZaWDA4Skh0MGVYQmxmVDRzSUNSN2RHbHNaVUZYYVdSMGFDQXZJR2x1Ym1WeVJXeGxiV1Z1ZEZOcGVtVjlQaXdnSkh0MGFXeGxRVWhwWjJoMGZUNDdYRzUyWVhJOGQyOXlhMmR5YjNWd1BpQnRiVjlDYzNWaU9pQmhjbkpoZVR4aGNuSmhlVHgyWldNMFBDUjdkSGx3WlgwK0xDQWtlM1JwYkdWQ1QzVjBaWElnTHlCM2IzSnJVR1Z5VkdoeVpXRmtXekJkZlQ0c0lDUjdkR2xzWlVsdWJtVnlmVDQ3WEc1Y2JtTnZibk4wSUhKdmQxQmxjbFJvY21WaFpDQTlJQ1I3ZDI5eWExQmxjbFJvY21WaFpGc3hYWDA3WEc1amIyNXpkQ0JqYjJ4UVpYSlVhSEpsWVdRZ1BTQWtlM2R2Y210UVpYSlVhSEpsWVdSYk1GMTlPMXh1WTI5dWMzUWdhVzV1WlhKRmJHVnRaVzUwVTJsNlpTQTlJQ1I3YVc1dVpYSkZiR1Z0Wlc1MFUybDZaWDA3WEc1amIyNXpkQ0IwYVd4bFNXNXVaWElnUFNBa2UzUnBiR1ZKYm01bGNuMDdYRzVjYmtCamIyMXdkWFJsSUVCM2IzSnJaM0p2ZFhCZmMybDZaU2drZTNkdmNtdG5jbTkxY0ZOcGVtVmJNRjE5TENBa2UzZHZjbXRuY205MWNGTnBlbVZiTVYxOUxDQWtlM2R2Y210bmNtOTFjRk5wZW1WYk1sMTlLVnh1Wm00Z2JXRnBiaWhBWW5WcGJIUnBiaWhzYjJOaGJGOXBiblp2WTJGMGFXOXVYMmxrS1NCc2IyTmhiRWxrSURvZ2RtVmpNengxTXpJK0xGeHVJQ0FnSUNBZ0lDQkFZblZwYkhScGJpaG5iRzlpWVd4ZmFXNTJiMk5oZEdsdmJsOXBaQ2tnWjJ4dlltRnNTV1FnT2lCMlpXTXpQSFV6TWo0c1hHNGdJQ0FnSUNBZ0lFQmlkV2xzZEdsdUtIZHZjbXRuY205MWNGOXBaQ2tnZDI5eWEyZHliM1Z3U1dRZ09pQjJaV016UEhVek1qNHBJSHRjYmlBZ2JHVjBJR3h2WTJGc1VtOTNJRDBnYVRNeUtHeHZZMkZzU1dRdWVTazdYRzRnSUd4bGRDQjBhV3hsVW05M0lEMGdiRzlqWVd4U2IzY2dLaUJ5YjNkUVpYSlVhSEpsWVdRN1hHNGdJR3hsZENCMGFXeGxRMjlzSUQwZ2FUTXlLR3h2WTJGc1NXUXVlQ2s3WEc1Y2JpQWdiR1YwSUdkc2IySmhiRkp2ZHlBOWFUTXlLR2RzYjJKaGJFbGtMbmtwSUNvZ2NtOTNVR1Z5VkdoeVpXRmtPMXh1SUNCc1pYUWdaMnh2WW1Gc1EyOXNJRDBnYVRNeUtHZHNiMkpoYkVsa0xuZ3BPMXh1SUNCc1pYUWdZbUYwWTJnZ1BTQWtlM053YkdsMFN5QS9JQ2N3SnlBNklDZHBNeklvWjJ4dlltRnNTV1F1ZWlrbmZUdGNiaUFnSkh0aVlYUmphRVJwYlhNZ1B5QmdiR1YwSUdKaGRHTm9TVzVrYVdObGN5QTlJQ1I3WW1GMFkyaEVhVzF6TG05bVpuTmxkRlJ2U1c1a2FXTmxjeWduZFRNeUtHSmhkR05vS1NjcGZUdGdJRG9nSnlkOVhHNGdJR3hsZENCbmJHOWlZV3hTYjNkVGRHRnlkQ0E5SUdrek1paDNiM0pyWjNKdmRYQkpaQzU1S1NBcUlDUjdkR2xzWlVGUGRYUmxjbjA3WEc1Y2JpQWdiR1YwSUc1MWJWOTBhV3hsY3lBOUlDUjdjM0JzYVhSTElEOGdZQ1I3VFdGMGFDNWpaV2xzS0hOd2JHbDBaV1JFYVcxSmJtNWxjaUF2SUhScGJHVkpibTVsY2lsOVlDQTZJQ2NvZFc1cFptOXliWE11WkdsdFgybHVibVZ5SUMwZ01Ta2dMeUIwYVd4bFNXNXVaWElnS3lBeEozMDdYRzRnSUhaaGNpQnJVM1JoY25RZ1BTQWtlM053YkdsMFN5QS9JR0JwTXpJb1oyeHZZbUZzU1dRdWVpa2dLaUFrZTNOd2JHbDBaV1JFYVcxSmJtNWxjbjFnSURvZ0p6QW5mVHRjYmx4dUlDQjJZWElnWVdOak9pQmhjbkpoZVR4MlpXTTBQQ1I3ZEhsd1pYMCtMQ0J5YjNkUVpYSlVhSEpsWVdRK08xeHVYRzRnSUM4dklFeHZiM0FnYjNabGNpQnphR0Z5WldRZ1pHbHRaVzV6YVc5dUxseHVJQ0JzWlhRZ2RHbHNaVkp2ZDBJZ1BTQnNiMk5oYkZKdmR5QXFJQ1I3Y205M1VHVnlWR2h5WldGa1FuMDdYRzRnSUdadmNpQW9kbUZ5SUhRZ1BTQXdPeUIwSUR3Z2JuVnRYM1JwYkdWek95QjBJRDBnZENBcklERXBJSHRjYmlBZ0lDQWdJQzh2SUV4dllXUWdiMjVsSUhScGJHVWdiMllnUVNCcGJuUnZJR3h2WTJGc0lHMWxiVzl5ZVM1Y2JpQWdJQ0FnSUdadmNpQW9kbUZ5SUdsdWJtVnlVbTkzSUQwZ01Ec2dhVzV1WlhKU2IzY2dQQ0J5YjNkUVpYSlVhSEpsWVdRN0lHbHVibVZ5VW05M0lEMGdhVzV1WlhKU2IzY2dLeUF4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUdsdWNIVjBVbTkzSUQwZ2RHbHNaVkp2ZHlBcklHbHVibVZ5VW05M08xeHVJQ0FnSUNBZ0lDQWdJR3hsZENCcGJuQjFkRU52YkNBOUlIUnBiR1ZEYjJ3N1hHNGdJQ0FnSUNBZ0lDQWdKSHQzY21sMFpVUmhkR0ZVYjFOMVlrRldaV00wVTI1cGNIQmxkQ2gwY21GdWMzQnZjMlZCTENCaVlYUmphRVJwYlhNcGZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQXZMeUJNYjJGa0lHOXVaU0IwYVd4bElHOW1JRUlnYVc1MGJ5QnNiMk5oYkNCdFpXMXZjbmt1WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwYm01bGNsSnZkeUE5SURBN0lHbHVibVZ5VW05M0lEd2dKSHR5YjNkUVpYSlVhSEpsWVdSQ2ZUc2dhVzV1WlhKU2IzY2dQU0JwYm01bGNsSnZkeUFySURFcElIdGNiaUFnSUNBZ0lDQWdJQ0JzWlhRZ2FXNXdkWFJTYjNjZ1BTQjBhV3hsVW05M1FpQXJJR2x1Ym1WeVVtOTNPMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQnBibkIxZEVOdmJDQTlJSFJwYkdWRGIydzdYRzRnSUNBZ0lDQWdJQ0FnYlcxZlFuTjFZbHRwYm5CMWRGSnZkMTFiYVc1d2RYUkRiMnhkSUQwZ2JXMWZjbVZoWkVJb1ltRjBZMmdzSUd0VGRHRnlkQ0FySUdsdWNIVjBVbTkzTENCbmJHOWlZV3hEYjJ3a2UxeHVJQ0FnSUNBZ0lDQWdJR0poZEdOb1JHbHRjeUEvSUNjc0lHSmhkR05vU1c1a2FXTmxjeWNnT2lBbkozMHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhMU4wWVhKMElEMGdhMU4wWVhKMElDc2dkR2xzWlVsdWJtVnlPMXh1SUNBZ0lDQWdkMjl5YTJkeWIzVndRbUZ5Y21sbGNpZ3BPMXh1WEc0Z0lDQWdJQ0F2THlCRGIyMXdkWFJsSUdGall5QjJZV3gxWlhNZ1ptOXlJR0VnYzJsdVoyeGxJSFJvY21WaFpDNWNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHc2dQU0F3T3lCcklEd2dkR2xzWlVsdWJtVnlJQzhnYVc1dVpYSkZiR1Z0Wlc1MFUybDZaVHNnYXlBOUlHc2dLeUF4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUVKRFlXTm9aV1F3SUQwZ2JXMWZRbk4xWWx0cklDb2dhVzV1WlhKRmJHVnRaVzUwVTJsNlpWMWJkR2xzWlVOdmJGMDdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElFSkRZV05vWldReElEMGdiVzFmUW5OMVlsdHJJQ29nYVc1dVpYSkZiR1Z0Wlc1MFUybDZaU0FySURGZFczUnBiR1ZEYjJ4ZE8xeHVJQ0FnSUNBZ0lDQWdJR3hsZENCQ1EyRmphR1ZrTWlBOUlHMXRYMEp6ZFdKYmF5QXFJR2x1Ym1WeVJXeGxiV1Z1ZEZOcGVtVWdLeUF5WFZ0MGFXeGxRMjlzWFR0Y2JpQWdJQ0FnSUNBZ0lDQWtlMmx1Ym1WeVJXeGxiV1Z1ZEZOcGVtVWdQVDA5SURNZ1B5QW5KeUE2SUNkc1pYUWdRa05oWTJobFpETWdQU0J0YlY5Q2MzVmlXMnNnS2lCcGJtNWxja1ZzWlcxbGJuUlRhWHBsSUNzZ00xMWJkR2xzWlVOdmJGMDdKMzFjYmx4dUlDQWdJQ0FnSUNBZ0lDUjdZMkZzWTNWc1lYUmxVbVZ6ZFd4MFUyNXBjSEJsZENoMGNtRnVjM0J2YzJWQkxDQnBibTVsY2tWc1pXMWxiblJUYVhwbEtYMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdkMjl5YTJkeWIzVndRbUZ5Y21sbGNpZ3BPMXh1SUNCOVhHNWNiaUFnWm05eUlDaDJZWElnYVc1dVpYSlNiM2NnUFNBd095QnBibTVsY2xKdmR5QThJSEp2ZDFCbGNsUm9jbVZoWkRzZ2FXNXVaWEpTYjNjZ1BTQnBibTVsY2xKdmR5QXJJREVwSUh0Y2JpQWdJQ0FnSUcxdFgzZHlhWFJsS0dKaGRHTm9MQ0JuYkc5aVlXeFNiM2NnS3lCcGJtNWxjbEp2ZHl3Z1oyeHZZbUZzUTI5c0xDQmhZMk5iYVc1dVpYSlNiM2RkS1R0Y2JpQWdmVnh1ZldBN1hHNGdJQ0FnZlR0Y2JseHVZMjl1YzNRZ2QzSnBkR1ZFWVhSaFZHOVRkV0pCVTI1cGNIQmxkQ0E5SUNoMGNtRnVjM0J2YzJVNklHSnZiMnhsWVc0c0lHSmhkR05vUkdsdGN6ODZJRWx1WkdsalpYTklaV3h3WlhJcElEMCtJSHRjYmlBZ2FXWWdLSFJ5WVc1emNHOXpaU2tnZTF4dUlDQWdJSEpsZEhWeWJpQmdYRzRnSUNBZ0lDQWdJQ0FnSUNCdGJWOUJjM1ZpVzJsdWNIVjBVbTkzWFZ0cGJuQjFkRU52YkYwZ1BTQnRiVjl5WldGa1FTaGlZWFJqYUN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYTFOMFlYSjBJQ3NnYVc1d2RYUlNiM2NzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR2RzYjJKaGJGSnZkMU4wWVhKMElDc2dhVzV3ZFhSRGIyd2tlMkpoZEdOb1JHbHRjeUEvSUNjc0lHSmhkR05vU1c1a2FXTmxjeWNnT2lBbkozMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1lEdGNibHh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQmdYRzRnSUNBZ0lDQWdJQ0FnSUNCdGJWOUJjM1ZpVzJsdWNIVjBVbTkzWFZ0cGJuQjFkRU52YkYwZ1BTQnRiVjl5WldGa1FTaGlZWFJqYUN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWjJ4dlltRnNVbTkzVTNSaGNuUWdLeUJwYm5CMWRGSnZkeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdhMU4wWVhKMElDc2dhVzV3ZFhSRGIyd2tlMkpoZEdOb1JHbHRjeUEvSUNjc0lHSmhkR05vU1c1a2FXTmxjeWNnT2lBbkozMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1lEdGNiaUFnZlZ4dWZUdGNibHh1WTI5dWMzUWdjbVZoWkVSaGRHRkdjbTl0VTNWaVFWTnVhWEJ3WlhRZ1BTQW9kSEpoYm5Od2IzTmxRVG9nWW05dmJHVmhiaWtnUFQ1Y2JpQWdJQ0IwY21GdWMzQnZjMlZCSUQ4Z0oyeGxkQ0JCUTJGamFHVmtJRDBnYlcxZlFYTjFZbHRyWFZ0MGFXeGxVbTkzSUNzZ2FXNXVaWEpTYjNkZE95Y2dPaUFuYkdWMElFRkRZV05vWldRZ1BTQnRiVjlCYzNWaVczUnBiR1ZTYjNjZ0t5QnBibTVsY2xKdmQxMWJhMTA3Snp0Y2JseHVMeThnYzJWeGRXVnVkR2xoYkVGalkyVnpjMEo1VkdoeVpXRmtjeUJ0WldGdWN5QnpaWEYxWlc1MGFXRnNJR1JoZEdFZ2FXNGdiV1Z0YjNKNUlHbHpJR0ZqWTJWemMyVmtJR0o1WEc0dkx5QjBhSEpsWVdSekxDQnBibk4wWldGa0lHOW1JR0VnYzJsdVoyeGxJSFJvY21WaFpDQW9aR1ZtWVhWc2RDQmlaV2hoZG1sdmNpa3VYRzVsZUhCdmNuUWdZMjl1YzNRZ2JXRnJaVTFoZEUxMWJGQmhZMnRsWkZOdmRYSmpaU0E5WEc0Z0lDQWdLSGR2Y210UVpYSlVhSEpsWVdRNklHNTFiV0psY2x0ZExDQjNiM0pyWjNKdmRYQlRhWHBsT2lCYmJuVnRZbVZ5TENCdWRXMWlaWElzSUc1MWJXSmxjbDBzSUhSNWNHVWdQU0FuWmpNeUp5d2dZbUYwWTJoRWFXMXpQem9nU1c1a2FXTmxjMGhsYkhCbGNpeGNiaUFnSUNBZ2RISmhibk53YjNObFFTQTlJR1poYkhObExDQjBhV3hsU1c1dVpYSWdQU0F6TWl3Z2MzQnNhWFJMSUQwZ1ptRnNjMlVzSUhOd2JHbDBaV1JFYVcxSmJtNWxjaUE5SURNeUxGeHVJQ0FnSUNCelpYRjFaVzUwYVdGc1FXTmpaWE56UW5sVWFISmxZV1J6SUQwZ1ptRnNjMlVwT2lCemRISnBibWNnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZEdsc1pVRlBkWFJsY2lBOUlIZHZjbXRRWlhKVWFISmxZV1JiTVYwZ0tpQjNiM0pyWjNKdmRYQlRhWHBsV3pGZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnZEdsc1pVSlBkWFJsY2lBOUlIZHZjbXRRWlhKVWFISmxZV1JiTUYwZ0tpQjNiM0pyWjNKdmRYQlRhWHBsV3pCZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnZEdsc1pVRlhhV1IwYUNBOUlIUnlZVzV6Y0c5elpVRWdQeUIwYVd4bFFVOTFkR1Z5SURvZ2RHbHNaVWx1Ym1WeU8xeHVJQ0FnSUNBZ1kyOXVjM1FnZEdsc1pVRklhV2RvZENBOUlIUnlZVzV6Y0c5elpVRWdQeUIwYVd4bFNXNXVaWElnT2lCMGFXeGxRVTkxZEdWeU8xeHVYRzRnSUNBZ0lDQnBaaUFvSVNoMGFXeGxRVWhwWjJoMElDVWdkMjl5YTJkeWIzVndVMmw2WlZzeFhTQTlQVDBnTUNBbUppQjBhV3hsUVZkcFpIUm9JQ1VnZDI5eWEyZHliM1Z3VTJsNlpWc3dYU0E5UFQwZ01DQW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ2RHbHNaVWx1Ym1WeUlDVWdkMjl5YTJkeWIzVndVMmw2WlZzeFhTQTlQVDBnTUNrcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQjBhV3hsUVVocFoyaDBJQ1I3ZEdsc1pVRklhV2RvZEgwZ2JYVnpkQ0JpWlNCa2FYWnBjMmxpYkdVZ1lua2dkMjl5YTJkeWIzVndVMmw2WlZzeFhTUjdYRzRnSUNBZ0lDQWdJQ0FnSUNCM2IzSnJaM0p2ZFhCVGFYcGxXekZkZlN3Z2RHbHNaVUZYYVdSMGFDQWtlM1JwYkdWQlYybGtkR2g5SUcxMWMzUWdZbVVnWkdsMmFYTnBZbXhsSUdKNUlIZHZjbXRuY205MWNGTnBlbVZiTUYwa2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZDI5eWEyZHliM1Z3VTJsNlpWc3dYWDBzSUhScGJHVkpibTVsY2lBa2UzUnBiR1ZKYm01bGNuMGdiWFZ6ZENCaVpTQmthWFpwYzJsaWJHVWdZbmtnZDI5eWEyZHliM1Z3VTJsNlpWc3hYU1I3ZDI5eWEyZHliM1Z3VTJsNlpWc3hYWDFnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdOdmJuTjBJSEp2ZDFCbGNsUm9jbVZoWkVFZ1BTQjBhV3hsUVVocFoyaDBJQzhnZDI5eWEyZHliM1Z3VTJsNlpWc3hYVHRjYmlBZ0lDQWdJR052Ym5OMElHTnZiRkJsY2xSb2NtVmhaRUVnUFNCMGFXeGxRVmRwWkhSb0lDOGdkMjl5YTJkeWIzVndVMmw2WlZzd1hUdGNiaUFnSUNBZ0lHTnZibk4wSUhKdmQxQmxjbFJvY21WaFpFSWdQU0IwYVd4bFNXNXVaWElnTHlCM2IzSnJaM0p2ZFhCVGFYcGxXekZkTzF4dUlDQWdJQ0FnWTI5dWMzUWdiV0YwYlhWc1UyNXBjSEJsZENBOUlITmxjWFZsYm5ScFlXeEJZMk5sYzNOQ2VWUm9jbVZoWkhNZ1AxeHVJQ0FnSUNBZ0lDQWdJR0JjYmlBZ0lDQnNaWFFnYkc5allXeFNiM2NnUFNCcE16SW9iRzlqWVd4SlpDNTVLVHRjYmlBZ0lDQnNaWFFnYkc5allXeERiMndnUFNCcE16SW9iRzlqWVd4SlpDNTRLVHRjYmlBZ0lDQnNaWFFnWjJ4dlltRnNVbTkzVTNSaGNuUWdQU0JwTXpJb2QyOXlhMmR5YjNWd1NXUXVlU2tnS2lBa2UzUnBiR1ZCVDNWMFpYSjlPMXh1SUNBZ0lHeGxkQ0JuYkc5aVlXeERiMnhUZEdGeWRDQTlJR2t6TWloM2IzSnJaM0p2ZFhCSlpDNTRLU0FxSUNSN2RHbHNaVUpQZFhSbGNuMDdYRzVjYmlBZ0lDQXZMeUJNYjI5d0lHOTJaWElnYzJoaGNtVmtJR1JwYldWdWMybHZiaTVjYmlBZ0lDQm1iM0lnS0haaGNpQjBJRDBnTURzZ2RDQThJRzUxYlY5MGFXeGxjenNnZENBOUlIUWdLeUF4S1NCN1hHNGdJQ0FnSUNBdkx5Qk1iMkZrSUc5dVpTQjBhV3hsSUc5bUlFRWdhVzUwYnlCc2IyTmhiQ0J0WlcxdmNua3VYRzRnSUNBZ0lDQm1iM0lnS0haaGNpQnBibkIxZEZKdmR5QTlJR3h2WTJGc1VtOTNPeUJwYm5CMWRGSnZkeUE4SUNSN2RHbHNaVUZJYVdkb2RIMDdJR2x1Y0hWMFVtOTNJRDBnYVc1d2RYUlNiM2NnS3lBa2UzZHZjbXRuY205MWNGTnBlbVZiTVYxOUtTQjdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2RtRnlJR2x1Y0hWMFEyOXNJRDBnYkc5allXeERiMnc3SUdsdWNIVjBRMjlzSUR3Z0pIdDBhV3hsUVZkcFpIUm9mVHNnYVc1d2RYUkRiMndnUFNCcGJuQjFkRU52YkNBcklDUjdkMjl5YTJkeWIzVndVMmw2WlZzd1hYMHBJSHRjYmlBZ0lDQWdJQ0FnSUNBa2UzZHlhWFJsUkdGMFlWUnZVM1ZpUVZOdWFYQndaWFFvZEhKaGJuTndiM05sUVN3Z1ltRjBZMmhFYVcxektYMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdMeThnVEc5aFpDQnZibVVnZEdsc1pTQnZaaUJDSUdsdWRHOGdiRzlqWVd3Z2JXVnRiM0o1TGx4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVc1d2RYUlNiM2NnUFNCc2IyTmhiRkp2ZHpzZ2FXNXdkWFJTYjNjZ1BDQWtlM1JwYkdWSmJtNWxjbjA3SUdsdWNIVjBVbTkzSUQwZ2FXNXdkWFJTYjNjZ0t5QWtlM2R2Y210bmNtOTFjRk5wZW1WYk1WMTlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnBibkIxZEVOdmJDQTlJR3h2WTJGc1EyOXNPeUJwYm5CMWRFTnZiQ0E4SUNSN2RHbHNaVUpQZFhSbGNuMDdJR2x1Y0hWMFEyOXNJRDBnYVc1d2RYUkRiMndnS3lBa2UzZHZjbXRuY205MWNGTnBlbVZiTUYxOUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYlcxZlFuTjFZbHRwYm5CMWRGSnZkMTFiYVc1d2RYUkRiMnhkSUQwZ2JXMWZjbVZoWkVJb1ltRjBZMmdzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnJVM1JoY25RZ0t5QnBibkIxZEZKdmR5eGNiaUFnSUNBZ0lDQWdJQ0FnSUdkc2IySmhiRU52YkZOMFlYSjBJQ3NnYVc1d2RYUkRiMndrZTJKaGRHTm9SR2x0Y3lBL0lDY3NJR0poZEdOb1NXNWthV05sY3ljZ09pQW5KMzBwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCclUzUmhjblFnUFNCclUzUmhjblFnS3lCMGFXeGxTVzV1WlhJN1hHNGdJQ0FnSUNCM2IzSnJaM0p2ZFhCQ1lYSnlhV1Z5S0NrN1hHNWNiaUFnSUNBZ0lDOHZJRU52YlhCMWRHVWdZV05qSUhaaGJIVmxjeUJtYjNJZ1lTQnphVzVuYkdVZ2RHaHlaV0ZrTGx4dUlDQWdJQ0FnZG1GeUlFSkRZV05vWldRZ09pQmhjbkpoZVR3a2UzUjVjR1Y5TENCamIyeFFaWEpVYUhKbFlXUStPMXh1SUNBZ0lDQWdabTl5SUNoMllYSWdheUE5SURBN0lHc2dQQ0IwYVd4bFNXNXVaWEk3SUdzZ1BTQnJJQ3NnTVNrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnBibTVsY2lBOUlEQTdJR2x1Ym1WeUlEd2dZMjlzVUdWeVZHaHlaV0ZrT3lCcGJtNWxjaUE5SUdsdWJtVnlJQ3NnTVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJRUpEWVdOb1pXUmJhVzV1WlhKZElEMGdiVzFmUW5OMVlsdHJYVnRzYjJOaGJFTnZiQ0FySUdsdWJtVnlJQ29nSkh0M2IzSnJaM0p2ZFhCVGFYcGxXekJkZlYwN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdabTl5SUNoMllYSWdhVzV1WlhKU2IzY2dQU0F3T3lCcGJtNWxjbEp2ZHlBOElISnZkMUJsY2xSb2NtVmhaRHNnYVc1dVpYSlNiM2NnUFNCcGJtNWxjbEp2ZHlBcklERXBJSHRjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdRVU5oWTJobFpDQTlJQ1I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFJ5WVc1emNHOXpaVUVnUHlCZ2JXMWZRWE4xWWx0clhWdHNiMk5oYkZKdmR5QXJJR2x1Ym1WeVVtOTNJQ29nSkh0M2IzSnJaM0p2ZFhCVGFYcGxXekZkZlYwN1lDQTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JnYlcxZlFYTjFZbHRzYjJOaGJGSnZkeUFySUdsdWJtVnlVbTkzSUNvZ0pIdDNiM0pyWjNKdmRYQlRhWHBsV3pGZGZWMWJhMTA3WUgxY2JpQWdJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnBibTVsY2tOdmJDQTlJREE3SUdsdWJtVnlRMjlzSUR3Z1kyOXNVR1Z5VkdoeVpXRmtPeUJwYm01bGNrTnZiQ0E5SUdsdWJtVnlRMjlzSUNzZ01Ta2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1lXTmpXMmx1Ym1WeVVtOTNYVnRwYm01bGNrTnZiRjBnUFNCaFkyTmJhVzV1WlhKU2IzZGRXMmx1Ym1WeVEyOXNYU0FyWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUVVOaFkyaGxaQ0FxSUVKRFlXTm9aV1JiYVc1dVpYSkRiMnhkTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkMjl5YTJkeWIzVndRbUZ5Y21sbGNpZ3BPMXh1SUNBZ0lIMWNiaUFnSUNCbWIzSWdLSFpoY2lCcGJtNWxjbEp2ZHlBOUlEQTdJR2x1Ym1WeVVtOTNJRHdnY205M1VHVnlWR2h5WldGa095QnBibTVsY2xKdmR5QTlJR2x1Ym1WeVVtOTNJQ3NnTVNrZ2UxeHVJQ0FnSUNBZ2JHVjBJR2RTYjNjZ1BTQm5iRzlpWVd4U2IzZFRkR0Z5ZENBcklHeHZZMkZzVW05M0lDc2dhVzV1WlhKU2IzY2dLaUFrZTNkdmNtdG5jbTkxY0ZOcGVtVmJNVjE5TzF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVc1dVpYSkRiMndnUFNBd095QnBibTVsY2tOdmJDQThJR052YkZCbGNsUm9jbVZoWkRzZ2FXNXVaWEpEYjJ3Z1BTQnBibTVsY2tOdmJDQXJJREVwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJR2REYjJ3Z1BTQm5iRzlpWVd4RGIyeFRkR0Z5ZENBcklHeHZZMkZzUTI5c0lDc2dhVzV1WlhKRGIyd2dLaUFrZTNkdmNtdG5jbTkxY0ZOcGVtVmJNRjE5TzF4dUlDQWdJQ0FnSUNCdGJWOTNjbWwwWlNoaVlYUmphQ3dnWjFKdmR5d2daME52YkN3Z1lXTmpXMmx1Ym1WeVVtOTNYVnRwYm01bGNrTnZiRjBwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQmdJRHBjYmlBZ0lDQWdJQ0FnSUNCZ1hHNXNaWFFnZEdsc1pWSnZkeUE5SUdrek1paHNiMk5oYkVsa0xua3BJQ29nY205M1VHVnlWR2h5WldGa08xeHViR1YwSUhScGJHVkRiMndnUFNCcE16SW9iRzlqWVd4SlpDNTRLU0FxSUdOdmJGQmxjbFJvY21WaFpEdGNibHh1YkdWMElHZHNiMkpoYkZKdmR5QTlJR2t6TWlobmJHOWlZV3hKWkM1NUtTQXFJSEp2ZDFCbGNsUm9jbVZoWkR0Y2JteGxkQ0JuYkc5aVlXeERiMndnUFNCcE16SW9aMnh2WW1Gc1NXUXVlQ2tnS2lCamIyeFFaWEpVYUhKbFlXUTdYRzVzWlhRZ1oyeHZZbUZzVW05M1UzUmhjblFnUFNCcE16SW9kMjl5YTJkeWIzVndTV1F1ZVNrZ0tpQWtlM1JwYkdWQlQzVjBaWEo5TzF4dVhHNXNaWFFnZEdsc1pWSnZkMEVnUFNCcE16SW9iRzlqWVd4SlpDNTVLU0FxSUNSN2NtOTNVR1Z5VkdoeVpXRmtRWDA3WEc1c1pYUWdkR2xzWlVOdmJFRWdQU0JwTXpJb2JHOWpZV3hKWkM1NEtTQXFJQ1I3WTI5c1VHVnlWR2h5WldGa1FYMDdYRzVzWlhRZ2RHbHNaVkp2ZDBJZ1BTQnBNeklvYkc5allXeEpaQzU1S1NBcUlDUjdjbTkzVUdWeVZHaHlaV0ZrUW4wN1hHNHZMeUJNYjI5d0lHOTJaWElnYzJoaGNtVmtJR1JwYldWdWMybHZiaTVjYm1admNpQW9kbUZ5SUhRZ1BTQXdPeUIwSUR3Z2JuVnRYM1JwYkdWek95QjBJRDBnZENBcklERXBJSHRjYmlBZ0x5OGdURzloWkNCdmJtVWdkR2xzWlNCdlppQkJJR2x1ZEc4Z2JHOWpZV3dnYldWdGIzSjVMbHh1SUNCbWIzSWdLSFpoY2lCcGJtNWxjbEp2ZHlBOUlEQTdJR2x1Ym1WeVVtOTNJRHdnSkh0eWIzZFFaWEpVYUhKbFlXUkJmVHNnYVc1dVpYSlNiM2NnUFNCcGJtNWxjbEp2ZHlBcklERXBJSHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBibTVsY2tOdmJDQTlJREE3SUdsdWJtVnlRMjlzSUR3Z0pIdGpiMnhRWlhKVWFISmxZV1JCZlRzZ2FXNXVaWEpEYjJ3Z1BTQnBibTVsY2tOdmJDQXJJREVwSUh0Y2JpQWdJQ0FnSUd4bGRDQnBibkIxZEZKdmR5QTlJSFJwYkdWU2IzZEJJQ3NnYVc1dVpYSlNiM2M3WEc0Z0lDQWdJQ0JzWlhRZ2FXNXdkWFJEYjJ3Z1BTQjBhV3hsUTI5c1FTQXJJR2x1Ym1WeVEyOXNPMXh1SUNBZ0lDQWdKSHQzY21sMFpVUmhkR0ZVYjFOMVlrRlRibWx3Y0dWMEtIUnlZVzV6Y0c5elpVRXNJR0poZEdOb1JHbHRjeWw5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHk4Z1RHOWhaQ0J2Ym1VZ2RHbHNaU0J2WmlCQ0lHbHVkRzhnYkc5allXd2diV1Z0YjNKNUxseHVJQ0JtYjNJZ0tIWmhjaUJwYm01bGNsSnZkeUE5SURBN0lHbHVibVZ5VW05M0lEd2dKSHR5YjNkUVpYSlVhSEpsWVdSQ2ZUc2dhVzV1WlhKU2IzY2dQU0JwYm01bGNsSnZkeUFySURFcElIdGNiaUFnSUNCbWIzSWdLSFpoY2lCcGJtNWxja052YkNBOUlEQTdJR2x1Ym1WeVEyOXNJRHdnWTI5c1VHVnlWR2h5WldGa095QnBibTVsY2tOdmJDQTlJR2x1Ym1WeVEyOXNJQ3NnTVNrZ2UxeHVJQ0FnSUNBZ2JHVjBJR2x1Y0hWMFVtOTNJRDBnZEdsc1pWSnZkMElnS3lCcGJtNWxjbEp2ZHp0Y2JpQWdJQ0FnSUd4bGRDQnBibkIxZEVOdmJDQTlJSFJwYkdWRGIyd2dLeUJwYm01bGNrTnZiRHRjYmlBZ0lDQWdJRzF0WDBKemRXSmJhVzV3ZFhSU2IzZGRXMmx1Y0hWMFEyOXNYU0E5SUcxdFgzSmxZV1JDS0dKaGRHTm9MRnh1SUNBZ0lDQWdJQ0JyVTNSaGNuUWdLeUJwYm5CMWRGSnZkeXhjYmlBZ0lDQWdJQ0FnWjJ4dlltRnNRMjlzSUNzZ2FXNXVaWEpEYjJ3a2UySmhkR05vUkdsdGN5QS9JQ2NzSUdKaGRHTm9TVzVrYVdObGN5Y2dPaUFuSjMwcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCclUzUmhjblFnUFNCclUzUmhjblFnS3lCMGFXeGxTVzV1WlhJN1hHNGdJSGR2Y210bmNtOTFjRUpoY25KcFpYSW9LVHRjYmx4dUlDQXZMeUJEYjIxd2RYUmxJR0ZqWXlCMllXeDFaWE1nWm05eUlHRWdjMmx1WjJ4bElIUm9jbVZoWkM1Y2JpQWdkbUZ5SUVKRFlXTm9aV1FnT2lCaGNuSmhlVHdrZTNSNWNHVjlMQ0JqYjJ4UVpYSlVhSEpsWVdRK08xeHVJQ0JtYjNJZ0tIWmhjaUJySUQwZ01Ec2dheUE4SUhScGJHVkpibTVsY2pzZ2F5QTlJR3NnS3lBeEtTQjdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FXNXVaWElnUFNBd095QnBibTVsY2lBOElHTnZiRkJsY2xSb2NtVmhaRHNnYVc1dVpYSWdQU0JwYm01bGNpQXJJREVwSUh0Y2JpQWdJQ0FnSUVKRFlXTm9aV1JiYVc1dVpYSmRJRDBnYlcxZlFuTjFZbHRyWFZ0MGFXeGxRMjlzSUNzZ2FXNXVaWEpkTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1p2Y2lBb2RtRnlJR2x1Ym1WeVVtOTNJRDBnTURzZ2FXNXVaWEpTYjNjZ1BDQnliM2RRWlhKVWFISmxZV1E3SUdsdWJtVnlVbTkzSUQwZ2FXNXVaWEpTYjNjZ0t5QXhLU0I3WEc0Z0lDQWdJQ0FrZTNKbFlXUkVZWFJoUm5KdmJWTjFZa0ZUYm1sd2NHVjBLSFJ5WVc1emNHOXpaVUVwZlZ4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVc1dVpYSkRiMndnUFNBd095QnBibTVsY2tOdmJDQThJR052YkZCbGNsUm9jbVZoWkRzZ2FXNXVaWEpEYjJ3Z1BTQnBibTVsY2tOdmJDQXJJREVwSUh0Y2JpQWdJQ0FnSUNBZ1lXTmpXMmx1Ym1WeVVtOTNYVnRwYm01bGNrTnZiRjBnUFNCaFkyTmJhVzV1WlhKU2IzZGRXMmx1Ym1WeVEyOXNYU0FySUVGRFlXTm9aV1FnS2lCQ1EyRmphR1ZrVzJsdWJtVnlRMjlzWFR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCM2IzSnJaM0p2ZFhCQ1lYSnlhV1Z5S0NrN1hHNTlYRzVjYm1admNpQW9kbUZ5SUdsdWJtVnlVbTkzSUQwZ01Ec2dhVzV1WlhKU2IzY2dQQ0J5YjNkUVpYSlVhSEpsWVdRN0lHbHVibVZ5VW05M0lEMGdhVzV1WlhKU2IzY2dLeUF4S1NCN1hHNGdJR1p2Y2lBb2RtRnlJR2x1Ym1WeVEyOXNJRDBnTURzZ2FXNXVaWEpEYjJ3Z1BDQmpiMnhRWlhKVWFISmxZV1E3SUdsdWJtVnlRMjlzSUQwZ2FXNXVaWEpEYjJ3Z0t5QXhLU0I3WEc0Z0lDQWdiVzFmZDNKcGRHVW9ZbUYwWTJnc0lHZHNiMkpoYkZKdmR5QXJJR2x1Ym1WeVVtOTNMQ0JuYkc5aVlXeERiMndnS3lCcGJtNWxja052YkN4Y2JpQWdJQ0FnSUNBZ1lXTmpXMmx1Ym1WeVVtOTNYVnRwYm01bGNrTnZiRjBwTzF4dUlDQjlYRzU5WEc1Z08xeHVYRzRnSUNBZ0lDQnlaWFIxY200Z1lGeHVJQ0IyWVhJOGQyOXlhMmR5YjNWd1BpQnRiVjlCYzNWaUlEb2dZWEp5WVhrOFlYSnlZWGs4Skh0MGVYQmxmU3dnSkh0MGFXeGxRVmRwWkhSb2ZUNHNJQ1I3ZEdsc1pVRklhV2RvZEgwK08xeHVJQ0IyWVhJOGQyOXlhMmR5YjNWd1BpQnRiVjlDYzNWaUlEb2dZWEp5WVhrOFlYSnlZWGs4Skh0MGVYQmxmU3dnSkh0MGFXeGxRazkxZEdWeWZUNHNJQ1I3ZEdsc1pVbHVibVZ5ZlQ0N1hHNGdJR052Ym5OMElISnZkMUJsY2xSb2NtVmhaQ0E5SUNSN2QyOXlhMUJsY2xSb2NtVmhaRnN4WFgwN1hHNGdJR052Ym5OMElHTnZiRkJsY2xSb2NtVmhaQ0E5SUNSN2QyOXlhMUJsY2xSb2NtVmhaRnN3WFgwN1hHNGdJR052Ym5OMElIUnBiR1ZKYm01bGNpQTlJQ1I3ZEdsc1pVbHVibVZ5ZlR0Y2JseHVRR052YlhCMWRHVWdRSGR2Y210bmNtOTFjRjl6YVhwbEtDUjdkMjl5YTJkeWIzVndVMmw2WlZzd1hYMHNJQ1I3ZDI5eWEyZHliM1Z3VTJsNlpWc3hYWDBzSUNSN2QyOXlhMmR5YjNWd1UybDZaVnN5WFgwcFhHNW1iaUJ0WVdsdUtFQmlkV2xzZEdsdUtHeHZZMkZzWDJsdWRtOWpZWFJwYjI1ZmFXUXBJR3h2WTJGc1NXUWdPaUIyWldNelBIVXpNajRzWEc0Z0lDQWdJQ0FnSUVCaWRXbHNkR2x1S0dkc2IySmhiRjlwYm5adlkyRjBhVzl1WDJsa0tTQm5iRzlpWVd4SlpDQTZJSFpsWXpNOGRUTXlQaXhjYmlBZ0lDQWdJQ0FnUUdKMWFXeDBhVzRvZDI5eWEyZHliM1Z3WDJsa0tTQjNiM0pyWjNKdmRYQkpaQ0E2SUhabFl6TThkVE15UGlrZ2UxeHVJQ0FnSUd4bGRDQmlZWFJqYUNBOUlDUjdjM0JzYVhSTElEOGdKekFuSURvZ0oya3pNaWhuYkc5aVlXeEpaQzU2S1NkOU8xeHVJQ0FnSUNSN1ltRjBZMmhFYVcxeklEOGdZR3hsZENCaVlYUmphRWx1WkdsalpYTWdQU0FrZTJKaGRHTm9SR2x0Y3k1dlptWnpaWFJVYjBsdVpHbGpaWE1vSjNVek1paGlZWFJqYUNrbktYMDdZQ0E2SUNjbmZWeHVJQ0FnSUd4bGRDQnVkVzFmZEdsc1pYTWdQU0FrZTF4dUlDQWdJQ0FnSUNBZ0lITndiR2wwU3lBL0lHQWtlMDFoZEdndVkyVnBiQ2h6Y0d4cGRHVmtSR2x0U1c1dVpYSWdMeUIwYVd4bFNXNXVaWElwZldBZ09pQW5LSFZ1YVdadmNtMXpMbVJwYlY5cGJtNWxjaUF0SURFcElDOGdkR2xzWlVsdWJtVnlJQ3NnTVNkOU8xeHVJQ0FnSUhaaGNpQnJVM1JoY25RZ1BTQWtlM053YkdsMFN5QS9JR0JwTXpJb1oyeHZZbUZzU1dRdWVpa2dLaUFrZTNOd2JHbDBaV1JFYVcxSmJtNWxjbjFnSURvZ0p6QW5mVHRjYmx4dUlDQWdJSFpoY2lCaFkyTWdPaUJoY25KaGVUeGhjbkpoZVR3a2UzUjVjR1Y5TENCamIyeFFaWEpVYUhKbFlXUStMQ0J5YjNkUVpYSlVhSEpsWVdRK08xeHVYRzRnSUNBZ0x5OGdWMmwwYUc5MWRDQjBhR2x6SUdsdWFYUnBZV3hwZW1GMGFXOXVJSE4wY21GdVoyVWdkbUZzZFdWeklITm9iM2NnZFhBZ2FXNGdZV05qTGx4dUlDQWdJR1p2Y2lBb2RtRnlJR2x1Ym1WeVVtOTNJRDBnTURzZ2FXNXVaWEpTYjNjZ1BDQnliM2RRWlhKVWFISmxZV1E3SUdsdWJtVnlVbTkzSUQwZ2FXNXVaWEpTYjNjZ0t5QXhLU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwYm01bGNrTnZiQ0E5SURBN0lHbHVibVZ5UTI5c0lEd2dZMjlzVUdWeVZHaHlaV0ZrT3lCcGJtNWxja052YkNBOUlHbHVibVZ5UTI5c0lDc2dNU2tnZTF4dUlDQWdJQ0FnSUNCaFkyTmJhVzV1WlhKU2IzZGRXMmx1Ym1WeVEyOXNYU0E5SURBdU1EdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnSkh0dFlYUnRkV3hUYm1sd2NHVjBmVnh1SUNCOVhHNWdPMXh1SUNBZ0lIMDdYRzVjYm1OdmJuTjBJRzFoZEUxMWJGSmxZV1JYY21sMFpVWnVVMjkxY21ObElEMWNiaUFnSUNBb1kyOXRjRzl1Wlc1ME9pQnVkVzFpWlhJc0lHaGhjMEpwWVhNNklHSnZiMnhsWVc0c0lHRndjR3g1UVdOMGFYWmhkR2x2YmpvZ2MzUnlhVzVuTENCMllYSnBZV0pzWlhNNklFbHVaR2xqWlhOSVpXeHdaWEpiWFN4Y2JpQWdJQ0FnWW1GMFkyaFRhR0Z3WlhNNklFRnljbUY1UEhKbFlXUnZibXg1SUc1MWJXSmxjbHRkUGl3Z2FYTkRhR0Z1Ym1Wc2MweGhjM1FnUFNCbVlXeHpaU2s2SUhOMGNtbHVaeUE5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0JiWW1GMFkyaEJVMmhoY0dVc0lHSmhkR05vUWxOb1lYQmxMQ0JpWVhSamFGTm9ZWEJsWFNBOUlHSmhkR05vVTJoaGNHVnpPMXh1SUNBZ0lDQWdZMjl1YzNRZ1cySmhkR05vVm1GeWFXRmliR1VzSUdGV1lYSnBZV0pzWlN3Z1lsWmhjbWxoWW14bExDQnZkWFJ3ZFhSV1lYSnBZV0pzWlYwZ1BTQjJZWEpwWVdKc1pYTTdYRzRnSUNBZ0lDQmpiMjV6ZENCaWNtOWhaRU5oYzNSQlJHbHRjeUE5SUdkbGRFSnliMkZrWTJGemRFUnBiWE1vWW1GMFkyaEJVMmhoY0dVc0lHSmhkR05vVTJoaGNHVXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ1luSnZZV1JEWVhOMFFrUnBiWE1nUFNCblpYUkNjbTloWkdOaGMzUkVhVzF6S0dKaGRHTm9RbE5vWVhCbExDQmlZWFJqYUZOb1lYQmxLVHRjYmlBZ0lDQWdJR052Ym5OMElHUmhkR0ZVZVhCbElEMGdkR1Z1YzI5eVZIbHdaVlJ2VjNObmJGTjBiM0poWjJWVWVYQmxLSFpoY21saFlteGxjMXN3WFM1MGVYQmxMblJsYm5OdmNpazdYRzRnSUNBZ0lDQmpiMjV6ZENCblpYUkJTVzVrYVdObGN5QTlJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1lWSmhibXNnUFNCaFZtRnlhV0ZpYkdVdWNtRnVhenRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdZbUYwWTJoU1lXNXJJRDBnWW1GMFkyaFdZWEpwWVdKc1pTNXlZVzVyTzF4dUlDQWdJQ0FnSUNCc1pYUWdjbVZ6VTNSeUlEMGdZSFpoY2lCaFNXNWthV05sY3pvZ0pIdGhWbUZ5YVdGaWJHVXVkSGx3WlM1cGJtUnBZMlZ6ZlR0Z08xeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnWVZKaGJtc2dMU0F5SUMwZ01Td2dhaUE5SUdKaGRHTm9VbUZ1YXlBdElERTdJR2tnUGowZ01Ec2dhUzB0TENCcUxTMHBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYTlRkSElnS3owZ1lGeGNibUZKYm1ScFkyVnpXeVI3YVgxZElEMGdKSHRpWVhSamFGSmhibXNnUGlBeElEOGdZR0poZEdOb1NXNWthV05sYzFza2UycDlYV0FnT2lBblltRjBZMmhKYm1ScFkyVnpKMzA3WUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmljbTloWkVOaGMzUkJSR2x0Y3k1bWIzSkZZV05vS0drZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUhKbGMxTjBjaUFyUFNCZ1hGeHVZVWx1WkdsalpYTmJKSHRwZlYwZ1BTQXdPMkE3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQnlaWE5UZEhJZ0t6MGdZRnhjYm1GSmJtUnBZMlZ6V3lSN1lWSmhibXNnTFNBeWZWMGdQU0IxTXpJb2NtOTNLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaFNXNWthV05sYzFza2UyRlNZVzVySUMwZ01YMWRJRDBnZFRNeUtHTnZiRWx1S1R0Z08xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpVM1J5TzF4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUdOdmJuTjBJR2RsZEVKSmJtUnBZMlZ6SUQwZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JpVW1GdWF5QTlJR0pXWVhKcFlXSnNaUzV5WVc1ck8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCaVlYUmphRkpoYm1zZ1BTQmlZWFJqYUZaaGNtbGhZbXhsTG5KaGJtczdYRzRnSUNBZ0lDQWdJR3hsZENCeVpYTlRkSElnUFNCZ2RtRnlJR0pKYm1ScFkyVnpPaUFrZTJKV1lYSnBZV0pzWlM1MGVYQmxMbWx1WkdsalpYTjlPMkE3WEc0Z0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQmlVbUZ1YXlBdElESWdMU0F4TENCcUlEMGdZbUYwWTJoU1lXNXJJQzBnTVRzZ2FTQStQU0F3T3lCcExTMHNJR290TFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsYzFOMGNpQXJQU0JnWEZ4dVlrbHVaR2xqWlhOYkpIdHBmVjBnUFNBa2UySmhkR05vVW1GdWF5QStJREVnUHlCZ1ltRjBZMmhKYm1ScFkyVnpXeVI3YW4xZFlDQTZJQ2RpWVhSamFFbHVaR2xqWlhNbmZUdGdPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdKeWIyRmtRMkZ6ZEVKRWFXMXpMbVp2Y2tWaFkyZ29hU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdjbVZ6VTNSeUlDczlJR0JjWEc1aVNXNWthV05sYzFza2UybDlYU0E5SURBN1lEdGNiaUFnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUhKbGMxTjBjaUFyUFNCZ1hGeHVZa2x1WkdsalpYTmJKSHRpVW1GdWF5QXRJREo5WFNBOUlIVXpNaWh5YjNjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0pKYm1ScFkyVnpXeVI3WWxKaGJtc2dMU0F4ZlYwZ1BTQjFNeklvWTI5c1NXNHBPMkE3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOVGRISTdYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ1lGeHVJQ0FnSUdadUlHMXRYM0psWVdSQktHSmhkR05vT2lCcE16SXNJSEp2ZHpvZ2FUTXlMQ0JqYjJ4SmJqb2dhVE15TENCaVlYUmphRWx1WkdsalpYTTZJQ1I3WW1GMFkyaFdZWEpwWVdKc1pTNTBlWEJsTG1sdVpHbGpaWE45S1NBdFBpQWtlMXh1SUNBZ0lDQWdJQ0FnSUhSNWNHVlRibWx3Y0dWMEtHTnZiWEJ2Ym1WdWRDd2daR0YwWVZSNWNHVXBmU0I3WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNBa2UzUjVjR1ZUYm1sd2NHVjBLR052YlhCdmJtVnVkQ3dnWkdGMFlWUjVjR1VwZlNnd0xqQXBPMXh1SUNBZ0lDQWdiR1YwSUdOdmJDQTlJR052YkVsdUlDb2dKSHRqYjIxd2IyNWxiblI5TzF4dUlDQWdJQ0FnYVdZb2NtOTNJRHdnZFc1cFptOXliWE11WkdsdFgyRmZiM1YwWlhJZ0ppWWdZMjlzSUR3Z2RXNXBabTl5YlhNdVpHbHRYMmx1Ym1WeUtWeHVJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWtlMmRsZEVGSmJtUnBZMlZ6S0NsOVhHNGdJQ0FnSUNBZ0lIWmhiSFZsSUQwZ0pIdGhWbUZ5YVdGaWJHVXVaMlYwUW5sSmJtUnBZMlZ6S0NkaFNXNWthV05sY3ljcGZUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCMllXeDFaVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1iaUJ0YlY5eVpXRmtRaWhpWVhSamFEb2dhVE15TENCeWIzYzZJR2t6TWl3Z1kyOXNTVzQ2SUdrek1pd2dZbUYwWTJoSmJtUnBZMlZ6T2lBa2UySmhkR05vVm1GeWFXRmliR1V1ZEhsd1pTNXBibVJwWTJWemZTa2dMVDRnSkh0Y2JpQWdJQ0FnSUNBZ0lDQjBlWEJsVTI1cGNIQmxkQ2hqYjIxd2IyNWxiblFzSUdSaGRHRlVlWEJsS1gwZ2UxeHVJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdKSHQwZVhCbFUyNXBjSEJsZENoamIyMXdiMjVsYm5Rc0lHUmhkR0ZVZVhCbEtYMG9NQzR3S1R0Y2JpQWdJQ0FnSUd4bGRDQmpiMndnUFNCamIyeEpiaUFxSUNSN1kyOXRjRzl1Wlc1MGZUdGNiaUFnSUNBZ0lHbG1LSEp2ZHlBOElIVnVhV1p2Y20xekxtUnBiVjlwYm01bGNpQW1KaUJqYjJ3Z1BDQjFibWxtYjNKdGN5NWthVzFmWWw5dmRYUmxjaWxjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSkh0blpYUkNTVzVrYVdObGN5Z3BmVnh1SUNBZ0lDQWdJQ0IyWVd4MVpTQTlJQ1I3WWxaaGNtbGhZbXhsTG1kbGRFSjVTVzVrYVdObGN5Z25Za2x1WkdsalpYTW5LWDA3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm00Z2JXMWZkM0pwZEdVb1ltRjBZMmc2SUdrek1pd2djbTkzT2lCcE16SXNJR052YkVsdU9pQnBNeklzSUhaaGJIVmxTVzQ2SUNSN2RIbHdaVk51YVhCd1pYUW9ZMjl0Y0c5dVpXNTBMQ0JrWVhSaFZIbHdaU2w5S1NCN1hHNGdJQ0FnSUNCc1pYUWdZMjlzSUQwZ1kyOXNTVzRnS2lBa2UyTnZiWEJ2Ym1WdWRIMDdYRzRnSUNBZ0lDQnBaaUFvY205M0lEd2dkVzVwWm05eWJYTXVaR2x0WDJGZmIzVjBaWElnSmlZZ1kyOXNJRHdnZFc1cFptOXliWE11WkdsdFgySmZiM1YwWlhJcElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnZG1Gc2RXVkpianRjYmlBZ0lDQWdJQ0FnYkdWMElHTnZiM0prY3lBOUlIWmxZek04YVRNeVBpaGlZWFJqYUN3Z2NtOTNMQ0JqYjJ4SmJpazdYRzRnSUNBZ0lDQWdJQ1I3WEc0Z0lDQWdJQ0FnSUNBZ2FHRnpRbWxoY3lBL1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdCMllXeDFaU0E5SUhaaGJIVmxJQ3NnSkh0cGMwTm9ZVzV1Wld4elRHRnpkQ0EvSUNkaWFXRnpXMk52YkVsdVhTY2dPaUJnSkh0MGVYQmxVMjVwY0hCbGRDaGpiMjF3YjI1bGJuUXNJR1JoZEdGVWVYQmxLWDBvWW1saGMxdHliM2RkS1dCOU8yQWdPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5KeUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSkh0aGNIQnNlVUZqZEdsMllYUnBiMjU5WEc0Z0lDQWdJQ0FnSUNSN2IzVjBjSFYwVm1GeWFXRmliR1V1YzJWMFFubEpibVJwWTJWektDZDJaV016UEhVek1qNG9ZMjl2Y21SektTY3NJQ2QyWVd4MVpTY3BmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCZ08xeHVJQ0FnSUNBZ2NtVjBkWEp1SUhOdmRYSmpaVHRjYmlBZ0lDQjlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdZM0psWVhSbFRXRjBiWFZzVUhKdlozSmhiVWx1Wm04Z1BWeHVJQ0FnSUNocGJuQjFkSE02SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhTd2dZV04wYVhaaGRHbHZia0YwZEhKcFluVjBaWE02SUVsdWRHVnlibUZzUVdOMGFYWmhkR2x2YmtGMGRISnBZblYwWlhNc0lHOTFkSEIxZEZOb1lYQmxPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3hjYmlBZ0lDQWdjbVZ6YUdGd1pXUlBkWFJ3ZFhSVGFHRndaVDg2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkTEZ4dUlDQWdJQ0JwYzBOb1lXNXVaV3h6VEdGemRDQTlJR1poYkhObElDOHFJRzl1YkhrZ2RYTmxaQ0JtYjNJZ1kyOXVkakprUW5sTllYUk5kV3dxTHlrNklGQnliMmR5WVcxSmJtWnZJRDArSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR0ZUYUdGd1pTQTlJR2x1Y0hWMGMxc3dYUzVrYVcxek8xeHVJQ0FnSUNBZ1kyOXVjM1FnWWxOb1lYQmxJRDBnYVc1d2RYUnpXekZkTG1ScGJYTTdYRzRnSUNBZ0lDQmpiMjV6ZENCdmRYUmxja1JwYlhOQklEMGdZVk5vWVhCbExuTnNhV05sS0RBc0lDMHlLVHRjYmlBZ0lDQWdJR052Ym5OMElHOTFkR1Z5UkdsdGMwSWdQU0JpVTJoaGNHVXVjMnhwWTJVb01Dd2dMVElwTzF4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwWlhKRWFXMXpJRDBnY21WemFHRndaV1JQZFhSd2RYUlRhR0Z3WlNBL0lISmxjMmhoY0dWa1QzVjBjSFYwVTJoaGNHVXVjMnhwWTJVb01Dd2dMVElwSURvZ2IzVjBjSFYwVTJoaGNHVXVjMnhwWTJVb01Dd2dMVElwTzF4dUlDQWdJQ0FnWTI5dWMzUWdZbUYwWTJoVGFYcGxJRDBnVTJoaGNHVlZkR2xzTG5OcGVtVW9iM1YwWlhKRWFXMXpLVHRjYmlBZ0lDQWdJR052Ym5OMElHUnBiVUZQZFhSbGNpQTlJR0ZUYUdGd1pWdGhVMmhoY0dVdWJHVnVaM1JvSUMwZ01sMDdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FXMUpibTVsY2lBOUlHRlRhR0Z3WlZ0aFUyaGhjR1V1YkdWdVozUm9JQzBnTVYwN1hHNGdJQ0FnSUNCamIyNXpkQ0JrYVcxQ1QzVjBaWElnUFNCaVUyaGhjR1ZiWWxOb1lYQmxMbXhsYm1kMGFDQXRJREZkTzF4dUlDQWdJQ0FnWTI5dWMzUWdhWE5XWldNMElEMGdaR2x0U1c1dVpYSWdKU0EwSUQwOVBTQXdJQ1ltSUdScGJVSlBkWFJsY2lBbElEUWdQVDA5SURBN1hHNWNiaUFnSUNBZ0lDOHZJRlJQUkU4NklHWnBibVVnZEhWdVpTQnphWHBsWEc0Z0lDQWdJQ0JqYjI1emRDQmxiR1Z0Wlc1MGMxQmxjbFJvY21WaFpDQTlJR1JwYlVGUGRYUmxjaUE4UFNBNElEOGdXelFzSURFc0lERmRJRG9nV3pRc0lEUXNJREZkTzF4dUlDQWdJQ0FnWTI5dWMzUWdkMjl5YTJkeWIzVndVMmw2WlRvZ1cyNTFiV0psY2l3Z2JuVnRZbVZ5TENCdWRXMWlaWEpkSUQwZ1d6Z3NJRGdzSURGZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWkdsemNHRjBZMmdnUFNCYlhHNGdJQ0FnSUNBZ0lFMWhkR2d1WTJWcGJDaGthVzFDVDNWMFpYSWdMeUIzYjNKclozSnZkWEJUYVhwbFd6QmRJQzhnWld4bGJXVnVkSE5RWlhKVWFISmxZV1JiTUYwcExGeHVJQ0FnSUNBZ0lDQk5ZWFJvTG1ObGFXd29aR2x0UVU5MWRHVnlJQzhnZDI5eWEyZHliM1Z3VTJsNlpWc3hYU0F2SUdWc1pXMWxiblJ6VUdWeVZHaHlaV0ZrV3pGZEtTeGNiaUFnSUNBZ0lDQWdUV0YwYUM1alpXbHNLR0poZEdOb1UybDZaU0F2SUhkdmNtdG5jbTkxY0ZOcGVtVmJNbDBnTHlCbGJHVnRaVzUwYzFCbGNsUm9jbVZoWkZzeVhTbGNiaUFnSUNBZ0lGMDdYRzVjYmlBZ0lDQWdJR052Ym5OMElHTnZiWEJ2Ym1WdWRITWdQU0JwYzFabFl6UWdQeUEwSURvZ01UdGNiaUFnSUNBZ0lHTnZibk4wSUdGVGFHRndaVlJsYlhBZ1BTQmJMaTR1YjNWMFpYSkVhVzF6UVN3Z1pHbHRRVTkxZEdWeUxDQmthVzFKYm01bGNpQXZJR052YlhCdmJtVnVkSE5kTzF4dUlDQWdJQ0FnWTI5dWMzUWdZVkpoYm1zZ1BTQmhVMmhoY0dWVVpXMXdMbXhsYm1kMGFEdGNiaUFnSUNBZ0lHTnZibk4wSUdKVGFHRndaVlJsYlhBZ1BTQmJMaTR1YjNWMFpYSkVhVzF6UWl3Z1pHbHRTVzV1WlhJc0lHUnBiVUpQZFhSbGNpQXZJR052YlhCdmJtVnVkSE5kTzF4dUlDQWdJQ0FnWTI5dWMzUWdZbEpoYm1zZ1BTQmlVMmhoY0dWVVpXMXdMbXhsYm1kMGFEdGNiaUFnSUNBZ0lHTnZibk4wSUc5MWRIQjFkRk5vWVhCbFZHVnRjQ0E5SUZ0aVlYUmphRk5wZW1Vc0lHUnBiVUZQZFhSbGNpd2daR2x0UWs5MWRHVnlJQzhnWTI5dGNHOXVaVzUwYzEwN1hHNGdJQ0FnSUNCamIyNXpkQ0J3Y205bmNtRnRWVzVwWm05eWJYTTZJRkJ5YjJkeVlXMVZibWxtYjNKdFcxMGdQU0JiWEc0Z0lDQWdJQ0FnSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzVwYm5Rek1pd2daR0YwWVRvZ1pHbHRRVTkxZEdWeWZTd2dlM1I1Y0dVNklFUmhkR0ZVZVhCbExtbHVkRE15TENCa1lYUmhPaUJrYVcxQ1QzVjBaWEo5TEZ4dUlDQWdJQ0FnSUNCN2RIbHdaVG9nUkdGMFlWUjVjR1V1YVc1ME16SXNJR1JoZEdFNklHUnBiVWx1Ym1WeWZWeHVJQ0FnSUNBZ1hUdGNiaUFnSUNBZ0lHRndjR1Z1WkVGamRHbDJZWFJwYjI1VmJtbG1iM0p0YzBSaGRHRW9ZV04wYVhaaGRHbHZia0YwZEhKcFluVjBaWE1zSUhCeWIyZHlZVzFWYm1sbWIzSnRjeWs3WEc0Z0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTXVjSFZ6YUNndUxpNWpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5aHZkWFJsY2tScGJYTXNJR0ZUYUdGd1pWUmxiWEFzSUdKVGFHRndaVlJsYlhBcEtUdGNiaUFnSUNBZ0lHTnZibk4wSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6T2lCUWNtOW5jbUZ0U1c1d2RYUlVaVzV6YjNKSmJtWnZSR1Z3Wlc1a1pXNWplVnRkSUQwZ1d5ZHlZVzVySnl3Z0ozSmhibXNuWFR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnYUdGelFtbGhjeUE5SUdsdWNIVjBjeTVzWlc1bmRHZ2dQaUF5TzF4dUlDQWdJQ0FnYVdZZ0tHaGhjMEpwWVhNcElIdGNiaUFnSUNBZ0lDQWdjSEp2WjNKaGJWVnVhV1p2Y20xekxuQjFjMmdvTGk0dVkzSmxZWFJsVkdWdWMyOXlVMmhoY0dWV1lYSnBZV0pzWlhNb2FXNXdkWFJ6V3pKZExtUnBiWE1wS1R0Y2JpQWdJQ0FnSUNBZ2FXNXdkWFJFWlhCbGJtUmxibU5wWlhNdWNIVnphQ2duY21GdWF5Y3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdjSEp2WjNKaGJWVnVhV1p2Y20xekxuQjFjMmdvTGk0dVkzSmxZWFJsVkdWdWMyOXlVMmhoY0dWV1lYSnBZV0pzWlhNb2IzVjBjSFYwVTJoaGNHVlVaVzF3S1NrN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU0E5SUNoemFHRmtaWEpJWld4d1pYSTZJRk5vWVdSbGNraGxiSEJsY2lrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmlZWFJqYUZKaGJtc2dQU0J2ZFhSbGNrUnBiWE11YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmlZWFJqYUVScGJYTWdQU0JwYm5SbGNtNWhiRlpoY21saFlteGxLQ2RpWVhSamFFUnBiWE1uTENCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVc0lHSmhkR05vVW1GdWF5d2dNU2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1JoZEdGVWVYQmxJRDBnZEdWdWMyOXlWSGx3WlZSdlYzTm5iRk4wYjNKaFoyVlVlWEJsS0dsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlNrN1hHNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1FTQTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb0oyRW5MQ0JwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1VzSUdGU1lXNXJMQ0JqYjIxd2IyNWxiblJ6S1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnUWlBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjJJbkxDQnBibkIxZEhOYk1WMHVaR0YwWVZSNWNHVXNJR0pTWVc1ckxDQmpiMjF3YjI1bGJuUnpLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMElEMGdiM1YwY0hWMFZtRnlhV0ZpYkdVb0ozSmxjM1ZzZENjc0lHbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pTd2diM1YwY0hWMFUyaGhjR1ZVWlcxd0xteGxibWQwYUN3Z1kyOXRjRzl1Wlc1MGN5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElHbHVjSFYwVm1GeWFXRmliR1Z6SUQwZ1cwRXNJRUpkTzF4dUlDQWdJQ0FnSUNCcFppQW9hR0Z6UW1saGN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR0pwWVhORGIyMXdiMjVsYm5SeklEMGdhWE5EYUdGdWJtVnNjMHhoYzNRZ1B5QmpiMjF3YjI1bGJuUnpJRG9nTVR0Y2JpQWdJQ0FnSUNBZ0lDQnBibkIxZEZaaGNtbGhZbXhsY3k1d2RYTm9LR2x1Y0hWMFZtRnlhV0ZpYkdVb0oySnBZWE1uTENCcGJuQjFkSE5iTWwwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzeVhTNWthVzF6TG14bGJtZDBhQ3dnWW1saGMwTnZiWEJ2Ym1WdWRITXBLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCamIyNXpkQ0IxYm1sbWIzSnRjem9nVlc1cFptOXliWE5CY25KaGVWUjVjR1VnUFZ4dUlDQWdJQ0FnSUNBZ0lDQWdXM3R1WVcxbE9pQW5aR2x0WDJGZmIzVjBaWEluTENCMGVYQmxPaUFuYVRNeUozMHNJSHR1WVcxbE9pQW5aR2x0WDJKZmIzVjBaWEluTENCMGVYQmxPaUFuYVRNeUozMHNJSHR1WVcxbE9pQW5aR2x0WDJsdWJtVnlKeXdnZEhsd1pUb2dKMmt6TWlkOVhUdGNiaUFnSUNBZ0lDQWdZWEJ3Wlc1a1FXTjBhWFpoZEdsdmJsVnVhV1p2Y20xektHRmpkR2wyWVhScGIyNUJkSFJ5YVdKMWRHVnpMQ0IxYm1sbWIzSnRjeWs3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0poYzJWVWVYQmxJRDBnZEdWdWMyOXlWSGx3WlZSdlYzTm5iRk4wYjNKaFoyVlVlWEJsS0c5MWRIQjFkQzUwZVhCbExuUmxibk52Y2lrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdGd2NHeDVRV04wYVhaaGRHbHZiaUE5SUdkbGRFRmpkR2wyWVhScGIyNVRibWx3Y0dWMEtHRmpkR2wyWVhScGIyNUJkSFJ5YVdKMWRHVnpMQ0J2ZFhSd2RYUXVkSGx3WlM1MllXeDFaU3dnWW1GelpWUjVjR1VwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JrWldOc1lYSmxSblZ1WTNScGIyNXpJRDBnYldGMFRYVnNVbVZoWkZkeWFYUmxSbTVUYjNWeVkyVW9YRzRnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiMjVsYm5SekxDQm9ZWE5DYVdGekxDQmhjSEJzZVVGamRHbDJZWFJwYjI0c0lGdGlZWFJqYUVScGJYTXNJRUVzSUVJc0lHOTFkSEIxZEYwc0lGdHZkWFJsY2tScGJYTkJMQ0J2ZFhSbGNrUnBiWE5DTENCdmRYUmxja1JwYlhOZExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYVhORGFHRnVibVZzYzB4aGMzUXBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZRnh1SUNBa2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJoaFpHVnlTR1ZzY0dWeUxuSmxaMmx6ZEdWeVZXNXBabTl5YlhNb2RXNXBabTl5YlhNcExuSmxaMmx6ZEdWeVNXNTBaWEp1WVd4V1lYSnBZV0pzWlhNb1ltRjBZMmhFYVcxektTNWtaV05zWVhKbFZtRnlhV0ZpYkdWektGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDNHVMbWx1Y0hWMFZtRnlhV0ZpYkdWekxDQnZkWFJ3ZFhRcGZWeHVJQ0FrZTJSbFkyeGhjbVZHZFc1amRHbHZibk45WEc0Z0lDUjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcGMxWmxZelFnUHlCdFlXdGxUV0YwVFhWc1VHRmphMlZrVm1Wak5GTnZkWEpqWlNobGJHVnRaVzUwYzFCbGNsUm9jbVZoWkN3Z2QyOXlhMmR5YjNWd1UybDZaU3dnWkdGMFlWUjVjR1VzSUdKaGRHTm9SR2x0Y3lrZ09seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYldGclpVMWhkRTExYkZCaFkydGxaRk52ZFhKalpTaGxiR1Z0Wlc1MGMxQmxjbFJvY21WaFpDd2dkMjl5YTJkeWIzVndVMmw2WlN3Z1pHRjBZVlI1Y0dVc0lHSmhkR05vUkdsdGN5bDlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWUR0Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnSUNCdVlXMWxPaUFuVFdGMFRYVnNKeXhjYmlBZ0lDQWdJQ0FnYzJoaFpHVnlRMkZqYUdVNklIdGNiaUFnSUNBZ0lDQWdJQ0JvYVc1ME9pQmdKSHRsYkdWdFpXNTBjMUJsY2xSb2NtVmhaSDA3Skh0aFkzUnBkbUYwYVc5dVFYUjBjbWxpZFhSbGN5NWhZM1JwZG1GMGFXOXVmVHNrZTJselZtVmpOSDA3Skh0cGMwTm9ZVzV1Wld4elRHRnpkSDFnTEZ4dUlDQWdJQ0FnSUNBZ0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWelhHNGdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJR2RsZEZKMWJrUmhkR0U2SUNncElEMCtJQ2g3WEc0Z0lDQWdJQ0FnSUNBZ2IzVjBjSFYwY3pvZ1czdGthVzF6T2lCdmRYUndkWFJUYUdGd1pTd2daR0YwWVZSNWNHVTZJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaWDFkTEZ4dUlDQWdJQ0FnSUNBZ0lHUnBjM0JoZEdOb1IzSnZkWEE2SUh0NE9pQmthWE53WVhSamFGc3dYU3dnZVRvZ1pHbHpjR0YwWTJoYk1WMHNJSG82SUdScGMzQmhkR05vV3pKZGZTeGNiaUFnSUNBZ0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTmNiaUFnSUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0FnSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU3hjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdmVHRjYmlJc0lDSXZLaXBjYmlBcUlFQnNhV05sYm5ObFhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE9TQkhiMjluYkdVZ1RFeERMaUJCYkd3Z1VtbG5hSFJ6SUZKbGMyVnlkbVZrTGx4dUlDb2dUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUZ3WVdOb1pTQk1hV05sYm5ObExDQldaWEp6YVc5dUlESXVNQ0FvZEdobElGd2lUR2xqWlc1elpWd2lLVHRjYmlBcUlIbHZkU0J0WVhrZ2JtOTBJSFZ6WlNCMGFHbHpJR1pwYkdVZ1pYaGpaWEIwSUdsdUlHTnZiWEJzYVdGdVkyVWdkMmwwYUNCMGFHVWdUR2xqWlc1elpTNWNiaUFxSUZsdmRTQnRZWGtnYjJKMFlXbHVJR0VnWTI5d2VTQnZaaUIwYUdVZ1RHbGpaVzV6WlNCaGRGeHVJQ3BjYmlBcUlHaDBkSEE2THk5M2QzY3VZWEJoWTJobExtOXlaeTlzYVdObGJuTmxjeTlNU1VORlRsTkZMVEl1TUZ4dUlDcGNiaUFxSUZWdWJHVnpjeUJ5WlhGMWFYSmxaQ0JpZVNCaGNIQnNhV05oWW14bElHeGhkeUJ2Y2lCaFozSmxaV1FnZEc4Z2FXNGdkM0pwZEdsdVp5d2djMjltZEhkaGNtVmNiaUFxSUdScGMzUnlhV0oxZEdWa0lIVnVaR1Z5SUhSb1pTQk1hV05sYm5ObElHbHpJR1JwYzNSeWFXSjFkR1ZrSUc5dUlHRnVJRndpUVZNZ1NWTmNJaUJDUVZOSlV5eGNiaUFxSUZkSlZFaFBWVlFnVjBGU1VrRk9WRWxGVXlCUFVpQkRUMDVFU1ZSSlQwNVRJRTlHSUVGT1dTQkxTVTVFTENCbGFYUm9aWElnWlhod2NtVnpjeUJ2Y2lCcGJYQnNhV1ZrTGx4dUlDb2dVMlZsSUhSb1pTQk1hV05sYm5ObElHWnZjaUIwYUdVZ2MzQmxZMmxtYVdNZ2JHRnVaM1ZoWjJVZ1oyOTJaWEp1YVc1bklIQmxjbTFwYzNOcGIyNXpJR0Z1WkZ4dUlDb2diR2x0YVhSaGRHbHZibk1nZFc1a1pYSWdkR2hsSUV4cFkyVnVjMlV1WEc0Z0tpQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUlDb3ZYRzVjYmk4dklITmhiWEJzWldRZ1puSnZiU0JiUUhSbGJuTnZjbVpzYjNjdmRHWnFjMTBnZEdacWN5MWlZV05yWlc1a0xYZGxZbWR3ZFM5emNtTXZZMjl1ZGpKa1gyMXRYM2RsWW1kd2RTNTBjMXh1THk5Y2JpOHZJRzF2WkdsbWFXVmtJSFJ2SUdacGRDQjBhR1VnYm1WbFpITWdiMllnZEdobElIQnliMnBsWTNSY2JseHVhVzF3YjNKMElIdEVZWFJoVkhsd1pYMGdabkp2YlNBbkxpNHZMaTR2TGk0dkxpNHZkMkZ6YlMxamIyMXRiMjRuTzF4dWFXMXdiM0owSUh0TVQwZGZSRVZDVlVkOUlHWnliMjBnSnk0dUx5NHVMeTR1TDJ4dlp5YzdYRzVwYlhCdmNuUWdlMVJsYm5OdmNsWnBaWGQ5SUdaeWIyMGdKeTR1THk0dUx5NHVMM1JsYm5OdmNpMTJhV1YzSnp0Y2JtbHRjRzl5ZENCN1VISnZaM0poYlVsdVptOHNJRkJ5YjJkeVlXMUpibkIxZEZSbGJuTnZja2x1Wm05RVpYQmxibVJsYm1ONUxDQlFjbTluY21GdFZXNXBabTl5YlgwZ1puSnZiU0FuTGk0dkxpNHZkSGx3WlhNbk8xeHVhVzF3YjNKMElIdGpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5d2dhVzV3ZFhSV1lYSnBZV0pzWlN3Z2IzVjBjSFYwVm1GeWFXRmliR1VzSUZOb1lXUmxja2hsYkhCbGNpd2dkR1Z1YzI5eVZIbHdaVlJ2VjNObmJGTjBiM0poWjJWVWVYQmxMQ0JWYm1sbWIzSnRjMEZ5Y21GNVZIbHdaWDBnWm5KdmJTQW5MaTR2WTI5dGJXOXVKenRjYm1sdGNHOXlkQ0I3UTI5dWRrRjBkSEpwWW5WMFpYTjlJR1p5YjIwZ0p5NHVMMk52Ym5Zbk8xeHVhVzF3YjNKMElIdGhjSEJsYm1SQlkzUnBkbUYwYVc5dVZXNXBabTl5YlhNc0lHRndjR1Z1WkVGamRHbDJZWFJwYjI1VmJtbG1iM0p0YzBSaGRHRXNJR2RsZEVGamRHbDJZWFJwYjI1VGJtbHdjR1YwZlNCbWNtOXRJQ2N1TGk5bWRYTmxMWFYwYVd4ekp6dGNibHh1YVcxd2IzSjBJSHRpYVdGelUyNXBjSEJsZEN3Z2RIbHdaVk51YVhCd1pYUjlJR1p5YjIwZ0p5NHZZV04wYVhaaGRHbHZibDkxZEdsc0p6dGNibWx0Y0c5eWRDQjdkWFJwYkVaMWJtTjBhVzl1YzMwZ1puSnZiU0FuTGk5amIyNTJYM1YwYVd3bk8xeHVhVzF3YjNKMElIdHRZV3RsVFdGMFRYVnNVR0ZqYTJWa1UyOTFjbU5sTENCdFlXdGxUV0YwVFhWc1VHRmphMlZrVm1Wak5GTnZkWEpqWlgwZ1puSnZiU0FuTGk5dFlYUnRkV3hmY0dGamEyVmtYM2RsWW1kd2RTYzdYRzVjYm1OdmJuTjBJR052Ym5ZeVpFTnZiVzF2YmxOdWFYQndaWFFnUFZ4dUlDQWdJQ2hwYzBOb1lXNXVaV3h6VEdGemREb2dZbTl2YkdWaGJpd2dabWwwUVU5MWRHVnlPaUJpYjI5c1pXRnVMQ0JtYVhSQ1QzVjBaWEk2SUdKdmIyeGxZVzRzSUdacGRFbHVibVZ5T2lCaWIyOXNaV0Z1TENCaFpHUkNhV0Z6SUQwZ1ptRnNjMlVzWEc0Z0lDQWdJR0YwZEhKcFluVjBaWE02SUVOdmJuWkJkSFJ5YVdKMWRHVnpMQ0JwYm01bGNrVnNaVzFsYm5SVGFYcGxXQ0E5SURRc0lHbHVibVZ5Uld4bGJXVnVkRk5wZW1WWElEMGdOQ3dnYVc1dVpYSkZiR1Z0Wlc1MFUybDZaU0E5SURRc1hHNGdJQ0FnSUdSaGRHRlVlWEJsSUQwZ0oyWXpNaWNwT2lCemRISnBibWNnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWjJWMFdGTnVhWEJ3WlhRZ1BTQW9hVzV1WlhKRmJHVnRaVzUwVTJsNlpUb2diblZ0WW1WeUtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhOM2FYUmphQ0FvYVc1dVpYSkZiR1Z0Wlc1MFUybDZaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5jbVZ6UkdGMFlTQTlJSGhiZUVsdVpHVjRYVHNuTzF4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnTXpwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdjbVZ6UkdGMFlTQTlJSFpsWXpNOEpIdGtZWFJoVkhsd1pYMCtLSGhiZUVsdVpHVjRYU3dnZUZ0NFNXNWtaWGdnS3lBeFhTd2dlRnQ0U1c1a1pYZ2dLeUF5WFNrN1lEdGNiaUFnSUNBZ0lDQWdJQ0JqWVhObElEUTZYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSjNKbGMwUmhkR0VnUFNCNFczaEpibVJsZUNBdklEUmRPeWM3WEc0Z0lDQWdJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdhVzV1WlhKRmJHVnRaVzUwVTJsNlpTQWtlMmx1Ym1WeVJXeGxiV1Z1ZEZOcGVtVjlJR2x6SUc1dmRDQnpkWEJ3YjNKMFpXUXVZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCamIyNXpkQ0JuWlhSWFUyNXBjSEJsZENBOUlDaHBibTVsY2tWc1pXMWxiblJUYVhwbE9pQnVkVzFpWlhJcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYzNkcGRHTm9JQ2hwYm01bGNrVnNaVzFsYm5SVGFYcGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0F4T2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZHlaWFIxY200Z2QxdHliM2NnS2lCcE16SW9kVzVwWm05eWJYTXVkMTl6YUdGd1pWc3pYU2tnS3lCamIyeEpibDA3Snp0Y2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSURRNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdKM0psZEhWeWJpQjNXM0p2ZHlBcUlHa3pNaWgxYm1sbWIzSnRjeTUzWDNOb1lYQmxXek5kS1NBdklEUWdLeUJqYjJ4SmJsMDdKenRjYmlBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQnBibTVsY2tWc1pXMWxiblJUYVhwbElDUjdhVzV1WlhKRmJHVnRaVzUwVTJsNlpYMGdhWE1nYm05MElITjFjSEJ2Y25SbFpDNWdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUdOdmJuTjBJR052YjNKa1FWTnVhWEJ3WlhRZ1BTQnBjME5vWVc1dVpXeHpUR0Z6ZENBL0lHQmNiaUFnSUNCc1pYUWdZMjl2Y21RZ1BTQjJaV00wUEdrek1qNG9ZbUYwWTJnc0lIaFNiM2NzSUhoRGIyd3NJSGhEYUNrN1hHNGdJQ0FnWUNBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmdYRzRnSUNBZ2JHVjBJR052YjNKa0lEMGdkbVZqTkR4cE16SStLR0poZEdOb0xDQjRRMmdzSUhoU2IzY3NJSGhEYjJ3cE8xeHVJQ0FnSUdBN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdOdmIzSmtVbVZ6VTI1cGNIQmxkQ0E5SUdselEyaGhibTVsYkhOTVlYTjBJRDhnWUZ4dUlDQWdJR3hsZENCamIyOXlaSE1nUFNCMlpXTTBQR2t6TWo0b1hHNGdJQ0FnSUNCaVlYUmphQ3hjYmlBZ0lDQWdJSEp2ZHlBdklHOTFkRmRwWkhSb0xGeHVJQ0FnSUNBZ2NtOTNJQ1VnYjNWMFYybGtkR2dzWEc0Z0lDQWdJQ0JqYjJ3cE8xeHVJQ0FnSUdBZ09seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JnWEc0Z0lDQWdiR1YwSUdOdmIzSmtjeUE5SUhabFl6UThhVE15UGloY2JpQWdJQ0FnSUdKaGRHTm9MRnh1SUNBZ0lDQWdjbTkzTEZ4dUlDQWdJQ0FnWTI5c0lDOGdiM1YwVjJsa2RHZ3NYRzRnSUNBZ0lDQmpiMndnSlNCdmRYUlhhV1IwYUNrN1hHNGdJQ0FnWUR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnZUVobGFXZG9kQ0E5SUdselEyaGhibTVsYkhOTVlYTjBJRDhnSjJrek1paDFibWxtYjNKdGN5NTRYM05vWVhCbFd6RmRLU2NnT2lBbmFUTXlLSFZ1YVdadmNtMXpMbmhmYzJoaGNHVmJNbDBwSnp0Y2JpQWdJQ0FnSUdOdmJuTjBJSGhYYVdSMGFDQTlJR2x6UTJoaGJtNWxiSE5NWVhOMElEOGdKMmt6TWloMWJtbG1iM0p0Y3k1NFgzTm9ZWEJsV3pKZEtTY2dPaUFuYVRNeUtIVnVhV1p2Y20xekxuaGZjMmhoY0dWYk0xMHBKenRjYmlBZ0lDQWdJR052Ym5OMElISnZkeUE5SUdselEyaGhibTVsYkhOTVlYTjBJRDhnSjNKdmR5Y2dPaUFuWTI5c0p6dGNiaUFnSUNBZ0lHTnZibk4wSUdOdmJDQTlJR2x6UTJoaGJtNWxiSE5NWVhOMElEOGdKMk52YkNjZ09pQW5jbTkzSnp0Y2JpQWdJQ0FnSUdOdmJuTjBJSEpsWVdSWVUyNXBjSEJsZENBOUlHQmNiaUFnSUNCc1pYUWdhVzVEYUdGdWJtVnNjeUE5SUdrek1paDFibWxtYjNKdGN5NTNYM05vWVhCbFd6SmRLVHRjYmlBZ0lDQnNaWFFnYjNWMFYybGtkR2dnUFNBa2UybHpRMmhoYm01bGJITk1ZWE4wSUQ4Z0oya3pNaWgxYm1sbWIzSnRjeTV5WlhOMWJIUmZjMmhoY0dWYk1sMHBKeUE2SUNkcE16SW9kVzVwWm05eWJYTXVjbVZ6ZFd4MFgzTm9ZWEJsV3pOZEtTZDlPMXh1SUNBZ0lHeGxkQ0J2ZFhSU2IzY2dQU0FrZTNKdmQzMGdMeUJ2ZFhSWGFXUjBhRHRjYmlBZ0lDQnNaWFFnYjNWMFEyOXNJRDBnSkh0eWIzZDlJQ1VnYjNWMFYybGtkR2c3WEc1Y2JpQWdJQ0JzWlhRZ1YxSnZkeUE5SUNSN1kyOXNmU0F2SUNocE16SW9kVzVwWm05eWJYTXVkMTl6YUdGd1pWc3hYU2tnS2lCcGJrTm9ZVzV1Wld4ektUdGNiaUFnSUNCc1pYUWdWME52YkNBOUlDUjdZMjlzZlNBdklHbHVRMmhoYm01bGJITWdKU0JwTXpJb2RXNXBabTl5YlhNdWQxOXphR0Z3WlZzeFhTazdYRzRnSUNBZ2JHVjBJSGhTYjNjZ1BTQnZkWFJTYjNjZ0tpQjFibWxtYjNKdGN5NXpkSEpwWkdWYk1GMGdLeUIxYm1sbWIzSnRjeTVrYVd4aGRHbHZibHN3WFNBcUlGZFNiM2NnTFNCMWJtbG1iM0p0Y3k1d1lXUmJNRjA3WEc0Z0lDQWdiR1YwSUhoRGIyd2dQU0J2ZFhSRGIyd2dLaUIxYm1sbWIzSnRjeTV6ZEhKcFpHVmJNVjBnS3lCMWJtbG1iM0p0Y3k1a2FXeGhkR2x2YmxzeFhTQXFJRmREYjJ3Z0xTQjFibWxtYjNKdGN5NXdZV1JiTVYwN1hHNGdJQ0FnYkdWMElIaERhQ0E5SUNSN1kyOXNmU0FsSUdsdVEyaGhibTVsYkhNN1hHNGdJQ0FnZG1GeUlISmxjMFJoZEdFZ1BTQWtlM1I1Y0dWVGJtbHdjR1YwS0dsdWJtVnlSV3hsYldWdWRGTnBlbVZZTENCa1lYUmhWSGx3WlNsOUtEQXVNQ2s3WEc0Z0lDQWdMeThnVkdobElHSnZkVzVrY3lCamFHVmphMmx1WnlCcGN5QmhiSGRoZVhNZ2JtVmxaR1ZrSUhOcGJtTmxJSGRsSUhWelpTQnBkQ0IwYnlCd1lXUWdlbVZ5YnlCbWIzSmNiaUFnSUNBdkx5QjBhR1VnSjNOaGJXVW5JSEJoWkdScGJtY2dkSGx3WlM1Y2JpQWdJQ0JwWmlBb2VGSnZkeUErUFNBd0lDWW1JSGhTYjNjZ1BDQWtlM2hJWldsbmFIUjlJQ1ltSUhoRGIyd2dQajBnTUNBbUppQjRRMjlzSUR3Z0pIdDRWMmxrZEdoOUtTQjdYRzRnSUNBZ0lDQWtlMk52YjNKa1FWTnVhWEJ3WlhSOVhHNGdJQ0FnSUNCc1pYUWdlRWx1WkdWNElEMGdaMlYwU1c1a1pYaEdjbTl0UTI5dmNtUnpORVFvWTI5dmNtUXNJSFpsWXpROGFUTXlQaWgxYm1sbWIzSnRjeTU0WDNOb1lYQmxLU2s3WEc0Z0lDQWdJQ0FrZTJkbGRGaFRibWx3Y0dWMEtHbHVibVZ5Uld4bGJXVnVkRk5wZW1WWUtYMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSEpsYzBSaGRHRTdZRHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdjMkZ0Y0d4bFdDQTlJR2x6UTJoaGJtNWxiSE5NWVhOMElEOGdLR1pwZEVGUGRYUmxjaUFtSmlCbWFYUkpibTVsY2lBL0lHQmNiaUFnSUNCc1pYUWdZMjlzSUQwZ1kyOXNTVzRnS2lBa2UybHVibVZ5Uld4bGJXVnVkRk5wZW1WWWZUdGNiaUFnSUNBa2UzSmxZV1JZVTI1cGNIQmxkSDFnSURwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmdYRzRnSUNBZ2JHVjBJR052YkNBOUlHTnZiRWx1SUNvZ0pIdHBibTVsY2tWc1pXMWxiblJUYVhwbFdIMDdYRzRnSUNBZ2FXWWdLSEp2ZHlBOElIVnVhV1p2Y20xekxtUnBiVjloWDI5MWRHVnlJQ1ltSUdOdmJDQThJSFZ1YVdadmNtMXpMbVJwYlY5cGJtNWxjaWtnZTF4dUlDQWdJQ0FnSkh0eVpXRmtXRk51YVhCd1pYUjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUFrZTNSNWNHVlRibWx3Y0dWMEtHbHVibVZ5Uld4bGJXVnVkRk5wZW1WWUxDQmtZWFJoVkhsd1pTbDlLREF1TUNrN1lDa2dPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0tHWnBkRWx1Ym1WeUlDWW1JR1pwZEVKUGRYUmxjaUEvSUdCY2JpQWdJQ0JzWlhRZ1kyOXNJRDBnWTI5c1NXNGdLaUFrZTJsdWJtVnlSV3hsYldWdWRGTnBlbVZZZlR0Y2JpQWdJQ0FrZTNKbFlXUllVMjVwY0hCbGRIMWdJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCZ1hHNGdJQ0FnYkdWMElHTnZiQ0E5SUdOdmJFbHVJQ29nSkh0cGJtNWxja1ZzWlcxbGJuUlRhWHBsV0gwN1hHNGdJQ0FnYVdZZ0tISnZkeUE4SUhWdWFXWnZjbTF6TG1ScGJWOXBibTVsY2lBbUppQmpiMndnUENCMWJtbG1iM0p0Y3k1a2FXMWZZbDl2ZFhSbGNpa2dlMXh1SUNBZ0lDQWdKSHR5WldGa1dGTnVhWEJ3WlhSOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQWtlM1I1Y0dWVGJtbHdjR1YwS0dsdWJtVnlSV3hsYldWdWRGTnBlbVZZTENCa1lYUmhWSGx3WlNsOUtEQXVNQ2s3WUNrN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUhOaGJYQnNaVmNnUFNCZ0pIdG5aWFJYVTI1cGNIQmxkQ2hwYm01bGNrVnNaVzFsYm5SVGFYcGxWeWw5WUR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnY21WelZIbHdaU0E5SUhSNWNHVlRibWx3Y0dWMEtHbHVibVZ5Uld4bGJXVnVkRk5wZW1Vc0lHUmhkR0ZVZVhCbEtUdGNiaUFnSUNBZ0lHTnZibk4wSUdGVWVYQmxJRDFjYmlBZ0lDQWdJQ0FnSUNCcGMwTm9ZVzV1Wld4elRHRnpkQ0EvSUhSNWNHVlRibWx3Y0dWMEtHbHVibVZ5Uld4bGJXVnVkRk5wZW1WWUxDQmtZWFJoVkhsd1pTa2dPaUIwZVhCbFUyNXBjSEJsZENocGJtNWxja1ZzWlcxbGJuUlRhWHBsVnl3Z1pHRjBZVlI1Y0dVcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWWxSNWNHVWdQVnh1SUNBZ0lDQWdJQ0FnSUdselEyaGhibTVsYkhOTVlYTjBJRDhnZEhsd1pWTnVhWEJ3WlhRb2FXNXVaWEpGYkdWdFpXNTBVMmw2WlZjc0lHUmhkR0ZVZVhCbEtTQTZJSFI1Y0dWVGJtbHdjR1YwS0dsdWJtVnlSV3hsYldWdWRGTnBlbVZZTENCa1lYUmhWSGx3WlNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JoY0hCc2VVRmpkR2wyWVhScGIyNGdQU0JuWlhSQlkzUnBkbUYwYVc5dVUyNXBjSEJsZENoaGRIUnlhV0oxZEdWekxDQnlaWE5VZVhCbExDQmtZWFJoVkhsd1pTazdYRzRnSUNBZ0lDQmpiMjV6ZENCMWMyVnlRMjlrWlNBOUlHQmNiaUFnSUNCbWJpQnRiVjl5WldGa1FTaGlZWFJqYURvZ2FUTXlMQ0J5YjNjZ09pQnBNeklzSUdOdmJFbHVJRG9nYVRNeUtTQXRQaUFrZTJGVWVYQmxmU0I3WEc0Z0lDQWdJQ0FrZTJselEyaGhibTVsYkhOTVlYTjBJRDhnYzJGdGNHeGxXQ0E2SUhOaGJYQnNaVmQ5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdabTRnYlcxZmNtVmhaRUlvWW1GMFkyZzZJR2t6TWl3Z2NtOTNJRG9nYVRNeUxDQmpiMnhKYmlBNklHa3pNaWtnTFQ0Z0pIdGlWSGx3WlgwZ2UxeHVJQ0FnSUNBZ0pIdHBjME5vWVc1dVpXeHpUR0Z6ZENBL0lITmhiWEJzWlZjZ09pQnpZVzF3YkdWWWZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdadUlHMXRYM2R5YVhSbEtHSmhkR05vT2lCcE16SXNJSEp2ZHlBNklHa3pNaXdnWTI5c1NXNGdPaUJwTXpJc0lIWmhiSFZsU1c0Z09pQWtlM0psYzFSNWNHVjlLU0I3WEc0Z0lDQWdJQ0JzWlhRZ1kyOXNJRDBnWTI5c1NXNGdLaUFrZTJsdWJtVnlSV3hsYldWdWRGTnBlbVY5TzF4dUlDQWdJQ0FnYVdZZ0tISnZkeUE4SUhWdWFXWnZjbTF6TG1ScGJWOWhYMjkxZEdWeUlDWW1JR052YkNBOElIVnVhV1p2Y20xekxtUnBiVjlpWDI5MWRHVnlLVnh1SUNBZ0lDQWdlMXh1SUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnZG1Gc2RXVkpianRjYmlBZ0lDQWdJR3hsZENCdmRYUlhhV1IwYUNBOUlDUjdhWE5EYUdGdWJtVnNjMHhoYzNRZ1B5QW5hVE15S0hWdWFXWnZjbTF6TG5KbGMzVnNkRjl6YUdGd1pWc3lYU2tuSURvZ0oya3pNaWgxYm1sbWIzSnRjeTV5WlhOMWJIUmZjMmhoY0dWYk0xMHBKMzA3WEc0Z0lDQWdJQ0FrZTJOdmIzSmtVbVZ6VTI1cGNIQmxkSDFjYmlBZ0lDQWdJQ1I3WW1saGMxTnVhWEJ3WlhRb1lXUmtRbWxoY3lsOVhHNGdJQ0FnSUNBa2UyRndjR3g1UVdOMGFYWmhkR2x2Ym4xY2JpQWdJQ0FnSUhObGRFOTFkSEIxZEVGMFEyOXZjbVJ6S0dOdmIzSmtjMXN3WFN3Z1kyOXZjbVJ6V3pGZExDQmpiMjl5WkhOYk1sMHNJR052YjNKa2Mxc3pYU3dnZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWdPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIVnpaWEpEYjJSbE8xeHVJQ0FnSUgwN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCamNtVmhkR1ZEYjI1Mk1rUk5ZWFJOZFd4UWNtOW5jbUZ0U1c1bWJ5QTlYRzRnSUNBZ0tHbHVjSFYwY3pvZ2NtVmhaRzl1YkhrZ1ZHVnVjMjl5Vm1sbGQxdGRMQ0JoZEhSeWFXSjFkR1Z6T2lCRGIyNTJRWFIwY21saWRYUmxjeXdnYjNWMGNIVjBVMmhoY0dVNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZExDQmthVzFCVDNWMFpYSTZJRzUxYldKbGNpeGNiaUFnSUNBZ1pHbHRRazkxZEdWeU9pQnVkVzFpWlhJc0lHUnBiVWx1Ym1WeU9pQnVkVzFpWlhJc0lHaGhjMEpwWVhNNklHSnZiMnhsWVc0c0lITmxjWFZsYm5ScFlXeEJZMk5sYzNOQ2VWUm9jbVZoWkhNNklHSnZiMnhsWVc0cE9pQlFjbTluY21GdFNXNW1ieUE5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYzBOb1lXNXVaV3h6VEdGemRDQTlJR0YwZEhKcFluVjBaWE11Wm05eWJXRjBJRDA5UFNBblRraFhReWM3WEc0Z0lDQWdJQ0JqYjI1emRDQnBia05vWVc1dVpXeHpJRDBnYVhORGFHRnVibVZzYzB4aGMzUWdQeUJwYm5CMWRITmJNRjB1WkdsdGMxc3pYU0E2SUdsdWNIVjBjMXN3WFM1a2FXMXpXekZkTzF4dUlDQWdJQ0FnWTI5dWMzUWdZbUYwWTJoVGFYcGxJRDBnYjNWMGNIVjBVMmhoY0dWYk1GMDdYRzRnSUNBZ0lDQmpiMjV6ZENCdmRYUlhhV1IwYUNBOUlHbHpRMmhoYm01bGJITk1ZWE4wSUQ4Z2IzVjBjSFYwVTJoaGNHVmJNbDBnT2lCdmRYUndkWFJUYUdGd1pWc3pYVHRjYmlBZ0lDQWdJR052Ym5OMElHOTFkRWhsYVdkb2RDQTlJR2x6UTJoaGJtNWxiSE5NWVhOMElEOGdiM1YwY0hWMFUyaGhjR1ZiTVYwZ09pQnZkWFJ3ZFhSVGFHRndaVnN5WFR0Y2JpQWdJQ0FnSUdOdmJuTjBJRzkxZEVOb1lXNXVaV3h6SUQwZ2FYTkRhR0Z1Ym1Wc2MweGhjM1FnUHlCdmRYUndkWFJUYUdGd1pWc3pYU0E2SUc5MWRIQjFkRk5vWVhCbFd6RmRPMXh1SUNBZ0lDQWdMeThnVkU5RVR6b2daVzVoWW14bElIWmxZelFnWm05eUlFNURTRmRjYmlBZ0lDQWdJR052Ym5OMElHbHpWbVZqTkNBOUlHbHpRMmhoYm01bGJITk1ZWE4wSUNZbUlDaHBia05vWVc1dVpXeHpJQ1VnTkNBOVBUMGdNQ0I4ZkNCcGJrTm9ZVzV1Wld4eklDVWdNeUE5UFQwZ01Da2dKaVlnYjNWMFEyaGhibTVsYkhNZ0pTQTBJRDA5UFNBd08xeHVYRzRnSUNBZ0lDQXZMeUJVVDBSUE9pQm1hVzVsSUhSMWJtVWdjMmw2WlZ4dUlDQWdJQ0FnWTI5dWMzUWdaR2x6Y0dGMFkyaFlJRDBnYVhORGFHRnVibVZzYzB4aGMzUWdQeUJ2ZFhSRGFHRnVibVZzY3lBNklHOTFkRmRwWkhSb0lDb2diM1YwU0dWcFoyaDBPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHbHpjR0YwWTJoWklEMGdhWE5EYUdGdWJtVnNjMHhoYzNRZ1B5QnZkWFJYYVdSMGFDQXFJRzkxZEVobGFXZG9kQ0E2SUc5MWRFTm9ZVzV1Wld4ek8xeHVJQ0FnSUNBZ1kyOXVjM1FnZDI5eWEwZHliM1Z3VTJsNlpUb2dXMjUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhKZElEMGdXemdzSURnc0lERmRPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pXeGxiV1Z1ZEhOUVpYSlVhSEpsWVdRZ1BTQmthVzFCVDNWMFpYSWdQRDBnT0NBL0lGczBMQ0F4TENBeFhTQTZJRnMwTENBMExDQXhYVHRjYmlBZ0lDQWdJR052Ym5OMElHUnBjM0JoZEdOb0lEMGdXMXh1SUNBZ0lDQWdJQ0JOWVhSb0xtTmxhV3dvWkdsemNHRjBZMmhZSUM4Z2QyOXlhMGR5YjNWd1UybDZaVnN3WFNBdklHVnNaVzFsYm5SelVHVnlWR2h5WldGa1d6QmRLU3hjYmlBZ0lDQWdJQ0FnVFdGMGFDNWpaV2xzS0dScGMzQmhkR05vV1NBdklIZHZjbXRIY205MWNGTnBlbVZiTVYwZ0x5QmxiR1Z0Wlc1MGMxQmxjbFJvY21WaFpGc3hYU2tzWEc0Z0lDQWdJQ0FnSUUxaGRHZ3VZMlZwYkNoaVlYUmphRk5wZW1VZ0x5QjNiM0pyUjNKdmRYQlRhWHBsV3pKZElDOGdaV3hsYldWdWRITlFaWEpVYUhKbFlXUmJNbDBwWEc0Z0lDQWdJQ0JkTzF4dVhHNGdJQ0FnSUNCTVQwZGZSRVZDVlVjb0ozWmxjbUp2YzJVbkxDQW9LU0E5UGlCZ1cyTnZibll5WkY5dGJWOTNaV0puY0hWZElHUnBjM0JoZEdOb0lEMGdKSHRrYVhOd1lYUmphSDFnS1R0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnYVc1dVpYSkZiR1Z0Wlc1MFUybDZaU0E5SUdselZtVmpOQ0EvSUNocGMwTm9ZVzV1Wld4elRHRnpkQ0FtSmlCcGJrTm9ZVzV1Wld4eklDVWdOQ0FoUFQwZ01DQS9JRE1nT2lBMEtTQTZJREU3WEc0Z0lDQWdJQ0JqYjI1emRDQjBhV3hsUVU5MWRHVnlJRDBnZDI5eWEwZHliM1Z3VTJsNlpWc3hYU0FxSUdWc1pXMWxiblJ6VUdWeVZHaHlaV0ZrV3pGZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnZEdsc1pVSlBkWFJsY2lBOUlIZHZjbXRIY205MWNGTnBlbVZiTUYwZ0tpQmxiR1Z0Wlc1MGMxQmxjbFJvY21WaFpGc3dYVHRjYmlBZ0lDQWdJR052Ym5OMElIUnBiR1ZKYm01bGNpQTlJRTFoZEdndWJXRjRLSGR2Y210SGNtOTFjRk5wZW1WYk1GMGdLaUJwYm01bGNrVnNaVzFsYm5SVGFYcGxMQ0IzYjNKclIzSnZkWEJUYVhwbFd6RmRLVHRjYmlBZ0lDQWdJR052Ym5OMElHWnBkRUZQZFhSbGNpQTlJR1JwYlVGUGRYUmxjaUFsSUhScGJHVkJUM1YwWlhJZ1BUMDlJREE3WEc0Z0lDQWdJQ0JqYjI1emRDQm1hWFJDVDNWMFpYSWdQU0JrYVcxQ1QzVjBaWElnSlNCMGFXeGxRazkxZEdWeUlEMDlQU0F3TzF4dUlDQWdJQ0FnWTI5dWMzUWdabWwwU1c1dVpYSWdQU0JrYVcxSmJtNWxjaUFsSUhScGJHVkpibTVsY2lBOVBUMGdNRHRjYmlBZ0lDQWdJR052Ym5OMElHVnNaVzFsYm5SelUybDZaU0E5SUdselZtVmpOQ0EvSUZ0cGJtNWxja1ZzWlcxbGJuUlRhWHBsTENBMExDQTBYU0E2SUZzeExDQXhMQ0F4WFR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnY0hKdlozSmhiVlZ1YVdadmNtMXpPaUJRY205bmNtRnRWVzVwWm05eWJWdGRJRDBnVzF4dUlDQWdJQ0FnSUNCN2RIbHdaVG9nUkdGMFlWUjVjR1V1YVc1ME16SXNJR1JoZEdFNklHUnBiVUZQZFhSbGNuMHNJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNXBiblF6TWl3Z1pHRjBZVG9nWkdsdFFrOTFkR1Z5ZlN4Y2JpQWdJQ0FnSUNBZ2UzUjVjR1U2SUVSaGRHRlVlWEJsTG1sdWRETXlMQ0JrWVhSaE9pQmthVzFKYm01bGNuMHNJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNXBiblF6TWl3Z1pHRjBZVG9nVzJGMGRISnBZblYwWlhNdWNHRmtjMXN3WFN3Z1lYUjBjbWxpZFhSbGN5NXdZV1J6V3pGZFhYMHNYRzRnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNXBiblF6TWl3Z1pHRjBZVG9nWVhSMGNtbGlkWFJsY3k1emRISnBaR1Z6ZlN3Z2UzUjVjR1U2SUVSaGRHRlVlWEJsTG1sdWRETXlMQ0JrWVhSaE9pQmhkSFJ5YVdKMWRHVnpMbVJwYkdGMGFXOXVjMzFjYmlBZ0lDQWdJRjA3WEc0Z0lDQWdJQ0JoY0hCbGJtUkJZM1JwZG1GMGFXOXVWVzVwWm05eWJYTkVZWFJoS0dGMGRISnBZblYwWlhNc0lIQnliMmR5WVcxVmJtbG1iM0p0Y3lrN1hHNGdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE11Y0hWemFDZ3VMaTVqY21WaGRHVlVaVzV6YjNKVGFHRndaVlpoY21saFlteGxjeWhwYm5CMWRITmJNRjB1WkdsdGN5d2dhVzV3ZFhSeld6RmRMbVJwYlhNcEtUdGNiaUFnSUNBZ0lHTnZibk4wSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6T2lCUWNtOW5jbUZ0U1c1d2RYUlVaVzV6YjNKSmJtWnZSR1Z3Wlc1a1pXNWplVnRkSUQwZ1d5ZHlZVzVySnl3Z0ozSmhibXNuWFR0Y2JpQWdJQ0FnSUdsbUlDaG9ZWE5DYVdGektTQjdYRzRnSUNBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGN5NXdkWE5vS0M0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHbHVjSFYwYzFzeVhTNWthVzF6S1NrN1hHNGdJQ0FnSUNBZ0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWekxuQjFjMmdvSjNKaGJtc25LVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGN5NXdkWE5vS0M0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHOTFkSEIxZEZOb1lYQmxLU2s3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR2RsZEZOb1lXUmxjbE52ZFhKalpTQTlJQ2h6YUdGa1pYSklaV3h3WlhJNklGTm9ZV1JsY2tobGJIQmxjaWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCMWJtbG1iM0p0Y3pvZ1ZXNXBabTl5YlhOQmNuSmhlVlI1Y0dVZ1BTQmJYRzRnSUNBZ0lDQWdJQ0FnZTI1aGJXVTZJQ2RrYVcxZllWOXZkWFJsY2ljc0lIUjVjR1U2SUNkcE16SW5mU3dnZTI1aGJXVTZJQ2RrYVcxZllsOXZkWFJsY2ljc0lIUjVjR1U2SUNkcE16SW5mU3dnZTI1aGJXVTZJQ2RrYVcxZmFXNXVaWEluTENCMGVYQmxPaUFuYVRNeUozMHNYRzRnSUNBZ0lDQWdJQ0FnZTI1aGJXVTZJQ2R3WVdRbkxDQjBlWEJsT2lBbmFUTXlKeXdnYkdWdVozUm9PaUF5ZlN3Z2UyNWhiV1U2SUNkemRISnBaR1VuTENCMGVYQmxPaUFuYVRNeUp5d2diR1Z1WjNSb09pQXlmU3hjYmlBZ0lDQWdJQ0FnSUNCN2JtRnRaVG9nSjJScGJHRjBhVzl1Snl3Z2RIbHdaVG9nSjJrek1pY3NJR3hsYm1kMGFEb2dNbjFjYmlBZ0lDQWdJQ0FnWFR0Y2JpQWdJQ0FnSUNBZ1lYQndaVzVrUVdOMGFYWmhkR2x2YmxWdWFXWnZjbTF6S0dGMGRISnBZblYwWlhNc0lIVnVhV1p2Y20xektUdGNibHh1SUNBZ0lDQWdJQ0F2THlCVVQwUlBPaUJ6ZFhCd2IzSjBJR052YlhCdmJtVnVkQ0F5TENBekxseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCamIyMXdiMjVsYm5SeklEMGdhWE5XWldNMElEOGdOQ0E2SURFN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhRZ1BTQjBaVzV6YjNKVWVYQmxWRzlYYzJkc1UzUnZjbUZuWlZSNWNHVW9hVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxLVHRjYmlBZ0lDQWdJQ0FnYkdWMElHUmxZMnhoY21WR2RXNWpkR2x2Ym5NZ1BTQmdYRzRnSUNBZ0lDQm1iaUJ6WlhSUGRYUndkWFJCZEVsdVpHVjRLR1pzWVhSSmJtUmxlQ0E2SUdrek1pd2dkbUZzZFdVZ09pQWtlMmx6Vm1Wak5DQS9JR0IyWldNMFBDUjdkSDArWUNBNklIUjlLU0I3WEc0Z0lDQWdJQ0FnSUhKbGMzVnNkRnRtYkdGMFNXNWtaWGhkSUQwZ0pIdHBjMVpsWXpRZ1B5QmdkbVZqTkR3a2UzUjlQbUFnT2lCMGZTaDJZV3gxWlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCbWJpQnpaWFJQZFhSd2RYUkJkRU52YjNKa2N5aGtNQ0E2SUdrek1pd2daREVnT2lCcE16SXNJR1F5SURvZ2FUTXlMQ0JrTXlBNklHa3pNaXdnZG1Gc2RXVWdPaUFrZTJselZtVmpOQ0EvSUdCMlpXTTBQQ1I3ZEgwK1lDQTZJSFI5S1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JtYkdGMFNXNWtaWGdnUFNCblpYUlBkWFJ3ZFhSSmJtUmxlRVp5YjIxRGIyOXlaSE1vZG1Wak5EeHBNekkrS0dRd0xDQmtNU3dnWkRJc0lHUXpLU2s3WEc0Z0lDQWdJQ0FnSUhObGRFOTFkSEIxZEVGMFNXNWtaWGdvWm14aGRFbHVaR1Y0SUNSN2FYTldaV00wSUQ4Z0p5OGdOQ2NnT2lBbkozMHNJSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMWdPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjRJRDBnYVc1d2RYUldZWEpwWVdKc1pTaGNiaUFnSUNBZ0lDQWdJQ0FnSUNkNEp5d2dhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxMQ0JwYm5CMWRITmJNRjB1WkdsdGN5NXNaVzVuZEdnc0lHbHVibVZ5Uld4bGJXVnVkRk5wZW1VZ1BUMDlJRE1nUHlBeElEb2dhVzV1WlhKRmJHVnRaVzUwVTJsNlpTazdYRzRnSUNBZ0lDQWdJR052Ym5OMElIY2dQU0JwYm5CMWRGWmhjbWxoWW14bEtDZDNKeXdnYVc1d2RYUnpXekZkTG1SaGRHRlVlWEJsTENCcGJuQjFkSE5iTVYwdVpHbHRjeTVzWlc1bmRHZ3NJR052YlhCdmJtVnVkSE1wTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRGWmhjbWxoWW14bGN5QTlJRnQ0TENCM1hUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwSUQwZ2IzVjBjSFYwVm1GeWFXRmliR1VvSjNKbGMzVnNkQ2NzSUdsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlN3Z2IzVjBjSFYwVTJoaGNHVXViR1Z1WjNSb0xDQmpiMjF3YjI1bGJuUnpLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHaGhjMEpwWVhNcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmlhV0Z6SUQwZ2FXNXdkWFJXWVhKcFlXSnNaU2duWW1saGN5Y3NJR2x1Y0hWMGMxc3lYUzVrWVhSaFZIbHdaU3dnYVc1d2RYUnpXekpkTG1ScGJYTXViR1Z1WjNSb0xDQmpiMjF3YjI1bGJuUnpLVHRjYmlBZ0lDQWdJQ0FnSUNCcGJuQjFkRlpoY21saFlteGxjeTV3ZFhOb0tHSnBZWE1wTzF4dUlDQWdJQ0FnSUNBZ0lHUmxZMnhoY21WR2RXNWpkR2x2Ym5NZ0t6MGdZRnh1SUNBZ0lDQWdJQ0JtYmlCblpYUkNhV0Z6UW5sUGRYUndkWFJEYjI5eVpITW9ZMjl2Y21SeklEb2dkbVZqTkR4cE16SStLU0F0UGlBa2UybHpWbVZqTkNBL0lHQjJaV00wUENSN2RIMCtZQ0E2SUhSOUlIdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZbWxoYzF0amIyOXlaSE11Skh0cGMwTm9ZVzV1Wld4elRHRnpkQ0EvSUNkM0p5QTZJQ2Q1SjMwa2UybHpWbVZqTkNBL0lDY3ZJRFFuSURvZ0p5ZDlYVHRjYmlBZ0lDQWdJQ0FnZldBN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZRnh1SUNBZ0lDQWdJQ0FrZTNWMGFXeEdkVzVqZEdsdmJuTW9KM1Z1YVdadmNtMXpMbkpsYzNWc2RGOXpkSEpwWkdWekp5bDlYRzRnSUNBZ0lDQWdJQzh2YzNSeWRXTjBJRlZ1YVdadmNtMXpJSHNnZUZOb1lYQmxJRG9nZG1Wak5EeHBNekkrTENCM1UyaGhjR1VnT2lCMlpXTTBQR2t6TWo0c0lHOTFkRk5vWVhCbElEb2dkbVZqTkR4cE16SStMRnh1SUNBZ0lDQWdJQ0F2THlBZ2IzVjBVMmhoY0dWVGRISnBaR1Z6T2lCMlpXTXpQR2t6TWo0c0lHWnBiSFJsY2tScGJYTWdPaUIyWldNeVBHa3pNajRzSUhCaFpDQTZJSFpsWXpJOGFUTXlQaXdnYzNSeWFXUmxJRG9nZG1Wak1qeHBNekkrTEZ4dUlDQWdJQ0FnSUNBdkx5QWdaR2xzWVhScGIyNGdPaUIyWldNeVBHa3pNajRzSUdScGJVRlBkWFJsY2lBNklHa3pNaXdnWkdsdFFrOTFkR1Z5SURvZ2FUTXlMQ0JrYVcxSmJtNWxjaUE2SUdrek1pQjlPMXh1SUNBZ0lDQWdJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNXlaV2RwYzNSbGNsVnVhV1p2Y20xektIVnVhV1p2Y20xektTNWtaV05zWVhKbFZtRnlhV0ZpYkdWektDNHVMbWx1Y0hWMFZtRnlhV0ZpYkdWekxDQnZkWFJ3ZFhRcGZWeHVJQ0FnSUNBZ0lDQWtlMlJsWTJ4aGNtVkdkVzVqZEdsdmJuTjlYRzRnSUNBZ0lDQWdJQ1I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjUyTW1SRGIyMXRiMjVUYm1sd2NHVjBLRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2x6UTJoaGJtNWxiSE5NWVhOMExDQm1hWFJCVDNWMFpYSXNJR1pwZEVKUGRYUmxjaXdnWm1sMFNXNXVaWElzSUdoaGMwSnBZWE1zSUdGMGRISnBZblYwWlhNc0lHVnNaVzFsYm5SelUybDZaVnN3WFN3Z1pXeGxiV1Z1ZEhOVGFYcGxXekZkTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc1pXMWxiblJ6VTJsNlpWc3lYU3dnZENsOVhHNGdJQ0FnSUNBZ0lDUjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcGMxWmxZelFnUDF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUcxaGEyVk5ZWFJOZFd4UVlXTnJaV1JXWldNMFUyOTFjbU5sS0dWc1pXMWxiblJ6VUdWeVZHaHlaV0ZrTENCM2IzSnJSM0p2ZFhCVGFYcGxMQ0IwTENCMWJtUmxabWx1WldRc0lDRnBjME5vWVc1dVpXeHpUR0Z6ZEN3Z2RHbHNaVWx1Ym1WeUtTQTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiV0ZyWlUxaGRFMTFiRkJoWTJ0bFpGTnZkWEpqWlNoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3hsYldWdWRITlFaWEpVYUhKbFlXUXNJSGR2Y210SGNtOTFjRk5wZW1Vc0lIUXNJSFZ1WkdWbWFXNWxaQ3dnSVdselEyaGhibTVsYkhOTVlYTjBMQ0IwYVd4bFNXNXVaWElzSUdaaGJITmxMQ0IxYm1SbFptbHVaV1FzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxjWFZsYm5ScFlXeEJZMk5sYzNOQ2VWUm9jbVZoWkhNcGZXQTdYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lDQWdibUZ0WlRvZ0owTnZibll5UkUxaGRFMTFiQ2NzWEc0Z0lDQWdJQ0FnSUhOb1lXUmxja05oWTJobE9pQjdYRzRnSUNBZ0lDQWdJQ0FnYUdsdWREb2dZQ1I3WVhSMGNtbGlkWFJsY3k1allXTm9aVXRsZVgwN0pIdHBibTVsY2tWc1pXMWxiblJUYVhwbGZUc2tlMmx6Vm1Wak5IMDdKSHRtYVhSQlQzVjBaWEo5T3lSN1ptbDBRazkxZEdWeWZUc2tlMlpwZEVsdWJtVnlmVHNrZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IwYVd4bFFVOTFkR1Z5ZlRza2UzUnBiR1ZDVDNWMFpYSjlPeVI3ZEdsc1pVbHVibVZ5ZldBc1hHNGdJQ0FnSUNBZ0lDQWdhVzV3ZFhSRVpYQmxibVJsYm1OcFpYTmNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnWjJWMFVuVnVSR0YwWVRvZ0tDa2dQVDRnS0h0Y2JpQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSek9pQmJlMlJwYlhNNklHOTFkSEIxZEZOb1lYQmxMQ0JrWVhSaFZIbHdaVG9nYVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsZlYwc1hHNGdJQ0FnSUNBZ0lDQWdaR2x6Y0dGMFkyaEhjbTkxY0RvZ2UzZzZJR1JwYzNCaGRHTm9XekJkTENCNU9pQmthWE53WVhSamFGc3hYU3dnZWpvZ1pHbHpjR0YwWTJoYk1sMTlMRnh1SUNBZ0lDQWdJQ0FnSUhCeWIyZHlZVzFWYm1sbWIzSnRjeXhjYmlBZ0lDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNBZ0lHZGxkRk5vWVdSbGNsTnZkWEpqWlZ4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5TzF4dUlpd2dJaTh2SUVOdmNIbHlhV2RvZENBb1l5a2dUV2xqY205emIyWjBJRU52Y25CdmNtRjBhVzl1TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVMeThnVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUUxSlZDQk1hV05sYm5ObExseHVYRzVwYlhCdmNuUWdlMFJoZEdGVWVYQmxmU0JtY205dElDY3VMaTh1TGk4dUxpOTNZWE50TFdOdmJXMXZiaWM3WEc1cGJYQnZjblFnZTFSbGJuTnZjbFpwWlhkOUlHWnliMjBnSnk0dUx5NHVMM1JsYm5OdmNpMTJhV1YzSnp0Y2JtbHRjRzl5ZENCN1UyaGhjR1ZWZEdsc2ZTQm1jbTl0SUNjdUxpOHVMaTkxZEdsc0p6dGNibWx0Y0c5eWRDQjdVSEp2WjNKaGJVbHVabThzSUZCeWIyZHlZVzFKYm5CMWRGUmxibk52Y2tsdVptOUVaWEJsYm1SbGJtTjVMQ0JRY205bmNtRnRWVzVwWm05eWJYMGdabkp2YlNBbkxpNHZkSGx3WlhNbk8xeHVYRzVwYlhCdmNuUWdlMk55WldGMFpWUmxibk52Y2xOb1lYQmxWbUZ5YVdGaWJHVnpMQ0JuWlhSTllYaERiMjF3YjI1bGJuUnpMQ0JwYm5CMWRGWmhjbWxoWW14bExDQnZkWFJ3ZFhSV1lYSnBZV0pzWlN3Z1UyaGhaR1Z5U0dWc2NHVnlMQ0IwWlc1emIzSlVlWEJsVkc5WGMyZHNVM1J2Y21GblpWUjVjR1VzSUZWdWFXWnZjbTF6UVhKeVlYbFVlWEJsZlNCbWNtOXRJQ2N1TDJOdmJXMXZiaWM3WEc1cGJYQnZjblFnZTJOaGJHTjFiR0YwWlU5MWRIQjFkRk5vWVhCbExDQkRiMjUyUVhSMGNtbGlkWFJsYzMwZ1puSnZiU0FuTGk5amIyNTJKenRjYm1sdGNHOXlkQ0I3WVhCd1pXNWtRV04wYVhaaGRHbHZibFZ1YVdadmNtMXpMQ0JoY0hCbGJtUkJZM1JwZG1GMGFXOXVWVzVwWm05eWJYTkVZWFJoTENCblpYUkJZM1JwZG1GMGFXOXVVMjVwY0hCbGRIMGdabkp2YlNBbkxpOW1kWE5sTFhWMGFXeHpKenRjYmx4dUx5b3FYRzRnS2lCdVlXbDJaU0JuY205MWNHVmtJR052Ym5ZZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRzSUhOMWNIQnZjblJ6SURGa0x6SmtJR052Ym5aY2JpQXFJRUJ3WVhKaGJTQnpjWFZsWlhwbFQzVjBjSFYwVTJoaGNHVkdkVzVqZEdsdmJpQXRJR0Z1SUc5d2RHbHZibUZzSUdaMWJtTjBhVzl1SUhSdklITnhkV1ZsZW1VZ2RHaGxJRzkxZEhCMWRDQnphR0Z3WlN3Z2IyNXNlU0IxYzJWa0lHbHVJR052Ym5ZeFpGeHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdZM0psWVhSbFIzSnZkWEJsWkVOdmJuWlFjbTluY21GdFNXNW1ieUE5WEc0Z0lDQWdLR2x1Y0hWMGN6b2djbVZoWkc5dWJIa2dWR1Z1YzI5eVZtbGxkMXRkTENCaGRIUnlhV0oxZEdWek9pQkRiMjUyUVhSMGNtbGlkWFJsY3l4Y2JpQWdJQ0FnYzNGMVpXVjZaVTkxZEhCMWRGTm9ZWEJsUm5WdVkzUnBiMjQvT2lBb2MyaGhjR1U2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkS1NBOVBpQnVkVzFpWlhKYlhTazZJRkJ5YjJkeVlXMUpibVp2SUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUdoaGMwSnBZWE1nUFNCcGJuQjFkSE11YkdWdVozUm9JRDRnTWp0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ5YjJObGMzTkNhV0Z6SUQwZ2FHRnpRbWxoY3lBL0lDZDJZV3gxWlNBclBTQmlXMjkxZEhCMWRGOWphR0Z1Ym1Wc1hUc25JRG9nSnljN1hHNGdJQ0FnSUNCamIyNXpkQ0I0VTJoaGNHVWdQU0JwYm5CMWRITmJNRjB1WkdsdGN6dGNiaUFnSUNBZ0lHTnZibk4wSUhkVGFHRndaU0E5SUdsdWNIVjBjMXN4WFM1a2FXMXpPMXh1SUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwUTJoaGJtNWxiSE5RWlhKSGNtOTFjQ0E5SUhkVGFHRndaVnN3WFNBdklHRjBkSEpwWW5WMFpYTXVaM0p2ZFhBN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdselEyaGhibTVsYkV4aGMzUWdQU0JoZEhSeWFXSjFkR1Z6TG1admNtMWhkQ0E5UFQwZ0owNUlWME1uTzF4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1VnUFNCallXeGpkV3hoZEdWUGRYUndkWFJUYUdGd1pTaGNiaUFnSUNBZ0lDQWdJQ0I0VTJoaGNHVXNJSGRUYUdGd1pTd2dZWFIwY21saWRYUmxjeTVrYVd4aGRHbHZibk1zSUdGMGRISnBZblYwWlhNdWNHRmtjeXdnWVhSMGNtbGlkWFJsY3k1emRISnBaR1Z6TENCcGMwTm9ZVzV1Wld4TVlYTjBLVHRjYmlBZ0lDQWdJR052Ym5OMElHOTFkSEIxZEZOcGVtVWdQU0JUYUdGd1pWVjBhV3d1YzJsNlpTaHZkWFJ3ZFhSVGFHRndaU2s3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ5YjJkeVlXMVZibWxtYjNKdGN6b2dVSEp2WjNKaGJWVnVhV1p2Y20xYlhTQTlJRnRjYmlBZ0lDQWdJQ0FnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2IzVjBjSFYwVTJsNlpYMHNJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUdGMGRISnBZblYwWlhNdVpHbHNZWFJwYjI1emZTeGNiaUFnSUNBZ0lDQWdlM1I1Y0dVNklFUmhkR0ZVZVhCbExuVnBiblF6TWl3Z1pHRjBZVG9nVzJGMGRISnBZblYwWlhNdWMzUnlhV1JsYzFzd1hTd2dZWFIwY21saWRYUmxjeTV6ZEhKcFpHVnpXekZkWFgwc1hHNGdJQ0FnSUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1MWFXNTBNeklzSUdSaGRHRTZJRnRoZEhSeWFXSjFkR1Z6TG5CaFpITmJNRjBzSUdGMGRISnBZblYwWlhNdWNHRmtjMXN4WFYxOUxGeHVJQ0FnSUNBZ0lDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJ2ZFhSd2RYUkRhR0Z1Ym1Wc2MxQmxja2R5YjNWd2ZWeHVJQ0FnSUNBZ1hUdGNiaUFnSUNBZ0lHRndjR1Z1WkVGamRHbDJZWFJwYjI1VmJtbG1iM0p0YzBSaGRHRW9ZWFIwY21saWRYUmxjeXdnY0hKdlozSmhiVlZ1YVdadmNtMXpLVHRjYmlBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGN5NXdkWE5vS0M0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektIaFRhR0Z3WlN3Z2QxTm9ZWEJsS1NrN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRFUmxjR1Z1WkdWdVkybGxjem9nVUhKdlozSmhiVWx1Y0hWMFZHVnVjMjl5U1c1bWIwUmxjR1Z1WkdWdVkzbGJYU0E5SUZzbmNtRnVheWNzSUNkeVlXNXJKMTA3WEc0Z0lDQWdJQ0JwWmlBb2FHRnpRbWxoY3lrZ2UxeHVJQ0FnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNdWNIVnphQ2d1TGk1amNtVmhkR1ZVWlc1emIzSlRhR0Z3WlZaaGNtbGhZbXhsY3locGJuQjFkSE5iTWwwdVpHbHRjeWtwTzF4dUlDQWdJQ0FnSUNCcGJuQjFkRVJsY0dWdVpHVnVZMmxsY3k1d2RYTm9LQ2R5WVc1ckp5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNdWNIVnphQ2d1TGk1amNtVmhkR1ZVWlc1emIzSlRhR0Z3WlZaaGNtbGhZbXhsY3lodmRYUndkWFJUYUdGd1pTa3BPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVZ1BTQW9jMmhoWkdWeVNHVnNjR1Z5T2lCVGFHRmtaWEpJWld4d1pYSXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYjNWMGNIVjBJRDBnYjNWMGNIVjBWbUZ5YVdGaWJHVW9KMjkxZEhCMWRDY3NJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU3dnYjNWMGNIVjBVMmhoY0dVdWJHVnVaM1JvS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWW1GelpWUjVjR1VnUFNCMFpXNXpiM0pVZVhCbFZHOVhjMmRzVTNSdmNtRm5aVlI1Y0dVb2IzVjBjSFYwTG5SNWNHVXVkR1Z1YzI5eUtUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1lYQndiSGxCWTNScGRtRjBhVzl1SUQwZ1oyVjBRV04wYVhaaGRHbHZibE51YVhCd1pYUW9ZWFIwY21saWRYUmxjeXdnYjNWMGNIVjBMblI1Y0dVdWRtRnNkV1VzSUdKaGMyVlVlWEJsS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZUNBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjNnbkxDQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVXNJSGhUYUdGd1pTNXNaVzVuZEdncE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCM0lEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnbmR5Y3NJR2x1Y0hWMGMxc3hYUzVrWVhSaFZIbHdaU3dnZDFOb1lYQmxMbXhsYm1kMGFDazdYRzRnSUNBZ0lDQWdJR052Ym5OMElHbHVjSFYwVm1GeWN5QTlJRnQ0TENCM1hUdGNiaUFnSUNBZ0lDQWdhV1lnS0doaGMwSnBZWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBibkIxZEZaaGNuTXVjSFZ6YUNocGJuQjFkRlpoY21saFlteGxLQ2RpSnl3Z2FXNXdkWFJ6V3pKZExtUmhkR0ZVZVhCbExDQnBibkIxZEhOYk1sMHVaR2x0Y3k1c1pXNW5kR2dwS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR052Ym5OMElIVnVhV1p2Y20xek9pQlZibWxtYjNKdGMwRnljbUY1Vkhsd1pTQTlJRnRjYmlBZ0lDQWdJQ0FnSUNCN2JtRnRaVG9nSjI5MWRIQjFkRjl6YVhwbEp5d2dkSGx3WlRvZ0ozVXpNaWQ5TENCN2JtRnRaVG9nSjJScGJHRjBhVzl1Y3ljc0lIUjVjR1U2SUNkMU16SW5MQ0JzWlc1bmRHZzZJR0YwZEhKcFluVjBaWE11Wkdsc1lYUnBiMjV6TG14bGJtZDBhSDBzWEc0Z0lDQWdJQ0FnSUNBZ2UyNWhiV1U2SUNkemRISnBaR1Z6Snl3Z2RIbHdaVG9nSjNVek1pY3NJR3hsYm1kMGFEb2dNbjBzSUh0dVlXMWxPaUFuY0dGa2N5Y3NJSFI1Y0dVNklDZDFNekluTENCc1pXNW5kR2c2SURKOUxGeHVJQ0FnSUNBZ0lDQWdJSHR1WVcxbE9pQW5iM1YwY0hWMFgyTm9ZVzV1Wld4elgzQmxjbDluY205MWNDY3NJSFI1Y0dVNklDZDFNekluZlZ4dUlDQWdJQ0FnSUNCZE8xeHVJQ0FnSUNBZ0lDQmhjSEJsYm1SQlkzUnBkbUYwYVc5dVZXNXBabTl5YlhNb1lYUjBjbWxpZFhSbGN5d2dkVzVwWm05eWJYTXBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZRnh1SUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV5WldkcGMzUmxjbFZ1YVdadmNtMXpLSFZ1YVdadmNtMXpLUzVrWldOc1lYSmxWbUZ5YVdGaWJHVnpLQzR1TG1sdWNIVjBWbUZ5Y3l3Z2IzVjBjSFYwS1gxY2JseHVJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNXRZV2x1VTNSaGNuUW9LWDFjYmlBZ0lDQWtlM05vWVdSbGNraGxiSEJsY2k1bmRXRnlaRUZuWVdsdWMzUlBkWFJQWmtKdmRXNWtjMWR2Y210bmNtOTFjRk5wZW1WektDZDFibWxtYjNKdGN5NXZkWFJ3ZFhSZmMybDZaU2NwZlZ4dVhHNGdJQ0FnYkdWMElHOTFkSEIxZEVsdVpHbGpaWE1nUFNBa2UyOTFkSEIxZEM1dlptWnpaWFJVYjBsdVpHbGpaWE1vSjJkc2IySmhiRjlwWkhnbktYMDdYRzRnSUNBZ2JHVjBJR0poZEdOb09pQjFNeklnUFNCdmRYUndkWFJKYm1ScFkyVnpXekJkTzF4dUlDQWdJR3hsZENCdmRYUndkWFJmWTJoaGJtNWxiRG9nZFRNeUlEMGdiM1YwY0hWMFNXNWthV05sYzFza2UybHpRMmhoYm01bGJFeGhjM1FnUHlBeklEb2dNWDFkTzF4dUlDQWdJR3hsZENCNFVrTkRiM0p1WlhJNklIWmxZekk4ZFRNeVBpQTlJSFpsWXpJOGRUTXlQaWh2ZFhSd2RYUkpibVJwWTJWeld5UjdhWE5EYUdGdWJtVnNUR0Z6ZENBL0lERWdPaUF5ZlYwc0lHOTFkSEIxZEVsdVpHbGpaWE5iSkh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2x6UTJoaGJtNWxiRXhoYzNRZ1B5QXlJRG9nTTMxZEtTQXFJSFZ1YVdadmNtMXpMbk4wY21sa1pYTWdMU0IxYm1sbWIzSnRjeTV3WVdSek8xeHVJQ0FnSUd4bGRDQm5jbTkxY0Y5cFpEb2dkVE15SUQwZ2IzVjBjSFYwWDJOb1lXNXVaV3dnTHlCMWJtbG1iM0p0Y3k1dmRYUndkWFJmWTJoaGJtNWxiSE5mY0dWeVgyZHliM1Z3TzF4dVhHNGdJQ0FnZG1GeUlIWmhiSFZsT2lBa2UyOTFkSEIxZEM1MGVYQmxMblpoYkhWbGZTQTlJQ1I3YjNWMGNIVjBMblI1Y0dVdWRtRnNkV1Y5S0RBcE8xeHVJQ0FnSUdadmNpQW9kbUZ5SUhkSmJrTm9ZVzV1Wld3NklIVXpNaUE5SURCMU95QjNTVzVEYUdGdWJtVnNJRHdnZFc1cFptOXliWE11ZDE5emFHRndaVnN4WFRzZ2QwbHVRMmhoYm01bGJDc3JLU0I3WEc0Z0lDQWdJQ0JzWlhRZ2FXNXdkWFJmWTJoaGJtNWxiQ0E5SUdkeWIzVndYMmxrSUNvZ2RXNXBabTl5YlhNdWQxOXphR0Z3WlZzeFhTQXJJSGRKYmtOb1lXNXVaV3c3WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUIzU0dWcFoyaDBPaUIxTXpJZ1BTQXdkVHNnZDBobGFXZG9kQ0E4SUhWdWFXWnZjbTF6TG5kZmMyaGhjR1ZiTWwwN0lIZElaV2xuYUhRckt5a2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2VFaGxhV2RvZENBOUlIaFNRME52Y201bGNpNTRJQ3NnZDBobGFXZG9kQ0FxSUhWdWFXWnZjbTF6TG1ScGJHRjBhVzl1YzFzd1hUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2VFaGxhV2RvZENBOElEQjFJSHg4SUhoSVpXbG5hSFFnUGowZ2RXNXBabTl5YlhNdWVGOXphR0Z3WlZza2UybHpRMmhoYm01bGJFeGhjM1FnUHlBeElEb2dNbjFkS1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCM1YybGtkR2c2SUhVek1pQTlJREIxT3lCM1YybGtkR2dnUENCMWJtbG1iM0p0Y3k1M1gzTm9ZWEJsV3pOZE95QjNWMmxrZEdnckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQjRWMmxrZEdnZ1BTQjRVa05EYjNKdVpYSXVlU0FySUhkWGFXUjBhQ0FxSUhWdWFXWnZjbTF6TG1ScGJHRjBhVzl1YzFzeFhUdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2VGZHBaSFJvSUR3Z01IVWdmSHdnZUZkcFpIUm9JRDQ5SUhWdWFXWnZjbTF6TG5oZmMyaGhjR1ZiSkh0cGMwTm9ZVzV1Wld4TVlYTjBJRDhnTWlBNklETjlYU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdiR1YwSUhoV1lXd2dQU0FrZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhWE5EYUdGdWJtVnNUR0Z6ZENBL0lIZ3VaMlYwS0NkaVlYUmphQ2NzSUNkNFNHVnBaMmgwSnl3Z0ozaFhhV1IwYUNjc0lDZHBibkIxZEY5amFHRnVibVZzSnlrZ09seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGd1WjJWMEtDZGlZWFJqYUNjc0lDZHBibkIxZEY5amFHRnVibVZzSnl3Z0ozaElaV2xuYUhRbkxDQW5lRmRwWkhSb0p5bDlPMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQjNWbUZzSUQwZ0pIdDNMbWRsZENnbmIzVjBjSFYwWDJOb1lXNXVaV3duTENBbmQwbHVRMmhoYm01bGJDY3NJQ2QzU0dWcFoyaDBKeXdnSjNkWGFXUjBhQ2NwZlR0Y2JpQWdJQ0FnSUNBZ0lDQjJZV3gxWlNBclBTQjRWbUZzS25kV1lXdzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ0pIdHdjbTlqWlhOelFtbGhjMzFjYmlBZ0lDQWtlMkZ3Y0d4NVFXTjBhWFpoZEdsdmJuMWNiaUFnSUNBa2UyOTFkSEIxZEM1elpYUkNlVTltWm5ObGRDZ25aMnh2WW1Gc1gybGtlQ2NzSUNkMllXeDFaU2NwZlZ4dUlDQjlZRHRjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0J1WVcxbE9pQW5SM0p2ZFhCbFpFTnZiblluTEZ4dUlDQWdJQ0FnSUNCemFHRmtaWEpEWVdOb1pUb2dlMmhwYm5RNklHRjBkSEpwWW5WMFpYTXVZMkZqYUdWTFpYa3NJR2x1Y0hWMFJHVndaVzVrWlc1amFXVnpmU3hjYmlBZ0lDQWdJQ0FnWjJWMFVuVnVSR0YwWVRvZ0tDa2dQVDRnS0h0Y2JpQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSek9pQmJlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pHbHRjem9nYzNGMVpXVjZaVTkxZEhCMWRGTm9ZWEJsUm5WdVkzUnBiMjRnUHlCemNYVmxaWHBsVDNWMGNIVjBVMmhoY0dWR2RXNWpkR2x2YmlodmRYUndkWFJUYUdGd1pTa2dPaUJ2ZFhSd2RYUlRhR0Z3WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1JoZEdGVWVYQmxPaUJwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1ZjYmlBZ0lDQWdJQ0FnSUNCOVhTeGNiaUFnSUNBZ0lDQWdJQ0JrYVhOd1lYUmphRWR5YjNWd09pQjdlRG9nVFdGMGFDNWpaV2xzS0c5MWRIQjFkRk5wZW1VZ0x5QTJOQ0F2S2lCM2IzSnJaM0p2ZFhBZ2MybDZaU0FxTHlsOUxGeHVJQ0FnSUNBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGMxeHVJQ0FnSUNBZ0lDQjlLU3hjYmlBZ0lDQWdJQ0FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxMRnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdZM0psWVhSbFIzSnZkWEJsWkVOdmJuWldaV04wYjNKcGVtVlFjbTluY21GdFNXNW1ieUE5WEc0Z0lDQWdLR2x1Y0hWMGN6b2djbVZoWkc5dWJIa2dWR1Z1YzI5eVZtbGxkMXRkTENCaGRIUnlhV0oxZEdWek9pQkRiMjUyUVhSMGNtbGlkWFJsY3l3Z2IzVjBjSFYwVTJoaGNHVTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRLVG9nVUhKdlozSmhiVWx1Wm04Z1BUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2FHRnpRbWxoY3lBOUlHbHVjSFYwY3k1c1pXNW5kR2dnUGlBeU8xeHVJQ0FnSUNBZ1kyOXVjM1FnWTI5dGNHOXVaVzUwY3lBOUlHZGxkRTFoZUVOdmJYQnZibVZ1ZEhNb2IzVjBjSFYwVTJoaGNHVmJNMTBwTzF4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMFRuVnRZbVZ5SUQwZ1oyVjBUV0Y0UTI5dGNHOXVaVzUwY3lodmRYUndkWFJUYUdGd1pWc3lYU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQnZkWFJ3ZFhSVGFYcGxJRDBnVTJoaGNHVlZkR2xzTG5OcGVtVW9iM1YwY0hWMFUyaGhjR1VwSUM4Z1kyOXRjRzl1Wlc1MGN5QXZJRzkxZEhCMWRFNTFiV0psY2p0Y2JpQWdJQ0FnSUdOdmJuTjBJSGhUYUdGd1pTQTlJRnRwYm5CMWRITmJNRjB1WkdsdGMxc3dYU3dnYVc1d2RYUnpXekJkTG1ScGJYTmJNVjBzSUdsdWNIVjBjMXN3WFM1a2FXMXpXekpkTENCcGJuQjFkSE5iTUYwdVpHbHRjMXN6WFNBdklHTnZiWEJ2Ym1WdWRITmRPMXh1SUNBZ0lDQWdZMjl1YzNRZ2QxTm9ZWEJsSUQwZ1cybHVjSFYwYzFzeFhTNWthVzF6V3pCZExDQnBibkIxZEhOYk1WMHVaR2x0YzFzeFhTd2dhVzV3ZFhSeld6RmRMbVJwYlhOYk1sMHNJR2x1Y0hWMGMxc3hYUzVrYVcxeld6TmRJQzhnWTI5dGNHOXVaVzUwYzEwN1hHNGdJQ0FnSUNCamIyNXpkQ0J2ZFhSd2RYUlRhR0Z3WlVsdVUyaGhaR1Z5SUQwZ1cyOTFkSEIxZEZOb1lYQmxXekJkTENCdmRYUndkWFJUYUdGd1pWc3hYU3dnYjNWMGNIVjBVMmhoY0dWYk1sMHNJRzkxZEhCMWRGTm9ZWEJsV3pOZElDOGdZMjl0Y0c5dVpXNTBjMTA3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ5YjJkeVlXMVZibWxtYjNKdGN6b2dVSEp2WjNKaGJWVnVhV1p2Y20xYlhTQTlJRnRjYmlBZ0lDQWdJQ0FnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2IzVjBjSFYwVTJsNlpYMHNYRzRnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNXBiblF6TWl3Z1pHRjBZVG9nVzJGMGRISnBZblYwWlhNdWMzUnlhV1JsYzFzd1hTd2dZWFIwY21saWRYUmxjeTV6ZEhKcFpHVnpXekZkWFgwc1hHNGdJQ0FnSUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1cGJuUXpNaXdnWkdGMFlUb2dXMkYwZEhKcFluVjBaWE11Y0dGa2Mxc3dYU3dnWVhSMGNtbGlkWFJsY3k1d1lXUnpXekZkWFgxY2JpQWdJQ0FnSUYwN1hHNGdJQ0FnSUNCaGNIQmxibVJCWTNScGRtRjBhVzl1Vlc1cFptOXliWE5FWVhSaEtHRjBkSEpwWW5WMFpYTXNJSEJ5YjJkeVlXMVZibWxtYjNKdGN5azdYRzRnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNdWNIVnphQ2d1TGk1amNtVmhkR1ZVWlc1emIzSlRhR0Z3WlZaaGNtbGhZbXhsY3loNFUyaGhjR1VzSUhkVGFHRndaU3dnYjNWMGNIVjBVMmhoY0dWSmJsTm9ZV1JsY2lrcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnZUU1MWJXSmxjaUE5SUNodmRYUndkWFJPZFcxaVpYSWdMU0F4S1NBcUlHRjBkSEpwWW5WMFpYTXVjM1J5YVdSbGMxc3hYU0FySUhkVGFHRndaVnN4WFR0Y2JpQWdJQ0FnSUdOdmJuTjBJR2RsZEZOb1lXUmxjbE52ZFhKalpTQTlJQ2h6YUdGa1pYSklaV3h3WlhJNklGTm9ZV1JsY2tobGJIQmxjaWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdmRYUndkWFFnUFNCdmRYUndkWFJXWVhKcFlXSnNaU2duYjNWMGNIVjBKeXdnYVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsTENCdmRYUndkWFJUYUdGd1pVbHVVMmhoWkdWeUxteGxibWQwYUN3Z1kyOXRjRzl1Wlc1MGN5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElHSmhjMlZVZVhCbElEMGdkR1Z1YzI5eVZIbHdaVlJ2VjNObmJGTjBiM0poWjJWVWVYQmxLRzkxZEhCMWRDNTBlWEJsTG5SbGJuTnZjaWs3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0Z3Y0d4NVFXTjBhWFpoZEdsdmJpQTlJR2RsZEVGamRHbDJZWFJwYjI1VGJtbHdjR1YwS0dGMGRISnBZblYwWlhNc0lHOTFkSEIxZEM1MGVYQmxMblpoYkhWbExDQmlZWE5sVkhsd1pTazdYRzRnSUNBZ0lDQWdJR052Ym5OMElIZ2dQU0JwYm5CMWRGWmhjbWxoWW14bEtDZDRKeXdnYVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsTENCNFUyaGhjR1V1YkdWdVozUm9MQ0JqYjIxd2IyNWxiblJ6S1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZHlBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjNjbkxDQnBibkIxZEhOYk1WMHVaR0YwWVZSNWNHVXNJSGRUYUdGd1pTNXNaVzVuZEdnc0lHTnZiWEJ2Ym1WdWRITXBPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBibkIxZEZaaGNuTWdQU0JiZUN3Z2QxMDdYRzRnSUNBZ0lDQWdJR2xtSUNob1lYTkNhV0Z6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdhVzV3ZFhSV1lYSnpMbkIxYzJnb2FXNXdkWFJXWVhKcFlXSnNaU2duWWljc0lHbHVjSFYwYzFzeVhTNWtZWFJoVkhsd1pTd2dhVzV3ZFhSeld6SmRMbVJwYlhNc0lHTnZiWEJ2Ym1WdWRITXBLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3Y205alpYTnpRbWxoY3lBOUlHaGhjMEpwWVhNZ1B5QW5kbUZzZFdVZ0t6MGdZbHR2ZFhSd2RYUmZZMmhoYm01bGJGMDdKeUE2SUNjbk8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCMWJtbG1iM0p0Y3pvZ1ZXNXBabTl5YlhOQmNuSmhlVlI1Y0dVZ1BTQmJYRzRnSUNBZ0lDQWdJQ0FnZTI1aGJXVTZJQ2R2ZFhSd2RYUmZjMmw2WlNjc0lIUjVjR1U2SUNkMU16SW5mU3hjYmlBZ0lDQWdJQ0FnSUNCN2JtRnRaVG9nSjNOMGNtbGtaWE1uTENCMGVYQmxPaUFuYVRNeUp5d2diR1Z1WjNSb09pQXlmU3hjYmlBZ0lDQWdJQ0FnSUNCN2JtRnRaVG9nSjNCaFpITW5MQ0IwZVhCbE9pQW5hVE15Snl3Z2JHVnVaM1JvT2lBeWZTeGNiaUFnSUNBZ0lDQWdYVHRjYmlBZ0lDQWdJQ0FnWVhCd1pXNWtRV04wYVhaaGRHbHZibFZ1YVdadmNtMXpLR0YwZEhKcFluVjBaWE1zSUhWdWFXWnZjbTF6S1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdCY2JpQWdKSHR6YUdGa1pYSklaV3h3WlhJdWNtVm5hWE4wWlhKVmJtbG1iM0p0Y3loMWJtbG1iM0p0Y3lrdVpHVmpiR0Z5WlZaaGNtbGhZbXhsY3lndUxpNXBibkIxZEZaaGNuTXNJRzkxZEhCMWRDbDlYRzRnSUNSN2MyaGhaR1Z5U0dWc2NHVnlMbTFoYVc1VGRHRnlkQ2dwZlZ4dUlDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxtZDFZWEprUVdkaGFXNXpkRTkxZEU5bVFtOTFibVJ6VjI5eWEyZHliM1Z3VTJsNlpYTW9KM1Z1YVdadmNtMXpMbTkxZEhCMWRGOXphWHBsSnlsOVhHNGdJQ0FnYkdWMElIZHBaSFJvTUNBOUlIVnVhV1p2Y20xekxtOTFkSEIxZEY5emFHRndaVnN6WFR0Y2JpQWdJQ0JzWlhRZ2IzVjBjSFYwWDJOb1lXNXVaV3dnUFNCbmJHOWlZV3hmYVdSNElDVWdkMmxrZEdnd08xeHVJQ0FnSUhaaGNpQnBibVJsZURFZ1BTQm5iRzlpWVd4ZmFXUjRJQzhnZDJsa2RHZ3dPMXh1SUNBZ0lHeGxkQ0IzYVdSMGFERWdQU0IxYm1sbWIzSnRjeTV2ZFhSd2RYUmZjMmhoY0dWYk1sMGdMeUFrZTI5MWRIQjFkRTUxYldKbGNuMTFPMXh1SUNBZ0lHeGxkQ0JqYjJ3Z1BTQW9hVzVrWlhneElDVWdkMmxrZEdneEtTQXFJQ1I3YjNWMGNIVjBUblZ0WW1WeWZYVTdYRzRnSUNBZ2FXNWtaWGd4SUQwZ2FXNWtaWGd4SUM4Z2QybGtkR2d4TzF4dUlDQWdJR3hsZENCeWIzY2dQU0JwYm1SbGVERWdKU0IxYm1sbWIzSnRjeTV2ZFhSd2RYUmZjMmhoY0dWYk1WMDdYRzRnSUNBZ2JHVjBJR0poZEdOb0lEMGdhVzVrWlhneElDOGdkVzVwWm05eWJYTXViM1YwY0hWMFgzTm9ZWEJsV3pGZE8xeHVYRzRnSUNBZ2JHVjBJSGhmWTI5eWJtVnlJRDBnZG1Wak1qeHBNekkrS0drek1paHliM2NwTENCcE16SW9ZMjlzS1NrZ0tpQjFibWxtYjNKdGN5NXpkSEpwWkdWeklDMGdkVzVwWm05eWJYTXVjR0ZrY3p0Y2JseHVJQ0FnSUhaaGNpQjRYM1poYkhNNklHRnljbUY1UENSN2VDNTBlWEJsTG5aaGJIVmxmU3dnSkh0NFRuVnRZbVZ5ZlQ0N1hHNGdJQ0FnZG1GeUlIWmhiSFZsY3pvZ1lYSnlZWGs4Skh0dmRYUndkWFF1ZEhsd1pTNTJZV3gxWlgwc0lDUjdiM1YwY0hWMFRuVnRZbVZ5ZlQ0N1hHNGdJQ0FnYkdWMElHbHVjSFYwWDJOb1lXNXVaV3dnUFNCdmRYUndkWFJmWTJoaGJtNWxiRHRjYmlBZ0lDQXZMeUJWYzJVZ1kyOXVjM1JoYm5RZ2FXNXpkR1ZoWkNCdlppQjFibWxtYjNKdElHTmhiaUJuYVhabElHSmxkSFJsY2lCd1pYSm1iM0p0WVc1alpTQm1iM0lnZHlkeklHaGxhV2RvZEM5M2FXUjBhQzVjYmlBZ0lDQm1iM0lnS0haaGNpQjNYMmhsYVdkb2REb2dkVE15SUQwZ01IVTdJSGRmYUdWcFoyaDBJRHdnSkh0M1UyaGhjR1ZiTUYxOU95QjNYMmhsYVdkb2RDc3JLU0I3WEc0Z0lDQWdJQ0JzWlhRZ2VGOW9aV2xuYUhRZ1BTQjRYMk52Y201bGNpNTRJQ3NnYVRNeUtIZGZhR1ZwWjJoMEtUdGNiaUFnSUNBZ0lHbG1JQ2g0WDJobGFXZG9kQ0ErUFNBd0lDWW1JSFV6TWloNFgyaGxhV2RvZENrZ1BDQjFibWxtYjNKdGN5NTRYM05vWVhCbFd6RmRLU0I3WEc0Z0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z0pIdDRUblZ0WW1WeWZUc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUhoZmQybGtkR2dnUFNCNFgyTnZjbTVsY2k1NUlDc2dhVHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9lRjkzYVdSMGFDQStQU0F3SUNZbUlIVXpNaWg0WDNkcFpIUm9LU0E4SUhWdWFXWnZjbTF6TG5oZmMyaGhjR1ZiTWwwcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhoZmRtRnNjMXRwWFNBOUlDUjdlQzVuWlhRb0oySmhkR05vSnl3Z0ozVXpNaWg0WDJobGFXZG9kQ2tuTENBbmRUTXlLSGhmZDJsa2RHZ3BKeXdnSjJsdWNIVjBYMk5vWVc1dVpXd25LWDA3WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSGhmZG1Gc2MxdHBYU0E5SUNSN2VDNTBlWEJsTG5aaGJIVmxmU2d3S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWm05eUlDaDJZWElnZDE5M2FXUjBhRG9nZFRNeUlEMGdNSFU3SUhkZmQybGtkR2dnUENBa2UzZFRhR0Z3WlZzeFhYMDdJSGRmZDJsa2RHZ3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0IzWDNaaGJDQTlJQ1I3ZHk1blpYUW9KM2RmYUdWcFoyaDBKeXdnSjNkZmQybGtkR2duTENBbk1DY3NJQ2R2ZFhSd2RYUmZZMmhoYm01bGJDY3BmVHRjYmlBZ0lDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCcElEMGdNSFU3SUdrZ1BDQWtlMjkxZEhCMWRFNTFiV0psY24xMU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbGMxdHBYU0E5SUdadFlTaDRYM1poYkhOYmFTQXFJSFV6TWloMWJtbG1iM0p0Y3k1emRISnBaR1Z6V3pGZEtTQXJJSGRmZDJsa2RHaGRMQ0IzWDNaaGJDd2dkbUZzZFdWelcybGRLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNSFU3SUdrZ1BDQWtlMjkxZEhCMWRFNTFiV0psY24xMU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlIWmhiSFZsYzF0cFhUdGNiaUFnSUNBZ0lDUjdjSEp2WTJWemMwSnBZWE45WEc0Z0lDQWdJQ0FrZTJGd2NHeDVRV04wYVhaaGRHbHZibjFjYmlBZ0lDQWdJQ1I3YjNWMGNIVjBMbk5sZENnblltRjBZMmduTENBbmNtOTNKeXdnSjJOdmJDQXJJR2tuTENBbmIzVjBjSFYwWDJOb1lXNXVaV3duTENBbmRtRnNkV1VuS1gwN1hHNGdJQ0FnZlZ4dUlDQjlZRHRjYmlBZ0lDQWdJSDA3WEc1Y2JpQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUc1aGJXVTZJQ2RIY205MWNHVmtRMjl1ZGkxV1pXTjBiM0pwZW1VbkxGeHVJQ0FnSUNBZ0lDQnphR0ZrWlhKRFlXTm9aVG9nZTF4dUlDQWdJQ0FnSUNBZ0lHaHBiblE2SUdBa2UyRjBkSEpwWW5WMFpYTXVZMkZqYUdWTFpYbDlPeVI3WTI5dGNHOXVaVzUwYzMwN0pIdHZkWFJ3ZFhST2RXMWlaWEo5T3lSN2VFNTFiV0psY24wN0pIdDNVMmhoY0dWYk1GMTlPeVI3ZDFOb1lYQmxXekZkZldBc1hHNGdJQ0FnSUNBZ0lDQWdhVzV3ZFhSRVpYQmxibVJsYm1OcFpYTTZJR2hoYzBKcFlYTWdQeUJiSjNKaGJtc25MQ0FuY21GdWF5Y3NJQ2QwZVhCbEoxMGdPaUJiSjNKaGJtc25MQ0FuY21GdWF5ZGRYRzRnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUdkbGRGSjFia1JoZEdFNklDZ3BJRDArSUNoN1hHNGdJQ0FnSUNBZ0lDQWdiM1YwY0hWMGN6b2dXM3RrYVcxek9pQnZkWFJ3ZFhSVGFHRndaU3dnWkdGMFlWUjVjR1U2SUdsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlgxZExGeHVJQ0FnSUNBZ0lDQWdJR1JwYzNCaGRHTm9SM0p2ZFhBNklIdDRPaUJOWVhSb0xtTmxhV3dvYjNWMGNIVjBVMmw2WlNBdklEWTBJQzhxSUhkdmNtdG5jbTkxY0NCemFYcGxJQ292S1gwc1hHNGdJQ0FnSUNBZ0lDQWdjSEp2WjNKaGJWVnVhV1p2Y20xelhHNGdJQ0FnSUNBZ0lIMHBMRnh1SUNBZ0lDQWdJQ0JuWlhSVGFHRmtaWEpUYjNWeVkyVXNYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1JHRjBZVlI1Y0dWOUlHWnliMjBnSnk0dUx5NHVMeTR1TDNkaGMyMHRZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdWR1Z1YzI5eVZtbGxkMzBnWm5KdmJTQW5MaTR2TGk0dmRHVnVjMjl5TFhacFpYY25PMXh1YVcxd2IzSjBJSHRDY205aFpHTmhjM1JWZEdsc0xDQlRhR0Z3WlZWMGFXeDlJR1p5YjIwZ0p5NHVMeTR1TDNWMGFXd25PMXh1YVcxd2IzSjBJSHREYjIxd2RYUmxRMjl1ZEdWNGRDd2dVSEp2WjNKaGJVbHVabThzSUZCeWIyZHlZVzFWYm1sbWIzSnRmU0JtY205dElDY3VMaTkwZVhCbGN5YzdYRzVjYm1sdGNHOXlkQ0I3WTNKbFlYUmxUV0YwYlhWc1VISnZaM0poYlVsdVptOTlJR1p5YjIwZ0p5NHZNM0prTFhCaGNuUjVMMjFoZEcxMWJGOXdZV05yWldSZmQyVmlaM0IxSnp0Y2JtbHRjRzl5ZENCN1kzSmxZWFJsVkdWdWMyOXlVMmhoY0dWV1lYSnBZV0pzWlhNc0lHZGxkRUp5YjJGa1kyRnpkRVJwYlhNc0lHZGxkRTFoZUVOdmJYQnZibVZ1ZEhNc0lFbHVaR2xqWlhOSVpXeHdaWElzSUdsdWNIVjBWbUZ5YVdGaWJHVXNJR2x1ZEdWeWJtRnNWbUZ5YVdGaWJHVXNJRzkxZEhCMWRGWmhjbWxoWW14bExDQlRhR0ZrWlhKSVpXeHdaWElzSUhSbGJuTnZjbFI1Y0dWVWIxZHpaMnhUZEc5eVlXZGxWSGx3WlN3Z1ZXNXBabTl5YlhOQmNuSmhlVlI1Y0dWOUlHWnliMjBnSnk0dlkyOXRiVzl1Snp0Y2JtbHRjRzl5ZENCN1lYQndaVzVrUVdOMGFYWmhkR2x2YmxWdWFXWnZjbTF6TENCaGNIQmxibVJCWTNScGRtRjBhVzl1Vlc1cFptOXliWE5FWVhSaExDQm5aWFJCWTNScGRtRjBhVzl1VTI1cGNIQmxkQ3dnU1c1MFpYSnVZV3hCWTNScGRtRjBhVzl1UVhSMGNtbGlkWFJsYzMwZ1puSnZiU0FuTGk5bWRYTmxMWFYwYVd4ekp6dGNibHh1Wlhod2IzSjBJR052Ym5OMElHTnlaV0YwWlU1aGFYWmxUV0YwYlhWc1VISnZaM0poYlVsdVptOGdQVnh1SUNBZ0lDaHBibkIxZEhNNklISmxZV1J2Ym14NUlGUmxibk52Y2xacFpYZGJYU3dnWVdOMGFYWmhkR2x2YmtGMGRISnBZblYwWlhNNklFbHVkR1Z5Ym1Gc1FXTjBhWFpoZEdsdmJrRjBkSEpwWW5WMFpYTXNJRzkxZEhCMWRGTm9ZWEJsT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN4Y2JpQWdJQ0FnY21WemFHRndaV1JQZFhSd2RYUlRhR0Z3WlQ4NklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZExGeHVJQ0FnSUNCcGMwTm9ZVzV1Wld4elRHRnpkQ0E5SUdaaGJITmxJQzhxSUc5dWJIa2dkWE5sWkNCbWIzSWdZMjl1ZGpKa1FubE5ZWFJOZFd3cUx5azZJRkJ5YjJkeVlXMUpibVp2SUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUdGVGFHRndaU0E5SUdsdWNIVjBjMXN3WFM1a2FXMXpPMXh1SUNBZ0lDQWdZMjl1YzNRZ1lsTm9ZWEJsSUQwZ2FXNXdkWFJ6V3pGZExtUnBiWE03WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJRTBnUFNCaFUyaGhjR1ZiWVZOb1lYQmxMbXhsYm1kMGFDQXRJREpkTzF4dUlDQWdJQ0FnWTI5dWMzUWdUaUE5SUdKVGFHRndaVnRpVTJoaGNHVXViR1Z1WjNSb0lDMGdNVjA3WEc0Z0lDQWdJQ0JqYjI1emRDQkxJRDBnWVZOb1lYQmxXMkZUYUdGd1pTNXNaVzVuZEdnZ0xTQXhYVHRjYmlBZ0lDQWdJR052Ym5OMElHTnZiWEJ2Ym1WdWRITWdQU0JuWlhSTllYaERiMjF3YjI1bGJuUnpLRTRwTzF4dUlDQWdJQ0FnWTI5dWMzUWdZVU52YlhCdmJtVnVkSE1nUFNCblpYUk5ZWGhEYjIxd2IyNWxiblJ6S0VzcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYjNWMGNIVjBUblZ0WW1WeUlEMGdaMlYwVFdGNFEyOXRjRzl1Wlc1MGN5aE5LVHRjYmlBZ0lDQWdJR052Ym5OMElHOTFkSEIxZEZOcGVtVWdQU0JUYUdGd1pWVjBhV3d1YzJsNlpTaHZkWFJ3ZFhSVGFHRndaU2tnTHlCamIyMXdiMjVsYm5SeklDOGdiM1YwY0hWMFRuVnRZbVZ5TzF4dUlDQWdJQ0FnWTI5dWMzUWdhR0Z6UW1saGN5QTlJR2x1Y0hWMGN5NXNaVzVuZEdnZ1BpQXlPMXh1SUNBZ0lDQWdZMjl1YzNRZ2IzVjBaWEpFYVcxeklEMGdjbVZ6YUdGd1pXUlBkWFJ3ZFhSVGFHRndaU0EvSUhKbGMyaGhjR1ZrVDNWMGNIVjBVMmhoY0dVdWMyeHBZMlVvTUN3Z0xUSXBJRG9nYjNWMGNIVjBVMmhoY0dVdWMyeHBZMlVvTUN3Z0xUSXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ1ltRjBZMmhUYVhwbElEMGdVMmhoY0dWVmRHbHNMbk5wZW1Vb2IzVjBaWEpFYVcxektUdGNiaUFnSUNBZ0lHTnZibk4wSUc5MWRIQjFkRk5vWVhCbFNXNVRhR0ZrWlhJZ1BTQmJZbUYwWTJoVGFYcGxMQ0JOTENCT1hUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2NISnZaM0poYlZWdWFXWnZjbTF6T2lCUWNtOW5jbUZ0Vlc1cFptOXliVnRkSUQwZ1cxeHVJQ0FnSUNBZ0lDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJ2ZFhSd2RYUlRhWHBsZlN3Z2UzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2dUWDBzSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklFNTlMRnh1SUNBZ0lDQWdJQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCTGZWeHVJQ0FnSUNBZ1hUdGNiaUFnSUNBZ0lHRndjR1Z1WkVGamRHbDJZWFJwYjI1VmJtbG1iM0p0YzBSaGRHRW9ZV04wYVhaaGRHbHZia0YwZEhKcFluVjBaWE1zSUhCeWIyZHlZVzFWYm1sbWIzSnRjeWs3WEc0Z0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTXVjSFZ6YUNndUxpNWpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5aHZkWFJsY2tScGJYTXNJR0ZUYUdGd1pTd2dZbE5vWVhCbEtTazdYRzRnSUNBZ0lDQnBaaUFvYUdGelFtbGhjeWtnZTF4dUlDQWdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE11Y0hWemFDZ3VMaTVqY21WaGRHVlVaVzV6YjNKVGFHRndaVlpoY21saFlteGxjeWhwYm5CMWRITmJNbDB1WkdsdGN5a3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdjSEp2WjNKaGJWVnVhV1p2Y20xekxuQjFjMmdvTGk0dVkzSmxZWFJsVkdWdWMyOXlVMmhoY0dWV1lYSnBZV0pzWlhNb2IzVjBjSFYwVTJoaGNHVkpibE5vWVdSbGNpa3BPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVZ1BTQW9jMmhoWkdWeVNHVnNjR1Z5T2lCVGFHRmtaWEpJWld4d1pYSXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWW1GMFkyaEVhVzF6SUQwZ2FXNTBaWEp1WVd4V1lYSnBZV0pzWlNnblltRjBZMmhmWkdsdGN5Y3NJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU3dnYjNWMFpYSkVhVzF6TG14bGJtZDBhQ2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0VnUFNCcGJuQjFkRlpoY21saFlteGxLQ2RoSnl3Z2FXNXdkWFJ6V3pCZExtUmhkR0ZVZVhCbExDQmhVMmhoY0dVdWJHVnVaM1JvTENCaFEyOXRjRzl1Wlc1MGN5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElHSWdQU0JwYm5CMWRGWmhjbWxoWW14bEtDZGlKeXdnYVc1d2RYUnpXekZkTG1SaGRHRlVlWEJsTENCaVUyaGhjR1V1YkdWdVozUm9MQ0JqYjIxd2IyNWxiblJ6S1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYjNWMGNIVjBJRDBnYjNWMGNIVjBWbUZ5YVdGaWJHVW9KMjkxZEhCMWRDY3NJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU3dnYjNWMGNIVjBVMmhoY0dWSmJsTm9ZV1JsY2k1c1pXNW5kR2dzSUdOdmJYQnZibVZ1ZEhNcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCaVlYTmxWSGx3WlNBOUlIUmxibk52Y2xSNWNHVlViMWR6WjJ4VGRHOXlZV2RsVkhsd1pTaHZkWFJ3ZFhRdWRIbHdaUzUwWlc1emIzSXBPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmhjSEJzZVVGamRHbDJZWFJwYjI0Z1BTQm5aWFJCWTNScGRtRjBhVzl1VTI1cGNIQmxkQ2hoWTNScGRtRjBhVzl1UVhSMGNtbGlkWFJsY3l3Z2IzVjBjSFYwTG5SNWNHVXVkbUZzZFdVc0lHSmhjMlZVZVhCbEtUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FXNXdkWFJXWVhKcFlXSnNaWE1nUFNCYllTd2dZbDA3WEc0Z0lDQWdJQ0FnSUd4bGRDQndjbTlqWlhOelFtbGhjeUE5SUNjbk8xeHVJQ0FnSUNBZ0lDQnBaaUFvYUdGelFtbGhjeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdKcFlYTkRiMjF3YjI1bGJuUnpJRDBnYVhORGFHRnVibVZzYzB4aGMzUWdQeUJqYjIxd2IyNWxiblJ6SURvZ01UdGNiaUFnSUNBZ0lDQWdJQ0JwYm5CMWRGWmhjbWxoWW14bGN5NXdkWE5vS0dsdWNIVjBWbUZ5YVdGaWJHVW9KMkpwWVhNbkxDQnBibkIxZEhOYk1sMHVaR0YwWVZSNWNHVXNJR2x1Y0hWMGMxc3lYUzVrYVcxekxteGxibWQwYUN3Z1ltbGhjME52YlhCdmJtVnVkSE1wS1R0Y2JpQWdJQ0FnSUNBZ0lDQndjbTlqWlhOelFtbGhjeUE5SUdBa2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGMwTm9ZVzV1Wld4elRHRnpkQ0EvSUdCMllXeDFaU0FyUFNCaWFXRnpXMk52YkNBdklDUjdZbWxoYzBOdmJYQnZibVZ1ZEhOOVhUdGdJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmdkbUZzZFdVZ0t6MGdKSHR2ZFhSd2RYUXVkSGx3WlM1MllXeDFaWDBvWW1saGMxdHliM2NnS3lCcFhTazdZSDFnTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2IzVjBaWEpFYVcxelFTQTlJR0ZUYUdGd1pTNXpiR2xqWlNnd0xDQXRNaWs3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzkxZEdWeVJHbHRjMElnUFNCaVUyaGhjR1V1YzJ4cFkyVW9NQ3dnTFRJcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCaWNtOWhaRU5oYzNSQlJHbHRjeUE5SUdkbGRFSnliMkZrWTJGemRFUnBiWE1vYjNWMFpYSkVhVzF6UVN3Z2IzVjBaWEpFYVcxektUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1luSnZZV1JEWVhOMFFrUnBiWE1nUFNCblpYUkNjbTloWkdOaGMzUkVhVzF6S0c5MWRHVnlSR2x0YzBJc0lHOTFkR1Z5UkdsdGN5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElIVnVhV1p2Y20xek9pQlZibWxtYjNKdGMwRnljbUY1Vkhsd1pTQTlJRnRjYmlBZ0lDQWdJQ0FnSUNCN2JtRnRaVG9nSjI5MWRIQjFkRjl6YVhwbEp5d2dkSGx3WlRvZ0ozVXpNaWQ5TENCN2JtRnRaVG9nSjAwbkxDQjBlWEJsT2lBbmRUTXlKMzBzSUh0dVlXMWxPaUFuVGljc0lIUjVjR1U2SUNkMU16SW5mU3hjYmlBZ0lDQWdJQ0FnSUNCN2JtRnRaVG9nSjBzbkxDQjBlWEJsT2lBbmRUTXlKMzFjYmlBZ0lDQWdJQ0FnWFR0Y2JpQWdJQ0FnSUNBZ1lYQndaVzVrUVdOMGFYWmhkR2x2YmxWdWFXWnZjbTF6S0dGamRHbDJZWFJwYjI1QmRIUnlhV0oxZEdWekxDQjFibWxtYjNKdGN5azdYRzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaMlYwU1c1a2FXTmxjeUE5SUNoMllYSnBZV0pzWlRvZ1NXNWthV05sYzBobGJIQmxjaXdnWW5KdllXUkRZWE4wUkdsdGN6b2diblZ0WW1WeVcxMHBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCeVlXNXJJRDBnZG1GeWFXRmliR1V1Y21GdWF6dGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnVZVzFsSUQwZ2RtRnlhV0ZpYkdVdWJtRnRaVHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9jbUZ1YXlBOVBUMGdNaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHQjJZWElnSkh0dVlXMWxmVjlwYm1ScFkyVnpJRDBnSkh0MllYSnBZV0pzWlM1MGVYQmxMbWx1WkdsalpYTjlLREIxTENBd2RTazdZRHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1ltRjBZMmhTWVc1cklEMGdZbUYwWTJoRWFXMXpMbkpoYm1zN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUhKbGMxTjBjaUE5SUdCMllYSWdKSHR1WVcxbGZWOXBibVJwWTJWek9pQWtlM1poY21saFlteGxMblI1Y0dVdWFXNWthV05sYzMwN1lEdGNiaUFnSUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ2NtRnVheUF0SURJZ0xTQXhMQ0JxSUQwZ1ltRjBZMmhTWVc1cklDMGdNVHNnYVNBK1BTQXdPeUJwTFMwc0lHb3RMU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZ6VTNSeUlDczlJR0JjWEc0a2UyNWhiV1Y5WDJsdVpHbGpaWE5iSkh0cGZWMGdQU0FrZTJKaGRHTm9VbUZ1YXlBK0lERWdQeUJnWW1GMFkyaGZhVzVrYVdObGMxc2tlMnA5WFdBZ09pQW5ZbUYwWTJoZmFXNWthV05sY3lkOU8yQTdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lHSnliMkZrUTJGemRFUnBiWE11Wm05eVJXRmphQ2hwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGMxTjBjaUFyUFNCZ1hGeHVKSHR1WVcxbGZWOXBibVJwWTJWeld5UjdhWDFkSUQwZ01EdGdPMXh1SUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQWdJSEpsYzFOMGNpQXJQU0JnSkh0dVlXMWxmVjlwYm1ScFkyVnpXeVI3Y21GdWF5QXRJREo5WFNBOUlEQjFPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pIdHVZVzFsZlY5cGJtUnBZMlZ6V3lSN2NtRnVheUF0SURGOVhTQTlJREIxTzJBN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMU4wY2p0Y2JpQWdJQ0FnSUNBZ2ZUdGNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQmpZV3hqVW1WemRXeDBJRDBnS0NrNklITjBjbWx1WnlBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElHTmhiR05UZEhJZ1BTQmdkbUZ5SUdGZlpHRjBZVG9nSkh0aExuUjVjR1V1ZG1Gc2RXVjlPMkE3WEc0Z0lDQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmhRMjl0Y0c5dVpXNTBjenNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCallXeGpVM1J5SUNzOUlHQmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR0pmWkdGMFlTUjdhWDBnUFNCaVd5aGlYMjltWm5ObGRDQXJJQ2hySUNzZ0pIdHBmU2tnS2lCMWJtbG1iM0p0Y3k1T0lDc2dZMjlzS1NBdklDUjdZMjl0Y0c5dVpXNTBjMzFkTzJBN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2IzVjBjSFYwVG5WdFltVnlPeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGJHTlRkSElnS3owZ1lHRmZaR0YwWVNBOUlHRmJLR0ZmYjJabWMyVjBJQ3NnS0hKdmR5QXJJQ1I3YVgwcElDb2dkVzVwWm05eWJYTXVTeUFySUdzcElDOGdKSHRoUTI5dGNHOXVaVzUwYzMxZE8yQTdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2dZVU52YlhCdmJtVnVkSE03SUdvckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hqVTNSeUlDczlJR0JjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhiSFZsYzFza2UybDlYU0E5SUdadFlTZ2tlMkl1ZEhsd1pTNTJZV3gxWlgwb1lWOWtZWFJoSkh0aFEyOXRjRzl1Wlc1MGN5QTlQVDBnTVNBL0lDY25JRG9nWUZza2UycDlYV0I5S1N3Z1lsOWtZWFJoSkh0cWZTd2dkbUZzZFdWeld5UjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwZlYwcE8xeGNibUE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCallXeGpVM1J5TzF4dUlDQWdJQ0FnSUNCOU8xeHVYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmdYRzRnSUNSN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6YUdGa1pYSklaV3h3WlhJdWNtVm5hWE4wWlhKVmJtbG1iM0p0Y3loMWJtbG1iM0p0Y3lrdWNtVm5hWE4wWlhKSmJuUmxjbTVoYkZaaGNtbGhZbXhsY3loaVlYUmphRVJwYlhNcExtUmxZMnhoY21WV1lYSnBZV0pzWlhNb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0xpNHVhVzV3ZFhSV1lYSnBZV0pzWlhNc0lHOTFkSEIxZENsOVhHNGdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxtMWhhVzVUZEdGeWRDZ3BmVnh1SUNBZ0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG1kMVlYSmtRV2RoYVc1emRFOTFkRTltUW05MWJtUnpWMjl5YTJkeWIzVndVMmw2WlhNb0ozVnVhV1p2Y20xekxtOTFkSEIxZEY5emFYcGxKeWw5WEc0Z0lDQWdiR1YwSUdOdmJDQTlJQ2huYkc5aVlXeGZhV1I0SUNVZ0tIVnVhV1p2Y20xekxrNGdMeUFrZTJOdmJYQnZibVZ1ZEhOOUtTa2dLaUFrZTJOdmJYQnZibVZ1ZEhOOU8xeHVJQ0FnSUhaaGNpQnBibVJsZURFZ1BTQm5iRzlpWVd4ZmFXUjRJQzhnS0hWdWFXWnZjbTF6TGs0Z0x5QWtlMk52YlhCdmJtVnVkSE45S1R0Y2JpQWdJQ0JzWlhRZ2MzUnlhV1JsTVNBOUlIVnVhV1p2Y20xekxrMGdMeUFrZTI5MWRIQjFkRTUxYldKbGNuMDdYRzRnSUNBZ2JHVjBJSEp2ZHlBOUlDaHBibVJsZURFZ0pTQnpkSEpwWkdVeEtTQXFJQ1I3YjNWMGNIVjBUblZ0WW1WeWZUdGNiaUFnSUNCc1pYUWdZbUYwWTJnZ1BTQnBibVJsZURFZ0x5QnpkSEpwWkdVeE8xeHVYRzRnSUNBZ0pIdHZkWFJ3ZFhSVGFHRndaUzVzWlc1bmRHZ2dQVDA5SURJZ1B5QW5KeUE2SUdCc1pYUWdZbUYwWTJoZmFXNWthV05sY3lBOUlDUjdZbUYwWTJoRWFXMXpMbTltWm5ObGRGUnZTVzVrYVdObGN5Z25ZbUYwWTJnbktYMDdZSDFjYmlBZ0lDQWtlMmRsZEVsdVpHbGpaWE1vWVN3Z1luSnZZV1JEWVhOMFFVUnBiWE1wZlZ4dUlDQWdJR3hsZENCaFgyOW1abk5sZENBOUlDUjdZUzVwYm1ScFkyVnpWRzlQWm1aelpYUW9KMkZmYVc1a2FXTmxjeWNwZlR0Y2JpQWdJQ0FrZTJkbGRFbHVaR2xqWlhNb1lpd2dZbkp2WVdSRFlYTjBRa1JwYlhNcGZWeHVJQ0FnSUd4bGRDQmlYMjltWm5ObGRDQTlJQ1I3WWk1cGJtUnBZMlZ6Vkc5UFptWnpaWFFvSjJKZmFXNWthV05sY3ljcGZUdGNiaUFnSUNCMllYSWdkbUZzZFdWek9pQmhjbkpoZVR3a2UyOTFkSEIxZEM1MGVYQmxMblpoYkhWbGZTd2dKSHR2ZFhSd2RYUk9kVzFpWlhKOVBqdGNiaUFnSUNCbWIzSWdLSFpoY2lCck9pQjFNeklnUFNBd2RUc2dheUE4SUhWdWFXWnZjbTF6TGtzN0lHc2dQU0JySUNzZ0pIdGhRMjl0Y0c5dVpXNTBjMzBwSUh0Y2JpQWdJQ0FnSUNSN1kyRnNZMUpsYzNWc2RDZ3BmVnh1SUNBZ0lIMWNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNSFU3SUdrZ1BDQWtlMjkxZEhCMWRFNTFiV0psY24xMU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUhaaGNpQjJZV3gxWlNBOUlIWmhiSFZsYzF0cFhUdGNiaUFnSUNBZ0lDUjdjSEp2WTJWemMwSnBZWE45WEc0Z0lDQWdJQ0FrZTJGd2NHeDVRV04wYVhaaGRHbHZibjFjYmlBZ0lDQWdJR3hsZENCamRYSmZhVzVrYVdObGN5QTlJQ1I3YjNWMGNIVjBMblI1Y0dVdWFXNWthV05sYzMwb1ltRjBZMmdzSUhKdmR5QXJJR2tzSUdOdmJDazdYRzRnSUNBZ0lDQnNaWFFnYjJabWMyVjBJRDBnSkh0dmRYUndkWFF1YVc1a2FXTmxjMVJ2VDJabWMyVjBLQ2RqZFhKZmFXNWthV05sY3ljcGZUdGNiaUFnSUNBZ0lDUjdiM1YwY0hWMExuTmxkRUo1VDJabWMyVjBLR0J2Wm1aelpYUWdMeUFrZTJOdmJYQnZibVZ1ZEhOOVlDd2dKM1poYkhWbEp5bDlPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQmdPMXh1SUNBZ0lDQWdmVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJRzVoYldVNklDZE5ZWFJOZFd4T1lXbDJaU2NzWEc0Z0lDQWdJQ0FnSUhOb1lXUmxja05oWTJobE9pQjdYRzRnSUNBZ0lDQWdJQ0FnYUdsdWREb2dZQ1I3WVdOMGFYWmhkR2x2YmtGMGRISnBZblYwWlhNdVlXTjBhWFpoZEdsdmJuMDdKSHRqYjIxd2IyNWxiblJ6ZlRza2UyRkRiMjF3YjI1bGJuUnpmVHNrZTI5MWRIQjFkRTUxYldKbGNuMDdKSHRwYzBOb1lXNXVaV3h6VEdGemRIMWdMRnh1SUNBZ0lDQWdJQ0FnSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6T2lCb1lYTkNhV0Z6SUQ4Z1d5ZHlZVzVySnl3Z0ozSmhibXNuTENBbmNtRnVheWRkSURvZ1d5ZHlZVzVySnl3Z0ozSmhibXNuWFZ4dUlDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQm5aWFJTZFc1RVlYUmhPaUFvS1NBOVBpQW9lMXh1SUNBZ0lDQWdJQ0FnSUc5MWRIQjFkSE02SUZ0N1pHbHRjem9nYjNWMGNIVjBVMmhoY0dVc0lHUmhkR0ZVZVhCbE9pQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVjlYU3hjYmlBZ0lDQWdJQ0FnSUNCa2FYTndZWFJqYUVkeWIzVndPaUI3ZURvZ1RXRjBhQzVqWldsc0tHOTFkSEIxZEZOcGVtVWdMeUEyTkNBdktpQjNiM0pyWjNKdmRYQWdjMmw2WlNBcUx5bDlMRnh1SUNBZ0lDQWdJQ0FnSUhCeWIyZHlZVzFWYm1sbWIzSnRjMXh1SUNBZ0lDQWdJQ0I5S1N4Y2JpQWdJQ0FnSUNBZ1oyVjBVMmhoWkdWeVUyOTFjbU5sWEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDA3WEc1Y2JtTnZibk4wSUhaaGJHbGtZWFJsU1c1d2RYUnpJRDBnS0dsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZEtUb2dkbTlwWkNBOVBpQjdYRzRnSUdsbUlDZ2hhVzV3ZFhSeklIeDhJR2x1Y0hWMGN5NXNaVzVuZEdnZ0lUMDlJRElwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMDFoZEUxMWJDQnlaWEYxYVhKbGN5QXlJR2x1Y0hWMGN5NG5LVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBibkIxZEhOYk1GMHVaR2x0YzF0cGJuQjFkSE5iTUYwdVpHbHRjeTVzWlc1bmRHZ2dMU0F4WFNBaFBUMGdhVzV3ZFhSeld6RmRMbVJwYlhOYmFXNXdkWFJ6V3pGZExtUnBiWE11YkdWdVozUm9JQzBnTWwwcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjNOb1lYSmxaQ0JrYVcxbGJuTnBiMjRnWkc5bGN5QnViM1FnYldGMFkyZ3VKeWs3WEc0Z0lIMWNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J0WVhSTmRXd2dQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXBPaUIyYjJsa0lEMCtJSHRjYmlBZ2RtRnNhV1JoZEdWSmJuQjFkSE1vWTI5dWRHVjRkQzVwYm5CMWRITXBPMXh1SUNCamIyNXpkQ0J2ZFhSd2RYUlRhR0Z3WlNBOUlFSnliMkZrWTJGemRGVjBhV3d1WTJGc1kxTm9ZWEJsS0dOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1ScGJYTXNJR052Ym5SbGVIUXVhVzV3ZFhSeld6RmRMbVJwYlhNc0lIUnlkV1VwTzF4dUlDQnBaaUFvSVc5MWRIQjFkRk5vWVhCbEtTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkRFlXNWNYQ2QwSUhWelpTQnRZWFJ0ZFd3Z2IyNGdkR2hsSUdkcGRtVnVJSFJsYm5OdmNuTW5LVHRjYmlBZ2ZWeHVJQ0JqYjI1emRDQk9JRDBnYjNWMGNIVjBVMmhoY0dWYmIzVjBjSFYwVTJoaGNHVXViR1Z1WjNSb0lDMGdNVjA3WEc0Z0lHTnZibk4wSUVzZ1BTQmpiMjUwWlhoMExtbHVjSFYwYzFzd1hTNWthVzF6VzJOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1ScGJYTXViR1Z1WjNSb0lDMGdNVjA3WEc0Z0lHbG1JQ2hPSUR3Z09DQW1KaUJMSUR3Z09Da2dlMXh1SUNBZ0lHTnZiblJsZUhRdVkyOXRjSFYwWlNoamNtVmhkR1ZPWVdsMlpVMWhkRzExYkZCeWIyZHlZVzFKYm1adktHTnZiblJsZUhRdWFXNXdkWFJ6TENCN1lXTjBhWFpoZEdsdmJqb2dKeWQ5TENCdmRYUndkWFJUYUdGd1pTa3BPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGpjbVZoZEdWTllYUnRkV3hRY205bmNtRnRTVzVtYnloamIyNTBaWGgwTG1sdWNIVjBjeXdnZTJGamRHbDJZWFJwYjI0NklDY25mU3dnYjNWMGNIVjBVMmhoY0dVcEtUdGNiaUFnZlZ4dWZUdGNiaUlzSUNJdkx5QkRiM0I1Y21sbmFIUWdLR01wSUUxcFkzSnZjMjltZENCRGIzSndiM0poZEdsdmJpNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmk4dklFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQk5TVlFnVEdsalpXNXpaUzVjYmx4dWFXMXdiM0owSUh0VVpXNXpiM0pXYVdWM2ZTQm1jbTl0SUNjdUxpOHVMaTkwWlc1emIzSXRkbWxsZHljN1hHNXBiWEJ2Y25RZ2UxQnZiMnhEYjI1MlZYUnBiSDBnWm5KdmJTQW5MaTR2TGk0dmRYUnBiQ2M3WEc1cGJYQnZjblFnZTBGMGRISnBZblYwWlZkcGRHaERZV05vWlV0bGVYMGdabkp2YlNBbkxpNHZZWFIwY21saWRYUmxMWGRwZEdndFkyRmphR1V0YTJWNUp6dGNibWx0Y0c5eWRDQjdRMjl0Y0hWMFpVTnZiblJsZUhSOUlHWnliMjBnSnk0dUwzUjVjR1Z6Snp0Y2JseHVhVzF3YjNKMElIdGpjbVZoZEdWRGIyNTJNa1JOWVhSTmRXeFFjbTluY21GdFNXNW1iMzBnWm5KdmJTQW5MaTh6Y21RdGNHRnlkSGt2WTI5dWRqSmtYMjF0WDNkbFltZHdkU2M3WEc1cGJYQnZjblFnZTJOeVpXRjBaVTFoZEcxMWJGQnliMmR5WVcxSmJtWnZmU0JtY205dElDY3VMek55WkMxd1lYSjBlUzl0WVhSdGRXeGZjR0ZqYTJWa1gzZGxZbWR3ZFNjN1hHNXBiWEJ2Y25RZ2UyTnlaV0YwWlVkeWIzVndaV1JEYjI1MlVISnZaM0poYlVsdVptOHNJR055WldGMFpVZHliM1Z3WldSRGIyNTJWbVZqZEc5eWFYcGxVSEp2WjNKaGJVbHVabTk5SUdaeWIyMGdKeTR2WTI5dWRpMW5jbTkxY0dWa0p6dGNibWx0Y0c5eWRDQjdTVzUwWlhKdVlXeEJZM1JwZG1GMGFXOXVRWFIwY21saWRYUmxjeXdnY0dGeWMyVkpiblJsY201aGJFRmpkR2wyWVhScGIyNUJkSFJ5YVdKMWRHVnpmU0JtY205dElDY3VMMloxYzJVdGRYUnBiSE1uTzF4dWFXMXdiM0owSUh0amNtVmhkR1ZPWVdsMlpVMWhkRzExYkZCeWIyZHlZVzFKYm1admZTQm1jbTl0SUNjdUwyMWhkRzExYkNjN1hHNXBiWEJ2Y25RZ2UyTnlaV0YwWlZSeVlXNXpjRzl6WlZCeWIyZHlZVzFKYm1admZTQm1jbTl0SUNjdUwzUnlZVzV6Y0c5elpTYzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQmpZV3hqZFd4aGRHVlBkWFJ3ZFhSVGFHRndaU0E5WEc0Z0lDQWdLR2x1Y0hWMFUyaGhjR1U2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkTENCclpYSnVaV3hUYUdGd1pUb2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHNJR1JwYkdGMGFXOXVjem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBzWEc0Z0lDQWdJR0ZrYW5WemRGQmhaSE02SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkTENCemRISnBaR1Z6T2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z2FYTkRhR0Z1Ym1Wc1RHRnpkRG9nWW05dmJHVmhiaWs2SUc1MWJXSmxjbHRkSUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUdKaGRHTm9VMmw2WlNBOUlHbHVjSFYwVTJoaGNHVmJNRjA3WEc0Z0lDQWdJQ0JqYjI1emRDQnBibkIxZEZOd1lYUnBZV3hUYUdGd1pTQTlJR2x1Y0hWMFUyaGhjR1V1YzJ4cFkyVW9hWE5EYUdGdWJtVnNUR0Z6ZENBL0lERWdPaUF5TENCcGMwTm9ZVzV1Wld4TVlYTjBJRDhnTXlBNklEUXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ2MzQmhkR2xoYkZKaGJtc2dQU0JwYm5CMWRGTndZWFJwWVd4VGFHRndaUzVzWlc1bmRHZzdYRzRnSUNBZ0lDQmpiMjV6ZENCdmRYUkRhR0Z1Ym1Wc2N5QTlJR3RsY201bGJGTm9ZWEJsV3pCZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYTJWeWJtVnNVM0JoZEdsaGJGTm9ZWEJsSUQwZ2EyVnlibVZzVTJoaGNHVXVjMnhwWTJVb01pazdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FXeGhkR1ZrUzJWeWJtVnNVMmhoY0dVZ1BTQnJaWEp1Wld4VGNHRjBhV0ZzVTJoaGNHVXViV0Z3S0NoMkxDQnBLU0E5UGlCMklDc2dLSFlnTFNBeEtTQXFJQ2hrYVd4aGRHbHZibk5iYVYwZ0xTQXhLU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQnBibkIxZEZOd1lYUnBZV3hUYUdGd1pWZHBkR2hRWVdRZ1BTQnBibkIxZEZOd1lYUnBZV3hUYUdGd1pTNXRZWEFvS0hZc0lHa3BJRDArSUhZZ0t5QmhaR3AxYzNSUVlXUnpXMmxkSUNzZ1lXUnFkWE4wVUdGa2MxdHBJQ3NnYzNCaGRHbGhiRkpoYm10ZEtUdGNiaUFnSUNBZ0lHTnZibk4wSUc5MWRIQjFkRk5vWVhCbElEMWNiaUFnSUNBZ0lDQWdJQ0JwYm5CMWRGTndZWFJwWVd4VGFHRndaVmRwZEdoUVlXUXViV0Z3S0NoMkxDQnBLU0E5UGlCTllYUm9MbVpzYjI5eUtDaDJJQzBnWkdsc1lYUmxaRXRsY201bGJGTm9ZWEJsVzJsZElDc2djM1J5YVdSbGMxdHBYU2tnTHlCemRISnBaR1Z6VzJsZEtTazdYRzRnSUNBZ0lDQnZkWFJ3ZFhSVGFHRndaUzV6Y0d4cFkyVW9NQ3dnTUN3Z1ltRjBZMmhUYVhwbEtUdGNiaUFnSUNBZ0lHOTFkSEIxZEZOb1lYQmxMbk53YkdsalpTaHBjME5vWVc1dVpXeE1ZWE4wSUQ4Z015QTZJREVzSURBc0lHOTFkRU5vWVc1dVpXeHpLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnZkWFJ3ZFhSVGFHRndaVHRjYmlBZ0lDQjlPMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVOdmJuWkJkSFJ5YVdKMWRHVnpJR1Y0ZEdWdVpITWdTVzUwWlhKdVlXeEJZM1JwZG1GMGFXOXVRWFIwY21saWRYUmxjeXdnUVhSMGNtbGlkWFJsVjJsMGFFTmhZMmhsUzJWNUlIdGNiaUFnY21WaFpHOXViSGtnWVhWMGIxQmhaRG9nYzNSeWFXNW5PMXh1SUNCeVpXRmtiMjVzZVNCa2FXeGhkR2x2Ym5NNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZE8xeHVJQ0J5WldGa2IyNXNlU0JtYjNKdFlYUTZJQ2RPU0ZkREozd25Ua05JVnljN1hHNGdJSEpsWVdSdmJteDVJR2R5YjNWd09pQnVkVzFpWlhJN1hHNGdJSEpsWVdSdmJteDVJR3RsY201bGJGTm9ZWEJsT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFR0Y2JpQWdjbVZoWkc5dWJIa2djR0ZrY3pvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwN1hHNGdJSEpsWVdSdmJteDVJSE4wY21sa1pYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRPMXh1SUNCeVpXRmtiMjVzZVNCM1NYTkRiMjV6ZERvZ1ltOXZiR1ZoYmp0Y2JuMWNibHh1THk4Z1ptOXlJSFJ5WVc1emNHOXphVzVuSUhkbGFXZG9kQ0IwWlc1emIzSWdabkp2YlNCYlRTd2dReTluY205MWNDd2dTMGdzSUV0WFhTQjBieUJiUzBnc0lFdFhMQ0JETDJkeWIzVndMQ0JOWFZ4dVkyOXVjM1FnZDJWcFoyaDBWSEpoYm5Od2IzTmxRWFIwY21saWRYUmxJRDBnV3pJc0lETXNJREVzSURCZE8xeHVYRzVqYjI1emRDQjJZV3hwWkdGMFpVbHVjSFYwY3lBOUlDaHBibkIxZEhNNklISmxZV1J2Ym14NUlGUmxibk52Y2xacFpYZGJYU3dnWVhSMGNtbGlkWFJsY3pvZ1EyOXVka0YwZEhKcFluVjBaWE1wT2lCMmIybGtJRDArSUh0Y2JpQWdMeThnVW1WbVpYSWdkRzhnZEdobElHSmxiRzkzSUd4cGJtc2dabTl5SUdGc2JDQnBibkIxZENCamFHVmphM05jYmlBZ0x5OGdhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMjl1Ym5ndmIyNXVlQzlpYkc5aUwyMWhjM1JsY2k5a2IyTnpMMDl3WlhKaGRHOXljeTV0WkNORGIyNTJYRzRnSUdsbUlDZ2hhVzV3ZFhSeklIeDhJQ2hwYm5CMWRITXViR1Z1WjNSb0lDRTlQU0F5SUNZbUlHbHVjSFYwY3k1c1pXNW5kR2dnSVQwOUlETXBLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZERiMjUySUhKbGNYVnBjbVZ6SURJZ2IzSWdNeUJwYm5CMWRITW5LVHRjYmlBZ2ZWeHVYRzRnSUM4dklGUlBSRThnT2lCT1pXVmtJSFJ2SUdGa1pDQnpkWEJ3YjNKMElHWnZjaUJ0ZFd4MGFTMWthVzFsYm5OcGIyNWhiQ0JqYjI1MlhHNGdJR2xtSUNocGJuQjFkSE5iTUYwdVpHbHRjeTVzWlc1bmRHZ2dJVDA5SURRZ0ppWWdhVzV3ZFhSeld6QmRMbVJwYlhNdWJHVnVaM1JvSUNFOVBTQXpLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZGpkWEp5Wlc1MGJIa2diMjVzZVNCemRYQndiM0owSUdOdmJuWWdNVVFnWVc1a0lESkVKeWs3WEc0Z0lIMWNibHh1SUNCcFppQW9hVzV3ZFhSeld6QmRMbVJwYlhNdWJHVnVaM1JvSUNFOVBTQnBibkIxZEhOYk1WMHVaR2x0Y3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMlpwYkhSbGNpQmtiMlZ6SUc1dmRDQm9ZWFpsSUhOaGJXVWdaR2x0Wlc1emFXOXVJR0Z6SUdsdWNIVjBKeWs3WEc0Z0lIMWNibHh1SUNBdkx5QkdTVXhVUlZKZlNVNWZRMGhCVGs1RlRDQnphRzkxYkdRZ1ltVWdaWEYxWVd3Z2RHOGdSRUZVUVY5RFNFRk9Ua1ZNWEc0Z0lHTnZibk4wSUdSaGRHRkRhR0Z1Ym1Wc0lEMGdhVzV3ZFhSeld6QmRMbVJwYlhOYllYUjBjbWxpZFhSbGN5NW1iM0p0WVhRZ1BUMDlJQ2RPU0ZkREp5QS9JR2x1Y0hWMGMxc3dYUzVrYVcxekxteGxibWQwYUNBdElERWdPaUF4WFR0Y2JpQWdZMjl1YzNRZ1ptbHNkR1Z5U1c1RGFHRnVibVZzSUQwZ2FXNXdkWFJ6V3pGZExtUnBiWE5iTVYwZ0tpQmhkSFJ5YVdKMWRHVnpMbWR5YjNWd08xeHVJQ0JwWmlBb1pHRjBZVU5vWVc1dVpXd2dJVDA5SUdacGJIUmxja2x1UTJoaGJtNWxiQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25Sa2xNVkVWU1gwbE9YME5JUVU1T1JVd2djMmh2ZFd4a0lHSmxJR1Z4ZFdGc0lIUnZJRVJCVkVGZlEwaEJUazVGVENjcE8xeHVJQ0I5WEc1Y2JpQWdMeThnYVdZZ1ltbGhjeUJwY3lCd2NtOTJhV1JsWkNCcGRDQnphRzkxYkdRZ1ltVWdNVVFnWVc1a0lIUm9aU0J1ZFcxaVpYSWdiMllnWld4bGJXVnVkSE1nYzJodmRXeGtJR0psSUdWeGRXRnNJSFJ2SUhSb1pTQnVkVzFpWlhJZ2IyWWdabVZoZEhWeVpTQnRZWEJ6WEc0Z0lHbG1JQ2hwYm5CMWRITXViR1Z1WjNSb0lEMDlQU0F6SUNZbUlDaHBibkIxZEhOYk1sMHVaR2x0Y3k1c1pXNW5kR2dnSVQwOUlERWdmSHdnYVc1d2RYUnpXekZkTG1ScGJYTmJNRjBnSVQwOUlHbHVjSFYwYzFzeVhTNWthVzF6V3pCZEtTa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmFXNTJZV3hwWkNCaWFXRnpKeWs3WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0J6Y0dGMGFXRnNVbUZ1YXlBOUlHbHVjSFYwYzFzd1hTNWthVzF6TG14bGJtZDBhQ0F0SURJN1hHNGdJQzh2SUhkeWIyNW5JR1JwYkdGMGFXOXVjeUJrYVcxbGJuTnBiMjVjYmlBZ2FXWWdLR0YwZEhKcFluVjBaWE11Wkdsc1lYUnBiMjV6TG14bGJtZDBhQ0FoUFQwZ2MzQmhkR2xoYkZKaGJtc3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lHUnBiR0YwYVc5dWN5QnphRzkxYkdRZ1ltVWdKSHR6Y0dGMGFXRnNVbUZ1YTMxRVlDazdYRzRnSUgxY2JseHVJQ0F2THlCWGNtOXVaeUJ6ZEhKcFpHVnpJR1JwYldWdWMybHZibHh1SUNCcFppQW9ZWFIwY21saWRYUmxjeTV6ZEhKcFpHVnpMbXhsYm1kMGFDQWhQVDBnYzNCaGRHbGhiRkpoYm1zcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUhOMGNtbGtaWE1nYzJodmRXeGtJR0psSUNSN2MzQmhkR2xoYkZKaGJtdDlSR0FwTzF4dUlDQjlYRzVjYmlBZ0x5OGdWM0p2Ym1jZ2NHRmtjeUJrYVcxbGJuTnBiMjVjYmlBZ2FXWWdLR0YwZEhKcFluVjBaWE11Y0dGa2N5NXNaVzVuZEdnZ0lUMDlJSE53WVhScFlXeFNZVzVySUNvZ01pa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ2NHRmtjeUJ6YUc5MWJHUWdZbVVnSkh0emNHRjBhV0ZzVW1GdWF5QXFJREo5UkdBcE8xeHVJQ0I5WEc1Y2JpQWdMeThnYVdZZ2EyVnlibVZzVTJoaGNHVWdhWE1nYzNCbFkybG1hV1ZrTENCcGRDZHpJR1JoZEdFZ2JHVnVaM1JvSUcxMWMzUWdZbVVnTWlCc1pYTnpJSFJvWVc0Z1pHbHRjeUJzWlc1bmRHZ2diMllnZEdobElIZGxhV2RvZEhNZ2RHVnVjMjl5WEc0Z0lDOHZJQ2gwYUdVZ1ptbHljM1FnTWlCa2FXMXpJR0Z5WlNCaVlYUmphRjl6YVhwbElHRnVaQ0JqYUdGdWJtVnNjeWxjYmlBZ2FXWWdLR0YwZEhKcFluVjBaWE11YTJWeWJtVnNVMmhoY0dVdWJHVnVaM1JvSUNFOVBTQXdJQ1ltSUdGMGRISnBZblYwWlhNdWEyVnlibVZzVTJoaGNHVXViR1Z1WjNSb0lDRTlQU0JwYm5CMWRITmJNVjB1WkdsdGN5NXNaVzVuZEdnZ0xTQXlLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHBiblpoYkdsa0lHdGxjbTVsYkNCemFHRndaU2NwTzF4dUlDQjlYRzU5TzF4dVhHNWpiMjV6ZENCblpYUkJaR3AxYzNSbFpFTnZiblpCZEhSeWFXSjFkR1Z6SUQwZ1BGUWdaWGgwWlc1a2N5QkRiMjUyUVhSMGNtbGlkWFJsY3o0b1lYUjBjbWxpZFhSbGN6b2dWQ3dnYVc1d2RYUnpPaUJ5WldGa2IyNXNlU0JVWlc1emIzSldhV1YzVzEwcE9pQlVJRDArSUh0Y2JpQWdZMjl1YzNRZ2EyVnlibVZzVTJoaGNHVWdQU0JoZEhSeWFXSjFkR1Z6TG10bGNtNWxiRk5vWVhCbExuTnNhV05sS0NrN1hHNGdJQzh2SUdsbUlHdGxjbTVsYkZOb1lYQmxJR2x6SUc1dmRDQnpjR1ZqYVdacFpXUWdhVzRnZEdobElHRjBkSEpwWW5WMFpYTWdiMllnZEdocGN5QnZjQ3dnYVc1bVpYSWdhWFFnWm5KdmJTQjBhR1VnZDJWcFoyaDBJSFJsYm5OdmNpQmthVzF6WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F5T3lCcElEd2dhVzV3ZFhSeld6RmRMbVJwYlhNdWJHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQnBaaUFvYTJWeWJtVnNVMmhoY0dWYmFTQXRJREpkSUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0JyWlhKdVpXeFRhR0Z3WlZ0cElDMGdNbDBnUFNCcGJuQjFkSE5iTVYwdVpHbHRjMXRwWFR0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnWTI5dWMzUWdjR0ZrY3lBOUlHRjBkSEpwWW5WMFpYTXVjR0ZrY3k1emJHbGpaU2dwTzF4dUlDQlFiMjlzUTI5dWRsVjBhV3d1WVdScWRYTjBVR0ZrYzBKaGMyVmtUMjVCZFhSdlVHRmtLRnh1SUNBZ0lDQWdhVzV3ZFhSeld6QmRMbVJwYlhNc0lHRjBkSEpwWW5WMFpYTXVjM1J5YVdSbGN5d2dZWFIwY21saWRYUmxjeTVrYVd4aGRHbHZibk1zSUd0bGNtNWxiRk5vWVhCbExDQndZV1J6TENCaGRIUnlhV0oxZEdWekxtWnZjbTFoZENBOVBUMGdKMDVJVjBNbkxGeHVJQ0FnSUNBZ1lYUjBjbWxpZFhSbGN5NWhkWFJ2VUdGa0tUdGNibHh1SUNBdkx5QmhiSGRoZVhNZ2NtVjBkWEp1SUdFZ2JtVjNJRzlpYW1WamRDQnpieUJrYjJWeklHNXZkQ0J0YjJScFpua2dkR2hsSUc5eWFXZHBibUZzSUdGMGRISnBZblYwWlhOY2JpQWdZMjl1YzNRZ2JtVjNRWFIwY21saWRYUmxjem9nVkNBOUlFOWlhbVZqZEM1aGMzTnBaMjRvZTMwc0lHRjBkSEpwWW5WMFpYTXBPMXh1SUNCUFltcGxZM1F1WVhOemFXZHVLRzVsZDBGMGRISnBZblYwWlhNc0lIdHJaWEp1Wld4VGFHRndaU3dnY0dGa2MzMHBPMXh1SUNCeVpYUjFjbTRnYm1WM1FYUjBjbWxpZFhSbGN6dGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J3WVhKelpVTnZiblpCZEhSeWFXSjFkR1Z6SUQwZ0tHRjBkSEpwWW5WMFpYTTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lIVnVhMjV2ZDI0K0tUb2dRMjl1ZGtGMGRISnBZblYwWlhNZ1BUNGdlMXh1SUNCamIyNXpkQ0JoWTNScGRtRjBhVzl1UVhSMGNtbGlkWFJsY3lBOUlIQmhjbk5sU1c1MFpYSnVZV3hCWTNScGRtRjBhVzl1UVhSMGNtbGlkWFJsY3loaGRIUnlhV0oxZEdWektUdGNiaUFnTHk4Z1ZFOUVUeUE2SUUxaGEyVWdkR2hwY3lCblpXNWxjbWxqSUdWdWIzVm5hQ0IwYnlCamIyMXdkWFJsSUdSbFptRjFiSFFnWVhSMGNtbGlkWFJsY3lCbWIzSWdiWFZzZEdrdFpHbHRaVzV6YVc5dVlXd2dZMjl1ZGx4dUlDQmpiMjV6ZENCbWIzSnRZWFFnUFNCaGRIUnlhV0oxZEdWekxtWnZjbTFoZENCaGN5QW5Ua2hYUXljZ2ZDQW5Ua05JVnljN1hHNGdJR052Ym5OMElHRjFkRzlRWVdRZ1BTQmJKMDVQVkZORlZDY3NJQ2RXUVV4SlJDY3NJQ2RUUVUxRlgxVlFVRVZTSnl3Z0oxTkJUVVZmVEU5WFJWSW5YVnRoZEhSeWFXSjFkR1Z6TG1GMWRHOWZjR0ZrSUdGeklHNTFiV0psY2wwN1hHNGdJR052Ym5OMElHUnBiR0YwYVc5dWN5QTlJR0YwZEhKcFluVjBaWE11Wkdsc1lYUnBiMjV6SUdGeklGdHVkVzFpWlhJc0lHNTFiV0psY2wwN1hHNGdJR052Ym5OMElHZHliM1Z3SUQwZ1lYUjBjbWxpZFhSbGN5NW5jbTkxY0NCaGN5QnVkVzFpWlhJN1hHNGdJR052Ym5OMElHdGxjbTVsYkZOb1lYQmxJRDBnWVhSMGNtbGlkWFJsY3k1clpYSnVaV3hmYzJoaGNHVWdZWE1nVzI1MWJXSmxjaXdnYm5WdFltVnlYVHRjYmlBZ1kyOXVjM1FnY0dGa2N5QTlJR0YwZEhKcFluVjBaWE11Y0dGa2N5QmhjeUJiYm5WdFltVnlMQ0J1ZFcxaVpYSXNJRzUxYldKbGNpd2diblZ0WW1WeVhUdGNiaUFnWTI5dWMzUWdjM1J5YVdSbGN5QTlJR0YwZEhKcFluVjBaWE11YzNSeWFXUmxjeUJoY3lCYmJuVnRZbVZ5TENCdWRXMWlaWEpkTzF4dUlDQmpiMjV6ZENCM1NYTkRiMjV6ZENBOUlDaGhkSFJ5YVdKMWRHVnpMbmRmYVhOZlkyOXVjM1FnWVhNZ0tDa2dQVDRnWW05dmJHVmhiaWtvS1R0Y2JseHVJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lHRjFkRzlRWVdRc1hHNGdJQ0FnWm05eWJXRjBMRnh1SUNBZ0lHUnBiR0YwYVc5dWN5eGNiaUFnSUNCbmNtOTFjQ3hjYmlBZ0lDQnJaWEp1Wld4VGFHRndaU3hjYmlBZ0lDQndZV1J6TEZ4dUlDQWdJSE4wY21sa1pYTXNYRzRnSUNBZ2QwbHpRMjl1YzNRc1hHNGdJQ0FnTGk0dVlXTjBhWFpoZEdsdmJrRjBkSEpwWW5WMFpYTXNYRzRnSUNBZ1kyRmphR1ZMWlhrNklHQWtlMkYwZEhKcFluVjBaWE11Wm05eWJXRjBmVHNrZTJGamRHbDJZWFJwYjI1QmRIUnlhV0oxZEdWekxtRmpkR2wyWVhScGIyNTlPMkJjYmlBZ2ZUdGNibjA3WEc1Y2JtTnZibk4wSUdOdmJuWXlaQ0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ3dnYVc1d2RYUnpPaUJ5WldGa2IyNXNlU0JVWlc1emIzSldhV1YzVzEwc0lHRjBkSEpwWW5WMFpYTTZJRU52Ym5aQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUdOdmJuTjBJR0ZrYW5WemRHVmtRWFIwY21saWRYUmxjeUE5SUdkbGRFRmthblZ6ZEdWa1EyOXVka0YwZEhKcFluVjBaWE1vWVhSMGNtbGlkWFJsY3l3Z2FXNXdkWFJ6S1R0Y2JseHVJQ0F2THlCamFHVmpheUJoZEhSeWFXSjFkR1Z6WEc1Y2JpQWdMeThnWTI5dWMzUWdhR0Z6VUhKbGJIVkJZM1JwZG1GMGFXOXVWMlZwWjJoMGN5QTlJR1poYkhObE95QXZLaUJVVDBSUE9pQmhaR1FnYzNWd2NHOXlkQ0JtYjNJZ2NISmxiSFVnWVdOMGFYWmhkR2x2YmlCM1pXbG5hSFJ6SUNvdlhHNGdJR052Ym5OMElHbHpRMmhoYm01bGJITk1ZWE4wSUQwZ1lYUjBjbWxpZFhSbGN5NW1iM0p0WVhRZ1BUMDlJQ2RPU0ZkREp6dGNiaUFnYVdZZ0tHRjBkSEpwWW5WMFpYTXVaM0p2ZFhBZ0lUMDlJREVwSUh0Y2JpQWdJQ0F2THlCT1ZrbEVTVUVnUjFCVklIZHBkR2dnWVcxd1pYSmxJR0Z5WTJocGRHVmpkSFZ5WlNCbVlXbHNjeUIzYVhSb0lHSmxiRzkzSURJZ1kyRnpaWE1zSUdKMWRDQjNaU0JqYjNWc1pHNG5kQ0J5WlhCeWJ5QjBhR1Z0SUhkcGRHZ2dZVzU1SUc5MGFHVnlYRzRnSUNBZ0x5OGdSMUJWY3k0Z1UyOGdhblZ6ZENCa2FYTmhZbXhsSUhabFkzUnZjbWw2WlNCdmJpQk9Wa2xFU1VFZ1lXMXdaWEpsSUhSdklHVnVjM1Z5WlNCaGJIZGhlWE1nWTI5eWNtVmpkQ0J2ZFhSd2RYUnpMbHh1SUNBZ0lDOHZJRnQzWldKbmNIVmRRMjl1ZGlBdElHTnZibllnTFNCMlpXTjBiM0pwZW1VZ1ozSnZkWEFnTFNCQ1hHNGdJQ0FnTHk4Z1czZGxZbWR3ZFYxRGIyNTJJQzBnWTI5dWRpQXRJSFpsWTNSdmNtbDZaU0JuY205MWNDQXRJRVJjYmlBZ0lDQmpiMjV6ZENCbGJtRmliR1ZIY205MWNHVmtRMjl1ZGxabFkzUnZjbWw2WlNBOUlDRmpiMjUwWlhoMExtRmtZWEIwWlhKSmJtWnZMbWx6UVhKamFHbDBaV04wZFhKbEtDZGhiWEJsY21VbktUdGNiaUFnSUNCcFppQW9aVzVoWW14bFIzSnZkWEJsWkVOdmJuWldaV04wYjNKcGVtVWdKaVlnYVhORGFHRnVibVZzYzB4aGMzUWdKaVlnYVc1d2RYUnpXekZkTG1ScGJYTmJNRjBnUFQwOUlHRjBkSEpwWW5WMFpYTXVaM0p2ZFhBZ0ppWmNiaUFnSUNBZ0lDQWdhVzV3ZFhSeld6RmRMbVJwYlhOYk1WMGdQVDA5SURFZ0ppWWdZWFIwY21saWRYUmxjeTVrYVd4aGRHbHZibk5iTUYwZ1BUMDlJREVnSmlZZ1lYUjBjbWxpZFhSbGN5NWthV3hoZEdsdmJuTmJNVjBnUFQwOUlERXBJSHRjYmlBZ0lDQWdJR052Ym5OMElHOTFkSEIxZEZOb1lYQmxJRDBnWTJGc1kzVnNZWFJsVDNWMGNIVjBVMmhoY0dVb1hHNGdJQ0FnSUNBZ0lDQWdhVzV3ZFhSeld6QmRMbVJwYlhNc0lHbHVjSFYwYzFzeFhTNWthVzF6TENCaGRIUnlhV0oxZEdWekxtUnBiR0YwYVc5dWN5d2dZV1JxZFhOMFpXUkJkSFJ5YVdKMWRHVnpMbkJoWkhNc0lHRjBkSEpwWW5WMFpYTXVjM1J5YVdSbGN5eGNiaUFnSUNBZ0lDQWdJQ0JwYzBOb1lXNXVaV3h6VEdGemRDazdYRzRnSUNBZ0lDQmpiMjV6ZENCMGNtRnVjM0J2YzJWa1YyVnBaMmgwSUQwZ0tHTnZiblJsZUhRdWEyVnlibVZzUTNWemRHOXRSR0YwWVM1M1ZDQmhjeUJVWlc1emIzSldhV1YzSUh3Z2RXNWtaV1pwYm1Wa0tTQS9QMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZM0psWVhSbFZISmhibk53YjNObFVISnZaM0poYlVsdVptOG9hVzV3ZFhSeld6RmRMQ0IzWldsbmFIUlVjbUZ1YzNCdmMyVkJkSFJ5YVdKMWRHVXBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjdhVzV3ZFhSek9pQmJNVjBzSUc5MWRIQjFkSE02SUZ0aGRIUnlhV0oxZEdWekxuZEpjME52Ym5OMElEOGdMVElnT2lBdE1WMTlLVnN3WFR0Y2JpQWdJQ0FnSUdsbUlDaGhkSFJ5YVdKMWRHVnpMbmRKYzBOdmJuTjBJQ1ltSUNGamIyNTBaWGgwTG10bGNtNWxiRU4xYzNSdmJVUmhkR0V1ZDFRcElIdGNiaUFnSUNBZ0lDQWdZMjl1ZEdWNGRDNXJaWEp1Wld4RGRYTjBiMjFFWVhSaExuZFVJRDBnZEhKaGJuTndiM05sWkZkbGFXZG9kRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR052Ym5OMElHTnZiblpKYm5CMWRITWdQU0JiYVc1d2RYUnpXekJkTENCMGNtRnVjM0J2YzJWa1YyVnBaMmgwWFR0Y2JpQWdJQ0FnSUdsbUlDaHBibkIxZEhNdWJHVnVaM1JvSUQwOVBTQXpLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuWkpibkIxZEhNdWNIVnphQ2hwYm5CMWRITmJNbDBwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWTI5dWRHVjRkQzVqYjIxd2RYUmxLRnh1SUNBZ0lDQWdJQ0FnSUdOeVpXRjBaVWR5YjNWd1pXUkRiMjUyVm1WamRHOXlhWHBsVUhKdlozSmhiVWx1Wm04b1kyOXVka2x1Y0hWMGN5d2dZV1JxZFhOMFpXUkJkSFJ5YVdKMWRHVnpMQ0J2ZFhSd2RYUlRhR0Z3WlNrc0lIdHBibkIxZEhNNklHTnZiblpKYm5CMWRITjlLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ1kyOXVkR1Y0ZEM1amIyMXdkWFJsS0dOeVpXRjBaVWR5YjNWd1pXUkRiMjUyVUhKdlozSmhiVWx1Wm04b2FXNXdkWFJ6TENCaFpHcDFjM1JsWkVGMGRISnBZblYwWlhNcEtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNWNiaUFnWTI5dWMzUWdhR0Z6UW1saGN5QTlJR2x1Y0hWMGN5NXNaVzVuZEdnZ1BUMDlJRE03WEc0Z0lHTnZibk4wSUdsdWNIVjBTR1ZwWjJoMElEMGdhVzV3ZFhSeld6QmRMbVJwYlhOYmFYTkRhR0Z1Ym1Wc2MweGhjM1FnUHlBeElEb2dNbDA3WEc0Z0lHTnZibk4wSUdsdWNIVjBWMmxrZEdnZ1BTQnBibkIxZEhOYk1GMHVaR2x0YzF0cGMwTm9ZVzV1Wld4elRHRnpkQ0EvSURJZ09pQXpYVHRjYmlBZ1kyOXVjM1FnYVc1d2RYUkRhR0Z1Ym1Wc2N5QTlJR2x1Y0hWMGMxc3dYUzVrYVcxelcybHpRMmhoYm01bGJITk1ZWE4wSUQ4Z015QTZJREZkTzF4dUlDQmpiMjV6ZENCM1pXbG5hSFJJWldsbmFIUWdQU0JwYm5CMWRITmJNVjB1WkdsdGMxc3lYVHRjYmlBZ1kyOXVjM1FnZDJWcFoyaDBWMmxrZEdnZ1BTQnBibkIxZEhOYk1WMHVaR2x0YzFzelhUdGNibHh1SUNCamIyNXpkQ0J2ZFhSd2RYUlRhR0Z3WlNBOUlHTmhiR04xYkdGMFpVOTFkSEIxZEZOb1lYQmxLRnh1SUNBZ0lDQWdhVzV3ZFhSeld6QmRMbVJwYlhNc0lHbHVjSFYwYzFzeFhTNWthVzF6TENCaGRIUnlhV0oxZEdWekxtUnBiR0YwYVc5dWN5d2dZV1JxZFhOMFpXUkJkSFJ5YVdKMWRHVnpMbkJoWkhNc0lHRjBkSEpwWW5WMFpYTXVjM1J5YVdSbGN5eGNiaUFnSUNBZ0lHbHpRMmhoYm01bGJITk1ZWE4wS1R0Y2JpQWdZMjl1YzNRZ2IzVjBTR1ZwWjJoMElEMGdiM1YwY0hWMFUyaGhjR1ZiYVhORGFHRnVibVZzYzB4aGMzUWdQeUF4SURvZ01sMDdYRzRnSUdOdmJuTjBJRzkxZEZkcFpIUm9JRDBnYjNWMGNIVjBVMmhoY0dWYmFYTkRhR0Z1Ym1Wc2MweGhjM1FnUHlBeUlEb2dNMTA3WEc0Z0lHTnZibk4wSUc5MWRFTm9ZVzV1Wld4eklEMGdiM1YwY0hWMFUyaGhjR1ZiYVhORGFHRnVibVZzYzB4aGMzUWdQeUF6SURvZ01WMDdYRzVjYmlBZ1kyOXVjM1FnYzJGdFpWTnBlbVVnUFNCcGMwTm9ZVzV1Wld4elRHRnpkQ0FtSmlCM1pXbG5hSFJJWldsbmFIUWdQVDA5SUdsdWNIVjBTR1ZwWjJoMElDWW1JSGRsYVdkb2RGZHBaSFJvSUQwOVBTQnBibkIxZEZkcFpIUm9JQ1ltWEc0Z0lDQWdJQ0JoZEhSeWFXSjFkR1Z6TG5CaFpITmJNRjBnUFQwOUlEQWdKaVlnWVhSMGNtbGlkWFJsY3k1d1lXUnpXekZkSUQwOVBTQXdPMXh1SUNCcFppQW9jMkZ0WlZOcGVtVWdmSHhjYmlBZ0lDQWdJQ2gzWldsbmFIUklaV2xuYUhRZ1BUMDlJREVnSmlZZ2QyVnBaMmgwVjJsa2RHZ2dQVDA5SURFZ0ppWWdZWFIwY21saWRYUmxjeTVrYVd4aGRHbHZibk5iTUYwZ1BUMDlJREVnSmlZZ1lYUjBjbWxpZFhSbGN5NWthV3hoZEdsdmJuTmJNVjBnUFQwOUlERWdKaVpjYmlBZ0lDQWdJQ0JoZEhSeWFXSjFkR1Z6TG5OMGNtbGtaWE5iTUYwZ1BUMDlJREVnSmlZZ1lYUjBjbWxpZFhSbGN5NXpkSEpwWkdWeld6RmRJRDA5UFNBeElDWW1JR0YwZEhKcFluVjBaWE11Y0dGa2Mxc3dYU0E5UFQwZ01DQW1KbHh1SUNBZ0lDQWdJR0YwZEhKcFluVjBaWE11Y0dGa2Mxc3hYU0E5UFQwZ01Da3BJSHRjYmlBZ0lDQXZMeUJqYjI1Mk1tUkNlVTFoZEUxMWJGeHVJQ0FnSUdOdmJuTjBJR0poZEdOb0lEMGdiM1YwY0hWMFUyaGhjR1ZiTUYwN1hHNGdJQ0FnYkdWMElIaFNaWE5vWVhCbFpDd2dkMUpsYzJoaGNHVmtMQ0J0WVhSdGRXeFBkWFJ3ZFhSVGFHRndaVHRjYmlBZ0lDQmpiMjV6ZENCdFlYUnRkV3hKYm5CMWRITWdQU0JiWFR0Y2JpQWdJQ0JwWmlBb2FYTkRhR0Z1Ym1Wc2MweGhjM1FwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSFJ5WVc1emNHOXpaV1JYWldsbmFIUWdQU0FvWTI5dWRHVjRkQzVyWlhKdVpXeERkWE4wYjIxRVlYUmhMbmRVSUdGeklGUmxibk52Y2xacFpYY2dmQ0IxYm1SbFptbHVaV1FwSUQ4L1hHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRDNWpiMjF3ZFhSbEtGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCamNtVmhkR1ZVY21GdWMzQnZjMlZRY205bmNtRnRTVzVtYnlocGJuQjFkSE5iTVYwc0lIZGxhV2RvZEZSeVlXNXpjRzl6WlVGMGRISnBZblYwWlNrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUh0cGJuQjFkSE02SUZzeFhTd2diM1YwY0hWMGN6b2dXMkYwZEhKcFluVjBaWE11ZDBselEyOXVjM1FnUHlBdE1pQTZJQzB4WFgwcFd6QmRPMXh1SUNBZ0lDQWdhV1lnS0dGMGRISnBZblYwWlhNdWQwbHpRMjl1YzNRZ0ppWWdJV052Ym5SbGVIUXVhMlZ5Ym1Wc1EzVnpkRzl0UkdGMFlTNTNWQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNTBaWGgwTG10bGNtNWxiRU4xYzNSdmJVUmhkR0V1ZDFRZ1BTQjBjbUZ1YzNCdmMyVmtWMlZwWjJoME8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSE5oYldWVGFYcGxLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSE5vWVhKbFpFUnBiU0E5SUdsdWNIVjBTR1ZwWjJoMElDb2dhVzV3ZFhSWGFXUjBhQ0FxSUdsdWNIVjBRMmhoYm01bGJITTdYRzRnSUNBZ0lDQWdJSGhTWlhOb1lYQmxaQ0E5SUdsdWNIVjBjMXN3WFM1eVpYTm9ZWEJsS0ZzeExDQmlZWFJqYUN3Z2MyaGhjbVZrUkdsdFhTazdYRzRnSUNBZ0lDQWdJSGRTWlhOb1lYQmxaQ0E5SUhSeVlXNXpjRzl6WldSWFpXbG5hSFF1Y21WemFHRndaU2hiTVN3Z2MyaGhjbVZrUkdsdExDQnZkWFJEYUdGdWJtVnNjMTBwTzF4dUlDQWdJQ0FnSUNCdFlYUnRkV3hQZFhSd2RYUlRhR0Z3WlNBOUlGc3hMQ0JpWVhSamFDd2diM1YwUTJoaGJtNWxiSE5kTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnZUZKbGMyaGhjR1ZrSUQwZ2FXNXdkWFJ6V3pCZExuSmxjMmhoY0dVb1cySmhkR05vTENCcGJuQjFkRWhsYVdkb2RDQXFJR2x1Y0hWMFYybGtkR2dzSUdsdWNIVjBRMmhoYm01bGJITmRLVHRjYmlBZ0lDQWdJQ0FnZDFKbGMyaGhjR1ZrSUQwZ2RISmhibk53YjNObFpGZGxhV2RvZEM1eVpYTm9ZWEJsS0ZzeExDQnBibkIxZEVOb1lXNXVaV3h6TENCdmRYUkRhR0Z1Ym1Wc2MxMHBPMXh1SUNBZ0lDQWdJQ0J0WVhSdGRXeFBkWFJ3ZFhSVGFHRndaU0E5SUZ0aVlYUmphQ3dnYjNWMFNHVnBaMmgwSUNvZ2IzVjBWMmxrZEdnc0lHOTFkRU5vWVc1dVpXeHpYVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJRzFoZEcxMWJFbHVjSFYwY3k1d2RYTm9LSGhTWlhOb1lYQmxaQ2s3WEc0Z0lDQWdJQ0J0WVhSdGRXeEpibkIxZEhNdWNIVnphQ2gzVW1WemFHRndaV1FwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjRVbVZ6YUdGd1pXUWdQU0JwYm5CMWRITmJNRjB1Y21WemFHRndaU2hiWW1GMFkyZ3NJR2x1Y0hWMFEyaGhibTVsYkhNc0lHbHVjSFYwU0dWcFoyaDBJQ29nYVc1d2RYUlhhV1IwYUYwcE8xeHVJQ0FnSUNBZ2QxSmxjMmhoY0dWa0lEMGdhVzV3ZFhSeld6RmRMbkpsYzJoaGNHVW9XekVzSUc5MWRFTm9ZVzV1Wld4ekxDQnBibkIxZEVOb1lXNXVaV3h6WFNrN1hHNGdJQ0FnSUNCdFlYUnRkV3hQZFhSd2RYUlRhR0Z3WlNBOUlGdGlZWFJqYUN3Z2IzVjBRMmhoYm01bGJITXNJRzkxZEVobGFXZG9kQ0FxSUc5MWRGZHBaSFJvWFR0Y2JpQWdJQ0FnSUcxaGRHMTFiRWx1Y0hWMGN5NXdkWE5vS0hkU1pYTm9ZWEJsWkNrN1hHNGdJQ0FnSUNCdFlYUnRkV3hKYm5CMWRITXVjSFZ6YUNoNFVtVnphR0Z3WldRcE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2FHRnpRbWxoY3lrZ2UxeHVJQ0FnSUNBZ2JXRjBiWFZzU1c1d2RYUnpMbkIxYzJnb2FXNXdkWFJ6V3pKZEtUdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdUaUE5SUcxaGRHMTFiRTkxZEhCMWRGTm9ZWEJsV3pKZE8xeHVJQ0FnSUdOdmJuTjBJRXNnUFNCdFlYUnRkV3hKYm5CMWRITmJNRjB1WkdsdGMxdHRZWFJ0ZFd4SmJuQjFkSE5iTUYwdVpHbHRjeTVzWlc1bmRHZ2dMU0F4WFR0Y2JpQWdJQ0F2THlCVWRXNWxJSFJvWlNCMGFISmxjMmh2YkdRdVhHNGdJQ0FnYVdZZ0tFNGdQQ0E0SUNZbUlFc2dQQ0E0S1NCN1hHNGdJQ0FnSUNCamIyNTBaWGgwTG1OdmJYQjFkR1VvWEc0Z0lDQWdJQ0FnSUNBZ1kzSmxZWFJsVG1GcGRtVk5ZWFJ0ZFd4UWNtOW5jbUZ0U1c1bWJ5aGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JXRjBiWFZzU1c1d2RYUnpMQ0JoWkdwMWMzUmxaRUYwZEhKcFluVjBaWE1zSUc5MWRIQjFkRk5vWVhCbExDQnRZWFJ0ZFd4UGRYUndkWFJUYUdGd1pTd2dhWE5EYUdGdWJtVnNjMHhoYzNRcExGeHVJQ0FnSUNBZ0lDQWdJSHRwYm5CMWRITTZJRzFoZEcxMWJFbHVjSFYwYzMwcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9YRzRnSUNBZ0lDQWdJQ0FnWTNKbFlYUmxUV0YwYlhWc1VISnZaM0poYlVsdVptOG9iV0YwYlhWc1NXNXdkWFJ6TENCaFpHcDFjM1JsWkVGMGRISnBZblYwWlhNc0lHOTFkSEIxZEZOb1lYQmxMQ0J0WVhSdGRXeFBkWFJ3ZFhSVGFHRndaU3dnYVhORGFHRnVibVZzYzB4aGMzUXBMRnh1SUNBZ0lDQWdJQ0FnSUh0cGJuQjFkSE02SUcxaGRHMTFiRWx1Y0hWMGMzMHBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTQ3WEc0Z0lIMWNibHh1SUNBdkx5QlVUMFJQT2lCcGJYQnNaVzFsYm5RZ1kyOXVkakprVjJsMGFFbHRNa052YkNncFhHNWNiaUFnWTI5dWMzUWdjMlZ4ZFdWdWRHbGhiRUZqWTJWemMwSjVWR2h5WldGa2N5QTlJQzhxSUdKaFkydGxibVF1WVdSaGNIUmxja2x1Wm04dWFYTkpiblJsYkNncElDb3ZJSFJ5ZFdVN1hHNWNiaUFnTHk4Z1UxUkZVQzR4T2lCMGNtRnVjM0J2YzJVZ2QyVnBaMmgwWEc0Z0lHTnZibk4wSUhSeVlXNXpjRzl6WldSWFpXbG5hSFFnUFNBb1kyOXVkR1Y0ZEM1clpYSnVaV3hEZFhOMGIyMUVZWFJoTG5kVUlHRnpJRlJsYm5OdmNsWnBaWGNnZkNCMWJtUmxabWx1WldRcElEOC9YRzRnSUNBZ0lDQmpiMjUwWlhoMExtTnZiWEIxZEdVb1hHNGdJQ0FnSUNBZ0lDQWdZM0psWVhSbFZISmhibk53YjNObFVISnZaM0poYlVsdVptOG9hVzV3ZFhSeld6RmRMQ0IzWldsbmFIUlVjbUZ1YzNCdmMyVkJkSFJ5YVdKMWRHVXBMRnh1SUNBZ0lDQWdJQ0FnSUh0cGJuQjFkSE02SUZzeFhTd2diM1YwY0hWMGN6b2dXMkYwZEhKcFluVjBaWE11ZDBselEyOXVjM1FnUHlBdE1pQTZJQzB4WFgwcFd6QmRPMXh1SUNCcFppQW9ZWFIwY21saWRYUmxjeTUzU1hORGIyNXpkQ0FtSmlBaFkyOXVkR1Y0ZEM1clpYSnVaV3hEZFhOMGIyMUVZWFJoTG5kVUtTQjdYRzRnSUNBZ1kyOXVkR1Y0ZEM1clpYSnVaV3hEZFhOMGIyMUVZWFJoTG5kVUlEMGdkSEpoYm5Od2IzTmxaRmRsYVdkb2REdGNiaUFnZlZ4dVhHNGdJQzh2SUZOVVJWQXVNam9nY0hKbGNHRnlaU0J5WlhOb1lYQmxaQ0JwYm5CMWRITmNiaUFnWTI5dWMzUWdZMjl1ZGtsdWNIVjBjeUE5SUZ0cGJuQjFkSE5iTUYwc0lIUnlZVzV6Y0c5elpXUlhaV2xuYUhSZE8xeHVJQ0JwWmlBb2FHRnpRbWxoY3lrZ2UxeHVJQ0FnSUdOdmJuWkpibkIxZEhNdWNIVnphQ2hwYm5CMWRITmJNbDBwTzF4dUlDQjlYRzVjYmlBZ0x5OGdVMVJGVUM0ek9pQmpiMjF3ZFhSbElHMWhkRzExYkZ4dUlDQmpiMjV6ZENCa2FXMUJUM1YwWlhJZ1BTQnBjME5vWVc1dVpXeHpUR0Z6ZENBL0lHOTFkRWhsYVdkb2RDQXFJRzkxZEZkcFpIUm9JRG9nYjNWMFEyaGhibTVsYkhNN1hHNGdJR052Ym5OMElHUnBiVUpQZFhSbGNpQTlJR2x6UTJoaGJtNWxiSE5NWVhOMElEOGdiM1YwUTJoaGJtNWxiSE1nT2lCdmRYUklaV2xuYUhRZ0tpQnZkWFJYYVdSMGFEdGNiaUFnWTI5dWMzUWdaR2x0U1c1dVpYSWdQU0IzWldsbmFIUklaV2xuYUhRZ0tpQjNaV2xuYUhSWGFXUjBhQ0FxSUdsdWNIVjBRMmhoYm01bGJITTdYRzRnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hjYmlBZ0lDQWdJR055WldGMFpVTnZibll5UkUxaGRFMTFiRkJ5YjJkeVlXMUpibVp2S0Z4dUlDQWdJQ0FnSUNBZ0lHTnZiblpKYm5CMWRITXNJR0ZrYW5WemRHVmtRWFIwY21saWRYUmxjeXdnYjNWMGNIVjBVMmhoY0dVc0lHUnBiVUZQZFhSbGNpd2daR2x0UWs5MWRHVnlMQ0JrYVcxSmJtNWxjaXdnYUdGelFtbGhjeXhjYmlBZ0lDQWdJQ0FnSUNCelpYRjFaVzUwYVdGc1FXTmpaWE56UW5sVWFISmxZV1J6S1N4Y2JpQWdJQ0FnSUh0cGJuQjFkSE02SUdOdmJuWkpibkIxZEhOOUtUdGNibjA3WEc1Y2JtTnZibk4wSUdOdmJuWXhaQ0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3pvZ1EyOXVka0YwZEhKcFluVjBaWE1wT2lCMmIybGtJRDArSUh0Y2JpQWdMeThnWlhoMFpXNWtJSFJvWlNCcGJuQjFkQ0IwYnlBeVJDQmllU0JoWkdScGJtY2dTQ0JrYVcxbGJuTnBiMjVjYmlBZ1kyOXVjM1FnYVhORGFHRnVibVZzVEdGemRDQTlJR0YwZEhKcFluVjBaWE11Wm05eWJXRjBJRDA5UFNBblRraFhReWM3WEc0Z0lHTnZibk4wSUdsdWNIVjBjeUE5SUZ0Y2JpQWdJQ0JqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYUzV5WlhOb1lYQmxLRnh1SUNBZ0lDQWdJQ0JwYzBOb1lXNXVaV3hNWVhOMElEOWNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklGdE9MQ0JYTENCRFhTQXRQaUJiVGl3Z1NEMHhMQ0JYTENCRFhWeHVJQ0FnSUNBZ0lDQWdJQ0FnVzJOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1ScGJYTmJNRjBzSURFc0lHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExtUnBiWE5iTVYwc0lHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExtUnBiWE5iTWwxZElEcGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklGdE9MQ0JETENCWFhTQXRQaUJiVGl3Z1F5d2dTRDB4TENCWFhWeHVJQ0FnSUNBZ0lDQWdJQ0FnVzJOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1ScGJYTmJNRjBzSUdOdmJuUmxlSFF1YVc1d2RYUnpXekJkTG1ScGJYTmJNVjBzSURFc0lHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExtUnBiWE5iTWwxZEtTeGNiaUFnSUNBdkwxdEdTVXhVUlZKZlQxVlVYME5JUVU1T1JVd3NJRVpKVEZSRlVsOUpUbDlEU0VGT1RrVk1MQ0JyVjEwZ0xUNGdXMFpKVEZSRlVsOVBWVlJmUTBoQlRrNUZUQ3dnUmtsTVZFVlNYMGxPWDBOSVFVNU9SVXdzSUd0SVBURXNJR3RYWFZ4dUlDQWdJR052Ym5SbGVIUXVhVzV3ZFhSeld6RmRMbkpsYzJoaGNHVW9XMk52Ym5SbGVIUXVhVzV3ZFhSeld6RmRMbVJwYlhOYk1GMHNJR052Ym5SbGVIUXVhVzV3ZFhSeld6RmRMbVJwYlhOYk1WMHNJREVzSUdOdmJuUmxlSFF1YVc1d2RYUnpXekZkTG1ScGJYTmJNbDFkS1Z4dUlDQmRPMXh1SUNCcFppQW9ZMjl1ZEdWNGRDNXBibkIxZEhNdWJHVnVaM1JvSUQwOVBTQXpLU0I3WEc0Z0lDQWdhVzV3ZFhSekxuQjFjMmdvWTI5dWRHVjRkQzVwYm5CMWRITmJNbDBwTzF4dUlDQjlYRzRnSUdOdmJuTjBJSEJoWkhNZ1BTQmJNQ3dnWVhSMGNtbGlkWFJsY3k1d1lXUnpXekJkTENBd0xDQmhkSFJ5YVdKMWRHVnpMbkJoWkhOYk1WMWRPMXh1SUNCamIyNXpkQ0J6ZEhKcFpHVnpJRDBnV3pGZExtTnZibU5oZENoaGRIUnlhV0oxZEdWekxuTjBjbWxrWlhNcE8xeHVJQ0JqYjI1emRDQmthV3hoZEdsdmJuTWdQU0JiTVYwdVkyOXVZMkYwS0dGMGRISnBZblYwWlhNdVpHbHNZWFJwYjI1ektUdGNiaUFnWTI5dWMzUWdhMlZ5Ym1Wc1UyaGhjR1VnUFNCYk1WMHVZMjl1WTJGMEtHRjBkSEpwWW5WMFpYTXVhMlZ5Ym1Wc1UyaGhjR1VwTzF4dUlDQmpiMjV6ZENCaFpHcDFjM1JsWkVGMGRISnBZblYwWlhNZ1BTQm5aWFJCWkdwMWMzUmxaRU52Ym5aQmRIUnlhV0oxZEdWektIc3VMaTVoZEhSeWFXSjFkR1Z6TENCd1lXUnpMQ0J6ZEhKcFpHVnpMQ0JrYVd4aGRHbHZibk1zSUd0bGNtNWxiRk5vWVhCbGZTd2dhVzV3ZFhSektUdGNiaUFnWTI5dWRHVjRkQzVqYjIxd2RYUmxLR055WldGMFpVZHliM1Z3WldSRGIyNTJVSEp2WjNKaGJVbHVabThvWEc0Z0lDQWdJQ0JwYm5CMWRITXNJR0ZrYW5WemRHVmtRWFIwY21saWRYUmxjeXhjYmlBZ0lDQWdJRzkxZEhCMWRGTm9ZWEJsSUQwK0lHbHpRMmhoYm01bGJFeGhjM1FnUHlCYmIzVjBjSFYwVTJoaGNHVmJNRjBzSUc5MWRIQjFkRk5vWVhCbFd6SmRMQ0J2ZFhSd2RYUlRhR0Z3WlZzelhWMGdPaUJiWFNrcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR052Ym5ZZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRU52Ym5aQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUhaaGJHbGtZWFJsU1c1d2RYUnpLR052Ym5SbGVIUXVhVzV3ZFhSekxDQmhkSFJ5YVdKMWRHVnpLVHNnSUM4dklHTjFjbkpsYm5Sc2VTQjNhV3hzSUdaaGFXd2dhV1lnYm05MElHTnZibll4UkM4eVJGeHVJQ0JwWmlBb1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwdVpHbHRjeTVzWlc1bmRHZ2dQVDA5SURNcElIdGNiaUFnSUNCamIyNTJNV1FvWTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3lrN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ1kyOXVkakprS0dOdmJuUmxlSFFzSUdOdmJuUmxlSFF1YVc1d2RYUnpMQ0JoZEhSeWFXSjFkR1Z6S1R0Y2JpQWdmVnh1ZlR0Y2JpSXNJQ0l2S2lwY2JpQXFJRUJzYVdObGJuTmxYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXlNU0JIYjI5bmJHVWdURXhETGlCQmJHd2dVbWxuYUhSeklGSmxjMlZ5ZG1Wa0xseHVJQ29nVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVGd1lXTm9aU0JNYVdObGJuTmxMQ0JXWlhKemFXOXVJREl1TUNBb2RHaGxJRndpVEdsalpXNXpaVndpS1R0Y2JpQXFJSGx2ZFNCdFlYa2dibTkwSUhWelpTQjBhR2x6SUdacGJHVWdaWGhqWlhCMElHbHVJR052YlhCc2FXRnVZMlVnZDJsMGFDQjBhR1VnVEdsalpXNXpaUzVjYmlBcUlGbHZkU0J0WVhrZ2IySjBZV2x1SUdFZ1kyOXdlU0J2WmlCMGFHVWdUR2xqWlc1elpTQmhkRnh1SUNwY2JpQXFJR2gwZEhBNkx5OTNkM2N1WVhCaFkyaGxMbTl5Wnk5c2FXTmxibk5sY3k5TVNVTkZUbE5GTFRJdU1GeHVJQ3BjYmlBcUlGVnViR1Z6Y3lCeVpYRjFhWEpsWkNCaWVTQmhjSEJzYVdOaFlteGxJR3hoZHlCdmNpQmhaM0psWldRZ2RHOGdhVzRnZDNKcGRHbHVaeXdnYzI5bWRIZGhjbVZjYmlBcUlHUnBjM1J5YVdKMWRHVmtJSFZ1WkdWeUlIUm9aU0JNYVdObGJuTmxJR2x6SUdScGMzUnlhV0oxZEdWa0lHOXVJR0Z1SUZ3aVFWTWdTVk5jSWlCQ1FWTkpVeXhjYmlBcUlGZEpWRWhQVlZRZ1YwRlNVa0ZPVkVsRlV5QlBVaUJEVDA1RVNWUkpUMDVUSUU5R0lFRk9XU0JMU1U1RUxDQmxhWFJvWlhJZ1pYaHdjbVZ6Y3lCdmNpQnBiWEJzYVdWa0xseHVJQ29nVTJWbElIUm9aU0JNYVdObGJuTmxJR1p2Y2lCMGFHVWdjM0JsWTJsbWFXTWdiR0Z1WjNWaFoyVWdaMjkyWlhKdWFXNW5JSEJsY20xcGMzTnBiMjV6SUdGdVpGeHVJQ29nYkdsdGFYUmhkR2x2Ym5NZ2RXNWtaWElnZEdobElFeHBZMlZ1YzJVdVhHNGdLaUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVJQ292WEc1Y2JpOHZJSE5oYlhCc1pXUWdabkp2YlNCYlFIUmxibk52Y21ac2IzY3ZkR1pxYzEwZ2RHWnFjeTFpWVdOclpXNWtMWGRsWW1kd2RTOXpjbU12WTI5dWRsOWlZV05yY0hKdmNGOXRiVjkzWldKbmNIVXVkSE5jYmk4dlhHNHZMeUJ0YjJScFptbGxaQ0IwYnlCbWFYUWdkR2hsSUc1bFpXUnpJRzltSUhSb1pTQndjbTlxWldOMFhHNWNibWx0Y0c5eWRDQjdSR0YwWVZSNWNHVjlJR1p5YjIwZ0p5NHVMeTR1THk0dUx5NHVMM2RoYzIwdFkyOXRiVzl1Snp0Y2JtbHRjRzl5ZENCN1RFOUhYMFJGUWxWSGZTQm1jbTl0SUNjdUxpOHVMaTh1TGk5c2IyY25PMXh1YVcxd2IzSjBJSHRVWlc1emIzSldhV1YzZlNCbWNtOXRJQ2N1TGk4dUxpOHVMaTkwWlc1emIzSXRkbWxsZHljN1hHNXBiWEJ2Y25RZ2UxQnliMmR5WVcxSmJtWnZMQ0JRY205bmNtRnRTVzV3ZFhSVVpXNXpiM0pKYm1adlJHVndaVzVrWlc1amVTd2dVSEp2WjNKaGJWVnVhV1p2Y20xOUlHWnliMjBnSnk0dUx5NHVMM1I1Y0dWekp6dGNibWx0Y0c5eWRDQjdZM0psWVhSbFZHVnVjMjl5VTJoaGNHVldZWEpwWVdKc1pYTXNJR2x1Y0hWMFZtRnlhV0ZpYkdVc0lHOTFkSEIxZEZaaGNtbGhZbXhsTENCVGFHRmtaWEpJWld4d1pYSXNJSFJsYm5OdmNsUjVjR1ZVYjFkeloyeFRkRzl5WVdkbFZIbHdaU3dnVlc1cFptOXliWE5CY25KaGVWUjVjR1Y5SUdaeWIyMGdKeTR1TDJOdmJXMXZiaWM3WEc1cGJYQnZjblFnZTBOdmJuWlVjbUZ1YzNCdmMyVkJkSFJ5YVdKMWRHVnpmU0JtY205dElDY3VMaTlqYjI1MkxYUnlZVzV6Y0c5elpTYzdYRzVwYlhCdmNuUWdlMkZ3Y0dWdVpFRmpkR2wyWVhScGIyNVZibWxtYjNKdGN5d2dZWEJ3Wlc1a1FXTjBhWFpoZEdsdmJsVnVhV1p2Y20xelJHRjBZU3dnWjJWMFFXTjBhWFpoZEdsdmJsTnVhWEJ3WlhSOUlHWnliMjBnSnk0dUwyWjFjMlV0ZFhScGJITW5PMXh1WEc1cGJYQnZjblFnZTJKcFlYTlRibWx3Y0dWMGZTQm1jbTl0SUNjdUwyRmpkR2wyWVhScGIyNWZkWFJwYkNjN1hHNXBiWEJ2Y25RZ2UzVjBhV3hHZFc1amRHbHZibk45SUdaeWIyMGdKeTR2WTI5dWRsOTFkR2xzSnp0Y2JtbHRjRzl5ZENCN2JXRnJaVTFoZEUxMWJGQmhZMnRsWkZOdmRYSmpaU3dnYldGclpVMWhkRTExYkZCaFkydGxaRlpsWXpSVGIzVnlZMlY5SUdaeWIyMGdKeTR2YldGMGJYVnNYM0JoWTJ0bFpGOTNaV0puY0hVbk8xeHVYRzVqYjI1emRDQmpiMjUyTW1SVWNtRnVjM0J2YzJWRGIyMXRiMjVUYm1sd2NHVjBJRDFjYmlBZ0lDQW9hWE5EYUdGdWJtVnNjMHhoYzNRNklHSnZiMnhsWVc0c0lHRmtaRUpwWVhNZ1BTQm1ZV3h6WlN3Z1lYUjBjbWxpZFhSbGN6b2dRMjl1ZGxSeVlXNXpjRzl6WlVGMGRISnBZblYwWlhNc0lIUjVjR1U2SUhOMGNtbHVaeXhjYmlBZ0lDQWdhVzV1WlhKRmJHVnRaVzUwVTJsNlpTQTlJRFFwT2lCemRISnBibWNnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWjJWMFYxTnVhWEJ3WlhRZ1BTQW9hVzV1WlhKRmJHVnRaVzUwVTJsNlpUb2diblZ0WW1WeUtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhOM2FYUmphQ0FvYVc1dVpYSkZiR1Z0Wlc1MFUybDZaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnTVRwY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5jbVYwZFhKdUlIZGJaMlYwU1c1a1pYaEdjbTl0UTI5dmNtUnpORVFvWTI5dmNtUXNJSFpsWXpROGFUTXlQaWgxYm1sbWIzSnRjeTUzWDNOb1lYQmxLU2xkT3ljN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNBME9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0JjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0JqYjI5eVpERWdQU0IyWldNMFBHa3pNajRvWTI5dmNtUllMQ0JqYjI5eVpGa3NJR052YkNBcklERXNJSEp2ZDBsdWJtVnlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0JqYjI5eVpESWdQU0IyWldNMFBHa3pNajRvWTI5dmNtUllMQ0JqYjI5eVpGa3NJR052YkNBcklESXNJSEp2ZDBsdWJtVnlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0JqYjI5eVpETWdQU0IyWldNMFBHa3pNajRvWTI5dmNtUllMQ0JqYjI5eVpGa3NJR052YkNBcklETXNJSEp2ZDBsdWJtVnlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0IyTUNBOUlIZGJaMlYwU1c1a1pYaEdjbTl0UTI5dmNtUnpORVFvWTI5dmNtUXNJSFpsWXpROGFUTXlQaWgxYm1sbWIzSnRjeTUzWDNOb1lYQmxLU2xkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhZeElEMGdkMXRuWlhSSmJtUmxlRVp5YjIxRGIyOXlaSE0wUkNoamIyOXlaREVzSUhabFl6UThhVE15UGloMWJtbG1iM0p0Y3k1M1gzTm9ZWEJsS1NsZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElIWXlJRDBnZDF0blpYUkpibVJsZUVaeWIyMURiMjl5WkhNMFJDaGpiMjl5WkRJc0lIWmxZelE4YVRNeVBpaDFibWxtYjNKdGN5NTNYM05vWVhCbEtTbGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSFl6SUQwZ2QxdG5aWFJKYm1SbGVFWnliMjFEYjI5eVpITTBSQ2hqYjI5eVpETXNJSFpsWXpROGFUTXlQaWgxYm1sbWIzSnRjeTUzWDNOb1lYQmxLU2xkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDUjdkSGx3Wlgwb2RqQXNJSFl4TENCMk1pd2dkak1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZRHRjYmlBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQnBibTVsY2tWc1pXMWxiblJUYVhwbElDUjdhVzV1WlhKRmJHVnRaVzUwVTJsNlpYMGdhWE1nYm05MElITjFjSEJ2Y25SbFpDNWdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUdOdmJuTjBJR052YjNKa1FWTnVhWEJ3WlhRZ1BTQnBjME5vWVc1dVpXeHpUR0Z6ZENBL0lHQmNiaUFnSUNBZ0lHeGxkQ0JqYjI5eVpDQTlJSFpsWXpROGFUTXlQaWhpWVhSamFDd2dhVmhTTENCcFdFTXNJSGhEYUNrN1hHNGdJQ0FnSUNCZ0lEcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0JjYmlBZ0lDQWdJR3hsZENCamIyOXlaQ0E5SUhabFl6UThhVE15UGloaVlYUmphQ3dnZUVOb0xDQnBXRklzSUdsWVF5azdYRzRnSUNBZ0lDQmdPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMjl5WkZKbGMxTnVhWEJ3WlhRZ1BTQnBjME5vWVc1dVpXeHpUR0Z6ZENBL0lHQmNiaUFnSUNCc1pYUWdZMjl2Y21SeklEMGdkbVZqTkR4cE16SStLRnh1SUNBZ0lDQWdZbUYwWTJnc1hHNGdJQ0FnSUNCeWIzY2dMeUJ2ZFhSWGFXUjBhQ3hjYmlBZ0lDQWdJSEp2ZHlBbElHOTFkRmRwWkhSb0xGeHVJQ0FnSUNBZ1kyOXNLVHRjYmlBZ0lDQmdJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1lGeHVJQ0FnSUd4bGRDQmpiMjl5WkhNZ1BTQjJaV00wUEdrek1qNG9YRzRnSUNBZ0lDQmlZWFJqYUN4Y2JpQWdJQ0FnSUhKdmR5eGNiaUFnSUNBZ0lHTnZiQ0F2SUc5MWRGZHBaSFJvTEZ4dUlDQWdJQ0FnWTI5c0lDVWdiM1YwVjJsa2RHZ3BPMXh1SUNBZ0lHQTdYRzVjYmlBZ0lDQWdJR052Ym5OMElIaElaV2xuYUhRZ1BTQnBjME5vWVc1dVpXeHpUR0Z6ZENBL0lDZHBNeklvZFc1cFptOXliWE11ZUY5emFHRndaVnN4WFNrbklEb2dKMmt6TWloMWJtbG1iM0p0Y3k1NFgzTm9ZWEJsV3pKZEtTYzdYRzRnSUNBZ0lDQmpiMjV6ZENCNFYybGtkR2dnUFNCcGMwTm9ZVzV1Wld4elRHRnpkQ0EvSUNkcE16SW9kVzVwWm05eWJYTXVlRjl6YUdGd1pWc3lYU2tuSURvZ0oya3pNaWgxYm1sbWIzSnRjeTU0WDNOb1lYQmxXek5kS1NjN1hHNGdJQ0FnSUNCamIyNXpkQ0J5YjNjZ1BTQnBjME5vWVc1dVpXeHpUR0Z6ZENBL0lDZHliM2NuSURvZ0oyTnZiQ2M3WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMndnUFNCcGMwTm9ZVzV1Wld4elRHRnpkQ0EvSUNkamIyd25JRG9nSjNKdmR5YzdYRzVjYmlBZ0lDQWdJR052Ym5OMElISmxZV1JCVTI1cGNIQmxkQ0E5SUdCY2JpQWdJQ0FnSUd4bGRDQnBia05vWVc1dVpXeHpJRDBnSkh0cGMwTm9ZVzV1Wld4elRHRnpkQ0EvSUNkcE16SW9kVzVwWm05eWJYTXVlRjl6YUdGd1pWc3pYU2tuSURvZ0oya3pNaWgxYm1sbWIzSnRjeTU0WDNOb1lYQmxXekZkS1NkOU8xeHVJQ0FnSUNBZ2JHVjBJRzkxZEZkcFpIUm9JRDBnSkh0cGMwTm9ZVzV1Wld4elRHRnpkQ0EvSUNkcE16SW9kVzVwWm05eWJYTXVjbVZ6ZFd4MFgzTm9ZWEJsV3pKZEtTY2dPaUFuYVRNeUtIVnVhV1p2Y20xekxuSmxjM1ZzZEY5emFHRndaVnN6WFNrbmZUdGNiaUFnSUNBZ0lHeGxkQ0J2ZFhSU2IzY2dQU0FrZTNKdmQzMGdMeUJ2ZFhSWGFXUjBhRHRjYmlBZ0lDQWdJR3hsZENCdmRYUkRiMndnUFNBa2UzSnZkMzBnSlNCdmRYUlhhV1IwYUR0Y2JseHVJQ0FnSUNBZ2JHVjBJRmRTYjNjZ1BTQWtlMk52YkgwZ0x5QW9kVzVwWm05eWJYTXVabWxzZEdWeVgyUnBiWE5iTVYwZ0tpQnBia05vWVc1dVpXeHpLVHRjYmlBZ0lDQWdJR3hsZENCWFEyOXNJRDBnSkh0amIyeDlJQzhnYVc1RGFHRnVibVZzY3lBbElIVnVhV1p2Y20xekxtWnBiSFJsY2w5a2FXMXpXekZkTzF4dUlDQWdJQ0FnYkdWMElIaFNJRDBnWmpNeUtHOTFkRkp2ZHlBdElIVnVhV1p2Y20xekxuQmhaSE5iTUYwZ0t5QjFibWxtYjNKdGN5NWthV3hoZEdsdmJuTmJNRjBnS2lCWFVtOTNLU0F2SUdZek1paDFibWxtYjNKdGN5NXpkSEpwWkdWeld6QmRLVHRjYmlBZ0lDQWdJR3hsZENCNFF5QTlJR1l6TWlodmRYUkRiMndnTFNCMWJtbG1iM0p0Y3k1d1lXUnpXekZkSUNzZ2RXNXBabTl5YlhNdVpHbHNZWFJwYjI1eld6RmRJQ29nVjBOdmJDa2dMeUJtTXpJb2RXNXBabTl5YlhNdWMzUnlhV1JsYzFzeFhTazdYRzRnSUNBZ0lDQnBaaUFvZUZJZ1BDQXdMakFnZkh3Z2VGSWdQajBnWmpNeUtDUjdlRWhsYVdkb2RIMHBJSHg4SUdaeVlXTjBLSGhTS1NBK0lEQXVNQ2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnSkh0MGVYQmxmU2d3TGpBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSGhESUR3Z01DNHdJSHg4SUhoRElENDlJR1l6TWlna2UzaFhhV1IwYUgwcElIeDhJR1p5WVdOMEtIaERLU0ErSURBdU1Da2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdKSHQwZVhCbGZTZ3dMakFwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYkdWMElHbFlVaUE5SUdrek1paDRVaWs3WEc0Z0lDQWdJQ0JzWlhRZ2FWaERJRDBnYVRNeUtIaERLVHRjYmlBZ0lDQWdJR3hsZENCNFEyZ2dQU0FrZTJOdmJIMGdKU0JwYmtOb1lXNXVaV3h6TzF4dUlDQWdJQ0FnSkh0amIyOXlaRUZUYm1sd2NHVjBmVnh1SUNBZ0lDQWdjbVYwZFhKdUlIaGJaMlYwU1c1a1pYaEdjbTl0UTI5dmNtUnpORVFvWTI5dmNtUXNJSFpsWXpROGFUTXlQaWgxYm1sbWIzSnRjeTU0WDNOb1lYQmxLU2t2Skh0cGJtNWxja1ZzWlcxbGJuUlRhWHBsZlYwN1lEdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2MyRnRjR3hsUVNBOUlHbHpRMmhoYm01bGJITk1ZWE4wSUQ4Z1lGeHVJQ0FnSUNBZ2JHVjBJR052YkNBOUlHTnZiRWx1SUNvZ0pIdHBibTVsY2tWc1pXMWxiblJUYVhwbGZUdGNiaUFnSUNBZ0lHbG1JQ2h5YjNjZ1BDQjFibWxtYjNKdGN5NWthVzFmWVY5dmRYUmxjaUFtSmlCamIyd2dQQ0IxYm1sbWIzSnRjeTVrYVcxZmFXNXVaWElwSUh0Y2JpQWdJQ0FnSUNBZ0pIdHlaV0ZrUVZOdWFYQndaWFI5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdKSHQwZVhCbGZTZ3dMakFwTzJBZ09seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWUZ4dUlDQWdJQ0FnYkdWMElHTnZiQ0E5SUdOdmJFbHVJQ29nSkh0cGJtNWxja1ZzWlcxbGJuUlRhWHBsZlR0Y2JpQWdJQ0FnSUdsbUlDaHliM2NnUENCMWJtbG1iM0p0Y3k1a2FXMWZhVzV1WlhJZ0ppWWdZMjlzSUR3Z2RXNXBabTl5YlhNdVpHbHRYMkpmYjNWMFpYSXBJSHRjYmlBZ0lDQWdJQ0FnSkh0eVpXRmtRVk51YVhCd1pYUjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnlaWFIxY200Z0pIdDBlWEJsZlNnd0xqQXBPMkE3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJSE5oYlhCc1pWY2dQU0JnWEc0Z0lDQWdJQ0JzWlhRZ1kyOXNJRDBnWTI5c1NXNGdLaUFrZTJsdWJtVnlSV3hsYldWdWRGTnBlbVY5TzF4dUlDQWdJQ0FnYkdWMElHbHVRMmhoYm01bGJITWdQU0FrZTJselEyaGhibTVsYkhOTVlYTjBJRDhnSjJrek1paDFibWxtYjNKdGN5NTRYM05vWVhCbFd6TmRLU2NnT2lBbmFUTXlLSFZ1YVdadmNtMXpMbmhmYzJoaGNHVmJNVjBwSjMwN1hHNGdJQ0FnSUNCc1pYUWdZMjl2Y21SWUlEMGdkVzVwWm05eWJYTXVabWxzZEdWeVgyUnBiWE5iTUYwZ0xTQXhJQzBnY205M0lDOGdLSFZ1YVdadmNtMXpMbVpwYkhSbGNsOWthVzF6V3pGZElDb2dhVzVEYUdGdWJtVnNjeWs3WEc0Z0lDQWdJQ0JzWlhRZ1kyOXZjbVJaSUQwZ2RXNXBabTl5YlhNdVptbHNkR1Z5WDJScGJYTmJNVjBnTFNBeElDMGdLSEp2ZHlBdklHbHVRMmhoYm01bGJITXBJQ1VnZFc1cFptOXliWE11Wm1sc2RHVnlYMlJwYlhOYk1WMDdYRzRnSUNBZ0lDQnBaaUFvSkh0Y2JpQWdJQ0FnSUNBZ0lDQnBjME5vWVc1dVpXeHpUR0Z6ZENBL0lDZHliM2NnUENCMWJtbG1iM0p0Y3k1a2FXMWZhVzV1WlhJZ0ppWWdZMjlzSUR3Z2RXNXBabTl5YlhNdVpHbHRYMkpmYjNWMFpYSW5JRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNkeWIzY2dQQ0IxYm1sbWIzSnRjeTVrYVcxZmFXNXVaWElnSmlZZ1kyOXNJRHdnZFc1cFptOXliWE11WkdsdFgyRmZiM1YwWlhJbmZTQWdKaVlnWTI5dmNtUllJRDQ5SURBZ0ppWWdZMjl2Y21SWklENDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJSEp2ZDBsdWJtVnlJRDBnY205M0lDVWdhVzVEYUdGdWJtVnNjenRjYmlBZ0lDQWdJQ0FnYkdWMElHTnZiM0prSUQwZ2RtVmpORHhwTXpJK0tHTnZiM0prV0N3Z1kyOXZjbVJaTENCamIyd3NJSEp2ZDBsdWJtVnlLVHRjYmlBZ0lDQWdJQ0FnSkh0blpYUlhVMjVwY0hCbGRDaHBibTVsY2tWc1pXMWxiblJUYVhwbEtYMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlBa2UzUjVjR1Y5S0RBdU1DazdYRzRnSUNBZ0lDQmdPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQmhjSEJzZVVGamRHbDJZWFJwYjI0Z1BTQm5aWFJCWTNScGRtRjBhVzl1VTI1cGNIQmxkQ2hoZEhSeWFXSjFkR1Z6TENCMGVYQmxLVHRjYmlBZ0lDQWdJR052Ym5OMElIVnpaWEpEYjJSbElEMGdZRnh1SUNCbWJpQnRiVjl5WldGa1FTaGlZWFJqYURvZ2FUTXlMQ0J5YjNjZ09pQnBNeklzSUdOdmJFbHVJRG9nYVRNeUtTQXRQaUFrZTNSNWNHVjlJSHRjYmlBZ0lDQWtlMmx6UTJoaGJtNWxiSE5NWVhOMElEOGdjMkZ0Y0d4bFFTQTZJSE5oYlhCc1pWZDlYRzRnSUgxY2JseHVJQ0JtYmlCdGJWOXlaV0ZrUWloaVlYUmphRG9nYVRNeUxDQnliM2NnT2lCcE16SXNJR052YkVsdUlEb2dhVE15S1NBdFBpQWtlM1I1Y0dWOUlIdGNiaUFnSUNBa2UybHpRMmhoYm01bGJITk1ZWE4wSUQ4Z2MyRnRjR3hsVnlBNklITmhiWEJzWlVGOVhHNGdJSDFjYmx4dUlDQm1iaUJ0YlY5M2NtbDBaU2hpWVhSamFEb2dhVE15TENCeWIzY2dPaUJwTXpJc0lHTnZiRWx1SURvZ2FUTXlMQ0IyWVd4MVpVbHVjSFYwSURvZ0pIdDBlWEJsZlNrZ2UxeHVJQ0FnSUd4bGRDQmpiMndnUFNCamIyeEpiaUFxSUNSN2FXNXVaWEpGYkdWdFpXNTBVMmw2WlgwN1hHNGdJQ0FnYVdZZ0tISnZkeUE4SUhWdWFXWnZjbTF6TG1ScGJWOWhYMjkxZEdWeUlDWW1JR052YkNBOElIVnVhV1p2Y20xekxtUnBiVjlpWDI5MWRHVnlLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCMllXeDFaVWx1Y0hWME8xeHVJQ0FnSUNBZ2JHVjBJRzkxZEZkcFpIUm9JRDBnSkh0cGMwTm9ZVzV1Wld4elRHRnpkQ0EvSUNkcE16SW9kVzVwWm05eWJYTXVjbVZ6ZFd4MFgzTm9ZWEJsV3pKZEtTY2dPaUFuYVRNeUtIVnVhV1p2Y20xekxuSmxjM1ZzZEY5emFHRndaVnN6WFNrbmZUdGNiaUFnSUNBZ0lDUjdZMjl2Y21SU1pYTlRibWx3Y0dWMGZWeHVJQ0FnSUNBZ0pIdGlhV0Z6VTI1cGNIQmxkQ2hoWkdSQ2FXRnpLWDFjYmlBZ0lDQWdJQ1I3WVhCd2JIbEJZM1JwZG1GMGFXOXVmVnh1SUNBZ0lDQWdjbVZ6ZFd4MFcyZGxkRWx1WkdWNFJuSnZiVU52YjNKa2N6UkVLR052YjNKa2N5d2dkbVZqTkR4cE16SStLSFZ1YVdadmNtMXpMbkpsYzNWc2RGOXphR0Z3WlNrcEx5UjdhVzV1WlhKRmJHVnRaVzUwVTJsNlpYMWRJRDBnZG1Gc2RXVTdYRzRnSUNBZ2ZWeHVJQ0I5WUR0Y2JpQWdJQ0FnSUhKbGRIVnliaUIxYzJWeVEyOWtaVHRjYmlBZ0lDQjlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdZM0psWVhSbFEyOXVkakpFVkhKaGJuTndiM05sVFdGMFRYVnNVSEp2WjNKaGJVbHVabThnUFZ4dUlDQWdJQ2hwYm5CMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFN3Z1lYUjBjbWxpZFhSbGN6b2dRMjl1ZGxSeVlXNXpjRzl6WlVGMGRISnBZblYwWlhNc0lHOTFkSEIxZEZOb1lYQmxPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3hjYmlBZ0lDQWdaR2x0UVU5MWRHVnlPaUJ1ZFcxaVpYSXNJR1JwYlVKUGRYUmxjam9nYm5WdFltVnlMQ0JrYVcxSmJtNWxjam9nYm5WdFltVnlMQ0JvWVhOQ2FXRnpPaUJpYjI5c1pXRnVMRnh1SUNBZ0lDQnpaWEYxWlc1MGFXRnNRV05qWlhOelFubFVhSEpsWVdSek9pQmliMjlzWldGdUtUb2dVSEp2WjNKaGJVbHVabThnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYVhORGFHRnVibVZzYzB4aGMzUWdQU0JoZEhSeWFXSjFkR1Z6TG1admNtMWhkQ0E5UFQwZ0owNUlWME1uTzF4dUlDQWdJQ0FnWTI5dWMzUWdhVzVEYUdGdWJtVnNjeUE5SUdselEyaGhibTVsYkhOTVlYTjBJRDhnYVc1d2RYUnpXekJkTG1ScGJYTmJNMTBnT2lCcGJuQjFkSE5iTUYwdVpHbHRjMXN4WFR0Y2JpQWdJQ0FnSUdOdmJuTjBJR0poZEdOb1UybDZaU0E5SUc5MWRIQjFkRk5vWVhCbFd6QmRPMXh1SUNBZ0lDQWdZMjl1YzNRZ2IzVjBWMmxrZEdnZ1BTQnBjME5vWVc1dVpXeHpUR0Z6ZENBL0lHOTFkSEIxZEZOb1lYQmxXekpkSURvZ2IzVjBjSFYwVTJoaGNHVmJNMTA3WEc0Z0lDQWdJQ0JqYjI1emRDQnZkWFJJWldsbmFIUWdQU0JwYzBOb1lXNXVaV3h6VEdGemRDQS9JRzkxZEhCMWRGTm9ZWEJsV3pGZElEb2diM1YwY0hWMFUyaGhjR1ZiTWwwN1hHNGdJQ0FnSUNCamIyNXpkQ0J2ZFhSRGFHRnVibVZzY3lBOUlHbHpRMmhoYm01bGJITk1ZWE4wSUQ4Z2IzVjBjSFYwVTJoaGNHVmJNMTBnT2lCdmRYUndkWFJUYUdGd1pWc3hYVHRjYmlBZ0lDQWdJQzh2SUZSUFJFODZJR1Z1WVdKc1pTQjJaV00wSUdadmNpQk9RMGhYWEc0Z0lDQWdJQ0JqYjI1emRDQnBjMVpsWXpRZ1BTQnBjME5vWVc1dVpXeHpUR0Z6ZENBbUppQW9hVzVEYUdGdWJtVnNjeUFsSURRZ1BUMDlJREFnSmlZZ2FXNURhR0Z1Ym1Wc2N5QWxJRE1wSUNZbUlHOTFkRU5vWVc1dVpXeHpJQ1VnTkNBOVBUMGdNRHRjYmx4dUlDQWdJQ0FnTHk4Z1ZFOUVUem9nWm1sdVpTQjBkVzVsSUhOcGVtVmNiaUFnSUNBZ0lHTnZibk4wSUdScGMzQmhkR05vV0NBOUlHbHpRMmhoYm01bGJITk1ZWE4wSUQ4Z2IzVjBRMmhoYm01bGJITWdPaUJ2ZFhSWGFXUjBhQ0FxSUc5MWRFaGxhV2RvZER0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JwYzNCaGRHTm9XU0E5SUdselEyaGhibTVsYkhOTVlYTjBJRDhnYjNWMFYybGtkR2dnS2lCdmRYUklaV2xuYUhRZ09pQnZkWFJEYUdGdWJtVnNjenRjYmlBZ0lDQWdJR052Ym5OMElIZHZjbXRIY205MWNGTnBlbVU2SUZ0dWRXMWlaWElzSUc1MWJXSmxjaXdnYm5WdFltVnlYU0E5SUZzNExDQTRMQ0F4WFR0Y2JpQWdJQ0FnSUdOdmJuTjBJR1ZzWlcxbGJuUnpVR1Z5VkdoeVpXRmtJRDBnWkdsdFFVOTFkR1Z5SUR3OUlEZ2dQeUJiTkN3Z01Td2dNVjBnT2lCYk5Dd2dOQ3dnTVYwN1hHNGdJQ0FnSUNCamIyNXpkQ0JrYVhOd1lYUmphQ0E5SUZ0Y2JpQWdJQ0FnSUNBZ1RXRjBhQzVqWldsc0tHUnBjM0JoZEdOb1dDQXZJSGR2Y210SGNtOTFjRk5wZW1WYk1GMGdMeUJsYkdWdFpXNTBjMUJsY2xSb2NtVmhaRnN3WFNrc1hHNGdJQ0FnSUNBZ0lFMWhkR2d1WTJWcGJDaGthWE53WVhSamFGa2dMeUIzYjNKclIzSnZkWEJUYVhwbFd6RmRJQzhnWld4bGJXVnVkSE5RWlhKVWFISmxZV1JiTVYwcExGeHVJQ0FnSUNBZ0lDQk5ZWFJvTG1ObGFXd29ZbUYwWTJoVGFYcGxJQzhnZDI5eWEwZHliM1Z3VTJsNlpWc3lYU0F2SUdWc1pXMWxiblJ6VUdWeVZHaHlaV0ZrV3pKZEtWeHVJQ0FnSUNBZ1hUdGNibHh1SUNBZ0lDQWdURTlIWDBSRlFsVkhLQ2QyWlhKaWIzTmxKeXdnS0NrZ1BUNGdZRnRqYjI1MlgySmhZMnR3Y205d1gyMXRYM2RsWW1kd2RWMGdaR2x6Y0dGMFkyZ2dQU0FrZTJScGMzQmhkR05vZldBcE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCcGJtNWxja1ZzWlcxbGJuUlRhWHBsSUQwZ2FYTldaV00wSUQ4Z05DQTZJREU3WEc0Z0lDQWdJQ0JqYjI1emRDQjBhV3hsU1c1dVpYSWdQU0JOWVhSb0xtMWhlQ2gzYjNKclIzSnZkWEJUYVhwbFd6QmRJQ29nYVc1dVpYSkZiR1Z0Wlc1MFUybDZaU3dnZDI5eWEwZHliM1Z3VTJsNlpWc3hYU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMjF3YjI1bGJuUnpJRDBnYVhOV1pXTTBJRDhnTkNBNklERTdYRzRnSUNBZ0lDQmpiMjV6ZENCbWFXeDBaWEpFYVcxeklEMWNiaUFnSUNBZ0lDQWdJQ0JiWVhSMGNtbGlkWFJsY3k1clpYSnVaV3hUYUdGd1pWdHBjME5vWVc1dVpXeHpUR0Z6ZENBL0lERWdPaUF5WFN3Z1lYUjBjbWxpZFhSbGN5NXJaWEp1Wld4VGFHRndaVnRwYzBOb1lXNXVaV3h6VEdGemRDQS9JRElnT2lBelhWMDdYRzRnSUNBZ0lDQmpiMjV6ZENCbFptWmxZM1JwZG1WR2FXeDBaWEpFYVcxeklEMGdXMXh1SUNBZ0lDQWdJQ0JtYVd4MFpYSkVhVzF6V3pCZElDc2dLR0YwZEhKcFluVjBaWE11Wkdsc1lYUnBiMjV6V3pCZElEdzlJREVnUHlBd0lEb2dLR1pwYkhSbGNrUnBiWE5iTUYwZ0xTQXhLU0FxSUNoaGRIUnlhV0oxZEdWekxtUnBiR0YwYVc5dWMxc3dYU0F0SURFcEtTeGNiaUFnSUNBZ0lDQWdabWxzZEdWeVJHbHRjMXN4WFNBcklDaGhkSFJ5YVdKMWRHVnpMbVJwYkdGMGFXOXVjMXN4WFNBOFBTQXhJRDhnTUNBNklDaG1hV3gwWlhKRWFXMXpXekZkSUMwZ01Ta2dLaUFvWVhSMGNtbGlkWFJsY3k1a2FXeGhkR2x2Ym5OYk1WMGdMU0F4S1NsY2JpQWdJQ0FnSUYwN1hHNGdJQ0FnSUNCamIyNXpkQ0J3WVdSeklEMGdXMXh1SUNBZ0lDQWdJQ0JsWm1abFkzUnBkbVZHYVd4MFpYSkVhVzF6V3pCZElDMGdNU0F0SUUxaGRHZ3VabXh2YjNJb0tHRjBkSEpwWW5WMFpYTXVjR0ZrYzFzd1hTQXJJR0YwZEhKcFluVjBaWE11Y0dGa2Mxc3lYU2tnTHlBeUtTeGNiaUFnSUNBZ0lDQWdaV1ptWldOMGFYWmxSbWxzZEdWeVJHbHRjMXN4WFNBdElERWdMU0JOWVhSb0xtWnNiMjl5S0NoaGRIUnlhV0oxZEdWekxuQmhaSE5iTVYwZ0t5QmhkSFJ5YVdKMWRHVnpMbkJoWkhOYk0xMHBJQzhnTWlsY2JpQWdJQ0FnSUYwN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUhCeWIyZHlZVzFWYm1sbWIzSnRjem9nVUhKdlozSmhiVlZ1YVdadmNtMWJYU0E5SUZ0Y2JpQWdJQ0FnSUNBZ2UzUjVjR1U2SUVSaGRHRlVlWEJsTG1sdWRETXlMQ0JrWVhSaE9pQmthVzFCVDNWMFpYSjlMQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVhVzUwTXpJc0lHUmhkR0U2SUdScGJVSlBkWFJsY24wc1hHNGdJQ0FnSUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1cGJuUXpNaXdnWkdGMFlUb2daR2x0U1c1dVpYSjlMQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVhVzUwTXpJc0lHUmhkR0U2SUdGMGRISnBZblYwWlhNdWMzUnlhV1JsYzMwc1hHNGdJQ0FnSUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1cGJuUXpNaXdnWkdGMFlUb2dZWFIwY21saWRYUmxjeTVrYVd4aGRHbHZibk45TENCN2RIbHdaVG9nUkdGMFlWUjVjR1V1YVc1ME16SXNJR1JoZEdFNklHWnBiSFJsY2tScGJYTjlMRnh1SUNBZ0lDQWdJQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVhVzUwTXpJc0lHUmhkR0U2SUhCaFpITjlYRzRnSUNBZ0lDQmRPMXh1SUNBZ0lDQWdZWEJ3Wlc1a1FXTjBhWFpoZEdsdmJsVnVhV1p2Y20xelJHRjBZU2hoZEhSeWFXSjFkR1Z6TENCd2NtOW5jbUZ0Vlc1cFptOXliWE1wTzF4dUlDQWdJQ0FnY0hKdlozSmhiVlZ1YVdadmNtMXpMbkIxYzJnb0xpNHVZM0psWVhSbFZHVnVjMjl5VTJoaGNHVldZWEpwWVdKc1pYTW9hVzV3ZFhSeld6QmRMbVJwYlhNc0lHbHVjSFYwYzFzeFhTNWthVzF6S1NrN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6T2lCUWNtOW5jbUZ0U1c1d2RYUlVaVzV6YjNKSmJtWnZSR1Z3Wlc1a1pXNWplVnRkSUQwZ1d5ZHlZVzVySnl3Z0ozSmhibXNuWFR0Y2JpQWdJQ0FnSUdsbUlDaG9ZWE5DYVdGektTQjdYRzRnSUNBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGN5NXdkWE5vS0M0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHbHVjSFYwYzFzeVhTNWthVzF6S1NrN1hHNGdJQ0FnSUNBZ0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWekxuQjFjMmdvSjNKaGJtc25LVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGN5NXdkWE5vS0M0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHOTFkSEIxZEZOb1lYQmxLU2s3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR2RsZEZOb1lXUmxjbE52ZFhKalpTQTlJQ2h6YUdGa1pYSklaV3h3WlhJNklGTm9ZV1JsY2tobGJIQmxjaWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCNElEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnbmVDY3NJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU3dnYVc1d2RYUnpXekJkTG1ScGJYTXViR1Z1WjNSb0xDQmpiMjF3YjI1bGJuUnpLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdkeUE5SUdsdWNIVjBWbUZ5YVdGaWJHVW9KM2NuTENCcGJuQjFkSE5iTVYwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzeFhTNWthVzF6TG14bGJtZDBhQ3dnTVNrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUc5MWRIQjFkQ0E5SUc5MWRIQjFkRlpoY21saFlteGxLQ2R5WlhOMWJIUW5MQ0JwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1VzSUc5MWRIQjFkRk5vWVhCbExteGxibWQwYUN3Z1kyOXRjRzl1Wlc1MGN5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElHbHVjSFYwVm1GeWFXRmliR1Z6SUQwZ1czZ3NJSGRkTzF4dVhHNGdJQ0FnSUNBZ0lHeGxkQ0JrWldOc1lYSmxSblZ1WTNScGIyNXpJRDBnSnljN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hvWVhOQ2FXRnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWW1saGN5QTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb0oySnBZWE1uTENCcGJuQjFkSE5iTWwwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzeVhTNWthVzF6TG14bGJtZDBhQ3dnWTI5dGNHOXVaVzUwY3lrN1hHNGdJQ0FnSUNBZ0lDQWdhVzV3ZFhSV1lYSnBZV0pzWlhNdWNIVnphQ2hpYVdGektUdGNiaUFnSUNBZ0lDQWdJQ0JrWldOc1lYSmxSblZ1WTNScGIyNXpJQ3M5SUdCY2JpQWdJQ0FnSUNBZ0lDQm1iaUJuWlhSQ2FXRnpRbmxQZFhSd2RYUkRiMjl5WkhNb1kyOXZjbVJ6SURvZ2RtVmpORHhwTXpJK0tTQXRQaUFrZTJKcFlYTXVkSGx3WlM1MllXeDFaWDBnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHSnBZWE5iWTI5dmNtUnpMaVI3YVhORGFHRnVibVZzYzB4aGMzUWdQeUFuZHljZ09pQW5lU2Q5Skh0cGMxWmxZelFnUHlBbkx5QTBKeUE2SUNjbmZWMDdYRzRnSUNBZ0lDQWdJQ0FnZldBN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQjFibWxtYjNKdGN6b2dWVzVwWm05eWJYTkJjbkpoZVZSNWNHVWdQU0JiWEc0Z0lDQWdJQ0FnSUNBZ2UyNWhiV1U2SUNka2FXMWZZVjl2ZFhSbGNpY3NJSFI1Y0dVNklDZHBNekluZlN3Z2UyNWhiV1U2SUNka2FXMWZZbDl2ZFhSbGNpY3NJSFI1Y0dVNklDZHBNekluZlN3Z2UyNWhiV1U2SUNka2FXMWZhVzV1WlhJbkxDQjBlWEJsT2lBbmFUTXlKMzBzWEc0Z0lDQWdJQ0FnSUNBZ2UyNWhiV1U2SUNkemRISnBaR1Z6Snl3Z2RIbHdaVG9nSjJrek1pY3NJR3hsYm1kMGFEb2dNbjBzSUh0dVlXMWxPaUFuWkdsc1lYUnBiMjV6Snl3Z2RIbHdaVG9nSjJrek1pY3NJR3hsYm1kMGFEb2dNbjBzWEc0Z0lDQWdJQ0FnSUNBZ2UyNWhiV1U2SUNkbWFXeDBaWEpmWkdsdGN5Y3NJSFI1Y0dVNklDZHBNekluTENCc1pXNW5kR2c2SUdacGJIUmxja1JwYlhNdWJHVnVaM1JvZlN4Y2JpQWdJQ0FnSUNBZ0lDQjdibUZ0WlRvZ0ozQmhaSE1uTENCMGVYQmxPaUFuYVRNeUp5d2diR1Z1WjNSb09pQndZV1J6TG14bGJtZDBhSDFjYmlBZ0lDQWdJQ0FnWFR0Y2JpQWdJQ0FnSUNBZ1lYQndaVzVrUVdOMGFYWmhkR2x2YmxWdWFXWnZjbTF6S0dGMGRISnBZblYwWlhNc0lIVnVhV1p2Y20xektUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1pXeGxiVlI1Y0dVZ1BTQjBaVzV6YjNKVWVYQmxWRzlYYzJkc1UzUnZjbUZuWlZSNWNHVW9hVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxMQ0F4S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1ZzWlcxVWVYQmxJQ0U5UFNBblpqRTJKeUFtSmlCbGJHVnRWSGx3WlNBaFBUMGdKMll6TWljcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZR1ZzWlcxVWVYQmxJQ1I3Wld4bGJWUjVjR1Y5SUdseklHNXZkQ0J6ZFhCd2IzSjBaV1F1WUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHQmNiaUFnSUNBZ0lDQWdKSHQxZEdsc1JuVnVZM1JwYjI1ektDZDFibWxtYjNKdGN5NXlaWE4xYkhSZmMzUnlhV1JsY3ljcGZWeHVJQ0FnSUNBZ0lDQWtlM05vWVdSbGNraGxiSEJsY2k1eVpXZHBjM1JsY2xWdWFXWnZjbTF6S0hWdWFXWnZjbTF6S1M1a1pXTnNZWEpsVm1GeWFXRmliR1Z6S0M0dUxtbHVjSFYwVm1GeWFXRmliR1Z6TENCdmRYUndkWFFwZlR0Y2JpQWdJQ0FnSUNBZ0pIdGtaV05zWVhKbFJuVnVZM1JwYjI1emZWeHVJQ0FnSUNBZ0lDQWtlMk52Ym5ZeVpGUnlZVzV6Y0c5elpVTnZiVzF2YmxOdWFYQndaWFFvYVhORGFHRnVibVZzYzB4aGMzUXNJR2hoYzBKcFlYTXNJR0YwZEhKcFluVjBaWE1zSUhndWRIbHdaUzUyWVd4MVpTd2dhVzV1WlhKRmJHVnRaVzUwVTJsNlpTbDlYRzRnSUNBZ0lDQWdJQ1I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBjMVpsWXpRZ1B5QnRZV3RsVFdGMFRYVnNVR0ZqYTJWa1ZtVmpORk52ZFhKalpTaGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiR1Z0Wlc1MGMxQmxjbFJvY21WaFpDd2dkMjl5YTBkeWIzVndVMmw2WlN3Z1pXeGxiVlI1Y0dVc0lIVnVaR1ZtYVc1bFpDd2dJV2x6UTJoaGJtNWxiSE5NWVhOMExDQjBhV3hsU1c1dVpYSXBJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMWhhMlZOWVhSTmRXeFFZV05yWldSVGIzVnlZMlVvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4bGJXVnVkSE5RWlhKVWFISmxZV1FzSUhkdmNtdEhjbTkxY0ZOcGVtVXNJR1ZzWlcxVWVYQmxMQ0IxYm1SbFptbHVaV1FzSUNGcGMwTm9ZVzV1Wld4elRHRnpkQ3dnZEdsc1pVbHVibVZ5TENCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IxYm1SbFptbHVaV1FzSUhObGNYVmxiblJwWVd4QlkyTmxjM05DZVZSb2NtVmhaSE1wZldBN1hHNGdJQ0FnSUNCOU8xeHVYRzRnSUNBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ0lDQnVZVzFsT2lBblEyOXVkakpFVkhKaGJuTndiM05sVFdGMFRYVnNKeXhjYmlBZ0lDQWdJQ0FnYzJoaFpHVnlRMkZqYUdVNlhHNGdJQ0FnSUNBZ0lDQWdJQ0I3YUdsdWREb2dZQ1I3WVhSMGNtbGlkWFJsY3k1allXTm9aVXRsZVgwN0pIdGxiR1Z0Wlc1MGMxQmxjbFJvY21WaFpIMDdKSHQzYjNKclIzSnZkWEJUYVhwbGZUc2tlMmx6Vm1Wak5IMWdMQ0JwYm5CMWRFUmxjR1Z1WkdWdVkybGxjMzBzWEc0Z0lDQWdJQ0FnSUdkbGRGSjFia1JoZEdFNklDZ3BJRDArSUNoN1hHNGdJQ0FnSUNBZ0lDQWdiM1YwY0hWMGN6b2dXM3RrYVcxek9pQnZkWFJ3ZFhSVGFHRndaU3dnWkdGMFlWUjVjR1U2SUdsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlgxZExGeHVJQ0FnSUNBZ0lDQWdJR1JwYzNCaGRHTm9SM0p2ZFhBNklIdDRPaUJrYVhOd1lYUmphRnN3WFN3Z2VUb2daR2x6Y0dGMFkyaGJNVjBzSUhvNklHUnBjM0JoZEdOb1d6SmRmU3hjYmlBZ0lDQWdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE5jYmlBZ0lDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNBZ0lHZGxkRk5vWVdSbGNsTnZkWEpqWlZ4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5TzF4dUlpd2dJaThxS2x4dUlDb2dRR3hwWTJWdWMyVmNiaUFxSUVOdmNIbHlhV2RvZENBeU1ESXhJRWR2YjJkc1pTQk1URU11SUVGc2JDQlNhV2RvZEhNZ1VtVnpaWEoyWldRdVhHNGdLaUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUVhCaFkyaGxJRXhwWTJWdWMyVXNJRlpsY25OcGIyNGdNaTR3SUNoMGFHVWdYQ0pNYVdObGJuTmxYQ0lwTzF4dUlDb2dlVzkxSUcxaGVTQnViM1FnZFhObElIUm9hWE1nWm1sc1pTQmxlR05sY0hRZ2FXNGdZMjl0Y0d4cFlXNWpaU0IzYVhSb0lIUm9aU0JNYVdObGJuTmxMbHh1SUNvZ1dXOTFJRzFoZVNCdlluUmhhVzRnWVNCamIzQjVJRzltSUhSb1pTQk1hV05sYm5ObElHRjBYRzRnS2x4dUlDb2dhSFIwY0RvdkwzZDNkeTVoY0dGamFHVXViM0puTDJ4cFkyVnVjMlZ6TDB4SlEwVk9VMFV0TWk0d1hHNGdLbHh1SUNvZ1ZXNXNaWE56SUhKbGNYVnBjbVZrSUdKNUlHRndjR3hwWTJGaWJHVWdiR0YzSUc5eUlHRm5jbVZsWkNCMGJ5QnBiaUIzY21sMGFXNW5MQ0J6YjJaMGQyRnlaVnh1SUNvZ1pHbHpkSEpwWW5WMFpXUWdkVzVrWlhJZ2RHaGxJRXhwWTJWdWMyVWdhWE1nWkdsemRISnBZblYwWldRZ2IyNGdZVzRnWENKQlV5QkpVMXdpSUVKQlUwbFRMRnh1SUNvZ1YwbFVTRTlWVkNCWFFWSlNRVTVVU1VWVElFOVNJRU5QVGtSSlZFbFBUbE1nVDBZZ1FVNVpJRXRKVGtRc0lHVnBkR2hsY2lCbGVIQnlaWE56SUc5eUlHbHRjR3hwWldRdVhHNGdLaUJUWldVZ2RHaGxJRXhwWTJWdWMyVWdabTl5SUhSb1pTQnpjR1ZqYVdacFl5QnNZVzVuZFdGblpTQm5iM1psY201cGJtY2djR1Z5YldsemMybHZibk1nWVc1a1hHNGdLaUJzYVcxcGRHRjBhVzl1Y3lCMWJtUmxjaUIwYUdVZ1RHbGpaVzV6WlM1Y2JpQXFJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNGdLaTljYmx4dUx5OGdjMkZ0Y0d4bFpDQm1jbTl0SUZ0QWRHVnVjMjl5Wm14dmR5OTBabXB6WFNCMFptcHpMV0poWTJ0bGJtUXRkMlZpWjNCMUwzTnlZeTlqYjI1MlgySmhZMnR3Y205d1gzZGxZbWR3ZFM1MGMxeHVYRzVwYlhCdmNuUWdlMFJoZEdGVWVYQmxmU0JtY205dElDY3VMaTh1TGk4dUxpOHVMaTkzWVhOdExXTnZiVzF2YmljN1hHNXBiWEJ2Y25RZ2UweFBSMTlFUlVKVlIzMGdabkp2YlNBbkxpNHZMaTR2TGk0dmJHOW5KenRjYm1sdGNHOXlkQ0I3VkdWdWMyOXlWbWxsZDMwZ1puSnZiU0FuTGk0dkxpNHZMaTR2ZEdWdWMyOXlMWFpwWlhjbk8xeHVhVzF3YjNKMElIdFRhR0Z3WlZWMGFXeDlJR1p5YjIwZ0p5NHVMeTR1THk0dUwzVjBhV3duTzF4dWFXMXdiM0owSUh0UWNtOW5jbUZ0U1c1bWJ5d2dVSEp2WjNKaGJVbHVjSFYwVkdWdWMyOXlTVzVtYjBSbGNHVnVaR1Z1WTNrc0lGQnliMmR5WVcxVmJtbG1iM0p0ZlNCbWNtOXRJQ2N1TGk4dUxpOTBlWEJsY3ljN1hHNXBiWEJ2Y25RZ2UyTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWekxDQnBibkIxZEZaaGNtbGhZbXhsTENCdmRYUndkWFJXWVhKcFlXSnNaU3dnVTJoaFpHVnlTR1ZzY0dWeUxDQjBaVzV6YjNKVWVYQmxWRzlYYzJkc1UzUnZjbUZuWlZSNWNHVXNJRlZ1YVdadmNtMXpRWEp5WVhsVWVYQmxmU0JtY205dElDY3VMaTlqYjIxdGIyNG5PMXh1YVcxd2IzSjBJSHREYjI1MlZISmhibk53YjNObFFYUjBjbWxpZFhSbGMzMGdabkp2YlNBbkxpNHZZMjl1ZGkxMGNtRnVjM0J2YzJVbk8xeHVYRzVqYjI1emRDQmpjbVZoZEdWRGIyNTJWSEpoYm5Od2IzTmxNa1JQY0ZCeWIyZHlZVzFUYUdGa1pYSlRiM1Z5WTJVZ1BWeHVJQ0FnSUNoemFHRmtaWEpJWld4d1pYSTZJRk5vWVdSbGNraGxiSEJsY2l3Z2FXNXdkWFJ6T2lCeVpXRmtiMjVzZVNCVVpXNXpiM0pXYVdWM1cxMHNJRzkxZEhCMWRGTm9ZWEJsT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z2FHRnpRbWxoY3pvZ1ltOXZiR1ZoYml4Y2JpQWdJQ0FnYVhNeFJHbHRaVzV6YVc5dVJHbHpjR0YwWTJnNklHSnZiMnhsWVc0c0lHbHpWbVZqTkNBOUlHWmhiSE5sTENCa1lYUmhWSGx3WlRvZ2MzUnlhVzVuTENCMWJtbG1iM0p0Y3pvZ1ZXNXBabTl5YlhOQmNuSmhlVlI1Y0dVc1hHNGdJQ0FnSUdselEyaGhibTVsYkhOTVlYTjBJRDBnWm1Gc2MyVXBPaUJ6ZEhKcGJtY2dQVDRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjbTkzUkdsdElEMGdhWE5EYUdGdWJtVnNjMHhoYzNRZ1B5QXhJRG9nTWp0Y2JpQWdJQ0FnSUdOdmJuTjBJR052YkVScGJTQTlJR2x6UTJoaGJtNWxiSE5NWVhOMElEOGdNaUE2SURNN1hHNGdJQ0FnSUNCamIyNXpkQ0JqYUdGdWJtVnNSR2x0SUQwZ2FYTkRhR0Z1Ym1Wc2MweGhjM1FnUHlBeklEb2dNVHRjYmlBZ0lDQWdJR052Ym5OMElIZHZjbXRRWlhKVWFISmxZV1FnUFNCcGMxWmxZelFnUHlBeUlEb2dNVHRjYmx4dUlDQWdJQ0FnYkdWMElHUmxZMnhoY21WR2RXNWpkR2x2Ym5NZ1BTQmdYRzRnSUdadUlITmxkRTkxZEhCMWRFRjBTVzVrWlhnb1pteGhkRWx1WkdWNElEb2dkVE15TENCMllXeDFaU0E2SUNSN2FYTldaV00wSUQ4Z1lIWmxZelE4Skh0a1lYUmhWSGx3WlgwK1lDQTZJR1JoZEdGVWVYQmxmU2tnZTF4dUlDQWdJSEpsYzNWc2RGdG1iR0YwU1c1a1pYaGRJRDBnSkh0cGMxWmxZelFnUHlCZ2RtVmpORHdrZTJSaGRHRlVlWEJsZlQ1Z0lEb2daR0YwWVZSNWNHVjlLSFpoYkhWbEtUdGNiaUFnZldBN1hHNGdJQ0FnSUNCcFppQW9hR0Z6UW1saGN5a2dlMXh1SUNBZ0lDQWdJQ0JrWldOc1lYSmxSblZ1WTNScGIyNXpJQ3M5SUdCY2JpQWdJQ0JtYmlCblpYUkNhV0Z6UW5sUGRYUndkWFJEYjI5eVpITW9ZMjl2Y21SeklEb2dkbVZqTkR4MU16SStLU0F0UGlBa2UybHpWbVZqTkNBL0lHQjJaV00wUENSN1pHRjBZVlI1Y0dWOVBtQWdPaUJrWVhSaFZIbHdaWDBnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR0pwWVhOYlkyOXZjbVJ6TGlSN2FYTkRhR0Z1Ym1Wc2MweGhjM1FnUHlBbmR5Y2dPaUFuZVNkOUpIdHBjMVpsWXpRZ1B5QW5MeUEwSnlBNklDY25mVjA3WEc0Z0lDQWdmV0E3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMjF3YjI1bGJuUnpJRDBnYVhOV1pXTTBJRDhnTkNBNklERTdYRzRnSUNBZ0lDQmpiMjV6ZENCM0lEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnblZ5Y3NJR2x1Y0hWMGMxc3hYUzVrWVhSaFZIbHdaU3dnYVc1d2RYUnpXekZkTG1ScGJYTXViR1Z1WjNSb0xDQmpiMjF3YjI1bGJuUnpLVHRjYmlBZ0lDQWdJR052Ym5OMElHUjVJRDBnYVc1d2RYUldZWEpwWVdKc1pTZ25SSGtuTENCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzd1hTNWthVzF6TG14bGJtZDBhQ3dnWTI5dGNHOXVaVzUwY3lrN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRGWmhjbWxoWW14bGN5QTlJRnRrZVN3Z2QxMDdYRzRnSUNBZ0lDQnBaaUFvYUdGelFtbGhjeWtnZTF4dUlDQWdJQ0FnSUNCcGJuQjFkRlpoY21saFlteGxjeTV3ZFhOb0tHbHVjSFYwVm1GeWFXRmliR1VvSjJKcFlYTW5MQ0JwYm5CMWRITmJNbDB1WkdGMFlWUjVjR1VzSUZ0dmRYUndkWFJUYUdGd1pWdGphR0Z1Ym1Wc1JHbHRYVjB1YkdWdVozUm9MQ0JqYjIxd2IyNWxiblJ6S1NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCamIyNXpkQ0J2ZFhSd2RYUWdQU0J2ZFhSd2RYUldZWEpwWVdKc1pTZ25jbVZ6ZFd4MEp5d2dhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxMQ0J2ZFhSd2RYUlRhR0Z3WlM1c1pXNW5kR2dzSUdOdmJYQnZibVZ1ZEhNcE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCamIyUmxVMjVwY0hCbGREUWdQU0JnZTF4dUlDQWdJQ0FnSUNCc1pYUWdZbUYwWTJnNklIVXpNaUE5SUNSN2FYTXhSR2x0Wlc1emFXOXVSR2x6Y0dGMFkyZ2dQeUFuWjJ4dlltRnNYMmxrTG5vbklEb2dKM2R2Y210bmNtOTFjRjlwWkM1NkozMGdMeUIxYm1sbWIzSnRjeTV5WlhOMWJIUmZjMmhoY0dWYk1WMDdYRzRnSUNBZ0lDQWdJR3hsZENCeUlEMGdKSHRwY3pGRWFXMWxibk5wYjI1RWFYTndZWFJqYUNBL0lDZG5iRzlpWVd4ZmFXUXVlaWNnT2lBbmQyOXlhMmR5YjNWd1gybGtMbm9uZlNBbElIVnVhV1p2Y20xekxuSmxjM1ZzZEY5emFHRndaVnN4WFR0Y2JpQWdJQ0FnSUNBZ2JHVjBJR01nUFNBa2UybHpNVVJwYldWdWMybHZia1JwYzNCaGRHTm9JRDhnSjJkc2IySmhiRjlwWkM1NUp5QTZJQ2QzYjNKclozSnZkWEJmYVdRdWVTZDlJQ29nSkh0M2IzSnJVR1Z5VkdoeVpXRmtmVHRjYmlBZ0lDQWdJQ0FnYkdWMElHUXhPaUIxTXpJZ1BTQWtlMmx6TVVScGJXVnVjMmx2YmtScGMzQmhkR05vSUQ4Z0oyZHNiMkpoYkY5cFpDNTRKeUE2SUNkM2IzSnJaM0p2ZFhCZmFXUXVlQ2Q5SUNvZ05EdGNibHh1SUNBZ0lDQWdJQ0JzWlhRZ1pIbERiM0p1WlhJZ1BTQjJaV015UEdrek1qNG9hVE15S0hJcExDQnBNeklvWXlrcElDMGdkbVZqTWp4cE16SStLSFZ1YVdadmNtMXpMbkJoWkhNcE8xeHVYRzRnSUNBZ0lDQWdJQzh2SUVOdmJuWnZiSFpsSUdSNUtEOHNJRDhzSUdReUtTQjNhWFJvSUhjb09pd2dPaXdnWkRFc0lHUXlLU0IwYnlCamIyMXdkWFJsSUdSNEtIaFNMQ0I0UXl3Z1pERXBMbHh1SUNBZ0lDQWdJQ0F2THlBL0lEMGdkRzhnWW1VZ1pHVjBaWEp0YVc1bFpDNGdPaUE5SUdGamNtOXpjeUJoYkd3Z2RtRnNkV1Z6SUdsdUlIUm9ZWFFnWVhocGN5NWNiaUFnSUNBZ0lDQWdkbUZ5SUdSdmRGQnliMlE2SUdGeWNtRjVQSFpsWXpROEpIdGtZWFJoVkhsd1pYMCtMQ0FrZTNkdmNtdFFaWEpVYUhKbFlXUjlQanRjYmlBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENBa2UzZHZjbXRRWlhKVWFISmxZV1I5T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNCa2IzUlFjbTlrVzJsZElEMGdkbVZqTkR3a2UyUmhkR0ZVZVhCbGZUNG9NQzR3S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQjNVam9nZFRNeUlEMGdNRHNnZDFJZ1BDQjFibWxtYjNKdGN5NW1hV3gwWlhKZlpHbHRjMXN3WFRzZ2QxSWdQU0IzVWlBcklERXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMllYSWdaSGxTSUQwZ0tDUjdaR0YwWVZSNWNHVjlLR1I1UTI5eWJtVnlMbmdwSUNzZ0pIdGtZWFJoVkhsd1pYMG9kMUlwS1NBdklDUjdaR0YwWVZSNWNHVjlLSFZ1YVdadmNtMXpMbk4wY21sa1pYTXVlQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2JHVjBJSGRTVUdWeWJTQTlJSFZ1YVdadmNtMXpMbVpwYkhSbGNsOWthVzF6V3pCZElDMGdNU0F0SUhkU08xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoa2VWSWdQQ0F3TGpBZ2ZId2daSGxTSUQ0OUlDUjdaR0YwWVZSNWNHVjlLSFZ1YVdadmNtMXpMa1I1WDNOb1lYQmxXekZkS1NCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWNtRmpkQ2hrZVZJcElENGdNQzR3SUh4OElIZFNVR1Z5YlNBOElEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdhV1I1VWpvZ2RUTXlJRDBnZFRNeUtHUjVVaWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQjNRem9nZFRNeUlEMGdNRHNnZDBNZ1BDQjFibWxtYjNKdGN5NW1hV3gwWlhKZlpHbHRjMXN4WFRzZ2QwTWdQU0IzUXlBcklERXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0JrZVVNZ1BTQW9KSHRrWVhSaFZIbHdaWDBvWkhsRGIzSnVaWEl1ZVNrZ0t5QWtlMlJoZEdGVWVYQmxmU2gzUXlrcElDOGdKSHRrWVhSaFZIbHdaWDBvZFc1cFptOXliWE11YzNSeWFXUmxjeTU1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCa2VVTXlJRDBnS0NSN1pHRjBZVlI1Y0dWOUtHUjVRMjl5Ym1WeUxua3BJQ3NnTVM0d0lDc2dKSHRrWVhSaFZIbHdaWDBvZDBNcEtTQXZJQ1I3WkdGMFlWUjVjR1Y5S0hWdWFXWnZjbTF6TG5OMGNtbGtaWE11ZVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2QwTlFaWEp0SUQwZ2RXNXBabTl5YlhNdVptbHNkR1Z5WDJScGJYTmJNVjBnTFNBeElDMGdkME03WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZDBOUVpYSnRJRHdnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJpUkhsRFZtRnNJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQmlSSGxEVm1Gc01pQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1pIbERJRHdnTUM0d0lIeDhJR1I1UXlBK1BTQWtlMlJoZEdGVWVYQmxmU2gxYm1sbWIzSnRjeTVFZVY5emFHRndaVnN5WFNrZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1jbUZqZENoa2VVTXBJRDRnTUM0d0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHSkVlVU5XWVd3Z1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hrZVVNeUlEd2dNQzR3SUh4OElHUjVReklnUGowZ0pIdGtZWFJoVkhsd1pYMG9kVzVwWm05eWJYTXVSSGxmYzJoaGNHVmJNbDBwSUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1puSmhZM1FvWkhsRE1pa2dQaUF3TGpBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1lrUjVRMVpoYkRJZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdsa2VVTTZJSFV6TWlBOUlIVXpNaWhrZVVNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHbGtlVU15T2lCMU16SWdQU0IxTXpJb1pIbERNaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWWtSNVExWmhiQ0FtSmlCaVJIbERWbUZzTWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdaREpNWlc1bmRHZ2dQU0IxYm1sbWIzSnRjeTVFZVY5emFHRndaVnN6WFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaDJZWElnWkRJZ09uVXpNaUE5SURBN0lHUXlJRHdnWkRKTVpXNW5kR2c3SUdReUlEMGdaRElnS3lBMEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhkV1lXeDFaVEFnUFNBa2UzY3VaMlYwS0NkMU16SW9kMUpRWlhKdEtTY3NJQ2QxTXpJb2QwTlFaWEp0S1Njc0lDZGtNU2NzSUNka01pY3BmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2QxWmhiSFZsTVNBOUlDUjdkeTVuWlhRb0ozVXpNaWgzVWxCbGNtMHBKeXdnSjNVek1paDNRMUJsY20wcEp5d2dKMlF4SUNzZ01TY3NJQ2RrTWljcGZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnZDFaaGJIVmxNaUE5SUNSN2R5NW5aWFFvSjNVek1paDNVbEJsY20wcEp5d2dKM1V6TWloM1ExQmxjbTBwSnl3Z0oyUXhJQ3NnTWljc0lDZGtNaWNwZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdkMVpoYkhWbE15QTlJQ1I3ZHk1blpYUW9KM1V6TWloM1VsQmxjbTBwSnl3Z0ozVXpNaWgzUTFCbGNtMHBKeXdnSjJReElDc2dNeWNzSUNka01pY3BmVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQjRWbUZzZFdVZ1BTQWtlMlI1TG1kbGRDZ25ZbUYwWTJnbkxDQW5hV1I1VWljc0lDZHBaSGxESnl3Z0oyUXlKeWw5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQjBiWEIyWVd3Z1BTQjJaV00wUENSN1pHRjBZVlI1Y0dWOVBpaGtiM1FvZUZaaGJIVmxMQ0IzVm1Gc2RXVXdLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHOTBLSGhXWVd4MVpTd2dkMVpoYkhWbE1Ta3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSdmRDaDRWbUZzZFdVc0lIZFdZV3gxWlRJcExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrYjNRb2VGWmhiSFZsTENCM1ZtRnNkV1V6S1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHOTBVSEp2WkZzd1hTQTlJR1J2ZEZCeWIyUmJNRjBnS3lCMGJYQjJZV3c3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCNFZtRnNkV1VnUFNBZ0pIdGtlUzVuWlhRb0oySmhkR05vSnl3Z0oybGtlVkluTENBbmFXUjVRekluTENBblpESW5LWDA3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2IzUlFjbTlrV3pGZElEMGdaRzkwVUhKdlpGc3hYU0FySUhabFl6UThKSHRrWVhSaFZIbHdaWDArS0dSdmRDaDRWbUZzZFdVc0lIZFdZV3gxWlRBcExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUnZkQ2g0Vm1Gc2RXVXNJSGRXWVd4MVpURXBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1J2ZENoNFZtRnNkV1VzSUhkV1lXeDFaVElwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSdmRDaDRWbUZzZFdVc0lIZFdZV3gxWlRNcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoaVJIbERWbUZzS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQmtNa3hsYm1kMGFDQTlJSFZ1YVdadmNtMXpMa1I1WDNOb1lYQmxXeVI3WTJoaGJtNWxiRVJwYlgxZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCa01qb2dkVE15SUQwZ01Ec2daRElnUENCa01reGxibWQwYURzZ1pESWdQU0JrTWlBcklEUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2QxWmhiSFZsTUNBOUlDUjdkeTVuWlhRb0ozVXpNaWgzVWxCbGNtMHBKeXdnSjNVek1paDNRMUJsY20wcEp5d2dKMlF4Snl3Z0oyUXlKeWw5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQjNWbUZzZFdVeElEMGdKSHQzTG1kbGRDZ25kVE15S0hkU1VHVnliU2tuTENBbmRUTXlLSGREVUdWeWJTa25MQ0FuWkRFZ0t5QXhKeXdnSjJReUp5bDlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCM1ZtRnNkV1V5SUQwZ0pIdDNMbWRsZENnbmRUTXlLSGRTVUdWeWJTa25MQ0FuZFRNeUtIZERVR1Z5YlNrbkxDQW5aREVnS3lBeUp5d2dKMlF5SnlsOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0IzVm1Gc2RXVXpJRDBnSkh0M0xtZGxkQ2duZFRNeUtIZFNVR1Z5YlNrbkxDQW5kVE15S0hkRFVHVnliU2tuTENBblpERWdLeUF6Snl3Z0oyUXlKeWw5TzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSGhXWVd4MVpTQTlJQ1I3WkhrdVoyVjBLQ2RpWVhSamFDY3NJQ2RwWkhsU0p5d2dKMmxrZVVNbkxDQW5aREluS1gwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSFJ0Y0haaGJDQTlJSFpsWXpROEpIdGtZWFJoVkhsd1pYMCtLR1J2ZENoNFZtRnNkV1VzSUhkV1lXeDFaVEFwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtiM1FvZUZaaGJIVmxMQ0IzVm1Gc2RXVXhLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHOTBLSGhXWVd4MVpTd2dkMVpoYkhWbE1pa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSdmRDaDRWbUZzZFdVc0lIZFdZV3gxWlRNcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtiM1JRY205a1d6QmRJRDBnWkc5MFVISnZaRnN3WFNBcklIUnRjSFpoYkR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hpUkhsRFZtRnNNaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1pESk1aVzVuZEdnZ1BTQjFibWxtYjNKdGN5NUVlVjl6YUdGd1pWc3pYVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdaREk2SUhVek1pQTlJREE3SUdReUlEd2daREpNWlc1bmRHZzdJR1F5SUQwZ1pESWdLeUEwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSGRXWVd4MVpUQWdQU0FrZTNjdVoyVjBLQ2QxTXpJb2QxSlFaWEp0S1Njc0lDZDFNeklvZDBOUVpYSnRLU2NzSUNka01TY3NJQ2RrTWljcGZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnZDFaaGJIVmxNU0E5SUNSN2R5NW5aWFFvSjNVek1paDNVbEJsY20wcEp5d2dKM1V6TWloM1ExQmxjbTBwSnl3Z0oyUXhJQ3NnTVNjc0lDZGtNaWNwZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdkMVpoYkhWbE1pQTlJQ1I3ZHk1blpYUW9KM1V6TWloM1VsQmxjbTBwSnl3Z0ozVXpNaWgzUTFCbGNtMHBKeXdnSjJReElDc2dNaWNzSUNka01pY3BmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2QxWmhiSFZsTXlBOUlDUjdkeTVuWlhRb0ozVXpNaWgzVWxCbGNtMHBKeXdnSjNVek1paDNRMUJsY20wcEp5d2dKMlF4SUNzZ015Y3NJQ2RrTWljcGZUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCNFZtRnNkV1VnUFNBa2UyUjVMbWRsZENnblltRjBZMmduTENBbmFXUjVVaWNzSUNkcFpIbERNaWNzSUNka01pY3BmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2RHMXdkbUZzSUQwZ2RtVmpORHdrZTJSaGRHRlVlWEJsZlQ0b1pHOTBLSGhXWVd4MVpTd2dkMVpoYkhWbE1Da3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSdmRDaDRWbUZzZFdVc0lIZFdZV3gxWlRFcExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrYjNRb2VGWmhiSFZsTENCM1ZtRnNkV1V5S1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaRzkwS0hoV1lXeDFaU3dnZDFaaGJIVmxNeWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSdmRGQnliMlJiTVYwZ1BTQmtiM1JRY205a1d6RmRJQ3NnZEcxd2RtRnNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FUb2dkVE15SUQwZ01Ec2dhU0E4SUNSN2QyOXlhMUJsY2xSb2NtVmhaSDA3SUdrZ1BTQnBJQ3NnTVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hsZENCMllXeDFaU0E5SUdSdmRGQnliMlJiYVYwZ0t5QWtlMmhoYzBKcFlYTWdQeUFuWW1saGMxdGpLMmxkSnlBNklHQjJaV00wUENSN1pHRjBZVlI1Y0dWOVBpZ3dMakFwWUgwN1hHNGdJQ0FnSUNBZ0lDQWdKSHR2ZFhSd2RYUXVjMlYwS0NkaVlYUmphQ2NzSUNkeUp5d2dKMk1nS3lCcEp5d2dKMlF4Snl3Z0ozWmhiSFZsSnlsOU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlZRHRjYmlBZ0lDQWdJR052Ym5OMElHTnZaR1ZUYm1sd2NHVjBJRDBnWUZ4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0J2ZFhSd2RYUkpibVJwWTJWeklEMGdKSHR2ZFhSd2RYUXViMlptYzJWMFZHOUpibVJwWTJWektDZG5iRzlpWVd4ZmFXUjRKeWw5TzF4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0JpWVhSamFDQTlJQ1I3YjNWMGNIVjBMbWx1WkdsalpYTkhaWFFvSjI5MWRIQjFkRWx1WkdsalpYTW5MQ0F3S1gwN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUdReElEMGdKSHR2ZFhSd2RYUXVhVzVrYVdObGMwZGxkQ2duYjNWMGNIVjBTVzVrYVdObGN5Y3NJR05vWVc1dVpXeEVhVzBwZlR0Y2JpQWdJQ0FnSUNBZ0lDQnNaWFFnY2lBOUlDUjdiM1YwY0hWMExtbHVaR2xqWlhOSFpYUW9KMjkxZEhCMWRFbHVaR2xqWlhNbkxDQnliM2RFYVcwcGZUdGNiaUFnSUNBZ0lDQWdJQ0JzWlhRZ1l5QTlJQ1I3YjNWMGNIVjBMbWx1WkdsalpYTkhaWFFvSjI5MWRIQjFkRWx1WkdsalpYTW5MQ0JqYjJ4RWFXMHBmVHRjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdaSGxEYjNKdVpYSWdQU0IyWldNeVBHa3pNajRvYVRNeUtISXBMQ0JwTXpJb1l5a3BJQzBnZFc1cFptOXliWE11Y0dGa2N6dGNiaUFnSUNBZ0lDQWdJQ0JzWlhRZ1pIbFNRMjl5Ym1WeUlEMGdaSGxEYjNKdVpYSXVlRHRjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdaSGxEUTI5eWJtVnlJRDBnWkhsRGIzSnVaWEl1ZVR0Y2JpQWdJQ0FnSUNBZ0lDQnNaWFFnWjNKdmRYQkpaQ0E5SUdReElDOGdkVzVwWm05eWJYTXViM1YwY0hWMFgyTm9ZVzV1Wld4elgzQmxjbDluY205MWNEdGNiaUFnSUNBZ0lDQWdJQ0JzWlhRZ2QwOTFkRU5vWVc1dVpXd2dQU0JrTVNBdElHZHliM1Z3U1dRZ0tpQjFibWxtYjNKdGN5NXZkWFJ3ZFhSZlkyaGhibTVsYkhOZmNHVnlYMmR5YjNWd08xeHVJQ0FnSUNBZ0lDQWdJQzh2SUVOdmJuWnZiSFpsSUdSNUtEOHNJRDhzSUdReUtTQjNhWFJvSUhjb09pd2dPaXdnWkRFc0lHUXlLU0IwYnlCamIyMXdkWFJsSUdSNEtIaFNMQ0I0UXl3Z1pERXBMbHh1SUNBZ0lDQWdJQ0FnSUM4dklEOGdQU0IwYnlCaVpTQmtaWFJsY20xcGJtVmtMaUE2SUQwZ1lXTnliM056SUdGc2JDQjJZV3gxWlhNZ2FXNGdkR2hoZENCaGVHbHpMbHh1SUNBZ0lDQWdJQ0FnSUhaaGNpQmtiM1JRY205a0lEMGdKSHRrWVhSaFZIbHdaWDBvTUM0d0tUdGNiaUFnSUNBZ0lDQWdJQ0JtYjNJZ0tIWmhjaUIzVWpvZ2RUTXlJRDBnTURzZ2QxSWdQQ0IxYm1sbWIzSnRjeTVsWm1abFkzUnBkbVZmWm1sc2RHVnlYMlJwYlhNdWVEc2dkMUlnUFNCM1VpQXJJREVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoM1VpQWxJSFZ1YVdadmNtMXpMbVJwYkdGMGFXOXVjeTU0SUNFOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1pIbFNJRDBnS0NSN1pHRjBZVlI1Y0dWOUtHUjVVa052Y201bGNpa2dLeUFrZTJSaGRHRlVlWEJsZlNoM1Vpa3BJQzhnSkh0a1lYUmhWSGx3Wlgwb2RXNXBabTl5YlhNdWMzUnlhV1JsYzFzd1hTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdkMUpRWlhKdElEMGdkVzVwWm05eWJYTXVabWxzZEdWeVgyUnBiWE11ZUNBdElERWdMU0IzVWlBdklIVnVhV1p2Y20xekxtUnBiR0YwYVc5dWN5NTRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR1I1VWlBOElEQXVNQ0I4ZkNCa2VWSWdQajBnSkh0a1lYUmhWSGx3Wlgwb2RXNXBabTl5YlhNdVJIbGZjMmhoY0dWYkpIdHliM2RFYVcxOVhTa2dmSHdnWm5KaFkzUW9aSGxTS1NBK0lEQXVNQ0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhkU1VHVnliU0E4SURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYVdSNVVqb2dkVE15SUQwZ2RUTXlLR1I1VWlrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUhkRE9pQjFNeklnUFNBd095QjNReUE4SUhWdWFXWnZjbTF6TG1WbVptVmpkR2wyWlY5bWFXeDBaWEpmWkdsdGN5NTVPeUIzUXlBOUlIZERJQ3NnTVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kME1nSlNCMWJtbG1iM0p0Y3k1a2FXeGhkR2x2Ym5NdWVTQWhQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHUjVReUE5SUNna2UyUmhkR0ZVZVhCbGZTaGtlVU5EYjNKdVpYSXBJQ3NnSkh0a1lYUmhWSGx3Wlgwb2QwTXBLU0F2SUNSN1pHRjBZVlI1Y0dWOUtIVnVhV1p2Y20xekxuTjBjbWxrWlhNdWVTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0IzUTFCbGNtMGdQU0IxYm1sbWIzSnRjeTVtYVd4MFpYSmZaR2x0Y3k1NUlDMGdNU0F0SUhkRElDOGdkVzVwWm05eWJYTXVaR2xzWVhScGIyNXpMbms3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoa2VVTWdQQ0F3TGpBZ2ZId2daSGxESUQ0OUlDUjdaR0YwWVZSNWNHVjlLSFZ1YVdadmNtMXpMa1I1WDNOb1lYQmxXeVI3WTI5c1JHbHRmVjBwSUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1jbUZqZENoa2VVTXBJRDRnTUM0d0lIeDhJSGREVUdWeWJTQThJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2FXUjVRem9nZFRNeUlEMGdkVE15S0dSNVF5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJwYm5CMWRFTm9ZVzV1Wld3Z1BTQm5jbTkxY0Vsa0lDb2dkVzVwWm05eWJYTXVhVzV3ZFhSZlkyaGhibTVsYkhOZmNHVnlYMmR5YjNWd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCa01qb2dkVE15SUQwZ01Ec2daRElnUENCMWJtbG1iM0p0Y3k1cGJuQjFkRjlqYUdGdWJtVnNjMTl3WlhKZlozSnZkWEE3SUdReUlEMGdaRElnS3lBeEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhoV1lXeDFaU0E5SUNSN1hHNGdJQ0FnSUNBZ0lDQWdhWE5EYUdGdWJtVnNjMHhoYzNRZ1B5QmtlUzVuWlhRb0oySmhkR05vSnl3Z0oybGtlVkluTENBbmFXUjVReWNzSUNkcGJuQjFkRU5vWVc1dVpXd25LU0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2VTNW5aWFFvSjJKaGRHTm9KeXdnSjJsdWNIVjBRMmhoYm01bGJDY3NJQ2RwWkhsU0p5d2dKMmxrZVVNbktYMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhkV1lXeDFaU0E5SUNSN2R5NW5aWFFvSjJsdWNIVjBRMmhoYm01bGJDY3NJQ2QzVDNWMFEyaGhibTVsYkNjc0lDZDFNeklvZDFKUVpYSnRLU2NzSUNkMU16SW9kME5RWlhKdEtTY3BmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrYjNSUWNtOWtJRDBnWkc5MFVISnZaQ0FySUhoV1lXeDFaU0FxSUhkV1lXeDFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm5CMWRFTm9ZVzV1Wld3Z1BTQnBibkIxZEVOb1lXNXVaV3dnS3lBeE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJR3hsZENCMllXeDFaU0E5SUdSdmRGQnliMlFnS3lBa2UyaGhjMEpwWVhNZ1B5QW5ZbWxoYzF0a01WMG5JRG9nWUNSN1pHRjBZVlI1Y0dWOUtEQXVNQ2xnZlR0Y2JpQWdJQ0FnSUNBZ0lDQWtlMjkxZEhCMWRDNXpaWFJDZVU5bVpuTmxkQ2duWjJ4dlltRnNYMmxrZUNjc0lDZDJZV3gxWlNjcGZUdGNiaUFnSUNBZ0lDQWdZRHRjYmx4dUlDQWdJQ0FnY21WMGRYSnVJR0JjYmlBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1Y21WbmFYTjBaWEpWYm1sbWIzSnRjeWgxYm1sbWIzSnRjeWt1WkdWamJHRnlaVlpoY21saFlteGxjeWd1TGk1cGJuQjFkRlpoY21saFlteGxjeXdnYjNWMGNIVjBLWDFjYmlBZ0pIdGtaV05zWVhKbFJuVnVZM1JwYjI1emZWeHVYRzRnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1YldGcGJsTjBZWEowS0NsOVhHNGdJQ0FnSkh0emFHRmtaWEpJWld4d1pYSXVaM1ZoY21SQloyRnBibk4wVDNWMFQyWkNiM1Z1WkhOWGIzSnJaM0p2ZFhCVGFYcGxjeWduZFc1cFptOXliWE11YjNWMGNIVjBYM05wZW1VbktYMDdYRzRnSUNSN2FYTldaV00wSUQ4Z1kyOWtaVk51YVhCd1pYUTBJRG9nWTI5a1pWTnVhWEJ3WlhSOWZXQTdYRzRnSUNBZ2ZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHTnlaV0YwWlVOdmJuWlVjbUZ1YzNCdmMyVXlSRkJ5YjJkeVlXMUpibVp2SUQxY2JpQWdJQ0FvYVc1d2RYUnpPaUJ5WldGa2IyNXNlU0JVWlc1emIzSldhV1YzVzEwc0lHRjBkSEpwWW5WMFpYTTZJRU52Ym5aVWNtRnVjM0J2YzJWQmRIUnlhV0oxZEdWekxGeHVJQ0FnSUNCemNYVmxaWHBsVDNWMGNIVjBVMmhoY0dWR2RXNWpkR2x2Ymo4NklDaHphR0Z3WlRvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwcElEMCtJRzUxYldKbGNsdGRLVG9nVUhKdlozSmhiVWx1Wm04Z1BUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2FHRnpRbWxoY3lBOUlHbHVjSFYwY3k1c1pXNW5kR2dnUGlBeU8xeHVJQ0FnSUNBZ0x5OGdZMjl1YzNRZ2FYTkRhR0Z1Ym1Wc2MweGhjM1FnUFNCaGRIUnlhV0oxZEdWekxtWnZjbTFoZENBOVBUMGdKMDVJVjBNbk8xeHVJQ0FnSUNBZ1kyOXVjM1FnYjNWMGNIVjBVMmhoY0dVZ1BTQmhkSFJ5YVdKMWRHVnpMbTkxZEhCMWRGTm9ZWEJsTzF4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMFUybDZaU0E5SUZOb1lYQmxWWFJwYkM1emFYcGxLRzkxZEhCMWRGTm9ZWEJsS1R0Y2JseHVJQ0FnSUNBZ0x5OGdZMjl1YzNRZ2FXNURhR0Z1Ym1Wc2N5QTlJR2x1Y0hWMGMxc3dYUzVrYVcxelcybHpRMmhoYm01bGJITk1ZWE4wSUQ4Z015QTZJREZkTzF4dUlDQWdJQ0FnTHk4Z1ZFOUVUeUJGYm1GaWJHVWdhWE5XWldNMElHWnZjaUJ3WlhKbWIzSnRZVzVqWlZ4dUlDQWdJQ0FnTHk4Z1JHbHpZV0pzWldRZ1pIVmxJSFJ2SUhkbGFXZG9kQ0J0WVhSeWFYZ2diR0Y1YjNWMElHbHpjM1ZsWEc0Z0lDQWdJQ0F2THlCamIyNXpkQ0JwYzFabFl6UWdQU0JoZEhSeWFXSjFkR1Z6TG1keWIzVndJRDA5UFNBeElDWW1JR2x6UTJoaGJtNWxiSE5NWVhOMElDWW1JR2x1UTJoaGJtNWxiSE1nSlNBMElEMDlQU0F3SUNZbUlHOTFkRU5vWVc1dVpXeHpJQ1VnTkNBOVBUMGdNRHRjYmlBZ0lDQWdJR052Ym5OMElHUnBjM0JoZEdOb0lEMGdXMXh1SUNBZ0lDQWdJQ0JOWVhSb0xtTmxhV3dvYjNWMGNIVjBVMmw2WlNBdklEWTBLU3hjYmlBZ0lDQWdJQ0FnTVN4Y2JpQWdJQ0FnSUNBZ01TeGNiaUFnSUNBZ0lGMDdYRzRnSUNBZ0lDQk1UMGRmUkVWQ1ZVY29KM1psY21KdmMyVW5MQ0FvS1NBOVBpQmdXMk52Ym5ZeVpGOWlZV05yY0hKdmNGOTNaV0puY0hWZElHUnBjM0JoZEdOb0lEMGdKSHRrYVhOd1lYUmphSDFnS1R0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnYVhORGFHRnVibVZzYzB4aGMzUWdQU0JoZEhSeWFXSjFkR1Z6TG1admNtMWhkQ0E5UFQwZ0owNUlWME1uTzF4dUlDQWdJQ0FnWTI5dWMzUWdhVzV3ZFhSRVpYQmxibVJsYm1OcFpYTTZJRkJ5YjJkeVlXMUpibkIxZEZSbGJuTnZja2x1Wm05RVpYQmxibVJsYm1ONVcxMGdQU0JiSjNKaGJtc25MQ0FuY21GdWF5ZGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ2MzUnlhV1JsY3lBOUlGdGhkSFJ5YVdKMWRHVnpMbk4wY21sa1pYTmJNRjBzSUdGMGRISnBZblYwWlhNdWMzUnlhV1JsYzFzeFhWMDdYRzRnSUNBZ0lDQmpiMjV6ZENCbWFXeDBaWEpFYVcxeklEMWNiaUFnSUNBZ0lDQWdJQ0JiWVhSMGNtbGlkWFJsY3k1clpYSnVaV3hUYUdGd1pWdHBjME5vWVc1dVpXeHpUR0Z6ZENBL0lERWdPaUF5WFN3Z1lYUjBjbWxpZFhSbGN5NXJaWEp1Wld4VGFHRndaVnRwYzBOb1lXNXVaV3h6VEdGemRDQS9JRElnT2lBelhWMDdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FXeGhkR2x2Ym5NZ1BTQmJZWFIwY21saWRYUmxjeTVrYVd4aGRHbHZibk5iTUYwc0lHRjBkSEpwWW5WMFpYTXVaR2xzWVhScGIyNXpXekZkWFR0Y2JpQWdJQ0FnSUdOdmJuTjBJR1ZtWm1WamRHbDJaVVpwYkhSbGNrUnBiWE1nUFNCYlhHNGdJQ0FnSUNBZ0lHWnBiSFJsY2tScGJYTmJNRjBnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdLR0YwZEhKcFluVjBaWE11Wkdsc1lYUnBiMjV6V3pCZElEdzlJREVnUDF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBd0lEcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdLR0YwZEhKcFluVjBaWE11YTJWeWJtVnNVMmhoY0dWYmFYTkRhR0Z1Ym1Wc2MweGhjM1FnUHlBeElEb2dNbDBnTFNBeEtTQXFJQ2hoZEhSeWFXSjFkR1Z6TG1ScGJHRjBhVzl1YzFzd1hTQXRJREVwS1N4Y2JpQWdJQ0FnSUNBZ1ptbHNkR1Z5UkdsdGMxc3hYU0FyWEc0Z0lDQWdJQ0FnSUNBZ0lDQW9ZWFIwY21saWRYUmxjeTVrYVd4aGRHbHZibk5iTVYwZ1BEMGdNU0EvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURBZ09seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW9ZWFIwY21saWRYUmxjeTVyWlhKdVpXeFRhR0Z3WlZ0cGMwTm9ZVzV1Wld4elRHRnpkQ0EvSURJZ09pQXpYU0F0SURFcElDb2dLR0YwZEhKcFluVjBaWE11Wkdsc1lYUnBiMjV6V3pGZElDMGdNU2twWEc0Z0lDQWdJQ0JkTzF4dUlDQWdJQ0FnWTI5dWMzUWdjR0ZrY3lBOUlGdGNiaUFnSUNBZ0lDQWdaV1ptWldOMGFYWmxSbWxzZEdWeVJHbHRjMXN3WFNBdElERWdMU0JOWVhSb0xtWnNiMjl5S0NoaGRIUnlhV0oxZEdWekxuQmhaSE5iTUYwZ0t5QmhkSFJ5YVdKMWRHVnpMbkJoWkhOYk1sMHBJQzhnTWlrc1hHNGdJQ0FnSUNBZ0lHVm1abVZqZEdsMlpVWnBiSFJsY2tScGJYTmJNVjBnTFNBeElDMGdUV0YwYUM1bWJHOXZjaWhoZEhSeWFXSjFkR1Z6TG5CaFpITmJNVjBnS3lCaGRIUnlhV0oxZEdWekxuQmhaSE5iTTEwcElDOGdNbHh1SUNBZ0lDQWdYVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdhWE5XWldNMElEMGdabUZzYzJVN1hHNGdJQ0FnSUNCamIyNXpkQ0JuY205MWNDQTlJR0YwZEhKcFluVjBaWE11WjNKdmRYQTdYRzRnSUNBZ0lDQmpiMjV6ZENCM1UyaGhjR1VnUFNCcGJuQjFkSE5iTVYwdVpHbHRjenRjYmlBZ0lDQWdJR052Ym5OMElHbHVjSFYwUTJoaGJtNWxiSE5RWlhKSGNtOTFjQ0E5SUhkVGFHRndaVnN3WFNBdklHZHliM1Z3TzF4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMFEyaGhibTVsYkhOUVpYSkhjbTkxY0NBOUlIZFRhR0Z3WlZzeFhUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2NISnZaM0poYlZWdWFXWnZjbTF6T2lCUWNtOW5jbUZ0Vlc1cFptOXliVnRkSUQwZ1cxeHVJQ0FnSUNBZ0lDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJ2ZFhSd2RYUlRhWHBsZlN3Z2UzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2djM1J5YVdSbGMzMHNYRzRnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUdacGJIUmxja1JwYlhOOUxDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJrYVd4aGRHbHZibk45TEZ4dUlDQWdJQ0FnSUNCN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQmxabVpsWTNScGRtVkdhV3gwWlhKRWFXMXpmU3dnZTNSNWNHVTZJRVJoZEdGVWVYQmxMbWx1ZERNeUxDQmtZWFJoT2lCd1lXUnpmU3hjYmlBZ0lDQWdJQ0FnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2FXNXdkWFJEYUdGdWJtVnNjMUJsY2tkeWIzVndmU3dnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2IzVjBjSFYwUTJoaGJtNWxiSE5RWlhKSGNtOTFjSDBzWEc0Z0lDQWdJQ0FnSUM0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHbHVjSFYwYzFzd1hTNWthVzF6TENCcGJuQjFkSE5iTVYwdVpHbHRjeWxjYmlBZ0lDQWdJRjA3WEc0Z0lDQWdJQ0JwWmlBb2FHRnpRbWxoY3lrZ2UxeHVJQ0FnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNdWNIVnphQ2d1TGk1amNtVmhkR1ZVWlc1emIzSlRhR0Z3WlZaaGNtbGhZbXhsY3locGJuQjFkSE5iTWwwdVpHbHRjeWtwTzF4dUlDQWdJQ0FnSUNCcGJuQjFkRVJsY0dWdVpHVnVZMmxsY3k1d2RYTm9LQ2R5WVc1ckp5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNdWNIVnphQ2d1TGk1amNtVmhkR1ZVWlc1emIzSlRhR0Z3WlZaaGNtbGhZbXhsY3lodmRYUndkWFJUYUdGd1pTa3BPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQnBjekZFYVcxbGJuTnBiMjVFYVhOd1lYUmphQ0E5SUdScGMzQmhkR05vV3pGZElEMDlQU0F4SUNZbUlHUnBjM0JoZEdOb1d6SmRJRDA5UFNBeE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxJRDBnS0hOb1lXUmxja2hsYkhCbGNqb2dVMmhoWkdWeVNHVnNjR1Z5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElIVnVhV1p2Y20xek9pQlZibWxtYjNKdGMwRnljbUY1Vkhsd1pTQTlJRnRjYmlBZ0lDQWdJQ0FnSUNCN2JtRnRaVG9nSjI5MWRIQjFkRjl6YVhwbEp5d2dkSGx3WlRvZ0ozVXpNaWQ5TENCN2JtRnRaVG9nSjNOMGNtbGtaWE1uTENCMGVYQmxPaUFuZFRNeUp5d2diR1Z1WjNSb09pQnpkSEpwWkdWekxteGxibWQwYUgwc1hHNGdJQ0FnSUNBZ0lDQWdlMjVoYldVNklDZG1hV3gwWlhKZlpHbHRjeWNzSUhSNWNHVTZJQ2QxTXpJbkxDQnNaVzVuZEdnNklHWnBiSFJsY2tScGJYTXViR1Z1WjNSb2ZTeGNiaUFnSUNBZ0lDQWdJQ0I3Ym1GdFpUb2dKMlJwYkdGMGFXOXVjeWNzSUhSNWNHVTZJQ2QxTXpJbkxDQnNaVzVuZEdnNklHWnBiSFJsY2tScGJYTXViR1Z1WjNSb2ZTeGNiaUFnSUNBZ0lDQWdJQ0I3Ym1GdFpUb2dKMlZtWm1WamRHbDJaVjltYVd4MFpYSmZaR2x0Y3ljc0lIUjVjR1U2SUNkMU16SW5MQ0JzWlc1bmRHZzZJR1ZtWm1WamRHbDJaVVpwYkhSbGNrUnBiWE11YkdWdVozUm9mU3hjYmlBZ0lDQWdJQ0FnSUNCN2JtRnRaVG9nSjNCaFpITW5MQ0IwZVhCbE9pQW5hVE15Snl3Z2JHVnVaM1JvT2lCd1lXUnpMbXhsYm1kMGFIMHNJSHR1WVcxbE9pQW5hVzV3ZFhSZlkyaGhibTVsYkhOZmNHVnlYMmR5YjNWd0p5d2dkSGx3WlRvZ0ozVXpNaWQ5TEZ4dUlDQWdJQ0FnSUNBZ0lIdHVZVzFsT2lBbmIzVjBjSFYwWDJOb1lXNXVaV3h6WDNCbGNsOW5jbTkxY0Njc0lIUjVjR1U2SUNkMU16SW5mVnh1SUNBZ0lDQWdJQ0JkTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JrWVhSaFZIbHdaU0E5SUhSbGJuTnZjbFI1Y0dWVWIxZHpaMnhUZEc5eVlXZGxWSGx3WlNocGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lDUjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamNtVmhkR1ZEYjI1MlZISmhibk53YjNObE1rUlBjRkJ5YjJkeVlXMVRhR0ZrWlhKVGIzVnlZMlVvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJoaFpHVnlTR1ZzY0dWeUxDQnBibkIxZEhNc0lHOTFkSEIxZEZOb1lYQmxMQ0JvWVhOQ2FXRnpMQ0JwY3pGRWFXMWxibk5wYjI1RWFYTndZWFJqYUN3Z2FYTldaV00wTENCa1lYUmhWSGx3WlN3Z2RXNXBabTl5YlhNc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FYTkRhR0Z1Ym1Wc2MweGhjM1FwZldBN1hHNGdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ2JtRnRaVG9nSjBOdmJuWlVjbUZ1YzNCdmMyVXlSQ2NzWEc0Z0lDQWdJQ0FnSUhOb1lXUmxja05oWTJobE9pQjdhR2x1ZERvZ1lDUjdZWFIwY21saWRYUmxjeTVqWVdOb1pVdGxlWDA3WUN3Z2FXNXdkWFJFWlhCbGJtUmxibU5wWlhOOUxGeHVJQ0FnSUNBZ0lDQm5aWFJTZFc1RVlYUmhPaUFvS1NBOVBpQW9lMXh1SUNBZ0lDQWdJQ0FnSUdScGMzQmhkR05vUjNKdmRYQTZJSHQ0T2lCa2FYTndZWFJqYUZzd1hTd2dlVG9nWkdsemNHRjBZMmhiTVYwc0lIbzZJR1JwYzNCaGRHTm9XekpkZlN4Y2JpQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSek9pQmJlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pHbHRjem9nYzNGMVpXVjZaVTkxZEhCMWRGTm9ZWEJsUm5WdVkzUnBiMjRnUHlCemNYVmxaWHBsVDNWMGNIVjBVMmhoY0dWR2RXNWpkR2x2YmlodmRYUndkWFJUYUdGd1pTa2dPaUJ2ZFhSd2RYUlRhR0Z3WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1JoZEdGVWVYQmxPaUJwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1ZjYmlBZ0lDQWdJQ0FnSUNCOVhTeGNiaUFnSUNBZ0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTmNiaUFnSUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0FnSUdkbGRGTm9ZV1JsY2xOdmRYSmpaVnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlPMXh1SWl3Z0lpOHZJRU52Y0hseWFXZG9kQ0FvWXlrZ1RXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUx5OGdUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRTFKVkNCTWFXTmxibk5sTGx4dVhHNXBiWEJ2Y25RZ2UxUmxibk52Y2xacFpYZDlJR1p5YjIwZ0p5NHVMeTR1TDNSbGJuTnZjaTEyYVdWM0p6dGNibWx0Y0c5eWRDQjdRMjl0Y0hWMFpVTnZiblJsZUhSOUlHWnliMjBnSnk0dUwzUjVjR1Z6Snp0Y2JseHVhVzF3YjNKMElIdGpjbVZoZEdWRGIyNTJNa1JVY21GdWMzQnZjMlZOWVhSTmRXeFFjbTluY21GdFNXNW1iMzBnWm5KdmJTQW5MaTh6Y21RdGNHRnlkSGt2WTI5dWRsOWlZV05yY0hKdmNGOXRiVjkzWldKbmNIVW5PMXh1YVcxd2IzSjBJSHRqY21WaGRHVkRiMjUyVkhKaGJuTndiM05sTWtSUWNtOW5jbUZ0U1c1bWIzMGdabkp2YlNBbkxpOHpjbVF0Y0dGeWRIa3ZZMjl1ZGw5aVlXTnJjSEp2Y0Y5M1pXSm5jSFVuTzF4dWFXMXdiM0owSUh0RGIyNTJRWFIwY21saWRYUmxjMzBnWm5KdmJTQW5MaTlqYjI1Mkp6dGNibWx0Y0c5eWRDQjdjR0Z5YzJWSmJuUmxjbTVoYkVGamRHbDJZWFJwYjI1QmRIUnlhV0oxZEdWemZTQm1jbTl0SUNjdUwyWjFjMlV0ZFhScGJITW5PMXh1YVcxd2IzSjBJSHRqY21WaGRHVlVjbUZ1YzNCdmMyVlFjbTluY21GdFNXNW1iMzBnWm5KdmJTQW5MaTkwY21GdWMzQnZjMlVuTzF4dVhHNWpiMjV6ZENCamIyMXdkWFJsVkc5MFlXeFFZV1FnUFZ4dUlDQWdJQ2hwYmtScGJUb2diblZ0WW1WeUxDQnpkSEpwWkdVNklHNTFiV0psY2l3Z1lXUnFPaUJ1ZFcxaVpYSXNJR3RsY201bGJEb2diblZ0WW1WeUxDQmthV3hoZEdsdmJqb2diblZ0WW1WeUxDQnZkWFJUYVhwbE9pQnVkVzFpWlhJcElEMCtYRzRnSUNBZ0lDQWdJQ2hwYmtScGJTQXRJREVwSUNvZ2MzUnlhV1JsSUNzZ1lXUnFJQ3NnS0d0bGNtNWxiQ0F0SURFcElDb2daR2xzWVhScGIyNGdLeUF4SUMwZ2IzVjBVMmw2WlR0Y2JseHVZMjl1YzNRZ1pHbHpkSEpwWW5WMFpWQmhaR1JwYm1jZ1BTQW9kRzkwWVd4UVlXUTZJRzUxYldKbGNpd2dZWFYwYjFCaFpEb2djM1J5YVc1bkxDQndZV1J6T2lCdWRXMWlaWEpiWFN3Z2FHVmhaRG9nYm5WdFltVnlMQ0IwWVdsc09pQnVkVzFpWlhJcElEMCtJSHRjYmlBZ1kyOXVjM1FnYzIxaGJHeFFZV1FnUFNCTllYUm9MbVpzYjI5eUtIUnZkR0ZzVUdGa0lDOGdNaWs3WEc0Z0lHbG1JQ2hoZFhSdlVHRmtJRDA5UFNBblUwRk5SVjlWVUZCRlVpY3BJSHRjYmlBZ0lDQndZV1J6VzJobFlXUmRJRDBnYzIxaGJHeFFZV1E3WEc0Z0lDQWdjR0ZrYzF0MFlXbHNYU0E5SUhSdmRHRnNVR0ZrSUMwZ2MyMWhiR3hRWVdRN1hHNGdJSDBnWld4elpTQnBaaUFvWVhWMGIxQmhaQ0E5UFQwZ0oxTkJUVVZmVEU5WFJWSW5LU0I3WEc0Z0lDQWdjR0ZrYzF0b1pXRmtYU0E5SUhSdmRHRnNVR0ZrSUMwZ2MyMWhiR3hRWVdRN1hHNGdJQ0FnY0dGa2MxdDBZV2xzWFNBOUlITnRZV3hzVUdGa08xeHVJQ0I5WEc1OU8xeHVYRzVqYjI1emRDQmpZV3hqZFd4aGRHVlBkWFJ3ZFhSVGFHRndaVUZ1WkZCaFpITWdQVnh1SUNBZ0lDaHBibkIxZEZOb1lYQmxPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnYTJWeWJtVnNVMmhoY0dVNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZExDQmthV3hoZEdsdmJuTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0JoZFhSdlVHRmtPaUJ6ZEhKcGJtY3NYRzRnSUNBZ0lHZHliM1Z3T2lCdWRXMWlaWElzSUhCaFpITTZJRzUxYldKbGNsdGRMQ0J6ZEhKcFpHVnpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnYVhORGFHRnVibVZzVEdGemREb2dZbTl2YkdWaGJpd2diM1YwY0hWMFVHRmtaR2x1WnpvZ2JuVnRZbVZ5VzEwc1hHNGdJQ0FnSUc5MWRIQjFkRk5vWVhCbE9pQnVkVzFpWlhKYlhTa2dQVDRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjM0JoZEdsaGJGSmhibXNnUFNCcGJuQjFkRk5vWVhCbExteGxibWQwYUNBdElESTdYRzRnSUNBZ0lDQmpiMjV6ZENCMWNHUmhkR1ZQZFhSd2RYUlRhR0Z3WlNBOUlHOTFkSEIxZEZOb1lYQmxMbXhsYm1kMGFDQTlQVDBnTUR0Y2JpQWdJQ0FnSUdsbUlDaHZkWFJ3ZFhSUVlXUmthVzVuTG14bGJtZDBhQ0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhOd1lYUnBZV3hTWVc1ck95QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSUVlXUmthVzVuTG5CMWMyZ29NQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdOdmJuTjBJR0poZEdOb1UybDZaU0E5SUdsdWNIVjBVMmhoY0dWYk1GMDdYRzRnSUNBZ0lDQmpiMjV6ZENCdmRYUkRhR0Z1Ym1Wc2N5QTlJR3RsY201bGJGTm9ZWEJsVzJselEyaGhibTVsYkV4aGMzUWdQeUF6SURvZ01WMGdLaUJuY205MWNEdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3TENCcUlEMGdhVzV3ZFhSVGFHRndaUzVzWlc1bmRHZ2dMU0J6Y0dGMGFXRnNVbUZ1YXlBdElDaHBjME5vWVc1dVpXeE1ZWE4wSUQ4Z01TQTZJREFwT3lCcElEd2djM0JoZEdsaGJGSmhibXM3SUNzcmFTd2dLeXRxS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdsdVUybDZaU0E5SUdsdWNIVjBVMmhoY0dWYmFsMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElHOTFkRk5wZW1VZ1BTQjFjR1JoZEdWUGRYUndkWFJUYUdGd1pTQS9JR2x1VTJsNlpTQXFJSE4wY21sa1pYTmJhVjBnT2lCdmRYUndkWFJUYUdGd1pWdHBYVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdkRzkwWVd4UVlXUWdQU0JqYjIxd2RYUmxWRzkwWVd4UVlXUW9hVzVUYVhwbExDQnpkSEpwWkdWelcybGRMQ0J3WVdSelcybGRMQ0JyWlhKdVpXeFRhR0Z3WlZ0cVhTd2daR2xzWVhScGIyNXpXMmxkTENCdmRYUlRhWHBsS1R0Y2JpQWdJQ0FnSUNBZ1pHbHpkSEpwWW5WMFpWQmhaR1JwYm1jb2RHOTBZV3hRWVdRc0lHRjFkRzlRWVdRc0lIQmhaSE1zSUdrc0lHa2dLeUJ6Y0dGMGFXRnNVbUZ1YXlrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gxY0dSaGRHVlBkWFJ3ZFhSVGFHRndaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHOTFkSEIxZEZOb1lYQmxMbkIxYzJnb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMGNtbGtaWE5iYVYwZ0tpQW9hVzVUYVhwbElDMGdNU2tnS3lCdmRYUndkWFJRWVdSa2FXNW5XMmxkSUNzZ0tHdGxjbTVsYkZOb1lYQmxXMnBkSUMwZ01Ta2dLaUJrYVd4aGRHbHZibk5iYVYwZ0t5QXhJQzBnY0dGa2MxdHBYU0F0WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoWkhOYmFTQXJJSE53WVhScFlXeFNZVzVyWFNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHOTFkSEIxZEZOb1lYQmxMbk53YkdsalpTZ3dMQ0F3TENCaVlYUmphRk5wZW1VcE8xeHVJQ0FnSUNBZ2IzVjBjSFYwVTJoaGNHVXVjM0JzYVdObEtHbHpRMmhoYm01bGJFeGhjM1FnUHlBeklEb2dNU3dnTUN3Z2IzVjBRMmhoYm01bGJITXBPMXh1SUNBZ0lIMDdYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnUTI5dWRsUnlZVzV6Y0c5elpVRjBkSEpwWW5WMFpYTWdaWGgwWlc1a2N5QkRiMjUyUVhSMGNtbGlkWFJsY3lCN1hHNGdJSEpsWVdSdmJteDVJRzkxZEhCMWRGQmhaR1JwYm1jNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZE8xeHVJQ0J5WldGa2IyNXNlU0J2ZFhSd2RYUlRhR0Z3WlRvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwN1hHNTlYRzVjYm1OdmJuTjBJR2RsZEVGa2FuVnpkR1ZrUTI5dWRsUnlZVzV6Y0c5elpVRjBkSEpwWW5WMFpYTWdQVnh1SUNBZ0lEeFVJR1Y0ZEdWdVpITWdRMjl1ZGxSeVlXNXpjRzl6WlVGMGRISnBZblYwWlhNK0tHRjBkSEpwWW5WMFpYTTZJRlFzSUdsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZEtUb2dWQ0E5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0JyWlhKdVpXeFRhR0Z3WlNBOUlHRjBkSEpwWW5WMFpYTXVhMlZ5Ym1Wc1UyaGhjR1V1YzJ4cFkyVW9LVHRjYmlBZ0lDQWdJQzh2SUdsbUlHdGxjbTVsYkZOb1lYQmxJR2x6SUc1dmRDQnpjR1ZqYVdacFpXUWdhVzRnZEdobElHRjBkSEpwWW5WMFpYTWdiMllnZEdocGN5QnZjQ3dnYVc1bVpYSWdhWFFnWm5KdmJTQjBhR1VnZDJWcFoyaDBJSFJsYm5OdmNpQmthVzF6WEc0Z0lDQWdJQ0JwWmlBb1lYUjBjbWxpZFhSbGN5NXJaWEp1Wld4VGFHRndaUzVzWlc1bmRHZ2dQVDA5SURBZ2ZId2dZWFIwY21saWRYUmxjeTVyWlhKdVpXeFRhR0Z3WlM1eVpXUjFZMlVvS0dFc0lHSXBJRDArSUdFZ0tpQmlMQ0F4S1NBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNCclpYSnVaV3hUYUdGd1pTNXNaVzVuZEdnZ1BTQXdPMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01qc2dhU0E4SUdsdWNIVjBjMXN4WFM1a2FXMXpMbXhsYm1kMGFEc2dLeXRwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdhMlZ5Ym1Wc1UyaGhjR1V1Y0hWemFDaHBibkIxZEhOYk1WMHVaR2x0YzF0cFhTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR052Ym5OMElHbHpRMmhoYm01bGJITk1ZWE4wSUQwZ1lYUjBjbWxpZFhSbGN5NW1iM0p0WVhRZ1BUMDlJQ2RPU0ZkREp6dGNiaUFnSUNBZ0lHdGxjbTVsYkZOb1lYQmxMbk53YkdsalpTZ3dMQ0F3TENCcGJuQjFkSE5iTVYwdVpHbHRjMXN3WFNrN1hHNGdJQ0FnSUNCclpYSnVaV3hUYUdGd1pTNXpjR3hwWTJVb2FYTkRhR0Z1Ym1Wc2MweGhjM1FnUHlBeklEb2dNU3dnTUN3Z2FXNXdkWFJ6V3pGZExtUnBiWE5iTVYwcE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCd1lXUnpJRDBnWVhSMGNtbGlkWFJsY3k1d1lXUnpMbk5zYVdObEtDazdYRzRnSUNBZ0lDQmpiMjV6ZENCdmRYUndkWFJUYUdGd1pTQTlJR0YwZEhKcFluVjBaWE11YjNWMGNIVjBVMmhoY0dVdWMyeHBZMlVvS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJRzkxZEhCMWRGQmhaR1JwYm1jZ1BTQmhkSFJ5YVdKMWRHVnpMbTkxZEhCMWRGQmhaR1JwYm1jdWMyeHBZMlVvS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMFUyaGhjR1VnUFNCcGJuQjFkSE5iTUYwdVpHbHRjenRjYmlBZ0lDQWdJR3hsZENCa2FXeGhkR2x2Ym5NZ1BTQmhkSFJ5YVdKMWRHVnpMbVJwYkdGMGFXOXVjeTV6YkdsalpTZ3BPMXh1SUNBZ0lDQWdhV1lnS0dScGJHRjBhVzl1Y3k1eVpXUjFZMlVvS0dFc0lHSXBJRDArSUdFZ0t5QmlMQ0F3S1NBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J6Y0dGMGFXRnNVbUZ1YXlBOUlHbHVjSFYwYzFzd1hTNWthVzF6TG14bGJtZDBhQ0F0SURJN1hHNGdJQ0FnSUNBZ0lHUnBiR0YwYVc5dWN5QTlJRzVsZHlCQmNuSmhlU2h6Y0dGMGFXRnNVbUZ1YXlrdVptbHNiQ2d4S1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUd4bGRDQnpkSEpwWkdWeklEMGdZWFIwY21saWRYUmxjeTV6ZEhKcFpHVnpMbk5zYVdObEtDazdYRzRnSUNBZ0lDQnBaaUFvYzNSeWFXUmxjeTV5WldSMVkyVW9LR0VzSUdJcElEMCtJR0VnS3lCaUxDQXdLU0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpjR0YwYVdGc1VtRnVheUE5SUdsdWNIVjBjMXN3WFM1a2FXMXpMbXhsYm1kMGFDQXRJREk3WEc0Z0lDQWdJQ0FnSUhOMGNtbGtaWE1nUFNCdVpYY2dRWEp5WVhrb2MzQmhkR2xoYkZKaGJtc3BMbVpwYkd3b01TazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQXZMeUJKWmlCdmRYUndkWFJUYUdGd1pTQnBjeUJ1YjNRZ2MzQmxZMmxtYVdWa0lHbHVJSFJvWlNCaGRIUnlhV0oxZEdWeklHOW1JSFJvYVhNZ2IzQXNJR2x1Wm1WeUlHbDBJR1p5YjIwZ2RHaGxJSEJoY21GdFpYUmxjbk5jYmlBZ0lDQWdJQzh2SUZOcGJXbHNZWEpzZVN3Z1lYVjBiMjFoZEdsallXeHNlU0JwYm1abGNpQndZV1J6SUdsbUlHNXZkQ0J6Y0dWamFXWnBaV1JjYmlBZ0lDQWdJR05oYkdOMWJHRjBaVTkxZEhCMWRGTm9ZWEJsUVc1a1VHRmtjeWhjYmlBZ0lDQWdJQ0FnSUNCcGJuQjFkRk5vWVhCbExDQnJaWEp1Wld4VGFHRndaU3dnWkdsc1lYUnBiMjV6TENCaGRIUnlhV0oxZEdWekxtRjFkRzlRWVdRc0lHRjBkSEpwWW5WMFpYTXVaM0p2ZFhBc0lIQmhaSE1zSUhOMGNtbGtaWE1zSUdselEyaGhibTVsYkhOTVlYTjBMRnh1SUNBZ0lDQWdJQ0FnSUc5MWRIQjFkRkJoWkdScGJtY3NJRzkxZEhCMWRGTm9ZWEJsS1R0Y2JseHVJQ0FnSUNBZ0x5OGdZV3gzWVhseklISmxkSFZ5YmlCaElHNWxkeUJ2WW1wbFkzUWdjMjhnWkc5bGN5QnViM1FnYlc5a2FXWjVJSFJvWlNCdmNtbG5hVzVoYkNCaGRIUnlhV0oxZEdWelhHNGdJQ0FnSUNCamIyNXpkQ0J1WlhkQmRIUnlhV0oxZEdWek9pQlVJRDBnVDJKcVpXTjBMbUZ6YzJsbmJpaDdmU3dnWVhSMGNtbGlkWFJsY3lrN1hHNGdJQ0FnSUNCUFltcGxZM1F1WVhOemFXZHVLRzVsZDBGMGRISnBZblYwWlhNc0lIdHJaWEp1Wld4VGFHRndaU3dnY0dGa2N5d2diM1YwY0hWMFVHRmtaR2x1Wnl3Z2IzVjBjSFYwVTJoaGNHVXNJR1JwYkdGMGFXOXVjeXdnYzNSeWFXUmxjMzBwTzF4dUlDQWdJQ0FnY21WMGRYSnVJRzVsZDBGMGRISnBZblYwWlhNN1hHNGdJQ0FnZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUhCaGNuTmxRMjl1ZGxSeVlXNXpjRzl6WlVGMGRISnBZblYwWlhNZ1BTQW9ZWFIwY21saWRYUmxjem9nVW1WamIzSmtQSE4wY21sdVp5d2dkVzVyYm05M2JqNHBPaUJEYjI1MlZISmhibk53YjNObFFYUjBjbWxpZFhSbGN5QTlQaUI3WEc0Z0lHTnZibk4wSUdGamRHbDJZWFJwYjI1QmRIUnlhV0oxZEdWeklEMGdjR0Z5YzJWSmJuUmxjbTVoYkVGamRHbDJZWFJwYjI1QmRIUnlhV0oxZEdWektHRjBkSEpwWW5WMFpYTXBPMXh1SUNBdkx5QlVUMFJQSURvZ1RXRnJaU0IwYUdseklHZGxibVZ5YVdNZ1pXNXZkV2RvSUhSdklHTnZiWEIxZEdVZ1pHVm1ZWFZzZENCaGRIUnlhV0oxZEdWeklHWnZjaUJ0ZFd4MGFTMWthVzFsYm5OcGIyNWhiQ0JqYjI1MlhHNGdJR052Ym5OMElHWnZjbTFoZENBOUlHRjBkSEpwWW5WMFpYTXVabTl5YldGMElHRnpJQ2RPU0ZkREp5QjhJQ2RPUTBoWEp6dGNiaUFnWTI5dWMzUWdZWFYwYjFCaFpDQTlYRzRnSUNBZ0lDQmJKMDVQVkZORlZDY3NJQ2RXUVV4SlJDY3NJQ2RUUVUxRlgxVlFVRVZTSnl4Y2JpQWdJQ0FnSUNBblUwRk5SVjlNVDFkRlVpZGRXM1I1Y0dWdlppQmhkSFJ5YVdKMWRHVnpMbUYxZEc5UVlXUWdQVDBnSjNWdVpHVm1hVzVsWkNjZ1B5QXdJRG9nWVhSMGNtbGlkWFJsY3k1aGRYUnZVR0ZrSUdGeklHNTFiV0psY2wwN1hHNGdJR052Ym5OMElHUnBiR0YwYVc5dWN5QTlJR0YwZEhKcFluVjBaWE11Wkdsc1lYUnBiMjV6SUdGeklGdHVkVzFpWlhJc0lHNTFiV0psY2wwN1hHNGdJR052Ym5OMElHZHliM1Z3SUQwZ1lYUjBjbWxpZFhSbGN5NW5jbTkxY0NCaGN5QnVkVzFpWlhJN1hHNGdJR052Ym5OMElHdGxjbTVsYkZOb1lYQmxJRDBnWVhSMGNtbGlkWFJsY3k1clpYSnVaV3hUYUdGd1pTQmhjeUJiYm5WdFltVnlMQ0J1ZFcxaVpYSmRPMXh1SUNCamIyNXpkQ0J3WVdSeklEMGdZWFIwY21saWRYUmxjeTV3WVdSeklHRnpJRnR1ZFcxaVpYSXNJRzUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhKZE8xeHVJQ0JqYjI1emRDQnpkSEpwWkdWeklEMGdZWFIwY21saWRYUmxjeTV6ZEhKcFpHVnpJR0Z6SUZ0dWRXMWlaWElzSUc1MWJXSmxjbDA3WEc0Z0lHTnZibk4wSUhkSmMwTnZibk4wSUQwZ0tHRjBkSEpwWW5WMFpYTXVkMGx6UTI5dWMzUWdZWE1nS0NrZ1BUNGdZbTl2YkdWaGJpa29LVHRjYmlBZ1kyOXVjM1FnYjNWMGNIVjBVR0ZrWkdsdVp5QTlJR0YwZEhKcFluVjBaWE11YjNWMGNIVjBVR0ZrWkdsdVp5QmhjeUJiYm5WdFltVnlMQ0J1ZFcxaVpYSXNJRzUxYldKbGNpd2diblZ0WW1WeVhUdGNiaUFnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1VnUFNCaGRIUnlhV0oxZEdWekxtOTFkSEIxZEZOb1lYQmxJR0Z6SUZ0dWRXMWlaWElzSUc1MWJXSmxjbDA3WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnWVhWMGIxQmhaQ3hjYmlBZ0lDQm1iM0p0WVhRc1hHNGdJQ0FnWkdsc1lYUnBiMjV6TEZ4dUlDQWdJR2R5YjNWd0xGeHVJQ0FnSUd0bGNtNWxiRk5vWVhCbExGeHVJQ0FnSUc5MWRIQjFkRkJoWkdScGJtY3NYRzRnSUNBZ2IzVjBjSFYwVTJoaGNHVXNYRzRnSUNBZ2NHRmtjeXhjYmlBZ0lDQnpkSEpwWkdWekxGeHVJQ0FnSUhkSmMwTnZibk4wTEZ4dUlDQWdJQzR1TG1GamRHbDJZWFJwYjI1QmRIUnlhV0oxZEdWekxGeHVJQ0FnSUdOaFkyaGxTMlY1T2lCZ0pIdGhkSFJ5YVdKMWRHVnpMbVp2Y20xaGRIMDdKSHRoWTNScGRtRjBhVzl1UVhSMGNtbGlkWFJsY3k1aFkzUnBkbUYwYVc5dWZUdGdYRzRnSUgwN1hHNTlPMXh1WEc1amIyNXpkQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5QTlJQ2hwYm5CMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFN3Z1lYUjBjbWxpZFhSbGN6b2dRMjl1ZGxSeVlXNXpjRzl6WlVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnTHk4Z1VtVm1aWElnZEc4Z2RHaGxJR0psYkc5M0lHeHBibXNnWm05eUlHRnNiQ0JwYm5CMWRDQmphR1ZqYTNOY2JpQWdMeThnYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDI5dWJuZ3ZiMjV1ZUM5aWJHOWlMMjFoYVc0dlpHOWpjeTlQY0dWeVlYUnZjbk11YldRalEyOXVkbFJ5WVc1emNHOXpaVnh1SUNCcFppQW9JV2x1Y0hWMGN5QjhmQ0FvYVc1d2RYUnpMbXhsYm1kMGFDQWhQVDBnTWlBbUppQnBibkIxZEhNdWJHVnVaM1JvSUNFOVBTQXpLU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RMjl1ZGlCeVpYRjFhWEpsY3lBeUlHOXlJRE1nYVc1d2RYUnpKeWs3WEc0Z0lIMWNibHh1SUNBdkx5QlVUMFJQSURvZ1RtVmxaQ0IwYnlCaFpHUWdjM1Z3Y0c5eWRDQm1iM0lnYlhWc2RHa3RaR2x0Wlc1emFXOXVZV3dnWTI5dWRseHVJQ0JwWmlBb2FXNXdkWFJ6V3pCZExtUnBiWE11YkdWdVozUm9JQ0U5UFNBMElDWW1JR2x1Y0hWMGMxc3dYUzVrYVcxekxteGxibWQwYUNBaFBUMGdNeWtnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25ZM1Z5Y21WdWRHeDVJRzl1YkhrZ2MzVndjRzl5ZENBeUxXUnBiV1Z1YzJsdmJtRnNJR052Ym5ZbktUdGNiaUFnZlZ4dVhHNGdJR2xtSUNocGJuQjFkSE5iTUYwdVpHbHRjeTVzWlc1bmRHZ2dJVDA5SUdsdWNIVjBjMXN4WFM1a2FXMXpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblptbHNkR1Z5SUdSdlpYTWdibTkwSUdoaGRtVWdjMkZ0WlNCa2FXMWxibk5wYjI0Z1lYTWdhVzV3ZFhRbktUdGNiaUFnZlZ4dVhHNGdJQzh2SUVaSlRGUkZVbDlKVGw5RFNFRk9Ua1ZNSUhOb2IzVnNaQ0JpWlNCbGNYVmhiQ0IwYnlCRVFWUkJYME5JUVU1T1JVeGNiaUFnWTI5dWMzUWdaR0YwWVVOb1lXNXVaV3dnUFNCcGJuQjFkSE5iTUYwdVpHbHRjMXRoZEhSeWFXSjFkR1Z6TG1admNtMWhkQ0E5UFQwZ0owNUlWME1uSUQ4Z2FXNXdkWFJ6V3pCZExtUnBiWE11YkdWdVozUm9JQzBnTVNBNklERmRPMXh1SUNCamIyNXpkQ0JtYVd4MFpYSkpia05vWVc1dVpXd2dQU0JwYm5CMWRITmJNVjB1WkdsdGMxc3dYVHRjYmlBZ2FXWWdLR1JoZEdGRGFHRnVibVZzSUNFOVBTQm1hV3gwWlhKSmJrTm9ZVzV1Wld3cElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBaSlRGUkZVbDlKVGw5RFNFRk9Ua1ZNSUhOb2IzVnNaQ0JpWlNCbGNYVmhiQ0IwYnlCRVFWUkJYME5JUVU1T1JVd25LVHRjYmlBZ2ZWeHVYRzRnSUdOdmJuTjBJR1psWVhSMWNtVk5ZWEJ6SUQwZ2FXNXdkWFJ6V3pGZExtUnBiWE5iTVYwZ0tpQmhkSFJ5YVdKMWRHVnpMbWR5YjNWd08xeHVYRzRnSUM4dklHbG1JR0pwWVhNZ2FYTWdjSEp2ZG1sa1pXUWdhWFFnYzJodmRXeGtJR0psSURGRUlHRnVaQ0IwYUdVZ2JuVnRZbVZ5SUc5bUlHVnNaVzFsYm5SeklITm9iM1ZzWkNCaVpTQmxjWFZoYkNCMGJ5QjBhR1VnYm5WdFltVnlJRzltSUdabFlYUjFjbVVnYldGd2MxeHVJQ0JwWmlBb2FXNXdkWFJ6TG14bGJtZDBhQ0E5UFQwZ015QW1KaUFvYVc1d2RYUnpXekpkTG1ScGJYTXViR1Z1WjNSb0lDRTlQU0F4SUh4OElHbHVjSFYwYzFzeVhTNWthVzF6V3pCZElDRTlQU0JtWldGMGRYSmxUV0Z3Y3lrcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJsdWRtRnNhV1FnWW1saGN5Y3BPMXh1SUNCOVhHNWNiaUFnWTI5dWMzUWdjM0JoZEdsaGJGSmhibXNnUFNCcGJuQjFkSE5iTUYwdVpHbHRjeTVzWlc1bmRHZ2dMU0F5TzF4dUlDQmpiMjV6ZENCa2FXeGhkR2x2Ym5OVFpYUWdQU0JoZEhSeWFXSjFkR1Z6TG1ScGJHRjBhVzl1Y3k1eVpXUjFZMlVvS0dFc0lHSXBJRDArSUdFZ0t5QmlMQ0F3S1NBK0lEQTdYRzRnSUM4dklIZHliMjVuSUdScGJHRjBhVzl1Y3lCa2FXMWxibk5wYjI1Y2JpQWdhV1lnS0dScGJHRjBhVzl1YzFObGRDQW1KaUJoZEhSeWFXSjFkR1Z6TG1ScGJHRjBhVzl1Y3k1c1pXNW5kR2dnSVQwOUlITndZWFJwWVd4U1lXNXJLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQmthV3hoZEdsdmJuTWdjMmh2ZFd4a0lHSmxJQ1I3YzNCaGRHbGhiRkpoYm10OVJHQXBPMXh1SUNCOVhHNWNiaUFnWTI5dWMzUWdjM1J5YVdSbGMxTmxkQ0E5SUdGMGRISnBZblYwWlhNdWMzUnlhV1JsY3k1eVpXUjFZMlVvS0dFc0lHSXBJRDArSUdFZ0t5QmlMQ0F3S1NBK0lEQTdYRzRnSUM4dklGZHliMjVuSUhOMGNtbGtaWE1nWkdsdFpXNXphVzl1WEc0Z0lHbG1JQ2h6ZEhKcFpHVnpVMlYwSUNZbUlHRjBkSEpwWW5WMFpYTXVjM1J5YVdSbGN5NXNaVzVuZEdnZ0lUMDlJSE53WVhScFlXeFNZVzVyS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0J6ZEhKcFpHVnpJSE5vYjNWc1pDQmlaU0FrZTNOd1lYUnBZV3hTWVc1cmZVUmdLVHRjYmlBZ2ZWeHVYRzRnSUM4dklGZHliMjVuSUhCaFpITWdaR2x0Wlc1emFXOXVYRzRnSUdOdmJuTjBJSEJoWkhOVFpYUWdQU0JoZEhSeWFXSjFkR1Z6TG5CaFpITXVjbVZrZFdObEtDaGhMQ0JpS1NBOVBpQmhJQ3NnWWl3Z01Da2dQaUF3TzF4dUlDQnBaaUFvY0dGa2MxTmxkQ0FtSmlCaGRIUnlhV0oxZEdWekxuQmhaSE11YkdWdVozUm9JQ0U5UFNCemNHRjBhV0ZzVW1GdWF5QXFJRElwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZSEJoWkhNZ2MyaHZkV3hrSUdKbElDUjdjM0JoZEdsaGJGSmhibXNnS2lBeWZVUmdLVHRjYmlBZ2ZWeHVYRzRnSUM4dklGZHliMjVuSUc5MWRIQjFkQ0J3WVdSa2FXNW5JR1JwYldWdWMybHZibHh1SUNCcFppQW9ZWFIwY21saWRYUmxjeTV2ZFhSd2RYUlFZV1JrYVc1bkxteGxibWQwYUNBaFBUMGdjM0JoZEdsaGJGSmhibXNnSmlZZ1lYUjBjbWxpZFhSbGN5NXZkWFJ3ZFhSUVlXUmthVzVuTG14bGJtZDBhQ0FoUFQwZ01Da2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ2IzVjBjSFYwWDNCaFpHUnBibWNnYzJodmRXeGtJR0psSUNSN2MzQmhkR2xoYkZKaGJtdDlSR0FwTzF4dUlDQjlYRzVjYmlBZ0x5OGdhV1lnYTJWeWJtVnNVMmhoY0dVZ2FYTWdjM0JsWTJsbWFXVmtMQ0JwZENkeklHUmhkR0VnYkdWdVozUm9JRzExYzNRZ1ltVWdNaUJzWlhOeklIUm9ZVzRnWkdsdGN5QnNaVzVuZEdnZ2IyWWdkR2hsSUhkbGFXZG9kSE1nZEdWdWMyOXlYRzRnSUM4dklDaDBhR1VnWm1seWMzUWdNaUJrYVcxeklHRnlaU0JpWVhSamFGOXphWHBsSUdGdVpDQmphR0Z1Ym1Wc2N5bGNiaUFnWTI5dWMzUWdhMlZ5Ym1Wc1UyaGhjR1ZUWlhRZ1BTQmhkSFJ5YVdKMWRHVnpMbXRsY201bGJGTm9ZWEJsTG5KbFpIVmpaU2dvWVN3Z1lpa2dQVDRnWVNBcklHSXNJREFwSUQ0Z01EdGNiaUFnYVdZZ0tHdGxjbTVsYkZOb1lYQmxVMlYwSUNZbUlHRjBkSEpwWW5WMFpYTXVhMlZ5Ym1Wc1UyaGhjR1V1YkdWdVozUm9JQ0U5UFNBd0lDWW1YRzRnSUNBZ0lDQmhkSFJ5YVdKMWRHVnpMbXRsY201bGJGTm9ZWEJsTG14bGJtZDBhQ0FoUFQwZ2FXNXdkWFJ6V3pGZExtUnBiWE11YkdWdVozUm9JQzBnTWlrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYVc1MllXeHBaQ0JyWlhKdVpXd2djMmhoY0dVbktUdGNiaUFnZlZ4dVhHNGdJQzh2SUdGeklIZHBkR2dnYTJWeWJtVnNVMmhoY0dVc0lHMTFjM1FnYUdGMlpTQnpZVzFsSUc1MWJXSmxjaUJ2WmlCemNHRjBhV0ZzSUdScGJYTWdZWE1nYVc1d2RYUmNiaUFnYVdZZ0tHRjBkSEpwWW5WMFpYTXViM1YwY0hWMFUyaGhjR1V1YkdWdVozUm9JQ0U5UFNBd0lDWW1JR0YwZEhKcFluVjBaWE11YjNWMGNIVjBVMmhoY0dVdWJHVnVaM1JvSUNFOVBTQnBibkIxZEhOYk1GMHVaR2x0Y3k1c1pXNW5kR2dnTFNBeUtTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkcGJuWmhiR2xrSUc5MWRIQjFkQ0J6YUdGd1pTY3BPMXh1SUNCOVhHNTlPMXh1WEc0dkx5Qm1iM0lnZEhKaGJuTndiM05wYm1jZ2QyVnBaMmgwSUhSbGJuTnZjaUJtY205dElGdERMQ0JOTDJkeWIzVndMQ0JMU0N3Z1MxZGRJSFJ2SUZ0TFNDd2dTMWNzSUUwdlozSnZkWEFzSUVOZFhHNWpiMjV6ZENCM1pXbG5hSFJVY21GdWMzQnZjMlZRWlhKdElEMGdXeklzSURNc0lERXNJREJkTzF4dVhHNWpiMjV6ZENCamIyNTJWSEpoYm5Od2IzTmxNbVFnUFZ4dUlDQWdJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDd2dhVzV3ZFhSek9pQnlaV0ZrYjI1c2VTQlVaVzV6YjNKV2FXVjNXMTBzSUdGMGRISnBZblYwWlhNNklFTnZiblpVY21GdWMzQnZjMlZCZEhSeWFXSjFkR1Z6S1RvZ2RtOXBaQ0E5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0JoWkdwMWMzUmxaRUYwZEhKcFluVjBaWE1nUFNCblpYUkJaR3AxYzNSbFpFTnZiblpVY21GdWMzQnZjMlZCZEhSeWFXSjFkR1Z6S0dGMGRISnBZblYwWlhNc0lHbHVjSFYwY3lrN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYzBOb1lXNXVaV3h6VEdGemRDQTlJR0YwZEhKcFluVjBaWE11Wm05eWJXRjBJRDA5UFNBblRraFhReWM3WEc0Z0lDQWdJQ0JqYjI1emRDQnZkWFJ3ZFhSVGFHRndaU0E5SUdGa2FuVnpkR1ZrUVhSMGNtbGlkWFJsY3k1dmRYUndkWFJUYUdGd1pUdGNiaUFnSUNBZ0lHTnZibk4wSUc5MWRFTm9ZVzV1Wld4eklEMGdiM1YwY0hWMFUyaGhjR1ZiYVhORGFHRnVibVZzYzB4aGMzUWdQeUF6SURvZ01WMDdYRzRnSUNBZ0lDQmpiMjV6ZENCcGJuQjFkRU5vWVc1dVpXeHpJRDBnYVc1d2RYUnpXekJkTG1ScGJYTmJhWE5EYUdGdWJtVnNjMHhoYzNRZ1B5QXpJRG9nTVYwN1hHNGdJQ0FnSUNBdkx5QlRkMmwwWTJnZ2RHOGdibUZwZG1VZ2JXVjBhRzlrSUhkb1pXNGdiM1YwUTJoaGJtNWxiSE1nWVc1a0lHbHVjSFYwUTJoaGJtNWxiSE1nWVhKbElIWmxjbmtnYzIxaGJHd3VJRWwwSjNNZ1ltVmpZWFZ6WlNCMGFHRjBJR2x1SUhSb2FYTWdZMkZ6WlNCcGRDZHpYRzRnSUNBZ0lDQXZMeUJ1YjNRZ2MzVnBkR0ZpYkdVZ1ptOXlJRzFoZEcxMWJDQjJaWEp6YVc5dUlITnBibU5sSUcxaGRHMTFiQ0IxYzJWeklIUnBiR1VnYzJsNlpTQXpNbmd6TWlCeVpYTjFiSFJwYm1jZ2RHaGxJSFZ1WkdWeWJIbHBibWNnWlhobFkzVjBhVzl1SUhWdWFYUmNiaUFnSUNBZ0lDOHZJSFYwYVd4cGVtRjBhVzl1SUhKaGRHVWdhWE1nZG1WeWVTQnNiM2N1WEc0Z0lDQWdJQ0JwWmlBb1lXUnFkWE4wWldSQmRIUnlhV0oxZEdWekxtZHliM1Z3SUNFOVBTQXhJSHg4SUNodmRYUkRhR0Z1Ym1Wc2N5QTlQVDBnTVNBbUppQnBibkIxZEVOb1lXNXVaV3h6SUQwOVBTQXhLU2tnZTF4dUlDQWdJQ0FnSUNCamIyNTBaWGgwTG1OdmJYQjFkR1VvWTNKbFlYUmxRMjl1ZGxSeVlXNXpjRzl6WlRKRVVISnZaM0poYlVsdVptOG9hVzV3ZFhSekxDQmhaR3AxYzNSbFpFRjBkSEpwWW5WMFpYTXBLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdZMjl1YzNRZ2IzVjBTR1ZwWjJoMElEMGdiM1YwY0hWMFUyaGhjR1ZiYVhORGFHRnVibVZzYzB4aGMzUWdQeUF4SURvZ01sMDdYRzRnSUNBZ0lDQmpiMjV6ZENCdmRYUlhhV1IwYUNBOUlHOTFkSEIxZEZOb1lYQmxXMmx6UTJoaGJtNWxiSE5NWVhOMElEOGdNaUE2SUROZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnZDJWcFoyaDBTR1ZwWjJoMElEMGdhVzV3ZFhSeld6RmRMbVJwYlhOYk1sMDdYRzRnSUNBZ0lDQmpiMjV6ZENCM1pXbG5hSFJYYVdSMGFDQTlJR2x1Y0hWMGMxc3hYUzVrYVcxeld6TmRPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQmthVzFCVDNWMFpYSWdQU0JwYzBOb1lXNXVaV3h6VEdGemRDQS9JRzkxZEVobGFXZG9kQ0FxSUc5MWRGZHBaSFJvSURvZ2IzVjBRMmhoYm01bGJITTdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FXMUNUM1YwWlhJZ1BTQnBjME5vWVc1dVpXeHpUR0Z6ZENBL0lHOTFkRU5vWVc1dVpXeHpJRG9nYjNWMFNHVnBaMmgwSUNvZ2IzVjBWMmxrZEdnN1hHNGdJQ0FnSUNCamIyNXpkQ0JrYVcxSmJtNWxjaUE5SUhkbGFXZG9kRWhsYVdkb2RDQXFJSGRsYVdkb2RGZHBaSFJvSUNvZ2FXNXdkWFJEYUdGdWJtVnNjenRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdjMlZ4ZFdWdWRHbGhiRUZqWTJWemMwSjVWR2h5WldGa2N5QTlJQzhxSUdKaFkydGxibVF1WVdSaGNIUmxja2x1Wm04dWFYTkpiblJsYkNncElDb3ZJSFJ5ZFdVN1hHNWNibHh1SUNBZ0lDQWdMeThnVTFSRlVDNHhPaUIwY21GdWMzQnZjMlVnZDJWcFoyaDBYRzRnSUNBZ0lDQmpiMjV6ZENCMGNtRnVjM0J2YzJWa1YyVnBaMmgwSUQwZ0tHTnZiblJsZUhRdWEyVnlibVZzUTNWemRHOXRSR0YwWVM1M1ZDQmhjeUJVWlc1emIzSldhV1YzSUh3Z2RXNWtaV1pwYm1Wa0tTQS9QMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZM0psWVhSbFZISmhibk53YjNObFVISnZaM0poYlVsdVptOG9hVzV3ZFhSeld6RmRMQ0IzWldsbmFIUlVjbUZ1YzNCdmMyVlFaWEp0S1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZTJsdWNIVjBjem9nV3pGZExDQnZkWFJ3ZFhSek9pQmJZWFIwY21saWRYUmxjeTUzU1hORGIyNXpkQ0EvSUMweUlEb2dMVEZkZlNsYk1GMDdYRzRnSUNBZ0lDQnBaaUFvWVhSMGNtbGlkWFJsY3k1M1NYTkRiMjV6ZENBbUppQWhZMjl1ZEdWNGRDNXJaWEp1Wld4RGRYTjBiMjFFWVhSaExuZFVLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuUmxlSFF1YTJWeWJtVnNRM1Z6ZEc5dFJHRjBZUzUzVkNBOUlIUnlZVzV6Y0c5elpXUlhaV2xuYUhRN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJRk5VUlZBdU1qb2djSEpsY0dGeVpTQnlaWE5vWVhCbFpDQnBibkIxZEhOY2JpQWdJQ0FnSUdOdmJuTjBJR052Ym5aVWNtRnVjM0J2YzJWSmJuQjFkSE1nUFNCYmFXNXdkWFJ6V3pCZExDQjBjbUZ1YzNCdmMyVmtWMlZwWjJoMFhUdGNiaUFnSUNBZ0lHTnZibk4wSUdoaGMwSnBZWE1nUFNCcGJuQjFkSE11YkdWdVozUm9JRDA5UFNBek8xeHVJQ0FnSUNBZ2FXWWdLR2hoYzBKcFlYTXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRnBjME5vWVc1dVpXeHpUR0Z6ZENBbUppQnBibkIxZEhOYk1sMHVaR2x0Y3k1c1pXNW5kR2dnUFQwOUlERXBJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNTJWSEpoYm5Od2IzTmxTVzV3ZFhSekxuQjFjMmdvYVc1d2RYUnpXekpkTG5KbGMyaGhjR1VvVzJsdWNIVjBjMXN5WFM1a2FXMXpXekJkTENBeExDQXhYU2twTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZiblpVY21GdWMzQnZjMlZKYm5CMWRITXVjSFZ6YUNocGJuQjFkSE5iTWwwcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQzh2SUZOVVJWQXVNem9nWTI5dGNIVjBaU0J0WVhSdGRXeGNiaUFnSUNBZ0lHTnZiblJsZUhRdVkyOXRjSFYwWlNoY2JpQWdJQ0FnSUNBZ0lDQmpjbVZoZEdWRGIyNTJNa1JVY21GdWMzQnZjMlZOWVhSTmRXeFFjbTluY21GdFNXNW1ieWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1ZGxSeVlXNXpjRzl6WlVsdWNIVjBjeXdnWVdScWRYTjBaV1JCZEhSeWFXSjFkR1Z6TENCdmRYUndkWFJUYUdGd1pTd2daR2x0UVU5MWRHVnlMQ0JrYVcxQ1QzVjBaWElzSUdScGJVbHVibVZ5TENCb1lYTkNhV0Z6TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J6WlhGMVpXNTBhV0ZzUVdOalpYTnpRbmxVYUhKbFlXUnpLU3hjYmlBZ0lDQWdJQ0FnSUNCN2FXNXdkWFJ6T2lCamIyNTJWSEpoYm5Od2IzTmxTVzV3ZFhSemZTazdYRzRnSUNBZ2ZUdGNibHh1WTI5dWMzUWdZMjl1ZGxSeVlXNXpjRzl6WlRGa0lEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJEYjI1MlZISmhibk53YjNObFFYUjBjbWxpZFhSbGN5azZJSFp2YVdRZ1BUNGdlMXh1SUNBdkx5QmxlSFJsYm1RZ2RHaGxJR2x1Y0hWMElIUnZJREpFSUdKNUlHRmtaR2x1WnlCSUlHUnBiV1Z1YzJsdmJseHVJQ0JqYjI1emRDQnBjME5vWVc1dVpXeE1ZWE4wSUQwZ1lYUjBjbWxpZFhSbGN5NW1iM0p0WVhRZ1BUMDlJQ2RPU0ZkREp6dGNibHh1SUNCamIyNXpkQ0JwYm5CMWRITWdQU0JiWEc0Z0lDQWdZMjl1ZEdWNGRDNXBibkIxZEhOYk1GMHVjbVZ6YUdGd1pTaGNiaUFnSUNBZ0lDQWdhWE5EYUdGdWJtVnNUR0Z6ZENBL1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCYlRpd2dWeXdnUTEwZ0xUNGdXMDRzSUVnOU1Td2dWeXdnUTExY2JpQWdJQ0FnSUNBZ0lDQWdJRnRqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYUzVrYVcxeld6QmRMQ0F4TENCamIyNTBaWGgwTG1sdWNIVjBjMXN3WFM1a2FXMXpXekZkTENCamIyNTBaWGgwTG1sdWNIVjBjMXN3WFM1a2FXMXpXekpkWFNBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCYlRpd2dReXdnVjEwZ0xUNGdXMDRzSUVNc0lFZzlNU3dnVjExY2JpQWdJQ0FnSUNBZ0lDQWdJRnRqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYUzVrYVcxeld6QmRMQ0JqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYUzVrYVcxeld6RmRMQ0F4TENCamIyNTBaWGgwTG1sdWNIVjBjMXN3WFM1a2FXMXpXekpkWFNrc1hHNGdJQ0FnTHk5YlJrbE1WRVZTWDA5VlZGOURTRUZPVGtWTUxDQkdTVXhVUlZKZlNVNWZRMGhCVGs1RlRDd2dhMWRkSUMwK0lGdEdTVXhVUlZKZlQxVlVYME5JUVU1T1JVd3NJRVpKVEZSRlVsOUpUbDlEU0VGT1RrVk1MQ0JyU0QweExDQnJWMTFjYmlBZ0lDQmpiMjUwWlhoMExtbHVjSFYwYzFzeFhTNXlaWE5vWVhCbEtGdGpiMjUwWlhoMExtbHVjSFYwYzFzeFhTNWthVzF6V3pCZExDQmpiMjUwWlhoMExtbHVjSFYwYzFzeFhTNWthVzF6V3pGZExDQXhMQ0JqYjI1MFpYaDBMbWx1Y0hWMGMxc3hYUzVrYVcxeld6SmRYU2xjYmlBZ1hUdGNiaUFnYVdZZ0tHTnZiblJsZUhRdWFXNXdkWFJ6TG14bGJtZDBhQ0E5UFQwZ015a2dlMXh1SUNBZ0lHbHVjSFYwY3k1d2RYTm9LR052Ym5SbGVIUXVhVzV3ZFhSeld6SmRLVHRjYmlBZ2ZWeHVJQ0JzWlhRZ2EyVnlibVZzVTJoaGNHVWdQU0JoZEhSeWFXSjFkR1Z6TG10bGNtNWxiRk5vWVhCbE8xeHVJQ0JwWmlBb2EyVnlibVZzVTJoaGNHVXViR1Z1WjNSb0lEMDlQU0F3SUh4OElHdGxjbTVsYkZOb1lYQmxXekJkSUQwOVBTQXdLU0I3WEc0Z0lDQWdhMlZ5Ym1Wc1UyaGhjR1VnUFNCYlkyOXVkR1Y0ZEM1cGJuQjFkSE5iTVYwdVpHbHRjMXN5WFYwN1hHNGdJSDFjYmlBZ2JHVjBJR1JwYkdGMGFXOXVjeUE5SUdGMGRISnBZblYwWlhNdVpHbHNZWFJwYjI1ek8xeHVJQ0JwWmlBb1pHbHNZWFJwYjI1ekxteGxibWQwYUNBOVBUMGdNQ0I4ZkNCa2FXeGhkR2x2Ym5OYk1GMGdQVDA5SURBcElIdGNiaUFnSUNCa2FXeGhkR2x2Ym5NZ1BTQmJNVjA3WEc0Z0lIMWNiaUFnYkdWMElITjBjbWxrWlhNZ1BTQmhkSFJ5YVdKMWRHVnpMbk4wY21sa1pYTTdYRzRnSUdsbUlDaHpkSEpwWkdWekxteGxibWQwYUNBOVBUMGdNQ0I4ZkNCemRISnBaR1Z6V3pCZElEMDlQU0F3S1NCN1hHNGdJQ0FnYzNSeWFXUmxjeUE5SUZzeFhUdGNiaUFnZlZ4dUlDQnNaWFFnY0dGa2N5QTlJR0YwZEhKcFluVjBaWE11Y0dGa2N6dGNiaUFnYVdZZ0tIQmhaSE11YkdWdVozUm9JRDA5UFNBd0tTQjdYRzRnSUNBZ2NHRmtjeUE5SUZzd0xDQXdYVHRjYmlBZ2ZWeHVJQ0J3WVdSeklEMGdXekFzSUhCaFpITmJNRjBzSURBc0lIQmhaSE5iTVYxZE8xeHVJQ0J6ZEhKcFpHVnpJRDBnV3pGZExtTnZibU5oZENoemRISnBaR1Z6S1R0Y2JpQWdaR2xzWVhScGIyNXpJRDBnV3pGZExtTnZibU5oZENoa2FXeGhkR2x2Ym5NcE8xeHVJQ0JyWlhKdVpXeFRhR0Z3WlNBOUlGc3hYUzVqYjI1allYUW9hMlZ5Ym1Wc1UyaGhjR1VwTzF4dUlDQmpiMjV6ZENCaFpHcDFjM1JsWkVGMGRISnBZblYwWlhNZ1BWeHVJQ0FnSUNBZ1oyVjBRV1JxZFhOMFpXUkRiMjUyVkhKaGJuTndiM05sUVhSMGNtbGlkWFJsY3loN0xpNHVZWFIwY21saWRYUmxjeXdnY0dGa2N5d2djM1J5YVdSbGN5d2daR2xzWVhScGIyNXpMQ0JyWlhKdVpXeFRhR0Z3Wlgwc0lHbHVjSFYwY3lrN1hHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGpjbVZoZEdWRGIyNTJWSEpoYm5Od2IzTmxNa1JRY205bmNtRnRTVzVtYnloY2JpQWdJQ0FnSUdsdWNIVjBjeXdnWVdScWRYTjBaV1JCZEhSeWFXSjFkR1Z6TEZ4dUlDQWdJQ0FnYjNWMGNIVjBVMmhoY0dVZ1BUNGdhWE5EYUdGdWJtVnNUR0Z6ZENBL0lGdHZkWFJ3ZFhSVGFHRndaVnN3WFN3Z2IzVjBjSFYwVTJoaGNHVmJNbDBzSUc5MWRIQjFkRk5vWVhCbFd6TmRYU0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1cyOTFkSEIxZEZOb1lYQmxXekJkTENCdmRYUndkWFJUYUdGd1pWc3hYU3dnYjNWMGNIVjBVMmhoY0dWYk0xMWRLU2s3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ1kyOXVkbFJ5WVc1emNHOXpaU0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3pvZ1EyOXVkbFJ5WVc1emNHOXpaVUYwZEhKcFluVjBaWE1wT2lCMmIybGtJRDArSUh0Y2JpQWdkbUZzYVdSaGRHVkpibkIxZEhNb1kyOXVkR1Y0ZEM1cGJuQjFkSE1zSUdGMGRISnBZblYwWlhNcE8xeHVJQ0JwWmlBb1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwdVpHbHRjeTVzWlc1bmRHZ2dQVDA5SURNcElIdGNiaUFnSUNCamIyNTJWSEpoYm5Od2IzTmxNV1FvWTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3lrN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ1kyOXVkbFJ5WVc1emNHOXpaVEprS0dOdmJuUmxlSFFzSUdOdmJuUmxlSFF1YVc1d2RYUnpMQ0JoZEhSeWFXSjFkR1Z6S1R0Y2JpQWdmVnh1ZlR0Y2JpSXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJSHRFWVhSaFZIbHdaWDBnWm5KdmJTQW5MaTR2TGk0dkxpNHZkMkZ6YlMxamIyMXRiMjRuTzF4dWFXMXdiM0owSUh0VVpXNXpiM0pXYVdWM2ZTQm1jbTl0SUNjdUxpOHVMaTkwWlc1emIzSXRkbWxsZHljN1hHNXBiWEJ2Y25RZ2UxTm9ZWEJsVlhScGJIMGdabkp2YlNBbkxpNHZMaTR2ZFhScGJDYzdYRzVwYlhCdmNuUWdlMEYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVN3Z1kzSmxZWFJsUVhSMGNtbGlkWFJsVjJsMGFFTmhZMmhsUzJWNWZTQm1jbTl0SUNjdUxpOWhkSFJ5YVdKMWRHVXRkMmwwYUMxallXTm9aUzFyWlhrbk8xeHVhVzF3YjNKMElIdERiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1VISnZaM0poYlVsdVptOTlJR1p5YjIwZ0p5NHVMM1I1Y0dWekp6dGNibHh1YVcxd2IzSjBJSHRqY21WaGRHVlVaVzV6YjNKVGFHRndaVlpoY21saFlteGxjeXdnWjJWMFJXeGxiV1Z1ZEVGMExDQnBibkIxZEZaaGNtbGhZbXhsTENCdmRYUndkWFJXWVhKcFlXSnNaU3dnVTJoaFpHVnlTR1ZzY0dWeWZTQm1jbTl0SUNjdUwyTnZiVzF2YmljN1hHNWNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JEZFcxVGRXMUJkSFJ5YVdKMWRHVnpJR1Y0ZEdWdVpITWdRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1SUh0Y2JpQWdjbVZoWkc5dWJIa2daWGhqYkhWemFYWmxPaUJpYjI5c1pXRnVPMXh1SUNCeVpXRmtiMjVzZVNCeVpYWmxjbk5sT2lCaWIyOXNaV0Z1TzF4dWZWeHVZMjl1YzNRZ1kzSmxZWFJsUTNWdGMzVnRVSEp2WjNKaGJVbHVabThnUFZ4dUlDQWdJQ2hwYm5CMWRGUjVjR1U2SUc1MWJXSmxjaXdnYVc1d2RYUlRhR0Z3WlRvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwc0lHRjRhWE5KYm5CMWREb2dWR1Z1YzI5eVZtbGxkeXdnWVhSMGNtbGlkWFJsY3pvZ1EzVnRVM1Z0UVhSMGNtbGlkWFJsY3lrNlhHNGdJQ0FnSUNBZ0lGQnliMmR5WVcxSmJtWnZJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdmRYUndkWFJUYVhwbElEMGdVMmhoY0dWVmRHbHNMbk5wZW1Vb2FXNXdkWFJUYUdGd1pTazdJQ0F2THlCdmRYUndkWFJUYUdGd1pTQnBjeUJ6WVcxbElHRnpJR2x1Y0hWMFUyaGhjR1V1WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnY21GdWF5QTlJR2x1Y0hWMFUyaGhjR1V1YkdWdVozUm9PeUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnYVc1d2RYUXZiM1YwY0hWMElISmhibXRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRDQTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb0oybHVjSFYwSnl3Z2FXNXdkWFJVZVhCbExDQnlZVzVyS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdmRYUndkWFFnUFNCdmRYUndkWFJXWVhKcFlXSnNaU2duYjNWMGNIVjBKeXdnYVc1d2RYUlVlWEJsTENCeVlXNXJLVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JoZUdselZtRnNkV1VnUFNCaGVHbHpTVzV3ZFhRdVpHRjBZVlI1Y0dVZ1BUMDlJRVJoZEdGVWVYQmxMbWx1ZERNeUlEOGdZWGhwYzBsdWNIVjBMbWRsZEVsdWRETXlRWEp5WVhrb0tWc3dYU0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRTUxYldKbGNpaGhlR2x6U1c1d2RYUXVaMlYwUW1sblNXNTBOalJCY25KaGVTZ3BXekJkS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCaGVHbHpJRDBnVTJoaGNHVlZkR2xzTG01dmNtMWhiR2w2WlVGNGFYTW9ZWGhwYzFaaGJIVmxMQ0J5WVc1cktUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVZ1BTQW9jMmhoWkdWeVNHVnNjR1Z5T2lCVGFHRmtaWEpJWld4d1pYSXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHbHVaR1Y0SUQwZ1lDQnBNeklvSkh0cGJuQjFkQzVwYm1ScFkyVnpSMlYwS0NkcGJuQjFkRWx1WkdsalpYTW5MQ0FuZFc1cFptOXliWE11WVhocGN5Y3BmU2tnWUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHMWhlQ0E5SUdkbGRFVnNaVzFsYm5SQmRDZ25kVzVwWm05eWJYTXVhVzV3ZFhSZmMyaGhjR1VuTENBbmRXNXBabTl5YlhNdVlYaHBjeWNzSUhKaGJtc3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYkc5M1pYSk1hVzFwZENBOUlHRjBkSEpwWW5WMFpYTXVjbVYyWlhKelpTQS9JR2x1WkdWNElDc2dLR0YwZEhKcFluVjBaWE11WlhoamJIVnphWFpsSUQ4Z0p5QXJJREVuSURvZ0p5Y3BJRG9nSnpBbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdkWEJ3WlhKTWFXMXBkQ0E5SUdGMGRISnBZblYwWlhNdWNtVjJaWEp6WlNBL0lHMWhlQ0E2SUdsdVpHVjRJQ3NnS0dGMGRISnBZblYwWlhNdVpYaGpiSFZ6YVhabElEOGdKeWNnT2lBbklDc2dNU2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHQmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5vWVdSbGNraGxiSEJsY2k1eVpXZHBjM1JsY2xWdWFXWnZjbTBvSjI5MWRIQjFkRk5wZW1VbkxDQW5kVE15SnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMbkpsWjJsemRHVnlWVzVwWm05eWJTZ25ZWGhwY3ljc0lDZDFNekluS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVaR1ZqYkdGeVpWWmhjbWxoWW14bGN5aHBibkIxZEN3Z2IzVjBjSFYwS1gxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV0WVdsdVUzUmhjblFvS1gxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG1kMVlYSmtRV2RoYVc1emRFOTFkRTltUW05MWJtUnpWMjl5YTJkeWIzVndVMmw2WlhNb0ozVnVhV1p2Y20xekxtOTFkSEIxZEZOcGVtVW5LWDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQnBibkIxZEVsdVpHbGpaWE1nUFNBa2UyOTFkSEIxZEM1dlptWnpaWFJVYjBsdVpHbGpaWE1vSjJkc2IySmhiRjlwWkhnbktYMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2MzVnRJRDBnSkh0dmRYUndkWFF1ZEhsd1pTNTJZV3gxWlgwb01DazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1ptbHljM1FnT2lCcE16SWdQU0FrZTJ4dmQyVnlUR2x0YVhSOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUd4aGMzUWdPaUJwTXpJZ1BTQWtlM1Z3Y0dWeVRHbHRhWFI5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTZJR2t6TWlBOUlHWnBjbk4wT3lCcElEd2diR0Z6ZERzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUjdhVzV3ZFhRdWFXNWthV05sYzFObGRDZ25hVzV3ZFhSSmJtUnBZMlZ6Snl3Z0ozVnVhV1p2Y20xekxtRjRhWE1uTENBbmRUTXlLR2twSnlsOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6ZFcwZ1BTQnpkVzBnS3lBa2UybHVjSFYwTG1kbGRFSjVTVzVrYVdObGN5Z25hVzV3ZFhSSmJtUnBZMlZ6SnlsOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkh0dmRYUndkWFF1YzJWMFFubFBabVp6WlhRb0oyZHNiMkpoYkY5cFpIZ25MQ0FuYzNWdEp5bDlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFnTzF4dUlDQWdJQ0FnSUNBZ0lIMDdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHNWhiV1U2SUNkRGRXMVRkVzBuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjMmhoWkdWeVEyRmphR1U2SUh0b2FXNTBPaUJoZEhSeWFXSjFkR1Z6TG1OaFkyaGxTMlY1TENCcGJuQjFkRVJsY0dWdVpHVnVZMmxsY3pvZ1d5ZHlZVzVySjExOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWjJWMFVuVnVSR0YwWVRvZ0tDa2dQVDRnS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYjNWMGNIVjBjem9nVzN0a2FXMXpPaUJwYm5CMWRGTm9ZWEJsTENCa1lYUmhWSGx3WlRvZ2FXNXdkWFJVZVhCbGZWMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHUnBjM0JoZEdOb1IzSnZkWEE2SUh0NE9pQk5ZWFJvTG1ObGFXd29iM1YwY0hWMFUybDZaU0F2SURZMElDOHFJSGR2Y210bmNtOTFjQ0J6YVhwbElDb3ZLWDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGN6b2dXMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUc5MWRIQjFkRk5wZW1WOUxDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJoZUdsemZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVMaTVqY21WaGRHVlVaVzV6YjNKVGFHRndaVlpoY21saFlteGxjeWhwYm5CMWRGTm9ZWEJsTENCcGJuQjFkRk5vWVhCbEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCZFhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUgwcExGeHVJQ0FnSUNBZ0lDQWdJQ0FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxYRzRnSUNBZ0lDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUNBZ2ZUdGNibHh1WEc1bGVIQnZjblFnWTI5dWMzUWdZM1Z0YzNWdElEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJEZFcxVGRXMUJkSFJ5YVdKMWRHVnpLVG9nZG05cFpDQTlQaUI3WEc0Z0lHTnZibk4wSUdsdWNIVjBVMmhoY0dVZ1BTQmpiMjUwWlhoMExtbHVjSFYwYzFzd1hTNWthVzF6TzF4dUlDQmpiMjV6ZENCcGJuQjFkRlI1Y0dVZ1BTQmpiMjUwWlhoMExtbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pUdGNiaUFnWTI5dWMzUWdZWGhwY3lBOUlHTnZiblJsZUhRdWFXNXdkWFJ6V3pGZE8xeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFEzVnRjM1Z0VUhKdlozSmhiVWx1Wm04b2FXNXdkWFJVZVhCbExDQnBibkIxZEZOb1lYQmxMQ0JoZUdsekxDQmhkSFJ5YVdKMWRHVnpLU3dnZTJsdWNIVjBjem9nV3pCZGZTazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnY0dGeWMyVkRkVzFUZFcxQmRIUnlhV0oxZEdWeklEMGdLR0YwZEhKcFluVjBaWE02SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSFZ1YTI1dmQyNCtLVG9nUTNWdFUzVnRRWFIwY21saWRYUmxjeUE5UGlCN1hHNGdJR052Ym5OMElHVjRZMngxYzJsMlpTQTlJR0YwZEhKcFluVjBaWE11WlhoamJIVnphWFpsSUdGeklHNTFiV0psY2lBOVBUMGdNVHRjYmlBZ1kyOXVjM1FnY21WMlpYSnpaU0E5SUdGMGRISnBZblYwWlhNdWNtVjJaWEp6WlNCaGN5QnVkVzFpWlhJZ1BUMDlJREU3WEc0Z0lISmxkSFZ5YmlCamNtVmhkR1ZCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrb2UyVjRZMngxYzJsMlpTd2djbVYyWlhKelpYMHBPMXh1ZlR0Y2JpSXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJSHRFWVhSaFZIbHdaWDBnWm5KdmJTQW5MaTR2TGk0dkxpNHZkMkZ6YlMxamIyMXRiMjRuTzF4dWFXMXdiM0owSUh0VVpXNXpiM0pXYVdWM2ZTQm1jbTl0SUNjdUxpOHVMaTkwWlc1emIzSXRkbWxsZHljN1hHNXBiWEJ2Y25RZ2UxTm9ZWEJsVlhScGJIMGdabkp2YlNBbkxpNHZMaTR2ZFhScGJDYzdYRzVwYlhCdmNuUWdlMEYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVN3Z1kzSmxZWFJsUVhSMGNtbGlkWFJsVjJsMGFFTmhZMmhsUzJWNWZTQm1jbTl0SUNjdUxpOWhkSFJ5YVdKMWRHVXRkMmwwYUMxallXTm9aUzFyWlhrbk8xeHVhVzF3YjNKMElIdERiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1VISnZaM0poYlVsdVptOTlJR1p5YjIwZ0p5NHVMM1I1Y0dWekp6dGNibHh1YVcxd2IzSjBJSHRqY21WaGRHVlVaVzV6YjNKVGFHRndaVlpoY21saFlteGxjeXdnU1c1a2FXTmxjMGhsYkhCbGNpd2dhVzV3ZFhSV1lYSnBZV0pzWlN3Z2IzVjBjSFYwVm1GeWFXRmliR1VzSUZOb1lXUmxja2hsYkhCbGNuMGdabkp2YlNBbkxpOWpiMjF0YjI0bk8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRVp2Y20xaGRFRjBkSEpwWW5WMFpYTWdlMXh1SUNCeVpXRmtiMjVzZVNCbWIzSnRZWFE2SUNkT1NGZERKM3duVGtOSVZ5YzdYRzU5WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1JHVndkR2hVYjFOd1lXTmxRWFIwY21saWRYUmxjeUJsZUhSbGJtUnpJRVp2Y20xaGRFRjBkSEpwWW5WMFpYTXNJRUYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVNCN1hHNGdJSEpsWVdSdmJteDVJR0pzYjJOcmMybDZaVG9nYm5WdFltVnlPMXh1SUNCeVpXRmtiMjVzZVNCdGIyUmxPaUJ6ZEhKcGJtYzdYRzU5WEc1Y2JtTnZibk4wSUhaaGJHbGtZWFJsU1c1d2RYUnpJRDBnS0dsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZEtUb2dkbTlwWkNBOVBpQjdYRzRnSUdsbUlDZ2hhVzV3ZFhSeklIeDhJR2x1Y0hWMGN5NXNaVzVuZEdnZ0lUMDlJREVwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFJsY0hSb1ZHOVRjR0ZqWlNCeVpYRjFhWEpsY3lBeElHbHVjSFYwTGljcE8xeHVJQ0I5WEc0Z0lHbG1JQ2hwYm5CMWRITmJNRjB1WkdsdGN5NXNaVzVuZEdnZ0lUMDlJRFFwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFJsY0hSb1ZHOVRjR0ZqWlNCeVpYRjFhWEpsY3lBMFJDQnBibkIxZEM0bktUdGNiaUFnZlZ4dWZUdGNibHh1WTI5dWMzUWdjR1Z5YlVaMWJtTjBhVzl1UW05a2VTQTlJQ2h3WlhKdE9pQnVkVzFpWlhKYlhTd2djbUZ1YXpvZ2JuVnRZbVZ5TENCcGJuQjFkRG9nU1c1a2FXTmxjMGhsYkhCbGNpd2diM1YwY0hWME9pQkpibVJwWTJWelNHVnNjR1Z5S1RvZ2MzUnlhVzVuSUQwK0lIdGNiaUFnWTI5dWMzUWdjbVYyWlhKelpVWjFibU1nUFNCYlhUdGNiaUFnY21WMlpYSnpaVVoxYm1NdWNIVnphQ2hnWm00Z2NHVnliU2hwT2lBa2UyOTFkSEIxZEM1MGVYQmxMbWx1WkdsalpYTjlLU0F0UGlBa2UybHVjSFYwTG5SNWNHVXVhVzVrYVdObGMzMGdlMXh1SUNBZ0lIWmhjaUJoT2lBa2UybHVjSFYwTG5SNWNHVXVhVzVrYVdObGMzMDdZQ2s3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2djbUZ1YXpzZ0t5dHBLU0I3WEc0Z0lDQWdjbVYyWlhKelpVWjFibU11Y0hWemFDaHBibkIxZEM1cGJtUnBZMlZ6VTJWMEtDZGhKeXdnY0dWeWJWdHBYU3dnWUdsYkpIdHBmVjFnS1NrN1hHNGdJSDFjYmlBZ2NtVjJaWEp6WlVaMWJtTXVjSFZ6YUNnbmNtVjBkWEp1SUdFN2ZTY3BPMXh1SUNCeVpYUjFjbTRnY21WMlpYSnpaVVoxYm1NdWFtOXBiaWduWEZ4dUp5azdYRzU5TzF4dVhHNWpiMjV6ZENCamNtVmhkR1ZFWlhCMGFGUnZVM0JoWTJWUWNtOW5jbUZ0U1c1bWJ5QTlJQ2hwYm5CMWRGUmxibk52Y2pvZ1ZHVnVjMjl5Vm1sbGR5d2dZWFIwY21saWRYUmxjem9nUkdWd2RHaFViMU53WVdObFFYUjBjbWxpZFhSbGN5azZJRkJ5YjJkeVlXMUpibVp2SUQwK0lIdGNiaUFnYkdWMElHNDZJRzUxYldKbGNpd2dhRG9nYm5WdFltVnlMQ0IzT2lCdWRXMWlaWElzSUdNNklHNTFiV0psY2p0Y2JpQWdiR1YwSUhOb1lYQmxPaUJ1ZFcxaVpYSmJYVHRjYmlBZ2JHVjBJSEJsY20wNklHNTFiV0psY2x0ZE8xeHVJQ0JqYjI1emRDQnBjME5vWVc1dVpXeE1ZWE4wSUQwZ1lYUjBjbWxpZFhSbGN5NW1iM0p0WVhRZ1BUMDlJQ2RPU0ZkREp6dGNiaUFnWTI5dWMzUWdZbXh2WTJ0emFYcGxJRDBnWVhSMGNtbGlkWFJsY3k1aWJHOWphM05wZW1VN1hHNGdJR052Ym5OMElHbHpSRU5TYlc5a1pTQTlJR0YwZEhKcFluVjBaWE11Ylc5a1pTQTlQVDBnSjBSRFVpYzdYRzRnSUdsbUlDaHBjME5vWVc1dVpXeE1ZWE4wS1NCN1hHNGdJQ0FnVzI0c0lHZ3NJSGNzSUdOZElEMGdhVzV3ZFhSVVpXNXpiM0l1WkdsdGN6dGNiaUFnSUNCemFHRndaU0E5SUdselJFTlNiVzlrWlNBL0lGdHVMQ0JvTENCM0xDQmliRzlqYTNOcGVtVXNJR0pzYjJOcmMybDZaU3dnWXlBdklDaGliRzlqYTNOcGVtVWdLaW9nTWlsZElEcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lGdHVMQ0JvTENCM0xDQmpJQzhnS0dKc2IyTnJjMmw2WlNBcUtpQXlLU3dnWW14dlkydHphWHBsTENCaWJHOWphM05wZW1WZE8xeHVJQ0FnSUhCbGNtMGdQU0JwYzBSRFVtMXZaR1VnUHlCYk1Dd2dNU3dnTXl3Z01pd2dOQ3dnTlYwZ09pQmJNQ3dnTVN3Z05Dd2dNaXdnTlN3Z00xMDdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdXMjRzSUdnc0lIY3NJR05kSUQwZ1cybHVjSFYwVkdWdWMyOXlMbVJwYlhOYk1GMHNJR2x1Y0hWMFZHVnVjMjl5TG1ScGJYTmJNbDBzSUdsdWNIVjBWR1Z1YzI5eUxtUnBiWE5iTTEwc0lHbHVjSFYwVkdWdWMyOXlMbVJwYlhOYk1WMWRPMXh1SUNBZ0lITm9ZWEJsSUQwZ2FYTkVRMUp0YjJSbElEOGdXMjRzSUdKc2IyTnJjMmw2WlN3Z1lteHZZMnR6YVhwbExDQmpJQzhnS0dKc2IyTnJjMmw2WlNBcUtpQXlLU3dnYUN3Z2QxMGdPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdXMjRzSUdNZ0x5QW9ZbXh2WTJ0emFYcGxJQ29xSURJcExDQmliRzlqYTNOcGVtVXNJR0pzYjJOcmMybDZaU3dnYUN3Z2QxMDdYRzRnSUNBZ2NHVnliU0E5SUdselJFTlNiVzlrWlNBL0lGc3dMQ0F6TENBMExDQXhMQ0ExTENBeVhTQTZJRnN3TENBeExDQTBMQ0F5TENBMUxDQXpYVHRjYmlBZ2ZWeHVJQ0JqYjI1emRDQnlaWE5vWVhCbFpFbHVjSFYwVkdWdWMyOXlJRDBnYVc1d2RYUlVaVzV6YjNJdWNtVnphR0Z3WlNoemFHRndaU2s3WEc0Z0lHTnZibk4wSUhKbGMyaGhjR1ZrU1c1d2RYUlNZVzVySUQwZ2NtVnphR0Z3WldSSmJuQjFkRlJsYm5OdmNpNWthVzF6TG14bGJtZDBhRHRjYmlBZ1kyOXVjM1FnYVc1d2RYUkVZWFJoVkhsd1pTQTlJR2x1Y0hWMFZHVnVjMjl5TG1SaGRHRlVlWEJsTzF4dVhHNGdJR052Ym5OMElISmxjMmhoY0dWa1NXNXdkWFFnUFNCcGJuQjFkRlpoY21saFlteGxLQ2RoSnl3Z2FXNXdkWFJFWVhSaFZIbHdaU3dnY21WemFHRndaV1JKYm5CMWRGSmhibXNwTzF4dUlDQmpiMjV6ZENCd1pYSnRaV1JQZFhSd2RYUWdQU0J2ZFhSd2RYUldZWEpwWVdKc1pTZ25iM1YwY0hWMEp5d2dhVzV3ZFhSRVlYUmhWSGx3WlN3Z2NtVnphR0Z3WldSSmJuQjFkRkpoYm1zcE8xeHVYRzRnSUdOdmJuTjBJR2RsZEZOb1lXUmxjbE52ZFhKalpTQTlJQ2h6YUdGa1pYSklaV3h3WlhJNklGTm9ZV1JsY2tobGJIQmxjaWtnUFQ0Z1lGeHVJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNXlaV2RwYzNSbGNsVnVhV1p2Y20wb0oyOTFkSEIxZEY5emFYcGxKeXdnSjNVek1pY3BMbVJsWTJ4aGNtVldZWEpwWVdKc1pYTW9jbVZ6YUdGd1pXUkpibkIxZEN3Z2NHVnliV1ZrVDNWMGNIVjBLWDFjYmx4dUlDQWtlM0JsY20xR2RXNWpkR2x2YmtKdlpIa29jR1Z5YlN3Z2NtVnphR0Z3WldSSmJuQjFkRkpoYm1zc0lISmxjMmhoY0dWa1NXNXdkWFFzSUhCbGNtMWxaRTkxZEhCMWRDbDlYRzVjYmlBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1YldGcGJsTjBZWEowS0NsOVhHNGdJQ0FnSkh0emFHRmtaWEpJWld4d1pYSXVaM1ZoY21SQloyRnBibk4wVDNWMFQyWkNiM1Z1WkhOWGIzSnJaM0p2ZFhCVGFYcGxjeWduZFc1cFptOXliWE11YjNWMGNIVjBYM05wZW1VbktYMWNibHh1SUNBZ0lHeGxkQ0JwYm1ScFkyVnpJRDBnSkh0d1pYSnRaV1JQZFhSd2RYUXViMlptYzJWMFZHOUpibVJwWTJWektDZG5iRzlpWVd4ZmFXUjRKeWw5TzF4dUlDQWdJR3hsZENCaFNXNWthV05sY3lBOUlIQmxjbTBvYVc1a2FXTmxjeWs3WEc1Y2JpQWdJQ0FrZTNCbGNtMWxaRTkxZEhCMWRDNXpaWFJDZVU5bVpuTmxkQ2duWjJ4dlltRnNYMmxrZUNjc0lISmxjMmhoY0dWa1NXNXdkWFF1WjJWMFFubEpibVJwWTJWektDZGhTVzVrYVdObGN5Y3BLWDFjYmlBZ2ZXQTdYRzVjYmlBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0J1WVcxbE9pQW5SR1Z3ZEdoVWIxTndZV05sSnl4Y2JpQWdJQ0J6YUdGa1pYSkRZV05vWlRvZ2UyaHBiblE2SUdBa2UybHVjSFYwVkdWdWMyOXlMbVJwYlhOOU95UjdZWFIwY21saWRYUmxjeTVpYkc5amEzTnBlbVY5T3lSN1lYUjBjbWxpZFhSbGN5NXRiMlJsZldBc0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWek9pQmJKM0poYm1zblhYMHNYRzRnSUNBZ1oyVjBVblZ1UkdGMFlUb2dLR2x1Y0hWMGN5a2dQVDRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1VnUFNCcGMwTm9ZVzV1Wld4TVlYTjBJRDhnVzI0c0lHZ2dLaUJpYkc5amEzTnBlbVVzSUhjZ0tpQmliRzlqYTNOcGVtVXNJR01nTHlBb1lteHZZMnR6YVhwbElDb3FJRElwWFNBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCYmJpd2dZeUF2SUNoaWJHOWphM05wZW1VZ0tpb2dNaWtzSUdnZ0tpQmliRzlqYTNOcGVtVXNJSGNnS2lCaWJHOWphM05wZW1WZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYjNWMGNIVjBVMmw2WlNBOUlGTm9ZWEJsVlhScGJDNXphWHBsS0c5MWRIQjFkRk5vWVhCbEtUdGNiaUFnSUNBZ0lHTnZibk4wSUhOb1lYQmxRbVZtYjNKbFVHVnliU0E5SUhKbGMyaGhjR1ZrU1c1d2RYUlVaVzV6YjNJdVpHbHRjenRjYmlBZ0lDQWdJR052Ym5OMElITm9ZWEJsUVdaMFpYSlFaWEp0SUQwZ1UyaGhjR1ZWZEdsc0xuTnZjblJDWVhObFpFOXVVR1Z5YlNoemFHRndaVUpsWm05eVpWQmxjbTBzSUhCbGNtMHBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lDQWdiM1YwY0hWMGN6b2dXM3RrYVcxek9pQnZkWFJ3ZFhSVGFHRndaU3dnWkdGMFlWUjVjR1U2SUdsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlgxZExGeHVJQ0FnSUNBZ0lDQmthWE53WVhSamFFZHliM1Z3T2lCN2VEb2dUV0YwYUM1alpXbHNLRzkxZEhCMWRGTnBlbVVnTHlBMk5DQXZLaUIzYjNKclozSnZkWEFnYzJsNlpTQXFMeWw5TEZ4dUlDQWdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE02WEc0Z0lDQWdJQ0FnSUNBZ0lDQmJlM1I1Y0dVNklFUmhkR0ZVZVhCbExuVnBiblF6TWl3Z1pHRjBZVG9nYjNWMGNIVjBVMmw2Wlgwc0lDNHVMbU55WldGMFpWUmxibk52Y2xOb1lYQmxWbUZ5YVdGaWJHVnpLSE5vWVhCbFFtVm1iM0psVUdWeWJTd2djMmhoY0dWQlpuUmxjbEJsY20wcFhTeGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZTeGNiaUFnSUNCblpYUlRhR0ZrWlhKVGIzVnlZMlVzWEc0Z0lIMDdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWkdWd2RHaFViMU53WVdObElEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJFWlhCMGFGUnZVM0JoWTJWQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUhaaGJHbGtZWFJsU1c1d2RYUnpLR052Ym5SbGVIUXVhVzV3ZFhSektUdGNiaUFnWTI5dWRHVjRkQzVqYjIxd2RYUmxLR055WldGMFpVUmxjSFJvVkc5VGNHRmpaVkJ5YjJkeVlXMUpibVp2S0dOdmJuUmxlSFF1YVc1d2RYUnpXekJkTENCaGRIUnlhV0oxZEdWektTazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnY0dGeWMyVkVaWEIwYUZSdlUzQmhZMlZCZEhSeWFXSjFkR1Z6SUQwZ0tHRjBkSEpwWW5WMFpYTTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lIVnVhMjV2ZDI0K0tUb2dSR1Z3ZEdoVWIxTndZV05sUVhSMGNtbGlkWFJsY3lBOVBseHVJQ0FnSUdOeVpXRjBaVUYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVNoN1hHNGdJQ0FnSUNCaWJHOWphM05wZW1VNklHRjBkSEpwWW5WMFpYTXVZbXh2WTJ0emFYcGxJR0Z6SUc1MWJXSmxjaXhjYmlBZ0lDQWdJRzF2WkdVNklHRjBkSEpwWW5WMFpYTXViVzlrWlNCaGN5QnpkSEpwYm1jc1hHNGdJQ0FnSUNCbWIzSnRZWFE2SUdGMGRISnBZblYwWlhNdVptOXliV0YwSUdGeklDZE9TRmRESnlCOElDZE9RMGhYSjF4dUlDQWdJSDBwTzF4dUlpd2dJaTh2SUVOdmNIbHlhV2RvZENBb1l5a2dUV2xqY205emIyWjBJRU52Y25CdmNtRjBhVzl1TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVMeThnVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUUxSlZDQk1hV05sYm5ObExseHVYRzVwYlhCdmNuUWdlMFJoZEdGVWVYQmxmU0JtY205dElDY3VMaTh1TGk4dUxpOTNZWE50TFdOdmJXMXZiaWM3WEc1cGJYQnZjblFnZTFSbGJuTnZjbFpwWlhkOUlHWnliMjBnSnk0dUx5NHVMM1JsYm5OdmNpMTJhV1YzSnp0Y2JtbHRjRzl5ZENCN1UyaGhjR1ZWZEdsc2ZTQm1jbTl0SUNjdUxpOHVMaTkxZEdsc0p6dGNibWx0Y0c5eWRDQjdRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1TENCamNtVmhkR1ZCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhsOUlHWnliMjBnSnk0dUwyRjBkSEpwWW5WMFpTMTNhWFJvTFdOaFkyaGxMV3RsZVNjN1hHNXBiWEJ2Y25RZ2UwTnZiWEIxZEdWRGIyNTBaWGgwTENCUWNtOW5jbUZ0U1c1bWJ5d2dVSEp2WjNKaGJWVnVhV1p2Y20xOUlHWnliMjBnSnk0dUwzUjVjR1Z6Snp0Y2JseHVhVzF3YjNKMElIdGpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5d2dhVzV3ZFhSV1lYSnBZV0pzWlN3Z2IzVjBjSFYwVm1GeWFXRmliR1VzSUZOb1lXUmxja2hsYkhCbGNuMGdabkp2YlNBbkxpOWpiMjF0YjI0bk8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRVZwYm5OMWJVRjBkSEpwWW5WMFpYTWdaWGgwWlc1a2N5QkJkSFJ5YVdKMWRHVlhhWFJvUTJGamFHVkxaWGtnZTF4dUlDQnlaV0ZrYjI1c2VTQmxjWFZoZEdsdmJqb2djM1J5YVc1bk8xeHVmVnh1THk4Z1ZHaGxJR1Z4ZFdGMGFXOXVJR0YwZEhKcFluVjBaU0IyWVd4MVpTQnBjeUJoSUhOMGNtbHVaeUIzYUdsamFDQmpiMjV6YVhOMGN5QnZaaUJzWldaMElHaGhibVFnYzJsa1pTQW9URWhUS1NCaGJtUWdiM0IwYVc5dVlXeHNlU0J5YVdkb2RDQm9ZVzVrSUhOcFpHVWdLRkpJVXlsY2JpOHZJSE5sY0dGeVlYUmxaQ0JpZVNBbkxUNG5MaUJGZUM0Z1hDSnBhaXhxYXlBdFBpQnBhMXdpSUdWNGNISmxjM05sY3lCdFlYUnlhWGdnYlhWc2RHbHdiR2xqWVhScGIyNWNiaTh2SUNBZ0lDQmNJbWxxTFQ1cWFWd2lJR1Y0Y0hKbGMzTmxjeUJ0WVhSeWFYZ2dkSEpoYm5Od2IzTmxYRzR2THlBZ0lDQWdJRndpYVdrdFBtbGNJaUJrYVdGbmIyNWhiQ0JsYkdWdFpXNTBjeUJ2WmlCaElITnhkV0Z5WlNCdFlYUnlhWGhjYmk4dklFeElVeUJqYjI1emFYTjBjeUJ2WmlCaElITmxjWFZsYm1ObElHOW1JSFJsY20xeklITmxjR0Z5WVhSbFpDQmllU0JqYjIxdFlYTXVJRVZoWTJnZ2RHVnliU0JqYjNKeVpYTndiMjVrY3lCMGJ5QmhiaUJwYm5CMWRDQjJZWEpwWVdKc1pTNWNiaTh2SUVWaFkyZ2djM2x0WW05c0lHTnZjbkpsYzNCdmJtUnpJSFJ2SUdFZ1pHbHRaVzV6YVc5dUlHbHVJSFJvWlNCcGJuQjFkQ0IyWVhKcFlXSnNaUzRnVkdobElITjViV0p2YkNCallXNGdZbVVnWldsMGFHVnlJR0VnYkdWMGRHVnlMQ0FuWVNjZ2RHOGdKM29uSUc5eUlDZEJKeUIwYjF4dUx5OGdKMW9uSUc5eUlDY3VMaTRuSUhSdklISmxjSEpsYzJWdWRDQmhjbUpwZEhKaGNua2daR2x0Wlc1emFXOXVjeTVjYmx4dVkyOXVjM1FnYzNsdFltOXNVR0YwZEdWeWJpQTlYRzRnSUNBZ0oxdGhMWHBCTFZwZGZGeGNYRnd1WEZ4Y1hDNWNYRnhjTGljN0lDQXZMeUJVYUdVZ2NHRjBkR1Z5YmlCbFlXTm9JSE41YldKdmJDQnBiaUJsWVdOb0lIUmxjbTBnYVc0Z2RHaGxJSE41YldKdmJHbGpJR1Z4ZFdGMGFXOXVJSE5vYjNWc1pDQnRZWFJqYUZ4dVkyOXVjM1FnZEdWeWJWQmhkSFJsY200Z1BTQW5LQ2NnS3lCemVXMWliMnhRWVhSMFpYSnVJQ3NnSnlrckp6c2dJQ0F2THlCVWFHVWdjR0YwZEdWeWJpQmxZV05vSUhSbGNtMGdhVzRnZEdobElITjViV0p2YkdsaklHVnhkV0YwYVc5dUlITm9iM1ZzWkNCdFlYUmphRnh1WTI5dWMzUWdkR1Z5YlZCaGRIUmxjbTVQYm14NUlEMGdKMTRuSUNzZ2RHVnliVkJoZEhSbGNtNGdLeUFuSkNjN0lDQXZMeUJVYUdVZ2NHRjBkR1Z5Ym5NZ2IyNXNlU0J0WVhSamFITWdZU0IwWlhKdElHSmxaMmx1SUhSdklHVnVaQzVjYm1OdmJuTjBJR3hvYzFCaGRIUmxjbTRnUFNBbktDY2dLeUIwWlhKdFVHRjBkR1Z5YmlBcklDY3NLU29uSUNzZ2RHVnliVkJoZEhSbGNtNDdJQ0F2THlCVWFHVWdjR0YwZEdWeWJpQjBhR1VnVEVoVElITm9iM1ZzWkNCdFlYUmphRnh1WTI5dWMzUWdiR2h6VUdGMGRHVnliazl1YkhrZ1BTQW5YaWNnS3lCc2FITlFZWFIwWlhKdUlDc2dKeVFuT3lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUZSb1pTQndZWFIwWlhKdWN5QnZibXg1SUcxaGRHTm9jeUJoSUV4SVV5QmlaV2RwYmlCMGJ5QmxibVF1WEc1Y2JtbHVkR1Z5Wm1GalpTQlRlVzFpYjJ4SmJtWnZJSHRjYmlBZ1kyOTFiblE2SUc1MWJXSmxjanNnSUNBZ0lDQWdJQ0FnSUM4dklGTjViV0p2YkNCamIzSnlaWE53YjI1a2FXNW5JSFJ2SUdFZ1pHbHRiV1Z1YzJsdmJpQnZaaUJoYmlCcGJuQjFkRnh1SUNCcGJuQjFkRWx1WkdsalpYTTZJRzUxYldKbGNsdGRPeUFnTHk4Z1RuVnRZbVZ5SUc5bUlHbHVjSFYwSUhaaGNtbGhZbXhsY3lCMGFHVWdjM2x0WW05c0lHTnZjbkpsYzNCdmJtUnpJSFJ2WEc0Z0lHUnBiVlpoYkhWbE9pQnVkVzFpWlhJN0lDQWdJQ0FnSUNBdkx5Qk9kVzFpWlhJZ2IyWWdaR2x0Wlc1emFXOXVjeUIwYUdVZ2MzbHRZbTlzSUdOdmNuSmxjM0J2Ym1SeklIUnZYRzU5WEc1Y2JtTnNZWE56SUVWcGJuTjFiVlJsY20wZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2locGJuQjFkRWx1WkdWNElEMGdMVEVwSUh0Y2JpQWdJQ0IwYUdsekxuTjViV0p2YkZSdlNXNWthV05sY3lBOUlHNWxkeUJOWVhBOGMzUnlhVzVuTENCdWRXMWlaWEpiWFQ0b0tUdGNiaUFnSUNCMGFHbHpMbWx1Y0hWMFNXNWtaWGdnUFNCcGJuQjFkRWx1WkdWNE8xeHVJQ0I5WEc1Y2JpQWdMeThnUVdSa0lHRWdjM2x0WW05c0lIUnZJSFJvWlNCMFpYSnRYRzRnSUdGa1pGTjViV0p2YkNoemVXMWliMnc2SUhOMGNtbHVaeXdnYVc1a1pYZzZJRzUxYldKbGNpa2dlMXh1SUNBZ0lHeGxkQ0IyWVd4MVpTQTlJSFJvYVhNdWMzbHRZbTlzVkc5SmJtUnBZMlZ6TG1kbGRDaHplVzFpYjJ3cE8xeHVJQ0FnSUdsbUlDaDJZV3gxWlNBOVBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0IyWVd4MVpTQTlJRnRwYm1SbGVGMDdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhaaGJIVmxMbkIxYzJnb2FXNWtaWGdwTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG5ONWJXSnZiRlJ2U1c1a2FXTmxjeTV6WlhRb2MzbHRZbTlzTENCMllXeDFaU2s3WEc0Z0lIMWNibHh1SUNCemVXMWliMnhVYjBsdVpHbGpaWE02SUUxaGNEeHpkSEpwYm1jc0lHNTFiV0psY2x0ZFBqc2dJQzh2SUUxaGNDQm1jbTl0SUhONWJXSnZiQ0IwYnlCa2FXMWxibk5wYjI1eklHOW1JSFJvWlNCcGJuQjFkQ0JqYjNKeVpYTndiMjVrYVc1bklIUnZJSFJvWlNCMFpYSnRYRzRnSUdsdWNIVjBTVzVrWlhnNklHNTFiV0psY2pzZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnTFRFZ1ptOXlJRzkxZEhCMWRDQmhibVFnTUN3Z01Td2dNaXdnTGk0dUlHWnZjaUJwYm5CMWRITmNibjFjYmx4dVkyeGhjM01nUldsdWMzVnRSWEYxWVhScGIyNGdlMXh1SUNCamIyNXpkSEoxWTNSdmNpaHBibkIxZEhNNklISmxZV1J2Ym14NUlGUmxibk52Y2xacFpYZGJYU3dnY0hWaWJHbGpJSEpsWVdSdmJteDVJR1Z4ZFdGMGFXOXVPaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQjBhR2x6TG1oaGMwVnNiR2x3YzJseklEMGdabUZzYzJVN1hHNGdJQ0FnZEdocGN5NXplVzFpYjJ4VWIwbHVabThnUFNCdVpYY2dUV0Z3UEhOMGNtbHVaeXdnVTNsdFltOXNTVzVtYno0b0tUdGNiaUFnSUNCMGFHbHpMbXhvY3lBOUlHNWxkeUJCY25KaGVUeEZhVzV6ZFcxVVpYSnRQaWdwTzF4dUlDQWdJSFJvYVhNdWIzVjBjSFYwUkdsdGN5QTlJRnRkTzF4dUlDQWdJQzh2SUVGeklISm9jeUJ1WldWa2N5QjBieUJpWlNCMWNHUmhkR1ZrSUdGc2JHOTNJSFZ6YVc1bklHeGxkQ0JwYm5OMFpXRmtJRzltSUdOdmJuTjBJR1p2Y2lCaWIzUm9JR3hvY3lCaGJtUWdjbWh6TGx4dUlDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0J3Y21WbVpYSXRZMjl1YzNSY2JpQWdJQ0JzWlhRZ1cyeG9jeXdnY21oelhTQTlJR1Z4ZFdGMGFXOXVMbWx1WTJ4MVpHVnpLQ2N0UGljcElEOGdaWEYxWVhScGIyNHVjM0JzYVhRb0p5MCtKeXdnTWlrZ09pQmJaWEYxWVhScGIyNHNJQ2NuWFR0Y2JpQWdJQ0JwWmlBb0lXeG9jeTV0WVhSamFDaFNaV2RGZUhBb2JHaHpVR0YwZEdWeWJrOXViSGtwS1NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkSmJuWmhiR2xrSUV4SVV5QjBaWEp0SnlrN1hHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElHbHVjSFYwVkdWeWJYTWdQU0JzYUhNdWMzQnNhWFFvSnl3bktUdGNiaUFnSUNCcGJuQjFkRlJsY20xekxtWnZja1ZoWTJnb0tHbHVjSFYwVkdWeWJTd2dhVzVrWlhncElEMCtJSHRjYmlBZ0lDQWdJR052Ym5OMElHUnBiWE1nUFNCcGJuQjFkSE5iYVc1a1pYaGRMbVJwYlhNdWMyeHBZMlVvS1R0Y2JpQWdJQ0FnSUdsbUlDZ2hhVzV3ZFhSVVpYSnRMbTFoZEdOb0tGSmxaMFY0Y0NoMFpYSnRVR0YwZEdWeWJrOXViSGtwS1NrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owbHVkbUZzYVdRZ1RFaFRJSFJsY20wbktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTnZibk4wSUdWcGJuTjFiVlJsY20wZ1BTQjBhR2x6TG5CeWIyTmxjM05VWlhKdEtHbHVjSFYwVkdWeWJTd2dkSEoxWlN3Z1pHbHRjeXdnYVc1a1pYZ3BPMXh1SUNBZ0lDQWdkR2hwY3k1c2FITXVjSFZ6YUNobGFXNXpkVzFVWlhKdEtUdGNiaUFnSUNCOUtUdGNibHh1SUNBZ0lDOHZJRWx1YVhScFlXeHBlbVVnZEdobElGSklVeUJwWmlCdWIzUWdjM0JsWTJsbWFXVmtYRzRnSUNBZ2FXWWdLSEpvY3lBOVBUMGdKeWNwSUh0Y2JpQWdJQ0FnSUM4dklFTnZibk4wY25WamRDQlNTRk1nWm5KdmJTQk1TRk1nZEdWeWJYTXZjM2x0WW05c2MxeHVJQ0FnSUNBZ2NtaHpJQ3M5SUZzdUxpNTBhR2x6TG5ONWJXSnZiRlJ2U1c1bWJ5NWxiblJ5YVdWektDbGRYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzVtYVd4MFpYSW9LRnR6ZVcwc0lHbHVabTlkS1NBOVBpQW9hVzVtYnk1amIzVnVkQ0E5UFQwZ01TQjhmQ0J6ZVcwZ1BUMDlJQ2N1TGk0bktTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMbTFoY0Nnb1czTjViVjBwSUQwK0lITjViU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTG1wdmFXNG9KeWNwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnBaaUFvSVhKb2N5NXRZWFJqYUNoU1pXZEZlSEFvZEdWeWJWQmhkSFJsY200cEtTa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1ZG1Gc2FXUWdVa2hUSnlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1EyOXRjSFYwWlNCdmRYUndkWFFnWkdsdGMxeHVJQ0FnSUdOdmJuTjBJSEpvYzFONWJXSnZiSE1nUFNCeWFITXViV0YwWTJnb1VtVm5SWGh3S0hONWJXSnZiRkJoZEhSbGNtNHNJQ2RuSnlrcE8xeHVJQ0FnSUhKb2MxTjViV0p2YkhNL0xtWnZja1ZoWTJnb0tITjViV0p2YkNrZ1BUNGdlMXh1SUNBZ0lDQWdhV1lnS0hONWJXSnZiQ0E5UFQwZ0p5NHVMaWNwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV2ZFhSd2RYUkVhVzF6SUQwZ2RHaHBjeTV2ZFhSd2RYUkVhVzF6TG1OdmJtTmhkQ2gwYUdsekxtVnNiR2x3YzJselJHbHRjeWs3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBibVp2SUQwZ2RHaHBjeTV6ZVcxaWIyeFViMGx1Wm04dVoyVjBLSE41YldKdmJDazdYRzRnSUNBZ0lDQWdJR2xtSUNocGJtWnZJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1ZG1Gc2FXUWdVa2hUSUhONWJXSnZiQ2NwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIUm9hWE11YjNWMGNIVjBSR2x0Y3k1d2RYTm9LR2x1Wm04dVpHbHRWbUZzZFdVcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwcE8xeHVJQ0FnSUhSb2FYTXVjbWh6SUQwZ2RHaHBjeTV3Y205alpYTnpWR1Z5YlNoeWFITXNJR1poYkhObExDQjBhR2x6TG05MWRIQjFkRVJwYlhNcE8xeHVJQ0I5SUNBdkx5QkZibVFnYjJZZ1JXbHVjM1Z0UlhGaGRHbHZiaUJqYjI1emRISjFZM1J2Y2x4dVhHNGdJQzh2SUVGa1pDQmhJSE41YldKdmJDQjBieUIwYUdVZ1pYRjFZWFJwYjI1Y2JpQWdZV1JrVTNsdFltOXNLSE41YldKdmJEb2djM1J5YVc1bkxDQmthVzFXWVd4MVpUb2diblZ0WW1WeUxDQnBibkIxZEVsdVpHVjRPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQnNaWFFnYVc1bWJ5QTlJSFJvYVhNdWMzbHRZbTlzVkc5SmJtWnZMbWRsZENoemVXMWliMndwTzF4dUlDQWdJR2xtSUNocGJtWnZJQ0U5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lHbG1JQ2hwYm1adkxtUnBiVlpoYkhWbElDRTlQU0JrYVcxV1lXeDFaU0FtSmlCcGJtWnZMbU52ZFc1MElDRTlQU0F4S1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblJHbHRaVzV6YVc5dUlHMXBjMjFoZEdOb0p5azdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnBibVp2TG1OdmRXNTBLeXM3WEc0Z0lDQWdJQ0FnSUdsdVptOHVhVzV3ZFhSSmJtUnBZMlZ6TG5CMWMyZ29hVzV3ZFhSSmJtUmxlQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHbHVabThnUFNCN1kyOTFiblE2SURFc0lHUnBiVlpoYkhWbExDQnBibkIxZEVsdVpHbGpaWE02SUZ0cGJuQjFkRWx1WkdWNFhYMDdYRzRnSUNBZ2ZWeHVJQ0FnSUhSb2FYTXVjM2x0WW05c1ZHOUpibVp2TG5ObGRDaHplVzFpYjJ3c0lHbHVabThwTzF4dUlDQjlYRzVjYmlBZ0x5OGdVSEp2WTJWemN5QnZibVVnYVc1d2RYUXZiM1YwY0hWMElIUmxjbTFjYmlBZ2NISnZZMlZ6YzFSbGNtMG9kR1Z5YlRvZ2MzUnlhVzVuTENCcGMwbHVjSFYwT2lCaWIyOXNaV0Z1TENCa2FXMXpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnYVc1a1pYZ2dQU0F0TVNrNklFVnBibk4xYlZSbGNtMGdlMXh1SUNBZ0lHTnZibk4wSUhKaGJtc2dQU0JrYVcxekxteGxibWQwYUR0Y2JpQWdJQ0JzWlhRZ1pXeHNhWEJ6YVhNZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0JzWlhRZ1pXeHNhWEJ6YVhORWFXMXpJRDBnVzEwN1hHNGdJQ0FnYkdWMElHNWxlSFJFYVcwZ1BTQXdPMXh1SUNBZ0lDOHZJRVp2Y2lCdmRYUndkWFFnWlcxd2RIa2djM1J5YVc1bklHbHpJR0ZzYkc5M1pXUWdZbVZqWVhWelpTQjBhR1VnYjNWMGNIVjBJRzFoZVNCaVpTQnlaV1IxWTJWa0lIUnZJR0VnYzJOaGJHRnlJSFpoYkhWbFhHNGdJQ0FnYVdZZ0tDRjBaWEp0TG0xaGRHTm9LRkpsWjBWNGNDaDBaWEp0VUdGMGRHVnliazl1YkhrcEtTQW1KaUFvSVdselNXNXdkWFFnSmlZZ2RHVnliU0FoUFQwZ0p5Y3BLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1ZG1Gc2FXUWdURWhUSUhSbGNtMG5LVHRjYmlBZ0lDQjlYRzRnSUNBZ1kyOXVjM1FnYVc1a1pYaFRlVzFpYjJ4eklEMGdkR1Z5YlM1dFlYUmphQ2hTWldkRmVIQW9jM2x0WW05c1VHRjBkR1Z5Yml3Z0oyY25LU2s3WEc0Z0lDQWdZMjl1YzNRZ1pXbHVjM1Z0VkdWeWJTQTlJRzVsZHlCRmFXNXpkVzFVWlhKdEtHbHVaR1Y0S1R0Y2JpQWdJQ0F2THlCemVXMWliMndnWTJGdUlHSmxJR1ZwZEdobGNpQmhJR3hsZEhSeVpTd2dKMkVuSUhSdklDZDZKeUJ2Y2lBblFTY2dkRzhnSjFvbkxDQnZjaUFuTGk0dUoxeHVJQ0FnSUdsdVpHVjRVM2x0WW05c2N6OHVabTl5UldGamFDZ29jM2x0WW05c09pQnpkSEpwYm1jc0lHazZJRzUxYldKbGNpa2dQVDRnZTF4dUlDQWdJQ0FnYVdZZ0tITjViV0p2YkNBOVBUMGdKeTR1TGljcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0dWc2JHbHdjMmx6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFBibXg1SUc5dVpTQmxiR3hwY0hOcGN5QnBjeUJoYkd4dmQyVmtJSEJsY2lCcGJuQjFkQ0IwWlhKdEp5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWld4c2FYQnphWE1nUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmxiR3hwY0hOcGMwUnBiVXhsYm1kMGFDQTlJSEpoYm1zZ0xTQnBibVJsZUZONWJXSnZiSE11YkdWdVozUm9JQ3NnTVR0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1ZzYkdsd2MybHpSR2x0VEdWdVozUm9JRHdnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25SV3hzYVhCemFYTWdiM1YwSUc5bUlHSnZkVzVrY3ljcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR1ZzYkdsd2MybHpSR2x0Y3lBOUlHUnBiWE11YzJ4cFkyVW9ibVY0ZEVScGJTd2dibVY0ZEVScGJTQXJJR1ZzYkdsd2MybHpSR2x0VEdWdVozUm9LVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YUdGelJXeHNhWEJ6YVhNcElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTVsYkd4cGNITnBjMFJwYlhNdWJHVnVaM1JvSUNFOVBTQmxiR3hwY0hOcGMwUnBiWE11YkdWdVozUm9JSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVpXeHNhWEJ6YVhORWFXMXpMblJ2VTNSeWFXNW5LQ2tnSVQwOUlHVnNiR2x3YzJselJHbHRjeTUwYjFOMGNtbHVaeWdwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFZzYkdsd2MybHpJR1JwYldWdWMybHZibk1nYldsemJXRjBZMmduS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvYVhOSmJuQjFkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11YUdGelJXeHNhWEJ6YVhNZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Wld4c2FYQnphWE5FYVcxeklEMGdaV3hzYVhCemFYTkVhVzF6TzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblJXeHNhWEJ6YVhNZ2JYVnpkQ0JpWlNCemNHVmphV1pwWldRZ2FXNGdkR2hsSUV4SVV5Y3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUM4dklFRmtaQ0FuTUNjc0lDY3hKeXdnSnpJbkxDQW5NeWNzSUNjMEp5d2daWFJqSUhSdklISmxjSEpsYzJWdWRDQmxiR3hwY0hOcGN5QmthVzFsYm5OcGIyNXpJSFJ2SUdGMmIybGtJSE53WldOcFlXd2dhR0Z1Wkd4cGJtZGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhaUE5SURBN0lHb2dQQ0JsYkd4cGNITnBjMFJwYlhNdWJHVnVaM1JvT3lCcUt5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J6ZVcxaWIyd2dQU0JUZEhKcGJtY3Vabkp2YlVOb1lYSkRiMlJsS0Njd0p5NWphR0Z5UTI5a1pVRjBLREFwSUNzZ2FpazdYRzRnSUNBZ0lDQWdJQ0FnWldsdWMzVnRWR1Z5YlM1aFpHUlRlVzFpYjJ3b2MzbHRZbTlzTENCcElDc2dhaWs3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVoWkdSVGVXMWliMndvYzNsdFltOXNMQ0JrYVcxelcyNWxlSFJFYVcwcksxMHNJR2x1WkdWNEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdaV2x1YzNWdFZHVnliUzVoWkdSVGVXMWliMndvYzNsdFltOXNMQ0JwSUNzZ0tIUm9hWE11YUdGelJXeHNhWEJ6YVhNZ1B5QjBhR2x6TG1Wc2JHbHdjMmx6UkdsdGN5NXNaVzVuZEdnZ0xTQXhJRG9nTUNrcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1Ga1pGTjViV0p2YkNoemVXMWliMndzSUdScGJYTmJibVY0ZEVScGJTc3JYU3dnYVc1a1pYZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHBPMXh1SUNBZ0lISmxkSFZ5YmlCbGFXNXpkVzFVWlhKdE8xeHVJQ0I5WEc1Y2JpQWdjM2x0WW05c1ZHOUpibVp2T2lCTllYQThjM1J5YVc1bkxDQlRlVzFpYjJ4SmJtWnZQanNnSUM4dklFRnNiQ0J6ZVcxaWIyeHpJR2x1SUhSb1pTQmxjWFZoZEdsdmJseHVJQ0JvWVhORmJHeHBjSE5wY3pvZ1ltOXZiR1ZoYmpzZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdWR2hsSUdWeGRXRjBhVzl1SUdoaGN5QmxiR3hwY0hOcGN5QnZjaUJ1YjNSY2JpQWdaV3hzYVhCemFYTkVhVzF6T2lCdWRXMWlaWEpiWFRzZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklGUm9aU0JrYVcxbGJuTnBiMjV6SUc5bUlIUm9aU0JsY1hWaGRHbHZiaUJsYkd4cGNITnBjeUJqYjNKeVpYTndiMjVrY3lCMGJ5NWNiaUFnYkdoek9pQkZhVzV6ZFcxVVpYSnRXMTA3SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRlJsY20xeklHOXVJSFJvWlNCc1pXWjBMV2hoYm1RZ2MybGtaU0J2WmlCMGFHVWdaWEYxWVhScGIyNWNiaUFnY21oek9pQkZhVzV6ZFcxVVpYSnRPeUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRlJsY20wZ2IyNGdkR2hsSUhKcFoyaDBMV2hoYm1RZ2MybGtaU0J2WmlCMGFHVWdaWEYxWVhScGIyNWNiaUFnYjNWMGNIVjBSR2x0Y3pvZ2JuVnRZbVZ5VzEwN0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRTkxZEhCMWRDQmthVzFsYm5OcGIyNXpJRzltSUhSb1pTQmxjWFZoZEdsdmJseHVmU0FnTHk4Z1JXNWtJRzltSUdOc1lYTnpJRVZwYm5OMWJVVnhkV0YwYVc5dVhHNWNibU52Ym5OMElHRndjR1Z1WkUxaGVDQTlJQ2h1WVcxbE9pQnpkSEpwYm1jcE9pQnpkSEpwYm1jZ1BUNGdibUZ0WlNBcklDZGZiV0Y0Snp0Y2JseHVZMjl1YzNRZ1kzSmxZWFJsUldsdWMzVnRVSEp2WjNKaGJVbHVabThnUFZ4dUlDQWdJQ2hwYm5CMWRGTm9ZWEJsY3pvZ1FYSnlZWGs4Y21WaFpHOXViSGtnYm5WdFltVnlXMTArTENCa1lYUmhWSGx3WlRvZ2JuVnRZbVZ5TENCbGFXNXpkVzFGY1hWaGRHbHZiam9nUldsdWMzVnRSWEYxWVhScGIyNHNYRzRnSUNBZ0lHOTFkSEIxZEZOb1lYQmxPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU2s2SUZCeWIyZHlZVzFKYm1adklEMCtJSHRjYmlBZ0lDQWdJR052Ym5OMElISmhibXR6SUQwZ2FXNXdkWFJUYUdGd1pYTXViV0Z3S0Noa2FXMXpLU0E5UGlCa2FXMXpMbXhsYm1kMGFDazdYRzRnSUNBZ0lDQmpiMjV6ZENCcGJuQjFkRlpoY25NZ1BTQnlZVzVyY3k1dFlYQW9LSEpoYm1zc0lHbHVaR1Y0S1NBOVBpQnBibkIxZEZaaGNtbGhZbXhsS0dCcGJuQjFkQ1I3YVc1a1pYaDlZQ3dnWkdGMFlWUjVjR1VzSUhKaGJtc3BLVHRjYmlBZ0lDQWdJR052Ym5OMElHOTFkSEIxZEZOcGVtVWdQU0JUYUdGd1pWVjBhV3d1YzJsNlpTaHZkWFJ3ZFhSVGFHRndaU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQnZkWFJ3ZFhRZ1BTQnZkWFJ3ZFhSV1lYSnBZV0pzWlNnbmIzVjBjSFYwSnl3Z1pHRjBZVlI1Y0dVc0lHOTFkSEIxZEZOb1lYQmxMbXhsYm1kMGFDazdYRzRnSUNBZ0lDQmpiMjV6ZENCMWJtbG1iM0p0YzFONWJXSnZiSE1nUFZ4dUlDQWdJQ0FnSUNBZ0lGc3VMaTVsYVc1emRXMUZjWFZoZEdsdmJpNXplVzFpYjJ4VWIwbHVabTh1YTJWNWN5Z3BYUzVtYVd4MFpYSW9LSE41YldKdmJDa2dQVDRnSVdWcGJuTjFiVVZ4ZFdGMGFXOXVMbkpvY3k1emVXMWliMnhVYjBsdVpHbGpaWE11YUdGektITjViV0p2YkNrcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxJRDBnS0hOb1lXUmxja2hsYkhCbGNqb2dVMmhoWkdWeVNHVnNjR1Z5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHbGtlRU52Y0hrNklITjBjbWx1WjF0ZElEMGdXMTA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2x1YVhSUWNtOWtJRDBnSjNaaGNpQndjbTlrSUQwZ01TNHdPeWM3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2x1YVhSVGRXMGdQU0FuZG1GeUlITjFiU0E5SURBdU1Ec25PMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjFjR1JoZEdWVGRXMGdQU0FuYzNWdElDczlJSEJ5YjJRN0p6dGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NtVmtkV05sVDNCelUyVjBTVzVrYVdObGN6b2djM1J5YVc1blcxMGdQU0JiWFR0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY21Wa2RXTmxUM0J6VEc5dmNFaGxZV1JsY25NNklITjBjbWx1WjF0ZElEMGdXMTA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsWkhWalpVOXdjMHh2YjNCR2IyOTBaWEp6T2lCemRISnBibWRiWFNBOUlGdGRPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaV1IxWTJWUGNFTnZiWEIxZEdVNklITjBjbWx1WjF0ZElEMGdXMTA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2x6VW1Wa2RXTmxUM0J6VjJsMGFHOTFkRXh2YjNBZ1BTQmxhVzV6ZFcxRmNYVmhkR2x2Ymk1emVXMWliMnhVYjBsdVptOHVjMmw2WlNBOVBUMGdaV2x1YzNWdFJYRjFZWFJwYjI0dWNtaHpMbk41YldKdmJGUnZTVzVrYVdObGN5NXphWHBsTzF4dUlDQWdJQ0FnSUNCbGFXNXpkVzFGY1hWaGRHbHZiaTV6ZVcxaWIyeFViMGx1Wm04dVptOXlSV0ZqYUNnb2FXNW1ieXdnYzNsdFltOXNLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dWcGJuTjFiVVZ4ZFdGMGFXOXVMbkpvY3k1emVXMWliMnhVYjBsdVpHbGpaWE11YUdGektITjViV0p2YkNrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRzkxZEhCMWRFbHVaR1Y0SUQwZ1pXbHVjM1Z0UlhGMVlYUnBiMjR1Y21oekxuTjViV0p2YkZSdlNXNWthV05sY3k1blpYUW9jM2x0WW05c0tUOHVXekJkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0c5MWRIQjFkRWx1WkdWNElDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWldsdWMzVnRSWEYxWVhScGIyNHViR2h6TG1admNrVmhZMmdvS0hSbGNtMHNJR2twSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYVc1bWJ5NXBibkIxZEVsdVpHbGpaWE11YVc1amJIVmtaWE1vYVNrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHbHVaR2xqWlhNZ1BTQjBaWEp0TG5ONWJXSnZiRlJ2U1c1a2FXTmxjeTVuWlhRb2MzbHRZbTlzS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwYm1ScFkyVnpJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RKYm5aaGJHbGtJSE41YldKdmJDQmxjbkp2Y2ljcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVc1a2FXTmxjeTVtYjNKRllXTm9LQ2hwYm1SbGVDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaSGhEYjNCNUxuQjFjMmdvWUNSN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJuQjFkRlpoY25OYmFWMHVhVzVrYVdObGMxTmxkQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCZ2FXNXdkWFFrZTJsOVNXNWthV05sYzJBc0lHbHVaR1Y0TENCdmRYUndkWFF1YVc1a2FXTmxjMGRsZENnbmIzVjBjSFYwU1c1a2FXTmxjeWNzSUc5MWRIQjFkRWx1WkdWNEtTbDlZQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGFXNXpkVzFGY1hWaGRHbHZiaTVzYUhNdVptOXlSV0ZqYUNnb2RHVnliU3dnYVNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYVc1bWJ5NXBibkIxZEVsdVpHbGpaWE11YVc1amJIVmtaWE1vYVNrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCcGJtUnBZMlZ6SUQwZ2RHVnliUzV6ZVcxaWIyeFViMGx1WkdsalpYTXVaMlYwS0hONWJXSnZiQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbHVaR2xqWlhNZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkSmJuWmhiR2xrSUhONWJXSnZiQ0JsY25KdmNpY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm1ScFkyVnpMbVp2Y2tWaFkyZ29LR2x1WkdWNEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpXUjFZMlZQY0hOVFpYUkpibVJwWTJWekxuQjFjMmdvWUNSN2FXNXdkWFJXWVhKelcybGRMbWx1WkdsalpYTlRaWFFvWUdsdWNIVjBKSHRwZlVsdVpHbGpaWE5nTENCcGJtUmxlQ3dnWUNSN2MzbHRZbTlzZldBcGZXQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFpIVmpaVTl3UTI5dGNIVjBaUzV3ZFhOb0tHQndjbTlrSUNvOUlDUjdhVzV3ZFhSV1lYSnpXMmxkTG1kbGRFSjVTVzVrYVdObGN5aGdhVzV3ZFhRa2UybDlTVzVrYVdObGMyQXBmVHRnS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaV1IxWTJWUGNITk1iMjl3U0dWaFpHVnljeTV3ZFhOb0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHQm1iM0lvZG1GeUlDUjdjM2x0WW05c2ZUb2dkVE15SUQwZ01Ec2dKSHR6ZVcxaWIyeDlJRHdnZFc1cFptOXliWE11Skh0aGNIQmxibVJOWVhnb2MzbHRZbTlzS1gwN0lDUjdjM2x0WW05c2ZTc3JLU0I3WUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WldSMVkyVlBjSE5NYjI5d1JtOXZkR1Z5Y3k1d2RYTm9LQ2Q5SnlrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY21Wa2RXTmxUM0J6SUQwZ2FYTlNaV1IxWTJWUGNITlhhWFJvYjNWMFRHOXZjQ0EvWEc0Z0lDQWdJQ0FnSUNBZ0lDQmJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDNHVMbWxrZUVOdmNIa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHQnNaWFFnYzNWdElEMGdKSHRwYm5CMWRGWmhjbk11YldGd0tDaHBibkIxZEZaaGNpd2dhU2tnUFQ0Z2FXNXdkWFJXWVhJdVoyVjBRbmxKYm1ScFkyVnpLR0JwYm5CMWRDUjdhWDFKYm1ScFkyVnpZQ2twTG1wdmFXNG9KeUFxSUNjcGZUdGdYRzRnSUNBZ0lDQWdJQ0FnSUNCZElEcGNiaUFnSUNBZ0lDQWdJQ0FnSUZ0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTGk0dWFXUjRRMjl3ZVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYVc1cGRGTjFiU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdMaTR1Y21Wa2RXTmxUM0J6VEc5dmNFaGxZV1JsY25Nc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUM0dUxuSmxaSFZqWlU5d2MxTmxkRWx1WkdsalpYTXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHVhWFJRY205a0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBdUxpNXlaV1IxWTJWUGNFTnZiWEIxZEdVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhWd1pHRjBaVk4xYlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTGk0dWNtVmtkV05sVDNCelRHOXZjRVp2YjNSbGNuTXNYRzRnSUNBZ0lDQWdJQ0FnSUNCZE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lGeHVJQ0FnSUNBZ0lDQWdJQ0FnSkh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5vWVdSbGNraGxiSEJsY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM1eVpXZHBjM1JsY2xWdWFXWnZjbTF6S0hWdWFXWnZjbTF6VTNsdFltOXNjeTV0WVhBb0tITjViV0p2YkNrZ1BUNGdLSHR1WVcxbE9pQmdKSHRoY0hCbGJtUk5ZWGdvYzNsdFltOXNLWDFnTENCMGVYQmxPaUFuZFRNeUozMHBLU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F1Y21WbmFYTjBaWEpWYm1sbWIzSnRLQ2R2ZFhSd2RYUlRhWHBsSnl3Z0ozVXpNaWNwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTG1SbFkyeGhjbVZXWVhKcFlXSnNaWE1vTGk0dWFXNXdkWFJXWVhKekxDQnZkWFJ3ZFhRcGZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV0WVdsdVUzUmhjblFvS1gxY2JpQWdJQ0FnSUNBZ0lDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxtZDFZWEprUVdkaGFXNXpkRTkxZEU5bVFtOTFibVJ6VjI5eWEyZHliM1Z3VTJsNlpYTW9KM1Z1YVdadmNtMXpMbTkxZEhCMWRGTnBlbVVuS1gxY2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCdmRYUndkWFJKYm1ScFkyVnpJRDBnSkh0dmRYUndkWFF1YjJabWMyVjBWRzlKYm1ScFkyVnpLQ2RuYkc5aVlXeGZhV1I0SnlsOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSkh0cGJuQjFkRlpoY25NdWJXRndLQ2hmZG1GeUxDQnBLU0E5UGlCZ2RtRnlJR2x1Y0hWMEpIdHBmVWx1WkdsalpYTTZJQ1I3YVc1d2RYUldZWEp6VzJsZExuUjVjR1V1YVc1a2FXTmxjMzA3WUNrdWFtOXBiaWduWEZ4dUp5bDlYRzRnSUNBZ0lDQWdJQ0FnSUNBa2UzSmxaSFZqWlU5d2N5NXFiMmx1S0NkY1hHNG5LWDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWtlMjkxZEhCMWRDNXpaWFJDZVU5bVpuTmxkQ2duWjJ4dlltRnNYMmxrZUNjc0lDZHpkVzBuS1gwN1hHNGdJQ0FnSUNBZ0lDQWdmV0E3WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnYm1GdFpUb2dKMFZwYm5OMWJTY3NYRzRnSUNBZ0lDQWdJSE5vWVdSbGNrTmhZMmhsT2lCN2FHbHVkRG9nWldsdWMzVnRSWEYxWVhScGIyNHVaWEYxWVhScGIyNHNJR2x1Y0hWMFJHVndaVzVrWlc1amFXVnpPaUJwYm5CMWRGTm9ZWEJsY3k1dFlYQW9LQ2tnUFQ0Z0ozSmhibXNuS1gwc1hHNGdJQ0FnSUNBZ0lHZGxkRkoxYmtSaGRHRTZJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCVWFHVWdjM2x0WW05c2N5Qm1jbTl0SUhWdWFXWnZjbTFUZVcxaWIyeHpJR0Z5Y21GNUlHRnlaU0JuZFdGeVlXNTBaV1ZrSUhSdklHVjRhWE4wSUdsdUlHVnBibk4xYlVWeGRXRjBhVzl1Y3k1emVXMWliMnhVYjBsdVptOGdiV0Z3TGlCVWFHVmNiaUFnSUNBZ0lDQWdJQ0F2THlCbWFXeDBaWElnYVhNZ1lXUmtaV1FnZEc4Z2JXRnJaU0J6ZFhKbElIUm9ZWFFnWkdsdFZtRnNkV1VnYVhNZ2JtVjJaWElnTUM1Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCd2NtOW5jbUZ0Vlc1cFptOXliWE5KYm1sME9pQlFjbTluY21GdFZXNXBabTl5YlZ0ZElEMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RXNXBabTl5YlhOVGVXMWliMnh6TG1acGJIUmxjaWdvYzNsdFltOXNLU0E5UGlCbGFXNXpkVzFGY1hWaGRHbHZiaTV6ZVcxaWIyeFViMGx1Wm04dWFHRnpLSE41YldKdmJDa3BYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F1YldGd0tGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNoemVXMWliMndwSUQwK1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDaDdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJsYVc1emRXMUZjWFZoZEdsdmJpNXplVzFpYjJ4VWIwbHVabTh1WjJWMEtITjViV0p2YkNrL0xtUnBiVlpoYkhWbElIeDhJREI5S1NrN1hHNGdJQ0FnSUNBZ0lDQWdjSEp2WjNKaGJWVnVhV1p2Y20xelNXNXBkQzV3ZFhOb0tIdDBlWEJsT2lCRVlYUmhWSGx3WlM1MWFXNTBNeklzSUdSaGRHRTZJRzkxZEhCMWRGTnBlbVY5S1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCd2NtOW5jbUZ0Vlc1cFptOXliWE02SUZCeWIyZHlZVzFWYm1sbWIzSnRXMTBnUFZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm5CMWRGTm9ZWEJsY3k1dFlYQW9LR1JwYlhNc0lGOHBJRDArSUZzdUxpNWpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5aGthVzF6S1YwcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVjbVZrZFdObEtDaGhZMk1zSUdsdWNIVjBVSEp2WjNKaGJWVnVhV1p2Y20xektTQTlQaUJoWTJNdVkyOXVZMkYwS0dsdWNIVjBVSEp2WjNKaGJWVnVhV1p2Y20xektTd2djSEp2WjNKaGJWVnVhV1p2Y20xelNXNXBkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2NISnZaM0poYlZWdWFXWnZjbTF6TG5CMWMyZ29MaTR1WTNKbFlYUmxWR1Z1YzI5eVUyaGhjR1ZXWVhKcFlXSnNaWE1vYjNWMGNIVjBVMmhoY0dVcEtUdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHOTFkSEIxZEhNNklGdDdaR2x0Y3pvZ2IzVjBjSFYwVTJoaGNHVXNJR1JoZEdGVWVYQmxmVjBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmthWE53WVhSamFFZHliM1Z3T2lCN2VEb2dUV0YwYUM1alpXbHNLRzkxZEhCMWRGTnBlbVVnTHlBMk5DQXZLaUIzYjNKclozSnZkWEFnYzJsNlpTQXFMeWw5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjSEp2WjNKaGJWVnVhV1p2Y20xelhHNGdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lHZGxkRk5vWVdSbGNsTnZkWEpqWlN4Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdWcGJuTjFiU0E5SUNoamIyNTBaWGgwT2lCRGIyMXdkWFJsUTI5dWRHVjRkQ3dnWVhSMGNtbGlkWFJsY3pvZ1JXbHVjM1Z0UVhSMGNtbGlkWFJsY3lrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JqYjI1emRDQmxhVzV6ZFcxRmNYVmhkR2x2YmlBOUlHNWxkeUJGYVc1emRXMUZjWFZoZEdsdmJpaGpiMjUwWlhoMExtbHVjSFYwY3l3Z1lYUjBjbWxpZFhSbGN5NWxjWFZoZEdsdmJpazdYRzRnSUdOdmJuTjBJRzkxZEhCMWRGTm9ZWEJsSUQwZ1pXbHVjM1Z0UlhGMVlYUnBiMjR1YjNWMGNIVjBSR2x0Y3p0Y2JpQWdZMjl1YzNRZ2FXNXdkWFJUYUdGd1pYTWdQU0JqYjI1MFpYaDBMbWx1Y0hWMGN5NXRZWEFvS0dsdWNIVjBMQ0JmS1NBOVBpQnBibkIxZEM1a2FXMXpLVHRjYmlBZ1kyOXVkR1Y0ZEM1amIyMXdkWFJsS0dOeVpXRjBaVVZwYm5OMWJWQnliMmR5WVcxSmJtWnZLR2x1Y0hWMFUyaGhjR1Z6TENCamIyNTBaWGgwTG1sdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlN3Z1pXbHVjM1Z0UlhGMVlYUnBiMjRzSUc5MWRIQjFkRk5vWVhCbEtTazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnY0dGeWMyVkZhVzV6ZFcxQmRIUnlhV0oxZEdWeklEMGdLR0YwZEhKcFluVjBaWE02SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSFZ1YTI1dmQyNCtLVG9nUldsdWMzVnRRWFIwY21saWRYUmxjeUE5UGlCN1hHNGdJR052Ym5OMElHVnhkV0YwYVc5dUlEMGdLR0YwZEhKcFluVjBaWE11WlhGMVlYUnBiMjRnWVhNZ2MzUnlhVzVuS1M1eVpYQnNZV05sS0M5Y1hITXJMMmNzSUNjbktUdGNiaUFnY21WMGRYSnVJR055WldGMFpVRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlU2g3WlhGMVlYUnBiMjU5S1R0Y2JuMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1JHRjBZVlI1Y0dWOUlHWnliMjBnSnk0dUx5NHVMeTR1TDNkaGMyMHRZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdWR1Z1YzI5eVZtbGxkMzBnWm5KdmJTQW5MaTR2TGk0dmRHVnVjMjl5TFhacFpYY25PMXh1YVcxd2IzSjBJSHRUYUdGd1pWVjBhV3g5SUdaeWIyMGdKeTR1THk0dUwzVjBhV3duTzF4dWFXMXdiM0owSUh0RGIyMXdkWFJsUTI5dWRHVjRkQ3dnVUhKdlozSmhiVWx1Wm04c0lGQnliMmR5WVcxVmJtbG1iM0p0ZlNCbWNtOXRJQ2N1TGk5MGVYQmxjeWM3WEc1Y2JtbHRjRzl5ZENCN1kzSmxZWFJsVkdWdWMyOXlVMmhoY0dWV1lYSnBZV0pzWlhNc0lHbHVjSFYwVm1GeWFXRmliR1VzSUc5MWRIQjFkRlpoY21saFlteGxMQ0JUYUdGa1pYSklaV3h3WlhKOUlHWnliMjBnSnk0dlkyOXRiVzl1Snp0Y2JseHVZMjl1YzNRZ2RtRnNhV1JoZEdWSmJuQjFkSE1nUFNBb2FXNXdkWFJ6T2lCeVpXRmtiMjVzZVNCVVpXNXpiM0pXYVdWM1cxMHBPaUIyYjJsa0lEMCtJSHRjYmlBZ2FXWWdLQ0ZwYm5CMWRITWdmSHdnYVc1d2RYUnpMbXhsYm1kMGFDQWhQVDBnTWlrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduUlhod1lXNWtJSEpsY1hWcGNtVnpJRElnYVc1d2RYUXVKeWs3WEc0Z0lIMWNiaUFnWTI5dWMzUWdhVzV3ZFhSVGFHRndaU0E5SUdsdWNIVjBjMXN3WFM1a2FXMXpPMXh1SUNCamIyNXpkQ0J6YUdGd1pTQTlJRUZ5Y21GNUxtWnliMjBvYVc1d2RYUnpXekZkTG1kbGRFSnBaMGx1ZERZMFFYSnlZWGtvS1N3Z1RuVnRZbVZ5S1R0Y2JseHVJQ0JzWlhRZ2MyaGhjR1ZKYm1SbGVDQTlJSE5vWVhCbExteGxibWQwYUNBOElHbHVjSFYwVTJoaGNHVXViR1Z1WjNSb0lEOGdNQ0E2SUhOb1lYQmxMbXhsYm1kMGFDQXRJR2x1Y0hWMFUyaGhjR1V1YkdWdVozUm9PMXh1SUNCc1pYUWdhVzV3ZFhSVGFHRndaVWx1WkdWNElEMGdhVzV3ZFhSVGFHRndaUzVzWlc1bmRHZ2dQQ0J6YUdGd1pTNXNaVzVuZEdnZ1B5QXdJRG9nYVc1d2RYUlRhR0Z3WlM1c1pXNW5kR2dnTFNCemFHRndaUzVzWlc1bmRHZzdYRzRnSUdadmNpQW9PeUJ6YUdGd1pVbHVaR1Y0SUR3Z2MyaGhjR1V1YkdWdVozUm9JQ1ltSUdsdWNIVjBVMmhoY0dWSmJtUmxlQ0E4SUdsdWNIVjBVMmhoY0dVdWJHVnVaM1JvT3lBckszTm9ZWEJsU1c1a1pYZ3NJQ3NyYVc1d2RYUlRhR0Z3WlVsdVpHVjRLU0I3WEc0Z0lDQWdhV1lnS0hOb1lYQmxXM05vWVhCbFNXNWtaWGhkSUNFOVBTQnBibkIxZEZOb1lYQmxXMmx1Y0hWMFUyaGhjR1ZKYm1SbGVGMGdKaVlnYzJoaGNHVmJjMmhoY0dWSmJtUmxlRjBnSVQwOUlERWdKaVpjYmlBZ0lDQWdJQ0FnYVc1d2RYUlRhR0Z3WlZ0cGJuQjFkRk5vWVhCbFNXNWtaWGhkSUNFOVBTQXhLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFY0Y0dGdVpDQnlaWEYxYVhKbGN5QnphR0Z3WlNCMGJ5QmlaU0JpY205aFpHTmhjM1JoWW14bElIUnZJR2x1Y0hWMEp5azdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OU8xeHVYRzVqYjI1emRDQm5aWFJCWkdwMWMzUmxaRk5vWVhCbElEMGdLSE5vWVhCbE1Ub2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHNJSE5vWVhCbE1qb2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJ1ZFcxaVpYSmJYU0E5UGlCN1hHNGdJR052Ym5OMElHUnBabVlnUFNCemFHRndaVEV1YkdWdVozUm9JQzBnYzJoaGNHVXlMbXhsYm1kMGFEdGNiaUFnWTI5dWMzUWdjMmhoY0dVNklHNTFiV0psY2x0ZElEMGdXMTA3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2daR2xtWmpzZ0t5dHBLU0I3WEc0Z0lDQWdjMmhoY0dVdWNIVnphQ2h6YUdGd1pURmJhVjBwTzF4dUlDQjlYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2MyaGhjR1V5TG14bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ2MyaGhjR1V1Y0hWemFDaHphR0Z3WlRKYmFWMGdQVDA5SURFZ1B5QnphR0Z3WlRGYmFTQXJJR1JwWm1aZElEb2djMmhoY0dVeVcybGRLVHRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdjMmhoY0dVN1hHNTlPMXh1WEc1amIyNXpkQ0JqWVd4amRXeGhkR1ZQZFhSd2RYUlRhR0Z3WlNBOUlDaHBibkIxZEZOb1lYQmxPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnYzJoaGNHVTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRLVG9nYm5WdFltVnlXMTBnUFQ1Y2JpQWdJQ0FvYVc1d2RYUlRhR0Z3WlM1c1pXNW5kR2dnUGlCemFHRndaUzVzWlc1bmRHZ3BJRDhnWjJWMFFXUnFkWE4wWldSVGFHRndaU2hwYm5CMWRGTm9ZWEJsTENCemFHRndaU2tnT2lCblpYUkJaR3AxYzNSbFpGTm9ZWEJsS0hOb1lYQmxMQ0JwYm5CMWRGTm9ZWEJsS1R0Y2JseHVYRzVqYjI1emRDQmpjbVZoZEdWRmVIQmhibVJRY205bmNtRnRTVzVtYnlBOUlDaHBibkIxZEhNNklISmxZV1J2Ym14NUlGUmxibk52Y2xacFpYZGJYU2s2SUZCeWIyZHlZVzFKYm1adklEMCtJSHRjYmlBZ1kyOXVjM1FnYVc1d2RYUlRhR0Z3WlNBOUlHbHVjSFYwYzFzd1hTNWthVzF6TzF4dUlDQmpiMjV6ZENCemFHRndaU0E5SUVGeWNtRjVMbVp5YjIwb2FXNXdkWFJ6V3pGZExtZGxkRUpwWjBsdWREWTBRWEp5WVhrb0tTd2dUblZ0WW1WeUtUdGNiaUFnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1U2SUc1MWJXSmxjbHRkSUQwZ1kyRnNZM1ZzWVhSbFQzVjBjSFYwVTJoaGNHVW9hVzV3ZFhSVGFHRndaU3dnYzJoaGNHVXBPMXh1SUNCamIyNXpkQ0JrWVhSaFZIbHdaU0E5SUdsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlR0Y2JpQWdZMjl1YzNRZ1kyOXRjRzl1Wlc1MGN5QTlJR1JoZEdGVWVYQmxJRDA5UFNCRVlYUmhWSGx3WlM1aWIyOXNJRDhnTkNBNklERTdYRzRnSUdOdmJuTjBJRzkxZEhCMWRGTnBlbVVnUFNCTllYUm9MbU5sYVd3b1UyaGhjR1ZWZEdsc0xuTnBlbVVvYjNWMGNIVjBVMmhoY0dVcElDOGdZMjl0Y0c5dVpXNTBjeWs3WEc1Y2JpQWdZMjl1YzNRZ1oyVjBVMmhoWkdWeVUyOTFjbU5sSUQwZ0tITm9ZV1JsY2tobGJIQmxjam9nVTJoaFpHVnlTR1ZzY0dWeUtTQTlQaUI3WEc0Z0lDQWdZMjl1YzNRZ2FXNXdkWFFnUFNCcGJuQjFkRlpoY21saFlteGxLQ2RwYm5CMWRDY3NJR1JoZEdGVWVYQmxMQ0JwYm5CMWRGTm9ZWEJsTG14bGJtZDBhQ3dnWTI5dGNHOXVaVzUwY3lrN1hHNGdJQ0FnWTI5dWMzUWdiM1YwY0hWMElEMGdiM1YwY0hWMFZtRnlhV0ZpYkdVb0oyOTFkSEIxZENjc0lHUmhkR0ZVZVhCbExDQnZkWFJ3ZFhSVGFHRndaUzVzWlc1bmRHZ3NJR052YlhCdmJtVnVkSE1wTzF4dUlDQWdJR3hsZENCaGMzTnBaMjV0Wlc1ME9pQnpkSEpwYm1jN1hHNGdJQ0FnYVdZZ0tHUmhkR0ZVZVhCbElEMDlQU0JFWVhSaFZIbHdaUzVpYjI5c0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCemFXNW5iR1ZCYzNOcFoyNXRaVzUwSUQwZ0tISmxjMU4wY2pvZ2MzUnlhVzVuTENCNE9pQnVkVzFpWlhJc0lIUjVjR1ZEWVhOMElEMGdKeWNwSUQwK0lHQmNiaUFnSUNBZ0lDQWdJQ0JzWlhRZ2IzVjBjSFYwU1c1a2FXTmxjeVI3ZUgwZ1BTQWtlMjkxZEhCMWRDNXZabVp6WlhSVWIwbHVaR2xqWlhNb1lHOTFkSEIxZEU5bVpuTmxkQ0FySUNSN2VIMTFZQ2w5TzF4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0J2Wm1aelpYUWtlM2g5SUQwZ0pIdHBibkIxZEM1aWNtOWhaR05oYzNSbFpFbHVaR2xqWlhOVWIwOW1abk5sZENoZ2IzVjBjSFYwU1c1a2FXTmxjeVI3ZUgxZ0xDQnZkWFJ3ZFhRcGZUdGNiaUFnSUNBZ0lDQWdJQ0JzWlhRZ2FXNWtaWGdrZTNoOUlEMGdiMlptYzJWMEpIdDRmU0F2SURSMU8xeHVJQ0FnSUNBZ0lDQWdJR3hsZENCamIyMXdiMjVsYm5Ra2UzaDlJRDBnYjJabWMyVjBKSHQ0ZlNBbElEUjFPMXh1SUNBZ0lDQWdJQ0FnSUNSN2NtVnpVM1J5ZlZza2UzaDlYU0E5SUNSN2RIbHdaVU5oYzNSOUtDUjdhVzV3ZFhRdVoyVjBRbmxQWm1aelpYUW9ZR2x1WkdWNEpIdDRmV0FwZlZ0amIyMXdiMjVsYm5Ra2UzaDlYU2s3WEc0Z0lDQWdJQ0FnSUdBN1hHNGdJQ0FnSUNCaGMzTnBaMjV0Wlc1MElEMGdZRnh1SUNBZ0lDQWdJQ0JzWlhRZ2IzVjBjSFYwVDJabWMyVjBJRDBnWjJ4dlltRnNYMmxrZUNBcUlDUjdZMjl0Y0c5dVpXNTBjMzA3WEc0Z0lDQWdJQ0FnSUhaaGNpQmtZWFJoSUQwZ2RtVmpORHgxTXpJK0tEQXBPMXh1SUNBZ0lDQWdJQ0FrZTNOcGJtZHNaVUZ6YzJsbmJtMWxiblFvSjJSaGRHRW5MQ0F3TENBbmRUTXlKeWw5WEc0Z0lDQWdJQ0FnSUNSN2MybHVaMnhsUVhOemFXZHViV1Z1ZENnblpHRjBZU2NzSURFc0lDZDFNekluS1gxY2JpQWdJQ0FnSUNBZ0pIdHphVzVuYkdWQmMzTnBaMjV0Wlc1MEtDZGtZWFJoSnl3Z01pd2dKM1V6TWljcGZWeHVJQ0FnSUNBZ0lDQWtlM05wYm1kc1pVRnpjMmxuYm0xbGJuUW9KMlJoZEdFbkxDQXpMQ0FuZFRNeUp5bDlYRzRnSUNBZ0lDQWdJQ1I3YjNWMGNIVjBMbk5sZEVKNVQyWm1jMlYwS0NkbmJHOWlZV3hmYVdSNEp5d2dKMlJoZEdFbktYMWNiaUFnSUNBZ0lIMWdPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCaGMzTnBaMjV0Wlc1MElEMGdZRnh1SUNBZ0lDQWdJQ0JzWlhRZ2IzVjBjSFYwU1c1a2FXTmxjeUE5SUNSN2IzVjBjSFYwTG05bVpuTmxkRlJ2U1c1a2FXTmxjeWduWjJ4dlltRnNYMmxrZUNjcGZUdGNiaUFnSUNBZ0lDQWdiR1YwSUdsdWNIVjBUMlptYzJWMElEMGdKSHRwYm5CMWRDNWljbTloWkdOaGMzUmxaRWx1WkdsalpYTlViMDltWm5ObGRDZ25iM1YwY0hWMFNXNWthV05sY3ljc0lHOTFkSEIxZENsOU8xeHVJQ0FnSUNBZ0lDQWtlMjkxZEhCMWRDNXpaWFJDZVU5bVpuTmxkQ2duWjJ4dlltRnNYMmxrZUNjc0lHbHVjSFYwTG1kbGRFSjVUMlptYzJWMEtDZHBibkIxZEU5bVpuTmxkQ2NwS1gxY2JpQWdJQ0FnSUgxZ08xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdZRnh1SUNBZ0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG5KbFoybHpkR1Z5Vlc1cFptOXliU2duZG1WalgzTnBlbVVuTENBbmRUTXlKeWt1WkdWamJHRnlaVlpoY21saFlteGxjeWhwYm5CMWRDd2diM1YwY0hWMEtYMWNiaUFnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV0WVdsdVUzUmhjblFvS1gxY2JpQWdJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNW5kV0Z5WkVGbllXbHVjM1JQZFhSUFprSnZkVzVrYzFkdmNtdG5jbTkxY0ZOcGVtVnpLQ2QxYm1sbWIzSnRjeTUyWldOZmMybDZaU2NwZlZ4dUlDQWdJQ1I3WVhOemFXZHViV1Z1ZEgxZ08xeHVJQ0I5TzF4dVhHNGdJR052Ym5OMElIQnliMmR5WVcxVmJtbG1iM0p0Y3pvZ1VISnZaM0poYlZWdWFXWnZjbTFiWFNBOVhHNGdJQ0FnSUNCYmUzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2diM1YwY0hWMFUybDZaWDBzSUM0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHbHVjSFYwVTJoaGNHVXNJRzkxZEhCMWRGTm9ZWEJsS1YwN1hHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2JtRnRaVG9nSjBWNGNHRnVaQ2NzWEc0Z0lDQWdjMmhoWkdWeVEyRmphR1U2SUh0b2FXNTBPaUJnSkh0dmRYUndkWFJUYUdGd1pTNXNaVzVuZEdoOVlDd2dhVzV3ZFhSRVpYQmxibVJsYm1OcFpYTTZJRnNuY21GdWF5ZGRmU3hjYmlBZ0lDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVc1hHNGdJQ0FnWjJWMFVuVnVSR0YwWVRvZ0tDa2dQVDRnS0h0Y2JpQWdJQ0FnSUc5MWRIQjFkSE02SUZ0N1pHbHRjem9nYjNWMGNIVjBVMmhoY0dVc0lHUmhkR0ZVZVhCbE9pQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVjlYU3hjYmlBZ0lDQWdJR1JwYzNCaGRHTm9SM0p2ZFhBNklIdDRPaUJOWVhSb0xtTmxhV3dvYjNWMGNIVjBVMmw2WlNBdklEWTBJQzhxSUhkdmNtdG5jbTkxY0NCemFYcGxJQ292S1gwc1hHNGdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE5jYmlBZ0lDQjlLVnh1SUNCOU8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1Y0Y0dGdVpDQTlJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDazZJSFp2YVdRZ1BUNGdlMXh1SUNCMllXeHBaR0YwWlVsdWNIVjBjeWhqYjI1MFpYaDBMbWx1Y0hWMGN5azdYRzRnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hqY21WaGRHVkZlSEJoYm1SUWNtOW5jbUZ0U1c1bWJ5aGpiMjUwWlhoMExtbHVjSFYwY3lrc0lIdHBibkIxZEhNNklGc3dYWDBwTzF4dWZUdGNiaUlzSUNJdkx5QkRiM0I1Y21sbmFIUWdLR01wSUUxcFkzSnZjMjltZENCRGIzSndiM0poZEdsdmJpNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmk4dklFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQk5TVlFnVEdsalpXNXpaUzVjYmx4dWFXMXdiM0owSUh0RVlYUmhWSGx3WlgwZ1puSnZiU0FuTGk0dkxpNHZMaTR2ZDJGemJTMWpiMjF0YjI0bk8xeHVhVzF3YjNKMElIdFVaVzV6YjNKV2FXVjNmU0JtY205dElDY3VMaTh1TGk5MFpXNXpiM0l0ZG1sbGR5YzdYRzVwYlhCdmNuUWdlMU5vWVhCbFZYUnBiSDBnWm5KdmJTQW5MaTR2TGk0dmRYUnBiQ2M3WEc1cGJYQnZjblFnZTBOdmJYQjFkR1ZEYjI1MFpYaDBMQ0JRY205bmNtRnRTVzVtYjMwZ1puSnZiU0FuTGk0dmRIbHdaWE1uTzF4dVhHNXBiWEJ2Y25RZ2UybHVjSFYwVm1GeWFXRmliR1VzSUc5MWRIQjFkRlpoY21saFlteGxMQ0JUYUdGa1pYSklaV3h3WlhJc0lIUmxibk52Y2xSNWNHVlViMWR6WjJ4V1lXeDFaVlI1Y0dVc0lGVnVhV1p2Y20xelFYSnlZWGxVZVhCbExDQlhUMUpMUjFKUFZWQmZVMGxhUlgwZ1puSnZiU0FuTGk5amIyMXRiMjRuTzF4dWFXMXdiM0owSUNvZ1lYTWdkVzVoY25rZ1puSnZiU0FuTGk5MWJtRnllUzF2Y0NjN1hHNWNiaTh2SUVkRlRGVWdhWE1nWkdWbWFXNWxaQ0JoY3lCWlBUQXVOU3BZS2lneEszUmhibWdvTUM0M09UYzRPRFVxV0Nzd0xqQXpOVFkzTnlwWUtsZ3FXQ2twTENCM2FHVnlaU0JZSUcxaGVTQndjbVV0WVdSa0lHRWdZbWxoY3k1Y2JseHVZMjl1YzNRZ1kzSmxZWFJsUm1GemRFZGxiSFZRY205bmNtRnRTVzVtYnlBOUlDaHBibkIxZEZSbGJuTnZjbk02SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhTazZJRkJ5YjJkeVlXMUpibVp2SUQwK0lIdGNiaUFnWTI5dWMzUWdaR0YwWVZSNWNHVWdQU0JwYm5CMWRGUmxibk52Y25OYk1GMHVaR0YwWVZSNWNHVTdYRzRnSUdOdmJuTjBJRzkxZEhCMWRGTnBlbVVnUFNCVGFHRndaVlYwYVd3dWMybDZaU2hwYm5CMWRGUmxibk52Y25OYk1GMHVaR2x0Y3lrN1hHNGdJR052Ym5OMElHSnBZWE5NWlc1bmRHZ2dQU0JUYUdGd1pWVjBhV3d1YzJsNlpTaHBibkIxZEZSbGJuTnZjbk5iTVYwdVpHbHRjeWs3WEc0Z0lDOHZJR05oYmlCdmJteDVJSFZ6WlNCMlpXTTBJSGRvWlc0Z1ltbGhjeUJzWlc1bmRHZ2dhWE1nYlhWc2RHbHdiR1VnYjJZZ05GeHVJQ0JqYjI1emRDQjFjMlZXWldNMElEMGdZbWxoYzB4bGJtZDBhQ0FsSURRZ1BUMDlJREE3WEc0Z0lHTnZibk4wSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU0E5SUNoemFHRmtaWEpJWld4d1pYSTZJRk5vWVdSbGNraGxiSEJsY2lrNklITjBjbWx1WnlBOVBpQjdYRzRnSUNBZ1kyOXVjM1FnZUNBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjNnbkxDQmtZWFJoVkhsd1pTd2dXekZkTENBMEtUdGNiaUFnSUNCamIyNXpkQ0JpYVdGeklEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnblltbGhjeWNzSUdSaGRHRlVlWEJsTENCYk1WMHNJRFFwTzF4dUlDQWdJR052Ym5OMElIa2dQU0J2ZFhSd2RYUldZWEpwWVdKc1pTZ25lU2NzSUdSaGRHRlVlWEJsTENCYk1WMHNJRFFwTzF4dVhHNGdJQ0FnWTI5dWMzUWdkVzVwWm05eWJYTTZJRlZ1YVdadmNtMXpRWEp5WVhsVWVYQmxJRDBnVzN0dVlXMWxPaUFuYjNWMGNIVjBYM1psWTE5emFYcGxKeXdnZEhsd1pUb2dKM1V6TWlkOUxDQjdibUZ0WlRvZ0oySnBZWE5mYzJsNlpTY3NJSFI1Y0dVNklDZDFNekluZlYwN1hHNWNiaUFnSUNCamIyNXpkQ0J6YVc1bmJHVkZiR1Z0Wlc1MFFtbGhjeUE5SUNocE9pQXdmREY4TW53ektTQTlQaUJnWEc0Z0lDQWdJQ0JzWlhRZ1ltbGhjeVI3YVgxZmIyWm1jMlYwT2lCMU16SWdQU0FvWjJ4dlltRnNYMmxrZUNBcUlEUWdLeUFrZTJsOUtTQWxJSFZ1YVdadmNtMXpMbUpwWVhOZmMybDZaVHRjYmlBZ0lDQWdJR3hsZENCaWFXRnpKSHRwZlNBOUlDUjdZbWxoY3k1blpYUkNlVTltWm5ObGRDaGdZbWxoY3lSN2FYMWZiMlptYzJWMElDOGdOR0FwZlZ0aWFXRnpKSHRwZlY5dlptWnpaWFFnSlNBMFhUdGdPMXh1SUNBZ0lHTnZibk4wSUdKcFlYTkhaWFJGZUhCeVpYTnphVzl1SUQwZ2RYTmxWbVZqTkNBL1hHNGdJQ0FnSUNBZ0lHQmNiaUFnSUNBZ0lHeGxkQ0JpYVdGeklEMGdKSHRpYVdGekxtZGxkRUo1VDJabWMyVjBLQ2RuYkc5aVlXeGZhV1I0SUNVZ0tIVnVhV1p2Y20xekxtSnBZWE5mYzJsNlpTQXZJRFFwSnlsOU8yQWdPbHh1SUNBZ0lDQWdJQ0JnSkh0emFXNW5iR1ZGYkdWdFpXNTBRbWxoY3lnd0tYMGtlM05wYm1kc1pVVnNaVzFsYm5SQ2FXRnpLREVwZlNSN2MybHVaMnhsUld4bGJXVnVkRUpwWVhNb01pbDlKSHR6YVc1bmJHVkZiR1Z0Wlc1MFFtbGhjeWd6S1gxY2JpQWdJQ0FnSUd4bGRDQmlhV0Z6SUQwZ0pIdDRMblI1Y0dVdWRtRnNkV1Y5S0dKcFlYTXdMQ0JpYVdGek1Td2dZbWxoY3pJc0lHSnBZWE16S1R0Z08xeHVYRzRnSUNBZ2NtVjBkWEp1SUdBa2UzTm9ZV1JsY2tobGJIQmxjaTV5WldkcGMzUmxjbFZ1YVdadmNtMXpLSFZ1YVdadmNtMXpLUzVrWldOc1lYSmxWbUZ5YVdGaWJHVnpLSGdzSUdKcFlYTXNJSGtwZlZ4dVhHNGdJQ0FnSkh0MWJtRnllUzVtWVhOMFIyVnNkVWx0Y0d3b2RHVnVjMjl5Vkhsd1pWUnZWM05uYkZaaGJIVmxWSGx3WlNoa1lYUmhWSGx3WlNrcGZWeHVYRzRnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1YldGcGJsTjBZWEowS0ZkUFVrdEhVazlWVUY5VFNWcEZLWDFjYmlBZ0lDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxtZDFZWEprUVdkaGFXNXpkRTkxZEU5bVFtOTFibVJ6VjI5eWEyZHliM1Z3VTJsNlpYTW9KM1Z1YVdadmNtMXpMbTkxZEhCMWRGOTJaV05mYzJsNlpTY3BmVnh1WEc0Z0lDQWdJQ0JzWlhRZ2VDQTlJQ1I3ZUM1blpYUkNlVTltWm5ObGRDZ25aMnh2WW1Gc1gybGtlQ2NwZlR0Y2JpQWdJQ0FnSUNSN1ltbGhjMGRsZEVWNGNISmxjM05wYjI1OVhHNGdJQ0FnSUNCc1pYUWdlRjlwYmlBOUlIZ2dLeUJpYVdGek8xeHVJQ0FnSUNBZ0pIdDVMbk5sZEVKNVQyWm1jMlYwS0NkbmJHOWlZV3hmYVdSNEp5d2dkVzVoY25rdVptRnpkRWRsYkhWRmVIQnlaWE56YVc5dUtDZDRYMmx1SnlrcGZWeHVJQ0FnSUgxZ08xeHVJQ0I5TzF4dVhHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2JtRnRaVG9nSjBaaGMzUkhaV3gxVjJsMGFFSnBZWE1uTEZ4dUlDQWdJSE5vWVdSbGNrTmhZMmhsT2lCN2FHbHVkRG9nWUNSN2RYTmxWbVZqTkgxZ0xDQnBibkIxZEVSbGNHVnVaR1Z1WTJsbGN6b2dXeWQwZVhCbEp5d2dKM1I1Y0dVblhYMHNYRzRnSUNBZ1oyVjBVMmhoWkdWeVUyOTFjbU5sTEZ4dUlDQWdJR2RsZEZKMWJrUmhkR0U2SUNocGJuQjFkSE1wSUQwK0lDaDdYRzRnSUNBZ0lDQnZkWFJ3ZFhSek9pQmJlMlJwYlhNNklHbHVjSFYwYzFzd1hTNWthVzF6TENCa1lYUmhWSGx3WlRvZ2FXNXdkWFJ6V3pCZExtUmhkR0ZVZVhCbGZWMHNYRzRnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNNlhHNGdJQ0FnSUNBZ0lDQWdXM3QwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUUxaGRHZ3VZMlZwYkNodmRYUndkWFJUYVhwbElDOGdOQ2w5TENCN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQmlhV0Z6VEdWdVozUm9mVjBzWEc0Z0lDQWdJQ0JrYVhOd1lYUmphRWR5YjNWd09pQjdlRG9nVFdGMGFDNWpaV2xzS0c5MWRIQjFkRk5wZW1VZ0x5QlhUMUpMUjFKUFZWQmZVMGxhUlNBdklEUXBmVnh1SUNBZ0lIMHBYRzRnSUgwN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdabUZ6ZEVkbGJIVWdQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXBPaUIyYjJsa0lEMCtJSHRjYmlBZ2FXWWdLR052Ym5SbGVIUXVhVzV3ZFhSekxteGxibWQwYUNBOElESWdmSHdnVTJoaGNHVlZkR2xzTG5OcGVtVW9ZMjl1ZEdWNGRDNXBibkIxZEhOYk1WMHVaR2x0Y3lrZ1BUMDlJREFwSUh0Y2JpQWdJQ0IxYm1GeWVTNW1ZWE4wUjJWc2RTaGpiMjUwWlhoMEtUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQmpiMjUwWlhoMExtTnZiWEIxZEdVb1kzSmxZWFJsUm1GemRFZGxiSFZRY205bmNtRnRTVzVtYnloamIyNTBaWGgwTG1sdWNIVjBjeWtwTzF4dUlDQjlYRzU5TzF4dUlpd2dJaTh2SUVOdmNIbHlhV2RvZENBb1l5a2dUV2xqY205emIyWjBJRU52Y25CdmNtRjBhVzl1TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVMeThnVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUUxSlZDQk1hV05sYm5ObExseHVYRzVwYlhCdmNuUWdlMFJoZEdGVWVYQmxmU0JtY205dElDY3VMaTh1TGk4dUxpOTNZWE50TFdOdmJXMXZiaWM3WEc1cGJYQnZjblFnZTFSbGJuTnZjbFpwWlhkOUlHWnliMjBnSnk0dUx5NHVMM1JsYm5OdmNpMTJhV1YzSnp0Y2JtbHRjRzl5ZENCN1UyaGhjR1ZWZEdsc2ZTQm1jbTl0SUNjdUxpOHVMaTkxZEdsc0p6dGNibWx0Y0c5eWRDQjdRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1TENCamNtVmhkR1ZCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhsOUlHWnliMjBnSnk0dUwyRjBkSEpwWW5WMFpTMTNhWFJvTFdOaFkyaGxMV3RsZVNjN1hHNXBiWEJ2Y25RZ2UwTnZiWEIxZEdWRGIyNTBaWGgwTENCUWNtOW5jbUZ0U1c1bWJ5d2dVSEp2WjNKaGJWVnVhV1p2Y20xOUlHWnliMjBnSnk0dUwzUjVjR1Z6Snp0Y2JseHVhVzF3YjNKMElIdGpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5d2dhVzV3ZFhSV1lYSnBZV0pzWlN3Z2IzVjBjSFYwVm1GeWFXRmliR1VzSUZOb1lXUmxja2hsYkhCbGNuMGdabkp2YlNBbkxpOWpiMjF0YjI0bk8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRWRoZEdobGNrRjBkSEpwWW5WMFpYTWdaWGgwWlc1a2N5QkJkSFJ5YVdKMWRHVlhhWFJvUTJGamFHVkxaWGtnZTF4dUlDQmhlR2x6T2lCdWRXMWlaWEk3WEc1OVhHNWNibU52Ym5OMElIWmhiR2xrWVhSbFNXNXdkWFJ6SUQwZ0tHbHVjSFYwY3pvZ2NtVmhaRzl1YkhrZ1ZHVnVjMjl5Vm1sbGQxdGRLVG9nZG05cFpDQTlQaUI3WEc0Z0lHbG1JQ2doYVc1d2RYUnpJSHg4SUdsdWNIVjBjeTVzWlc1bmRHZ2dJVDA5SURJcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBkaGRHaGxjaUJ5WlhGMWFYSmxjeUF5SUdsdWNIVjBjeTRuS1R0Y2JpQWdmVnh1ZlR0Y2JseHVZMjl1YzNRZ1kzSmxZWFJsUjJGMGFHVnlVSEp2WjNKaGJVbHVabThnUFNBb2FXNXdkWFJ6T2lCeVpXRmtiMjVzZVNCVVpXNXpiM0pXYVdWM1cxMHNJR0YwZEhKcFluVjBaWE02SUVkaGRHaGxja0YwZEhKcFluVjBaWE1wT2lCUWNtOW5jbUZ0U1c1bWJ5QTlQaUI3WEc0Z0lHTnZibk4wSUdsdWNIVjBVMmhoY0dVZ1BTQnBibkIxZEhOYk1GMHVaR2x0Y3p0Y2JpQWdZMjl1YzNRZ2FXNWthV05sYzFOb1lYQmxJRDBnYVc1d2RYUnpXekZkTG1ScGJYTTdYRzVjYmlBZ1kyOXVjM1FnYVc1d2RYUlNZVzVySUQwZ2FXNXdkWFJUYUdGd1pTNXNaVzVuZEdnN1hHNGdJR052Ym5OMElHRjRhWE1nUFNCVGFHRndaVlYwYVd3dWJtOXliV0ZzYVhwbFFYaHBjeWhoZEhSeWFXSjFkR1Z6TG1GNGFYTXNJR2x1Y0hWMFVtRnVheWs3WEc1Y2JpQWdZMjl1YzNRZ2IzVjBjSFYwVTJoaGNHVWdQU0JwYm5CMWRGTm9ZWEJsTG5Oc2FXTmxLREFwTzF4dUlDQnZkWFJ3ZFhSVGFHRndaUzV6Y0d4cFkyVW9ZWGhwY3l3Z01Td2dMaTR1YVc1a2FXTmxjMU5vWVhCbEtUdGNibHh1SUNCamIyNXpkQ0JoZUdselJHbHRUR2x0YVhRZ1BTQnBibkIxZEZOb1lYQmxXMkY0YVhOZE8xeHVJQ0JqYjI1emRDQmpiMjF3YjI1bGJuUnpJRDBnYVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsSUQwOVBTQkVZWFJoVkhsd1pTNWliMjlzSUQ4Z05DQTZJREU3WEc0Z0lHTnZibk4wSUc5MWRIQjFkRk5wZW1VZ1BTQk5ZWFJvTG1ObGFXd29VMmhoY0dWVmRHbHNMbk5wZW1Vb2IzVjBjSFYwVTJoaGNHVXBJQzhnWTI5dGNHOXVaVzUwY3lrN1hHNWNiaUFnWTI5dWMzUWdjSEp2WjNKaGJWVnVhV1p2Y20xek9pQlFjbTluY21GdFZXNXBabTl5YlZ0ZElEMGdXMXh1SUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1MWFXNTBNeklzSUdSaGRHRTZJRzkxZEhCMWRGTnBlbVY5TENCN2RIbHdaVG9nUkdGMFlWUjVjR1V1YVc1ME16SXNJR1JoZEdFNklHRjRhWE5FYVcxTWFXMXBkSDBzWEc0Z0lDQWdlM1I1Y0dVNklFUmhkR0ZVZVhCbExuVnBiblF6TWl3Z1pHRjBZVG9nWVhocGMzMHNJQzR1TG1OeVpXRjBaVlJsYm5OdmNsTm9ZWEJsVm1GeWFXRmliR1Z6S0dsdWNIVjBjMXN3WFM1a2FXMXpMQ0JwYm5CMWRITmJNVjB1WkdsdGN5d2diM1YwY0hWMFUyaGhjR1VwWEc0Z0lGMDdYRzVjYmlBZ1kyOXVjM1FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxJRDBnS0hOb1lXUmxja2hsYkhCbGNqb2dVMmhoWkdWeVNHVnNjR1Z5S1NBOVBpQjdYRzRnSUNBZ1kyOXVjM1FnWkdGMFlTQTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb0oyUmhkR0VuTENCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzd1hTNWthVzF6TG14bGJtZDBhQ3dnWTI5dGNHOXVaVzUwY3lrN1hHNGdJQ0FnWTI5dWMzUWdhVzVrYVdObGN5QTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb0oybHVjSFYwU1c1a2FXTmxjeWNzSUdsdWNIVjBjMXN4WFM1a1lYUmhWSGx3WlN3Z2FXNXdkWFJ6V3pGZExtUnBiWE11YkdWdVozUm9LVHRjYmlBZ0lDQmpiMjV6ZENCdmRYUndkWFFnUFNCdmRYUndkWFJXWVhKcFlXSnNaU2duYjNWMGNIVjBKeXdnYVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsTENCdmRYUndkWFJUYUdGd1pTNXNaVzVuZEdnc0lHTnZiWEJ2Ym1WdWRITXBPMXh1WEc0Z0lDQWdZMjl1YzNRZ1kyRnNZMFJoZEdGSmJtUnBZMlZ6SUQwZ0tIZzZJRzUxYldKbGNueHpkSEpwYm1jcE9pQnpkSEpwYm1jZ1BUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2FXNWthV05sYzFKaGJtc2dQU0JwYm1ScFkyVnpVMmhoY0dVdWJHVnVaM1JvTzF4dUlDQWdJQ0FnYkdWMElHTmhiR05UZEhJZ1BTQmdkbUZ5SUdsdVpHbGpaWE5KYm1ScFkyVnpKSHQ0ZlNBZ1BTQWtlMmx1WkdsalpYTXVkSGx3WlM1cGJtUnBZMlZ6ZlNnd0tUdGdPMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JwYm1ScFkyVnpVbUZ1YXpzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUdOaGJHTlRkSElnS3owZ1lDUjdhVzVrYVdObGMxSmhibXNnUGlBeElEOGdZR2x1WkdsalpYTkpibVJwWTJWekpIdDRmVnNrZTJsOVhXQWdPaUJnYVc1a2FXTmxjMGx1WkdsalpYTWtlM2g5WUgwZ1BTQWtlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2IzVjBjSFYwVTJoaGNHVXViR1Z1WjNSb0lENGdNU0EvSUdCdmRYUndkWFJKYm1ScFkyVnpKSHQ0ZlZ0MWJtbG1iM0p0Y3k1aGVHbHpJQ3NnSkh0cGZWMWdJRG9nWUc5MWRIQjFkRWx1WkdsalpYTWtlM2g5WUgwN1lEdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTmhiR05UZEhJZ0t6MGdZRnh1SUNBZ0lDQWdJQ0FnSUhaaGNpQnBaSGdrZTNoOUlEMGdKSHRwYm1ScFkyVnpMbWRsZEVKNVNXNWthV05sY3loZ2FXNWthV05sYzBsdVpHbGpaWE1rZTNoOVlDbDlPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHBaSGdrZTNoOUlEd2dNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1I0Skh0NGZTQTlJR2xrZUNSN2VIMGdLeUIxYm1sbWIzSnRjeTVoZUdselJHbHRUR2x0YVhRN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUhaaGNpQmtZWFJoU1c1a2FXTmxjeVI3ZUgwZ09pQWtlMlJoZEdFdWRIbHdaUzVwYm1ScFkyVnpmVHRjYmlBZ0lDQWdJQ0FnWUR0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdMQ0JxSUQwZ01Ec2dhU0E4SUdsdWNIVjBVbUZ1YXpzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHBJRDA5UFNCaGVHbHpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnNZMU4wY2lBclBTQmdKSHRwYm5CMWRGSmhibXNnUGlBeElEOGdZR1JoZEdGSmJtUnBZMlZ6Skh0NGZWc2tlMmw5WFdBZ09pQmdaR0YwWVVsdVpHbGpaWE1rZTNoOVlIMGdQU0IxTXpJb2FXUjRKSHQ0ZlNrN1lEdGNiaUFnSUNBZ0lDQWdJQ0JxSUNzOUlHbHVaR2xqWlhOU1lXNXJPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUdOaGJHTlRkSElnS3owZ1lDUjdhVzV3ZFhSU1lXNXJJRDRnTVNBL0lHQmtZWFJoU1c1a2FXTmxjeVI3ZUgxYkpIdHBmVjFnSURvZ1lHUmhkR0ZKYm1ScFkyVnpKSHQ0ZldCOUlEMGdKSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdiM1YwY0hWMFUyaGhjR1V1YkdWdVozUm9JRDRnTVNBL0lHQnZkWFJ3ZFhSSmJtUnBZMlZ6Skh0NGZWc2tlMnA5WFdBZ09pQmdiM1YwY0hWMFNXNWthV05sY3lSN2VIMWdmVHRnTzF4dUlDQWdJQ0FnSUNBZ0lHb3JLenRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnY21WMGRYSnVJR05oYkdOVGRISTdYRzRnSUNBZ2ZUdGNiaUFnSUNCc1pYUWdZWE56YVdkdWJXVnVkRG9nYzNSeWFXNW5PMXh1SUNBZ0lHbG1JQ2hwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1VnUFQwOUlFUmhkR0ZVZVhCbExtSnZiMndwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSE5wYm1kc1pVRnpjMmxuYm0xbGJuUWdQU0FvY21WelUzUnlPaUJ6ZEhKcGJtY3NJSGc2SUc1MWJXSmxjaXdnZEhsd1pVTmhjM1FnUFNBbkp5a2dQVDRnWUZ4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0J2ZFhSd2RYUkpibVJwWTJWekpIdDRmU0E5SUNSN2IzVjBjSFYwTG05bVpuTmxkRlJ2U1c1a2FXTmxjeWhnYjNWMGNIVjBUMlptYzJWMElDc2dKSHQ0ZlhWZ0tYMDdYRzRnSUNBZ0lDQWdJQ0FnSkh0allXeGpSR0YwWVVsdVpHbGpaWE1vZUNsOU8xeHVJQ0FnSUNBZ0lDQWdJR3hsZENCdlptWnpaWFFrZTNoOUlEMGdKSHRrWVhSaExtbHVaR2xqWlhOVWIwOW1abk5sZENoZ1pHRjBZVWx1WkdsalpYTWtlM2g5WUNsOU8xeHVJQ0FnSUNBZ0lDQWdJR3hsZENCcGJtUmxlQ1I3ZUgwZ1BTQnZabVp6WlhRa2UzaDlJQzhnTkhVN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUdOdmJYQnZibVZ1ZENSN2VIMGdQU0J2Wm1aelpYUWtlM2g5SUNVZ05IVTdYRzRnSUNBZ0lDQWdJQ0FnSkh0eVpYTlRkSEo5V3lSN2VIMWRJRDBnSkh0MGVYQmxRMkZ6ZEgwb0pIdGtZWFJoTG1kbGRFSjVUMlptYzJWMEtHQnBibVJsZUNSN2VIMWdLWDFiWTI5dGNHOXVaVzUwSkh0NGZWMHBPMXh1SUNBZ0lDQWdJQ0JnTzF4dUlDQWdJQ0FnWVhOemFXZHViV1Z1ZENBOUlHQmNiaUFnSUNBZ0lDQWdiR1YwSUc5MWRIQjFkRTltWm5ObGRDQTlJR2RzYjJKaGJGOXBaSGdnS2lBa2UyTnZiWEJ2Ym1WdWRITjlPMXh1SUNBZ0lDQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCMlpXTTBQSFV6TWo0b01DazdYRzRnSUNBZ0lDQWdJQ1I3YzJsdVoyeGxRWE56YVdkdWJXVnVkQ2duZG1Gc2RXVW5MQ0F3TENBbmRUTXlKeWw5WEc0Z0lDQWdJQ0FnSUNSN2MybHVaMnhsUVhOemFXZHViV1Z1ZENnbmRtRnNkV1VuTENBeExDQW5kVE15SnlsOVhHNGdJQ0FnSUNBZ0lDUjdjMmx1WjJ4bFFYTnphV2R1YldWdWRDZ25kbUZzZFdVbkxDQXlMQ0FuZFRNeUp5bDlYRzRnSUNBZ0lDQWdJQ1I3YzJsdVoyeGxRWE56YVdkdWJXVnVkQ2duZG1Gc2RXVW5MQ0F6TENBbmRUTXlKeWw5WEc0Z0lDQWdJQ0FnSUNSN2IzVjBjSFYwTG5ObGRFSjVUMlptYzJWMEtDZG5iRzlpWVd4ZmFXUjRKeXdnSjNaaGJIVmxKeWw5WEc0Z0lDQWdJQ0JnTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmhjM05wWjI1dFpXNTBJRDBnWUZ4dUlDQWdJQ0FnYkdWMElHOTFkSEIxZEVsdVpHbGpaWE1nUFNBa2UyOTFkSEIxZEM1dlptWnpaWFJVYjBsdVpHbGpaWE1vSjJkc2IySmhiRjlwWkhnbktYMDdYRzRnSUNBZ0lDQWtlMk5oYkdORVlYUmhTVzVrYVdObGN5Z25KeWw5TzF4dUlDQWdJQ0FnYkdWMElIWmhiSFZsSUQwZ0pIdGtZWFJoTG1kbGRFSjVTVzVrYVdObGN5Z25aR0YwWVVsdVpHbGpaWE1uS1gwN1hHNGdJQ0FnSUNBa2UyOTFkSEIxZEM1elpYUkNlVTltWm5ObGRDZ25aMnh2WW1Gc1gybGtlQ2NzSUNkMllXeDFaU2NwZlR0Y2JpQWdJQ0FnSUdBN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmdYRzRnSUNBZ0lDQWtlMXh1SUNBZ0lDQWdJQ0J6YUdGa1pYSklaV3h3WlhJdWNtVm5hWE4wWlhKVmJtbG1iM0p0S0NkdmRYUndkWFJUYVhwbEp5d2dKM1V6TWljcFhHNGdJQ0FnSUNBZ0lDQWdJQ0F1Y21WbmFYTjBaWEpWYm1sbWIzSnRLQ2RoZUdselJHbHRUR2x0YVhRbkxDQW5hVE15SnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQzV5WldkcGMzUmxjbFZ1YVdadmNtMG9KMkY0YVhNbkxDQW5kVE15SnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQzVrWldOc1lYSmxWbUZ5YVdGaWJHVnpLR1JoZEdFc0lHbHVaR2xqWlhNc0lHOTFkSEIxZENsOVhHNGdJQ0FnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV0WVdsdVUzUmhjblFvS1gxY2JpQWdJQ0FnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1WjNWaGNtUkJaMkZwYm5OMFQzVjBUMlpDYjNWdVpITlhiM0pyWjNKdmRYQlRhWHBsY3lnbmRXNXBabTl5YlhNdWIzVjBjSFYwVTJsNlpTY3BmVnh1SUNBZ0lDQWdJQ0FrZTJGemMybG5ibTFsYm5SOVhHNGdJQ0FnSUNCOVlEdGNiaUFnZlR0Y2JpQWdjbVYwZFhKdUlIdGNiaUFnSUNCdVlXMWxPaUFuUjJGMGFHVnlKeXhjYmlBZ0lDQnphR0ZrWlhKRFlXTm9aVG9nZTJocGJuUTZJR0YwZEhKcFluVjBaWE11WTJGamFHVkxaWGtzSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6T2lCYkozSmhibXNuTENBbmNtRnVheWRkZlN4Y2JpQWdJQ0JuWlhSU2RXNUVZWFJoT2lBb0tTQTlQaUFvZTF4dUlDQWdJQ0FnYjNWMGNIVjBjem9nVzF4dUlDQWdJQ0FnSUNCN1pHbHRjem9nYjNWMGNIVjBVMmhoY0dVc0lHUmhkR0ZVZVhCbE9pQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVjlMRnh1SUNBZ0lDQWdYU3hjYmlBZ0lDQWdJR1JwYzNCaGRHTm9SM0p2ZFhBNklIdDRPaUJOWVhSb0xtTmxhV3dvYjNWMGNIVjBVMmw2WlNBdklEWTBJQzhxSUhkdmNtdG5jbTkxY0NCemFYcGxJQ292S1gwc1hHNGdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE5jYmlBZ0lDQjlLU3hjYmlBZ0lDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVc1hHNGdJSDA3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2NHRnljMlZIWVhSb1pYSkJkSFJ5YVdKMWRHVnpJRDBnS0dGMGRISnBZblYwWlhNNklGSmxZMjl5WkR4emRISnBibWNzSUhWdWEyNXZkMjQrS1RvZ1IyRjBhR1Z5UVhSMGNtbGlkWFJsY3lBOVBseHVJQ0FnSUdOeVpXRjBaVUYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVNoN1lYaHBjem9nWVhSMGNtbGlkWFJsY3k1aGVHbHpJR0Z6SUc1MWJXSmxjbjBwTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWjJGMGFHVnlJRDBnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBMQ0JoZEhSeWFXSjFkR1Z6T2lCSFlYUm9aWEpCZEhSeWFXSjFkR1Z6S1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR052Ym5OMElHbHVjSFYwY3lBOUlHTnZiblJsZUhRdWFXNXdkWFJ6TzF4dUlDQjJZV3hwWkdGMFpVbHVjSFYwY3locGJuQjFkSE1wTzF4dUlDQmpiMjUwWlhoMExtTnZiWEIxZEdVb1kzSmxZWFJsUjJGMGFHVnlVSEp2WjNKaGJVbHVabThvWTI5dWRHVjRkQzVwYm5CMWRITXNJR0YwZEhKcFluVjBaWE1wS1R0Y2JuMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1JHRjBZVlI1Y0dWOUlHWnliMjBnSnk0dUx5NHVMeTR1TDNkaGMyMHRZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdWR1Z1YzI5eVZtbGxkMzBnWm5KdmJTQW5MaTR2TGk0dmRHVnVjMjl5TFhacFpYY25PMXh1YVcxd2IzSjBJSHRUYUdGd1pWVjBhV3g5SUdaeWIyMGdKeTR1THk0dUwzVjBhV3duTzF4dWFXMXdiM0owSUh0QmRIUnlhV0oxZEdWWGFYUm9RMkZqYUdWTFpYa3NJR055WldGMFpVRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlWDBnWm5KdmJTQW5MaTR2WVhSMGNtbGlkWFJsTFhkcGRHZ3RZMkZqYUdVdGEyVjVKenRjYm1sdGNHOXlkQ0I3UTI5dGNIVjBaVU52Ym5SbGVIUXNJRkJ5YjJkeVlXMUpibVp2TENCUWNtOW5jbUZ0U1c1d2RYUlVaVzV6YjNKSmJtWnZSR1Z3Wlc1a1pXNWplU3dnVUhKdlozSmhiVlZ1YVdadmNtMTlJR1p5YjIwZ0p5NHVMM1I1Y0dWekp6dGNibHh1YVcxd2IzSjBJSHRqY21WaGRHVlVaVzV6YjNKVGFHRndaVlpoY21saFlteGxjeXdnYVc1d2RYUldZWEpwWVdKc1pTd2diM1YwY0hWMFZtRnlhV0ZpYkdVc0lGTm9ZV1JsY2tobGJIQmxjbjBnWm5KdmJTQW5MaTlqYjIxdGIyNG5PMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVkaGRHaGxja1ZzWlcxbGJuUnpRWFIwY21saWRYUmxjeUJsZUhSbGJtUnpJRUYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVNCN1hHNGdJR0Y0YVhNNklHNTFiV0psY2p0Y2JuMWNibHh1WTI5dWMzUWdkbUZzYVdSaGRHVkpibkIxZEhNZ1BTQW9hVzV3ZFhSek9pQnlaV0ZrYjI1c2VTQlVaVzV6YjNKV2FXVjNXMTBwT2lCMmIybGtJRDArSUh0Y2JpQWdhV1lnS0NGcGJuQjFkSE1nZkh3Z2FXNXdkWFJ6TG14bGJtZDBhQ0FoUFQwZ01pa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblIyRjBhR1Z5Uld4bGJXVnVkSE1nY21WeGRXbHlaWE1nTWlCcGJuQjFkSE11SnlrN1hHNGdJSDFjYmx4dUlDQnBaaUFvYVc1d2RYUnpXekJkTG1ScGJYTXViR1Z1WjNSb0lEd2dNU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25SMkYwYUdWeVJXeGxiV1Z1ZEhNZ2NtVnhkV2x5WlhNZ2RHaGhkQ0IwYUdVZ1pHRjBZU0JwYm5CMWRDQmlaU0J5WVc1cklENDlJREV1SnlrN1hHNGdJSDFjYmx4dUlDQnBaaUFvYVc1d2RYUnpXekJkTG1ScGJYTXViR1Z1WjNSb0lDRTlQU0JwYm5CMWRITmJNVjB1WkdsdGN5NXNaVzVuZEdncElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVkaGRHaGxja1ZzWlcxbGJuUnpJSEpsY1hWcGNtVnpJSFJvWVhRZ2RHaGxJR1JoZEdFZ2FXNXdkWFFnWVc1a1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm1ScFkyVnpJR2x1Y0hWMElIUmxibk52Y25NZ1ltVWdiMllnYzJGdFpTQnlZVzVyTG1BcE8xeHVJQ0I5WEc1OU8xeHVYRzVqYjI1emRDQmpjbVZoZEdWSFlYUm9aWEpGYkdWdFpXNTBjMUJ5YjJkeVlXMUpibVp2SUQxY2JpQWdJQ0FvYVc1d2RYUnpPaUJ5WldGa2IyNXNlU0JVWlc1emIzSldhV1YzVzEwc0lHRjBkSEpwWW5WMFpYTTZJRWRoZEdobGNrVnNaVzFsYm5SelFYUjBjbWxpZFhSbGN5azZJRkJ5YjJkeVlXMUpibVp2SUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUdsdWNIVjBVMmhoY0dVZ1BTQnBibkIxZEhOYk1GMHVaR2x0Y3p0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMFQzVjBjSFYwUkdGMFlWUjVjR1VnUFNCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRGSmhibXNnUFNCcGJuQjFkRk5vWVhCbExteGxibWQwYUR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnYVc1a2FXTmxjMU5vWVhCbElEMGdhVzV3ZFhSeld6RmRMbVJwYlhNN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm1ScFkyVnpSR0YwWVZSNWNHVWdQU0JwYm5CMWRITmJNVjB1WkdGMFlWUjVjR1U3WEc0Z0lDQWdJQ0JqYjI1emRDQmhlR2x6SUQwZ1UyaGhjR1ZWZEdsc0xtNXZjbTFoYkdsNlpVRjRhWE1vWVhSMGNtbGlkWFJsY3k1aGVHbHpMQ0JwYm5CMWRGSmhibXNwTzF4dUlDQWdJQ0FnWTI5dWMzUWdZWGhwYzBScGJVeHBiV2wwSUQwZ2FXNXdkWFJUYUdGd1pWdGhlR2x6WFR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnYjNWMGNIVjBVMmhoY0dVZ1BTQnBibVJwWTJWelUyaGhjR1V1YzJ4cFkyVW9NQ2s3WEc0Z0lDQWdJQ0JqYjI1emRDQnZkWFJ3ZFhSVGFYcGxJRDBnVTJoaGNHVlZkR2xzTG5OcGVtVW9iM1YwY0hWMFUyaGhjR1VwTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRDQTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb0oybHVjSFYwSnl3Z2FXNXdkWFJQZFhSd2RYUkVZWFJoVkhsd1pTd2dhVzV3ZFhSU1lXNXJLVHRjYmlBZ0lDQWdJR052Ym5OMElHbHVaR2xqWlhNZ1BTQnBibkIxZEZaaGNtbGhZbXhsS0NkcGJtUnBZMlZ6U1c1d2RYUW5MQ0JwYm1ScFkyVnpSR0YwWVZSNWNHVXNJR2x1WkdsalpYTlRhR0Z3WlM1c1pXNW5kR2dwTzF4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMElEMGdiM1YwY0hWMFZtRnlhV0ZpYkdVb0oyOTFkSEIxZENjc0lHbHVjSFYwVDNWMGNIVjBSR0YwWVZSNWNHVXNJRzkxZEhCMWRGTm9ZWEJsTG14bGJtZDBhQ2s3WEc1Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnY0hKdlozSmhiVlZ1YVdadmNtMXpPaUJRY205bmNtRnRWVzVwWm05eWJWdGRJRDBnVzF4dUlDQWdJQ0FnSUNCN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQnZkWFJ3ZFhSVGFYcGxmU3dnZTNSNWNHVTZJRVJoZEdGVWVYQmxMbWx1ZERNeUxDQmtZWFJoT2lCaGVHbHpSR2x0VEdsdGFYUjlMRnh1SUNBZ0lDQWdJQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCaGVHbHpmVnh1SUNBZ0lDQWdYVHRjYmlBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGN5NXdkWE5vS0M0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHbHVjSFYwVTJoaGNHVXNJR2x1WkdsalpYTlRhR0Z3WlN3Z2IzVjBjSFYwVTJoaGNHVXBLVHRjYmlBZ0lDQWdJR052Ym5OMElHbHVjSFYwUkdWd1pXNWtaVzVqYVdWek9pQlFjbTluY21GdFNXNXdkWFJVWlc1emIzSkpibVp2UkdWd1pXNWtaVzVqZVZ0ZElEMGdXeWR5WVc1ckp5d2dKM0poYm1zblhUdGNibHh1SUNBZ0lDQWdMeThnYVc1ME5qUWdhVzVrYVdObGN5QjNiM1ZzWkNCaVpTQjBjbVZoZEdWa0lHRnpJR3hwZEhSc1pTQmxibVJwWVc0Z2FUTXlJSGRwZEdnZ1lYTnpkVzF3ZEdsdmJpQjBhR1Y1SUdaaGJHd2dhVzRnYVRNeUlHeHBiV2wwYzF4dUlDQWdJQ0FnTHk4Z1ZHaGhkQ0JoYzNOMWJYQjBhVzl1SUdseklITmhabVVnWVhNZ2FYUW5jeUJ1YjNRZ2NHOXpjMmxpYkdVZ2RHOGdZV3hzYjJOaGRHVWdQakpuWWlCaWRXWm1aWElnWm05eUlHbHVjSFYwSUhSbGJuTnZjbHh1SUNBZ0lDQWdMeThnU1c1d2RYUWdaR0YwWVNCM2FXeHNJR0psSUhSeVpXRjBaV1FnWVhNZ2RUTXlJRzl5SUhSM2J5QjFNeklnWm05eUlEZ3RZbmwwWlNCMFpXNXpiM0p6WEc0Z0lDQWdJQ0JqYjI1emRDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVZ1BTQW9jMmhoWkdWeVNHVnNjR1Z5T2lCVGFHRmtaWEpJWld4d1pYSXBJRDArSUdCY2JpQWdJQ0FnSUNSN1hHNGdJQ0FnSUNBZ0lDQWdjMmhoWkdWeVNHVnNjR1Z5TG5KbFoybHpkR1Z5Vlc1cFptOXliU2duYjNWMGNIVjBVMmw2WlNjc0lDZDFNekluS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0F1Y21WbmFYTjBaWEpWYm1sbWIzSnRLQ2RoZUdselJHbHRUR2x0YVhRbkxDQW5hVE15SnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTG5KbFoybHpkR1Z5Vlc1cFptOXliU2duWVhocGN5Y3NJQ2QxTXpJbktWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBdVpHVmpiR0Z5WlZaaGNtbGhZbXhsY3locGJuQjFkQ3dnYVc1a2FXTmxjeXdnYjNWMGNIVjBLWDFjYmlBZ0lDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxtMWhhVzVUZEdGeWRDZ3BmVnh1SUNBZ0lDQWdKSHR6YUdGa1pYSklaV3h3WlhJdVozVmhjbVJCWjJGcGJuTjBUM1YwVDJaQ2IzVnVaSE5YYjNKclozSnZkWEJUYVhwbGN5Z25kVzVwWm05eWJYTXViM1YwY0hWMFUybDZaU2NwZlZ4dVhHNGdJQ0FnSUNCc1pYUWdiM1YwY0hWMFNXNWthV05sY3lBOUlDUjdiM1YwY0hWMExtOW1abk5sZEZSdlNXNWthV05sY3lnbloyeHZZbUZzWDJsa2VDY3BmVHRjYmx4dUlDQWdJQ0FnZG1GeUlHbGtlQ0E5SUNSN2FXNWthV05sY3k1blpYUkNlVTltWm5ObGRDZ25aMnh2WW1Gc1gybGtlQ2NwZlR0Y2JpQWdJQ0FnSUdsbUlDaHBaSGdnUENBd0tTQjdYRzRnSUNBZ0lDQWdJR2xrZUNBOUlHbGtlQ0FySUhWdWFXWnZjbTF6TG1GNGFYTkVhVzFNYVcxcGREdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIWmhjaUJwYm5CMWRFbHVaR2xqWlhNZ1BTQWtlMmx1Y0hWMExuUjVjR1V1YVc1a2FXTmxjMzBvYjNWMGNIVjBTVzVrYVdObGN5azdYRzRnSUNBZ0lDQWtlMmx1Y0hWMExtbHVaR2xqWlhOVFpYUW9KMmx1Y0hWMFNXNWthV05sY3ljc0lDZDFibWxtYjNKdGN5NWhlR2x6Snl3Z0ozVXpNaWhwWkhncEp5bDlPMXh1SUNBZ0lDQWdiR1YwSUhaaGJIVmxJRDBnSkh0cGJuQjFkQzVuWlhSQ2VVbHVaR2xqWlhNb0oybHVjSFYwU1c1a2FXTmxjeWNwZlR0Y2JseHVJQ0FnSUNBZ0pIdHZkWFJ3ZFhRdWMyVjBRbmxQWm1aelpYUW9KMmRzYjJKaGJGOXBaSGduTENBbmRtRnNkV1VuS1gwN1hHNGdJSDFnTzF4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnSUNCdVlXMWxPaUFuUjJGMGFHVnlSV3hsYldWdWRITW5MRnh1SUNBZ0lDQWdJQ0J6YUdGa1pYSkRZV05vWlRvZ2UybHVjSFYwUkdWd1pXNWtaVzVqYVdWemZTeGNiaUFnSUNBZ0lDQWdaMlYwVW5WdVJHRjBZVG9nS0NrZ1BUNGdLSHRjYmlBZ0lDQWdJQ0FnSUNCdmRYUndkWFJ6T2lCYmUyUnBiWE02SUc5MWRIQjFkRk5vWVhCbExDQmtZWFJoVkhsd1pUb2dhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxmVjBzWEc0Z0lDQWdJQ0FnSUNBZ1pHbHpjR0YwWTJoSGNtOTFjRG9nZTNnNklFMWhkR2d1WTJWcGJDaHZkWFJ3ZFhSVGFYcGxJQzhnTmpRZ0x5b2dkMjl5YTJkeWIzVndJSE5wZW1VZ0tpOHBmU3hjYmlBZ0lDQWdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE5jYmlBZ0lDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNBZ0lHZGxkRk5vWVdSbGNsTnZkWEpqWlN4Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUhCaGNuTmxSMkYwYUdWeVJXeGxiV1Z1ZEhOQmRIUnlhV0oxZEdWeklEMGdLR0YwZEhKcFluVjBaWE02SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSFZ1YTI1dmQyNCtLVG9nUjJGMGFHVnlSV3hsYldWdWRITkJkSFJ5YVdKMWRHVnpJRDArWEc0Z0lDQWdZM0psWVhSbFFYUjBjbWxpZFhSbFYybDBhRU5oWTJobFMyVjVLSHRoZUdsek9pQmhkSFJ5YVdKMWRHVnpMbUY0YVhNZ1lYTWdiblZ0WW1WeWZTazdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQm5ZWFJvWlhKRmJHVnRaVzUwY3lBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN6b2dSMkYwYUdWeVJXeGxiV1Z1ZEhOQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUdOdmJuTjBJR2x1Y0hWMGN5QTlJR052Ym5SbGVIUXVhVzV3ZFhSek8xeHVJQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5aHBibkIxZEhNcE8xeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFIyRjBhR1Z5Uld4bGJXVnVkSE5RY205bmNtRnRTVzVtYnloamIyNTBaWGgwTG1sdWNIVjBjeXdnWVhSMGNtbGlkWFJsY3lrcE8xeHVmVHRjYmlJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVhVzF3YjNKMElIdEVZWFJoVkhsd1pYMGdabkp2YlNBbkxpNHZMaTR2TGk0dmQyRnpiUzFqYjIxdGIyNG5PMXh1YVcxd2IzSjBJSHRVWlc1emIzSldhV1YzZlNCbWNtOXRJQ2N1TGk4dUxpOTBaVzV6YjNJdGRtbGxkeWM3WEc1cGJYQnZjblFnZTBkbGJXMVZkR2xzTENCVGFHRndaVlYwYVd4OUlHWnliMjBnSnk0dUx5NHVMM1YwYVd3bk8xeHVhVzF3YjNKMElIdEJkSFJ5YVdKMWRHVlhhWFJvUTJGamFHVkxaWGw5SUdaeWIyMGdKeTR1TDJGMGRISnBZblYwWlMxM2FYUm9MV05oWTJobExXdGxlU2M3WEc1cGJYQnZjblFnZTBOdmJYQjFkR1ZEYjI1MFpYaDBMQ0JRY205bmNtRnRTVzVtYnl3Z1VISnZaM0poYlVsdWNIVjBWR1Z1YzI5eVNXNW1iMFJsY0dWdVpHVnVZM2tzSUZCeWIyZHlZVzFWYm1sbWIzSnRmU0JtY205dElDY3VMaTkwZVhCbGN5YzdYRzVjYm1sdGNHOXlkQ0I3WTNKbFlYUmxWR1Z1YzI5eVUyaGhjR1ZXWVhKcFlXSnNaWE1zSUVsdVpHbGpaWE5JWld4d1pYSXNJR2x1Y0hWMFZtRnlhV0ZpYkdVc0lHOTFkSEIxZEZaaGNtbGhZbXhsTENCVGFHRmtaWEpJWld4d1pYSXNJRlZ1YVdadmNtMXpRWEp5WVhsVWVYQmxmU0JtY205dElDY3VMMk52YlcxdmJpYzdYRzVjYm1OdmJuTjBJSFpoYkdsa1lYUmxTVzV3ZFhSeklEMGdLR2x1Y0hWMGN6b2djbVZoWkc5dWJIa2dWR1Z1YzI5eVZtbGxkMXRkS1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR2xtSUNnaGFXNXdkWFJ6S1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RKYm5CMWRDQnBjeUJ0YVhOemFXNW5KeWs3WEc0Z0lIMWNiaUFnYVdZZ0tHbHVjSFYwY3k1c1pXNW5kR2dnUENBeUlIeDhJR2x1Y0hWMGN5NXNaVzVuZEdnZ1BpQXpLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpiblpoYVdRZ2FXNXdkWFFnYm5WdFltVnlMaWNwTzF4dUlDQjlYRzVjYmlBZ0x5OGdKME1uSUdOaGJpQmlaU0J2WmlCa2FXMWxibk5wYjI1aGJHbDBlU0F3TENBeElHOXlJRElnYjI1c2VWeHVJQ0JwWmlBb2FXNXdkWFJ6TG14bGJtZDBhQ0E5UFQwZ015QW1KaUJwYm5CMWRITmJNbDB1WkdsdGN5NXNaVzVuZEdnZ1BpQXlLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpiblpoYkdsa0lHbHVjSFYwSUhOb1lYQmxJRzltSUVNbktUdGNiaUFnZlZ4dVhHNGdJR2xtSUNnb2FXNXdkWFJ6V3pCZExtUmhkR0ZVZVhCbElDRTlQU0JwYm5CMWRITmJNVjB1WkdGMFlWUjVjR1VwSUh4OFhHNGdJQ0FnSUNBb2FXNXdkWFJ6TG14bGJtZDBhQ0E5UFQwZ015QW1KaUJwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1VnSVQwOUlHbHVjSFYwYzFzeVhTNWtZWFJoVkhsd1pTa3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owbHVjSFYwSUhSNWNHVnpJR0Z5WlNCdGFYTnRZWFJqYUdWa0p5azdYRzRnSUgxY2JuMDdYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnUjJWdGJVRjBkSEpwWW5WMFpYTWdaWGgwWlc1a2N5QkJkSFJ5YVdKMWRHVlhhWFJvUTJGamFHVkxaWGtnZTF4dUlDQjBjbUZ1YzBFNklHSnZiMnhsWVc0N1hHNGdJSFJ5WVc1elFqb2dZbTl2YkdWaGJqdGNiaUFnWVd4d2FHRTZJRzUxYldKbGNqdGNiaUFnWW1WMFlUb2diblZ0WW1WeU8xeHVmVnh1WEc1amIyNXpkQ0JqY21WaGRHVkhaVzF0VUhKdlozSmhiVWx1Wm04Z1BTQW9hVzV3ZFhSek9pQnlaV0ZrYjI1c2VTQlVaVzV6YjNKV2FXVjNXMTBzSUdGMGRISnBZblYwWlhNNklFZGxiVzFCZEhSeWFXSjFkR1Z6S1RvZ1VISnZaM0poYlVsdVptOGdQVDRnZTF4dUlDQmpiMjV6ZENCaFUyaGhjR1VnUFNCcGJuQjFkSE5iTUYwdVpHbHRjeTV6YkdsalpTZ3BPMXh1SUNCamIyNXpkQ0JpVTJoaGNHVWdQU0JwYm5CMWRITmJNVjB1WkdsdGN5NXpiR2xqWlNncE8xeHVJQ0JqYjI1emRDQmJUU3dnVGl3Z1MxMGdQU0JIWlcxdFZYUnBiQzVuWlhSVGFHRndaVTltUjJWdGJWSmxjM1ZzZENoY2JpQWdJQ0FnSUdGVGFHRndaU3dnWVhSMGNtbGlkWFJsY3k1MGNtRnVjMEVzSUdKVGFHRndaU3dnWVhSMGNtbGlkWFJsY3k1MGNtRnVjMElzSUdsdWNIVjBjeTVzWlc1bmRHZ2dQVDA5SURNZ1B5QnBibkIxZEhOYk1sMHVaR2x0Y3lBNklIVnVaR1ZtYVc1bFpDazdYRzRnSUdOdmJuTjBJRzkxZEhCMWRGTm9ZWEJsSUQwZ1cwMHNJRTVkTzF4dUlDQnBaaUFvSVc5MWRIQjFkRk5vWVhCbEtTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkRFlXNWNYQ2QwSUhWelpTQm5aVzF0SUc5dUlIUm9aU0JuYVhabGJpQjBaVzV6YjNKekp5azdYRzRnSUgxY2JpQWdZMjl1YzNRZ2IzVjBjSFYwVTJsNlpTQTlJRk5vWVhCbFZYUnBiQzV6YVhwbEtHOTFkSEIxZEZOb1lYQmxLVHRjYmlBZ1kyOXVjM1FnY0hKdlozSmhiVlZ1YVdadmNtMXpPaUJRY205bmNtRnRWVzVwWm05eWJWdGRJRDBnVzF4dUlDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUc5MWRIQjFkRk5wZW1WOUxDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJOZlN3Z2UzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2dUbjBzWEc0Z0lDQWdlM1I1Y0dVNklFUmhkR0ZVZVhCbExuVnBiblF6TWl3Z1pHRjBZVG9nUzMwc0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1bWJHOWhkQ3dnWkdGMFlUb2dZWFIwY21saWRYUmxjeTVoYkhCb1lYMHNYRzRnSUNBZ2UzUjVjR1U2SUVSaGRHRlVlWEJsTG1ac2IyRjBMQ0JrWVhSaE9pQmhkSFJ5YVdKMWRHVnpMbUpsZEdGOVhHNGdJRjA3WEc0Z0lHTnZibk4wSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6T2lCUWNtOW5jbUZ0U1c1d2RYUlVaVzV6YjNKSmJtWnZSR1Z3Wlc1a1pXNWplVnRkSUQwZ1d5ZDBlWEJsSnl3Z0ozUjVjR1VuWFR0Y2JpQWdhV1lnS0dsdWNIVjBjeTVzWlc1bmRHZ2dQVDA5SURNcElIdGNiaUFnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE11Y0hWemFDZ3VMaTVqY21WaGRHVlVaVzV6YjNKVGFHRndaVlpoY21saFlteGxjeWhwYm5CMWRITmJNbDB1WkdsdGN5a3BPMXh1SUNBZ0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWekxuQjFjMmdvSjNKaGJtc25LVHRjYmlBZ2ZWeHVJQ0J3Y205bmNtRnRWVzVwWm05eWJYTXVjSFZ6YUNndUxpNWpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5aHZkWFJ3ZFhSVGFHRndaU2twTzF4dVhHNGdJR052Ym5OMElHZGxkRk5vWVdSbGNsTnZkWEpqWlNBOUlDaHphR0ZrWlhKSVpXeHdaWEk2SUZOb1lXUmxja2hsYkhCbGNpa2dQVDRnZTF4dUlDQWdJR3hsZENCc2FXNWxJRDBnSnljN1hHNGdJQ0FnYVdZZ0tHRjBkSEpwWW5WMFpYTXVkSEpoYm5OQklDWW1JR0YwZEhKcFluVjBaWE11ZEhKaGJuTkNLU0I3WEc0Z0lDQWdJQ0JzYVc1bElEMGdKM1poYkhWbElDczlJR0ZiYXlBcUlIVnVhV1p2Y20xekxrMGdLeUJ0WFNBcUlHSmJiaUFxSUhWdWFXWnZjbTF6TGtzZ0t5QnJYVHNuTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvWVhSMGNtbGlkWFJsY3k1MGNtRnVjMEVnSmlZZ0lXRjBkSEpwWW5WMFpYTXVkSEpoYm5OQ0tTQjdYRzRnSUNBZ0lDQnNhVzVsSUQwZ0ozWmhiSFZsSUNzOUlHRmJheUFxSUhWdWFXWnZjbTF6TGswZ0t5QnRYU0FxSUdKYmF5QXFJSFZ1YVdadmNtMXpMazRnS3lCdVhUc25PMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9JV0YwZEhKcFluVjBaWE11ZEhKaGJuTkJJQ1ltSUdGMGRISnBZblYwWlhNdWRISmhibk5DS1NCN1hHNGdJQ0FnSUNCc2FXNWxJRDBnSjNaaGJIVmxJQ3M5SUdGYmJTQXFJSFZ1YVdadmNtMXpMa3NnS3lCclhTQXFJR0piYmlBcUlIVnVhV1p2Y20xekxrc2dLeUJyWFRzbk8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb0lXRjBkSEpwWW5WMFpYTXVkSEpoYm5OQklDWW1JQ0ZoZEhSeWFXSjFkR1Z6TG5SeVlXNXpRaWtnZTF4dUlDQWdJQ0FnYkdsdVpTQTlJQ2QyWVd4MVpTQXJQU0JoVzIwZ0tpQjFibWxtYjNKdGN5NUxJQ3NnYTEwZ0tpQmlXMnNnS2lCMWJtbG1iM0p0Y3k1T0lDc2dibDA3Snp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRDQmpZV3hqZFd4aGRHVkJiSEJvWVNBOUlHRjBkSEpwWW5WMFpYTXVZV3h3YUdFZ1BUMDlJREVnUHlBbkp5QTZJQ2QyWVd4MVpTQXFQU0IxYm1sbWIzSnRjeTVoYkhCb1lUc25PMXh1SUNBZ0lHTnZibk4wSUdFZ1BTQnBibkIxZEZaaGNtbGhZbXhsS0NkaEp5d2dhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxMQ0JwYm5CMWRITmJNRjB1WkdsdGN5azdYRzRnSUNBZ1kyOXVjM1FnWWlBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjJJbkxDQnBibkIxZEhOYk1WMHVaR0YwWVZSNWNHVXNJR2x1Y0hWMGMxc3hYUzVrYVcxektUdGNiaUFnSUNCamIyNXpkQ0JrWVhSaFZIbHdaU0E5SUdFdWRIbHdaUzUyWVd4MVpUdGNiaUFnSUNCc1pYUWdZem9nU1c1a2FXTmxjMGhsYkhCbGNueHVkV3hzSUQwZ2JuVnNiRHRjYmlBZ0lDQmpiMjV6ZENCMllYSnBZV0pzWlhNZ1BTQmJZU3dnWWwwN1hHNGdJQ0FnYVdZZ0tHbHVjSFYwY3k1c1pXNW5kR2dnUFQwOUlETXBJSHRjYmlBZ0lDQWdJR01nUFNCcGJuQjFkRlpoY21saFlteGxLQ2RqSnl3Z2FXNXdkWFJ6V3pKZExtUmhkR0ZVZVhCbExDQnBibkIxZEhOYk1sMHVaR2x0Y3k1c1pXNW5kR2dwTzF4dUlDQWdJQ0FnZG1GeWFXRmliR1Z6TG5CMWMyZ29ZeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUc5MWRIQjFkQ0E5SUc5MWRIQjFkRlpoY21saFlteGxLQ2R2ZFhSd2RYUW5MQ0JwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1VzSUc5MWRIQjFkRk5vWVhCbExteGxibWQwYUNrN1hHNGdJQ0FnZG1GeWFXRmliR1Z6TG5CMWMyZ29iM1YwY0hWMEtUdGNiaUFnSUNCamIyNXpkQ0IxYm1sbWIzSnRjem9nVlc1cFptOXliWE5CY25KaGVWUjVjR1VnUFNCYlhHNGdJQ0FnSUNCN2JtRnRaVG9nSjI5MWRIQjFkRjl6YVhwbEp5d2dkSGx3WlRvZ0ozVXpNaWQ5TENCN2JtRnRaVG9nSjAwbkxDQjBlWEJsT2lBbmRUTXlKMzBzSUh0dVlXMWxPaUFuVGljc0lIUjVjR1U2SUNkMU16SW5mU3dnZTI1aGJXVTZJQ2RMSnl3Z2RIbHdaVG9nSjNVek1pZDlMRnh1SUNBZ0lDQWdlMjVoYldVNklDZGhiSEJvWVNjc0lIUjVjR1U2SUNkbU16SW5mU3dnZTI1aGJXVTZJQ2RpWlhSaEp5d2dkSGx3WlRvZ0oyWXpNaWQ5WEc0Z0lDQWdYVHRjYmlBZ0lDQnlaWFIxY200Z1lGeHVJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNXlaV2RwYzNSbGNsVnVhV1p2Y20xektIVnVhV1p2Y20xektTNWtaV05zWVhKbFZtRnlhV0ZpYkdWektDNHVMblpoY21saFlteGxjeWw5WEc1Y2JpQWdKSHR6YUdGa1pYSklaV3h3WlhJdWJXRnBibE4wWVhKMEtDbDlYRzRnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1WjNWaGNtUkJaMkZwYm5OMFQzVjBUMlpDYjNWdVpITlhiM0pyWjNKdmRYQlRhWHBsY3lnbmRXNXBabTl5YlhNdWIzVjBjSFYwWDNOcGVtVW5LWDFjYmx4dUlDQWdJR3hsZENCdElEMGdaMnh2WW1Gc1gybGtlQ0F2SUhWdWFXWnZjbTF6TGs0N1hHNGdJQ0FnYkdWMElHNGdQU0JuYkc5aVlXeGZhV1I0SUNVZ2RXNXBabTl5YlhNdVRqdGNibHh1SUNBZ0lIWmhjaUIyWVd4MVpTQTlJQ1I3WkdGMFlWUjVjR1Y5S0RBcE8xeHVJQ0FnSUdadmNpQW9kbUZ5SUdzNklIVXpNaUE5SURCMU95QnJJRHdnZFc1cFptOXliWE11U3pzZ2F5c3JLU0I3WEc0Z0lDQWdJQ0FrZTJ4cGJtVjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0pIdGpZV3hqZFd4aGRHVkJiSEJvWVgxY2JpQWdJQ0FrZXlnb0tTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb1l5QWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmdiR1YwSUdOUFptWnpaWFFnUFNBa2UyTXVZbkp2WVdSallYTjBaV1JKYm1ScFkyVnpWRzlQWm1aelpYUW9KM1psWXpJb2JTd2diaWtuTENCdmRYUndkWFFwZlRzZ2RtRnNkV1VnS3owZ0pIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdSaGRHRlVlWEJsZlNoMWJtbG1iM0p0Y3k1aVpYUmhLU0FxSUNSN1l5NW5aWFJDZVU5bVpuTmxkQ2duWTA5bVpuTmxkQ2NwZlR0Z08xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2NtVjBkWEp1SUNjbk8xeHVJQ0FnSUgwcEtDbDlYRzRnSUNBZ2IzVjBjSFYwVzJkc2IySmhiRjlwWkhoZElEMGdkbUZzZFdVN1hHNGdJSDFnTzF4dUlDQjlPMXh1WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYm1GdFpUb2dKMGRsYlcwbkxGeHVJQ0FnSUhOb1lXUmxja05oWTJobE9pQjdhR2x1ZERvZ1lDUjdZWFIwY21saWRYUmxjeTVqWVdOb1pVdGxlWDFnTENCcGJuQjFkRVJsY0dWdVpHVnVZMmxsYzMwc1hHNGdJQ0FnWjJWMFVuVnVSR0YwWVRvZ0tDa2dQVDRnS0h0Y2JpQWdJQ0FnSUc5MWRIQjFkSE02SUZ0N1pHbHRjem9nYjNWMGNIVjBVMmhoY0dVc0lHUmhkR0ZVZVhCbE9pQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVjlYU3hjYmlBZ0lDQWdJR1JwYzNCaGRHTm9SM0p2ZFhBNklIdDRPaUJOWVhSb0xtTmxhV3dvYjNWMGNIVjBVMmw2WlNBdklEWTBJQzhxSUhkdmNtdG5jbTkxY0NCemFYcGxJQ292S1gwc1hHNGdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE5jYmlBZ0lDQjlLU3hjYmlBZ0lDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVc1hHNGdJSDA3WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2NHRnljMlZIWlcxdFFYUjBjbWxpZFhSbGN5QTlJQ2hoZEhSeWFXSjFkR1Z6T2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0IxYm10dWIzZHVQaWs2SUVkbGJXMUJkSFJ5YVdKMWRHVnpJRDArSUh0Y2JpQWdZMjl1YzNRZ2RISmhibk5CSUQwZ1lYUjBjbWxpZFhSbGN5NTBjbUZ1YzBFZ1lYTWdZbTl2YkdWaGJqdGNiaUFnWTI5dWMzUWdkSEpoYm5OQ0lEMGdZWFIwY21saWRYUmxjeTUwY21GdWMwSWdZWE1nWW05dmJHVmhianRjYmlBZ1kyOXVjM1FnWVd4d2FHRWdQU0JoZEhSeWFXSjFkR1Z6TG1Gc2NHaGhJR0Z6SUc1MWJXSmxjanRjYmlBZ1kyOXVjM1FnWW1WMFlTQTlJR0YwZEhKcFluVjBaWE11WW1WMFlTQmhjeUJ1ZFcxaVpYSTdYRzRnSUhKbGRIVnliaUI3ZEhKaGJuTkJMQ0IwY21GdWMwSXNJR0ZzY0doaExDQmlaWFJoTENCallXTm9aVXRsZVRvZ1lDUjdZWFIwY21saWRYUmxjeTUwY21GdWMwRjlPeVI3WVhSMGNtbGlkWFJsY3k1MGNtRnVjMEo5T3lSN1lYUjBjbWxpZFhSbGN5NWhiSEJvWVNBOVBUMGdNWDFnZlR0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQm5aVzF0SUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwTENCaGRIUnlhV0oxZEdWek9pQkhaVzF0UVhSMGNtbGlkWFJsY3lrNklIWnZhV1FnUFQ0Z2UxeHVJQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5aGpiMjUwWlhoMExtbHVjSFYwY3lrN1hHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGpjbVZoZEdWSFpXMXRVSEp2WjNKaGJVbHVabThvWTI5dWRHVjRkQzVwYm5CMWRITXNJR0YwZEhKcFluVjBaWE1wS1R0Y2JuMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1JHRjBZVlI1Y0dWOUlHWnliMjBnSnk0dUx5NHVMeTR1TDNkaGMyMHRZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdWR1Z1YzI5eVZtbGxkMzBnWm5KdmJTQW5MaTR2TGk0dmRHVnVjMjl5TFhacFpYY25PMXh1YVcxd2IzSjBJSHRUYUdGd1pWVjBhV3g5SUdaeWIyMGdKeTR1THk0dUwzVjBhV3duTzF4dWFXMXdiM0owSUh0RGIyMXdkWFJsUTI5dWRHVjRkQ3dnVUhKdlozSmhiVWx1Wm04c0lGQnliMmR5WVcxSmJuQjFkRlJsYm5OdmNrbHVabTlFWlhCbGJtUmxibU41TENCUWNtOW5jbUZ0Vlc1cFptOXliWDBnWm5KdmJTQW5MaTR2ZEhsd1pYTW5PMXh1WEc1cGJYQnZjblFnZTJOeVpXRjBaVlJsYm5OdmNsTm9ZWEJsVm1GeWFXRmliR1Z6TENCbWFXeHNWbVZqZEc5eUxDQm5aWFJOWVhoRGIyMXdiMjVsYm5SekxDQnBibkIxZEZaaGNtbGhZbXhsTENCdmRYUndkWFJXWVhKcFlXSnNaU3dnVTJoaFpHVnlTR1ZzY0dWeUxDQnpkVzFXWldOMGIzSXNJSFJsYm5OdmNsUjVjR1ZVYjFkeloyeFRkRzl5WVdkbFZIbHdaU3dnVlc1cFptOXliWE5CY25KaGVWUjVjR1Y5SUdaeWIyMGdKeTR2WTI5dGJXOXVKenRjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCSmJuTjBZVzVqWlU1dmNtMUJkSFJ5YVdKMWRHVnpJSHRjYmlBZ1pYQnphV3h2YmpvZ2JuVnRZbVZ5TzF4dUlDQm1iM0p0WVhRNklDZE9TRmRESjN3blRrTklWeWM3WEc1OVhHNWNibU52Ym5OMElHTnlaV0YwWlVsdWMzUmhibU5sVG05eWJWQnliMmR5WVcxSmJtWnZJRDFjYmlBZ0lDQW9hVzV3ZFhSek9pQnlaV0ZrYjI1c2VTQlVaVzV6YjNKV2FXVjNXMTBzSUdGMGRISnBZblYwWlhNNklFbHVjM1JoYm1ObFRtOXliVUYwZEhKcFluVjBaWE1wT2lCUWNtOW5jbUZ0U1c1bWJ5QTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQjRVMmhoY0dVZ1BTQnBibkIxZEhOYk1GMHVaR2x0Y3p0Y2JpQWdJQ0FnSUdOdmJuTjBJRzkxZEhCMWRGTm9ZWEJsSUQwZ2VGTm9ZWEJsTzF4dUlDQWdJQ0FnWTI5dWMzUWdZWGhwY3lBOUlESTdYRzRnSUNBZ0lDQmpiMjV6ZENCdWIzSnRRMjkxYm5RZ1BTQlRhR0Z3WlZWMGFXd3VjMmw2WlZSdlJHbHRaVzV6YVc5dUtIaFRhR0Z3WlN3Z1lYaHBjeWs3WEc0Z0lDQWdJQ0JqYjI1emRDQnViM0p0VTJsNlpTQTlJRk5vWVhCbFZYUnBiQzV6YVhwbFJuSnZiVVJwYldWdWMybHZiaWg0VTJoaGNHVXNJR0Y0YVhNcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWTI5dGNHOXVaVzUwY3lBOUlHZGxkRTFoZUVOdmJYQnZibVZ1ZEhNb2JtOXliVk5wZW1VcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYm05eWJWQmhZMnRsWkZOcGVtVWdQU0J1YjNKdFUybDZaU0F2SUdOdmJYQnZibVZ1ZEhNN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRGTm9ZWEJsSUQwZ1czaFRhR0Z3WlZzd1hTd2dlRk5vWVhCbFd6RmRMQ0J1YjNKdFVHRmphMlZrVTJsNlpWMDdYRzRnSUNBZ0lDQmpiMjV6ZENCcGJuQjFkRVJsY0dWdVpHVnVZMmxsY3pvZ1VISnZaM0poYlVsdWNIVjBWR1Z1YzI5eVNXNW1iMFJsY0dWdVpHVnVZM2xiWFNBOUlGc25jbUZ1YXljc0lDZDBlWEJsSnl3Z0ozUjVjR1VuWFR0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ5YjJkeVlXMVZibWxtYjNKdGN6b2dVSEp2WjNKaGJWVnVhV1p2Y20xYlhTQTlYRzRnSUNBZ0lDQWdJQ0FnVzN0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklHNXZjbTFUYVhwbGZTd2dlM1I1Y0dVNklFUmhkR0ZVZVhCbExuVnBiblF6TWl3Z1pHRjBZVG9nYm05eWJWQmhZMnRsWkZOcGVtVjlYVHRjYmlBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGN5NXdkWE5vS0M0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHbHVjSFYwVTJoaGNHVXNJR2x1Y0hWMFUyaGhjR1VwS1R0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxJRDBnS0hOb1lXUmxja2hsYkhCbGNqb2dVMmhoWkdWeVNHVnNjR1Z5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElIZ2dQU0JwYm5CMWRGWmhjbWxoWW14bEtDZDRKeXdnYVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsTENCcGJuQjFkRk5vWVhCbExteGxibWQwYUN3Z1kyOXRjRzl1Wlc1MGN5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElITmpZV3hsSUQwZ2FXNXdkWFJXWVhKcFlXSnNaU2duYzJOaGJHVW5MQ0JwYm5CMWRITmJNVjB1WkdGMFlWUjVjR1VzSUdsdWNIVjBjMXN4WFM1a2FXMXpLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdZbWxoY3lBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjJKcFlYTW5MQ0JwYm5CMWRITmJNbDB1WkdGMFlWUjVjR1VzSUdsdWNIVjBjMXN5WFM1a2FXMXpLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMElEMGdiM1YwY0hWMFZtRnlhV0ZpYkdVb0oyOTFkSEIxZENjc0lHbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pTd2dhVzV3ZFhSVGFHRndaUzVzWlc1bmRHZ3NJR052YlhCdmJtVnVkSE1wTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IyWVhKcFlXSnNaWE1nUFNCYmVDd2djMk5oYkdVc0lHSnBZWE1zSUc5MWRIQjFkRjA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1JoZEdGVWVYQmxJRDBnZUM1MGVYQmxMblpoYkhWbE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCbU16SlVlWEJsSUQwZ1kyOXRjRzl1Wlc1MGN5QTlQVDBnTVNBL0lDZG1NekluSURvZ1lIWmxZeVI3WTI5dGNHOXVaVzUwYzMwOFpqTXlQbUE3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSGR2Y210bmNtOTFjRk5wZW1VZ1BTQTJORHRjYmx4dUlDQWdJQ0FnSUNCamIyNXpkQ0IxYm1sbWIzSnRjem9nVlc1cFptOXliWE5CY25KaGVWUjVjR1VnUFNCYmUyNWhiV1U2SUNkdWIzSnRVMmw2WlNjc0lIUjVjR1U2SUNkMU16SW5mU3dnZTI1aGJXVTZJQ2R1YjNKdFVHRmphMlZrVTJsNlpTY3NJSFI1Y0dVNklDZDFNekluZlYwN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ1hHNGdJSFpoY2p4M2IzSnJaM0p2ZFhBK0lHMWxZVzVUYUdGeVpXUWdPaUJtTXpJN1hHNGdJSFpoY2p4M2IzSnJaM0p2ZFhBK0lITnhkV0Z5WldST2IzSnRVMmhoY21Wa0lEb2daak15TzF4dUlDQjJZWEk4ZDI5eWEyZHliM1Z3UGlCM2IzSnJaM0p2ZFhCVGFHRnlaV1FnT2lCaGNuSmhlVHdrZTJZek1sUjVjR1Y5TENBa2UzZHZjbXRuY205MWNGTnBlbVY5UGp0Y2JpQWdZMjl1YzNRZ2QyOXlhMmR5YjNWd1UybDZaU0E5SUNSN2QyOXlhMmR5YjNWd1UybDZaWDExTzF4dUlDQWtlM05vWVdSbGNraGxiSEJsY2k1eVpXZHBjM1JsY2xWdWFXWnZjbTF6S0hWdWFXWnZjbTF6S1M1a1pXTnNZWEpsVm1GeWFXRmliR1Z6S0M0dUxuWmhjbWxoWW14bGN5bDlYRzRnSUNSN2MyaGhaR1Z5U0dWc2NHVnlMbTFoYVc1VGRHRnlkQ2gzYjNKclozSnZkWEJUYVhwbEtYMWNiaUFnSUNCc1pYUWdibTl5YlNBOUlHZHNiMkpoYkY5cFpIZ2dMeUIzYjNKclozSnZkWEJUYVhwbE8xeHVJQ0FnSUd4bGRDQmlZWFJqYUNBOUlHNXZjbTBnTHlCMWJtbG1iM0p0Y3k1NFgzTm9ZWEJsV3pGZE8xeHVJQ0FnSUd4bGRDQmphR0Z1Ym1Wc0lEMGdibTl5YlNBbElIVnVhV1p2Y20xekxuaGZjMmhoY0dWYk1WMDdYRzRnSUNBZ2JHVjBJR3h2WTJGc1NXNWtaWGdnUFNCc2IyTmhiRjlwWkM1NE8xeHVYRzRnSUNBZ0x5OGdhVzVwZEdsaGJHbDZaU0IzYjNKclozSnZkWEFnYldWdGIzSjVYRzRnSUNBZ2RtRnlJR2x1YVhScFlXd2dQU0FrZTJZek1sUjVjR1Y5S0RBcE8xeHVJQ0FnSUdadmNpQW9kbUZ5SUdnZ1BTQnNiMk5oYkVsdVpHVjRPeUJvSUR3Z2RXNXBabTl5YlhNdWJtOXliVkJoWTJ0bFpGTnBlbVU3SUdnZ0t6MGdkMjl5YTJkeWIzVndVMmw2WlNrZ2UxeHVJQ0FnSUNBZ2FXNXBkR2xoYkNBOUlHbHVhWFJwWVd3Z0t5QWtlMll6TWxSNWNHVjlLQ1I3ZUM1blpYUW9KMkpoZEdOb0p5d2dKMk5vWVc1dVpXd25MQ0FuYUNjcGZTazdYRzRnSUNBZ2ZWeHVJQ0FnSUhkdmNtdG5jbTkxY0ZOb1lYSmxaRnRzYjJOaGJFbHVaR1Y0WFNBOUlHbHVhWFJwWVd3N1hHNGdJQ0FnZDI5eWEyZHliM1Z3UW1GeWNtbGxjaWdwTzF4dVhHNGdJQ0FnTHk4Z1EyRnNZM1ZzWVhSbElIUm9aU0J0WldGdUlHOW1JR04xY25KbGJuUWdZMmhoYm01bGJDQmtZWFJoTGx4dUlDQWdJR1p2Y2lBb2RtRnlJR04xY25KVGFYcGxJRDBnZDI5eWEyZHliM1Z3VTJsNlpTQStQaUF4T3lBZ1kzVnljbE5wZW1VZ1BpQXdPeUJqZFhKeVUybDZaU0E5SUdOMWNuSlRhWHBsSUQ0K0lERXBJSHRjYmlBZ0lDQWdJR2xtSUNoc2IyTmhiRWx1WkdWNElEd2dZM1Z5Y2xOcGVtVXBJSHRjYmlBZ0lDQWdJQ0FnZDI5eWEyZHliM1Z3VTJoaGNtVmtXMnh2WTJGc1NXNWtaWGhkSUQwZ2QyOXlhMmR5YjNWd1UyaGhjbVZrVzJ4dlkyRnNTVzVrWlhoZElDc2dkMjl5YTJkeWIzVndVMmhoY21Wa1cyeHZZMkZzU1c1a1pYZ2dLeUJqZFhKeVUybDZaVjA3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IzYjNKclozSnZkWEJDWVhKeWFXVnlLQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2hzYjJOaGJFbHVaR1Y0SUQwOUlEQXBJSHRjYmlBZ0lDQWdJRzFsWVc1VGFHRnlaV1FnUFNBa2UzTjFiVlpsWTNSdmNpZ25kMjl5YTJkeWIzVndVMmhoY21Wa1d6QmRKeXdnWTI5dGNHOXVaVzUwY3lsOUlDOGdaak15S0hWdWFXWnZjbTF6TG01dmNtMVRhWHBsS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkMjl5YTJkeWIzVndRbUZ5Y21sbGNpZ3BPMXh1WEc0Z0lDQWdMeThnY21WcGJtbDBhV0ZzYVhwbElIZHZjbXRuY205MWNDQnRaVzF2Y25rdVhHNGdJQ0FnYVc1cGRHbGhiQ0E5SUNSN1pqTXlWSGx3Wlgwb01DazdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FDQTlJR3h2WTJGc1NXNWtaWGc3SUdnZ1BDQjFibWxtYjNKdGN5NXViM0p0VUdGamEyVmtVMmw2WlRzZ2FDQXJQU0IzYjNKclozSnZkWEJUYVhwbEtTQjdYRzRnSUNBZ0lDQnNaWFFnWkdWMmFXRjBhVzl1SUQwZ0lDUjdaak15Vkhsd1pYMG9KSHQ0TG1kbGRDZ25ZbUYwWTJnbkxDQW5ZMmhoYm01bGJDY3NJQ2RvSnlsOUtTQXRJQ1I3WmpNeVZIbHdaWDBvYldWaGJsTm9ZWEpsWkNrN1hHNGdJQ0FnSUNCcGJtbDBhV0ZzSUQwZ2FXNXBkR2xoYkNBcklHUmxkbWxoZEdsdmJpQXFJR1JsZG1saGRHbHZianRjYmlBZ0lDQjlYRzRnSUNBZ2QyOXlhMmR5YjNWd1UyaGhjbVZrVzJ4dlkyRnNTVzVrWlhoZElEMGdhVzVwZEdsaGJEdGNiaUFnSUNCM2IzSnJaM0p2ZFhCQ1lYSnlhV1Z5S0NrN1hHNWNiaUFnSUNBdkx5QkRZV3hqZFd4aGRHVWdkR2hsSUhOMWJTQnZaaUJ6Y1hWaGNtVWdiMllnWkdWMmFXRjBhVzl1SUc5bUlHTjFjbkpsYm5RZ1kyaGhibTVsYkNCa1lYUmhMbHh1SUNBZ0lHWnZjaUFvZG1GeUlHTjFjbkpUYVhwbElEMGdkMjl5YTJkeWIzVndVMmw2WlNBK1BpQXhPeUFnWTNWeWNsTnBlbVVnUGlBd095QmpkWEp5VTJsNlpTQTlJR04xY25KVGFYcGxJRDQrSURFcElIdGNiaUFnSUNBZ0lHbG1JQ2hzYjJOaGJFbHVaR1Y0SUR3Z1kzVnljbE5wZW1VcElIdGNiaUFnSUNBZ0lDQWdkMjl5YTJkeWIzVndVMmhoY21Wa1cyeHZZMkZzU1c1a1pYaGRJRDBnZDI5eWEyZHliM1Z3VTJoaGNtVmtXMnh2WTJGc1NXNWtaWGhkSUNzZ2QyOXlhMmR5YjNWd1UyaGhjbVZrVzJ4dlkyRnNTVzVrWlhnZ0t5QmpkWEp5VTJsNlpWMDdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQjNiM0pyWjNKdmRYQkNZWEp5YVdWeUtDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaHNiMk5oYkVsdVpHVjRJRDA5SURBcElIdGNiaUFnSUNBZ0lITnhkV0Z5WldST2IzSnRVMmhoY21Wa0lEMGdKSHR6ZFcxV1pXTjBiM0lvSjNkdmNtdG5jbTkxY0ZOb1lYSmxaRnN3WFNjc0lHTnZiWEJ2Ym1WdWRITXBmVHRjYmlBZ0lDQjlYRzRnSUNBZ2QyOXlhMmR5YjNWd1FtRnljbWxsY2lncE8xeHVYRzRnSUNBZ2JHVjBJR2x1ZGxOMFpFUmxkaUE5SUdsdWRtVnljMlZUY1hKMEtITnhkV0Z5WldST2IzSnRVMmhoY21Wa0lDOGdaak15S0hWdWFXWnZjbTF6TG01dmNtMVRhWHBsS1NBcklHWXpNaWdrZTJGMGRISnBZblYwWlhNdVpYQnphV3h2Ym4wcEtUdGNiaUFnSUNCc1pYUWdZMmhoYm01bGJGTmpZV3hsSUQwZ2FXNTJVM1JrUkdWMklDb2daak15S0NSN2MyTmhiR1V1WjJWMFFubFBabVp6WlhRb0oyTm9ZVzV1Wld3bktYMHBPMXh1SUNBZ0lHeGxkQ0JqYUdGdWJtVnNVMmhwWm5RZ1BTQm1NeklvSkh0aWFXRnpMbWRsZEVKNVQyWm1jMlYwS0NkamFHRnVibVZzSnlsOUtTQXRJRzFsWVc1VGFHRnlaV1FnS2lCamFHRnVibVZzVTJOaGJHVTdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FDQTlJR3h2WTJGc1NXNWtaWGc3SUdnZ1BDQjFibWxtYjNKdGN5NXViM0p0VUdGamEyVmtVMmw2WlRzZ2FDQXJQU0IzYjNKclozSnZkWEJUYVhwbEtTQjdYRzRnSUNBZ0lDQnNaWFFnZG1Gc2RXVWdQU0FrZTNndVoyVjBLQ2RpWVhSamFDY3NJQ2RqYUdGdWJtVnNKeXdnSjJnbktYMGdLaUFrZTJSaGRHRlVlWEJsZlNna2UyWXpNbFI1Y0dWOUtHTm9ZVzV1Wld4VFkyRnNaU2twSUNzZ0pIdGtZWFJoVkhsd1pYMG9KSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHWXpNbFI1Y0dWOUtHTm9ZVzV1Wld4VGFHbG1kQ2twTzF4dUlDQWdJQ0FnSkh0dmRYUndkWFF1YzJWMEtDZGlZWFJqYUNjc0lDZGphR0Z1Ym1Wc0p5d2dKMmduTENBbmRtRnNkV1VuS1gwN1hHNGdJQ0FnZlZ4dUlDQjlZRHRjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0F1TGk1N2JtRnRaVG9nSjBsdWMzUmhibU5sVG05eWJXRnNhWHBoZEdsdmJpZDlMRnh1SUNBZ0lDQWdJQ0F2THlCVVQwUlBPaUIxYzJVZ1pYQnphV3h2YmlCaGN5QjFibWxtYjNKdExpQkRkWEp5Wlc1MGJIa2daWEJ6YVd4dmJpQmhjeUIxYm1sbWIzSnRJR1poYVd4eklIUmxjM1JmYVc1emRHRnVZMlZ1YjNKdFgyVndjMmxzYjI0dVhHNGdJQ0FnSUNBZ0lITm9ZV1JsY2tOaFkyaGxPaUI3YUdsdWREb2dZQ1I3WVhSMGNtbGlkWFJsY3k1bGNITnBiRzl1ZlRza2UyTnZiWEJ2Ym1WdWRITjlZQ3dnYVc1d2RYUkVaWEJsYm1SbGJtTnBaWE45TEZ4dUlDQWdJQ0FnSUNCblpYUlNkVzVFWVhSaE9pQW9LU0E5UGlBb2UxeHVJQ0FnSUNBZ0lDQWdJRzkxZEhCMWRITTZJRnRjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGthVzF6T2lCdmRYUndkWFJUYUdGd1pTd2daR0YwWVZSNWNHVTZJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaWDBzWEc0Z0lDQWdJQ0FnSUNBZ1hTeGNiaUFnSUNBZ0lDQWdJQ0JrYVhOd1lYUmphRWR5YjNWd09pQjdlRG9nYm05eWJVTnZkVzUwZlN4Y2JpQWdJQ0FnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhOY2JpQWdJQ0FnSUNBZ2ZTa3NYRzRnSUNBZ0lDQWdJR2RsZEZOb1lXUmxjbE52ZFhKalpTeGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZUdGNibHh1WTI5dWMzUWdZMjl0Y0hWMFpVMWxZVzRnUFZ4dUlDQWdJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDd2dhVzV3ZFhRNklGUmxibk52Y2xacFpYY3NJSE5qWVd4bE9pQlVaVzV6YjNKV2FXVjNMQ0JpYVdGek9pQlVaVzV6YjNKV2FXVjNMQ0J1T2lCdWRXMWlaWElzSUdnNklHNTFiV0psY2l3Z1l6b2diblZ0WW1WeUxGeHVJQ0FnSUNCbGNITnBiRzl1T2lCdWRXMWlaWElwSUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUdOdmJYQnZibVZ1ZEhNZ1BTQm5aWFJOWVhoRGIyMXdiMjVsYm5SektHTXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ1YwY2dQU0EyTkR0Y2JpQWdJQ0FnSUM4dklIZGxJSGRwYkd3Z2MzUnZjbVVnWTJoaGJtNWxiQ0J6WTJGc1pTQmhibVFnWTJoaGJtNWxiQ0J6YUdsbWRDQnBiaUJiTWl3Z1kyOXRjRzl1Wlc1MGMxMGdiV0YwY21sNFhHNGdJQ0FnSUNBdkx5QnZjaUJwYmlCMlpXTXlJSGRvWlc0Z1kyOXRjRzl1Wlc1MGN5QTlQU0F4WEc0Z0lDQWdJQ0JqYjI1emRDQnZkWFJ3ZFhSVWVYQmxJRDBnWTI5dGNHOXVaVzUwY3lBOVBUMGdNU0EvSUNkMlpXTXlaaWNnT2lCZ2JXRjBNbmdrZTJOdmJYQnZibVZ1ZEhOOVptQTdYRzRnSUNBZ0lDQmpiMjV6ZENCemRXMURZWE4wVkhsd1pTQTlJR052YlhCdmJtVnVkSE1nUFQwOUlERWdQeUFuWmpNeUp5QTZJR0IyWldNa2UyTnZiWEJ2Ym1WdWRITjlabUE3WEc0Z0lDQWdJQ0JqYjI1emRDQnpaWFJQZFhSd2RYUldZV3gxWlNBOUlDaDJZWEl4T2lCemRISnBibWNzSUhaaGNqSTZJSE4wY21sdVp5a2dQVDRnWUNSN2IzVjBjSFYwVkhsd1pYMG9KSHQyWVhJeGZTd2dKSHQyWVhJeWZTbGdPMXh1SUNBZ0lDQWdZMjl1YzNRZ2RXNXBkSE5QWmxkdmNtc2dQU0J1SUNvZ1l5QXZJR052YlhCdmJtVnVkSE03WEc0Z0lDQWdJQ0JqYjI1emRDQjNaMU5wZW1VZ1BTQk5ZWFJvTG1ObGFXd29hQ0F2SUZkSEtUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2JXVmhia2x1Y0hWMFJHVndaVzVrWlc1amFXVnpPaUJRY205bmNtRnRTVzV3ZFhSVVpXNXpiM0pKYm1adlJHVndaVzVrWlc1amVWdGRJRDBnV3lkMGVYQmxKMTA3WEc0Z0lDQWdJQ0JqYjI1emRDQnRaV0Z1VUhKdlozSmhiVlZ1YVdadmNtMXpPaUJRY205bmNtRnRWVzVwWm05eWJWdGRJRDBnVzF4dUlDQWdJQ0FnSUNCN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQjNaMU5wZW1WOUxDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJvZlN4Y2JpQWdJQ0FnSUNBZ2UzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2dUV0YwYUM1bWJHOXZjaWhqSUM4Z1kyOXRjRzl1Wlc1MGN5bDlMRnh1SUNBZ0lDQWdJQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCTllYUm9MbVpzYjI5eUtHZ2dLaUJqSUM4Z1kyOXRjRzl1Wlc1MGN5bDlYRzRnSUNBZ0lDQmRPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQm5aWFJOWldGdVUyaGhaR1Z5VTI5MWNtTmxJRDBnS0hOb1lXUmxja2hsYkhCbGNqb2dVMmhoWkdWeVNHVnNjR1Z5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHbHVjSFYwU0dWc2NHVnlJRDBnYVc1d2RYUldZWEpwWVdKc1pTZ25hVzV3ZFhRbkxDQnBibkIxZEM1a1lYUmhWSGx3WlN3Z2FXNXdkWFF1WkdsdGN5d2dZMjl0Y0c5dVpXNTBjeWs3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJnWEc0Z0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG1SbFkyeGhjbVZXWVhKcFlXSnNaWE1vYVc1d2RYUklaV3h3WlhJcGZWeHVJQ0JBWjNKdmRYQW9NQ2tnUUdKcGJtUnBibWNvTVNrZ2RtRnlQSE4wYjNKaFoyVXNJSEpsWVdSZmQzSnBkR1UrSUc5MWRIQjFkQ0E2SUdGeWNtRjVQQ1I3YjNWMGNIVjBWSGx3WlgwK08xeHVJQ0J6ZEhKMVkzUWdWVzVwWm05eWJYTWdlM2RuWDNOcGVtVTZkVE15TENCSU9uVXpNaXdnUXpwMU16SXNJR2x0WVdkbFgzTnBlbVU2ZFRNeWZUdGNiaUFnUUdkeWIzVndLREFwSUVCaWFXNWthVzVuS0RJcElIWmhjangxYm1sbWIzSnRQaUIxYm1sbWIzSnRjem9nVlc1cFptOXliWE03WEc1Y2JpQWdKSHR6YUdGa1pYSklaV3h3WlhJdWJXRnBibE4wWVhKMEtGZEhLWDFjYmlBZ0lDQnNaWFFnWTNWeWNtVnVkRWx0WVdkbFRuVnRZbVZ5SUQwZ1oyeHZZbUZzWDJsa2VDQXZJQ1I3VjBkOUlDOGdkVzVwWm05eWJYTXVRenRjYmlBZ0lDQnNaWFFnWTNWeWNtVnVkRU5vWVc1dVpXeE9kVzFpWlhJZ1BTQW9aMnh2WW1Gc1gybGtlQ0F2SUNSN1YwZDlLU0FsSUhWdWFXWnZjbTF6TGtNN1hHNGdJQ0FnYkdWMElIZG5UMlptYzJWMElEMGdiRzlqWVd4ZmFXUXVlQ0FxSUhWdWFXWnZjbTF6TG5kblgzTnBlbVU3WEc0Z0lDQWdhV1lnS0hkblQyWm1jMlYwSUQ0OUlIVnVhV1p2Y20xekxrZ3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNiaUFnSUNCc1pYUWdkMmROWVhnZ1BTQnRhVzRvZDJkUFptWnpaWFFnS3lCMWJtbG1iM0p0Y3k1M1oxOXphWHBsTENCMWJtbG1iM0p0Y3k1SUtUdGNibHh1SUNBZ0lHeGxkQ0J2Wm1aelpYUWdQU0JqZFhKeVpXNTBTVzFoWjJWT2RXMWlaWElnS2lCMWJtbG1iM0p0Y3k1cGJXRm5aVjl6YVhwbElDc2dZM1Z5Y21WdWRFTm9ZVzV1Wld4T2RXMWlaWEk3WEc0Z0lDQWdkbUZ5SUhOMWJTQTlJQ1I3Wm1sc2JGWmxZM1J2Y2lnblpqTXlKeXdnWTI5dGNHOXVaVzUwY3lsOU8xeHVJQ0FnSUhaaGNpQnpjWFZoY21Wa1UzVnRJRDBnSkh0bWFXeHNWbVZqZEc5eUtDZG1NekluTENCamIyMXdiMjVsYm5SektYMDdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FUb2dkVE15SUQwZ2QyZFBabVp6WlhRN0lHa2dQQ0IzWjAxaGVEc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0IyWVd4MVpTQTlJQ1I3YzNWdFEyRnpkRlI1Y0dWOUtHbHVjSFYwVzI5bVpuTmxkQ0FySUdrZ0tpQjFibWxtYjNKdGN5NURYU2s3WEc0Z0lDQWdJQ0FnSUhOMWJTQXJQU0IyWVd4MVpUdGNiaUFnSUNBZ0lDQWdjM0YxWVhKbFpGTjFiU0FyUFNCMllXeDFaU0FxSUhaaGJIVmxPMXh1SUNBZ0lIMWNiaUFnSUNCdmRYUndkWFJiWjJ4dlltRnNYMmxrZUYwZ1BTQWtlM05sZEU5MWRIQjFkRlpoYkhWbEtDZHpkVzBuTENBbmMzRjFZWEpsWkZOMWJTY3BmVHRjYmlBZ2ZXQTdYRzRnSUNBZ0lDQjlPMXh1WEc0Z0lDQWdJQ0JqYjI1emRDQnRaV0Z1Vm1Gc2RXVnpJRDBnWTI5dWRHVjRkQzVqYjIxd2RYUmxLRnh1SUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVoYldVNklDZEpibk4wWVc1alpVNXZjbTFEYjIxd2RYUmxUV1ZoYmljc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6YUdGa1pYSkRZV05vWlRvZ2UyaHBiblE2SUdBa2UyTnZiWEJ2Ym1WdWRITjlZQ3dnYVc1d2RYUkVaWEJsYm1SbGJtTnBaWE02SUcxbFlXNUpibkIxZEVSbGNHVnVaR1Z1WTJsbGMzMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCblpYUlNkVzVFWVhSaE9pQW9LU0E5UGlBb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmRYUndkWFJ6T2lCYlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2UyUnBiWE02SUZ0dUxDQmpMQ0JYUnl3Z01sMHNJR1JoZEdGVWVYQmxPaUJFWVhSaFZIbHdaUzVtYkc5aGRIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lGMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHUnBjM0JoZEdOb1IzSnZkWEE2SUh0NE9pQnVJQ29nWXlBdklHTnZiWEJ2Ym1WdWRITjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNNklHMWxZVzVRY205bmNtRnRWVzVwWm05eWJYTmNiaUFnSUNBZ0lDQWdJQ0FnSUgwcExGeHVJQ0FnSUNBZ0lDQWdJQ0FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxPaUJuWlhSTlpXRnVVMmhoWkdWeVUyOTFjbU5sTEZ4dUlDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnZTJsdWNIVjBjem9nVzJsdWNIVjBYU3dnYjNWMGNIVjBjem9nV3kweFhYMHBXekJkTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0J3Y205bmNtRnRWVzVwWm05eWJYTTZJRkJ5YjJkeVlXMVZibWxtYjNKdFcxMGdQU0JiWEc0Z0lDQWdJQ0FnSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklIVnVhWFJ6VDJaWGIzSnJmU3dnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2FIMHNYRzRnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUUxaGRHZ3VabXh2YjNJb1l5QXZJR052YlhCdmJtVnVkSE1wZlN4Y2JpQWdJQ0FnSUNBZ2UzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2dUV0YwYUM1bWJHOXZjaWhYUnlBcUlHTWdMeUJqYjIxd2IyNWxiblJ6S1gxY2JpQWdJQ0FnSUYwN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRFUmxjR1Z1WkdWdVkybGxjem9nVUhKdlozSmhiVWx1Y0hWMFZHVnVjMjl5U1c1bWIwUmxjR1Z1WkdWdVkzbGJYU0E5SUZzbmRIbHdaU2NzSUNkMGVYQmxKeXdnSjNSNWNHVW5YVHRjYmlBZ0lDQWdJR052Ym5OMElHZGxkRk5vWVdSbGNsTnZkWEpqWlNBOUlDaHphR0ZrWlhKSVpXeHdaWEk2SUZOb1lXUmxja2hsYkhCbGNpa2dQVDRnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J6WTJGc1pVaGxiSEJsY2lBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjNOallXeGxKeXdnYzJOaGJHVXVaR0YwWVZSNWNHVXNJSE5qWVd4bExtUnBiWE1zSUdOdmJYQnZibVZ1ZEhNcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCaWFXRnpTR1ZzY0dWeUlEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnblltbGhjeWNzSUdKcFlYTXVaR0YwWVZSNWNHVXNJR0pwWVhNdVpHbHRjeXdnWTI5dGNHOXVaVzUwY3lrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ1hHNGdJRUJuY205MWNDZ3dLU0JBWW1sdVpHbHVaeWd3S1NCMllYSThjM1J2Y21GblpTd2djbVZoWkQ0Z2FXNXdkWFFnT2lCaGNuSmhlVHdrZTI5MWRIQjFkRlI1Y0dWOVBqdGNiaUFnUUdkeWIzVndLREFwSUVCaWFXNWthVzVuS0RFcElIWmhjanh6ZEc5eVlXZGxMQ0J5WldGa1BpQnpZMkZzWlNBNklHRnljbUY1UENSN2MyTmhiR1ZJWld4d1pYSXVkSGx3WlM1emRHOXlZV2RsZlQ0N1hHNGdJRUJuY205MWNDZ3dLU0JBWW1sdVpHbHVaeWd5S1NCMllYSThjM1J2Y21GblpTd2djbVZoWkQ0Z1ltbGhjeUE2SUdGeWNtRjVQQ1I3WW1saGMwaGxiSEJsY2k1MGVYQmxMbk4wYjNKaFoyVjlQanRjYmlBZ1FHZHliM1Z3S0RBcElFQmlhVzVrYVc1bktETXBJSFpoY2p4emRHOXlZV2RsTENCeVpXRmtYM2R5YVhSbFBpQnZkWFJ3ZFhRZ09pQmhjbkpoZVR3a2UyOTFkSEIxZEZSNWNHVjlQanRjYmlBZ2MzUnlkV04wSUZWdWFXWnZjbTF6SUh0MWJtbDBjMTl2Wmw5M2IzSnJJRG9nZFRNeUxDQklPaUIxTXpJc0lFTWdPaUIxTXpJc0lHbHRZV2RsWDNOcGVtVWdPaUIxTXpKOU8xeHVJQ0JBWjNKdmRYQW9NQ2tnUUdKcGJtUnBibWNvTkNrZ2RtRnlQSFZ1YVdadmNtMCtJSFZ1YVdadmNtMXpPaUJWYm1sbWIzSnRjenRjYmx4dUlDQWtlM05vWVdSbGNraGxiSEJsY2k1dFlXbHVVM1JoY25Rb0tYMWNiaUFnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTVuZFdGeVpFRm5ZV2x1YzNSUGRYUlBaa0p2ZFc1a2MxZHZjbXRuY205MWNGTnBlbVZ6S0NkMWJtbG1iM0p0Y3k1MWJtbDBjMTl2Wmw5M2IzSnJKeWw5WEc0Z0lDQWdiR1YwSUdOMWNuSmxiblJKYldGblpVNTFiV0psY2lBOUlHZHNiMkpoYkY5cFpIZ2dMeUIxYm1sbWIzSnRjeTVETzF4dUlDQWdJR3hsZENCamRYSnlaVzUwUTJoaGJtNWxiRTUxYldKbGNpQTlJR2RzYjJKaGJGOXBaSGdnSlNCMWJtbG1iM0p0Y3k1RE8xeHVYRzRnSUNBZ2JHVjBJRzltWm5ObGRDQTlJR04xY25KbGJuUkpiV0ZuWlU1MWJXSmxjaUFxSUhWdWFXWnZjbTF6TG1sdFlXZGxYM05wZW1VN1hHNGdJQ0FnZG1GeUlITjFiU0E5SUNSN1ptbHNiRlpsWTNSdmNpZ25aak15Snl3Z1kyOXRjRzl1Wlc1MGN5bDlPMXh1SUNBZ0lIWmhjaUJ6Y1hWaGNtVmtVM1Z0SUQwZ0pIdG1hV3hzVm1WamRHOXlLQ2RtTXpJbkxDQmpiMjF3YjI1bGJuUnpLWDA3WEc0Z0lDQWdabTl5SUNoMllYSWdhVG9nZFRNeUlEMGdNRHNnYVNBOElHMXBiaWdrZTFkSGZTd2dkVzVwWm05eWJYTXVTQ2s3SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2RtRnNkV1VnUFNCcGJuQjFkRnR2Wm1aelpYUWdLeUJwSUNzZ1kzVnljbVZ1ZEVOb1lXNXVaV3hPZFcxaVpYSWdLaUFrZTFkSGZWMDdYRzRnSUNBZ0lDQWdJSE4xYlNBclBTQjJZV3gxWlZzd1hUdGNiaUFnSUNBZ0lDQWdjM0YxWVhKbFpGTjFiU0FyUFNCMllXeDFaVnN4WFR0Y2JpQWdJQ0I5WEc0Z0lDQWdjM1Z0SUQwZ2MzVnRJQzhnWmpNeUtIVnVhV1p2Y20xekxrZ3BPMXh1SUNBZ0lITnhkV0Z5WldSVGRXMGdQU0J6Y1hWaGNtVmtVM1Z0SUM4Z1pqTXlLSFZ1YVdadmNtMXpMa2dwTzF4dUlDQWdJR3hsZENCcGJuWlRkR1JFWlhZZ1BTQnBiblpsY25ObFUzRnlkQ2h6Y1hWaGNtVmtVM1Z0SUMwZ2MzVnRJQ29nYzNWdElDc2daak15S0NSN1pYQnphV3h2Ym4wcEtUdGNiaUFnSUNCc1pYUWdZMmhoYm01bGJGTmpZV3hsSUQwZ2FXNTJVM1JrUkdWMklDb2dKSHR6ZFcxRFlYTjBWSGx3Wlgwb2MyTmhiR1ZiWTNWeWNtVnVkRU5vWVc1dVpXeE9kVzFpWlhKZEtUdGNiaUFnSUNCc1pYUWdZMmhoYm01bGJGTm9hV1owSUQwZ0pIdHpkVzFEWVhOMFZIbHdaWDBvWW1saGMxdGpkWEp5Wlc1MFEyaGhibTVsYkU1MWJXSmxjbDBwSUMwZ2MzVnRJQ29nWTJoaGJtNWxiRk5qWVd4bE8xeHVYRzRnSUNBZ2IzVjBjSFYwVzJkc2IySmhiRjlwWkhoZElEMGdKSHR6WlhSUGRYUndkWFJXWVd4MVpTZ25ZMmhoYm01bGJGTmpZV3hsSnl3Z0oyTm9ZVzV1Wld4VGFHbG1kQ2NwZlR0Y2JpQWdmV0E3WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJQ0FnY21WMGRYSnVJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGNiaUFnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnVZVzFsT2lBblNXNXpkR0Z1WTJWT2IzSnRRMjl0Y0hWMFpVTm9ZVzV1Wld4VFkyRnNaVk5vYVdaMEp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklGUlBSRTg2SUhWelpTQmxjSE5wYkc5dUlHRnpJSFZ1YVdadmNtMHVJRU4xY25KbGJuUnNlU0JsY0hOcGJHOXVJR0Z6SUhWdWFXWnZjbTBnWm1GcGJITWdkR1Z6ZEY5cGJuTjBZVzVqWlc1dmNtMWZaWEJ6YVd4dmJpNWNiaUFnSUNBZ0lDQWdJQ0FnSUhOb1lXUmxja05oWTJobE9pQjdhR2x1ZERvZ1lDUjdZMjl0Y0c5dVpXNTBjMzA3Skh0bGNITnBiRzl1ZldBc0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWemZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdkbGRGSjFia1JoZEdFNklDZ3BJRDArSUNoN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUc5MWRIQjFkSE02SUZ0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN1pHbHRjem9nVzI0c0lHTXNJREpkTENCa1lYUmhWSGx3WlRvZ1JHRjBZVlI1Y0dVdVpteHZZWFI5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JkTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JrYVhOd1lYUmphRWR5YjNWd09pQjdlRG9nVFdGMGFDNWpaV2xzS0hWdWFYUnpUMlpYYjNKcklDOGdOalFnTHlvZ2QyOXlhMmR5YjNWd0lITnBlbVVnS2k4cGZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NISnZaM0poYlZWdWFXWnZjbTF6WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHZGxkRk5vWVdSbGNsTnZkWEpqWlN4Y2JpQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUh0cGJuQjFkSE02SUZ0dFpXRnVWbUZzZFdWekxDQnpZMkZzWlN3Z1ltbGhjMTBzSUc5MWRIQjFkSE02SUZzdE1WMTlLVnN3WFR0Y2JpQWdJQ0I5TzF4dVhHNWpiMjV6ZENCamNtVmhkR1ZKYm5OMFlXNWpaVTV2Y20xT1NGZERVSEp2WjNKaGJVbHVabThnUFZ4dUlDQWdJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDd2dhVzV3ZFhSek9pQnlaV0ZrYjI1c2VTQlVaVzV6YjNKV2FXVjNXMTBzSUdGMGRISnBZblYwWlhNNklFbHVjM1JoYm1ObFRtOXliVUYwZEhKcFluVjBaWE1wSUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUhoVGFHRndaU0E5SUdsdWNIVjBjMXN3WFM1a2FXMXpPMXh1SUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwVTJoaGNHVWdQU0I0VTJoaGNHVTdYRzRnSUNBZ0lDQmpiMjV6ZENCT0lEMGdlRk5vWVhCbFd6QmRPMXh1SUNBZ0lDQWdZMjl1YzNRZ1F5QTlJSGhUYUdGd1pWdDRVMmhoY0dVdWJHVnVaM1JvSUMwZ01WMDdYRzRnSUNBZ0lDQmpiMjV6ZENCSUlEMGdVMmhoY0dWVmRHbHNMbk5wZW1WR2NtOXRSR2x0Wlc1emFXOXVLSGhUYUdGd1pTd2dNU2tnTHlCRE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWTI5dGNHOXVaVzUwY3lBOUlHZGxkRTFoZUVOdmJYQnZibVZ1ZEhNb1F5azdYRzRnSUNBZ0lDQmpiMjV6ZENCdmRYUndkWFJUYVhwbElEMGdVMmhoY0dWVmRHbHNMbk5wZW1Vb2IzVjBjSFYwVTJoaGNHVXBJQzhnWTI5dGNHOXVaVzUwY3p0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ5YjJkeVlXMVZibWxtYjNKdGN6b2dVSEp2WjNKaGJWVnVhV1p2Y20xYlhTQTlYRzRnSUNBZ0lDQWdJQ0FnVzN0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklFaDlMQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCTllYUm9MbVpzYjI5eUtFTWdMeUJqYjIxd2IyNWxiblJ6S1gxZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUkVaWEJsYm1SbGJtTnBaWE02SUZCeWIyZHlZVzFKYm5CMWRGUmxibk52Y2tsdVptOUVaWEJsYm1SbGJtTjVXMTBnUFNCYkozUjVjR1VuTENBbmRIbHdaU2RkTzF4dUlDQWdJQ0FnTHk4Z1ptbHljM1FnWTI5dGNIVjBaU0J0WldGdVhHNGdJQ0FnSUNCamIyNXpkQ0JqYUdGdWJtVnNVMk5oYkdWVGFHbG1kQ0E5SUdOdmJYQjFkR1ZOWldGdUtHTnZiblJsZUhRc0lHbHVjSFYwYzFzd1hTd2dhVzV3ZFhSeld6RmRMQ0JwYm5CMWRITmJNbDBzSUU0c0lFZ3NJRU1zSUdGMGRISnBZblYwWlhNdVpYQnphV3h2YmlrN1hHNGdJQ0FnSUNCamIyNXpkQ0JuWlhSVGFHRmtaWEpUYjNWeVkyVWdQU0FvYzJoaFpHVnlTR1ZzY0dWeU9pQlRhR0ZrWlhKSVpXeHdaWElwSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1pHRjBZVlI1Y0dVZ1BTQjBaVzV6YjNKVWVYQmxWRzlYYzJkc1UzUnZjbUZuWlZSNWNHVW9hVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjMk5oYkdWVWVYQmxJRDBnWTI5dGNHOXVaVzUwY3lBOVBUMGdNU0EvSUNkMlpXTXlaaWNnT2lCZ2JXRjBNbmdrZTJOdmJYQnZibVZ1ZEhOOVptQTdYRzRnSUNBZ0lDQWdJR052Ym5OMElITmpZV3hsUTJGemRGUjVjR1VnUFNCamIyMXdiMjVsYm5SeklEMDlQU0F4SUQ4Z1pHRjBZVlI1Y0dVZ09pQmdkbVZqSkh0amIyMXdiMjVsYm5SemZUd2tlMlJoZEdGVWVYQmxmVDVnTzF4dVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUdsdWNIVjBTR1ZzY0dWeUlEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnbmFXNXdkWFFuTENCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzd1hTNWthVzF6TENCamIyMXdiMjVsYm5SektUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwU0dWc2NHVnlJRDBnYjNWMGNIVjBWbUZ5YVdGaWJHVW9KMjkxZEhCMWRDY3NJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU3dnYjNWMGNIVjBVMmhoY0dVc0lHTnZiWEJ2Ym1WdWRITXBPMXh1WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJnWEc0Z0lFQm5jbTkxY0Nnd0tTQkFZbWx1WkdsdVp5Z3dLU0IyWVhJOGMzUnZjbUZuWlN3Z2NtVmhaRDRnYVc1d2RYUWdPaUJoY25KaGVUd2tlMmx1Y0hWMFNHVnNjR1Z5TG5SNWNHVXVjM1J2Y21GblpYMCtPMXh1SUNCQVozSnZkWEFvTUNrZ1FHSnBibVJwYm1jb01Ta2dkbUZ5UEhOMGIzSmhaMlVzSUhKbFlXUStJSE5qWVd4bFNXNXdkWFFnT2lCaGNuSmhlVHdrZTNOallXeGxWSGx3WlgwK08xeHVJQ0JBWjNKdmRYQW9NQ2tnUUdKcGJtUnBibWNvTWlrZ2RtRnlQSE4wYjNKaFoyVXNJSEpsWVdSZmQzSnBkR1UrSUc5MWRIQjFkQ0E2SUdGeWNtRjVQQ1I3YjNWMGNIVjBTR1ZzY0dWeUxuUjVjR1V1YzNSdmNtRm5aWDArTzF4dUlDQnpkSEoxWTNRZ1ZXNXBabTl5YlhNZ2UwZzZJSFV6TWl3Z1F5QTZJSFV6TW4wN1hHNGdJRUJuY205MWNDZ3dLU0JBWW1sdVpHbHVaeWd6S1NCMllYSThkVzVwWm05eWJUNGdkVzVwWm05eWJYTTZJRlZ1YVdadmNtMXpPMXh1WEc0Z0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG0xaGFXNVRkR0Z5ZENncGZWeHVJQ0FnSUd4bGRDQmpkWEp5Wlc1MFNXMWhaMlZPZFcxaVpYSWdQU0JuYkc5aVlXeGZhV1I0SUM4Z0tIVnVhV1p2Y20xekxrTWdLaUIxYm1sbWIzSnRjeTVJS1R0Y2JpQWdJQ0JzWlhRZ1kzVnljbVZ1ZEVOb1lXNXVaV3hPZFcxaVpYSWdQU0JuYkc5aVlXeGZhV1I0SUNVZ2RXNXBabTl5YlhNdVF6dGNibHh1SUNBZ0lHeGxkQ0J6WTJGc1pVOW1abk5sZENBOUlHTjFjbkpsYm5SSmJXRm5aVTUxYldKbGNpQXFJSFZ1YVdadmNtMXpMa01nS3lCamRYSnlaVzUwUTJoaGJtNWxiRTUxYldKbGNqdGNiaUFnSUNCc1pYUWdjMk5oYkdVZ1BTQnpZMkZzWlVsdWNIVjBXM05qWVd4bFQyWm1jMlYwWFR0Y2JpQWdJQ0J2ZFhSd2RYUmJaMnh2WW1Gc1gybGtlRjBnUFNCbWJXRW9hVzV3ZFhSYloyeHZZbUZzWDJsa2VGMHNJQ1I3YzJOaGJHVkRZWE4wVkhsd1pYMG9jMk5oYkdWYk1GMHBMQ0FrZTNOallXeGxRMkZ6ZEZSNWNHVjlLSE5qWVd4bFd6RmRLU2s3WEc0Z0lIMWdPMXh1SUNBZ0lDQWdmVHRjYmlBZ0lDQWdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGNiaUFnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnVZVzFsT2lBblNXNXpkR0Z1WTJWT2IzSnRZV3hwZW1GMGFXOXVUa2hYUXljc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6YUdGa1pYSkRZV05vWlRvZ2UyaHBiblE2SUdBa2UyTnZiWEJ2Ym1WdWRITjlZQ3dnYVc1d2RYUkVaWEJsYm1SbGJtTnBaWE45TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaMlYwVW5WdVJHRjBZVG9nS0NrZ1BUNGdLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdiM1YwY0hWMGN6b2dXM3RrYVcxek9pQnZkWFJ3ZFhSVGFHRndaU3dnWkdGMFlWUjVjR1U2SUdsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlgxZExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2FYTndZWFJqYUVkeWIzVndPaUI3ZURvZ1RXRjBhQzVqWldsc0tHOTFkSEIxZEZOcGVtVWdMeUEyTkNBdktpQjNiM0pyWjNKdmRYQWdjMmw2WlNBcUx5bDlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhOY2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaMlYwVTJoaFpHVnlVMjkxY21ObExGeHVJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ2UybHVjSFYwY3pvZ1cybHVjSFYwYzFzd1hTd2dZMmhoYm01bGJGTmpZV3hsVTJocFpuUmRmU2s3WEc0Z0lDQWdmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR2x1YzNSaGJtTmxUbTl5YlNBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN6b2dTVzV6ZEdGdVkyVk9iM0p0UVhSMGNtbGlkWFJsY3lrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JwWmlBb1lYUjBjbWxpZFhSbGN5NW1iM0p0WVhRZ1BUMDlJQ2RPU0ZkREp5a2dlMXh1SUNBZ0lHTnlaV0YwWlVsdWMzUmhibU5sVG05eWJVNUlWME5RY205bmNtRnRTVzVtYnloamIyNTBaWGgwTENCamIyNTBaWGgwTG1sdWNIVjBjeXdnWVhSMGNtbGlkWFJsY3lrN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ1kyOXVkR1Y0ZEM1amIyMXdkWFJsS0dOeVpXRjBaVWx1YzNSaGJtTmxUbTl5YlZCeWIyZHlZVzFKYm1adktHTnZiblJsZUhRdWFXNXdkWFJ6TENCaGRIUnlhV0oxZEdWektTazdYRzRnSUgxY2JuMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JtbHRjRzl5ZENCN1JHRjBZVlI1Y0dWOUlHWnliMjBnSnk0dUx5NHVMeTR1TDNkaGMyMHRZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdWR1Z1YzI5eVZtbGxkMzBnWm5KdmJTQW5MaTR2TGk0dmRHVnVjMjl5TFhacFpYY25PMXh1YVcxd2IzSjBJSHRUYUdGd1pWVjBhV3g5SUdaeWIyMGdKeTR1THk0dUwzVjBhV3duTzF4dWFXMXdiM0owSUh0RGIyMXdkWFJsUTI5dWRHVjRkQ3dnVUhKdlozSmhiVWx1Wm04c0lGQnliMmR5WVcxSmJuQjFkRlJsYm5OdmNrbHVabTlFWlhCbGJtUmxibU41TENCUWNtOW5jbUZ0Vlc1cFptOXliWDBnWm5KdmJTQW5MaTR2ZEhsd1pYTW5PMXh1WEc1cGJYQnZjblFnZTJOaGMzUlViMFl6TWl3Z1ptbHNiRlpsWTNSdmNpd2daMlYwVFdGNFEyOXRjRzl1Wlc1MGN5d2dhVzV3ZFhSV1lYSnBZV0pzWlN3Z2IzVjBjSFYwVm1GeWFXRmliR1VzSUZOb1lXUmxja2hsYkhCbGNpd2djM1Z0Vm1WamRHOXlMQ0IwWlc1emIzSlVlWEJsVkc5WGMyZHNVM1J2Y21GblpWUjVjR1VzSUZWdWFXWnZjbTF6UVhKeVlYbFVlWEJsTEgwZ1puSnZiU0FuTGk5amIyMXRiMjRuTzF4dVhHNXBiblJsY21aaFkyVWdUR0Y1WlhKT2IzSnRRWFIwY21saWRYUmxjeUI3WEc0Z0lITnBiWEJzYVdacFpXUTZJR0p2YjJ4bFlXNDdYRzRnSUdGNGFYTTZJRzUxYldKbGNqdGNiaUFnWlhCemFXeHZiam9nYm5WdFltVnlPMXh1ZlZ4dVhHNWpiMjV6ZENCMllXeHBaR0YwWlVsdWNIVjBjeUE5SUNocGJuQjFkSE02SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhTazZJSFp2YVdRZ1BUNGdlMXh1SUNCcFppQW9JV2x1Y0hWMGN5QjhmQ0JwYm5CMWRITXViR1Z1WjNSb0lEd2dNaWtnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25iR0Y1WlhKT2IzSnRJSEpsY1hWcGNtVnpJR0YwSUd4bFlYTjBJRElnYVc1d2RYUnpMaWNwTzF4dUlDQjlYRzU5TzF4dVhHNWpiMjV6ZENCamNtVmhkR1ZNWVhsbGNrNXZjbTFRY205bmNtRnRTVzVtYnlBOVhHNGdJQ0FnS0dsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZExDQmhkSFJ5YVdKMWRHVnpPaUJNWVhsbGNrNXZjbTFCZEhSeWFXSjFkR1Z6TENCdmRYUndkWFJEYjNWdWREb2diblZ0WW1WeUtUb2dVSEp2WjNKaGJVbHVabThnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYzJsdGNHeHBabWxsWkNBOUlHRjBkSEpwWW5WMFpYTXVjMmx0Y0d4cFptbGxaRHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdlRk5vWVhCbElEMGdhVzV3ZFhSeld6QmRMbVJwYlhNN1hHNGdJQ0FnSUNCamIyNXpkQ0J6WTJGc1pTQTlJR2x1Y0hWMGMxc3hYVHRjYmlBZ0lDQWdJR052Ym5OMElHSnBZWE1nUFNBaGMybHRjR3hwWm1sbFpDQW1KaUJwYm5CMWRITmJNbDA3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJRzkxZEhCMWRGTm9ZWEJsSUQwZ2VGTm9ZWEJsTzF4dUlDQWdJQ0FnWTI5dWMzUWdZWGhwY3lBOUlGTm9ZWEJsVlhScGJDNXViM0p0WVd4cGVtVkJlR2x6S0dGMGRISnBZblYwWlhNdVlYaHBjeXdnZUZOb1lYQmxMbXhsYm1kMGFDazdYRzRnSUNBZ0lDQmpiMjV6ZENCdWIzSnRRMjkxYm5RZ1BTQlRhR0Z3WlZWMGFXd3VjMmw2WlZSdlJHbHRaVzV6YVc5dUtIaFRhR0Z3WlN3Z1lYaHBjeWs3WEc0Z0lDQWdJQ0JqYjI1emRDQnViM0p0VTJsNlpTQTlJRk5vWVhCbFZYUnBiQzV6YVhwbFJuSnZiVVJwYldWdWMybHZiaWg0VTJoaGNHVXNJR0Y0YVhNcE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCelkyRnNaVk5wZW1VZ1BTQlRhR0Z3WlZWMGFXd3VjMmw2WlNoelkyRnNaUzVrYVcxektUdGNiaUFnSUNBZ0lHTnZibk4wSUdKcFlYTlRhWHBsSUQwZ1ltbGhjeUEvSUZOb1lYQmxWWFJwYkM1emFYcGxLR0pwWVhNdVpHbHRjeWtnT2lBd08xeHVJQ0FnSUNBZ2FXWWdLSE5qWVd4bFUybDZaU0FoUFQwZ2JtOXliVk5wZW1VZ2ZId2dLR0pwWVhNZ0ppWWdZbWxoYzFOcGVtVWdJVDA5SUc1dmNtMVRhWHBsS1NrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lGTnBlbVVnYjJZZ1dDNXphR0Z3WlNncFcyRjRhWE02WFNBOVBTQWtlMjV2Y20xVGFYcGxmUzVjYmlBZ0lDQWdJQ0JUYVhwbElHOW1JSE5qWVd4bElHRnVaQ0JpYVdGeklDaHBaaUJ3Y205MmFXUmxaQ2tnYlhWemRDQnRZWFJqYUNCMGFHbHpMbHh1SUNBZ0lDQWdJRWR2ZENCelkyRnNaU0J6YVhwbElHOW1JQ1I3YzJOaGJHVlRhWHBsZlNCaGJtUWdZbWxoY3lCemFYcGxJRzltSUNSN1ltbGhjMU5wZW1WOVlDazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR052Ym5OMElHMWxZVzVKYm5aVGRHUkVaWFpFYVcwNklHNTFiV0psY2x0ZElEMGdXMTA3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhoVGFHRndaUzVzWlc1bmRHZzdJQ3NyYVNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYVNBOElHRjRhWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQnRaV0Z1U1c1MlUzUmtSR1YyUkdsdExuQjFjMmdvZUZOb1lYQmxXMmxkS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQnRaV0Z1U1c1MlUzUmtSR1YyUkdsdExuQjFjMmdvTVNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTnZibk4wSUdOdmJYQnZibVZ1ZEhNZ1BTQm5aWFJOWVhoRGIyMXdiMjVsYm5SektHNXZjbTFUYVhwbEtUdGNiaUFnSUNBZ0lHTnZibk4wSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6T2lCUWNtOW5jbUZ0U1c1d2RYUlVaVzV6YjNKSmJtWnZSR1Z3Wlc1a1pXNWplVnRkSUQwZ1d5ZDBlWEJsSnl3Z0ozUjVjR1VuWFR0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ5YjJkeVlXMVZibWxtYjNKdGN6b2dVSEp2WjNKaGJWVnVhV1p2Y20xYlhTQTlJRnRjYmlBZ0lDQWdJQ0FnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2JtOXliVU52ZFc1MGZTd2dlM1I1Y0dVNklFUmhkR0ZVZVhCbExtWnNiMkYwTENCa1lYUmhPaUJ1YjNKdFUybDZaWDBzWEc0Z0lDQWdJQ0FnSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklFMWhkR2d1Wm14dmIzSW9ibTl5YlZOcGVtVWdMeUJqYjIxd2IyNWxiblJ6S1gwc1hHNGdJQ0FnSUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1bWJHOWhkQ3dnWkdGMFlUb2dZWFIwY21saWRYUmxjeTVsY0hOcGJHOXVmVnh1SUNBZ0lDQWdYVHRjYmlBZ0lDQWdJR2xtSUNoaWFXRnpLU0I3WEc0Z0lDQWdJQ0FnSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6TG5CMWMyZ29KM1I1Y0dVbktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTnZibk4wSUdoaGMwMWxZVzVFWVhSaFQzVjBjSFYwSUQwZ2IzVjBjSFYwUTI5MWJuUWdQaUF4TzF4dUlDQWdJQ0FnWTI5dWMzUWdhR0Z6U1c1MlUzUmtUM1YwY0hWMElEMGdiM1YwY0hWMFEyOTFiblFnUGlBeU8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCblpYUlRhR0ZrWlhKVGIzVnlZMlVnUFNBb2MyaGhaR1Z5U0dWc2NHVnlPaUJUYUdGa1pYSklaV3h3WlhJcElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaR0YwWVZSNWNHVWdQU0IwWlc1emIzSlVlWEJsVkc5WGMyZHNVM1J2Y21GblpWUjVjR1VvYVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZG1GeWFXRmliR1Z6SUQwZ1cxeHVJQ0FnSUNBZ0lDQWdJR2x1Y0hWMFZtRnlhV0ZpYkdVb0ozZ25MQ0JwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1VzSUdsdWNIVjBjMXN3WFM1a2FXMXpMQ0JqYjIxd2IyNWxiblJ6S1N4Y2JpQWdJQ0FnSUNBZ0lDQnBibkIxZEZaaGNtbGhZbXhsS0NkelkyRnNaU2NzSUhOallXeGxMbVJoZEdGVWVYQmxMQ0J6WTJGc1pTNWthVzF6TENCamIyMXdiMjVsYm5SektTeGNiaUFnSUNBZ0lDQWdYVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHSnBZWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQjJZWEpwWVdKc1pYTXVjSFZ6YUNocGJuQjFkRlpoY21saFlteGxLQ2RpYVdGekp5d2dZbWxoY3k1a1lYUmhWSGx3WlN3Z1ltbGhjeTVrYVcxekxDQmpiMjF3YjI1bGJuUnpLU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2RtRnlhV0ZpYkdWekxuQjFjMmdvYjNWMGNIVjBWbUZ5YVdGaWJHVW9KMjkxZEhCMWRDY3NJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU3dnYjNWMGNIVjBVMmhoY0dVc0lHTnZiWEJ2Ym1WdWRITXBLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHaGhjMDFsWVc1RVlYUmhUM1YwY0hWMEtTQjdYRzRnSUNBZ0lDQWdJQ0FnZG1GeWFXRmliR1Z6TG5CMWMyZ29iM1YwY0hWMFZtRnlhV0ZpYkdVb0oyMWxZVzVmWkdGMFlWOXZkWFJ3ZFhRbkxDQkVZWFJoVkhsd1pTNW1iRzloZEN3Z2JXVmhia2x1ZGxOMFpFUmxka1JwYlNrcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNob1lYTkpiblpUZEdSUGRYUndkWFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjJZWEpwWVdKc1pYTXVjSFZ6YUNodmRYUndkWFJXWVhKcFlXSnNaU2duYVc1MlgzTjBaRjl2ZFhSd2RYUW5MQ0JFWVhSaFZIbHdaUzVtYkc5aGRDd2diV1ZoYmtsdWRsTjBaRVJsZGtScGJTa3BPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZFc1cFptOXliWE02SUZWdWFXWnZjbTF6UVhKeVlYbFVlWEJsSUQwZ1cxeHVJQ0FnSUNBZ0lDQWdJSHR1WVcxbE9pQW5ibTl5YlY5amIzVnVkQ2NzSUhSNWNHVTZJQ2QxTXpJbmZTd2dlMjVoYldVNklDZHViM0p0WDNOcGVtVW5MQ0IwZVhCbE9pQW5aak15SjMwc1hHNGdJQ0FnSUNBZ0lDQWdlMjVoYldVNklDZHViM0p0WDNOcGVtVmZkbVZqZEc5eWFYcGxaQ2NzSUhSNWNHVTZJQ2QxTXpJbmZTd2dlMjVoYldVNklDZGxjSE5wYkc5dUp5d2dkSGx3WlRvZ0oyWXpNaWQ5WEc0Z0lDQWdJQ0FnSUYwN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ1hHNGdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxuSmxaMmx6ZEdWeVZXNXBabTl5YlhNb2RXNXBabTl5YlhNcExtUmxZMnhoY21WV1lYSnBZV0pzWlhNb0xpNHVkbUZ5YVdGaWJHVnpLWDFjYmlBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1YldGcGJsTjBZWEowS0NsOVhHNGdJQ0FnSkh0emFHRmtaWEpJWld4d1pYSXVaM1ZoY21SQloyRnBibk4wVDNWMFQyWkNiM1Z1WkhOWGIzSnJaM0p2ZFhCVGFYcGxjeWduZFc1cFptOXliWE11Ym05eWJWOWpiM1Z1ZENjcGZWeHVJQ0FnSUd4bGRDQnZabVp6WlhRZ1BTQm5iRzlpWVd4ZmFXUjRJQ29nZFc1cFptOXliWE11Ym05eWJWOXphWHBsWDNabFkzUnZjbWw2WldRN1hHNGdJQ0FnZG1GeUlHMWxZVzVmZG1WamRHOXlJRDBnSkh0bWFXeHNWbVZqZEc5eUtDZG1NekluTENCamIyMXdiMjVsYm5SektYMDdYRzRnSUNBZ2RtRnlJRzFsWVc1ZmMzRjFZWEpsWDNabFkzUnZjaUE5SUNSN1ptbHNiRlpsWTNSdmNpZ25aak15Snl3Z1kyOXRjRzl1Wlc1MGN5bDlPMXh1WEc0Z0lDQWdabTl5SUNoMllYSWdhRG9nZFRNeUlEMGdNSFU3SUdnZ1BDQjFibWxtYjNKdGN5NXViM0p0WDNOcGVtVmZkbVZqZEc5eWFYcGxaRHNnYUNzcktTQjdYRzRnSUNBZ0lDQnNaWFFnZG1Gc2RXVWdQU0FrZTJOaGMzUlViMFl6TWloa1lYUmhWSGx3WlN3Z1kyOXRjRzl1Wlc1MGN5d2dKM2hiYUNBcklHOW1abk5sZEYwbktYMDdYRzRnSUNBZ0lDQnRaV0Z1WDNabFkzUnZjaUFyUFNCMllXeDFaVHRjYmlBZ0lDQWdJRzFsWVc1ZmMzRjFZWEpsWDNabFkzUnZjaUFyUFNCMllXeDFaU0FxSUhaaGJIVmxPMXh1SUNBZ0lIMWNiaUFnSUNCc1pYUWdiV1ZoYmlBOUlDUjdjM1Z0Vm1WamRHOXlLQ2R0WldGdVgzWmxZM1J2Y2ljc0lHTnZiWEJ2Ym1WdWRITXBmU0F2SUhWdWFXWnZjbTF6TG01dmNtMWZjMmw2WlR0Y2JpQWdJQ0JzWlhRZ2FXNTJYM04wWkY5a1pYWWdQU0JwYm5abGNuTmxVM0Z5ZENna2UzTjFiVlpsWTNSdmNpZ25iV1ZoYmw5emNYVmhjbVZmZG1WamRHOXlKeXdnWTI5dGNHOXVaVzUwY3lsOUlDOGdkVzVwWm05eWJYTXVibTl5YlY5emFYcGxJQ1I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnphVzF3YkdsbWFXVmtJRDhnSnljZ09pQW5MU0J0WldGdUlDb2diV1ZoYmlkOUlDc2dkVzVwWm05eWJYTXVaWEJ6YVd4dmJpazdYRzVjYmlBZ0lDQm1iM0lnS0haaGNpQnFPaUIxTXpJZ1BTQXdPeUJxSUR3Z2RXNXBabTl5YlhNdWJtOXliVjl6YVhwbFgzWmxZM1J2Y21sNlpXUTdJR29yS3lrZ2UxeHVJQ0FnSUNBZ2JHVjBJR1l6TW1sdWNIVjBJRDBnSkh0allYTjBWRzlHTXpJb1pHRjBZVlI1Y0dVc0lHTnZiWEJ2Ym1WdWRITXNJQ2Q0VzJvZ0t5QnZabVp6WlhSZEp5bDlPMXh1SUNBZ0lDQWdiR1YwSUdZek1uTmpZV3hsSUQwZ0pIdGpZWE4wVkc5R016SW9aR0YwWVZSNWNHVXNJR052YlhCdmJtVnVkSE1zSUNkelkyRnNaVnRxWFNjcGZUdGNiaUFnSUNBZ0lHOTFkSEIxZEZ0cUlDc2diMlptYzJWMFhTQTlJQ1I3ZG1GeWFXRmliR1Z6V3pCZExuUjVjR1V1ZG1Gc2RXVjlLQ2htTXpKcGJuQjFkQ0FrZTNOcGJYQnNhV1pwWldRZ1B5QW5KeUE2SUNjdElHMWxZVzRuZlNrZ0tpQnBiblpmYzNSa1gyUmxkaUFxSUdZek1uTmpZV3hsWEc0Z0lDQWdJQ0FnSUNSN1ltbGhjeUEvSUdBcklDUjdZMkZ6ZEZSdlJqTXlLR1JoZEdGVWVYQmxMQ0JqYjIxd2IyNWxiblJ6TENBblltbGhjMXRxWFNjcGZXQWdPaUFuSjMxY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnSkh0b1lYTk5aV0Z1UkdGMFlVOTFkSEIxZENBL0lDZHRaV0Z1WDJSaGRHRmZiM1YwY0hWMFcyZHNiMkpoYkY5cFpIaGRJRDBnYldWaGJpY2dPaUFuSjMwN1hHNGdJQ0FnSkh0b1lYTkpiblpUZEdSUGRYUndkWFFnUHlBbmFXNTJYM04wWkY5dmRYUndkWFJiWjJ4dlltRnNYMmxrZUYwZ1BTQnBiblpmYzNSa1gyUmxkaWNnT2lBbkozMDdYRzRnSUgxZ08xeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lHTnZibk4wSUc5MWRIQjFkSE1nUFNCYmUyUnBiWE02SUc5MWRIQjFkRk5vWVhCbExDQmtZWFJoVkhsd1pUb2dhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxmVjA3WEc0Z0lDQWdJQ0JwWmlBb2FHRnpUV1ZoYmtSaGRHRlBkWFJ3ZFhRcElIdGNiaUFnSUNBZ0lDQWdiM1YwY0hWMGN5NXdkWE5vS0h0a2FXMXpPaUJ0WldGdVNXNTJVM1JrUkdWMlJHbHRMQ0JrWVhSaFZIbHdaVG9nUkdGMFlWUjVjR1V1Wm14dllYUjlLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNob1lYTkpiblpUZEdSUGRYUndkWFFwSUh0Y2JpQWdJQ0FnSUNBZ2IzVjBjSFYwY3k1d2RYTm9LSHRrYVcxek9pQnRaV0Z1U1c1MlUzUmtSR1YyUkdsdExDQmtZWFJoVkhsd1pUb2dSR0YwWVZSNWNHVXVabXh2WVhSOUtUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lDQWdibUZ0WlRvZ0oweGhlV1Z5VG05eWJXRnNhWHBoZEdsdmJpY3NYRzRnSUNBZ0lDQWdJSE5vWVdSbGNrTmhZMmhsT2lCN2FHbHVkRG9nWUNSN1kyOXRjRzl1Wlc1MGMzMDdKSHR2ZFhSd2RYUkRiM1Z1ZEgwN0pIdHphVzF3YkdsbWFXVmtmV0FzSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6ZlN4Y2JpQWdJQ0FnSUNBZ1oyVjBVblZ1UkdGMFlUb2dLQ2tnUFQ1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2g3YjNWMGNIVjBjeXdnWkdsemNHRjBZMmhIY205MWNEb2dlM2c2SUUxaGRHZ3VZMlZwYkNodWIzSnRRMjkxYm5RZ0x5QTJOQ0F2S2lCM2IzSnJaM0p2ZFhBZ2MybDZaU0FxTHlsOUxDQndjbTluY21GdFZXNXBabTl5YlhOOUtTeGNiaUFnSUNBZ0lDQWdaMlYwVTJoaFpHVnlVMjkxY21ObExGeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2JHRjVaWEpPYjNKdElEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJNWVhsbGNrNXZjbTFCZEhSeWFXSjFkR1Z6S1RvZ2RtOXBaQ0E5UGlCN1hHNGdJSFpoYkdsa1lYUmxTVzV3ZFhSektHTnZiblJsZUhRdWFXNXdkWFJ6S1R0Y2JpQWdZMjl1ZEdWNGRDNWpiMjF3ZFhSbEtHTnlaV0YwWlV4aGVXVnlUbTl5YlZCeWIyZHlZVzFKYm1adktHTnZiblJsZUhRdWFXNXdkWFJ6TENCaGRIUnlhV0oxZEdWekxDQmpiMjUwWlhoMExtOTFkSEIxZEVOdmRXNTBLU2s3WEc1OU8xeHVJaXdnSWk4dklFTnZjSGx5YVdkb2RDQW9ZeWtnVFdsamNtOXpiMlowSUVOdmNuQnZjbUYwYVc5dUxpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1THk4Z1RHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFMUpWQ0JNYVdObGJuTmxMbHh1WEc1cGJYQnZjblFnZTBSaGRHRlVlWEJsTENCblpYUlVaVzV6YjNKRmJHVnRaVzUwVTJsNlpYMGdabkp2YlNBbkxpNHZMaTR2TGk0dmQyRnpiUzFqYjIxdGIyNG5PMXh1YVcxd2IzSjBJSHRVWlc1emIzSldhV1YzZlNCbWNtOXRJQ2N1TGk4dUxpOTBaVzV6YjNJdGRtbGxkeWM3WEc1cGJYQnZjblFnZTFOb1lYQmxWWFJwYkgwZ1puSnZiU0FuTGk0dkxpNHZkWFJwYkNjN1hHNXBiWEJ2Y25RZ2UwRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlU3dnWTNKbFlYUmxRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1ZlNCbWNtOXRJQ2N1TGk5aGRIUnlhV0oxZEdVdGQybDBhQzFqWVdOb1pTMXJaWGtuTzF4dWFXMXdiM0owSUh0RGIyMXdkWFJsUTI5dWRHVjRkQ3dnVUhKdlozSmhiVWx1Wm04c0lGQnliMmR5WVcxVmJtbG1iM0p0ZlNCbWNtOXRJQ2N1TGk5MGVYQmxjeWM3WEc1Y2JtbHRjRzl5ZENCN1kzSmxZWFJsVkdWdWMyOXlVMmhoY0dWV1lYSnBZV0pzWlhNc0lHZGxkRTFoZUVOdmJYQnZibVZ1ZEhNc0lHbHVjSFYwVm1GeWFXRmliR1VzSUc5MWRIQjFkRlpoY21saFlteGxMQ0JUYUdGa1pYSklaV3h3WlhJc0lIUmxibk52Y2xSNWNHVlViMWR6WjJ4VGRHOXlZV2RsVkhsd1pTd2dWVzVwWm05eWJYTkJjbkpoZVZSNWNHVjlJR1p5YjIwZ0p5NHZZMjl0Ylc5dUp6dGNibHh1THk4Z0lGUlBSRThnYzNWd2NHOXlkQ0J4ZFdGdWRHbDZZWFJwYjI0Z1ltbDBjeUJ1YjNRZ1pYRjFZV3dnZEc4Z05GeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQk5ZWFJOZFd4T1FtbDBjMEYwZEhKcFluVjBaWE1nWlhoMFpXNWtjeUJCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrZ2UxeHVJQ0JyT2lCdWRXMWlaWEk3WEc0Z0lHNDZJRzUxYldKbGNqdGNiaUFnWVdOamRYSmhZM2xNWlhabGJEb2diblZ0WW1WeU8xeHVJQ0JpYVhSek9pQnVkVzFpWlhJN1hHNGdJR0pzYjJOclUybDZaVG9nYm5WdFltVnlPMXh1ZlZ4dVhHNWpiMjV6ZENCMllXeHBaR0YwWlVsdWNIVjBjeUE5SUNocGJuQjFkSE02SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhTd2dZWFIwY21saWRYUmxjem9nVFdGMFRYVnNUa0pwZEhOQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUdsbUlDaHBibkIxZEhNdWJHVnVaM1JvSUR3Z015QjhmQ0JwYm5CMWRITXViR1Z1WjNSb0lENGdOQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25UV0YwVFhWc1RrSnBkSE1nY21WeGRXbHlaWE1nTXlCdmNpQTBJR2x1Y0hWMGN5Y3BPMXh1SUNCOVhHNGdJR052Ym5OMElHRWdQU0JwYm5CMWRITmJNRjA3WEc0Z0lHTnZibk4wSUdGU1lXNXJJRDBnWVM1a2FXMXpMbXhsYm1kMGFEdGNiaUFnYVdZZ0tHRXVaR2x0YzF0aFVtRnVheUF0SURGZElDRTlQU0JoZEhSeWFXSjFkR1Z6TG1zcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjFSb1pTQnNZWE4wSUdScGJTQnZaaUJwYm5CMWRDQnphR0Z3WlNCa2IyVnpJRzV2ZENCdFlYUmphQ0IwYUdVZ2F5QjJZV3gxWlNjcE8xeHVJQ0I5WEc0Z0lHTnZibk4wSUc1Q2JHOWphM05RWlhKRGIyd2dQU0JOWVhSb0xtWnNiMjl5S0NoaGRIUnlhV0oxZEdWekxtc2dLeUJoZEhSeWFXSjFkR1Z6TG1Kc2IyTnJVMmw2WlNBdElERXBJQzhnWVhSMGNtbGlkWFJsY3k1aWJHOWphMU5wZW1VcE8xeHVJQ0JqYjI1emRDQmliRzlpVTJsNlpTQTlJR0YwZEhKcFluVjBaWE11WW14dlkydFRhWHBsSUM4Z09DQXFJR0YwZEhKcFluVjBaWE11WW1sMGN6dGNiaUFnWTI5dWMzUWdZaUE5SUdsdWNIVjBjMXN4WFR0Y2JpQWdhV1lnS0NGVGFHRndaVlYwYVd3dVlYSmxSWEYxWVd3b1lpNWthVzF6TENCYllYUjBjbWxpZFhSbGN5NXVMQ0J1UW14dlkydHpVR1Z5UTI5c0xDQmliRzlpVTJsNlpWMHBLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFVhR1VnYzJWamIyNWtJR2x1Y0hWMGN5QnRkWE4wSUdKbElETkVJSFJsYm5OdmNpQjNhWFJvSUhOb1lYQmxJRTRnV0NCdVFteHZZMnR6VUdWeVEyOXNJRmdnWW14dllsTnBlbVVuS1R0Y2JpQWdmVnh1SUNCamIyNXpkQ0J6WTJGc1pYTWdQU0JwYm5CMWRITmJNbDA3WEc0Z0lHTnZibk4wSUhOallXeGxjMU5vWVhCbElEMGdjMk5oYkdWekxtUnBiWE03WEc0Z0lHbG1JQ2hUYUdGd1pWVjBhV3d1YzJsNlpTaHpZMkZzWlhOVGFHRndaU2tnSVQwOUlHRjBkSEpwWW5WMFpYTXViaUFxSUc1Q2JHOWphM05RWlhKRGIyd3BJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0ozTmpZV3hsY3lCcGJuQjFkQ0J6YVhwbElHVnljbTl5TGljcE8xeHVJQ0I5WEc0Z0lHbG1JQ2hwYm5CMWRITXViR1Z1WjNSb0lEMDlQU0EwS1NCN1hHNGdJQ0FnWTI5dWMzUWdlbVZ5YjFCdmFXNTBjeUE5SUdsdWNIVjBjMXN6WFR0Y2JpQWdJQ0JqYjI1emRDQjZaWEp2VUc5cGJuUnpVMmhoY0dVZ1BTQjZaWEp2VUc5cGJuUnpMbVJwYlhNN1hHNGdJQ0FnWTI5dWMzUWdaWGh3WldOMFpXUmFaWEp2VUc5cGJuUnpVMmw2WlNBOVhHNGdJQ0FnSUNBZ0lHRjBkSEpwWW5WMFpYTXVZbWwwY3lBK0lEUWdQeUFvWVhSMGNtbGlkWFJsY3k1dUlDb2dia0pzYjJOcmMxQmxja052YkNrZ09pQmhkSFJ5YVdKMWRHVnpMbTRnS2lCTllYUm9MbVpzYjI5eUtDaHVRbXh2WTJ0elVHVnlRMjlzSUNzZ01Ta2dMeUF5S1R0Y2JpQWdJQ0JwWmlBb1UyaGhjR1ZWZEdsc0xuTnBlbVVvZW1WeWIxQnZhVzUwYzFOb1lYQmxLU0FoUFQwZ1pYaHdaV04wWldSYVpYSnZVRzlwYm5SelUybDZaU2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2Q2WlhKdlVHOXBiblJ6SUdsdWNIVjBJSE5wZW1VZ1pYSnliM0l1SnlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnWTNKbFlYUmxUV0YwVFhWc1RrSnBkSE5RY205bmNtRnRTVzVtYnlBOVhHNGdJQ0FnS0dsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZExDQmhkSFJ5YVdKMWRHVnpPaUJOWVhSTmRXeE9RbWwwYzBGMGRISnBZblYwWlhNc1hHNGdJQ0FnSUcxaGVFTnZiWEIxZEdWWGIzSnJaM0p2ZFhCVGFYcGxjem9nVzI1MWJXSmxjaXdnYm5WdFltVnlMQ0J1ZFcxaVpYSmRMQ0J0WVhoRGIyMXdkWFJsVjI5eWEyZHliM1Z3VTNSdmNtRm5aVk5wZW1VNklHNTFiV0psY2lrNklGQnliMmR5WVcxSmJtWnZJRDArSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMFUyaGhjR1VnUFNCcGJuQjFkSE5iTUYwdVpHbHRjenRjYmlBZ0lDQWdJR052Ym5OMElHRlNZVzVySUQwZ2FXNXdkWFJUYUdGd1pTNXNaVzVuZEdnN1hHNGdJQ0FnSUNCamIyNXpkQ0J1UW14dlkydHpVR1Z5UTI5c0lEMGdUV0YwYUM1bWJHOXZjaWdvWVhSMGNtbGlkWFJsY3k1cklDc2dZWFIwY21saWRYUmxjeTVpYkc5amExTnBlbVVnTFNBeEtTQXZJR0YwZEhKcFluVjBaWE11WW14dlkydFRhWHBsS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JwYlVGUGRYUmxjaUE5SUdsdWNIVjBVMmhoY0dWYllWSmhibXNnTFNBeVhUdGNiaUFnSUNBZ0lHTnZibk4wSUdScGJVbHVibVZ5SUQwZ1lYUjBjbWxpZFhSbGN5NXJPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHbHRRazkxZEdWeUlEMGdZWFIwY21saWRYUmxjeTV1TzF4dUlDQWdJQ0FnWTI5dWMzUWdZbUYwWTJoRWFXMXpJRDBnYVc1d2RYUlRhR0Z3WlM1emJHbGpaU2d3TENCaFVtRnVheUF0SURJcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWW1GMFkyaFRhWHBsSUQwZ1UyaGhjR1ZWZEdsc0xuTnBlbVVvWW1GMFkyaEVhVzF6S1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR0pzYjJKVGFYcGxJRDBnWVhSMGNtbGlkWFJsY3k1aWJHOWphMU5wZW1VZ0x5QTRJQ29nWVhSMGNtbGlkWFJsY3k1aWFYUnpPMXh1SUNBZ0lDQWdZMjl1YzNRZ1lteHZZbE5wZW1WSmJsZHZjbVJ6SUQwZ1lteHZZbE5wZW1VZ0x5QTBPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHRjBZVlI1Y0dVZ1BTQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVTdYRzRnSUNBZ0lDQmpiMjV6ZENCdmRYUndkWFJPZFcxaVpYSWdQU0JuWlhSTllYaERiMjF3YjI1bGJuUnpLR1JwYlVGUGRYUmxjaWs3WEc0Z0lDQWdJQ0JqYjI1emRDQmhRMjl0Y0c5dVpXNTBjeUE5SUdkbGRFMWhlRU52YlhCdmJtVnVkSE1vWVhSMGNtbGlkWFJsY3k1cktUdGNiaUFnSUNBZ0lHTnZibk4wSUdKRGIyMXdiMjVsYm5SeklEMGdaMlYwVFdGNFEyOXRjRzl1Wlc1MGN5aGliRzlpVTJsNlpVbHVWMjl5WkhNcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWld4bGJXVnVkRk5wZW1VZ1BTQm5aWFJVWlc1emIzSkZiR1Z0Wlc1MFUybDZaU2hrWVhSaFZIbHdaU2toTzF4dUlDQWdJQ0FnWTI5dWMzUWdkMjl5YTJkeWIzVndUM1YwY0hWMFUybDZaU0E5SUdScGJVRlBkWFJsY2lBcUlHNUNiRzlqYTNOUVpYSkRiMndnS2lCbGJHVnRaVzUwVTJsNlpUdGNiaUFnSUNBZ0lHTnZibk4wSUcxaGVFNTFiV0psY2s5bVEyOXRjRzl1Wlc1MGN5QTlJRTFoZEdndVpteHZiM0lvYldGNFEyOXRjSFYwWlZkdmNtdG5jbTkxY0ZOMGIzSmhaMlZUYVhwbElDOGdkMjl5YTJkeWIzVndUM1YwY0hWMFUybDZaU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQjFjMlZDYkc5amEzZHBjMlZOWVhSTmRXeE9RbWwwY3lBOUlHNUNiRzlqYTNOUVpYSkRiMndnUEQwZ2JXRjRRMjl0Y0hWMFpWZHZjbXRuY205MWNGTnBlbVZ6V3pCZElDWW1JRzFoZUU1MWJXSmxjazltUTI5dGNHOXVaVzUwY3lBK0lEQTdYRzRnSUNBZ0lDQmpiMjV6ZENCamIyMXdiMjVsYm5SeklEMGdLQ0YxYzJWQ2JHOWphM2RwYzJWTllYUk5kV3hPUW1sMGN5QjhmQ0J0WVhoT2RXMWlaWEpQWmtOdmJYQnZibVZ1ZEhNZ1BqMGdOQ2tnUHlCblpYUk5ZWGhEYjIxd2IyNWxiblJ6S0dScGJVSlBkWFJsY2lrZ09seHVJQ0FnSUNBZ0lDQWdJQ2dvYldGNFRuVnRZbVZ5VDJaRGIyMXdiMjVsYm5SeklENDlJRElwSUNZbUlHZGxkRTFoZUVOdmJYQnZibVZ1ZEhNb1pHbHRRazkxZEdWeUtTQStQU0F5S1NBZ0lDQWdJRDhnTWlBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F4TzF4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1VnUFNCaVlYUmphRVJwYlhNdVkyOXVZMkYwS0Z0a2FXMUJUM1YwWlhJc0lHUnBiVUpQZFhSbGNsMHBPMXh1SUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwVTJsNlpTQTlJRk5vWVhCbFZYUnBiQzV6YVhwbEtHOTFkSEIxZEZOb1lYQmxLU0F2SUdOdmJYQnZibVZ1ZEhNZ0x5QnZkWFJ3ZFhST2RXMWlaWEk3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ5YjJkeVlXMVZibWxtYjNKdGN6b2dVSEp2WjNKaGJWVnVhV1p2Y20xYlhTQTlJSFZ6WlVKc2IyTnJkMmx6WlUxaGRFMTFiRTVDYVhSeklEOWNiaUFnSUNBZ0lDQWdJQ0JiWFNBNlhHNGdJQ0FnSUNBZ0lDQWdXM3QwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUc5MWRIQjFkRk5wZW1WOUxDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJoZEhSeWFXSjFkR1Z6TG1Kc2IyTnJVMmw2WlgxZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUlRhR0Z3WlZSbGJYQWdQU0JiWW1GMFkyaFRhWHBsTENCa2FXMUJUM1YwWlhJc0lHUnBiVWx1Ym1WeUlDOGdZVU52YlhCdmJtVnVkSE5kTzF4dUlDQWdJQ0FnWTI5dWMzUWdZbE5vWVhCbElEMGdVMmhoY0dWVmRHbHNMbU52Ym5abGNuUlRhR0Z3WlNocGJuQjFkSE5iTVYwdVpHbHRjeWt1YzJ4cFkyVW9LVHRjYmlBZ0lDQWdJR0pUYUdGd1pTNXpjR3hwWTJVb0xURXNJREVzSUdKc2IySlRhWHBsU1c1WGIzSmtjeUF2SUdKRGIyMXdiMjVsYm5SektUdGNiaUFnSUNBZ0lIQnliMmR5WVcxVmJtbG1iM0p0Y3k1d2RYTm9LQzR1TG1OeVpXRjBaVlJsYm5OdmNsTm9ZWEJsVm1GeWFXRmliR1Z6S0dsdWNIVjBVMmhoY0dWVVpXMXdLU2s3WEc0Z0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTXVjSFZ6YUNndUxpNWpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5aGlVMmhoY0dVcEtUdGNiaUFnSUNBZ0lIQnliMmR5WVcxVmJtbG1iM0p0Y3k1d2RYTm9LQzR1TG1OeVpXRjBaVlJsYm5OdmNsTm9ZWEJsVm1GeWFXRmliR1Z6S0dsdWNIVjBjMXN5WFM1a2FXMXpLU2s3WEc0Z0lDQWdJQ0JwWmlBb2FXNXdkWFJ6TG14bGJtZDBhQ0E5UFQwZ05Da2dlMXh1SUNBZ0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTXVjSFZ6YUNndUxpNWpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5aFRhR0Z3WlZWMGFXd3VZMjl1ZG1WeWRGTm9ZWEJsS0dsdWNIVjBjMXN6WFM1a2FXMXpLU2twTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1ZVWlcxd0lEMGdXMkpoZEdOb1UybDZaU3dnWkdsdFFVOTFkR1Z5TENCa2FXMUNUM1YwWlhJZ0x5QmpiMjF3YjI1bGJuUnpYVHRjYmlBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGN5NXdkWE5vS0M0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHOTFkSEIxZEZOb1lYQmxWR1Z0Y0NrcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxJRDBnS0hOb1lXUmxja2hsYkhCbGNqb2dVMmhoWkdWeVNHVnNjR1Z5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHbHVjSFYwVW1GdWF5QTlJR2x1Y0hWMFUyaGhjR1ZVWlcxd0xteGxibWQwYUR0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWVNBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjJFbkxDQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVXNJR2x1Y0hWMFVtRnVheXdnWVVOdmJYQnZibVZ1ZEhNcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCaUlEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnbllpY3NJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2dZbE5vWVhCbExteGxibWQwYUN3Z1lrTnZiWEJ2Ym1WdWRITXBPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpZMkZzWlhNZ1BTQnBibkIxZEZaaGNtbGhZbXhsS0NkelkyRnNaWE1uTENCcGJuQjFkSE5iTWwwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzeVhTNWthVzF6TG14bGJtZDBhQ2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMFZtRnlhV0ZpYkdWeklEMGdXMkVzSUdJc0lITmpZV3hsYzEwN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhwbGNtOVFiMmx1ZEhNZ1BWeHVJQ0FnSUNBZ0lDQWdJQ0FnYVc1d2RYUnpMbXhsYm1kMGFDQTlQVDBnTkNBL0lHbHVjSFYwVm1GeWFXRmliR1VvSjNwbGNtOWZjRzlwYm5Sekp5d2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQnBibkIxZEhOYk0xMHVaR2x0Y3k1c1pXNW5kR2dwSURvZ2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUNBZ0lDQnBaaUFvZW1WeWIxQnZhVzUwY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2x1Y0hWMFZtRnlhV0ZpYkdWekxuQjFjMmdvZW1WeWIxQnZhVzUwY3lrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwVW1GdWF5QTlJRzkxZEhCMWRGTm9ZWEJsVkdWdGNDNXNaVzVuZEdnN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUc5MWRIQjFkQ0E5SUc5MWRIQjFkRlpoY21saFlteGxLQ2R2ZFhSd2RYUW5MQ0JwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1VzSUc5MWRIQjFkRkpoYm1zc0lHTnZiWEJ2Ym1WdWRITXBPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjFibWxtYjNKdGN6b2dWVzVwWm05eWJYTkJjbkpoZVZSNWNHVWdQU0JiZTI1aGJXVTZJQ2R2ZFhSd2RYUmZjMmw2WlNjc0lIUjVjR1U2SUNkMU16SW5mU3dnZTI1aGJXVTZJQ2RpYkc5amExOXphWHBsSnl3Z2RIbHdaVG9nSjNVek1pZDlYVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaR0YwWVZSNWNHVWdQU0IwWlc1emIzSlVlWEJsVkc5WGMyZHNVM1J2Y21GblpWUjVjR1VvYVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsS1R0Y2JseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCeFJIRkVZWFJoVkhsd1pTQTlJQ2dvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnYzNkcGRHTm9JQ2hoUTI5dGNHOXVaVzUwY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQXhPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lHRnljbUY1UENSN1pHRjBZVlI1Y0dWOUxDQTRQbUE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSURJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJnYldGME5IZ3lQQ1I3WkdGMFlWUjVjR1Y5UG1BN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElEUTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ2JXRjBNbmcwUENSN1pHRjBZVlI1Y0dWOVBtQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZQ1I3WVVOdmJYQnZibVZ1ZEhOOUxXTnZiWEJ2Ym1WdWRDQnBjeUJ1YjNRZ2MzVndjRzl5ZEdWa0xtQXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTa29LVHRjYmx4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3Y205alpYTnpUMjVsUW14dlkyc2dQU0JnWEc0Z0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUhkdmNtUTZJSFV6TWlBOUlEQTdJSGR2Y21RZ1BDQWtlMkpzYjJKVGFYcGxTVzVYYjNKa2MzMDdJSGR2Y21RZ0t6MGdKSHRpUTI5dGNHOXVaVzUwYzMwcElIdGNiaUFnSUNBZ0lDQWdJQ0FrZTJJdWFXNWthV05sYzFObGRDZ25ZbDlwYm1ScFkyVnpKeXdnSnpJbkxDQW5kMjl5WkNjcGZUdGNiaUFnSUNBZ0lDQWdJQ0JzWlhRZ1lsOWtZWFJoSUQwZ0pIdGlMbWRsZEVKNVNXNWthV05sY3lnbllsOXBibVJwWTJWekp5bDlPMXh1SUNBZ0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUdrNklIVXpNaUE5SURBN0lHa2dQQ0FrZTJKRGIyMXdiMjVsYm5SemZUc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1lsOTJZV3gxWlRvZ2RUTXlJRDBnSkh0aVEyOXRjRzl1Wlc1MGN5QTlQVDBnTVNBL0lDZGlYMlJoZEdFbklEb2dKMkpmWkdGMFlWdDNiM0prSUNzZ2FWMG5mVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0JpWDIxaGMyczZJSFV6TWlBOUlEQjRNRVl3UmpCR01FWjFPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR0pmZG1Gc2RXVmZiRzkzWlhJNklIWmxZelE4ZFRNeVBpQTlJSFZ1Y0dGamF6UjRWVGdvWWw5MllXeDFaU0FtSUdKZmJXRnpheWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWWw5MllXeDFaVjkxY0hCbGNqb2dkbVZqTkR4MU16SStJRDBnZFc1d1lXTnJOSGhWT0Nnb1lsOTJZV3gxWlNBK1BpQTBLU0FtSUdKZmJXRnpheWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWWw5eGRXRnVkR2w2WldSZmRtRnNkV1Z6SUQwZ0pIdHhSSEZFWVhSaFZIbHdaWDBvSkh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRUZ5Y21GNUxtWnliMjBvZTJ4bGJtZDBhRG9nTkgwc0lDaGZMQ0JwS1NBOVBpQmdKSHRrWVhSaFZIbHdaWDBvWWw5MllXeDFaVjlzYjNkbGNsc2tlMmw5WFNrc0lDUjdaR0YwWVZSNWNHVjlLR0pmZG1Gc2RXVmZkWEJ3WlhKYkpIdHBmVjBwWUNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdWFtOXBiaWduTENBbktYMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR0pmWkdWeGRXRnVkR2w2WldSZmRtRnNkV1Z6SUQwZ0pIc29LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoaFEyOXRjRzl1Wlc1MGN5QTlQVDBnTVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0FrZTNGRWNVUmhkR0ZVZVhCbGZTZ2tlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRUZ5Y21GNUxtWnliMjBvZTJ4bGJtZDBhRG9nT0gwc0lDaGZMQ0JwS1NBOVBpQmdLR0pmY1hWaGJuUnBlbVZrWDNaaGJIVmxjMXNrZTJsOVhTQXRJSHBsY205ZmNHOXBiblFwSUNvZ2MyTmhiR1ZnS1M1cWIybHVLQ2NzSUNjcGZTazdZRHRjYmlBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHQW9ZbDl4ZFdGdWRHbDZaV1JmZG1Gc2RXVnpJQzBnSkh0eFJIRkVZWFJoVkhsd1pYMG9KSHRCY25KaGVTZzRLUzVtYVd4c0tDZDZaWEp2WDNCdmFXNTBKeWt1YW05cGJpZ25MQ2NwZlNrcElDb2djMk5oYkdVN1lEdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwcEtDbDlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdUblZ0WW1WeUlHOW1JRUlnWld4bGJXVnVkSE1nY0dWeUlETXlMV0pwZENCM2IzSmtJR2x6SURNeUwySnBkSE1nUFNBek1pODBJRDBnT0Z4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdiVG9nZFRNeUlEMGdNRHNnYlNBOElDUjdkWE5sUW14dlkydDNhWE5sVFdGMFRYVnNUa0pwZEhNZ1B5QmthVzFCVDNWMFpYSWdPaUJ2ZFhSd2RYUk9kVzFpWlhKOWRUc2diU3NyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNSN1lTNXBibVJwWTJWelUyVjBLQ2RoWDJsdVpHbGpaWE1uTENCcGJuQjFkRkpoYm1zZ0xTQXlMQ0IxYzJWQ2JHOWphM2RwYzJWTllYUk5kV3hPUW1sMGN5QS9JQ2R0SnlBNklHQnliM2NnS2lBa2UyOTFkSEIxZEU1MWJXSmxjbjBnS3lCdFlDbDlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWtlMkV1YVc1a2FXTmxjMU5sZENnbllWOXBibVJwWTJWekp5d2dhVzV3ZFhSU1lXNXJJQzBnTVN3Z0ozZHZjbVJmYjJabWMyVjBKeWw5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2FXNXdkWFJmYjJabWMyVjBJRDBnSkh0aExtbHVaR2xqWlhOVWIwOW1abk5sZENnbllWOXBibVJwWTJWekp5bDlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnWVY5a1lYUmhPaUFrZTNGRWNVUmhkR0ZVZVhCbGZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2Fqb2dkVE15SUQwZ01Ec2dhaUE4SUNSN09DQXZJR0ZEYjIxd2IyNWxiblJ6ZlRzZ2Fpc3JLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWVY5a1lYUmhXMnBkSUQwZ0pIdGhMbWRsZEVKNVQyWm1jMlYwS0NkcGJuQjFkRjl2Wm1aelpYUW5LWDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVc1d2RYUmZiMlptYzJWMEt5czdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0pIdDFjMlZDYkc5amEzZHBjMlZOWVhSTmRXeE9RbWwwY3lBL0lDZDNiM0pyWjNKdmRYQmZjMmhoY21Wa1czZHZjbXRuY205MWNGOXphR0Z5WldSZmIyWm1jMlYwSUNzZ2JWMG5JRG9nSjI5MWRIQjFkRjkyWVd4MVpYTmJiVjBuZlNSN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjIxd2IyNWxiblJ6SUQ0Z01TQS9JQ2RiWTEwbklEb2dKeWQ5SUNzOUlDUjdYRzRnSUNBZ0lDQWdJQ0FnSUNCQmNuSmhlVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzVtY205dEtGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I3YkdWdVozUm9PaUE0SUM4Z1lVTnZiWEJ2Ym1WdWRITjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBb1h5d2dhU2tnUFQ0Z1lDUjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmhRMjl0Y0c5dVpXNTBjeUE5UFQwZ01TQS9JR0JoWDJSaGRHRmJKSHRwZlYwZ0tpQmlYMlJsY1hWaGJuUnBlbVZrWDNaaGJIVmxjMXNrZTJsOVhXQWdPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JnWkc5MEtHRmZaR0YwWVZza2UybDlYU3dnWWw5a1pYRjFZVzUwYVhwbFpGOTJZV3gxWlhOYkpIdHBmVjBwWUgxZ0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDNXFiMmx1S0NjZ0t5QW5LWDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCM2IzSmtYMjltWm5ObGRDQXJQU0FrZXpnZ0x5QmhRMjl0Y0c5dVpXNTBjMzA3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlZRHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdkWEJrWVhSbFdtVnliMUJ2YVc1MFNXNWtaWGdnUFNCNlpYSnZVRzlwYm5SeklEOGdZRnh1SUNBZ0lDQWdJQ0FnSUhwbGNtOWZjRzlwYm5SZmIyWm1jMlYwSUNzOUlEUTdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tIcGxjbTlmY0c5cGJuUmZiMlptYzJWMElEMDlJRE15S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I2WlhKdlgzQnZhVzUwWDI5bVpuTmxkQ0E5SURBN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I2WlhKdlgzQnZhVzUwWDJsdVpHVjRLeXM3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjZaWEp2WDNCdmFXNTBYM2R2Y21RZ1BTQWtlM3BsY205UWIybHVkSE11WjJWMFFubFBabVp6WlhRb0ozcGxjbTlmY0c5cGJuUmZhVzVrWlhnbktYMDdYRzRnSUNBZ0lDQWdJQ0FnZldBZ09seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBbkp6dGNibHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkWE5sUW14dlkydDNhWE5sVFdGMFRYVnNUa0pwZEhNZ1B5QmdYRzRnSUNBZ0lDQWdJSFpoY2p4M2IzSnJaM0p2ZFhBK0lIZHZjbXRuY205MWNGOXphR0Z5WldRNklHRnljbUY1UENSN2IzVjBjSFYwTG5SNWNHVXVkbUZzZFdWOUxDQWtlMlJwYlVGUGRYUmxjaUFxSUc1Q2JHOWphM05RWlhKRGIyeDlQanRjYmlBZ0lDQWdJQ0FnSkh0emFHRmtaWEpJWld4d1pYSXVaR1ZqYkdGeVpWWmhjbWxoWW14bGN5Z3VMaTVwYm5CMWRGWmhjbWxoWW14bGN5d2diM1YwY0hWMEtYMWNiaUFnSUNBZ0lDQWdKSHR6YUdGa1pYSklaV3h3WlhJdWJXRnBibE4wWVhKMEtGdGNiaUFnSUNBZ0lDQWdJQ0J1UW14dlkydHpVR1Z5UTI5c0xDQXhMQ0F4WEc0Z0lDQWdJQ0FnSUYwcGZWeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCaFgybHVaR2xqWlhNNklDUjdZUzUwZVhCbExtbHVaR2xqWlhOOU8xeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCaWJHOWpheUE5SUd4dlkyRnNYMmxrTG5nN1hHNGdJQ0FnSUNBZ0lDQWdkbUZ5SUdOdmJDQTlJSGR2Y210bmNtOTFjRjlwWkM1NU8xeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCaVlYUmphQ0E5SUhkdmNtdG5jbTkxY0Y5cFpDNTZPMXh1SUNBZ0lDQWdJQ0FnSUNSN1lTNXBibVJwWTJWelUyVjBLQ2RoWDJsdVpHbGpaWE1uTENBbk1DY3NJQ2RpWVhSamFDY3BmVHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QlVkMjhnZW1WeWJ5QndiMmx1ZEhNZ1lYSmxJSEJoWTJ0bFpDQnBiblJ2SUc5dVpTQmllWFJsSUhkb1pXNGdkVzVwWm05eWJYTXVZbWwwY3lCcGN5QTBMbHh1SUNBZ0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUdNNklIVXpNaUE5SURBN0lHTWdQQ0FrZTJOdmJYQnZibVZ1ZEhOOU95QmpLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCamIyeGZkR2x0WlhOZlkyOXRjRzl1Wlc1MGMxOXdiSFZ6WDJNZ1BTQmpiMndnS2lBa2UyTnZiWEJ2Ym1WdWRITjlJQ3NnWXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSkh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIcGxjbTlRYjJsdWRITWdQeUJnWEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnZW1WeWIxOXdiMmx1ZEY5aWVYUmxjMTl3WlhKZlkyOXNPaUIxTXpJZ1BTQW9KSHR1UW14dlkydHpVR1Z5UTI5c2ZTQXJJREVwSUM4Z01qdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQjZaWEp2WDNCdmFXNTBYMko1ZEdWZlkyOTFiblE2SUhVek1pQTlJR052YkY5MGFXMWxjMTlqYjIxd2IyNWxiblJ6WDNCc2RYTmZZeUFxSUhwbGNtOWZjRzlwYm5SZllubDBaWE5mY0dWeVgyTnZiQ0FySUNoaWJHOWpheUErUGlBd2VERjFLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUI2WlhKdlgzQnZhVzUwWDNkdmNtUmZhVzVrWlhnNklIVXpNaUE5SUhwbGNtOWZjRzlwYm5SZllubDBaVjlqYjNWdWRDQStQaUF3ZURKMU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlIcGxjbTlmY0c5cGJuUmZZbmwwWlY5dlptWnpaWFE2SUhVek1pQTlJSHBsY205ZmNHOXBiblJmWW5sMFpWOWpiM1Z1ZENBbUlEQjRNM1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnZW1WeWIxOXdiMmx1ZEY5dWFXSmliR1ZmYjJabWMyVjBPaUIxTXpJZ1BTQmliRzlqYXlBbUlEQjRNWFU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnZW1WeWIxOXdiMmx1ZEY5aWFYUnpYMjltWm5ObGREb2dkVE15SUQwZ0tIcGxjbTlmY0c5cGJuUmZZbmwwWlY5dlptWnpaWFFnUER3Z015a2dLeUFvZW1WeWIxOXdiMmx1ZEY5dWFXSmliR1ZmYjJabWMyVjBJRHc4SURJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlIcGxjbTlmY0c5cGJuUmZkMjl5WkRvZ2RUTXlJRDBnSkh0NlpYSnZVRzlwYm5SekxtZGxkRUo1VDJabWMyVjBLQ2Q2WlhKdlgzQnZhVzUwWDNkdmNtUmZhVzVrWlhnbktYMGdQajRnZW1WeWIxOXdiMmx1ZEY5aWFYUnpYMjltWm5ObGREdGdJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5KMzFjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJpWDJsdVpHbGpaWE02SUNSN1lpNTBlWEJsTG1sdVpHbGpaWE45TzF4dUlDQWdJQ0FnSUNBZ0lDQWdKSHRpTG1sdVpHbGpaWE5UWlhRb0oySmZhVzVrYVdObGN5Y3NJQ2N3Snl3Z0oyTnZiRjkwYVcxbGMxOWpiMjF3YjI1bGJuUnpYM0JzZFhOZll5Y3BmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJRlJvWlNCelkyRnNaU0JoYm1RZ2VtVnlieUJ3YjJsdWRITWdZWEpsSUdOdmJYQjFkR1ZrSUhCbGNpQmliRzlqYXk1Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCelkyRnNaWE5mYVc1a1pYZ2dQU0JqYjJ4ZmRHbHRaWE5mWTI5dGNHOXVaVzUwYzE5d2JIVnpYMk1nS2lBa2UyNUNiRzlqYTNOUVpYSkRiMng5SUNzZ1lteHZZMnM3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYzJOaGJHVWdQU0FrZTNOallXeGxjeTVuWlhSQ2VVOW1abk5sZENnbmMyTmhiR1Z6WDJsdVpHVjRKeWw5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnVkdobElHUmxabUYxYkhRZ2VtVnlieUJ3YjJsdWRDQnBjeUE0SUdadmNpQjFibk5wWjI1bFpDQTBMV0pwZENCeGRXRnVkR2w2WVhScGIyNHVYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdlbVZ5YjE5d2IybHVkQ0E5SUNSN1pHRjBZVlI1Y0dWOUtDUjdlbVZ5YjFCdmFXNTBjeUEvSUNjb2VtVnliMTl3YjJsdWRGOTNiM0prS1NBbUlEQjRSblVuSURvZ09DNHdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWtlMkl1YVc1a2FXTmxjMU5sZENnbllsOXBibVJwWTJWekp5d2dKekVuTENBbllteHZZMnNuS1gwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2QyOXlaRjl2Wm1aelpYUTZJSFV6TWlBOUlHSnNiMk5ySUNvZ0pIdGhkSFJ5YVdKMWRHVnpMbUpzYjJOclUybDZaU0F2SUdGRGIyMXdiMjVsYm5SemZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQjNiM0pyWjNKdmRYQmZjMmhoY21Wa1gyOW1abk5sZERvZ2RUTXlJRDBnWW14dlkyc2dLaUFrZTJScGJVRlBkWFJsY24wN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrZTNCeWIyTmxjM05QYm1WQ2JHOWphMzFjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdkMjl5YTJkeWIzVndRbUZ5Y21sbGNpZ3BPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHNiMk5oYkY5cFpDNTRJRDA5SURCMUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMllYSWdiM1YwY0hWMFgybHVaR2xqWlhNNklDUjdiM1YwY0hWMExuUjVjR1V1YVc1a2FXTmxjMzA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWtlMjkxZEhCMWRDNXBibVJwWTJWelUyVjBLQ2R2ZFhSd2RYUmZhVzVrYVdObGN5Y3NJQ2N3Snl3Z0oySmhkR05vSnlsOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSkh0dmRYUndkWFF1YVc1a2FXTmxjMU5sZENnbmIzVjBjSFYwWDJsdVpHbGpaWE1uTENCdmRYUndkWFJTWVc1cklDMGdNU3dnSjJOdmJDY3BmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDUjdiM1YwY0hWMExtbHVaR2xqWlhOVFpYUW9KMjkxZEhCMWRGOXBibVJwWTJWekp5d2diM1YwY0hWMFVtRnVheUF0SURJc0lDY3dKeWw5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUc5MWRIQjFkRjl2Wm1aelpYUWdQU0FrZTI5MWRIQjFkQzVwYm1ScFkyVnpWRzlQWm1aelpYUW9KMjkxZEhCMWRGOXBibVJwWTJWekp5bDlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2JUb2dkVE15SUQwZ01IVTdJRzBnUENBa2UyUnBiVUZQZFhSbGNuMTFPeUJ0S3lzcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJRzkxZEhCMWRGOTJZV3gxWlRvZ0pIdHZkWFJ3ZFhRdWRIbHdaUzUyWVd4MVpYMGdQU0FrZTI5MWRIQjFkQzUwZVhCbExuWmhiSFZsZlNnd0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSGR2Y210bmNtOTFjRjl6YUdGeVpXUmZiMlptYzJWME9pQjFNeklnUFNCdE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCaU9pQjFNeklnUFNBd2RUc2dZaUE4SUNSN2JrSnNiMk5yYzFCbGNrTnZiSDExT3lCaUt5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2ZFhSd2RYUmZkbUZzZFdVZ0t6MGdkMjl5YTJkeWIzVndYM05vWVhKbFpGdDNiM0pyWjNKdmRYQmZjMmhoY21Wa1gyOW1abk5sZEYwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2QyOXlhMmR5YjNWd1gzTm9ZWEpsWkY5dlptWnpaWFFnS3owZ0pIdGthVzFCVDNWMFpYSjlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDUjdiM1YwY0hWMExuTmxkRUo1VDJabWMyVjBLQ2R2ZFhSd2RYUmZiMlptYzJWMEp5d2dKMjkxZEhCMWRGOTJZV3gxWlNjcGZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2IzVjBjSFYwWDI5bVpuTmxkQ0FyUFNBa2UyUnBiVUpQZFhSbGNpQXZJR052YlhCdmJtVnVkSE45TzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZXQWdPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmdYRzRnSUNBZ0lDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxuSmxaMmx6ZEdWeVZXNXBabTl5YlhNb2RXNXBabTl5YlhNcExtUmxZMnhoY21WV1lYSnBZV0pzWlhNb0xpNHVhVzV3ZFhSV1lYSnBZV0pzWlhNc0lHOTFkSEIxZENsOVhHNGdJQ0FnSUNBZ0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG0xaGFXNVRkR0Z5ZENncGZWeHVJQ0FnSUNBZ0lDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxtZDFZWEprUVdkaGFXNXpkRTkxZEU5bVFtOTFibVJ6VjI5eWEyZHliM1Z3VTJsNlpYTW9KM1Z1YVdadmNtMXpMbTkxZEhCMWRGOXphWHBsSnlsOVhHNGdJQ0FnSUNBZ0lDQWdkbUZ5SUc5MWRIQjFkRjkyWVd4MVpYTTZJR0Z5Y21GNVBDUjdiM1YwY0hWMExuUjVjR1V1ZG1Gc2RXVjlMQ0FrZTI5MWRIQjFkRTUxYldKbGNuMCtPMXh1SUNBZ0lDQWdJQ0FnSUhaaGNpQnZkWFJ3ZFhSZmFXNWthV05sY3lBOUlDUjdiM1YwY0hWMExtOW1abk5sZEZSdlNXNWthV05sY3lnbloyeHZZbUZzWDJsa2VDY3BmVHRjYmlBZ0lDQWdJQ0FnSUNCMllYSWdZMjlzSUQwZ0pIdHZkWFJ3ZFhRdWFXNWthV05sYzBkbGRDZ25iM1YwY0hWMFgybHVaR2xqWlhNbkxDQnZkWFJ3ZFhSU1lXNXJJQzBnTVNsOU8xeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCeWIzY2dQU0FrZTI5MWRIQjFkQzVwYm1ScFkyVnpSMlYwS0NkdmRYUndkWFJmYVc1a2FXTmxjeWNzSUc5MWRIQjFkRkpoYm1zZ0xTQXlLWDA3WEc0Z0lDQWdJQ0FnSUNBZ2RtRnlJR0ZmYVc1a2FXTmxjem9nSkh0aExuUjVjR1V1YVc1a2FXTmxjMzBnUFNCdmRYUndkWFJmYVc1a2FXTmxjenRjYmlBZ0lDQWdJQ0FnSUNBdkx5QlVkMjhnZW1WeWJ5QndiMmx1ZEhNZ1lYSmxJSEJoWTJ0bFpDQnBiblJ2SUc5dVpTQmllWFJsSUdKbFkyRjFjMlVnZFc1cFptOXliWE11WW1sMGN5QThQU0EwTGx4dUlDQWdJQ0FnSUNBZ0lDOHZJSHBsY205ZmNHOXBiblJmYjJabWMyVjBJR2x6SUdWcGRHaGxjaUF3SUc5eUlEUXVJRWwwSUdseklHSnBkQ0J2Wm1aelpYUWdkMmwwYUdsdUlHOXVaU0JpZVhSbExseHVJQ0FnSUNBZ0lDQWdJQzh2SUZSUFJFOGdjM1Z3Y0c5eWRDQjZaWEp2WDNCdmFXNTBYMjltWm5ObGRDQm1iM0lnWW1sMGN5QStJRFJjYmlBZ0lDQWdJQ0FnSUNBa2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlbVZ5YjFCdmFXNTBjeUEvSUdCY2JpQWdJQ0FnSUNBZ0lDQjJZWElnZW1WeWIxOXdiMmx1ZEY5aFluTmZiMlptYzJWMElEMGdZMjlzSUNvZ0pIdGpiMjF3YjI1bGJuUnpmU0FxSUNnb0pIdHVRbXh2WTJ0elVHVnlRMjlzZlNBcklERXBJQzhnTWlrN1hHNGdJQ0FnSUNBZ0lDQWdkbUZ5SUhwbGNtOWZjRzlwYm5SZmFXNWtaWGc2SUhVek1pQTlJSHBsY205ZmNHOXBiblJmWVdKelgyOW1abk5sZENBdklEUTdYRzRnSUNBZ0lDQWdJQ0FnZG1GeUlIcGxjbTlmY0c5cGJuUmZkMjl5WkRvZ2RUTXlJRDBnSkh0NlpYSnZVRzlwYm5SekxtZGxkRUo1VDJabWMyVjBLQ2Q2WlhKdlgzQnZhVzUwWDJsdVpHVjRKeWw5TzF4dUlDQWdJQ0FnSUNBZ0lIWmhjaUI2WlhKdlgzQnZhVzUwWDI5bVpuTmxkRG9nZFRNeUlEMGdLSHBsY205ZmNHOXBiblJmWVdKelgyOW1abk5sZENBbElEUXBJQ29nT0R0Z0lEcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBbkozMWNiaUFnSUNBZ0lDQWdJQ0IyWVhJZ2MyTmhiR1ZmYVc1a1pYZ2dQU0JqYjJ3Z0tpQWtlMjVDYkc5amEzTlFaWEpEYjJ3Z0tpQmpiMjF3YjI1bGJuUnpmVHRjYmlBZ0lDQWdJQ0FnSUNCMllYSWdZbDlwYm1ScFkyVnpPaUFrZTJJdWRIbHdaUzVwYm1ScFkyVnpmVHRjYmlBZ0lDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCak9pQjFNeklnUFNBd095QmpJRHdnSkh0amIyMXdiMjVsYm5SemZUc2dZeXNyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrZTJJdWFXNWthV05sYzFObGRDZ25ZbDlwYm1ScFkyVnpKeXdnSnpBbkxDQmdZMjlzSUNvZ0pIdGpiMjF3YjI1bGJuUnpmU0FySUdOZ0tYMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCMllYSWdZbXh2WTJ0ZmIyWm1jMlYwT2lCMU16SWdQU0F3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdZbXh2WTJzNklIVXpNaUE5SURBN0lHSnNiMk5ySUR3Z0pIdHVRbXh2WTJ0elVHVnlRMjlzZlRzZ1lteHZZMnNyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5QlVhR1VnYzJOaGJHVWdZVzVrSUhwbGNtOGdjRzlwYm5SeklHRnlaU0JqYjIxd2RYUmxaQ0J3WlhJZ1lteHZZMnN1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCelkyRnNaU0E5SUNSN2MyTmhiR1Z6TG1kbGRFSjVUMlptYzJWMEtDZHpZMkZzWlY5cGJtUmxlQ2NwZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1ZHaGxJR1JsWm1GMWJIUWdlbVZ5YnlCd2IybHVkQ0JwY3lBNElHWnZjaUIxYm5OcFoyNWxaQ0EwTFdKcGRDQnhkV0Z1ZEdsNllYUnBiMjR1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCNlpYSnZYM0J2YVc1MElEMGdKSHRrWVhSaFZIbHdaWDBvSkh0NlpYSnZVRzlwYm5SeklEOGdKMlY0ZEhKaFkzUkNhWFJ6S0hwbGNtOWZjRzlwYm5SZmQyOXlaQ3dnZW1WeWIxOXdiMmx1ZEY5dlptWnpaWFFzSURRcEp5QTZJRGd1TUgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBa2UySXVhVzVrYVdObGMxTmxkQ2duWWw5cGJtUnBZMlZ6Snl3Z0p6RW5MQ0FuWW14dlkyc25LWDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCM2IzSmtYMjltWm5ObGREb2dkVE15SUQwZ1lteHZZMnRmYjJabWMyVjBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWtlM0J5YjJObGMzTlBibVZDYkc5amEzMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2MyTmhiR1ZmYVc1a1pYZ3JLenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdKSHQxY0dSaGRHVmFaWEp2VUc5cGJuUkpibVJsZUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWW14dlkydGZiMlptYzJWMElDczlJSFZ1YVdadmNtMXpMbUpzYjJOclgzTnBlbVVnTHlBa2UyRkRiMjF3YjI1bGJuUnpmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklFUnliM0FnZEdobElIUnlZV2xzYVc1bklEUWdZbWwwY3lCcFppQjBhR1VnZW1WeWIxOXdiMmwwWDI5bVpuTmxkQ0JwY3lCdWIzUWdZU0JpZVhSbElHSnZkVzVrWVhKNUlIUnZJR0ZzYVdkdUlIZHBkR2dnZEdobElHNWxlSFFnWW5sMFpTNWNiaUFnSUNBZ0lDQWdJQ0FnSUNSN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjZaWEp2VUc5cGJuUnpJRDhnWUdsbUlDaDZaWEp2WDNCdmFXNTBYMjltWm5ObGRDQWxJRGdnUGlBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKSHQxY0dSaGRHVmFaWEp2VUc5cGJuUkpibVJsZUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZldBZ09seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNjbmZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhem9nZFRNeUlEMGdNSFU3SUdzZ1BDQWtlMjkxZEhCMWRFNTFiV0psY24xMU95QnJLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSkh0dmRYUndkWFF1YVc1a2FXTmxjMU5sZENnbmIzVjBjSFYwWDJsdVpHbGpaWE1uTENCdmRYUndkWFJTWVc1cklDMGdNaXdnWUNSN2IzVjBjSFYwVG5WdFltVnlmU0FxSUhKdmR5QXJJR3RnS1gwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNSN2IzVjBjSFYwTG5ObGRFSjVTVzVrYVdObGN5Z25iM1YwY0hWMFgybHVaR2xqWlhNbkxDQW5iM1YwY0hWMFgzWmhiSFZsYzF0clhTY3BmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlZRHRjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0J1WVcxbE9pQjFjMlZDYkc5amEzZHBjMlZOWVhSTmRXeE9RbWwwY3lBL0lDZENiRzlqYTNkcGMyVk5ZWFJOZFd4T1FtbDBjeWNnT2lBblRXRjBUWFZzVGtKcGRITW5MRnh1SUNBZ0lDQWdJQ0J6YUdGa1pYSkRZV05vWlRvZ2UxeHVJQ0FnSUNBZ0lDQWdJR2hwYm5RNklHQWtlMkYwZEhKcFluVjBaWE11WTJGamFHVkxaWGw5T3lSN1pHbHRRVTkxZEdWeWZUc2tlMlJoZEdGVWVYQmxmVHNrZTJsdWNIVjBjeTVzWlc1bmRHaDlZQ3hjYmlBZ0lDQWdJQ0FnSUNCcGJuQjFkRVJsY0dWdVpHVnVZMmxsY3pvZ1FYSnlZWGtvYVc1d2RYUnpMbXhsYm1kMGFDa3VabWxzYkNnbmNtRnVheWNwWEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lHZGxkRkoxYmtSaGRHRTZJQ2dwSUQwK0lDaDdYRzRnSUNBZ0lDQWdJQ0FnYjNWMGNIVjBjem9nVzN0a2FXMXpPaUJ2ZFhSd2RYUlRhR0Z3WlN3Z1pHRjBZVlI1Y0dWOVhTeGNiaUFnSUNBZ0lDQWdJQ0J1WVcxbE9pQjFjMlZDYkc5amEzZHBjMlZOWVhSTmRXeE9RbWwwY3lBL0lDZENiRzlqYTNkcGMyVk5ZWFJOZFd4T1FtbDBjeWNnT2lBblRXRjBUWFZzVGtKcGRITW5MRnh1SUNBZ0lDQWdJQ0FnSUdScGMzQmhkR05vUjNKdmRYQTZJSFZ6WlVKc2IyTnJkMmx6WlUxaGRFMTFiRTVDYVhSeklEOGdlM2c2SURFc0lIazZJRTFoZEdndVkyVnBiQ2hrYVcxQ1QzVjBaWElnTHlCamIyMXdiMjVsYm5SektTd2dlam9nWW1GMFkyaFRhWHBsZlNBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN2VEb2dUV0YwYUM1alpXbHNLRzkxZEhCMWRGTnBlbVVnTHlBMk5DQXZLaUIzYjNKclozSnZkWEFnYzJsNlpTQXFMeWw5TEZ4dUlDQWdJQ0FnSUNBZ0lIQnliMmR5WVcxVmJtbG1iM0p0YzF4dUlDQWdJQ0FnSUNCOUtTeGNiaUFnSUNBZ0lDQWdaMlYwVTJoaFpHVnlVMjkxY21ObFhHNGdJQ0FnSUNCOU8xeHVJQ0FnSUgwN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCdFlYUk5kV3hPUW1sMGN5QTlJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDd2dZWFIwY21saWRYUmxjem9nVFdGMFRYVnNUa0pwZEhOQmRIUnlhV0oxZEdWektUb2dkbTlwWkNBOVBpQjdYRzRnSUhaaGJHbGtZWFJsU1c1d2RYUnpLR052Ym5SbGVIUXVhVzV3ZFhSekxDQmhkSFJ5YVdKMWRHVnpLVHRjYmlBZ1kyOXVjM1FnYldGNFEyOXRjSFYwWlZkdmNtdG5jbTkxY0ZOcGVtVnpPaUJiYm5WdFltVnlMQ0J1ZFcxaVpYSXNJRzUxYldKbGNsMGdQU0JqYjI1MFpYaDBMbWRsZEUxaGVFTnZiWEIxZEdWWGIzSnJaM0p2ZFhCVGFYcGxjeWdwTzF4dUlDQmpiMjV6ZENCdFlYaERiMjF3ZFhSbFYyOXlhMmR5YjNWd1UzUnZjbUZuWlZOcGVtVWdQU0JqYjI1MFpYaDBMbWRsZEUxaGVFTnZiWEIxZEdWWGIzSnJaM0p2ZFhCVGRHOXlZV2RsYzJsNlpTZ3BPMXh1SUNCamIyNTBaWGgwTG1OdmJYQjFkR1VvWTNKbFlYUmxUV0YwVFhWc1RrSnBkSE5RY205bmNtRnRTVzVtYnloY2JpQWdJQ0FnSUdOdmJuUmxlSFF1YVc1d2RYUnpMQ0JoZEhSeWFXSjFkR1Z6TENCdFlYaERiMjF3ZFhSbFYyOXlhMmR5YjNWd1UybDZaWE1zSUcxaGVFTnZiWEIxZEdWWGIzSnJaM0p2ZFhCVGRHOXlZV2RsVTJsNlpTa3BPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUhCaGNuTmxUV0YwVFhWc1RrSnBkSE5CZEhSeWFXSjFkR1Z6SUQwZ0tHRjBkSEpwWW5WMFpYTTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lIVnVhMjV2ZDI0K0tUb2dUV0YwVFhWc1RrSnBkSE5CZEhSeWFXSjFkR1Z6SUQwK1hHNGdJQ0FnWTNKbFlYUmxRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1S0dGMGRISnBZblYwWlhNZ1lYTWdUMjFwZER4TllYUk5kV3hPUW1sMGMwRjBkSEpwWW5WMFpYTXNJR3RsZVc5bUlFRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlVDRwTzF4dUlpd2dJaTh2SUVOdmNIbHlhV2RvZENBb1l5a2dUV2xqY205emIyWjBJRU52Y25CdmNtRjBhVzl1TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVMeThnVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUUxSlZDQk1hV05sYm5ObExseHVYRzVwYlhCdmNuUWdlMFJoZEdGVWVYQmxmU0JtY205dElDY3VMaTh1TGk4dUxpOTNZWE50TFdOdmJXMXZiaWM3WEc1cGJYQnZjblFnZTFSbGJuTnZjbFpwWlhkOUlHWnliMjBnSnk0dUx5NHVMM1JsYm5OdmNpMTJhV1YzSnp0Y2JtbHRjRzl5ZENCN1UyaGhjR1ZWZEdsc2ZTQm1jbTl0SUNjdUxpOHVMaTkxZEdsc0p6dGNibWx0Y0c5eWRDQjdZM0psWVhSbFFYUjBjbWxpZFhSbFYybDBhRU5oWTJobFMyVjVmU0JtY205dElDY3VMaTloZEhSeWFXSjFkR1V0ZDJsMGFDMWpZV05vWlMxclpYa25PMXh1YVcxd2IzSjBJSHREYjIxd2RYUmxRMjl1ZEdWNGRDd2dSM0IxUkdGMFlWUjVjR1VzSUZCeWIyZHlZVzFWYm1sbWIzSnRmU0JtY205dElDY3VMaTkwZVhCbGN5YzdYRzVjYm1sdGNHOXlkQ0I3WVhCd2JIbEJkSFJsYm5ScGIyNHNJRUYwZEdWdWRHbHZia0YwZEhKekxDQkJkSFJsYm5ScGIyNU5ZWE5yVkhsd1pTd2dRWFIwWlc1MGFXOXVVR0Z5WVcxbGRHVnljeXdnUVhSMFpXNTBhVzl1VVd0MlJtOXliV0YwZlNCbWNtOXRJQ2N1TDJGMGRHVnVkR2x2YmljN1hHNXBiWEJ2Y25RZ2UybHVjSFYwVm1GeWFXRmliR1VzSUc5MWRIQjFkRlpoY21saFlteGxMQ0JUYUdGa1pYSklaV3h3WlhJc0lGVnVhV1p2Y20xelFYSnlZWGxVZVhCbGZTQm1jbTl0SUNjdUwyTnZiVzF2YmljN1hHNXBiWEJ2Y25RZ2UyTnlaV0YwWlZSeVlXNXpjRzl6WlZCeWIyZHlZVzFKYm1adkxDQlVjbUZ1YzNCdmMyVkJkSFJ5YVdKMWRHVnpmU0JtY205dElDY3VMM1J5WVc1emNHOXpaU2M3WEc1Y2JtTnZibk4wSUdkbGRFbHVjSFYwSUQwZ0tHbHVjSFYwY3pvZ2NtVmhaRzl1YkhrZ1ZHVnVjMjl5Vm1sbGQxdGRMQ0JwT2lCdWRXMWlaWElwSUQwK1hHNGdJQ0FnS0dsdWNIVjBjeTVzWlc1bmRHZ2dQaUJwS1NBbUppQW9hVzV3ZFhSelcybGRMbVJwYlhNdWJHVnVaM1JvSUQ0Z01Da2dKaVlnS0ZOb1lYQmxWWFJwYkM1emFYcGxLR2x1Y0hWMGMxdHBYUzVrYVcxektTa2dQaUF3SUQ4Z2FXNXdkWFJ6VzJsZElEb2dkVzVrWldacGJtVmtPMXh1WEc1amIyNXpkQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5QTlJQ2hwYm5CMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFN3Z1lYUjBjbWxpZFhSbGN6b2dRWFIwWlc1MGFXOXVRWFIwY25NcE9pQkJkSFJsYm5ScGIyNVFZWEpoYldWMFpYSnpJRDArSUh0Y2JpQWdZMjl1YzNRZ2NYVmxjbmtnUFNCcGJuQjFkSE5iTUYwN1hHNGdJR052Ym5OMElHdGxlU0E5SUdkbGRFbHVjSFYwS0dsdWNIVjBjeXdnTVNrN1hHNGdJR052Ym5OMElIWmhiSFZsSUQwZ1oyVjBTVzV3ZFhRb2FXNXdkWFJ6TENBeUtUdGNiaUFnWTI5dWMzUWdZbWxoY3lBOUlHZGxkRWx1Y0hWMEtHbHVjSFYwY3l3Z015azdYRzRnSUdOdmJuTjBJR3RsZVZCaFpHUnBibWROWVhOcklEMGdaMlYwU1c1d2RYUW9hVzV3ZFhSekxDQTBLVHRjYmlBZ1kyOXVjM1FnY21Wc1lYUnBkbVZRYjNOcGRHbHZia0pwWVhNZ1BTQm5aWFJKYm5CMWRDaHBibkIxZEhNc0lEVXBPMXh1SUNCamIyNXpkQ0J3WVhOMFMyVjVJRDBnWjJWMFNXNXdkWFFvYVc1d2RYUnpMQ0EyS1R0Y2JpQWdZMjl1YzNRZ2NHRnpkRlpoYkhWbElEMGdaMlYwU1c1d2RYUW9hVzV3ZFhSekxDQTNLVHRjYmx4dUlDQXZMeUJCWW1KeVpYWnBZWFJwYjI0Z1lXNWtJRTFsWVc1cGJtZHpPbHh1SUNBdkx5QWdJRUk2SUNBZ0lHSmhkR05vWDNOcGVtVmNiaUFnTHk4Z0lDQlRPaUFnSUNCelpYRjFaVzVqWlY5c1pXNW5kR2dnS0dsdWNIVjBJSE5sY1hWbGJtTmxJR3hsYm1kMGFDQnZaaUJ4ZFdWeWVTbGNiaUFnTHk4Z0lDQlFPaUFnSUNCd1lYTjBYM05sY1hWbGJtTmxYMnhsYm1kMGFDQW9jR0Z6ZENCelpYRjFaVzVqWlNCc1pXNW5kR2dnYjJZZ2EyVjVJRzl5SUhaaGJIVmxLVnh1SUNBdkx5QWdJRXc2SUNBZ0lHdDJYM05sY1hWbGJtTmxYMnhsYm1kMGFDQW9hVzV3ZFhRZ2MyVnhkV1Z1WTJVZ2JHVnVaM1JvSUc5bUlHdGxlU0J2Y2lCMllXeDFaU2xjYmlBZ0x5OGdJQ0JOT2lBZ0lDQnRZWGhmYzJWeGRXVnVZMlZmYkdWdVozUm9YRzRnSUM4dklDQWdWRG9nSUNBZ2RHOTBZV3hmYzJWeGRXVnVZMlZmYkdWdVozUm9JRDBnY0dGemRGOXpaWEYxWlc1alpWOXNaVzVuZEdnZ0t5QnJkbDl6WlhGMVpXNWpaVjlzWlc1bmRHaGNiaUFnTHk4Z0lDQk9PaUFnSUNCdWRXMWZhR1ZoWkhOY2JpQWdMeThnSUNCSU9pQWdJQ0JvWldGa0lITnBlbVVnWm05eUlGRWdZVzVrSUVzc0lHRnJZU0J4WDJobFlXUmZjMmw2WlNCdmNpQnJYMmhsWVdSZmMybDZaU0J2Y2lCeGExOW9aV0ZrWDNOcGVtVmNiaUFnTHk4Z0lDQklYM1k2SUNCMlgyaGxZV1JmYzJsNlpWeHVJQ0F2THlBZ0lFUmZhVG9nSUdsdWNIVjBJR2hwWkdSbGJpQnphWHBsWEc0Z0lDOHZJQ0FnUkRvZ0lDQWdhR2xrWkdWdUlITnBlbVVnWm05eUlGRWdZVzVrSUVzZ0tFUWdQU0JPSUNvZ1NDa3NJR0ZyWVNCeFgyaHBaR1JsYmw5emFYcGxJRzl5SUd0ZmFHbGtaR1Z1WDNOcGVtVWdiM0lnY1d0ZmFHbGtaR1Z1WDNOcGVtVmNiaUFnTHk4Z0lDQkVYM1k2SUNCMlgyaHBaR1JsYmw5emFYcGxJRDBnYm5WdFgyaGxZV1J6SUNvZ2RsOW9aV0ZrWDNOcGVtVmNibHh1SUNBdkx5QWdJQ0FnYTJWNVgzQmhaR1JwYm1kZmJXRnpheUFvU3k5V0tTQWdJQ0FnT2lBb1Fpa2diM0lnS0RJcVFpQXJJREVwSUc5eUlDaENMQ0JNS1NCdmNpQk9iMjVsWEc0Z0lDOHZJQ0FnSUNCeVpXeGhkR2wyWlY5d2IzTnBkR2x2Ymw5aWFXRnpJQ0FnSUNBNklDaENMQ0F4TENCVExDQk1LVnh1SUNBdkx5QWdJQ0FnY0dGemRGOXJaWGtnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnT2lBb1Fpd2dUaXdnVXlvc0lFZ3BYRzRnSUM4dklDQWdJQ0J3WVhOMFgzWmhiSFZsSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E2SUNoQ0xDQk9MQ0JUS2l3Z1NDbGNiaUFnTHk4Z1YyaGxiaUJ1YnlCd1lXTnJhVzVuSUdadmNpQnhMMnN2ZGpwY2JpQWdMeThnSUNBZ0lIRjFaWEo1SUNBZ0lDQWdJQ0FnSUNBZ0tGRXBJQ0FnSUNBZ0lEb2dLRUlzSUZNc0lFUXBYRzRnSUM4dklDQWdJQ0JyWlhrZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2hMS1NBZ0lDQWdJQ0E2SUNoQ0xDQk1MQ0JFS1NCdmNpQW9RaXdnVGl3Z1V5b3NJRWdwWEc0Z0lDOHZJQ0FnSUNCMllXeDFaU0FnSUNBZ0lDQWdJQ0FnSUNoV0tTQWdJQ0FnSUNBNklDaENMQ0JNTENCRVgzWXBJRzl5SUNoQ0xDQk9MQ0JUS2l3Z1NDbGNiaUFnTHk4Z0lDQWdJR0pwWVhNZ0lDQWdJQ0FnSUNBZ0lDQWdLRkV2U3k5V0tTQWdJRG9nS0VRZ0t5QkVJQ3NnUkY5MktWeHVJQ0F2THlCWGFHVnVJSEJoWTJ0bFpDQnJkaUJwY3lCMWMyVmtPbHh1SUNBdkx5QWdJQ0FnY1hWbGNua2dJQ0FnSUNBZ0lDQWdJQ0FvVVNrZ0lDQWdJQ0FnT2lBb1Fpd2dVeXdnUkNsY2JpQWdMeThnSUNBZ0lHdGxlU0FnSUNBZ0lDQWdJQ0FnSUNBZ0tFc3BJQ0FnSUNBZ0lEb2dLRUlzSUV3c0lFNHNJRElzSUVncFhHNGdJQzh2SUNBZ0lDQjJZV3gxWlNBZ0lDQWdJQ0FnSUNBZ0lDaFdLU0FnSUNBZ0lDQTZJRTV2Ym1WY2JpQWdMeThnSUNBZ0lHSnBZWE1nSUNBZ0lDQWdJQ0FnSUNBZ0tGRXZTeTlXS1NBZ0lEb2dUbTl1WlZ4dUlDQXZMeUJYYUdWdUlIQmhZMnRsWkNCeGEzWWdhWE1nZFhObFpEcGNiaUFnTHk4Z0lDQWdJSEYxWlhKNUlDQWdJQ0FnSUNBZ0lDQWdLRkVwSUNBZ0lDQWdJRG9nS0VJc0lFd3NJRTRzSURNc0lFZ3BJRzl5SUNoQ0xDQlRMQ0F6S2tRcFhHNGdJQzh2SUNBZ0lDQnJaWGtnSUNBZ0lDQWdJQ0FnSUNBZ0lDaExLU0FnSUNBZ0lDQTZJRTV2Ym1WY2JpQWdMeThnSUNBZ0lIWmhiSFZsSUNBZ0lDQWdJQ0FnSUNBZ0tGWXBJQ0FnSUNBZ0lEb2dUbTl1WlZ4dUlDQXZMeUFnSUNBZ1ltbGhjeUFnSUNBZ0lDQWdJQ0FnSUNBb1VTOUxMMVlwSUNBZ09pQk9iMjVsSUc5eUlDaEVJQ3NnUkNBcklFUmZkaWxjYmx4dUlDQnBaaUFvY1hWbGNua3VaR2x0Y3k1c1pXNW5kR2dnSVQwOUlETWdKaVlnY1hWbGNua3VaR2x0Y3k1c1pXNW5kR2dnSVQwOUlEVXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owbHVjSFYwSUhGMVpYSjVJR2x6SUdWNGNHVmpkR1ZrSUhSdklHaGhkbVVnTXlCdmNpQTFJR1JwYldWdWMybHZibk1uS1R0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUdSdGJXaGhVR0ZqYTJsdVp5QTlJR1poYkhObE8xeHVJQ0JqYjI1emRDQmlZWFJqYUZOcGVtVWdQU0J4ZFdWeWVTNWthVzF6V3pCZE8xeHVJQ0JqYjI1emRDQnpaWEYxWlc1alpVeGxibWQwYUNBOUlIRjFaWEo1TG1ScGJYTmJNVjA3WEc0Z0lHTnZibk4wSUdocFpHUmxibE5wZW1VZ1BTQnhkV1Z5ZVM1a2FXMXpMbXhsYm1kMGFDQTlQVDBnTXlBL0lDaGtiVzFvWVZCaFkydHBibWNnUHlCeGRXVnllUzVrYVcxeld6SmRJQzhnTXlBNklIRjFaWEo1TG1ScGJYTmJNbDBwSURwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZWFIwY21saWRYUmxjeTV1ZFcxSVpXRmtjeUFxSUhGMVpYSjVMbVJwYlhOYk5GMDdYRzRnSUd4bGRDQnJkbE5sY1hWbGJtTmxUR1Z1WjNSb0lEMGdjMlZ4ZFdWdVkyVk1aVzVuZEdnN1hHNWNiaUFnYkdWMElIQmhjM1JUWlhGMVpXNWpaVXhsYm1kMGFDQTlJREE3WEc0Z0lHeGxkQ0J0WVhoVFpYRjFaVzVqWlV4bGJtZDBhQ0E5SURBN1hHNGdJR052Ym5OMElHaGxZV1JUYVhwbElEMGdUV0YwYUM1bWJHOXZjaWhvYVdSa1pXNVRhWHBsSUM4Z1lYUjBjbWxpZFhSbGN5NXVkVzFJWldGa2N5azdYRzRnSUdsbUlDaHdZWE4wUzJWNUlDWW1JSEJoYzNSV1lXeDFaU2tnZTF4dUlDQWdJR2xtSUNod1lYTjBTMlY1TG1ScGJYTXViR1Z1WjNSb0lDRTlQU0EwS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBsdWNIVjBJRndpY0dGemRGOXJaWGxjSWlCcGN5QmxlSEJsWTNSbFpDQjBieUJvWVhabElEUWdaR2x0Wlc1emFXOXVjeWNwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvY0dGemRFdGxlUzVrYVcxeld6QmRJQ0U5UFNCaVlYUmphRk5wZW1VZ2ZId2djR0Z6ZEV0bGVTNWthVzF6V3pGZElDRTlQU0JoZEhSeWFXSjFkR1Z6TG01MWJVaGxZV1J6SUh4OElIQmhjM1JMWlhrdVpHbHRjMXN6WFNBaFBUMGdhR1ZoWkZOcGVtVXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25TVzV3ZFhRZ1hDSndZWE4wWDJ0bGVWd2lJSE5vWVhCbElDaGlZWFJqYUY5emFYcGxMQ0J1ZFcxZmFHVmhaSE1zSUhCaGMzUmZjMlZ4ZFdWdVkyVmZiR1Z1WjNSb0xDQm9aV0ZrWDNOcGVtVXBKeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2h3WVhOMFZtRnNkV1V1WkdsdGMxc3dYU0FoUFQwZ1ltRjBZMmhUYVhwbElIeDhJSEJoYzNSV1lXeDFaUzVrYVcxeld6RmRJQ0U5UFNCaGRIUnlhV0oxZEdWekxtNTFiVWhsWVdSeklIeDhYRzRnSUNBZ0lDQWdJSEJoYzNSV1lXeDFaUzVrYVcxeld6TmRJQ0U5UFNCb1pXRmtVMmw2WlNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkSmJuQjFkQ0JjSW5CaGMzUmZkbUZzZFdWY0lpQnphR0Z3WlNBb1ltRjBZMmhmYzJsNlpTd2diblZ0WDJobFlXUnpMQ0J3WVhOMFgzTmxjWFZsYm1ObFgyeGxibWQwYUN3Z2FHVmhaRjl6YVhwbEtTY3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9jR0Z6ZEV0bGVTNWthVzF6V3pKZElDRTlQU0J3WVhOMFZtRnNkV1V1WkdsdGMxc3lYU2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RKYm5CMWRDQmNJbkJoYzNSZmEyVjVYQ0lnWVc1a0lGd2ljR0Z6ZEY5MllXeDFaVndpSUhOb1lXeHNJR2hoZG1VZ2MyRnRaU0JrYVcwZ01pQW9jR0Z6ZEY5elpYRjFaVzVqWlY5c1pXNW5kR2dwSnlrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNod1lYTjBWbUZzZFdVdVpHbHRjeTVzWlc1bmRHZ2dJVDA5SURRcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblNXNXdkWFFnWENKd1lYTjBYM1poYkhWbFhDSWdhWE1nWlhod1pXTjBaV1FnZEc4Z2FHRjJaU0EwSUdScGJXVnVjMmx2Ym5NbktUdGNiaUFnSUNCOVhHNGdJQ0FnY0dGemRGTmxjWFZsYm1ObFRHVnVaM1JvSUQwZ2NHRnpkRXRsZVM1a2FXMXpXekpkTzF4dUlDQWdJRzFoZUZObGNYVmxibU5sVEdWdVozUm9JRDBnY0dGemRFdGxlUzVrYVcxeld6SmRPMXh1SUNCOUlHVnNjMlVnYVdZZ0tIQmhjM1JMWlhrZ2ZId2djR0Z6ZEZaaGJIVmxLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpibkIxZENCY0luQmhjM1JmYTJWNVhDSWdZVzVrSUZ3aWNHRnpkRjkyWVd4MVpWd2lJSE5vWVd4c0lHSmxJR0p2ZEdnZ2NISmxjMlZ1ZENCdmNpQmliM1JvSUdGaWMyVnVkQ2NwTzF4dUlDQjlYRzVjYmlBZ2JHVjBJSEZyZGtadmNtMWhkRG9nUVhSMFpXNTBhVzl1VVd0MlJtOXliV0YwTzF4dUlDQnBaaUFvYTJWNUtTQjdYRzRnSUNBZ2FXWWdLSEYxWlhKNUxtUnBiWE11YkdWdVozUm9JQ0U5UFNBektTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owbHVjSFYwSUZ3aWNYVmxjbmxjSWlCcGN5QmxlSEJsWTNSbFpDQjBieUJvWVhabElETWdaR2x0Wlc1emFXOXVjeUIzYUdWdUlHdGxlU0JwY3lCbmFYWmxiaWNwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvYTJWNUxtUnBiWE11YkdWdVozUm9JRHdnTXlCOGZDQnJaWGt1WkdsdGN5NXNaVzVuZEdnZ1BpQTFLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1Y0hWMElGd2lhMlY1WENJZ2FYTWdaWGh3WldOMFpXUWdkRzhnYUdGMlpTQXpMQ0EwTENCdmNpQTFJR1JwYldWdWMybHZibk1uS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hGMVpYSjVMbVJwYlhOYk1GMGdJVDA5SUd0bGVTNWthVzF6V3pCZEtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owbHVjSFYwSUZ3aWNYVmxjbmxjSWlCaGJtUWdYQ0pyWlhsY0lpQnphR0ZzYkNCb1lYWmxJSE5oYldVZ1pHbHRJREFnS0dKaGRHTm9JSE5wZW1VcEp5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLR3RsZVM1a2FXMXpMbXhsYm1kMGFDQTlQVDBnTXlrZ2UxeHVJQ0FnSUNBZ2FXWWdLR3RsZVM1a2FXMXpXekpkSUNFOVBTQnhkV1Z5ZVM1a2FXMXpXekpkS1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblNXNXdkWFFnWENKeGRXVnllVndpSUdGdVpDQmNJbXRsZVZ3aUlITm9ZV3hzSUdoaGRtVWdjMkZ0WlNCa2FXMGdNaUFvYUdsa1pHVnVYM05wZW1VcEp5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnhhM1pHYjNKdFlYUWdQU0JCZEhSbGJuUnBiMjVSYTNaR2IzSnRZWFF1Y1d0MlFsTk9TRHRjYmlBZ0lDQWdJR3QyVTJWeGRXVnVZMlZNWlc1bmRHZ2dQU0JyWlhrdVpHbHRjMXN4WFR0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0d0bGVTNWthVzF6TG14bGJtZDBhQ0E5UFQwZ05Ta2dlMXh1SUNBZ0lDQWdhV1lnS0d0bGVTNWthVzF6V3pKZElDRTlQU0JoZEhSeWFXSjFkR1Z6TG01MWJVaGxZV1J6SUh4OElHdGxlUzVrYVcxeld6TmRJQ0U5UFNBeUlIeDhJR3RsZVM1a2FXMXpXelJkSUNFOVBTQm9aV0ZrVTJsNlpTa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFY0Y0dWamRDQmNJbXRsZVZ3aUlITm9ZWEJsSUNoaVlYUmphRjl6YVhwbExDQnJkbDl6WlhGMVpXNWpaVjlzWlc1bmRHZ3NJRzUxYlY5b1pXRmtjeXdnTWl3Z2FHVmhaRjl6YVhwbEtTQm1iM0lnY0dGamEyVmtJR3QySnlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9kbUZzZFdVcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEZlSEJsWTNRZ1hDSjJZV3gxWlZ3aUlHSmxJRzV2Ym1VZ2QyaGxiaUJjSW10bGVWd2lJR2hoY3lCd1lXTnJaV1FnYTNZZ1ptOXliV0YwTGljcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2NXdDJSbTl5YldGMElEMGdRWFIwWlc1MGFXOXVVV3QyUm05eWJXRjBMbkZMZGtKVFRraDRRbE5PTWtnN1hHNGdJQ0FnSUNCcmRsTmxjWFZsYm1ObFRHVnVaM1JvSUQwZ2EyVjVMbVJwYlhOYk1WMDdYRzRnSUNBZ2ZTQmxiSE5sSUhzZ0lDOHZJR3RsZVY5a2FXMXpMbk5wZW1Vb0tTQTlQU0EwSUNoamNtOXpjeTFoZEhSbGJuUnBiMjRnZDJsMGFDQndZWE4wWDJ0bGVTbGNiaUFnSUNBZ0lHbG1JQ2hyWlhrdVpHbHRjMXN4WFNBaFBUMGdZWFIwY21saWRYUmxjeTV1ZFcxSVpXRmtjeUI4ZkNCclpYa3VaR2x0YzFzelhTQWhQVDBnYUdWaFpGTnBlbVVwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkRmVIQmxZM1FnWENKclpYbGNJaUJ6YUdGd1pTQW9ZbUYwWTJoZmMybDZaU3dnYm5WdFgyaGxZV1J6TENCcmRsOXpaWEYxWlc1alpWOXNaVzVuZEdnc0lHaGxZV1JmYzJsNlpTa2dabTl5SUhCaGMzUmZhMlY1SnlrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIRnJka1p2Y20xaGRDQTlJRUYwZEdWdWRHbHZibEZyZGtadmNtMWhkQzUxYm10dWIzZHVPMXh1SUNBZ0lDQWdhM1pUWlhGMVpXNWpaVXhsYm1kMGFDQTlJR3RsZVM1a2FXMXpXekpkTzF4dUlDQWdJSDFjYmlBZ2ZTQmxiSE5sSUhzZ0lDOHZJSEJoWTJ0bFpDQlJTMVpjYmlBZ0lDQnBaaUFvY1hWbGNua3VaR2x0Y3k1c1pXNW5kR2dnSVQwOUlETWdKaVlnY1hWbGNua3VaR2x0Y3k1c1pXNW5kR2dnSVQwOUlEVXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25TVzV3ZFhRZ1hDSnhkV1Z5ZVZ3aUlHbHpJR1Y0Y0dWamRHVmtJSFJ2SUdoaGRtVWdNeUJ2Y2lBMUlHUnBiV1Z1YzJsdmJuTWdkMmhsYmlCclpYa2dhWE1nWlcxd2RIa25LVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSEYxWlhKNUxtUnBiWE11YkdWdVozUm9JRDA5UFNBMUlDWW1JQ2h4ZFdWeWVTNWthVzF6V3pKZElDRTlQU0JoZEhSeWFXSjFkR1Z6TG01MWJVaGxZV1J6SUh4OElIRjFaWEo1TG1ScGJYTmJNMTBnSVQwOUlETXBLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFY0Y0dWamRDQmNJbkYxWlhKNVhDSWdjMmhoY0dVZ0tHSmhkR05vWDNOcGVtVXNJR3QyWDNObGNYVmxibU5sWDJ4bGJtZDBhQ3dnYm5WdFgyaGxZV1J6TENBekxDQm9aV0ZrWDNOcGVtVXBJR1p2Y2lCd1lXTnJaV1FnYTNZbktUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeGEzWkdiM0p0WVhRZ1BTQkJkSFJsYm5ScGIyNVJhM1pHYjNKdFlYUXVjV3QyUWxOT00wZzdYRzRnSUgxY2JseHVJQ0JwWmlBb1ltbGhjeWtnZTF4dUlDQWdJR2xtSUNoaWFXRnpMbVJwYlhNdWJHVnVaM1JvSUNFOVBTQXhLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1Y0hWMElGd2lZbWxoYzF3aUlHbHpJR1Y0Y0dWamRHVmtJSFJ2SUdoaGRtVWdNU0JrYVcxbGJuTnBiMjRuS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2RtRnNkV1VwSUh0Y2JpQWdJQ0FnSUdsbUlDaHhkV1Z5ZVM1a2FXMXpMbXhsYm1kMGFDQTlQVDBnTlNBbUppQnhkV1Z5ZVM1a2FXMXpXek5kSUQwOVBTQXlLU0I3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduWW1saGN5QnBjeUJ1YjNRZ1lXeHNiM2RsWkNCbWIzSWdjR0ZqYTJWa0lHdDJMaWNwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUd4bGRDQnRZWE5yVkhsd1pUb2dRWFIwWlc1MGFXOXVUV0Z6YTFSNWNHVWdQU0JCZEhSbGJuUnBiMjVOWVhOclZIbHdaUzV1YjI1bE8xeHVJQ0JwWmlBb2EyVjVVR0ZrWkdsdVowMWhjMnNwSUh0Y2JpQWdJQ0J0WVhOclZIbHdaU0E5SUVGMGRHVnVkR2x2YmsxaGMydFVlWEJsTG0xaGMydFZibXR1YjNkdU8xeHVJQ0FnSUdOdmJuTjBJRzFoYzJ0RWFXMXpJRDBnYTJWNVVHRmtaR2x1WjAxaGMyc3VaR2x0Y3p0Y2JpQWdJQ0JwWmlBb2JXRnphMFJwYlhNdWJHVnVaM1JvSUQwOVBTQXhLU0I3WEc0Z0lDQWdJQ0JwWmlBb2JXRnphMFJwYlhOYk1GMGdQVDA5SUdKaGRHTm9VMmw2WlNrZ2UxeHVJQ0FnSUNBZ0lDQnRZWE5yVkhsd1pTQTlJRUYwZEdWdWRHbHZiazFoYzJ0VWVYQmxMbTFoYzJzeFpFdGxlVk5sY1V4bGJqdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9iV0Z6YTBScGJYTmJNRjBnUFQwOUlETWdLaUJpWVhSamFGTnBlbVVnS3lBeUtTQjdYRzRnSUNBZ0lDQWdJRzFoYzJ0VWVYQmxJRDBnUVhSMFpXNTBhVzl1VFdGemExUjVjR1V1YldGemF6RkVTMlY1VTJWeFRHVnVVM1JoY25RN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNodFlYTnJSR2x0Y3k1c1pXNW5kR2dnUFQwOUlESWdKaVlnYldGemEwUnBiWE5iTUYwZ1BUMDlJR0poZEdOb1UybDZaU0FtSmlCdFlYTnJSR2x0YzFzeFhTQTlQVDBnYTNaVFpYRjFaVzVqWlV4bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnYldGemExUjVjR1VnUFNCQmRIUmxiblJwYjI1TllYTnJWSGx3WlM1dFlYTnJNbVJMWlhsUVlXUmthVzVuTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvYldGemExUjVjR1VnUFQwOUlFRjBkR1Z1ZEdsdmJrMWhjMnRVZVhCbExtMWhjMnRWYm10dWIzZHVLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1Y0hWMElGd2lhMlY1WDNCaFpHUnBibWRmYldGemExd2lJSE5vWVhCbElITm9ZV3hzSUdKbElDaGlZWFJqYUY5emFYcGxLU0J2Y2lBb1ltRjBZMmhmYzJsNlpTd2dhM1pmYzJWeGRXVnVZMlZmYkdWdVozUm9LU2NwTzF4dUlDQWdJSDFjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owMWhjMnNnYm05MElITjFjSEJ2Y25SbFpDY3BPMXh1SUNCOVhHNWNiaUFnYkdWMElIQmhjM05RWVhOMFNXNUxkaUE5SUdaaGJITmxPMXh1SUNCc1pYUWdka2hwWkdSbGJsTnBlbVVnUFNCb2FXUmtaVzVUYVhwbE8xeHVJQ0JwWmlBb2RtRnNkV1VwSUh0Y2JpQWdJQ0JwWmlBb2RtRnNkV1V1WkdsdGN5NXNaVzVuZEdnZ0lUMDlJRE1nSmlZZ2RtRnNkV1V1WkdsdGN5NXNaVzVuZEdnZ0lUMDlJRFFwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduU1c1d2RYUWdYQ0oyWVd4MVpWd2lJR2x6SUdWNGNHVmpkR1ZrSUhSdklHaGhkbVVnTXlCdmNpQTBJR1JwYldWdWMybHZibk1uS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2NYVmxjbmt1WkdsdGMxc3dYU0FoUFQwZ2RtRnNkV1V1WkdsdGMxc3dYU2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RKYm5CMWRDQmNJbkYxWlhKNVhDSWdZVzVrSUZ3aWRtRnNkV1ZjSWlCemFHRnNiQ0JvWVhabElITmhiV1VnWkdsdElEQWdLR0poZEdOb1gzTnBlbVVwSnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tIWmhiSFZsTG1ScGJYTXViR1Z1WjNSb0lEMDlQU0F6S1NCN1hHNGdJQ0FnSUNCcFppQW9hM1pUWlhGMVpXNWpaVXhsYm1kMGFDQWhQVDBnZG1Gc2RXVXVaR2x0YzFzeFhTa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1Y0hWMElGd2lhMlY1WENJZ1lXNWtJRndpZG1Gc2RXVmNJaUJ6YUdGc2JDQm9ZWFpsSUhSb1pTQnpZVzFsSUdScGJTQXhJQ2hyZGw5elpYRjFaVzVqWlY5c1pXNW5kR2dwSnlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCMlNHbGtaR1Z1VTJsNlpTQTlJSFpoYkhWbExtUnBiWE5iTWwwN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR2xtSUNocmRsTmxjWFZsYm1ObFRHVnVaM1JvSUNFOVBTQjJZV3gxWlM1a2FXMXpXekpkS1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblNXNXdkWFFnWENKd1lYTjBYMnRsZVZ3aUlHRnVaQ0JjSW5CaGMzUmZkbUZzZFdWY0lpQnphR0ZzYkNCb1lYWmxJSFJvWlNCellXMWxJR1JwYlNBeUlDaHJkbDl6WlhGMVpXNWpaVjlzWlc1bmRHZ3BKeWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IyU0dsa1pHVnVVMmw2WlNBOUlIWmhiSFZsTG1ScGJYTmJNVjBnS2lCMllXeDFaUzVrYVcxeld6TmRPMXh1SUNBZ0lDQWdjR0Z6YzFCaGMzUkpia3QySUQwZ2RISjFaVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JqYjI1emRDQjBiM1JoYkZObGNYVmxibU5sVEdWdVozUm9JRDBnY0dGemRGTmxjWFZsYm1ObFRHVnVaM1JvSUNzZ2EzWlRaWEYxWlc1alpVeGxibWQwYUR0Y2JpQWdZMjl1YzNRZ1luSnZZV1JqWVhOMFVtVnpVRzl6UW1saGN5QTlJR1poYkhObE8xeHVYRzRnSUdsbUlDaHJaWGxRWVdSa2FXNW5UV0Z6YXlrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduUzJWNUlIQmhaR1JwYm1jZ2JXRnpheUJwY3lCdWIzUWdjM1Z3Y0c5eWRHVmtKeWs3WEc0Z0lIMWNibHh1SUNCcFppQW9jbVZzWVhScGRtVlFiM05wZEdsdmJrSnBZWE1wSUh0Y2JpQWdJQ0JwWmlBb2NtVnNZWFJwZG1WUWIzTnBkR2x2YmtKcFlYTXVaR2x0Y3k1c1pXNW5kR2dnSVQwOUlEUXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25TVzV3ZFhRZ1hDSnlaV3hoZEdsMlpWOXdiM05wZEdsdmJsOWlhV0Z6WENJZ2FYTWdaWGh3WldOMFpXUWdkRzhnYUdGMlpTQTBJR1JwYldWdWMybHZibk1uS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0NoeVpXeGhkR2wyWlZCdmMybDBhVzl1UW1saGN5NWthVzF6V3pCZElDRTlQU0JpWVhSamFGTnBlbVVnSmlZZ2NtVnNZWFJwZG1WUWIzTnBkR2x2YmtKcFlYTXVaR2x0YzFzd1hTQWhQVDBnTVNrZ2ZIeGNiaUFnSUNBZ0lDQWdjbVZzWVhScGRtVlFiM05wZEdsdmJrSnBZWE11WkdsdGMxc3hYU0FoUFQwZ1lYUjBjbWxpZFhSbGN5NXVkVzFJWldGa2N5QjhmQ0J5Wld4aGRHbDJaVkJ2YzJsMGFXOXVRbWxoY3k1a2FXMXpXekpkSUNFOVBTQnpaWEYxWlc1alpVeGxibWQwYUNCOGZGeHVJQ0FnSUNBZ0lDQnlaV3hoZEdsMlpWQnZjMmwwYVc5dVFtbGhjeTVrYVcxeld6TmRJQ0U5UFNCMGIzUmhiRk5sY1hWbGJtTmxUR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owbHVjSFYwSUZ3aWNtVnNZWFJwZG1WZmNHOXphWFJwYjI1ZlltbGhjMXdpSUhOb1lYQmxJQ2hpWVhSamFGOXphWHBsTENBeExDQnpaWEYxWlc1alpWOXNaVzVuZEdnc0lHdDJYM05sY1hWbGJtTmxYMnhsYm1kMGFDa25LVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lHSmhkR05vVTJsNlpTeGNiaUFnSUNCelpYRjFaVzVqWlV4bGJtZDBhQ3hjYmlBZ0lDQndZWE4wVTJWeGRXVnVZMlZNWlc1bmRHZ3NYRzRnSUNBZ2EzWlRaWEYxWlc1alpVeGxibWQwYUN4Y2JpQWdJQ0IwYjNSaGJGTmxjWFZsYm1ObFRHVnVaM1JvTEZ4dUlDQWdJRzFoZUZObGNYVmxibU5sVEdWdVozUm9MRnh1SUNBZ0lHbHVjSFYwU0dsa1pHVnVVMmw2WlRvZ01DeGNiaUFnSUNCb2FXUmtaVzVUYVhwbExGeHVJQ0FnSUhaSWFXUmtaVzVUYVhwbExGeHVJQ0FnSUdobFlXUlRhWHBsTEZ4dUlDQWdJSFpJWldGa1UybDZaVG9nVFdGMGFDNW1iRzl2Y2loMlNHbGtaR1Z1VTJsNlpTQXZJR0YwZEhKcFluVjBaWE11Ym5WdFNHVmhaSE1wTEZ4dUlDQWdJRzUxYlVobFlXUnpPaUJoZEhSeWFXSjFkR1Z6TG01MWJVaGxZV1J6TEZ4dUlDQWdJR2x6Vlc1cFpHbHlaV04wYVc5dVlXdzZJR1poYkhObExGeHVJQ0FnSUhCaGMzUlFjbVZ6Wlc1MFUyaGhjbVZDZFdabVpYSTZJR1poYkhObExGeHVJQ0FnSUcxaGMydEdhV3gwWlhKV1lXeDFaVG9nWVhSMGNtbGlkWFJsY3k1dFlYTnJSbWxzZEdWeVZtRnNkV1VzWEc0Z0lDQWdiV0Z6YTFSNWNHVXNYRzRnSUNBZ2MyTmhiR1U2SUdGMGRISnBZblYwWlhNdWMyTmhiR1VzWEc0Z0lDQWdZbkp2WVdSallYTjBVbVZ6VUc5elFtbGhjeXhjYmlBZ0lDQndZWE56VUdGemRFbHVTM1lzWEc0Z0lDQWdjV3QyUm05eWJXRjBMRnh1SUNCOU8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSEJoY25ObFRYVnNkR2xJWldGa1FYUjBaVzUwYVc5dVFYUjBjbWxpZFhSbGN5QTlJQ2hoZEhSeWFXSjFkR1Z6T2lCQmRIUmxiblJwYjI1QmRIUnljeWs2SUVGMGRHVnVkR2x2YmtGMGRISnpJRDArWEc0Z0lDQWdZM0psWVhSbFFYUjBjbWxpZFhSbFYybDBhRU5oWTJobFMyVjVLSHN1TGk1aGRIUnlhV0oxZEdWemZTazdYRzVjYm1OdmJuTjBJSGRsYVdkb2RGUnlZVzV6Y0c5elpVRjBkSEpwWW5WMFpUb2dWSEpoYm5Od2IzTmxRWFIwY21saWRYUmxjeUE5SUdOeVpXRjBaVUYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVNoN2NHVnliVG9nV3pBc0lESXNJREVzSUROZGZTazdYRzVjYm1OdmJuTjBJR0ZrWkVKcFlYTlVjbUZ1YzNCdmMyVWdQVnh1SUNBZ0lDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z2NXdDJPaUJVWlc1emIzSldhV1YzTENCaWFXRnpPaUJVWlc1emIzSldhV1YzTENCaVlYUmphRk5wZW1VNklHNTFiV0psY2l3Z2MyVnhkV1Z1WTJWTVpXNW5kR2c2SUc1MWJXSmxjaXhjYmlBZ0lDQWdhR2xrWkdWdVUybDZaVG9nYm5WdFltVnlMQ0JpYVdGelQyWm1jMlYwT2lCdWRXMWlaWElwSUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUc5MWRIQjFkRk5vWVhCbElEMGdXMkpoZEdOb1UybDZaU3dnYzJWeGRXVnVZMlZNWlc1bmRHZ3NJR2hwWkdSbGJsTnBlbVZkTzF4dUlDQWdJQ0FnWTI5dWMzUWdiM1YwY0hWMFUybDZaU0E5SUZOb1lYQmxWWFJwYkM1emFYcGxLRzkxZEhCMWRGTm9ZWEJsS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ5YjJkeVlXMVZibWxtYjNKdGN6b2dVSEp2WjNKaGJWVnVhV1p2Y20xYlhTQTlJRnRjYmlBZ0lDQWdJQ0FnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2IzVjBjSFYwVTJsNlpYMHNJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUdKcFlYTlBabVp6WlhSOUxGeHVJQ0FnSUNBZ0lDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJvYVdSa1pXNVRhWHBsZlZ4dUlDQWdJQ0FnWFR0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxJRDBnS0hOb1lXUmxja2hsYkhCbGNqb2dVMmhoWkdWeVNHVnNjR1Z5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHOTFkSEIxZENBOUlHOTFkSEIxZEZaaGNtbGhZbXhsS0NkeGEzWmZkMmwwYUY5aWFXRnpKeXdnY1d0MkxtUmhkR0ZVZVhCbExDQnZkWFJ3ZFhSVGFHRndaU2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEZyZGtsdWNIVjBJRDBnYVc1d2RYUldZWEpwWVdKc1pTZ25jV3QySnl3Z2NXdDJMbVJoZEdGVWVYQmxMQ0J2ZFhSd2RYUlRhR0Z3WlNrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdKcFlYTkpibkIxZENBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjJKcFlYTW5MQ0JpYVdGekxtUmhkR0ZVZVhCbExDQnZkWFJ3ZFhSVGFHRndaU2s3WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZFc1cFptOXliWE02SUZWdWFXWnZjbTF6UVhKeVlYbFVlWEJsSUQwZ1cxeHVJQ0FnSUNBZ0lDQWdJSHR1WVcxbE9pQW5iM1YwY0hWMFgzTnBlbVVuTENCMGVYQmxPaUFuZFRNeUozMHNJSHR1WVcxbE9pQW5ZbWxoYzE5dlptWnpaWFFuTENCMGVYQmxPaUFuZFRNeUozMHNJSHR1WVcxbE9pQW5hR2xrWkdWdVgzTnBlbVVuTENCMGVYQmxPaUFuZFRNeUozMWNiaUFnSUNBZ0lDQWdYVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR0JjYmlBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1Y21WbmFYTjBaWEpWYm1sbWIzSnRjeWgxYm1sbWIzSnRjeWt1WkdWamJHRnlaVlpoY21saFlteGxjeWh4YTNaSmJuQjFkQ3dnWW1saGMwbHVjSFYwTENCdmRYUndkWFFwZlZ4dUlDQWtlM05vWVdSbGNraGxiSEJsY2k1dFlXbHVVM1JoY25Rb0tYMWNiaUFnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTVuZFdGeVpFRm5ZV2x1YzNSUGRYUlBaa0p2ZFc1a2MxZHZjbXRuY205MWNGTnBlbVZ6S0NkMWJtbG1iM0p0Y3k1dmRYUndkWFJmYzJsNlpTY3BmVnh1SUNBZ0lHeGxkQ0JpYVdGelgyOW1abk5sZEY5cFpIZ2dQU0FvWjJ4dlltRnNYMmxrZUNBbElIVnVhV1p2Y20xekxtaHBaR1JsYmw5emFYcGxLU0FySUhWdWFXWnZjbTF6TG1KcFlYTmZiMlptYzJWME8xeHVYRzRnSUNBZ2NXdDJYM2RwZEdoZlltbGhjMXRuYkc5aVlXeGZhV1I0WFNBOUlIRnJkbHRuYkc5aVlXeGZhV1I0WFNBcklHSnBZWE5iWW1saGMxOXZabVp6WlhSZmFXUjRYVHRjYmlBZ2ZXQTdYRzRnSUNBZ0lDQjlPMXh1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZMjl1ZEdWNGRDNWpiMjF3ZFhSbEtGeHVJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHNWhiV1U2SUNkTmRXeDBhVWhsWVdSQmRIUmxiblJwYjI1QlpHUkNhV0Z6Snl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5vWVdSbGNrTmhZMmhsT2lCN2FXNXdkWFJFWlhCbGJtUmxibU5wWlhNNklGc25kSGx3WlNjc0lDZDBlWEJsSjExOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWjJWMFVuVnVSR0YwWVRvZ0tDa2dQVDRnS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYjNWMGNIVjBjem9nVzN0a2FXMXpPaUJ2ZFhSd2RYUlRhR0Z3WlN3Z1pHRjBZVlI1Y0dVNklIRnJkaTVrWVhSaFZIbHdaU3dnWjNCMVJHRjBZVlI1Y0dVNklFZHdkVVJoZEdGVWVYQmxMbVJsWm1GMWJIUjlYU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdaR2x6Y0dGMFkyaEhjbTkxY0RvZ2UzZzZJRTFoZEdndVkyVnBiQ2h2ZFhSd2RYUlRhWHBsSUM4Z05qUWdMeW9nZDI5eWEyZHliM1Z3SUhOcGVtVWdLaThwZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY0hKdlozSmhiVlZ1YVdadmNtMXpYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU3hjYmlBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJSHRwYm5CMWRITTZJRnR4YTNZc0lHSnBZWE5kTENCdmRYUndkWFJ6T2lCYkxURmRmU2xiTUYwN1hHNGdJQ0FnZlR0Y2JseHVZMjl1YzNRZ2JXRjVZbVZVY21GdWMzQnZjMlZVYjBKT1UwaEJibVJCWkdSQ2FXRnpJRDFjYmlBZ0lDQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHSmhkR05vVTJsNlpUb2diblZ0WW1WeUxDQnVkVzFJWldGa2N6b2diblZ0WW1WeUxDQnpaWEYxWlc1alpVeGxibWQwYURvZ2JuVnRZbVZ5TENCb1pXRmtVMmw2WlRvZ2JuVnRZbVZ5TEZ4dUlDQWdJQ0JwYm5CMWREb2dWR1Z1YzI5eVZtbGxkeXdnWW1saGN6ODZJRlJsYm5OdmNsWnBaWGNzSUdKcFlYTlBabVp6WlhRL09pQnVkVzFpWlhJcElEMCtJSHRjYmlBZ0lDQWdJQzh2SUdOdmJuTjBJRzVsZDBScGJYTWdQU0JiWFR0Y2JseHVJQ0FnSUNBZ2JHVjBJSEpsYzJoaGNHVmtTVzV3ZFhRZ1BTQnBibkIxZER0Y2JpQWdJQ0FnSUdsbUlDZ2hZbWxoY3lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYVc1d2RYUXVaR2x0Y3k1c1pXNW5kR2dnUFQwOUlETXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYTm9ZWEJsWkVsdWNIVjBJRDBnYVc1d2RYUXVjbVZ6YUdGd1pTaGJZbUYwWTJoVGFYcGxMQ0J6WlhGMVpXNWpaVXhsYm1kMGFDd2diblZ0U0dWaFpITXNJR2hsWVdSVGFYcGxYU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnlaV0YwWlZSeVlXNXpjRzl6WlZCeWIyZHlZVzFKYm1adktISmxjMmhoY0dWa1NXNXdkWFFzSUhkbGFXZG9kRlJ5WVc1emNHOXpaVUYwZEhKcFluVjBaUzV3WlhKdEtTeGNiaUFnSUNBZ0lDQWdJQ0FnSUh0cGJuQjFkSE02SUZ0eVpYTm9ZWEJsWkVsdWNIVjBYU3dnYjNWMGNIVjBjem9nV3kweFhYMHBXekJkTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tITmxjWFZsYm1ObFRHVnVaM1JvSUQwOVBTQXhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkQlpHUkNhV0Z6VW1WemFHRndaU0JwY3lCdWIzUWdhVzF3YkdWdFpXNTBaV1F1SUZCc1pXRnpaU0JsZUhCdmNuUWdlVzkxY2lCdGIyUmxiQ0IzYVhSb0lIQmhZMnRsWkNCUlMxWWdiM0lnUzFZbktUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0J5WlhOb1lYQmxaRWx1Y0hWMElEMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1lXUmtRbWxoYzFSeVlXNXpjRzl6WlNoamIyNTBaWGgwTENCcGJuQjFkQ3dnWW1saGN5d2dZbUYwWTJoVGFYcGxMQ0J6WlhGMVpXNWpaVXhsYm1kMGFDd2diblZ0U0dWaFpITWdLaUJvWldGa1UybDZaU3dnWW1saGMwOW1abk5sZENFcE8xeHVJQ0FnSUNBZ0lDQWdJSEpsYzJoaGNHVmtTVzV3ZFhRZ1BTQnlaWE5vWVhCbFpFbHVjSFYwTG5KbGMyaGhjR1VvVzJKaGRHTm9VMmw2WlN3Z2MyVnhkV1Z1WTJWTVpXNW5kR2dzSUc1MWJVaGxZV1J6TENCb1pXRmtVMmw2WlYwcE8xeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmpiMjUwWlhoMExtTnZiWEIxZEdVb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdOeVpXRjBaVlJ5WVc1emNHOXpaVkJ5YjJkeVlXMUpibVp2S0hKbGMyaGhjR1ZrU1c1d2RYUXNJSGRsYVdkb2RGUnlZVzV6Y0c5elpVRjBkSEpwWW5WMFpTNXdaWEp0S1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZTJsdWNIVjBjem9nVzNKbGMyaGhjR1ZrU1c1d2RYUmRMQ0J2ZFhSd2RYUnpPaUJiTFRGZGZTbGJNRjA3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYlhWc2RHbElaV0ZrUVhSMFpXNTBhVzl1SUQwZ0tHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwTENCaGRIUnlhV0oxZEdWek9pQkJkSFJsYm5ScGIyNUJkSFJ5Y3lrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JqYjI1emRDQndZWEpoYlhNZ1BTQjJZV3hwWkdGMFpVbHVjSFYwY3loamIyNTBaWGgwTG1sdWNIVjBjeXdnWVhSMGNtbGlkWFJsY3lrN1hHNGdJR052Ym5OMElIRjFaWEo1SUQwZ1kyOXVkR1Y0ZEM1cGJuQjFkSE5iTUYwN1hHNGdJR052Ym5OMElHdGxlU0E5SUdkbGRFbHVjSFYwS0dOdmJuUmxlSFF1YVc1d2RYUnpMQ0F4S1R0Y2JpQWdZMjl1YzNRZ2RtRnNkV1VnUFNCblpYUkpibkIxZENoamIyNTBaWGgwTG1sdWNIVjBjeXdnTWlrN1hHNGdJR052Ym5OMElHSnBZWE1nUFNCblpYUkpibkIxZENoamIyNTBaWGgwTG1sdWNIVjBjeXdnTXlrN1hHNGdJR052Ym5OMElHdGxlVkJoWkdScGJtZE5ZWE5ySUQwZ1oyVjBTVzV3ZFhRb1kyOXVkR1Y0ZEM1cGJuQjFkSE1zSURRcE8xeHVJQ0JqYjI1emRDQnlaV3hoZEdsMlpWQnZjMmwwYVc5dVFtbGhjeUE5SUdkbGRFbHVjSFYwS0dOdmJuUmxlSFF1YVc1d2RYUnpMQ0ExS1R0Y2JpQWdZMjl1YzNRZ2NHRnpkRXRsZVNBOUlHZGxkRWx1Y0hWMEtHTnZiblJsZUhRdWFXNXdkWFJ6TENBMktUdGNiaUFnWTI5dWMzUWdjR0Z6ZEZaaGJIVmxJRDBnWjJWMFNXNXdkWFFvWTI5dWRHVjRkQzVwYm5CMWRITXNJRGNwTzF4dUlDQnBaaUFvY1hWbGNua3VaR2x0Y3k1c1pXNW5kR2dnUFQwOUlEVXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxQmhZMnRsWkNCUlMxWWdhWE1nYm05MElHbHRjR3hsYldWdWRHVmtKeWs3WEc0Z0lIMWNibHh1SUNCcFppQW9hMlY1UHk1a2FXMXpMbXhsYm1kMGFDQTlQVDBnTlNrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVUdGamEyVmtJRXRXSUdseklHNXZkQ0JwYlhCc1pXMWxiblJsWkNjcE8xeHVJQ0I5WEc1Y2JpQWdMeThnWVhCd2JIbEJkSFJsYm5ScGIyNGdaWGh3WldOMGN5QkNUbE5JSUdsdWNIVjBjMXh1SUNCamIyNXpkQ0JyZGtKT1UwZ2dQU0JyWlhrZ0ppWWdkbUZzZFdVZ0ppWWdhMlY1TG1ScGJYTXViR1Z1WjNSb0lEMDlQU0EwSUNZbUlIWmhiSFZsTG1ScGJYTXViR1Z1WjNSb0lEMDlQU0EwTzF4dVhHNGdJR052Ym5OMElGRWdQU0J0WVhsaVpWUnlZVzV6Y0c5elpWUnZRazVUU0VGdVpFRmtaRUpwWVhNb1hHNGdJQ0FnSUNCamIyNTBaWGgwTENCd1lYSmhiWE11WW1GMFkyaFRhWHBsTENCd1lYSmhiWE11Ym5WdFNHVmhaSE1zSUhCaGNtRnRjeTV6WlhGMVpXNWpaVXhsYm1kMGFDd2djR0Z5WVcxekxtaGxZV1JUYVhwbExDQnhkV1Z5ZVN3Z1ltbGhjeXdnTUNrN1hHNWNiaUFnYVdZZ0tHdDJRazVUU0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJoY0hCc2VVRjBkR1Z1ZEdsdmJpaGNiaUFnSUNBZ0lDQWdZMjl1ZEdWNGRDd2dVU3dnYTJWNUxDQjJZV3gxWlN3Z2EyVjVVR0ZrWkdsdVowMWhjMnNzSUhWdVpHVm1hVzVsWkN3Z2NHRnpkRXRsZVN3Z2NHRnpkRlpoYkhWbExDQnlaV3hoZEdsMlpWQnZjMmwwYVc5dVFtbGhjeXdnY0dGeVlXMXpMRnh1SUNBZ0lDQWdJQ0JoZEhSeWFXSjFkR1Z6S1R0Y2JpQWdmVnh1SUNCcFppQW9JV3RsZVNCOGZDQWhkbUZzZFdVcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJ0bGVTQmhibVFnZG1Gc2RXVWdiWFZ6ZENCaVpTQndjbTkyYVdSbFpDY3BPMXh1SUNCOVhHNGdJR052Ym5OMElFc2dQU0J0WVhsaVpWUnlZVzV6Y0c5elpWUnZRazVUU0VGdVpFRmtaRUpwWVhNb1hHNGdJQ0FnSUNCamIyNTBaWGgwTENCd1lYSmhiWE11WW1GMFkyaFRhWHBsTENCd1lYSmhiWE11Ym5WdFNHVmhaSE1zSUhCaGNtRnRjeTVyZGxObGNYVmxibU5sVEdWdVozUm9MQ0J3WVhKaGJYTXVhR1ZoWkZOcGVtVXNJR3RsZVN3Z1ltbGhjeXhjYmlBZ0lDQWdJSEJoY21GdGN5NW9hV1JrWlc1VGFYcGxLVHRjYmx4dUlDQmpiMjV6ZENCV0lEMGdiV0Y1WW1WVWNtRnVjM0J2YzJWVWIwSk9VMGhCYm1SQlpHUkNhV0Z6S0Z4dUlDQWdJQ0FnWTI5dWRHVjRkQ3dnY0dGeVlXMXpMbUpoZEdOb1UybDZaU3dnY0dGeVlXMXpMbTUxYlVobFlXUnpMQ0J3WVhKaGJYTXVhM1pUWlhGMVpXNWpaVXhsYm1kMGFDd2djR0Z5WVcxekxuWklaV0ZrVTJsNlpTd2dkbUZzZFdVc0lHSnBZWE1zWEc0Z0lDQWdJQ0F5SUNvZ2NHRnlZVzF6TG1ocFpHUmxibE5wZW1VcE8xeHVYRzRnSUdGd2NHeDVRWFIwWlc1MGFXOXVLRnh1SUNBZ0lDQWdZMjl1ZEdWNGRDd2dVU3dnU3l3Z1Zpd2dhMlY1VUdGa1pHbHVaMDFoYzJzc0lIVnVaR1ZtYVc1bFpDd2djR0Z6ZEV0bGVTd2djR0Z6ZEZaaGJIVmxMQ0J5Wld4aGRHbDJaVkJ2YzJsMGFXOXVRbWxoY3l3Z2NHRnlZVzF6TENCaGRIUnlhV0oxZEdWektUdGNibjA3WEc0aUxDQWlMeThnUTI5d2VYSnBaMmgwSUNoaktTQk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNHZMeUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnVFVsVUlFeHBZMlZ1YzJVdVhHNWNibWx0Y0c5eWRDQjdSR0YwWVZSNWNHVjlJR1p5YjIwZ0p5NHVMeTR1THk0dUwzZGhjMjB0WTI5dGJXOXVKenRjYm1sdGNHOXlkQ0I3VkdWdWMyOXlWbWxsZDMwZ1puSnZiU0FuTGk0dkxpNHZkR1Z1YzI5eUxYWnBaWGNuTzF4dWFXMXdiM0owSUh0VGFHRndaVlYwYVd4OUlHWnliMjBnSnk0dUx5NHVMM1YwYVd3bk8xeHVhVzF3YjNKMElIdERiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1VISnZaM0poYlVsdVptOHNJRkJ5YjJkeVlXMUpibkIxZEZSbGJuTnZja2x1Wm05RVpYQmxibVJsYm1ONUxDQlFjbTluY21GdFZXNXBabTl5YlgwZ1puSnZiU0FuTGk0dmRIbHdaWE1uTzF4dVhHNXBiWEJ2Y25RZ2UyTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWekxDQm5aWFJGYkdWdFpXNTBRWFFzSUVsdVpHbGpaWE5JWld4d1pYSXNJR2x1Y0hWMFZtRnlhV0ZpYkdVc0lHOTFkSEIxZEZaaGNtbGhZbXhsTENCVGFHRmtaWEpJWld4d1pYSXNJRlZ1YVdadmNtMUVZWFJoUld4bGJXVnVkRlI1Y0dVc0lGVnVhV1p2Y20xelFYSnlZWGxVZVhCbGZTQm1jbTl0SUNjdUwyTnZiVzF2YmljN1hHNWNibWx1ZEdWeVptRmpaU0JRWVdSQmRIUnlhV0oxZEdWeklIdGNiaUFnTHk4Z01DMWpiMjV6ZEdGdWRDd2dNUzF5Wldac1pXTjBMQ0F5TFdWa1oyVXNJRE10ZDNKaGNGeHVJQ0J5WldGa2IyNXNlU0J0YjJSbE9pQnVkVzFpWlhJN1hHNGdJSEpsWVdSdmJteDVJSFpoYkhWbE9pQnVkVzFpWlhJN1hHNGdJSEpsWVdSdmJteDVJSEJoWkhNNklHNTFiV0psY2x0ZE8xeHVmVnh1WEc1amIyNXpkQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5QTlJQ2hwYm5CMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFNrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JwWmlBb0lXbHVjSFYwY3lCOGZDQnBibkIxZEhNdWJHVnVaM1JvSUR3Z01Ta2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblZHOXZJR1psZHlCcGJuQjFkSE1uS1R0Y2JpQWdmVnh1SUNCcFppQW9hVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxJQ0U5UFNCRVlYUmhWSGx3WlM1bWJHOWhkQ0FtSmlCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVZ0lUMDlJRVJoZEdGVWVYQmxMbVpzYjJGME1UWXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owbHVjSFYwSUhSNWNHVWdiWFZ6ZENCaVpTQm1iRzloZENCdmNpQm1iRzloZERFMkxpY3BPMXh1SUNCOVhHNWNiaUFnYVdZZ0tHbHVjSFYwY3k1c1pXNW5kR2dnUGowZ01pa2dlMXh1SUNBZ0lHeGxkQ0IyWVd4cFpGQmhaSE1nUFNCcGJuQjFkSE5iTUYwdVpHbHRjeTVzWlc1bmRHZ2dLaUF5SUQwOVBTQnBibkIxZEhOYk1WMHVaR2x0YzFzd1hUdGNiaUFnSUNCcFppQW9hVzV3ZFhSekxteGxibWQwYUNBOVBUMGdOQ2tnZTF4dUlDQWdJQ0FnZG1Gc2FXUlFZV1J6SUQwZ2FXNXdkWFJ6V3pOZExtUnBiWE5iTUYwZ0tpQXlJRDA5UFNCcGJuQjFkSE5iTVYwdVpHbHRjMXN3WFR0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0NGMllXeHBaRkJoWkhNcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblZHaGxJSEJoWkhNZ2MyaHZkV3hrSUdKbElHRWdNVVFnZEdWdWMyOXlJRzltSUhOb1lYQmxJRnN5SUNvZ2FXNXdkWFJmY21GdWExMGdiM0lnV3pJZ0tpQnVkVzFmWVhobGMxMHVKeWs3WEc0Z0lDQWdmVnh1SUNCOVhHNTlPMXh1WEc1amIyNXpkQ0JuWlhSUVlXUkRiMjV6ZEdGdWRDQTlJQ2h2ZFhSd2RYUTZJRWx1WkdsalpYTklaV3h3WlhJc0lHbHVjSFYwVW1GdWF6b2diblZ0WW1WeUxDQndZV1J6VEdWdVozUm9PaUJ1ZFcxaVpYSXBPaUJ6ZEhKcGJtY2dQVDRnZTF4dUlDQnNaWFFnWW14dlkyc2dQU0FuSnp0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SUdsdWNIVjBVbUZ1YXlBdElERTdJR2tnUGowZ01Ec2dMUzFwS1NCN1hHNGdJQ0FnWW14dlkyc2dLejBnWUZ4dUlDQWdJQ0FnSUNBZ0lDQWdheUE5SUdrek1pZ2tlMjkxZEhCMWRDNXBibVJwWTJWelIyVjBLQ2RwYm1ScFkyVnpKeXdnYVNsOUtTQXRJQ1I3WjJWMFJXeGxiV1Z1ZEVGMEtDZDFibWxtYjNKdGN5NXdZV1J6Snl3Z2FTd2djR0ZrYzB4bGJtZDBhQ2w5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dzZ1BDQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dzZ1BqMGdhVE15S0NSN1oyVjBSV3hsYldWdWRFRjBLQ2QxYm1sbWIzSnRjeTU0WDNOb1lYQmxKeXdnYVN3Z2FXNXdkWFJTWVc1cktYMHBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdiMlptYzJWMElDczlJR3NnS2lCcE16SW9KSHRuWlhSRmJHVnRaVzUwUVhRb0ozVnVhV1p2Y20xekxuaGZjM1J5YVdSbGN5Y3NJR2tzSUdsdWNIVjBVbUZ1YXlsOUtUdGNiaUFnSUNBZ0lDQWdZRHRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJnWEc0Z0lDQWdJQ0FnSUNBZ2RtRnNkV1VnUFNBa2UyOTFkSEIxZEM1MGVYQmxMblpoYkhWbGZTaDFibWxtYjNKdGN5NWpiMjV6ZEdGdWRGOTJZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0F4T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ2Wm1aelpYUWdQU0F3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUdzZ1BTQXdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0pIdGliRzlqYTMxY2JpQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbElEMGdlRnR2Wm1aelpYUmRPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUdBN1hHNTlPMXh1WEc1amIyNXpkQ0JuWlhSUVlXUlNaV1pzWldOMElEMGdLRzkxZEhCMWREb2dTVzVrYVdObGMwaGxiSEJsY2l3Z2FXNXdkWFJTWVc1ck9pQnVkVzFpWlhJc0lIQmhaSE5NWlc1bmRHZzZJRzUxYldKbGNpazZJSE4wY21sdVp5QTlQaUI3WEc0Z0lHeGxkQ0JpYkc5amF5QTlJQ2NuTzF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnYVc1d2RYUlNZVzVySUMwZ01Uc2dhU0ErUFNBd095QXRMV2twSUh0Y2JpQWdJQ0JpYkc5amF5QXJQU0JnWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYXlBOUlHa3pNaWdrZTI5MWRIQjFkQzVwYm1ScFkyVnpSMlYwS0NkcGJtUnBZMlZ6Snl3Z2FTbDlLU0F0SUNSN1oyVjBSV3hsYldWdWRFRjBLQ2QxYm1sbWIzSnRjeTV3WVdSekp5d2dhU3dnY0dGa2MweGxibWQwYUNsOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hySUR3Z01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYXlBOUlDMXJPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdYekp1WHpFZ1BTQXlJQ29nS0drek1pZ2tlMmRsZEVWc1pXMWxiblJCZENnbmRXNXBabTl5YlhNdWVGOXphR0Z3WlNjc0lHa3NJR2x1Y0hWMFVtRnVheWw5S1NBdElERXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYXlBOUlHc2dKU0JmTW01Zk1UdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0dzZ1BqMGdhVE15S0NSN1oyVjBSV3hsYldWdWRFRjBLQ2QxYm1sbWIzSnRjeTU0WDNOb1lYQmxKeXdnYVN3Z2FXNXdkWFJTWVc1cktYMHBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHc2dQU0JmTW01Zk1TQXRJR3M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZENBclBTQnJJQ29nYVRNeUtDUjdaMlYwUld4bGJXVnVkRUYwS0NkMWJtbG1iM0p0Y3k1NFgzTjBjbWxrWlhNbkxDQnBMQ0JwYm5CMWRGSmhibXNwZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JnTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUdCY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHOW1abk5sZENBOUlEQTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJySUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0pIdGliRzlqYTMxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVWdQU0I0VzI5bVpuTmxkRjA3WEc0Z0lDQWdJQ0FnSUNBZ1lEdGNibjA3WEc1Y2JtTnZibk4wSUdkbGRGQmhaRVZrWjJVZ1BTQW9iM1YwY0hWME9pQkpibVJwWTJWelNHVnNjR1Z5TENCcGJuQjFkRkpoYm1zNklHNTFiV0psY2l3Z2NHRmtjMHhsYm1kMGFEb2diblZ0WW1WeUtUb2djM1J5YVc1bklEMCtJSHRjYmlBZ2JHVjBJR0pzYjJOcklEMGdKeWM3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0JwYm5CMWRGSmhibXNnTFNBeE95QnBJRDQ5SURBN0lDMHRhU2tnZTF4dUlDQWdJR0pzYjJOcklDczlJR0JjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JySUQwZ2FUTXlLQ1I3YjNWMGNIVjBMbWx1WkdsalpYTkhaWFFvSjJsdVpHbGpaWE1uTENCcEtYMHBJQzBnSkh0blpYUkZiR1Z0Wlc1MFFYUW9KM1Z1YVdadmNtMXpMbkJoWkhNbkxDQnBMQ0J3WVdSelRHVnVaM1JvS1gwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR3NnUENBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JySUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dzZ1BqMGdhVE15S0NSN1oyVjBSV3hsYldWdWRFRjBLQ2QxYm1sbWIzSnRjeTU0WDNOb1lYQmxKeXdnYVN3Z2FXNXdkWFJTWVc1cktYMHBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcklEMGdhVE15S0NSN1oyVjBSV3hsYldWdWRFRjBLQ2QxYm1sbWIzSnRjeTU0WDNOb1lYQmxKeXdnYVN3Z2FXNXdkWFJTWVc1cktYMHBJQzBnTVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IyWm1jMlYwSUNzOUlHc2dLaUJwTXpJb0pIdG5aWFJGYkdWdFpXNTBRWFFvSjNWdWFXWnZjbTF6TG5oZmMzUnlhV1JsY3ljc0lHa3NJR2x1Y0hWMFVtRnVheWw5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0E3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnWUZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2IyWm1jMlYwSUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR3NnUFNBd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBa2UySnNiMk5yZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVd4MVpTQTlJSGhiYjJabWMyVjBYVHRjYmlBZ0lDQWdJQ0FnSUNCZ08xeHVmVHRjYmx4dVkyOXVjM1FnWjJWMFVHRmtWM0poY0NBOUlDaHZkWFJ3ZFhRNklFbHVaR2xqWlhOSVpXeHdaWElzSUdsdWNIVjBVbUZ1YXpvZ2JuVnRZbVZ5TENCd1lXUnpUR1Z1WjNSb09pQnVkVzFpWlhJcE9pQnpkSEpwYm1jZ1BUNGdlMXh1SUNCc1pYUWdZbXh2WTJzZ1BTQW5KenRjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJR2x1Y0hWMFVtRnVheUF0SURFN0lHa2dQajBnTURzZ0xTMXBLU0I3WEc0Z0lDQWdZbXh2WTJzZ0t6MGdZRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3NnUFNCcE16SW9KSHR2ZFhSd2RYUXVhVzVrYVdObGMwZGxkQ2duYVc1a2FXTmxjeWNzSUdrcGZTa2dMU0FrZTJkbGRFVnNaVzFsYm5SQmRDZ25kVzVwWm05eWJYTXVjR0ZrY3ljc0lHa3NJSEJoWkhOTVpXNW5kR2dwZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9heUE4SURBcElDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JySUNzOUlHa3pNaWdrZTJkbGRFVnNaVzFsYm5SQmRDZ25kVzVwWm05eWJYTXVlRjl6YUdGd1pTY3NJR2tzSUdsdWNIVjBVbUZ1YXlsOVhTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNocklENDlJR2t6TWlna2UyZGxkRVZzWlcxbGJuUkJkQ2duZFc1cFptOXliWE11ZUY5emFHRndaU2NzSUdrc0lHbHVjSFYwVW1GdWF5bDlLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2F5QXRQU0JwTXpJb0pIdG5aWFJGYkdWdFpXNTBRWFFvSjNWdWFXWnZjbTF6TG5oZmMyaGhjR1VuTENCcExDQnBibkIxZEZKaGJtc3BmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5bVpuTmxkQ0FyUFNCcklDb2dhVE15S0NSN1oyVjBSV3hsYldWdWRFRjBLQ2QxYm1sbWIzSnRjeTU0WDNOMGNtbGtaWE1uTENCcExDQnBibkIxZEZKaGJtc3BmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmdPMXh1SUNCOVhHNWNiaUFnY21WMGRYSnVJR0JjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUc5bVpuTmxkQ0E5SURBN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQnJJRDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSkh0aWJHOWphMzFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZzZFdVZ1BTQjRXMjltWm5ObGRGMDdYRzRnSUNBZ0lDQWdJQ0FnWUR0Y2JuMDdYRzVjYm1OdmJuTjBJR2RsZEZCaFpGTnVhWEJ3WlhRZ1BTQW9iM1YwY0hWME9pQkpibVJwWTJWelNHVnNjR1Z5TENCcGJuQjFkRkpoYm1zNklHNTFiV0psY2l3Z1lYUjBjbWxpZFhSbGN6b2dVR0ZrUVhSMGNtbGlkWFJsY3lrNklITjBjbWx1WnlBOVBpQjdYRzRnSUhOM2FYUmphQ0FvWVhSMGNtbGlkWFJsY3k1dGIyUmxLU0I3WEc0Z0lDQWdZMkZ6WlNBd09seHVJQ0FnSUNBZ2NtVjBkWEp1SUdkbGRGQmhaRU52Ym5OMFlXNTBLRzkxZEhCMWRDd2dhVzV3ZFhSU1lXNXJMQ0JoZEhSeWFXSjFkR1Z6TG5CaFpITXViR1Z1WjNSb0tUdGNiaUFnSUNCallYTmxJREU2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdaMlYwVUdGa1VtVm1iR1ZqZENodmRYUndkWFFzSUdsdWNIVjBVbUZ1YXl3Z1lYUjBjbWxpZFhSbGN5NXdZV1J6TG14bGJtZDBhQ2s3WEc0Z0lDQWdZMkZ6WlNBeU9seHVJQ0FnSUNBZ2NtVjBkWEp1SUdkbGRGQmhaRVZrWjJVb2IzVjBjSFYwTENCcGJuQjFkRkpoYm1zc0lHRjBkSEpwWW5WMFpYTXVjR0ZrY3k1c1pXNW5kR2dwTzF4dUlDQWdJR05oYzJVZ016cGNiaUFnSUNBZ0lISmxkSFZ5YmlCblpYUlFZV1JYY21Gd0tHOTFkSEIxZEN3Z2FXNXdkWFJTWVc1ckxDQmhkSFJ5YVdKMWRHVnpMbkJoWkhNdWJHVnVaM1JvS1R0Y2JpQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEpiblpoYkdsa0lHMXZaR1VuS1R0Y2JpQWdmVnh1ZlR0Y2JseHVZMjl1YzNRZ1kzSmxZWFJsVUdGa1VISnZaM0poYlVsdVptOGdQU0FvYVc1d2RYUnpPaUJ5WldGa2IyNXNlU0JVWlc1emIzSldhV1YzVzEwc0lHRjBkSEpwWW5WMFpYTTZJRkJoWkVGMGRISnBZblYwWlhNcE9pQlFjbTluY21GdFNXNW1ieUE5UGlCN1hHNGdJR052Ym5OMElHOTFkSEIxZEZOb1lYQmxJRDBnVTJoaGNHVlZkR2xzTG5CaFpGTm9ZWEJsS0dsdWNIVjBjMXN3WFM1a2FXMXpMbk5zYVdObEtDa3NJR0YwZEhKcFluVjBaWE11Y0dGa2N5azdYRzRnSUdOdmJuTjBJR2x1Y0hWMFJHbHRjeUE5SUdsdWNIVjBjMXN3WFM1a2FXMXpPMXh1SUNCamIyNXpkQ0J2ZFhSd2RYUlRhWHBsSUQwZ1UyaGhjR1ZWZEdsc0xuTnBlbVVvYjNWMGNIVjBVMmhoY0dVcE8xeHVJQ0JqYjI1emRDQndjbTluY21GdFZXNXBabTl5YlhNNklGQnliMmR5WVcxVmJtbG1iM0p0VzEwZ1BWeHVJQ0FnSUNBZ1czdDBlWEJsT2lCRVlYUmhWSGx3WlM1MWFXNTBNeklzSUdSaGRHRTZJRzkxZEhCMWRGTnBlbVY5TENCN2RIbHdaVG9nUkdGMFlWUjVjR1V1YVc1ME16SXNJR1JoZEdFNklHRjBkSEpwWW5WMFpYTXVjR0ZrYzMxZE8xeHVJQ0JwWmlBb1lYUjBjbWxpZFhSbGN5NXRiMlJsSUQwOVBTQXdLU0I3WEc0Z0lDQWdjSEp2WjNKaGJWVnVhV1p2Y20xekxuQjFjMmdvZTNSNWNHVTZJR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU3dnWkdGMFlUb2dZWFIwY21saWRYUmxjeTUyWVd4MVpYMHBPMXh1SUNCOVhHNWNiaUFnY0hKdlozSmhiVlZ1YVdadmNtMXpMbkIxYzJnb0xpNHVZM0psWVhSbFZHVnVjMjl5VTJoaGNHVldZWEpwWVdKc1pYTW9hVzV3ZFhSeld6QmRMbVJwYlhNc0lHOTFkSEIxZEZOb1lYQmxLU2s3WEc0Z0lHTnZibk4wSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6T2lCUWNtOW5jbUZ0U1c1d2RYUlVaVzV6YjNKSmJtWnZSR1Z3Wlc1a1pXNWplVnRkSUQwZ1d5ZHlZVzVySjEwN1hHNWNiaUFnWTI5dWMzUWdaMlYwVTJoaFpHVnlVMjkxY21ObElEMGdLSE5vWVdSbGNraGxiSEJsY2pvZ1UyaGhaR1Z5U0dWc2NHVnlLU0E5UGlCN1hHNGdJQ0FnWTI5dWMzUWdiM1YwY0hWMElEMGdiM1YwY0hWMFZtRnlhV0ZpYkdVb0oyOTFkSEIxZENjc0lHbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pTd2diM1YwY0hWMFUyaGhjR1V1YkdWdVozUm9LVHRjYmlBZ0lDQmpiMjV6ZENCcGJuQjFkQ0E5SUdsdWNIVjBWbUZ5YVdGaWJHVW9KM2duTENCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwUkdsdGN5NXNaVzVuZEdncE8xeHVJQ0FnSUdOdmJuTjBJR1JoZEdGVWVYQmxJRDBnYVc1d2RYUXVkSGx3WlM1MllXeDFaVHRjYmlBZ0lDQmpiMjV6ZENCd1lXUlRibWx3Y0dWMElEMGdaMlYwVUdGa1UyNXBjSEJsZENodmRYUndkWFFzSUdsdWNIVjBSR2x0Y3k1c1pXNW5kR2dzSUdGMGRISnBZblYwWlhNcE8xeHVJQ0FnSUdOdmJuTjBJSFZ1YVdadmNtMXpPaUJWYm1sbWIzSnRjMEZ5Y21GNVZIbHdaU0E5WEc0Z0lDQWdJQ0FnSUZ0N2JtRnRaVG9nSjI5MWRIQjFkRjl6YVhwbEp5d2dkSGx3WlRvZ0ozVXpNaWQ5TENCN2JtRnRaVG9nSjNCaFpITW5MQ0IwZVhCbE9pQW5hVE15Snl3Z2JHVnVaM1JvT2lCaGRIUnlhV0oxZEdWekxuQmhaSE11YkdWdVozUm9mVjA3WEc0Z0lDQWdhV1lnS0dGMGRISnBZblYwWlhNdWJXOWtaU0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdkVzVwWm05eWJYTXVjSFZ6YUNoN2JtRnRaVG9nSjJOdmJuTjBZVzUwWDNaaGJIVmxKeXdnZEhsd1pUb2daR0YwWVZSNWNHVWdZWE1nVlc1cFptOXliVVJoZEdGRmJHVnRaVzUwVkhsd1pYMHBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCZ1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNXlaV2RwYzNSbGNsVnVhV1p2Y20xektIVnVhV1p2Y20xektTNWtaV05zWVhKbFZtRnlhV0ZpYkdWektHbHVjSFYwTENCdmRYUndkWFFwZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdKSHR6YUdGa1pYSklaV3h3WlhJdWJXRnBibE4wWVhKMEtDbDlYRzRnSUNBZ0lDQWdJQ0FnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTVuZFdGeVpFRm5ZV2x1YzNSUGRYUlBaa0p2ZFc1a2MxZHZjbXRuY205MWNGTnBlbVZ6S0NkMWJtbG1iM0p0Y3k1dmRYUndkWFJmYzJsNlpTY3BmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYVc1a2FXTmxjeUE5SUNSN2IzVjBjSFYwTG05bVpuTmxkRlJ2U1c1a2FXTmxjeWduWjJ4dlltRnNYMmxrZUNjcGZUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSFpoYkhWbElEMGdKSHRrWVhSaFZIbHdaWDBvTUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrZTNCaFpGTnVhWEJ3WlhSOVhHNGdJQ0FnSUNBZ0lDQWdJQ0J2ZFhSd2RYUmJaMnh2WW1Gc1gybGtlRjBnUFNCMllXeDFaVHRjYmlBZ0lDQWdJQ0FnZldBN1hHNGdJSDA3WEc1Y2JpQWdjbVYwZFhKdUlIdGNiaUFnSUNCdVlXMWxPaUFuVUdGa0p5eGNiaUFnSUNCemFHRmtaWEpEWVdOb1pUb2dlMmhwYm5RNklHQWtlMkYwZEhKcFluVjBaWE11Ylc5a1pYMWdMQ0JwYm5CMWRFUmxjR1Z1WkdWdVkybGxjMzBzWEc0Z0lDQWdaMlYwVW5WdVJHRjBZVG9nS0NrZ1BUNGdLSHRjYmlBZ0lDQWdJRzkxZEhCMWRITTZJRnQ3WkdsdGN6b2diM1YwY0hWMFUyaGhjR1VzSUdSaGRHRlVlWEJsT2lCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dWOVhTeGNiaUFnSUNBZ0lHUnBjM0JoZEdOb1IzSnZkWEE2SUh0NE9pQk5ZWFJvTG1ObGFXd29VMmhoY0dWVmRHbHNMbk5wZW1Vb2IzVjBjSFYwVTJoaGNHVXBJQzhnTmpRZ0x5b2dkMjl5YTJkeWIzVndJSE5wZW1VZ0tpOHBmU3hjYmlBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGMxeHVJQ0FnSUgwcExGeHVJQ0FnSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU3hjYmlBZ2ZUdGNibjA3WEc1Y2JtTnZibk4wSUdOeVpXRjBaVkJoWkVGMGRISnBZblYwWlhOR2NtOXRTVzV3ZFhSeklEMGdLR2x1Y0hWMGN6b2djbVZoWkc5dWJIa2dWR1Z1YzI5eVZtbGxkMXRkTENCaGRIUnlhV0oxZEdWek9pQlFZV1JCZEhSeWFXSjFkR1Z6S1RvZ1VHRmtRWFIwY21saWRYUmxjeUE5UGlCN1hHNGdJR2xtSUNocGJuQjFkSE11YkdWdVozUm9JRDRnTVNrZ2UxeHVJQ0FnSUdOdmJuTjBJR0pwWjBsdWREWTBVR0ZrY3lBOUlHbHVjSFYwYzFzeFhTNW5aWFJDYVdkSmJuUTJORUZ5Y21GNUtDazdYRzRnSUNBZ1kyOXVjM1FnZG1Gc2RXVWdQU0FvYVc1d2RYUnpMbXhsYm1kMGFDQStQU0F6SUNZbUlHbHVjSFYwYzFzeVhTNWtZWFJoS1NBL0lHbHVjSFYwYzFzeVhTNW5aWFJHYkc5aGRETXlRWEp5WVhrb0tWc3dYU0E2SURBdU1EdGNibHh1SUNBZ0lHTnZibk4wSUdsdWNIVjBVbUZ1YXlBOUlHbHVjSFYwYzFzd1hTNWthVzF6TG14bGJtZDBhRHRjYmlBZ0lDQmpiMjV6ZENCMWNHUmhkR1ZRWVdSeklEMGdibVYzSUVsdWRETXlRWEp5WVhrb01pQXFJR2x1Y0hWMFVtRnVheWt1Wm1sc2JDZ3dLVHRjYmlBZ0lDQnBaaUFvYVc1d2RYUnpMbXhsYm1kMGFDQStQU0EwS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JoZUdWeklEMGdhVzV3ZFhSeld6TmRMbWRsZEVKcFowbHVkRFkwUVhKeVlYa29LVHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWVhobGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNCMWNHUmhkR1ZRWVdSelcwNTFiV0psY2loaGVHVnpXMmxkS1YwZ1BTQk9kVzFpWlhJb1ltbG5TVzUwTmpSUVlXUnpXMmxkS1R0Y2JpQWdJQ0FnSUNBZ2RYQmtZWFJsVUdGa2MxdE9kVzFpWlhJb1lYaGxjMXRwWFNrZ0t5QnBibkIxZEZKaGJtdGRJRDBnVG5WdFltVnlLR0pwWjBsdWREWTBVR0ZrYzF0cElDc2dZWGhsY3k1c1pXNW5kR2hkS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdZbWxuU1c1ME5qUlFZV1J6TG1admNrVmhZMmdvS0hZc0lHa3BJRDArSUhWd1pHRjBaVkJoWkhOYlRuVnRZbVZ5S0drcFhTQTlJQ2hPZFcxaVpYSW9kaWtwS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRDQndZV1J6T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNBZ0lIVndaR0YwWlZCaFpITXVabTl5UldGamFDaDJJRDArSUhCaFpITXVjSFZ6YUNoMktTazdYRzVjYmlBZ0lDQnlaWFIxY200Z2UyMXZaR1U2SUdGMGRISnBZblYwWlhNdWJXOWtaU3dnZG1Gc2RXVXNJSEJoWkhOOU8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCaGRIUnlhV0oxZEdWek8xeHVJQ0I5WEc1OU8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2NHRmtJRDBnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBMQ0JoZEhSeWFXSjFkR1Z6T2lCUVlXUkJkSFJ5YVdKMWRHVnpLVG9nZG05cFpDQTlQaUI3WEc0Z0lIWmhiR2xrWVhSbFNXNXdkWFJ6S0dOdmJuUmxlSFF1YVc1d2RYUnpLVHRjYmlBZ1kyOXVjM1FnZFhCa1lYUmxaRUYwZEhKcFluVjBaWE1nUFNCamNtVmhkR1ZRWVdSQmRIUnlhV0oxZEdWelJuSnZiVWx1Y0hWMGN5aGpiMjUwWlhoMExtbHVjSFYwY3l3Z1lYUjBjbWxpZFhSbGN5azdYRzRnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hqY21WaGRHVlFZV1JRY205bmNtRnRTVzVtYnloamIyNTBaWGgwTG1sdWNIVjBjeXdnZFhCa1lYUmxaRUYwZEhKcFluVjBaWE1wTENCN2FXNXdkWFJ6T2lCYk1GMTlLVHRjYm4wN1hHNGlMQ0FpTHk4Z1EyOXdlWEpwWjJoMElDaGpLU0JOYVdOeWIzTnZablFnUTI5eWNHOXlZWFJwYjI0dUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzR2THlCTWFXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1RVbFVJRXhwWTJWdWMyVXVYRzVjYm1sdGNHOXlkQ0I3Wlc1MmZTQm1jbTl0SUNkdmJtNTRjblZ1ZEdsdFpTMWpiMjF0YjI0bk8xeHVYRzVwYlhCdmNuUWdlMFJoZEdGVWVYQmxmU0JtY205dElDY3VMaTh1TGk4dUxpOTNZWE50TFdOdmJXMXZiaWM3WEc1cGJYQnZjblFnZTFSbGJuTnZjbFpwWlhkOUlHWnliMjBnSnk0dUx5NHVMM1JsYm5OdmNpMTJhV1YzSnp0Y2JtbHRjRzl5ZENCN1VHOXZiRU52Ym5aVmRHbHNMQ0JUYUdGd1pWVjBhV3g5SUdaeWIyMGdKeTR1THk0dUwzVjBhV3duTzF4dWFXMXdiM0owSUh0QmRIUnlhV0oxZEdWWGFYUm9RMkZqYUdWTFpYbDlJR1p5YjIwZ0p5NHVMMkYwZEhKcFluVjBaUzEzYVhSb0xXTmhZMmhsTFd0bGVTYzdYRzVwYlhCdmNuUWdlME52YlhCMWRHVkRiMjUwWlhoMExDQlFjbTluY21GdFNXNW1ieXdnVUhKdlozSmhiVWx1Y0hWMFZHVnVjMjl5U1c1bWIwUmxjR1Z1WkdWdVkza3NJRkJ5YjJkeVlXMVZibWxtYjNKdGZTQm1jbTl0SUNjdUxpOTBlWEJsY3ljN1hHNWNibWx0Y0c5eWRDQjdZM0psWVhSbFZHVnVjMjl5VTJoaGNHVldZWEpwWVdKc1pYTXNJR2RsZEVWc1pXMWxiblJCZEN3Z1NXNWthV05sYzBobGJIQmxjaXdnYVc1d2RYUldZWEpwWVdKc1pTd2diM1YwY0hWMFZtRnlhV0ZpYkdVc0lGTm9ZV1JsY2tobGJIQmxjaXdnVlc1cFptOXliWE5CY25KaGVWUjVjR1Y5SUdaeWIyMGdKeTR2WTI5dGJXOXVKenRjYmx4dUx5OGdWRTlFVHpvZ2MzVndjRzl5ZERwY2JpOHZJQzBnWTJWcGJGOXRiMlJsSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JjSW5SbGMzUmZiV0Y0Y0c5dmJGOHlaRjlqWldsc1hDSmNiaTh2SUMwZ2MzUnZjbUZuWlY5dmNtUmxjaUFnSUNBZ0lDQWdJQ0FnSUNCY0luUmxjM1JmYldGNGNHOXZiRjkzYVhSb1gyRnlaMjFoZUY4eVpGOXdjbVZqYjIxd2RYUmxaRjl6ZEhKcFpHVnpYQ0pjYmk4dklDMGdXMDFoZUZCdmIyeGRJR1JwYkdGMGFXOXVjeUFnSUNBZ0lDQmNJblJsYzNSZmJXRjRjRzl2YkY4eVpGOWthV3hoZEdsdmJuTmNJbHh1THk4Z0xTQmJUV0Y0VUc5dmJGMGdiM1YwY0hWMFd6RmRJQ0FnSUNBZ0lGd2lkR1Z6ZEY5dFlYaHdiMjlzWDNkcGRHaGZZWEpuYldGNFh6SmtYM0J5WldOdmJYQjFkR1ZrWDNCaFpITmNJbHh1WEc1amIyNXpkQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5QTlJQ2hwYm5CMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFNrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JwWmlBb1pXNTJMbmRsWW1kd2RTNTJZV3hwWkdGMFpVbHVjSFYwUTI5dWRHVnVkQ0FtSmlBb0lXbHVjSFYwY3lCOGZDQnBibkIxZEhNdWJHVnVaM1JvSUNFOVBTQXhLU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25VRzl2YkNCdmNITWdjbVZ4ZFdseVpYTWdNU0JwYm5CMWRDNG5LVHRjYmlBZ2ZWeHVmVHRjYmx4dVkyOXVjM1FnWjJWMFFXUnFkWE4wWldSUWIyOXNRWFIwY21saWRYUmxjMEZ1WkU5MWRIQjFkRk5vWVhCbElEMGdQRUYwZEhKcFluVjBaVlI1Y0dVZ1pYaDBaVzVrY3lCQmRtVnlZV2RsVUc5dmJFRjBkSEpwWW5WMFpYTjhUV0Y0VUc5dmJFRjBkSEpwWW5WMFpYTStLRnh1SUNBZ0lHbHVjSFYwT2lCVVpXNXpiM0pXYVdWM0xDQmhkSFJ5YVdKMWRHVnpPaUJCZEhSeWFXSjFkR1ZVZVhCbExDQnBjMGRzYjJKaGJFOXdaWEpoZEc5eU9pQmliMjlzWldGdUtUb2dXMEYwZEhKcFluVjBaVlI1Y0dVc0lHNTFiV0psY2x0ZFhTQTlQaUI3WEc0Z0lHTnZibk4wSUdselEyaGhibTVsYkhOTVlYTjBJRDBnWVhSMGNtbGlkWFJsY3k1bWIzSnRZWFFnUFQwOUlDZE9TRmRESnp0Y2JpQWdZMjl1YzNRZ2FXNXdkWFJUYUdGd1pVRnpRMmhoYm01bGJFWnBjbk4wSUQwZ2FXNXdkWFF1WkdsdGN5NXpiR2xqWlNncE8xeHVJQ0JwWmlBb2FYTkRhR0Z1Ym1Wc2MweGhjM1FwSUh0Y2JpQWdJQ0JwYm5CMWRGTm9ZWEJsUVhORGFHRnVibVZzUm1seWMzUXVjM0JzYVdObEtERXNJREFzSUdsdWNIVjBVMmhoY0dWQmMwTm9ZVzV1Wld4R2FYSnpkQzV3YjNBb0tTRXBPeUFnTHk4Z1RXOTJaU0JqYUdGdWJtVnNJSFJ2SUhSb1pTQnpaV052Ym1RZ2NHOXphWFJwYjI0dVhHNGdJSDFjYmlBZ1kyOXVjM1FnYUdGelJHbHNZWFJwYjI1eklEMGdUMkpxWldOMExtaGhjMDkzYmxCeWIzQmxjblI1TG1OaGJHd29ZWFIwY21saWRYUmxjeXdnSjJScGJHRjBhVzl1Y3ljcE8xeHVJQ0JqYjI1emRDQnJaWEp1Wld4VGFHRndaU0E5SUdGMGRISnBZblYwWlhNdWEyVnlibVZzVTJoaGNHVXVjMnhwWTJVb0tUdGNiaUFnWTI5dWMzUWdjM1J5YVdSbGN5QTlJR0YwZEhKcFluVjBaWE11YzNSeWFXUmxjeTV6YkdsalpTZ3BPMXh1SUNCamIyNXpkQ0JrYVd4aGRHbHZibk02SUc1MWJXSmxjbHRkSUQwZ2FHRnpSR2xzWVhScGIyNXpJRDhnS0dGMGRISnBZblYwWlhNZ1lYTWdUV0Y0VUc5dmJFRjBkSEpwWW5WMFpYTXBMbVJwYkdGMGFXOXVjeTV6YkdsalpTZ3BJRG9nVzEwN1hHNGdJR052Ym5OMElIQmhaSE1nUFNCaGRIUnlhV0oxZEdWekxuQmhaSE11YzJ4cFkyVW9LVHRjYmlBZ1VHOXZiRU52Ym5aVmRHbHNMbUZrYW5WemRGQnZiMnhCZEhSeWFXSjFkR1Z6S0dselIyeHZZbUZzVDNCbGNtRjBiM0lzSUdsdWNIVjBVMmhoY0dWQmMwTm9ZVzV1Wld4R2FYSnpkQ3dnYTJWeWJtVnNVMmhoY0dVc0lITjBjbWxrWlhNc0lHUnBiR0YwYVc5dWN5d2djR0ZrY3lrN1hHNWNiaUFnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1ZCYzBOb1lXNXVaV3hHYVhKemRDQTlJRkJ2YjJ4RGIyNTJWWFJwYkM1amIyMXdkWFJsVUc5dmJFOTFkSEIxZEZOb1lYQmxLRnh1SUNBZ0lDQWdhWE5IYkc5aVlXeFBjR1Z5WVhSdmNpd2dhVzV3ZFhSVGFHRndaVUZ6UTJoaGJtNWxiRVpwY25OMExDQnpkSEpwWkdWekxDQmthV3hoZEdsdmJuTXNJR3RsY201bGJGTm9ZWEJsTENCd1lXUnpMQ0JoZEhSeWFXSjFkR1Z6TG1GMWRHOVFZV1FwTzF4dVhHNGdJR052Ym5OMElHNWxkMEYwZEhKcFluVjBaWE1nUFNCUFltcGxZM1F1WVhOemFXZHVLSHQ5TENCaGRIUnlhV0oxZEdWektUdGNiaUFnYVdZZ0tHaGhjMFJwYkdGMGFXOXVjeWtnZTF4dUlDQWdJRTlpYW1WamRDNWhjM05wWjI0b2JtVjNRWFIwY21saWRYUmxjeXdnZTJ0bGNtNWxiRk5vWVhCbExDQnpkSEpwWkdWekxDQndZV1J6TENCa2FXeGhkR2x2Ym5Nc0lHTmhZMmhsUzJWNU9pQmhkSFJ5YVdKMWRHVnpMbU5oWTJobFMyVjVmU2s3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnVDJKcVpXTjBMbUZ6YzJsbmJpaHVaWGRCZEhSeWFXSjFkR1Z6TENCN2EyVnlibVZzVTJoaGNHVXNJSE4wY21sa1pYTXNJSEJoWkhNc0lHTmhZMmhsUzJWNU9pQmhkSFJ5YVdKMWRHVnpMbU5oWTJobFMyVjVmU2s3WEc0Z0lIMWNiaUFnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1ZCYzBOb1lXNXVaV3hNWVhOMElEMGdiM1YwY0hWMFUyaGhjR1ZCYzBOb1lXNXVaV3hHYVhKemRDNXpiR2xqWlNncE8xeHVJQ0J2ZFhSd2RYUlRhR0Z3WlVGelEyaGhibTVsYkV4aGMzUXVjSFZ6YUNodmRYUndkWFJUYUdGd1pVRnpRMmhoYm01bGJFeGhjM1F1YzNCc2FXTmxLREVzSURFcFd6QmRLVHRjYmlBZ2NtVjBkWEp1SUZ0dVpYZEJkSFJ5YVdKMWRHVnpMQ0JwYzBOb1lXNXVaV3h6VEdGemRDQS9JRzkxZEhCMWRGTm9ZWEJsUVhORGFHRnVibVZzVEdGemRDQTZJRzkxZEhCMWRGTm9ZWEJsUVhORGFHRnVibVZzUm1seWMzUmRPMXh1ZlR0Y2JseHVZMjl1YzNRZ1oyVjBWVzVwWm05eWJVRnVaRkJoWkVsdVptOGdQU0E4UVhSMGNtbGlkWFJsVkhsd1pTQmxlSFJsYm1SeklFRjJaWEpoWjJWUWIyOXNRWFIwY21saWRYUmxjM3hOWVhoUWIyOXNRWFIwY21saWRYUmxjejRvWEc0Z0lDQWdiM1YwY0hWMFUyaGhjR1U2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkTEZ4dUlDQWdJR0YwZEhKcFluVjBaWE02SUVGMGRISnBZblYwWlZSNWNHVXBPaUJiVUhKdlozSmhiVlZ1YVdadmNtMWJYU3dnVlc1cFptOXliWE5CY25KaGVWUjVjR1VzSUdKdmIyeGxZVzRzSUdKdmIyeGxZVzRzSUdKdmIyeGxZVzVkSUQwK0lIdGNiaUFnWTI5dWMzUWdhWE5EYUdGdWJtVnNjMHhoYzNRZ1BTQmhkSFJ5YVdKMWRHVnpMbVp2Y20xaGRDQTlQVDBnSjA1SVYwTW5PMXh1SUNCamIyNXpkQ0J2ZFhSd2RYUlRhWHBsSUQwZ1UyaGhjR1ZWZEdsc0xuTnBlbVVvYjNWMGNIVjBVMmhoY0dVcE8xeHVJQ0JqYjI1emRDQnJaWEp1Wld4VGFYcGxJRDBnVTJoaGNHVlZkR2xzTG5OcGVtVW9ZWFIwY21saWRYUmxjeTVyWlhKdVpXeFRhR0Z3WlNrN1hHNGdJR052Ym5OMElIQnliMmR5WVcxVmJtbG1iM0p0Y3pvZ1VISnZaM0poYlZWdWFXWnZjbTFiWFNBOVhHNGdJQ0FnSUNCYmUzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2diM1YwY0hWMFUybDZaWDBzSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklHdGxjbTVsYkZOcGVtVjlYVHRjYmlBZ1kyOXVjM1FnZFc1cFptOXliWE02SUZWdWFXWnZjbTF6UVhKeVlYbFVlWEJsSUQwZ1czdHVZVzFsT2lBbmIzVjBjSFYwVTJsNlpTY3NJSFI1Y0dVNklDZDFNekluZlN3Z2UyNWhiV1U2SUNkclpYSnVaV3hUYVhwbEp5d2dkSGx3WlRvZ0ozVXpNaWQ5WFR0Y2JpQWdhV1lnS0dGMGRISnBZblYwWlhNdWEyVnlibVZzVTJoaGNHVXViR1Z1WjNSb0lEdzlJRElwSUh0Y2JpQWdJQ0JqYjI1emRDQnJkeUE5SUdGMGRISnBZblYwWlhNdWEyVnlibVZzVTJoaGNHVmJZWFIwY21saWRYUmxjeTVyWlhKdVpXeFRhR0Z3WlM1c1pXNW5kR2dnTFNBeFhUdGNiaUFnSUNCamIyNXpkQ0J6ZHlBOUlHRjBkSEpwWW5WMFpYTXVjM1J5YVdSbGMxdGhkSFJ5YVdKMWRHVnpMbk4wY21sa1pYTXViR1Z1WjNSb0lDMGdNVjA3WEc0Z0lDQWdZMjl1YzNRZ2NIZFRkR0Z5ZENBOUlHRjBkSEpwWW5WMFpYTXVjR0ZrYzF0aGRIUnlhV0oxZEdWekxuQmhaSE11YkdWdVozUm9JQzhnTWlBdElERmRPMXh1SUNBZ0lHTnZibk4wSUhCM1JXNWtJRDBnWVhSMGNtbGlkWFJsY3k1d1lXUnpXMkYwZEhKcFluVjBaWE11Y0dGa2N5NXNaVzVuZEdnZ0xTQXhYVHRjYmlBZ0lDQmpiMjV6ZENCd2QxTjBZWEowUlc1a1RtOTBXbVZ5YnlBOUlDRWhLSEIzVTNSaGNuUWdLeUJ3ZDBWdVpDazdYRzRnSUNBZ2NISnZaM0poYlZWdWFXWnZjbTF6TG5CMWMyZ29YRzRnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUd0M2ZTeGNiaUFnSUNBZ0lDQWdlM1I1Y0dVNklFUmhkR0ZVZVhCbExuVnBiblF6TWl3Z1pHRjBZVG9nYzNkOUxGeHVJQ0FnSUNBZ0lDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJ3ZDFOMFlYSjBmU3hjYmlBZ0lDQWdJQ0FnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2NIZEZibVI5TEZ4dUlDQWdJQ2s3WEc0Z0lDQWdkVzVwWm05eWJYTXVjSFZ6YUNoY2JpQWdJQ0FnSUNBZ2UyNWhiV1U2SUNkcmR5Y3NJSFI1Y0dVNklDZDFNekluZlN3Z2UyNWhiV1U2SUNkemR5Y3NJSFI1Y0dVNklDZDFNekluZlN3Z2UyNWhiV1U2SUNkd2QxTjBZWEowSnl3Z2RIbHdaVG9nSjNVek1pZDlMRnh1SUNBZ0lDQWdJQ0I3Ym1GdFpUb2dKM0IzUlc1a0p5d2dkSGx3WlRvZ0ozVXpNaWQ5S1R0Y2JseHVJQ0FnSUd4bGRDQndhRk4wWVhKMFJXNWtUbTkwV21WeWJ5QTlJR1poYkhObE8xeHVJQ0FnSUdsbUlDaGhkSFJ5YVdKMWRHVnpMbXRsY201bGJGTm9ZWEJsTG14bGJtZDBhQ0E5UFQwZ01pa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2EyZ2dQU0JoZEhSeWFXSjFkR1Z6TG10bGNtNWxiRk5vWVhCbFcyRjBkSEpwWW5WMFpYTXVhMlZ5Ym1Wc1UyaGhjR1V1YkdWdVozUm9JQzBnTWwwN1hHNGdJQ0FnSUNCamIyNXpkQ0J6YUNBOUlHRjBkSEpwWW5WMFpYTXVjM1J5YVdSbGMxdGhkSFJ5YVdKMWRHVnpMbk4wY21sa1pYTXViR1Z1WjNSb0lDMGdNbDA3WEc0Z0lDQWdJQ0JqYjI1emRDQndhRk4wWVhKMElEMGdZWFIwY21saWRYUmxjeTV3WVdSelcyRjBkSEpwWW5WMFpYTXVjR0ZrY3k1c1pXNW5kR2dnTHlBeUlDMGdNbDA3WEc0Z0lDQWdJQ0JqYjI1emRDQndhRVZ1WkNBOUlHRjBkSEpwWW5WMFpYTXVjR0ZrYzF0aGRIUnlhV0oxZEdWekxuQmhaSE11YkdWdVozUm9JQzBnTWwwN1hHNGdJQ0FnSUNCd2FGTjBZWEowUlc1a1RtOTBXbVZ5YnlBOUlDRWhLSEJvVTNSaGNuUWdLeUJ3YUVWdVpDazdYRzRnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNdWNIVnphQ2hjYmlBZ0lDQWdJQ0FnSUNCN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQnJhSDBzSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklITm9mU3dnZTNSNWNHVTZJRVJoZEdGVWVYQmxMblZwYm5Rek1pd2daR0YwWVRvZ2NHaFRkR0Z5ZEgwc1hHNGdJQ0FnSUNBZ0lDQWdlM1I1Y0dVNklFUmhkR0ZVZVhCbExuVnBiblF6TWl3Z1pHRjBZVG9nY0doRmJtUjlLVHRjYmx4dUlDQWdJQ0FnZFc1cFptOXliWE11Y0hWemFDaGNiaUFnSUNBZ0lDQWdJQ0I3Ym1GdFpUb2dKMnRvSnl3Z2RIbHdaVG9nSjNVek1pZDlMQ0I3Ym1GdFpUb2dKM05vSnl3Z2RIbHdaVG9nSjNVek1pZDlMQ0I3Ym1GdFpUb2dKM0JvVTNSaGNuUW5MQ0IwZVhCbE9pQW5kVE15SjMwc1hHNGdJQ0FnSUNBZ0lDQWdlMjVoYldVNklDZHdhRVZ1WkNjc0lIUjVjR1U2SUNkMU16SW5mU2s3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCYmNISnZaM0poYlZWdWFXWnZjbTF6TENCMWJtbG1iM0p0Y3l3Z2RISjFaU3dnY0hkVGRHRnlkRVZ1WkU1dmRGcGxjbThzSUhCb1UzUmhjblJGYm1ST2IzUmFaWEp2WFR0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNCcFppQW9hWE5EYUdGdWJtVnNjMHhoYzNRcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblVHOXZiR2x1WnlCM2FYUm9JR3RsY201bGJGTm9ZWEJsTG14bGJtZDBhQ0ErSURJZ2FYTWdibTkwSUhOMWNIQnZjblJsWkNCbWIzSWdUa2hYUXlCbWIzSnRZWFF1SnlrN1hHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElHdGxjbTVsYkZOMGNtbGtaWE1nUFNCVGFHRndaVlYwYVd3dVkyOXRjSFYwWlZOMGNtbGtaWE1vWVhSMGNtbGlkWFJsY3k1clpYSnVaV3hUYUdGd1pTazdYRzRnSUNBZ2NISnZaM0poYlZWdWFXWnZjbTF6TG5CMWMyZ29YRzRnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUd0bGNtNWxiRk4wY21sa1pYTjlMQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCaGRIUnlhV0oxZEdWekxuQmhaSE45TEZ4dUlDQWdJQ0FnSUNCN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQmhkSFJ5YVdKMWRHVnpMbk4wY21sa1pYTjlLVHRjYmlBZ0lDQjFibWxtYjNKdGN5NXdkWE5vS0Z4dUlDQWdJQ0FnSUNCN2JtRnRaVG9nSjJ0bGNtNWxiRk4wY21sa1pYTW5MQ0IwZVhCbE9pQW5kVE15Snl3Z2JHVnVaM1JvT2lCclpYSnVaV3hUZEhKcFpHVnpMbXhsYm1kMGFIMHNYRzRnSUNBZ0lDQWdJSHR1WVcxbE9pQW5jR0ZrY3ljc0lIUjVjR1U2SUNkMU16SW5MQ0JzWlc1bmRHZzZJR0YwZEhKcFluVjBaWE11Y0dGa2N5NXNaVzVuZEdoOUxGeHVJQ0FnSUNBZ0lDQjdibUZ0WlRvZ0ozTjBjbWxrWlhNbkxDQjBlWEJsT2lBbmRUTXlKeXdnYkdWdVozUm9PaUJoZEhSeWFXSjFkR1Z6TG5OMGNtbGtaWE11YkdWdVozUm9mU2s3WEc1Y2JpQWdJQ0JqYjI1emRDQm9ZWE5RWVdSeklEMGdZWFIwY21saWRYUmxjeTV3WVdSekxuSmxaSFZqWlNnb2MzVnRMQ0JqZFhJcElEMCtJSE4xYlNBcklHTjFjaWs3WEc0Z0lDQWdjbVYwZFhKdUlGdHdjbTluY21GdFZXNXBabTl5YlhNc0lIVnVhV1p2Y20xekxDQWhJV2hoYzFCaFpITXNJR1poYkhObExDQm1ZV3h6WlYwN1hHNGdJSDFjYm4wN1hHNWNibU52Ym5OMElHZGxibVZ5WVhSbFVHOXZiR2x1WjBOdlpHVWdQU0E4UVhSMGNtbGlkWFJsVkhsd1pTQmxlSFJsYm1SeklFRjJaWEpoWjJWUWIyOXNRWFIwY21saWRYUmxjM3hOWVhoUWIyOXNRWFIwY21saWRYUmxjejRvWEc0Z0lDQWdjMmhoWkdWeVNHVnNjR1Z5T2lCVGFHRmtaWEpJWld4d1pYSXNJSGc2SUVsdVpHbGpaWE5JWld4d1pYSXNJSEpoYm1zNklHNTFiV0psY2l3Z2IzVjBjSFYwVTJoaGNHVlNZVzVyT2lCdWRXMWlaWElzSUdGMGRISnBZblYwWlhNNklFRjBkSEpwWW5WMFpWUjVjR1VzWEc0Z0lDQWdiM0F4T2lCemRISnBibWNzSUc5d01qb2djM1J5YVc1bkxDQnpkR0Z5ZERvZ2JuVnRZbVZ5TENCMWJtbG1iM0p0Y3pvZ1ZXNXBabTl5YlhOQmNuSmhlVlI1Y0dVc0lHaGhjMUJoWkhNNklHSnZiMnhsWVc0c0lIQjNVM1JoY25SRmJtUk9iM1JhWlhKdk9pQmliMjlzWldGdUxGeHVJQ0FnSUhCb1UzUmhjblJGYm1ST2IzUmFaWEp2T2lCaWIyOXNaV0Z1S1RvZ2MzUnlhVzVuSUQwK0lIdGNiaUFnWTI5dWMzUWdhWE5EYUdGdWJtVnNjMHhoYzNRZ1BTQmhkSFJ5YVdKMWRHVnpMbVp2Y20xaGRDQTlQVDBnSjA1SVYwTW5PMXh1SUNCamIyNXpkQ0JrWVhSaFZIbHdaU0E5SUhndWRIbHdaUzUyWVd4MVpUdGNiaUFnWTI5dWMzUWdiM1YwY0hWMElEMGdiM1YwY0hWMFZtRnlhV0ZpYkdVb0oyOTFkSEIxZENjc0lIZ3VkSGx3WlM1MFpXNXpiM0lzSUc5MWRIQjFkRk5vWVhCbFVtRnVheWs3WEc1Y2JpQWdhV1lnS0dGMGRISnBZblYwWlhNdWEyVnlibVZzVTJoaGNHVXViR1Z1WjNSb0lEdzlJRElwSUh0Y2JpQWdJQ0JzWlhRZ1kyOWtaVmNnUFNBbkp6dGNiaUFnSUNCc1pYUWdZMjlrWlVnZ1BTQW5KenRjYmlBZ0lDQnNaWFFnWTI5a1pVaEZibVFnUFNBbkp6dGNiaUFnSUNCamIyNXpkQ0JrYVcxSlpIaFhJRDBnY21GdWF5QXRJQ2hwYzBOb1lXNXVaV3h6VEdGemRDQS9JRElnT2lBeEtUdGNiaUFnSUNCcFppQW9jSGRUZEdGeWRFVnVaRTV2ZEZwbGNtOHBJSHRjYmlBZ0lDQWdJR052WkdWWElEMGdZRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2RtRnlJR2s2SUhVek1pQTlJREIxT3lCcElEd2dkVzVwWm05eWJYTXVhM2M3SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZUVsdVpHbGpaWE5iSkh0a2FXMUpaSGhYZlYwZ1BTQnBibVJwWTJWeld5UjdaR2x0U1dSNFYzMWRJQ29nZFc1cFptOXliWE11YzNjZ0xTQjFibWxtYjNKdGN5NXdkMU4wWVhKMElDc2dhVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDRTVzVrYVdObGMxc2tlMlJwYlVsa2VGZDlYU0E4SURBZ2ZId2dlRWx1WkdsalpYTmJKSHRrYVcxSlpIaFhmVjFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQStQU0IxYm1sbWIzSnRjeTU0WDNOb1lYQmxXeVI3WkdsdFNXUjRWMzFkS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJoWkNzck8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0I0WDNaaGJDQTlJSGhiSkh0NExtbHVaR2xqWlhOVWIwOW1abk5sZENnbmVFbHVaR2xqWlhNbktYMWRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkh0dmNERjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmV0E3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHTnZaR1ZYSUQwZ1lGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnZjaUFvZG1GeUlHazZJSFV6TWlBOUlEQjFPeUJwSUR3Z2RXNXBabTl5YlhNdWEzYzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlRWx1WkdsalpYTmJKSHRrYVcxSlpIaFhmVjBnUFNCcGJtUnBZMlZ6V3lSN1pHbHRTV1I0VjMxZElDb2dkVzVwWm05eWJYTXVjM2NnTFNCMWJtbG1iM0p0Y3k1d2QxTjBZWEowSUNzZ2FUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCNFgzWmhiQ0E5SUhoYkpIdDRMbWx1WkdsalpYTlViMDltWm5ObGRDZ25lRWx1WkdsalpYTW5LWDFkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pIdHZjREY5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZldBN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHRjBkSEpwWW5WMFpYTXVhMlZ5Ym1Wc1UyaGhjR1V1YkdWdVozUm9JRDA5UFNBeUtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FXMUpaSGhJSUQwZ2NtRnVheUF0SUNocGMwTm9ZVzV1Wld4elRHRnpkQ0EvSURNZ09pQXlLVHRjYmlBZ0lDQWdJR2xtSUNod2FGTjBZWEowUlc1a1RtOTBXbVZ5YnlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMlJsU0NBOUlHQmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnFPaUIxTXpJZ1BTQXdkVHNnYWlBOElIVnVhV1p2Y20xekxtdG9PeUJxS3lzcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGhKYm1ScFkyVnpXeVI3WkdsdFNXUjRTSDFkSUQwZ2FXNWthV05sYzFza2UyUnBiVWxrZUVoOVhTQXFJSFZ1YVdadmNtMXpMbk5vSUMwZ2RXNXBabTl5YlhNdWNHaFRkR0Z5ZENBcklHbzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2VFbHVaR2xqWlhOYkpIdGthVzFKWkhoSWZWMGdQQ0F3SUh4OElIaEpibVJwWTJWeld5UjdaR2x0U1dSNFNIMWRJRDQ5SUhWdWFXWnZjbTF6TG5oZmMyaGhjR1ZiSkh0a2FXMUpaSGhJZlYwcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0dGa0lDczlJR2t6TWloMWJtbG1iM0p0Y3k1cmR5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCZ08xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1kyOWtaVWdnUFNCZ1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2Fqb2dkVE15SUQwZ01IVTdJR29nUENCMWJtbG1iM0p0Y3k1cmFEc2dhaXNyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjRTVzVrYVdObGMxc2tlMlJwYlVsa2VFaDlYU0E5SUdsdVpHbGpaWE5iSkh0a2FXMUpaSGhJZlYwZ0tpQjFibWxtYjNKdGN5NXphQ0F0SUhWdWFXWnZjbTF6TG5Cb1UzUmhjblFnS3lCcU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHQTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiMlJsU0VWdVpDQTlJR0JjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ1lEdGNiaUFnSUNCOVhHNWNiaUFnSUNCamIyNXpkQ0J3YjI5c2FXNW5RMjlrWlNBOUlHQmNiaUFnSUNBZ0lDQWdJQ0FnSUNSN2MyaGhaR1Z5U0dWc2NHVnlMbkpsWjJsemRHVnlWVzVwWm05eWJYTW9kVzVwWm05eWJYTXBMbVJsWTJ4aGNtVldZWEpwWVdKc1pYTW9lQ3dnYjNWMGNIVjBLWDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdKSHR6YUdGa1pYSklaV3h3WlhJdWJXRnBibE4wWVhKMEtDbDlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG1kMVlYSmtRV2RoYVc1emRFOTFkRTltUW05MWJtUnpWMjl5YTJkeWIzVndVMmw2WlhNb0ozVnVhV1p2Y20xekxtOTFkSEIxZEZOcGVtVW5LWDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2FXNWthV05sY3lBOUlDUjdiM1YwY0hWMExtOW1abk5sZEZSdlNXNWthV05sY3lnbloyeHZZbUZzWDJsa2VDY3BmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhoSmJtUnBZMlZ6SUQwZ0pIdHZkWFJ3ZFhRdWIyWm1jMlYwVkc5SmJtUnBZMlZ6S0NkbmJHOWlZV3hmYVdSNEp5bDlPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCMllXeDFaU0E5SUNSN1pHRjBZVlI1Y0dWOUtDUjdjM1JoY25SOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSEJoWkNBOUlEQTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDUjdZMjlrWlVoOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNSN1kyOWtaVmQ5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ1I3WTI5a1pVaEZibVI5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ1I3YjNBeWZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHOTFkSEIxZEZ0bmJHOWlZV3hmYVdSNFhTQTlJSFpoYkhWbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZldBN1hHNGdJQ0FnY21WMGRYSnVJSEJ2YjJ4cGJtZERiMlJsTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUdsbUlDaHBjME5vWVc1dVpXeHpUR0Z6ZENrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkUWIyOXNhVzVuSUhkcGRHZ2dhMlZ5Ym1Wc1UyaGhjR1V1YkdWdVozUm9JRDRnTWlCcGN5QnViM1FnYzNWd2NHOXlkR1ZrSUdadmNpQk9TRmRESUdadmNtMWhkQzRuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdZMjl1YzNRZ2MzUnlhV1JsYzFKaGJtc2dQU0JoZEhSeWFXSjFkR1Z6TG10bGNtNWxiRk5vWVhCbExteGxibWQwYUR0Y2JpQWdJQ0JqYjI1emRDQndZV1J6VW1GdWF5QTlJR0YwZEhKcFluVjBaWE11Y0dGa2N5NXNaVzVuZEdnN1hHNGdJQ0FnYkdWMElIQmhaRU52WkdVZ1BTQW5KenRjYmlBZ0lDQnBaaUFvYUdGelVHRmtjeWtnZTF4dUlDQWdJQ0FnY0dGa1EyOWtaU0E5SUdCY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9lRWx1WkdsalpYTmJhbDBnUGowZ2RXNXBabTl5YlhNdWVGOXphR0Z3WlZ0cVhTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0dGa0t5czdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYzFCaFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDRnBjMUJoWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeGxkQ0I0WDNaaGJDQTlJSGhiSkh0NExtbHVaR2xqWlhOVWIwOW1abk5sZENnbmVFbHVaR2xqWlhNbktYMWRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1I3YjNBeGZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVlEdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnY0dGa1EyOWtaU0E5SUdCY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2VGOTJZV3dnUFNCNFd5UjdlQzVwYm1ScFkyVnpWRzlQWm1aelpYUW9KM2hKYm1ScFkyVnpKeWw5WFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSkh0dmNERjlYRzRnSUNBZ0lDQWdJQ0FnSUNCZ08xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQndiMjlzYVc1blEyOWtaU0E5SUdCY2JpQWdJQ0FnSUNBZ0lDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxuSmxaMmx6ZEdWeVZXNXBabTl5YlhNb2RXNXBabTl5YlhNcExtUmxZMnhoY21WV1lYSnBZV0pzWlhNb2VDd2diM1YwY0hWMEtYMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1YldGcGJsTjBZWEowS0NsOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNSN2MyaGhaR1Z5U0dWc2NHVnlMbWQxWVhKa1FXZGhhVzV6ZEU5MWRFOW1RbTkxYm1SelYyOXlhMmR5YjNWd1UybDZaWE1vSjNWdWFXWnZjbTF6TG05MWRIQjFkRk5wZW1VbktYMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2x1WkdsalpYTWdQU0FrZTI5MWRIQjFkQzV2Wm1aelpYUlViMGx1WkdsalpYTW9KMmRzYjJKaGJGOXBaSGduS1gwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQjRTVzVrYVdObGN5QTlJQ1I3YjNWMGNIVjBMbTltWm5ObGRGUnZTVzVrYVdObGN5Z25aMnh2WW1Gc1gybGtlQ2NwZlR0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdiMlptYzJWMGN6b2dZWEp5WVhrOGRUTXlMQ0FrZTNOMGNtbGtaWE5TWVc1cmZUNDdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhaaGJIVmxJRDBnSkh0a1lYUmhWSGx3Wlgwb0pIdHpkR0Z5ZEgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdjR0ZrSUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR2x6VUdGa0lEMGdabUZzYzJVN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FUb2dkVE15SUQwZ01IVTdJR2tnUENCMWJtbG1iM0p0Y3k1clpYSnVaV3hUYVhwbE95QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdiMlptYzJWMElEMGdhVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtYjNJZ0tIWmhjaUJxSUQwZ01IVTdJR29nUENBa2UzTjBjbWxrWlhOU1lXNXJJQzBnTVgxMU95QnFLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZEhOYmFsMGdQU0J2Wm1aelpYUWdMeUFrZTJkbGRFVnNaVzFsYm5SQmRDZ25kVzVwWm05eWJYTXVhMlZ5Ym1Wc1UzUnlhV1JsY3ljc0lDZHFKeXdnYzNSeWFXUmxjMUpoYm1zcGZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzltWm5ObGRDQXRQU0J2Wm1aelpYUnpXMnBkSUNvZ0pIdG5aWFJGYkdWdFpXNTBRWFFvSjNWdWFXWnZjbTF6TG10bGNtNWxiRk4wY21sa1pYTW5MQ0FuYWljc0lITjBjbWxrWlhOU1lXNXJLWDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5bVpuTmxkSE5iSkh0emRISnBaR1Z6VW1GdWF5QXRJREY5WFNBOUlHOW1abk5sZER0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHpVR0ZrSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYWlBOUlDUjdjbUZ1YXlBdElITjBjbWxrWlhOU1lXNXJmWFU3SUdvZ1BDQWtlM0poYm10OWRUc2dhaXNyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjRTVzVrYVdObGMxdHFYU0E5SUdsdVpHbGpaWE5iYWwwZ0tpQWtlMXh1SUNBZ0lDQWdJQ0JuWlhSRmJHVnRaVzUwUVhRb0ozVnVhV1p2Y20xekxuTjBjbWxrWlhNbkxDQmdhaUF0SUNSN2NtRnVheUF0SUhOMGNtbGtaWE5TWVc1cmZYVmdMQ0J6ZEhKcFpHVnpVbUZ1YXlsOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ3NnYjJabWMyVjBjMXRxSUMwZ0pIdHlZVzVySUMwZ2MzUnlhV1JsYzFKaGJtdDlkVjBnTFNBa2UyZGxkRVZzWlcxbGJuUkJkQ2duZFc1cFptOXliWE11Y0dGa2N5Y3NJQ2RxSUMwZ01uVW5MQ0J3WVdSelVtRnVheWw5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pIdHdZV1JEYjJSbGZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNSN2IzQXlmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRzkxZEhCMWRGdG5iRzlpWVd4ZmFXUjRYU0E5SUhaaGJIVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZXQTdYRzRnSUNBZ2NtVjBkWEp1SUhCdmIyeHBibWREYjJSbE8xeHVJQ0I5WEc1OU8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRVp2Y20xaGRFRjBkSEpwWW5WMFpYTWdlMXh1SUNCeVpXRmtiMjVzZVNCbWIzSnRZWFE2SUNkT1NGZERKM3duVGtOSVZ5YzdYRzU5WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1VHOXZiRU52YlcxdmJrRjBkSEpwWW5WMFpYTWdaWGgwWlc1a2N5QkdiM0p0WVhSQmRIUnlhV0oxZEdWeklIdGNiaUFnY21WaFpHOXViSGtnWVhWMGIxQmhaRG9nYzNSeWFXNW5PMXh1SUNCeVpXRmtiMjVzZVNCalpXbHNUVzlrWlRvZ2JuVnRZbVZ5TzF4dUlDQnlaV0ZrYjI1c2VTQnJaWEp1Wld4VGFHRndaVG9nY21WaFpHOXViSGtnYm5WdFltVnlXMTA3WEc0Z0lISmxZV1J2Ym14NUlITjBjbWxrWlhNNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZE8xeHVJQ0J5WldGa2IyNXNlU0J3WVdSek9pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhUdGNibjFjYmx4dVkyOXVjM1FnWTNKbFlYUmxVMmhoWkdWeVMyVjVSbkp2YlVGMGRISnBZblYwWlhNZ1BTQW9ZWFIwY21saWRYUmxjem9nVUc5dmJFTnZiVzF2YmtGMGRISnBZblYwWlhNcE9pQnpkSEpwYm1jZ1BUNWNiaUFnSUNBb1lDUjdZWFIwY21saWRYUmxjeTVtYjNKdFlYUjlPeVI3WVhSMGNtbGlkWFJsY3k1alpXbHNUVzlrWlgwN0pIdGhkSFJ5YVdKMWRHVnpMbUYxZEc5UVlXUjlPeVI3WVhSMGNtbGlkWFJsY3k1clpYSnVaV3hUYUdGd1pTNXNaVzVuZEdoOVlDazdYRzVjYm1OdmJuTjBJR055WldGMFpVRjJaWEpoWjJWUWIyOXNVMmhoWkdWeVMyVjVSbkp2YlVGMGRISnBZblYwWlhNZ1BTQW9ZWFIwY21saWRYUmxjem9nUVhabGNtRm5aVkJ2YjJ4QmRIUnlhV0oxZEdWektUb2djM1J5YVc1bklEMCtYRzRnSUNBZ0tHQWtlMk55WldGMFpWTm9ZV1JsY2t0bGVVWnliMjFCZEhSeWFXSjFkR1Z6S0dGMGRISnBZblYwWlhNcGZUc2tlMkYwZEhKcFluVjBaWE11WTI5MWJuUkpibU5zZFdSbFVHRmtmV0FwTzF4dVhHNWpiMjV6ZENCamNtVmhkR1ZOWVhoUWIyOXNVMmhoWkdWeVMyVjVSbkp2YlVGMGRISnBZblYwWlhNZ1BTQW9ZWFIwY21saWRYUmxjem9nVFdGNFVHOXZiRUYwZEhKcFluVjBaWE1wT2lCemRISnBibWNnUFQ1Y2JpQWdJQ0FvWUNSN1kzSmxZWFJsVTJoaFpHVnlTMlY1Um5KdmJVRjBkSEpwWW5WMFpYTW9ZWFIwY21saWRYUmxjeWw5T3lSN1lYUjBjbWxpZFhSbGN5NXpkRzl5WVdkbFQzSmtaWEo5T3lSN1lYUjBjbWxpZFhSbGN5NWthV3hoZEdsdmJuTjlZQ2s3WEc1Y2JtTnZibk4wSUhCaGNuTmxVRzl2YkVOdmJXMXZia0YwZEhKcFluVjBaWE1nUFNBb1lYUjBjbWxpZFhSbGN6b2dVbVZqYjNKa1BITjBjbWx1Wnl3Z2RXNXJibTkzYmo0cE9pQlFiMjlzUTI5dGJXOXVRWFIwY21saWRYUmxjeUE5UGlBb2UxeHVJQ0JtYjNKdFlYUTZJR0YwZEhKcFluVjBaWE11Wm05eWJXRjBJR0Z6SUVadmNtMWhkRUYwZEhKcFluVjBaWE5iSjJadmNtMWhkQ2RkTEZ4dUlDQmhkWFJ2VUdGa09pQmJKMDVQVkZORlZDY3NJQ2RXUVV4SlJDY3NJQ2RUUVUxRlgxVlFVRVZTSnl3Z0oxTkJUVVZmVEU5WFJWSW5YVnRoZEhSeWFXSjFkR1Z6TG1GMWRHOWZjR0ZrSUdGeklHNTFiV0psY2wwc1hHNGdJR05sYVd4TmIyUmxPaUJoZEhSeWFXSjFkR1Z6TG1ObGFXeGZiVzlrWlNCaGN5QnVkVzFpWlhJc1hHNGdJR3RsY201bGJGTm9ZWEJsT2lCaGRIUnlhV0oxZEdWekxtdGxjbTVsYkY5emFHRndaU0JoY3lCYmJuVnRZbVZ5TENCdWRXMWlaWEpkTEZ4dUlDQnpkSEpwWkdWek9pQmhkSFJ5YVdKMWRHVnpMbk4wY21sa1pYTWdZWE1nVzI1MWJXSmxjaXdnYm5WdFltVnlYU3hjYmlBZ2NHRmtjem9nWVhSMGNtbGlkWFJsY3k1d1lXUnpJR0Z6SUZ0dWRXMWlaWElzSUc1MWJXSmxjaXdnYm5WdFltVnlMQ0J1ZFcxaVpYSmRYRzU5S1R0Y2JseHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkJkbVZ5WVdkbFVHOXZiRUYwZEhKcFluVjBaWE1nWlhoMFpXNWtjeUJRYjI5c1EyOXRiVzl1UVhSMGNtbGlkWFJsY3l3Z1FYUjBjbWxpZFhSbFYybDBhRU5oWTJobFMyVjVJSHRjYmlBZ2NtVmhaRzl1YkhrZ1kyOTFiblJKYm1Oc2RXUmxVR0ZrT2lCaWIyOXNaV0Z1TzF4dWZWeHVYRzVqYjI1emRDQmpjbVZoZEdWQmRtVnlZV2RsVUc5dmJGQnliMmR5WVcxSmJtWnZJRDFjYmlBZ0lDQW9ibUZ0WlRvZ2MzUnlhVzVuTENCcGJuQjFkRG9nVkdWdWMyOXlWbWxsZHl3Z2FYTkhiRzlpWVd4UGNHVnlZWFJ2Y2pvZ1ltOXZiR1ZoYml3Z1lYUjBjbWxpZFhSbGN6b2dRWFpsY21GblpWQnZiMnhCZEhSeWFXSjFkR1Z6S1RvZ1VISnZaM0poYlVsdVptOGdQVDRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdXMkZrYW5WemRHVmtRWFIwY21saWRYUmxjeXdnYjNWMGNIVjBVMmhoY0dWZElEMWNiaUFnSUNBZ0lDQWdJQ0JuWlhSQlpHcDFjM1JsWkZCdmIyeEJkSFJ5YVdKMWRHVnpRVzVrVDNWMGNIVjBVMmhoY0dVb2FXNXdkWFFzSUdGMGRISnBZblYwWlhNc0lHbHpSMnh2WW1Gc1QzQmxjbUYwYjNJcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnZUNBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjNnbkxDQnBibkIxZEM1a1lYUmhWSGx3WlN3Z2FXNXdkWFF1WkdsdGN5NXNaVzVuZEdncE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWkdGMFlWUjVjR1VnUFNCNExuUjVjR1V1ZG1Gc2RXVTdYRzVjYmlBZ0lDQWdJR052Ym5OMElHOXdNU0E5SUNkMllXeDFaU0FyUFNCNFgzWmhiRHNuTzF4dUlDQWdJQ0FnYkdWMElHOXdNaUE5SUNjbk8xeHVJQ0FnSUNBZ2FXWWdLR0ZrYW5WemRHVmtRWFIwY21saWRYUmxjeTVqYjNWdWRFbHVZMngxWkdWUVlXUXBJSHRjYmlBZ0lDQWdJQ0FnYjNBeUlDczlJR0IyWVd4MVpTQXZQU0FrZTJSaGRHRlVlWEJsZlNoMWJtbG1iM0p0Y3k1clpYSnVaV3hUYVhwbEtUdGdPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdiM0F5SUNzOUlHQjJZV3gxWlNBdlBTQWtlMlJoZEdGVWVYQmxmU2hwTXpJb2RXNXBabTl5YlhNdWEyVnlibVZzVTJsNlpTa2dMU0J3WVdRcE8yQTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiMjV6ZENCYmNISnZaM0poYlZWdWFXWnZjbTF6TENCMWJtbG1iM0p0Y3l3Z2FHRnpVR0ZrY3l3Z2NIZFRkR0Z5ZEVWdVpFNXZkRnBsY204c0lIQm9VM1JoY25SRmJtUk9iM1JhWlhKdlhTQTlYRzRnSUNBZ0lDQWdJQ0FnWjJWMFZXNXBabTl5YlVGdVpGQmhaRWx1Wm04b2IzVjBjSFYwVTJoaGNHVXNJR0ZrYW5WemRHVmtRWFIwY21saWRYUmxjeWs3WEc0Z0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTXVjSFZ6YUNndUxpNWpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5aHBibkIxZEM1a2FXMXpMQ0J2ZFhSd2RYUlRhR0Z3WlNrcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUkVaWEJsYm1SbGJtTnBaWE02SUZCeWIyZHlZVzFKYm5CMWRGUmxibk52Y2tsdVptOUVaWEJsYm1SbGJtTjVXMTBnUFNCYkozSmhibXNuWFR0Y2JpQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUc1aGJXVXNYRzRnSUNBZ0lDQWdJSE5vWVdSbGNrTmhZMmhsT2x4dUlDQWdJQ0FnSUNBZ0lDQWdlMmhwYm5RNklHQWtlMkYwZEhKcFluVjBaWE11WTJGamFHVkxaWGw5T3lSN2FHRnpVR0ZrYzMwN0pIdHdkMU4wWVhKMFJXNWtUbTkwV21WeWIzMDdKSHR3YUZOMFlYSjBSVzVrVG05MFdtVnliMzFnTENCcGJuQjFkRVJsY0dWdVpHVnVZMmxsYzMwc1hHNGdJQ0FnSUNBZ0lHZGxkRkoxYmtSaGRHRTZJQ2dwSUQwK0lDaDdYRzRnSUNBZ0lDQWdJQ0FnYjNWMGNIVjBjem9nVzN0a2FXMXpPaUJ2ZFhSd2RYUlRhR0Z3WlN3Z1pHRjBZVlI1Y0dVNklHbHVjSFYwTG1SaGRHRlVlWEJsZlYwc1hHNGdJQ0FnSUNBZ0lDQWdaR2x6Y0dGMFkyaEhjbTkxY0RvZ2UzZzZJRTFoZEdndVkyVnBiQ2hUYUdGd1pWVjBhV3d1YzJsNlpTaHZkWFJ3ZFhSVGFHRndaU2tnTHlBMk5DQXZLaUIzYjNKclozSnZkWEFnYzJsNlpTQXFMeWw5TEZ4dUlDQWdJQ0FnSUNBZ0lIQnliMmR5WVcxVmJtbG1iM0p0YzF4dUlDQWdJQ0FnSUNCOUtTeGNiaUFnSUNBZ0lDQWdaMlYwVTJoaFpHVnlVMjkxY21ObE9pQnphR0ZrWlhKSVpXeHdaWElnUFQ0Z1oyVnVaWEpoZEdWUWIyOXNhVzVuUTI5a1pTaGNiaUFnSUNBZ0lDQWdJQ0FnSUhOb1lXUmxja2hsYkhCbGNpd2dlQ3dnYVc1d2RYUXVaR2x0Y3k1c1pXNW5kR2dzSUc5MWRIQjFkRk5vWVhCbExteGxibWQwYUN3Z1lXUnFkWE4wWldSQmRIUnlhV0oxZEdWekxDQnZjREVzSUc5d01pd2dNQzR3TENCMWJtbG1iM0p0Y3l4Y2JpQWdJQ0FnSUNBZ0lDQWdJR2hoYzFCaFpITXNJSEIzVTNSaGNuUkZibVJPYjNSYVpYSnZMQ0J3YUZOMFlYSjBSVzVrVG05MFdtVnlieWtzWEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J3WVhKelpVRjJaWEpoWjJWUWIyOXNRWFIwY21saWRYUmxjeUE5SUNoaGRIUnlhV0oxZEdWek9pQlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGlrNklFRjJaWEpoWjJWUWIyOXNRWFIwY21saWRYUmxjeUE5UGlCN1hHNGdJR052Ym5OMElHTnZkVzUwU1c1amJIVmtaVkJoWkNBOUlDaGhkSFJ5YVdKMWRHVnpMbU52ZFc1MFgybHVZMngxWkdWZmNHRmtJR0Z6SUc1MWJXSmxjaWtnUFQwOUlEQWdQeUJtWVd4elpTQTZJSFJ5ZFdVN1hHNWNiaUFnWTI5dWMzUWdZWFIwY2lBOUlIQmhjbk5sVUc5dmJFTnZiVzF2YmtGMGRISnBZblYwWlhNb1lYUjBjbWxpZFhSbGN5azdYRzRnSUM4dklGUlBSRTg2SUhOMWNIQnZjblFnWVhSMGNtbGlkWFJsSUNkalpXbHNYMjF2WkdVblhHNGdJR2xtSUNoaGRIUnlMbU5sYVd4TmIyUmxJQ0U5UFNBd0tTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkMWMybHVaeUJqWldsc0tDa2dhVzRnYzJoaGNHVWdZMjl0Y0hWMFlYUnBiMjRnYVhNZ2JtOTBJSGxsZENCemRYQndiM0owWldRZ1ptOXlJRUYyWlhKaFoyVlFiMjlzSnlrN1hHNGdJSDFjYmlBZ1kyOXVjM1FnWVhabGNtRm5aVkJ2YjJ4QmRIUnlhV0oxZEdWeklEMGdlMk52ZFc1MFNXNWpiSFZrWlZCaFpDd2dMaTR1WVhSMGNpd2dZMkZqYUdWTFpYazZJQ2NuZlR0Y2JpQWdjbVYwZFhKdUlIc3VMaTVoZG1WeVlXZGxVRzl2YkVGMGRISnBZblYwWlhNc0lHTmhZMmhsUzJWNU9pQmpjbVZoZEdWQmRtVnlZV2RsVUc5dmJGTm9ZV1JsY2t0bGVVWnliMjFCZEhSeWFXSjFkR1Z6S0dGMlpYSmhaMlZRYjI5c1FYUjBjbWxpZFhSbGN5bDlPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdGMlpYSmhaMlZRYjI5c0lEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJCZG1WeVlXZGxVRzl2YkVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnZG1Gc2FXUmhkR1ZKYm5CMWRITW9ZMjl1ZEdWNGRDNXBibkIxZEhNcE8xeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFFYWmxjbUZuWlZCdmIyeFFjbTluY21GdFNXNW1ieWduUVhabGNtRm5aVkJ2YjJ3bkxDQmpiMjUwWlhoMExtbHVjSFYwYzFzd1hTd2dabUZzYzJVc0lHRjBkSEpwWW5WMFpYTXBLVHRjYm4wN1hHNWNibU52Ym5OMElHZHNiMkpoYkZCdmIyeEJkSFJ5YVdKMWRHVnpJRDBnZTF4dUlDQmhkWFJ2VUdGa09pQW5KeXhjYmlBZ1kyVnBiRTF2WkdVNklEQXNYRzRnSUdOdmRXNTBTVzVqYkhWa1pWQmhaRG9nWm1Gc2MyVXNYRzRnSUd0bGNtNWxiRk5vWVhCbE9pQmJYU3hjYmlBZ2MzUnlhV1JsY3pvZ1cxMHNYRzRnSUhCaFpITTZJRnRkTEZ4dUlDQnpkRzl5WVdkbFQzSmtaWEk2SURBc1hHNGdJR1JwYkdGMGFXOXVjem9nVzExY2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQndZWEp6WlVkc2IySmhiRUYyWlhKaFoyVlFiMjlzUVhSMGNtbGlkWFJsY3lBOUlDaGhkSFJ5YVdKMWRHVnpPaUJTWldOdmNtUThjM1J5YVc1bkxDQjFibXR1YjNkdVBpazZJRUYyWlhKaFoyVlFiMjlzUVhSMGNtbGlkWFJsY3lBOVBpQjdYRzRnSUdOdmJuTjBJR1p2Y20xaGRDQTlJR0YwZEhKcFluVjBaWE11Wm05eWJXRjBJR0Z6SUVadmNtMWhkRUYwZEhKcFluVjBaWE5iSjJadmNtMWhkQ2RkTzF4dUlDQnlaWFIxY200Z2UyWnZjbTFoZEN3Z0xpNHVaMnh2WW1Gc1VHOXZiRUYwZEhKcFluVjBaWE1zSUdOaFkyaGxTMlY1T2lCbWIzSnRZWFI5TzF4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHZHNiMkpoYkVGMlpYSmhaMlZRYjI5c0lEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJCZG1WeVlXZGxVRzl2YkVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnZG1Gc2FXUmhkR1ZKYm5CMWRITW9ZMjl1ZEdWNGRDNXBibkIxZEhNcE8xeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFFYWmxjbUZuWlZCdmIyeFFjbTluY21GdFNXNW1ieWduUjJ4dlltRnNRWFpsY21GblpWQnZiMnduTENCamIyNTBaWGgwTG1sdWNIVjBjMXN3WFN3Z2RISjFaU3dnWVhSMGNtbGlkWFJsY3lrcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCTllYaFFiMjlzUVhSMGNtbGlkWFJsY3lCbGVIUmxibVJ6SUZCdmIyeERiMjF0YjI1QmRIUnlhV0oxZEdWekxDQkJkSFJ5YVdKMWRHVlhhWFJvUTJGamFHVkxaWGtnZTF4dUlDQnlaV0ZrYjI1c2VTQnpkRzl5WVdkbFQzSmtaWEk2SUc1MWJXSmxjanRjYmlBZ2NtVmhaRzl1YkhrZ1pHbHNZWFJwYjI1ek9pQnVkVzFpWlhKYlhUdGNibjFjYmx4dVkyOXVjM1FnWTNKbFlYUmxUV0Y0VUc5dmJGQnliMmR5WVcxSmJtWnZJRDFjYmlBZ0lDQW9ibUZ0WlRvZ2MzUnlhVzVuTENCcGJuQjFkRG9nVkdWdWMyOXlWbWxsZHl3Z2FYTkhiRzlpWVd4UGNHVnlZWFJ2Y2pvZ1ltOXZiR1ZoYml3Z1lYUjBjbWxpZFhSbGN6b2dUV0Y0VUc5dmJFRjBkSEpwWW5WMFpYTXBPaUJRY205bmNtRnRTVzVtYnlBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCYllXUnFkWE4wWldSQmRIUnlhV0oxZEdWekxDQnZkWFJ3ZFhSVGFHRndaVjBnUFZ4dUlDQWdJQ0FnSUNBZ0lHZGxkRUZrYW5WemRHVmtVRzl2YkVGMGRISnBZblYwWlhOQmJtUlBkWFJ3ZFhSVGFHRndaU2hwYm5CMWRDd2dZWFIwY21saWRYUmxjeXdnYVhOSGJHOWlZV3hQY0dWeVlYUnZjaWs3WEc0Z0lDQWdJQ0JqYjI1emRDQnZjREVnUFNCZ1hHNGdJQ0FnSUNCMllXeDFaU0E5SUcxaGVDaDRYM1poYkN3Z2RtRnNkV1VwTzF4dUlDQWdJR0E3WEc0Z0lDQWdJQ0JqYjI1emRDQnZjRElnUFNBbkp6dGNiaUFnSUNBZ0lHTnZibk4wSUhnZ1BTQnBibkIxZEZaaGNtbGhZbXhsS0NkNEp5d2dhVzV3ZFhRdVpHRjBZVlI1Y0dVc0lHbHVjSFYwTG1ScGJYTXViR1Z1WjNSb0tUdGNiaUFnSUNBZ0lHTnZibk4wSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6T2lCUWNtOW5jbUZ0U1c1d2RYUlVaVzV6YjNKSmJtWnZSR1Z3Wlc1a1pXNWplVnRkSUQwZ1d5ZHlZVzVySjEwN1hHNGdJQ0FnSUNCamIyNXpkQ0JiY0hKdlozSmhiVlZ1YVdadmNtMXpMQ0IxYm1sbWIzSnRjeXdnYUdGelVHRmtjeXdnY0hkVGRHRnlkRVZ1WkU1dmRGcGxjbThzSUhCb1UzUmhjblJGYm1ST2IzUmFaWEp2WFNBOVhHNGdJQ0FnSUNBZ0lDQWdaMlYwVlc1cFptOXliVUZ1WkZCaFpFbHVabThvYjNWMGNIVjBVMmhoY0dVc0lHRmthblZ6ZEdWa1FYUjBjbWxpZFhSbGN5azdYRzRnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNdWNIVnphQ2d1TGk1amNtVmhkR1ZVWlc1emIzSlRhR0Z3WlZaaGNtbGhZbXhsY3locGJuQjFkQzVrYVcxekxDQnZkWFJ3ZFhSVGFHRndaU2twTzF4dUlDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnYm1GdFpTeGNiaUFnSUNBZ0lDQWdjMmhoWkdWeVEyRmphR1U2WEc0Z0lDQWdJQ0FnSUNBZ0lDQjdhR2x1ZERvZ1lDUjdZWFIwY21saWRYUmxjeTVqWVdOb1pVdGxlWDA3Skh0b1lYTlFZV1J6ZlRza2UzQjNVM1JoY25SRmJtUk9iM1JhWlhKdmZUc2tlM0JvVTNSaGNuUkZibVJPYjNSYVpYSnZmV0FzSUdsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6ZlN4Y2JpQWdJQ0FnSUNBZ1oyVjBVblZ1UkdGMFlUb2dLQ2tnUFQ0Z0tIdGNiaUFnSUNBZ0lDQWdJQ0J2ZFhSd2RYUnpPaUJiZTJScGJYTTZJRzkxZEhCMWRGTm9ZWEJsTENCa1lYUmhWSGx3WlRvZ2FXNXdkWFF1WkdGMFlWUjVjR1Y5WFN4Y2JpQWdJQ0FnSUNBZ0lDQmthWE53WVhSamFFZHliM1Z3T2lCN2VEb2dUV0YwYUM1alpXbHNLRk5vWVhCbFZYUnBiQzV6YVhwbEtHOTFkSEIxZEZOb1lYQmxLU0F2SURZMElDOHFJSGR2Y210bmNtOTFjQ0J6YVhwbElDb3ZLWDBzWEc0Z0lDQWdJQ0FnSUNBZ2NISnZaM0poYlZWdWFXWnZjbTF6WEc0Z0lDQWdJQ0FnSUgwcExGeHVJQ0FnSUNBZ0lDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVNklITm9ZV1JsY2tobGJIQmxjaUE5UGlCblpXNWxjbUYwWlZCdmIyeHBibWREYjJSbEtGeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJoaFpHVnlTR1ZzY0dWeUxDQjRMQ0JwYm5CMWRDNWthVzF6TG14bGJtZDBhQ3dnYjNWMGNIVjBVMmhoY0dVdWJHVnVaM1JvTENCaFpHcDFjM1JsWkVGMGRISnBZblYwWlhNc0lHOXdNU3dnYjNBeUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnS0dsdWNIVjBMbVJoZEdGVWVYQmxJRDA5UFNCRVlYUmhWSGx3WlM1bWJHOWhkREUyS1NBL0lDMDJOVFV3TkNBNklDMHhaVFVzSUhWdWFXWnZjbTF6TENCb1lYTlFZV1J6TENCd2QxTjBZWEowUlc1a1RtOTBXbVZ5Ynl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSEJvVTNSaGNuUkZibVJPYjNSYVpYSnZLU3hjYmlBZ0lDQWdJSDA3WEc0Z0lDQWdmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRzFoZUZCdmIyd2dQU0FvWTI5dWRHVjRkRG9nUTI5dGNIVjBaVU52Ym5SbGVIUXNJR0YwZEhKcFluVjBaWE02SUUxaGVGQnZiMnhCZEhSeWFXSjFkR1Z6S1RvZ2RtOXBaQ0E5UGlCN1hHNGdJSFpoYkdsa1lYUmxTVzV3ZFhSektHTnZiblJsZUhRdWFXNXdkWFJ6S1R0Y2JpQWdZMjl1ZEdWNGRDNWpiMjF3ZFhSbEtHTnlaV0YwWlUxaGVGQnZiMnhRY205bmNtRnRTVzVtYnlnblRXRjRVRzl2YkNjc0lHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExDQm1ZV3h6WlN3Z1lYUjBjbWxpZFhSbGN5a3BPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUhCaGNuTmxUV0Y0VUc5dmJFRjBkSEpwWW5WMFpYTWdQU0FvWVhSMGNtbGlkWFJsY3pvZ1VtVmpiM0prUEhOMGNtbHVaeXdnZFc1cmJtOTNiajRwT2lCTllYaFFiMjlzUVhSMGNtbGlkWFJsY3lBOVBpQjdYRzRnSUdOdmJuTjBJSE4wYjNKaFoyVlBjbVJsY2lBOUlHRjBkSEpwWW5WMFpYTXVjM1J2Y21GblpWOXZjbVJsY2lCaGN5QnVkVzFpWlhJN1hHNGdJR052Ym5OMElHUnBiR0YwYVc5dWN5QTlJR0YwZEhKcFluVjBaWE11Wkdsc1lYUnBiMjV6SUdGeklGdHVkVzFpWlhJc0lHNTFiV0psY2wwN1hHNWNiaUFnWTI5dWMzUWdZWFIwY2lBOUlIQmhjbk5sVUc5dmJFTnZiVzF2YmtGMGRISnBZblYwWlhNb1lYUjBjbWxpZFhSbGN5azdYRzRnSUM4dklGUlBSRTg2SUhOMWNIQnZjblFnWVhSMGNtbGlkWFJsSUNkalpXbHNYMjF2WkdVbklHRnVaQ0FuYzNSdmNtRm5aVjl2Y21SbGNpZGNiaUFnYVdZZ0tITjBiM0poWjJWUGNtUmxjaUFoUFQwZ01Da2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblkyOXNkVzF1SUcxaGFtOXlJSE4wYjNKaFoyVWdiM0prWlhJZ2FYTWdibTkwSUhsbGRDQnpkWEJ3YjNKMFpXUWdabTl5SUUxaGVGQnZiMnduS1R0Y2JpQWdmVnh1SUNCcFppQW9ZWFIwY2k1alpXbHNUVzlrWlNBaFBUMGdNQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25kWE5wYm1jZ1kyVnBiQ2dwSUdsdUlITm9ZWEJsSUdOdmJYQjFkR0YwYVc5dUlHbHpJRzV2ZENCNVpYUWdjM1Z3Y0c5eWRHVmtJR1p2Y2lCTllYaFFiMjlzSnlrN1hHNGdJSDFjYmlBZ1kyOXVjM1FnYldGNFVHOXZiRUYwZEhKcFluVjBaWE1nUFNCN2MzUnZjbUZuWlU5eVpHVnlMQ0JrYVd4aGRHbHZibk1zSUM0dUxtRjBkSElzSUdOaFkyaGxTMlY1T2lBbkozMDdYRzRnSUhKbGRIVnliaUI3TGk0dWJXRjRVRzl2YkVGMGRISnBZblYwWlhNc0lHTmhZMmhsUzJWNU9pQmpjbVZoZEdWTllYaFFiMjlzVTJoaFpHVnlTMlY1Um5KdmJVRjBkSEpwWW5WMFpYTW9iV0Y0VUc5dmJFRjBkSEpwWW5WMFpYTXBmVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCd1lYSnpaVWRzYjJKaGJFMWhlRkJ2YjJ4QmRIUnlhV0oxZEdWeklEMGdLR0YwZEhKcFluVjBaWE02SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSFZ1YTI1dmQyNCtLVG9nVFdGNFVHOXZiRUYwZEhKcFluVjBaWE1nUFQ0Z2UxeHVJQ0JqYjI1emRDQm1iM0p0WVhRZ1BTQmhkSFJ5YVdKMWRHVnpMbVp2Y20xaGRDQmhjeUJHYjNKdFlYUkJkSFJ5YVdKMWRHVnpXeWRtYjNKdFlYUW5YVHRjYmlBZ2NtVjBkWEp1SUh0bWIzSnRZWFFzSUM0dUxtZHNiMkpoYkZCdmIyeEJkSFJ5YVdKMWRHVnpMQ0JqWVdOb1pVdGxlVG9nWm05eWJXRjBmVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCbmJHOWlZV3hOWVhoUWIyOXNJRDBnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBMQ0JoZEhSeWFXSjFkR1Z6T2lCTllYaFFiMjlzUVhSMGNtbGlkWFJsY3lrNklIWnZhV1FnUFQ0Z2UxeHVJQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5aGpiMjUwWlhoMExtbHVjSFYwY3lrN1hHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGpjbVZoZEdWTllYaFFiMjlzVUhKdlozSmhiVWx1Wm04b0owZHNiMkpoYkUxaGVGQnZiMnduTENCamIyNTBaWGgwTG1sdWNIVjBjMXN3WFN3Z2RISjFaU3dnWVhSMGNtbGlkWFJsY3lrcE8xeHVmVHRjYmlJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVhVzF3YjNKMElIdGxiblo5SUdaeWIyMGdKMjl1Ym5oeWRXNTBhVzFsTFdOdmJXMXZiaWM3WEc1Y2JtbHRjRzl5ZENCN1JHRjBZVlI1Y0dWOUlHWnliMjBnSnk0dUx5NHVMeTR1TDNkaGMyMHRZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdRMjl0Y0hWMFpVTnZiblJsZUhRc0lGQnliMmR5WVcxSmJtWnZMQ0JRY205bmNtRnRWVzVwWm05eWJYMGdabkp2YlNBbkxpNHZkSGx3WlhNbk8xeHVYRzVwYlhCdmNuUWdlMk55WldGMFpWUmxibk52Y2xOb1lYQmxWbUZ5YVdGaWJHVnpMQ0J2ZFhSd2RYUldZWEpwWVdKc1pTd2dVMmhoWkdWeVNHVnNjR1Z5TENCVmJtbG1iM0p0UkdGMFlVVnNaVzFsYm5SVWVYQmxMQ0JWYm1sbWIzSnRjMEZ5Y21GNVZIbHdaWDBnWm5KdmJTQW5MaTlqYjIxdGIyNG5PMXh1WEc1amIyNXpkQ0IyWVd4cFpHRjBaVWx1Y0hWMGMwTnZiblJsYm5RZ1BTQW9jM1JoY25RNklHNTFiV0psY2l3Z2JHbHRhWFE2SUc1MWJXSmxjaXdnWkdWc2RHRTZJRzUxYldKbGNpazZJSFp2YVdRZ1BUNGdlMXh1SUNCamIyNXpkQ0J6WVcxbFUzUmhjblJNYVcxcGRDQTlJSE4wWVhKMElEMDlQU0JzYVcxcGREdGNiaUFnWTI5dWMzUWdhVzVqY21WaGMybHVaMUpoYm1kbFRtVm5ZWFJwZG1WVGRHVndJRDBnYzNSaGNuUWdQQ0JzYVcxcGRDQW1KaUJrWld4MFlTQThJREE3WEc0Z0lHTnZibk4wSUdSbFkzSmxZWE5wYm1kU1lXNW5aVkJ2YzJsMGFYWmxVM1JsY0NBOUlITjBZWEowSUQ0Z2JHbHRhWFFnSmlZZ1pHVnNkR0VnUGlBd08xeHVYRzRnSUdsbUlDaHpZVzFsVTNSaGNuUk1hVzFwZENCOGZDQnBibU55WldGemFXNW5VbUZ1WjJWT1pXZGhkR2wyWlZOMFpYQWdmSHdnWkdWamNtVmhjMmx1WjFKaGJtZGxVRzl6YVhScGRtVlRkR1Z3S1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RTWVc1blpTQjBhR1Z6WlNCcGJuQjFkSE5jWENjZ1kyOXVkR1Z1ZEhNZ1lYSmxJR2x1ZG1Gc2FXUXVKeWs3WEc0Z0lIMWNibjA3WEc1Y2JtTnZibk4wSUdOeVpXRjBaVkpoYm1kbFVISnZaM0poYlVsdVptOGdQU0FvYzNSaGNuUTZJRzUxYldKbGNpd2diR2x0YVhRNklHNTFiV0psY2l3Z1pHVnNkR0U2SUc1MWJXSmxjaXdnWkdGMFlWUjVjR1U2SUVSaGRHRlVlWEJsS1RvZ1VISnZaM0poYlVsdVptOGdQVDRnZTF4dUlDQmpiMjV6ZENCdWRXMUZiR1Z0Wlc1MGN5QTlJRTFoZEdndVlXSnpLRTFoZEdndVkyVnBiQ2dvYkdsdGFYUWdMU0J6ZEdGeWRDa2dMeUJrWld4MFlTa3BPMXh1SUNCamIyNXpkQ0J2ZFhSd2RYUlRhR0Z3WlRvZ2JuVnRZbVZ5VzEwZ1BTQmJiblZ0Uld4bGJXVnVkSE5kTzF4dUlDQmpiMjV6ZENCdmRYUndkWFJUYVhwbElEMGdiblZ0Uld4bGJXVnVkSE03WEc0Z0lHTnZibk4wSUhCeWIyZHlZVzFWYm1sbWIzSnRjem9nVUhKdlozSmhiVlZ1YVdadmNtMWJYU0E5SUZ0Y2JpQWdJQ0I3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCdmRYUndkWFJUYVhwbGZTd2dlM1I1Y0dVNklHUmhkR0ZVZVhCbExDQmtZWFJoT2lCemRHRnlkSDBzSUh0MGVYQmxPaUJrWVhSaFZIbHdaU3dnWkdGMFlUb2daR1ZzZEdGOUxGeHVJQ0FnSUM0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHOTFkSEIxZEZOb1lYQmxLVnh1SUNCZE8xeHVYRzRnSUdOdmJuTjBJR2RsZEZOb1lXUmxjbE52ZFhKalpTQTlJQ2h6YUdGa1pYSklaV3h3WlhJNklGTm9ZV1JsY2tobGJIQmxjaWtnUFQ0Z2UxeHVJQ0FnSUdOdmJuTjBJRzkxZEhCMWRDQTlJRzkxZEhCMWRGWmhjbWxoWW14bEtDZHZkWFJ3ZFhRbkxDQmtZWFJoVkhsd1pTd2diM1YwY0hWMFUyaGhjR1V1YkdWdVozUm9LVHRjYmlBZ0lDQmpiMjV6ZENCM1ozTnNWSGx3WlNBOUlHOTFkSEIxZEM1MGVYQmxMblpoYkhWbE8xeHVJQ0FnSUdOdmJuTjBJSFZ1YVdadmNtMXpPaUJWYm1sbWIzSnRjMEZ5Y21GNVZIbHdaU0E5SUZ0Y2JpQWdJQ0FnSUh0dVlXMWxPaUFuYjNWMGNIVjBVMmw2WlNjc0lIUjVjR1U2SUNkMU16SW5mU3dnZTI1aGJXVTZJQ2R6ZEdGeWRDY3NJSFI1Y0dVNklIZG5jMnhVZVhCbElHRnpJRlZ1YVdadmNtMUVZWFJoUld4bGJXVnVkRlI1Y0dWOUxGeHVJQ0FnSUNBZ2UyNWhiV1U2SUNka1pXeDBZU2NzSUhSNWNHVTZJSGRuYzJ4VWVYQmxJR0Z6SUZWdWFXWnZjbTFFWVhSaFJXeGxiV1Z1ZEZSNWNHVjlYRzRnSUNBZ1hUdGNiaUFnSUNCeVpYUjFjbTRnWUZ4dUlDQWdJQ0FnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV5WldkcGMzUmxjbFZ1YVdadmNtMXpLSFZ1YVdadmNtMXpLUzVrWldOc1lYSmxWbUZ5YVdGaWJHVnpLRzkxZEhCMWRDbDlYRzRnSUNBZ0lDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxtMWhhVzVUZEdGeWRDZ3BmVnh1SUNBZ0lDQWdJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNW5kV0Z5WkVGbllXbHVjM1JQZFhSUFprSnZkVzVrYzFkdmNtdG5jbTkxY0ZOcGVtVnpLQ2QxYm1sbWIzSnRjeTV2ZFhSd2RYUlRhWHBsSnlsOVhHNGdJQ0FnSUNBZ0lHOTFkSEIxZEZ0bmJHOWlZV3hmYVdSNFhTQTlJSFZ1YVdadmNtMXpMbk4wWVhKMElDc2dKSHQzWjNOc1ZIbHdaWDBvWjJ4dlltRnNYMmxrZUNrZ0tpQjFibWxtYjNKdGN5NWtaV3gwWVR0Y2JpQWdJQ0FnSUgxZ08xeHVJQ0I5TzF4dVhHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2JtRnRaVG9nSjFKaGJtZGxKeXhjYmlBZ0lDQnphR0ZrWlhKRFlXTm9aVG9nZTJocGJuUTZJR0FrZTJSaGRHRlVlWEJsZldCOUxGeHVJQ0FnSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU3hjYmlBZ0lDQm5aWFJTZFc1RVlYUmhPaUFvS1NBOVBpQW9lMXh1SUNBZ0lDQWdiM1YwY0hWMGN6b2dXM3RrYVcxek9pQnZkWFJ3ZFhSVGFHRndaU3dnWkdGMFlWUjVjR1Y5WFN4Y2JpQWdJQ0FnSUdScGMzQmhkR05vUjNKdmRYQTZJSHQ0T2lCTllYUm9MbU5sYVd3b2IzVjBjSFYwVTJsNlpTQXZJRFkwSUM4cUlIZHZjbXRuY205MWNDQnphWHBsSUNvdktYMHNYRzRnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhOY2JpQWdJQ0I5S1Z4dUlDQjlPMXh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUhKaGJtZGxJRDBnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBLVG9nZG05cFpDQTlQaUI3WEc0Z0lHeGxkQ0J6ZEdGeWRDQTlJREE3WEc0Z0lHeGxkQ0JzYVcxcGRDQTlJREE3WEc0Z0lHeGxkQ0JrWld4MFlTQTlJREE3WEc0Z0lHbG1JQ2hqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU0E5UFQwZ1JHRjBZVlI1Y0dVdWFXNTBNeklwSUh0Y2JpQWdJQ0J6ZEdGeWRDQTlJR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMbWRsZEVsdWRETXlRWEp5WVhrb0tWc3dYVHRjYmlBZ0lDQnNhVzFwZENBOUlHTnZiblJsZUhRdWFXNXdkWFJ6V3pGZExtZGxkRWx1ZERNeVFYSnlZWGtvS1Zzd1hUdGNiaUFnSUNCa1pXeDBZU0E5SUdOdmJuUmxlSFF1YVc1d2RYUnpXekpkTG1kbGRFbHVkRE15UVhKeVlYa29LVnN3WFR0Y2JpQWdmU0JsYkhObElHbG1JQ2hqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU0E5UFQwZ1JHRjBZVlI1Y0dVdVpteHZZWFFwSUh0Y2JpQWdJQ0J6ZEdGeWRDQTlJR052Ym5SbGVIUXVhVzV3ZFhSeld6QmRMbWRsZEVac2IyRjBNekpCY25KaGVTZ3BXekJkTzF4dUlDQWdJR3hwYldsMElEMGdZMjl1ZEdWNGRDNXBibkIxZEhOYk1WMHVaMlYwUm14dllYUXpNa0Z5Y21GNUtDbGJNRjA3WEc0Z0lDQWdaR1ZzZEdFZ1BTQmpiMjUwWlhoMExtbHVjSFYwYzFzeVhTNW5aWFJHYkc5aGRETXlRWEp5WVhrb0tWc3dYVHRjYmlBZ2ZWeHVJQ0JwWmlBb1pXNTJMbmRsWW1kd2RTNTJZV3hwWkdGMFpVbHVjSFYwUTI5dWRHVnVkQ2tnZTF4dUlDQWdJSFpoYkdsa1lYUmxTVzV3ZFhSelEyOXVkR1Z1ZENoemRHRnlkQ3dnYkdsdGFYUXNJR1JsYkhSaEtUdGNiaUFnZlZ4dVhHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGpjbVZoZEdWU1lXNW5aVkJ5YjJkeVlXMUpibVp2S0hOMFlYSjBMQ0JzYVcxcGRDd2daR1ZzZEdFc0lHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExtUmhkR0ZVZVhCbEtTd2dlMmx1Y0hWMGN6b2dXMTE5S1R0Y2JuMDdYRzRpTENBaUx5OGdRMjl3ZVhKcFoyaDBJQ2hqS1NCTmFXTnliM052Wm5RZ1EyOXljRzl5WVhScGIyNHVJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0dkx5Qk1hV05sYm5ObFpDQjFibVJsY2lCMGFHVWdUVWxVSUV4cFkyVnVjMlV1WEc1Y2JseHVhVzF3YjNKMElIdEVZWFJoVkhsd1pYMGdabkp2YlNBbkxpNHZMaTR2TGk0dmQyRnpiUzFqYjIxdGIyNG5PMXh1YVcxd2IzSjBJSHRVWlc1emIzSldhV1YzZlNCbWNtOXRJQ2N1TGk4dUxpOTBaVzV6YjNJdGRtbGxkeWM3WEc1cGJYQnZjblFnZTFOb1lYQmxWWFJwYkgwZ1puSnZiU0FuTGk0dkxpNHZkWFJwYkNjN1hHNXBiWEJ2Y25RZ2UwRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlU3dnWTNKbFlYUmxRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1ZlNCbWNtOXRJQ2N1TGk5aGRIUnlhV0oxZEdVdGQybDBhQzFqWVdOb1pTMXJaWGtuTzF4dWFXMXdiM0owSUh0RGIyMXdkWFJsUTI5dWRHVjRkQ3dnVUhKdlozSmhiVWx1Wm05OUlHWnliMjBnSnk0dUwzUjVjR1Z6Snp0Y2JseHVhVzF3YjNKMElIdGpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5d2daMlYwUld4bGJXVnVkRUYwTENCSmJtUnBZMlZ6U0dWc2NHVnlMQ0JwYm5CMWRGWmhjbWxoWW14bExDQnZkWFJ3ZFhSV1lYSnBZV0pzWlN3Z1UyaGhaR1Z5U0dWc2NHVnlmU0JtY205dElDY3VMMk52YlcxdmJpYzdYRzVjYm5SNWNHVWdRMjl2Y21ScGJtRjBaVlJ5WVc1elptOXliVTF2WkdVZ1BTQW5hR0ZzWmw5d2FYaGxiQ2Q4SjJGemVXMXRaWFJ5YVdNbmZDZHdlWFJ2Y21Ob1gyaGhiR1pmY0dsNFpXd25mQ2QwWmw5b1lXeG1YM0JwZUdWc1gyWnZjbDl1YmlkOEoyRnNhV2R1WDJOdmNtNWxjbk1uZkZ4dUlDQWdJQ2QwWmw5amNtOXdYMkZ1WkY5eVpYTnBlbVVuZkNkb1lXeG1YM0JwZUdWc1gzTjViVzFsZEhKcFl5YzdYRzVjYm5SNWNHVWdTMlZsY0VGemNHVmpkRkpoZEdsdlVHOXNhV041SUQwZ0ozTjBjbVYwWTJnbmZDZHViM1JmYzIxaGJHeGxjaWQ4SjI1dmRGOXNZWEpuWlhJbk8xeHVYRzUwZVhCbElFMXZaR1VnUFNBbmJtVmhjbVZ6ZENkOEoyeHBibVZoY2lkOEoyTjFZbWxqSnp0Y2JseHVkSGx3WlNCT1pXRnlaWE4wVFc5a1pTQTlJQ2R5YjNWdVpGOXdjbVZtWlhKZlpteHZiM0luZkNkeWIzVnVaRjl3Y21WbVpYSmZZMlZwYkNkOEoyWnNiMjl5SjN3blkyVnBiQ2Q4SjNOcGJYQnNaU2M3WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1VtVnphWHBsUVhSMGNtbGlkWFJsY3lCbGVIUmxibVJ6SUVGMGRISnBZblYwWlZkcGRHaERZV05vWlV0bGVTQjdYRzRnSUdGdWRHbGhiR2xoY3pvZ2JuVnRZbVZ5TzF4dUlDQmhlR1Z6T2lCdWRXMWlaWEpiWFR0Y2JpQWdZMjl2Y21ScGJtRjBaVlJ5WVc1elptOXliVTF2WkdVNklFTnZiM0prYVc1aGRHVlVjbUZ1YzJadmNtMU5iMlJsTzF4dUlDQmpkV0pwWTBOdlpXWm1RVG9nYm5WdFltVnlPMXh1SUNCbGVHTnNkV1JsVDNWMGMybGtaVG9nWW05dmJHVmhianRjYmlBZ1pYaDBjbUZ3YjJ4aGRHbHZibFpoYkhWbE9pQnVkVzFpWlhJN1hHNGdJR3RsWlhCQmMzQmxZM1JTWVhScGIxQnZiR2xqZVRvZ1MyVmxjRUZ6Y0dWamRGSmhkR2x2VUc5c2FXTjVPMXh1SUNCdGIyUmxPaUJOYjJSbE8xeHVJQ0J1WldGeVpYTjBUVzlrWlRvZ1RtVmhjbVZ6ZEUxdlpHVTdYRzU5WEc1Y2JtTnZibk4wSUhaaGJHbGtZWFJsVTJOaGJHVnpJRDBnS0hOallXeGxjem9nYm5WdFltVnlXMTBzSUdGMGRISnBZblYwWlhNNklGSmxjMmw2WlVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnYzJOaGJHVnpMbVYyWlhKNUtDaDJZV3gxWlNrZ1BUNGdkbUZzZFdVZ1BpQXdJSHg4SUNnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkU1pYTnBlbVVnY21WeGRXbHlaWE1nYzJOaGJHVnpJR2x1Y0hWMElIWmhiSFZsY3lCMGJ5QmlaU0J3YjNOcGRHbDJaU2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtTazdYRzRnSUM4dklFTm9aV05ySUhOallXeGxjeUJrYVcxeklHSmhjMlZrSUc5dUlHMXZaR1U2SUV4SlRrVkJVaXdnUTFWQ1NVTmNiaUFnYVdZZ0tITmpZV3hsY3k1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ2FXWWdLR0YwZEhKcFluVjBaWE11Ylc5a1pTQTlQVDBnSjJ4cGJtVmhjaWNwSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hLSE5qWVd4bGN5NXNaVzVuZEdnZ1BUMDlJRElnZkh3Z2MyTmhiR1Z6TG14bGJtZDBhQ0E5UFQwZ015QjhmQ0FvYzJOaGJHVnpMbXhsYm1kMGFDQTlQVDBnTkNBbUppQnpZMkZzWlhOYk1GMGdQVDA5SURFZ0ppWWdjMk5oYkdWeld6RmRJRDA5UFNBeEtTQjhmRnh1SUNBZ0lDQWdJQ0FnSUNBZ0tITmpZV3hsY3k1c1pXNW5kR2dnUFQwOUlEUWdKaVlnYzJOaGJHVnpXekJkSUQwOVBTQXhJQ1ltSUhOallXeGxjMXN6WFNBOVBUMGdNU2tnZkh4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2h6WTJGc1pYTXViR1Z1WjNSb0lEMDlQU0ExSUNZbUlITmpZV3hsYzFzd1hTQTlQVDBnTVNBbUppQnpZMkZzWlhOYk1WMGdQVDA5SURFcEtTa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9YRzRnSUNBZ0lDQWdJQ0FnSUNCZ1JtOXlJR3hwYm1WaGNpQnRiMlJsTENCU1pYTnBlbVVnY21WeGRXbHlaWE1nYzJOaGJHVnpJSFJ2SUdKbElESkVMQ0F6UkN3Z05FUWdkMmwwYUNCbGFYUm9aWElnZEhkdklHOTFkR1Z5Ylc5emRDQnZjaUJ2Ym1VZ2FXNXVaWEp0YjNOMElHRnVaRnh1SUNBZ0lDQWdJQ0FnSUNBZ2IyNWxJRzkxZEdWeWJXOXpkQ0J6WTJGc1pTQjJZV3gxWlhNZ1pYRjFZV3dnZEc4Z01Td2diM0lnTlVRZ2QybDBhQ0IwZDI4Z2IzVjBaWEp0YjNOMElITmpZV3hsSUhaaGJIVmxjeUJsY1hWaGJDQjBieUF4WUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoaGRIUnlhV0oxZEdWekxtMXZaR1VnUFQwOUlDZGpkV0pwWXljcElIdGNiaUFnSUNBZ0lHbG1JQ2doS0hOallXeGxjeTVzWlc1bmRHZ2dQVDA5SURJZ2ZId2dLSE5qWVd4bGN5NXNaVzVuZEdnZ1BUMDlJRFFnSmlZZ2MyTmhiR1Z6V3pCZElEMDlQU0F4SUNZbUlITmpZV3hsYzFzeFhTQTlQVDBnTVNrZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUNoelkyRnNaWE11YkdWdVozUm9JRDA5UFNBMElDWW1JSE5qWVd4bGMxc3dYU0E5UFQwZ01TQW1KaUJ6WTJGc1pYTmJNMTBnUFQwOUlERXBLU2tnZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjFKbGMybDZaU0J5WlhGMWFYSmxjeUJ6WTJGc1pYTWdhVzV3ZFhRZ2MybDZaU0IwYnlCaVpTQXlJRzl5SURRZ1ptOXlJR04xWW1saklHMXZaR1VuS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibjA3WEc1Y2JtTnZibk4wSUhWd1pHRjBaVk5qWVd4bGN5QTlJQ2h6WTJGc1pYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0JoZUdWek9pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhTd2djbUZ1YXpvZ2JuVnRZbVZ5S1RvZ2JuVnRZbVZ5VzEwZ1BUNGdlMXh1SUNCaGVHVnpMbVYyWlhKNUtDaDJZV3gxWlNrZ1BUNGdkbUZzZFdVZ1BqMGdNQ0FtSmlCMllXeDFaU0E4SUhKaGJtc2dmSHdnS0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RTWlhOcGVtVWdjbVZ4ZFdseVpYTWdZWGhsY3lCcGJuQjFkQ0IyWVd4MVpYTWdkRzhnWW1VZ2NHOXphWFJwZG1VZ1lXNWtJR3hsYzNNZ2RHaGhiaUJ5WVc1ckp5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLU2s3WEc0Z0lHTnZibk4wSUc1bGQxTmpZV3hsY3lBOUlHNWxkeUJCY25KaGVTaHlZVzVyS1M1bWFXeHNLREV1TUNrN1hHNGdJR0Y0WlhNdVptOXlSV0ZqYUNnb2RtRnNkV1VzSUdsdVpHVjRLU0E5UGlCdVpYZFRZMkZzWlhOYmRtRnNkV1ZkSUQwZ2MyTmhiR1Z6VzJsdVpHVjRYU2s3WEc0Z0lISmxkSFZ5YmlCdVpYZFRZMkZzWlhNN1hHNTlPMXh1WEc1amIyNXpkQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5QTlYRzRnSUNBZ0tHbHVjSFYwY3pvZ2NtVmhaRzl1YkhrZ1ZHVnVjMjl5Vm1sbGQxdGRMQ0JoZEhSeWFXSjFkR1Z6T2lCU1pYTnBlbVZCZEhSeWFXSjFkR1Z6TENCdmNITmxkRlpsY25OcGIyNDZJRzUxYldKbGNpd2djMk5oYkdWek9pQnVkVzFpWlhKYlhTeGNiaUFnSUNBZ2MybDZaWE02SUc1MWJXSmxjbHRkTENCeWIyazZJRzUxYldKbGNsdGRLVG9nZG05cFpDQTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQmJjbTlwU1c1d2RYUkpibVJsZUN3Z2MyTmhiR1Z6U1c1d2RYUkpibVJsZUN3Z2MybDZaWE5KYm5CMWRFbHVaR1Y0WFNBOVhHNGdJQ0FnSUNBZ0lDQWdLRzl3YzJWMFZtVnljMmx2YmlBK0lERXdLU0EvSUZzeExDQXlMQ0F6WFNBNklGc3RNU3dnS0dsdWNIVjBjeTVzWlc1bmRHZ2dQaUF4S1NBL0lERWdPaUF0TVN3Z0xURmRPMXh1SUNBZ0lDQWdZMjl1YzNRZ2NtRnVheUE5SUdsdWNIVjBjMXN3WFM1a2FXMXpMbXhsYm1kMGFEdGNiaUFnSUNBZ0lHbG1JQ2h5YjJsSmJuQjFkRWx1WkdWNElENGdNQ0FtSmlCcGJuQjFkSE11YkdWdVozUm9JRDRnY205cFNXNXdkWFJKYm1SbGVDQW1KaUJwYm5CMWRITmJjbTlwU1c1d2RYUkpibVJsZUYwdVpHbHRjeTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lHbHVjSFYwYzF0eWIybEpibkIxZEVsdVpHVjRYUzVuWlhSR2JHOWhkRE15UVhKeVlYa29LUzVtYjNKRllXTm9LQ2gyWVd4MVpTa2dQVDRnY205cExuQjFjMmdvZG1Gc2RXVXBLVHRjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvWVhSMGNtbGlkWFJsY3k1amIyOXlaR2x1WVhSbFZISmhibk5tYjNKdFRXOWtaU0E5UFQwZ0ozUm1YMk55YjNCZllXNWtYM0psYzJsNlpTY3BJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RTWlhOcGVtVWdjbVZ4ZFdseVpYTWdVbTlKSUdsdWNIVjBJSFJ2SUdKbElITndaV05wWm1sbFpDQjNhR1Z1SUdOdmIzSmthVzVoZEdWVWNtRnVjMlp2Y20xTmIyUmxJR2x6SUhSbVEzSnZjRUZ1WkZKbGMybDZaU2NwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCcFppQW9jMk5oYkdWelNXNXdkWFJKYm1SbGVDQStJREFnSmlZZ2FXNXdkWFJ6TG14bGJtZDBhQ0ErSUhOallXeGxjMGx1Y0hWMFNXNWtaWGdnSmlZZ2FXNXdkWFJ6VzNOallXeGxjMGx1Y0hWMFNXNWtaWGhkTG1ScGJYTXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJQ0FnSUNCcGJuQjFkSE5iYzJOaGJHVnpTVzV3ZFhSSmJtUmxlRjB1WjJWMFJteHZZWFF6TWtGeWNtRjVLQ2t1Wm05eVJXRmphQ2dvZG1Gc2RXVXBJRDArSUhOallXeGxjeTV3ZFhOb0tIWmhiSFZsS1NrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h6WTJGc1pYTXViR1Z1WjNSb0lDRTlQU0F3SUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzJOaGJHVnpMbXhsYm1kMGFDQWhQVDBnY21GdWF5QW1KaUFvYjNCelpYUldaWEp6YVc5dUlENDlJREU0SUNZbUlITmpZV3hsY3k1c1pXNW5kR2dnSVQwOUlHRjBkSEpwWW5WMFpYTXVZWGhsY3k1c1pXNW5kR2dwS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0oxSmxjMmw2WlNCeVpYRjFhWEpsY3lCelkyRnNaWE1nYVc1d2RYUWdjMmw2WlNCMGJ5QmlaU0J6WVcxbElHRnpJR2x1Y0hWMElISmhibXNnYjNJZ1lYaGxjeUJ6YVhwbElHWnZjaUJ2Y0hObGRDQXhPQ0JoYm1RZ2RYQW5LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCMllXeHBaR0YwWlZOallXeGxjeWh6WTJGc1pYTXNJR0YwZEhKcFluVjBaWE1wTzF4dUlDQWdJQ0FnSUNCcFppQW9ZWFIwY21saWRYUmxjeTVoZUdWekxteGxibWQwYUNBK0lEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMWNHUmhkR1ZUWTJGc1pYTW9jMk5oYkdWekxDQmhkSFJ5YVdKMWRHVnpMbUY0WlhNc0lISmhibXNwTG1admNrVmhZMmdvS0haaGJIVmxMQ0JwYm1SbGVDa2dQVDRnYzJOaGJHVnpXMmx1WkdWNFhTQTlJSFpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0hOcGVtVnpTVzV3ZFhSSmJtUmxlQ0ErSURBZ0ppWWdhVzV3ZFhSekxteGxibWQwYUNBK0lITnBlbVZ6U1c1d2RYUkpibVJsZUNrZ2UxeHVJQ0FnSUNBZ0lDQnBibkIxZEhOYmMybDZaWE5KYm5CMWRFbHVaR1Y0WFM1blpYUkNhV2RKYm5RMk5FRnljbUY1S0NrdVptOXlSV0ZqYUNnb2RtRnNkV1VwSUQwK0lITnBlbVZ6TG5CMWMyZ29UblZ0WW1WeUtIWmhiSFZsS1NrcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvYzJsNlpYTXViR1Z1WjNSb0lDRTlQU0J5WVc1cklIeDhJQ2h2Y0hObGRGWmxjbk5wYjI0Z1BqMGdNVGdnSmlZZ2MybDZaWE11YkdWdVozUm9JRDA5UFNCaGRIUnlhV0oxZEdWekxtRjRaWE11YkdWdVozUm9LU2tnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblVtVnphWHBsSUhKbGNYVnBjbVZ6SUhOcGVtVnpJR2x1Y0hWMElITnBlbVVnZEc4Z1ltVWdjMkZ0WlNCaGN5QnBibkIxZENCeVlXNXJJRzl5SUdGNFpYTWdjMmw2WlNCbWIzSWdiM0J6WlhRZ01UZ2dZVzVrSUhWd0p5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVdZZ0tHRjBkSEpwWW5WMFpYTXVZWGhsY3k1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoelkyRnNaWE11YkdWdVozUm9JQ0U5UFNCaGRIUnlhV0oxZEdWekxtRjRaWE11YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkU1pYTnBlbVVnY21WeGRXbHlaWE1nWENKelkyRnNaWE5jSWlCcGJuQjFkQ0J6YVhwbElIUnZJR0psSUc5bUlHRjRaWE1nY21GdWF5QjNhR1Z1SUdGNFpYTWdZWFIwY21saWRYUmxjeUJwY3lCemNHVmphV1pwWldRbktUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JwWmlBb2MybDZaWE11YkdWdVozUm9JQ0U5UFNCaGRIUnlhV0oxZEdWekxtRjRaWE11YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FuVW1WemFYcGxJSEpsY1hWcGNtVnpJRndpYzJsNlpYTmNJaUJwYm5CMWRDQnphWHBsSUhSdklHSmxJRzltSUhKaGJtc2dZWGhsY3lCeVlXNXJJSGRvWlc0Z1lYaGxjeUJoZEhSeWFXSjFkR1Z6SUdseklITndaV05wWm1sbFpDY3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhOallXeGxjeUFoUFQwZ0ozVnVaR1ZtYVc1bFpDY2dKaVlnZEhsd1pXOW1JSE5wZW1WeklDRTlQU0FuZFc1a1pXWnBibVZrSnlBbUppQnpZMkZzWlhNdWJHVnVaM1JvSUQ0Z01DQW1KaUJ6YVhwbGN5NXNaVzVuZEdnZ1BpQnlZVzVyS1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblVtVnphWHBsSUhKbGNYVnBjbVZ6SUc5dWJIa2diMllnYzJOaGJHVnpJRzl5SUhOcGVtVnpJSFJ2SUdKbElITndaV05wWm1sbFpDY3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMDdYRzVjYm1OdmJuTjBJR2RsZEU5eWFXZHBibUZzUTI5dmNtUnBibUYwWlVaeWIyMVNaWE5wZW1Wa1EyOXZjbVJwYm1GMFpTQTlYRzRnSUNBZ0tHTnZiM0prYVc1aGRHVlVjbUZ1YzJabGNrMXZaR1U2SUVOdmIzSmthVzVoZEdWVWNtRnVjMlp2Y20xTmIyUmxMQ0JrVkhsd1pUb2djM1J5YVc1bktUb2djM1J5YVc1bklEMCtYRzRnSUNBZ0lDQWdJR0JtYmlCblpYUlBjbWxuYVc1aGJFTnZiM0prYVc1aGRHVkdjbTl0VW1WemFYcGxaRU52YjNKa2FXNWhkR1VvZUZKbGMybDZaV1E2SUhVek1pd2dlRk5qWVd4bE9pQm1NeklzSUd4bGJtZDBhRkpsYzJsNlpXUTZJSFV6TWl4Y2JpQWdJQ0FnYkdWdVozUm9UM0pwWjJsdVlXdzZJSFV6TWl3Z2NtOXBVM1JoY25RNklHWXpNaXdnY205cFJXNWtPaUJtTXpJcElDMCtJQ1I3WkZSNWNHVjlJSHNnWUNBclhHNGdJQ0FnS0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCemQybDBZMmdnS0dOdmIzSmthVzVoZEdWVWNtRnVjMlpsY2sxdlpHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJGemVXMXRaWFJ5YVdNbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWUhKbGRIVnliaUFrZTJSVWVYQmxmU2g0VW1WemFYcGxaQ2tnTHlBa2UyUlVlWEJsZlNoNFUyTmhiR1VwTzJBN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVhObElDZHdlWFJ2Y21Ob1gyaGhiR1pmY0dsNFpXd25PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lHbG1JQ2hzWlc1bmRHaFNaWE5wZW1Wa0lENGdNU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0tDUjdaRlI1Y0dWOUtIaFNaWE5wZW1Wa0tTQXJJREF1TlNrZ0x5QWtlMlJVZVhCbGZTaDRVMk5oYkdVcElDMGdNQzQxTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlEQXVNRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxZ08xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5kR1pmYUdGc1psOXdhWGhsYkY5bWIzSmZibTRuT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZSEpsZEhWeWJpQW9KSHRrVkhsd1pYMG9lRkpsYzJsNlpXUXBJQ3NnTUM0MUtTQXZJQ1I3WkZSNWNHVjlLSGhUWTJGc1pTazdZRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhjMlVnSjJGc2FXZHVYMk52Y201bGNuTW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lHbG1JQ2hzWlc1bmRHaFNaWE5wZW1Wa0lEMDlJREVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlEQXVNRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJRlJvWlNCM2FHOXNaU0J3WVhKMElHRnVaQ0IwYUdVZ1puSmhZM1JwYjI1aGJDQndZWEowSUdGeVpTQmpZV3hqZFd4aGRHVmtJSE5sY0dGeVlYUmxiSGtnWkhWbElIUnZJR2x1WVdOamRYSmhZM2tnYjJZZ1pteHZZWFJwYm1kY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnY0c5cGJuUWdaR2wyYVhOcGIyNHVJRUZ6SUdGdUlHVjRZVzF3YkdVc0lHWXpNaWd5TVNrZ0x5Qm1NeklvTnlrZ2JXRjVJR1YyWVd4MVlYUmxJSFJ2SURJdU9Ua3VMaTRnYVc1emRHVmhaQ0J2WmlBekxDQmpZWFZ6YVc1bklHRnVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklHOW1abk5sZEMxaWVTMXZibVVnWlhKeWIzSWdiR0YwWlhJZ2FXNGdabXh2YjNJb0tTNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElIZG9iMnhsSUQwZ0pIdGtWSGx3Wlgwb2VGSmxjMmw2WldRZ0tpQW9iR1Z1WjNSb1QzSnBaMmx1WVd3Z0xTQXhLU0F2SUNoc1pXNW5kR2hTWlhOcGVtVmtJQzBnTVNrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1puSmhZM1FnUFZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkh0a1ZIbHdaWDBvZUZKbGMybDZaV1FnS2lBb2JHVnVaM1JvVDNKcFoybHVZV3dnTFNBeEtTQWxJQ2hzWlc1bmRHaFNaWE5wZW1Wa0lDMGdNU2twSUM4Z0pIdGtWSGx3Wlgwb2JHVnVaM1JvVW1WemFYcGxaQ0F0SURFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkMmh2YkdVZ0t5Qm1jbUZqZER0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnpaU0FuZEdaZlkzSnZjRjloYm1SZmNtVnphWHBsSnpwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0JwWmlBb2JHVnVaM1JvVW1WemFYcGxaQ0ErSURFcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ1I3WkZSNWNHVjlLSEp2YVZOMFlYSjBLU0FxSUNSN1pGUjVjR1Y5S0d4bGJtZDBhRTl5YVdkcGJtRnNJQzBnTVNrZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0tDUjdaRlI1Y0dWOUtIaFNaWE5wZW1Wa0tTQXFJQ1I3WkZSNWNHVjlLSEp2YVVWdVpDQXRJSEp2YVZOMFlYSjBLU0FxSUNSN1pGUjVjR1Y5S0d4bGJtZDBhRTl5YVdkcGJtRnNJQzBnTVNrcElDOWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUjdaRlI1Y0dWOUtHeGxibWQwYUZKbGMybDZaV1FnTFNBeEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUF3TGpVZ0tpQWtlMlJVZVhCbGZTaHliMmxUZEdGeWRDQXJJSEp2YVVWdVpDa2dLaUFrZTJSVWVYQmxmU2hzWlc1bmRHaFBjbWxuYVc1aGJDQXRJREVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZXQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCallYTmxJQ2RvWVd4bVgzQnBlR1ZzWDNONWJXMWxkSEpwWXljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJnWTI5dWMzUWdiM1YwY0hWMFYybGtkR2dnUFNBa2UyUlVlWEJsZlhoVFkyRnNaU0FxSUNSN1pGUjVjR1Y5S0d4bGJtZDBhRkpsYzJsNlpXUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdZV1JxZFhOMGJXVnVkQ0E5SUNSN1pGUjVjR1Y5S0d4bGJtZDBhRkpsYzJsNlpXUXBJQzhnYjNWMGNIVjBWMmxrZEdnN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCalpXNTBaWElnUFNBa2UyUlVlWEJsZlNoc1pXNW5kR2hQY21sbmFXNWhiQ2tnTHlBeU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2IyWm1jMlYwSUQwZ1kyVnVkR1Z5SUNvZ0tERWdMU0JoWkdwMWMzUnRaVzUwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCdlptWnpaWFFnS3lBb0tDUjdaRlI1Y0dWOUtIaFNaWE5wZW1Wa0tTQXJJREF1TlNrZ0x5QWtlMlJVZVhCbGZTaDRVMk5oYkdVcEtTQXRJREF1TlR0Z08xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQW5hR0ZzWmw5d2FYaGxiQ2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdjbVYwZFhKdUlDZ29KSHRrVkhsd1pYMG9lRkpsYzJsNlpXUXBJQ3NnTUM0MUtTQXZJQ1I3WkZSNWNHVjlLSGhUWTJGc1pTa3BJQzBnTUM0MU8yQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRU52YjNKa2FXNWhkR1VnZEhKaGJuTm1iM0p0SUcxdlpHVWdKSHRqYjI5eVpHbHVZWFJsVkhKaGJuTm1aWEpOYjJSbGZTQnBjeUJ1YjNRZ2MzVndjRzl5ZEdWa1lDazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUtTZ3BJQ3RjYmlBZ0lDQW5mU2M3WEc1Y2JtTnZibk4wSUdkbGRFNWxZWEpsYzNSUWFYaGxiRVp5YjIxUGNtbG5hVzVoYkNBOUlDaHVaV0Z5WlhOMFRXOWtaVG9nVG1WaGNtVnpkRTF2WkdVc0lHOXdjMlYwVm1WeWMybHZiam9nYm5WdFltVnlMQ0JrVkhsd1pUb2djM1J5YVc1bktUb2djM1J5YVc1bklEMCtYRzRnSUNBZ1lHWnVJR2RsZEU1bFlYSmxjM1JRYVhobGJFWnliMjFQY21sbmFXNWhiQ2g0VDNKcFoybHVZV3c2SUNSN1pGUjVjR1Y5TENCcGMwUnZkMjVUWVcxd2JHVTZJR0p2YjJ3cElDMCtJQ1I3WkZSNWNHVjlJSHRnSUNzZ0tDZ3BJRDArSUh0Y2JpQWdJQ0FnSUhOM2FYUmphQ0FvYm1WaGNtVnpkRTF2WkdVcElIdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBbmNtOTFibVJmY0hKbFptVnlYMk5sYVd3bk9seHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5hV1lnS0daeVlXTjBLSGhQY21sbmFXNWhiQ2tnUFQwZ01DNDFLU0I3SUZ4Y1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZMlZwYkNoNFQzSnBaMmx1WVd3cE95QmNYRnh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3SUZ4Y1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbTkxYm1Rb2VFOXlhV2RwYm1Gc0tUc2dYRnhjYmlBZ0lDQWdJQ0FnSUNCOUp6dGNiaUFnSUNBZ0lDQWdZMkZ6WlNBblpteHZiM0luT2x4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbmNtVjBkWEp1SUdac2IyOXlLSGhQY21sbmFXNWhiQ2s3Snp0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0FuWTJWcGJDYzZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2R5WlhSMWNtNGdZMlZwYkNoNFQzSnBaMmx1WVd3cE95YzdYRzRnSUNBZ0lDQWdJR05oYzJVZ0ozSnZkVzVrWDNCeVpXWmxjbDltYkc5dmNpYzZYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2RwWmlBb1puSmhZM1FvZUU5eWFXZHBibUZzS1NBOVBTQXdMalVwSUhzZ1hGeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1pzYjI5eUtIaFBjbWxuYVc1aGJDazdJRnhjWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZXlCY1hGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbTkxYm1Rb2VFOXlhV2RwYm1Gc0tUc2dYRnhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwbk8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUNkemFXMXdiR1VuT2x4dUlDQWdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2h2Y0hObGRGWmxjbk5wYjI0Z1BDQXhNU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZHBaaUFvYVhORWIzZHVVMkZ0Y0d4bEtTQmNYRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN0lGeGNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdObGFXd29lRTl5YVdkcGJtRnNLVHNnWEZ4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIc2dYRnhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2VFOXlhV2RwYm1Gc095QmNYRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUp6dGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCT1pXRnlaWE4wSUcxdlpHVWdKSHR1WldGeVpYTjBUVzlrWlgwZ2FYTWdibTkwSUhOMWNIQnZjblJsWkdBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwcEtDa2dLMXh1SUNBZ0lDZDlKenRjYmx4dVkyOXVjM1FnZFhCa1lYUmxVbTlKSUQwZ0tISnZhVG9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBzSUdGNFpYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0J5WVc1ck9pQnVkVzFpWlhJcE9pQnVkVzFpWlhKYlhTQTlQaUI3WEc0Z0lHTnZibk4wSUhKdmFWUnRjQ0E5SUc1bGR5QkJjbkpoZVNoeVlXNXJLUzVtYVd4c0tEQXBMbU52Ym1OaGRDaHVaWGNnUVhKeVlYa29jbUZ1YXlrdVptbHNiQ2d4S1NrN1hHNGdJR052Ym5OMElISnZhVXh2WTJGc0lEMGdjbTlwTG14bGJtZDBhQ0E5UFQwZ01DQS9JSEp2YVZSdGNDQTZJSEp2YVM1emJHbGpaU2dwTzF4dUlDQnBaaUFvWVhobGN5NXNaVzVuZEdnZ1BpQXdLU0I3WEc0Z0lDQWdZWGhsY3k1bWIzSkZZV05vS0NoMkxDQnBLU0E5UGlCN1hHNGdJQ0FnSUNCeWIybFViWEJiZGwwZ1BTQnliMmxNYjJOaGJGdHBYVHRjYmlBZ0lDQWdJSEp2YVZSdGNGdHBJQ3NnY21GdWExMGdQU0J5YjJsTWIyTmhiRnRoZUdWekxteGxibWQwYUNBcklHbGRPMXh1SUNBZ0lIMHBPMXh1SUNBZ0lISmxkSFZ5YmlCeWIybFViWEE3WEc0Z0lIMWNiaUFnY21WMGRYSnVJSEp2YVV4dlkyRnNPMXh1ZlR0Y2JseHVZMjl1YzNRZ2FXNXBkRTkxZEhCMWRGTm9ZWEJsSUQxY2JpQWdJQ0FvYVc1d2RYUlRhR0Z3WlRvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwc0lITmpZV3hsY3pvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwc0lITnBlbVZ6T2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z1lYaGxjem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBwT2x4dUlDQWdJQ0FnSUNCdWRXMWlaWEpiWFNBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElHOTFkSEIxZEZOb1lYQmxPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoemFYcGxjeTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1lYaGxjeTVzWlc1bmRHZ2dQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdsdWNIVjBVMmhoY0dVdVptOXlSV0ZqYUNnb2Rpa2dQVDRnYjNWMGNIVjBVMmhoY0dVdWNIVnphQ2gyS1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaE5ZWFJvTG0xaGVDZ3VMaTVoZUdWektTQStJR2x1Y0hWMFUyaGhjR1V1YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RoZUdWeklHbHpJRzkxZENCdlppQmliM1Z1WkNjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdGNFpYTXVabTl5UldGamFDZ29kaXdnYVNrZ1BUNGdiM1YwY0hWMFUyaGhjR1ZiZGwwZ1BTQnphWHBsYzF0cFhTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J6YVhwbGN5NW1iM0pGWVdOb0tDaDJLU0E5UGlCdmRYUndkWFJUYUdGd1pTNXdkWE5vS0hZcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tITmpZV3hsY3k1c1pXNW5kR2dnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFNaWE5wZW1VZ2NtVnhkV2x5WlhNZ1pXbDBhR1Z5SUhOallXeGxjeUJ2Y2lCemFYcGxjeTRuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHOTFkSEIxZEZOb1lYQmxJRDBnYVc1d2RYUlRhR0Z3WlM1dFlYQW9LSFpoYkhWbExDQnBibVJsZUNrZ1BUNGdUV0YwYUM1eWIzVnVaQ2gyWVd4MVpTQXFJSE5qWVd4bGMxdHBibVJsZUYwcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRzkxZEhCMWRGTm9ZWEJsTzF4dUlDQWdJQ0FnSUNCOU8xeHVYRzVqYjI1emRDQmhaR3AxYzNSUGRYUndkWFJUYUdGd1pTQTlJQ2hwYm5CMWRGTm9ZWEJsT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z2MyTmhiR1Z6T2lCdWRXMWlaWEpiWFN3Z1lYUjBjbWxpZFhSbGN6b2dVbVZ6YVhwbFFYUjBjbWxpZFhSbGN5a2dQVDRnZTF4dUlDQmpiMjV6ZENCelkyRnNaVWx1VUc5c2FXTjVJRDBnS0NncElEMCtJSHRjYmlBZ0lDQnpkMmwwWTJnZ0tHRjBkSEpwWW5WMFpYTXVhMlZsY0VGemNHVmpkRkpoZEdsdlVHOXNhV041S1NCN1hHNGdJQ0FnSUNCallYTmxJQ2R1YjNSZmJHRnlaMlZ5SnpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGMGRISnBZblYwWlhNdVlYaGxjeTVzWlc1bmRHZ2dQaUF3SUQ4Z1RXRjBhQzV0YVc0b0xpNHVZWFIwY21saWRYUmxjeTVoZUdWekxtMWhjQ2hwSUQwK0lITmpZV3hsYzF0cFhTa3NJRTUxYldKbGNpNU5RVmhmVmtGTVZVVXBJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnVFdGMGFDNXRhVzRvTGk0dWMyTmhiR1Z6TENCT2RXMWlaWEl1VFVGWVgxWkJURlZGS1R0Y2JpQWdJQ0FnSUdOaGMyVWdKMjV2ZEY5emJXRnNiR1Z5SnpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGMGRISnBZblYwWlhNdVlYaGxjeTVzWlc1bmRHZ2dQaUF3SUQ4Z1RXRjBhQzV0WVhnb0xpNHVZWFIwY21saWRYUmxjeTVoZUdWekxtMWhjQ2hwSUQwK0lITmpZV3hsYzF0cFhTa3NJRTUxYldKbGNpNU5TVTVmVmtGTVZVVXBJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnVFdGMGFDNXRZWGdvTGk0dWMyTmhiR1Z6TENCT2RXMWlaWEl1VFVsT1gxWkJURlZGS1R0Y2JpQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnUzJWbGNDQmhjM0JsWTNRZ2NtRjBhVzhnY0c5c2FXTjVJQ1I3WVhSMGNtbGlkWFJsY3k1clpXVndRWE53WldOMFVtRjBhVzlRYjJ4cFkzbDlJR2x6SUc1dmRDQnpkWEJ3YjNKMFpXUmdLVHRjYmlBZ0lDQjlYRzRnSUgwcEtDazdYRzRnSUhOallXeGxjeTVtYVd4c0tERXVNQ3dnTUN3Z2MyTmhiR1Z6TG14bGJtZDBhQ2s3WEc0Z0lHTnZibk4wSUdGa2FuVnpkR1ZrVDNWMGNIVjBVMmhoY0dVZ1BTQnBibkIxZEZOb1lYQmxMbk5zYVdObEtDazdYRzRnSUdsbUlDaGhkSFJ5YVdKMWRHVnpMbUY0WlhNdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lHRjBkSEpwWW5WMFpYTXVZWGhsY3k1bWIzSkZZV05vS0NoMktTQTlQaUJ6WTJGc1pYTmJkbDBnUFNCelkyRnNaVWx1VUc5c2FXTjVLVHRjYmlBZ0lDQmhkSFJ5YVdKMWRHVnpMbUY0WlhNdVptOXlSV0ZqYUNnb2Rpa2dQVDRnWVdScWRYTjBaV1JQZFhSd2RYUlRhR0Z3WlZ0MlhTQTlJRTFoZEdndWNtOTFibVFvYVc1d2RYUlRhR0Z3WlZ0MlhTQXFJSE5qWVd4bGMxdDJYU2twTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhOallXeGxjeTVtYVd4c0tITmpZV3hsU1c1UWIyeHBZM2tzSURBc0lITmpZV3hsY3k1c1pXNW5kR2dwTzF4dUlDQWdJR0ZrYW5WemRHVmtUM1YwY0hWMFUyaGhjR1V1Wm05eVJXRmphQ2dvZGl3Z2FTa2dQVDRnWVdScWRYTjBaV1JQZFhSd2RYUlRhR0Z3WlZ0cFhTQTlJRTFoZEdndWNtOTFibVFvZGlBcUlITmpZV3hsYzF0cFhTa3BPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQmhaR3AxYzNSbFpFOTFkSEIxZEZOb1lYQmxPMXh1ZlR0Y2JseHVZMjl1YzNRZ1kyRnNZM1ZzWVhSbFQzSnBaMmx1WVd4SmJtUnBZMlZ6Um5KdmJVOTFkSEIxZEVsdVpHbGpaWE1nUFZ4dUlDQWdJQ2h2ZFhSd2RYUTZJRWx1WkdsalpYTklaV3h3WlhJc0lHbHVjSFYwVTJoaGNHVTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0J2ZFhSd2RYUlRhR0Z3WlRvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwc0lITmpZV3hsYzB4bGJtZDBhRG9nYm5WdFltVnlMRnh1SUNBZ0lDQnliMmxNWlc1bmRHZzZJRzUxYldKbGNpazZJSE4wY21sdVp5QTlQaUJnWEc0Z0lDQWdabTRnWTJGc1kzVnNZWFJsVDNKcFoybHVZV3hKYm1ScFkyVnpSbkp2YlU5MWRIQjFkRWx1WkdsalpYTW9iM1YwY0hWMFgybHVaR2xqWlhNNklDUjdiM1YwY0hWMExuUjVjR1V1YVc1a2FXTmxjMzBwSUMwK0lHRnljbUY1UENSN1hHNGdJQ0FnSUNBZ0lHOTFkSEIxZEM1MGVYQmxMblpoYkhWbGZTd2dKSHR2ZFhSd2RYUlRhR0Z3WlM1c1pXNW5kR2g5UGlCN1hHNGdJQ0FnSUNCMllYSWdiM0pwWjJsdVlXeGZhVzVrYVdObGN6b2dZWEp5WVhrOEpIdHZkWFJ3ZFhRdWRIbHdaUzUyWVd4MVpYMHNJQ1I3YjNWMGNIVjBVMmhoY0dVdWJHVnVaM1JvZlQ0N1hHNGdJQ0FnSUNCbWIzSWdLSFpoY2lCcE9uVXpNaUE5SURBN0lHa2dQQ0FrZTI5MWRIQjFkRk5vWVhCbExteGxibWQwYUgwN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNCMllYSWdiM1YwY0hWMFgybHVaR1Y0SUQwZ0pIdHZkWFJ3ZFhRdWFXNWthV05sYzBkbGRDZ25iM1YwY0hWMFgybHVaR2xqWlhNbkxDQW5hU2NwZlR0Y2JpQWdJQ0FnSUNBZ2RtRnlJSE5qWVd4bElEMGdKSHRuWlhSRmJHVnRaVzUwUVhRb0ozVnVhV1p2Y20xekxuTmpZV3hsY3ljc0lDZHBKeXdnYzJOaGJHVnpUR1Z1WjNSb0tYMDdYRzRnSUNBZ0lDQWdJSFpoY2lCeWIybGZiRzkzSUQwZ0pIdG5aWFJGYkdWdFpXNTBRWFFvSjNWdWFXWnZjbTF6TG5KdmFTY3NJQ2RwSnl3Z2NtOXBUR1Z1WjNSb0tYMDdYRzRnSUNBZ0lDQWdJSFpoY2lCeWIybGZhR2tnUFNBa2UyZGxkRVZzWlcxbGJuUkJkQ2duZFc1cFptOXliWE11Y205cEp5d2dZR2tnS3lBa2UybHVjSFYwVTJoaGNHVXViR1Z1WjNSb2ZXQXNJSEp2YVV4bGJtZDBhQ2w5TzF4dUlDQWdJQ0FnSUNCcFppQW9jMk5oYkdVZ1BUMGdNUzR3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiM0pwWjJsdVlXeGZhVzVrYVdObGMxdHBYU0E5SUNSN2IzVjBjSFYwTG5SNWNHVXVkbUZzZFdWOUtHOTFkSEIxZEY5cGJtUmxlQ2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RtRnlJR2x1Y0hWMFgzTm9ZWEJsWDJrZ1BTQWtlMmRsZEVWc1pXMWxiblJCZENnbmRXNXBabTl5YlhNdWFXNXdkWFJmYzJoaGNHVW5MQ0FuYVNjc0lHbHVjSFYwVTJoaGNHVXViR1Z1WjNSb0tYMDdYRzRnSUNBZ0lDQWdJQ0FnZG1GeUlHOTFkSEIxZEY5emFHRndaVjlwSUQwZ0pIdG5aWFJGYkdWdFpXNTBRWFFvSjNWdWFXWnZjbTF6TG05MWRIQjFkRjl6YUdGd1pTY3NJQ2RwSnl3Z2IzVjBjSFYwVTJoaGNHVXViR1Z1WjNSb0tYMDdYRzRnSUNBZ0lDQWdJQ0FnYjNKcFoybHVZV3hmYVc1a2FXTmxjMXRwWFNBOUlHZGxkRTl5YVdkcGJtRnNRMjl2Y21ScGJtRjBaVVp5YjIxU1pYTnBlbVZrUTI5dmNtUnBibUYwWlNodmRYUndkWFJmYVc1a1pYZ3NJSE5qWVd4bExDQnZkWFJ3ZFhSZmMyaGhjR1ZmYVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2x1Y0hWMFgzTm9ZWEJsWDJrc0lISnZhVjlzYjNjc0lISnZhVjlvYVNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCdmNtbG5hVzVoYkY5cGJtUnBZMlZ6TzF4dUlDQWdJSDFnTzF4dVhHNWpiMjV6ZENCallXeGpkV3hoZEdWSmJuQjFkRWx1WkdsalpYTkdjbTl0VDNWMGNIVjBTVzVrYVdObGN5QTlYRzRnSUNBZ0tHbHVjSFYwT2lCSmJtUnBZMlZ6U0dWc2NHVnlMQ0J2ZFhSd2RYUTZJRWx1WkdsalpYTklaV3h3WlhJc0lHbHVjSFYwVTJoaGNHVTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0J2ZFhSd2RYUlRhR0Z3WlRvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwc1hHNGdJQ0FnSUhOallXeGxjMHhsYm1kMGFEb2diblZ0WW1WeUxDQnliMmxNWlc1bmRHZzZJRzUxYldKbGNpd2dkWE5sUlhoMGNtRndiMnhoZEdsdmJqb2dZbTl2YkdWaGJpazZJSE4wY21sdVp5QTlQaUJnWEc0Z0lDQWdabTRnWTJGc1kzVnNZWFJsU1c1d2RYUkpibVJwWTJWelJuSnZiVTkxZEhCMWRFbHVaR2xqWlhNb2IzVjBjSFYwWDJsdVpHbGpaWE02SUNSN2IzVjBjSFYwTG5SNWNHVXVhVzVrYVdObGMzMHBJQzArSUNSN2FXNXdkWFF1ZEhsd1pTNXBibVJwWTJWemZTQjdYRzRnSUNBZ0lDQjJZWElnYVc1d2RYUmZhVzVrYVdObGN6b2dKSHRwYm5CMWRDNTBlWEJsTG1sdVpHbGpaWE45TzF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVRwMU16SWdQU0F3T3lCcElEd2dKSHR2ZFhSd2RYUlRhR0Z3WlM1c1pXNW5kR2g5T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHOTFkSEIxZEY5cGJtUmxlQ0E5SUNSN2IzVjBjSFYwTG1sdVpHbGpaWE5IWlhRb0oyOTFkSEIxZEY5cGJtUnBZMlZ6Snl3Z0oya25LWDA3WEc0Z0lDQWdJQ0FnSUhaaGNpQnBibkIxZEY5cGJtUmxlRG9nZFRNeU8xeHVJQ0FnSUNBZ0lDQjJZWElnYzJOaGJHVWdQU0FrZTJkbGRFVnNaVzFsYm5SQmRDZ25kVzVwWm05eWJYTXVjMk5oYkdWekp5d2dKMmtuTENCelkyRnNaWE5NWlc1bmRHZ3BmVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tITmpZV3hsSUQwOUlERXVNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbHVjSFYwWDJsdVpHVjRJRDBnYjNWMGNIVjBYMmx1WkdWNE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCeWIybGZiRzkzSUQwZ0pIdG5aWFJGYkdWdFpXNTBRWFFvSjNWdWFXWnZjbTF6TG5KdmFTY3NJQ2RwSnl3Z2NtOXBUR1Z1WjNSb0tYMDdYRzRnSUNBZ0lDQWdJQ0FnZG1GeUlISnZhVjlvYVNBOUlDUjdaMlYwUld4bGJXVnVkRUYwS0NkMWJtbG1iM0p0Y3k1eWIya25MQ0JnYVNBcklDUjdhVzV3ZFhSVGFHRndaUzVzWlc1bmRHaDlZQ3dnY205cFRHVnVaM1JvS1gwN1hHNGdJQ0FnSUNBZ0lDQWdkbUZ5SUdsdWNIVjBYM05vWVhCbFgya2dQU0FrZTJkbGRFVnNaVzFsYm5SQmRDZ25kVzVwWm05eWJYTXVhVzV3ZFhSZmMyaGhjR1VuTENBbmFTY3NJR2x1Y0hWMFUyaGhjR1V1YkdWdVozUm9LWDA3WEc0Z0lDQWdJQ0FnSUNBZ2RtRnlJRzkxZEhCMWRGOXphR0Z3WlY5cElEMGdKSHRuWlhSRmJHVnRaVzUwUVhRb0ozVnVhV1p2Y20xekxtOTFkSEIxZEY5emFHRndaU2NzSUNkcEp5d2diM1YwY0hWMFUyaGhjR1V1YkdWdVozUm9LWDA3WEc0Z0lDQWdJQ0FnSUNBZ2RtRnlJRzl5YVdkcGJtRnNYMmxrZUNBOUlHZGxkRTl5YVdkcGJtRnNRMjl2Y21ScGJtRjBaVVp5YjIxU1pYTnBlbVZrUTI5dmNtUnBibUYwWlNodmRYUndkWFJmYVc1a1pYZ3NJSE5qWVd4bExDQnZkWFJ3ZFhSZmMyaGhjR1ZmYVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHVjSFYwWDNOb1lYQmxYMmtzSUhKdmFWOXNiM2NzSUhKdmFWOW9hU2s3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLQ0VrZTNWelpVVjRkSEpoY0c5c1lYUnBiMjU5SUh4OElDaHZjbWxuYVc1aGJGOXBaSGdnUGowZ01DQW1KaUJ2Y21sbmFXNWhiRjlwWkhnZ1BDQWtlMjkxZEhCMWRDNTBlWEJsTG5aaGJIVmxmU2hwYm5CMWRGOXphR0Z3WlY5cEtTa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h2Y21sbmFXNWhiRjlwWkhnZ1BDQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR2x1Y0hWMFgybHVaR1Y0SUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2IzSnBaMmx1WVd4ZmFXUjRJRDRnSkh0dmRYUndkWFF1ZEhsd1pTNTJZV3gxWlgwb2FXNXdkWFJmYzJoaGNHVmZhU0F0SURFcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHVjSFYwWDJsdVpHVjRJRDBnYVc1d2RYUmZjMmhoY0dWZmFTQXRJREU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJuQjFkRjlwYm1SbGVDQTlJSFV6TWloblpYUk9aV0Z5WlhOMFVHbDRaV3hHY205dFQzSnBaMmx1WVd3b2IzSnBaMmx1WVd4ZmFXUjRMQ0J6WTJGc1pTQThJREVwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhVzV3ZFhSZmFXNWtaWGdnUFNCMU16SW9iM0pwWjJsdVlXeGZhV1I0S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSkh0cGJuQjFkQzVwYm1ScFkyVnpVMlYwS0NkcGJuQjFkRjlwYm1ScFkyVnpKeXdnSjJrbkxDQW5JR2x1Y0hWMFgybHVaR1Y0SnlsOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCeVpYUjFjbTRnYVc1d2RYUmZhVzVrYVdObGN6dGNiaUFnSUNCOVlEdGNibU52Ym5OMElHTm9aV05yU1c1d2RYUkpibVJwWTJWeklEMGdLR2x1Y0hWME9pQkpibVJwWTJWelNHVnNjR1Z5TENCcGJuQjFkRk5vWVhCbE9pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhTazZJSE4wY21sdVp5QTlQaUJnWEc0Z0lDQWdabTRnWTJobFkydEpibkIxZEVsdVpHbGpaWE1vYVc1d2RYUmZhVzVrYVdObGN6b2dKSHRwYm5CMWRDNTBlWEJsTG1sdVpHbGpaWE45S1NBdFBpQmliMjlzSUh0Y2JpQWdJQ0FnSUdadmNpQW9kbUZ5SUdrNmRUTXlJRDBnTURzZ2FTQThJQ1I3YVc1d2RYUlRhR0Z3WlM1c1pXNW5kR2g5T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHbHVjSFYwWDJsdVpHVjRJRDBnSkh0cGJuQjFkQzVwYm1ScFkyVnpSMlYwS0NkcGJuQjFkRjlwYm1ScFkyVnpKeXdnSjJrbktYMDdYRzRnSUNBZ0lDQWdJR2xtSUNocGJuQjFkRjlwYm1SbGVDQThJREFnZkh3Z2FXNXdkWFJmYVc1a1pYZ2dQajBnSkh0blpYUkZiR1Z0Wlc1MFFYUW9KM1Z1YVdadmNtMXpMbWx1Y0hWMFgzTm9ZWEJsSnl3Z0oya25MQ0JwYm5CMWRGTm9ZWEJsTG14bGJtZDBhQ2w5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnSUNCOVlEdGNibHh1WTI5dWMzUWdjMlYwUTJoaGJtNWxiRUZ1WkVKaGRHTm9TVzVrYVdObGN5QTlYRzRnSUNBZ0tHbHVjSFYwT2lCSmJtUnBZMlZ6U0dWc2NHVnlMQ0JqYUdGdWJtVnNTV1I0T2lCdWRXMWlaWElzSUdKaGRHTm9TV1I0T2lCdWRXMWlaWElzSUhOd1lXTnBZV3hFYVcxek9pQnVkVzFpWlhJcE9pQnpkSEpwYm1jZ1BUNWNiaUFnSUNBZ0lDQWdhVzV3ZFhRdWNtRnVheUErSUhOd1lXTnBZV3hFYVcxeklEOGdZRnh1SUNBZ0lDUjdhVzV3ZFhRdWFXNWthV05sYzFObGRDZ25hVzV3ZFhSZmFXNWthV05sY3ljc0lHTm9ZVzV1Wld4SlpIZ3NJQ2RqYUdGdWJtVnNKeWw5TzF4dUlDQWdJQ1I3YVc1d2RYUXVhVzVrYVdObGMxTmxkQ2duYVc1d2RYUmZhVzVrYVdObGN5Y3NJR0poZEdOb1NXUjRMQ0FuWW1GMFkyZ25LWDA3WEc1Z0lEcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKeWM3WEc1Y2JtTnZibk4wSUdKcGJHbHVaV0Z5U1c1MFpYSndiMnhoZEdsdmJpQTlYRzRnSUNBZ0tHbHVjSFYwT2lCSmJtUnBZMlZ6U0dWc2NHVnlMQ0J2ZFhSd2RYUTZJRWx1WkdsalpYTklaV3h3WlhJc0lHbHVjSFYwVTJoaGNHVTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0IxYzJWRmVIUnlZWEJ2YkdGMGFXOXVPaUJpYjI5c1pXRnVMRnh1SUNBZ0lDQmxlSFJ5WVhCdmJHRjBhVzl1Vm1Gc2RXVTZJRzUxYldKbGNpazZJSE4wY21sdVp5QTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQnBjMDVqYUhjZ1BTQjBjblZsTzF4dUlDQWdJQ0FnWTI5dWMzUWdXMkpoZEdOb1NXUjRMQ0JvWldsbmFIUkpaSGdzSUhkcFpIUm9TV1I0TENCamFHRnVibVZzU1dSNFhTQTlYRzRnSUNBZ0lDQWdJQ0FnYVc1d2RYUlRhR0Z3WlM1c1pXNW5kR2dnUFQwOUlESWdQeUJiTFRFc0lEQXNJREVzSUMweFhTQTZJQ2hwYzA1amFIY2dQeUJiTUN3Z01pd2dNeXdnTVYwZ09pQmJNQ3dnTVN3Z01pd2dNMTBwTzF4dUlDQWdJQ0FnWTI5dWMzUWdaRlI1Y0dVZ1BTQnBibkIxZEM1MGVYQmxMblpoYkhWbE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdCY2JpQWdJQ0JtYmlCblpYUkpibkIxZEZaaGJIVmxLR0poZEdOb09pQjFNeklzSUdOb1lXNXVaV3c2SUhVek1pd2djbTkzT2lCMU16SXNJR052YkRvZ2RUTXlLU0F0UGlBa2UyUlVlWEJsZlNCN1hHNGdJQ0FnSUNCMllYSWdhVzV3ZFhSZmFXNWthV05sY3pvZ0pIdHBibkIxZEM1MGVYQmxMbWx1WkdsalpYTjlPMXh1SUNBZ0lDQWdKSHRwYm5CMWRDNXBibVJwWTJWelUyVjBLQ2RwYm5CMWRGOXBibVJwWTJWekp5d2dhR1ZwWjJoMFNXUjRMQ0JnYldGNEtEQXNJRzFwYmloeWIzY3NJQ1I3YVc1d2RYUlRhR0Z3WlZ0b1pXbG5hSFJKWkhoZGZTQXRJREVwS1dBcGZUdGNiaUFnSUNBZ0lDUjdhVzV3ZFhRdWFXNWthV05sYzFObGRDZ25hVzV3ZFhSZmFXNWthV05sY3ljc0lIZHBaSFJvU1dSNExDQmdiV0Y0S0RBc0lHMXBiaWhqYjJ3c0lDUjdhVzV3ZFhSVGFHRndaVnQzYVdSMGFFbGtlRjE5SUMwZ01Ta3BZQ2w5TzF4dUlDQWdJQ0FnSkh0elpYUkRhR0Z1Ym1Wc1FXNWtRbUYwWTJoSmJtUnBZMlZ6S0dsdWNIVjBMQ0JqYUdGdWJtVnNTV1I0TENCaVlYUmphRWxrZUN3Z01pbDlYRzRnSUNBZ0lDQnlaWFIxY200Z0pIdHBibkIxZEM1blpYUkNlVWx1WkdsalpYTW9KMmx1Y0hWMFgybHVaR2xqWlhNbktYMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1ptNGdZbWxzYVc1bFlYSkpiblJsY25CdmJHRjBhVzl1S0c5MWRIQjFkRjlwYm1ScFkyVnpPaUFrZTI5MWRIQjFkQzUwZVhCbExtbHVaR2xqWlhOOUtTQXRQaUFrZTJSVWVYQmxmU0I3WEc0Z0lDQWdJQ0IyWVhJZ2IzSnBaMmx1WVd4SmJtUnBZMlZ6SUQwZ1kyRnNZM1ZzWVhSbFQzSnBaMmx1WVd4SmJtUnBZMlZ6Um5KdmJVOTFkSEIxZEVsdVpHbGpaWE1vYjNWMGNIVjBYMmx1WkdsalpYTXBPMXh1SUNBZ0lDQWdkbUZ5SUhKdmR6b2tlMlJVZVhCbGZTQTlJRzl5YVdkcGJtRnNTVzVrYVdObGMxc2tlMmhsYVdkb2RFbGtlSDFkTzF4dUlDQWdJQ0FnZG1GeUlHTnZiRG9rZTJSVWVYQmxmU0E5SUc5eWFXZHBibUZzU1c1a2FXTmxjMXNrZTNkcFpIUm9TV1I0ZlYwN1hHNGdJQ0FnSUNBa2UxeHVJQ0FnSUNBZ0lDQWdJSFZ6WlVWNGRISmhjRzlzWVhScGIyNGdQMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmdhV1lnS0hKdmR5QThJREFnZkh3Z2NtOTNJRDRnS0NSN2FXNXdkWFJUYUdGd1pWdG9aV2xuYUhSSlpIaGRmU0F0SURFcElIeDhJR052YkNBOElEQWdmSHdnWTI5c0lENGdLQ1I3YVc1d2RYUlRhR0Z3WlZ0M2FXUjBhRWxrZUYxOUlDMGdNU2twSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUNSN1pYaDBjbUZ3YjJ4aGRHbHZibFpoYkhWbGZUdGNiaUFnSUNBZ0lIMWdJRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdKeWQ5TzF4dUlDQWdJQ0FnY205M0lEMGdiV0Y0S0RBc0lHMXBiaWh5YjNjc0lDUjdhVzV3ZFhSVGFHRndaVnRvWldsbmFIUkpaSGhkZlNBdElERXBLVHRjYmlBZ0lDQWdJR052YkNBOUlHMWhlQ2d3TENCdGFXNG9ZMjlzTENBa2UybHVjSFYwVTJoaGNHVmJkMmxrZEdoSlpIaGRmU0F0SURFcEtUdGNiaUFnSUNBZ0lIWmhjaUJ5YjNjeE9pQjFNeklnUFNCMU16SW9jbTkzS1R0Y2JpQWdJQ0FnSUhaaGNpQmpiMnd4T2lCMU16SWdQU0IxTXpJb1kyOXNLVHRjYmlBZ0lDQWdJSFpoY2lCeWIzY3lPaUIxTXpJZ1BTQjFNeklvY205M0lDc2dNU2s3WEc0Z0lDQWdJQ0IyWVhJZ1kyOXNNam9nZFRNeUlEMGdkVE15S0dOdmJDQXJJREVwTzF4dUlDQWdJQ0FnZG1GeUlHTm9ZVzV1Wld3NklIVXpNaUE5SUNSN2FXNXdkWFJUYUdGd1pTNXNaVzVuZEdnZ1BpQXlJRDhnWUhVek1paHZjbWxuYVc1aGJFbHVaR2xqWlhOYkpIdGphR0Z1Ym1Wc1NXUjRmVjBwWUNBNklDY3dKMzA3WEc0Z0lDQWdJQ0IyWVhJZ1ltRjBZMmc2SUhVek1pQTlJQ0FrZTJsdWNIVjBVMmhoY0dVdWJHVnVaM1JvSUQ0Z01pQS9JR0IxTXpJb2IzSnBaMmx1WVd4SmJtUnBZMlZ6V3lSN1ltRjBZMmhKWkhoOVhTbGdJRG9nSnpBbmZUdGNiaUFnSUNBZ0lIWmhjaUI0TVRFNklDUjdaRlI1Y0dWOUlEMGdaMlYwU1c1d2RYUldZV3gxWlNoaVlYUmphQ3dnWTJoaGJtNWxiQ3dnY205M01Td2dZMjlzTVNrN1hHNGdJQ0FnSUNCMllYSWdlREV5T2lBa2UyUlVlWEJsZlNBOUlHZGxkRWx1Y0hWMFZtRnNkV1VvWW1GMFkyZ3NJR05vWVc1dVpXd3NJSEp2ZHpFc0lHTnZiRElwTzF4dUlDQWdJQ0FnZG1GeUlIZ3lNVG9nSkh0a1ZIbHdaWDBnUFNCblpYUkpibkIxZEZaaGJIVmxLR0poZEdOb0xDQmphR0Z1Ym1Wc0xDQnliM2N5TENCamIyd3hLVHRjYmlBZ0lDQWdJSFpoY2lCNE1qSTZJQ1I3WkZSNWNHVjlJRDBnWjJWMFNXNXdkWFJXWVd4MVpTaGlZWFJqYUN3Z1kyaGhibTVsYkN3Z2NtOTNNaXdnWTI5c01pazdYRzRnSUNBZ0lDQjJZWElnWkhneE9pQWtlMlJVZVhCbGZTQTlJR0ZpY3loeWIzY2dMU0FrZTJSVWVYQmxmU2h5YjNjeEtTazdYRzRnSUNBZ0lDQjJZWElnWkhneU9pQWtlMlJVZVhCbGZTQTlJR0ZpY3lna2UyUlVlWEJsZlNoeWIzY3lLU0F0SUhKdmR5azdYRzRnSUNBZ0lDQjJZWElnWkhreE9pQWtlMlJVZVhCbGZTQTlJR0ZpY3loamIyd2dMU0FrZTJSVWVYQmxmU2hqYjJ3eEtTazdYRzRnSUNBZ0lDQjJZWElnWkhreU9pQWtlMlJVZVhCbGZTQTlJR0ZpY3lna2UyUlVlWEJsZlNoamIyd3lLU0F0SUdOdmJDazdYRzRnSUNBZ0lDQnBaaUFvY205M01TQTlQU0J5YjNjeUtTQjdYRzRnSUNBZ0lDQWdJR1I0TVNBOUlEQXVOVHRjYmlBZ0lDQWdJQ0FnWkhneUlEMGdNQzQxTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tHTnZiREVnUFQwZ1kyOXNNaWtnZTF4dUlDQWdJQ0FnSUNCa2VURWdQU0F3TGpVN1hHNGdJQ0FnSUNBZ0lHUjVNaUE5SURBdU5UdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlBb2VERXhJQ29nWkhneUlDb2daSGt5SUNzZ2VERXlJQ29nWkhneUlDb2daSGt4SUNzZ2VESXhJQ29nWkhneElDb2daSGt5SUNzZ2VESXlJQ29nWkhneElDb2daSGt4S1R0Y2JpQWdJQ0I5WUR0Y2JpQWdJQ0I5TzF4dVhHNWpiMjV6ZENCaWFXTjFZbWxqU1c1MFpYSndiMnhoZEdsdmJpQTlYRzRnSUNBZ0tHbHVjSFYwT2lCSmJtUnBZMlZ6U0dWc2NHVnlMQ0J2ZFhSd2RYUTZJRWx1WkdsalpYTklaV3h3WlhJc0lHbHVjSFYwVTJoaGNHVTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0J2ZFhSd2RYUlRhR0Z3WlRvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwc1hHNGdJQ0FnSUhOallXeGxjem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBzSUhKdmFUb2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHNJR04xWW1salEyOWxabVpCT2lCdWRXMWlaWElzSUhWelpVVjRkSEpoY0c5c1lYUnBiMjQ2SUdKdmIyeGxZVzRzWEc0Z0lDQWdJR1Y0ZEhKaGNHOXNZWFJwYjI1V1lXeDFaVG9nYm5WdFltVnlMQ0JsZUdOc2RXUmxUM1YwYzJsa1pUb2dZbTl2YkdWaGJpazZJSE4wY21sdVp5QTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQnBjekpFSUQwZ2FXNXdkWFJUYUdGd1pTNXNaVzVuZEdnZ1BUMDlJREk3WEc0Z0lDQWdJQ0JqYjI1emRDQnBjMDVqYUhjZ1BTQjBjblZsTzF4dUlDQWdJQ0FnWTI5dWMzUWdXMmhsYVdkb2RFbGtlQ3dnZDJsa2RHaEpaSGhkSUQwZ2FYTXlSQ0EvSUZzd0xDQXhYU0E2SUdselRtTm9keUEvSUZzeUxDQXpYU0E2SUZzeExDQXlYVHRjYmlBZ0lDQWdJR052Ym5OMElHUlVlWEJsSUQwZ2FXNXdkWFF1ZEhsd1pTNTJZV3gxWlR0Y2JpQWdJQ0FnSUdOdmJuTjBJR055WldGMFpVTjFZbWxqU1c1MFpYSndiMnhoZEdsdmJrWjFibU4wYVc5dUlEMGdLR2xrZURvZ2JuVnRZbVZ5S1RvZ2MzUnlhVzVuSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1pHbHlaV04wYVc5dUlEMGdhV1I0SUQwOVBTQm9aV2xuYUhSSlpIZ2dQeUFuY205M0p5QTZJQ2RqYjJ3bk8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lGeHVJQ0FnSUNBZ1ptNGdKSHRrYVhKbFkzUnBiMjU5UTNWaWFXTkpiblJsY25CdmJHRjBhVzl1S0dsdWNIVjBYMmx1WkdsalpYTTZJQ1I3YVc1d2RYUXVkSGx3WlM1cGJtUnBZMlZ6ZlN3Z2IzVjBjSFYwWDJsdVpHbGpaWE02SUNSN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J2ZFhSd2RYUXVkSGx3WlM1cGJtUnBZMlZ6ZlNrZ0xUNGdKSHRrVkhsd1pYMGdlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2IzVjBjSFYwWDJsdVpHVjRJRDBnSkh0dmRYUndkWFF1YVc1a2FXTmxjMGRsZENnbmIzVjBjSFYwWDJsdVpHbGpaWE1uTENCcFpIZ3BmVHRjYmlBZ0lDQWdJQ0FnZG1GeUlHOXlhV2RwYm1Gc1NXUjRPaUFrZTJSVWVYQmxmU0E5SUdkbGRFOXlhV2RwYm1Gc1EyOXZjbVJwYm1GMFpVWnliMjFTWlhOcGVtVmtRMjl2Y21ScGJtRjBaU2h2ZFhSd2RYUmZhVzVrWlhnc0lDUjdjMk5oYkdWelcybGtlRjE5TEZ4dUlDQWdJQ0FnSUNBa2UyOTFkSEIxZEZOb1lYQmxXMmxrZUYxOUxDQWtlMmx1Y0hWMFUyaGhjR1ZiYVdSNFhYMHNJQ1I3Y205cFcybGtlRjE5TENBa2UzSnZhVnRwWkhoZGZTQXJJQ1I3YVc1d2RYUlRhR0Z3WlM1c1pXNW5kR2g5S1R0Y2JpQWdJQ0FnSUNBZ2RtRnlJR1p5WVdOMFQzSnBaMmx1WVd4SlpIZzZJQ1I3WkZSNWNHVjlJRDBnYjNKcFoybHVZV3hKWkhnZ0xTQm1iRzl2Y2lodmNtbG5hVzVoYkVsa2VDazdYRzRnSUNBZ0lDQWdJSFpoY2lCamIyVm1jeUE5SUdkbGRFTjFZbWxqU1c1MFpYSndiMnhoZEdsdmJrTnZaV1p6S0daeVlXTjBUM0pwWjJsdVlXeEpaSGdwTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2drZTNWelpVVjRkSEpoY0c5c1lYUnBiMjU5SUNZbUlDaHZjbWxuYVc1aGJFbGtlQ0E4SURBZ2ZId2diM0pwWjJsdVlXeEpaSGdnUGlBb0pIdHBibkIxZEZOb1lYQmxXMmxrZUYxOUlDMGdNU2twS1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDUjdaWGgwY21Gd2IyeGhkR2x2YmxaaGJIVmxmVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCMllYSWdaR0YwWVRvZ1lYSnlZWGs4Skh0a1ZIbHdaWDBzSURRK0lEMGdZWEp5WVhrOEpIdGtWSGx3Wlgwc0lEUStLREF1TUN3Z01DNHdMQ0F3TGpBc0lEQXVNQ2s3WEc0Z0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUdrNklHa3pNaUE5SUMweE95QnBJRHdnTXpzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RtRnlJQ1I3WkdseVpXTjBhVzl1ZlRvZ0pIdGtWSGx3WlgwZ1BTQnZjbWxuYVc1aGJFbGtlQ0FySUNSN1pGUjVjR1Y5S0drcE8xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNna2UyUnBjbVZqZEdsdmJuMGdQQ0F3SUh4OElDUjdaR2x5WldOMGFXOXVmU0ErUFNBa2UybHVjSFYwVTJoaGNHVmJhV1I0WFgwcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNSN0tDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvWlhoamJIVmtaVTkxZEhOcFpHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ1kyOWxabk5iYVNBcklERmRJRDBnTUM0d08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1lEdGNiaUFnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hWelpVVjRkSEpoY0c5c1lYUnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdjbVYwZFhKdUlDUjdaWGgwY21Gd2IyeGhkR2x2YmxaaGJIVmxmVHRnTzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZQ1I3WkdseVpXTjBhVzl1ZlNBOUlHMWhlQ2d3TENCdGFXNG9KSHRrYVhKbFkzUnBiMjU5TENBa2UybHVjSFYwVTJoaGNHVmJhV1I0WFgwZ0xTQXhLU2s3WUR0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBwS0NsOU8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZG1GeUlHbHVjSFYwWDJsdVpHbGpaWE5mWTI5d2VUb2dKSHRwYm5CMWRDNTBlWEJsTG1sdVpHbGpaWE45SUQwZ2FXNXdkWFJmYVc1a2FXTmxjenRjYmlBZ0lDQWdJQ0FnSUNBa2UybHVjSFYwTG1sdVpHbGpaWE5UWlhRb0oybHVjSFYwWDJsdVpHbGpaWE5mWTI5d2VTY3NJR2xrZUN3Z1lIVXpNaWdrZTJScGNtVmpkR2x2Ym4wcFlDbDlPMXh1SUNBZ0lDQWdJQ0FnSUdSaGRHRmJhU0FySURGZElEMGdKSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbGtlQ0E5UFQwZ2FHVnBaMmgwU1dSNElEOGdhVzV3ZFhRdVoyVjBRbmxKYm1ScFkyVnpLQ2RwYm5CMWRGOXBibVJwWTJWelgyTnZjSGtuS1NBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNkeWIzZERkV0pwWTBsdWRHVnljRzlzWVhScGIyNG9hVzV3ZFhSZmFXNWthV05sYzE5amIzQjVMQ0J2ZFhSd2RYUmZhVzVrYVdObGN5a25mVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWTNWaWFXTkpiblJsY25CdmJHRjBhVzl1TVVRb1pHRjBZU3dnWTI5bFpuTXBPMXh1SUNBZ0lDQWdmV0E3WEc0Z0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnWUZ4dUlDQWdJQ1I3WTNKbFlYUmxRM1ZpYVdOSmJuUmxjbkJ2YkdGMGFXOXVSblZ1WTNScGIyNG9hR1ZwWjJoMFNXUjRLWDA3WEc0Z0lDQWdKSHRqY21WaGRHVkRkV0pwWTBsdWRHVnljRzlzWVhScGIyNUdkVzVqZEdsdmJpaDNhV1IwYUVsa2VDbDlPMXh1SUNCbWJpQm5aWFJEZFdKcFkwbHVkR1Z5Y0c5c1lYUnBiMjVEYjJWbWN5aHpPaUFrZTJSVWVYQmxmU2tnTFQ0Z1lYSnlZWGs4Skh0a1ZIbHdaWDBzSURRK0lIdGNiaUFnSUNCMllYSWdZV0p6VXlBOUlHRmljeWh6S1R0Y2JpQWdJQ0IyWVhJZ1kyOWxabVp6T2lCaGNuSmhlVHdrZTJSVWVYQmxmU3dnTkQ0Z1BTQmhjbkpoZVR3a2UyUlVlWEJsZlN3Z05ENG9NQzR3TENBd0xqQXNJREF1TUN3Z01DNHdLVHRjYmlBZ0lDQjJZWElnYjI1bFRXbHVkWE5CWW5OVE9pQWtlMlJVZVhCbGZTQTlJREV1TUNBdElHRmljMU03WEc0Z0lDQWdkbUZ5SUhSM2IwMXBiblZ6UVdKelV6b2dKSHRrVkhsd1pYMGdQU0F5TGpBZ0xTQmhZbk5UTzF4dUlDQWdJSFpoY2lCdmJtVlFiSFZ6UVdKelV6b2dKSHRrVkhsd1pYMGdQU0F4TGpBZ0t5QmhZbk5UTzF4dUlDQWdJR052WldabWMxc3dYU0E5SUNnb0pIdGpkV0pwWTBOdlpXWm1RWDBnS2lCdmJtVlFiSFZ6UVdKelV5QXRJRFVnS2lBa2UyTjFZbWxqUTI5bFptWkJmU2tnS2lCdmJtVlFiSFZ6UVdKelV5QXJJRGdnS2lBa2UxeHVJQ0FnSUNBZ0lDQWdJR04xWW1salEyOWxabVpCZlNrZ0tpQnZibVZRYkhWelFXSnpVeUF0SURRZ0tpQWtlMk4xWW1salEyOWxabVpCZlR0Y2JpQWdJQ0JqYjJWbVpuTmJNVjBnUFNBb0tDUjdZM1ZpYVdORGIyVm1aa0Y5SUNzZ01pa2dLaUJoWW5OVElDMGdLQ1I3WTNWaWFXTkRiMlZtWmtGOUlDc2dNeWtwSUNvZ1lXSnpVeUFxSUdGaWMxTWdLeUF4TzF4dUlDQWdJR052WldabWMxc3lYU0E5SUNnb0pIdGpkV0pwWTBOdlpXWm1RWDBnS3lBeUtTQXFJRzl1WlUxcGJuVnpRV0p6VXlBdElDZ2tlMk4xWW1salEyOWxabVpCZlNBcklETXBLU0FxSUc5dVpVMXBiblZ6UVdKelV5QXFJRzl1WlUxcGJuVnpRV0p6VXlBcklERTdYRzRnSUNBZ1kyOWxabVp6V3pOZElEMGdLQ2drZTJOMVltbGpRMjlsWm1aQmZTQXFJSFIzYjAxcGJuVnpRV0p6VXlBdElEVWdLaUFrZTJOMVltbGpRMjlsWm1aQmZTa2dLaUIwZDI5TmFXNTFjMEZpYzFNZ0t5QTRJQ29nSkh0Y2JpQWdJQ0FnSUNBZ0lDQmpkV0pwWTBOdlpXWm1RWDBwSUNvZ2RIZHZUV2x1ZFhOQlluTlRJQzBnTkNBcUlDUjdZM1ZpYVdORGIyVm1aa0Y5TzF4dUlDQWdJSEpsZEhWeWJpQmpiMlZtWm5NN1hHNGdJSDFjYmx4dUlDQm1iaUJqZFdKcFkwbHVkR1Z5Y0c5c1lYUnBiMjR4UkNoNE9pQmhjbkpoZVR3a2UyUlVlWEJsZlN3Z05ENHNJR052Wldaek9pQmhjbkpoZVR3a2UyUlVlWEJsZlN3Z05ENHBJQzArSUNSN1pGUjVjR1Y5SUh0Y2JpQWdJQ0IyWVhJZ1kyOWxabk5UZFcwNklDUjdaRlI1Y0dWOUlEMGdZMjlsWm5OYk1GMGdLeUJqYjJWbWMxc3hYU0FySUdOdlpXWnpXekpkSUNzZ1kyOWxabk5iTTEwN1hHNGdJQ0FnY21WMGRYSnVJQ2g0V3pCZElDb2dZMjlsWm5OYk1GMGdLeUI0V3pGZElDb2dZMjlsWm5OYk1WMHJJSGhiTWwwZ0tpQmpiMlZtYzFzeVhTc2dlRnN6WFNBcUlHTnZaV1p6V3pOZEtTQXZJR052WldaelUzVnRPMXh1SUNCOVhHNWNiaUFnWm00Z1ltbGpkV0pwWTBsdWRHVnljRzlzWVhScGIyNG9iM1YwY0hWMFgybHVaR2xqWlhNNklDUjdiM1YwY0hWMExuUjVjR1V1YVc1a2FXTmxjMzBwSUMwK0lDUjdaRlI1Y0dWOUlIdGNiaUFnSUNCMllYSWdhVzV3ZFhSZmFXNWthV05sY3pvZ0pIdHBibkIxZEM1MGVYQmxMbWx1WkdsalpYTjlJRDBnYjNWMGNIVjBYMmx1WkdsalpYTTdYRzRnSUNBZ2NtVjBkWEp1SUdOdmJFTjFZbWxqU1c1MFpYSndiMnhoZEdsdmJpaHBibkIxZEY5cGJtUnBZMlZ6TENCdmRYUndkWFJmYVc1a2FXTmxjeWs3WEc0Z0lIMWNiaUFnSUNCZ08xeHVJQ0FnSUgwN1hHNWNibU52Ym5OMElIUnlhV3hwYm1WaGNrbHVkR1Z5Y0c5c1lYUnBiMjRnUFZ4dUlDQWdJQ2hwYm5CMWREb2dTVzVrYVdObGMwaGxiSEJsY2l3Z2IzVjBjSFYwT2lCSmJtUnBZMlZ6U0dWc2NHVnlMQ0JwYm5CMWRGTm9ZWEJsT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z2RYTmxSWGgwY21Gd2IyeGhkR2x2YmpvZ1ltOXZiR1ZoYml4Y2JpQWdJQ0FnWlhoMGNtRndiMnhoZEdsdmJsWmhiSFZsT2lCdWRXMWlaWElwT2lCemRISnBibWNnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYVhOT1kyaDNJRDBnZEhKMVpUdGNiaUFnSUNBZ0lHTnZibk4wSUZ0aVlYUmphRWxrZUN3Z1pHVndkR2hKWkhnc0lHaGxhV2RvZEVsa2VDd2dkMmxrZEdoSlpIZ3NJR05vWVc1dVpXeEpaSGhkSUQxY2JpQWdJQ0FnSUNBZ0lDQnBibkIxZEZOb1lYQmxMbXhsYm1kMGFDQTlQVDBnTXlBL0lGc3RNU3dnTUN3Z01Td2dNaXdnTFRGZElEb2dLR2x6VG1Ob2R5QS9JRnN3TENBeUxDQXpMQ0EwTENBeFhTQTZJRnN3TENBeExDQXlMQ0F6TENBMFhTazdYRzRnSUNBZ0lDQmpiMjV6ZENCa1ZIbHdaU0E5SUdsdWNIVjBMblI1Y0dVdWRtRnNkV1U3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZRnh1SUNBZ0lHWnVJR2RsZEVsdWNIVjBWbUZzZFdVb1ltRjBZMmc2SUhVek1pd2dZMmhoYm01bGJEb2dkVE15TENCa1pYQjBhRHAxTXpJc0lHaGxhV2RvZERvZ2RUTXlMQ0IzYVdSMGFEb2dkVE15S1NBdFBpQWtlMlJVZVhCbGZTQjdYRzRnSUNBZ0lDQjJZWElnYVc1d2RYUmZhVzVrYVdObGN6b2dKSHRwYm5CMWRDNTBlWEJsTG1sdVpHbGpaWE45TzF4dUlDQWdJQ0FnSkh0cGJuQjFkQzVwYm1ScFkyVnpVMlYwS0NkcGJuQjFkRjlwYm1ScFkyVnpKeXdnWkdWd2RHaEpaSGdzSUdCdFlYZ29NQ3dnYldsdUtHUmxjSFJvTENBa2UybHVjSFYwVTJoaGNHVmJaR1Z3ZEdoSlpIaGRmU0F0SURFcEtXQXBmVHRjYmlBZ0lDQWdJQ1I3YVc1d2RYUXVhVzVrYVdObGMxTmxkQ2duYVc1d2RYUmZhVzVrYVdObGN5Y3NJR2hsYVdkb2RFbGtlQ3dnWUcxaGVDZ3dMQ0J0YVc0b2FHVnBaMmgwTENBa2UybHVjSFYwVTJoaGNHVmJhR1ZwWjJoMFNXUjRYWDBnTFNBeEtTbGdLWDA3WEc0Z0lDQWdJQ0FrZTJsdWNIVjBMbWx1WkdsalpYTlRaWFFvSjJsdWNIVjBYMmx1WkdsalpYTW5MQ0IzYVdSMGFFbGtlQ3dnWUcxaGVDZ3dMQ0J0YVc0b2QybGtkR2dzSUNSN2FXNXdkWFJUYUdGd1pWdDNhV1IwYUVsa2VGMTlJQzBnTVNrcFlDbDlPMXh1SUNBZ0lDQWdKSHR6WlhSRGFHRnVibVZzUVc1a1FtRjBZMmhKYm1ScFkyVnpLR2x1Y0hWMExDQmphR0Z1Ym1Wc1NXUjRMQ0JpWVhSamFFbGtlQ3dnTXlsOVhHNGdJQ0FnSUNCeVpYUjFjbTRnSkh0cGJuQjFkQzVuWlhSQ2VVbHVaR2xqWlhNb0oybHVjSFYwWDJsdVpHbGpaWE1uS1gwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm00Z2RISnBiR2x1WldGeVNXNTBaWEp3YjJ4aGRHbHZiaWh2ZFhSd2RYUmZhVzVrYVdObGN6b2dKSHR2ZFhSd2RYUXVkSGx3WlM1cGJtUnBZMlZ6ZlNrZ0xUNGdKSHRrVkhsd1pYMGdlMXh1SUNBZ0lDQWdkbUZ5SUc5eWFXZHBibUZzU1c1a2FXTmxjeUE5SUdOaGJHTjFiR0YwWlU5eWFXZHBibUZzU1c1a2FXTmxjMFp5YjIxUGRYUndkWFJKYm1ScFkyVnpLRzkxZEhCMWRGOXBibVJwWTJWektUdGNiaUFnSUNBZ0lIWmhjaUJrWlhCMGFEb2tlMlJVZVhCbGZTQTlJRzl5YVdkcGJtRnNTVzVrYVdObGMxc2tlMlJsY0hSb1NXUjRmVjA3WEc0Z0lDQWdJQ0IyWVhJZ2FHVnBaMmgwT2lSN1pGUjVjR1Y5SUQwZ2IzSnBaMmx1WVd4SmJtUnBZMlZ6V3lSN2FHVnBaMmgwU1dSNGZWMDdYRzRnSUNBZ0lDQjJZWElnZDJsa2RHZzZKSHRrVkhsd1pYMGdQU0J2Y21sbmFXNWhiRWx1WkdsalpYTmJKSHQzYVdSMGFFbGtlSDFkTzF4dUlDQWdJQ0FnSkh0Y2JpQWdJQ0FnSUNBZ0lDQjFjMlZGZUhSeVlYQnZiR0YwYVc5dUlEOGdZR2xtSUNoa1pYQjBhQ0E4SURBZ2ZId2daR1Z3ZEdnZ1BpQW9KSHRwYm5CMWRGTm9ZWEJsVzJSbGNIUm9TV1I0WFgwZ0xTQXhLU0I4ZkNCb1pXbG5hSFFnUENBd0lIeDhJR2hsYVdkb2RDQStJQ2drZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVc1d2RYUlRhR0Z3WlZ0b1pXbG5hSFJKWkhoZGZTQXRJREVwSUh4OElIZHBaSFJvSUR3Z01DQjhmQ0FvZDJsa2RHZ2dQaUFrZTJsdWNIVjBVMmhoY0dWYmQybGtkR2hKWkhoZGZTQXRJREVwS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnSkh0bGVIUnlZWEJ2YkdGMGFXOXVWbUZzZFdWOU8xeHVJQ0FnSUNBZ0lDQjlZQ0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDY25mVHRjYmx4dUlDQWdJR1JsY0hSb0lEMGdiV0Y0S0RBc0lHMXBiaWhrWlhCMGFDd2dKSHRwYm5CMWRGTm9ZWEJsVzJSbGNIUm9TV1I0WFgwZ0xTQXhLU2s3WEc0Z0lDQWdJQ0JvWldsbmFIUWdQU0J0WVhnb01Dd2diV2x1S0dobGFXZG9kQ3dnSkh0cGJuQjFkRk5vWVhCbFcyaGxhV2RvZEVsa2VGMTlJQzBnTVNrcE8xeHVJQ0FnSUNBZ2QybGtkR2dnUFNCdFlYZ29NQ3dnYldsdUtIZHBaSFJvTENBa2UybHVjSFYwVTJoaGNHVmJkMmxrZEdoSlpIaGRmU0F0SURFcEtUdGNiaUFnSUNBZ0lIWmhjaUJrWlhCMGFERTZJSFV6TWlBOUlIVXpNaWhrWlhCMGFDazdYRzRnSUNBZ0lDQjJZWElnYUdWcFoyaDBNVG9nZFRNeUlEMGdkVE15S0dobGFXZG9kQ2s3WEc0Z0lDQWdJQ0IyWVhJZ2QybGtkR2d4T2lCMU16SWdQU0IxTXpJb2QybGtkR2dwTzF4dUlDQWdJQ0FnZG1GeUlHUmxjSFJvTWpvZ2RUTXlJRDBnZFRNeUtHUmxjSFJvSUNzZ01TazdYRzRnSUNBZ0lDQjJZWElnYUdWcFoyaDBNam9nZFRNeUlEMGdkVE15S0dobGFXZG9kQ0FySURFcE8xeHVJQ0FnSUNBZ2RtRnlJSGRwWkhSb01qb2dkVE15SUQwZ2RUTXlLSGRwWkhSb0lDc2dNU2s3WEc0Z0lDQWdJQ0IyWVhJZ1kyaGhibTVsYkRvZ2RUTXlJRDBnSkh0cGJuQjFkRk5vWVhCbExteGxibWQwYUNBK0lETWdQeUJnZFRNeUtHOXlhV2RwYm1Gc1NXNWthV05sYzFza2UyTm9ZVzV1Wld4SlpIaDlYU2xnSURvZ0p6QW5mVHRjYmlBZ0lDQWdJSFpoY2lCaVlYUmphRG9nZFRNeUlEMGdJQ1I3YVc1d2RYUlRhR0Z3WlM1c1pXNW5kR2dnUGlBeklEOGdZSFV6TWlodmNtbG5hVzVoYkVsdVpHbGpaWE5iSkh0aVlYUmphRWxrZUgxZEtXQWdPaUFuTUNkOU8xeHVYRzRnSUNBZ0lDQjJZWElnZURFeE1Ub2dKSHRrVkhsd1pYMGdQU0JuWlhSSmJuQjFkRlpoYkhWbEtHSmhkR05vTENCamFHRnVibVZzTENCa1pYQjBhREVzSUdobGFXZG9kREVzSUhkcFpIUm9NU2s3WEc0Z0lDQWdJQ0IyWVhJZ2VERXhNam9nSkh0a1ZIbHdaWDBnUFNCblpYUkpibkIxZEZaaGJIVmxLR0poZEdOb0xDQmphR0Z1Ym1Wc0xDQmtaWEIwYURFc0lHaGxhV2RvZERFc0lIZHBaSFJvTWlrN1hHNGdJQ0FnSUNCMllYSWdlREV5TVRvZ0pIdGtWSGx3WlgwZ1BTQm5aWFJKYm5CMWRGWmhiSFZsS0dKaGRHTm9MQ0JqYUdGdWJtVnNMQ0JrWlhCMGFERXNJR2hsYVdkb2RESXNJSGRwWkhSb01TazdYRzRnSUNBZ0lDQjJZWElnZURFeU1qb2dKSHRrVkhsd1pYMGdQU0JuWlhSSmJuQjFkRlpoYkhWbEtHSmhkR05vTENCamFHRnVibVZzTENCa1pYQjBhREVzSUdobGFXZG9kRElzSUhkcFpIUm9NaWs3WEc0Z0lDQWdJQ0IyWVhJZ2VESXhNVG9nSkh0a1ZIbHdaWDBnUFNCblpYUkpibkIxZEZaaGJIVmxLR0poZEdOb0xDQmphR0Z1Ym1Wc0xDQmtaWEIwYURJc0lHaGxhV2RvZERFc0lIZHBaSFJvTVNrN1hHNGdJQ0FnSUNCMllYSWdlREl4TWpvZ0pIdGtWSGx3WlgwZ1BTQm5aWFJKYm5CMWRGWmhiSFZsS0dKaGRHTm9MQ0JqYUdGdWJtVnNMQ0JrWlhCMGFESXNJR2hsYVdkb2RERXNJSGRwWkhSb01pazdYRzRnSUNBZ0lDQjJZWElnZURJeU1Ub2dKSHRrVkhsd1pYMGdQU0JuWlhSSmJuQjFkRlpoYkhWbEtHSmhkR05vTENCamFHRnVibVZzTENCa1pYQjBhRElzSUdobGFXZG9kRElzSUhkcFpIUm9NU2s3WEc0Z0lDQWdJQ0IyWVhJZ2VESXlNam9nSkh0a1ZIbHdaWDBnUFNCblpYUkpibkIxZEZaaGJIVmxLR0poZEdOb0xDQmphR0Z1Ym1Wc0xDQmtaWEIwYURJc0lHaGxhV2RvZERJc0lIZHBaSFJvTWlrN1hHNGdJQ0FnSUNCMllYSWdaSGd4T2lBa2UyUlVlWEJsZlNBOUlHRmljeWhrWlhCMGFDQXRJQ1I3WkZSNWNHVjlLR1JsY0hSb01Ta3BPMXh1SUNBZ0lDQWdkbUZ5SUdSNE1qb2dKSHRrVkhsd1pYMGdQU0JoWW5Nb0pIdGtWSGx3Wlgwb1pHVndkR2d5S1NBdElHUmxjSFJvS1R0Y2JpQWdJQ0FnSUhaaGNpQmtlVEU2SUNSN1pGUjVjR1Y5SUQwZ1lXSnpLR2hsYVdkb2RDQXRJQ1I3WkZSNWNHVjlLR2hsYVdkb2RERXBLVHRjYmlBZ0lDQWdJSFpoY2lCa2VUSTZJQ1I3WkZSNWNHVjlJRDBnWVdKektDUjdaRlI1Y0dWOUtHaGxhV2RvZERJcElDMGdhR1ZwWjJoMEtUdGNiaUFnSUNBZ0lIWmhjaUJrZWpFNklDUjdaRlI1Y0dWOUlEMGdZV0p6S0hkcFpIUm9JQzBnSkh0a1ZIbHdaWDBvZDJsa2RHZ3hLU2s3WEc0Z0lDQWdJQ0IyWVhJZ1pIb3lPaUFrZTJSVWVYQmxmU0E5SUdGaWN5Z2tlMlJVZVhCbGZTaDNhV1IwYURJcElDMGdkMmxrZEdncE8xeHVJQ0FnSUNBZ2FXWWdLR1JsY0hSb01TQTlQU0JrWlhCMGFESXBJSHRjYmlBZ0lDQWdJQ0FnWkhneElEMGdNQzQxTzF4dUlDQWdJQ0FnSUNCa2VESWdQU0F3TGpVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9hR1ZwWjJoME1TQTlQU0JvWldsbmFIUXlLU0I3WEc0Z0lDQWdJQ0FnSUdSNU1TQTlJREF1TlR0Y2JpQWdJQ0FnSUNBZ1pIa3lJRDBnTUM0MU8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSGRwWkhSb01TQTlQU0IzYVdSMGFESXBJSHRjYmlBZ0lDQWdJQ0FnWkhveElEMGdNQzQxTzF4dUlDQWdJQ0FnSUNCa2VqSWdQU0F3TGpVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCeVpYUjFjbTRnS0hneE1URWdLaUJrZURJZ0tpQmtlVElnS2lCa2VqSWdLeUI0TVRFeUlDb2daSGd5SUNvZ1pIa3lJQ29nWkhveElDc2dlREV5TVNBcUlHUjRNaUFxSUdSNU1TQXFaSG95SUNzZ2VERXlNaUFxSUdSNE1pQXFJR1I1TVNBcUlHUjZNU0FyWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSGd5TVRFZ0tpQmtlREVnS2lCa2VUSWdLaUJrZWpJZ0t5QjRNakV5SUNvZ1pIZ3hJQ29nWkhreUlDb2daSG94SUNzZ2VESXlNU0FxSUdSNE1TQXFJR1I1TVNBcVpIb3lJQ3NnZURJeU1pQXFJR1I0TVNBcUlHUjVNU0FxSUdSNk1TazdYRzRnSUNBZ2ZXQTdYRzRnSUNBZ2ZUdGNibHh1WTI5dWMzUWdZM0psWVhSbFVtVnphWHBsVUhKdlozSmhiVWx1Wm04Z1BWeHVJQ0FnSUNocGJuQjFkRlJsYm5OdmNqb2dWR1Z1YzI5eVZtbGxkeXdnWVhSMGNtbGlkWFJsY3pvZ1VtVnphWHBsUVhSMGNtbGlkWFJsY3l3Z2IzQnpaWFJXWlhKemFXOXVPaUJ1ZFcxaVpYSXNJSE5qWVd4bGMwbHVjSFYwT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN4Y2JpQWdJQ0FnYzJsNlpYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0J5YjJsSmJuQjFkRG9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBwT2lCUWNtOW5jbUZ0U1c1bWJ5QTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQnBibkIxZEZOb1lYQmxJRDBnYVc1d2RYUlVaVzV6YjNJdVpHbHRjenRjYmlBZ0lDQWdJR052Ym5OMElISnZhU0E5SUhWd1pHRjBaVkp2U1NoeWIybEpibkIxZEN3Z1lYUjBjbWxpZFhSbGN5NWhlR1Z6TENCcGJuQjFkRk5vWVhCbExteGxibWQwYUNrN1hHNWNiaUFnSUNBZ0lHeGxkQ0J2ZFhSd2RYUlRhR0Z3WlNBOUlHbHVhWFJQZFhSd2RYUlRhR0Z3WlNocGJuQjFkRk5vWVhCbExDQnpZMkZzWlhOSmJuQjFkQ3dnYzJsNlpYTXNJR0YwZEhKcFluVjBaWE11WVhobGN5azdYRzRnSUNBZ0lDQnNaWFFnYzJOaGJHVnpJRDBnYzJOaGJHVnpTVzV3ZFhRdWMyeHBZMlVvS1R0Y2JpQWdJQ0FnSUdsbUlDaHpZMkZzWlhOSmJuQjFkQzVzWlc1bmRHZ2dQVDA5SURBcElIdGNiaUFnSUNBZ0lDQWdjMk5oYkdWeklEMGdhVzV3ZFhSVGFHRndaUzV0WVhBb0tIWmhiSFZsTENCcGJtUmxlQ2tnUFQ0Z2RtRnNkV1VnUFQwOUlEQWdQeUF4TGpBZ09pQnZkWFJ3ZFhSVGFHRndaVnRwYm1SbGVGMGdMeUIyWVd4MVpTazdYRzRnSUNBZ0lDQWdJR2xtSUNoaGRIUnlhV0oxZEdWekxtdGxaWEJCYzNCbFkzUlNZWFJwYjFCdmJHbGplU0FoUFQwZ0ozTjBjbVYwWTJnbktTQjdYRzRnSUNBZ0lDQWdJQ0FnYjNWMGNIVjBVMmhoY0dVZ1BTQmhaR3AxYzNSUGRYUndkWFJUYUdGd1pTaHBibkIxZEZOb1lYQmxMQ0J6WTJGc1pYTXNJR0YwZEhKcFluVjBaWE1wTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCamIyNXpkQ0J2ZFhSd2RYUWdQU0J2ZFhSd2RYUldZWEpwWVdKc1pTZ25iM1YwY0hWMEp5d2dhVzV3ZFhSVVpXNXpiM0l1WkdGMFlWUjVjR1VzSUc5MWRIQjFkRk5vWVhCbExteGxibWQwYUNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRDQTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb0oybHVjSFYwSnl3Z2FXNXdkWFJVWlc1emIzSXVaR0YwWVZSNWNHVXNJR2x1Y0hWMFUyaGhjR1V1YkdWdVozUm9LVHRjYmlBZ0lDQWdJR052Ym5OMElHOTFkSEIxZEZOcGVtVWdQU0JUYUdGd1pWVjBhV3d1YzJsNlpTaHZkWFJ3ZFhSVGFHRndaU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQnViMU5qWVd4bElEMGdhVzV3ZFhSVGFHRndaUzVzWlc1bmRHZ2dQVDA5SUc5MWRIQjFkRk5vWVhCbExteGxibWQwYUNBbUppQnBibkIxZEZOb1lYQmxMbVYyWlhKNUtDaGtMQ0JwS1NBOVBpQmtJRDA5UFNCdmRYUndkWFJUYUdGd1pWdHBYU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQjFjMlZGZUhSeVlYQnZiR0YwYVc5dUlEMGdZWFIwY21saWRYUmxjeTVqYjI5eVpHbHVZWFJsVkhKaGJuTm1iM0p0VFc5a1pTQTlQVDBnSjNSbVgyTnliM0JmWVc1a1gzSmxjMmw2WlNjN1hHNGdJQ0FnSUNCamIyNXpkQ0JsZUhSeVlYQnZiR0YwYVc5dVZtRnNkV1VnUFNCaGRIUnlhV0oxZEdWekxtVjRkSEpoY0c5c1lYUnBiMjVXWVd4MVpUdGNiaUFnSUNBZ0lHTnZibk4wSUdSaGRHRlVlWEJsSUQwZ2FXNXdkWFF1ZEhsd1pTNTJZV3gxWlR0Y2JpQWdJQ0FnSUdOdmJuTjBJR2RsZEZOb1lXUmxjbE52ZFhKalpTQTlJQ2h6YUdGa1pYSklaV3h3WlhJNklGTm9ZV1JsY2tobGJIQmxjaWtnUFQ0Z1lGeHVJQ0FnSUNBZ0pIdHViMU5qWVd4bElEOGdKeWNnT2lCZ1hHNGdJQ0FnSUNBa2UyZGxkRTl5YVdkcGJtRnNRMjl2Y21ScGJtRjBaVVp5YjIxU1pYTnBlbVZrUTI5dmNtUnBibUYwWlNoaGRIUnlhV0oxZEdWekxtTnZiM0prYVc1aGRHVlVjbUZ1YzJadmNtMU5iMlJsTENCa1lYUmhWSGx3WlNsOU8xeHVJQ0FnSUNBZ0pIc29LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tHRjBkSEpwWW5WMFpYTXViVzlrWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05oYzJVZ0oyNWxZWEpsYzNRbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0JjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdKSHRqYUdWamEwbHVjSFYwU1c1a2FXTmxjeWhwYm5CMWRDd2dhVzV3ZFhSVGFHRndaU2w5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FrZTJkbGRFNWxZWEpsYzNSUWFYaGxiRVp5YjIxUGNtbG5hVzVoYkNoaGRIUnlhV0oxZEdWekxtNWxZWEpsYzNSTmIyUmxMQ0J2Y0hObGRGWmxjbk5wYjI0c0lHUmhkR0ZVZVhCbEtYMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDUjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMkZzWTNWc1lYUmxTVzV3ZFhSSmJtUnBZMlZ6Um5KdmJVOTFkSEIxZEVsdVpHbGpaWE1vWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHVjSFYwTENCdmRYUndkWFFzSUdsdWNIVjBVMmhoY0dVc0lHOTFkSEIxZEZOb1lYQmxMQ0J6WTJGc1pYTXViR1Z1WjNSb0xDQnliMmt1YkdWdVozUm9MQ0IxYzJWRmVIUnlZWEJ2YkdGMGFXOXVLWDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR0E3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0FuYkdsdVpXRnlKenBjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCZ1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNSN1kyRnNZM1ZzWVhSbFQzSnBaMmx1WVd4SmJtUnBZMlZ6Um5KdmJVOTFkSEIxZEVsdVpHbGpaWE1vYjNWMGNIVjBMQ0JwYm5CMWRGTm9ZWEJsTENCdmRYUndkWFJUYUdGd1pTd2djMk5oYkdWekxteGxibWQwYUN3Z2NtOXBMbXhsYm1kMGFDbDlPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWtleWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwYm5CMWRGTm9ZWEJsTG14bGJtZDBhQ0E5UFQwZ01pQjhmQ0JwYm5CMWRGTm9ZWEJsTG14bGJtZDBhQ0E5UFQwZ05Da2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmdKSHRpYVd4cGJtVmhja2x1ZEdWeWNHOXNZWFJwYjI0b2FXNXdkWFFzSUc5MWRIQjFkQ3dnYVc1d2RYUlRhR0Z3WlN3Z2RYTmxSWGgwY21Gd2IyeGhkR2x2Yml3Z1pYaDBjbUZ3YjJ4aGRHbHZibFpoYkhWbEtYMWdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR2x1Y0hWMFUyaGhjR1V1YkdWdVozUm9JRDA5UFNBeklIeDhJR2x1Y0hWMFUyaGhjR1V1YkdWdVozUm9JRDA5UFNBMUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHQWtlM1J5YVd4cGJtVmhja2x1ZEdWeWNHOXNZWFJwYjI0b2FXNXdkWFFzSUc5MWRIQjFkQ3dnYVc1d2RYUlRhR0Z3WlN3Z2RYTmxSWGgwY21Gd2IyeGhkR2x2Yml3Z1pYaDBjbUZ3YjJ4aGRHbHZibFpoYkhWbEtYMWdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUVWeWNtOXlLQ2RNYVc1bFlYSWdiVzlrWlNCdmJteDVJSE4xY0hCdmNuUnpJR2x1Y0hWMElHUnBiWE1nTWl3Z015d2dOQ0JoYm1RZ05TQmhjbVVnYzNWd2NHOXlkR1ZrSUdsdUlHeHBibVZoY2lCdGIyUmxMaWNwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLU2dwZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0E3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0FuWTNWaWFXTW5PbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdCY2JpQWdJQ0FnSUNBZ0lDQWdJQ1I3S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dsdWNIVjBVMmhoY0dVdWJHVnVaM1JvSUQwOVBTQXlJSHg4SUdsdWNIVjBVMmhoY0dVdWJHVnVaM1JvSUQwOVBTQTBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0FrZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmlhV04xWW1salNXNTBaWEp3YjJ4aGRHbHZiaWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2x1Y0hWMExDQnZkWFJ3ZFhRc0lHbHVjSFYwVTJoaGNHVXNJRzkxZEhCMWRGTm9ZWEJsTENCelkyRnNaWE1zSUhKdmFTd2dZWFIwY21saWRYUmxjeTVqZFdKcFkwTnZaV1ptUVN3Z2RYTmxSWGgwY21Gd2IyeGhkR2x2Yml4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdGMGRISnBZblYwWlhNdVpYaDBjbUZ3YjJ4aGRHbHZibFpoYkhWbExDQmhkSFJ5YVdKMWRHVnpMbVY0WTJ4MVpHVlBkWFJ6YVdSbEtYMWdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUVWeWNtOXlLQ2REZFdKcFl5QnRiMlJsSUc5dWJIa2djM1Z3Y0c5eWRITWdhVzV3ZFhRZ1pHbHRjeUF5SUdGdVpDQTBJR0Z5WlNCemRYQndiM0owWldRZ2FXNGdiR2x1WldGeUlHMXZaR1V1SnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDBwS0NsOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWUR0Y2JpQWdJQ0FnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dSWEp5YjNJb0owbHVkbUZzYVdRZ2NtVnphWHBsSUcxdlpHVW5LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNrb0tYMDdYRzRnSUNBZ0lDQmdmVnh1SUNBZ0lDQWdKSHRjYmlBZ0lDQWdJQ0FnSUNCemFHRmtaWEpJWld4d1pYSXVjbVZuYVhOMFpYSlZibWxtYjNKdEtDZHZkWFJ3ZFhSZmMybDZaU2NzSUNkMU16SW5LVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQXVjbVZuYVhOMFpYSlZibWxtYjNKdEtDZHpZMkZzWlhNbkxDQW5aak15Snl3Z2MyTmhiR1Z6TG14bGJtZDBhQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdMbkpsWjJsemRHVnlWVzVwWm05eWJTZ25jbTlwSnl3Z0oyWXpNaWNzSUhKdmFTNXNaVzVuZEdncFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUM1a1pXTnNZWEpsVm1GeWFXRmliR1Z6S0dsdWNIVjBMQ0J2ZFhSd2RYUXBmVnh1SUNBZ0lDQWdKSHR6YUdGa1pYSklaV3h3WlhJdWJXRnBibE4wWVhKMEtDbDlYRzRnSUNBZ0lDQWdJQ1I3YzJoaFpHVnlTR1ZzY0dWeUxtZDFZWEprUVdkaGFXNXpkRTkxZEU5bVFtOTFibVJ6VjI5eWEyZHliM1Z3VTJsNlpYTW9KM1Z1YVdadmNtMXpMbTkxZEhCMWRGOXphWHBsSnlsOVhHNGdJQ0FnSUNBZ0lDUjdibTlUWTJGc1pTQS9JQ2R2ZFhSd2RYUmJaMnh2WW1Gc1gybGtlRjBnUFNCcGJuQjFkRnRuYkc5aVlXeGZhV1I0WFRzbklEb2dZRnh1SUNBZ0lDQWdJQ0JzWlhRZ2IzVjBjSFYwWDJsdVpHbGpaWE1nUFNBa2UyOTFkSEIxZEM1dlptWnpaWFJVYjBsdVpHbGpaWE1vSjJkc2IySmhiRjlwWkhnbktYMDdYRzRnSUNBZ0lDQWdJSFpoY2lCcGJuQjFkRjlwYm1ScFkyVnpPaUFrZTJsdWNIVjBMblI1Y0dVdWFXNWthV05sYzMwN1hHNGdJQ0FnSUNBZ0lDUjdLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdjM2RwZEdOb0lDaGhkSFJ5YVdKMWRHVnpMbTF2WkdVcElIdGNiaUFnSUNBZ0lDQWdJQ0JqWVhObElDZHVaV0Z5WlhOMEp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJnYVc1d2RYUmZhVzVrYVdObGN5QTlJR05oYkdOMWJHRjBaVWx1Y0hWMFNXNWthV05sYzBaeWIyMVBkWFJ3ZFhSSmJtUnBZMlZ6S0c5MWRIQjFkRjlwYm1ScFkyVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kyaGxZMnRKYm5CMWRFbHVaR2xqWlhNb2FXNXdkWFJmYVc1a2FXTmxjeWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOTFkSEIxZEZ0bmJHOWlZV3hmYVdSNFhTQTlJQ1I3YVc1d2RYUXVaMlYwUW5sSmJtUnBZMlZ6S0NkcGJuQjFkRjlwYm1ScFkyVnpKeWw5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdmRYUndkWFJiWjJ4dlltRnNYMmxrZUYwZ1BTQWtlMkYwZEhKcFluVjBaWE11WlhoMGNtRndiMnhoZEdsdmJsWmhiSFZsZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVlEdGNiaUFnSUNBZ0lDQWdJQ0JqWVhObElDZHNhVzVsWVhJbk9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0J2ZFhSd2RYUmJaMnh2WW1Gc1gybGtlRjBnUFNBa2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDaHBibkIxZEZOb1lYQmxMbXhsYm1kMGFDQTlQVDBnTWlCOGZDQnBibkIxZEZOb1lYQmxMbXhsYm1kMGFDQTlQVDBnTkNrZ1B5QW5ZbWxzYVc1bFlYSkpiblJsY25CdmJHRjBhVzl1SnlBNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDZDBjbWxzYVc1bFlYSkpiblJsY25CdmJHRjBhVzl1SjMwb2IzVjBjSFYwWDJsdVpHbGpaWE1wTzJBN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblkzVmlhV01uT2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDZHZkWFJ3ZFhSYloyeHZZbUZzWDJsa2VGMGdQU0JpYVdOMVltbGpTVzUwWlhKd2IyeGhkR2x2YmlodmRYUndkWFJmYVc1a2FXTmxjeWs3Snp0Y2JpQWdJQ0FnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dSWEp5YjNJb1lGVnVjM1Z3Y0c5eWRHVmtJSEpsYzJsNlpTQnRiMlJsT2lBa2UyRjBkSEpwWW5WMFpYTXViVzlrWlgxZ0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU2tvS1gwN1hHNWdmVnh1SUNBZ0lDQWdmV0E3WEc1Y2JpQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUc1aGJXVTZJQ2RTWlhOcGVtVW5MRnh1SUNBZ0lDQWdJQ0J6YUdGa1pYSkRZV05vWlRvZ2UxeHVJQ0FnSUNBZ0lDQWdJR2hwYm5RNklHQWtlMkYwZEhKcFluVjBaWE11WTJGamFHVkxaWGw5ZkNSN2IzQnpaWFJXWlhKemFXOXVmWHdrZTNOallXeGxjeTVzWlc1bmRHZ2dQaUF3SUQ4Z2MyTmhiR1Z6SURvZ0p5ZDlmQ1I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE5wZW1WekxteGxibWQwYUNBK0lEQWdQeUJ6YVhwbGN5QTZJQ2NuZlh3a2UzSnZhUzVzWlc1bmRHZ2dQaUF3SUQ4Z2NtOXBJRG9nSnlkOWZDUjdibTlUWTJGc1pYMThKSHRwYm5CMWRGTm9ZWEJsZldBc1hHNGdJQ0FnSUNBZ0lDQWdhVzV3ZFhSRVpYQmxibVJsYm1OcFpYTTZJRnNuY21GdWF5ZGRYRzRnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU3hjYmlBZ0lDQWdJQ0FnWjJWMFVuVnVSR0YwWVRvZ0tDa2dQVDRnS0h0Y2JpQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSek9pQmJlMlJwYlhNNklHOTFkSEIxZEZOb1lYQmxMQ0JrWVhSaFZIbHdaVG9nYVc1d2RYUlVaVzV6YjNJdVpHRjBZVlI1Y0dWOVhTeGNiaUFnSUNBZ0lDQWdJQ0JrYVhOd1lYUmphRWR5YjNWd09pQjdlRG9nVFdGMGFDNWpaV2xzS0c5MWRIQjFkRk5wZW1VZ0x5QTJOQ0F2S2lCM2IzSnJaM0p2ZFhBZ2MybDZaU0FxTHlsOUxGeHVJQ0FnSUNBZ0lDQWdJSEJ5YjJkeVlXMVZibWxtYjNKdGN6b2dXMXh1SUNBZ0lDQWdJQ0FnSUNBZ2UzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2diM1YwY0hWMFUybDZaWDBzSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzVtYkc5aGRDd2daR0YwWVRvZ2MyTmhiR1Z6ZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNW1iRzloZEN3Z1pHRjBZVG9nY205cGZTd2dMaTR1WTNKbFlYUmxWR1Z1YzI5eVUyaGhjR1ZXWVhKcFlXSnNaWE1vYVc1d2RYUlRhR0Z3WlN3Z2IzVjBjSFYwVTJoaGNHVXBYRzRnSUNBZ0lDQWdJQ0FnWFZ4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOU8xeHVYRzVqYjI1emRDQm5aWFJQY0hObGRGWmxjbk5wYjI1R2NtOXRRM1Z6ZEc5dFJHRjBZVUoxWm1abGNpQTlJQ2hqYjI1MFpYaDBPaUJEYjIxd2RYUmxRMjl1ZEdWNGRDazZJRzUxYldKbGNpQTlQaUI3WEc0Z0lHTnZibk4wSUdOMWMzUnZiVVJoZEdGQ2RXWm1aWElnUFNCamIyNTBaWGgwTG1OMWMzUnZiVVJoZEdGQ2RXWm1aWEk3WEc0Z0lHTnZibk4wSUdOMWMzUnZiVVJoZEdGQ2RXWm1aWEl6TWlBOUlHNWxkeUJWYVc1ME16SkJjbkpoZVNoamRYTjBiMjFFWVhSaFFuVm1abVZ5TENCamRYTjBiMjFFWVhSaFFuVm1abVZ5TG1KNWRHVlBabVp6WlhRc0lERXBPMXh1SUNCamIyNXpkQ0J2Y0hObGRGWmxjbk5wYjI0Z1BTQmpkWE4wYjIxRVlYUmhRblZtWm1WeU16SmJNRjA3WEc0Z0lISmxkSFZ5YmlCdmNITmxkRlpsY25OcGIyNDdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnY21WemFYcGxJRDBnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBMQ0JoZEhSeWFXSjFkR1Z6T2lCU1pYTnBlbVZCZEhSeWFXSjFkR1Z6S1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR052Ym5OMElITmpZV3hsY3pvZ2JuVnRZbVZ5VzEwZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnYzJsNlpYTTZJRzUxYldKbGNsdGRJRDBnVzEwN1hHNGdJR052Ym5OMElISnZhVG9nYm5WdFltVnlXMTBnUFNCYlhUdGNibHh1SUNBdkx5Qk9iM1JsSUhSb1lYUWdjMk5oYkdWeklHbHVJSEpsYzJsNlpTQmhjbVVnWVd4M1lYbHpJR1l6TWk0Z2NtOXBJR05oYmlCaVpTQm1NeklnYjNJZ1pqRTJMbHh1SUNBdkx5QlVUMFJQT2lCRGRYSnlaVzUwYkhrZ2RHaHBjeUJqYjJSbElHUnZaWE1nYm05MElITjFjSEJ2Y25RZ1pqRTJJR1p2Y2lCeWIya2dkMmhsYmlCd1lYTnpaV1FnWVhNZ2IzQjBhVzl1WVd3Z2FXNXdkWFF1WEc1Y2JpQWdZMjl1YzNRZ2IzQnpaWFJXWlhKemFXOXVJRDBnWjJWMFQzQnpaWFJXWlhKemFXOXVSbkp2YlVOMWMzUnZiVVJoZEdGQ2RXWm1aWElvWTI5dWRHVjRkQ2s3WEc0Z0lHbG1JQ2hoZEhSeWFXSjFkR1Z6TG1GdWRHbGhiR2xoY3lBaFBUMGdNQ2tnZTF4dUlDQWdJSFJvY205M0lFVnljbTl5S0NkUGJteDVJR1JsWm1GMWJIUWdkbUZzZFdVZ0tEQXBJR1p2Y2lCQmJuUnBZV3hwWVhNZ1lYUjBjbWxpZFhSbElHbHpJSE4xY0hCdmNuUmxaQ2NwTzF4dUlDQjlYRzRnSUhaaGJHbGtZWFJsU1c1d2RYUnpLR052Ym5SbGVIUXVhVzV3ZFhSekxDQmhkSFJ5YVdKMWRHVnpMQ0J2Y0hObGRGWmxjbk5wYjI0c0lITmpZV3hsY3l3Z2MybDZaWE1zSUhKdmFTazdYRzRnSUdOdmJuUmxlSFF1WTI5dGNIVjBaU2hjYmlBZ0lDQWdJR055WldGMFpWSmxjMmw2WlZCeWIyZHlZVzFKYm1adktHTnZiblJsZUhRdWFXNXdkWFJ6V3pCZExDQmhkSFJ5YVdKMWRHVnpMQ0J2Y0hObGRGWmxjbk5wYjI0c0lITmpZV3hsY3l3Z2MybDZaWE1zSUhKdmFTa3NJSHRwYm5CMWRITTZJRnN3WFgwcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSEJoY25ObFVtVnphWHBsUVhSMGNtbGlkWFJsY3lBOUlDaGhkSFJ5YVdKMWRHVnpPaUJTWldOdmNtUThjM1J5YVc1bkxDQjFibXR1YjNkdVBpazZJRkpsYzJsNlpVRjBkSEpwWW5WMFpYTWdQVDRnZTF4dUlDQmpiMjV6ZENCaGJuUnBZV3hwWVhNZ1BTQmhkSFJ5YVdKMWRHVnpMbUZ1ZEdsaGJHbGhjeUJoY3lCdWRXMWlaWEk3WEc0Z0lHTnZibk4wSUdGNFpYTWdQU0JoZEhSeWFXSjFkR1Z6TG1GNFpYTWdZWE1nYm5WdFltVnlXMTA3WEc0Z0lHTnZibk4wSUdOdmIzSmthVzVoZEdWVWNtRnVjMlp2Y20xTmIyUmxPaUJEYjI5eVpHbHVZWFJsVkhKaGJuTm1iM0p0VFc5a1pTQTlYRzRnSUNBZ0lDQmhkSFJ5YVdKMWRHVnpMbU52YjNKa2FXNWhkR1ZVY21GdWMyWnZjbTFOYjJSbElHRnpJRU52YjNKa2FXNWhkR1ZVY21GdWMyWnZjbTFOYjJSbE8xeHVJQ0JqYjI1emRDQmpkV0pwWTBOdlpXWm1RU0E5SUdGMGRISnBZblYwWlhNdVkzVmlhV05EYjJWbVprRWdZWE1nYm5WdFltVnlPMXh1SUNCamIyNXpkQ0JsZUdOc2RXUmxUM1YwYzJsa1pTQTlJR0YwZEhKcFluVjBaWE11WlhoamJIVmtaVTkxZEhOcFpHVWdZWE1nYm5WdFltVnlJQ0U5UFNBd08xeHVJQ0JqYjI1emRDQmxlSFJ5WVhCdmJHRjBhVzl1Vm1Gc2RXVWdQU0JoZEhSeWFXSjFkR1Z6TG1WNGRISmhjRzlzWVhScGIyNVdZV3gxWlNCaGN5QnVkVzFpWlhJN1hHNGdJR052Ym5OMElHdGxaWEJCYzNCbFkzUlNZWFJwYjFCdmJHbGplVG9nUzJWbGNFRnpjR1ZqZEZKaGRHbHZVRzlzYVdONUlEMGdZWFIwY21saWRYUmxjeTVyWldWd1FYTndaV04wVW1GMGFXOVFiMnhwWTNrZ1lYTWdTMlZsY0VGemNHVmpkRkpoZEdsdlVHOXNhV041TzF4dUlDQmpiMjV6ZENCdGIyUmxPaUJOYjJSbElEMGdZWFIwY21saWRYUmxjeTV0YjJSbElHRnpJRTF2WkdVN1hHNGdJQzh2SUVsbUlHNWxZWEpsYzNSTmIyUmxJR2x6SUc1dmRDQnpjR1ZqYVdacFpXUXNJSFZ6WlNCemFXMXdiR1VnYlc5a1pTNWNiaUFnWTI5dWMzUWdibVZoY21WemRFMXZaR1U2SUU1bFlYSmxjM1JOYjJSbElEMGdLR0YwZEhKcFluVjBaWE11Ym1WaGNtVnpkRTF2WkdVZ1BUMDlJQ2NuSUQ4Z0ozTnBiWEJzWlNjZ09pQmhkSFJ5YVdKMWRHVnpMbTVsWVhKbGMzUk5iMlJsS1NCaGN5Qk9aV0Z5WlhOMFRXOWtaVHRjYmlBZ2NtVjBkWEp1SUdOeVpXRjBaVUYwZEhKcFluVjBaVmRwZEdoRFlXTm9aVXRsZVNoN1hHNGdJQ0FnWVc1MGFXRnNhV0Z6TEZ4dUlDQWdJR0Y0WlhNc1hHNGdJQ0FnWTI5dmNtUnBibUYwWlZSeVlXNXpabTl5YlUxdlpHVXNYRzRnSUNBZ1kzVmlhV05EYjJWbVprRXNYRzRnSUNBZ1pYaGpiSFZrWlU5MWRITnBaR1VzWEc0Z0lDQWdaWGgwY21Gd2IyeGhkR2x2YmxaaGJIVmxMRnh1SUNBZ0lHdGxaWEJCYzNCbFkzUlNZWFJwYjFCdmJHbGplU3hjYmlBZ0lDQnRiMlJsTEZ4dUlDQWdJRzVsWVhKbGMzUk5iMlJsWEc0Z0lIMHBPMXh1ZlR0Y2JpSXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJSHRFWVhSaFZIbHdaWDBnWm5KdmJTQW5MaTR2TGk0dkxpNHZkMkZ6YlMxamIyMXRiMjRuTzF4dWFXMXdiM0owSUh0VVpXNXpiM0pXYVdWM2ZTQm1jbTl0SUNjdUxpOHVMaTkwWlc1emIzSXRkbWxsZHljN1hHNXBiWEJ2Y25RZ2UxTm9ZWEJsVlhScGJIMGdabkp2YlNBbkxpNHZMaTR2ZFhScGJDYzdYRzVwYlhCdmNuUWdlMk55WldGMFpVRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlWDBnWm5KdmJTQW5MaTR2WVhSMGNtbGlkWFJsTFhkcGRHZ3RZMkZqYUdVdGEyVjVKenRjYm1sdGNHOXlkQ0I3UTI5dGNIVjBaVU52Ym5SbGVIUXNJRkJ5YjJkeVlXMUpibVp2TENCUWNtOW5jbUZ0Vlc1cFptOXliWDBnWm5KdmJTQW5MaTR2ZEhsd1pYTW5PMXh1WEc1cGJYQnZjblFnZTJOeVpXRjBaVlJsYm5OdmNsTm9ZWEJsVm1GeWFXRmliR1Z6TENCcGJuQjFkRlpoY21saFlteGxMQ0J2ZFhSd2RYUldZWEpwWVdKc1pTd2dVMmhoWkdWeVNHVnNjR1Z5TENCWFQxSkxSMUpQVlZCZlUwbGFSWDBnWm5KdmJTQW5MaTlqYjIxdGIyNG5PMXh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUZKdmRHRnllVVZ0WW1Wa1pHbHVaMEYwZEhKcFluVjBaWE1nZTF4dUlDQnlaV0ZrYjI1c2VTQnBiblJsY214bFlYWmxaRG9nWW05dmJHVmhianRjYmlBZ2NtVmhaRzl1YkhrZ2JuVnRTR1ZoWkhNNklHNTFiV0psY2p0Y2JpQWdjbVZoWkc5dWJIa2djbTkwWVhKNVJXMWlaV1JrYVc1blJHbHRPaUJ1ZFcxaVpYSTdYRzRnSUhKbFlXUnZibXg1SUhOallXeGxPaUJ1ZFcxaVpYSTdYRzU5WEc1Y2JtTnZibk4wSUhaaGJHbGtZWFJsU1c1d2RYUnpJRDBnS0dsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZExDQmhkSFJ5YVdKMWRHVnpPaUJTYjNSaGNubEZiV0psWkdScGJtZEJkSFJ5YVdKMWRHVnpLVG9nZG05cFpDQTlQaUI3WEc0Z0lHTnZibk4wSUZ0cGJuQjFkQ3dnY0c5emFYUnBiMjVKWkhNc0lHTnZjME5oWTJobExDQnphVzVEWVdOb1pWMGdQU0JwYm5CMWRITTdYRzRnSUdOdmJuTjBJSHR1ZFcxSVpXRmtjeXdnY205MFlYSjVSVzFpWldSa2FXNW5SR2x0ZlNBOUlHRjBkSEpwWW5WMFpYTTdYRzVjYmlBZ2FXWWdLR2x1Y0hWMExtUnBiWE11YkdWdVozUm9JQ0U5UFNBeklDWW1JR2x1Y0hWMExtUnBiWE11YkdWdVozUm9JQ0U5UFNBMEtTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCSmJuQjFkQ0FuZUNjZ2FYTWdaWGh3WldOMFpXUWdkRzhnYUdGMlpTQXpJRzl5SURRZ1pHbHRaVzV6YVc5dWN5d2daMjkwSUNSN2FXNXdkWFF1WkdsdGN5NXNaVzVuZEdoOVlDazdYRzRnSUgxY2JpQWdhV1lnS0NGVGFHRndaVlYwYVd3dVlYSmxSWEYxWVd3b2NHOXphWFJwYjI1SlpITXVaR2x0Y3l3Z1cxMHBJQ1ltSUNGVGFHRndaVlYwYVd3dVlYSmxSWEYxWVd3b2NHOXphWFJwYjI1SlpITXVaR2x0Y3l3Z1d6RmRLU0FtSmx4dUlDQWdJQ0FnY0c5emFYUnBiMjVKWkhNdVpHbHRjeTVzWlc1bmRHZ2dJVDA5SURJcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVsdWNIVjBJQ2R3YjNOcGRHbHZibDlwWkhNbklHbHpJR1Y0Y0dWamRHVmtJSFJ2SUdoaGRtVWdNQ3dnTVN3Z2IzSWdNaUJrYVcxbGJuTnBiMjV6TENCbmIzUWdKSHR3YjNOcGRHbHZia2xrY3k1a2FXMXpMbXhsYm1kMGFIMWdLVHRjYmlBZ2ZWeHVJQ0JwWmlBb1kyOXpRMkZqYUdVdVpHbHRjeTVzWlc1bmRHZ2dJVDA5SURJcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVsdWNIVjBJQ2RqYjNOZlkyRmphR1VuSUdseklHVjRjR1ZqZEdWa0lIUnZJR2hoZG1VZ01pQmthVzFsYm5OcGIyNXpMQ0JuYjNRZ0pIdGpiM05EWVdOb1pTNWthVzF6TG14bGJtZDBhSDFnS1R0Y2JpQWdmVnh1SUNCcFppQW9jMmx1UTJGamFHVXVaR2x0Y3k1c1pXNW5kR2dnSVQwOUlESXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFbHVjSFYwSUNkemFXNWZZMkZqYUdVbklHbHpJR1Y0Y0dWamRHVmtJSFJ2SUdoaGRtVWdNaUJrYVcxbGJuTnBiMjV6TENCbmIzUWdKSHR6YVc1RFlXTm9aUzVrYVcxekxteGxibWQwYUgxZ0tUdGNiaUFnZlZ4dUlDQnBaaUFvSVZOb1lYQmxWWFJwYkM1aGNtVkZjWFZoYkNoamIzTkRZV05vWlM1a2FXMXpMQ0J6YVc1RFlXTm9aUzVrYVcxektTa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblNXNXdkWFJ6SUZ4Y0oyTnZjMTlqWVdOb1pWeGNKeUJoYm1RZ1hGd25jMmx1WDJOaFkyaGxYRnduSUdGeVpTQmxlSEJsWTNSbFpDQjBieUJvWVhabElIUm9aU0J6WVcxbElITm9ZWEJsSnlrN1hHNGdJSDFjYmx4dUlDQnBaaUFvY205MFlYSjVSVzFpWldSa2FXNW5SR2x0SUQ0Z01DQW1KaUJ1ZFcxSVpXRmtjeUE5UFQwZ01Da2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmJuVnRYMmhsWVdSeklHMTFjM1FnWW1VZ2NISnZkbWxrWldRZ2FXWWdjbTkwWVhKNVgyVnRZbVZrWkdsdVoxOWthVzBnYVhNZ2MzQmxZMmxtYVdWa0p5azdYRzRnSUgxY2JseHVJQ0JqYjI1emRDQmlZWFJqYUZOcGVtVWdQU0JwYm5CMWRDNWthVzF6V3pCZE8xeHVJQ0JqYjI1emRDQnpaWEYxWlc1alpVeGxibWQwYUNBOUlHbHVjSFYwTG1ScGJYTmJhVzV3ZFhRdVpHbHRjeTVzWlc1bmRHZ2dMU0F5WFR0Y2JpQWdZMjl1YzNRZ2JXRjRVMlZ4ZFdWdVkyVk1aVzVuZEdnZ1BTQmpiM05EWVdOb1pTNWthVzF6V3pCZE8xeHVJQ0JqYjI1emRDQm9hV1JrWlc1VGFYcGxJRDBnVTJoaGNHVlZkR2xzTG5OcGVtVkdjbTl0UkdsdFpXNXphVzl1S0dsdWNIVjBMbVJwYlhNc0lERXBJQzhnYzJWeGRXVnVZMlZNWlc1bmRHZzdYRzRnSUdOdmJuTjBJR2hsWVdSVGFYcGxJRDBnY205MFlYSjVSVzFpWldSa2FXNW5SR2x0SUQwOVBTQXdJRDhnWTI5elEyRmphR1V1WkdsdGMxc3hYU0FxSURJZ09pQm9hV1JrWlc1VGFYcGxJQzhnYm5WdFNHVmhaSE03WEc0Z0lHbG1JQ2h5YjNSaGNubEZiV0psWkdScGJtZEVhVzBnUGlCb1pXRmtVMmw2WlNrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduY205MFlYSjVYMlZ0WW1Wa1pHbHVaMTlrYVcwZ2JYVnpkQ0JpWlNCc1pYTnpJSFJvWVc0Z2IzSWdaWEYxWVd3Z2RHOGdhR1ZoWkY5emFYcGxKeWs3WEc0Z0lIMWNibHh1SUNCcFppQW9jRzl6YVhScGIyNUpaSE11WkdsdGN5NXNaVzVuZEdnZ1BUMDlJRElwSUh0Y2JpQWdJQ0JwWmlBb1ltRjBZMmhUYVhwbElDRTlQU0J3YjNOcGRHbHZia2xrY3k1a2FXMXpXekJkS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVsdWNIVjBJQ2R3YjNOcGRHbHZibDlwWkhNbklHUnBiV1Z1YzJsdmJpQXdJSE5vYjNWc1pDQmlaU0J2WmlCemFYcGxJR0poZEdOb1gzTnBlbVVzSUdkdmRDQWtlM0J2YzJsMGFXOXVTV1J6TG1ScGJYTmJNRjE5WUNrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoelpYRjFaVzVqWlV4bGJtZDBhQ0FoUFQwZ2NHOXphWFJwYjI1SlpITXVaR2x0YzFzeFhTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkpibkIxZENBbmNHOXphWFJwYjI1ZmFXUnpKeUJrYVcxbGJuTnBiMjRnTVNCemFHOTFiR1FnWW1VZ2IyWWdjMmw2WlNCelpYRjFaVzVqWlY5c1pXNW5kR2dzSUdkdmRDQWtlM0J2YzJsMGFXOXVTV1J6TG1ScGJYTmJNVjE5WUNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2FXWWdLR2hsWVdSVGFYcGxJQzhnTWlBaFBUMGdZMjl6UTJGamFHVXVaR2x0YzFzeFhTQW1KaUJ5YjNSaGNubEZiV0psWkdScGJtZEVhVzBnTHlBeUlDRTlQU0JqYjNORFlXTm9aUzVrYVcxeld6RmRLU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkpibkIxZENBblkyOXpYMk5oWTJobEp5QmthVzFsYm5OcGIyNGdNU0J6YUc5MWJHUWdZbVVnYzJGdFpTQmhjeUJvWldGa1gzTnBlbVVnTHlBeUlHOXlJSEp2ZEdGeWVWOWxiV0psWkdScGJtZGZaR2x0SUM4Z01pd2daMjkwSUNSN1hHNGdJQ0FnSUNBZ0lHTnZjME5oWTJobExtUnBiWE5iTVYxOVlDazdYRzRnSUgxY2JseHVJQ0JwWmlBb2MyVnhkV1Z1WTJWTVpXNW5kR2dnUGlCdFlYaFRaWEYxWlc1alpVeGxibWQwYUNrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVlhCa1lYUnBibWNnWTI5elgyTmhZMmhsSUdGdVpDQnphVzVmWTJGamFHVWdhVzRnVW05MFlYSjVSVzFpWldSa2FXNW5JR2x6SUc1dmRDQmpkWEp5Wlc1MGJIa2djM1Z3Y0c5eWRHVmtKeWs3WEc0Z0lIMWNibjA3WEc1Y2JtTnZibk4wSUdOeVpXRjBaVkp2ZEdGeWVVVnRZbVZrWkdsdVoxQnliMmR5WVcxSmJtWnZJRDFjYmlBZ0lDQW9hVzV3ZFhSek9pQnlaV0ZrYjI1c2VTQlVaVzV6YjNKV2FXVjNXMTBzSUdGMGRISnBZblYwWlhNNklGSnZkR0Z5ZVVWdFltVmtaR2x1WjBGMGRISnBZblYwWlhNcE9pQlFjbTluY21GdFNXNW1ieUE5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0I3YVc1MFpYSnNaV0YyWldRc0lHNTFiVWhsWVdSekxDQnliM1JoY25sRmJXSmxaR1JwYm1kRWFXMHNJSE5qWVd4bGZTQTlJR0YwZEhKcFluVjBaWE03WEc0Z0lDQWdJQ0JqYjI1emRDQmlZWFJqYUZOcGVtVWdQU0JwYm5CMWRITmJNRjB1WkdsdGMxc3dYVHRjYmlBZ0lDQWdJR052Ym5OMElHSmhkR05vVTNSeWFXUmxJRDBnVTJoaGNHVlZkR2xzTG5OcGVtVkdjbTl0UkdsdFpXNXphVzl1S0dsdWNIVjBjMXN3WFM1a2FXMXpMQ0F4S1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSE5sY1hWbGJtTmxUR1Z1WjNSb0lEMGdhVzV3ZFhSeld6QmRMbVJwYlhOYmFXNXdkWFJ6V3pCZExtUnBiWE11YkdWdVozUm9JQzBnTWwwN1hHNGdJQ0FnSUNCamIyNXpkQ0JvYVdSa1pXNVRhWHBsSUQwZ1ltRjBZMmhUZEhKcFpHVWdMeUJ6WlhGMVpXNWpaVXhsYm1kMGFEdGNiaUFnSUNBZ0lHTnZibk4wSUdoaGJHWlNiM1JoY25sRmJXSmxaR1JwYm1kRWFXMGdQU0JwYm5CMWRITmJNbDB1WkdsdGMxc3hYVHRjYmlBZ0lDQWdJR052Ym5OMElHaGxZV1JUYVhwbElEMGdjbTkwWVhKNVJXMWlaV1JrYVc1blJHbHRJRDA5UFNBd0lEOGdhR0ZzWmxKdmRHRnllVVZ0WW1Wa1pHbHVaMFJwYlNBcUlESWdPaUJvYVdSa1pXNVRhWHBsSUM4Z2JuVnRTR1ZoWkhNN1hHNWNiaUFnSUNBZ0lDOHZJRkp2ZEdGeWVTQmxiV0psWkdScGJtZHpJSGRwYkd3Z1ltVWdZMkZzWTNWc1lYUmxaQ0JwYmlCaElIQmhhWEl0ZDJselpTQm1ZWE5vYVc5dUxpQkpiaUJoWTJOdmNtUmhibU5sTENCMWMyVWdkR2hsSUhOb1lYQmxYRzRnSUNBZ0lDQXZMeUJiWW1GMFkyZ2djMmw2WlN3Z2MyVnhkV1Z1WTJVZ2JHVnVaM1JvTENCdWRXMGdiMllnYUdWaFpITXNJRzUxYlNCdlppQndZV2x5Y3lCMGJ5QnliM1JoZEdVZ0t5QnVkVzBnYjJZZ1pHbHRjeUIwYnlCamIzQjVYVnh1SUNBZ0lDQWdMeThnZEc4Z2RXNW1iMnhrSUhSb1pTQm5iRzlpWVd3Z2FXNWtaWGdnYVc0Z2MyaGhaR1Z5TGx4dUlDQWdJQ0FnWTI5dWMzUWdaMnh2WW1Gc1UyaGhjR1VnUFZ4dUlDQWdJQ0FnSUNBZ0lHNWxkeUJCY25KaGVUeHVkVzFpWlhJK0tHSmhkR05vVTJsNlpTd2djMlZ4ZFdWdVkyVk1aVzVuZEdnc0lHaHBaR1JsYmxOcGVtVWdMeUJvWldGa1UybDZaU3dnYUdWaFpGTnBlbVVnTFNCb1lXeG1VbTkwWVhKNVJXMWlaV1JrYVc1blJHbHRLVHRjYmlBZ0lDQWdJR052Ym5OMElHZHNiMkpoYkZOMGNtbGtaWE1nUFNCVGFHRndaVlYwYVd3dVkyOXRjSFYwWlZOMGNtbGtaWE1vWjJ4dlltRnNVMmhoY0dVcE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCd2NtOW5jbUZ0Vlc1cFptOXliWE02SUZCeWIyZHlZVzFWYm1sbWIzSnRXMTBnUFNCYlhHNGdJQ0FnSUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1bWJHOWhkQ3dnWkdGMFlUb2djMk5oYkdWOUxGeHVJQ0FnSUNBZ0lDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJuYkc5aVlXeFRhR0Z3Wlgwc1hHNGdJQ0FnSUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1MWFXNTBNeklzSUdSaGRHRTZJR2RzYjJKaGJGTjBjbWxrWlhOOUxGeHVYRzRnSUNBZ0lDQWdJQzh2SUhOMGNtbGtaWE1nWm05eUlHRmtaSEpsYzNOcGJtY2dkR2hsSUdsdWNIVjBMMjkxZEhCMWRDQjBaVzV6YjNJc0lHbHVJSEJsY20xMWRHRjBaV1FnYjNKa1pYSWdkRzhnWVd4cFoyNGdkMmwwYUNCMGFHVWdkVzVtYjJ4a1pXUWdaMnh2WW1Gc0lHbHVaR1Y0TEZ4dUlDQWdJQ0FnSUNBdkx5QnBMbVV1SUVKVFRraGNiaUFnSUNBZ0lDQWdMaTR1S0dsdWNIVjBjMXN3WFM1a2FXMXpMbXhsYm1kMGFDQTlQVDBnTXlBL1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JtVjNJRUZ5Y21GNVBGQnliMmR5WVcxVmJtbG1iM0p0UGloN2RIbHdaVG9nUkdGMFlWUjVjR1V1ZFdsdWRETXlMQ0JrWVhSaE9pQmJZbUYwWTJoVGRISnBaR1VzSUdocFpHUmxibE5wZW1Vc0lHaGxZV1JUYVhwbExDQXhYWDBwSURwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCYlhTa3NYRzRnSUNBZ0lDQWdJQzR1TGlocGJuQjFkSE5iTUYwdVpHbHRjeTVzWlc1bmRHZ2dQVDA5SURRZ1AxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHNWxkeUJCY25KaGVUeFFjbTluY21GdFZXNXBabTl5YlQ0b1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUZ0aVlYUmphRk4wY21sa1pTd2dhR1ZoWkZOcGVtVXNJSE5sY1hWbGJtTmxUR1Z1WjNSb0lDb2dhR1ZoWkZOcGVtVXNJREZkZlNrZ09seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lGdGRLU3hjYmx4dUlDQWdJQ0FnSUNBdUxpNWpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5aHBibkIxZEhOYk1GMHVaR2x0Y3l3Z2FXNXdkWFJ6V3pGZExtUnBiWE1zSUdsdWNIVjBjMXN5WFM1a2FXMXpMQ0JwYm5CMWRITmJNMTB1WkdsdGN5d2dhVzV3ZFhSeld6QmRMbVJwYlhNcExGeHVJQ0FnSUNBZ1hUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ1oyVjBVMmhoWkdWeVUyOTFjbU5sSUQwZ0tITm9ZV1JsY2tobGJIQmxjam9nVTJoaFpHVnlTR1ZzY0dWeUtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMElEMGdhVzV3ZFhSV1lYSnBZV0pzWlNnbmFXNXdkWFFuTENCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzd1hTNWthVzF6TG14bGJtZDBhQ2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEJ2YzJsMGFXOXVTV1J6SUQwZ2FXNXdkWFJXWVhKcFlXSnNaU2duY0c5emFYUnBiMjVmYVdSekp5d2dhVzV3ZFhSeld6RmRMbVJoZEdGVWVYQmxMQ0JwYm5CMWRITmJNVjB1WkdsdGN5NXNaVzVuZEdncE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCamIzTkRZV05vWlNBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjJOdmMxOWpZV05vWlNjc0lHbHVjSFYwYzFzeVhTNWtZWFJoVkhsd1pTd2dhVzV3ZFhSeld6SmRMbVJwYlhNdWJHVnVaM1JvS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzJsdVEyRmphR1VnUFNCcGJuQjFkRlpoY21saFlteGxLQ2R6YVc1ZlkyRmphR1VuTENCcGJuQjFkSE5iTTEwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzelhTNWthVzF6TG14bGJtZDBhQ2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzkxZEhCMWRDQTlJRzkxZEhCMWRGWmhjbWxoWW14bEtDZHZkWFJ3ZFhRbkxDQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVXNJR2x1Y0hWMGMxc3dYUzVrYVcxekxteGxibWQwYUNrN1hHNWNiaUFnSUNBZ0lDQWdjMmhoWkdWeVNHVnNjR1Z5TG5KbFoybHpkR1Z5Vlc1cFptOXliWE1vVzF4dUlDQWdJQ0FnSUNBZ0lIdHVZVzFsT2lBbmMyTmhiR1VuTENCMGVYQmxPaUFuWmpNeUozMHNYRzRnSUNBZ0lDQWdJQ0FnZTI1aGJXVTZJQ2RuYkc5aVlXeGZjMmhoY0dVbkxDQjBlWEJsT2lBbmRUTXlKeXdnYkdWdVozUm9PaUJuYkc5aVlXeFRhR0Z3WlM1c1pXNW5kR2g5TEZ4dUlDQWdJQ0FnSUNBZ0lIdHVZVzFsT2lBbloyeHZZbUZzWDNOMGNtbGtaWE1uTENCMGVYQmxPaUFuZFRNeUp5d2diR1Z1WjNSb09pQm5iRzlpWVd4VGRISnBaR1Z6TG14bGJtZDBhSDBzWEc0Z0lDQWdJQ0FnSUNBZ2UyNWhiV1U2SUNkcGJuQjFkRjl2ZFhSd2RYUmZjM1J5YVdSbGN5Y3NJSFI1Y0dVNklDZDFNekluTENCc1pXNW5kR2c2SUdkc2IySmhiRk4wY21sa1pYTXViR1Z1WjNSb2ZTeGNiaUFnSUNBZ0lDQWdYU2s3WEc1Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdCY2JpQWdJQ0FnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1WkdWamJHRnlaVlpoY21saFlteGxjeWhwYm5CMWRDd2djRzl6YVhScGIyNUpaSE1zSUdOdmMwTmhZMmhsTENCemFXNURZV05vWlN3Z2IzVjBjSFYwS1gxY2JseHVJQ0FnSUNBZ0lDQWtlM05vWVdSbGNraGxiSEJsY2k1dFlXbHVVM1JoY25Rb1YwOVNTMGRTVDFWUVgxTkpXa1VwZlZ4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0JvWVd4bVgzSnZkR0Z5ZVY5bGJXSmZaR2x0SUQwZ2RXNXBabTl5YlhNdUpIdGpiM05EWVdOb1pTNXVZVzFsZlY5emFHRndaVnN4WFR0Y2JpQWdJQ0FnSUNBZ0lDQnNaWFFnWW5OdWFDQTlJR2RzYjJKaGJGOXBaSGdnTHlCMWJtbG1iM0p0Y3k1bmJHOWlZV3hmYzNSeWFXUmxjeUFsSUhWdWFXWnZjbTF6TG1kc2IySmhiRjl6YUdGd1pUdGNiaUFnSUNBZ0lDQWdJQ0JzWlhRZ2MybDZaU0E5SUhWdWFXWnZjbTF6TG1kc2IySmhiRjl6YUdGd1pWc3dYU0FxSUhWdWFXWnZjbTF6TG1kc2IySmhiRjl6ZEhKcFpHVnpXekJkTzF4dUlDQWdJQ0FnSUNBZ0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG1kMVlYSmtRV2RoYVc1emRFOTFkRTltUW05MWJtUnpWMjl5YTJkeWIzVndVMmw2WlhNb0ozTnBlbVVuS1gxY2JseHVJQ0FnSUNBZ0lDQWdJR2xtSUNoaWMyNW9Xek5kSUR3Z2FHRnNabDl5YjNSaGNubGZaVzFpWDJScGJTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEJ2YzJsMGFXOXVYMmxrYzE5cFpIZ2dQVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1I3Y0c5emFYUnBiMjVKWkhNdVluSnZZV1JqWVhOMFpXUkpibVJwWTJWelZHOVBabVp6WlhRb0oySnpibWd1ZUhrbkxDQnZkWFJ3ZFhSV1lYSnBZV0pzWlNnbkp5d2djRzl6YVhScGIyNUpaSE11ZEhsd1pTNTBaVzV6YjNJc0lESXBLWDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY0c5emFYUnBiMjVmYVdRZ1BWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIVXpNaWdrZTNCdmMybDBhVzl1U1dSekxtZGxkRUo1VDJabWMyVjBLQ2R3YjNOcGRHbHZibDlwWkhOZmFXUjRKeWw5S1NBcklITmxiR1ZqZENnd0xDQmljMjVvV3pGZExDQndiM05wZEdsdmJsOXBaSE5mYVdSNElEMDlJREFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdrZ1BTQmtiM1FvWW5OdWFDd2dkVzVwWm05eWJYTXVhVzV3ZFhSZmIzVjBjSFYwWDNOMGNtbGtaWE1wSUNzZ2MyVnNaV04wS0RBc0lHSnpibWhiTTEwc0lDUjdhVzUwWlhKc1pXRjJaV1I5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCcUlEMGdhU0FySUhObGJHVmpkQ2hvWVd4bVgzSnZkR0Z5ZVY5bGJXSmZaR2x0TENBeExDQWtlMmx1ZEdWeWJHVmhkbVZrZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVWdQU0FrZTJsdWNIVjBMbWRsZEVKNVQyWm1jMlYwS0NkcEp5bDlJQ29nSkh0amIzTkRZV05vWlM1blpYUW9KM0J2YzJsMGFXOXVYMmxrSnl3Z0oySnpibWhiTTEwbktYMGdMVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1I3YVc1d2RYUXVaMlYwUW5sUFptWnpaWFFvSjJvbktYMGdLaUFrZTNOcGJrTmhZMmhsTG1kbGRDZ25jRzl6YVhScGIyNWZhV1FuTENBblluTnVhRnN6WFNjcGZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNSN2IzVjBjSFYwTG5ObGRFSjVUMlptYzJWMEtDZHBKeXdnSjNKbEp5bDlYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdhVzBnUFNBa2UybHVjSFYwTG1kbGRFSjVUMlptYzJWMEtDZHBKeWw5SUNvZ0pIdHphVzVEWVdOb1pTNW5aWFFvSjNCdmMybDBhVzl1WDJsa0p5d2dKMkp6Ym1oYk0xMG5LWDBnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNSN2FXNXdkWFF1WjJWMFFubFBabVp6WlhRb0oyb25LWDBnS2lBa2UyTnZjME5oWTJobExtZGxkQ2duY0c5emFYUnBiMjVmYVdRbkxDQW5Zbk51YUZzelhTY3BmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDUjdiM1YwY0hWMExuTmxkRUo1VDJabWMyVjBLQ2RxSnl3Z0oybHRKeWw5WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCcklEMGdaRzkwS0dKemJtZ3NJSFZ1YVdadmNtMXpMbWx1Y0hWMFgyOTFkSEIxZEY5emRISnBaR1Z6S1NBcklHaGhiR1pmY205MFlYSjVYMlZ0WWw5a2FXMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBa2UyOTFkSEIxZEM1elpYUkNlVTltWm5ObGRDZ25heWNzSUdsdWNIVjBMbWRsZEVKNVQyWm1jMlYwS0Nkckp5a3BmVnh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZXQTdYRzRnSUNBZ0lDQjlPMXh1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0J1WVcxbE9pQW5VbTkwWVhKNVJXMWlaV1JrYVc1bkp5eGNiaUFnSUNBZ0lDQWdjMmhoWkdWeVEyRmphR1U2SUh0Y2JpQWdJQ0FnSUNBZ0lDQm9hVzUwT2lCamNtVmhkR1ZCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhVzUwWlhKc1pXRjJaV1FzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNrdVkyRmphR1ZMWlhrc1hHNGdJQ0FnSUNBZ0lDQWdhVzV3ZFhSRVpYQmxibVJsYm1OcFpYTTZJRnNuY21GdWF5Y3NJQ2R5WVc1ckp5d2dKM0poYm1zbkxDQW5jbUZ1YXlkZExGeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0JuWlhSVGFHRmtaWEpUYjNWeVkyVXNYRzRnSUNBZ0lDQWdJR2RsZEZKMWJrUmhkR0U2SUNncElEMCtJQ2g3WEc0Z0lDQWdJQ0FnSUNBZ2IzVjBjSFYwY3pvZ1czdGthVzF6T2lCcGJuQjFkSE5iTUYwdVpHbHRjeXdnWkdGMFlWUjVjR1U2SUdsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlgxZExGeHVJQ0FnSUNBZ0lDQWdJR1JwYzNCaGRHTm9SM0p2ZFhBNklIdDRPaUJOWVhSb0xtTmxhV3dvVTJoaGNHVlZkR2xzTG5OcGVtVW9aMnh2WW1Gc1UyaGhjR1VwSUM4Z1YwOVNTMGRTVDFWUVgxTkpXa1VwZlN4Y2JpQWdJQ0FnSUNBZ0lDQndjbTluY21GdFZXNXBabTl5YlhNc1hHNGdJQ0FnSUNBZ0lIMHBMRnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdjbTkwWVhKNVJXMWlaV1JrYVc1bklEMGdLR052Ym5SbGVIUTZJRU52YlhCMWRHVkRiMjUwWlhoMExDQmhkSFJ5YVdKMWRHVnpPaUJTYjNSaGNubEZiV0psWkdScGJtZEJkSFJ5YVdKMWRHVnpLVG9nZG05cFpDQTlQaUI3WEc0Z0lIWmhiR2xrWVhSbFNXNXdkWFJ6S0dOdmJuUmxlSFF1YVc1d2RYUnpMQ0JoZEhSeWFXSjFkR1Z6S1R0Y2JpQWdZMjl1ZEdWNGRDNWpiMjF3ZFhSbEtHTnlaV0YwWlZKdmRHRnllVVZ0WW1Wa1pHbHVaMUJ5YjJkeVlXMUpibVp2S0dOdmJuUmxlSFF1YVc1d2RYUnpMQ0JoZEhSeWFXSjFkR1Z6S1NrN1hHNTlPMXh1SWl3Z0lpOHZJRU52Y0hseWFXZG9kQ0FvWXlrZ1RXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUx5OGdUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRTFKVkNCTWFXTmxibk5sTGx4dVhHNXBiWEJ2Y25RZ2UwUmhkR0ZVZVhCbGZTQm1jbTl0SUNjdUxpOHVMaTh1TGk5M1lYTnRMV052YlcxdmJpYzdYRzVwYlhCdmNuUWdlMVJsYm5OdmNsWnBaWGQ5SUdaeWIyMGdKeTR1THk0dUwzUmxibk52Y2kxMmFXVjNKenRjYm1sdGNHOXlkQ0I3VTJoaGNHVlZkR2xzZlNCbWNtOXRJQ2N1TGk4dUxpOTFkR2xzSnp0Y2JtbHRjRzl5ZENCN1EyOXRjSFYwWlVOdmJuUmxlSFFzSUZCeWIyZHlZVzFKYm1adkxDQlFjbTluY21GdFZXNXBabTl5YlgwZ1puSnZiU0FuTGk0dmRIbHdaWE1uTzF4dVhHNXBiWEJ2Y25RZ2UyTmhjM1JVYjBZek1pd2dabWxzYkZabFkzUnZjaXdnWjJWMFRXRjRRMjl0Y0c5dVpXNTBjeXdnYVc1d2RYUldZWEpwWVdKc1pTd2diM1YwY0hWMFZtRnlhV0ZpYkdVc0lGTm9ZV1JsY2tobGJIQmxjaXdnYzNWdFZtVmpkRzl5TENCMFpXNXpiM0pVZVhCbFZHOVhjMmRzVTNSdmNtRm5aVlI1Y0dVc0lGVnVhV1p2Y20xelFYSnlZWGxVZVhCbGZTQm1jbTl0SUNjdUwyTnZiVzF2YmljN1hHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdVMnRwY0V4aGVXVnlUbTl5YlVGMGRISnBZblYwWlhNZ2UxeHVJQ0J6YVcxd2JHbG1hV1ZrT2lCaWIyOXNaV0Z1TzF4dUlDQmxjSE5wYkc5dU9pQnVkVzFpWlhJN1hHNTlYRzVjYm1OdmJuTjBJSFpoYkdsa1lYUmxTVzV3ZFhSeklEMGdLR2x1Y0hWMGN6b2djbVZoWkc5dWJIa2dWR1Z1YzI5eVZtbGxkMXRkS1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR2xtSUNnaGFXNXdkWFJ6SUh4OElHbHVjSFYwY3k1c1pXNW5kR2dnUENBektTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Nkc1lYbGxjazV2Y20wZ2NtVnhkV2x5WlhNZ1lYUWdiR1ZoYzNRZ015QnBibkIxZEhNdUp5azdYRzRnSUgxY2JseHVJQ0JqYjI1emRDQnBibkIxZERvZ1ZHVnVjMjl5Vm1sbGR5QTlJR2x1Y0hWMGMxc3dYVHRjYmlBZ1kyOXVjM1FnYzJ0cGNEb2dWR1Z1YzI5eVZtbGxkeUE5SUdsdWNIVjBjMXN4WFR0Y2JpQWdZMjl1YzNRZ1oyRnRiV0U2SUZSbGJuTnZjbFpwWlhjZ1BTQnBibkIxZEhOYk1sMDdYRzVjYmlBZ2FXWWdLR2x1Y0hWMExtUmhkR0ZVZVhCbElDRTlQU0J6YTJsd0xtUmhkR0ZVZVhCbElIeDhJR2x1Y0hWMExtUmhkR0ZVZVhCbElDRTlQU0JuWVcxdFlTNWtZWFJoVkhsd1pTa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblFXeHNJR2x1Y0hWMGN5QnRkWE4wSUdoaGRtVWdkR2hsSUhOaGJXVWdaR0YwWVNCMGVYQmxKeWs3WEc0Z0lIMWNibHh1SUNCcFppQW9hVzV3ZFhRdVpHbHRjeTVzWlc1bmRHZ2dJVDA5SURNZ0ppWWdhVzV3ZFhRdVpHbHRjeTVzWlc1bmRHZ2dJVDA5SURJcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBsdWNIVjBJRzExYzNRZ1ltVWdNa1FnYjNJZ00wUW5LVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHphMmx3TG1ScGJYTXViR1Z1WjNSb0lDRTlQU0F6SUNZbUlITnJhWEF1WkdsdGN5NXNaVzVuZEdnZ0lUMDlJRElwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMU5yYVhBZ2JYVnpkQ0JpWlNBeVJDQnZjaUF6UkNjcE8xeHVJQ0I5WEc1Y2JpQWdZMjl1YzNRZ2FHbGtaR1Z1VTJsNlpTQTlJR2x1Y0hWMExtUnBiWE5iYVc1d2RYUXVaR2x0Y3k1c1pXNW5kR2dnTFNBeFhUdGNiaUFnWTI5dWMzUWdjMlZ4ZFdWdVkyVk1aVzVuZEdnZ1BTQnBibkIxZEM1a2FXMXpXMmx1Y0hWMExtUnBiWE11YkdWdVozUm9JQzBnTWwwN1hHNGdJR2xtSUNoemEybHdMbVJwYlhOYmMydHBjQzVrYVcxekxteGxibWQwYUNBdElERmRJQ0U5UFNCb2FXUmtaVzVUYVhwbEtTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkVGEybHdJRzExYzNRZ2FHRjJaU0IwYUdVZ2MyRnRaU0JvYVdSa1pXNGdjMmw2WlNCaGN5QnBibkIxZENjcE8xeHVJQ0I5WEc0Z0lHbG1JQ2h6YTJsd0xtUnBiWE5iYzJ0cGNDNWthVzF6TG14bGJtZDBhQ0F0SURKZElDRTlQU0J6WlhGMVpXNWpaVXhsYm1kMGFDa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblUydHBjQ0J0ZFhOMElHaGhkbVVnZEdobElITmhiV1VnYzJWeGRXVnVZMlVnYkdWdVozUm9JR0Z6SUdsdWNIVjBKeWs3WEc0Z0lIMWNibHh1SUNCcFppQW9aMkZ0YldFdVpHbHRjeTVzWlc1bmRHZ2dJVDA5SURFcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBkaGJXMWhJRzExYzNRZ1ltVWdNVVFuS1R0Y2JpQWdmVnh1SUNCcFppQW9aMkZ0YldFdVpHbHRjMXRuWVcxdFlTNWthVzF6TG14bGJtZDBhQ0F0SURGZElDRTlQU0JvYVdSa1pXNVRhWHBsS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RIWVcxdFlTQnRkWE4wSUdoaGRtVWdkR2hsSUhOaGJXVWdhR2xrWkdWdUlITnBlbVVnWVhNZ2FXNXdkWFFuS1R0Y2JpQWdmVnh1SUNCcFppQW9hVzV3ZFhSekxteGxibWQwYUNBK0lETXBJSHRjYmlBZ0lDQmpiMjV6ZENCaVpYUmhPaUJVWlc1emIzSldhV1YzSUQwZ2FXNXdkWFJ6V3pOZE8xeHVJQ0FnSUdsbUlDaGlaWFJoTG1ScGJYTXViR1Z1WjNSb0lDRTlQU0F4S1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjBKbGRHRWdiWFZ6ZENCaVpTQXhSQ2NwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWW1WMFlTNWthVzF6VzJKbGRHRXVaR2x0Y3k1c1pXNW5kR2dnTFNBeFhTQWhQVDBnYUdsa1pHVnVVMmw2WlNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkQ1pYUmhJRzExYzNRZ2FHRjJaU0IwYUdVZ2MyRnRaU0JvYVdSa1pXNGdjMmw2WlNCaGN5QnBibkIxZENjcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lHbG1JQ2hwYm5CMWRITXViR1Z1WjNSb0lENGdOQ2tnZTF4dUlDQWdJR052Ym5OMElHSnBZWE02SUZSbGJuTnZjbFpwWlhjZ1BTQnBibkIxZEhOYk5GMDdYRzRnSUNBZ2FXWWdLR0pwWVhNdVpHbHRjeTVzWlc1bmRHZ2dJVDA5SURFcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblFtbGhjeUJ0ZFhOMElHSmxJREZFSnlrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoaWFXRnpMbVJwYlhOYlltbGhjeTVrYVcxekxteGxibWQwYUNBdElERmRJQ0U5UFNCb2FXUmtaVzVUYVhwbEtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owSnBZWE1nYlhWemRDQm9ZWFpsSUhSb1pTQnpZVzFsSUdocFpHUmxiaUJ6YVhwbElHRnpJR2x1Y0hWMEp5azdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OU8xeHVYRzVqYjI1emRDQmpjbVZoZEdWVGEybHdUR0Y1WlhKT2IzSnRVSEp2WjNKaGJVbHVabThnUFZ4dUlDQWdJQ2hwYm5CMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFN3Z1lYUjBjbWxpZFhSbGN6b2dVMnRwY0V4aGVXVnlUbTl5YlVGMGRISnBZblYwWlhNc0lHOTFkSEIxZEVOdmRXNTBPaUJ1ZFcxaVpYSXNJR2x6VkhKaGFXNXBibWM2SUdKdmIyeGxZVzRwT2x4dUlDQWdJQ0FnSUNCUWNtOW5jbUZ0U1c1bWJ5QTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYzJsdGNHeHBabWxsWkNBOUlHRjBkSEpwWW5WMFpYTXVjMmx0Y0d4cFptbGxaRHRjYmx4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdsdWNIVjBVMmhoY0dVZ1BTQnBibkIxZEhOYk1GMHVaR2x0Y3p0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCcGJuQjFkRk5wZW1VZ1BTQlRhR0Z3WlZWMGFXd3VjMmw2WlNocGJuQjFkRk5vWVhCbEtUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnZkWFJ3ZFhSVGFHRndaU0E5SUdsdWNIVjBVMmhoY0dVN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwVTJsNlpTQTlJR2x1Y0hWMFUybDZaVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JvYVdSa1pXNVRhWHBsSUQwZ2FXNXdkWFJUYUdGd1pTNXpiR2xqWlNndE1TbGJNRjA3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYldWaGJrbHVkbE4wWkVSbGRrUnBiU0E5SUdselZISmhhVzVwYm1jZ1B5QnBibkIxZEZOb1lYQmxMbk5zYVdObEtEQXNJQzB4S1M1amIyNWpZWFFvTVNrZ09pQmJYVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JvWVhOQ1pYUmhTVzV3ZFhRZ1BTQWhjMmx0Y0d4cFptbGxaQ0FtSmlCcGJuQjFkSE11YkdWdVozUm9JRDRnTXp0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCb1lYTkNhV0Z6U1c1d2RYUWdQU0JwYm5CMWRITXViR1Z1WjNSb0lENGdORHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JvWVhOTlpXRnVUM1YwY0hWMElEMGdhWE5VY21GcGJtbHVaeUFtSmlCdmRYUndkWFJEYjNWdWRDQStJREU3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYUdGelNXNTJVM1JrUkdWMlQzVjBjSFYwSUQwZ2FYTlVjbUZwYm1sdVp5QW1KaUJ2ZFhSd2RYUkRiM1Z1ZENBK0lESTdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdhR0Z6U1c1d2RYUlRhMmx3UW1saGMxTjFiVTkxZEhCMWRDQTlJRzkxZEhCMWRFTnZkVzUwSUQ0Z016dGNibHh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR052YlhCdmJtVnVkSE1nUFNCblpYUk5ZWGhEYjIxd2IyNWxiblJ6S0docFpHUmxibE5wZW1VcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjSEp2WjNKaGJWVnVhV1p2Y20xek9pQlFjbTluY21GdFZXNXBabTl5YlZ0ZElEMGdXMXh1SUNBZ0lDQWdJQ0FnSUNBZ2UzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2diM1YwY0hWMFUybDZaWDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJqYjIxd2IyNWxiblJ6ZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUdocFpHUmxibE5wZW1WOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnZTNSNWNHVTZJRVJoZEdGVWVYQmxMbVpzYjJGMExDQmtZWFJoT2lCaGRIUnlhV0oxZEdWekxtVndjMmxzYjI1OUxGeHVJQ0FnSUNBZ0lDQWdJRjA3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWjJWMFUyaGhaR1Z5VTI5MWNtTmxJRDBnS0hOb1lXUmxja2hsYkhCbGNqb2dVMmhoWkdWeVNHVnNjR1Z5S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0IxYm1sbWIzSnRjMEZ5Y21GNU9pQlZibWxtYjNKdGMwRnljbUY1Vkhsd1pTQTlJRnRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdlMjVoYldVNklDZHZkWFJ3ZFhSZmMybDZaU2NzSUhSNWNHVTZJQ2QxTXpJbmZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2UyNWhiV1U2SUNkamIyMXdiMjVsYm5Sekp5d2dkSGx3WlRvZ0ozVXpNaWQ5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0I3Ym1GdFpUb2dKMmhwWkdSbGJsOXphWHBsSnl3Z2RIbHdaVG9nSjNVek1pZDlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjdibUZ0WlRvZ0oyVndjMmxzYjI0bkxDQjBlWEJsT2lBblpqTXlKMzBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZG1GeWFXRmliR1Z6SUQwZ1cxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJuQjFkRlpoY21saFlteGxLQ2Q0Snl3Z2FXNXdkWFJ6V3pCZExtUmhkR0ZVZVhCbExDQnBibkIxZEhOYk1GMHVaR2x0Y3l3Z1kyOXRjRzl1Wlc1MGN5a3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHVjSFYwVm1GeWFXRmliR1VvSjNOcmFYQW5MQ0JwYm5CMWRITmJNVjB1WkdGMFlWUjVjR1VzSUdsdWNIVjBjMXN4WFM1a2FXMXpMQ0JqYjIxd2IyNWxiblJ6S1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYVc1d2RYUldZWEpwWVdKc1pTZ25aMkZ0YldFbkxDQnBibkIxZEhOYk1sMHVaR0YwWVZSNWNHVXNJR2x1Y0hWMGMxc3lYUzVrYVcxekxDQmpiMjF3YjI1bGJuUnpLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lGMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9hR0Z6UW1WMFlVbHVjSFYwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNtbGhZbXhsY3k1d2RYTm9LR2x1Y0hWMFZtRnlhV0ZpYkdVb0oySmxkR0VuTENCcGJuQjFkSE5iTTEwdVpHRjBZVlI1Y0dVc0lHbHVjSFYwYzFzelhTNWthVzF6TENCamIyMXdiMjVsYm5SektTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FHRnpRbWxoYzBsdWNIVjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY21saFlteGxjeTV3ZFhOb0tHbHVjSFYwVm1GeWFXRmliR1VvSjJKcFlYTW5MQ0JwYm5CMWRITmJORjB1WkdGMFlWUjVjR1VzSUdsdWNIVjBjMXMwWFM1a2FXMXpMQ0JqYjIxd2IyNWxiblJ6S1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWEpwWVdKc1pYTXVjSFZ6YUNodmRYUndkWFJXWVhKcFlXSnNaU2duYjNWMGNIVjBKeXdnYVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsTENCdmRYUndkWFJUYUdGd1pTd2dZMjl0Y0c5dVpXNTBjeWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0doaGMwMWxZVzVQZFhSd2RYUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5YVdGaWJHVnpMbkIxYzJnb2IzVjBjSFYwVm1GeWFXRmliR1VvSjIxbFlXNWZiM1YwY0hWMEp5d2dSR0YwWVZSNWNHVXVabXh2WVhRc0lHMWxZVzVKYm5aVGRHUkVaWFpFYVcwcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNob1lYTkpiblpUZEdSRVpYWlBkWFJ3ZFhRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlhV0ZpYkdWekxuQjFjMmdvYjNWMGNIVjBWbUZ5YVdGaWJHVW9KMmx1ZGw5emRHUmZiM1YwY0hWMEp5d2dSR0YwWVZSNWNHVXVabXh2WVhRc0lHMWxZVzVKYm5aVGRHUkVaWFpFYVcwcEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNob1lYTkpibkIxZEZOcmFYQkNhV0Z6VTNWdFQzVjBjSFYwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNtbGhZbXhsY3k1d2RYTm9LRzkxZEhCMWRGWmhjbWxoWW14bEtDZHBibkIxZEY5emEybHdYMkpwWVhOZmMzVnRKeXdnYVc1d2RYUnpXekJkTG1SaGRHRlVlWEJsTENCdmRYUndkWFJUYUdGd1pTd2dZMjl0Y0c5dVpXNTBjeWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWkdGMFlWUjVjR1VnUFNCMFpXNXpiM0pVZVhCbFZHOVhjMmRzVTNSdmNtRm5aVlI1Y0dVb2FXNXdkWFJ6V3pCZExtUmhkR0ZVZVhCbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJnWEc1Y2JpQWdJQ0FnSUNSN2MyaGhaR1Z5U0dWc2NHVnlMbkpsWjJsemRHVnlWVzVwWm05eWJYTW9kVzVwWm05eWJYTkJjbkpoZVNrdVpHVmpiR0Z5WlZaaGNtbGhZbXhsY3lndUxpNTJZWEpwWVdKc1pYTXBmVnh1WEc0Z0lDQWdJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNXRZV2x1VTNSaGNuUW9LWDFjYmlBZ0lDQWdJQ0FnSkh0emFHRmtaWEpJWld4d1pYSXVaM1ZoY21SQloyRnBibk4wVDNWMFQyWkNiM1Z1WkhOWGIzSnJaM0p2ZFhCVGFYcGxjeWduZFc1cFptOXliWE11YjNWMGNIVjBYM05wZW1VZ0x5QjFibWxtYjNKdGN5NW9hV1JrWlc1ZmMybDZaU2NwZlZ4dUlDQWdJQ0FnSUNCc1pYUWdhR2xrWkdWdVgzTnBlbVZmZG1WamRHOXlhWHBsWkRvZ2RUTXlJRDBnZFc1cFptOXliWE11YUdsa1pHVnVYM05wZW1VZ0x5QjFibWxtYjNKdGN5NWpiMjF3YjI1bGJuUnpPMXh1SUNBZ0lDQWdJQ0JzWlhRZ2IyWm1jMlYwSUQwZ1oyeHZZbUZzWDJsa2VDQXFJR2hwWkdSbGJsOXphWHBsWDNabFkzUnZjbWw2WldRN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ6ZFcwZ1BTQWtlMlpwYkd4V1pXTjBiM0lvSjJZek1pY3NJR052YlhCdmJtVnVkSE1wZlR0Y2JpQWdJQ0FnSUNBZ2RtRnlJSE54ZFdGeVpWTjFiU0E5SUNSN1ptbHNiRlpsWTNSdmNpZ25aak15Snl3Z1kyOXRjRzl1Wlc1MGN5bDlPMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tIWmhjaUJwT2lCMU16SWdQU0F3T3lCcElEd2dhR2xrWkdWdVgzTnBlbVZmZG1WamRHOXlhWHBsWkRzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2JHVjBJSE5yYVhCZmRtRnNkV1VnUFNCemEybHdXMjltWm5ObGRDQXJJR2xkTzF4dUlDQWdJQ0FnSUNBZ0lHeGxkQ0JpYVdGelgzWmhiSFZsSUQwZ0pIdG9ZWE5DYVdGelNXNXdkWFFnUHlBblltbGhjMXRwWFNjZ09pQmtZWFJoVkhsd1pTQXJJQ2NvTUM0d0tTZDlPMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQnBibkIxZEY5MllXeDFaU0E5SUhoYmIyWm1jMlYwSUNzZ2FWMDdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElIWmhiSFZsSUQwZ2FXNXdkWFJmZG1Gc2RXVWdLeUJ6YTJsd1gzWmhiSFZsSUNzZ1ltbGhjMTkyWVd4MVpUdGNiaUFnSUNBZ0lDQWdJQ0FrZTJoaGMwbHVjSFYwVTJ0cGNFSnBZWE5UZFcxUGRYUndkWFFnUHlBbmFXNXdkWFJmYzJ0cGNGOWlhV0Z6WDNOMWJWdHZabVp6WlhRZ0t5QnBYU0E5SUhaaGJIVmxPeWNnT2lBbkozMWNiaUFnSUNBZ0lDQWdJQ0J2ZFhSd2RYUmJiMlptYzJWMElDc2dhVjBnUFNCMllXeDFaVHRjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdaak15WDNaaGJIVmxJRDBnSkh0allYTjBWRzlHTXpJb1pHRjBZVlI1Y0dVc0lHTnZiWEJ2Ym1WdWRITXNJQ2QyWVd4MVpTY3BmVHRjYmlBZ0lDQWdJQ0FnSUNCemRXMGdLejBnWmpNeVgzWmhiSFZsTzF4dUlDQWdJQ0FnSUNBZ0lITnhkV0Z5WlZOMWJTQXJQU0JtTXpKZmRtRnNkV1VnS2lCbU16SmZkbUZzZFdVN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdiR1YwSUcxbFlXNGdQU0FrZTNOMWJWWmxZM1J2Y2lnbmMzVnRKeXdnWTI5dGNHOXVaVzUwY3lsOUlDOGdaak15S0hWdWFXWnZjbTF6TG1ocFpHUmxibDl6YVhwbEtUdGNiaUFnSUNBZ0lDQWdiR1YwSUdsdWRsOXpkR1JmWkdWMklEMGdhVzUyWlhKelpWTnhjblFvSkh0emRXMVdaV04wYjNJb0ozTnhkV0Z5WlZOMWJTY3NJR052YlhCdmJtVnVkSE1wZlNBdklHWXpNaWgxYm1sbWIzSnRjeTVvYVdSa1pXNWZjMmw2WlNrZ0pIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnphVzF3YkdsbWFXVmtJRDhnSnljZ09pQW5MU0J0WldGdUlDb2diV1ZoYmlkOUlDc2dkVzVwWm05eWJYTXVaWEJ6YVd4dmJpazdYRzRnSUNBZ0lDQWdJQ1I3YUdGelRXVmhiazkxZEhCMWRDQS9JQ2R0WldGdVgyOTFkSEIxZEZ0bmJHOWlZV3hmYVdSNFhTQTlJRzFsWVc0N0p5QTZJQ2NuZlZ4dUlDQWdJQ0FnSUNBa2UyaGhjMGx1ZGxOMFpFUmxkazkxZEhCMWRDQS9JQ2RwYm5aZmMzUmtYMjkxZEhCMWRGdG5iRzlpWVd4ZmFXUjRYU0E5SUdsdWRsOXpkR1JmWkdWMk95Y2dPaUFuSjMxY2JpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FUb2dkVE15SUQwZ01Ec2dhU0E4SUdocFpHUmxibDl6YVhwbFgzWmxZM1J2Y21sNlpXUTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJRzkxZEhCMWRGdHZabVp6WlhRZ0t5QnBYU0E5SUNodmRYUndkWFJiYjJabWMyVjBJQ3NnYVYwZ0pIdHphVzF3YkdsbWFXVmtJRDhnSnljZ09pQmdMU0FrZTJSaGRHRlVlWEJsZlNodFpXRnVLV0I5S1NBcUlDUjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVZSNWNHVjlLR2x1ZGw5emRHUmZaR1YyS1NBcUlHZGhiVzFoVzJsZElDUjdhR0Z6UW1WMFlVbHVjSFYwSUQ4Z0p5c2dZbVYwWVZ0cFhTY2dPaUFuSjMwN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWdPMXh1SUNBZ0lDQWdJQ0FnSUgwN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwY3lBOUlGdDdaR2x0Y3pvZ2IzVjBjSFYwVTJoaGNHVXNJR1JoZEdGVWVYQmxPaUJwYm5CMWRITmJNRjB1WkdGMFlWUjVjR1Y5WFR0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYjNWMGNIVjBRMjkxYm5RZ1BpQXhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSekxuQjFjMmdvZTJScGJYTTZJRzFsWVc1SmJuWlRkR1JFWlhaRWFXMHNJR1JoZEdGVWVYQmxPaUJFWVhSaFZIbHdaUzVtYkc5aGRIMHBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYjNWMGNIVjBRMjkxYm5RZ1BpQXlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSekxuQjFjMmdvZTJScGJYTTZJRzFsWVc1SmJuWlRkR1JFWlhaRWFXMHNJR1JoZEdGVWVYQmxPaUJFWVhSaFZIbHdaUzVtYkc5aGRIMHBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYjNWMGNIVjBRMjkxYm5RZ1BpQXpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSekxuQjFjMmdvZTJScGJYTTZJR2x1Y0hWMFUyaGhjR1VzSUdSaGRHRlVlWEJsT2lCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dWOUtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVoYldVNklDZFRhMmx3VEdGNVpYSk9iM0p0WVd4cGVtRjBhVzl1Snl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5vWVdSbGNrTmhZMmhsT2lCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdocGJuUTZJR0FrZTJOdmJYQnZibVZ1ZEhOOU95UjdhR0Z6VFdWaGJrOTFkSEIxZEgwN0pIdG9ZWE5KYm5aVGRHUkVaWFpQZFhSd2RYUjlPeVI3YUdGelNXNXdkWFJUYTJsd1FtbGhjMU4xYlU5MWRIQjFkSDFnTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm5CMWRFUmxjR1Z1WkdWdVkybGxjem9nYVc1d2RYUnpMbTFoY0Nnb1gybHVjSFYwTENCZmFXNWtaWGdwSUQwK0lDZDBlWEJsSnlsY2JpQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JuWlhSU2RXNUVZWFJoT2lBb0tTQTlQaUFvZTI5MWRIQjFkSE1zSUdScGMzQmhkR05vUjNKdmRYQTZJSHQ0T2lCTllYUm9MbU5sYVd3b2IzVjBjSFYwVTJsNlpTQXZJR2hwWkdSbGJsTnBlbVVnTHlBMk5DbDlMQ0J3Y205bmNtRnRWVzVwWm05eWJYTjlLU3hjYmlBZ0lDQWdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ0lDQjlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdjMnRwY0V4aGVXVnlUbTl5YlNBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1lYUjBjbWxpZFhSbGN6b2dVMnRwY0V4aGVXVnlUbTl5YlVGMGRISnBZblYwWlhNcE9pQjJiMmxrSUQwK0lIdGNiaUFnTHk4Z1ZFOUVUem9nYVc1cGRHbGhiR2w2WlNCcGMxUnlZV2x1YVc1bklHWnliMjBnUTI5dGNIVjBaVU52Ym5SbGVIUmNiaUFnWTI5dWMzUWdhWE5VY21GcGJtbHVaeUE5SUdaaGJITmxPMXh1SUNCMllXeHBaR0YwWlVsdWNIVjBjeWhqYjI1MFpYaDBMbWx1Y0hWMGN5azdYRzRnSUM4dklFMWxZVzRnWVc1a0lFbHVkbE4wWkVSbGRpQmhjbVVnYjI1c2VTQjFjMlZrSUdsdUlIUnlZV2x1YVc1bklHMXZaR1VnWVc1a0lHRnlaU0J1YjNRZ2NtVnhkV2x5WldRZ1ptOXlJR2x1Wm1WeVpXNWpaUzVjYmlBZ0x5OGdWR2hsZVNCaGNtVWdZV1JrWldRZ2FHVnlaU0JtYjNJZ1kyOXRjR3hsZEdWdVpYTnpJRzl1YkhrdVhHNGdJR052Ym5OMElHOTFkSEIxZEhNZ1BTQmJNRjA3WEc0Z0lHbG1JQ2hqYjI1MFpYaDBMbTkxZEhCMWRFTnZkVzUwSUQ0Z01Ta2dlMXh1SUNBZ0lHOTFkSEIxZEhNdWNIVnphQ2hwYzFSeVlXbHVhVzVuSUQ4Z01TQTZJQzB6S1R0Y2JpQWdmVnh1SUNCcFppQW9ZMjl1ZEdWNGRDNXZkWFJ3ZFhSRGIzVnVkQ0ErSURJcElIdGNiaUFnSUNCdmRYUndkWFJ6TG5CMWMyZ29hWE5VY21GcGJtbHVaeUEvSURJZ09pQXRNeWs3WEc0Z0lIMWNiaUFnYVdZZ0tHTnZiblJsZUhRdWIzVjBjSFYwUTI5MWJuUWdQaUF6S1NCN1hHNGdJQ0FnYjNWMGNIVjBjeTV3ZFhOb0tETXBPMXh1SUNCOVhHNGdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaGNiaUFnSUNBZ0lHTnlaV0YwWlZOcmFYQk1ZWGxsY2s1dmNtMVFjbTluY21GdFNXNW1ieWhqYjI1MFpYaDBMbWx1Y0hWMGN5d2dZWFIwY21saWRYUmxjeXdnWTI5dWRHVjRkQzV2ZFhSd2RYUkRiM1Z1ZEN3Z2FYTlVjbUZwYm1sdVp5a3NJSHR2ZFhSd2RYUnpmU2s3WEc1OU8xeHVJaXdnSWk4dklFTnZjSGx5YVdkb2RDQW9ZeWtnVFdsamNtOXpiMlowSUVOdmNuQnZjbUYwYVc5dUxpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1THk4Z1RHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFMUpWQ0JNYVdObGJuTmxMbHh1WEc1cGJYQnZjblFnZTBSaGRHRlVlWEJsZlNCbWNtOXRJQ2N1TGk4dUxpOHVMaTkzWVhOdExXTnZiVzF2YmljN1hHNXBiWEJ2Y25RZ2UxUmxibk52Y2xacFpYZDlJR1p5YjIwZ0p5NHVMeTR1TDNSbGJuTnZjaTEyYVdWM0p6dGNibWx0Y0c5eWRDQjdVMmhoY0dWVmRHbHNmU0JtY205dElDY3VMaTh1TGk5MWRHbHNKenRjYm1sdGNHOXlkQ0I3UVhSMGNtbGlkWFJsVjJsMGFFTmhZMmhsUzJWNUxDQmpjbVZoZEdWQmRIUnlhV0oxZEdWWGFYUm9RMkZqYUdWTFpYbDlJR1p5YjIwZ0p5NHVMMkYwZEhKcFluVjBaUzEzYVhSb0xXTmhZMmhsTFd0bGVTYzdYRzVwYlhCdmNuUWdlME52YlhCMWRHVkRiMjUwWlhoMExDQlFjbTluY21GdFNXNW1ieXdnVUhKdlozSmhiVlZ1YVdadmNtMHNJRlJsYm5OdmNrbHVabTk5SUdaeWIyMGdKeTR1TDNSNWNHVnpKenRjYmx4dWFXMXdiM0owSUh0amNtVmhkR1ZVWlc1emIzSlRhR0Z3WlZaaGNtbGhZbXhsY3l3Z1oyVjBSV3hsYldWdWRFRjBMQ0JKYm1ScFkyVnpTR1ZzY0dWeUxDQnBibkIxZEZaaGNtbGhZbXhsTENCdmRYUndkWFJXWVhKcFlXSnNaU3dnVTJoaFpHVnlTR1ZzY0dWeUxDQlZibWxtYjNKdGMwRnljbUY1Vkhsd1pYMGdabkp2YlNBbkxpOWpiMjF0YjI0bk8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRk5zYVdObFFYUjBjbWxpZFhSbGN5QmxlSFJsYm1SeklFRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlU0I3WEc0Z0lISmxZV1J2Ym14NUlITjBZWEowY3pvZ2JuVnRZbVZ5VzEwN1hHNGdJSEpsWVdSdmJteDVJR1Z1WkhNNklHNTFiV0psY2x0ZE8xeHVJQ0J5WldGa2IyNXNlU0JoZUdWek9pQnVkVzFpWlhKYlhUdGNibjFjYmx4dVkyOXVjM1FnZG1Gc2FXUmhkR1ZKYm5CMWRITWdQU0FvYVc1d2RYUnpPaUJ5WldGa2IyNXNlU0JVWlc1emIzSldhV1YzVzEwc0lHRjBkSEpwWW5WMFpYTTZJRk5zYVdObFFYUjBjbWxpZFhSbGN5azZJSFp2YVdRZ1BUNGdlMXh1SUNCcFppQW9JV2x1Y0hWMGN5QjhmQ0JwYm5CMWRITXViR1Z1WjNSb0lEd2dNU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25kRzl2SUdabGR5QnBibkIxZEhNbktUdGNiaUFnZlZ4dUlDQnBaaUFvWVhSMGNtbGlkWFJsY3k1aGVHVnpMbXhsYm1kMGFDQWhQVDBnTUNrZ2UxeHVJQ0FnSUdsbUlDaGhkSFJ5YVdKMWRHVnpMbUY0WlhNdWJHVnVaM1JvSUNFOVBTQmhkSFJ5YVdKMWRHVnpMbk4wWVhKMGN5NXNaVzVuZEdnZ2ZId2dZWFIwY21saWRYUmxjeTVoZUdWekxteGxibWQwYUNBaFBUMGdZWFIwY21saWRYUmxjeTVsYm1SekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkaGVHVnpMQ0J6ZEdGeWRITWdZVzVrSUdWdVpITWdiWFZ6ZENCb1lYWmxJSFJvWlNCellXMWxJR3hsYm1kMGFDY3BPMXh1SUNBZ0lIMWNiaUFnZlNCbGJITmxJR2xtSUNoaGRIUnlhV0oxZEdWekxuTjBZWEowY3k1c1pXNW5kR2dnSVQwOUlHRjBkSEpwWW5WMFpYTXVaVzVrY3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KM04wWVhKMGN5QmhibVFnWlc1a2N5QnRkWE4wSUdoaGRtVWdkR2hsSUhOaGJXVWdiR1Z1WjNSb0p5azdYRzRnSUgxY2JpQWdhVzV3ZFhSekxuTnNhV05sS0RFcExtWnZja1ZoWTJnb0tGOHNJR2xrZUNrZ1BUNGdlMXh1SUNBZ0lHbG1JQ2hwYm5CMWRITmJhV1I0SUNzZ01WMHVaR0YwWVZSNWNHVWdJVDA5SUVSaGRHRlVlWEJsTG1sdWRETXlJQ1ltSUdsdWNIVjBjMXRwWkhnZ0t5QXhYUzVrWVhSaFZIbHdaU0FoUFQwZ1JHRjBZVlI1Y0dVdWFXNTBOalFwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnU1c1d2RYUWdKSHRwWkhoOUlHMTFjM1FnWW1VZ1lXNGdZWEp5WVhrZ2IyWWdhVzUwTXpJZ2IzSWdhVzUwTmpSZ0tUdGNiaUFnSUNCOVhHNGdJSDBwTzF4dWZUdGNibHh1WTI5dWMzUWdjbVZoWkVsdWNIVjBJRDBnS0dsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZExDQnBaSGc2SUc1MWJXSmxjaWs2SUc1MWJXSmxjbHRkSUQwK0lIdGNiaUFnWTI5dWMzUWdhVzV3ZFhRNklHNTFiV0psY2x0ZElEMGdXMTA3WEc0Z0lHbG1JQ2hwYm5CMWRITXViR1Z1WjNSb0lENGdhV1I0S1NCN1hHNGdJQ0FnYVdZZ0tHbHVjSFYwYzF0cFpIaGRMbVJoZEdGVWVYQmxJRDA5UFNCRVlYUmhWSGx3WlM1cGJuUTJOQ2tnZTF4dUlDQWdJQ0FnYVc1d2RYUnpXMmxrZUYwdVoyVjBRbWxuU1c1ME5qUkJjbkpoZVNncExtWnZja1ZoWTJnb2RpQTlQaUJwYm5CMWRDNXdkWE5vS0U1MWJXSmxjaWgyS1NrcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2FXNXdkWFJ6VzJsa2VGMHVaR0YwWVZSNWNHVWdQVDA5SUVSaGRHRlVlWEJsTG1sdWRETXlLU0I3WEc0Z0lDQWdJQ0JwYm5CMWRITmJhV1I0WFM1blpYUkpiblF6TWtGeWNtRjVLQ2t1Wm05eVJXRmphQ2gySUQwK0lHbHVjSFYwTG5CMWMyZ29UblZ0WW1WeUtIWXBLU2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1NXNXdkWFFnSkh0cFpIaDlJRzExYzNRZ1ltVWdZVzRnWVhKeVlYa2diMllnYVc1ME16SWdiM0lnYVc1ME5qUmdLVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHbHVjSFYwTzF4dWZUdGNibHh1WTI5dWMzUWdZM0psWVhSbFUyeHBZMlZCZEhSeWFXSjFkR1Z6Um5KdmJVbHVjSFYwY3lBOVhHNGdJQ0FnS0dsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZExDQmhkSFJ5YVdKMWRHVnpPaUJUYkdsalpVRjBkSEpwWW5WMFpYTXBPaUJUYkdsalpVRjBkSEpwWW5WMFpYTWdQVDRnZTF4dUlDQWdJQ0FnYVdZZ0tHbHVjSFYwY3k1c1pXNW5kR2dnUGlBeEtTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElITjBZWEowY3pvZ2JuVnRZbVZ5VzEwZ1BTQnlaV0ZrU1c1d2RYUW9hVzV3ZFhSekxDQXhLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaVzVrY3pvZ2JuVnRZbVZ5VzEwZ1BTQnlaV0ZrU1c1d2RYUW9hVzV3ZFhSekxDQXlLVHRjYmlBZ0lDQWdJQ0FnYkdWMElHRjRaWE02SUc1MWJXSmxjbHRkSUQwZ2NtVmhaRWx1Y0hWMEtHbHVjSFYwY3l3Z015azdYRzRnSUNBZ0lDQWdJR2xtSUNoaGVHVnpMbXhsYm1kMGFDQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR0Y0WlhNZ1BTQmJMaTR1UVhKeVlYa29hVzV3ZFhSeld6QmRMbVJwYlhNdWJHVnVaM1JvS1M1clpYbHpLQ2xkTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCamNtVmhkR1ZCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrb2UzTjBZWEowY3l3Z1pXNWtjeXdnWVhobGMzMHBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHRjBkSEpwWW5WMFpYTTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZUdGNibHh1WTI5dWMzUWdabWw0VTNSaGNuUkZibVJXWVd4MVpYTWdQVnh1SUNBZ0lDaDJZV3gxWlRvZ2JuVnRZbVZ5TENCcGJtUmxlRG9nYm5WdFltVnlMQ0JwYm5CMWRGTm9ZWEJsT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFN3Z1lYaGxjem9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBzSUhOMFpYQnpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU2s2WEc0Z0lDQWdJQ0FnSUc1MWJXSmxjaUE5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUc1bGQxWmhiSFZsSUQwZ2RtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSFpoYkhWbElEd2dNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdibVYzVm1Gc2RXVWdLejBnYVc1d2RYUlRhR0Z3WlZ0aGVHVnpXMmx1WkdWNFhWMDdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2h6ZEdWd2MxdHBibVJsZUYwZ1BDQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1RXRjBhQzV0WVhnb01Dd2dUV0YwYUM1dGFXNG9ibVYzVm1Gc2RXVXNJR2x1Y0hWMFUyaGhjR1ZiWVhobGMxdHBibVJsZUYxZElDMGdNU2twTzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdUV0YwYUM1dFlYZ29NQ3dnVFdGMGFDNXRhVzRvYm1WM1ZtRnNkV1VzSUdsdWNIVjBVMmhoY0dWYllYaGxjMXRwYm1SbGVGMWRLU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlPMXh1WEc1amIyNXpkQ0JqWVd4amRXeGhkR1ZKYm5CMWRFbHVaR2xqWlhOSmJYQnNJRDFjYmlBZ0lDQW9hVzV3ZFhRNklFbHVaR2xqWlhOSVpXeHdaWElzSUc5MWRIQjFkRG9nU1c1a2FXTmxjMGhsYkhCbGNpd2dhVzV3ZFhSVGFHRndaVG9nY21WaFpHOXViSGtnYm5WdFltVnlXMTBwT2lCemRISnBibWNnUFQ1Y2JpQWdJQ0FnSUNBZ1lHWnVJR05oYkdOMWJHRjBaVWx1Y0hWMFNXNWthV05sY3lodmRYUndkWFJmYVc1a2FXTmxjem9nSkh0dmRYUndkWFF1ZEhsd1pTNXBibVJwWTJWemZTa2dMVDRnSkh0cGJuQjFkQzUwZVhCbExtbHVaR2xqWlhOOUlIdGNiaUFnSUNBZ0lDQWdJQ0IyWVhJZ2FXNXdkWFJmYVc1a2FXTmxjem9nSkh0cGJuQjFkQzUwZVhCbExtbHVaR2xqWlhOOU8xeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCallYSnllU0E5SURCMU8xeHVJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2RtRnlJR2tnUFNBa2UybHVjSFYwVTJoaGNHVXViR1Z1WjNSb2ZUc2dhU0ErUFNBd095QnBMUzBwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCcGJuQjFkRjl6YUdGd1pWOXBJRDBnSkh0blpYUkZiR1Z0Wlc1MFFYUW9KM1Z1YVdadmNtMXpMbWx1Y0hWMFgzTm9ZWEJsSnl3Z0oya25MQ0JwYm5CMWRGTm9ZWEJsTG14bGJtZDBhQ2w5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUhOMFpYQnpYMmtnUFNBa2UyZGxkRVZzWlcxbGJuUkJkQ2duZFc1cFptOXliWE11YzNSbGNITW5MQ0FuYVNjc0lHbHVjSFYwVTJoaGNHVXViR1Z1WjNSb0tYMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjMmxuYm5OZmFTQTlJQ1I3WjJWMFJXeGxiV1Z1ZEVGMEtDZDFibWxtYjNKdGN5NXphV2R1Y3ljc0lDZHBKeXdnYVc1d2RYUlRhR0Z3WlM1c1pXNW5kR2dwZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCemRHRnlkSE5mYVNBOUlDUjdaMlYwUld4bGJXVnVkRUYwS0NkMWJtbG1iM0p0Y3k1emRHRnlkSE1uTENBbmFTY3NJR2x1Y0hWMFUyaGhjR1V1YkdWdVozUm9LWDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnYjNWMGNIVjBYMmx1WkdWNElEMGdKSHR2ZFhSd2RYUXVhVzVrYVdObGMwZGxkQ2duYjNWMGNIVjBYMmx1WkdsalpYTW5MQ0FuYVNjcGZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQnBibkIxZEY5cGJtUmxlQ0E5SUc5MWRIQjFkRjlwYm1SbGVDQXFJSE4wWlhCelgya2dLeUJ6ZEdGeWRITmZhU0FySUdOaGNuSjVPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnljbmtnUFNCcGJuQjFkRjlwYm1SbGVDQXZJR2x1Y0hWMFgzTm9ZWEJsWDJrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwYm5CMWRGOXBibVJsZUNBOUlHbHVjSFYwWDJsdVpHVjRJQ1VnYVc1d2RYUmZjMmhoY0dWZmFUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHphV2R1YzE5cElEd2dNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm5CMWRGOXBibVJsZUNBOUlHbHVjSFYwWDNOb1lYQmxYMmtnTFNCcGJuQjFkRjlwYm1SbGVDQXRJREYxSUNzZ2MzUmhjblJ6WDJrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWtlMmx1Y0hWMExtbHVaR2xqWlhOVFpYUW9KMmx1Y0hWMFgybHVaR2xqWlhNbkxDQW5hU2NzSUNkcGJuQjFkRjlwYm1SbGVDY3BmVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbHVjSFYwWDJsdVpHbGpaWE03WEc0Z0lDQWdJQ0I5WUR0Y2JseHVZMjl1YzNRZ1kzSmxZWFJsVTJ4cFkyVlFjbTluY21GdFNXNW1ieUE5SUNocGJuQjFkSE02SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhTd2dZWFIwY21saWRYUmxjem9nVTJ4cFkyVkJkSFJ5YVdKMWRHVnpLVG9nVUhKdlozSmhiVWx1Wm04Z1BUNGdlMXh1SUNCamIyNXpkQ0JwYm5CMWRGTm9ZWEJsSUQwZ2FXNXdkWFJ6V3pCZExtUnBiWE03WEc0Z0lHTnZibk4wSUdsdWNIVjBVMmw2WlNBOUlGTm9ZWEJsVlhScGJDNXphWHBsS0dsdWNIVjBVMmhoY0dVcE8xeHVJQ0JqYjI1emRDQmhlR1Z6SUQwZ0tHRjBkSEpwWW5WMFpYTXVZWGhsY3k1c1pXNW5kR2dnUGlBd0tTQS9JRk5vWVhCbFZYUnBiQzV1YjNKdFlXeHBlbVZCZUdWektHRjBkSEpwWW5WMFpYTXVZWGhsY3l3Z2FXNXdkWFJUYUdGd1pTNXNaVzVuZEdncElEcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JiTGk0dVFYSnlZWGtvYVc1d2RYUlRhR0Z3WlM1c1pXNW5kR2dwTG10bGVYTW9LVjA3WEc0Z0lHeGxkQ0J6ZEdWd2N5QTlJSEpsWVdSSmJuQjFkQ2hwYm5CMWRITXNJRFFwTzF4dUlDQnpkR1Z3Y3k1bWIzSkZZV05vS0NoemRHVndLU0E5UGlCemRHVndJQ0U5UFNBd0lIeDhJQ2dvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2R6ZEdWd0lHTmhibTV2ZENCaVpTQXdKeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwcEtUdGNiaUFnYVdZZ0tITjBaWEJ6TG14bGJtZDBhQ0E5UFQwZ01Da2dlMXh1SUNBZ0lITjBaWEJ6SUQwZ1FYSnlZWGtvWVhobGN5NXNaVzVuZEdncExtWnBiR3dvTVNrN1hHNGdJSDFjYmlBZ1kyOXVjM1FnYzNSaGNuUnpJRDBnWVhSMGNtbGlkWFJsY3k1emRHRnlkSE11YldGd0tDaHpkR0Z5ZEN3Z2FTa2dQVDRnWm1sNFUzUmhjblJGYm1SV1lXeDFaWE1vYzNSaGNuUXNJR2tzSUdsdWNIVjBVMmhoY0dVc0lHRjRaWE1zSUhOMFpYQnpLU2s3WEc1Y2JpQWdZMjl1YzNRZ1pXNWtjeUE5SUdGMGRISnBZblYwWlhNdVpXNWtjeTV0WVhBb0tHVnVaQ3dnYVNrZ1BUNGdabWw0VTNSaGNuUkZibVJXWVd4MVpYTW9aVzVrTENCcExDQnBibkIxZEZOb1lYQmxMQ0JoZUdWekxDQnpkR1Z3Y3lrcE8xeHVYRzRnSUdsbUlDaGhlR1Z6TG14bGJtZDBhQ0FoUFQwZ2MzUmhjblJ6TG14bGJtZDBhQ0I4ZkNCaGVHVnpMbXhsYm1kMGFDQWhQVDBnWlc1a2N5NXNaVzVuZEdncElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjNOMFlYSjBMQ0JsYm1SeklHRnVaQ0JoZUdWeklITm9iM1ZzWkNCb1lYWmxJSFJvWlNCellXMWxJRzUxYldKbGNpQnZaaUJsYkdWdFpXNTBjeWNwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR0Y0WlhNdWJHVnVaM1JvSUNFOVBTQnBibkIxZEZOb1lYQmxMbXhsYm1kMGFDa2dlMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dhVzV3ZFhSVGFHRndaUzVzWlc1bmRHZzdJQ3NyYVNrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZoZUdWekxtbHVZMngxWkdWektHa3BLU0I3WEc0Z0lDQWdJQ0FnSUhOMFlYSjBjeTV6Y0d4cFkyVW9hU3dnTUN3Z01DazdYRzRnSUNBZ0lDQWdJR1Z1WkhNdWMzQnNhV05sS0drc0lEQXNJR2x1Y0hWMFUyaGhjR1ZiYVYwcE8xeHVJQ0FnSUNBZ0lDQnpkR1Z3Y3k1emNHeHBZMlVvYVN3Z01Dd2dNU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNGdJR052Ym5OMElITnBaMjV6SUQwZ2MzUmxjSE11YldGd0tITjBaWEFnUFQ0Z1RXRjBhQzV6YVdkdUtITjBaWEFwS1R0Y2JpQWdMeThnUTI5dWRtVnlkQ0J1WldkaGRHbDJaU0J6ZEdWd2N5QjBieUJ3YjNOcGRHbDJaU0J6ZEdWd2N5QmhibVFnY21WMlpYSnpaU0J6ZEdGeWRITWdZVzVrSUdWdVpITmNiaUFnYzNSbGNITXVabTl5UldGamFDZ29jM1JsY0N3Z2FTd2dZWEp5WVhrcElEMCtJSHRjYmlBZ0lDQnBaaUFvYzNSbGNDQThJREFwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJRzUxYlZOMFpYQnpJRDBnS0dWdVpITmJhVjBnTFNCemRHRnlkSE5iYVYwcElDOGdjM1JsY0R0Y2JpQWdJQ0FnSUdOdmJuTjBJRzVsZDBWdVpDQTlJSE4wWVhKMGMxdHBYVHRjYmlBZ0lDQWdJR052Ym5OMElHNWxkMU4wWVhKMElEMGdibVYzUlc1a0lDc2diblZ0VTNSbGNITWdLaUJ6ZEdWd2MxdHBYVHRjYmlBZ0lDQWdJSE4wWVhKMGMxdHBYU0E5SUc1bGQxTjBZWEowTzF4dUlDQWdJQ0FnWlc1a2MxdHBYU0E5SUc1bGQwVnVaRHRjYmlBZ0lDQWdJR0Z5Y21GNVcybGRJRDBnTFhOMFpYQTdYRzRnSUNBZ2ZWeHVJQ0I5S1R0Y2JpQWdMeThnVDNWMGNIVjBJSEpoYm1zZ2FYTWdaWGh3WldOMFpXUWdkRzhnWW1VZ2JHVnpjeUIwYUdGdUlHOXlJR1Z4ZFdGc0lIUnZJSFJvWlNCcGJuQjFkQ0J5WVc1ckxseHVJQ0JqYjI1emRDQnZkWFJ3ZFhSVGFHRndaU0E5SUdsdWNIVjBVMmhoY0dVdWMyeHBZMlVvTUNrN1hHNGdJR0Y0WlhNdVptOXlSV0ZqYUNnb1lYaHBjeXdnWHlrZ1BUNGdlMXh1SUNBZ0lHOTFkSEIxZEZOb1lYQmxXMkY0YVhOZElEMGdUV0YwYUM1alpXbHNLQ2hsYm1SelcyRjRhWE5kSUMwZ2MzUmhjblJ6VzJGNGFYTmRLU0F2SUhOMFpYQnpXMkY0YVhOZEtUdGNiaUFnZlNrN1hHNGdJR052Ym5OMElHOTFkSEIxZEZSbGJuTnZja2x1Wm04NklGUmxibk52Y2tsdVptOGdQU0I3WkdsdGN6b2diM1YwY0hWMFUyaGhjR1VzSUdSaGRHRlVlWEJsT2lCcGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dWOU8xeHVYRzRnSUdOdmJuTjBJRzkxZEhCMWRDQTlJRzkxZEhCMWRGWmhjbWxoWW14bEtDZHZkWFJ3ZFhRbkxDQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVXNJRzkxZEhCMWRGTm9ZWEJsTG14bGJtZDBhQ2s3WEc0Z0lHTnZibk4wSUdsdWNIVjBJRDBnYVc1d2RYUldZWEpwWVdKc1pTZ25hVzV3ZFhRbkxDQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVXNJR2x1Y0hWMGMxc3dYUzVrYVcxekxteGxibWQwYUNrN1hHNGdJR052Ym5OMElHOTFkSEIxZEZOcGVtVWdQU0JUYUdGd1pWVjBhV3d1YzJsNlpTaHZkWFJ3ZFhSVGFHRndaU2s3WEc0Z0lHTnZibk4wSUhWdWFXWnZjbTF6T2lCVmJtbG1iM0p0YzBGeWNtRjVWSGx3WlNBOUlGdGNiaUFnSUNCN2JtRnRaVG9nSjI5MWRIQjFkRk5wZW1VbkxDQjBlWEJsT2lBbmRUTXlKMzBzSUh0dVlXMWxPaUFuYzNSaGNuUnpKeXdnZEhsd1pUb2dKM1V6TWljc0lHeGxibWQwYURvZ2MzUmhjblJ6TG14bGJtZDBhSDBzWEc0Z0lDQWdlMjVoYldVNklDZHphV2R1Y3ljc0lIUjVjR1U2SUNkcE16SW5MQ0JzWlc1bmRHZzZJSE5wWjI1ekxteGxibWQwYUgwc0lIdHVZVzFsT2lBbmMzUmxjSE1uTENCMGVYQmxPaUFuZFRNeUp5d2diR1Z1WjNSb09pQnpkR1Z3Y3k1c1pXNW5kR2g5WEc0Z0lGMDdYRzVjYmlBZ1kyOXVjM1FnY0hKdlozSmhiVlZ1YVdadmNtMXpPaUJRY205bmNtRnRWVzVwWm05eWJWdGRJRDBnVzF4dUlDQWdJSHQwZVhCbE9pQkVZWFJoVkhsd1pTNTFhVzUwTXpJc0lHUmhkR0U2SUc5MWRIQjFkRk5wZW1WOUxDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJ6ZEdGeWRITjlMRnh1SUNBZ0lIdDBlWEJsT2lCRVlYUmhWSGx3WlM1cGJuUXpNaXdnWkdGMFlUb2djMmxuYm5OOUxDQjdkSGx3WlRvZ1JHRjBZVlI1Y0dVdWRXbHVkRE15TENCa1lYUmhPaUJ6ZEdWd2MzMHNYRzRnSUNBZ0xpNHVZM0psWVhSbFZHVnVjMjl5VTJoaGNHVldZWEpwWVdKc1pYTW9hVzV3ZFhSeld6QmRMbVJwYlhNc0lHOTFkSEIxZEZOb1lYQmxLVnh1SUNCZE8xeHVYRzRnSUdOdmJuTjBJR2RsZEZOb1lXUmxjbE52ZFhKalpTQTlJQ2h6YUdGa1pYSklaV3h3WlhJNklGTm9ZV1JsY2tobGJIQmxjaWtnUFQ0Z1lGeHVJQ0FnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1Y21WbmFYTjBaWEpWYm1sbWIzSnRjeWgxYm1sbWIzSnRjeWt1WkdWamJHRnlaVlpoY21saFlteGxjeWhwYm5CMWRDd2diM1YwY0hWMEtYMWNiaUFnSUNBZ0lDQWdKSHRqWVd4amRXeGhkR1ZKYm5CMWRFbHVaR2xqWlhOSmJYQnNLR2x1Y0hWMExDQnZkWFJ3ZFhRc0lHbHVjSFYwVTJoaGNHVXBmVnh1SUNBZ0lDQWdJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNXRZV2x1VTNSaGNuUW9LWDFjYmlBZ0lDQWdJQ0FnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTVuZFdGeVpFRm5ZV2x1YzNSUGRYUlBaa0p2ZFc1a2MxZHZjbXRuY205MWNGTnBlbVZ6S0NkMWJtbG1iM0p0Y3k1dmRYUndkWFJUYVhwbEp5bDlYRzRnSUNBZ0lDQWdJQ0FnYkdWMElHOTFkSEIxZEY5cGJtUnBZMlZ6SUQwZ0pIdHZkWFJ3ZFhRdWIyWm1jMlYwVkc5SmJtUnBZMlZ6S0NkbmJHOWlZV3hmYVdSNEp5bDlPMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQnBibkIxZEY5cGJtUnBZMlZ6SUQwZ1kyRnNZM1ZzWVhSbFNXNXdkWFJKYm1ScFkyVnpLRzkxZEhCMWRGOXBibVJwWTJWektUdGNiaUFnSUNBZ0lDQWdJQ0FrZTI5MWRIQjFkQzV6WlhSQ2VVOW1abk5sZENnbloyeHZZbUZzWDJsa2VDY3NJR2x1Y0hWMExtZGxkRUo1U1c1a2FXTmxjeWduYVc1d2RYUmZhVzVrYVdObGN5Y3BLWDFjYmlBZ0lDQWdJSDFnTzF4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUc1aGJXVTZJQ2RUYkdsalpTY3NYRzRnSUNBZ2MyaGhaR1Z5UTJGamFHVTZJSHRvYVc1ME9pQmdKSHR6YVdkdWN5NXNaVzVuZEdoOVh5UjdjM1JoY25SekxteGxibWQwYUgxZkpIdHpkR1Z3Y3k1c1pXNW5kR2g5WUN3Z2FXNXdkWFJFWlhCbGJtUmxibU5wWlhNNklGc25jbUZ1YXlkZGZTeGNiaUFnSUNCblpYUlRhR0ZrWlhKVGIzVnlZMlVzWEc0Z0lDQWdaMlYwVW5WdVJHRjBZVG9nS0NrZ1BUNGdLSHRjYmlBZ0lDQWdJRzkxZEhCMWRITTZJRnR2ZFhSd2RYUlVaVzV6YjNKSmJtWnZYU3hjYmlBZ0lDQWdJR1JwYzNCaGRHTm9SM0p2ZFhBNklIdDRPaUJOWVhSb0xtTmxhV3dvYVc1d2RYUlRhWHBsSUM4Z05qUWdMeW9nZDI5eWEyZHliM1Z3SUhOcGVtVWdLaThwZlN4Y2JpQWdJQ0FnSUhCeWIyZHlZVzFWYm1sbWIzSnRjMXh1SUNBZ0lIMHBYRzRnSUgwN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdjMnhwWTJVZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRk5zYVdObFFYUjBjbWxpZFhSbGN5azZJSFp2YVdRZ1BUNGdlMXh1SUNCMllXeHBaR0YwWlVsdWNIVjBjeWhqYjI1MFpYaDBMbWx1Y0hWMGN5d2dZWFIwY21saWRYUmxjeWs3WEc0Z0lHTnZibk4wSUhWd1pHRjBaV1JCZEhSeWFXSjFkR1Z6SUQwZ1kzSmxZWFJsVTJ4cFkyVkJkSFJ5YVdKMWRHVnpSbkp2YlVsdWNIVjBjeWhqYjI1MFpYaDBMbWx1Y0hWMGN5d2dZWFIwY21saWRYUmxjeWs3WEc0Z0lHTnZiblJsZUhRdVkyOXRjSFYwWlNoamNtVmhkR1ZUYkdsalpWQnliMmR5WVcxSmJtWnZLR052Ym5SbGVIUXVhVzV3ZFhSekxDQjFjR1JoZEdWa1FYUjBjbWxpZFhSbGN5a3NJSHRwYm5CMWRITTZJRnN3WFgwcE8xeHVJQ0F2THlCcFppQW9VMmhoY0dWVmRHbHNMbk5wZW1Vb2NISnZaM0poYlM1dmRYUndkWFJ6V3pCZExtUnBiWE1wSUQ0Z01Da2dlMXh1SUNBdkx5QWdJR052Ym5SbGVIUXVZMjl0Y0hWMFpTaHdjbTluY21GdFNXNW1iMHh2WVdSbGNpd2dlMmx1Y0hWMGN6b2dXekJkZlNrN1hHNGdJQzh2SUgwZ1pXeHpaU0I3WEc0Z0lDOHZJQ0FnTHk4Z1ZFOUVUem9nYzNWd2NHOXlkQ0JsYlhCMGVTQnZkWFJ3ZFhSY2JpQWdMeThnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjNOc2FXTmxPaUJ2ZFhSd2RYUWdjMmw2WlNCcGN5QXdKeWs3WEc0Z0lDOHZJSDFjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCd1lYSnpaVk5zYVdObFFYUjBjbWxpZFhSbGN5QTlJQ2hoZEhSeWFXSjFkR1Z6T2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0IxYm10dWIzZHVQaWs2SUZOc2FXTmxRWFIwY21saWRYUmxjeUE5UGlCN1hHNGdJR052Ym5OMElITjBZWEowY3lBOUlHRjBkSEpwWW5WMFpYTXVjM1JoY25SeklHRnpJRzUxYldKbGNsdGRPMXh1SUNCamIyNXpkQ0JsYm1SeklEMGdZWFIwY21saWRYUmxjeTVsYm1SeklHRnpJRzUxYldKbGNsdGRPMXh1SUNCamIyNXpkQ0JoZUdWeklEMGdZWFIwY21saWRYUmxjeTVoZUdWeklHRnpJRzUxYldKbGNsdGRPMXh1SUNCeVpYUjFjbTRnWTNKbFlYUmxRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1S0h0emRHRnlkSE1zSUdWdVpITXNJR0Y0WlhOOUtUdGNibjA3WEc0aUxDQWlMeThnUTI5d2VYSnBaMmgwSUNoaktTQk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNHZMeUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnVFVsVUlFeHBZMlZ1YzJVdVhHNWNiaTh2SUZSUFJFODZJSFJvYVhNZ2FYTWdkR2hsSUhOaGJXVWdibUZwZG1VZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRnZDJVZ2RYTmxJR1p2Y2lCeVpXUjFZMlVnZEdoaGRDQm9ZWE5jYmk4dklIQmxjbVp2Y20xaGJtTmxJR3hwYldsMFlYUnBiMjV6SUhkb1pXNGdkR2hsSUhKbFpIVmpaV1FnWVhocGN5QnBjeUJzYjI1bkxpQk9aV1ZrSUhSdklHRmtaRnh1THk4Z1lTQnZjSFJwYldsNlpXUWdZMjlrWlhCaGRHZ2dabTl5SUhSb2FYTXVYRzVjYm1sdGNHOXlkQ0I3UkdGMFlWUjVjR1Y5SUdaeWIyMGdKeTR1THk0dUx5NHVMM2RoYzIwdFkyOXRiVzl1Snp0Y2JtbHRjRzl5ZENCN1ZHVnVjMjl5Vm1sbGQzMGdabkp2YlNBbkxpNHZMaTR2ZEdWdWMyOXlMWFpwWlhjbk8xeHVhVzF3YjNKMElIdFRhR0Z3WlZWMGFXeDlJR1p5YjIwZ0p5NHVMeTR1TDNWMGFXd25PMXh1YVcxd2IzSjBJSHRCZEhSeWFXSjFkR1ZYYVhSb1EyRmphR1ZMWlhrc0lHTnlaV0YwWlVGMGRISnBZblYwWlZkcGRHaERZV05vWlV0bGVYMGdabkp2YlNBbkxpNHZZWFIwY21saWRYUmxMWGRwZEdndFkyRmphR1V0YTJWNUp6dGNibWx0Y0c5eWRDQjdRMjl0Y0hWMFpVTnZiblJsZUhRc0lGQnliMmR5WVcxSmJtWnZmU0JtY205dElDY3VMaTkwZVhCbGN5YzdYRzVjYm1sdGNHOXlkQ0I3WjJWMFRXRjRRMjl0Y0c5dVpXNTBjeXdnYVc1d2RYUldZWEpwWVdKc1pTd2diM1YwY0hWMFZtRnlhV0ZpYkdVc0lGTm9ZV1JsY2tobGJIQmxjaXdnYzNWdFZtVmpkRzl5TENCMFpXNXpiM0pVZVhCbFZHOVhjMmRzVTNSdmNtRm5aVlI1Y0dWOUlHWnliMjBnSnk0dlkyOXRiVzl1Snp0Y2JseHVZMjl1YzNRZ2RtRnNhV1JoZEdWSmJuQjFkSE1nUFNBb2FXNXdkWFJ6T2lCeVpXRmtiMjVzZVNCVVpXNXpiM0pXYVdWM1cxMHBPaUIyYjJsa0lEMCtJSHRjYmlBZ2FXWWdLQ0ZwYm5CMWRITWdmSHdnYVc1d2RYUnpMbXhsYm1kMGFDQWhQVDBnTVNrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduVTI5bWRHMWhlQ0J2Y0NCeVpYRjFhWEpsY3lBeElHbHVjSFYwTGljcE8xeHVJQ0I5WEc1OU8xeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRk52Wm5SdFlYaEJkSFJ5YVdKMWRHVnpJR1Y0ZEdWdVpITWdRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1SUh0Y2JpQWdjbVZoWkc5dWJIa2dZWGhwY3pvZ2JuVnRZbVZ5TzF4dWZWeHVYRzVqYjI1emRDQmpjbVZoZEdWVGIyWjBiV0Y0VUhKdlozSmhiVWx1Wm04Z1BTQW9hVzV3ZFhRNklGUmxibk52Y2xacFpYY3NJR0YwZEhKcFluVjBaWE02SUZOdlpuUnRZWGhCZEhSeWFXSjFkR1Z6S1RvZ1VISnZaM0poYlVsdVptOGdQVDRnZTF4dUlDQmpiMjV6ZENCemFHRndaU0E5SUdsdWNIVjBMbVJwYlhNN1hHNGdJR052Ym5OMElHOTFkSEIxZEZOcGVtVWdQU0JUYUdGd1pWVjBhV3d1YzJsNlpTaHphR0Z3WlNrN1hHNGdJR052Ym5OMElGZEhJRDBnTmpRN1hHNGdJR3hsZENCaGVHbHpJRDBnWVhSMGNtbGlkWFJsY3k1aGVHbHpPMXh1SUNCcFppQW9ZWGhwY3lBOElEQXBJSHRjYmlBZ0lDQmhlR2x6SUQwZ2MyaGhjR1V1YkdWdVozUm9JQ3NnWVhocGN6dGNiaUFnZlZ4dUlDQnBaaUFvWVhocGN5QThJSE5vWVhCbExteGxibWQwYUNBdElERXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0ozTnZablJ0WVhnZ2IyNXNlU0J6ZFhCd2IzSjBjeUJzWVhOMElHRjRhWE1nWm05eUlHNXZkeTRuS1R0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUdOdmJITWdQU0J6YUdGd1pWdGhlR2x6WFR0Y2JpQWdZMjl1YzNRZ2NtOTNjeUE5SUc5MWRIQjFkRk5wZW1VZ0x5QmpiMnh6TzF4dUlDQmpiMjV6ZENCamIyMXdiMjVsYm5SeklEMGdaMlYwVFdGNFEyOXRjRzl1Wlc1MGN5aGpiMnh6S1R0Y2JpQWdZMjl1YzNRZ2NHRmphMlZrUTI5c2N5QTlJR052YkhNZ0x5QmpiMjF3YjI1bGJuUnpPMXh1WEc0Z0lHTnZibk4wSUcxaGVGWmxZM1J2Y2lBOUlDaHVZVzFsT2lCemRISnBibWNzSUdOdmJYQnZibVZ1ZEhNNklHNTFiV0psY2lrZ1BUNGdlMXh1SUNBZ0lHbG1JQ2hqYjIxd2IyNWxiblJ6SUQwOVBTQTBLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZRzFoZUNodFlYZ29KSHR1WVcxbGZTNTRMQ0FrZTI1aGJXVjlMbmtwTENCdFlYZ29KSHR1WVcxbGZTNTZMQ0FrZTI1aGJXVjlMbmNwS1dBN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoamIyMXdiMjVsYm5SeklEMDlQU0F5S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWUcxaGVDZ2tlMjVoYldWOUxuZ3NJQ1I3Ym1GdFpYMHVlU2xnTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvWTI5dGNHOXVaVzUwY3lBOVBUMGdNeWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR0J0WVhnb2JXRjRLQ1I3Ym1GdFpYMHVlQ3dnSkh0dVlXMWxmUzU1S1N3Z0pIdHVZVzFsZlM1NktXQTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUc1aGJXVTdYRzRnSUgwN1hHNGdJR052Ym5OMElIZ2dQU0JwYm5CMWRGWmhjbWxoWW14bEtDZDRKeXdnYVc1d2RYUXVaR0YwWVZSNWNHVXNJR2x1Y0hWMExtUnBiWE1zSUdOdmJYQnZibVZ1ZEhNcE8xeHVJQ0JqYjI1emRDQnZkWFJ3ZFhRZ1BTQnZkWFJ3ZFhSV1lYSnBZV0pzWlNnbmNtVnpkV3gwSnl3Z2FXNXdkWFF1WkdGMFlWUjVjR1VzSUdsdWNIVjBMbVJwYlhNc0lHTnZiWEJ2Ym1WdWRITXBPMXh1SUNCamIyNXpkQ0IyWVd4MVpWUjVjR1VnUFNCNExuUjVjR1V1ZG1Gc2RXVTdYRzRnSUM4dklEWXVNaTQwSUdsdUlIZG5jMndnYzNCbFkxeHVJQ0JqYjI1emRDQjBhSEpsWVdSTllYaEVaV05zSUQwZ2RHVnVjMjl5Vkhsd1pWUnZWM05uYkZOMGIzSmhaMlZVZVhCbEtHbHVjSFYwTG1SaGRHRlVlWEJsS1NBOVBUMGdKMll6TWljZ1AxeHVJQ0FnSUNBZ1lIWmhjaUIwYUhKbFlXUk5ZWGdnUFNBa2UzWmhiSFZsVkhsd1pYMG9MVE11TkRBeU9ESXpaU3N6T0dZcE8yQWdPbHh1SUNBZ0lDQWdZSFpoY2lCMGFISmxZV1JOWVhnZ1BTQWtlM1poYkhWbFZIbHdaWDBvTFRZMU5UQTBMakJvS1R0Z08xeHVJQ0JqYjI1emRDQm5aWFJUYUdGa1pYSlRiM1Z5WTJVZ1BTQW9jMmhoWkdWeVNHVnNjR1Z5T2lCVGFHRmtaWEpJWld4d1pYSXBJRDArSUdCY2JpQWdJQ0FnSUhaaGNqeDNiM0pyWjNKdmRYQStJSEp2ZDAxaGVGTm9ZWEpsWkNBNklDUjdkbUZzZFdWVWVYQmxmVHRjYmlBZ0lDQWdJSFpoY2p4M2IzSnJaM0p2ZFhBK0lISnZkMU4xYlZOb1lYSmxaQ0E2SUNSN2RtRnNkV1ZVZVhCbGZUdGNiaUFnSUNBZ0lIWmhjangzYjNKclozSnZkWEErSUhSb2NtVmhaRk5vWVhKbFpDQTZJR0Z5Y21GNVBDUjdkbUZzZFdWVWVYQmxmU3dnSkh0WFIzMCtPMXh1WEc0Z0lDQWdJQ0JtYmlCblpYUldZV3gxWlNoeWIzYzZJR2t6TWl3Z1kyOXNPaUJwTXpJc0lISnZkMTl6ZEhKcFpHVTZJR2t6TWlrZ0xUNGdKSHQyWVd4MVpWUjVjR1Y5SUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJR2x1WkdWNElEMGdjbTkzSUNvZ2NtOTNYM04wY21sa1pTQXJJR052YkR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhoYmFXNWtaWGhkTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCbWJpQnpaWFJXWVd4MVpTaHliM2M2SUdrek1pd2dZMjlzT2lCcE16SXNJSEp2ZDE5emRISnBaR1U2SUdrek1pd2dkbUZzZFdVNklDUjdkbUZzZFdWVWVYQmxmU2tnZTF4dUlDQWdJQ0FnSUNCc1pYUWdhVzVrWlhnZ1BTQnliM2NnS2lCeWIzZGZjM1J5YVdSbElDc2dZMjlzTzF4dUlDQWdJQ0FnSUNCeVpYTjFiSFJiYVc1a1pYaGRJRDBnZG1Gc2RXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQWtlM05vWVdSbGNraGxiSEJsY2k1eVpXZHBjM1JsY2xWdWFXWnZjbTBvSjNCaFkydGxaRU52YkhNbkxDQW5hVE15SnlrdVpHVmpiR0Z5WlZaaGNtbGhZbXhsY3loNExDQnZkWFJ3ZFhRcGZWeHVJQ0FnSUNBZ0pIdHphR0ZrWlhKSVpXeHdaWEl1YldGcGJsTjBZWEowS0NsOVhHNGdJQ0FnSUNBZ0lHeGxkQ0JuYVc1a1pYZ2dQU0JwTXpJb1oyeHZZbUZzWDJsa2VDazdYRzRnSUNBZ0lDQWdJR3hsZENCc2FXNWtaWGdnUFNCcE16SW9iRzlqWVd4ZmFXUjRLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdkMmNnUFNBa2UxZEhmVHRjYmlBZ0lDQWdJQ0FnYkdWMElISnZkeUE5SUdkcGJtUmxlQ0F2SUhkbk8xeHVJQ0FnSUNBZ0lDQnNaWFFnWTI5c2N5QTlJSFZ1YVdadmNtMXpMbkJoWTJ0bFpFTnZiSE03WEc0Z0lDQWdJQ0FnSUd4bGRDQnliM2RmYzNSeWFXUmxJRG9nYVRNeUlEMGdkVzVwWm05eWJYTXVjR0ZqYTJWa1EyOXNjenRjYmx4dUlDQWdJQ0FnSUNBdkx5Qm1hVzVrSUhSb1pTQnliM2R6SUcxaGVGeHVJQ0FnSUNBZ0lDQWtlM1JvY21WaFpFMWhlRVJsWTJ4OVhHNGdJQ0FnSUNBZ0lHWnZjaUFvZG1GeUlHTnZiQ0E5SUd4cGJtUmxlRHNnWTI5c0lEd2dZMjlzY3pzZ1kyOXNJQ3M5SUhkbktTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElIWmhiSFZsSUQwZ1oyVjBWbUZzZFdVb2NtOTNMQ0JqYjJ3c0lISnZkMTl6ZEhKcFpHVXBPMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtVmhaRTFoZUNBOUlHMWhlQ2gwYUhKbFlXUk5ZWGdzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCcFppQW9iR2x1WkdWNElEd2dZMjlzY3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY21WaFpGTm9ZWEpsWkZ0c2FXNWtaWGhkSUQwZ2RHaHlaV0ZrVFdGNE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSGR2Y210bmNtOTFjRUpoY25KcFpYSW9LVHRjYmx4dUlDQWdJQ0FnSUNCMllYSWdjbVZrZFdObFUybDZaU0E5SUcxcGJpaGpiMnh6TENCM1p5azdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2RtRnlJR04xY25KVGFYcGxJRDBnY21Wa2RXTmxVMmw2WlNBK1BpQXhPeUFnWTNWeWNsTnBlbVVnUGlBd095QmpkWEp5VTJsNlpTQTlJSEpsWkhWalpWTnBlbVVnUGo0Z01Ta2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbFpIVmpaVk5wZW1VZ1BTQmpkWEp5VTJsNlpTQXJJQ2h5WldSMVkyVlRhWHBsSUNZZ01TazdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHeHBibVJsZUNBOElHTjFjbkpUYVhwbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFISmxZV1JUYUdGeVpXUmJiR2x1WkdWNFhTQTlJRzFoZUNoMGFISmxZV1JUYUdGeVpXUmJiR2x1WkdWNFhTd2dkR2h5WldGa1UyaGhjbVZrVzJ4cGJtUmxlQ0FySUhKbFpIVmpaVk5wZW1WZEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2QyOXlhMmR5YjNWd1FtRnljbWxsY2lncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNoc2FXNWtaWGdnUFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUhKdmQwMWhlRk5vWVhKbFpDQTlJQ1I3ZG1Gc2RXVlVlWEJsZlNna2UyMWhlRlpsWTNSdmNpZ25kR2h5WldGa1UyaGhjbVZrV3pCZEp5d2dZMjl0Y0c5dVpXNTBjeWw5S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjNiM0pyWjNKdmRYQkNZWEp5YVdWeUtDazdYRzVjYmlBZ0lDQWdJQ0FnTHk4Z1ptbHVaQ0IwYUdVZ2NtOTNjeUJ6ZFcxY2JpQWdJQ0FnSUNBZ2RtRnlJSFJvY21WaFpGTjFiU0E5SUNSN2RtRnNkV1ZVZVhCbGZTZ3dMakFwTzF4dUlDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCamIyd2dQU0JzYVc1a1pYZzdJR052YkNBOElHTnZiSE03SUdOdmJDQXJQU0IzWnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hsZENCemRXSkZlSEFnUFNCbGVIQW9aMlYwVm1Gc2RXVW9jbTkzTENCamIyd3NJSEp2ZDE5emRISnBaR1VwSUMwZ2NtOTNUV0Y0VTJoaGNtVmtLVHRjYmlBZ0lDQWdJQ0FnSUNCMGFISmxZV1JUZFcwZ0t6MGdjM1ZpUlhod08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSFJvY21WaFpGTm9ZWEpsWkZ0c2FXNWtaWGhkSUQwZ2RHaHlaV0ZrVTNWdE8xeHVJQ0FnSUNBZ0lDQjNiM0pyWjNKdmRYQkNZWEp5YVdWeUtDazdYRzVjYmlBZ0lDQWdJQ0FnWm05eUlDaDJZWElnWTNWeWNsTnBlbVVnUFNCM1p5QStQaUF4T3lBZ1kzVnljbE5wZW1VZ1BpQXdPeUJqZFhKeVUybDZaU0E5SUdOMWNuSlRhWHBsSUQ0K0lERXBJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9iR2x1WkdWNElEd2dZM1Z5Y2xOcGVtVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9jbVZoWkZOb1lYSmxaRnRzYVc1a1pYaGRJRDBnZEdoeVpXRmtVMmhoY21Wa1cyeHBibVJsZUYwZ0t5QjBhSEpsWVdSVGFHRnlaV1JiYkdsdVpHVjRJQ3NnWTNWeWNsTnBlbVZkTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0IzYjNKclozSnZkWEJDWVhKeWFXVnlLQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLR3hwYm1SbGVDQTlQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbTkzVTNWdFUyaGhjbVZrSUQwZ0pIdDJZV3gxWlZSNWNHVjlLQ1I3YzNWdFZtVmpkRzl5S0NkMGFISmxZV1JUYUdGeVpXUmJNRjBuTENCamIyMXdiMjVsYm5SektYMHBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhkdmNtdG5jbTkxY0VKaGNuSnBaWElvS1R0Y2JseHVJQ0FnSUNBZ0lDQXZMeUJqWVd4amRXeGhkR1VnWm1sdVlXd2dkbUZzZFdVZ1ptOXlJR1ZoWTJnZ1pXeGxiV1Z1ZENCcGJpQjBhR1VnY205M1hHNGdJQ0FnSUNBZ0lHWnZjaUFvZG1GeUlHTnZiQ0E5SUd4cGJtUmxlRHNnWTI5c0lEd2dZMjlzY3pzZ1kyOXNJQ3M5SUhkbktTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdWMElIWmhiSFZsSUQwZ1pYaHdLR2RsZEZaaGJIVmxLSEp2ZHl3Z1kyOXNMQ0J5YjNkZmMzUnlhV1JsS1NBdElISnZkMDFoZUZOb1lYSmxaQ2tnTHlCeWIzZFRkVzFUYUdGeVpXUTdYRzRnSUNBZ0lDQWdJQ0FnYzJWMFZtRnNkV1VvY205M0xDQmpiMndzSUhKdmQxOXpkSEpwWkdVc0lIWmhiSFZsS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZXQTdYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdibUZ0WlRvZ0oxTnZablJ0WVhnbkxGeHVJQ0FnSUhOb1lXUmxja05oWTJobE9pQjdhR2x1ZERvZ1lDUjdZMjl0Y0c5dVpXNTBjMzFnTENCcGJuQjFkRVJsY0dWdVpHVnVZMmxsY3pvZ1d5ZDBlWEJsSjExOUxGeHVJQ0FnSUdkbGRGSjFia1JoZEdFNklDZ3BJRDArSUNoN1hHNGdJQ0FnSUNCdmRYUndkWFJ6T2lCYmUyUnBiWE02SUhOb1lYQmxMQ0JrWVhSaFZIbHdaVG9nYVc1d2RYUXVaR0YwWVZSNWNHVjlYU3hjYmlBZ0lDQWdJR1JwYzNCaGRHTm9SM0p2ZFhBNklIdDRPaUJ5YjNkemZTeGNiaUFnSUNBZ0lIQnliMmR5WVcxVmJtbG1iM0p0Y3pvZ1czdDBlWEJsT2lCRVlYUmhWSGx3WlM1cGJuUXpNaXdnWkdGMFlUb2djR0ZqYTJWa1EyOXNjMzFkWEc0Z0lDQWdmU2tzWEc0Z0lDQWdaMlYwVTJoaFpHVnlVMjkxY21ObExGeHVJQ0I5TzF4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElITnZablJ0WVhnZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRk52Wm5SdFlYaEJkSFJ5YVdKMWRHVnpLVG9nZG05cFpDQTlQaUI3WEc0Z0lIWmhiR2xrWVhSbFNXNXdkWFJ6S0dOdmJuUmxlSFF1YVc1d2RYUnpLVHRjYmlBZ1kyOXVkR1Y0ZEM1amIyMXdkWFJsS0dOeVpXRjBaVk52Wm5SdFlYaFFjbTluY21GdFNXNW1ieWhqYjI1MFpYaDBMbWx1Y0hWMGMxc3dYU3dnWVhSMGNtbGlkWFJsY3lrcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSEJoY25ObFUyOW1kRzFoZUVGMGRISnBZblYwWlhNZ1BTQW9ZWFIwY21saWRYUmxjem9nVW1WamIzSmtQSE4wY21sdVp5d2dkVzVyYm05M2JqNHBPaUJUYjJaMGJXRjRRWFIwY21saWRYUmxjeUE5UGx4dUlDQWdJR055WldGMFpVRjBkSEpwWW5WMFpWZHBkR2hEWVdOb1pVdGxlU2g3WVhocGN6b2dZWFIwY21saWRYUmxjeTVoZUdseklHRnpJRzUxYldKbGNuMHBPMXh1SWl3Z0lpOHZJRU52Y0hseWFXZG9kQ0FvWXlrZ1RXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUx5OGdUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRTFKVkNCTWFXTmxibk5sTGx4dVhHNXBiWEJ2Y25RZ2UwUmhkR0ZVZVhCbGZTQm1jbTl0SUNjdUxpOHVMaTh1TGk5M1lYTnRMV052YlcxdmJpYzdYRzVwYlhCdmNuUWdlMVJsYm5OdmNsWnBaWGQ5SUdaeWIyMGdKeTR1THk0dUwzUmxibk52Y2kxMmFXVjNKenRjYm1sdGNHOXlkQ0I3VTJoaGNHVlZkR2xzZlNCbWNtOXRJQ2N1TGk4dUxpOTFkR2xzSnp0Y2JtbHRjRzl5ZENCN1FYUjBjbWxpZFhSbFYybDBhRU5oWTJobFMyVjVMQ0JqY21WaGRHVkJkSFJ5YVdKMWRHVlhhWFJvUTJGamFHVkxaWGw5SUdaeWIyMGdKeTR1TDJGMGRISnBZblYwWlMxM2FYUm9MV05oWTJobExXdGxlU2M3WEc1cGJYQnZjblFnZTBOdmJYQjFkR1ZEYjI1MFpYaDBMQ0JRY205bmNtRnRTVzVtYnl3Z1VISnZaM0poYlZWdWFXWnZjbTBzSUZSbGJuTnZja2x1Wm05OUlHWnliMjBnSnk0dUwzUjVjR1Z6Snp0Y2JseHVhVzF3YjNKMElIdGpjbVZoZEdWVVpXNXpiM0pUYUdGd1pWWmhjbWxoWW14bGN5d2daMlYwUld4bGJXVnVkRUYwTENCSmJtUnBZMlZ6U0dWc2NHVnlMQ0JwYm5CMWRGWmhjbWxoWW14bExDQnZkWFJ3ZFhSV1lYSnBZV0pzWlN3Z1UyaGhaR1Z5U0dWc2NHVnlmU0JtY205dElDY3VMMk52YlcxdmJpYzdYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVTNCc2FYUkJkSFJ5YVdKMWRHVnpJR1Y0ZEdWdVpITWdRWFIwY21saWRYUmxWMmwwYUVOaFkyaGxTMlY1SUh0Y2JpQWdjbVZoWkc5dWJIa2dZWGhwY3pvZ2JuVnRZbVZ5TzF4dUlDQnlaV0ZrYjI1c2VTQnVkVzFQZFhSd2RYUnpPaUJ1ZFcxaVpYSTdYRzRnSUhKbFlXUnZibXg1SUhOd2JHbDBVMmw2WlhNNklHNTFiV0psY2x0ZE8xeHVmVnh1WEc1amIyNXpkQ0IyWVd4cFpHRjBaVWx1Y0hWMGN5QTlJQ2hwYm5CMWRITTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFNrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JwWmlBb0lXbHVjSFYwY3lCOGZDQnBibkIxZEhNdWJHVnVaM1JvSUR3Z01Ta2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmRHOXZJR1psZHlCcGJuQjFkSE1uS1R0Y2JpQWdmVnh1ZlR0Y2JseHVZMjl1YzNRZ1kzSmxZWFJsVTNCc2FYUkJkSFJ5YVdKMWRHVnpSbkp2YlVsdWNIVjBjeUE5WEc0Z0lDQWdLR2x1Y0hWMGN6b2djbVZoWkc5dWJIa2dWR1Z1YzI5eVZtbGxkMXRkTENCaGRIUnlhV0oxZEdWek9pQlRjR3hwZEVGMGRISnBZblYwWlhNcE9pQlRjR3hwZEVGMGRISnBZblYwWlhNZ1BUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2MzQnNhWFJUYVhwbGN6b2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdJQ0FnSUd4bGRDQnVkVzFQZFhSd2RYUnpPaUJ1ZFcxaVpYSWdQU0JoZEhSeWFXSjFkR1Z6TG01MWJVOTFkSEIxZEhNN1hHNGdJQ0FnSUNCcFppQW9hVzV3ZFhSeld6RmRMbVJwYlhOYk1GMGdQaUF3S1NCN1hHNGdJQ0FnSUNBZ0lHbHVjSFYwYzFzeFhTNW5aWFJDYVdkSmJuUTJORUZ5Y21GNUtDa3VabTl5UldGamFDaDJJRDArSUhOd2JHbDBVMmw2WlhNdWNIVnphQ2hPZFcxaVpYSW9kaWtwS1R0Y2JpQWdJQ0FnSUNBZ2JuVnRUM1YwY0hWMGN5QTlJSE53YkdsMFUybDZaWE11YkdWdVozUm9PMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdjbVYwZFhKdUlHTnlaV0YwWlVGMGRISnBZblYwWlZkcGRHaERZV05vWlV0bGVTaDdiblZ0VDNWMGNIVjBjeXdnWVhocGN6b2dZWFIwY21saWRYUmxjeTVoZUdsekxDQnpjR3hwZEZOcGVtVnpmU2s3WEc0Z0lDQWdmVHRjYmx4dVkyOXVjM1FnWTJGc1kzVnNZWFJsVDNWMGNIVjBTVzVrWlhoSmJYQnNJRDBnS0c1MWJXSmxjazltVkdWdWMyOXljem9nYm5WdFltVnlLVG9nYzNSeWFXNW5JRDArSUdCY2JtWnVJR05oYkdOMWJHRjBaVTkxZEhCMWRFbHVaR1Y0S0dsdVpHVjRPaUIxTXpJcElDMCtJSFV6TWlCN1hHNGdJQ0FnWm05eUlDaDJZWElnYVRvZ2RUTXlJRDBnTUhVN0lHa2dQQ0FrZTI1MWJXSmxjazltVkdWdWMyOXljMzExT3lCcElDczlJREYxSUNrZ2UxeHVJQ0FnSUdsbUlDaHBibVJsZUNBOElDUjdaMlYwUld4bGJXVnVkRUYwS0NkMWJtbG1iM0p0Y3k1emFYcGxYMmx1WDNOd2JHbDBYMkY0YVhNbkxDQW5hU2NzSUc1MWJXSmxjazltVkdWdWMyOXljeWw5S1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCcE8xeHVJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlDUjdiblZ0WW1WeVQyWlVaVzV6YjNKemZYVTdYRzU5WUR0Y2JtTnZibk4wSUhkeWFYUmxRblZtWm1WeVJHRjBZVWx0Y0d3Z1BTQW9iM1YwY0hWMGN6b2djbVZoWkc5dWJIa2dTVzVrYVdObGMwaGxiSEJsY2x0ZEtTQTlQaUI3WEc0Z0lHTnZibk4wSUc1MWJXSmxjazltVkdWdWMyOXljeUE5SUc5MWRIQjFkSE11YkdWdVozUm9PMXh1SUNCamIyNXpkQ0JqYjJSbFRHbHVaWE02SUhOMGNtbHVaMXRkSUQwZ1cxMDdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JuVnRZbVZ5VDJaVVpXNXpiM0p6T3lBcksya3BJSHRjYmlBZ0lDQmpiMjV6ZENCeVpYUjFjbTVUYm1sd2NHVjBJRDBnYjNWMGNIVjBjMXRwWFM1elpYUkNlVWx1WkdsalpYTW9KMmx1WkdsalpYTW5MQ0FuYVc1d2RYUmJaMnh2WW1Gc1gybGtlRjBuS1R0Y2JpQWdJQ0JwWmlBb2JuVnRZbVZ5VDJaVVpXNXpiM0p6SUQwOVBTQXhLU0I3WEc0Z0lDQWdJQ0JqYjJSbFRHbHVaWE11Y0hWemFDaHlaWFIxY201VGJtbHdjR1YwS1R0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0drZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUdOdlpHVk1hVzVsY3k1d2RYTm9LR0JwWmlBb2IzVjBjSFYwWDI1MWJXSmxjaUE5UFNBa2UybDlkU2tnZXlBa2UzSmxkSFZ5YmxOdWFYQndaWFI5SUgxZ0tUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHa2dQVDA5SUc1MWJXSmxjazltVkdWdWMyOXljeUF0SURFcElIdGNiaUFnSUNBZ0lHTnZaR1ZNYVc1bGN5NXdkWE5vS0dCbGJITmxJSHNnSkh0eVpYUjFjbTVUYm1sd2NHVjBmU0I5WUNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR052WkdWTWFXNWxjeTV3ZFhOb0tHQmxiSE5sSUdsbUlDaHZkWFJ3ZFhSZmJuVnRZbVZ5SUQwOUlDUjdhWDBwSUhzZ0pIdHlaWFIxY201VGJtbHdjR1YwZlNCOVlDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCZ1hHNGdJQ0FnSUNCbWJpQjNjbWwwWlVKMVptWmxja1JoZEdFb2IzVjBjSFYwWDI1MWJXSmxjam9nZFRNeUxDQnBibVJwWTJWek9pQWtlMjkxZEhCMWRITmJNRjB1ZEhsd1pTNXBibVJwWTJWemZTd2daMnh2WW1Gc1gybGtlRG9nZFRNeUtTQjdYRzRnSUNBZ0lDQWdJQ1I3WTI5a1pVeHBibVZ6TG1wdmFXNG9KMXhjYmljcGZWeHVJQ0FnSUNBZ2ZXQTdYRzU5TzF4dVhHNWpiMjV6ZENCamNtVmhkR1ZUY0d4cGRGQnliMmR5WVcxSmJtWnZJRDBnS0dsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZExDQmhkSFJ5YVdKMWRHVnpPaUJUY0d4cGRFRjBkSEpwWW5WMFpYTXBPaUJRY205bmNtRnRTVzVtYnlBOVBpQjdYRzRnSUdOdmJuTjBJR2x1Y0hWMFUyaGhjR1VnUFNCcGJuQjFkSE5iTUYwdVpHbHRjenRjYmlBZ1kyOXVjM1FnYVc1d2RYUlRhWHBsSUQwZ1UyaGhjR1ZWZEdsc0xuTnBlbVVvYVc1d2RYUlRhR0Z3WlNrN1hHNGdJR052Ym5OMElHUmhkR0ZVZVhCbElEMGdhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxPMXh1SUNCamIyNXpkQ0JoZUdseklEMGdVMmhoY0dWVmRHbHNMbTV2Y20xaGJHbDZaVUY0YVhNb1lYUjBjbWxpZFhSbGN5NWhlR2x6TENCcGJuQjFkRk5vWVhCbExteGxibWQwYUNrN1hHNGdJR052Ym5OMElHOTFkSEIxZEhNZ1BTQnVaWGNnUVhKeVlYazhTVzVrYVdObGMwaGxiSEJsY2o0b1lYUjBjbWxpZFhSbGN5NXVkVzFQZFhSd2RYUnpLVHRjYmlBZ1kyOXVjM1FnYVc1d2RYUWdQU0JwYm5CMWRGWmhjbWxoWW14bEtDZHBibkIxZENjc0lHUmhkR0ZVZVhCbExDQnBibkIxZEZOb1lYQmxMbXhsYm1kMGFDazdYRzRnSUdOdmJuTjBJSE5wZW1WSmJsTndiR2wwUVhocGN5QTlJRzVsZHlCQmNuSmhlVHh1ZFcxaVpYSStLR0YwZEhKcFluVjBaWE11Ym5WdFQzVjBjSFYwY3lrN1hHNGdJR052Ym5OMElHOTFkSEIxZEhOVVpXNXpiM0pKYm1adk9pQlVaVzV6YjNKSmJtWnZXMTBnUFNCYlhUdGNiaUFnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1Z6T2lCdWRXMWlaWEpiWFZ0ZElEMGdXMTA3WEc0Z0lHeGxkQ0J3Y21WMmFXOTFjMU4xYlNBOUlEQTdYRzRnSUdOdmJuTjBJSEJ5YjJkeVlXMVZibWxtYjNKdGN6b2dVSEp2WjNKaGJWVnVhV1p2Y20xYlhTQTlJRnQ3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCcGJuQjFkRk5wZW1WOVhUdGNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCaGRIUnlhV0oxZEdWekxtNTFiVTkxZEhCMWRITTdJR2tyS3lrZ2UxeHVJQ0FnSUhCeVpYWnBiM1Z6VTNWdElDczlJR0YwZEhKcFluVjBaWE11YzNCc2FYUlRhWHBsYzF0cFhUdGNiaUFnSUNCemFYcGxTVzVUY0d4cGRFRjRhWE5iYVYwZ1BTQndjbVYyYVc5MWMxTjFiVHRjYmlBZ0lDQmpiMjV6ZENCdmRYUndkWFJUYUdGd1pTQTlJR2x1Y0hWMFUyaGhjR1V1YzJ4cFkyVW9LVHRjYmlBZ0lDQnZkWFJ3ZFhSVGFHRndaVnRoZEhSeWFXSjFkR1Z6TG1GNGFYTmRJRDBnWVhSMGNtbGlkWFJsY3k1emNHeHBkRk5wZW1WelcybGRPMXh1SUNBZ0lHOTFkSEIxZEZOb1lYQmxjeTV3ZFhOb0tHOTFkSEIxZEZOb1lYQmxLVHRjYmlBZ0lDQnZkWFJ3ZFhSelcybGRJRDBnYjNWMGNIVjBWbUZ5YVdGaWJHVW9ZRzkxZEhCMWRDUjdhWDFnTENCa1lYUmhWSGx3WlN3Z2IzVjBjSFYwVTJoaGNHVXViR1Z1WjNSb0tUdGNiaUFnSUNCdmRYUndkWFJ6VkdWdWMyOXlTVzVtYnk1d2RYTm9LSHRrYVcxek9pQnZkWFJ3ZFhSVGFHRndaWE5iYVYwc0lHUmhkR0ZVZVhCbE9pQnBibkIxZEhOYk1GMHVaR0YwWVZSNWNHVjlLVHRjYmlBZ2ZWeHVJQ0J3Y205bmNtRnRWVzVwWm05eWJYTXVjSFZ6YUNoY2JpQWdJQ0FnSUh0MGVYQmxPaUJFWVhSaFZIbHdaUzUxYVc1ME16SXNJR1JoZEdFNklITnBlbVZKYmxOd2JHbDBRWGhwYzMwc0lDNHVMbU55WldGMFpWUmxibk52Y2xOb1lYQmxWbUZ5YVdGaWJHVnpLR2x1Y0hWMFUyaGhjR1VzSUM0dUxtOTFkSEIxZEZOb1lYQmxjeWtwTzF4dUlDQmpiMjV6ZENCblpYUlRhR0ZrWlhKVGIzVnlZMlVnUFNBb2MyaGhaR1Z5U0dWc2NHVnlPaUJUYUdGa1pYSklaV3h3WlhJcElEMCtJR0JjYmlBZ0pIdGNiaUFnSUNBZ0lITm9ZV1JsY2tobGJIQmxjaTV5WldkcGMzUmxjbFZ1YVdadmNtMG9KMmx1Y0hWMFgzTnBlbVVuTENBbmRUTXlKeWxjYmlBZ0lDQWdJQ0FnSUNBdWNtVm5hWE4wWlhKVmJtbG1iM0p0S0NkemFYcGxYMmx1WDNOd2JHbDBYMkY0YVhNbkxDQW5kVE15Snl3Z2MybDZaVWx1VTNCc2FYUkJlR2x6TG14bGJtZDBhQ2xjYmlBZ0lDQWdJQ0FnSUNBdVpHVmpiR0Z5WlZaaGNtbGhZbXhsY3locGJuQjFkQ3dnTGk0dWIzVjBjSFYwY3lsOVhHNGdJQ1I3WTJGc1kzVnNZWFJsVDNWMGNIVjBTVzVrWlhoSmJYQnNLSE5wZW1WSmJsTndiR2wwUVhocGN5NXNaVzVuZEdncGZWeHVJQ0FrZTNkeWFYUmxRblZtWm1WeVJHRjBZVWx0Y0d3b2IzVjBjSFYwY3lsOVhHNWNiaUFnSkh0emFHRmtaWEpJWld4d1pYSXViV0ZwYmxOMFlYSjBLQ2w5WEc0Z0lDQWdKSHR6YUdGa1pYSklaV3h3WlhJdVozVmhjbVJCWjJGcGJuTjBUM1YwVDJaQ2IzVnVaSE5YYjNKclozSnZkWEJUYVhwbGN5Z25kVzVwWm05eWJYTXVhVzV3ZFhSZmMybDZaU2NwZlZ4dVhHNGdJQ0FnZG1GeUlHbHVaR2xqWlhNZ1BTQWtlMmx1Y0hWMExtOW1abk5sZEZSdlNXNWthV05sY3lnbloyeHZZbUZzWDJsa2VDY3BmVHRjYmlBZ0lDQjJZWElnYVc1a1pYZ2dQU0FrZTJsdWNIVjBMbWx1WkdsalpYTkhaWFFvSjJsdVpHbGpaWE1uTENCaGVHbHpLWDA3WEc0Z0lDQWdiR1YwSUc5MWRIQjFkRjl1ZFcxaVpYSWdQU0JqWVd4amRXeGhkR1ZQZFhSd2RYUkpibVJsZUNocGJtUmxlQ2s3WEc0Z0lDQWdhV1lnS0c5MWRIQjFkRjl1ZFcxaVpYSWdJVDBnTUNrZ2UxeHVJQ0FnSUNBZ2FXNWtaWGdnTFQwZ0pIdG5aWFJGYkdWdFpXNTBRWFFvSjNWdWFXWnZjbTF6TG5OcGVtVmZhVzVmYzNCc2FYUmZZWGhwY3ljc0lDZHZkWFJ3ZFhSZmJuVnRZbVZ5SUMwZ01YVW5MQ0J6YVhwbFNXNVRjR3hwZEVGNGFYTXViR1Z1WjNSb0tYMDdYRzRnSUNBZ0lDQWtlMmx1Y0hWMExtbHVaR2xqWlhOVFpYUW9KMmx1WkdsalpYTW5MQ0JoZUdsekxDQW5hVzVrWlhnbktYMDdYRzRnSUNBZ2ZWeHVJQ0FnSUhkeWFYUmxRblZtWm1WeVJHRjBZU2h2ZFhSd2RYUmZiblZ0WW1WeUxDQnBibVJwWTJWekxDQm5iRzlpWVd4ZmFXUjRLVHRjYmlBZ2ZXQTdYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdibUZ0WlRvZ0oxTndiR2wwSnl4Y2JpQWdJQ0J6YUdGa1pYSkRZV05vWlRvZ2UyaHBiblE2SUdGMGRISnBZblYwWlhNdVkyRmphR1ZMWlhrc0lHbHVjSFYwUkdWd1pXNWtaVzVqYVdWek9pQmJKM0poYm1zblhYMHNYRzRnSUNBZ1oyVjBVMmhoWkdWeVUyOTFjbU5sTEZ4dUlDQWdJR2RsZEZKMWJrUmhkR0U2SUNncElEMCtJQ2g3WEc0Z0lDQWdJQ0J2ZFhSd2RYUnpPaUJ2ZFhSd2RYUnpWR1Z1YzI5eVNXNW1ieXhjYmlBZ0lDQWdJR1JwYzNCaGRHTm9SM0p2ZFhBNklIdDRPaUJOWVhSb0xtTmxhV3dvYVc1d2RYUlRhWHBsSUM4Z05qUWdMeW9nZDI5eWEyZHliM1Z3SUhOcGVtVWdLaThwZlN4Y2JpQWdJQ0FnSUhCeWIyZHlZVzFWYm1sbWIzSnRjMXh1SUNBZ0lIMHBYRzRnSUgwN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdjM0JzYVhRZ1BTQW9ZMjl1ZEdWNGREb2dRMjl0Y0hWMFpVTnZiblJsZUhRc0lHRjBkSEpwWW5WMFpYTTZJRk53YkdsMFFYUjBjbWxpZFhSbGN5azZJSFp2YVdRZ1BUNGdlMXh1SUNCMllXeHBaR0YwWlVsdWNIVjBjeWhqYjI1MFpYaDBMbWx1Y0hWMGN5azdYRzRnSUdOdmJuTjBJSFZ3WkdGMFpXUkJkSFJ5YVdKMWRHVnpJRDFjYmlBZ0lDQWdJR052Ym5SbGVIUXVhVzV3ZFhSekxteGxibWQwYUNBOVBUMGdNU0EvSUdGMGRISnBZblYwWlhNZ09pQmpjbVZoZEdWVGNHeHBkRUYwZEhKcFluVjBaWE5HY205dFNXNXdkWFJ6S0dOdmJuUmxlSFF1YVc1d2RYUnpMQ0JoZEhSeWFXSjFkR1Z6S1R0Y2JpQWdZMjl1ZEdWNGRDNWpiMjF3ZFhSbEtHTnlaV0YwWlZOd2JHbDBVSEp2WjNKaGJVbHVabThvWTI5dWRHVjRkQzVwYm5CMWRITXNJSFZ3WkdGMFpXUkJkSFJ5YVdKMWRHVnpLU3dnZTJsdWNIVjBjem9nV3pCZGZTazdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnY0dGeWMyVlRjR3hwZEVGMGRISnBZblYwWlhNZ1BTQW9ZWFIwY21saWRYUmxjem9nVW1WamIzSmtQSE4wY21sdVp5d2dkVzVyYm05M2JqNHBPaUJUY0d4cGRFRjBkSEpwWW5WMFpYTWdQVDRnZTF4dUlDQmpiMjV6ZENCaGVHbHpJRDBnWVhSMGNtbGlkWFJsY3k1aGVHbHpJR0Z6SUc1MWJXSmxjanRjYmlBZ1kyOXVjM1FnYzNCc2FYUlRhWHBsY3pvZ2JuVnRZbVZ5VzEwZ1BTQmhkSFJ5YVdKMWRHVnpMbk53YkdsMFUybDZaWE1nWVhNZ2JuVnRZbVZ5VzEwN1hHNGdJR052Ym5OMElHNTFiVTkxZEhCMWRITWdQU0JoZEhSeWFXSjFkR1Z6TG01MWJVOTFkSEIxZEhNZ1lYTWdiblZ0WW1WeUlEd2dNQ0EvSUhOd2JHbDBVMmw2WlhNdWJHVnVaM1JvSURvZ1lYUjBjbWxpZFhSbGN5NXVkVzFQZFhSd2RYUnpJR0Z6SUc1MWJXSmxjanRjYmlBZ2FXWWdLRzUxYlU5MWRIQjFkSE1nSVQwOUlITndiR2wwVTJsNlpYTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkdWRXMVBkWFJ3ZFhSeklHRnVaQ0J6Y0d4cGRGTnBlbVZ6SUd4bGJtZG9JRzExYzNRZ1ltVWdaWEYxWVd3bktUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z1kzSmxZWFJsUVhSMGNtbGlkWFJsVjJsMGFFTmhZMmhsUzJWNUtIdGhlR2x6TENCdWRXMVBkWFJ3ZFhSekxDQnpjR3hwZEZOcGVtVnpmU2s3WEc1OU8xeHVJaXdnSWk4dklFTnZjSGx5YVdkb2RDQW9ZeWtnVFdsamNtOXpiMlowSUVOdmNuQnZjbUYwYVc5dUxpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1THk4Z1RHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFMUpWQ0JNYVdObGJuTmxMbHh1WEc1cGJYQnZjblFnZTBSaGRHRlVlWEJsZlNCbWNtOXRJQ2N1TGk4dUxpOHVMaTkzWVhOdExXTnZiVzF2YmljN1hHNXBiWEJ2Y25RZ2UxUmxibk52Y2xacFpYZDlJR1p5YjIwZ0p5NHVMeTR1TDNSbGJuTnZjaTEyYVdWM0p6dGNibWx0Y0c5eWRDQjdVMmhoY0dWVmRHbHNmU0JtY205dElDY3VMaTh1TGk5MWRHbHNKenRjYm1sdGNHOXlkQ0I3UTI5dGNIVjBaVU52Ym5SbGVIUXNJRkJ5YjJkeVlXMUpibVp2ZlNCbWNtOXRJQ2N1TGk5MGVYQmxjeWM3WEc1Y2JtbHRjRzl5ZENCN1kzSmxZWFJsVkdWdWMyOXlVMmhoY0dWV1lYSnBZV0pzWlhNc0lHbHVjSFYwVm1GeWFXRmliR1VzSUc5MWRIQjFkRlpoY21saFlteGxMQ0JUYUdGa1pYSklaV3h3WlhKOUlHWnliMjBnSnk0dlkyOXRiVzl1Snp0Y2JseHVZMjl1YzNRZ1oyVjBVbVZ3WldGMGN5QTlJQ2h5WlhCbFlYUnpWR1Z1YzI5eVZtbGxkem9nVkdWdWMyOXlWbWxsZHlrNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZElEMCtYRzRnSUNBZ1FYSnlZWGt1Wm5KdmJTaHlaWEJsWVhSelZHVnVjMjl5Vm1sbGR5NW5aWFJDYVdkSmJuUTJORUZ5Y21GNUtDa3NJRTUxYldKbGNpazdYRzVjYmx4dVkyOXVjM1FnZG1Gc2FXUmhkR1ZKYm5CMWRITWdQU0FvYVc1d2RYUnpPaUJ5WldGa2IyNXNlU0JVWlc1emIzSldhV1YzVzEwcE9pQjJiMmxrSUQwK0lIdGNiaUFnYVdZZ0tDRnBibkIxZEhNZ2ZId2dhVzV3ZFhSekxteGxibWQwYUNBaFBUMGdNaWtnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25WR2xzWlNCeVpYRjFhWEpsY3lBeUlHbHVjSFYwY3k0bktUdGNiaUFnZlZ4dVhHNGdJR2xtSUNocGJuQjFkSE5iTUYwdVpHRjBZVlI1Y0dVZ0lUMDlJRVJoZEdGVWVYQmxMbVpzYjJGMElDWW1JR2x1Y0hWMGMxc3dYUzVrWVhSaFZIbHdaU0FoUFQwZ1JHRjBZVlI1Y0dVdWFXNTBNeklnSmlaY2JpQWdJQ0FnSUdsdWNIVjBjMXN3WFM1a1lYUmhWSGx3WlNBaFBUMGdSR0YwWVZSNWNHVXVkV2x1ZERNeUtTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkVWFXeGxJRzl1YkhrZ2MzVndjRzl5ZENCbWJHOWhkQ3dnYVc1ME16SXNJR0Z1WkNCMWFXNTBNeklnWkdGMFlTQjBlWEJsY3ljcE8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0dsdWNIVjBjMXN4WFM1a1lYUmhWSGx3WlNBaFBUMGdSR0YwWVZSNWNHVXVhVzUwTmpRcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjFScGJHVWdZSEpsY0dWaGRITmdJR2x1Y0hWMElITm9iM1ZzWkNCaVpTQnZaaUJwYm5RMk5DQmtZWFJoSUhSNWNHVW5LVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBibkIxZEhOYk1WMHVaR2x0Y3k1c1pXNW5kR2dnSVQwOUlERXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxUnBiR1VnWUhKbGNHVmhkSE5nSUdsdWNIVjBJSE5vYjNWc1pDQmlaU0F4TFVRbktUdGNiaUFnZlZ4dVhHNGdJR052Ym5OMElISmxjR1ZoZEhNNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZElEMGdaMlYwVW1Wd1pXRjBjeWhwYm5CMWRITmJNVjBwTzF4dVhHNGdJR2xtSUNoeVpYQmxZWFJ6TG14bGJtZDBhQ0FoUFQwZ2FXNXdkWFJ6V3pCZExtUnBiWE11YkdWdVozUm9LU0I3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFVhV3hsSUdCeVpYQmxZWFJ6WUNCcGJuQjFkQ0J6YUc5MWJHUWdhR0YyWlNCellXMWxJRzUxYldKbGNpQnZaaUJsYkdWdFpXNTBjeUJoY3lCeVlXNXJJRzltSUdsdWNIVjBJR1JoZEdFZ2RHVnVjMjl5SnlrN1hHNGdJSDFjYm4wN1hHNWNibU52Ym5OMElHZGxkRTkxZEhCMWRGTm9ZWEJsSUQwZ0tHbHVjSFYwVTJoaGNHVTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMQ0J5WlhCbFlYUnpPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU2s2SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkSUQwK0lIdGNiaUFnWTI5dWMzUWdiM1YwY0hWMFUyaGhjR1U2SUc1MWJXSmxjbHRkSUQwZ1cxMDdYRzVjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnBibkIxZEZOb1lYQmxMbXhsYm1kMGFEc2dLeXRwS1NCN1hHNGdJQ0FnYjNWMGNIVjBVMmhoY0dVdWNIVnphQ2hwYm5CMWRGTm9ZWEJsVzJsZElDb2djbVZ3WldGMGMxdHBYU2s3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYjNWMGNIVjBVMmhoY0dVN1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdZM0psWVhSbFZHbHNaVkJ5YjJkeVlXMUpibVp2SUQwZ0tHbHVjSFYwY3pvZ2NtVmhaRzl1YkhrZ1ZHVnVjMjl5Vm1sbGQxdGRLVG9nVUhKdlozSmhiVWx1Wm04Z1BUNGdlMXh1SUNCamIyNXpkQ0JwYm5CMWRGTm9ZWEJsSUQwZ2FXNXdkWFJ6V3pCZExtUnBiWE03WEc0Z0lHTnZibk4wSUhKbGNHVmhkSE02SUhKbFlXUnZibXg1SUc1MWJXSmxjbHRkSUQwZ1oyVjBVbVZ3WldGMGN5aHBibkIxZEhOYk1WMHBPMXh1SUNCamIyNXpkQ0J2ZFhSd2RYUlRhR0Z3WlNBOUlHZGxkRTkxZEhCMWRGTm9ZWEJsS0dsdWNIVjBVMmhoY0dVc0lISmxjR1ZoZEhNcE8xeHVJQ0JqYjI1emRDQnZkWFJ3ZFhSVGFYcGxJRDBnVTJoaGNHVlZkR2xzTG5OcGVtVW9iM1YwY0hWMFUyaGhjR1VwTzF4dVhHNGdJR052Ym5OMElHUmhkR0ZVZVhCbElEMGdhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxPMXh1SUNCamIyNXpkQ0JwYm5CMWRDQTlJR2x1Y0hWMFZtRnlhV0ZpYkdVb0oybHVjSFYwSnl3Z1pHRjBZVlI1Y0dVc0lHbHVjSFYwVTJoaGNHVXViR1Z1WjNSb0tUdGNiaUFnWTI5dWMzUWdiM1YwY0hWMElEMGdiM1YwY0hWMFZtRnlhV0ZpYkdVb0oyOTFkSEIxZENjc0lHUmhkR0ZVZVhCbExDQnZkWFJ3ZFhSVGFHRndaUzVzWlc1bmRHZ3BPMXh1WEc0Z0lHTnZibk4wSUdkbGRGTm9ZV1JsY2xOdmRYSmpaU0E5SUNoemFHRmtaWEpJWld4d1pYSTZJRk5vWVdSbGNraGxiSEJsY2lrZ1BUNGdZRnh1SUNBZ0lDQWdZMjl1YzNRZ2FXNXdkWFJUYUdGd1pTQTlJQ1I3YVc1d2RYUXVhVzVrYVdObGN5Z3VMaTVwYm5CMWRGTm9ZWEJsS1gwN1hHNGdJQ0FnSUNBa2UzTm9ZV1JsY2tobGJIQmxjaTV5WldkcGMzUmxjbFZ1YVdadmNtMG9KMjkxZEhCMWRGOXphWHBsSnl3Z0ozVXpNaWNwTG1SbFkyeGhjbVZXWVhKcFlXSnNaWE1vYVc1d2RYUXNJRzkxZEhCMWRDbDlYRzRnSUNBZ0lDQWtlM05vWVdSbGNraGxiSEJsY2k1dFlXbHVVM1JoY25Rb0tYMWNiaUFnSUNBZ0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG1kMVlYSmtRV2RoYVc1emRFOTFkRTltUW05MWJtUnpWMjl5YTJkeWIzVndVMmw2WlhNb0ozVnVhV1p2Y20xekxtOTFkSEIxZEY5emFYcGxKeWw5WEc0Z0lDQWdJQ0JzWlhRZ2IzVjBjSFYwWDJsdVpHbGpaWE1nUFNBa2UyOTFkSEIxZEM1dlptWnpaWFJVYjBsdVpHbGpaWE1vSjJkc2IySmhiRjlwWkhnbktYMDdYRzRnSUNBZ0lDQjJZWElnYVc1d2RYUmZhVzVrYVdObGN6b2dKSHRwYm5CMWRDNTBlWEJsTG1sdVpHbGpaWE45TzF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENBa2UybHVjSFYwVTJoaGNHVXViR1Z1WjNSb2ZUc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JwYm5CMWRGOWthVzFmYVNBOUlDUjdhVzV3ZFhRdWFXNWthV05sYzBkbGRDZ25kVzVwWm05eWJYTXVhVzV3ZFhSZmMyaGhjR1VuTENBbmFTY3BmVHRjYmlBZ0lDQWdJQ0FnYkdWMElHbHVjSFYwWDJScGJWOTJZV3gxWlNBOUlDUjdiM1YwY0hWMExtbHVaR2xqWlhOSFpYUW9KMjkxZEhCMWRGOXBibVJwWTJWekp5d2dKMmtuS1gwZ0lDVWdhVzV3ZFhSZlpHbHRYMms3WEc1Y2JpQWdJQ0FnSUNBZ0pIdHBibkIxZEM1cGJtUnBZMlZ6VTJWMEtDZHBibkIxZEY5cGJtUnBZMlZ6Snl3Z0oya25MQ0FuYVc1d2RYUmZaR2x0WDNaaGJIVmxKeWw5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0FrZTI5MWRIQjFkQzV6WlhSQ2VVOW1abk5sZENnbloyeHZZbUZzWDJsa2VDY3NJR2x1Y0hWMExtZGxkRUo1U1c1a2FXTmxjeWduYVc1d2RYUmZhVzVrYVdObGN5Y3BLWDFjYmlBZ0lDQjlZRHRjYmx4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUc1aGJXVTZJQ2RVYVd4bEp5eGNiaUFnSUNCemFHRmtaWEpEWVdOb1pUb2dlMmhwYm5RNklHQWtlM0psY0dWaGRITjlZQ3dnYVc1d2RYUkVaWEJsYm1SbGJtTnBaWE02SUZzbmNtRnVheWRkZlN4Y2JpQWdJQ0JuWlhSU2RXNUVZWFJoT2lBb0tTQTlQaUFvZTF4dUlDQWdJQ0FnYjNWMGNIVjBjem9nVzN0a2FXMXpPaUJ2ZFhSd2RYUlRhR0Z3WlN3Z1pHRjBZVlI1Y0dVNklHbHVjSFYwYzFzd1hTNWtZWFJoVkhsd1pYMWRMRnh1SUNBZ0lDQWdaR2x6Y0dGMFkyaEhjbTkxY0RvZ2UzZzZJRTFoZEdndVkyVnBiQ2h2ZFhSd2RYUlRhWHBsSUM4Z05qUWdMeW9nZDI5eWEyZHliM1Z3SUhOcGVtVWdLaThwZlN4Y2JpQWdJQ0FnSUhCeWIyZHlZVzFWYm1sbWIzSnRjenBjYmlBZ0lDQWdJQ0FnSUNCYmUzUjVjR1U2SUVSaGRHRlVlWEJsTG5WcGJuUXpNaXdnWkdGMFlUb2diM1YwY0hWMFUybDZaWDBzSUM0dUxtTnlaV0YwWlZSbGJuTnZjbE5vWVhCbFZtRnlhV0ZpYkdWektHbHVjSFYwYzFzd1hTNWthVzF6TENCdmRYUndkWFJUYUdGd1pTbGRMRnh1SUNBZ0lIMHBMRnh1SUNBZ0lHZGxkRk5vWVdSbGNsTnZkWEpqWlN4Y2JpQWdmVHRjYm4wN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCMGFXeGxJRDBnS0dOdmJuUmxlSFE2SUVOdmJYQjFkR1ZEYjI1MFpYaDBLVG9nZG05cFpDQTlQaUI3WEc0Z0lIWmhiR2xrWVhSbFNXNXdkWFJ6S0dOdmJuUmxlSFF1YVc1d2RYUnpLVHRjYmlBZ1kyOXVkR1Y0ZEM1amIyMXdkWFJsS0dOeVpXRjBaVlJwYkdWUWNtOW5jbUZ0U1c1bWJ5aGpiMjUwWlhoMExtbHVjSFYwY3lrc0lIdHBibkIxZEhNNklGc3dYWDBwTzF4dWZUdGNiaUlzSUNJdkx5QkRiM0I1Y21sbmFIUWdLR01wSUUxcFkzSnZjMjltZENCRGIzSndiM0poZEdsdmJpNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmk4dklFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQk5TVlFnVEdsalpXNXpaUzVjYmx4dWFXMXdiM0owSUh0RVlYUmhWSGx3WlgwZ1puSnZiU0FuTGk0dkxpNHZMaTR2ZDJGemJTMWpiMjF0YjI0bk8xeHVhVzF3YjNKMElIdFVaVzV6YjNKV2FXVjNmU0JtY205dElDY3VMaTh1TGk5MFpXNXpiM0l0ZG1sbGR5YzdYRzVwYlhCdmNuUWdlMEp5YjJGa1kyRnpkRlYwYVd3c0lGTm9ZWEJsVlhScGJIMGdabkp2YlNBbkxpNHZMaTR2ZFhScGJDYzdYRzVwYlhCdmNuUWdlME52YlhCMWRHVkRiMjUwWlhoMExDQlFjbTluY21GdFNXNW1iMzBnWm5KdmJTQW5MaTR2ZEhsd1pYTW5PMXh1WEc1cGJYQnZjblFnZTJOeVpXRjBaVlJsYm5OdmNsTm9ZWEJsVm1GeWFXRmliR1Z6TENCcGJuQjFkRlpoY21saFlteGxMQ0J2ZFhSd2RYUldZWEpwWVdKc1pTd2dVMmhoWkdWeVNHVnNjR1Z5ZlNCbWNtOXRJQ2N1TDJOdmJXMXZiaWM3WEc1Y2JtTnZibk4wSUdOeVpXRjBaVmRvWlhKbFQzQlFjbTluY21GdFUyaGhaR1Z5SUQxY2JpQWdJQ0FvYzJoaFpHVnlTR1ZzY0dWeU9pQlRhR0ZrWlhKSVpXeHdaWElzSUdsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZExDQmthVzF6VDNWMGNIVjBPaUJ5WldGa2IyNXNlU0J1ZFcxaVpYSmJYU3dnYVhOQ2NtOWhaR05oYzNRNklHSnZiMnhsWVc0c1hHNGdJQ0FnSUhSNWNHVlBkWFJ3ZFhRNklHNTFiV0psY2lrZ1BUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwSUQwZ2IzVjBjSFYwVm1GeWFXRmliR1VvSjI5MWRIQjFkRjlrWVhSaEp5d2dkSGx3WlU5MWRIQjFkQ3dnWkdsdGMwOTFkSEIxZEM1c1pXNW5kR2dzSURRcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWVNBOUlHbHVjSFYwVm1GeWFXRmliR1VvSjJGZlpHRjBZU2NzSUdsdWNIVjBjMXN4WFM1a1lYUmhWSGx3WlN3Z2FXNXdkWFJ6V3pGZExtUnBiWE11YkdWdVozUm9MQ0EwS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR0lnUFNCcGJuQjFkRlpoY21saFlteGxLQ2RpWDJSaGRHRW5MQ0JwYm5CMWRITmJNbDB1WkdGMFlWUjVjR1VzSUdsdWNIVjBjMXN5WFM1a2FXMXpMbXhsYm1kMGFDd2dOQ2s3WEc0Z0lDQWdJQ0JqYjI1emRDQmpJRDBnYVc1d2RYUldZWEpwWVdKc1pTZ25ZMTlrWVhSaEp5d2dhVzV3ZFhSeld6QmRMbVJoZEdGVWVYQmxMQ0JwYm5CMWRITmJNRjB1WkdsdGN5NXNaVzVuZEdnc0lEUXBPMXh1WEc0Z0lDQWdJQ0JzWlhRZ1lYTnphV2R1YldWdWREb2djM1J5YVc1bk8xeHVJQ0FnSUNBZ1kyOXVjM1FnWlhod2NtVnpjMmx2YmlBOUlDaGhPaUJ6ZEhKcGJtY3NJR0k2SUhOMGNtbHVaeXdnWXpvZ2MzUnlhVzVuS1NBOVBpQmdjMlZzWldOMEtDUjdZbjBzSUNSN1lYMHNJQ1I3WTMwcFlEdGNiaUFnSUNBZ0lHbG1JQ2doYVhOQ2NtOWhaR05oYzNRcElIdGNiaUFnSUNBZ0lDQWdZWE56YVdkdWJXVnVkQ0E5SUc5MWRIQjFkQzV6WlhSQ2VVOW1abk5sZENoY2JpQWdJQ0FnSUNBZ0lDQWdJQ2RuYkc5aVlXeGZhV1I0Snl4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1Y0Y0hKbGMzTnBiMjRvWVM1blpYUkNlVTltWm5ObGRDZ25aMnh2WW1Gc1gybGtlQ2NwTENCaUxtZGxkRUo1VDJabWMyVjBLQ2RuYkc5aVlXeGZhV1I0Snlrc0lHTXVaMlYwUW5sUFptWnpaWFFvSjJkc2IySmhiRjlwWkhnbktTa3BPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2MybHVaMnhsUVhOemFXZHViV1Z1ZENBOUlDaHlaWE5UZEhJNklITjBjbWx1Wnl3Z2VEb2diblZ0WW1WeUxDQjBlWEJsUTJGemRDQTlJQ2NuS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdaWGh3Y21WemMybHZia0VnUFNCZ1lWOWtZWFJoVzJsdVpHVjRYMkVrZTNoOVhWdGpiMjF3YjI1bGJuUmZZU1I3ZUgxZFlEdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmxlSEJ5WlhOemFXOXVRaUE5SUdCaVgyUmhkR0ZiYVc1a1pYaGZZaVI3ZUgxZFcyTnZiWEJ2Ym1WdWRGOWlKSHQ0ZlYxZ08xeHVJQ0FnSUNBZ0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0J1YnkxaWFYUjNhWE5sWEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWlhod2NtVnpjMmx2YmtNZ1BTQmdZbTl2YkNoalgyUmhkR0ZiYVc1a1pYaGZZeVI3ZUgxZElDWWdLREI0Wm1aMUlEdzhJQ2hqYjIxd2IyNWxiblJmWXlSN2VIMGdLaUE0S1NrcFlEdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJRzkxZEhCMWRGOXBibVJwWTJWekpIdDRmU0E5SUNSN2IzVjBjSFYwTG05bVpuTmxkRlJ2U1c1a2FXTmxjeWhnWjJ4dlltRnNYMmxrZUNBcUlEUjFJQ3NnSkh0NGZYVmdLWDA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYjJabWMyVjBYMkVrZTNoOUlEMGdKSHRoTG1KeWIyRmtZMkZ6ZEdWa1NXNWthV05sYzFSdlQyWm1jMlYwS0dCdmRYUndkWFJmYVc1a2FXTmxjeVI3ZUgxZ0xDQnZkWFJ3ZFhRcGZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnZabVp6WlhSZllpUjdlSDBnUFNBa2UySXVZbkp2WVdSallYTjBaV1JKYm1ScFkyVnpWRzlQWm1aelpYUW9ZRzkxZEhCMWRGOXBibVJwWTJWekpIdDRmV0FzSUc5MWRIQjFkQ2w5TzF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUc5bVpuTmxkRjlqSkh0NGZTQTlJQ1I3WXk1aWNtOWhaR05oYzNSbFpFbHVaR2xqWlhOVWIwOW1abk5sZENoZ2IzVjBjSFYwWDJsdVpHbGpaWE1rZTNoOVlDd2diM1YwY0hWMEtYMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdhVzVrWlhoZllTUjdlSDBnUFNCdlptWnpaWFJmWVNSN2VIMGdMeUEwZFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCcGJtUmxlRjlpSkh0NGZTQTlJRzltWm5ObGRGOWlKSHQ0ZlNBdklEUjFPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2x1WkdWNFgyTWtlM2g5SUQwZ2IyWm1jMlYwWDJNa2UzaDlJQzhnTkhVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1kyOXRjRzl1Wlc1MFgyRWtlM2g5SUQwZ2IyWm1jMlYwWDJFa2UzaDlJQ1VnTkhVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1kyOXRjRzl1Wlc1MFgySWtlM2g5SUQwZ2IyWm1jMlYwWDJJa2UzaDlJQ1VnTkhVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1kyOXRjRzl1Wlc1MFgyTWtlM2g5SUQwZ2IyWm1jMlYwWDJNa2UzaDlJQ1VnTkhVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrZTNKbGMxTjBjbjFiSkh0NGZWMGdQU0FrZTNSNWNHVkRZWE4wZlNna2UyVjRjSEpsYzNOcGIyNG9aWGh3Y21WemMybHZia0VzSUdWNGNISmxjM05wYjI1Q0xDQmxlSEJ5WlhOemFXOXVReWw5S1R0Y2JpQWdJQ0FnSUNBZ0lDQmdPMXh1SUNBZ0lDQWdJQ0I5TzF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3WlU5MWRIQjFkQ0E5UFQwZ1JHRjBZVlI1Y0dVdVltOXZiQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHRnpjMmxuYm0xbGJuUWdQU0JnWEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnWkdGMFlTQTlJSFpsWXpROGRUTXlQaWd3S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ1I3YzJsdVoyeGxRWE56YVdkdWJXVnVkQ2duWkdGMFlTY3NJREFzSUNkMU16SW5LWDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDUjdjMmx1WjJ4bFFYTnphV2R1YldWdWRDZ25aR0YwWVNjc0lERXNJQ2QxTXpJbktYMWNiaUFnSUNBZ0lDQWdJQ0FnSUNSN2MybHVaMnhsUVhOemFXZHViV1Z1ZENnblpHRjBZU2NzSURJc0lDZDFNekluS1gxY2JpQWdJQ0FnSUNBZ0lDQWdJQ1I3YzJsdVoyeGxRWE56YVdkdWJXVnVkQ2duWkdGMFlTY3NJRE1zSUNkMU16SW5LWDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHOTFkSEIxZEY5a1lYUmhXMmRzYjJKaGJGOXBaSGhkSUQwZ1pHOTBLSFpsWXpROGRUTXlQaWd3ZURFc0lEQjRNVEF3TENBd2VERXdNREF3TENBd2VERXdNREF3TURBcExDQjJaV00wUEhVek1qNG9aR0YwWVNrcE8yQTdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnWVhOemFXZHViV1Z1ZENBOUlHQmNiaUFnSUNBZ0lDQWdJQ0FnSUNSN2MybHVaMnhsUVhOemFXZHViV1Z1ZENnbmIzVjBjSFYwWDJSaGRHRmJaMnh2WW1Gc1gybGtlRjBuTENBd0tYMWNiaUFnSUNBZ0lDQWdJQ0FnSUNSN2MybHVaMnhsUVhOemFXZHViV1Z1ZENnbmIzVjBjSFYwWDJSaGRHRmJaMnh2WW1Gc1gybGtlRjBuTENBeEtYMWNiaUFnSUNBZ0lDQWdJQ0FnSUNSN2MybHVaMnhsUVhOemFXZHViV1Z1ZENnbmIzVjBjSFYwWDJSaGRHRmJaMnh2WW1Gc1gybGtlRjBuTENBeUtYMWNiaUFnSUNBZ0lDQWdJQ0FnSUNSN2MybHVaMnhsUVhOemFXZHViV1Z1ZENnbmIzVjBjSFYwWDJSaGRHRmJaMnh2WW1Gc1gybGtlRjBuTENBektYMWNiaUFnSUNBZ0lDQWdJQ0JnTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lISmxkSFZ5YmlCZ1hHNGdJQ0FnSUNBZ0lDUjdjMmhoWkdWeVNHVnNjR1Z5TG5KbFoybHpkR1Z5Vlc1cFptOXliU2duZG1WalgzTnBlbVVuTENBbmRUTXlKeWt1WkdWamJHRnlaVlpoY21saFlteGxjeWhqTENCaExDQmlMQ0J2ZFhSd2RYUXBmVnh1SUNBZ0lDQWdJQ0FrZTNOb1lXUmxja2hsYkhCbGNpNXRZV2x1VTNSaGNuUW9LWDFjYmlBZ0lDQWdJQ0FnSkh0emFHRmtaWEpJWld4d1pYSXVaM1ZoY21SQloyRnBibk4wVDNWMFQyWkNiM1Z1WkhOWGIzSnJaM0p2ZFhCVGFYcGxjeWduZFc1cFptOXliWE11ZG1WalgzTnBlbVVuS1gxY2JpQWdJQ0FnSUNBZ0pIdGhjM05wWjI1dFpXNTBmVnh1SUNBZ0lDQWdmV0E3WEc0Z0lDQWdmVHRjYmx4dVkyOXVjM1FnWTNKbFlYUmxWMmhsY21WUGNGQnliMmR5WVcxSmJtWnZJRDBnS0dsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZEtUb2dVSEp2WjNKaGJVbHVabThnUFQ0Z2UxeHVJQ0JqYjI1emRDQmthVzF6UVNBOUlHbHVjSFYwYzFzeFhTNWthVzF6TzF4dUlDQmpiMjV6ZENCa2FXMXpRaUE5SUdsdWNIVjBjMXN5WFM1a2FXMXpPMXh1SUNCamIyNXpkQ0JrYVcxelF5QTlJR2x1Y0hWMGMxc3dYUzVrYVcxek8xeHVJQ0JqYjI1emRDQnZkWFJ3ZFhSRVlYUmhWSGx3WlNBOUlHbHVjSFYwYzFzeFhTNWtZWFJoVkhsd1pUdGNibHh1SUNCamIyNXpkQ0JwYzBKeWIyRmtZMkZ6ZENBOUlDRW9VMmhoY0dWVmRHbHNMbUZ5WlVWeGRXRnNLR1JwYlhOQkxDQmthVzF6UWlrZ0ppWWdVMmhoY0dWVmRHbHNMbUZ5WlVWeGRXRnNLR1JwYlhOQ0xDQmthVzF6UXlrcE8xeHVJQ0JzWlhRZ2IzVjBjSFYwVTJoaGNHVWdQU0JrYVcxelFUdGNiaUFnYkdWMElHOTFkSEIxZEZOcGVtVWdQU0JUYUdGd1pWVjBhV3d1YzJsNlpTaGthVzF6UVNrN1hHNGdJQzh2SUZSUFJFODZJR1JsWVd3Z2QybDBhQ0I2WlhKdkxYTnBlbVZrSUhSbGJuTnZjbk1nS0dWbkxpQmthVzF6UFZzeExEQmRLVnh1WEc0Z0lHbG1JQ2hwYzBKeWIyRmtZMkZ6ZENrZ2UxeHVJQ0FnSUdOdmJuTjBJR05oYkdOMWJHRjBaV1JUYUdGd1pTQTlJRUp5YjJGa1kyRnpkRlYwYVd3dVkyRnNZMU5vWVhCbEtFSnliMkZrWTJGemRGVjBhV3d1WTJGc1kxTm9ZWEJsS0dScGJYTkJMQ0JrYVcxelFpd2dabUZzYzJVcElTd2daR2x0YzBNc0lHWmhiSE5sS1R0Y2JpQWdJQ0JwWmlBb0lXTmhiR04xYkdGMFpXUlRhR0Z3WlNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkRFlXNWNYQ2QwSUhCbGNtWnZjbTBnZDJobGNtVWdiM0FnYjI0Z2RHaGxJR2RwZG1WdUlIUmxibk52Y25NbktUdGNiaUFnSUNCOVhHNGdJQ0FnYjNWMGNIVjBVMmhoY0dVZ1BTQmpZV3hqZFd4aGRHVmtVMmhoY0dVN1hHNGdJQ0FnYjNWMGNIVjBVMmw2WlNBOUlGTm9ZWEJsVlhScGJDNXphWHBsS0c5MWRIQjFkRk5vWVhCbEtUdGNiaUFnZlZ4dVhHNGdJR052Ym5OMElIWmxZMU5wZW1VZ1BTQk5ZWFJvTG1ObGFXd29iM1YwY0hWMFUybDZaU0F2SURRcE8xeHVYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdibUZ0WlRvZ0oxZG9aWEpsSnl4Y2JpQWdJQ0J6YUdGa1pYSkRZV05vWlRvZ2UybHVjSFYwUkdWd1pXNWtaVzVqYVdWek9pQmJKM0poYm1zbkxDQW5jbUZ1YXljc0lDZHlZVzVySjExOUxGeHVJQ0FnSUdkbGRGTm9ZV1JsY2xOdmRYSmpaVG9nS0hOb1lXUmxja2hsYkhCbGNpa2dQVDVjYmlBZ0lDQWdJQ0FnWTNKbFlYUmxWMmhsY21WUGNGQnliMmR5WVcxVGFHRmtaWElvYzJoaFpHVnlTR1ZzY0dWeUxDQnBibkIxZEhNc0lHOTFkSEIxZEZOb1lYQmxMQ0JwYzBKeWIyRmtZMkZ6ZEN3Z2IzVjBjSFYwUkdGMFlWUjVjR1VwTEZ4dUlDQWdJR2RsZEZKMWJrUmhkR0U2SUNncElEMCtJQ2g3WEc0Z0lDQWdJQ0J2ZFhSd2RYUnpPaUJiZTJScGJYTTZJRzkxZEhCMWRGTm9ZWEJsTENCa1lYUmhWSGx3WlRvZ2IzVjBjSFYwUkdGMFlWUjVjR1Y5WFN4Y2JpQWdJQ0FnSUdScGMzQmhkR05vUjNKdmRYQTZJSHQ0T2lCTllYUm9MbU5sYVd3b2IzVjBjSFYwVTJsNlpTQXZJRFkwSUM4cUlIZHZjbXRuY205MWNDQnphWHBsSUNvdklDOGdOQ0F2S2lCMlpXTWdjMmw2WlNBcUx5bDlMRnh1SUNBZ0lDQWdjSEp2WjNKaGJWVnVhV1p2Y20xek9seHVJQ0FnSUNBZ0lDQWdJRnQ3ZEhsd1pUb2dSR0YwWVZSNWNHVXVkV2x1ZERNeUxDQmtZWFJoT2lCMlpXTlRhWHBsZlN3Z0xpNHVZM0psWVhSbFZHVnVjMjl5VTJoaGNHVldZWEpwWVdKc1pYTW9aR2x0YzBNc0lHUnBiWE5CTENCa2FXMXpRaXdnYjNWMGNIVjBVMmhoY0dVcFhTeGNiaUFnSUNCOUtTeGNiaUFnZlR0Y2JuMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQjNhR1Z5WlNBOUlDaGpiMjUwWlhoME9pQkRiMjF3ZFhSbFEyOXVkR1Y0ZENrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JqYjI1MFpYaDBMbU52YlhCMWRHVW9ZM0psWVhSbFYyaGxjbVZQY0ZCeWIyZHlZVzFKYm1adktHTnZiblJsZUhRdWFXNXdkWFJ6S1NrN1hHNTlPMXh1SWl3Z0lpOHZJRU52Y0hseWFXZG9kQ0FvWXlrZ1RXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUx5OGdUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRTFKVkNCTWFXTmxibk5sTGx4dVhHNXBiWEJ2Y25RZ2UyRnlaMDFoZUN3Z1lYSm5UV2x1TENCd1lYSnpaVUZ5WjAxcGJrMWhlRUYwZEhKcFluVjBaWE45SUdaeWIyMGdKeTR2YjNCekwyRnlaMjFwYm0xaGVDYzdYRzVwYlhCdmNuUWdlMkYwZEdWdWRHbHZibjBnWm5KdmJTQW5MaTl2Y0hNdllYUjBaVzUwYVc5dUp6dGNibWx0Y0c5eWRDQjdZbUYwWTJoT2IzSnRmU0JtY205dElDY3VMMjl3Y3k5aVlYUmphQzF1YjNKdEp6dGNibWx0Y0c5eWRDQjdZbWxoYzBGa1pIMGdabkp2YlNBbkxpOXZjSE12WW1saGN5MWhaR1FuTzF4dWFXMXdiM0owSUh0aWFXRnpVM0JzYVhSSFpXeDFmU0JtY205dElDY3VMMjl3Y3k5aWFXRnpMWE53YkdsMExXZGxiSFVuTzF4dWFXMXdiM0owSUNvZ1lYTWdZbWx1WVhKNVQzQnpJR1p5YjIwZ0p5NHZiM0J6TDJKcGJtRnllUzF2Y0NjN1hHNXBiWEJ2Y25RZ2UyTnZibU5oZEN3Z2NHRnljMlZEYjI1allYUkJkSFJ5YVdKMWRHVnpmU0JtY205dElDY3VMMjl3Y3k5amIyNWpZWFFuTzF4dWFXMXdiM0owSUh0amIyNTJMQ0J3WVhKelpVTnZiblpCZEhSeWFXSjFkR1Z6ZlNCbWNtOXRJQ2N1TDI5d2N5OWpiMjUySnp0Y2JtbHRjRzl5ZENCN1kyOXVkbFJ5WVc1emNHOXpaU3dnY0dGeWMyVkRiMjUyVkhKaGJuTndiM05sUVhSMGNtbGlkWFJsYzMwZ1puSnZiU0FuTGk5dmNITXZZMjl1ZGkxMGNtRnVjM0J2YzJVbk8xeHVhVzF3YjNKMElIdGpkVzF6ZFcwc0lIQmhjbk5sUTNWdFUzVnRRWFIwY21saWRYUmxjMzBnWm5KdmJTQW5MaTl2Y0hNdlkzVnRjM1Z0Snp0Y2JtbHRjRzl5ZENCN1pHVndkR2hVYjFOd1lXTmxMQ0J3WVhKelpVUmxjSFJvVkc5VGNHRmpaVUYwZEhKcFluVjBaWE45SUdaeWIyMGdKeTR2YjNCekwyUmxjSFJvTFhSdkxYTndZV05sSnp0Y2JtbHRjRzl5ZENCN1pXbHVjM1Z0TENCd1lYSnpaVVZwYm5OMWJVRjBkSEpwWW5WMFpYTjlJR1p5YjIwZ0p5NHZiM0J6TDJWcGJuTjFiU2M3WEc1cGJYQnZjblFnZTJWNGNHRnVaSDBnWm5KdmJTQW5MaTl2Y0hNdlpYaHdZVzVrSnp0Y2JtbHRjRzl5ZENCN1ptRnpkRWRsYkhWOUlHWnliMjBnSnk0dmIzQnpMMlpoYzNRdFoyVnNkU2M3WEc1cGJYQnZjblFnZTJkaGRHaGxjaXdnY0dGeWMyVkhZWFJvWlhKQmRIUnlhV0oxZEdWemZTQm1jbTl0SUNjdUwyOXdjeTluWVhSb1pYSW5PMXh1YVcxd2IzSjBJSHRuWVhSb1pYSkZiR1Z0Wlc1MGN5d2djR0Z5YzJWSFlYUm9aWEpGYkdWdFpXNTBjMEYwZEhKcFluVjBaWE45SUdaeWIyMGdKeTR2YjNCekwyZGhkR2hsY2kxbGJHVnRaVzUwY3ljN1hHNXBiWEJ2Y25RZ2UyZGxiVzBzSUhCaGNuTmxSMlZ0YlVGMGRISnBZblYwWlhOOUlHWnliMjBnSnk0dmIzQnpMMmRsYlcwbk8xeHVhVzF3YjNKMElIdHBibk4wWVc1alpVNXZjbTE5SUdaeWIyMGdKeTR2YjNCekwybHVjM1JoYm1ObExXNXZjbTBuTzF4dWFXMXdiM0owSUh0c1lYbGxjazV2Y20xOUlHWnliMjBnSnk0dmIzQnpMMnhoZVdWeUxXNXZjbTBuTzF4dWFXMXdiM0owSUh0dFlYUk5kV3g5SUdaeWIyMGdKeTR2YjNCekwyMWhkRzExYkNjN1hHNXBiWEJ2Y25RZ2UyMWhkRTExYkU1Q2FYUnpMQ0J3WVhKelpVMWhkRTExYkU1Q2FYUnpRWFIwY21saWRYUmxjMzBnWm5KdmJTQW5MaTl2Y0hNdmJXRjBiWFZzYm1KcGRITW5PMXh1YVcxd2IzSjBJSHR0ZFd4MGFVaGxZV1JCZEhSbGJuUnBiMjRzSUhCaGNuTmxUWFZzZEdsSVpXRmtRWFIwWlc1MGFXOXVRWFIwY21saWRYUmxjMzBnWm5KdmJTQW5MaTl2Y0hNdmJYVnNkR2xvWldGa0xXRjBkR1Z1ZEdscGIyNG5PMXh1YVcxd2IzSjBJSHR3WVdSOUlHWnliMjBnSnk0dmIzQnpMM0JoWkNjN1hHNXBiWEJ2Y25RZ0tpQmhjeUJ3YjI5c0lHWnliMjBnSnk0dmIzQnpMM0J2YjJ3bk8xeHVhVzF3YjNKMElIdHlZVzVuWlgwZ1puSnZiU0FuTGk5dmNITXZjbUZ1WjJVbk8xeHVhVzF3YjNKMElIdHlaV1IxWTJWTU1Td2djbVZrZFdObFRESXNJSEpsWkhWalpVeHZaMU4xYlN3Z2NtVmtkV05sVEc5blUzVnRSWGh3TENCeVpXUjFZMlZOWVhnc0lISmxaSFZqWlUxbFlXNHNJSEpsWkhWalpVMXBiaXdnY21Wa2RXTmxVSEp2WkN3Z2NtVmtkV05sVTNWdExDQnlaV1IxWTJWVGRXMVRjWFZoY21WOUlHWnliMjBnSnk0dmIzQnpMM0psWkhWalpTYzdYRzVwYlhCdmNuUWdlM0JoY25ObFVtVnphWHBsUVhSMGNtbGlkWFJsY3l3Z2NtVnphWHBsZlNCbWNtOXRJQ2N1TDI5d2N5OXlaWE5wZW1Vbk8xeHVhVzF3YjNKMElIdHliM1JoY25sRmJXSmxaR1JwYm1kOUlHWnliMjBnSnk0dmIzQnpMM0p2ZEdGeWVTMWxiV0psWkdScGJtY25PMXh1YVcxd2IzSjBJSHR6YTJsd1RHRjVaWEpPYjNKdGZTQm1jbTl0SUNjdUwyOXdjeTl6YTJsd0xXeGhlV1Z5TFc1dmNtMG5PMXh1YVcxd2IzSjBJSHR3WVhKelpWTnNhV05sUVhSMGNtbGlkWFJsY3l3Z2MyeHBZMlY5SUdaeWIyMGdKeTR2YjNCekwzTnNhV05sSnp0Y2JtbHRjRzl5ZENCN2NHRnljMlZUYjJaMGJXRjRRWFIwY21saWRYUmxjeXdnYzI5bWRHMWhlSDBnWm5KdmJTQW5MaTl2Y0hNdmMyOW1kRzFoZUNjN1hHNXBiWEJ2Y25RZ2UzQmhjbk5sVTNCc2FYUkJkSFJ5YVdKMWRHVnpMQ0J6Y0d4cGRIMGdabkp2YlNBbkxpOXZjSE12YzNCc2FYUW5PMXh1YVcxd2IzSjBJSHQwYVd4bGZTQm1jbTl0SUNjdUwyOXdjeTkwYVd4bEp6dGNibWx0Y0c5eWRDQjdjR0Z5YzJWVWNtRnVjM0J2YzJWQmRIUnlhV0oxZEdWekxDQjBjbUZ1YzNCdmMyVjlJR1p5YjIwZ0p5NHZiM0J6TDNSeVlXNXpjRzl6WlNjN1hHNXBiWEJ2Y25RZ0tpQmhjeUIxYm1GeWVVOXdjeUJtY205dElDY3VMMjl3Y3k5MWJtRnllUzF2Y0NjN1hHNXBiWEJ2Y25RZ2UzZG9aWEpsZlNCbWNtOXRJQ2N1TDI5d2N5OTNhR1Z5WlNjN1hHNXBiWEJ2Y25RZ2UwTnZiWEIxZEdWRGIyNTBaWGgwZlNCbWNtOXRJQ2N1TDNSNWNHVnpKenRjYmx4dVpYaHdiM0owSUhSNWNHVWdVblZ1Um5WdVkzUnBiMjRnUFNBb1kyOXVkR1Y0ZERvZ1EyOXRjSFYwWlVOdmJuUmxlSFFzSUdGMGRISnBZblYwWlQ4NklIVnVhMjV2ZDI0cElEMCtJSFp2YVdRN1hHNWxlSEJ2Y25RZ2RIbHdaU0JRWVhKelpVRjBkSEpwWW5WMFpVWjFibU4wYVc5dUlEMGdLR0YwZEhKcFluVjBaVkpoZHpvZ2RXNXJibTkzYmlrZ1BUNGdkVzVyYm05M2JqdGNibVY0Y0c5eWRDQjBlWEJsSUU5d1pYSmhkRzl5U1cxd2JHVnRaVzUwWVhScGIyNGdQU0JiVW5WdVJuVnVZM1JwYjI1ZGZGdFNkVzVHZFc1amRHbHZiaXdnVUdGeWMyVkJkSFJ5YVdKMWRHVkdkVzVqZEdsdmJsMDdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQlhSVUpIVUZWZlQxQmZVa1ZUVDB4V1JWOVNWVXhGVXpvZ1RXRndQSE4wY21sdVp5d2dUM0JsY21GMGIzSkpiWEJzWlcxbGJuUmhkR2x2Ymo0Z1BTQnVaWGNnVFdGd0tGdGNiaUFnV3lkQlluTW5MQ0JiZFc1aGNubFBjSE11WVdKelhWMHNYRzRnSUZzblFXTnZjeWNzSUZ0MWJtRnllVTl3Y3k1aFkyOXpYVjBzWEc0Z0lGc25RV052YzJnbkxDQmJkVzVoY25sUGNITXVZV052YzJoZFhTeGNiaUFnV3lkQlpHUW5MQ0JiWW1sdVlYSjVUM0J6TG1Ga1pGMWRMRnh1SUNCYkowRnlaMDFoZUNjc0lGdGhjbWROWVhnc0lIQmhjbk5sUVhKblRXbHVUV0Y0UVhSMGNtbGlkWFJsYzExZExGeHVJQ0JiSjBGeVowMXBiaWNzSUZ0aGNtZE5hVzRzSUhCaGNuTmxRWEpuVFdsdVRXRjRRWFIwY21saWRYUmxjMTFkTEZ4dUlDQmJKMEZ6YVc0bkxDQmJkVzVoY25sUGNITXVZWE5wYmwxZExGeHVJQ0JiSjBGemFXNW9KeXdnVzNWdVlYSjVUM0J6TG1GemFXNW9YVjBzWEc0Z0lGc25RWFJoYmljc0lGdDFibUZ5ZVU5d2N5NWhkR0Z1WFYwc1hHNGdJRnNuUVhSaGJtZ25MQ0JiZFc1aGNubFBjSE11WVhSaGJtaGRYU3hjYmlBZ1d5ZEJkSFJsYm5ScGIyNG5MQ0JiWVhSMFpXNTBhVzl1WFYwc1hHNGdJQzh2SUZSUFJFODZJSE4xY0hCdmNuUWdibVYzSUdGMGRISnBZblYwWlhNZ1ptOXlJRUYyWlhKaFoyVlFiMjlzTFRFd1hHNGdJRnNuUVhabGNtRm5aVkJ2YjJ3bkxDQmJjRzl2YkM1aGRtVnlZV2RsVUc5dmJDd2djRzl2YkM1d1lYSnpaVUYyWlhKaFoyVlFiMjlzUVhSMGNtbGlkWFJsYzExZExGeHVJQ0JiSjBKaGRHTm9UbTl5YldGc2FYcGhkR2x2Ymljc0lGdGlZWFJqYUU1dmNtMWRYU3hjYmlBZ1d5ZENhV0Z6UVdSa0p5d2dXMkpwWVhOQlpHUmRYU3hjYmlBZ1d5ZENhV0Z6VTNCc2FYUkhaV3gxSnl3Z1cySnBZWE5UY0d4cGRFZGxiSFZkWFN4Y2JpQWdXeWREWVhOMEp5d2dXM1Z1WVhKNVQzQnpMbU5oYzNRc0lIVnVZWEo1VDNCekxuQmhjbk5sUTJGemRFRjBkSEpwWW5WMFpYTmRYU3hjYmlBZ1d5ZERaV2xzSnl3Z1czVnVZWEo1VDNCekxtTmxhV3hkWFN4Y2JpQWdXeWREYkdsd0p5d2dXM1Z1WVhKNVQzQnpMbU5zYVhCZFhTeGNiaUFnV3lkRGIyNWpZWFFuTENCYlkyOXVZMkYwTENCd1lYSnpaVU52Ym1OaGRFRjBkSEpwWW5WMFpYTmRYU3hjYmlBZ1d5ZERiMjUySnl3Z1cyTnZibllzSUhCaGNuTmxRMjl1ZGtGMGRISnBZblYwWlhOZFhTeGNiaUFnV3lkRGIyNTJWSEpoYm5Od2IzTmxKeXdnVzJOdmJuWlVjbUZ1YzNCdmMyVXNJSEJoY25ObFEyOXVkbFJ5WVc1emNHOXpaVUYwZEhKcFluVjBaWE5kWFN4Y2JpQWdXeWREYjNNbkxDQmJkVzVoY25sUGNITXVZMjl6WFYwc1hHNGdJRnNuUTI5emFDY3NJRnQxYm1GeWVVOXdjeTVqYjNOb1hWMHNYRzRnSUZzblEzVnRVM1Z0Snl3Z1cyTjFiWE4xYlN3Z2NHRnljMlZEZFcxVGRXMUJkSFJ5YVdKMWRHVnpYVjBzWEc0Z0lGc25SR1Z3ZEdoVWIxTndZV05sSnl3Z1cyUmxjSFJvVkc5VGNHRmpaU3dnY0dGeWMyVkVaWEIwYUZSdlUzQmhZMlZCZEhSeWFXSjFkR1Z6WFYwc1hHNGdJRnNuUkdsMkp5d2dXMkpwYm1GeWVVOXdjeTVrYVhaZFhTeGNiaUFnV3lkRmFXNXpkVzBuTENCYlpXbHVjM1Z0TENCd1lYSnpaVVZwYm5OMWJVRjBkSEpwWW5WMFpYTmRYU3hjYmlBZ1d5ZEZiSFVuTENCYmRXNWhjbmxQY0hNdVpXeDFMQ0IxYm1GeWVVOXdjeTV3WVhKelpVRnNjR2hoUVhSMGNtbGlkWFJsYzExZExGeHVJQ0JiSjBWeGRXRnNKeXdnVzJKcGJtRnllVTl3Y3k1bGNYVmhiRjFkTEZ4dUlDQmJKMFZ5Wmljc0lGdDFibUZ5ZVU5d2N5NWxjbVpkWFN4Y2JpQWdXeWRGZUhBbkxDQmJkVzVoY25sUGNITXVaWGh3WFYwc1hHNGdJRnNuUlhod1lXNWtKeXdnVzJWNGNHRnVaRjFkTEZ4dUlDQmJKMFpoYzNSSFpXeDFKeXdnVzJaaGMzUkhaV3gxWFYwc1hHNGdJRnNuUm14dmIzSW5MQ0JiZFc1aGNubFBjSE11Wm14dmIzSmRYU3hjYmlBZ1d5ZEdkWE5sWkVOdmJuWW5MQ0JiWTI5dWRpd2djR0Z5YzJWRGIyNTJRWFIwY21saWRYUmxjMTFkTEZ4dUlDQmJKMGRoZEdobGNpY3NJRnRuWVhSb1pYSXNJSEJoY25ObFIyRjBhR1Z5UVhSMGNtbGlkWFJsYzExZExGeHVJQ0JiSjBkaGRHaGxja1ZzWlcxbGJuUnpKeXdnVzJkaGRHaGxja1ZzWlcxbGJuUnpMQ0J3WVhKelpVZGhkR2hsY2tWc1pXMWxiblJ6UVhSMGNtbGlkWFJsYzExZExGeHVJQ0JiSjBkbGJIVW5MQ0JiZFc1aGNubFBjSE11WjJWc2RWMWRMRnh1SUNCYkowZGxiVzBuTENCYloyVnRiU3dnY0dGeWMyVkhaVzF0UVhSMGNtbGlkWFJsYzExZExGeHVJQ0JiSjBkc2IySmhiRUYyWlhKaFoyVlFiMjlzSnl3Z1czQnZiMnd1WjJ4dlltRnNRWFpsY21GblpWQnZiMndzSUhCdmIyd3VjR0Z5YzJWSGJHOWlZV3hCZG1WeVlXZGxVRzl2YkVGMGRISnBZblYwWlhOZFhTeGNiaUFnV3lkSGJHOWlZV3hOWVhoUWIyOXNKeXdnVzNCdmIyd3VaMnh2WW1Gc1RXRjRVRzl2YkN3Z2NHOXZiQzV3WVhKelpVZHNiMkpoYkUxaGVGQnZiMnhCZEhSeWFXSjFkR1Z6WFYwc1hHNGdJRnNuUjNKbFlYUmxjaWNzSUZ0aWFXNWhjbmxQY0hNdVozSmxZWFJsY2wxZExGeHVJQ0JiSjBkeVpXRjBaWEpQY2tWeGRXRnNKeXdnVzJKcGJtRnllVTl3Y3k1bmNtVmhkR1Z5VDNKRmNYVmhiRjFkTEZ4dUlDQmJKMGhoY21SVGFXZHRiMmxrSnl3Z1czVnVZWEo1VDNCekxtaGhjbVJUYVdkdGIybGtMQ0IxYm1GeWVVOXdjeTV3WVhKelpVaGhjbVJUYVdkdGIybGtRWFIwY21saWRYUmxjMTFkTEZ4dUlDQmJKMGx1YzNSaGJtTmxUbTl5YldGc2FYcGhkR2x2Ymljc0lGdHBibk4wWVc1alpVNXZjbTFkWFN4Y2JpQWdXeWRNWVhsbGNrNXZjbTFoYkdsNllYUnBiMjRuTENCYmJHRjVaWEpPYjNKdFhWMHNYRzRnSUZzblRHVmhhM2xTWld4MUp5d2dXM1Z1WVhKNVQzQnpMbXhsWVd0NVVtVnNkU3dnZFc1aGNubFBjSE11Y0dGeWMyVkJiSEJvWVVGMGRISnBZblYwWlhOZFhTeGNiaUFnV3lkTVpYTnpKeXdnVzJKcGJtRnllVTl3Y3k1c1pYTnpYVjBzWEc0Z0lGc25UR1Z6YzA5eVJYRjFZV3duTENCYlltbHVZWEo1VDNCekxteGxjM05QY2tWeGRXRnNYVjBzWEc0Z0lGc25URzluSnl3Z1czVnVZWEo1VDNCekxteHZaMTFkTEZ4dUlDQmJKMDFoZEUxMWJDY3NJRnR0WVhSTmRXeGRYU3hjYmlBZ1d5ZE5ZWFJOZFd4T1FtbDBjeWNzSUZ0dFlYUk5kV3hPUW1sMGN5d2djR0Z5YzJWTllYUk5kV3hPUW1sMGMwRjBkSEpwWW5WMFpYTmRYU3hjYmlBZ0x5OGdWRTlFVHpvZ2MzVndjRzl5ZENCdVpYY2dZWFIwY21saWRYUmxjeUJtYjNJZ1RXRjRVRzl2YkMwNElHRnVaQ0JOWVhoUWIyOXNMVEV3WEc0Z0lGc25UV0Y0VUc5dmJDY3NJRnR3YjI5c0xtMWhlRkJ2YjJ3c0lIQnZiMnd1Y0dGeWMyVk5ZWGhRYjI5c1FYUjBjbWxpZFhSbGMxMWRMRnh1SUNCYkowMTFiQ2NzSUZ0aWFXNWhjbmxQY0hNdWJYVnNYVjBzWEc0Z0lGc25UWFZzZEdsSVpXRmtRWFIwWlc1MGFXOXVKeXdnVzIxMWJIUnBTR1ZoWkVGMGRHVnVkR2x2Yml3Z2NHRnljMlZOZFd4MGFVaGxZV1JCZEhSbGJuUnBiMjVCZEhSeWFXSjFkR1Z6WFYwc1hHNGdJRnNuVG1Wbkp5d2dXM1Z1WVhKNVQzQnpMbTVsWjExZExGeHVJQ0JiSjA1dmRDY3NJRnQxYm1GeWVVOXdjeTV1YjNSZFhTeGNiaUFnV3lkUVlXUW5MQ0JiY0dGa1hWMHNYRzRnSUZzblVHOTNKeXdnVzJKcGJtRnllVTl3Y3k1d2IzZGRYU3hjYmlBZ1d5ZFNZVzVuWlNjc0lGdHlZVzVuWlYxZExGeHVJQ0JiSjFKbFkybHdjbTlqWVd3bkxDQmJkVzVoY25sUGNITXVjbVZqYVhCeWIyTmhiRjFkTEZ4dUlDQmJKMUpsWkhWalpVMXBiaWNzSUZ0eVpXUjFZMlZOYVc1ZFhTeGNiaUFnV3lkU1pXUjFZMlZOWldGdUp5d2dXM0psWkhWalpVMWxZVzVkWFN4Y2JpQWdXeWRTWldSMVkyVk5ZWGduTENCYmNtVmtkV05sVFdGNFhWMHNYRzRnSUZzblVtVmtkV05sVTNWdEp5d2dXM0psWkhWalpWTjFiVjFkTEZ4dUlDQmJKMUpsWkhWalpWQnliMlFuTENCYmNtVmtkV05sVUhKdlpGMWRMRnh1SUNCYkoxSmxaSFZqWlV3eEp5d2dXM0psWkhWalpVd3hYVjBzWEc0Z0lGc25VbVZrZFdObFRESW5MQ0JiY21Wa2RXTmxUREpkWFN4Y2JpQWdXeWRTWldSMVkyVk1iMmRUZFcwbkxDQmJjbVZrZFdObFRHOW5VM1Z0WFYwc1hHNGdJRnNuVW1Wa2RXTmxURzluVTNWdFJYaHdKeXdnVzNKbFpIVmpaVXh2WjFOMWJVVjRjRjFkTEZ4dUlDQmJKMUpsWkhWalpWTjFiVk54ZFdGeVpTY3NJRnR5WldSMVkyVlRkVzFUY1hWaGNtVmRYU3hjYmlBZ1d5ZFNaV3gxSnl3Z1czVnVZWEo1VDNCekxuSmxiSFZkWFN4Y2JpQWdXeWRTWlhOcGVtVW5MQ0JiY21WemFYcGxMQ0J3WVhKelpWSmxjMmw2WlVGMGRISnBZblYwWlhOZFhTeGNiaUFnV3lkU2IzUmhjbmxGYldKbFpHUnBibWNuTENCYmNtOTBZWEo1UlcxaVpXUmthVzVuWFYwc1hHNGdJRnNuVTJsbmJXOXBaQ2NzSUZ0MWJtRnllVTl3Y3k1emFXZHRiMmxrWFYwc1hHNGdJRnNuVTJsdUp5d2dXM1Z1WVhKNVQzQnpMbk5wYmwxZExGeHVJQ0JiSjFOcGJtZ25MQ0JiZFc1aGNubFBjSE11YzJsdWFGMWRMRnh1SUNCYkoxTnNhV05sSnl3Z1czTnNhV05sTENCd1lYSnpaVk5zYVdObFFYUjBjbWxpZFhSbGMxMWRMRnh1SUNCYkoxTnJhWEJNWVhsbGNrNXZjbTFoYkdsNllYUnBiMjRuTENCYmMydHBjRXhoZVdWeVRtOXliVjFkTEZ4dUlDQmJKMU53YkdsMEp5d2dXM053YkdsMExDQndZWEp6WlZOd2JHbDBRWFIwY21saWRYUmxjMTFkTEZ4dUlDQmJKMU54Y25RbkxDQmJkVzVoY25sUGNITXVjM0Z5ZEYxZExGeHVJQ0JiSjFOdlpuUnRZWGduTENCYmMyOW1kRzFoZUN3Z2NHRnljMlZUYjJaMGJXRjRRWFIwY21saWRYUmxjMTFkTEZ4dUlDQmJKMU4xWWljc0lGdGlhVzVoY25sUGNITXVjM1ZpWFYwc1hHNGdJRnNuVkdGdUp5d2dXM1Z1WVhKNVQzQnpMblJoYmwxZExGeHVJQ0JiSjFSaGJtZ25MQ0JiZFc1aGNubFBjSE11ZEdGdWFGMWRMRnh1SUNCYkoxUm9jbVZ6YUc5c1pHVmtVbVZzZFNjc0lGdDFibUZ5ZVU5d2N5NTBhSEpsYzJodmJHUmxaRkpsYkhVc0lIVnVZWEo1VDNCekxuQmhjbk5sUVd4d2FHRkJkSFJ5YVdKMWRHVnpYVjBzWEc0Z0lGc25WR2xzWlNjc0lGdDBhV3hsWFYwc1hHNGdJRnNuVkhKaGJuTndiM05sSnl3Z1czUnlZVzV6Y0c5elpTd2djR0Z5YzJWVWNtRnVjM0J2YzJWQmRIUnlhV0oxZEdWelhWMHNYRzRnSUZzblYyaGxjbVVuTENCYmQyaGxjbVZkWFN4Y2JsMHBPMXh1SWl3Z0lpOHZJRU52Y0hseWFXZG9kQ0FvWXlrZ1RXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUx5OGdUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRTFKVkNCTWFXTmxibk5sTGx4dVhHNXBiWEJ2Y25RZ2UxUlNRVU5GWDBaVlRrTmZRa1ZIU1U0c0lGUlNRVU5GWDBaVlRrTmZSVTVFZlNCbWNtOXRJQ2R2Ym01NGNuVnVkR2x0WlMxamIyMXRiMjRuTzF4dVhHNXBiWEJ2Y25RZ2UxZGxZa2R3ZFVKaFkydGxibVI5SUdaeWIyMGdKeTR1TDJKaFkydGxibVF0ZDJWaVozQjFKenRjYm1sdGNHOXlkQ0I3VEU5SFgwUkZRbFZIZlNCbWNtOXRJQ2N1TGk5c2IyY25PMXh1WEc1cGJYQnZjblFnZTJOeVpXRjBaVk5vWVdSbGNraGxiSEJsY24wZ1puSnZiU0FuTGk5dmNITXZZMjl0Ylc5dUp6dGNibWx0Y0c5eWRDQjdRWEowYVdaaFkzUXNJRWR3ZFVSaGRHRXNJRkJ5YjJkeVlXMUpibVp2ZlNCbWNtOXRJQ2N1TDNSNWNHVnpKenRjYmx4dUx5b3FYRzRnS2lCUWNtOW5jbUZ0VFdGdVlXZGxjaUJwY3lCMGFHVWdiV0ZwYmlCamJHRnpjeUJpWldocGJtUWdjblZ1Ym1sdVp5QmpiMjF3ZFhSaGRHbHZibk5jYmlBcUlFbDBJR0oxYVd4a2N5QlFjbTluY21GdFNXNW1ieWR6SUdsdWRHOGdRWEowYVdaaFkzUnpYRzRnS2lCSmRDQmpiMjF3YVd4bGN5Qm5hWFpsYmlCUWNtOW5jbUZ0U1c1bWJ5ZHpJR2x1ZEc4Z1YyVmlSMHdnVUhKdmNtRnRjeUFvWTJGamFHVmtJR0Z6SUVGeWRHbG1ZV04wY3lsY2JpQXFJRlZ6WlhNZ2RHaGxJR0Z5ZEdsbVlXTjBJSFJ2SUhKMWJpQjBhR1VnWTI5dGNIVjBZWFJwYjI0Z1lua2dZMkZzYkdsdVp5QkVjbUYzSUc5dVhHNGdLaUIwYUdVZ1YyVmlSMHdnWkhKaGQybHVaeUJpZFdabVpYSmNiaUFxSUZCeWIyZHlZVzFOWVc1aFoyVnlJR0YxZEc5dFlYUnBZMkZzYkhrZ2JXRndjeUFvWW1sdVpITXBJR2x1Y0hWMElIWmhjbWxoWW14bGN5QjBieUIwYUdWcGNseHVJQ29nWTI5eWNtVnpjRzl1WkdsdVp5Qk1iMk5oZEdsdmJpZHpJR2x1SUhSb1pTQmlhVzVoY25rZ2NISnZaM0poYlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1VISnZaM0poYlUxaGJtRm5aWElnZTF4dUlDQnlaWEJ2T2lCTllYQThkVzVyYm05M2Jpd2dRWEowYVdaaFkzUStPeUFnTHk4Z2RHaHBjeUJ6YUc5MWJHUWdZbVVnY0dWeUxYTmxjM05wYjI0Z2IySnFaV04wWEc0Z0lHRjBkSEpwWW5WMFpYTkNiM1Z1WkRvZ1ltOXZiR1ZoYmp0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lod2NtbDJZWFJsSUdKaFkydGxibVE2SUZkbFlrZHdkVUpoWTJ0bGJtUXBJSHRjYmlBZ0lDQjBhR2x6TG5KbGNHOGdQU0J1WlhjZ1RXRndLQ2s3WEc0Z0lDQWdkR2hwY3k1aGRIUnlhV0oxZEdWelFtOTFibVFnUFNCbVlXeHpaVHRjYmlBZ2ZWeHVJQ0JuWlhSQmNuUnBabUZqZENoclpYazZJSFZ1YTI1dmQyNHBPaUJCY25ScFptRmpkSHgxYm1SbFptbHVaV1FnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5KbGNHOHVaMlYwS0d0bGVTazdYRzRnSUgxY2JpQWdjMlYwUVhKMGFXWmhZM1FvYTJWNU9pQjFibXR1YjNkdUxDQmhjblJwWm1GamREb2dRWEowYVdaaFkzUXBPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbkpsY0c4dWMyVjBLR3RsZVN3Z1lYSjBhV1poWTNRcE8xeHVJQ0I5WEc0Z0lISjFiaWhpZFdsc1pFRnlkR2xtWVdOME9pQkJjblJwWm1GamRDd2dhVzV3ZFhSek9pQkhjSFZFWVhSaFcxMHNJRzkxZEhCMWRITTZJRWR3ZFVSaGRHRmJYU3dnWkdsemNHRjBZMmhIY205MWNEb2dXMjUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhKZExGeHVJQ0FnSUNBZ2RXNXBabTl5YlVKMVptWmxja0pwYm1ScGJtYzZJRWRRVlVKcGJtUnBibWRTWlhOdmRYSmpaWHgxYm1SbFptbHVaV1FwT2lCMmIybGtJSHRjYmlBZ0lDQlVVa0ZEUlY5R1ZVNURYMEpGUjBsT0tHSjFhV3hrUVhKMGFXWmhZM1F1Y0hKdlozSmhiVWx1Wm04dWJtRnRaU2s3WEc0Z0lDQWdZMjl1YzNRZ1pHVjJhV05sSUQwZ2RHaHBjeTVpWVdOclpXNWtMbVJsZG1salpUdGNiaUFnSUNCamIyNXpkQ0JqYjIxd2RYUmxVR0Z6YzBWdVkyOWtaWElnUFNCMGFHbHpMbUpoWTJ0bGJtUXVaMlYwUTI5dGNIVjBaVkJoYzNORmJtTnZaR1Z5S0NrN1hHNGdJQ0FnZEdocGN5NWlZV05yWlc1a0xuZHlhWFJsVkdsdFpYTjBZVzF3S0hSb2FYTXVZbUZqYTJWdVpDNXdaVzVrYVc1blJHbHpjR0YwWTJoT2RXMWlaWElnS2lBeUtUdGNiaUFnSUNCamIyNXpkQ0JsYm5SeWFXVnpJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCcGJuQjFkQ0J2WmlCcGJuQjFkSE1wSUh0Y2JpQWdJQ0FnSUdWdWRISnBaWE11Y0hWemFDaDdZbWx1WkdsdVp6b2daVzUwY21sbGN5NXNaVzVuZEdnc0lISmxjMjkxY21ObE9pQjdZblZtWm1WeU9pQnBibkIxZEM1aWRXWm1aWEo5ZlNrN1hHNGdJQ0FnZlZ4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnYjNWMGNIVjBJRzltSUc5MWRIQjFkSE1wSUh0Y2JpQWdJQ0FnSUdWdWRISnBaWE11Y0hWemFDaDdZbWx1WkdsdVp6b2daVzUwY21sbGN5NXNaVzVuZEdnc0lISmxjMjkxY21ObE9pQjdZblZtWm1WeU9pQnZkWFJ3ZFhRdVluVm1abVZ5ZlgwcE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2RXNXBabTl5YlVKMVptWmxja0pwYm1ScGJtY3BJSHRjYmlBZ0lDQWdJR1Z1ZEhKcFpYTXVjSFZ6YUNoN1ltbHVaR2x1WnpvZ1pXNTBjbWxsY3k1c1pXNW5kR2dzSUhKbGMyOTFjbU5sT2lCMWJtbG1iM0p0UW5WbVptVnlRbWx1WkdsdVozMHBPMXh1SUNBZ0lIMWNiaUFnSUNCamIyNXpkQ0JpYVc1a1IzSnZkWEFnUFNCa1pYWnBZMlV1WTNKbFlYUmxRbWx1WkVkeWIzVndLRnh1SUNBZ0lDQWdJQ0I3YkdGNWIzVjBPaUJpZFdsc1pFRnlkR2xtWVdOMExtTnZiWEIxZEdWUWFYQmxiR2x1WlM1blpYUkNhVzVrUjNKdmRYQk1ZWGx2ZFhRb01Da3NJR1Z1ZEhKcFpYTXNJR3hoWW1Wc09pQmlkV2xzWkVGeWRHbG1ZV04wTG5CeWIyZHlZVzFKYm1adkxtNWhiV1Y5S1R0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1KaFkydGxibVF1YzJWemMybHZibE4wWVhSMWN5QTlQVDBnSjJOaGNIUjFjbWx1WnljcElIdGNiaUFnSUNBZ0lHTnZibk4wSUdOdmJXMWhibVJKYm1adklEMGdlMXh1SUNBZ0lDQWdJQ0JyWlhKdVpXeEpaRG9nZEdocGN5NWlZV05yWlc1a0xtTjFjbkpsYm5STFpYSnVaV3hKWkNFc1hHNGdJQ0FnSUNBZ0lHTnZiWEIxZEdWUWFYQmxiR2x1WlRvZ1luVnBiR1JCY25ScFptRmpkQzVqYjIxd2RYUmxVR2x3Wld4cGJtVXNYRzRnSUNBZ0lDQWdJR0pwYm1SSGNtOTFjQ3hjYmlBZ0lDQWdJQ0FnWkdsemNHRjBZMmhIY205MWNGeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lHTnZibk4wSUhObGMzTnBiMjVEYjIxdFlXNWtUR2x6ZENBOUlIUm9hWE11WW1GamEyVnVaQzVqWVhCMGRYSmxaRU52YlcxaGJtUk1hWE4wTG1kbGRDaDBhR2x6TG1KaFkydGxibVF1WTNWeWNtVnVkRk5sYzNOcGIyNUpaQ0VwTzF4dUlDQWdJQ0FnYzJWemMybHZia052YlcxaGJtUk1hWE4wSVM1d2RYTm9LR052YlcxaGJtUkpibVp2S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjIxd2RYUmxVR0Z6YzBWdVkyOWtaWEl1YzJWMFVHbHdaV3hwYm1Vb1luVnBiR1JCY25ScFptRmpkQzVqYjIxd2RYUmxVR2x3Wld4cGJtVXBPMXh1SUNBZ0lHTnZiWEIxZEdWUVlYTnpSVzVqYjJSbGNpNXpaWFJDYVc1a1IzSnZkWEFvTUN3Z1ltbHVaRWR5YjNWd0tUdGNiaUFnSUNCamIyMXdkWFJsVUdGemMwVnVZMjlrWlhJdVpHbHpjR0YwWTJoWGIzSnJaM0p2ZFhCektDNHVMbVJwYzNCaGRHTm9SM0p2ZFhBcE8xeHVJQ0FnSUhSb2FYTXVZbUZqYTJWdVpDNTNjbWwwWlZScGJXVnpkR0Z0Y0NoMGFHbHpMbUpoWTJ0bGJtUXVjR1Z1WkdsdVowUnBjM0JoZEdOb1RuVnRZbVZ5SUNvZ01pQXJJREVwTzF4dUlDQWdJSFJvYVhNdVltRmphMlZ1WkM1d1pXNWthVzVuUkdsemNHRjBZMmhPZFcxaVpYSXJLenRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbUpoWTJ0bGJtUXVjR1Z1WkdsdVowUnBjM0JoZEdOb1RuVnRZbVZ5SUQ0OUlIUm9hWE11WW1GamEyVnVaQzV0WVhoRWFYTndZWFJqYUU1MWJXSmxjaUI4ZkZ4dUlDQWdJQ0FnSUNCMGFHbHpMbUpoWTJ0bGJtUXVjWFZsY25sVWVYQmxJRDA5UFNBbllYUXRjR0Z6YzJWekp5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1aVlXTnJaVzVrTG1WdVpFTnZiWEIxZEdWUVlYTnpLQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2gwYUdsekxtSmhZMnRsYm1RdWNHVnVaR2x1WjBScGMzQmhkR05vVG5WdFltVnlJRDQ5SUhSb2FYTXVZbUZqYTJWdVpDNXRZWGhFYVhOd1lYUmphRTUxYldKbGNpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1aVlXTnJaVzVrTG1ac2RYTm9LQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lGUlNRVU5GWDBaVlRrTmZSVTVFS0dKMWFXeGtRWEowYVdaaFkzUXVjSEp2WjNKaGJVbHVabTh1Ym1GdFpTazdYRzRnSUgxY2JpQWdaR2x6Y0c5elpTZ3BPaUIyYjJsa0lIdGNiaUFnSUNBdkx5QjBhR2x6TG5KbGNHOHVabTl5UldGamFDaGhJRDArSUhSb2FYTXVaMnhEYjI1MFpYaDBMbVJsYkdWMFpWQnliMmR5WVcwb1lTNXdjbTluY21GdEtTazdYRzRnSUgxY2JpQWdZblZwYkdRb2NISnZaM0poYlVsdVptODZJRkJ5YjJkeVlXMUpibVp2TENCdWIzSnRZV3hwZW1Wa1JHbHpjR0YwWTJoSGNtOTFjRk5wZW1VNklGdHVkVzFpWlhJc0lHNTFiV0psY2l3Z2JuVnRZbVZ5WFNrNklFRnlkR2xtWVdOMElIdGNiaUFnSUNCVVVrRkRSVjlHVlU1RFgwSkZSMGxPS0hCeWIyZHlZVzFKYm1adkxtNWhiV1VwTzF4dUlDQWdJR052Ym5OMElHUmxkbWxqWlNBOUlIUm9hWE11WW1GamEyVnVaQzVrWlhacFkyVTdYRzRnSUNBZ1kyOXVjM1FnWlhoMFpXNXphVzl1Y3pvZ2MzUnlhVzVuVzEwZ1BTQmJYVHRjYmlBZ0lDQnBaaUFvWkdWMmFXTmxMbVpsWVhSMWNtVnpMbWhoY3lnbmMyaGhaR1Z5TFdZeE5pY3BLU0I3WEc0Z0lDQWdJQ0JsZUhSbGJuTnBiMjV6TG5CMWMyZ29KMlZ1WVdKc1pTQm1NVFk3SnlrN1hHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElITm9ZV1JsY2tobGJIQmxjaUE5SUdOeVpXRjBaVk5vWVdSbGNraGxiSEJsY2lodWIzSnRZV3hwZW1Wa1JHbHpjR0YwWTJoSGNtOTFjRk5wZW1Vc0lIUm9hWE11WW1GamEyVnVaQzVrWlhacFkyVXViR2x0YVhSektUdGNiaUFnSUNCamIyNXpkQ0IxYzJWeVEyOWtaU0E5SUhCeWIyZHlZVzFKYm1adkxtZGxkRk5vWVdSbGNsTnZkWEpqWlNoemFHRmtaWEpJWld4d1pYSXBPMXh1SUNBZ0lHTnZibk4wSUdOdlpHVWdQU0JnSkh0bGVIUmxibk5wYjI1ekxtcHZhVzRvSjF4Y2JpY3BmVnhjYmlSN2MyaGhaR1Z5U0dWc2NHVnlMbUZrWkdsMGFXOXVZV3hKYlhCc1pXMWxiblJoZEdsdmJuTjlYRnh1Skh0MWMyVnlRMjlrWlgxZ08xeHVJQ0FnSUdOdmJuTjBJSE5vWVdSbGNrMXZaSFZzWlNBOUlHUmxkbWxqWlM1amNtVmhkR1ZUYUdGa1pYSk5iMlIxYkdVb2UyTnZaR1VzSUd4aFltVnNPaUJ3Y205bmNtRnRTVzVtYnk1dVlXMWxmU2s3WEc0Z0lDQWdURTlIWDBSRlFsVkhLQ2QyWlhKaWIzTmxKeXdnS0NrZ1BUNGdZRnRYWldKSFVGVmRJQ1I3Y0hKdlozSmhiVWx1Wm04dWJtRnRaWDBnYzJoaFpHVnlJR052WkdVNklDUjdZMjlrWlgxZ0tUdGNibHh1SUNBZ0lHTnZibk4wSUdOdmJYQjFkR1ZRYVhCbGJHbHVaU0E5SUdSbGRtbGpaUzVqY21WaGRHVkRiMjF3ZFhSbFVHbHdaV3hwYm1Vb1hHNGdJQ0FnSUNBZ0lIdGpiMjF3ZFhSbE9pQjdiVzlrZFd4bE9pQnphR0ZrWlhKTmIyUjFiR1VzSUdWdWRISjVVRzlwYm5RNklDZHRZV2x1SjMwc0lHeGhlVzkxZERvZ0oyRjFkRzhuTENCc1lXSmxiRG9nY0hKdlozSmhiVWx1Wm04dWJtRnRaWDBwTzF4dVhHNGdJQ0FnVkZKQlEwVmZSbFZPUTE5RlRrUW9jSEp2WjNKaGJVbHVabTh1Ym1GdFpTazdYRzRnSUNBZ2NtVjBkWEp1SUh0d2NtOW5jbUZ0U1c1bWJ5d2dZMjl0Y0hWMFpWQnBjR1ZzYVc1bExDQjFibWxtYjNKdFZtRnlhV0ZpYkdWelNXNW1iem9nYzJoaFpHVnlTR1ZzY0dWeUxuWmhjbWxoWW14bGMwbHVabTk5TzF4dUlDQjlYRzVjYmlBZ2JtOXliV0ZzYVhwbFJHbHpjR0YwWTJoSGNtOTFjRk5wZW1Vb1pHbHpjR0YwWTJoSGNtOTFjRG9nVW1WMGRYSnVWSGx3WlR4UWNtOW5jbUZ0U1c1bWIxc25aMlYwVW5WdVJHRjBZU2RkUGxzblpHbHpjR0YwWTJoSGNtOTFjQ2RkS1RwY2JpQWdJQ0FnSUZ0dWRXMWlaWElzSUc1MWJXSmxjaXdnYm5WdFltVnlYU0I3WEc0Z0lDQWdZMjl1YzNRZ2VDQTlJSFI1Y0dWdlppQmthWE53WVhSamFFZHliM1Z3SUQwOVBTQW5iblZ0WW1WeUp5QS9JR1JwYzNCaGRHTm9SM0p2ZFhBZ09pQmthWE53WVhSamFFZHliM1Z3TG5nN1hHNGdJQ0FnWTI5dWMzUWdlU0E5SUhSNWNHVnZaaUJrYVhOd1lYUmphRWR5YjNWd0lEMDlQU0FuYm5WdFltVnlKeUEvSURFZ09pQW9aR2x6Y0dGMFkyaEhjbTkxY0M1NUlIeDhJREVwTzF4dUlDQWdJR052Ym5OMElIb2dQU0IwZVhCbGIyWWdaR2x6Y0dGMFkyaEhjbTkxY0NBOVBUMGdKMjUxYldKbGNpY2dQeUF4SURvZ0tHUnBjM0JoZEdOb1IzSnZkWEF1ZWlCOGZDQXhLVHRjYmlBZ0lDQmpiMjV6ZENCc2FXMXBkRkJsY2tScGJXVnVjMmx2YmlBOUlIUm9hWE11WW1GamEyVnVaQzVrWlhacFkyVXViR2x0YVhSekxtMWhlRU52YlhCMWRHVlhiM0pyWjNKdmRYQnpVR1Z5UkdsdFpXNXphVzl1TzF4dUlDQWdJR2xtSUNoNElEdzlJR3hwYldsMFVHVnlSR2x0Wlc1emFXOXVJQ1ltSUhrZ1BEMGdiR2x0YVhSUVpYSkVhVzFsYm5OcGIyNGdKaVlnZWlBOFBTQnNhVzFwZEZCbGNrUnBiV1Z1YzJsdmJpa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlGdDRMQ0I1TENCNlhUdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdjMmw2WlNBOUlIZ2dLaUI1SUNvZ2VqdGNiaUFnSUNCc1pYUWdaR2x6Y0dGMFkyaEJkbVZ5WVdkbElEMGdUV0YwYUM1alpXbHNLRTFoZEdndWMzRnlkQ2h6YVhwbEtTazdYRzRnSUNBZ2FXWWdLR1JwYzNCaGRHTm9RWFpsY21GblpTQStJR3hwYldsMFVHVnlSR2x0Wlc1emFXOXVLU0I3WEc0Z0lDQWdJQ0JrYVhOd1lYUmphRUYyWlhKaFoyVWdQU0JOWVhSb0xtTmxhV3dvVFdGMGFDNWpZbkowS0hOcGVtVXBLVHRjYmlBZ0lDQWdJR2xtSUNoa2FYTndZWFJqYUVGMlpYSmhaMlVnUGlCc2FXMXBkRkJsY2tScGJXVnVjMmx2YmlrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxUnZkR0ZzSUdScGMzQmhkR05vSUhOcGVtVWdaWGhqWldWa2N5QlhaV0pIVUZVZ2JXRjRhVzExYlM0bktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCYlpHbHpjR0YwWTJoQmRtVnlZV2RsTENCa2FYTndZWFJqYUVGMlpYSmhaMlVzSUdScGMzQmhkR05vUVhabGNtRm5aVjA3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCYlpHbHpjR0YwWTJoQmRtVnlZV2RsTENCa2FYTndZWFJqYUVGMlpYSmhaMlVzSURGZE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dUlpd2dJaTh2SUVOdmNIbHlhV2RvZENBb1l5a2dUV2xqY205emIyWjBJRU52Y25CdmNtRjBhVzl1TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVMeThnVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUUxSlZDQk1hV05sYm5ObExseHVYRzVwYlhCdmNuUWdlMFZ1ZGl3Z1ZHVnVjMjl5TENCVVVrRkRSU3dnVkZKQlEwVmZSbFZPUTE5Q1JVZEpUaXdnVkZKQlEwVmZSbFZPUTE5RlRrUjlJR1p5YjIwZ0oyOXVibmh5ZFc1MGFXMWxMV052YlcxdmJpYzdYRzVjYm1sdGNHOXlkQ0I3UkdGMFlWUjVjR1VzSUhSbGJuTnZja1JoZEdGVWVYQmxSVzUxYlZSdlUzUnlhVzVuZlNCbWNtOXRJQ2N1TGk5M1lYTnRMV052YlcxdmJpYzdYRzVjYm1sdGNHOXlkQ0I3WTI5dVptbG5kWEpsVEc5bloyVnlMQ0JNVDBkZlJFVkNWVWQ5SUdaeWIyMGdKeTR2Ykc5bkp6dGNibWx0Y0c5eWRDQjdZM0psWVhSbFZtbGxkeXdnVkdWdWMyOXlWbWxsZDMwZ1puSnZiU0FuTGk5MFpXNXpiM0l0ZG1sbGR5YzdYRzVwYlhCdmNuUWdlMk55WldGMFpVZHdkVVJoZEdGTllXNWhaMlZ5TENCa2IzZHViRzloWkVkd2RVUmhkR0VzSUVkd2RVUmhkR0ZOWVc1aFoyVnlmU0JtY205dElDY3VMM2RsWW1kd2RTOW5jSFV0WkdGMFlTMXRZVzVoWjJWeUp6dGNibWx0Y0c5eWRDQjdVblZ1Um5WdVkzUnBiMjRzSUZkRlFrZFFWVjlQVUY5U1JWTlBURlpGWDFKVlRFVlRmU0JtY205dElDY3VMM2RsWW1kd2RTOXZjQzF5WlhOdmJIWmxMWEoxYkdWekp6dGNibWx0Y0c5eWRDQjdVSEp2WjNKaGJVMWhibUZuWlhKOUlHWnliMjBnSnk0dmQyVmlaM0IxTDNCeWIyZHlZVzB0YldGdVlXZGxjaWM3WEc1cGJYQnZjblFnZTBGa1lYQjBaWEpKYm1adkxDQkRiMjF3ZFhSbFEyOXVkR1Y0ZEN3Z1IzQjFRWEpqYUdsMFpXTjBkWEpsTENCSGNIVkVZWFJoTENCSGNIVldaVzVrYjNJc0lGQnliMmR5WVcxSmJtWnZMQ0JRY205bmNtRnRTVzV3ZFhSVVpXNXpiM0pKYm1adlJHVndaVzVrWlc1amVTd2dVMlZ6YzJsdmJsTjBZWFJsTENCVWFXMWxjM1JoYlhCUmRXVnllWDBnWm5KdmJTQW5MaTkzWldKbmNIVXZkSGx3WlhNbk8xeHVYRzVwYm5SbGNtWmhZMlVnUTI5dGJXRnVaRWx1Wm04Z2UxeHVJQ0J5WldGa2IyNXNlU0JyWlhKdVpXeEpaRG9nYm5WdFltVnlPMXh1SUNCeVpXRmtiMjVzZVNCamIyMXdkWFJsVUdsd1pXeHBibVU2SUVkUVZVTnZiWEIxZEdWUWFYQmxiR2x1WlR0Y2JpQWdjbVZoWkc5dWJIa2dZbWx1WkVkeWIzVndPaUJIVUZWQ2FXNWtSM0p2ZFhBN1hHNGdJSEpsWVdSdmJteDVJR1JwYzNCaGRHTm9SM0p2ZFhBNklGdHVkVzFpWlhJc0lHNTFiV0psY2l3Z2JuVnRZbVZ5WFR0Y2JuMWNibHh1YVc1MFpYSm1ZV05sSUV0bGNtNWxiRWx1Wm04Z2UxeHVJQ0J5WldGa2IyNXNlU0JyWlhKdVpXeFVlWEJsT2lCemRISnBibWM3WEc0Z0lISmxZV1J2Ym14NUlHdGxjbTVsYkU1aGJXVTZJSE4wY21sdVp6dGNiaUFnY21WaFpHOXViSGtnYTJWeWJtVnNSVzUwY25rNklGSjFia1oxYm1OMGFXOXVPMXh1SUNCeVpXRmtiMjVzZVNCaGRIUnlhV0oxZEdWek9pQmJLQ2hoZEhSeWFXSjFkR1U2SUhWdWEyNXZkMjRwSUQwK0lIVnVhMjV2ZDI0cGZIVnVaR1ZtYVc1bFpDd2dkVzVyYm05M2JsMDdYRzU5WEc1Y2JtbHVkR1Z5Wm1GalpTQlFaVzVrYVc1blMyVnlibVZzU1c1bWJ5QjdYRzRnSUhKbFlXUnZibXg1SUd0bGNtNWxiRWxrT2lCdWRXMWlaWEk3WEc0Z0lISmxZV1J2Ym14NUlIQnliMmR5WVcxT1lXMWxPaUJ6ZEhKcGJtYzdYRzRnSUhKbFlXUnZibXg1SUdsdWNIVjBWR1Z1YzI5eVZtbGxkM002SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhUdGNiaUFnY21WaFpHOXViSGtnYjNWMGNIVjBWR1Z1YzI5eVZtbGxkM002SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhUdGNibjFjYmx4dVkyOXVjM1FnWjJWMFVISnZaM0poYlVsdWNIVjBWR1Z1YzI5eVNXNW1iMFJsY0dWdVpHVnVZM2xMWlhrZ1BWeHVJQ0FnSUNocGJuQjFkRlJsYm5OdmNuTTZJSEpsWVdSdmJteDVJRlJsYm5OdmNsWnBaWGRiWFN3Z2FXNXdkWFJFWlhCbGJtUmxibU5wWlhNNklISmxZV1J2Ym14NUlGQnliMmR5WVcxSmJuQjFkRlJsYm5OdmNrbHVabTlFWlhCbGJtUmxibU41VzEwcE9pQnpkSEpwYm1jZ1BUNGdlMXh1SUNBZ0lDQWdhV1lnS0dsdWNIVjBSR1Z3Wlc1a1pXNWphV1Z6TG14bGJtZDBhQ0FoUFQwZ2FXNXdkWFJVWlc1emIzSnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZR2x1Y0hWMFJHVndaVzVrWlc1amFXVnpJR3hsYm1kMGFDQWtlMmx1Y0hWMFJHVndaVzVrWlc1amFXVnpMbXhsYm1kMGFIMGdhWE1nYm05MElHVnhkV0ZzSUhSdklHbHVjSFYwVkdWdWMyOXljeUJzWlc1bmRHZ2dKSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbHVjSFYwVkdWdWMyOXljeTVzWlc1bmRHaDlMbUFwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCamIyNXpkQ0JwYm5CMWRFbHVabTl6T2lCemRISnBibWRiWFNBOUlGdGRPMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JwYm5CMWRGUmxibk52Y25NdWJHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdkSGx3WlNBOUlHbHVjSFYwVkdWdWMyOXljMXRwWFM1a1lYUmhWSGx3WlR0Y2JpQWdJQ0FnSUNBZ2MzZHBkR05vSUNocGJuQjFkRVJsY0dWdVpHVnVZMmxsYzF0cFhTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdKMjV2Ym1Vbk9pQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcGJuQjFkRWx1Wm05ekxuQjFjMmdvSnljcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnSjNSNWNHVW5PaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBibkIxZEVsdVptOXpMbkIxYzJnb1lDUjdkSGx3WlgxZ0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQmpZWE5sSUNkeVlXNXJKem9nZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2NtRnVheUE5SUdsdWNIVjBWR1Z1YzI5eWMxdHBYUzVrYVcxekxteGxibWQwYUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2x1Y0hWMFNXNW1iM011Y0hWemFDaGdKSHQwZVhCbGZUc2tlM0poYm10OVlDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNBblpHbHRjeWM2SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHUnBiWE1nUFNCcGJuQjFkRlJsYm5OdmNuTmJhVjB1WkdsdGN5NXFiMmx1S0Njc0p5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCcGJuQjFkRWx1Wm05ekxuQjFjMmdvWUNSN2RIbHdaWDA3Skh0a2FXMXpmV0FwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lIVnVjM1Z3Y0c5eWRHVmtJR2x1Y0hWMElHUmxjR1Z1WkdWdVkzazZJQ1I3YVc1d2RYUkVaWEJsYm1SbGJtTnBaWE5iYVYxOVlDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnY21WMGRYSnVJR2x1Y0hWMFNXNW1iM011YW05cGJpZ25mQ2NwTzF4dUlDQWdJSDA3WEc1Y2JpOHFLbHh1SUNvZ1oyVjBJR0VnZFc1cGNYVmxJR3RsZVNCeVpYQnlaWE5sYm5ScGJtY2dkR2hsSUhCeWIyZHlZVzBnWm5KdmJTQjBhR1VnY0hKdlozSmhiU0JwYm1adkxDQnBibkIxZENCemFHRndaWE1nWVc1a0lIUjVjR1Z6TGx4dUlDcGNiaUFxSUVCeVpYUjFjbTV6SUdFZ2RXNXBjWFZsSUd0bGVTQnBjeUJoSUhOb2IzSjBaWElnYzNSeWFXNW5JSFJvWVc0Z2RHaGxJSE5vWVdSbGNpQnpiM1Z5WTJVc0lIZG9hV05vSUdOdmJuUmhhVzV6SUdGc2JDQjBhR1VnYVc1bWIzSnRZWFJwYjI0Z2RHOGdhV1JsYm5ScFpua2dZVnh1SUNvZ2NISnZaM0poYlM0Z2FXWWdkR2hsSUd0bGVTQnBjeUIwYUdVZ2MyRnRaU3dnZEdobElIQnliMmR5WVcwZ2MyaGhaR1Z5SUhOdmRYSmpaU0J6YUc5MWJHUWdZbVVnZEdobElITmhiV1VzSUhOdklIZGxJR05oYmlCeVpYVnpaU0IwYUdVZ2NISnZaM0poYlM1Y2JpQXFYRzRnS2k5Y2JtTnZibk4wSUdkbGRGQnliMmR5WVcxSmJtWnZWVzVwY1hWbFMyVjVJRDFjYmlBZ0lDQW9jSEp2WjNKaGJVbHVabTg2SUZCeWIyZHlZVzFKYm1adkxDQnBibkIxZEZSbGJuTnZjbk02SUhKbFlXUnZibXg1SUZSbGJuTnZjbFpwWlhkYlhTd2dhWE14UkdsdFpXNXphVzl1UkdsemNHRjBZMmc2SUdKdmIyeGxZVzRwT2lCemRISnBibWNnUFQ0Z2UxeHVJQ0FnSUNBZ0x5OGdabWx1WVd3Z2EyVjVJR1p2Y20xaGREcGNiaUFnSUNBZ0lDOHZJRHhRVWs5SFVrRk5YMDVCVFVVK1d6eFFVazlIVWtGTlgwTlZVMVJQVFY5RFFVTklSVjlJU1U1VVBsMDZhWE14UkdsdFpXNXphVzl1UkdsemNHRjBZMmc2UEVsT1VGVlVVMTlKVGtaUFh6QStmRHhKVGxCVlZGTmZTVTVHVDE4eFBud3VMaTVjYmlBZ0lDQWdJR3hsZENCclpYa2dQU0J3Y205bmNtRnRTVzVtYnk1dVlXMWxPMXh1SUNBZ0lDQWdhV1lnS0hCeWIyZHlZVzFKYm1adkxuTm9ZV1JsY2tOaFkyaGxQeTVvYVc1MEtTQjdYRzRnSUNBZ0lDQWdJR3RsZVNBclBTQW5XeWNnS3lCd2NtOW5jbUZ0U1c1bWJ5NXphR0ZrWlhKRFlXTm9aUzVvYVc1MElDc2dKMTBuTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYTJWNUlDczlJQ2M2SnlBcklHbHpNVVJwYldWdWMybHZia1JwYzNCaGRHTm9JQ3RjYmlBZ0lDQWdJQ0FnSUNCZ09pUjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2RsZEZCeWIyZHlZVzFKYm5CMWRGUmxibk52Y2tsdVptOUVaWEJsYm1SbGJtTjVTMlY1S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhVzV3ZFhSVVpXNXpiM0p6TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjSEp2WjNKaGJVbHVabTh1YzJoaFpHVnlRMkZqYUdVL0xtbHVjSFYwUkdWd1pXNWtaVzVqYVdWeklEOC9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdibVYzSUVGeWNtRjVQRkJ5YjJkeVlXMUpibkIxZEZSbGJuTnZja2x1Wm05RVpYQmxibVJsYm1ONVBpaHBibkIxZEZSbGJuTnZjbk11YkdWdVozUm9LUzVtYVd4c0tDZGthVzF6SnlrcGZXQTdYRzRnSUNBZ0lDQnlaWFIxY200Z2EyVjVPMXh1SUNBZ0lIMDdYRzVjYm1Oc1lYTnpJRUZrWVhCMFpYSkpibVp2U1cxd2JDQnBiWEJzWlcxbGJuUnpJRUZrWVhCMFpYSkpibVp2SUh0Y2JpQWdjbVZoWkc5dWJIa2dZWEpqYUdsMFpXTjBkWEpsUHpvZ2MzUnlhVzVuTzF4dUlDQnlaV0ZrYjI1c2VTQjJaVzVrYjNJL09pQnpkSEpwYm1jN1hHNWNiaUFnWTI5dWMzUnlkV04wYjNJb1lXUmhjSFJsY2tsdVptODZJRWRRVlVGa1lYQjBaWEpKYm1adktTQjdYRzRnSUNBZ2FXWWdLR0ZrWVhCMFpYSkpibVp2S1NCN1hHNGdJQ0FnSUNCMGFHbHpMbUZ5WTJocGRHVmpkSFZ5WlNBOUlHRmtZWEIwWlhKSmJtWnZMbUZ5WTJocGRHVmpkSFZ5WlR0Y2JpQWdJQ0FnSUhSb2FYTXVkbVZ1Wkc5eUlEMGdZV1JoY0hSbGNrbHVabTh1ZG1WdVpHOXlPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR2x6UVhKamFHbDBaV04wZFhKbEtHRnlZMmhwZEdWamRIVnlaVG9nUjNCMVFYSmphR2wwWldOMGRYSmxLVG9nWW05dmJHVmhiaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WVhKamFHbDBaV04wZFhKbElEMDlQU0JoY21Ob2FYUmxZM1IxY21VN1hHNGdJSDFjYmx4dUlDQnBjMVpsYm1SdmNpaDJaVzVrYjNJNklFZHdkVlpsYm1SdmNpazZJR0p2YjJ4bFlXNGdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMblpsYm1SdmNpQTlQVDBnZG1WdVpHOXlPMXh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nZEdocGN5QmpiR0Z6Y3lCcGN5QmtaWE5wWjI1bFpDQjBieUJ6ZEc5eVpTQnpkR0YwZFhNZ1lXNWtJR0psYVc1bklIVnpaV1FnWVhNZ1lTQnphVzVuYkdWMGIyNGdabTl5SUVwVFJWQXVJRWwwSUhkcGJHd2dZbVVnY0dGemMyVmtJSFJ2SUdwelpYQkpibWwwS0NrZ1lYTmNiaUFxSUhSb1pTQm1hWEp6ZENCd1lYSmhiV1YwWlhJZ2MyOGdkR2hoZENCcGRDQnBjeUJ6ZEc5eVpXUWdabTl5SUdaMWRIVnlaU0IxYzJVdVhHNGdLaTljYm1WNGNHOXlkQ0JqYkdGemN5QlhaV0pIY0hWQ1lXTnJaVzVrSUh0Y2JpQWdZV1JoY0hSbGNrbHVabTg2SUVGa1lYQjBaWEpKYm1adlNXMXdiRHRjYmlBZ1pHVjJhV05sT2lCSFVGVkVaWFpwWTJVN1hHNGdJQzhxS2x4dUlDQWdLaUJoYmlCcGJuTjBZVzVqWlNCdlppQkhjSFZFWVhSaFRXRnVZV2RsY2lCMGJ5QnRZVzVoWjJVZ1lTQkhjSFZFWVhSaFNXUWdMVDRnUjNCMVFuVm1abVZ5SUcxaGNIQnBibWRjYmlBZ0lDb3ZYRzRnSUdkd2RVUmhkR0ZOWVc1aFoyVnlPaUJIY0hWRVlYUmhUV0Z1WVdkbGNqdGNiaUFnTHlvcVhHNGdJQ0FxSUdGdUlHbHVjM1JoYm1ObElHOW1JRkJ5YjJkeVlXMU5ZVzVoWjJWeUlIUnZJR0oxYVd4a0lHRnVaQ0J5ZFc0Z1YyVmlSMUJWSUdOdmJYQjFkR1VnYzJoaFpHVnlJSEJ5YjJkeVlXMHNJR0Z1WkNCdFlXNWhaMlVnWVNCUWNtOW5jbUZ0UzJWNUlDMCtJRkJ5YjJkeVlXMWNiaUFnSUNvZ1lYSjBhV1poWTNSeklHMWhjSEJwYm1kY2JpQWdJQ292WEc0Z0lIQnliMmR5WVcxTllXNWhaMlZ5T2lCUWNtOW5jbUZ0VFdGdVlXZGxjanRjYmx4dUlDQXZLaXBjYmlBZ0lDb2djbVZ3Y21WelpXNTBhVzVuSUhSb1pTQnpaWE56YVc5dUlFbEVJRzltSUhkb2FXTm9JR2x6SUdOMWNuSmxiblJzZVNCaVpXbHVaeUJ5ZFc0dVhHNGdJQ0FxSUdCdWRXeHNZQ0J0WldGdWN5QnVieUJ6WlhOemFXOXVJR2x6SUdKbGFXNW5JSEoxYmk1Y2JpQWdJQ29nYjI1c2VTQjJZV3hwWkNCM2FHVnVJSE5sYzNOcGIyNHVjblZ1SUdseklHVjRaV04xZEdWa0xseHVJQ0FnS2k5Y2JpQWdZM1Z5Y21WdWRGTmxjM05wYjI1SlpEb2diblZ0WW1WeWZHNTFiR3dnUFNCdWRXeHNPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQnlaWEJ5WlhObGJuUnBibWNnZEdobElHdGxjbTVsYkNCSlJDQnZaaUIzYUdsamFDQnBjeUJqZFhKeVpXNTBiSGtnWW1WcGJtY2dZMjl0Y0hWMFpXUWdLRU5RVlNCamIyUmxJSEJsY25Od1pXTjBhWFpsS1M1Y2JpQWdJQ29nWUc1MWJHeGdJRzFsWVc1eklHNXZJR3RsY201bGJDQnBjeUJpWldsdVp5QmpiMjF3ZFhSbFpDNWNiaUFnSUNvZ2IyNXNlU0J2Ym1VZ2EyVnlibVZzSUdOaGJpQmlaU0JqYjIxd2RYUmxaQ0JoZENCaElHMXZiV1Z1ZEM1Y2JpQWdJQ292WEc0Z0lHTjFjbkpsYm5STFpYSnVaV3hKWkRvZ2JuVnRZbVZ5Zkc1MWJHd2dQU0J1ZFd4c08xeHVJQ0F2S2lwY2JpQWdJQ29nWVNCc2FYTjBJRzltSUhSbGJYQnZjbUZ5ZVNCSFVGVWdaR0YwWVNCbWIzSWdkR2hsSUdOMWNuSmxiblFnYTJWeWJtVnNMaUJ6YUc5MWJHUWdjbVZzWldGelpTQjNhR1Z1SUhSb1pTQnJaWEp1Wld3Z1pHOXVaU0JqYjIxd2RYUmhkR2x2Ymk1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2RHVnRjRzl5WVhKNVJHRjBZVG9nUjNCMVJHRjBZVnRkTzF4dUlDQXZLaXBjYmlBZ0lDb2dZU0JMWlhKdVpXeEpSQ0F0UGlCaElFZFFWU0JrWVhSaElHeHBjM1FzSUhkb2FXTm9JSE4wYjNKbGN5QndaWEp6YVhOMFpXNTBJRWRRVlNCa1lYUmhJRzkzYm1Wa0lHSjVJSFJvWlNCemNHVmphV1pwWXlCclpYSnVaV3d1WEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUd0bGNtNWxiRkJsY25OcGMzUmxiblJFWVhSaE9pQk5ZWEE4Ym5WdFltVnlMQ0JIY0hWRVlYUmhXMTArTzF4dUlDQXZLaXBjYmlBZ0lDb2dZU0JMWlhKdVpXeEpSQ0F0UGlCaElHTjFjM1J2YlNCa1lYUmhMQ0IzYUdsamFDQnpkRzl5WlhNZ1kzVnpkRzl0SUdSaGRHRWdiM2R1WldRZ1lua2dkR2hsSUhOd1pXTnBabWxqSUd0bGNtNWxiQzVjYmlBZ0lDb3ZYRzRnSUhCeWFYWmhkR1VnYTJWeWJtVnNRM1Z6ZEc5dFJHRjBZVG9nVFdGd1BHNTFiV0psY2l3Z2UxdHJaWGs2SUhOMGNtbHVaMTA2SUhWdWEyNXZkMjU5UGp0Y2JpQWdMeW9xWEc0Z0lDQXFJR2RsZENCMGFHVWdZM1Z6ZEc5dElHUmhkR0VnYjJZZ2RHaGxJR04xY25KbGJuUWdhMlZ5Ym1Wc1hHNGdJQ0FxTDF4dUlDQm5aWFFnWTNWeWNtVnVkRXRsY201bGJFTjFjM1J2YlVSaGRHRW9LVG9nZTF0clpYazZJSE4wY21sdVoxMDZJSFZ1YTI1dmQyNTlJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWpkWEp5Wlc1MFMyVnlibVZzU1dRZ1BUMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblkzVnljbVZ1ZEV0bGNtNWxiRU4xYzNSdmJVUmhkR0VvS1RvZ1kzVnljbVZ1ZEV0bGNtNWxiRWxrSUdseklHNTFiR3d1SUNoemFHOTFiR1FnYm05MElHaGhjSEJsYmlrbktUdGNiaUFnSUNCOVhHNWNiaUFnSUNCc1pYUWdaR0YwWVNBOUlIUm9hWE11YTJWeWJtVnNRM1Z6ZEc5dFJHRjBZUzVuWlhRb2RHaHBjeTVqZFhKeVpXNTBTMlZ5Ym1Wc1NXUXBPMXh1SUNBZ0lHbG1JQ2doWkdGMFlTa2dlMXh1SUNBZ0lDQWdaR0YwWVNBOUlIdDlPMXh1SUNBZ0lDQWdkR2hwY3k1clpYSnVaV3hEZFhOMGIyMUVZWFJoTG5ObGRDaDBhR2x6TG1OMWNuSmxiblJMWlhKdVpXeEpaQ3dnWkdGMFlTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUdSaGRHRTdYRzRnSUgxY2JseHVJQ0F2THlCTFpYSnVaV3hKUkNBdFBpQnJaWEp1Wld4SmJtWnZJRzFoY0hCcGJtZGNiaUFnYTJWeWJtVnNjem9nVFdGd1BHNTFiV0psY2l3Z1MyVnlibVZzU1c1bWJ6NDdYRzRnSUhCeWFYWmhkR1VnWTI5dGJXRnVaRVZ1WTI5a1pYSTZJRWRRVlVOdmJXMWhibVJGYm1OdlpHVnlmRzUxYkd3Z1BTQnVkV3hzTzF4dUlDQndjbWwyWVhSbElHTnZiWEIxZEdWUVlYTnpSVzVqYjJSbGNqb2dSMUJWUTI5dGNIVjBaVkJoYzNORmJtTnZaR1Z5Zkc1MWJHd2dQU0J1ZFd4c08xeHVJQ0J0WVhoRWFYTndZWFJqYUU1MWJXSmxjaUE5SURFMk8xeHVJQ0J3Wlc1a2FXNW5SR2x6Y0dGMFkyaE9kVzFpWlhJZ1BTQXdPMXh1WEc0Z0lDOHZJR2x1Wm04Z2IyWWdhMlZ5Ym1Wc2N5QndaVzVrYVc1bklITjFZbTFwYzNOcGIyNGdabTl5SUdFZ2MybHVaMnhsSUdKaGRHTm9YRzRnSUhCeWFYWmhkR1VnY0dWdVpHbHVaMHRsY201bGJITTZJRkJsYm1ScGJtZExaWEp1Wld4SmJtWnZXMTBnUFNCYlhUdGNiaUFnTHk4Z2NYVmxjbmxTWldGa1FuVm1abVZ5SUMwK0lIQmxibVJwYm1kTFpYSnVaV3h6SUcxaGNIQnBibWNnWm05eUlHRnNiQ0IwYUdVZ1ltRjBZMmhsYzF4dUlDQndjbWwyWVhSbElIQmxibVJwYm1kUmRXVnlhV1Z6T2lCTllYQThSMUJWUW5WbVptVnlMQ0JRWlc1a2FXNW5TMlZ5Ym1Wc1NXNW1iMXRkUGlBOUlHNWxkeUJOWVhBb0tUdGNiaUFnY0hKcGRtRjBaU0J4ZFdWeWVWSmxjMjlzZG1WQ2RXWm1aWEkvT2lCSFVGVkNkV1ptWlhJN1hHNGdJSEJ5YVhaaGRHVWdjWFZsY25sVFpYUS9PaUJIVUZWUmRXVnllVk5sZER0Y2JpQWdjSEpwZG1GMFpTQnhkV1Z5ZVZScGJXVkNZWE5sUHpvZ1ltbG5hVzUwTzF4dUlDQnhkV1Z5ZVZSNWNHVTZJRlJwYldWemRHRnRjRkYxWlhKNU8xeHVYRzRnSUdWdWRqb2dSVzUyTzF4dUlDQnpaWE56YVc5dVUzUmhkSFZ6T2lCVFpYTnphVzl1VTNSaGRHVWdQU0FuWkdWbVlYVnNkQ2M3WEc0Z0lDOHFLbHh1SUNBZ0tpQmhJRk5sYzNOcGIyNUpSQ0F0UGlCRGIyMXRZVzVrU1c1bWIxdGRJRzFoY0hCcGJtY3VJRWwwSjNNZ2RYTmxaQ0IwYnlCeVpXTnZjbVFnWVd4c0lFZFFWU0JqYjIxdFlXNWtjeUJtYjNJZ1kyOXljbVZ6Y0c5dVpHbHVaeUJ6WlhOemFXOXVMbHh1SUNBZ0tpOWNiaUFnWTJGd2RIVnlaV1JEYjIxdFlXNWtUR2x6ZERvZ1RXRndQRzUxYldKbGNpd2dRMjl0YldGdVpFbHVabTliWFQ0Z1BTQnVaWGNnVFdGd0tDazdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlHRWdVMlZ6YzJsdmJrbEVJQzArSUZCbGJtUnBibWRMWlhKdVpXeEpibVp2VzEwZ2JXRndjR2x1WnlCbWIzSWdjSEp2Wm1sc2FXNW5MbHh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0JqWVhCMGRYSmxaRkJsYm1ScGJtZExaWEp1Wld4ek9pQk5ZWEE4Ym5WdFltVnlMQ0JRWlc1a2FXNW5TMlZ5Ym1Wc1NXNW1iMXRkUGlBOUlHNWxkeUJOWVhBb0tUdGNibHh1SUNBdktpcGNiaUFnSUNvZ1lTQlRaWE56YVc5dVNVUWdMVDRnWVNCTllYQWdiMllnS0VsdWNIVjBUM1YwY0hWMFNXNWtaWGdnTFQ0Z1cwbEVMQ0JIVUZWQ2RXWm1aWEpkS1NCdFlYQndhVzVuTGx4dUlDQWdLaTljYmlBZ2MyVnpjMmx2YmtWNGRHVnlibUZzUkdGMFlVMWhjSEJwYm1jNklFMWhjRHh1ZFcxaVpYSXNJRTFoY0R4dWRXMWlaWElzSUZ0dWRXMWlaWElzSUVkUVZVSjFabVpsY2wwK1BpQTlJRzVsZHlCTllYQW9LVHRjYmx4dUlDQmhjM2x1WXlCcGJtbDBhV0ZzYVhwbEtHVnVkam9nUlc1MkxDQmhaR0Z3ZEdWeU9pQkhVRlZCWkdGd2RHVnlLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQjdYRzRnSUNBZ2RHaHBjeTVsYm5ZZ1BTQmxiblk3WEc0Z0lDQWdZMjl1YzNRZ2NtVnhkV2x5WldSR1pXRjBkWEpsY3pvZ1IxQlZSbVZoZEhWeVpVNWhiV1ZiWFNBOUlGdGRPMXh1SUNBZ0lHTnZibk4wSUdSbGRtbGpaVVJsYzJOeWFYQjBiM0k2SUVkUVZVUmxkbWxqWlVSbGMyTnlhWEIwYjNJZ1BTQjdYRzRnSUNBZ0lDQnlaWEYxYVhKbFpFeHBiV2wwY3pvZ2UxeHVJQ0FnSUNBZ0lDQnRZWGhEYjIxd2RYUmxWMjl5YTJkeWIzVndVM1J2Y21GblpWTnBlbVU2SUdGa1lYQjBaWEl1YkdsdGFYUnpMbTFoZUVOdmJYQjFkR1ZYYjNKclozSnZkWEJUZEc5eVlXZGxVMmw2WlN4Y2JpQWdJQ0FnSUNBZ2JXRjRRMjl0Y0hWMFpWZHZjbXRuY205MWNITlFaWEpFYVcxbGJuTnBiMjQ2SUdGa1lYQjBaWEl1YkdsdGFYUnpMbTFoZUVOdmJYQjFkR1ZYYjNKclozSnZkWEJ6VUdWeVJHbHRaVzV6YVc5dUxGeHVJQ0FnSUNBZ0lDQnRZWGhUZEc5eVlXZGxRblZtWm1WeVFtbHVaR2x1WjFOcGVtVTZJR0ZrWVhCMFpYSXViR2x0YVhSekxtMWhlRk4wYjNKaFoyVkNkV1ptWlhKQ2FXNWthVzVuVTJsNlpTeGNiaUFnSUNBZ0lDQWdiV0Y0UW5WbVptVnlVMmw2WlRvZ1lXUmhjSFJsY2k1c2FXMXBkSE11YldGNFFuVm1abVZ5VTJsNlpTeGNiaUFnSUNBZ0lDQWdiV0Y0UTI5dGNIVjBaVWx1ZG05allYUnBiMjV6VUdWeVYyOXlhMmR5YjNWd09pQmhaR0Z3ZEdWeUxteHBiV2wwY3k1dFlYaERiMjF3ZFhSbFNXNTJiMk5oZEdsdmJuTlFaWEpYYjNKclozSnZkWEFzWEc0Z0lDQWdJQ0FnSUcxaGVFTnZiWEIxZEdWWGIzSnJaM0p2ZFhCVGFYcGxXRG9nWVdSaGNIUmxjaTVzYVcxcGRITXViV0Y0UTI5dGNIVjBaVmR2Y210bmNtOTFjRk5wZW1WWUxGeHVJQ0FnSUNBZ0lDQnRZWGhEYjIxd2RYUmxWMjl5YTJkeWIzVndVMmw2WlZrNklHRmtZWEIwWlhJdWJHbHRhWFJ6TG0xaGVFTnZiWEIxZEdWWGIzSnJaM0p2ZFhCVGFYcGxXU3hjYmlBZ0lDQWdJQ0FnYldGNFEyOXRjSFYwWlZkdmNtdG5jbTkxY0ZOcGVtVmFPaUJoWkdGd2RHVnlMbXhwYldsMGN5NXRZWGhEYjIxd2RYUmxWMjl5YTJkeWIzVndVMmw2WlZvc1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ2NtVnhkV2x5WldSR1pXRjBkWEpsY3l4Y2JpQWdJQ0I5TzF4dVhHNGdJQ0FnYVdZZ0tHRmtZWEIwWlhJdVptVmhkSFZ5WlhNdWFHRnpLQ2RqYUhKdmJXbDFiUzFsZUhCbGNtbHRaVzUwWVd3dGRHbHRaWE4wWVcxd0xYRjFaWEo1TFdsdWMybGtaUzF3WVhOelpYTW5LU2tnZTF4dUlDQWdJQ0FnY21WeGRXbHlaV1JHWldGMGRYSmxjeTV3ZFhOb0tDZGphSEp2YldsMWJTMWxlSEJsY21sdFpXNTBZV3d0ZEdsdFpYTjBZVzF3TFhGMVpYSjVMV2x1YzJsa1pTMXdZWE56WlhNbklHRnpJRWRRVlVabFlYUjFjbVZPWVcxbEtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHRmtZWEIwWlhJdVptVmhkSFZ5WlhNdWFHRnpLQ2QwYVcxbGMzUmhiWEF0Y1hWbGNua25LU2tnZTF4dUlDQWdJQ0FnY21WeGRXbHlaV1JHWldGMGRYSmxjeTV3ZFhOb0tDZDBhVzFsYzNSaGJYQXRjWFZsY25rbktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHRmtZWEIwWlhJdVptVmhkSFZ5WlhNdWFHRnpLQ2R6YUdGa1pYSXRaakUySnlrcElIdGNiaUFnSUNBZ0lISmxjWFZwY21Wa1JtVmhkSFZ5WlhNdWNIVnphQ2duYzJoaFpHVnlMV1l4TmljcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVaR1YyYVdObElEMGdZWGRoYVhRZ1lXUmhjSFJsY2k1eVpYRjFaWE4wUkdWMmFXTmxLR1JsZG1salpVUmxjMk55YVhCMGIzSXBPMXh1SUNBZ0lIUm9hWE11WVdSaGNIUmxja2x1Wm04Z1BTQnVaWGNnUVdSaGNIUmxja2x1Wm05SmJYQnNLR0YzWVdsMElHRmtZWEIwWlhJdWNtVnhkV1Z6ZEVGa1lYQjBaWEpKYm1adktDa3BPMXh1SUNBZ0lIUm9hWE11WjNCMVJHRjBZVTFoYm1GblpYSWdQU0JqY21WaGRHVkhjSFZFWVhSaFRXRnVZV2RsY2loMGFHbHpLVHRjYmlBZ0lDQjBhR2x6TG5CeWIyZHlZVzFOWVc1aFoyVnlJRDBnYm1WM0lGQnliMmR5WVcxTllXNWhaMlZ5S0hSb2FYTXBPMXh1SUNBZ0lIUm9hWE11YTJWeWJtVnNjeUE5SUc1bGR5Qk5ZWEFvS1R0Y2JpQWdJQ0IwYUdsekxtdGxjbTVsYkZCbGNuTnBjM1JsYm5SRVlYUmhJRDBnYm1WM0lFMWhjQ2dwTzF4dUlDQWdJSFJvYVhNdWEyVnlibVZzUTNWemRHOXRSR0YwWVNBOUlHNWxkeUJOWVhBb0tUdGNibHh1SUNBZ0lDOHZJSE5sZENCMWNDQm1iR0ZuY3lCbWIzSWdiRzluWjJWeVhHNGdJQ0FnWTI5dVptbG5kWEpsVEc5bloyVnlLR1Z1ZGk1c2IyZE1aWFpsYkNFc0lDRWhaVzUyTG1SbFluVm5LVHRjYmx4dUlDQWdJQzh2SUZSUFJFODZJSE5sZENCMWNDQm1iR0ZuYzF4dVhHNGdJQ0FnZEdocGN5NWtaWFpwWTJVdWIyNTFibU5oY0hSMWNtVmtaWEp5YjNJZ1BTQmxkaUE5UGlCN1hHNGdJQ0FnSUNCcFppQW9aWFl1WlhKeWIzSWdhVzV6ZEdGdVkyVnZaaUJIVUZWV1lXeHBaR0YwYVc5dVJYSnliM0lwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElHNXZMV052Ym5OdmJHVmNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2loZ1FXNGdkVzVqWVhWbmFIUWdWMlZpUjFCVklIWmhiR2xrWVhScGIyNGdaWEp5YjNJZ2QyRnpJSEpoYVhObFpEb2dKSHRsZGk1bGNuSnZjaTV0WlhOellXZGxmV0FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0JQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb1hHNGdJQ0FnSUNBZ0lIUm9hWE11Wlc1MkxuZGxZbWR3ZFN3Z0oyUmxkbWxqWlNjc0lIdDJZV3gxWlRvZ2RHaHBjeTVrWlhacFkyVXNJSGR5YVhSaFlteGxPaUJtWVd4elpTd2daVzUxYldWeVlXSnNaVG9nZEhKMVpTd2dZMjl1Wm1sbmRYSmhZbXhsT2lCbVlXeHpaWDBwTzF4dUlDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoY2JpQWdJQ0FnSUNBZ2RHaHBjeTVsYm5ZdWQyVmlaM0IxTENBbllXUmhjSFJsY2ljc0lIdDJZV3gxWlRvZ1lXUmhjSFJsY2l3Z2QzSnBkR0ZpYkdVNklHWmhiSE5sTENCbGJuVnRaWEpoWW14bE9pQjBjblZsTENCamIyNW1hV2QxY21GaWJHVTZJR1poYkhObGZTazdYRzVjYmlBZ0lDQXZMeUJwYm1sMElIRjFaWEo1Vkhsd1pTd2dkMmhwWTJnZ2FYTWdibVZqWlhOellYSjVJR1p2Y2lCSmJtWmxjbVZ1WTJWVFpYTnphVzl1TG1OeVpXRjBaVnh1SUNBZ0lIUm9hWE11YzJWMFVYVmxjbmxVZVhCbEtDazdYRzRnSUgxY2JseHVJQ0JrYVhOd2IzTmxLQ2s2SUhadmFXUWdlMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdkR2hwY3k1eGRXVnllVk5sZENBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVjWFZsY25sVFpYUXVaR1Z6ZEhKdmVTZ3BPMXh1SUNBZ0lIMWNiaUFnSUNCMGFHbHpMbWR3ZFVSaGRHRk5ZVzVoWjJWeUxtUnBjM0J2YzJVb0tUdGNiaUFnZlZ4dVhHNGdJR2RsZEVOdmJXMWhibVJGYm1OdlpHVnlLQ2s2SUVkUVZVTnZiVzFoYm1SRmJtTnZaR1Z5SUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11WTI5dGJXRnVaRVZ1WTI5a1pYSXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVkyOXRiV0Z1WkVWdVkyOWtaWElnUFNCMGFHbHpMbVJsZG1salpTNWpjbVZoZEdWRGIyMXRZVzVrUlc1amIyUmxjaWdwTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVqYjIxdFlXNWtSVzVqYjJSbGNqdGNiaUFnZlZ4dVhHNGdJR2RsZEVOdmJYQjFkR1ZRWVhOelJXNWpiMlJsY2lncE9pQkhVRlZEYjIxd2RYUmxVR0Z6YzBWdVkyOWtaWElnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTVqYjIxd2RYUmxVR0Z6YzBWdVkyOWtaWElwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR052YlcxaGJtUkZibU52WkdWeUlEMGdkR2hwY3k1blpYUkRiMjF0WVc1a1JXNWpiMlJsY2lncE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWTI5dGNIVjBaVkJoYzNORVpYTmpjbWx3ZEc5eU9pQkhVRlZEYjIxd2RYUmxVR0Z6YzBSbGMyTnlhWEIwYjNJZ1BTQjdmVHRjYmx4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11Y1hWbGNubFVlWEJsSUQwOVBTQW5ZWFF0Y0dGemMyVnpKeWtnZTF4dUlDQWdJQ0FnSUNCamIyMXdkWFJsVUdGemMwUmxjMk55YVhCMGIzSXVkR2x0WlhOMFlXMXdWM0pwZEdWeklEMGdlMXh1SUNBZ0lDQWdJQ0FnSUhGMVpYSjVVMlYwT2lCMGFHbHpMbkYxWlhKNVUyVjBJU3hjYmlBZ0lDQWdJQ0FnSUNCaVpXZHBibTVwYm1kUFpsQmhjM05YY21sMFpVbHVaR1Y0T2lCMGFHbHpMbkJsYm1ScGJtZEVhWE53WVhSamFFNTFiV0psY2lBcUlESXNYRzRnSUNBZ0lDQWdJQ0FnWlc1a1QyWlFZWE56VjNKcGRHVkpibVJsZURvZ2RHaHBjeTV3Wlc1a2FXNW5SR2x6Y0dGMFkyaE9kVzFpWlhJZ0tpQXlJQ3NnTVN4Y2JpQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdkR2hwY3k1amIyMXdkWFJsVUdGemMwVnVZMjlrWlhJZ1BTQmpiMjF0WVc1a1JXNWpiMlJsY2k1aVpXZHBia052YlhCMWRHVlFZWE56S0dOdmJYQjFkR1ZRWVhOelJHVnpZM0pwY0hSdmNpazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnZiWEIxZEdWUVlYTnpSVzVqYjJSbGNqdGNiaUFnZlZ4dVhHNGdJR1Z1WkVOdmJYQjFkR1ZRWVhOektDazZJSFp2YVdRZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJYQjFkR1ZRWVhOelJXNWpiMlJsY2lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVqYjIxd2RYUmxVR0Z6YzBWdVkyOWtaWEl1Wlc1a0tDazdYRzRnSUNBZ0lDQjBhR2x6TG1OdmJYQjFkR1ZRWVhOelJXNWpiMlJsY2lBOUlHNTFiR3c3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWm14MWMyZ29LVG9nZG05cFpDQjdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtTnZiVzFoYm1SRmJtTnZaR1Z5S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdWRkpCUTBWZlJsVk9RMTlDUlVkSlRpZ3BPMXh1WEc0Z0lDQWdkR2hwY3k1bGJtUkRiMjF3ZFhSbFVHRnpjeWdwTzF4dUlDQWdJR3hsZENCeGRXVnllVkpsWVdSQ2RXWm1aWEk2SUVkUVZVSjFabVpsY2p0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV4ZFdWeWVWUjVjR1VnSVQwOUlDZHViMjVsSnlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVqYjIxdFlXNWtSVzVqYjJSbGNpNXlaWE52YkhabFVYVmxjbmxUWlhRb1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1eGRXVnllVk5sZENFc0lEQXNJSFJvYVhNdWNHVnVaR2x1WjBScGMzQmhkR05vVG5WdFltVnlJQ29nTWl3Z2RHaHBjeTV4ZFdWeWVWSmxjMjlzZG1WQ2RXWm1aWEloTENBd0tUdGNibHh1SUNBZ0lDQWdjWFZsY25sU1pXRmtRblZtWm1WeUlEMGdkR2hwY3k1a1pYWnBZMlV1WTNKbFlYUmxRblZtWm1WeUtGeHVJQ0FnSUNBZ0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0J1YnkxaWFYUjNhWE5sWEc0Z0lDQWdJQ0FnSUNBZ2UzTnBlbVU2SUhSb2FYTXVjR1Z1WkdsdVowUnBjM0JoZEdOb1RuVnRZbVZ5SUNvZ01pQXFJRGdzSUhWellXZGxPaUJIVUZWQ2RXWm1aWEpWYzJGblpTNU5RVkJmVWtWQlJDQjhJRWRRVlVKMVptWmxjbFZ6WVdkbExrTlBVRmxmUkZOVWZTazdYRzVjYmlBZ0lDQWdJSFJvYVhNdWNHVnVaR2x1WjFGMVpYSnBaWE11YzJWMEtIRjFaWEo1VW1WaFpFSjFabVpsY2l3Z2RHaHBjeTV3Wlc1a2FXNW5TMlZ5Ym1Wc2N5azdYRzRnSUNBZ0lDQjBhR2x6TG5CbGJtUnBibWRMWlhKdVpXeHpJRDBnVzEwN1hHNGdJQ0FnSUNCMGFHbHpMbU52YlcxaGJtUkZibU52WkdWeUxtTnZjSGxDZFdabVpYSlViMEoxWm1abGNpaGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuRjFaWEo1VW1WemIyeDJaVUoxWm1abGNpRXNJREFzSUhGMVpYSjVVbVZoWkVKMVptWmxjaXdnTUN3Z2RHaHBjeTV3Wlc1a2FXNW5SR2x6Y0dGMFkyaE9kVzFpWlhJZ0tpQXlJQ29nT0NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZEdocGN5NWtaWFpwWTJVdWNYVmxkV1V1YzNWaWJXbDBLRnQwYUdsekxtTnZiVzFoYm1SRmJtTnZaR1Z5TG1acGJtbHphQ2dwWFNrN1hHNGdJQ0FnZEdocGN5NW5jSFZFWVhSaFRXRnVZV2RsY2k1eVpXWnlaWE5vVUdWdVpHbHVaMEoxWm1abGNuTW9LVHRjYmlBZ0lDQjBhR2x6TG1OdmJXMWhibVJGYm1OdlpHVnlJRDBnYm5Wc2JEdGNiaUFnSUNCMGFHbHpMbkJsYm1ScGJtZEVhWE53WVhSamFFNTFiV0psY2lBOUlEQTdYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NXhkV1Z5ZVZSNWNHVWdJVDA5SUNkdWIyNWxKeWtnZTF4dUlDQWdJQ0FnZG05cFpDQnhkV1Z5ZVZKbFlXUkNkV1ptWlhJaExtMWhjRUZ6ZVc1aktFZFFWVTFoY0UxdlpHVXVVa1ZCUkNrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHMWhjSEJsWkVSaGRHRWdQU0J1WlhjZ1FtbG5WV2x1ZERZMFFYSnlZWGtvY1hWbGNubFNaV0ZrUW5WbVptVnlMbWRsZEUxaGNIQmxaRkpoYm1kbEtDa3BPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQndaVzVrYVc1blMyVnlibVZzY3lBOUlIUm9hWE11Y0dWdVpHbHVaMUYxWlhKcFpYTXVaMlYwS0hGMVpYSjVVbVZoWkVKMVptWmxjaWtoTzF4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHMWhjSEJsWkVSaGRHRXViR1Z1WjNSb0lDOGdNanNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjR1Z1WkdsdVowdGxjbTVsYkVsdVptOGdQU0J3Wlc1a2FXNW5TMlZ5Ym1Wc2MxdHBYVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JyWlhKdVpXeEpaQ0E5SUhCbGJtUnBibWRMWlhKdVpXeEpibVp2TG10bGNtNWxiRWxrTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUd0bGNtNWxiRWx1Wm04Z1BTQjBhR2x6TG10bGNtNWxiSE11WjJWMEtHdGxjbTVsYkVsa0tTRTdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdhMlZ5Ym1Wc1ZIbHdaU0E5SUd0bGNtNWxiRWx1Wm04dWEyVnlibVZzVkhsd1pUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnJaWEp1Wld4T1lXMWxJRDBnYTJWeWJtVnNTVzVtYnk1clpYSnVaV3hPWVcxbE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIQnliMmR5WVcxT1lXMWxJRDBnY0dWdVpHbHVaMHRsY201bGJFbHVabTh1Y0hKdlozSmhiVTVoYldVN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2FXNXdkWFJVWlc1emIzSldhV1YzY3lBOUlIQmxibVJwYm1kTFpYSnVaV3hKYm1adkxtbHVjSFYwVkdWdWMyOXlWbWxsZDNNN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2IzVjBjSFYwVkdWdWMyOXlWbWxsZDNNZ1BTQndaVzVrYVc1blMyVnlibVZzU1c1bWJ5NXZkWFJ3ZFhSVVpXNXpiM0pXYVdWM2N6dGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnpkR0Z5ZEZScGJXVlZOalFnUFNCdFlYQndaV1JFWVhSaFcya2dLaUF5WFR0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtUlVhVzFsVlRZMElEMGdiV0Z3Y0dWa1JHRjBZVnRwSUNvZ01pQXJJREZkTzF4dVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUIwYUdsekxuRjFaWEo1VkdsdFpVSmhjMlVnUFQwOUlDZDFibVJsWm1sdVpXUW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5GMVpYSjVWR2x0WlVKaGMyVWdQU0J6ZEdGeWRGUnBiV1ZWTmpRN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYzNSaGNuUlVhVzFsSUQwZ1RuVnRZbVZ5S0hOMFlYSjBWR2x0WlZVMk5DQXRJSFJvYVhNdWNYVmxjbmxVYVcxbFFtRnpaU2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWlc1a1ZHbHRaU0E5SUU1MWJXSmxjaWhsYm1SVWFXMWxWVFkwSUMwZ2RHaHBjeTV4ZFdWeWVWUnBiV1ZDWVhObEtUdGNibHh1SUNBZ0lDQWdJQ0FnSUdsbUlDZ2hUblZ0WW1WeUxtbHpVMkZtWlVsdWRHVm5aWElvYzNSaGNuUlVhVzFsS1NCOGZDQWhUblZ0WW1WeUxtbHpVMkZtWlVsdWRHVm5aWElvWlc1a1ZHbHRaU2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJTWVc1blpVVnljbTl5S0NkcGJtTnZjbkpsWTNRZ2RHbHRaWE4wWVcxd0lISmhibWRsSnlrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdVpXNTJMbmRsWW1kd2RTNXdjbTltYVd4cGJtYy9MbTl1WkdGMFlTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVsYm5ZdWQyVmlaM0IxTG5CeWIyWnBiR2x1Wnk1dmJtUmhkR0VvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IyWlhKemFXOXVPaUF4TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm5CMWRITk5aWFJoWkdGMFlUb2dhVzV3ZFhSVVpXNXpiM0pXYVdWM2N5NXRZWEFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllXeDFaU0E5UGlBb2UyUnBiWE02SUhaaGJIVmxMbVJwYlhNc0lHUmhkR0ZVZVhCbE9pQjBaVzV6YjNKRVlYUmhWSGx3WlVWdWRXMVViMU4wY21sdVp5aDJZV3gxWlM1a1lYUmhWSGx3WlNsOUtTa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHOTFkSEIxZEhOTlpYUmhaR0YwWVRvZ2IzVjBjSFYwVkdWdWMyOXlWbWxsZDNNdWJXRndLRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVWdQVDRnS0h0a2FXMXpPaUIyWVd4MVpTNWthVzF6TENCa1lYUmhWSGx3WlRvZ2RHVnVjMjl5UkdGMFlWUjVjR1ZGYm5WdFZHOVRkSEpwYm1jb2RtRnNkV1V1WkdGMFlWUjVjR1VwZlNrcExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCclpYSnVaV3hKWkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJWeWJtVnNWSGx3WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJWeWJtVnNUbUZ0WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY0hKdlozSmhiVTVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMFlYSjBWR2x0WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWlc1a1ZHbHRaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJwWmlCdWJ5QmpZV3hzWW1GamF5QnBjeUJ3Y205MmFXUmxaQ3dnY0hKcGJuUWdkR2hsSUhCeWIyWnBiR2x1WnlCdFpYTnpZV2RsSUhSdklHTnZibk52YkdWY2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCcGJuQjFkRk5vWVhCbGN5QTlJQ2NuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhVzV3ZFhSVVpXNXpiM0pXYVdWM2N5NW1iM0pGWVdOb0tDaDJZV3gxWlN3Z2FTa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm5CMWRGTm9ZWEJsY3lBclBTQmdhVzV3ZFhSYkpIdHBmVjA2SUZza2UzWmhiSFZsTG1ScGJYTjlYU0I4SUNSN2RHVnVjMjl5UkdGMFlWUjVjR1ZGYm5WdFZHOVRkSEpwYm1jb2RtRnNkV1V1WkdGMFlWUjVjR1VwZlN3Z1lEdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHOTFkSEIxZEZOb1lYQmxjeUE5SUNjbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYjNWMGNIVjBWR1Z1YzI5eVZtbGxkM011Wm05eVJXRmphQ2dvZG1Gc2RXVXNJR2twSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2IzVjBjSFYwVTJoaGNHVnpJQ3M5SUdCdmRYUndkWFJiSkh0cGZWMDZJRnNrZTNaaGJIVmxMbVJwYlhOOVhTQjhJQ1I3ZEdWdWMyOXlSR0YwWVZSNWNHVkZiblZ0Vkc5VGRISnBibWNvZG1Gc2RXVXVaR0YwWVZSNWNHVXBmU3dnWUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRibVY0ZEMxc2FXNWxJRzV2TFdOdmJuTnZiR1ZjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdWJHOW5LR0JiY0hKdlptbHNhVzVuWFNCclpYSnVaV3dnWENJa2UydGxjbTVsYkVsa2ZYd2tlMnRsY201bGJGUjVjR1Y5ZkNSN2EyVnlibVZzVG1GdFpYMThKSHR3Y205bmNtRnRUbUZ0WlgxY0lpQWtlMmx1Y0hWMFUyaGhjR1Z6ZlNSN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IzVjBjSFYwVTJoaGNHVnpmV1Y0WldOMWRHbHZiaUIwYVcxbE9pQWtlMlZ1WkZScGJXVWdMU0J6ZEdGeWRGUnBiV1Y5SUc1ellDazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lGUlNRVU5GS0NkSFVGVW5MQ0JnSkh0d2NtOW5jbUZ0VG1GdFpYMDZPaVI3YzNSaGNuUlVhVzFsVlRZMGZUbzZKSHRsYm1SVWFXMWxWVFkwZldBcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEYxWlhKNVVtVmhaRUoxWm1abGNpNTFibTFoY0NncE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CbGJtUnBibWRSZFdWeWFXVnpMbVJsYkdWMFpTaHhkV1Z5ZVZKbFlXUkNkV1ptWlhJcE8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVJQ0FnSUZSU1FVTkZYMFpWVGtOZlJVNUVLQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ2NuVnVJR0VnVjJWaVIxQlZJSEJ5YjJkeVlXMHVYRzRnSUNBcUlFQndZWEpoYlNCd2NtOW5jbUZ0SUdFZ1VISnZaM0poYlVsdVptOGdhVzV6ZEdGdVkyVmNiaUFnSUNvZ1FIQmhjbUZ0SUdsdWNIVjBWR1Z1YzI5eVZtbGxkM01nWVNCVVpXNXpiM0pXYVdWM0lHRnljbUY1TGlCbFlXTm9JR1ZzWlcxbGJuUWdjbVZ3Y21WelpXNTBjeUJoSUhaaGJIVmxJR0ZzY21WaFpIa2daWGhwYzNSeklHbHVJRWRRVlM1Y2JpQWdJQ29nUUhCaGNtRnRJRzkxZEhCMWRFbHVaR2xqWlhNZ1lXNGdhVzVrYVdObGN5QmhjbkpoZVM0Z1pXRmphQ0JsYkdWdFpXNTBJR05oYmlCaVpTQmxhWFJvWlhJZ0xURWdLSFJsYlhCdmNtRnllU0JrWVhSaEtTd2dMVElnS0hCbGNuTnBjM1JsYm5RZ1pHRjBZU2tnYjNJZ1lXNWNiaUFnSUNvZ2FXNWtaWGdnZEc4Z2RHaGxJR3RsY201bGJDZHpJRzkxZEhCMWRDNWNiaUFnSUNvZ1FIQmhjbUZ0SUdOeVpXRjBaVXRsY201bGJFOTFkSEIxZENCaElHTmhiR3hpWVdOcklHWjFibU4wYVc5dUlIUm9ZWFFnWTNKbFlYUmxJR0VnZG1Gc2RXVWdkRzhnYTJWeWJtVnNKM01nYjNWMGNIVjBJSGRwZEdnZ2RHaGxJR2RwZG1WdUlHbHVaR1Y0WEc0Z0lDQXFJRUJ3WVhKaGJTQmpjbVZoZEdWSmJuUmxjbTFsWkdsaGRHVlBkWFJ3ZFhRZ1lTQmpZV3hzWW1GamF5Qm1kVzVqZEdsdmJpQjBhR0YwSUdOeVpXRjBaU0JoSUhaaGJIVmxJR0Z6SUdFZ2FXNTBaWEp0WldScFlYUmxJSFpoYkhWbExDQmxhWFJvWlhJZ2RHVnRjRzl5WVhKNVhHNGdJQ0FxSUc5eUlIQmxjbk5wYzNSbGJuUWdLRzkzYm1Wa0lHSjVJSFJvWlNCamRYSnlaVzUwSUd0bGNtNWxiQ2xjYmlBZ0lDb2dRSEpsZEhWeWJuTWdZU0JVWlc1emIzSldhV1YzSUdGeWNtRjVJSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdjbVZ6ZFd4MExseHVJQ0FnS2k5Y2JpQWdjblZ1S0hCeWIyZHlZVzA2SUZCeWIyZHlZVzFKYm1adkxDQnBibkIxZEZSbGJuTnZjbFpwWlhkek9pQnlaV0ZrYjI1c2VTQlVaVzV6YjNKV2FXVjNXMTBzSUc5MWRIQjFkRWx1WkdsalpYTTZJSEpsWVdSdmJteDVJRzUxYldKbGNsdGRMRnh1SUNBZ0lDQWdZM0psWVhSbFMyVnlibVZzVDNWMGNIVjBPaUFvYVc1a1pYZzZJRzUxYldKbGNpd2daR0YwWVZSNWNHVTZJRzUxYldKbGNpd2daR2x0Y3pvZ2NtVmhaRzl1YkhrZ2JuVnRZbVZ5VzEwcElEMCtJRlJsYm5OdmNsWnBaWGNzWEc0Z0lDQWdJQ0JqY21WaGRHVkpiblJsY20xbFpHbGhkR1ZQZFhSd2RYUTZJQ2hrWVhSaFZIbHdaVG9nYm5WdFltVnlMQ0JrYVcxek9pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhTa2dQVDRnVkdWdWMyOXlWbWxsZHl4Y2JpQWdJQ0FnSUc5MWRIQjFkRU52ZFc1ME9pQnVkVzFpWlhJcE9pQlVaVzV6YjNKV2FXVjNXMTBnZTF4dUlDQWdJRlJTUVVORlgwWlZUa05mUWtWSFNVNG9jSEp2WjNKaGJTNXVZVzFsS1R0Y2JpQWdJQ0F2THlCamNtVmhkR1VnYVc1bWJ5Qm1iM0lnYVc1d2RYUnpYRzRnSUNBZ1kyOXVjM1FnYVc1d2RYUkVZWFJoY3pvZ1IzQjFSR0YwWVZ0ZElEMGdXMTA3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JwYm5CMWRGUmxibk52Y2xacFpYZHpMbXhsYm1kMGFEc2dLeXRwS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JrWVhSaElEMGdhVzV3ZFhSVVpXNXpiM0pXYVdWM2MxdHBYUzVrWVhSaE8xeHVJQ0FnSUNBZ0x5OGdhV1lnZEdWdWMyOXlJSFpwWlhjZ1pHRjBZU0JwY3lBd0xDQnBkQ0J0WldGdWN5QjBhR1VnYjNWMGNIVjBJR2x6SUhwbGNtOHRjMmw2WldRZ2RHVnVjMjl5TENCaGJtUWdkR2hsY21VZ2FYTWdibThnUjFCVklHUmhkR0VnWm05eUlHbDBMbHh1SUNBZ0lDQWdhV1lnS0dSaGRHRWdQVDA5SURBcElIdGNiaUFnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiMjV6ZENCbmNIVkVZWFJoSUQwZ2RHaHBjeTVuY0hWRVlYUmhUV0Z1WVdkbGNpNW5aWFFvWkdGMFlTazdYRzRnSUNBZ0lDQnBaaUFvSVdkd2RVUmhkR0VwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCdWJ5QkhVRlVnWkdGMFlTQm1iM0lnYVc1d2RYUTZJQ1I3WkdGMFlYMWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2x1Y0hWMFJHRjBZWE11Y0hWemFDaG5jSFZFWVhSaEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCamIyNXpkQ0I3YjNWMGNIVjBjeXdnWkdsemNHRjBZMmhIY205MWNDd2djSEp2WjNKaGJWVnVhV1p2Y20xemZTQTlJSEJ5YjJkeVlXMHVaMlYwVW5WdVJHRjBZU2hwYm5CMWRGUmxibk52Y2xacFpYZHpLVHRjYmx4dUlDQWdJQzh2SUdOb1pXTnJJRzkxZEhCMWRDQnBibVJwWTJWelhHNGdJQ0FnWTI5dWMzUWdkbUZzYVdSaGRHVmtUM1YwY0hWMFNXNWthV05sY3lBOUlHOTFkSEIxZEVsdVpHbGpaWE11YkdWdVozUm9JRDA5UFNBd0lEOGdiM1YwY0hWMGN5NXRZWEFvS0Y4c0lHa3BJRDArSUdrcElEb2diM1YwY0hWMFNXNWthV05sY3p0Y2JpQWdJQ0JwWmlBb2RtRnNhV1JoZEdWa1QzVjBjSFYwU1c1a2FXTmxjeTVzWlc1bmRHZ2dJVDA5SUc5MWRIQjFkSE11YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRTkxZEhCMWRDQnphWHBsSUNSN2RtRnNhV1JoZEdWa1QzVjBjSFYwU1c1a2FXTmxjeTVzWlc1bmRHaDlJRzExYzNRZ1ltVWdaWEYxWVd3Z2RHOGdKSHR2ZFhSd2RYUnpMbXhsYm1kMGFIMHVZQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnWTNKbFlYUmxJR2x1Wm04Z1ptOXlJRzkxZEhCMWRITmNiaUFnSUNCamIyNXpkQ0J2ZFhSd2RYUlVaVzV6YjNKV2FXVjNjem9nVkdWdWMyOXlWbWxsZDF0ZElEMGdXMTA3WEc0Z0lDQWdZMjl1YzNRZ2IzVjBjSFYwUkdGMFlYTTZJRWR3ZFVSaGRHRmJYU0E5SUZ0ZE8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2IzVjBjSFYwY3k1c1pXNW5kR2c3SUNzcmFTa2dlMXh1SUNBZ0lDQWdMeThnZG1Gc2RXVWdMVEVnWVc1a0lDMHlJR0Z5WlNCMWMyVmtJR1p2Y2lCamNtVmhkR2x1WnlCMFpXMXdiM0poY25rZ1lXNWtJSEJsY25OcGMzUmxiblFnYjNWMGNIVjBjeTVjYmlBZ0lDQWdJQzh2SUhaaGJIVmxJQzB6SUdseklIVnpaV1FnWm05eUlIQnNZV05sYUc5c1pHVnlJRzkxZEhCMWRDNGdVMjhnTFRNc0lDMHlMQ0F0TVNCaGJtUWdNQ3dnTVN3Z01pd2dMaTR1SUdGeVpTQjJZV3hwWkZ4dUlDQWdJQ0FnTHk4Z2IzVjBjSFYwSUdsdVpHbGpaWE11SUhObFpTQjBlWEJsSUdSbFptbHVhWFJwYjI0Z2IyWWdRMjl0Y0hWMFpVTnZiblJsZUhSSmJuQjFkSE5QZFhSd2RYUnpUV0Z3Y0dsdVp5Qm1iM0lnYlc5eVpTQmtaWFJoYVd4ekxseHVJQ0FnSUNBZ2FXWWdLQ0ZPZFcxaVpYSXVhWE5KYm5SbFoyVnlLSFpoYkdsa1lYUmxaRTkxZEhCMWRFbHVaR2xqWlhOYmFWMHBJSHg4SUhaaGJHbGtZWFJsWkU5MWRIQjFkRWx1WkdsalpYTmJhVjBnUENBdE15QjhmRnh1SUNBZ0lDQWdJQ0FnSUhaaGJHbGtZWFJsWkU5MWRIQjFkRWx1WkdsalpYTmJhVjBnUGowZ2IzVjBjSFYwUTI5MWJuUXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JKYm5aaGJHbGtJRzkxZEhCMWRDQnBibVJsZURvZ0pIdDJZV3hwWkdGMFpXUlBkWFJ3ZFhSSmJtUnBZMlZ6VzJsZGZXQXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0haaGJHbGtZWFJsWkU5MWRIQjFkRWx1WkdsalpYTmJhVjBnUFQwOUlDMHpLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWTI5dWMzUWdhWE5VWlcxd2IzSmhjbmtnUFNCMllXeHBaR0YwWldSUGRYUndkWFJKYm1ScFkyVnpXMmxkSUQwOVBTQXRNVHRjYmlBZ0lDQWdJR052Ym5OMElHbHpVR1Z5YzJsemRHVnVkQ0E5SUhaaGJHbGtZWFJsWkU5MWRIQjFkRWx1WkdsalpYTmJhVjBnUFQwOUlDMHlPMXh1SUNBZ0lDQWdZMjl1YzNRZ2RHVnVjMjl5Vm1sbGR5QTlJQ2hwYzFSbGJYQnZjbUZ5ZVNCOGZDQnBjMUJsY25OcGMzUmxiblFwSUQ5Y2JpQWdJQ0FnSUNBZ0lDQmpjbVZoZEdWSmJuUmxjbTFsWkdsaGRHVlBkWFJ3ZFhRb2IzVjBjSFYwYzF0cFhTNWtZWFJoVkhsd1pTd2diM1YwY0hWMGMxdHBYUzVrYVcxektTQTZYRzRnSUNBZ0lDQWdJQ0FnWTNKbFlYUmxTMlZ5Ym1Wc1QzVjBjSFYwS0haaGJHbGtZWFJsWkU5MWRIQjFkRWx1WkdsalpYTmJhVjBzSUc5MWRIQjFkSE5iYVYwdVpHRjBZVlI1Y0dVc0lHOTFkSEIxZEhOYmFWMHVaR2x0Y3lrN1hHNGdJQ0FnSUNCdmRYUndkWFJVWlc1emIzSldhV1YzY3k1d2RYTm9LSFJsYm5OdmNsWnBaWGNwTzF4dUlDQWdJQ0FnTHk4Z2FXWWdkR1Z1YzI5eUlIWnBaWGNnWkdGMFlTQnBjeUF3TENCcGRDQnRaV0Z1Y3lCMGFHVWdiM1YwY0hWMElHbHpJSHBsY204dGMybDZaV1FnZEdWdWMyOXlMQ0JoYm1RZ2RHaGxjbVVnYVhNZ2JtOGdSMUJWSUdSaGRHRWdabTl5SUdsMExseHVJQ0FnSUNBZ2FXWWdLSFJsYm5OdmNsWnBaWGN1WkdGMFlTQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTnZibk4wSUdkd2RVUmhkR0VnUFNCMGFHbHpMbWR3ZFVSaGRHRk5ZVzVoWjJWeUxtZGxkQ2gwWlc1emIzSldhV1YzTG1SaGRHRXBPMXh1SUNBZ0lDQWdhV1lnS0NGbmNIVkVZWFJoS1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ2JtOGdSMUJWSUdSaGRHRWdabTl5SUc5MWRIQjFkRG9nSkh0MFpXNXpiM0pXYVdWM0xtUmhkR0Y5WUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9hWE5VWlcxd2IzSmhjbmtwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUwWlcxd2IzSmhjbmxFWVhSaExuQjFjMmdvWjNCMVJHRjBZU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb2FYTlFaWEp6YVhOMFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQndaWEp6YVhOMFpXNTBSR0YwWVNBOUlIUm9hWE11YTJWeWJtVnNVR1Z5YzJsemRHVnVkRVJoZEdFdVoyVjBLSFJvYVhNdVkzVnljbVZ1ZEV0bGNtNWxiRWxrSVNrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doY0dWeWMybHpkR1Z1ZEVSaGRHRXBJSHRjYmlBZ0lDQWdJQ0FnSUNCd1pYSnphWE4wWlc1MFJHRjBZU0E5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWEyVnlibVZzVUdWeWMybHpkR1Z1ZEVSaGRHRXVjMlYwS0hSb2FYTXVZM1Z5Y21WdWRFdGxjbTVsYkVsa0lTd2djR1Z5YzJsemRHVnVkRVJoZEdFcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEJsY25OcGMzUmxiblJFWVhSaExuQjFjMmdvWjNCMVJHRjBZU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J2ZFhSd2RYUkVZWFJoY3k1d2RYTm9LR2R3ZFVSaGRHRXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJSGRvWlc0Z2RHaGxjbVVnWVhKbElHRnVlU0I2WlhKdkxYTnBlbVZrSUhSbGJuTnZjaUJwYmlCMGFHVWdhVzV3ZFhSeklHOXlJRzkxZEhCMWRITXNJSGRsSUhOb2IzVnNaQ0J5WlhCdmNuUWdaWEp5YjNJZ2RXNXNaWE56SUdGc2JDQnZkWFJ3ZFhSeklHRnlaVnh1SUNBZ0lDOHZJSHBsY204dGMybDZaV1FnZEdWdWMyOXljeTVjYmlBZ0lDQnBaaUFvYVc1d2RYUkVZWFJoY3k1c1pXNW5kR2dnSVQwOUlHbHVjSFYwVkdWdWMyOXlWbWxsZDNNdWJHVnVaM1JvSUh4OElHOTFkSEIxZEVSaGRHRnpMbXhsYm1kMGFDQWhQVDBnYjNWMGNIVjBWR1Z1YzI5eVZtbGxkM011YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0F2THlCcFppQmhiR3dnYjNWMGNIVjBjeUJoY21VZ2VtVnlieTF6YVhwbFpDQjBaVzV6YjNKekxDQjBhR1Z5WlNCcGN5QnVieUJ1WldWa0lIUnZJSEoxYmlCMGFHVWdjSEp2WjNKaGJTNWNiaUFnSUNBZ0lHbG1JQ2h2ZFhSd2RYUkVZWFJoY3k1c1pXNW5kR2dnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnVkZKQlEwVmZSbFZPUTE5RlRrUW9jSEp2WjNKaGJTNXVZVzFsS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUc5MWRIQjFkRlJsYm5OdmNsWnBaWGR6TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnTHk4Z2FXWWdjMjl0WlNCdmRYUndkWFJ6SUdGeVpTQjZaWEp2TFhOcGVtVmtJSFJsYm5OdmNuTXNJSEpsY0c5eWRDQmhiaUJsY25KdmNpNWNiaUFnSUNBZ0lDOHZYRzRnSUNBZ0lDQXZMeUJVVDBSUE9pQnpieUJtWVhJZ2QyVWdaRzl1SjNRZ2MyVmxJR0Z1ZVNCMWMyVWdZMkZ6WlNCMGFHRjBJRzkxZEhCMWRITWdhVzVqYkhWa1pTQmliM1JvSUhwbGNtOHRjMmw2WldRZ2RHVnVjMjl5Y3lCaGJtUWdibTl1TFhwbGNtOHRjMmw2WldRZ2RHVnVjMjl5Y3k1Y2JpQWdJQ0FnSUM4dklFbG1JSGRsSUhObFpTQnpkV05vSUhWelpTQmpZWE5sTENCM1pTQnVaV1ZrSUhSdklHMWhhMlVnWVNCamFHRnVaMlVnYUdWeVpTQjBieUJ6ZFhCd2IzSjBJR2wwTGx4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0FnSUdCUWNtOW5jbUZ0SUNSN2NISnZaM0poYlM1dVlXMWxmU0JvWVhNZ2VtVnlieTF6YVhwbFpDQjBaVzV6YjNJb2N5a2dhVzRnYVc1d2RYUnpJRzl5SUc5MWRIQjFkSE11SUZSb2FYTWdhWE1nYm05MElITjFjSEJ2Y25SbFpDQnViM2N1WUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z2JHOWhaQ0IxYm1sbWIzSnRjMXh1SUNBZ0lDOHZJRlJQUkU4NklHRmtaQ0JqWVdOb1pTQm1iM0lnZFc1cFptOXliU0FvYVhNZ2FYUWdibVZqWlhOellYSjVQeWxjYmlBZ0lDQXZMMXh1SUNBZ0lHeGxkQ0IxYm1sbWIzSnRRblZtWm1WeVFtbHVaR2x1WnpvZ1IxQlZRbWx1WkdsdVoxSmxjMjkxY21ObGZIVnVaR1ZtYVc1bFpEdGNiaUFnSUNCcFppQW9jSEp2WjNKaGJWVnVhV1p2Y20xektTQjdYRzRnSUNBZ0lDQnNaWFFnWTNWeWNtVnVkRTltWm5ObGRDQTlJREE3WEc0Z0lDQWdJQ0JqYjI1emRDQnZabVp6WlhSek9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dVhHNGdJQ0FnSUNCd2NtOW5jbUZ0Vlc1cFptOXliWE11Wm05eVJXRmphQ2gySUQwK0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1pHRjBZU0E5SUhSNWNHVnZaaUIyTG1SaGRHRWdQVDA5SUNkdWRXMWlaWEluSUQ4Z1czWXVaR0YwWVYwZ09pQjJMbVJoZEdFN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hrWVhSaExteGxibWQwYUNBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQXZMeUJvZEhSd2N6b3ZMM2QzZHk1M015NXZjbWN2VkZJdlYwZFRUQzhqWVd4cFoyNXZabHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnphWHBsVDJaRmJHVnRaVzUwSUQwZ2RpNTBlWEJsSUQwOVBTQkVZWFJoVkhsd1pTNW1iRzloZERFMklEOGdNaUE2SURRN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J6YVhwbFQyWldaV05QY2sxaGREdGNiaUFnSUNBZ0lDQWdiR1YwSUdKaGMyVkJiR2xuYm0xbGJuUTdYRzRnSUNBZ0lDQWdJR2xtSUNoMkxuUjVjR1VnUFQwOUlFUmhkR0ZVZVhCbExtWnNiMkYwTVRZcElIdGNiaUFnSUNBZ0lDQWdJQ0JpWVhObFFXeHBaMjV0Wlc1MElEMGdaR0YwWVM1c1pXNW5kR2dnUGlBMElEOGdNVFlnT2lBb1pHRjBZUzVzWlc1bmRHZ2dQaUF5SUQ4Z09DQTZJR1JoZEdFdWJHVnVaM1JvSUNvZ2MybDZaVTltUld4bGJXVnVkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2MybDZaVTltVm1WalQzSk5ZWFFnUFNCa1lYUmhMbXhsYm1kMGFDQStJRFFnUHlBeE5pQTZJSE5wZW1WUFprVnNaVzFsYm5RZ0tpQmtZWFJoTG14bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCaVlYTmxRV3hwWjI1dFpXNTBJRDBnWkdGMFlTNXNaVzVuZEdnZ1BEMGdNaUEvSUdSaGRHRXViR1Z1WjNSb0lDb2djMmw2WlU5bVJXeGxiV1Z1ZENBNklERTJPMXh1SUNBZ0lDQWdJQ0FnSUhOcGVtVlBabFpsWTA5eVRXRjBJRDBnTVRZN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdZM1Z5Y21WdWRFOW1abk5sZENBOUlFMWhkR2d1WTJWcGJDaGpkWEp5Wlc1MFQyWm1jMlYwSUM4Z1ltRnpaVUZzYVdkdWJXVnVkQ2tnS2lCaVlYTmxRV3hwWjI1dFpXNTBPMXh1SUNBZ0lDQWdJQ0J2Wm1aelpYUnpMbkIxYzJnb1kzVnljbVZ1ZEU5bVpuTmxkQ2s3WEc0Z0lDQWdJQ0FnSUM4dklFWnZjaUJ1YjI0dFpteHZZWFF4TmlCMGVYQmxMQ0IzYUdWdUlHUmhkR0V1YkdWdVozUm9JRDRnTkN3Z2RHaGxJSFZ1YVdadmNtMGdkbUZ5YVdGaWJHVWdhWE1nYjJZZ2RIbHdaU0JoY25KaGVUeDJaV00wUEdrek1ueDFNeko4WmpNeVBpeE9QaXdnZDJobGNtVmNiaUFnSUNBZ0lDQWdMeThnVGlBOUlFMWhkR2d1WTJWcGJDaGtZWFJoTG14bGJtZDBhQ0F2SURRcElHRnVaQ0JUYVhwbFQyWW9kbVZqTkR4cE16SjhkVE15ZkdZek1qNHBJRDBnTVRZdUlGUm9aU0IwYjNSaGJDQmllWFJsSUd4bGJtZDBhQ0JwY3lCT0lDcGNiaUFnSUNBZ0lDQWdMeThnVTJsNlpVOW1LSFpsWXpROGFUTXlmSFV6TW54bU16SStLUzRnUm05eUlHWnNiMkYwTVRZZ2RIbHdaU3dnZDJobGJpQmtZWFJoTG14bGJtZDBhQ0ErSURRc0lIUm9aU0IxYm1sbWIzSnRJSFpoY21saFlteGxJR2x6SUc5bUlIUjVjR1ZjYmlBZ0lDQWdJQ0FnTHk4Z1lYSnlZWGs4YldGME1uZzBQR1l4Tmo0c1RqNHNJSGRvWlhKbElFNGdQU0JOWVhSb0xtTmxhV3dvWkdGMFlTNXNaVzVuZEdnZ0x5QTRLU0JoYm1RZ1UybDZaVTltS0cxaGRESjRORHhtTVRZK0tTQTlJREUyTGlCVWFHVWdkRzkwWVd3Z1lubDBaVnh1SUNBZ0lDQWdJQ0F2THlCc1pXNW5kR2dnYVhNZ1RpQXFJRk5wZW1WUFppaHRZWFF5ZURROFpqRTJQaWt1WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1ZzWlcxbGJuUlFaWEpXWldOUGNrMWhkQ0E5SUhZdWRIbHdaU0E5UFQwZ1JHRjBZVlI1Y0dVdVpteHZZWFF4TmlBL0lEZ2dPaUEwTzF4dUlDQWdJQ0FnSUNCamRYSnlaVzUwVDJabWMyVjBJQ3M5SUdSaGRHRXViR1Z1WjNSb0lENGdOQ0EvSUUxaGRHZ3VZMlZwYkNoa1lYUmhMbXhsYm1kMGFDQXZJR1ZzWlcxbGJuUlFaWEpXWldOUGNrMWhkQ2tnS2lCemFYcGxUMlpXWldOUGNrMWhkQ0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlTNXNaVzVuZEdnZ0tpQnphWHBsVDJaRmJHVnRaVzUwTzF4dUlDQWdJQ0FnZlNrN1hHNWNiaUFnSUNBZ0lDOHZJRTFsWlhRZ1lXeHBaMjV0Wlc1MElHOW1JSE4wY25WamRDQm9aWEpsT2lCb2RIUndjem92TDNkM2R5NTNNeTV2Y21jdlZGSXZWMGRUVEM4allXeHBaMjV0Wlc1MExXRnVaQzF6YVhwbExpQkdiM0lnYzJsdGNHeHBZMmwwZVN3Z2MyVjBYRzRnSUNBZ0lDQXZMeUJ0WVhoQmJHbG5ibTFsYm5SUFprWnBaV3hrSUhSdklERTJJSE5wYm1ObElIUm9aU0IxYm1SbGNteDVhVzVuSUdKMVptWmxjaUJvWVhNZ1ltVmxiaUJ5YjNWdVpHVmtJSFZ3SUhSdklERTJMbHh1SUNBZ0lDQWdZMjl1YzNRZ2JXRjRRV3hwWjI1dFpXNTBUMlpHYVdWc1pDQTlJREUyTzF4dUlDQWdJQ0FnWTNWeWNtVnVkRTltWm5ObGRDQTlJRTFoZEdndVkyVnBiQ2hqZFhKeVpXNTBUMlptYzJWMElDOGdiV0Y0UVd4cFoyNXRaVzUwVDJaR2FXVnNaQ2tnS2lCdFlYaEJiR2xuYm0xbGJuUlBaa1pwWld4a08xeHVJQ0FnSUNBZ1kyOXVjM1FnWVhKeVlYbENkV1ptWlhJZ1BTQnVaWGNnUVhKeVlYbENkV1ptWlhJb1kzVnljbVZ1ZEU5bVpuTmxkQ2s3WEc0Z0lDQWdJQ0J3Y205bmNtRnRWVzVwWm05eWJYTXVabTl5UldGamFDZ29kaXdnYVNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnZabVp6WlhRZ1BTQnZabVp6WlhSelcybGRPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmtZWFJoSUQwZ2RIbHdaVzltSUhZdVpHRjBZU0E5UFQwZ0oyNTFiV0psY2ljZ1B5QmJkaTVrWVhSaFhTQTZJSFl1WkdGMFlUdGNiaUFnSUNBZ0lDQWdhV1lnS0hZdWRIbHdaU0E5UFQwZ1JHRjBZVlI1Y0dVdWFXNTBNeklwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnVaWGNnU1c1ME16SkJjbkpoZVNoaGNuSmhlVUoxWm1abGNpd2diMlptYzJWMExDQmtZWFJoTG14bGJtZDBhQ2t1YzJWMEtHUmhkR0VwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tIWXVkSGx3WlNBOVBUMGdSR0YwWVZSNWNHVXVkV2x1ZERNeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYm1WM0lGVnBiblF6TWtGeWNtRjVLR0Z5Y21GNVFuVm1abVZ5TENCdlptWnpaWFFzSUdSaGRHRXViR1Z1WjNSb0tTNXpaWFFvWkdGMFlTazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvZGk1MGVYQmxJRDA5UFNCRVlYUmhWSGx3WlM1bWJHOWhkREUyS1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVkU5RVR6b2dkWE5sSUVac2IyRjBNVFpCY25KaGVTNWNiaUFnSUNBZ0lDQWdJQ0J1WlhjZ1ZXbHVkREUyUVhKeVlYa29ZWEp5WVhsQ2RXWm1aWElzSUc5bVpuTmxkQ3dnWkdGMFlTNXNaVzVuZEdncExuTmxkQ2hrWVhSaEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2gyTG5SNWNHVWdQVDA5SUVSaGRHRlVlWEJsTG1ac2IyRjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2JtVjNJRVpzYjJGME16SkJjbkpoZVNoaGNuSmhlVUoxWm1abGNpd2diMlptYzJWMExDQmtZWFJoTG14bGJtZDBhQ2t1YzJWMEtHUmhkR0VwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1ZXNXpkWEJ3YjNKMFpXUWdkVzVwWm05eWJTQjBlWEJsT2lBa2UzUmxibk52Y2tSaGRHRlVlWEJsUlc1MWJWUnZVM1J5YVc1bktIWXVkSGx3WlNsOVlDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBwTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0IxYm1sbWIzSnRRblZtWm1WeVJHRjBZU0E5WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdaWE5zYVc1MExXUnBjMkZpYkdVdGJtVjRkQzFzYVc1bElHNXZMV0pwZEhkcGMyVmNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtZHdkVVJoZEdGTllXNWhaMlZ5TG1OeVpXRjBaU2hqZFhKeVpXNTBUMlptYzJWMExDQkhVRlZDZFdabVpYSlZjMkZuWlM1RFQxQlpYMFJUVkNCOElFZFFWVUoxWm1abGNsVnpZV2RsTGxWT1NVWlBVazBwTzF4dUlDQWdJQ0FnZEdocGN5NWtaWFpwWTJVdWNYVmxkV1V1ZDNKcGRHVkNkV1ptWlhJb2RXNXBabTl5YlVKMVptWmxja1JoZEdFdVluVm1abVZ5TENBd0xDQmhjbkpoZVVKMVptWmxjaXdnTUN3Z1kzVnljbVZ1ZEU5bVpuTmxkQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtZHdkVVJoZEdGTllXNWhaMlZ5TG5KbGJHVmhjMlVvZFc1cFptOXliVUoxWm1abGNrUmhkR0V1YVdRcE8xeHVJQ0FnSUNBZ2RXNXBabTl5YlVKMVptWmxja0pwYm1ScGJtY2dQU0I3YjJabWMyVjBPaUF3TENCemFYcGxPaUJqZFhKeVpXNTBUMlptYzJWMExDQmlkV1ptWlhJNklIVnVhV1p2Y20xQ2RXWm1aWEpFWVhSaExtSjFabVpsY24wN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWTI5dWMzUWdibTl5YldGc2FYcGxaRVJwYzNCaGRHTm9SM0p2ZFhBZ1BTQjBhR2x6TG5CeWIyZHlZVzFOWVc1aFoyVnlMbTV2Y20xaGJHbDZaVVJwYzNCaGRHTm9SM0p2ZFhCVGFYcGxLR1JwYzNCaGRHTm9SM0p2ZFhBcE8xeHVJQ0FnSUdOdmJuTjBJR2x6TVVScGJXVnVjMmx2YmtScGMzQmhkR05vSUQwZ2JtOXliV0ZzYVhwbFpFUnBjM0JoZEdOb1IzSnZkWEJiTVYwZ1BUMDlJREVnSmlZZ2JtOXliV0ZzYVhwbFpFUnBjM0JoZEdOb1IzSnZkWEJiTWwwZ1BUMDlJREU3WEc0Z0lDQWdMeThnWjJWMElIQnliMmR5WVcwZ2FXNW1iMXh1SUNBZ0lHTnZibk4wSUd0bGVTQTlJR2RsZEZCeWIyZHlZVzFKYm1adlZXNXBjWFZsUzJWNUtIQnliMmR5WVcwc0lHbHVjSFYwVkdWdWMyOXlWbWxsZDNNc0lHbHpNVVJwYldWdWMybHZia1JwYzNCaGRHTm9LVHRjYmlBZ0lDQnNaWFFnWVhKMGFXWmhZM1FnUFNCMGFHbHpMbkJ5YjJkeVlXMU5ZVzVoWjJWeUxtZGxkRUZ5ZEdsbVlXTjBLR3RsZVNrN1hHNGdJQ0FnYVdZZ0tDRmhjblJwWm1GamRDa2dlMXh1SUNBZ0lDQWdZWEowYVdaaFkzUWdQU0IwYUdsekxuQnliMmR5WVcxTllXNWhaMlZ5TG1KMWFXeGtLSEJ5YjJkeVlXMHNJRzV2Y20xaGJHbDZaV1JFYVhOd1lYUmphRWR5YjNWd0tUdGNiaUFnSUNBZ0lIUm9hWE11Y0hKdlozSmhiVTFoYm1GblpYSXVjMlYwUVhKMGFXWmhZM1FvYTJWNUxDQmhjblJwWm1GamRDazdYRzRnSUNBZ0lDQk1UMGRmUkVWQ1ZVY29KMmx1Wm04bkxDQW9LU0E5UGlCZ1cyRnlkR2xtWVdOMFhTQnJaWGs2SUNSN2EyVjVmU3dnY0hKdlozSmhiVTVoYldVNklDUjdjSEp2WjNKaGJTNXVZVzFsZldBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklIWmhiR2xrWVhSbElIVnVhV1p2Y20wZ2RtRnlhV0ZpYkdWelhHNGdJQ0FnYVdZZ0tIQnliMmR5WVcxVmJtbG1iM0p0Y3lBbUppQmhjblJwWm1GamRDNTFibWxtYjNKdFZtRnlhV0ZpYkdWelNXNW1ieWtnZTF4dUlDQWdJQ0FnYVdZZ0tIQnliMmR5WVcxVmJtbG1iM0p0Y3k1c1pXNW5kR2dnSVQwOUlHRnlkR2xtWVdOMExuVnVhV1p2Y20xV1lYSnBZV0pzWlhOSmJtWnZMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRlZ1YVdadmNtMGdkbUZ5YVdGaWJHVnpJR052ZFc1MElHMXBjMjFoZEdOb09pQmxlSEJsWTNRZ0pIdGhjblJwWm1GamRDNTFibWxtYjNKdFZtRnlhV0ZpYkdWelNXNW1ieTVzWlc1bmRHaDlMQ0JuYjNRZ0pIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhCeWIyZHlZVzFWYm1sbWIzSnRjeTVzWlc1bmRHaDlJR2x1SUhCeWIyZHlZVzBnWENJa2UyRnlkR2xtWVdOMExuQnliMmR5WVcxSmJtWnZMbTVoYldWOVhDSXVZQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhCeWIyZHlZVzFWYm1sbWIzSnRjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCMWJtbG1iM0p0SUQwZ2NISnZaM0poYlZWdWFXWnZjbTF6VzJsZE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCaFkzUjFZV3hVZVhCbElEMGdkVzVwWm05eWJTNTBlWEJsTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JoWTNSMVlXeE1aVzVuZEdnZ1BTQjBlWEJsYjJZZ2RXNXBabTl5YlM1a1lYUmhJRDA5UFNBbmJuVnRZbVZ5SnlBL0lERWdPaUIxYm1sbWIzSnRMbVJoZEdFdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JiZEhsd1pTd2diR1Z1WjNSb1hTQTlJR0Z5ZEdsbVlXTjBMblZ1YVdadmNtMVdZWEpwWVdKc1pYTkpibVp2VzJsZE8xeHVJQ0FnSUNBZ0lDQnBaaUFvWVdOMGRXRnNWSGx3WlNBaFBUMGdkSGx3WlNCOGZDQmhZM1IxWVd4TVpXNW5kR2dnSVQwOUlHeGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdWVzVwWm05eWJTQjJZWEpwWVdKc1pTQWtlMmw5SUcxcGMyMWhkR05vT2lCbGVIQmxZM1FnZEhsd1pTQWtlM1I1Y0dWOUlIZHBkR2dnYzJsNlpTQWtlMnhsYm1kMGFIMHNJR2R2ZENCMGVYQmxJQ1I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR0ZqZEhWaGJGUjVjR1Y5SUhkcGRHZ2djMmw2WlNBa2UyRmpkSFZoYkV4bGJtZDBhSDBnYVc0Z2NISnZaM0poYlNCY0lpUjdZWEowYVdaaFkzUXVjSEp2WjNKaGJVbHVabTh1Ym1GdFpYMWNJaTVnS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUV4UFIxOUVSVUpWUnloY2JpQWdJQ0FnSUNBZ0oybHVabThuTEZ4dUlDQWdJQ0FnSUNBb0tTQTlQaUJnVzFCeWIyZHlZVzFOWVc1aFoyVnlYU0J5ZFc0Z1hDSWtlM0J5YjJkeVlXMHVibUZ0WlgxY0lpQW9hMlY1UFNSN2EyVjVmU2tnZDJsMGFDQWtlMjV2Y20xaGJHbDZaV1JFYVhOd1lYUmphRWR5YjNWd1d6QmRmWGdrZTF4dUlDQWdJQ0FnSUNBZ0lDQWdibTl5YldGc2FYcGxaRVJwYzNCaGRHTm9SM0p2ZFhCYk1WMTllQ1I3Ym05eWJXRnNhWHBsWkVScGMzQmhkR05vUjNKdmRYQmJNbDE5WUNrN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1eGRXVnllVlI1Y0dVZ0lUMDlJQ2R1YjI1bEp5QjhmQ0IwYUdsekxuTmxjM05wYjI1VGRHRjBkWE1nUFQwOUlDZGpZWEIwZFhKcGJtY25LU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQndaVzVrYVc1blMyVnlibVZzU1c1bWJ6b2dVR1Z1WkdsdVowdGxjbTVsYkVsdVptOGdQU0I3WEc0Z0lDQWdJQ0FnSUd0bGNtNWxiRWxrT2lCMGFHbHpMbU4xY25KbGJuUkxaWEp1Wld4SlpDRXNYRzRnSUNBZ0lDQWdJSEJ5YjJkeVlXMU9ZVzFsT2lCaGNuUnBabUZqZEM1d2NtOW5jbUZ0U1c1bWJ5NXVZVzFsTEZ4dUlDQWdJQ0FnSUNCcGJuQjFkRlJsYm5OdmNsWnBaWGR6TEZ4dUlDQWdJQ0FnSUNCdmRYUndkWFJVWlc1emIzSldhV1YzY3l4Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCMGFHbHpMbkJsYm1ScGJtZExaWEp1Wld4ekxuQjFjMmdvY0dWdVpHbHVaMHRsY201bGJFbHVabThwTzF4dVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1elpYTnphVzl1VTNSaGRIVnpJRDA5UFNBblkyRndkSFZ5YVc1bkp5a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpaWE56YVc5dVVHVnVaR2x1WjB0bGNtNWxiSE1nUFNCMGFHbHpMbU5oY0hSMWNtVmtVR1Z1WkdsdVowdGxjbTVsYkhNdVoyVjBLSFJvYVhNdVkzVnljbVZ1ZEZObGMzTnBiMjVKWkNFcE8xeHVJQ0FnSUNBZ0lDQnpaWE56YVc5dVVHVnVaR2x1WjB0bGNtNWxiSE1oTG5CMWMyZ29jR1Z1WkdsdVowdGxjbTVsYkVsdVptOHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11Y0hKdlozSmhiVTFoYm1GblpYSXVjblZ1S0dGeWRHbG1ZV04wTENCcGJuQjFkRVJoZEdGekxDQnZkWFJ3ZFhSRVlYUmhjeXdnYm05eWJXRnNhWHBsWkVScGMzQmhkR05vUjNKdmRYQXNJSFZ1YVdadmNtMUNkV1ptWlhKQ2FXNWthVzVuS1R0Y2JseHVJQ0FnSUZSU1FVTkZYMFpWVGtOZlJVNUVLSEJ5YjJkeVlXMHVibUZ0WlNrN1hHNGdJQ0FnY21WMGRYSnVJRzkxZEhCMWRGUmxibk52Y2xacFpYZHpPMXh1SUNCOVhHNWNiaUFnZFhCc2IyRmtLR2R3ZFVSaGRHRkpaRG9nYm5WdFltVnlMQ0JrWVhSaE9pQlZhVzUwT0VGeWNtRjVLVG9nZG05cFpDQjdYRzRnSUNBZ2RHaHBjeTVuY0hWRVlYUmhUV0Z1WVdkbGNpNTFjR3h2WVdRb1ozQjFSR0YwWVVsa0xDQmtZWFJoS1R0Y2JpQWdmVnh1WEc0Z0lHMWxiV053ZVNoemNtTTZJRzUxYldKbGNpd2daSE4wT2lCdWRXMWlaWElwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TG1kd2RVUmhkR0ZOWVc1aFoyVnlMbTFsYldOd2VTaHpjbU1zSUdSemRDazdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QmtiM2R1Ykc5aFpDaG5jSFZFWVhSaFNXUTZJRzUxYldKbGNpd2daMlYwVkdGeVoyVjBRblZtWm1WeU9pQW9LU0E5UGlCVmFXNTBPRUZ5Y21GNUtUb2dVSEp2YldselpUeDJiMmxrUGlCN1hHNGdJQ0FnTHk4Z2RHaGxJSFZ1WkdWeWJIbHBibWNnWW5WbVptVnlJRzFoZVNCaVpTQmphR0Z1WjJWa0lHRm1kR1Z5SUhSb1pTQmhjM2x1WXlCbWRXNWpkR2x2YmlCcGN5QmpZV3hzWldRdUlITnZJSGRsSUhWelpTQmhJR2RsZEhSbGNpQm1kVzVqZEdsdmJpQjBieUJ0WVd0bElITjFjbVZjYmlBZ0lDQXZMeUIwYUdVZ1luVm1abVZ5SUdseklIVndMWFJ2TFdSaGRHVXVYRzRnSUNBZ1lYZGhhWFFnZEdocGN5NW5jSFZFWVhSaFRXRnVZV2RsY2k1a2IzZHViRzloWkNobmNIVkVZWFJoU1dRc0lHZGxkRlJoY21kbGRFSjFabVpsY2lrN1hHNGdJSDFjYmx4dUlDQmhiR3h2WXloemFYcGxPaUJ1ZFcxaVpYSXBPaUJ1ZFcxaVpYSWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWR3ZFVSaGRHRk5ZVzVoWjJWeUxtTnlaV0YwWlNoemFYcGxLUzVwWkR0Y2JpQWdmVnh1WEc0Z0lHWnlaV1VvY0hSeU9pQnVkVzFpWlhJcE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtZHdkVVJoZEdGTllXNWhaMlZ5TG5KbGJHVmhjMlVvY0hSeUtUdGNiaUFnZlZ4dVhHNGdJR055WldGMFpVdGxjbTVsYkNoclpYSnVaV3hVZVhCbE9pQnpkSEpwYm1jc0lHdGxjbTVsYkVsa09pQnVkVzFpWlhJc0lHRjBkSEpwWW5WMFpUb2dkVzVyYm05M2Jpd2dhMlZ5Ym1Wc1RtRnRaVG9nYzNSeWFXNW5LVG9nZG05cFpDQjdYRzRnSUNBZ1kyOXVjM1FnYjNBZ1BTQlhSVUpIVUZWZlQxQmZVa1ZUVDB4V1JWOVNWVXhGVXk1blpYUW9hMlZ5Ym1Wc1ZIbHdaU2s3WEc0Z0lDQWdhV1lnS0NGdmNDa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQnJaWEp1Wld3Z2JtOTBJR2x0Y0d4bGJXVnVkR1ZrT2lBa2UydGxjbTVsYkZSNWNHVjlZQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzNRZ2EyVnlibVZzU1c1bWJ6b2dTMlZ5Ym1Wc1NXNW1ieUE5SUh0Y2JpQWdJQ0FnSUd0bGNtNWxiRlI1Y0dVc1hHNGdJQ0FnSUNCclpYSnVaV3hPWVcxbExGeHVJQ0FnSUNBZ2EyVnlibVZzUlc1MGNuazZJRzl3V3pCZExGeHVJQ0FnSUNBZ1lYUjBjbWxpZFhSbGN6b2dXMjl3V3pGZExDQmhkSFJ5YVdKMWRHVmRMRnh1SUNBZ0lIMDdYRzRnSUNBZ2RHaHBjeTVyWlhKdVpXeHpMbk5sZENoclpYSnVaV3hKWkN3Z2EyVnlibVZzU1c1bWJ5azdYRzRnSUgxY2JseHVJQ0J5Wld4bFlYTmxTMlZ5Ym1Wc0tHdGxjbTVsYkVsa09pQnVkVzFpWlhJcE9pQjJiMmxrSUh0Y2JpQWdJQ0JqYjI1emRDQndaWEp6YVhOMFpXNTBSR0YwWVNBOUlIUm9hWE11YTJWeWJtVnNVR1Z5YzJsemRHVnVkRVJoZEdFdVoyVjBLR3RsY201bGJFbGtLVHRjYmlBZ0lDQnBaaUFvY0dWeWMybHpkR1Z1ZEVSaGRHRXBJSHRjYmlBZ0lDQWdJR1p2Y2lBb1kyOXVjM1FnWkdGMFlTQnZaaUJ3WlhKemFYTjBaVzUwUkdGMFlTa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtZHdkVVJoZEdGTllXNWhaMlZ5TG5KbGJHVmhjMlVvWkdGMFlTNXBaQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IwYUdsekxtdGxjbTVsYkZCbGNuTnBjM1JsYm5SRVlYUmhMbVJsYkdWMFpTaHJaWEp1Wld4SlpDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RHaHBjeTVyWlhKdVpXeERkWE4wYjIxRVlYUmhMbVJsYkdWMFpTaHJaWEp1Wld4SlpDazdYRzRnSUNBZ2RHaHBjeTVyWlhKdVpXeHpMbVJsYkdWMFpTaHJaWEp1Wld4SlpDazdYRzRnSUgxY2JseHVJQ0JqYjIxd2RYUmxTMlZ5Ym1Wc0tHdGxjbTVsYkVsa09pQnVkVzFpWlhJc0lHTnZiblJsZUhRNklFTnZiWEIxZEdWRGIyNTBaWGgwTENCbGNuSnZjbk02SUVGeWNtRjVQRkJ5YjIxcGMyVThjM1J5YVc1bmZHNTFiR3crUGlrNklHNTFiV0psY2lCN1hHNGdJQ0FnWTI5dWMzUWdhMlZ5Ym1Wc0lEMGdkR2hwY3k1clpYSnVaV3h6TG1kbGRDaHJaWEp1Wld4SlpDazdYRzRnSUNBZ2FXWWdLQ0ZyWlhKdVpXd3BJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdhMlZ5Ym1Wc0lHNXZkQ0JqY21WaGRHVmtPaUFrZTJ0bGNtNWxiRWxrZldBcE8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQnJaWEp1Wld4VWVYQmxJRDBnYTJWeWJtVnNMbXRsY201bGJGUjVjR1U3WEc0Z0lDQWdZMjl1YzNRZ2EyVnlibVZzVG1GdFpTQTlJR3RsY201bGJDNXJaWEp1Wld4T1lXMWxPMXh1SUNBZ0lHTnZibk4wSUd0bGNtNWxiRVZ1ZEhKNUlEMGdhMlZ5Ym1Wc0xtdGxjbTVsYkVWdWRISjVPMXh1SUNBZ0lHTnZibk4wSUdGMGRISnBZblYwWlhNZ1BTQnJaWEp1Wld3dVlYUjBjbWxpZFhSbGN6dGNiaUFnSUNCcFppQW9kR2hwY3k1amRYSnlaVzUwUzJWeWJtVnNTV1FnSVQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnYTJWeWJtVnNJRndpV3lSN2EyVnlibVZzVkhsd1pYMWRJQ1I3YTJWeWJtVnNUbUZ0WlgxY0lpQnBjeUJ1YjNRZ1lXeHNiM2RsWkNCMGJ5QmlaU0JqWVd4c1pXUWdjbVZqZFhKemFYWmxiSGxnS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1amRYSnlaVzUwUzJWeWJtVnNTV1FnUFNCclpYSnVaV3hKWkR0Y2JseHVJQ0FnSUM4dklIQmhjbk5sSUdGMGRISnBZblYwWlhNZ2FXWWdibVZqWlhOellYSjVYRzRnSUNBZ2FXWWdLR0YwZEhKcFluVjBaWE5iTUYwcElIdGNiaUFnSUNBZ0lHRjBkSEpwWW5WMFpYTmJNVjBnUFNCaGRIUnlhV0oxZEdWeld6QmRLR0YwZEhKcFluVjBaWE5iTVYwcE8xeHVJQ0FnSUNBZ1lYUjBjbWxpZFhSbGMxc3dYU0E5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JNVDBkZlJFVkNWVWNvSjJsdVptOG5MQ0FvS1NBOVBpQmdXMWRsWWtkUVZWMGdVM1JoY25RZ2RHOGdjblZ1SUd0bGNtNWxiQ0JjSWxza2UydGxjbTVsYkZSNWNHVjlYU0FrZTJ0bGNtNWxiRTVoYldWOVhDSXVMaTVnS1R0Y2JseHVJQ0FnSUdOdmJuTjBJSFZ6WlVWeWNtOXlVMk52Y0dVZ1BTQjBhR2x6TG1WdWRpNWtaV0oxWnp0Y2JseHVJQ0FnSUhSb2FYTXVkR1Z0Y0c5eVlYSjVSR0YwWVNBOUlGdGRPMXh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0JwWmlBb2RYTmxSWEp5YjNKVFkyOXdaU2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbVJsZG1salpTNXdkWE5vUlhKeWIzSlRZMjl3WlNnbmRtRnNhV1JoZEdsdmJpY3BPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JyWlhKdVpXeEZiblJ5ZVNoamIyNTBaWGgwTENCaGRIUnlhV0oxZEdWeld6RmRLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQXdPeUFnTHk4Z1QxSlVYMDlMWEc0Z0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnWlhKeWIzSnpMbkIxYzJnb1VISnZiV2x6WlM1eVpYTnZiSFpsS0dCYlYyVmlSMUJWWFNCTFpYSnVaV3dnWENKYkpIdHJaWEp1Wld4VWVYQmxmVjBnSkh0clpYSnVaV3hPWVcxbGZWd2lJR1poYVd4bFpDNGdKSHRsZldBcEtUdGNiaUFnSUNBZ0lISmxkSFZ5YmlBeE95QWdMeThnVDFKVVgwWkJTVXhjYmlBZ0lDQjlJR1pwYm1Gc2JIa2dlMXh1SUNBZ0lDQWdhV1lnS0hWelpVVnljbTl5VTJOdmNHVXBJSHRjYmlBZ0lDQWdJQ0FnWlhKeWIzSnpMbkIxYzJnb2RHaHBjeTVrWlhacFkyVXVjRzl3UlhKeWIzSlRZMjl3WlNncExuUm9aVzRvWEc0Z0lDQWdJQ0FnSUNBZ0lDQmxjbklnUFQ0Z1pYSnlJRDhnWUVkUVZTQjJZV3hwWkdGMGFXOXVJR1Z5Y205eUlHWnZjaUJyWlhKdVpXd2dYQ0piSkh0clpYSnVaV3hVZVhCbGZWMGdKSHRyWlhKdVpXeE9ZVzFsZlZ3aU9pQWtlMlZ5Y2k1dFpYTnpZV2RsZldBZ09pQnVkV3hzS1NrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHWnZjaUFvWTI5dWMzUWdaR0YwWVNCdlppQjBhR2x6TG5SbGJYQnZjbUZ5ZVVSaGRHRXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NW5jSFZFWVhSaFRXRnVZV2RsY2k1eVpXeGxZWE5sS0dSaGRHRXVhV1FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NTBaVzF3YjNKaGNubEVZWFJoSUQwZ1cxMDdYRzRnSUNBZ0lDQjBhR2x6TG1OMWNuSmxiblJMWlhKdVpXeEpaQ0E5SUc1MWJHdzdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdMeThnSTNKbFoybHZiaUJsZUhSbGNtNWhiQ0JpZFdabVpYSmNiaUFnY21WbmFYTjBaWEpDZFdabVpYSW9jMlZ6YzJsdmJrbGtPaUJ1ZFcxaVpYSXNJR2x1WkdWNE9pQnVkVzFpWlhJc0lHSjFabVpsY2pvZ1IxQlZRblZtWm1WeUxDQnphWHBsT2lCdWRXMWlaWElwT2lCdWRXMWlaWElnZTF4dUlDQWdJR3hsZENCelpYTnphVzl1U1c1d2RYUlBkWFJ3ZFhSTllYQndhVzVuSUQwZ2RHaHBjeTV6WlhOemFXOXVSWGgwWlhKdVlXeEVZWFJoVFdGd2NHbHVaeTVuWlhRb2MyVnpjMmx2Ymtsa0tUdGNiaUFnSUNCcFppQW9JWE5sYzNOcGIyNUpibkIxZEU5MWRIQjFkRTFoY0hCcGJtY3BJSHRjYmlBZ0lDQWdJSE5sYzNOcGIyNUpibkIxZEU5MWRIQjFkRTFoY0hCcGJtY2dQU0J1WlhjZ1RXRndLQ2s3WEc0Z0lDQWdJQ0IwYUdsekxuTmxjM05wYjI1RmVIUmxjbTVoYkVSaGRHRk5ZWEJ3YVc1bkxuTmxkQ2h6WlhOemFXOXVTV1FzSUhObGMzTnBiMjVKYm5CMWRFOTFkSEIxZEUxaGNIQnBibWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElIQnlaWFpwYjNWelFuVm1abVZ5SUQwZ2MyVnpjMmx2YmtsdWNIVjBUM1YwY0hWMFRXRndjR2x1Wnk1blpYUW9hVzVrWlhncE8xeHVJQ0FnSUdOdmJuTjBJR2xrSUQwZ2RHaHBjeTVuY0hWRVlYUmhUV0Z1WVdkbGNpNXlaV2RwYzNSbGNrVjRkR1Z5Ym1Gc1FuVm1abVZ5S0dKMVptWmxjaXdnYzJsNlpTd2djSEpsZG1sdmRYTkNkV1ptWlhJL0xsc3hYU2s3WEc0Z0lDQWdjMlZ6YzJsdmJrbHVjSFYwVDNWMGNIVjBUV0Z3Y0dsdVp5NXpaWFFvYVc1a1pYZ3NJRnRwWkN3Z1luVm1abVZ5WFNrN1hHNGdJQ0FnY21WMGRYSnVJR2xrTzF4dUlDQjlYRzRnSUhWdWNtVm5hWE4wWlhKQ2RXWm1aWEp6S0hObGMzTnBiMjVKWkRvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdZMjl1YzNRZ2MyVnpjMmx2YmtsdWNIVjBUM1YwY0hWMFRXRndjR2x1WnlBOUlIUm9hWE11YzJWemMybHZia1Y0ZEdWeWJtRnNSR0YwWVUxaGNIQnBibWN1WjJWMEtITmxjM05wYjI1SlpDazdYRzRnSUNBZ2FXWWdLSE5sYzNOcGIyNUpibkIxZEU5MWRIQjFkRTFoY0hCcGJtY3BJSHRjYmlBZ0lDQWdJSE5sYzNOcGIyNUpibkIxZEU5MWRIQjFkRTFoY0hCcGJtY3VabTl5UldGamFDaGlkV1ptWlhKSmJtWnZJRDArSUhSb2FYTXVaM0IxUkdGMFlVMWhibUZuWlhJdWRXNXlaV2RwYzNSbGNrVjRkR1Z5Ym1Gc1FuVm1abVZ5S0dKMVptWmxja2x1Wm05Yk1WMHBLVHRjYmlBZ0lDQWdJSFJvYVhNdWMyVnpjMmx2YmtWNGRHVnlibUZzUkdGMFlVMWhjSEJwYm1jdVpHVnNaWFJsS0hObGMzTnBiMjVKWkNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUdkbGRFSjFabVpsY2lobmNIVkVZWFJoU1dRNklHNTFiV0psY2lrNklFZFFWVUoxWm1abGNpQjdYRzRnSUNBZ1kyOXVjM1FnWjNCMVJHRjBZU0E5SUhSb2FYTXVaM0IxUkdGMFlVMWhibUZuWlhJdVoyVjBLR2R3ZFVSaGRHRkpaQ2s3WEc0Z0lDQWdhV1lnS0NGbmNIVkVZWFJoS1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUc1dklFZFFWU0JrWVhSaElHWnZjaUJpZFdabVpYSTZJQ1I3WjNCMVJHRjBZVWxrZldBcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdaM0IxUkdGMFlTNWlkV1ptWlhJN1hHNGdJSDFjYmlBZ1kzSmxZWFJsUkc5M2JteHZZV1JsY2lobmNIVkNkV1ptWlhJNklFZFFWVUoxWm1abGNpd2djMmw2WlRvZ2JuVnRZbVZ5TENCMGVYQmxPaUJVWlc1emIzSXVSM0IxUW5WbVptVnlSR0YwWVZSNWNHVnpLVHBjYmlBZ0lDQWdJQ2dwSUQwK0lGQnliMjFwYzJVOFZHVnVjMjl5TGtSaGRHRlVlWEJsUGlCN1hHNGdJQ0FnY21WMGRYSnVJR0Z6ZVc1aklDZ3BJRDArSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JoZEdFZ1BTQmhkMkZwZENCa2IzZHViRzloWkVkd2RVUmhkR0VvZEdocGN5d2daM0IxUW5WbVptVnlMQ0J6YVhwbEtUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCamNtVmhkR1ZXYVdWM0tHUmhkR0V1WW5WbVptVnlMQ0IwZVhCbEtUdGNiaUFnSUNCOU8xeHVJQ0I5WEc0Z0lDOHZJQ05sYm1SeVpXZHBiMjVjYmlBZ2QzSnBkR1ZVYVcxbGMzUmhiWEFvYVc1a1pYZzZJRzUxYldKbGNpazZJSFp2YVdRZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG5GMVpYSjVWSGx3WlNBaFBUMGdKMmx1YzJsa1pTMXdZWE56WlhNbktTQjdYRzRnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUVCMGVYQmxjMk55YVhCMExXVnpiR2x1ZEM5dWJ5MWxlSEJzYVdOcGRDMWhibmxjYmlBZ0lDQW9kR2hwY3k1amIyMXdkWFJsVUdGemMwVnVZMjlrWlhJZ1lYTWdZVzU1S1M1M2NtbDBaVlJwYldWemRHRnRjQ2gwYUdsekxuRjFaWEo1VTJWMExDQnBibVJsZUNrN1hHNGdJSDFjYmlBZ2MyVjBVWFZsY25sVWVYQmxLQ2s2SUhadmFXUWdlMXh1SUNBZ0lIUm9hWE11Y1hWbGNubFVlWEJsSUQwZ0oyNXZibVVuTzF4dUlDQWdJR2xtSUNoMGFHbHpMbVZ1ZGk1M1pXSm5jSFV1Y0hKdlptbHNhVzVuUHk1dGIyUmxJRDA5UFNBblpHVm1ZWFZzZENjZ2ZIeGNiaUFnSUNBZ0lDQWdLSFI1Y0dWdlppQjBhR2x6TG1WdWRpNTBjbUZqWlNBOVBUMGdKM1Z1WkdWbWFXNWxaQ2NnUHlCMGFHbHpMbVZ1ZGk1M1lYTnRMblJ5WVdObElEb2dkR2hwY3k1bGJuWXVkSEpoWTJVcEtTQjdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NWtaWFpwWTJVdVptVmhkSFZ5WlhNdWFHRnpLQ2RqYUhKdmJXbDFiUzFsZUhCbGNtbHRaVzUwWVd3dGRHbHRaWE4wWVcxd0xYRjFaWEo1TFdsdWMybGtaUzF3WVhOelpYTW5LU2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbkYxWlhKNVZIbHdaU0E5SUNkcGJuTnBaR1V0Y0dGemMyVnpKenRjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvZEdocGN5NWtaWFpwWTJVdVptVmhkSFZ5WlhNdWFHRnpLQ2QwYVcxbGMzUmhiWEF0Y1hWbGNua25LU2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbkYxWlhKNVZIbHdaU0E5SUNkaGRDMXdZWE56WlhNbk8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NXhkV1Z5ZVZSNWNHVWdJVDA5SUNkdWIyNWxKeUFtSmlCMGVYQmxiMllnZEdocGN5NXhkV1Z5ZVZObGRDQTlQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1eGRXVnllVk5sZENBOUlIUm9hWE11WkdWMmFXTmxMbU55WldGMFpWRjFaWEo1VTJWMEtIdGNiaUFnSUNBZ0lDQWdJQ0IwZVhCbE9pQW5kR2x0WlhOMFlXMXdKeXhjYmlBZ0lDQWdJQ0FnSUNCamIzVnVkRG9nZEdocGN5NXRZWGhFYVhOd1lYUmphRTUxYldKbGNpQXFJRElzWEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5GMVpYSjVVbVZ6YjJ4MlpVSjFabVpsY2lBOUlIUm9hWE11WkdWMmFXTmxMbU55WldGMFpVSjFabVpsY2loY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0J1YnkxaWFYUjNhWE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdjMmw2WlRvZ2RHaHBjeTV0WVhoRWFYTndZWFJqYUU1MWJXSmxjaUFxSURJZ0tpQTRMQ0IxYzJGblpUb2dSMUJWUW5WbVptVnlWWE5oWjJVdVEwOVFXVjlUVWtNZ2ZDQkhVRlZDZFdabVpYSlZjMkZuWlM1UlZVVlNXVjlTUlZOUFRGWkZmU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWTJGd2RIVnlaVUpsWjJsdUtDazZJSFp2YVdRZ2UxeHVJQ0FnSUV4UFIxOUVSVUpWUnlnbmFXNW1ieWNzSUNkallYQjBkWEpsUW1WbmFXNG5LVHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVZMkZ3ZEhWeVpXUkRiMjF0WVc1a1RHbHpkQzVuWlhRb2RHaHBjeTVqZFhKeVpXNTBVMlZ6YzJsdmJrbGtJU2twSUh0Y2JpQWdJQ0FnSUhSb2FYTXVZMkZ3ZEhWeVpXUkRiMjF0WVc1a1RHbHpkQzV6WlhRb2RHaHBjeTVqZFhKeVpXNTBVMlZ6YzJsdmJrbGtJU3dnVzEwcE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb0lYUm9hWE11WTJGd2RIVnlaV1JRWlc1a2FXNW5TMlZ5Ym1Wc2N5NW5aWFFvZEdocGN5NWpkWEp5Wlc1MFUyVnpjMmx2Ymtsa0lTa3BJSHRjYmlBZ0lDQWdJSFJvYVhNdVkyRndkSFZ5WldSUVpXNWthVzVuUzJWeWJtVnNjeTV6WlhRb2RHaHBjeTVqZFhKeVpXNTBVMlZ6YzJsdmJrbGtJU3dnVzEwcE8xeHVJQ0FnSUgxY2JpQWdJQ0F2THlCbWJIVnphQ0IwYUdVZ2JHVm1kQ0JqYjIxdFlXNWtjeUJpWldadmNtVWdkMlVnWTJoaGJtZGxJSFJvWlNCemRHRjBkWE11WEc0Z0lDQWdkR2hwY3k1bWJIVnphQ2dwTzF4dUlDQWdJSFJvYVhNdWMyVnpjMmx2YmxOMFlYUjFjeUE5SUNkallYQjBkWEpwYm1jbk8xeHVJQ0I5WEc0Z0lHTmhjSFIxY21WRmJtUW9LVG9nZG05cFpDQjdYRzRnSUNBZ1RFOUhYMFJGUWxWSEtDZHBibVp2Snl3Z0oyTmhjSFIxY21WRmJtUW5LVHRjYmlBZ0lDQXZMeUJtYkhWemFDQjBhR1VnYkdWbWRDQmpiMjF0WVc1a2N5QmlaV1p2Y21VZ2QyVWdZMmhoYm1kbElIUm9aU0J6ZEdGMGRYTXVYRzRnSUNBZ2RHaHBjeTVtYkhWemFDZ3BPMXh1SUNBZ0lIUm9hWE11YzJWemMybHZibE4wWVhSMWN5QTlJQ2RrWldaaGRXeDBKenRjYmlBZ2ZWeHVJQ0J5WlhCc1lYa29LVG9nZG05cFpDQjdYRzRnSUNBZ1RFOUhYMFJGUWxWSEtDZHBibVp2Snl3Z0ozSmxjR3hoZVNjcE8xeHVJQ0FnSUhSb2FYTXVjMlZ6YzJsdmJsTjBZWFIxY3lBOUlDZHlaWEJzWVhscGJtY25PMXh1SUNBZ0lHTnZibk4wSUhObGMzTnBiMjVEYjIxdFlXNWtUR2x6ZENBOUlIUm9hWE11WTJGd2RIVnlaV1JEYjIxdFlXNWtUR2x6ZEM1blpYUW9kR2hwY3k1amRYSnlaVzUwVTJWemMybHZia2xrSVNrN1hHNGdJQ0FnWTI5dWMzUWdjMlZ6YzJsdmJsQmxibVJwYm1kTFpYSnVaV3h6SUQwZ2RHaHBjeTVqWVhCMGRYSmxaRkJsYm1ScGJtZExaWEp1Wld4ekxtZGxkQ2gwYUdsekxtTjFjbkpsYm5SVFpYTnphVzl1U1dRaEtUdGNiaUFnSUNCamIyNXpkQ0JzWlc1bmRHZ2dQU0J6WlhOemFXOXVRMjl0YldGdVpFeHBjM1FoTG14bGJtZDBhRHRjYmlBZ0lDQjBhR2x6TG5CbGJtUnBibWRMWlhKdVpXeHpJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCc1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1kyOXRjSFYwWlZCaGMzTkZibU52WkdWeUlEMGdkR2hwY3k1blpYUkRiMjF3ZFhSbFVHRnpjMFZ1WTI5a1pYSW9LVHRjYmlBZ0lDQWdJR052Ym5OMElHTnZiVzFoYm1RZ1BTQnpaWE56YVc5dVEyOXRiV0Z1WkV4cGMzUWhXMmxkTzF4dUlDQWdJQ0FnZEdocGN5NTNjbWwwWlZScGJXVnpkR0Z0Y0NoMGFHbHpMbkJsYm1ScGJtZEVhWE53WVhSamFFNTFiV0psY2lBcUlESXBPMXh1SUNBZ0lDQWdZMjl0Y0hWMFpWQmhjM05GYm1OdlpHVnlMbk5sZEZCcGNHVnNhVzVsS0dOdmJXMWhibVF1WTI5dGNIVjBaVkJwY0dWc2FXNWxLVHRjYmlBZ0lDQWdJR052YlhCMWRHVlFZWE56Ulc1amIyUmxjaTV6WlhSQ2FXNWtSM0p2ZFhBb01Dd2dZMjl0YldGdVpDNWlhVzVrUjNKdmRYQXBPMXh1SUNBZ0lDQWdZMjl0Y0hWMFpWQmhjM05GYm1OdlpHVnlMbVJwYzNCaGRHTm9WMjl5YTJkeWIzVndjeWd1TGk1amIyMXRZVzVrTG1ScGMzQmhkR05vUjNKdmRYQXBPMXh1SUNBZ0lDQWdkR2hwY3k1M2NtbDBaVlJwYldWemRHRnRjQ2gwYUdsekxuQmxibVJwYm1kRWFYTndZWFJqYUU1MWJXSmxjaUFxSURJZ0t5QXhLVHRjYmlBZ0lDQWdJSFJvYVhNdWNHVnVaR2x1WjBScGMzQmhkR05vVG5WdFltVnlLeXM3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTV4ZFdWeWVWUjVjR1VnSVQwOUlDZHViMjVsSnlrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CbGJtUnBibWRMWlhKdVpXeHpMbkIxYzJnb2MyVnpjMmx2YmxCbGJtUnBibWRMWlhKdVpXeHpJVnRwWFNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1d1pXNWthVzVuUkdsemNHRjBZMmhPZFcxaVpYSWdQajBnZEdocGN5NXRZWGhFYVhOd1lYUmphRTUxYldKbGNpQjhmQ0IwYUdsekxuRjFaWEo1Vkhsd1pTQTlQVDBnSjJGMExYQmhjM05sY3ljcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1bGJtUkRiMjF3ZFhSbFVHRnpjeWdwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11Y0dWdVpHbHVaMFJwYzNCaGRHTm9UblZ0WW1WeUlENDlJSFJvYVhNdWJXRjRSR2x6Y0dGMFkyaE9kVzFpWlhJcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1bWJIVnphQ2dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQXZMeUJtYkhWemFDQjBhR1VnYkdWbWRDQmpiMjF0WVc1a2N5QmlaV1p2Y21VZ2QyVWdZMmhoYm1kbElIUm9aU0J6ZEdGMGRYTXVYRzRnSUNBZ2RHaHBjeTVtYkhWemFDZ3BPMXh1SUNBZ0lIUm9hWE11YzJWemMybHZibE4wWVhSMWN5QTlJQ2RrWldaaGRXeDBKenRjYmlBZ2ZWeHVYRzRnSUc5dVVtVnNaV0Z6WlZObGMzTnBiMjRvYzJWemMybHZia2xrT2lCdWRXMWlaWElwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TG5WdWNtVm5hWE4wWlhKQ2RXWm1aWEp6S0hObGMzTnBiMjVKWkNrN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WTJGd2RIVnlaV1JEYjIxdFlXNWtUR2x6ZEM1b1lYTW9jMlZ6YzJsdmJrbGtLU2tnZTF4dUlDQWdJQ0FnZEdocGN5NWpZWEIwZFhKbFpFTnZiVzFoYm1STWFYTjBMbVJsYkdWMFpTaHpaWE56YVc5dVNXUXBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kR2hwY3k1allYQjBkWEpsWkZCbGJtUnBibWRMWlhKdVpXeHpMbWhoY3loelpYTnphVzl1U1dRcEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG1OaGNIUjFjbVZrVUdWdVpHbHVaMHRsY201bGJITXVaR1ZzWlhSbEtITmxjM05wYjI1SlpDazdYRzRnSUNBZ2ZWeHVJQ0FnSUhSb2FYTXVaM0IxUkdGMFlVMWhibUZuWlhJdWIyNVNaV3hsWVhObFUyVnpjMmx2YmloelpYTnphVzl1U1dRcE8xeHVJQ0I5WEc1Y2JpQWdiMjVTZFc1VGRHRnlkQ2h6WlhOemFXOXVTV1E2SUc1MWJXSmxjaWs2SUhadmFXUWdlMXh1SUNBZ0lIUm9hWE11WTNWeWNtVnVkRk5sYzNOcGIyNUpaQ0E5SUhObGMzTnBiMjVKWkR0Y2JpQWdJQ0IwYUdsekxuTmxkRkYxWlhKNVZIbHdaU2dwTzF4dUlDQjlYRzU5WEc0aUxDQWlMeThnUTI5d2VYSnBaMmgwSUNoaktTQk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNHZMeUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnVFVsVUlFeHBZMlZ1YzJVdVhHNWNibWx0Y0c5eWRDQjdSVzUyZlNCbWNtOXRJQ2R2Ym01NGNuVnVkR2x0WlMxamIyMXRiMjRuTzF4dVhHNXBiWEJ2Y25RZ2UwOXlkRmRoYzIxTmIyUjFiR1Y5SUdaeWIyMGdKeTR1TDJKcGJtUnBibWN2YjNKMExYZGhjMjBuTzF4dWFXMXdiM0owSUh0RVlYUmhWSGx3WlN3Z1oyVjBWR1Z1YzI5eVJXeGxiV1Z1ZEZOcGVtVjlJR1p5YjIwZ0p5NHVMM2RoYzIwdFkyOXRiVzl1Snp0Y2JseHVhVzF3YjNKMElIdFhaV0pIY0hWQ1lXTnJaVzVrZlNCbWNtOXRJQ2N1TDJKaFkydGxibVF0ZDJWaVozQjFKenRjYm1sdGNHOXlkQ0I3VEU5SFgwUkZRbFZIZlNCbWNtOXRJQ2N1TDJ4dlp5YzdYRzVwYlhCdmNuUWdlMVJsYm5OdmNsWnBaWGQ5SUdaeWIyMGdKeTR2ZEdWdWMyOXlMWFpwWlhjbk8xeHVhVzF3YjNKMElIdFRhR0Z3WlZWMGFXeDlJR1p5YjIwZ0p5NHZkWFJwYkNjN1hHNXBiWEJ2Y25RZ2UwRmtZWEIwWlhKSmJtWnZMQ0JEYjIxd2RYUmxRMjl1ZEdWNGRDd2dRMjl0Y0hWMFpVTnZiblJsZUhSSmJuQjFkSE5QZFhSd2RYUnpUV0Z3Y0dsdVp5d2dVSEp2WjNKaGJVbHVabTk5SUdaeWIyMGdKeTR2ZDJWaVozQjFMM1I1Y0dWekp6dGNibHh1THlvZ1pYTnNhVzUwTFdScGMyRmliR1VnYm04dFltbDBkMmx6WlNBcUwxeHVYRzVqYkdGemN5QlVaVzV6YjNKV2FXVjNTVzF3YkNCcGJYQnNaVzFsYm5SeklGUmxibk52Y2xacFpYY2dlMXh1SUNCamIyNXpkSEoxWTNSdmNpaGNiaUFnSUNBZ0lIQnlhWFpoZEdVZ2JXOWtkV3hsT2lCUGNuUlhZWE50VFc5a2RXeGxMQ0J3ZFdKc2FXTWdjbVZoWkc5dWJIa2daR0YwWVZSNWNHVTZJRzUxYldKbGNpd2djSFZpYkdsaklISmxZV1J2Ym14NUlHUmhkR0U2SUc1MWJXSmxjaXhjYmlBZ0lDQWdJSEIxWW14cFl5QnlaV0ZrYjI1c2VTQmthVzF6T2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFNrZ2UzMWNibHh1SUNCblpYUkdiRzloZERNeVFYSnlZWGtvS1RvZ1JteHZZWFF6TWtGeWNtRjVJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWtZWFJoVkhsd1pTQWhQVDBnUkdGMFlWUjVjR1V1Wm14dllYUXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25TVzUyWVd4cFpDQmtZWFJoSUhSNWNHVW5LVHRjYmlBZ0lDQjlYRzRnSUNBZ1kyOXVjM1FnWld4bGJXVnVkRU52ZFc1MElEMGdVMmhoY0dWVmRHbHNMbk5wZW1Vb2RHaHBjeTVrYVcxektUdGNiaUFnSUNCeVpYUjFjbTRnWld4bGJXVnVkRU52ZFc1MElEMDlQU0F3SUQ4Z2JtVjNJRVpzYjJGME16SkJjbkpoZVNncElEcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JtVjNJRVpzYjJGME16SkJjbkpoZVNoMGFHbHpMbTF2WkhWc1pTNUlSVUZRT0M1aWRXWm1aWElzSUhSb2FYTXVaR0YwWVN3Z1pXeGxiV1Z1ZEVOdmRXNTBLVHRjYmlBZ2ZWeHVYRzRnSUdkbGRFSnBaMGx1ZERZMFFYSnlZWGtvS1RvZ1FtbG5TVzUwTmpSQmNuSmhlU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVaR0YwWVZSNWNHVWdJVDA5SUVSaGRHRlVlWEJsTG1sdWREWTBLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMGx1ZG1Gc2FXUWdaR0YwWVNCMGVYQmxKeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUdWc1pXMWxiblJEYjNWdWRDQTlJRk5vWVhCbFZYUnBiQzV6YVhwbEtIUm9hWE11WkdsdGN5azdYRzRnSUNBZ2NtVjBkWEp1SUdWc1pXMWxiblJEYjNWdWRDQTlQVDBnTUNBL0lHNWxkeUJDYVdkSmJuUTJORUZ5Y21GNUtDa2dPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGNnUW1sblNXNTBOalJCY25KaGVTaDBhR2x6TG0xdlpIVnNaUzVJUlVGUU9DNWlkV1ptWlhJc0lIUm9hWE11WkdGMFlTd2daV3hsYldWdWRFTnZkVzUwS1R0Y2JpQWdmVnh1WEc0Z0lHZGxkRWx1ZERNeVFYSnlZWGtvS1RvZ1NXNTBNekpCY25KaGVTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVpHRjBZVlI1Y0dVZ0lUMDlJRVJoZEdGVWVYQmxMbWx1ZERNeUtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owbHVkbUZzYVdRZ1pHRjBZU0IwZVhCbEp5azdYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuTjBJR1ZzWlcxbGJuUkRiM1Z1ZENBOUlGTm9ZWEJsVlhScGJDNXphWHBsS0hSb2FYTXVaR2x0Y3lrN1hHNGdJQ0FnY21WMGRYSnVJR1ZzWlcxbGJuUkRiM1Z1ZENBOVBUMGdNQ0EvSUc1bGR5QkpiblF6TWtGeWNtRjVLQ2tnT2lCdVpYY2dTVzUwTXpKQmNuSmhlU2gwYUdsekxtMXZaSFZzWlM1SVJVRlFPQzVpZFdabVpYSXNJSFJvYVhNdVpHRjBZU3dnWld4bGJXVnVkRU52ZFc1MEtUdGNiaUFnZlZ4dVhHNGdJSEpsYzJoaGNHVW9ibVYzUkdsdGN6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJVWlc1emIzSldhV1YzSUh0Y2JpQWdJQ0JwWmlBb1UyaGhjR1ZWZEdsc0xuTnBlbVVvYm1WM1JHbHRjeWtnSVQwOUlGTm9ZWEJsVlhScGJDNXphWHBsS0hSb2FYTXVaR2x0Y3lrcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblNXNTJZV3hwWkNCdVpYY2djMmhoY0dVbktUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRzVsZHlCVVpXNXpiM0pXYVdWM1NXMXdiQ2gwYUdsekxtMXZaSFZzWlN3Z2RHaHBjeTVrWVhSaFZIbHdaU3dnZEdocGN5NWtZWFJoTENCdVpYZEVhVzF6S1R0Y2JpQWdmVnh1ZlZ4dVhHNWpiR0Z6Y3lCRGIyMXdkWFJsUTI5dWRHVjRkRWx0Y0d3Z2FXMXdiR1Z0Wlc1MGN5QkRiMjF3ZFhSbFEyOXVkR1Y0ZENCN1hHNGdJSEpsWVdSdmJteDVJR0ZrWVhCMFpYSkpibVp2T2lCQlpHRndkR1Z5U1c1bWJ6dGNiaUFnY21WaFpHOXViSGtnYjNCTFpYSnVaV3hEYjI1MFpYaDBPaUJ1ZFcxaVpYSTdYRzRnSUhKbFlXUnZibXg1SUdsdWNIVjBjem9nY21WaFpHOXViSGtnVkdWdWMyOXlWbWxsZDF0ZE8xeHVJQ0J5WldGa2IyNXNlU0J2ZFhSd2RYUkRiM1Z1ZERvZ2JuVnRZbVZ5TzF4dUlDQm5aWFFnYTJWeWJtVnNRM1Z6ZEc5dFJHRjBZU2dwT2lCN1cydGxlVG9nYzNSeWFXNW5YVG9nZFc1cmJtOTNibjBnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1KaFkydGxibVF1WTNWeWNtVnVkRXRsY201bGJFTjFjM1J2YlVSaGRHRTdYRzRnSUgxY2JpQWdaMlYwSUdOMWMzUnZiVVJoZEdGQ2RXWm1aWElvS1RvZ1ZXbHVkRGhCY25KaGVTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXViVzlrZFd4bExraEZRVkJWT0M1emRXSmhjbkpoZVNoMGFHbHpMbU4xYzNSdmJVUmhkR0ZQWm1aelpYUXNJSFJvYVhNdVkzVnpkRzl0UkdGMFlVOW1abk5sZENBcklIUm9hWE11WTNWemRHOXRSR0YwWVZOcGVtVXBPMXh1SUNCOVhHNGdJSEJ5YVhaaGRHVWdZM1Z6ZEc5dFJHRjBZVTltWm5ObGRDQTlJREE3WEc0Z0lIQnlhWFpoZEdVZ1kzVnpkRzl0UkdGMFlWTnBlbVVnUFNBd08xeHVJQ0JqYjI1emRISjFZM1J2Y2lod2NtbDJZWFJsSUcxdlpIVnNaVG9nVDNKMFYyRnpiVTF2WkhWc1pTd2djSEpwZG1GMFpTQmlZV05yWlc1a09pQlhaV0pIY0hWQ1lXTnJaVzVrTENCamIyNTBaWGgwUkdGMFlVOW1abk5sZERvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnZEdocGN5NWhaR0Z3ZEdWeVNXNW1ieUE5SUdKaFkydGxibVF1WVdSaGNIUmxja2x1Wm04N1hHNGdJQ0FnWTI5dWMzUWdhR1ZoY0ZVek1pQTlJRzF2WkhWc1pTNUlSVUZRVlRNeU8xeHVYRzRnSUNBZ0x5OGdaWGgwY21GamRDQmpiMjUwWlhoMElHUmhkR0ZjYmlBZ0lDQnNaWFFnWkdGMFlVbHVaR1Y0SUQwZ0tHTnZiblJsZUhSRVlYUmhUMlptYzJWMElENCtQaUF5S1R0Y2JpQWdJQ0IwYUdsekxtOXdTMlZ5Ym1Wc1EyOXVkR1Y0ZENBOUlHaGxZWEJWTXpKYlpHRjBZVWx1WkdWNEt5dGRPMXh1SUNBZ0lHTnZibk4wSUdsdWNIVjBRMjkxYm5RZ1BTQm9aV0Z3VlRNeVcyUmhkR0ZKYm1SbGVDc3JYVHRjYmlBZ0lDQjBhR2x6TG05MWRIQjFkRU52ZFc1MElEMGdhR1ZoY0ZVek1sdGtZWFJoU1c1a1pYZ3JLMTA3WEc0Z0lDQWdkR2hwY3k1amRYTjBiMjFFWVhSaFQyWm1jMlYwSUQwZ2FHVmhjRlV6TWx0a1lYUmhTVzVrWlhncksxMDdYRzRnSUNBZ2RHaHBjeTVqZFhOMGIyMUVZWFJoVTJsNlpTQTlJR2hsWVhCVk16SmJaR0YwWVVsdVpHVjRLeXRkTzF4dVhHNGdJQ0FnWTI5dWMzUWdhVzV3ZFhSek9pQlVaVzV6YjNKV2FXVjNXMTBnUFNCYlhUdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHbHVjSFYwUTI5MWJuUTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWkdGMFlWUjVjR1VnUFNCb1pXRndWVE15VzJSaGRHRkpibVJsZUNzclhUdGNiaUFnSUNBZ0lHTnZibk4wSUdSaGRHRWdQU0JvWldGd1ZUTXlXMlJoZEdGSmJtUmxlQ3NyWFR0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JwYlNBOUlHaGxZWEJWTXpKYlpHRjBZVWx1WkdWNEt5dGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHbHRjem9nYm5WdFltVnlXMTBnUFNCYlhUdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHUWdQU0F3T3lCa0lEd2daR2x0T3lCa0t5c3BJSHRjYmlBZ0lDQWdJQ0FnWkdsdGN5NXdkWE5vS0dobFlYQlZNekpiWkdGMFlVbHVaR1Y0S3l0ZEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbHVjSFYwY3k1d2RYTm9LRzVsZHlCVVpXNXpiM0pXYVdWM1NXMXdiQ2h0YjJSMWJHVXNJR1JoZEdGVWVYQmxMQ0JrWVhSaExDQmthVzF6S1NrN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWFXNXdkWFJ6SUQwZ2FXNXdkWFJ6TzF4dUlDQjlYRzVjYmlBZ1oyVjBUV0Y0UTI5dGNIVjBaVmR2Y210bmNtOTFjRk5wZW1WektDazZJRnR1ZFcxaVpYSXNJRzUxYldKbGNpd2diblZ0WW1WeVhTQjdYRzRnSUNBZ2NtVjBkWEp1SUZ0Y2JpQWdJQ0FnSUhSb2FYTXVZbUZqYTJWdVpDNWtaWFpwWTJVdWJHbHRhWFJ6TG0xaGVFTnZiWEIxZEdWWGIzSnJaM0p2ZFhCVGFYcGxXQ3dnZEdocGN5NWlZV05yWlc1a0xtUmxkbWxqWlM1c2FXMXBkSE11YldGNFEyOXRjSFYwWlZkdmNtdG5jbTkxY0ZOcGVtVlpMRnh1SUNBZ0lDQWdkR2hwY3k1aVlXTnJaVzVrTG1SbGRtbGpaUzVzYVcxcGRITXViV0Y0UTI5dGNIVjBaVmR2Y210bmNtOTFjRk5wZW1WYVhHNGdJQ0FnWFR0Y2JpQWdmVnh1WEc0Z0lHZGxkRTFoZUVOdmJYQjFkR1ZYYjNKclozSnZkWEJUZEc5eVlXZGxjMmw2WlNncE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtSmhZMnRsYm1RdVpHVjJhV05sTG14cGJXbDBjeTV0WVhoRGIyMXdkWFJsVjI5eWEyZHliM1Z3VTNSdmNtRm5aVk5wZW1VN1hHNGdJSDFjYmx4dUlDQmpiMjF3ZFhSbEtIQnliMmR5WVcwNklGQnliMmR5WVcxSmJtWnZMQ0JwYm5CMWRITlBkWFJ3ZFhSelRXRndjR2x1Wno4NklFTnZiWEIxZEdWRGIyNTBaWGgwU1c1d2RYUnpUM1YwY0hWMGMwMWhjSEJwYm1jcE9pQlVaVzV6YjNKV2FXVjNXMTBnZTF4dUlDQWdJQzh2SUhCeVpYQmhjbVVnYVc1d2RYUnpMaUJwYm5CMWRITWdjMmh2ZFd4a0lHRnNkMkY1Y3lCaVpTQjJZV3hwWkNCa1lYUmhMbHh1SUNBZ0lHTnZibk4wSUcxaGNIQmxaRWx1Y0hWMGN5QTlYRzRnSUNBZ0lDQWdJR2x1Y0hWMGMwOTFkSEIxZEhOTllYQndhVzVuUHk1cGJuQjFkSE0vTG0xaGNDaHBJRDArSUhSNWNHVnZaaUJwSUQwOVBTQW5iblZ0WW1WeUp5QS9JSFJvYVhNdWFXNXdkWFJ6VzJsZElEb2dhU2tnUHo4Z2RHaHBjeTVwYm5CMWRITTdYRzRnSUNBZ0x5OGdjSEpsY0dGeVpTQnZkWFJ3ZFhSekxseHVJQ0FnSUdOdmJuTjBJRzkxZEhCMWRFbHVaR2xqWlhNZ1BTQnBibkIxZEhOUGRYUndkWFJ6VFdGd2NHbHVaejh1YjNWMGNIVjBjeUEvUHlCYlhUdGNiaUFnSUNCamIyNXpkQ0JqY21WaGRHVkxaWEp1Wld4UGRYUndkWFFnUFNBb2FXNWtaWGc2SUc1MWJXSmxjaXdnWkdGMFlWUjVjR1U2SUc1MWJXSmxjaXdnWkdsdGN6b2djbVZoWkc5dWJIa2diblZ0WW1WeVcxMHBPaUJVWlc1emIzSldhV1YzSUQwK1hHNGdJQ0FnSUNBZ0lHNWxkeUJVWlc1emIzSldhV1YzU1cxd2JDaDBhR2x6TG0xdlpIVnNaU3dnWkdGMFlWUjVjR1VzSUhSb2FYTXViM1YwY0hWMEtHbHVaR1Y0TENCa2FXMXpLU3dnWkdsdGN5azdYRzRnSUNBZ1kyOXVjM1FnWTNKbFlYUmxWR1Z0Y0c5eVlYSjVUM1YwY0hWMElEMGdLR1JoZEdGVWVYQmxPaUJ1ZFcxaVpYSXNJR1JwYlhNNklISmxZV1J2Ym14NUlHNTFiV0psY2x0ZEtUb2dWR1Z1YzI5eVZtbGxkeUE5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0JsYkdWdFpXNTBVMmw2WlNBOUlHZGxkRlJsYm5OdmNrVnNaVzFsYm5SVGFYcGxLR1JoZEdGVWVYQmxLVHRjYmlBZ0lDQWdJR2xtSUNnaFpXeGxiV1Z1ZEZOcGVtVXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JWYm5OMWNIQnZjblJsWkNCa1lYUmhJSFI1Y0dVNklDUjdaR0YwWVZSNWNHVjlZQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JqYjI1emRDQmlkV1ptWlhKVGFYcGxJRDBnWld4bGJXVnVkRk5wZW1VZ0tpQlRhR0Z3WlZWMGFXd3VjMmw2WlNoa2FXMXpLVHRjYmlBZ0lDQWdJR052Ym5OMElHZHdkVVJoZEdGSlpDQTlJR0oxWm1abGNsTnBlbVVnUGlBd0lEOGdkR2hwY3k1aVlXTnJaVzVrTG1kd2RVUmhkR0ZOWVc1aFoyVnlMbU55WldGMFpTaGlkV1ptWlhKVGFYcGxLUzVwWkNBNklEQTdYRzRnSUNBZ0lDQnlaWFIxY200Z2JtVjNJRlJsYm5OdmNsWnBaWGRKYlhCc0tIUm9hWE11Ylc5a2RXeGxMQ0JrWVhSaFZIbHdaU3dnWjNCMVJHRjBZVWxrTENCa2FXMXpLVHRjYmlBZ0lDQjlPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbUpoWTJ0bGJtUXVjblZ1S0Z4dUlDQWdJQ0FnSUNCd2NtOW5jbUZ0TENCdFlYQndaV1JKYm5CMWRITXNJRzkxZEhCMWRFbHVaR2xqWlhNc0lHTnlaV0YwWlV0bGNtNWxiRTkxZEhCMWRDd2dZM0psWVhSbFZHVnRjRzl5WVhKNVQzVjBjSFYwTENCMGFHbHpMbTkxZEhCMWRFTnZkVzUwS1R0Y2JpQWdmVnh1WEc0Z0lHOTFkSEIxZENocGJtUmxlRG9nYm5WdFltVnlMQ0JrYVcxek9pQnlaV0ZrYjI1c2VTQnVkVzFpWlhKYlhTazZJRzUxYldKbGNpQjdYRzRnSUNBZ1kyOXVjM1FnYzNSaFkyc2dQU0IwYUdsekxtMXZaSFZzWlM1emRHRmphMU5oZG1Vb0tUdGNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHRjBZU0E5SUhSb2FYTXViVzlrZFd4bExuTjBZV05yUVd4c2IyTW9LREVnS3lCa2FXMXpMbXhsYm1kMGFDa2dLaUEwSUM4cUlITnBlbVZ2WmloemFYcGxYM1FwSUNvdktUdGNiaUFnSUNBZ0lHeGxkQ0J2Wm1aelpYUWdQU0JrWVhSaElENCtJREk3WEc0Z0lDQWdJQ0IwYUdsekxtMXZaSFZzWlM1SVJVRlFWVE15VzI5bVpuTmxkQ3NyWFNBOUlHUnBiWE11YkdWdVozUm9PMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JrYVcxekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViVzlrZFd4bExraEZRVkJWTXpKYmIyWm1jMlYwS3l0ZElEMGdaR2x0YzF0cFhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbTF2WkhWc1pTNWZTbk5sY0U5MWRIQjFkQ0VvZEdocGN5NXZjRXRsY201bGJFTnZiblJsZUhRc0lHbHVaR1Y0TENCa1lYUmhLVHRjYmlBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9YRzRnSUNBZ0lDQWdJQ0FnWUVaaGFXeGxaQ0IwYnlCblpXNWxjbUYwWlNCclpYSnVaV3duY3lCdmRYUndkWFJiSkh0cGJtUmxlSDFkSUhkcGRHZ2daR2x0Y3lCYkpIdGthVzF6ZlYwdUlHQWdLMXh1SUNBZ0lDQWdJQ0FnSUNkSlppQjViM1VnWVhKbElISjFibTVwYm1jZ2QybDBhQ0J3Y21VdFlXeHNiMk5oZEdWa0lHOTFkSEIxZEN3Z2NHeGxZWE5sSUcxaGEyVWdjM1Z5WlNCMGFHVWdiM1YwY0hWMElIUjVjR1V2WkdsdGN5QmhjbVVnWTI5eWNtVmpkQzRnSnlBclhHNGdJQ0FnSUNBZ0lDQWdZRVZ5Y205eU9pQWtlMlY5WUNrN1hHNGdJQ0FnZlNCbWFXNWhiR3g1SUh0Y2JpQWdJQ0FnSUhSb2FYTXViVzlrZFd4bExuTjBZV05yVW1WemRHOXlaU2h6ZEdGamF5azdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dTVzVwZEdsaGJHbDZaU0JLVTBWUUlIZHBkR2dnVjJWaVIxQlZJR0poWTJ0bGJtUXVYRzRnS2x4dUlDb2dWR2hwY3lCbWRXNWpkR2x2YmlCM2FXeHNJR0psSUdOaGJHeGxaQ0JoWm5SbGNpQjBhR1VnVjJWaVFYTnpaVzFpYkhrZ2JXOWtkV3hsSUdseklHeHZZV1JsWkNCaGJtUWdhVzVwZEdsaGJHbDZaV1FnS0Z3aVgwOXlkRWx1YVhSY0lpQnBjeUJqWVd4c1pXUXBMQ0J2Ym1ObElHWnZjbHh1SUNvZ1pXRmphQ0J2WmlCMGFHVWdabTlzYkc5M2FXNW5JRVZRY3lCcFppQjBhR1Y1SUdGeVpTQnpjR1ZqYVdacFpXUTZYRzRnS2lBdElGd2lkMlZpWjNCMVhDSmNiaUFxSUMwZ1hDSjNaV0p1Ymx3aVhHNGdLbHh1SUNvZ1JtOXlJRmRsWWtkUVZTd2dkR2hwY3lCbWRXNWpkR2x2YmlCbGVIQmxZM1J6T2x4dUlDb2dJQzBnVjJWaVIxQlZJR2x6SUdWdVlXSnNaV1FnYVc0Z1luVnBiR1FnS0VKVlNVeEVYMFJGUmxNdVJFbFRRVUpNUlY5WFJVSkhVRlVnUFQwOUlHWmhiSE5sS1M1Y2JpQXFJQ0F0SUZkbFlrZFFWU0JwY3lCaGRtRnBiR0ZpYkdVZ2FXNGdZM1Z5Y21WdWRDQmxiblpwY205dWJXVnVkQzRnS0dFZ2RtRnNhV1FnUjFCVlFXUmhjSFJsY2lCcGN5QndZWE56WldRZ2FXNHBYRzRnS2x4dUlDb2dSbTl5SUZkbFlrNU9MQ0IwYUdseklHWjFibU4wYVc5dUlHVjRjR1ZqZEhNNlhHNGdLaUF0SUZkbFlrNU9JR2x6SUdWdVlXSnNaV1FnYVc0Z1luVnBiR1FnS0VKVlNVeEVYMFJGUmxNdVJFbFRRVUpNUlY5WFJVSkhVRlVnUFQwOUlHWmhiSE5sS1M1Y2JpQXFJQzBnVjJWaVRrNGdhWE1nWVhaaGFXeGhZbXhsSUdsdUlHTjFjbkpsYm5RZ1pXNTJhWEp2Ym0xbGJuUXVJQ2h1WVhacFoyRjBiM0l1Yld3Z2FYTWdibTkwSUhWdVpHVm1hVzVsWkNsY2JpQXFYRzRnS2lCSlppQjBhR1VnVjJWaVFYTnpaVzFpYkhrZ2JXOWtkV3hsSUdseklHNXZkQ0JpZFdsc2RDQjNhWFJvSUVwVFJWQWdjM1Z3Y0c5eWRDd2dkR2hwY3lCbWRXNWpkR2x2YmlCM2FXeHNJSFJvY205M0lHRnVJR1Z5Y205eUxpQlVhR2x6SUhkcGJHd2dhVzUyWVd4cFpHRjBaVnh1SUNvZ0ozZGxZbWR3ZFNjdkozZGxZbTV1SnlCaVlXTnJaVzVrTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0J1WVcxbElDMGdkR2hsSUc1aGJXVWdiMllnZEdobElFVlFMQ0JsYVhSb1pYSWdYQ0ozWldKbmNIVmNJaUJ2Y2lCY0luZGxZbTV1WENKY2JpQXFJRUJ3WVhKaGJTQnRiMlIxYkdVZ0xTQjBhR1VnVDFKVUlGZGxZa0Z6YzJWdFlteDVJRzF2WkhWc1pWeHVJQ29nUUhCaGNtRnRJR1Z1ZGlBdElIUm9aU0JQVWxRZ1pXNTJhWEp2Ym0xbGJuUWdkbUZ5YVdGaWJHVWdLRzl5ZEM1bGJuWXBYRzRnS2lCQWNHRnlZVzBnWjNCMVFXUmhjSFJsY2lBdElIUm9aU0J3Y21VdFkzSmxZWFJsWkNCSFVGVWdZV1JoY0hSbGNseHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdhVzVwZENBOVhHNGdJQ0FnWVhONWJtTW9ibUZ0WlRvZ0ozZGxZbWR3ZFNkOEozZGxZbTV1Snl3Z2JXOWtkV3hsT2lCUGNuUlhZWE50VFc5a2RXeGxMQ0JsYm5ZNklFVnVkaXdnWjNCMVFXUmhjSFJsY2o4NklFZFFWVUZrWVhCMFpYSXBPaUJRY205dGFYTmxQSFp2YVdRK0lEMCtJSHRjYmlBZ1kyOXVjM1FnYW5ObGNFbHVhWFFnUFNCdGIyUjFiR1V1YW5ObGNFbHVhWFE3WEc0Z0lHbG1JQ2doYW5ObGNFbHVhWFFwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFpoYVd4bFpDQjBieUJwYm1sMGFXRnNhWHBsSUVwVFJWQXVJRlJvWlNCWFpXSkJjM05sYldKc2VTQnRiMlIxYkdVZ2FYTWdibTkwSUdKMWFXeDBJSGRwZEdnZ1NsTkZVQ0J6ZFhCd2IzSjBMaWNwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLRzVoYldVZ1BUMDlJQ2QzWldKbmNIVW5LU0I3WEc0Z0lDQWdZMjl1YzNRZ1ltRmphMlZ1WkNBOUlHNWxkeUJYWldKSGNIVkNZV05yWlc1a0tDazdYRzRnSUNBZ1lYZGhhWFFnWW1GamEyVnVaQzVwYm1sMGFXRnNhWHBsS0dWdWRpd2daM0IxUVdSaGNIUmxjaUVwTzF4dVhHNGdJQ0FnYW5ObGNFbHVhWFFvSjNkbFltZHdkU2NzSUZ0Y2JpQWdJQ0FnSUM4dklHSmhZMnRsYm1SY2JpQWdJQ0FnSUdKaFkydGxibVFzWEc1Y2JpQWdJQ0FnSUM4dklHcHpaWEJCYkd4dll5Z3BYRzRnSUNBZ0lDQW9jMmw2WlRvZ2JuVnRZbVZ5S1NBOVBpQmlZV05yWlc1a0xtRnNiRzlqS0hOcGVtVXBMRnh1WEc0Z0lDQWdJQ0F2THlCcWMyVndSbkpsWlNncFhHNGdJQ0FnSUNBb2NIUnlPaUJ1ZFcxaVpYSXBJRDArSUdKaFkydGxibVF1Wm5KbFpTaHdkSElwTEZ4dVhHNGdJQ0FnSUNBdkx5QnFjMlZ3UTI5d2VTaHpjbU1zSUdSemRDd2djMmw2WlN3Z2FYTlRiM1Z5WTJWSGNIVXBYRzRnSUNBZ0lDQW9jM0pqT2lCdWRXMWlaWElzSUdSemREb2diblZ0WW1WeUxDQnphWHBsT2lCdWRXMWlaWElzSUdselUyOTFjbU5sUjNCMUlEMGdabUZzYzJVcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHbHpVMjkxY21ObFIzQjFLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1RFOUhYMFJGUWxWSEtDZDJaWEppYjNObEp5d2dLQ2tnUFQ0Z1lGdFhaV0pIVUZWZElHcHpaWEJEYjNCNVIzQjFWRzlIY0hVNklITnlZejBrZTNOeVkzMHNJR1J6ZEQwa2UyUnpkSDBzSUhOcGVtVTlKSHR6YVhwbGZXQXBPMXh1SUNBZ0lDQWdJQ0FnSUdKaFkydGxibVF1YldWdFkzQjVLSE55WXl3Z1pITjBLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCTVQwZGZSRVZDVlVjb0ozWmxjbUp2YzJVbkxDQW9LU0E5UGlCZ1cxZGxZa2RRVlYwZ2FuTmxjRU52Y0hsRGNIVlViMGR3ZFRvZ1pHRjBZVTltWm5ObGREMGtlM055WTMwc0lHZHdkVVJoZEdGSlpEMGtlMlJ6ZEgwc0lITnBlbVU5Skh0emFYcGxmV0FwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdSaGRHRWdQU0J0YjJSMWJHVXVTRVZCVUZVNExuTjFZbUZ5Y21GNUtITnlZeUErUGo0Z01Dd2dLSE55WXlBK1BqNGdNQ2tnS3lCemFYcGxLVHRjYmlBZ0lDQWdJQ0FnSUNCaVlXTnJaVzVrTG5Wd2JHOWhaQ2hrYzNRc0lHUmhkR0VwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUxGeHVYRzRnSUNBZ0lDQXZMeUJxYzJWd1EyOXdlVUZ6ZVc1aktITnlZeXdnWkhOMExDQnphWHBsS1Z4dUlDQWdJQ0FnWVhONWJtTW9aM0IxUkdGMFlVbGtPaUJ1ZFcxaVpYSXNJR1JoZEdGUFptWnpaWFE2SUc1MWJXSmxjaXdnYzJsNlpUb2diblZ0WW1WeUtUcGNiaUFnSUNBZ0lDQWdJQ0JRY205dGFYTmxQSFp2YVdRK0lEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lFeFBSMTlFUlVKVlJ5aGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5kbVZ5WW05elpTY3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdLQ2tnUFQ0Z1lGdFhaV0pIVUZWZElHcHpaWEJEYjNCNVIzQjFWRzlEY0hVNklHZHdkVVJoZEdGSlpEMGtlMmR3ZFVSaGRHRkpaSDBzSUdSaGRHRlBabVp6WlhROUpIdGtZWFJoVDJabWMyVjBmU3dnYzJsNlpUMGtlM05wZW1WOVlDazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lHRjNZV2wwSUdKaFkydGxibVF1Wkc5M2JteHZZV1FvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWjNCMVJHRjBZVWxrTENBb0tTQTlQaUJ0YjJSMWJHVXVTRVZCVUZVNExuTjFZbUZ5Y21GNUtHUmhkR0ZQWm1aelpYUWdQajQrSURBc0lDaGtZWFJoVDJabWMyVjBJRDQrUGlBd0tTQXJJSE5wZW1VcEtUdGNiaUFnSUNBZ0lDQWdJQ0I5TEZ4dVhHNGdJQ0FnSUNBdkx5QnFjMlZ3UTNKbFlYUmxTMlZ5Ym1Wc1hHNGdJQ0FnSUNBb2EyVnlibVZzVkhsd1pUb2djM1J5YVc1bkxDQnJaWEp1Wld4SlpEb2diblZ0WW1WeUxDQmhkSFJ5YVdKMWRHVTZJSFZ1YTI1dmQyNHBJRDArSUdKaFkydGxibVF1WTNKbFlYUmxTMlZ5Ym1Wc0tGeHVJQ0FnSUNBZ0lDQWdJR3RsY201bGJGUjVjR1VzSUd0bGNtNWxiRWxrTENCaGRIUnlhV0oxZEdVc0lHMXZaSFZzWlM1VlZFWTRWRzlUZEhKcGJtY29iVzlrZFd4bExsOUtjMlZ3UjJWMFRtOWtaVTVoYldVaEtHdGxjbTVsYkVsa0tTa3BMRnh1WEc0Z0lDQWdJQ0F2THlCcWMyVndVbVZzWldGelpVdGxjbTVsYkZ4dUlDQWdJQ0FnS0d0bGNtNWxiRG9nYm5WdFltVnlLU0E5UGlCaVlXTnJaVzVrTG5KbGJHVmhjMlZMWlhKdVpXd29hMlZ5Ym1Wc0tTeGNibHh1SUNBZ0lDQWdMeThnYW5ObGNGSjFibHh1SUNBZ0lDQWdLR3RsY201bGJEb2diblZ0WW1WeUxDQmpiMjUwWlhoMFJHRjBZVTltWm5ObGREb2diblZ0WW1WeUxDQnpaWE56YVc5dVNHRnVaR3hsT2lCdWRXMWlaWElzSUdWeWNtOXljem9nUVhKeVlYazhVSEp2YldselpUeHpkSEpwYm1kOGJuVnNiRDQrS1NBOVBpQjdYRzRnSUNBZ0lDQWdJRXhQUjE5RVJVSlZSeWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDZDJaWEppYjNObEp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNncElEMCtJR0JiVjJWaVIxQlZYU0JxYzJWd1VuVnVPaUJ6WlhOemFXOXVTR0Z1Wkd4bFBTUjdjMlZ6YzJsdmJraGhibVJzWlgwc0lHdGxjbTVsYkQwa2UydGxjbTVsYkgwc0lHTnZiblJsZUhSRVlYUmhUMlptYzJWMFBTUjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRFUmhkR0ZQWm1aelpYUjlZQ2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR052Ym5SbGVIUWdQU0J1WlhjZ1EyOXRjSFYwWlVOdmJuUmxlSFJKYlhCc0tHMXZaSFZzWlN3Z1ltRmphMlZ1WkN3Z1kyOXVkR1Y0ZEVSaGRHRlBabVp6WlhRcE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1ltRmphMlZ1WkM1amIyMXdkWFJsUzJWeWJtVnNLR3RsY201bGJDd2dZMjl1ZEdWNGRDd2daWEp5YjNKektUdGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ0lDQXZMeUJxYzJWd1EyRndkSFZ5WlVKbFoybHVYRzRnSUNBZ0lDQW9LU0E5UGlCaVlXTnJaVzVrTG1OaGNIUjFjbVZDWldkcGJpZ3BMRnh1SUNBZ0lDQWdMeThnYW5ObGNFTmhjSFIxY21WRmJtUmNiaUFnSUNBZ0lDZ3BJRDArSUdKaFkydGxibVF1WTJGd2RIVnlaVVZ1WkNncExGeHVJQ0FnSUNBZ0x5OGdhbk5sY0ZKbGNHeGhlVnh1SUNBZ0lDQWdLQ2tnUFQ0Z1ltRmphMlZ1WkM1eVpYQnNZWGtvS1Z4dUlDQWdJRjBwTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUdwelpYQkpibWwwS0NkM1pXSnViaWNwTzF4dUlDQjlYRzU5TzF4dUlpd2dJbVY0Y0c5eWRDQmpiMjV6ZENCcWIybHVJRDBnZFc1a1pXWnBibVZrT3lJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVhVzF3YjNKMElDb2dZWE1nY0dGMGFDQm1jbTl0SUNkdWIyUmxPbkJoZEdnbk8xeHVhVzF3YjNKMElIdEZiblo5SUdaeWIyMGdKMjl1Ym5oeWRXNTBhVzFsTFdOdmJXMXZiaWM3WEc1Y2JtbHRjRzl5ZENCN1QzSjBWMkZ6YlUxdlpIVnNaWDBnWm5KdmJTQW5MaTlpYVc1a2FXNW5MMjl5ZEMxM1lYTnRKenRjYm1sdGNHOXlkQ0I3VDNKMFYyRnpiVlJvY21WaFpHVmtUVzlrZFd4bGZTQm1jbTl0SUNjdUwySnBibVJwYm1jdmIzSjBMWGRoYzIwdGRHaHlaV0ZrWldRbk8xeHVYRzR2S2lCbGMyeHBiblF0WkdsellXSnNaU0JBZEhsd1pYTmpjbWx3ZEMxbGMyeHBiblF2Ym04dGNtVnhkV2x5WlMxcGJYQnZjblJ6SUNvdlhHNXNaWFFnYjNKMFYyRnpiVVpoWTNSdmNuazZJRVZ0YzJOeWFYQjBaVzVOYjJSMWJHVkdZV04wYjNKNVBFOXlkRmRoYzIxTmIyUjFiR1UrTzF4dVhHNXBaaUFvSVVKVlNVeEVYMFJGUmxNdVJFbFRRVUpNUlY5VVVrRkpUa2xPUnlrZ2UxeHVJQ0J2Y25SWFlYTnRSbUZqZEc5eWVTQTlJSEpsY1hWcGNtVW9KeTR2WW1sdVpHbHVaeTl2Y25RdGRISmhhVzVwYm1jdGQyRnpiUzF6YVcxa0xtcHpKeWs3WEc1OUlHVnNjMlVnZTF4dUlDQnZjblJYWVhOdFJtRmpkRzl5ZVNBOVhHNGdJQ0FnSUNCQ1ZVbE1SRjlFUlVaVExrUkpVMEZDVEVWZlYwVkNSMUJWSUQ4Z2NtVnhkV2x5WlNnbkxpOWlhVzVrYVc1bkwyOXlkQzEzWVhOdExtcHpKeWtnT2lCeVpYRjFhWEpsS0NjdUwySnBibVJwYm1jdmIzSjBMWGRoYzIwdGMybHRaQzVxYzJWd0xtcHpKeWs3WEc1OVhHNWNibU52Ym5OMElHOXlkRmRoYzIxR1lXTjBiM0o1VkdoeVpXRmtaV1E2SUVWdGMyTnlhWEIwWlc1TmIyUjFiR1ZHWVdOMGIzSjVQRTl5ZEZkaGMyMU5iMlIxYkdVK0lEMGdJVUpWU1V4RVgwUkZSbE11UkVsVFFVSk1SVjlYUVZOTlgxUklVa1ZCUkNBL1hHNGdJQ0FnS0VKVlNVeEVYMFJGUmxNdVJFbFRRVUpNUlY5WFJVSkhVRlVnUHlCeVpYRjFhWEpsS0NjdUwySnBibVJwYm1jdmIzSjBMWGRoYzIwdGRHaHlaV0ZrWldRdWFuTW5LU0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhGMWFYSmxLQ2N1TDJKcGJtUnBibWN2YjNKMExYZGhjMjB0YzJsdFpDMTBhSEpsWVdSbFpDNXFjMlZ3TG1wekp5a3BJRHBjYmlBZ0lDQnZjblJYWVhOdFJtRmpkRzl5ZVR0Y2JpOHFJR1Z6YkdsdWRDMWxibUZpYkdVZ1FIUjVjR1Z6WTNKcGNIUXRaWE5zYVc1MEwyNXZMWEpsY1hWcGNtVXRhVzF3YjNKMGN5QXFMMXh1WEc1c1pYUWdkMkZ6YlRvZ1QzSjBWMkZ6YlUxdlpIVnNaWHgxYm1SbFptbHVaV1E3WEc1c1pYUWdhVzVwZEdsaGJHbDZaV1FnUFNCbVlXeHpaVHRjYm14bGRDQnBibWwwYVdGc2FYcHBibWNnUFNCbVlXeHpaVHRjYm14bGRDQmhZbTl5ZEdWa0lEMGdabUZzYzJVN1hHNWNibU52Ym5OMElHbHpUWFZzZEdsVWFISmxZV1JUZFhCd2IzSjBaV1FnUFNBb2JuVnRWR2h5WldGa2N6b2diblZ0WW1WeUtUb2dZbTl2YkdWaGJpQTlQaUI3WEc0Z0lDOHZJRmRsWWtGemMyVnRZbXg1SUhSb2NtVmhaSE1nWVhKbElITmxkQ0IwYnlBeElDaHphVzVuYkdVZ2RHaHlaV0ZrS1M1Y2JpQWdhV1lnS0c1MWJWUm9jbVZoWkhNZ1BUMDlJREVwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJSDFjYmx4dUlDQXZMeUJKWmlBblUyaGhjbVZrUVhKeVlYbENkV1ptWlhJbklHbHpJRzV2ZENCaGRtRnBiR0ZpYkdVc0lGZGxZa0Z6YzJWdFlteDVJSFJvY21WaFpITWdkMmxzYkNCdWIzUWdkMjl5YXk1Y2JpQWdhV1lnS0hSNWNHVnZaaUJUYUdGeVpXUkJjbkpoZVVKMVptWmxjaUE5UFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JSE5sYkdZZ0lUMDlJQ2QxYm1SbFptbHVaV1FuSUNZbUlDRnpaV3htTG1OeWIzTnpUM0pwWjJsdVNYTnZiR0YwWldRcElIdGNiaUFnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQnVieTFqYjI1emIyeGxYRzRnSUNBZ0lDQmpiMjV6YjJ4bExuZGhjbTRvWEc0Z0lDQWdJQ0FnSUNBZ0oyVnVkaTUzWVhOdExtNTFiVlJvY21WaFpITWdhWE1nYzJWMElIUnZJQ2NnS3lCdWRXMVVhSEpsWVdSeklDdGNiaUFnSUNBZ0lDQWdJQ0FuTENCaWRYUWdkR2hwY3lCM2FXeHNJRzV2ZENCM2IzSnJJSFZ1YkdWemN5QjViM1VnWlc1aFlteGxJR055YjNOelQzSnBaMmx1U1hOdmJHRjBaV1FnYlc5a1pTNGdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oxTmxaU0JvZEhSd2N6b3ZMM2RsWWk1a1pYWXZZM0p2YzNNdGIzSnBaMmx1TFdsemIyeGhkR2x2YmkxbmRXbGtaUzhnWm05eUlHMXZjbVVnYVc1bWJ5NG5LVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNCOVhHNWNiaUFnTHk4Z2IyNXVlSEoxYm5ScGJXVXRkMlZpSUdSdlpYTWdibTkwSUhOMWNIQnZjblFnYlhWc2RHa3RkR2h5WldGa2N5QnBiaUJPYjJSbExtcHpMbHh1SUNCcFppQW9kSGx3Wlc5bUlIQnliMk5sYzNNZ0lUMDlJQ2QxYm1SbFptbHVaV1FuSUNZbUlIQnliMk5sYzNNdWRtVnljMmx2Ym5NZ0ppWWdjSEp2WTJWemN5NTJaWEp6YVc5dWN5NXViMlJsS1NCN1hHNGdJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUc1dkxXTnZibk52YkdWY2JpQWdJQ0JqYjI1emIyeGxMbmRoY200b1hHNGdJQ0FnSUNBZ0lDZGxibll1ZDJGemJTNXVkVzFVYUhKbFlXUnpJR2x6SUhObGRDQjBieUFuSUNzZ2JuVnRWR2h5WldGa2N5QXJYRzRnSUNBZ0lDQWdJQ2NzSUdodmQyVjJaWElzSUdOMWNuSmxiblJzZVNCdmJtNTRjblZ1ZEdsdFpTMTNaV0lnWkc5bGN5QnViM1FnYzNWd2NHOXlkQ0J0ZFd4MGFTMTBhSEpsWVdSeklHbHVJRTV2WkdVdWFuTXVJQ2NnSzF4dUlDQWdJQ0FnSUNBblVHeGxZWE5sSUdOdmJuTnBaR1Z5SUhWemFXNW5JRzl1Ym5oeWRXNTBhVzFsTFc1dlpHVWdabTl5SUhCbGNtWnZjbTFoYm1ObElHTnlhWFJwWTJGc0lITmpaVzVoY21sdmN5NG5LVHRjYmlBZ2ZWeHVYRzRnSUhSeWVTQjdYRzRnSUNBZ0x5OGdWR1Z6ZENCbWIzSWdkSEpoYm5ObVpYSmhZbWxzYVhSNUlHOW1JRk5CUW5NZ0tHWnZjaUJpY205M2MyVnljeTRnYm1WbFpHVmtJR1p2Y2lCR2FYSmxabTk0S1Z4dUlDQWdJQzh2SUdoMGRIQnpPaTh2WjNKdmRYQnpMbWR2YjJkc1pTNWpiMjB2Wm05eWRXMHZJeUZ0YzJjdmJXOTZhV3hzWVM1a1pYWXVjR3hoZEdadmNtMHZTVWhyUWxwc1NFVlVjRUV2WkhkelRVNWphRmRGVVVGS1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCTlpYTnpZV2RsUTJoaGJtNWxiQ0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJRzVsZHlCTlpYTnpZV2RsUTJoaGJtNWxiQ2dwTG5CdmNuUXhMbkJ2YzNSTlpYTnpZV2RsS0c1bGR5QlRhR0Z5WldSQmNuSmhlVUoxWm1abGNpZ3hLU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnVkdWemRDQm1iM0lnVjJWaVFYTnpaVzFpYkhrZ2RHaHlaV0ZrY3lCallYQmhZbWxzYVhSNUlDaG1iM0lnWW05MGFDQmljbTkzYzJWeWN5QmhibVFnVG05a1pTNXFjeWxjYmlBZ0lDQXZMeUJVYUdseklIUjVjR1ZrSUdGeWNtRjVJR2x6SUdFZ1YyVmlRWE56WlcxaWJIa2djSEp2WjNKaGJTQmpiMjUwWVdsdWFXNW5JSFJvY21WaFpHVmtJR2x1YzNSeWRXTjBhVzl1Y3k1Y2JpQWdJQ0J5WlhSMWNtNGdWMlZpUVhOelpXMWliSGt1ZG1Gc2FXUmhkR1VvYm1WM0lGVnBiblE0UVhKeVlYa29XMXh1SUNBZ0lDQWdNQ3dnT1Rjc0lERXhOU3dnTVRBNUxDQXhMQ0F3TENBZ01Dd2dJREFzSURFc0lEUXNJREVzSUNBNU5pd2dNQ3dnSUNBd0xDQWdNeXdnTWl3Z01Td2dJREFzSURVc1hHNGdJQ0FnSUNBMExDQXhMQ0FnTXl3Z0lDQXhMQ0FnSURFc0lERXdMQ0F4TVN3Z01Td2dPU3dnTUN3Z05qVXNJREFzSUNBeU5UUXNJREUyTENBeUxDQXdMQ0F5Tml3Z01URmNiaUFnSUNCZEtTazdYRzRnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzRnSUgxY2JuMDdYRzVjYm1OdmJuTjBJR2x6VTJsdFpGTjFjSEJ2Y25SbFpDQTlJQ2dwT2lCaWIyOXNaV0Z1SUQwK0lIdGNiaUFnZEhKNUlIdGNiaUFnSUNBdkx5QlVaWE4wSUdadmNpQlhaV0pCYzNObGJXSnNlU0JUU1UxRUlHTmhjR0ZpYVd4cGRIa2dLR1p2Y2lCaWIzUm9JR0p5YjNkelpYSnpJR0Z1WkNCT2IyUmxMbXB6S1Z4dUlDQWdJQzh2SUZSb2FYTWdkSGx3WldRZ1lYSnlZWGtnYVhNZ1lTQlhaV0pCYzNObGJXSnNlU0J3Y205bmNtRnRJR052Ym5SaGFXNXBibWNnVTBsTlJDQnBibk4wY25WamRHbHZibk11WEc1Y2JpQWdJQ0F2THlCVWFHVWdZbWx1WVhKNUlHUmhkR0VnYVhNZ1oyVnVaWEpoZEdWa0lHWnliMjBnZEdobElHWnZiR3h2ZDJsdVp5QmpiMlJsSUdKNUlIZGhkREozWVhOdE9seHVJQ0FnSUM4dlhHNGdJQ0FnTHk4Z0tHMXZaSFZzWlZ4dUlDQWdJQzh2SUNBZ0tIUjVjR1VnSkhRd0lDaG1kVzVqS1NsY2JpQWdJQ0F2THlBZ0lDaG1kVzVqSUNSbU1DQW9kSGx3WlNBa2REQXBYRzRnSUNBZ0x5OGdJQ0FnSUNoa2NtOXdYRzRnSUNBZ0x5OGdJQ0FnSUNBZ0tHa3pNbmcwTG1SdmRGOXBNVFo0T0Y5elhHNGdJQ0FnTHk4Z0lDQWdJQ0FnSUNBb2FUaDRNVFl1YzNCc1lYUmNiaUFnSUNBdkx5QWdJQ0FnSUNBZ0lDQWdLR2t6TWk1amIyNXpkQ0F3S1NsY2JpQWdJQ0F2THlBZ0lDQWdJQ0FnSUNoMk1USTRMbU52Ym5OMElHa3pNbmcwSURCNE1EQXdNREF3TURBZ01IZ3dNREF3TURBd01DQXdlREF3TURBd01EQXdJREI0TURBd01EQXdNREFwS1NrcEtWeHVYRzRnSUNBZ2NtVjBkWEp1SUZkbFlrRnpjMlZ0WW14NUxuWmhiR2xrWVhSbEtHNWxkeUJWYVc1ME9FRnljbUY1S0Z0Y2JpQWdJQ0FnSURBc0lDQWdPVGNzSURFeE5Td2dNVEE1TENBeExDQXdMQ0F3TENBd0xDQXhMQ0EwTENBeExDQTVOaXdnTUN3Z01Dd2dNeXdnTWl3Z01Td2dNQ3dnTVRBc0lETXdMQ0F4TENBZ0lESTRMQ0FnTUN3Z05qVXNJREFzWEc0Z0lDQWdJQ0F5TlRNc0lERTFMQ0F5TlRNc0lERXlMQ0FnTUN3Z01Dd2dNQ3dnTUN3Z01Dd2dNQ3dnTUN3Z01Dd2dJREFzSURBc0lEQXNJREFzSURBc0lEQXNJREFzSUNBd0xDQWdNalV6TENBeE9EWXNJREVzSURJMkxDQXhNVnh1SUNBZ0lGMHBLVHRjYmlBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ2ZWeHVmVHRjYmx4dVkyOXVjM1FnWjJWMFYyRnpiVVpwYkdWT1lXMWxJRDBnS0hWelpWTnBiV1E2SUdKdmIyeGxZVzRzSUhWelpWUm9jbVZoWkhNNklHSnZiMnhsWVc0cElEMCtJSHRjYmlBZ2FXWWdLSFZ6WlZOcGJXUXBJSHRjYmlBZ0lDQnBaaUFvSVVKVlNVeEVYMFJGUmxNdVJFbFRRVUpNUlY5VVVrRkpUa2xPUnlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUNkdmNuUXRkSEpoYVc1cGJtY3RkMkZ6YlMxemFXMWtMbmRoYzIwbk8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkWE5sVkdoeVpXRmtjeUEvSUNkdmNuUXRkMkZ6YlMxemFXMWtMWFJvY21WaFpHVmtMbmRoYzIwbklEb2dKMjl5ZEMxM1lYTnRMWE5wYldRdWQyRnpiU2M3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnY21WMGRYSnVJSFZ6WlZSb2NtVmhaSE1nUHlBbmIzSjBMWGRoYzIwdGRHaHlaV0ZrWldRdWQyRnpiU2NnT2lBbmIzSjBMWGRoYzIwdWQyRnpiU2M3WEc0Z0lIMWNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JwYm1sMGFXRnNhWHBsVjJWaVFYTnpaVzFpYkhrZ1BTQmhjM2x1WXlobWJHRm5jem9nUlc1MkxsZGxZa0Z6YzJWdFlteDVSbXhoWjNNcE9pQlFjbTl0YVhObFBIWnZhV1ErSUQwK0lIdGNiaUFnYVdZZ0tHbHVhWFJwWVd4cGVtVmtLU0I3WEc0Z0lDQWdjbVYwZFhKdUlGQnliMjFwYzJVdWNtVnpiMngyWlNncE8xeHVJQ0I5WEc0Z0lHbG1JQ2hwYm1sMGFXRnNhWHBwYm1jcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjIxMWJIUnBjR3hsSUdOaGJHeHpJSFJ2SUZ4Y0oybHVhWFJwWVd4cGVtVlhaV0pCYzNObGJXSnNlU2dwWEZ3bklHUmxkR1ZqZEdWa0xpY3BPMXh1SUNCOVhHNGdJR2xtSUNoaFltOXlkR1ZrS1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2R3Y21WMmFXOTFjeUJqWVd4c0lIUnZJRnhjSjJsdWFYUnBZV3hwZW1WWFpXSkJjM05sYldKc2VTZ3BYRnduSUdaaGFXeGxaQzRuS1R0Y2JpQWdmVnh1WEc0Z0lHbHVhWFJwWVd4cGVtbHVaeUE5SUhSeWRXVTdYRzVjYmlBZ0x5OGdkMkZ6YlNCbWJHRm5jeUJoY21VZ1lXeHlaV0ZrZVNCcGJtbDBhV0ZzYVhwbFpGeHVJQ0JqYjI1emRDQjBhVzFsYjNWMElEMGdabXhoWjNNdWFXNXBkRlJwYldWdmRYUWhPMXh1SUNCamIyNXpkQ0J1ZFcxVWFISmxZV1J6SUQwZ1pteGhaM011Ym5WdFZHaHlaV0ZrY3lFN1hHNGdJR052Ym5OMElITnBiV1FnUFNCbWJHRm5jeTV6YVcxa0lUdGNibHh1SUNCamIyNXpkQ0IxYzJWVWFISmxZV1J6SUQwZ2FYTk5kV3gwYVZSb2NtVmhaRk4xY0hCdmNuUmxaQ2h1ZFcxVWFISmxZV1J6S1R0Y2JpQWdZMjl1YzNRZ2RYTmxVMmx0WkNBOUlITnBiV1FnSmlZZ2FYTlRhVzFrVTNWd2NHOXlkR1ZrS0NrN1hHNWNiaUFnWTI5dWMzUWdkMkZ6YlZCaGRHaHpJRDBnWm14aFozTXVkMkZ6YlZCaGRHaHpPMXh1SUNCamIyNXpkQ0IzWVhOdFVISmxabWw0VDNabGNuSnBaR1VnUFNCMGVYQmxiMllnZDJGemJWQmhkR2h6SUQwOVBTQW5jM1J5YVc1bkp5QS9JSGRoYzIxUVlYUm9jeUE2SUhWdVpHVm1hVzVsWkR0Y2JpQWdZMjl1YzNRZ2QyRnpiVVpwYkdWT1lXMWxJRDBnWjJWMFYyRnpiVVpwYkdWT1lXMWxLSFZ6WlZOcGJXUXNJSFZ6WlZSb2NtVmhaSE1wTzF4dUlDQmpiMjV6ZENCM1lYTnRVR0YwYUU5MlpYSnlhV1JsSUQwZ2RIbHdaVzltSUhkaGMyMVFZWFJvY3lBOVBUMGdKMjlpYW1WamRDY2dQeUIzWVhOdFVHRjBhSE5iZDJGemJVWnBiR1ZPWVcxbFhTQTZJSFZ1WkdWbWFXNWxaRHRjYmx4dUlDQnNaWFFnYVhOVWFXMWxiM1YwSUQwZ1ptRnNjMlU3WEc1Y2JpQWdZMjl1YzNRZ2RHRnphM002SUVGeWNtRjVQRkJ5YjIxcGMyVThkbTlwWkQ0K0lEMGdXMTA3WEc1Y2JpQWdMeThnY0hKdmJXbHpaU0JtYjNJZ2RHbHRaVzkxZEZ4dUlDQnBaaUFvZEdsdFpXOTFkQ0ErSURBcElIdGNiaUFnSUNCMFlYTnJjeTV3ZFhOb0tHNWxkeUJRY205dGFYTmxLQ2h5WlhOdmJIWmxLU0E5UGlCN1hHNGdJQ0FnSUNCelpYUlVhVzFsYjNWMEtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FYTlVhVzFsYjNWMElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2NtVnpiMngyWlNncE8xeHVJQ0FnSUNBZ2ZTd2dkR2x0Wlc5MWRDazdYRzRnSUNBZ2ZTa3BPMXh1SUNCOVhHNWNiaUFnTHk4Z2NISnZiV2x6WlNCbWIzSWdiVzlrZFd4bElHbHVhWFJwWVd4cGVtRjBhVzl1WEc0Z0lIUmhjMnR6TG5CMWMyZ29ibVYzSUZCeWIyMXBjMlVvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUdOdmJuTjBJR1poWTNSdmNua2dQU0IxYzJWVWFISmxZV1J6SUQ4Z2IzSjBWMkZ6YlVaaFkzUnZjbmxVYUhKbFlXUmxaQ0E2SUc5eWRGZGhjMjFHWVdOMGIzSjVPMXh1SUNBZ0lHTnZibk4wSUdOdmJtWnBaem9nVUdGeWRHbGhiRHhQY25SWFlYTnRUVzlrZFd4bFBpQTlJSHRjYmlBZ0lDQWdJR3h2WTJGMFpVWnBiR1U2SUNobWFXeGxUbUZ0WlRvZ2MzUnlhVzVuTENCelkzSnBjSFJFYVhKbFkzUnZjbms2SUhOMGNtbHVaeWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVVKVlNVeEVYMFJGUmxNdVJFbFRRVUpNUlY5WFFWTk5YMVJJVWtWQlJDQW1KaUIxYzJWVWFISmxZV1J6SUNZbUlHWnBiR1ZPWVcxbExtVnVaSE5YYVhSb0tDY3VkMjl5YTJWeUxtcHpKeWtnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJSFI1Y0dWdlppQkNiRzlpSUNFOVBTQW5kVzVrWldacGJtVmtKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCVlVrd3VZM0psWVhSbFQySnFaV04wVlZKTUtHNWxkeUJDYkc5aUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCYlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdWR2hwY3lCeVpYRjFhWEpsS0NrZ1puVnVZM1JwYjI0Z2FYTWdhR0Z1Wkd4bFpDQmllU0JsYzJKMWFXeGtJSEJzZFdkcGJpQjBieUJzYjJGa0lHWnBiR1VnWTI5dWRHVnVkQ0JoY3lCemRISnBibWN1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0Ym1WNGRDMXNhVzVsSUVCMGVYQmxjMk55YVhCMExXVnpiR2x1ZEM5dWJ5MXlaWEYxYVhKbExXbHRjRzl5ZEhOY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYRjFhWEpsS0NjdUwySnBibVJwYm1jdmIzSjBMWGRoYzIwdGRHaHlaV0ZrWldRdWQyOXlhMlZ5TG1wekp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1hTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2UzUjVjR1U2SUNkMFpYaDBMMnBoZG1GelkzSnBjSFFuZlNrcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHWnBiR1ZPWVcxbExtVnVaSE5YYVhSb0tDY3VkMkZ6YlNjcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tIZGhjMjFRWVhSb1QzWmxjbkpwWkdVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIzWVhOdFVHRjBhRTkyWlhKeWFXUmxPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIQnlaV1pwZUNBOUlIZGhjMjFRY21WbWFYaFBkbVZ5Y21sa1pTQS9QeUJ6WTNKcGNIUkVhWEpsWTNSdmNuazdYRzVjYmlBZ0lDQWdJQ0FnSUNCcFppQW9JVUpWU1V4RVgwUkZSbE11UkVsVFFVSk1SVjlYUlVKSFVGVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gzWVhOdFJtbHNaVTVoYldVZ1BUMDlJQ2R2Y25RdGQyRnpiUzF6YVcxa0xuZGhjMjBuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ3Y21WbWFYZ2dLeUFuYjNKMExYZGhjMjB0YzJsdFpDNXFjMlZ3TG5kaGMyMG5PMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaDNZWE50Um1sc1pVNWhiV1VnUFQwOUlDZHZjblF0ZDJGemJTMXphVzFrTFhSb2NtVmhaR1ZrTG5kaGMyMG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQndjbVZtYVhnZ0t5QW5iM0owTFhkaGMyMHRjMmx0WkMxMGFISmxZV1JsWkM1cWMyVndMbmRoYzIwbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ3Y21WbWFYZ2dLeUIzWVhOdFJtbHNaVTVoYldVN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjMk55YVhCMFJHbHlaV04wYjNKNUlDc2dabWxzWlU1aGJXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHbG1JQ2doUWxWSlRFUmZSRVZHVXk1RVNWTkJRa3hGWDFkQlUwMWZWRWhTUlVGRUlDWW1JSFZ6WlZSb2NtVmhaSE1wSUh0Y2JpQWdJQ0FnSUdOdmJtWnBaeTV1ZFcxVWFISmxZV1J6SUQwZ2JuVnRWR2h5WldGa2N6dGNiaUFnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdRbXh2WWlBOVBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVabWxuTG0xaGFXNVRZM0pwY0hSVmNteFBja0pzYjJJZ1BTQndZWFJvTG1wdmFXNG9YMTlrYVhKdVlXMWxMQ0FuYjNKMExYZGhjMjB0ZEdoeVpXRmtaV1F1YW5NbktUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhOamNtbHdkRk52ZFhKalpVTnZaR1VnUFNCZ2RtRnlJRzl5ZEZkaGMyMVVhSEpsWVdSbFpEMGtlMlpoWTNSdmNua3VkRzlUZEhKcGJtY29LWDA3WUR0Y2JpQWdJQ0FnSUNBZ1kyOXVabWxuTG0xaGFXNVRZM0pwY0hSVmNteFBja0pzYjJJZ1BTQnVaWGNnUW14dllpaGJjMk55YVhCMFUyOTFjbU5sUTI5a1pWMHNJSHQwZVhCbE9pQW5kR1Y0ZEM5cVlYWmhjMk55YVhCMEozMHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHWmhZM1J2Y25rb1kyOXVabWxuS1M1MGFHVnVLRnh1SUNBZ0lDQWdJQ0F2THlCM1lYTnRJRzF2WkhWc1pTQnBibWwwYVdGc2FYcGxaQ0J6ZFdOalpYTnpablZzYkhsY2JpQWdJQ0FnSUNBZ2JXOWtkV3hsSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JwYm1sMGFXRnNhWHBwYm1jZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQnBibWwwYVdGc2FYcGxaQ0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnZDJGemJTQTlJRzF2WkhWc1pUdGNiaUFnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxLQ2s3WEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDOHZJSGRoYzIwZ2JXOWtkV3hsSUdaaGFXeGxaQ0IwYnlCcGJtbDBhV0ZzYVhwbFhHNGdJQ0FnSUNBZ0lDaDNhR0YwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnYVc1cGRHbGhiR2w2YVc1bklEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lDQWdZV0p2Y25SbFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtIZG9ZWFFwTzF4dUlDQWdJQ0FnSUNCOUtUdGNiaUFnZlNrcE8xeHVYRzRnSUdGM1lXbDBJRkJ5YjIxcGMyVXVjbUZqWlNoMFlYTnJjeWs3WEc1Y2JpQWdhV1lnS0dselZHbHRaVzkxZENrZ2UxeHVJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnVjJWaVFYTnpaVzFpYkhrZ1ltRmphMlZ1WkNCcGJtbDBhV0ZzYVhwcGJtY2dabUZwYkdWa0lHUjFaU0IwYnlCMGFXMWxiM1YwT2lBa2UzUnBiV1Z2ZFhSOWJYTmdLVHRjYmlBZ2ZWeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR2RsZEVsdWMzUmhibU5sSUQwZ0tDazZJRTl5ZEZkaGMyMU5iMlIxYkdVZ1BUNGdlMXh1SUNCcFppQW9hVzVwZEdsaGJHbDZaV1FnSmlZZ2QyRnpiU2tnZTF4dUlDQWdJSEpsZEhWeWJpQjNZWE50TzF4dUlDQjlYRzVjYmlBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkWFpXSkJjM05sYldKc2VTQnBjeUJ1YjNRZ2FXNXBkR2xoYkdsNlpXUWdlV1YwTGljcE8xeHVmVHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR1JwYzNCdmMyVWdQU0FvS1RvZ2RtOXBaQ0E5UGlCN1hHNGdJR2xtSUNocGJtbDBhV0ZzYVhwbFpDQW1KaUFoYVc1cGRHbGhiR2w2YVc1bklDWW1JQ0ZoWW05eWRHVmtLU0I3WEc0Z0lDQWdhVzVwZEdsaGJHbDZhVzVuSUQwZ2RISjFaVHRjYmx4dUlDQWdJQ2gzWVhOdElHRnpJRTl5ZEZkaGMyMVVhSEpsWVdSbFpFMXZaSFZzWlNrdVVGUm9jbVZoWkQ4dWRHVnliV2x1WVhSbFFXeHNWR2h5WldGa2N5Z3BPMXh1SUNBZ0lIZGhjMjBnUFNCMWJtUmxabWx1WldRN1hHNWNiaUFnSUNCcGJtbDBhV0ZzYVhwcGJtY2dQU0JtWVd4elpUdGNiaUFnSUNCcGJtbDBhV0ZzYVhwbFpDQTlJR1poYkhObE8xeHVJQ0FnSUdGaWIzSjBaV1FnUFNCMGNuVmxPMXh1SUNCOVhHNTlPMXh1SWl3Z0lpOHZJRU52Y0hseWFXZG9kQ0FvWXlrZ1RXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUx5OGdUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRTFKVkNCTWFXTmxibk5sTGx4dVhHNXBiWEJ2Y25RZ2UyZGxkRWx1YzNSaGJtTmxmU0JtY205dElDY3VMM2RoYzIwdFptRmpkRzl5ZVNjN1hHNWNibVY0Y0c5eWRDQmpiMjV6ZENCaGJHeHZZMWRoYzIxVGRISnBibWNnUFNBb1pHRjBZVG9nYzNSeWFXNW5MQ0JoYkd4dlkzTTZJRzUxYldKbGNsdGRLVG9nYm5WdFltVnlJRDArSUh0Y2JpQWdZMjl1YzNRZ2QyRnpiU0E5SUdkbGRFbHVjM1JoYm1ObEtDazdYRzVjYmlBZ1kyOXVjM1FnWkdGMFlVeGxibWQwYUNBOUlIZGhjMjB1YkdWdVozUm9RbmwwWlhOVlZFWTRLR1JoZEdFcElDc2dNVHRjYmlBZ1kyOXVjM1FnWkdGMFlVOW1abk5sZENBOUlIZGhjMjB1WDIxaGJHeHZZeWhrWVhSaFRHVnVaM1JvS1R0Y2JpQWdkMkZ6YlM1emRISnBibWRVYjFWVVJqZ29aR0YwWVN3Z1pHRjBZVTltWm5ObGRDd2daR0YwWVV4bGJtZDBhQ2s3WEc0Z0lHRnNiRzlqY3k1d2RYTm9LR1JoZEdGUFptWnpaWFFwTzF4dVhHNGdJSEpsZEhWeWJpQmtZWFJoVDJabWMyVjBPMXh1ZlR0Y2JseHVhVzUwWlhKbVlXTmxJRVY0ZEhKaFQzQjBhVzl1YzBoaGJtUnNaWElnZTF4dUlDQW9ibUZ0WlRvZ2MzUnlhVzVuTENCMllXeDFaVG9nYzNSeWFXNW5LVG9nZG05cFpEdGNibjFjYmx4dVpYaHdiM0owSUdOdmJuTjBJR2wwWlhKaGRHVkZlSFJ5WVU5d2RHbHZibk1nUFZ4dUlDQWdJQ2h2Y0hScGIyNXpPaUJTWldOdmNtUThjM1J5YVc1bkxDQjFibXR1YjNkdVBpd2djSEpsWm1sNE9pQnpkSEpwYm1jc0lITmxaVzQ2SUZkbFlXdFRaWFE4VW1WamIzSmtQSE4wY21sdVp5d2dkVzVyYm05M2JqNCtMRnh1SUNBZ0lDQm9ZVzVrYkdWeU9pQkZlSFJ5WVU5d2RHbHZibk5JWVc1a2JHVnlLVG9nZG05cFpDQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc5d2RHbHZibk1nUFQwZ0oyOWlhbVZqZENjZ0ppWWdiM0IwYVc5dWN5QWhQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2MyVmxiaTVvWVhNb2IzQjBhVzl1Y3lrcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KME5wY21OMWJHRnlJSEpsWm1WeVpXNWpaU0JwYmlCdmNIUnBiMjV6SnlrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdjMlZsYmk1aFpHUW9iM0IwYVc5dWN5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9iM0IwYVc5dWN5a3VabTl5UldGamFDZ29XMnRsZVN3Z2RtRnNkV1ZkS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHNWhiV1VnUFNBb2NISmxabWw0S1NBL0lIQnlaV1pwZUNBcklHdGxlU0E2SUd0bGVUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUIyWVd4MVpTQTlQVDBnSjI5aWFtVmpkQ2NwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBkR1Z5WVhSbFJYaDBjbUZQY0hScGIyNXpLSFpoYkhWbElHRnpJRkpsWTI5eVpEeHpkSEpwYm1jc0lIVnVhMjV2ZDI0K0xDQnVZVzFsSUNzZ0p5NG5MQ0J6WldWdUxDQm9ZVzVrYkdWeUtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbGIyWWdkbUZzZFdVZ1BUMDlJQ2R6ZEhKcGJtY25JSHg4SUhSNWNHVnZaaUIyWVd4MVpTQTlQVDBnSjI1MWJXSmxjaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQm9ZVzVrYkdWeUtHNWhiV1VzSUhaaGJIVmxMblJ2VTNSeWFXNW5LQ2twTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCMllXeDFaU0E5UFQwZ0oySnZiMnhsWVc0bktTQjdYRzRnSUNBZ0lDQWdJQ0FnYUdGdVpHeGxjaWh1WVcxbExDQW9kbUZzZFdVcElEOGdKekVuSURvZ0p6QW5LVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVOaGJpZDBJR2hoYm1Sc1pTQmxlSFJ5WVNCamIyNW1hV2NnZEhsd1pUb2dKSHQwZVhCbGIyWWdkbUZzZFdWOVlDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDA3WEc1Y2JpOHFLbHh1SUNvZ1kyaGxZMnNnZDJWaUlHRnpjMlZ0WW14NUlFRlFTU2R6SUd4aGMzUWdaWEp5YjNJZ1lXNWtJSFJvY205M0lHVnljbTl5SUdsbUlHRnVlU0JsY25KdmNpQnZZMk4xY25KbFpDNWNiaUFxSUVCd1lYSmhiU0J0WlhOellXZGxJR0VnYldWemMyRm5aU0IxYzJWa0lIZG9aVzRnWVc0Z1pYSnliM0lnYjJOamRYSnlaV1F1WEc0Z0tpOWNibVY0Y0c5eWRDQmpiMjV6ZENCamFHVmphMHhoYzNSRmNuSnZjaUE5SUNodFpYTnpZV2RsT2lCemRISnBibWNwT2lCMmIybGtJRDArSUh0Y2JpQWdZMjl1YzNRZ2QyRnpiU0E5SUdkbGRFbHVjM1JoYm1ObEtDazdYRzVjYmlBZ1kyOXVjM1FnYzNSaFkyc2dQU0IzWVhOdExuTjBZV05yVTJGMlpTZ3BPMXh1SUNCMGNua2dlMXh1SUNBZ0lHTnZibk4wSUhCaGNtRnRjMDltWm5ObGRDQTlJSGRoYzIwdWMzUmhZMnRCYkd4dll5ZzRLVHRjYmlBZ0lDQjNZWE50TGw5UGNuUkhaWFJNWVhOMFJYSnliM0lvY0dGeVlXMXpUMlptYzJWMExDQndZWEpoYlhOUFptWnpaWFFnS3lBMEtUdGNiaUFnSUNCamIyNXpkQ0JsY25KdmNrTnZaR1VnUFNCM1lYTnRMa2hGUVZBek1sdHdZWEpoYlhOUFptWnpaWFFnTHlBMFhUdGNiaUFnSUNCamIyNXpkQ0JsY25KdmNrMWxjM05oWjJWUWIybHVkR1Z5SUQwZ2QyRnpiUzVJUlVGUVZUTXlXM0JoY21GdGMwOW1abk5sZENBdklEUWdLeUF4WFR0Y2JpQWdJQ0JqYjI1emRDQmxjbkp2Y2sxbGMzTmhaMlVnUFNCbGNuSnZjazFsYzNOaFoyVlFiMmx1ZEdWeUlEOGdkMkZ6YlM1VlZFWTRWRzlUZEhKcGJtY29aWEp5YjNKTlpYTnpZV2RsVUc5cGJuUmxjaWtnT2lBbkp6dGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUNSN2JXVnpjMkZuWlgwZ1JWSlNUMUpmUTA5RVJUb2dKSHRsY25KdmNrTnZaR1Y5TENCRlVsSlBVbDlOUlZOVFFVZEZPaUFrZTJWeWNtOXlUV1Z6YzJGblpYMWdLVHRjYmlBZ2ZTQm1hVzVoYkd4NUlIdGNiaUFnSUNCM1lYTnRMbk4wWVdOclVtVnpkRzl5WlNoemRHRmpheWs3WEc0Z0lIMWNibjA3WEc0aUxDQWlMeThnUTI5d2VYSnBaMmgwSUNoaktTQk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNHZMeUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnVFVsVUlFeHBZMlZ1YzJVdVhHNWNibWx0Y0c5eWRDQjdTVzVtWlhKbGJtTmxVMlZ6YzJsdmJuMGdabkp2YlNBbmIyNXVlSEoxYm5ScGJXVXRZMjl0Ylc5dUp6dGNibHh1YVcxd2IzSjBJSHRuWlhSSmJuTjBZVzVqWlgwZ1puSnZiU0FuTGk5M1lYTnRMV1poWTNSdmNua25PMXh1YVcxd2IzSjBJSHRoYkd4dlkxZGhjMjFUZEhKcGJtY3NJR05vWldOclRHRnpkRVZ5Y205eUxDQnBkR1Z5WVhSbFJYaDBjbUZQY0hScGIyNXpmU0JtY205dElDY3VMM2RoYzIwdGRYUnBiSE1uTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYzJWMFVuVnVUM0IwYVc5dWN5QTlJQ2h2Y0hScGIyNXpPaUJKYm1abGNtVnVZMlZUWlhOemFXOXVMbEoxYms5d2RHbHZibk1wT2lCYmJuVnRZbVZ5TENCdWRXMWlaWEpiWFYwZ1BUNGdlMXh1SUNCamIyNXpkQ0IzWVhOdElEMGdaMlYwU1c1emRHRnVZMlVvS1R0Y2JpQWdiR1YwSUhKMWJrOXdkR2x2Ym5OSVlXNWtiR1VnUFNBd08xeHVJQ0JqYjI1emRDQmhiR3h2WTNNNklHNTFiV0psY2x0ZElEMGdXMTA3WEc1Y2JpQWdZMjl1YzNRZ2NuVnVUM0IwYVc5dWN6b2dTVzVtWlhKbGJtTmxVMlZ6YzJsdmJpNVNkVzVQY0hScGIyNXpJRDBnYjNCMGFXOXVjeUI4ZkNCN2ZUdGNibHh1SUNCMGNua2dlMXh1SUNBZ0lHbG1JQ2h2Y0hScGIyNXpQeTVzYjJkVFpYWmxjbWwwZVV4bGRtVnNJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lISjFiazl3ZEdsdmJuTXViRzluVTJWMlpYSnBkSGxNWlhabGJDQTlJREk3SUNBdkx5QkVaV1poZFd4MElIUnZJSGRoY201cGJtZGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tGeHVJQ0FnSUNBZ0lDQjBlWEJsYjJZZ2IzQjBhVzl1Y3k1c2IyZFRaWFpsY21sMGVVeGxkbVZzSUNFOVBTQW5iblZ0WW1WeUp5QjhmQ0FoVG5WdFltVnlMbWx6U1c1MFpXZGxjaWh2Y0hScGIyNXpMbXh2WjFObGRtVnlhWFI1VEdWMlpXd3BJSHg4WEc0Z0lDQWdJQ0FnSUc5d2RHbHZibk11Ykc5blUyVjJaWEpwZEhsTVpYWmxiQ0E4SURBZ2ZId2diM0IwYVc5dWN5NXNiMmRUWlhabGNtbDBlVXhsZG1Wc0lENGdOQ2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JzYjJjZ2MyVnlkbVZ5YVhSNUlHeGxkbVZzSUdseklHNXZkQ0IyWVd4cFpEb2dKSHR2Y0hScGIyNXpMbXh2WjFObGRtVnlhWFI1VEdWMlpXeDlZQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk0vTG14dloxWmxjbUp2YzJsMGVVeGxkbVZzSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJSEoxYms5d2RHbHZibk11Ykc5blZtVnlZbTl6YVhSNVRHVjJaV3dnUFNBd095QWdMeThnUkdWbVlYVnNkQ0IwYnlBd1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnYjNCMGFXOXVjeTVzYjJkV1pYSmliM05wZEhsTVpYWmxiQ0FoUFQwZ0oyNTFiV0psY2ljZ2ZId2dJVTUxYldKbGNpNXBjMGx1ZEdWblpYSW9iM0IwYVc5dWN5NXNiMmRXWlhKaWIzTnBkSGxNWlhabGJDa3BJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdiRzluSUhabGNtSnZjMmwwZVNCc1pYWmxiQ0JwY3lCdWIzUWdkbUZzYVdRNklDUjdiM0IwYVc5dWN5NXNiMmRXWlhKaWIzTnBkSGxNWlhabGJIMWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYjNCMGFXOXVjejh1ZEdWeWJXbHVZWFJsSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJSEoxYms5d2RHbHZibk11ZEdWeWJXbHVZWFJsSUQwZ1ptRnNjMlU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUhSaFowUmhkR0ZQWm1aelpYUWdQU0F3TzF4dUlDQWdJR2xtSUNodmNIUnBiMjV6UHk1MFlXY2dJVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2RHRm5SR0YwWVU5bVpuTmxkQ0E5SUdGc2JHOWpWMkZ6YlZOMGNtbHVaeWh2Y0hScGIyNXpMblJoWnl3Z1lXeHNiMk56S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5ZFc1UGNIUnBiMjV6U0dGdVpHeGxJRDBnZDJGemJTNWZUM0owUTNKbFlYUmxVblZ1VDNCMGFXOXVjeWhjYmlBZ0lDQWdJQ0FnY25WdVQzQjBhVzl1Y3k1c2IyZFRaWFpsY21sMGVVeGxkbVZzSVN3Z2NuVnVUM0IwYVc5dWN5NXNiMmRXWlhKaWIzTnBkSGxNWlhabGJDRXNJQ0VoY25WdVQzQjBhVzl1Y3k1MFpYSnRhVzVoZEdVaExDQjBZV2RFWVhSaFQyWm1jMlYwS1R0Y2JpQWdJQ0JwWmlBb2NuVnVUM0IwYVc5dWMwaGhibVJzWlNBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnWTJobFkydE1ZWE4wUlhKeWIzSW9KME5oYmx4Y0ozUWdZM0psWVhSbElISjFiaUJ2Y0hScGIyNXpMaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodmNIUnBiMjV6UHk1bGVIUnlZU0FoUFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQnBkR1Z5WVhSbFJYaDBjbUZQY0hScGIyNXpLRzl3ZEdsdmJuTXVaWGgwY21Fc0lDY25MQ0J1WlhjZ1YyVmhhMU5sZER4U1pXTnZjbVE4YzNSeWFXNW5MQ0IxYm10dWIzZHVQajRvS1N3Z0tHdGxlU3dnZG1Gc2RXVXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYTJWNVJHRjBZVTltWm5ObGRDQTlJR0ZzYkc5alYyRnpiVk4wY21sdVp5aHJaWGtzSUdGc2JHOWpjeWs3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSFpoYkhWbFJHRjBZVTltWm5ObGRDQTlJR0ZzYkc5alYyRnpiVk4wY21sdVp5aDJZV3gxWlN3Z1lXeHNiMk56S1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvZDJGemJTNWZUM0owUVdSa1VuVnVRMjl1Wm1sblJXNTBjbmtvY25WdVQzQjBhVzl1YzBoaGJtUnNaU3dnYTJWNVJHRjBZVTltWm5ObGRDd2dkbUZzZFdWRVlYUmhUMlptYzJWMEtTQWhQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05vWldOclRHRnpkRVZ5Y205eUtHQkRZVzRuZENCelpYUWdZU0J5ZFc0Z1kyOXVabWxuSUdWdWRISjVPaUFrZTJ0bGVYMGdMU0FrZTNaaGJIVmxmUzVnS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUZ0eWRXNVBjSFJwYjI1elNHRnVaR3hsTENCaGJHeHZZM05kTzF4dUlDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdhV1lnS0hKMWJrOXdkR2x2Ym5OSVlXNWtiR1VnSVQwOUlEQXBJSHRjYmlBZ0lDQWdJSGRoYzIwdVgwOXlkRkpsYkdWaGMyVlNkVzVQY0hScGIyNXpLSEoxYms5d2RHbHZibk5JWVc1a2JHVXBPMXh1SUNBZ0lIMWNiaUFnSUNCaGJHeHZZM011Wm05eVJXRmphQ2hoYkd4dll5QTlQaUIzWVhOdExsOW1jbVZsS0dGc2JHOWpLU2s3WEc0Z0lDQWdkR2h5YjNjZ1pUdGNiaUFnZlZ4dWZUdGNiaUlzSUNJdkx5QkRiM0I1Y21sbmFIUWdLR01wSUUxcFkzSnZjMjltZENCRGIzSndiM0poZEdsdmJpNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmk4dklFeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQk5TVlFnVEdsalpXNXpaUzVjYmx4dWFXMXdiM0owSUh0SmJtWmxjbVZ1WTJWVFpYTnphVzl1ZlNCbWNtOXRJQ2R2Ym01NGNuVnVkR2x0WlMxamIyMXRiMjRuTzF4dVhHNXBiWEJ2Y25RZ2UyZGxkRWx1YzNSaGJtTmxmU0JtY205dElDY3VMM2RoYzIwdFptRmpkRzl5ZVNjN1hHNXBiWEJ2Y25RZ2UyRnNiRzlqVjJGemJWTjBjbWx1Wnl3Z1kyaGxZMnRNWVhOMFJYSnliM0lzSUdsMFpYSmhkR1ZGZUhSeVlVOXdkR2x2Ym5OOUlHWnliMjBnSnk0dmQyRnpiUzExZEdsc2N5YzdYRzVjYm1OdmJuTjBJR2RsZEVkeVlYQm9UM0IwYVcxNllYUnBiMjVNWlhabGJDQTlJQ2huY21Gd2FFOXdkR2x0YVhwaGRHbHZia3hsZG1Wc09pQnpkSEpwYm1kOGRXNXJibTkzYmlrNklHNTFiV0psY2lBOVBpQjdYRzRnSUhOM2FYUmphQ0FvWjNKaGNHaFBjSFJwYldsNllYUnBiMjVNWlhabGJDa2dlMXh1SUNBZ0lHTmhjMlVnSjJScGMyRmliR1ZrSnpwY2JpQWdJQ0FnSUhKbGRIVnliaUF3TzF4dUlDQWdJR05oYzJVZ0oySmhjMmxqSnpwY2JpQWdJQ0FnSUhKbGRIVnliaUF4TzF4dUlDQWdJR05oYzJVZ0oyVjRkR1Z1WkdWa0p6cGNiaUFnSUNBZ0lISmxkSFZ5YmlBeU8xeHVJQ0FnSUdOaGMyVWdKMkZzYkNjNlhHNGdJQ0FnSUNCeVpYUjFjbTRnT1RrN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdkVzV6ZFhCd2IzSjBaV1FnWjNKaGNHZ2diM0IwYVcxcGVtRjBhVzl1SUd4bGRtVnNPaUFrZTJkeVlYQm9UM0IwYVcxcGVtRjBhVzl1VEdWMlpXeDlZQ2s3WEc0Z0lIMWNibjA3WEc1Y2JtTnZibk4wSUdkbGRFVjRaV04xZEdsdmJrMXZaR1VnUFNBb1pYaGxZM1YwYVc5dVRXOWtaVG9nSjNObGNYVmxiblJwWVd3bmZDZHdZWEpoYkd4bGJDY3BPaUJ1ZFcxaVpYSWdQVDRnZTF4dUlDQnpkMmwwWTJnZ0tHVjRaV04xZEdsdmJrMXZaR1VwSUh0Y2JpQWdJQ0JqWVhObElDZHpaWEYxWlc1MGFXRnNKenBjYmlBZ0lDQWdJSEpsZEhWeWJpQXdPMXh1SUNBZ0lHTmhjMlVnSjNCaGNtRnNiR1ZzSnpwY2JpQWdJQ0FnSUhKbGRIVnliaUF4TzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lIVnVjM1Z3Y0c5eWRHVmtJR1Y0WldOMWRHbHZiaUJ0YjJSbE9pQWtlMlY0WldOMWRHbHZiazF2WkdWOVlDazdYRzRnSUgxY2JuMDdYRzVjYm1OdmJuTjBJR0Z3Y0dWdVpFUmxabUYxYkhSUGNIUnBiMjV6SUQwZ0tHOXdkR2x2Ym5NNklFbHVabVZ5Wlc1alpWTmxjM05wYjI0dVUyVnpjMmx2Yms5d2RHbHZibk1wT2lCMmIybGtJRDArSUh0Y2JpQWdhV1lnS0NGdmNIUnBiMjV6TG1WNGRISmhLU0I3WEc0Z0lDQWdiM0IwYVc5dWN5NWxlSFJ5WVNBOUlIdDlPMXh1SUNCOVhHNGdJR2xtSUNnaGIzQjBhVzl1Y3k1bGVIUnlZUzV6WlhOemFXOXVLU0I3WEc0Z0lDQWdiM0IwYVc5dWN5NWxlSFJ5WVM1elpYTnphVzl1SUQwZ2UzMDdYRzRnSUgxY2JpQWdZMjl1YzNRZ2MyVnpjMmx2YmlBOUlHOXdkR2x2Ym5NdVpYaDBjbUV1YzJWemMybHZiaUJoY3lCU1pXTnZjbVE4YzNSeWFXNW5MQ0J6ZEhKcGJtYytPMXh1SUNCcFppQW9JWE5sYzNOcGIyNHVkWE5sWDI5eWRGOXRiMlJsYkY5aWVYUmxjMTlrYVhKbFkzUnNlU2tnZTF4dUlDQWdJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMVzVsZUhRdGJHbHVaU0JqWVcxbGJHTmhjMlZjYmlBZ0lDQnpaWE56YVc5dUxuVnpaVjl2Y25SZmJXOWtaV3hmWW5sMFpYTmZaR2x5WldOMGJIa2dQU0FuTVNjN1hHNGdJSDFjYmx4dUlDQXZMeUJwWmlCMWMybHVaeUJLVTBWUUlIZHBkR2dnVjJWaVIxQlZMQ0JoYkhkaGVYTWdaR2x6WVdKc1pTQnRaVzF2Y25rZ2NHRjBkR1Z5Ymx4dUlDQnBaaUFvYjNCMGFXOXVjeTVsZUdWamRYUnBiMjVRY205MmFXUmxjbk1nSmlaY2JpQWdJQ0FnSUc5d2RHbHZibk11WlhobFkzVjBhVzl1VUhKdmRtbGtaWEp6TG5OdmJXVW9aWEFnUFQ0Z0tIUjVjR1Z2WmlCbGNDQTlQVDBnSjNOMGNtbHVaeWNnUHlCbGNDQTZJR1Z3TG01aGJXVXBJRDA5UFNBbmQyVmlaM0IxSnlrcElIdGNiaUFnSUNCdmNIUnBiMjV6TG1WdVlXSnNaVTFsYlZCaGRIUmxjbTRnUFNCbVlXeHpaVHRjYmlBZ2ZWeHVmVHRjYmx4dVkyOXVjM1FnYzJWMFJYaGxZM1YwYVc5dVVISnZkbWxrWlhKeklEMWNiaUFnSUNBb2MyVnpjMmx2Yms5d2RHbHZibk5JWVc1a2JHVTZJRzUxYldKbGNpd2daWGhsWTNWMGFXOXVVSEp2ZG1sa1pYSnpPaUJ5WldGa2IyNXNlU0JKYm1abGNtVnVZMlZUWlhOemFXOXVMa1Y0WldOMWRHbHZibEJ5YjNacFpHVnlRMjl1Wm1sblcxMHNYRzRnSUNBZ0lHRnNiRzlqY3pvZ2JuVnRZbVZ5VzEwcE9pQjJiMmxrSUQwK0lIdGNiaUFnSUNBZ0lHWnZjaUFvWTI5dWMzUWdaWEFnYjJZZ1pYaGxZM1YwYVc5dVVISnZkbWxrWlhKektTQjdYRzRnSUNBZ0lDQWdJR3hsZENCbGNFNWhiV1VnUFNCMGVYQmxiMllnWlhBZ1BUMDlJQ2R6ZEhKcGJtY25JRDhnWlhBZ09pQmxjQzV1WVcxbE8xeHVYRzRnSUNBZ0lDQWdJQzh2SUdOb1pXTnJJRVZRSUc1aGJXVmNiaUFnSUNBZ0lDQWdjM2RwZEdOb0lDaGxjRTVoYldVcElIdGNiaUFnSUNBZ0lDQWdJQ0JqWVhObElDZDNaV0p1YmljNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JsY0U1aGJXVWdQU0FuVjBWQ1RrNG5PMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQmxjQ0FoUFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZDJWaWJtNVBjSFJwYjI1eklEMGdaWEFnWVhNZ1NXNW1aWEpsYm1ObFUyVnpjMmx2Ymk1WFpXSk9Ua1Y0WldOMWRHbHZibEJ5YjNacFpHVnlUM0IwYVc5dU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kMlZpYm01UGNIUnBiMjV6UHk1a1pYWnBZMlZVZVhCbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2EyVjVSR0YwWVU5bVpuTmxkQ0E5SUdGc2JHOWpWMkZ6YlZOMGNtbHVaeWduWkdWMmFXTmxWSGx3WlNjc0lHRnNiRzlqY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZG1Gc2RXVkVZWFJoVDJabWMyVjBJRDBnWVd4c2IyTlhZWE50VTNSeWFXNW5LSGRsWW01dVQzQjBhVzl1Y3k1a1pYWnBZMlZVZVhCbExDQmhiR3h2WTNNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2huWlhSSmJuTjBZVzVqWlNncExsOVBjblJCWkdSVFpYTnphVzl1UTI5dVptbG5SVzUwY25rb2MyVnpjMmx2Yms5d2RHbHZibk5JWVc1a2JHVXNJR3RsZVVSaGRHRlBabVp6WlhRc0lIWmhiSFZsUkdGMFlVOW1abk5sZENrZ0lUMDlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSURBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR05vWldOclRHRnpkRVZ5Y205eUtHQkRZVzRuZENCelpYUWdZU0J6WlhOemFXOXVJR052Ym1acFp5QmxiblJ5ZVRvZ0oyUmxkbWxqWlZSNWNHVW5JQzBnSkh0M1pXSnViazl3ZEdsdmJuTXVaR1YyYVdObFZIbHdaWDB1WUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaDNaV0p1Yms5d2RHbHZibk0vTG01MWJWUm9jbVZoWkhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnYm5WdFZHaHlaV0ZrY3lBOUlIZGxZbTV1VDNCMGFXOXVjeTV1ZFcxVWFISmxZV1J6TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklFcDFjM1FnYVdkdWIzSmxJR2x1ZG1Gc2FXUWdkMlZpYm01UGNIUnBiMjV6TG01MWJWUm9jbVZoWkhNdVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnVkVzFVYUhKbFlXUnpJQ0U5SUNkdWRXMWlaWEluSUh4OElDRk9kVzFpWlhJdWFYTkpiblJsWjJWeUtHNTFiVlJvY21WaFpITXBJSHg4SUc1MWJWUm9jbVZoWkhNZ1BDQXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdWRXMVVhSEpsWVdSeklEMGdNRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdhMlY1UkdGMFlVOW1abk5sZENBOUlHRnNiRzlqVjJGemJWTjBjbWx1WnlnbmJuVnRWR2h5WldGa2N5Y3NJR0ZzYkc5amN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RtRnNkV1ZFWVhSaFQyWm1jMlYwSUQwZ1lXeHNiMk5YWVhOdFUzUnlhVzVuS0c1MWJWUm9jbVZoWkhNdWRHOVRkSEpwYm1jb0tTd2dZV3hzYjJOektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWjJWMFNXNXpkR0Z1WTJVb0tTNWZUM0owUVdSa1UyVnpjMmx2YmtOdmJtWnBaMFZ1ZEhKNUtITmxjM05wYjI1UGNIUnBiMjV6U0dGdVpHeGxMQ0JyWlhsRVlYUmhUMlptYzJWMExDQjJZV3gxWlVSaGRHRlBabVp6WlhRcElDRTlQVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYUdWamEweGhjM1JGY25KdmNpaGdRMkZ1SjNRZ2MyVjBJR0VnYzJWemMybHZiaUJqYjI1bWFXY2daVzUwY25rNklDZHVkVzFVYUhKbFlXUnpKeUF0SUNSN2QyVmlibTVQY0hScGIyNXpMbTUxYlZSb2NtVmhaSE45TG1BcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kMlZpYm01UGNIUnBiMjV6UHk1d2IzZGxjbEJ5WldabGNtVnVZMlVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JyWlhsRVlYUmhUMlptYzJWMElEMGdZV3hzYjJOWFlYTnRVM1J5YVc1bktDZHdiM2RsY2xCeVpXWmxjbVZ1WTJVbkxDQmhiR3h2WTNNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhaaGJIVmxSR0YwWVU5bVpuTmxkQ0E5SUdGc2JHOWpWMkZ6YlZOMGNtbHVaeWgzWldKdWJrOXdkR2x2Ym5NdWNHOTNaWEpRY21WbVpYSmxibU5sTENCaGJHeHZZM01wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaG5aWFJKYm5OMFlXNWpaU2dwTGw5UGNuUkJaR1JUWlhOemFXOXVRMjl1Wm1sblJXNTBjbmtvYzJWemMybHZiazl3ZEdsdmJuTklZVzVrYkdVc0lHdGxlVVJoZEdGUFptWnpaWFFzSUhaaGJIVmxSR0YwWVU5bVpuTmxkQ2tnSVQwOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTm9aV05yVEdGemRFVnljbTl5S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0JEWVc0bmRDQnpaWFFnWVNCelpYTnphVzl1SUdOdmJtWnBaeUJsYm5SeWVUb2dKM0J2ZDJWeVVISmxabVZ5Wlc1alpTY2dMU0FrZTNkbFltNXVUM0IwYVc5dWN5NXdiM2RsY2xCeVpXWmxjbVZ1WTJWOUxtQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQW5kMlZpWjNCMUp6cGNiaUFnSUNBZ0lDQWdJQ0FnSUdWd1RtRnRaU0E5SUNkS1V5YzdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHVndJQ0U5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0IzWldKbmNIVlBjSFJwYjI1eklEMGdaWEFnWVhNZ1NXNW1aWEpsYm1ObFUyVnpjMmx2Ymk1WFpXSkhjSFZGZUdWamRYUnBiMjVRY205MmFXUmxjazl3ZEdsdmJqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSGRsWW1kd2RVOXdkR2x2Ym5NL0xuQnlaV1psY25KbFpFeGhlVzkxZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gzWldKbmNIVlBjSFJwYjI1ekxuQnlaV1psY25KbFpFeGhlVzkxZENBaFBUMGdKMDVEU0ZjbklDWW1JSGRsWW1kd2RVOXdkR2x2Ym5NdWNISmxabVZ5Y21Wa1RHRjViM1YwSUNFOVBTQW5Ua2hYUXljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdjSEpsWm1WeWNtVmtUR0Y1YjNWMElHMTFjM1FnWW1VZ1pXbDBhR1Z5SUNkT1EwaFhKeUJ2Y2lBblRraFhReWM2SUNSN2QyVmlaM0IxVDNCMGFXOXVjeTV3Y21WbVpYSnlaV1JNWVhsdmRYUjlZQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR3RsZVVSaGRHRlBabVp6WlhRZ1BTQmhiR3h2WTFkaGMyMVRkSEpwYm1jb0ozQnlaV1psY25KbFpFeGhlVzkxZENjc0lHRnNiRzlqY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZG1Gc2RXVkVZWFJoVDJabWMyVjBJRDBnWVd4c2IyTlhZWE50VTNSeWFXNW5LSGRsWW1kd2RVOXdkR2x2Ym5NdWNISmxabVZ5Y21Wa1RHRjViM1YwTENCaGJHeHZZM01wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaG5aWFJKYm5OMFlXNWpaU2dwTGw5UGNuUkJaR1JUWlhOemFXOXVRMjl1Wm1sblJXNTBjbmtvYzJWemMybHZiazl3ZEdsdmJuTklZVzVrYkdVc0lHdGxlVVJoZEdGUFptWnpaWFFzSUhaaGJIVmxSR0YwWVU5bVpuTmxkQ2tnSVQwOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTm9aV05yVEdGemRFVnljbTl5S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0JEWVc0bmRDQnpaWFFnWVNCelpYTnphVzl1SUdOdmJtWnBaeUJsYm5SeWVUb2dKM0J5WldabGNuSmxaRXhoZVc5MWRDY2dMU0FrZTNkbFltZHdkVTl3ZEdsdmJuTXVjSEpsWm1WeWNtVmtUR0Y1YjNWMGZTNWdLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdKM2RoYzIwbk9seHVJQ0FnSUNBZ0lDQWdJR05oYzJVZ0oyTndkU2M2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCdWIzUWdjM1Z3Y0c5eWRHVmtJR1Y0WldOMWRHbHZiaUJ3Y205MmFXUmxjam9nSkh0bGNFNWhiV1Y5WUNrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQmxjRTVoYldWRVlYUmhUMlptYzJWMElEMGdZV3hzYjJOWFlYTnRVM1J5YVc1bktHVndUbUZ0WlN3Z1lXeHNiMk56S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2RsZEVsdWMzUmhibU5sS0NrdVgwOXlkRUZ3Y0dWdVpFVjRaV04xZEdsdmJsQnliM1pwWkdWeUtITmxjM05wYjI1UGNIUnBiMjV6U0dGdVpHeGxMQ0JsY0U1aGJXVkVZWFJoVDJabWMyVjBLU0FoUFQwZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdOb1pXTnJUR0Z6ZEVWeWNtOXlLR0JEWVc0bmRDQmhjSEJsYm1RZ1pYaGxZM1YwYVc5dUlIQnliM1pwWkdWeU9pQWtlMlZ3VG1GdFpYMHVZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5TzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYzJWMFUyVnpjMmx2Yms5d2RHbHZibk1nUFNBb2IzQjBhVzl1Y3o4NklFbHVabVZ5Wlc1alpWTmxjM05wYjI0dVUyVnpjMmx2Yms5d2RHbHZibk1wT2lCYmJuVnRZbVZ5TENCdWRXMWlaWEpiWFYwZ1BUNGdlMXh1SUNCamIyNXpkQ0IzWVhOdElEMGdaMlYwU1c1emRHRnVZMlVvS1R0Y2JpQWdiR1YwSUhObGMzTnBiMjVQY0hScGIyNXpTR0Z1Wkd4bElEMGdNRHRjYmlBZ1kyOXVjM1FnWVd4c2IyTnpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVYRzRnSUdOdmJuTjBJSE5sYzNOcGIyNVBjSFJwYjI1ek9pQkpibVpsY21WdVkyVlRaWE56YVc5dUxsTmxjM05wYjI1UGNIUnBiMjV6SUQwZ2IzQjBhVzl1Y3lCOGZDQjdmVHRjYmlBZ1lYQndaVzVrUkdWbVlYVnNkRTl3ZEdsdmJuTW9jMlZ6YzJsdmJrOXdkR2x2Ym5NcE8xeHVYRzRnSUhSeWVTQjdYRzRnSUNBZ1kyOXVjM1FnWjNKaGNHaFBjSFJwYldsNllYUnBiMjVNWlhabGJDQTlJR2RsZEVkeVlYQm9UM0IwYVcxNllYUnBiMjVNWlhabGJDaHpaWE56YVc5dVQzQjBhVzl1Y3k1bmNtRndhRTl3ZEdsdGFYcGhkR2x2Ymt4bGRtVnNJRDgvSUNkaGJHd25LVHRjYmlBZ0lDQmpiMjV6ZENCbGVHVmpkWFJwYjI1TmIyUmxJRDBnWjJWMFJYaGxZM1YwYVc5dVRXOWtaU2h6WlhOemFXOXVUM0IwYVc5dWN5NWxlR1ZqZFhScGIyNU5iMlJsSUQ4L0lDZHpaWEYxWlc1MGFXRnNKeWs3WEc0Z0lDQWdZMjl1YzNRZ2JHOW5TV1JFWVhSaFQyWm1jMlYwSUQxY2JpQWdJQ0FnSUNBZ2RIbHdaVzltSUhObGMzTnBiMjVQY0hScGIyNXpMbXh2WjBsa0lEMDlQU0FuYzNSeWFXNW5KeUEvSUdGc2JHOWpWMkZ6YlZOMGNtbHVaeWh6WlhOemFXOXVUM0IwYVc5dWN5NXNiMmRKWkN3Z1lXeHNiMk56S1NBNklEQTdYRzVjYmlBZ0lDQmpiMjV6ZENCc2IyZFRaWFpsY21sMGVVeGxkbVZzSUQwZ2MyVnpjMmx2Yms5d2RHbHZibk11Ykc5blUyVjJaWEpwZEhsTVpYWmxiQ0EvUHlBeU95QWdMeThnUkdWbVlYVnNkQ0IwYnlBeUlDMGdkMkZ5Ym1sdVoxeHVJQ0FnSUdsbUlDZ2hUblZ0WW1WeUxtbHpTVzUwWldkbGNpaHNiMmRUWlhabGNtbDBlVXhsZG1Wc0tTQjhmQ0JzYjJkVFpYWmxjbWwwZVV4bGRtVnNJRHdnTUNCOGZDQnNiMmRUWlhabGNtbDBlVXhsZG1Wc0lENGdOQ2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JzYjJjZ2MyVnlkbVZ5YVhSNUlHeGxkbVZzSUdseklHNXZkQ0IyWVd4cFpEb2dKSHRzYjJkVFpYWmxjbWwwZVV4bGRtVnNmV0FwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElHeHZaMVpsY21KdmMybDBlVXhsZG1Wc0lEMGdjMlZ6YzJsdmJrOXdkR2x2Ym5NdWJHOW5WbVZ5WW05emFYUjVUR1YyWld3Z1B6OGdNRHNnSUM4dklFUmxabUYxYkhRZ2RHOGdNQ0F0SUhabGNtSnZjMlZjYmlBZ0lDQnBaaUFvSVU1MWJXSmxjaTVwYzBsdWRHVm5aWElvYkc5blZtVnlZbTl6YVhSNVRHVjJaV3dwSUh4OElHeHZaMVpsY21KdmMybDBlVXhsZG1Wc0lEd2dNQ0I4ZkNCc2IyZFdaWEppYjNOcGRIbE1aWFpsYkNBK0lEUXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdiRzluSUhabGNtSnZjMmwwZVNCc1pYWmxiQ0JwY3lCdWIzUWdkbUZzYVdRNklDUjdiRzluVm1WeVltOXphWFI1VEdWMlpXeDlZQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzNRZ2IzQjBhVzFwZW1Wa1RXOWtaV3hHYVd4bFVHRjBhRTltWm5ObGRDQTlJSFI1Y0dWdlppQnpaWE56YVc5dVQzQjBhVzl1Y3k1dmNIUnBiV2w2WldSTmIyUmxiRVpwYkdWUVlYUm9JRDA5UFNBbmMzUnlhVzVuSnlBL1hHNGdJQ0FnSUNBZ0lHRnNiRzlqVjJGemJWTjBjbWx1WnloelpYTnphVzl1VDNCMGFXOXVjeTV2Y0hScGJXbDZaV1JOYjJSbGJFWnBiR1ZRWVhSb0xDQmhiR3h2WTNNcElEcGNiaUFnSUNBZ0lDQWdNRHRjYmx4dUlDQWdJSE5sYzNOcGIyNVBjSFJwYjI1elNHRnVaR3hsSUQwZ2QyRnpiUzVmVDNKMFEzSmxZWFJsVTJWemMybHZiazl3ZEdsdmJuTW9YRzRnSUNBZ0lDQWdJR2R5WVhCb1QzQjBhVzFwZW1GMGFXOXVUR1YyWld3c0lDRWhjMlZ6YzJsdmJrOXdkR2x2Ym5NdVpXNWhZbXhsUTNCMVRXVnRRWEpsYm1Fc0lDRWhjMlZ6YzJsdmJrOXdkR2x2Ym5NdVpXNWhZbXhsVFdWdFVHRjBkR1Z5Yml3Z1pYaGxZM1YwYVc5dVRXOWtaU3hjYmlBZ0lDQWdJQ0FnSVNGelpYTnphVzl1VDNCMGFXOXVjeTVsYm1GaWJHVlFjbTltYVd4cGJtY3NJREFzSUd4dlowbGtSR0YwWVU5bVpuTmxkQ3dnYkc5blUyVjJaWEpwZEhsTVpYWmxiQ3dnYkc5blZtVnlZbTl6YVhSNVRHVjJaV3dzWEc0Z0lDQWdJQ0FnSUc5d2RHbHRhWHBsWkUxdlpHVnNSbWxzWlZCaGRHaFBabVp6WlhRcE8xeHVJQ0FnSUdsbUlDaHpaWE56YVc5dVQzQjBhVzl1YzBoaGJtUnNaU0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdZMmhsWTJ0TVlYTjBSWEp5YjNJb0owTmhibHhjSjNRZ1kzSmxZWFJsSUhObGMzTnBiMjRnYjNCMGFXOXVjeTRuS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2MyVnpjMmx2Yms5d2RHbHZibk11WlhobFkzVjBhVzl1VUhKdmRtbGtaWEp6S1NCN1hHNGdJQ0FnSUNCelpYUkZlR1ZqZFhScGIyNVFjbTkyYVdSbGNuTW9jMlZ6YzJsdmJrOXdkR2x2Ym5OSVlXNWtiR1VzSUhObGMzTnBiMjVQY0hScGIyNXpMbVY0WldOMWRHbHZibEJ5YjNacFpHVnljeXdnWVd4c2IyTnpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYzJWemMybHZiazl3ZEdsdmJuTXVaVzVoWW14bFIzSmhjR2hEWVhCMGRYSmxJQ0U5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdjMlZ6YzJsdmJrOXdkR2x2Ym5NdVpXNWhZbXhsUjNKaGNHaERZWEIwZFhKbElDRTlQU0FuWW05dmJHVmhiaWNwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCbGJtRmliR1ZIY21Gd2FFTmhjSFIxY21VZ2JYVnpkQ0JpWlNCaElHSnZiMnhsWVc0Z2RtRnNkV1U2SUNSN2MyVnpjMmx2Yms5d2RHbHZibk11Wlc1aFlteGxSM0poY0doRFlYQjBkWEpsZldBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1kyOXVjM1FnYTJWNVJHRjBZVTltWm5ObGRDQTlJR0ZzYkc5alYyRnpiVk4wY21sdVp5Z25aVzVoWW14bFIzSmhjR2hEWVhCMGRYSmxKeXdnWVd4c2IyTnpLVHRjYmlBZ0lDQWdJR052Ym5OMElIWmhiSFZsUkdGMFlVOW1abk5sZENBOUlHRnNiRzlqVjJGemJWTjBjbWx1WnloelpYTnphVzl1VDNCMGFXOXVjeTVsYm1GaWJHVkhjbUZ3YUVOaGNIUjFjbVV1ZEc5VGRISnBibWNvS1N3Z1lXeHNiMk56S1R0Y2JpQWdJQ0FnSUdsbUlDaDNZWE50TGw5UGNuUkJaR1JUWlhOemFXOXVRMjl1Wm1sblJXNTBjbmtvYzJWemMybHZiazl3ZEdsdmJuTklZVzVrYkdVc0lHdGxlVVJoZEdGUFptWnpaWFFzSUhaaGJIVmxSR0YwWVU5bVpuTmxkQ2tnSVQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnWTJobFkydE1ZWE4wUlhKeWIzSW9YRzRnSUNBZ0lDQWdJQ0FnSUNCZ1EyRnVKM1FnYzJWMElHRWdjMlZ6YzJsdmJpQmpiMjVtYVdjZ1pXNTBjbms2SUNkbGJtRmliR1ZIY21Gd2FFTmhjSFIxY21VbklDMGdKSHR6WlhOemFXOXVUM0IwYVc5dWN5NWxibUZpYkdWSGNtRndhRU5oY0hSMWNtVjlMbUFwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoelpYTnphVzl1VDNCMGFXOXVjeTVtY21WbFJHbHRaVzV6YVc5dVQzWmxjbkpwWkdWektTQjdYRzRnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJRnR1WVcxbExDQjJZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb2MyVnpjMmx2Yms5d2RHbHZibk11Wm5KbFpVUnBiV1Z1YzJsdmJrOTJaWEp5YVdSbGN5a3BJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdVlXMWxJQ0U5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdabkpsWlNCa2FXMWxibk5wYjI0Z2IzWmxjbkpwWkdVZ2JtRnRaU0J0ZFhOMElHSmxJR0VnYzNSeWFXNW5PaUFrZTI1aGJXVjlZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQjJZV3gxWlNBaFBUMGdKMjUxYldKbGNpY2dmSHdnSVU1MWJXSmxjaTVwYzBsdWRHVm5aWElvZG1Gc2RXVXBJSHg4SUhaaGJIVmxJRHdnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaGdabkpsWlNCa2FXMWxibk5wYjI0Z2IzWmxjbkpwWkdVZ2RtRnNkV1VnYlhWemRDQmlaU0JoSUc1dmJpMXVaV2RoZEdsMlpTQnBiblJsWjJWeU9pQWtlM1poYkhWbGZXQXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzVoYldWUFptWnpaWFFnUFNCaGJHeHZZMWRoYzIxVGRISnBibWNvYm1GdFpTd2dZV3hzYjJOektUdGNiaUFnSUNBZ0lDQWdhV1lnS0hkaGMyMHVYMDl5ZEVGa1pFWnlaV1ZFYVcxbGJuTnBiMjVQZG1WeWNtbGtaU2h6WlhOemFXOXVUM0IwYVc5dWMwaGhibVJzWlN3Z2JtRnRaVTltWm5ObGRDd2dkbUZzZFdVcElDRTlQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMmhsWTJ0TVlYTjBSWEp5YjNJb1lFTmhiaWQwSUhObGRDQmhJR1p5WldVZ1pHbHRaVzV6YVc5dUlHOTJaWEp5YVdSbE9pQWtlMjVoYldWOUlDMGdKSHQyWVd4MVpYMHVZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2MyVnpjMmx2Yms5d2RHbHZibk11WlhoMGNtRWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2FYUmxjbUYwWlVWNGRISmhUM0IwYVc5dWN5aHpaWE56YVc5dVQzQjBhVzl1Y3k1bGVIUnlZU3dnSnljc0lHNWxkeUJYWldGclUyVjBQRkpsWTI5eVpEeHpkSEpwYm1jc0lIVnVhMjV2ZDI0K1BpZ3BMQ0FvYTJWNUxDQjJZV3gxWlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnJaWGxFWVhSaFQyWm1jMlYwSUQwZ1lXeHNiMk5YWVhOdFUzUnlhVzVuS0d0bGVTd2dZV3hzYjJOektUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RtRnNkV1ZFWVhSaFQyWm1jMlYwSUQwZ1lXeHNiMk5YWVhOdFUzUnlhVzVuS0haaGJIVmxMQ0JoYkd4dlkzTXBPMXh1WEc0Z0lDQWdJQ0FnSUdsbUlDaDNZWE50TGw5UGNuUkJaR1JUWlhOemFXOXVRMjl1Wm1sblJXNTBjbmtvYzJWemMybHZiazl3ZEdsdmJuTklZVzVrYkdVc0lHdGxlVVJoZEdGUFptWnpaWFFzSUhaaGJIVmxSR0YwWVU5bVpuTmxkQ2tnSVQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCamFHVmphMHhoYzNSRmNuSnZjaWhnUTJGdUozUWdjMlYwSUdFZ2MyVnpjMmx2YmlCamIyNW1hV2NnWlc1MGNuazZJQ1I3YTJWNWZTQXRJQ1I3ZG1Gc2RXVjlMbUFwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnVzNObGMzTnBiMjVQY0hScGIyNXpTR0Z1Wkd4bExDQmhiR3h2WTNOZE8xeHVJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnYVdZZ0tITmxjM05wYjI1UGNIUnBiMjV6U0dGdVpHeGxJQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQjNZWE50TGw5UGNuUlNaV3hsWVhObFUyVnpjMmx2Yms5d2RHbHZibk1vYzJWemMybHZiazl3ZEdsdmJuTklZVzVrYkdVcE8xeHVJQ0FnSUgxY2JpQWdJQ0JoYkd4dlkzTXVabTl5UldGamFDaGhiR3h2WXlBOVBpQjNZWE50TGw5bWNtVmxLR0ZzYkc5aktTazdYRzRnSUNBZ2RHaHliM2NnWlR0Y2JpQWdmVnh1ZlR0Y2JpSXNJQ0l2THlCRGIzQjVjbWxuYUhRZ0tHTXBJRTFwWTNKdmMyOW1kQ0JEYjNKd2IzSmhkR2x2Ymk0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaTh2SUV4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCTlNWUWdUR2xqWlc1elpTNWNibHh1YVcxd2IzSjBJSHRGYm5Zc0lFbHVabVZ5Wlc1alpWTmxjM05wYjI0c0lGUmxibk52Y24wZ1puSnZiU0FuYjI1dWVISjFiblJwYldVdFkyOXRiVzl1Snp0Y2JseHVhVzF3YjNKMElIdFRaWEpwWVd4cGVtRmliR1ZKYm5SbGNtNWhiRUoxWm1abGNpd2dVMlZ5YVdGc2FYcGhZbXhsVTJWemMybHZiazFsZEdGa1lYUmhMQ0JUWlhKcFlXeHBlbUZpYkdWVVpXNXpiM0pOWlhSaFpHRjBZU3dnVkdWdWMyOXlUV1YwWVdSaGRHRjlJR1p5YjIwZ0p5NHZjSEp2ZUhrdGJXVnpjMkZuWlhNbk8xeHVhVzF3YjNKMElIdHpaWFJTZFc1UGNIUnBiMjV6ZlNCbWNtOXRJQ2N1TDNKMWJpMXZjSFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdjMlYwVTJWemMybHZiazl3ZEdsdmJuTjlJR1p5YjIwZ0p5NHZjMlZ6YzJsdmJpMXZjSFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdaR0YwWVV4dlkyRjBhVzl1VTNSeWFXNW5WRzlGYm5WdExDQm5aWFJVWlc1emIzSkZiR1Z0Wlc1MFUybDZaU3dnYVhOSGNIVkNkV1ptWlhKVGRYQndiM0owWldSVWVYQmxMQ0JzYjJkTVpYWmxiRk4wY21sdVoxUnZSVzUxYlN3Z2RHVnVjMjl5UkdGMFlWUjVjR1ZGYm5WdFZHOVRkSEpwYm1jc0lIUmxibk52Y2tSaGRHRlVlWEJsVTNSeWFXNW5WRzlGYm5WdExDQjBaVzV6YjNKVWVYQmxWRzlVZVhCbFpFRnljbUY1UTI5dWMzUnlkV04wYjNKOUlHWnliMjBnSnk0dmQyRnpiUzFqYjIxdGIyNG5PMXh1YVcxd2IzSjBJSHRuWlhSSmJuTjBZVzVqWlgwZ1puSnZiU0FuTGk5M1lYTnRMV1poWTNSdmNua25PMXh1YVcxd2IzSjBJSHRoYkd4dlkxZGhjMjFUZEhKcGJtY3NJR05vWldOclRHRnpkRVZ5Y205eWZTQm1jbTl0SUNjdUwzZGhjMjB0ZFhScGJITW5PMXh1YVcxd2IzSjBJSHRzYjJGa1JtbHNaWDBnWm5KdmJTQW5MaTkzWVhOdExYVjBhV3h6TFd4dllXUXRabWxzWlNjN1hHNWNiaTh2SUNOeVpXZHBiMjRnU1c1cGRHbGhiR2w2WVhScGIyNXpYRzVjYmk4cUtseHVJQ29nVkdobGNtVWdZWEpsSURRZ1pHbG1abVZ5Wlc1MElGd2lhVzVwZEdsaGJHbDZZWFJwYjI1Y0lpQnpkR1Z3Y3lCbWIzSWdUMUpVTGlCVWFHVjVJR2hoY0hCbGJpQnBiaUJrYVdabVpYSmxiblFnY0d4aFkyVnpJR0Z1WkNCa2FXWm1aWEpsYm5RZ2RHbHRaUzVjYmlBcVhHNGdLaUF4TGlCS1lYWmhVMk55YVhCMElHbHVhWFJwWVd4cGVtRjBhVzl1SUdadmNpQnZibTU0Y25WdWRHbHRaUzFqYjIxdGIyNGdZVzVrSUc5dWJuaHlkVzUwYVcxbExYZGxZaTVjYmlBcUlDQWdJRlJvYVhNZ2FYTWdkR2hsSUdacGNuTjBJR2x1YVhScFlXeHBlbUYwYVc5dUlITjBaWEF1SUVsdUlIUm9hWE1nYzNSbGNDd2diMjV1ZUhKMWJuUnBiV1V0ZDJWaUlHTmhiR3h6SUc5dWJuaHlkVzUwYVcxbExXTnZiVzF2YmlkeklISmxaMmx6ZEdWeVFtRmphMlZ1WkNncFhHNGdLaUJtZFc1amRHbHZiaUJ0ZFd4MGFYQnNaU0IwYVcxbGN5QjBieUJ5WldkcGMzUmxjaUJoYkd3Z2RHaGxJR0YyWVdsc1lXSnNaU0JpWVdOclpXNWtjeTRnVkdobElHSmhZMnRsYm1RZ2NtVm5hWE4wY21GMGFXOXVJR2x6SUhabGNua2dabUZ6ZEM0Z1NYUWdiMjVzZVZ4dUlDb2djbVZuYVhOMFpYSnpJSFJvWlNCaVlXTnJaVzVrSUc1aGJXVWdkMmwwYUNCMGFHVWdkVzVwYm1sMGFXRnNhWHBsWkNCaVlXTnJaVzVrSUc5aWFtVmpkQzRnVG04Z2FHVmhkbmtnYVc1cGRHbGhiR2w2WVhScGIyNGdhWE1nWkc5dVpTQnBiaUIwYUdseklITjBaWEF1WEc0Z0tpQWdJQ0JTWldabGNpQjBieUIzWldJdmJHbGlMMmx1WkdWNExuUnpJR1p2Y2lCMGFHVWdZbUZqYTJWdVpDQnlaV2RwYzNSeVlYUnBiMjR1WEc0Z0tseHVJQ29nTWk0Z1YyVmlRWE56WlcxaWJIa2dZWEowYVdaaFkzUWdhVzVwZEdsaGJHbDZZWFJwYjI0dVhHNGdLaUFnSUNCVWFHbHpJR2hoY0hCbGJuTWdkMmhsYmlCaGJua2djbVZuYVhOMFpYSmxaQ0IzWVhOdElHSmhZMnRsYm1RZ2FYTWdkWE5sWkNCbWIzSWdkR2hsSUdacGNuTjBJSFJwYldVZ0tHbGxMaUJnYjNKMExrbHVabVZ5Wlc1alpWTmxjM05wYjI0dVkzSmxZWFJsS0NsZ0lHOXlYRzRnS2lCZ2IzSjBMbFJ5WVdsdWFXNW5VMlZ6YzJsdmJpNWpjbVZoZEdVb0tXQWdhWE1nWTJGc2JHVmtLUzRnU1c0Z2RHaHBjeUJ6ZEdWd0xDQnZibTU0Y25WdWRHbHRaUzEzWldJZ1pHOWxjeUIwYUdVZ1ptOXNiRzkzYVc1bmN6cGNiaUFxSUNBZ0lDQXRJR055WldGMFpTQmhJSEJ5YjNoNUlIZHZjbXRsY2lCaGJtUWdiV0ZyWlNCemRYSmxJSFJvWlNCd2NtOTRlU0IzYjNKclpYSWdhWE1nY21WaFpIa2dkRzhnY21WalpXbDJaU0J0WlhOellXZGxjeXdnYVdZZ2NISnZlSGtnYVhNZ1pXNWhZbXhsWkM1Y2JpQXFJQ0FnSUNBdElIQmxjbVp2Y20wZ1ptVmhkSFZ5WlNCa1pYUmxZM1JwYjI0c0lHeHZZMkYwWlNCamIzSnlaV04wSUZkbFlrRnpjMlZ0WW14NUlHRnlkR2xtWVdOMElIQmhkR2dnWVc1a0lHTmhiR3dnZEdobElFVnRjMk55YVhCMFpXNGdaMlZ1WlhKaGRHVmtYRzRnS2lCS1lYWmhVMk55YVhCMElHTnZaR1VnZEc4Z2FXNXBkR2xoYkdsNlpTQjBhR1VnVjJWaVFYTnpaVzFpYkhrZ2NuVnVkR2x0WlM1Y2JpQXFJQ0FnSUNBZ0lDQWdMU0JwWmlCd2NtOTRlU0JwY3lCbGJtRmliR1ZrTENCMGFHbHpJSE4wWlhBZ2FHRndjR1Z1Y3lCcGJpQjBhR1VnY0hKdmVIa2dkMjl5YTJWeUlIVnphVzVuSUcxbGMzTmhaMlVnSjJsdWFYUXRkMkZ6YlNjdVhHNGdLaUFnSUNBZ0lDQWdJQzBnWkc5M2JteHZZV1JwYm1jZ2RHaGxJQ2R2Y25RdGQyRnpiWHN1TGk1OUxuZGhjMjBuSUdacGJHVWdhWE1nWkc5dVpTQnBiaUIwYUdseklITjBaWEF1WEc0Z0tpQWdJQ0FnSUNBZ0lDMGdhV1lnYlhWc2RHa3RkR2h5WldGa0lHbHpJR1Z1WVdKc1pXUXNJRzl1WlNCdmNpQnRiM0psSUhkbFluZHZjbXRsY2lCM2FXeHNJR0psSUdOeVpXRjBaV1FnZEc4Z2FXNXBkR2xoYkdsNlpTQjBhR1VnVUZSb2NtVmhaQ0IwYUhKbFlXUndiMjlzTGx4dUlDcGNiaUFxSURNdUlFOVNWQ0JsYm5acGNtOXViV1Z1ZENCcGJtbDBhV0ZzYVhwaGRHbHZiaTVjYmlBcUlDQWdJRlJvYVhNZ2FHRndjR1Z1Y3lCaFpuUmxjaUJ6ZEdWd0lESXVJRWx1SUhSb2FYTWdjM1JsY0N3Z2IyNXVlSEoxYm5ScGJXVXRkMlZpSUhCbGNtWnZjbTF6SUU5T1RsZ2dVblZ1ZEdsdFpTQmxiblpwY205dWJXVnVkQ0JwYm1sMGFXRnNhWHBoZEdsdmJpNWNiaUFxSUVaMWJtTjBhVzl1SUdCZlQzSjBTVzVwZENncFlDQnBjeUJqWVd4c1pXUWdhVzRnZEdocGN5QnpkR1Z3TGx4dUlDb2dJQ0FnSUMwZ2FXWWdjSEp2ZUhrZ2FYTWdaVzVoWW14bFpDd2dkR2hwY3lCemRHVndJR2hoY0hCbGJuTWdhVzRnZEdobElIQnliM2g1SUhkdmNtdGxjaUIxYzJsdVp5QnRaWE56WVdkbElDZHBibWwwTFc5eWRDY3VYRzRnS2lBZ0lDQWdMU0JzYjJkbmFXNW5JR3hsZG1Wc0lDaHZjblF1Wlc1MkxteHZaMHhsZG1Wc0tTQmhibVFnZEdoeVpXRmtJRzUxYldKbGNpQW9iM0owTG1WdWRpNTNZWE50TG01MWJWUm9jbVZoWkhNcElHRnlaU0J6WlhRZ2FXNGdkR2hwY3lCemRHVndMbHh1SUNwY2JpQXFJRFF1SUZObGMzTnBiMjRnYVc1cGRHbGhiR2w2WVhScGIyNHVYRzRnS2lBZ0lDQlVhR2x6SUdoaGNIQmxibk1nZDJobGJpQmdiM0owTGtsdVptVnlaVzVqWlZObGMzTnBiMjR1WTNKbFlYUmxLQ2xnSUc5eUlHQnZjblF1VkhKaGFXNXBibWRUWlhOemFXOXVMbU55WldGMFpTZ3BZQ0JwY3lCallXeHNaV1F1SUZWdWJHbHJaU0IwYUdVZ1ptbHljM1FnTTF4dUlDb2djM1JsY0hNZ0tIUm9aWGtnYjI1c2VTQmpZV3hzWldRZ2IyNWpaU2tzSUhSb2FYTWdjM1JsY0NCM2FXeHNJR0psSUdSdmJtVWdabTl5SUdWaFkyZ2djMlZ6YzJsdmJpNGdTVzRnZEdocGN5QnpkR1Z3TENCdmJtNTRjblZ1ZEdsdFpTMTNaV0lnWkc5bGN5QjBhR1ZjYmlBcUlHWnZiR3h2ZDJsdVozTTZYRzRnS2lBZ0lDQkpaaUIwYUdVZ2NHRnlZVzFsZEdWeUlHbHpJR0VnVlZKTU9seHVJQ29nSUNBZ0xTQmtiM2R1Ykc5aFpDQjBhR1VnYlc5a1pXd2daR0YwWVNCbWNtOXRJSFJvWlNCVlVrd3VYRzRnS2lBZ0lDQXRJR052Y0hrZ2RHaGxJRzF2WkdWc0lHUmhkR0VnZEc4Z2RHaGxJRmRCVTAwZ2FHVmhjQzRnS0hCeWIzaDVPaUFuWTI5d2VTMW1jbTl0SnlsY2JpQXFJQ0FnSUMwZ1pHVnlaV1psY21WdVkyVWdkR2hsSUcxdlpHVnNJR0oxWm1abGNpNGdWR2hwY3lCemRHVndJR0ZzYkc5M2N5QjBhR1VnYjNKcFoybHVZV3dnUVhKeVlYbENkV1ptWlhJZ2RHOGdZbVVnWjJGeVltRm5aU0JqYjJ4c1pXTjBaV1F1WEc0Z0tpQWdJQ0F0SUdOaGJHd2dZRjlQY25SRGNtVmhkR1ZUWlhOemFXOXVLQ2xnSUhSdklHTnlaV0YwWlNCMGFHVWdjMlZ6YzJsdmJpNGdLSEJ5YjNoNU9pQW5ZM0psWVhSbEp5bGNiaUFxWEc0Z0tpQWdJQ0JKWmlCMGFHVWdjR0Z5WVcxbGRHVnlJR2x6SUdFZ1ZXbHVkRGhCY25KaGVTQnZZbXBsWTNRNlhHNGdLaUFnSUNBdElHTnZjSGtnZEdobElHMXZaR1ZzSUdSaGRHRWdkRzhnZEdobElGZEJVMDBnYUdWaGNDNGdLSEJ5YjNoNU9pQW5ZMjl3ZVMxbWNtOXRKeWxjYmlBcUlDQWdJQzBnWTJGc2JDQmdYMDl5ZEVOeVpXRjBaVk5sYzNOcGIyNG9LV0FnZEc4Z1kzSmxZWFJsSUhSb1pTQnpaWE56YVc5dUxpQW9jSEp2ZUhrNklDZGpjbVZoZEdVbktWeHVJQ3BjYmlBcVhHNGdLaTljYmx4dUx5b3FYRzRnS2lCcGJtbDBhV0ZzYVhwbElFOVNWQ0JsYm5acGNtOXViV1Z1ZEM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnYm5WdFZHaHlaV0ZrY3lCVFpYUkhiRzlpWVd4SmJuUnlZVTl3VG5WdFZHaHlaV0ZrY3lodWRXMVVhSEpsWVdSektWeHVJQ29nUUhCaGNtRnRJR3h2WjJkcGJtZE1aWFpsYkNCRGNtVmhkR1ZGYm5Zb2MzUmhkR2xqWDJOaGMzUThUM0owVEc5bloybHVaMHhsZG1Wc1BpaHNiMmRuYVc1blgyeGxkbVZzS1NsY2JpQXFMMXh1WTI5dWMzUWdhVzVwZEU5eWRDQTlJQ2h1ZFcxVWFISmxZV1J6T2lCdWRXMWlaWElzSUd4dloyZHBibWRNWlhabGJEb2diblZ0WW1WeUtUb2dkbTlwWkNBOVBpQjdYRzRnSUdOdmJuTjBJR1Z5Y205eVEyOWtaU0E5SUdkbGRFbHVjM1JoYm1ObEtDa3VYMDl5ZEVsdWFYUW9iblZ0VkdoeVpXRmtjeXdnYkc5bloybHVaMHhsZG1Wc0tUdGNiaUFnYVdZZ0tHVnljbTl5UTI5a1pTQWhQVDBnTUNrZ2UxeHVJQ0FnSUdOb1pXTnJUR0Z6ZEVWeWNtOXlLQ2REWVc1Y1hDZDBJR2x1YVhScFlXeHBlbVVnYjI1dWVISjFiblJwYldVdUp5azdYRzRnSUgxY2JuMDdYRzVjYmk4cUtseHVJQ29nYVc1MGFXRnNhWHBsSUhKMWJuUnBiV1VnWlc1MmFYSnZibTFsYm5RdVhHNGdLaUJBY0dGeVlXMGdaVzUySUhCaGMzTmxaQ0JwYmlCMGFHVWdaVzUyYVhKdmJtMWxiblFnWTI5dVptbG5JRzlpYW1WamRDNWNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJR2x1YVhSU2RXNTBhVzFsSUQwZ1lYTjVibU1vWlc1Mk9pQkZibllwT2lCUWNtOXRhWE5sUEhadmFXUStJRDArSUh0Y2JpQWdMeThnYVc1cGRDQlBVbFJjYmlBZ2FXNXBkRTl5ZENobGJuWXVkMkZ6YlM1dWRXMVVhSEpsWVdSeklTd2diRzluVEdWMlpXeFRkSEpwYm1kVWIwVnVkVzBvWlc1MkxteHZaMHhsZG1Wc0tTazdYRzU5TzF4dVhHNHZLaXBjYmlBcUlIQmxjbVp2Y20wZ1JWQWdjM0JsWTJsbWFXTWdhVzVwZEdsaGJHbDZZWFJwYjI0dVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUdWdWRseHVJQ29nUUhCaGNtRnRJR1Z3VG1GdFpWeHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdhVzVwZEVWd0lEMGdZWE41Ym1Nb1pXNTJPaUJGYm5Zc0lHVndUbUZ0WlRvZ2MzUnlhVzVuS1RvZ1VISnZiV2x6WlR4MmIybGtQaUE5UGlCN1hHNGdJR2xtSUNnaFFsVkpURVJmUkVWR1V5NUVTVk5CUWt4RlgxZEZRa2RRVlNrZ2UxeHVJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCQWRIbHdaWE5qY21sd2RDMWxjMnhwYm5RdmJtOHRjbVZ4ZFdseVpTMXBiWEJ2Y25SekxDQkFkSGx3WlhOamNtbHdkQzFsYzJ4cGJuUXZibTh0ZG1GeUxYSmxjWFZwY21WelhHNGdJQ0FnWTI5dWMzUWdhVzVwZEVwelpYQWdQU0J5WlhGMWFYSmxLQ2N1TDJwelpYQXZhVzVwZENjcExtbHVhWFE3WEc1Y2JpQWdJQ0JwWmlBb1pYQk9ZVzFsSUQwOVBTQW5kMlZpWjNCMUp5a2dlMXh1SUNBZ0lDQWdMeThnY0dWeVptOXliU0JYWldKSFVGVWdZWFpoYVd4aFltbHNhWFI1SUdOb1pXTnJYRzRnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzVoZG1sbllYUnZjaUE5UFQwZ0ozVnVaR1ZtYVc1bFpDY2dmSHdnSVc1aGRtbG5ZWFJ2Y2k1bmNIVXBJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RYWldKSFVGVWdhWE1nYm05MElITjFjSEJ2Y25SbFpDQnBiaUJqZFhKeVpXNTBJR1Z1ZG1seWIyNXRaVzUwSnlrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHeGxkQ0JoWkdGd2RHVnlJRDBnWlc1MkxuZGxZbWR3ZFM1aFpHRndkR1Z5SUdGeklFZFFWVUZrWVhCMFpYSWdmQ0J1ZFd4c08xeHVJQ0FnSUNBZ2FXWWdLQ0ZoWkdGd2RHVnlLU0I3WEc0Z0lDQWdJQ0FnSUM4dklHbG1JR0ZrWVhCMFpYSWdhWE1nYm05MElITmxkQ3dnY21WeGRXVnpkQ0JoSUc1bGR5QmhaR0Z3ZEdWeUxseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd2IzZGxjbEJ5WldabGNtVnVZMlVnUFNCbGJuWXVkMlZpWjNCMUxuQnZkMlZ5VUhKbFptVnlaVzVqWlR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEJ2ZDJWeVVISmxabVZ5Wlc1alpTQWhQVDBnZFc1a1pXWnBibVZrSUNZbUlIQnZkMlZ5VUhKbFptVnlaVzVqWlNBaFBUMGdKMnh2ZHkxd2IzZGxjaWNnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJSEJ2ZDJWeVVISmxabVZ5Wlc1alpTQWhQVDBnSjJocFoyZ3RjR1Z5Wm05eWJXRnVZMlVuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkpiblpoYkdsa0lIQnZkMlZ5VUhKbFptVnlaVzVqWlNCelpYUjBhVzVuT2lCY0lpUjdjRzkzWlhKUWNtVm1aWEpsYm1ObGZWd2lZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWm05eVkyVkdZV3hzWW1GamEwRmtZWEIwWlhJZ1BTQmxibll1ZDJWaVozQjFMbVp2Y21ObFJtRnNiR0poWTJ0QlpHRndkR1Z5TzF4dUlDQWdJQ0FnSUNCcFppQW9abTl5WTJWR1lXeHNZbUZqYTBGa1lYQjBaWElnSVQwOUlIVnVaR1ZtYVc1bFpDQW1KaUIwZVhCbGIyWWdabTl5WTJWR1lXeHNZbUZqYTBGa1lYQjBaWElnSVQwOUlDZGliMjlzWldGdUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnU1c1MllXeHBaQ0JtYjNKalpVWmhiR3hpWVdOclFXUmhjSFJsY2lCelpYUjBhVzVuT2lCY0lpUjdabTl5WTJWR1lXeHNZbUZqYTBGa1lYQjBaWEo5WENKZ0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JoWkdGd2RHVnlJRDBnWVhkaGFYUWdibUYyYVdkaGRHOXlMbWR3ZFM1eVpYRjFaWE4wUVdSaGNIUmxjaWg3Y0c5M1pYSlFjbVZtWlhKbGJtTmxMQ0JtYjNKalpVWmhiR3hpWVdOclFXUmhjSFJsY24wcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVdGa1lYQjBaWElwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNkR1lXbHNaV1FnZEc4Z1oyVjBJRWRRVlNCaFpHRndkR1Z5TGlBbklDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0oxbHZkU0J0WVhrZ2JtVmxaQ0IwYnlCbGJtRmliR1VnWm14aFp5QmNJaTB0Wlc1aFlteGxMWFZ1YzJGbVpTMTNaV0puY0hWY0lpQnBaaUI1YjNVZ1lYSmxJSFZ6YVc1bklFTm9jbTl0WlM0bktUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdMeThnYVdZZ1lXUmhjSFJsY2lCcGN5QnpaWFFzSUhaaGJHbGtZWFJsSUdsMExseHVJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JR0ZrWVhCMFpYSXViR2x0YVhSeklDRTlQU0FuYjJKcVpXTjBKeUI4ZkNCMGVYQmxiMllnWVdSaGNIUmxjaTVtWldGMGRYSmxjeUFoUFQwZ0oyOWlhbVZqZENjZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUhSNWNHVnZaaUJoWkdGd2RHVnlMbkpsY1hWbGMzUkVaWFpwWTJVZ0lUMDlJQ2RtZFc1amRHbHZiaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owbHVkbUZzYVdRZ1IxQlZJR0ZrWVhCMFpYSWdjMlYwSUdsdUlHQmxibll1ZDJWaVozQjFMbUZrWVhCMFpYSmdMaUJKZENCdGRYTjBJR0psSUdFZ1IxQlZRV1JoY0hSbGNpQnZZbXBsWTNRdUp5azdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVdZZ0tDRmxibll1ZDJGemJTNXphVzFrS1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loY2JpQWdJQ0FnSUNBZ0lDQWdJQ2RPYjNRZ2MzVndjRzl5ZEdWa0lHWnZjaUJYWldKSFVGVTlUMDRnWVc1a0lGTkpUVVE5VDBaR0xpQlFiR1ZoYzJVZ2MyVjBJR0JsYm5ZdWQyRnpiUzV6YVcxa1lDQjBieUIwY25WbElIZG9aVzRnZFhOcGJtY2dZSGRsWW1kd2RXQWdSVkFuS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1lYZGhhWFFnYVc1cGRFcHpaWEFvSjNkbFltZHdkU2NzSUdkbGRFbHVjM1JoYm1ObEtDa3NJR1Z1ZGl3Z1lXUmhjSFJsY2lrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNobGNFNWhiV1VnUFQwOUlDZDNaV0p1YmljcElIdGNiaUFnSUNBZ0lDOHZJSEJsY21admNtMGdWMlZpVGs0Z1lYWmhhV3hoWW1sc2FYUjVJR05vWldOclhHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHNWhkbWxuWVhSdmNpQTlQVDBnSjNWdVpHVm1hVzVsWkNjZ2ZId2dJU2h1WVhacFoyRjBiM0lnWVhNZ2RXNXJibTkzYmlCaGN5QjdiV3c2SUhWdWEyNXZkMjU5S1M1dGJDa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMWRsWWs1T0lHbHpJRzV2ZENCemRYQndiM0owWldRZ2FXNGdZM1Z5Y21WdWRDQmxiblpwY205dWJXVnVkQ2NwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCaGQyRnBkQ0JwYm1sMFNuTmxjQ2duZDJWaWJtNG5MQ0JuWlhSSmJuTjBZVzVqWlNncExDQmxibllwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVmVHRjYmx4dUx5OGdJMlZ1WkhKbFoybHZiaUJKYm1sMGFXRnNhWHBoZEdsdmJuTmNibHh1THlvcVhHNGdLaUIyWVd4cFpDQmtZWFJoSUd4dlkyRjBhVzl1Y3lCbWIzSWdhVzV3ZFhRdmIzVjBjSFYwSUhSbGJuTnZjbk11WEc0Z0tpOWNiblI1Y0dVZ1UzVndjRzl5ZEdWa1ZHVnVjMjl5UkdGMFlVeHZZMkYwYVc5dVJtOXlTVzV3ZFhSUGRYUndkWFFnUFNBblkzQjFKM3duWTNCMUxYQnBibTVsWkNkOEoyZHdkUzFpZFdabVpYSW5PMXh1WEc1MGVYQmxJRWxQUW1sdVpHbHVaMU4wWVhSbElEMGdlMXh1SUNBdktpcGNiaUFnSUNvZ2RHaGxJR2hoYm1Sc1pTQnZaaUJKVHlCaWFXNWthVzVuTGx4dUlDQWdLaTljYmlBZ2NtVmhaRzl1YkhrZ2FHRnVaR3hsT2lCdWRXMWlaWEk3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJSFJvWlNCd2NtVm1aWEp5WldRZ2JHOWpZWFJwYjI0Z1ptOXlJR1ZoWTJnZ2IzVjBjSFYwSUhSbGJuTnZjaTVjYmlBZ0lDcGNiaUFnSUNvZ2RtRnNkV1VnYVhNZ2IyNWxJRzltSUNkamNIVW5MQ0FuWTNCMUxYQnBibTVsWkNjc0lDZG5jSFV0WW5WbVptVnlKeTVjYmlBZ0lDb3ZYRzRnSUhKbFlXUnZibXg1SUc5MWRIQjFkRkJ5WldabGNuSmxaRXh2WTJGMGFXOXVjem9nY21WaFpHOXViSGtnVTNWd2NHOXlkR1ZrVkdWdWMyOXlSR0YwWVV4dlkyRjBhVzl1Um05eVNXNXdkWFJQZFhSd2RYUmJYVHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2daVzUxYlNCMllXeDFaU0J2WmlCMGFHVWdjSEpsWm1WeWNtVmtJR3h2WTJGMGFXOXVJR1p2Y2lCbFlXTm9JRzkxZEhCMWRDQjBaVzV6YjNJdVhHNGdJQ0FxTDF4dUlDQnlaV0ZrYjI1c2VTQnZkWFJ3ZFhSUWNtVm1aWEp5WldSTWIyTmhkR2x2Ym5ORmJtTnZaR1ZrT2lCeVpXRmtiMjVzZVNCdWRXMWlaWEpiWFR0Y2JuMDdYRzVjYmk4cUtseHVJQ29nSUhSMWNHeGxJR1ZzWlcxbGJuUnpJR0Z5WlRvZ1NXNW1aWEpsYm1ObFUyVnpjMmx2YmlCSlJEc2dhVzV3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrT3lCdmRYUndkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtPeUJpYVc1a2FXNW5VM1JoZEdWY2JpQXFMMXh1ZEhsd1pTQlRaWE56YVc5dVRXVjBZV1JoZEdFZ1BTQmJYRzRnSUdsdVptVnlaVzVqWlZObGMzTnBiMjVKWkRvZ2JuVnRZbVZ5TENCcGJuQjFkRTVoYldWelZWUkdPRVZ1WTI5a1pXUTZJRzUxYldKbGNsdGRMQ0J2ZFhSd2RYUk9ZVzFsYzFWVVJqaEZibU52WkdWa09pQnVkVzFpWlhKYlhTeGNiaUFnWW1sdVpHbHVaMU4wWVhSbE9pQkpUMEpwYm1ScGJtZFRkR0YwWlh4dWRXeHNMQ0JsYm1GaWJHVkhjbUZ3YUVOaGNIUjFjbVU2SUdKdmIyeGxZVzRzSUdsdWNIVjBUM1YwY0hWMFFtOTFibVE2SUdKdmIyeGxZVzVjYmwwN1hHNWNibU52Ym5OMElHRmpkR2wyWlZObGMzTnBiMjV6SUQwZ2JtVjNJRTFoY0R4dWRXMWlaWElzSUZObGMzTnBiMjVOWlhSaFpHRjBZVDRvS1R0Y2JseHVMeW9xWEc0Z0tpQm5aWFFnZEdobElHbHVjSFYwTDI5MWRIQjFkQ0JqYjNWdWRDQnZaaUIwYUdVZ2MyVnpjMmx2Ymk1Y2JpQXFJRUJ3WVhKaGJTQnpaWE56YVc5dVNHRnVaR3hsSUhSb1pTQm9ZVzVrYkdVZ2NtVndjbVZ6Wlc1MGFXNW5JSFJvWlNCelpYTnphVzl1TGlCemFHOTFiR1FnWW1VZ2JtOXVMWHBsY204dVhHNGdLaUJBY21WMGRYSnVjeUJoSUhSMWNHeGxJR2x1WTJ4MVpHbHVaeUF5SUc1MWJXSmxjbk1zSUhKbGNISmxjMlZ1ZEdsdVp5QjBhR1VnYVc1d2RYUWdZMjkxYm5RZ1lXNWtJRzkxZEhCMWRDQmpiM1Z1ZEM1Y2JpQXFMMXh1WTI5dWMzUWdaMlYwVTJWemMybHZia2x1Y0hWMFQzVjBjSFYwUTI5MWJuUWdQU0FvYzJWemMybHZia2hoYm1Sc1pUb2diblZ0WW1WeUtUb2dXMjUxYldKbGNpd2diblZ0WW1WeVhTQTlQaUI3WEc0Z0lHTnZibk4wSUhkaGMyMGdQU0JuWlhSSmJuTjBZVzVqWlNncE8xeHVJQ0JqYjI1emRDQnpkR0ZqYXlBOUlIZGhjMjB1YzNSaFkydFRZWFpsS0NrN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnWTI5dWMzUWdaR0YwWVU5bVpuTmxkQ0E5SUhkaGMyMHVjM1JoWTJ0QmJHeHZZeWc0S1R0Y2JpQWdJQ0JqYjI1emRDQmxjbkp2Y2tOdlpHVWdQU0IzWVhOdExsOVBjblJIWlhSSmJuQjFkRTkxZEhCMWRFTnZkVzUwS0hObGMzTnBiMjVJWVc1a2JHVXNJR1JoZEdGUFptWnpaWFFzSUdSaGRHRlBabVp6WlhRZ0t5QTBLVHRjYmlBZ0lDQnBaaUFvWlhKeWIzSkRiMlJsSUNFOVBTQXdLU0I3WEc0Z0lDQWdJQ0JqYUdWamEweGhjM1JGY25KdmNpZ25RMkZ1WEZ3bmRDQm5aWFFnYzJWemMybHZiaUJwYm5CMWRDOXZkWFJ3ZFhRZ1kyOTFiblF1SnlrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmJkMkZ6YlM1SVJVRlFNekpiWkdGMFlVOW1abk5sZENBdklEUmRMQ0IzWVhOdExraEZRVkF6TWx0a1lYUmhUMlptYzJWMElDOGdOQ0FySURGZFhUdGNiaUFnZlNCbWFXNWhiR3g1SUh0Y2JpQWdJQ0IzWVhOdExuTjBZV05yVW1WemRHOXlaU2h6ZEdGamF5azdYRzRnSUgxY2JuMDdYRzVjYmk4cUtseHVJQ29nWVd4c2IyTmhkR1VnZEdobElHMWxiVzl5ZVNCaGJtUWdiV1Z0WTNCNUlIUm9aU0JsZUhSbGNtNWhiQ0JpZFdabVpYSXVYRzRnS2x4dUlDb2dRSEJoY21GdElHMXZaR1ZzSUMwZ2RHaGxJR1Y0ZEdWeWJtRnNJR0oxWm1abGNpQmpiMjUwWVdsdWFXNW5JSFJvWlNCdGIyUmxiQ0JrWVhSaExpQk5kWE4wSUc1dmRDQmlaU0IwYUdVZ2MyRnRaU0JpZFdabVpYSWdZWE1nZEdobElGZEJVMDBnYUdWaGNDNWNiaUFxSUVCeVpYUjFjbTV6SUdFZ01pMWxiR1Z0Wlc1MGN5QjBkWEJzWlNBdElIUm9aU0J3YjJsdWRHVnlJR0Z1WkNCemFYcGxJRzltSUhSb1pTQmhiR3h2WTJGMFpXUWdZblZtWm1WeVhHNGdLaTljYm1WNGNHOXlkQ0JqYjI1emRDQmpiM0I1Um5KdmJVVjRkR1Z5Ym1Gc1FuVm1abVZ5SUQwZ0tHMXZaR1ZzT2lCVmFXNTBPRUZ5Y21GNUtUb2dXMjUxYldKbGNpd2diblZ0WW1WeVhTQTlQaUI3WEc0Z0lHTnZibk4wSUhkaGMyMGdQU0JuWlhSSmJuTjBZVzVqWlNncE8xeHVJQ0JqYjI1emRDQnRiMlJsYkVSaGRHRlBabVp6WlhRZ1BTQjNZWE50TGw5dFlXeHNiMk1vYlc5a1pXd3VZbmwwWlV4bGJtZDBhQ2s3WEc0Z0lHbG1JQ2h0YjJSbGJFUmhkR0ZQWm1aelpYUWdQVDA5SURBcElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVOaGJpZDBJR055WldGMFpTQmhJSE5sYzNOcGIyNHVJR1poYVd4bFpDQjBieUJoYkd4dlkyRjBaU0JoSUdKMVptWmxjaUJ2WmlCemFYcGxJQ1I3Ylc5a1pXd3VZbmwwWlV4bGJtZDBhSDB1WUNrN1hHNGdJSDFjYmlBZ2QyRnpiUzVJUlVGUVZUZ3VjMlYwS0cxdlpHVnNMQ0J0YjJSbGJFUmhkR0ZQWm1aelpYUXBPMXh1SUNCeVpYUjFjbTRnVzIxdlpHVnNSR0YwWVU5bVpuTmxkQ3dnYlc5a1pXd3VZbmwwWlV4bGJtZDBhRjA3WEc1OU8xeHVYRzR2S2lwY2JpQXFJR055WldGMFpTQmhiaUJwYm1abGNtVnVZMlVnYzJWemMybHZiaUJtY205dElHRWdiVzlrWld3Z1pHRjBZU0JpZFdabVpYSXVYRzRnS2x4dUlDb2dRSEJoY21GdElHMXZaR1ZzUkdGMFlTQXRJR1ZwZEdobGNpQmhJRlZwYm5RNFFYSnlZWGtnYjJKcVpXTjBJSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdiVzlrWld3Z1pHRjBZU3dnYjNJZ1lTQXlMV1ZzWlcxbGJuUnpJSFIxY0d4bElHTnZiblJoYVc1cGJtY2dkR2hsWEc0Z0tpQWdJQ0FnY0c5cGJuUmxjaUJoYm1RZ2MybDZaU0J2WmlCMGFHVWdiVzlrWld3Z1pHRjBZU0JpZFdabVpYSXVYRzRnS2lCQWNHRnlZVzBnYjNCMGFXOXVjeUJoYmlCdmNIUnBiMjVoYkNCelpYTnphVzl1SUc5d2RHbHZibk1nYjJKcVpXTjBMbHh1SUNvZ1FISmxkSFZ5Ym5NZ1lTQXpMV1ZzWlcxbGJuUnpJSFIxY0d4bElHTnZiblJoYVc1cGJtY2dXM05sYzNOcGIyNGdhR0Z1Wkd4bExDQnBibkIxZENCdVlXMWxjeXdnYjNWMGNIVjBJRzVoYldWelhWeHVJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdZM0psWVhSbFUyVnpjMmx2YmlBOUlHRnplVzVqS0Z4dUlDQWdJRzF2WkdWc1JHRjBZVG9nVldsdWREaEJjbkpoZVh4VFpYSnBZV3hwZW1GaWJHVkpiblJsY201aGJFSjFabVpsY2l4Y2JpQWdJQ0J2Y0hScGIyNXpQem9nU1c1bVpYSmxibU5sVTJWemMybHZiaTVUWlhOemFXOXVUM0IwYVc5dWN5azZJRkJ5YjIxcGMyVThVMlZ5YVdGc2FYcGhZbXhsVTJWemMybHZiazFsZEdGa1lYUmhQaUE5UGlCN1hHNGdJR3hsZENCdGIyUmxiRVJoZEdGUFptWnpaWFE2SUc1MWJXSmxjaXdnYlc5a1pXeEVZWFJoVEdWdVozUm9PaUJ1ZFcxaVpYSTdYRzRnSUdOdmJuTjBJSGRoYzIwZ1BTQm5aWFJKYm5OMFlXNWpaU2dwTzF4dVhHNGdJR2xtSUNoQmNuSmhlUzVwYzBGeWNtRjVLRzF2WkdWc1JHRjBZU2twSUh0Y2JpQWdJQ0F2THlCcFppQnRiMlJsYkNCa1lYUmhJR2x6SUdGdUlHRnljbUY1TENCcGRDQnRkWE4wSUdKbElHRWdNaTFsYkdWdFpXNTBjeUIwZFhCc1pTQmpiMjUwWVdsdWFXNW5JSFJvWlNCd2IybHVkR1Z5SUdGdVpDQnphWHBsSUc5bUlIUm9aU0J0YjJSbGJDQmtZWFJoWEc0Z0lDQWdXMjF2WkdWc1JHRjBZVTltWm5ObGRDd2diVzlrWld4RVlYUmhUR1Z1WjNSb1hTQTlJRzF2WkdWc1JHRjBZVHRjYmlBZ2ZTQmxiSE5sSUdsbUlDaHRiMlJsYkVSaGRHRXVZblZtWm1WeUlEMDlQU0IzWVhOdExraEZRVkJWT0M1aWRXWm1aWElwSUh0Y2JpQWdJQ0F2THlCcFppQnRiMlJsYkNCa1lYUmhJSFZ6WlhNZ2RHaGxJSE5oYldVZ1luVm1abVZ5SUdGeklIUm9aU0JYUVZOTklHaGxZWEFzSUhkbElHUnZiaWQwSUc1bFpXUWdkRzhnWTI5d2VTQnBkQzVjYmlBZ0lDQmJiVzlrWld4RVlYUmhUMlptYzJWMExDQnRiMlJsYkVSaGRHRk1aVzVuZEdoZElEMGdXMjF2WkdWc1JHRjBZUzVpZVhSbFQyWm1jMlYwTENCdGIyUmxiRVJoZEdFdVlubDBaVXhsYm1kMGFGMDdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdMeThnYjNSb1pYSjNhWE5sTENCamIzQjVJSFJvWlNCdGIyUmxiQ0JrWVhSaElIUnZJSFJvWlNCWFFWTk5JR2hsWVhBdVhHNGdJQ0FnVzIxdlpHVnNSR0YwWVU5bVpuTmxkQ3dnYlc5a1pXeEVZWFJoVEdWdVozUm9YU0E5SUdOdmNIbEdjbTl0UlhoMFpYSnVZV3hDZFdabVpYSW9iVzlrWld4RVlYUmhLVHRjYmlBZ2ZWeHVYRzRnSUd4bGRDQnpaWE56YVc5dVNHRnVaR3hsSUQwZ01EdGNiaUFnYkdWMElITmxjM05wYjI1UGNIUnBiMjV6U0dGdVpHeGxJRDBnTUR0Y2JpQWdiR1YwSUdsdlFtbHVaR2x1WjBoaGJtUnNaU0E5SURBN1hHNGdJR3hsZENCaGJHeHZZM002SUc1MWJXSmxjbHRkSUQwZ1cxMDdYRzRnSUdOdmJuTjBJR2x1Y0hWMFRtRnRaWE5WVkVZNFJXNWpiMlJsWkNBOUlGdGRPMXh1SUNCamIyNXpkQ0J2ZFhSd2RYUk9ZVzFsYzFWVVJqaEZibU52WkdWa0lEMGdXMTA3WEc1Y2JpQWdkSEo1SUh0Y2JpQWdJQ0JiYzJWemMybHZiazl3ZEdsdmJuTklZVzVrYkdVc0lHRnNiRzlqYzEwZ1BTQnpaWFJUWlhOemFXOXVUM0IwYVc5dWN5aHZjSFJwYjI1ektUdGNibHh1SUNBZ0lHbG1JQ2h2Y0hScGIyNXpQeTVsZUhSbGNtNWhiRVJoZEdFZ0ppWWdkMkZ6YlM1dGIzVnVkRVY0ZEdWeWJtRnNSR0YwWVNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYkc5aFpHbHVaMUJ5YjIxcGMyVnpJRDBnVzEwN1hHNGdJQ0FnSUNCbWIzSWdLR052Ym5OMElHWnBiR1VnYjJZZ2IzQjBhVzl1Y3k1bGVIUmxjbTVoYkVSaGRHRXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjR0YwYUNBOUlIUjVjR1Z2WmlCbWFXeGxJRDA5UFNBbmMzUnlhVzVuSnlBL0lHWnBiR1VnT2lCbWFXeGxMbkJoZEdnN1hHNGdJQ0FnSUNBZ0lHeHZZV1JwYm1kUWNtOXRhWE5sY3k1d2RYTm9LR3h2WVdSR2FXeGxLSFI1Y0dWdlppQm1hV3hsSUQwOVBTQW5jM1J5YVc1bkp5QS9JR1pwYkdVZ09pQm1hV3hsTG1SaGRHRXBMblJvWlc0b1pHRjBZU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdkMkZ6YlM1dGIzVnVkRVY0ZEdWeWJtRnNSR0YwWVNFb2NHRjBhQ3dnWkdGMFlTazdYRzRnSUNBZ0lDQWdJSDBwS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0x5OGdkMkZwZENCbWIzSWdZV3hzSUdWNGRHVnlibUZzSUdSaGRHRWdabWxzWlhNZ2RHOGdZbVVnYkc5aFpHVmtYRzRnSUNBZ0lDQmhkMkZwZENCUWNtOXRhWE5sTG1Gc2JDaHNiMkZrYVc1blVISnZiV2x6WlhNcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhObGMzTnBiMjVJWVc1a2JHVWdQU0JoZDJGcGRDQjNZWE50TGw5UGNuUkRjbVZoZEdWVFpYTnphVzl1S0cxdlpHVnNSR0YwWVU5bVpuTmxkQ3dnYlc5a1pXeEVZWFJoVEdWdVozUm9MQ0J6WlhOemFXOXVUM0IwYVc5dWMwaGhibVJzWlNrN1hHNGdJQ0FnYVdZZ0tITmxjM05wYjI1SVlXNWtiR1VnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJR05vWldOclRHRnpkRVZ5Y205eUtDZERZVzVjWENkMElHTnlaV0YwWlNCaElITmxjM05wYjI0dUp5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnVzJsdWNIVjBRMjkxYm5Rc0lHOTFkSEIxZEVOdmRXNTBYU0E5SUdkbGRGTmxjM05wYjI1SmJuQjFkRTkxZEhCMWRFTnZkVzUwS0hObGMzTnBiMjVJWVc1a2JHVXBPMXh1WEc0Z0lDQWdZMjl1YzNRZ1pXNWhZbXhsUjNKaGNHaERZWEIwZFhKbElEMGdJU0Z2Y0hScGIyNXpQeTVsYm1GaWJHVkhjbUZ3YUVOaGNIUjFjbVU3WEc1Y2JpQWdJQ0JqYjI1emRDQnBibkIxZEU1aGJXVnpJRDBnVzEwN1hHNGdJQ0FnWTI5dWMzUWdiM1YwY0hWMFRtRnRaWE1nUFNCYlhUdGNiaUFnSUNCamIyNXpkQ0J2ZFhSd2RYUlFjbVZtWlhKeVpXUk1iMk5oZEdsdmJuTTZJRk4xY0hCdmNuUmxaRlJsYm5OdmNrUmhkR0ZNYjJOaGRHbHZia1p2Y2tsdWNIVjBUM1YwY0hWMFcxMGdQU0JiWFR0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdsdWNIVjBRMjkxYm5RN0lHa3JLeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdibUZ0WlNBOUlIZGhjMjB1WDA5eWRFZGxkRWx1Y0hWMFRtRnRaU2h6WlhOemFXOXVTR0Z1Wkd4bExDQnBLVHRjYmlBZ0lDQWdJR2xtSUNodVlXMWxJRDA5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJR05vWldOclRHRnpkRVZ5Y205eUtDZERZVzVjWENkMElHZGxkQ0JoYmlCcGJuQjFkQ0J1WVcxbExpY3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhVzV3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrTG5CMWMyZ29ibUZ0WlNrN1hHNGdJQ0FnSUNCcGJuQjFkRTVoYldWekxuQjFjMmdvZDJGemJTNVZWRVk0Vkc5VGRISnBibWNvYm1GdFpTa3BPMXh1SUNBZ0lIMWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHOTFkSEIxZEVOdmRXNTBPeUJwS3lzcElIdGNiaUFnSUNBZ0lHTnZibk4wSUc1aGJXVWdQU0IzWVhOdExsOVBjblJIWlhSUGRYUndkWFJPWVcxbEtITmxjM05wYjI1SVlXNWtiR1VzSUdrcE8xeHVJQ0FnSUNBZ2FXWWdLRzVoYldVZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ1kyaGxZMnRNWVhOMFJYSnliM0lvSjBOaGJseGNKM1FnWjJWMElHRnVJRzkxZEhCMWRDQnVZVzFsTGljcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2IzVjBjSFYwVG1GdFpYTlZWRVk0Ulc1amIyUmxaQzV3ZFhOb0tHNWhiV1VwTzF4dUlDQWdJQ0FnWTI5dWMzUWdibUZ0WlZOMGNtbHVaeUE5SUhkaGMyMHVWVlJHT0ZSdlUzUnlhVzVuS0c1aGJXVXBPMXh1SUNBZ0lDQWdiM1YwY0hWMFRtRnRaWE11Y0hWemFDaHVZVzFsVTNSeWFXNW5LVHRjYmx4dUlDQWdJQ0FnYVdZZ0tDRkNWVWxNUkY5RVJVWlRMa1JKVTBGQ1RFVmZWMFZDUjFCVktTQjdYRzRnSUNBZ0lDQWdJR2xtSUNobGJtRmliR1ZIY21Gd2FFTmhjSFIxY21VZ0ppWWdiM0IwYVc5dWN6OHVjSEpsWm1WeWNtVmtUM1YwY0hWMFRHOWpZWFJwYjI0Z1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHOTFkSEIxZEZCeVpXWmxjbkpsWkV4dlkyRjBhVzl1Y3k1d2RYTm9LQ2RuY0hVdFluVm1abVZ5SnlrN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdiRzlqWVhScGIyNGdQU0IwZVhCbGIyWWdiM0IwYVc5dWN6OHVjSEpsWm1WeWNtVmtUM1YwY0hWMFRHOWpZWFJwYjI0Z1BUMDlJQ2R6ZEhKcGJtY25JRDljYmlBZ0lDQWdJQ0FnSUNBZ0lHOXdkR2x2Ym5NdWNISmxabVZ5Y21Wa1QzVjBjSFYwVEc5allYUnBiMjRnT2x4dUlDQWdJQ0FnSUNBZ0lDQWdiM0IwYVc5dWN6OHVjSEpsWm1WeWNtVmtUM1YwY0hWMFRHOWpZWFJwYjI0L0xsdHVZVzFsVTNSeWFXNW5YU0EvUHlBblkzQjFKenRjYmlBZ0lDQWdJQ0FnYVdZZ0tHeHZZMkYwYVc5dUlDRTlQU0FuWTNCMUp5QW1KaUJzYjJOaGRHbHZiaUFoUFQwZ0oyTndkUzF3YVc1dVpXUW5JQ1ltSUd4dlkyRjBhVzl1SUNFOVBTQW5aM0IxTFdKMVptWmxjaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFNXZkQ0J6ZFhCd2IzSjBaV1FnY0hKbFptVnljbVZrSUc5MWRIQjFkQ0JzYjJOaGRHbHZiam9nSkh0c2IyTmhkR2x2Ym4wdVlDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tHVnVZV0pzWlVkeVlYQm9RMkZ3ZEhWeVpTQW1KaUJzYjJOaGRHbHZiaUFoUFQwZ0oyZHdkUzFpZFdabVpYSW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCT2IzUWdjM1Z3Y0c5eWRHVmtJSEJ5WldabGNuSmxaQ0J2ZFhSd2RYUWdiRzlqWVhScGIyNDZJQ1I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR3h2WTJGMGFXOXVmUzRnVDI1c2VTQW5aM0IxTFdKMVptWmxjaWNnYkc5allYUnBiMjRnYVhNZ2MzVndjRzl5ZEdWa0lIZG9aVzRnWlc1aFlteGxSM0poY0doRFlYQjBkWEpsSUdseklIUnlkV1V1WUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdiM1YwY0hWMFVISmxabVZ5Y21Wa1RHOWpZWFJwYjI1ekxuQjFjMmdvYkc5allYUnBiMjRwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUhWelpTQkpUeUJpYVc1a2FXNW5JRzl1YkhrZ2QyaGxiaUJoZENCc1pXRnpkQ0J2Ym1VZ2IzVjBjSFYwSUdseklIQnlaV1ptWlhKbFpDQjBieUJpWlNCdmJpQkhVRlV1WEc0Z0lDQWdiR1YwSUdKcGJtUnBibWRUZEdGMFpUb2dTVTlDYVc1a2FXNW5VM1JoZEdWOGJuVnNiQ0E5SUc1MWJHdzdYRzRnSUNBZ2FXWWdLQ0ZDVlVsTVJGOUVSVVpUTGtSSlUwRkNURVZmVjBWQ1IxQlZJQ1ltSUc5MWRIQjFkRkJ5WldabGNuSmxaRXh2WTJGMGFXOXVjeTV6YjIxbEtHd2dQVDRnYkNBOVBUMGdKMmR3ZFMxaWRXWm1aWEluS1NrZ2UxeHVJQ0FnSUNBZ2FXOUNhVzVrYVc1blNHRnVaR3hsSUQwZ2QyRnpiUzVmVDNKMFEzSmxZWFJsUW1sdVpHbHVaeWh6WlhOemFXOXVTR0Z1Wkd4bEtUdGNiaUFnSUNBZ0lHbG1JQ2hwYjBKcGJtUnBibWRJWVc1a2JHVWdQVDA5SURBcElIdGNiaUFnSUNBZ0lDQWdZMmhsWTJ0TVlYTjBSWEp5YjNJb0owTmhibHhjSjNRZ1kzSmxZWFJsSUVsUElHSnBibVJwYm1jdUp5azdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR0pwYm1ScGJtZFRkR0YwWlNBOUlIdGNiaUFnSUNBZ0lDQWdhR0Z1Wkd4bE9pQnBiMEpwYm1ScGJtZElZVzVrYkdVc1hHNGdJQ0FnSUNBZ0lHOTFkSEIxZEZCeVpXWmxjbkpsWkV4dlkyRjBhVzl1Y3l4Y2JpQWdJQ0FnSUNBZ2IzVjBjSFYwVUhKbFptVnljbVZrVEc5allYUnBiMjV6Ulc1amIyUmxaRG9nYjNWMGNIVjBVSEpsWm1WeWNtVmtURzlqWVhScGIyNXpMbTFoY0Noc0lEMCtJR1JoZEdGTWIyTmhkR2x2YmxOMGNtbHVaMVJ2Ulc1MWJTaHNLU2tzWEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDFjYmx4dUlDQWdJR0ZqZEdsMlpWTmxjM05wYjI1ekxuTmxkQ2hjYmlBZ0lDQWdJQ0FnYzJWemMybHZia2hoYm1Sc1pTeGNiaUFnSUNBZ0lDQWdXM05sYzNOcGIyNUlZVzVrYkdVc0lHbHVjSFYwVG1GdFpYTlZWRVk0Ulc1amIyUmxaQ3dnYjNWMGNIVjBUbUZ0WlhOVlZFWTRSVzVqYjJSbFpDd2dZbWx1WkdsdVoxTjBZWFJsTENCbGJtRmliR1ZIY21Gd2FFTmhjSFIxY21Vc0lHWmhiSE5sWFNrN1hHNGdJQ0FnY21WMGRYSnVJRnR6WlhOemFXOXVTR0Z1Wkd4bExDQnBibkIxZEU1aGJXVnpMQ0J2ZFhSd2RYUk9ZVzFsYzEwN1hHNGdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0JwYm5CMWRFNWhiV1Z6VlZSR09FVnVZMjlrWldRdVptOXlSV0ZqYUNoaWRXWWdQVDRnZDJGemJTNWZUM0owUm5KbFpTaGlkV1lwS1R0Y2JpQWdJQ0J2ZFhSd2RYUk9ZVzFsYzFWVVJqaEZibU52WkdWa0xtWnZja1ZoWTJnb1luVm1JRDArSUhkaGMyMHVYMDl5ZEVaeVpXVW9ZblZtS1NrN1hHNWNiaUFnSUNCcFppQW9hVzlDYVc1a2FXNW5TR0Z1Wkd4bElDRTlQU0F3S1NCN1hHNGdJQ0FnSUNCM1lYTnRMbDlQY25SU1pXeGxZWE5sUW1sdVpHbHVaeWhwYjBKcGJtUnBibWRJWVc1a2JHVXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h6WlhOemFXOXVTR0Z1Wkd4bElDRTlQU0F3S1NCN1hHNGdJQ0FnSUNCM1lYTnRMbDlQY25SU1pXeGxZWE5sVTJWemMybHZiaWh6WlhOemFXOXVTR0Z1Wkd4bEtUdGNiaUFnSUNCOVhHNGdJQ0FnZEdoeWIzY2daVHRjYmlBZ2ZTQm1hVzVoYkd4NUlIdGNiaUFnSUNCM1lYTnRMbDltY21WbEtHMXZaR1ZzUkdGMFlVOW1abk5sZENrN1hHNGdJQ0FnYVdZZ0tITmxjM05wYjI1UGNIUnBiMjV6U0dGdVpHeGxJQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQjNZWE50TGw5UGNuUlNaV3hsWVhObFUyVnpjMmx2Yms5d2RHbHZibk1vYzJWemMybHZiazl3ZEdsdmJuTklZVzVrYkdVcE8xeHVJQ0FnSUgxY2JpQWdJQ0JoYkd4dlkzTXVabTl5UldGamFDaGhiR3h2WXlBOVBpQjNZWE50TGw5bWNtVmxLR0ZzYkc5aktTazdYRzVjYmlBZ0lDQXZMeUIxYm0xdmRXNTBJR1Y0ZEdWeWJtRnNJR1JoZEdFZ2FXWWdibVZqWlhOellYSjVYRzRnSUNBZ2QyRnpiUzUxYm0xdmRXNTBSWGgwWlhKdVlXeEVZWFJoUHk0b0tUdGNiaUFnZlZ4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElISmxiR1ZoYzJWVFpYTnphVzl1SUQwZ0tITmxjM05wYjI1SlpEb2diblZ0WW1WeUtUb2dkbTlwWkNBOVBpQjdYRzRnSUdOdmJuTjBJSGRoYzIwZ1BTQm5aWFJKYm5OMFlXNWpaU2dwTzF4dUlDQmpiMjV6ZENCelpYTnphVzl1SUQwZ1lXTjBhWFpsVTJWemMybHZibk11WjJWMEtITmxjM05wYjI1SlpDazdYRzRnSUdsbUlDZ2hjMlZ6YzJsdmJpa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1kyRnVibTkwSUhKbGJHVmhjMlVnYzJWemMybHZiaTRnYVc1MllXeHBaQ0J6WlhOemFXOXVJR2xrT2lBa2UzTmxjM05wYjI1SlpIMWdLVHRjYmlBZ2ZWeHVJQ0JqYjI1emRDQmJjMlZ6YzJsdmJraGhibVJzWlN3Z2FXNXdkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtMQ0J2ZFhSd2RYUk9ZVzFsYzFWVVJqaEZibU52WkdWa0xDQnBiMEpwYm1ScGJtZFRkR0YwWlN3Z1pXNWhZbXhsUjNKaGNHaERZWEIwZFhKbFhTQTlJSE5sYzNOcGIyNDdYRzVjYmlBZ2FXWWdLR2x2UW1sdVpHbHVaMU4wWVhSbEtTQjdYRzRnSUNBZ2FXWWdLR1Z1WVdKc1pVZHlZWEJvUTJGd2RIVnlaU2tnZTF4dUlDQWdJQ0FnZDJGemJTNWZUM0owUTJ4bFlYSkNiM1Z1WkU5MWRIQjFkSE1vYVc5Q2FXNWthVzVuVTNSaGRHVXVhR0Z1Wkd4bEtUdGNiaUFnSUNCOVhHNGdJQ0FnZDJGemJTNWZUM0owVW1Wc1pXRnpaVUpwYm1ScGJtY29hVzlDYVc1a2FXNW5VM1JoZEdVdWFHRnVaR3hsS1R0Y2JpQWdmVnh1WEc0Z0lIZGhjMjB1YW5ObGNFOXVVbVZzWldGelpWTmxjM05wYjI0L0xpaHpaWE56YVc5dVNXUXBPMXh1WEc0Z0lHbHVjSFYwVG1GdFpYTlZWRVk0Ulc1amIyUmxaQzVtYjNKRllXTm9LR0oxWmlBOVBpQjNZWE50TGw5UGNuUkdjbVZsS0dKMVppa3BPMXh1SUNCdmRYUndkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtMbVp2Y2tWaFkyZ29ZblZtSUQwK0lIZGhjMjB1WDA5eWRFWnlaV1VvWW5WbUtTazdYRzRnSUhkaGMyMHVYMDl5ZEZKbGJHVmhjMlZUWlhOemFXOXVLSE5sYzNOcGIyNUlZVzVrYkdVcE8xeHVJQ0JoWTNScGRtVlRaWE56YVc5dWN5NWtaV3hsZEdVb2MyVnpjMmx2Ymtsa0tUdGNibjA3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0J3Y21Wd1lYSmxTVzV3ZFhSUGRYUndkWFJVWlc1emIzSWdQVnh1SUNBZ0lDaDBaVzV6YjNJNklGUmxibk52Y2sxbGRHRmtZWFJoZkc1MWJHd3NJSFJsYm5OdmNraGhibVJzWlhNNklHNTFiV0psY2x0ZExDQmhiR3h2WTNNNklHNTFiV0psY2x0ZExDQnpaWE56YVc5dVNXUTZJRzUxYldKbGNpd2dhVzVrWlhnNklHNTFiV0psY2l4Y2JpQWdJQ0FnWlc1aFlteGxSM0poY0doRFlYQjBkWEpsSUQwZ1ptRnNjMlVwT2lCMmIybGtJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hkR1Z1YzI5eUtTQjdYRzRnSUNBZ0lDQWdJSFJsYm5OdmNraGhibVJzWlhNdWNIVnphQ2d3S1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCamIyNXpkQ0IzWVhOdElEMGdaMlYwU1c1emRHRnVZMlVvS1R0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnWkdGMFlWUjVjR1VnUFNCMFpXNXpiM0piTUYwN1hHNGdJQ0FnSUNCamIyNXpkQ0JrYVcxeklEMGdkR1Z1YzI5eVd6RmRPMXh1SUNBZ0lDQWdZMjl1YzNRZ2JHOWpZWFJwYjI0Z1BTQjBaVzV6YjNKYk0xMDdYRzVjYmlBZ0lDQWdJR3hsZENCeVlYZEVZWFJoT2lCdWRXMWlaWEk3WEc0Z0lDQWdJQ0JzWlhRZ1pHRjBZVUo1ZEdWTVpXNW5kR2c2SUc1MWJXSmxjanRjYmx4dUlDQWdJQ0FnYVdZZ0tHUmhkR0ZVZVhCbElEMDlQU0FuYzNSeWFXNW5KeUFtSmlCc2IyTmhkR2x2YmlBOVBUMGdKMmR3ZFMxaWRXWm1aWEluS1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblUzUnlhVzVuSUhSbGJuTnZjaUJwY3lCdWIzUWdjM1Z3Y0c5eWRHVmtJRzl1SUVkUVZTNG5LVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVdZZ0tHVnVZV0pzWlVkeVlYQm9RMkZ3ZEhWeVpTQW1KaUJzYjJOaGRHbHZiaUFoUFQwZ0oyZHdkUzFpZFdabVpYSW5LU0I3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjYmlBZ0lDQWdJQ0FnSUNBZ0lHQkZlSFJsY201aGJDQmlkV1ptWlhJZ2JYVnpkQ0JpWlNCd2NtOTJhV1JsWkNCbWIzSWdhVzV3ZFhRdmIzVjBjSFYwSUdsdVpHVjRJQ1I3YVc1a1pYaDlJSGRvWlc0Z1pXNWhZbXhsUjNKaGNHaERZWEIwZFhKbElHbHpJSFJ5ZFdVdVlDazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR2xtSUNoc2IyTmhkR2x2YmlBOVBUMGdKMmR3ZFMxaWRXWm1aWEluS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdkd2RVSjFabVpsY2lBOUlIUmxibk52Y2xzeVhTNW5jSFZDZFdabVpYSWdZWE1nUjFCVlFuVm1abVZ5TzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JsYkdWdFpXNTBVMmw2WlVsdVFubDBaWE1nUFNCblpYUlVaVzV6YjNKRmJHVnRaVzUwVTJsNlpTaDBaVzV6YjNKRVlYUmhWSGx3WlZOMGNtbHVaMVJ2Ulc1MWJTaGtZWFJoVkhsd1pTa3BJVHRjYmlBZ0lDQWdJQ0FnWkdGMFlVSjVkR1ZNWlc1bmRHZ2dQU0JrYVcxekxuSmxaSFZqWlNnb1lTd2dZaWtnUFQ0Z1lTQXFJR0lzSURFcElDb2daV3hsYldWdWRGTnBlbVZKYmtKNWRHVnpPMXh1WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsWjJsemRHVnlRblZtWm1WeUlEMGdkMkZ6YlM1cWMyVndVbVZuYVhOMFpYSkNkV1ptWlhJN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doY21WbmFYTjBaWEpDZFdabVpYSXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjFSbGJuTnZjaUJzYjJOaGRHbHZiaUJjSW1kd2RTMWlkV1ptWlhKY0lpQnBjeUJ1YjNRZ2MzVndjRzl5ZEdWa0lIZHBkR2h2ZFhRZ2RYTnBibWNnVjJWaVIxQlZMaWNwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmhkMFJoZEdFZ1BTQnlaV2RwYzNSbGNrSjFabVpsY2loelpYTnphVzl1U1dRc0lHbHVaR1Y0TENCbmNIVkNkV1ptWlhJc0lHUmhkR0ZDZVhSbFRHVnVaM1JvS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1JoZEdFZ1BTQjBaVzV6YjNKYk1sMDdYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tFRnljbUY1TG1selFYSnlZWGtvWkdGMFlTa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QnpkSEpwYm1jZ2RHVnVjMjl5WEc0Z0lDQWdJQ0FnSUNBZ1pHRjBZVUo1ZEdWTVpXNW5kR2dnUFNBMElDb2daR0YwWVM1c1pXNW5kR2c3WEc0Z0lDQWdJQ0FnSUNBZ2NtRjNSR0YwWVNBOUlIZGhjMjB1WDIxaGJHeHZZeWhrWVhSaFFubDBaVXhsYm1kMGFDazdYRzRnSUNBZ0lDQWdJQ0FnWVd4c2IyTnpMbkIxYzJnb2NtRjNSR0YwWVNrN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUdSaGRHRkpibVJsZUNBOUlISmhkMFJoZEdFZ0x5QTBPMXh1SUNBZ0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pHRjBZUzVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCa1lYUmhXMmxkSUNFOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLR0IwWlc1emIzSWdaR0YwWVNCaGRDQnBibVJsZUNBa2UybDlJR2x6SUc1dmRDQmhJSE4wY21sdVoyQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZDJGemJTNUlSVUZRVlRNeVcyUmhkR0ZKYm1SbGVDc3JYU0E5SUdGc2JHOWpWMkZ6YlZOMGNtbHVaeWhrWVhSaFcybGRMQ0JoYkd4dlkzTXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQmtZWFJoUW5sMFpVeGxibWQwYUNBOUlHUmhkR0V1WW5sMFpVeGxibWQwYUR0Y2JpQWdJQ0FnSUNBZ0lDQnlZWGRFWVhSaElEMGdkMkZ6YlM1ZmJXRnNiRzlqS0dSaGRHRkNlWFJsVEdWdVozUm9LVHRjYmlBZ0lDQWdJQ0FnSUNCaGJHeHZZM011Y0hWemFDaHlZWGRFWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0IzWVhOdExraEZRVkJWT0M1elpYUW9ibVYzSUZWcGJuUTRRWEp5WVhrb1pHRjBZUzVpZFdabVpYSXNJR1JoZEdFdVlubDBaVTltWm5ObGRDd2daR0YwWVVKNWRHVk1aVzVuZEdncExDQnlZWGRFWVhSaEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JqYjI1emRDQnpkR0ZqYXlBOUlIZGhjMjB1YzNSaFkydFRZWFpsS0NrN1hHNGdJQ0FnSUNCamIyNXpkQ0JrYVcxelQyWm1jMlYwSUQwZ2QyRnpiUzV6ZEdGamEwRnNiRzlqS0RRZ0tpQmthVzF6TG14bGJtZDBhQ2s3WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnNaWFFnWkdsdFNXNWtaWGdnUFNCa2FXMXpUMlptYzJWMElDOGdORHRjYmlBZ0lDQWdJQ0FnWkdsdGN5NW1iM0pGWVdOb0tHUWdQVDRnZDJGemJTNUlSVUZRTXpKYlpHbHRTVzVrWlhncksxMGdQU0JrS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZEdWdWMyOXlJRDBnZDJGemJTNWZUM0owUTNKbFlYUmxWR1Z1YzI5eUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdWdWMyOXlSR0YwWVZSNWNHVlRkSEpwYm1kVWIwVnVkVzBvWkdGMFlWUjVjR1VwTENCeVlYZEVZWFJoTENCa1lYUmhRbmwwWlV4bGJtZDBhQ3dnWkdsdGMwOW1abk5sZEN3Z1pHbHRjeTVzWlc1bmRHZ3NYRzRnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhURzlqWVhScGIyNVRkSEpwYm1kVWIwVnVkVzBvYkc5allYUnBiMjRwS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJsYm5OdmNpQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05vWldOclRHRnpkRVZ5Y205eUtHQkRZVzRuZENCamNtVmhkR1VnZEdWdWMyOXlJR1p2Y2lCcGJuQjFkQzl2ZFhSd2RYUXVJSE5sYzNOcGIyNDlKSHR6WlhOemFXOXVTV1I5TENCcGJtUmxlRDBrZTJsdVpHVjRmUzVnS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjBaVzV6YjNKSVlXNWtiR1Z6TG5CMWMyZ29kR1Z1YzI5eUtUdGNiaUFnSUNBZ0lIMGdabWx1WVd4c2VTQjdYRzRnSUNBZ0lDQWdJSGRoYzIwdWMzUmhZMnRTWlhOMGIzSmxLSE4wWVdOcktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVYRzR2S2lwY2JpQXFJSEJsY21admNtMGdhVzVtWlhKbGJtTmxJSEoxYmx4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ2NuVnVJRDBnWVhONWJtTW9YRzRnSUNBZ2MyVnpjMmx2Ymtsa09pQnVkVzFpWlhJc0lHbHVjSFYwU1c1a2FXTmxjem9nYm5WdFltVnlXMTBzSUdsdWNIVjBWR1Z1YzI5eWN6b2dWR1Z1YzI5eVRXVjBZV1JoZEdGYlhTd2diM1YwY0hWMFNXNWthV05sY3pvZ2JuVnRZbVZ5VzEwc1hHNGdJQ0FnYjNWMGNIVjBWR1Z1YzI5eWN6b2dRWEp5WVhrOFZHVnVjMjl5VFdWMFlXUmhkR0Y4Ym5Wc2JENHNJRzl3ZEdsdmJuTTZJRWx1Wm1WeVpXNWpaVk5sYzNOcGIyNHVVblZ1VDNCMGFXOXVjeWs2SUZCeWIyMXBjMlU4VkdWdWMyOXlUV1YwWVdSaGRHRmJYVDRnUFQ0Z2UxeHVJQ0JqYjI1emRDQjNZWE50SUQwZ1oyVjBTVzV6ZEdGdVkyVW9LVHRjYmlBZ1kyOXVjM1FnYzJWemMybHZiaUE5SUdGamRHbDJaVk5sYzNOcGIyNXpMbWRsZENoelpYTnphVzl1U1dRcE8xeHVJQ0JwWmlBb0lYTmxjM05wYjI0cElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUdOaGJtNXZkQ0J5ZFc0Z2FXNW1aWEpsYm1ObExpQnBiblpoYkdsa0lITmxjM05wYjI0Z2FXUTZJQ1I3YzJWemMybHZia2xrZldBcE8xeHVJQ0I5WEc0Z0lHTnZibk4wSUhObGMzTnBiMjVJWVc1a2JHVWdQU0J6WlhOemFXOXVXekJkTzF4dUlDQmpiMjV6ZENCcGJuQjFkRTVoYldWelZWUkdPRVZ1WTI5a1pXUWdQU0J6WlhOemFXOXVXekZkTzF4dUlDQmpiMjV6ZENCdmRYUndkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtJRDBnYzJWemMybHZibHN5WFR0Y2JpQWdZMjl1YzNRZ2FXOUNhVzVrYVc1blUzUmhkR1VnUFNCelpYTnphVzl1V3pOZE8xeHVJQ0JqYjI1emRDQmxibUZpYkdWSGNtRndhRU5oY0hSMWNtVWdQU0J6WlhOemFXOXVXelJkTzF4dUlDQmpiMjV6ZENCcGJuQjFkRTkxZEhCMWRFSnZkVzVrSUQwZ2MyVnpjMmx2YmxzMVhUdGNibHh1SUNCamIyNXpkQ0JwYm5CMWRFTnZkVzUwSUQwZ2FXNXdkWFJKYm1ScFkyVnpMbXhsYm1kMGFEdGNiaUFnWTI5dWMzUWdiM1YwY0hWMFEyOTFiblFnUFNCdmRYUndkWFJKYm1ScFkyVnpMbXhsYm1kMGFEdGNibHh1SUNCc1pYUWdjblZ1VDNCMGFXOXVjMGhoYm1Sc1pTQTlJREE3WEc0Z0lHeGxkQ0J5ZFc1UGNIUnBiMjV6UVd4c2IyTnpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVYRzRnSUdOdmJuTjBJR2x1Y0hWMFZHVnVjMjl5U0dGdVpHeGxjem9nYm5WdFltVnlXMTBnUFNCYlhUdGNiaUFnWTI5dWMzUWdiM1YwY0hWMFZHVnVjMjl5U0dGdVpHeGxjem9nYm5WdFltVnlXMTBnUFNCYlhUdGNiaUFnWTI5dWMzUWdhVzV3ZFhSUGRYUndkWFJCYkd4dlkzTTZJRzUxYldKbGNsdGRJRDBnVzEwN1hHNWNiaUFnWTI5dWMzUWdZbVZtYjNKbFVuVnVVM1JoWTJzZ1BTQjNZWE50TG5OMFlXTnJVMkYyWlNncE8xeHVJQ0JqYjI1emRDQnBibkIxZEZaaGJIVmxjMDltWm5ObGRDQTlJSGRoYzIwdWMzUmhZMnRCYkd4dll5aHBibkIxZEVOdmRXNTBJQ29nTkNrN1hHNGdJR052Ym5OMElHbHVjSFYwVG1GdFpYTlBabVp6WlhRZ1BTQjNZWE50TG5OMFlXTnJRV3hzYjJNb2FXNXdkWFJEYjNWdWRDQXFJRFFwTzF4dUlDQmpiMjV6ZENCdmRYUndkWFJXWVd4MVpYTlBabVp6WlhRZ1BTQjNZWE50TG5OMFlXTnJRV3hzYjJNb2IzVjBjSFYwUTI5MWJuUWdLaUEwS1R0Y2JpQWdZMjl1YzNRZ2IzVjBjSFYwVG1GdFpYTlBabVp6WlhRZ1BTQjNZWE50TG5OMFlXTnJRV3hzYjJNb2IzVjBjSFYwUTI5MWJuUWdLaUEwS1R0Y2JseHVJQ0IwY25rZ2UxeHVJQ0FnSUZ0eWRXNVBjSFJwYjI1elNHRnVaR3hsTENCeWRXNVBjSFJwYjI1elFXeHNiMk56WFNBOUlITmxkRkoxYms5d2RHbHZibk1vYjNCMGFXOXVjeWs3WEc1Y2JpQWdJQ0F2THlCamNtVmhkR1VnYVc1d2RYUWdkR1Z1YzI5eWMxeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2FXNXdkWFJEYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNCd2NtVndZWEpsU1c1d2RYUlBkWFJ3ZFhSVVpXNXpiM0lvWEc0Z0lDQWdJQ0FnSUNBZ2FXNXdkWFJVWlc1emIzSnpXMmxkTENCcGJuQjFkRlJsYm5OdmNraGhibVJzWlhNc0lHbHVjSFYwVDNWMGNIVjBRV3hzYjJOekxDQnpaWE56YVc5dVNXUXNJR2x1Y0hWMFNXNWthV05sYzF0cFhTd2daVzVoWW14bFIzSmhjR2hEWVhCMGRYSmxLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJqY21WaGRHVWdiM1YwY0hWMElIUmxibk52Y25OY2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc5MWRIQjFkRU52ZFc1ME95QnBLeXNwSUh0Y2JpQWdJQ0FnSUhCeVpYQmhjbVZKYm5CMWRFOTFkSEIxZEZSbGJuTnZjaWhjYmlBZ0lDQWdJQ0FnSUNCdmRYUndkWFJVWlc1emIzSnpXMmxkTENCdmRYUndkWFJVWlc1emIzSklZVzVrYkdWekxDQnBibkIxZEU5MWRIQjFkRUZzYkc5amN5d2djMlZ6YzJsdmJrbGtMQ0JwYm5CMWRFTnZkVzUwSUNzZ2IzVjBjSFYwU1c1a2FXTmxjMXRwWFN4Y2JpQWdJQ0FnSUNBZ0lDQmxibUZpYkdWSGNtRndhRU5oY0hSMWNtVXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHeGxkQ0JwYm5CMWRGWmhiSFZsYzBsdVpHVjRJRDBnYVc1d2RYUldZV3gxWlhOUFptWnpaWFFnTHlBME8xeHVJQ0FnSUd4bGRDQnBibkIxZEU1aGJXVnpTVzVrWlhnZ1BTQnBibkIxZEU1aGJXVnpUMlptYzJWMElDOGdORHRjYmlBZ0lDQnNaWFFnYjNWMGNIVjBWbUZzZFdWelNXNWtaWGdnUFNCdmRYUndkWFJXWVd4MVpYTlBabVp6WlhRZ0x5QTBPMXh1SUNBZ0lHeGxkQ0J2ZFhSd2RYUk9ZVzFsYzBsdVpHVjRJRDBnYjNWMGNIVjBUbUZ0WlhOUFptWnpaWFFnTHlBME8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2FXNXdkWFJEYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNCM1lYTnRMa2hGUVZCVk16SmJhVzV3ZFhSV1lXeDFaWE5KYm1SbGVDc3JYU0E5SUdsdWNIVjBWR1Z1YzI5eVNHRnVaR3hsYzF0cFhUdGNiaUFnSUNBZ0lIZGhjMjB1U0VWQlVGVXpNbHRwYm5CMWRFNWhiV1Z6U1c1a1pYZ3JLMTBnUFNCcGJuQjFkRTVoYldWelZWUkdPRVZ1WTI5a1pXUmJhVzV3ZFhSSmJtUnBZMlZ6VzJsZFhUdGNiaUFnSUNCOVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCdmRYUndkWFJEYjNWdWREc2dhU3NyS1NCN1hHNGdJQ0FnSUNCM1lYTnRMa2hGUVZCVk16SmJiM1YwY0hWMFZtRnNkV1Z6U1c1a1pYZ3JLMTBnUFNCdmRYUndkWFJVWlc1emIzSklZVzVrYkdWelcybGRPMXh1SUNBZ0lDQWdkMkZ6YlM1SVJVRlFWVE15VzI5MWRIQjFkRTVoYldWelNXNWtaWGdySzEwZ1BTQnZkWFJ3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrVzI5MWRIQjFkRWx1WkdsalpYTmJhVjFkTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNnaFFsVkpURVJmUkVWR1V5NUVTVk5CUWt4RlgxZEZRa2RRVlNBbUppQnBiMEpwYm1ScGJtZFRkR0YwWlNBbUppQWhhVzV3ZFhSUGRYUndkWFJDYjNWdVpDa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2UyaGhibVJzWlN3Z2IzVjBjSFYwVUhKbFptVnljbVZrVEc5allYUnBiMjV6TENCdmRYUndkWFJRY21WbVpYSnlaV1JNYjJOaGRHbHZibk5GYm1OdlpHVmtmU0E5SUdsdlFtbHVaR2x1WjFOMFlYUmxPMXh1WEc0Z0lDQWdJQ0JwWmlBb2FXNXdkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtMbXhsYm1kMGFDQWhQVDBnYVc1d2RYUkRiM1Z1ZENrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lHbHVjSFYwSUdOdmRXNTBJR1p5YjIwZ1ptVmxaSE1nS0NSN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwYm5CMWRFTnZkVzUwZlNrZ2FYTWdaWGh3WldOMFpXUWdkRzhnWW1VZ1lXeDNZWGx6SUdWeGRXRnNJSFJ2SUcxdlpHVnNKM01nYVc1d2RYUWdZMjkxYm5RZ0tDUjdhVzV3ZFhST1lXMWxjMVZVUmpoRmJtTnZaR1ZrTG14bGJtZDBhSDBwTG1BcE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQXZMeUJ3Y205alpYTnpJR2x1Y0hWMGMxeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnBibkIxZEVOdmRXNTBPeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FXNWtaWGdnUFNCcGJuQjFkRWx1WkdsalpYTmJhVjA3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1Z5Y205eVEyOWtaU0E5SUdGM1lXbDBJSGRoYzIwdVgwOXlkRUpwYm1SSmJuQjFkQ2hvWVc1a2JHVXNJR2x1Y0hWMFRtRnRaWE5WVkVZNFJXNWpiMlJsWkZ0cGJtUmxlRjBzSUdsdWNIVjBWR1Z1YzI5eVNHRnVaR3hsYzF0cFhTazdYRzRnSUNBZ0lDQWdJR2xtSUNobGNuSnZja052WkdVZ0lUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmphR1ZqYTB4aGMzUkZjbkp2Y2loZ1EyRnVKM1FnWW1sdVpDQnBibkIxZEZza2UybDlYU0JtYjNJZ2MyVnpjMmx2Ymowa2UzTmxjM05wYjI1SlpIMHVZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0x5OGdjSEp2WTJWemN5QndjbVV0WVd4c2IyTmhkR1ZrSUc5MWRIQjFkSE5jYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYjNWMGNIVjBRMjkxYm5RN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JwYm1SbGVDQTlJRzkxZEhCMWRFbHVaR2xqWlhOYmFWMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElHeHZZMkYwYVc5dUlEMGdiM1YwY0hWMFZHVnVjMjl5YzF0cFhUOHVXek5kT3lBZ0x5OGdkVzVrWldacGJtVmtJRzFsWVc1eklHOTFkSEIxZENCcGN5QnViM1FnY0hKbExXRnNiRzlqWVhSbFpDNWNibHh1SUNBZ0lDQWdJQ0JwWmlBb2JHOWpZWFJwYjI0cElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCdmRYUndkWFFnYVhNZ2NISmxMV0ZzYkc5allYUmxaQzRnWW1sdVpDQjBhR1VnZEdWdWMyOXlMbHh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1Z5Y205eVEyOWtaU0E5SUhkaGMyMHVYMDl5ZEVKcGJtUlBkWFJ3ZFhRb2FHRnVaR3hsTENCdmRYUndkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtXMmx1WkdWNFhTd2diM1YwY0hWMFZHVnVjMjl5U0dGdVpHeGxjMXRwWFN3Z01DazdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHVnljbTl5UTI5a1pTQWhQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJobFkydE1ZWE4wUlhKeWIzSW9ZRU5oYmlkMElHSnBibVFnY0hKbExXRnNiRzlqWVhSbFpDQnZkWFJ3ZFhSYkpIdHBmVjBnWm05eUlITmxjM05wYjI0OUpIdHpaWE56YVc5dVNXUjlMbUFwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCdmRYUndkWFFnYVhNZ2JtOTBJSEJ5WlMxaGJHeHZZMkYwWldRdUlISmxjMlYwSUhCeVpXWmxjbkpsWkNCc2IyTmhkR2x2Ymk1Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGNuSnZja052WkdVZ1BWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCM1lYTnRMbDlQY25SQ2FXNWtUM1YwY0hWMEtHaGhibVJzWlN3Z2IzVjBjSFYwVG1GdFpYTlZWRVk0Ulc1amIyUmxaRnRwYm1SbGVGMHNJREFzSUc5MWRIQjFkRkJ5WldabGNuSmxaRXh2WTJGMGFXOXVjMFZ1WTI5a1pXUmJhVzVrWlhoZEtUdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb1pYSnliM0pEYjJSbElDRTlQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYUdWamEweGhjM1JGY25KdmNpaGdRMkZ1SjNRZ1ltbHVaQ0J2ZFhSd2RYUmJKSHRwZlYwZ2RHOGdKSHR2ZFhSd2RYUlFjbVZtWlhKeVpXUk1iMk5oZEdsdmJuTmJhVjE5SUdadmNpQnpaWE56YVc5dVBTUjdjMlZ6YzJsdmJrbGtmUzVnS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR0ZqZEdsMlpWTmxjM05wYjI1ekxuTmxkQ2hjYmlBZ0lDQWdJQ0FnSUNCelpYTnphVzl1U1dRc1hHNGdJQ0FnSUNBZ0lDQWdXM05sYzNOcGIyNUlZVzVrYkdVc0lHbHVjSFYwVG1GdFpYTlZWRVk0Ulc1amIyUmxaQ3dnYjNWMGNIVjBUbUZ0WlhOVlZFWTRSVzVqYjJSbFpDd2dhVzlDYVc1a2FXNW5VM1JoZEdVc0lHVnVZV0pzWlVkeVlYQm9RMkZ3ZEhWeVpTd2dkSEoxWlYwcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhkaGMyMHVhbk5sY0U5dVVuVnVVM1JoY25RL0xpaHpaWE56YVc5dVNHRnVaR3hsS1R0Y2JpQWdJQ0JzWlhRZ1pYSnliM0pEYjJSbE9pQnVkVzFpWlhJN1hHNGdJQ0FnYVdZZ0tDRkNWVWxNUkY5RVJVWlRMa1JKVTBGQ1RFVmZWMFZDUjFCVklDWW1JR2x2UW1sdVpHbHVaMU4wWVhSbEtTQjdYRzRnSUNBZ0lDQmxjbkp2Y2tOdlpHVWdQU0JoZDJGcGRDQjNZWE50TGw5UGNuUlNkVzVYYVhSb1FtbHVaR2x1WnloY2JpQWdJQ0FnSUNBZ0lDQnpaWE56YVc5dVNHRnVaR3hsTENCcGIwSnBibVJwYm1kVGRHRjBaUzVvWVc1a2JHVXNJRzkxZEhCMWRFTnZkVzUwTENCdmRYUndkWFJXWVd4MVpYTlBabVp6WlhRc0lISjFiazl3ZEdsdmJuTklZVzVrYkdVcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JsY25KdmNrTnZaR1VnUFNCaGQyRnBkQ0IzWVhOdExsOVBjblJTZFc0b1hHNGdJQ0FnSUNBZ0lDQWdjMlZ6YzJsdmJraGhibVJzWlN3Z2FXNXdkWFJPWVcxbGMwOW1abk5sZEN3Z2FXNXdkWFJXWVd4MVpYTlBabVp6WlhRc0lHbHVjSFYwUTI5MWJuUXNJRzkxZEhCMWRFNWhiV1Z6VDJabWMyVjBMQ0J2ZFhSd2RYUkRiM1Z1ZEN4Y2JpQWdJQ0FnSUNBZ0lDQnZkWFJ3ZFhSV1lXeDFaWE5QWm1aelpYUXNJSEoxYms5d2RHbHZibk5JWVc1a2JHVXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hsY25KdmNrTnZaR1VnSVQwOUlEQXBJSHRjYmlBZ0lDQWdJR05vWldOclRHRnpkRVZ5Y205eUtDZG1ZV2xzWldRZ2RHOGdZMkZzYkNCUGNuUlNkVzRvS1M0bktUdGNiaUFnSUNCOVhHNWNiaUFnSUNCamIyNXpkQ0J2ZFhSd2RYUTZJRlJsYm5OdmNrMWxkR0ZrWVhSaFcxMGdQU0JiWFR0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2IzVjBjSFYwUTI5MWJuUTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZEdWdWMyOXlJRDBnZDJGemJTNUlSVUZRVlRNeVcyOTFkSEIxZEZaaGJIVmxjMDltWm5ObGRDQXZJRFFnS3lCcFhUdGNiaUFnSUNBZ0lHbG1JQ2gwWlc1emIzSWdQVDA5SUc5MWRIQjFkRlJsYm5OdmNraGhibVJzWlhOYmFWMHBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2IzVjBjSFYwSUhSbGJuTnZjaUJwY3lCd2NtVXRZV3hzYjJOaGRHVmtMaUJ1YnlCdVpXVmtJSFJ2SUdOdmNIa2daR0YwWVM1Y2JpQWdJQ0FnSUNBZ2IzVjBjSFYwTG5CMWMyZ29iM1YwY0hWMFZHVnVjMjl5YzF0cFhTRXBPMXh1SUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWTI5dWMzUWdZbVZtYjNKbFIyVjBWR1Z1YzI5eVJHRjBZVk4wWVdOcklEMGdkMkZ6YlM1emRHRmphMU5oZG1Vb0tUdGNiaUFnSUNBZ0lDOHZJSE4wWVdOcklHRnNiRzlqWVhSbElEUWdjRzlwYm5SbGNpQjJZV3gxWlZ4dUlDQWdJQ0FnWTI5dWMzUWdkR1Z1YzI5eVJHRjBZVTltWm5ObGRDQTlJSGRoYzIwdWMzUmhZMnRCYkd4dll5ZzBJQ29nTkNrN1hHNWNiaUFnSUNBZ0lHeGxkQ0JyWldWd1QzVjBjSFYwVkdWdWMyOXlJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQnNaWFFnZEhsd1pUb2dWR1Z1YzI5eUxsUjVjR1Y4ZFc1a1pXWnBibVZrTENCa1lYUmhUMlptYzJWMElEMGdNRHRjYmlBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdWeWNtOXlRMjlrWlNBOUlIZGhjMjB1WDA5eWRFZGxkRlJsYm5OdmNrUmhkR0VvWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBaVzV6YjNJc0lIUmxibk52Y2tSaGRHRlBabVp6WlhRc0lIUmxibk52Y2tSaGRHRlBabVp6WlhRZ0t5QTBMQ0IwWlc1emIzSkVZWFJoVDJabWMyVjBJQ3NnT0N3Z2RHVnVjMjl5UkdGMFlVOW1abk5sZENBcklERXlLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHVnljbTl5UTI5a1pTQWhQVDBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05vWldOclRHRnpkRVZ5Y205eUtHQkRZVzRuZENCaFkyTmxjM01nYjNWMGNIVjBJSFJsYm5OdmNpQmtZWFJoSUc5dUlHbHVaR1Y0SUNSN2FYMHVZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2JHVjBJSFJsYm5OdmNrUmhkR0ZKYm1SbGVDQTlJSFJsYm5OdmNrUmhkR0ZQWm1aelpYUWdMeUEwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JrWVhSaFZIbHdaU0E5SUhkaGMyMHVTRVZCVUZVek1sdDBaVzV6YjNKRVlYUmhTVzVrWlhncksxMDdYRzRnSUNBZ0lDQWdJR1JoZEdGUFptWnpaWFFnUFNCM1lYTnRMa2hGUVZCVk16SmJkR1Z1YzI5eVJHRjBZVWx1WkdWNEt5dGRPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmthVzF6VDJabWMyVjBJRDBnZDJGemJTNUlSVUZRVlRNeVczUmxibk52Y2tSaGRHRkpibVJsZUNzclhUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1pHbHRjMHhsYm1kMGFDQTlJSGRoYzIwdVNFVkJVRlV6TWx0MFpXNXpiM0pFWVhSaFNXNWtaWGdySzEwN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdScGJYTWdQU0JiWFR0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmthVzF6VEdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdJQ0JrYVcxekxuQjFjMmdvZDJGemJTNUlSVUZRVlRNeVcyUnBiWE5QWm1aelpYUWdMeUEwSUNzZ2FWMHBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhkaGMyMHVYMDl5ZEVaeVpXVW9aR2x0YzA5bVpuTmxkQ2s3WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzJsNlpTQTlJR1JwYlhNdWNtVmtkV05sS0NoaExDQmlLU0E5UGlCaElDb2dZaXdnTVNrN1hHNGdJQ0FnSUNBZ0lIUjVjR1VnUFNCMFpXNXpiM0pFWVhSaFZIbHdaVVZ1ZFcxVWIxTjBjbWx1Wnloa1lYUmhWSGx3WlNrN1hHNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NISmxabVZ5Y21Wa1RHOWpZWFJwYjI0Z1BTQnBiMEpwYm1ScGJtZFRkR0YwWlQ4dWIzVjBjSFYwVUhKbFptVnljbVZrVEc5allYUnBiMjV6VzI5MWRIQjFkRWx1WkdsalpYTmJhVjFkTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbElEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2h3Y21WbVpYSnlaV1JNYjJOaGRHbHZiaUE5UFQwZ0oyZHdkUzFpZFdabVpYSW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0oxTjBjbWx1WnlCMFpXNXpiM0lnYVhNZ2JtOTBJSE4xY0hCdmNuUmxaQ0J2YmlCSFVGVXVKeWs3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElITjBjbWx1WjBSaGRHRTZJSE4wY21sdVoxdGRJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lDQWdiR1YwSUdSaGRHRkpibVJsZUNBOUlHUmhkR0ZQWm1aelpYUWdMeUEwTzF4dUlDQWdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2djMmw2WlRzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdlptWnpaWFFnUFNCM1lYTnRMa2hGUVZCVk16SmJaR0YwWVVsdVpHVjRLeXRkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JXRjRRbmwwWlhOVWIxSmxZV1FnUFNCcElEMDlQU0J6YVhwbElDMGdNU0EvSUhWdVpHVm1hVzVsWkNBNklIZGhjMjB1U0VWQlVGVXpNbHRrWVhSaFNXNWtaWGhkSUMwZ2IyWm1jMlYwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjM1J5YVc1blJHRjBZUzV3ZFhOb0tIZGhjMjB1VlZSR09GUnZVM1J5YVc1bktHOW1abk5sZEN3Z2JXRjRRbmwwWlhOVWIxSmxZV1FwS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnYjNWMGNIVjBMbkIxYzJnb1czUjVjR1VzSUdScGJYTXNJSE4wY21sdVowUmhkR0VzSUNkamNIVW5YU2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdTV1lnWVNCalpYSjBZV2x1SUc5MWRIQjFkQ2R6SUhCeVpXWmxjbkpsWkNCc2IyTmhkR2x2YmlCcGN5QkhVRlVnWW5WMElIUm9aU0IwWlc1emIzSWdhWE1nWlcxd2RIa3NJSGRsSUhOMGFXeHNJRzVsWldRZ2RHOGdZM0psWVhSbElHRWdRMUJWWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkR1Z1YzI5eUlHWnZjaUJwZEM0Z1ZHaGxjbVVnYVhNZ2JtOGdiV0Z3Y0dsdVp5QkhVRlVnWW5WbVptVnlJR1p2Y2lCaGJpQmxiWEIwZVNCMFpXNXpiM0l1WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSEJ5WldabGNuSmxaRXh2WTJGMGFXOXVJRDA5UFNBblozQjFMV0oxWm1abGNpY2dKaVlnYzJsNlpTQStJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHZGxkRUoxWm1abGNpQTlJSGRoYzIwdWFuTmxjRWRsZEVKMVptWmxjanRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2doWjJWMFFuVm1abVZ5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduY0hKbFptVnljbVZrVEc5allYUnBiMjRnWENKbmNIVXRZblZtWm1WeVhDSWdhWE1nYm05MElITjFjSEJ2Y25SbFpDQjNhWFJvYjNWMElIVnphVzVuSUZkbFlrZFFWUzRuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdkd2RVSjFabVpsY2lBOUlHZGxkRUoxWm1abGNpaGtZWFJoVDJabWMyVjBLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdWc1pXMWxiblJUYVhwbElEMGdaMlYwVkdWdWMyOXlSV3hsYldWdWRGTnBlbVVvWkdGMFlWUjVjR1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dWc1pXMWxiblJUYVhwbElEMDlQU0IxYm1SbFptbHVaV1FnZkh3Z0lXbHpSM0IxUW5WbVptVnlVM1Z3Y0c5eWRHVmtWSGx3WlNoMGVYQmxLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRlZ1YzNWd2NHOXlkR1ZrSUdSaGRHRWdkSGx3WlRvZ0pIdDBlWEJsZldBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCa2J5QnViM1FnY21Wc1pXRnpaU0IwYUdVZ2RHVnVjMjl5SUhKcFoyaDBJRzV2ZHk0Z2FYUWdkMmxzYkNCaVpTQnlaV3hsWVhObFpDQjNhR1Z1SUhWelpYSWdZMkZzYkhNZ2RHVnVjMjl5TG1ScGMzQnZjMlVvS1M1Y2JpQWdJQ0FnSUNBZ0lDQWdJR3RsWlhCUGRYUndkWFJVWlc1emIzSWdQU0IwY25WbE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCdmRYUndkWFF1Y0hWemFDaGJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1VzSUdScGJYTXNJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JuY0hWQ2RXWm1aWElzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkc5M2JteHZZV1E2SUhkaGMyMHVhbk5sY0VOeVpXRjBaVVJ2ZDI1c2IyRmtaWEloS0dkd2RVSjFabVpsY2l3Z2MybDZaU0FxSUdWc1pXMWxiblJUYVhwbExDQjBlWEJsS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2FYTndiM05sT2lBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCM1lYTnRMbDlQY25SU1pXeGxZWE5sVkdWdWMyOXlLSFJsYm5OdmNpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQW5aM0IxTFdKMVptWmxjaWRjYmlBZ0lDQWdJQ0FnSUNBZ0lGMHBPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCMGVYQmxaRUZ5Y21GNVEyOXVjM1J5ZFdOMGIzSWdQU0IwWlc1emIzSlVlWEJsVkc5VWVYQmxaRUZ5Y21GNVEyOXVjM1J5ZFdOMGIzSW9kSGx3WlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmtZWFJoSUQwZ2JtVjNJSFI1Y0dWa1FYSnlZWGxEYjI1emRISjFZM1J2Y2loemFYcGxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHNWxkeUJWYVc1ME9FRnljbUY1S0dSaGRHRXVZblZtWm1WeUxDQmtZWFJoTG1KNWRHVlBabVp6WlhRc0lHUmhkR0V1WW5sMFpVeGxibWQwYUNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdWMyVjBLSGRoYzIwdVNFVkJVRlU0TG5OMVltRnljbUY1S0dSaGRHRlBabVp6WlhRc0lHUmhkR0ZQWm1aelpYUWdLeUJrWVhSaExtSjVkR1ZNWlc1bmRHZ3BLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHOTFkSEIxZEM1d2RYTm9LRnQwZVhCbExDQmthVzF6TENCa1lYUmhMQ0FuWTNCMUoxMHBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTQm1hVzVoYkd4NUlIdGNiaUFnSUNBZ0lDQWdkMkZ6YlM1emRHRmphMUpsYzNSdmNtVW9ZbVZtYjNKbFIyVjBWR1Z1YzI5eVJHRjBZVk4wWVdOcktUdGNiaUFnSUNBZ0lDQWdhV1lnS0hSNWNHVWdQVDA5SUNkemRISnBibWNuSUNZbUlHUmhkR0ZQWm1aelpYUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCM1lYTnRMbDltY21WbEtHUmhkR0ZQWm1aelpYUXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hhMlZsY0U5MWRIQjFkRlJsYm5OdmNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUhkaGMyMHVYMDl5ZEZKbGJHVmhjMlZVWlc1emIzSW9kR1Z1YzI5eUtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hwYjBKcGJtUnBibWRUZEdGMFpTQW1KaUFoWlc1aFlteGxSM0poY0doRFlYQjBkWEpsS1NCN1hHNGdJQ0FnSUNCM1lYTnRMbDlQY25SRGJHVmhja0p2ZFc1a1QzVjBjSFYwY3locGIwSnBibVJwYm1kVGRHRjBaUzVvWVc1a2JHVXBPMXh1SUNBZ0lDQWdZV04wYVhabFUyVnpjMmx2Ym5NdWMyVjBLRnh1SUNBZ0lDQWdJQ0FnSUhObGMzTnBiMjVKWkN4Y2JpQWdJQ0FnSUNBZ0lDQmJjMlZ6YzJsdmJraGhibVJzWlN3Z2FXNXdkWFJPWVcxbGMxVlVSamhGYm1OdlpHVmtMQ0J2ZFhSd2RYUk9ZVzFsYzFWVVJqaEZibU52WkdWa0xDQnBiMEpwYm1ScGJtZFRkR0YwWlN3Z1pXNWhZbXhsUjNKaGNHaERZWEIwZFhKbExDQm1ZV3h6WlYwcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdiM1YwY0hWME8xeHVJQ0I5SUdacGJtRnNiSGtnZTF4dUlDQWdJSGRoYzIwdWMzUmhZMnRTWlhOMGIzSmxLR0psWm05eVpWSjFibE4wWVdOcktUdGNibHh1SUNBZ0lHbHVjSFYwVkdWdWMyOXlTR0Z1Wkd4bGN5NW1iM0pGWVdOb0tIWWdQVDRnZDJGemJTNWZUM0owVW1Wc1pXRnpaVlJsYm5OdmNpaDJLU2s3WEc0Z0lDQWdiM1YwY0hWMFZHVnVjMjl5U0dGdVpHeGxjeTVtYjNKRllXTm9LSFlnUFQ0Z2QyRnpiUzVmVDNKMFVtVnNaV0Z6WlZSbGJuTnZjaWgyS1NrN1hHNGdJQ0FnYVc1d2RYUlBkWFJ3ZFhSQmJHeHZZM011Wm05eVJXRmphQ2h3SUQwK0lIZGhjMjB1WDJaeVpXVW9jQ2twTzF4dVhHNGdJQ0FnYVdZZ0tISjFiazl3ZEdsdmJuTklZVzVrYkdVZ0lUMDlJREFwSUh0Y2JpQWdJQ0FnSUhkaGMyMHVYMDl5ZEZKbGJHVmhjMlZTZFc1UGNIUnBiMjV6S0hKMWJrOXdkR2x2Ym5OSVlXNWtiR1VwTzF4dUlDQWdJSDFjYmlBZ0lDQnlkVzVQY0hScGIyNXpRV3hzYjJOekxtWnZja1ZoWTJnb2NDQTlQaUIzWVhOdExsOW1jbVZsS0hBcEtUdGNiaUFnZlZ4dWZUdGNibHh1THlvcVhHNGdLaUJsYm1RZ2NISnZabWxzYVc1blhHNGdLaTljYm1WNGNHOXlkQ0JqYjI1emRDQmxibVJRY205bWFXeHBibWNnUFNBb2MyVnpjMmx2Ymtsa09pQnVkVzFpWlhJcE9pQjJiMmxrSUQwK0lIdGNiaUFnWTI5dWMzUWdkMkZ6YlNBOUlHZGxkRWx1YzNSaGJtTmxLQ2s3WEc0Z0lHTnZibk4wSUhObGMzTnBiMjRnUFNCaFkzUnBkbVZUWlhOemFXOXVjeTVuWlhRb2MyVnpjMmx2Ymtsa0tUdGNiaUFnYVdZZ0tDRnpaWE56YVc5dUtTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkcGJuWmhiR2xrSUhObGMzTnBiMjRnYVdRbktUdGNiaUFnZlZ4dUlDQmpiMjV6ZENCelpYTnphVzl1U0dGdVpHeGxJRDBnYzJWemMybHZibHN3WFR0Y2JseHVJQ0F2THlCd2NtOW1hV3hsSUdacGJHVWdibUZ0WlNCcGN5QnViM1FnZFhObFpDQjVaWFFzSUdKMWRDQnBkQ0J0ZFhOMElHSmxJR1p5WldWa0xseHVJQ0JqYjI1emRDQndjbTltYVd4bFJtbHNaVTVoYldVZ1BTQjNZWE50TGw5UGNuUkZibVJRY205bWFXeHBibWNvYzJWemMybHZia2hoYm1Sc1pTazdYRzRnSUdsbUlDaHdjbTltYVd4bFJtbHNaVTVoYldVZ1BUMDlJREFwSUh0Y2JpQWdJQ0JqYUdWamEweGhjM1JGY25KdmNpZ25RMkZ1WEZ3bmRDQm5aWFFnWVc0Z2NISnZabWxzWlNCbWFXeGxJRzVoYldVdUp5azdYRzRnSUgxY2JpQWdkMkZ6YlM1ZlQzSjBSbkpsWlNod2NtOW1hV3hsUm1sc1pVNWhiV1VwTzF4dWZUdGNibHh1Wlhod2IzSjBJR052Ym5OMElHVjRkSEpoWTNSVWNtRnVjMlpsY21GaWJHVkNkV1ptWlhKeklEMGdLSFJsYm5OdmNuTTZJSEpsWVdSdmJteDVJRk5sY21saGJHbDZZV0pzWlZSbGJuTnZjazFsZEdGa1lYUmhXMTBwT2lCQmNuSmhlVUoxWm1abGNreHBhMlZiWFNBOVBpQjdYRzRnSUdOdmJuTjBJR0oxWm1abGNuTTZJRUZ5Y21GNVFuVm1abVZ5VEdsclpWdGRJRDBnVzEwN1hHNGdJR1p2Y2lBb1kyOXVjM1FnZEdWdWMyOXlJRzltSUhSbGJuTnZjbk1wSUh0Y2JpQWdJQ0JqYjI1emRDQmtZWFJoSUQwZ2RHVnVjMjl5V3pKZE8xeHVJQ0FnSUdsbUlDZ2hRWEp5WVhrdWFYTkJjbkpoZVNoa1lYUmhLU0FtSmlBblluVm1abVZ5SnlCcGJpQmtZWFJoS1NCN1hHNGdJQ0FnSUNCaWRXWm1aWEp6TG5CMWMyZ29aR0YwWVM1aWRXWm1aWElwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdZblZtWm1WeWN6dGNibjA3WEc0aUxDQWlMeThnUTI5d2VYSnBaMmgwSUNoaktTQk5hV055YjNOdlpuUWdRMjl5Y0c5eVlYUnBiMjR1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNHZMeUJNYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnVFVsVUlFeHBZMlZ1YzJVdVhHNWNibWx0Y0c5eWRDQXFJR0Z6SUdaeklHWnliMjBnSjJaekp6dGNibWx0Y0c5eWRDQjdjbVZoWkVacGJHVjlJR1p5YjIwZ0oyNXZaR1U2Wm5NdmNISnZiV2x6WlhNbk8xeHVYRzR2S2lwY2JpQXFJRXh2WVdRZ1lTQm1hV3hsSUdsdWRHOGdZU0JWYVc1ME9FRnljbUY1TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0JtYVd4bElDMGdkR2hsSUdacGJHVWdkRzhnYkc5aFpDNGdRMkZ1SUdKbElHRWdWVkpNTDNCaGRHZ3NJR0VnUW14dllpd2dZVzRnUVhKeVlYbENkV1ptWlhJc0lHOXlJR0VnVldsdWREaEJjbkpoZVM1Y2JpQXFJRUJ5WlhSMWNtNXpJR0VnVldsdWREaEJjbkpoZVNCamIyNTBZV2x1YVc1bklIUm9aU0JtYVd4bElHUmhkR0V1WEc0Z0tpOWNibVY0Y0c5eWRDQmpiMjV6ZENCc2IyRmtSbWxzWlNBOUlHRnplVzVqS0dacGJHVTZJSE4wY21sdVozeENiRzlpZkVGeWNtRjVRblZtWm1WeVRHbHJaWHhWYVc1ME9FRnljbUY1S1RvZ1VISnZiV2x6WlR4VmFXNTBPRUZ5Y21GNVBpQTlQaUI3WEc0Z0lHbG1JQ2gwZVhCbGIyWWdabWxzWlNBOVBUMGdKM04wY21sdVp5Y3BJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JSEJ5YjJObGMzTWdJVDA5SUNkMWJtUmxabWx1WldRbklDWW1JSEJ5YjJObGMzTXVkbVZ5YzJsdmJuTWdKaVlnY0hKdlkyVnpjeTUyWlhKemFXOXVjeTV1YjJSbEtTQjdYRzRnSUNBZ0lDQXZMeUJzYjJGa0lHWnBiR1VnYVc1MGJ5QkJjbkpoZVVKMVptWmxjaUJwYmlCT2IyUmxMbXB6WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JtVjNJRlZwYm5RNFFYSnlZWGtvWVhkaGFYUWdjbVZoWkVacGJHVW9abWxzWlNrcE8xeHVJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pTNWpiMlJsSUQwOVBTQW5SVkpTWDBaVFgwWkpURVZmVkU5UFgweEJVa2RGSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUdacGJHVWdhWE1nZEc5dklHeGhjbWRsTENCMWMyVWdabk11WTNKbFlYUmxVbVZoWkZOMGNtVmhiU0JwYm5OMFpXRmtYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjM1J5WldGdElEMGdabk11WTNKbFlYUmxVbVZoWkZOMGNtVmhiU2htYVd4bEtUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmphSFZ1YTNNNklGVnBiblE0UVhKeVlYbGJYU0E5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJR1p2Y2lCaGQyRnBkQ0FvWTI5dWMzUWdZMmgxYm1zZ2IyWWdjM1J5WldGdEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamFIVnVhM011Y0hWemFDaGphSFZ1YXlrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1ZXbHVkRGhCY25KaGVTaENkV1ptWlhJdVkyOXVZMkYwS0dOb2RXNXJjeWtwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIUm9jbTkzSUdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQzh2SUd4dllXUWdabWxzWlNCcGJuUnZJRUZ5Y21GNVFuVm1abVZ5SUdsdUlHSnliM2R6WlhKelhHNGdJQ0FnSUNCamIyNXpkQ0J5WlhOd2IyNXpaU0E5SUdGM1lXbDBJR1psZEdOb0tHWnBiR1VwTzF4dUlDQWdJQ0FnYVdZZ0tDRnlaWE53YjI1elpTNXZheWtnZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUdaaGFXeGxaQ0IwYnlCc2IyRmtJR1Y0ZEdWeWJtRnNJR1JoZEdFZ1ptbHNaVG9nSkh0bWFXeGxmV0FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWTI5dWMzUWdZMjl1ZEdWdWRFeGxibWQwYUVobFlXUmxjaUE5SUhKbGMzQnZibk5sTG1obFlXUmxjbk11WjJWMEtDZERiMjUwWlc1MExVeGxibWQwYUNjcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWm1sc1pWTnBlbVVnUFNCamIyNTBaVzUwVEdWdVozUm9TR1ZoWkdWeUlEOGdjR0Z5YzJWSmJuUW9ZMjl1ZEdWdWRFeGxibWQwYUVobFlXUmxjaXdnTVRBcElEb2dNRHRjYmlBZ0lDQWdJR2xtSUNobWFXeGxVMmw2WlNBOElERXdOek0zTkRFNE1qUWdMeW9nTVVkQ0lDb3ZLU0I3WEc0Z0lDQWdJQ0FnSUM4dklIZG9aVzRnUTI5dWRHVnVkQzFNWlc1bmRHZ2dhR1ZoWkdWeUlHbHpJRzV2ZENCelpYUXNJSGRsSUdOaGJtNXZkQ0JrWlhSbGNtMXBibVVnZEdobElHWnBiR1VnYzJsNlpTNGdWMlVnWVhOemRXMWxJR2wwSUdseklITnRZV3hzSUdWdWIzVm5hQ0IwYjF4dUlDQWdJQ0FnSUNBdkx5QnNiMkZrSUdsdWRHOGdiV1Z0YjNKNUxseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JtVjNJRlZwYm5RNFFYSnlZWGtvWVhkaGFYUWdjbVZ6Y0c5dWMyVXVZWEp5WVhsQ2RXWm1aWElvS1NrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBdkx5Qm1hV3hsSUdseklIUnZieUJzWVhKblpTd2dkWE5sSUhOMGNtVmhiU0JwYm5OMFpXRmtYRzRnSUNBZ0lDQWdJR2xtSUNnaGNtVnpjRzl1YzJVdVltOWtlU2tnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1ptRnBiR1ZrSUhSdklHeHZZV1FnWlhoMFpYSnVZV3dnWkdGMFlTQm1hV3hsT2lBa2UyWnBiR1Y5TENCdWJ5QnlaWE53YjI1elpTQmliMlI1TG1BcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR052Ym5OMElISmxZV1JsY2lBOUlISmxjM0J2Ym5ObExtSnZaSGt1WjJWMFVtVmhaR1Z5S0NrN1hHNWNiaUFnSUNBZ0lDQWdiR1YwSUdKMVptWmxjanRjYmlBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCMGNua2dkRzhnWTNKbFlYUmxJRUZ5Y21GNVFuVm1abVZ5SUdScGNtVmpkR3g1WEc0Z0lDQWdJQ0FnSUNBZ1luVm1abVZ5SUQwZ2JtVjNJRUZ5Y21GNVFuVm1abVZ5S0dacGJHVlRhWHBsS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaGxJR2x1YzNSaGJtTmxiMllnVW1GdVoyVkZjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2RYTmxJRmRsWWtGemMyVnRZbXg1SUUxbGJXOXllU0IwYnlCaGJHeHZZMkYwWlNCc1lYSm5aWElnUVhKeVlYbENkV1ptWlhKY2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElIQmhaMlZ6SUQwZ1RXRjBhQzVqWldsc0tHWnBiR1ZUYVhwbElDOGdOalUxTXpZcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWW5WbVptVnlJRDBnYm1WM0lGZGxZa0Z6YzJWdFlteDVMazFsYlc5eWVTaDdhVzVwZEdsaGJEb2djR0ZuWlhNc0lHMWhlR2x0ZFcwNklIQmhaMlZ6ZlNrdVluVm1abVZ5TzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUhKdmR5QmxPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR3hsZENCdlptWnpaWFFnUFNBd08xeHVJQ0FnSUNBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdibTh0WTI5dWMzUmhiblF0WTI5dVpHbDBhVzl1WEc0Z0lDQWdJQ0FnSUhkb2FXeGxJQ2gwY25WbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdlMlJ2Ym1Vc0lIWmhiSFZsZlNBOUlHRjNZV2wwSUhKbFlXUmxjaTV5WldGa0tDazdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHUnZibVVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JqYUhWdWExTnBlbVVnUFNCMllXeDFaUzVpZVhSbFRHVnVaM1JvTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdOb2RXNXJJRDBnYm1WM0lGVnBiblE0UVhKeVlYa29ZblZtWm1WeUxDQnZabVp6WlhRc0lHTm9kVzVyVTJsNlpTazdYRzRnSUNBZ0lDQWdJQ0FnWTJoMWJtc3VjMlYwS0haaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnSUNCdlptWnpaWFFnS3owZ1kyaDFibXRUYVhwbE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnVldsdWREaEJjbkpoZVNoaWRXWm1aWElzSURBc0lHWnBiR1ZUYVhwbEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnZlNCbGJITmxJR2xtSUNobWFXeGxJR2x1YzNSaGJtTmxiMllnUW14dllpa2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dWV2x1ZERoQmNuSmhlU2hoZDJGcGRDQm1hV3hsTG1GeWNtRjVRblZtWm1WeUtDa3BPMXh1SUNCOUlHVnNjMlVnYVdZZ0tHWnBiR1VnYVc1emRHRnVZMlZ2WmlCVmFXNTBPRUZ5Y21GNUtTQjdYRzRnSUNBZ2NtVjBkWEp1SUdacGJHVTdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJWYVc1ME9FRnljbUY1S0dacGJHVXBPMXh1SUNCOVhHNTlPMXh1SWl3Z0ltVjRjRzl5ZENCamIyNXpkQ0J5WldGa1JtbHNaU0E5SUhWdVpHVm1hVzVsWkR0bGVIQnZjblFnWTI5dWMzUWdjbVZoWkVacGJHVlRlVzVqSUQwZ2RXNWtaV1pwYm1Wa08yVjRjRzl5ZENCamIyNXpkQ0JqY21WaGRHVlNaV0ZrVTNSeVpXRnRJRDBnZFc1a1pXWnBibVZrT3lJc0lDSXZMeUJEYjNCNWNtbG5hSFFnS0dNcElFMXBZM0p2YzI5bWRDQkRiM0p3YjNKaGRHbHZiaTRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpOHZJRXhwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JOU1ZRZ1RHbGpaVzV6WlM1Y2JseHVMeTh2SUR4eVpXWmxjbVZ1WTJVZ2JHbGlQVndpZDJWaWQyOXlhMlZ5WENJZ0x6NWNibHh1THk5Y2JpOHZJQ29nZEhsd1pTQm9ZV05ySUdadmNpQmNJa2hVVFV4SmJXRm5aVVZzWlcxbGJuUmNJbHh1THk5Y2JpOHZJR2x1SUhSNWNHVnpZM0pwY0hRc0lIUm9aU0IwZVhCbElHOW1JRndpU0ZSTlRFbHRZV2RsUld4bGJXVnVkRndpSUdseklHUmxabWx1WldRZ2FXNGdiR2xpTG1SdmJTNWtMblJ6TENCM2FHbGphQ0JwY3lCamIyNW1iR2xqZENCM2FYUm9JR3hwWWk1M1pXSjNiM0pyWlhJdVpDNTBjeTVjYmk4dklIZG9aVzRnZDJVZ2RYTmxJSGRsWW5kdmNtdGxjaXdnZEdobElHeHBZaTUzWldKM2IzSnJaWEl1WkM1MGN5QjNhV3hzSUdKbElIVnpaV1FzSUhkb2FXTm9JR1J2WlhNZ2JtOTBJR2hoZG1VZ1NGUk5URWx0WVdkbFJXeGxiV1Z1ZENCa1pXWnBibVZrTGx4dUx5OWNiaTh2SUhkbElIZHBiR3dnWjJWMElIUm9aU0JtYjJ4c2IzZHBibWNnWlhKeWIzSnpJR052YlhCc1lXbHVhVzVuSUhSb1lYUWdTRlJOVEVsdFlXZGxSV3hsYldWdWRDQnBjeUJ1YjNRZ1pHVm1hVzVsWkRwY2JpOHZYRzR2THlBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUx5OWNiaTh2SUM0dUwyTnZiVzF2Ymk5a2FYTjBMMk5xY3k5MFpXNXpiM0l0Wm1GamRHOXllUzVrTG5Sek9qRTROem95T1NBdElHVnljbTl5SUZSVE1qVTFNam9nUTJGdWJtOTBJR1pwYm1RZ2JtRnRaU0FuU0ZSTlRFbHRZV2RsUld4bGJXVnVkQ2N1SUVScFpDQjViM1VnYldWaGJseHVMeThnSjBoVVRVeE1TVVZzWlcxbGJuUW5QMXh1THk5Y2JpOHZJREU0TnlBZ0lDQWdabkp2YlVsdFlXZGxLR2x0WVdkbFJXeGxiV1Z1ZERvZ1NGUk5URWx0WVdkbFJXeGxiV1Z1ZEN3Z2IzQjBhVzl1Y3o4NklGUmxibk52Y2taeWIyMUpiV0ZuWlVWc1pXMWxiblJQY0hScGIyNXpLVHBjYmk4dklGQnliMjFwYzJVOFZIbHdaV1JVWlc1emIzSThKMlpzYjJGME16SW5QaUI4SUZSNWNHVmtWR1Z1YzI5eVBDZDFhVzUwT0NjK1BqdGNiaTh2SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmbjUrZm41K2ZuNStmbjUrZm41K2ZseHVMeTljYmk4dklHNXZaR1ZmYlc5a2RXeGxjeTlBZDJWaVozQjFMM1I1Y0dWekwyUnBjM1F2YVc1a1pYZ3VaQzUwY3pvNE16bzNJQzBnWlhKeWIzSWdWRk15TlRVeU9pQkRZVzV1YjNRZ1ptbHVaQ0J1WVcxbElDZElWRTFNU1cxaFoyVkZiR1Z0Wlc1MEp5NGdSR2xrSUhsdmRTQnRaV0Z1WEc0dkx5QW5TRlJOVEV4SlJXeGxiV1Z1ZENjL1hHNHZMMXh1THk4Z09ETWdJQ0FnSUh3Z1NGUk5URWx0WVdkbFJXeGxiV1Z1ZEZ4dUx5OGdJQ0FnSUNBZ0lDQWdmbjUrZm41K2ZuNStmbjUrZm41K2ZseHVMeTljYmk4dklEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNHZMMXh1THk4Z1lFaFVUVXhKYldGblpVVnNaVzFsYm5SZ0lHbHpJRzl1YkhrZ2RYTmxaQ0JwYmlCMGVYQmxJR1JsWTJ4aGNtRjBhVzl1SUdGdVpDQnViM1FnYVc0Z2NtVmhiQ0JqYjJSbExpQlRieUIzWlNCa1pXWnBibVVnYVhRZ1lYTWdZSFZ1YTI1dmQyNWdJR2hsY21VZ2RHOWNiaTh2SUdKNWNHRnpjeUIwYUdVZ2RIbHdaU0JqYUdWamF5NWNiaTh2WEc1a1pXTnNZWEpsSUdkc2IySmhiQ0I3WEc0Z0lIUjVjR1VnU0ZSTlRFbHRZV2RsUld4bGJXVnVkQ0E5SUhWdWEyNXZkMjQ3WEc1OVhHNWNibWx0Y0c5eWRDQjdUM0owVjJGemJVMWxjM05oWjJVc0lGTmxjbWxoYkdsNllXSnNaVlJsYm5OdmNrMWxkR0ZrWVhSaGZTQm1jbTl0SUNjdUxpOXdjbTk0ZVMxdFpYTnpZV2RsY3ljN1hHNXBiWEJ2Y25RZ2UyTnlaV0YwWlZObGMzTnBiMjRzSUdOdmNIbEdjbTl0UlhoMFpYSnVZV3hDZFdabVpYSXNJR1Z1WkZCeWIyWnBiR2x1Wnl3Z1pYaDBjbUZqZEZSeVlXNXpabVZ5WVdKc1pVSjFabVpsY25Nc0lHbHVhWFJGY0N3Z2FXNXBkRkoxYm5ScGJXVXNJSEpsYkdWaGMyVlRaWE56YVc5dUxDQnlkVzU5SUdaeWIyMGdKeTR1TDNkaGMyMHRZMjl5WlMxcGJYQnNKenRjYm1sdGNHOXlkQ0I3YVc1cGRHbGhiR2w2WlZkbFlrRnpjMlZ0WW14NWZTQm1jbTl0SUNjdUxpOTNZWE50TFdaaFkzUnZjbmtuTzF4dVhHNXpaV3htTG05dWJXVnpjMkZuWlNBOUlDaGxkam9nVFdWemMyRm5aVVYyWlc1MFBFOXlkRmRoYzIxTlpYTnpZV2RsUGlrNklIWnZhV1FnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdkSGx3WlN3Z2FXNGdPaUJ0WlhOellXZGxmU0E5SUdWMkxtUmhkR0U3WEc0Z0lIUnllU0I3WEc0Z0lDQWdjM2RwZEdOb0lDaDBlWEJsS1NCN1hHNGdJQ0FnSUNCallYTmxJQ2RwYm1sMExYZGhjMjBuT2x4dUlDQWdJQ0FnSUNCcGJtbDBhV0ZzYVhwbFYyVmlRWE56WlcxaWJIa29iV1Z6YzJGblpTRXVkMkZ6YlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQzUwYUdWdUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHVhWFJTZFc1MGFXMWxLRzFsYzNOaFoyVWhLUzUwYUdWdUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJ2YzNSTlpYTnpZV2RsS0h0MGVYQmxmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxjbklnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NHOXpkRTFsYzNOaFoyVW9lM1I1Y0dVc0lHVnljbjBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pYSnlJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIQnZjM1JOWlhOellXZGxLSHQwZVhCbExDQmxjbko5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJQ2RwYm1sMExXVndKem9nZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0I3WlhCT1lXMWxMQ0JsYm5aOUlEMGdiV1Z6YzJGblpTRTdYRzRnSUNBZ0lDQWdJR2x1YVhSRmNDaGxibllzSUdWd1RtRnRaU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDNTBhR1Z1S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCdmMzUk5aWE56WVdkbEtIdDBlWEJsZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxjbklnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjRzl6ZEUxbGMzTmhaMlVvZTNSNWNHVXNJR1Z5Y24wcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTmhjMlVnSjJOdmNIa3Rabkp2YlNjNklIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2UySjFabVpsY24wZ1BTQnRaWE56WVdkbElUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1luVm1abVZ5UkdGMFlTQTlJR052Y0hsR2NtOXRSWGgwWlhKdVlXeENkV1ptWlhJb1luVm1abVZ5S1R0Y2JpQWdJQ0FnSUNBZ2NHOXpkRTFsYzNOaFoyVW9lM1I1Y0dVc0lHOTFkRG9nWW5WbVptVnlSR0YwWVgwZ1lYTWdUM0owVjJGemJVMWxjM05oWjJVcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdOaGMyVWdKMk55WldGMFpTYzZJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdlMjF2WkdWc0xDQnZjSFJwYjI1emZTQTlJRzFsYzNOaFoyVWhPMXh1SUNBZ0lDQWdJQ0JqY21WaGRHVlRaWE56YVc5dUtHMXZaR1ZzTENCdmNIUnBiMjV6S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdMblJvWlc0b1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnpjMmx2YmsxbGRHRmtZWFJoSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJ2YzNSTlpYTnpZV2RsS0h0MGVYQmxMQ0J2ZFhRNklITmxjM05wYjI1TlpYUmhaR0YwWVgwZ1lYTWdUM0owVjJGemJVMWxjM05oWjJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaWEp5SUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJ2YzNSTlpYTnpZV2RsS0h0MGVYQmxMQ0JsY25KOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpZWE5sSUNkeVpXeGxZWE5sSnpwY2JpQWdJQ0FnSUNBZ2NtVnNaV0Z6WlZObGMzTnBiMjRvYldWemMyRm5aU0VwTzF4dUlDQWdJQ0FnSUNCd2IzTjBUV1Z6YzJGblpTaDdkSGx3WlgwcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUdOaGMyVWdKM0oxYmljNklIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2UzTmxjM05wYjI1SlpDd2dhVzV3ZFhSSmJtUnBZMlZ6TENCcGJuQjFkSE1zSUc5MWRIQjFkRWx1WkdsalpYTXNJRzl3ZEdsdmJuTjlJRDBnYldWemMyRm5aU0U3WEc0Z0lDQWdJQ0FnSUhKMWJpaHpaWE56YVc5dVNXUXNJR2x1Y0hWMFNXNWthV05sY3l3Z2FXNXdkWFJ6TENCdmRYUndkWFJKYm1ScFkyVnpMQ0J1WlhjZ1FYSnlZWGtvYjNWMGNIVjBTVzVrYVdObGN5NXNaVzVuZEdncExtWnBiR3dvYm5Wc2JDa3NJRzl3ZEdsdmJuTXBYRzRnSUNBZ0lDQWdJQ0FnSUNBdWRHaGxiaWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2ZFhSd2RYUnpJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h2ZFhSd2RYUnpMbk52YldVb2J5QTlQaUJ2V3pOZElDRTlQU0FuWTNCMUp5a3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NHOXpkRTFsYzNOaFoyVW9lM1I1Y0dVc0lHVnljam9nSjFCeWIzaDVJR1J2WlhNZ2JtOTBJSE4xY0hCdmNuUWdibTl1TFdOd2RTQjBaVzV6YjNJZ2JHOWpZWFJwYjI0dUozMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NHOXpkRTFsYzNOaFoyVW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdkSGx3WlN3Z2IzVjBPaUJ2ZFhSd2RYUnpmU0JoY3lCUGNuUlhZWE50VFdWemMyRm5aU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Y0ZEhKaFkzUlVjbUZ1YzJabGNtRmliR1ZDZFdabVpYSnpLRnN1TGk1cGJuQjFkSE1zSUM0dUxtOTFkSEIxZEhOZElHRnpJRk5sY21saGJHbDZZV0pzWlZSbGJuTnZjazFsZEdGa1lYUmhXMTBwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Z5Y2lBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J3YjNOMFRXVnpjMkZuWlNoN2RIbHdaU3dnWlhKeWZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdZMkZ6WlNBblpXNWtMWEJ5YjJacGJHbHVaeWM2WEc0Z0lDQWdJQ0FnSUdWdVpGQnliMlpwYkdsdVp5aHRaWE56WVdkbElTazdYRzRnSUNBZ0lDQWdJSEJ2YzNSTlpYTnpZV2RsS0h0MGVYQmxmU2s3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNCOVhHNGdJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2UxeHVJQ0FnSUhCdmMzUk5aWE56WVdkbEtIdDBlWEJsTENCbGNuSjlJR0Z6SUU5eWRGZGhjMjFOWlhOellXZGxLVHRjYmlBZ2ZWeHVmVHRjYmlKZExBb2dJQ0p0WVhCd2FXNW5jeUk2SUNJN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNUVUZCWVN4VlFVRnJReXhqUVVGelF6dEJRVUZ5Ump0QlFVRkJPMEZCUVU4c1RVRkJUU3hYUVVGWE8wRkJRV2xDTEUxQlFVMHNaVUZCWlR0QlFVRnBRaXhOUVVGTkxHMUNRVUZ0UWp0QlFVRkJPMEZCUVVFN096dEJRMEY0Unp0QlFVRkJPMEZCUVVFc1owSkJRVUZCTzBGQlFVRTdRVUZCUVN4TlFVRmhRVHRCUVVGaU8wRkJRVUU3UVVGQlR5eE5RVUZOUVN4UlFVRlBPMEZCUVVFN1FVRkJRVHM3TzBGRFFYQkNPMEZCUVVFN1FVRkJRVHRCUVVOQkxGVkJRVWtzVjBGQlZ5eE5RVUZOTzBGQlEyNUNMRmxCUVVrc1lVRkJZU3hQUVVGUExGbEJRVmtzWTBGQll5eFRRVUZUTEdWQlFXVXNUVUZCVFR0QlFVTm9SaXhaUVVGSkxFOUJRVThzWTBGQll6dEJRVUZoTEhsQ1FVRmxPMEZCUTNKRUxHVkJRMFlzVTBGQlV5eFpRVUZaTEVOQlFVTXNSMEZCUnp0QlFVVjZRaXhqUVVGSkxFbEJRVVVzVjBGQlZTeEpRVUZITEVsQlFVY3NaVUZCWVN4SlFVRkpMRkZCUVZFc1EwRkJReXhIUVVGRkxFMUJRVWs3UVVGQlF5eHBRa0ZCUnp0QlFVRkZMR2xDUVVGSE8wRkJRVUVzVlVGQlF5eERRVUZETzBGQlFVVTdRVUZCWVN4WlFVRkZMRzlDUVVGclFpeERRVUZETEVkQlFVVXNUVUZCU1R0QlFVRkRMR0ZCUVVNc1JVRkJSU3hQUVVGTExFVkJRVVVzUzBGQlJ5eHZRa0ZCU1N4UlFVRk5MRWxCUVVrc1IwRkJSU3hEUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZGTEZsQlFVVXNjMEpCUVc5Q0xFMUJRVWs3UVVGQlF5eHRRa0ZCVHl4RlFVRkZPMEZCUVVFc1ZVRkJSVHRCUVVOdVRDeGpRVUZKTEV0QlFVY3NUVUZCU1R0QlFVRkRMR3RDUVVGTkxFbEJRVVVzUTBGQlF5eEhRVUZGTEVkQlFVVXNUVUZCU1N4SlFVRkpMRTFCUVVrN1FVRkJReXh2UWtGQlRTeEpRVUZGTEVkQlFVVXNTVUZCUlN4SlFVRkpPMEZCUVVVc2EwSkJRVVVzUlVGQlJTeEhRVUZITEVOQlFVTTdRVUZCUlN4dlFrRkJUU3hKUVVGRkxFbEJRVWs3UVVGQlJTeHZRa0ZCU1N4TlFVRkpMRWxCUVVVc1IwRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJTeEpRVUZGTEVsQlFVVTdRVUZCVFN4eFFrRkJUeXhMUVVGSExFbEJRVVVzUjBGQlJ5eEpRVUZGTzBGQlFVRXNXVUZCUXl4SFFVRkZMRWxCUVVVc1QwRkJSeXhWUVVGVExFMUJRVWs3UVVGQlF5eHJRa0ZCUnp0QlFVRkRMRzlDUVVGSExFVkJRVVU3UVVGQlJ5eDNRa0ZCVFN4TlFVRk5MSGxDUVVGNVFqdEJRVUZGTEhOQ1FVRk5MRWxCUVVVc1JVRkJSU3hMUVVGSExFVkJRVU1zU1VGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUlN4UlFVRlBMRU5CUVVNc1JVRkJReXhIUVVGRkxFbEJRVVVzVFVGQlRTeEZRVUZGTEVkQlFVY3NRMEZCUXp0QlFVRkZMRzlDUVVGSExFVkJRVVVzVDBGQlN6dEJRVUZGTEhkQ1FVRk5MRTFCUVUwc2EwSkJRV3RDTzBGQlFVVXNhMEpCUVVVc1NVRkJTU3hOUVVGTk8wRkJRVVVzYzBKQlFVMHNTVUZCUlN4RlFVRkZPMEZCUVU4c2IwSkJRVWNzU1VGQlJTeEZRVUZGTEZGQlFVODdRVUZCUXl4elFrRkJTU3hKUVVGRkxFMUJRVTBzVVVGQlVTeEpRVUZKTEVOQlFVTTdRVUZCUlN4elFrRkJSU3hGUVVGRkxFOUJRVThzVDBGQlJ5eERRVUZETzBGQlFVVXNjMEpCUVVjc1NVRkJSU3hGUVVGRk8wRkJRVThzTUVKQlFVMHNUVUZCVFN4RlFVRkZMRXRCUVVzc1NVRkJTU3hEUVVGRE8wRkJRVUVzWjBKQlFVVTdRVUZCUXl4MVFrRkJUenRCUVVGQkxHTkJRVU1zVlVGQlF6dEJRVUZSTEd0Q1FVRkZMRXRCUVVjN1FVRkJRU3hqUVVGSk8wRkJRVUVzV1VGQlF6dEJRVUZGTEdOQlFVVXNiMEpCUVd0Q08wRkJRVUVzWTBGQlJTeEZRVUZGTzBGQlFVRXNZMEZCYTBJc1RVRkJTU3hGUVVGRk8wRkJRVUVzWTBGRGJHWXNUMEZCUnl4RlFVRkZMRzlDUVVGclFqdEJRVUZCTEZsQlFVTTdRVUZCUlN4alFVRkZMRlZCUVZFc1JVRkJSU3hGUVVGRkxFVkJRVVVzVTBGQlVTeE5RVUZKTEVWQlFVVXNVMEZCVVN4UFFVRkhMRVZCUVVVc1ZVRkJVU3hEUVVGRExFTkJRVU03UVVGQlJTeGpRVUZGTEhGQ1FVRnRRaXhGUVVGRkxFVkJRVVVzUlVGQlJTeHZRa0ZCYlVJc1RVRkJTU3hGUVVGRkxHOUNRVUZ0UWl4UFFVRkhMRVZCUVVVc2NVSkJRVzFDTEVOQlFVTXNRMEZCUXp0QlFVRkZMR05CUVVVc1owSkJRV01zUlVGQlJTeEZRVUZGTEdWQlFXTXNUVUZCU1N4RlFVRkZMR1ZCUVdNc1QwRkJSeXhGUVVGRkxHZENRVUZqTEVOQlFVTTdRVUZCUlN4cFFrRkJSenRCUVVGQkxGVkJRVTA3UVVGRGVsRXNXVUZCUlN4WFFVRlRMRU5CUVVNc1IwRkJSU3hOUVVGSk8wRkJRVU1zYVVKQlFVczdRVUZCUlN4blFrRkJSeXhoUVVGWExFZEJRVVU3UVVGQlF5eGxRVUZETEVWQlFVVXNTVUZCUnl4RlFVRkZMRWxCUVVjc1JVRkJSU3hKUVVGSExFVkJRVVVzU1VGQlJ5eEZRVUZGTEVsQlFVY3NSVUZCUlN4SlFVRkhMRVZCUVVVc1NVRkJSeXhGUVVGRkxFbEJRVWNzUlVGQlJTeEpRVUZITEVWQlFVVXNTVUZCUnl4RlFVRkZMRVZCUVVVc1NVRkJSVHRCUVVGRkxHOUNRVUZOTEVsQlFVVXNSVUZCUlR0QlFVRkhMR2RDUVVGRkxIRkNRVUZ0UWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWtzUlVGQlJTeGxRVUZsTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJSU3huUWtGQlJTeG5Ra0ZCWXl4UFFVRkhMRVZCUVVVc1ZVRkJWU3hEUVVGRE8wRkJRVVVzWjBKQlFVVXNkVUpCUVhGQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEUxQlFVa3NSVUZCUlN4cFFrRkJhVUlzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4blFrRkJSU3gxUWtGQmNVSXNUMEZCUnp0QlFVRkRMR3RDUVVGRkxHbENRVUZwUWl4RFFVRkRPMEZCUVVFc1kwRkJRenRCUVVGRkxHZENRVUZGTEdsQ1FVRmxMRTlCUVVjc1JVRkJSU3hYUVVGWExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVTXZWaXhqUVVGSkxFdEJRVWNzVDBGQlR5eFBRVUZQTEVOQlFVTXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhyUWtGQmFVSXNTMEZCUnl4RFFVRkRMRWRCUVVVc1RVRkJTVHRCUVVGRExHdENRVUZOTzBGQlFVRXNWVUZCUlN4SFFVRkZMRXRCUVVjc1dVRkJWU3hQUVVGUExGRkJRVThzUzBGQlJ5eGpRVUZaTEU5QlFVOHNaVUZCWXl4TFFVRkhMRmxCUVZVc1QwRkJUeXhYUVVGVExGbEJRVlVzVDBGQlR5eFJRVUZSTEZsQlFWVXNXVUZCVlN4UFFVRlBMRkZCUVZFc1UwRkJVeXhOUVVGTExFbEJRVVVzU1VGQlJ5eEpRVUZITEVsQlFVYzdRVUZEY2xBc1kwRkJSeXhKUVVGSE8wRkJRVU1zWjBKQlFVa3NTMEZCUnl4MVEwRkJZeXhMUVVGSE8wRkJRV2RDTEdkQ1FVRkZMRXRCUVVjc1IwRkJSeXhSUVVGUkxFTkJRVU1zU1VGQlJTeE5RVUZKTEZsQlFWVTdRVUZCU1N4cFFrRkJSeXhEUVVGRExFZEJRVVVzVFVGQlNUdEJRVUZETEd0Q1FVRkZMRWRCUVVjc1EwRkJReXhKUVVGRkxFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVVXNSMEZCUnl4VlFVRlZMRU5CUVVNN1FVRkJSU3h4UWtGQlR5eEhRVUZITEdGQlFXRXNSMEZCUlN4SlFVRkZMRk5CUVU4c1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlJTeHBRa0ZCUnl4UFFVRkhPMEZCUVVNc2EwSkJRVVVzUjBGQlJ5eEhRVUZGTEVsQlFVVTdRVUZCUlN4blFrRkJSU3hYUVVGVExFbEJRVVVzU1VGQlNTeFhRVUZYTEVOQlFVTTdRVUZCUnl4eFFrRkJUenRCUVVGQkxGbEJRVU03UVVGQlJTeHBRa0ZCUnl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFbEJRVVVzVTBGQlN6dEJRVUZETEd0Q1FVRkZMRWRCUVVjc1EwRkJReXhKUVVGRkxFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVVXNSMEZCUnl4VlFVRlZMRU5CUVVNN1FVRkJSU3hwUWtGQlJ5eFRRVUZUTEVkQlFVVXNTVUZCUlN4VFFVRlBMRkZCUVU4c1EwRkJReXhIUVVGRkxFMUJRVWs3UVVGQlF5eHZRa0ZCUlN4RlFVRkZMRU5CUVVNc1NVRkJSU3hGUVVGRkxFbEJRVVVzUlVGQlJTeFRRVUZQTEVOQlFVTTdRVUZCUVN4alFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVVVzWVVGQlF5eEZRVUZGTEdWQlFXRXNTVUZCUlN4UlFVRlJMRXRCUVVzc1YwRkJVeXhMUVVGSExGRkJRVkVzUzBGQlN5eERRVUZETEVWQlFVVXNVVUZCVVN4UFFVRk5MRWRCUVVjN1FVRkJSeXh2UWtGQlVTeExRVUZMTEUxQlFVMHNRMEZCUXp0QlFVRkZMR2xDUVVGSExFTkJRVU1zUjBGQlJTeE5RVUZKTzBGQlFVTXNjMEpCUVZFc1YwRkJVenRCUVVGRkxHOUNRVUZOTzBGQlFVRXNXVUZCUlR0QlFVRkJMRlZCUVVNc1YwRkJVeXhOUVVOdVpqdEJRVUZITEdsQ1FVRkhMRWxCUVVVc1MwRkJTeXhUUVVGVExFOUJRVXNzWlVGQllTeFBRVUZQTEZsQlFWVXNVMEZCVXl4clFrRkJaMElzU1VGQlJTeFRRVUZUTEdOQlFXTXNUVUZCU3l4bFFVRmhMRWxCUVVVc1lVRkJXU3hGUVVGRkxGZEJRVmNzVDBGQlR5eEpRVUZGTEVsQlFVVXNTMEZCUnl4SlFVRkZMRVZCUVVVc1QwRkJUeXhIUVVGRkxFVkJRVVVzVVVGQlVTeFZRVUZUTEVWQlFVVXNSVUZCUlN4WlFVRlpMRWRCUVVjc1NVRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eFBRVUZITzBGQlFVTXNhMEpCUVVrc1NVRkJSU3hKUVVGSk8wRkJRV1VzWjBKQlFVVXNTMEZCU3l4UFFVRk5MRWRCUVVVc1MwRkJSVHRCUVVGRkxHZENRVUZGTEV0QlFVc3NTVUZCU1R0QlFVRkZMSEZDUVVGUExFVkJRVVU3UVVGQlFTeFpRVUZaTEVkQlFVVXNUMEZCU3l4TFFVRkhMRTlCUVVjN1FVRkJReXhyUWtGQlNTeEpRVUZGTEVsQlFVazdRVUZCWlN4blFrRkJSU3hMUVVGTExFOUJRVTBzUjBGQlJTeExRVUZGTzBGQlFVVXNaMEpCUVVVc1pVRkJZVHRCUVVGakxHZENRVUZGTEV0QlFVc3NTVUZCU1R0QlFVRkZMSEZDUVVGUExFbEJRVWtzVjBGQlZ5eEZRVUZGTEZGQlFWRTdRVUZCUVN4WlFVRkRMRWxCUVVjc1MwRkJSeXhEUVVGRExFZEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNhMEpCUVVrc1NVRkJSU3hKUVVGSk8wRkJRV1VzWjBKQlFVVXNTMEZCU3l4UFFVRk5MRWRCUVVVc1NVRkJSVHRCUVVGRkxHZENRVUZGTEdWQlEzUm1PMEZCUVdNc1owSkJRVVVzVTBGQlR5eE5RVUZKTzBGQlFVTXNkVUpCUVVzc1JVRkJSU3hWUVVGUkxFdEJRVWNzUlVGQlJTeFZRVUZSTEVWQlFVVXNWMEZCVXl4RlFVRkZMRVZCUVVVc1VVRkJVU3hKUVVGRkxFVkJRVVU3UVVGQlFTeGpRVUZETzBGQlFVVXNaMEpCUVVVc1ZVRkJVVHRCUVVGRkxHZENRVUZGTEV0QlFVc3NTVUZCU1R0QlFVRkJMRmxCUVVNN1FVRkJSU3hqUVVGSkxFdEJRVWNzVVVGQlVTeEpRVUZKTEV0QlFVc3NUMEZCVHl4SFFVRkZMRWxCUVVVc1VVRkJVU3hOUVVGTkxFdEJRVXNzVDBGQlR6dEJRVUZGTEdsQ1FVRlBMRTlCUVU4c1IwRkJSU3hGUVVGRk8wRkJRVVVzWlVGQlJ6dEJRVUZMTEdOQlFVa3NTVUZCUnl4SlFVRkZMRTlCUVVjc1NVRkJSeXhIUVVGRkxFZEJRVVVzU1VGQlJ5eEpRVUZITEVkQlFVVXNSMEZCUlN4SlFVRkhMRWxCUVVjc1NVRkJSenRCUVVOcVVDeHRRa0ZCVXl4TFFVRkpPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEhRVUZITzBGQlFVOHNZMEZCUlN4UlFVRk5MRWxCUVVVc1NVRkJTU3hWUVVGVkxFTkJRVU03UVVGQlJTeGpRVUZGTEZOQlFVOHNTMEZCUnl4SlFVRkpMRmRCUVZjc1EwRkJRenRCUVVGRkxHTkJRVVVzVTBGQlR5eEpRVUZGTEVsQlFVa3NWMEZCVnl4RFFVRkRPMEZCUVVVc1kwRkJSU3hWUVVGUkxFdEJRVWNzU1VGQlNTeFpRVUZaTEVOQlFVTTdRVUZCUlN4alFVRkZMRk5CUVU4c1NVRkJSU3hKUVVGSkxGZEJRVmNzUTBGQlF6dEJRVUZGTEdOQlFVVXNWVUZCVVN4SlFVRkZMRWxCUVVrc1dVRkJXU3hEUVVGRE8wRkJRVVVzWTBGQlJTeFZRVUZSTEV0QlFVY3NTVUZCU1N4aFFVRmhMRU5CUVVNN1FVRkJSU3hqUVVGRkxGVkJRVkVzUzBGQlJ5eEpRVUZKTEdGQlFXRXNRMEZCUXp0QlFVRkZMR05CUVVVc1UwRkJUeXhMUVVGSExFbEJRVWtzWTBGQll5eERRVUZETzBGQlFVVXNZMEZCUlN4VlFVRlJMRXRCUVVjc1NVRkJTU3hsUVVGbExFTkJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNZMEZCU1N4TFFVRkhMRU5CUVVNc1IwRkJSU3hMUVVGSExFTkJRVU1zUjBGQlJTeExRVUZITEVOQlFVTXNSMEZCUlN4TFFVRkhMRWRCUVVVc1MwRkJSeXhOUVVGTExFdEJRVWM3UVVGRE5WZ3NiVUpCUVZNc1IwRkJSeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNZVUZCVnl4SlFVRkZPMEZCUVVrc1kwRkJSU3hEUVVGRE8wRkJRVVVzWjBKQlFVVTdRVUZCUnl4cFFrRkJSenRCUVVGRkxHZENRVUZGTEVsQlFVa3NXVUZCV1N4aFFVRmhMRWxCUVVVc01FTkJRVEJETzBGQlFVVXNaVUZCUnl4RFFVRkRPMEZCUVVVc2EwSkJRVTA3UVVGQlFTeFZRVUZGTzBGQlFVTXNZMEZCU1N4TFFVRkhMRTlCUVVjc1JVRkJSU3hYUVVGWExIVkRRVUYxUXl4SFFVRkZMRXRCUVVjc1QwRkJSeXhGUVVGRkxGZEJRVmNzVTBGQlV5eEhRVUZGTzBGQlFVY3NaVUZCUnp0QlFVRnhRaXhqUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hMUVVGSE8wRkJRVWNzYVVKQlFVY3NSVUZCUlN4aFFVRlhMRVZCUVVVc1YwRkJWeXhKUVVGSExFTkJRVU1zU1VGQlJTeEpRVUZGTzBGQlFVRXNWVUZCUlR0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJUdEJRVUZETEdkQ1FVRkhPMEZCUVVjc2NVSkJRVThzUjBGQlJ5eERRVUZETzBGQlFVVXNhMEpCUVVzN1FVRkJRU3hWUVVGclJEdEJRVU0zV2l4dFFrRkJVeXhIUVVGSExFZEJRVVU3UVVGQlF5eG5Ra0ZCUnl4TlFVRkpMRWxCUVVjN1FVRkJReXhyUWtGQlJ5eGpRVUZaTEU5QlFVOHNVMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJRenRCUVVGRkxIVkNRVUZQTEUxQlFVMHNSMEZCUlN4RlFVRkRMR0ZCUVZrc1kwRkJZU3hEUVVGRExFVkJRVVVzUzBGQlN5eFBRVUZITzBGQlFVTXNjMEpCUVVjc1EwRkJReXhGUVVGRk8wRkJRVWNzTUVKQlFVc3NkVU5CUVhWRExFTkJRVU03UVVGQlNTeDVRa0ZCVHl4RlFVRkZMRmxCUVZrN1FVRkJRU3huUWtGQlF5eERRVUZETEVWQlFVVXNUVUZCVFN4TlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRVVVzYTBKQlFVYzdRVUZCUnl4MVFrRkJUeXhKUVVGSkxGRkJRVkVzUTBGQlF5eEhRVUZGTEUxQlFVazdRVUZCUXl4eFFrRkJSeXhIUVVGRkxFOUJRVWNzUlVGQlJTeEpRVUZKTEZkQlFWY3NRMEZCUXl4RFFVRkRMRWRCUVVVc1EwRkJRenRCUVVGQkxHZENRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVNc2JVSkJRVThzVVVGQlVTeFJRVUZSTEVWQlFVVXNTMEZCU3l4TlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eHRRa0ZCVHl4SFFVRkhMRU5CUVVNc1JVRkJSU3hMUVVGTExFOUJRVWNzV1VGQldTeFpRVUZaTEVkQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhIUVVGRkxFOUJRVWM3UVVGQlF5eG5Ra0ZCUlN3d1EwRkJNRU1zUTBGQlF5eEZRVUZGTzBGQlFVVXNhVUpCUVVjc1EwRkJRenRCUVVGQkxGbEJRVU1zUTBGQlF6dEJRVUZCTEZWQlFVTTdRVUZETldNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRk8wRkJRVWNzYlVKQlFVMHNZMEZCV1N4UFFVRlBMRmxCUVZrc2QwSkJRWE5DTEVkQlFVY3NRMEZCUXl4TFFVRkhMRWRCUVVjc1EwRkJReXhMUVVGSExFMUJRVWtzWTBGQldTeFBRVUZQTEZGQlFVMHNSMEZCUnl4SFFVRkZMRWRCUVVVc1EwRkJReXhKUVVGRkxFMUJRVTBzUjBGQlJTeEZRVUZETEdGQlFWa3NZMEZCWVN4RFFVRkRMRVZCUVVVc1MwRkJTeXhQUVVGSExGbEJRVmtzY1VKQlFYRkNMRWRCUVVVc1EwRkJReXhGUVVGRkxFdEJRVXNzUjBGQlJTeFRRVUZUTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hyUTBGQmEwTXNRMEZCUXl4RlFVRkZPMEZCUVVVc1owSkJRVVVzTWtOQlFUSkRPMEZCUVVVc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1EwRkJReXhEUVVGRE8wRkJRVUVzVlVGQlF6dEJRVU16Vml4alFVRkpMRXRCUVVjN1FVRkJRU3haUVVGRExGTkJRVkVzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc2EwSkJRVWNzWlVGQllTeFBRVUZQTEV0QlFVY3NRMEZCUXl4RlFVRkZPMEZCUVVjc2RVSkJRVTg3UVVGQlJTeHJRa0ZCUlN4RlFVRkZMRTFCUVVrc1EwRkJRenRCUVVGRkxHZENRVUZGTEZkQlFWY3NTVUZCU1N4TlFVRkpMRWxCUVVVc1JVRkJSU3hWUVVGVkxFTkJRVU03UVVGQlJ5eHJRa0ZCUlN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NRMEZCUXp0QlFVRkZMSFZDUVVGUE8wRkJRVVVzY1VKQlFVczdRVUZCUlN4eFFrRkJTenRCUVVGRkxHdENRVUZITEVsQlFVVXNTVUZCUlN4RlFVRkZPMEZCUVZjc2RVSkJRVTg3UVVGQlJTeHJRa0ZCUnp0QlFVRkRMSFZDUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZGTEZOQlFWTXNSMEZCUlN4SlFVRkZMRU5CUVVNc1IwRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEhRVUZGTzBGQlFVRXNZMEZCUXl4UlFVRk5PMEZCUVVNc2RVSkJRVTg3UVVGQlFTeGpRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1UwRkJVU3hEUVVGRExFZEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNhMEpCUVVVc1JVRkJSU3hEUVVGRE8wRkJRVVVzYjBKQlFVMHNTVUZCUlN4SlFVRkpMRmRCUVZjc1EwRkJRenRCUVVGRkxHZENRVUZGTEVsQlFVa3NSVUZCUlN4VFFVRlRMRTFCUVVrc1IwRkJSU3hKUVVGRkxFMUJRVWtzUTBGQlF5eERRVUZETzBGQlFVVXNNRUpCUVZVc1QwRkJUeXhYUVVGVExGbEJRVlVzVDBGQlR5eFJRVUZSTEZsQlFWVXNXVUZCVlN4UFFVRlBMRkZCUVZFc1UwRkJVeXhQUVVGTExITkRRVUZqTEdOQlFXTXNSMEZCUlN4RFFVRkRMRXRCUVVjc1NVRkJSU3hKUVVGSkxFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVVXNSMEZCUlN4RlFVRkRMRTFCUVVzc01rSkJRVEJDTEVOQlFVTXNSMEZETldkQ0xFbEJRVVVzU1VGQlNTeG5Ra0ZCWjBJc1EwRkJReXhIUVVGRkxFOUJRVThzUzBGQlN5eEhRVUZGTEZGQlFWRTdRVUZCUVN4WlFVRkZPMEZCUVVFc1dVRkJSU3hUUVVGUkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNUVUZCU1R0QlFVRkRMR2RDUVVGRkxFZEJRVWM3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRTlCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNUMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeERRVUZETEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SlFVRkZPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeERRVUZETEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGTkJRVkVzVDBGQlJ6dEJRVUZETEdkQ1FVRkZMRWRCUVVjc1QwRkJUU3hIUVVGRkxFMUJRVTA3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEhRVUZITEU5QlFVMHNSMEZCUlN4TlFVRk5PMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhUUVVGUkxFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1QwRkJSenRCUVVGRExHZENRVUZGTEVkQlFVY3NVVUZCVHl4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExHTkJRV0VzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4UlFVRlBMRWRCUVVVc1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNUMEZCUnp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVDBGQlRTeEhRVUZGTEUxQlFVMDdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hUUVVGUkxFOUJRVWM3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRTlCUVUwc1IwRkJSU3hOUVVGTk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVMEZCVVN4UFFVTXpaanRCUVVGRExHZENRVUZGTEVkQlFVY3NWMEZCVlN4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEdWQlFXTXNSMEZCUlN4RlFVRkRMRTlCUVUwc1IwRkJSU3hOUVVGTExFVkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1QwRkJSenRCUVVGRExHZENRVUZGTEVkQlFVY3NUMEZCVFN4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExFOUJRVTBzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1UwRkJVU3hQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4UFFVRk5MRWRCUVVVc1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNUMEZCUnp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVDBGQlRTeEhRVUZGTEUxQlFVMDdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hUUVVGUkxFOUJRVWM3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRkZCUVU4c1IwRkJSU3hOUVVGTk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVMEZCVVN4UFFVRkhPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFJRVUZQTEVkQlFVVXNUVUZCVFR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGTkJRVkVzVDBGQlJ6dEJRVUZETEdkQ1FVRkZMRWRCUVVjc1VVRkJUeXhIUVVGRkxFMUJRVTA3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEhRVUZITEZGQlFVOHNSMEZCUlN4TlFVRk5PMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhSUVVGUExFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1QwRkJSenRCUVVGRExHZENRVUZGTEVkQlFVY3NVMEZCVVN4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExGTkJRVkVzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1UwRkJVU3hQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4VFFVRlJMRWRCUVVVc1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVU4wWml4VFFVRlJMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEhRVUZITEZGQlFVOHNSMEZCUlN4TlFVRk5PMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhQUVVGTkxFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1EwRkJReXhIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc1VVRkJUeXhIUVVGRkxFVkJRVU1zUzBGQlNTeEhRVUZGTEV0QlFVa3NSVUZCUXl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhSUVVGUExFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1EwRkJReXhIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRTlCUVUwc1IwRkJSU3hGUVVGRExFOUJRVTBzUlVGQlF5eERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1UwRkJVU3hQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4UlFVRlBMRWRCUVVVc1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNRMEZCUXl4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEdGQlFWa3NSMEZCUlN4RlFVRkRMRTlCUVUwc1JVRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVMEZCVVN4RFFVRkRMRWRCUVVVc1RVRkJTVHRCUVVGRExHZENRVUZGTEVkQlFVY3NiVUpCUVd0Q0xFZEJRVVVzUlVGQlF5eFBRVUZOTEVWQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGTkJRVkVzUTBGQlF5eEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExGRkJRVThzUjBGQlJTeEZRVUZETEVsQlFVY3NSVUZCUXl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhQUVVGTkxFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1QwRkJSenRCUVVGRExHZENRVUZGTEVkQlFVY3NUMEZCVFN4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExFOUJRVTBzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1UwRkJVU3hQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4UFFVRk5MRWRCUVVVc1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVU55Wml4VFFVRlJMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEhRVUZITEU5QlFVMHNSMEZCUlN4TlFVRk5PMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhUUVVGUkxFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1QwRkJSenRCUVVGRExHZENRVUZGTEVkQlFVY3NWMEZCVlN4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExHdENRVUZwUWl4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExGRkJRVThzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1UwRkJVU3hQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4bFFVRmpMRWRCUVVVc1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMR05CUVdFc1IwRkJSU3hGUVVGRExGVkJRVk1zUTBGQlF5eERRVUZETEVkQlFVVXNiVUpCUVd0Q0xFTkJRVU1zUTBGQlF5eEhRVUZGTEUxQlFVc3NTVUZCUlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hUUVVGVExFMUJRVWtzUjBGQlJTeE5RVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkZMRU5CUVVNc1JVRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVMEZCVVN4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc1lVRkJXU3hIUVVGRkxFVkJRVU1zVlVGQlV5eERRVUZETEVOQlFVTXNSMEZCUlN4dFFrRkJhMElzUTBGQlF5eERRVUZETEVkQlFVVXNUVUZCU3l4SlFVRkZMRTFCUVUwc1MwRkJTeXhGUVVGRkxGTkJRVk1zVFVGQlNTeEhRVUZGTEUxQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVVc1EwRkJReXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeE5RVU53Wmp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzWVVGQldTeEhRVUZGTEVWQlFVTXNWVUZCVXl4RFFVRkRMRU5CUVVNc1IwRkJSU3h0UWtGQmEwSXNRMEZCUXl4RFFVRkRMRWRCUVVVc1RVRkJTeXhKUVVGRkxFMUJRVTBzUzBGQlN5eEZRVUZGTEZOQlFWTXNUVUZCU1N4SFFVRkZMRTFCUVVrc1EwRkJReXhEUVVGRExFbEJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hUUVVGUkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eGpRVUZoTEVkQlFVVXNSVUZCUXl4VlFVRlRMRU5CUVVNc1EwRkJReXhIUVVGRkxHMUNRVUZyUWl4RFFVRkRMRU5CUVVNc1IwRkJSU3hOUVVGTExFbEJRVVVzVFVGQlRTeExRVUZMTEVWQlFVVXNVMEZCVXl4TlFVRkpMRWRCUVVVc1RVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlJTeERRVUZETEVWQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGTkJRVkVzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEdGQlFWa3NSMEZCUlN4RlFVRkRMRlZCUVZNc1EwRkJReXhEUVVGRExFZEJRVVVzYlVKQlFXdENMRU5CUVVNc1EwRkJReXhIUVVGRkxFMUJRVXNzU1VGQlJTeE5RVUZOTEV0QlFVc3NSVUZCUlN4VFFVRlRMRTFCUVVrc1IwRkJSU3hOUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZGTEVOQlFVTXNSVUZCUXl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1RVRkJTVHRCUVVGRExHZENRVUZGTEVkQlFVY3NXVUZCVnl4SFFVRkZMRVZCUVVNc1ZVRkJVeXhEUVVGRExFTkJRVU1zUjBGQlJTeHRRa0ZCYTBJc1EwRkJReXhEUVVGRExFZEJRVVVzVFVGQlN5eEpRVUZGTEUxQlFVMHNTMEZCU3l4RlFVRkZMRk5CUVZNc1RVRkJTU3hIUVVGRkxFMUJRVWtzUTBGQlF5eERRVUZETEVsQlFVVXNRMEZCUXl4RlFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hOUVVOd1pqdEJRVUZETEdkQ1FVRkZMRWRCUVVjc1dVRkJWeXhIUVVGRkxFVkJRVU1zVlVGQlV5eERRVUZETEVOQlFVTXNSMEZCUlN4dFFrRkJhMElzUTBGQlF5eERRVUZETEVkQlFVVXNUVUZCU3l4SlFVRkZMRTFCUVUwc1MwRkJTeXhGUVVGRkxGTkJRVk1zVFVGQlNTeEhRVUZGTEUxQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVVc1EwRkJReXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhuUWtGQlpTeEhRVUZGTEVWQlFVTXNWVUZCVXl4RFFVRkRMRU5CUVVNc1IwRkJSU3h0UWtGQmEwSXNRMEZCUXl4RFFVRkRMRWRCUVVVc1RVRkJTeXhKUVVGRkxFMUJRVTBzUzBGQlN5eEZRVUZGTEZOQlFWTXNUVUZCU1N4SFFVRkZMRTFCUVVrc1EwRkJReXhEUVVGRExFbEJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hUUVVGUkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eHRRa0ZCYTBJc1IwRkJSU3hGUVVGRExGVkJRVk1zUTBGQlF5eERRVUZETEVkQlFVVXNiVUpCUVd0Q0xFTkJRVU1zUTBGQlF5eEhRVUZGTEUxQlFVc3NTVUZCUlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hUUVVGVExFMUJRVWtzUjBGQlJTeE5RVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkZMRU5CUVVNc1JVRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVMEZCVVN4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc2JVSkJRV3RDTEVkQlFVVXNSVUZCUXl4VlFVRlRMRU5CUVVNc1EwRkJReXhIUVVGRkxHMUNRVUZyUWl4RFFVRkRMRU5CUVVNc1IwRkJSU3hOUVVGTExFbEJRVVVzVFVGQlRTeExRVUZMTEVWQlFVVXNVMEZCVXl4TlFVRkpMRWRCUVVVc1RVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlJTeERRVUZETEVWQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGTkJRVkVzVDBGRGVtWTdRVUZCUXl4blFrRkJSU3hIUVVGSExGTkJRVkVzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1UwRkJVU3hEUVVGRExFZEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhoUVVGWkxFZEJRVVVzUlVGQlF5eE5RVUZMTEVsQlFVVXNUVUZCVFN4TFFVRkxMRVZCUVVVc1UwRkJVeXhOUVVGSkxFZEJRVVVzVFVGQlNTeERRVUZETEVOQlFVTXNTVUZCUlN4RFFVRkRMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4blFrRkJaU3hIUVVGRkxFVkJRVU1zVjBGQlZTeEhRVUZGTEUxQlFVc3NSVUZCUlN4RFFVRkRMRWRCUVVVc1VVRkJUeXhKUVVGRkxGTkJRVThzVDBGQlRTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1UwRkJVU3hEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExHZENRVUZsTEVkQlFVVXNSVUZCUXl4WFFVRlZMRWRCUVVVc1RVRkJTeXhGUVVGRkxFTkJRVU1zUjBGQlJTeFJRVUZQTEVsQlFVVXNVMEZCVHl4UFFVRk5MRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMR2xDUVVGblFpeEhRVUZGTEVWQlFVTXNVVUZCVHl4SlFVRkZMRk5CUVU4c1VVRkJUeXhUUVVGUkxFZEJRVVVzVjBGQlZTeERRVUZETEVOQlFVTXNSMEZCUlN4UFFVRk5MRWRCUVVVc1lVRkJXU3hEUVVGRExFTkJRVU1zUjBGQlJTeE5RVUZMTEVOQlFVTXNSMEZCUlN4RFFVRkRMRWRCUVVVc1UwRkJVU3hEUVVGRExFTkJRVU1zUjBGQlJTeFZRVUZUTEUxQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1RVRkJTU3hEUVVGRExFZEJRVVVzWlVGQll5eEpRVUZGTEUxQlFVMHNTMEZCU3l4RlFVRkZMRk5CUVZNc1RVRkRjR2RDTEVkQlFVVXNUVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJSU3hEUVVGRExFZEJRVVVzWVVGQldTeEpRVUZGTEUxQlFVMHNTMEZCU3l4RlFVRkZMRk5CUVZNc1RVRkJTU3hIUVVGRkxFMUJRVWtzUTBGQlF5eERRVUZETEVsQlFVVXNRMEZCUXl4SFFVRkZMRmxCUVZjc1JVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExHbENRVUZuUWl4SFFVRkZMRVZCUVVNc1VVRkJUeXhKUVVGRkxGTkJRVThzVVVGQlR5eFRRVUZSTEVkQlFVVXNWMEZCVlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hUUVVGVExFMUJRVWtzU1VGQlJ5eE5RVUZKTEV0QlFVY3NUVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSU3hQUVVGTkxFZEJRVVVzWVVGQldTeE5RVUZOTEV0QlFVc3NSVUZCUlN4VFFVRlRMRTFCUVVrc1NVRkJSeXhOUVVGSkxFdEJRVWNzVFVGQlNTeERRVUZETEVOQlFVTXNSMEZCUlN4TlFVRkxMRTFCUVUwc1MwRkJTeXhGUVVGRkxGTkJRVk1zVFVGQlNTeEpRVUZITEUxQlFVa3NTMEZCUnl4TlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGRkxGTkJRVkVzVFVGQlRTeExRVUZMTEVWQlFVVXNVMEZCVXl4TlFVRkpMRWxCUVVjc1RVRkJTU3hMUVVGSExFMUJRVWtzUTBGQlF5eERRVUZETEVkQlFVVXNWVUZCVXl4TlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFMUJRVWtzUTBGQlF5eEhRVUZGTEdWQlFXTXNTVUZCUlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hUUVVGVExFMUJRVWtzUjBGQlJTeE5RVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkZMRU5CUVVNc1IwRkJSU3hoUVVGWkxFbEJRVVVzVFVGQlRTeExRVUZMTEVWQlFVVXNVMEZCVXl4TlFVTndaMElzUjBGQlJTeE5RVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkZMRU5CUVVNc1IwRkJSU3haUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hUUVVGUkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEdsQ1FVRm5RaXhIUVVGRkxFVkJRVU1zVVVGQlR5eEpRVUZGTEZOQlFVOHNVVUZCVHl4VFFVRlJMRWRCUVVVc1YwRkJWU3hEUVVGRExFTkJRVU1zUjBGQlJTeFBRVUZOTEVkQlFVVXNZVUZCV1N4RFFVRkRMRU5CUVVNc1IwRkJSU3hOUVVGTExFTkJRVU1zUjBGQlJTeERRVUZETEVkQlFVVXNVMEZCVVN4RFFVRkRMRU5CUVVNc1IwRkJSU3hWUVVGVExFMUJRVWtzUTBGQlF5eERRVUZETEVWQlFVVXNUVUZCU1N4RFFVRkRMRWRCUVVVc1pVRkJZeXhKUVVGRkxFMUJRVTBzUzBGQlN5eEZRVUZGTEZOQlFWTXNUVUZCU1N4SFFVRkZMRTFCUVVrc1EwRkJReXhEUVVGRExFbEJRVVVzUTBGQlF5eEhRVUZGTEdGQlFWa3NTVUZCUlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hUUVVGVExFMUJRVWtzUjBGQlJTeE5RVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkZMRU5CUVVNc1IwRkJSU3haUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hUUVVGUkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eHBRa0ZCWjBJc1IwRkJSVHRCUVVGQkxHZENRVUZETEZGQlFVOHNTVUZCUlN4VFFVRlBPMEZCUVVFc1owSkJRVThzVTBGQlVUdEJRVUZCTEdkQ1FVRkZMRmRCUVZVc1RVRkJUU3hMUVVGTExFVkJRVVVzVTBGQlV5eE5RVUZKTEVsQlFVY3NUVUZCU1N4TFFVRkhMRTFCUVVrc1EwRkJReXhEUVVGRE8wRkJRVUVzWjBKQlFVVXNUMEZCVFR0QlFVRkJMR2RDUVVOd1ppeGhRVUZaTEUxQlFVMHNTMEZCU3l4RlFVRkZMRk5CUVZNc1RVRkJTU3hKUVVGSExFMUJRVWtzUzBGQlJ5eE5RVUZKTEVOQlFVTXNRMEZCUXp0QlFVRkJMR2RDUVVGRkxFMUJRVXNzVFVGQlRTeExRVUZMTEVWQlFVVXNVMEZCVXl4TlFVRkpMRWxCUVVjc1RVRkJTU3hMUVVGSExFMUJRVWtzUTBGQlF5eERRVUZETzBGQlFVRXNaMEpCUVVVc1UwRkJVU3hOUVVGTkxFdEJRVXNzUlVGQlJTeFRRVUZUTEUxQlFVa3NTVUZCUnl4TlFVRkpMRXRCUVVjc1RVRkJTU3hEUVVGRExFTkJRVU03UVVGQlFTeG5Ra0ZCUlN4VlFVRlRMRTFCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzVFVGQlNTeERRVUZETzBGQlFVRXNaMEpCUVVVc1pVRkJZeXhKUVVGRkxFMUJRVTBzUzBGQlN5eEZRVUZGTEZOQlFWTXNUVUZCU1N4SFFVRkZMRTFCUVVrc1EwRkJReXhEUVVGRExFbEJRVVVzUTBGQlF6dEJRVUZCTEdkQ1FVRkZMR0ZCUVZrc1NVRkJSU3hOUVVGTkxFdEJRVXNzUlVGQlJTeFRRVUZUTEUxQlFVa3NSMEZCUlN4TlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGRkxFTkJRVU03UVVGQlFTeG5Ra0ZCUlN4WlFVRlhMRVZCUVVVc1EwRkJRenRCUVVGQkxHTkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1EwRkJReXhIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMSEZDUVVGdlFpeEhRVUZGTEVWQlFVTXNVVUZCVHl4SlFVRkZMRk5CUVU4c1QwRkJUU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVMEZCVVN4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExHVkJRV01zUjBGQlJUdEJRVUZCTEdkQ1FVRkRMRkZCUVU4c1NVRkJSU3hUUVVGUE8wRkJRVUVzWjBKQlFVOHNWVUZCVXp0QlFVRkJMR2RDUVVGRkxGZEJRVlU3UVVGQlFTeG5Ra0ZCUlN4dFFrRkJhMEk3UVVGQlFTeG5Ra0ZETldZc1pVRkJZenRCUVVGQkxHZENRVUZGTEZkQlFWVXNRMEZCUXl4SFFVRkZMRU5CUVVNN1FVRkJRU3huUWtGQlJTeGpRVUZoTEVOQlFVTXNSMEZCUlN4RFFVRkRPMEZCUVVFc1owSkJRVVVzVFVGQlN5eERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3huUWtGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4RFFVRkRPMEZCUVVFc1kwRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVMEZCVVN4RFFVRkRMRWRCUVVVc1RVRkJTVHRCUVVGRExHZENRVUZGTEVkQlFVY3NjVUpCUVc5Q0xFZEJRVVVzUlVGQlF5eFJRVUZQTEVsQlFVVXNVMEZCVHl4UFFVRk5MRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc1pVRkJZeXhIUVVGRkxFVkJRVU1zVVVGQlR5eEpRVUZGTEZOQlFVOHNVVUZCVHl4VlFVRlRMRWRCUVVVc1YwRkJWU3hIUVVGRkxHMUNRVUZyUWl4SFFVRkZMR1ZCUVdNc1IwRkJSU3hYUVVGVkxFTkJRVU1zUjBGQlJTeERRVUZETEVkQlFVVXNZMEZCWVN4RFFVRkRMRWRCUVVVc1EwRkJReXhIUVVGRkxFMUJRVXNzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1UwRkJVU3hEUVVGRExFZEJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hUUVVGUkxFTkJRVU1zUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhwUWtGQlowSXNSMEZCUlN4RlFVRkRMRkZCUVU4c1NVRkJSU3hUUVVGUExFOUJRVTBzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFhRVUZWTEVkQlFVVXNSVUZCUXl4UlFVRlBMRWxCUTNabUxGTkJRVThzVVVGQlR5eFZRVUZUTEVkQlFVVXNWMEZCVlN4SFFVRkZMRzFDUVVGclFpeEhRVUZGTEdWQlFXTXNSMEZCUlN4WFFVRlZMRU5CUVVNc1IwRkJSU3hEUVVGRExFZEJRVVVzWTBGQllTeERRVUZETEVkQlFVVXNRMEZCUXl4SFFVRkZMRTFCUVVzc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNVMEZCVVN4RFFVRkRMRWRCUVVVc1EwRkJReXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRU5CUVVNc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4cFFrRkJaMElzUjBGQlJTeEZRVUZETEZGQlFVOHNTVUZCUlN4VFFVRlBMRTlCUVUwc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhYUVVGVkxFZEJRVVVzUlVGQlF5eFJRVUZQTEVsQlFVVXNVMEZCVHl4UlFVRlBMRlZCUVZNc1IwRkJSU3hYUVVGVkxFZEJRVVVzYlVKQlFXdENMRWRCUVVVc1pVRkJZeXhIUVVGRkxGZEJRVlVzUTBGQlF5eEhRVUZGTEVOQlFVTXNSMEZCUlN4alFVRmhMRU5CUVVNc1IwRkJSU3hEUVVGRExFZEJRVVVzVFVGQlN5eERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hUUVVGUkxFTkJRVU1zUjBGQlJTeERRVUZETEVWQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGTkJRVkVzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEZGQlFVOHNSMEZCUlN4RlFVRkRMRTlCUVUwc1IwRkJSU3hOUVVGTExFZEJRVVVzVVVGQlR5eEhRVUZGTEZGQlFVOHNSVUZCUXl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeFBRVU5zWmp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVlVGQlV5eEhRVUZGTEUxQlFVMDdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hUUVVGUkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNUVUZCU1R0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVlVGQlV5eEhRVUZGTEVWQlFVTXNWVUZCVXl4RFFVRkRMRU5CUVVNc1IwRkJSU3hwUWtGQlowSXNRMEZCUXl4RFFVRkRMRWRCUVVVc1RVRkJTeXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc1ZVRkJVeXhIUVVGRkxFVkJRVU1zVlVGQlV5eERRVUZETEVOQlFVTXNSMEZCUlN4cFFrRkJaMElzUTBGQlF5eERRVUZETEVkQlFVVXNUVUZCU3l4RlFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFhRVUZWTEVkQlFVVXNSVUZCUXl4TlFVRkxMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNRMEZCUXl4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEZWQlFWTXNSMEZCUlN4RlFVRkRMRTFCUVVzc1JVRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVMEZCVVN4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc1UwRkJVU3hIUVVGRkxFVkJRVU1zVFVGQlN5eEhRVUZGTEZsQlFWY3NSMEZCUlN4WlFVRlhMRWxCUVVVc1RVRkJUU3hMUVVGTExFVkJRVVVzVTBGQlV5eE5RVUZKTEVkQlFVVXNUVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1QwRkJSenRCUVVGRExHZENRVUZGTEVkQlFVY3NWVUZCVXl4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFZRVUZUTEVkQlFVVXNSVUZCUXl4TlFVRkxMRTlCUVU4c1EwRkJReXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRU5CUVVNc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVTdRVUZCUVN4blFrRkJSenRCUVVGQkxHZENRVU12WlR0QlFVRkJMR2RDUVVGRkxFVkJRVU1zVFVGQlN5eFBRVUZQTEVOQlFVTXNSVUZCUXp0QlFVRkJMR05CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFZRVUZUTEVkQlFVVXNSVUZCUXl4WFFVRlZMRWRCUVVVc1RVRkJTeXhKUVVGRkxFMUJRVTBzUzBGQlN5eEZRVUZGTEZOQlFWTXNUVUZCU1N4SFFVRkZMRTFCUVVrc1EwRkJReXhEUVVGRExFbEJRVVVzUTBGQlF5eEhRVUZGTEhsQ1FVRjNRaXhGUVVGRkxFTkJRVU1zUjBGQlJTeGhRVUZaTEVkQlFVVXNaMEpCUVdVc1IwRkJSU3h2UWtGQmJVSXNSMEZCUlN4MVFrRkJjMElzUlVGQlJTeERRVUZETEVkQlFVVXNUVUZCU3l4RlFVRkZMRU5CUVVNc1IwRkJSU3hoUVVGWkxFVkJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hUUVVGUkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1RVRkJTVHRCUVVGRExHZENRVUZGTEVkQlFVY3NVMEZCVVN4SFFVRkZMRVZCUVVNc1VVRkJUeXhKUVVGRkxFMUJRVTBzUzBGQlN5eEZRVUZGTEZOQlFWTXNUVUZCU1N4SFFVRkZMRTFCUVVrc1EwRkJReXhEUVVGRExFbEJRVVVzUTBGQlF5eEhRVUZGTEUxQlFVc3NTVUZCUlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hUUVVGVExFMUJRVWtzUjBGQlJTeE5RVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkZMRU5CUVVNc1IwRkJSU3hOUVVGTExFbEJRVVVzVFVGQlRTeExRVUZMTEVWQlFVVXNVMEZCVXl4TlFVRkpMRWRCUVVVc1RVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlJTeERRVUZETEVWQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGTkJRVkVzVDBGQlJ6dEJRVUZETEdkQ1FVRkZMRWRCUVVjc1VVRkJUeXhIUVVGRkxFMUJRVTA3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRU5CUVVNc1IwRkJSU3hIUVVOdVppeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExITkNRVUZ4UWl4SFFVRkZMRVZCUVVNc1RVRkJTeXhIUVVGRkxGTkJRVkVzUjBGQlJTeFpRVUZYTEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEhsQ1FVRjNRaXhIUVVGRkxFVkJRVU1zVTBGQlVTeEhRVUZGTEZGQlFVOHNTVUZCUlN4VFFVRlBMRTlCUVUwc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNRMEZCUXl4SFFVRkZMRWRCUVVVc1RVRkJTVHRCUVVGRExHZENRVUZGTEVkQlFVY3NlVUpCUVhkQ0xFZEJRVVVzUlVGQlF5eFRRVUZSTEVkQlFVVXNVVUZCVHl4SlFVRkZMRk5CUVU4c1QwRkJUU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVMEZCVVN4UFFVRkhPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFRRVUZSTEVkQlFVVXNUVUZCVFR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGTkJRVkVzUTBGQlF5eEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExGVkJRVk1zUjBGQlJTeEZRVUZETEZWQlFWTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRTlCUVUwc1IwRkJSU3hGUVVGRExFMUJRVXNzUjBGQlJTeFBRVUZOTEVkQlFVVXNUVUZCU3l4SlFVRkZMRTFCUVUwc1MwRkJTeXhGUVVGRkxGTkJRVk1zVFVGQlNTeEhRVUZGTEUxQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVVc1EwRkJReXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExITkNRVUZ4UWl4SFFVRkZPMEZCUVVFc1owSkJRVU1zVTBGQlVUdEJRVUZCTEdkQ1FVRkZMRlZCUVZNN1FVRkJRU3huUWtGRGNtWXNVMEZCVVN4RFFVRkRMRU5CUVVNN1FVRkJRU3huUWtGQlJTeGpRVUZoTEVOQlFVTXNRMEZCUXp0QlFVRkJMR2RDUVVGRkxGRkJRVThzU1VGQlJTeFRRVUZQTzBGQlFVRXNZMEZCVFN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4elFrRkJjVUlzUjBGQlJTeEZRVUZETEZOQlFWRXNSMEZCUlN4VlFVRlRMRWRCUVVVc1UwRkJVU3hEUVVGRExFTkJRVU1zUjBGQlJTeGpRVUZoTEVOQlFVTXNRMEZCUXl4SFFVRkZMRkZCUVU4c1NVRkJSU3hUUVVGUExFOUJRVTBzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRk5CUVZFc1EwRkJReXhIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc1ZVRkJVeXhIUVVGRkxFVkJRVU1zVjBGQlZTeFBRVUZQTEVOQlFVTXNSMEZCUlN4VFFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4VFFVRlJMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEdGQlFWa3NSMEZCUlN4RlFVRkRMRlZCUVZNc1IwRkJSU3hyUWtGQmFVSXNSMEZCUlN4cFFrRkJaMElzUjBGQlJTeFBRVUZOTEVkQlFVVXNWVUZCVXl4SFFVRkZMR2RDUVVGbExFbEJRVVVzVFVGQlRTeExRVUZMTEVWQlFVVXNVMEZCVXl4UFFVRlBMRU5CUVVNc1RVRkJTU3hIUVVGRkxFOUJRVThzUTBGQlF5eEpRVUZGTEUxQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVVc1EwRkJReXhIUVVGRkxIZENRVUYxUWl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVMEZCVVN4UFFVRkhPMEZCUVVNc1owSkJRVVU3UVVGQlFTeG5Ra0ZCUnp0QlFVRkJMR2RDUVVOc1pqdEJRVUZCTEdkQ1FVRkZPMEZCUVVFc1kwRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNUMEZCUnp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzYVVKQlFXZENMRWRCUVVVc1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNUMEZCUnp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzV1VGQlZ5eEhRVUZGTEUxQlFVMDdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hUUVVGUkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUVUZCU1R0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVVVGQlR5eEhRVUZGTEVWQlFVTXNVVUZCVHl4SlFVRkZMRk5CUVU4c1VVRkJUeXhWUVVGVExFZEJRVVVzVjBGQlZTeERRVUZETEVOQlFVTXNSMEZCUlN4UFFVRk5MRWRCUVVVc1kwRkJZU3hEUVVGRExFTkJRVU1zUjBGQlJTeE5RVUZMTEVsQlFVVXNUVUZCVFN4TFFVRkxMRVZCUVVVc1UwRkJVeXhOUVVGSkxFZEJRVVVzVFVGQlNTeERRVUZETEVOQlFVTXNTVUZCUlN4RFFVRkRMRWRCUVVVc1UwRkJVU3hEUVVGRExFTkJRVU1zUjBGQlJTeFpRVUZYTEUxQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1RVRkJTU3hEUVVGRExFZEJRVVVzV1VGQlZ5eEZRVUZGTEVOQlFVTXNSMEZCUlN4dFFrRkJhMElzU1VGQlJTeE5RVUZOTEV0QlFVc3NSMEZCUnl4VFFVRlRMRTFCUVVrc1IwRkJSU3hOUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZGTEVOQlFVTXNSVUZCUXl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRkZCUVU4c1IwRkJSU3hGUVVGRExGRkJRVThzU1VGQlJTeFRRVUZQTEZGQlFVOHNWVUZCVXl4SFFVRkZMRmRCUVZVc1EwRkJReXhIUVVGRkxFTkJRVU1zUjBGQlJTeFBRVUZOTEVkQlFVVXNZMEZCWVR0QlFVRkJMR2RDUVVGRE8wRkJRVUVzWjBKQlEyeG5RanRCUVVGQkxHTkJRVU1zUjBGQlJTeE5RVUZMTEVsQlFVVXNUVUZCVFN4TFFVRkxMRVZCUVVVc1UwRkJVeXhOUVVGSkxFZEJRVVVzVFVGQlNTeERRVUZETEVOQlFVTXNTVUZCUlN4RFFVRkRMRWRCUVVVc1UwRkJVU3hEUVVGRExFZEJRVVVzUTBGQlF5eEhRVUZGTEZsQlFWY3NUVUZCU1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hOUVVGSkxFTkJRVU1zUjBGQlJTeFpRVUZYTEVWQlFVVXNRMEZCUXl4SFFVRkZMRzFDUVVGclFpeEpRVUZGTEUxQlFVMHNTMEZCU3l4SFFVRkhMRk5CUVZNc1RVRkJTU3hIUVVGRkxFMUJRVWtzUTBGQlF5eERRVUZETEVsQlFVVXNRMEZCUXl4RlFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExGRkJRVThzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1UwRkJVU3hEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eGxRVUZqTEVkQlFVVXNSVUZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxHVkJRV01zUjBGQlJTeE5RVUZMTEVkQlFVVXNWMEZCVlN4RlFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMSE5DUVVGeFFpeEhRVUZGTEVWQlFVTXNWVUZCVXl4SFFVRkZMR3RDUVVGcFFpeEhRVUZGTEdsQ1FVRm5RaXhIUVVGRkxFOUJRVTBzUjBGQlJTeFZRVUZUTEVWQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGTkJRVkVzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEcxQ1FVRnJRaXhIUVVGRk8wRkJRVUVzWjBKQlFVTXNZVUZCV1N4RFFVRkRMRU5CUVVNN1FVRkJRU3huUWtGQlJTeFZRVUZUTzBGQlFVRXNaMEpCUVVVc2IwSkJRVzFDTzBGQlFVRXNaMEpCUTJoblFpeFBRVUZOTzBGQlFVRXNZMEZCUXl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeERRVUZETEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5d3dRa0ZCZVVJc1IwRkJSU3hGUVVGRExGTkJRVkVzUjBGQlJTeFpRVUZYTEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITERCQ1FVRjVRaXhIUVVGRkxFVkJRVU1zVTBGQlVTeEhRVUZGTEZsQlFWY3NRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZOQlFWRXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4elFrRkJjVUlzUjBGQlJTeEZRVUZETEUxQlFVc3NSMEZCUlN4VFFVRlJMRWRCUVVVc1dVRkJWeXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1UwRkJVU3hQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVTBGQlVTeERRVUZETEVkQlFVVXNUVUZCU1N4RlFVRkZMRWRCUVVjc1IwRkJSU3hIUVVGRkxFVkJRVVVzUjBGQlJ5eEpRVUZITEVWQlFVVXNSMEZCUnl4TlFVRk5PMEZCUVVFc1ZVRkJRenRCUVVGRkxHMUNRVUZUTEVkQlFVY3NSMEZCUlR0QlFVRkRMR2xDUVVGTExFOUJRVXM3UVVGQllTeHBRa0ZCU3l4VlFVRlJMR2REUVVGblF5eERRVUZETzBGQlFVa3NhVUpCUVVzc1UwRkJUenRCUVVGQkxGVkJRVU03UVVGQlF5eGpRVUZKTEV0QlFVY3NRMEZCUXl4SFFVRkZMRXRCUVVjc1IwRkJSU3hKUVVGRk8wRkJRVUVzVlVGQlJTeE5RVUZOTEVkQlFVVTdRVUZCUVN4WlFVRkRMRmxCUVZrc1IwRkJSVHRCUVVGRExHMUNRVUZMTEV0QlFVYzdRVUZCUlN4dFFrRkJTeXhMUVVGSExFbEJRVVU3UVVGQlFTeFpRVUZGTzBGQlFVRXNWVUZCUXp0QlFVTjRaU3hqUVVGSkxFdEJRVWNzVDBGQlJ6dEJRVUZETEdkQ1FVRkpMRWxCUVVVN1FVRkJSU3huUWtGQlJ5eERRVUZETzBGQlFVVXNjVUpCUVU4c1IwRkJSeXhEUVVGRExFZEJRVVU3UVVGQlJTeG5Ra0ZCU1N4SlFVRkZMRWxCUVVrc1IwRkJSeXhEUVVGRE8wRkJRVVVzWTBGQlJTeEZRVUZGTEV0QlFVY3NUMEZCU3l4TlFVRkpMRU5CUVVNc1NVRkJSVHRCUVVGRkxHZENRVUZKTEVsQlFVVXNSVUZCUlN4RlFVRkZMRXRCUVVjc1RVRkJTU3hOUVVGSkxFTkJRVU03UVVGQlJTeG5Ra0ZCUnl4RFFVRkRPMEZCUVVVc2NVSkJRVThzUjBGQlJ5eERRVUZETEVkQlFVVTdRVUZCUlN4eFFrRkJVU3hMUVVGTExFZEJRVVU3UVVGQlF5eHJRa0ZCU1N4SlFVRkZMRVZCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTMEZCUnl4TlFVRkpPMEZCUVVVN1FVRkJUU3hyUWtGQlJ5eEhRVUZITEVkQlFVVXNSMEZCUlN4RlFVRkZMRXRCUVVjc1JVRkJSVHRCUVVGRkxIVkNRVUZQTEVkQlFVY3NRMEZCUXl4SFFVRkZPMEZCUVVFc1dVRkJRenRCUVVGRExHVkJRVWNzUTBGQlF6dEJRVUZGTEcxQ1FVRlBPMEZCUVVFc1ZVRkJReXhIUVVGRkxFdEJRVWNzWlVGQllTeFBRVUZQTEdOQlFWa3NTVUZCU1N4WlFVRlpMRTFCUVUwc1NVRkJSU3hSUVVGUExFdEJRVWNzUTBGQlF5eEhRVUZGTEVkQlFVVXNUVUZCU1R0QlFVRkRMRzFDUVVGTE8wRkJRVVVzWjBKQlFVa3NTVUZCUlN4SlFVRkZPMEZCUVVVc2FVSkJRVWtzU1VGQlJTeEhRVUZGTEVWQlFVVXNRMEZCUXl4TFFVRkhMRVZCUVVVc1MwRkJSenRCUVVGSkxHZENRVUZGTzBGQlFVVXNaMEpCUVVjc1MwRkJSeXhKUVVGRkxFdEJRVWNzUlVGQlJTeFZRVUZSTzBGQlFVY3NjVUpCUVU4c1IwRkJSeXhQUVVGUExFVkJRVVVzVTBGQlV5eEhRVUZGTEVOQlFVTXNRMEZCUXp0QlFVRkZMR2xDUVVGSkxFbEJRVVVzU1VGQlJ5eEpRVUZGTEV0QlFVYzdRVUZCUXl4clFrRkJTU3hKUVVGRkxFVkJRVVVzUjBGQlJ6dEJRVUZGTEd0Q1FVRkhMRWxCUVVVc1MwRkJTVHRCUVVGRExHOUNRVUZKTEVsQlFVVXNSVUZCUlN4SFFVRkhMRWxCUVVVN1FVRkJSeXh2UWtGQlJ5eFJRVUZOTEVsQlFVVTdRVUZCU3l4MVFrRkJSeXhQUVVGUExHTkJRV01zU1VGQlJTeFBRVU5zWml4SlFVRkZMRU5CUVVNN1FVRkJRU3h4UWtGQlRUdEJRVUZETEhOQ1FVRkpMRWxCUVVVc1JVRkJSU3hIUVVGSExFbEJRVVU3UVVGQlJ5eHpRa0ZCUlN4UlFVRk5MRWxCUVVVc1VVRkJUU3hKUVVGRkxFOUJRVXNzUzBGQlJ5eExRVUZITEVsQlFVVXNTMEZCUnl4SlFVRkZMRTFCUVVrc1MwRkJSeXhMUVVGSExFdEJRVWNzUzBGQlJ5eEpRVUZGTEVWQlFVVXNSMEZCUnl4SlFVRkZPMEZCUVVjc01FSkJRVTBzU1VGQlJTeExRVUZITEU5QlFVOHNZVUZCWVN4RFFVRkRMRXRCUVVjc1MwRkJSeXhQUVVGTkxFdEJRVWNzVDBGQlR5eGhRVUZoTEZGQlFVMHNTMEZCUnl4SlFVRkhMRkZCUVUwc1NVRkJSU3hKUVVGSk8wRkJRVUVzWjBKQlFVVTdRVUZCUVN4alFVRkRPMEZCUVUwc2NVSkJRVWNzVDBGQlR5eGhRVUZoTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVNc2JVSkJRVTg3UVVGQlFTeFZRVUZETEVkQlFVVXNTVUZCUlN4RFFVRkRMRWRCUVVVc1QwRkJTeXhQUVVGTExFdEJRVWNzUjBGQlJ5eEhRVUZGTEVkQlFVVXNRMEZCUXl4SlFVRkZMRWxCUVVjc1MwRkJSeXhQUVVGSE8wRkJRVU1zY1VKQlFWRXNTVUZCUlN4SFFVRkZMRWxCUVVVc1IwRkJSU3hKUVVGRkxFVkJRVVVzVVVGQlR5eEZRVUZGTEVkQlFVVTdRVUZCUXl4clFrRkJTU3hKUVVGRkxFVkJRVVVzVjBGQlZ5eERRVUZETzBGQlFVVXNjVUpCUVVzc1NVRkJSU3hOUVVGSkxGRkJRVTBzU1VGQlJTeExRVUZITEVsQlFVVXNVMEZCVHl4TFFVRkhMRk5CUVU4c1MwRkJSeXhMUVVGSExFZEJRVVVzUlVGQlJTeExRVUZITEV0QlFVYzdRVUZCUVN4WlFVRkRPMEZCUVVNc2JVSkJRVTg3UVVGQlFTeFZRVUZETEVkQlFVVXNTVUZCUlN4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eHRRa0ZCU3p0QlFVRkZMR2RDUVVGSExFVkJRVVVzU1VGQlJUdEJRVUZITEhGQ1FVRlBPMEZCUVVVc1owSkJRVWtzU1VGQlJUdEJRVUZGTEdkQ1FVRkZMRWxCUVVVc1NVRkJSVHRCUVVGRkxIRkNRVUZSTEVsQlFVVXNSMEZCUlN4SlFVRkZMRVZCUVVVc1VVRkJUeXhGUVVGRkxFZEJRVVU3UVVGQlF5eHJRa0ZCU1N4SlFVRkZMRVZCUVVVc1YwRkJWeXhEUVVGRE8wRkJRVVVzYTBKQlFVY3NVMEZEYUdZc1MwRkJSeXhUUVVGUExFZEJRVVU3UVVGQlF5eHZRa0ZCU1N4SlFVRkZMRVZCUVVVc1YwRkJWeXhGUVVGRkxFTkJRVU03UVVGQlJTeHZRa0ZCUlN4VlFVRlJMRWxCUVVVc1UwRkJUeXhOUVVGSkxFbEJRVVU3UVVGQlFTeGpRVUZKTzBGQlFVTXNhMEpCUVVjc1QwRkJTeXhIUVVGRk8wRkJRVU1zYjBKQlFVY3NTMEZCUnp0QlFVRkZPMEZCUVUwc2EwSkJRVVVzVVVGQlRTeERRVUZETEVsQlFVVTdRVUZCUVN4alFVRkRMRTlCUVVzN1FVRkJReXh2UWtGQlJ5eFJRVUZOTEVkQlFVVTdRVUZCUXl4elFrRkJSeXhKUVVGRkxFdEJRVWM3UVVGQlJUdEJRVUZOTEc5Q1FVRkZMRkZCUVUwc1EwRkJReXhKUVVGRkxFMUJRVWtzUzBGQlJ6dEJRVUZCTEdkQ1FVRkRMRTlCUVVzN1FVRkJReXh6UWtGQlJ5eFRRVUZQTEVkQlFVVTdRVUZCUXl4M1FrRkJSeXhKUVVGRkxFdEJRVWM3UVVGQlJUdEJRVUZOTEhOQ1FVRkZMRkZCUVUwc1EwRkJReXhKUVVGRkxFMUJRVWtzUzBGQlJ6dEJRVUZCTEd0Q1FVRkZMRTlCUVVzN1FVRkJReXgzUWtGQlJ5eEpRVUZGTEV0QlFVYzdRVUZCUlR0QlFVRk5MSE5DUVVGRkxGRkJRVTBzUTBGQlF5eEpRVUZGTEUxQlFVa3NTMEZCUnp0QlFVRkhMSE5DUVVGRkxGRkJRVTBzUTBGQlF5eEpRVUZGTEUxQlFVa3NTMEZCUnl4TFFVRkhPMEZCUVVFc2EwSkJRVVU3UVVGQlF5eHZRa0ZCUlN4UlFVRk5MRU5CUVVNc1NVRkJSU3hOUVVGSkxFdEJRVWNzU1VGQlJUdEJRVUZCTEdkQ1FVRkZPMEZCUVVNc2EwSkJRVVVzVVVGQlRTeERRVUZETEVsQlFVVXNUVUZCU1N4SlFVRkZPMEZCUVVFc1kwRkJSVHRCUVVGQkxGbEJRVU03UVVGQlF5eGpRVUZGTEUxQlFVa3NRMEZCUXl4SlFVRkZPMEZCUVVVc2JVSkJRVThzU1VGQlJUdEJRVUZCTEZWQlFVTXNSMEZCUlN4SlFVRkhMRWxCUVVVc1QwRkJSenRCUVVGRExIRkNRVUZSTEVsQlFVVXNTVUZCUnl4RlFVRkZMRTFCUVVrc1EwRkJRenRCUVVGSExHMUNRVUZITEVkQlFVY3NSVUZCUlN4UlFVRk5MRU5CUVVNc1EwRkJRenRCUVVGRkxHMUNRVUZQTzBGQlFVRXNWVUZCUXl4SFFVRkZMRXRCUVVjc1EwRkJReXhIUVVGRkxFdEJRVWNzUTBGQlF5eEhRVUZGTEV0QlFVY3NRMEZCUXl4SFFVRkZPMEZCUTNoaExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWxCUVVVc1EwRkJReXhIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVzc1owSkJRVWNzUTBGQlF6dEJRVUZGTEc5Q1FVRk5MRWxCUVVrc1JVRkJSU3hUUVVGVExFTkJRVU1zSzBOQlFTdERPMEZCUVVVc1owSkJRVWNzUjBGQlJ5eGxRVUZsTEVOQlFVTXNSMEZCUlR0QlFVRkRMR3RDUVVGSExFVkJRVVU3UVVGQlJ6dEJRVUZQTEc5Q1FVRk5MRWxCUVVrc1JVRkJSU3g1UWtGQmVVSXNRMEZCUXl4VFFVRlRPMEZCUVVFc1dVRkJSVHRCUVVGRExHVkJRVWNzUTBGQlF5eEpRVUZGTzBGQlFVVXNiVUpCUVU4c1IwRkJSeXhEUVVGRE8wRkJRVVVzWlVGQlJ5eGxRVUZsTEVOQlFVTXNUVUZCU1N4SlFVRkZMRWRCUVVjc1EwRkJReXhIUVVGRkxFOUJRVThzUjBGQlJ5eERRVUZETEVkQlFVVXNSVUZCUlN4UlFVRlJMRTlCUVVjc1JVRkJSU3hEUVVGRE8wRkJRVUVzVlVGQlJUdEJRVUZETEcxQ1FVRlRMRVZCUVVVc1IwRkJSU3hIUVVGRkxFbEJRVVVzUTBGQlF5eEhRVUZGTzBGQlFVTXNaMEpCUVVjc1JVRkJSU3h2UWtGQmJVSTdRVUZCUnl4dlFrRkJUU3hKUVVGSkxGVkJRVlVzZVVSQlFYbEVPMEZCUVVVc2JVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkROMkVzWTBGQlNTeExRVUZITEVOQlFVTXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXh2UWtGQlR5eEhRVUZGTzBGQlFVRXNZMEZCUXl4TFFVRkxPMEZCUVVVc2RVSkJRVThzU1VGQlJTeFBRVUZITEVWQlFVVXNUVUZCU1N4RFFVRkRMRWxCUVVVc1QwRkJSeXhGUVVGRkxFMUJRVWtzUTBGQlF6dEJRVUZCTEdOQlFVVXNTMEZCU3p0QlFVRkZMSFZDUVVGUExFbEJRVVVzVDBGQlJ5eEhRVUZITEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1QwRkJSeXhIUVVGSExFMUJRVWtzVFVGQlNTeERRVUZETzBGQlFVRXNZMEZCUlN4TFFVRkxPMEZCUVVVc2RVSkJRVThzU1VGQlJTeFBRVUZITEVWQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1NVRkJSU3hQUVVGSExFVkJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTTdRVUZCUVN4alFVRkZMRXRCUVVzN1FVRkJSU3gxUWtGQlR5eEpRVUZGTEU5QlFVY3NSMEZCUnl4TlFVRkpMRU5CUVVNc1NVRkJSU3hQUVVGSExFZEJRVWNzVFVGQlNTeERRVUZETzBGQlFVRXNZMEZCUlR0QlFVRlJMSE5DUVVGTkxFbEJRVWtzVlVGQlZTd3dRa0ZCTUVJc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJUdEJRVUZCTEZsQlFVVTdRVUZCUVN4VlFVRkRMRWRCUVVVc1MwRkJSeXhEUVVGRExFZEJRVVVzU1VGQlJTeERRVUZETzBGQlFVVXNiVUpCUVZNc1IwRkJSeXhIUVVGRk8wRkJRVU1zYlVKQlFVczdRVUZCUlN4blFrRkJSU3hMUVVGSExFMUJRVWtzUlVGQlJTeEZRVUZGTEVsQlFVVXNRMEZCUXl4TlFVRkpMRVZCUVVVc1EwRkJReXhKUVVGRkxGRkJRVThzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZCUVN4VlFVRkZPMEZCUTJoWExHTkJRVWtzU1VGQlJTeFBRVUZITzBGQlFVTXNaMEpCUVVjc1EwRkJRenRCUVVGRkxHOUNRVUZOTEVsQlFVa3NSVUZCUlN4elEwRkJiME1zUTBGQlF6dEJRVUZGTEcxQ1FVRlBMRVZCUVVVc1EwRkJRenRCUVVGQkxGVkJRVU1zUjBGQlJTeEpRVUZGTEU5QlFVYzdRVUZCUXl4dlFrRkJUeXhIUVVGRk8wRkJRVUVzWTBGQlF5eExRVUZMTzBGQlFVOHNkVUpCUVU4N1FVRkJRU3hqUVVGRkxFdEJRVXM3UVVGQlN5eDFRa0ZCVHp0QlFVRkJMR05CUVVVc1MwRkJTenRCUVVGSExIVkNRVUZQTzBGQlFVRXNZMEZCUlN4TFFVRkxPMEZCUVVjc2RVSkJRVTg3UVVGQlFTeGpRVUZGTzBGQlFWRXNjMEpCUVUwc1NVRkJSU3hIUVVGSExFbEJRVWtzUzBGQlJ5eEZRVUZGTzBGQlFVOHNhMEpCUVVVc1EwRkJReXhKUVVGRk8wRkJRVVVzYTBKQlFVVXNTVUZCUlN4RFFVRkRMRWxCUVVVN1FVRkJSU3gxUWtGQlR6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVVc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTzBGQlFVTXNiVUpCUVU4c1MwRkJTeXhoUVVGaExFVkJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkROMUlzWTBGQlNTeExRVUZITEVWQlFVTXNUVUZCU3l4dFFrRkJhMElzWTBGQllTeFBRVUZITzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRkxFTkJRVU03UVVGQlJTeGxRVUZITEVOQlFVTTdRVUZCUlN4dFFrRkJUenRCUVVGQkxGVkJRVU1zUjBGQlJTeFpRVUZYTEVOQlFVTXNSMEZCUlN4TlFVRkpMRVZCUVVVc1EwRkJReXhIUVVGRkxHZENRVUZsTEVkQlFVVXNjMEpCUVhGQ0xFbEJRVWNzU1VGQlJ5eExRVUZKTEVkQlFVVXNTMEZCUnl4RFFVRkRMRWRCUVVVc1RVRkJTVHRCUVVGRExHOUNRVUZQTEVkQlFVVTdRVUZCUVN4alFVRkRMRXRCUVVzN1FVRkJSU3gxUWtGQlR5eFRRVUZUTEVkQlFVVTdRVUZCUXl4NVFrRkJUeXhMUVVGTExHRkJRV0VzUjBGQlJ5eE5RVUZKTEUxQlFVa3NRMEZCUXl4RFFVRkRPMEZCUVVFc1owSkJRVU03UVVGQlFTeGpRVUZGTEV0QlFVczdRVUZCUlN4MVFrRkJUeXhUUVVGVExFZEJRVVU3UVVGQlF5eDVRa0ZCVHl4TFFVRkxMR0ZCUVdFc1IwRkJSeXhOUVVGSkxFMUJRVWtzUTBGQlF5eERRVUZETzBGQlFVRXNaMEpCUVVNN1FVRkJRU3hqUVVGRk8wRkJRVkVzYzBKQlFVMHNTVUZCU1N4VlFVRlZMSGRDUVVGM1FpeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZPMEZCUVVFc1dVRkJSVHRCUVVGQkxGVkJRVU1zUjBGQlJTeExRVUZITEdWQlFXRXNUMEZCVHl4alFVRlpMRWxCUVVrc1dVRkJXU3hWUVVGVkxFbEJRVVVzVVVGQlR5eExRVUZITEVOQlFVTXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVWtzU1VGQlJTeExRVUZITzBGQlFVVXNjVUpCUVZFc1NVRkJSU3hKUVVGRkxFbEJRVVVzUjBGQlJTeEZRVUZGTEV0QlFVY3NUVUZCU1N4SFFVRkhMRTFCUVVrc1EwRkJRenRCUVVGSExHZENRVUZGTzBGQlEzQm1MR3RDUVVGSk8wRkJRVVVzWjBKQlFVY3NTMEZCUnl4SlFVRkZMRXRCUVVjN1FVRkJSeXh4UWtGQlR5eEhRVUZITEU5QlFVOHNSVUZCUlN4VFFVRlRMRTFCUVVrc1IwRkJSU3hOUVVGSkxFTkJRVU1zUTBGQlF6dEJRVUZGTEdkQ1FVRkZPMEZCUVVjc2FVSkJRVWtzU1VGQlJTeEhRVUZGTEVWQlFVVXNTMEZCUnl4SlFVRkZMRWxCUVVjc1JVRkJSU3hIUVVGRk8wRkJRVU1zYTBKQlFVa3NTVUZCUlN4SFFVRkhMRWxCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRXRCUVVjN1FVRkJSVHRCUVVGTkxHMUNRVUZITEU5QlFVOHNZVUZCWVN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGRExHMUNRVUZQTzBGQlFVRXNWVUZCUXl4SFFVRkZMRXRCUVVjc1EwRkJReXhIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEd0Q1FVRkpPMEZCUVZjc1owSkJRVWNzU1VGQlJUdEJRVUZGTEhGQ1FVRlBPMEZCUVVVc2FVSkJRVWM3UVVGQlJTeG5Ra0ZCU1N4SlFVRkZPMEZCUVVVc1owSkJRVVVzU1VGQlJTeEpRVUZGTEVWQlFVVXNVMEZCVHl4SlFVRkZMRWxCUVVVc1JVRkJSVHRCUVVGUExIRkNRVUZSTEVsQlFVVXNSMEZCUlN4SlFVRkZMRWRCUVVVc1JVRkJSVHRCUVVGRkxHbENRVUZITEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hYUVVGWExFTkJRVU1zUjBGQlJTeExRVUZITzBGQlFVVXNaVUZCUnl4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRk8wRkJRVVVzYlVKQlFVOHNTVUZCUlR0QlFVRkJMRlZCUVVNc1IwRkJSU3hMUVVGSExFOUJRVWNzU1VGQlJTeEZRVUZGTEZGQlFVOHNTMEZCUnl4RFFVRkRMRWRCUVVVc1RVRkJTVHRCUVVGRExIRkNRVUZSTEVsQlFVVXNSMEZCUlN4SlFVRkZMRWxCUVVjc1JVRkJSU3hMUVVGSExFbEJRVVVzVFVGQlNUdEJRVUZETEd0Q1FVRkpMRWxCUVVVc1JVRkJSU3hKUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhMUVVGSE8wRkJRVVU3UVVGQlRTeG5Ra0ZCUlR0QlFVRkZMSFZDUVVGUExFdEJRVWNzUzBGQlJ5eFBRVUZOTEV0QlFVY3NUMEZCVHl4aFFVRmhMRkZCUVUwc1MwRkJSeXhKUVVGSExGRkJRVTBzU1VGQlJTeEpRVUZKTEV0QlFVY3NTMEZEYm1Zc1QwRkJUeXhoUVVGaExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVTXNiVUpCUVU4N1FVRkJRU3hWUVVGRExFZEJRVVVzUzBGQlJ5eERRVUZETEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc2JVSkJRVXM3UVVGQlJTeHJRa0ZCU1R0QlFVRlhMR2RDUVVGSExFbEJRVVU3UVVGQlJTeHhRa0ZCVHp0QlFVRkZMR2RDUVVGSkxFbEJRVVU3UVVGQlJTeG5Ra0ZCUlN4SlFVRkZMRWxCUVVVN1FVRkJSU3h4UWtGQlVTeEpRVUZGTEVkQlFVVXNTVUZCUlN4RlFVRkZMRkZCUVU4c1JVRkJSU3hIUVVGRk8wRkJRVU1zYTBKQlFVa3NTVUZCUlN4RlFVRkZMRmRCUVZjc1EwRkJRenRCUVVGRkxHdENRVUZITEZOQlFVOHNTMEZCUnl4VFFVRlBMRWRCUVVVN1FVRkJReXh2UWtGQlNTeEpRVUZGTEVWQlFVVXNWMEZCVnl4RlFVRkZMRU5CUVVNN1FVRkJSU3h2UWtGQlJTeFZRVUZSTEVsQlFVVXNVMEZCVHl4TlFVRkpMRWxCUVVVN1FVRkJRU3hqUVVGSk8wRkJRVU1zWjBKQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1NVRkJSVHRCUVVGRkxHMUNRVUZITzBGQlFVVXNhMEpCUVVjc1NVRkJSU3hKUVVGRk8wRkJRVVU3UVVGQlFTeFpRVUZMTzBGQlFVTXNZMEZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRk8wRkJRVVVzYlVKQlFVOHNTVUZCUlR0QlFVRkJMRlZCUVVNc1IwRkJSU3hMUVVGSExFOUJRVWM3UVVGQlF5eHhRa0ZCVVN4SlFVRkZMRWRCUVVVc1NVRkJSU3hIUVVGRkxFbEJRVVVzUlVGQlJTeFJRVUZQTEVWQlFVVXNSMEZCUlR0QlFVRkRMR3RDUVVGSkxFbEJRVVVzUlVGQlJTeFhRVUZYTEVOQlFVTTdRVUZCUlN4MVFrRkJUeXhMUVVGSExGTkJRVThzUzBGQlJ5eEZRVUZGTzBGQlFVVXNiVUpCUVVjN1FVRkJRU3haUVVGRE8wRkJRVU1zYlVKQlFVODdRVUZCUVN4VlFVRkRMRWRCUVVVc1MwRkJSeXhEUVVGRExFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVVVzWjBKQlFVY3NWMEZCVXp0QlFVRkZMRzlDUVVGTkxFbEJRVVVzUjBGQlJ5eERRVUZETEVkQlFVVXNTVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJTeEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVWQlFVVTdRVUZCUlN4dFFrRkJUenRCUVVGQkxGVkJRVU1zUjBGQlJTeExRVU5zWml4RFFVRkRMRWRCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RFFVRkRPMEZCUVVVc1owSkJRVVVzUlVGQlJTeFhRVUZYTEVkQlFVVXNRMEZCUXp0QlFVRkZMR05CUVVVc1YwRkJVeXhGUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4RFFVRkRPMEZCUVVjc2JVSkJRVTg3UVVGQlFTeFZRVUZETEVkQlFVVXNTMEZCUnl4UFFVRkhPMEZCUVVNc1owSkJRVWM3UVVGQlF5eG5Ra0ZCUlR0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zYVVKQlFVY3NRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRExFZEJRVVVzUzBGQlJ5eFBRVUZITzBGQlFVTXNaMEpCUVVjc1EwRkJRenRCUVVGRkxHdENRVUZITzBGQlFVTXNhMEpCUVVVN1FVRkJSU3h2UWtGQlJ6dEJRVUZETEhWQ1FVRkhMRXRCUVVjc1NVRkJSU3hKUVVGSExFVkJRVVVzVTBGQlV5eERRVUZETEVkQlFVVXNTVUZCUlN4TlFVRkhMRWRCUVVjc1IwRkJSU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzBGQlFVRXNaMEpCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zSzBKQlFXRXNUVUZCU1N4WlFVRlZMRXRCUVVjc1IwRkJSeXhIUVVGRkxFTkJRVU03UVVGQlFTeG5Ra0ZCUXp0QlFVRkJMR05CUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zTmtKQlFXRXNUVUZCU1N4WlFVRlZMRXRCUVVjc1IwRkJSeXhIUVVGRkxFTkJRVU03UVVGQlFTeGpRVUZETzBGQlFVRXNWVUZCUXp0QlFVTnlVaXh0UWtGQlV5eExRVUZKTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hIUVVGRkxFbEJRVVVzUTBGQlF6dEJRVUZGTEhGQ1FVRlJMRU5CUVVNc1IwRkJSU3hEUVVGRExFdEJRVWtzVDBGQlR5eFJRVUZSTEVOQlFVTTdRVUZCUlN4blFrRkJSU3hEUVVGRExFbEJRVVVzWTBGQldTeFBRVUZQTEVsQlFVVXNTVUZCU1N4TlFVRkpPMEZCUVVNc2JVSkJRVWNzUzBGQlN5eERRVUZETzBGQlFVVXNiMEpCUVVjN1FVRkJReXg1UWtGQlR5eEZRVUZGTEVkQlFVY3NRMEZCUXp0QlFVRkJMR2RDUVVGRExGVkJRVU03UVVGQlVTeDNRa0ZCU1N4SFFVRkhMRWxCUVVrc1IwRkJSU3hMUVVGSExFMUJRVWtzUzBGQlJ5eE5RVUZKTEVkQlFVY3NWMEZCVXl4SlFVRkZMRWRCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVVVzWlVGQllTeFBRVUZQTEZWQlFWRXNUMEZCVHl4SFFVRkhPMEZCUVVFc1owSkJRVWM3UVVGQlFTeGpRVUZETEVsQlFVVTdRVUZCUlN4dFFrRkJUenRCUVVGQkxGVkJRVU03UVVGQlF5eGpRVUZKTEVsQlFVVXNSMEZCUlN4SlFVRkZMRTFCUVVzc1MwRkJSeXhIUVVGRkxFdEJRVWNzUTBGQlF5eEhRVUZGTEV0QlFVY3NRMEZCUXl4SFFVRkZMRXRCUVVjc1EwRkJReXhIUVVGRkxFdEJRVWNzUjBGQlJTeExRVUZITEUxQlFVc3NTMEZCUnl4RFFVRkRPMEZCUVVVc2JVSkJRVk1zUzBGQlNUdEJRVUZETEcxQ1FVRlBMRWxCUVVrc1VVRkJVU3hEUVVGRExFZEJRVVVzVFVGQlNUdEJRVUZETEcxQ1FVRkhMRVZCUVVNc1UwRkJVU3hIUVVGRkxGRkJRVThzUlVGQlF6dEJRVUZCTEZsQlFVTXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkRNVmNzYlVKQlFWTXNTMEZCU1R0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUjBGQlJ5eExRVUZMTEVkQlFVVXNTVUZCUlN4SlFVRkZPMEZCUVVjc1kwRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEpRVUZGTzBGQlFVVXNZMEZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVVzU1VGQlJUdEJRVUZOTEdkQ1FVRkZMRWRCUVVjc1EwRkJRenRCUVVGRkxHZENRVUZKTEVsQlFVVXNSMEZCUnl4RFFVRkRPMEZCUVVVc2RVSkJRVk1zVFVGQlNTeEpRVUZGTEUxQlFVc3NSMEZCUnl4RFFVRkRMRWxCUVVVc1IwRkJSU3hIUVVGSExFTkJRVU1zU1VGQlJUdEJRVUZITEdOQlFVVXNTVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRk8wRkJRVVVzYlVKQlFVODdRVUZCUVN4VlFVRkRPMEZCUXpkS0xHMUNRVUZUTEVkQlFVY3NSMEZCUlR0QlFVRkRMR2RDUVVGSExFTkJRVU1zUjBGQlJUdEJRVUZETEd0Q1FVRkhMRTFCUVVrc1IwRkJSVHRCUVVGRExHOUNRVUZKTEVsQlFVVXNUMEZCUnl4SlFVRkZPMEZCUVVjc2EwSkJRVVVzUTBGQlF5eEpRVUZGTEUxQlFVazdRVUZCUXl4elFrRkJSeXhEUVVGRExFMUJRVWtzUzBGQlJ5eEhRVUZGTEVsQlFVVXNUVUZCUnl4SlFVRkhPMEZCUVVNc2QwSkJRVVU3UVVGQlJTeDFRa0ZCUnl4TlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRVVVzYlVOQlFXRXNUMEZCVHl4WFFVRlRMRkZCUVZFc1IwRkJSeXhOUVVGSkxGRkJRVkVzUjBGQlJ5eFBRVUZQTzBGQlFVVXNkMEpCUVVVN1FVRkJSeXgzUWtGQlJ6dEJRVUZETERCQ1FVRkpMRXRCUVVjc1IwRkJSU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSE8wRkJRVUVzYjBKQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc01FSkJRVVVzUjBGQlJTeEpRVUZGTzBGQlFVRXNiMEpCUVVVN1FVRkJReXgzUWtGQlNTeEpRVUZGTzBGQlFVY3NkMEpCUVVjc1EwRkJReXhIUVVGRk8wRkJRVU1zTUVKQlFVa3NTVUZCUlR0QlFVRkhMRFJDUVVGSkxFdEJRVWNzVDBGQlRTeEpRVUZGTEVWQlFVVXNVMEZCVHl4RlFVRkZMRk5CUVZNc1EwRkJReXhIUVVGRkxFbEJRVVU3UVVGQlFTeHZRa0ZCUnp0QlFVRkRMSGRDUVVGSExFdEJRVWNzUTBGQlF6dEJRVUZGTERSQ1FVRk5PMEZCUVVFc2EwSkJRVVU3UVVGQlFTeG5Ra0ZCUXl4RFFVRkRPMEZCUVVVc2IwSkJRVVU3UVVGQlJ5eHpRa0ZCU1N4SlFVRkZMRWRCUVVVc1NVRkJSU3hIUVVGSExFZEJRVVVzWlVGQllTeFBRVUZQTEZkQlFWTXNVVUZCVVN4SFFVRkhMRTFCUVVrc1VVRkJVU3hIUVVGSExFMUJRVTBzUjBGQlJTeEhRVUZITEUxQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkJRU3hqUVVGRk8wRkJRVTBzYzBKQlFVa3NTMEZCUnl4SlFVRkZMRWRCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVVVzUlVGQlJTeERRVUZETEVkQlFVVXNTVUZCUlN4TlFVRkxMRWRCUVVjc1VVRkJVU3hGUVVGRkxFdEJRVWNzUjBGQlJ5eHJRa0ZCYTBJc1EwRkJReXhGUVVGRk8wRkJRVVVzY1VKQlFVODdRVUZCUVN4WlFVRkZPMEZCUVVFc1ZVRkJRenRCUVVOb1ppeHRRa0ZCVXl4SFFVRkhMRWRCUVVVN1FVRkJReXh0UWtGQlR5eEhRVUZITEU5QlFVYzdRVUZCUXl4blFrRkJSU3hGUVVGRkxFdEJRVXNzUTBGQlF6dEJRVUZCTEZsQlFVTXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXhqUVVGSkxFdEJRVWNzUTBGQlF5eEhRVUZGTEV0QlFVY3NRMEZCUXl4SFFVRkZMRXRCUVVjc1QwRkJSenRCUVVGRExHZENRVUZKTEVsQlFVVXNSMEZCUnl4RFFVRkRPMEZCUVVVc2JVSkJRVThzVjBGQlV5eEpRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkZPMEZCUVVFc1ZVRkJReXhIUVVGRkxFdEJRVWNzVFVGQlNTeFpRVUZWTEU5QlFVOHNZVUZCVnl4aFFVRlhMRk5CUVZNc1lVRkJZU3hGUVVGRkxFZEJRVVVzUzBGQlJ5eFBRVUZITzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hIUVVGSE8wRkJRVThzWlVGQlJ5eExRVUZMTEVOQlFVTTdRVUZCUlN4dFFrRkJUenRCUVVGQkxGVkJRVU1zUjBGQlJTeExRVUZITEVOQlFVTXNSMEZCUlN4TlFVRkpPMEZCUVVNc2NVSkJRVkVzU1VGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUlN4SlFVRkZMRWRCUVVVc1NVRkJSU3hIUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUlN4RFFVRkRMRWxCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SFFVRkZMR1ZCUVdFc1EwRkJRenRCUVVGRkxHMUNRVUZQTzBGQlFVRXNWVUZCUXl4SFFVRkZMRXRCUVVjc1EwRkJReXhIUVVGRkxFMUJRVWtzVDBGQlR5eGxRVUZsTEVkQlFVVXNVVUZCVHl4RlFVRkRMRTlCUVUwc1JVRkJReXhEUVVGRE8wRkJRek5YTEcxQ1FVRlRMRWRCUVVjc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVTdRVUZCVXl4blFrRkJSeXhGUVVGRkxHRkJRV0U3UVVGQlZTeHZRa0ZCVFN4SlFVRkpMRlZCUVZVc2NVTkJRWEZETEU5QlFVOHNRMEZCUXl3d1FrRkJNRUk3UVVGQlJTeG5Ra0ZCU1N4SlFVRkZMRWRCUVVjc1JVRkJSU3hSUVVGTkxIVkNRVUZ6UWl4WFFVRlZPMEZCUVVFc1dVRkJReXhEUVVGRE8wRkJRVVVzWTBGQlJTeFpRVUZWTEVWQlFVVTdRVUZCVlN4blFrRkJSU3hKUVVGSk8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4TlFVRk5MRWRCUVVVc1EwRkJRenRCUVVGRkxHMUNRVUZQTEdGQlFXRXNVMEZCVHl4SlFVRkZPMEZCUVVFc1ZVRkJRenRCUVVONlVpeGpRVUZKTEVsQlFVVXNUMEZCUnl4TlFVRkpMRWxCUVVVc1RVRkJTU3hOUVVGSkxFbEJRVVVzVDBGQlN5eE5RVUZKTEVsQlFVVXNUVUZCU3l4TFFVRkhMRU5CUVVNc1IwRkJSU3hKUVVGSExFbEJRVWNzU1VGQlJ5eExRVUZKTEV0QlFVa3NTMEZCU1N4TFFVRkpMRXRCUVVrc1MwRkJTU3hMUVVGSkxFZEJRVWNzUjBGQlJTeExRVUZITEVOQlFVTXNSMEZCUlN4SlFVRkhMRWxCUVVjc1NVRkJSeXhMUVVGSkxFdEJRVWtzUzBGQlNTeExRVUZKTEV0QlFVa3NTMEZCU1N4TFFVRkpMRWRCUVVjc1IwRkJSU3hMUVVGSExFTkJRVU1zUjBGQlJTeExRVUZITEVOQlFVTXNSMEZCUlN4TlFVRkpPMEZCUVVNc1pVRkJSeXhUUVVGUE8wRkJRVVVzY1VKQlFWRXNSMEZCUlN4SlFVRkZMRVZCUVVVc1VVRkJUU3hEUVVGRExFdEJRVWM3UVVGQlF5eHJRa0ZCU1N4SlFVRkZMRTlCUVVzN1FVRkJSU3h0UWtGQlJ5eFBRVUZMTzBGQlFVVXNiVUpCUVVjc1MwRkJSeXhKUVVGRkxFbEJRVVVzU1VGQlJUdEJRVUZGTEdsQ1FVRkhMRXRCUVVzc1QwRkJTeXhKUVVGRkxFVkJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNTVUZCUlN4UFFVRkxMRWxCUVVVc1IwRkJSeXhOUVVGSkxFTkJRVU1zU1VGQlJTeFBRVUZMTEVsQlFVVXNSVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRkxFZEJRVWNzVFVGQlNTeE5RVUZKTEVOQlFVTXNRMEZCUXp0QlFVRkZMRzFDUVVGSExFbEJRVVVzU1VGQlJUdEJRVUZCTEZsQlFVTTdRVUZCUXl4dFFrRkJUenRCUVVGQkxGVkJRVVVzUjBGQlJTeExRVUZITEVOQlFVTXNSMEZCUlN4TFFVRkhMRTFCUVVrN1FVRkJReXhuUWtGQlJ5eERRVUZETEVsQlFVYzdRVUZCUXl4clFrRkJTU3hKUVVGRkxFVkJRVU1zVFVGQlN5eFpRVUZYTEZOQlFWRXNXVUZCVnl4TlFVRkxMRXRCUVVrc1MwRkJTU3hMUVVGSkxFMUJRVXNzYTBKQlFXbENMRTlCUVUwc1dVRkJWU3hQUVVGUExHRkJRVmNzVlVGQlZTeGhRVUZYTEZWQlFWVXNWVUZCVlN4RFFVRkRMRXRCUXpObUxFdEJRVXNzVVVGQlVTeExRVUZKTEVkQlFVY3NTVUZCUlN4VlFVRlRMRWRCUVVVc1RVRkJTU3hwUWtGQlowSXNSMEZCUlR0QlFVRkZMRzFDUVVGSkxFdEJRVXM3UVVGQlJ5d3lRa0ZCVXl4SFFVRkhMRU5CUVVNc1NVRkJSU3hQUVVGUExFVkJRVVVzUTBGQlF5eEpRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkZMRWRCUVVjc1EwRkJRenRCUVVGRkxHdENRVUZKTEVsQlFVVXNRMEZCUXp0QlFVRkZMRzFDUVVGSkxFdEJRVXM3UVVGQlJTeHJRa0ZCUlN4TFFVRkxMRWRCUVVjc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVTdRVUZCUlN4dFFrRkJSenRCUVVGQkxGbEJRVU03UVVGQlF5eHRRa0ZCVHp0QlFVRkJMRlZCUVVVc1IwRkJSU3hKUVVGSExFdEJRVWNzUTBGQlF5eE5RVUZMTEVOQlFVTXNSMEZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSU3hMUVVGSExFTkJRVU1zU1VGQlJ5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVWQlFVVXNSMEZCUlN4TFFVRkhMRU5CUVVNc1NVRkJSeXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFVkJRVVU3UVVGQlJTeHRRa0ZCVXl4SFFVRkhMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEUxQlFVMHNSMEZCUnl4RFFVRkRMRWxCUVVVc1EwRkJRenRCUVVGRkxHTkJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSVUZCUlN4TlFVRk5PMEZCUVVVc2JVSkJRVTg3UVVGQlFTeFZRVUZETzBGQlEzcFZMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMSEZDUVVGVExFVkJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4dFFrRkJTU3hKUVVGRkxGbEJRVlVzVDBGQlR5eEpRVUZGTEVWQlFVVXNVMEZCVXl4SlFVRkZMRXRCUVVjc1NVRkJSeXhGUVVGRkxGTkJRVTg3UVVGQlJ5eHZRa0ZCUlN4RlFVRkZMRU5CUVVNc1NVRkJSVHRCUVVGRkxIRkNRVUZQTzBGQlFVRXNXVUZCUXp0QlFVRkRMSEZDUVVGVExFVkJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNjVUpCUVU4c1JVRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJ6dEJRVUZCTEZsQlFVTTdRVUZCUXl4eFFrRkJVeXhGUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEhWQ1FVRlRMRVZCUVVVc1IwRkJSVHRCUVVGRExIVkNRVUZQTEVsQlFVVXNTVUZCUlN4TFFVRkhMRWxCUVVVc1NVRkJSU3hKUVVGRk8wRkJRVUVzWTBGQlF6dEJRVUZETEd0Q1FVRkpPMEZCUVVVc2NVSkJRVXNzU1VGQlJTeEZRVUZGTEVWQlFVVXNXVUZCV1N4SlFVRkZMRVZCUVVVc1dVRkJXU3hEUVVGRExFMUJRVWtzVDBGQlN5eEpRVUZGTEVWQlFVVXNSVUZCUlN4VFFVRlRMRWxCUVVVc1JVRkJSU3hUUVVGVExFTkJRVU1zVDBGQlN5eEpRVUZGTEVWQlFVVXNSVUZCUlN4UlFVRlJMRWxCUVVVc1JVRkJSU3hSUVVGUkxFTkJRVU03UVVGQlJ5eHhRa0ZCVHp0QlFVRkJMRmxCUVVNN1FVRkJReXh4UWtGQlV5eEZRVUZGTEVkQlFVVTdRVUZCUXl4elFrRkJUeXhGUVVGRkxFOUJRVThzUjBGQlJUdEJRVUZCTEdkQ1FVRkRMRXRCUVVzN1FVRkJSU3g1UWtGQlR5eEpRVUZKTEV0QlFVc3NSVUZCUlN4WlFVRlpMRWxCUVVVc1IwRkJSU3hKUVVGSExFVkJRVVU3UVVGQlFTeG5Ra0ZCUlN4TFFVRkxPMEZCUVVVc2VVSkJRVTg3UVVGQlFTeG5Ra0ZCUlN4TFFVRkxPMEZCUVVVc2VVSkJRVThzU1VGQlNTeExRVUZMTEVWQlFVVXNXVUZCV1N4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxHZENRVUZGTEV0QlFVczdRVUZCUlN4NVFrRkJUeXhKUVVGSk8wRkJRVUVzYjBKQlFVc3NSVUZCUlN4WlFVRlpPMEZCUVVFc2IwSkJRM3BtTzBGQlFVRXNiMEpCUVVVN1FVRkJRU3hyUWtGQlF6dEJRVUZCTEdkQ1FVRkZMRXRCUVVzN1FVRkJSU3g1UWtGQlR5eEpRVUZKTEV0QlFVc3NSVUZCUlN4WlFVRlpMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzWjBKQlFVVXNTMEZCU3p0QlFVRkZMSGxDUVVGUExFbEJRVWtzUzBGQlN5eEZRVUZGTEZsQlFWa3NTVUZCUlN4SFFVRkZMRWxCUVVjc1JVRkJSVHRCUVVGQkxHZENRVUZGTEV0QlFVczdRVUZCUlN4NVFrRkJUeXhKUVVGSkxFdEJRVXNzUlVGQlJTeFpRVUZaTEVsQlFVVXNSMEZCUlN4SlFVRkhMRVZCUVVVN1FVRkJRU3hqUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZETEhGQ1FVRlRMRVZCUVVVc1IwRkJSVHRCUVVGRExHdENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkhMRzFDUVVGSkxFbEJRVVVzU1VGQlNTeExRVUZOTEVsQlFVa3NTMEZCU3l4RlFVRkZMRXRCUVVjc1RVRkJTeXhIUVVGRkxFTkJRVU1zUlVGQlJ5eFJRVUZSTEVOQlFVTXNSMEZCUlN4SlFVRkZMRXRCUVVjN1FVRkJReXh2UWtGQlNTeEpRVUZGTEVWQlFVVXNVMEZCVXl4SFFVRkZMRXRCUVVjc1JVRkJSU3hGUVVGRkxGbEJRVmtzUTBGQlF5eEpRVUZGTEV0QlFVY3NTVUZCU1N4RFFVRkRPMEZCUVVVc2IwSkJRVWNzU1VGQlJTeEpRVUZGTEVWQlFVVXNVVUZCVVR0QlFVRkZMSFZDUVVGSExFbEJRVVVzUlVGQlJTeFJRVUZSTEVsQlFVVXNSMEZCUlN4RlFVRkZMRkZCUVZFc1EwRkJReXhIUVVGRkxFdEJRVWNzU1VGQlJTeEZRVUZGTEZOQlFWTXNTVUZCUlN4RFFVRkRMRXRCUVVjc1JVRkJSU3hUUVVGVExFTkJRVU1zUjBGQlJTeEZRVUZGTEZsQlFWa3NSVUZCUlN4WlFVRlpMRWxCUVVVc1EwRkJRenRCUVVGQkxIRkNRVUZQTzBGQlFVTXNiMEpCUVVVc1VVRkJVU3hGUVVGRkxGRkJRVkVzU1VGQlJTeERRVUZETzBGQlFVVTdRVUZCUVN4blFrRkJTenRCUVVGQkxHTkJRVU03UVVGQlF5eHJRa0ZCUlN4SlFVRkpMRXRCUVVzc1JVRkJSU3haUVVGWkxFbEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSU3hGUVVGRkxFbEJRVWs3UVVGQlFTeG5Ra0ZCU3l4RlFVRkZMRmxCUVZrN1FVRkJRU3huUWtGRGJtWTdRVUZCUVN4blFrRkJSVHRCUVVGQkxHTkJRVU1zUTBGQlF6dEJRVUZGTEd0Q1FVRkZMRVZCUVVVc1EwRkJRenRCUVVGRkxIRkNRVUZQTEV0QlFVY3NSVUZCUlN4SFFVRkZMRU5CUVVNc1NVRkJSU3hMUVVGSExFVkJRVVVzUjBGQlJTeERRVUZETEVsQlFVVXNSVUZCUlN4WlFVRlpMRWxCUVVVc1NVRkJSU3hGUVVGRkxGbEJRVmtzU1VGQlJTeEZRVUZGTEZsQlFWa3NTVUZCUlR0QlFVRkJMRmxCUVVNN1FVRkJReXh0UWtGQlN6dEJRVUZGTEcxQ1FVRkxPMEZCUVVVc2JVSkJRVXM3UVVGQlJTeHRRa0ZCU3p0QlFVRkZMR2RDUVVGSkxFbEJRVVVzUlVGQlJTeEpRVUZGTEU5QlFVc3NUVUZCU1N4RFFVRkRPMEZCUVVVc1owSkJRVVVzUlVGQlF5eEpRVUZITEVWQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1IwRkJSU3hKUVVGSExFVkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SFFVRkZMRWxCUVVjc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVkQlFVVXNTVUZCUnl4RlFVRkZMRWxCUVVVc1QwRkJTeXhOUVVGSkxFTkJRVU1zUjBGQlJTeEpRVUZITEVWQlFVVXNTVUZCUlN4UFFVRkxMRTFCUVVrc1EwRkJReXhIUVVGRkxFbEJRVWNzUlVGQlJTeEpRVUZGTEU5QlFVc3NUVUZCU1N4RFFVRkRMRWRCUVVVc1NVRkJSeXhGUVVGRkxFbEJRVVVzVDBGQlN5eE5RVUZKTEVOQlFVTXNSMEZCUlN4SlFVRkhMRVZCUVVVc1NVRkJSU3hQUVVGTExFMUJRVWtzUTBGQlF5eEhRVUZGTEVsQlFVY3NSVUZCUlN4SlFVRkZMRTlCUVVzc1RVRkJTU3hEUVVGRExFZEJRVVVzU1VGQlJ5eEZRVUZGTEVsQlFVVXNUMEZCU3l4TlFVRkpMRU5CUVVNc1IwRkJSU3hKUVVGSExFbEJRVVVzUlVGQlJTeERRVUZETEVsQlFVVXNSMEZCUlR0QlFVRkZMR2RDUVVGRkxFVkJRVVVzUTBGQlF6dEJRVUZGTEdkQ1FVRkZPMEZCUVVFc1kwRkJReXhOUVVGTE8wRkJRVUVzWTBGQmRVSXNUVUZCU3p0QlFVRkJMR05CUVZjc1RVRkJTenRCUVVGQkxHTkJRVmNzVFVGQlN6dEJRVUZCTEdOQlFVc3NUVUZCU3p0QlFVRkJMR05CUVdNc1RVRkJTenRCUVVGQkxHTkJRVkVzVFVGQlN6dEJRVUZCTEdOQlFWY3NUVUZCU3p0QlFVRkJMR05CUVZjc1RVRkJTenRCUVVGQkxHTkJRemRsTEU5QlFVMDdRVUZCUVN4alFVRkxMRTlCUVUwN1FVRkJRU3hqUVVGTExFOUJRVTA3UVVGQlFTeGpRVUZYTEU5QlFVMDdRVUZCUVN4alFVRlhMRTlCUVUwN1FVRkJRU3hqUVVGTExFOUJRVTA3UVVGQlFTeGpRVUZMTEU5QlFVMDdRVUZCUVN4alFVRkxMRTlCUVUwN1FVRkJRU3hqUVVGTExFOUJRVTA3UVVGQlFTeGpRVUZMTEU5QlFVMDdRVUZCUVN4alFVRkxMRTlCUVUwN1FVRkJRU3hqUVVGTExFOUJRVTA3UVVGQlFTeGpRVUZMTEU5QlFVMDdRVUZCUVN4alFVRkxMRTlCUVUwN1FVRkJRU3hqUVVGTExFOUJRVTA3UVVGQlFTeGpRVUZMTEU5QlFVMDdRVUZCUVN4alFVRkxMRTlCUVUwN1FVRkJRU3hqUVVGTExFOUJRVTA3UVVGQlFTeGpRVUZMTEU5QlFVMDdRVUZCUVN4WlFVRkpPMEZCUVVVc2NVSkJRVkVzUzBGQlN6dEJRVUZGTEd0Q1FVRkZMRVZCUVVVc1VVRkJVU3hKUVVGSkxFOUJRVThzUjBGQlJTeEhRVUZITEVkQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkJSU3huUWtGQlNTeEpRVUZGTERKRVFVRXlSQ3hOUVVGTkxFZEJRVWNzUjBGQlJTeEpRVUZGTEhkR1FVRjNSaXhOUVVGTkxFZEJRVWM3UVVGQlJTeG5Ra0ZCUlN4RlFVRkRMRTFCUVVzc1QwRkJSeXhGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEZWQlFWVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1RVRkJTeXhQUVVGSExFVkJRVVVzUlVGQlJTeEZRVUZGTEVkQlFVVXNUVUZCU3l4UFFVTjZaaXhGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEZWQlFWVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1RVRkJTeXhQUVVGSExFVkJRVVVzUlVGQlJTeEZRVUZGTEVkQlFVVXNUVUZCU3l4UFFVRkhMRWRCUVVjc1JVRkJSU3hMUVVGSExGRkJRVTBzVFVGQlNTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TlFVRkxMRTlCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVWNzUTBGQlF5eEhRVUZGTEUxQlFVc3NUMEZCUnl4RlFVRkZMRVZCUVVVc1NVRkJSeXhIUVVGRkxFZEJRVWNzUjBGQlJTeE5RVUZMTEU5QlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVc1UwRkJVeXhGUVVGRkxGVkJRVlVzUTBGQlF5eEhRVUZGTEUxQlFVc3NSMEZCUlN4TlFVRkxMRTlCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVWNzUTBGQlF5eEhRVUZGTEUxQlFVc3NUMEZCUnp0QlFVRkRMR3RDUVVGRkxFVkJRVVU3UVVGQlJ5eHRRa0ZCUnl4SlFVRkZMRWxCUVVVc1MwRkJSeXhMUVVGSExFMUJRVWtzUzBGQlJ6dEJRVUZKTEhGQ1FVRlBMRVZCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eEhRVUZGTEUxQlFVc3NUMEZCUnp0QlFVRkRMSFZDUVVGUkxFbEJRVVVzUjBGQlJTeEpRVUZGTEVkQlFVVXNTMEZCUnl4RlFVRkZMRXRCUVVjc1IwRkJSU3hOUVVGSkxFVkJRVVVzUlVGQlJTeExRVUZITEVsQlFVa3NTVUZCUlN4TFFVRkhMRWxCUVVrc1IwRkJSenRCUVVGRk8wRkJRVU1zY1VKQlFVOHNSVUZCUlN4RlFVRkZMRXRCUVVjc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eEhRVUZGTEUxQlFVc3NUMEZCUnl4RlFVRkZMRVZCUVVVc1MwRkJSeXhIUVVGRkxFTkJRVU1zUjBGQlJTeE5RVUZMTEU5QlFVY3NSVUZCUlN4RlFVRkZMRWxCUVVjc1EwRkJReXhIUVVGRkxFMUJRVXNzVFVGQlNTeE5RVUZMTEUxQlFVc3NUMEZCUnl4TFFVRkhMRVZCUVVVc1RVRkJTU3hMUVVGSExFVkJRVVVzUzBGQlJ5eFBRVUZMTEUxQlFVc3NUVUZCU3l4UFFVRkhMRVZCUVVVc1JVRkJSU3hKUVVGSExFTkJRVU1zUjBGQlJTeE5RVUZMTEUxQlFVa3NTMEZCU3l4TlFVRkxMRTlCUVVjc1JVRkJSU3hOUVVGSkxFZEJRVVVzVFVGQlN5eFBRVUZITEVWQlFVVXNTMEZCU3l4UFFVRlBMRVZCUVVVc1MwRkJSeXhKUVVGRkxFVkJRVVVzVFVGQlNTeERRVUZETEVkQlFVVXNRMEZCUXl4SFFVRkZMRTFCUVVzc1QwRkJSenRCUVVGRExHdENRVUZKTEVsQlEzSm1MRXRCUVVzc1QwRkJUeXhGUVVGRkxFdEJRVWNzUzBGQlJ5eEZRVUZGTEV0QlFVY3NTMEZCUnl4TFFVRkhMRU5CUVVNN1FVRkJSU3h2UWtGQlNTeEZRVUZGTEV0QlFVY3NUVUZCU1N4RlFVRkZMRXRCUVVjc1MwRkJSeXhMUVVGSE8wRkJRVWtzYTBKQlFVYzdRVUZCUlN4elFrRkJTU3hOUVVGSkxFdEJRVWNzUlVGQlJTeExRVUZITEUxQlFVa3NSVUZCUlN4TlFVRkpMRWRCUVVVc1MwRkJSeXhMUVVGSExFdEJRVWNzUzBGQlJ5eEZRVUZGTEVWQlFVVXNSVUZCUlN4TlFVRkpMRWxCUVVVN1FVRkJRU3h0UWtGQlVUdEJRVUZETEc5Q1FVRkZPMEZCUVVjc2IwSkJRVWtzUzBGQlJ5eEZRVUZGTEV0QlFVY3NTVUZCUlN4RlFVRkZMRXRCUVVjc1MwRkJSenRCUVVGRkxHbENRVUZETEV0QlFVY3NTMEZCUnl4TFFVRkhMRXRCUVVjc1JVRkJSU3hGUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEUxQlFVazdRVUZCUVN4alFVRkhPMEZCUVVNc2NVSkJRVThzUlVGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRWRCUVVVc1RVRkJTeXhQUVVGSExFVkJRVVVzU1VGQlJ5eE5RVUZMTEU5QlFVY3NSVUZCUlN4TFFVRkxMRTlCUVU4c1JVRkJSU3hMUVVGSExFdEJRVWNzUlVGQlJTeExRVUZITEV0QlFVY3NTMEZCUnl4RFFVRkRMRWRCUVVVc1EwRkJReXhIUVVGRkxFMUJRVXNzVVVGQlNTeEZRVUZGTEV0QlFVY3NUVUZCVFN4VFFVRlRMRVZCUVVVc1ZVRkJWU3hEUVVGRExFZEJRVVVzVFVGQlN5eFBRVUZITEVWQlFVVXNTMEZCUnl4TlFVRkxMRTFCUVVzc1QwRkJSenRCUVVGRExHdENRVUZGTEVWQlFVVTdRVUZCUnl4clFrRkJTU3hKUVVGRkxFdEJRVWM3UVVGQlJTeHJRa0ZCUlN4TFFVRkxMRWxCUVVrc1EwRkJReXhKUVVGRk8wRkJRVWNzYzBKQlFVOHNTVUZCUlN4TlFVRkpMRTlCUVVzc1QwRkJUeXhWUVVGUkxFbEJRVVVzUzBGQlJ5eE5RVUZKTEVsQlFVVXNSMEZCUnl4RlFVRkZMRTFCUVUwc1JVRkJSVHRCUVVGQkxGbEJRVU1zUjBGQlJTeE5RVUZMTEU5QlFVY3NSVUZCUlN4SlFVRkhMRTFCUVVzc1RVRkJTU3hKUVVGSE8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4UlFVRlJMRTlCUVUwc1RVRkJWVHRCUVVGRkxHbENRVUZKTEV0QlFVczdRVUZCUlN4blFrRkJSU3hUUVVGVExFTkJRVU1zVFVGRE9XWXNTVUZCUlN4RlFVRkZMRkZCUVZFc1NVRkJTU3hQUVVGUExFZEJRVVVzUjBGQlJ5eEhRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVGSExHZENRVUZGTEVWQlFVVXNVVUZCVVN4VFFVRlJMRWRCUVVjN1FVRkJSU3huUWtGQlJTeEhRVUZITEVOQlFVTTdRVUZCUlN4blFrRkJSeXhGUVVGRkxGTkJRVTg3UVVGQlJTeHhRa0ZCVHp0QlFVRkZMR05CUVVVc1NVRkJTU3hIUVVGRkxFMUJRVWtzUTBGQlF6dEJRVUZGTEcxQ1FVRlBMRVZCUVVVc1UwRkJUenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVVN4TFFVRkhMRTFCUVUwc1IwRkJSeXhIUVVGRkxFdEJRVWNzUjBGQlJTeE5RVUZKTEVsQlFVY3NSVUZCUlR0QlFVRkhMR1ZCUVVjc1JVRkJSU3hKUVVGRkxFOUJRVThzWVVGQllTeEZRVUZGTzBGQlFVVXNaVUZCUnp0QlFVRkhMR05CUVVVc1JVRkJSU3hsUVVGaExHTkJRV01zVFVGQlN6dEJRVUZCTEZsQlFVTXNXVUZCV1N4SFFVRkZPMEZCUVVNc2IwSkJRVTBzUTBGQlF6dEJRVUZGTEcxQ1FVRkxMRTlCUVVzN1FVRkJRU3haUVVGak8wRkJRVUVzVlVGQlF6dEJRVUZGTEZsQlFVVXNaMEpCUVdNc1kwRkJZeXhOUVVGTE8wRkJRVUVzV1VGQlF5eFpRVUZaTEVkQlFVVTdRVUZCUXl4dlFrRkJUU3hEUVVGRE8wRkJRVVVzYlVKQlFVc3NUMEZCU3p0QlFVRkJMRmxCUVdVN1FVRkJRU3hWUVVGRE8wRkJRVVVzV1VGQlJTeExRVUZMTEVkQlFVVXNSMEZCUlN4UlFVRlBMRWRCUVVVc1RVRkJTeXhIUVVGRkxFMUJRVWNzUjBGQlJTeFBRVUZITEVOQlFVTTdRVUZCUlN4WlFVRkZMSE5DUVVGdlFpeE5RVUZKTEVWQlFVVXNVMEZCVHl4SlFVRkZMRWxCUVVVc1IwRkJSenRCUVVNNVl5eGpRVUZKTEV0QlFVYzdRVUZCUVN4WlFVRkRMRWxCUVVjc1UwRkJVeXhIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEhGQ1FVRlBMRWRCUVVjc1dVRkJVenRCUVVGRExITkNRVUZOTEVWQlFVVXNSMEZCUnl4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxHTkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWRCUVVVc1UwRkJVeXhIUVVGRk8wRkJRVU1zYTBKQlFVVXNTVUZCU1N4SFFVRkhMRTFCUVVrc1EwRkJRenRCUVVGRkxHMUNRVUZITEVWQlFVVXNSVUZCUlN4TFFVRkhMRTlCUVVzc1EwRkJReXhOUVVGSkxFVkJRVVVzUlVGQlJTeExRVUZITEU5QlFVc3NRMEZCUXl4SlFVRkZMRWRCUVVVN1FVRkJUU3huUWtGQlJTeEZRVUZGTEV0QlFVY3NUMEZCU3l4RFFVRkRMRWxCUVVVN1FVRkJSU3hwUWtGQlJ5eExRVUZMTEVOQlFVTTdRVUZCUlN4cFFrRkJSeXhGUVVGRkxFVkJRVVU3UVVGQlJTeHJRa0ZCUnl4SFFVRkhMRVZCUVVVc1JVRkJSU3hMUVVGSExFMUJRVWtzVFVGQlNTeERRVUZETEVOQlFVTTdRVUZCUlN4dlFrRkJSU3hGUVVGRkxFVkJRVVVzVDBGQlN5eE5RVUZKTEVOQlFVTTdRVUZCUVN4dFFrRkJUVHRCUVVGRExHOUNRVUZKTEVsQlFVVXNSVUZCUlN4RlFVRkZMRXRCUVVjc1QwRkJTeXhOUVVGSkxFTkJRVU03UVVGQlJTeHZRa0ZCUlN4TlFVRkpMRWxCUVVVc1NVRkJSU3hGUVVGRk8wRkJRVUVzWTBGQlJUdEJRVUZETEhGQ1FVRlBPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVa3NTVUZCUlN4SFFVRkhMRWxCUVVrN1FVRkJSU3hwUWtGQlJ5eEZRVUZGTEVWQlFVVTdRVUZCUlN4clFrRkJSVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVkQlFVVXNWMEZCVlR0QlFVRkRMSEZDUVVGUExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1IwRkJSU3hUUVVGVExFZEJRVVU3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRU5CUVVNc1RVRkJTU3hEUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SFFVRkZMRk5CUVZNc1IwRkJSU3hIUVVGRk8wRkJRVU1zY1VKQlFVOHNSMEZCUnl4RFFVRkRMRTFCUVVrc1IwRkJSU3hOUVVGSkxFTkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWRCUVVVc1UwRkJVeXhIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEhGQ1FVRlBMRWRCUVVjc1EwRkJReXhOUVVGSkxFZEJRVVVzVFVGQlNTeEhRVUZGTEUxQlFVa3NRMEZCUXl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzU1VGQlJ5eE5RVUZKTzBGQlFVTXNhMEpCUVVrc1NVRkJSU3hIUVVGSExFbEJRVWs3UVVGQlJTeHRRa0ZCUnl4SFFVRkhMSFZDUVVGMVFqdEJRVU0zWjBJc2EwSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVY3NiVUpCUVVjc1JVRkJSU3hGUVVGRkxFdEJRVWNzVDBGQlN5eERRVUZETEUxQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNc1IwRkJSU3hGUVVGRkxFVkJRVVVzUzBGQlJ5eFBRVUZMTEVOQlFVTXNTVUZCUlN4SFFVRkZMRVZCUVVVc1JVRkJSU3hMUVVGSExFOUJRVXNzUTBGQlF5eEpRVUZGTEVkQlFVVTdRVUZCVFN4clFrRkJSVHRCUVVGRkxHOUNRVUZOTzBGQlFVRXNXVUZCUlR0QlFVRkJMRmxCUVVVc1IwRkJSU3hUUVVGVExFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNjVUpCUVVzN1FVRkJSU3hyUWtGQlNTeEpRVUZGTEVsQlFVa3NSMEZCUnl4RFFVRkRPMEZCUVVVc1owSkJRVVVzUlVGQlJTeExRVUZITEU5QlFVc3NUVUZCU1N4RFFVRkRMRWxCUVVVN1FVRkJSU3huUWtGQlJTeEZRVUZGTEV0QlFVY3NUVUZCU1N4TlFVRkpMRU5CUVVNc1NVRkJSU3hOUVVGSk8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4TFFVRkhMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVVzVFVGQlNUdEJRVUZGTEd0Q1FVRkZPMEZCUVVVN1FVRkJTeXh2UWtGQlRUdEJRVUZCTEZsQlFVVTdRVUZCUVN4WlFVRkZMRWxCUVVjc1RVRkJTVHRCUVVGQkxGbEJRVWNzUjBGQlJTeFRRVUZUTEVkQlFVVTdRVUZCUXl4dlFrRkJTU3hOUVVGSk8wRkJRVVVzYjBKQlFVMDdRVUZCUVN4WlFVRkZPMEZCUVVFc1dVRkJSU3hKUVVGSExGZEJRVlU3UVVGQlF5eHhRa0ZCVHp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFbEJRVWNzVjBGQlZUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWxCUVVjc1YwRkJWVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVsQlFVY3NWMEZCVlR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFbEJRVWNzVjBGQlZUdEJRVUZETEhGQ1FVRlBPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzU1VGQlJ5eFhRVUZWTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1NVRkJSeXhYUVVGVk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnl4WFFVRlZPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzU1VGQlJ5eFhRVUZWTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1NVRkJSeXhYUVVGVk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnl4WFFVRlZPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzU1VGQlJ5eFhRVUZWTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1NVRkJSeXhYUVVGVk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnl4VFFVRlRMRWRCUTNwbUxFZEJRVVVzUjBGQlJUdEJRVUZETEd0Q1FVRkZMRVZCUVVVc1RVRkJTU3hEUVVGRE8wRkJRVVVzWjBKQlFVVXNUVUZCU1N4SFFVRkZMRVZCUVVNc1RVRkJTeXhIUVVGRkxHTkJRV0VzVDBGQlJ5eEhRVUZGTEZsQlFWY3NVMEZCVXl4SFFVRkZMRWRCUVVVN1FVRkJReXh2UWtGQlJ5eFpRVUZWTEU5QlFVOHNTMEZCUnl4WlFVRlZMRTlCUVU4N1FVRkJSU3gzUWtGQlRTeFRRVUZQTEVsQlFVVXNTVUZCUlN4VlFVRlJMRWxCUVVVc1QwRkJUeXhIUVVGRkxFbEJRVVVzWVVGQlZ5eExRVUZITEZsQlFWVXNTMEZCUnl4bFFVRmhMRWxCUVVVc1JVRkJSU3hUUVVGVExFbEJRVVVzUzBGQlJ5eEpRVUZITEVsQlFVa3NWVUZCVlN4dFFrRkJiVUlzUTBGQlF5eFJRVUZSTEV0QlFVc3NTVUZCU1N4RlFVRkZPMEZCUVVVc05FSkJRVlVzVDBGQlR5eE5RVUZKTEVsQlFVVXNUMEZCVHl4RFFVRkRPMEZCUVVjc2RVSkJRVTg3UVVGQlFTeGpRVUZETEVkQlFVVXNaMEpCUVdVc1IwRkJSU3h6UWtGQmNVSXNSMEZCUnl4SFFVRkZMRTFCUVVrc1IwRkJSU3hOUVVGSkxFVkJRVVVzVVVGQlVTeEhRVUZITEVOQlFVTXNSMEZCUlN4SlFVRkhMRXRCUVVrc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVsQlFVY3NVMEZCVXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zYTBKQlFVVXNSVUZCUlN4TlFVRkpMRU5CUVVNN1FVRkJSU3huUWtGQlJTeE5RVUZKTEVkQlFVVXNSVUZCUXl4TlFVRkxMRWRCUVVVc1kwRkJZU3hUUVVGVExFZEJRVVU3UVVGQlF5eDFRa0ZCVFN4RFFVRkRMRU5CUVVNN1FVRkJRU3hqUVVGRExFZEJRVVVzV1VGQlZ5eFRRVUZUTEVkQlEyNW1MRWRCUVVVN1FVRkJReXgxUWtGQlR5eEpRVUZGTEVsQlFVVTdRVUZCUVN4alFVRkRMRWRCUVVVc1owSkJRV1VzUjBGQlJTeHpRa0ZCY1VJc1UwRkJVeXhIUVVGRk8wRkJRVU1zZFVKQlFVOHNTMEZCU3l4aFFVRmhMRVZCUVVVc1RVRkJTU3hEUVVGRExFTkJRVU03UVVGQlFTeGpRVUZETEVkQlFVVXNTVUZCUnl4TFFVRkpMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeEpRVUZITEZOQlFWTXNSMEZCUlR0QlFVRkRMSEZDUVVGUExFVkJRVVVzVFVGQlNTeEhRVUZGTEVWQlFVVTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExGTkJRVk1zUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4clFrRkJSU3hGUVVGRkxFMUJRVWtzUTBGQlF6dEJRVUZGTEdkQ1FVRkZMRTFCUVVrc1IwRkJSU3hGUVVGRExFMUJRVXNzUjBGQlJTeGpRVUZoTEU5QlFVY3NSMEZCUlN4WlFVRlhMRU5CUVVNc1IwRkJSU3hOUVVGSkxFZEJRVVVzWjBKQlFXVXNSMEZCUlN4elFrRkJjVUlzUjBGQlJ5eEhRVUZGTEUxQlFVa3NRMEZCUXl4SFFVRkZMRWxCUVVjc1MwRkJTU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnl4VFFVRlRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEhGQ1FVRkxPMEZCUVVVc2NVSkJRVXM3UVVGQlJTeHJRa0ZCUlN4RlFVRkZMRTFCUVVrc1EwRkJRenRCUVVGRkxIRkNRVUZMTEUxQlFVa3NTVUZCUlR0QlFVRlpMR3RDUVVGRkxFOUJRVWM3UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWRCUVVVN1FVRkJReXh2UWtGQlNTeEpRVUZGTEV0QlFVY3NTVUZCUlR0QlFVRkZMRzlDUVVGRkxFOUJRVWNzUzBGQlJ5eE5RVUZKTzBGQlFVRXNZMEZCUXp0QlFVRkRMR3RDUVVGSkxFbEJRVVVzUlVGQlJTeFRRVUZUTEZWQlFWVXNTVUZCUlN4VFFVRlRMRWRCUVVVc1IwRkJSVHRCUVVGRExIVkNRVUZQTEUxQlFVazdRVUZCUVN4alFVRkRMRWxCUVVVc1UwRkJVeXhIUVVGRkxFZEJRVVU3UVVGQlF5eDFRa0ZCVHp0QlFVRkJMR05CUVVNN1FVRkJSU3huUWtGQlJTeEhRVUZGTzBGQlFVRXNaMEpCUVVNc1RVRkJTenRCUVVGQkxHZENRVU53Wml4alFVRmhPMEZCUVVFc1owSkJRVVVzV1VGQlZ6dEJRVUZCTEdkQ1FVRkZMR2RDUVVGbE8wRkJRVUVzWjBKQlFVVXNjMEpCUVhGQ0xFZEJRVWNzUjBGQlJTeEhRVUZGTEUxQlFVa3NRMEZCUXp0QlFVRkJMR2RDUVVGRkxFbEJRVWM3UVVGQlFTeGpRVUZKTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hIUVVGRkxGTkJRVk1zUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4MVFrRkJVeXhGUVVGRkxFZEJRVVU3UVVGQlF5eDFRa0ZCVHl4SlFVRkpMRVZCUVVVc1JVRkJSU3hSUVVGUExFVkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SFFVRkZMRVZCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zUTBGQlF6dEJRVUZCTEdOQlFVTTdRVUZCUXl4clFrRkJTU3hKUVVGRkxFTkJRVU1zVjBGQlZTeFpRVUZYTEZsQlFWY3NZVUZCV1N4WlFVRlhMR0ZCUVZrc1kwRkJZU3hqUVVGaExHVkJRV01zWTBGQll5eEZRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSU3hGUVVGRkxFMUJRVWtzUTBGQlF6dEJRVUZGTEdkQ1FVRkZMRTFCUVVrc1IwRkJSU3hGUVVGRExFMUJRVXNzUjBGQlJTeGpRVUZoTEVkQlFVVXNaMEpCUVdVc1IwRkJSU3h6UWtGQmNVSXNSVUZCUXl4SFFVRkZMRVZCUVVNc1NVRkJSeXhMUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SlFVRkhMRk5CUVZNc1IwRkJSU3hIUVVGRk8wRkJRVU1zYTBKQlFVVXNSVUZCUlN4TlFVRkpMRU5CUVVNN1FVRkJSU3hyUWtGQlNTeEpRVUZGTEd0Q1FVRm5RanRCUVVGRkxHZENRVUZGTEUxQlFVa3NSMEZCUlN4RlFVRkRMRTFCUVVzc1IwRkJSU3hqUVVGaExGTkJRVk1zUjBGQlJUdEJRVUZETEc5Q1FVRkpMRWxCUVVVc1JVRkJSU3hOUVVOeVppeE5RVUZKTEVOQlFVTXNSMEZCUlN4SlFVRkZMRWxCUVVVN1FVRkJSU3h2UWtGQlJ6dEJRVUZGTERKQ1FVRlJMRWxCUVVVc1IwRkJSU3hKUVVGRkxFZEJRVVVzUzBGQlJ5eEhRVUZGTEVWQlFVVXNSMEZCUlR0QlFVRkRMSGRDUVVGSkxFbEJRVVVzU1VGQlJUdEJRVUZGTEhkQ1FVRkhMRXRCUVVjc1MwRkJSeXhMUVVGSExFVkJRVVVzVFVGQlNTeERRVUZETEVkQlFVVTdRVUZCUXl3d1FrRkJSU3hGUVVGRkxFZEJRVVVzU1VGQlJTeERRVUZETzBGQlFVVXNNRUpCUVVjc1YwRkJVenRCUVVGRkxEUkNRVUZKTEVsQlFVVTdRVUZCUVR0QlFVRlBMRFpDUVVGSExFOUJRVThzWVVGQllTeERRVUZETEVkQlFVVXNTMEZCUnp0QlFVRkZMREJDUVVGRkxFbEJRVVU3UVVGQlFTeHZRa0ZCUXp0QlFVRkJMR3RDUVVGRE8wRkJRVUVzY1VKQlFVczdRVUZCUXl4elFrRkJSU3hOUVVGTkxFTkJRVU03UVVGQlJTeDFRa0ZCU1N4SlFVRkZMRWRCUVVVc1NVRkJSU3hIUVVGRkxFVkJRVVU3UVVGQlJTeHpRa0ZCUlN4RFFVRkRMRWxCUVVVc1QwRkJUeXhoUVVGaExFVkJRVVVzU1VGQlJTeE5RVUZKTEVOQlFVTXNRMEZCUXp0QlFVRkZMSE5DUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTzBGQlFVRXNaMEpCUVVNN1FVRkJReXhyUWtGQlJTeERRVUZETzBGQlFVVXNkVUpCUVU4N1FVRkJRU3hqUVVGRExFZEJRVVVzV1VGQlZ5eFRRVUZUTEVkQlFVVXNSMEZCUlR0QlFVRkRMRFpDUVVGaExHZENRVUZqTEVsQlFVVXNTVUZCU1N4WFFVRlhMRU5CUVVNN1FVRkJSeXh2UWtGQlNTeEpRVUZGTEZsQlFWVXNUMEZCVHp0QlFVRkZMRzlDUVVGSExFVkJRVVVzUzBGQlJ5eGhRVUZoTEdOQlFWa3NZVUZCWVN4eFFrRkJiVUlzWVVGQllUdEJRVUZYTEhkQ1FVRk5MRWxCUVVrc1JVRkJSU3gxUTBGQmRVTTdRVUZCUlN4dlFrRkJTU3hKUVVGRkxFdEJRVWNzU1VGQlJTeEhRVUZITEVOQlFVTXNTVUZEZUdZc1JVRkJSVHRCUVVGUExHOUNRVUZKTEVsQlFVVXNSMEZCUnl4SlFVRkZMRWxCUVVVc1EwRkJReXhIUVVGRkxFbEJRVVVzU1VGQlJUdEJRVUZGTEd0Q1FVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVU3UVVGQlJTeHZRa0ZCUnl4TFFVRkhPMEZCUVVVc2IwSkJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNTVUZCUlN4RFFVRkRPMEZCUVVFc2VVSkJRVlU3UVVGQlJTeDFRa0ZCU1N4SlFVRkZMRWRCUVVVc1NVRkJSU3hIUVVGRkxFVkJRVVVzUjBGQlJUdEJRVUZETEhkQ1FVRkpMRWxCUVVVc1JVRkJSU3hYUVVGWExFTkJRVU03UVVGQlJTeDNRa0ZCUnl4TlFVRkpPMEZCUVVVc05FSkJRVTBzUlVGQlJTeERRVUZETEVkQlFVVXNTVUZCU1N4RlFVRkZMSGRFUVVGM1JEdEJRVUZGTEhOQ1FVRkZMRWxCUVVVc1RVRkJTU3hEUVVGRExFbEJRVVU3UVVGQlFTeHJRa0ZCUXp0QlFVRkJPMEZCUVUwc2RVSkJRVWtzU1VGQlJTeEhRVUZGTEVsQlFVVXNSMEZCUlN4RlFVRkZPMEZCUVVVc2MwSkJRVVVzU1VGQlJTeE5RVUZKTEVOQlFVTXNTVUZCUlN4RlFVRkZMRU5CUVVNN1FVRkJSU3g1UWtGQlR5eExRVUZITEVWQlFVVXNTMEZCU3l4SFFVRkZMRU5CUVVNN1FVRkJSU3gxUWtGQlR6dEJRVUZCTEdOQlFVTXNSMEZCUlN4blFrRkJaU3hIUVVGRkxITkNRVUZ4UWl4SlFVRkhMRWRCUVVjc1IwRkJSVHRCUVVGRExHdENRVUZGTEVOQlFVTTdRVUZCUVN4alFVRkRMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVsQlFVY3NVMEZCVXl4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExIRkNRVUZMTzBGQlFVVXNjVUpCUVVzN1FVRkJSU3hyUWtGQlJTeEZRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFZEJRVVU3UVVGQlF5eHZRa0ZCU1N4SlFVRkZPMEZCUVVjc2IwSkJRVWtzU1VGQlJUdEJRVUZITEc5Q1FVRkpMRWxCUVVVN1FVRkJSeXh2UWtGQlNTeEpRVUZGTEU5QlFVY3NSMEZCUnl4TlFVRkpMRTFCUVVrc1EwRkJRenRCUVVGQkxHTkJRVU03UVVGQlRTeHpRa0ZCU1N4TlFVRkpMRWxCUVVVc1NVRkJSeXhKUVVGRkxFbEJRVWNzU1VGQlJTeEpRVUZITEVsQlFVVXNUMEZCUnl4RlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRE8wRkJRVWNzWjBKQlFVVXNUVUZCU1N4SFFVRkZPMEZCUVVFc1owSkJRVU1zVFVGQlN6dEJRVUZCTEdkQ1FVTnVaaXhqUVVGaExFOUJRVWM3UVVGQlF5d3lRa0ZCVVN4SlFVRkZMRVZCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVsQlFVVXNTVUZCUlN4SFFVRkZMRWxCUVVVc1IwRkJSU3hMUVVGSExFZEJRVVVzUlVGQlJTeEhRVUZGTzBGQlFVTXNkMEpCUVVrc1NVRkJSU3hKUVVGRkxFbEJRVVVzU1VGQlJUdEJRVUZGTEhkQ1FVRkhMRXRCUVVjc1MwRkJSeXhMUVVGSExFVkJRVVVzUTBGQlF6dEJRVUZGTERCQ1FVRkZMRVZCUVVVc1IwRkJSU3hKUVVGRkxFTkJRVU1zUjBGQlJTeFhRVUZUTEVsQlFVVXNTVUZCUlN4TFFVRkhMRXRCUVVjc1QwRkJUeXhoUVVGaExFTkJRVU1zUjBGQlJTeExRVUZITEVsQlFVY3NTVUZCUlN4SlFVRkZPMEZCUVVFc2EwSkJRVU03UVVGQlF5eHZRa0ZCUlN4RFFVRkRPMEZCUVVVc2VVSkJRVTg3UVVGQlFTeG5Ra0ZCUXp0QlFVRkJMR2RDUVVGRkxGbEJRVmNzUTBGQlF5eEhRVUZGTEUxQlFVazdRVUZCUXl4elFrRkJSeXhaUVVGVkxFOUJRVTg3UVVGQlJTd3dRa0ZCVFN4SlFVRkpMRVZCUVVVc05rTkJRVFpETEVOQlFVTXNSVUZCUlR0QlFVRkZMSE5DUVVGSkxFbEJRVVVzUlVGQlJTeERRVUZETEVkQlFVVXNTVUZCUlN4SFFVRkhMRWxCUVVVc1NVRkJSU3hEUVVGRE8wRkJRVVVzYjBKQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1NVRkJSU3hKUVVGRk8wRkJRVVVzYjBKQlFVVXNSMEZCUlN4SlFVRkZMRWRCUVVVc1NVRkJSU3hEUVVGRE8wRkJRVVVzTWtKQlFVOHNTMEZCUnl4RlFVRkZMRXRCUVVzc1IwRkJSU3hEUVVGRE8wRkJRVVVzZVVKQlFVODdRVUZCUVN4blFrRkJRenRCUVVGQkxHZENRVUZGTEdkQ1FVRmxPMEZCUVVFc1owSkJRVVVzYzBKQlFYRkNPMEZCUVVFc1owSkJRVWNzUjBGQlJ5eEhRVUZGTzBGQlFVTXNiMEpCUVVVc1EwRkJRenRCUVVGQkxHZENRVUZETzBGQlFVRXNZMEZCUXl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzU1VGQlJ5eFRRVUZUTEVkQlFVVXNSMEZCUlR0QlFVRkRMR3RDUVVGRkxFVkJRVVVzVFVGQlNTeERRVUZETzBGQlFVVXNaMEpCUVVVc1RVRkJTU3hIUVVGRkxFVkJRVU1zU1VGQlJ5eE5RVUZITEUxQlFVc3NSMEZCUlN4blFrRkJaU3hIUVVGRkxHTkJRV0VzVFVGRGFtWTdRVUZCUVN4alFVRkRMRWRCUVVVc1dVRkJWeXhOUVVGSk8wRkJRVUVzWTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExFMUJRVWs3UVVGQlFTeFpRVUZGTEVsQlFVY3NVMEZCVXl4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExIRkNRVUZMTzBGQlFVVXNjVUpCUVVzN1FVRkJSU3hyUWtGQlJTeEZRVUZGTEUxQlFVa3NRMEZCUXp0QlFVRkZMR3RDUVVGRkxFZEJRVWNzUjBGQlJTeFhRVUZYTzBGQlFVVXNjVUpCUVU4c1IwRkJSeXhIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWxCUVVjc1UwRkJVeXhIUVVGRk8wRkJRVU1zY1VKQlFVczdRVUZCUlN4eFFrRkJUeXhIUVVGSExFMUJRVWs3UVVGQlF5eHZRa0ZCUlN4RlFVRkZMRU5CUVVNN1FVRkJSU3gxUWtGQlR5eEZRVUZGTEV0QlFVc3NRMEZCUXp0QlFVRkJMR05CUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVsQlFVY3NVMEZCVXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zY1VKQlFVczdRVUZCUlN4eFFrRkJTenRCUVVGRkxHdENRVUZGTEVkQlFVY3NUVUZCU1N4RFFVRkRPMEZCUVVVc2EwSkJRVVVzUlVGQlJTeE5RVUZKTEVOQlFVTTdRVUZCUlN4eFFrRkJUeXhGUVVGRkxFMUJRVXNzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExGTkJRVk1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc2NVSkJRVXM3UVVGQlJTeHhRa0ZCU3p0QlFVRkZMSEZDUVVGTE8wRkJRVVVzYTBKQlFVVXNSMEZCUnl4TlFVRkpMRU5CUVVNN1FVRkJSU3hyUWtGQlJTeEZRVUZGTEUxQlFVa3NRMEZCUXp0QlFVRkZMR3RDUVVGRkxFZEJRVWNzUTBGQlF6dEJRVUZGTEhGQ1FVRlBMRVZCUVVVc1IwRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITEZOQlFWTXNSMEZCUlN4SFFVRkZPMEZCUVVNc2NVSkJRVXM3UVVGQlJTeHJRa0ZCUlN4RlFVRkZMRTFCUVVrc1EwRkJRenRCUVVGRkxHdENRVUZGTEVWQlFVVXNRMEZCUXp0QlFVRkZMSEZDUVVGUExFdEJRVWM3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SlFVRkhMRk5CUVZNc1IwRkJSVHRCUVVGRExIRkNRVUZMTzBGQlFVVXNhMEpCUVVjc1RVRkJTVHRCUVVGRkxIVkNRVUZQTEVWQlFVVXNSMEZCUnl4RFFVRkRPMEZCUVVVc2EwSkJRVVVzUjBGQlJ5eERRVUZETzBGQlFVVXNjVUpCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1NVRkJSeXhUUVVGVExFZEJRM1JtTEVkQlFVVXNSMEZCUlR0QlFVRkRMR3RDUVVGRkxFZEJRVWNzUjBGQlJTeE5RVUZKTEVOQlFVTTdRVUZCUlN4clFrRkJTU3hKUVVGRkxFVkJRVVVzVFVGQlRUdEJRVUZGTzBGQlFVa3NhMEpCUVVrc1NVRkJSU3g1UkVGQmQwUXNTVUZCUlN4SFFVRkZMRWxCUVVVc1EwRkJRenRCUVVGRkxHOUNRVUZKTEV0QlFVY3NSVUZCUlN4TFFVRkxMRXRCUVVzN1FVRkJSU3gxUWtGQlVTeEpRVUZGTEVOQlFVTXNVMEZCVXl4SFFVRkZMRWxCUVVVc1EwRkJReXhEUVVGRExFZEJRVVVzU1VGQlJTeEhRVUZGTEVsQlFVVXNSMEZCUlN4RlFVRkZPMEZCUVVVc2EwSkJRVVVzUzBGQlN5eFJRVUZOTEVOQlFVTXNSMEZCUlN4RlFVRkZMRXRCUVVzc1dVRkJWU3hEUVVGRExFZEJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVVc1MwRkJSeXhaUVVGWkxFTkJRVU1zWVVGQllTeERRVUZETERaQ1FVRTJRaXhKUVVGRkxFMUJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVRXNSMEZCVHl4TFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRk8wRkJRV1VzYlVKQlFVY3NZMEZCWXl4TlFVRkpMRWxCUVVVc1lVRkJWeXhYUVVGWExFbEJRVWtzUlVGQlJTeExRVUZMTEVsQlFVa3NRMEZCUXp0QlFVRkJPMEZCUVU4c1owSkJRVVVzVDBGQlN5eEZRVUZGTEV0QlFVc3NiVUpCUVcxQ0xFZEJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUlN4TFFVRkhPMEZCUVRoRUxHZENRVUZGTEV0QlFVc3NTVUZEZW1Zc1RVRkJUVHRCUVVGRkxHdENRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJRenRCUVVGRkxHdENRVUZGTEdsQ1FVRnBRaXhGUVVGRkxFbEJRVWtzVDBGQlJ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4TFFVRkxMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNUdEJRVUZKTEhGQ1FVRlBMRWRCUVVjc1IwRkJSeXhIUVVGRkxFTkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWxCUVVjc1UwRkJVeXhIUVVGRkxFZEJRVVU3UVVGQlF5eHhRa0ZCU3p0QlFVRkZMR3RDUVVGRkxFVkJRVVVzVFVGQlNTeERRVUZETzBGQlFVVXNhMEpCUVVVc1JVRkJSU3hEUVVGRE8wRkJRVVVzY1VKQlFVOHNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVsQlFVY3NVMEZCVXl4SFFVRkZPMEZCUVVNc2NVSkJRVXM3UVVGQlJTeHJRa0ZCUlN4TlFVRkpMRVZCUVVVc1NVRkJSU3hEUVVGRExFdEJRVWM3UVVGQlFTeFpRVUZGTzBGQlFVRXNXVUZCUlN4SlFVRkhMRmRCUVZVN1FVRkJReXh4UWtGQlR5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFbEJRVWNzVTBGQlV5eEhRVUZGTzBGQlFVTXNhMEpCUVVVc1JVRkJSU3hOUVVGSkxFTkJRVU03UVVGQlJTeDFRa0ZCVVN4SlFVRkZMRTFCUVUwc1JVRkJSU3hOUVVGTkxFZEJRVVVzU1VGQlJTeEhRVUZGTEVsQlFVVXNSVUZCUlN4UlFVRlBPMEZCUVVrc2EwSkJRVVVzUTBGQlF5eEpRVUZGTEVWQlFVVXNRMEZCUXp0QlFVRkZMSEZDUVVGUExFVkJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWRCUVVVc1UwRkJVeXhIUVVGRk8wRkJRVU1zY1VKQlFVOHNSVUZCUlN4SFFVRkhMRTFCUVVrc1EwRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnl4WFFVRlZPMEZCUVVNc2NVSkJRVThzUlVGQlJTeERRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExGTkJRVk1zUjBGQlJUdEJRVUZETEhGQ1FVRkxPMEZCUVVVc2RVSkJRVkVzU1VGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUlN4RlFVRkZMRlZCUVZFN1FVRkJReXh2UWtGQlNTeEpRVUZGTEVWQlFVVXNTVUZCU1R0QlFVRkZMR3RDUVVGRkxFbEJRVWtzUlVGQlJTeERRVUZETzBGQlFVRXNZMEZCUXp0QlFVRkRMR2xDUVVGSExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SlFVRkhMRk5CUVZNc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eHhRa0ZCU3p0QlFVRkZMSEZDUVVGTE8wRkJRM0JtTEd0Q1FVRkZMRVZCUVVVc1RVRkJTU3hEUVVGRE8wRkJRVVVzYTBKQlFVVXNSVUZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVVVzUlVGQlJTeERRVUZETzBGQlFVVXNaMEpCUVVVc1EwRkJReXhKUVVGRk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnl4VFFVRlRMRWRCUVVVc1IwRkJSVHRCUVVGRExIRkNRVUZMTzBGQlFVVXNhMEpCUVVVc1IwRkJSeXhOUVVGSkxFZEJRVVVzYlVKQlFXMUNPMEZCUVVVc2EwSkJRVVVzUlVGQlJTeHhRa0ZCY1VJc1EwRkJRenRCUVVGRkxIRkNRVUZQTEVWQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFbEJRVWNzVTBGQlV5eEhRVUZGTEVkQlFVVTdRVUZCUXl4clFrRkJSU3h2UWtGQmEwSXNTMEZCUnl4dFFrRkJhVUlzU1VGQlJTeE5RVUZKTEU5QlFVOHNRMEZCUXp0QlFVRkZMSEZDUVVGTE8wRkJRVVVzYTBKQlFVVXNTVUZCU1N4TFFVRkxMRTFCUVVrc1EwRkJRenRCUVVGRkxHZENRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hqUVVGak8wRkJRVVVzWjBKQlFVVXNTVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRkxFVkJRVVVzWTBGQll6dEJRVUZGTEdkQ1FVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zU1VGQlJTeEZRVUZGTEZsQlFWazdRVUZCUlN4blFrRkJSU3hKUVVGRkxFOUJRVXNzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4WFFVRlhPMEZCUVVVc1owSkJRVVVzU1VGQlJTeFBRVUZMTEUxQlFVa3NRMEZCUXl4SlFVRkZMRVZCUVVVc1dVRkJXVHRCUVVGRkxHZENRVUZGTEVsQlFVVXNUMEZCU3l4TlFVRkpMRU5CUVVNc1NVRkJSU3hGUVVGRkxHVkJRV1VzU1VGQlJUdEJRVUZMTEdkQ1FVRkZMRWxCUVVVc1QwRkJTeXhOUVVGSkxFTkJRVU1zU1VGQlJTeEZRVUZGTEZWQlFWVTdRVUZCUlN4blFrRkJSU3hKUVVGRkxFOUJRVXNzVFVGQlNTeERRVUZETEV0QlFVY3NSVUZCUlN4UlFVRlJMRWxCUVVVc1MwRkJTenRCUVVGQkxHZENRVUZKTEVWQlFVVXNaVUZCWlR0QlFVRkJMR2RDUVVNdlpqdEJRVUZCTEdkQ1FVRkZPMEZCUVVFc1owSkJRVVU3UVVGQlFTeG5Ra0ZCUlR0QlFVRkJMR2RDUVVGRk8wRkJRVUVzWjBKQlFVVTdRVUZCUVN4alFVRkRMRXRCUVVjc1VVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVsQlFVY3NVMEZCVXl4SFFVRkZMRWRCUVVVN1FVRkJReXhyUWtGQlJTeHZRa0ZCYTBJc1MwRkJSeXh0UWtGQmFVSXNTVUZCUlN4TlFVRkpMRTlCUVU4c1EwRkJRenRCUVVGRkxIRkNRVUZMTzBGQlFVVXNhMEpCUVVVc1NVRkJTU3hMUVVGTExFMUJRVWtzUTBGQlF6dEJRVUZGTEdkQ1FVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFhRVUZYTzBGQlFVVXNaMEpCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEpRVUZGTEVWQlFVVXNWMEZCVnp0QlFVRkZMR2RDUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNTVUZCUlN4RlFVRkZMRk5CUVZNN1FVRkJSU3huUWtGQlJTeEpRVUZGTEU5QlFVc3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hSUVVGUk8wRkJRVVVzWjBKQlFVVXNTVUZCUlN4UFFVRkxMRTFCUVVrc1EwRkJReXhKUVVGRkxFVkJRVVVzVTBGQlV6dEJRVUZGTEdkQ1FVRkZMRWxCUVVVc1QwRkJTeXhOUVVGSkxFTkJRVU1zU1VGQlJTeEZRVUZGTEZsQlFWa3NTVUZCUlR0QlFVRkxMR2RDUVVGRkxFbEJRVVVzVDBGQlN5eE5RVUZKTEVOQlFVTXNTVUZCUlN4RlFVRkZMRTlCUVU4N1FVRkJSU3huUWtGQlJTeEpRVUZGTEU5QlFVc3NUVUZCU1N4RFFVRkRMRXRCUVVjc1JVRkJSU3hGUVVGRkxGbEJRVmtzUTBGQlF5eEpRVUZGTEV0QlFVY3NTVUZCU1N4RlFVRkZMRk5CUVZNc1EwRkJReXhKUVVGRkxFVkJRVVVzVVVGQlVTeEpRVUZGTEVsQlFVVTdRVUZCUlN4blFrRkJSU3hKUVVGRkxFOUJRVXNzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4TFFVRkhMRVZCUVVVc2EwSkJRV3RDTzBGQlFVY3NhMEpCUVVrc1NVRkJSeXhKUVVGSkxFdEJRVXNzUlVGQlJTeFpRVUZaTEVkQlFVVXNSMEZCUlN4RFFVRkRMRVZCUVVjc2EwSkJRV3RDTEVkQlEzSm1MRWxCUVVjc1NVRkJTU3hMUVVGTExFVkJRVVVzV1VGQldTeEhRVUZGTEVkQlFVVXNRMEZCUXl4RlFVRkhMR3RDUVVGclFqdEJRVUZGTEdkQ1FVRkZMRWxCUVVVc1QwRkJTeXhOUVVGSkxFTkJRVU1zUzBGQlJ5eExRVUZITEV0QlFVY3NSVUZCUlN4clFrRkJhMElzUzBGQlJ5eExRVUZMTEVsQlFVa3NSMEZCUlN4RFFVRkRMRXRCUVVjN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeEpRVUZITEZOQlFWTXNSMEZCUlR0QlFVRkRMSEZDUVVGTE8wRkJRVVVzYTBKQlFVa3NTVUZCUlN4SlFVRkpMRXRCUVVzc1JVRkJSU3hKUVVGRkxFOUJRVXNzVFVGQlNTeERRVUZETEVsQlFVVXNUVUZCU3l4RlFVRkZMRWxCUVVVc1QwRkJTeXhOUVVGSkxFTkJRVU1zUjBGQlJTeEZRVUZGTEVsQlFVVXNUMEZCU3l4TlFVRkpMRU5CUVVNc1IwRkJSU3hGUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNSMEZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zUjBGQlJTeEZRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWRCUVVVc1EwRkJReXhIUVVGRkxFbEJRVVVzUlVGQlJTeEpRVUZGTEU5QlFVc3NUVUZCU1N4RFFVRkRMRWRCUVVVc1NVRkJSU3hGUVVGRkxHdENRVUZyUWl4SFFVRkZMRWxCUVVjc1NVRkJTU3hMUVVGTExFVkJRVVVzV1VGQldTeEhRVUZGTEVkQlFVVXNRMEZCUXl4RlFVRkhMR3RDUVVGclFpeEhRVUZGTEVsQlFVY3NTVUZCU1N4TFFVRkxMRVZCUVVVc1dVRkJXU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEZRVUZITEd0Q1FVRnJRaXhIUVVGRkxFbEJRVVVzUzBGQlN5eEpRVUZKTEVkQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGRkxFbEJRVVVzUlVGQlJTeEpRVUZGTEU5QlFVc3NUVUZCU1N4RFFVRkRMRWxCUVVVc1QwRkJUeXhMUVVGSExFdEJRVWNzUzBGQlJ5eERRVUZETEVsQlFVVXNTVUZCUlN4TlFVRkpMRXRCUVVjc1QwRkJTeXhKUVVGRkxFdEJRVXNzU1VGQlNTeEhRVUZGTEVOQlFVTXNSMEZCUlN4RlFVRkZMRkZCUVZFc1JVRkJSU3hSUVVGUkxFbEJRemRtTEZGQlFVMHNTVUZCUlN4SlFVRkZMRWxCUVVVc1MwRkJSeXhGUVVGRk8wRkJRVWNzWjBKQlFVVXNTVUZCUlN4UFFVRkxMRTFCUVVrc1EwRkJReXhKUVVGRkxFVkJRVVVzVDBGQlR6dEJRVUZGTEdkQ1FVRkZMRWxCUVVVc1QwRkJTeXhOUVVGSkxFTkJRVU1zUzBGQlJ5eEZRVUZGTEVWQlFVVXNXVUZCV1N4RFFVRkRMRWxCUVVVc1MwRkJSeXhKUVVGSkxFVkJRVVVzVTBGQlV5eERRVUZETEVsQlFVVXNSVUZCUlN4UlFVRlJMRWxCUVVVc1NVRkJSVHRCUVVGRkxHZENRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hYUVVGWE8wRkJRVVVzWjBKQlFVVXNTVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRkxFVkJRVVVzVjBGQlZ6dEJRVUZGTEdkQ1FVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zU1VGQlJTeEZRVUZGTEZOQlFWTTdRVUZCUlN4blFrRkJSU3hKUVVGRkxFOUJRVXNzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4UlFVRlJPMEZCUVVVc1owSkJRVVVzU1VGQlJTeFBRVUZMTEUxQlFVa3NRMEZCUXl4SlFVRkZMRVZCUVVVc1UwRkJVenRCUVVGRkxHZENRVUZGTEVsQlFVVXNUMEZCU3l4TlFVRkpMRU5CUVVNc1NVRkJSU3hGUVVGRkxGRkJRVkU3UVVGQlJTeHJRa0ZCUlN4RlFVRkZMRkZCUVZFN1FVRkJSU3h4UWtGQlR5eFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkZMRXRCUVVjc1NVRkJSU3hIUVVGSE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnl4WFFVRlZPMEZCUVVNc2NVSkJRVTA3UVVGQlFTeFpRVUZITzBGQlFVRXNXVUZCUlN4SlFVRkhMRmRCUVZVN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeEpRVUZITEZOQlFWTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExIRkNRVUZMTzBGQlFVVXNjVUpCUVVzN1FVRkJSU3hyUWtGQlNTeExRVUZITEc5Q1FVRkpMRkZCUVUwc1dVRkJXU3hIUVVGRkxFbEJRVVVzU1VGQlNTeExRVUZMTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1NVRkJSU3hKUVVGSkxFdEJRVXNzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSU3hGUVVGRkxHdENRVUZyUWp0QlFVTjRaaXhyUWtGQlNTeEpRVUZGTEVWQlFVVXNhMEpCUVd0Q08wRkJRVVVzWjBKQlFVVXNUVUZCU1N4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRkxFdEJRVWNzUzBGQlN5eEpRVUZKTEVkQlFVVXNRMEZCUXp0QlFVRkZMR2RDUVVGRkxFMUJRVWtzVFVGQlNTeE5RVUZKTEVOQlFVTXNTVUZCUlN4UFFVRlBMRXRCUVVjc1EwRkJRenRCUVVGRkxHdENRVUZGTEU5QlFVY3NSVUZCUlN4dFFrRkJiVUlzVVVGQlR5eEZRVUZETEZGQlFVOHNUMEZCUnl4alFVRmhMRkZCUVU4c1EwRkJReXhGUVVGRkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSU3hGUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUlN4RlFVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJTeExRVUZITEVWQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1JVRkJSU3hIUVVGRkxFVkJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSVUZCUlN4TlFVRkpMRVZCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUlVGQlJTeEhRVUZGTEVWQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1JVRkJSVHRCUVVGQkxGbEJRVVU3UVVGQlFTeFpRVUZGTEVsQlFVY3NUVUZCU1R0QlFVRkRMR2xDUVVGSExFVkJRVVU3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SFFVRkZMRk5CUVZNc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eHhRa0ZCU3p0QlFVRkZMR3RDUVVGRkxFZEJRVWNzVFVGQlNTeEhRVUZGTEUxQlFVa3NRMEZCUXp0QlFVRkZMSEZDUVVGUExFZEJRVWNzUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFbEJRVWNzVTBGQlV5eEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMSEZDUVVGTE8wRkJRVVVzYTBKQlFVVXNSMEZCUnl4TlFVRkpMRWRCUVVVc1RVRkJTU3hEUVVGRE8wRkJRVVVzY1VKQlFVOHNSMEZCUnl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnl4TlFVRkpMRXRCUVVzc1NVRkJTVHRCUVVGQkxGbEJRVVVzU1VGQlJ5eFhRVUZWTzBGQlFVTXNjVUpCUVU4N1FVRkJRU3haUVVGVk8wRkJRVUVzV1VGQlJTeEpRVUZITEUxQlFVa3NXVUZCV1N4SlFVRkpPMEZCUVVFc1dVRkJSU3hKUVVGSExGTkJRVk1zUjBGQlJUdEJRVUZETEhGQ1FVRkxPMEZCUVVVc2EwSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVOHNhMEpCUVVjc1lVRkRkbVk3UVVGQlJTeDFRa0ZCVFR0QlFVRkhMSFZDUVVGUkxFbEJRVVVzUjBGQlJTeExRVUZITEVkQlFVVXNTMEZCUnl4SFFVRkZPMEZCUVVNc2IwSkJRVWtzU1VGQlJTeExRVUZITEVsQlFVVXNUVUZCUnp0QlFVRkhMRzlDUVVGRkxFdEJRVXNzU1VGQlNTeEhRVUZGTEVsQlFVVXNVMEZCVXp0QlFVRkZMRzlDUVVGSkxFbEJRVVU3UVVGQlN5eHZRa0ZCUlN4TFFVRkxMRWxCUVVrc1IwRkJSU3hEUVVGRE8wRkJRVVVzYlVKQlFVVTdRVUZCUXl4MVFrRkJSeXhGUVVGRkxFbEJRVWtzUzBGQlN5eEhRVUZGTEZsQlFWY3NTMEZCUnl4UlFVRk5MRWxCUVVVc1UwRkJUeXhMUVVGTExFbEJRVVVzUjBGQlJ5eFBRVUZQTEdGQlFWY3NVMEZCVHp0QlFVRk5MSE5DUVVGSE8wRkJRVU1zZFVKQlFVY3NTMEZCU3l4RFFVRkRPMEZCUVVVc2RVSkJRVWM3UVVGQlJTeDNRa0ZCU1N4SlFVRkZPMEZCUVVVc01FSkJRVTA3UVVGQlFTeHJRa0ZCUXl4VFFVRlBMRWRCUVVVN1FVRkJRU3hyUWtGQlF6dEJRVUZETEhOQ1FVRkZPMEZCUVVFc1owSkJRVTA3UVVGQlF5eHZRa0ZCUnp0QlFVRkZMSGxDUVVGTk8wRkJRVUVzWTBGQlJUdEJRVUZETEhGQ1FVRk5PMEZCUVVFc1dVRkJSVHRCUVVGQkxGbEJRVVVzU1VGQlJ5eFRRVUZUTEVkQlFVVXNSMEZCUlR0QlFVRkRMSEZDUVVGTE8wRkJRVVVzY1VKQlFVczdRVUZCUlN4clFrRkJTU3hKUVVGRk8wRkJRVVVzYVVKQlFVY3NSVUZCUlN4UlFVRlJMRU5CUVVNc1IwRkJSU3hOUVVGSk8wRkJRVU1zYjBKQlFVa3NTVUZCUlN4SlFVRkZPMEZCUVVVc2IwSkJRVVVzUlVGQlJTeEpRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1NVRkJSVHRCUVVGRkxIRkNRVUZKTEVsQlFVVXNSMEZCUlN4SlFVRkZMRVZCUVVVc1VVRkJUeXhGUVVGRk8wRkJRVVVzYjBKQlFVVXNVVUZCVFN4RFFVRkRMRWxCUVVVc1JVRkJSU3hYUVVGWExFTkJRVU03UVVGQlJTeHJRa0ZCUlN4TlFVRkpMRU5CUVVNc1NVRkJSVHRCUVVGRkxIRkNRVUZITEVWQlFVVXNVMEZCVHp0QlFVRkJMR05CUVVNc1EwRkJRenRCUVVGRkxIRkNRVUZQTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1NVRkJSeXhUUVVGVExFZEJRVVVzUjBGQlJUdEJRVUZETEhGQ1FVRkxPMEZCUVVVc2NVSkJRVXM3UVVGQlJTeHJRa0ZCU1N4SlFVRkZMRWRCUVVjN1FVRkJSU3huUWtGQlJTeE5RVUZKTEUxQlEyeG1MRU5CUVVNc1NVRkJSU3hGUVVGRk8wRkJRVThzYTBKQlFVa3NTVUZCUlR0QlFVRkZMR2RDUVVGRkxGRkJRVkVzVDBGQlJ5eExRVUZITEVWQlFVVXNVMEZCVHl4RFFVRkRPMEZCUVVVc1owSkJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNTVUZCUlR0QlFVRkZMSEZDUVVGUE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnl4TlFVRkpPMEZCUVVFc1dVRkJSeXhKUVVGSExGZEJRVlU3UVVGQlF5eHhRa0ZCVHp0QlFVRkJMRmxCUVVVN1FVRkJRU3haUVVGRkxFbEJRVWNzVjBGQlZUdEJRVUZETEhGQ1FVRlBPMEZCUVVFc1dVRkJSVHRCUVVGQkxGbEJRVVVzU1VGQlJ5eFRRVUZUTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXh4UWtGQlN6dEJRVUZGTEhGQ1FVRkxPMEZCUVVVc2NVSkJRVXM3UVVGQlJTeDFRa0ZCVVN4SlFVRkZMRWRCUVVVc1NVRkJSU3hIUVVGRkxFbEJRVVVzUjBGQlJTeExRVUZKTzBGQlFVTXNiMEpCUVVrc1NVRkJSU3hGUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVkQlFVVXNTVUZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU03UVVGQlJTeHhRa0ZCUnp0QlFVRkZMSGxDUVVGUkxFbEJRVVVzUjBGQlJTeEpRVUZGTEVkQlFVVXNTMEZCU1R0QlFVRkRMSE5DUVVGSkxFbEJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NRMEZCUXl4SFFVRkZMRWxCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVVVzZDBKQlFVa3NTMEZCUnl4UFFVRkxMRTFCUVVrc1RVRkJTU3hKUVVGRkxFdEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVVc1JVRkJSU3hUUVVGUExFdEJRVWNzUlVGQlJTeExRVUZMTEVOQlFVTTdRVUZCUVN4blFrRkJRenRCUVVGRExIRkNRVUZITzBGQlFVRXNZMEZCUXp0QlFVRkRMR2RDUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVsQlFVVTdRVUZCUlN4eFFrRkJUenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVsQlFVYzdRVUZCUVN4WlFVRkhMRWxCUVVjN1FVRkJRU3haUVVGSExFbEJRVWM3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFbEJRVWM3UVVGQlFTeFpRVUZITEVsQlFVYzdRVUZCUVN4WlFVRkhMRWxCUVVjN1FVRkJRU3haUVVGSExFbEJRVWM3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVsQlFVYzdRVUZCUVN4WlFVRkhMRWxCUVVjN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVsQlFVYzdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWxCUVVjN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVOdVppeEhRVUZGTzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhIUVVGRk8wRkJRVUVzV1VGQlJ5eEhRVUZGTzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhIUVVGRk8wRkJRVUVzV1VGQlJ5eEhRVUZGTzBGQlFVRXNXVUZCUnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhIUVVGRk8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhIUVVGRk8wRkJRVUVzV1VGQlJ5eEhRVUZGTzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhIUVVGRk8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEhRVUZGTzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEhRVUZGTzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEhRVUZGTzBGQlFVRXNXVUZCUnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhIUVVGRk8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGQlJ5eEpRVUZITzBGQlFVRXNXVUZCUnl4SlFVRkhPMEZCUVVFc1dVRkJSeXhKUVVGSE8wRkJRVUVzV1VGRGJHWXNTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NSMEZCUlR0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NSMEZCUlR0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzUjBGQlJUdEJRVUZCTEZsQlFVY3NSMEZCUlR0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzUjBGQlJUdEJRVUZCTEZsQlFVY3NSMEZCUlR0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzUjBGQlJUdEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1IwRkJSVHRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzUjBGQlJUdEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzU1VGQlJ6dEJRVUZCTEZsQlFVY3NTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSenRCUVVGQkxGbEJRVWNzUjBGQlJTeFRRVUZUTEVkQlFVVTdRVUZCUXl4eFFrRkJUeXhOUVVGSk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNTVUZCUnp0QlFVRkJMRmxCUVVjc1NVRkJSeXhUUVVGVExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4eFFrRkJUeXhIUVVGSExFMUJRVWtzUjBGQlJTeE5RVUZKTEVkQlFVVXNUVUZCU1N4SFFVRkZMRTFCUVVrc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETEVkQlFVVXNTVUZCUlN4WFFVRlZPMEZCUVVNc2NVSkJRVk1zUlVGQlJTeEhRVUZGTzBGQlFVTXNhMEpCUVVVc1JVRkJSVHRCUVVGUkxHdENRVUZGTEVkQlFVYzdRVUZEYm1Zc2EwSkJRVVVzUjBGQlJ6dEJRVUZGTEcxQ1FVRkhMRVZCUVVVN1FVRkJSeXhwUWtGQlJ6dEJRVUZGTEdsQ1FVRkhMRkZCUVZFc1JVRkJSU3hGUVVGRk8wRkJRVVU3UVVGQlN5eHRRa0ZCUnl4UFFVRkxMRk5CUVU4c1QwRkJTeXhqUVVGakxFVkJRVVVzUjBGQlJTeExRVUZITEU5QlFVMHNUMEZCU3l4SlFVRkZMRWxCUVVjc1MwRkJSeXhOUVVGTExFVkJRVVU3UVVGQlNTeHhRa0ZCVHp0QlFVRkJMRmxCUVVNN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVTXNSMEZCUlN4SFFVRkZPMEZCUVVVN1FVRkJTeXhuUWtGQlJ5eEZRVUZGTzBGQlFXZENMR3RDUVVGSE8wRkJRVU1zZFVKQlFVOHNSVUZCUlN4blFrRkJaMElzUjBGQlJTeERRVUZETzBGQlFVRXNZMEZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhyUWtGQlJTeHpSRUZCYzBRc1EwRkJReXhGUVVGRkxFZEJRVVVzUjBGQlJ5eERRVUZETzBGQlFVRXNZMEZCUXp0QlFVRkRMR1ZCUVVjc1IwRkJSU3hUUVVGVExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RlFVRkZMRkZCUVZFN1FVRkJRU3haUVVGRExFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVTdRVUZCUlN4dFFrRkJUU3hEUVVGRE8wRkJRVUVzVlVGQlF5eEZRVUZGTEVkQlFVVXNTMEZCUnl4UlFVRkpMRXRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU03UVVGQlJTeFpRVUZGTEZkQlFWTXNRMEZCUXl4SFFVRkZMRTlCUVVzc1JVRkJSU3hYUVVGVExFVkJRVVVzU1VGQlNTeEhRVUZGTEVOQlFVTTdRVUZCUlN4WlFVRkZMRzFDUVVGcFFpeERRVUZETEVkQlFVVXNUMEZCU3l4RlFVRkZMRzFDUVVGcFFpeEZRVUZGTEVsQlFVa3NSMEZCUlN4RFFVRkRPMEZCUTNwaUxGbEJRVVVzTWtKQlFYbENMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhGUVVGRkxESkNRVUY1UWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGRkxGbEJRVVVzT0VKQlFUUkNMRU5CUVVNc1IwRkJSU3hQUVVGTExFVkJRVVVzT0VKQlFUUkNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFTkJRVU03UVVGQlJTeFpRVUZGTEN0Q1FVRTJRaXhEUVVGRExFZEJRVVVzUjBGQlJTeFBRVUZMTEVWQlFVVXNLMEpCUVRaQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMRmxCUVVVc05FSkJRVEJDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTlCUVVzc1JVRkJSU3cwUWtGQk1FSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTdzBRa0ZCTUVJc1VVRkJTU3hGUVVGRkxEUkNRVUV3UWl4RlFVRkZMRWxCUVVrc1EwRkJRenRCUVVGRkxGbEJRVVVzYjBKQlFXdENMRU5CUVVNc1IwRkJSU3hIUVVGRkxFOUJRVXNzUlVGQlJTeHZRa0ZCYTBJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlF6bGtMRmxCUVVVc2NVSkJRVzFDTEZGQlFVa3NSVUZCUlN4eFFrRkJiVUlzUlVGQlJTeEpRVUZKTEVOQlFVTTdRVUZCUlN4WlFVRkZMREJDUVVGM1FpeERRVUZETEVkQlFVVXNSMEZCUlN4UFFVRkxMRVZCUVVVc01FSkJRWGRDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGRkxGbEJRVVVzYlVKQlFXbENMRU5CUVVNc1IwRkJSU3hQUVVGTExFVkJRVVVzYlVKQlFXbENMRVZCUVVVc1NVRkJTU3hIUVVGRkxFTkJRVU03UVVGQlJTeFpRVUZGTEc5Q1FVRnJRaXhEUVVGRExFZEJRVVVzVDBGQlN5eEZRVUZGTEc5Q1FVRnJRaXhGUVVGRkxFbEJRVWtzUjBGQlJTeERRVUZETzBGQlFVVXNXVUZCUlN4WFFVRlRMRkZCUVVrc1JVRkJSU3hYUVVGVExFVkJRVVVzU1VGQlNTeERRVUZETzBGQlFVVXNXVUZCUlN4dFFrRkJhVUlzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhGUVVGRkxHMUNRVUZwUWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4WlFVRkZMRzlDUVVGclFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhGUVVGRkxHOUNRVUZyUWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVVXNXVUZCUlN4dlFrRkJhMElzVVVGQlNTeEZRVUZGTEc5Q1FVRnJRaXhGUVVGRkxFbEJRVWtzUTBGQlF6dEJRVU0xWkN4WlFVRkZMSFZDUVVGeFFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1JVRkJSU3gxUWtGQmNVSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlJTeFpRVUZGTEhkQ1FVRnpRaXhEUVVGRExFZEJRVVVzUjBGQlJTeFBRVUZMTEVWQlFVVXNkMEpCUVhOQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMRmxCUVVVc2QwSkJRWE5DTEZGQlFVa3NSVUZCUlN4M1FrRkJjMElzUlVGQlJTeEpRVUZKTEVOQlFVTTdRVUZCUlN4WlFVRkZMRzlDUVVGclFpeFJRVUZKTEVWQlFVVXNiMEpCUVd0Q0xFVkJRVVVzU1VGQlNTeERRVUZETzBGQlFVVXNXVUZCUlN4blFrRkJZeXhEUVVGRExFZEJRVVVzUjBGQlJTeFBRVUZMTEVWQlFVVXNaMEpCUVdNc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVVXNXVUZCUlN4cFFrRkJaU3hEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NSVUZCUlN4cFFrRkJaU3hGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMRmxCUVVVc2QwSkJRWE5DTEZGQlFVa3NSVUZCUlN4M1FrRkJjMElzUlVGQlJTeEpRVUZKTEVOQlFVTTdRVUZCUlN4WlFVRkZMSEZDUVVGdFFpeFJRVUZKTEVWQlFVVXNjVUpCUVcxQ0xFVkJRVVVzU1VGQlNTeERRVUZETzBGQlEzaGxMRmxCUVVVc2NVSkJRVzFDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFVkJRVVVzY1VKQlFXMUNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4WlFVRkZMRlZCUVZFc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1JVRkJSU3hWUVVGUkxFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlJTeFpRVUZGTEcxQ1FVRnBRaXhSUVVGSkxFVkJRVVVzYlVKQlFXbENMRVZCUVVVc1NVRkJTU3hEUVVGRE8wRkJRVVVzV1VGQlJTeGpRVUZaTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTlCUVVzc1JVRkJSU3hqUVVGWkxFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMRmxCUVVVc2JVSkJRV2xDTEZGQlFVa3NSVUZCUlN4dFFrRkJhVUlzUlVGQlJTeEpRVUZKTEVOQlFVTTdRVUZETDFJc1kwRkJTU3hMUVVGSExFVkJRVVVzVlVGQlVTeFJRVUZKTEV0QlFVY3NSVUZCUlN4VlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVVVzU1VGQlJTeEZRVUZGTEZGQlFVMHNVVUZCU1N4SlFVRkZMRVZCUVVVc1VVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEhRVUZGTEVsQlFVVXNRMEZCUXl4SFFVRkZMRTlCUVVzc1NVRkJSU3hGUVVGRkxFbEJRVWtzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4UlFVRkpMRXRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJTeEpRVUZGTEZGQlFVa3NTVUZCUlN4RlFVRkZMRWxCUVVrc1EwRkJReXhIUVVGRkxFdEJRVWNzVVVGQlNTeExRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRWRCUVVVc1NVRkJSU3hQUVVGTExFbEJRVVVzUlVGQlJTeEpRVUZKTEVkQlFVVXNTMEZCUnl4UlFVRkpMRXRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJTeExRVUZITEZGQlFVa3NTMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhIUVVGRkxFdEJRVWNzUTBGQlF5eEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NVVUZCU1N4TFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVVVzWTBGQldTeEZRVUZGTEdOQlFWa3NRMEZCUXl4SFFVRkZMRWRCUVVVc1QwRkJTeXhqUVVGWkxFVkJRVVVzWTBGQldTeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzWlVGQllTeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHVkJRV0VzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hqUVVGWkxFVkJRVVVzWTBGQldTeERRVUZETEVkQlFVVXNSMEZCUlN4UFFVRkxMR05CUVZrc1JVRkJSU3hqUVVGWkxFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3hoUVVGWExFTkJRVU1zUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4aFFVTnVaaXhGUVVGRkxFbEJRVWtzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR3RDUVVGblFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEd0Q1FVRm5RaXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxHRkJRVmNzUlVGQlJTeGhRVUZYTEVOQlFVTXNSMEZCUlN4UFFVRkxMR0ZCUVZjc1JVRkJSU3hoUVVGWExFVkJRVVVzU1VGQlNTeEhRVUZGTEVOQlFVTXNSMEZCUlN4WlFVRlZMRVZCUVVVc1dVRkJWU3hSUVVGSkxGbEJRVlVzUlVGQlJTeFpRVUZWTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHbENRVUZsTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEdsQ1FVRmxMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3hsUVVGaExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1pVRkJZU3hGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3huUWtGQll5eERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzWjBKQlFXTXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4bFFVRmhMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNaVUZCWVN4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4cFFrRkRNMlVzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzYVVKQlFXVXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR2RDUVVGakxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3huUWtGQll5eEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEd0Q1FVRm5RaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHdENRVUZuUWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3huUWtGQll5eERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzWjBKQlFXTXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4MVFrRkJjVUlzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2RVSkJRWEZDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeHZRa0ZCYTBJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzYjBKQlFXdENMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeGpRVUZaTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTlCUTI1bUxFdEJRVWNzUlVGQlJTeGpRVUZaTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeGpRVUZaTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHTkJRVmtzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHTkJRVmtzUTBGQlF5eEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1kwRkJXU3hGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc1kwRkJXU3hEUVVGRExFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4alFVRlpMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4WlFVRlZMRkZCUVVrc1MwRkJSeXhGUVVGRkxGbEJRVlVzUlVGQlJTeEpRVUZKTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2IwSkJRV3RDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMRzlDUVVGclFpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2EwSkJRV2RDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNhMEpCUVdkQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEdGQlFWY3NRMEZCUXl4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHRkJRVmNzUlVGQlJTeEpRVUZKTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3hsUVVGaExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVTndaaXhGUVVGRkxHVkJRV0VzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzZFVKQlFYRkNMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEhWQ1FVRnhRaXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2NVSkJRVzFDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2NVSkJRVzFDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHRkJRVmNzUTBGQlF5eEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMR0ZCUVZjc1JVRkJSU3hKUVVGSkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4cFFrRkJaU3hEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3hwUWtGQlpTeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNXVUZCVlN4UlFVRkpMRXRCUVVjc1JVRkJSU3haUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR05CUVZrc1EwRkJReXhIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNZMEZCV1N4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNkVUpCUVhGQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZEYm1Zc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3gxUWtGQmNVSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEhWQ1FVRnhRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4MVFrRkJjVUlzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHMUNRVUZwUWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2JVSkJRV2xDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2JVSkJRV2xDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4dFFrRkJhVUlzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4dlFrRkJhMElzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNiMEpCUVd0Q0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4NVFrRkJkVUlzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGRGJtWXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeDVRa0ZCZFVJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3h2UWtGQmEwSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2IwSkJRV3RDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3h6UWtGQmIwSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxITkNRVUZ2UWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEc5Q1FVRnJRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeHZRa0ZCYTBJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEdGQlFWY3NRMEZCUXl4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHRkJRVmNzUlVGQlJTeEpRVUZKTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3hqUVVGWkxFTkJRVU1zUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMR05CUVZrc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR0ZCUVZjc1EwRkJReXhIUVVGRkxFOUJRVXNzUzBGRGJtWXNSVUZCUlN4aFFVRlhMRVZCUVVVc1NVRkJTU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNZMEZCV1N4RFFVRkRMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeGpRVUZaTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeGxRVUZoTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzWlVGQllTeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeHhRa0ZCYlVJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeHhRa0ZCYlVJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNhMEpCUVdkQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzYTBKQlFXZENMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHVkJRV0VzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3hsUVVGaExFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHdENRVUZuUWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMR3RDUVVGblFpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4clFrRkJaMElzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkRjR1lzVDBGQlN5eExRVUZITEVWQlFVVXNhMEpCUVdkQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEhOQ1FVRnZRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNjMEpCUVc5Q0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2RVSkJRWEZDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxIVkNRVUZ4UWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNaVUZCWVN4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEdWQlFXRXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNiVUpCUVdsQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeHRRa0ZCYVVJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeG5Ra0ZCWXl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNaMEpCUVdNc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3gxUWtGRGRtVXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzZFVKQlFYRkNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4bFFVRmhMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNaVUZCWVN4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN3eVFrRkJlVUlzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTd3lRa0ZCZVVJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzYVVKQlFXVXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNhVUpCUVdVc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHOUNRVUZyUWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3h2UWtGQmEwSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHZENRVUZqTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeG5Ra0ZEZW1Vc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3g1UWtGQmRVSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEhsQ1FVRjFRaXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHRkJRVmNzUTBGQlF5eEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMR0ZCUVZjc1JVRkJSU3hKUVVGSkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4alFVRlpMRU5CUVVNc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEdOQlFWa3NSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEhGQ1FVRnRRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEhGQ1FVRnRRaXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4blFrRkJZeXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1owSkJRV01zUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeHJRa0ZCWjBJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3hyUWtGQlowSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2JVSkJRM1JtTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4dFFrRkJhVUlzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4blFrRkJZeXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1owSkJRV01zUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeDVRa0ZCZFVJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMSGxDUVVGMVFpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEhOQ1FVRnZRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNjMEpCUVc5Q0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc05FSkJRVEJDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN3MFFrRkJNRUlzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVU55Wml4TFFVRkhMRVZCUVVVc2QwSkJRWE5DTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzZDBKQlFYTkNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMQ3RDUVVFMlFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc0swSkJRVFpDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzY1VKQlFXMUNMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzY1VKQlFXMUNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEd0Q1FVRm5RaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHdENRVUZuUWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3h6UWtGQmIwSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVTndaaXhQUVVGTExFdEJRVWNzUlVGQlJTeHpRa0ZCYjBJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4cFFrRkJaU3hEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3hwUWtGQlpTeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNhMEpCUVdkQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzYTBKQlFXZENMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHbENRVUZsTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEdsQ1FVRmxMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3g1UWtGQmRVSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEhsQ1FVRjFRaXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxEWkNRVUV5UWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3cyUWtGRE1XVXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxEUkNRVUV3UWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc05FSkJRVEJDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc01rSkJRWGxDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNNa0pCUVhsQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTERCQ1FVRjNRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3d3UWtGQmQwSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR2REUVVFNFFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVU53Wml4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzWjBOQlFUaENMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN3NFFrRkJORUlzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN3NFFrRkJORUlzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc05rSkJRVEpDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMRFpDUVVFeVFpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc1owTkJRVGhDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHZERRVU5xWml4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNkMEpCUVhOQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2QwSkJRWE5DTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEhGQ1FVRnRRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEhGQ1FVRnRRaXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4M1FrRkJjMElzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3gzUWtGQmMwSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNNRUpCUVhkQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxEQkNRVUYzUWl4RlFVRkZPMEZCUVVFc1dVRkJTVHRCUVVGQkxGbEJRVVU3UVVGQlFTeFpRVUZGTzBGQlFVRXNXVUZCUlR0QlFVRkJMRmxCUVVVN1FVRkJRU3haUVVGRk8wRkJRVUVzV1VGQlJUdEJRVUZCTEZsQlFVVTdRVUZCUVN4WlFVRkZPMEZCUVVFc1dVRkJSVHRCUVVGQkxGbEJRVVU3UVVGQlFTeFpRVU53Wmp0QlFVRkJMRmxCUVVVN1FVRkJRU3haUVVGRk8wRkJRVUVzV1VGQlJUdEJRVUZCTEZWQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc1owSkJRV01zUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHZENRVUZqTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNjVUpCUVcxQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNjVUpCUVcxQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMRzlDUVVGclFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4dlFrRkJhMElzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMSGxDUVVGMVFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzZVVKQlFYVkNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2FVSkJRV1VzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzYVVKQlFXVXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMSGRDUVVGelFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVTndaaXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeDNRa0ZCYzBJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2EwSkJRV2RDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNhMEpCUVdkQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEdsQ1FVRmxMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMR2xDUVVGbExFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeDNRa0ZCYzBJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4M1FrRkJjMElzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzYzBKQlFXOUNMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeHpRa0ZCYjBJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4blFrRkJZeXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1owSkJRMjVtTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNiVUpCUVdsQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeHRRa0ZCYVVJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeHRRa0ZCYVVJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHMUNRVUZwUWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHVkJRV0VzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3hsUVVGaExFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxIRkNRVUZ0UWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxIRkNRVUZ0UWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeHZRa0ZCYTBJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzYjBKQlFXdENMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeHZRa0ZCYTBJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzYjBKQlEyaG1MRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeHhRa0ZCYlVJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeHhRa0ZCYlVJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNhVUpCUVdVc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2FVSkJRV1VzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEhWQ1FVRnhRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4MVFrRkJjVUlzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHMUNRVUZwUWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2JVSkJRV2xDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2VVSkJRWFZDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeDVRa0ZCZFVJc1JVRkJSVHRCUVVGQkxGbEJRVWs3UVVGQlFTeFpRVUZGTzBGQlFVRXNXVUZCUlR0QlFVRkJMRmxCUVVVN1FVRkJRU3haUVVGRk8wRkJRVUVzV1VGRGJtWTdRVUZCUVN4WlFVRkZPMEZCUVVFc1dVRkJSVHRCUVVGQkxGbEJRVVU3UVVGQlFTeFpRVUZGTzBGQlFVRXNXVUZCUlR0QlFVRkJMRmxCUVVVN1FVRkJRU3haUVVGRk8wRkJRVUVzV1VGQlJUdEJRVUZCTEZWQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc01FSkJRWGRDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTERCQ1FVRjNRaXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzWTBGQldTeERRVUZETEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3hqUVVGWkxFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3hsUVVGaExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1pVRkJZU3hGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3hsUVVGaExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1pVRkJZU3hGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3hsUVVGaExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1pVRkJZU3hGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3h4UWtGQmJVSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3h4UWtGQmJVSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzY1VOQlEyeG1MRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVsQlFVY3NTVUZCUnl4UlFVRk5MRXRCUVVjc1JVRkJSU3h4UTBGQmJVTXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEpRVUZITEVsQlFVY3NSVUZCUlN4SFFVRkZMRXRCUVVjc1JVRkJSU3hwUWtGQlpTeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeHBRa0ZCWlN4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2QwSkJRWE5DTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzZDBKQlFYTkNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMSGRDUVVGelFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxIZENRVUZ6UWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4blEwRkRNMlFzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1owTkJRVGhDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeDNRa0ZCYzBJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4M1FrRkJjMElzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzZVVKQlFYVkNMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4NVFrRkJkVUlzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTdzRRa0ZCTkVJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTdzRRa0ZCTkVJc1JVRkJSVHRCUVVGQkxGbEJRVWs3UVVGQlFTeFpRVUZGTzBGQlFVRXNXVUZCUlR0QlFVRkJMRmxCUVVVN1FVRkJRU3haUVVGRk8wRkJRVUVzV1VGQlJUdEJRVUZCTEZsQlFVVTdRVUZCUVN4WlFVRkZPMEZCUVVFc1dVRkJSVHRCUVVGQkxGbEJRM0JtTzBGQlFVRXNXVUZCUlR0QlFVRkJMRmxCUVVVN1FVRkJRU3haUVVGRk8wRkJRVUVzV1VGQlJUdEJRVUZCTEZsQlFVVTdRVUZCUVN4WlFVRkZPMEZCUVVFc1dVRkJSVHRCUVVGQkxGbEJRVVU3UVVGQlFTeFpRVUZGTzBGQlFVRXNWVUZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3dyUWtGQk5rSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxDdENRVUUyUWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTERKQ1FVRjVRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxESkNRVUY1UWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3cwUWtGQk1FSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMRFJDUVVFd1FpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMRzFDUVVGcFFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVU5zWml4RlFVRkZMRzFDUVVGcFFpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR2xDUVVGbExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHbENRVUZsTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4elFrRkJiMElzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMSE5DUVVGdlFpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxITkNRVUZ2UWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzYzBKQlFXOUNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNLMEpCUVRaQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN3clFrRkJOa0lzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3huUWtGRE0yVXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEdkQ1FVRmpMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2NVSkJRVzFDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2NVSkJRVzFDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHZENRVUZqTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeG5Ra0ZCWXl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR2RDUVVGakxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3huUWtGQll5eEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEd0Q1FVRm5RaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxHdENRVUZuUWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3hwUWtGQlpTeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeHBRa0ZCWlN4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRVZCUVVVc2FVSkJRV1VzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzYVVKQlFXVXNSVUZCUlR0QlFVRkJMRmxCUVVrN1FVRkJRU3haUVVONlpqdEJRVUZCTEZsQlFVVTdRVUZCUVN4WlFVRkZPMEZCUVVFc1dVRkJSVHRCUVVGQkxGbEJRVVU3UVVGQlFTeFZRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMRzlDUVVGclFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4dlFrRkJhMElzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMRzFDUVVGcFFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNiVUpCUVdsQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNhVUpCUVdVc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2FVSkJRV1VzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEdsQ1FVRmxMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMR2xDUVVGbExFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeDFRa0ZCY1VJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNkVUpCUVhGQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3h0UWtGQmFVSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMRzFDUVVOdVppeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMSE5DUVVGdlFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2MwSkJRVzlDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzYTBKQlFXZENMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2EwSkJRV2RDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMSGRDUVVGelFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxIZENRVUZ6UWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4clFrRkJaMElzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeHJRa0ZCWjBJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzYTBKQlFXZENMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2EwSkJRV2RDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR05CUXpkbExFTkJRVU1zUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMR05CUVZrc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR1ZCUVdFc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4bFFVRmhMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR1ZCUVdFc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4bFFVRmhMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR1ZCUVdFc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4bFFVRmhMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR2RDUVVGakxFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3huUWtGQll5eEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEdkQ1FVRmpMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeFBRVUZMTEV0QlFVY3NSVUZCUlN4blFrRkJZeXhGUVVGRkxFbEJRVWtzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1MwRkJSeXhGUVVGRkxHbENRVUZsTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEdsQ1FVRmxMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc1JVRkJSU3gxUWtGQmNVSXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1QwRkJTeXhMUVVGSExFVkJRVVVzZFVKQlEzSm1MRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4M1FrRkJjMElzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRXRCUVVjc1JVRkJSU3gzUWtGQmMwSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNaMEpCUVdNc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NTMEZCUnl4RlFVRkZMR2RDUVVGakxFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNc1IwRkJSU3hMUVVGSExFVkJRVVVzYTBKQlFXZENMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc2EwSkJRV2RDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMSGRDUVVGelFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTlCUVVzc1MwRkJSeXhGUVVGRkxIZENRVUZ6UWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4blFrRkJZeXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1owSkJRV01zUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTeGpRVU42WlN4RFFVRkRMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTeGpRVUZaTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzUlVGQlJTd3dRa0ZCZDBJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc01FSkJRWGRDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN4bFFVRmhMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzVDBGQlN5eExRVUZITEVWQlFVVXNaVUZCWVN4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEV0QlFVY3NVVUZCU1N4TFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVVVzUzBGQlJ5eFBRVUZMTEV0QlFVY3NSVUZCUlN4SlFVRkpMRWRCUVVVc1MwRkJSeXhSUVVGSkxFdEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNSMEZCUlN4TFFVRkhMRTlCUVVzc1MwRkJSeXhGUVVGRkxFbEJRVWs3UVVGQlJTeFpRVUZGTEdsQ1FVRmxPMEZCUVZFc1dVRkJSU3huUWtGQll6dEJRVUZSTEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNjVUpCUVU4c1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVTnVZeXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXh4UWtGQlR5eFpRVUZaTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExEQkNRVUZaTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXh4UWtGQlR5eEhRVUZITEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2VVSkJRVmNzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVNNVl5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIZENRVUZWTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zY1VKQlFVOHNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHBRa0ZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVU12WkN4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2FVSkJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEdsQ1FVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4eFFrRkJUeXhIUVVGSExFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVTnNaaXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXh4UWtGQlR5eEhRVUZITEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zY1VKQlFVOHNSMEZCUnl4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVVc2NVSkJRVTg3UVVGQlFTeFpRVUZGTzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEdsQ1FVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVTjZaQ3h0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2FVSkJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHBRa0ZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRE0xa3NiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNhVUpCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHBRa0ZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkROMk1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMSEZDUVVGUExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlF6ZGtMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEdsQ1FVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zY1VKQlFVOHNSMEZCUnl4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4eFFrRkJUenRCUVVGQkxGbEJRVVU3UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEhGQ1FVRlBMRWRCUVVjc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVU5zWkN4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHBRa0ZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXh4UWtGQlR5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHBRa0ZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVTnNaaXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUXpGYUxHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNhVUpCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2FVSkJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4eFFrRkJUenRCUVVGQkxGbEJRVVU3UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZEZUdFc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEdsQ1FVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVNeldpeHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEhGQ1FVRlBMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlEzSmhMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMSEZDUVVGUExFZEJRVWNzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEhGQ1FVRlBPMEZCUVVFc1dVRkJSVHRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUTNaaUxHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNhVUpCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEdsQ1FVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRE0xb3NiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2FVSkJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVU40WXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNjVUpCUVU4c1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHBRa0ZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNjVUpCUVU4c1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUXpkbExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEhGQ1FVRlBMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRGRHUXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2FVSkJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRM1phTEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEdsQ1FVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGREwySXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNhVUpCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNhVUpCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRGRsa3NiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRE0yUXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXh4UWtGQlR5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXh4UWtGQlR5eEhRVUZITEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4eFFrRkJUenRCUVVGQkxGbEJRVVU3UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkRNMkVzYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHBRa0ZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMSEZDUVVGUExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHBRa0ZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVU42WXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRGJtRXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4eFFrRkJUeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEdsQ1FVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVOMFlTeHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNhVUpCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVTjBZaXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHBRa0ZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2FVSkJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEdsQ1FVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVTXpaQ3h0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEhGQ1FVRlBMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEdsQ1FVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzU1VGQlJ5eEpRVUZITEVsQlFVYzdRVUZCUXl4blFrRkJTU3hMUVVGSExFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SlFVRkhMRWxCUVVjc1JVRkJSVHRCUVVGQkxGbEJRVU1zVTBGQlR5eEpRVUZITzBGQlFVTXNaMEpCUVVVc1JVRkJSVHRCUVVGRkxHdENRVUZITEU5QlFVc3NTMEZCUnp0QlFVRkZMSE5DUVVGTk8wRkJRVWNzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRGVtVXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2FVSkJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVTTVWaXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEdsQ1FVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZEZGxvc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNhVUpCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRGRtSXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNhVUpCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRGRGWXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEhGQ1FVRlBMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2FVSkJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVU5zWlN4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2FVSkJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zYVVKQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNjVUpCUVU4c1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXh4UWtGQlR5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMSEZDUVVGUE8wRkJRVUVzV1VGQlJUdEJRVUZCTEZWQlFVTTdRVUZEYm1Fc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHBRa0ZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkhMRTFCUVVrc1NVRkJSVHRCUVVGRkxITkNRVUZOTzBGQlFVVXNaMEpCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZETjFvc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXhwUWtGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4eFFrRkJUeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4eFFrRkJUeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eG5Ra0ZCUlN4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVFVGQlNTeEpRVUZGTzBGQlFVVXNjMEpCUVUwN1FVRkJSU3huUWtGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEhGQ1FVRlBMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUTNCYUxHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMSEZDUVVGUExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMSEZDUVVGUExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRGJtUXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4eFFrRkJUeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRk5CUVU4c1IwRkJSVHRCUVVGRExHZENRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSeXhOUVVGSkxFbEJRVVU3UVVGQlJTeHpRa0ZCVFR0QlFVRkZMR2RDUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2NVSkJRVThzUjBGQlJ5eEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVVXNjVUpCUVU4N1FVRkJRU3haUVVGRk8wRkJRVUVzVlVGQlF6dEJRVU0zWWl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMSEZDUVVGUExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExHbENRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1UwRkJUeXhIUVVGRk8wRkJRVU1zWjBKQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGSExFMUJRVWtzU1VGQlJUdEJRVUZGTEhOQ1FVRk5PMEZCUVVVc1owSkJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zY1VKQlFVOHNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlEzQmtMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlNTeEpRVUZGTEVWQlFVVTdRVUZCUlN4blFrRkJSenRCUVVGRExIRkNRVUZQTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1JVRkJSVHRCUVVGRkxHZENRVUZITzBGQlFVTXNhVUpCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hGUVVGRk8wRkJRVVVzWjBKQlFVYzdRVUZCUXl4cFFrRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMR2xDUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhuUWtGQlJTeERRVUZETzBGQlFVVXNhMEpCUVVjc1RVRkJTU3hKUVVGRk8wRkJRVVVzYzBKQlFVMDdRVUZCUlN4blFrRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVTnNaQ3h0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkZMR2RDUVVGSE8wRkJRVU1zY1VKQlFVOHNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMSEZDUVVGUE8wRkJRVUVzV1VGQlJUdEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTzBGQlFVVXNaMEpCUVVjN1FVRkJReXh4UWtGQlR5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFVkJRVVU3UVVGQlJTeG5Ra0ZCUnp0QlFVRkRMSEZDUVVGUExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRExGTkJRVThzUjBGQlJUdEJRVUZETEdkQ1FVRkZMRU5CUVVNN1FVRkJSU3hyUWtGQlJ5eE5RVUZKTEVsQlFVVTdRVUZCUlN4elFrRkJUVHRCUVVGRkxHZENRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVGRE8wRkJRemRaTEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2FVSkJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZITEUxQlFVa3NTVUZCUlR0QlFVRkZMSE5DUVVGTk8wRkJRVVVzWjBKQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVVc1owSkJRVWM3UVVGQlF5eHhRa0ZCVHl4SFFVRkhMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eFRRVUZQTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hEUVVGRE8wRkJRVVVzYTBKQlFVY3NUVUZCU1N4SlFVRkZPMEZCUVVVc2MwSkJRVTA3UVVGQlJTeG5Ra0ZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVN1FVRkJSU3huUWtGQlJ6dEJRVUZETEhGQ1FVRlBMRWRCUVVjc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFpRVUZETEZOQlFVOHNSMEZCUlR0QlFVRkRMR2RDUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4TlFVRkpMRWxCUVVVN1FVRkJSU3h6UWtGQlRUdEJRVUZGTEdkQ1FVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1MwRkJTVHRCUVVGRExHZENRVUZKTEVsQlFVVTdRVUZCUlN4blFrRkJSU3hQUVVGUExFOUJRVThzUTBGQlF5eEhRVUZGTEVOQlFVTTdRVUZCUlN4blFrRkJTU3hKUVVGRkxFOUJRVWNzVDBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCU1R0QlFVRkZMR05CUVVVc1MwRkJSeXhGUVVGRkxFVkJRVVVzUlVGQlJUdEJRVUZGTEdOQlFVVXNTMEZCUnl4RlFVRkZMRVZCUVVVc1JVRkJSVHRCUVVGRkxHTkJRVVVzUzBGQlJ5eEZRVUZGTEVWQlFVVXNSVUZCUlR0QlFVRkZMR05CUVVVc1RVRkJTU3hQUVVGSExFMUJRVWtzUlVGQlJTeE5RVUZKTEVkQlFVY3NSVUZCUlN4RlFVRkZPMEZCUVVVc2JVSkJRVTg3UVVGQlFTeFZRVUZETzBGQlFVTXNXVUZCUlN4WlFVRlZMRTFCUVVrc1JVRkJSVHRCUVVGRkxGbEJRVVVzWlVGQllTeFBRVUZITEVWQlFVVXNRMEZCUXp0QlFVTndaaXhaUVVGRkxHRkJRVmNzVDBGQlJ5eEhRVUZITEVOQlFVTTdRVUZCUlN4WlFVRkZMR1ZCUVdFN1FVRkJSU3haUVVGRkxHVkJRV0VzUTBGQlF5eEhRVUZGTEVkQlFVVXNUVUZCU1N4RlFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlJTeFpRVUZGTEd0Q1FVRm5RanRCUVVGSExHTkJRVWs3UVVGQlJ5eGxRVUZITEZOQlFWTXNTMEZCU1R0QlFVRkRMR3RDUVVGSkxFZEJRVWM3UVVGQlJTeHRRa0ZCU3l4TFFVRkhPMEZCUVVFc1ZVRkJSenRCUVVGRkxHMUNRVUZUTEV0QlFVazdRVUZCUXl4blFrRkJSeXhGUVVGRkxFbEJRVVVzUzBGQlNUdEJRVUZETEd0Q1FVRkhMRVZCUVVVN1FVRkJUeXh4UWtGQlNTeGpRVUZaTEU5QlFVOHNSVUZCUlN4WFFVRlRMRVZCUVVVc1UwRkJUeXhEUVVGRExFVkJRVVVzVFVGQlRTeEpRVUZITEVWQlFVVXNUMEZCVHl4VlFVRlJPMEZCUVVNc2MwSkJRVWtzU1VGQlJTeEZRVUZGTEU5QlFVOHNUVUZCVFR0QlFVRkZMSEZDUVVGSExGRkJRVkVzUTBGQlF6dEJRVUZCTEdkQ1FVRkRPMEZCUVVNc2NVSkJRVXNzU1VGQlJTeEhRVUZITzBGQlFWRXNiVUpCUVVjc1RVRkJUU3hGUVVGRkxFTkJRVU03UVVGQlJTeHJRa0ZCUnl4RlFVRkZMRWxCUVVVc1RVRkJTU3hQUVVGTExFdEJRVWNzVFVGQlJ5eEZRVUZGTEZsQlFWVXNUVUZCUnl4TFFVRkpPMEZCUVVNc2RVSkJRVXNzU1VGQlJTeEhRVUZITzBGQlFWRXNjVUpCUVVjc1RVRkJUU3hGUVVGRkxFTkJRVU03UVVGQlJTeHhRa0ZCU1N4SFFVRkhMRU5CUVVNc1IwRkJSU3hKUVVGRkxFZEJRVWM3UVVGQlVTeHhRa0ZCUnl4TlFVRk5MRVZCUVVVc1EwRkJRenRCUVVGQkxHTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMR0ZCUVVjN1FVRkhibUlzYVVKQlFVODdRVUZCUVN4UlFVTlVPMEZCUVVFc1RVRkZRU3hIUVVGSE8wRkJRMGdzVlVGQlNTeFBRVUZQTEZsQlFWa3NXVUZCV1N4UFFVRlBMRmRCUVZjN1FVRkRia1FzWlVGQlR5eFZRVUZWTzBGQlFVRXNaVUZEVml4UFFVRlBMRmRCUVZjc1kwRkJZeXhQUVVGUExFdEJRVXM3UVVGRGJrUXNaVUZCVHl4RFFVRkRMRWRCUVVjc1RVRkJUU3hQUVVGUE8wRkJRVUU3UVVGQlFUczdPMEZETjBzeFFqdEJRVUZCTzBGQlFVRTdRVUZCUVRzN08wRkRRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdPenRCUTBGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNUVUZCWVR0QlFVRmlPMEZCUVVFN1FVRkJUeXhOUVVGTkxFOUJRVTg3UVVGQlFUdEJRVUZCT3pzN1FVTkJjRUk3UVVGQlFUdEJRVUZCTzBGQlEwRXNWVUZCU1N4dFFrRkJiVUlzVFVGQlRUdEJRVU16UWl4WlFVRkpMR0ZCUVdFc1QwRkJUeXhoUVVGaExHVkJRV1VzVTBGQlV5eG5Ra0ZCWjBJc1UwRkJVeXhqUVVGakxFMUJRVTA3UVVGRE1VY3NXVUZCU1N4UFFVRlBMR1ZCUVdVN1FVRkJZU3gxUWtGQllTeGpRVUZqTzBGQlEyeEZMR1ZCUTBZc1UwRkJVeXhaUVVGWkxFTkJRVU1zUjBGQlJ6dEJRVVY2UWl4dFFrRkJVeXhKUVVGSE8wRkJRVU1zWTBGQlJTeFZRVUZSTEVWQlFVVXNWVUZCVVN4RlFVRkZPMEZCUVVVc2JVSkJRVTg3UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1NVRkJSenRCUVVGRExHTkJRVVVzVlVGQlVTeEZRVUZGTEZWQlFWRXNSVUZCUlR0QlFVRkZMRzFDUVVGUE8wRkJRVUVzVlVGQlJUdEJRVUZETEcxQ1FVRlRMRWxCUVVjN1FVRkJReXhqUVVGRkxGVkJRVkVzUlVGQlJTeFZRVUZSTEVWQlFVVTdRVUZCUlN4dFFrRkJUenRCUVVGQkxGVkJRVVU3UVVGQlF5eHRRa0ZCVXl4SlFVRkhPMEZCUVVNc1kwRkJSU3hWUVVGUkxFVkJRVVVzVlVGQlVTeEZRVUZGTzBGQlFVVXNiVUpCUVU4N1FVRkJRU3hWUVVGRk8wRkJRVU1zYlVKQlFWTXNTMEZCU1R0QlFVRkRMR05CUVVVc1ZVRkJVU3hGUVVGRkxGVkJRVkVzUlVGQlJUdEJRVUZGTEcxQ1FVRlBPMEZCUVVFc1ZVRkJSVHRCUVVGRExHTkJRVWtzU1VGQlJTeFhRVUZWTEVsQlFVYzdRVUZCUlN4WlFVRkZMRkZCUVUwc1NVRkJTU3hSUVVGUkxFTkJRVU1zUjBGQlJTeE5RVUZKTzBGQlFVTXNhVUpCUVVjN1FVRkJSU3huUWtGQlJUdEJRVUZCTEZWQlFVTXNRMEZCUXp0QlFVRkZPMEZCUTNaVExGbEJRVVVzVjBGQlV5eERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdOQlFVVXNTMEZCUnp0QlFVRkZMR05CUVVVc1MwRkJSenRCUVVGRkxHTkJRVVVzUzBGQlJ6dEJRVUZGTEdOQlFVVXNTMEZCUnp0QlFVRkZMR05CUVVVc1MwRkJSenRCUVVGRkxHTkJRVVVzUzBGQlJ6dEJRVUZGTEdOQlFVVXNTMEZCUnp0QlFVRkZMR05CUVVVc1MwRkJSenRCUVVGRkxHZENRVUZGTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTFCUVVrc1NVRkJTU3hOUVVGSk8wRkJRVU1zYjBKQlFVMHNTVUZCUlN4SFFVRkZMRWxCUVVVc1NVRkJTVHRCUVVGRkxHdENRVUZGTEVWQlFVVXNSMEZCUnl4RFFVRkRPMEZCUVVVc2IwSkJRVTBzU1VGQlJTeEpRVUZKTzBGQlFVVXNiMEpCUVVrc1RVRkJTU3hKUVVGRkxFZEJRVVVzUlVGQlJTeERRVUZETEVkQlFVVXNTVUZCUlN4SlFVRkZPMEZCUVUwc2NVSkJRVThzUzBGQlJ5eEpRVUZGTEVkQlFVY3NTVUZCUlR0QlFVRkJMRmxCUVVNN1FVRkJSU3huUWtGQlJTeFBRVUZITEZWQlFWTXNUVUZCU1R0QlFVRkRMR3RDUVVGSE8wRkJRVU1zYjBKQlFVY3NSVUZCUlR0QlFVRkhMSGRDUVVGTkxFMUJRVTBzZVVKQlFYbENPMEZCUVVVc2MwSkJRVTBzU1VGQlJTeEZRVUZGTEV0QlFVY3NSVUZCUXl4SlFVRkhMRVZCUVVVc1EwRkJReXhIUVVGRkxGRkJRVThzUTBGQlF5eEZRVUZETEVkQlFVVXNTVUZCUlN4TlFVRk5MRVZCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVVVzYjBKQlFVY3NSVUZCUlN4UFFVRkxPMEZCUVVVc2QwSkJRVTBzVFVGQlRTeHJRa0ZCYTBJN1FVRkJSU3hyUWtGQlJTeE5RVUZOTzBGQlFVVXNjMEpCUVUwc1NVRkJSU3hGUVVGRk8wRkJRVThzYjBKQlFVY3NTVUZCUlN4RlFVRkZMRkZCUVU4N1FVRkJReXh6UWtGQlNTeEpRVUZGTEUxQlFVMHNVVUZCVVN4SlFVRkpMRU5CUVVNN1FVRkJSU3h6UWtGQlJTeEZRVUZGTEU5QlFVOHNUMEZCUnl4RFFVRkRPMEZCUVVVc2MwSkJRVWNzU1VGQlJTeEZRVUZGTzBGQlFVOHNNRUpCUVUwc1RVRkJUU3hGUVVGRkxFdEJRVXNzU1VGQlNTeERRVUZETzBGQlFVRXNaMEpCUVVVN1FVRkJReXgxUWtGQlR6dEJRVUZCTEdOQlFVTXNWVUZCUXp0QlFVRlJMR3RDUVVGRkxFdEJRM3BtTzBGQlFVRXNZMEZCU1R0QlFVRkJMRmxCUVVNN1FVRkJSU3hqUVVGRkxGVkJRVkVzUlVGQlJTeEZRVUZGTEVWQlFVVXNVMEZCVVN4TlFVRkpMRVZCUVVVc1UwRkJVU3hQUVVGSExFVkJRVVVzVlVGQlVTeERRVUZETEVOQlFVTTdRVUZCUlN4alFVRkZMSEZDUVVGdFFpeEZRVUZGTEVWQlFVVXNSVUZCUlN4dlFrRkJiVUlzVFVGQlNTeEZRVUZGTEc5Q1FVRnRRaXhQUVVGSExFVkJRVVVzY1VKQlFXMUNMRU5CUVVNc1EwRkJRenRCUVVGRkxHTkJRVVVzWjBKQlFXTXNSVUZCUlN4RlFVRkZMR1ZCUVdNc1RVRkJTU3hGUVVGRkxHVkJRV01zVDBGQlJ5eEZRVUZGTEdkQ1FVRmpMRU5CUVVNN1FVRkJSU3hqUVVGRkxIRkNRVUZ0UWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWtzUlVGQlJTeGxRVUZsTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJSU3hqUVVGRkxIZENRVUZ6UWl4UFFVRkhPMEZCUVVNc1owSkJRVVVzYTBKQlFXdENMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVVVzWTBGQlJTeG5Ra0ZCWXl4UFFVRkhMRVZCUVVVc1ZVRkJWU3hEUVVGRE8wRkJRVVVzWTBGQlJTeDFRa0ZCY1VJc1EwRkJReXhIUVVGRkxFZEJRVVVzVFVGQlNTeEZRVUZGTEdsQ1FVRnBRaXhIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZWQlFVTTdRVUZEZEdJc1kwRkJTU3hMUVVGSExFOUJRVThzVDBGQlR5eERRVUZETEVkQlFVVXNRMEZCUXl4SFFVRkZMRXRCUVVjc2EwSkJRV2xDTEVsQlFVVXNRMEZCUXl4SFFVRkZMRTFCUVVrN1FVRkJReXhyUWtGQlRUdEJRVUZCTEZWQlFVVXNSMEZCUlN4TFFVRkhMRmxCUVZVc1QwRkJUeXhSUVVGUExFbEJRVVVzWTBGQldTeFBRVUZQTEdWQlFXTXNTVUZCUlN4WlFVRlZMRTlCUVU4c1YwRkJVeXhaUVVGVkxFOUJRVThzVVVGQlVTeFpRVUZWTEZsQlFWVXNUMEZCVHl4UlFVRlJMRk5CUVZNc1RVRkJTeXhKUVVGRkxFVkJRVVVzTUVKQlFYZENMRTlCUVVjc1NVRkJSVHRCUVVGSExHMUNRVUZUTEVkQlFVY3NSMEZCUlR0QlFVRkRMRzFDUVVGUExFVkJRVVVzWVVGQlZ5eEZRVUZGTEZkQlFWY3NSMEZCUlN4RFFVRkRMRWxCUVVVc1NVRkJSVHRCUVVGQkxGVkJRVU03UVVGQlF5eGpRVUZKTEVsQlFVY3NSMEZCUlR0QlFVTTNWU3hqUVVGSExFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4TFFVRkhMSFZEUVVGakxFdEJRVWM3UVVGQlowSXNaMEpCUVVVc1NVRkJSU3hIUVVGSExGRkJRVkVzUTBGQlF5eEpRVUZGTEUxQlFVa3NXVUZCVlR0QlFVRkpMR2xDUVVGSExFTkJRVU1zUjBGQlJTeE5RVUZKTzBGQlFVTXNhMEpCUVVVc1JVRkJSU3hYUVVGWExGTkJRVk1zU1VGQlJTeEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkZMRWRCUVVjc1ZVRkJWU3hEUVVGRE8wRkJRVVVzY1VKQlFVOHNSMEZCUnl4aFFVRmhMRWRCUVVVc1NVRkJSU3hUUVVGUExFMUJRVTA3UVVGQlFTeFpRVUZETzBGQlFVVXNhVUpCUVVjc1QwRkJSenRCUVVGRExHdENRVUZGTEVkQlFVY3NSMEZCUlN4SlFVRkZPMEZCUVVVc1owSkJRVVVzVjBGQlV5eEpRVUZGTEVsQlFVa3NWMEZCVnl4RFFVRkRPMEZCUVVjc2NVSkJRVTg3UVVGQlFTeFpRVUZETzBGQlFVVXNaMEpCUVVVc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEpRVUZGTEZOQlFVczdRVUZCUXl4clFrRkJSU3hGUVVGRkxGZEJRVmNzVTBGQlV5eEpRVUZGTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVVc1IwRkJSeXhWUVVGVkxFTkJRVU03UVVGQlJTeHBRa0ZCUnl4VFFVRlRMRWRCUVVVc1NVRkJSU3hUUVVGUExGRkJRVThzUTBGQlF5eEhRVUZGTEUxQlFVazdRVUZCUXl4dlFrRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlJTeEZRVUZGTEVsQlFVVXNSVUZCUlN4VFFVRlBMRU5CUVVNN1FVRkJRU3hqUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVVXNZVUZCUXl4RlFVRkZMR1ZCUVdFc1NVRkJSU3hSUVVGUkxFdEJRVXNzVjBGQlV5eExRVUZITEZGQlFWRXNTMEZCU3l4RFFVRkRMRVZCUVVVc1VVRkJVU3hQUVVGTkxFZEJRVWM3UVVGQlJ5eHZRa0ZCVVN4TFFVRkxMRTFCUVUwc1EwRkJRenRCUVVGRkxHZENRVUZGTEVOQlFVTXNSMEZCUlN4TlFVRkpPMEZCUVVNc2MwSkJRVkVzVjBGRGRHWTdRVUZCUlN4dlFrRkJUVHRCUVVGQkxGbEJRVVU3UVVGQlJTeGpRVUZGTEZWQlFWRXNUVUZCU1R0QlFVRTJRaXhuUWtGQlNUdEJRVUZGTEdkQ1FVRkhPMEZCUVVNc2EwSkJRVVU3UVVGQlFTeFpRVUY1UWl4VFFVRlBMRWRCUVVVN1FVRkJReXh2UWtGQlRTeFJRVUZSTEUxQlFVMHNlVWRCUVhsSExFZEJRVVU3UVVGQlFTeFpRVUZGTzBGQlFVTXNiVUpCUVU4c1UwRkJUeXhGUVVGRk8wRkJRVUVzVlVGQlRTeFhRVUZUTEUxQlFVazdRVUZCUlN4blFrRkJSU3hKUVVGRkxFdEJRVXNzVTBGQlV5eFBRVUZMTEdWQlFXRXNUMEZCVHl4WlFVRlZMRk5CUVZNc2EwSkJRV2RDTEVsQlFVVXNVMEZCVXl4alFVRmpMRTFCUVUwc1QwRkJUeXhsUVVGbExHVkJRV1VzWlVGQll5eEpRVUZGTEdGQlFWa3NUVUZCU1N4RlFVRkZMRkZCUVZFc1QwRkJUeXhKUVVGRkxFbEJRVVVzUlVGQlJTeFBRVUZQTEVkQlFVVXNSVUZCUlN4UlFVRlJMRlZCUVZNc1JVRkJSU3hGUVVGRkxGbEJRVmtzUjBGQlJ5eEpRVUZGTEVOQlFVTXNTVUZCUlN4SlFVRkZMRWxCUVVjc1RVRkJTU3hMUVVGSExFOUJRVWM3UVVGQlF5eHJRa0ZCU1N4SlFVTTVhRUlzU1VGQlNUdEJRVUZsTEdkQ1FVRkZMRXRCUVVzc1QwRkJUU3hIUVVGRkxFdEJRVVU3UVVGQlJTeG5Ra0ZCUlN4TFFVRkxMRWxCUVVrN1FVRkJSU3h4UWtGQlR5eEZRVUZGTzBGQlFVRXNXVUZCV1N4SFFVRkZMRTFCUVVrc1MwRkJSeXhQUVVGSE8wRkJRVU1zYTBKQlFVa3NTVUZCUlN4SlFVRkpPMEZCUVdVc1owSkJRVVVzUzBGQlN5eFBRVUZOTEVkQlFVVXNTMEZCUlR0QlFVRkZMR2RDUVVGRkxHVkJRV0U3UVVGQll5eG5Ra0ZCUlN4TFFVRkxMRWxCUVVrN1FVRkJSU3h4UWtGQlR5eEpRVUZKTEZkQlFWY3NSVUZCUlN4UlFVRlJPMEZCUVVFc1dVRkJReXhKUVVGSExFbEJRVVVzUTBGQlF5eEhRVUZGTEVkQlFVVXNUVUZCU1R0QlFVRkRMR3RDUVVGSkxFbEJRVVVzU1VGQlNUdEJRVUZsTEdkQ1FVRkZMRXRCUVVzc1QwRkJUU3hIUVVGRkxFbEJRVVU3UVVGQlJTeG5Ra0ZCUlN4bFFVRmhPMEZCUVdNc1owSkJRVVVzVTBGQlR5eE5RVUZKTzBGQlFVTXNkVUpCUVVzc1JVRkJSU3hWUVVGUkxFdEJRVWNzUlVGQlJTeFZRVUZSTEVWQlFVVXNWMEZCVXl4RlFVRkZMRVZCUVVVc1VVRkJVU3hKUVVGRkxFVkJRVVU3UVVGQlFTeGpRVUZETzBGQlFVVXNaMEpCUVVVc1ZVRkJVVHRCUVVGRkxHZENRVUZGTEV0QlFVc3NTVUZCU1R0QlFVRkJMRmxCUVVNN1FVRkJSeXhsUVVGSExHVkJRV0VzVDBGQlR5eG5Ra0ZCWXl4UFFVRlBMR05CUVZrc2NVSkJRWE5DTzBGQlEzSmtMR05CUVVrc1MwRkJSeXhSUVVGUkxFbEJRVWtzUzBGQlN5eFBRVUZQTEVkQlFVVXNTMEZCUnl4UlFVRlJMRTFCUVUwc1MwRkJTeXhQUVVGUE8wRkJRVVVzWjBKQlFVa3NTMEZCUnl4SlFVRkpMRTFCUVVrc1IwRkJSeXhWUVVGVkxFZEJRVVVzUlVGQlJTeExRVUZMTEVkQlFVY3NTVUZCUlN4SlFVRkpMRWRCUVVVc1MwRkJSeXhKUVVGSkxFMUJRVWtzUjBGQlJ5eFZRVUZWTEVkQlFVVXNSVUZCUlN4TFFVRkxMRWRCUVVjc1NVRkJSU3hKUVVGSk8wRkJRVWNzWTBGQlNTeExRVUZITEVWQlFVVXNVMEZCVHl4SlFVRkhMRWxCUVVVc1JVRkJSU3haUVVGVk8wRkJRVWNzYVVKQlFVOHNUMEZCVHl4SFFVRkZMRVZCUVVVN1FVRkJSU3hsUVVGSE8wRkJRVXNzV1VGQlJTeG5Ra0ZCWXl4TFFVRkhMRVZCUVVVN1FVRkJZU3haUVVGRkxGTkJRVThzU1VGQlJTeEZRVUZGTzBGQlFVMHNZMEZCU1R0QlFVRkZMRmxCUVVVc1pVRkJZU3hKUVVGRkxFVkJRVVU3UVVGQldTeGpRVUZKTEdkQ1FVRmpMRVZCUVVVc2FVSkJRV1U3UVVGQlJ5eHpRa0ZCVlN4UFFVRlBMR1ZCUVdFc1JVRkJSU3hwUTBGQmFVTTdRVUZCUlN4alFVRkpMRWRCUVVVc1IwRkJSU3hKUVVGSExFbEJRVVVzVDBGQlJ5eEhRVUZGTEVkQlFVVXNTVUZCUnl4SlFVRkhMRWxCUVVjN1FVRkROMklzYlVKQlFWTXNTVUZCUnp0QlFVRkRMR2RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZQTEdOQlFVVXNVVUZCVFN4SlFVRkZMRWxCUVVrc1ZVRkJWU3hEUVVGRE8wRkJRVVVzWTBGQlJTeFRRVUZQTEVsQlFVa3NWMEZCVnl4RFFVRkRPMEZCUVVVc1kwRkJSU3hUUVVGUExFdEJRVWNzU1VGQlNTeFhRVUZYTEVOQlFVTTdRVUZCUlN4alFVRkZMRk5CUVU4c1MwRkJSeXhKUVVGSkxGZEJRVmNzUTBGQlF6dEJRVUZGTEdOQlFVVXNWVUZCVVN4SlFVRkpMRmxCUVZrc1EwRkJRenRCUVVGRkxHTkJRVVVzVlVGQlVTeExRVUZITEVsQlFVa3NXVUZCV1N4RFFVRkRPMEZCUVVVc1kwRkJSU3hWUVVGUkxFbEJRVWtzWVVGQllTeERRVUZETzBGQlFVVXNZMEZCUlN4VlFVRlJMRXRCUVVjc1NVRkJTU3hoUVVGaExFTkJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNZMEZCU1N4TFFVRkhMRVZCUVVVc2EwSkJRV2RDTzBGQlFWTXNjVUpCUVZNc1RVRkJTU3hGUVVGRkxEQkVRVUYzUkN4TFFVRkhMSGRDUVVGM1FqdEJRVU01V1N4alFVRkhPMEZCUVVVc1owSkJRVVVzUlVGQlJUdEJRVUZCTEcxQ1FVRnRRaXhGUVVGRk8wRkJRVmNzWjBKQlFVVXNSVUZCUlR0QlFVRkJMRzFDUVVGdFFpeEpRVUZGTEVsQlFVa3NXVUZCV1N4UFFVRlBMRVZCUVVNc1UwRkJVU3hMUVVGSExFOUJRVTBzVTBGQlVTeFBRVUZOTEZGQlFVOHNTMEZCUlN4RFFVRkRMRWRCUVVVc1JVRkJSU3hGUVVGRkxHdENRVUZyUWp0QlFVRnRRaXhyUWtGQlRTeEZRVUZGTERaT1FVRTJUaXhIUVVGRkxFdEJRVWNzUlVGQlJTd3lSMEZCTWtjc1IwRkRjbWRDTEUxQlFVMHNXVUZCV1R0QlFVRkZMRmxCUVVVN1FVRkJSU3hsUVVGSExFVkJRVVVzVDBGQlR6dEJRVUZYTEdOQlFVa3NTMEZCUnl4RFFVRkRMRWRCUVVVc1MwRkJSeXhEUVVGRExFZEJRVVVzUzBGQlJ5eERRVUZETEVkQlFVVXNTMEZCUnp0QlFVRkZMRzFDUVVGVExFdEJRVWs3UVVGQlF5eHRRa0ZCVHl4cFFrRkJaU3hKUVVGRk8wRkJRVUVzVlVGQlJUdEJRVUZETEdOQlFVa3NTVUZCUlN4SFFVRkZMRXRCUVVjc1RVRkJTeXhKUVVGRk8wRkJRVXNzYlVKQlFWTXNTMEZCU1R0QlFVRkRPMEZCUVVrc1kwRkJSU3d3UWtGQmQwSXNSVUZCUlN4MVFrRkJkVUlzUTBGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhMUVVGSk8wRkJRVU03UVVGQlNTeGpRVUZGTERCQ1FVRjNRaXhGUVVGRkxIVkNRVUYxUWl4RFFVRkRPMEZCUVVVc1owSkJRVWNzUzBGQlJ5eE5RVUZKTEZOQlFVOHNUMEZCU3l4alFVRmpMRVZCUVVVc1IwRkJSU3hMUVVGSExFOUJRVTBzU1VGQlJ6dEJRVUZETEd0Q1FVRkpMRWxCUVVVN1FVRkJSU3hyUWtGQlJUdEJRVUZMTEdkQ1FVRkZPMEZCUVVFc1dVRkJRenRCUVVGQkxGVkJRVU03UVVGRGJGY3NiVUpCUVZNc1JVRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVY3NSVUZCUlR0QlFVRlJMR2RDUVVGRkxGRkJRVkVzUTBGQlF6dEJRVUZGTEdkQ1FVRkZMR0ZCUVZjc1NVRkJSVHRCUVVGSkxHTkJRVVVzUTBGQlF6dEJRVUZGTEdkQ1FVRkZPMEZCUVVjc1owSkJRVVU3UVVGQlJTeG5Ra0ZCUlN4SlFVRkpMRmxCUVZrc1lVRkJZU3hKUVVGRkxEQkRRVUV3UXp0QlFVRkZMR05CUVVVc1EwRkJRenRCUVVGRkxHdENRVUZOTzBGQlFVRXNWVUZCUlR0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJUdEJRVUZETEcxQ1FVRlBMRVZCUVVVc1YwRkJWeXgxUTBGQmRVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc1kwRkJTVHRCUVVGRkxHTkJRVVU3UVVGQk9FSXNZVUZCUnl4RFFVRkRMRTFCUVVrc1NVRkJSU3hIUVVGSExFTkJRVU03UVVGQlJ5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVN1FVRkJReXhuUWtGQlJ5eExRVUZITEV0QlFVYzdRVUZCUlN4eFFrRkJUeXhKUVVGSkxGZEJRVmNzUTBGQlF6dEJRVUZGTEdkQ1FVRkhPMEZCUVVjc2NVSkJRVThzUjBGQlJ5eERRVUZETzBGQlFVVXNhMEpCUVVzN1FVRkJRU3hWUVVGclJEdEJRVU53WVN4dFFrRkJVeXhIUVVGSExFZEJRVVU3UVVGQlF5eG5Ra0ZCUnl4RFFVRkRMRTFCUVVrc1RVRkJTU3hKUVVGSE8wRkJRVU1zYTBKQlFVY3NZMEZCV1N4UFFVRlBMRk5CUVU4c1EwRkJReXhGUVVGRkxGZEJRVmNzVTBGQlV6dEJRVUZGTEhWQ1FVRlBMRTFCUVUwc1IwRkJSU3hGUVVGRExHRkJRVmtzWTBGQllTeERRVUZETEVWQlFVVXNTMEZCU3l4UFFVRkhPMEZCUVVNc2MwSkJRVWNzUTBGQlF5eEZRVUZGTzBGQlFVY3NNRUpCUVVzc2VVTkJRWFZETEVsQlFVVTdRVUZCU1N4NVFrRkJUeXhGUVVGRkxGbEJRVms3UVVGQlFTeG5Ra0ZCUXl4RFFVRkRMRVZCUVVVc1RVRkJUU3hOUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzBGQlFVVXNhMEpCUVVjN1FVRkJSU3gxUWtGQlR5eEpRVUZKTEZGQlFWRXNRMEZCUXl4SFFVRkZMRTFCUVVrN1FVRkJReXh2UWtGQlJTeEhRVUZGTEU5QlFVY3NSVUZCUlN4SlFVRkpMRmRCUVZjc1EwRkJReXhEUVVGRExFZEJRVVVzUTBGQlF6dEJRVUZCTEdkQ1FVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVU1zYlVKQlFVOHNVVUZCVVN4UlFVRlJMRVZCUVVVc1MwRkJTeXhOUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4dFFrRkJUeXhIUVVGSExFTkJRVU1zUlVGQlJTeExRVUZMTEU5QlFVY3NXVUZCV1N4WlFVRlpMRWRCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eFBRVUZITEVOQlFVTXNSVUZCUlN4TFFVRkxMRWRCUVVVc1QwRkJSenRCUVVGRExHZENRVUZGTERSRFFVRXdReXhEUVVGRE8wRkJRVVVzWjBKQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1EwRkJRenRCUVVGQkxGVkJRVU03UVVGRE1XVXNiVUpCUVZNc1IwRkJSeXhIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZPMEZCUVVVc2JVSkJRVThzUzBGQlJ5eGpRVUZaTEU5QlFVOHNXVUZCV1N4M1FrRkJjMElzUjBGQlJ5eERRVUZETEV0QlFVY3NSVUZCUlN4WFFVRlhMRk5CUVZNc1MwRkJSeXhMUVVGSExHTkJRVmtzVDBGQlR5eFJRVUZOTEVkQlFVY3NSMEZCUlN4SFFVRkZMRU5CUVVNc1NVRkJSU3hOUVVGTkxFZEJRVVVzUlVGQlF5eGhRVUZaTEdOQlFXRXNRMEZCUXl4RlFVRkZMRXRCUVVzc1QwRkJSeXhaUVVGWkxIRkNRVUZ4UWl4SFFVRkZMRU5CUVVNc1JVRkJSU3hMUVVGTExFZEJRVVVzVTBGQlV5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc2IwTkJRV3RETEVOQlFVTTdRVUZCUlN4blFrRkJSU3d5UTBGQk1rTTdRVUZCUlN4eFFrRkJUeXhIUVVGSExFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNXVUZCUXl4RFFVRkRMRU5CUVVNN1FVRkJRU3hWUVVGRE8wRkJRemRYTEdOQlFVa3NSMEZCUlN4TFFVRkhPMEZCUVVFc1dVRkJReXhSUVVGUExFOUJRVWM3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRTlCUVUwc1IwRkJSU3hOUVVGTk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4UFFVRkhPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFBRVUZOTEVkQlFVVXNUVUZCVFR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzVDBGQlJ6dEJRVUZETEdkQ1FVRkZMRWRCUVVjc1UwRkJVU3hIUVVGRkxFMUJRVTA3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEhRVUZITEZGQlFVOHNSMEZCUlN4TlFVRk5PMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVVVGQlR5eFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhqUVVGaExFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1QwRkJSenRCUVVGRExHZENRVUZGTEVkQlFVY3NVVUZCVHl4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFJRVUZQTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExFOUJRVTBzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4UFFVRk5MRWRCUVVVc1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZGQlFVOHNUMEZCUnp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVjBGQlZTeEhRVUZGTEUxQlFVMDdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hSUVVGUExFOUJRVWM3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRTlCUVUwc1IwRkJSU3hOUVVGTk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4UFFVRkhPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFBRVUZOTEVkQlFVVXNUVUZCVFR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzVDBGQlJ6dEJRVUZETEdkQ1FVRkZMRWRCUVVjc1QwRkJUU3hIUVVGRkxFMUJRVTA3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEhRVUZITEU5QlFVMHNSMEZCUlN4TlFVRk5PMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVVVGQlR5eFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhSUVVGUExFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1QwRkJSenRCUVVGRExHZENRVUZGTzBGQlFVRXNaMEpCUVVjN1FVRkJRU3huUWtGRGVHWTdRVUZCUVN4blFrRkJSVHRCUVVGQkxHTkJRVTA3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEhRVUZITEZGQlFVOHNSMEZCUlN4TlFVRk5PMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVVVGQlR5eFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhSUVVGUExFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1QwRkJSenRCUVVGRExHZENRVUZGTEVkQlFVY3NVVUZCVHl4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFJRVUZQTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExGTkJRVkVzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4VFFVRlJMRWRCUVVVc1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZGQlFVOHNUMEZCUnp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVTBGQlVTeEhRVUZGTEUxQlFVMDdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hSUVVGUExFOUJRVWM3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRkZCUVU4c1IwRkJSU3hOUVVGTk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4UFFVRkhPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFBRVUZOTEVkQlFVVXNUVUZCVFR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzUTBGQlF5eEhRVUZGTEVkQlFVVXNUVUZCU1R0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVjBGQlZTeEhRVUZGTEVWQlFVTXNTMEZCU1N4SFFVRkZMRXRCUVVrc1JVRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4UFFVRkhPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFJRVUZQTEVkQlFVVXNUVUZCVFR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzUTBGQlF5eEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExFOUJRVTBzUjBGQlJTeEZRVUZETEU5QlFVMHNSVUZCUXl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVVVGQlR5eFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhSUVVGUExFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1EwRkJReXhIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMR0ZCUVZrc1IwRkJSU3hGUVVGRExFOUJRVTBzUlVGQlF5eERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhEUVVGRExFZEJRVVVzVFVGRGJtWTdRVUZCUXl4blFrRkJSU3hIUVVGSExHMUNRVUZyUWl4SFFVRkZMRVZCUVVNc1QwRkJUU3hGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRU5CUVVNc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4UlFVRlBMRWRCUVVVc1JVRkJReXhKUVVGSExFVkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1QwRkJSenRCUVVGRExHZENRVUZGTEVkQlFVY3NUMEZCVFN4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFJRVUZQTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExFOUJRVTBzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4UFFVRk5MRWRCUVVVc1RVRkJUVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZGQlFVOHNUMEZCUnp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVDBGQlRTeEhRVUZGTEUxQlFVMDdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hSUVVGUExFOUJRVWM3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRTlCUVUwc1IwRkJSU3hOUVVGTk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4UFFVRkhPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFRRVUZSTEVkQlFVVXNUVUZCVFR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzVDBGQlJ6dEJRVUZETEdkQ1FVRkZMRWRCUVVjc1YwRkJWU3hIUVVGRkxFMUJRVTA3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEhRVUZITEd0Q1FVRnBRaXhIUVVGRkxFMUJRVTA3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEhRVUZITEZGQlFVOHNSMEZCUlN4TlFVRk5PMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVVVGQlR5eFBRVUZITzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhsUVVGakxFZEJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExHTkJRV0VzUjBGQlJUdEJRVUZCTEdkQ1FVRkRMRlZCUVZNc1EwRkJReXhEUVVGRE8wRkJRVUVzWjBKQlFVVXNiVUpCUVd0Q0xFTkJRVU1zUTBGQlF6dEJRVUZCTEdkQ1FVTXpaaXhOUVVGTExFbEJRVVVzVFVGQlRTeExRVUZMTEVWQlFVVXNSVUZCUlN4VFFVRlRMRTFCUVVrc1IwRkJSU3hKUVVGRkxFMUJRVWtzUTBGQlF5eERRVUZETEVsQlFVVXNRMEZCUXp0QlFVRkJMR05CUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZGQlFVOHNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMR0ZCUVZrc1IwRkJSU3hGUVVGRExGVkJRVk1zUTBGQlF5eERRVUZETEVkQlFVVXNiVUpCUVd0Q0xFTkJRVU1zUTBGQlF5eEhRVUZGTEUxQlFVc3NTVUZCUlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hGUVVGRkxGTkJRVk1zVFVGQlNTeEhRVUZGTEVsQlFVVXNUVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExHRkJRVmtzUjBGQlJTeEZRVUZETEZWQlFWTXNRMEZCUXl4RFFVRkRMRWRCUVVVc2JVSkJRV3RDTEVOQlFVTXNRMEZCUXl4SFFVRkZMRTFCUVVzc1NVRkJSU3hOUVVGTkxFdEJRVXNzUlVGQlJTeEZRVUZGTEZOQlFWTXNUVUZCU1N4SFFVRkZMRWxCUVVVc1RVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlJTeERRVUZETEVWQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEdOQlFXRXNSMEZCUlN4RlFVRkRMRlZCUVZNc1EwRkJReXhEUVVGRExFZEJRVVVzYlVKQlFXdENMRU5CUVVNc1EwRkJReXhIUVVGRkxFMUJRVXNzU1VGQlJTeE5RVUZOTEV0QlFVc3NSVUZCUlN4RlFVRkZMRk5CUVZNc1RVRkJTU3hIUVVGRkxFbEJRVVVzVFVGQlNTeERRVUZETEVOQlFVTXNTVUZCUlN4RFFVRkRMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZGQlFVOHNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMR0ZCUVZrc1IwRkJSVHRCUVVGQkxHZENRVUZETEZWQlFWTXNRMEZCUXl4RFFVRkRPMEZCUVVFc1owSkJRVVVzYlVKQlFXdENMRU5CUVVNc1EwRkJRenRCUVVGQkxHZENRVU51WjBJc1RVRkJTeXhKUVVGRkxFMUJRVTBzUzBGQlN5eEZRVUZGTEVWQlFVVXNVMEZCVXl4TlFVRkpMRWRCUVVVc1NVRkJSU3hOUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZGTEVOQlFVTTdRVUZCUVN4alFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFJRVUZQTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4WlFVRlhMRWRCUVVVc1JVRkJReXhWUVVGVExFTkJRVU1zUTBGQlF5eEhRVUZGTEcxQ1FVRnJRaXhEUVVGRExFTkJRVU1zUjBGQlJTeE5RVUZMTEVsQlFVVXNUVUZCVFN4TFFVRkxMRVZCUVVVc1JVRkJSU3hUUVVGVExFMUJRVWtzUjBGQlJTeEpRVUZGTEUxQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVVc1EwRkJReXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhaUVVGWExFZEJRVVVzUlVGQlF5eFZRVUZUTEVOQlFVTXNRMEZCUXl4SFFVRkZMRzFDUVVGclFpeERRVUZETEVOQlFVTXNSMEZCUlN4TlFVRkxMRWxCUVVVc1RVRkJUU3hMUVVGTExFVkJRVVVzUlVGQlJTeFRRVUZUTEUxQlFVa3NSMEZCUlN4SlFVRkZMRTFCUVVrc1EwRkJReXhEUVVGRExFbEJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hSUVVGUExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eG5Ra0ZCWlN4SFFVRkZMRVZCUVVNc1ZVRkJVeXhEUVVGRExFTkJRVU1zUjBGQlJTeHRRa0ZCYTBJc1EwRkJReXhEUVVGRExFZEJRVVVzVFVGQlN5eEpRVUZGTEUxQlFVMHNTMEZCU3l4RlFVRkZMRVZCUVVVc1UwRkJVeXhOUVVGSkxFZEJRVVVzU1VGQlJTeE5RVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkZMRU5CUVVNc1JVRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc2JVSkJRV3RDTEVkQlFVVTdRVUZCUVN4blFrRkJReXhWUVVGVExFTkJRVU1zUTBGQlF6dEJRVUZCTEdkQ1FVTnVaaXh0UWtGQmEwSXNRMEZCUXl4RFFVRkRPMEZCUVVFc1owSkJRVVVzVFVGQlN5eEpRVUZGTEUxQlFVMHNTMEZCU3l4RlFVRkZMRVZCUVVVc1UwRkJVeXhOUVVGSkxFZEJRVVVzU1VGQlJTeE5RVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkZMRU5CUVVNN1FVRkJRU3hqUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXh0UWtGQmEwSXNSMEZCUlN4RlFVRkRMRlZCUVZNc1EwRkJReXhEUVVGRExFZEJRVVVzYlVKQlFXdENMRU5CUVVNc1EwRkJReXhIUVVGRkxFMUJRVXNzU1VGQlJTeE5RVUZOTEV0QlFVc3NSVUZCUlN4RlFVRkZMRk5CUVZNc1RVRkJTU3hIUVVGRkxFbEJRVVVzVFVGQlNTeERRVUZETEVOQlFVTXNTVUZCUlN4RFFVRkRMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZGQlFVOHNUMEZCUnp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVTBGQlVTeEhRVUZGTEUxQlFVMDdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hSUVVGUExFTkJRVU1zUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExHRkJRVmtzUjBGQlJTeEZRVUZETEUxQlFVc3NTVUZCUlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hGUVVGRkxGTkJRVk1zVFVGQlNTeEhRVUZGTEVsQlFVVXNUVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4UlFVRlBMRWRCUVVVc1JVRkJReXhSUVVGUExFbEJRVVVzVTBGQlR5eFJRVUZQTEZWQlFWTXNSMEZCUlN4WFFVRlZMRU5CUVVNc1EwRkJReXhIUVVGRkxFOUJRVTBzUjBGQlJTeGpRVUZoTEVOQlFVTXNRMEZCUXl4SFFVRkZMRTFCUVVzc1EwRkJReXhIUVVGRkxFTkJRVU1zUjBGQlJTeFRRVUZSTEVOQlFVTXNRMEZCUXl4SFFVRkZMRmxCUVZjc1RVRkJTU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEUxQlEyeG1MRU5CUVVNc1JVRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhSUVVGUExFZEJRVVVzUlVGQlF5eFJRVUZQTEVsQlFVVXNVMEZCVHl4UlFVRlBMRlZCUVZNc1IwRkJSU3hYUVVGVkxFTkJRVU1zUjBGQlJTeERRVUZETEVkQlFVVXNUMEZCVFN4SFFVRkZMR05CUVdFc1EwRkJReXhIUVVGRkxFTkJRVU1zUjBGQlJTeE5RVUZMTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJReXhIUVVGRkxGTkJRVkVzUTBGQlF5eEhRVUZGTEVOQlFVTXNSMEZCUlN4WlFVRlhMRTFCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeE5RVUZKTEVOQlFVTXNSVUZCUXl4RFFVRkRPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVVVGQlR5eERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExGRkJRVThzUjBGQlJTeEZRVUZETEZGQlFVOHNTVUZCUlN4VFFVRlBMRkZCUVU4c1ZVRkJVeXhIUVVGRkxGZEJRVlVzUTBGQlF5eERRVUZETEVkQlFVVXNUMEZCVFN4SFFVRkZMR05CUVdFc1EwRkJReXhEUVVGRExFZEJRVVVzVFVGQlN5eERRVUZETEVkQlFVVXNRMEZCUXl4SFFVRkZMRk5CUVZFc1EwRkJReXhEUVVGRExFZEJRVVVzV1VGQlZ5eE5RVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1RVRkJTU3hEUVVGRExFVkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUVUZCU1R0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVVVGQlR5eEhRVUZGTEVWQlFVTXNVVUZCVHl4SlFVRkZMRk5CUVU4c1VVRkJUeXhWUVVGVExFZEJRVVVzVjBGQlZTeERRVUZETEVkQlFVVXNRMEZCUXl4SFFVRkZMRTlCUVUwc1IwRkJSU3hqUVVGaE8wRkJRVUVzWjBKQlFVTTdRVUZCUVN4blFrRkRjR1k3UVVGQlFTeGpRVUZETEVkQlFVVXNUVUZCU3l4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4RFFVRkRMRWRCUVVVc1dVRkJWeXhOUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNUVUZCU1N4RFFVRkRMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZGQlFVOHNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMR2xDUVVGblFpeEhRVUZGTEVWQlFVTXNVVUZCVHl4SlFVRkZMRk5CUVU4c1VVRkJUeXhUUVVGUkxFZEJRVVVzVjBGQlZTeERRVUZETEVOQlFVTXNSMEZCUlN4UFFVRk5MRWRCUVVVc1kwRkJZU3hEUVVGRExFTkJRVU1zUjBGQlJTeE5RVUZMTEVOQlFVTXNSMEZCUlN4RFFVRkRMRWRCUVVVc1UwRkJVU3hEUVVGRExFTkJRVU1zUjBGQlJTeFZRVUZUTEUxQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hOUVVGSkxFTkJRVU1zUjBGQlJTeGxRVUZqTEVsQlFVVXNUVUZCVFN4TFFVRkxMRVZCUVVVc1JVRkJSU3hUUVVGVExFMUJRVWtzUjBGQlJTeEpRVUZGTEUxQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVVc1EwRkJReXhIUVVGRkxHRkJRVmtzU1VGQlJTeE5RVUZOTEV0QlFVc3NSVUZCUlN4RlFVRkZMRk5CUVZNc1RVRkJTU3hIUVVGRkxFbEJRVVVzVFVGQlNTeERRVUZETEVOQlFVTXNTVUZCUlN4RFFVRkRMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZGQlFVOHNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4cFFrRkJaMElzUjBGQlJTeEZRVUZETEZGQlFVOHNTVUZCUlN4VFFVRlBMRkZCUVU4c1UwRkJVU3hIUVVGRkxGZEJRVlVzVFVGQlRTeExRVUZMTEVWQlFVVXNSVUZCUlN4VFFVRlRMRTFCUVVrc1IwRkJSU3hKUVVOd1ppeE5RVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkZMRTlCUVUwc1IwRkJSU3hoUVVGWkxFMUJRVTBzUzBGQlN5eEZRVUZGTEVWQlFVVXNVMEZCVXl4TlFVRkpMRWRCUVVVc1NVRkJSU3hOUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZGTEUxQlFVc3NUVUZCVFN4TFFVRkxMRVZCUVVVc1JVRkJSU3hUUVVGVExFMUJRVWtzUjBGQlJTeEpRVUZGTEUxQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVVc1UwRkJVU3hOUVVGTkxFdEJRVXNzUlVGQlJTeEZRVUZGTEZOQlFWTXNUVUZCU1N4SFFVRkZMRWxCUVVVc1RVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJTeFZRVUZUTEUxQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hOUVVGSkxFTkJRVU1zUjBGQlJTeGxRVUZqTEVsQlFVVXNTVUZCUlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hGUVVGRkxGTkJRVk1zVFVGQlNTeEhRVUZGTEVsQlFVVXNUVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJSU3hEUVVGRExFZEJRVVVzWVVGQldTeEpRVUZGTEVsQlFVVXNUVUZCVFN4TFFVRkxMRVZCUVVVc1JVRkJSU3hUUVVGVExFMUJRVWtzUjBGQlJTeEpRVUZGTEUxQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVVc1EwRkJReXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhwUWtGQlowSXNSMEZCUlN4RlFVRkRMRkZCUVU4c1NVRkJSU3hUUVVGUExGRkJRVThzVTBGQlVTeEhRVUZGTEZkQlFWVXNRMEZCUXl4RFFVRkRMRWRCUVVVc1QwRkJUU3hIUVVGRkxHTkJRV0VzUTBGQlF5eERRVUZETEVkQlFVVXNUVUZCU3l4RFFVRkRMRWRCUVVVc1EwRkJReXhIUVVGRkxGTkJRVkVzUTBGQlF5eERRVUZETEVkQlFVVXNWVUZCVXl4TlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzVFVGQlNTeERRVUZETEVkQlFVVXNaVUZCWXl4SlFVTTFaaXhOUVVGTkxFdEJRVXNzUlVGQlJTeEZRVUZGTEZOQlFWTXNUVUZCU1N4SFFVRkZMRWxCUVVVc1RVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlJTeERRVUZETEVkQlFVVXNZVUZCV1N4SlFVRkZMRTFCUVUwc1MwRkJTeXhGUVVGRkxFVkJRVVVzVTBGQlV5eE5RVUZKTEVkQlFVVXNTVUZCUlN4TlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGRkxFTkJRVU1zUlVGQlF5eERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExHbENRVUZuUWl4SFFVRkZMRVZCUVVNc1VVRkJUeXhKUVVGRkxGTkJRVThzVVVGQlR5eFRRVUZSTEVkQlFVVXNWMEZCVlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hGUVVGRkxGTkJRVk1zVFVGQlNTeEhRVUZGTEVsQlFVVXNUVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSU3hQUVVGTkxFZEJRVVVzWVVGQldTeE5RVUZOTEV0QlFVc3NSVUZCUlN4RlFVRkZMRk5CUVZNc1RVRkJTU3hIUVVGRkxFbEJRVVVzVFVGQlNTeERRVUZETEVOQlFVTXNSMEZCUlN4TlFVRkxMRTFCUVUwc1MwRkJTeXhGUVVGRkxFVkJRVVVzVTBGQlV5eE5RVUZKTEVkQlFVVXNTVUZCUlN4TlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGRkxGTkJRVkVzVFVGQlRTeExRVUZMTEVWQlFVVXNSVUZCUlN4VFFVRlRMRTFCUVVrc1IwRkJSU3hKUVVGRkxFMUJRVWtzUTBGQlF5eERRVUZETEVkQlFVVXNWVUZCVXl4TlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzVFVGQlNTeERRVUZETEVkQlFVVXNaVUZCWXl4SlFVRkZMRWxCUVVVc1RVRkJUU3hMUVVGTExFVkJRVVVzUlVGQlJTeFRRVUZUTEUxQlFVa3NSMEZCUlN4SlFVRkZMRTFCUVVrc1EwRkJReXhEUVVGRExFbEJRVVVzUTBGQlF5eEhRVUZGTEdGQlFWa3NTVUZEYm1Zc1NVRkJSU3hOUVVGTkxFdEJRVXNzUlVGQlJTeEZRVUZGTEZOQlFWTXNUVUZCU1N4SFFVRkZMRWxCUVVVc1RVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlJTeERRVUZETEVWQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzUTBGQlF5eEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExIRkNRVUZ2UWl4SFFVRkZMRVZCUVVNc1VVRkJUeXhKUVVGRkxGTkJRVThzVDBGQlRTeERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEdWQlFXTXNSMEZCUlN4RlFVRkRMRkZCUVU4c1NVRkJSU3hUUVVGUExGRkJRVThzVlVGQlV5eEhRVUZGTEZkQlFWVXNSMEZCUlN4dFFrRkJhMElzUjBGQlJTeGxRVUZqTEVkQlFVVXNWMEZCVlN4RFFVRkRMRWRCUVVVc1EwRkJReXhIUVVGRkxHTkJRV0VzUTBGQlF5eEhRVUZGTEVOQlFVTXNSMEZCUlN4TlFVRkxMRU5CUVVNc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEhRVUZGTEZOQlFWRXNRMEZCUXl4SFFVRkZMRU5CUVVNc1JVRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4RFFVRkRMRWRCUVVVc1RVRkJTVHRCUVVGRExHZENRVUZGTEVkQlFVY3NjVUpCUVc5Q0xFZEJRVVVzUlVGQlF5eFJRVUZQTEVsQlFVVXNVMEZCVHl4UFFVRk5MRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFJRVUZQTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc1pVRkJZeXhIUVVGRk8wRkJRVUVzWjBKQlFVTXNVVUZCVHl4SlFVRkZMRk5CUVU4N1FVRkJRU3huUWtGQlR5eFZRVUZUTzBGQlFVRXNaMEpCUVVVc1YwRkJWVHRCUVVGQkxHZENRVU0zWml4dFFrRkJhMEk3UVVGQlFTeG5Ra0ZCUlN4bFFVRmpPMEZCUVVFc1owSkJRVVVzVjBGQlZTeERRVUZETEVkQlFVVXNRMEZCUXp0QlFVRkJMR2RDUVVGRkxHTkJRV0VzUTBGQlF5eEhRVUZGTEVOQlFVTTdRVUZCUVN4blFrRkJSU3hOUVVGTExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMR2RDUVVGRkxGTkJRVkVzUTBGQlF5eEhRVUZGTEVOQlFVTTdRVUZCUVN4alFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFJRVUZQTEVOQlFVTXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eHBRa0ZCWjBJc1IwRkJSU3hGUVVGRExGRkJRVThzU1VGQlJTeFRRVUZQTEU5QlFVMHNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4WFFVRlZMRWRCUVVVc1JVRkJReXhSUVVGUExFbEJRVVVzVTBGQlR5eFJRVUZQTEZWQlFWTXNSMEZCUlN4WFFVRlZMRWRCUVVVc2JVSkJRV3RDTEVkQlFVVXNaVUZCWXl4SFFVRkZMRmRCUVZVc1EwRkJReXhIUVVGRkxFTkJRVU1zUjBGQlJTeGpRVUZoTEVOQlFVTXNSMEZCUlN4RFFVRkRMRWRCUVVVc1RVRkJTeXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNSMEZCUlN4VFFVRlJMRU5CUVVNc1IwRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1EwRkJReXhIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMR2xDUVVGblFpeEhRVUZGTEVWQlFVTXNVVUZCVHl4SlFVRkZMRk5CUVU4c1QwRkJUU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSVHRCUVVGQkxHZENRVUZITzBGQlFVRXNaMEpCUXpObE8wRkJRVUVzWjBKQlFVVXNSVUZCUXl4UlFVRlBMRWxCUVVVc1UwRkJUeXhSUVVGUExGVkJRVk1zUjBGQlJTeFhRVUZWTEVkQlFVVXNiVUpCUVd0Q0xFZEJRVVVzWlVGQll5eEhRVUZGTEZkQlFWVXNRMEZCUXl4SFFVRkZMRU5CUVVNc1IwRkJSU3hqUVVGaExFTkJRVU1zUjBGQlJTeERRVUZETEVkQlFVVXNUVUZCU3l4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU1zUjBGQlJTeFRRVUZSTEVOQlFVTXNSMEZCUlN4RFFVRkRMRVZCUVVNN1FVRkJRU3hqUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc1VVRkJUeXhIUVVGRkxFVkJRVU1zVDBGQlRTeEhRVUZGTEUxQlFVc3NSMEZCUlN4UlFVRlBMRWRCUVVVc1VVRkJUeXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEhRVUZITEZWQlFWTXNSMEZCUlN4TlFVRk5PMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzVVVGQlR5eERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXhuUWtGQlJTeEhRVUZITEZWQlFWTXNSMEZCUlN4RlFVRkRMRlZCUVZNc1EwRkJReXhEUVVGRExFZEJRVVVzYVVKQlFXZENMRU5CUVVNc1EwRkJReXhIUVVGRkxFMUJRVXNzUlVGQlF5eERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExGVkJRVk1zUjBGQlJTeEZRVUZETEZWQlFWTXNRMEZCUXl4RFFVRkRMRWRCUVVVc2FVSkJRV2RDTEVOQlFVTXNRMEZCUXl4SFFVRkZMRTFCUVVzc1JVRkJReXhEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4RFFVRkRMRWRCUVVVc1RVRkJTVHRCUVVGRExHZENRVUZGTEVkQlFVY3NWMEZCVlN4SFFVRkZMRVZCUVVNc1RVRkJTeXhGUVVGRExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4UlFVRlBMRU5CUVVNc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4VlFVRlRMRWRCUVVVc1JVRkJReXhOUVVGTExFVkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVTnlaaXhSUVVGUExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eFRRVUZSTEVkQlFVVXNSVUZCUXl4TlFVRkxMRWRCUVVVc1dVRkJWeXhIUVVGRkxGbEJRVmNzU1VGQlJTeE5RVUZOTEV0QlFVc3NSVUZCUlN4RlFVRkZMRk5CUVZNc1RVRkJTU3hIUVVGRkxFbEJRVVVzVFVGQlNTeERRVUZETEVOQlFVTXNTVUZCUlN4RFFVRkRMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZGQlFVOHNUMEZCUnp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzVlVGQlV5eEhRVUZGTEUxQlFVMDdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hSUVVGUExFTkJRVU1zUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhWUVVGVExFZEJRVVVzUlVGQlF5eE5RVUZMTEU5QlFVOHNRMEZCUXl4RlFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFJRVUZQTEVOQlFVTXNSMEZCUlN4TlFVRkpPMEZCUVVNc1owSkJRVVVzUjBGQlJ5eHJRa0ZCYVVJc1IwRkJSU3hGUVVGRExFMUJRVXNzVDBGQlR5eERRVUZETEVWQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzUTBGQlF5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExGVkJRVk1zUjBGQlJTeEZRVUZETEZkQlFWVXNSMEZCUlN4TlFVRkxMRWxCUVVVc1RVRkJUU3hMUVVGTExFVkJRVVVzUlVGQlJTeFRRVUZUTEUxQlFVa3NSMEZCUlN4SlFVRkZMRTFCUVVrc1EwRkJReXhEUVVGRExFbEJRVVVzUTBGQlF5eEhRVUZGTEhsQ1FVRjNRaXhGUVVGRkxFTkJRVU1zUjBGQlJTeGhRVUZaTEVkQlFVVXNaMEpCUVdVc1IwRkJSU3h2UWtGQmJVSXNSMEZCUlN4MVFrRkJjMElzUlVGQlJTeERRVUZETEVkQlFVVXNUVUZCU3l4RlFVRkZMRU5CUVVNc1IwRkJSU3hoUVVGWkxFVkJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkROV1lzVVVGQlR5eERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFMUJRVWs3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRk5CUVZFc1IwRkJSU3hGUVVGRExGRkJRVThzU1VGQlJTeE5RVUZOTEV0QlFVc3NSVUZCUlN4RlFVRkZMRk5CUVZNc1RVRkJTU3hIUVVGRkxFbEJRVVVzVFVGQlNTeERRVUZETEVOQlFVTXNTVUZCUlN4RFFVRkRMRWRCUVVVc1RVRkJTeXhKUVVGRkxFMUJRVTBzUzBGQlN5eEZRVUZGTEVWQlFVVXNVMEZCVXl4TlFVRkpMRWRCUVVVc1NVRkJSU3hOUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZGTEVOQlFVTXNSMEZCUlN4TlFVRkxMRWxCUVVVc1RVRkJUU3hMUVVGTExFVkJRVVVzUlVGQlJTeFRRVUZUTEUxQlFVa3NSMEZCUlN4SlFVRkZMRTFCUVVrc1EwRkJReXhEUVVGRExFbEJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hSUVVGUExFOUJRVWM3UVVGQlF5eG5Ra0ZCUlN4SFFVRkhMRkZCUVU4c1IwRkJSU3hOUVVGTk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNVVUZCVHl4RFFVRkRMRWRCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4elFrRkJjVUlzUjBGQlJTeEZRVUZETEUxQlFVc3NUMEZCVHl4RFFVRkRMRWRCUVVVc1UwRkJVU3hQUVVGUExFTkJRVU1zUlVGQlF5eERRVUZETzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhEUVVGRExFZEJRVVVzUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXg1UWtGQmQwSXNSMEZCUlN4RlFVRkRMRk5CUVZFc1IwRkJSU3hSUVVGUExFbEJRVVVzVTBGQlR5eFBRVUZOTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hSUVVGUExFTkJRVU1zUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4blFrRkJSU3hIUVVGSExIbENRVUYzUWl4SFFVRkZMRVZCUVVNc1UwRkJVU3hIUVVGRkxGRkJRVThzU1VGQlJTeFRRVUZQTEU5QlFVMHNRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzVDBGQlJ6dEJRVUZETEdkQ1FVRkZPMEZCUVVFc1owSkJRVWM3UVVGQlFTeG5Ra0ZEYkdZN1FVRkJRU3huUWtGQlJUdEJRVUZCTEdOQlFVMDdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hSUVVGUExFTkJRVU1zUjBGQlJTeE5RVUZKTzBGQlFVTXNaMEpCUVVVc1IwRkJSeXhWUVVGVExFZEJRVVVzUlVGQlF5eFZRVUZUTEVWQlFVVXNRMEZCUXl4RlFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFJRVUZQTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4UFFVRk5MRWRCUVVVc1JVRkJReXhOUVVGTExFZEJRVVVzVDBGQlRTeEhRVUZGTEUxQlFVc3NTVUZCUlN4TlFVRk5MRXRCUVVzc1JVRkJSU3hGUVVGRkxGTkJRVk1zVFVGQlNTeEhRVUZGTEVsQlFVVXNUVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1QwRkJSenRCUVVGRExHZENRVUZGTEVkQlFVY3NVVUZCVHl4SFFVRkZMRTFCUVUwN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeFJRVUZQTEU5QlFVYzdRVUZCUXl4blFrRkJSU3hIUVVGSExGZEJRVlVzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhQUVVGSE8wRkJRVU1zWjBKQlFVVXNSMEZCUnl4cFFrRkJaMElzUjBGQlJTeE5RVUZOTzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1VVRkJUeXhEUVVGRExFZEJRVVVzVFVGQlNUdEJRVUZETEdkQ1FVRkZMRWRCUVVjc01FSkJRWGxDTEVkQlFVVXNSVUZCUXl4VFFVRlJMRVZCUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEZGQlFVOHNUMEZCUnp0QlFVRkRMR2RDUVVGRkxFZEJRVWNzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRkZCUVU4c1EwRkJReXhIUVVGRkxFMUJRVWtzUlVGQlJTeEhRVUZITEVkQlFVVXNSMEZCUlN4RlFVRkZMRWRCUVVjc1NVRkJSeXhGUVVGRkxFZEJRVWNzVFVGQlRUdEJRVUZCTEZsQlFVVXNVVUZCVHl4UFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVUVzV1VGQlJTeFJRVUZQTEU5QlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzUTBGQlF5eEhRVUZGTEVkQlFVVXNUVUZCU1R0QlFVRkRMR2RDUVVGRkxFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNTVUZCUlR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxGRkJRVThzUTBGQlF5eEhRVUZGTEVkQlFVVXNUVUZCU1R0QlFVRkRMR2RDUVVGRkxFZEJRVWNzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVOd1ppeHRRa0ZCVXl4SFFVRkhMRWRCUVVVN1FVRkJReXhwUWtGQlN5eFBRVUZMTzBGQlFXRXNhVUpCUVVzc1ZVRkJVU3huUTBGQlowTXNRMEZCUXp0QlFVRkpMR2xDUVVGTExGTkJRVTg3UVVGQlFTeFZRVUZETzBGQlFVTXNiVUpCUVZNc1IwRkJSeXhIUVVGRk8wRkJRVU1zWTBGQlJTeFZRVUZWTzBGQlFVVXNZMEZCUlN4WlFVRlZMRTFCUVVrN1FVRkJRU3haUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSVHRCUVVGRExHRkJRVU1zU1VGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4TlFVRkpMRVZCUVVVN1FVRkJSU3hqUVVGRkxFZEJRVWNzUTBGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVU3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRVZCUVVVc1IwRkJSenRCUVVGRkxHZENRVUZITEVOQlFVTTdRVUZCUlN4eFFrRkJUenRCUVVGRkxHTkJRVVVzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZCUlN4alFVRkZMRWRCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVVU3UVVGQlJTeGpRVUZGTEV0QlFVY3NSVUZCUlR0QlFVRkhMR2RDUVVGSkxFbEJRVVVzUlVGQlF5eExRVUZKTEU5QlFVMHNaVUZCWXl4RlFVRkZMRWxCUVVjc1MwRkJTU3hGUVVGRkxFbEJRVWNzWVVGQldTeEZRVUZGTEVkQlFVVTdRVUZCUlN4cFFrRkJSeXhGUVVGRkxFMUJRVTA3UVVGQlJTeGpRVUZGTEZsQlFWa3NSMEZCUlN4RlFVRkZMRVZCUVVVN1FVRkJSU3h0UWtGQlR6dEJRVUZCTEZWQlFVTTdRVUZEZGxnc1kwRkJTU3hMUVVGSExHVkJRV0VzVDBGQlR5eGpRVUZaTEVsQlFVa3NXVUZCV1N4TlFVRk5MRWxCUVVVc1VVRkJUeXhMUVVGSExFTkJRVU1zUjBGQlJTeEhRVUZGTEUxQlFVazdRVUZCUXl4dFFrRkJTenRCUVVGRkxHZENRVUZKTEVsQlFVVXNTVUZCUlR0QlFVRkZMR2xDUVVGSkxFbEJRVVVzUjBGQlJTeEZRVUZGTEVOQlFVTXNTMEZCUnl4RlFVRkZMRXRCUVVjN1FVRkJTU3huUWtGQlJUdEJRVUZGTEdkQ1FVRkhMRXRCUVVjc1NVRkJSU3hMUVVGSExFVkJRVVVzVlVGQlVUdEJRVUZITEhGQ1FVRlBMRWRCUVVjc1QwRkJUeXhGUVVGRkxHdENRVUZyUWl4dlFrRkJhMElzUlVGQlJTeE5RVUZOTEVkQlFVVXNRMEZCUXl4SlFVRkZMRVZCUVVVc1UwRkJVeXhIUVVGRkxFTkJRVU1zUTBGQlF6dEJRVUZGTEdsQ1FVRkpMRWxCUVVVc1NVRkJSeXhKUVVGRkxFdEJRVWM3UVVGQlF5eHJRa0ZCU1N4SlFVRkZMRVZCUVVVc1IwRkJSenRCUVVGRkxHdENRVUZITEVsQlFVVXNTMEZCU1R0QlFVRkRMRzlDUVVGSkxFbEJRVVVzUlVGQlJTeEhRVUZITEVsQlFVVTdRVUZCUnl4dlFrRkJSeXhSUVVGTkxFbEJRVVU3UVVGQlN5eDFRa0ZCUnl4UFFVRlBMR05CUVdNc1NVRkJSU3hQUVVGTExFbEJRVVVzUTBGQlF6dEJRVUZCTEhGQ1FVRk5PMEZCUVVNc2MwSkJRVWtzU1VGQlJTeEZRVUZGTEVkQlFVY3NTVUZCUlR0QlFVRkhMSE5DUVVGRkxGRkJRVTBzU1VGQlJTeFJRVUZOTEVsQlFVVXNUMEZCU3l4TFFVRkhMRXRCUVVjc1NVRkJSU3hMUVVGSExFbEJRVVVzVFVGQlNTeExRVUZITEV0QlFVY3NTMEZCUnl4TFFVRkhMRWxCUVVVc1JVRkJSU3hIUVVGSExFbEJRVVU3UVVGQlJ5d3dRa0ZCVFN4SlFVRkZMRXRCUVVjc1QwRkJUeXhoUVVGaExFTkJRVU1zUzBGQlJ5eExRVUZITEU5QlFVMHNTMEZCUnl4UFFVRlBMR0ZCUVdFc1VVRkJUU3hMUVVOd1ppeEpRVUZITEZGQlFVMHNTVUZCUlN4SlFVRkpPMEZCUVVFc1owSkJRVVU3UVVGQlFTeGpRVUZETzBGQlFVMHNjVUpCUVVjc1QwRkJUeXhoUVVGaExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVTXNiVUpCUVU4N1FVRkJRU3hWUVVGRExFZEJRVVVzU1VGQlJTeERRVUZETEVkQlFVVXNUMEZCU3l4UFFVRkxMRXRCUVVjc1IwRkJSeXhGUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVsQlFVVTdRVUZCUnl4dFFrRkJVeXhIUVVGSExFZEJRVVU3UVVGQlF5eG5Ra0ZCUnp0QlFVRkZMSEZDUVVGUExFVkJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4blFrRkJSVHRCUVVGRkxHZENRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUjBGQlJ6dEJRVUZGTEd0Q1FVRkhMRVZCUVVVN1FVRkJUeXhyUWtGQlJTeFBRVUZQTEVOQlFVTTdRVUZCUlN4clFrRkJSVHRCUVVGQkxGbEJRVVU3UVVGQlF5eGpRVUZGTEVkQlFVVXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVGQkxGVkJRVU03UVVGRGFrMHNZMEZCU1N4TFFVRkhMRTlCUVVjN1FVRkJReXhuUWtGQlJUdEJRVUZGTEdkQ1FVRkhPMEZCUVVVc2IwSkJRVTBzUjBGQlJ5eERRVUZETEVkQlFVVTdRVUZCVXl4bFFVRkhMRU5CUVVNN1FVRkJRU3hWUVVGRExFZEJRVVVzU1VGQlJUdEJRVUZCTEZsQlFVTXNTVUZCUnl4RFFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExFTkJRVU03UVVGQlFTeFpRVUZGTEVsQlFVY3NRMEZCUXp0QlFVRkJMRmxCUVVVc1NVRkJSeXhEUVVGRE8wRkJRVUVzV1VGQlJTeEpRVUZITEZkQlFWVTdRVUZCUXl4clFrRkJSU3hGUVVGRkxFZEJRVWNzU1VGQlJTeEZRVUZGTEVkQlFVYzdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExGZEJRVlU3UVVGQlF5eHBRa0ZCUnl4UlFVRlJMRTFCUVVrN1FVRkJReXh0UWtGQlJ6dEJRVUZGTEd0Q1FVRkZMRWRCUVVjc1RVRkJTU3hIUVVGSExFTkJRVU03UVVGQlFTeGpRVUZETEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hKUVVGSExGZEJRVlU3UVVGQlF5eG5Ra0ZCUlN4M1FrRkJjMElzUlVGQlJUdEJRVUZITEdkQ1FVRkZMR2RDUVVGakxFVkJRVVU3UVVGQlJ5eG5Ra0ZCUlN4blFrRkJZeXhGUVVGRk8wRkJRVWNzT0VKQlFXTTdRVUZCUVN4WlFVRkZPMEZCUVVFc1dVRkJSU3hKUVVGSExGTkJRVk1zUjBGQlJUdEJRVUZETEd0Q1FVRkZPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzU1VGQlJ5eERRVUZETEd0Q1FVRnJRanRCUVVGQkxGbEJRVVVzU1VGQlJ5eFhRVUZWTzBGQlFVTXNkVUpCUVZFc1MwRkJTeXhGUVVGRk8wRkJRVWNzYlVKQlFVY3NRMEZCUXp0QlFVRkZMRzFDUVVGSkxFdEJRVXNzUlVGQlJUdEJRVUZITEcxQ1FVRkhMRU5CUVVNN1FVRkJSU3huUWtGQlJTeExRVUZITEVOQlFVTTdRVUZCUlN4blFrRkJSU3hMUVVGSExFTkJRVU03UVVGQlJTeG5Ra0ZCUlN4TFFVRkhMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeEpRVUZITEZOQlFWTXNSMEZCUlR0QlFVRkRMR3RDUVVGSkxFbEJRVVVzUlVGQlJUdEJRVUZITEhGQ1FVRlBMRVZCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVVVzWjBKQlFVVXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkJSU3huUWtGQlJTeEhRVUZITEU5QlFVOHNSVUZCUlN4SFFVRkhMRkZCUVZFc1EwRkJReXhIUVVGRkxFTkJRVU03UVVGQlJTeG5Ra0ZCUlN4TFFVRkhPMEZCUVVVc2FVSkJRVWNzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWxCUVVjc1YwRkJWVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVU4wWml4SlFVRkhMRmRCUVZVN1FVRkJReXhuUWtGQlJTeEhRVUZITEZGQlFWRXNUMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeEpRVUZITEU5QlFVY3NTVUZCU1N4UlFVRlJMRTlCUVVjN1FVRkJReXhuUWtGQlJTeFpRVUZWTEU5QlFVYzdRVUZCUXl4dlFrRkJSU3hGUVVGRk8wRkJRVXNzYjBKQlFVa3NTVUZCUlN4RlFVRkZPMEZCUVVrc2IwSkJRVWNzUlVGQlJTeG5Ra0ZCWXl4RlFVRkZMR2RDUVVGakxFZEJRVWNzUjBGQlJUdEJRVUZETEhOQ1FVRkpMRWxCUVVVc1JVRkJSU3hIUVVGSExFVkJRVVVzUlVGQlJUdEJRVUZGTEhOQ1FVRkZMRVZCUVVVc1dVRkJXU3hIUVVGRkxFVkJRVVVzV1VGQldTeEpRVUZGTEVWQlFVVXNORU5CUVRCRExFbEJRVVVzZVVKQlFYVkNMRVZCUVVVc1pVRkJZU3h4UTBGQmNVTTdRVUZCUVN4blFrRkJReXhYUVVGVExHMUNRVUZwUWp0QlFVRkZMSEZDUVVGSE8wRkJRVUVzZVVKQlFWVXNhMEpCUVdkQ08wRkJRVVVzY1VKQlFVY3NRMEZCUXp0QlFVRkJMSGxDUVVGVkxHOUNRVUZyUWp0QlFVRkZMSEZDUVVGSExFVkJRVVVzVFVGQlRUdEJRVUZCTEhsQ1FVRlZMR2xDUVVGbE8wRkJRVVVzYzBKQlFVVXNSVUZCUlN4UlFVRlBMRWxCUVVVc1JVRkJSU3hIUVVGSExFTkJRVU1zUjBGQlJTeFBRVUZQTEVWQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVVc1IwRkJSeXhEUVVGRExFZEJRVVVzUjBGQlJ5eERRVUZETEVkQlFVVXNSVUZCUlN4SFFVRkhPMEZCUVVFc2IwSkJRVThzUlVGQlJTeEhRVUZITEZGQlFWRXNRMEZCUXp0QlFVRkJMRzlDUVVOc1owSTdRVUZCUVN4clFrRkJReXhIUVVGRkxFVkJRVVVzUzBGQlJ6dEJRVUZCTEhsQ1FVRlZMRzFDUVVGcFFqdEJRVUZGTEc5Q1FVRkZMRWRCUVVjc1JVRkJSU3hOUVVGTkxFVkJRVVVzV1VGQldTeEZRVUZETEV0QlFVa3NVMEZCVVN4RFFVRkRPMEZCUVVFc2VVSkJRVlVzWVVGQlZ6dEJRVUZGTEc5Q1FVRkZMRk5CUVU4c1RVRkJSeXhGUVVGRkxFTkJRVU03UVVGQlFTeDVRa0ZCVlN4WlFVRlZPMEZCUVVVc2QwSkJRVTBzV1VGQlZTeEZRVUZGTEZkQlFWTXNUMEZCU3l4RlFVRkZMRWxCUVVrN1FVRkJRU3g1UWtGQlZTeHRRa0ZCYVVJc1JVRkJSVHRCUVVGUExHOUNRVUZGTEZsQlFWa3NRMEZCUXp0QlFVRkJMSGxDUVVGVkxHdENRVUZuUWp0QlFVRkZMRzlDUVVGRkxFVkJRVVVzVDBGQlR5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SlFVRkpPMEZCUVVFN1FVRkJUeXgxUWtGQlJ5eEZRVUZGTEc5RFFVRnJReXhEUVVGRE8wRkJRVUVzWTBGQlF6dEJRVUZGTEdkQ1FVRkZMRlZCUVZFc1QwRkJSenRCUVVGRExHdENRVUZGTERKQ1FVRjVRaXhGUVVGRkxGZEJRVk1zVFVGQlNTeEZRVUZGTEZOQlFVOHNUMEZCU3l4RlFVRkZMRTlCUVU4N1FVRkJSU3h6UWtGQlRUdEJRVUZCTEdOQlFVVTdRVUZCUlN4dlFrRkJTU3hGUVVGRkxFZEJRVWNzVjBGQlZTeFRRVUZUTEVkQlFVVTdRVUZCUXl4clFrRkJSU3hWUVVGVkxFVkJRVU1zVFVGQlN5eEZRVUZETEVOQlFVTTdRVUZCUVN4alFVRkRMRU5CUVVNc1IwRkJSU3hGUVVGRkxFZEJRVWNzVTBGQlVTeFRRVUZUTEVkQlFVVTdRVUZCUXl4clFrRkJSU3hSUVVGUkxFTkJRVU03UVVGQlFTeGpRVUZETEVOQlFVTTdRVUZETDJZc2EwSkJRVWtzU1VGQlJTeERRVUZETEVkQlFVVXNTVUZCUlN4RFFVRkRMRlZCUVZNc1YwRkJWU3hUUVVGUkxGVkJRVlVzUjBGQlJUdEJRVUZGTEcxQ1FVRkpMRXRCUVVzN1FVRkJSU3hyUWtGQlJTeGxRVUZsTEVOQlFVTXNTMEZCUnl4RlFVRkZMRXRCUVVzc1EwRkJRenRCUVVGRkxHZENRVUZGTEZsQlFWa3NSVUZCUXl4TFFVRkpMRkZCUVU4c1ZVRkJVeXhIUVVGRkxGZEJRVlVzUlVGQlJTeDFRa0ZCY1VJc1dVRkJWeXhaUVVGWExFZEJRVVVzV1VGQlZ5eEhRVUZGTEVOQlFVTTdRVUZCUVN4WlFVRkRMRU5CUVVNN1FVRkJRU3haUVVGRkxFbEJRVWNzVTBGQlV5eEhRVUZGTzBGQlFVTXNaMEpCUVVVN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeEpRVUZITEZkQlFWVTdRVUZCUXl4clFrRkJTU3hKUVVGRkxFZEJRVWNzYTBOQlFXdERPMEZCUVVVc2EwSkJRVVVzU1VGQlNTeFBRVUZQTEVOQlFVTTdRVUZCUlN4blFrRkJSU3hIUVVGSExFdEJRVXNzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4WlFVRkZMRWxCUVVjc1YwRkJWVHRCUVVGRExHMUNRVUZITEVWQlFVVXNSMEZCUnl4WFFVRlRMRVZCUVVVc1IwRkJSeXhIUVVGRkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUVVjc2NVSkJRVThzUlVGQlJTeEhRVUZITEVsQlFVazdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRkxGbEJRVVVzVlVGQlVUdEJRVUZGTEdOQlFVa3NTMEZCUnl4UFFVRkhPMEZCUVVNc2JVSkJRVXNzU1VGQlJTeEZRVUZGTzBGQlFWRXNaMEpCUVVVc1RVRkJUU3hGUVVGRkxFTkJRVU03UVVGQlFTeFZRVUZETzBGQlEzcGlMRmxCUVVVc2MwSkJRVzlDTEZkQlFWVTdRVUZCUXl4blFrRkJTU3hKUVVGRkxFZEJRVWNzUjBGQlJTeEpRVUZGTEVWQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRE8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU03UVVGQlJTeGxRVUZITEVkQlFVVXNTVUZCUlN4RFFVRkRPMEZCUVVVc1pVRkJSeXhEUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZGTEcxQ1FVRlRMRWRCUVVjc1IwRkJSVHRCUVVGRExHZENRVUZITzBGQlFVVXNjVUpCUVU4c1JVRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEdWQlFVY3NRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkJReXhaUVVGRkxHMUNRVUZwUWl4VFFVRlRMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZGTEVkQlFVY3NUVUZCVFN4TlFVRkxMRU5CUVVNc1IwRkJSU3hEUVVGRExFTkJRVU03UVVGQlJTeGxRVUZITEVsQlFVVXNSVUZCUlN4SFFVRkhMRU5CUVVNc1NVRkJSU3hIUVVGSExFTkJRVU03UVVGQlFTeFZRVUZETzBGQlFVVXNiVUpCUVZNc1IwRkJSeXhIUVVGRk8wRkJRVU1zYVVKQlFVc3NTMEZCUnl4SlFVRkZPMEZCUVVjc2FVSkJRVXNzUzBGQlJ5eFRRVUZUTEVkQlFVVTdRVUZCUXl4blFrRkJSU3hGUVVGRkxFdEJRVXNzUzBGQlJ5eExRVUZITEUxQlFVa3NRMEZCUXl4SlFVRkZPMEZCUVVFc1dVRkJRenRCUVVGRkxHbENRVUZMTEV0QlFVY3NVMEZCVXl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUlVGQlJTeExRVUZMTEV0QlFVY3NTMEZCUnl4TlFVRkpMRU5CUVVNc1NVRkJSVHRCUVVGQkxGbEJRVU03UVVGQlJTeHBRa0ZCU3l4TFFVRkhMRk5CUVZNc1IwRkJSU3hIUVVGRk8wRkJRVU1zYlVKQlFVc3NSMEZCUnp0QlFVRkZMRzFDUVVGTExFZEJRVWNzUTBGQlF6dEJRVUZGTEcxQ1FVRkxMRWRCUVVjc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlJTeHBRa0ZCU3l4TFFVRkhMRmRCUVZVN1FVRkJReXhuUWtGQlJTeEZRVUZGTEV0QlFVc3NTMEZCUnl4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4alFVRkpMRXRCUVVjc1IwRkJSU3hMUVVGSE8wRkJReTlpTEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEcxQ1FVRlBMRWxCUVVVc1JVRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXl4SlFVRkZMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4dFFrRkJTenRCUVVGRkxHMUNRVUZMTzBGQlFVVXNiVUpCUVVzN1FVRkJSU3h0UWtGQlN6dEJRVUZGTEdkQ1FVRkhMR1ZCUVdFc1QwRkJUenRCUVVGclFpeHhRa0ZCVHl4RlFVRkZMSEZHUVVGeFJpeEhRVUZGTzBGQlFVVXNaMEpCUVVrc1NVRkJSU3hEUVVGRE8wRkJRVVVzWjBKQlFVY3NTMEZCUnl4TlFVRkpMRVZCUVVVN1FVRkJUeXh4UWtGQlR5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJSU3huUWtGQlJTeEZRVUZETEVsQlFVY3NSMEZCUlN4SlFVRkhMRWRCUVVVc1NVRkJSeXhIUVVGRkxFbEJRVWNzUlVGQlF6dEJRVUZGTEcxQ1FVRlBMRXRCUVVjc1JVRkJSU3hMUVVGSExHVkJRV01zV1VGQldTeEhRVUZGTEVOQlFVTXNSMEZCUlN4TFFVRkhMRWRCUVVjc1EwRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zYlVKQlFVOHNTVUZCUlN4RlFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEpRVUZGTzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVjN1FVRkJSU3h4UWtGQlR5eEZRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3hWUVVGRE8wRkJRM0pqTEdOQlFVa3NTMEZCUnl4UFFVRkhPMEZCUVVNc2NVSkJRVkVzU1VGQlJTeEhRVUZGTEVsQlFVVXNSMEZCUlN4SlFVRkZMRVZCUVVVc1VVRkJUeXhGUVVGRkxFZEJRVVU3UVVGQlF5eHJRa0ZCU1N4SlFVRkZMRVZCUVVVc1YwRkJWeXhEUVVGRE8wRkJRVVVzY1VKQlFVc3NTVUZCUlN4TlFVRkpMRkZCUVUwc1NVRkJSU3hMUVVGSExFbEJRVVVzVTBGQlR5eExRVUZITEZOQlFVOHNTMEZCUnl4TFFVRkhMRWRCUVVVc1JVRkJSU3hMUVVGSExFdEJRVWM3UVVGQlFTeFpRVUZETzBGQlFVTXNiVUpCUVU4N1FVRkJRU3hWUVVGRExFZEJRVVVzUzBGQlJ5eERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRTFCUVVrN1FVRkJReXh0UWtGQlN6dEJRVUZGTEdkQ1FVRkhMRVZCUVVVc1NVRkJSVHRCUVVGSExIRkNRVUZQTzBGQlFVVXNaMEpCUVVrc1NVRkJSVHRCUVVGRkxHZENRVUZGTEVsQlFVVXNTVUZCUlR0QlFVRkZMSEZDUVVGUkxFbEJRVVVzUjBGQlJTeEpRVUZGTEVWQlFVVXNVVUZCVHl4RlFVRkZMRWRCUVVVN1FVRkJReXhyUWtGQlNTeEpRVUZGTEVWQlFVVXNWMEZCVnl4RFFVRkRPMEZCUVVVc2EwSkJRVWNzVTBGQlR5eExRVUZITEZOQlFVOHNSMEZCUlR0QlFVRkRMRzlDUVVGSkxFbEJRVVVzUlVGQlJTeFhRVUZYTEVWQlFVVXNRMEZCUXp0QlFVRkZMRzlDUVVGRkxGVkJRVkVzU1VGQlJTeFRRVUZQTEUxQlFVa3NTVUZCUlR0QlFVRkJMR05CUVVrN1FVRkJReXhyUWtGQlJ5eFBRVUZMTEVkQlFVVTdRVUZCUXl4dlFrRkJSeXhMUVVGSE8wRkJRVVU3UVVGQlRTeHJRa0ZCUlN4UlFVRk5MRU5CUVVNc1NVRkJSVHRCUVVGQkxHTkJRVU1zVDBGQlN6dEJRVUZETEc5Q1FVRkhMRkZCUVUwc1IwRkJSVHRCUVVGRExITkNRVUZITEVsQlFVVXNTMEZCUnp0QlFVRkZPMEZCUVUwc2IwSkJRVVVzVVVGQlRTeERRVUZETEVsQlFVVXNUVUZCU1N4TFFVRkhPMEZCUVVFc1owSkJRVU1zVDBGQlN6dEJRVUZETEhOQ1FVRkhMRk5CUVU4c1IwRkJSVHRCUVVGRExIZENRVUZITEVsQlFVVXNTMEZCUnp0QlFVRkZPMEZCUVUwc2MwSkJRVVVzVVVGQlRTeERRVUZETEVsQlFVVXNUVUZCU1N4TFFVRkhPMEZCUVVFc2EwSkJRVVVzVDBGQlN6dEJRVUZETEhkQ1FVRkhMRWxCUVVVc1MwRkJSenRCUVVGRk8wRkJRVTBzYzBKQlFVVXNVVUZCVFN4RFFVRkRMRWxCUVVVc1RVRkJTU3hMUVVOd1pqdEJRVUZITEhOQ1FVRkZMRkZCUVUwc1EwRkJReXhKUVVGRkxFMUJRVWtzUzBGQlJ5eExRVUZITzBGQlFVRXNhMEpCUVVVN1FVRkJReXh2UWtGQlJTeFJRVUZOTEVOQlFVTXNTVUZCUlN4TlFVRkpMRXRCUVVjc1NVRkJSVHRCUVVGQkxHZENRVUZGTzBGQlFVTXNhMEpCUVVVc1VVRkJUU3hEUVVGRExFbEJRVVVzVFVGQlNTeEpRVUZGTzBGQlFVRXNZMEZCUlR0QlFVRkJMRmxCUVVNN1FVRkJReXhqUVVGRkxFMUJRVWtzUTBGQlF5eEpRVUZGTzBGQlFVVXNiVUpCUVU4c1NVRkJSVHRCUVVGQkxGVkJRVU1zUjBGQlJTeExRVUZITEVOQlFVTXNSMEZCUlN4SFFVRkZMRTFCUVVrc1IwRkJSeXhIUVVGRkxFVkJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJUdEJRVUZETEdkQ1FVRkhPMEZCUVVVc2NVSkJRVThzUlVGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlJ6dEJRVUZGTEhGQ1FVRlBMRVZCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4dFFrRkJUeXhKUVVGRkxFVkJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWxCUVVVN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlJ6dEJRVUZGTEhGQ1FVRlBMRVZCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZWQlFVTTdRVUZCUXl4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVjN1FVRkJSU3h4UWtGQlR5eEZRVUZGTEVsQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4SFFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eG5Ra0ZCUnp0QlFVRkZMSEZDUVVGUExFVkJRVVVzU1VGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVYzdRVUZCUlN4eFFrRkJUeXhGUVVGRkxFbEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVFc1ZVRkJRenRCUVVGRExHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHZENRVUZITzBGQlFVVXNjVUpCUVU4c1JVRkJSU3hKUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkRPV1FzYlVKQlFWTXNSMEZCUnl4SFFVRkZPMEZCUVVNc1owSkJRVWM3UVVGQlJTeHhRa0ZCVHl4RlFVRkZMRWxCUVVjc1IwRkJSU3hEUVVGRE8wRkJRVUVzVlVGQlF6dEJRVUZETEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVYzdRVUZCUlN4eFFrRkJUeXhGUVVGRkxFbEJRVWNzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSE8wRkJRVVVzY1VKQlFVOHNSVUZCUlN4SlFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlFTeFZRVUZETzBGQlFVTXNZMEZCU1N4TFFVRkhMRTlCUVVjN1FVRkJReXhuUWtGQlJ5eERRVUZETzBGQlFVVXNhMEpCUVVjN1FVRkJReXh2UWtGQlJ5eEZRVUZGTEVkQlFVVXNRMEZCUXl4SFFVRkhPMEZCUVVVc2MwSkJRVWM3UVVGQlF5eDNRa0ZCUlN4SFFVRkhMRU5CUVVNc1NVRkJSU3hIUVVGSExFTkJRVU03UVVGQlFTeHJRa0ZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXhwUTBGQllTeE5RVUZKTEZsQlFWVXNTMEZCUnl4RlFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxHdENRVUZETzBGQlFVRXNZMEZCUXl4VFFVRlBMRWRCUVVVN1FVRkJReXcyUWtGQllTeE5RVUZKTEZsQlFWVXNTMEZCUnl4RlFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxHTkJRVU03UVVGQlFTeFZRVUZETzBGQlFVVXNiVUpCUVZNc1IwRkJSeXhIUVVGRk8wRkJRVU1zYlVKQlFVczdRVUZCUlN3eVFrRkJZU3hQUVVGUExGRkJRVkVzVDBGQlN5eFJRVUZSTEVkQlFVY3NSVUZCUlN4SFFVRkZMRXRCUVVjc1IwRkJSU3hEUVVGRExFVkJRVVVzVFVGQlRTeExRVUZMTEVWQlFVVXNSMEZCUlN4TFFVRkhMRXRCUVVrc1VVRkJVU3hOUVVGTkxFVkJRVVVzUjBGQlJTeExRVUZITEVkQlFVVXNRMEZCUXp0QlFVRkJMRlZCUVVVN1FVRkJReXhaUVVGRkxHOURRVUZyUXp0QlFVRkhMRzFDUVVGVExFdEJRVWs3UVVGQlF5eG5Ra0ZCU1N4SlFVRkZMRWRCUVVjN1FVRkJSU3hyUWtGQlNTeEhRVUZITEVOQlFVTXNSMEZCUlN4SFFVRkhMRTFCUVVrc1IwRkJSeXhEUVVGRE8wRkJRVUVzVlVGQlJUdEJRVUZETEZsQlFVVXNaVUZCWVR0QlFVTndaaXhqUVVGSkxFbEJRVVVzVDBGQlJ5eE5RVUZKTEVsQlFVVXNUVUZCU1N4TlFVRkpMRWxCUVVVc1QwRkJTeXhOUVVGSkxFbEJRVVVzVFVGQlN5eExRVUZITEVOQlFVTXNSMEZCUlN4SlFVRkhMRWxCUVVjc1NVRkJSeXhMUVVGSkxFdEJRVWtzUzBGQlNTeExRVUZKTEV0QlFVa3NTMEZCU1N4TFFVRkpMRWRCUVVjc1IwRkJSU3hMUVVGSExFTkJRVU1zUjBGQlJTeEpRVUZITEVsQlFVY3NTVUZCUnl4TFFVRkpMRXRCUVVrc1MwRkJTU3hMUVVGSkxFdEJRVWtzUzBGQlNTeExRVUZKTEVkQlFVYzdRVUZCUlN4dFFrRkJVeXhIUVVGSExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExHMUNRVUZQTEVsQlFVVXNSVUZCUlN4SlFVRkhMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWxCUVVVN1FVRkJRU3hWUVVGSE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNaMEpCUVVjN1FVRkJSU3h4UWtGQlR5eEZRVUZGTEVsQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETzBGQlFVRXNWVUZCUXp0QlFVRkRMR05CUVVrc1MwRkJSeXhQUVVGSE8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4SFFVRkhMRU5CUVVNc1NVRkJSU3hIUVVGRkxFbEJRVVVzUjBGQlJ5eERRVUZETzBGQlFVVXNhVUpCUVVjc1IwRkJSeXhIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEcxQ1FVRlBPMEZCUVVFc1ZVRkJReXhIUVVGRkxFdEJRVWNzUTBGQlF5eEhRVUZGTEV0QlFVY3NRMEZCUXl4SFFVRkZMRTFCUVVrN1FVRkJReXhsUVVGSExGTkJRVTg3UVVGQlJTeG5Ra0ZCU1R0QlFVRkZMR2xDUVVGSkxFMUJRVWtzUjBGQlJTeEpRVUZGTEVWQlFVVXNSVUZCUlN4UlFVRk5MRU5CUVVNN1FVRkJSeXh0UWtGQlJ5eFBRVUZMTEVsQlFVVXNSMEZCUlN4SFFVRkhMRXRCUVVzc1QwRkJTeXhKUVVGRkxFVkJRVVVzUlVGQlJTeE5RVUZKTEVOQlFVTXNTVUZCUlN4SFFVRkhMRVZCUVVVc1VVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJTeEZRVUZGTzBGQlFVVXNiVUpCUVU4N1FVRkJRU3hWUVVGRkxFZEJRVVVzUzBGQlJ5eFBRVUZITzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hIUVVGSE8wRkJRVVVzWjBKQlFVVXNSVUZCUlR0QlFVRkZMR1ZCUVVjc1EwRkJRenRCUVVGRkxHMUNRVUZQTzBGQlFVRXNWVUZCUXp0QlFVTjJaU3h0UWtGQlV5eEZRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSkxFbEJRVVVzVlVGQlZTeFRRVUZQTEVkQlFVVXNTVUZCUlR0QlFVRlZMRzFDUVVGUExFZEJRVWNzVFVGQlNUdEJRVUZETEhWQ1FVRlJMRWxCUVVVc1IwRkJSeXhKUVVGRkxFTkJRVU1zUjBGQlJTeEpRVUZGTEV0QlFVY3NSMEZCUlN4SlFVRkZMRWRCUVVVc1NVRkJSU3hIUVVGRkxFdEJRVWs3UVVGQlF5eHZRa0ZCU1N4SlFVRkZMRVZCUVVVc1NVRkJSU3hEUVVGRE8wRkJRVVVzYlVKQlFVY3NSVUZCUlN4SlFVRkZMRTFCUVVrc1EwRkJReXhKUVVGRk8wRkJRVUVzWTBGQlF6dEJRVUZETEhGQ1FVRlBMRWRCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTXNRMEZCUXp0QlFVRkJMRlZCUVVNN1FVRkRNMG9zWTBGQlNTeExRVUZITEVOQlFVTXNSMEZCUlN4TFFVRkhMRU5CUVVNc1IwRkJSU3hMUVVGSExFMUJRVWs3UVVGQlF5eG5Ra0ZCUnl4RFFVRkRMRWxCUVVjN1FVRkJReXhyUWtGQlNTeEpRVUZGTEVWQlFVTXNUVUZCU3l4WlFVRlhMRk5CUVZFc1dVRkJWeXhOUVVGTExFdEJRVWtzUzBGQlNTeExRVUZKTEUxQlFVc3NhMEpCUVdsQ0xFOUJRVTBzV1VGQlZTeFBRVUZQTEdGQlFWY3NWVUZCVlN4aFFVRlhMRlZCUVZVc1ZVRkJWU3hEUVVGRExFdEJRVWNzUzBGQlN5eFJRVUZSTEV0QlFVa3NSMEZCUnl4SlFVRkZMRlZCUVZNc1IwRkJSU3hOUVVGSkxHbENRVUZuUWl4SFFVRkZPMEZCUVVVc2JVSkJRVWtzUzBGQlN6dEJRVUZITERKQ1FVRlRMRWRCUVVjc1EwRkJReXhKUVVGRkxFOUJRVThzUlVGQlJTeERRVUZETEVsQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVVVzYTBKQlFVa3NTVUZCUlN4RFFVRkRPMEZCUVVVc2JVSkJRVWtzUzBGQlN6dEJRVUZGTEd0Q1FVRkZMRXRCUVVzc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlR0QlFVRkZMRzFDUVVGSE8wRkJRVUVzV1VGQlF6dEJRVUZETEcxQ1FVRlBPMEZCUVVFc1ZVRkJSU3hIUVVGRk8wRkJRM1JYTEcxQ1FVRlRMRWRCUVVjc1IwRkJSU3hIUVVGRk8wRkJRVU1zWjBKQlFVYzdRVUZCUlN4eFFrRkJUeXhGUVVGRkxFbEJRVWNzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4dFFrRkJTenRCUVVGRkxHMUNRVUZMTzBGQlFVVXNaMEpCUVVrc1NVRkJSVHRCUVVGRkxHVkJRVWNzUlVGQlJTeFJRVUZSTEZOQlFWTXNSMEZCUlN4SFFVRkZPMEZCUVVNc2EwSkJRVWtzU1VGQlJTeEpRVUZGTzBGQlFVVXNhMEpCUVVVc1JVRkJSU3hGUVVGRkxFbEJRVVVzU1VGQlJTeExRVUZITEUxQlFVa3NRMEZCUXl4SlFVRkZPMEZCUVVVc2JVSkJRVWtzU1VGQlJTeEhRVUZGTEVsQlFVVXNSVUZCUlN4UlFVRlBMRVZCUVVVN1FVRkJSU3hyUWtGQlJTeEZRVUZGTEU5QlFVc3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hYUVVGWExFTkJRVU03UVVGQlJTeG5Ra0ZCUlN4RlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVU3UVVGQlJTeHRRa0ZCUnl4RlFVRkZMRk5CUVU4N1FVRkJRU3haUVVGRExFTkJRVU03UVVGQlJTeHRRa0ZCVHp0QlFVRkJMRlZCUVVNN1FVRkJReXh0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlR0QlFVRkRMR2RDUVVGSE8wRkJRVVVzY1VKQlFVOHNSVUZCUlN4SlFVRkhMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVVVzYlVKQlFVczdRVUZCUlN4dFFrRkJTenRCUVVGRkxHZENRVUZKTEVsQlFVVXNSMEZCUnp0QlFVRkZMR05CUVVVc1JVRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF5eEpRVUZGTEVWQlFVVTdRVUZCVHl4blFrRkJTU3hKUVVGRk8wRkJRVVVzWTBGQlJTeFJRVUZSTEZOQlFWTXNSMEZCUlR0QlFVRkRMRzFDUVVGSExFVkJRVVVzVTBGQlR6dEJRVUZCTEZsQlFVTXNRMEZCUXp0QlFVRkZMR05CUVVVc1JVRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF5eEpRVUZGTzBGQlFVVXNiVUpCUVU4N1FVRkJRU3hWUVVGRE8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZPMEZCUVVNc2JVSkJRVThzU1VGQlJTeEZRVUZGTEVsQlFVY3NSMEZCUlN4RFFVRkRMRWxCUVVVN1FVRkJRU3hWUVVGRk8wRkJRVU1zYlVKQlFWTXNSMEZCUnl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zYlVKQlFVOHNTVUZCUlN4RlFVRkZMRWxCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVsQlFVVTdRVUZCUVN4VlFVRkZPMEZCUXk5akxHMUNRVUZUTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRk8wRkJRVU1zYlVKQlFVOHNTVUZCUlN4RlFVRkZMRWxCUVVjc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTXNTVUZCUlR0QlFVRkJMRlZCUVVVN1FVRkJReXhqUVVGSkxFdEJRVWNzUTBGQlF5eE5RVUZMTEVOQlFVTXNSMEZCUlN4RFFVRkRMRU5CUVVNN1FVRkJSU3h0UWtGQlV5eEhRVUZITEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlJ6dEJRVUZGTEhGQ1FVRlBMRVZCUVVVc1NVRkJSeXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4dFFrRkJTenRCUVVGRkxHMUNRVUZMTzBGQlFVVXNiVUpCUVVzN1FVRkJSU3h4UWtGQlVTeEpRVUZGTEVkQlFVVXNTVUZCUlN4SFFVRkZMRWxCUVVVc1IwRkJSU3hMUVVGSk8wRkJRVU1zYTBKQlFVa3NTVUZCUlN4RlFVRkZMRVZCUVVVc1MwRkJSeXhOUVVGSkxFTkJRVU1zUjBGQlJTeEpRVUZGTEVWQlFVVXNSVUZCUlN4SlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRE8wRkJRVVVzYlVKQlFVYzdRVUZCUlN4MVFrRkJVU3hKUVVGRkxFZEJRVVVzU1VGQlJTeEhRVUZGTEV0QlFVazdRVUZCUXl4dlFrRkJTU3hKUVVGRkxFVkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NRMEZCUXl4SFFVRkZMRWxCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVVVzYzBKQlFVa3NTMEZCUnl4UFFVRkxMRTFCUVVrc1RVRkJTU3hKUVVGRkxFdEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVVc1JVRkJSU3hUUVVGUExFdEJRVWNzUlVGQlJTeExRVUZMTEVOQlFVTTdRVUZCUVN4alFVRkRPMEZCUVVNc2JVSkJRVWM3UVVGQlFTeFpRVUZETzBGQlFVTXNZMEZCUlN4RlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVU3UVVGQlJTeHRRa0ZCVHp0QlFVRkJMRlZCUVVNN1FVRkJReXhqUVVGSkxFdEJRVWNzUTBGQlF5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVsQlFVY3NSVUZCUlN4SFFVRkZMRXRCUVVjc1EwRkJReXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzUlVGQlJUdEJRVUZGTEcxQ1FVRlRMRWRCUVVjc1IwRkJSVHRCUVVGRExHZENRVUZKTEVsQlFVVXNUVUZCVFN4SFFVRkhMRU5CUVVNc1NVRkJSU3hEUVVGRE8wRkJRVVVzWlVGQlJ5eEhRVUZGTEVkQlFVVXNSMEZCUlN4RlFVRkZMRTFCUVUwN1FVRkJSU3h0UWtGQlR6dEJRVUZCTEZWQlFVTTdRVUZEYW1Zc1kwRkJTU3hMUVVGSExFTkJRVU1zUjBGQlJTeE5RVUZKTzBGQlFVTXNZMEZCUlN4RlFVRkZMRWxCUVVrc1IwRkJSU3hOUVVGSkxFTkJRVU03UVVGQlFTeFZRVUZETzBGQlF5OUNMRzFDUVVGVExFZEJRVWNzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMSEZDUVVGVExFVkJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVTdRVUZCUXl4dFFrRkJTU3hKUVVGRkxGbEJRVlVzVDBGQlR5eEpRVUZGTEVWQlFVVXNVMEZCVXl4SlFVRkZMRXRCUVVjc1NVRkJSeXhGUVVGRkxGTkJRVTg3UVVGQlJ5eHZRa0ZCUlN4RlFVRkZMRU5CUVVNc1NVRkJSVHRCUVVGRkxIRkNRVUZQTzBGQlFVRXNXVUZCUXp0QlFVRkRMSEZDUVVGVExFVkJRVVVzUjBGQlJTeEhRVUZGTzBGQlFVTXNjVUpCUVU4c1JVRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJ6dEJRVUZCTEZsQlFVTTdRVUZCUXl4eFFrRkJVeXhGUVVGRkxFZEJRVVVzUjBGQlJUdEJRVUZETEhWQ1FVRlRMRVZCUVVVc1NVRkJSenRCUVVGRExIVkNRVUZQTEVsQlFVVXNTMEZCUnl4TFFVRkhMRWxCUVVVc1MwRkJSeXhKUVVGRk8wRkJRVUVzWTBGQlF6dEJRVUZETEd0Q1FVRkpPMEZCUVVVc2NVSkJRVXNzU1VGQlJTeEZRVUZGTEVWQlFVVXNXVUZCV1N4SlFVRkZMRVZCUVVVc1dVRkJXU3hEUVVGRExFMUJRVWtzVDBGQlN5eEpRVUZGTEVWQlFVVXNSVUZCUlN4VFFVRlRMRWxCUVVVc1JVRkJSU3hUUVVGVExFTkJRVU1zVDBGQlN5eEpRVUZGTEVWQlFVVXNSVUZCUlN4UlFVRlJMRWxCUVVVc1JVRkJSU3hSUVVGUkxFTkJRVU03UVVGQlJ5eHhRa0ZCVHp0QlFVRkJMRmxCUVVNN1FVRkJReXh4UWtGQlV5eEZRVUZGTEVkQlFVVTdRVUZCUXl4elFrRkJUeXhGUVVGRkxFOUJRVThzUjBGQlJUdEJRVUZCTEdkQ1FVRkRMRXRCUVVzN1FVRkJSU3g1UWtGQlR5eEpRVUZKTEV0QlFVc3NSVUZCUlN4WlFVRlpMRWxCUVVVc1IwRkJSU3hKUVVGSExFVkJRVVU3UVVGQlFTeG5Ra0ZCUlN4TFFVRkxPMEZCUVVVc2VVSkJRVTg3UVVGQlFTeG5Ra0ZCUlN4TFFVRkxPMEZCUVVVc2VVSkJRVThzU1VGQlNTeExRVUZMTEVWQlFVVXNXVUZCV1N4SFFVRkZMRWRCUVVVc1EwRkJRenRCUVVGQkxHZENRVUZGTEV0QlFVczdRVUZCUlN4NVFrRkJUeXhKUVVGSk8wRkJRVUVzYjBKQlFVc3NSVUZCUlN4WlFVRlpPMEZCUVVFc2IwSkJRelZtTzBGQlFVRXNiMEpCUVVVN1FVRkJRU3hyUWtGQlF6dEJRVUZCTEdkQ1FVRkZMRXRCUVVzN1FVRkJSU3g1UWtGQlR5eEpRVUZKTEV0QlFVc3NSVUZCUlN4WlFVRlpMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzWjBKQlFVVXNTMEZCU3p0QlFVRkZMSGxDUVVGUExFbEJRVWtzUzBGQlN5eEZRVUZGTEZsQlFWa3NTVUZCUlN4SFFVRkZMRWxCUVVjc1JVRkJSVHRCUVVGQkxHZENRVUZGTEV0QlFVczdRVUZCUlN4NVFrRkJUeXhKUVVGSkxFdEJRVXNzUlVGQlJTeFpRVUZaTEVsQlFVVXNSMEZCUlN4SlFVRkhMRVZCUVVVN1FVRkJRU3hqUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZETEhGQ1FVRlRMRVZCUVVVc1IwRkJSVHRCUVVGRExHdENRVUZKTEVsQlFVVXNSVUZCUlR0QlFVRkhMRzFDUVVGSkxFbEJRVVVzU1VGQlNTeExRVUZOTEVsQlFVa3NTMEZCU3l4RlFVRkZMRXRCUVVjc1RVRkJTeXhIUVVGRkxFTkJRVU1zUlVGQlJ5eFJRVUZSTEVOQlFVTXNSMEZCUlN4SlFVRkZMRXRCUVVjN1FVRkJReXh2UWtGQlNTeEpRVUZGTEVWQlFVVXNVMEZCVXl4SFFVRkZMRXRCUVVjc1JVRkJSU3hGUVVGRkxGbEJRVmtzUTBGQlF5eEpRVUZGTEV0QlFVY3NTVUZCU1N4RFFVRkRPMEZCUVVVc2IwSkJRVWNzU1VGQlJTeEpRVUZGTEVWQlFVVXNVVUZCVVR0QlFVRkZMSFZDUVVGSExFbEJRVVVzUlVGQlJTeFJRVUZSTEVsQlFVVXNSMEZCUlN4RlFVRkZMRkZCUVZFc1EwRkJReXhIUVVGRkxFdEJRVWNzU1VGQlJTeEZRVUZGTEZOQlFWTXNTVUZCUlN4RFFVRkRMRXRCUVVjc1JVRkJSU3hUUVVGVExFTkJRVU1zUjBGQlJTeEZRVUZGTEZsQlFWa3NSVUZCUlN4WlFVRlpMRWxCUVVVc1EwRkJRenRCUVVGQkxIRkNRVUZQTzBGQlFVTXNiMEpCUVVVc1VVRkJVU3hGUVVGRkxGRkJRVkVzU1VGQlJTeERRVUZETzBGQlFVVTdRVUZCUVN4blFrRkJTenRCUVVGQkxHTkJRVU03UVVGQlF5eHJRa0ZCUlN4SlFVRkpMRXRCUVVzc1JVRkJSU3haUVVGWkxFbEJRVVVzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSU3hGUVVGRkxFbEJRVWs3UVVGQlFTeG5Ra0ZCU3l4RlFVRkZMRmxCUVZrN1FVRkJRU3huUWtGRGJtWTdRVUZCUVN4blFrRkJSVHRCUVVGQkxHTkJRVU1zUTBGQlF6dEJRVUZGTEd0Q1FVRkZMRVZCUVVVc1EwRkJRenRCUVVGRkxIRkNRVUZQTEV0QlFVY3NSVUZCUlN4SFFVRkZMRU5CUVVNc1NVRkJSU3hMUVVGSExFVkJRVVVzUjBGQlJTeERRVUZETEVsQlFVVXNSVUZCUlN4WlFVRlpMRWxCUVVVc1NVRkJSU3hGUVVGRkxGbEJRVmtzU1VGQlJTeEZRVUZGTEZsQlFWa3NTVUZCUlR0QlFVRkJMRmxCUVVNN1FVRkJReXh0UWtGQlN6dEJRVUZGTEcxQ1FVRkxPMEZCUVVVc2JVSkJRVXM3UVVGQlJTeHRRa0ZCU3p0QlFVRkZMR2RDUVVGSkxFbEJRVVVzUlVGQlJTeEZRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNN1FVRkJSU3huUWtGQlJTeEZRVUZETEVsQlFVY3NSVUZCUlN4RlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFZEJRVVVzU1VGQlJ5eEZRVUZGTEVWQlFVVXNTVUZCUlN4TFFVRkhMRTFCUVVrc1EwRkJReXhIUVVGRkxFbEJRVWNzUlVGQlJTeEZRVUZGTEVsQlFVVXNTMEZCUnl4TlFVRkpMRU5CUVVNc1IwRkJSU3hKUVVGSExFVkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWRCUVVVc1NVRkJSeXhGUVVGRkxFVkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SFFVRkZMRWxCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVVVzVFVGQlNTeE5RVUZKTEVOQlFVTXNSMEZCUlN4SlFVRkhMRVZCUVVVc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVkQlFVVXNTVUZCUnl4RlFVRkZMRVZCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEhRVUZGTEVsQlFVY3NSVUZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zUjBGQlJTeEpRVUZITEVWQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFZEJRVVVzU1VGQlJ5eEpRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkZMRWRCUVVVN1FVRkJSU3huUWtGQlJTeEZRVUZGTEVOQlFVTTdRVUZCUlN4blFrRkJSVHRCUVVGQkxHTkJRVU1zVFVGQlN6dEJRVUZCTEdOQlFYVkNMRTFCUVVzN1FVRkJRU3hqUVVGWExFMUJRVXM3UVVGQlFTeGpRVUZYTEUxQlFVczdRVUZCUVN4alFVRkxMRTFCUVVzN1FVRkJRU3hqUVVGakxFMUJRVXM3UVVGQlFTeGpRVUZSTEUxQlFVczdRVUZCUVN4alFVRlhMRTFCUVVzN1FVRkJRU3hqUVVGWExFMUJRVXM3UVVGQlFTeGpRVU40Wml4UFFVRk5PMEZCUVVFc1kwRkJTeXhQUVVGTk8wRkJRVUVzWTBGQlN5eFBRVUZOTzBGQlFVRXNZMEZCVnl4UFFVRk5PMEZCUVVFc1kwRkJWeXhQUVVGTk8wRkJRVUVzWTBGQlN5eFBRVUZOTzBGQlFVRXNZMEZCU3l4UFFVRk5PMEZCUVVFc1kwRkJTeXhQUVVGTk8wRkJRVUVzWTBGQlN5eFBRVUZOTzBGQlFVRXNZMEZCU3l4UFFVRk5PMEZCUVVFc1kwRkJTeXhQUVVGTk8wRkJRVUVzWTBGQlN5eFBRVUZOTzBGQlFVRXNZMEZCU3l4UFFVRk5PMEZCUVVFc1kwRkJTeXhQUVVGTk8wRkJRVUVzWTBGQlN5eFBRVUZOTzBGQlFVRXNZMEZCU3l4UFFVRk5PMEZCUVVFc1kwRkJTeXhQUVVGTk8wRkJRVUVzWTBGQlN5eFBRVUZOTzBGQlFVRXNZMEZCU3l4UFFVRk5PMEZCUVVFc1dVRkJTVHRCUVVGRkxIRkNRVUZSTEV0QlFVczdRVUZCUlN4clFrRkJSU3hGUVVGRkxGRkJRVkVzU1VGQlNTeFBRVUZQTEVkQlFVVXNSMEZCUnl4SFFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRVVVzWjBKQlFVa3NTVUZCUlN3eVJFRkJNa1FzVFVGQlRTeEhRVUZITEVkQlFVVXNTVUZCUlN4M1JrRkJkMFlzVFVGQlRTeEhRVUZITzBGQlFVVXNaMEpCUVVVc1JVRkJReXhOUVVGTExFOUJRVWNzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4VlFVRlZMRWRCUVVVc1EwRkJReXhIUVVGRkxFMUJRVXNzVDBGQlJ5eEZRVUZGTEVWQlFVVXNSVUZCUlN4SFFVRkZMRTFCUVVzc1QwRkRlbVlzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4VlFVRlZMRWRCUVVVc1EwRkJReXhIUVVGRkxFMUJRVXNzVDBGQlJ5eEZRVUZGTEVWQlFVVXNSVUZCUlN4SFFVRkZMRTFCUVVzc1QwRkJSeXhIUVVGSExFVkJRVVVzUzBGQlJ5eFJRVUZOTEUxQlFVa3NSMEZCUlN4RFFVRkRMRWRCUVVVc1RVRkJTeXhQUVVGSExFVkJRVVVzUlVGQlJTeEpRVUZITEVOQlFVTXNSMEZCUlN4TlFVRkxMRTlCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVWNzUjBGQlJTeEhRVUZITEVkQlFVVXNUVUZCU3l4UFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxGTkJRVk1zUlVGQlJTeFZRVUZWTEVOQlFVTXNSMEZCUlN4TlFVRkxMRTlCUVVjc1JVRkJSU3hEUVVGRExFZEJRVVVzVFVGQlN5eFBRVUZITEVWQlFVVXNSVUZCUlN4SlFVRkhMRU5CUVVNc1IwRkJSU3hOUVVGTExFOUJRVWM3UVVGQlF5eHJRa0ZCUlN4RlFVRkZPMEZCUVVjc2JVSkJRVWNzU1VGQlJTeEpRVUZGTEV0QlFVY3NTMEZCUnl4TlFVRkpMRXRCUVVjN1FVRkJTU3h4UWtGQlR5eEZRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1IwRkJSU3hOUVVGTExFOUJRVWM3UVVGQlF5eDFRa0ZCVVN4SlFVRkZMRWRCUVVVc1NVRkJSU3hIUVVGRkxFdEJRVWNzUlVGQlJTeExRVUZITEVkQlFVVXNUVUZCU1N4RlFVRkZMRVZCUVVVc1MwRkJSeXhKUVVGSkxFbEJRVVVzUzBGQlJ5eEpRVUZKTEVkQlFVYzdRVUZCUlR0QlFVRkRMSEZDUVVGUExFVkJRVVVzUlVGQlJTeExRVUZITEVkQlFVVXNRMEZCUXp0QlFVRkJMRmxCUVVNc1IwRkJSU3hOUVVGTExFOUJRVWNzUlVGQlJTeEZRVUZGTEV0QlFVY3NSMEZCUlN4RFFVRkRMRWRCUVVVc1RVRkJTeXhQUVVGSExFVkJRVVVzUlVGQlJTeEpRVUZITEVOQlFVTXNSMEZCUlN4TlFVRkxMRTFCUVVrc1RVRkJTeXhOUVVGTExFOUJRVWNzUzBGQlJ5eEZRVUZGTEUxQlFVa3NTMEZCUnl4RlFVRkZMRXRCUVVjc1QwRkJTeXhOUVVGTExFMUJRVXNzVDBGQlJ5eEZRVUZGTEVWQlFVVXNTVUZCUnl4RFFVRkRMRWRCUVVVc1RVRkJTeXhOUVVGSkxFdEJRVXNzVFVGQlN5eFBRVUZITEVWQlFVVXNUVUZCU1N4SFFVRkZMRTFCUVVzc1QwRkJSeXhGUVVGRkxFdEJRVXNzVDBGQlR5eEZRVUZGTEV0QlFVY3NTVUZCUlN4RlFVRkZMRTFCUVVrc1EwRkJReXhIUVVGRkxFTkJRVU1zUjBGQlJTeE5RVUZMTEU5QlEyNW1PMEZCUVVNc2EwSkJRVWtzU1VGQlJTeExRVUZMTEU5QlFVOHNSVUZCUlN4TFFVRkhMRXRCUVVjc1JVRkJSU3hMUVVGSExFdEJRVWNzUzBGQlJ5eERRVUZETzBGQlFVVXNiMEpCUVVrc1JVRkJSU3hMUVVGSExFMUJRVWtzUlVGQlJTeExRVUZITEV0QlFVY3NTMEZCUnp0QlFVRkpMR3RDUVVGSE8wRkJRVVVzYzBKQlFVa3NUVUZCU1N4TFFVRkhMRVZCUVVVc1MwRkJSeXhOUVVGSkxFVkJRVVVzVFVGQlNTeEhRVUZGTEV0QlFVY3NTMEZCUnl4TFFVRkhMRXRCUVVjc1JVRkJSU3hGUVVGRkxFVkJRVVVzVFVGQlNTeEpRVUZGTzBGQlFVRXNiVUpCUVZFN1FVRkJReXh2UWtGQlJUdEJRVUZITEc5Q1FVRkpMRXRCUVVjc1JVRkJSU3hMUVVGSExFbEJRVVVzUlVGQlJTeExRVUZITEV0QlFVYzdRVUZCUlN4cFFrRkJReXhMUVVGSExFdEJRVWNzUzBGQlJ5eExRVUZITEVWQlFVVXNSVUZCUlN4TFFVRkhMRTFCUVVrc1EwRkJReXhOUVVGSk8wRkJRVUVzWTBGQlJ6dEJRVUZETEhGQ1FVRlBMRVZCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVUVzV1VGQlF5eEhRVUZGTEUxQlFVc3NUMEZCUnl4RlFVRkZMRWxCUVVjc1RVRkJTeXhQUVVGSExFVkJRVVVzUzBGQlN5eFBRVUZQTEVWQlFVVXNTMEZCUnl4TFFVRkhMRVZCUVVVc1MwRkJSeXhMUVVGSExFdEJRVWNzUTBGQlF5eEhRVUZGTEVOQlFVTXNSMEZCUlN4TlFVRkxMRkZCUVVrc1JVRkJSU3hMUVVGSExFMUJRVTBzVTBGQlV5eEZRVUZGTEZWQlFWVXNRMEZCUXl4SFFVRkZMRTFCUVVzc1QwRkJSeXhGUVVGRkxFdEJRVWNzVFVGQlN5eE5RVUZMTEU5QlFVYzdRVUZCUXl4clFrRkJSU3hGUVVGRk8wRkJRVWNzYTBKQlFVa3NTVUZCUlN4TFFVRkhPMEZCUVVVc2EwSkJRVVVzUzBGQlN5eEpRVUZKTEVOQlFVTXNTVUZCUlR0QlFVRkhMSE5DUVVGUExFbEJRVVVzVFVGQlNTeFBRVUZMTEU5QlFVOHNWVUZCVVN4SlFVRkZMRXRCUVVjc1RVRkJTU3hKUVVGRkxFZEJRVWNzUlVGQlJTeE5RVUZOTEVWQlFVVTdRVUZCUVN4WlFVRkRMRWRCUVVVc1RVRkJTeXhQUVVGSExFVkJRVVVzU1VGQlJ5eE5RVUZMTEUxQlFVa3NTVUZCUnp0QlFVRkZMR2RDUVVGRkxFVkJRVVVzVVVGQlVTeFBRVUZOTEUxQlFWVTdRVUZCUlN4cFFrRkJTU3hMUVVGTE8wRkJRVVVzWjBKQlFVVXNVMEZCVXl4RFFVRkRMRTFCUTNKblFpeEpRVUZGTEVWQlFVVXNVVUZCVVN4SlFVRkpMRTlCUVU4c1IwRkJSU3hIUVVGSExFZEJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUVVjc1owSkJRVVVzUlVGQlJTeFJRVUZSTEZOQlFWRXNSMEZCUnp0QlFVRkZMR2RDUVVGRkxFZEJRVWNzUTBGQlF6dEJRVUZGTEdkQ1FVRkhMRVZCUVVVc1UwRkJUenRCUVVGRkxIRkNRVUZQTzBGQlFVVXNaVUZCUnl4SFFVRkZMRU5CUVVNN1FVRkJSU3h0UWtGQlR5eEZRVUZGTEZOQlFVODdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTzBGQlFVTXNaMEpCUVVjN1FVRkJReXhuUWtGQlJUdEJRVUZCTEZsQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc1owSkJRVVVzUTBGQlF6dEJRVUZCTEZsQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUjBGQlJ5eEhRVUZGTzBGQlFVTXNaMEpCUVVrc1NVRkJSU3hEUVVGRExFZEJRVVU3UVVGQlJTeHBRa0ZCU1N4TFFVRkxPMEZCUVVVc1pVRkJReXhUUVVGVExFZEJRVVU3UVVGQlF5eHZRa0ZCU1N4SlFVRkZMRVZCUVVVc1EwRkJRenRCUVVGRkxHdENRVUZGTEVOQlFVTXNTVUZCUlN4alFVRlpMRTlCUVU4c1NVRkJSU3hYUVVGVk8wRkJRVU1zY1VKQlFVY3NTMEZCU3l4RFFVRkRPMEZCUVVVc2MwSkJRVWM3UVVGQlF5d3lRa0ZCVHl4RlFVRkZMRTFCUVUwc1RVRkJTeXhUUVVGVE8wRkJRVUVzYTBKQlFVTXNWVUZCUXp0QlFVRlJMREJDUVVGSkxFZEJRVWNzU1VGQlNTeE5RVUZKTEV0QlFVY3NSVUZCUlN4SFFVRkZMRXRCUVVjc1RVRkJTU3hMUVVGSExFMUJRVWtzUjBGQlJ5eFhRVUZUTEVsQlFVVXNSMEZCUlN4TlFVRkpMRWRCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVVVzWlVGQllTeFBRVUZQTEZWQlFWRXNUMEZCVHl4SFFVRkhPMEZCUVVFc2EwSkJRVWM3UVVGQlFTeG5Ra0ZCUXl4SlFVRkZPMEZCUVVFc1kwRkJReXhIUVVGSExFTkJRVU03UVVGQlJTeHRRa0ZCVHp0QlFVRkJMRlZCUVVNN1FVRkJReXhqUVVGSkxFbEJRVVVzUjBGQlJTeEpRVUZGTEUxQlFVc3NTMEZCUnl4SFFVRkZMRXRCUVVjc1EwRkJReXhIUVVGRkxFdEJRVWNzUTBGQlF5eEhRVUZGTEV0QlFVY3NRMEZCUXl4SFFVRkZMRXRCUVVjc1IwRkJSU3hMUVVGSExFMUJRVXNzUzBGQlJ5eERRVUZETzBGQlF6ZGxMRzFDUVVGVExFdEJRVWs3UVVGQlF5eHRRa0ZCVHl4SlFVRkpMRkZCUVZFc1EwRkJReXhIUVVGRkxFMUJRVWs3UVVGQlF5eHRRa0ZCUnl4RlFVRkRMRk5CUVZFc1IwRkJSU3hSUVVGUExFVkJRVU03UVVGQlFTeFpRVUZETEVOQlFVTTdRVUZCUVN4VlFVRkRPMEZCUVVNc2JVSkJRVk1zUzBGQlNUdEJRVUZETEdkQ1FVRkpMRWxCUVVVc1IwRkJSeXhMUVVGTExFZEJRVVVzU1VGQlJTeEpRVUZGTzBGQlFVY3NZMEZCUlN4RlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVU3UVVGQlJTeGpRVUZGTEVWQlFVVXNTVUZCUlN4TFFVRkhMRTFCUVVrc1EwRkJReXhKUVVGRkxFbEJRVVU3UVVGQlRTeG5Ra0ZCUlN4SFFVRkhMRU5CUVVNN1FVRkJSU3huUWtGQlNTeEpRVUZGTEVkQlFVY3NRMEZCUXp0QlFVRkZMSFZDUVVGVExFMUJRVWtzU1VGQlJTeE5RVUZMTEVkQlFVY3NRMEZCUXl4SlFVRkZMRWRCUVVVc1IwRkJSeXhEUVVGRExFbEJRVVU3UVVGQlJ5eG5Ra0ZCUlR0QlFVRkZMR05CUVVVc1JVRkJSU3hKUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEVsQlFVVTdRVUZCUlN4dFFrRkJUenRCUVVGQkxGVkJRVU03UVVGQlF5eHRRa0ZCVXl4TFFVRkpPMEZCUVVNc1owSkJRVWtzU1VGQlJTeEZRVUZGTEVWQlFVVXNTVUZCUlN4TFFVRkhMRTFCUVVrc1EwRkJRenRCUVVGRkxHZENRVUZGTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkJSU3hqUVVGRk8wRkJRVWNzYlVKQlFVOHNSVUZCUlR0QlFVRkJMRlZCUVVNN1FVRkRkRk1zYlVKQlFWTXNSMEZCUnl4SFFVRkZPMEZCUVVNc1owSkJRVWNzUTBGQlF5eEhRVUZGTzBGQlFVTXNhMEpCUVVjc1RVRkJTU3hIUVVGRk8wRkJRVU1zYjBKQlFVa3NTVUZCUlN4UFFVRkhMRWxCUVVVN1FVRkJSeXhyUWtGQlJTeERRVUZETEVsQlFVVXNUVUZCU1R0QlFVRkRMSE5DUVVGSExFTkJRVU1zVFVGQlNTeExRVUZITEVkQlFVVXNTVUZCUlN4TlFVRkhMRWxCUVVjN1FVRkJReXgzUWtGQlJUdEJRVUZGTEhWQ1FVRkhMRTFCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGQlJTeHRRMEZCWVN4UFFVRlBMRmRCUVZNc1VVRkJVU3hIUVVGSExFMUJRVWtzVVVGQlVTeEhRVUZITEU5QlFVODdRVUZCUlN4M1FrRkJSVHRCUVVGSExIZENRVUZITzBGQlFVTXNNRUpCUVVrc1NVRkJSU3hIUVVGSE8wRkJRVUVzYjBKQlFVTXNVMEZCVHl4SFFVRkZPMEZCUVVNc01FSkJRVVVzUjBGQlJTeEpRVUZGTzBGQlFVRXNiMEpCUVVVN1FVRkJReXgzUWtGQlNTeEpRVUZGTzBGQlFVY3NkMEpCUVVjc1EwRkJReXhIUVVGRk8wRkJRVU1zTUVKQlFVa3NTVUZCUlR0QlFVRkhMRFJDUVVGSkxFdEJRVWNzVDBGQlRTeEpRVUZGTEVWQlFVVXNVMEZCVHl4RlFVRkZMRk5CUVZNc1EwRkJReXhIUVVGRkxFbEJRVVU3UVVGQlFTeHZRa0ZCUnp0QlFVRkRMSGRDUVVGSExFdEJRVWNzUTBGQlF6dEJRVUZGTERSQ1FVRk5PMEZCUVVFc2EwSkJRVVU3UVVGQlFTeG5Ra0ZCUXl4RFFVRkRPMEZCUVVVc2IwSkJRVVU3UVVGQlJ5eHpRa0ZCU1N4SlFVRkZMRWRCUVVVc1NVRkJSU3hIUVVGSExFZEJRVVVzWlVGQllTeFBRVUZQTEZkQlFWTXNVVUZCVVN4SFFVRkhMRTFCUVVrc1VVRkJVU3hIUVVGSExFMUJRVTBzUjBGQlJTeEhRVUZITEUxQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkJRU3hqUVVGRk8wRkJRVTBzYzBKQlFVa3NTMEZCUnl4SlFVRkZMRWRCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVVVzUjBGQlJ5eERRVUZETEVkQlFVVXNTVUZCUlN4TlFVRkxMRWRCUVVjc1VVRkJVU3hQUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETEV0QlFVY3NSVUZCUlN4clFrRkJhMElzUTBGQlF5eEZRVUZGTzBGQlFVVXNjVUpCUVU4N1FVRkJRU3haUVVGRk8wRkJRVUVzVlVGQlF6dEJRVU12WkN4dFFrRkJVeXhIUVVGSExFZEJRVVU3UVVGQlF5eHRRa0ZCVHl4SFFVRkhMRTlCUVVjN1FVRkJReXhuUWtGQlJTeEZRVUZGTEV0QlFVc3NRMEZCUXp0QlFVRkJMRmxCUVVNc1EwRkJRenRCUVVGQkxGVkJRVU03UVVGQlF5eFpRVUZGTEVkQlFVYzdRVUZEYUVRc1kwRkJTU3hMUVVGSExFTkJRVU1zVFVGQlN5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1NVRkJSeXhKUVVGSExFbEJRVWNzU1VGQlJ5eEpRVUZITEVsQlFVY3NTVUZCUnl4SlFVRkhMRWxCUVVjc1JVRkJSU3hIUVVGRkxFdEJRVWM3UVVGQlFTeFpRVUZETEVkQlFVVXNVMEZCVXl4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExIRkNRVUZQTEVkQlFVY3NXVUZCVXp0QlFVRkRMSE5DUVVGTkxFVkJRVVVzUjBGQlJ5eEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkJMR05CUVVNc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVkQlFVVXNVMEZCVXl4SFFVRkZMRWRCUVVVc1IwRkJSVHRCUVVGRExIRkNRVUZMTzBGQlFVVXNZMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhGUVVGSExFZEJRVWNzVFVGQlNTeEhRVUZGTEUxQlFVa3NRMEZCUXp0QlFVRkZMRzFDUVVGSE8wRkJRVVU3UVVGQlN5eHZRa0ZCVFR0QlFVRkJMRmxCUVVjN1FVRkJRU3haUVVGRkxFZEJRVVVzVTBGQlV5eEhRVUZGTzBGQlFVTXNhVUpCUVVjc1RVRkJTU3hIUVVGRkxFTkJRVU1zUjBGQlJTeEhRVUZGTEVOQlFVTXNTVUZCUnl4UlFVRlBMRXRCUVVVN1FVRkJSU3huUWtGQlJTeEhRVUZITzBGQlFVRXNXVUZCUXp0QlFVRkJMRmxCUVVVc1IwRkJSU3hUUVVGVExFZEJRVVU3UVVGQlF5eHhRa0ZCU3p0QlFVRkZMR3RDUVVGRkxGbEJRVmtzUlVGQlF5eExRVUZKTEdsQ1FVRm5RaXhSUVVGUExFVkJRVU1zUTBGQlF5eEpRVUZGTEVkQlFVY3NRMEZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVc1RVRkJTVHRCUVVGQkxGbEJRVWNzUjBGQlJTeFRRVUZUTEVkQlFVVXNSMEZCUlR0QlFVRkRMSEZDUVVGTE8wRkJRVVVzYlVKQlFVY3NUVUZCU1N4SlFVRkZMRmRCUVZjc1RVRkJTU3hIUVVGSExFTkJRVU1zU1VGQlJTeEpRVUZGTEZsQlFWazdRVUZCUVN4blFrRkJReXhqUVVGaE8wRkJRVUVzWjBKQlF6Vm1MRXRCUVVrN1FVRkJRU3hqUVVGakxFTkJRVU1zUzBGQlJ5eEpRVUZGTEVWQlFVVXNSMEZCUnl4RFFVRkRMRTFCUVVrc1JVRkJSU3haUVVGWkxFVkJRVU1zUzBGQlNTeGxRVUZqTEVOQlFVTTdRVUZCUVN4WlFVRkRPMEZCUVVFc1dVRkJSU3hIUVVGRkxGZEJRVlU3UVVGQlF5eHhRa0ZCVFR0QlFVRkJMRmxCUVVVN1FVRkJRU3haUVVGRkxFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVXNVMEZCVXl4SFFVRkZPMEZCUVVNc2JVSkJRVWNzUlVGQlJTeEhRVUZITEUxQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrN1FVRkJRU3haUVVGRE8wRkJRVUVzV1VGQlJTeEhRVUZGTEZOQlFWTXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhyUWtGQlJTeEpRVUZGTEZsQlFWVXNTVUZCUlN4VlFVRlJMRU5CUVVNc1EwRkJReXhMUVVGSExFMUJRVWtzUzBGQlJ5eGhRVUZYTEVsQlFVVTdRVUZCU1N4eFFrRkJTenRCUVVGRkxHdENRVUZGTEVsQlFVa3NTMEZCU3l4TlFVRkpMRU5CUVVNN1FVRkJSU3huUWtGQlJTeEZRVUZGTEV0QlFVY3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hqUVVGak8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4SlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeGpRVUZqTzBGQlFVVXNaMEpCUVVVc1JVRkJSU3hKUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4WlFVRlpPMEZCUVVVc1owSkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hYUVVGWE8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFpRVUZaTzBGQlFVVXNaMEpCUVVVc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4bFFVRmxMRWxCUVVVN1FVRkJTeXhuUWtGQlJTeEZRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1NVRkJSU3hGUVVGRkxGVkJRVlU3UVVGQlJTeHRRa0ZCUnl4RlFVRkZMRkZCUVZFc1NVRkJSU3hMUVVGTE8wRkJRVUVzWjBKQlFVa3NSVUZCUlN4bFFVRmxPMEZCUVVFc1owSkJRek5tTzBGQlFVRXNaMEpCUVVVN1FVRkJRU3huUWtGQlJUdEJRVUZCTEdkQ1FVRkZPMEZCUVVFc1owSkJRVVU3UVVGQlFTeG5Ra0ZCUlR0QlFVRkJMR05CUVVNc1MwRkJSeXhSUVVGTk8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVU3UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SFFVRkZMRk5CUVZNc1IwRkJSU3hIUVVGRkxFZEJRVVU3UVVGQlF5eHJRa0ZCUlN4SlFVRkZMRmxCUVZVc1NVRkJSU3hWUVVGUkxFTkJRVU1zUTBGQlF5eExRVUZITEUxQlFVa3NTMEZCUnl4aFFVRlhMRWxCUVVVN1FVRkJTU3h4UWtGQlN6dEJRVUZGTEd0Q1FVRkZMRWxCUVVrc1MwRkJTeXhOUVVGSkxFTkJRVU03UVVGQlJTeG5Ra0ZCUlN4RlFVRkZMRXRCUVVjc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFhRVUZYTzBGQlFVVXNaMEpCUVVVc1JVRkJSU3hKUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4WFFVRlhPMEZCUVVVc1owSkJRVVVzUlVGQlJTeEpRVUZGTEV0QlFVY3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hUUVVGVE8wRkJRVVVzWjBKQlFVVXNSVUZCUlN4SlFVRkZMRTFCUVVrc1RVRkJTU3hEUVVGRExFbEJRVVVzUlVGQlJTeFJRVUZSTzBGQlFVVXNaMEpCUVVVc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVsQlFVVXNSVUZCUlN4VFFVRlRPMEZCUVVVc1owSkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3haUVVGWkxFbEJRVVU3UVVGQlN5eG5Ra0ZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zU1VGQlJTeEZRVUZGTEU5QlFVODdRVUZCUlN4dFFrRkJSeXhGUVVGRkxFVkJRVVVzV1VGQldTeERRVUZETEVsQlFVVXNTMEZCUnl4SlFVRkpMRVZCUVVVc1UwRkJVeXhEUVVGRExFbEJRVVVzUlVGQlJTeFJRVUZSTEVsQlFVVXNTVUZCUlR0QlFVRkZMR2RDUVVGRkxFVkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SlFVRkZPMEZCUVVVc1owSkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1JVRkJSU3hMUVVGSExFVkJRVVVzYTBKQlFXdENPMEZCUVVjc2EwSkJRVWNzU1VGQlNUdEJRVUZCTEdkQ1FVRkxMRVZCUVVVc1dVRkJXVHRCUVVGQkxHZENRVU55Wmp0QlFVRkJMR2RDUVVGRk8wRkJRVUVzWTBGQlF5eEZRVUZITEd0Q1FVRnJRanRCUVVGRkxHdENRVUZKTEVsQlFVY3NTVUZCU1N4TFFVRkxMRVZCUVVVc1dVRkJXU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEZRVUZITEd0Q1FVRnJRanRCUVVGRkxHMUNRVUZITEV0QlFVY3NTMEZCUnl4RlFVRkZMR3RDUVVGclFpeExRVUZITEV0QlFVc3NTVUZCU1N4SFFVRkZMRU5CUVVNc1MwRkJSenRCUVVGRkxHZENRVUZGTEVWQlFVVXNTVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRk8wRkJRVUVzV1VGQlF6dEJRVUZCTEZsQlFVVXNSMEZCUlN4VFFVRlRMRWRCUVVVN1FVRkJReXh4UWtGQlN6dEJRVUZGTEd0Q1FVRkpMRWxCUVVVc1NVRkJTU3hMUVVGTExFVkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWxCUVVVc1RVRkJTeXhGUVVGRkxFVkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SFFVRkZMRVZCUVVVc1JVRkJSU3hKUVVGRkxFMUJRVWtzVFVGQlNTeERRVUZETEVkQlFVVXNSVUZCUlN4RlFVRkZMRWxCUVVVc1MwRkJSeXhOUVVGSkxFTkJRVU1zUjBGQlJTeEZRVUZGTEVWQlFVVXNTVUZCUlN4TFFVRkhMRTFCUVVrc1EwRkJReXhIUVVGRkxFVkJRVVVzUlVGQlJTeExRVUZITEUxQlFVa3NRMEZCUXl4SFFVRkZMRU5CUVVNc1IwRkJSU3hKUVVGRkxFVkJRVVVzUlVGQlJTeEpRVUZGTEUxQlFVa3NUVUZCU1N4RFFVRkRMRWRCUVVVc1NVRkJSU3hGUVVGRkxHdENRVUZyUWl4SFFVRkZMRWxCUVVjc1NVRkJTU3hMUVVGTExFVkJRVVVzV1VGQldTeEhRVUZGTEVkQlFVVXNRMEZCUXl4RlFVRkhMR3RDUVVGclFpeEhRVUZGTEVsQlFVY3NTVUZCU1N4TFFVRkxMRVZCUVVVc1dVRkJXU3hIUVVGRkxFZEJRVVVzUTBGQlF5eEZRVUZITEd0Q1FVRnJRaXhIUVVGRkxFbEJRVVVzUzBGQlN5eEpRVUZKTEVkQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGRkxFbEJRVVVzUlVGQlJTeEZRVUZGTEVsQlFVVXNUVUZCU1N4TlFVRkpMRU5CUVVNc1NVRkJSU3hQUVVGUExFdEJRVWNzUzBGQlJ5eExRVUZITEVOQlFVTXNTVUZEYm1Zc1NVRkJSU3hOUVVGSkxFdEJRVWNzVDBGQlN5eEpRVUZGTEV0QlFVc3NTVUZCU1N4SFFVRkZMRU5CUVVNc1IwRkJSU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFJRVUZSTEVsQlFVVXNVVUZCVFN4SlFVRkZMRWxCUVVVc1NVRkJSU3hMUVVGSExFVkJRVVU3UVVGQlJ5eG5Ra0ZCUlN4RlFVRkZMRWxCUVVVc1RVRkJTU3hOUVVGSkxFTkJRVU1zU1VGQlJTeEZRVUZGTEU5QlFVODdRVUZCUlN4dFFrRkJSeXhGUVVGRkxFVkJRVVVzV1VGQldTeERRVUZETEVsQlFVVXNTMEZCUnl4SlFVRkpMRVZCUVVVc1UwRkJVeXhEUVVGRExFbEJRVVVzUlVGQlJTeFJRVUZSTEVsQlFVVXNTVUZCUlR0QlFVRkZMR2RDUVVGRkxFVkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SlFVRkZPMEZCUVVVc1owSkJRVVVzUlVGQlJTeExRVUZITEUxQlFVa3NRMEZCUXl4SlFVRkZMRVZCUVVVc1YwRkJWenRCUVVGRkxHZENRVUZGTEVWQlFVVXNTVUZCUlN4TFFVRkhMRTFCUVVrc1EwRkJReXhKUVVGRkxFVkJRVVVzVjBGQlZ6dEJRVUZGTEdkQ1FVRkZMRVZCUVVVc1NVRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF5eEpRVUZGTEVWQlFVVXNVMEZCVXp0QlFVRkZMR2RDUVVGRkxFVkJRVVVzU1VGQlJTeE5RVUZKTEUxQlFVa3NRMEZCUXl4SlFVRkZMRVZCUVVVc1VVRkJVVHRCUVVGRkxHZENRVUZGTEVWQlFVVXNTVUZCUlN4TlFVRkpMRTFCUVVrc1EwRkJReXhKUVVGRkxFVkJRVVVzVTBGQlV6dEJRVUZGTEdkQ1FVRkZMRVZCUVVVc1NVRkJSU3hOUVVGSkxFMUJRVWtzUTBGQlF5eEpRVUZGTEVWQlFVVXNVVUZCVVR0QlFVRkZMR3RDUVVGRkxFVkJRVVVzVVVGQlVTeEpRVUZGTzBGQlFVa3NjVUpCUVU4c1NVRkJTU3hKUVVGRkxFZEJRVVVzUzBGQlJ5eERRVUZETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWxCUVVVc1NVRkJSU3hKUVVGRkxFTkJRVU1zUzBGQlN5eE5RVUZOTEVsQlFVVXNWVUZCVlN4TlFVRkpMRWxCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eE5RVUZOTEVsQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1RVRkJTU3hOUVVGSkxGVkJRVlVzVFVGQlNTeEpRVUZGTEVWQlFVVXNSMEZCUlN4TlFVRkpPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzUjBGQlJUdEJRVUZCTEZsQlFVY3NSMEZCUlR0QlFVRkJMRmxCUTNCbUxFZEJRVVVzVTBGQlV5eEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMSFZDUVVGVExFVkJRVVVzUjBGQlJUdEJRVUZETEhkQ1FVRlBMRWxCUVVVc1JVRkJSU3hoUVVGaExFVkJRVVVzVFVGQlRTeHRRa0ZCYlVJc1MwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlJUdEJRVUZCTEdOQlFVczdRVUZCUXl4eFFrRkJTenRCUVVGRkxIRkNRVUZMTzBGQlFVVXNjVUpCUVVzN1FVRkJSU3hyUWtGQlNTeExRVUZITEc5Q1FVRkpMRkZCUVUwc1dVRkJXU3hIUVVGRkxFbEJRVVVzU1VGQlNTeExRVUZMTEVkQlFVVXNSMEZCUlN4RFFVRkRMRWRCUVVVc1NVRkJSU3hKUVVGSkxFdEJRVXNzUjBGQlJTeEhRVUZGTEVOQlFVTTdRVUZCUlN4clFrRkJSU3hGUVVGRkxHdENRVUZyUWp0QlFVRkZMR3RDUVVGSkxFbEJRVVVzUlVGQlJTeHJRa0ZCYTBJc1IwRkJSU3hKUVVGRkxFdEJRVXNzU1VGQlNTeEhRVUZGTEVOQlFVTTdRVUZCUlN4blFrRkJSU3hGUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEVsQlFVVXNTMEZCUnp0QlFVRkZMR2RDUVVGRkxFVkJRVVVzUzBGQlJ5eE5RVUZKTEVOQlFVTXNTVUZCUlN4UFFVRlBMRXRCUVVjc1EwRkJRenRCUVVGRkxHdENRVUZGTEVWQlFVVXNRMEZCUXp0QlFVRkZMR3RDUVVGRkxFVkJRVVVzUTBGQlF6dEJRVUZGTEd0Q1FVRkZMRWRCUVVjc1EwRkJRenRCUVVGRkxHdENRVUZGTEVkQlFVY3NRMEZCUXp0QlFVRkZMR3RDUVVGRkxFdEJRVWNzUlVGQlJTeEZRVUZGTEV0QlFVY3NUVUZCU1N4RFFVRkRMRWxCUVVVc1IwRkJSU3hGUVVGRkxFVkJRVVVzU1VGQlJTeExRVUZITEUxQlFVa3NRMEZCUXl4SlFVRkZMRTFCUVVrc1JVRkJSU3hGUVVGRkxFdEJRVWNzVFVGQlNTeERRVUZETEVsQlFVVXNSMEZCUlN4RlFVRkZMRVZCUVVVc1NVRkJSU3hMUVVGSExFMUJRVWtzUTBGQlF5eEpRVUZGTzBGQlFVRXNXVUZCUlR0QlFVRkJMRmxCUVVVc1IwRkJSU3hOUVVGSk8wRkJRVU1zWjBKQlFVVXNSVUZCUlR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFZEJRVVVzVTBGQlV5eEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMSEZDUVVGTE8wRkJRVVVzYTBKQlFVVXNSMEZCUnl4TlFVRkpMRWRCUVVVc1RVRkJTU3hEUVVGRE8wRkJRVVVzY1VKQlFVOHNSMEZCUnl4RFFVRkRMRVZCUVVVc1RVRkJUU3hOUVVGTExFTkJRVU03UVVGQlFTeFpRVUZETzBGQlFVRXNXVUZCUlN4SFFVRkZMRk5CUVZNc1IwRkRkR1lzUjBGQlJTeEhRVUZGTzBGQlFVTXNjVUpCUVVzN1FVRkJSU3hyUWtGQlJTeEhRVUZITEUxQlFVa3NSMEZCUlN4TlFVRkpMRU5CUVVNN1FVRkJSU3h4UWtGQlR5eEhRVUZITEVOQlFVTXNSVUZCUlN4TlFVRk5MRTFCUVVzc1EwRkJRenRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVkQlFVVXNWMEZCVlR0QlFVRkJMRmxCUVVNN1FVRkJRU3haUVVGRkxFZEJRVVVzVjBGQlZUdEJRVUZETEhGQ1FVRlBMRXRCUVVzc1NVRkJTVHRCUVVGQkxGbEJRVU03UVVGQlFTeFpRVUZGTEVkQlFVVXNUVUZCU1R0QlFVRkRMRzlDUVVGSk8wRkJRVVVzYjBKQlFVczdRVUZCUVN4WlFVRlRPMEZCUVVFc1dVRkJSU3hIUVVGRkxGZEJRVlU3UVVGQlF5eHhRa0ZCVHp0QlFVRkJMRmxCUVZVN1FVRkJRU3haUVVGRkxFZEJRVVVzVFVGQlNTeFpRVUZaTEdGQlFWY3NXVUZCV1N4SlFVRkpPMEZCUVVFc1dVRkJSU3hIUVVGRkxGZEJRVlU3UVVGQlF5eHhRa0ZCVHl4SlFVRkZMSE5EUVVGakxFdEJRVXNzUlVGQlJTeFRRVUZQTEZWQlFWVTdRVUZCUVN4WlFVRnRRanRCUVVGQkxGbEJRVVVzUjBGQlJTeFRRVUZUTEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhuUWtGQlJTeExRVUZITEUxQlFVazdRVUZCUlN4cFFrRkJSeXhUUVVGUE8wRkJRVVVzYTBKQlFVVXNUVUZCU1N4TFFVRkhPMEZCUVVVc2JVSkJRVWtzU1VGQlJTeEhRVUZGTEVsQlFVVXNSMEZCUlR0QlFVRkpMRzFDUVVGSExFTkJRVU1zU1VGQlJTeEhRVUZITEVWQlFVVXNTVUZCUlN4TlFVRkpMRU5CUVVNN1FVRkJSU3h6UWtGQlR5eEpRVUZGTEVsQlFVVXNSMEZCUnl4RFFVRkRMRWxCUVVVc1EwRkJReXhKUVVGRkxFZEJRVWNzUTBGQlF5eEhRVUZITEUxQlFVMHNUVUZCU3l4RlFVRkZPMEZCUVVFc1dVRkJRenRCUVVGQkxGbEJRVVVzUjBGQlJTeFRRVUZUTEVkQlFVVTdRVUZCUXl4eFFrRkJTenRCUVVGRkxHdENRVUZKTEVsQlFVVXNSVUZCUlN4RlFVRkZPMEZCUVU4c2EwSkJRVWNzUzBGQlJ5eExRVUZITEdGQlFWYzdRVUZCUlN4MVFrRkJUVHRCUVVGSExIVkNRVUZSTEVsQlEzaG1MRWRCUVVVc1MwRkJSeXhIUVVGRkxFdEJRVWNzUjBGQlJUdEJRVUZETEc5Q1FVRkpMRWxCUVVVc1MwRkJSeXhKUVVGRkxFMUJRVWM3UVVGQlJ5eHZRa0ZCUlN4TFFVRkxMRWxCUVVrc1IwRkJSU3hKUVVGRkxGTkJRVk03UVVGQlJTeHZRa0ZCU1N4SlFVRkZPMEZCUVVzc2IwSkJRVVVzUzBGQlN5eEpRVUZKTEVkQlFVVXNRMEZCUXp0QlFVRkZMRzFDUVVGRk8wRkJRVU1zYzBKQlFVVXNSVUZCUlN4SlFVRkpMRXRCUVVzc1IwRkJSU3haUVVGWExFdEJRVWNzVVVGQlRTeEpRVUZGTEZOQlFVOHNTMEZCU3l4SlFVRkZMRVZCUVVVc1QwRkJUeXhoUVVGWExGVkJRVkU3UVVGQlJ5eHpRa0ZCUnp0QlFVRkRMSE5DUVVGRkxFdEJRVXNzUTBGQlF6dEJRVUZGTEhOQ1FVRkZPMEZCUVVVc2QwSkJRVWtzU1VGQlJUdEJRVUZGTERCQ1FVRk5PMEZCUVVFc2EwSkJRVU1zVTBGQlR5eEhRVUZGTzBGQlFVRXNhMEpCUVVNN1FVRkJReXh6UWtGQlJUdEJRVUZCTEdkQ1FVRk5PMEZCUVVNc2IwSkJRVWM3UVVGQlJTeDVRa0ZCVFR0QlFVRkJMR05CUVVVN1FVRkJReXh4UWtGQlRUdEJRVUZCTEZsQlFVVTdRVUZCUVN4WlFVRkZMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVU3UVVGQlFTeFpRVUZITEVkQlFVVTdRVUZCUVN4WlFVRkhMRWRCUVVVN1FVRkJRU3haUVVGSExFZEJRVVVzUzBGQlJ5eEZRVUZGTzBGQlFVRXNXVUZCVnl4SFFVRkZPMEZCUVVFc1dVRkJSeXhIUVVGRkxGTkJRVk1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlR0QlFVRkRMSEZDUVVGUExFZEJRVWNzVFVGQlNTeEhRVUZGTEUxQlFVa3NSMEZCUlN4TlFVRkpMRWRCUVVVc1RVRkJTU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlFVTTdRVUZEZEZjc1YwRkJReXhYUVVGVk8wRkJRVU1zY1VKQlFWTXNSVUZCUlN4SFFVRkZMRWRCUVVVN1FVRkJReXhyUWtGQlJTeEZRVUZGTzBGQlFWRXNhMEpCUVVVc1IwRkJSeXhEUVVGRE8wRkJRVVVzYTBKQlFVVXNTVUZCUlN4SFFVRkhMRU5CUVVNN1FVRkJSU3huUWtGQlJTeEhRVUZITEV0QlFVc3NSVUZCUlN4RlFVRkZPMEZCUVVVc2FVSkJRVWNzVVVGQlVTeEZRVUZGTEVOQlFVTTdRVUZCUlN4dFFrRkJSenRCUVVGRkxHbENRVUZITzBGQlFVVXNjVUpCUVU4N1FVRkJRU3haUVVGRE8wRkJRVU1zWjBKQlFVa3NTVUZCUlN4RlFVRkRMRWRCUVVVc1IwRkJSVHRCUVVGRkxHVkJRVWM3UVVGQlJTeG5Ra0ZCUnl4RlFVRkZPMEZCUVdkQ0xHdENRVUZITzBGQlFVTXNkVUpCUVU4c1JVRkJSU3huUWtGQlowSXNSMEZCUlN4RFFVRkRPMEZCUVVFc1kwRkJReXhUUVVGUExFZEJRVVU3UVVGQlF5eHJRa0ZCUlN4M1JFRkJjMFFzUTBGQlF5eEhRVUZGTEVWQlFVVXNRMEZCUXp0QlFVRkJMR05CUVVNN1FVRkJReXhsUVVGSExFZEJRVVVzVTBGQlV5eEhRVUZGTzBGQlFVTXNaMEpCUVVVc1JVRkJSU3hWUVVGVExFVkJRVVVzVFVGQlRUdEJRVUZCTEZsQlFVTXNRMEZCUXl4RlFVRkZMRTFCUVUwc1EwRkJRenRCUVVGRkxHMUNRVUZOTEVOQlFVTTdRVUZCUVN4VlFVRkRMRWRCUVVjN1FVRkJSU3haUVVGRkxGZEJRVk1zUTBGQlF5eEhRVUZGTEU5QlFVc3NSVUZCUlN4WFFVRlRMRVZCUVVVc1IwRkJSeXhIUVVGRkxFTkJRVU03UVVGQlJTeFpRVUZGTEcxQ1FVRnBRaXhEUVVGRExFZEJRVVVzVDBGQlN5eEZRVUZGTEcxQ1FVRnBRaXhGUVVGRkxFZEJRVWNzUjBGQlJTeERRVUZETzBGQlF6ZGFMRmxCUVVVc01rSkJRWGxDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4RlFVRkZMREpDUVVGNVFpeEZRVUZGTEVkQlFVY3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMRmxCUVVVc09FSkJRVFJDTEVOQlFVTXNSMEZCUlN4UFFVRkxMRVZCUVVVc09FSkJRVFJDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRU5CUVVNN1FVRkJSU3haUVVGRkxDdENRVUUyUWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hQUVVGTExFVkJRVVVzSzBKQlFUWkNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNORUpCUVRCQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEU5QlFVc3NSVUZCUlN3MFFrRkJNRUlzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVVc1dVRkJSU3cwUWtGQk1FSXNVVUZCU1N4RlFVRkZMRFJDUVVFd1FpeEZRVUZGTEVsQlFVa3NRMEZCUXp0QlFVRkZMRmxCUVVVc2IwSkJRV3RDTEVOQlFVTXNSMEZCUlN4SFFVRkZMRTlCUVVzc1JVRkJSU3h2UWtGQmEwSXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRemRrTEZsQlFVVXNjVUpCUVcxQ0xGRkJRVWtzUlVGQlJTeHhRa0ZCYlVJc1JVRkJSU3hKUVVGSkxFTkJRVU03UVVGQlJTeFpRVUZGTERCQ1FVRjNRaXhEUVVGRExFZEJRVVVzUjBGQlJTeFBRVUZMTEVWQlFVVXNNRUpCUVhkQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEVkQlFVVXNRMEZCUXp0QlFVRkZMRmxCUVVVc2JVSkJRV2xDTEVOQlFVTXNSMEZCUlN4UFFVRkxMRVZCUVVVc2JVSkJRV2xDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRU5CUVVNN1FVRkJSU3haUVVGRkxHOUNRVUZyUWl4RFFVRkRMRWRCUVVVc1QwRkJTeXhGUVVGRkxHOUNRVUZyUWl4RlFVRkZMRWxCUVVrc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTeFhRVUZUTEZGQlFVa3NSVUZCUlN4WFFVRlRMRVZCUVVVc1NVRkJTU3hEUVVGRE8wRkJRVVVzV1VGQlJTeHRRa0ZCYVVJc1EwRkJReXhIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4RlFVRkZMRzFDUVVGcFFpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlJTeFpRVUZGTEc5Q1FVRnJRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4RlFVRkZMRzlDUVVGclFpeEZRVUZGTEVsQlFVa3NSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTeHZRa0ZCYTBJc1VVRkJTU3hGUVVGRkxHOUNRVUZyUWl4RlFVRkZMRWxCUVVrc1EwRkJRenRCUVVNMVpDeFpRVUZGTEhWQ1FVRnhRaXhEUVVGRExFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NSVUZCUlN4MVFrRkJjVUlzUlVGQlJTeEpRVUZKTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJSU3haUVVGRkxIZENRVUZ6UWl4RFFVRkRMRWRCUVVVc1IwRkJSU3hQUVVGTExFVkJRVVVzZDBKQlFYTkNMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNkMEpCUVhOQ0xGRkJRVWtzUlVGQlJTeDNRa0ZCYzBJc1JVRkJSU3hKUVVGSkxFTkJRVU03UVVGQlJTeFpRVUZGTEc5Q1FVRnJRaXhSUVVGSkxFVkJRVVVzYjBKQlFXdENMRVZCUVVVc1NVRkJTU3hEUVVGRE8wRkJRVVVzV1VGQlJTeG5Ra0ZCWXl4RFFVRkRMRWRCUVVVc1IwRkJSU3hQUVVGTExFVkJRVVVzWjBKQlFXTXNSVUZCUlN4SlFVRkpMRWRCUVVVc1IwRkJSU3hEUVVGRE8wRkJRVVVzV1VGQlJTeHBRa0ZCWlN4RFFVRkRMRWRCUVVVc1IwRkJSU3hIUVVGRkxFOUJRVXNzUlVGQlJTeHBRa0ZCWlN4RlFVRkZMRWxCUVVrc1IwRkJSU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNkMEpCUVhOQ0xGRkJRVWtzUlVGQlJTeDNRa0ZCYzBJc1JVRkJSU3hKUVVGSkxFTkJRVU03UVVGQlJTeFpRVUZGTEhGQ1FVRnRRaXhSUVVGSkxFVkJRVVVzY1VKQlFXMUNMRVZCUVVVc1NVRkJTU3hEUVVGRE8wRkJRM2hsTEZsQlFVVXNjVUpCUVcxQ0xFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4UFFVRkxMRVZCUVVVc2NVSkJRVzFDTEVWQlFVVXNTVUZCU1N4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFTkJRVU03UVVGQlJTeFpRVUZGTEZWQlFWRXNRMEZCUXl4SFFVRkZMRWRCUVVVc1IwRkJSU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEU5QlFVc3NSVUZCUlN4VlFVRlJMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4SFFVRkZMRU5CUVVNN1FVRkJSU3haUVVGRkxHMUNRVUZwUWl4UlFVRkpMRVZCUVVVc2JVSkJRV2xDTEVWQlFVVXNTVUZCU1N4RFFVRkRPMEZCUVVVc1dVRkJSU3hqUVVGWkxFTkJRVU1zUjBGQlJTeEhRVUZGTEU5QlFVc3NSVUZCUlN4alFVRlpMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUTBGQlF6dEJRVUZGTEZsQlFVVXNiVUpCUVdsQ0xGRkJRVWtzUlVGQlJTeHRRa0ZCYVVJc1JVRkJSU3hKUVVGSkxFTkJRVU03UVVGQlJTeGpRVUZKTEV0QlFVY3NSVUZCUlN4blFrRkJZeXhQUVVGTExFdEJRVWNzUlVGQlJTeG5Ra0ZCWXl4RlFVRkZMRWxCUVVrc1IwRkJSU3hMUVVGSExFVkJRVVVzVlVGQlVTeFJRVUZKTEV0QlFVY3NSVUZCUlN4VlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVVVzUzBGQlJ5eEZRVUZGTEZGQlFVMHNVVUZCU1N4TFFVRkhMRVZCUVVVc1VVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF6dEJRVUZGTEZsQlFVVXNkMEpCUVhOQ0xFOUJRVXNzUlVGQlJTeDNRa0ZCYzBJc1JVRkJSU3hKUVVGSk8wRkJRemRrTEdOQlFVa3NTMEZCUnl4RlFVRkZMREpDUVVGNVFpeERRVUZETEVkQlFVVXNSMEZCUlN4SFFVRkZMRWRCUVVVc1IwRkJSU3hQUVVGTExFdEJRVWNzUlVGQlJTd3lRa0ZCZVVJc1JVRkJSU3hKUVVGSkxFZEJRVVVzUjBGQlJTeEhRVUZGTEVkQlFVVXNSMEZCUlN4RFFVRkRPMEZCUVVVc1dVRkJSU3c0UWtGQk5FSXNUMEZCU3l4RlFVRkZMRGhDUVVFMFFpeEZRVUZGTEVsQlFVazdRVUZETVVzc1kwRkJTU3hMUVVGSExFTkJRVU1zUjBGQlJTeEhRVUZGTEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1NVRkJTU3hIUVVGRkxFZEJRVVVzUjBGQlJTeERRVUZETEVkQlFVVXNTMEZCUnl4UlFVRkpMRXRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJTeExRVUZITEVWQlFVVXNNa0pCUVhsQ0xGRkJRVWtzUzBGQlJ5eEZRVUZGTERKQ1FVRjVRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eEhRVUZGTEV0QlFVY3NSVUZCUlN3MlFrRkJNa0lzVDBGQlN5eExRVUZITEVWQlFVVXNOa0pCUVRKQ0xFVkJRVVVzU1VGQlNTeEhRVUZGTEV0QlFVY3NVVUZCU1N4TFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFZEJRVVVzUzBGQlJ5eERRVUZETEVkQlFVVXNUMEZCU3l4TFFVRkhMRVZCUVVVc1NVRkJTU3hIUVVGRkxFTkJRVU1zUjBGQlJTeExRVUZITEU5QlFVc3NTMEZCUnl4RlFVRkZMRWxCUVVrc1IwRkJSU3hMUVVGSExGRkJRVWtzUzBGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4SFFVRkZMRXRCUVVjc1VVRkJTU3hMUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVVXNTMEZCUnl4RlFVRkZMR0ZCUVZjc1EwRkJReXhIUVVGRkxFOUJRVXNzUzBGQlJ5eEZRVUZGTEdGQlFWY3NSVUZCUlN4SlFVRkpMRWRCUVVVc1EwRkJReXhIUVVGRkxFdEJRVWNzVVVGQlNTeExRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRWRCUVVVc1MwRkJSeXhQUVVGTExFdEJRVWNzUlVGQlJTeEpRVUZKTEVkQlFVVXNTMEZCUnl4UlFVRkpMRXRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUjBGQlJTeExRVUZITEU5QlFVc3NTMEZCUnl4RlFVRkZMRWxCUVVrN1FVRkJSU3haUVVGRkxHbENRVUZsTzBGQlFVOHNXVUZCUlN4blFrRkJZenRCUVVNeFpDeHRRa0ZCVXl4SFFVRkhMRWRCUVVVN1FVRkJReXhuUWtGQlJTeFBRVUZQTEU5QlFVOHNRMEZCUXl4SFFVRkZMRU5CUVVNN1FVRkJSU3huUWtGQlNTeEpRVUZGTEU5QlFVY3NUVUZCU1N4RlFVRkZMRTFCUVVrc1IwRkJSU3hKUVVGRkxFOUJRVWNzVDBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCU1R0QlFVRkZMR05CUVVVc2JVSkJRV2xDTEVWQlFVVXNSVUZCUlN4blFrRkJaMEk3UVVGQlJTeGpRVUZGTEdWQlFXRXNSVUZCUlN4RlFVRkZMRmxCUVZrN1FVRkJSU3hqUVVGRkxGTkJRVThzUlVGQlJTeEZRVUZGTEUxQlFVMDdRVUZCUlN4alFVRkZMRmxCUVZVc1JVRkJSU3hGUVVGRkxGTkJRVk03UVVGQlJTeGpRVUZGTEdGQlFWY3NSVUZCUlN4RlFVRkZMRlZCUVZVN1FVRkJSU3h0UWtGQlR6dEJRVUZCTEZWQlFVTTdRVUZCUXl4WlFVRkZMRzFDUVVGcFFqdEJRVUZITEZsQlFVVXNZVUZCVnp0QlFVRkZMRmxCUVVVc1lVRkJWenRCUVVGSExGbEJRVVVzV1VGQlZUdEJRVUZITEZsQlFVVXNaVUZCWVR0QlFVRkhMRmxCUVVVc1pVRkJZVHRCUVVGRkxGbEJRVVVzWlVGQllUdEJRVUZITEZsQlFVVXNhMEpCUVdkQ08wRkJRVWNzV1VGQlJTeGhRVUZYTzBGQlFVY3NXVUZCUlN4VlFVRlJPMEZCUVVVc1kwRkJTVHRCUVVGSExHTkJRVVVzVTBGQlV5eExRVUZKTzBGQlFVTXNhMEpCUVVrc1IwRkJSenRCUVVGRkxHMUNRVUZMTEVsQlFVVTdRVUZCUVN4VlFVRkhPMEZCUXk5aUxHMUNRVUZUTEV0QlFVazdRVUZCUXl4eFFrRkJVeXhKUVVGSE8wRkJRVU1zYTBKQlFVY3NRMEZCUXl4UFFVRkxMRXRCUVVjc1RVRkJSeXhGUVVGRkxGbEJRVlVzVFVGQlJ5eERRVUZETEVsQlFVYzdRVUZCUXl4eFFrRkJSeXhIUVVGSExFVkJRVVU3UVVGQlJTeHRRa0ZCUnl4RFFVRkRPMEZCUVVVc2IwSkJRVWNzUlVGQlJUdEJRVUZ4UWl4dlFrRkJSU3h4UWtGQmNVSTdRVUZCUlN4dlFrRkJSeXhEUVVGRExFZEJRVVU3UVVGQlF5eHpRa0ZCUnl4RlFVRkZPMEZCUVZFc2VVSkJRVWtzWTBGQldTeFBRVUZQTEVWQlFVVXNXVUZCVlN4RlFVRkZMRlZCUVZFc1EwRkJReXhGUVVGRkxFOUJRVThzU1VGQlJ5eEZRVUZGTEZGQlFWRXNWVUZCVVR0QlFVRkRMREJDUVVGSkxFbEJRVVVzUlVGQlJTeFJRVUZSTEUxQlFVMDdRVUZCUlN4NVFrRkJSeXhSUVVGUkxFTkJRVU03UVVGQlFTeHZRa0ZCUXp0QlFVRkRMSEZDUVVGSExFVkJRVVU3UVVGQlFTeG5Ra0ZCUXp0QlFVRkJMR05CUVVNN1FVRkJRU3haUVVGRE8wRkJRVU1zWjBKQlFVY3NSVUZCUlN4SlFVRkZPMEZCUVVjc2EwSkJRVWM3UVVGQlJTeHRRa0ZCUnl4RFFVRkRMRWRCUVVVc1MwRkJSeXhIUVVGSExFVkJRVVVzUjBGQlJTeFpRVUZaTEVOQlFVTTdRVUZCUVN4dFFrRkJUVHRCUVVGRExHOUNRVUZITEVWQlFVVTdRVUZCVHl4MVFrRkJTU3hqUVVGWkxFOUJRVThzUlVGQlJTeFhRVUZUTEVWQlFVVXNVMEZCVHl4RFFVRkRMRVZCUVVVc1RVRkJUU3hKUVVGSExFVkJRVVVzVDBGQlR6dEJRVUZSTEhWQ1FVRkhMRkZCUVZFc1JVRkJSU3hQUVVGUExFMUJRVTBzUTBGQlF6dEJRVUZGTEcxQ1FVRkhMRVZCUVVVN1FVRkJSU3h2UWtGQlJTeE5RVUZKTEVWQlFVVXNZVUZCVnl4RlFVRkZMRlZCUVZVc1dVRkJXU3hIUVVGRkxGZEJRVmNzVjBGQlZUdEJRVUZETzBGQlFVRXNiMEpCUVZjc1YwRkJWVHRCUVVGRExIZENRVUZGTEZWQlFWVXNSVUZCUlR0QlFVRkJMRzlDUVVGRE8wRkJRVUVzYjBKQlEzQnBRanRCUVVGQkxHdENRVUZETzBGQlFVVXNiMEpCUVVVN1FVRkJRU3huUWtGQlF5eEhRVUZGTEVOQlFVTXNTMEZCUnl4RlFVRkZPMEZCUVVFc1kwRkJSVHRCUVVGQkxGVkJRVU03UVVGQlF5eGpRVUZITEVWQlFVVTdRVUZCVVN4cFFrRkJTU3hqUVVGWkxFOUJRVThzUlVGQlJTeFpRVUZWTEVWQlFVVXNWVUZCVVN4RFFVRkRMRVZCUVVVc1QwRkJUeXhKUVVGSExFbEJRVVVzUlVGQlJTeFJRVUZSTzBGQlFWRXNaMEpCUVVVc1VVRkJVU3hKUVVGSkxFVkJRVVU3UVVGQlJTeGhRVUZITzBGQlIyaEpMR2xDUVVGUExGVkJRVlU3UVVGQlFTeFJRVU51UWp0QlFVRkJMRTFCUjBFc1IwRkJSenRCUVVOSUxGVkJRVWtzVDBGQlR5eFpRVUZaTEZsQlFWa3NUMEZCVHl4WFFVRlhPMEZCUTI1RUxHVkJRVThzVlVGQlZUdEJRVUZCTEdWQlExWXNUMEZCVHl4WFFVRlhMR05CUVdNc1QwRkJUeXhMUVVGTE8wRkJRMjVFTEdWQlFVOHNRMEZCUXl4SFFVRkhMRTFCUVUwc1pVRkJaVHRCUVVGQk8wRkJRVUU3T3p0QlF6ZEdiRU03UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVRzN08wRkRRVUVzVFVGMVEyRXNORUpCY1VOQkxEUkNRWE5EUVN4elFrRk5RU3h0UTBGeFEwRXNjMEpCYjBKQkxEQkNRVTlCTzBGQmVFeGlPMEZCUVVFN1FVRkJRVHRCUVhWRFR5eE5RVUZOTERaQ1FVRTJRaXhEUVVGRExGTkJRVEpDTzBGQlEzQkZMR2RDUVVGUkxFMUJRVTA3UVVGQlFTeFZRVU5hTEV0QlFVczdRVUZEU0N4dFFrRkJUenRCUVVGQkxGVkJRMVFzUzBGQlN6dEJRVU5JTEcxQ1FVRlBPMEZCUVVFc1ZVRkRWQ3hMUVVGTE8wRkJRMGdzYlVKQlFVODdRVUZCUVN4VlFVTlVMRXRCUVVzN1FVRkRTQ3h0UWtGQlR6dEJRVUZCTEZWQlExUXNTMEZCU3p0QlFVTklMRzFDUVVGUE8wRkJRVUVzVlVGRFZDeExRVUZMTzBGQlEwZ3NiVUpCUVU4N1FVRkJRU3hWUVVOVUxFdEJRVXM3UVVGRFNDeHRRa0ZCVHp0QlFVRkJMRlZCUTFRc1MwRkJTenRCUVVOSUxHMUNRVUZQTzBGQlFVRXNWVUZEVkN4TFFVRkxPMEZCUTBnc2JVSkJRVTg3UVVGQlFTeFZRVU5VTEV0QlFVczdRVUZEU0N4dFFrRkJUenRCUVVGQkxGVkJRMVFzUzBGQlN6dEJRVU5JTEcxQ1FVRlBPMEZCUVVFc1ZVRkRWQ3hMUVVGTE8wRkJRMGdzYlVKQlFVODdRVUZCUVN4VlFVTlVMRXRCUVVzN1FVRkRTQ3h0UWtGQlR6dEJRVUZCTEZWQlJWUTdRVUZEUlN4clFrRkJUU3hKUVVGSkxFMUJRVTBzTUVKQlFUQkNMRWxCUVVrc1JVRkJSVHRCUVVGQkxGRkJRM0JFTzBGQlFVRXNUVUZEUmp0QlFVdFBMRTFCUVUwc05rSkJRVFpDTEVOQlFVTXNZMEZCY1VNN1FVRkRPVVVzWjBKQlFWRXNWMEZCVnp0QlFVRkJMRlZCUTJwQ0xFdEJRVXM3UVVGRFNDeHRRa0ZCVHp0QlFVRkJMRlZCUTFRc1MwRkJTenRCUVVOSUxHMUNRVUZQTzBGQlFVRXNWVUZEVkN4TFFVRkxPMEZCUTBnc2JVSkJRVTg3UVVGQlFTeFZRVU5VTEV0QlFVczdRVUZEU0N4dFFrRkJUenRCUVVGQkxGVkJRMVFzUzBGQlN6dEJRVU5JTEcxQ1FVRlBPMEZCUVVFc1ZVRkRWQ3hMUVVGTE8wRkJRMGdzYlVKQlFVODdRVUZCUVN4VlFVTlVMRXRCUVVzN1FVRkRTQ3h0UWtGQlR6dEJRVUZCTEZWQlExUXNTMEZCU3p0QlFVTklMRzFDUVVGUE8wRkJRVUVzVlVGRFZDeExRVUZMTzBGQlEwZ3NiVUpCUVU4N1FVRkJRU3hWUVVOVUxFdEJRVXM3UVVGRFNDeHRRa0ZCVHp0QlFVRkJMRlZCUTFRc1MwRkJTenRCUVVOSUxHMUNRVUZQTzBGQlFVRXNWVUZEVkN4TFFVRkxPMEZCUTBnc2JVSkJRVTg3UVVGQlFTeFZRVU5VTEV0QlFVczdRVUZEU0N4dFFrRkJUenRCUVVGQkxGVkJSVlE3UVVGRFJTeHJRa0ZCVFN4SlFVRkpMRTFCUVUwc01FSkJRVEJDTEZOQlFWTXNSVUZCUlR0QlFVRkJMRkZCUTNwRU8wRkJRVUVzVFVGRFJqdEJRVTFQTEUxQlFVMHNkVUpCUVhWQ0xFTkJRVU1zWVVGRGNFSXNRMEZCUXl4UlFVRlhMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NVVUZCVnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzVVVGQlZ5eFJRVUZYTEUxQlFWTXNSVUZCUlN4UlFVRlJPMEZCU3psSExFMUJRVTBzYjBOQlFXOURMRU5CUVVNc1UwRkZiMFE3UVVGRGFFY3NaMEpCUVZFc1RVRkJUVHRCUVVGQkxGVkJRMW9zUzBGQlN6dEJRVVZJTEcxQ1FVRlBMRTlCUVU4c2FVSkJRV2xDTEdWQlFXVXNZVUZCWVN4UFFVRlBMR1ZCUVdVN1FVRkJRU3hWUVVOdVJpeExRVUZMTzBGQlEwZ3NiVUpCUVU4N1FVRkJRU3hWUVVOVUxFdEJRVXM3UVVGRFNDeHRRa0ZCVHp0QlFVRkJMRlZCUTFRc1MwRkJTenRCUVVOSUxHMUNRVUZQTzBGQlFVRXNWVUZEVkN4TFFVRkxPMEZCUTBnc2JVSkJRVTg3UVVGQlFTeFZRVU5VTEV0QlFVczdRVUZEU0N4dFFrRkJUenRCUVVGQkxGVkJRMVFzUzBGQlN6dEJRVU5JTEcxQ1FVRlBPMEZCUVVFc1ZVRkRWQ3hMUVVGTE8wRkJRMGdzYlVKQlFVODdRVUZCUVN4VlFVTlVMRXRCUVVzN1FVRkRTQ3h0UWtGQlR6dEJRVUZCTEZWQlExUXNTMEZCU3p0QlFVTklMRzFDUVVGUE8wRkJRVUVzVlVGRFZDeExRVUZMTzBGQlEwZ3NiVUpCUVU4N1FVRkJRU3hWUVVOVUxFdEJRVXM3UVVGRFNDeHRRa0ZCVHp0QlFVRkJMRlZCUTFRN1FVRkRSU3hyUWtGQlRTeEpRVUZKTEUxQlFVMHNjVUpCUVhGQ0xFbEJRVWtzUlVGQlJUdEJRVUZCTEZGQlF5OURPMEZCUVVFc1RVRkRSanRCUVV0SExFMUJRVTBzZFVKQlFYVkNMRU5CUVVNc1lVRkJhMFU3UVVGRGNrY3NaMEpCUVZFc1ZVRkJWVHRCUVVGQkxGVkJRMmhDTEV0QlFVczdRVUZEU0N4dFFrRkJUenRCUVVGQkxGVkJRMVFzUzBGQlN6dEJRVU5JTEcxQ1FVRlBPMEZCUVVFc1ZVRkRWQ3hMUVVGTE8wRkJRMGdzYlVKQlFVODdRVUZCUVN4VlFVTlVMRXRCUVVzN1FVRkRTQ3h0UWtGQlR6dEJRVUZCTEZWQlExUXNTMEZCU3p0QlFVTklMRzFDUVVGUE8wRkJRVUVzVlVGRFZEdEJRVU5GTEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3c0UWtGQk9FSXNVVUZCVVN4RlFVRkZPMEZCUVVFc1VVRkROVVE3UVVGQlFTeE5RVU5HTzBGQlMwOHNUVUZCVFN3eVFrRkJNa0lzUTBGQlF5eFRRVUY1UkN4VFFVRlRMR0ZCUTNaSExGTkJRVk1zWVVGQllTeFRRVUZUTEZkQlFWY3NVMEZCVXl4WFFVRlhMRk5CUVZNc1dVRkJXU3hUUVVGVExGZEJRelZHTEZOQlFWTTdRVUZMVGl4TlFVRk5MREpDUVVFeVFpeERRVUZETEdGQlFUQkRPMEZCUTJwR0xHZENRVUZSTEZWQlFWVTdRVUZCUVN4VlFVTm9RaXhMUVVGTE8wRkJRMGdzYlVKQlFVODdRVUZCUVN4VlFVTlVMRXRCUVVzN1FVRkRTQ3h0UWtGQlR6dEJRVUZCTEZWQlExUXNTMEZCU3p0QlFVTklMRzFDUVVGUE8wRkJRVUVzVlVGRFZDeExRVUZMTzBGQlEwZ3NiVUpCUVU4N1FVRkJRU3hWUVVOVUxFdEJRVXM3UVVGRFNDeHRRa0ZCVHp0QlFVRkJMRlZCUTFRN1FVRkRSU3hyUWtGQlRTeEpRVUZKTEUxQlFVMHNPRUpCUVRoQ0xGRkJRVkVzUlVGQlJUdEJRVUZCTEZGQlF6VkVPMEZCUVVFc1RVRkRSanRCUVVGQk8wRkJRVUU3T3p0QlEzWk5RVHM3T3pzN096dEJRMEZCT3pzN1FVRnZSa0U3T3pzN08wRkRjRVpCTEUxQlRXRTdRVUZPWWpzN08wRkJUVThzVFVGQlRTeFZRVUZWT3pzN096dEJRMDUyUWl4TlFWRkpMR1ZCUlZNN1FVRldZanM3TzBGQlNVRTdRVUZKUVN4TlFVRkpMR2RDUVVGM1F6dEJRVVZ5UXl4TlFVRk5MRTFCUVZjN1VVRkRkRUlzVFVGQlRTeERRVUZCTzFGQlEwNHNUMEZCVHl4RFFVRkJPMUZCUTFBc1VVRkJVU3hEUVVGQk8xRkJRMUlzVlVGQlZTeEZRVUZETEZGQlFWRXNVVUZCVHp0UlFVVXhRaXhKUVVGSkxGTkJRVk1zVDBGQmJVSTdRVUZET1VJc1kwRkJTU3hWUVVGVkxGRkJRVmM3UVVGRGRrSTdPMEZCUlVZc1kwRkJTU3hQUVVGUExGVkJRVlVzV1VGQldTeERRVUZETEZkQlFWY3NVVUZCVVN4WFFVRlhMRk5CUVZNc1QwRkJUeXhGUVVGRkxGRkJRVkVzUzBGQlN5eE5RVUZOTEVsQlFVazdRVUZEZGtjc2EwSkJRVTBzU1VGQlNTeE5RVUZOTERoQ1FVRTRRaXhMUVVGTExFVkJRVVU3TzBGQlJYWkVMREJDUVVGblFqdFJRVU5zUWp0UlFVTkJMRWxCUVVrc1YwRkJVVHRCUVVOV0xHbENRVUZQTzFGQlExUTdPMEZCU1VZc1lVRkJUeXhsUVVGbExFdEJRVXNzV1VGQldTeEZRVUZETEZsQlFWa3NTMEZCU1N4RFFVRkRPenM3T3p0QlF5OUNla1FzVFVGblVXRkRPMEZCYUZGaU96czdRVUZIUVR0QlFUWlFUeXhOUVVGTlFTeFBRVUZYT3pzN096dEJRMmhSZUVJN096czdPenM3UVVOQlFUczdPMEZCU1VFN096czdPMEZEU2tFN096czdPenM3UVVOQlFUczdPMEZCU1VFN096czdPMEZEU2tFN096dEJRVWRCTzBGQlJVRTdRVUZGUVR0QlFVTkJPenM3T3p0QlExSkJPenM3UVVGSlFUczdPenM3UVVOS1FTeE5RVkZoTEU5QlVWQXNXVUZ4UWs4c2EwSkJWVUU3UVVFdlEySTdPenRCUVVkQk8wRkJTMDhzVFVGQlRTeFJRVUZSTEVOQlFVTXNXVUZCYjBJc1ZVRkJhVUk3UVVGRGVrUXNXVUZCU1N4UFFVRlBMRWxCUVVrc1ZVRkJWU3hqUVVGakxFTkJRVU1zU1VGQlNTeExRVUZMTEZGQlFWRXNRMEZCUXl4SlFVRkpMRTlCUVU4N1FVRkRia1U3TzBGQlIwWXNaMEpCUVZFc1ZVRkJWU3hIUVVGSExGVkJRVlVzVlVGQlZTeExRVUZMTEVWQlFVVTdUVUZEYkVRN1FVRkZRU3hOUVVGTkxHRkJRV0VzUTBGQlF5eExRVUZoTEdGQlFYRkNPMEZCUTNCRUxHTkJRVTBzVVVGQlVTeEpRVUZKTEUxQlFVc3NSVUZCUnl4UFFVRlBMRTFCUVUwc1lVRkJZU3hMUVVGTExFTkJRVUU3UVVGRGVrUXNXVUZCU1N4bFFVRmxPMEZCUTI1Q0xHbENRVUZUTEVsQlFVa3NSMEZCUnl4SlFVRkpMRTFCUVUwc1VVRkJVU3hMUVVGTE8wRkJRM0pETEdOQlFVa3NaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNVMEZCVXl4WlFVRlpMRWRCUVVjN1FVRkRjRVFzWjBKQlFVa3NVVUZCVVN4UlFVRlJMRWRCUVVjc1MwRkJTeXhOUVVGTkxFTkJRVU1zUlVGQlJTeExRVUZKTEVWQlFVY3NUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRM3BFTEdkQ1FVRkpMRlZCUVZVN1FVRkRXaXgxUWtGQlV5eExRVUZMTEZGQlFWRTdPMEZCUlhoQ0xHdENRVUZOTEU5QlFVOHNTMEZCU3p0QlFVTnNRanM3UVVGRlJpeGpRVUZKTEUxQlFVMHNRMEZCUXl4RlFVRkZMRk5CUVZNc1dVRkJXU3hIUVVGSE8wRkJRMjVETERKQ1FVRmxPenM3VFVGSGNrSTdRVUZMVHl4TlFVRk5MRzFDUVVGdFFpeERRVUZETEdGQlFYRkNPMEZCUTNCRUxGbEJRVWtzVDBGQlR5eEpRVUZKTEZWQlFWVXNZMEZCWXl4RFFVRkRMRWxCUVVrc1MwRkJTeXhSUVVGUkxFTkJRVU1zU1VGQlNTeFBRVUZQTzBGQlEyNUZPenRCUVVWR0xHMUNRVUZYTEZOQlFWTXNVVUZCVVR0TlFVTTVRanRCUVV0UExFMUJRVTBzYVVKQlFXbENMRU5CUVVNc1lVRkJjVUk3UVVGRGJFUXNXVUZCU1N4UFFVRlBMRWxCUVVrc1ZVRkJWU3hqUVVGakxFTkJRVU1zU1VGQlNTeExRVUZMTEZGQlFWRXNRMEZCUXl4SlFVRkpMRTlCUVU4N1FVRkRia1U3TzBGQlJVWXNiVUpCUVZjc1QwRkJUeXhSUVVGUk8wMUJRelZDT3pzN096dEJRM0JFUVRzN08wRkJSMEU3UVVGSlFUdEJRVU5CT3pzN096dEJRMUpCT3pzN1FVRkhRVHM3T3pzN1FVTklRVHM3T3pzN096dEJRMEZCT3pzN096czdPMEZEUVVFN096czdPenM3UVVOQlFUczdPenM3T3p0QlEwRkJPenM3UVVGSFFUdEJRVWxCT3pzN096dEJRMUJCT3pzN1FVRkxRVHM3T3pzN1FVTk1RVHM3TzBGQmJVSkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3T3p0QlF6VkNRU3hOUVZsTkxHZENRVVZCTEU5QlMwWXNaMEpCUTBFc1QwRkZVeXhwUWtGUlFTeExRVmRCTzBGQmVrTmlPMEZCUVVFN1FVRkJRVHRCUVV0Qk8wRkJUMEVzVFVGQlRTeHBRa0ZCYVVJc1EwRkJReXhMUVVGTExFdEJRVXNzUzBGQlN5eExRVUZMTEVkQlFVYzdRVUZGTDBNc1RVRkJUU3hSUVVGUkxFTkJRVU1zVDBGQlpTeFpRVUV3UWp0QlFVVjBSQ3huUWtGQlVTeEpRVUZKTEVsQlFVa3NaVUZCWlN4TFFVRkxMRU5CUVVNc1MwRkJTU3h2UWtGQlNTeExRVUZMTEVkQlFVVXNXVUZCV1N4RFFVRkRMRWxCUVVrc1QwRkJUeXhGUVVGRk8wRkJRVUVzVFVGRGFFWTdRVUZMVHl4TlFVRk5MR3RDUVVGclFpeERRVUZETEdsQ1FVRXlRaXhYUVVFd1FqdEJRVU51Uml4NVFrRkJhVUk3UVVGRGFrSXNaMEpCUVZFN1FVRkJRU3hOUVVOV08wRkJTMDhzVFVGQlRTeE5RVUZOTEVOQlFVTXNWVUZCYjBJc1VVRkJkVUk3UVVGRE4wUXNZMEZCVFN4bFFVRmxMSEZDUVVGeFFpeFJRVUZSTzBGQlEyeEVMR05CUVUwc1kwRkJZeXh4UWtGQmNVSXNZMEZCWXp0QlFVTjJSQ3haUVVGSkxHZENRVUZuUWl4aFFVRmhPMEZCUXk5Q0xHZENRVUZOTEdOQlFXTXNUMEZCVHl4UlFVRlJMR0ZCUVdFc1NVRkJTU3hKUVVGSkxFZEJRVWM3UVVGQlFTeFJRVU0zUkR0QlFVRkJMRTFCUTBZN1FVRkxUeXhOUVVGTkxGbEJRWGRDTEVsQlFVa3NVMEZCYVVNN1FVRkRlRVVzV1VGQlNTeFBRVUZQTzBGQlExUXNZMEZCU1N4SFFVRkhMRWxCUVVrN1FVRkJRU3hSUVVOaU8wRkJRVUVzVFVGRFJqdEJRVUZCTzBGQlFVRTdPenRCUXpkRFFTeE5RVTloTzBGQlVHSTdRVUZCUVR0QlFVRkJPMEZCUzBFN1FVRkZUeXhOUVVGTkxHRkJRV0VzUTBGQlF5eFpRVUY1UWl4VFFVVTFReXhMUVVGTExHdERRVUZyUXl4SlFVRkpMRWRCUVVjc1ZVRkJWVHRCUVVGQk8wRkJRVUU3T3p0QlExUm9SVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCT3pzN1FVTkJRU3hOUVRoRlRTeG5Ra0VyUWtFc1YwRkxRU3d3UWtGTFFTeHpRa0ZYUml4TlFVTkZMRzlDUVZsUExHbENRV3REVUN4dlFrRnZVMDg3UVVGeVpHSTdRVUZCUVR0QlFVRkJPMEZCU1VFN1FVRkZRVHRCUVhkRlFTeE5RVUZOTEdsQ1FVRnpReXh2UWtGQlNTeEpRVUZKTzBGQlFVRXNVVUZEYkVRc1EwRkJReXhKUVVGSkxFZEJRVWM3UVVGQlFTeFJRVU5TTEVOQlFVTXNTMEZCU3l4SFFVRkhPMEZCUVVFc1VVRkRWQ3hEUVVGRExFdEJRVXNzUjBGQlJ6dEJRVUZCTEZGQlExUXNRMEZCUXl4TFFVRkxMRWRCUVVjN1FVRkJRU3hSUVVOVUxFTkJRVU1zVFVGQlRTeEhRVUZITzBGQlFVRXNVVUZEVml4RFFVRkRMRTFCUVUwc1IwRkJSenRCUVVGQkxGRkJRMVlzUTBGQlF5eE5RVUZOTEVWQlFVVTdRVUZCUVN4UlFVTlVMRU5CUVVNc1QwRkJUeXhGUVVGRk8wRkJRVUVzVVVGRFZpeERRVUZETEU5QlFVOHNSVUZCUlR0QlFVRkJMRkZCUTFZc1EwRkJReXhQUVVGUExFVkJRVVU3UVVGQlFTeFJRVU5XTEVOQlFVTXNVVUZCVVN4RlFVRkZPMEZCUVVFc1VVRkRXQ3hEUVVGRExGRkJRVkVzUlVGQlJUdEJRVUZCTEZGQlExZ3NRMEZCUXl4UlFVRlJMRVZCUVVVN1FVRkJRU3hSUVVOWUxFTkJRVU1zVTBGQlV5eEZRVUZGTzBGQlFVRXNVVUZEV2l4RFFVRkRMRk5CUVZNc1JVRkJSVHRCUVVGQkxGRkJRMW9zUTBGQlF5eFRRVUZUTEVWQlFVVTdRVUZCUVN4UlFVTmFMRU5CUVVNc1UwRkJVeXhGUVVGRk8wRkJRVUVzVVVGRFdpeERRVUZETEZWQlFWVXNSVUZCUlR0QlFVRkJMRkZCUTJJc1EwRkJReXhWUVVGVkxFVkJRVVU3UVVGQlFTeFJRVU5pTEVOQlFVTXNWVUZCVlN4RlFVRkZPMEZCUVVFc1VVRkRZaXhEUVVGRExGVkJRVlVzUlVGQlJUdEJRVUZCTEZGQlEySXNRMEZCUXl4VlFVRlZMRU5CUVVNN1FVRkJRU3hSUVVOYUxFTkJRVU1zVlVGQlZTeERRVUZETzBGQlFVRTdRVUZCUVR0QlFVRkJMRkZCUjFvc1EwRkJReXhWUVVGVkxFTkJRVU03UVVGQlFTeFJRVU5hTEVOQlFVTXNWMEZCVnl4RFFVRkRPMEZCUVVFc1VVRkRZaXhEUVVGRExGZEJRVmNzUTBGQlF6dEJRVUZCTEUxQlEyWXNRMEZCUXp0QlFVVkVMRTFCUVUwc1dVRkJjMElzUTBGQlF6dEJRVXMzUWl4TlFVRk5MREpDUVVFeVFpeERRVUZETEZOQlFXbENMRXRCUVVzc1MwRkJTeXhQUVVGUExFVkJRVVVzU1VGQlNUdEJRVXN4UlN4TlFVRk5MSFZDUVVGMVFpeERRVUZETEZOQlFXbENPMEZCUXpkRExHbENRVUZUTEUxQlFVMHNSMEZCUnl4TlFVRk5MRlZCUVZVc1VVRkJVU3hQUVVGUE8wRkJReTlETEdkQ1FVRk5MR2RDUVVGblFpeFZRVUZWTEVkQlFVYzdRVUZEYmtNc1kwRkJTU3hSUVVGUkxHVkJRV1U3UVVGRGVrSXNiVUpCUVU4N1FVRkJRU3hWUVVOVU8wRkJRVUVzVVVGRFJqdEJRVVZCTEdWQlFVOHNTMEZCU3l4TFFVRkxMRTlCUVU4c1JVRkJSU3hKUVVGSk8wRkJRVUVzVFVGRGFFTTdRVUZGUVN4TlFVRkpMRTlCUVU4N1FVRkRXQ3hOUVVGTkxIRkNRVUZ4UWl4TlFVRk5PMEZCV1RGQ0xFMUJRVTBzYTBKQlExUXNUMEZCVFN4VFFVRjNRaXhYUVVGelFpeGpRVUZ6UWl4dlFrRkRMME03UVVGRGNrSXNZMEZCVFN4aFFVRmhMSGxDUVVGNVFpeFpRVUZaTzBGQlEzaEVMR05CUVUwc1owSkJRV2RDTEZGQlFWRXNUMEZCVHp0QlFVRkJPMEZCUVVFc1ZVRkZha01zUlVGQlF5eE5RVUZOTEZsQlFWa3NUMEZCVHl4bFFVRmxMRmRCUVZjc1pVRkJaU3hUUVVGUk8wRkJRVUVzVVVGQlF6dEJRVU5vUml4WlFVRkpPMEZCUTBZc1owSkJRVTBzYVVKQlFXbENMRkZCUVZFc2EwSkJRV3RDTzBGQlEycEVMR3RDUVVGUkxHVkJRV1U3UVVGRGRrSXNlVUpCUVdVN1FVRkJRU3haUVVOWU8wRkJRVUVzV1VGQkswSTdRVUZCUVN4WlFVRjFRanRCUVVGQkxGbEJRM1JFTzBGQlFVRXNXVUZCTkVJN1FVRkJRVHRCUVVGQkxGVkJRMmhETzBGQlEwRXNhMEpCUVZFc1RVRkJUVHRCUVVWa0xHZENRVUZOTEdOQlFXTXNVMEZCVXl4WFFVRlhMRWxCUVVrN1FVRkZOVU1zWjBKQlFVMHNZMEZCWXl4alFVRmpMR1ZCUVdVN1FVRkRha1FzWTBGQlNTeHBRa0ZCYVVJN1FVRkZia0lzYTBKQlFVMHNaVUZCWlN4blFrRkJaMEk3UVVGRGNrTXNlVUpCUVdFc1NVRkJTU3hKUVVGSkxGZEJRVmNzWVVGQllTeEhRVUZITEZsQlFWa3NRMEZCUXp0QlFVTTNSQ3h0UWtGQlR6dEJRVUZCTEZWQlExUXNUMEZCVHp0QlFVZE1MRzFDUVVGUExFbEJRVWtzVjBGQlZ5eFpRVUZaTEUxQlFVMHNSMEZCUnl4WlFVRlpMRU5CUVVNN1FVRkJRU3hWUVVNeFJEdEJRVUZCTEZGQlEwWXNWVUZCUlR0QlFVTkJMSGRDUVVGakxGRkJRVkU3UVVGQlFTeFJRVU40UWp0QlFVRkJMRTFCUTBZN1FVRkZVaXhOUVVGTkxIRkNRVUZPTEUxQlFXMUVPMEZCUVVFc1VVRnhRbXBFTEZsQlFXOUNMRk5CUVhkQ08wRkJRWGhDTzBGQlEyeENMR1ZCUVVzc1pVRkJaU3h2UWtGQlNTeEpRVUZKTzBGQlF6VkNMR1ZCUVVzc1kwRkJZeXh2UWtGQlNTeEpRVUZKTzBGQlF6TkNMR1ZCUVVzc2NVSkJRWEZDTEc5Q1FVRkpMRWxCUVVrN1FVRkRiRU1zWlVGQlN5dzJRa0ZCTmtJc1EwRkJRenRCUVVOdVF5eGxRVUZMTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1pDTEdWQlFVc3NhMEpCUVd0Q0xHOUNRVUZKTEVsQlFVazdRVUZETDBJc1pVRkJTeXg1UWtGQmVVSXNiMEpCUVVrc1NVRkJTVHRCUVVWMFF5eHhRa0ZCVnl4RFFVRkRMRWRCUVVzc1MwRkJTeXhuUWtGQlowSTdRVUZEY0VNc2MwSkJRVlVzUzBGQlN5eEhRVUZITzBGQlEyeENMR2xDUVVGTExGbEJRVmtzU1VGQlNTeExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTTFRaXhwUWtGQlN5eHRRa0ZCYlVJc1NVRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF6dEJRVUZCTEZWQlEzSkRPMEZCUVVFc1VVRkRSanRCUVVGQkxGRkJSVUVzVDBGQlR5eEpRVUZsTEUxQlFYZENPMEZCUXpWRExHZENRVUZOTEdsQ1FVRnBRaXhMUVVGTE8wRkJRelZDTEdkQ1FVRk5MRmxCUVZrc1MwRkJTenRCUVVOMlFpeG5Ra0ZCVFN4WlFVRlpMRXRCUVVzN1FVRkRka0lzWjBKQlFVMHNUMEZCVHl4NVFrRkJlVUlzVTBGQlV6dEJRVWN2UXl4blFrRkJUU3hsUVVGbExFdEJRVXNzWVVGQllTeEpRVUZKTEVWQlFVVTdRVUZETjBNc1kwRkJTU3hEUVVGRExHTkJRV003UVVGRGFrSXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxIVkRRVUYxUXp0QlFVRkJMRlZCUTNwRU8wRkJRMEVzWTBGQlNTeGhRVUZoTEdsQ1FVRnBRaXhYUVVGWE8wRkJRek5ETEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3g1UTBGQmVVTXNZVUZCWVN4WlFVRlpMR1ZCUVdVc1UwRkJVeXhGUVVGRk8wRkJRVUVzVlVGRE9VYzdRVUZIUVN4blFrRkJUU3gzUWtGQmQwSXNTMEZCU3l4UlFVRlJMRTlCUVU4N1FVRkJRVHRCUVVGQkxGbEJSVGxETEVWQlFVTXNhMEpCUVd0Q0xFMUJRVTBzVFVGQlRTeFBRVUZQTEdWQlFXVXNXVUZCV1N4bFFVRmxMRk5CUVZFN1FVRkJRU3hWUVVGRE8wRkJSemRHTEdkQ1FVRk5MR05CUVdNc2MwSkJRWE5DTEdWQlFXVTdRVUZEZWtRc1kwRkJTU3hYUVVGWExGZEJRVmNzUlVGQlJTeEpRVUZKTEVsQlFVa3NWMEZCVnl4blFrRkJaMElzVjBGQlZ5eFRRVUZUTEVOQlFVTTdRVUZEY0VZc1owTkJRWE5DTEUxQlFVMDdRVUZKTlVJc1owSkJRVTBzYVVKQlFXbENMRXRCUVVzc1VVRkJVU3hyUWtGQmEwSTdRVUZEZEVRc1pVRkJTeXhSUVVGUkxHVkJRV1U3UVVGRE5VSXNlVUpCUVdVc2JVSkJRVzFDTEhWQ1FVRjFRaXhIUVVGSExHRkJRV0VzVVVGQlVTeFJRVUZSTEVkQlFVY3NTVUZCU1R0QlFVVm9SeXh2UWtGQlZTeFhRVUZYTEUxQlFVMHNjVU5CUVhGRExFVkJRVVVzUjBGQlJ6dEJRVVZ5UlN4bFFVRkxMREpDUVVFeVFpeExRVUZMTEhGQ1FVRnhRanRCUVVGQkxGRkJRelZFTzBGQlFVRXNVVUZGUVN4UFFVRlBMRlZCUVhGQ0xHVkJRV2RETzBGQlJURkVMR2RDUVVGTkxIRkNRVUZ4UWl4TFFVRkxMR0ZCUVdFc1NVRkJTU3hSUVVGUk8wRkJRM3BFTEdOQlFVa3NRMEZCUXl4dlFrRkJiMEk3UVVGRGRrSXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxESkRRVUV5UXp0QlFVRkJMRlZCUXpkRU8wRkJSVUVzWjBKQlFVMHNNRUpCUVRCQ0xFdEJRVXNzWVVGQllTeEpRVUZKTEdGQlFXRTdRVUZEYmtVc1kwRkJTU3hEUVVGRExIbENRVUY1UWp0QlFVTTFRaXhyUWtGQlRTeEpRVUZKTEUxQlFVMHNaMFJCUVdkRU8wRkJRVUVzVlVGRGJFVTdRVUZEUVN4alFVRkpMRzFDUVVGdFFpeHBRa0ZCYVVJc2QwSkJRWGRDTEdOQlFXTTdRVUZETlVVc2EwSkJRVTBzU1VGQlNTeE5RVUZOTEcxRVFVRnRSRHRCUVVGQkxGVkJRM0pGTzBGQlJVRXNaMEpCUVUwc1QwRkJUeXg1UWtGQmVVSXNiVUpCUVcxQ0xGbEJRVms3UVVGSGNrVXNaMEpCUVUwc2FVSkJRV2xDTEV0QlFVc3NVVUZCVVN4clFrRkJhMEk3UVVGRGRFUXNaVUZCU3l4UlFVRlJMR1ZCUVdVN1FVRkROVUlzZVVKQlFXVTdRVUZCUVN4WlFVTllMRzFDUVVGdFFpeFJRVUZSTzBGQlFVRXNXVUZCVVR0QlFVRkJMRmxCUVVjc2QwSkJRWGRDTEZGQlFWRTdRVUZCUVN4WlFVRlJPMEZCUVVFc1dVRkJSenRCUVVGQkxGVkJRVWs3UVVGQlFTeFJRVU16Ump0QlFVRkJMRkZCUlVFc2RVSkJRWFZDTEZGQlFXMUNMR05CUVhOQ0xHZENRVUZ2UXp0QlFVTnNSeXhqUVVGSk8wRkJRMG9zWTBGQlNTeG5Ra0ZCWjBJN1FVRkRiRUlzYVVKQlFVc3NTMEZCU3l4blFrRkJaMElzU1VGQlNTeGpRVUZqTzBGQlF6VkRMR2RDUVVGSkxFOUJRVThzVVVGQlZ6dEJRVU53UWl4dlFrRkJUU3hKUVVGSkxFMUJRVTBzYlVOQlFXMURPMEZCUVVFc1dVRkRja1E3UVVGRFFTeG5Ra0ZCU1N4WFFVRlhMR2RDUVVGblFqdEJRVU0zUWp0QlFVRkJMR2RDUVVOSk8wRkJRVUVzWjBKQlEwRXNUVUZCVFN4MVJFRkJkVVFzV1VGQldTeFhRVU55UlN4RlFVRkZPMEZCUVVFc1kwRkJOa0k3UVVGRGRrTXNjVUpCUVU4N1FVRkJRU3haUVVOVUxGZEJRVmNzUzBGQlN5eFJRVUZSTEc5Q1FVRnZRaXhKUVVGSkxFdEJRVXNzVVVGQlVTeG5Ra0ZCYVVJc1IwRkJSenRCUVVNdlJTeHZRa0ZCVFN4SlFVRkpMRTFCUVUwN1FVRkJRU3h6UkVGRE9FSTdRVUZCUVN4WlFVTm9SRHRCUVVOQkxHbENRVUZMTEdkQ1FVRm5RaXhQUVVGUExHTkJRV003UVVGQlFTeFZRVU0xUXl4UFFVRlBPMEZCUTB3c2FVSkJRVXNzYlVKQlFXMUNPMEZCUVVFc1ZVRkRNVUk3UVVGRlFTeGxRVUZMTEdGQlFXRXNTVUZCU1N4SlFVRkpMRVZCUVVNc1UwRkJVeXhGUVVGRExFbEJRVWtzZFVKQlFUSkNMRTlCUVUwc1IwRkJSeXhoUVVGWkxFTkJRVU03UVVGRE1VWXNaVUZCU3l4blFrRkJaMElzU1VGQlNTeFJRVUZSTEVWQlFVVTdRVUZEYmtNN1FVRkJRU3haUVVOSk8wRkJRVUVzV1VGRFFTeE5RVUZOTEhWRVFVRjFSQ3haUVVGWkxGZEJRVmNzUlVGQlJUdEJRVUZCTEZWQlFXVTdRVUZEZWtjc2FVSkJRVTg3UVVGQlFTeFJRVU5VTzBGQlFVRXNVVUZGUVN4NVFrRkJlVUlzVVVGQmVVSTdRVUZEYUVRc1owSkJRVTBzUzBGQlN5eExRVUZMTEdkQ1FVRm5RaXhKUVVGSkxFMUJRVTA3UVVGRE1VTXNZMEZCU1N4UFFVRlBMRkZCUVZjN1FVRkRjRUlzYVVKQlFVc3NZVUZCWVN4UFFVRlBMRVZCUVVVN1FVRkRNMElzYVVKQlFVc3NaMEpCUVdkQ0xFOUJRVThzVFVGQlRUdEJRVU5zUXl4elFrRkJWU3hYUVVGWExFMUJRVTBzTkVSQlFUUkVMRVZCUVVVc1JVRkJSVHRCUVVGQkxGVkJRemRHTzBGQlFVRXNVVUZEUmp0QlFVRkJPMEZCUVVFc1VVRkhRU3hQUVVGUExFMUJRV01zVVVGQlVTeGxRVUZsTEZWQlFWVXNaVUZCWlN4WFFVRlhMR1ZCUVdVc1ZVRkJiVUk3UVVGRGFFZ3NaMEpCUVUwc1lVRkJZU3h4UWtGQmNVSXNTVUZCU1R0QlFVVTFReXhqUVVGSk8wRkJSMG9zWjBKQlFVMHNZVUZCWVN4UlFVRlJMR1ZCUVdVc1lVRkJZU3hsUVVGbE8wRkJSWFJGTEdkQ1FVRk5MR0ZCUVdFc1VVRkJVU3hsUVVGbExHRkJRV0VzWlVGQlpUdEJRVU4wUlN4alFVRkpMR0ZCUVdFc1YwRkJWenRCUVVNeFFpeHJRa0ZCVFN4alFVRmpMRmxCUVZrc1MwRkJTeXhqUVVGakxFdEJRVXM3UVVGRGVFUXNhMEpCUVUwc1ZVRkJWU3haUVVGWkxFbEJRVWtzVlVGQlZUdEJRVU14UXl4blFrRkJTU3hEUVVGRExGTkJRVk03UVVGRldpd3dRa0ZCV1N4TFFVRkxMRkZCUVZFc1QwRkJUeXhoUVVGaExFVkJRVU1zVFVGQlRTeFpRVUZaTEUxQlFVc3NRMEZCUXp0QlFVRkJMRmxCUTNoRkxFOUJRVTg3UVVGRFRDeHJRa0ZCU1N4UlFVRlJMRk5CUVZNc1IwRkJSenRCUVVWMFFpdzBRa0ZCV1N4UlFVRlJMRWxCUVVrN1FVRkJRU3hqUVVNeFFpeFBRVUZQTzBGQlJVd3NORUpCUVZrc1MwRkJTeXhSUVVGUkxFOUJRVThzWVVGQllTeEZRVUZETEUxQlFVMHNXVUZCV1N4TlFVRkxMRU5CUVVNN1FVRkJRU3hqUVVONFJUdEJRVUZCTEZsQlEwWTdRVUZCUVN4VlFVTkdMRTlCUVU4N1FVRkZUQ3gzUWtGQldTeExRVUZMTEZGQlFWRXNUMEZCVHl4aFFVRmhMRVZCUVVNc1RVRkJUU3haUVVGWkxFMUJRVXNzUTBGQlF6dEJRVUZCTEZWQlEzaEZPMEZCUlVFc1owSkJRVTBzVlVGQlZTeEZRVUZETEVsQlFVa3NiVUpCUVcxQ0xFZEJRVWNzZFVKQlFUSkNMRkZCUVZFc1ZVRkJVenRCUVVOMlJpeGxRVUZMTEdGQlFXRXNTVUZCU1N4UlFVRlJMRWxCUVVrc1JVRkJReXhUUVVGVExHTkJRV01zUzBGQlNTeERRVUZETzBGQlJTOUVMRzlDUVVGVkxGZEJRVmNzVFVGQlRTeDFRMEZCZFVNc1NVRkJTU3hYUVVGWExGRkJRVkVzUlVGQlJTeEZRVUZGTzBGQlF6ZEdMR2xDUVVGUE8wRkJRVUVzVVVGRFZEdEJRVUZCTEZGQlJVRXNTVUZCU1N4SlFVRnJRenRCUVVOd1F5eHBRa0ZCVHl4TFFVRkxMR0ZCUVdFc1NVRkJTU3hGUVVGRkxFZEJRVWM3UVVGQlFTeFJRVU53UXp0QlFVRkJMRkZCUlVFc1VVRkJVU3hKUVVGMVFqdEJRVU0zUWl4blFrRkJUU3hoUVVGaExFdEJRVXNzWVVGQllTeEpRVUZKTEVWQlFVVTdRVUZETTBNc1kwRkJTU3hEUVVGRExGbEJRVms3UVVGRFppeHJRa0ZCVFN4SlFVRkpMRTFCUVUwc0swSkJRU3RDTzBGQlFVRXNWVUZEYWtRN1FVRkZRU3h2UWtGQlZTeFhRVUZYTEUxQlFVMHNjME5CUVhORExFVkJRVVVzWjBKQlFXZENMRmRCUVZjc1VVRkJVU3hGUVVGRkxFVkJRVVU3UVVGRk1VY3NaVUZCU3l4aFFVRmhMRTlCUVU4c1JVRkJSVHRCUVVNelFpeGxRVUZMTEdWQlFXVXNTMEZCU3l4WFFVRlhMRkZCUVZFc1RVRkJUVHRCUVVkc1JDeHBRa0ZCVHl4WFFVRlhPMEZCUVVFc1VVRkRjRUk3UVVGQlFTeFJRVVZCTEUxQlFVMHNVMEZCVXl4SlFVRmxMR2xDUVVGclJEdEJRVU01UlN4blFrRkJUU3hoUVVGaExFdEJRVXNzWVVGQllTeEpRVUZKTEVWQlFVVTdRVUZETTBNc1kwRkJTU3hEUVVGRExGbEJRVms3UVVGRFppeHJRa0ZCVFN4SlFVRkpMRTFCUVUwc2NVSkJRWEZDTzBGQlFVRXNWVUZEZGtNN1FVRkRRU3huUWtGQlRTeG5Ra0ZCWjBJc1MwRkJTeXhUUVVGVExGZEJRVmNzVVVGQlVTeFJRVUZSTEZkQlFWY3NZMEZCWXl4bFFVRmxPMEZCUVVFc1VVRkRla2M3UVVGQlFTeFJRVVZCTEhkQ1FVRTRRanRCUVVNMVFpeHhRa0ZCVnl4VlFVRlZMRXRCUVVzc05FSkJRVFJDTzBGQlJYQkVMRzFDUVVGUExGRkJRVkU3UVVGQlFTeFZRVU5xUWp0QlFVTkJMR1ZCUVVzc05rSkJRVFpDTEVOQlFVTTdRVUZGYmtNc1kwRkJTU3hMUVVGTExHVkJRV1VzVjBGQlZ5eEhRVUZITzBGQlEzQkRPMEZCUVVFc1ZVRkRSanRCUVVWQkxHTkJRVWtzUzBGQlN5eFJRVUZSTEd0Q1FVRnJRaXhYUVVGWE8wRkJRelZETEhWQ1FVRlhMRlZCUVZVc1MwRkJTeXhuUWtGQlowSTdRVUZEZUVNc2IwSkJRVTBzWjBKQlFXZENMR1ZCUVdVc1NVRkJTU3hQUVVGUExFbEJRVWs3UVVGSGNFUXNiVUpCUVVzc1QwRkJUeXhSUVVGUkxHVkJRV1VzWVVGQllTeGxRVUZsTEZOQlFWTTdRVUZGZEVVc2MwSkJRVTBzVjBGQlZ5eExRVUZMTEZsQlFWa3NTVUZCU1N4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRE8wRkJRM1pFTEc5Q1FVRkpMR3RDUVVGclFpeFZRVUZoTEZOQlFWTXNWVUZCVlN4bFFVRmxPMEZCUTI1RkxIbENRVUZQTEZGQlFWRTdRVUZCUVN4blFrRkRha0lzVDBGQlR6dEJRVU5NTERKQ1FVRlRMRXRCUVVzc1RVRkJUVHRCUVVGQkxHZENRVU4wUWp0QlFVRkJMR05CUlVZc1dVRkJXU3hQUVVGUExGRkJRVkVzWlVGQlpTeGhRVUZoTEdWQlFXVXNVMEZCVXp0QlFVVTNSU3h6UWtGQlRTeFhRVUZYTEV0QlFVc3NiVUpCUVcxQ0xFbEJRVWtzVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXp0QlFVTTVSQ3h2UWtGQlNTeHJRa0ZCYTBJc1ZVRkJZU3hUUVVGVExGVkJRVlVzWlVGQlpUdEJRVU51UlN4NVFrRkJUeXhSUVVGUk8wRkJRVUVzWjBKQlEycENMRTlCUVU4N1FVRkRUQ3d5UWtGQlV5eExRVUZMTEUxQlFVMDdRVUZCUVN4blFrRkRkRUk3UVVGQlFTeGpRVU5HTEU5QlFVODdRVUZEVEN4MVFrRkJUeXhSUVVGUk8wRkJRVUVzWTBGRGFrSTdRVUZCUVN4WlFVTkdPMEZCUTBFc2FVSkJRVXNzYVVKQlFXbENMRU5CUVVNN1FVRkJRU3hWUVVONlFpeFBRVUZQTzBGQlIwd3NaMEpCUVVrc2EwSkJRV3RDTEV0QlFVc3NkVUpCUVhWQ0xFbEJRVWtzUzBGQlN5eFJRVUZSTEdkQ1FVRnBRanRCUVVOd1JpeG5Ra0ZCU1N4RFFVRkRMR2xDUVVGcFFqdEJRVU53UWl4blEwRkJhMElzUTBGQlF6dEJRVU51UWl4dFFrRkJTeXgxUWtGQmRVSXNTVUZCU1N4TFFVRkxMRkZCUVZFc2EwSkJRVzFDTEdWQlFXVTdRVUZCUVN4WlFVTnFSanRCUVVOQkxIVkNRVUZYTEZWQlFWVXNTMEZCU3l4blFrRkJaMEk3UVVGRGVFTXNPRUpCUVdkQ0xFdEJRVXNzVFVGQlRUdEJRVUZCTEZsQlF6ZENPMEZCUTBFc2FVSkJRVXNzYVVKQlFXbENMRU5CUVVNN1FVRkJRU3hWUVVONlFqdEJRVUZCTEZGQlEwWTdRVUZCUVN4UlFVVkJMRlZCUVZVN1FVRkRVaXhsUVVGTExGbEJRVmtzVVVGQlVTeERRVUZETEZsQlFWazdRVUZEY0VNc2IwSkJRVkVzVVVGQlVTeFpRVUZWTzBGQlEzaENMSEZDUVVGUExGRkJRVkU3UVVGQlFTeFpRVU5xUWl4RFFVRkRPMEZCUVVFc1ZVRkRTQ3hEUVVGRE8wRkJRMFFzWlVGQlN5eHRRa0ZCYlVJc1VVRkJVU3hEUVVGRExGbEJRVms3UVVGRE0wTXNiMEpCUVZFc1VVRkJVU3haUVVGVk8wRkJRM2hDTEhGQ1FVRlBMRkZCUVZFN1FVRkJRU3haUVVOcVFpeERRVUZETzBGQlFVRXNWVUZEU0N4RFFVRkRPMEZCUlVRc1pVRkJTeXhoUVVGaExGRkJRVkVzUTBGQlF5eFpRVUZaTzBGQlEzSkRMRzlDUVVGUkxGRkJRVkVzVDBGQlR5eFJRVUZSTzBGQlFVRXNWVUZEYWtNc1EwRkJRenRCUVVWRUxHVkJRVXNzZFVKQlFYVkNMRkZCUVZFc1EwRkJReXhaUVVGWk8wRkJReTlETEc5Q1FVRlJMRkZCUVZFc1dVRkJWVHRCUVVONFFpeHhRa0ZCVHl4UlFVRlJPMEZCUVVFc1dVRkRha0lzUTBGQlF6dEJRVUZCTEZWQlEwZ3NRMEZCUXp0QlFVTkVMR1ZCUVVzc1pVRkJaU3h2UWtGQlNTeEpRVUZKTzBGQlF6VkNMR1ZCUVVzc1kwRkJZeXh2UWtGQlNTeEpRVUZKTzBGQlF6TkNMR1ZCUVVzc2NVSkJRWEZDTEc5Q1FVRkpMRWxCUVVrN1FVRkRiRU1zWlVGQlN5eDVRa0ZCZVVJc2IwSkJRVWtzU1VGQlNUdEJRVUZCTEZGQlEzaERPMEZCUVVFc1VVRkZRU3hwUWtGQmFVSXNWMEZCYlVJN1FVRkZiRU1zWjBKQlFVMHNhVUpCUVdsQ0xFdEJRVXNzZFVKQlFYVkNMRWxCUVVrc1UwRkJVenRCUVVOb1JTeGpRVUZKTEdkQ1FVRm5RanRCUVVOc1Fpd3lRa0ZCWlN4UlFVRlJMRmxCUVZVN1FVRkRMMElzY1VKQlFVOHNVVUZCVVR0QlFVRkJMRmxCUTJwQ0xFTkJRVU03UVVGRFJDeHBRa0ZCU3l4MVFrRkJkVUlzVDBGQlR5eFRRVUZUTzBGQlFVRXNWVUZET1VNN1FVRkJRU3hSUVVOR08wRkJRVUVzVFVGRFJqdEJRVVZQTEUxQlFVMHNkVUpCUVhWQ0xFbEJRVWtzVTBGRGNFTXNTVUZCU1N4dFFrRkJiVUlzUjBGQlJ5eEpRVUZKTzBGQlFVRTdRVUZCUVRzN08wRkRkR1JzUXl4TlFVZE5MREpDUVhOQ1R6dEJRWHBDWWp0QlFVRkJPMEZCUVVFN1FVRkhRU3hOUVVGTkxEUkNRVUZPTEUxQlFXZERPMEZCUVVFc1VVRkRPVUlzV1VGQldTeFhRVUZ2UXp0QlFVTTVReXhwUWtGQlR5eFBRVUZQTEUxQlFVMHNVMEZCVXp0QlFVRkJMRkZCUXk5Q08wRkJRVUVzVVVGSFFTeEpRVUZYTEZkQlFXMUNPMEZCUXpWQ0xHTkJRVWtzUTBGQlF5eExRVUZMTEV0QlFVczdRVUZEWWl4cFFrRkJTeXhOUVVORUxFOUJRVThzYjBKQlFXOUNMRWxCUVVrc1JVRkJSU3hMUVVGTExFVkJRVVVzU1VGQlNTeFZRVUZSTEVkQlFVa3NTMEZCYVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeExRVUZMTEVkQlFVYzdRVUZCUVN4VlFVTm9TRHRCUVVOQkxHbENRVUZQTEV0QlFVczdRVUZCUVN4UlFVTmtPMEZCUVVFc1RVRkRSanRCUVZOUExFMUJRVTBzT0VKQlFUaENMRU5CUVc5RExHTkJRek5GTEVsQlFVa3NNRUpCUVRCQ0xGTkJRVk03UVVGQlFUdEJRVUZCT3pzN1FVTXhRak5ETEUxQlMyRXNXVUZoUVN4bFFUWkZRU3hYUVRaSlFTeGpRVEJOUVN4VlFXdEVRU3hWUVVOQk8wRkJlbVZpTzBGQlFVRTdRVUZCUVR0QlFVdFBMRTFCUVUwc1lVRkJUaXhOUVVGcFFqdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxGRkJUM1JDTEU5QlFVOHNaMEpCUVdkQ0xFZEJRWEZDTEVkQlFXbEVPMEZCUXpOR0xHbENRVUZSTEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhKUVVGTExGTkJRVmtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVGQkxGRkJRMnhFTzBGQlFVRXNUVUZEUmp0QlFVZFBMRTFCUVUwc1owSkJRVTRzVFVGQmIwSTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEZGQlVYcENMRTlCUVU4c1ZVRkJWU3hQUVVFd1FpeFBRVUV3UWl4WFFVRlhMRTlCUVc5RE8wRkJRMnhJTEdkQ1FVRk5MRkZCUVZFc1RVRkJUVHRCUVVOd1FpeG5Ra0ZCVFN4UlFVRlJMRTFCUVUwN1FVRkRjRUlzWTBGQlNTeFZRVUZWTEVkQlFVYzdRVUZEWml4dFFrRkJUenRCUVVGQkxGVkJRMVE3UVVGRFFTeGpRVUZKTEZWQlFWVXNSMEZCUnp0QlFVTm1MRzFDUVVGUE8wRkJRVUVzVlVGRFZEdEJRVU5CTEdkQ1FVRk5MRkZCUVZFc1MwRkJTeXhKUVVGSkxFMUJRVTBzVVVGQlVTeE5RVUZOTEUxQlFVMDdRVUZEYWtRc1owSkJRVTBzVVVGQlVTeEpRVUZKTEUxQlFXTXNTMEZCU3p0QlFVZHlReXhqUVVGSkxGVkJRVlU3UVVGRFdpeG5Ra0ZCU1N4UlFVRlJMRXRCUVVzc1VVRkJVU3hIUVVGSE8wRkJRekZDTEhGQ1FVRlBPMEZCUVVFc1dVRkRWRHRCUVVOQkxHdENRVUZOTEdWQlEwWXNWMEZCVnl4blFrRkJaMElzUTBGQlF5eE5RVUZOTEZGQlFWRXNRMEZCUXl4SFFVRkhMRTFCUVUwc1VVRkJVU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNVVUZCVVN4RFFVRkRMRWRCUVVjc1RVRkJUU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzcEhMR2RDUVVGSkxHbENRVUZwUWl4UlFVRlhPMEZCUXpsQ0xIRkNRVUZQTzBGQlFVRXNXVUZEVkR0QlFVTkJMR0ZCUVVNc1RVRkJUU3hSUVVGUkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEZGQlFWRXNRMEZCUXl4RFFVRkRMRWxCUVVrN1FVRkJRU3hWUVVONlF6dEJRVVZCTEcxQ1FVRlRMRWxCUVVrc1YwRkJWeXhKUVVGSkxFZEJRVWNzUzBGQlN5eFBRVUZQTEV0QlFVczdRVUZET1VNc2EwSkJRVTBzVDBGQlR5eFJRVUZSTEVsQlFVa3NTVUZCU1N4SlFVRkpMRTFCUVUwc1VVRkJVU3hEUVVGRE8wRkJRMmhFTEd0Q1FVRk5MRTlCUVU4c1VVRkJVU3hKUVVGSkxFbEJRVWtzU1VGQlNTeE5RVUZOTEZGQlFWRXNRMEZCUXp0QlFVVm9SQ3huUWtGQlNTeFRRVUZUTEZGQlFWRXNUMEZCVHl4TFFVRkxMRTlCUVU4c1IwRkJSenRCUVVONlF5eHhRa0ZCVHp0QlFVRkJMRmxCUTFRN1FVRkRRU3hyUWtGQlRTeE5RVUZOTEV0QlFVc3NTVUZCU1N4TlFVRk5MRWxCUVVrN1FVRkRMMElzWjBKQlFVa3NVVUZCVVN4TlFVRk5PMEZCUTJoQ0xHOUNRVUZOTEZGQlFWRXNRMEZCUXl4SlFVRkpMRXRCUVVzc1NVRkJTU3hOUVVGTkxFbEJRVWs3UVVGQlFTeFpRVU40UXl4UFFVRlBPMEZCUlV3c2EwSkJRVWtzVFVGQlRTeEhRVUZITzBGQlExZ3NkVUpCUVU4N1FVRkJRU3hqUVVOVU8wRkJRMEVzYjBKQlFVMHNVVUZCVVN4RFFVRkRMRWxCUVVrN1FVRkJRU3haUVVOeVFqdEJRVUZCTEZWQlEwWTdRVUZGUVN4cFFrRkJUenRCUVVGQkxGRkJRMVE3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc1VVRlBRU3hQUVVGUExHbENRVUZwUWl4UFFVRXdRaXhaUVVGM1F6dEJRVVY0Uml4blFrRkJUU3haUVVGWkxFMUJRVTA3UVVGRGVFSXNaMEpCUVUwc1dVRkJXU3hYUVVGWE8wRkJRemRDTEdOQlFVa3NXVUZCV1N4WFFVRlhPMEZCUTNwQ0xHMUNRVUZQTzBGQlFVRXNWVUZEVkR0QlFVTkJMRzFDUVVGVExFbEJRVWtzUjBGQlJ5eExRVUZMTEZkQlFWY3NTMEZCU3p0QlFVTnVReXhuUWtGQlNTeE5RVUZOTEZsQlFWa3NRMEZCUXl4TlFVRk5MRXRCUVVzc1RVRkJUU3haUVVGWkxFTkJRVU1zVFVGQlRTeFhRVUZYTEZsQlFWa3NRMEZCUXl4SFFVRkhPMEZCUTNCR0xIRkNRVUZQTzBGQlFVRXNXVUZEVkR0QlFVRkJMRlZCUTBZN1FVRkRRU3hwUWtGQlR6dEJRVUZCTEZGQlExUTdRVUZCUVN4TlFVTkdPMEZCUjA4c1RVRkJUU3haUVVGT0xFMUJRVTBzVjBGQlZUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRkZCU1hKQ0xFOUJRVThzUzBGQlN5eE5RVUZwUXp0QlFVTXpReXhwUWtGQlR5eFhRVUZWTERCQ1FVRXdRaXhOUVVGTkxFZEJRVWNzUzBGQlN5eE5RVUZOTzBGQlFVRXNVVUZEYWtVN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeFJRVXRCTEU5QlFVOHNZVUZCWVN4TlFVRjVRaXhQUVVGUExFZEJRWE5DTzBGQlEzaEZMR2RDUVVGTkxFOUJRVThzUzBGQlN6dEJRVU5zUWl4alFVRkpMRk5CUVZNc1IwRkJSenRCUVVOa0xHMUNRVUZQTEVOQlFVTTdRVUZCUVN4VlFVTldPMEZCUTBFc1owSkJRVTBzVlVGQlZTeEpRVUZKTEUxQlFVMHNTVUZCU1R0QlFVTTVRaXhqUVVGSkxFbEJRVWtzVDBGQlR6dEJRVU5tTEdsQ1FVRlBMRXRCUVVzc1IwRkJSenRCUVVOaUxHZENRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRk5CUVZNc1IwRkJSenRCUVVONFFpeHpRa0ZCVVN4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWs3UVVGRGRrSTdRVUZCUVN4WlFVTkdPMEZCUTBFc1owSkJRVWtzVDBGQlR5eExRVUZMTEVOQlFVTXNUVUZCVFN4SFFVRkhPMEZCUTNoQ0xHOUNRVUZOTEVsQlFVa3NUVUZCVFN4elFrRkJjMEk3UVVGQlFTeFpRVU40UXp0QlFVTkJMRzlDUVVGUkxFTkJRVU1zU1VGQlNUdEJRVU5pTEc5Q1FVRlJMRXRCUVVzc1EwRkJRenRCUVVOa08wRkJRVUVzVlVGRFJqdEJRVU5CTEdWQlFVc3NTMEZCU3l4TFFVRkxMRWRCUVVjc1MwRkJTenRCUVVOeVFpeHZRa0ZCVVN4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRE8wRkJRVUVzVlVGRGNrSTdRVUZEUVN4cFFrRkJUenRCUVVGQkxGRkJRMVE3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4UlFVdEJMRTlCUVU4c2EwSkJRV3RDTEUxQlFYbENMRTFCUVhOQ08wRkJRM1JGTEdOQlFVa3NUMEZCVHl4TFFVRkxMRTlCUVU4c1MwRkJTeXhSUVVGUk8wRkJRMnhETEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3gzUWtGQmQwSXNTVUZCU1N4M1EwRkJkME1zUzBGQlN5eE5RVUZOTEdOQlFXTTdRVUZCUVN4VlFVTXZSenRCUVVOQkxHbENRVUZQTEZkQlFWVXNNRUpCUVRCQ0xFMUJRVTBzVFVGQlRTeExRVUZMTEUxQlFVMDdRVUZCUVN4UlFVTndSVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEZGQlMwRXNUMEZCVHl4blFrRkJaMElzVFVGQmVVSXNUVUZCYzBJN1FVRkRjRVVzWTBGQlNTeFBRVUZQTEV0QlFVc3NUMEZCVHl4TFFVRkxMRkZCUVZFN1FVRkRiRU1zYTBKQlFVMHNTVUZCU1N4TlFVRk5MSGRDUVVGM1FpeEpRVUZKTEhORFFVRnpReXhMUVVGTExFMUJRVTBzWTBGQll6dEJRVUZCTEZWQlF6ZEhPMEZCUTBFc2FVSkJRVThzVjBGQlZTd3dRa0ZCTUVJc1RVRkJUU3hIUVVGSExFbEJRVWs3UVVGQlFTeFJRVU14UkR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxGRkJTMEVzVDBGQlR5d3dRa0ZCTUVJc1RVRkJlVUlzVDBGQlpTeExRVUZ4UWp0QlFVTTFSaXhqUVVGSkxFOUJRVTg3UVVGRFdDeHRRa0ZCVXl4SlFVRkpMRTlCUVU4c1NVRkJTU3hMUVVGTExFdEJRVXM3UVVGSGFFTXNaMEpCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUjBGQlJ6dEJRVU5tTEc5Q1FVRk5MRWxCUVVrN1FVRkJRVHRCUVVGQkxHZENRVVZPTzBGQlFVRXNZMEZCSzBjN1FVRkJRU3haUVVOeVNEdEJRVU5CTEc5Q1FVRlJMRXRCUVVzc1EwRkJRenRCUVVGQkxGVkJRMmhDTzBGQlEwRXNhVUpCUVU4N1FVRkJRU3hSUVVOVU8wRkJRVUVzVVVGRlFTeFBRVUZQTEdWQlFXVXNUVUZCTkVNN1FVRkRhRVVzWjBKQlFVMHNUMEZCVHl4TFFVRkxPMEZCUTJ4Q0xHTkJRVWtzVTBGQlV5eEhRVUZITzBGQlEyUXNiVUpCUVU4c1EwRkJRenRCUVVGQkxGVkJRMVlzVjBGQlZ5eFRRVUZUTEVkQlFVYzdRVUZEY2tJc2JVSkJRVThzUTBGQlF5eERRVUZETzBGQlFVRXNWVUZEV0R0QlFVTkJMR2RDUVVGTkxGVkJRVlVzU1VGQlNTeE5RVUZOTEVsQlFVazdRVUZET1VJc2EwSkJRVkVzVDBGQlR5eERRVUZETEVsQlFVazdRVUZEY0VJc2EwSkJRVkVzVDBGQlR5eERRVUZETEVsQlFVa3NTMEZCU3l4UFFVRlBMRU5CUVVNN1FVRkRha01zYlVKQlFWTXNTVUZCU1N4UFFVRlBMRWRCUVVjc1MwRkJTeXhIUVVGSExFVkJRVVVzUjBGQlJ6dEJRVU5zUXl4dlFrRkJVU3hEUVVGRExFbEJRVWtzVVVGQlVTeEpRVUZKTEVOQlFVTXNTVUZCU1N4TFFVRkxMRWxCUVVrc1EwRkJRenRCUVVGQkxGVkJRekZETzBGQlEwRXNhVUpCUVU4N1FVRkJRU3hSUVVOVU8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNVVUZMUVN4UFFVRlBMR05CUVdNc1RVRkJZeXhaUVVFMFFqdEJRVU0zUkN4alFVRkpMRTlCUVU4c1EwRkJReXhqUVVGakxGRkJRVkVzV1VGQldUdEJRVU0xUXl4clFrRkJUU3hKUVVGSkxFMUJRVTBzYzBOQlFYTkRPMEZCUVVFc1ZVRkRlRVE3UVVGRFFTeHBRa0ZCVHl4UFFVRlBMRWxCUVVrc1QwRkJUeXhoUVVGaE8wRkJRVUVzVVVGRGVFTTdRVUZCUVN4UlFVVkJMRTlCUVU4c1kwRkJZeXhOUVVGNVFpeFpRVUVyUWp0QlFVTXpSU3hwUWtGQlR5eExRVUZMTEVsQlFVa3NUMEZCU3l4TFFVRkxMR05CUVdNc1IwRkJSeXhqUVVGakxFdEJRVXNzVFVGQlRTeERRVUZETzBGQlFVRXNVVUZEZGtVN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4UlFWRkJMRTlCUVU4c1owSkJRV2RDTEVkQlFYTkNMRTFCUVRaRE8wRkJRM2hHTEdOQlFVa3NUVUZCVFR0QlFVTlNMRzFDUVVGUExFdEJRVXNzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkJRU3hWUVVNM1FpeFBRVUZQTzBGQlEwd3NiVUpCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzVVVGQlVUdEJRVUZCTEZWQlF6TkNPMEZCUVVFc1VVRkRSanRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4UlFVOUJMRTlCUVU4c1UwRkJVeXhOUVVGNVFrTXNUVUZCTWtNN1FVRkRiRVlzWjBKQlFVMHNUMEZCVHl4TFFVRkxPMEZCUTJ4Q0xHbENRVUZQTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1RVRkJUU3hKUVVGSlFTeExRVUZKTEVOQlFVTXNTVUZCU1VFc1MwRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF6dEJRVUZCTEZGQlEzUkVPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEZGQlQwRXNUMEZCVHl4VFFVRlRMRkZCUVRKQ0xGRkJRVzlETzBGQlF6ZEZMR05CUVVrc1QwRkJUeXhYUVVGWExFOUJRVThzVVVGQlVUdEJRVU51UXl4dFFrRkJUenRCUVVGQkxGVkJRMVE3UVVGRFFTeHBRa0ZCVHl4UFFVRlBMRTFCUVUwc1EwRkJReXhIUVVGSExFMUJRVTBzVFVGQlRTeFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVRkJMRkZCUXk5RE8wRkJRVUVzVFVGRFJqdEJRVVZQTEUxQlFVMHNaVUZCVGl4TlFVRk5MR05CUVdFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3hSUVZWNFFpeFBRVUZQTEhGQ1FVTklMR3RDUVVFeVFpeFhRVUU0UWl4aFFVRjFRaXhUUVVOb1JpeFhRVUZ4UWl4TlFVRnpRanRCUVVNM1F5eGpRVUZKTEVOQlFVTXNiMEpCUVc5Q0xGbEJRVmtzVjBGQlZ5eFZRVUZWTEZOQlFWTXNSMEZCUnp0QlFVTndSU3hyUWtGQlRTeEpRVUZKTEUxQlFVMHNiMFpCUVc5R08wRkJRVUVzVlVGRGRFYzdRVUZGUVN4alFVRkpMR3RDUVVGclFqdEJRVVZ3UWl4eFFrRkJVeXhOUVVGTkxFZEJRVWNzVFVGQlRTeFZRVUZWTEZOQlFWTXNSMEZCUnl4UFFVRlBPMEZCUTI1RUxHdENRVUZKTEU5QlFVOHNXVUZCV1N4UlFVRlJPMEZCUXpkQ0xEUkNRVUZaTEV0QlFVc3NWVUZCVlN4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVGQkxHTkJRM0pETEU5QlFVODdRVUZEVEN3MFFrRkJXU3hIUVVGSExFbEJRVWtzVlVGQlZTeE5RVUZOTEVOQlFVTTdRVUZCUVN4alFVTjBRenRCUVVGQkxGbEJRMFk3UVVGQlFTeFZRVU5HTzBGQlIwRXNiVUpCUVZNc1RVRkJUU3hIUVVGSExFMUJRVTBzV1VGQldTeFJRVUZSTEU5QlFVODdRVUZEYWtRc1owSkJRVWtzVFVGQlRTeFJRVUZSTEZGQlFWRTdRVUZEZUVJc2EwSkJRVWtzVVVGQlVTeEhRVUZITEVsQlFVa3NSMEZCUnp0QlFVTndRaXh6UWtGQlRTeEpRVUZKTEUxQlFVMHNPRU5CUVRoRE8wRkJRVUVzWTBGRGFFVTdRVUZCUVN4WlFVTkdMRTlCUVU4N1FVRkRUQ3h6UWtGQlVTeExRVUZMTEVOQlFVTTdRVUZCUVN4WlFVTm9RanRCUVVGQkxGVkJRMFk3UVVGSFFTeHRRa0ZCVXl4TlFVRk5MRWRCUVVjc1RVRkJUU3haUVVGWkxGRkJRVkVzVDBGQlR6dEJRVU5xUkN4blFrRkJTU3hOUVVGTkxGVkJRVlVzVVVGQlVUdEJRVU14UWl4clFrRkJTU3hWUVVGVkxFZEJRVWNzU1VGQlNTeEhRVUZITzBGQlEzUkNMSE5DUVVGTkxFbEJRVWtzVFVGQlRTeG5SRUZCWjBRN1FVRkJRU3hqUVVOc1JUdEJRVUZCTEZsQlEwWXNUMEZCVHp0QlFVTk1MSGRDUVVGVkxFdEJRVXNzUTBGQlF6dEJRVUZCTEZsQlEyeENPMEZCUVVFc1ZVRkRSanRCUVVkQkxHMUNRVUZUTEUxQlFVMHNSMEZCUnl4TlFVRk5MRmxCUVZrc1UwRkJVeXhIUVVGSExFOUJRVTg3UVVGRGNrUXNaMEpCUVVrc1RVRkJUU3hMUVVGTExGRkJRVkU3UVVGRGNrSXNhMEpCUVVrc1MwRkJTeXhIUVVGSExFbEJRVWtzUjBGQlJ6dEJRVU5xUWl4elFrRkJUU3hKUVVGSkxFMUJRVTBzTUVOQlFUQkRPMEZCUVVFc1kwRkROVVE3UVVGQlFTeFpRVU5HTEU5QlFVODdRVUZEVEN4dFFrRkJTeXhMUVVGTExFTkJRVU03UVVGQlFTeFpRVU5pTzBGQlFVRXNWVUZEUmp0QlFVZEJMRzFDUVVGVExFMUJRVTBzUjBGQlJ5eE5RVUZOTEZsQlFWa3NVVUZCVVN4UFFVRlBPMEZCUTJwRUxHZENRVUZKTEZsQlFWa3NSMEZCUnl4TFFVRkxMRWRCUVVjN1FVRkRla0lzYjBKQlFVMHNTVUZCU1N4TlFVRk5MSGxEUVVGNVF6dEJRVUZCTEZsQlF6TkVPMEZCUlVFc1owSkJRVWtzUzBGQlN5eEhRVUZITEV0QlFVc3NXVUZCV1N4SFFVRkhMRXRCUVVzc1MwRkJTeXhOUVVGTkxGbEJRVmtzVFVGQlRTeExRVUZMTEZsQlFWa3NSMEZCUnl4SFFVRkhPMEZCUTNaR0xHOUNRVUZOTEVsQlFVa3NUVUZCVFN4dlEwRkJiME03UVVGQlFTeFpRVU4wUkR0QlFVRkJMRlZCUTBZN1FVRkJRU3hSUVVOR08wRkJRVUU3UVVGQlFTeFJRVWRCTEU5QlFVOHNlVUpCUTBnc1YwRkJPRUlzVTBGQk5FSXNWMEZETVVRc1lVRkJaME1zVFVGQlowSXNaVUZCZDBJc1UwRkJkMEk3UVVGRGJFY3NZMEZCU1N4RFFVRkRMRk5CUVZNN1FVRkRXanRCUVVGQkxGVkJRMFk3UVVGRlFTeGpRVUZKTEV0QlFVc3NWMEZCVnl4TFFVRkxMRlZCUVZVc1UwRkJVeXhKUVVGSk8wRkJRemxETEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3c0UkVGQk9FUTdRVUZCUVN4VlFVTm9SanRCUVVWQkxHTkJRVWtzVVVGQlVTeFhRVUZaTEZWQlFWVXNVMEZCVXl4SFFVRkpPMEZCUXpkRExHdENRVUZOTEVsQlFVa3NUVUZCVFN3eVJFRkJNa1E3UVVGQlFTeFZRVU0zUlR0QlFVVkJMR05CUVVrc1dVRkJXU3hYUVVGWkxGVkJRVlVzVTBGQlV5eEhRVUZKTzBGQlEycEVMR3RDUVVGTkxFbEJRVWtzVFVGQlRTeHBSVUZCYVVVN1FVRkJRU3hWUVVOdVJqdEJRVVZCTEcxQ1FVRlRMRTFCUVUwc1IwRkJSeXhOUVVGTkxGVkJRVlVzVTBGQlV5eEhRVUZITEU5QlFVODdRVUZEYmtRc01FSkJRV0U3UVVGQlFTeGpRVU5VTEZWQlFWVXNUMEZCVHl4blFrRkJaMElzU1VGQlNTeEZRVUZGTzBGQlFVRXNZMEZCUnl4UlFVRlJMRWRCUVVjN1FVRkJRU3hqUVVGSExGVkJRVlVzUjBGQlJ6dEJRVUZCTEdOQlFVY3NXVUZCV1N4SFFVRkhPMEZCUVVFc1kwRkJSenRCUVVGQkxHTkJRVTA3UVVGQlFTeGpRVU5vUnl4TlFVRk5MRlZCUVZVc1UwRkJVenRCUVVGQkxHTkJRVWM3UVVGQlFTeFpRVUZQTzBGQlFVRXNWVUZEZWtNN1FVRkJRU3hSUVVOR08wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEZGQllVRXNUMEZCVHl4MVFrRkRTQ3hyUWtGQk1rSXNWMEZCT0VJc1UwRkJiVUlzVjBGRE5VVXNZVUZCZFVJc1RVRkJaMElzVTBGQk5FSTdRVUZEY2tVc1kwRkJTU3hWUVVGVkxGVkJRVlVzUjBGQlJ6dEJRVU42UWl4clFrRkJUU3hKUVVGSkxFMUJRVTBzTkVOQlFUUkRPMEZCUVVFc1ZVRkRPVVE3UVVGSFFTeG5Ra0ZCVFN4aFFVRmhMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzVlVGQlZTeERRVUZETEVOQlFVTTdRVUZGT1VNc2QwSkJRV0U3UVVGQlFTeFpRVU5VTzBGQlFVRXNXVUZCYTBJN1FVRkJRU3haUVVGWE8wRkJRVUVzV1VGQldUdEJRVUZCTEZsQlFWTTdRVUZCUVN4WlFVRlhPMEZCUVVFc1dVRkJZVHRCUVVGQkxGbEJRVTA3UVVGQlFTeFZRVUZQTzBGQlF6TkdMR2xDUVVGUE8wRkJRVUVzVVVGRFZEdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNVVUZaUVN4UFFVRlBMSFZDUVVOSUxGZEJRVGhDTEZsQlFTdENMRk5CUVcxQ0xGZEJRMmhHTEdGQlFYVkNMRTFCUVdkQ0xGTkJRVFJDTzBGQlEzSkZMR05CUVVrc1ZVRkJWU3hWUVVGVkxFdEJRVXNzVjBGQlZ5eFZRVUZWTEVkQlFVYzdRVUZEYmtRc2EwSkJRVTBzU1VGQlNTeE5RVUZOTEhsRVFVRjVSRHRCUVVGQkxGVkJRek5GTzBGQlIwRXNaMEpCUVUwc1lVRkJZU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEZkQlFWY3NRMEZCUXl4RFFVRkRPMEZCUlM5RExIZENRVUZoTEcxQ1FVRnRRaXhQUVVGUExGZEJRVmNzV1VGQldTeFRRVUZUTEZkQlFWY3NZVUZCWVN4TlFVRk5MRTlCUVU4N1FVRkROVWNzYVVKQlFVODdRVUZCUVN4UlFVTlVPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzVVVGTFFTeFBRVUZsTEcxQ1FVTllMR3RDUVVFeVFpeFhRVUU0UWl4WlFVRnpRaXhUUVVNdlJTeFhRVUU0UWl4aFFVRm5ReXhOUVVGblFpeFRRVUZyUWp0QlFVTnNSeXhqUVVGSkxHdENRVUZyUWp0QlFVTndRaXh4UWtGQlV5eE5RVUZOTEVkQlFVY3NUVUZCVFN4VlFVRlZMRk5CUVZNc1IwRkJSeXhQUVVGUE8wRkJRMjVFTEhsQ1FVRlhMRXRCUVVzc1EwRkJRenRCUVVGQkxGbEJRMjVDTzBGQlFVRXNWVUZEUml4UFFVRlBPMEZCUTB3c2NVSkJRVk1zVFVGQlRTeEhRVUZITEUxQlFVMHNWVUZCVlN4VFFVRlRMRWRCUVVjc1QwRkJUenRCUVVOdVJDeDVRa0ZCVnl4TFFVRkxMR05CUVdFN1FVRkJRU3huUWtGRGVrSXNWVUZCVlN4TlFVRk5MRU5CUVVNN1FVRkJRU3huUWtGQlJ5eFJRVUZSTEVkQlFVYzdRVUZCUVN4blFrRkJSeXhWUVVGVkxFZEJRVWM3UVVGQlFTeG5Ra0ZCUnl4WlFVRlpMRWRCUVVjN1FVRkJRU3huUWtGQlJ6dEJRVUZCTEdkQ1FVRk5PMEZCUVVFc1owSkJRVXNzVFVGQlRTeFZRVUZWTEZOQlFWTTdRVUZCUVN4blFrRkRlRWM3UVVGQlFTeGpRVUZQTEVOQlFVTTdRVUZCUVN4WlFVTmtPMEZCUVVFc1ZVRkRSanRCUVVGQkxGRkJRMFk3UVVGQlFUdEJRVUZCTzBGQlFVRXNVVUZKUVN4UFFVRmxMSGRDUVVOWUxGRkJRV2RDTEZGQlFXZENMRlZCUVd0Q0xGRkJRV2RDTEUxQlFXZENMR05CUTJ4R0xHTkJRWE5DTEZOQlFUQkNPMEZCUTJ4RUxHZENRVUZOTEZWQlFWVXNXVUZCV1N4VFFVRlRMRXRCUVVzN1FVRkRNVU1zWTBGQlNTeFhRVUZYTEZsQlFWa3NWVUZCVlR0QlFVTnVReXh2UWtGQlVTeFRRVUZUTzBGQlFVRXNZMEZEWml4TFFVRkxPMEZCUTBnc2NVSkJRVXNzV1VGQldTeEpRVUZKTzBGQlEzSkNMSEZDUVVGTExGbEJRVmtzU1VGQlNUdEJRVU55UWl4MVFrRkJUeXhMUVVGTExFOUJRVkVzVTBGQlV5eFhRVUZYTEZOQlFWVXNRMEZCUXp0QlFVRkJMR05CUTNKRUxFdEJRVXM3UVVGQlFTeGpRVU5NTEV0QlFVczdRVUZEU0N4dlFrRkJTU3hoUVVGaExFZEJRVWM3UVVGRGJFSXNkMEpCUVUwc1NVRkJTU3hOUVVGTkxIRkVRVUZ4UkR0QlFVRkJMR2RDUVVOMlJTeFBRVUZQTzBGQlEwd3NkMEpCUVUwc2IwSkJRVzlDTEZOQlFWTXNVMEZCVXl4TFFVRkxPMEZCUTJwRUxIZENRVUZOTEdGQlFXRXNiVUpCUVcxQ0xFdEJRVXNzVTBGQlV5eFRRVUZUTzBGQlF6ZEVMSFZDUVVGTExGbEJRVmtzU1VGRFdpeFpRVUZaTEdWQlFXZENMRXRCUVVzc1QwRkJUeXhaUVVGWkxFdEJRVXNzUTBGQlF5eEpRVUZKTEV0QlFVc3NUVUZCVFN4WlFVRlpMRU5CUVVNN1FVRkRNMFlzZFVKQlFVc3NXVUZCV1N4SlFVRkpMRmxCUVZrc1MwRkJTeXhaUVVGWk8wRkJRMnhFTEhsQ1FVRlBMRXRCUVVzc1QwRkJVU3hUUVVGVExGbEJRVmtzVlVGQlZTeFRRVUZWTEVOQlFVTTdRVUZCUVN4blFrRkRhRVU3UVVGQlFTeGpRVU5HTzBGQlEwVXNjMEpCUVUwc1NVRkJTU3hOUVVGTkxEQkNRVUV3UWp0QlFVRkJMRmxCUXpsRE8wRkJRVUVzVlVGRFJpeFBRVUZQTzBGQlEwd3NiVUpCUVU4c1MwRkJTeXhQUVVGUkxGTkJRVk1zUzBGQlN5eFpRVUZaTEVsQlFVa3NTMEZCU3l4WlFVRlpMRWxCUVVrc1YwRkJWeXhUUVVGVkxFTkJRVU03UVVGQlFTeFZRVU12Ump0QlFVRkJMRkZCUTBZN1FVRkJRU3hOUVVOR08wRkJSVThzVFVGQlRTeFhRVUZPTEUxQlFXVTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3hSUVVsd1FpeFBRVUZQTEhGQ1FVTklMRmRCUVRoQ0xGZEJRVzlDTEZsQlFTdENMRmxCUTJwR0xGZEJRV3RFTzBGQlEzQkVMR05CUVVrc1ZVRkJWU3hYUVVGWExFdEJRVXNzVjBGQlZ5eFhRVUZYTEVkQlFVYzdRVUZEY2tRc2EwSkJRVTBzU1VGQlNTeE5RVUZOTERSQ1FVRTBRanRCUVVGQkxGVkJRemxETzBGQlJVRXNZMEZCU1R0QlFVTktMR05CUVVrN1FVRkRTaXhqUVVGSk8wRkJSVW9zWTBGQlNTeFhRVUZYTzBGQlEySXNaMEpCUVVrc1ZVRkJWU3hEUVVGRE8wRkJRMllzWjBKQlFVa3NWVUZCVlN4RFFVRkRPMEZCUVVFc1ZVRkRha0lzVDBGQlR6dEJRVU5NTEdkQ1FVRkpMRlZCUVZVc1EwRkJRenRCUVVObUxHZENRVUZKTEZWQlFWVXNRMEZCUXp0QlFVRkJMRlZCUTJwQ08wRkJSVUVzWTBGQlNTeFBRVUZQTzBGQlJWZ3NZMEZCU1N4WlFVRlpPMEZCUTJRc1owSkJRVWtzVjBGQlZ5eERRVUZETzBGQlEyaENMRzFDUVVGUE8wRkJRVUVzVlVGRFZDeFBRVUZQTzBGQlEwd3NaMEpCUVVrc1YwRkJWeXhEUVVGRE8wRkJRMmhDTEcxQ1FVRlBPMEZCUVVFc1ZVRkRWRHRCUVVWQkxHTkJRVWtzVjBGQlZ5eEpRVUZKTEUxQlFVMHNSMEZCUnp0QlFVTXhRaXhyUWtGQlRTeEpRVUZKTEUxQlFVMHNiMEpCUVc5Q08wRkJRVUVzVlVGRGRFTTdRVUZGUVN4alFVRkpMRXRCUVVzc1MwRkJTeXhMUVVGTExFdEJRVXNzUzBGQlN5eEhRVUZITzBGQlF6bENMR3RDUVVGTkxFbEJRVWtzVFVGQlRTeDVRa0ZCZVVJN1FVRkJRU3hWUVVNelF6dEJRVVZCTEdOQlFVa3NZVUZCWVN4RFFVRkRMR05CUVdNc2FVSkJRV2xDTEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSE8wRkJRMjVGTEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3gzUTBGQmQwTTdRVUZCUVN4VlFVTXhSRHRCUVVWQkxHbENRVUZQTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNN1FVRkJRU3hSUVVOcVFqdEJRVUZCTEUxQlEwWTdRVUZIVHl4TlFVRk5MRmRCUVZjN1FVRkRha0lzVFVGQlRTeFhRVUZYTzBGQlFVRTdRVUZCUVRzN08wRkRlbVY0UWl4TlFXbENZU3huUWtGelRWQXNiVUpCYjBOUExEWkNRVXRCTERKQ1FVdEJMRFJDUVdWQkxHdENRV2xDUVN4WlFXTkJMRmRCWjBKQkxGZEJiVUpCTEdOQkswSlFMSEZDUVdsVVR5eGxRV0ZCTEdkQ1FXRkJMR3RDUVdkR1VDeHJRa0YzU2s4c2IwSkJZVUU3UVVGeU4wSmlPMEZCUVVFN1FVRkJRVHRCUVVkQk8wRkJRMEU3UVVGaFR5eE5RVUZOTEdsQ1FVRnBRanRCUVhOTk9VSXNUVUZCVFN4dlFrRkJiMElzUTBGQlF5eE5RVUZqTEdWQlFXbEVPMEZCUTNoR0xGbEJRVWtzWlVGQlpTeEhRVUZITzBGQlEzQkNMR2RDUVVGTkxFbEJRVWtzVFVGQlRTeHRSRUZCYlVRN1FVRkJRU3hSUVVOeVJUdEJRVWRCTEdkQ1FVRlJMRTFCUVUwN1FVRkJRU3hWUVVOYU8wRkJRMFVzYlVKQlFVOHNZVUZCWVN4SlFVRkpMRTFCUVUwc1ZVRkJWU3hWUVVGVk8wRkJRVUVzVlVGRGNFUTdRVUZEUlN4dFFrRkJUeXhoUVVGaExFbEJRVWtzVFVGQlRTeFZRVUZWTEZWQlFWVTdRVUZCUVN4VlFVTndSRHRCUVVORkxHMUNRVUZQTEdGQlFXRXNTVUZCU1N4TlFVRk5MRlZCUVZVc1ZVRkJWVHRCUVVGQkxGVkJRM0JFTzBGQlEwVXNiVUpCUVU4c1lVRkJZU3hKUVVGSkxFMUJRVTBzVlVGQlZTeFZRVUZWTzBGQlFVRXNWVUZEY0VRN1FVRkRSU3huUWtGQlNTeGhRVUZoTEVkQlFVYzdRVUZEYkVJc2IwSkJRVTBzU1VGQlNTeE5RVUZOTERSRFFVRTBRenRCUVVGQkxGbEJRemxFTzBGQlEwRXNiVUpCUVU4c1EwRkJReXhoUVVGaExFdEJRVXM3UVVGQlFTeFZRVU0xUWp0QlFVTkZMR2RDUVVGSkxHRkJRV0VzUjBGQlJ6dEJRVU5zUWl4dlFrRkJUU3hKUVVGSkxFMUJRVTBzTkVOQlFUUkRPMEZCUVVFc1dVRkRPVVE3UVVGRFFTeHRRa0ZCVHl4RFFVRkRMR0ZCUVdFc1MwRkJTenRCUVVGQkxGVkJRelZDTzBGQlEwVXNaMEpCUVVrc1pVRkJaU3hIUVVGSE8wRkJRM0JDTEc5Q1FVRk5MRWxCUVVrc1RVRkJUU3h0UWtGQmJVSTdRVUZCUVN4WlFVTnlRenRCUVVOQkxHMUNRVUZQTEVOQlFVTXNUMEZCVHl4WlFVRlpPMEZCUVVFc1ZVRkZOMEk3UVVGRFJTeHJRa0ZCVFN4SlFVRkpMRTFCUVUwc2MwSkJRWE5DTEVsQlFVa3NSVUZCUlR0QlFVRkJMRkZCUTJoRU8wRkJRVUVzVFVGRFJqdEJRVVZQTEUxQlFVMHNPRUpCUVRoQ0xFTkJRVU1zVFVGQlowSXNZVUZCYzBJc1RVRkJUVHRCUVVOMFJpeGpRVUZOTEdGQlFXRXNhMEpCUVd0Q0xFMUJRVTBzVlVGQlZUdEJRVU55UkN4bFFVRlBMRTlCUVU4c1pVRkJaU3hYUVVGWExHRkJRV0VzVjBGQlZ5eERRVUZETzBGQlFVRXNUVUZEYmtVN1FVRkZUeXhOUVVGTkxEUkNRVUUwUWl4RFFVRkRMRTFCUVdkQ0xHRkJRWE5DTEUxQlFVMDdRVUZEY0VZc1kwRkJUU3hoUVVGaExHdENRVUZyUWl4TlFVRk5MRlZCUVZVN1FVRkRja1FzWlVGQlR5eFBRVUZQTEdWQlFXVXNWMEZCVnl4aFFVRmhMRmRCUVZjc1EwRkJRenRCUVVGQkxFMUJRMjVGTzBGQlJVOHNUVUZCVFN3MlFrRkJOa0lzU1VGQlNTeFRRVUUyUkR0QlFVTjZSeXhqUVVGTkxHdENRVUZ2UXl4RFFVRkRPMEZCUXpORExHRkJRVXNzVVVGQlVTeFRRVUZQTzBGQlEyeENMR05CUVVrc1NVRkJTU3hYUVVGWExFZEJRVWM3UVVGRGNFSXNORUpCUVdkQ08wRkJRVUVzWTBGRFdpeEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxFbEJRVWM3UVVGQlFTeGpRVUZITEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzVlVGQlZTeGxRVUZsTEVkQlFVY3NSVUZCUXp0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVOMFJ6dEJRVUZCTEZGQlEwWXNRMEZCUXp0QlFVTkVMR1ZCUVU4N1FVRkJRU3hOUVVOVU8wRkJUVThzVFVGQlRTeHRRa0ZCYlVJc1EwRkJReXhUUVVGcFFqdEJRVVZvUkN4WlFVRkpMRTlCUVU4c1RVRkJUU3hIUVVGSE8wRkJRMnhDTEdsQ1FVRlBPMEZCUVVFc1VVRkRWQ3hYUVVGWExFOUJRVThzVFVGQlRTeEhRVUZITzBGQlEzcENMR2xDUVVGUE8wRkJRVUVzVVVGRFZEdEJRVVZCTEdWQlFVODdRVUZCUVN4TlFVTlVPMEZCVVU4c1RVRkJUU3hoUVVGaExFTkJRVU1zVjBGQlZ5eFBRVUZQTEZsQlFYRkNMRkZCUVZFc1VVRkJVVHRCUVVOb1JpeFpRVUZKTEVOQlFVTXNZMEZCWXl4bFFVRmxMRWRCUVVjN1FVRkRia01zYVVKQlFVOHNSMEZCUnl4UlFVRlJMRWxCUVVrc1MwRkJTenRCUVVGQkxGRkJRemRDTzBGQlJVRXNaVUZCVHl4TlFVRk5MRlZCUVZVc1NVRkJTU3hSUVVGUkxFdEJRVXNzUzBGQlN6dEJRVUZCTEUxQlF5OURPMEZCVVU4c1RVRkJUU3haUVVGWkxFTkJRVU1zVlVGQmEwSXNXVUZCYjBJc1ZVRkJhMEk3UVVGRGFFWXNXVUZCU1N4aFFVRmhMRTlCUVU4N1FVRkRkRUlzYVVKQlFVODdRVUZCUVN4UlFVTlVPMEZCUTBFc1dVRkJTU3hsUVVGbExFZEJRVWM3UVVGRGNFSXNhVUpCUVU4c1QwRkJUeXhMUVVGTE8wRkJRVUVzVVVGRGNrSTdRVUZGUVN4bFFVRlBMRTFCUVUwc1ZVRkJWU3hUUVVGVExFdEJRVXM3UVVGQlFTeE5RVU4yUXp0QlFVOVBMRTFCUVUwc1dVRkJXU3hEUVVGRExFMUJRV01zWlVGQmRVSTdRVUZETjBRc1dVRkJTU3hsUVVGbExFZEJRVWM3UVVGRGNFSXNhVUpCUVU4c1NVRkJTU3hKUVVGSkxGRkJRVkVzU1VGQlNTeFJRVUZSTEVsQlFVa3NVVUZCVVN4SlFVRkpPMEZCUVVFc1VVRkRja1FzVjBGQlZ5eGxRVUZsTEVkQlFVYzdRVUZETTBJc2FVSkJRVThzU1VGQlNTeEpRVUZKTEZGQlFWRXNTVUZCU1R0QlFVRkJMRkZCUXpkQ0xGZEJRVmNzWlVGQlpTeEhRVUZITzBGQlF6TkNMR2xDUVVGUExFbEJRVWtzU1VGQlNTeFJRVUZSTEVsQlFVa3NVVUZCVVN4SlFVRkpPMEZCUVVFc1VVRkRla003UVVGRlFTeGxRVUZQTzBGQlFVRXNUVUZEVkR0QlFWTlBMRTFCUVUwc1pVRkRWQ3hEUVVGRExFMUJRV01zVDBGQmMwSXNVVUZCWjBJc1UwRkJNRU03UVVGRE4wWXNXVUZCU1N4TFFVRkxMRmRCUVZjc1YwRkJWeXhMUVVGTExGTkJRVk1zUjBGQlJ6dEJRVU01UXl4alFVRkpMRTlCUVZFc1ZVRkJWeXhWUVVGVk8wRkJReTlDTEdkQ1FVRkpMRk5CUVZNc1QwRkJUenRCUVVOc1FpeHhRa0ZCVHl4SFFVRkhMRWxCUVVrc1MwRkJTeXhMUVVGTExGZEJRVmNzUzBGQlN5eGxRVUZsTEV0QlFVczdRVUZCUVN4WlFVTTVSQ3hQUVVGUE8wRkJRMHdzY1VKQlFVOHNSMEZCUnl4SlFVRkpMRXRCUVVzc1MwRkJTeXhYUVVGWExFdEJRVXM3UVVGQlFTeFpRVU14UXp0QlFVRkJMRlZCUTBZc1QwRkJUenRCUVVOTUxHZENRVUZKTEZOQlFWTXNUMEZCVHp0QlFVTnNRaXh4UWtGQlR5eEhRVUZITEVsQlFVa3NTVUZCU1N4TFFVRkxMRTFCUVUwc1VVRkJVU3hEUVVGRExFTkJRVU1zUzBGQlN5eExRVUZMTEUxQlFVMHNVVUZCVVN4SlFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExGRkJRVkVzU1VGQlNTeERRVUZETzBGQlFVRXNXVUZEZWtZc1QwRkJUenRCUVVOTUxIRkNRVUZQTEVkQlFVY3NTVUZCU1N4SlFVRkpMRXRCUVVzc1RVRkJUU3hSUVVGUkxFTkJRVU1zUTBGQlF5eExRVUZMTEZGQlFWRXNRMEZCUXp0QlFVRkJMRmxCUTNaRU8wRkJRVUVzVlVGRFJqdEJRVUZCTEZGQlEwWXNUMEZCVHp0QlFVTk1MR2xDUVVGUExGTkJRVk1zU1VGQlNTeEhRVUZITEVsQlFVa3NTVUZCU1N4TFFVRkxMRTFCUVUwN1FVRkJRU3hSUVVNMVF6dEJRVUZCTEUxQlEwWTdRVUZaU2l4TlFVRk5MSE5DUVVOR0xFTkJRVU1zVFVGQll5eFpRVUZ2UWl4aFFVRjFReXhQUVVONlJTeGxRVUYxUXp0QlFVTjBReXhqUVVGTkxHRkJRV0VzVDBGQlR5eG5Ra0ZCWjBJN1FVRkRNVU1zWTBGQlRTeFBRVUZQTEdGQlFXRXNZMEZCWXl4WlFVRlpPMEZCUTNCRUxHTkJRVTBzWlVGQlpTeERRVUZETEVkQlFVY3NTVUZCU1N4TlFVRk5MRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU03UVVGREwwTXNZMEZCVFN4alFVRmpMRTlCUVU4c1NVRkJTU3hSUVVGUkxGRkJRVkVzU1VGQlNTeE5RVUZOTEVsQlFVa3NWVUZCVlN4alFVRmpMRWxCUVVrN1FVRkRla1lzWTBGQlRTeGhRVUZoTEd0Q1FVRnJRaXhaUVVGWkxGVkJRVlU3UVVGRE0wUXNZMEZCVFN4WlFVRlpMRTlCUVU4c1pVRkJaU3hYUVVGWExHRkJRV0VzVjBGQlZ5eERRVUZETzBGQlF6VkZMR05CUVUwc1kwRkJZeXhQUVVGUExHVkJRV1VzVjBGQlZ5eGhRVUZoTEZkQlFWY3NRMEZCUXp0QlFVTTVSU3hqUVVGTkxFOUJRVThzUlVGQlF5eFRRVUZUTEdGQlFXRXNUMEZCVHl4WFFVRlhMRk5CUVZNc1lVRkJZU3hSUVVGUkxGZEJRVlU3UVVGRk9VWXNZMEZCVFN4bFFVRmxMRU5CUVVNc1VVRkJLMElzVDBGQlR5eFJRVUZSTEZkQlFWY3NUVUZCVFN4SFFVRkhMRWRCUVVjN1FVRkZNMFlzWTBGQlRTeHhRa0ZCY1VJN1FVRkJRU3hWUVVONlFpeHBRa0ZCYVVJN1FVRkJRU3hWUVVOcVFpeHBRa0ZCYVVJN1FVRkJRU3hWUVVOcVFpdzBRa0ZCTkVJN1FVRkJRU3hWUVVNMVFpeExRVUZMTzBGQlFVRXNWVUZEVEN4alFVRmpPMEZCUVVFc1ZVRkRaQ3hMUVVGTE8wRkJRVUVzVlVGRFRDeGpRVUZqTzBGQlFVRXNVVUZEYUVJN1FVRkZRU3hqUVVGTkxHZENRVUZuUWl4aFFVRmhMR05CUVdNN1FVRkRha1FzWTBGQlRTeFJRVUZSTEVkQlFVY3NZVUZCWVN4SFFVRkhMRWxCUVVrN1FVRkRja01zWTBGQlRTeFZRVUZWTEVkQlFVY3NZVUZCWVN4SFFVRkhMRWxCUVVrN1FVRkZka01zV1VGQlNTeGhRVUZoTzBGQlEycENMR2xDUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEU5QlFVOHNSMEZCUnl4TFFVRkxPMEZCUTJwRExIZENRVUZqTzBGQlFVRXNZVUZEVkN4RFFVRkRMR2RDUVVGblFpeGhRVUZoTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkJRU3hqUVVNNVF5eERRVUZETEdkQ1FVRm5RaXhoUVVGaExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTTdRVUZCUVN4alFVTXZReXhEUVVGRExGVkJRVlVzUTBGQlF6dEJRVUZCTEc5Q1FVTk9MRU5CUVVNN1FVRkJRVHRCUVVGQkxGRkJSV1k3UVVGRFFTeHpRa0ZCWXl4WFFVRlhMRTlCUVU4c1EwRkJRenRCUVVWcVF5eGpRVUZOTEdkRFFVRm5ReXhQUVVGUExFbEJRVWtzUzBGQlN6dEJRVUZCTEZkQlEycEVMRWxCUVVrc2IwSkJRVzlDTEV0QlFVc3NUMEZCVHp0QlFVRkJMRzFDUVVNMVFpeExRVUZMTEU5QlFVODdRVUZCUVR0QlFVRkJMRTFCUlhwQ0xGVkJRVlU3UVVGQlFUdEJRVUZCTzBGQlNWWXNZMEZCVFN4clFrRkJhMElzUTBGQlF5eGpRVUZ6UWp0QlFVTTNReXcyUWtGQmJVSXNhMEpCUVd0Q08wRkJRM0pETEdsQ1FVRlBMRTlCUVU4c1NVRkJTU3haUVVGWkxFOUJRVThzU1VGQlNTeEpRVUZKTEZOQlFWTTdRVUZCUVN4UlFVTjRSRHRCUVVWQkxHTkJRVTBzVlVGQmIwSXNRMEZCUXp0QlFVTXpRaXhaUVVGSkxGRkJRVkVzUjBGQlJ6dEJRVU5pTEcxQ1FVRlRMRWxCUVVrc1QwRkJUeXhIUVVGSExFdEJRVXNzUjBGQlJ5eExRVUZMTzBGQlEyeERMRzlDUVVGUkxFdEJRVXNzUjBGQlJ5eGhRVUZoTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWs3UVVGQlFTeFZRVU53UlR0QlFVRkJMRkZCUTBZN1FVRkZRU3hqUVVGTkxHZERRVUZuUXl4UFFVRlBMRWxCUVVrc1MwRkJTenRCUVVGQkxGZEJRMnBFTEVsQlFVa3NZVUZCWVN4TFFVRkxMRTlCUVU4N1FVRkJRU3hoUVVNelFpeFJRVUZSTEV0QlFVc3NSMEZCUnl4RFFVRkRPMEZCUVVFN1FVRkhlRUlzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXhsUVVGMVFqdEJRVU01UXl3MlFrRkJiVUlzYTBKQlFXdENPMEZCUTNKRExHbENRVUZQTEU5QlFVOHNTVUZCU1N4aFFVRmhMRTlCUVU4c1NVRkJTU3hKUVVGSkxGVkJRVlU3UVVGQlFTeFJRVU14UkR0QlFVVkJMR05CUVUwc1ZVRkJWU3hKUVVGSlF5eFZRVU5vUWl4VFFVRlRMRWxCUVVrc1QwRkJUeXhIUVVGSExFdEJRVXNzVDBGQlR5eEpRVUZKUVN4TlFVRkxMRWxCUVVrc1dVRkJXU3hGUVVGRkxFdEJRVXNzUjBGQlJ5eERRVUZETzBGQlJUTkZMR05CUVUwc1lVRkJZU3hEUVVGRExGbEJRVzlDTEZGQlFYVkNPMEZCUXpkRUxHTkJRVWtzVDBGQlR5eEhRVUZITzBGQlExb3NiVUpCUVU4c1IwRkJSeXhWUVVGVk8wRkJRVUVzVlVGRGRFSXNUMEZCVHp0QlFVTk1MRzFDUVVGUExFZEJRVWNzWVVGQllTeFpRVUZaTEV0QlFVc3NTVUZCU1N4RFFVRkRPMEZCUVVFc1ZVRkRMME03UVVGQlFTeFJRVU5HTzBGQlJVRXNZMEZCVFN4aFFVRmhMRU5CUVVNc1dVRkJiMElzUzBGQmIwSXNWVUZCYTBJN1FVRkROVVVzWTBGQlNTeFBRVUZQTEVkQlFVYzdRVUZEV2l4dFFrRkJUeXhIUVVGSExGVkJRVlVzU1VGQlNTeExRVUZMTzBGQlFVRXNWVUZETDBJc1QwRkJUenRCUVVOTUxHMUNRVUZQTEVkQlFVY3NZVUZCWVN4WlFVRlpMRXRCUVVzc1NVRkJTU3hEUVVGRExFbEJRVWtzUzBGQlN6dEJRVUZCTEZWQlEzaEVPMEZCUVVFc1VVRkRSanRCUVVWQkxHTkJRVTBzTWtOQlFXOUZMRU5CUVVNN1FVRkRNMFVzWTBGQlRTdzJRa0ZCTmtJc1EwRkJReXhaUVVGdlFpeFhRVUV3UWp0QlFVTm9SaXcyUWtGQmJVSXNOa0pCUVRaQ08wRkJRMmhFTEdkQ1FVRk5MRlZCUVZVc1IwRkJSeXhQUVVGUExFbEJRVWtzZFVKQlFYVkNMRWxCUVVrN1FVRkRla1FzWTBGQlNTeFhRVUZYTERCRFFVRXdRenRCUVVOMlJDeHRRa0ZCVHl4SFFVRkhMRTlCUVU4c1NVRkJTU3hWUVVGVk8wRkJRVUVzVlVGRGFrTTdRVUZEUVN4blFrRkJUVU1zVjBGQlZTeERRVUZETzBGQlEycENMRzFDUVVGVExFbEJRVWtzVDBGQlR5eEhRVUZITEV0QlFVc3NSMEZCUnl4TFFVRkxPMEZCUTJ4RExHdENRVUZOTEUxQlFVMHNUMEZCVHl4WFFVRlhMR2xDUVVGcFFpeEpRVUZKTEU5QlFVOHNUMEZCVHl4SlFVRkpPMEZCUTNKRkxGbEJRVUZCTEZOQlFWRXNTMEZCU3l4SFFVRkhMRmRCUVZjc1UwRkJVeXhEUVVGRExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNWMEZCVnl4UFFVRlBMRU5CUVVNc1EwRkJReXhIUVVGSE8wRkJRVUVzVlVGREwwVTdRVUZEUVN4dFJFRkJlVU1zVDBGQlR5eEpRVU0xUXl4TlFVRk5MRTlCUVU4c2JVSkJRVzFDTEU5QlFVOHNTMEZCU3l4UFFVRlBPMEZCUVVFc2MwSkJRM3BEUVN4VFFVRlJMRk5CUVZNc1NVRkJTVUVzVTBGQlVTeExRVUZMTEVkQlFVY3NTVUZCU1N4SlFVRkpPMEZCUVVFN1FVRkhNMFFzYVVKQlFVOHNSMEZCUnl4UFFVRlBMRWxCUVVrc1ZVRkJWVHRCUVVGQkxGRkJRMnBETzBGQlJVRXNZMEZCVFN4alFVRmpMRU5CUVVNc1VVRkJkVUlzVjBGQmJVSXNUVUZCVFR0QlFVTnVSU3hqUVVGSkxFdEJRVXNzV1VGQldTeExRVUZMTEU5QlFVODdRVUZETDBJc2JVSkJRVThzUjBGQlJ5eEpRVUZKTEVsQlFVa3NUVUZCVFN4TFFVRkxMRXRCUVVzN1FVRkJRU3hWUVVOd1F5eFhRVUZYTEV0QlFVc3NXVUZCV1N4bFFVRmxMRXRCUVVzc1ZVRkJWU3hQUVVGUE8wRkJSUzlFTEcxQ1FVRlBMRWRCUVVjc1NVRkJTU3hKUVVGSkxFMUJRVTBzYlVKQlFXMUNMRXRCUVVzc09FSkJRVGhDTEV0QlFVczdRVUZCUVN4VlFVTnlSaXhYUVVGWExFdEJRVXNzV1VGQldTeGxRVUZsTEV0QlFVc3NWVUZCVlN4UFFVRlBPMEZCUlM5RUxHMUNRVUZQTEVkQlFVY3NTVUZCU1N4SlFVRkpMRTFCUVUwc2JVSkJRVzFDTEV0QlFVczdRVUZCUVN4VlFVTnNSQ3hYUVVGWExFdEJRVXNzV1VGQldTeFRRVUZUTEV0QlFVc3NWVUZCVlN4alFVRmpPMEZCUldoRkxHMUNRVUZQTEVkQlFVY3NTVUZCU1N4SlFVRkpMRTFCUVUwc09FUkJRVGhFTEV0QlFVczdRVUZCUVN4VlFVTTNSaXhQUVVGUE8wRkJRMHdzYTBKQlFVMHNTVUZCU1N4TlFVRk5MRFpEUVVFMlF5eExRVUZMTEU5QlFVOHNiVUpCUVcxQ0xFdEJRVXNzUzBGQlN5eE5RVUZOTzBGQlFVRXNWVUZET1VjN1FVRkJRU3hSUVVOR0xFZEJRVWM3UVVGRlNDeGpRVUZOTEdOQlFXTXNRMEZCUXl4WlFVRXlRaXhOUVVGTk8wRkJRM0JFTEdOQlFVa3NTMEZCU3l4WlFVRlpMRXRCUVVzc1QwRkJUenRCUVVNdlFpeHRRa0ZCVHl4SFFVRkhMRWxCUVVrc1NVRkJTU3hOUVVGTk8wRkJRVUVzVlVGRE1VSXNWMEZCVnl4TFFVRkxMRmxCUVZrc1pVRkJaU3hMUVVGTExGVkJRVlVzVDBGQlR6dEJRVVV2UkN4dFFrRkJUeXhQUVVGUExFbEJRVWtzU1VGQlNTeE5RVUZOTzBGQlFVRXNWVUZET1VJc1YwRkJWeXhMUVVGTExGbEJRVmtzWlVGQlpTeExRVUZMTEZWQlFWVXNUMEZCVHp0QlFVVXZSQ3h0UWtGQlR5eFBRVUZQTEVsQlFVa3NTVUZCU1N4TlFVRk5PMEZCUVVFc1ZVRkRPVUlzVjBGQlZ5eExRVUZMTEZsQlFWa3NVMEZCVXl4TFFVRkxMRlZCUVZVc1kwRkJZenRCUVVWb1JTeHRRa0ZCVHl4dFFrRkJiVUlzU1VGQlNTeEpRVUZKTEUxQlFVMHNiMEpCUVc5Q0xFbEJRVWtzU1VGQlNTeE5RVUZOTEhOQ1FVRnpRaXhKUVVGSkxFbEJRMmhITEUxQlFVMHNkMEpCUVhkQ0xFbEJRVWtzU1VGQlNTeE5RVUZOTzBGQlFVRXNWVUZEYkVRc1QwRkJUenRCUVVOTUxHdENRVUZOTEVsQlFVa3NUVUZCVFN3MlEwRkJOa01zUzBGQlN5eFBRVUZQTEcxQ1FVRnRRaXhMUVVGTExFdEJRVXNzVFVGQlRUdEJRVUZCTEZWQlF6bEhPMEZCUVVFc1VVRkRSaXhIUVVGSE8wRkJSVWdzWTBGQlRTdzJRa0ZCTmtJc1QwRkJUeXhKUVVGSkxFdEJRVXM3UVVGQlFTeFhRVU01UXl4SlFVRkpMSE5DUVVGelFpeExRVUZMTEU5QlFVOHNVVUZCVVN4VFFVRlRPMEZCUVVFc1lVRkRja1FzV1VGQldTeFBRVUZQTEVsQlFVa3NWMEZCVnl4RFFVRkRPMEZCUVVFN1FVRkhNVU1zWTBGQlRTeHZRa0ZCYjBJc1QwRkJUeXhKUVVGSkxFMUJRVTBzVFVGQlRUdEJRVU12UXl4blFrRkJUU3hwUWtGQmFVSXNZVUZCWVN4SlFVRkpMRTlCUVVzc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeExRVUZMTEVsQlFVazdRVUZEY0VVc1owSkJRVTBzWVVGQllTeGhRVUZoTEVsQlFVa3NUMEZCU3l4SlFVRkpMRU5CUVVNc1JVRkJSU3hGUVVGRkxFdEJRVXNzU1VGQlNUdEJRVU16UkN4cFFrRkJUenRCUVVGQkxGZEJRMG9zU1VGQlNTeEpRVUZKTEdOQlFXTXNVVUZCVVN4VFFVRlRPMEZCUVVFc2FVSkJRMnBETEVsQlFVa3NZVUZCWVN4UlFVRlJMRlZCUVZVc1EwRkJRenRCUVVGQk8wRkJRVUVzVVVGRkwwTXNSMEZCUnp0QlFVVklMR05CUVUwc1RVRkJUU3hKUVVGSlF5eGhRVUV3UXp0QlFVTjRSQ3hqUVVGSlFTeFRRVUZSTEZkQlFWY3NUVUZCVFR0QlFVTXpRaXhyUWtGQlRTeEpRVUZKTEUxQlFVMHNNRUpCUVRCQ0xFbEJRVWtzUlVGQlJUdEJRVUZCTEZWQlEyeEVPMEZCUlVFc1owSkJRVTBzYjBKQlFXOUNRU3hUUVVGUkxFbEJRVWtzV1VGQldTeEZRVUZGTEV0QlFVc3NSMEZCUnp0QlFVVTFSQ3hqUVVGSkxGTkJRVk1zUjBGQlJ6dEJRVU5rTEcxQ1FVRlBMRmxCUVZrc1NVRkJTVHRCUVVGQkxGVkJRM3BDTEZkQlFWY3NVMEZCVXl4SFFVRkhPMEZCUTNKQ0xHMUNRVUZQTEZsQlFWa3NhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dEJRVUZCTEZWQlEzcERMRTlCUVU4N1FVRkRUQ3dyUWtGQmJVSXNUVUZCVFR0QlFVTjZRaXdyUWtGQmJVSXNaVUZCWlR0QlFVTnNReXdyUWtGQmJVSXNhMEpCUVd0Q08wRkJRM0pETEcxQ1FVRlBMRTlCUVU4c1NVRkJTU3hKUVVGSkxHbENRVUZwUWp0QlFVRkJMRlZCUTNwRE8wRkJRVUVzVVVGRFJqdEJRVVZCTEdOQlFVMHNaVUZCWlN4RFFVRkRMR1ZCUVhWQ08wRkJRek5ETEdOQlFVa3NUMEZCVHl4SFFVRkhPMEZCUTFvc2JVSkJRVThzV1VGQldTeFZRVUZWTzBGQlFVRXNWVUZETDBJc1QwRkJUenRCUVVOTUxDdENRVUZ0UWl4bFFVRmxPMEZCUTJ4RExDdENRVUZ0UWl4clFrRkJhMEk3UVVGRGNrTXNiVUpCUVU4c1QwRkJUeXhKUVVGSkxHRkJRV0VzVlVGQlZUdEJRVUZCTEZWQlF6TkRPMEZCUVVFc1VVRkRSanRCUVVWQkxHTkJRVTBzTmtKQlFUWkNMRTlCUVU4c1NVRkJTU3hMUVVGTE8wRkJRVUVzVjBGRE9VTXNTVUZCU1N4elFrRkJjMElzUzBGQlN5eFBRVUZQTEZsQlFWa3NVMEZCVXp0QlFVRkJMRTFCUTJoRkxGbEJRVmtzVDBGQlR5eEpRVUZKTEdGQlFXRXNUMEZCVHl4RFFVRkRPMEZCUVVFN1FVRkhOVU1zWTBGQlRTeHZRa0ZCYjBJc1QwRkJUeXhKUVVGSkxFMUJRVTBzVFVGQlRUdEJRVU12UXl4blFrRkJUU3hwUWtGQmFVSXNZVUZCWVN4SlFVRkpMRTlCUVVzc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeExRVUZMTEVsQlFVazdRVUZEY0VVc1owSkJRVTBzWVVGQllTeGhRVUZoTEVsQlFVa3NUMEZCU3l4SlFVRkpMRU5CUVVNc1JVRkJSU3hGUVVGRkxFdEJRVXNzU1VGQlNUdEJRVU16UkN4cFFrRkJUenRCUVVGQkxGZEJRMG9zU1VGQlNTeEpRVUZKTEdOQlFXTXNXVUZCV1N4VFFVRlRPMEZCUVVFc1ZVRkROVU1zU1VGQlNTeGhRVUZoTEZGQlFWRXNWVUZCVlN4RFFVRkRPMEZCUVVFN1FVRkJRU3hSUVVWNFF5eEhRVUZITzBGQlJVZ3NZMEZCVFN4TlFVRk5MRWxCUVVrc2IwSkJRV3RFTzBGQlEyaEZMR05CUVVrc1owSkJRV2RDTEZkQlFWY3NUMEZCVHl4SFFVRkhPMEZCUTNaRExHdENRVUZOTEVsQlFVa3NUVUZCVFN3d1FrRkJNRUlzU1VGQlNTeEZRVUZGTzBGQlFVRXNWVUZEYkVRN1FVRkRRU3huUWtGQlRTeFJRVUZSTEdkQ1FVRm5RaXhKUVVGSk8wRkJRMnhETEdOQlFVa3NUMEZCVHl4VlFVRlZMRlZCUVZVN1FVRkROMElzYTBKQlFVMHNTVUZCU1N4TlFVRk5MSE5DUVVGelFqdEJRVUZCTEZWQlEzaERPMEZCUlVFc1owSkJRVTBzYjBKQlFXOUNMR2RDUVVGblFpeE5RVUZOTEVkQlFVY3NTVUZCU1N4RlFVRkZMRWxCUVVrc1dVRkJXU3hGUVVGRkxFdEJRVXNzUjBGQlJ6dEJRVVZ1Uml4alFVRkpMRk5CUVZNc1IwRkJSenRCUVVOa0xHMUNRVUZQTEZsQlFWa3NUVUZCVFN4TFFVRkxPMEZCUVVFc1ZVRkRhRU1zVjBGQlZ5eFRRVUZUTEVkQlFVYzdRVUZEY2tJc2JVSkJRVThzV1VGQldTeHJRa0ZCYTBJc1EwRkJReXhIUVVGSExFdEJRVXM3UVVGQlFTeFZRVU5vUkN4UFFVRlBPMEZCUTB3c0swSkJRVzFDTEUxQlFVMDdRVUZEZWtJc0swSkJRVzFDTEdWQlFXVTdRVUZEYkVNc0swSkJRVzFDTEd0Q1FVRnJRanRCUVVOeVF5eHRRa0ZCVHl4UFFVRlBMRWxCUVVrc1NVRkJTU3hwUWtGQmFVSXNTMEZCU3l4TFFVRkxPMEZCUVVFc1ZVRkRia1E3UVVGQlFTeFJRVU5HTzBGQlJVRXNZMEZCVFN4bFFVRmxMRU5CUVVNc1dVRkJiMElzVlVGQmEwSTdRVUZETVVRc1kwRkJTU3hQUVVGUExFZEJRVWM3UVVGRFdpeHRRa0ZCVHl4WlFVRlpMRmxCUVZrc1MwRkJTenRCUVVGQkxGVkJRM1JETEU5QlFVODdRVUZEVEN3clFrRkJiVUlzWlVGQlpUdEJRVU5zUXl3clFrRkJiVUlzYTBKQlFXdENPMEZCUTNKRExHMUNRVUZQTEU5QlFVOHNTVUZCU1N4aFFVRmhMRlZCUVZVc1MwRkJTeXhMUVVGTE8wRkJRVUVzVlVGRGNrUTdRVUZCUVN4UlFVTkdPMEZCUlVFc1kwRkJUU3hQUVVGUExFMUJRVTA3UVVGRGFrSXNaMEpCUVUwc1VVRkJVU3hEUVVGRE8wRkJRMllzWTBGQlNTeHRRa0ZCYlVJN1FVRkRka0lzWTBGQlNTeHRRa0ZCYlVJc2FVSkJRV2xDTzBGQlEzUkRMR3RDUVVGTkxFdEJRVXNzTmtKQlFUWkNPMEZCUTNoRExDdENRVUZ0UWp0QlFVRkJMRlZCUTNKQ08wRkJRMEVzWTBGQlNTeHRRa0ZCYlVJc2FVSkJRV2xDTzBGQlEzUkRMR3RDUVVGTkxFdEJRVXNzTmtKQlFUWkNPMEZCUTNoRExDdENRVUZ0UWp0QlFVRkJMRlZCUTNKQ08wRkJRMEVzWTBGQlNTeHRRa0ZCYlVJc05FSkJRVFJDTzBGQlEycEVMRzFDUVVGUExFOUJRVThzZDBOQlFYZERMRVZCUVVVc1VVRkJVU3hEUVVGQlF5eFZRVUZSTEUxQlFVMHNTMEZCUzBFc1MwRkJTU3hEUVVGRE8wRkJRM2hHTEN0Q1FVRnRRanRCUVVGQkxGVkJRM0pDTzBGQlEwRXNZMEZCU1N4dFFrRkJiVUlzUzBGQlN6dEJRVU14UWl4clFrRkJUU3hMUVVGTExHbENRVUZwUWp0QlFVTTFRaXdyUWtGQmJVSTdRVUZCUVN4VlFVTnlRanRCUVVOQkxHTkJRVWtzYlVKQlFXMUNMR05CUVdNN1FVRkRia01zYTBKQlFVMHNTMEZCU3l3d1FrRkJNRUk3UVVGRGNrTXNLMEpCUVcxQ08wRkJRVUVzVlVGRGNrSTdRVUZEUVN4alFVRkpMRzFDUVVGdFFpeExRVUZMTzBGQlF6RkNMR3RDUVVGTkxFdEJRVXNzYVVKQlFXbENPMEZCUXpWQ0xDdENRVUZ0UWp0QlFVRkJMRlZCUTNKQ08wRkJRMEVzWTBGQlNTeHRRa0ZCYlVJc1kwRkJZenRCUVVOdVF5eHJRa0ZCVFN4TFFVRkxMREJDUVVFd1FqdEJRVU55UXl3clFrRkJiVUk3UVVGQlFTeFZRVU55UWp0QlFVTkJMR05CUVVrc1EwRkJReXhqUVVGakxHdENRVUZyUWp0QlFVTnVReXhyUWtGQlRUdEJRVUZCTEdOQlEwWXNVMEZCVXl4TFFVRkxMRTFCUVUwc1MwRkJTeXhQUVVGUExFbEJRVWtzV1VGQldTeExRVUZMTEVkQlFVY3NRMEZCUXp0QlFVRkJMR05CUTNwRUxGTkJRVk1zVDBGQlR5eE5RVUZOTEV0QlFVc3NUMEZCVHl4SlFVRkpMRlZCUVZVc1pVRkJaU3hYUVVGWExFVkJRVVVzUzBGQlN5eEhRVUZITEVOQlFVTTdRVUZCUVN4WlFVRkpPMEZCUVVFc1ZVRkRMMFk3UVVGRFFTeHBRa0ZCVHl4TlFVRk5MRXRCUVVzc1NVRkJTVHRCUVVGQkxGRkJRM2hDTzBGQlJVRXNaVUZCVHp0QlFVRkJMRlZCUTB3N1FVRkJRU3hWUVVOQk8wRkJRVUVzVlVGRFFUdEJRVUZCTEZWQlEwRTdRVUZCUVN4VlFVTkJPMEZCUVVFc1ZVRkRRVHRCUVVGQkxGVkJRMEU3UVVGQlFTeFZRVU5CTzBGQlFVRXNWVUZEUVR0QlFVRkJMRlZCUTBFN1FVRkJRU3hWUVVOQk8wRkJRVUVzVlVGRFFUdEJRVUZCTEZWQlEwRTdRVUZCUVN4VlFVTkJPMEZCUVVFN1FVRkJRU3hWUVVWQk8wRkJRVUVzVlVGRFFUdEJRVUZCTEZWQlEwRTdRVUZCUVN4VlFVTkJPMEZCUVVFc1ZVRkRRVHRCUVVGQkxGRkJRMFk3UVVGQlFTeE5RVU5HTzBGQlYwY3NUVUZCVFN4blFrRkRWQ3hEUVVGRExFMUJRV01zVFVGQll5eGhRVUYxUXl4aFFVRnpRaXhOUVVOMFJpeHZRa0ZCYjBJc1RVRkJUU3hOUVVGTkxHRkJRV0VzVTBGQlV5eFZRVUZWTzBGQlYycEZMRTFCUVUwc2FVSkJRMVFzUTBGQlF5eE5RVUZqTEUxQlFXTXNZVUZCZFVNc1lVRkJjMElzVFVGRGRFWXNiMEpCUVc5Q0xFMUJRVTBzVFVGQlRTeGhRVUZoTEZWQlFWVXNWVUZCVlR0QlFWZHNSU3hOUVVGTkxHMUNRVU5VTEVOQlFVTXNUVUZCWXl4TlFVRmpMR0ZCUVhWRExHRkJRWE5DTEUxQlEzUkdMRzlDUVVGdlFpeE5RVUZOTEUxQlFVMHNZVUZCWVN4WlFVRlpMRlZCUVZVN1FVRTRSVE5GTEUxQlFVMHNiVUpCUVU0c1RVRkJLME03UVVGQlFTeFJRVU0zUXl4WlFVRnZRaXg1UWtGQk1rUXNVVUZCTkVJN1FVRkJka1k3UVVGQk1rUTdRVUZ2Unk5RkxHVkJRVkVzYjBKQlFYRkRMRU5CUVVNN1FVRkRPVU1zWlVGQlVTeFpRVUUyUWl4RFFVRkRPMEZCUTNSRExHVkJRVkVzVjBGQk9FSXNRMEZCUXp0QlFYZENka01zWlVGQlVTeG5Ra0ZCWjBJN1FVRkJRU3hSUVRsSWIwWTdRVUZCUVN4UlFVVTFSeXh6UTBGQmMwTXNUVUZCTmtJN1FVRkZha1VzWjBKQlFVMHNZVUZCWVN4UFFVRlBMRk5CUVZNc1YwRkJWeXhIUVVGSExFbEJRVWtzVFVGQlRUdEJRVU16UkN4cFFrRkJUeXh4UWtGQmNVSXNWVUZCVlR0QlFVRkJMRkZCUTNoRE8wRkJRVUVzVVVGRlFTeFZRVUZWTEdkQ1FVRnBSQ3huUWtGQlowSTdRVUZEZWtVc1owSkJRVTBzYVVKQlFXbENMRTlCUVU4c2EwSkJRV3RDTEZkQlFWY3NaMEpCUVdkQ0xHTkJRV01zUTBGQlF6dEJRVU14Uml4blFrRkJUU3hwUWtGQmFVSXNUMEZCVHl4clFrRkJhMElzVjBGQlZ5eEpRVUZKTEdOQlFXTXNRMEZCUXp0QlFVTTVSU3huUWtGQlRTeHBRa0ZCYVVJc1QwRkJUeXhyUWtGQmEwSXNWMEZCVnl4SlFVRkpMR05CUVdNc1EwRkJRenRCUVVVNVJTeGpRVUZKTEdsQ1FVRnBRaXhMUVVGTExFOUJRVThzTkVKQlF6ZENMR2xDUVVGcFFpeExRVUZMTEU5QlFVOHNORUpCUXpkQ0xHbENRVUZwUWl4TFFVRkxMRTlCUVU4c01FSkJRVEJDTzBGQlEzcEVMR3RDUVVGTkxFbEJRVWtzVFVGQlRTeHRRa0ZCYlVJc1kwRkJZeXhMUVVGTExHTkJRV01zUzBGRGFFVXNZMEZCWXl4NVEwRkJlVU1zUzBGQlN5eFBRVUZQTEhkQ1FVRjNRaXhMUVVNelJpeExRVUZMTEU5QlFVOHNkMEpCUVhkQ0xFdEJRVXNzUzBGQlN5eFBRVUZQTEhkQ1FVRjNRaXhKUVVGSk8wRkJRVUVzVlVGRGRrWTdRVUZGUVN4alFVRkpMR2xDUVVGcFFpeHBRa0ZCYVVJc2FVSkJRV2xDTEV0QlFVc3NUMEZCVHl4dFEwRkJiVU03UVVGRGNFY3NhMEpCUVUwc1NVRkJTU3hOUVVGTkxHMUNRVUZ0UWl4alFVRmpMRXRCUVVzc1kwRkJZeXhMUVVOb1JTeGpRVUZqTEN0RFFVTmtMRXRCUVVzc1QwRkJUeXhwUTBGQmFVTXNSMEZCUnp0QlFVRkJMRlZCUTNSRU8wRkJSVUVzWjBKQlFVMHNkVUpCUVhWQ0xFdEJRVXNzZDBKQlFYZENMRU5CUVVNc1RVRkJUU3hMUVVGTExFdEJRVXNzZDBKQlFYZENMRU5CUVVNc1RVRkJUVHRCUVVNeFJ5eG5Ra0ZCVFN4WlFVRlpMSFZDUVVGMVFqdEJRVUZCTzBGQlFVRXNNRVJCUjBFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVXQ2UXl4blFrRkJUU3h6UWtGQmMwSXNkVUpCUTNoQ0xEaEVRVU5CTzBGQlFVRXNiVVZCUlVrc2FVSkJRV2xDTEdsQ1FVRnBRaXhqUVVGak8wRkJSWGhFTEdsQ1FVRlBMRFJDUVVFMFFpeGpRVUZqTEV0QlFVc3NZMEZCWXl4TFFVRkxMR05CUVdNN1FVRkJRU3haUVVNdlJTeFRRVUZUTzBGQlFVRXNUVUZEWml4dFFrRkJiVUk3UVVGQlFUdEJRVUZCTEZGQlJYWkNPMEZCUVVFc1VVRkZVU3gxUWtGQmRVSXNWVUZCSzBJN1FVRkROVVFzWTBGQlNTeFRRVUZUTEZOQlFWTXNSMEZCUnp0QlFVTjJRaXhuUWtGQlNTeFRRVUZUTEUxQlFVMHNWMEZCVnl4WFFVRlhMRWRCUVVjN1FVRkRNVU1zYlVKQlFVc3NVMEZCVXl4TFFVRkxMRVZCUVVNc1RVRkJUU3hUUVVGVExFMUJRVTBzVVVGQlVTeGhRVUZoTEVWQlFVVXNSMEZCUnl4TlFVRk5MRTlCUVU4c1VVRkJVU3hUUVVGVExFdEJRVWtzUTBGQlF6dEJRVUZCTEZsQlEzaEhPMEZCUTBFc1owSkJRVWtzVTBGQlV5eFJRVUZSTEZkQlFWY3NWMEZCVnl4SFFVRkhPMEZCUXpWRExHMUNRVUZMTEZOQlFWTXNTMEZCU3l4RlFVRkRMRTFCUVUwc1UwRkJVeXhSUVVGUkxGRkJRVkVzWVVGQllTeEZRVUZGTEVkQlFVY3NUVUZCVFN4UFFVRlBMRkZCUVZFc1UwRkJVeXhMUVVGSkxFTkJRVU03UVVGQlFTeFpRVU14Unp0QlFVRkJMRlZCUTBZN1FVRkJRU3hSUVVOR08wRkJRVUVzVVVGRlVTeG5Ra0ZCWjBJc1ZVRkJlVUlzWTBGQk9FSTdRVUZETjBVc1kwRkJTU3hUUVVGVExGVkJRVlVzV1VGQldUdEJRVU5xUXl4clFrRkJUU3hKUVVGSkxFMUJRVTBzSzBaQlFTdEdPMEZCUVVFc1ZVRkRha2c3UVVGRFFTeGxRVUZMTEZWQlFWVXNTMEZCU3l4UlFVRlJPMEZCUXpWQ0xHVkJRVXNzZFVKQlFYVkNMRkZCUVZFN1FVRkZjRU1zWjBKQlFVMHNVMEZCVXl4VFFVRlRMRlZCUVZVc1ZVRkJWU3hUUVVGVE8wRkJRM0pFTEdkQ1FVRk5MR05CUVdNc1UwRkJVeXhMUVVGTE8wRkJRMnhETEdsQ1FVRlBMSE5DUVVGelFpeFpRVUZaTEd0Q1FVRnJRaXhOUVVGTkxFdEJRVXNzVTBGQlV5eEpRVUZKTEZkQlFWY3NWMEZCVnp0QlFVRkJMRkZCUXpOSE8wRkJRVUVzVVVGRlFTeHZRa0ZCYjBJc1YwRkJiME03UVVGRGRFUXNhVUpCUVU4c1ZVRkJWU3hKUVVGSkxFOUJRVXNzUzBGQlN5eG5Ra0ZCWjBJc1IwRkJSeXhMUVVGTExHVkJRV1VzUTBGQlF5eEZRVUZGTEV0QlFVc3NTVUZCU1R0QlFVRkJMRkZCUTNCR08wRkJRVUVzVVVGRlVTeDVRa0ZCZVVJc1ZVRkJLMEk3UVVGRE9VUXNZMEZCU1N4VFFVRlRMRlZCUVZVc1dVRkJXVHRCUVVOcVF5eHJRa0ZCVFN4SlFVRkpPMEZCUVVFc1kwRkRUanRCUVVGQkxGbEJRWE5ITzBGQlFVRXNWVUZETlVjN1FVRkZRU3hsUVVGTExHdENRVUZyUWl4TFFVRkxMRkZCUVZFN1FVRkRjRU1zWlVGQlN5eDFRa0ZCZFVJc1VVRkJVVHRCUVVGQkxGRkJRM1JETzBGQlFVRXNVVUZGUVN3MlFrRkJOa0lzVjBGQk1FTTdRVUZEY2tVc2IwSkJRVlVzVVVGQlVTeFBRVUZMTEV0QlFVc3NlVUpCUVhsQ0xFTkJRVU1zUTBGQlF6dEJRVU4yUkN4cFFrRkJUenRCUVVGQkxGRkJRMVE3UVVGQlFTeFJRVVZCTEdkQ1FVRm5RaXhOUVVGakxFMUJRVGhDTEZOQlFWTXNSMEZCYVVJN1FVRkRjRVlzWlVGQlN5eFRRVUZUTEV0QlFVc3NSVUZCUXl4TlFVRk5MRTFCUVUwc1QwRkJUU3hEUVVGRE8wRkJRM1pETEdsQ1FVRlBPMEZCUVVFc1VVRkRWRHRCUVVGQkxGRkJSVUVzYVVKQlFXbENMRzlDUVVGeFJEdEJRVU53UlN4bFFVRkxMRmRCUVZjc1MwRkJTeXhUUVVGVExFOUJRVThzYTBKQlFXdENPMEZCUTNaRUxHbENRVUZQTzBGQlFVRXNVVUZEVkR0QlFVRkJMRkZCUzFFc2NVSkJRVFpDTzBGQlEyNURMR05CUVVrc1MwRkJTeXhUUVVGVExGZEJRVmNzUjBGQlJ6dEJRVU01UWl4dFFrRkJUenRCUVVGQkxGVkJRMVE3UVVGRlFTeG5Ra0ZCVFN4clFrRkJORUlzUTBGQlF6dEJRVU51UXl4eFFrRkJWeXhGUVVGRExFMUJRVTBzVFVGQlRTeFBRVUZOTEV0QlFVc3NTMEZCU3l4VlFVRlZPMEZCUTJoRUxHZENRVUZKTEZWQlFWVXNVMEZCVXl4SFFVRkhPMEZCUTNoQ0xHdENRVUZKTEZOQlFWTXNUMEZCVHp0QlFVTnNRaXhuUTBGQlowSXNTMEZCU3l4alFVRmpMRWxCUVVrc2FVSkJRV2xDTEVsQlFVa3NUVUZCVFN4TFFVRkxMRXRCUVVzc1UwRkJVeXhEUVVGRExFTkJRVU1zUjBGQlJ6dEJRVUZCTEdOQlF6VkdMRTlCUVU4N1FVRkRUQ3huUTBGQlowSXNTMEZCU3l4SFFVRkhMRWxCUVVrc1pVRkJaU3hKUVVGSkxFMUJRVTBzUzBGQlN5eExRVUZMTEZOQlFWTXNRMEZCUXl4RFFVRkRMRWRCUVVjN1FVRkJRU3hqUVVNdlJUdEJRVUZCTEZsQlEwWXNUMEZCVHp0QlFVTk1MRzlDUVVGTkxGZEJRVmNzVlVGQlZTeFJRVUZSTEZkQlFWY3NTVUZCU1N4UFFVRlBMRTFCUVUwc1RVRkJUU3hKUVVGSkxFbEJRVWs3UVVGRE4wVXNPRUpCUVdkQ0xFdEJRVXNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NVVUZCVVN4RlFVRkZPMEZCUVVFc1dVRkROVU03UVVGQlFTeFZRVU5HTzBGQlJVRXNhVUpCUVU4N1FVRkJRU3d3UWtGRFpTeG5Ra0ZCWjBJc1MwRkJTeXhKUVVGSkxFTkJRVU03UVVGQlFTd3lRa0ZEZWtJc1MwRkJTeXhoUVVGaE8wRkJRVUVzVVVGRE0wTTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3hSUVUxQkxFbEJRVWtzTkVKQlFXOURPMEZCUTNSRExHbENRVUZQTEV0QlFVc3NiVUpCUVcxQ0xFbEJRVWtzUzBGQlN5eFZRVUZWTEVsQlFVa3NUMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhGUVVGRkxFdEJRVXNzU1VGQlNTeEpRVU14UlN4TFFVRkxMR3RDUVVGclFpeEpRVUZKTEU5QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1JVRkJSU3hMUVVGTExFbEJRVWs3UVVGQlFTeFJRVU42UkR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxGRkJTMEVzU1VGQlNTeG5Ra0ZCZDBRN1FVRkRNVVFzWTBGQlNTeExRVUZMTEZOQlFWTXNWMEZCVnl4SFFVRkhPMEZCUXpsQ0xHMUNRVUZQTzBGQlFVRXNWVUZEVkR0QlFVVkJMR2RDUVVGTkxEUkNRVUUwUWl4RFFVRkRMRk5CUXpsQ08wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4VlFVTmxMRVZCUVVVc1EwRkJReXhQUVVGUExFOUJRVThzVDBGQlR5eExRVUZMTEVWQlFVVXNVVUZCVVN4SlFVRkpMRU5CUVVNN1FVRkRhRVVzYVVKQlFVOHNTMEZCU3l4VFFVRlRMRWxCUVVrc1QwRkJUU3hEUVVGRExEQkNRVUV3UWl4RlFVRkZMRWxCUVVrc1IwRkJSeXhGUVVGRkxGVkJRVlVzUTBGQlF5eERRVUZGTzBGQlFVRXNVVUZEY0VZN1FVRkJRU3hOUVVOR08wRkJSVThzVFVGQlRTeHhRa0ZCY1VJc1EwRkJReXhsUVVGNVF5eFhRVU40UlN4SlFVRkpMR2xDUVVGcFFpeGxRVUZsTEUxQlFVMDdRVUZaZGtNc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXl4VFFVRTBRaXhoUVVFd1F6dEJRVU55Unl4alFVRk5MRk5CUVZNc1VVRkJVVHRCUVVOMlFpeGpRVUZOTEU5QlFXbENMRU5CUVVNN1FVRkRlRUlzYVVKQlFWTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1VVRkJVU3hMUVVGTE8wRkJReTlDTEdkQ1FVRk5MRTFCUVUwc1UwRkJVeXhKUVVGSk8wRkJRM3BDTEdkQ1FVRk5MRWxCUVVrc1VVRkJVU3hIUVVGSExFdEJRVXM3UVVGRE1VSXNaMEpCUVUwc1NVRkJTU3hUUVVGVExGTkJRVk1zVTBGQlV5eEpRVUZKTEVOQlFVTXNTMEZCU3p0QlFVTXZReXhqUVVGSkxFbEJRVWtzUzBGQlN5eE5RVUZOTEVkQlFVYzdRVUZEY0VJc2FVSkJRVXNzVVVGQlVTeEhRVUZITzBGQlFVRXNWVUZEYkVJN1FVRkJRU3hSUVVOR08wRkJRMEVzWlVGQlR6dEJRVUZCTEUxQlExUTdRVUZCUVR0QlFVRkJPenM3UVVOcU9FSkJMRTFCWlUwc1owSkJUVUVzYVVKQlIwRXNaMEpCUjBFc2EwSkJWMDhzTkVKQmNVTkJMRmRCUzBFN1FVRm9SbUk3UVVGQlFUdEJRVUZCTzBGQlIwRTdRVUZGUVR0QlFVTkJPMEZCUjBFN1FVRk5RU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRMRmRCUVhkRE8wRkJRemxFTEZsQlFVa3NRMEZCUXl4VlFVRlZMRTlCUVU4c1YwRkJWeXhIUVVGSE8wRkJRMnhETEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3cyUWtGQk5rSTdRVUZCUVN4UlFVTXZRenRCUVVGQkxFMUJRMFk3UVVGRlFTeE5RVUZOTEd0Q1FVRnJRaXhEUVVGRExGZEJRVzFDTEZOQlEzWkRMRkZCUVZFc1MwRkJTeXhYUVVGWExGbEJRV0VzUTBGQlF5eEhRVUZKTEVsQlFVa3NUVUZCVFN4VFFVRlRMRVZCUVVVc1MwRkJTeXhEUVVGRkxFVkJRVVVzVVVGQlVTeEpRVUZKTzBGQlJYcEdMRTFCUVUwc2FVSkJRV2xDTEVOQlFVTXNXVUZCSzBJc1UwRkRia1FzVlVGQlZTeG5Ra0ZCWjBJc1dVRkJXU3huUWtGQlowSXNWMEZCVnl4UlFVRlJMRWxCUVVrc1EwRkJRenRCUVVWc1JpeE5RVUZOTEcxQ1FVRnRRaXhEUVVGRExFMUJRV2RDTEUxQlFXTXNUMEZCYzBJc1YwRkJhME03UVVGRE9VY3NZMEZCVFN4alFVRmpMRU5CUVVNN1FVRkRja0lzYjBKQlFWa3NTMEZCU3l4alFVRmpMRTlCUVU4c1MwRkJTeXhQUVVGUExGRkJRVkVzVFVGQlRTeExRVUZMTEU5QlFVODdRVUZCUVN4aFFVTnFSU3hOUVVGTkxFdEJRVXNzVDBGQlR5eEhRVUZITzBGQlEyaERMR2xDUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEUxQlFVMHNSVUZCUlN4SFFVRkhPMEZCUXpkQ0xITkNRVUZaTEV0QlFVc3NUVUZCVFN4WFFVRlhMRXRCUVVzc1MwRkJTeXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXp0QlFVRkJMRkZCUXpWRU8wRkJRMEVzYjBKQlFWa3NTMEZCU3l4WlFVRlpPMEZCUXpkQ0xHVkJRVThzV1VGQldTeExRVUZMTEVsQlFVazdRVUZCUVN4TlFVTTVRanRCUVVWUExFMUJRVTBzTmtKQlFUWkNMRU5CUVVNc1lVRkJlVUlzWVVGQmIwTTdRVUZEZEVjc1kwRkJUU3huUWtGQlowSXNXVUZCV1R0QlFVTnNReXhqUVVGTkxGbEJRVmtzV1VGQldTeExRVUZMTzBGQlEyNURMR05CUVUwc1QwRkJUeXhuUWtGQlowSXNWMEZCVnl4UlFVRlJPMEZCUTJoRUxHTkJRVTBzWTBGQll5eGxRVUZsTEZsQlFWa3NUVUZCVFN4SlFVRkpPMEZCUTNwRUxHTkJRVTBzVTBGQlV5eGxRVUZsTEZWQlFWVXNaVUZCWlN4WlFVRlpMRTFCUVUwN1FVRkRla1VzWTBGQlRTeFJRVUZSTEdOQlFXTXNTMEZCU3l4bFFVRmxMRk5CUVZNN1FVRkZla1FzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQkswSTdRVUZCUVN4SlFVTjBSQ3hoUVVGaExHZENRVUZuUWl4bFFVRmxMRXRCUVVzc1JVRkJSU3hwUWtGQmFVSXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkJRVHRCUVVGQkxFbEJSV3hHTEdsQ1FVRnBRaXhOUVVGTkxGZEJRVmNzVDBGQlR5eE5RVUZOTEVOQlFVTTdRVUZCUVR0QlFVRkJMRWxCUldoRUxHRkJRV0VzVlVGQlZTeERRVUZETzBGQlFVRXNUVUZEZEVJc1lVRkJZU3h6UTBGQmMwTXNjMEpCUVhOQ0xFTkJRVU03UVVGQlFUdEJRVUZCTEc5Q1FVVTFSQ3hQUVVGUExHZENRVUZuUWl4WlFVRlpMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJRVUVzVFVGSGJFUXNUMEZCVHl4WlFVRlpMR05CUVdNc1RVRkJUU3hoUVVGaExGVkJRVlVzUTBGQlF5eERRVUZETzBGQlFVRTdRVUZGY0VVc1pVRkJUenRCUVVGQkxGVkJRMHdzVFVGQlRUdEJRVUZCTEZWQlEwNHNZVUZCWVN4RlFVRkRMRTFCUVUwc1IwRkJSeXhSUVVGUkxFbEJRVWtzYlVKQlFXMUNMRU5CUVVNc1RVRkJUU3hGUVVGRE8wRkJRVUVzVlVGRE9VUXNXVUZCV1N4RFFVRkRMRmRCUVZjN1FVRkRkRUlzYTBKQlFVMHNZVUZCWVN4VlFVRlZMRXRCUVVzc1YwRkJWenRCUVVNM1F5eHRRa0ZCVHp0QlFVRkJMR05CUTB3c1UwRkJVeXhEUVVGRExFVkJRVU1zVFVGQlRTeGhRVUZoTEZWQlFWVXNUMEZCVHl4RFFVRkRMRVZCUVVVc1UwRkJVU3hEUVVGRE8wRkJRVUVzWTBGRE0wUXNaVUZCWlN4RlFVRkRMRWRCUVVjc1MwRkJTenRCUVVGQkxHZENRVUZMTEdGQlFXRTdRVUZCUVR0QlFVRkJMR05CUVhWQ0xFVkJRVU03UVVGQlFTeGpRVU5zUlN4cFFrRkRTU3hEUVVGRExFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc1YwRkJWU3hIUVVGSExFZEJRVWNzTWtKQlFUSkNMRTlCUVU4c1EwRkJReXhGUVVGRkxFMUJRVTBzVjBGQlZ5eERRVUZETzBGQlFVRXNXVUZETlVjN1FVRkJRU3hWUVVOR08wRkJRVUVzVlVGRFFUdEJRVUZCTEZGQlEwWTdRVUZCUVN4TlFVTkdPMEZCUlU4c1RVRkJUU3haUVVGWkxFTkJRVU1zVTBGQmVVSXNaVUZCTUVNN1FVRkRNMFlzZFVKQlFXVXNVVUZCVVN4TlFVRk5PMEZCUXpkQ0xHZENRVUZSTEZGQlFWRXNNa0pCUVRKQ0xGRkJRVkVzVDBGQlR5eERRVUZETEVkQlFVY3NWMEZCVnl4SlFVRkpMRU5CUVVNN1FVRkJRU3hOUVVOb1JqdEJRVVZQTEUxQlFVMHNNa0pCUVRKQ0xFTkJRVU1zWlVGRGNrTXNORUpCUVRSQ0xFVkJRVU1zVFVGQlRTeFhRVUZYTEV0QlFXZENMRU5CUVVNN1FVRkJRVHRCUVVGQk96czdRVU5xUm01RkxFMUJXVTBzVjBGaFFTeHBRa0ZoUVN4clFrRmhRU3h2UWtGWlFTeHJRa0ZSUVN3eVFrRlpRU3h6UWtGalFTeHpRa0ZUUVN4dlFrRmhUeXdyUWtGNVJWQXNZMEZyUTA4c2EwSkJTVUVzWjBKQlNVRXNaMEpCU1VFc2RVSkJTVUVzYVVKQlNVRXNhVUpCU1VFc2EwSkJTVUVzYVVKQlNVRXNkVUpCU1VFN1FVRjBVV0k3UVVGQlFUdEJRVUZCTzBGQlIwRTdRVUZGUVR0QlFVZEJPMEZCUTBFN1FVRkRRVHRCUVVWQkxFMUJRVTBzV1VGQmNVTTdRVUZCUVN4UlFVTjZReXhMUVVGTE8wRkJRVUVzVVVGRFRDeExRVUZMTzBGQlFVRXNVVUZEVEN4TlFVRk5PMEZCUVVFc1VVRkRUaXhMUVVGTE8wRkJRVUVzVVVGRFRDeE5RVUZOTzBGQlFVRXNVVUZEVGl4WFFVRlhPMEZCUVVFc1VVRkRXQ3hYUVVGWE8wRkJRVUVzVVVGRFdDeEpRVUZKTzBGQlFVRXNVVUZEU2l4SlFVRkpPMEZCUVVFc1VVRkRTaXhSUVVGUk8wRkJRVUVzVFVGRFZqdEJRVVZCTEUxQlFVMHNhMEpCUVRKRE8wRkJRVUVzVVVGREwwTXNTMEZCU3p0QlFVRkJMRkZCUTB3c1MwRkJTenRCUVVGQkxGRkJRMHdzVFVGQlRUdEJRVUZCTEZGQlEwNHNTMEZCU3p0QlFVRkJMRkZCUTB3c1RVRkJUVHRCUVVGQkxGRkJRMDRzVjBGQlZ6dEJRVUZCTEZGQlExZ3NWMEZCVnp0QlFVRkJMRkZCUTFnc1NVRkJTVHRCUVVGQkxGRkJRMG9zU1VGQlNUdEJRVUZCTEZGQlEwb3NVVUZCVVR0QlFVRkJMRTFCUTFZN1FVRkZRU3hOUVVGTkxHMUNRVUUwUXp0QlFVRkJMRkZCUTJoRUxFdEJRVXM3UVVGQlFTeFJRVU5NTEV0QlFVczdRVUZCUVN4UlFVTk1MRTFCUVUwN1FVRkJRU3hSUVVOT0xFdEJRVXM3UVVGQlFTeFJRVU5NTEUxQlFVMDdRVUZCUVN4UlFVTk9MRmRCUVZjN1FVRkJRU3hSUVVOWUxGZEJRVmM3UVVGQlFTeFJRVU5ZTEVsQlFVazdRVUZCUVN4UlFVTktMRWxCUVVrN1FVRkJRU3hSUVVOS0xGRkJRVkU3UVVGQlFTeE5RVU5XTzBGQlJVRXNUVUZCVFN4eFFrRkJPRU03UVVGQlFTeFJRVU5zUkN4TFFVRkxPMEZCUVVFc1VVRkRUQ3hMUVVGTE8wRkJRVUVzVVVGRFRDeExRVUZMTzBGQlFVRXNVVUZEVEN4TlFVRk5PMEZCUVVFc1VVRkRUaXhYUVVGWE8wRkJRVUVzVVVGRFdDeFhRVUZYTzBGQlFVRXNVVUZEV0N4SlFVRkpPMEZCUVVFc1VVRkRTaXhKUVVGSk8wRkJRVUVzVVVGRFNpeFJRVUZSTzBGQlFVRXNUVUZEVmp0QlFVVkJMRTFCUVUwc2JVSkJRVzFDTEVOQlFVTXNZMEZCYzBJc1UwRkJNa0k3UVVGRGVrVXNZMEZCVFN4TlFVRk5MRU5CUVVNN1FVRkRZaXhwUWtGQlV5eEpRVUZKTEU5QlFVOHNZMEZCWXl4SlFVRkpMRTFCUVUwc1JVRkJSU3hIUVVGSE8wRkJReTlETEdOQlFVa3NTMEZCU3l4RFFVRkRPMEZCUVVFc1VVRkRXanRCUVVOQkxHVkJRVTg3UVVGQlFTeE5RVU5VTzBGQlJVRXNUVUZCVFN3MFFrRkJORUlzUTBGQlF5eFBRVUV3UWl4VFFVRnJSRHRCUVVNM1J5eGpRVUZOTEdOQlFXTXNRMEZCUXp0QlFVTnlRaXhqUVVGTkxFOUJRVThzVFVGQlRUdEJRVU51UWl4cFFrRkJVeXhOUVVGTkxFZEJRVWNzVFVGQlRTeE5RVUZOTEU5QlFVODdRVUZEYmtNc1kwRkJTU3hMUVVGTExGRkJRVkVzUjBGQlJ5eE5RVUZOTEVsQlFVazdRVUZETlVJc2QwSkJRVmtzUzBGQlN5eE5RVUZOTEVkQlFVY3NRMEZCUXp0QlFVRkJMRlZCUXpkQ08wRkJRVUVzVVVGRFJqdEJRVU5CTEdOQlFVMHNZMEZCWXl4TFFVRkxMRWxCUVVrc1UwRkJUeXhOUVVGTkxFZEJRVWNzUTBGQlF6dEJRVU01UXl4bFFVRlBMRU5CUVVNc1lVRkJZU3hYUVVGWE8wRkJRVUVzVFVGRGJFTTdRVUZGUVN4TlFVRk5MSFZDUVVGMVFpeERRVUZETEU5QlFXbENMRk5CUVRaQ08wRkJRekZGTEdOQlFVMHNUMEZCVHl4TlFVRk5MRk5CUVZNc1MwRkJTenRCUVVOcVF5eGpRVUZOTEdOQlFXTXNRMEZCUXp0QlFVTnlRaXhaUVVGSkxGZEJRVmM3UVVGRFppeHBRa0ZCVXl4TlFVRk5MRWRCUVVjc1RVRkJUU3hOUVVGTkxFOUJRVTg3UVVGRGJrTXNZMEZCU1N4TFFVRkxMRkZCUVZFc1IwRkJSeXhOUVVGTkxFbEJRVWs3UVVGRE5VSXNkMEpCUVZrc1MwRkJTeXhOUVVGTkxGVkJRVlVzUTBGQlF6dEJRVUZCTEZWQlEzQkRMRTlCUVU4N1FVRkRUQ3gzUWtGQldTeExRVUZMTEVOQlFVTTdRVUZCUVN4VlFVTndRanRCUVVGQkxGRkJRMFk3UVVGRFFTeGxRVUZQTzBGQlFVRXNUVUZEVkR0QlFVVkJMRTFCUVUwc2RVSkJRWFZDTEVOQlFVTXNUVUZCWjBJc1UwRkJNRUk3UVVGRGRFVXNhVUpCUVZNc1NVRkJTU3hIUVVGSExFbEJRVWtzUzBGQlN5eFJRVUZSTEVWQlFVVXNSMEZCUnp0QlFVTndReXhqUVVGSkxFdEJRVXNzUzBGQlN5eFRRVUZUTEVsQlFVa3NRMEZCUXl4TlFVRk5MRTlCUVU4c1NVRkJTU3hIUVVGSE8wRkJRemxETEcxQ1FVRlBPMEZCUVVFc1ZVRkRWRHRCUVVGQkxGRkJRMFk3UVVGRFFTeGxRVUZQTzBGQlFVRXNUVUZEVkR0QlFVVkJMRTFCUVUwc2NVSkJRWEZDTEVOQlFVTXNUVUZCWjBJc1UwRkJNa0k3UVVGRGNrVXNZMEZCVFN4TlFVRk5MRU5CUVVNN1FVRkRZaXhaUVVGSkxFTkJRVU1zY1VKQlFYRkNMRTFCUVUwc1NVRkJTU3hIUVVGSE8wRkJRM0pETEcxQ1FVRlRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFMUJRVTBzUlVGQlJTeEhRVUZITzBGQlF6ZENMR2RDUVVGSkxFdEJRVXNzVVVGQlVTeERRVUZETEUxQlFVMHNTVUZCU1R0QlFVTXhRaXhyUWtGQlNTeExRVUZMTEVOQlFVTTdRVUZCUVN4WlFVTmFPMEZCUVVFc1ZVRkRSanRCUVVOQkxHVkJRVXNzVVVGQlVTeFZRVUZSTEVsQlFVa3NTMEZCU3l4SlFVRkpMRU5CUVVNN1FVRkJRU3hSUVVOeVF6dEJRVU5CTEdWQlFVODdRVUZCUVN4TlFVTlVPMEZCUlU4c1RVRkJUU3huUTBGRFZDeERRVUZETEUxQlFXTXNZVUZCY1VNc1VVRkJLMElzV1VGRGJFWXNaMEpCUVRCQ0xHRkJRWFZDTEdkQ1FVRjFRenRCUVVOMlJpeGpRVUZOTEdGQlFXRXNUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkZOMElzWTBGQlRTeGhRVUZoTEZWQlFWVXNTMEZCU3l4WFFVRlhPMEZCUXpkRExHTkJRVTBzWVVGQllTeFZRVUZWTEV0QlFVc3NWMEZCVnp0QlFVVTNReXhqUVVGTkxGRkJRVkVzWTBGQll5eE5RVUZOTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc1ZVRkJWVHRCUVVOb1JTeGpRVUZOTEZOQlFWTXNaVUZCWlN4VlFVRlZMR2RDUVVGblFpeFhRVUZYTzBGQlJXNUZMR05CUVUwc1owSkJRV2RDTzBGQlJYUkNMR05CUVUwc2MwSkJRWE5DTzBGQlFVRXNiMFJCUTJ0Q0xHRkJRV0U3UVVGQlFUdEJRVWN6UkN4alFVRk5MR3RDUVVGclFpeERRVUZETEdsQ1FVRXJRanRCUVVGQkxGVkJRM0JFTEdGQlFXRXNaMEpCUVdkQ0xHTkJRV01zUzBGQlN5eEZRVUZGTEdsQ1FVRnBRaXhQUVVGUExFMUJRVTBzUTBGQlF6dEJRVUZCTEZWQlEycEdMRzFDUVVGdFFqdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRmRCU1d4Q0xHRkJRV0VzVlVGQlZTeGhRVUZoTEVOQlFVTTdRVUZCUVR0QlFVRkJMREpEUVVWTUxHRkJRV0U3UVVGQlFUdEJRVUZCTzBGQlFVRXNaME5CUjNoQ0xHbENRVUZwUWl4VlFVRlZMRU5CUVVNN1FVRkJRVHRCUVVGQkxIZEVRVVZLTEdGQlFXRTdRVUZCUVN4cFEwRkRjRU1zVFVGQlRTeFpRVUZaTEZsQlFWa3NRMEZCUXp0QlFVRkJMSGxDUVVOMlF5eFZRVUZWTEZWQlFWVXNRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzZDBOQlMwNHNZVUZCWVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTd3dRa0ZOTTBJc1owSkJRV2RDTEZWQlFWVXNRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNXVUZUTTBNc1QwRkJUenRCUVVGQkxGVkJRMGc3UVVGQlFTeFZRVU5CTEVkQlEwa3NaVUZCWlN4VFFVRlRMRWRCUVVjc1QwRkJUeXhMUVVGTExFOUJRVThzTWtOQlEzUkNMRWRCUVVjc1QwRkJUeXhMUVVGTExFOUJRVThzU1VGQlNTeHRRa0ZCYlVJc1ZVRkJWU3hEUVVGRExFZEJRVWM3UVVGQlFTeFJRVUZGTEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUzJ4SExHVkJRVTg3UVVGQlFTeFZRVU5NTzBGQlFVRXNWVUZEUVR0QlFVRkJMRlZCUTBFN1FVRkJRU3hWUVVOQkxGbEJRVmtzVDBGQlR6dEJRVUZCTEZsQlEycENMRk5CUVZNc1EwRkJReXhGUVVGRExFMUJRVTBzWVVGQllTeFZRVUZWTEdWQlFXTXNRMEZCUXp0QlFVRkJMRmxCUTNaRUxHVkJRV1VzUlVGQlF5eEhRVUZITEZkQlFWVTdRVUZCUVN4WlFVTTNRaXhwUWtGQmFVSXNRMEZCUXl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEZkQlFWVXNRMEZCUXp0QlFVRkJMRlZCUXpkRU8wRkJRVUVzVVVGRFJqdEJRVUZCTEUxQlEwWTdRVUZGU2l4TlFVRk5MR1ZCUTBZc1EwRkJReXhUUVVGNVFpeE5RVUZqTEZsQlEzWkRMR1ZCUVdsSE8wRkJRMmhITEdOQlFVMHNiMEpCUTBZc1VVRkJVU3hQUVVGUExGZEJRVmNzU1VGQlNTeGhRVUZoTEdsRFFVRnBReXhSUVVGUkxGRkJRVkVzVlVGQlZUdEJRVVV4Unl4WlFVRkpMR05CUVdNc2EwSkJRV3RDTzBGQlEzQkRMRmxCUVVrc1dVRkJXU3hYUVVGWExFdEJRVXNzUTBGQlF5eHJRa0ZCYTBJc2JVSkJRVzFDTzBGQlEzQkZMSGRDUVVGakxGRkJRVkVzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4SlFVRkpMRU5CUVVNc1RVRkJUU3hOUVVGTkxFTkJRVU03UVVGQlFTeFJRVU42UkR0QlFVTkJMR05CUVUwc1owSkJRV2RDTEZWQlFWVXNZMEZCWXl4aFFVRmhMRkZCUVZFc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eE5RVUZOTzBGQlJYaEdMRmxCUVVrc1QwRkJUenRCUVVOWUxGbEJRVWtzVVVGQlVTeFJRVUZSTEU5QlFVOHNRMEZCUXp0QlFVTTFRaXhqUVVGTkxHVkJRV1VzYlVKQlFXMUNMRTFCUVUwc1VVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEUxQlFVMDdRVUZETTBVc1dVRkJTU3hoUVVGaExGTkJRVk1zUjBGQlJ6dEJRVU16UWl4clFrRkJVU3hSUVVGUk8wRkJRVUVzV1VGRFdpd3lRa0ZCTWtJc1VVRkJVU3hQUVVGUExFTkJRVU1zUjBGQlJ5eFpRVUZaTzBGQlFVRXNXVUZCUnl4RlFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETEVWQlFVVXNSVUZCUXp0QlFVRkJMRlZCUVVNc1JVRkJSU3hEUVVGRE8wRkJRMmhITEdsQ1FVRlBMR2xDUVVGcFFpeExRVUZMTEZGQlFWRXNUVUZCVFN4TFFVRkxMRTFCUVUwN1FVRkJRU3hSUVVONFJEdEJRVVZCTEdOQlFVMHNRMEZCUXl4aFFVRmhMRmRCUVZjc1NVRkJTU3d3UWtGQk1FSXNUVUZCVFN4TlFVRk5MRWxCUVVrN1FVRkROMFVzV1VGQlNTeHRRa0ZCYlVJN1FVRkRka0lzV1VGQlNTeHJRa0ZCYTBJc1ZVRkJWVHRCUVVNNVFpdzJRa0ZCYlVJc2NVSkJRWEZDTEdGQlFXRXNZVUZCWVR0QlFVRkJMRkZCUTNCRk8wRkJSVUVzWjBKQlFWRTdRVUZCUVN4VlFVTktPMEZCUVVFc1dVRkRTVHRCUVVGQkxGbEJRVTBzUlVGQlF5eE5RVUZOTEd0Q1FVRnJRaXhWUVVGVkxHMUNRVUZ0UWl4RFFVRkRMRTFCUVUwc1JVRkJRenRCUVVGQkxGbEJRVWNzUTBGQlF5eExRVUZMTzBGQlFVRXNXVUZCUnp0QlFVRkJMRmxCUTJoR0xGRkJRVkVzVDBGQlR5eERRVUZETEVWQlFVVTdRVUZCUVN4WlFVRlZPMEZCUVVFc1dVRkJhMEk3UVVGQlFTeFZRVUZYTzBGQlFVRXNWVUZETjBRc1JVRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEZRVUZETzBGQlFVRXNVVUZCUXp0QlFVRkJMRTFCUTNaQ08wRkJSVWNzVFVGQlRTeHRRa0ZCYlVJc1EwRkJReXhUUVVGNVFpeGxRVUYxUXp0QlFVTXZSaXh4UWtGQllTeFRRVUZUTEc5Q1FVRnZRaXhaUVVGWkxFMUJRVTA3UVVGQlFTeE5RVU01UkR0QlFVVlBMRTFCUVUwc2FVSkJRV2xDTEVOQlFVTXNVMEZCZVVJc1pVRkJkVU03UVVGRE4wWXNjVUpCUVdFc1UwRkJVeXhyUWtGQmEwSXNXVUZCV1N4SlFVRkpPMEZCUVVFc1RVRkRNVVE3UVVGRlR5eE5RVUZOTEdsQ1FVRnBRaXhEUVVGRExGTkJRWGxDTEdWQlFYVkRPMEZCUXpkR0xIRkNRVUZoTEZOQlFWTXNhMEpCUVd0Q0xGbEJRVmtzU1VGQlNUdEJRVUZCTEUxQlF6RkVPMEZCUlU4c1RVRkJUU3gzUWtGQmQwSXNRMEZCUXl4VFFVRjVRaXhsUVVGMVF6dEJRVU53Unl4eFFrRkJZU3hUUVVGVExIbENRVUY1UWl4WlFVRlpMRmRCUVZjN1FVRkJRU3hOUVVONFJUdEJRVVZQTEUxQlFVMHNhMEpCUVd0Q0xFTkJRVU1zVTBGQmVVSXNaVUZCZFVNN1FVRkRPVVlzY1VKQlFXRXNVMEZCVXl4dFFrRkJiVUlzV1VGQldTeExRVUZMTzBGQlFVRXNUVUZETlVRN1FVRkZUeXhOUVVGTkxHdENRVUZyUWl4RFFVRkRMRk5CUVhsQ0xHVkJRWFZETzBGQlF6bEdMSEZDUVVGaExGTkJRVk1zYlVKQlFXMUNMRmxCUVZrc1MwRkJTenRCUVVGQkxFMUJRelZFTzBGQlJVOHNUVUZCVFN4dFFrRkJiVUlzUTBGQlF5eFRRVUY1UWl4bFFVRjFRenRCUVVNdlJpeHhRa0ZCWVN4VFFVRlRMRzlDUVVGdlFpeFpRVUZaTEUxQlFVMDdRVUZCUVN4TlFVTTVSRHRCUVVWUExFMUJRVTBzYTBKQlFXdENMRU5CUVVNc1UwRkJlVUlzWlVGQmRVTTdRVUZET1VZc2NVSkJRV0VzVTBGQlV5eHRRa0ZCYlVJc1dVRkJXU3hMUVVGTE8wRkJRVUVzVFVGRE5VUTdRVUZGVHl4TlFVRk5MSGRDUVVGM1FpeERRVUZETEZOQlFYbENMR1ZCUVhWRE8wRkJRM0JITEhGQ1FVRmhMRk5CUVZNc2VVSkJRWGxDTEZsQlFWa3NWMEZCVnp0QlFVRkJMRTFCUTNoRk8wRkJSVThzVFVGQlRTeHhRa0ZCY1VJc1EwRkJReXhUUVVGNVFpeGxRVUYxUXp0QlFVTnFSeXh4UWtGQllTeFRRVUZUTEhOQ1FVRnpRaXhaUVVGWkxGRkJRVkU3UVVGQlFTeE5RVU5zUlR0QlFVRkJPMEZCUVVFN096dEJRM2hSUVN4TlFWbE5ReXhwUWtGdlFrRXNUVUZEVHl4NVFrRXlSVUVzYTBOQlZWQXNhMEpCWlVFc2JVSkJWMEVzWlVGWFFTeGxRVmRCTEhOQ1FWZEJMR2RDUVc5Q1FTeHBRa0Z4UWtFc1owSkJiMEpCTEdsQ1FWZEJMR2RDUVZkQkxITkNRVmRCTEhOQ1FYTkNUeXhaUVZGQkxGVkJVVUVzVlVGUlFTeHBRa0ZSUVN4WFFWRkJMRmRCVVVFc1dVRlJRU3hYUVZGQkxHbENRVkZCTzBGQk4xZGlPMEZCUVVFN1FVRkJRVHRCUVVkQk8wRkJSVUU3UVVGRFFUdEJRVWRCTzBGQlEwRTdRVUZGUVN4TlFVRk5RU3hyUWtGQmFVSXNRMEZCUXl4WFFVRjNRenRCUVVNNVJDeFpRVUZKTEVOQlFVTXNWVUZCVlN4UFFVRlBMRmRCUVZjc1MwRkJTeXhQUVVGUExGTkJRVk1zUjBGQlJ6dEJRVU4yUkN4blFrRkJUU3hKUVVGSkxFMUJRVTBzYlVOQlFXMURPMEZCUVVFc1VVRkRja1E3UVVGRlFTeFpRVUZKTEU5QlFVOHNWMEZCVnl4TFFVRkxMRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzVjBGQlZ5eEhRVUZITzBGQlEzUkVMR2RDUVVGTkxFbEJRVWtzVFVGQlRTd3dRa0ZCTUVJN1FVRkJRU3hSUVVNMVF6dEJRVUZCTEUxQlEwWTdRVUZaUVN4TlFVRk5MRTlCUVdsQ0xFTkJRVU1zVlVGQlZTeERRVUZETEVsQlFVa3NTVUZCU1N4bFFVRmxMRTFCUVUwc1lVRkJZU3hsUVVGbExFTkJRVU1zUzBGQlN5eEZRVUZGTzBGQlF6ZEdMRTFCUVUwc01FSkJRMVFzUTBGQlF5eE5RVUZqTEdGQlFYRkRMRkZCUVN0Q0xGVkJRMnhHTEZkQlFYRkNMR2RDUVVFd1FpeFhRVUZYTEU5QlFVOHNiMEpCUVc5Q0xGVkJRWFZDTzBGQlF6TkhMR05CUVUwc1kwRkJkMElzUTBGQlF6dEJRVU12UWl4alFVRk5MR0ZCUVdFc1QwRkJUeXhEUVVGRExFVkJRVVU3UVVGRE4wSXNZMEZCVFN4WlFVRlpMRmRCUVZjN1FVRkROMElzWTBGQlRTeFBRVUZQTEZWQlFWVXNZMEZCWXl4WFFVRlhMRk5CUVZNN1FVRkRla1FzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXh4UWtGQmNVSXNTMEZCU3l4WFFVRlhPMEZCUXpsRUxHMUNRVUZYTEZGQlFWRXNRMEZCUXl4SFFVRkhMRTFCUVUwN1FVRkRNMElzWTBGQlNTeHRRa0ZCYlVJc1MwRkJTeXhSUVVGUkxFTkJRVU1zUzBGQlN5eEhRVUZITzBGQlF6TkRMR2RDUVVGSkxGVkJRVlU3UVVGRFdpd3dRa0ZCV1N4TFFVRkxMRU5CUVVNN1FVRkJRU3haUVVOd1FqdEJRVUZCTEZWQlEwWXNUMEZCVHp0QlFVTk1MSGRDUVVGWkxFdEJRVXNzUTBGQlF6dEJRVUZCTEZWQlEzQkNPMEZCUVVFc1VVRkRSaXhEUVVGRE8wRkJRMFFzWTBGQlRTeGhRVUZoTEZsQlFWazdRVUZETDBJc1kwRkJUU3hoUVVGaExGVkJRVlVzUzBGQlN5eFhRVUZYTzBGQlF6ZERMR05CUVUwc2EwSkJRV3RDTEVOQlFVTXNhVUpCUVN0Q08wRkJRM1JFTEdkQ1FVRk5MRlZCUVc5Q0xFTkJRVU03UVVGRk0wSXNaMEpCUVUwc1VVRkJVU3hqUVVGakxFMUJRVTBzVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVlN4VFFVRlRPMEZCUXk5RUxHZENRVUZOTEZOQlFWTXNaVUZCWlN4VlFVRlZMR2RDUVVGblFpeFZRVUZWTzBGQlEyeEZMR2RDUVVGTkxFMUJRVTBzVTBGQlV5eFBRVUZQTEZGQlFWRXNTVUZCU1R0QlFVTjRReXhqUVVGSlF5eGhRVUZaTEVsQlFVa3NRMEZCUXp0QlFVVnlRaXh0UWtGQlV5eEpRVUZKTEVkQlFVY3NTVUZCU1N4SFFVRkhMRWxCUVVrc1YwRkJWeXhMUVVGTE8wRkJSWHBETEdkQ1FVRkpMRzFDUVVGdFFpeExRVUZMTEZGQlFWRXNRMEZCUXl4TFFVRkxMRWRCUVVjN1FVRkRNME1zYTBKQlFVa3NWVUZCVlR0QlFVTmFPMEZCUVVFc1kwRkRSanRCUVVWQkxHTkJRVUZCTEdGQlFWa3NXVUZCV1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhOUVVGTkxGZEJRVmNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0QlFVRkJMRzlDUVVNelJDeEpRVUZKTEVOQlFVTXNSVUZCUlN4VFFVRlRMRmxCUVZrc1NVRkJTU3h4UWtGQmNVSXNRMEZCUXl4TlFVRk5MRVZCUVVVN1FVRkJRU3h2UWtGRE9VUXNUVUZCVFN4WFFVRlhMR2xDUVVGcFFpeEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNN1FVRkJRU3h2UWtGRE4wTkJMRlZCUVZNN1FVRkJRVHRCUVVGQkxGbEJSVzVDTEU5QlFVODdRVUZEVEN4elFrRkJVU3hMUVVGTExFZEJRVWNzVFVGQlRTeFhRVUZYTEdsQ1FVRnBRaXhIUVVGSExFOUJRVThzVjBGQlZ5eHJRa0ZCYTBJc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ6dEJRVU12Ump0QlFVRkJMRmxCUTBZN1FVRkJRU3hWUVVOR08wRkJRMEVzYVVKQlFVODdRVUZCUVR0QlFVRkJMRlZCUlV3c1lVRkJZU3huUWtGQlowSXNaVUZCWlN4TFFVRkxMRVZCUVVVc2FVSkJRV2xDTEU5QlFVOHNUVUZCVFN4RFFVRkRPMEZCUVVFN1FVRkJRU3hWUVVWc1JpeGhRVUZoTEZWQlFWVXNRMEZCUXp0QlFVRkJMRmxCUTNSQ0xHRkJRV0VzYzBOQlFYTkRMSE5DUVVGelFpeERRVUZETzBGQlFVRXNLMEpCUTNaRUxFMUJRVTBzUzBGQlN5eFBRVUZQTzBGQlFVRXNhVU5CUTJoQ0xFOUJRVThzWjBKQlFXZENMRmxCUVZrc1EwRkJRenRCUVVGQk8wRkJRVUVzV1VGRmVrUXNVVUZCVVN4TFFVRkxMRWxCUVVrc1EwRkJRenRCUVVGQkxGbEJRMnhDTEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUVVFc1dVRkRUaXhKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVUZCTEZsQlEwNUJMRlZCUVZNN1FVRkJRU3haUVVOVUxFbEJRVWtzUTBGQlF5eERRVUZETzBGQlFVRXNXVUZEVGl4SlFVRkpMRmRCUVZjc1NVRkJTU3hQUVVGUExGbEJRVmtzWTBGQll5eFBRVUZQTEVsQlFVa3NTVUZCU1N4TlFVRk5MRU5CUVVNc1JVRkJSU3hMUVVGTExFbEJRVWtzUTBGQlF6dEJRVUZCTzBGQlFVRXNVVUZGTlVZN1FVRkZRU3hsUVVGUE8wRkJRVUVzVlVGRFREdEJRVUZCTEZWQlEwRTdRVUZCUVN4VlFVTkJPMEZCUVVFc1ZVRkRRU3haUVVGWkxFOUJRVTg3UVVGQlFTeFpRVU5xUWl4VFFVRlRMRU5CUVVNc1JVRkJReXhOUVVGTkxHRkJRV0VzVlVGQlZTeGxRVUZqTEVOQlFVTTdRVUZCUVN4WlFVTjJSQ3hsUVVGbExFVkJRVU1zUjBGQlJ5eExRVUZMTzBGQlFVRXNZMEZCU3l4aFFVRmhPMEZCUVVFN1FVRkJRU3haUVVGMVFpeEZRVUZETzBGQlFVRXNXVUZEYkVVc2FVSkJRMGtzUTBGQlF5eEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxGZEJRVlVzUjBGQlJ5eEhRVUZITERKQ1FVRXlRaXhaUVVGWkxGZEJRVmNzUTBGQlF6dEJRVUZCTEZWQlEzaEhPMEZCUVVFc1VVRkRSanRCUVVGQkxFMUJRMFk3UVVGRlJ5eE5RVUZOTEcxRFFVTlVMRU5CUVVNc1VVRkJLMElzWlVGQmJVUTdRVUZEYWtZc1kwRkJUU3hQUVVGcFFpeERRVUZETzBGQlEzaENMRmxCUVVrc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NSMEZCUnp0QlFVTjZRaXhwUWtGQlR5eERRVUZETEVWQlFVVXNhVUpCUVdsQ0xFVkJRVVVzVVVGQlVTeFBRVUZMTEV0QlFVc3NTMEZCU3l4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRVUVzVVVGRGFFVTdRVUZEUVN4bFFVRlBPMEZCUVVFc1ZVRkRTQ3hGUVVGRExFMUJRVTBzVlVGQlZTeFhRVUZYTEZWQlFWVXNiVUpCUVcxQ0xGZEJRVmNzYTBKQlFXbENPMEZCUVVFc1VVRkJRenRCUVVGQkxFMUJRelZHTzBGQlJVb3NUVUZCVFN4dFFrRkRSaXhEUVVGRExGTkJRWGxDTEUxQlFXTXNXVUZCT0VJc1lVRkJOa0k3UVVGRGFrY3NZMEZCVFN4VFFVRlRMRkZCUVZFN1FVRkRka0lzWTBGQlRTeHZRa0ZEUml4UFFVRlBMRmRCUVZjc1NVRkJTU3hoUVVGaExHbERRVUZwUXl4UlFVRlJMRlZCUVZVN1FVRkZNVVlzWjBKQlFWRTdRVUZCUVN4VlFVTktPMEZCUVVFc1dVRkRTVHRCUVVGQkxGbEJRVTBzUlVGQlF5eE5RVUZOTEd0Q1FVRnJRaXhWUVVGVkxHMUNRVUZ0UWl4RFFVRkRMRTFCUVUwc1JVRkJRenRCUVVGQkxGbEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVRkJMRmxCUTJwR0xHdENRVUZyUWl4eFFrRkJjVUlzYTBKQlFXdENMRXRCUVVzc1YwRkJWeXhKUVVGSkxFOUJRVTg3UVVGQlFTeFpRVU53Uml4clFrRkJhMEk3UVVGQlFTeFpRVUZOTEU5QlFVOHNRMEZCUXl4RlFVRkZPMEZCUVVFc1dVRkJWU3hyUWtGQmEwSTdRVUZCUVN4WlFVTTVSQ3hyUWtGQmEwSTdRVUZCUVN4VlFVRnBRanRCUVVGQkxGVkJRM1pETEVWQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1JVRkJRenRCUVVGQkxGRkJRVU03UVVGQlFTeE5RVU51UWp0QlFVVktMRTFCUVUwc2IwSkJRVzlDTEVOQlFVTXNVMEZCZVVJc1pVRkJkVU03UVVGRGVrWXNVVUZCUVVRc1owSkJRV1VzVVVGQlVTeE5RVUZOTzBGQlF6ZENMR05CUVUwc1YwRkJjVUlzUTBGQlF5eFBRVUZQTEZkQlF5OUNPMEZCUVVFc1ZVRkJReXhsUVVGbExFOUJRVThzUzBGQlN5eFBRVUZQTzBGQlFVRXNWVUZEYkVNN1FVRkJRU3hWUVVOQkxGbEJRVmtzVFVGQlRTeGhRVUZoTEdWQlFXVXNRMEZCUXp0QlFVRkJMRlZCUXk5RE8wRkJRVUVzVVVGRFREdEJRVU5CTEhsQ1FVRnBRaXhUUVVGVExHZENRVUZuUWl4WlFVRlpMRkZCUVZFN1FVRkJRU3hOUVVOb1JUdEJRVVZCTEUxQlFVMHNaMEpCUVdkQ0xFTkJRVU1zVTBGQmVVSXNaVUZCZFVNN1FVRkRja1lzVVVGQlFVRXNaMEpCUVdVc1VVRkJVU3hOUVVGTk8wRkJRemRDTEdOQlFVMHNWMEZCY1VJc1EwRkJReXhQUVVGUExGZEJReTlDTzBGQlFVRXNWVUZCUXl4bFFVRmxMRTlCUVU4c1MwRkJTeXhQUVVGUE8wRkJRVUVzVlVGRGJFTTdRVUZCUVN4VlFVTkJMR2RDUVVGblFpeE5RVUZOTEdGQlFXRXNaVUZCWlN4RFFVRkRPMEZCUVVFc1ZVRkRia1E3UVVGQlFTeFJRVU5NTzBGQlEwRXNlVUpCUVdsQ0xGTkJRVk1zV1VGQldTeFpRVUZaTEZGQlFWRTdRVUZCUVN4TlFVTTFSRHRCUVVWQkxFMUJRVTBzWjBKQlFXZENMRU5CUVVNc1UwRkJlVUlzWlVGQmRVTTdRVUZEY2tZc1VVRkJRVUVzWjBKQlFXVXNVVUZCVVN4TlFVRk5PMEZCUXpkQ0xHTkJRVTBzVjBGQmNVSXNRMEZCUXl4UFFVRlBMRmRCUXk5Q08wRkJRVUVzVlVGQlF5eFhRVUZYTEU5QlFVOHNTMEZCU3l4TFFVRkxMRzlDUVVGdlFpeFBRVUZQTEV0QlFVc3NTMEZCU3p0QlFVRkJMRlZCUTJwRk8wRkJRVUVzVlVGRFFTeFBRVUZQTEUxQlFVMHNZVUZCWVN4bFFVRmxMRU5CUVVNN1FVRkJRU3hWUVVNeFF6dEJRVUZCTEZGQlEwdzdRVUZEUVN4NVFrRkJhVUlzVTBGQlV5eFpRVUZaTEZsQlFWa3NVVUZCVVR0QlFVRkJMRTFCUXpWRU8wRkJSVUVzVFVGQlRTeDFRa0ZCZFVJc1EwRkJReXhUUVVGNVFpeGxRVUYxUXp0QlFVTTFSaXhSUVVGQlFTeG5Ra0ZCWlN4UlFVRlJMRTFCUVUwN1FVRkROMElzWTBGQlRTeFhRVUZ4UWl4RFFVRkRMRTlCUVU4c1YwRkRMMEk3UVVGQlFTeFZRVUZETEdWQlFXVXNUMEZCVHl4TFFVRkxMRTlCUVU4N1FVRkJRU3hWUVVOc1F6dEJRVUZCTEZWQlEwRXNaMEpCUVdkQ0xFMUJRVTBzWVVGQllTeGxRVUZsTEVOQlFVTTdRVUZCUVN4VlFVTnVSRHRCUVVGQkxGRkJRMHc3UVVGRFFTeDVRa0ZCYVVJc1UwRkJVeXh0UWtGQmJVSXNXVUZCV1N4UlFVRlJPMEZCUVVFc1RVRkRia1U3UVVGRlFTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRExGTkJRWGxDTEdWQlFYVkRPMEZCUTNSR0xGRkJRVUZCTEdkQ1FVRmxMRkZCUVZFc1RVRkJUVHRCUVVNM1FpeGpRVUZOTEZkQlFYRkNMRU5CUVVNc1QwRkJUeXhUUVVGVExGTkJRVk03UVVGRGJrUXNaMEpCUVUwc1ZVRkJWU3hEUVVGRE8wRkJRMnBDTEcxQ1FVRlRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFMUJRVTBzVFVGQlRTeExRVUZMTzBGQlEyNURMR2RDUVVGSkxFdEJRVXNzVVVGQlVTeERRVUZETEV0QlFVc3NTMEZCU3l4TFFVRkxMRmRCUVZjc1IwRkJSenRCUVVNM1F5eHpRa0ZCVVN4TFFVRkxMRTFCUVUwc1YwRkJWeXhwUWtGQmFVSXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkJRU3haUVVOMFJEdEJRVUZCTEZWQlEwWTdRVUZGUVN4cFFrRkJUenRCUVVGQkxGbEJRMHdzUjBGQlJ5eFJRVUZSTEV0QlFVc3NTVUZCU1N4RFFVRkRPMEZCUVVFc1dVRkRja0lzWlVGQlpTeE5RVUZOTEdGQlFXRXNaVUZCWlN4RFFVRkRPMEZCUVVFc1dVRkRiRVFzYzBKQlFYTkNMRTFCUVUwc1lVRkJZU3hsUVVGbExFTkJRVU03UVVGQlFTeFpRVU42UkR0QlFVRkJMRlZCUTBZN1FVRkJRU3hSUVVOR08wRkJRMEVzZVVKQlFXbENMRk5CUVZNc1lVRkJZU3haUVVGWkxGRkJRVkU3UVVGQlFTeE5RVU0zUkR0QlFVVkJMRTFCUVUwc2EwSkJRV3RDTEVOQlFVTXNVMEZCZVVJc1pVRkJkVU03UVVGRGRrWXNVVUZCUVVFc1owSkJRV1VzVVVGQlVTeE5RVUZOTzBGQlF6ZENMR05CUVUwc1YwRkJjVUlzUTBGQlF5eFBRVUZQTEZGQlFWRXNVMEZCVXp0QlFVTnNSQ3hqUVVGSkxFOUJRVTg3UVVGRFdDeHRRa0ZCVXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hOUVVGTkxFMUJRVTBzUzBGQlN6dEJRVU51UXl4blFrRkJTU3hMUVVGTExGRkJRVkVzUTBGQlF5eExRVUZMTEV0QlFVc3NTMEZCU3l4WFFVRlhMRWRCUVVjN1FVRkZOME1zYzBKQlFWRXNVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU03UVVGQlFTeFpRVU5zUXp0QlFVRkJMRlZCUTBZN1FVRkZRU3hwUWtGQlR6dEJRVUZCTEZsQlEwdzdRVUZCUVN4WlFVTkJPMEZCUVVFc1dVRkRRU3hqUVVGakxFMUJRVTBzWVVGQllTeGxRVUZsTEVOQlFVTTdRVUZCUVN4WlFVTnFSQ3hsUVVGbExFOUJRVThzUzBGQlN5eExRVUZMTEZWQlFWVXNTVUZCU1R0QlFVRkJMRlZCUTJoRU8wRkJRVUVzVVVGRFJqdEJRVU5CTEhsQ1FVRnBRaXhUUVVGVExHTkJRV01zV1VGQldTeFJRVUZSTzBGQlFVRXNUVUZET1VRN1FVRkZRU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRMRk5CUVhsQ0xHVkJRWFZETzBGQlEzUkdMRkZCUVVGQkxHZENRVUZsTEZGQlFWRXNUVUZCVFR0QlFVTTNRaXhqUVVGTkxGZEJRWEZDTEVOQlFVTXNUMEZCVHl4VFFVRlRMRk5CUVZNN1FVRkRia1FzWjBKQlFVMHNWVUZCVlN4RFFVRkRPMEZCUTJwQ0xHMUNRVUZUTEVsQlFVa3NSMEZCUnl4SlFVRkpMRTFCUVUwc1RVRkJUU3hMUVVGTE8wRkJRMjVETEdkQ1FVRkpMRXRCUVVzc1VVRkJVU3hEUVVGRExFdEJRVXNzUzBGQlN5eExRVUZMTEZkQlFWY3NSMEZCUnp0QlFVTTNReXh6UWtGQlVTeExRVUZMTEdsQ1FVRnBRaXhEUVVGRExGRkJRVkU3UVVGQlFTeFpRVU42UXp0QlFVRkJMRlZCUTBZN1FVRkZRU3hwUWtGQlR6dEJRVUZCTEZsQlEwd3NSMEZCUnl4UlFVRlJMRXRCUVVzc1NVRkJTU3hEUVVGRE8wRkJRVUVzV1VGRGNrSXNaVUZCWlN4TlFVRk5MR0ZCUVdFc1pVRkJaU3hEUVVGRE8wRkJRVUVzV1VGRGJFUXNjMEpCUVhOQ0xFMUJRVTBzWVVGQllTeGxRVUZsTEVOQlFVTTdRVUZCUVN4WlFVTjZSRHRCUVVGQkxGVkJRMFk3UVVGQlFTeFJRVU5HTzBGQlEwRXNlVUpCUVdsQ0xGTkJRVk1zWVVGQllTeFpRVUZaTEZGQlFWRTdRVUZCUVN4TlFVTTNSRHRCUVVWQkxFMUJRVTBzYTBKQlFXdENMRU5CUVVNc1UwRkJlVUlzWlVGQmRVTTdRVUZEZGtZc1VVRkJRVUVzWjBKQlFXVXNVVUZCVVN4TlFVRk5PMEZCUXpkQ0xHTkJRVTBzVjBGQmNVSXNRMEZCUXl4UFFVRlBMRmRCUXk5Q08wRkJRVUVzVlVGQlF5eGxRVUZsTEU5QlFVOHNTMEZCU3l4UFFVRlBPMEZCUVVFc1ZVRkRiRU03UVVGQlFTeFZRVU5CTEZsQlFWa3NUVUZCVFN4aFFVRmhMR1ZCUVdVc1EwRkJRenRCUVVGQkxGVkJReTlETzBGQlFVRXNVVUZEVER0QlFVTkJMSGxDUVVGcFFpeFRRVUZUTEdOQlFXTXNXVUZCV1N4UlFVRlJPMEZCUVVFc1RVRkRPVVE3UVVGRlFTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRExGTkJRWGxDTEdWQlFYVkRPMEZCUTNSR0xGRkJRVUZCTEdkQ1FVRmxMRkZCUVZFc1RVRkJUVHRCUVVNM1FpeGpRVUZOTEZkQlFYRkNMRU5CUVVNc1QwRkJUeXhYUVVNdlFqdEJRVUZCTEZWQlFVTXNaVUZCWlN4UFFVRlBMRXRCUVVzc1QwRkJUenRCUVVGQkxGVkJRMnhETzBGQlFVRXNWVUZEUVN4WlFVRlpMRTFCUVUwc1lVRkJZU3hsUVVGbExFTkJRVU03UVVGQlFTeFZRVU12UXp0QlFVRkJMRkZCUTB3N1FVRkRRU3g1UWtGQmFVSXNVMEZCVXl4aFFVRmhMRmxCUVZrc1VVRkJVVHRCUVVGQkxFMUJRemRFTzBGQlJVRXNUVUZCVFN4MVFrRkJkVUlzUTBGQlF5eFRRVUY1UWl4bFFVRjFRenRCUVVNMVJpeFJRVUZCUVN4blFrRkJaU3hSUVVGUkxFMUJRVTA3UVVGRE4wSXNZMEZCVFN4WFFVRnhRaXhEUVVGRExFOUJRVThzVjBGREwwSTdRVUZCUVN4VlFVRkRMRmRCUVZjc1QwRkJUeXhMUVVGTExFdEJRVXNzYjBKQlFXOUNMRTlCUVU4c1MwRkJTeXhMUVVGTE8wRkJRVUVzVlVGRGFrVTdRVUZCUVN4VlFVTkJMRTlCUVU4c1RVRkJUU3hoUVVGaExHVkJRV1VzUTBGQlF6dEJRVUZCTEZWQlF6RkRPMEZCUVVFc1VVRkRURHRCUVVOQkxIbENRVUZwUWl4VFFVRlRMRzFDUVVGdFFpeFpRVUZaTEZGQlFWRTdRVUZCUVN4TlFVTnVSVHRCUVVWQkxFMUJRVTBzZFVKQlEwWXNRMEZCUXl4UFFVRXdRaXhOUVVGNVFpeHpRa0ZCZDBNN1FVRkRNVVlzV1VGQlNTeExRVUZMTEZkQlFWY3NSMEZCUnp0QlFVTnlRaXhwUWtGQlR6dEJRVUZCTEZGQlExUTdRVUZGUVN4WlFVRkpMR0ZCUVdFN1FVRkRha0lzV1VGQlNTeGhRVUZoTzBGQlEycENMR2xDUVVGVExFMUJRVTBzUjBGQlJ5eE5RVUZOTEV0QlFVc3NVVUZCVVN4UFFVRlBPMEZCUXpGRExHTkJRVWtzUzBGQlN5eFJRVUZSTEVkQlFVY3NUVUZCVFN4SlFVRkpPMEZCUXpWQ0xEQkNRVUZqTEUxQlFVMHNSMEZCUnp0QlFVRkJMRlZCUTNwQ0xFOUJRVTg3UVVGRFRDd3dRa0ZCWXl4TlFVRk5MRWRCUVVjN1FVRkJRU3hWUVVONlFqdEJRVUZCTEZGQlEwWTdRVUZMUVN4bFFVRlBMR0ZCUVdFc1RVRkJUU3hoUVVGaE8wRkJRVUVzVFVGRGVrTTdRVUZGUnl4TlFVRk5MR0ZCUVdFc1EwRkJReXhUUVVGNVFpeGxRVUYxUXp0QlFVTjZSaXhaUVVGSkxIRkNRVUZ4UWl4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRkxFMUJRVTBzVjBGQlZ5eE5RVUZOTEZkQlFWY3NhVUpCUVdsQ0xFZEJRVWM3UVVGREwwWXNNRUpCUVdkQ0xGTkJRVk1zVlVGQlZUdEJRVUZCTEZGQlEzSkRMRTlCUVU4N1FVRkRUQ3d5UWtGQmFVSXNVMEZCVXl4VlFVRlZPMEZCUVVFc1VVRkRkRU03UVVGQlFTeE5RVU5HTzBGQlJVOHNUVUZCVFN4WFFVRlhMRU5CUVVNc1UwRkJlVUlzWlVGQmRVTTdRVUZEZGtZc1dVRkJTU3h4UWtGQmNVSXNVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hOUVVGTkxGZEJRVmNzVFVGQlRTeFhRVUZYTEdsQ1FVRnBRaXhIUVVGSE8wRkJReTlHTEhkQ1FVRmpMRk5CUVZNc1ZVRkJWVHRCUVVGQkxGRkJRMjVETEU5QlFVODdRVUZEVEN4NVFrRkJaU3hUUVVGVExGVkJRVlU3UVVGQlFTeFJRVU53UXp0QlFVRkJMRTFCUTBZN1FVRkZUeXhOUVVGTkxGZEJRVmNzUTBGQlF5eFRRVUY1UWl4bFFVRjFRenRCUVVOMlJpeFpRVUZKTEhGQ1FVRnhRaXhSUVVGUkxFOUJRVThzUTBGQlF5eEZRVUZGTEUxQlFVMHNWMEZCVnl4TlFVRk5MRmRCUVZjc2FVSkJRV2xDTEVkQlFVYzdRVUZETDBZc2QwSkJRV01zVTBGQlV5eFZRVUZWTzBGQlFVRXNVVUZEYmtNc1QwRkJUenRCUVVOTUxIbENRVUZsTEZOQlFWTXNWVUZCVlR0QlFVRkJMRkZCUTNCRE8wRkJRVUVzVFVGRFJqdEJRVVZQTEUxQlFVMHNhMEpCUVd0Q0xFTkJRVU1zVTBGQmVVSXNaVUZCZFVNN1FVRkRPVVlzV1VGQlNTeHhRa0ZCY1VJc1VVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJTeE5RVUZOTEZkQlFWY3NUVUZCVFN4WFFVRlhMR2xDUVVGcFFpeEhRVUZITzBGQlF5OUdMQ3RDUVVGeFFpeFRRVUZUTEZWQlFWVTdRVUZCUVN4UlFVTXhReXhQUVVGUE8wRkJRMHdzWjBOQlFYTkNMRk5CUVZNc1ZVRkJWVHRCUVVGQkxGRkJRek5ETzBGQlFVRXNUVUZEUmp0QlFVVlBMRTFCUVUwc1dVRkJXU3hEUVVGRExGTkJRWGxDTEdWQlFYVkRPMEZCUTNoR0xGbEJRVWtzY1VKQlFYRkNMRkZCUVZFc1QwRkJUeXhEUVVGRExFVkJRVVVzVFVGQlRTeFhRVUZYTEUxQlFVMHNWMEZCVnl4cFFrRkJhVUlzUjBGQlJ6dEJRVU12Uml4NVFrRkJaU3hUUVVGVExGVkJRVlU3UVVGQlFTeFJRVU53UXl4UFFVRlBPMEZCUTB3c01FSkJRV2RDTEZOQlFWTXNWVUZCVlR0QlFVRkJMRkZCUTNKRE8wRkJRVUVzVFVGRFJqdEJRVVZQTEUxQlFVMHNXVUZCV1N4RFFVRkRMRk5CUVhsQ0xHVkJRWFZETzBGQlEzaEdMRmxCUVVrc2NVSkJRWEZDTEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVc1RVRkJUU3hYUVVGWExFMUJRVTBzVjBGQlZ5eHBRa0ZCYVVJc1IwRkJSenRCUVVNdlJpeDVRa0ZCWlN4VFFVRlRMRlZCUVZVN1FVRkJRU3hSUVVOd1F5eFBRVUZQTzBGQlEwd3NNRUpCUVdkQ0xGTkJRVk1zVlVGQlZUdEJRVUZCTEZGQlEzSkRPMEZCUVVFc1RVRkRSanRCUVVWUExFMUJRVTBzWVVGQllTeERRVUZETEZOQlFYbENMR1ZCUVhWRE8wRkJRM3BHTEZsQlFVa3NjVUpCUVhGQ0xGRkJRVkVzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4WFFVRlhMRTFCUVUwc1YwRkJWeXhwUWtGQmFVSXNSMEZCUnp0QlFVTXZSaXd3UWtGQlowSXNVMEZCVXl4VlFVRlZPMEZCUVVFc1VVRkRja01zVDBGQlR6dEJRVU5NTERKQ1FVRnBRaXhUUVVGVExGVkJRVlU3UVVGQlFTeFJRVU4wUXp0QlFVRkJMRTFCUTBZN1FVRkZUeXhOUVVGTkxGbEJRVmtzUTBGQlF5eFRRVUY1UWl4bFFVRjFRenRCUVVONFJpeFpRVUZKTEhGQ1FVRnhRaXhSUVVGUkxFOUJRVThzUTBGQlF5eEZRVUZGTEUxQlFVMHNWMEZCVnl4TlFVRk5MRmRCUVZjc2FVSkJRV2xDTEVkQlFVYzdRVUZETDBZc2VVSkJRV1VzVTBGQlV5eFZRVUZWTzBGQlFVRXNVVUZEY0VNc1QwRkJUenRCUVVOTUxEQkNRVUZuUWl4VFFVRlRMRlZCUVZVN1FVRkJRU3hSUVVOeVF6dEJRVUZCTEUxQlEwWTdRVUZGVHl4TlFVRk5MR3RDUVVGclFpeERRVUZETEZOQlFYbENMR1ZCUVhWRE8wRkJRemxHTEZsQlFVa3NjVUpCUVhGQ0xGRkJRVkVzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4WFFVRlhMRTFCUVUwc1YwRkJWeXhwUWtGQmFVSXNSMEZCUnp0QlFVTXZSaXdyUWtGQmNVSXNVMEZCVXl4VlFVRlZPMEZCUVVFc1VVRkRNVU1zVDBGQlR6dEJRVU5NTEdkRFFVRnpRaXhUUVVGVExGVkJRVlU3UVVGQlFTeFJRVU16UXp0QlFVRkJMRTFCUTBZN1FVRkZUeXhOUVVGTkxHVkJRV1VzUTBGQlF5eFRRVUY1UWl4bFFVRjFRenRCUVVNelJpeFpRVUZKTEhGQ1FVRnhRaXhSUVVGUkxFOUJRVThzUTBGQlF5eEZRVUZGTEUxQlFVMHNWMEZCVnl4TlFVRk5MRmRCUVZjc2FVSkJRV2xDTEVkQlFVYzdRVUZETDBZc05FSkJRV3RDTEZOQlFWTXNWVUZCVlR0QlFVRkJMRkZCUTNaRExFOUJRVTg3UVVGRFRDdzJRa0ZCYlVJc1UwRkJVeXhWUVVGVk8wRkJRVUVzVVVGRGVFTTdRVUZCUVN4TlFVTkdPMEZCUVVFN1FVRkJRVHM3TzBGRGJsaEJMRTFCWTAxRkxHbENRV1ZQTEZGQk1FSkJMRkZCTUVKQk8wRkJha1ppTzBGQlFVRTdRVUZCUVR0QlFVOUJPMEZCUlVFN1FVRkhRVHRCUVVWQkxFMUJRVTFCTEd0Q1FVRnBRaXhEUVVGRExGZEJRWGRETzBGQlF6bEVMRmxCUVVrc1EwRkJReXhWUVVGVkxFOUJRVThzVjBGQlZ5eExRVUZMTEU5QlFVOHNVMEZCVXl4SFFVRkhPMEZCUTNaRUxHZENRVUZOTEVsQlFVa3NUVUZCVFN4M1EwRkJkME03UVVGQlFTeFJRVU14UkR0QlFVTkJMRmxCUVVrc1QwRkJUeXhEUVVGRExFVkJRVVVzTkVKQlFUWkNPMEZCUTNwRExHZENRVUZOTEVsQlFVa3NUVUZCVFN4eFFrRkJjVUk3UVVGQlFTeFJRVU4yUXp0QlFVRkJMRTFCUTBZN1FVRlJUeXhOUVVGTkxGTkJRVk1zUTBGQlF5eFRRVUY1UWl4bFFVRXdRenRCUVVONFJpeFJRVUZCUVN4blFrRkJaU3hSUVVGUkxFMUJRVTA3UVVGRE4wSXNZMEZCVFN4alFVRjNRaXhEUVVGRExFOUJRVThzVVVGQlVTeFRRVUZUTzBGQlEzSkVMR2RDUVVGTkxGVkJRVlVzUTBGQlF6dEJRVU5xUWl4dFFrRkJVeXhKUVVGSkxFZEJRVWNzU1VGQlNTeE5RVUZOTEUxQlFVMHNTMEZCU3p0QlFVTnVReXhuUWtGQlNTeExRVUZMTEZGQlFWRXNRMEZCUXl4TFFVRkxMRXRCUVVzc1MwRkJTeXhYUVVGWExFZEJRVWM3UVVGRE4wTXNjMEpCUVZFc1MwRkJTeXhwUWtGQmFVSXNRMEZCUXl4UlFVRlJPMEZCUVVFc1dVRkRla003UVVGQlFTeFZRVU5HTzBGQlEwRXNhVUpCUVU4N1FVRkJRU3haUVVOTUxFZEJRVWNzVVVGQlVTeExRVUZMTEVsQlFVa3NRMEZCUXp0QlFVRkJMRmxCUVVrc1pVRkJaU3hOUVVGTkxHRkJRV0VzWlVGQlpTeERRVUZETzBGQlFVRTdRVUZCUVN4WlFVTXpSU3hQUVVGUExFMUJRVTBzWVVGQllTeGxRVUZsTEVOQlFVTXNTVUZCU1N4WFFVRlhMR3RDUVVGclFpeEpRVUZKTEU5QlFVOHNSMEZCUnp0QlFVRkJMRzFDUVVNMVJTeE5RVUZOTEdGQlFXRXNaVUZCWlN4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQkxGbEJSMmhFTzBGQlFVRXNXVUZCU1N4UFFVRlBMRmxCUVZrc1kwRkJZeXhaUVVGWk8wRkJRVUVzVlVGRGJrUTdRVUZCUVN4UlFVTkdPMEZCUlVFc1owSkJRVkU3UVVGQlFTeFZRVU5LTzBGQlFVRXNXVUZEU1R0QlFVRkJMRmxCUVZVc1JVRkJReXhOUVVGTkxGZEJRVmNzVlVGQlZTeHRRa0ZCYlVJc1EwRkJReXhOUVVGTkxFVkJRVU03UVVGQlFTeFpRVUZITEVOQlFVTXNVVUZCVVN4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVGQkxGbEJRVWM3UVVGQlFTeFpRVU42Uml4RFFVRkRMRmRCUVZjc1NVRkJTVHRCUVVGQk8wRkJRVUVzV1VGQmJVSXNWMEZCVnp0QlFVRkJMRlZCUVZFN1FVRkJRU3hWUVVNeFJDeEZRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRVZCUVVNN1FVRkJRU3hSUVVGRE8wRkJRVUVzVFVGRGJrSTdRVUZGVHl4TlFVRk5MRk5CUVZNc1EwRkJReXhUUVVGNVFpeGxRVUV3UXp0QlFVTjRSaXhSUVVGQlFTeG5Ra0ZCWlN4UlFVRlJMRTFCUVUwN1FVRkROMElzWTBGQlRTeGpRVUYzUWl4RFFVRkRMRTlCUVU4c1VVRkJVU3hUUVVGVE8wRkJRM0pFTEdkQ1FVRk5MRlZCUVZVc1EwRkJRenRCUVVOcVFpeHRRa0ZCVXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hOUVVGTkxFMUJRVTBzUzBGQlN6dEJRVU51UXl4blFrRkJTU3hMUVVGTExGRkJRVkVzUTBGQlF5eExRVUZMTEV0QlFVc3NTMEZCU3l4WFFVRlhMRWRCUVVjN1FVRkROME1zYzBKQlFWRXNTMEZCU3l4cFFrRkJhVUlzUTBGQlF5eFJRVUZSTzBGQlFVRXNXVUZEZWtNN1FVRkJRU3hWUVVOR08wRkJRMEVzYVVKQlFVODdRVUZCUVN4WlFVTk1MRWRCUVVjc1VVRkJVU3hMUVVGTExFbEJRVWtzUTBGQlF6dEJRVUZCTEZsQlFVa3NaVUZCWlN4TlFVRk5MR0ZCUVdFc1pVRkJaU3hEUVVGRE8wRkJRVUU3UVVGQlFTeFpRVU16UlN4UFFVRlBMRTFCUVUwc1lVRkJZU3hsUVVGbExFTkJRVU1zU1VGQlNTeFhRVUZYTEd0Q1FVRnJRaXhKUVVGSkxFOUJRVThzUjBGQlJ6dEJRVUZCTEcxQ1FVTTFSU3hOUVVGTkxHRkJRV0VzWlVGQlpTeERRVUZETzBGQlFVRTdRVUZCUVR0QlFVRkJMRmxCUjJoRU8wRkJRVUVzV1VGQlNTeFBRVUZQTEZsQlFWa3NZMEZCWXl4WlFVRlpPMEZCUVVFc1ZVRkRia1E3UVVGQlFTeFJRVU5HTzBGQlJVRXNaMEpCUVZFN1FVRkJRU3hWUVVOS08wRkJRVUVzV1VGRFNUdEJRVUZCTEZsQlFWVXNSVUZCUXl4TlFVRk5MRmRCUVZjc1ZVRkJWU3h0UWtGQmJVSXNRMEZCUXl4TlFVRk5MRVZCUVVNN1FVRkJRU3haUVVGSExFTkJRVU1zVVVGQlVTeFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVRkJMRmxCUVVjN1FVRkJRU3haUVVONlJpeERRVUZETEZkQlFWY3NTVUZCU1R0QlFVRkJPMEZCUVVFc1dVRkJiVUlzVjBGQlZ6dEJRVUZCTEZWQlFWRTdRVUZCUVN4VlFVTXhSQ3hGUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVWQlFVTTdRVUZCUVN4UlFVRkRPMEZCUVVFc1RVRkRia0k3UVVGRlR5eE5RVUZOTERKQ1FVRXlRaXhEUVVGRExHVkJRM0pETERSQ1FVRTBRaXhWUVVGdlJUdEJRVUZCTzBGQlFVRTdPenRCUTJ4R2NFY3NUVUZsVFVNc2FVSkJORUpCTEhsQ1FWZEJMR3RDUVcxQ1R5eDVRa0ZyUlVFc1VVRmpRVHRCUVhwS1lqdEJRVUZCTzBGQlFVRTdRVUZIUVR0QlFVVkJPMEZCUTBFN1FVRkhRVHRCUVUxQkxFMUJRVTFCTEd0Q1FVRnBRaXhEUVVGRExGRkJRU3RDTEZOQlFYVkNPMEZCUXpWRkxGbEJRVWtzUTBGQlF5eFZRVUZWTEU5QlFVOHNVMEZCVXl4SFFVRkhPMEZCUTJoRExHZENRVUZOTEVsQlFVa3NUVUZCVFN4blFrRkJaMEk3UVVGQlFTeFJRVU5zUXp0QlFVTkJMR05CUVUwc2FVSkJRV2xDTzBGQlEzWkNMR05CUVUwc2FVSkJRV2xDTEU5QlFVOHNZMEZCWXp0QlFVTTFReXhqUVVGTkxGbEJRVmtzWlVGQlpUdEJRVU5xUXl4alFVRk5MRmxCUVZrc1pVRkJaU3hMUVVGTE8wRkJRM1JETEdWQlFVOHNVVUZCVVN4RFFVRkRMRTlCUVU4c1RVRkJUVHRCUVVNelFpeGpRVUZKTEUxQlFVMHNaMEpCUVdkQ08wRkJRM2hDTzBGQlFVRXNWVUZEUmp0QlFVVkJMR05CUVVrc1RVRkJUU3hoUVVGaExGZEJRVmM3UVVGRGFFTXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxHdERRVUZyUXp0QlFVRkJMRlZCUTNCRU8wRkJSVUVzWTBGQlNTeE5RVUZOTEV0QlFVc3NWMEZCVnl4WFFVRlhPMEZCUTI1RExHdENRVUZOTEVsQlFVa3NUVUZCVFN3d1EwRkJNRU03UVVGQlFTeFZRVU0xUkR0QlFVTkJMR2RDUVVGTkxFdEJRVXNzVVVGQlVTeERRVUZETEV0QlFVdERMRTlCUVUwN1FVRkROMElzWjBKQlFVbEJMRTlCUVUwc1VVRkJVU3hSUVVGUkxHVkJRV1VzUzBGQlMwRXNSVUZCUXl4SFFVRkhPMEZCUTJoRUxHOUNRVUZOTEVsQlFVa3NUVUZCVFN4clEwRkJhME03UVVGQlFTeFpRVU53UkR0QlFVRkJMRlZCUTBZc1EwRkJRenRCUVVGQkxGRkJRMGdzUTBGQlF6dEJRVUZCTEUxQlEwZzdRVUZGUVN4TlFVRk5MREJDUVVFd1FpeERRVUZETEdsQ1FVRjVRaXgzUWtGQmQwTTdRVUZCUVR0QlFVRkJMSGREUVVVeFJDeGxRVUZsTEUxQlFVMHNiVUpCUVcxQ08wRkJRVUVzWjBOQlEyaEVMR1ZCUVdVN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEdGQlMyeERMR1ZCUVdVN1FVRkJRVHRCUVVjMVFpeE5RVUZOTEcxQ1FVRnRRaXhEUVVGRExGRkJRV3RETEZkQlFUQkNPMEZCUTNCR0xHTkJRVTBzYTBKQlFXdENMRTlCUVU4N1FVRkZMMElzWTBGQlRTeFpRVUZ6UWl4RFFVRkRPMEZCUXpkQ0xHbENRVUZUTEVsQlFVa3NSMEZCUnl4SlFVRkpMR2xDUVVGcFFpeEZRVUZGTEVkQlFVYzdRVUZEZUVNc1owSkJRVTBzWjBKQlFXZENMRTlCUVU4c1dVRkJXU3hqUVVGakxFOUJRVThzUTBGQlF5eEZRVUZGTEdGQlFXRXNVMEZCVXl4RFFVRkRPMEZCUTNoR0xHTkJRVWtzYjBKQlFXOUNMRWRCUVVjN1FVRkRla0lzYzBKQlFWVXNTMEZCU3l4aFFVRmhPMEZCUVVFc1ZVRkRPVUlzVjBGQlZ5eE5RVUZOTEVkQlFVYzdRVUZEYkVJc2MwSkJRVlVzUzBGQlN5eHhRa0ZCY1VJc1EwRkJReXhSUVVGUkxHRkJRV0VzU1VGQlNUdEJRVUZCTEZWQlEyaEZMRmRCUVZjc1RVRkJUU3hyUWtGQmEwSXNSMEZCUnp0QlFVTndReXh6UWtGQlZTeExRVUZMTEZWQlFWVXNZVUZCWVN4SlFVRkpPMEZCUVVFc1ZVRkROVU1zVDBGQlR6dEJRVU5NTEhOQ1FVRlZMRXRCUVVzc01FSkJRVEJDTEVOQlFVTXNUMEZCVHl4aFFVRmhMRWxCUVVrN1FVRkJRU3hWUVVOd1JUdEJRVUZCTEZGQlEwWTdRVUZEUVN4bFFVRlBMRlZCUVZVc1MwRkJTeXhKUVVGSk8wRkJRVUVzVFVGRE5VSTdRVUZGVHl4TlFVRk5MREJDUVVOVUxFTkJRVU1zVVVGQkswSXNZMEZCYzBJc1lVRkJkVUlzWVVGQmIwTTdRVUZETDBjc1kwRkJUU3hoUVVGaExGVkJRVlVzUzBGQlN5eFhRVUZYTzBGQlJUZERMR05CUVUwc2JVSkJRVzFDTEVsQlFVa3NUVUZCWXl4UFFVRlBMRTFCUVUwN1FVRkRlRVFzWTBGQlRTeFpRVUZaTEVsQlFVa3NUVUZCY1VJc1QwRkJUeXhOUVVGTk8wRkJSWGhFTEZsQlFVa3NZMEZCWXp0QlFVTnNRaXhqUVVGTkxHOUNRVUYzUkN4RFFVRkRPMEZCUXk5RUxHTkJRVTBzWVVGQllTeERRVUZETzBGQlEzQkNMR05CUVUwc2EwSkJRVzlETEVOQlFVTXNSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeFhRVUZWTEVOQlFVTTdRVUZEY0VZc2FVSkJRVk1zU1VGQlNTeEhRVUZITEVsQlFVa3NUMEZCVHl4UlFVRlJMRVZCUVVVc1IwRkJSenRCUVVOMFF5eDVRa0ZCWlN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExGbEJRVms3UVVGRE1VTXNNa0pCUVdsQ0xFTkJRVU1zU1VGQlNUdEJRVU4wUWl4eFFrRkJWeXhMUVVGTExFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NUVUZCVFR0QlFVTnlReXh2UWtGQlZTeERRVUZETEVsQlFVa3NZMEZCWXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hWUVVGVkxGZEJRVmNzUTBGQlF5eERRVUZETzBGQlEycEZMRFJDUVVGclFpeExRVUZMTEUxQlFVMDdRVUZETjBJc01FSkJRV2RDTEV0QlFVc3NSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeHBRa0ZCYVVJc1EwRkJReXhGUVVGRExFTkJRVU03UVVGQlFTeFJRVU42UlR0QlFVTkJMR2xDUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEU5QlFVOHNVVUZCVVN4RlFVRkZMRWRCUVVjN1FVRkRkRU1zTUVKQlFXZENMRXRCUVVzc1IwRkJSeXd5UWtGQk1rSXNUMEZCVHl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRE8wRkJRVUVzVVVGRGNFVTdRVUZEUVN4M1FrRkJaMElzUzBGQlN5eEhRVUZITERKQ1FVRXlRaXhYUVVGWExFTkJRVU03UVVGRkwwUXNZMEZCVFN4VFFVRlRMR1ZCUVdVc1ZVRkJWU3hWUVVGVkxGbEJRVmtzVFVGQlRUdEJRVU53UlN4alFVRk5MR05CUVdNc1QwRkJUeXhYUVVGWExGZEJRVmNzV1VGQldUdEJRVU0zUkN4alFVRk5MSE5DUVVOR0xFMUJRVTBzUzBGQlN5eE5RVUZOTEdsQ1FVRnBRaXhOUVVGTkxFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNTVUZCU1N4UFFVRkxMRFJDUVVFMFFpeERRVUZETEVWQlFVVXNSVUZCUlN4TFFVRkxMRWRCUVVjN1FVRkRlRWNzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQkswSTdRVUZCUVR0QlFVRkJMRXRCUlhwRUxFMUJRVTA3UVVGRFNDeDFRa0ZCWVN4blFrRkJaMElzWTBGQll5eExRVUZMTzBGQlEyaEVMRzFDUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEU5QlFVOHNVVUZCVVN4TFFVRkxPMEZCUTNSRExIbENRVUZoTEdkQ1FVRm5RaXh0UWtGQmJVSXNRMEZCUXl4SlFVRkpMRXRCUVVzN1FVRkJRU3hWUVVNMVJEdEJRVU5CTEdsQ1FVRlBMR0ZCUVdFc2FVSkJRV2xDTEVkQlFVY3NWMEZCVnl4TlFVRk5PMEZCUVVFc1VVRkRNMFFzUjBGQlJ5eERRVUZETzBGQlFVRTdRVUZCUVN4SlFVVk9MSGRDUVVGM1FpeHBRa0ZCYVVJc1VVRkJVU3h0UWtGQmJVSXNRMEZCUXp0QlFVRkJPMEZCUVVFc1NVRkZja1VzWVVGQllTeFZRVUZWTEVOQlFVTTdRVUZCUVN4TlFVTjBRaXhoUVVGaExITkRRVUZ6UXl4eFFrRkJjVUlzUTBGQlF6dEJRVUZCTzBGQlFVRXNiMEpCUlRORUxFOUJRVThzWjBKQlFXZENMRmxCUVZrc1EwRkJRenRCUVVGQk8wRkJRVUVzTWtOQlJXSXNWMEZCVnp0QlFVRkJPMEZCUVVFc01FTkJSVm9zYVVKQlFXbENMRTFCUVUwc1RVRkJUU3h0UWtGQmJVSTdRVUZCUVN4UlFVTnNSaXhYUVVGWE8wRkJRVUU3UVVGQlFUdEJRVUZCTEUxQlIySXNhVUpCUVdsQ0xGZEJRVmNzVFVGQlRTeERRVUZETzBGQlFVRTdRVUZIYmtNc1pVRkJUenRCUVVGQkxGVkJRMHdzVFVGQlRUdEJRVUZCTEZWQlEwNHNZVUZCWVN4RlFVRkRMRTFCUVUwc1IwRkJSeXhaUVVGWkxFbEJRVWtzYTBKQlFXbENPMEZCUVVFc1ZVRkRlRVFzV1VGQldTeFBRVUZQTzBGQlFVRXNXVUZEYWtJc1UwRkJVeXhEUVVGRExFVkJRVU1zVFVGQlRTeGhRVUZoTEZOQlFWRXNRMEZCUXp0QlFVRkJMRmxCUTNaRExHVkJRV1VzUlVGQlF5eEhRVUZITEV0QlFVczdRVUZCUVN4alFVRkxMR0ZCUVdFN1FVRkJRVHRCUVVGQkxGbEJRWFZDTEVWQlFVTTdRVUZCUVN4WlFVTnNSVHRCUVVGQkxGVkJRMFk3UVVGQlFTeFZRVU5CTzBGQlFVRXNVVUZEUmp0QlFVRkJMRTFCUTBZN1FVRkZSeXhOUVVGTkxGTkJRVk1zUTBGQlF5eFRRVUY1UWl4bFFVRjFRenRCUVVOeVJpeGpRVUZOTEZOQlFWTXNVVUZCVVR0QlFVTjJRaXhqUVVGTkxHRkJRV0VzVDBGQlR5eERRVUZETEVWQlFVVTdRVUZETjBJc1kwRkJUU3hsUVVGbExGVkJRVlVzWTBGQll5eFhRVUZYTEUxQlFVMHNWMEZCVnl4TlFVRk5PMEZCUXk5RkxGRkJRVUZFTEdkQ1FVRmxMRkZCUVZFc1dVRkJXVHRCUVVOdVF5eGpRVUZOTEdOQlFXTXNWMEZCVnl4TlFVRk5PMEZCUTNKRExHOUNRVUZaTEZsQlFWa3NTVUZEY0VJc1QwRkJUeXhQUVVGUExFTkJRVU1zUzBGQlN5eFZRVUZWTEU5QlFVOHNUVUZCVFN4TFFVRkxMRk5CUVZNc1pVRkJaU3hOUVVGTkxFdEJRVXNzV1VGQldTeEpRVUZKTEVsQlFVa3NRMEZCUXp0QlFVVTFSeXhqUVVGTkxHbENRVUZwUWl4UFFVRlBMRTlCUVU4c1YwRkJVeXhWUVVGVkxFdEJRVXNzVFVGQlRTeEpRVUZKTEVsQlFVa3NRMEZCUXp0QlFVTTFSU3huUWtGQlVUdEJRVUZCTEZWQlEwb3NkMEpCUVhkQ0xHZENRVUZuUWl4alFVRmpMR0ZCUVdFc1QwRkJUeXhEUVVGRExFVkJRVVVzVVVGQlVUdEJRVUZCTEZWQlFVY3NSVUZCUXl4UlFVRlJMR1ZCUVdNN1FVRkJRU3hSUVVGRE8wRkJRVUVzVFVGRGRFZzdRVUZGVHl4TlFVRk5MSGRDUVVGM1FpeERRVUZETEdWQlEyeERMRFJDUVVFMFFpeEZRVUZETEUxQlFVMHNWMEZCVnl4TFFVRmpMRU5CUVVNN1FVRkJRVHRCUVVGQk96czdRVU14U21wRkxFMUJiMFZOTEhsQ1FXMUxRU3hwUTBGelIwRXNhVU5CTWtoQkxHMURRU3RGVHl4blFrRnBSRkFzVTBGdFNFODdRVUV6Y2tKaU8wRkJRVUU3UVVGQlFUdEJRVWRCTzBGQlJVRTdRVUZGUVR0QlFVTkJPMEZCTkVSQkxFMUJRVTBzTUVKQlFUQkNMRU5CUVVNc1VVRkJLMElzWlVGQmIwUTdRVUZ0UTJ4SUxHTkJRVTBzVVVGQlVTeFBRVUZQTEVOQlFVTTdRVUZEZEVJc1kwRkJUU3hWUVVGVkxFOUJRVThzUTBGQlF6dEJRVU40UWl4alFVRk5MRTlCUVU4c1QwRkJUeXhEUVVGRE8wRkJRM0pDTEdOQlFVMHNXVUZCV1N4UFFVRlBMRU5CUVVNN1FVRkRNVUlzWTBGQlRTeFBRVUZQTEU5QlFVOHNRMEZCUXp0QlFVTnlRaXhqUVVGTkxIVkNRVUYxUWl4UFFVRlBMRU5CUVVNN1FVRkZja01zV1VGQlNTeFJRVUZSTEhOQ1FVRnpRanRCUVVOb1F5eG5Ra0ZCVFN4SlFVRkpMRTFCUVUwc05FUkJRVFJFTzBGQlFVRXNVVUZET1VVN1FVRkZRU3haUVVGSkxFMUJRVTBzUzBGQlN5eFhRVUZYTEVkQlFVYzdRVUZETTBJc1owSkJRVTBzU1VGQlNTeE5RVUZOTEhORFFVRnpRenRCUVVGQkxGRkJRM2hFTzBGQlJVRXNZMEZCVFN4WlFVRlpMRTFCUVUwc1MwRkJTeXhEUVVGRE8wRkJRemxDTEdOQlFVMHNhVUpCUVdsQ0xFMUJRVTBzUzBGQlN5eERRVUZETzBGQlEyNURMR05CUVUwc2EwSkJRV3RDTEUxQlFVMHNTMEZCU3l4RFFVRkRPMEZCUlhCRExGbEJRVWtzUzBGQlN5eExRVUZMTEZkQlFWY3NSMEZCUnp0QlFVTXhRaXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNLME5CUVN0RE8wRkJRVUVzVVVGRGFrVTdRVUZGUVN4WlFVRkpMRkZCUVZFc1MwRkJTeXhYUVVGWExFZEJRVWM3UVVGRE4wSXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxHdEVRVUZyUkR0QlFVRkJMRkZCUTNCRk8wRkJSVUVzV1VGQlNTeFJRVUZSTEV0QlFVc3NRMEZCUXl4TlFVRk5MR2xDUVVGcFFqdEJRVU4yUXl4blFrRkJUU3hKUVVGSkxFMUJRVTBzZFVWQlFYVkZPMEZCUVVFc1VVRkRla1k3UVVGRlFTeFpRVUZKTEV0QlFVc3NTMEZCU3l4RFFVRkRMRTFCUVUwc1VVRkJVU3hMUVVGTExFTkJRVU1zUjBGQlJ6dEJRVU53UXl4blFrRkJUU3hKUVVGSkxFMUJRVTBzYjBaQlFXOUdPMEZCUVVFc1VVRkRkRWM3UVVGRlFTeFpRVUZKTEdOQlFXTXNTMEZCU3l4TFFVRkxMRU5CUVVNc1NVRkJTVHRCUVVOcVF5eFpRVUZKTEdOQlFXTTdRVUZEYkVJc1dVRkJTU3hqUVVGak8wRkJRMnhDTEZsQlFVa3NWMEZCVnl4bFFVRmxMRk5CUVZNc1IwRkJSenRCUVVONFF5eGpRVUZKTEZkQlFWY3NaVUZCWlN4WFFVRlhMRWRCUVVjN1FVRkRNVU1zYTBKQlFVMHNTVUZCU1N4TlFVRk5MRzFFUVVGdFJEdEJRVUZCTEZWQlEzSkZPMEZCUTBFc2NVSkJRVmNzVFVGQlRTeFhRVUZYTEdkQ1FVRm5RanRCUVVNeFF5eG5Ra0ZCU1N4TFFVRkxMRmRCUVZjc1lVRkJZU3hIUVVGSE8wRkJRMnhETEc5Q1FVRk5MRWxCUVVrc1RVRkJUU3h0UkVGQmJVUTdRVUZCUVN4WlFVTnlSVHRCUVVGQkxGVkJRMFk3UVVGRlFTeDNRa0ZCWXl4WFFVRlhMR1ZCUVdVc1EwRkJRenRCUVVONlF5eDNRa0ZCWXl4WFFVRlhMR1ZCUVdVc1EwRkJRenRCUVVONlF5eDNRa0ZCWXl4WFFVRlhMR1ZCUVdVc1EwRkJRenRCUVVGQkxGRkJRek5ETzBGQlJVRXNZMEZCVFN4dFFrRkJiVUk3UVVGRmVrSXNXVUZCU1N4blFrRkJaMElzWVVGQllUdEJRVU12UWl4blFrRkJUU3hKUVVGSkxFMUJRVTBzTmtSQlFUWkVPMEZCUVVFc1VVRkRMMFU3UVVGRlFTeFpRVUZKTEV0QlFVc3NTMEZCU3l4RFFVRkRMRTFCUVUwc1kwRkJZeXhqUVVGakxHRkJRV0U3UVVGRE5VUXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxDdEZRVUVyUlR0QlFVRkJMRkZCUTJwSE8wRkJSVUVzV1VGQlNTeHhRa0ZCY1VJN1FVRkRla0lzV1VGQlNTeE5RVUZOTzBGQlExSXNZMEZCU1N4blFrRkJaMElzWVVGQllUdEJRVU12UWl4clFrRkJUU3hKUVVGSkxFMUJRVTBzYjBSQlFXOUVPMEZCUVVFc1ZVRkRkRVU3UVVGRFFTeGpRVUZKTEV0QlFVc3NTMEZCU3l4WFFVRlhMRWRCUVVjN1FVRkRNVUlzYTBKQlFVMHNTVUZCU1N4TlFVRk5MSEZEUVVGeFF6dEJRVUZCTEZWQlEzWkVPMEZCUTBFc1kwRkJTU3hMUVVGTExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVYzdRVUZEZEVJc2EwSkJRVTBzU1VGQlNTeE5RVUZOTEhkRFFVRjNRenRCUVVGQkxGVkJRekZFTzBGQlEwRXNZMEZCU1N4TFFVRkxMRXRCUVVzc1EwRkJReXhOUVVGTkxGZEJRVmM3UVVGRE9VSXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxHdEVRVUZyUkR0QlFVRkJMRlZCUTNCRk8wRkJRMEVzWTBGQlNTeExRVUZMTEV0QlFVc3NRMEZCUXl4TlFVRk5MRmRCUVZjc1ZVRkJWVHRCUVVONFF5eHJRa0ZCVFN4SlFVRkpMRTFCUVUwc1owUkJRV2RFTzBGQlFVRXNWVUZEYkVVN1FVRkRRU3hqUVVGSkxFdEJRVXNzUzBGQlN5eERRVUZETEUxQlFVMHNZMEZCWXl4WFFVRlhMRlZCUVZVN1FVRkRkRVFzYTBKQlFVMHNTVUZCU1N4TlFVRk5MR2RGUVVGblJUdEJRVUZCTEZWQlEyeEdPMEZCUlVFc1kwRkJTU3hEUVVGRExGZEJRVmNzZDBKQlFYZENPMEZCUTNSRExHbERRVUZ4UWl4TFFVRkxMRXRCUVVzc1EwRkJRenRCUVVGQkxGVkJRMnhETzBGQlFVRXNVVUZGUmp0QlFVVkJMR05CUVUwc2MwSkJRWE5DTEcxQ1FVRnRRanRCUVVNdlF5eGpRVUZOTEc5Q1FVRnZRanRCUVVVeFFpeGpRVUZOTEZkQlFWYzdRVUZEYWtJc1dVRkJTU3hYUVVGWE8wRkJSMklzWjBKQlFVMHNTVUZCU1N4TlFVRk5MRzlDUVVGdlFqdEJRVUZCTEZGQlEzUkRPMEZCUlVFc1dVRkJTU3hOUVVGTk8wRkJRMUlzWjBKQlFVMHNTVUZCU1N4TlFVRk5MSFZDUVVGMVFqdEJRVUZCTEZGQlEzcERPMEZCUlVFc1pVRkJUenRCUVVGQkxGVkJRMHc3UVVGQlFTeFZRVU5CTzBGQlFVRXNWVUZEUVR0QlFVRkJMRlZCUTBFN1FVRkJRU3hWUVVOQk8wRkJRVUVzVlVGRFFUdEJRVUZCTEZWQlEwRTdRVUZCUVN4VlFVTkJMRmxCUVZrN1FVRkJRU3hWUVVOYU8wRkJRVUVzVlVGRFFTeFZRVUZWTEV0QlFVc3NUVUZCVFN4alFVRmpMRmRCUVZjc1VVRkJVVHRCUVVGQkxGVkJRM1JFTEZkQlFWY3NTMEZCU3l4TlFVRk5MR05CUVdNc1YwRkJWeXhSUVVGUk8wRkJRVUVzVlVGRGRrUXNWVUZCVlN4WFFVRlhPMEZCUVVFc1ZVRkRja0lzYTBKQlFXdENPMEZCUVVFc1ZVRkRiRUlzZDBKQlFYZENPMEZCUVVFc1ZVRkRlRUlzYVVKQlFXbENMRmRCUVZjN1FVRkJRU3hWUVVNMVFqdEJRVUZCTEZWQlEwRXNUMEZCVHl4WFFVRlhPMEZCUVVFc1ZVRkRiRUlzY1VKQlFYRkNPMEZCUVVFc1ZVRkRja0lzWTBGQll6dEJRVUZCTEZWQlEyUXNWMEZCVnp0QlFVRkJMRkZCUTJJN1FVRkJRU3hOUVVOR08wRkJSVUVzVFVGQlRTeHJRMEZCYTBNc1EwRkJReXhWUVVFd1FpeFBRVUZ0UWl4SFFVRlhMRTFCUVdNN1FVRkROMGNzWTBGQlRTeGhRVUZoTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM0pETEZsQlFVa3NTMEZCU3p0QlFVTlVMR05CUVUwc1VVRkJVU3hKUVVGSk8wRkJRMnhDTEZsQlFVa3NVVUZCVVN4SlFVRkpPMEZCUTJRc1pVRkJTenRCUVVGQkxGRkJRMUFzVjBGQlZ5eFJRVUZSTEVsQlFVa3NTVUZCU1R0QlFVTjZRaXhsUVVGTExFdEJRVXNzUzBGQlN5eFJRVUZSTEVOQlFVTTdRVUZCUVN4UlFVTXhRanRCUVVOQkxHTkJRVTBzYjBKQlFXOUNMRXRCUVVzc1MwRkJTeXhKUVVGSkxHRkJRV0VzUlVGQlJUdEJRVU4yUkN4alFVRk5MR3RDUVVGdlF6dEJRVUZCTEZWQlEzaERMRVZCUVVNc1RVRkJUU3hOUVVGTkxGVkJRVlVzVFVGQlRTeEpRVUZKTEVWQlFVTTdRVUZCUVN4VlFVRkhMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNUVUZCU3p0QlFVRkJMRlZCUTNoRkxFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc2EwSkJRV2xDTzBGQlFVRXNVVUZEYWtRN1FVRkRRU3hqUVVGTkxGZEJRVmNzTkVKQlFUUkNMRTFCUVUwc1ZVRkJWU3hWUVVGVk8wRkJRM1pGTEdOQlFVMHNWVUZCVlN4NVEwRkJNRU1zVlVGQlZUdEJRVVZ3UlN4alFVRk5MR3RDUVVGclFpeERRVUZETEdsQ1FVRXJRanRCUVVOMFJDeG5Ra0ZCVFN4alFVRmpMR1ZCUVdVc1MwRkJTeXhOUVVGTkxGVkJRVlVzVFVGQlRTeE5RVUZOTEZWQlFWVTdRVUZET1VVc1owSkJRVTBzWjBKQlFXZENMREJDUVVFd1FpeE5RVUZOTEZGQlFWRTdRVUZET1VRc1owSkJRVTBzVjBGQk9FSTdRVUZCUVN4WlFVTnNReXhGUVVGRExFMUJRVTBzVTBGQlV5eE5RVUZOTEdOQlFYVkRPMEZCUVVFc1dVRkJSeXhGUVVGRExFMUJRVTBzVlVGQlZTeE5RVUZOTEUxQlFVczdRVUZCUVN4WlFVTTFSaXhGUVVGRExFMUJRVTBzZFVKQlFYVkNMRTFCUVUwc1RVRkJTenRCUVVGQkxGVkJRek5ETzBGQlJVRXNhVUpCUVU4N1FVRkJRU3d3UTBGREswSXNSVUZCUlR0QlFVRkJMREJEUVVOR0xFVkJRVVU3UVVGQlFTeEpRVU40UXl4aFFVRmhMR2xDUVVGcFFpeFJRVUZSTEVWQlFVVXNhVUpCUVdsQ0xGZEJRVmNzUTBGQlF6dEJRVUZCTEVsQlEzSkZMR0ZCUVdFc1ZVRkJWVHRCUVVGQkxGbEJRM0pDTzBGQlFVRXNXVUZCU1R0QlFVRkJMRmxCUVVjN1FVRkJRU3hWUVVOVUxFTkJRVU1zUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRGhDUVVsM1FpeFBRVUZQTzBGQlFVRTdRVUZCUVN4blEwRkZUQ3hQUVVGUE8wRkJRVUU3UVVGQlFTd3JRa0ZGVWl4TlFVRk5PMEZCUXk5Q0xHOUNRVUZSTEZsQlFWazdRVUZCUVN4alFVTnNRaXhMUVVGTE8wRkJRMGdzZFVKQlFVODdRVUZCUVN4alFVTlVMRXRCUVVzN1FVRkRTQ3gxUWtGQlR6dEJRVUZCTEdOQlExUXNTMEZCU3p0QlFVTklMSFZDUVVGUE8wRkJRVUVzWTBGRFZEdEJRVU5GTEhOQ1FVRk5MRWxCUVVrc1RVRkJUU3d5UWtGQk1rSXNWVUZCVlN4RlFVRkZPMEZCUVVFc1dVRkRNMFE3UVVGQlFTeFZRVU5HTEVkQlFVY3NRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxESkNRVWx0UWl4RlFVRkZPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzZFVKQlNVNHNUMEZCVHp0QlFVRkJPMEZCUVVFc01FSkJSVW9zVDBGQlR6dEJRVUZCTzBGQlFVRXNLMEpCUlVZc1RVRkJUVHRCUVVNdlFpeHZRa0ZCVVN4WlFVRlpPMEZCUVVFc1kwRkRiRUlzUzBGQlN6dEJRVU5JTEhWQ1FVRlBPMEZCUVVFc1kwRkRWQ3hMUVVGTE8wRkJRMGdzZFVKQlFVODdRVUZCUVN4alFVTlVMRXRCUVVzN1FVRkRTQ3gxUWtGQlR6dEJRVUZCTEdOQlExUTdRVUZEUlN4elFrRkJUU3hKUVVGSkxFMUJRVTBzTWtKQlFUSkNMRlZCUVZVc1JVRkJSVHRCUVVGQkxGbEJRek5FTzBGQlFVRXNWVUZEUml4SFFVRkhMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTd3lRa0ZKYlVJc1JVRkJSVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN3d1FrRk5TQ3haUVVGWkxFdEJRVXNzUzBGQlN6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMSGxDUVVsMlFpeFBRVUZQTzBGQlFVRXNNRUpCUTA0c1dVRkJXU3hMUVVGTExFdEJRVXM3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4UlFVazVRenRCUVVWQkxHVkJRVTg3UVVGQlFTeFZRVU5NTEUxQlFVMDdRVUZCUVN4VlFVTk9MR0ZCUVdFc1JVRkJReXhOUVVGTkxFZEJRVWNzUlVGQlJTeEpRVUZKTEZGQlFWRXNTVUZCU1N4VlFVRlZMRWRCUVVVN1FVRkJRU3hWUVVOeVJEdEJRVUZCTEZWQlEwRXNXVUZCV1N4UFFVRlBMRVZCUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzWlVGQlpTeEZRVUZETEVkQlFVY3NSVUZCUXl4SFFVRkhMR2RDUVVGbE8wRkJRVUVzVVVGRGVrVTdRVUZCUVN4TlFVTkdPMEZCUlVFc1RVRkJUU3hyUTBGRFJpeERRVUZETEZWQlFUQkNMRWRCUVdVc1MwRkJhVUlzYzBKQlF6RkVMRmxCUVdsRExGbEJRVFJDTEhWQ1FVRXJRanRCUVVNelJpeGpRVUZOTEhOQ1FVRnpRaXh4UWtGQmNVSXNWMEZCVnp0QlFVTTFSQ3hqUVVGTkxHRkJRV0VzUTBGQlF5eFhRVUZYTEZkQlFWY3NWMEZCVnl4VlFVRlZMRmRCUVZjc1owSkJRV2RDTEcxQ1FVRnRRanRCUVVrM1J5eGpRVUZOTEZGQlFWRXNWMEZCVnl4VlFVRlZMRWxCUVVrc1NVRkJUU3hMUVVGTExFdEJRVXNzVjBGQlZ5eFJRVUZSTEVsQlFVa3NWMEZCVnp0QlFVTjZSaXhqUVVGTkxHRkJRV0VzYVVKQlFXbENMRmRCUVZjc1VVRkJVVHRCUVVOMlJDeGpRVUZOTEhGQ1FVRnhRaXhYUVVGWExGZEJRVmM3UVVGRGFrUXNZMEZCVFN4WlFVRlpPMEZCUTJ4Q0xHTkJRVTBzVjBGQlZ6dEJRVUZCTEZWQlEyWXNSMEZCUnl4TFFVRkxMRXRCUVVzc2MwSkJRWE5DTEZOQlFWTTdRVUZCUVN4VlFVTTFReXhIUVVGSExFdEJRVXNzUzBGQlN5eFhRVUZYTEdsQ1FVRnBRaXhUUVVGVE8wRkJRVUVzVlVGRGJFUXNSMEZCUnl4WFFVRlhMRmxCUVZrc1YwRkJWenRCUVVGQkxGRkJRM1pETzBGQlEwRXNZMEZCVFN4clFrRkJiME03UVVGQlFTeFZRVU40UXl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEZkQlFWY3NaVUZCWXp0QlFVRkJMRlZCUVVjc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4dFFrRkJhMEk3UVVGQlFTeFZRVU14Unl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEc5Q1FVRnRRanRCUVVGQkxGVkJRVWNzUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hYUVVGWExGTkJRVkU3UVVGQlFTeFZRVU55Unl4RlFVRkRMSEZDUVVGelFpeE5RVUZOTEUxQlFVczdRVUZCUVN4UlFVTndRenRCUVVWQkxHTkJRVTBzYjBKQlFYZEVMRU5CUVVNc1VVRkJVU3hOUVVGTk8wRkJRemRGTEZsQlFVa3NjMEpCUVhOQ08wRkJRM2hDTERSQ1FVRnJRaXhMUVVGTExFMUJRVTA3UVVGRE4wSXNNRUpCUVdkQ0xFdEJRVXNzUjBGQlJ5d3lRa0ZCTWtJc2NVSkJRWEZDTEVsQlFVa3NRMEZCUXp0QlFVRkJMRkZCUXk5Rk8wRkJSVUVzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQkswSTdRVUZEZEVRc1owSkJRVTBzVTBGQlV5eGpRVUZqTEV0QlFVc3NSVUZCUlN4VlFVRlZMRVZCUVVVc1RVRkJUU3hWUVVGVk8wRkJRMmhGTEdkQ1FVRk5MRk5CUVZNc1kwRkJZeXhQUVVGUExFbEJRVWtzVlVGQlZTeEpRVUZKTEUxQlFVMHNWVUZCVlR0QlFVTjBSU3huUWtGQlRTeFpRVUZaTEVOQlFVTXNVVUZCVVN4TlFVRk5PMEZCUTJwRExHZENRVUZOTERSQ1FVRTBRaXgxUWtGRE9VSXNZMEZCWXl3d1FrRkJNRUlzY1VKQlFYRkNMRlZCUVZVc2NVSkJRWEZDTEV0QlFVc3NUVUZCVFN4SlFVTjJSenRCUVVOS0xHTkJRVWtzTWtKQlFUSkNPMEZCUXpkQ0xITkNRVUZWTEV0QlFVc3NlVUpCUVhsQ08wRkJRVUVzVlVGRE1VTTdRVUZEUVN4blFrRkJUU3hUUVVGVExHVkJRV1VzVlVGQlZTeEZRVUZGTEZWQlFWVXNWVUZCVlR0QlFVVTVSQ3huUWtGQlRTeFZRVUZWTEhsRFFVRXdReXhWUVVGVk8wRkJSWEJGTEdkQ1FVRk5MRmRCUVRoQ08wRkJRVUVzV1VGRGJFTXNSVUZCUXl4TlFVRk5MRXRCUVVzc1RVRkJUU3hOUVVGTE8wRkJRVUVzV1VGQlJ5eEZRVUZETEUxQlFVMHNTMEZCU3l4TlFVRk5MRTFCUVVzN1FVRkJRU3haUVVGSExFVkJRVU1zVFVGQlRTeExRVUZMTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUXpORkxFVkJRVU1zVFVGQlRTeGhRVUZoTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUVVjc1JVRkJReXhOUVVGTkxGTkJRVk1zVFVGQlRTeE5RVUVyUWp0QlFVRkJMRlZCUTNwR08wRkJRMEVzYVVKQlFVODdRVUZCUVN4elFrRkRUeXhUUVVGVE8wRkJRVUU3UVVGQlFTeG5RMEZGUXl4UFFVRlBMRXRCUVVzc1QwRkJUeXhMUVVGTExGbEJRVmtzVTBGQlV6dEJRVUZCTEdkRFFVTTNReXhQUVVGUExFdEJRVXNzVDBGQlR5eExRVUZMTEZsQlFWa3NVMEZCVXp0QlFVRkJMRWxCUTNwRkxHRkJRV0VzYVVKQlFXbENMRkZCUVZFc1JVRkJSU3hwUWtGQmFVSXNSMEZCUnl4WFFVRlhMRTFCUVUwc1EwRkJRenRCUVVGQkxFbEJRemxGTEdGQlFXRXNWVUZCVlR0QlFVRkJMRmxCUTJwQ08wRkJRVUVzV1VGQlZ6dEJRVUZCTEZsQlFWYzdRVUZCUVN4VlFVTjRRaXhEUVVGRExFTkJRVU03UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxHdENRVkZSTEU5QlFVODdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRzFDUVZkT0xFOUJRVTg3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzZDBKQlUwWXNUVUZCVFR0QlFVTndRaXh2UWtGQlVTeFpRVUZaTzBGQlFVRXNZMEZEYkVJc1MwRkJTenRCUVVOSUxIVkNRVUZQTzBGQlFVRXNZMEZEVkN4TFFVRkxPMEZCUTBnc2RVSkJRVTg3UVVGQlFTeGpRVU5VTEV0QlFVczdRVUZEU0N4MVFrRkJUenRCUVVGQkxHTkJRMVE3UVVGRFJTeHpRa0ZCVFN4SlFVRkpMRTFCUVUwc01rSkJRVEpDTEZWQlFWVXNSVUZCUlR0QlFVRkJMRmxCUXpORU8wRkJRVUVzVlVGRFJpeEhRVUZITEVOQlFVTTdRVUZCUVR0QlFVRkJMRXRCUlZBc1RVRkJUVHRCUVVORUxHZENRVUZKTERKQ1FVRXlRanRCUVVNM1FpeHhRa0ZCVHp0QlFVRkJPMEZCUVVFN1FVRkJRU3h6UWtGSFJ5d3dRa0ZCTUVJc1MwRkJTeXhQUVVGUE8wRkJRVUVzTkVKQlEyaERMRTlCUVU4c1MwRkJTeXhMUVVGTExEUkNRVU0zUWl3d1FrRkJNRUlzWVVGQllTeFRRVUZUTEVOQlFVTTdRVUZCUVN4WlFVTjJSRHRCUVVOQkxHMUNRVUZQTEhWQ1FVRjFRaXhQUVVGUExFdEJRVXNzUzBGQlN6dEJRVUZCTEZWQlEycEVMRWRCUVVjc1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFTeFJRVWRPTzBGQlEwRXNaVUZCVHp0QlFVRkJMRlZCUTB3c1RVRkJUVHRCUVVGQkxGVkJRMDRzWVVGQllTeEZRVUZETEUxQlFVMHNSMEZCUnl4VlFVRlZMRWxCUVVrc2EwSkJRV2xDTzBGQlFVRXNWVUZEZEVRc1dVRkJXU3hQUVVGUE8wRkJRVUVzV1VGRGFrSXNVMEZCVXl4RFFVRkRMRVZCUVVNc1RVRkJUU3haUVVGWkxGVkJRVlVzUlVGQlJTeFZRVUZWTERaQ1FVRm5ReXhEUVVGRE8wRkJRVUVzV1VGRGNFWXNaVUZCWlR0QlFVRkJMRmxCUTJZN1FVRkJRU3hWUVVOR08wRkJRVUVzVlVGRFFUdEJRVUZCTEZGQlEwWTdRVUZCUVN4TlFVTkdPMEZCUjBvc1RVRkJUU3h2UTBGRFJpeERRVUZETEZWQlFUQkNMRTlCUVcxQ0xFZEJRV1VzVVVGRE5VUXNkVUpCUVN0Q08wRkJRemxDTEdOQlFVMHNjMEpCUVhOQ0xIRkNRVUZ4UWl4UFFVRlBPMEZCUTNoRUxHTkJRVTBzWTBGQll5eERRVUZETEU5QlFVOHNWMEZCVnl4UFFVRlBMR2RDUVVGblFpeFBRVUZQTEZkQlFWYzdRVUZEYUVZc1kwRkJUU3haUVVGWk8wRkJRMnhDTEdOQlFVMHNWMEZCVnp0QlFVRkJMRlZCUTJZc1IwRkJSeXhMUVVGTExFdEJRVXNzVDBGQlR5eFpRVUZaTEZOQlFWTTdRVUZCUVN4VlFVTjZReXhIUVVGSExFdEJRVXNzUzBGQlN5eFBRVUZQTEdsQ1FVRnBRaXhUUVVGVE8wRkJRVUVzVlVGRE9VTXNSMEZCUnl4UFFVRlBMRmxCUVZrc1QwRkJUenRCUVVGQkxGRkJReTlDTzBGQlEwRXNZMEZCVFN4clFrRkJiME03UVVGQlFTeFZRVU40UXl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEU5QlFVOHNaVUZCWXp0QlFVRkJMRlZCUVVjc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4dlFrRkJiVUk3UVVGQlFTeFZRVU4yUnl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEU5QlFVOHNWVUZCVXp0QlFVRkJMRlZCUVVjc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4UFFVRlBMRk5CUVZFN1FVRkJRU3hWUVVNNVJpeEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxFOUJRVThzV1VGQlZ6dEJRVUZCTEZGQlEyeEVPMEZCUlVFc1kwRkJUU3h2UWtGQmQwUXNRMEZCUXl4UlFVRlJMRTFCUVUwN1FVRkROMFVzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQkswSTdRVUZEZEVRc1owSkJRVTBzWTBGQll5eGpRVUZqTEZOQlFWTXNUVUZCVFN4VlFVRlZMRTFCUVUwc1NVRkJTVHRCUVVOeVJTeG5Ra0ZCVFN4VlFVRlZMR05CUVdNc1MwRkJTeXhGUVVGRkxGVkJRVlVzUlVGQlJTeEpRVUZKTzBGQlEzSkVMR2RDUVVGTkxGTkJRVk1zWlVGQlpTeFZRVUZWTEUxQlFVMHNWVUZCVlN4WFFVRlhPMEZCUTI1RkxHZENRVUZOTEZkQlFUaENPMEZCUVVFc1dVRkRiRU1zUlVGQlF5eE5RVUZOTEV0QlFVc3NUVUZCVFN4TlFVRkxPMEZCUVVFc1dVRkJSeXhGUVVGRExFMUJRVTBzUzBGQlN5eE5RVUZOTEUxQlFVczdRVUZCUVN4WlFVRkhMRVZCUVVNc1RVRkJUU3hMUVVGTExFMUJRVTBzVFVGQlN6dEJRVUZCTEZsQlF6TkZMRVZCUVVNc1RVRkJUU3hoUVVGaExFMUJRVTBzVFVGQlN6dEJRVUZCTEZsQlFVY3NSVUZCUXl4TlFVRk5MR2xDUVVGcFFpeE5RVUZOTEUxQlFVczdRVUZCUVN4VlFVTjJSVHRCUVVOQkxHbENRVUZQTzBGQlFVRXNjMEpCUTA4c1UwRkJVenRCUVVGQkxHZERRVU5ETEZsQlFWa3NTMEZCU3l4TFFVRkxMRXRCUVVzc1dVRkJXU3hUUVVGVE8wRkJRVUVzWjBOQlEyaEVMRmxCUVZrc1MwRkJTeXhMUVVGTExFdEJRVXNzV1VGQldTeFRRVUZUTzBGQlFVRXNTVUZETlVVc1lVRkJZU3hwUWtGQmFVSXNVVUZCVVN4RlFVRkZMR2xDUVVGcFFpeGhRVUZoTEZOQlFWTXNUVUZCVFN4RFFVRkRPMEZCUVVFc1NVRkRkRVlzWVVGQllTeFZRVUZWTzBGQlFVRXNXVUZEYWtJN1FVRkJRU3haUVVGWE8wRkJRVUVzV1VGQlZ6dEJRVUZCTEZWQlEzaENMRU5CUVVNc1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc2FVSkJVVThzV1VGQldTeExRVUZMTEU5QlFVODdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzVVVGM1FtNURPMEZCUlVFc1pVRkJUenRCUVVGQkxGVkJRMHdzVFVGQlRUdEJRVUZCTEZWQlEwNHNZVUZCWVN4RlFVRkRMR3RDUVVGcFFqdEJRVUZCTEZWQlF5OUNMRmxCUVZrc1QwRkJUenRCUVVGQkxGbEJRMnBDTEZOQlFWTXNRMEZCUXl4RlFVRkRMRTFCUVUwc1lVRkJZU3hWUVVGVkxFMUJRVTBzVlVGQlZTdzJRa0ZCWjBNc1EwRkJRenRCUVVGQkxGbEJRM3BHTEdWQlFXVTdRVUZCUVN4WlFVTm1PMEZCUVVFc1ZVRkRSanRCUVVGQkxGVkJRMEU3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVVkhMRTFCUVUwc2FVSkJRMVFzUTBGQlF5eFRRVUY1UWl4SFFVRmxMRWRCUVdVc1IwRkJaU3haUVVOMFJTeFBRVUUyUWl4VFFVRXJRaXhYUVVNMVJDeHpRa0ZCTkVNc1dVRkJhVU1zWlVGQkswSTdRVUZETTBjc1kwRkJUU3h0UWtGQmJVSXNVVUZCVVN4alFVRmpPMEZCUXk5RExHTkJRVTBzY1VKQlFYRkNMRkZCUVZFc1kwRkJZenRCUVVOcVJDeGpRVUZOTEhGQ1FVRnpRaXh2UWtGQmIwSXNjVUpCUVhOQ0xGZEJRVmNzY1VKQlFYRkNPMEZCUTNSSExHTkJRVTBzYzBKQlFYTkNMSEZDUVVGeFFpeFhRVUZYTzBGQlJUVkVMR05CUVUwc2EwSkJRV3RDTEVOQlFVTXNWMEZCVnl4WFFVRlhMRmRCUVZjc1ZVRkJWU3h4UWtGQmNVSXNWMEZCVnl4UlFVRlJPMEZCUXpWSExHTkJRVTBzYTBKQlFXdENMRlZCUVZVc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdRVUZEYmtRc1kwRkJUU3hOUVVGTkxHMUNRVUZ0UWl4UlFVRlJPMEZCUVVFc1ZVRkRTaXgzUWtGQmQwSXNhVUpCUVdsQ0xFZEJRVWNzYVVKQlFXbENMRVZCUVVVc1VVRkJVVHRCUVVGQkxGVkJRM1pGTEVWQlFVTXNVVUZCVVN4cFFrRkJhVUlzVTBGQlV5eERRVUZETEVOQlFVTXNSVUZCUXp0QlFVRkJMRkZCUVVNc1JVRkJSU3hEUVVGRExFbEJRemxETzBGQlJ5OUNMR05CUVUwc2IwSkJRVzlDTEVOQlFVTXNWMEZCVnl4WFFVRlhMRmRCUVZjc1ZVRkJWU3h4UWtGQmNVSXNWMEZCVnl4UlFVRlJPMEZCUXpsSExHTkJRVTBzYjBKQlFXOUNMRmxCUVZrc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdRVUZEZWtRc1kwRkJUU3hSUVVGUkxIRkNRVU5XTEZGQlFWRTdRVUZCUVN4VlFVTktMSGRDUVVGM1FpeHRRa0ZCYlVJc1IwRkJSeXh0UWtGQmJVSXNSVUZCUlN4UlFVRlJPMEZCUVVFc1ZVRkRNMFVzUlVGQlF5eFJRVUZSTEcxQ1FVRnRRaXhUUVVGVExFTkJRVU1zUTBGQlF5eEZRVUZETzBGQlFVRXNVVUZCUXl4RlFVRkZMRU5CUVVNc1NVRkRhRVE3UVVGRFNpeGpRVUZOTEZWQlFWVXNRMEZCUXl4SFFVRkhMRWRCUVVjN1FVRkRka0lzV1VGQlNTeHpRa0ZCYzBJN1FVRkRlRUlzYTBKQlFWRXNTMEZCU3l4dlFrRkJiMEk3UVVGQlFTeFJRVU51UXp0QlFVZEJMR05CUVUwc1VVRkJVU3hSUVVGUk8wRkJRVUVzVlVGRGJFSTdRVUZCUVN4WlFVTkpPMEZCUVVFc1dVRkJVenRCUVVGQkxGbEJRVWM3UVVGQlFTeFpRVUZMTzBGQlFVRXNXVUZCYzBJN1FVRkJRU3haUVVGWk8wRkJRVUVzV1VGQldUdEJRVUZCTEZWQlFXdENPMEZCUVVFc1ZVRkRja1lzUlVGQlF5eFJRVUZSTEZOQlFWTXNVMEZCVXl4RFFVRkRMRVZCUVVVc1JVRkJRenRCUVVGQkxGRkJRVU1zUlVGQlJTeERRVUZETzBGQlIzWkRMR2RDUVVGUk8wRkJRVUVzVlVGRFNqdEJRVUZCTEZsQlEwazdRVUZCUVN4WlFVRlRPMEZCUVVFc1dVRkJUeXhYUVVGWExGbEJRVmtzVjBGQlZ5eFhRVUZYTEZkQlFWYzdRVUZCUVN4WlFVTjRSVHRCUVVGQkxGVkJRVzFDTzBGQlFVRXNWVUZEZGtJc1JVRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eEhRVUZITEZOQlFWTXNRMEZCUXl4RlFVRkRPMEZCUVVFc1VVRkJRenRCUVVkc1F5eGpRVUZOTEZWQlFWVXNRMEZCUXl4UFFVRlBMRXRCUVVzN1FVRkROMElzWjBKQlFWRTdRVUZCUVN4VlFVTktMR3REUVVGclF5eFRRVUZUTEU5QlFVOHNUMEZCVHl4WlFVRlpMR3RDUVVGclFqdEJRVUZCTEZWQlEzWkdMRVZCUVVNc1VVRkJVU3hUUVVGVExGTkJRVk1zUTBGQlF5eERRVUZETEVWQlFVTTdRVUZCUVN4UlFVRkRPMEZCUVVFc1RVRkRja003UVVGRlNpeE5RVUZOTEZWQlFWVXNRMEZCUXl4VFFVRjVRaXhsUVVGdlF6dEJRVU0xUlN4alFVRk5MR05CUVdNN1FVRkJRU3hWUVVOc1FpeFhRVUZYTzBGQlFVRXNWVUZEV0N4WFFVRlhPMEZCUVVFc1ZVRkRXQ3hYUVVGWE8wRkJRVUVzVlVGRFdDeFhRVUZYTzBGQlFVRXNVVUZEWWp0QlFVTkJMR05CUVUwc1NVRkJTU3hYUVVGWE8wRkJRM0pDTEdOQlFVMHNTVUZCU1N4WFFVRlhPMEZCUTNKQ0xHTkJRVTBzU1VGQlNTeFhRVUZYTzBGQlEzSkNMR05CUVUwc1dVRkJXVHRCUVVOc1FpeGpRVUZOTEZkQlFWYzdRVUZCUVN4VlFVTm1MRWRCUVVjc1MwRkJTeXhMUVVGTExGZEJRVmNzVjBGQlZ5eFRRVUZUTzBGQlFVRXNWVUZETlVNc1IwRkJSeXhMUVVGTExFdEJRVXNzVjBGQlZ5eHBRa0ZCYVVJc1UwRkJVenRCUVVGQkxGVkJRMnhFTEVkQlFVY3NWMEZCVnl4WlFVRlpMRmRCUVZjN1FVRkJRU3hSUVVOMlF6dEJRVU5CTEdOQlFVMHNVMEZCVXl4RFFVRkRMRkZCUVZFc1QwRkJUeXhEUVVGRExFZEJRVWNzVVVGQlVTeFBRVUZQTEVOQlFVTXNSMEZCUnl4UlFVRlJMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRM1pGTEdOQlFVMHNhMEpCUVc5RE8wRkJRVUVzVlVGRGVFTXNSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeEZRVUZETzBGQlFVRXNWVUZCUnl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEVWQlFVTTdRVUZCUVN4VlFVRkhMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNSVUZCUXp0QlFVRkJMRlZCUTI1SExFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc1YwRkJWeXhUUVVGUk8wRkJRVUVzVlVGQlJ5eEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxGZEJRVmNzVTBGQlVUdEJRVUZCTEZWQlEzSkhMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNWMEZCVnl4WFFVRlZPMEZCUVVFc1ZVRkRia1FzUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hYUVVGWExHRkJRV0VzVjBGQlZ5eGhRVUZoTEZkQlFWY3NXVUZCVnp0QlFVRkJMRkZCUTNSSE8wRkJSVUVzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQkswSTdRVUZEZEVRc1owSkJRVTBzVlVGQlZTeGxRVUZsTEZsQlFWa3NUMEZCVHl4RFFVRkRMRVZCUVVVc1ZVRkJWU3hYUVVGWE8wRkJRekZGTEdkQ1FVRk5MRlZCUVZVc1pVRkJaU3haUVVGWkxFOUJRVThzUTBGQlF5eEZRVUZGTEZWQlFWVXNWMEZCVnp0QlFVTXhSU3huUWtGQlRTeFZRVUZWTEdWQlFXVXNXVUZCV1N4UFFVRlBMRU5CUVVNc1JVRkJSU3hWUVVGVkxGZEJRVmM3UVVGRE1VVXNaMEpCUVUwc1VVRkJVU3hqUVVGakxGTkJRVk1zVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVlN4UFFVRlBMRU5CUVVNc1JVRkJSU3hKUVVGSk8wRkJRM1pGTEdkQ1FVRk5MRk5CUVZNc1kwRkJZeXhWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEZWQlFWVXNUMEZCVHl4RFFVRkRMRVZCUVVVc1NVRkJTVHRCUVVONlJTeG5Ra0ZCVFN4UFFVRlBMR05CUVdNc1VVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRWxCUVVrN1FVRkRja1VzWjBKQlFVMHNWMEZCVnl4TlFVRk5MRXRCUVVzN1FVRkZOVUlzWjBKQlFVMHNWMEZCT0VJN1FVRkJRU3haUVVOc1F5eEZRVUZETEUxQlFVMHNTMEZCU3l4TlFVRk5MRTFCUVVzN1FVRkJRU3haUVVGSExFVkJRVU1zVFVGQlRTeExRVUZMTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUVVjc1JVRkJReXhOUVVGTkxFdEJRVXNzVFVGQlRTeE5RVUZMTzBGQlFVRXNXVUZCUnl4RlFVRkRMRTFCUVUwc1lVRkJZU3hOUVVGTkxFMUJRVXM3UVVGQlFTeFpRVU0zUnl4RlFVRkRMRTFCUVUwc1lVRkJZU3hOUVVGTkxFMUJRVXM3UVVGQlFTeFpRVUZITEVWQlFVTXNUVUZCVFN4bFFVRmxMRTFCUVUwc1RVRkJTenRCUVVGQkxGbEJRVWNzUlVGQlF5eE5RVUZOTEU5QlFVOHNUVUZCVFN4TlFVRkxPMEZCUVVFc1ZVRkRha2M3UVVGRFFTeHBRa0ZCVHp0QlFVRkJMSE5DUVVOWExGTkJRVk03UVVGQlFTeHZRMEZEU3l4UlFVRlJMRXRCUVVzc1dVRkJXU3hUUVVGVE8wRkJRVUVzYzBOQlEyaERMRkZCUVZFc1MwRkJTeXhaUVVGWkxGTkJRVk03UVVGQlFTeHpRMEZEYkVNc1VVRkJVU3hMUVVGTExGbEJRVmtzVTBGQlV6dEJRVUZCTEhORFFVTnNReXhSUVVGUkxFdEJRVXNzV1VGQldTeFRRVUZUTzBGQlFVRXNTVUZEY0VVc1lVRkJZU3hwUWtGQmFVSXNVVUZCVVN4RlFVRkZMR2xDUVVGcFFpeFBRVUZQTEZGQlFWRXNUVUZCVFN4VFFVRlRMRk5CUVZNc1QwRkJUeXhEUVVGRE8wRkJRVUVzU1VGRGVFY3NZVUZCWVN4VlFVRlZPMEZCUVVFc1dVRkRja0k3UVVGQlFTeFpRVUZYTzBGQlFVRXNXVUZCVnp0QlFVRkJMRlZCUTNoQ0xFTkJRVU1zUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNiVUpCVjJFc1VVRkJVVHRCUVVGQkxHMUNRVU5TTEZGQlFWRTdRVUZCUVN4dFFrRkRVaXhSUVVGUk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxGRkJiME42UWp0QlFVVkJMR1ZCUVU4c1VVRkJVVHRCUVVGQkxGVkJRMWc3UVVGQlFTeFpRVU5GTEUxQlFVMDdRVUZCUVN4WlFVTk9MR0ZCUVdFc1JVRkJReXh0UWtGQmJVSXNRMEZCUXl4UlFVRlJMRkZCUVZFc1RVRkJUU3hGUVVGRE8wRkJRVUVzV1VGRGVrUXNXVUZCV1N4UFFVRlBPMEZCUVVFc1kwRkRha0lzVTBGQlV6dEJRVUZCTEdkQ1FVTlFMRVZCUVVNc1RVRkJUU3hoUVVGaExGVkJRVlVzVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN4VlFVRlZMRFpDUVVGblF6dEJRVUZCTEdkQ1FVTXhSaXhGUVVGRExFMUJRVTBzWVVGQllTeFZRVUZWTEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVc1ZVRkJWU3cyUWtGQlowTTdRVUZCUVN4blFrRkRNVVlzUlVGQlF5eE5RVUZOTEdGQlFXRXNWVUZCVlN4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzTmtKQlFXZERPMEZCUVVFc1kwRkROVVk3UVVGQlFTeGpRVU5CTEdWQlFXVTdRVUZCUVN4alFVTm1PMEZCUVVFc1dVRkRSanRCUVVGQkxGbEJRMEU3UVVGQlFTeFZRVU5HTzBGQlFVRXNWVUZEUVN4RlFVRkRMRkZCUVZFc1UwRkJVeXhEUVVGRExFbEJRVWtzU1VGQlNTeEZRVUZGTEVWQlFVTTdRVUZCUVN4UlFVRkRPMEZCUVVFc1RVRkRja003UVVGRlR5eE5RVUZOTEZsQlFWa3NRMEZCUXl4VFFVRjVRaXhsUVVGeFF6dEJRVU4wUml4alFVRk5MRk5CUVZNc2QwSkJRWGRDTEZGQlFWRXNVVUZCVVN4VlFVRlZPMEZCUldwRkxHTkJRVTBzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4SlFVRkpMRkZCUVZFc1UwRkJVeXhOUVVGTk8wRkJSWHBETEdWQlFVODdRVUZCUVN4VlFVTklPMEZCUVVFc1ZVRkJVenRCUVVGQkxGVkJRVWM3UVVGQlFTeFZRVUZITzBGQlFVRXNWVUZCUnl4UlFVRlJMRTlCUVU4c1EwRkJRenRCUVVGQkxGVkJRVWM3UVVGQlFTeFZRVUZYTzBGQlFVRXNWVUZCVnp0QlFVRkJMRlZCUVZjc1VVRkJVU3hQUVVGUExFTkJRVU03UVVGQlFTeFZRVUZITzBGQlFVRXNWVUZCVVR0QlFVRkJMRkZCUVZVN1FVRkJRU3hOUVVOcVNEdEJRVUZCTzBGQlFVRTdPenRCUTJ4elFrRXNUVUZ6UWsxRkxHbENRV3REUVN4eFEwRm5SazhzTUVKQlIwRTdRVUV6U1dJN1FVRkJRVHRCUVVGQk8wRkJSMEU3UVVGRlFUdEJRVVZCTzBGQlEwRTdRVUZIUVR0QlFWZEJMRTFCUVUxQkxHdENRVUZwUWl4RFFVRkRMRkZCUVN0Q0xHVkJRVEJETzBGQlF5OUdMRmxCUVVrc1EwRkJReXhWUVVGVkxFOUJRVThzVjBGQlZ5eEhRVUZITzBGQlEyeERMR2RDUVVGTkxFbEJRVWtzVFVGQlRTeHpRMEZCYzBNN1FVRkJRU3hSUVVONFJEdEJRVVZCTEdOQlFVMHNhMEpCUVd0Q0xFTkJRVU1zVVVGQk1rSXNWVUZCTmtJc1dVRkJiMEk3UVVGRGJrY3NaMEpCUVUwc1NVRkJTU3hUUVVGVE8wRkJRMjVDTEdOQlFVa3NUVUZCVFN4UFFVRlBMRkZCUVZFN1FVRkRka0lzYTBKQlFVMHNTVUZCU1N4TlFVRk5MRWRCUVVjc1QwRkJUeXgxUWtGQmRVSXNRMEZCUXl4RlFVRkZPMEZCUVVFc1ZVRkRkRVE3UVVGRFFTeHRRa0ZCVXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhOUVVGTk8wRkJRM3BDTEdkQ1FVRkpMRTFCUVUwc1QwRkJUeXhEUVVGRExFZEJRVWM3UVVGRGJrSXNiMEpCUVUwc1NVRkJTU3hOUVVGTkxFZEJRVWNzVDBGQlR5eFRRVUZUTEVOQlFVTXNaMEpCUVdkQ08wRkJRVUVzV1VGRGRFUTdRVUZCUVN4VlFVTkdMRU5CUVVNN1FVRkJRU3hSUVVOSU8wRkJSVUVzV1VGQlNTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRk5CUVZNc1IwRkJSenRCUVVNM1FpeG5Ra0ZCVFN4UlFVRlJMRmRCUVZjc1YwRkJWeXhUUVVNdlFpeFhRVUZYTEZWQlFWVXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhOUVVGTkxFVkJRVVVzU1VGRGRrSXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhOUVVGTkxFVkJRVVVzUlVGQlJTeFBRVUZQTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1RVRkJUU3hIUVVGSExFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NVMEZCVXl4RFFVRkRMRU5CUVVNc1NVRkRlRWNzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4TlFVRk5MRWRCUVVjc1YwRkJWeXhWUVVGVkxFbEJRVWtzVFVGQlV6dEJRVU01UkN3d1FrRkJaMElzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4UFFVRlBMSEZDUVVGeFFqdEJRVU0xUkN3d1FrRkJaMElzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4UFFVRlBMR2xDUVVGcFFqdEJRVU40UkN3d1FrRkJaMElzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4UFFVRlBMRzlDUVVGdlFqdEJRVU16UkN3d1FrRkJaMElzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4UFFVRlBMRzFDUVVGdFFqdEJRVUZCTEZGQlF6VkVMRTlCUVU4N1FVRkRUQ3d3UWtGQlowSXNUMEZCVHl4RFFVRkRMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eHhRa0ZCY1VJN1FVRkRNVVFzTUVKQlFXZENMRTlCUVU4c1EwRkJReXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NhVUpCUVdsQ08wRkJRM1JFTERCQ1FVRm5RaXhQUVVGUExFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRzlDUVVGdlFqdEJRVU42UkN3d1FrRkJaMElzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJSeXh0UWtGQmJVSTdRVUZCUVN4UlFVTXhSRHRCUVVGQkxFMUJRMFk3UVVGRlFTeE5RVUZOTEhORFFVTkdMRU5CUVVNc1VVRkJLMElzWlVGQmFVUTdRVUZETDBVc1kwRkJUU3hGUVVGRExGTkJRVk1zVTBGQlV5eFBRVUZOTEVsQlFVazdRVUZEYmtNc1kwRkJUU3hUUVVGVExFOUJRVThzUTBGQlF5eEZRVUZGTzBGQlEzcENMR05CUVUwc1lVRkJZU3hWUVVGVkxHbENRVUZwUWl4UFFVRlBMRTlCUVU4c1UwRkJVeXhEUVVGRExFTkJRVU1zU1VGQlNUdEJRVU16UlN4alFVRk5MR05CUVdNc1YwRkJWeXhWUVVGVkxFOUJRVThzVTBGQlV5eEpRVUZKTEdGQlFXRTdRVUZETVVVc1kwRkJUU3hoUVVGaExGVkJRVlVzUzBGQlN5eE5RVUZOTEVsQlFVazdRVUZGTlVNc1kwRkJUU3h2UWtGQmIwSTdRVUZETVVJc1kwRkJUU3hqUVVGakxHOUNRVUZ2UWl4UFFVRlBMRk5CUVZNN1FVRkRlRVFzWTBGQlRTeEpRVUZKTEdOQlFXTXNTMEZCU3l4UFFVRlBMRU5CUVVNc1JVRkJSU3hWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEUxQlFVMHNWVUZCVlR0QlFVTXpSU3hqUVVGTkxGRkJRVkVzWTBGQll5eFRRVUZUTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzVFVGQlRTeFhRVUZYTzBGQlEzQkdMR05CUVUwc1QwRkJUeXhqUVVGakxGRkJRVkVzVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVlN4UFFVRlBMRU5CUVVNc1JVRkJSU3hOUVVGTkxGZEJRVmM3UVVGRGJFWXNZMEZCVFN4WlFVRlpMR05CUVdNc1lVRkJZU3hQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRTFCUVUwc1YwRkJWenRCUVVNMVJpeGpRVUZOTEZkQlFWY3NZMEZCWXl4WlFVRlpMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4WFFVRlhPMEZCUXpGR0xHTkJRVTBzU1VGQlNTeGxRVUZsTEV0QlFVc3NUMEZCVHl4RFFVRkRMRVZCUVVVc1ZVRkJWU3hoUVVGaExGVkJRVlU3UVVGSGVrVXNZMEZCVFN4alFVRmpMRTFCUVdNN1FVRkRhRU1zWTBGQlNTeFZRVUZWTzBGQlEyUXNZMEZCU1N4VFFVRlRPMEZCUTFnc2MwSkJRVlVzYVVKQlEwNHNUMEZCVHl4WFFVRlhMRWxCUVUwc1QwRkRjRUlzVjBGQlZ5eFRRVUZUTEdsQ1FVRnBRaXhQUVVGUExGTkJRVk1zUTBGQlF5eFBRVUZQTEZWQlFWVXNTMEZEYmtRc2EwSkJRV3RDTzBGQlFVRXNWVUZEYUVRc1QwRkJUenRCUVVOTUxHZENRVUZKTEZkQlFWY3NVVUZCVVR0QlFVTnlRaXgzUWtGQlZUdEJRVUZCTEdOQlExSXNSVUZCUlN4WFFVRlhMR2xDUVVGcFFpeExRVUZMTEVkQlFVY3NRMEZCUXp0QlFVRkJMRFJDUVVONlFpeEZRVUZGTEdkQ1FVRm5RaXhsUVVGbExFTkJRVU03UVVGQlFTeFpRVU53UkN4UFFVRlBPMEZCUlV3c2QwSkJRVlVzYTBKQlFXdENMRTFCUVUwc1MwRkJTeXhQUVVGUE8wRkJRVUVzY1VSQlEwd3NUMEZCVHl4VFFVRlRMRU5CUVVNN1FVRkZNVVFzZFVKQlFWTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1RVRkJUU3hOUVVGTkxFdEJRVXM3UVVGRGJrTXNNa0pCUVZjc1dVRkJXU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRPMEZCUVVFc1kwRkRhRVE3UVVGRFFTeDVRa0ZCVnl4cFFrRkJhVUlzVFVGQlRTeG5Ra0ZCWjBJc1ZVRkJWU3hEUVVGRE8wRkJRVUVzV1VGREwwUTdRVUZCUVN4VlFVTkdPMEZCUTBFc2FVSkJRVTg3UVVGQlFTeFJRVU5VTzBGQlEwRXNZMEZCVFN3clFrRkJLMElzUTBGQlF5eFhRVUY1UWp0QlFVRkJMRzlDUVVOcVJDeFBRVUZQTzBGQlFVRXNTVUZEZGtJc1QwRkJUeXhuUWtGQlowSXNZMEZCWXl4TFFVRkxMRVZCUVVVc2FVSkJRV2xDTEVkQlFVY3NUMEZCVHl4TlFVRk5MRmRCUVZjc1ZVRkJWU3hEUVVGRExFTkJRVU03UVVGQlFTeEpRVU53Unl4UFFVRlBMRlZCUVZVc1EwRkJRenRCUVVGQkxFbEJRMnhDTEU5QlFVOHNjME5CUVhORExIRkNRVUZ4UWl4RFFVRkRPMEZCUVVFc01FSkJRemRETEVWQlFVVXNaMEpCUVdkQ0xHZENRVUZuUWl4VlFVRlZMRVZCUVVVc1EwRkJRenRCUVVGQkxFMUJRMjVGTEZsQlFWa3NRMEZCUXp0QlFVRkJMR3RDUVVORUxFMUJRVTBzV1VGQldTeFRRVUZUTEVOQlFVTTdRVUZCUVN4cFFrRkROMElzUzBGQlN5eFpRVUZaTEZOQlFWTXNRMEZCUXp0QlFVRkJMSE5DUVVOMFFpeFZRVUZWTEZsQlFWa3NVMEZCVXl4RFFVRkRPMEZCUVVFc2NVSkJRMnBETEZOQlFWTXNXVUZCV1N4VFFVRlRMRU5CUVVNN1FVRkJRU3hqUVVOMFF5eEZRVUZGTEZsQlFWa3NXVUZCV1N4RFFVRkRPMEZCUVVFN1FVRkJRU3hOUVVWdVF5eEZRVUZGTEZsQlFWa3NZMEZCWXl4UFFVRlBMRU5CUVVNN1FVRkJRVHRCUVVWd1F5eGxRVUZQTzBGQlFVRXNWVUZEVEN4TlFVRk5PMEZCUVVFc1ZVRkRUaXhoUVVGaE8wRkJRVUVzV1VGRFdDeE5RVUZOTEVkQlFVY3NWMEZCVnl4UFFVRlBMRWxCUVVrc1YwRkJWeXhOUVVGTkxFbEJRVWtzVDBGQlR5eEpRVUZKTEZWQlFWVTdRVUZCUVN4WlFVTjZSU3h0UWtGQmJVSXNiMEpCUVc5Q0xFTkJRVU1zVVVGQlVTeFJRVUZSTEZGQlFWRXNVVUZCVVN4TlFVRk5MRWxCUVVrN1FVRkJRU3hWUVVOd1JqdEJRVUZCTEZWQlEwRXNhVUpCUVdsQ08wRkJRVUVzVlVGRGFrSXNXVUZCV1N4UFFVRlBPMEZCUVVFc1dVRkRha0lzVTBGQlV5eERRVUZETEVWQlFVTXNUVUZCVFN4UFFVRlBMRU5CUVVNc1JVRkJSU3hOUVVGTkxGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNVMEZCVVN4RFFVRkRPMEZCUVVFc1dVRkRPVVFzWlVGQlpTeEZRVUZETEVkQlFVY3NTMEZCU3p0QlFVRkJMR05CUVVzc1lVRkJZVHRCUVVGQk8wRkJRVUVzV1VGQmRVSXNSVUZCUXp0QlFVRkJMRmxCUTJ4RkxHbENRVUZwUWl4dlFrRkRZanRCUVVGQkxHTkJRMFVzUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hYUVVGVk8wRkJRVUVzWTBGRGVFTXNSMEZCUnl3eVFrRkJNa0lzVFVGQlRUdEJRVUZCTEZsQlEzUkRMRWxCUTBFN1FVRkJRU3hqUVVORkxFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc1YwRkJWVHRCUVVGQkxGbEJRekZETzBGQlFVRXNWVUZEVGp0QlFVRkJMRkZCUTBZN1FVRkJRU3hOUVVOR08wRkJSVWNzVFVGQlRTd3lRa0ZCTWtJc1EwRkJReXhsUVVOeVF5dzBRa0ZCTkVJc1ZVRkJiMFU3UVVGRk4wWXNUVUZCVFN4WlFVRlpMRU5CUVVNc1UwRkJlVUlzWlVGQk9FTTdRVUZETDBZc1kwRkJUU3hGUVVGRExGRkJRVkVzV1VGQlZ5eEpRVUZKTzBGQlF6bENMR05CUVUwc2IwSkJRVzlDTEhsQ1FVRjVRaXhGUVVGRExFZEJRVWNzV1VGQldTeFpRVUZYTEVOQlFVTTdRVUZETDBVc1dVRkJTVU1zUzBGQlNTeFBRVUZQTEhOQ1FVRnpRanRCUVVOdVF5eFZRVUZCUkN4blFrRkJaU3hSUVVGUkxHbENRVUZwUWp0QlFVRkJMRkZCUXpGRE8wRkJRMEVzV1VGQlNTeFhRVUZYTEdOQlFXTTdRVUZETTBJc1owSkJRVTBzU1VGQlNTeE5RVUZOTEhWRVFVRjFSRHRCUVVGQkxGRkJRM3BGTEU5QlFVODdRVUZEVEN4clFrRkJVU3hSUVVGUkxHOURRVUZ2UXl4UlFVRlJMR2xDUVVGcFFpeERRVUZETzBGQlFVRXNVVUZEYUVZN1FVRkJRU3hOUVVOR08wRkJRVUU3UVVGQlFUczdPMEZEZEVwQkxFMUJVMDFGTEdsQ1FXdENRU3d3UWtGclEwODdRVUUzUkdJN1FVRkJRVHRCUVVGQk8wRkJTVUU3UVVGSFFUdEJRVVZCTEUxQlFVMUJMR3RDUVVGcFFpeERRVUZETEZkQlFYZERPMEZCUXpsRUxGbEJRVWtzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4WFFVRlhMRWRCUVVjN1FVRkRMMElzWjBKQlFVMHNTVUZCU1N4TlFVRk5MR2REUVVGblF6dEJRVUZCTEZGQlEyeEVPMEZCUlVFc1dVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eExRVUZMTEVsQlFVa3NSVUZCUlN4VFFVRlRMRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVYzdRVUZEYWtRc1owSkJRVTBzU1VGQlNTeE5RVUZOTEN0RFFVRXJRenRCUVVGQkxGRkJRMnBGTzBGQlJVRXNXVUZCU1N4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExGZEJRVmNzUjBGQlJ6dEJRVU12UWl4blFrRkJUU3hKUVVGSkxFMUJRVTBzZFVOQlFYVkRPMEZCUVVFc1VVRkRla1E3UVVGRlFTeFpRVUZKTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhOUVVGTkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4SFFVRkhPMEZCUXpORExHZENRVUZOTEVsQlFVa3NUVUZCVFN4dFJFRkJiVVE3UVVGQlFTeFJRVU55UlR0QlFVRkJMRTFCUTBZN1FVRkZRU3hOUVVGTkxESkNRVUV5UWl4RFFVRkRMRmRCUVN0RE8wRkJReTlGTEdOQlFVMHNZMEZCWXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRCUVVVNVFpeGpRVUZOTEZkQlFWY3NUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRE8wRkJSV3BETEdOQlFVMHNZVUZCWVN4VlFVRlZMRXRCUVVzc1YwRkJWeXhKUVVGSk8wRkJSV3BFTEdOQlFVMHNWMEZCVnl4UFFVRlBMRU5CUVVNc1JVRkJSVHRCUVVNelFpeGpRVUZOTEZGQlFWRXNZMEZCWXl4VFFVRlRMRlZCUVZVc1lVRkJZU3hEUVVGRE8wRkJRemRFTEdOQlFVMHNUMEZCVHl4alFVRmpMRkZCUVZFc1ZVRkJWU3hEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETzBGQlF6RkVMR05CUVUwc1YwRkJWeXhqUVVGakxGbEJRVmtzVlVGQlZTeGhRVUZoTEVOQlFVTTdRVUZEYmtVc1kwRkJUU3hUUVVGVExHVkJRV1VzVlVGQlZTeFZRVUZWTEdGQlFXRXNRMEZCUXp0QlFVVm9SU3hqUVVGTkxHdENRVUZyUWl4RFFVRkRMR2xDUVVFclFqdEJRVUZCTEhGQ1FVTnlReXhSUVVGUk8wRkJRVUVzU1VGRGVrSXNZVUZCWVN4cFFrRkJhVUlzVDBGQlR5eE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRPMEZCUVVFN1FVRkJRU3hKUVVVMVJDeGhRVUZoTEZWQlFWVXNRMEZCUXp0QlFVRkJMRTFCUTNSQ0xHRkJRV0VzYzBOQlFYTkRMRlZCUVZVc1EwRkJRenRCUVVGQkxHdENRVU5zUkN4TlFVRk5MRmxCUVZrc1dVRkJXU3hEUVVGRE8wRkJRVUVzVlVGRGRrTXNTMEZCU3l4WlFVRlpMSFZDUVVGMVFpeERRVUZETEUxQlFVMHNVMEZCVXl4WlFVRlpMRmxCUVZrc1EwRkJRenRCUVVGQkxFMUJRM0pHTEU5QlFVOHNXVUZCV1N4alFVRmpMRTlCUVU4c1EwRkJRenRCUVVGQk8wRkJSemRETEdWQlFVODdRVUZCUVN4VlFVTk1MRTFCUVUwN1FVRkJRU3hWUVVOT0xGbEJRVmtzVDBGQlR6dEJRVUZCTEZsQlEycENMRk5CUVZNc1EwRkJReXhGUVVGRExFMUJRVTBzWVVGQllTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRk5CUVZFc1EwRkJRenRCUVVGQkxGbEJRek5FTEdWQlFXVXNSVUZCUXl4SFFVRkhMRXRCUVVzN1FVRkJRU3hqUVVGTExHRkJRV0U3UVVGQlFUdEJRVUZCTEZsQlFYVkNMRVZCUVVNN1FVRkJRU3hWUVVOd1JUdEJRVUZCTEZWQlEwRTdRVUZCUVN4UlFVTkdPMEZCUVVFc1RVRkRSanRCUVVWUExFMUJRVTBzVlVGQlZTeERRVUZETEZsQlFXdERPMEZCUTNoRUxGRkJRVUZCTEdkQ1FVRmxMRkZCUVZFc1RVRkJUVHRCUVVNM1FpeG5Ra0ZCVVN4UlFVRlJMSGxDUVVGNVFpeFJRVUZSTEUxQlFVMHNRMEZCUXp0QlFVRkJMRTFCUXpGRU8wRkJRVUU3UVVGQlFUczdPMEZEYUVWQkxFMUJaVTBzWjBOQk5FSkJMRGhDUVdsQ1R5eExRVWxCTEUxQlNVRXNUMEZKUVN4TlFVbEJMRTlCU1VFc1RVRkhRU3hQUVZOQkxIRkNRVWxCTEUxQk9FSlFMR3REUVUxUExFMUJZVUVzVFVGSlFTeExRVWxCTEUxQlVVRXNjMEpCUjBFc1MwRm5Ra0VzVTBGalFTeExRVXRCTEV0QlNVRXNUMEZKUVN4TlFVMUJMRmRCVDBFc1MwRkpRU3hMUVVsQkxGbEJTVUVzVFVGTlFTeFRRVk5CTERSQ1FVMUJMR0ZCVTBFc1MwRkpRU3hOUVVsQkxFMUJTVUVzUzBGSlFTeG5Ra0ZGUVN4TlFVdEJMR05CVlVFc2IwSkJSMEVzVlVGUFFTeHBRa0ZSUVR0QlFYcFVZanRCUVVGQk8wRkJRVUU3UVVGSFFUdEJRVVZCTzBGQlEwRTdRVUZIUVR0QlFVMUJMRTFCUVUwc2FVTkJRMFlzUTBGQlF5eGpRVUUwUWl4VlFVRnJRaXhsUVVGMVFpeG5Ra0ZEY2tVc1ZVRkJiVU1zTmtKQlFUaERPMEZCUTJoR0xHTkJRVTBzVlVGQlZTeExRVUZMTEV0QlFVc3NWMEZCVnl4RFFVRkRPMEZCUlhSRExGbEJRVWtzWVVGQllUdEJRVU5xUWl4WlFVRkpMRTlCUVU4c1lVRkJZU3hWUVVGVk8wRkJRMmhETEhWQ1FVRmhMRWRCUVVjc1VVRkJVVHRCUVVGQkxGRkJRekZDTEU5QlFVODdRVUZEVEN4MVFrRkJZU3hUUVVGVExFZEJRVWM3UVVGQlFTeFJRVU16UWp0QlFVVkJMR05CUVUwc1VVRkJVU3hqUVVGakxHRkJRV0VzWlVGQlpTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUTNCRkxHTkJRVTBzVTBGQlV5eGxRVUZsTEdOQlFXTXNaMEpCUVdkQ0xFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTTdRVUZGZUVVc1pVRkJUenRCUVVGQkxGRkJRMHdzWVVGQllTeG5Ra0ZCWjBJc1dVRkJXU3hMUVVGTExFVkJRVVVzYVVKQlFXbENMRTlCUVU4c1RVRkJUU3hEUVVGRE8wRkJRVUU3UVVGQlFTeEpRVVZ1Uml3MFFrRkJORUlzUlVGQlJUdEJRVUZCTzBGQlFVRXNTVUZGT1VJc1lVRkJZU3hWUVVGVkxFTkJRVU03UVVGQlFTeE5RVU4wUWl4aFFVRmhMSE5EUVVGelF5eHRRa0ZCYlVJc1EwRkJRenRCUVVGQk8wRkJRVUVzWTBGRkwwUXNUVUZCVFN4WlFVRlpMRmxCUVZrc1EwRkJRenRCUVVGQkxFMUJRM1pETEU5QlFVOHNXVUZCV1N4alFVRmpMRlZCUVZVc1EwRkJRenRCUVVGQk8wRkJRVUVzVFVGRk9VTTdRVUZGU2l4TlFVRk5MQ3RDUVVOR0xFTkJRVU1zVDBGQmJVSXNUVUZCWXl4VlFVRnRReXd3UWtGRGNFVXNWVUZCYlVJc2FVSkJRWGxDTEUxQlFVMHNZMEZCTWtJN1FVRkJRU3hSUVVNMVJUdEJRVUZCTEZGQlEwRXNZVUZCWVN4RlFVRkRMRTFCUVUwc1ZVRkJWU3h0UWtGQmJVSXNRMEZCUXl4TlFVRk5MRVZCUVVNN1FVRkJRU3hSUVVONlJDeHBRa0ZCYVVJc2EwSkJRV2RDTzBGQlFVRXNWVUZETjBJN1FVRkJRU3hWUVVGakxGVkJRVlVzUzBGQlN5eE5RVUZOTEVsQlFVazdRVUZCUVN4VlFVRkhMRTFCUVUwN1FVRkJRU3hWUVVGVk8wRkJRVUVzVlVGQlowSTdRVUZCUVN4VlFVRlZPMEZCUVVFc1VVRkJkMEk3UVVGQlFTeFJRVU5vU0N4WlFVRlpMRU5CUVVNc2EwSkJRV3RDTzBGQlFVRXNWVUZETjBJc1UwRkJVeXhEUVVGRExFVkJRVU1zVFVGQlRTeE5RVUZOTEUxQlFVMHNWVUZCVlN4bFFVRmpMRU5CUVVNN1FVRkJRU3hWUVVOMFJDeGxRVU5KTEVWQlFVTXNSMEZCUnl4TFFVRkxPMEZCUVVFc1dVRkJTeXhWUVVGVkxFdEJRVXNzWVVGQllTeERRVUZETEVWQlFVVXNTVUZCU1N4SlFVRkpMRXRCUVRCQ08wRkJRVUU3UVVGQlFTeFZRVUZuUWl4RlFVRkRPMEZCUVVFc1ZVRkRjRWNzYVVKQlFXbENPMEZCUVVFc1dVRkRaaXhGUVVGRExIVkNRVUYxUWl4TlFVRk5MRXRCUVVzc1MwRkJTeXhWUVVGVkxFdEJRVXNzVFVGQlRTeEpRVUZKTEVsQlFVa3NRMEZCUXl4RlFVRkRPMEZCUVVFc1ZVRkRla1U3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVVkhMRTFCUVUwc1RVRkJUU3hEUVVGRExGbEJRV3RETzBGQlEzQkVMR2RDUVVGUkxGRkJRVkVzTmtKQlFUWkNMRkZCUVZFc1QwRkJUeXhEUVVGRExFZEJRVWNzVDBGQlR5eExRVUZMTEVOQlFVTTdRVUZCUVN4TlFVTXZSVHRCUVVWUExFMUJRVTBzVDBGQlR5eERRVUZETEZsQlFXdERPMEZCUTNKRUxHZENRVUZSTEZGQlFWRXNOa0pCUVRaQ0xGRkJRVkVzVDBGQlR5eERRVUZETEVkQlFVY3NVVUZCVVN4TlFVRk5MRU5CUVVNN1FVRkJRU3hOUVVOcVJqdEJRVVZQTEUxQlFVMHNVVUZCVVN4RFFVRkRMRmxCUVd0RE8wRkJRM1JFTEdkQ1FVRlJMRkZCUVZFc05rSkJRVFpDTEZGQlFWRXNUMEZCVHl4RFFVRkRMRWRCUVVjc1UwRkJVeXhQUVVGUExFTkJRVU03UVVGQlFTeE5RVU51Ump0QlFVVlBMRTFCUVUwc1QwRkJUeXhEUVVGRExGbEJRV3RETzBGQlEzSkVMR2RDUVVGUkxGRkJRVkVzTmtKQlFUWkNMRkZCUVZFc1QwRkJUeXhEUVVGRExFZEJRVWNzVVVGQlVTeE5RVUZOTEVOQlFVTTdRVUZCUVN4TlFVTnFSanRCUVVWUExFMUJRVTBzVVVGQlVTeERRVUZETEZsQlFXdERPMEZCUTNSRUxHZENRVUZSTEZGQlFWRXNOa0pCUVRaQ0xGRkJRVkVzVDBGQlR5eERRVUZETEVkQlFVY3NVMEZCVXl4UFFVRlBMRU5CUVVNN1FVRkJRU3hOUVVOdVJqdEJRVVZQTEUxQlFVMHNUMEZCVHl4RFFVRkRMRmxCUVd0RE8wRkJRM0pFTEdkQ1FVRlJMRkZCUVZFc05rSkJRVFpDTEZGQlFWRXNUMEZCVHl4RFFVRkRMRWRCUVVjc1VVRkJVU3hOUVVGTkxFTkJRVU03UVVGQlFTeE5RVU5xUmp0QlFVTlBMRTFCUVUwc1VVRkJVU3hEUVVGRExGbEJRV3RETzBGQlEzUkVMR2RDUVVGUkxGRkJRVkVzTmtKQlFUWkNMRkZCUVZFc1QwRkJUeXhEUVVGRExFZEJRVWNzVTBGQlV5eFBRVUZQTEVOQlFVTTdRVUZCUVN4TlFVTnVSanRCUVU5UExFMUJRVTBzYzBKQlFYTkNMRU5CUVVNc1pVRkRhRU1zTkVKQlFUUkNMRlZCUVRCQ08wRkJSMjVFTEUxQlFVMHNUMEZCVHl4RFFVRkRMRk5CUVhsQ0xHVkJRWEZETzBGQlEycEdMRmxCUVVrN1FVRkRTaXhuUWtGQlVTeFhRVUZYTEVsQlFVazdRVUZCUVN4VlFVTnlRanRCUVVORkxHMUNRVUZQTzBGQlExQTdRVUZCUVN4VlFVTkdPMEZCUTBVc2JVSkJRVTg3UVVGRFVEdEJRVUZCTEZWQlEwWTdRVUZEUlN4dFFrRkJUenRCUVVOUU8wRkJRVUVzVlVGRFJqdEJRVU5GTEcxQ1FVRlBPMEZCUTFBN1FVRkJRU3hWUVVOR08wRkJRMFVzYlVKQlFVODdRVUZEVUR0QlFVRkJMRlZCUTBZN1FVRkRSU3hyUWtGQlRTeEpRVUZKTEZkQlFWY3NNRVZCUVRCRkxGZEJRVmNzUlVGQlJTeEZRVUZGTzBGQlFVRXNVVUZEYkVnN1FVRkRRU3huUWtGQlVUdEJRVUZCTEZWQlEwb3NOa0pCUVRaQ0xGRkJRVkVzVDBGQlR5eERRVUZETEVkQlFVY3NVVUZCVVN4TlFVRk5MRkZCUVZjc1YwRkJWeXhWUVVGVkxGZEJRVmNzUlVGQlJUdEJRVUZCTEZGQlFVTTdRVUZCUVN4TlFVTnNTRHRCUVU5QkxFMUJRVTBzYlVOQlFXMURMRU5CUVVNc1YwRkJhMFE3UVVGRE1VWXNZMEZCVFN4TlFVRlBMRTlCUVU4c1ZVRkJWU3hMUVVGTExFOUJRVThzUTBGQlF5eEZRVUZGTEZOQlFWTXNTVUZCU3l4UFFVRlBMRU5CUVVNc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4RFFVRkRMRWxCUVVrN1FVRkROVVlzWTBGQlRTeE5RVUZQTEU5QlFVOHNWVUZCVlN4TFFVRkxMRTlCUVU4c1EwRkJReXhGUVVGRkxGTkJRVk1zU1VGQlN5eFBRVUZQTEVOQlFVTXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeERRVUZETEVsQlFVazdRVUZETlVZc1pVRkJUeXcwUWtGQk5FSXNSVUZCUXl4TFFVRkxMRWxCUVVjc1EwRkJRenRCUVVGQkxFMUJReTlETzBGQlJVOHNUVUZCVFN4UFFVRlBMRU5CUVVNc1UwRkJlVUlzYlVKQlFYbERPMEZCUTNKR0xHTkJRVTBzWVVGQllTeFJRVUZSTEU5QlFVOHNWMEZCVnl4SlFVRkpMR2xDUVVGcFFpeHBRMEZCYVVNc1VVRkJVU3hOUVVGTk8wRkJRMnBJTEdOQlFVMHNWMEZCVnl3d1FrRkJNRUlzVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN4UlFVRlJPMEZCUTNKRkxHZENRVUZSTzBGQlFVRXNWVUZEU2p0QlFVRkJMRmxCUTBrc1VVRkJVU3hQUVVGUExFTkJRVU03UVVGQlFTeFpRVUZITzBGQlFVRXNXVUZCVVN4UFFVRkxMRk5CUVZNc1EwRkJRenRCUVVGQkxGbEJRVEpDTzBGQlFVRXNORUpCUTI1RUxGRkJRVkVzV1VGQldTeFJRVUZSTEVsQlFVa3NWMEZCVnl4SFFVRkhPMEZCUVVFc05FSkJRemxETEZGQlFWRXNXVUZCV1N4UlFVRlJMRWxCUVVrc1YwRkJWeXhIUVVGSE8wRkJRVUU3UVVGQlFTeFpRVVZvUlN4WFFVRlhPMEZCUVVFc1ZVRkJVVHRCUVVGQkxGVkJRM1pDTEVWQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1JVRkJRenRCUVVGQkxGRkJRVU03UVVGQlFTeE5RVU51UWp0QlFVVlBMRTFCUVUwc1QwRkJUeXhEUVVGRExGbEJRV3RETzBGQlEzSkVMR2RDUVVGUkxGRkJRVkVzTmtKQlFUWkNMRkZCUVZFc1QwRkJUeXhEUVVGRExFZEJRVWNzVVVGQlVTeE5RVUZOTEVOQlFVTTdRVUZCUVN4TlFVTnFSanRCUVVWUExFMUJRVTBzVFVGQlRTeERRVUZETEZsQlFXdERPMEZCUTNCRUxHZENRVUZSTEZGQlFWRXNOa0pCUVRaQ0xGRkJRVkVzVDBGQlR5eERRVUZETEVkQlFVY3NUMEZCVHl4TFFVRkxMRU5CUVVNN1FVRkJRU3hOUVVNdlJUdEJRVVZQTEUxQlFVMHNUMEZCVHl4RFFVRkRMRmxCUVd0RE8wRkJRM0pFTEdkQ1FVRlJMRkZCUVZFc05rSkJRVFpDTEZGQlFWRXNUMEZCVHl4RFFVRkRMRWRCUVVjc1VVRkJVU3hOUVVGTkxFTkJRVU03UVVGQlFTeE5RVU5xUmp0QlFVMVBMRTFCUVUwc2RVSkJRWFZDTEVOQlFVTXNaVUZEYWtNc05FSkJRVFJDTEZWQlFUWkNPMEZCUlhSRUxFMUJRVTBzVFVGQlRTeERRVUZETEZOQlFYbENMR1ZCUVhORE8wRkJRMnBHTEdOQlFVMHNWMEZCVnl3d1FrRkJNRUlzVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN4UlFVRlJPMEZCUTNKRkxHZENRVUZSTEZGQlFWRTdRVUZCUVN4VlFVTmFMRkZCUVZFc1QwRkJUeXhEUVVGRE8wRkJRVUVzVlVGQlJ6dEJRVUZCTEZWQlFVOHNUMEZCU3l4WlFVRlpMRU5CUVVNN1FVRkJRU3hWUVVGTE8wRkJRVUVzZFVKQlEyaERMRkZCUVZFc1NVRkJTU3hYUVVGWExFdEJRVXM3UVVGQlFUdEJRVUZCTEd0Q1FVVnFReXhSUVVGUkxGRkJRVkVzVVVGQlVUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMSGRDUVVsc1FpeFJRVUZSTEdOQlFXTXNVVUZCVVR0QlFVRkJPMEZCUVVFN1FVRkJRU3hWUVVkb1JDeFhRVUZYTzBGQlFVRXNVVUZCVVN4RFFVRkRPMEZCUVVFc1RVRkRNVUk3UVVGRlR5eE5RVUZOTEZWQlFWVXNRMEZCUXl4VlFVRlZMRlZCUVZVN1FVRkJRU3haUVVOb1F5eFBRVUZQTzBGQlFVRXNXVUZEVUN4UFFVRlBPMEZCUVVFc1dVRkRVQ3hQUVVGUE8wRkJRVUVzV1VGRFVDeFBRVUZQTzBGQlFVRXNXVUZEVUN4UFFVRlBPMEZCUVVFc1dVRkRVQ3hQUVVGUE8wRkJRVUU3UVVGQlFTeHpRa0ZGUnl4UFFVRlBMR05CUVdNc1QwRkJUenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlRUTkRMRTFCUVUwc1RVRkJUU3hEUVVGRExGbEJRV3RETzBGQlEzQkVMR05CUVUwc1YwRkJWeXd3UWtGQk1FSXNVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hSUVVGUk8wRkJRM0pGTEdkQ1FVRlJMRkZCUVZFc05rSkJRVFpDTEZGQlFWRXNUMEZCVHl4RFFVRkRMRWRCUVVjc1QwRkJUeXhQUVVGTExGbEJRVmtzUTBGQlF5eExRVUZMTEZGQlFWRXNVVUZCVVN4RFFVRkRMRU5CUVVNN1FVRkJRU3hOUVVOc1NEdEJRVVZQTEUxQlFVMHNUVUZCVFN4RFFVRkRMRmxCUVd0RE8wRkJRM0JFTEdkQ1FVRlJMRkZCUVZFc05rSkJRVFpDTEZGQlFWRXNUMEZCVHl4RFFVRkRMRWRCUVVjc1QwRkJUeXhMUVVGTExFTkJRVU03UVVGQlFTeE5RVU12UlR0QlFVVlBMRTFCUVUwc1VVRkJVU3hEUVVGRExGbEJRV3RETzBGQlEzUkVMR2RDUVVGUkxGRkJRVkVzTmtKQlFUWkNMRkZCUVZFc1QwRkJUeXhEUVVGRExFZEJRVWNzVTBGQlV5eFBRVUZQTEVOQlFVTTdRVUZCUVN4TlFVTnVSanRCUVVWUExFMUJRVTBzVDBGQlR5eERRVUZETEZsQlFXdERPMEZCUTNKRUxHTkJRVTBzVjBGQlZ5d3dRa0ZCTUVJc1VVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJTeFJRVUZSTzBGQlEzSkZMR2RDUVVGUkxGRkJRVkU3UVVGQlFTeFZRVU5hTEZGQlFWRXNUMEZCVHl4RFFVRkRPMEZCUVVFc1ZVRkJSenRCUVVGQkxGVkJRVkVzVDBGQlN5eFRRVUZUTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU03UVVGQlFTeFZRVUV5UWl4UlFVRlJMRkZCUVZFN1FVRkJRU3hSUVVGRExFTkJRVU03UVVGQlFTeE5RVU53U0R0QlFVVlBMRTFCUVUwc1dVRkJXU3hEUVVGRExGTkJRWGxDTEdWQlFYTkRPMEZCUTNaR0xHTkJRVTBzVjBGQlZ5d3dRa0ZCTUVJc1VVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJTeFJRVUZSTzBGQlEzSkZMR2RDUVVGUkxGRkJRVkU3UVVGQlFTeFZRVU5hTEZGQlFWRXNUMEZCVHl4RFFVRkRPMEZCUVVFc1ZVRkJSenRCUVVGQkxGVkJRV0VzVDBGQlN5dzRRa0ZCT0VJc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NVVUZCVVR0QlFVRkJMRlZCUTNCSExEWkNRVUUyUWl4UlFVRlJMRWxCUVVrc1YwRkJWeXhMUVVGTE8wRkJRVUVzVlVGQlRTeFhRVUZYTzBGQlFVRXNVVUZCVVN4RFFVRkRPMEZCUVVFc1RVRkRla1k3UVVGRlR5eE5RVUZOTEUxQlFVMHNRMEZCUXl4WlFVRnJRenRCUVVOd1JDeG5Ra0ZCVVN4UlFVRlJMRFpDUVVFMlFpeFJRVUZSTEU5QlFVOHNRMEZCUXl4SFFVRkhMRTlCUVU4c1QwRkJTeXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETzBGQlFVRXNUVUZEZEVZN1FVRkZUeXhOUVVGTkxFMUJRVTBzUTBGQlF5eFpRVUZyUXp0QlFVTndSQ3huUWtGQlVTeFJRVUZSTERaQ1FVRTJRaXhSUVVGUkxFOUJRVThzUTBGQlF5eEhRVUZITEU5QlFVOHNUMEZCU3l4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRE8wRkJRVUVzVFVGRGRFWTdRVUZGVHl4TlFVRk5MR0ZCUVdFc1EwRkJReXhaUVVGclF6dEJRVU16UkN4blFrRkJVU3hSUVVGUkxEWkNRVUUyUWl4UlFVRlJMRTlCUVU4c1EwRkJReXhIUVVGSExHTkJRV01zVDBGQlN5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRPMEZCUVVFc1RVRkRhRWM3UVVGRlR5eE5RVUZOTEU5QlFVOHNRMEZCUXl4WlFVRnJRenRCUVVOeVJDeGpRVUZOTEZkQlFWY3NNRUpCUVRCQ0xGRkJRVkVzVDBGQlR5eERRVUZETEVWQlFVVXNVVUZCVVR0QlFVTnlSU3huUWtGQlVTeFJRVUZSTzBGQlFVRXNWVUZEV2l4UlFVRlJMRTlCUVU4c1EwRkJRenRCUVVGQkxGVkJRVWM3UVVGQlFTeFZRVUZSTEU5QlFVc3NaVUZCWlN4UlFVRlJMRmRCUVZjc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eFJRVUZSTzBGQlFVRXNVVUZCVXl4RFFVRkRPMEZCUVVFc1RVRkROVWM3UVVGRlR5eE5RVUZOTEZWQlFWVXNRMEZCUXl4WlFVRnJRenRCUVVONFJDeG5Ra0ZCVVN4UlFVRlJMRFpDUVVFMlFpeFJRVUZSTEU5QlFVOHNRMEZCUXl4SFFVRkhMRmRCUVZjc1QwRkJTeXh6UWtGQmMwSXNRMEZCUXl4TFFVRkxMRU5CUVVNN1FVRkJRU3hOUVVNdlJ6dEJRVTlQTEUxQlFVMHNOa0pCUVRaQ0xFTkJRVU1zWlVGRGRrTXNORUpCUVRSQ0xGVkJSek5DTzBGQlJVVXNUVUZCVFN4alFVRmpMRU5CUVVNc1UwRkJlVUlzWlVGQk5FTTdRVUZETDBZc1kwRkJUU3hYUVVGWExEQkNRVUV3UWl4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRkxGRkJRVkU3UVVGRGNrVXNaMEpCUVZFc1VVRkJVVHRCUVVGQkxGVkJRMW9zVVVGQlVTeFBRVUZQTEVOQlFVTTdRVUZCUVN4VlFVRkhPMEZCUVVFc1ZVRkRia0lzVDBGQlN5eFpRVUZaTEZGQlFWRXNiMEpCUVc5Q0xGRkJRVkVzVjBGQlZ5eFhRVUZYTEV0QlFVc3NUVUZCVFN4RFFVRkRMRmRCUVZjc1VVRkJVU3hMUVVOMFJ5eFhRVUZYTEVsQlFVazdRVUZCUVN4VlFVTnVRanRCUVVGQkxGVkJRVmNzVjBGQlZ6dEJRVUZCTEZGQlFWRXNRMEZCUXp0QlFVRkJMRTFCUTNKRE8wRkJSVThzVFVGQlRTeE5RVUZOTEVOQlFVTXNXVUZCYTBNN1FVRkRjRVFzWjBKQlFWRXNVVUZCVVN3MlFrRkJOa0lzVVVGQlVTeFBRVUZQTEVOQlFVTXNSMEZCUnl4UFFVRlBMRXRCUVVzc1EwRkJRenRCUVVGQkxFMUJReTlGTzBGQlJVOHNUVUZCVFN4UFFVRlBMRU5CUVVNc1dVRkJhME03UVVGRGNrUXNaMEpCUVZFc1VVRkJVU3cyUWtGQk5rSXNVVUZCVVN4UFFVRlBMRU5CUVVNc1IwRkJSeXhSUVVGUkxFMUJRVTBzUTBGQlF6dEJRVUZCTEUxQlEycEdPMEZCUlU4c1RVRkJUU3hQUVVGUExFTkJRVU1zV1VGQmEwTTdRVUZEY2tRc1owSkJRVkVzVVVGQlVTdzJRa0ZCTmtJc1VVRkJVU3hQUVVGUExFTkJRVU1zUjBGQlJ5eFJRVUZSTEUxQlFVMHNRMEZCUXp0QlFVRkJMRTFCUTJwR08wRkJSVThzVFVGQlRTeE5RVUZOTEVOQlFVTXNXVUZCYTBNN1FVRkRjRVFzWjBKQlFWRXNVVUZCVVN3MlFrRkJOa0lzVVVGQlVTeFBRVUZQTEVOQlFVTXNSMEZCUnl4UFFVRlBMRXRCUVVzc1EwRkJRenRCUVVGQkxFMUJReTlGTzBGQlJVOHNUVUZCVFN4cFFrRkJhVUlzUTBGQlF5eE5RVUZqTEZGQlFWRXNRMEZCUXl4NVFrRkJlVUlzUTBGQlF5d3lRa0ZCTWtJc1EwRkJRenRCUVVWeVJ5eE5RVUZOTEU5QlFVOHNRMEZCUXl4WlFVRnJRenRCUVVWeVJDeG5Ra0ZCVVN4UlFVRlJMRFpDUVVFMlFpeFJRVUZSTEU5QlFVOHNRMEZCUXl4SFFVRkhMRkZCUVZFc1kwRkJZeXhEUVVGRE8wRkJRVUVzVFVGRGVrWTdRVUZGVHl4TlFVRk5MR1ZCUVdVc1EwRkJReXhWUVVGVkxGVkJRVlU3UVVGQlFTeHhRa0ZETlVJc1QwRkJUenRCUVVGQkxIRkNRVU5RTEU5QlFVODdRVUZCUVN4eFFrRkRVQ3hQUVVGUE8wRkJRVUU3UVVGQlFTeHZRa0ZGVWl4UFFVRlBMR05CUVdNc1QwRkJUenRCUVVGQkxGZEJRM0pETEdWQlFXVXNSMEZCUnl4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVsMlFpeE5RVUZOTEhGQ1FVRnhRaXhEUVVGRExFMUJReTlDTEhWRFFVRjFReXhEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRTFCUVUwc1EwRkJReXgxUWtGQmRVSXNRMEZCUXp0QlFVVXhSaXhOUVVGTkxGZEJRVmNzUTBGQlF5eFpRVUZyUXp0QlFVTjZSQ3hqUVVGTkxGZEJRVmNzTUVKQlFUQkNMRkZCUVZFc1QwRkJUeXhEUVVGRExFVkJRVVVzVVVGQlVUdEJRVU55UlN4blFrRkJVU3hSUVVGUk8wRkJRVUVzVlVGRFdpeFJRVUZSTEU5QlFVOHNRMEZCUXp0QlFVRkJMRlZCUVVjN1FVRkJRU3hWUVVGWk8wRkJRVUVzVlVGQmIwSXNZVUZCWVN4UlFVRlJPMEZCUVVFc1ZVRkJSenRCUVVGQkxGVkJRek5GTEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkJRU3hSUVVGUkxFTkJRVU03UVVGQlFTeE5RVU5xUXp0QlFVVlBMRTFCUVUwc2EwSkJRV3RDTEVOQlFVTXNVMEZCZVVJc1pVRkJkME03UVVGREwwWXNZMEZCVFN4WFFVRlhMREJDUVVFd1FpeFJRVUZSTEU5QlFVOHNRMEZCUXl4RlFVRkZMRkZCUVZFN1FVRkRja1VzWjBKQlFWRXNVVUZCVVR0QlFVRkJMRlZCUTFvc1VVRkJVU3hQUVVGUExFTkJRVU03UVVGQlFTeFZRVUZITzBGQlFVRXNWVUZCYlVJc1QwRkJTeXhsUVVGbExGRkJRVkVzVjBGQlZ5eERRVUZETEV0QlFVc3NRMEZCUXp0QlFVRkJMRlZCUTNCR0xIZERRVUYzUXl4UlFVRlJMRXRCUVVzc1YwRkJWeXhMUVVGTE8wRkJRVUVzVlVGQlRTeFhRVUZYTzBGQlFVRXNVVUZCVVN4RFFVRkRPMEZCUTI1SExHVkJRVTg3UVVGQlFTeE5RVU5VTzBGQlJVOHNUVUZCVFN4TlFVRk5MRU5CUVVNc1dVRkJhME03UVVGRGNFUXNaMEpCUVZFc1VVRkJVU3cyUWtGQk5rSXNVVUZCVVN4UFFVRlBMRU5CUVVNc1IwRkJSeXhQUVVGUExFdEJRVXNzUTBGQlF6dEJRVUZCTEUxQlF5OUZPMEZCUVVFN1FVRkJRVHM3TzBGRE0xUkJMRTFCVlUxRExHbENRV3RDUVN4blEwRjVRMDg3UVVGeVJXSTdRVUZCUVR0QlFVRkJPMEZCU1VFN1FVRkhRVHRCUVVOQk8wRkJSVUVzVFVGQlRVRXNhMEpCUVdsQ0xFTkJRVU1zVjBGQmQwTTdRVUZET1VRc1dVRkJTU3hQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEZkQlFWY3NSMEZCUnp0QlFVTXZRaXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNaME5CUVdkRE8wRkJRVUVzVVVGRGJFUTdRVUZGUVN4WlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxFMUJRVTBzUzBGQlN5eEZRVUZGTEZOQlFWTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ6dEJRVU53UkN4blFrRkJUU3hKUVVGSkxFMUJRVTBzTkVOQlFUUkRPMEZCUVVFc1VVRkRPVVE3UVVGRlFTeFpRVUZKTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1YwRkJWeXhIUVVGSE8wRkJReTlDTEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3gxUTBGQmRVTTdRVUZCUVN4UlFVTjZSRHRCUVVWQkxGbEJRVWtzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRTFCUVUwc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVkQlFVYzdRVUZETTBNc1owSkJRVTBzU1VGQlNTeE5RVUZOTEcxRVFVRnRSRHRCUVVGQkxGRkJRM0pGTzBGQlFVRXNUVUZEUmp0QlFVVkJMRTFCUVUwc2FVTkJRV2xETEVOQlFVTXNWMEZCSzBNN1FVRkRja1lzWTBGQlRTeGpRVUZqTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1RVRkJUVHRCUVVONlF5eHZRa0ZCV1N4RFFVRkRMRWxCUVVrc1dVRkJXU3hEUVVGRExFbEJRVWs3UVVGRmJFTXNZMEZCVFN4UlFVRlJMR05CUVdNc1UwRkJVeXhQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRTFCUVUwc1EwRkJRenRCUVVNeFJTeGpRVUZOTEU5QlFVOHNZMEZCWXl4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU03UVVGRE4wVXNZMEZCVFN4VFFVRlRMR1ZCUVdVc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEdGQlFXRXNRMEZCUXp0QlFVVXhSU3hqUVVGTkxHRkJRV0VzVlVGQlZTeExRVUZMTEZkQlFWY3NTVUZCU1R0QlFVTnFSQ3hqUVVGTkxGZEJRVmNzTkVKQlFUUkNMRTlCUVU4c1EwRkJReXhGUVVGRkxGRkJRVkU3UVVGRkwwUXNZMEZCVFN4clFrRkJhMElzUTBGQlF5eHBRa0ZCSzBJN1FVRkJRVHRCUVVGQkxIbENRVVZxUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTTdRVUZCUVR0QlFVRkJMRWxCUlRsRExHRkJRV0VzYVVKQlFXbENMRTlCUVU4c1RVRkJUU3hOUVVGTkxFTkJRVU03UVVGQlFUdEJRVUZCTEVsQlJXeEVMRkZCUVZFc1VVRkJVU3hEUVVGRE8wRkJRVUU3UVVGQlFTeEpRVVZxUWl4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQkxFMUJRM1JDTEdGQlFXRXNjME5CUVhORExGVkJRVlVzUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzVFVGUk9VUXNUMEZCVHl4WlFVRlpMR05CUVdNc2RVSkJRWFZDTEVOQlFVTTdRVUZCUVR0QlFVYzNSQ3hsUVVGUE8wRkJRVUVzVlVGRFRDeE5RVUZOTzBGQlFVRXNWVUZEVGl4WlFVRlpMRTlCUVU4N1FVRkJRU3haUVVOcVFpeFRRVUZUTEVOQlFVTXNSVUZCUXl4TlFVRk5MR0ZCUVdFc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeFRRVUZSTEVOQlFVTTdRVUZCUVN4WlFVTXpSQ3hsUVVGbExFVkJRVU1zUjBGQlJ5eExRVUZMTzBGQlFVRXNZMEZCU3l4aFFVRmhPMEZCUVVFN1FVRkJRU3haUVVGMVFpeEZRVUZETzBGQlFVRXNWVUZEY0VVN1FVRkJRU3hWUVVOQk8wRkJRVUVzVVVGRFJqdEJRVUZCTEUxQlEwWTdRVUZGVHl4TlFVRk5MR2RDUVVGblFpeERRVUZETEZsQlFXdERPMEZCUXpsRUxGRkJRVUZCTEdkQ1FVRmxMRkZCUVZFc1RVRkJUVHRCUVVNM1FpeG5Ra0ZCVVN4UlFVRlJMQ3RDUVVFclFpeFJRVUZSTEUxQlFVMHNRMEZCUXp0QlFVRkJMRTFCUTJoRk8wRkJRVUU3UVVGQlFUczdPMEZEZUVWQkxFMUJhVUpOTERaQ1FYRkhRU3d5UWtGelJVRXNZVUZSVHl4TFFVbEJMRXRCU1VFc1QwRk5RU3hMUVVsQkxFdEJjMEpCTEV0QlNVRXNVMEZOUVN4TlFVMUJMR2RDUVUxQk8wRkJiRkZpTzBGQlFVRTdRVUZCUVR0QlFVZEJPMEZCUlVFN1FVRkhRVHRCUVZOQkxFMUJRVTBzT0VKQlEwWXNRMEZCUXl4alFVRTBRaXhQUVVFd1FpeFBRVUV3UWl4WlFVTm9SaXhYUVVGdlFpeGhRVUZ6UWl3MlFrRkJjME1zVlVGRGFFWXNUMEZCWlN4UFFVRmxMRmxCUVc5Q0xEWkNRVUZ6UXp0QlFVTjJSaXhaUVVGSk8wRkJRMG9zV1VGQlNUdEJRVU5LTEZsQlFVa3NUMEZCVHl4aFFVRmhMRlZCUVZVN1FVRkRhRU1zTmtKQlFXMUNMRzFDUVVGdFFpeERRVUZEUXl4SlFVRkhReXhQUVVGTkxFZEJRVWNzVVVGQlVTeExRVUZMUkN4RlFVRkRMRTFCUVUxRExFVkJRVU03UVVGQlFTeFJRVU14UlN4WFFVRlhMRTlCUVU4c1lVRkJZU3haUVVGWk8wRkJRM3BETERaQ1FVRnRRaXh0UWtGQmJVSTdRVUZCUVN4UlFVTjRReXhQUVVGUE8wRkJRMHdzTmtKQlFXMUNMRk5CUVZNN1FVRkROVUlzTmtKQlFXMUNMRk5CUVZNN1FVRkJRU3hSUVVNNVFqdEJRVVZCTEdOQlFVMHNVMEZCVXl4bFFVRmxMR05CUVdNc1dVRkJXU3hYUVVGWExGRkJRVkVzUTBGQlF6dEJRVU0xUlN4alFVRk5MRWxCUVVrc1kwRkJZeXhUUVVGVExFOUJRVThzVFVGQlRTeFJRVUZSTEVOQlFVTTdRVUZEZGtRc1kwRkJUU3hKUVVGSkxHTkJRV01zVTBGQlV5eFBRVUZQTEUxQlFVMHNVVUZCVVN4RFFVRkRPMEZCUlhaRUxGbEJRVWs3UVVGRFNpeFpRVUZKTEZkQlFWYzdRVUZEWWl4alFVRkpMR0ZCUVdFN1FVRkRaaXhyUWtGQlRTeG5Ra0ZCWjBJc1ZVRkJWU3hMUVVGTExFdEJRVXNzVFVGQlRUdEJRVU5vUkN4clFrRkJUU3huUWtGQlowSXNWVUZCVlN4TFFVRkxMRXRCUVVzc1RVRkJUVHRCUVVOb1JDeHJRa0ZCVFN4MVFrRkJkVUlzVFVGQlRTeFRRVUZUTEV0QlFVc3NUVUZCVFN4TlFVRk5MRk5CUVZNc1EwRkJReXhKUVVGSkxFMUJRVTA3UVVGRGFrWXNhMEpCUVUwc2RVSkJRWFZDTEUxQlFVMHNVMEZCVXl4TFFVRkxMRTFCUVUwc1RVRkJUU3hUUVVGVExFTkJRVU1zU1VGQlNTeE5RVUZOTzBGQlEycEdMR2RDUVVGSkxHbENRVUZwUWl4bFFVRmxPMEZCUTJ4RExESkNRVUZoTEU5QlFVODdRVUZCUVN4blFrRkRhRUk3UVVGQlFTeG5Ra0ZEUVR0QlFVRkJMR3RDUVVOSkxHZENRVUZuUWl4SFFVRkhMRVZCUVVVc1MwRkJTeXhMUVVGTExFbEJRVWtzUlVGQlJTeFpRVUZaTEVkQlFVY3NRMEZCUXl4UlFVRlJMRVZCUVVVc1dVRkJXU3haUVVGWk8wRkJRVUVzYTBKQlEzWkdMR2RDUVVGblFpeEhRVUZITEVWQlFVVXNTMEZCU3l4TFFVRkxMRWxCUVVrc1JVRkJSU3haUVVGWkxFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVXNXVUZCV1N4WlFVRlpPMEZCUVVFc1owSkJRVU03UVVGQlFTeGpRVUZETzBGQlFVRXNXVUZEYmtjc1QwRkJUenRCUVVOTUxESkNRVUZoTzBGQlFVRXNhME5CUTFNc1QwRkJUeXhuUWtGQlowSXNhVUpCUVdsQ0xFTkJRVU03UVVGQlFTdzBRa0ZETDBNc1JVRkJSU3d5UWtGQk1rSXNhVUpCUVdsQ0xFMUJRVTBzUTBGQlF6dEJRVUZCTERSQ1FVTnlSQ3hGUVVGRkxESkNRVUV5UWl4cFFrRkJhVUlzVFVGQlRTeERRVUZETzBGQlFVRXNZMEZGYWtVc1QwRkJUenRCUVVGQkxHZENRVU5JTzBGQlFVRXNaMEpCUTBFN1FVRkJRU3hyUWtGRFNTd3JRa0ZCSzBJc2RVSkJRek5DTEVWQlFVVXNXVUZCV1N4alFVRmpMRWxCUXpWQ0xFZEJRVWNzUlVGQlJTeExRVUZMTEV0QlFVc3NTVUZCU1N4RlFVRkZMRmxCUVZrc1kwRkJZeXhEUVVGRE8wRkJRVUVzYTBKQlEzQkVMQ3RDUVVFclFpeDFRa0ZETTBJc1JVRkJSU3haUVVGWkxHTkJRV01zU1VGRE5VSXNSMEZCUnl4RlFVRkZMRXRCUVVzc1MwRkJTeXhKUVVGSkxFVkJRVVVzV1VGQldTeGpRVUZqTEVOQlFVTTdRVUZCUVN4blFrRkJhVUk3UVVGQlFTeGpRVUZETEVOQlFVTTdRVUZCUVR0QlFVRkJMRmxCUlhKR08wRkJRVUVzVlVGRFJpeFBRVUZQTzBGQlEwd3NlVUpCUVdFc1QwRkJUenRCUVVGQkxHTkJRMmhDTzBGQlFVRXNZMEZCWXl4cFFrRkJhVUlzUlVGQlJTeFpRVUZaTEZsQlFWa3NSMEZCUnl4RlFVRkZMRmxCUVZrc1dVRkJXU3hEUVVGRE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlF6bEdPMEZCUVVFc1VVRkRSaXhQUVVGUE8wRkJRMHdzWTBGQlNTeERRVUZETEdGQlFXRTdRVUZEYUVJc2EwSkJRVTBzU1VGQlNTeE5RVUZOTEhOR1FVRnpSanRCUVVGQkxGVkJRM2hITzBGQlJVRXNaMEpCUVUwc2JVSkJRVzFDTEVOQlFVTXNVVUZCWjBJc1IwRkJWeXhYUVVGWExFOUJRVTg3UVVGRGNrVXNhMEpCUVUwc1kwRkJZeXhsUVVGbExFTkJRVU1zWlVGQlpTeERRVUZETzBGQlEzQkVMR3RDUVVGTkxHTkJRV01zWlVGQlpTeERRVUZETEdWQlFXVXNRMEZCUXp0QlFVTndSQ3h0UWtGQlR6dEJRVUZCTEN0Q1FVTmpMRU5CUVVNc1RVRkJUU3hQUVVGUExHZENRVUZuUWl4eFFrRkJjVUlzUTBGQlF5eEhRVUZITEVOQlFVTTdRVUZCUVN4NVFrRkRPVVFzUTBGQlF5eE5RVUZOTEVWQlFVVXNNa0pCUVRKQ0xHZENRVUZuUWl4RFFVRkRMRWxCUVVrc1RVRkJUU3hEUVVGRE8wRkJRVUVzZVVKQlEyaEZMRU5CUVVNc1RVRkJUU3hGUVVGRkxESkNRVUV5UWl4blFrRkJaMElzUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXp0QlFVRkJMSGRDUVVOcVJTeERRVUZETEdGQlFXRXNRMEZCUXp0QlFVRkJMSGRDUVVObUxFTkJRVU1zWVVGQllTeERRVUZETzBGQlFVRXNORUpCUTFnc1EwRkJReXhoUVVGaExFTkJRVU03UVVGQlFTdzBRa0ZEWml4RFFVRkRMR0ZCUVdFc1EwRkJRenRCUVVGQkxHTkJRemRDTEUxQlFVMHNTVUZCU1N4RFFVRkRMRTlCUVU4c1VVRkJVU3hKUVVGSkxHbENRVUZwUWl4aFFVRmhMRmRCUVZjc1EwRkJRenRCUVVGQk8wRkJRVUVzVlVGRk9VVTdRVUZEUVN4alFVRkpMRFpDUVVFNFFqdEJRVU5vUXl4NVFrRkJZVHRCUVVGQk8wRkJRVUVzWTBGRlZDeHBRa0ZCYVVJc1VVRkJVU3hIUVVGSExFdEJRVXNzUTBGQlF6dEJRVUZCTEdOQlEyeERMR2xDUVVGcFFpeFJRVUZSTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUVVFc1kwRkRiRU1zYVVKQlFXbENMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGQlFTeGpRVU5zUXl4cFFrRkJhVUlzVVVGQlVTeEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVRkJPMEZCUVVFc1ZVRkZlRU1zVDBGQlR6dEJRVU5NTEhsQ1FVRmhPMEZCUVVFc1kwRkRWQ3hwUWtGQmFVSXNNRUpCUVRCQ0xFTkJRVU1zUTBGQlF6dEJRVUZCTEdOQlF6ZERMR2xDUVVGcFFpd3dRa0ZCTUVJc1EwRkJReXhEUVVGRE8wRkJRVUVzWTBGRE4wTXNhVUpCUVdsQ0xEQkNRVUV3UWl4RFFVRkRMRU5CUVVNN1FVRkJRU3hqUVVNM1F5eHBRa0ZCYVVJc01FSkJRVEJDTEVOQlFVTXNRMEZCUXp0QlFVRkJPMEZCUVVFc1ZVRkZia1E3UVVGQlFTeFJRVU5HTzBGQlJVRXNaVUZCVHp0QlFVRkJMRlZCUTBnc1lVRkJZU3huUWtGQlowSXNXVUZCV1N4TFFVRkxMRVZCUVVVc2FVSkJRV2xDTEVkQlFVY3NSMEZCUnl4TlFVRk5MRU5CUVVNN1FVRkJRVHRCUVVGQkxGVkJSVGxGTERSQ1FVRTBRaXhGUVVGRk8wRkJRVUU3UVVGQlFTeFZRVVU1UWl4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQkxGVkJRM2hDTEdGQlFXRXNjME5CUVhORExHMUNRVUZ0UWl4RFFVRkRPMEZCUVVFc1ZVRkRka1VzVlVGQlZUdEJRVUZCTzBGQlFVRXNUVUZGYUVJN1FVRkZTaXhOUVVGTkxEUkNRVU5HTEVOQlFVTXNUVUZCWXl4VlFVRnJRaXhIUVVGbExFZEJRV1VzVlVGRE9VUXNNRUpCUVcxRExHbENRVUY1UWl4RlFVRkZMR0ZCUVRCQ08wRkJRM1pHTEdOQlFVMHNZMEZCWXl4RFFVRkRMRlZCUVZVc1UwRkJVeXhGUVVGRkxFMUJRVTBzUlVGQlJTeEpRVUZKTzBGQlEzUkVMRmxCUVVrc1kwRkJZeXhGUVVGRk8wRkJRM0JDTEZsQlFVa3NZVUZCWVN4VlFVRlZMRXRCUVVzc1JVRkJSU3hKUVVGSk8wRkJSWFJETEZsQlFVa3NXVUZCV1R0QlFVTm9RaXhaUVVGSkxEaENRVUU0UWp0QlFVZHNReXhqUVVGTkxHTkJRV01zUTBGQlF5eFhRVUZYTzBGQlEyaERMRmxCUVVrc1lVRkJZVHRCUVVObUxHZENRVUZOTEd0Q1FVRnJRaXhqUVVGakxGVkJRVlVzUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN4TFFVRkxPMEZCUTNKRkxHTkJRVWtzUTBGQlF5eHBRa0ZCYVVJN1FVRkRjRUlzYTBKQlFVMHNTVUZCU1N4TlFVRk5MRGhEUVVFclF6dEJRVUZCTEZWQlEycEZPMEZCUTBFc2QwSkJRV003UVVGRFpDeDFRa0ZCWVN4VlFVRlZMRXRCUVVzc1YwRkJWenRCUVVOMlF5eG5Ra0ZCVFN4blFrRkJaMElzVlVGQlZTeExRVUZMTEVWQlFVVXNTVUZCU1N4TlFVRk5PMEZCUTJwRUxHZENRVUZOTEdkQ1FVRm5RaXhWUVVGVkxFdEJRVXNzUlVGQlJTeEpRVUZKTEUxQlFVMDdRVUZEYWtRc1owSkJRVTBzZFVKQlFYVkNMRVZCUVVVc1MwRkJTeXhUUVVGVExFdEJRVXNzUlVGQlJTeExRVUZMTEVWQlFVVXNTMEZCU3l4VFFVRlRMRU5CUVVNc1NVRkJTU3hOUVVGTk8wRkJRM0JHTEdkQ1FVRk5MSFZDUVVGMVFpeEZRVUZGTEV0QlFVc3NVMEZCVXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRkxFdEJRVXNzVTBGQlV5eERRVUZETEVsQlFVa3NUVUZCVFR0QlFVTndSaXh6UWtGQldTeExRVUZMTEdGQlFXRTdRVUZET1VJc2MwSkJRVmtzUzBGQlN5eGhRVUZoTzBGQlF6bENMSE5DUVVGWkxFdEJRVXNzYjBKQlFXOUNPMEZCUTNKRExITkNRVUZaTEV0QlFVc3NiMEpCUVc5Q08wRkJSWEpETEdOQlFVa3NhMEpCUVd0Q08wRkJRM1JDTEcxQ1FVRlRMRWxCUVVrc1IwRkJSeXhKUVVGSkxGbEJRVmtzVVVGQlVTeExRVUZMTzBGQlF6TkRMR3RDUVVGTkxFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFVVXNTMEZCU3l4VFFVRlRMRU5CUVVNc1MwRkJTenRCUVVNeFF5eHJRa0ZCVFN4UFFVRlBMRVZCUVVVc1MwRkJTeXhGUVVGRkxFdEJRVXNzVTBGQlV5eERRVUZETEV0QlFVczdRVUZETVVNc1owSkJRVWtzVTBGQlV5eE5RVUZOTzBGQlEycENMR2xEUVVGdFFqdEJRVUZCTEZsQlEzSkNMRTlCUVU4N1FVRkRURHRCUVVGQkxGbEJRMFk3UVVGQlFTeFZRVU5HTzBGQlEwRXNZMEZCU1N4clFrRkJhMElzVFVGQlRTeEhRVUZITzBGQlF6ZENMREJEUVVFNFFqdEJRVU01UWl4M1FrRkJXVHRCUVVGQkxGVkJRMlFzVjBGQlZ5eHBRa0ZCYVVJc2FVSkJRV2xDTEhkQ1FVRjNRaXh6UWtGQmMwSTdRVUZEZWtZc2QwSkJRVms3UVVGQlFTeFZRVU5rTzBGQlFVRXNVVUZEUml4UFFVRlBPMEZCUlV3c2MwSkJRVms3UVVGQlFTeFJRVU5rTzBGQlEwRXNiMEpCUVZrc1MwRkJTeXhUUVVGVE8wRkJSVEZDTEdWQlFVODdRVUZCUVN4VlFVTk1PMEZCUVVFc1ZVRkRRU3hoUVVGaE8wRkJRVUVzV1VGRFdDeE5RVUZOTEZkQlFWY3NXVUZCV1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxGTkJRVk1zUTBGQlF5eEZRVUZGTEV0QlFVc3NSMEZCUnp0QlFVRkJMRmxCUXpsRUxHMUNRVUZ0UWl4RFFVRkRMRkZCUVZFc1RVRkJUVHRCUVVGQkxGVkJRM0JETzBGQlFVRXNWVUZEUVN4cFFrRkJhVUlzUTBGQlF5eHBRa0ZCYVVJN1FVRkJRU3haUVVNdlFqdEJRVUZCTEZsQlFXTXNSVUZCUlR0QlFVRkJMRmxCUVUwc1JVRkJSVHRCUVVGQkxGbEJRVTA3UVVGQlFTeFpRVUZoTzBGQlFVRXNXVUZCVnp0QlFVRkJMRmxCUVdFN1FVRkJRU3haUVVFMlFqdEJRVUZCTEZsQlEyaEhMRVZCUVVVN1FVRkJRU3haUVVGVkxFVkJRVVU3UVVGQlFTeFpRVUZWTzBGQlFVRXNXVUZCWjBJN1FVRkJRU3hWUVVGM1FqdEJRVUZCTEZWQlEzQkZMRmxCUVZrc1QwRkJUenRCUVVGQkxGbEJRMnBDTEZOQlFWTXNRMEZCUXl4RlFVRkRMRTFCUVUwc1lVRkJZU3hWUVVGVkxHVkJRV01zUTBGQlF6dEJRVUZCTEZsQlEzWkVMR1ZCUVdVc1JVRkJReXhIUVVGSExFdEJRVXM3UVVGQlFTeGpRVUZMTEdGQlFXRXNTMEZCTUVJN1FVRkJRVHRCUVVGQkxGbEJRWE5DTEVWQlFVTTdRVUZCUVN4WlFVTXpSaXhwUWtGQmFVSTdRVUZCUVN4alFVTm1MRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNTMEZCU3l4TFFVRkxMRlZCUVZVc1MwRkJTeXhYUVVGWExFbEJRVWtzUTBGQlF5eEZRVUZETzBGQlFVRXNZMEZEZUVVc1IwRkJSeXd5UWtGQk1rSXNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hYUVVGWE8wRkJRVUVzV1VGRE0wUTdRVUZCUVN4VlFVTkdPMEZCUVVFc1VVRkRSanRCUVVGQkxFMUJRMFk3UVVGRlNpeE5RVUZOTEdOQlEwWXNRMEZCUXl4VFFVRjVRaXhOUVVGakxGVkJRVGhDTERCQ1FVTnlSU3hWUVVGdFFpeHRRa0ZCYTBNN1FVRkRjRVFzWjBKQlFWRXNVVUZCVVR0QlFVRkJMRlZCUTFvN1FVRkJRU3hWUVVGTkxGbEJRVms3UVVGQlFTeFZRVUZKTEZGQlFWRXNUMEZCVHl4RFFVRkRPMEZCUVVFc1ZVRkJSeXhSUVVGUkxFOUJRVThzUTBGQlF6dEJRVUZCTEZWQlFVYzdRVUZCUVN4VlFVRlZPMEZCUVVFc1ZVRkRkRVU3UVVGQlFTeFJRVUZqTEVOQlFVTTdRVUZCUVN4TlFVTnlRanRCUVVWSExFMUJRVTBzVFVGQlRTeERRVUZETEZsQlFXdERPMEZCUTNCRUxHOUNRVUZaTEZOQlFWTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1RVRkJUU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdRVUZCUVN4TlFVTnVSRHRCUVVWUExFMUJRVTBzVFVGQlRTeERRVUZETEZsQlFXdERPMEZCUTNCRUxHOUNRVUZaTEZOQlFWTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1RVRkJUU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdRVUZCUVN4TlFVTnVSRHRCUVVWUExFMUJRVTBzVVVGQlVTeERRVUZETEZsQlFXdERPMEZCUTNSRU8wRkJRVUVzVlVGRFNUdEJRVUZCTEZWQlFWTTdRVUZCUVN4VlFVRlZMRVZCUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzVFVGQlRTeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1VVRkJVU3hEUVVGRExFZEJRVWNzVFVGQlRTeGhRVUZoTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVjN1FVRkJRU3hWUVVGSk8wRkJRVUVzVlVGRGRFYzdRVUZCUVR0QlFVRkJMRkZCUVhkQ08wRkJRVUVzVFVGRE9VSTdRVUZGVHl4TlFVRk5MRTFCUVUwc1EwRkJReXhaUVVGclF6dEJRVU53UkN4dlFrRkJXU3hUUVVGVExFOUJRVThzUTBGQlF5eEhRVUZITEUxQlFVMHNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8wRkJRVUVzVFVGRGJrUTdRVUZGVHl4TlFVRk5MRTFCUVUwc1EwRkJReXhaUVVGclF6dEJRVU53UkN4alFVRk5MRTlCUVU4c1kwRkJZeXhUUVVGVExGRkJRVkVzVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVlN4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeExRVUZMTzBGQlF6ZEdMR05CUVUwc1YwRkJWeXhUUVVGVExGRkJRVkVzVlVGQlZUdEJRVU0xUXp0QlFVRkJMRlZCUTBrN1FVRkJRU3hWUVVGVE8wRkJRVUVzVlVGQlVTeEZRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRTFCUVUwc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEZGQlFWRXNRMEZCUXl4SFFVRkhMRTFCUVUwc2NVSkJRWEZDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVjN1FVRkJRU3hWUVVNM1J6dEJRVUZCTEhkQ1FVTnJRaXhKUVVGSkxGTkJRVk1zU1VGQlNTeFJRVUZSTEVsQlFVazdRVUZCUVN4cFFrRkRjRU1zU1VGQlNUdEJRVUZCTEdsQ1FVTktMRWxCUVVrN1FVRkJRU3gxUWtGRFJTeEpRVUZKTzBGQlFVRXNhVUpCUTFZc1NVRkJTVHRCUVVGQk8wRkJRVUVzSzBKQlJWVXNTVUZCU1N3MlFrRkJOa0lzU1VGQlNTeHhRa0ZCY1VJc1NVRkJTU3hKUVVOdVJpeFJRVUZSTzBGQlFVRTdRVUZCUVN4dlEwRkZhMElzU1VGQlNTeGxRVUZsTEVsQlFVa3NZMEZCWXl4SlFVRkpPMEZCUVVFN1FVRkJRU3h2UWtGRmVrUXNTVUZCU1R0QlFVRkJPMEZCUVVFN1FVRkJRU3hSUVVWcVFqdEJRVUZCTEUxQlExQTdRVUZGVHl4TlFVRk5MRTFCUVUwc1EwRkJReXhaUVVGclF6dEJRVU53UkN4dlFrRkJXU3hUUVVGVExFOUJRVThzUTBGQlF5eEhRVUZITEUxQlFVMHNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8wRkJRVUVzVFVGRGJrUTdRVUZGVHl4TlFVRk5MRlZCUVZVc1EwRkJReXhaUVVGclF6dEJRVU40UkR0QlFVRkJMRlZCUTBrN1FVRkJRU3hWUVVGVE8wRkJRVUVzVlVGQldTeEZRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRTFCUVUwc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEZGQlFWRXNRMEZCUXl4SFFVRkhMRTFCUVUwc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZITzBGQlFVRXNWVUZCU1R0QlFVRkJMRlZCUTNSSE8wRkJRVUU3UVVGQlFTeFJRVUYzUWp0QlFVRkJMRTFCUXpsQ08wRkJSVThzVFVGQlRTeFBRVUZQTEVOQlFVTXNXVUZCYTBNN1FVRkRja1E3UVVGQlFTeFZRVU5KTzBGQlFVRXNWVUZCVXp0QlFVRkJMRlZCUVZNc1JVRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhSUVVGUkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJSenRCUVVGQkxGVkJRVWs3UVVGQlFTeFZRVU51Unp0QlFVRkJPMEZCUVVFc1VVRkJkMEk3UVVGQlFTeE5RVU01UWp0QlFVVlBMRTFCUVUwc2FVSkJRV2xDTEVOQlFVTXNXVUZCYTBNN1FVRkRMMFE3UVVGQlFTeFZRVU5KTzBGQlFVRXNWVUZCVXp0QlFVRkJMRlZCUVcxQ0xFVkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NUVUZCVFN4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzVVVGQlVTeERRVUZETEVkQlFVY3NUVUZCVFN4aFFVRmhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWM3UVVGQlFTeFZRVU16Unp0QlFVRkJMRlZCUVZjN1FVRkJRVHRCUVVGQkxGRkJRWGRDTzBGQlFVRXNUVUZEZWtNN1FVRkZUeXhOUVVGTkxHTkJRV01zUTBGQlF5eFpRVUZyUXp0QlFVTTFSRHRCUVVGQkxGVkJRMGs3UVVGQlFTeFZRVUZUTzBGQlFVRXNWVUZCWjBJc1JVRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhSUVVGUkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEdGQlFXRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJSenRCUVVGQkxGVkJRM2hITzBGQlFVRXNWVUZCVnp0QlFVRkJPMEZCUVVFc1VVRkJkMEk3UVVGQlFTeE5RVU42UXp0QlFVRkJPMEZCUVVFN096dEJRM1JSUVN4TlFXbENZU3h6UWtGMVFrRXNPRUpCWVVFc01FSkJWVUU3UVVFdlJHSTdRVUZCUVR0QlFVRkJPMEZCUjBFN1FVRkRRVHRCUVdGUExFMUJRVTBzZFVKQlExUXNRMEZCUXl4WlFVRXdReXhYUVVGdFFpeFhRVUZYTEZWQlFXdENPMEZCUTNwR0xHZENRVUZSTEZkQlFWY3NXVUZCV1R0QlFVRkJMRlZCUXpkQ0xFdEJRVXM3UVVGRFNDeHRRa0ZCVHl4elFrRkJjMElzVTBGQlV6dEJRVUZCTEZWQlEzaERMRXRCUVVzN1FVRkRTQ3h0UWtGQlR5eFpRVUZaTEZOQlFWTXNXVUZCV1N4VFFVRlRPMEZCUVVFc1ZVRkRia1FzUzBGQlN6dEJRVU5JTEcxQ1FVRlBMSGRDUVVGM1FpeFRRVUZUTEVsQlFVa3NVVUZCVVN4NVFrRkJlVUlzVTBGQlV5eEpRVU5zUml4UlFVRlJPMEZCUVVFc1ZVRkRaQ3hMUVVGTE8wRkJRMGdzYlVKQlFVOHNaVUZCWlN4VFFVRlRMR05CUVdNc1UwRkJVeXhWUVVGVkxGRkJRVkVzT0VKQlEzQkZMRkZCUVZFN1FVRkJRU3hWUVVOa0xFdEJRVXM3UVVGRFNDeHRRa0ZCVHl4clFrRkJhMElzVVVGQlVTdzJRMEZCTmtNc1UwRkJVenRCUVVGQkxGVkJRM3BHTEV0QlFVczdRVUZEU0N4dFFrRkJUenRCUVVGQkxGVkJSVlE3UVVGRFJTeHJRa0ZCVFN4SlFVRkpMRTFCUVUwc01FSkJRVEJDTEZkQlFWY3NWVUZCVlN4RlFVRkZPMEZCUVVFc1VVRkRja1U3UVVGQlFTeE5RVU5HTzBGQlJVY3NUVUZCVFN3clFrRkRWQ3hEUVVGRExGbEJRVEJETEcxQ1FVRnhRenRCUVVNNVJTeFpRVUZKTEZkQlFWY3NaVUZCWlN4UlFVRlJPMEZCUTNCRExIbENRVUZsTzBGQlFVRXNXVUZEV0N4RlFVRkRMSEZDUVVGelFpeE5RVUZOTEZkQlFWY3NVVUZCVVR0QlFVRkJMRmxCUVVjc1JVRkJReXh4UWtGQmMwSXNUVUZCVFN4WFFVRlhMRkZCUVZFN1FVRkJRU3hWUVVGRE8wRkJRVUVzVVVGRE1VY3NWMEZCVnl4WFFVRlhMR1ZCUVdVc1pVRkJaVHRCUVVOc1JDeDVRa0ZCWlR0QlFVRkJMRmxCUTFnc1JVRkJReXh4UWtGQmMwSXNUVUZCVFN4WFFVRlhMRTFCUVUwN1FVRkJRU3haUVVGSExFVkJRVU1zY1VKQlFYTkNMRTFCUVUwc1YwRkJWeXhMUVVGTE8wRkJRVUVzVlVGQlF6dEJRVUZCTEZGQlEzSkhMRmRCUVZjc1YwRkJWeXhsUVVGbExHRkJRV0U3UVVGRGFFUXNlVUpCUVdVc1MwRkJTeXhGUVVGRExIRkNRVUZ6UWl4TlFVRk5MRmRCUVZjc1RVRkJUU3hEUVVGRE8wRkJRVUVzVVVGRGNrVTdRVUZCUVN4TlFVTkdPMEZCUlVjc1RVRkJUU3d5UWtGQk1rSXNRMEZCUXl4WlFVRXdReXhoUVVGblF6dEJRVU5xU0N4WlFVRkpMRmRCUVZjc1pVRkJaU3hSUVVGUk8wRkJRM0JETEcxQ1FVRlRMRXRCUVVzc1JVRkJReXhOUVVGTkxGbEJRVmtzVFVGQlRTeE5RVUZMTEVkQlFVY3NSVUZCUXl4TlFVRk5MRmxCUVZrc1RVRkJUU3hOUVVGTExFTkJRVU03UVVGQlFTeFJRVU5vUml4WFFVRlhMRmRCUVZjc1pVRkJaU3hsUVVGbE8wRkJRMnhFTEcxQ1FVRlRMRXRCUVVzc1JVRkJReXhOUVVGTkxGTkJRVk1zVFVGQlRTeE5RVUZMTEVkQlFVY3NSVUZCUXl4TlFVRk5MRkZCUVZFc1RVRkJUU3hOUVVGTExFTkJRVU03UVVGQlFTeFJRVU42UlN4WFFVRlhMRmRCUVZjc1pVRkJaU3hoUVVGaE8wRkJRMmhFTEcxQ1FVRlRMRXRCUVVzc1JVRkJReXhOUVVGTkxGTkJRVk1zVFVGQlRTeE5RVUZMTEVOQlFVTTdRVUZCUVN4UlFVTTFRenRCUVVGQkxFMUJRMFk3UVVGRlR5eE5RVUZOTEc5RFFVTlVMRU5CUVVNc1pVRkJaMFk3UVVGREwwVXNZMEZCVFN4aFFVRmhMRmxCUVZrc1kwRkJkMEk3UVVGRGRrUXNXVUZCU1N4bFFVRmxMR1ZCUVdVN1FVRkRhRU1zWjBKQlFVMHNRMEZCUXl4UFFVRlBMRWxCUVVrc1NVRkJTU3haUVVGWkxIRkNRVUY1UXl4RFFVRkRMRXRCUVVzc1IwRkJSenRCUVVOd1JpeHBRa0ZCVHl4RlFVRkRMRmxCUVZrc1QwRkJUeXhMUVVGSk8wRkJRVUVzVVVGRGFrTXNWMEZCVnl4bFFVRmxMRkZCUVZFN1FVRkRhRU1zWjBKQlFVMHNRMEZCUXl4VFFVRlRMRTlCUVU4c1NVRkJTU3haUVVGWkxIRkNRVUY1UXl4RFFVRkRMRlZCUVZVc1VVRkJVVHRCUVVOdVJ5eHBRa0ZCVHl4RlFVRkRMRmxCUVZrc1UwRkJVeXhSUVVGUE8wRkJRVUVzVVVGRGRFTXNWMEZCVnl4bFFVRmxMR0ZCUVdFN1FVRkRja01zWjBKQlFVMHNRMEZCUXl4TFFVRkxMRWxCUVVrc1dVRkJXU3h4UWtGQmFVTXNRMEZCUXl4SlFVRkpPMEZCUTJ4RkxHbENRVUZQTEVWQlFVTXNXVUZCV1N4TlFVRkxPMEZCUVVFc1VVRkRNMEk3UVVGRFFTeGxRVUZQTEVWQlFVTXNWMEZCVlR0QlFVRkJMRTFCUTNCQ08wRkJRVUU3UVVGQlFUczdPMEZETjBWS0xFMUJjVUpoTEdGQlpVRTdRVUZ3UTJJN1FVRkJRVHRCUVVGQk8wRkJjVUpQTEUxQlFVMHNZMEZCWXl4RFFVRkRMRmRCUVcxQ0xHRkJRWEZDTzBGQlEyeEZMR2RDUVVGUkxGZEJRVmM3UVVGQlFTeFZRVU5xUWl4TFFVRkxPMEZCUTBnc2JVSkJRVTg3UVVGQlFTeFZRVU5VTEV0QlFVczdRVUZEU0N4dFFrRkJUeXhSUVVGUkxGRkJRVkU3UVVGQlFTeFZRVU42UWl4TFFVRkxPMEZCUTBnc2JVSkJRVThzVVVGQlVTeFJRVUZSTzBGQlFVRXNWVUZEZWtJc1MwRkJTenRCUVVOSUxHMUNRVUZQTEZGQlFWRXNVVUZCVVR0QlFVRkJMRlZCUTNwQ08wRkJRMFVzYTBKQlFVMHNTVUZCU1N4TlFVRk5MRWRCUVVjc1UwRkJVeXc0UWtGQk9FSTdRVUZCUVN4UlFVTTVSRHRCUVVGQkxFMUJRMFk3UVVGRlR5eE5RVUZOTEdOQlFXTXNRMEZCUXl4WlFVRTJRanRCUVVGQkxGRkJRMnBFTEZWQlFWVXNiVVJCUVcxRUxFVkJRVVU3UVVGQlFUdEJRVUZCTzBGQlFVRTdPenRCUTNKRGRrVXNUVUZ4UW1FN1FVRnlRbUk3UVVGQlFUdEJRVUZCTzBGQmNVSlBMRTFCUVUwc1owSkJRV2RDTEVOQlFVTXNZMEZCZFVJN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4VlFVOHpReXhUUVVGVExGbEJRVmtzVTBGQlV5eFpRVUZaTEZOQlFWTTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHM3TzBGRE5VSTNSQ3hOUVRoQ1RTdzBRa0ZwUWtFc2QwSkJlVUpQTERSQ1FYVkdVQ3gzUWtGcFFrRXNlVUpCUzA4c2QwSkJhVXRRTEhsQ1FUaEZUenRCUVhCaFlqdEJRVUZCTzBGQlFVRTdRVUZ4UWtFN1FVRkZRVHRCUVVWQk8wRkJRMEU3UVVGRlFUdEJRVVZCTEUxQlFVMHNOa0pCUVRaQ0xFTkJRVU5ETEZsQlFXOUNMR05CUVRoQ08wRkJRM0JHTEZsQlFVbEJMRmxCUVZjN1FVRkRZaXhwUWtGQlR6dEJRVUZCTzBGQlFVRTdRVUZCUVN4M1JFRkhOa01zV1VGQldTeHRRa0ZCYlVJc1JVRkJSVHRCUVVGQk8wRkJRVUVzVVVGSGRrWXNUMEZCVHp0QlFVTk1MR2xDUVVGUE8wRkJRVUU3UVVGQlFUdEJRVUZCTEdkRVFVZHhReXhaUVVGWkxHMUNRVUZ0UWl4RlFVRkZPMEZCUVVFN1FVRkJRU3hSUVVVdlJUdEJRVUZCTEUxQlEwWTdRVUZGUVN4TlFVRk5MSGxDUVVGNVFpeERRVUZETEZsQlFYRkNMSEZDUVVFMlFqdEJRVU5vUml4WlFVRkpMRmxCUVZrN1FVRkRaQ3hwUWtGQlR6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRlZCU1VRc2NVSkJRWEZDTEVsQlFVa3NTMEZCU3l3MlJFRkJOa1E3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRmxCUzNwR0xIRkNRVUZ4UWl4SlFVRkpMRXRCUVVzc01rTkJRVEpETzBGQlFVRTdRVUZCUVN4UlFVVnVSaXhQUVVGUE8wRkJRMHdzYVVKQlFVODdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzV1VGTlF5eHhRa0ZCY1VJc1NVRkJTU3hMUVVGTExIbERRVUY1UXp0QlFVRkJPMEZCUVVFc1VVRkZha1k3UVVGQlFTeE5RVU5HTzBGQlJVOHNUVUZCVFN3MlFrRkRWQ3hEUVVGRExHVkJRWGxDTEdWQlFYbERMRTlCUVU4c1QwRkJUeXhYUVVOb1JpeGhRVUZoTEU5QlFVOHNXVUZCV1N4SlFVRkpMRk5CUVZNc1QwRkJUeXhyUWtGQmEwSXNUMEZCWlR0QlFVTndSaXhqUVVGTkxHRkJRV0VzWTBGQll5eERRVUZETEVsQlFVa3NZMEZCWXl4RFFVRkRPMEZCUTNKRUxHTkJRVTBzWVVGQllTeGpRVUZqTEVOQlFVTXNTVUZCU1N4alFVRmpMRU5CUVVNN1FVRkRja1FzWTBGQlRTeGhRVUZoTEdGQlFXRXNZVUZCWVR0QlFVTTNReXhqUVVGTkxHRkJRV0VzWVVGQllTeFpRVUZaTzBGQlF6VkRMR05CUVUwc2JVSkJRVzFDTEdGQlFXRXNZMEZCWXl4RFFVRkRPMEZCUTNKRUxHTkJRVTBzWjBKQlFXZENMRmxCUVZrc1kwRkJZeXhEUVVGRE8wRkJSV3BFTEZsQlFVa3NSMEZCU1N4alFVRmpMSEZDUVVGeFFpeExRVUZMTEdOQlFXTXNRMEZCUXl4TlFVRk5MRXRCUXpkRUxFTkJRVU1zWlVGQlpTeHhRa0ZCY1VJc1MwRkJTeXh4UWtGQmNVSXNUMEZEYWtVc1lVRkJZU3hqUVVGakxFTkJRVU1zVFVGQlRTeExRVUZMTEZsQlFWa3NZMEZCWXl4RFFVRkRMRTFCUVUwc1MwRkJTeXhqUVVGakxFTkJRVU1zVFVGQlRTeEpRVUZKTzBGQlF6RkhMR2RDUVVGTkxFbEJRVWtzVFVGQlRTeHBRa0ZCYVVJc1ZVRkJWU3c0UWtGRGRrTXNaMEpCUVdkQ0xIbENRVUY1UWl4alFVRmpMRU5CUVVNc1EwRkJRenRCUVVGQkxHOURRVU5xUXl4blFrRkJaMEk3UVVGQlFTeGxRVU55UXl4VlFVRlZMSGxEUVVGNVF5eGpRVUZqTEVOQlFVTXNRMEZCUXl4bFFVTjBSU3hUUVVGVExEQkRRVUV3UXl4alFVRmpMRU5CUVVNc1EwRkJReXhyUWtGRGJrVXNZMEZCWXl4RFFVRkRMRU5CUVVNc1lVRkJZVHRCUVVGQkxGRkJRMjVETzBGQlEwRXNaVUZCVHp0QlFVRkJMSGxEUVVNMFFpeG5Ra0ZCWjBJc1NVRkJTU3hKUVVGSkxFMUJRVTBzWVVGQllTeG5Ra0ZCWjBJc1RVRkJUU3hWUVVGVk8wRkJRVUVzTWtOQlEzcEZMRWxCUVVrc1RVRkJUU3hoUVVGaExHTkJRV01zUTBGQlF5eERRVUZETEUxQlFVMHNVMEZCVXp0QlFVRkJPMEZCUVVFc2RVSkJSVEZGTEdOQlFXTXNRMEZCUXl4RFFVRkRPMEZCUVVFc2RVSkJRMmhDTEdOQlFXTXNRMEZCUXl4RFFVRkRPMEZCUVVFc01rSkJRMW9zWjBKQlFXZENPMEZCUVVFc2IwSkJRM1pDTEZOQlFWTTdRVUZCUVR0QlFVRkJMREpDUVVWR0xHTkJRV01zUTBGQlF5eERRVUZETEV0QlFVc3NZMEZCWXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhqUVVGakxFTkJRVU1zUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEdkQ1FWVnlSU3hUUVVGVExFMUJRVTBzYVVKQlFXbENPMEZCUVVFc1NVRkROVU1zV1VGQldTeHpRa0ZCYzBJc1ZVRkJWU3huUWtGQlowSXNXVUZCV1N4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVGQkxEaERRVU4yUXl4VlFVRlZPMEZCUVVFN1FVRkJRU3h2UWtGRmNFTXNVMEZCVXl4SFFVRkhMRXRCUVVzc1MwRkJTeXhyUWtGQmEwSXNVMEZCVXl4RFFVRkRMRXRCUVVzc01FTkJRVEJETzBGQlFVRXNhVUpCUTNCSExGTkJRVk1zY1VKQlFYRkNMR1ZCUVdVc1MwRkJTeXhIUVVGSE8wRkJRVUU3UVVGQlFTeDNRa0ZGT1VNc1NVRkJTVHRCUVVGQk8wRkJRVUU3UVVGQlFTdzRRa0ZIUlN4aFFVRmhPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEZsQlRTOUNMREpDUVVFeVFpeFpRVUZaTEZOQlFWTXNRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxEQkRRVWx1UWl4aFFVRmhPMEZCUVVFN1FVRkJRVHRCUVVGQkxITkdRVWszUXl4WlFVRlpMRzFDUVVGdFFpeEZRVUZGTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNXVUZWTDBJc2NVSkJRWEZDTEVsQlFVa3NTMEZCU3l3MFJFRkJORVE3UVVGQlFUdEJRVUZCTEZsQlJURkdMSFZDUVVGMVFpeFpRVUZaTEdkQ1FVRm5RaXhEUVVGRE8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzVFVGVk5VUTdRVUZGU2l4TlFVRk5MSGxDUVVGNVFpeERRVUZEUVN4WlFVRnZRaXhqUVVFNFFqdEJRVU5vUml4WlFVRkpRU3haUVVGWE8wRkJRMklzYVVKQlFVODdRVUZCUVR0QlFVRkJPMEZCUVVFc2VVTkJSemhDTEZsQlFWa3NiVUpCUVcxQ0xFVkJRVVU3UVVGQlFUdEJRVUZCTEZGQlIzaEZMRTlCUVU4N1FVRkRUQ3hwUWtGQlR6dEJRVUZCTzBGQlFVRTdRVUZCUVN4cFEwRkhjMElzV1VGQldTeHRRa0ZCYlVJc1JVRkJSVHRCUVVGQk8wRkJRVUVzVVVGRmFFVTdRVUZCUVN4TlFVTkdPMEZCUlVFc1RVRkJUU3d3UWtGQk1FSXNRMEZCUXl4bFFVTTNRaXhoUVVGaExHdEVRVUZyUkR0QlFVazFSQ3hOUVVGTkxIbENRVU5VTEVOQlFVTXNaVUZCZVVJc1pVRkJlVU1zVDBGQlR5eFBRVUZQTEZkQlEyaEdMR0ZCUVdFc1QwRkJUeXhaUVVGWkxFbEJRVWtzVTBGQlV5eFBRVUZQTEd0Q1FVRnJRaXhKUVVOMFJTdzBRa0ZCTkVJc1ZVRkJhMEk3UVVGRE4wTXNZMEZCVFN4aFFVRmhMR05CUVdNc1EwRkJReXhKUVVGSkxHTkJRV01zUTBGQlF6dEJRVU55UkN4alFVRk5MR0ZCUVdFc1kwRkJZeXhEUVVGRExFbEJRVWtzWTBGQll5eERRVUZETzBGQlEzSkVMR05CUVUwc1lVRkJZU3hoUVVGaExHRkJRV0U3UVVGRE4wTXNZMEZCVFN4aFFVRmhMR0ZCUVdFc1dVRkJXVHRCUVVVMVF5eFpRVUZKTEVWQlFVVXNZVUZCWVN4alFVRmpMRU5CUVVNc1RVRkJUU3hMUVVGTExHRkJRV0VzWTBGQll5eERRVUZETEUxQlFVMHNTMEZEZWtVc1dVRkJXU3hqUVVGakxFTkJRVU1zVFVGQlRTeEpRVUZKTzBGQlEzcERMR2RDUVVGTkxFbEJRVWtzVFVGQlRTeGpRVUZqTEZWQlFWVXNlVU5CUTNCRExHTkJRV01zUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhWUVVGVkxIbERRVU14UXl4alFVRmpMRU5CUVVNc1EwRkJReXhsUVVGbExGTkJRVk1zZVVOQlFYbERMR05CUVdNc1EwRkJReXhEUVVGRExFVkJRVVU3UVVGQlFTeFJRVU42Unp0QlFVTkJMR05CUVUwc1owSkJRV2RDTEdGQlFXRXNZMEZCWXl4RFFVRkRPMEZCUTJ4RUxHTkJRVTBzWjBKQlFXZENMR0ZCUVdFc1kwRkJZeXhEUVVGRE8wRkJRMnhFTEdOQlFVMHNaMEpCUVdkQ0xGbEJRVmtzWTBGQll5eERRVUZETzBGQlEycEVMR05CUVUwc1owSkJRV2RDTERSQ1FVTnNRanRCUVVGQk8wRkJRVUU3UVVGQlFTeG5SRUZIYzBNc1ZVRkJWVHRCUVVGQkxHZEVRVU5XTEZWQlFWVTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxHbEVRVXRVTEZWQlFWVXNNa0pCUVRKQ0xHTkJRV01zUTBGQlF5eERRVUZETzBGQlFVRXNiVVJCUTI1RUxGVkJRVlVzTWtKQlFUSkNMR05CUVdNc1EwRkJReXhEUVVGRE8wRkJRVUVzV1VGRE5VWXNkVUpCUVhWQ0xGbEJRVmtzVTBGQlV5eERRVUZETzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc2FVUkJTVklzVTBGQlV5d3lRa0ZCTWtJc1kwRkJZeXhEUVVGRExFTkJRVU03UVVGQlFTeDFSRUZET1VNc1ZVRkJWU3d5UWtGQk1rSXNZMEZCWXl4RFFVRkRMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJRVUVzZFVOQlIzSkZMRmxCUVZrc2JVSkJRVzFDTEVWQlFVVTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTdzBRa0ZQTlVNc1NVRkJTVHRCUVVGQk8wRkJRVUU3UVVGQlFTd3lSRUZITWtJc1kwRkJZeXhEUVVGRExFTkJRVU03UVVGQlFUdEJRVUZCTzBGQlFVRXNNRUpCU1RkRUxHRkJRV0VzYjBOQlFXOURMR05CUVdNc1EwRkJReXhEUVVGRExFOUJRM0JFTEdsRFFVRnBReXhqUVVGakxFTkJRVU1zUTBGQlF5eFBRVUZQTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNNRVJCVlhwQ0xHTkJRV01zUTBGQlF5eERRVUZETzBGQlFVRTdRVUZCUVN3MFJFRkZaQ3hqUVVGakxFTkJRVU1zUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRkZCUzJ4Rk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRFJEUVUxclF5eFZRVUZWTzBGQlFVRTdRVUZCUVN4clEwRkZjRUlzWVVGQllUdEJRVUZCTEd0RFFVTmlMR0ZCUVdFN1FVRkJRU3hyUTBGRFlpeGhRVUZoTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc2MwTkJTVlFzWVVGQllUdEJRVUZCTEhkRFFVTllMR0ZCUVdFN1FVRkJRVHRCUVVGQk8wRkJRVUVzVVVGSE4wTXNkVUpCUVhWQ0xGbEJRVmtzVTBGQlV5eERRVUZETzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3h6UTBGTFppeGhRVUZoTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxEaENRVTF5UWl4WlFVRlpMRzFDUVVGdFFpeEZRVUZGTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzZDBKQlQzWkRMRWxCUVVrN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4UlFVOXdRaXgzUWtGQmQwSXNWVUZCVlN4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZyUW5KRExHVkJRVTg3UVVGQlFTeDVRMEZETkVJc1NVRkJTU3hMUVVGTExGVkJRVlVzVFVGQlRTeFZRVUZWTzBGQlFVRXNlVU5CUTI1RExFbEJRVWtzUzBGQlN5eFZRVUZWTEUxQlFVMHNVMEZCVXp0QlFVRkJMSGxDUVVOc1JDeGpRVUZqTEVOQlFVTXNRMEZCUXp0QlFVRkJMSGxDUVVOb1FpeGpRVUZqTEVOQlFVTXNRMEZCUXp0QlFVRkJMSE5DUVVOdVFpeFRRVUZUTzBGQlFVRTdRVUZCUVN3eVFrRkZTaXhqUVVGakxFTkJRVU1zUTBGQlF5eExRVUZMTEdOQlFXTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1kwRkJZeXhEUVVGRExFTkJRVU03UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4clFrRkpia1VzVTBGQlV5eE5RVUZOTEdsQ1FVRnBRanRCUVVGQkxFMUJRelZETEZsQlFWa3NjMEpCUVhOQ0xGVkJRVlVzWjBKQlFXZENMRmxCUVZrc1EwRkJReXhOUVVGTkxFVkJRVVU3UVVGQlFTeHpRa0ZGTjBVc1UwRkJVeXhIUVVGSExFdEJRVXNzUzBGQlN5eHJRa0ZCYTBJc1UwRkJVeXhEUVVGRExFdEJRVXNzTUVOQlFUQkRPMEZCUVVFc2JVSkJRM2hHTEZOQlFWTXNjVUpCUVhGQ0xHVkJRV1VzUzBGQlN5eEhRVUZITzBGQlFVRTdRVUZCUVN3MFFrRkZOVU1zU1VGQlNUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzVFVGUk1VSXNZVUZCWVR0QlFVRkJPMEZCUVVFN1FVRkJRU3hOUVVkbU8wRkJSVW9zVFVGQlRTd3dRa0ZEUml4RFFVRkRMRmRCUVcxQ0xGTkJRV3RDTEdsQ1FVRjVRaXhYUVVNNVJDeGhRVUYxUXl4cFFrRkJhVUlzVlVGQmEwSTdRVUZEZWtVc1kwRkJUU3hEUVVGRExHRkJRV0VzWVVGQllTeFZRVUZWTEVsQlFVazdRVUZETDBNc1kwRkJUU3hEUVVGRExHVkJRV1VzVjBGQlZ5eFhRVUZYUXl4bFFVRmpMRWxCUVVrN1FVRkRPVVFzWTBGQlRTeHBRa0ZCYVVJc2FVSkJRV2xDTEdGQlFXRXNWVUZCVlR0QlFVTXZSQ3hqUVVGTkxHbENRVUZwUWl4cFFrRkJhVUlzWVVGQllTeFZRVUZWTzBGQlF5OUVMR05CUVUwc1YwRkJWeXcwUWtGQk5FSXNWVUZCVlN4RFFVRkRMRVZCUVVVc1MwRkJTeXhOUVVGTk8wRkJRM0pGTEdOQlFVMHNZMEZCWXl4TlFVRk5PMEZCUTNoQ0xHZENRVUZOTEZGQlFWRXNWVUZCVlR0QlFVTjRRaXhuUWtGQlRTeFpRVUZaTEdOQlFXTTdRVUZEYUVNc1kwRkJTU3hUUVVGVExHbENRVUZwUWl4VlFVRlZMRXRCUVVzc1QwRkJUenRCUVVOd1JDeHRRa0ZCVXl4SlFVRkpMRkZCUVZFc1NVRkJTU3hIUVVGSExFbEJRVWtzV1VGQldTeEhRVUZITEV0QlFVc3NSMEZCUnl4TFFVRkxMRXRCUVVzN1FVRkRMMFFzYzBKQlFWVTdRVUZCUVN4WFFVRmpMRU5CUVVNc1QwRkJUeXhaUVVGWkxFbEJRVWtzWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hqUVVGak8wRkJRVUVzVlVGRGRrWTdRVUZEUVN4NVFrRkJaU3hSUVVGUkxFOUJRVXM3UVVGRE1VSXNjMEpCUVZVN1FVRkJRU3hYUVVGakxFTkJRVU03UVVGQlFTeFZRVU16UWl4RFFVRkRPMEZCUTBRc2IwSkJRVlU3UVVGQlFTeFhRVUZqTEZGQlFWRXNRMEZCUXp0QlFVRkJMRGhDUVVOWUxGRkJRVkVzUTBGQlF6dEJRVU12UWl4cFFrRkJUenRCUVVGQkxGRkJRMVE3UVVGRFFTeGpRVUZOTEdOQlFXTXNUVUZCVFR0QlFVTjRRaXhuUWtGQlRTeFJRVUZSTEZWQlFWVTdRVUZEZUVJc1owSkJRVTBzV1VGQldTeGpRVUZqTzBGQlEyaERMR05CUVVrc1UwRkJVeXhwUWtGQmFVSXNWVUZCVlN4TFFVRkxMRTlCUVU4N1FVRkRjRVFzYlVKQlFWTXNTVUZCU1N4UlFVRlJMRWxCUVVrc1IwRkJSeXhKUVVGSkxGbEJRVmtzUjBGQlJ5eExRVUZMTEVkQlFVY3NTMEZCU3l4TFFVRkxPMEZCUXk5RUxITkNRVUZWTzBGQlFVRXNWMEZCWXl4RFFVRkRMRTlCUVU4c1dVRkJXU3hKUVVGSkxHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1kwRkJZenRCUVVGQkxGVkJRM1pHTzBGQlEwRXNlVUpCUVdVc1VVRkJVU3hQUVVGTE8wRkJRekZDTEhOQ1FVRlZPMEZCUVVFc1YwRkJZeXhEUVVGRE8wRkJRVUVzVlVGRE0wSXNRMEZCUXp0QlFVTkVMRzlDUVVGVk8wRkJRVUVzVjBGQll5eFJRVUZSTEVOQlFVTTdRVUZCUVN3NFFrRkRXQ3hSUVVGUkxFTkJRVU03UVVGREwwSXNhVUpCUVU4N1FVRkJRU3hSUVVOVU8wRkJRMEVzWTBGQlRTeFRRVUZUTzBGQlFVRXNhMFZCUXpaRExHTkJRV01zUzBGQlN5eFBRVUZQTEZGQlEyeEdMRmxCUVZrc1YwRkJWeXhSUVVGUkxFTkJRVU03UVVGQlFTeHZRa0ZEZEVJc1dVRkJXU3hYUVVGWExGRkJRVkVzUTBGQlF6dEJRVUZCTERCQ1FVTXhRaXhUUVVGVE8wRkJRVUU3UVVGQlFUdEJRVUZCTEZWQlIzcENMRmxCUVZrc1EwRkJRenRCUVVGQkxHdENRVU5NTEZWQlFWVXNZVUZCWVN4VlFVRlZMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEd0RlFVdGpMR05CUVdNc1MwRkJTeXhQUVVGUExGRkJRMnhHTEZsQlFWa3NWMEZCVnl4UlFVRlJMRU5CUVVNN1FVRkJRU3h2UWtGRGRFSXNXVUZCV1N4WFFVRlhMRkZCUVZFc1EwRkJRenRCUVVGQkxEQkNRVU14UWl4VFFVRlRPMEZCUVVFN1FVRkJRVHRCUVVGQkxGVkJSM3BDTEZsQlFWa3NRMEZCUXp0QlFVRkJMR3RDUVVOTUxGVkJRVlVzWVVGQllTeFZRVUZWTEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxEWkVRVXRUTEZsQlFWa3NWMEZCVnl4UlFVRlJMRU5CUVVNN1FVRkJRU3d3UWtGRGJrVXNVMEZCVXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxGVkJTM3BDTEZWQlEwa3NiVUpCUVcxQ0xHbENRVUZwUWl4blFrRkJaMElzUjBGQlJ5eFpRVUZaTEZkQlFWY3NVVUZCVVN4RFFVRkRMR0ZCUVdFc1RVRkRhRVVzUlVGQmMwTTdRVUZCUVN4VlFVTTVSU3hsUVVGbE8wRkJRVUVzVlVGRFprRXNaMEpCUVdVc1lVRkJZU3h4UWtGQmNVSXNUMEZCVHl4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJTVGRFTEdWQlFVODdRVUZCUVN4TlFVTlVPMEZCUlVjc1RVRkJUU3d3UWtGRFZDeERRVUZETEZGQlFTdENMSE5DUVVGdlJDeGhRVU51Uml4eFFrRkRRU3hwUWtGQmFVSXNWVUZCZVVRN1FVRkRla1VzWTBGQlRTeFRRVUZUTEU5QlFVOHNRMEZCUXl4RlFVRkZPMEZCUTNwQ0xHTkJRVTBzVTBGQlV5eFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVTjZRaXhqUVVGTkxHRkJRV0VzVDBGQlR5eE5RVUZOTEVkQlFVY3NSVUZCUlR0QlFVTnlReXhqUVVGTkxHRkJRV0VzVDBGQlR5eE5RVUZOTEVkQlFVY3NSVUZCUlR0QlFVTnlReXhqUVVGTkxGbEJRVmtzYzBKQlFYTkNMRzlDUVVGdlFpeE5RVUZOTEVkQlFVY3NSVUZCUlN4SlFVRkpMRmxCUVZrc1RVRkJUU3hIUVVGSExFVkJRVVU3UVVGRGJFY3NZMEZCVFN4WlFVRlpMRlZCUVZVc1MwRkJTeXhUUVVGVE8wRkJRekZETEdOQlFVMHNXVUZCV1N4UFFVRlBMRTlCUVU4c1UwRkJVeXhEUVVGRE8wRkJRekZETEdOQlFVMHNWMEZCVnl4UFFVRlBMRTlCUVU4c1UwRkJVeXhEUVVGRE8wRkJRM3BETEdOQlFVMHNXVUZCV1N4UFFVRlBMRTlCUVU4c1UwRkJVeXhEUVVGRE8wRkJRekZETEdOQlFVMHNVMEZCVXl4WFFVRlhMRTFCUVUwc1MwRkJTeXhaUVVGWkxFMUJRVTA3UVVGSGRrUXNZMEZCVFN4dlFrRkJiMElzWVVGQllTeEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzBGQlF5OUVMR05CUVUwc1owSkJRVEJETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNN1FVRkRlRVFzWTBGQlRTeFhRVUZYTzBGQlFVRXNWVUZEWml4TFFVRkxMRXRCUVVzc1dVRkJXU3hqUVVGakxFTkJRVU1zU1VGQlNTeHJRa0ZCYTBJc1EwRkJReXhEUVVGRE8wRkJRVUVzVlVGRE4wUXNTMEZCU3l4TFFVRkxMRmxCUVZrc1kwRkJZeXhEUVVGRExFbEJRVWtzYTBKQlFXdENMRU5CUVVNc1EwRkJRenRCUVVGQkxGVkJRemRFTEV0QlFVc3NTMEZCU3l4WlFVRlpMR05CUVdNc1EwRkJReXhKUVVGSkxHdENRVUZyUWl4RFFVRkRMRU5CUVVNN1FVRkJRU3hSUVVNdlJEdEJRVVZCTEdOQlFVMHNZVUZCWVN4VFFVRlRMRWxCUVVrN1FVRkRhRU1zWTBGQlRTeGhRVUZoTEVOQlFVTXNSMEZCUnl4WlFVRlpMRmRCUVZjc1YwRkJWeXhWUVVGVk8wRkJRMjVGTEdOQlFVMHNVVUZCVVN4WFFVRlhPMEZCUTNwQ0xHTkJRVTBzWVVGQllTeERRVUZETEVkQlFVY3NXVUZCV1N4VlFVRlZMRmxCUVZrc1ZVRkJWVHRCUVVOdVJTeGpRVUZOTEZGQlFWRXNWMEZCVnp0QlFVTjZRaXhqUVVGTkxHdENRVUZyUWl4RFFVRkRMRmRCUVZjc1YwRkJWeXhaUVVGWkxGVkJRVlU3UVVGRGNrVXNZMEZCVFN4clFrRkJiME03UVVGQlFTeFZRVU40UXl4RlFVRkRMSEZDUVVGelFpeE5RVUZOTEZWQlFWTTdRVUZCUVN4VlFVRkhMRVZCUVVNc2NVSkJRWE5DTEUxQlFVMHNWVUZCVXp0QlFVRkJMRlZCUXk5RkxFVkJRVU1zY1VKQlFYTkNMRTFCUVUwc1UwRkJVVHRCUVVGQkxGRkJRM1pETzBGQlEwRXNjVU5CUVRaQ0xITkNRVUZ6UWl4bFFVRmxPMEZCUTJ4RkxIZENRVUZuUWl4TFFVRkxMRWRCUVVjc01rSkJRVEpDTEZkQlFWY3NXVUZCV1N4VlFVRlZMRU5CUVVNN1FVRkRja1lzWTBGQlRTeHZRa0ZCZDBRc1EwRkJReXhSUVVGUkxFMUJRVTA3UVVGRk4wVXNZMEZCVFN4VlFVRlZMRTlCUVU4c1UwRkJVenRCUVVOb1F5eFpRVUZKTEZOQlFWTTdRVUZEV0N3d1FrRkJaMElzUzBGQlN5eEhRVUZITERKQ1FVRXlRaXhQUVVGUExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTTdRVUZEYkVVc05FSkJRV3RDTEV0QlFVc3NUVUZCVFR0QlFVRkJMRkZCUXk5Q08wRkJRMEVzZDBKQlFXZENMRXRCUVVzc1IwRkJSeXd5UWtGQk1rSXNaVUZCWlN4RFFVRkRPMEZCUlc1RkxHTkJRVTBzYTBKQlFXdENMRU5CUVVNc2FVSkJRU3RDTzBGQlEzUkVMR2RDUVVGTkxGbEJRVmtzVlVGQlZUdEJRVU0xUWl4blFrRkJUU3haUVVGWkxHbENRVUZwUWl4aFFVRmhMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzVjBGQlZ5eERRVUZETzBGQlEyaEdMR2RDUVVGTkxGZEJRVmNzTkVKQlFUUkNMRTlCUVU4c1EwRkJReXhGUVVGRkxGRkJRVkU3UVVGRkwwUXNaMEpCUVUwc1NVRkJTU3hqUVVGakxFdEJRVXNzVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVlN4UFFVRlBMRlZCUVZVN1FVRkRiRVVzWjBKQlFVMHNTVUZCU1N4alFVRmpMRXRCUVVzc1QwRkJUeXhEUVVGRExFVkJRVVVzVlVGQlZTeFBRVUZQTEZWQlFWVTdRVUZEYkVVc1owSkJRVTBzVTBGQlV5eGxRVUZsTEZWQlFWVXNUMEZCVHl4RFFVRkRMRVZCUVVVc1ZVRkJWU3huUWtGQlowSXNVVUZCVVN4VlFVRlZPMEZCUXpsR0xHZENRVUZOTEdsQ1FVRnBRaXhEUVVGRExFZEJRVWNzUTBGQlF6dEJRVU0xUWl4alFVRkpMRk5CUVZNN1FVRkRXQ3hyUWtGQlRTeHBRa0ZCYVVJc2FVSkJRV2xDTEdGQlFXRTdRVUZEY2tRc01rSkJRV1VzUzBGQlN5eGpRVUZqTEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEZGQlFWRXNZMEZCWXl4RFFVRkRPMEZCUVVFc1ZVRkRkRWM3UVVGRFFTeG5Ra0ZCVFN4WFFVTkdMRU5CUVVNc1JVRkJReXhOUVVGTkxHVkJRV1VzVFVGQlRTeE5RVUZMTEVkQlFVY3NSVUZCUXl4TlFVRk5MR1ZCUVdVc1RVRkJUU3hOUVVGTExFZEJRVWNzUlVGQlF5eE5RVUZOTEdGQlFXRXNUVUZCVFN4TlFVRkxMRU5CUVVNN1FVRkROMGNzYlVOQlFYbENMSE5DUVVGelFpeFJRVUZSTzBGQlEzWkVMR2RDUVVGTkxGZEJRVmNzTkVKQlFUUkNMRTlCUVU4c1MwRkJTeXhOUVVGTk8wRkJReTlFTEdkQ1FVRk5MR3RDUVVGclFpeHhRa0ZCY1VJc2MwSkJRWE5DTEU5QlFVOHNTMEZCU3l4UFFVRlBMRkZCUVZFN1FVRkRPVVlzWjBKQlFVMHNiVUpCUVcxQ08wRkJRVUVzV1VGRGNrSTdRVUZCUVN4WlFVRlpPMEZCUVVFc1dVRkJVenRCUVVGQkxGbEJRV2xDTEVOQlFVTXNWMEZCVnl4SFFVRkhMRWRCUVVjc1RVRkJUVHRCUVVGQkxGbEJRVWNzUTBGQlF5eFpRVUZaTEZsQlFWa3NVMEZCVXp0QlFVRkJMRmxCUTI1SE8wRkJRVUVzVlVGQll6dEJRVU5zUWl4cFFrRkJUenRCUVVGQkxFbEJSVWdzWVVGQllTeHBRa0ZCYVVJc1VVRkJVU3hGUVVGRkxEQkNRVUV3UWl4VFFVRlRMRVZCUVVVN1FVRkJRU3haUVVONlJTeEhRVUZITzBGQlFVRXNXVUZCWjBJN1FVRkJRU3hWUVVGTkxFTkJRVU03UVVGQlFTeEpRVU4wUXl4blFrRkJaMEk3UVVGQlFTeEpRVVZTTEZOQlFWTXNNa0pCUVRKQ0xHMUNRVUZ0UWl4bFFVRmxMRlZCUVZVc1UwRkJVeXhKUVVOb1JpeDFRa0ZCZFVJc2JVSkJRVzFDTEdWQlFXVXNWVUZCVlN4VFFVRlRMRU5CUVVNN1FVRkJRVHRCUVVGQkxGRkJSVFZHTzBGQlEwRXNaVUZCVHp0QlFVRkJMRlZCUTB3c1RVRkJUVHRCUVVGQkxGVkJRMDRzWVVGQllUdEJRVUZCTEZsQlExZ3NUVUZCVFN4SFFVRkhMR2xDUVVGcFFpeEpRVUZKTEhGQ1FVRnhRaXhWUVVGVkxFbEJRVWtzVFVGQlRTeEpRVUZKTEdOQlFXTTdRVUZCUVN4WlFVTjZSanRCUVVGQkxGVkJRMFk3UVVGQlFTeFZRVU5CTEZsQlFWa3NUMEZCVHp0QlFVRkJMRmxCUTJwQ0xGTkJRVk1zUTBGQlF5eEZRVUZETEUxQlFVMHNZVUZCWVN4VlFVRlZMRTlCUVU4c1EwRkJReXhGUVVGRkxGTkJRVkVzUTBGQlF6dEJRVUZCTEZsQlF6TkVMR1ZCUVdVc1JVRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eEhRVUZITEVkQlFVY3NVMEZCVXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhUUVVGVExFTkJRVU1zUlVGQlF6dEJRVUZCTEZsQlF6bEVPMEZCUVVFc1ZVRkRSanRCUVVGQkxGVkJRMEU3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVRkJPMEZCUVVFN096dEJRemRtU2l4TlFXbERUU3h4UWtFMFNFODdRVUUzU21JN1FVRkJRVHRCUVVGQk8wRkJjVUpCTzBGQlEwRTdRVUZIUVR0QlFVVkJPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJSVUVzVFVGQlRTeHpRa0ZEUml4RFFVRkRMR2RDUVVGNVFpeFhRVUZ2UWl4WFFVRnZRaXhWUVVGdFFpeFZRVUZWTEU5QlF6bEdMRmxCUVRSQ0xHOUNRVUZ2UWl4SFFVRkhMRzlDUVVGdlFpeEhRVUZITEcxQ1FVRnRRaXhIUVVNM1JpeFhRVUZYTEZWQlFXdENPMEZCUXpWQ0xHTkJRVTBzWTBGQll5eERRVUZEUXl4elFrRkJOa0k3UVVGRGFFUXNhMEpCUVZGQkxHMUNRVUZyUWp0QlFVRkJMRmxCUTNoQ0xFdEJRVXM3UVVGRFNDeHhRa0ZCVHp0QlFVRkJMRmxCUTFRc1MwRkJTenRCUVVOSUxIRkNRVUZQTEd0Q1FVRnJRaXhSUVVGUk8wRkJRVUVzV1VGRGJrTXNTMEZCU3p0QlFVTklMSEZDUVVGUE8wRkJRVUVzV1VGRFZEdEJRVU5GTEc5Q1FVRk5MRWxCUVVrc1RVRkJUU3h2UWtGQmIwSkJMR2xDUVVGblFpeHZRa0ZCYjBJN1FVRkJRU3hWUVVNMVJUdEJRVUZCTEZGQlEwWTdRVUZEUVN4alFVRk5MR05CUVdNc1EwRkJRMEVzYzBKQlFUWkNPMEZCUTJoRUxHdENRVUZSUVN4dFFrRkJhMEk3UVVGQlFTeFpRVU40UWl4TFFVRkxPMEZCUTBnc2NVSkJRVTg3UVVGQlFTeFpRVU5VTEV0QlFVczdRVUZEU0N4eFFrRkJUenRCUVVGQkxGbEJRMVE3UVVGRFJTeHZRa0ZCVFN4SlFVRkpMRTFCUVUwc2IwSkJRVzlDUVN4cFFrRkJaMElzYjBKQlFXOUNPMEZCUVVFc1ZVRkROVVU3UVVGQlFTeFJRVU5HTzBGQlEwRXNZMEZCVFN4blFrRkJaMElzYVVKQlFXbENPMEZCUVVFN1FVRkJRU3hSUVVkQk8wRkJRVUU3UVVGQlFUdEJRVWwyUXl4alFVRk5MR3RDUVVGclFpeHBRa0ZCYVVJN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNVVUZQUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVkY2UXl4alFVRk5MRlZCUVZVc2FVSkJRV2xDTERaQ1FVRTJRanRCUVVNNVJDeGpRVUZOTEZOQlFWTXNhVUpCUVdsQ0xEWkNRVUUyUWp0QlFVTTNSQ3hqUVVGTkxFMUJRVTBzYVVKQlFXbENMRkZCUVZFN1FVRkRja01zWTBGQlRTeE5RVUZOTEdsQ1FVRnBRaXhSUVVGUk8wRkJRM0pETEdOQlFVMHNaVUZCWlR0QlFVRkJPMEZCUVVFc2NVSkJSVTRzYVVKQlFXbENMR3REUVVGclF5d3JRa0ZCSzBJN1FVRkJRU3h0UWtGRGNFWXNSMEZCUnp0QlFVRkJMRzFDUVVOSUxFZEJRVWM3UVVGQlFUdEJRVUZCTEdsQ1FVVk1MRWRCUVVjN1FVRkJRU3hwUWtGRFNDeEhRVUZITzBGQlFVRTdRVUZCUVR0QlFVRkJMR2RDUVVkS0xFZEJRVWM3UVVGQlFTeHZRa0ZEUXl4WlFVRlpMRzFDUVVGdFFpeFJRVUZSTEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUVVFc09FSkJSemxDTEU5QlFVOHNNa0pCUVRKQ0xFMUJRVTA3UVVGQlFTeFJRVU01UkN4aFFVRmhPMEZCUVVFN1FVRkJRU3hSUVVWaUxGbEJRVmtzYVVKQlFXbENMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJTV2hETEdOQlFVMHNWVUZCVlN4cFFrRkJhMElzWVVGQllTeFhRVUZYTzBGQlFVRXNkMEpCUTNoRExHbENRVUZwUWp0QlFVRkJMRTFCUTI1RExGbEJRVmtzUzBGRE9FTTdRVUZCUVN4M1FrRkRlRU1zYVVKQlFXbENPMEZCUVVFN1FVRkJRU3hSUVVWcVF5eFpRVUZaTzBGQlFVRTdRVUZCUVN4aFFVVlFMRmxCUVZrc2JVSkJRVzFDTEZGQlFWRXNRMEZCUXl4WFFVTmlMRmxCUVZrc1dVRkJXVHRCUVVGQkxIZENRVU40UXl4cFFrRkJhVUk3UVVGQlFTeE5RVU51UXl4WlFVRlpMRXRCUXpoRE8wRkJRVUVzZDBKQlEzaERMR2xDUVVGcFFqdEJRVUZCTzBGQlFVRXNVVUZGYWtNc1dVRkJXVHRCUVVGQk8wRkJRVUVzWVVGRlVDeFpRVUZaTEcxQ1FVRnRRaXhSUVVGUkxFTkJRVU03UVVGRkwwTXNZMEZCVFN4VlFVRlZMRWRCUVVjc1dVRkJXU3hwUWtGQmFVSXNRMEZCUXp0QlFVVnFSQ3hqUVVGTkxGVkJRVlVzV1VGQldTeHJRa0ZCYTBJc1VVRkJVVHRCUVVOMFJDeGpRVUZOTEZGQlEwWXNhVUpCUVdsQ0xGbEJRVmtzYlVKQlFXMUNMRkZCUVZFc1NVRkJTU3haUVVGWkxHMUNRVUZ0UWl4UlFVRlJPMEZCUTNaSExHTkJRVTBzVVVGRFJpeHBRa0ZCYVVJc1dVRkJXU3h0UWtGQmJVSXNVVUZCVVN4SlFVRkpMRmxCUVZrc2JVSkJRVzFDTEZGQlFWRTdRVUZEZGtjc1kwRkJUU3hyUWtGQmEwSXNjVUpCUVhGQ0xGbEJRVmtzVTBGQlV5eFJRVUZSTzBGQlF6RkZMR05CUVUwc1YwRkJWenRCUVVGQkxIbEVRVU5yUXl4TFFVRkxPMEZCUVVFc1VVRkRkRVFzYVVKQlFXbENMRlZCUVZVc1QwRkJUenRCUVVGQk8wRkJRVUU3UVVGQlFTeDVSRUZIWlN4TFFVRkxPMEZCUVVFc1VVRkRkRVFzYVVKQlFXbENMRlZCUVZVc1QwRkJUenRCUVVGQk8wRkJRVUU3UVVGQlFTeG5SVUZIYzBJc1QwRkJUenRCUVVGQkxEQkNRVU0zUXl4blFrRkJaMEk3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4MVFrRkpia0lzYVVKQlFXbENMR3REUVVGclF5d3JRa0ZCSzBJN1FVRkJRU3hSUVVOcVJ5eGxRVUZsTzBGQlFVRXNVVUZEWml4WlFVRlpMRTlCUVU4c1EwRkJRenRCUVVGQkxGRkJRM0JDTEdWQlFXVTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkpha0lzWlVGQlR6dEJRVUZCTEUxQlExUTdRVUZGUnl4TlFVRk5MR2REUVVOVUxFTkJRVU1zVVVGQkswSXNXVUZCTkVJc1lVRkJaME1zVjBGRE0wWXNWMEZCYlVJc1ZVRkJhMElzVTBGQmEwSXNPRUpCUVc5RU8wRkJRekZITEdOQlFVMHNhVUpCUVdsQ0xGZEJRVmNzVjBGQlZ6dEJRVU0zUXl4alFVRk5MR0ZCUVdFc2FVSkJRV2xDTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhKUVVGSkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXp0QlFVTjRSU3hqUVVGTkxGbEJRVmtzV1VGQldTeERRVUZETzBGQlF5OUNMR05CUVUwc1YwRkJWeXhwUWtGQmFVSXNXVUZCV1N4RFFVRkRMRWxCUVVrc1dVRkJXU3hEUVVGRE8wRkJRMmhGTEdOQlFVMHNXVUZCV1N4cFFrRkJhVUlzV1VGQldTeERRVUZETEVsQlFVa3NXVUZCV1N4RFFVRkRPMEZCUTJwRkxHTkJRVTBzWTBGQll5eHBRa0ZCYVVJc1dVRkJXU3hEUVVGRExFbEJRVWtzV1VGQldTeERRVUZETzBGQlJXNUZMR05CUVUwc1UwRkJVeXh0UWtGQmJVSXNZVUZCWVN4TlFVRk5MRXRCUVVzc1lVRkJZU3hOUVVGTkxFMUJRVTBzWTBGQll5eE5RVUZOTzBGQlIzWkhMR05CUVUwc1dVRkJXU3hwUWtGQmFVSXNZMEZCWXl4WFFVRlhPMEZCUXpWRUxHTkJRVTBzV1VGQldTeHBRa0ZCYVVJc1YwRkJWeXhaUVVGWk8wRkJRekZFTEdOQlFVMHNaMEpCUVRCRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZEZUVRc1kwRkJUU3h2UWtGQmIwSXNZVUZCWVN4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMEZCUXk5RUxHTkJRVTBzVjBGQlZ6dEJRVUZCTEZWQlEyWXNTMEZCU3l4TFFVRkxMRmxCUVZrc1kwRkJZeXhEUVVGRExFbEJRVWtzYTBKQlFXdENMRU5CUVVNc1EwRkJRenRCUVVGQkxGVkJRemRFTEV0QlFVc3NTMEZCU3l4WlFVRlpMR05CUVdNc1EwRkJReXhKUVVGSkxHdENRVUZyUWl4RFFVRkRMRU5CUVVNN1FVRkJRU3hWUVVNM1JDeExRVUZMTEV0QlFVc3NXVUZCV1N4alFVRmpMRU5CUVVNc1NVRkJTU3hyUWtGQmEwSXNRMEZCUXl4RFFVRkRPMEZCUVVFc1VVRkRMMFE3UVVGRlFTeHJRa0ZCVlN4WFFVRlhMRTFCUVUwc2FVTkJRV2xETEZGQlFWRXNSVUZCUlR0QlFVVjBSU3hqUVVGTkxHMUNRVUZ0UWl4VFFVRlZMR3RDUVVGclFpeGhRVUZoTEUxQlFVMHNTVUZCU1N4SlFVRkpMRWxCUVVzN1FVRkRja1lzWTBGQlRTeGhRVUZoTEdOQlFXTXNRMEZCUXl4SlFVRkpMR3RDUVVGclFpeERRVUZETzBGQlEzcEVMR05CUVUwc1lVRkJZU3hqUVVGakxFTkJRVU1zU1VGQlNTeHJRa0ZCYTBJc1EwRkJRenRCUVVONlJDeGpRVUZOTEZsQlFWa3NTMEZCU3l4SlFVRkpMR05CUVdNc1EwRkJReXhKUVVGSkxHdENRVUZyUWl4alFVRmpMRU5CUVVNc1EwRkJRenRCUVVOb1JpeGpRVUZOTEZsQlFWa3NXVUZCV1N4bFFVRmxPMEZCUXpkRExHTkJRVTBzV1VGQldTeFpRVUZaTEdWQlFXVTdRVUZETjBNc1kwRkJUU3hYUVVGWExGZEJRVmNzWTBGQll6dEJRVU14UXl4alFVRk5MR1ZCUVdVc1UwRkJVeXhEUVVGRExHdENRVUZyUWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzBGQlJXcEZMR05CUVUwc2EwSkJRVzlETzBGQlFVRXNWVUZEZUVNc1JVRkJReXh4UWtGQmMwSXNUVUZCVFN4VlFVRlRPMEZCUVVFc1ZVRkJSeXhGUVVGRExIRkNRVUZ6UWl4TlFVRk5MRlZCUVZNN1FVRkJRU3hWUVVNdlJTeEZRVUZETEhGQ1FVRnpRaXhOUVVGTkxGTkJRVkU3UVVGQlFTeFZRVUZITEVWQlFVTXNjVUpCUVhOQ0xFMUJRVTBzUTBGQlF5eFhRVUZYTEV0QlFVc3NRMEZCUXl4SFFVRkhMRmRCUVZjc1MwRkJTeXhEUVVGRExFTkJRVU1zUlVGQlF6dEJRVUZCTEZWQlF6ZEhMRVZCUVVNc2NVSkJRWE5DTEUxQlFVMHNWMEZCVnl4UlFVRlBPMEZCUVVFc1ZVRkJSeXhGUVVGRExIRkNRVUZ6UWl4TlFVRk5MRmRCUVZjc1ZVRkJVenRCUVVGQkxGRkJRM0pITzBGQlEwRXNjVU5CUVRaQ0xGbEJRVmtzWlVGQlpUdEJRVU40UkN4M1FrRkJaMElzUzBGQlN5eEhRVUZITERKQ1FVRXlRaXhQUVVGUExFTkJRVU1zUlVGQlJTeE5RVUZOTEU5QlFVOHNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJRenRCUVVOc1JpeGpRVUZOTEc5Q1FVRjNSQ3hEUVVGRExGRkJRVkVzVFVGQlRUdEJRVU0zUlN4WlFVRkpMRk5CUVZNN1FVRkRXQ3d3UWtGQlowSXNTMEZCU3l4SFFVRkhMREpDUVVFeVFpeFBRVUZQTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNN1FVRkRiRVVzTkVKQlFXdENMRXRCUVVzc1RVRkJUVHRCUVVGQkxGRkJReTlDTzBGQlEwRXNkMEpCUVdkQ0xFdEJRVXNzUjBGQlJ5d3lRa0ZCTWtJc1YwRkJWeXhEUVVGRE8wRkJSUzlFTEdOQlFVMHNhMEpCUVd0Q0xFTkJRVU1zYVVKQlFTdENPMEZCUTNSRUxHZENRVUZOTEZkQlFUaENPMEZCUVVFc1dVRkRiRU1zUlVGQlF5eE5RVUZOTEdWQlFXVXNUVUZCVFN4TlFVRkxPMEZCUVVFc1dVRkJSeXhGUVVGRExFMUJRVTBzWlVGQlpTeE5RVUZOTEUxQlFVczdRVUZCUVN4WlFVRkhMRVZCUVVNc1RVRkJUU3hoUVVGaExFMUJRVTBzVFVGQlN6dEJRVUZCTEZsQlEzWkhMRVZCUVVNc1RVRkJUU3hQUVVGUExFMUJRVTBzVDBGQlR5eFJRVUZSTEVWQlFVTTdRVUZCUVN4WlFVRkhMRVZCUVVNc1RVRkJUU3hWUVVGVkxFMUJRVTBzVDBGQlR5eFJRVUZSTEVWQlFVTTdRVUZCUVN4WlFVTTVSU3hGUVVGRExFMUJRVTBzV1VGQldTeE5RVUZOTEU5QlFVOHNVVUZCVVN4RlFVRkRPMEZCUVVFc1ZVRkRNME03UVVGRFFTeHRRMEZCZVVJc1dVRkJXU3hSUVVGUk8wRkJSemRETEdkQ1FVRk5MR0ZCUVdFc1UwRkJVeXhKUVVGSk8wRkJRMmhETEdkQ1FVRk5MRWxCUVVrc05FSkJRVFJDTEU5QlFVOHNRMEZCUXl4RlFVRkZMRkZCUVZFN1FVRkRlRVFzWTBGQlNTeHRRa0ZCYlVJN1FVRkJRU3h4UkVGRGMwSXNVMEZCVXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJRVUVzT0VKQlEyaEVMRk5CUVZNc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF6dEJRVUZCTzBGQlFVRXNOa1ZCUlhOQ0xGTkJRVk1zVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXp0QlFVRkJPMEZCUVVFc2NVTkJSV3BGTEZOQlFWTXNVVUZCVVN4RlFVRkZPMEZCUVVFN1FVRkZhRVFzWjBKQlFVMHNTVUZCU1R0QlFVRkJMRmxCUTA0N1FVRkJRU3haUVVGTExFOUJRVThzUTBGQlF5eEZRVUZGTzBGQlFVRXNXVUZCVlN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTE8wRkJRVUVzV1VGQlVTeHhRa0ZCY1VJc1NVRkJTU3hKUVVGSk8wRkJRVUVzVlVGQlowSTdRVUZEYWtjc1owSkJRVTBzU1VGQlNTeGpRVUZqTEV0QlFVc3NUMEZCVHl4RFFVRkRMRVZCUVVVc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEZGQlFWRXNWVUZCVlR0QlFVTnNSaXhuUWtGQlRTeHBRa0ZCYVVJc1EwRkJReXhIUVVGSExFTkJRVU03UVVGRE5VSXNaMEpCUVUwc1UwRkJVeXhsUVVGbExGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVlN4WlFVRlpMRkZCUVZFc1ZVRkJWVHRCUVVNeFJpeGpRVUZKTEZOQlFWTTdRVUZEV0N4clFrRkJUU3hQUVVGUExHTkJRV01zVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN4VlFVRlZMRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzVVVGQlVTeFZRVUZWTzBGQlEzaEdMREpDUVVGbExFdEJRVXNzU1VGQlNUdEJRVU40UWl4blEwRkJiMEk3UVVGQlFTd3dSRUZETkVJc1UwRkJVeXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlFVRXNLMEpCUTNCRUxHbENRVUZwUWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhUUVVGVExGRkJRVkVzUlVGQlJUdEJRVUZCTzBGQlFVRXNWVUZGZGtVN1FVRkZRU3hwUWtGQlR6dEJRVUZCTEZWQlEwd3NZMEZCWXl4NVFrRkJlVUlzUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRlZCU1hoRExHRkJRV0VzYVVKQlFXbENMRkZCUVZFc1JVRkJSU3hwUWtGQmFVSXNSMEZCUnl4blFrRkJaMElzVFVGQlRTeERRVUZETzBGQlFVRXNWVUZEYmtZc1owSkJRV2RDTzBGQlFVRXNWVUZGWkR0QlFVRkJMRmxCUTBrN1FVRkJRU3haUVVGblFqdEJRVUZCTEZsQlFWYzdRVUZCUVN4WlFVRlhPMEZCUVVFc1dVRkJWVHRCUVVGQkxGbEJRVk03UVVGQlFTeFpRVUZaTEdGQlFXRXNRMEZCUXp0QlFVRkJMRmxCUVVjc1lVRkJZU3hEUVVGRE8wRkJRVUVzV1VGRGNFY3NZVUZCWVN4RFFVRkRPMEZCUVVFc1dVRkJSenRCUVVGQkxGVkJRVU1zUTBGQlF6dEJRVUZCTEZWQlJYWkNMRk5CUTBrc01rSkJRVEpDTEcxQ1FVRnRRaXhsUVVGbExFZEJRVWNzVVVGQlZ5eERRVUZETEdkQ1FVRm5RaXhUUVVGVExFbEJRM0pITzBGQlFVRXNXVUZEU1R0QlFVRkJMRmxCUVcxQ08wRkJRVUVzV1VGQlpUdEJRVUZCTEZsQlFVYzdRVUZCUVN4WlFVRlhMRU5CUVVNN1FVRkJRU3haUVVGblFqdEJRVUZCTEZsQlFWYzdRVUZCUVN4WlFVRlBPMEZCUVVFc1dVRkRia1k3UVVGQlFTeFZRVUY1UWl4RFFVRkRPMEZCUVVFc1VVRkRlRU03UVVGRFFTeGxRVUZQTzBGQlFVRXNWVUZEVEN4TlFVRk5PMEZCUVVFc1ZVRkRUaXhoUVVGaE8wRkJRVUVzV1VGRFdDeE5RVUZOTEVkQlFVY3NWMEZCVnl4UlFVRlJMRWxCUVVrc1owSkJRV2RDTEVsQlFVa3NUVUZCVFN4SlFVRkpMRk5CUVZNc1NVRkJTU3hUUVVGVExFbEJRVWtzVVVGQlVTeEpRVU0xUml4VlFVRlZMRWxCUVVrc1ZVRkJWU3hKUVVGSkxGTkJRVk03UVVGQlFTeFpRVU42UXp0QlFVRkJMRlZCUTBZN1FVRkJRU3hWUVVOQkxGbEJRVmtzVDBGQlR6dEJRVUZCTEZsQlEycENMRk5CUVZNc1EwRkJReXhGUVVGRExFMUJRVTBzWVVGQllTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRk5CUVZFc1EwRkJRenRCUVVGQkxGbEJRek5FTEdWQlFXVXNSVUZCUXl4SFFVRkhMRk5CUVZNc1EwRkJReXhIUVVGSExFZEJRVWNzVTBGQlV5eERRVUZETEVkQlFVY3NSMEZCUnl4VFFVRlRMRU5CUVVNc1JVRkJRenRCUVVGQkxGbEJRemxFTzBGQlFVRXNWVUZEUmp0QlFVRkJMRlZCUTBFN1FVRkJRU3hSUVVOR08wRkJRVUVzVFVGRFJqdEJRVUZCTzBGQlFVRTdPenRCUXpsUlNpeE5RV2RDWVN3NFFrRjFSMEU3UVVGMlNHSTdRVUZCUVR0QlFVRkJPMEZCUjBFN1FVRkZRVHRCUVVkQk8wRkJRMEU3UVVGRFFUdEJRVTFQTEUxQlFVMHNLMEpCUTFRc1EwRkJReXhSUVVFclFpeFpRVU12UWl3clFrRkJjVVk3UVVGRGNFWXNZMEZCVFN4VlFVRlZMRTlCUVU4c1UwRkJVenRCUVVOb1F5eGpRVUZOTEdOQlFXTXNWVUZCVlN4blEwRkJaME03UVVGRE9VUXNZMEZCVFN4VFFVRlRMRTlCUVU4c1EwRkJReXhGUVVGRk8wRkJRM3BDTEdOQlFVMHNVMEZCVXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRCUVVONlFpeGpRVUZOTEhsQ1FVRjVRaXhQUVVGUExFTkJRVU1zU1VGQlNTeFhRVUZYTzBGQlJYUkVMR05CUVUwc1owSkJRV2RDTEZkQlFWY3NWMEZCVnp0QlFVTTFReXhqUVVGTkxHTkJRV003UVVGQlFTeFZRVU5vUWp0QlFVRkJMRlZCUVZFN1FVRkJRU3hWUVVGUkxGZEJRVmM3UVVGQlFTeFZRVUZYTEZkQlFWYzdRVUZCUVN4VlFVRk5MRmRCUVZjN1FVRkJRU3hWUVVGVE8wRkJRVUVzVVVGQllUdEJRVU0xUml4alFVRk5MR0ZCUVdFc1ZVRkJWU3hMUVVGTExGZEJRVmM3UVVGRk4wTXNZMEZCVFN4clFrRkJiME03UVVGQlFTeFZRVU40UXl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEZkQlFWVTdRVUZCUVN4VlFVRkhMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNWMEZCVnl4VlFVRlRPMEZCUVVFc1ZVRkROMFlzUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hEUVVGRExGZEJRVmNzVVVGQlVTeERRVUZETEVkQlFVY3NWMEZCVnl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRE8wRkJRVUVzVlVGRE5VVXNSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeERRVUZETEZkQlFWY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1YwRkJWeXhMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZETzBGQlFVRXNWVUZEZEVVc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4MVFrRkJjMEk3UVVGQlFTeFJRVU4wUkR0QlFVTkJMSEZEUVVFMlFpeFpRVUZaTEdWQlFXVTdRVUZEZUVRc2QwSkJRV2RDTEV0QlFVc3NSMEZCUnl3eVFrRkJNa0lzVVVGQlVTeE5RVUZOTEVOQlFVTTdRVUZEYkVVc1kwRkJUU3h2UWtGQmQwUXNRMEZCUXl4UlFVRlJMRTFCUVUwN1FVRkROMFVzV1VGQlNTeFRRVUZUTzBGQlExZ3NNRUpCUVdkQ0xFdEJRVXNzUjBGQlJ5d3lRa0ZCTWtJc1QwRkJUeXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETzBGQlEyeEZMRFJDUVVGclFpeExRVUZMTEUxQlFVMDdRVUZCUVN4UlFVTXZRanRCUVVOQkxIZENRVUZuUWl4TFFVRkxMRWRCUVVjc01rSkJRVEpDTEZkQlFWY3NRMEZCUXp0QlFVVXZSQ3hqUVVGTkxHdENRVUZyUWl4RFFVRkRMR2xDUVVFclFqdEJRVU4wUkN4blFrRkJUU3hUUVVGVExHVkJRV1VzVlVGQlZTeFBRVUZQTEVOQlFVTXNSVUZCUlN4VlFVRlZMRmxCUVZrc1RVRkJUVHRCUVVNNVJTeG5Ra0ZCVFN4WFFVRlhMRFJDUVVFMFFpeFBRVUZQTEV0QlFVc3NUVUZCVFR0QlFVTXZSQ3huUWtGQlRTeHJRa0ZCYTBJc2NVSkJRWEZDTEZsQlFWa3NUMEZCVHl4TFFVRkxMRTlCUVU4c1VVRkJVVHRCUVVOd1JpeG5Ra0ZCVFN4SlFVRkpMR05CUVdNc1MwRkJTeXhQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNUVUZCVFR0QlFVTTVSQ3huUWtGQlRTeEpRVUZKTEdOQlFXTXNTMEZCU3l4UFFVRlBMRU5CUVVNc1JVRkJSU3hWUVVGVkxFOUJRVThzVFVGQlRUdEJRVU01UkN4blFrRkJUU3haUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETzBGQlEzWkNMR05CUVVrc1UwRkJVenRCUVVOWUxITkNRVUZWTEV0QlFVc3NZMEZCWXl4TFFVRkxMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4TlFVRk5MRU5CUVVNN1FVRkJRU3hWUVVNNVJUdEJRVVZCTEdkQ1FVRk5MRmRCUVRoQ08wRkJRVUVzV1VGRGJFTXNSVUZCUXl4TlFVRk5MR1ZCUVdVc1RVRkJUU3hOUVVGTE8wRkJRVUVzV1VGQlJ5eEZRVUZETEUxQlFVMHNZVUZCWVN4TlFVRk5MRTlCUVU4c1VVRkJVU3hYUVVGWExGVkJRVlVzVDBGQlRUdEJRVUZCTEZsQlEzaEhMRVZCUVVNc1RVRkJUU3hYUVVGWExFMUJRVTBzVDBGQlR5eFJRVUZSTEVWQlFVTTdRVUZCUVN4WlFVRkhMRVZCUVVNc1RVRkJUU3hSUVVGUkxFMUJRVTBzVDBGQlR5eFJRVUZSTEVWQlFVTTdRVUZCUVN4WlFVTm9SaXhGUVVGRExFMUJRVTBzTmtKQlFUWkNMRTFCUVUwc1RVRkJTenRCUVVGQkxGVkJRMnBFTzBGQlEwRXNiVU5CUVhsQ0xGbEJRVmtzVVVGQlVUdEJRVU0zUXl4cFFrRkJUenRCUVVGQkxFbEJRMWdzWVVGQllTeHBRa0ZCYVVJc1VVRkJVU3hGUVVGRkxHbENRVUZwUWl4SFFVRkhMRmRCUVZjc1RVRkJUU3hEUVVGRE8wRkJRVUU3UVVGQlFTeEpRVVU1UlN4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQkxFMUJRM1JDTEdGQlFXRXNjME5CUVhORExITkNRVUZ6UWl4RFFVRkRPMEZCUVVFN1FVRkJRU3d3UWtGRmRFUXNUMEZCVHl4blFrRkJaMElzV1VGQldTeERRVUZETzBGQlFVRTdRVUZCUVN3NFEwRkZhRUlzWjBKQlFXZENMRWxCUVVrc1EwRkJRenRCUVVGQkxIbEVRVU5XTEdkQ1FVRm5RaXhKUVVGSkxFTkJRVU1zYjBKQlEyeEZMR2RDUVVGblFpeEpRVUZKTEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUVVFc2FVSkJSMmhDTEU5QlFVOHNTMEZCU3l4TFFVRkxMRTFCUVUwc1QwRkJUeXhMUVVGTExFdEJRVXM3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc01FUkJUVU1zWjBKQlFXZENMRWxCUVVrc1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN3d1JFRk5ja0lzWjBKQlFXZENMRWxCUVVrc1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEhWQ1FVdHVSU3huUWtGQlowSXNSVUZCUlN4SlFVRkpMRk5CUVZNc1YwRkJWeXhWUVVGVkxHVkJRV1VzU1VGRGJrUXNSVUZCUlN4SlFVRkpMRk5CUVZNc2FVSkJRV2xDTEZkQlFWY3NVVUZCVVN4RFFVRkRPMEZCUVVFc2RVSkJRM3BFTEVWQlFVVXNTVUZCU1N4clFrRkJhMElzWTBGQll5eFhRVUZYTEZGQlFWRXNRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzVFVGTE0wVXNWMEZCVnp0QlFVRkJMRTFCUTFnc1pVRkJaVHRCUVVGQkxFMUJRMllzVDBGQlR5eFpRVUZaTEdOQlFXTXNUMEZCVHl4RFFVRkRPMEZCUVVFN1FVRkJRU3hSUVVWNlF6dEJRVU5CTEdWQlFVODdRVUZCUVN4VlFVTk1MRTFCUVUwN1FVRkJRU3hWUVVOT0xHRkJRV0VzUlVGQlF5eE5RVUZOTEZkQlFWY3NWVUZCVlN4clFrRkJhVUk3UVVGQlFTeFZRVU14UkN4WlFVRlpMRTlCUVU4N1FVRkJRU3haUVVOcVFpeFRRVUZUTEVOQlFVTTdRVUZCUVN4alFVTlNMRTFCUVUwc05rSkJRVFpDTERKQ1FVRXlRaXhYUVVGWExFbEJRVWs3UVVGQlFTeGpRVU0zUlN4VlFVRlZMRTlCUVU4c1EwRkJReXhGUVVGRk8wRkJRVUVzV1VGRGRFSXNRMEZCUXp0QlFVRkJMRmxCUTBRc1pVRkJaU3hGUVVGRExFZEJRVWNzUzBGQlN6dEJRVUZCTEdOQlFVc3NZVUZCWVR0QlFVRkJPMEZCUVVFc1dVRkJkVUlzUlVGQlF6dEJRVUZCTEZsQlEyeEZPMEZCUVVFc1ZVRkRSanRCUVVGQkxGVkJRMEU3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVVkhMRTFCUVUwc2QwTkJRMVFzUTBGQlF5eFJRVUVyUWl4WlFVRTBRaXhuUWtGQlowUTdRVUZETVVjc1kwRkJUU3hWUVVGVkxFOUJRVThzVTBGQlV6dEJRVU5vUXl4alFVRk5MR0ZCUVdFc2FVSkJRV2xDTEZsQlFWa3NRMEZCUXl4RFFVRkRPMEZCUTJ4RUxHTkJRVTBzWlVGQlpTeHBRa0ZCYVVJc1dVRkJXU3hEUVVGRExFTkJRVU03UVVGRGNFUXNZMEZCVFN4aFFVRmhMRlZCUVZVc1MwRkJTeXhYUVVGWExFbEJRVWtzWVVGQllUdEJRVU01UkN4alFVRk5MRk5CUVZNc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNTVUZCU1N4VlFVRlZPMEZCUTNaSExHTkJRVTBzVTBGQlV5eERRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eEhRVUZITEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhKUVVGSkxGVkJRVlU3UVVGRGRrY3NZMEZCVFN4elFrRkJjMElzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4WlFVRlpMRU5CUVVNc1IwRkJSeXhaUVVGWkxFTkJRVU1zUjBGQlJ5eFpRVUZaTEVOQlFVTXNTVUZCU1N4VlFVRlZPMEZCUlhoSExHTkJRVTBzYTBKQlFXOURPMEZCUVVFc1ZVRkRlRU1zUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hYUVVGVk8wRkJRVUVzVlVGRGVFTXNSVUZCUXl4eFFrRkJjMElzVFVGQlRTeERRVUZETEZkQlFWY3NVVUZCVVN4RFFVRkRMRWRCUVVjc1YwRkJWeXhSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVUZETzBGQlFVRXNWVUZETTBVc1JVRkJReXh4UWtGQmMwSXNUVUZCVFN4RFFVRkRMRmRCUVZjc1MwRkJTeXhEUVVGRExFZEJRVWNzVjBGQlZ5eExRVUZMTEVOQlFVTXNRMEZCUXl4RlFVRkRPMEZCUVVFc1VVRkRka1U3UVVGRFFTeHhRMEZCTmtJc1dVRkJXU3hsUVVGbE8wRkJRM2hFTEhkQ1FVRm5RaXhMUVVGTExFZEJRVWNzTWtKQlFUSkNMRkZCUVZFc1VVRkJVU3h0UWtGQmJVSXNRMEZCUXp0QlFVTjJSaXhqUVVGTkxGZEJRVmNzWlVGQlpTeExRVUZMTEZkQlFWY3NVVUZCVVN4RFFVRkRMRWxCUVVrc1QwRkJUeXhEUVVGRE8wRkJRM0pGTEdOQlFVMHNhMEpCUVd0Q0xFTkJRVU1zYVVKQlFTdENPMEZCUTNSRUxHZENRVUZOTEZOQlFWTXNaVUZCWlN4VlFVRlZMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzYjBKQlFXOUNMRkZCUVZFc1ZVRkJWVHRCUVVOc1J5eG5Ra0ZCVFN4WFFVRlhMRFJDUVVFMFFpeFBRVUZQTEV0QlFVc3NUVUZCVFR0QlFVTXZSQ3huUWtGQlRTeHJRa0ZCYTBJc2NVSkJRWEZDTEZsQlFWa3NUMEZCVHl4TFFVRkxMRTlCUVU4c1VVRkJVVHRCUVVOd1JpeG5Ra0ZCVFN4SlFVRkpMR05CUVdNc1MwRkJTeXhQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNVVUZCVVN4VlFVRlZPMEZCUXpGRkxHZENRVUZOTEVsQlFVa3NZMEZCWXl4TFFVRkxMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzVDBGQlR5eFJRVUZSTEZWQlFWVTdRVUZETVVVc1owSkJRVTBzV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXp0QlFVTjJRaXhqUVVGSkxGTkJRVk03UVVGRFdDeHpRa0ZCVlN4TFFVRkxMR05CUVdNc1MwRkJTeXhQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRTFCUVUwc1ZVRkJWU3hEUVVGRE8wRkJRVUVzVlVGRGJrWTdRVUZEUVN4blFrRkJUU3hqUVVGakxGVkJRVlVzWjBOQlFXZERPMEZCUXpsRUxHZENRVUZOTEZkQlFUaENPMEZCUVVFc1dVRkRiRU1zUlVGQlF5eE5RVUZOTEdWQlFXVXNUVUZCVFN4TlFVRkxPMEZCUVVFc1dVRkRha01zUlVGQlF5eE5RVUZOTEZkQlFWY3NUVUZCVFN4UFFVRlBMRkZCUVZFc1JVRkJRenRCUVVGQkxGbEJRM2hETEVWQlFVTXNUVUZCVFN4UlFVRlJMRTFCUVUwc1QwRkJUeXhSUVVGUkxFVkJRVU03UVVGQlFTeFZRVU4yUXp0QlFVTkJMRzFEUVVGNVFpeFpRVUZaTEZGQlFWRTdRVUZETjBNc2FVSkJRVTg3UVVGQlFTeEpRVU5ZTEdGQlFXRXNhVUpCUVdsQ0xGRkJRVkVzUlVGQlJTeHBRa0ZCYVVJc1IwRkJSeXhYUVVGWExFMUJRVTBzUTBGQlF6dEJRVUZCTEVsQlF6bEZMR0ZCUVdFc1ZVRkJWU3hEUVVGRE8wRkJRVUVzVFVGRGRFSXNZVUZCWVN4elEwRkJjME1zYzBKQlFYTkNMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTdzRRMEZKYkVNc1dVRkJXVHRCUVVGQkxHOURRVU4wUWl4WlFVRlpPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNkMEpCVDNoQ0xFVkJRVVVzUzBGQlN5eExRVUZMTEV0QlFVc3NUMEZCVHp0QlFVRkJMSGRDUVVONFFpeFBRVUZQTEV0QlFVc3NTMEZCU3l4TFFVRkxMRmxCUVZrN1FVRkJRVHRCUVVGQk8wRkJRVUVzT0VOQlIxb3NUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJRVUVzT0VKQlIzcENMRTlCUVU4N1FVRkJRVHRCUVVGQk8wRkJRVUVzTUVKQlIxZ3NSVUZCUlN4SlFVRkpMRk5CUVZNc2FVSkJRV2xDTEdkQ1FVRm5RaXhsUVVGbExFTkJRVU03UVVGQlFUdEJRVUZCTERCQ1FVVm9SU3hGUVVGRkxFdEJRVXNzUzBGQlN6dEJRVUZCTzBGQlFVRTdRVUZCUVN4blJFRkhWU3hQUVVGUExFTkJRVU1zUTBGQlF6dEJRVUZCTEhkQ1FVTnFReXhGUVVGRkxFbEJRVWtzV1VGQldTeFhRVUZYTEV0QlFVc3NaMEpCUVdkQ0xFTkJRVU03UVVGQlFTeHBRMEZETVVNc1dVRkJXVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMREpDUVU5c1FpeFpRVUZaTzBGQlFVRTdRVUZCUVN4UlFVVXZRaXhYUVVGWE8wRkJRVUVzVVVGRFdDeGxRVUZsTzBGQlFVRXNVVUZEWml4UFFVRlBMRWxCUVVrc1UwRkJVeXhQUVVGUExGZEJRVmNzYTBKQlFXdENMRTlCUVU4c1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFTeFJRVWRzUlR0QlFVVkJMR1ZCUVU4N1FVRkJRU3hWUVVOTUxFMUJRVTA3UVVGQlFTeFZRVU5PTEdGQlFXRTdRVUZCUVN4WlFVTllMRTFCUVUwc1IwRkJSeXhYUVVGWExGRkJRVkVzU1VGQlNTeFZRVUZWTEVsQlFVa3NXVUZCV1N4SlFVRkpMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zUTBGQlF5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUVVFc1dVRkRMMFlzYlVKQlFXMUNMRlZCUVZVc1EwRkJReXhSUVVGUkxGRkJRVkVzVFVGQlRTeEpRVUZKTEVOQlFVTXNVVUZCVVN4TlFVRk5PMEZCUVVFc1ZVRkRla1U3UVVGQlFTeFZRVU5CTEZsQlFWa3NUMEZCVHp0QlFVRkJMRmxCUTJwQ0xGTkJRVk1zUTBGQlF5eEZRVUZETEUxQlFVMHNZVUZCWVN4VlFVRlZMRTlCUVU4c1EwRkJReXhGUVVGRkxGTkJRVkVzUTBGQlF6dEJRVUZCTEZsQlF6TkVMR1ZCUVdVc1JVRkJReXhIUVVGSExFdEJRVXM3UVVGQlFTeGpRVUZMTEdGQlFXRTdRVUZCUVR0QlFVRkJMRmxCUVhWQ0xFVkJRVU03UVVGQlFTeFpRVU5zUlR0QlFVRkJMRlZCUTBZN1FVRkJRU3hWUVVOQk8wRkJRVUVzVVVGRFJqdEJRVUZCTEUxQlEwWTdRVUZCUVR0QlFVRkJPenM3UVVOMlRrb3NUVUZaWVN3NFFrRTJTVkJETEdsQ1FWVlBPMEZCYmt0aU8wRkJRVUU3UVVGQlFUdEJRVWRCTzBGQlJVRTdRVUZIUVR0QlFVTkJPMEZCUTBFN1FVRkZUeXhOUVVGTkxDdENRVU5VTEVOQlFVTXNVVUZCSzBJc2MwSkJRVzlFTEdGQlEyNUdMSEZDUVVOQkxHbENRVUZwUWl4VlFVRjVSRHRCUVVONlJTeGpRVUZOTEZOQlFWTXNUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkRla0lzWTBGQlRTeFRRVUZUTEU5QlFVOHNRMEZCUXl4RlFVRkZPMEZCUlhwQ0xHTkJRVTBzU1VGQlNTeFBRVUZQTEU5QlFVOHNVMEZCVXl4RFFVRkRPMEZCUTJ4RExHTkJRVTBzU1VGQlNTeFBRVUZQTEU5QlFVOHNVMEZCVXl4RFFVRkRPMEZCUTJ4RExHTkJRVTBzU1VGQlNTeFBRVUZQTEU5QlFVOHNVMEZCVXl4RFFVRkRPMEZCUTJ4RExHTkJRVTBzWVVGQllTeHBRa0ZCYVVJc1EwRkJRenRCUVVOeVF5eGpRVUZOTEdOQlFXTXNhVUpCUVdsQ0xFTkJRVU03UVVGRGRFTXNZMEZCVFN4bFFVRmxMR2xDUVVGcFFpeERRVUZETzBGQlEzWkRMR05CUVUwc1lVRkJZU3hWUVVGVkxFdEJRVXNzVjBGQlZ5eEpRVUZKTEdGQlFXRTdRVUZET1VRc1kwRkJUU3hWUVVGVkxFOUJRVThzVTBGQlV6dEJRVU5vUXl4alFVRk5MRmxCUVZrc2MwSkJRWE5DTEc5Q1FVRnZRaXhOUVVGTkxFZEJRVWNzUlVGQlJTeEpRVUZKTEZsQlFWa3NUVUZCVFN4SFFVRkhMRVZCUVVVN1FVRkRiRWNzWTBGQlRTeFpRVUZaTEZWQlFWVXNTMEZCU3l4VFFVRlRPMEZCUXpGRExHTkJRVTBzYzBKQlFYTkNMRU5CUVVNc1YwRkJWeXhIUVVGSExFTkJRVU03UVVGRk5VTXNZMEZCVFN4clFrRkJiME03UVVGQlFTeFZRVU40UXl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEZkQlFWVTdRVUZCUVN4VlFVRkhMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNSVUZCUXp0QlFVRkJMRlZCUVVjc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4RlFVRkRPMEZCUVVFc1ZVRkROVWNzUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hGUVVGRE8wRkJRVUVzVVVGRGFrTTdRVUZEUVN4eFEwRkJOa0lzYzBKQlFYTkNMR1ZCUVdVN1FVRkRiRVVzZDBKQlFXZENMRXRCUVVzc1IwRkJSeXd5UWtGQk1rSXNWMEZCVnl4UlFVRlJMRTFCUVUwc1EwRkJRenRCUVVNM1JTeFpRVUZKTEZOQlFWTTdRVUZEV0N3d1FrRkJaMElzUzBGQlN5eEhRVUZITERKQ1FVRXlRaXhQUVVGUExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTTdRVUZCUVN4UlFVTndSVHRCUVVOQkxIZENRVUZuUWl4TFFVRkxMRWRCUVVjc01rSkJRVEpDTEcxQ1FVRnRRaXhEUVVGRE8wRkJSWFpGTEdOQlFVMHNhMEpCUVd0Q0xFTkJRVU1zYVVKQlFTdENPMEZCUTNSRUxHZENRVUZOTEZsQlFWa3NhVUpCUVdsQ0xHTkJRV01zVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVlN4VlFVRlZMRTFCUVUwN1FVRkRja1lzWjBKQlFVMHNTVUZCU1N4alFVRmpMRXRCUVVzc1QwRkJUeXhEUVVGRExFVkJRVVVzVlVGQlZTeFBRVUZQTEZGQlFWRXNWMEZCVnp0QlFVTXpSU3huUWtGQlRTeEpRVUZKTEdOQlFXTXNTMEZCU3l4UFFVRlBMRU5CUVVNc1JVRkJSU3hWUVVGVkxFOUJRVThzVVVGQlVTeFZRVUZWTzBGQlF6RkZMR2RDUVVGTkxGTkJRVk1zWlVGQlpTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc2IwSkJRVzlDTEZGQlFWRXNWVUZCVlR0QlFVTnNSeXhuUWtGQlRTeFhRVUZYTERSQ1FVRTBRaXhQUVVGUExFdEJRVXNzVFVGQlRUdEJRVU12UkN4blFrRkJUU3hyUWtGQmEwSXNjVUpCUVhGQ0xITkNRVUZ6UWl4UFFVRlBMRXRCUVVzc1QwRkJUeXhSUVVGUk8wRkJRemxHTEdkQ1FVRk5MR2xDUVVGcFFpeERRVUZETEVkQlFVY3NRMEZCUXp0QlFVTTFRaXhqUVVGSkxHTkJRV003UVVGRGJFSXNZMEZCU1N4VFFVRlRPMEZCUTFnc2EwSkJRVTBzYVVKQlFXbENMR2xDUVVGcFFpeGhRVUZoTzBGQlEzSkVMREpDUVVGbExFdEJRVXNzWTBGQll5eFJRVUZSTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eFJRVUZSTEdOQlFXTXNRMEZCUXp0QlFVTndSeXd3UWtGQll5eEhRVU5XTEdsQ1FVRnBRaXgxUWtGQmRVSXNZMEZCWXl4UFFVTnlReXhaUVVGWkxFOUJRVThzUzBGQlN5eExRVUZMTEd0Q1FVRnJRanRCUVVGQkxGVkJRM1JGTzBGQlJVRXNaMEpCUVUwc1lVRkJZU3hQUVVGUExFMUJRVTBzUjBGQlJ5eEZRVUZGTzBGQlEzSkRMR2RDUVVGTkxHRkJRV0VzVDBGQlR5eE5RVUZOTEVkQlFVY3NSVUZCUlR0QlFVTnlReXhuUWtGQlRTeHBRa0ZCYVVJc2FVSkJRV2xDTEZsQlFWa3NVMEZCVXp0QlFVTTNSQ3huUWtGQlRTeHBRa0ZCYVVJc2FVSkJRV2xDTEZsQlFWa3NVMEZCVXp0QlFVTTNSQ3huUWtGQlRTeFhRVUU0UWp0QlFVRkJMRmxCUTJ4RExFVkJRVU1zVFVGQlRTeGxRVUZsTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUVVjc1JVRkJReXhOUVVGTkxFdEJRVXNzVFVGQlRTeE5RVUZMTzBGQlFVRXNXVUZCUnl4RlFVRkRMRTFCUVUwc1MwRkJTeXhOUVVGTkxFMUJRVXM3UVVGQlFTeFpRVU55Uml4RlFVRkRMRTFCUVUwc1MwRkJTeXhOUVVGTkxFMUJRVXM3UVVGQlFTeFZRVU42UWp0QlFVTkJMRzFEUVVGNVFpeHpRa0ZCYzBJc1VVRkJVVHRCUVVWMlJDeG5Ra0ZCVFN4aFFVRmhMRU5CUVVNc1ZVRkJlVUlzYTBKQlFUUkNPMEZCUTNaRkxHdENRVUZOTEU5QlFVOHNVMEZCVXp0QlFVTjBRaXhyUWtGQlRTeFBRVUZQTEZOQlFWTTdRVUZEZEVJc1owSkJRVWtzVTBGQlV5eEhRVUZITzBGQlEyUXNjVUpCUVU4c1QwRkJUeXhKUVVGSkxHTkJRV01zVTBGQlV5eExRVUZMTEU5QlFVODdRVUZCUVN4WlFVTjJSRHRCUVVOQkxHdENRVUZOTEZsQlFWa3NWVUZCVlR0QlFVTTFRaXhuUWtGQlNTeFRRVUZUTEU5QlFVOHNTVUZCU1N4aFFVRmhMRk5CUVZNc1MwRkJTeXhQUVVGUE8wRkJRekZFTEhGQ1FVRlRMRWxCUVVrc1QwRkJUeXhKUVVGSkxFZEJRVWNzU1VGQlNTeFpRVUZaTEVkQlFVY3NTMEZCU3l4SFFVRkhMRXRCUVVzc1MwRkJTenRCUVVNNVJDeDNRa0ZCVlR0QlFVRkJMRVZCUVVzc1NVRkJTU3haUVVGWkxFTkJRVU1zVDBGQlR5eFpRVUZaTEVsQlFVa3NhVUpCUVdsQ0xFTkJRVU1zVFVGQlRTeGxRVUZsTzBGQlFVRXNXVUZEYUVjN1FVRkRRU3d3UWtGQll5eFJRVUZSTEU5QlFVczdRVUZEZWtJc2QwSkJRVlU3UVVGQlFTeEZRVUZMTEVsQlFVa3NXVUZCV1N4RFFVRkRPMEZCUVVFc1dVRkRiRU1zUTBGQlF6dEJRVU5FTEhOQ1FVRlZMRWRCUVVjc1NVRkJTU3haUVVGWkxFOUJRVThzUTBGQlF6dEJRVUZCTEhWQ1FVTjRRaXhKUVVGSkxGbEJRVmtzVDBGQlR5eERRVUZETzBGQlEzSkRMRzFDUVVGUE8wRkJRVUVzVlVGRFZEdEJRVVZCTEdkQ1FVRk5MR0ZCUVdFc1RVRkJZenRCUVVNdlFpeG5Ra0ZCU1N4VlFVRlZMR1ZCUVdVc1JVRkJSU3hMUVVGTExFdEJRVXM3UVVGRGVrTXNjVUpCUVZNc1NVRkJTU3hIUVVGSExFbEJRVWtzWVVGQllTeExRVUZMTzBGQlEzQkRMSGxDUVVGWE8wRkJRVUVzTUVKQlEwY3NRMEZCUXl4NVFrRkJlVUlzUTBGQlF5d3lRa0ZCTWtJc1ZVRkJWVHRCUVVGQkxGbEJRMmhHTzBGQlEwRXNjVUpCUVZNc1NVRkJTU3hIUVVGSExFbEJRVWtzWTBGQll5eExRVUZMTzBGQlEzSkRMSGxDUVVGWExHbERRVUZwUXl4RFFVRkRMSGxDUVVGNVFpeFhRVUZYTzBGQlJXcEdMSFZDUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEdGQlFXRXNTMEZCU3p0QlFVTndReXd5UWtGQlZ6dEJRVUZCTEhGQ1FVTktMRU5CUVVNc1YwRkJWeXhGUVVGRkxFdEJRVXNzUzBGQlN5eFZRVUZWTEdkQ1FVRm5RaXhKUVVGSkxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NXVUZCV1N4RFFVRkRMRmxCUTI1R0xFTkJRVU03UVVGQlFUdEJRVUZCTEdOQlExQTdRVUZCUVN4WlFVTkdPMEZCUTBFc2JVSkJRVTg3UVVGQlFTeFZRVU5VTzBGQlJVRXNhVUpCUVU4N1FVRkJRU3hKUVVWSUxHRkJRV0VzYVVKQlFXbENMRkZCUVZFc1JVRkJSU3d3UWtGQk1FSXNVMEZCVXl4RlFVRkZPMEZCUVVFc1dVRkRla1VzUjBGQlJ6dEJRVUZCTEZsQlFXZENPMEZCUVVFc1ZVRkJUU3hEUVVGRE8wRkJRVUVzU1VGRGRFTXNZVUZCWVN4VlFVRlZMRU5CUVVNN1FVRkJRU3hOUVVOMFFpeGhRVUZoTEhORFFVRnpReXh6UWtGQmMwSXNRMEZCUXp0QlFVRkJMRFJEUVVOd1F5eFZRVUZWTEZGQlFWRXNWVUZCVlR0QlFVRkJMRGhEUVVNeFFpeFZRVUZWTzBGQlFVRXNhVU5CUTNaQ0xGbEJRVms3UVVGQlFTeHhRMEZEVWl4WlFVRlpPMEZCUVVFN1FVRkJRVHRCUVVGQkxFMUJSek5ETEZsQlFWa3NWMEZCVnl4SlFVRkpMRXRCUVVzc2RVSkJRWFZDTEZWQlFWVXNaMEpCUVdkQ0xFOUJRVThzUTBGQlF5eEhRVUZITzBGQlFVRXNUVUZETlVZc1YwRkJWeXhIUVVGSExHTkJRV01zUTBGQlF6dEJRVUZCTEhGQ1FVTmtMRVZCUVVVc1owSkJRV2RDTEZkQlFWY3NRMEZCUXp0QlFVRkJMRTFCUXpkRExGZEJRVmNzUjBGQlJ5eGpRVUZqTEVOQlFVTTdRVUZCUVN4eFFrRkRaQ3hGUVVGRkxHZENRVUZuUWl4WFFVRlhMRU5CUVVNN1FVRkJRU3gzUWtGRE0wSXNUMEZCVHl4TFFVRkxMRXRCUVVzc1MwRkJTeXhaUVVGWk8wRkJRVUVzYjBSQlEwNHNWMEZCVnp0QlFVRkJMRkZCUTNaRUxGZEJRVmNzUTBGQlF6dEJRVUZCTzBGQlFVRXNNa0pCUlU4c1dVRkJXVHRCUVVGQk8wRkJRVUVzVVVGRkwwSXNWMEZCVnp0QlFVRkJMRkZCUTFnc1pVRkJaVHRCUVVGQkxEQkNRVU5ITEU5QlFVOHNTMEZCU3l4UFFVRlBPMEZCUVVFc2NVSkJRM2hDTEU5QlFVOHNaMEpCUVdkQ0xHRkJRV0VzUTBGQlF6dEJRVUZCTEZGQlEyeEVMRTlCUVU4c1dVRkJXU3haUVVGWkxGVkJRVlVzU1VGQlNTeFBRVUZQTEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3hSUVVsMlJEdEJRVU5CTEdWQlFVODdRVUZCUVN4VlFVTk1MRTFCUVUwN1FVRkJRU3hWUVVOT0xHRkJRV0U3UVVGQlFTeFpRVU5ZTEUxQlFVMHNSMEZCUnl4eFFrRkJjVUlzVlVGQlZTeEpRVUZKTEZWQlFWVXNTVUZCU1N4WFFVRlhMRWxCUVVrc1dVRkJXU3hKUVVGSkxHTkJRV003UVVGQlFTeFpRVU4yUnl4dFFrRkJiVUlzVlVGQlZTeERRVUZETEZGQlFWRXNVVUZCVVN4TlFVRk5MRWxCUVVrc1EwRkJReXhSUVVGUkxFMUJRVTA3UVVGQlFTeFZRVU42UlR0QlFVRkJMRlZCUTBFc1dVRkJXU3hQUVVGUE8wRkJRVUVzV1VGRGFrSXNVMEZCVXl4RFFVRkRMRVZCUVVNc1RVRkJUU3hoUVVGaExGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNVMEZCVVN4RFFVRkRPMEZCUVVFc1dVRkRNMFFzWlVGQlpTeEZRVUZETEVkQlFVY3NTMEZCU3p0QlFVRkJMR05CUVVzc1lVRkJZVHRCUVVGQk8wRkJRVUVzV1VGQmRVSXNSVUZCUXp0QlFVRkJMRmxCUTJ4Rk8wRkJRVUVzVlVGRFJqdEJRVUZCTEZWQlEwRTdRVUZCUVN4UlFVTkdPMEZCUVVFc1RVRkRSanRCUVVWS0xFMUJRVTFCTEd0Q1FVRnBRaXhEUVVGRExGZEJRWGRETzBGQlF6bEVMRmxCUVVrc1EwRkJReXhWUVVGVkxFOUJRVThzVjBGQlZ5eEhRVUZITzBGQlEyeERMR2RDUVVGTkxFbEJRVWtzVFVGQlRTd3lRa0ZCTWtJN1FVRkJRU3hSUVVNM1F6dEJRVVZCTEZsQlFVa3NUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEZOQlFWTXNRMEZCUXl4TlFVRk5MRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4VFFVRlRMRU5CUVVNc1IwRkJSenRCUVVNelJpeG5Ra0ZCVFN4SlFVRkpMRTFCUVUwc2EwTkJRV3RETzBGQlFVRXNVVUZEY0VRN1FVRkJRU3hOUVVOR08wRkJSVThzVFVGQlRTeFRRVUZUTEVOQlFVTXNXVUZCYTBNN1FVRkRka1FzVVVGQlFVRXNaMEpCUVdVc1VVRkJVU3hOUVVGTk8wRkJRemRDTEdOQlFVMHNZMEZCWXl4alFVRmpMRlZCUVZVc1VVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJTeE5RVUZOTEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVc1RVRkJUU3hKUVVGSk8wRkJRMmhITEZsQlFVa3NRMEZCUXl4aFFVRmhPMEZCUTJoQ0xHZENRVUZOTEVsQlFVa3NUVUZCVFN4MVEwRkJkME03UVVGQlFTeFJRVU14UkR0QlFVTkJMR05CUVUwc1NVRkJTU3haUVVGWkxGbEJRVmtzVTBGQlV5eERRVUZETzBGQlF6VkRMR05CUVUwc1NVRkJTU3hSUVVGUkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExGTkJRVk1zUTBGQlF6dEJRVU5zUlN4WlFVRkpMRWxCUVVrc1MwRkJTeXhKUVVGSkxFZEJRVWM3UVVGRGJFSXNhMEpCUVZFc1VVRkJVU3cyUWtGQk5rSXNVVUZCVVN4UlFVRlJMRVZCUVVNc1dVRkJXU3hIUVVGRkxFZEJRVWNzVjBGQlZ5eERRVUZETzBGQlFVRXNVVUZETjBZc1QwRkJUenRCUVVOTUxHdENRVUZSTEZGQlFWRXNkMEpCUVhkQ0xGRkJRVkVzVVVGQlVTeEZRVUZETEZsQlFWa3NSMEZCUlN4SFFVRkhMRmRCUVZjc1EwRkJRenRCUVVGQkxGRkJRM2hHTzBGQlFVRXNUVUZEUmp0QlFVRkJPMEZCUVVFN096dEJRMmhNUVN4TlFXVmhMSE5DUVRaQ1VDd3dRa0ZGUVVNc2FVSkJiVVJCTERKQ1FXMUNUeXh4UWtFd1FsQXNVVUY1U1VFc1VVRXdRazg3UVVGcVZHSTdRVUZCUVR0QlFVRkJPMEZCU1VFN1FVRkpRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZGVHl4TlFVRk5MSFZDUVVOVUxFTkJRVU1zV1VGQkswSXNZVUZCWjBNc1YwRkRMMFFzV1VGQkswSXNVMEZCTkVJc2EwSkJRWEZETzBGQlF5OUdMR05CUVUwc1dVRkJXU3hYUVVGWExFTkJRVU03UVVGRE9VSXNZMEZCVFN4dlFrRkJiMElzVjBGQlZ5eE5RVUZOTEdkQ1FVRm5RaXhKUVVGSkxFZEJRVWNzWjBKQlFXZENMRWxCUVVrc1EwRkJRenRCUVVOMlJpeGpRVUZOTEdOQlFXTXNhMEpCUVd0Q08wRkJRM1JETEdOQlFVMHNZMEZCWXl4WlFVRlpMRU5CUVVNN1FVRkRha01zWTBGQlRTeHhRa0ZCY1VJc1dVRkJXU3hOUVVGTkxFTkJRVU03UVVGRE9VTXNZMEZCVFN4eFFrRkJjVUlzYlVKQlFXMUNMRWxCUVVrc1EwRkJReXhIUVVGSExFMUJRVTBzUzBGQlN5eEpRVUZKTEUxQlFVMHNWVUZCVlN4RFFVRkRMRWxCUVVrc1JVRkJSVHRCUVVNMVJpeGpRVUZOTERKQ1FVRXlRaXhyUWtGQmEwSXNTVUZCU1N4RFFVRkRMRWRCUVVjc1RVRkJUU3hKUVVGSkxGZEJRVmNzUTBGQlF5eEpRVUZKTEZkQlFWY3NTVUZCU1N4WFFVRlhMRU5CUVVNN1FVRkRhRWdzWTBGQlRTeGpRVU5HTEhsQ1FVRjVRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEV0QlFVc3NUMEZCVHl4SlFVRkpMRzFDUVVGdFFpeERRVUZETEVsQlFVa3NVVUZCVVN4RFFVRkRMRXRCUVVzc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0xUnl4dlFrRkJXU3hQUVVGUExFZEJRVWNzUjBGQlJ5eFRRVUZUTzBGQlEyeERMRzlDUVVGWkxFOUJRVThzWjBKQlFXZENMRWxCUVVrc1IwRkJSeXhIUVVGSExGZEJRVmM3UVVGRGVFUXNaVUZCVHp0QlFVRkJMRTFCUTFRN1FVRmpTaXhOUVVGTkxESkNRVUV5UWl4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU03UVVGRk5VTXNUVUZCVFVFc2EwSkJRV2xDTEVOQlFVTXNVVUZCSzBJc1pVRkJjVU03UVVGSE1VWXNXVUZCU1N4RFFVRkRMRlZCUVZjc1QwRkJUeXhYUVVGWExFdEJRVXNzVDBGQlR5eFhRVUZYTEVkQlFVazdRVUZETTBRc1owSkJRVTBzU1VGQlNTeE5RVUZOTERaQ1FVRTJRanRCUVVGQkxGRkJReTlETzBGQlIwRXNXVUZCU1N4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExGZEJRVmNzUzBGQlN5eFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRmRCUVZjc1IwRkJSenRCUVVNNVJDeG5Ra0ZCVFN4SlFVRkpMRTFCUVUwc2RVTkJRWFZETzBGQlFVRXNVVUZEZWtRN1FVRkZRU3haUVVGSkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NWMEZCVnl4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExGRkJRVkU3UVVGRGJrUXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxEaERRVUU0UXp0QlFVRkJMRkZCUTJoRk8wRkJSMEVzWTBGQlRTeGpRVUZqTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1YwRkJWeXhYUVVGWExGTkJRVk1zVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4VFFVRlRMRWxCUVVrc1EwRkJRenRCUVVNdlJpeGpRVUZOTEd0Q1FVRnJRaXhQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNTVUZCU1N4WFFVRlhPMEZCUTNaRUxGbEJRVWtzWjBKQlFXZENMR2xDUVVGcFFqdEJRVU51UXl4blFrRkJUU3hKUVVGSkxFMUJRVTBzYlVSQlFXMUVPMEZCUVVFc1VVRkRja1U3UVVGSFFTeFpRVUZKTEU5QlFVOHNWMEZCVnl4TlFVRk5MRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzVjBGQlZ5eExRVUZMTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhOUVVGTkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4SlFVRkpPMEZCUTI1SExHZENRVUZOTEVsQlFVa3NUVUZCVFN4alFVRmpPMEZCUVVFc1VVRkRhRU03UVVGRlFTeGpRVUZOTEdOQlFXTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhUUVVGVE8wRkJSVFZETEZsQlFVa3NWMEZCVnl4VlFVRlZMRmRCUVZjc1lVRkJZVHRCUVVNdlF5eG5Ra0ZCVFN4SlFVRkpMRTFCUVUwc2RVSkJRWFZDTEZkQlFWY3NSMEZCUnp0QlFVRkJMRkZCUTNaRU8wRkJSMEVzV1VGQlNTeFhRVUZYTEZGQlFWRXNWMEZCVnl4aFFVRmhPMEZCUXpkRExHZENRVUZOTEVsQlFVa3NUVUZCVFN4eFFrRkJjVUlzVjBGQlZ5eEhRVUZITzBGQlFVRXNVVUZEY2tRN1FVRkhRU3haUVVGSkxGZEJRVmNzUzBGQlN5eFhRVUZYTEdOQlFXTXNSMEZCUnp0QlFVTTVReXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNhMEpCUVd0Q0xHTkJRV01zUTBGQlF5eEhRVUZITzBGQlFVRXNVVUZEZEVRN1FVRkpRU3haUVVGSkxGZEJRVmNzV1VGQldTeFhRVUZYTEV0QlFVc3NWMEZCVnl4WlFVRlpMRmRCUVZjc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eFRRVUZUTEVkQlFVYzdRVUZEZEVjc1owSkJRVTBzU1VGQlNTeE5RVUZOTEhOQ1FVRnpRanRCUVVGQkxGRkJRM2hETzBGQlFVRXNUVUZEUmp0QlFVVkJMRTFCUVUwc05FSkJRVFJDTEVOQlFUSkNMRmxCUVdVc1YwRkJjVU03UVVGREwwY3NZMEZCVFN4alFVRmpMRmRCUVZjc1dVRkJXU3hOUVVGTk8wRkJSV3BFTEdsQ1FVRlRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NVVUZCVVN4RlFVRkZMRWRCUVVjN1FVRkRPVU1zWTBGQlNTeFpRVUZaTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjN1FVRkROVUlzZDBKQlFWa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETzBGQlFVRXNWVUZEZGtNN1FVRkJRU3hSUVVOR08wRkJRMEVzWTBGQlRTeFBRVUZQTEZkQlFWY3NTMEZCU3l4TlFVRk5PMEZCUTI1RExIRkNRVUZoTzBGQlFVRXNWVUZEVkN4UFFVRlBMRU5CUVVNc1JVRkJSVHRCUVVGQkxGVkJRVTBzVjBGQlZ6dEJRVUZCTEZWQlFWTXNWMEZCVnp0QlFVRkJMRlZCUVZjN1FVRkJRU3hWUVVGaE8wRkJRVUVzVlVGQlRTeFhRVUZYTEZkQlFWYzdRVUZCUVN4VlFVTnVSeXhYUVVGWE8wRkJRVUVzVVVGQlR6dEJRVWQwUWl4alFVRk5MR2RDUVVGdFFpeFBRVUZQTEU5QlFVOHNRMEZCUXl4SFFVRkhMRlZCUVZVN1FVRkRja1FzWlVGQlR5eFBRVUZQTEdWQlFXVXNSVUZCUXl4aFFVRmhMRXRCUVVrc1EwRkJRenRCUVVOb1JDeGxRVUZQTzBGQlFVRXNUVUZEVkR0QlFVVlBMRTFCUVUwc2MwSkJRWE5DTEVOQlFVTXNaVUZCZDBRN1FVRkRNVVlzWTBGQlRTeDFRa0ZCZFVJc2EwTkJRV3RETEZWQlFWVTdRVUZGZWtVc1kwRkJUU3hUUVVGVExGZEJRVmM3UVVGRE1VSXNZMEZCVFN4VlFVRlZMRU5CUVVNc1ZVRkJWU3hUUVVGVExHTkJRV01zV1VGQldTeEZRVUZGTEZkQlFWY3NVVUZCYTBJN1FVRkROMFlzWTBGQlRTeFpRVUZaTEZkQlFWYzdRVUZETjBJc1kwRkJUU3hSUVVGUkxGZEJRVmM3UVVGRGVrSXNZMEZCVFN4alFVRmpMRmRCUVZjN1FVRkRMMElzWTBGQlRTeFBRVUZQTEZkQlFWYzdRVUZEZUVJc1kwRkJUU3hWUVVGVkxGZEJRVmM3UVVGRE0wSXNZMEZCVFN4WFFVRlpMRmRCUVZjc1YwRkJOa0k3UVVGRk1VUXNaVUZCVHp0QlFVRkJMRlZCUTB3N1FVRkJRU3hWUVVOQk8wRkJRVUVzVlVGRFFUdEJRVUZCTEZWQlEwRTdRVUZCUVN4VlFVTkJPMEZCUVVFc1ZVRkRRVHRCUVVGQkxGVkJRMEU3UVVGQlFTeFZRVU5CTzBGQlFVRXNWVUZEUVN4SFFVRkhPMEZCUVVFc1ZVRkRTQ3hWUVVGVkxFZEJRVWNzVjBGQlZ5eE5RVUZOTEVsQlFVa3NjVUpCUVhGQ0xGVkJRVlU3UVVGQlFTeFJRVU51UlR0QlFVRkJMRTFCUTBZN1FVRkZRU3hOUVVGTkxGTkJRVk1zUTBGQlF5eFRRVUY1UWl4UlFVRXJRaXhsUVVGeFF6dEJRVU16Unl4alFVRk5MSEZDUVVGeFFpd3dRa0ZCTUVJc1dVRkJXU3hOUVVGTk8wRkJTM1pGTEdOQlFVMHNhVUpCUVdsQ0xGZEJRVmNzVjBGQlZ6dEJRVU0zUXl4WlFVRkpMRmRCUVZjc1ZVRkJWU3hIUVVGSE8wRkJTekZDTEdkQ1FVRk5MRFpDUVVFMlFpeERRVUZETEZGQlFWRXNXVUZCV1N4bFFVRmxMRkZCUVZFN1FVRkRMMFVzWTBGQlNTdzRRa0ZCT0VJc2EwSkJRV3RDTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhOUVVGTkxGZEJRVmNzVTBGRGFrWXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFMUJRVTBzUzBGQlN5eFhRVUZYTEZWQlFWVXNRMEZCUXl4TlFVRk5MRXRCUVVzc1YwRkJWeXhWUVVGVkxFTkJRVU1zVFVGQlRTeEhRVUZITzBGQlF6ZEdMR3RDUVVGTlF5eGxRVUZqTzBGQlFVRXNZMEZEYUVJc1QwRkJUeXhEUVVGRExFVkJRVVU3UVVGQlFTeGpRVUZOTEU5QlFVOHNRMEZCUXl4RlFVRkZPMEZCUVVFc1kwRkJUU3hYUVVGWE8wRkJRVUVzWTBGQlZ5eHRRa0ZCYlVJN1FVRkJRU3hqUVVGTkxGZEJRVmM3UVVGQlFTeGpRVU14Ump0QlFVRkJMRmxCUVdNN1FVRkRiRUlzYTBKQlFVMURMRzlDUVVGdlFpeFJRVUZSTEdsQ1FVRnBRaXhOUVVNdlF5eFJRVUZSTzBGQlFVRXNZMEZEU2l3eVFrRkJNa0lzVDBGQlR5eERRVUZETEVkQlFVY3NkMEpCUVhkQ08wRkJRVUVzWTBGRE9VUXNSVUZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eFhRVUZYTEZkQlFWY3NTMEZCU3l4RlFVRkZMRVZCUVVNN1FVRkJRU3haUVVGRExFVkJRVVVzUTBGQlF6dEJRVU5zUlN4blFrRkJTU3hYUVVGWExGbEJRVmtzUTBGQlF5eFJRVUZSTEdsQ1FVRnBRaXhKUVVGSk8wRkJRM1pFTEhOQ1FVRlJMR2xDUVVGcFFpeExRVUZMUVR0QlFVRkJMRmxCUTJoRE8wRkJRMEVzYTBKQlFVMURMR05CUVdFc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlIwUXNhVUpCUVdkQ08wRkJReTlETEdkQ1FVRkpMRTlCUVU4c1YwRkJWeXhIUVVGSE8wRkJRM1pDTEdOQlFVRkRMRmxCUVZjc1MwRkJTeXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVUZCTEZsQlF6TkNPMEZCUTBFc2IwSkJRVkU3UVVGQlFTeGpRVU5LTEhORFFVRnpRMEVzWVVGQldTeHZRa0ZCYjBKR0xGbEJRVmM3UVVGQlFTeGpRVUZITEVWQlFVTXNVVUZCVVVVc1dVRkJWVHRCUVVGQkxGbEJRVU03UVVGQlFTeFZRVU01Unl4UFFVRlBPMEZCUTB3c2IwSkJRVkVzVVVGQlVTdzJRa0ZCTmtJc1VVRkJVU3hyUWtGQmEwSXNRMEZCUXp0QlFVRkJMRlZCUXpGRk8wRkJRMEU3UVVGQlFTeFJRVU5HTzBGQlJVRXNZMEZCVFN4VlFVRlZMRTlCUVU4c1YwRkJWenRCUVVOc1F5eGpRVUZOTEdOQlFXTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhwUWtGQmFVSXNTVUZCU1N4RFFVRkRPMEZCUTNwRUxHTkJRVTBzWVVGQllTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMR2xDUVVGcFFpeEpRVUZKTEVOQlFVTTdRVUZEZUVRc1kwRkJUU3huUWtGQlowSXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhwUWtGQmFVSXNTVUZCU1N4RFFVRkRPMEZCUXpORUxHTkJRVTBzWlVGQlpTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNN1FVRkRja01zWTBGQlRTeGpRVUZqTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJRenRCUVVWd1F5eGpRVUZOTEdOQlFXTTdRVUZCUVN4VlFVTm9RaXhQUVVGUExFTkJRVU1zUlVGQlJUdEJRVUZCTEZWQlFVMHNUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkJRU3hWUVVGTkxGZEJRVmM3UVVGQlFTeFZRVUZYTEcxQ1FVRnRRanRCUVVGQkxGVkJRVTBzVjBGQlZ6dEJRVUZCTEZWQlF6RkdPMEZCUVVFc1VVRkJZenRCUVVOc1FpeGpRVUZOTEZsQlFWa3NXVUZCV1N4cFFrRkJhVUlzU1VGQlNTeERRVUZETzBGQlEzQkVMR05CUVUwc1YwRkJWeXhaUVVGWkxHbENRVUZwUWl4SlFVRkpMRU5CUVVNN1FVRkRia1FzWTBGQlRTeGpRVUZqTEZsQlFWa3NhVUpCUVdsQ0xFbEJRVWtzUTBGQlF6dEJRVVYwUkN4alFVRk5MRmRCUVZjc2EwSkJRV3RDTEdsQ1FVRnBRaXhsUVVGbExHZENRVUZuUWl4alFVTXZSU3hYUVVGWExFdEJRVXNzUTBGQlF5eE5RVUZOTEV0QlFVc3NWMEZCVnl4TFFVRkxMRU5CUVVNc1RVRkJUVHRCUVVOMlJDeFpRVUZKTEZsQlEwTXNhVUpCUVdsQ0xFdEJRVXNzWjBKQlFXZENMRXRCUVVzc1YwRkJWeXhWUVVGVkxFTkJRVU1zVFVGQlRTeExRVUZMTEZkQlFWY3NWVUZCVlN4RFFVRkRMRTFCUVUwc1MwRkRlRWNzVjBGQlZ5eFJRVUZSTEVOQlFVTXNUVUZCVFN4TFFVRkxMRmRCUVZjc1VVRkJVU3hEUVVGRExFMUJRVTBzUzBGQlN5eFhRVUZYTEV0QlFVc3NRMEZCUXl4TlFVRk5MRXRCUTNKR0xGZEJRVmNzUzBGQlN5eERRVUZETEUxQlFVMHNSMEZCU1R0QlFVVTVRaXhuUWtGQlRTeFJRVUZSTEZsQlFWa3NRMEZCUXp0QlFVTXpRaXhqUVVGSkxGZEJRVmNzVjBGQlZ6dEJRVU14UWl4blFrRkJUU3hsUVVGbExFTkJRVU03UVVGRGRFSXNZMEZCU1N4blFrRkJaMEk3UVVGRGJFSXNhMEpCUVUxRUxHOUNRVUZ2UWl4UlFVRlJMR2xDUVVGcFFpeE5RVU12UXl4UlFVRlJPMEZCUVVFc1kwRkRTaXd5UWtGQk1rSXNUMEZCVHl4RFFVRkRMRWRCUVVjc2QwSkJRWGRDTzBGQlFVRXNZMEZET1VRc1JVRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4WFFVRlhMRmRCUVZjc1MwRkJTeXhGUVVGRkxFVkJRVU03UVVGQlFTeFpRVUZETEVWQlFVVXNRMEZCUXp0QlFVTnNSU3huUWtGQlNTeFhRVUZYTEZsQlFWa3NRMEZCUXl4UlFVRlJMR2xDUVVGcFFpeEpRVUZKTzBGQlEzWkVMSE5DUVVGUkxHbENRVUZwUWl4TFFVRkxRVHRCUVVGQkxGbEJRMmhETzBGQlEwRXNaMEpCUVVrc1ZVRkJWVHRCUVVOYUxHOUNRVUZOTEZsQlFWa3NZMEZCWXl4aFFVRmhPMEZCUXpkRExEQkNRVUZaTEU5QlFVOHNRMEZCUXl4RlFVRkZMRkZCUVZFc1EwRkJReXhIUVVGSExFOUJRVThzVTBGQlV5eERRVUZETzBGQlEyNUVMREJDUVVGWlFTeHJRa0ZCYVVJc1VVRkJVU3hEUVVGRExFZEJRVWNzVjBGQlZ5eFhRVUZYTEVOQlFVTTdRVUZEYUVVc2EwTkJRVzlDTEVOQlFVTXNSMEZCUnl4UFFVRlBMRmRCUVZjN1FVRkJRU3haUVVNMVF5eFBRVUZQTzBGQlEwd3NNRUpCUVZrc1QwRkJUeXhEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEU5QlFVOHNZMEZCWXl4WlFVRlpMR0ZCUVdFc1EwRkJRenRCUVVNNVJTd3dRa0ZCV1VFc2EwSkJRV2xDTEZGQlFWRXNRMEZCUXl4SFFVRkhMR1ZCUVdVc1YwRkJWeXhEUVVGRE8wRkJRM0JGTEd0RFFVRnZRaXhEUVVGRExFOUJRVThzV1VGQldTeFZRVUZWTEZkQlFWYzdRVUZCUVN4WlFVTXZSRHRCUVVOQkxIbENRVUZoTEV0QlFVc3NVMEZCVXp0QlFVTXpRaXg1UWtGQllTeExRVUZMTEZOQlFWTTdRVUZCUVN4VlFVTTNRaXhQUVVGUE8wRkJRMHdzZDBKQlFWa3NUMEZCVHl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFOUJRVThzWlVGQlpTeGpRVUZqTEZWQlFWVXNRMEZCUXp0QlFVTTVSU3gzUWtGQldTeFBRVUZQTEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1IwRkJSeXhoUVVGaExHRkJRV0VzUTBGQlF6dEJRVU0zUkN4blEwRkJiMElzUTBGQlF5eFBRVUZQTEdGQlFXRXNXVUZCV1N4UlFVRlJPMEZCUXpkRUxIbENRVUZoTEV0QlFVc3NVMEZCVXp0QlFVTXpRaXg1UWtGQllTeExRVUZMTEZOQlFWTTdRVUZCUVN4VlFVTTNRanRCUVVOQkxHTkJRVWtzVTBGQlV6dEJRVU5ZTEhsQ1FVRmhMRXRCUVVzc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGQlFTeFZRVU0zUWp0QlFVTkJMR2RDUVVGTkxFbEJRVWtzYTBKQlFXdENMRU5CUVVNN1FVRkROMElzWjBKQlFVMHNTVUZCU1N4aFFVRmhMRU5CUVVNc1JVRkJSU3hMUVVGTExHRkJRV0VzUTBGQlF5eEZRVUZGTEV0QlFVc3NVMEZCVXl4RFFVRkRPMEZCUlRsRUxHTkJRVWtzU1VGQlNTeExRVUZMTEVsQlFVa3NSMEZCUnp0QlFVTnNRaXh2UWtGQlVUdEJRVUZCTEdOQlEwbzdRVUZCUVN4blFrRkRTVHRCUVVGQkxHZENRVUZqTzBGQlFVRXNaMEpCUVc5Q08wRkJRVUVzWjBKQlFXRTdRVUZCUVN4blFrRkJiVUk3UVVGQlFTeGpRVUZqTzBGQlFVRXNZMEZEY0VZc1JVRkJReXhSUVVGUkxHRkJRVms3UVVGQlFTeFpRVUZETzBGQlFVRXNWVUZETlVJc1QwRkJUenRCUVVOTUxHOUNRVUZSTzBGQlFVRXNZMEZEU2l4M1FrRkJkMElzWTBGQll5eHZRa0ZCYjBJc1lVRkJZU3h0UWtGQmJVSXNZMEZCWXp0QlFVRkJMR05CUTNoSExFVkJRVU1zVVVGQlVTeGhRVUZaTzBGQlFVRXNXVUZCUXp0QlFVRkJMRlZCUXpWQ08wRkJRMEU3UVVGQlFTeFJRVU5HTzBGQlNVRXNZMEZCVFR0QlFVRkJPMEZCUVVFc1ZVRkJaMFU3UVVGQlFUdEJRVWQwUlN4alFVRk5MRzFDUVVGdlFpeFJRVUZSTEdsQ1FVRnBRaXhOUVVNdlF5eFJRVUZSTzBGQlFVRXNWVUZEU2l3eVFrRkJNa0lzVDBGQlR5eERRVUZETEVkQlFVY3NkMEpCUVhkQ08wRkJRVUVzVlVGRE9VUXNSVUZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eFhRVUZYTEZkQlFWY3NTMEZCU3l4RlFVRkZMRVZCUVVNN1FVRkJRU3hSUVVGRExFVkJRVVVzUTBGQlF6dEJRVU5zUlN4WlFVRkpMRmRCUVZjc1dVRkJXU3hEUVVGRExGRkJRVkVzYVVKQlFXbENMRWxCUVVrN1FVRkRka1FzYTBKQlFWRXNhVUpCUVdsQ0xFdEJRVXM3UVVGQlFTeFJRVU5vUXp0QlFVZEJMR05CUVUwc1lVRkJZU3hEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEdkQ1FVRm5RanRCUVVNdlF5eFpRVUZKTEZOQlFWTTdRVUZEV0N4eFFrRkJWeXhMUVVGTExFOUJRVThzUTBGQlF5eERRVUZETzBGQlFVRXNVVUZETTBJN1FVRkhRU3hqUVVGTkxGbEJRVmtzYVVKQlFXbENMRmxCUVZrc1YwRkJWenRCUVVNeFJDeGpRVUZOTEZsQlFWa3NhVUpCUVdsQ0xHTkJRV01zV1VGQldUdEJRVU0zUkN4alFVRk5MRmRCUVZjc1pVRkJaU3hqUVVGak8wRkJRemxETEdkQ1FVRlJPMEZCUVVFc1ZVRkRTanRCUVVGQkxGbEJRMGs3UVVGQlFTeFpRVUZaTzBGQlFVRXNXVUZCYjBJN1FVRkJRU3haUVVGaE8wRkJRVUVzV1VGQlZ6dEJRVUZCTEZsQlFWYzdRVUZCUVN4WlFVRlZPMEZCUVVFc1dVRkROMFU3UVVGQlFTeFZRVUY1UWp0QlFVRkJMRlZCUXpkQ0xFVkJRVU1zVVVGQlVTeFhRVUZWTzBGQlFVRXNVVUZCUXp0QlFVRkJMRTFCUXpGQ08wRkJSVUVzVFVGQlRTeFRRVUZUTEVOQlFVTXNVMEZCZVVJc1pVRkJjVU03UVVGRk5VVXNZMEZCVFN4blFrRkJaMElzVjBGQlZ5eFhRVUZYTzBGQlF6VkRMR05CUVUwc1UwRkJVenRCUVVGQkxGVkJRMklzVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVRkJMRmxCUTJRN1FVRkJRVHRCUVVGQkxHTkJSVWtzUTBGQlF5eFJRVUZSTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhIUVVGSExFZEJRVWNzVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1IwRkJSeXhSUVVGUkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQkxHTkJSVzVHTEVOQlFVTXNVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUjBGQlJ5eFJRVUZSTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhIUVVGSExFZEJRVWNzVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVGQk8wRkJRVUVzVlVGQlF6dEJRVUZCTzBGQlFVRXNWVUZGTlVZc1VVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJTeFJRVUZSTEVOQlFVTXNVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUjBGQlJ5eFJRVUZSTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhIUVVGSExFZEJRVWNzVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRVUVzVVVGRGFFZzdRVUZEUVN4WlFVRkpMRkZCUVZFc1QwRkJUeXhYUVVGWExFZEJRVWM3UVVGREwwSXNhVUpCUVU4c1MwRkJTeXhSUVVGUkxFOUJRVThzUTBGQlF5eERRVUZETzBGQlFVRXNVVUZETDBJN1FVRkRRU3hqUVVGTkxFOUJRVThzUTBGQlF5eEhRVUZITEZkQlFWY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1IwRkJSeXhYUVVGWExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF6RkVMR05CUVUwc1ZVRkJWU3hEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQTEZkQlFWY3NUMEZCVHp0QlFVTTNReXhqUVVGTkxGbEJRVmtzUTBGQlF5eERRVUZETEVWQlFVVXNUMEZCVHl4WFFVRlhMRk5CUVZNN1FVRkRha1FzWTBGQlRTeGpRVUZqTEVOQlFVTXNRMEZCUXl4RlFVRkZMRTlCUVU4c1YwRkJWeXhYUVVGWE8wRkJRM0pFTEdOQlFVMHNjVUpCUVhGQ0xEQkNRVUV3UWl4RlFVRkRMRWRCUVVjc1dVRkJXU3hOUVVGTkxGTkJRVk1zVjBGQlZ5eFpRVUZYTEVkQlFVY3NUVUZCVFR0QlFVTnVTQ3huUWtGQlVTeFJRVUZSTzBGQlFVRXNWVUZEV2p0QlFVRkJMRlZCUVZFN1FVRkJRU3hWUVVOU0xHbENRVUZsTEdkQ1FVRm5RaXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEZsQlFWa3NRMEZCUXl4SFFVRkhMRmxCUVZrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dEJRVUZCTEZGQlFVTXNRMEZCUXp0QlFVRkJMRTFCUXpOR08wRkJSVThzVFVGQlRTeFBRVUZQTEVOQlFVTXNVMEZCZVVJc1pVRkJjVU03UVVGRGFrWXNVVUZCUVVZc1owSkJRV1VzVVVGQlVTeFJRVUZSTEZWQlFWVTdRVUZEZWtNc1dVRkJTU3hSUVVGUkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NWMEZCVnl4SFFVRkhPMEZCUTNaRExHbENRVUZQTEZOQlFWTXNWVUZCVlR0QlFVRkJMRkZCUXpWQ0xFOUJRVTg3UVVGRFRDeHBRa0ZCVHl4VFFVRlRMRkZCUVZFc1VVRkJVU3hWUVVGVk8wRkJRVUVzVVVGRE5VTTdRVUZCUVN4TlFVTkdPMEZCUVVFN1FVRkJRVHM3TzBGRGVGUkJMRTFCYVVOTkxEaENRVEpJVHp0QlFUVktZanRCUVVGQk8wRkJRVUU3UVVGeFFrRTdRVUZEUVR0QlFVZEJPMEZCUlVFN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRlFTeE5RVUZOTEN0Q1FVTkdMRU5CUVVNc1owSkJRWGxDTEZWQlFWVXNUMEZCVHl4WlFVRnhReXhOUVVNdlJTeHRRa0ZCYlVJc1RVRkJZenRCUVVOb1F5eGpRVUZOTEdOQlFXTXNRMEZCUTBrc2MwSkJRVFpDTzBGQlEyaEVMR3RDUVVGUlFTeHRRa0ZCYTBJN1FVRkJRU3haUVVONFFpeExRVUZMTzBGQlEwZ3NjVUpCUVU4N1FVRkJRU3haUVVOVUxFdEJRVXM3UVVGRFNDeHhRa0ZCVHp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNjVUpCVVVVc1NVRkJTVHRCUVVGQk8wRkJRVUVzV1VGRlpqdEJRVU5GTEc5Q1FVRk5MRWxCUVVrc1RVRkJUU3h2UWtGQmIwSkJMR2xDUVVGblFpeHZRa0ZCYjBJN1FVRkJRU3hWUVVNMVJUdEJRVUZCTEZGQlEwWTdRVUZEUVN4alFVRk5MR2RDUVVGblFpeHBRa0ZCYVVJN1FVRkJRVHRCUVVGQkxGVkJSMEU3UVVGQlFUdEJRVUZCTzBGQlNYWkRMR05CUVUwc2EwSkJRV3RDTEdsQ1FVRnBRanRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4UlFVOUJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlVYcERMR05CUVUwc1ZVRkJWU3hwUWtGQmFVSXNOa0pCUVRaQ08wRkJRemxFTEdOQlFVMHNVMEZCVXl4cFFrRkJhVUlzTmtKQlFUWkNPMEZCUXpkRUxHTkJRVTBzVFVGQlRTeHBRa0ZCYVVJc1VVRkJVVHRCUVVOeVF5eGpRVUZOTEUxQlFVMHNhVUpCUVdsQ0xGRkJRVkU3UVVGRmNrTXNZMEZCVFN4bFFVRmxPMEZCUVVFc2VVSkJRMFlzYVVKQlFXbENMRFpDUVVFMlFpd3dRa0ZCTUVJN1FVRkJRU3gxUWtGRE1VVXNhVUpCUVdsQ0xHdERRVUZyUXl3clFrRkJLMEk3UVVGQlFTeHhRa0ZEY0VZc1IwRkJSenRCUVVGQkxIRkNRVU5JTEVkQlFVYzdRVUZCUVR0QlFVRkJMRzFDUVVWTUxFZEJRVWM3UVVGQlFTeHRRa0ZEU0N4SFFVRkhPMEZCUVVFN1FVRkJRVHRCUVVGQkxHdERRVWRaTEU5QlFVODdRVUZCUVN4cFFrRkRlRUlzU1VGQlNUdEJRVUZCTzBGQlFVRXNhME5CUldFc1RVRkJUVHRCUVVGQkxHbENRVU4yUWl4SlFVRkpPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzYTBKQlNVZ3NSMEZCUnp0QlFVRkJMRkZCUTJJc1lVRkJZVHRCUVVGQkxEQkZRVU54UkN4blFrRkJaMEk3UVVGRmNFWXNZMEZCVFN4VlFVRlZMR2xDUVVGcFFqdEJRVUZCTERCQ1FVTmlMR2RDUVVGblFqdEJRVUZCTzBGQlFVRXNWVUZGYUVNc1dVRkJXVHRCUVVGQk8wRkJRVUVzWlVGRlVDeEpRVUZKTEZkQlEyOUNPMEZCUVVFc01FSkJRMklzWjBKQlFXZENPMEZCUVVFN1FVRkJRU3hWUVVWb1F5eFpRVUZaTzBGQlFVRTdRVUZCUVN4bFFVVlFMRWxCUVVrN1FVRkZZaXhqUVVGTkxGVkJRVlU3UVVGQlFTd3dRa0ZEU1N4blFrRkJaMEk3UVVGQlFTeDVRa0ZEYWtJc2FVSkJRV2xDTERaQ1FVRTJRaXd3UWtGQk1FSTdRVUZCUVR0QlFVRkJPMEZCUVVFc1dVRkpka1lzYVVKQlFXbENMREpFUVVOQkxIZEVRVUYzUkR0QlFVRkJPMEZCUVVFN1FVRkJRU3hWUVVkNlJTeFpRVUZaTEdkQ1FVRm5RaXhEUVVGRE8wRkJRVUU3UVVGQlFTeGxRVVY0UWl4SlFVRkpPMEZCUVVFN1FVRkhZaXhqUVVGTkxHdENRVUZyUWl4eFFrRkJjVUlzV1VGQldTeEpRVUZKTzBGQlF6ZEVMR05CUVUwc1YwRkJWenRCUVVGQkxIVkVRVU5uUXl4SlFVRkpPMEZCUVVFc1RVRkRja1FzYVVKQlFXbENMRlZCUVZVc1QwRkJUenRCUVVGQk8wRkJRVUU3UVVGQlFTeDFSRUZIWlN4SlFVRkpPMEZCUVVFc1RVRkRja1FzYVVKQlFXbENMRlZCUVZVc1QwRkJUenRCUVVGQk8wRkJRVUU3UVVGQlFTeHBSVUZIZVVJc1NVRkJTVHRCUVVGQkxIZENRVU0zUXl4blFrRkJaMEk3UVVGQlFUdEJRVUZCTzBGQlFVRXNkVUpCUjJwQ0xHbENRVUZwUWl4clEwRkJhME1zSzBKQlFTdENPMEZCUVVFc1VVRkRha2NzWlVGQlpUdEJRVUZCTEZGQlEyWXNXVUZCV1N4UFFVRlBMRU5CUVVNN1FVRkJRU3hSUVVOd1FpeGxRVUZsTzBGQlFVRXNPRVZCUTNWRUxHZENRVUZuUWp0QlFVRkJPMEZCUVVFN1FVRkhlRVlzWlVGQlR6dEJRVUZCTEUxQlExUTdRVUZGUnl4TlFVRk5MSGxEUVVOVUxFTkJRVU1zVVVGQkswSXNXVUZCY1VNc1lVRkRjRVVzVjBGQmJVSXNWMEZCYlVJc1ZVRkJhMElzVTBGRGVFUXNPRUpCUVc5RU8wRkJRMjVFTEdOQlFVMHNhVUpCUVdsQ0xGZEJRVmNzVjBGQlZ6dEJRVU0zUXl4alFVRk5MR0ZCUVdFc2FVSkJRV2xDTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhKUVVGSkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXp0QlFVTjRSU3hqUVVGTkxGbEJRVmtzV1VGQldTeERRVUZETzBGQlF5OUNMR05CUVUwc1YwRkJWeXhwUWtGQmFVSXNXVUZCV1N4RFFVRkRMRWxCUVVrc1dVRkJXU3hEUVVGRE8wRkJRMmhGTEdOQlFVMHNXVUZCV1N4cFFrRkJhVUlzV1VGQldTeERRVUZETEVsQlFVa3NXVUZCV1N4RFFVRkRPMEZCUTJwRkxHTkJRVTBzWTBGQll5eHBRa0ZCYVVJc1dVRkJXU3hEUVVGRExFbEJRVWtzV1VGQldTeERRVUZETzBGQlJXNUZMR05CUVUwc1UwRkJVeXh0UWtGQmJVSXNZVUZCWVN4TlFVRk5MRXRCUVVzc1lVRkJZU3hOUVVGTkxHTkJRV01zVFVGQlRUdEJRVWRxUnl4alFVRk5MRmxCUVZrc2FVSkJRV2xDTEdOQlFXTXNWMEZCVnp0QlFVTTFSQ3hqUVVGTkxGbEJRVmtzYVVKQlFXbENMRmRCUVZjc1dVRkJXVHRCUVVNeFJDeGpRVUZOTEdkQ1FVRXdReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzBGQlEzaEVMR05CUVUwc2IwSkJRVzlDTEdGQlFXRXNTVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXp0QlFVTXZSQ3hqUVVGTkxGZEJRVmM3UVVGQlFTeFZRVU5tTEV0QlFVc3NTMEZCU3l4WlFVRlpMR05CUVdNc1EwRkJReXhKUVVGSkxHdENRVUZyUWl4RFFVRkRMRU5CUVVNN1FVRkJRU3hWUVVNM1JDeExRVUZMTEV0QlFVc3NXVUZCV1N4alFVRmpMRU5CUVVNc1NVRkJTU3hyUWtGQmEwSXNRMEZCUXl4RFFVRkRPMEZCUVVFc1ZVRkROMFFzUzBGQlN5eExRVUZMTEZsQlFWa3NZMEZCWXl4RFFVRkRMRWxCUVVrc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXp0QlFVRkJMRkZCUXk5RU8wRkJSVUVzYTBKQlFWVXNWMEZCVnl4TlFVRk5MSGREUVVGM1F5eFJRVUZSTEVWQlFVVTdRVUZGTjBVc1kwRkJUU3h0UWtGQmJVSXNVMEZCVXl4SlFVRkpPMEZCUTNSRExHTkJRVTBzV1VGQldTeExRVUZMTEVsQlFVa3NZMEZCWXl4RFFVRkRMRWxCUVVrc2EwSkJRV3RDTEdOQlFXTXNRMEZCUXl4RFFVRkRPMEZCUTJoR0xHTkJRVTBzWVVGQllTeFRRVUZUTEVsQlFVazdRVUZEYUVNc1kwRkJUU3hoUVVOR0xFTkJRVU1zVjBGQlZ5eFpRVUZaTEdsQ1FVRnBRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eFhRVUZYTEZsQlFWa3NhVUpCUVdsQ0xFbEJRVWtzUTBGQlF5eERRVUZETzBGQlEyNUhMR05CUVUwc2MwSkJRWE5DTzBGQlFVRXNWVUZETVVJc1YwRkJWeXhEUVVGRExFdEJRVXNzVjBGQlZ5eFZRVUZWTEVOQlFVTXNTMEZCU3l4SlFVRkpMRXRCUVVzc1YwRkJWeXhEUVVGRExFbEJRVWtzVFVGQlRTeFhRVUZYTEZWQlFWVXNRMEZCUXl4SlFVRkpPMEZCUVVFc1ZVRkRja2NzVjBGQlZ5eERRVUZETEV0QlFVc3NWMEZCVnl4VlFVRlZMRU5CUVVNc1MwRkJTeXhKUVVGSkxFdEJRVXNzVjBGQlZ5eERRVUZETEVsQlFVa3NUVUZCVFN4WFFVRlhMRlZCUVZVc1EwRkJReXhKUVVGSk8wRkJRVUVzVVVGRGRrYzdRVUZEUVN4alFVRk5MRTlCUVU4N1FVRkJRU3hWUVVOWUxHOUNRVUZ2UWl4RFFVRkRMRWxCUVVrc1NVRkJTU3hMUVVGTExFOUJRVThzVjBGQlZ5eExRVUZMTEVOQlFVTXNTVUZCU1N4WFFVRlhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU03UVVGQlFTeFZRVU55Uml4dlFrRkJiMElzUTBGQlF5eEpRVUZKTEVsQlFVa3NTMEZCU3l4UFFVRlBMRmRCUVZjc1MwRkJTeXhEUVVGRExFbEJRVWtzVjBGQlZ5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUVVFc1VVRkRka1k3UVVGRlFTeGpRVUZOTEd0Q1FVRnZRenRCUVVGQkxGVkJRM2hETEVWQlFVTXNjVUpCUVhOQ0xFMUJRVTBzVlVGQlV6dEJRVUZCTEZWQlFVY3NSVUZCUXl4eFFrRkJjMElzVFVGQlRTeFZRVUZUTzBGQlFVRXNWVUZETDBVc1JVRkJReXh4UWtGQmMwSXNUVUZCVFN4VFFVRlJPMEZCUVVFc1ZVRkJSeXhGUVVGRExIRkNRVUZ6UWl4TlFVRk5MRmRCUVZjc1VVRkJUenRCUVVGQkxGVkJRM1pHTEVWQlFVTXNjVUpCUVhOQ0xFMUJRVTBzVjBGQlZ5eFZRVUZUTzBGQlFVRXNWVUZCUnl4RlFVRkRMSEZDUVVGelFpeE5RVUZOTEZkQlFWVTdRVUZCUVN4VlFVTXpSaXhGUVVGRExIRkNRVUZ6UWl4TlFVRk5MRXRCUVVrN1FVRkJRU3hSUVVOdVF6dEJRVU5CTEhGRFFVRTJRaXhaUVVGWkxHVkJRV1U3UVVGRGVFUXNkMEpCUVdkQ0xFdEJRVXNzUjBGQlJ5d3lRa0ZCTWtJc1QwRkJUeXhEUVVGRExFVkJRVVVzVFVGQlRTeFBRVUZQTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNN1FVRkZiRVlzWTBGQlRTeHZRa0ZCZDBRc1EwRkJReXhSUVVGUkxFMUJRVTA3UVVGRE4wVXNXVUZCU1N4VFFVRlRPMEZCUTFnc01FSkJRV2RDTEV0QlFVc3NSMEZCUnl3eVFrRkJNa0lzVDBGQlR5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRPMEZCUTJ4RkxEUkNRVUZyUWl4TFFVRkxMRTFCUVUwN1FVRkJRU3hSUVVNdlFqdEJRVU5CTEhkQ1FVRm5RaXhMUVVGTExFZEJRVWNzTWtKQlFUSkNMRmRCUVZjc1EwRkJRenRCUVVVdlJDeGpRVUZOTEd0Q1FVRnJRaXhEUVVGRExHbENRVUVyUWp0QlFVTjBSQ3huUWtGQlRTeEpRVUZKTEdOQlFXTXNTMEZCU3l4UFFVRlBMRU5CUVVNc1JVRkJSU3hWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NVVUZCVVN4VlFVRlZPMEZCUTJ4R0xHZENRVUZOTEVsQlFVa3NZMEZCWXl4TFFVRkxMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4UlFVRlJMRU5CUVVNN1FVRkRla1VzWjBKQlFVMHNVMEZCVXl4bFFVRmxMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzVlVGQlZTeFpRVUZaTEZGQlFWRXNWVUZCVlR0QlFVTXhSaXhuUWtGQlRTeHBRa0ZCYVVJc1EwRkJReXhIUVVGSExFTkJRVU03UVVGRk5VSXNZMEZCU1N4dFFrRkJiVUk3UVVGRGRrSXNZMEZCU1N4VFFVRlRPMEZCUTFnc2EwSkJRVTBzVDBGQlR5eGpRVUZqTEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEZGQlFWRXNWVUZCVlR0QlFVTjRSaXd5UWtGQlpTeExRVUZMTEVsQlFVazdRVUZEZUVJc1owTkJRVzlDTzBGQlFVRXNORVJCUXpoQ0xFdEJRVXNzUzBGQlN5eExRVUZMTzBGQlFVRXNhVU5CUXpGRExHbENRVUZwUWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhUUVVGVExGRkJRVkVzUlVGQlJUdEJRVUZCTzBGQlFVRXNWVUZGZWtVN1FVRkZRU3huUWtGQlRTeFhRVUU0UWp0QlFVRkJMRmxCUTJ4RExFVkJRVU1zVFVGQlRTeGxRVUZsTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUVVjc1JVRkJReXhOUVVGTkxHVkJRV1VzVFVGQlRTeE5RVUZMTzBGQlFVRXNXVUZCUnl4RlFVRkRMRTFCUVUwc1lVRkJZU3hOUVVGTkxFMUJRVXM3UVVGQlFTeFpRVU4yUnl4RlFVRkRMRTFCUVUwc1YwRkJWeXhOUVVGTkxFOUJRVThzVVVGQlVTeEZRVUZETzBGQlFVRXNXVUZCUnl4RlFVRkRMRTFCUVUwc1lVRkJZU3hOUVVGTkxFOUJRVThzVVVGQlVTeEZRVUZETzBGQlFVRXNXVUZEY2tZc1JVRkJReXhOUVVGTkxHVkJRV1VzVFVGQlRTeFBRVUZQTEZGQlFWRXNWMEZCVnl4UFFVRk5PMEZCUVVFc1dVRkROVVFzUlVGQlF5eE5RVUZOTEZGQlFWRXNUVUZCVFN4UFFVRlBMRkZCUVZFc1MwRkJTeXhQUVVGTk8wRkJRVUVzVlVGRGFrUTdRVUZEUVN4dFEwRkJlVUlzV1VGQldTeFJRVUZSTzBGQlF6ZERMR2RDUVVGTkxGZEJRVmNzTkVKQlFUUkNMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzUTBGQlF6dEJRVU5zUlN4alFVRkpMR0ZCUVdFc1UwRkJVeXhoUVVGaExFOUJRVTg3UVVGRE5VTXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxGbEJRVmtzVVVGQlVTeHZRa0ZCYjBJN1FVRkJRU3hWUVVNeFJEdEJRVU5CTEdsQ1FVRlBPMEZCUVVFc1ZVRkRUQ3hqUVVGakxIbENRVUY1UWl4RFFVRkRPMEZCUVVFc1ZVRkRlRU1zWVVGQllTeHBRa0ZCYVVJc1VVRkJVU3hGUVVGRkxHbENRVUZwUWl4SFFVRkhMR2RDUVVGblFpeE5RVUZOTEVOQlFVTTdRVUZCUVN4VlFVTnVSaXhuUWtGQlowSTdRVUZCUVN4VlFVTm9RaXcyUWtGQk5rSXNaMEpCUVdkQ0xGTkJRVk1zV1VGQldTeEZRVUZGTEV0QlFVc3NUMEZCVHl4blFrRkJaMElzUTBGQlF6dEJRVUZCTEZWQlJTOUdMRk5CUVZNN1FVRkJRU3haUVVOSk8wRkJRVUVzV1VGQmJVSTdRVUZCUVN4WlFVRmxPMEZCUVVFc1dVRkJWVHRCUVVGQkxGbEJRVmNzUTBGQlF6dEJRVUZCTEZsQlFXZENPMEZCUVVFc1ZVRkJVeXhKUVVOeVJqdEJRVUZCTEZsQlEwazdRVUZCUVN4WlFVRnRRanRCUVVGQkxGbEJRV1U3UVVGQlFTeFpRVUZWTzBGQlFVRXNXVUZCVnl4RFFVRkRPMEZCUVVFc1dVRkJaMEk3UVVGQlFTeFpRVUZYTzBGQlFVRXNXVUZEYmtZN1FVRkJRU3haUVVGWE8wRkJRVUVzVlVGQmVVSXNRMEZCUXp0QlFVRkJMRkZCUTNoRU8wRkJSVUVzWlVGQlR6dEJRVUZCTEZWQlEwd3NUVUZCVFR0QlFVRkJMRlZCUTA0c1lVRkRTU3hGUVVGRExFMUJRVTBzUjBGQlJ5eFhRVUZYTEZGQlFWRXNTVUZCU1N4cFFrRkJhVUlzU1VGQlNTeGhRVUZoTEVsQlFVa3NUVUZCVFN4SlFVRkpMR3RDUVVGcFFqdEJRVUZCTEZWQlEzUkhMRmxCUVZrc1QwRkJUenRCUVVGQkxGbEJRMnBDTEZOQlFWTXNRMEZCUXl4RlFVRkRMRTFCUVUwc1lVRkJZU3hWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEZOQlFWRXNRMEZCUXp0QlFVRkJMRmxCUXpORUxHVkJRV1VzUlVGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1UwRkJVeXhEUVVGRExFZEJRVWNzUjBGQlJ5eFRRVUZUTEVOQlFVTXNSVUZCUXp0QlFVRkJMRmxCUXpsRU8wRkJRVUVzVlVGRFJqdEJRVUZCTEZWQlEwRTdRVUZCUVN4UlFVTkdPMEZCUVVFc1RVRkRSanRCUVVGQk8wRkJRVUU3T3p0QlEzWlJTaXhOUVRKQ1RTdzBRMEZwVFU4N1FVRTFUbUk3UVVGQlFUdEJRVUZCTzBGQmJVSkJPMEZCUTBFN1FVRkZRVHRCUVVWQk8wRkJSMEVzVFVGQlRTdzJRMEZEUml4RFFVRkRMR05CUVRSQ0xGRkJRU3RDTEdGQlFXZERMRk5CUXpOR0xITkNRVUVyUWl4VFFVRlRMRTlCUVU4c1ZVRkJhMElzVlVGRGFrVXNhVUpCUVdsQ0xGVkJRV3RDTzBGQlEyeERMR05CUVUwc1UwRkJVeXhwUWtGQmFVSXNTVUZCU1R0QlFVTndReXhqUVVGTkxGTkJRVk1zYVVKQlFXbENMRWxCUVVrN1FVRkRjRU1zWTBGQlRTeGhRVUZoTEdsQ1FVRnBRaXhKUVVGSk8wRkJRM2hETEdOQlFVMHNaMEpCUVdkQ0xGTkJRVk1zU1VGQlNUdEJRVVZ1UXl4WlFVRkpMRzFDUVVGdFFqdEJRVUZCTEdsRVFVTnZRaXhUUVVGVExGRkJRVkVzVVVGQlVTeE5RVUZOTEZGQlFWRTdRVUZCUVN3d1FrRkRPVVFzVTBGQlV5eFJRVUZSTEZGQlFWRXNUVUZCVFN4UlFVRlJPMEZCUVVFN1FVRkZNMFFzV1VGQlNTeFRRVUZUTzBGQlExZ3NPRUpCUVc5Q08wRkJRVUVzYzBSQlF6QkNMRk5CUVZNc1VVRkJVU3hSUVVGUkxFMUJRVTBzVVVGQlVUdEJRVUZCTERKQ1FVTnNSU3hwUWtGQmFVSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1UwRkJVeXhSUVVGUkxFVkJRVVU3UVVGQlFUdEJRVUZCTEZGQlJYSkZPMEZCUTBFc1kwRkJUU3hoUVVGaExGTkJRVk1zU1VGQlNUdEJRVU5vUXl4alFVRk5MRWxCUVVrc1kwRkJZeXhMUVVGTExFOUJRVThzUTBGQlF5eEZRVUZGTEZWQlFWVXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhSUVVGUkxGVkJRVlU3UVVGRGJFWXNZMEZCVFN4TFFVRkxMR05CUVdNc1RVRkJUU3hQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1VVRkJVU3hWUVVGVk8wRkJRM0JHTEdOQlFVMHNhVUpCUVdsQ0xFTkJRVU1zU1VGQlNTeERRVUZETzBGQlF6ZENMRmxCUVVrc1UwRkJVenRCUVVOWUxIbENRVUZsTEV0QlFVc3NZMEZCWXl4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzUTBGQlF5eFpRVUZaTEZWQlFWVXNRMEZCUXl4RlFVRkZMRkZCUVZFc1ZVRkJWU3hEUVVGRE8wRkJRVUVzVVVGRE4wYzdRVUZEUVN4alFVRk5MRk5CUVZNc1pVRkJaU3hWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEZWQlFWVXNXVUZCV1N4UlFVRlJMRlZCUVZVN1FVRkZNVVlzWTBGQlRTeGxRVUZsTzBGQlFVRXNNa0pCUTBFc2RVSkJRWFZDTEdkQ1FVRm5RaXhuUWtGQlowSTdRVUZCUVN4clFrRkRhRVVzZFVKQlFYVkNMR2RDUVVGblFpeG5Ra0ZCWjBJN1FVRkJRU3hyUWtGRGRrUXNkVUpCUVhWQ0xHZENRVUZuUWl4blFrRkJaMElzVFVGQlRTeGhRVUZoTzBGQlFVRXNkMEpCUTNCRkxIVkNRVUYxUWl4blFrRkJaMElzWjBKQlFXZENPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEd0RFFVMDNReXhSUVVGUkxFMUJRVTBzWVVGQllUdEJRVUZCTERoQ1FVTXZRaXhoUVVGaE8wRkJRVUVzT0VKQlEySXNVVUZCVVR0QlFVRkJPMEZCUVVFN1FVRkJRU3gxUWtGSFppeFJRVUZSTEd0Q1FVRnJRaXhSUVVGUkxGZEJRVmNzVVVGQlVUdEJRVUZCTzBGQlFVRXNiME5CUlhoRExGRkJRVkU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3g1UWtGUGJrSXNVVUZCVVN4clFrRkJhMElzVVVGQlVTeFhRVUZYTEZGQlFWRTdRVUZCUVN3d1FrRkRjRVFzVVVGQlVTeDNRa0ZCZDBJc1VVRkJVU3hYUVVGWExGRkJRVkU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3h6UTBGUEwwTXNVVUZCVVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxIZERRVWxPTEZGQlFWRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4blEwRlZhRUlzUlVGQlJTeEpRVUZKTEdWQlFXVXNaVUZCWlN4TlFVRk5MRWxCUVVrc1EwRkJRenRCUVVGQkxHZERRVU12UXl4RlFVRkZMRWxCUVVrc1pVRkJaU3hsUVVGbExGVkJRVlVzU1VGQlNTeERRVUZETzBGQlFVRXNaME5CUTI1RUxFVkJRVVVzU1VGQlNTeGxRVUZsTEdWQlFXVXNWVUZCVlN4SlFVRkpMRU5CUVVNN1FVRkJRU3huUTBGRGJrUXNSVUZCUlN4SlFVRkpMR1ZCUVdVc1pVRkJaU3hWUVVGVkxFbEJRVWtzUTBGQlF6dEJRVUZCTzBGQlFVRXNLMEpCUlhCRUxFZEJRVWNzU1VGQlNTeFRRVUZUTEZGQlFWRXNVVUZCVVN4SlFVRkpMRU5CUVVNN1FVRkJRU3h2UTBGRGFFTXNVVUZCVVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTdzBRa0ZOYUVJc1IwRkJSeXhKUVVGSkxGTkJRVk1zVVVGQlVTeFRRVUZUTEVsQlFVa3NRMEZCUXp0QlFVRkJPMEZCUVVFc2FVUkJSV3BDTEZGQlFWRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzYVVSQlRWSXNWVUZCVlR0QlFVRkJPMEZCUVVFc1owTkJSVE5DTEVWQlFVVXNTVUZCU1N4bFFVRmxMR1ZCUVdVc1RVRkJUU3hKUVVGSkxFTkJRVU03UVVGQlFTeG5RMEZETDBNc1JVRkJSU3hKUVVGSkxHVkJRV1VzWlVGQlpTeFZRVUZWTEVsQlFVa3NRMEZCUXp0QlFVRkJMR2REUVVOdVJDeEZRVUZGTEVsQlFVa3NaVUZCWlN4bFFVRmxMRlZCUVZVc1NVRkJTU3hEUVVGRE8wRkJRVUVzWjBOQlEyNUVMRVZCUVVVc1NVRkJTU3hsUVVGbExHVkJRV1VzVlVGQlZTeEpRVUZKTEVOQlFVTTdRVUZCUVR0QlFVRkJMQ3RDUVVWd1JDeEhRVUZITEVsQlFVa3NVMEZCVXl4UlFVRlJMRkZCUVZFc1NVRkJTU3hEUVVGRE8wRkJRVUVzYjBOQlEyaERMRkZCUVZFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc1owTkJVMW9zUlVGQlJTeEpRVUZKTEdWQlFXVXNaVUZCWlN4TlFVRk5MRWxCUVVrc1EwRkJRenRCUVVGQkxHZERRVU12UXl4RlFVRkZMRWxCUVVrc1pVRkJaU3hsUVVGbExGVkJRVlVzU1VGQlNTeERRVUZETzBGQlFVRXNaME5CUTI1RUxFVkJRVVVzU1VGQlNTeGxRVUZsTEdWQlFXVXNWVUZCVlN4SlFVRkpMRU5CUVVNN1FVRkJRU3huUTBGRGJrUXNSVUZCUlN4SlFVRkpMR1ZCUVdVc1pVRkJaU3hWUVVGVkxFbEJRVWtzUTBGQlF6dEJRVUZCTzBGQlFVRXNLMEpCUlhCRUxFZEJRVWNzU1VGQlNTeFRRVUZUTEZGQlFWRXNVMEZCVXl4SlFVRkpMRU5CUVVNN1FVRkJRU3h2UTBGRGFrTXNVVUZCVVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRzFEUVZWVUxHRkJRV0U3UVVGQlFTeHhRMEZEV0N4VlFVRlZMR05CUVdNc1VVRkJVU3hSUVVGUkxGRkJRVkU3UVVGQlFTeFpRVU42UlN4UFFVRlBMRWxCUVVrc1UwRkJVeXhMUVVGTExGTkJRVk1zVFVGQlRTeFBRVUZQTEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUjNSRUxHTkJRVTBzWTBGQll6dEJRVUZCTEdkRFFVTk5MRTlCUVU4c1owSkJRV2RDTEZsQlFWa3NRMEZCUXp0QlFVRkJMSGRDUVVNMVF5eFBRVUZQTEZkQlFWY3NhVUpCUVdsQ0xFTkJRVU1zUTBGQlF6dEJRVUZCTEhGQ1FVTjRReXhQUVVGUExGZEJRVmNzYVVKQlFXbENMRlZCUVZVc1EwRkJRenRCUVVGQkxHOUNRVU12UXl4UFFVRlBMRmRCUVZjc2FVSkJRV2xDTEUxQlFVMHNRMEZCUXp0QlFVRkJMRzlDUVVNeFF5eFBRVUZQTEZkQlFWY3NhVUpCUVdsQ0xFMUJRVTBzUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzTUVKQlVYQkRMRkZCUVZFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEhsQ1FVdFVMRkZCUVZFc2FVSkJRV2xDTEZGQlFWRXNWMEZCVnl4UlFVRlJPMEZCUVVFN1FVRkJRU3h6UTBGRmRrTXNVVUZCVVN4elFrRkJjMElzVFVGQlRUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTERKQ1FWVXZReXhSUVVGUkxHbENRVUZwUWl4UlFVRlJMRmRCUVZjc1VVRkJVVHRCUVVGQk8wRkJRVUVzZDBOQlJYWkRMRkZCUVZFc2MwSkJRWE5DTEUxQlFVMDdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTd3JRa0ZSYkVVc2FVSkJRV2xDTEVkQlFVY3NTVUZCU1N4VFFVRlRMRkZCUVZFc1VVRkJVU3hqUVVGakxFbEJRemxETEVkQlFVY3NTVUZCU1N4VFFVRlRMR2RDUVVGblFpeFJRVUZSTEUxQlFVMHNRMEZCUXp0QlFVRkJMQ3RDUVVNelF5eEZRVUZGTEVsQlFVa3NaMEpCUVdkQ0xHVkJRV1VzWlVGQlpTeGhRVUZoTEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzYTBOQlRTOUVMRlZCUVZVc1lVRkJZU3hIUVVGSExGRkJRVkVzVDBGQlR6dEJRVUZCTEZsQlF5OUVMRTlCUVU4c1dVRkJXU3hqUVVGakxFOUJRVThzUTBGQlF6dEJRVUZCTzBGQlJ5OURMR1ZCUVU4N1FVRkJRU3hKUVVOVUxHRkJRV0VzYVVKQlFXbENMRkZCUVZFc1JVRkJSU3hwUWtGQmFVSXNSMEZCUnl4blFrRkJaMElzVFVGQlRTeERRVUZETzBGQlFVRXNTVUZEYmtZc1owSkJRV2RDTzBGQlFVRTdRVUZCUVN4TlFVVmtMR0ZCUVdFc1ZVRkJWU3hEUVVGRE8wRkJRVUVzVFVGRGVFSXNZVUZCWVN4elEwRkJjME1zYzBKQlFYTkNMRU5CUVVNN1FVRkJRU3hKUVVNMVJTeFRRVUZUTEdWQlFXVXNWMEZCVnp0QlFVRkJMRTFCUTI1RE8wRkJSVWNzVFVGQlRTeHRRMEZEVkN4RFFVRkRMRkZCUVN0Q0xGbEJReTlDTEN0Q1FVRnhSanRCUVVOd1JpeGpRVUZOTEZWQlFWVXNUMEZCVHl4VFFVRlRPMEZCUldoRExHTkJRVTBzWTBGQll5eFhRVUZYTzBGQlF5OUNMR05CUVUwc1lVRkJZU3hWUVVGVkxFdEJRVXNzVjBGQlZ6dEJRVTAzUXl4alFVRk5MRmRCUVZjN1FVRkJRU3hWUVVObUxFdEJRVXNzUzBGQlN5eGhRVUZoTEVWQlFVVTdRVUZCUVN4VlFVTjZRanRCUVVGQkxGVkJRMEU3UVVGQlFTeFJRVU5HTzBGQlEwRXNhMEpCUVZVc1YwRkJWeXhOUVVGTkxIVkRRVUYxUXl4UlFVRlJMRVZCUVVVN1FVRkZOVVVzWTBGQlRTeHBRa0ZCYVVJc1YwRkJWeXhYUVVGWE8wRkJRemRETEdOQlFVMHNiMEpCUVhkRUxFTkJRVU1zVVVGQlVTeE5RVUZOTzBGQlF6ZEZMR05CUVUwc1ZVRkJWU3hEUVVGRExGZEJRVmNzVVVGQlVTeERRVUZETEVkQlFVY3NWMEZCVnl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVNM1JDeGpRVUZOTEdGQlEwWXNRMEZCUXl4WFFVRlhMRmxCUVZrc2FVSkJRV2xDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRmRCUVZjc1dVRkJXU3hwUWtGQmFVSXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRia2NzWTBGQlRTeFpRVUZaTEVOQlFVTXNWMEZCVnl4VlFVRlZMRU5CUVVNc1IwRkJSeXhYUVVGWExGVkJRVlVzUTBGQlF5eERRVUZETzBGQlEyNUZMR05CUVUwc2MwSkJRWE5DTzBGQlFVRXNWVUZETVVJc1YwRkJWeXhEUVVGRExFdEJRMUFzVjBGQlZ5eFZRVUZWTEVOQlFVTXNTMEZCU3l4SlFVTjJRaXhMUVVORExGZEJRVmNzV1VGQldTeHBRa0ZCYVVJc1NVRkJTU3hEUVVGRExFbEJRVWtzVFVGQlRTeFhRVUZYTEZWQlFWVXNRMEZCUXl4SlFVRkpPMEZCUVVFc1ZVRkRNMFlzVjBGQlZ5eERRVUZETEV0QlExQXNWMEZCVnl4VlFVRlZMRU5CUVVNc1MwRkJTeXhKUVVOMlFpeExRVU5ETEZkQlFWY3NXVUZCV1N4cFFrRkJhVUlzU1VGQlNTeERRVUZETEVsQlFVa3NUVUZCVFN4WFFVRlhMRlZCUVZVc1EwRkJReXhKUVVGSk8wRkJRVUVzVVVGRE4wWTdRVUZEUVN4alFVRk5MRTlCUVU4N1FVRkJRU3hWUVVOWUxHOUNRVUZ2UWl4RFFVRkRMRWxCUVVrc1NVRkJTU3hMUVVGTExFOUJRVThzVjBGQlZ5eExRVUZMTEVOQlFVTXNTVUZCU1N4WFFVRlhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU03UVVGQlFTeFZRVU55Uml4dlFrRkJiMElzUTBGQlF5eEpRVUZKTEVsQlFVa3NTMEZCU3l4TlFVRk5MRmRCUVZjc1MwRkJTeXhEUVVGRExFbEJRVWtzVjBGQlZ5eExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpPMEZCUVVFc1VVRkRja1k3UVVGRlFTeGpRVUZOTEZOQlFWTTdRVUZEWml4alFVRk5MRkZCUVZFc1YwRkJWenRCUVVONlFpeGpRVUZOTEZOQlFWTXNUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkRla0lzWTBGQlRTeDNRa0ZCZDBJc1QwRkJUeXhEUVVGRExFbEJRVWs3UVVGRE1VTXNZMEZCVFN4NVFrRkJlVUlzVDBGQlR5eERRVUZETzBGQlJYWkRMR05CUVUwc2EwSkJRVzlETzBGQlFVRXNWVUZEZUVNc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4WFFVRlZPMEZCUVVFc1ZVRkJSeXhGUVVGRExIVkNRVUYxUWl4TlFVRk5MRkZCUVU4N1FVRkJRU3hWUVVOb1JpeEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxGZEJRVlU3UVVGQlFTeFZRVUZITEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzVlVGQlV6dEJRVUZCTEZWQlEyeEdMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNiMEpCUVcxQ08wRkJRVUVzVlVGQlJ5eEZRVUZETEhGQ1FVRnpRaXhOUVVGTkxFdEJRVWs3UVVGQlFTeFZRVU55Uml4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEhOQ1FVRnhRanRCUVVGQkxGVkJRVWNzUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3gxUWtGQmMwSTdRVUZCUVN4VlFVTXhSeXhIUVVGSExESkNRVUV5UWl4UFFVRlBMRU5CUVVNc1JVRkJSU3hOUVVGTkxFOUJRVThzUTBGQlF5eEZRVUZGTEVsQlFVazdRVUZCUVN4UlFVTTVSRHRCUVVOQkxGbEJRVWtzVTBGQlV6dEJRVU5ZTERCQ1FVRm5RaXhMUVVGTExFZEJRVWNzTWtKQlFUSkNMRTlCUVU4c1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF6dEJRVU5zUlN3MFFrRkJhMElzUzBGQlN5eE5RVUZOTzBGQlFVRXNVVUZETDBJN1FVRkRRU3gzUWtGQlowSXNTMEZCU3l4SFFVRkhMREpDUVVFeVFpeFhRVUZYTEVOQlFVTTdRVUZGTDBRc1kwRkJUU3gxUWtGQmRVSXNVMEZCVXl4RFFVRkRMRTFCUVUwc1MwRkJTeXhUUVVGVExFTkJRVU1zVFVGQlRUdEJRVU5zUlN4alFVRk5MR3RDUVVGclFpeERRVUZETEdsQ1FVRXJRanRCUVVOMFJDeG5Ra0ZCVFN4WFFVRTRRanRCUVVGQkxGbEJRMnhETEVWQlFVTXNUVUZCVFN4bFFVRmxMRTFCUVUwc1RVRkJTenRCUVVGQkxGbEJRVWNzUlVGQlF5eE5RVUZOTEZkQlFWY3NUVUZCVFN4UFFVRlBMRkZCUVZFc1VVRkJVU3hQUVVGTk8wRkJRVUVzV1VGRGVrWXNSVUZCUXl4TlFVRk5MR1ZCUVdVc1RVRkJUU3hQUVVGUExGRkJRVkVzVjBGQlZ5eFBRVUZOTzBGQlFVRXNXVUZETlVRc1JVRkJReXhOUVVGTkxHRkJRV0VzVFVGQlRTeFBRVUZQTEZGQlFWRXNWMEZCVnl4UFFVRk5PMEZCUVVFc1dVRkRNVVFzUlVGQlF5eE5RVUZOTEhsQ1FVRjVRaXhOUVVGTkxFOUJRVThzVVVGQlVTeHZRa0ZCYjBJc1QwRkJUVHRCUVVGQkxGbEJReTlGTEVWQlFVTXNUVUZCVFN4UlFVRlJMRTFCUVUwc1QwRkJUeXhSUVVGUkxFdEJRVXNzVDBGQlRUdEJRVUZCTEZsQlFVY3NSVUZCUXl4TlFVRk5MRFJDUVVFMFFpeE5RVUZOTEUxQlFVczdRVUZCUVN4WlFVTm9SeXhGUVVGRExFMUJRVTBzTmtKQlFUWkNMRTFCUVUwc1RVRkJTenRCUVVGQkxGVkJRMnBFTzBGQlEwRXNaMEpCUVUwc1YwRkJWeXcwUWtGQk5FSXNUMEZCVHl4RFFVRkRMRVZCUVVVc1VVRkJVVHRCUVVNdlJDeHBRa0ZCVHl4SFFVTklPMEZCUVVFc1dVRkRTVHRCUVVGQkxGbEJRV003UVVGQlFTeFpRVUZSTzBGQlFVRXNXVUZCWVR0QlFVRkJMRmxCUVZNN1FVRkJRU3haUVVGelFqdEJRVUZCTEZsQlFWRTdRVUZCUVN4WlFVRlZPMEZCUVVFc1dVRkRjRVk3UVVGQlFTeFZRVUZqTEVOQlFVTTdRVUZCUVN4UlFVTjZRanRCUVVOQkxHVkJRVTg3UVVGQlFTeFZRVU5NTEUxQlFVMDdRVUZCUVN4VlFVTk9MR0ZCUVdFc1JVRkJReXhOUVVGTkxFZEJRVWNzVjBGQlZ5eFJRVUZSTEV0QlFVc3NhMEpCUVdsQ08wRkJRVUVzVlVGRGFFVXNXVUZCV1N4UFFVRlBPMEZCUVVFc1dVRkRha0lzWlVGQlpTeEZRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhUUVVGVExFTkJRVU1zUjBGQlJ5eEhRVUZITEZOQlFWTXNRMEZCUXl4RlFVRkRPMEZCUVVFc1dVRkRPVVFzVTBGQlV5eERRVUZETzBGQlFVRXNZMEZEVWl4TlFVRk5MRFpDUVVFMlFpd3lRa0ZCTWtJc1YwRkJWeXhKUVVGSk8wRkJRVUVzWTBGRE4wVXNWVUZCVlN4UFFVRlBMRU5CUVVNc1JVRkJSVHRCUVVGQkxGbEJRM1JDTEVOQlFVTTdRVUZCUVN4WlFVTkVPMEZCUVVFc1ZVRkRSanRCUVVGQkxGVkJRMEU3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVRkJPMEZCUVVFN096dEJRM0JVU2l4TlFWbE5MR2xDUVVsQkxHMUNRVmRCTERaQ1FXbERRU3h2UTBGM1EwOHNPRUpCSzBKUVF5eHJRa0Z4UlVFc2NVSkJSVUVzYVVKQmMwUkJMR2xDUVRaRFR6dEJRVGRUWWp0QlFVRkJPMEZCUVVFN1FVRk5RVHRCUVVOQk8wRkJSVUU3UVVGRFFUdEJRVVZCTEUxQlFVMHNhMEpCUTBZc1EwRkJReXhQUVVGbExGRkJRV2RDTEV0QlFXRXNVVUZCWjBJc1ZVRkJhMElzWVVGRE1VVXNVVUZCVVN4TFFVRkxMRk5CUVZNc1QwRkJUeXhUUVVGVExFdEJRVXNzVjBGQlZ5eEpRVUZKTzBGQlJXNUZMRTFCUVUwc2IwSkJRVzlDTEVOQlFVTXNWVUZCYTBJc1UwRkJhVUlzVFVGQlowSXNUVUZCWXl4VFFVRnBRanRCUVVNelJ5eGpRVUZOTEZkQlFWY3NTMEZCU3l4TlFVRk5MRmRCUVZjc1EwRkJRenRCUVVONFF5eFpRVUZKTEZsQlFWa3NZMEZCWXp0QlFVTTFRaXhsUVVGTExFbEJRVWtzU1VGQlNUdEJRVU5pTEdWQlFVc3NTVUZCU1N4SlFVRkpMRmRCUVZjN1FVRkJRU3hSUVVNeFFpeFhRVUZYTEZsQlFWa3NZMEZCWXp0QlFVTnVReXhsUVVGTExFbEJRVWtzU1VGQlNTeFhRVUZYTzBGQlEzaENMR1ZCUVVzc1NVRkJTU3hKUVVGSk8wRkJRVUVzVVVGRFpqdEJRVUZCTEUxQlEwWTdRVUZGUVN4TlFVRk5MRGhDUVVOR0xFTkJRVU1zV1VGQkswSXNZVUZCWjBNc1YwRkJPRUlzVTBGRE4wWXNUMEZCWlN4TlFVRm5RaXhUUVVFMFFpeGxRVUYzUWl4bFFVTnVSaXhuUWtGQk1FSTdRVUZEZWtJc1kwRkJUU3hqUVVGakxGZEJRVmNzVTBGQlV6dEJRVU40UXl4alFVRk5MRzlDUVVGdlFpeFpRVUZaTEZkQlFWYzdRVUZEYWtRc1dVRkJTU3hqUVVGakxGZEJRVmNzUjBGQlJ6dEJRVU01UWl4dFFrRkJVeXhKUVVGSkxFZEJRVWNzU1VGQlNTeGhRVUZoTEVWQlFVVXNSMEZCUnp0QlFVTndReXd3UWtGQll5eExRVUZMTEVOQlFVTTdRVUZCUVN4VlFVTjBRanRCUVVGQkxGRkJRMFk3UVVGRFFTeGpRVUZOTEZsQlFWa3NWMEZCVnl4RFFVRkRPMEZCUXpsQ0xHTkJRVTBzWTBGQll5eFpRVUZaTEdkQ1FVRm5RaXhKUVVGSkxFTkJRVU1zU1VGQlNUdEJRVU42UkN4cFFrRkJVeXhKUVVGSkxFZEJRVWNzU1VGQlNTeFhRVUZYTEZOQlFWTXNaVUZCWlN4blFrRkJaMElzU1VGQlNTeEpRVUZKTEVsQlFVa3NZVUZCWVN4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSE8wRkJRM2hITEdkQ1FVRk5MRk5CUVZNc1YwRkJWeXhEUVVGRE8wRkJRek5DTEdkQ1FVRk5MRlZCUVZVc2IwSkJRVzlDTEZOQlFWTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1dVRkJXU3hEUVVGRE8wRkJRM1pGTEdkQ1FVRk5MRmRCUVZjc1owSkJRV2RDTEZGQlFWRXNVVUZCVVN4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWNzV1VGQldTeERRVUZETEVkQlFVY3NWVUZCVlN4RFFVRkRMRWRCUVVjc1QwRkJUenRCUVVOdVJ5dzBRa0ZCYTBJc1ZVRkJWU3hUUVVGVExFMUJRVTBzUjBGQlJ5eEpRVUZKTEZkQlFWYzdRVUZETjBRc1kwRkJTU3h0UWtGQmJVSTdRVUZEY2tJc2QwSkJRVms3UVVGQlFTeGpRVU5TTEZGQlFWRXNRMEZCUXl4TFFVRkxMRk5CUVZNc1MwRkJTeXhqUVVGakxFTkJRVU1zUzBGQlN5eFpRVUZaTEVOQlFVTXNTVUZCU1N4TFFVRkxMRlZCUVZVc1EwRkJReXhKUVVGSkxFbEJRVWtzUzBGQlN5eERRVUZETEVsQlF5OUdMRXRCUVVzc1NVRkJTU3hYUVVGWE8wRkJRVUVzV1VGQlF6dEJRVUZCTEZWQlF6TkNPMEZCUVVFc1VVRkRSanRCUVVOQkxHOUNRVUZaTEU5QlFVOHNSMEZCUnl4SFFVRkhMRk5CUVZNN1FVRkRiRU1zYjBKQlFWa3NUMEZCVHl4blFrRkJaMElzU1VGQlNTeEhRVUZITEVkQlFVY3NWMEZCVnp0QlFVRkJMRTFCUXpGRU8wRkJUMG9zVFVGQlRTeHhRMEZEUml4RFFVRnZReXhaUVVGbExGZEJRWEZETzBGQlEzUkdMR05CUVUwc1kwRkJZeXhYUVVGWExGbEJRVmtzVFVGQlRUdEJRVVZxUkN4WlFVRkpMRmRCUVZjc1dVRkJXU3hYUVVGWExFdEJRVXNzVjBGQlZ5eFpRVUZaTEU5QlFVOHNRMEZCUXl4SFFVRkhMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZITzBGQlEyeEhMSE5DUVVGWkxGTkJRVk03UVVGRGNrSXNiVUpCUVZNc1NVRkJTU3hIUVVGSExFbEJRVWtzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4UlFVRlJMRVZCUVVVc1IwRkJSenRCUVVNNVF5eDNRa0ZCV1N4TFFVRkxMRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzBGQlFVRXNWVUZEY0VNN1FVRkJRU3hSUVVOR08wRkJRMEVzWTBGQlRTeHBRa0ZCYVVJc1YwRkJWeXhYUVVGWE8wRkJRemRETEc5Q1FVRlpMRTlCUVU4c1IwRkJSeXhIUVVGSExFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUXpGRExHOUNRVUZaTEU5QlFVOHNhVUpCUVdsQ0xFbEJRVWtzUjBGQlJ5eEhRVUZITEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJSUzlFTEdOQlFVMHNUMEZCVHl4WFFVRlhMRXRCUVVzc1RVRkJUVHRCUVVOdVF5eGpRVUZOTEdOQlFXTXNWMEZCVnl4WlFVRlpMRTFCUVUwN1FVRkRha1FzWTBGQlRTeG5Ra0ZCWjBJc1YwRkJWeXhqUVVGakxFMUJRVTA3UVVGRGNrUXNZMEZCVFN4aFFVRmhMRTlCUVU4c1EwRkJReXhGUVVGRk8wRkJRemRDTEZsQlFVa3NXVUZCV1N4WFFVRlhMRlZCUVZVc1RVRkJUVHRCUVVNelF5eFpRVUZKTEZWQlFWVXNUMEZCVHl4RFFVRkRMRWRCUVVjc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVYzdRVUZET1VNc1owSkJRVTBzWTBGQll5eFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRk5CUVZNN1FVRkROVU1zYzBKQlFWa3NTVUZCU1N4TlFVRk5MRmRCUVZjc1JVRkJSU3hMUVVGTExFTkJRVU03UVVGQlFTeFJRVU16UXp0QlFVTkJMRmxCUVVrc1ZVRkJWU3hYUVVGWExGRkJRVkVzVFVGQlRUdEJRVU4yUXl4WlFVRkpMRkZCUVZFc1QwRkJUeXhEUVVGRExFZEJRVWNzVFVGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjN1FVRkROVU1zWjBKQlFVMHNZMEZCWXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExGTkJRVk03UVVGRE5VTXNiMEpCUVZVc1NVRkJTU3hOUVVGTkxGZEJRVmNzUlVGQlJTeExRVUZMTEVOQlFVTTdRVUZCUVN4UlFVTjZRenRCUVVkQk8wRkJRVUVzVlVGRFNUdEJRVUZCTEZWQlFWazdRVUZCUVN4VlFVRmhPMEZCUVVFc1ZVRkJWeXhYUVVGWE8wRkJRVUVzVlVGQlV5eFhRVUZYTzBGQlFVRXNWVUZCVHp0QlFVRkJMRlZCUVUwN1FVRkJRU3hWUVVGVE8wRkJRVUVzVlVGRGVrWTdRVUZCUVN4VlFVRmxPMEZCUVVFc1VVRkJWenRCUVVjNVFpeGpRVUZOTEdkQ1FVRnRRaXhQUVVGUExFOUJRVThzUTBGQlF5eEhRVUZITEZWQlFWVTdRVUZEY2tRc1pVRkJUeXhQUVVGUExHVkJRV1VzUlVGQlF5eGhRVUZoTEUxQlFVMHNaVUZCWlN4aFFVRmhMRmRCUVZjc1VVRkJUeXhEUVVGRE8wRkJRMmhITEdWQlFVODdRVUZCUVN4TlFVTlVPMEZCUlVjc1RVRkJUU3dyUWtGQkswSXNRMEZCUXl4bFFVRnBSVHRCUVVNMVJ5eGpRVUZOTEhWQ1FVRjFRaXhyUTBGQmEwTXNWVUZCVlR0QlFVVjZSU3hqUVVGTkxGTkJRVk1zVjBGQlZ6dEJRVU14UWl4alFVRk5MRlZCUTBZN1FVRkJRU3hWUVVGRE8wRkJRVUVzVlVGQlZUdEJRVUZCTEZWQlFWTTdRVUZCUVN4VlFVTnVRanRCUVVGQkxGRkJRVmtzUlVGQlJTeFBRVUZQTEZkQlFWY3NWMEZCVnl4alFVRmpMRWxCUVVrc1YwRkJWeXhQUVVGcFFqdEJRVU01Uml4alFVRk5MRmxCUVZrc1YwRkJWenRCUVVNM1FpeGpRVUZOTEZGQlFWRXNWMEZCVnp0QlFVTjZRaXhqUVVGTkxHTkJRV01zVjBGQlZ6dEJRVU12UWl4alFVRk5MRTlCUVU4c1YwRkJWenRCUVVONFFpeGpRVUZOTEZWQlFWVXNWMEZCVnp0QlFVTXpRaXhqUVVGTkxGZEJRVmtzVjBGQlZ5eFRRVUV5UWp0QlFVTjRSQ3hqUVVGTkxHZENRVUZuUWl4WFFVRlhPMEZCUTJwRExHTkJRVTBzWTBGQll5eFhRVUZYTzBGQlF5OUNMR1ZCUVU4N1FVRkJRU3hWUVVOTU8wRkJRVUVzVlVGRFFUdEJRVUZCTEZWQlEwRTdRVUZCUVN4VlFVTkJPMEZCUVVFc1ZVRkRRVHRCUVVGQkxGVkJRMEU3UVVGQlFTeFZRVU5CTzBGQlFVRXNWVUZEUVR0QlFVRkJMRlZCUTBFN1FVRkJRU3hWUVVOQk8wRkJRVUVzVlVGRFFTeEhRVUZITzBGQlFVRXNWVUZEU0N4VlFVRlZMRWRCUVVjc1YwRkJWeXhOUVVGTkxFbEJRVWtzY1VKQlFYRkNMRlZCUVZVN1FVRkJRU3hSUVVOdVJUdEJRVUZCTEUxQlEwWTdRVUZGUVN4TlFVRk5RU3h0UWtGQmFVSXNRMEZCUXl4UlFVRXJRaXhsUVVFNFF6dEJRVWR1Unl4WlFVRkpMRU5CUVVNc1ZVRkJWeXhQUVVGUExGZEJRVmNzUzBGQlN5eFBRVUZQTEZkQlFWY3NSMEZCU1R0QlFVTXpSQ3huUWtGQlRTeEpRVUZKTEUxQlFVMHNOa0pCUVRaQ08wRkJRVUVzVVVGREwwTTdRVUZIUVN4WlFVRkpMRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzVjBGQlZ5eExRVUZMTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1YwRkJWeXhIUVVGSE8wRkJRemxFTEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3d5UTBGQk1rTTdRVUZCUVN4UlFVTTNSRHRCUVVWQkxGbEJRVWtzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4WFFVRlhMRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzVVVGQlVUdEJRVU51UkN4blFrRkJUU3hKUVVGSkxFMUJRVTBzT0VOQlFUaERPMEZCUVVFc1VVRkRhRVU3UVVGSFFTeGpRVUZOTEdOQlFXTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhYUVVGWExGZEJRVmNzVTBGQlV5eFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRk5CUVZNc1NVRkJTU3hEUVVGRE8wRkJReTlHTEdOQlFVMHNhMEpCUVd0Q0xFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXp0QlFVTjRReXhaUVVGSkxHZENRVUZuUWl4cFFrRkJhVUk3UVVGRGJrTXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxHMUVRVUZ0UkR0QlFVRkJMRkZCUTNKRk8wRkJSVUVzWTBGQlRTeGpRVUZqTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhKUVVGSkxGZEJRVmM3UVVGSGJrUXNXVUZCU1N4UFFVRlBMRmRCUVZjc1RVRkJUU3hQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEZkQlFWY3NTMEZCU3l4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zVFVGQlRTeGpRVUZqTzBGQlF6ZEdMR2RDUVVGTkxFbEJRVWtzVFVGQlRTeGpRVUZqTzBGQlFVRXNVVUZEYUVNN1FVRkZRU3hqUVVGTkxHTkJRV01zVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4VFFVRlRPMEZCUXpWRExHTkJRVTBzWlVGQlpTeFhRVUZYTEZWQlFWVXNUMEZCVHl4RFFVRkRMRWRCUVVjc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEpRVUZKTzBGQlJYWkZMRmxCUVVrc1owSkJRV2RDTEZkQlFWY3NWVUZCVlN4WFFVRlhMR0ZCUVdFN1FVRkRMMFFzWjBKQlFVMHNTVUZCU1N4TlFVRk5MSFZDUVVGMVFpeFhRVUZYTEVkQlFVYzdRVUZCUVN4UlFVTjJSRHRCUVVWQkxHTkJRVTBzWVVGQllTeFhRVUZYTEZGQlFWRXNUMEZCVHl4RFFVRkRMRWRCUVVjc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEpRVUZKTzBGQlJXNUZMRmxCUVVrc1kwRkJZeXhYUVVGWExGRkJRVkVzVjBGQlZ5eGhRVUZoTzBGQlF6TkVMR2RDUVVGTkxFbEJRVWtzVFVGQlRTeHhRa0ZCY1VJc1YwRkJWeXhIUVVGSE8wRkJRVUVzVVVGRGNrUTdRVUZIUVN4alFVRk5MRlZCUVZVc1YwRkJWeXhMUVVGTExFOUJRVThzUTBGQlF5eEhRVUZITEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVVNc1NVRkJTVHRCUVVNM1JDeFpRVUZKTEZkQlFWY3NWMEZCVnl4TFFVRkxMRmRCUVZjc1kwRkJZeXhIUVVGSE8wRkJRM3BFTEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3hyUWtGQmEwSXNZMEZCWXl4RFFVRkRMRWRCUVVjN1FVRkJRU3hSUVVOMFJEdEJRVWRCTEZsQlFVa3NWMEZCVnl4alFVRmpMRmRCUVZjc1pVRkJaU3hYUVVGWExHTkJRV01zVjBGQlZ5eEhRVUZITzBGQlF6VkdMR2RDUVVGTkxFbEJRVWtzVFVGQlRTdzBRa0ZCTkVJc1YwRkJWeXhIUVVGSE8wRkJRVUVzVVVGRE5VUTdRVUZKUVN4alFVRk5MR2xDUVVGcFFpeFhRVUZYTEZsQlFWa3NUMEZCVHl4RFFVRkRMRWRCUVVjc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEpRVUZKTzBGQlF6TkZMRmxCUVVrc2EwSkJRV3RDTEZkQlFWY3NXVUZCV1N4WFFVRlhMRXRCUTNCRUxGZEJRVmNzV1VGQldTeFhRVUZYTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1UwRkJVeXhIUVVGSE8wRkJReTlFTEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3h6UWtGQmMwSTdRVUZCUVN4UlFVTjRRenRCUVVkQkxGbEJRVWtzVjBGQlZ5eFpRVUZaTEZkQlFWY3NTMEZCU3l4WFFVRlhMRmxCUVZrc1YwRkJWeXhQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEZOQlFWTXNSMEZCUnp0QlFVTjBSeXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNjMEpCUVhOQ08wRkJRVUVzVVVGRGVFTTdRVUZCUVN4TlFVTkdPMEZCUjBFc1RVRkJUU3h6UWtGQmMwSXNRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRE8wRkJSWFpETEUxQlFVMHNhMEpCUTBZc1EwRkJReXhUUVVGNVFpeFJRVUVyUWl4bFFVRTRRenRCUVVOeVJ5eGpRVUZOTEhGQ1FVRnhRaXh0UTBGQmJVTXNXVUZCV1N4TlFVRk5PMEZCUTJoR0xHTkJRVTBzYVVKQlFXbENMRmRCUVZjc1YwRkJWenRCUVVNM1F5eGpRVUZOTEdOQlFXTXNiVUpCUVcxQ08wRkJRM1pETEdOQlFVMHNZMEZCWXl4WlFVRlpMR2xDUVVGcFFpeEpRVUZKTEVOQlFVTTdRVUZEZEVRc1kwRkJUU3huUWtGQlowSXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhwUWtGQmFVSXNTVUZCU1N4RFFVRkRPMEZCU1RORUxGbEJRVWtzYlVKQlFXMUNMRlZCUVZVc1MwRkJUU3huUWtGQlowSXNTMEZCU3l4clFrRkJhMElzUjBGQlNUdEJRVU5vUml4clFrRkJVU3hSUVVGUkxHbERRVUZwUXl4UlFVRlJMR3RDUVVGclFpeERRVUZETzBGQlF6VkZPMEZCUVVFc1VVRkRSanRCUVVOQkxHTkJRVTBzV1VGQldTeFpRVUZaTEdsQ1FVRnBRaXhKUVVGSkxFTkJRVU03UVVGRGNFUXNZMEZCVFN4WFFVRlhMRmxCUVZrc2FVSkJRV2xDTEVsQlFVa3NRMEZCUXp0QlFVTnVSQ3hqUVVGTkxHVkJRV1VzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRPMEZCUTNKRExHTkJRVTBzWTBGQll5eFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNN1FVRkZjRU1zWTBGQlRTeFpRVUZaTEdsQ1FVRnBRaXhaUVVGWkxGZEJRVmM3UVVGRE1VUXNZMEZCVFN4WlFVRlpMR2xDUVVGcFFpeGpRVUZqTEZsQlFWazdRVUZETjBRc1kwRkJUU3hYUVVGWExHVkJRV1VzWTBGQll6dEJRVVU1UXl4alFVRk5PMEZCUVVFN1FVRkJRU3hWUVVGblJUdEJRVUZCTzBGQlNYUkZMR05CUVUwc2JVSkJRVzlDTEZGQlFWRXNhVUpCUVdsQ0xFMUJReTlETEZGQlFWRTdRVUZCUVN4VlFVTktMREpDUVVFeVFpeFBRVUZQTEVOQlFVTXNSMEZCUnl4dFFrRkJiVUk3UVVGQlFTeFZRVU42UkN4RlFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFZEJRVWNzVTBGQlV5eERRVUZETEZkQlFWY3NWMEZCVnl4TFFVRkxMRVZCUVVVc1JVRkJRenRCUVVGQkxGRkJRVU1zUlVGQlJTeERRVUZETzBGQlEyeEZMRmxCUVVrc1YwRkJWeXhaUVVGWkxFTkJRVU1zVVVGQlVTeHBRa0ZCYVVJc1NVRkJTVHRCUVVOMlJDeHJRa0ZCVVN4cFFrRkJhVUlzUzBGQlN6dEJRVUZCTEZGQlEyaERPMEZCUjBFc1kwRkJUU3h6UWtGQmMwSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhuUWtGQlowSTdRVUZEZUVRc1kwRkJUU3hWUVVGVkxFOUJRVThzVjBGQlZ6dEJRVU5zUXl4WlFVRkpMRk5CUVZNN1FVRkRXQ3hqUVVGSkxFTkJRVU1zYTBKQlFXdENMRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzVjBGQlZ5eEhRVUZITzBGQlEyeEVMR2REUVVGdlFpeExRVUZMTEU5QlFVOHNRMEZCUXl4RlFVRkZMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRVUVzVlVGRGRrVXNUMEZCVHp0QlFVTk1MR2REUVVGdlFpeExRVUZMTEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUVVFc1ZVRkRjRU03UVVGQlFTeFJRVU5HTzBGQlIwRXNaMEpCUVZFN1FVRkJRU3hWUVVOS08wRkJRVUVzV1VGRFNUdEJRVUZCTEZsQlFYRkNPMEZCUVVFc1dVRkJiMEk3UVVGQlFTeFpRVUZoTzBGQlFVRXNXVUZCVnp0QlFVRkJMRmxCUVZjN1FVRkJRU3haUVVGVk8wRkJRVUVzV1VGRGRFWTdRVUZCUVN4VlFVRjVRanRCUVVGQkxGVkJRemRDTEVWQlFVTXNVVUZCVVN4dlFrRkJiVUk3UVVGQlFTeFJRVUZETzBGQlFVRXNUVUZEYmtNN1FVRkZTaXhOUVVGTkxHdENRVUZyUWl4RFFVRkRMRk5CUVhsQ0xHVkJRVGhETzBGQlJUbEdMR05CUVUwc1owSkJRV2RDTEZkQlFWY3NWMEZCVnp0QlFVVTFReXhqUVVGTkxGTkJRVk03UVVGQlFTeFZRVU5pTEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkJRU3haUVVOa08wRkJRVUU3UVVGQlFTeGpRVVZKTEVOQlFVTXNVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUjBGQlJ5eEhRVUZITEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFZEJRVWNzVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFTeGpRVVZ1Uml4RFFVRkRMRkZCUVZFc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVkQlFVY3NVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUjBGQlJ5eEhRVUZITEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGQlFUdEJRVUZCTEZWQlFVTTdRVUZCUVR0QlFVRkJMRlZCUlRWR0xGRkJRVkVzVDBGQlR5eERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRkZCUVZFc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVkQlFVY3NVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUjBGQlJ5eEhRVUZITEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVUZCTEZGQlEyaElPMEZCUTBFc1dVRkJTU3hSUVVGUkxFOUJRVThzVjBGQlZ5eEhRVUZITzBGQlF5OUNMR2xDUVVGUExFdEJRVXNzVVVGQlVTeFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVRkJMRkZCUXk5Q08wRkJRMEVzV1VGQlNTeGpRVUZqTEZkQlFWYzdRVUZETjBJc1dVRkJTU3haUVVGWkxGZEJRVmNzUzBGQlN5eFpRVUZaTEVOQlFVTXNUVUZCVFN4SFFVRkhPMEZCUTNCRUxIZENRVUZqTEVOQlFVTXNVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dEJRVUZCTEZGQlF6RkRPMEZCUTBFc1dVRkJTU3haUVVGWkxGZEJRVmM3UVVGRE0wSXNXVUZCU1N4VlFVRlZMRmRCUVZjc1MwRkJTeXhWUVVGVkxFTkJRVU1zVFVGQlRTeEhRVUZITzBGQlEyaEVMSE5DUVVGWkxFTkJRVU1zUTBGQlF6dEJRVUZCTEZGQlEyaENPMEZCUTBFc1dVRkJTU3hWUVVGVkxGZEJRVmM3UVVGRGVrSXNXVUZCU1N4UlFVRlJMRmRCUVZjc1MwRkJTeXhSUVVGUkxFTkJRVU1zVFVGQlRTeEhRVUZITzBGQlF6VkRMRzlDUVVGVkxFTkJRVU1zUTBGQlF6dEJRVUZCTEZGQlEyUTdRVUZEUVN4WlFVRkpMRTlCUVU4c1YwRkJWenRCUVVOMFFpeFpRVUZKTEV0QlFVc3NWMEZCVnl4SFFVRkhPMEZCUTNKQ0xHbENRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRPMEZCUVVFc1VVRkRaRHRCUVVOQkxHVkJRVThzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4SFFVRkhMRWRCUVVjc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRE9VSXNhMEpCUVZVc1EwRkJReXhEUVVGRExFVkJRVVVzVDBGQlR5eFBRVUZQTzBGQlF6VkNMRzlDUVVGWkxFTkJRVU1zUTBGQlF5eEZRVUZGTEU5QlFVOHNVMEZCVXp0QlFVTm9ReXh6UWtGQll5eERRVUZETEVOQlFVTXNSVUZCUlN4UFFVRlBMRmRCUVZjN1FVRkRjRU1zWTBGQlRTeHhRa0ZEUml4dFEwRkJiVU1zUlVGQlF5eEhRVUZITEZsQlFWa3NUVUZCVFN4VFFVRlRMRmRCUVZjc1dVRkJWeXhIUVVGSExFMUJRVTA3UVVGRGNrY3NaMEpCUVZFc1VVRkJVVHRCUVVGQkxGVkJRMW83UVVGQlFTeFZRVUZSTzBGQlFVRXNWVUZEVWl4cFFrRkJaU3huUWtGQlowSXNRMEZCUXl4WlFVRlpMRU5CUVVNc1IwRkJSeXhaUVVGWkxFTkJRVU1zUjBGQlJ5eFpRVUZaTEVOQlFVTXNRMEZCUXl4SlFVTXZReXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEZsQlFWa3NRMEZCUXl4SFFVRkhMRmxCUVZrc1EwRkJReXhEUVVGRE8wRkJRVUVzVVVGQlF5eERRVUZETzBGQlFVRXNUVUZEZEVZN1FVRkZUeXhOUVVGTkxHZENRVUZuUWl4RFFVRkRMRk5CUVhsQ0xHVkJRVGhETzBGQlEyNUhMRkZCUVVGQkxHbENRVUZsTEZGQlFWRXNVVUZCVVN4VlFVRlZPMEZCUTNwRExGbEJRVWtzVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRmRCUVZjc1IwRkJSenRCUVVOMlF5d3dRa0ZCWjBJc1UwRkJVeXhWUVVGVk8wRkJRVUVzVVVGRGNrTXNUMEZCVHp0QlFVTk1MREJDUVVGblFpeFRRVUZUTEZGQlFWRXNVVUZCVVN4VlFVRlZPMEZCUVVFc1VVRkRja1E3UVVGQlFTeE5RVU5HTzBGQlFVRTdRVUZCUVRzN08wRkRjRlJCTEUxQlowSk5MSGxDUVd0RVR5eFJRVTlCTzBGQmVrVmlPMEZCUVVFN1FVRkJRVHRCUVVkQk8wRkJSVUU3UVVGRFFUdEJRVWRCTzBGQlQwRXNUVUZCVFN3d1FrRkRSaXhEUVVGRExGZEJRVzFDTEZsQlFTdENMRmRCUVhWQ0xHVkJRM1pFTzBGQlEySXNZMEZCVFN4aFFVRmhMRlZCUVZVc1MwRkJTeXhWUVVGVk8wRkJRelZETEdOQlFVMHNUMEZCVHl4WFFVRlhPMEZCUTNoQ0xHTkJRVTBzVVVGQlVTeGpRVUZqTEZOQlFWTXNWMEZCVnl4SlFVRkpPMEZCUTNCRUxHTkJRVTBzVTBGQlV5eGxRVUZsTEZWQlFWVXNWMEZCVnl4SlFVRkpPMEZCUTNaRUxHTkJRVTBzV1VGQldTeFZRVUZWTERaQ1FVRTRRaXhWUVVGVkxHTkJRV01zUlVGQlJTeERRVUZETEVsQlF6TkNMRTlCUVU4c1ZVRkJWU3hwUWtGQmFVSXNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkRhRWNzWTBGQlRTeFBRVUZQTEZWQlFWVXNZMEZCWXl4WFFVRlhMRWxCUVVrN1FVRkRjRVFzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQkswSTdRVUZEZEVRc1owSkJRVTBzVVVGQlVTeFJRVUZSTEUxQlFVMHNWMEZCVnl4blFrRkJaMElzWlVGQlpTeERRVUZETzBGQlEzWkZMR2RDUVVGTkxFMUJRVTBzWVVGQllTeDNRa0ZCZDBJc2FVSkJRV2xDTEVsQlFVazdRVUZEZEVVc1owSkJRVTBzWVVGQllTeFhRVUZYTEZWQlFWVXNVMEZCVXl4WFFVRlhMRmxCUVZrc1UwRkJVeXhOUVVGTk8wRkJRM1pHTEdkQ1FVRk5MR0ZCUVdFc1YwRkJWeXhWUVVGVkxFMUJRVTBzVTBGQlV5eFhRVUZYTEZsQlFWa3NTMEZCU3p0QlFVTnVSaXhwUWtGQlR6dEJRVUZCTEd0Q1FVVklMR0ZCUVdFc1owSkJRV2RDTEdOQlFXTXNTMEZCU3l4RlFVTXpReXhuUWtGQlowSXNVVUZCVVN4TFFVRkxMRVZCUXpkQ0xHbENRVUZwUWl4UFFVRlBMRTFCUVUwc1EwRkJRenRCUVVGQkxHdENRVU5zUXl4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQkxHOUNRVU4wUWl4aFFVRmhMSE5EUVVGelF5eHhRa0ZCY1VJc1EwRkJRenRCUVVGQkxIVkRRVU4wUkN4UFFVRlBMR2RDUVVGblFpeFpRVUZaTEVOQlFVTTdRVUZCUVN3NFFrRkROME1zVDBGQlR5eExRVUZMTEV0QlFVczdRVUZCUVN4elEwRkRWQ3hWUVVGVk8wRkJRVUVzY1VOQlExZ3NWVUZCVlR0QlFVRkJPMEZCUVVFc2MwSkJSWHBDTEUxQlFVMHNWMEZCVnl4blFrRkJaMElzYVVKQlFXbENMRkZCUVZFc1EwRkJRenRCUVVGQkxHdERRVU12UXl4TlFVRk5MR0ZCUVdFc1kwRkJZeXhEUVVGRE8wRkJRVUU3UVVGQlFTeHZRa0ZGYUVRc1QwRkJUeXhaUVVGWkxHTkJRV01zUzBGQlN5eERRVUZETzBGQlFVRTdRVUZCUVN4UlFVVnFSRHRCUVVOQkxHVkJRVTg3UVVGQlFTeFZRVU5NTEUxQlFVMDdRVUZCUVN4VlFVTk9MR0ZCUVdFc1JVRkJReXhOUVVGTkxGZEJRVmNzVlVGQlZTeHRRa0ZCYlVJc1EwRkJReXhOUVVGTkxFVkJRVU03UVVGQlFTeFZRVU53UlN4WlFVRlpMRTlCUVU4N1FVRkJRU3haUVVOcVFpeFRRVUZUTEVOQlFVTXNSVUZCUXl4TlFVRk5MRmxCUVZrc1ZVRkJWU3hWUVVGVExFTkJRVU03UVVGQlFTeFpRVU5xUkN4bFFVRmxMRVZCUVVNc1IwRkJSeXhMUVVGTE8wRkJRVUVzWTBGQlN5eGhRVUZoTzBGQlFVRTdRVUZCUVN4WlFVRjFRaXhGUVVGRE8wRkJRVUVzV1VGRGJFVXNhVUpCUVdsQ08wRkJRVUVzWTBGRFppeEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxGZEJRVlU3UVVGQlFTeGpRVUZITEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzUzBGQlNUdEJRVUZCTEdOQlF6ZEZMRWRCUVVjc01rSkJRVEpDTEZsQlFWa3NWVUZCVlR0QlFVRkJMRmxCUTNSRU8wRkJRVUVzVlVGRlJqdEJRVUZCTEZWQlEwRTdRVUZCUVN4UlFVTkdPMEZCUVVFc1RVRkRSanRCUVVkRUxFMUJRVTBzVTBGQlV5eERRVUZETEZOQlFYbENMR1ZCUVhWRE8wRkJRM0pHTEdOQlFVMHNZVUZCWVN4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRk8wRkJRM0pETEdOQlFVMHNXVUZCV1N4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRk8wRkJRM0JETEdOQlFVMHNUMEZCVHl4UlFVRlJMRTlCUVU4c1EwRkJRenRCUVVNM1FpeG5Ra0ZCVVN4UlFVRlJMSGRDUVVGM1FpeFhRVUZYTEZsQlFWa3NUVUZCVFN4VlFVRlZMRWRCUVVjc1JVRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4TlFVTnFSenRCUVVWUExFMUJRVTBzZDBKQlFYZENMRU5CUVVNc1pVRkJNRVE3UVVGRE9VWXNZMEZCVFN4WlFVRlpMRmRCUVZjc1kwRkJkMEk3UVVGRGNrUXNZMEZCVFN4VlFVRlZMRmRCUVZjc1dVRkJjMEk3UVVGRGFrUXNaVUZCVHl3MFFrRkJORUlzUlVGQlF5eFhRVUZYTEZGQlFVOHNRMEZCUXp0QlFVRkJMRTFCUTNwRU8wRkJRVUU3UVVGQlFUczdPMEZETjBWQkxFMUJiMEpOUXl4clFrRlRRVU1zYlVKQlYwRXNLMEpCTWtSUExHTkJTMEU3UVVGNFIySTdRVUZCUVR0QlFVRkJPMEZCUjBFN1FVRkZRVHRCUVVOQk8wRkJSMEU3UVVGWFFTeE5RVUZOUkN4dFFrRkJhVUlzUTBGQlF5eFhRVUYzUXp0QlFVTTVSQ3haUVVGSkxFTkJRVU1zVlVGQlZTeFBRVUZQTEZkQlFWY3NSMEZCUnp0QlFVTnNReXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNaME5CUVdkRE8wRkJRVUVzVVVGRGJFUTdRVUZEUVN4WlFVRkpMRTlCUVU4c1EwRkJReXhGUVVGRkxFdEJRVXNzVjBGQlZ5eEhRVUZITzBGQlF5OUNMR2RDUVVGTkxFbEJRVWtzVFVGQlRTeHBRMEZCYVVNN1FVRkJRU3hSUVVOdVJEdEJRVUZCTEUxQlEwWTdRVUZGUVN4TlFVRk5ReXh2UWtGQmJVSXNRMEZCUXl4TlFVRm5RaXhOUVVGakxFOUJRWE5DTEZkQlFXdERPMEZCUXpsSExHTkJRVTBzWTBGQll5eERRVUZETzBGQlEzSkNMRzlDUVVGWkxFdEJRVXNzWTBGQll5eFBRVUZQTEV0QlFVc3NUMEZCVHl4UlFVRlJMRTFCUVUwc1MwRkJTeXhQUVVGUE8wRkJRVUVzWVVGRGFrVXNUVUZCVFN4TFFVRkxMRTlCUVU4c1IwRkJSenRCUVVOb1F5eHBRa0ZCVXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hOUVVGTkxFVkJRVVVzUjBGQlJ6dEJRVU0zUWl4elFrRkJXU3hMUVVGTExFMUJRVTBzVjBGQlZ5eExRVUZMTEV0QlFVc3NRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU03UVVGQlFTeFJRVU0xUkR0QlFVTkJMRzlDUVVGWkxFdEJRVXNzV1VGQldUdEJRVU0zUWl4bFFVRlBMRmxCUVZrc1MwRkJTeXhKUVVGSk8wRkJRVUVzVFVGRE9VSTdRVUZGUVN4TlFVRk5MR2REUVVGblF5eERRVUZETEdGQlFYbENMR1ZCUVc5RU8wRkJRMnhJTEZsQlFVa3NSMEZCVnl4SFFVRlhMRWRCUVZjN1FVRkRja01zV1VGQlNUdEJRVU5LTEZsQlFVazdRVUZEU2l4alFVRk5MR2RDUVVGblFpeFhRVUZYTEZkQlFWYzdRVUZETlVNc1kwRkJUU3haUVVGWkxGZEJRVmM3UVVGRE4wSXNZMEZCVFN4WlFVRlpMRmRCUVZjc1UwRkJVenRCUVVOMFF5eFpRVUZKTEdWQlFXVTdRVUZEYWtJc1YwRkJReXhIUVVGSExFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NXVUZCV1R0QlFVTXpRaXhyUWtGQlVTeFpRVUZaTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1YwRkJWeXhYUVVGWExFbEJRVXNzWVVGQllTeERRVUZGTEVsQlEzQkVMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzU1VGQlN5eGhRVUZoTEVkQlFVa3NWMEZCVnl4VFFVRlRPMEZCUTNoRkxHbENRVUZQTEZsQlFWa3NRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU03UVVGQlFTeFJRVU16UkN4UFFVRlBPMEZCUTB3c1YwRkJReXhIUVVGSExFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRXRCUVVzc1EwRkJReXhIUVVGSExGbEJRVmtzUzBGQlN5eERRVUZETEVkQlFVY3NXVUZCV1N4TFFVRkxMRU5CUVVNc1IwRkJSeXhaUVVGWkxFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEyeEhMR3RDUVVGUkxGbEJRVmtzUTBGQlF5eEhRVUZITEZkQlFWY3NWMEZCVnl4SlFVRkxMR0ZCUVdFc1IwRkJTU3hIUVVGSExFTkJRVU1zU1VGRGNFUXNRMEZCUXl4SFFVRkhMRWxCUVVzc1lVRkJZU3hIUVVGSkxGZEJRVmNzVjBGQlZ5eEhRVUZITEVOQlFVTTdRVUZEZUVVc2FVSkJRVThzV1VGQldTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJRenRCUVVGQkxGRkJRek5FTzBGQlEwRXNZMEZCVFN4elFrRkJjMElzV1VGQldTeFJRVUZSTEV0QlFVczdRVUZEY2tRc1kwRkJUU3h2UWtGQmIwSXNiMEpCUVc5Q0xFdEJRVXM3UVVGRGJrUXNZMEZCVFN4blFrRkJaMElzV1VGQldUdEJRVVZzUXl4alFVRk5MR2RDUVVGblFpeGpRVUZqTEV0QlFVc3NaVUZCWlN4cFFrRkJhVUk3UVVGRGVrVXNZMEZCVFN4bFFVRmxMR1ZCUVdVc1ZVRkJWU3hsUVVGbExHbENRVUZwUWp0QlFVVTVSU3hqUVVGTkxHdENRVUZyUWl4RFFVRkRMR2xDUVVFclFqdEJRVUZCTEVsQlEzUkVMR0ZCUVdFc1owSkJRV2RDTEdWQlFXVXNTMEZCU3l4RlFVRkZMR2xDUVVGcFFpeGxRVUZsTEZsQlFWa3NRMEZCUXp0QlFVRkJPMEZCUVVFc1NVRkZhRWRCTEd0Q1FVRnBRaXhOUVVGTkxHMUNRVUZ0UWl4bFFVRmxMRmxCUVZrc1EwRkJRenRCUVVGQk8wRkJRVUVzU1VGRmRFVXNZVUZCWVN4VlFVRlZMRU5CUVVNN1FVRkJRU3hOUVVOMFFpeGhRVUZoTEhORFFVRnpReXh6UWtGQmMwSXNRMEZCUXp0QlFVRkJPMEZCUVVFc2IwSkJSVFZFTEdGQlFXRXNaMEpCUVdkQ0xGbEJRVmtzUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVN4TlFVZDRSQ3hoUVVGaExGbEJRVmtzWTBGQll5eGpRVUZqTEdGQlFXRXNWVUZCVlN4RFFVRkRMRU5CUVVNN1FVRkJRVHRCUVVkc1JpeGxRVUZQTzBGQlFVRXNWVUZEVEN4TlFVRk5PMEZCUVVFc1ZVRkRUaXhoUVVGaExFVkJRVU1zVFVGQlRTeEhRVUZITEZsQlFWa3NTVUZCU1N4SlFVRkpMRmRCUVZjc1UwRkJVeXhKUVVGSkxGZEJRVmNzU1VGQlNTeEpRVUZKTEcxQ1FVRnRRaXhEUVVGRExFMUJRVTBzUlVGQlF6dEJRVUZCTEZWQlEycElMRmxCUVZrc1EwRkJReXhYUVVGWE8wRkJRM1JDTEd0Q1FVRk5MR05CUVdNc1owSkJRV2RDTEVOQlFVTXNSMEZCUnl4SlFVRkpMRmRCUVZjc1NVRkJTU3hYUVVGWExFbEJRVXNzWVVGQllTeERRVUZGTEVsQlEzUkVMRU5CUVVNc1IwRkJSeXhKUVVGTExHRkJRV0VzUjBGQlNTeEpRVUZKTEZkQlFWY3NTVUZCU1N4VFFVRlRPMEZCUXpGR0xHdENRVUZOTEdGQlFXRXNWVUZCVlN4TFFVRkxMRmRCUVZjN1FVRkROME1zYTBKQlFVMHNhMEpCUVd0Q0xHOUNRVUZ2UWp0QlFVTTFReXhyUWtGQlRTeHBRa0ZCYVVJc1ZVRkJWU3huUWtGQlowSXNhVUpCUVdsQ0xFbEJRVWs3UVVGRGRFVXNiVUpCUVU4N1FVRkJRU3hqUVVOTUxGTkJRVk1zUTBGQlF5eEZRVUZETEUxQlFVMHNZVUZCWVN4VlFVRlZMRTlCUVU4c1EwRkJReXhGUVVGRkxGTkJRVkVzUTBGQlF6dEJRVUZCTEdOQlF6TkVMR1ZCUVdVc1JVRkJReXhIUVVGSExFdEJRVXM3UVVGQlFTeG5Ra0ZCU3l4aFFVRmhPMEZCUVVFN1FVRkJRU3hqUVVGMVFpeEZRVUZETzBGQlFVRXNZMEZEYkVVc2FVSkJRMGtzUTBGQlF5eEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxGZEJRVlVzUjBGQlJ5eEhRVUZITERKQ1FVRXlRaXhwUWtGQmFVSXNZMEZCWXl4RFFVRkRPMEZCUVVFc1dVRkRhRWc3UVVGQlFTeFZRVU5HTzBGQlFVRXNWVUZEUVR0QlFVRkJMRkZCUTBZN1FVRkJRU3hOUVVOR08wRkJSVThzVFVGQlRTeGxRVUZsTEVOQlFVTXNVMEZCZVVJc1pVRkJOa003UVVGRGFrY3NVVUZCUVVRc2FVSkJRV1VzVVVGQlVTeE5RVUZOTzBGQlF6ZENMR2RDUVVGUkxGRkJRVkVzT0VKQlFUaENMRkZCUVZFc1QwRkJUeXhEUVVGRExFZEJRVWNzVlVGQlZTeERRVUZETzBGQlFVRXNUVUZET1VVN1FVRkZUeXhOUVVGTkxEaENRVUU0UWl4RFFVRkRMR1ZCUTNoRExEUkNRVUUwUWp0QlFVRkJMRkZCUXpGQ0xGZEJRVmNzVjBGQlZ6dEJRVUZCTEZGQlEzUkNMRTFCUVUwc1YwRkJWenRCUVVGQkxGRkJRMnBDTEZGQlFWRXNWMEZCVnp0QlFVRkJMRTFCUTNKQ0xFTkJRVU03UVVGQlFUdEJRVUZCT3pzN1FVTTNSMHdzVFVGelFrMHNaVUZGUVN4aFFVTkJMR2xDUVVOQkxGbEJRMEVzWjBKQlVVRXNXVUZ4UWtFc1owSkJORWhCTEZkQlJVRXNlVUpCSzBkUExGRkJUMEU3UVVFMVUySTdRVUZCUVR0QlFVRkJPMEZCUjBFN1FVRkZRVHRCUVVOQk8wRkJSMEU3UVVGaFFTeE5RVUZOTEdkQ1FVTkdPMEZCUTBvc1RVRkJUU3hqUVVGakxFMUJRVTBzWjBKQlFXZENPMEZCUXpGRExFMUJRVTBzYTBKQlFXdENMRTFCUVUwc1kwRkJZenRCUVVNMVF5eE5RVUZOTEdGQlFXRXNUVUZCVFN4alFVRmpMRkZCUVZFN1FVRkRMME1zVFVGQlRTeHBRa0ZCYVVJc1RVRkJUU3hoUVVGaE8wRkJVVEZETEUxQlFVMHNZVUZCVGl4TlFVRnBRanRCUVVGQkxGRkJRMllzV1VGQldTeGhRVUZoTEVsQlFVazdRVUZETTBJc1pVRkJTeXhyUWtGQmEwSXNiMEpCUVVrc1NVRkJjMEk3UVVGRGFrUXNaVUZCU3l4aFFVRmhPMEZCUVVFc1VVRkRjRUk3UVVGQlFUdEJRVUZCTEZGQlIwRXNWVUZCVlN4UlFVRm5RaXhQUVVGbE8wRkJRM1pETEdOQlFVa3NVVUZCVVN4TFFVRkxMR2RDUVVGblFpeEpRVUZKTEUxQlFVMDdRVUZETTBNc1kwRkJTU3hWUVVGVkxGRkJRVmM3UVVGRGRrSXNiMEpCUVZFc1EwRkJReXhMUVVGTE8wRkJRVUVzVlVGRGFFSXNUMEZCVHp0QlFVTk1MR3RDUVVGTkxFdEJRVXNzUzBGQlN6dEJRVUZCTEZWQlEyeENPMEZCUTBFc1pVRkJTeXhuUWtGQlowSXNTVUZCU1N4UlFVRlJMRXRCUVVzN1FVRkJRU3hSUVVONFF6dEJRVUZCTzBGQlFVRXNUVUZKUmp0QlFVVkJMRTFCUVUwc2FVSkJRVTRzVFVGQmNVSTdRVUZCUVN4UlFVTnVRaXhaUVVGWkxGRkJRU3RETEZWQlFXdENPMEZCUVd4Q08wRkJRM3BFTEdWQlFVc3NZMEZCWXp0QlFVTnVRaXhsUVVGTExHVkJRV1VzYjBKQlFVa3NTVUZCZDBJN1FVRkRhRVFzWlVGQlN5eE5RVUZOTEVsQlFVa3NUVUZCYTBJN1FVRkRha01zWlVGQlN5eGhRVUZoTEVOQlFVTTdRVUZIYmtJc1kwRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEZOQlFWTXNVMEZCVXl4SlFVRkpMRWxCUVVrc1UwRkJVeXhOUVVGTkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZPMEZCUTJ4R0xHTkJRVWtzUTBGQlF5eEpRVUZKTEUxQlFVMHNUMEZCVHl4alFVRmpMRU5CUVVNc1IwRkJSenRCUVVOMFF5eHJRa0ZCVFN4SlFVRkpMRTFCUVUwc2EwSkJRV3RDTzBGQlFVRXNWVUZEY0VNN1FVRkRRU3huUWtGQlRTeGhRVUZoTEVsQlFVa3NUVUZCVFN4SFFVRkhPMEZCUTJoRExIRkNRVUZYTEZGQlFWRXNRMEZCUXl4WFFVRlhMRlZCUVZVN1FVRkRka01zYTBKQlFVMHNUMEZCVHl4UFFVRlBMRXRCUVVzc1JVRkJSU3hMUVVGTExFMUJRVTA3UVVGRGRFTXNaMEpCUVVrc1EwRkJReXhWUVVGVkxFMUJRVTBzVDBGQlR5eGxRVUZsTEVOQlFVTXNSMEZCUnp0QlFVTTNReXh2UWtGQlRTeEpRVUZKTEUxQlFVMHNhMEpCUVd0Q08wRkJRVUVzV1VGRGNFTTdRVUZEUVN4clFrRkJUU3hoUVVGaExFdEJRVXNzV1VGQldTeFhRVUZYTEUxQlFVMHNUVUZCVFN4TFFVRkxPMEZCUTJoRkxHbENRVUZMTEVsQlFVa3NTMEZCU3l4VlFVRlZPMEZCUVVFc1ZVRkRNVUlzUTBGQlF6dEJRVWRFTEdOQlFVa3NVVUZCVVN4SlFVRkpPMEZCUldRc2JVSkJRVThzUTBGQlF5eEhRVUZITEV0QlFVc3NZVUZCWVN4UlFVRlJMRU5CUVVNc1JVRkRNVUlzVDBGQlR5eERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkpMRTFCUVU4c1MwRkJTeXhWUVVGVkxFdEJRVXNzVVVGQlVTeExRVUZOTEVWQlF6TkVMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeEhRVUZITEVWQlEyeENMRXRCUVVzc1JVRkJSVHRCUVVGQkxGVkJRM0pDTEU5QlFVODdRVUZEVEN4blFrRkJTU3hEUVVGRExFbEJRVWtzVFVGQlRTeFBRVUZQTEZkQlFWY3NRMEZCUXl4SFFVRkhPMEZCUTI1RExHOUNRVUZOTEVsQlFVa3NUVUZCVFN4aFFVRmhPMEZCUVVFc1dVRkRMMEk3UVVGQlFTeFZRVU5HTzBGQlIwRXNaMEpCUVUwc1lVRkJZU3hKUVVGSkxFMUJRVTBzVDBGQlR5eGxRVUZsTEVkQlFVY3NRMEZCUXp0QlFVTjJSQ3h6UWtGQldTeFJRVUZSTEVOQlFVTXNWMEZCVnp0QlFVTTVRaXhuUWtGQlNTeFhRVUZYTEU5QlFVODdRVUZEY0VJc2JVSkJRVXNzWVVGQllTeExRVUZMTEZkQlFWY3NUMEZCVHl4TFFVRkxMRmxCUVZrN1FVRkJRU3haUVVNMVJDeFBRVUZQTzBGQlEwd3NiMEpCUVUwc1QwRkJUeXhMUVVGTExHRkJRV0VzU1VGQlNTeE5RVUZOTzBGQlEzcERMR3RDUVVGSkxGTkJRVk1zVVVGQlZ6dEJRVU4wUWl4elFrRkJUU3hKUVVGSkxFMUJRVTBzYjBKQlFXOUNPMEZCUVVFc1kwRkRkRU03UVVGRFFTeHRRa0ZCU3l4WFFVRlhMRXRCUVVzc1MwRkJTeXhSUVVGUk8wRkJRVUVzV1VGRGNFTTdRVUZCUVN4VlFVTkdMRU5CUVVNN1FVRkRSQ3hsUVVGTExFMUJRVTBzUzBGQlN5eFpRVUZaTEV0QlFVc3NUMEZCVHl4TFFVRkxMRlZCUVZVN1FVRkJRU3hSUVVONlJEdEJRVUZCTzBGQlFVRTdRVUZCUVN4UlFVZEJMRlZCUVZVc1VVRkJaMElzVlVGQmEwSXNXVUZCYjBJN1FVRkRPVVFzWTBGQlNTeFBRVUZQTEV0QlFVc3NZVUZCWVN4SlFVRkpMRTFCUVUwN1FVRkRka01zWTBGQlNTeFRRVUZUTEZGQlFWYzdRVUZEZEVJc1owSkJRVWtzUzBGQlN5eGhRVUZoTEZsQlFWa3NTMEZCU3l4VlFVRlZMRWRCUVVjN1FVRkRiRVFzYjBKQlFVMHNTVUZCU1N4TlFVRk5MRzlDUVVGdlFqdEJRVUZCTEZsQlEzUkRMRTlCUVU4N1FVRkRUQ3h0UWtGQlN6dEJRVU5NTEcxQ1FVRkxMR0ZCUVdFc1MwRkJTeXhWUVVGVk8wRkJRVUVzV1VGRGJrTTdRVUZCUVN4VlFVTkdMRTlCUVU4N1FVRkRUQ3h0UWtGQlR5eEZRVUZETEU5QlFVOHNSMEZCUnl4VlFVRlZMR05CUVdNc1EwRkJReXhWUVVGVkxFVkJRVU03UVVGQlFTeFZRVU40UkR0QlFVTkJMR1ZCUVVzc1lVRkJZU3hKUVVGSkxGRkJRVkVzU1VGQlNUdEJRVUZCTEZGQlEzQkRPMEZCUVVFN1FVRkJRU3hSUVVkQkxGbEJRVmtzVFVGQll5eFRRVUZyUWl4TlFVRjVRaXhSUVVGUkxFbEJRV2RDTzBGQlF6TkdMR2RDUVVGTkxFOUJRVThzUzBGQlN6dEJRVU5zUWl4alFVRkpMRmRCUVZjN1FVRkRaaXhqUVVGSkxHVkJRV1VzUTBGQlF6dEJRVU53UWl4alFVRkpMRlZCUVZVN1FVRkZaQ3hqUVVGSkxFTkJRVU1zUzBGQlN5eE5RVUZOTEU5QlFVOHNaVUZCWlN4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExGTkJRVk1zUzBGQlN6dEJRVU55UlN4clFrRkJUU3hKUVVGSkxFMUJRVTBzYTBKQlFXdENPMEZCUVVFc1ZVRkRjRU03UVVGRFFTeG5Ra0ZCVFN4bFFVRmxMRXRCUVVzc1RVRkJUU3hQUVVGUExHVkJRV1VzUjBGQlJ5eERRVUZETzBGQlF6RkVMR2RDUVVGTkxHRkJRV0VzU1VGQlNTeFhRVUZYTEV0QlFVczdRVUZGZGtNc2QwSkJRV01zVVVGQlVTeERRVUZETEZGQlFXZENMRTFCUVdNN1FVRkRia1FzWjBKQlFVa3NWMEZCVnl4UFFVRlBPMEZCUTNCQ0xHdENRVUZKTEZWQlFWVTdRVUZEV2l4elFrRkJUU3hKUVVGSkxFMUJRVTBzTmtOQlFUWkRPMEZCUVVFc1kwRkRMMFE3UVVGRFFTeDVRa0ZCVnp0QlFVTllMRzlDUVVGTkxHOUNRVUZ2UWl4UFFVRlBMR0ZCUVdFc1UwRkJVenRCUVVOMlJDeHJRa0ZCU1N4dlFrRkJiMElzUjBGQlJ6dEJRVU42UWl4elFrRkJUU3hKUVVGSkxFMUJRVTBzZDBKQlFYZENPMEZCUVVFc1kwRkRNVU03UVVGRFFTdzJRa0ZCWlN4TFFVRkxMRTFCUVUwc1UwRkJVeXhWUVVGVkxHbENRVUZwUWp0QlFVTTVSQ3hyUWtGQlNTeExRVUZMTEdGQlFXRTdRVUZEY0VJc2IwSkJRVWtzUzBGQlN5eGhRVUZoTEZkQlFWY3NZVUZCWVN4VlFVTXhReXhMUVVGTExHRkJRV0VzVTBGQlV5eE5RVUZOTEdGQlFXRXNVMEZCVXl4SFFVRkhPMEZCUXpWRUxIZENRVUZOTEVsQlFVa3NUVUZCVFN3NFFrRkJPRUk3UVVGQlFTeG5Ra0ZEYUVRN1FVRkJRU3hqUVVOR0xGZEJRVmNzVTBGQlV6dEJRVU5zUWl4eFFrRkJTeXhqUVVGak8wRkJRMjVDTEhGQ1FVRkxMR1ZCUVdVN1FVRkJRU3hqUVVOMFFpeFBRVUZQTzBGQlEwd3NjMEpCUVUwc1NVRkJTU3hOUVVGTkxIVkRRVUYxUXp0QlFVRkJMR05CUTNwRU8wRkJSVUVzZFVKQlFWTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1lVRkJZU3hSUVVGUkxFdEJRVXM3UVVGRE5VTXNjMEpCUVUxRkxGVkJRVk1zVDBGQlR5eGhRVUZoTEVsQlFVa3NWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVONFJDd3lRa0ZCVnl4VlFVRlZRU3hUUVVGUkxFbEJRVWtzUTBGQlF6dEJRVU5zUXl4eFFrRkJTeXhWUVVGVlFTeFRRVUZSTEV0QlFVc3NVMEZCVXl4SFFVRkhMRXRCUVVzN1FVRkJRU3hqUVVNdlF6dEJRVUZCTEZsQlEwWXNUMEZCVHp0QlFVTk1MSGxDUVVGWExGVkJRVlVzVVVGQlVTeExRVUZMTEV0QlFVc3NZMEZCWXl4TFFVRkxMR0ZCUVdFc1UwRkJVeXhKUVVGSkxFVkJRVVU3UVVGRGRFWXNiVUpCUVVzc1ZVRkJWU3hSUVVGUkxFdEJRVXNzVTBGQlV5eEhRVUZITEV0QlFVczdRVUZCUVN4WlFVTXZRenRCUVVGQkxGVkJRMFlzUTBGQlF6dEJRVU5FTEdsQ1FVRlBPMEZCUVVFc1VVRkRWRHRCUVVGQk8wRkJRVUVzVFVGUlJqdEJRVVZCTEUxQlFVMHNXVUZCV1N4RFFVRkRMRk5CUVhsQ0xFOUJRVTg3UVVGRmJrUXNUVUZCVFN3d1FrRkRSaXhEUVVGRExHRkJRWFZETEZWQlFXdENMR2RDUVVONlJDeG5Ra0ZCWjBRN1FVRkRMME1zWTBGQlRTeFJRVUZSTEZsQlFWa3NTVUZCU1N4RFFVRkRMRk5CUVZNc1MwRkJTeXhOUVVGTk8wRkJRMjVFTEdOQlFVMHNXVUZCV1N4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxGVkJRVlVzWTBGQll5eFJRVUZSTEV0QlFVc3NTVUZCU1N4VlFVRlZMRWxCUVVrc1EwRkJRenRCUVVNelJpeGpRVUZOTEdGQlFXRXNWVUZCVlN4TFFVRkxMRmRCUVZjN1FVRkROME1zWTBGQlRTeFRRVUZUTEdWQlFXVXNWVUZCVlN4VlFVRlZMRmxCUVZrc1RVRkJUVHRCUVVOd1JTeGpRVUZOTEd0Q1FVTkdMRU5CUVVNc1IwRkJSeXhsUVVGbExHRkJRV0VzUzBGQlN5eERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhsUVVGbExFbEJRVWtzWjBKQlFXZENMRWxCUVVrc1RVRkJUU3hEUVVGRE8wRkJRemxITEdOQlFVMHNhMEpCUVd0Q0xFTkJRVU1zYVVKQlFTdENPMEZCUTNSRUxHZENRVUZOTEZWQlFXOUNMRU5CUVVNN1FVRkRNMElzWjBKQlFVMHNWMEZCVnp0QlFVTnFRaXhuUWtGQlRTeFZRVUZWTzBGQlEyaENMR2RDUVVGTkxGbEJRVms3UVVGRGJFSXNaMEpCUVUwc2MwSkJRV2RETEVOQlFVTTdRVUZEZGtNc1owSkJRVTBzZFVKQlFXbERMRU5CUVVNN1FVRkRlRU1zWjBKQlFVMHNkVUpCUVdsRExFTkJRVU03UVVGRGVFTXNaMEpCUVUwc2EwSkJRVFJDTEVOQlFVTTdRVUZEYmtNc1owSkJRVTBzZVVKQlFYbENMR1ZCUVdVc1lVRkJZU3hUUVVGVExHVkJRV1VzU1VGQlNTeG5Ra0ZCWjBJN1FVRkRka2NzZVVKQlFXVXNZVUZCWVN4UlFVRlJMRU5CUVVNc1RVRkJUU3hYUVVGWE8wRkJRM0JFTEdkQ1FVRkpMR1ZCUVdVc1NVRkJTU3huUWtGQlowSXNTVUZCU1N4TlFVRk5MRWRCUVVjN1FVRkRiRVFzYjBKQlFVMHNZMEZCWXl4bFFVRmxMRWxCUVVrc1owSkJRV2RDTEVsQlFVa3NUVUZCVFN4SlFVRkpMRU5CUVVNN1FVRkRkRVVzYTBKQlFVa3NaMEpCUVdkQ0xGRkJRVmM3UVVGRE4wSXNLMEpCUVdVc1NVRkJTU3hSUVVGUkxFTkJRVU1zVFVGQlRTeE5RVUZOTzBGQlEzUkRMSE5DUVVGSkxFdEJRVXNzWVVGQllTeFRRVUZUTEVOQlFVTXNSMEZCUnp0QlFVTnFReXd3UWtGQlRTeFZRVUZWTEV0QlFVc3NaMEpCUVdkQ0xFbEJRVWtzVFVGQlRUdEJRVU12UXl4M1FrRkJTU3haUVVGWkxGRkJRVmM3UVVGRGVrSXNORUpCUVUwc1NVRkJTU3hOUVVGTkxITkNRVUZ6UWp0QlFVRkJMRzlDUVVONFF6dEJRVU5CTERSQ1FVRlJMRkZCUVZFc1EwRkJReXhWUVVGVk8wRkJRM3BDTERoQ1FVRlJMRXRCUVVzc1IwRkRWQ3hWUVVGVkxFTkJRVU1zUlVGQlJUdEJRVUZCTEhkQ1FVTlVMRkZCUVZFc1EwRkJRenRCUVVGQkxIZENRVUZYTzBGQlFVRXNkMEpCUVU4c1QwRkJUeXhYUVVGWExHbENRVUZwUWl4WFFVRlhPMEZCUVVFc2MwSkJRVU1zUTBGQlF5eEZRVUZGTzBGQlFVRXNiMEpCUTNaR0xFTkJRVU03UVVGQlFTeHJRa0ZEU0R0QlFVRkJMR2RDUVVOR0xFTkJRVU03UVVGQlFTeGpRVU5JTzBGQlFVRXNXVUZEUml4UFFVRlBPMEZCUTB3c05rSkJRV1VzU1VGQlNTeFJRVUZSTEVOQlFVTXNUVUZCVFN4TlFVRk5PMEZCUTNSRExHOUNRVUZKTEV0QlFVc3NZVUZCWVN4VFFVRlRMRU5CUVVNc1IwRkJSenRCUVVOcVF5eDNRa0ZCVFN4VlFVRlZMRXRCUVVzc1owSkJRV2RDTEVsQlFVa3NUVUZCVFR0QlFVTXZReXh6UWtGQlNTeFpRVUZaTEZGQlFWYzdRVUZEZWtJc01FSkJRVTBzU1VGQlNTeE5RVUZOTEhOQ1FVRnpRanRCUVVGQkxHdENRVU40UXp0QlFVTkJMREJDUVVGUkxGRkJRVkVzUTBGQlF5eFZRVUZWTzBGQlEzcENMSGREUVVGdlFpeExRVUZMTEVkQlFVY3NWVUZCVlN4RFFVRkRMRVZCUVVVc1YwRkJWeXhSUVVGUkxFTkJRVU1zVjBGQlZ5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSVHRCUVVGQkxHdENRVU12Uml4RFFVRkRPMEZCUTBRc2EwTkJRV2RDTEV0QlFVc3NWMEZCVnl4VlFVRlZMRU5CUVVNc1JVRkJSU3hoUVVGaExGRkJRVkVzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnp0QlFVRkJMR2RDUVVOc1JqdEJRVUZCTEdOQlEwWXNRMEZCUXp0QlFVTkVMRzFEUVVGeFFqdEJRVUZCTEdkQ1FVTnFRaXhYUVVGWExFMUJRVTBzWTBGQll5eE5RVUZOTEdWQlFXVXNWVUZCVlN4TlFVRk5MRU5CUVVNc1MwRkJTeXhOUVVGTk8wRkJRVUVzWTBGQlR6dEJRVU16Uml4dFEwRkJjVUlzUzBGQlN5eEhRVUZITzBGQlFVRXNXVUZETDBJN1FVRkJRU3hWUVVOR0xFTkJRVU03UVVGRFJDeG5Ra0ZCVFVNc1lVRkJXU3g1UWtGRFpEdEJRVUZCTEZsQlEwVXNSMEZCUnp0QlFVRkJMRmxCUTBnc1lVRkJZU3hWUVVGVkxFbEJRVWtzUTBGQlF5eFZRVUZWTEUxQlFVMHNVMEZCVXl4aFFVRmhMRkZCUVZFc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTeExRVUZMTEV0QlFVc3NRMEZCUXp0QlFVRkJMRlZCUTNCSExFbEJRMEU3UVVGQlFTeFpRVU5GTEVkQlFVYzdRVUZCUVN4WlFVTklPMEZCUVVFc1dVRkRRU3hIUVVGSE8wRkJRVUVzV1VGRFNDeEhRVUZITzBGQlFVRXNXVUZEU0R0QlFVRkJMRmxCUTBFc1IwRkJSenRCUVVGQkxGbEJRMGc3UVVGQlFTeFpRVU5CTEVkQlFVYzdRVUZCUVN4VlFVTk1PMEZCUTBvc2FVSkJRVTg3UVVGQlFTeGpRVVZJTEdGQlEwc3NhVUpCUVdsQ0xHZENRVUZuUWl4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRExFMUJRVTBzUjBGQlJ5eFZRVUZWTEUxQlFVMHNRMEZCUXl4SlFVRkpMRTFCUVUwc1RVRkJTeXhGUVVGRkxFTkJRVU1zUlVGREwwWXNaMEpCUVdkQ0xHTkJRV01zUzBGQlN5eEZRVU51UXl4cFFrRkJhVUlzUjBGQlJ5eFhRVUZYTEUxQlFVMHNRMEZCUXp0QlFVRkJPMEZCUVVFc1kwRkZla01zWVVGQllTeFZRVUZWTEVOQlFVTTdRVUZCUVN4alFVTjRRaXhoUVVGaExITkRRVUZ6UXl4eFFrRkJjVUlzUTBGQlF6dEJRVUZCTEd0RFFVTnlSQ3hQUVVGUExHZENRVUZuUWl4WlFVRlpMRU5CUVVNN1FVRkJRU3hqUVVONFJDeFZRVUZWTEVsQlFVa3NRMEZCUXl4TlFVRk5MRTFCUVUwc1dVRkJXU3hEUVVGRExGbEJRVmtzVlVGQlZTeERRVUZETEVWQlFVVXNTMEZCU3l4UFFVRlBMRWRCUVVjc1JVRkJSU3hMUVVGTExFbEJRVWtzUTBGQlF6dEJRVUZCTEdOQlF6VkdRU3hYUVVGVkxFdEJRVXNzU1VGQlNTeERRVUZETzBGQlFVRXNZMEZEY0VJc1QwRkJUeXhaUVVGWkxHTkJRV01zUzBGQlN5eERRVUZETzBGQlFVRTdRVUZCUVN4UlFVVXZRenRCUVVOQkxHVkJRVTg3UVVGQlFTeFZRVU5NTEUxQlFVMDdRVUZCUVN4VlFVTk9MR0ZCUVdFc1JVRkJReXhOUVVGTkxHVkJRV1VzVlVGQlZTeHRRa0ZCYlVJc1dVRkJXU3hKUVVGSkxFMUJRVTBzVFVGQlRTeEZRVUZETzBGQlFVRXNWVUZETjBZc1dVRkJXU3hOUVVGTk8wRkJSMmhDTEd0Q1FVRk5MSE5DUVVOR0xHZENRVUZuUWl4UFFVRlBMRU5CUVVNc1YwRkJWeXhsUVVGbExHRkJRV0VzU1VGQlNTeE5RVUZOTEVOQlFVTXNSVUZEY2tVN1FVRkJRU3hqUVVOSExFTkJRVU1zV1VGRFNTeEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxHVkJRV1VzWVVGQllTeEpRVUZKTEUxQlFVMHNSMEZCUnl4WlFVRlpMRVZCUVVNN1FVRkJRU3haUVVGRk8wRkJRM1pITEdkRFFVRnZRaXhMUVVGTExFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc1YwRkJWU3hEUVVGRE8wRkJRMnhGTEd0Q1FVRk5MR3RDUVVOR0xGbEJRVmtzU1VGQlNTeERRVUZETEUxQlFVMHNUVUZCVFN4RFFVRkRMRWRCUVVjc01rSkJRVEpDTEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUXpkRUxFOUJRVThzUTBGQlF5eExRVUZMTEhsQ1FVRjVRaXhKUVVGSkxFOUJRVThzYjBKQlFXOUNMRWRCUVVjc2JVSkJRVzFDTzBGQlEzQkhMRFJDUVVGblFpeExRVUZMTEVkQlFVY3NNa0pCUVRKQ0xGZEJRVmNzUTBGQlF6dEJRVU12UkN4dFFrRkJVVHRCUVVGQkxHTkJRMDRzVTBGQlV5eERRVUZETEVWQlFVTXNUVUZCVFN4aFFVRmhMRk5CUVZFc1EwRkJRenRCUVVGQkxHTkJRM1pETEdWQlFXVXNSVUZCUXl4SFFVRkhMRXRCUVVzN1FVRkJRU3huUWtGQlN5eGhRVUZoTzBGQlFVRTdRVUZCUVN4alFVRjFRaXhGUVVGRE8wRkJRVUVzWTBGRGJFVTdRVUZCUVN4WlFVTkdPMEZCUVVFc1ZVRkRSanRCUVVGQkxGVkJRMEU3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVVkhMRTFCUVUwc1UwRkJVeXhEUVVGRExGTkJRWGxDTEdWQlFYVkRPMEZCUTNKR0xHTkJRVTBzYVVKQlFXbENMRWxCUVVrc1pVRkJaU3hSUVVGUkxGRkJRVkVzVjBGQlZ5eFJRVUZSTzBGQlF6ZEZMR05CUVUwc1kwRkJZeXhsUVVGbE8wRkJRMjVETEdOQlFVMHNZMEZCWXl4UlFVRlJMRTlCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzVFVGQlRTeE5RVUZOTEVsQlFVazdRVUZETDBRc1owSkJRVkVzVVVGQlVTeDNRa0ZCZDBJc1lVRkJZU3hSUVVGUkxFOUJRVThzUTBGQlF5eEZRVUZGTEZWQlFWVXNaMEpCUVdkQ0xGZEJRVmNzUTBGQlF6dEJRVUZCTEUxQlF5OUhPMEZCUlU4c1RVRkJUU3gzUWtGQmQwSXNRMEZCUXl4bFFVRXdSRHRCUVVNNVJpeGpRVUZOTEZkQlFWa3NWMEZCVnl4VFFVRnZRaXhSUVVGUkxGRkJRVkVzUlVGQlJUdEJRVU51UlN4bFFVRlBMRFJDUVVFMFFpeEZRVUZETEZOQlFWRXNRMEZCUXp0QlFVRkJMRTFCUXk5RE8wRkJRVUU3UVVGQlFUczdPMEZETDFOQkxFMUJWVTFETEd0Q1FXbENRU3hyUWtGWlFVTXNkVUpCU1VFc2VVSkJlVVJQTzBGQmNFZGlPMEZCUVVFN1FVRkJRVHRCUVVkQk8wRkJSVUU3UVVGSFFUdEJRVVZCTEUxQlFVMUVMRzFDUVVGcFFpeERRVUZETEZkQlFYZERPMEZCUXpsRUxGbEJRVWtzUTBGQlF5eFZRVUZWTEU5QlFVOHNWMEZCVnl4SFFVRkhPMEZCUTJ4RExHZENRVUZOTEVsQlFVa3NUVUZCVFN3d1FrRkJNRUk3UVVGQlFTeFJRVU0xUXp0QlFVTkJMR05CUVUwc1lVRkJZU3hQUVVGUExFTkJRVU1zUlVGQlJUdEJRVU0zUWl4alFVRk5MRkZCUVZFc1RVRkJUU3hMUVVGTExFOUJRVThzUTBGQlF5eEZRVUZGTEdsQ1FVRnBRaXhIUVVGSExFMUJRVTA3UVVGRk4wUXNXVUZCU1N4aFFVRmhMRTFCUVUwc1UwRkJVeXhYUVVGWExGTkJRVk1zU1VGQlNTeE5RVUZOTEZOQlFWTXNWMEZCVnp0QlFVTnNSaXhaUVVGSkxHdENRVUZyUWl4WFFVRlhMRk5CUVZNc1RVRkJUU3hUUVVGVExFbEJRVWtzVjBGQlZ5eFRRVUZUTEUxQlFVMDdRVUZEZGtZc1pVRkJUeXhoUVVGaExFMUJRVTBzVlVGQlZTeHJRa0ZCYTBJc1YwRkJWeXhSUVVGUkxFVkJRVVVzV1VGQldTeEZRVUZGTEdsQ1FVRnBRanRCUVVONFJ5eGpRVUZKTEUxQlFVMHNWVUZCVlN4TlFVRk5MRmRCUVZjc1pVRkJaU3hMUVVGTExFMUJRVTBzVlVGQlZTeE5RVUZOTEV0QlF6TkZMRmRCUVZjc1pVRkJaU3hOUVVGTkxFZEJRVWM3UVVGRGNrTXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxHOUVRVUZ2UkR0QlFVRkJMRlZCUTNSRk8wRkJRVUVzVVVGRFJqdEJRVUZCTEUxQlEwWTdRVUZGUVN4TlFVRk5MRzFDUVVGdFFpeERRVUZETEZGQlFUSkNMRmRCUVhkRE8wRkJRek5HTEdOQlFVMHNUMEZCVHl4UFFVRlBMRk5CUVZNc1QwRkJUenRCUVVOd1F5eGpRVUZOTEZGQlFXdENMRU5CUVVNN1FVRkRla0lzYVVKQlFWTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1RVRkJUU3hGUVVGRkxFZEJRVWM3UVVGRE4wSXNaMEpCUVUwc1MwRkJTeXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVUZCTEZGQlEzUkNPMEZCUTBFc2FVSkJRVk1zU1VGQlNTeEhRVUZITEVsQlFVa3NUMEZCVHl4UlFVRlJMRVZCUVVVc1IwRkJSenRCUVVOMFF5eG5Ra0ZCVFN4TFFVRkxMRTlCUVU4c1EwRkJReXhOUVVGTkxFbEJRVWtzVDBGQlR5eEpRVUZKTEVsQlFVa3NTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVGQkxGRkJRek5FTzBGQlEwRXNaVUZCVHp0QlFVRkJMRTFCUTFRN1FVRkZRU3hOUVVGTlF5eDNRa0ZCZFVJc1EwRkJReXhaUVVFclFpeFZRVU40UkN4WFFVRlhMRk5CUVZNc1RVRkJUU3hUUVVGVkxHbENRVUZwUWl4WlFVRlpMRXRCUVVzc1NVRkJTU3hwUWtGQmFVSXNUMEZCVHl4VlFVRlZPMEZCUjJwSUxFMUJRVTBzTUVKQlFUQkNMRU5CUVVNc1YwRkJLME03UVVGRE9VVXNZMEZCVFN4aFFVRmhMRTlCUVU4c1EwRkJReXhGUVVGRk8wRkJRemRDTEdOQlFVMHNVVUZCVVN4TlFVRk5MRXRCUVVzc1QwRkJUeXhEUVVGRExFVkJRVVVzYVVKQlFXbENMRWRCUVVjc1RVRkJUVHRCUVVNM1JDeGpRVUZOTEdOQlFYZENRU3h6UWtGQmNVSXNXVUZCV1N4TFFVRkxPMEZCUTNCRkxHTkJRVTBzVjBGQlZ5eFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVTXpRaXhqUVVGTkxHRkJRV0VzTkVKQlFUWkNMRWxCUVVrN1FVRkRjRVFzWTBGQlRTeGhRVUZoTEV0QlFVc3NTMEZCU3l4VlFVRlZMRXRCUVVzc1YwRkJWeXhKUVVGSkxGVkJRVlU3UVVGRmNrVXNZMEZCVFN4clFrRkJhMElzUTBGQlF5eHBRa0ZCSzBJN1FVRkRkRVFzWjBKQlFVMHNVVUZCVVN4alFVRmpMRk5CUVZNc1ZVRkJWU3hYUVVGWExGRkJRVkVzVlVGQlZUdEJRVU0xUlN4blFrRkJUU3hUUVVGVExHVkJRV1VzVlVGQlZTeFZRVUZWTEZsQlFWa3NVVUZCVVN4VlFVRlZPMEZCUTJoR0xHTkJRVWs3UVVGRFNpeGpRVUZKTERKQ1FVRTBRanRCUVVNNVFpeHJRa0ZCVFN4dFFrRkJiVUlzUTBGQlF5eFJRVUZuUWl4SFFVRlhMRmRCUVZjc1QwRkJUenRCUVVGQkxEWkNRVU5vUkN4RFFVRkRMRTFCUVUwc1QwRkJUeXhuUWtGQlowSXNhMEpCUVd0Q0xFTkJRVU1zUjBGQlJ5eERRVUZETzBGQlFVRXNjMEpCUXpWRUxFTkJRVU1zVFVGQlRTeE5RVUZOTERKQ1FVRXlRaXhuUWtGQlowSXNRMEZCUXl4SlFVRkpMRTFCUVUwc1EwRkJRenRCUVVGQkxIRkNRVU55UlN4RFFVRkRMRmxCUVZrc1EwRkJRenRCUVVGQkxIbENRVU5XTEVOQlFVTXNXVUZCV1N4RFFVRkRPMEZCUVVFc1dVRkRNMElzVFVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4UlFVRlJMRWxCUVVrc1RVRkJUU3haUVVGWkxGRkJRVkVzUTBGQlF5eEZRVUZGTEVOQlFVTXNZVUZCWVN4RFFVRkRPMEZCUVVFN1FVRkZhRVlzZVVKQlFXRTdRVUZCUVN3d1EwRkRkVUlzVlVGQlZUdEJRVUZCTzBGQlFVRXNWVUZGTVVNc2FVSkJRV2xDTEZGQlFWRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkJRU3hWUVVOc1F5eHBRa0ZCYVVJc1VVRkJVU3hIUVVGSExFdEJRVXNzUTBGQlF6dEJRVUZCTEZWQlEyeERMR2xDUVVGcFFpeFJRVUZSTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUVVFc1ZVRkRiRU1zYVVKQlFXbENMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGQlFTeFZRVU5zUXl4UFFVRlBMRmxCUVZrc1kwRkJZeXhOUVVGTkxFTkJRVU03UVVGQlFUdEJRVUZCTEZWQlJUbERMRTlCUVU4N1FVRkRUQ3g1UWtGQllUdEJRVUZCTERoQ1FVTlhMRTlCUVU4c1owSkJRV2RDTEZsQlFWa3NRMEZCUXp0QlFVRkJMRFJDUVVOMFF5eE5RVUZOTERKQ1FVRXlRaXhwUWtGQmFVSXNUVUZCVFN4RFFVRkRPMEZCUVVFc1ZVRkRNMFVzVDBGQlR5eFpRVUZaTEdOQlFXTXNUVUZCVFN4WlFVRlpMR0ZCUVdFc1EwRkJReXhEUVVGRE8wRkJRVUU3UVVGQlFTeFZRVVY0UlR0QlFVTkJMR2xDUVVGUE8wRkJRVUVzVFVGRFRDeGhRVUZoTEdkQ1FVRm5RaXhaUVVGWkxFdEJRVXNzUlVGQlJTeHBRa0ZCYVVJc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGQlFTeE5RVU12UlN4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQkxFMUJRM2hDTEdGQlFXRXNjME5CUVhORExHMUNRVUZ0UWl4RFFVRkRPMEZCUVVFc1RVRkRka1VzVlVGQlZUdEJRVUZCTEZGQlEyUTdRVUZGUVN4alFVRk5MR3RDUVVOR0xFTkJRVU1zUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hYUVVGVkxFZEJRVWNzUjBGQlJ5d3lRa0ZCTWtJc1dVRkJXU3hYUVVGWExFTkJRVU03UVVGRGRFY3NaVUZCVHp0QlFVRkJMRlZCUTB3c1RVRkJUVHRCUVVGQkxGVkJRMDRzWVVGQllTeEZRVUZETEUxQlFVMHNSMEZCUnl4WlFVRlpMRTFCUVUwc1NVRkJTU3h0UWtGQmJVSXNRMEZCUXl4TlFVRk5MRVZCUVVNN1FVRkJRU3hWUVVONFJUdEJRVUZCTEZWQlEwRXNXVUZCV1N4UFFVRlBPMEZCUVVFc1dVRkRha0lzVTBGQlV5eERRVUZETEVWQlFVTXNUVUZCVFN4aFFVRmhMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzVTBGQlVTeERRVUZETzBGQlFVRXNXVUZETTBRc1pVRkJaU3hGUVVGRExFZEJRVWNzUzBGQlN6dEJRVUZCTEdOQlFVc3NZVUZCWVR0QlFVRkJPMEZCUVVFc1dVRkJkVUlzUlVGQlF6dEJRVUZCTEZsQlEyeEZPMEZCUVVFc1ZVRkRSanRCUVVGQkxGRkJRMFk3UVVGQlFTeE5RVU5HTzBGQlJVOHNUVUZCVFN4VFFVRlRMRU5CUVVNc1dVRkJhME03UVVGRGRrUXNVVUZCUVVRc2FVSkJRV1VzVVVGQlVTeE5RVUZOTzBGQlF6ZENMR2RDUVVGUkxGRkJRVkVzZDBKQlFYZENMRkZCUVZFc1RVRkJUU3hIUVVGSExFVkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRPMEZCUVVFc1RVRkRlRVU3UVVGQlFUdEJRVUZCT3pzN1FVTjJSMEVzVFVGaFRTd3lRa0ZwUkU5Rk8wRkJPVVJpTzBGQlFVRTdRVUZCUVR0QlFVZEJPMEZCUlVFN1FVRkhRVHRCUVVOQk8wRkJTVUVzVFVGQlRTdzBRa0ZCTkVJc1EwRkJReXhwUWtGQmNVUTdRVUZEZEVZc1kwRkJUU3hYUVVGWExHRkJRV0VzUTBGQlF5eEZRVUZGTzBGQlEycERMR05CUVUwc1lVRkJZU3hWUVVGVkxFdEJRVXNzWVVGQllTeERRVUZETEVWQlFVVXNTVUZCU1R0QlFVTjBSQ3hqUVVGTkxHRkJRV0VzVlVGQlZTeExRVUZMTEdGQlFXRXNRMEZCUXl4RlFVRkZMRWxCUVVrN1FVRkZkRVFzWTBGQlRTeFZRVUZWTEdGQlFXRXNUVUZCVFR0QlFVTnVReXhqUVVGTkxHdENRVUZyUWl4RFFVRkRMR2xDUVVGMVF6dEJRVU01UkN4blFrRkJUU3hKUVVGSkxHTkJRV01zUzBGQlN5eFZRVUZWTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNN1FVRkROME1zWjBKQlFVMHNUMEZCVHl4alFVRmpMRkZCUVZFc1ZVRkJWU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETzBGQlEyNUVMR2RDUVVGTkxFbEJRVWtzWlVGQlpTeExRVUZMTEZWQlFWVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJRenRCUVVVNVF5eG5Ra0ZCVFN4WFFVRTRRaXhEUVVGRExFVkJRVU1zVFVGQlRTeHRRa0ZCYlVJc1RVRkJUU3hOUVVGTExFZEJRVWNzUlVGQlF5eE5RVUZOTEdGQlFXRXNUVUZCVFN4TlFVRkxMRU5CUVVNN1FVRkZOMGNzWjBKQlFVMHNiMEpCUVc5Q0xFTkJRVU1zVFVGQlpUdEJRVUZCTEdkQ1FVTTVRaXhEUVVGRExHOURRVUZ2UXl4RFFVRkRPMEZCUVVFc1owSkJRM1JETEVOQlFVTXNUVUZCVFN4TFFVRkxMRmxCUVZrc1QwRkJUeXhEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVOQlFVTTdRVUZEYmtVc1owSkJRVTBzYjBKQlFXOUNMRlZCUTNSQ08wRkJRVUVzYlVKQlExY3NTMEZCU3l4WlFVRlpMSFZEUVVGMVF5eERRVUZETEUxQlEzQkZMRWRCUVVjc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXl4SFFVRkhMR3RDUVVGclFpeERRVUZETEVOQlFVTXNSMEZCUnl4clFrRkJhMElzUTBGQlF5eERRVUZETEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dEJRVUZCTEcxQ1FVTnFSaXhGUVVGRkxFdEJRVXNzUzBGQlN6dEJRVVV6UWl4cFFrRkJUeXhIUVVGSExHRkJRV0VzYVVKQlFXbENMRkZCUVZFc1JVRkJSU3hwUWtGQmFVSXNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVGQk8wRkJRVUVzVFVGRmRFVXNZVUZCWVN3d1FrRkJNRUlzVVVGQlVTeERRVUZETEVOQlFVTTdRVUZCUVR0QlFVRkJMRTFCUlhaRUxHRkJRV0VzVlVGQlZTeGpRVUZqTEVOQlFVTTdRVUZCUVN4UlFVTndReXhoUVVGaExITkRRVUZ6UXl3d1FrRkJNRUlzUTBGQlF6dEJRVUZCTzBGQlFVRXNaMEpCUlhSRkxFVkJRVVVzV1VGQldTeFpRVUZaTEVOQlFVTTdRVUZCUVN4UlFVTnVReXhwUWtGQmFVSTdRVUZCUVR0QlFVRkJMRkZCUldwQ0xFVkJRVVVzV1VGQldTeGpRVUZ2UWl4dFFrRkJiVUlzVFVGQlRTeERRVUZETEVOQlFVTTdRVUZCUVR0QlFVRkJMRkZCUlc1Rk8wRkJSVUVzWlVGQlR6dEJRVUZCTEZWQlEwd3NUVUZCVFR0QlFVRkJMRlZCUTA0c1lVRkJZU3hGUVVGRExFMUJRVTBzUjBGQlJ5eFBRVUZQTEVsQlFVa3NiVUpCUVcxQ0xFTkJRVU1zVVVGQlVTeE5RVUZOTEVWQlFVTTdRVUZCUVN4VlFVTnlSVHRCUVVGQkxGVkJRMEVzV1VGQldTeERRVUZETEZsQlFWazdRVUZCUVN4WlFVTjJRaXhUUVVGVExFTkJRVU1zUlVGQlF5eE5RVUZOTEU5QlFVOHNRMEZCUXl4RlFVRkZMRTFCUVUwc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeFRRVUZSTEVOQlFVTTdRVUZCUVN4WlFVTTVSQ3hwUWtGRFNTeERRVUZETEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzUzBGQlN5eExRVUZMTEdGQlFXRXNRMEZCUXl4RlFVRkRMRWRCUVVjc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4WFFVRlZMRU5CUVVNN1FVRkJRU3haUVVONFJ5eGxRVUZsTEVWQlFVTXNSMEZCUnl4TFFVRkxMRXRCUVVzc1lVRkJZU3hwUWtGQmFVSXNRMEZCUXl4RlFVRkRPMEZCUVVFc1ZVRkRMMFE3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVVlBMRTFCUVUxQkxGbEJRVmNzUTBGQlF5eFpRVUZyUXp0QlFVTjZSQ3haUVVGSkxGRkJRVkVzVDBGQlR5eFRRVUZUTEV0QlFVc3NWVUZCVlN4TFFVRkxMRkZCUVZFc1QwRkJUeXhEUVVGRExFVkJRVVVzU1VGQlNTeE5RVUZOTEVkQlFVYzdRVUZETjBVc1ZVRkJUU3hUUVVGVExFOUJRVTg3UVVGQlFTeFJRVU40UWl4UFFVRlBPMEZCUTB3c2EwSkJRVkVzVVVGQlVTd3dRa0ZCTUVJc1VVRkJVU3hOUVVGTkxFTkJRVU03UVVGQlFTeFJRVU16UkR0QlFVRkJMRTFCUTBZN1FVRkJRVHRCUVVGQk96czdRVU53UlVFc1RVRmxUVU1zYTBKQlRVRXNlVUpCYzBkUExIVkNRVWRCTzBGQk9VaGlPMEZCUVVFN1FVRkJRVHRCUVVkQk8wRkJSVUU3UVVGRFFUdEJRVWRCTzBGQlRVRXNUVUZCVFVFc2JVSkJRV2xDTEVOQlFVTXNWMEZCZDBNN1FVRkRPVVFzV1VGQlNTeERRVUZETEZWQlFWVXNUMEZCVHl4WFFVRlhMRWRCUVVjN1FVRkRiRU1zWjBKQlFVMHNTVUZCU1N4TlFVRk5MREpDUVVFeVFqdEJRVUZCTEZGQlF6ZERPMEZCUVVFc1RVRkRSanRCUVVWQkxFMUJRVTBzTUVKQlFUQkNMRU5CUVVNc1VVRkJLMElzWlVGQk9FTTdRVUZETlVjc1kwRkJUU3hoUVVGaExFOUJRVThzUTBGQlF5eEZRVUZGTzBGQlF6ZENMR05CUVUwc1pVRkJaU3hQUVVGUExFTkJRVU1zUlVGQlJUdEJRVVV2UWl4alFVRk5MRmxCUVZrc1YwRkJWenRCUVVNM1FpeGpRVUZOTEU5QlFVOHNWVUZCVlN4alFVRmpMRmRCUVZjc1RVRkJUU3hUUVVGVE8wRkJSUzlFTEdOQlFVMHNZMEZCWXl4WFFVRlhMRTFCUVUwc1EwRkJRenRCUVVOMFF5eHZRa0ZCV1N4UFFVRlBMRTFCUVUwc1IwRkJSeXhIUVVGSExGbEJRVms3UVVGRk0wTXNZMEZCVFN4bFFVRmxMRmRCUVZjc1NVRkJTVHRCUVVOd1F5eGpRVUZOTEdGQlFXRXNUMEZCVHl4RFFVRkRMRVZCUVVVc05FSkJRVFpDTEVsQlFVazdRVUZET1VRc1kwRkJUU3hoUVVGaExFdEJRVXNzUzBGQlN5eFZRVUZWTEV0QlFVc3NWMEZCVnl4SlFVRkpMRlZCUVZVN1FVRkZja1VzWTBGQlRTeHJRa0ZCYjBNN1FVRkJRU3hWUVVONFF5eEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxGZEJRVlU3UVVGQlFTeFZRVUZITEVWQlFVTXNjVUpCUVhOQ0xFMUJRVTBzWVVGQldUdEJRVUZCTEZWQlEzQkdMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNTMEZCU1R0QlFVRkJMRlZCUVVjc1IwRkJSeXd5UWtGQk1rSXNUMEZCVHl4RFFVRkRMRVZCUVVVc1RVRkJUU3hQUVVGUExFTkJRVU1zUlVGQlJTeE5RVUZOTEZkQlFWYzdRVUZCUVN4UlFVTm9TRHRCUVVWQkxHTkJRVTBzYTBKQlFXdENMRU5CUVVNc2FVSkJRU3RDTzBGQlEzUkVMR2RDUVVGTkxFOUJRVThzWTBGQll5eFJRVUZSTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eFJRVUZSTEZWQlFWVTdRVUZEZUVZc1owSkJRVTBzVlVGQlZTeGpRVUZqTEdkQ1FVRm5RaXhQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1RVRkJUVHRCUVVOMlJpeG5Ra0ZCVFN4VFFVRlRMR1ZCUVdVc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEZsQlFWa3NVVUZCVVN4VlFVRlZPMEZCUlRGR0xHZENRVUZOTEd0Q1FVRnJRaXhEUVVGRExFMUJRVFpDTzBGQlEzQkVMR3RDUVVGTkxHTkJRV01zWVVGQllUdEJRVU5xUXl4blFrRkJTU3hWUVVGVkxIRkNRVUZ4UWl4RFFVRkRMRTlCUVU4c1VVRkJVU3hMUVVGTExFOUJRVTg3UVVGREwwUXNjVUpCUVZNc1NVRkJTU3hIUVVGSExFbEJRVWtzWVVGQllTeExRVUZMTzBGQlEzQkRMSGxDUVVGWExFZEJRVWNzWTBGQll5eEpRVUZKTEdsQ1FVRnBRaXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEdsQ1FVRnBRaXhEUVVGRExFVkJRVVVzVFVGRE4wVXNXVUZCV1N4VFFVRlRMRWxCUVVrc1owSkJRV2RDTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zVFVGQlRTeG5Ra0ZCWjBJc1EwRkJReXhGUVVGRk8wRkJRVUVzV1VGRE9VWTdRVUZEUVN4MVFrRkJWenRCUVVGQkxHMUNRVU5GTEVOQlFVTXNUVUZCVFN4UlFVRlJMR0ZCUVdFc2FVSkJRV2xDTEVOQlFVTXNSVUZCUlN4RFFVRkRPMEZCUVVFc2JVSkJRMnBFTEVOQlFVTTdRVUZCUVN4cFFrRkRTQ3hEUVVGRExGTkJRVk1zUTBGQlF6dEJRVUZCTzBGQlFVRXNNa0pCUlVRc1EwRkJReXhOUVVGTkxFdEJRVXNzUzBGQlN5eFBRVUZQTzBGQlFVRTdRVUZGTjBNc2NVSkJRVk1zU1VGQlNTeEhRVUZITEVsQlFVa3NSMEZCUnl4SlFVRkpMRmRCUVZjc1MwRkJTenRCUVVONlF5eHJRa0ZCU1N4TlFVRk5MRTFCUVUwN1FVRkRaQ3d5UWtGQlZ5eEhRVUZITEZsQlFWa3NTVUZCU1N4alFVRmpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzWTBGQll5eERRVUZETEVWQlFVVXNZVUZCWVN4RFFVRkRPMEZCUTNaR0xIRkNRVUZMTzBGQlFVRXNZMEZEVUN4UFFVRlBPMEZCUTB3c01rSkJRVmNzUjBGQlJ5eFpRVUZaTEVsQlFVa3NZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxHTkJRV01zUTBGQlF5eEZRVUZGTEUxQlEzSkZMRmxCUVZrc1UwRkJVeXhKUVVGSkxHZENRVUZuUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxHZENRVUZuUWl4RFFVRkRMRVZCUVVVN1FVRkROVVU3UVVGQlFTeGpRVU5HTzBGQlFVRXNXVUZEUmp0QlFVTkJMRzFDUVVGUE8wRkJRVUVzVlVGRFZEdEJRVU5CTEdOQlFVazdRVUZEU2l4alFVRkpMRTlCUVU4c1EwRkJReXhGUVVGRkxESkNRVUUwUWp0QlFVTjRReXhyUWtGQlRTeHRRa0ZCYlVJc1EwRkJReXhSUVVGblFpeEhRVUZYTEZkQlFWY3NUMEZCVHp0QlFVRkJMRFpDUVVOb1JDeERRVUZETEUxQlFVMHNUMEZCVHl4blFrRkJaMElzYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhEUVVGRE8wRkJRVUVzV1VGRGRFVXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF6dEJRVUZCTEhOQ1FVTlNMRU5CUVVNc1RVRkJUU3hMUVVGTExHZENRVUZuUWl4alFVRmpMRU5CUVVNc1JVRkJSU3hEUVVGRE8wRkJRVUVzY1VKQlF5OURMRU5CUVVNc1dVRkJXU3hEUVVGRE8wRkJRVUVzZVVKQlExWXNRMEZCUXl4WlFVRlpMRU5CUVVNN1FVRkJRU3haUVVNelFpeE5RVUZOTEVsQlFVa3NRMEZCUXl4UFFVRlBMRkZCUVZFc1NVRkJTU3hMUVVGTExGbEJRVmtzVVVGQlVTeERRVUZETEVWQlFVVXNRMEZCUXl4aFFVRmhMRU5CUVVNN1FVRkJRVHRCUVVVdlJTeDVRa0ZCWVR0QlFVRkJMREJEUVVOMVFpeFZRVUZWTzBGQlFVRTdRVUZCUVN4VlFVVXhReXhwUWtGQmFVSXNVMEZCVXl4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVGQkxGVkJRMjVETEdsQ1FVRnBRaXhUUVVGVExFZEJRVWNzUzBGQlN5eERRVUZETzBGQlFVRXNWVUZEYmtNc2FVSkJRV2xDTEZOQlFWTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkJRU3hWUVVOdVF5eHBRa0ZCYVVJc1UwRkJVeXhIUVVGSExFdEJRVXNzUTBGQlF6dEJRVUZCTEZWQlEyNURMRTlCUVU4c1dVRkJXU3hqUVVGakxFOUJRVThzUTBGQlF6dEJRVUZCTzBGQlFVRXNWVUZGTDBNc1QwRkJUenRCUVVOTUxIbENRVUZoTzBGQlFVRXNORUpCUTFNc1QwRkJUeXhuUWtGQlowSXNXVUZCV1N4RFFVRkRPMEZCUVVFc1VVRkRlRVFzWjBKQlFXZENMRVZCUVVVc1EwRkJRenRCUVVGQkxHOUNRVU5RTEV0QlFVc3NZVUZCWVN4aFFVRmhMRU5CUVVNN1FVRkJRU3hSUVVNMVF5eFBRVUZQTEZsQlFWa3NZMEZCWXl4UFFVRlBMRU5CUVVNN1FVRkJRVHRCUVVGQkxGVkJSVGRETzBGQlEwRXNhVUpCUVU4N1FVRkJRU3hSUVVWSUxHRkJRV0VzWjBKQlFXZENMR05CUVdNc1MwRkJTeXhGUVVNelF5eG5Ra0ZCWjBJc1owSkJRV2RDTEV0QlFVc3NSVUZEY2tNc1owSkJRV2RDTEZGQlFWRXNTMEZCU3l4RlFVTTNRaXhwUWtGQmFVSXNUVUZCVFN4VFFVRlRMRTFCUVUwc1EwRkJRenRCUVVGQkxGRkJRelZETEdGQlFXRXNWVUZCVlN4RFFVRkRPMEZCUVVFc1ZVRkRkRUlzWVVGQllTeHpRMEZCYzBNc2NVSkJRWEZDTEVOQlFVTTdRVUZCUVN4VlFVTjZSU3hWUVVGVk8wRkJRVUU3UVVGQlFTeFJRVVZzUWp0QlFVTkJMR1ZCUVU4N1FVRkJRU3hWUVVOTUxFMUJRVTA3UVVGQlFTeFZRVU5PTEdGQlFXRXNSVUZCUXl4TlFVRk5MRmRCUVZjc1ZVRkJWU3h0UWtGQmJVSXNRMEZCUXl4UlFVRlJMRTFCUVUwc1JVRkJRenRCUVVGQkxGVkJRelZGTEZsQlFWa3NUMEZCVHp0QlFVRkJMRmxCUTJwQ0xGTkJRVk03UVVGQlFTeGpRVU5RTEVWQlFVTXNUVUZCVFN4aFFVRmhMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzVTBGQlVUdEJRVUZCTEZsQlEyeEVPMEZCUVVFc1dVRkRRU3hsUVVGbExFVkJRVU1zUjBGQlJ5eExRVUZMTzBGQlFVRXNZMEZCU3l4aFFVRmhPMEZCUVVFN1FVRkJRU3haUVVGMVFpeEZRVUZETzBGQlFVRXNXVUZEYkVVN1FVRkJRU3hWUVVOR08wRkJRVUVzVlVGRFFUdEJRVUZCTEZGQlEwWTdRVUZCUVN4TlFVTkdPMEZCUlU4c1RVRkJUU3gzUWtGQmQwSXNRMEZCUXl4bFFVTnNReXcwUWtGQk5FSXNSVUZCUXl4TlFVRk5MRmRCUVZjc1MwRkJZeXhEUVVGRE8wRkJSVEZFTEUxQlFVMHNVMEZCVXl4RFFVRkRMRk5CUVhsQ0xHVkJRWFZETzBGQlEzSkdMR05CUVUwc1UwRkJVeXhSUVVGUk8wRkJRM1pDTEZGQlFVRkJMR2xDUVVGbExFMUJRVTA3UVVGRGNrSXNaMEpCUVZFc1VVRkJVU3gzUWtGQmQwSXNVVUZCVVN4UlFVRlJMRlZCUVZVc1EwRkJRenRCUVVGQkxFMUJRM0pGTzBGQlFVRTdRVUZCUVRzN08wRkRiRWxCTEUxQlpVMURMR3RDUVdWQkxHbERRU3RFVHl3clFrRkhRVHRCUVdoSFlqdEJRVUZCTzBGQlFVRTdRVUZIUVR0QlFVVkJPMEZCUTBFN1FVRkhRVHRCUVUxQkxFMUJRVTFCTEcxQ1FVRnBRaXhEUVVGRExGZEJRWGRETzBGQlF6bEVMRmxCUVVrc1EwRkJReXhWUVVGVkxFOUJRVThzVjBGQlZ5eEhRVUZITzBGQlEyeERMR2RDUVVGTkxFbEJRVWtzVFVGQlRTeHRRMEZCYlVNN1FVRkJRU3hSUVVOeVJEdEJRVVZCTEZsQlFVa3NUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhUUVVGVExFZEJRVWM3UVVGRE4wSXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxESkVRVUV5UkR0QlFVRkJMRkZCUXpkRk8wRkJSVUVzV1VGQlNTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRmRCUVZjc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eFJRVUZSTzBGQlEyNUVMR2RDUVVGTkxFbEJRVWtzVFVGQlRUdEJRVUZCTERSRVFVTjNRenRCUVVGQkxGRkJRekZFTzBGQlFVRXNUVUZEUmp0QlFVVkJMRTFCUVUwc2EwTkJRMFlzUTBGQlF5eFJRVUVyUWl4bFFVRnpSRHRCUVVOd1JpeGpRVUZOTEdGQlFXRXNUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkROMElzWTBGQlRTeHpRa0ZCYzBJc1QwRkJUeXhEUVVGRExFVkJRVVU3UVVGRGRFTXNZMEZCVFN4WlFVRlpMRmRCUVZjN1FVRkZOMElzWTBGQlRTeGxRVUZsTEU5QlFVOHNRMEZCUXl4RlFVRkZPMEZCUXk5Q0xHTkJRVTBzYTBKQlFXdENMRTlCUVU4c1EwRkJReXhGUVVGRk8wRkJRMnhETEdOQlFVMHNUMEZCVHl4VlFVRlZMR05CUVdNc1YwRkJWeXhOUVVGTkxGTkJRVk03UVVGREwwUXNZMEZCVFN4bFFVRmxMRmRCUVZjc1NVRkJTVHRCUVVWd1F5eGpRVUZOTEdOQlFXTXNZVUZCWVN4TlFVRk5MRU5CUVVNN1FVRkRlRU1zWTBGQlRTeGhRVUZoTEZWQlFWVXNTMEZCU3l4WFFVRlhPMEZCUlRkRExHTkJRVTBzVVVGQlVTeGpRVUZqTEZOQlFWTXNjVUpCUVhGQ0xGTkJRVk03UVVGRGJrVXNZMEZCVFN4VlFVRlZMR05CUVdNc1owSkJRV2RDTEdsQ1FVRnBRaXhoUVVGaExFMUJRVTA3UVVGRGJFWXNZMEZCVFN4VFFVRlRMR1ZCUVdVc1ZVRkJWU3h4UWtGQmNVSXNXVUZCV1N4TlFVRk5PMEZCUnk5RkxHTkJRVTBzYTBKQlFXOURPMEZCUVVFc1ZVRkRlRU1zUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hYUVVGVk8wRkJRVUVzVlVGQlJ5eEZRVUZETEhGQ1FVRnpRaXhOUVVGTkxHRkJRVms3UVVGQlFTeFZRVU53Uml4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEV0QlFVazdRVUZCUVN4UlFVTndRenRCUVVOQkxIZENRVUZuUWl4TFFVRkxMRWRCUVVjc01rSkJRVEpDTEZsQlFWa3NZMEZCWXl4WFFVRlhMRU5CUVVNN1FVRkRla1lzWTBGQlRTeHZRa0ZCZDBRc1EwRkJReXhSUVVGUkxFMUJRVTA3UVVGTE4wVXNZMEZCVFN4clFrRkJhMElzUTBGQlF5eHBRa0ZCSzBJN1FVRkJRU3hSUVVWd1JDeGhRVUZoTEdkQ1FVRm5RaXhqUVVGakxFdEJRVXNzUlVGRE0wTXNaMEpCUVdkQ0xHZENRVUZuUWl4TFFVRkxMRVZCUTNKRExHZENRVUZuUWl4UlFVRlJMRXRCUVVzc1JVRkROMElzYVVKQlFXbENMRTlCUVU4c1UwRkJVeXhOUVVGTkxFTkJRVU03UVVGQlFTeFJRVU12UXl4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQkxGRkJRM2hDTEdGQlFXRXNjME5CUVhORExIRkNRVUZ4UWl4RFFVRkRPMEZCUVVFN1FVRkJRU3cwUWtGRmNrUXNUMEZCVHl4blFrRkJaMElzV1VGQldTeERRVUZETzBGQlFVRTdRVUZCUVN4clFrRkZPVU1zVVVGQlVTeFpRVUZaTEZsQlFWa3NRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxESkNRVWw0UWl4TlFVRk5MRXRCUVVzc1QwRkJUenRCUVVGQkxGRkJRM0pETEUxQlFVMHNWMEZCVnl4blFrRkJaMElzYVVKQlFXbENMRlZCUVZVc1EwRkJRenRCUVVGQkxHOUNRVU5xUkN4TlFVRk5MR0ZCUVdFc1kwRkJZeXhEUVVGRE8wRkJRVUU3UVVGQlFTeFJRVVU1UXl4UFFVRlBMRmxCUVZrc1kwRkJZeXhQUVVGUExFTkJRVU03UVVGQlFUdEJRVWN6UXl4bFFVRlBPMEZCUVVFc1ZVRkRUQ3hOUVVGTk8wRkJRVUVzVlVGRFRpeGhRVUZoTEVWQlFVTXNhMEpCUVdsQ08wRkJRVUVzVlVGREwwSXNXVUZCV1N4UFFVRlBPMEZCUVVFc1dVRkRha0lzVTBGQlV5eERRVUZETEVWQlFVTXNUVUZCVFN4aFFVRmhMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzVTBGQlVTeERRVUZETzBGQlFVRXNXVUZETTBRc1pVRkJaU3hGUVVGRExFZEJRVWNzUzBGQlN6dEJRVUZCTEdOQlFVc3NZVUZCWVR0QlFVRkJPMEZCUVVFc1dVRkJkVUlzUlVGQlF6dEJRVUZCTEZsQlEyeEZPMEZCUVVFc1ZVRkRSanRCUVVGQkxGVkJRMEU3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVVkhMRTFCUVUwc1owTkJRV2RETEVOQlFVTXNaVUZETVVNc05FSkJRVFJDTEVWQlFVTXNUVUZCVFN4WFFVRlhMRXRCUVdNc1EwRkJRenRCUVVVeFJDeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRExGTkJRWGxDTEdWQlFTdERPMEZCUTNKSExHTkJRVTBzVTBGQlV5eFJRVUZSTzBGQlEzWkNMRkZCUVVGQkxHbENRVUZsTEUxQlFVMDdRVUZEY2tJc1owSkJRVkVzVVVGQlVTeG5RMEZCWjBNc1VVRkJVU3hSUVVGUkxGVkJRVlVzUTBGQlF6dEJRVUZCTEUxQlF6ZEZPMEZCUVVFN1FVRkJRVHM3TzBGRGNFZEJMRTFCVjAxRExHdENRVEJDUVN4MVFrRjNSazhzY1VKQlVVRTdRVUZ5U1dJN1FVRkJRVHRCUVVGQk8wRkJSMEU3UVVGRlFUdEJRVWxCTzBGQlJVRXNUVUZCVFVFc2JVSkJRV2xDTEVOQlFVTXNWMEZCZDBNN1FVRkRPVVFzV1VGQlNTeERRVUZETEZGQlFWRTdRVUZEV0N4blFrRkJUU3hKUVVGSkxFMUJRVTBzYTBKQlFXdENPMEZCUVVFc1VVRkRjRU03UVVGRFFTeFpRVUZKTEU5QlFVOHNVMEZCVXl4TFFVRkxMRTlCUVU4c1UwRkJVeXhIUVVGSE8wRkJRekZETEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3h6UWtGQmMwSTdRVUZCUVN4UlFVTjRRenRCUVVkQkxGbEJRVWtzVDBGQlR5eFhRVUZYTEV0QlFVc3NUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhUUVVGVExFZEJRVWM3UVVGRGNFUXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxEQkNRVUV3UWp0QlFVRkJMRkZCUXpWRE8wRkJSVUVzV1VGQlN5eFBRVUZQTEVOQlFVTXNSVUZCUlN4aFFVRmhMRTlCUVU4c1EwRkJReXhGUVVGRkxGbEJRMnBETEU5QlFVOHNWMEZCVnl4TFFVRkxMRTlCUVU4c1EwRkJReXhGUVVGRkxHRkJRV0VzVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVnp0QlFVTjBSU3huUWtGQlRTeEpRVUZKTEUxQlFVMHNORUpCUVRSQ08wRkJRVUVzVVVGRE9VTTdRVUZCUVN4TlFVTkdPMEZCVTBFc1RVRkJUU3gzUWtGQmQwSXNRMEZCUXl4UlFVRXJRaXhsUVVFMFF6dEJRVU40Unl4alFVRk5MRk5CUVZNc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eE5RVUZOTzBGQlEzQkRMR05CUVUwc1UwRkJVeXhQUVVGUExFTkJRVU1zUlVGQlJTeExRVUZMTEUxQlFVMDdRVUZEY0VNc1kwRkJUU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NVMEZCVXp0QlFVRkJMRlZCUTNaQ08wRkJRVUVzVlVGQlVTeFhRVUZYTzBGQlFVRXNWVUZCVVR0QlFVRkJMRlZCUVZFc1YwRkJWenRCUVVGQkxGVkJRVkVzVDBGQlR5eFhRVUZYTEVsQlFVa3NUMEZCVHl4RFFVRkRMRVZCUVVVc1QwRkJUenRCUVVGQkxGRkJRVk03UVVGRE1VY3NZMEZCVFN4alFVRmpMRU5CUVVNc1IwRkJSeXhEUVVGRE8wRkJRM3BDTEZsQlFVa3NRMEZCUXl4aFFVRmhPMEZCUTJoQ0xHZENRVUZOTEVsQlFVa3NUVUZCVFN4eFEwRkJjME03UVVGQlFTeFJRVU40UkR0QlFVTkJMR05CUVUwc1lVRkJZU3hWUVVGVkxFdEJRVXNzVjBGQlZ6dEJRVU0zUXl4alFVRk5MR3RDUVVGdlF6dEJRVUZCTEZWQlEzaERMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNWMEZCVlR0QlFVRkJMRlZCUVVjc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4RlFVRkRPMEZCUVVFc1ZVRkJSeXhGUVVGRExIVkNRVUYxUWl4TlFVRk5MRVZCUVVNN1FVRkJRU3hWUVVNMVJ5eEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxFVkJRVU03UVVGQlFTeFZRVUZITEVWQlFVTXNjVUpCUVhOQ0xFMUJRVTBzVjBGQlZ5eE5RVUZMTzBGQlFVRXNWVUZETDBVc1JVRkJReXh4UWtGQmMwSXNUVUZCVFN4WFFVRlhMRXRCUVVrN1FVRkJRU3hSUVVNNVF6dEJRVU5CTEdOQlFVMHNiMEpCUVhkRUxFTkJRVU1zVVVGQlVTeE5RVUZOTzBGQlF6ZEZMRmxCUVVrc1QwRkJUeXhYUVVGWExFZEJRVWM3UVVGRGRrSXNNRUpCUVdkQ0xFdEJRVXNzUjBGQlJ5d3lRa0ZCTWtJc1QwRkJUeXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETzBGQlEyeEZMRFJDUVVGclFpeExRVUZMTEUxQlFVMDdRVUZCUVN4UlFVTXZRanRCUVVOQkxIZENRVUZuUWl4TFFVRkxMRWRCUVVjc01rSkJRVEpDTEZkQlFWY3NRMEZCUXp0QlFVVXZSQ3hqUVVGTkxHdENRVUZyUWl4RFFVRkRMR2xDUVVFclFqdEJRVU4wUkN4alFVRkpMRTlCUVU4N1FVRkRXQ3hqUVVGSkxGZEJRVmNzVlVGQlZTeFhRVUZYTEZGQlFWRTdRVUZETVVNc2JVSkJRVTg3UVVGQlFTeFZRVU5VTEZkQlFWY3NWMEZCVnl4VlFVRlZMRU5CUVVNc1YwRkJWeXhSUVVGUk8wRkJRMnhFTEcxQ1FVRlBPMEZCUVVFc1ZVRkRWQ3hYUVVGWExFTkJRVU1zVjBGQlZ5eFZRVUZWTEZkQlFWY3NVVUZCVVR0QlFVTnNSQ3h0UWtGQlR6dEJRVUZCTEZWQlExUXNWMEZCVnl4RFFVRkRMRmRCUVZjc1ZVRkJWU3hEUVVGRExGZEJRVmNzVVVGQlVUdEJRVU51UkN4dFFrRkJUenRCUVVGQkxGVkJRMVE3UVVGRlFTeG5Ra0ZCVFN4cFFrRkJhVUlzVjBGQlZ5eFZRVUZWTEVsQlFVa3NTMEZCU3p0QlFVTnlSQ3huUWtGQlRTeEpRVUZKTEdOQlFXTXNTMEZCU3l4UFFVRlBMRU5CUVVNc1JVRkJSU3hWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEVsQlFVazdRVUZETDBRc1owSkJRVTBzU1VGQlNTeGpRVUZqTEV0QlFVc3NUMEZCVHl4RFFVRkRMRVZCUVVVc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeEpRVUZKTzBGQlF5OUVMR2RDUVVGTkxGZEJRVmNzUlVGQlJTeExRVUZMTzBGQlEzaENMR05CUVVrc1NVRkJkMEk3UVVGRE5VSXNaMEpCUVUwc1dVRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF6dEJRVU4yUWl4alFVRkpMRTlCUVU4c1YwRkJWeXhIUVVGSE8wRkJRM1pDTEdkQ1FVRkpMR05CUVdNc1MwRkJTeXhQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1RVRkJUVHRCUVVOb1JTeHpRa0ZCVlN4TFFVRkxMRU5CUVVNN1FVRkJRU3hWUVVOc1FqdEJRVU5CTEdkQ1FVRk5MRk5CUVZNc1pVRkJaU3hWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEZWQlFWVXNXVUZCV1N4TlFVRk5PMEZCUXpsRkxHOUNRVUZWTEV0QlFVc3NUVUZCVFR0QlFVTnlRaXhuUWtGQlRTeFhRVUU0UWp0QlFVRkJMRmxCUTJ4RExFVkJRVU1zVFVGQlRTeGxRVUZsTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUVVjc1JVRkJReXhOUVVGTkxFdEJRVXNzVFVGQlRTeE5RVUZMTzBGQlFVRXNXVUZCUnl4RlFVRkRMRTFCUVUwc1MwRkJTeXhOUVVGTkxFMUJRVXM3UVVGQlFTeFpRVUZITEVWQlFVTXNUVUZCVFN4TFFVRkxMRTFCUVUwc1RVRkJTenRCUVVGQkxGbEJReTlITEVWQlFVTXNUVUZCVFN4VFFVRlRMRTFCUVUwc1RVRkJTenRCUVVGQkxGbEJRVWNzUlVGQlF5eE5RVUZOTEZGQlFWRXNUVUZCVFN4TlFVRkxPMEZCUVVFc1ZVRkRNVVE3UVVGRFFTeHBRa0ZCVHp0QlFVRkJMRWxCUTFBc1lVRkJZU3hwUWtGQmFVSXNVVUZCVVN4RlFVRkZMR2xDUVVGcFFpeEhRVUZITEZOQlFWTXNRMEZCUXp0QlFVRkJPMEZCUVVFc1NVRkZkRVVzWVVGQllTeFZRVUZWTEVOQlFVTTdRVUZCUVN4TlFVTjBRaXhoUVVGaExITkRRVUZ6UXl4elFrRkJjMElzUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc2EwSkJTemxFTEZGQlFWRTdRVUZCUVR0QlFVRkJMRkZCUld4Q0xFbEJRVWs3UVVGQlFUdEJRVUZCTzBGQlFVRXNUVUZIVGl4alFVRmpPMEZCUVVFc1QwRkRZaXhOUVVGTk8wRkJRMUFzWjBKQlFVa3NTMEZCU3l4TlFVRk5PMEZCUTJJc2NVSkJRVThzYVVKQlFXbENMRVZCUVVVc01rSkJRVEpDTEdOQlFXTXNUVUZCVFN4RFFVRkRMR05CUTNSRkxGRkJRVkVzY1VKQlFYRkNMRVZCUVVVc1dVRkJXU3hUUVVGVExFTkJRVU03UVVGQlFTeFpRVU16UkR0QlFVTkJMRzFDUVVGUE8wRkJRVUVzVlVGRFZDeEhRVUZITEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUVVFc1VVRkhUanRCUVVWQkxHVkJRVTg3UVVGQlFTeFZRVU5NTEUxQlFVMDdRVUZCUVN4VlFVTk9MR0ZCUVdFc1JVRkJReXhOUVVGTkxFZEJRVWNzVjBGQlZ5eFJRVUZSTEVsQlFVa3NhMEpCUVdsQ08wRkJRVUVzVlVGREwwUXNXVUZCV1N4UFFVRlBPMEZCUVVFc1dVRkRha0lzVTBGQlV5eERRVUZETEVWQlFVTXNUVUZCVFN4aFFVRmhMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzVTBGQlVTeERRVUZETzBGQlFVRXNXVUZETTBRc1pVRkJaU3hGUVVGRExFZEJRVWNzUzBGQlN6dEJRVUZCTEdOQlFVc3NZVUZCWVR0QlFVRkJPMEZCUVVFc1dVRkJkVUlzUlVGQlF6dEJRVUZCTEZsQlEyeEZPMEZCUVVFc1ZVRkRSanRCUVVGQkxGVkJRMEU3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVVlBMRTFCUVUwc2MwSkJRWE5DTEVOQlFVTXNaVUZCZDBRN1FVRkRNVVlzWTBGQlRTeFRRVUZUTEZkQlFWYzdRVUZETVVJc1kwRkJUU3hUUVVGVExGZEJRVmM3UVVGRE1VSXNZMEZCVFN4UlFVRlJMRmRCUVZjN1FVRkRla0lzWTBGQlRTeFBRVUZQTEZkQlFWYzdRVUZEZUVJc1pVRkJUeXhGUVVGRExGRkJRVkVzVVVGQlVTeFBRVUZQTEUxQlFVMHNWVUZCVlN4SFFVRkhMRmRCUVZjc1RVRkJUU3hKUVVGSkxGZEJRVmNzVFVGQlRTeEpRVUZKTEZkQlFWY3NWVUZCVlN4RFFVRkRMRWRCUVVVN1FVRkJRU3hOUVVOMFNEdEJRVVZQTEUxQlFVMHNUMEZCVHl4RFFVRkRMRk5CUVhsQ0xHVkJRWEZETzBGQlEycEdMRkZCUVVGQkxHbENRVUZsTEZGQlFWRXNUVUZCVFR0QlFVTTNRaXhuUWtGQlVTeFJRVUZSTEhOQ1FVRnpRaXhSUVVGUkxGRkJRVkVzVlVGQlZTeERRVUZETzBGQlFVRXNUVUZEYmtVN1FVRkJRVHRCUVVGQk96czdRVU40U1VFc1RVRmxUU3dyUWtGM1IwRXNZVUYzU0VFc2JVTkJiMFJQTzBGQmJsTmlPMEZCUVVFN1FVRkJRVHRCUVVkQk8wRkJSVUU3UVVGSFFUdEJRVTlCTEUxQlFVMHNaME5CUTBZc1EwRkJReXhSUVVFclFpeGxRVUZ2UkR0QlFVTnNSaXhqUVVGTkxGTkJRVk1zVDBGQlR5eERRVUZETEVWQlFVVTdRVUZEZWtJc1kwRkJUU3hqUVVGak8wRkJRM0JDTEdOQlFVMHNUMEZCVHp0QlFVTmlMR05CUVUwc1dVRkJXU3hWUVVGVkxHZENRVUZuUWl4UlFVRlJMRWxCUVVrN1FVRkRlRVFzWTBGQlRTeFhRVUZYTEZWQlFWVXNhMEpCUVd0Q0xGRkJRVkVzU1VGQlNUdEJRVU42UkN4alFVRk5MR0ZCUVdFc2FVSkJRV2xDTEZGQlFWRTdRVUZETlVNc1kwRkJUU3hwUWtGQmFVSXNWMEZCVnp0QlFVTnNReXhqUVVGTkxHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1IwRkJSeXhqUVVGak8wRkJRM2hFTEdOQlFVMHNiMEpCUVhkRUxFTkJRVU1zVVVGQlVTeFJRVUZSTEUxQlFVMDdRVUZEY2tZc1kwRkJUU3hyUWtGRFJpeERRVUZETEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzVTBGQlVTeEhRVUZITEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzWlVGQll5eERRVUZETzBGQlF6TkdMSGRDUVVGblFpeExRVUZMTEVkQlFVY3NNa0pCUVRKQ0xGbEJRVmtzVlVGQlZTeERRVUZETzBGQlJURkZMR05CUVUwc2EwSkJRV3RDTEVOQlFVTXNhVUpCUVN0Q08wRkJRM1JFTEdkQ1FVRk5MRWxCUVVrc1kwRkJZeXhMUVVGTExFOUJRVThzUTBGQlF5eEZRVUZGTEZWQlFWVXNWMEZCVnl4UlFVRlJMRlZCUVZVN1FVRkRPVVVzWjBKQlFVMHNVVUZCVVN4alFVRmpMRk5CUVZNc1QwRkJUeXhEUVVGRExFVkJRVVVzVlVGQlZTeFBRVUZQTEVOQlFVTXNSVUZCUlN4SlFVRkpPMEZCUTNaRkxHZENRVUZOTEU5QlFVOHNZMEZCWXl4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNTVUZCU1R0QlFVTnlSU3huUWtGQlRTeFRRVUZUTEdWQlFXVXNWVUZCVlN4UFFVRlBMRU5CUVVNc1JVRkJSU3hWUVVGVkxGZEJRVmNzVVVGQlVTeFZRVUZWTzBGQlEzcEdMR2RDUVVGTkxGbEJRVmtzUTBGQlF5eEhRVUZITEU5QlFVOHNUVUZCVFN4TlFVRk5PMEZCUTNwRExHZENRVUZOTEZkQlFWY3NSVUZCUlN4TFFVRkxPMEZCUTNoQ0xHZENRVUZOTEZWQlFWVXNaVUZCWlN4SlFVRkpMRkZCUVZFc1RVRkJUU3hWUVVGVk8wRkJRek5FTEdkQ1FVRk5MR2RDUVVGblFqdEJRVVYwUWl4blFrRkJUU3hYUVVFNFFpeERRVUZETEVWQlFVTXNUVUZCVFN4WlFVRlpMRTFCUVUwc1RVRkJTeXhIUVVGSExFVkJRVU1zVFVGQlRTeHJRa0ZCYTBJc1RVRkJUU3hOUVVGTExFTkJRVU03UVVGRE0wY3NhVUpCUVU4N1FVRkJRVHRCUVVGQk8wRkJRVUVzTWtOQlJ6UkNMRTlCUVU4c1MwRkJTeXhoUVVGaE8wRkJRVUVzTUVKQlF6RkRMR0ZCUVdFN1FVRkJRU3hKUVVOdVF5eGhRVUZoTEdsQ1FVRnBRaXhSUVVGUkxFVkJRVVVzYVVKQlFXbENMRWRCUVVjc1UwRkJVeXhEUVVGRE8wRkJRVUVzU1VGRGRFVXNZVUZCWVN4VlFVRlZMR0ZCUVdFc1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRzlDUVU5eVFpeFBRVUZQTzBGQlFVRTdRVUZCUVN3MFFrRkZReXhQUVVGUExFbEJRVWtzUlVGQlJTeEpRVUZKTEZOQlFWTXNWMEZCVnl4SFFVRkhMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeHhRa0ZoYUVRc1ZVRkJWU3h6UWtGQmMwSXNWVUZCVlN4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeG5Ra0ZMYUVRc1QwRkJUenRCUVVGQk8wRkJRVUVzZVVKQlJVVXNUMEZCVHl4SlFVRkpMRVZCUVVVc1NVRkJTU3hUUVVGVExGZEJRVmNzUjBGQlJ5eERRVUZETEU5QlFVOHNUMEZCVHp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzTkVKQlkzQkVMRlZCUVZVc2MwSkJRWE5DTEZWQlFWVXNRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxHMUdRVWxaTEZkQlFWY3NUMEZCVHp0QlFVRkJMSGxEUVVNMVJDeE5RVUZOTEZsQlFWa3NVMEZCVXl4RFFVRkRPMEZCUVVFc05rSkJRM2hETEV0QlFVc3NXVUZCV1N4VFFVRlRMRU5CUVVNN1FVRkJRVHRCUVVGQkxHOUNRVVZ3UXl4RlFVRkZMRWxCUVVrc1UwRkJVeXhYUVVGWExFZEJRVWNzUTBGQlF5eE5RVUZOTEZGQlFWRXNTVUZCU1N4UFFVRlBMSEZDUVVGeFFpeFJRVUZSTEVsQlF6VkdMRTlCUVU4N1FVRkJRU3hSUVVOWUxFOUJRVThzU1VGQlNTeFRRVUZUTEZkQlFWY3NTMEZCU3l4UFFVRlBMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJRVUVzVVVGSE9VTTdRVUZEUVN4bFFVRlBPMEZCUVVFc1ZVRkRUQ3hIUVVGSExFVkJRVU1zVFVGQlRTeDNRa0ZCZFVJN1FVRkJRVHRCUVVGQkxGVkJSV3BETEdGQlFXRXNSVUZCUXl4TlFVRk5MRWRCUVVjc1YwRkJWeXhQUVVGUExFbEJRVWtzVlVGQlZTeEpRVUZKTEd0Q1FVRnBRanRCUVVGQkxGVkJRelZGTEZsQlFWa3NUMEZCVHp0QlFVRkJMRmxCUTJwQ0xGTkJRVk03UVVGQlFTeGpRVU5RTEVWQlFVTXNUVUZCVFN4aFFVRmhMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzVTBGQlVUdEJRVUZCTEZsQlEyeEVPMEZCUVVFc1dVRkRRU3hsUVVGbExFVkJRVU1zUjBGQlJ5eFZRVUZUTzBGQlFVRXNXVUZETlVJN1FVRkJRU3hWUVVOR08wRkJRVUVzVlVGRFFUdEJRVUZCTEZGQlEwWTdRVUZCUVN4TlFVTkdPMEZCUlVvc1RVRkJUU3hqUVVOR0xFTkJRVU1zVTBGQmVVSXNUMEZCYlVJc1QwRkJiVUlzVFVGQmEwSXNSMEZCVnl4SFFVRlhMRWRCUTNaSExGbEJRVzlDTzBGQlEyNUNMR05CUVUwc1lVRkJZU3hwUWtGQmFVSXNRMEZCUXp0QlFVTnlReXhqUVVGTkxFdEJRVXM3UVVGSFdDeGpRVUZOTEdGQlFXRXNaVUZCWlN4SlFVRkpMRlZCUVZVc1VVRkJVU3hWUVVGVk8wRkJRMnhGTEdOQlFVMHNZMEZCWXl4bFFVRmxMRWxCUVVrc1VVRkJVU3hOUVVGTkxGVkJRVlU3UVVGREwwUXNZMEZCVFN4cFFrRkJhVUlzUTBGQlF5eE5RVUZqTEZOQlFXbENMRWRCUVVjc1ZVRkJWU3hKUVVGSkxFbEJRVWtzUzBGQlN5eEpRVUZKTzBGQlEzSkdMR05CUVUwc1kwRkJZeXhKUVVGSkxFbEJRVWs3UVVGRE5VSXNZMEZCVFN4VFFVRlRMRXRCUVVzc1MwRkJTeXhKUVVGSkxFVkJRVVU3UVVGRkwwSXNZMEZCVFN4M1FrRkJORVFzUTBGQlF5eE5RVUZOTzBGQlEzcEZMR05CUVUwc2MwSkJRWGRETzBGQlFVRXNWVUZETlVNc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4UFFVRk5PMEZCUVVFc1ZVRkJSeXhGUVVGRExIVkNRVUYxUWl4TlFVRk5MRVZCUVVNN1FVRkJRU3hWUVVOMFJTeEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxFdEJRVXNzVFVGQlRTeEpRVUZKTEZWQlFWVXNSVUZCUXp0QlFVRkJMRlZCUTNoRUxFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc1MwRkJTeXhOUVVGTkxFbEJRVWtzU1VGQlNTeFZRVUZWTEVWQlFVTTdRVUZCUVN4UlFVTTVSRHRCUVVWQkxHTkJRVTBzYzBKQlFYTkNMRU5CUVVNc2FVSkJRU3RDTzBGQlF6RkVMR2RDUVVGTkxHTkJRV01zWTBGQll5eFRRVUZUTEUxQlFVMHNWVUZCVlN4TlFVRk5MRTFCUVUwc1ZVRkJWVHRCUVVOcVJpeHBRa0ZCVHp0QlFVRkJMRWxCUTFnc1lVRkJZU3hwUWtGQmFVSXNWMEZCVnl4RFFVRkRPMEZCUVVFc2EwVkJRMjlDTEZWQlFWVTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3hKUVVsNFJTeGhRVUZoTEZWQlFWVXNSVUZCUlN4RFFVRkRPMEZCUVVFc05FTkJRMk1zUlVGQlJUdEJRVUZCTEN0RFFVTkRMRVZCUVVVN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMR2RDUVZGcVF5eFhRVUZYTEU5QlFVOHNWVUZCVlN4RFFVRkRPMEZCUVVFc2RVSkJRM1JDTEZkQlFWY3NUMEZCVHl4VlFVRlZMRU5CUVVNN1FVRkJRVHRCUVVGQkxITkNRVVU1UWl4WFFVRlhPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzTWtKQlNVNHNaVUZCWlN4UFFVRlBMRmxCUVZrc1EwRkJRenRCUVVGQk8wRkJRVUVzVVVGRmVFUTdRVUZGUVN4alFVRk5MR0ZCUVdFc1VVRkJVVHRCUVVGQkxGVkJRM1pDTzBGQlFVRXNXVUZEUlN4TlFVRk5PMEZCUVVFc1dVRkRUaXhoUVVGaExFVkJRVU1zVFVGQlRTeEhRVUZITEZWQlFWVXNTVUZCU1N4dFFrRkJiVUlzYzBKQlFYRkNPMEZCUVVFc1dVRkROMFVzV1VGQldTeFBRVUZQTzBGQlFVRXNZMEZEYWtJc1UwRkJVenRCUVVGQkxHZENRVU5RTEVWQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eDNRa0ZCZDBJN1FVRkJRU3hqUVVOb1JEdEJRVUZCTEdOQlEwRXNaVUZCWlN4RlFVRkRMRWRCUVVjc1NVRkJTU3hKUVVGSkxGZEJRVlU3UVVGQlFTeGpRVU55UXl4cFFrRkJhVUk3UVVGQlFTeFpRVU51UWp0QlFVRkJMRmxCUTBFc2FVSkJRV2xDTzBGQlFVRXNWVUZEYmtJN1FVRkJRU3hWUVVOQkxFVkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NSMEZCUnl4VFFVRlRMRU5CUVVNc1JVRkJSU3hGUVVGRE8wRkJRVUVzVVVGQlF5eEZRVUZGTEVOQlFVTTdRVUZGZGtNc1kwRkJUU3hyUWtGQmIwTTdRVUZCUVN4VlFVTjRReXhGUVVGRExIVkNRVUYxUWl4TlFVRk5MRmxCUVZjN1FVRkJRU3hWUVVGSExFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc1JVRkJRenRCUVVGQkxGVkJRek5GTEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzUzBGQlN5eE5RVUZOTEVsQlFVa3NWVUZCVlN4RlFVRkRPMEZCUVVFc1ZVRkRlRVFzUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hMUVVGTExFMUJRVTBzUzBGQlN5eEpRVUZKTEZWQlFWVXNSVUZCUXp0QlFVRkJMRkZCUXk5RU8wRkJRMEVzWTBGQlRTeHZRa0ZCZDBRc1EwRkJReXhSUVVGUkxGRkJRVkVzVFVGQlRUdEJRVU55Uml4alFVRk5MR3RDUVVGclFpeERRVUZETEdsQ1FVRXJRanRCUVVOMFJDeG5Ra0ZCVFN4alFVRmpMR05CUVdNc1UwRkJVeXhOUVVGTkxGVkJRVlVzVFVGQlRTeE5RVUZOTEZWQlFWVTdRVUZEYWtZc1owSkJRVTBzWVVGQllTeGpRVUZqTEZGQlFWRXNTMEZCU3l4VlFVRlZMRXRCUVVzc1RVRkJUU3hWUVVGVk8wRkJRemRGTEdsQ1FVRlBPMEZCUVVFc01rUkJRelJETEZWQlFWVTdRVUZCUVN3eVJFRkRWaXhaUVVGWkxFdEJRVXNzVDBGQlR6dEJRVUZCTERCRVFVTjZRaXhYUVVGWExFdEJRVXNzVDBGQlR6dEJRVUZCTEd0RlFVTm1MRlZCUVZVN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeEpRVWw0UlN4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQkxFMUJRM1JDTEdGQlFXRXNjME5CUVhORExIZENRVUYzUWl4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeG5Ra0ZMYkVVc1YwRkJWeXhQUVVGUExGVkJRVlVzUTBGQlF6dEJRVUZCTEhWQ1FVTjBRaXhYUVVGWExFOUJRVThzVlVGQlZTeERRVUZETzBGQlFVRXNiVU5CUTJwQ0xFVkJRVVU3UVVGQlFTeG5SVUZETWtJc1JVRkJSVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN3clJFRk5TQ3hQUVVGUE8wRkJRVUVzY1VOQlEycERMRmRCUVZjN1FVRkJRU3g1UWtGRGRrSXNWMEZCVnp0QlFVRkJPMEZCUVVFc01rSkJSVlFzWlVGQlpTeG5Ra0ZCWjBJc1kwRkJZeXhEUVVGRE8wRkJRVUU3UVVGQlFTeFJRVVZ1UlR0QlFVTkJMR1ZCUVU4c1VVRkJVVHRCUVVGQkxGVkJRMWc3UVVGQlFTeFpRVU5GTEUxQlFVMDdRVUZCUVR0QlFVRkJMRmxCUlU0c1lVRkJZU3hGUVVGRExFMUJRVTBzUjBGQlJ5eFZRVUZWTEVsQlFVa3NUMEZCVHl4SlFVRkpMR3RDUVVGcFFqdEJRVUZCTEZsQlEycEZMRmxCUVZrc1QwRkJUenRCUVVGQkxHTkJRMnBDTEZOQlFWTTdRVUZCUVN4blFrRkRVQ3hGUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMSGRDUVVGM1FqdEJRVUZCTEdOQlF6VkRPMEZCUVVFc1kwRkRRU3hsUVVGbExFVkJRVU1zUjBGQlJ5eExRVUZMTzBGQlFVRXNaMEpCUVVzc1kwRkJZenRCUVVGQk8wRkJRVUVzWTBGQmRVSXNSVUZCUXp0QlFVRkJMR05CUTI1Rk8wRkJRVUVzV1VGRFJqdEJRVUZCTEZsQlEwRTdRVUZCUVN4VlFVTkdPMEZCUVVFc1ZVRkRRU3hGUVVGRExGRkJRVkVzUTBGQlF5eFpRVUZaTEU5QlFVOHNTVUZCU1N4SFFVRkhMRk5CUVZNc1EwRkJReXhGUVVGRkxFVkJRVU03UVVGQlFTeFJRVUZETEVWQlFVVXNRMEZCUXp0QlFVRkJMRTFCUXpORU8wRkJSVW9zVFVGQlRTeHZRMEZEUml4RFFVRkRMRk5CUVhsQ0xGRkJRU3RDTEdWQlFYVkRPMEZCUXpsR0xHTkJRVTBzVTBGQlV5eFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVTjZRaXhqUVVGTkxHTkJRV003UVVGRGNFSXNZMEZCVFN4SlFVRkpMRTlCUVU4c1EwRkJRenRCUVVOc1FpeGpRVUZOTEVsQlFVa3NUMEZCVHl4UFFVRlBMRk5CUVZNc1EwRkJRenRCUVVOc1F5eGpRVUZOTEVsQlFVa3NWVUZCVlN4clFrRkJhMElzVVVGQlVTeERRVUZETEVsQlFVazdRVUZEYmtRc1kwRkJUU3hoUVVGaExHbENRVUZwUWl4RFFVRkRPMEZCUTNKRExHTkJRVTBzWVVGQllTeFZRVUZWTEV0QlFVc3NWMEZCVnl4SlFVRkpPMEZCUTJwRUxHTkJRVTBzYTBKQlEwWXNRMEZCUXl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEVWQlFVTXNSMEZCUnl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEV0QlFVc3NUVUZCVFN4SlFVRkpMRlZCUVZVc1JVRkJReXhEUVVGRE8wRkJRMmhITEdOQlFVMHNiMEpCUVhkRUxFTkJRVU1zVVVGQlVTeE5RVUZOTzBGQlJUZEZMR05CUVUwc2IwSkJRVzlDTEZsQlFWa3NVMEZCVXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhYUVVGWExFOUJRVTg3UVVGRE0wY3NZMEZCVFN4clFrRkJhMElzUTBGQlF5eHBRa0ZCSzBJN1FVRkRkRVFzWjBKQlFVMHNWMEZCVnl3MFFrRkJORUlzVDBGQlR5eERRVUZETEVWQlFVVXNVVUZCVVR0QlFVTXZSQ3huUWtGQlRTeFpRVUZaTEdWQlFXVXNTVUZCU1N4VlFVRlZMRkZCUVZFc1ZVRkJWVHRCUVVOcVJTeG5Ra0ZCVFN4blFrRkJaMElzWlVGQlpTeEpRVUZKTEZkQlFWY3NUVUZCVFN4VlFVRlZMRWxCUVVrc1VVRkJVVHRCUVVWb1JpeG5Ra0ZCVFN4alFVRmpMR05CUVdNc1UwRkJVeXhQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRTFCUVUwc1ZVRkJWVHRCUVVONlJpeG5Ra0ZCVFN4bFFVRmxMR1ZCUVdVc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEdGQlFXRXNWVUZCVlR0QlFVVjZSaXhwUWtGQlR6dEJRVUZCTERKRVFVTTBReXhaUVVGWkxFdEJRVXNzVDBGQlR6dEJRVUZCTEdkRlFVTnVRaXhUUVVGVE8wRkJRVUVzYTBWQlExQXNZVUZCWVN4TFFVRkxMRTlCUVU4N1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeEpRVWwyUml4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4clJFRk5jMElzWVVGQllTeGxRVUZsTEdGQlFXRTdRVUZCUVR0QlFVRkJMRkZCUlhKR08wRkJRMEVzWjBKQlFWRTdRVUZCUVN4VlFVTktPMEZCUVVFc1dVRkRSU3hOUVVGTk8wRkJRVUVzV1VGRFRpeGhRVUZoTEVWQlFVTXNUVUZCVFN4SFFVRkhMRlZCUVZVc1NVRkJTU3hyUWtGQmFVSTdRVUZCUVN4WlFVTjBSQ3haUVVGWkxFOUJRVTg3UVVGQlFTeGpRVU5xUWl4VFFVRlRMRU5CUVVNc1JVRkJReXhOUVVGTkxHRkJRV0VzVlVGQlZTeFBRVUZQTEVOQlFVTXNSVUZCUlN4VFFVRlJMRU5CUVVNN1FVRkJRU3hqUVVNelJDeGxRVUZsTEVWQlFVTXNSMEZCUnl4TFFVRkxPMEZCUVVFc1owSkJRVXNzWVVGQllUdEJRVUZCTzBGQlFVRXNZMEZCZFVJc1JVRkJRenRCUVVGQkxHTkJRMnhGTzBGQlFVRXNXVUZEUmp0QlFVRkJMRmxCUTBFN1FVRkJRU3hWUVVOR08wRkJRVUVzVlVGRFFTeEZRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhwUWtGQmFVSXNSVUZCUXp0QlFVRkJMRkZCUVVNN1FVRkJRU3hOUVVNNVF6dEJRVVZITEUxQlFVMHNaVUZCWlN4RFFVRkRMRk5CUVhsQ0xHVkJRVFpETzBGQlEycEhMRmxCUVVrc1YwRkJWeXhYUVVGWExGRkJRVkU3UVVGRGFFTXNORU5CUVd0RExGTkJRVk1zVVVGQlVTeFJRVUZSTEZWQlFWVTdRVUZCUVN4UlFVTjJSU3hQUVVGUE8wRkJRMHdzYTBKQlFWRXNVVUZCVVN3NFFrRkJPRUlzVVVGQlVTeFJRVUZSTEZWQlFWVXNRMEZCUXp0QlFVRkJMRkZCUXpORk8wRkJRVUVzVFVGRFJqdEJRVUZCTzBGQlFVRTdPenRCUTNwVFFTeE5RV2RDVFVNc2EwSkJUVUVzTkVKQk5rZFBPMEZCYmtsaU8wRkJRVUU3UVVGQlFUdEJRVWRCTzBGQlJVRTdRVUZIUVR0QlFWRkJMRTFCUVUxQkxHMUNRVUZwUWl4RFFVRkRMRmRCUVhkRE8wRkJRemxFTEZsQlFVa3NRMEZCUXl4VlFVRlZMRTlCUVU4c1UwRkJVeXhIUVVGSE8wRkJRMmhETEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3gxUTBGQmRVTTdRVUZCUVN4UlFVTjZSRHRCUVVGQkxFMUJRMFk3UVVGRlFTeE5RVUZOTERaQ1FVTkdMRU5CUVVNc1VVRkJLMElzV1VGQmFVTXNaMEpCUVhGRE8wRkJRM0JITEdOQlFVMHNZVUZCWVN4WFFVRlhPMEZCUlRsQ0xHTkJRVTBzVTBGQlV5eFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVTjZRaXhqUVVGTkxGRkJRVkVzVDBGQlR5eERRVUZETzBGQlEzUkNMR05CUVUwc1QwRkJUeXhEUVVGRExHTkJRV01zVDBGQlR5eERRVUZETzBGQlJYQkRMR05CUVUwc1kwRkJZenRCUVVOd1FpeGpRVUZOTEU5QlFVOHNWVUZCVlN4alFVRmpMRmRCUVZjc1RVRkJUU3hQUVVGUExFMUJRVTA3UVVGRGJrVXNZMEZCVFN4WlFVRlpMRlZCUVZVc1owSkJRV2RDTEZGQlFWRXNTVUZCU1R0QlFVTjRSQ3hqUVVGTkxGZEJRVmNzVlVGQlZTeHJRa0ZCYTBJc1VVRkJVU3hKUVVGSk8wRkJSWHBFTEdOQlFVMHNXVUZCV1N4VlFVRlZMRXRCUVVzc1RVRkJUU3hKUVVGSk8wRkJRek5ETEdOQlFVMHNWMEZCVnl4UFFVRlBMRlZCUVZVc1MwRkJTeXhMUVVGTExFbEJRVWtzU1VGQlNUdEJRVU53UkN4WlFVRkpMR05CUVdNc1dVRkJZU3hSUVVGUkxHRkJRV0VzVlVGQlZ6dEJRVU0zUkN4blFrRkJUU3hKUVVGSkxFMUJRVTBzSzBKQlFTdENMRkZCUVZFN1FVRkJRVHRCUVVGQkxESkNRVVZ3UXl4VFFVRlRMSEZDUVVGeFFpeFJRVUZSTEVWQlFVVTdRVUZCUVN4UlFVTTNSRHRCUVVWQkxHTkJRVTBzYlVKQlFUWkNMRU5CUVVNN1FVRkRjRU1zYVVKQlFWTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1QwRkJUeXhSUVVGUkxFVkJRVVVzUjBGQlJ6dEJRVU4wUXl4alFVRkpMRWxCUVVrc1RVRkJUVHRCUVVOYUxEWkNRVUZwUWl4TFFVRkxMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRVUVzVlVGRGFrTXNUMEZCVHp0QlFVTk1MRFpDUVVGcFFpeExRVUZMTEVOQlFVTTdRVUZCUVN4VlFVTjZRanRCUVVGQkxGRkJRMFk3UVVGRFFTeGpRVUZOTEdGQlFXRXNhVUpCUVdsQ0xGRkJRVkU3UVVGRE5VTXNZMEZCVFN4dlFrRkJkMFFzUTBGQlF5eFJRVUZSTEUxQlFVMDdRVUZETjBVc1kwRkJUU3hyUWtGQmIwTTdRVUZCUVN4VlFVTjRReXhGUVVGRExIVkNRVUYxUWl4TlFVRk5MRlZCUVZNN1FVRkJRU3hWUVVGSExFVkJRVU1zY1VKQlFYTkNMRTFCUVUwc1UwRkJVVHRCUVVGQkxGVkJReTlGTEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzUzBGQlN5eE5RVUZOTEZkQlFWY3NWVUZCVlN4RlFVRkRPMEZCUVVFc1ZVRkRMMFFzUlVGQlF5eHhRa0ZCYzBJc1RVRkJUU3hYUVVGWExGRkJRVTg3UVVGQlFTeFJRVU5xUkR0QlFVTkJMRmxCUVVrc1RVRkJUVHRCUVVOU0xEUkNRVUZyUWl4TFFVRkxMRTFCUVUwN1FVRkJRU3hSUVVNdlFqdEJRVU5CTEdOQlFVMHNiMEpCUVc5Q0xHTkJRV003UVVGRGVFTXNZMEZCVFN4clFrRkJhMElzWTBGQll6dEJRVVYwUXl4alFVRk5MR3RDUVVGclFpeERRVUZETEdsQ1FVRXJRanRCUVVOMFJDeG5Ra0ZCVFN4WFFVRlhMRFJDUVVFMFFpeFBRVUZQTEVOQlFVTXNSVUZCUlN4UlFVRlJPMEZCUXk5RUxHZENRVUZOTEZsQlFWazdRVUZCUVN4WlFVTm9RaXhqUVVGakxFdEJRVXNzVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVlN4UFFVRlBMRU5CUVVNc1JVRkJSU3hOUVVGTkxGVkJRVlU3UVVGQlFTeFpRVU5xUlN4alFVRmpMRk5CUVZNc1RVRkJUU3hWUVVGVkxFMUJRVTBzVFVGQlRTeFZRVUZWTzBGQlFVRXNWVUZETDBRN1FVRkRRU3hqUVVGSkxFMUJRVTA3UVVGRFVpeHpRa0ZCVlN4TFFVRkxMR05CUVdNc1VVRkJVU3hMUVVGTExGVkJRVlVzUzBGQlN5eE5RVUZOTEZWQlFWVXNRMEZCUXp0QlFVRkJMRlZCUXpWRk8wRkJRMEVzYjBKQlFWVXNTMEZCU3l4bFFVRmxMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzVlVGQlZTeGhRVUZoTEZWQlFWVXNRMEZCUXp0QlFVTndSaXhqUVVGSkxHMUNRVUZ0UWp0QlFVTnlRaXh6UWtGQlZTeExRVUZMTEdWQlFXVXNiVU5CUVc5RExHZENRVUZuUWl4RFFVRkRPMEZCUVVFc1ZVRkRja1k3UVVGRFFTeGpRVUZKTEdsQ1FVRnBRanRCUVVOdVFpeHpRa0ZCVlN4TFFVRkxMR1ZCUVdVc2FVTkJRV3RETEdkQ1FVRm5RaXhEUVVGRE8wRkJRVUVzVlVGRGJrWTdRVUZGUVN4blFrRkJUU3hYUVVFNFFqdEJRVUZCTEZsQlEyeERMRVZCUVVNc1RVRkJUU3hqUVVGakxFMUJRVTBzVFVGQlN6dEJRVUZCTEZsQlFVY3NSVUZCUXl4TlFVRk5MR0ZCUVdFc1RVRkJUU3hOUVVGTE8wRkJRVUVzV1VGRGJFVXNSVUZCUXl4TlFVRk5MSGRDUVVGM1FpeE5RVUZOTEUxQlFVczdRVUZCUVN4WlFVRkhMRVZCUVVNc1RVRkJUU3hYUVVGWExFMUJRVTBzVFVGQlN6dEJRVUZCTEZWQlF6VkZPMEZCUTBFc2FVSkJRVTg3UVVGQlFTeEpRVU5ZTEdGQlFXRXNhVUpCUVdsQ0xGRkJRVkVzUlVGQlJTeHBRa0ZCYVVJc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGQlFTeEpRVU4wUlN4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQkxFMUJRM1JDTEdGQlFXRXNjME5CUVhORExIRkNRVUZ4UWl4RFFVRkRPMEZCUVVFN1FVRkJRU3gzUWtGRmRrUXNWMEZCVnl4UFFVRlBMRlZCUVZVc1EwRkJRenRCUVVGQkxDdENRVU4wUWl4WFFVRlhMRTlCUVU4c1ZVRkJWU3hEUVVGRE8wRkJRVUU3UVVGQlFUdEJRVUZCTEc5Q1FVZDRReXhWUVVGVkxGVkJRVlVzV1VGQldTeGxRVUZsTEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3hwUWtGSmJrUXNWVUZCVlN4bFFVRmxMRlZCUVZVc1EwRkJRenRCUVVGQkxHOURRVU5xUWl4VlFVRlZMSE5DUVVGelFpeFZRVUZWTEVOQlFVTXNlVUpCUTI1RkxHRkJRV0VzUzBGQlN5eGxRVUZsTzBGQlFVRTdRVUZCUVR0QlFVRkJMSFZDUVVkMFFpeFZRVUZWTEZWQlFWVXNXVUZCV1N4bFFVRmxMRU5CUVVNN1FVRkJRU3gxUWtGRGFFUXNWVUZCVlN4VlFVRlZMRmxCUVZrc1ZVRkJWU3hEUVVGRE8wRkJRVUVzTmtKQlEzSkRMRlZCUVZVc1EwRkJReXhGUVVGRkxFdEJRVXNzUzBGQlN5eGpRVUZqTEdGQlFXRXNTMEZCU3l4UlFVRlJPMEZCUVVFc1ZVRkRiRVlzVDBGQlR5eExRVUZMTEZWQlFWVXNWVUZCVlN4WlFVRlpMRk5CUVZNc1EwRkJReXhMUVVGTExFVkJRVVU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4TlFVbHFSU3h2UWtGQmIwSXNkME5CUVhkRExFVkJRVVU3UVVGQlFTeE5RVU01UkN4clFrRkJhMElzTmtOQlFUWkRMRVZCUVVVN1FVRkJRVHRCUVVGQkxGRkJSV3BGTzBGQlEwRXNZMEZCVFN4VlFVRlZMRU5CUVVNc1JVRkJReXhOUVVGTkxHRkJRV0VzVlVGQlZTeFBRVUZQTEVOQlFVTXNSVUZCUlN4VFFVRlJMRU5CUVVNN1FVRkRiRVVzV1VGQlNTeHRRa0ZCYlVJN1FVRkRja0lzYTBKQlFWRXNTMEZCU3l4RlFVRkRMRTFCUVUwc2EwSkJRV3RDTEhkQ1FVRjNRaXhEUVVGRE8wRkJRVUVzVVVGRGFrVTdRVUZEUVN4WlFVRkpMR2xDUVVGcFFqdEJRVU51UWl4clFrRkJVU3hMUVVGTExFVkJRVU1zVFVGQlRTeHJRa0ZCYTBJc2QwSkJRWGRDTEVOQlFVTTdRVUZCUVN4UlFVTnFSVHRCUVVWQkxHVkJRVTg3UVVGQlFTeFZRVU5NTEUxQlFVMDdRVUZCUVN4VlFVTk9MR0ZCUVdFc1JVRkJReXhOUVVGTkxFZEJRVWNzVlVGQlZTeEpRVUZKTEZkQlFWY3NTVUZCU1N4VlFVRlZMRWxCUVVrc2EwSkJRV2xDTzBGQlFVRXNWVUZEYmtZc1dVRkJXU3hQUVVOUUxFVkJRVU1zVTBGQlV5eGxRVUZsTEVWQlFVTXNSMEZCUnl4TFFVRkxPMEZCUVVFc1dVRkJTeXhaUVVGWk8wRkJRVUU3UVVGQlFTeFZRVUYxUWl4RlFVRkRMRWRCUVVjc1owSkJRV1U3UVVGQlFTeFZRVU5zUnp0QlFVRkJMRkZCUTBZN1FVRkJRU3hOUVVOR08wRkJSVWNzVFVGQlRTeFpRVUZaTEVOQlFVTXNVMEZCZVVJc1pVRkJNRU03UVVGRE0wWXNVVUZCUVVFc2FVSkJRV1VzVVVGQlVTeE5RVUZOTzBGQlF6ZENMR2RDUVVGUkxGRkJRVkVzTWtKQlFUSkNMRkZCUVZFc1VVRkJVU3haUVVGWkxGRkJRVkVzVjBGQlZ5eERRVUZETzBGQlFVRXNUVUZETjBZN1FVRkJRVHRCUVVGQk96czdRVU4wU1VFc1RVRnZRazFETEd0Q1FTdENUeXc0UWtGdFVFRXNZVUZSUVR0QlFUbFRZanRCUVVGQk8wRkJRVUU3UVVGSFFUdEJRVVZCTzBGQlEwRTdRVUZIUVR0QlFWZEJMRTFCUVUxQkxHMUNRVUZwUWl4RFFVRkRMRkZCUVN0Q0xHVkJRVFJETzBGQlEycEhMRmxCUVVrc1QwRkJUeXhUUVVGVExFdEJRVXNzVDBGQlR5eFRRVUZUTEVkQlFVYzdRVUZETVVNc1owSkJRVTBzU1VGQlNTeE5RVUZOTEc5RFFVRnZRenRCUVVGQkxGRkJRM1JFTzBGQlEwRXNZMEZCVFN4SlFVRkpMRTlCUVU4c1EwRkJRenRCUVVOc1FpeGpRVUZOTEZGQlFWRXNSVUZCUlN4TFFVRkxPMEZCUTNKQ0xGbEJRVWtzUlVGQlJTeExRVUZMTEZGQlFWRXNRMEZCUXl4TlFVRk5MRmRCUVZjc1IwRkJSenRCUVVOMFF5eG5Ra0ZCVFN4SlFVRkpMRTFCUVUwc2QwUkJRWGRFTzBGQlFVRXNVVUZETVVVN1FVRkRRU3hqUVVGTkxHZENRVUZuUWl4TFFVRkxMRTlCUVU4c1YwRkJWeXhKUVVGSkxGZEJRVmNzV1VGQldTeExRVUZMTEZkQlFWY3NVMEZCVXp0QlFVTnFSeXhqUVVGTkxGZEJRVmNzVjBGQlZ5eFpRVUZaTEVsQlFVa3NWMEZCVnp0QlFVTjJSQ3hqUVVGTkxFbEJRVWtzVDBGQlR5eERRVUZETzBGQlEyeENMRmxCUVVrc1EwRkJReXhWUVVGVkxGTkJRVk1zUlVGQlJTeE5RVUZOTEVOQlFVTXNWMEZCVnl4SFFVRkhMR1ZCUVdVc1VVRkJVU3hEUVVGRExFZEJRVWM3UVVGRGVFVXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxEWkZRVUUyUlR0QlFVRkJMRkZCUXk5R08wRkJRMEVzWTBGQlRTeFRRVUZUTEU5QlFVOHNRMEZCUXp0QlFVTjJRaXhqUVVGTkxHTkJRV01zVDBGQlR6dEJRVU16UWl4WlFVRkpMRlZCUVZVc1MwRkJTeXhYUVVGWExFMUJRVTBzVjBGQlZ5eEpRVUZKTEdWQlFXVTdRVUZEYUVVc1owSkJRVTBzU1VGQlNTeE5RVUZOTERCQ1FVRXdRanRCUVVGQkxGRkJRelZETzBGQlEwRXNXVUZCU1N4UFFVRlBMRmRCUVZjc1IwRkJSenRCUVVOMlFpeG5Ra0ZCVFN4aFFVRmhMRTlCUVU4c1EwRkJRenRCUVVNelFpeG5Ra0ZCVFN4clFrRkJhMElzVjBGQlZ6dEJRVU51UXl4blFrRkJUU3g1UWtGRFJpeFhRVUZYTEU5QlFVOHNTVUZCU3l4WFFVRlhMRWxCUVVrc1owSkJRV2xDTEZkQlFWY3NTVUZCU1N4TFFVRkxMRTlCUVU4c1owSkJRV2RDTEV0QlFVc3NRMEZCUXp0QlFVTTFSeXhqUVVGSkxGVkJRVlVzUzBGQlN5eGxRVUZsTEUxQlFVMHNkMEpCUVhkQ08wRkJRemxFTEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3c0UWtGQk9FSTdRVUZCUVN4VlFVTm9SRHRCUVVGQkxGRkJRMFk3UVVGQlFTeE5RVU5HTzBGQlJVOHNUVUZCVFN3clFrRkRWQ3hEUVVGRExGRkJRU3RDTEZsQlF5OUNMREJDUVVGdlJDeHRRMEZCZDBRN1FVRkRNMGNzWTBGQlRTeGhRVUZoTEU5QlFVOHNRMEZCUXl4RlFVRkZPMEZCUXpkQ0xHTkJRVTBzVVVGQlVTeFhRVUZYTzBGQlEzcENMR05CUVUwc1owSkJRV2RDTEV0QlFVc3NUMEZCVHl4WFFVRlhMRWxCUVVrc1YwRkJWeXhaUVVGWkxFdEJRVXNzVjBGQlZ5eFRRVUZUTzBGQlEycEhMR05CUVUwc1dVRkJXU3hYUVVGWExGRkJRVkVzUTBGQlF6dEJRVU4wUXl4alFVRk5MRmRCUVZjc1YwRkJWenRCUVVNMVFpeGpRVUZOTEZsQlFWa3NWMEZCVnp0QlFVTTNRaXhqUVVGTkxGbEJRVmtzVjBGQlZ5eE5RVUZOTEVkQlFVY3NVVUZCVVN4RFFVRkRPMEZCUXk5RExHTkJRVTBzV1VGQldTeFZRVUZWTEV0QlFVc3NVMEZCVXp0QlFVTXhReXhqUVVGTkxGZEJRVmNzVjBGQlZ5eFpRVUZaTEVsQlFVa3NWMEZCVnp0QlFVTjJSQ3hqUVVGTkxHdENRVUZyUWl4WFFVRlhPMEZCUTI1RExHTkJRVTBzVjBGQlZ5eFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVTXpRaXhqUVVGTkxHVkJRV1VzYVVKQlFXbENMRk5CUVZNN1FVRkRMME1zWTBGQlRTeGpRVUZqTEdsQ1FVRnBRaXhYUVVGWExFTkJRVU03UVVGRGFrUXNZMEZCVFN4alFVRmpMR2xDUVVGcFFpeGxRVUZsTzBGQlEzQkVMR05CUVUwc1kwRkJZeXh4UWtGQmNVSXNVVUZCVVR0QlFVTnFSQ3hqUVVGTkxITkNRVUZ6UWl4WlFVRlpMR2RDUVVGblFqdEJRVU40UkN4alFVRk5MSGRDUVVGM1FpeExRVUZMTEUxQlFVMHNhVU5CUVdsRExHMUNRVUZ0UWp0QlFVTTNSaXhqUVVGTkxEQkNRVUV3UWl4cFFrRkJhVUlzZVVKQlFYbENMRU5CUVVNc1MwRkJTeXgzUWtGQmQwSTdRVUZEZUVjc1kwRkJUU3hoUVVGakxFTkJRVU1zTWtKQlFUSkNMSGxDUVVGNVFpeEpRVUZMTEdsQ1FVRnBRaXhUUVVGVExFbEJRMnhITEhsQ1FVRjVRaXhMUVVGTkxHbENRVUZwUWl4VFFVRlRMRXRCUVVzc1NVRkJWU3hKUVVOQk8wRkJRemxGTEdOQlFVMHNZMEZCWXl4VlFVRlZMRTlCUVU4c1EwRkJReXhYUVVGWExGTkJRVk1zUTBGQlF6dEJRVU16UkN4alFVRk5MR0ZCUVdFc1ZVRkJWU3hMUVVGTExGZEJRVmNzU1VGQlNTeGhRVUZoTzBGQlJUbEVMR05CUVUwc2EwSkJRVzlETERCQ1FVTjBReXhEUVVGRExFbEJRMFFzUTBGQlF5eEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxGZEJRVlVzUjBGQlJ5eEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxGZEJRVmNzVlVGQlV5eERRVUZETzBGQlEyNUhMR05CUVUwc2FVSkJRV2xDTEVOQlFVTXNWMEZCVnl4WFFVRlhMRmRCUVZjc1YwRkJWenRCUVVOd1JTeGpRVUZOTEZOQlFWTXNWVUZCVlN4aFFVRmhMRTlCUVU4c1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTzBGQlF6VkVMR1ZCUVU4c1QwRkJUeXhKUVVGSkxFZEJRVWNzYTBKQlFXdENMRmRCUVZjN1FVRkRiRVFzZDBKQlFXZENMRXRCUVVzc1IwRkJSeXd5UWtGQk1rSXNZMEZCWXl4RFFVRkRPMEZCUTJ4RkxIZENRVUZuUWl4TFFVRkxMRWRCUVVjc01rSkJRVEpDTEUxQlFVMHNRMEZCUXp0QlFVTXhSQ3gzUWtGQlowSXNTMEZCU3l4SFFVRkhMREpDUVVFeVFpeFBRVUZQTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNN1FVRkRiRVVzV1VGQlNTeFBRVUZQTEZkQlFWY3NSMEZCUnp0QlFVTjJRaXd3UWtGQlowSXNTMEZCU3l4SFFVRkhMREpDUVVFeVFpeFZRVUZWTEdGQlFXRXNUMEZCVHl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGQlFTeFJRVU0xUmp0QlFVTkJMR05CUVUwc2EwSkJRV3RDTEVOQlFVTXNWMEZCVnl4WFFVRlhMRmxCUVZrc1ZVRkJWVHRCUVVOeVJTeDNRa0ZCWjBJc1MwRkJTeXhIUVVGSExESkNRVUV5UWl4bFFVRmxMRU5CUVVNN1FVRkRia1VzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQkswSTdRVUZEZEVRc1owSkJRVTBzV1VGQldTeGxRVUZsTzBGQlEycERMR2RDUVVGTkxFbEJRVWtzWTBGQll5eExRVUZMTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc1YwRkJWeXhYUVVGWE8wRkJRM1pGTEdkQ1FVRk5MRWxCUVVrc1kwRkJZeXh6UWtGQmMwSXNUMEZCVHl4UlFVRlJMRmRCUVZjN1FVRkRlRVVzWjBKQlFVMHNVMEZCVXl4alFVRmpMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzVlVGQlZTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRTFCUVUwN1FVRkRhRVlzWjBKQlFVMHNhVUpCUVdsQ0xFTkJRVU1zUjBGQlJ5eEhRVUZITEUxQlFVMDdRVUZEY0VNc1owSkJRVTBzWVVGRFJpeFBRVUZQTEZkQlFWY3NTVUZCU1N4alFVRmpMR2REUVVGblF5eFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRTFCUVUwc1NVRkJTVHRCUVVOcVJ5eGpRVUZKTEZsQlFWazdRVUZEWkN3eVFrRkJaU3hMUVVGTExGVkJRVlU3UVVGQlFTeFZRVU5vUXp0QlFVTkJMR2RDUVVGTkxHRkJRV0VzWjBKQlFXZENPMEZCUTI1RExHZENRVUZOTEZOQlFWTXNaVUZCWlN4VlFVRlZMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzV1VGQldTeFZRVUZWTzBGQlEyeEdMR2RDUVVGTkxGZEJRVGhDTEVOQlFVTXNSVUZCUXl4TlFVRk5MR1ZCUVdVc1RVRkJUU3hOUVVGTExFZEJRVWNzUlVGQlF5eE5RVUZOTEdOQlFXTXNUVUZCVFN4TlFVRkxMRU5CUVVNN1FVRkRNVWNzWjBKQlFVMURMRmxCUVZjc05FSkJRVFJDTEU5QlFVOHNRMEZCUXl4RlFVRkZMRkZCUVZFN1FVRkZMMFFzWjBKQlFVMHNaVUZCWlN4TlFVRk5PMEZCUTNwQ0xHOUNRVUZSTEdGQlFXRTdRVUZCUVN4alFVTnVRaXhMUVVGTE8wRkJRMGdzZFVKQlFVOHNVMEZCVTBFc1UwRkJVVHRCUVVGQkxHTkJRekZDTEV0QlFVczdRVUZEU0N4MVFrRkJUeXhWUVVGVlFTeFRRVUZSTzBGQlFVRXNZMEZETTBJc1MwRkJTenRCUVVOSUxIVkNRVUZQTEZWQlFWVkJMRk5CUVZFN1FVRkJRU3hqUVVNelFqdEJRVU5GTEhOQ1FVRk5MRWxCUVVrc1RVRkJUU3hIUVVGSExGZEJRVmNzT0VKQlFUaENPMEZCUVVFc1dVRkRhRVU3UVVGQlFTeFZRVU5HTEVkQlFVYzdRVUZGU0N4blFrRkJUU3hyUWtGQmEwSTdRVUZCUVN4NVEwRkRVeXhsUVVGbExHRkJRV0VzVjBGQlZ6dEJRVUZCTEZsQlEzQkZMRVZCUVVVc1YwRkJWeXhoUVVGaExFdEJRVXNzVFVGQlRTeERRVUZETzBGQlFVRXNlVUpCUTNwQ0xFVkJRVVVzWVVGQllTeFhRVUZYTEVOQlFVTTdRVUZCUVN4eFEwRkRaaXhYUVVGWE8wRkJRVUVzYVVOQlEyWXNaMEpCUVdkQ0xFbEJRVWtzVjBGQlZ5eHJRa0ZCYTBJN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeDFRMEZKTTBNc1YwRkJWeXhKUVVOMFF5eE5RVUZOTEV0QlFVc3NSVUZCUXl4UlFVRlJMRVZCUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzVFVGQlRTeEhRVUZIUVN4VFFVRlJMR3RDUVVGclFpeERRVUZETEU5QlFVOUJMRk5CUVZFc2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RlFVTnFSeXhMUVVGTExFbEJRVWtzUTBGQlF6dEJRVUZCTERCRFFVTmxMRTFCUVUwN1FVRkRkRU1zWjBKQlFVa3NaMEpCUVdkQ0xFZEJRVWM3UVVGRGNrSXNjVUpCUVU4c1IwRkJSeXhYUVVGWExFbEJRMnBDTEUxQlFVMHNTMEZCU3l4RlFVRkRMRkZCUVZFc1JVRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eE5RVUZOTEhWQ1FVRjFRaXhEUVVGRExIbENRVUY1UWl4RlFVRkZMRXRCUVVzc1NVRkJTU3hEUVVGRE8wRkJRVUVzV1VGRGNrY3NUMEZCVHp0QlFVTk1MSEZDUVVGUExIbENRVUY1UWl4WFFVRlhMRWxCUVVrc1RVRkJUU3hEUVVGRExFVkJRVVVzUzBGQlN5eFpRVUZaTEVWQlFVVXNTMEZCU3l4SFFVRkhMRU5CUVVNN1FVRkJRU3haUVVOMFJqdEJRVUZCTEZWQlEwWXNSMEZCUnl4RFFVRkRPMEZCUVVFN1FVRkJRU3gxUTBGRk1rSXNNRUpCUVRCQ0xGbEJRVmtzV1VGQldUdEJRVUZCTEdkQ1FVTjZSU3hGUVVGRkxGZEJRVmNzWVVGQllTeFpRVUZaTEVkQlFVY3NNRUpCUVRCQ0xFMUJRVTBzVTBGQlV5eFpRVUZaTEUxQlFVMHNRMEZCUXp0QlFVRkJMR2RDUVVOeVJ5eEZRVUZGTEZkQlFWY3NZVUZCWVN4WlFVRlpMRWRCUVVjc1lVRkJZU3hEUVVGRE8wRkJRVUVzYlVOQlEzQkRMRVZCUVVVc1owSkJRV2RDTEZkQlFWY3NRMEZCUXp0QlFVRkJMRFJDUVVOeVF5eFhRVUZYTzBGQlFVRXNlVU5CUTBVc1NVRkJTU3hYUVVGWE8wRkJRVUVzT0VKQlF6RkNMRVZCUVVVc1dVRkJXU3hqUVVGakxFTkJRVU03UVVGQlFUdEJRVUZCTzBGQlFVRXNaMEpCUnpORExEQkNRVUV3UWl4clJFRkJhMFFzYTBKQlFXdENMRWRCUTJ4SExHRkJRV0VzU1VGQlNTeFJRVUZSTEVWQlFVVXNUMEZETTBJc1RVRkRTenRCUVVGQkxGbEJRMGNzUlVGQlF5eFJRVUZSTEVsQlFVa3NXVUZCVnp0QlFVRkJMRmxCUTNoQ0xFTkJRVU1zUjBGQlJ5eE5RVUZOTEVkQlEwNHNaMEpCUVdkQ0xFbEJRVWtzVlVGQlZTeERRVUZETERSQ1FVRTBRaXhEUVVGRExFMUJRM2hETEdOQlFXTXNRMEZCUXl3eVFrRkJNa0lzUTBGQlF5eEpRVUZKTzBGQlFVRXNWVUZCUlN4RlFVTTFSU3hMUVVGTExFdEJRVXNzUTBGQlF6dEJRVUZCTzBGQlFVRXNOa0pCUlVNc1NVRkJTU3hYUVVGWE8wRkJRVUU3UVVGQlFUdEJRVWR3UXl4blFrRkJUU3gxUWtGQmRVSXNZVUZCWVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzWjBOQlMyeENMRmRCUVZjc1dVRkJXU3hyUWtGQmEwSXNRMEZCUXp0QlFVRkJMR1ZCUlhoQ08wRkJSVEZETEdsQ1FVRlBMREJDUVVFd1FqdEJRVUZCTEdsRVFVTlJMRTlCUVU4c1MwRkJTeXhMUVVGTExFdEJRVXNzV1VGQldTeGhRVUZoTzBGQlFVRXNWVUZEZEVZc1lVRkJZU3hwUWtGQmFVSXNSMEZCUnl4blFrRkJaMElzVFVGQlRTeERRVUZETzBGQlFVRXNWVUZEZUVRc1lVRkJZU3hWUVVGVk8wRkJRVUVzV1VGRGRrSTdRVUZCUVN4WlFVRmxPMEZCUVVFc1dVRkJSenRCUVVGQkxGVkJRM0JDTEVOQlFVTXNRMEZCUXp0QlFVRkJMREpDUVVOcFFpeEZRVUZGTEV0QlFVc3NUMEZCVHp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxGbEJTVGRDTEVWQlFVVXNWMEZCVnl4aFFVRmhMRXRCUVVzc1QwRkJUeXhEUVVGRE8wRkJRVUU3UVVGQlFTeHhRMEZGWkN4VlFVRlZPMEZCUVVFc2MwUkJRMDhzVlVGQlZUdEJRVUZCTEdkQ1FVVnVRaXhoUVVGaE8wRkJRVUVzYlVSQlExQXNZVUZCWVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeDVRMEZOZGtJc1YwRkJWeXhaUVVGWkxIVkNRVUYxUWl4RFFVRkRMR2REUVVNNVFpeEZRVUZGTzBGQlFVRXNOa0pCUXk5Q0xFVkJRVVVzUzBGQlN5eFBRVUZQTzBGQlFVRXNZMEZETjBJc1JVRkJSU3hYUVVGWExHRkJRV0VzUzBGQlN5dzJRa0ZCTmtJc1EwRkJRenRCUVVGQk8wRkJRVUVzSzBSQlJWb3NZVUZCWVR0QlFVRkJMREJDUVVOc1JDeFBRVUZQTEZsQlFWa3NZMEZCWXl4RFFVRkRPMEZCUVVFN1FVRkJRU3dyUWtGRk4wSkJMRk5CUVZFc1NVRkJTU3hoUVVGaExEWkNRVUUyUWl4RFFVRkhPMEZCUVVFc1kwRkRNVVVzUlVGQlJTeFhRVUZYTEdGQlFXRXNTMEZCU3l4UFFVRlBMRU5CUVVNN1FVRkJRU3cyUTBGRFVpeFhRVUZYTEZsQlFWa3NWMEZCVnp0QlFVRkJMSGxFUVVOMFFpeFRRVUZUTzBGQlFVRXNZMEZEY0VRc1pVRkJaVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEd0RFFVbExMRTlCUVU4c1MwRkJTeXhQUVVGUE8wRkJRVUVzWTBGRGRrTXNUMEZCVHl4WFFVRlhMR3RDUVVGclFpeExRVUZMTEU5QlFVOHNRMEZCUXp0QlFVRkJMR05CUTJwRUxFOUJRVThzVjBGQlZ5eHJRa0ZCYTBJc1lVRkJZU3hIUVVGSExFdEJRVXNzUTBGQlF6dEJRVUZCTEdOQlF6RkVMRTlCUVU4c1YwRkJWeXhyUWtGQmEwSXNZVUZCWVN4SFFVRkhMRWRCUVVjc1EwRkJRenRCUVVGQkxHdERRVU53UXl4UFFVRlBMR2RDUVVGblFpeG5Ra0ZCWjBJc1EwRkJRenRCUVVGQkxIZERRVU5zUXl4VFFVRlRPMEZCUVVFc2EwTkJRMllzVDBGQlR5eExRVUZMTEV0QlFVc3NUVUZCVFN4UFFVRlBMRXRCUVVzc1MwRkJTenRCUVVGQk8wRkJRVUVzTUVOQlJXaERMR0ZCUVdFN1FVRkJRVHRCUVVGQkxEWkRRVVZXTEZOQlFWTTdRVUZCUVR0QlFVRkJMR2RDUVVWMFF5eFBRVUZQTEZsQlFWa3NhVUpCUVdsQ0xHTkJRV01zUTBGQlF6dEJRVUZCTEdsRFFVTnNReXhaUVVGWkxGVkJRVlU3UVVGQlFUdEJRVUZCTzBGQlFVRXNZVUZKWkR0QlFVRkJMRlZCUXk5Q0xHRkJRV0VzYVVKQlFXbENMRkZCUVZFc1JVRkJSU3hwUWtGQmFVSXNSMEZCUnl4blFrRkJaMElzVFVGQlRTeERRVUZETzBGQlFVRXNWVUZEYmtZc1lVRkJZU3hWUVVGVkxFTkJRVU03UVVGQlFTeFpRVU4wUWl4aFFVRmhMSE5EUVVGelF5eHpRa0ZCYzBJc1EwRkJRenRCUVVGQkxIRkRRVU5xUkN4UFFVRlBMRXRCUVVzc1MwRkJTeXhMUVVGTExGbEJRVms3UVVGQlFTeHBRMEZEZEVNc1QwRkJUeXhuUWtGQlowSXNXVUZCV1N4RFFVRkRPMEZCUVVFc2MwSkJReTlETEU5QlFVOHNWMEZCVnl4clFrRkJhMElzWVVGQllTeERRVUZETEVOQlFVTTdRVUZCUVN4elFrRkRia1FzVDBGQlR5eFhRVUZYTEd0Q1FVRnJRaXhoUVVGaExFTkJRVU1zUTBGQlF6dEJRVUZCTERKQ1FVTTVReXhGUVVGRkxFdEJRVXNzVDBGQlR6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRmxCUzBrc1lVRkJZVHRCUVVGQkxEaERRVU5hTEZWQlFWVXNVVUZCVVN4aFFVRmhPMEZCUVVFN1FVRkJRU3gxUTBGRmRFTXNWMEZCVnl4WlFVRlpMR3RDUVVGclFpeERRVUZETzBGQlFVRXNNa1ZCUlhaQ0xFVkJRVVU3UVVGQlFTeHZRMEZEZUVJc1owSkJRV2RDTEZWQlFWVTdRVUZCUVN3eVFrRkRia01zUlVGQlJTeExRVUZMTEU5QlFVODdRVUZCUVN4eFEwRkRTaXhWUVVGVk8wRkJRVUVzWTBGRGFrTXNSVUZCUlN4WFFVRlhMR0ZCUVdFc1MwRkJTeXhUUVVGVExGVkJRVlVzVFVGQlRTeERRVUZETzBGQlFVRTdRVUZCUVN3clEwRkZlRUlzWVVGQllUdEJRVUZCTzBGQlFVRXNORUpCUldoRExFOUJRVThzV1VGQldTeGhRVUZoTEVOQlFVTTdRVUZCUVR0QlFVRkJMR2xEUVVVMVFrRXNVMEZCVVN4SlFVRkpMR0ZCUVdFc2RVUkJRWFZFTEVOQlFVYzdRVUZCUVN4blFrRkRjRWNzUlVGQlJTeFhRVUZYTEdGQlFXRXNTMEZCU3l4UFFVRlBMRU5CUVVNN1FVRkJRVHRCUVVGQkxHZENRVVYyUXl4bFFVRmxPMEZCUVVFN1FVRkJRU3huUWtGRlppeHZRa0ZCYjBJN1FVRkJRU3h6UkVGRGEwSXNWMEZCVnp0QlFVRkJPMEZCUVVFN1FVRkJRU3hqUVVsd1FpeGhRVUZoTzBGQlFVRXNhMEpCUTNoRExHOUNRVUZ2UWp0QlFVRkJMRzFDUVVWdlFpeEZRVUZGTzBGQlFVRTdRVUZCUVN4M1EwRkZjRUlzV1VGQldUdEJRVUZCTEdkQ1FVTndReXhQUVVGUExGZEJRVmNzYTBKQlFXdENMR0ZCUVdFc1IwRkJSeXhIUVVGSExGbEJRVmtzV1VGQldTeERRVUZETzBGQlFVRXNaMEpCUTJoR0xFOUJRVThzWVVGQllTeHJRa0ZCYTBJc2EwSkJRV3RDTEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUVVFc1VVRkhia1U3UVVGRFFTeGxRVUZQTzBGQlFVRXNWVUZEVEN4TlFVRk5MREJDUVVFd1FpeDVRa0ZCZVVJN1FVRkJRU3hWUVVONlJDeGhRVUZoTzBGQlFVRXNXVUZEV0N4TlFVRk5MRWRCUVVjc1YwRkJWeXhSUVVGUkxFbEJRVWtzVTBGQlV5eEpRVUZKTEZGQlFWRXNTVUZCU1N4UFFVRlBMRTFCUVUwN1FVRkJRU3haUVVOMFJTeHRRa0ZCYlVJc1RVRkJUU3hQUVVGUExFMUJRVTBzUlVGQlJTeExRVUZMTEUxQlFVMDdRVUZCUVN4VlFVTnlSRHRCUVVGQkxGVkJRMEVzV1VGQldTeFBRVUZQTzBGQlFVRXNXVUZEYWtJc1UwRkJVeXhEUVVGRExFVkJRVU1zVFVGQlRTeGhRVUZoTEZOQlFWRXNRMEZCUXp0QlFVRkJMRmxCUTNaRExFMUJRVTBzTUVKQlFUQkNMSGxDUVVGNVFqdEJRVUZCTEZsQlEzcEVMR1ZCUVdVc01FSkJRVEJDTEVWQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1MwRkJTeXhMUVVGTExGbEJRVmtzVlVGQlZTeEhRVUZITEVkQlFVY3NWVUZCVXl4SlFVTjZSQ3hGUVVGRExFZEJRVWNzUzBGQlN6dEJRVUZCTEdOQlFVc3NZVUZCWVR0QlFVRkJPMEZCUVVFc1dVRkJkVUlzUlVGQlF6dEJRVUZCTEZsQlF6VkdPMEZCUVVFc1ZVRkRSanRCUVVGQkxGVkJRMEU3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVVkhMRTFCUVUwc1kwRkJZeXhEUVVGRExGTkJRWGxDTEdWQlFUUkRPMEZCUXk5R0xGRkJRVUZFTEdsQ1FVRmxMRkZCUVZFc1VVRkJVU3hWUVVGVk8wRkJRM3BETEdOQlFVMHNNa0pCUVhGRUxGRkJRVkVzTkVKQlFUUkNPMEZCUXk5R0xHTkJRVTBzYVVOQlFXbERMRkZCUVZFc2EwTkJRV3RETzBGQlEycEdMR2RDUVVGUkxGRkJRVkU3UVVGQlFTeFZRVU5hTEZGQlFWRTdRVUZCUVN4VlFVRlJPMEZCUVVFc1ZVRkJXVHRCUVVGQkxGVkJRVEJDTzBGQlFVRXNVVUZCT0VJc1EwRkJRenRCUVVGQkxFMUJRek5HTzBGQlJVOHNUVUZCVFN3MlFrRkJOa0lzUTBGQlF5eGxRVU4yUXl3MFFrRkJORUlzVlVGQmMwVTdRVUZCUVR0QlFVRkJPenM3UVVNdlUzUkhMRTFCWVUwc1ZVRkhRVVVzYTBKQmFVOVBMRzFEUVVkUVF5d3lRa0ZGUVN4clFrRXdRMEVzWjBOQk1rSlBPMEZCTTFSaU8wRkJRVUU3UVVGQlFUdEJRVWRCTzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJSVUVzVFVGQlRTeFhRVUZYTEVOQlFVTXNVVUZCSzBJc1RVRkROVU1zVDBGQlR5eFRRVUZUTEV0QlFVOHNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhUUVVGVExFdEJRVThzVlVGQlZTeExRVUZMTEU5QlFVOHNRMEZCUXl4RlFVRkZMRWxCUVVrc1NVRkJTeXhKUVVGSkxFOUJRVThzUTBGQlF5eEpRVUZKTzBGQlJUZEhMRTFCUVUxRUxHMUNRVUZwUWl4RFFVRkRMRkZCUVN0Q0xHVkJRVzlFTzBGQlEzcEhMR05CUVUwc1VVRkJVU3hQUVVGUExFTkJRVU03UVVGRGRFSXNZMEZCVFN4TlFVRk5MRk5CUVZNc1VVRkJVU3hEUVVGRE8wRkJRemxDTEdOQlFVMHNVVUZCVVN4VFFVRlRMRkZCUVZFc1EwRkJRenRCUVVOb1F5eGpRVUZOTEU5QlFVOHNVMEZCVXl4UlFVRlJMRU5CUVVNN1FVRkRMMElzWTBGQlRTeHBRa0ZCYVVJc1UwRkJVeXhSUVVGUkxFTkJRVU03UVVGRGVrTXNZMEZCVFN4MVFrRkJkVUlzVTBGQlV5eFJRVUZSTEVOQlFVTTdRVUZETDBNc1kwRkJUU3hWUVVGVkxGTkJRVk1zVVVGQlVTeERRVUZETzBGQlEyeERMR05CUVUwc1dVRkJXU3hUUVVGVExGRkJRVkVzUTBGQlF6dEJRVzlEY0VNc1dVRkJTU3hOUVVGTkxFdEJRVXNzVjBGQlZ5eExRVUZMTEUxQlFVMHNTMEZCU3l4WFFVRlhMRWRCUVVjN1FVRkRkRVFzWjBKQlFVMHNTVUZCU1N4TlFVRk5MRzFFUVVGdFJEdEJRVUZCTEZGQlEzSkZPMEZCUlVFc1kwRkJUU3hsUVVGbE8wRkJRM0pDTEdOQlFVMHNXVUZCV1N4TlFVRk5MRXRCUVVzc1EwRkJRenRCUVVNNVFpeGpRVUZOTEdsQ1FVRnBRaXhOUVVGTkxFdEJRVXNzUTBGQlF6dEJRVU51UXl4alFVRk5MR0ZCUVdFc1RVRkJUU3hMUVVGTExGZEJRVmNzU1VGQlN5eGxRVUZsTEUxQlFVMHNTMEZCU3l4RFFVRkRMRWxCUVVrc1NVRkJTU3hOUVVGTkxFdEJRVXNzUTBGQlF5eEpRVU5vUkN4WFFVRlhMRmRCUVZjc1RVRkJUU3hMUVVGTExFTkJRVU03UVVGREwwVXNXVUZCU1N4dFFrRkJiVUk3UVVGRmRrSXNXVUZCU1N4eFFrRkJjVUk3UVVGRGVrSXNXVUZCU1N4dlFrRkJiMEk3UVVGRGVFSXNZMEZCVFN4WFFVRlhMRXRCUVVzc1RVRkJUU3hoUVVGaExGZEJRVmNzVVVGQlVUdEJRVU0xUkN4WlFVRkpMRmRCUVZjc1YwRkJWenRCUVVONFFpeGpRVUZKTEZGQlFWRXNTMEZCU3l4WFFVRlhMRWRCUVVjN1FVRkROMElzYTBKQlFVMHNTVUZCU1N4TlFVRk5MRzFFUVVGdFJEdEJRVUZCTEZWQlEzSkZPMEZCUTBFc1kwRkJTU3hSUVVGUkxFdEJRVXNzUTBGQlF5eE5RVUZOTEdGQlFXRXNVVUZCVVN4TFFVRkxMRU5CUVVNc1RVRkJUU3hYUVVGWExGbEJRVmtzVVVGQlVTeExRVUZMTEVOQlFVTXNUVUZCVFN4VlFVRlZPMEZCUXpWSExHdENRVUZOTEVsQlFVa3NUVUZCVFN4cFJrRkJhVVk3UVVGQlFTeFZRVU51Unp0QlFVTkJMR05CUVVrc1ZVRkJWU3hMUVVGTExFTkJRVU1zVFVGQlRTeGhRVUZoTEZWQlFWVXNTMEZCU3l4RFFVRkRMRTFCUVUwc1YwRkJWeXhaUVVOd1JTeFZRVUZWTEV0QlFVc3NRMEZCUXl4TlFVRk5MRlZCUVZVN1FVRkRiRU1zYTBKQlFVMHNTVUZCU1N4TlFVRk5MRzFHUVVGdFJqdEJRVUZCTEZWQlEzSkhPMEZCUTBFc1kwRkJTU3hSUVVGUkxFdEJRVXNzUTBGQlF5eE5RVUZOTEZWQlFWVXNTMEZCU3l4RFFVRkRMRWRCUVVjN1FVRkRla01zYTBKQlFVMHNTVUZCU1N4TlFVRk5MR2RHUVVGblJqdEJRVUZCTEZWQlEyeEhPMEZCUTBFc1kwRkJTU3hWUVVGVkxFdEJRVXNzVjBGQlZ5eEhRVUZITzBGQlF5OUNMR3RDUVVGTkxFbEJRVWtzVFVGQlRTeHhSRUZCY1VRN1FVRkJRU3hWUVVOMlJUdEJRVU5CTEN0Q1FVRnhRaXhSUVVGUkxFdEJRVXNzUTBGQlF6dEJRVU51UXl3NFFrRkJiMElzVVVGQlVTeExRVUZMTEVOQlFVTTdRVUZCUVN4UlFVTndReXhYUVVGWExGZEJRVmNzVjBGQlZ6dEJRVU12UWl4blFrRkJUU3hKUVVGSkxFMUJRVTBzZDBWQlFYZEZPMEZCUVVFc1VVRkRNVVk3UVVGRlFTeFpRVUZKTzBGQlEwb3NXVUZCU1N4TFFVRkxPMEZCUTFBc1kwRkJTU3hOUVVGTkxFdEJRVXNzVjBGQlZ5eEhRVUZITzBGQlF6TkNMR3RDUVVGTkxFbEJRVWtzVFVGQlRTeHJSVUZCYTBVN1FVRkJRU3hWUVVOd1JqdEJRVU5CTEdOQlFVa3NTVUZCU1N4TFFVRkxMRk5CUVZNc1MwRkJTeXhKUVVGSkxFdEJRVXNzVTBGQlV5eEhRVUZITzBGQlF6bERMR3RDUVVGTkxFbEJRVWtzVFVGQlRTeDFSRUZCZFVRN1FVRkJRU3hWUVVONlJUdEJRVU5CTEdOQlFVa3NUVUZCVFN4TFFVRkxMRU5CUVVNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITzBGQlEycERMR3RDUVVGTkxFbEJRVWtzVFVGQlRTdzBSRUZCTkVRN1FVRkJRU3hWUVVNNVJUdEJRVVZCTEdOQlFVa3NTVUZCU1N4TFFVRkxMRmRCUVZjc1IwRkJSenRCUVVONlFpeG5Ra0ZCU1N4SlFVRkpMRXRCUVVzc1EwRkJReXhOUVVGTkxFMUJRVTBzUzBGQlN5eERRVUZETEVkQlFVYzdRVUZEYWtNc2IwSkJRVTBzU1VGQlNTeE5RVUZOTERaRVFVRTJSRHRCUVVGQkxGbEJReTlGTzBGQlEwRTdRVUZEUVN3clFrRkJiVUlzU1VGQlNTeExRVUZMTEVOQlFVTTdRVUZCUVN4VlFVTXZRaXhYUVVGWExFbEJRVWtzUzBGQlN5eFhRVUZYTEVkQlFVYzdRVUZEYUVNc1owSkJRVWtzU1VGQlNTeExRVUZMTEVOQlFVTXNUVUZCVFN4WFFVRlhMRmxCUVZrc1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRTeExRVUZMTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1ZVRkJWVHRCUVVONFJpeHZRa0ZCVFN4SlFVRkpMRTFCUVUwc05FWkJRVFJHTzBGQlFVRXNXVUZET1VjN1FVRkRRU3huUWtGQlNTeFBRVUZQTzBGQlExUXNiMEpCUVUwc1NVRkJTU3hOUVVGTkxIbEVRVUY1UkR0QlFVRkJMRmxCUXpORk8wRkJRMEU3UVVGRFFTd3JRa0ZCYlVJc1NVRkJTU3hMUVVGTExFTkJRVU03UVVGQlFTeFZRVU12UWl4UFFVRlBPMEZCUTB3c1owSkJRVWtzU1VGQlNTeExRVUZMTEVOQlFVTXNUVUZCVFN4WFFVRlhMRmxCUVZrc1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRTeFZRVUZWTzBGQlEyNUZMRzlDUVVGTkxFbEJRVWtzVFVGQlRTeDNSa0ZCZDBZN1FVRkJRU3haUVVNeFJ6dEJRVVZCTzBGQlEwRXNLMEpCUVcxQ0xFbEJRVWtzUzBGQlN5eERRVUZETzBGQlFVRXNWVUZETDBJN1FVRkJRU3hSUVVOR0xFOUJRVTg3UVVGRFRDeGpRVUZKTEUxQlFVMHNTMEZCU3l4WFFVRlhMRXRCUVVzc1RVRkJUU3hMUVVGTExGZEJRVmNzUjBGQlJ6dEJRVU4wUkN4clFrRkJUU3hKUVVGSkxFMUJRVTBzZFVWQlFYVkZPMEZCUVVFc1ZVRkRla1k3UVVGRFFTeGpRVUZKTEUxQlFVMHNTMEZCU3l4WFFVRlhMRTFCUVUwc1RVRkJUU3hMUVVGTExFTkJRVU1zVFVGQlRTeFhRVUZYTEZsQlFWa3NUVUZCVFN4TFFVRkxMRU5CUVVNc1RVRkJUU3hKUVVGSk8wRkJRemRHTEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3c0UmtGQk9FWTdRVUZCUVN4VlFVTm9TRHRCUVVWQk8wRkJRVUVzVVVGRFJqdEJRVVZCTEZsQlFVa3NUVUZCVFR0QlFVTlNMR05CUVVrc1MwRkJTeXhMUVVGTExGZEJRVmNzUjBGQlJ6dEJRVU14UWl4clFrRkJUU3hKUVVGSkxFMUJRVTBzT0VOQlFUaERPMEZCUVVFc1ZVRkRhRVU3UVVGRlFTeGpRVUZKTEU5QlFVODdRVUZEVkN4blFrRkJTU3hOUVVGTkxFdEJRVXNzVjBGQlZ5eExRVUZMTEUxQlFVMHNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSenRCUVVOc1JDeHZRa0ZCVFN4SlFVRkpMRTFCUVUwc2IwTkJRVzlETzBGQlFVRXNXVUZEZEVRN1FVRkJRU3hWUVVOR08wRkJRVUVzVVVGRFJqdEJRVVZCTEZsQlFVazdRVUZEU2l4WlFVRkpMR2RDUVVGblFqdEJRVU5zUWp0QlFVTkJMR2RDUVVGTkxGZEJRVmNzWlVGQlpUdEJRVU5vUXl4alFVRkpMRk5CUVZNc1YwRkJWeXhIUVVGSE8wRkJRM3BDTEdkQ1FVRkpMRk5CUVZNc1EwRkJReXhOUVVGTkxGZEJRVmM3UVVGRE4wSTdRVUZCUVN4WlFVTkdMRmRCUVZjc1UwRkJVeXhEUVVGRExFMUJRVTBzU1VGQlNTeFpRVUZaTEVkQlFVYzdRVUZETlVNN1FVRkJRU3haUVVOR08wRkJRVUVzVlVGRFJpeFhRVUZYTEZOQlFWTXNWMEZCVnl4TFFVRkxMRk5CUVZNc1EwRkJReXhOUVVGTkxHRkJRV0VzVTBGQlV5eERRVUZETEUxQlFVMHNhMEpCUVd0Q08wRkJRMnBITzBGQlFVRXNWVUZEUmp0QlFVTkJMR05CUVVrc2EwTkJRVFJETzBGQlF6bERMR3RDUVVGTkxFbEJRVWtzVFVGQlRTd3dSa0ZCTUVZN1FVRkJRU3hWUVVNMVJ6dEJRVU5CTEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3h2UWtGQmIwSTdRVUZCUVN4UlFVTjBRenRCUVVWQkxGbEJRVWtzWlVGQlpUdEJRVU51UWl4WlFVRkpMR05CUVdNN1FVRkRiRUlzV1VGQlNTeFBRVUZQTzBGQlExUXNZMEZCU1N4TlFVRk5MRXRCUVVzc1YwRkJWeXhMUVVGTExFMUJRVTBzUzBGQlN5eFhRVUZYTEVkQlFVYzdRVUZEZEVRc2EwSkJRVTBzU1VGQlNTeE5RVUZOTEhGRVFVRnhSRHRCUVVGQkxGVkJRM1pGTzBGQlJVRXNZMEZCU1N4TlFVRk5MRXRCUVVzc1EwRkJReXhOUVVGTkxFMUJRVTBzUzBGQlN5eERRVUZETEVkQlFVYzdRVUZEYmtNc2EwSkJRVTBzU1VGQlNTeE5RVUZOTERoRVFVRTRSRHRCUVVGQkxGVkJRMmhHTzBGQlJVRXNZMEZCU1N4TlFVRk5MRXRCUVVzc1YwRkJWeXhIUVVGSE8wRkJRek5DTEdkQ1FVRkpMSEZDUVVGeFFpeE5RVUZOTEV0QlFVc3NRMEZCUXl4SFFVRkhPMEZCUTNSRExHOUNRVUZOTEVsQlFVa3NUVUZCVFN4M1JVRkJkMFU3UVVGQlFTeFpRVU14Ump0QlFVTkJMREJDUVVGakxFMUJRVTBzUzBGQlN5eERRVUZETzBGQlFVRXNWVUZETlVJc1QwRkJUenRCUVVOTUxHZENRVUZKTEhGQ1FVRnhRaXhOUVVGTkxFdEJRVXNzUTBGQlF5eEhRVUZITzBGQlEzUkRMRzlDUVVGTkxFbEJRVWtzVFVGQlRTeHJSa0ZCYTBZN1FVRkJRU3haUVVOd1J6dEJRVU5CTERCQ1FVRmpMRTFCUVUwc1MwRkJTeXhEUVVGRExFbEJRVWtzVFVGQlRTeExRVUZMTEVOQlFVTTdRVUZETVVNc01rSkJRV1U3UVVGQlFTeFZRVU5xUWp0QlFVRkJMRkZCUTBZN1FVRkZRU3hqUVVGTkxITkNRVUZ6UWl4eFFrRkJjVUk3UVVGRGFrUXNZMEZCVFN4elFrRkJjMEk3UVVGRk5VSXNXVUZCU1N4blFrRkJaMEk3UVVGRGJFSXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxHMURRVUZ0UXp0QlFVRkJMRkZCUTNKRU8wRkJSVUVzV1VGQlNTeHpRa0ZCYzBJN1FVRkRlRUlzWTBGQlNTeHhRa0ZCY1VJc1MwRkJTeXhYUVVGWExFZEJRVWM3UVVGRE1VTXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxHbEZRVUZwUlR0QlFVRkJMRlZCUTI1R08wRkJRMEVzWTBGQlN5eHhRa0ZCY1VJc1MwRkJTeXhEUVVGRExFMUJRVTBzWVVGQllTeHhRa0ZCY1VJc1MwRkJTeXhEUVVGRExFMUJRVTBzUzBGRGFFWXNjVUpCUVhGQ0xFdEJRVXNzUTBGQlF5eE5RVUZOTEZkQlFWY3NXVUZCV1N4eFFrRkJjVUlzUzBGQlN5eERRVUZETEUxQlFVMHNhMEpCUTNwR0xIRkNRVUZ4UWl4TFFVRkxMRU5CUVVNc1RVRkJUU3h4UWtGQmNVSTdRVUZEZUVRc2EwSkJRVTBzU1VGQlNTeE5RVUZOTERKR1FVRXlSanRCUVVGQkxGVkJRemRITzBGQlFVRXNVVUZEUmp0QlFVVkJMR1ZCUVU4N1FVRkJRU3hWUVVOTU8wRkJRVUVzVlVGRFFUdEJRVUZCTEZWQlEwRTdRVUZCUVN4VlFVTkJPMEZCUVVFc1ZVRkRRVHRCUVVGQkxGVkJRMEU3UVVGQlFTeFZRVU5CTEdsQ1FVRnBRanRCUVVGQkxGVkJRMnBDTzBGQlFVRXNWVUZEUVR0QlFVRkJMRlZCUTBFN1FVRkJRU3hWUVVOQkxGZEJRVmNzUzBGQlN5eE5RVUZOTEdOQlFXTXNWMEZCVnl4UlFVRlJPMEZCUVVFc1ZVRkRka1FzVlVGQlZTeFhRVUZYTzBGQlFVRXNWVUZEY2tJc2EwSkJRV3RDTzBGQlFVRXNWVUZEYkVJc2QwSkJRWGRDTzBGQlFVRXNWVUZEZUVJc2FVSkJRV2xDTEZkQlFWYzdRVUZCUVN4VlFVTTFRanRCUVVGQkxGVkJRMEVzVDBGQlR5eFhRVUZYTzBGQlFVRXNWVUZEYkVJN1FVRkJRU3hWUVVOQk8wRkJRVUVzVlVGRFFUdEJRVUZCTEZGQlEwWTdRVUZCUVN4TlFVTkdPMEZCUlU4c1RVRkJUU3h2UTBGQmIwTXNRMEZCUXl4bFFVTTVReXcwUWtGQk5FSXNSVUZCUXl4SFFVRkhMRmRCUVZVc1EwRkJRenRCUVVVdlF5eE5RVUZOUXl3MFFrRkJaMFFzTkVKQlFUUkNMRVZCUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNSVUZCUXl4RFFVRkRPMEZCUlhSSExFMUJRVTBzYlVKQlEwWXNRMEZCUXl4VFFVRjVRaXhMUVVGcFFpeE5RVUZyUWl4WFFVRnRRaXhuUWtGREwwVXNXVUZCYjBJc1pVRkJkVUk3UVVGRE1VTXNZMEZCVFN4alFVRmpMRU5CUVVNc1YwRkJWeXhuUWtGQlowSXNWVUZCVlR0QlFVTXhSQ3hqUVVGTkxHRkJRV0VzVlVGQlZTeExRVUZMTEZkQlFWYzdRVUZETjBNc1kwRkJUU3hyUWtGQmIwTTdRVUZCUVN4VlFVTjRReXhGUVVGRExIVkNRVUYxUWl4TlFVRk5MRmRCUVZVN1FVRkJRU3hWUVVGSExFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc1YwRkJWVHRCUVVGQkxGVkJRMjVHTEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzVjBGQlZUdEJRVUZCTEZGQlF6RkRPMEZCUlVFc1kwRkJUU3hyUWtGQmEwSXNRMEZCUXl4cFFrRkJLMEk3UVVGRGRFUXNaMEpCUVUwc1UwRkJVeXhsUVVGbExHbENRVUZwUWl4SlFVRkpMRlZCUVZVc1YwRkJWenRCUVVONFJTeG5Ra0ZCVFN4WFFVRlhMR05CUVdNc1QwRkJUeXhKUVVGSkxGVkJRVlVzVjBGQlZ6dEJRVU12UkN4blFrRkJUU3haUVVGWkxHTkJRV01zVVVGQlVTeExRVUZMTEZWQlFWVXNWMEZCVnp0QlFVVnNSU3huUWtGQlRTeFhRVUU0UWp0QlFVRkJMRmxCUTJ4RExFVkJRVU1zVFVGQlRTeGxRVUZsTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUVVjc1JVRkJReXhOUVVGTkxHVkJRV1VzVFVGQlRTeE5RVUZMTzBGQlFVRXNXVUZCUnl4RlFVRkRMRTFCUVUwc1pVRkJaU3hOUVVGTkxFMUJRVXM3UVVGQlFTeFZRVU16Unp0QlFVTkJMR2xDUVVGUE8wRkJRVUVzU1VGRFdDeGhRVUZoTEdsQ1FVRnBRaXhSUVVGUkxFVkJRVVVzYVVKQlFXbENMRlZCUVZVc1YwRkJWeXhOUVVGTkxFTkJRVU03UVVGQlFTeEpRVU55Uml4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQkxFMUJRM1JDTEdGQlFXRXNjME5CUVhORExITkNRVUZ6UWl4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeFJRVXN4UlR0QlFVVkJMR1ZCUVU4c1VVRkJVVHRCUVVGQkxGVkJRMWc3UVVGQlFTeFpRVU5GTEUxQlFVMDdRVUZCUVN4WlFVTk9MR0ZCUVdFc1JVRkJReXh0UWtGQmJVSXNRMEZCUXl4UlFVRlJMRTFCUVUwc1JVRkJRenRCUVVGQkxGbEJRMnBFTEZsQlFWa3NUMEZCVHp0QlFVRkJMR05CUTJwQ0xGTkJRVk1zUTBGQlF5eEZRVUZETEUxQlFVMHNZVUZCWVN4VlFVRlZMRWxCUVVrc1ZVRkJWU3cyUWtGQlowTXNRMEZCUXp0QlFVRkJMR05CUTNaR0xHVkJRV1VzUlVGQlF5eEhRVUZITEV0QlFVczdRVUZCUVN4blFrRkJTeXhoUVVGaE8wRkJRVUU3UVVGQlFTeGpRVUYxUWl4RlFVRkRPMEZCUVVFc1kwRkRiRVU3UVVGQlFTeFpRVU5HTzBGQlFVRXNXVUZEUVR0QlFVRkJMRlZCUTBZN1FVRkJRU3hWUVVOQkxFVkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NTVUZCU1N4SFFVRkhMRk5CUVZNc1EwRkJReXhGUVVGRkxFVkJRVU03UVVGQlFTeFJRVUZETEVWQlFVVXNRMEZCUXp0QlFVRkJMRTFCUXpkRE8wRkJSVW9zVFVGQlRTeHBRMEZEUml4RFFVRkRMRk5CUVhsQ0xGZEJRVzFDTEZWQlFXdENMR2RDUVVGM1FpeFZRVU4wUml4UFFVRnRRaXhOUVVGdFFpeGxRVUYzUWp0QlFVYzNSQ3haUVVGSkxHZENRVUZuUWp0QlFVTndRaXhaUVVGSkxFTkJRVU1zVFVGQlRUdEJRVU5VTEdOQlFVa3NUVUZCVFN4TFFVRkxMRmRCUVZjc1IwRkJSenRCUVVNelFpdzBRa0ZCWjBJc1RVRkJUU3hSUVVGUkxFTkJRVU1zVjBGQlZ5eG5Ra0ZCWjBJc1ZVRkJWU3hSUVVGUkxFTkJRVU03UVVGQlFTeFZRVU12UlR0QlFVTkJMR2xDUVVGUExGRkJRVkU3UVVGQlFTeFpRVU5ZTERKQ1FVRXlRaXhsUVVGbFFTd3dRa0ZCZVVJc1NVRkJTVHRCUVVGQkxGbEJRM1pGTEVWQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhUUVVGVExFTkJRVU1zUlVGQlJTeEZRVUZETzBGQlFVRXNWVUZCUXl4RlFVRkZMRU5CUVVNN1FVRkJRU3hSUVVOcVJDeFBRVUZQTzBGQlEwd3NZMEZCU1N4dFFrRkJiVUlzUjBGQlJ6dEJRVU40UWl4clFrRkJUU3hKUVVGSkxFMUJRVTBzYlVaQlFXMUdPMEZCUVVFc1ZVRkRja2NzVDBGQlR6dEJRVU5NTERSQ1FVTkpMR2xDUVVGcFFpeFRRVUZUTEU5QlFVOHNUVUZCVFN4WFFVRlhMR2RDUVVGblFpeFhRVUZYTEZWQlFWVXNWVUZCVnp0QlFVTjBSeXcwUWtGQlowSXNZMEZCWXl4UlFVRlJMRU5CUVVNc1YwRkJWeXhuUWtGQlowSXNWVUZCVlN4UlFVRlJMRU5CUVVNN1FVRkRja1lzYlVKQlFVOHNVVUZCVVR0QlFVRkJMR05CUTFnc01rSkJRVEpDTEdWQlFXVkJMREJDUVVGNVFpeEpRVUZKTzBGQlFVRXNZMEZEZGtVc1JVRkJReXhSUVVGUkxFTkJRVU1zWVVGQllTeEhRVUZITEZOQlFWTXNRMEZCUXl4RlFVRkZMRVZCUVVNN1FVRkJRU3haUVVGRExFVkJRVVVzUTBGQlF6dEJRVUZCTEZWQlEycEVPMEZCUVVFc1VVRkRSanRCUVVGQkxFMUJRMFk3UVVGRlJ5eE5RVUZOTEhGQ1FVRnhRaXhEUVVGRExGTkJRWGxDTEdWQlFYRkRPMEZCUXk5R0xHTkJRVTBzVTBGQlUwUXNhVUpCUVdVc1VVRkJVU3hSUVVGUkxGVkJRVlU3UVVGRGVFUXNZMEZCVFN4UlFVRlJMRkZCUVZFc1QwRkJUeXhEUVVGRE8wRkJRemxDTEdOQlFVMHNUVUZCVFN4VFFVRlRMRkZCUVZFc1VVRkJVU3hEUVVGRE8wRkJRM1JETEdOQlFVMHNVVUZCVVN4VFFVRlRMRkZCUVZFc1VVRkJVU3hEUVVGRE8wRkJRM2hETEdOQlFVMHNUMEZCVHl4VFFVRlRMRkZCUVZFc1VVRkJVU3hEUVVGRE8wRkJRM1pETEdOQlFVMHNhVUpCUVdsQ0xGTkJRVk1zVVVGQlVTeFJRVUZSTEVOQlFVTTdRVUZEYWtRc1kwRkJUU3gxUWtGQmRVSXNVMEZCVXl4UlFVRlJMRkZCUVZFc1EwRkJRenRCUVVOMlJDeGpRVUZOTEZWQlFWVXNVMEZCVXl4UlFVRlJMRkZCUVZFc1EwRkJRenRCUVVNeFF5eGpRVUZOTEZsQlFWa3NVMEZCVXl4UlFVRlJMRkZCUVZFc1EwRkJRenRCUVVNMVF5eFpRVUZKTEUxQlFVMHNTMEZCU3l4WFFVRlhMRWRCUVVjN1FVRkRNMElzWjBKQlFVMHNTVUZCU1N4TlFVRk5MQ3RDUVVFclFqdEJRVUZCTEZGQlEycEVPMEZCUlVFc1dVRkJTU3hMUVVGTExFdEJRVXNzVjBGQlZ5eEhRVUZITzBGQlF6RkNMR2RDUVVGTkxFbEJRVWtzVFVGQlRTdzRRa0ZCT0VJN1FVRkJRU3hSUVVOb1JEdEJRVWRCTEdOQlFVMHNVMEZCVXl4UFFVRlBMRk5CUVZNc1NVRkJTU3hMUVVGTExGZEJRVmNzUzBGQlN5eE5RVUZOTEV0QlFVc3NWMEZCVnp0QlFVVTVSU3hqUVVGTkxFbEJRVWs3UVVGQlFTeFZRVU5PTzBGQlFVRXNWVUZCVXl4UFFVRlBPMEZCUVVFc1ZVRkJWeXhQUVVGUE8wRkJRVUVzVlVGQlZTeFBRVUZQTzBGQlFVRXNWVUZCWjBJc1QwRkJUenRCUVVGQkxGVkJRVlU3UVVGQlFTeFZRVUZQTzBGQlFVRXNWVUZCVFR0QlFVRkJMRkZCUVVNN1FVRkZkRWNzV1VGQlNTeFJRVUZSTzBGQlExWXNhVUpCUVU4N1FVRkJRU3haUVVOSU8wRkJRVUVzV1VGQlV6dEJRVUZCTEZsQlFVYzdRVUZCUVN4WlFVRkxPMEZCUVVFc1dVRkJUenRCUVVGQkxGbEJRV2RDTzBGQlFVRXNXVUZCVnp0QlFVRkJMRmxCUVZNN1FVRkJRU3haUVVGWE8wRkJRVUVzV1VGQmMwSTdRVUZCUVN4WlFVTTNSanRCUVVGQkxGVkJRVlU3UVVGQlFTeFJRVU5vUWp0QlFVTkJMRmxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVDBGQlR6dEJRVU5zUWl4blFrRkJUU3hKUVVGSkxFMUJRVTBzWjBOQlFXZERPMEZCUVVFc1VVRkRiRVE3UVVGRFFTeGpRVUZOTEVsQlFVazdRVUZCUVN4VlFVTk9PMEZCUVVFc1ZVRkJVeXhQUVVGUE8wRkJRVUVzVlVGQlZ5eFBRVUZQTzBGQlFVRXNWVUZCVlN4UFFVRlBPMEZCUVVFc1ZVRkJhMElzVDBGQlR6dEJRVUZCTEZWQlFWVTdRVUZCUVN4VlFVRkxPMEZCUVVFc1ZVRkRNMFlzVDBGQlR6dEJRVUZCTEZGQlFWVTdRVUZGY2tJc1kwRkJUU3hKUVVGSk8wRkJRVUVzVlVGRFRqdEJRVUZCTEZWQlFWTXNUMEZCVHp0QlFVRkJMRlZCUVZjc1QwRkJUenRCUVVGQkxGVkJRVlVzVDBGQlR6dEJRVUZCTEZWQlFXdENMRTlCUVU4N1FVRkJRU3hWUVVGWE8wRkJRVUVzVlVGQlR6dEJRVUZCTEZWQlF6bEdMRWxCUVVrc1QwRkJUenRCUVVGQkxGRkJRVlU3UVVGRmVrSTdRVUZCUVN4VlFVTkpPMEZCUVVFc1ZVRkJVenRCUVVGQkxGVkJRVWM3UVVGQlFTeFZRVUZITzBGQlFVRXNWVUZCUnp0QlFVRkJMRlZCUVdkQ08wRkJRVUVzVlVGQlZ6dEJRVUZCTEZWQlFWTTdRVUZCUVN4VlFVRlhPMEZCUVVFc1ZVRkJjMEk3UVVGQlFTeFZRVUZSTzBGQlFVRXNVVUZCVlR0QlFVRkJMRTFCUXk5SE8wRkJRVUU3UVVGQlFUczdPMEZEY2xkQkxFMUJhVUpOUlN4clFrRnRRa0VzWjBKQk1FSkJMR1ZCTWtKQkxGbEJkVUpCTEZsQmRVSkJMR1ZCWlVFc2MwSkJhVVJCTEN0Q1FUQkNUenRCUVdwUFlqdEJRVUZCTzBGQlFVRTdRVUZIUVR0QlFVVkJPMEZCUjBFN1FVRlRRU3hOUVVGTlFTeHRRa0ZCYVVJc1EwRkJReXhYUVVGM1F6dEJRVU01UkN4WlFVRkpMRU5CUVVNc1ZVRkJWU3hQUVVGUExGTkJRVk1zUjBGQlJ6dEJRVU5vUXl4blFrRkJUU3hKUVVGSkxFMUJRVTBzWjBKQlFXZENPMEZCUVVFc1VVRkRiRU03UVVGRFFTeFpRVUZKTEU5QlFVOHNRMEZCUXl4RlFVRkZMRGhDUVVFclFpeFBRVUZQTEVOQlFVTXNSVUZCUlN3clFrRkJLMEk3UVVGRGNFWXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxITkRRVUZ6UXp0QlFVRkJMRkZCUTNoRU8wRkJSVUVzV1VGQlNTeFBRVUZQTEZWQlFWVXNSMEZCUnp0QlFVTjBRaXhqUVVGSkxGbEJRVmtzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4VFFVRlRMRTFCUVUwc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETzBGQlF6bEVMR05CUVVrc1QwRkJUeXhYUVVGWExFZEJRVWM3UVVGRGRrSXNkMEpCUVZrc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NUVUZCVFN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU03UVVGQlFTeFZRVU40UkR0QlFVTkJMR05CUVVrc1EwRkJReXhYUVVGWE8wRkJRMlFzYTBKQlFVMHNTVUZCU1N4TlFVRk5MRFpGUVVFMlJUdEJRVUZCTEZWQlF5OUdPMEZCUVVFc1VVRkRSanRCUVVGQkxFMUJRMFk3UVVGRlFTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRExGRkJRWFZDTEZkQlFXMUNMR1ZCUVN0Q08wRkJReTlHTEZsQlFVa3NVVUZCVVR0QlFVTmFMR2xDUVVGVExFbEJRVWtzV1VGQldTeEhRVUZITEV0QlFVc3NSMEZCUnl4RlFVRkZMRWRCUVVjN1FVRkRka01zYlVKQlFWTTdRVUZCUVN4elFrRkRVeXhQUVVGUExGZEJRVmNzVjBGQlZ5eERRVUZETEVOQlFVTXNUMEZCVHl4aFFVRmhMR2xDUVVGcFFpeEhRVUZITEZWQlFWVXNRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxESkNRVWszUlN4aFFVRmhMRzlDUVVGdlFpeEhRVUZITEZOQlFWTXNRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRU3huUTBGSGVrTXNZVUZCWVN4elFrRkJjMElzUjBGQlJ5eFRRVUZUTEVOQlFVTTdRVUZCUVR0QlFVRkJMRkZCUlRsRk8wRkJSVUVzWlVGQlR6dEJRVUZCTEc5Q1FVTlhMRTlCUVU4c1MwRkJTeXhMUVVGTE8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNZMEZKZGtJc1MwRkJTenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTEUxQlNXNUNPMEZCUlVFc1RVRkJUU3huUWtGQlowSXNRMEZCUXl4UlFVRjFRaXhYUVVGdFFpeGxRVUVyUWp0QlFVTTVSaXhaUVVGSkxGRkJRVkU3UVVGRFdpeHBRa0ZCVXl4SlFVRkpMRmxCUVZrc1IwRkJSeXhMUVVGTExFZEJRVWNzUlVGQlJTeEhRVUZITzBGQlEzWkRMRzFDUVVGVE8wRkJRVUVzTUVKQlEyRXNUMEZCVHl4WFFVRlhMRmRCUVZjc1EwRkJReXhEUVVGRExFOUJRVThzWVVGQllTeHBRa0ZCYVVJc1IwRkJSeXhWUVVGVkxFTkJRVU03UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMSGxEUVV0dVJTeGhRVUZoTEc5Q1FVRnZRaXhIUVVGSExGTkJRVk1zUTBGQlF6dEJRVUZCTzBGQlFVRXNaME5CUlhaRUxHRkJRV0VzYjBKQlFXOUNMRWRCUVVjc1UwRkJVeXhEUVVGRE8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNiME5CU1RGRExHRkJRV0VzYzBKQlFYTkNMRWRCUVVjc1UwRkJVeXhEUVVGRE8wRkJRVUU3UVVGQlFTeFJRVVZzUmp0QlFVVkJMR1ZCUVU4N1FVRkJRVHRCUVVGQk8wRkJRVUVzWjBKQlIwOHNTMEZCU3p0QlFVRkJPMEZCUVVFN1FVRkJRU3hOUVVkeVFqdEJRVVZCTEUxQlFVMHNZVUZCWVN4RFFVRkRMRkZCUVhWQ0xGZEJRVzFDTEdWQlFTdENPMEZCUXpOR0xGbEJRVWtzVVVGQlVUdEJRVU5hTEdsQ1FVRlRMRWxCUVVrc1dVRkJXU3hIUVVGSExFdEJRVXNzUjBGQlJ5eEZRVUZGTEVkQlFVYzdRVUZEZGtNc2JVSkJRVk03UVVGQlFTd3dRa0ZEWVN4UFFVRlBMRmRCUVZjc1YwRkJWeXhEUVVGRExFTkJRVU1zVDBGQlR5eGhRVUZoTEdsQ1FVRnBRaXhIUVVGSExGVkJRVlVzUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMQ3RDUVVrM1JTeGhRVUZoTEc5Q1FVRnZRaXhIUVVGSExGTkJRVk1zUTBGQlF6dEJRVUZCTERSQ1FVTnFSQ3hoUVVGaExHOUNRVUZ2UWl4SFFVRkhMRk5CUVZNc1EwRkJRenRCUVVGQk8wRkJRVUVzYjBOQlJYUkRMR0ZCUVdFc2MwSkJRWE5DTEVkQlFVY3NVMEZCVXl4RFFVRkRPMEZCUVVFN1FVRkJRU3hSUVVWc1JqdEJRVVZCTEdWQlFVODdRVUZCUVR0QlFVRkJPMEZCUVVFc1owSkJSMDhzUzBGQlN6dEJRVUZCTzBGQlFVRTdRVUZCUVN4TlFVZHlRanRCUVVWQkxFMUJRVTBzWVVGQllTeERRVUZETEZGQlFYVkNMRmRCUVcxQ0xHVkJRU3RDTzBGQlF6TkdMRmxCUVVrc1VVRkJVVHRCUVVOYUxHbENRVUZUTEVsQlFVa3NXVUZCV1N4SFFVRkhMRXRCUVVzc1IwRkJSeXhGUVVGRkxFZEJRVWM3UVVGRGRrTXNiVUpCUVZNN1FVRkJRU3d3UWtGRFlTeFBRVUZQTEZkQlFWY3NWMEZCVnl4RFFVRkRMRU5CUVVNc1QwRkJUeXhoUVVGaExHbENRVUZwUWl4SFFVRkhMRlZCUVZVc1EwRkJRenRCUVVGQk8wRkJRVUVzTmtKQlJTOUZMR0ZCUVdFc2IwSkJRVzlDTEVkQlFVY3NVMEZCVXl4RFFVRkRPMEZCUVVFN1FVRkJRU3dyUWtGRk5VTXNZVUZCWVN4dlFrRkJiMElzUjBGQlJ5eFRRVUZUTEVOQlFVTTdRVUZCUVN3MlFrRkRhRVFzWVVGQllTeHZRa0ZCYjBJc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGQlFUdEJRVUZCTEc5RFFVVjJReXhoUVVGaExITkNRVUZ6UWl4SFFVRkhMRk5CUVZNc1EwRkJRenRCUVVGQk8wRkJRVUVzVVVGRmJFWTdRVUZGUVN4bFFVRlBPMEZCUVVFN1FVRkJRVHRCUVVGQkxHZENRVWRQTEV0QlFVczdRVUZCUVR0QlFVRkJPMEZCUVVFc1RVRkhja0k3UVVGRlFTeE5RVUZOTEdkQ1FVRm5RaXhEUVVGRExGRkJRWFZDTEZkQlFXMUNMR1ZCUVhORE8wRkJRM0pITEdkQ1FVRlJMRmRCUVZjc1RVRkJUVHRCUVVGQkxGVkJRM1pDTEV0QlFVczdRVUZEU0N4dFFrRkJUeXhsUVVGbExGRkJRVkVzVjBGQlZ5eFhRVUZYTEV0QlFVc3NUVUZCVFR0QlFVRkJMRlZCUTJwRkxFdEJRVXM3UVVGRFNDeHRRa0ZCVHl4alFVRmpMRkZCUVZFc1YwRkJWeXhYUVVGWExFdEJRVXNzVFVGQlRUdEJRVUZCTEZWQlEyaEZMRXRCUVVzN1FVRkRTQ3h0UWtGQlR5eFhRVUZYTEZGQlFWRXNWMEZCVnl4WFFVRlhMRXRCUVVzc1RVRkJUVHRCUVVGQkxGVkJRemRFTEV0QlFVczdRVUZEU0N4dFFrRkJUeXhYUVVGWExGRkJRVkVzVjBGQlZ5eFhRVUZYTEV0QlFVc3NUVUZCVFR0QlFVRkJMRlZCUXpkRU8wRkJRMFVzYTBKQlFVMHNTVUZCU1N4TlFVRk5MR05CUVdNN1FVRkJRU3hSUVVOc1F6dEJRVUZCTEUxQlEwWTdRVUZGUVN4TlFVRk5MSFZDUVVGMVFpeERRVUZETEZGQlFTdENMR1ZCUVRKRE8wRkJRM1JITEdOQlFVMHNZMEZCWXl4VlFVRlZMRk5CUVZNc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eE5RVUZOTEVkQlFVY3NWMEZCVnl4SlFVRkpPMEZCUXpsRkxHTkJRVTBzV1VGQldTeFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVTTFRaXhqUVVGTkxHRkJRV0VzVlVGQlZTeExRVUZMTEZkQlFWYzdRVUZETjBNc1kwRkJUU3hyUWtGRFJpeERRVUZETEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzVjBGQlZTeEhRVUZITEVWQlFVTXNjVUpCUVhOQ0xFMUJRVTBzVjBGQlZ5eExRVUZKTEVOQlFVTTdRVUZETjBZc1dVRkJTU3hYUVVGWExGTkJRVk1zUjBGQlJ6dEJRVU42UWl3d1FrRkJaMElzUzBGQlN5eEZRVUZETEUxQlFVMHNUMEZCVHl4RFFVRkRMRVZCUVVVc1ZVRkJWU3hOUVVGTkxGZEJRVmNzVFVGQlN5eERRVUZETzBGQlFVRXNVVUZEZWtVN1FVRkZRU3gzUWtGQlowSXNTMEZCU3l4SFFVRkhMREpDUVVFeVFpeFBRVUZQTEVOQlFVTXNSVUZCUlN4TlFVRk5MRmRCUVZjc1EwRkJRenRCUVVNdlJTeGpRVUZOTEc5Q1FVRjNSQ3hEUVVGRExFMUJRVTA3UVVGRmNrVXNZMEZCVFN4clFrRkJhMElzUTBGQlF5eHBRa0ZCSzBJN1FVRkRkRVFzWjBKQlFVMHNVMEZCVXl4bFFVRmxMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzVlVGQlZTeFpRVUZaTEUxQlFVMDdRVUZET1VVc1owSkJRVTBzVVVGQlVTeGpRVUZqTEV0QlFVc3NUMEZCVHl4RFFVRkRMRVZCUVVVc1ZVRkJWU3hWUVVGVkxFMUJRVTA3UVVGRGNrVXNaMEpCUVUwc1YwRkJWeXhOUVVGTkxFdEJRVXM3UVVGRE5VSXNaMEpCUVUwc1lVRkJZU3hqUVVGakxGRkJRVkVzVlVGQlZTeFJRVUZSTEZWQlFWVTdRVUZEY2tVc1owSkJRVTBzVjBGRFJpeERRVUZETEVWQlFVTXNUVUZCVFN4bFFVRmxMRTFCUVUwc1RVRkJTeXhIUVVGSExFVkJRVU1zVFVGQlRTeFJRVUZSTEUxQlFVMHNUMEZCVHl4UlFVRlJMRmRCUVZjc1MwRkJTeXhQUVVGTkxFTkJRVU03UVVGRGNFY3NZMEZCU1N4WFFVRlhMRk5CUVZNc1IwRkJSenRCUVVONlFpeHhRa0ZCVXl4TFFVRkxMRVZCUVVNc1RVRkJUU3hyUWtGQmEwSXNUVUZCVFN4VFFVRnJReXhEUVVGRE8wRkJRVUVzVlVGRGJFWTdRVUZGUVN4cFFrRkJUenRCUVVGQkxHTkJRMGNzWVVGQllTeHBRa0ZCYVVJc1VVRkJVU3hGUVVGRkxHbENRVUZwUWl4UFFVRlBMRTFCUVUwc1EwRkJRenRCUVVGQkxHTkJRM1pGTEdGQlFXRXNWVUZCVlN4RFFVRkRPMEZCUVVFc1kwRkRlRUlzWVVGQllTeHpRMEZCYzBNc2MwSkJRWE5DTEVOQlFVTTdRVUZCUVR0QlFVRkJMRFJDUVVVMVJDeFBRVUZQTEdkQ1FVRm5RaXhaUVVGWkxFTkJRVU03UVVGQlFUdEJRVUZCTERCQ1FVVjBReXhSUVVGUk8wRkJRVUVzWTBGRGNFSXNWVUZCVlR0QlFVRkJPMEZCUVVFN1FVRkJRU3hSUVVkMFFqdEJRVVZCTEdWQlFVODdRVUZCUVN4VlFVTk1MRTFCUVUwN1FVRkJRU3hWUVVOT0xHRkJRV0VzUlVGQlF5eE5RVUZOTEVkQlFVY3NWMEZCVnl4SlFVRkpMRWxCUVVrc2EwSkJRV2xDTzBGQlFVRXNWVUZETTBRc1dVRkJXU3hQUVVGUE8wRkJRVUVzV1VGRGFrSXNVMEZCVXl4RFFVRkRMRVZCUVVNc1RVRkJUU3hoUVVGaExGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNVMEZCVVN4RFFVRkRPMEZCUVVFc1dVRkRNMFFzWlVGQlpTeEZRVUZETEVkQlFVY3NTMEZCU3p0QlFVRkJMR05CUVVzc1ZVRkJWU3hMUVVGTExGZEJRVmNzU1VGQlNUdEJRVUZCTzBGQlFVRXNXVUZCZFVJc1JVRkJRenRCUVVGQkxGbEJRMjVHTzBGQlFVRXNWVUZEUmp0QlFVRkJMRlZCUTBFN1FVRkJRU3hSUVVOR08wRkJRVUVzVFVGRFJqdEJRVVZCTEUxQlFVMHNaME5CUVdkRExFTkJRVU1zVVVGQkswSXNaVUZCTmtNN1FVRkRha2dzV1VGQlNTeFBRVUZQTEZOQlFWTXNSMEZCUnp0QlFVTnlRaXhuUWtGQlRTeGxRVUZsTEU5QlFVOHNRMEZCUXl4RlFVRkZMR2xDUVVGcFFqdEJRVU5vUkN4blFrRkJUU3hSUVVGVExFOUJRVThzVlVGQlZTeExRVUZMTEU5QlFVOHNRMEZCUXl4RlFVRkZMRTlCUVZFc1QwRkJUeXhEUVVGRExFVkJRVVVzWjBKQlFXZENMRVZCUVVVc1EwRkJReXhKUVVGSk8wRkJSWGhHTEdkQ1FVRk5MRmxCUVZrc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN6dEJRVU5xUXl4blFrRkJUU3hoUVVGaExFbEJRVWtzVjBGQlZ5eEpRVUZKTEZOQlFWTXNSVUZCUlN4TFFVRkxMRU5CUVVNN1FVRkRka1FzWTBGQlNTeFBRVUZQTEZWQlFWVXNSMEZCUnp0QlFVTjBRaXhyUWtGQlRTeFBRVUZQTEU5QlFVOHNRMEZCUXl4RlFVRkZMR2xDUVVGcFFqdEJRVU40UXl4eFFrRkJVeXhKUVVGSkxFZEJRVWNzU1VGQlNTeExRVUZMTEZGQlFWRXNTMEZCU3p0QlFVTndReXg1UWtGQlZ5eFBRVUZQTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hQUVVGUExHRkJRV0VzUTBGQlF5eERRVUZETzBGQlEzQkVMSGxDUVVGWExFOUJRVThzUzBGQlN5eERRVUZETEVOQlFVTXNTVUZCU1N4VFFVRlRMRWxCUVVrc1QwRkJUeXhoUVVGaExFbEJRVWtzUzBGQlN5eE5RVUZOTEVOQlFVTTdRVUZCUVN4WlFVTm9SanRCUVVGQkxGVkJRMFlzVDBGQlR6dEJRVU5NTEhsQ1FVRmhMRkZCUVZFc1EwRkJReXhIUVVGSExFMUJRVTBzVjBGQlZ5eFBRVUZQTEVOQlFVTXNRMEZCUXl4SlFVRkxMRTlCUVU4c1EwRkJReXhEUVVGRk8wRkJRVUVzVlVGRGNFVTdRVUZGUVN4blFrRkJUU3hQUVVGcFFpeERRVUZETzBGQlEzaENMSEZDUVVGWExGRkJRVkVzVDBGQlN5eExRVUZMTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUlhCRExHbENRVUZQTEVWQlFVTXNUVUZCVFN4WFFVRlhMRTFCUVUwc1QwRkJUeXhMUVVGSk8wRkJRVUVzVVVGRE5VTXNUMEZCVHp0QlFVTk1MR2xDUVVGUE8wRkJRVUVzVVVGRFZEdEJRVUZCTEUxQlEwWTdRVUZGVHl4TlFVRk5MRTFCUVUwc1EwRkJReXhUUVVGNVFpeGxRVUZ2UXp0QlFVTXZSU3hSUVVGQlFTeHBRa0ZCWlN4UlFVRlJMRTFCUVUwN1FVRkROMElzWTBGQlRTeHZRa0ZCYjBJc09FSkJRVGhDTEZGQlFWRXNVVUZCVVN4VlFVRlZPMEZCUTJ4R0xHZENRVUZSTEZGQlFWRXNjVUpCUVhGQ0xGRkJRVkVzVVVGQlVTeHBRa0ZCYVVJc1IwRkJSeXhGUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXp0QlFVRkJMRTFCUTNoR08wRkJRVUU3UVVGQlFUczdPMEZEY2s5QkxFMUJiVUpOUXl4clFrRk5RU3g1UTBFMFFrRXNjMEpCTWtSQkxIRkNRWE5LUVN3clFrRkhRU3d3UTBGSFFTeHpRMEZIUVN3eVFrRmhRU3c0UWtGcFEwOHNORUpCV1VFc1lVRkxVQ3h6UWtGWFR5eHJRMEZMUVN4dFFrRlZVQ3d3UWtFMlFrOHNVMEZMUVN4M1FrRm5Ra0VzT0VKQlMwRTdRVUV2V21JN1FVRkJRVHRCUVVGQk8wRkJSMEU3UVVGRlFUdEJRVVZCTzBGQlNVRTdRVUZSUVN4TlFVRk5RU3h0UWtGQmFVSXNRMEZCUXl4WFFVRjNRenRCUVVNNVJDeFpRVUZKUXl4TFFVRkpMRTlCUVU4c2VVSkJRWGxDTEVOQlFVTXNWVUZCVlN4UFFVRlBMRmRCUVZjc1NVRkJTVHRCUVVOMlJTeG5Ra0ZCVFN4SlFVRkpMRTFCUVUwc05FSkJRVFJDTzBGQlFVRXNVVUZET1VNN1FVRkJRU3hOUVVOR08wRkJSVUVzVFVGQlRTd3dRMEZCTUVNc1EwRkROVU1zVDBGQmJVSXNXVUZCTWtJc2NVSkJRWGxFTzBGQlEzcEhMR05CUVUwc2FVSkJRV2xDTEZkQlFWY3NWMEZCVnp0QlFVTTNReXhqUVVGTkxESkNRVUV5UWl4TlFVRk5MRXRCUVVzc1RVRkJUVHRCUVVOc1JDeFpRVUZKTEdkQ1FVRm5RanRCUVVOc1FpeHRRMEZCZVVJc1QwRkJUeXhIUVVGSExFZEJRVWNzZVVKQlFYbENMRWxCUVVrc1EwRkJSVHRCUVVGQkxGRkJRM1pGTzBGQlEwRXNZMEZCVFN4bFFVRmxMRTlCUVU4c1pVRkJaU3hMUVVGTExGbEJRVmtzVjBGQlZ6dEJRVU4yUlN4alFVRk5MR05CUVdNc1YwRkJWeXhaUVVGWkxFMUJRVTA3UVVGRGFrUXNZMEZCVFN4VlFVRlZMRmRCUVZjc1VVRkJVU3hOUVVGTk8wRkJRM3BETEdOQlFVMHNXVUZCYzBJc1pVRkJaMElzVjBGQmFVTXNWVUZCVlN4TlFVRk5MRWxCUVVrc1EwRkJRenRCUVVOc1J5eGpRVUZOTEU5QlFVOHNWMEZCVnl4TFFVRkxMRTFCUVUwN1FVRkRia01zY1VKQlFXRXNjVUpCUVhGQ0xHdENRVUZyUWl3d1FrRkJNRUlzWVVGQllTeFRRVUZUTEZkQlFWY3NTVUZCU1R0QlFVVnVTQ3hqUVVGTkxEUkNRVUUwUWl4aFFVRmhPMEZCUVVFc1ZVRkRNME03UVVGQlFTeFZRVUZyUWp0QlFVRkJMRlZCUVRCQ08wRkJRVUVzVlVGQlV6dEJRVUZCTEZWQlFWYzdRVUZCUVN4VlFVRmhPMEZCUVVFc1ZVRkJUU3hYUVVGWE8wRkJRVUVzVVVGQlR6dEJRVVY2Unl4alFVRk5MR2RDUVVGblFpeFBRVUZQTEU5QlFVOHNRMEZCUXl4SFFVRkhMRlZCUVZVN1FVRkRiRVFzV1VGQlNTeGpRVUZqTzBGQlEyaENMR2xDUVVGUExFOUJRVThzWlVGQlpTeEZRVUZETEdGQlFXRXNVMEZCVXl4TlFVRk5MRmRCUVZjc1ZVRkJWU3hYUVVGWExGTkJRVkVzUTBGQlF6dEJRVUZCTEZGQlEzSkhMRTlCUVU4N1FVRkRUQ3hwUWtGQlR5eFBRVUZQTEdWQlFXVXNSVUZCUXl4aFFVRmhMRk5CUVZNc1RVRkJUU3hWUVVGVkxGZEJRVmNzVTBGQlVTeERRVUZETzBGQlFVRXNVVUZETVVZN1FVRkRRU3hqUVVGTkxESkNRVUV5UWl3d1FrRkJNRUlzVFVGQlRUdEJRVU5xUlN4cFEwRkJlVUlzUzBGQlN5eDVRa0ZCZVVJc1QwRkJUeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdRVUZEZEVVc1pVRkJUeXhEUVVGRExHVkJRV1VzYVVKQlFXbENMREpDUVVFeVFpeDVRa0ZCZVVJN1FVRkJRU3hOUVVNNVJqdEJRVVZCTEUxQlFVMHNkVUpCUVhWQ0xFTkJRM3BDTEdGQlEwRXNaVUZCWjBjN1FVRkRiRWNzWTBGQlRTeHBRa0ZCYVVJc1YwRkJWeXhYUVVGWE8wRkJRemRETEdOQlFVMHNZVUZCWVN4VlFVRlZMRXRCUVVzc1YwRkJWenRCUVVNM1F5eGpRVUZOTEdGQlFXRXNWVUZCVlN4TFFVRkxMRmRCUVZjc1YwRkJWenRCUVVONFJDeGpRVUZOTEd0Q1FVTkdMRU5CUVVNc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4WFFVRlZMRWRCUVVjc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4WFFVRlZMRU5CUVVNN1FVRkRla1lzWTBGQlRTeFhRVUU0UWl4RFFVRkRMRVZCUVVNc1RVRkJUU3hqUVVGakxFMUJRVTBzVFVGQlN5eEhRVUZITEVWQlFVTXNUVUZCVFN4alFVRmpMRTFCUVUwc1RVRkJTeXhEUVVGRE8wRkJRM3BITEZsQlFVa3NWMEZCVnl4WlFVRlpMRlZCUVZVc1IwRkJSenRCUVVOMFF5eG5Ra0ZCVFN4TFFVRkxMRmRCUVZjc1dVRkJXU3hYUVVGWExGbEJRVmtzVTBGQlV5eERRVUZETzBGQlEyNUZMR2RDUVVGTkxFdEJRVXNzVjBGQlZ5eFJRVUZSTEZkQlFWY3NVVUZCVVN4VFFVRlRMRU5CUVVNN1FVRkRNMFFzWjBKQlFVMHNWVUZCVlN4WFFVRlhMRXRCUVVzc1YwRkJWeXhMUVVGTExGTkJRVk1zU1VGQlNTeERRVUZETzBGQlF6bEVMR2RDUVVGTkxGRkJRVkVzVjBGQlZ5eExRVUZMTEZkQlFWY3NTMEZCU3l4VFFVRlRMRU5CUVVNN1FVRkRlRVFzWjBKQlFVMHNiMEpCUVc5Q0xFTkJRVU1zUlVGQlJTeFZRVUZWTzBGQlEzWkRMREJDUVVGblFqdEJRVUZCTEZsQlExb3NSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeEhRVUZGTzBGQlFVRXNXVUZEYUVNc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4SFFVRkZPMEZCUVVFc1dVRkRhRU1zUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hSUVVGUE8wRkJRVUVzV1VGRGNrTXNSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeE5RVUZMTzBGQlFVRXNWVUZEZGtNN1FVRkRRU3h0UWtGQlV6dEJRVUZCTEZsQlEwd3NSVUZCUXl4TlFVRk5MRTFCUVUwc1RVRkJUU3hOUVVGTE8wRkJRVUVzV1VGQlJ5eEZRVUZETEUxQlFVMHNUVUZCVFN4TlFVRk5MRTFCUVVzN1FVRkJRU3haUVVGSExFVkJRVU1zVFVGQlRTeFhRVUZYTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUTI1R0xFVkJRVU1zVFVGQlRTeFRRVUZUTEUxQlFVMHNUVUZCU3p0QlFVRkJMRlZCUVVNN1FVRkZhRU1zWTBGQlNTeHZRa0ZCYjBJN1FVRkRlRUlzWTBGQlNTeFhRVUZYTEZsQlFWa3NWMEZCVnl4SFFVRkhPMEZCUTNaRExHdENRVUZOTEV0QlFVc3NWMEZCVnl4WlFVRlpMRmRCUVZjc1dVRkJXU3hUUVVGVExFTkJRVU03UVVGRGJrVXNhMEpCUVUwc1MwRkJTeXhYUVVGWExGRkJRVkVzVjBGQlZ5eFJRVUZSTEZOQlFWTXNRMEZCUXp0QlFVTXpSQ3hyUWtGQlRTeFZRVUZWTEZkQlFWY3NTMEZCU3l4WFFVRlhMRXRCUVVzc1UwRkJVeXhKUVVGSkxFTkJRVU03UVVGRE9VUXNhMEpCUVUwc1VVRkJVU3hYUVVGWExFdEJRVXNzVjBGQlZ5eExRVUZMTEZOQlFWTXNRMEZCUXp0QlFVTjRSQ3huUTBGQmIwSXNRMEZCUXl4RlFVRkZMRlZCUVZVN1FVRkRha01zTkVKQlFXZENPMEZCUVVFc1kwRkRXaXhGUVVGRExIVkNRVUYxUWl4TlFVRk5MRWRCUVVVN1FVRkJRU3hqUVVGSExFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc1IwRkJSVHRCUVVGQkxHTkJRVWNzUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hSUVVGUE8wRkJRVUVzWTBGRE0wY3NSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeE5RVUZMTzBGQlFVRXNXVUZCUXp0QlFVVjRReXh4UWtGQlV6dEJRVUZCTEdOQlEwd3NSVUZCUXl4TlFVRk5MRTFCUVUwc1RVRkJUU3hOUVVGTE8wRkJRVUVzWTBGQlJ5eEZRVUZETEUxQlFVMHNUVUZCVFN4TlFVRk5MRTFCUVVzN1FVRkJRU3hqUVVGSExFVkJRVU1zVFVGQlRTeFhRVUZYTEUxQlFVMHNUVUZCU3p0QlFVRkJMR05CUTI1R0xFVkJRVU1zVFVGQlRTeFRRVUZUTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUVVNN1FVRkJRU3hWUVVOc1F6dEJRVU5CTEdsQ1FVRlBMRU5CUVVNc2FVSkJRV2xDTEZWQlFWVXNUVUZCVFN4dFFrRkJiVUlzYVVKQlFXbENPMEZCUVVFc1VVRkRMMFVzVDBGQlR6dEJRVU5NTEdOQlFVa3NaMEpCUVdkQ08wRkJRMnhDTEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3gxUlVGQmRVVTdRVUZCUVN4VlFVTjZSanRCUVVOQkxHZENRVUZOTEdkQ1FVRm5RaXhWUVVGVkxHVkJRV1VzVjBGQlZ5eFhRVUZYTzBGQlEzSkZMREJDUVVGblFqdEJRVUZCTEZsQlExb3NSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeGpRVUZoTzBGQlFVRXNXVUZCUnl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEZkQlFWY3NTMEZCU1R0QlFVRkJMRmxCUXpOR0xFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc1YwRkJWeXhSUVVGUE8wRkJRVUVzVlVGQlF6dEJRVU55UkN4dFFrRkJVenRCUVVGQkxGbEJRMHdzUlVGQlF5eE5RVUZOTEdsQ1FVRnBRaXhOUVVGTkxFOUJRVThzVVVGQlVTeGpRVUZqTEU5QlFVMDdRVUZCUVN4WlFVTnFSU3hGUVVGRExFMUJRVTBzVVVGQlVTeE5RVUZOTEU5QlFVOHNVVUZCVVN4WFFVRlhMRXRCUVVzc1QwRkJUVHRCUVVGQkxGbEJRekZFTEVWQlFVTXNUVUZCVFN4WFFVRlhMRTFCUVUwc1QwRkJUeXhSUVVGUkxGZEJRVmNzVVVGQlVTeFBRVUZOTzBGQlFVRXNWVUZCUXp0QlFVVnlSU3huUWtGQlRTeFZRVUZWTEZkQlFWY3NTMEZCU3l4UFFVRlBMRU5CUVVNc1MwRkJTeXhSUVVGUkxFMUJRVTBzUjBGQlJ6dEJRVU01UkN4cFFrRkJUeXhEUVVGRExHbENRVUZwUWl4VlFVRlZMRU5CUVVNc1EwRkJReXhUUVVGVExFOUJRVThzUzBGQlN6dEJRVUZCTEZGQlF6VkVPMEZCUVVFc1RVRkRSanRCUVVWQkxFMUJRVTBzYzBKQlFYTkNMRU5CUTNoQ0xHTkJRVFJDTEVkQlFXdENMRTFCUVdNc2FVSkJRWGxDTEZsQlEzSkdMRXRCUVdFc1MwRkJZU3hQUVVGbExGVkJRVFpDTEZOQlFXdENMRzFDUVVONFJpeHpRa0ZCZFVNN1FVRkRla01zWTBGQlRTeHBRa0ZCYVVJc1YwRkJWeXhYUVVGWE8wRkJRemRETEdOQlFVMHNWMEZCVnl4RlFVRkZMRXRCUVVzN1FVRkRlRUlzWTBGQlRTeFRRVUZUTEdWQlFXVXNWVUZCVlN4RlFVRkZMRXRCUVVzc1VVRkJVU3hsUVVGbE8wRkJSWFJGTEZsQlFVa3NWMEZCVnl4WlFVRlpMRlZCUVZVc1IwRkJSenRCUVVOMFF5eGpRVUZKTEZGQlFWRTdRVUZEV2l4alFVRkpMRkZCUVZFN1FVRkRXaXhqUVVGSkxGZEJRVmM3UVVGRFppeG5Ra0ZCVFN4VlFVRlZMRkZCUVZFc2FVSkJRV2xDTEVsQlFVazdRVUZETjBNc1kwRkJTU3h0UWtGQmJVSTdRVUZEY2tJc2IwSkJRVkU3UVVGQlFUdEJRVUZCTERaQ1FVVmxMRTlCUVU4c1pVRkJaU3hQUVVGUE8wRkJRVUVzYVVOQlEzcENMRTlCUVU4c2NVSkJRWEZDTEU5QlFVODdRVUZCUVN3MFEwRkRlRUlzVDBGQlR6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMR3REUVVscVFpeEZRVUZGTEdkQ1FVRm5RaXhWUVVGVkxFTkJRVU03UVVGQlFTeHZRa0ZETTBNc1IwRkJSenRCUVVGQk8wRkJRVUVzVlVGRmJrSXNUMEZCVHp0QlFVTk1MRzlDUVVGUk8wRkJRVUU3UVVGQlFTdzJRa0ZGWlN4UFFVRlBMR1ZCUVdVc1QwRkJUenRCUVVGQkxHdERRVU40UWl4RlFVRkZMR2RDUVVGblFpeFZRVUZWTEVOQlFVTTdRVUZCUVN4dlFrRkRNME1zUjBGQlJ6dEJRVUZCTzBGQlFVRXNWVUZGYmtJN1FVRkZRU3hqUVVGSkxGZEJRVmNzV1VGQldTeFhRVUZYTEVkQlFVYzdRVUZEZGtNc2EwSkJRVTBzVlVGQlZTeFJRVUZSTEdsQ1FVRnBRaXhKUVVGSk8wRkJRemRETEdkQ1FVRkpMRzFDUVVGdFFqdEJRVU55UWl4elFrRkJVVHRCUVVGQk8wRkJRVUVzTmtKQlJXRXNUMEZCVHl4bFFVRmxMRTlCUVU4N1FVRkJRU3hwUTBGRGVrSXNUMEZCVHl4eFFrRkJjVUlzVDBGQlR5eDVRa0ZCZVVJc1QwRkJUenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNXVUZMT1VZc1QwRkJUenRCUVVOTUxITkNRVUZSTzBGQlFVRTdRVUZCUVN3MlFrRkZZU3hQUVVGUExHVkJRV1VzVDBGQlR6dEJRVUZCTzBGQlFVRXNXVUZGY0VRN1FVRkRRU3gxUWtGQlZ6dEJRVUZCTzBGQlFVRTdRVUZCUVN4VlFVZGlPMEZCUlVFc1owSkJRVTBzWTBGQll6dEJRVUZCTEdOQlExWXNZVUZCWVN4cFFrRkJhVUlzVVVGQlVTeEZRVUZGTEdsQ1FVRnBRaXhIUVVGSExFMUJRVTBzUTBGQlF6dEJRVUZCTzBGQlFVRXNZMEZGYmtVc1lVRkJZU3hWUVVGVkxFTkJRVU03UVVGQlFTeG5Ra0ZEZEVJc1lVRkJZU3h6UTBGQmMwTXNjVUpCUVhGQ0xFTkJRVU03UVVGQlFUdEJRVUZCTERoQ1FVVXpSQ3hQUVVGUExHZENRVUZuUWl4WlFVRlpMRU5CUVVNN1FVRkJRU3dyUWtGRGJrTXNUMEZCVHl4blFrRkJaMElzV1VGQldTeERRVUZETzBGQlFVRTdRVUZCUVN3MFFrRkZka01zVVVGQlVTeEpRVUZKTEV0QlFVczdRVUZCUVR0QlFVRkJMR2RDUVVVM1FpeExRVUZMTzBGQlFVRXNaMEpCUTB3c1MwRkJTenRCUVVGQkxHZENRVU5NTEZGQlFWRTdRVUZCUVN4blFrRkRVaXhIUVVGSE8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlNXWXNhVUpCUVU4N1FVRkJRU3hSUVVOVUxFOUJRVTg3UVVGRFRDeGpRVUZKTEdkQ1FVRm5RanRCUVVOc1FpeHJRa0ZCVFN4SlFVRkpMRTFCUVUwc2RVVkJRWFZGTzBGQlFVRXNWVUZEZWtZN1FVRkRRU3huUWtGQlRTeGpRVUZqTEZkQlFWY3NXVUZCV1R0QlFVTXpReXhuUWtGQlRTeFhRVUZYTEZkQlFWY3NTMEZCU3p0QlFVTnFReXhqUVVGSkxGVkJRVlU3UVVGRFpDeGpRVUZKTEZOQlFWTTdRVUZEV0N4elFrRkJWVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc1owTkJVV2RDTEVWQlFVVXNaMEpCUVdkQ0xGVkJRVlVzUTBGQlF6dEJRVUZCTEd0Q1FVTXpReXhIUVVGSE8wRkJRVUU3UVVGQlFTeFZRVVZxUWl4UFFVRlBPMEZCUTB3c2MwSkJRVlU3UVVGQlFUdEJRVUZCTERoQ1FVVmpMRVZCUVVVc1owSkJRV2RDTEZWQlFWVXNRMEZCUXp0QlFVRkJMR2RDUVVNelF5eEhRVUZITzBGQlFVRTdRVUZCUVN4VlFVVm1PMEZCUTBFc1owSkJRVTBzWTBGQll6dEJRVUZCTEdOQlExWXNZVUZCWVN4cFFrRkJhVUlzVVVGQlVTeEZRVUZGTEdsQ1FVRnBRaXhIUVVGSExFMUJRVTBzUTBGQlF6dEJRVUZCTzBGQlFVRXNZMEZGYmtVc1lVRkJZU3hWUVVGVkxFTkJRVU03UVVGQlFTeG5Ra0ZEZEVJc1lVRkJZU3h6UTBGQmMwTXNjVUpCUVhGQ0xFTkJRVU03UVVGQlFTdzRRa0ZETTBRc1QwRkJUeXhuUWtGQlowSXNXVUZCV1N4RFFVRkRPMEZCUVVFc0swSkJRMjVETEU5QlFVOHNaMEpCUVdkQ0xGbEJRVmtzUTBGQlF6dEJRVUZCTzBGQlFVRXNkME5CUlROQ0xGZEJRVmM3UVVGQlFUdEJRVUZCTERSQ1FVVjJRaXhSUVVGUkxFbEJRVWtzUzBGQlN6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3gxUTBGTlRpeGpRVUZqTEVOQlFVTTdRVUZCUVN3d1EwRkRXaXhoUVVGaExEQkNRVUV3UWl4TFFVRkxMRmRCUVZjc1EwRkJRenRCUVVGQkxESkRRVU4yUkN4aFFVRmhMREJDUVVFd1FpeExRVUZMTEZkQlFWY3NRMEZCUXp0QlFVRkJPMEZCUVVFc01FSkJSWHBGTEdOQlFXTXNRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRU3dyUWtGSFZpeFBRVUZQTEZkQlFWY3NWVUZCVlN4SlFVRkpPMEZCUVVFc0swTkJSWFpFTEdGQlFXRXNiMEpCUVc5Q0xFOUJRVThzVDBGQlR5eFhRVUZYTEV0QlFVc3NWMEZCVnl4RFFVRkRPMEZCUVVFc2IwTkJReTlETEU5QlFVOHNWMEZCVnl4UlFVRlJMR0ZCUVdFc2FVSkJRV2xDTEZWQlFWVXNVVUZCVVN4RFFVRkRPMEZCUVVFc2IwSkJRek5HTEU5QlFVODdRVUZCUVR0QlFVRkJMR2RDUVVWWUxFZEJRVWM3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZKWml4cFFrRkJUenRCUVVGQkxGRkJRMVE3UVVGQlFTeE5RVU5HTzBGQlkwRXNUVUZCVFN4blEwRkJaME1zUTBGQlF5eGxRVU5zUXl4SFFVRkhMRmRCUVZjc1RVRkJUU3hKUVVGSkxGZEJRVmNzVVVGQlVTeEpRVUZKTEZkQlFWY3NUMEZCVHl4SlFVRkpMRmRCUVZjc1dVRkJXU3hOUVVGTk8wRkJSWFpITEUxQlFVMHNNa05CUVRKRExFTkJRVU1zWlVGRE4wTXNSMEZCUnl3NFFrRkJPRUlzVlVGQlZTeERRVUZETEVsQlFVa3NWMEZCVnl4bFFVRmxPMEZCUlM5RkxFMUJRVTBzZFVOQlFYVkRMRU5CUVVNc1pVRkRla01zUjBGQlJ5dzRRa0ZCT0VJc1ZVRkJWU3hEUVVGRExFbEJRVWtzVjBGQlZ5eFpRVUZaTEVsQlFVa3NWMEZCVnl4VFFVRlRPMEZCUlhCSExFMUJRVTBzTkVKQlFUUkNMRU5CUVVNc1owSkJRU3RFTzBGQlFVRXNVVUZEYUVjc1VVRkJVU3hYUVVGWE8wRkJRVUVzVVVGRGJrSXNVMEZCVXl4RFFVRkRMRlZCUVZVc1UwRkJVeXhqUVVGakxGbEJRVmtzUlVGQlJTeFhRVUZYTEZGQlFXdENPMEZCUVVFc1VVRkRkRVlzVlVGQlZTeFhRVUZYTzBGQlFVRXNVVUZEY2tJc1lVRkJZU3hYUVVGWE8wRkJRVUVzVVVGRGVFSXNVMEZCVXl4WFFVRlhPMEZCUVVFc1VVRkRjRUlzVFVGQlRTeFhRVUZYTzBGQlFVRXNUVUZEYmtJN1FVRk5RU3hOUVVGTkxDdENRVU5HTEVOQlFVTXNUVUZCWXl4UFFVRnRRaXhyUWtGQk1rSXNaVUZCYlVRN1FVRkRPVWNzWTBGQlRTeERRVUZETEc5Q1FVRnZRaXhYUVVGWExFbEJRMnhETEhkRFFVRjNReXhQUVVGUExGbEJRVmtzWjBKQlFXZENPMEZCUXk5RkxHTkJRVTBzU1VGQlNTeGpRVUZqTEV0QlFVc3NUVUZCVFN4VlFVRlZMRTFCUVUwc1MwRkJTeXhOUVVGTk8wRkJRemxFTEdOQlFVMHNWMEZCVnl4RlFVRkZMRXRCUVVzN1FVRkZlRUlzWTBGQlRTeE5RVUZOTzBGQlExb3NXVUZCU1N4TlFVRk5PMEZCUTFZc1dVRkJTU3h0UWtGQmJVSXNhVUpCUVdsQ08wRkJRM1JETEdsQ1FVRlBMRmxCUVZrc1VVRkJVVHRCUVVGQkxGRkJRemRDTEU5QlFVODdRVUZEVEN4cFFrRkJUeXhaUVVGWkxGRkJRVkU3UVVGQlFTeFJRVU0zUWp0QlFVTkJMR05CUVUwc1EwRkJReXhwUWtGQmFVSXNWVUZCVlN4VFFVRlRMRzFDUVVGdFFpeHBRa0ZCYVVJc1NVRkRNMFVzY1VKQlFYRkNMR0ZCUVdFc2EwSkJRV3RDTzBGQlEzaEVMSGRDUVVGblFpeExRVUZMTEVkQlFVY3NNa0pCUVRKQ0xFMUJRVTBzVFVGQlRTeFhRVUZYTEVOQlFVTTdRVUZETTBVc1kwRkJUU3h2UWtGQmQwUXNRMEZCUXl4TlFVRk5PMEZCUTNKRkxHVkJRVTg3UVVGQlFTeFZRVU5NTzBGQlFVRXNWVUZEUVN4aFFVTkpMRVZCUVVNc1RVRkJUU3hIUVVGSExGZEJRVmNzVVVGQlVTeEpRVUZKTEU5QlFVOHNTVUZCU1N4cFFrRkJhVUlzU1VGQlNTeHBRa0ZCYVVJc1NVRkJTU3hyUWtGQmFVSTdRVUZCUVN4VlFVTXpSeXhaUVVGWkxFOUJRVTg3UVVGQlFTeFpRVU5xUWl4VFFVRlRMRU5CUVVNc1JVRkJReXhOUVVGTkxHRkJRV0VzVlVGQlZTeE5RVUZOTEZOQlFWRXNRMEZCUXp0QlFVRkJMRmxCUTNaRUxHVkJRV1VzUlVGQlF5eEhRVUZITEV0QlFVczdRVUZCUVN4alFVRkxMRlZCUVZVc1MwRkJTeXhYUVVGWExFbEJRVWs3UVVGQlFUdEJRVUZCTEZsQlFYVkNMRVZCUVVNN1FVRkJRU3haUVVOdVJqdEJRVUZCTEZWQlEwWTdRVUZCUVN4VlFVTkJMR2xDUVVGcFFpeHJRa0ZCWjBJN1FVRkJRU3haUVVNM1FqdEJRVUZCTEZsQlFXTTdRVUZCUVN4WlFVRkhMRTFCUVUwc1MwRkJTenRCUVVGQkxGbEJRVkVzV1VGQldUdEJRVUZCTEZsQlFWRTdRVUZCUVN4WlFVRnZRanRCUVVGQkxGbEJRVXM3UVVGQlFTeFpRVUZMTzBGQlFVRXNXVUZCU3p0QlFVRkJMRmxCUXpOR08wRkJRVUVzV1VGQlV6dEJRVUZCTEZsQlFXMUNPMEZCUVVFc1ZVRkJhVUk3UVVGQlFTeFJRVU51UkR0QlFVRkJMRTFCUTBZN1FVRkZSeXhOUVVGTkxEWkNRVUUyUWl4RFFVRkRMR1ZCUVN0RU8wRkJRM2hITEdOQlFVMHNhMEpCUVcxQ0xGZEJRVmNzYzBKQlFXbERMRWxCUVVrc1VVRkJVVHRCUVVWcVJpeGpRVUZOTEU5QlFVOHNNRUpCUVRCQ0xGVkJRVlU3UVVGRmFrUXNXVUZCU1N4TFFVRkxMR0ZCUVdFc1IwRkJSenRCUVVOMlFpeG5Ra0ZCVFN4SlFVRkpMRTFCUVUwc2QwVkJRWGRGTzBGQlFVRXNVVUZETVVZN1FVRkRRU3hqUVVGTkxIZENRVUYzUWl4RlFVRkRMR2xDUVVGcFFpeEhRVUZITEUxQlFVMHNWVUZCVlN4SFFVRkZPMEZCUTNKRkxHVkJRVThzUlVGQlF5eEhRVUZITEhWQ1FVRjFRaXhWUVVGVkxIbERRVUY1UXl4eFFrRkJjVUlzUlVGQlF6dEJRVUZCTEUxQlF6ZEhPMEZCUlU4c1RVRkJUU3hqUVVGakxFTkJRVU1zVTBGQmVVSXNaVUZCTkVNN1FVRkRMMFlzVVVGQlFVUXNhVUpCUVdVc1VVRkJVU3hOUVVGTk8wRkJRemRDTEdkQ1FVRlJMRkZCUVZFc05rSkJRVFpDTEdWQlFXVXNVVUZCVVN4UFFVRlBMRU5CUVVNc1IwRkJSeXhQUVVGUExGVkJRVlVzUTBGQlF6dEJRVUZCTEUxQlEyNUhPMEZCUlVFc1RVRkJUU3gxUWtGQmRVSTdRVUZCUVN4UlFVTXpRaXhUUVVGVE8wRkJRVUVzVVVGRFZDeFZRVUZWTzBGQlFVRXNVVUZEVml4cFFrRkJhVUk3UVVGQlFTeFJRVU5xUWl4aFFVRmhMRU5CUVVNN1FVRkJRU3hSUVVOa0xGTkJRVk1zUTBGQlF6dEJRVUZCTEZGQlExWXNUVUZCVFN4RFFVRkRPMEZCUVVFc1VVRkRVQ3hqUVVGak8wRkJRVUVzVVVGRFpDeFhRVUZYTEVOQlFVTTdRVUZCUVN4TlFVTmtPMEZCUlU4c1RVRkJUU3h0UTBGQmJVTXNRMEZCUXl4bFFVRXJSRHRCUVVNNVJ5eGpRVUZOTEZOQlFWTXNWMEZCVnp0QlFVTXhRaXhsUVVGUExFVkJRVU1zVVVGQlVTeEhRVUZITEhOQ1FVRnpRaXhWUVVGVkxFOUJRVTA3UVVGQlFTeE5RVU16UkR0QlFVVlBMRTFCUVUwc2IwSkJRVzlDTEVOQlFVTXNVMEZCZVVJc1pVRkJORU03UVVGRGNrY3NVVUZCUVVFc2FVSkJRV1VzVVVGQlVTeE5RVUZOTzBGQlF6ZENMR2RDUVVGUkxGRkJRVkVzTmtKQlFUWkNMSEZDUVVGeFFpeFJRVUZSTEU5QlFVOHNRMEZCUXl4SFFVRkhMRTFCUVUwc1ZVRkJWU3hEUVVGRE8wRkJRVUVzVFVGRGVFYzdRVUZQUVN4TlFVRk5MREpDUVVOR0xFTkJRVU1zVFVGQll5eFBRVUZ0UWl4clFrRkJNa0lzWlVGQkswTTdRVUZETVVjc1kwRkJUU3hEUVVGRExHOUNRVUZ2UWl4WFFVRlhMRWxCUTJ4RExIZERRVUYzUXl4UFFVRlBMRmxCUVZrc1owSkJRV2RDTzBGQlF5OUZMR05CUVUwc1RVRkJUVHRCUVVGQk8wRkJRVUU3UVVGSFdpeGpRVUZOTEUxQlFVMDdRVUZEV2l4alFVRk5MRWxCUVVrc1kwRkJZeXhMUVVGTExFMUJRVTBzVlVGQlZTeE5RVUZOTEV0QlFVc3NUVUZCVFR0QlFVTTVSQ3hqUVVGTkxHOUNRVUYzUkN4RFFVRkRMRTFCUVUwN1FVRkRja1VzWTBGQlRTeERRVUZETEdsQ1FVRnBRaXhWUVVGVkxGTkJRVk1zYlVKQlFXMUNMR2xDUVVGcFFpeEpRVU16UlN4eFFrRkJjVUlzWVVGQllTeHJRa0ZCYTBJN1FVRkRlRVFzZDBKQlFXZENMRXRCUVVzc1IwRkJSeXd5UWtGQk1rSXNUVUZCVFN4TlFVRk5MRmRCUVZjc1EwRkJRenRCUVVNelJTeGxRVUZQTzBGQlFVRXNWVUZEVER0QlFVRkJMRlZCUTBFc1lVRkRTU3hGUVVGRExFMUJRVTBzUjBGQlJ5eFhRVUZYTEZGQlFWRXNTVUZCU1N4UFFVRlBMRWxCUVVrc2FVSkJRV2xDTEVsQlFVa3NhVUpCUVdsQ0xFbEJRVWtzYTBKQlFXbENPMEZCUVVFc1ZVRkRNMGNzV1VGQldTeFBRVUZQTzBGQlFVRXNXVUZEYWtJc1UwRkJVeXhEUVVGRExFVkJRVU1zVFVGQlRTeGhRVUZoTEZWQlFWVXNUVUZCVFN4VFFVRlJMRU5CUVVNN1FVRkJRU3haUVVOMlJDeGxRVUZsTEVWQlFVTXNSMEZCUnl4TFFVRkxPMEZCUVVFc1kwRkJTeXhWUVVGVkxFdEJRVXNzVjBGQlZ5eEpRVUZKTzBGQlFVRTdRVUZCUVN4WlFVRjFRaXhGUVVGRE8wRkJRVUVzV1VGRGJrWTdRVUZCUVN4VlFVTkdPMEZCUVVFc1ZVRkRRU3hwUWtGQmFVSXNhMEpCUVdkQ08wRkJRVUVzV1VGRE4wSTdRVUZCUVN4WlFVRmpPMEZCUVVFc1dVRkJSeXhOUVVGTkxFdEJRVXM3UVVGQlFTeFpRVUZSTEZsQlFWazdRVUZCUVN4WlFVRlJPMEZCUVVFc1dVRkJiMEk3UVVGQlFTeFpRVUZMTzBGQlFVRXNXVUZEYUVZc1RVRkJUU3huUTBGQmFVTXNVMEZCVXp0QlFVRkJMRmxCUVUwN1FVRkJRU3haUVVGVk8wRkJRVUVzV1VGQlV6dEJRVUZCTEZsQlF6RkZPMEZCUVVFc1ZVRkJhVUk3UVVGQlFTeFJRVU4yUWp0QlFVRkJMRTFCUTBZN1FVRkZSeXhOUVVGTkxGVkJRVlVzUTBGQlF5eFRRVUY1UWl4bFFVRjNRenRCUVVOMlJpeFJRVUZCUVN4cFFrRkJaU3hSUVVGUkxFMUJRVTA3UVVGRE4wSXNaMEpCUVZFc1VVRkJVU3g1UWtGQmVVSXNWMEZCVnl4UlFVRlJMRTlCUVU4c1EwRkJReXhIUVVGSExFOUJRVThzVlVGQlZTeERRVUZETzBGQlFVRXNUVUZETTBZN1FVRkZUeXhOUVVGTkxIbENRVUY1UWl4RFFVRkRMR1ZCUVRKRU8wRkJRMmhITEdOQlFVMHNaVUZCWlN4WFFVRlhPMEZCUTJoRExHTkJRVTBzV1VGQldTeFhRVUZYTzBGQlJUZENMR05CUVUwc1QwRkJUeXd3UWtGQk1FSXNWVUZCVlR0QlFVVnFSQ3haUVVGSkxHbENRVUZwUWl4SFFVRkhPMEZCUTNSQ0xHZENRVUZOTEVsQlFVa3NUVUZCVFN3MlJFRkJOa1E3UVVGQlFTeFJRVU12UlR0QlFVTkJMRmxCUVVrc1MwRkJTeXhoUVVGaExFZEJRVWM3UVVGRGRrSXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxHOUZRVUZ2UlR0QlFVRkJMRkZCUTNSR08wRkJRMEVzWTBGQlRTeHZRa0ZCYjBJc1JVRkJReXhqUVVGakxGZEJRVmNzUjBGQlJ5eE5RVUZOTEZWQlFWVXNSMEZCUlR0QlFVTjZSU3hsUVVGUExFVkJRVU1zUjBGQlJ5eHRRa0ZCYlVJc1ZVRkJWU3h4UTBGQmNVTXNhVUpCUVdsQ0xFVkJRVU03UVVGQlFTeE5RVU5xUnp0QlFVVlBMRTFCUVUwc0swSkJRU3RDTEVOQlFVTXNaVUZCTWtRN1FVRkRkRWNzWTBGQlRTeFRRVUZUTEZkQlFWYzdRVUZETVVJc1pVRkJUeXhGUVVGRExGRkJRVkVzUjBGQlJ5eHpRa0ZCYzBJc1ZVRkJWU3hQUVVGTk8wRkJRVUVzVFVGRE0wUTdRVUZGVHl4TlFVRk5MR2RDUVVGblFpeERRVUZETEZOQlFYbENMR1ZCUVhkRE8wRkJRemRHTEZGQlFVRkJMR2xDUVVGbExGRkJRVkVzVFVGQlRUdEJRVU0zUWl4blFrRkJVU3hSUVVGUkxIbENRVUY1UWl4cFFrRkJhVUlzVVVGQlVTeFBRVUZQTEVOQlFVTXNSMEZCUnl4TlFVRk5MRlZCUVZVc1EwRkJRenRCUVVGQkxFMUJRMmhITzBGQlFVRTdRVUZCUVRzN08wRkRiR0ZCTEUxQlZVMHNkVUpCVlVFc2QwSkJiME5QTzBGQmVFUmlPMEZCUVVFN1FVRkJRVHRCUVVkQk8wRkJSVUU3UVVGSFFUdEJRVVZCTEUxQlFVMHNkMEpCUVhkQ0xFTkJRVU1zVDBGQlpTeFBRVUZsTEZWQlFYZENPMEZCUTI1R0xHTkJRVTBzYVVKQlFXbENMRlZCUVZVN1FVRkRha01zWTBGQlRTdzRRa0ZCT0VJc1VVRkJVU3hUUVVGVExGRkJRVkU3UVVGRE4wUXNZMEZCVFN3NFFrRkJPRUlzVVVGQlVTeFRRVUZUTEZGQlFWRTdRVUZGTjBRc1dVRkJTU3hyUWtGQmEwSXNLMEpCUVN0Q0xEWkNRVUUyUWp0QlFVTm9SaXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNNa05CUVRSRE8wRkJRVUVzVVVGRE9VUTdRVUZCUVN4TlFVTkdPMEZCUlVFc1RVRkJUU3g1UWtGQmVVSXNRMEZCUXl4UFFVRmxMRTlCUVdVc1QwRkJaU3hoUVVGdlF6dEJRVU12Unl4alFVRk5MR05CUVdNc1MwRkJTeXhKUVVGSkxFdEJRVXNzVFVGQlRTeFJRVUZSTEZOQlFWTXNTMEZCU3l4RFFVRkRPMEZCUXk5RUxHTkJRVTBzWTBGQmQwSXNRMEZCUXl4WFFVRlhPMEZCUXpGRExHTkJRVTBzWVVGQllUdEJRVU51UWl4alFVRk5MR3RDUVVGdlF6dEJRVUZCTEZWQlEzaERMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNWMEZCVlR0QlFVRkJMRlZCUVVjc1JVRkJReXhOUVVGTkxGVkJRVlVzVFVGQlRTeE5RVUZMTzBGQlFVRXNWVUZCUnl4RlFVRkRMRTFCUVUwc1ZVRkJWU3hOUVVGTkxFMUJRVXM3UVVGQlFTeFZRVU4wUnl4SFFVRkhMREpDUVVFeVFpeFhRVUZYTzBGQlFVRXNVVUZETTBNN1FVRkZRU3hqUVVGTkxHdENRVUZyUWl4RFFVRkRMR2xDUVVFclFqdEJRVU4wUkN4blFrRkJUU3hUUVVGVExHVkJRV1VzVlVGQlZTeFZRVUZWTEZsQlFWa3NUVUZCVFR0QlFVTndSU3huUWtGQlRTeFhRVUZYTEU5QlFVOHNTMEZCU3p0QlFVTTNRaXhuUWtGQlRTeFhRVUU0UWp0QlFVRkJMRmxCUTJ4RExFVkJRVU1zVFVGQlRTeGpRVUZqTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUVVjc1JVRkJReXhOUVVGTkxGTkJRVk1zVFVGQlRTeFRRVUZyUXp0QlFVRkJMRmxCUXpOR0xFVkJRVU1zVFVGQlRTeFRRVUZUTEUxQlFVMHNVMEZCYTBNN1FVRkJRU3hWUVVNeFJEdEJRVU5CTEdsQ1FVRlBPMEZCUVVFc1ZVRkRSQ3hoUVVGaExHbENRVUZwUWl4UlFVRlJMRVZCUVVVc2FVSkJRV2xDTEUxQlFVMHNRMEZCUXp0QlFVRkJMRlZCUTJoRkxHRkJRV0VzVlVGQlZTeERRVUZETzBGQlFVRXNWVUZEZUVJc1lVRkJZU3h6UTBGQmMwTXNjVUpCUVhGQ0xFTkJRVU03UVVGQlFTeG5SRUZEYmtNc1VVRkJVVHRCUVVGQk8wRkJRVUVzVVVGRmRFUTdRVUZGUVN4bFFVRlBPMEZCUVVFc1ZVRkRUQ3hOUVVGTk8wRkJRVUVzVlVGRFRpeGhRVUZoTEVWQlFVTXNUVUZCVFN4SFFVRkhMRkZCUVZFc1IwRkJSVHRCUVVGQkxGVkJRMnBETzBGQlFVRXNWVUZEUVN4WlFVRlpMRTlCUVU4N1FVRkJRU3haUVVOcVFpeFRRVUZUTEVOQlFVTXNSVUZCUXl4TlFVRk5MR0ZCUVdFc1UwRkJVU3hEUVVGRE8wRkJRVUVzV1VGRGRrTXNaVUZCWlN4RlFVRkRMRWRCUVVjc1MwRkJTenRCUVVGQkxHTkJRVXNzWVVGQllUdEJRVUZCTzBGQlFVRXNXVUZCZFVJc1JVRkJRenRCUVVGQkxGbEJRMnhGTzBGQlFVRXNWVUZEUmp0QlFVRkJMRkZCUTBZN1FVRkJRU3hOUVVOR08wRkJSVThzVFVGQlRTeFJRVUZSTEVOQlFVTXNXVUZCYTBNN1FVRkRkRVFzV1VGQlNTeFJRVUZSTzBGQlExb3NXVUZCU1N4UlFVRlJPMEZCUTFvc1dVRkJTU3hSUVVGUk8wRkJRMW9zV1VGQlNTeFJRVUZSTEU5QlFVOHNRMEZCUXl4RlFVRkZMRFJDUVVFMlFqdEJRVU5xUkN4clFrRkJVU3hSUVVGUkxFOUJRVThzUTBGQlF5eEZRVUZGTEdOQlFXTXNSVUZCUlN4RFFVRkRPMEZCUXpORExHdENRVUZSTEZGQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVc1kwRkJZeXhGUVVGRkxFTkJRVU03UVVGRE0wTXNhMEpCUVZFc1VVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJTeGpRVUZqTEVWQlFVVXNRMEZCUXp0QlFVRkJMRkZCUXpkRExGZEJRVmNzVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN3MFFrRkJOa0k3UVVGRGVFUXNhMEpCUVZFc1VVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJTeG5Ra0ZCWjBJc1JVRkJSU3hEUVVGRE8wRkJRemRETEd0Q1FVRlJMRkZCUVZFc1QwRkJUeXhEUVVGRExFVkJRVVVzWjBKQlFXZENMRVZCUVVVc1EwRkJRenRCUVVNM1F5eHJRa0ZCVVN4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRkxHZENRVUZuUWl4RlFVRkZMRU5CUVVNN1FVRkJRU3hSUVVNdlF6dEJRVU5CTEZsQlFVbEZMRXRCUVVrc1QwRkJUeXh6UWtGQmMwSTdRVUZEYmtNc1owTkJRWE5DTEU5QlFVOHNUMEZCVHl4TFFVRkxPMEZCUVVFc1VVRkRNME03UVVGRlFTeG5Ra0ZCVVN4UlFVRlJMSFZDUVVGMVFpeFBRVUZQTEU5QlFVOHNUMEZCVHl4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRkxGRkJRVkVzUjBGQlJ5eEZRVUZETEZGQlFWRXNRMEZCUXl4RlFVRkRMRU5CUVVNN1FVRkJRU3hOUVVOMlJ6dEJRVUZCTzBGQlFVRTdPenRCUXpGRlFTeE5RV2xEVFN4blFrRjFRa0VzWTBGVFFVTXNhMEpCTmtOQkxEUkRRV3RFUVN3MlFrRnJRMEVzVjBGaFFTeHBRa0YzUWtFc2JVSkJlVUpCTERKRFFYVkNRU3gzUTBGclEwRXNiVUpCVjBFc01rSkJVVUVzZFVKQmMwUkJMSE5DUVRaRlFTeDNRa0YzUlVFc2VVSkJiMGhCTEhGRFFVOVBMRkZCYVVKQk8wRkJibkZDWWp0QlFVRkJPMEZCUVVFN1FVRkpRVHRCUVVWQk8wRkJRMEU3UVVGSFFUdEJRWFZDUVN4TlFVRk5MR2xDUVVGcFFpeERRVUZETEZGQlFXdENMR1ZCUVhWRE8wRkJReTlGTEdWQlFVOHNUVUZCVFN4RFFVRkRMRlZCUVZVc1VVRkJVU3hOUVVGTkxFMUJRVTA3UVVGRGJFSXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxHOUVRVUZ2UkR0QlFVRkJMRkZCUTNSRkxFVkJRVVU3UVVGRk1VSXNXVUZCU1N4UFFVRlBMRk5CUVZNc1IwRkJSenRCUVVOeVFpeGpRVUZKTEZkQlFWY3NVMEZCVXl4VlFVRlZPMEZCUTJoRExHZENRVUZKTEVWQlFVVXNUMEZCVHl4WFFVRlhMRXRCUVVzc1QwRkJUeXhYUVVGWExFdEJRVTBzVDBGQlR5eFhRVUZYTEV0QlFVc3NUMEZCVHl4RFFVRkRMRTFCUVUwc1MwRkJTeXhQUVVGUExFTkJRVU1zVFVGQlRTeExRVU4wUnl4UFFVRlBMRmRCUVZjc1MwRkJTeXhQUVVGUExFTkJRVU1zVFVGQlRTeExRVUZMTEU5QlFVOHNRMEZCUXl4TlFVRk5MRXRCUTNoRUxFOUJRVThzVjBGQlZ5eExRVUZMTEU5QlFVOHNRMEZCUXl4TlFVRk5MRXRCUVVzc1QwRkJUeXhEUVVGRExFMUJRVTBzU1VGQlN6dEJRVU5zUlN4dlFrRkJUU3hKUVVGSk8wRkJRVUVzWjBKQlEwNDdRVUZCUVR0QlFVRkJMR05CUTNkR08wRkJRVUVzV1VGRE9VWTdRVUZCUVN4VlFVTkdMRmRCUVZjc1YwRkJWeXhUUVVGVExGTkJRVk03UVVGRGRFTXNaMEpCUVVrc1JVRkJSU3hQUVVGUExGZEJRVmNzUzBGQlRTeFBRVUZQTEZkQlFWY3NTMEZCU3l4UFFVRlBMRU5CUVVNc1RVRkJUU3hMUVVGTExFOUJRVThzUTBGQlF5eE5RVUZOTEV0QlF5OUZMRTlCUVU4c1YwRkJWeXhMUVVGTExFOUJRVThzUTBGQlF5eE5RVUZOTEV0QlFVc3NUMEZCVHl4RFFVRkRMRTFCUVUwc1NVRkJTenRCUVVOc1JTeHZRa0ZCVFN4SlFVRkpMRTFCUVUwc0swUkJRU3RFTzBGQlFVRXNXVUZEYWtZN1FVRkJRU3hWUVVOR08wRkJRVUVzVVVGRFJqdEJRVUZCTEUxQlEwWTdRVUZGUVN4TlFVRk5MR1ZCUVdVc1EwRkJReXhSUVVFeVFpeE5RVUY1UWl4VFFVRXlRanRCUVVOdVJ5eGhRVUZMTEUxQlFVMHNRMEZCUXl4VlFVRlZMRk5CUVZNc1MwRkJTeXhSUVVGUkxGTkJRVk1zVFVGQlRUdEJRVU51UXl4blFrRkJUU3hKUVVGSkxFMUJRVTBzY1VWQlFYRkZPMEZCUVVFc1VVRkRka1lzUlVGQlJUdEJRVU40UWl4alFVRk5MRmxCUVZrc1NVRkJTU3hOUVVGTkxFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVYzdRVUZETVVNc1lVRkJTeXhSUVVGUkxFTkJRVU1zVDBGQlR5eFZRVUZWTEZWQlFWVXNTMEZCU3l4SlFVRkpMRTlCUVU4c1MwRkJTeXhEUVVGRE8wRkJReTlFTEdWQlFVODdRVUZCUVN4TlFVTlVPMEZCUlVFc1RVRkJUVUVzYlVKQlEwWXNRMEZCUXl4UlFVRXJRaXhaUVVFNFFpeGpRVUZ6UWl4UlFVTnVSaXhQUVVGcFFpeFJRVUYzUWp0QlFVTjRReXhqUVVGTkxFTkJRVU1zWlVGQlpTeHJRa0ZCYTBJc1pVRkJaU3hKUVVOc1JDeGxRVUZsTEV0QlFVMHNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlN5eFBRVUZQTEZOQlFWTXNTVUZCU3l4SlFVRkpMRWxCUVVrc1JVRkJSVHRCUVVNelJTeGpRVUZOTEU5QlFVOHNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTenRCUVVNMVFpeFpRVUZKTEdkQ1FVRm5RaXhMUVVGTExFOUJRVThzVTBGQlV5eHBRa0ZCYVVJc1QwRkJUeXhoUVVGaExFVkJRVVVzUzBGQlN5eFRRVUZUTEVkQlFVYzdRVUZETDBZc2FVSkJRVThzWVVGQllTeEZRVUZGTEdkQ1FVRm5RaXhGUVVGRkxGRkJRVkVzUTBGQlF5eFZRVUZWTEVsQlFVa3NTMEZCU3l4TFFVRkxMRU5CUVVNN1FVRkJRU3hSUVVNMVJTeFhRVUZYTEZkQlFWY3NORUpCUVRSQ0xITkNRVUZ6UWp0QlFVTjBSU3huUWtGQlRTeEpRVUZKTEUxQlFVMHNNa1pCUVRKR08wRkJRVUVzVVVGRE4wYzdRVUZGUVN4WlFVRkpMRzFDUVVGdFFpeExRVUZMTEU5QlFVOHNVMEZCVXl4dlFrRkJiMElzVDBGQlR5eG5Ra0ZCWjBJc1JVRkJSU3hMUVVGTExGTkJRVk1zUjBGQlJ6dEJRVU40Unl4cFFrRkJUeXhuUWtGQlowSXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeFJRVUZSTEVOQlFVTXNWVUZCVlN4UFFVRlBMRXRCUVVzc1MwRkJTeXhEUVVGRE8wRkJRMmhHTEdOQlFVa3NUMEZCVHl4WFFVRlhMRTFCUTJwQ0xFOUJRVThzVjBGQlZ5eFRRVUZUTEdkQ1FVRm5RaXhOUVVGTkxFOUJRVThzVjBGQlZ5eFhRVUZYTEV0QlFVc3NWVUZCVlR0QlFVTm9SeXhyUWtGQlRTeEpRVUZKTzBGQlFVRXNZMEZEVGp0QlFVRkJMRmxCUVRaR08wRkJRVUVzVlVGRGJrYzdRVUZEUVN4NVFrRkJaU3hSUVVGUkxGVkJRVlU3UVVGRGFrTXNZMEZCU1N4WFFVRlhMRXRCUVVzc1UwRkJVeXhIUVVGSE8wRkJRemxDTEhsQ1FVRmhMRkZCUVZFc1YwRkJWeXhOUVVGTkxFbEJRVWtzUlVGQlJTeFJRVUZSTEVOQlFVTXNUMEZCVHl4VlFVRlZMRTlCUVU4c1MwRkJTeXhKUVVGSkxFdEJRVXM3UVVGQlFTeFZRVU0zUmp0QlFVRkJMRkZCUTBZN1FVRkRRU3haUVVGSkxHdENRVUZyUWl4TFFVRkxMRTlCUVU4c1UwRkJVeXhwUWtGQmFVSTdRVUZETVVRc2FVSkJRVThzWlVGQlpTeEZRVUZGTEdsQ1FVRnBRaXhGUVVGRkxGRkJRVkVzUTBGQlF5eFZRVUZWTEUxQlFVMHNTMEZCU3l4UFFVRlBMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM1pHTEdOQlFVa3NUVUZCVFN4WFFVRlhMRkZCUVZNc1owSkJRV2RDTEUxQlFVMHNUVUZCVFN4WFFVRlhMRmRCUVZjc1MwRkJTeXhSUVVGVE8wRkJRelZHTEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3cwUmtGQk5FWTdRVUZCUVN4VlFVTTVSenRCUVVGQkxGRkJRMFk3UVVGRlFTeFpRVUZKTEZkQlFWY3NTMEZCU3l4VFFVRlRMRWRCUVVjN1FVRkRPVUlzWTBGQlNTeFBRVUZQTEZkQlFWY3NWMEZCVnl4TFFVRkxMRkZCUVZFN1FVRkROVU1zYTBKQlFVMHNTVUZCU1N4TlFVRk5MREJHUVVFd1JqdEJRVUZCTEZWQlF6VkhPMEZCUTBFc1kwRkJTU3hOUVVGTkxGZEJRVmNzVjBGQlZ5eExRVUZMTEZGQlFWRTdRVUZETTBNc2EwSkJRVTBzU1VGQlNUdEJRVUZCTEdOQlEwNDdRVUZCUVN4WlFVRTRSanRCUVVGQkxGVkJRM0JITzBGQlFVRXNVVUZEUmp0QlFVTkJMRmxCUVVrc1QwRkJUeXhYUVVGWExHVkJRV1VzVDBGQlR5eFZRVUZWTEdWQlFXVXNUMEZCVHl4VFFVRlRMRXRCUVVzc1RVRkJUU3hUUVVGVExFMUJRVTA3UVVGRE4wY3NaMEpCUVUwc1NVRkJTU3hOUVVGTkxIbEVRVUY1UkR0QlFVRkJMRkZCUXpORk8wRkJRVUVzVFVGRFJqdEJRVVZLTEUxQlFVMHNOa05CUTBZc1EwRkJReXgzUWtGQmFVUXNWVUZET1VNN1FVRkJRU3d5UkVGRGJVUXNTMEZCU3l4VFFVTXpSQ3hOUVVGTk8wRkJRMFFzWjBKQlFWRXNkMEpCUVhkQ08wRkJRVUVzVlVGRE9VSXNTMEZCU3p0QlFVTklMRzFDUVVGUExGVkJRVlVzUzBGQlN5eG5Ra0ZCWjBJc1MwRkJTenRCUVVGQkxGVkJRemRETEV0QlFVczdRVUZEU0N4dFFrRkJUenRCUVVGQkxEaENRVU5UTEV0QlFVc3NkVUpCUVhWQ0xFdEJRVXM3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4VlFVbHVSQ3hMUVVGTE8wRkJRMGdzYlVKQlFVOHNWMEZCVnl4TFFVRkxMSFZDUVVGMVFpeExRVUZMTzBGQlFVRXNWVUZEY2tRc1MwRkJTenRCUVVOSUxHMUNRVUZQTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxHdERRVTFoTEV0QlFVczdRVUZCUVR0QlFVRkJMREJDUVVWaUxFdEJRVXNzTmtSQlFUWkVMRXRCUVVzN1FVRkJRVHRCUVVGQk8wRkJRVUVzVlVGSGNrWXNTMEZCU3p0QlFVTklMRzFDUVVGUE8wRkJRVUVzTmtKQlExRXNTMEZCU3l4blFrRkJaMElzUzBGQlN6dEJRVUZCTERKQ1FVTTFRaXhMUVVGTExHZENRVUZuUWl4TFFVRkxMSGxDUVVGNVFpeExRVUZMTzBGQlFVRXNNRUpCUTNwRUxFdEJRVXM3UVVGQlFUdEJRVUZCTEcxRFFVVkpMRXRCUVVzc2VVSkJRWGxDTEV0QlFVczdRVUZCUVR0QlFVRkJMRlZCUlRGRUxFdEJRVXM3UVVGRFNDeHRRa0ZCVHl4MVFrRkJkVUlzUzBGQlN5eFpRVUZaTEV0QlFVczdRVUZCUVN4MVEwRkRNMElzUzBGQlN6dEJRVUZCTEcxRFFVTlVMRXRCUVVzN1FVRkJRVHRCUVVGQkxITkRRVVZHTEV0QlFVc3NkVUpCUVhWQ0xFdEJRVXM3UVVGQlFTeFZRVU16UkN4TFFVRkxPMEZCUTBnc2JVSkJRVThzV1VGQldTeExRVUZMTEhWQ1FVRjFRaXhMUVVGTE8wRkJRVUVzVlVGRGRFUTdRVUZEUlN4clFrRkJUU3hKUVVGSkxFMUJRVTBzTmtKQlFUWkNMSE5DUVVGelFpeHRRa0ZCYlVJN1FVRkJRU3hSUVVNeFJqdEJRVUZCTEUxQlEwWXNSMEZCUnl4SlFVTlFPMEZCUlVvc1RVRkJUU3c0UWtGQk9FSXNRMEZCUXl4aFFVRXdRaXhqUVVGelFpeFZRVU5xUml3MlEwRkJOa01zUzBGQlN5dzBRa0ZCTkVJc1MwRkJTeXhSUVVGUkxFMUJRVTA3UVVGREwwWXNaMEpCUVZFc1lVRkJZVHRCUVVGQkxGVkJRMjVDTEV0QlFVczdRVUZEU0N4dFFrRkJUenRCUVVGQkxGVkJTMVFzUzBGQlN6dEJRVU5JTEcxQ1FVRlBPMEZCUVVFc1ZVRkRWQ3hMUVVGTE8wRkJRMGdzYlVKQlFVODdRVUZCUVN4VlFVTlVMRXRCUVVzN1FVRkRTQ3h0UWtGQlR6dEJRVUZCTEZWQlMxUXNTMEZCU3p0QlFVRkJMRlZCUTB3N1FVRkRSU3huUWtGQlNTeGxRVUZsTEVsQlFVazdRVUZEY2tJc2NVSkJRVTg3UVVGQlFTeFpRVTFVTzBGQlEwRXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxHZENRVUZuUWl4WFFVRlhMRzFDUVVGdFFqdEJRVUZCTEZGQlEyeEZPMEZCUVVFc1RVRkRSaXhIUVVGSExFbEJRMGc3UVVGRlNpeE5RVUZOTEZsQlFWa3NRMEZCUXl4TFFVRjNRaXhOUVVGNVFpeFRRVUV5UWp0QlFVTTNSaXhqUVVGTkxGTkJRVk1zU1VGQlNTeE5RVUZOTEVsQlFVa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1JVRkJSU3hQUVVGUExFbEJRVWtzVFVGQlRTeEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1FVRkRja1VzWTBGQlRTeFhRVUZYTEVsQlFVa3NWMEZCVnl4SlFVRkpMRk5CUVZNc1NVRkJTU3hOUVVGTk8wRkJRM1pFTEZsQlFVa3NTMEZCU3l4VFFVRlRMRWRCUVVjN1FVRkRia0lzWlVGQlN5eFJRVUZSTEVOQlFVTXNSMEZCUnl4TlFVRk5PMEZCUTNKQ0xHMUNRVUZQTEVOQlFVTXNTVUZCU1N4VFFVRlRMRU5CUVVNN1FVRkRkRUlzYlVKQlFVOHNTVUZCU1N4SlFVRkpMRWxCUVVrc1UwRkJVeXhMUVVGTExGTkJRVk1zUTBGQlF6dEJRVUZCTEZWQlF6ZERMRU5CUVVNN1FVRkRSQ3hwUWtGQlR6dEJRVUZCTEZGQlExUTdRVUZEUVN4bFFVRlBPMEZCUVVFc1RVRkRWRHRCUVVWQkxFMUJRVTBzYTBKQlEwWXNRMEZCUXl4WlFVRXJRaXhSUVVFeVFpeFBRVUV3UWl4VFFVTnlSVHRCUVVOV0xGbEJRVWtzWTBGQmQwSXNRMEZCUXp0QlFVTTNRaXhaUVVGSkxFMUJRVTBzVTBGQlV5eEhRVUZITzBGQlEzQkNMR05CUVVrc1MwRkJTeXhUUVVGVExFZEJRVWM3UVVGRGJrSXNkVUpCUVZjc1VVRkJVU3hEUVVGRExFMUJRVTBzV1VGQldTeExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTTNReXhuUWtGQlNTeExRVUZMTEVsQlFVa3NSMEZCUnl4SlFVRkpMRWxCUVVrc1YwRkJWeXhSUVVGUk8wRkJRM3BETEc5Q1FVRk5MRWxCUVVrc1RVRkJUU3h6UWtGQmMwSTdRVUZCUVN4WlFVTjRRenRCUVVOQkxHbENRVUZMTEZGQlFWRXNRMEZCUXl4SFFVRkhMRTFCUVUwc1dVRkJXU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEVOQlFVTTdRVUZCUVN4VlFVTnNSQ3hQUVVGUE8wRkJRMHdzYTBKQlFVMHNVVUZCVVN4RFFVRkRMRTFCUVUwc1dVRkJXU3hMUVVGTExFTkJRVU1zUTBGQlF6dEJRVUZCTEZWQlF6RkRPMEZCUVVFc1VVRkRSaXhQUVVGUE8wRkJRMHdzWTBGQlNTeFBRVUZQTEZkQlFWY3NSMEZCUnp0QlFVTjJRaXhyUWtGQlRTeEpRVUZKTEUxQlFVMHNlVU5CUVhsRE8wRkJRVUVzVlVGRE0wUXNUMEZCVHp0QlFVTk1MREJDUVVGakxGZEJRVmNzU1VGQlNTeERRVUZETEU5QlFVOHNWVUZCVlN4TFFVRkxMRTFCUVUwc1VVRkJVU3hQUVVGUExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlFVRXNWVUZEYkVZN1FVRkJRU3hSUVVOR08wRkJRMEVzWlVGQlR6dEJRVUZCTEUxQlExUTdRVUZGVWl4TlFVRk5MRzlDUVVGdlFpeERRVUZETEZsQlFTdENMRkZCUVd0Q0xHVkJRV2xETzBGQlF6TkhMR05CUVUwc2FVSkJRV2xDTEUxQlFVMDdRVUZETTBJc2EwSkJRVkVzVjBGQlZ5eDFRa0ZCZFVJN1FVRkJRU3haUVVONFF5eExRVUZMTzBGQlEwZ3NjVUpCUVU4c1YwRkJWeXhMUVVGTExGTkJRVk1zU1VGQlNTeExRVUZMTEVsQlFVa3NSMEZCUnl4WFFVRlhMRXRCUVVzc1NVRkJTU3hQUVVGTExFOUJRVThzUTBGQlF5eERRVUZETEVkQlFVY3NUMEZCVHl4VFFVRlRMRWxCUTJwRkxFdEJRVXNzU1VGQlNTeEhRVUZITEZGQlFWRXNUMEZCVHl4VFFVRlRPMEZCUVVFc1dVRkRNVVVzUzBGQlN6dEJRVU5JTEhGQ1FVRlBMRmRCUVZjc1MwRkJTeXhUUVVGVExFbEJRVWtzUzBGQlN5eEpRVUZKTEVkQlFVY3NWMEZCVnl4TFFVRkxMRWxCUVVrc1QwRkJTeXhQUVVGUExFTkJRVU1zUTBGQlF5eEhRVUZITEU5QlFVOHNVMEZCVXl4SlFVTnFSU3hMUVVGTExFbEJRVWtzUjBGQlJ5eFJRVUZSTEU5QlFVOHNVMEZCVXp0QlFVRkJMRmxCUXpGRk8wRkJRMFVzYjBKQlFVMHNTVUZCU1N4TlFVRk5MRFJDUVVFMFFpeFhRVUZYTEhGQ1FVRnhRaXh0UWtGQmJVSTdRVUZCUVN4VlFVTnVSenRCUVVGQkxGRkJRMFlzUjBGQlJ6dEJRVU5JTEdWQlFVOHNTMEZCU3l4SFFVRkxMRWRCUVVjc1QwRkJUeXhOUVVGTk8wRkJRMnBETEdOQlFVMHNjMEpCUVhOQ0xGZEJRVmNzVFVGQlRUdEJRVU0zUXl4WlFVRkpMRmRCUVZjc1MwRkJTeXhUUVVGVExFZEJRVWM3UVVGRE9VSXNjVUpCUVZjc1MwRkJTeXhSUVVGUkxFTkJRVU1zVFVGQlRTeFBRVUZQTEVOQlFVTXNTVUZCU1N4aFFVRmhPMEZCUTNoRUxIRkNRVUZYTEV0QlFVc3NVVUZCVVN4RFFVRkRMRTFCUVUwc2IwSkJRVzlDTEVOQlFVTXNTVUZCU1N4TFFVRkxMRTFCUVUwc1YwRkJWeXhEUVVGRExFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVRkJMRkZCUXk5R0xFOUJRVTg3UVVGRFRDeHBRa0ZCVHl4TFFVRkxMR1ZCUVdVc1IwRkJSeXhQUVVGUExFMUJRVTA3UVVGRE0wTXNPRUpCUVc5Q0xGRkJRVkVzUTBGQlF5eEhRVUZITEUxQlFVMHNiMEpCUVc5Q0xFTkJRVU1zU1VGQlNTeExRVUZMTEUxQlFVMHNTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRVUVzVVVGRE1VWTdRVUZEUVN4bFFVRlBPMEZCUVVFc1RVRkRWRHRCUVVWQkxFMUJRVTBzTkVOQlEwWXNRMEZCUXl4UlFVRjFRaXhaUVVFclFpeGhRVUZuUXl4alFVTjBSaXhqUVVFNFFqdEJRVUZCTEcxRlFVTm5ReXhQUVVGUExFdEJRVXNzVDBGQlR5eGpRVU01UlN4UFFVRlBMRXRCUVVzc1MwRkJTeXhMUVVGTExGbEJRVmtzVFVGQlRUdEJRVUZCTEc5RFFVTmFMRTlCUVU4c1MwRkJTeXhMUVVGTExFdEJRVXNzV1VGQldTeE5RVUZOTzBGQlFVRXNaME5CUXpWRExGbEJRVmtzVFVGQlRUdEJRVUZCTERaQ1FVTnlRaXhQUVVGUExGZEJRVmNzYTBKQlFXdENMRWRCUVVjc1EwRkJRenRCUVVGQkxITkNRVU12UXl4aFFVRmhMRzFDUVVGdFFpeExRVUZMTEZsQlFWa3NRMEZCUXp0QlFVRkJMSGRDUVVOb1JDeGhRVUZoTEdkQ1FVRm5RaXhMUVVGTExGTkJRVk1zUTBGQlF6dEJRVUZCTEhWQ1FVTTNReXhoUVVGaExHZENRVUZuUWl4UFFVRlBMRmRCUVZjc1RVRkJUU3hKUVVGSkxGTkJRVk1zUTBGQlF6dEJRVUZCTzBGQlFVRXNhME5CUlhoRUxFOUJRVThzUzBGQlN5eExRVUZMTzBGQlFVRTdRVUZCUVN4blEwRkZia0lzWVVGQllTeDNRa0ZCZDBJc1MwRkJTeXhYUVVGWExFMUJRVTBzUTBGQlF6dEJRVUZCTEdsRFFVTXpSQ3hoUVVGaExIbENRVUY1UWl4TFFVRkxMRmxCUVZrc1RVRkJUU3hEUVVGRE8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCVVM5R0xFMUJRVTBzZVVOQlEwWXNRMEZCUXl4UFFVRnpRaXhSUVVGMVFpeFpRVUVyUWl4aFFVTTFSU3hqUVVGelFpeFhRVUZ0UWl4eFFrRkJjME03UVVGQlFTeG5SVUZEY0VJc1QwRkJUeXhMUVVGTExFOUJRVThzVVVGQlVTeE5RVUZOTEV0QlFVc3NUMEZCVHp0QlFVRkJMREpDUVVOc1JpeE5RVUZOTEV0QlFVc3NUMEZCVHp0QlFVRkJMR2REUVVOaUxGbEJRVmtzVFVGQlRUdEJRVUZCTERaQ1FVTnlRaXhQUVVGUExGZEJRVmNzYTBKQlFXdENMRWRCUVVjc1EwRkJRenRCUVVGQk8wRkJRVUVzYzBKQlJTOURMR0ZCUVdFc2JVSkJRVzFDTEV0QlFVc3NXVUZCV1N4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzTUVKQlNUbERMR0ZCUVdFc1owSkJRV2RDTEV0QlFVc3NVMEZCVXl4RFFVRkRPMEZCUVVFc2VVSkJRemRETEdGQlFXRXNaMEpCUVdkQ0xFOUJRVThzVjBGQlZ5eE5RVUZOTEVsQlFVa3NVMEZCVXl4RFFVRkRPMEZCUVVFc1owTkJRelZFTEdGQlFXRXNkMEpCUVhkQ0xFdEJRVXNzVjBGQlZ5eE5RVUZOTEVOQlFVTTdRVUZCUVN4cFEwRkRNMFFzWVVGQllTeDVRa0ZCZVVJc1MwRkJTeXhaUVVGWkxFMUJRVTBzUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVN4cFFrRkhPVVVzWjBKQlFXZENMRFJEUVVFMFF5eFBRVUZQTEV0QlFVc3NTMEZCU3p0QlFVRkJPMEZCUVVFN1FVRkJRU3gzUTBGSGRFUXNUMEZCVHl4TFFVRkxMRXRCUVVzN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc1ZVRlRMME1zVFVGQlRTeFhRVUZYTEdsQ1FVRnBRaXhMUVVGTExHTkJRV01zUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVbG9SU3hOUVVGTkxHOUNRVUZ2UWl4RFFVRkRMRTlCUVhOQ0xHVkJRVEJETzBGQlFVRXNNRU5CUTJwRUxFMUJRVTBzUzBGQlN5eFBRVUZQTzBGQlFVRXNaME5CUXpWQ0xGZEJRVmNzVFVGQlRUdEJRVUZCTERSQ1FVTnlRaXhOUVVGTkxGZEJRVmNzYVVKQlFXbENMRWRCUVVjc1EwRkJRenRCUVVGQkxHZEVRVU5zUWl4aFFVRmhMSGRDUVVGM1FpeExRVUZMTEZkQlFWY3NUVUZCVFN4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVTgxUnl4TlFVRk5MRFJDUVVOR0xFTkJRVU1zVDBGQmMwSXNXVUZCYjBJc1ZVRkJhMElzWjBKQlEzcEVMRTFCUVUwc1QwRkJUeXhqUVVGak8wRkJRVUVzVFVGRE4wSXNUVUZCVFN4WFFVRlhMR2xDUVVGcFFpeFpRVUZaTEZOQlFWTXNRMEZCUXp0QlFVRkJMRTFCUTNoRUxFMUJRVTBzVjBGQlZ5eHBRa0ZCYVVJc1ZVRkJWU3hQUVVGUExFTkJRVU03UVVGQlFTeEpRVVYyUWp0QlFVVnVReXhOUVVGTkxIZENRVU5HTEVOQlFVTXNUMEZCYzBJc1VVRkJkVUlzV1VGQkswSXNhMEpCUXpWRkxIVkNRVUYxUXp0QlFVTjBReXhqUVVGTkxGTkJRVk03UVVGRFppeGpRVUZOTEVOQlFVTXNWVUZCVlN4WFFVRlhMRlZCUVZVc1ZVRkJWU3hKUVVNMVF5eFhRVUZYTEZkQlFWY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhIUVVGSExFVkJRVVVzU1VGQlN5eFRRVUZUTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXp0QlFVTnVSaXhqUVVGTkxGRkJRVkVzVFVGQlRTeExRVUZMTzBGQlEzcENMR1ZCUVU4N1FVRkJRU3gzUlVGRE1rUXNTMEZCU3p0QlFVRkJMREpDUVVOc1JDeE5RVUZOTEV0QlFVc3NUMEZCVHp0QlFVRkJMRkZCUTNKRExFMUJRVTBzVjBGQlZ5eHBRa0ZCYVVJc1YwRkJWeXh0UWtGQmJVSXNWMEZCVnl4VFFVRlRMRU5CUVVNc1VVRkJVU3hEUVVGRE8wRkJRVUVzVVVGRE9VWXNUVUZCVFN4WFFVRlhMR2xDUVVGcFFpeFZRVUZWTEcxQ1FVRnRRaXhYUVVGWExGRkJRVkVzUTBGQlF5eFJRVUZSTEVOQlFVTTdRVUZCUVN4UlFVTTFSaXd3UWtGQk1FSXNUMEZCVHl4WlFVRlpMRlZCUVZVc1EwRkJReXhEUVVGRE8wRkJRVUVzWlVGRGJFUXNUVUZCVFN4aFFVRmhMR1ZCUVdVc1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFTd3JRMEZIU0N4UFFVRlBMRXRCUVVzc1QwRkJUeXhSUVVGUkxFdEJRVXM3UVVGQlFUdEJRVUZCTEdkQ1FVVXZSQ3hMUVVGTExITkNRVUZ6UWl4VFFVRlRPMEZCUVVFc1owSkJRM0JETEV0QlFVc3NjMEpCUVhOQ0xGRkJRVkU3UVVGQlFTeFJRVVY2UXl4dFFrRkRTU3g1UWtGQmVVSXNWMEZCVnl4VFFVRlRMRU5CUVVNc09FSkJRVGhDTEZkQlFWY3NVVUZCVVN4RFFVRkRPMEZCUVVFc2FVSkJRemRHTEd0Q1FVRnJRanRCUVVGQkxGZEJSWEpDTEVWQlFVVTdRVUZCUVN3NFFrRkRZeXhYUVVGWExGTkJRVk1zUTBGQlF6dEJRVUZCTERoQ1FVTnlRaXhYUVVGWExGRkJRVkVzUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc01rSkJTM1pDTEZkQlFWY3NVMEZCVXl4SlFVRkpMSFZDUVVGMVFpeFZRVUZWTEU5QlFVOHNSMEZCUnp0QlFVRkJMREJDUVVOd1JTeFhRVUZYTEZOQlFWTXNTVUZCU1N4MVFrRkJkVUlzVVVGQlVTeFBRVUZQTEVkQlFVYzdRVUZCUVN4cFFrRkRNVVVzUzBGQlN6dEJRVUZCTEdsQ1FVTk1MRXRCUVVzN1FVRkJRU3hwUWtGRFRDeExRVUZMTzBGQlFVRXNhVUpCUTB3c1MwRkJTenRCUVVGQkxHbENRVU5NTEV0QlFVc3NaMEpCUVdkQ0xFdEJRVXM3UVVGQlFTeHBRa0ZETVVJc1MwRkJTeXhWUVVGVkxFdEJRVXM3UVVGQlFTeHBRa0ZEY0VJc1MwRkJTeXhuUWtGQlowSXNTMEZCU3p0QlFVRkJMR2xDUVVNeFFpeExRVUZMTEZWQlFWVXNTMEZCU3p0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc1RVRlhha003UVVGRlNpeE5RVUZOTEhWQ1FVTkdMRU5CUVVNc1QwRkJjMElzVVVGQmRVSXNXVUZCSzBJc1lVRkROVVVzVVVGQk1rSXNTMEZCZDBJc1lVRkJjVUlzYTBKQlEzaEZMRzlDUVVFMFFpeHRRa0ZCYjBNN1FVRkRMMFFzWTBGQlRTeFBRVUZQTEZkQlFWY3NWMEZCVnp0QlFVTnVReXhqUVVGTkxGTkJRVk03UVVGRFppeGpRVUZOTEVOQlFVTXNWMEZCVnl4UlFVRlJMRWxCUVVrc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF6dEJRVU55UlN4alFVRk5MRkZCUVZFc1RVRkJUU3hMUVVGTE8wRkJRM3BDTEdOQlFVMHNiVU5CUVcxRExFTkJRVU1zVVVGQmQwSTdRVUZEYUVVc1owSkJRVTBzV1VGQldTeFJRVUZSTEZsQlFWa3NVVUZCVVR0QlFVTTVReXhwUWtGQlR6dEJRVUZCTEZkQlEwb3NVMEZCVXl4eFEwRkJjVU1zVFVGQlRTeExRVUZMTEU5QlFVOHNjVUpCUXk5RUxFOUJRVThzUzBGQlN5eFBRVUZQTEZGQlFWRXNTMEZCU3p0QlFVRkJMRFpDUVVObUxFOUJRVThzVjBGQlZ5eHJRa0ZCYTBJc1IwRkJSeXhEUVVGRE8wRkJRVUVzTWtKQlF6RkRMRXRCUVVzc0swUkJRU3RFTEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUVVFc1ZVRkRhRWNzV1VGQldTeEhRVUZITEVOQlFVTXNTMEZCU3l4WFFVRlhMRWRCUVVjc1EwRkJReXhMUVVGTExFbEJRVWtzUjBGQlJ5eERRVUZETEV0QlFVc3NTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hYUVVGWExFMUJRVTA3UVVGQlFTeG5RMEZETDBRc1MwRkJTenRCUVVGQk8wRkJRVUU3UVVGQlFTeGpRVWQyUWl4blFrRkJaMElzTUVOQlFUQkRMRmRCUVZjc1IwRkJSeXhEUVVGRE8wRkJRVUVzYlVKQlEzQkZMR3RDUVVGclFqdEJRVUZCTzBGQlFVRXNNRUpCUlZnc1MwRkJTeXhuUWtGQlowSXNTMEZCU3p0QlFVRkJPMEZCUVVFc1owSkJSWEJETEZOQlFWTXNTMEZCU3l4TFFVRkxMRzlDUVVGdlFpeExRVUZMTzBGQlFVRXNaMEpCUXpWRExGTkJRVk1zVjBGQlZ5eFRRVUZUTEU5QlFVOHNWMEZCVnl4SFFVRkhMRU5CUVVNN1FVRkJRU3hsUVVOd1JDeE5RVUZOTzBGQlExZ3NaMEpCUVVrc1owSkJRV2RDTzBGQlEyeENMSEZDUVVGUE8wRkJRVUU3UVVGQlFTeFpRVVZVTEZkQlFWY3NhMEpCUVd0Q08wRkJRek5DTEhGQ1FVRlBMRlZCUVZVc2EwSkJRV3RDTzBGQlFVRXNXVUZEY2tNc1QwRkJUenRCUVVOTUxIRkNRVUZQTEVkQlFVY3NVMEZCVXl4cFFrRkJhVUlzVTBGQlV5eExRVUZMTEZkQlFWY3NSMEZCUnl4RFFVRkRPMEZCUVVFc1dVRkRia1U3UVVGQlFTeFZRVU5HTEVkQlFVY3NRMEZCUXp0QlFVRkJPMEZCUVVFc2EwTkJSWE5DTEUxQlFVMHNTMEZCU3l4UFFVRlBPMEZCUVVFc1dVRkRlRU1zVFVGQlRTeFhRVUZYTEhOQ1FVRnpRaXhMUVVGTExFOUJRVThzVTBGQlV5eEhRVUZITEVOQlFVTTdRVUZCUVN3d1FrRkZhRVVzVVVGQlVTeFpRVUZaTEUxQlFVMHNZVUZCWVN4dlFrRkJiMElzU1VGRGRrTXNNa1JCUVRKRU8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNVVUZKY2tZN1FVRkZRU3hsUVVGUE8wRkJRVUVzVFVGRFVDeHBRMEZCYVVNc1UwRkJVeXhEUVVGRE8wRkJRVUVzVFVGRE0wTXNhVU5CUVdsRExGRkJRVkVzUTBGQlF6dEJRVUZCTEhGRFFVTllMRXRCUVVzc1kwRkJZeXhMUVVGTE8wRkJRVUU3UVVGQlFTeDNRa0ZGY2tNc1MwRkJTeXhuUWtGQlowSXNTMEZCU3p0QlFVRkJMSGRDUVVNeFFpeExRVUZMTzBGQlFVRXNkMEpCUTB3c1MwRkJTenRCUVVGQkxIVkNRVU5PTEV0QlFVczdRVUZCUVN4dlFrRkRVaXhYUVVGWExIZENRVUYzUWl4WFFVRlhMSGxDUVVONFJDeFhRVUZYTEhsQ1FVRjVRaXhYUVVGWE8wRkJRVUVzYjBKQlEzSkRMRmRCUVZjc2JVSkJRVzFDTEZkQlFWYzdRVUZCUVN4dlFrRkRla01zVjBGQlZ5d3lRa0ZCTWtJc1YwRkJWenRCUVVGQkxHOUNRVU5xUkN4WFFVRlhMSGxDUVVGNVFpeFhRVUZYTERCQ1FVTjZSQ3hYUVVGWExEQkNRVUV3UWl4WFFVRlhPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzY1VOQlNYSkNMRXRCUVVzc2MwSkJRWE5DTEV0QlFVc3NXVUZCV1N4TFFVRkxPMEZCUVVFc2IwSkJRMnhGTEV0QlFVczdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3cwUTBGSmJVSXNUMEZCVHl4TFFVRkxMRTlCUVU4c1VVRkJVU3hMUVVGTE8wRkJRVUVzZVVKQlEyNUVMRTFCUVUwc1MwRkJTeXhQUVVGUE8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNUVUZKZGtNN1FVRkZTaXhOUVVGTkxIbENRVU5HTEVOQlFVTXNUMEZCYzBJc1VVRkJkVUlzV1VGQkswSXNhMEpCUXpWRkxIVkNRVUYxUXp0QlFVTjBReXhqUVVGTkxGTkJRVk03UVVGRFppeGpRVUZOTEVOQlFVTXNWVUZCVlN4VlFVRlZMRmRCUVZjc1ZVRkJWU3hWUVVGVkxFbEJRM1JFTEZkQlFWY3NWMEZCVnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVsQlFVc3NVMEZCVXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRE8wRkJRelZHTEdOQlFVMHNVVUZCVVN4TlFVRk5MRXRCUVVzN1FVRkRla0lzWlVGQlR6dEJRVUZCTEhkR1FVTXlSU3hMUVVGTE8wRkJRVUVzTWtKQlEyeEZMRTFCUVUwc1MwRkJTeXhQUVVGUE8wRkJRVUVzVVVGRGNrTXNUVUZCVFN4WFFVRlhMR2xDUVVGcFFpeFZRVUZWTEhGQ1FVRnhRaXhYUVVGWExGRkJRVkVzUTBGQlF5eFJRVUZSTEVOQlFVTTdRVUZCUVN4UlFVTTVSaXhOUVVGTkxGZEJRVmNzYVVKQlFXbENMRmRCUVZjc2MwSkJRWE5DTEZkQlFWY3NVMEZCVXl4RFFVRkRMRkZCUVZFc1EwRkJRenRCUVVGQkxGRkJRMnBITEUxQlFVMHNWMEZCVnl4cFFrRkJhVUlzVlVGQlZTeHhRa0ZCY1VJc1YwRkJWeXhSUVVGUkxFTkJRVU1zVVVGQlVTeERRVUZETzBGQlFVRXNVVUZET1VZc01FSkJRVEJDTEU5QlFVOHNXVUZCV1N4VlFVRlZMRU5CUVVNc1EwRkJRenRCUVVGQkxHVkJRMnhFTEUxQlFVMHNZVUZCWVN4bFFVRmxMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJRVUVzWjBSQlIwWXNUMEZCVHl4TFFVRkxMRTlCUVU4c1VVRkJVU3hMUVVGTE8wRkJRVUU3UVVGQlFTeHJRa0ZGT1VRc1MwRkJTeXh6UWtGQmMwSXNVVUZCVVR0QlFVRkJMRzFDUVVOc1F5eExRVUZMTEhOQ1FVRnpRaXhUUVVGVE8wRkJRVUVzYTBKQlEzSkRMRXRCUVVzc2MwSkJRWE5DTEZGQlFWRTdRVUZCUVN4UlFVVXpReXh0UWtGQmJVSXNOa0pCUVRaQ0xGZEJRVmNzVVVGQlVTeERRVUZETEc5RFFVTTNReXhYUVVGWExGTkJRVk1zUTBGQlF5eHJRMEZCYTBNc1YwRkJWeXhSUVVGUkxFTkJRVU03UVVGQlFTeGxRVU0zUml4clFrRkJhMEk3UVVGQlFTeGhRVVZLTEVWQlFVVTdRVUZCUVR0QlFVRkJMR2REUVVWRExGZEJRVmNzVVVGQlVTeERRVUZETzBGQlFVRXNiME5CUTJoQ0xGZEJRVmNzVTBGQlV5eERRVUZETzBGQlFVRXNhME5CUTNaQ0xGZEJRVmNzVVVGQlVTeERRVUZETzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzTWtKQlR6TkNMRmRCUVZjc1UwRkJVeXhKUVVGSkxIVkNRVUYxUWl4VlFVRlZMRTlCUVU4c1IwRkJSenRCUVVGQkxEQkNRVU53UlN4WFFVRlhMRk5CUVZNc1NVRkJTU3gxUWtGQmRVSXNVVUZCVVN4UFFVRlBMRWRCUVVjN1FVRkJRVHRCUVVGQkxHdENRVVY2UlN4TFFVRkxPMEZCUVVFc2EwSkJRMHdzUzBGQlN6dEJRVUZCTEd0Q1FVTk1MRXRCUVVzN1FVRkJRU3hyUWtGRFRDeExRVUZMTzBGQlFVRXNhMEpCUTB3c1MwRkJTenRCUVVGQkxHdENRVU5NTEV0QlFVczdRVUZCUVN4clFrRkRUQ3hMUVVGTE8wRkJRVUVzYTBKQlEwd3NTMEZCU3p0QlFVRkJMR2xDUVVOT0xFdEJRVXNzYTBKQlFXdENMRXRCUVVzN1FVRkJRU3hwUWtGRE5VSXNTMEZCU3l4VlFVRlZMRXRCUVVzN1FVRkJRU3hwUWtGRGNFSXNTMEZCU3l4dFFrRkJiVUlzUzBGQlN6dEJRVUZCTEdsQ1FVTTNRaXhMUVVGTExGVkJRVlVzUzBGQlN6dEJRVUZCTEdsQ1FVTndRaXhMUVVGTExHdENRVUZyUWl4TFFVRkxPMEZCUVVFc2FVSkJRelZDTEV0QlFVc3NWVUZCVlN4TFFVRkxPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNUVUZuUW1wRE8wRkJSVW9zVFVGQlRTd3dRa0ZEUml4RFFVRkRMR0ZCUVhsQ0xGbEJRVGhDTEdOQlFYTkNMR0ZCUXpkRkxFOUJRVEJDTEdGQlFUWkRPMEZCUTNSRkxHTkJRVTBzWVVGQllTeFpRVUZaTzBGQlF5OUNMR05CUVUwc1RVRkJUU3hWUVVGVkxGVkJRVlVzVjBGQlZ5eE5RVUZOTEZkQlFWY3NUVUZCVFR0QlFVVnNSU3haUVVGSkxHTkJRV01zWjBKQlFXZENMRmxCUVZrc1lVRkJZU3hQUVVGUExGZEJRVmNzU1VGQlNUdEJRVU5xUml4WlFVRkpMRk5CUVZNc1dVRkJXU3hOUVVGTk8wRkJReTlDTEZsQlFVa3NXVUZCV1N4WFFVRlhMRWRCUVVjN1FVRkROVUlzYlVKQlFWTXNWMEZCVnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhWUVVGVkxGVkJRVlVzU1VGQlNTeEpRVUZOTEZsQlFWa3NTMEZCU3l4SlFVRkpMRXRCUVVzN1FVRkRlRVlzWTBGQlNTeFhRVUZYTERCQ1FVRXdRaXhYUVVGWE8wRkJRMnhFTERCQ1FVRmpMR3RDUVVGclFpeFpRVUZaTEZGQlFWRXNWVUZCVlR0QlFVRkJMRlZCUTJoRk8wRkJRVUVzVVVGRFJqdEJRVU5CTEdOQlFVMHNVMEZCVXl4bFFVRmxMRlZCUVZVc1dVRkJXU3hWUVVGVkxGbEJRVmtzVFVGQlRUdEJRVU5vUml4alFVRk5MRkZCUVZFc1kwRkJZeXhUUVVGVExGbEJRVmtzVlVGQlZTeFhRVUZYTEUxQlFVMDdRVUZETlVVc1kwRkJUU3hoUVVGaExGVkJRVlVzUzBGQlN5eFhRVUZYTzBGQlF6ZERMR05CUVUwc1ZVRkJWU3hYUVVGWExGZEJRVmNzV1VGQldTeFZRVUZWTEZkQlFWY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJUU3hOUVVGTkxGbEJRVmtzUTBGQlF5eERRVUZETzBGQlF6TkhMR05CUVUwc2JVSkJRVzFDTEZkQlFWY3NORUpCUVRSQ08wRkJRMmhGTEdOQlFVMHNjVUpCUVhGQ0xGZEJRVmM3UVVGRGRFTXNZMEZCVFN4WFFVRlhMRTFCUVUwc1MwRkJTenRCUVVNMVFpeGpRVUZOTEd0Q1FVRnJRaXhEUVVGRExHbENRVUVyUWp0QlFVRkJMRkZCUTNSRUxGVkJRVlVzUzBGQlN6dEJRVUZCTEZGQlEyWXNNa05CUVRKRExGZEJRVmNzZVVKQlFYbENMRkZCUVZFc1EwRkJRenRCUVVGQkxGTkJRM1pHTEUxQlFVMDdRVUZEVUN4clFrRkJVU3hYUVVGWExFMUJRVTA3UVVGQlFTeFpRVU4yUWl4TFFVRkxPMEZCUTBnc2NVSkJRVTg3UVVGQlFTeG5Ra0ZEU0N4clFrRkJhMElzVDBGQlR5eFZRVUZWTEVOQlFVTTdRVUZCUVN4blFrRkRjRU1zTkVKQlFUUkNMRmRCUVZjc1lVRkJZU3hqUVVGakxGRkJRVkVzUTBGQlF6dEJRVUZCTEdkQ1FVVXpSVHRCUVVGQkxHZENRVU5KTzBGQlFVRXNaMEpCUVU4N1FVRkJRU3huUWtGQlVUdEJRVUZCTEdkQ1FVRlpPMEZCUVVFc1owSkJRV0VzVDBGQlR6dEJRVUZCTEdkQ1FVRlJMRWxCUVVrN1FVRkJRU3huUWtGQlVUdEJRVUZCTEdOQlFXZENMRU5CUVVNN1FVRkJRVHRCUVVGQkxGbEJSVGxHTEV0QlFVczdRVUZEU0N4eFFrRkJUenRCUVVGQkxHZENRVU5JTERCRFFVRXdReXhSUVVGUkxGbEJRVmtzWVVGQllTeFBRVUZQTEZGQlFWRXNTVUZCU1N4TlFVRk5MRU5CUVVNN1FVRkJRU3hwUWtGRGNFY3NUVUZCVFR0QlFVTlVMRzlDUVVGSkxGZEJRVmNzVjBGQlZ5eExRVUZMTEZkQlFWY3NWMEZCVnl4SFFVRkhPMEZCUTNSRUxIbENRVUZQTEVkQlFVY3NjMEpCUVhOQ0xFOUJRVThzVVVGQlVTeFpRVUZaTEd0Q1FVRnJRaXhyUWtGQmEwSXNRMEZCUXp0QlFVRkJMR2RDUVVOc1J5eFhRVUZYTEZkQlFWY3NWMEZCVnl4TFFVRkxMRmRCUVZjc1YwRkJWeXhIUVVGSE8wRkJRemRFTEhsQ1FVRlBMRWRCUVVjc2RVSkJRWFZDTEU5QlFVOHNVVUZCVVN4WlFVRlpMR3RDUVVGclFpeHJRa0ZCYTBJc1EwRkJRenRCUVVGQkxHZENRVU51Unl4UFFVRlBPMEZCUTB3c2QwSkJRVTBzVFVGQlRTeHJSa0ZCYTBZN1FVRkJRU3huUWtGRGFFYzdRVUZCUVN4alFVTkdMRWRCUVVjc1EwRkJRenRCUVVGQk8wRkJRVUVzV1VGRlRpeExRVUZMTzBGQlEwZ3NjVUpCUVU4N1FVRkJRU3hsUVVOS0xFMUJRVTA3UVVGRFVDeHZRa0ZCU1N4WFFVRlhMRmRCUVZjc1MwRkJTeXhYUVVGWExGZEJRVmNzUjBGQlJ6dEJRVU4wUkN4NVFrRkJUeXhIUVVOSU8wRkJRVUVzYjBKQlEwazdRVUZCUVN4dlFrRkJUenRCUVVGQkxHOUNRVUZSTzBGQlFVRXNiMEpCUVZrN1FVRkJRU3h2UWtGQllUdEJRVUZCTEc5Q1FVRlJPMEZCUVVFc2IwSkJRVXNzVjBGQlZ6dEJRVUZCTEc5Q1FVRmhPMEZCUVVFc2IwSkJRemRGTEZkQlFWYzdRVUZCUVN4dlFrRkJiMElzVjBGQlZ6dEJRVUZCTEd0Q1FVRmpMRU5CUVVNN1FVRkJRU3huUWtGRGJrVXNUMEZCVHp0QlFVTk1MSGRDUVVGTkxFMUJRVTBzTWtWQlFUSkZPMEZCUVVFc1owSkJRM3BHTzBGQlFVRXNZMEZEUml4SFFVRkhMRU5CUVVNN1FVRkJRVHRCUVVGQkxGbEJSVTQ3UVVGRFJTeHZRa0ZCVFN4TlFVRk5MSEZDUVVGeFFqdEJRVUZCTEZWQlEzSkRPMEZCUVVFc1VVRkRSaXhIUVVGSExFTkJRVU03UVVGQlFTeFBRVU5JTzBGQlFVRXNVVUZGUnl4aFFVRmhMR2RDUVVGblFpeGxRVUZsTEV0QlFVc3NSVUZETlVNc1owSkJRV2RDTEZWQlFWVXNUMEZCVHl4UFFVRlBMRTFCUVUwc1JVRkRPVU1zWjBKQlFXZENMRTlCUVU4c1QwRkJUeXhKUVVGSkxFMUJRVTBzUlVGRGVFTXNhVUpCUVdsQ0xFOUJRVThzVFVGQlRTeERRVUZETzBGQlFVRXNVVUZEZEVNc1lVRkJZU3hWUVVGVkxFTkJRVU03UVVGQlFTeFZRVU4wUWl4aFFVRmhMSE5EUVVGelF5eHpRa0ZCYzBJc1EwRkJRenRCUVVGQkxGVkJRekZGTEZWQlFWVXNORU5CUVRSRE8wRkJRVUVzSzBKQlEycERMRTlCUVU4c1owSkJRV2RDTEZsQlFWa3NRMEZCUXp0QlFVRkJMRFpDUVVOMFF5eE5RVUZOTEV0QlFVc3NUMEZCVHp0QlFVRkJMRmRCUTNCRExFMUJRVTA3UVVGRFZDeHJRa0ZCVVN4WFFVRlhMRTFCUVUwN1FVRkJRU3haUVVOMlFpeExRVUZMTzBGQlEwZ3NjVUpCUVU4N1FVRkJRVHRCUVVGQkxIbERRVVZ6UWl4TlFVRk5MR0ZCUVdFc1pVRkJaU3hEUVVGRE8wRkJRVUU3UVVGQlFTeDVRMEZGYmtNc1YwRkJWeXhyUWtGQmEwSTdRVUZCUVR0QlFVRkJMRmxCUlRWRUxFdEJRVXM3UVVGRFNDeHhRa0ZCVHl4M1FrRkRSaXhYUVVGWExGZEJRVmNzUzBGQlN5eFhRVUZYTEZkQlFWY3NTVUZCU3l3d1FrRkRRU3gzUWtGQmQwSTdRVUZCUVN4WlFVTnlSaXhMUVVGTE8wRkJRMGdzY1VKQlFVODdRVUZCUVN4WlFVTlVPMEZCUTBVc2IwSkJRVTBzVFVGQlRTdzBRa0ZCTkVJc1YwRkJWeXhKUVVGSkxFVkJRVVU3UVVGQlFTeFZRVU0zUkR0QlFVRkJMRkZCUTBZc1IwRkJSeXhEUVVGRE8wRkJRVUVzUTBGRFZEdEJRVUZCTzBGQlIwc3NaVUZCVHp0QlFVRkJMRlZCUTB3c1RVRkJUVHRCUVVGQkxGVkJRMDRzWVVGQllUdEJRVUZCTEZsQlExZ3NUVUZCVFN4SFFVRkhMRmRCUVZjc1VVRkJVU3hKUVVGSkxGbEJRVmtzU1VGQlNTeFBRVUZQTEZOQlFWTXNTVUZCU1N4VFFVRlRMRVZCUVVVc1NVRkRNMFVzVFVGQlRTeFRRVUZUTEVsQlFVa3NVVUZCVVN4RlFVRkZMRWxCUVVrc1NVRkJTU3hUUVVGVExFbEJRVWtzVFVGQlRTeEZRVUZGTEVsQlFVa3NUMEZCVHl4SlFVRkpMRlZCUVZVN1FVRkJRU3haUVVOMlJpeHRRa0ZCYlVJc1EwRkJReXhOUVVGTk8wRkJRVUVzVlVGRE5VSTdRVUZCUVN4VlFVTkJPMEZCUVVFc1ZVRkRRU3haUVVGWkxFOUJRVTg3UVVGQlFTeFpRVU5xUWl4VFFVRlRMRU5CUVVNc1JVRkJReXhOUVVGTkxHRkJRV0VzVlVGQlZTeFpRVUZaTEZOQlFWRXNRMEZCUXp0QlFVRkJMRmxCUXpkRUxHVkJRV1VzUlVGQlF5eEhRVUZITEV0QlFVczdRVUZCUVN4alFVRkxMR0ZCUVdFN1FVRkJRVHRCUVVGQkxGbEJRWFZDTEVWQlFVTTdRVUZCUVN4WlFVTnNSU3hwUWtGQmFVSTdRVUZCUVN4alFVTm1MRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNWMEZCVlR0QlFVRkJMR05CUVVjc1JVRkJReXh4UWtGQmMwSXNUVUZCVFN4UFFVRk5PMEZCUVVFc1kwRkRPVVVzUlVGQlF5eHhRa0ZCYzBJc1RVRkJUU3hKUVVGSE8wRkJRVUVzWTBGQlJ5eEhRVUZITERKQ1FVRXlRaXhaUVVGWkxGZEJRVmM3UVVGQlFTeFpRVU14Ump0QlFVRkJMRlZCUTBZN1FVRkJRU3hSUVVOR08wRkJRVUVzVFVGRFJqdEJRVVZLTEUxQlFVMHNjME5CUVhORExFTkJRVU1zV1VGQmIwTTdRVUZETDBVc1kwRkJUU3h0UWtGQmJVSXNVVUZCVVR0QlFVTnFReXhqUVVGTkxIRkNRVUZ4UWl4SlFVRkpMRmxCUVZrc2EwSkJRV3RDTEdsQ1FVRnBRaXhaUVVGWkxFTkJRVU03UVVGRE0wWXNZMEZCVFN4bFFVRmxMRzFDUVVGdFFpeERRVUZETzBGQlEzcERMR1ZCUVU4N1FVRkJRU3hOUVVOVU8wRkJSVThzVFVGQlRTeFRRVUZUTEVOQlFVTXNVMEZCZVVJc1pVRkJkVU03UVVGRGNrWXNZMEZCVFN4VFFVRnRRaXhEUVVGRE8wRkJRekZDTEdOQlFVMHNVVUZCYTBJc1EwRkJRenRCUVVONlFpeGpRVUZOTEUxQlFXZENMRU5CUVVNN1FVRkxka0lzWTBGQlRTeGxRVUZsTEc5RFFVRnZReXhQUVVGUE8wRkJRMmhGTEZsQlFVa3NWMEZCVnl4alFVRmpMRWRCUVVjN1FVRkRPVUlzWjBKQlFVMHNUVUZCVFN3MlJFRkJOa1E3UVVGQlFTeFJRVU16UlR0QlFVTkJMRkZCUVVGQkxHbENRVUZsTEZGQlFWRXNVVUZCVVN4WlFVRlpMR05CUVdNc1VVRkJVU3hQUVVGUExFZEJRVWM3UVVGRE0wVXNaMEpCUVZFN1FVRkJRU3hWUVVOS0xIZENRVUYzUWl4UlFVRlJMRTlCUVU4c1EwRkJReXhIUVVGSExGbEJRVmtzWTBGQll5eFJRVUZSTEU5QlFVOHNSMEZCUnp0QlFVRkJMRlZCUVVjc1JVRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVUZETzBGQlFVRXNVVUZCUXp0QlFVRkJMRTFCUXpkSE8wRkJSVThzVFVGQlRTeDNRa0ZCZDBJc1EwRkJReXhsUVVFd1JEdEJRVU01Uml4alFVRk5MRmxCUVZrc1YwRkJWenRCUVVNM1FpeGpRVUZOTEU5QlFVOHNWMEZCVnp0QlFVTjRRaXhqUVVGTkxEQkNRVU5HTEZkQlFWYzdRVUZEWml4alFVRk5MR05CUVdNc1YwRkJWenRCUVVNdlFpeGpRVUZOTEdsQ1FVRnBRaXhYUVVGWExHMUNRVUUyUWp0QlFVTXZSQ3hqUVVGTkxIRkNRVUZ4UWl4WFFVRlhPMEZCUTNSRExHTkJRVTBzZDBKQlFTdERMRmRCUVZjN1FVRkRhRVVzWTBGQlRTeFBRVUZoTEZkQlFWYzdRVUZGT1VJc1kwRkJUU3hqUVVFMFFpeFhRVUZYTEdkQ1FVRm5RaXhMUVVGTExGZEJRVmNzVjBGQlZ6dEJRVU40Uml4bFFVRlBMRFJDUVVFMFFqdEJRVUZCTEZWQlEycERPMEZCUVVFc1ZVRkRRVHRCUVVGQkxGVkJRMEU3UVVGQlFTeFZRVU5CTzBGQlFVRXNWVUZEUVR0QlFVRkJMRlZCUTBFN1FVRkJRU3hWUVVOQk8wRkJRVUVzVlVGRFFUdEJRVUZCTEZWQlEwRTdRVUZCUVN4UlFVTkdMRU5CUVVNN1FVRkJRU3hOUVVOSU8wRkJRVUU3UVVGQlFUczdPMEZETVhKQ1FTeE5RV3RDVFVNc2EwSkJjVVJCTEd0RFFTdEdUenRCUVhSTFlqdEJRVUZCTzBGQlFVRTdRVUZIUVR0QlFVVkJPMEZCUTBFN1FVRkhRVHRCUVZOQkxFMUJRVTFCTEcxQ1FVRnBRaXhEUVVGRExGRkJRU3RDTEdWQlFXZEVPMEZCUTNKSExHTkJRVTBzUTBGQlF5eFBRVUZQTEdGQlFXRXNWVUZCVlN4UlFVRlJMRWxCUVVrN1FVRkRha1FzWTBGQlRTeEZRVUZETEZWQlFWVXNiVUpCUVd0Q0xFbEJRVWs3UVVGRmRrTXNXVUZCU1N4TlFVRk5MRXRCUVVzc1YwRkJWeXhMUVVGTExFMUJRVTBzUzBGQlN5eFhRVUZYTEVkQlFVYzdRVUZEZEVRc1owSkJRVTBzU1VGQlNTeE5RVUZOTEhkRVFVRjNSQ3hOUVVGTkxFdEJRVXNzVFVGQlRTeEZRVUZGTzBGQlFVRXNVVUZETjBZN1FVRkRRU3haUVVGSkxFTkJRVU1zVlVGQlZTeFRRVUZUTEZsQlFWa3NUVUZCVFN4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzVTBGQlV5eFpRVUZaTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkRkRVlzV1VGQldTeExRVUZMTEZkQlFWY3NSMEZCUnp0QlFVTnFReXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNkVVZCUVhWRkxGbEJRVmtzUzBGQlN5eE5RVUZOTEVWQlFVVTdRVUZCUVN4UlFVTnNTRHRCUVVOQkxGbEJRVWtzVTBGQlV5eExRVUZMTEZkQlFWY3NSMEZCUnp0QlFVTTVRaXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNNa1JCUVRKRUxGTkJRVk1zUzBGQlN5eE5RVUZOTEVWQlFVVTdRVUZCUVN4UlFVTnVSenRCUVVOQkxGbEJRVWtzVTBGQlV5eExRVUZMTEZkQlFWY3NSMEZCUnp0QlFVTTVRaXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNNa1JCUVRKRUxGTkJRVk1zUzBGQlN5eE5RVUZOTEVWQlFVVTdRVUZCUVN4UlFVTnVSenRCUVVOQkxGbEJRVWtzUTBGQlF5eFZRVUZWTEZOQlFWTXNVMEZCVXl4TlFVRk5MRk5CUVZNc1NVRkJTU3hIUVVGSE8wRkJRM0pFTEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3gzUlVGQk5FVTdRVUZCUVN4UlFVTTVSanRCUVVWQkxGbEJRVWtzY1VKQlFYRkNMRXRCUVVzc1lVRkJZU3hIUVVGSE8wRkJRelZETEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3hwUlVGQmFVVTdRVUZCUVN4UlFVTnVSanRCUVVWQkxHTkJRVTBzV1VGQldTeE5RVUZOTEV0QlFVc3NRMEZCUXp0QlFVTTVRaXhqUVVGTkxHbENRVUZwUWl4TlFVRk5MRXRCUVVzc1RVRkJUU3hMUVVGTExGTkJRVk1zUTBGQlF6dEJRVU4yUkN4alFVRk5MRzlDUVVGdlFpeFRRVUZUTEV0QlFVc3NRMEZCUXp0QlFVTjZReXhqUVVGTkxHRkJRV0VzVlVGQlZTeHJRa0ZCYTBJc1RVRkJUU3hOUVVGTkxFTkJRVU1zU1VGQlNUdEJRVU5vUlN4alFVRk5MRmRCUVZjc2RVSkJRWFZDTEVsQlFVa3NVMEZCVXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hKUVVGSkxHRkJRV0U3UVVGRGFFWXNXVUZCU1N4eFFrRkJjVUlzVlVGQlZUdEJRVU5xUXl4blFrRkJUU3hKUVVGSkxFMUJRVTBzT0VSQlFUaEVPMEZCUVVFc1VVRkRhRVk3UVVGRlFTeFpRVUZKTEZsQlFWa3NTMEZCU3l4WFFVRlhMRWRCUVVjN1FVRkRha01zWTBGQlNTeGpRVUZqTEZsQlFWa3NTMEZCU3l4RFFVRkRMRWRCUVVjN1FVRkRja01zYTBKQlFVMHNTVUZCU1N4TlFVRk5MSE5GUVVGelJTeFpRVUZaTEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVVN1FVRkJRU3hWUVVNM1J6dEJRVU5CTEdOQlFVa3NiVUpCUVcxQ0xGbEJRVmtzUzBGQlN5eERRVUZETEVkQlFVYzdRVUZETVVNc2EwSkJRVTBzU1VGQlNTeE5RVUZOTERKRlFVRXlSU3haUVVGWkxFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVTdRVUZCUVN4VlFVTnNTRHRCUVVGQkxGRkJRMFk3UVVGRlFTeFpRVUZKTEZkQlFWY3NUVUZCVFN4VFFVRlRMRXRCUVVzc1EwRkJReXhMUVVGTExIRkNRVUZ4UWl4TlFVRk5MRk5CUVZNc1MwRkJTeXhEUVVGRExFZEJRVWM3UVVGRGNFWXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxHdEhRVU5hTEZOQlFWTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSVHRCUVVGQkxGRkJRM2hDTzBGQlJVRXNXVUZCU1N4cFFrRkJhVUlzYlVKQlFXMUNPMEZCUTNSRExHZENRVUZOTEVsQlFVa3NUVUZCVFN4blJrRkJaMFk3UVVGQlFTeFJRVU5zUnp0QlFVRkJMRTFCUTBZN1FVRkZRU3hOUVVGTkxHMURRVU5HTEVOQlFVTXNVVUZCSzBJc1pVRkJkVVE3UVVGRGNrWXNZMEZCVFN4RlFVRkRMR0ZCUVdFc1ZVRkJWU3h2UWtGQmIwSXNUVUZCU3l4SlFVRkpPMEZCUXpORUxHTkJRVTBzV1VGQldTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNN1FVRkRiRU1zWTBGQlRTeGpRVUZqTEZWQlFWVXNhMEpCUVd0Q0xFOUJRVThzUTBGQlF5eEZRVUZGTEUxQlFVMHNRMEZCUXp0QlFVTnFSU3hqUVVGTkxHbENRVUZwUWl4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NVMEZCVXl4RFFVRkRPMEZCUXk5RUxHTkJRVTBzWVVGQllTeGpRVUZqTzBGQlEycERMR05CUVUwc2VVSkJRWGxDTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJRenRCUVVNdlF5eGpRVUZOTEZkQlFWY3NkVUpCUVhWQ0xFbEJRVWtzZVVKQlFYbENMRWxCUVVrc1lVRkJZVHRCUVV0MFJpeGpRVUZOTEdOQlEwWXNTVUZCU1N4TlFVRmpMRmRCUVZjc1owSkJRV2RDTEdGQlFXRXNWVUZCVlN4WFFVRlhMSE5DUVVGelFqdEJRVU42Unl4alFVRk5MR2RDUVVGblFpeFZRVUZWTEdWQlFXVXNWMEZCVnp0QlFVVXhSQ3hqUVVGTkxHdENRVUZ2UXp0QlFVRkJMRlZCUTNoRExFVkJRVU1zY1VKQlFYTkNMRTFCUVUwc1RVRkJTenRCUVVGQkxGVkJRMnhETEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzV1VGQlZ6dEJRVUZCTEZWQlEzcERMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNZMEZCWVR0QlFVRkJPMEZCUVVFN1FVRkJRU3hWUVVrelF5eEhRVUZKTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1YwRkJWeXhKUVVOMFFpeEpRVUZKTEUxQlFYTkNMRVZCUVVNc2RVSkJRWFZDTEUxQlFVMHNRMEZCUXl4aFFVRmhMRmxCUVZrc1ZVRkJWU3hEUVVGRExFVkJRVU1zUTBGQlF5eEpRVU12Uml4RFFVRkRPMEZCUVVFc1ZVRkRWQ3hIUVVGSkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NWMEZCVnl4SlFVTjBRaXhKUVVGSk8wRkJRVUVzV1VGRFFTeEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxFTkJRVU1zWVVGQllTeFZRVUZWTEdsQ1FVRnBRaXhWUVVGVkxFTkJRVU1zUlVGQlF6dEJRVUZCTEZWQlFVTXNTVUZEZUVZc1EwRkJRenRCUVVGQkxGVkJSVlFzUjBGQlJ5d3lRa0ZCTWtJc1QwRkJUeXhEUVVGRExFVkJRVVVzVFVGQlRTeFBRVUZQTEVOQlFVTXNSVUZCUlN4TlFVRk5MRTlCUVU4c1EwRkJReXhGUVVGRkxFMUJRVTBzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4UFFVRlBMRU5CUVVNc1JVRkJSU3hKUVVGSk8wRkJRVUVzVVVGRE9VYzdRVUZGUVN4alFVRk5MR3RDUVVGclFpeERRVUZETEdsQ1FVRXJRanRCUVVOMFJDeG5Ra0ZCVFN4UlFVRlJMR05CUVdNc1UwRkJVeXhQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1RVRkJUVHRCUVVNNVJTeG5Ra0ZCVFN4alFVRmpMR05CUVdNc1owSkJRV2RDTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eE5RVUZOTzBGQlF6TkdMR2RDUVVGTkxGZEJRVmNzWTBGQll5eGhRVUZoTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eE5RVUZOTzBGQlEzSkdMR2RDUVVGTkxGZEJRVmNzWTBGQll5eGhRVUZoTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eE5RVUZOTzBGQlEzSkdMR2RDUVVGTkxGTkJRVk1zWlVGQlpTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eE5RVUZOTzBGQlJXcEdMSFZDUVVGaExHbENRVUZwUWp0QlFVRkJMRmxCUXpWQ0xFVkJRVU1zVFVGQlRTeFRRVUZUTEUxQlFVMHNUVUZCU3p0QlFVRkJMRmxCUXpOQ0xFVkJRVU1zVFVGQlRTeG5Ra0ZCWjBJc1RVRkJUU3hQUVVGUExGRkJRVkVzV1VGQldTeFBRVUZOTzBGQlFVRXNXVUZET1VRc1JVRkJReXhOUVVGTkxHdENRVUZyUWl4TlFVRk5MRTlCUVU4c1VVRkJVU3hqUVVGakxFOUJRVTA3UVVGQlFTeFpRVU5zUlN4RlFVRkRMRTFCUVUwc2QwSkJRWGRDTEUxQlFVMHNUMEZCVHl4UlFVRlJMR05CUVdNc1QwRkJUVHRCUVVGQkxGVkJRekZGTEVOQlFVTTdRVUZGUkN4cFFrRkJUenRCUVVGQkxGVkJRMHdzWVVGQllTeHBRa0ZCYVVJc1QwRkJUeXhoUVVGaExGVkJRVlVzVlVGQlZTeE5RVUZOTEVOQlFVTTdRVUZCUVR0QlFVRkJMRlZCUlRkRkxHRkJRV0VzVlVGQlZTeGpRVUZqTEVOQlFVTTdRVUZCUVN3clEwRkRSQ3hUUVVGVExFbEJRVWs3UVVGQlFUdEJRVUZCTzBGQlFVRXNXVUZIYUVRc1lVRkJZU3h6UTBGQmMwTXNUVUZCVFN4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzYTBKQlNYQkVMRmxCUVZrc01rSkJRVEpDTEZkQlFWY3NaVUZCWlN4SlFVRkpMRmxCUVZrc1MwRkJTeXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlFVRTdRVUZCUVN4elFrRkZOMFlzV1VGQldTeFpRVUZaTEd0Q1FVRnJRaXhEUVVGRE8wRkJRVUVzYjBaQlEyMUNMRmRCUVZjN1FVRkJRU3g1UkVGRGRFTXNWMEZCVnp0QlFVRkJMSFZDUVVNM1F5eE5RVUZOTEZsQlFWa3NSMEZCUnl4RFFVRkRMRTFCUVUwc1UwRkJVeXhKUVVGSkxHVkJRV1VzVTBGQlV5eERRVUZETzBGQlFVRXNhMEpCUTNaRkxFMUJRVTBzV1VGQldTeEhRVUZITEVOQlFVTXNUVUZCVFN4VFFVRlRMRWxCUVVrc1pVRkJaU3hUUVVGVExFTkJRVU03UVVGQlFTeGpRVU4wUlN4UFFVRlBMRmxCUVZrc1MwRkJTeXhKUVVGSkxFTkJRVU03UVVGQlFTeDFRa0ZEY0VJc1RVRkJUU3haUVVGWkxFZEJRVWNzUTBGQlF5eE5RVUZOTEZOQlFWTXNTVUZCU1N4bFFVRmxMRk5CUVZNc1EwRkJRenRCUVVGQkxHdENRVU4yUlN4TlFVRk5MRmxCUVZrc1IwRkJSeXhEUVVGRExFMUJRVTBzVTBGQlV5eEpRVUZKTEdWQlFXVXNVMEZCVXl4RFFVRkRPMEZCUVVFc1kwRkRkRVVzVDBGQlR5eFpRVUZaTEV0QlFVc3NTVUZCU1N4RFFVRkRPMEZCUVVFN1FVRkJRVHRCUVVGQkxHTkJSemRDTEU5QlFVOHNXVUZCV1N4TFFVRkxMRTFCUVUwc1dVRkJXU3hIUVVGSExFTkJRVU1zUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVN4UlFVZDJSRHRCUVVWQkxHVkJRVTg3UVVGQlFTeFZRVU5NTEUxQlFVMDdRVUZCUVN4VlFVTk9MR0ZCUVdFN1FVRkJRU3haUVVOWUxFMUJRVTBzTkVKQlFUUkNPMEZCUVVFc1kwRkRNVUk3UVVGQlFTeFpRVU5HTEVOQlFVTXNSVUZCUlR0QlFVRkJMRmxCUTFRc2JVSkJRVzFDTEVOQlFVTXNVVUZCVVN4UlFVRlJMRkZCUVZFc1RVRkJUVHRCUVVGQkxGVkJRM0JFTzBGQlFVRXNWVUZEUVR0QlFVRkJMRlZCUTBFc1dVRkJXU3hQUVVGUE8wRkJRVUVzV1VGRGFrSXNVMEZCVXl4RFFVRkRMRVZCUVVNc1RVRkJUU3hQUVVGUExFTkJRVU1zUlVGQlJTeE5RVUZOTEZWQlFWVXNUMEZCVHl4RFFVRkRMRVZCUVVVc1UwRkJVU3hEUVVGRE8wRkJRVUVzV1VGRE9VUXNaVUZCWlN4RlFVRkRMRWRCUVVjc1MwRkJTeXhMUVVGTExGVkJRVlVzUzBGQlN5eFhRVUZYTEVsQlFVa3NZMEZCWXl4RlFVRkRPMEZCUVVFc1dVRkRNVVU3UVVGQlFTeFZRVU5HTzBGQlFVRXNVVUZEUmp0QlFVRkJMRTFCUTBZN1FVRkZSeXhOUVVGTkxHdENRVUZyUWl4RFFVRkRMRk5CUVhsQ0xHVkJRV2RFTzBGQlEzWkhMRkZCUVVGQkxHbENRVUZsTEZGQlFWRXNVVUZCVVN4VlFVRlZPMEZCUTNwRExHZENRVUZSTEZGQlFWRXNhVU5CUVdsRExGRkJRVkVzVVVGQlVTeFZRVUZWTEVOQlFVTTdRVUZCUVN4TlFVTTVSVHRCUVVGQk8wRkJRVUU3T3p0QlEzcExRU3hOUVdWTlF5eHJRa0Y1UkVFc1owTkJNa2RQTzBGQmJreGlPMEZCUVVFN1FVRkJRVHRCUVVkQk8wRkJSVUU3UVVGSFFUdEJRVTlCTEUxQlFVMUJMRzFDUVVGcFFpeERRVUZETEZkQlFYZERPMEZCUXpsRUxGbEJRVWtzUTBGQlF5eFZRVUZWTEU5QlFVOHNVMEZCVXl4SFFVRkhPMEZCUTJoRExHZENRVUZOTEVsQlFVa3NUVUZCVFN4MVEwRkJkVU03UVVGQlFTeFJRVU42UkR0QlFVVkJMR05CUVUwc1VVRkJiMElzVDBGQlR5eERRVUZETzBGQlEyeERMR05CUVUwc1QwRkJiVUlzVDBGQlR5eERRVUZETzBGQlEycERMR05CUVUwc1VVRkJiMElzVDBGQlR5eERRVUZETzBGQlJXeERMRmxCUVVrc1RVRkJUU3hoUVVGaExFdEJRVXNzV1VGQldTeE5RVUZOTEdGQlFXRXNUVUZCVFN4VlFVRlZPMEZCUTNwRkxHZENRVUZOTEVsQlFVa3NUVUZCVFN4NVEwRkJlVU03UVVGQlFTeFJRVU16UkR0QlFVVkJMRmxCUVVrc1RVRkJUU3hMUVVGTExGZEJRVmNzUzBGQlN5eE5RVUZOTEV0QlFVc3NWMEZCVnl4SFFVRkhPMEZCUTNSRUxHZENRVUZOTEVsQlFVa3NUVUZCVFN4M1FrRkJkMEk3UVVGQlFTeFJRVU14UXp0QlFVVkJMRmxCUVVrc1MwRkJTeXhMUVVGTExGZEJRVmNzUzBGQlN5eExRVUZMTEV0QlFVc3NWMEZCVnl4SFFVRkhPMEZCUTNCRUxHZENRVUZOTEVsQlFVa3NUVUZCVFN4MVFrRkJkVUk3UVVGQlFTeFJRVU42UXp0QlFVVkJMR05CUVUwc1lVRkJZU3hOUVVGTkxFdEJRVXNzVFVGQlRTeExRVUZMTEZOQlFWTXNRMEZCUXp0QlFVTnVSQ3hqUVVGTkxHbENRVUZwUWl4TlFVRk5MRXRCUVVzc1RVRkJUU3hMUVVGTExGTkJRVk1zUTBGQlF6dEJRVU4yUkN4WlFVRkpMRXRCUVVzc1MwRkJTeXhMUVVGTExFdEJRVXNzVTBGQlV5eERRVUZETEUxQlFVMHNXVUZCV1R0QlFVTnNSQ3huUWtGQlRTeEpRVUZKTEUxQlFVMHNPRU5CUVRoRE8wRkJRVUVzVVVGRGFFVTdRVUZEUVN4WlFVRkpMRXRCUVVzc1MwRkJTeXhMUVVGTExFdEJRVXNzVTBGQlV5eERRVUZETEUxQlFVMHNaMEpCUVdkQ08wRkJRM1JFTEdkQ1FVRk5MRWxCUVVrc1RVRkJUU3hyUkVGQmEwUTdRVUZCUVN4UlFVTndSVHRCUVVWQkxGbEJRVWtzVFVGQlRTeExRVUZMTEZkQlFWY3NSMEZCUnp0QlFVTXpRaXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNhMEpCUVd0Q08wRkJRVUVzVVVGRGNFTTdRVUZEUVN4WlFVRkpMRTFCUVUwc1MwRkJTeXhOUVVGTkxFdEJRVXNzVTBGQlV5eERRVUZETEUxQlFVMHNXVUZCV1R0QlFVTndSQ3huUWtGQlRTeEpRVUZKTEUxQlFVMHNLME5CUVN0RE8wRkJRVUVzVVVGRGFrVTdRVUZEUVN4WlFVRkpMRTlCUVU4c1UwRkJVeXhIUVVGSE8wRkJRM0pDTEdkQ1FVRk5MRTlCUVcxQ0xFOUJRVThzUTBGQlF6dEJRVU5xUXl4alFVRkpMRXRCUVVzc1MwRkJTeXhYUVVGWExFZEJRVWM3UVVGRE1VSXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxHbENRVUZwUWp0QlFVRkJMRlZCUTI1RE8wRkJRMEVzWTBGQlNTeExRVUZMTEV0QlFVc3NTMEZCU3l4TFFVRkxMRk5CUVZNc1EwRkJReXhOUVVGTkxGbEJRVms3UVVGRGJFUXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxEaERRVUU0UXp0QlFVRkJMRlZCUTJoRk8wRkJRVUVzVVVGRFJqdEJRVVZCTEZsQlFVa3NUMEZCVHl4VFFVRlRMRWRCUVVjN1FVRkRja0lzWjBKQlFVMHNUMEZCYlVJc1QwRkJUeXhEUVVGRE8wRkJRMnBETEdOQlFVa3NTMEZCU3l4TFFVRkxMRmRCUVZjc1IwRkJSenRCUVVNeFFpeHJRa0ZCVFN4SlFVRkpMRTFCUVUwc2FVSkJRV2xDTzBGQlFVRXNWVUZEYmtNN1FVRkRRU3hqUVVGSkxFdEJRVXNzUzBGQlN5eExRVUZMTEV0QlFVc3NVMEZCVXl4RFFVRkRMRTFCUVUwc1dVRkJXVHRCUVVOc1JDeHJRa0ZCVFN4SlFVRkpMRTFCUVUwc09FTkJRVGhETzBGQlFVRXNWVUZEYUVVN1FVRkJRU3hSUVVOR08wRkJRVUVzVFVGRFJqdEJRVVZCTEUxQlFVMHNhVU5CUTBZc1EwRkJReXhSUVVFclFpeFpRVUZ4UXl4aFFVRnhRaXhsUVVOMlJUdEJRVU5pTEdOQlFVMHNZVUZCWVN4WFFVRlhPMEZCUlRsQ0xHTkJRVTBzWVVGQllTeFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVTTNRaXhqUVVGTkxGbEJRVmtzVlVGQlZTeExRVUZMTEZWQlFWVTdRVUZETTBNc1kwRkJUU3hqUVVGak8wRkJRM0JDTEdOQlFVMHNZVUZCWVR0QlFVTnVRaXhqUVVGTkxHRkJRV0VzVjBGQlZ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMEZCUTNwRExHTkJRVTBzYlVKQlFXMUNMR0ZCUVdFc1YwRkJWeXhOUVVGTkxFZEJRVWNzUlVGQlJTeEZRVUZGTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRNMFVzWTBGQlRTeGxRVUZsTEVOQlFVTXNZMEZCWXl4UFFVRlBMRk5CUVZNN1FVRkRjRVFzWTBGQlRTeGxRVUZsTEU5QlFVOHNVMEZCVXp0QlFVTnlReXhqUVVGTkxHZENRVUZuUWl4alFVRmpMR05CUVdNN1FVRkRiRVFzWTBGQlRTeHhRa0ZCY1VJc1kwRkJZeXhqUVVGak8wRkJRM1pFTEdOQlFVMHNORUpCUVRSQ0xHTkJRV003UVVGRmFFUXNZMEZCVFN4aFFVRmhMR2xDUVVGcFFpeFZRVUZWTzBGQlJUbERMR05CUVUwc2EwSkJRVzlETzBGQlFVRXNWVUZEZUVNc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4WFFVRlZPMEZCUVVFc1ZVRkRlRU1zUlVGQlF5eDFRa0ZCZFVJc1RVRkJUU3hYUVVGVk8wRkJRVUVzVlVGRGVFTXNSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeFhRVUZWTzBGQlFVRXNWVUZEZUVNc1JVRkJReXh4UWtGQmMwSXNUVUZCVFN4WFFVRlhMRkZCUVU4N1FVRkJRU3hSUVVOcVJEdEJRVU5CTEdOQlFVMHNhMEpCUVd0Q0xFTkJRVU1zYVVKQlFTdENPMEZCUTNSRUxHZENRVUZOTEdkQ1FVRnRRenRCUVVGQkxGbEJRM1pETEVWQlFVTXNUVUZCVFN4bFFVRmxMRTFCUVUwc1RVRkJTenRCUVVGQkxGbEJRMnBETEVWQlFVTXNUVUZCVFN4alFVRmpMRTFCUVUwc1RVRkJTenRCUVVGQkxGbEJRMmhETEVWQlFVTXNUVUZCVFN4bFFVRmxMRTFCUVUwc1RVRkJTenRCUVVGQkxGbEJRMnBETEVWQlFVTXNUVUZCVFN4WFFVRlhMRTFCUVUwc1RVRkJTenRCUVVGQkxGVkJReTlDTzBGQlEwRXNaMEpCUVUwc1dVRkJXVHRCUVVGQkxGbEJRMmhDTEdOQlFXTXNTMEZCU3l4UFFVRlBMRU5CUVVNc1JVRkJSU3hWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEUxQlFVMHNWVUZCVlR0QlFVRkJMRmxCUTJwRkxHTkJRV01zVVVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlN4VlFVRlZMRTlCUVU4c1EwRkJReXhGUVVGRkxFMUJRVTBzVlVGQlZUdEJRVUZCTEZsQlEzQkZMR05CUVdNc1UwRkJVeXhQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRTFCUVUwc1ZVRkJWVHRCUVVGQkxGVkJRM1pGTzBGQlEwRXNZMEZCU1N4alFVRmpPMEZCUTJoQ0xITkNRVUZWTEV0QlFVc3NZMEZCWXl4UlFVRlJMRTlCUVU4c1EwRkJReXhGUVVGRkxGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4VlFVRlZMRU5CUVVNN1FVRkJRU3hWUVVOMFJqdEJRVU5CTEdOQlFVa3NZMEZCWXp0QlFVTm9RaXh6UWtGQlZTeExRVUZMTEdOQlFXTXNVVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSU3hWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEUxQlFVMHNWVUZCVlN4RFFVRkRPMEZCUVVFc1ZVRkRkRVk3UVVGRFFTeHZRa0ZCVlN4TFFVRkxMR1ZCUVdVc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEdGQlFXRXNWVUZCVlN4RFFVRkRPMEZCUTNCR0xHTkJRVWtzWlVGQlpUdEJRVU5xUWl4elFrRkJWU3hMUVVGTExHVkJRV1VzT0VKQlFTdENMR2RDUVVGblFpeERRVUZETzBGQlFVRXNWVUZEYUVZN1FVRkRRU3hqUVVGSkxHOUNRVUZ2UWp0QlFVTjBRaXh6UWtGQlZTeExRVUZMTEdWQlFXVXNhVU5CUVd0RExHZENRVUZuUWl4RFFVRkRPMEZCUVVFc1ZVRkRia1k3UVVGRFFTeGpRVUZKTERKQ1FVRXlRanRCUVVNM1FpeHpRa0ZCVlN4TFFVRkxMR1ZCUVdVc2RVSkJRWFZDTEU5QlFVOHNRMEZCUXl4RlFVRkZMRlZCUVZVc1lVRkJZU3hWUVVGVkxFTkJRVU03UVVGQlFTeFZRVU51Unp0QlFVTkJMR2RDUVVGTkxGZEJRVmNzTkVKQlFUUkNMRTlCUVU4c1EwRkJReXhGUVVGRkxGRkJRVkU3UVVGREwwUXNhVUpCUVU4N1FVRkJRVHRCUVVGQkxGRkJSVmdzWVVGQllTeHBRa0ZCYVVJc1lVRkJZU3hGUVVGRkxHbENRVUZwUWl4SFFVRkhMRk5CUVZNc1EwRkJRenRCUVVGQk8wRkJRVUVzVVVGRk0wVXNZVUZCWVN4VlFVRlZMRU5CUVVNN1FVRkJRU3hWUVVOMFFpeGhRVUZoTEhORFFVRnpReXcyUTBGQk5rTXNRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRU3h2UWtGSGRrWXNWMEZCVnl4UFFVRlBMRlZCUVZVc1EwRkJRenRCUVVGQkxEQkNRVU4yUWl4WFFVRlhMRTlCUVU4c1ZVRkJWU3hEUVVGRE8wRkJRVUU3UVVGQlFUdEJRVUZCTERaQ1FVY3hRaXhsUVVGbExGbEJRVmtzVjBGQlZ5eFBRVUZQTzBGQlFVRTdRVUZCUVR0QlFVRkJMRmxCUnpsRUxEUkNRVUUwUWl3MlEwRkJOa01zUlVGQlJUdEJRVUZCTzBGQlFVRXNORUpCUlRORUxGVkJRVlVzVlVGQlZTeFpRVUZaTEU5QlFVOHNRMEZCUXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxIRkNRVWt2UXl4VlFVRlZMRTlCUVU4c1ZVRkJWU3hEUVVGRE8wRkJRVUVzZDBOQlExUXNWVUZCVlN4aFFVRmhMRlZCUVZVc1EwRkJReXhuUTBGRE1VUXNZVUZCWVN4TFFVRkxMR1ZCUVdVN1FVRkJRU3hWUVVOMlF5eG5Ra0ZCWjBJc2IwTkJRVzlETEVWQlFVVTdRVUZCUVN4VlFVTjBSQ3h4UWtGQmNVSXNPRU5CUVRoRExFVkJRVVU3UVVGQlFUdEJRVUZCTEhGRVFVVXhRaXhoUVVGaExFdEJRVXNzUzBGQlN5eFJRVUZSTEZGQlFWRXNUMEZETlVVc1VVRkJVU3cwUWtGQk5FSXNaVUZCWlN4alFVRmpMRVZCUVVVN1FVRkJRVHRCUVVGQk8wRkJRVUVzVVVGSGVrVTdRVUZEUVN4alFVRk5MRlZCUVZVc1EwRkJReXhGUVVGRExFMUJRVTBzWVVGQllTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRk5CUVZFc1EwRkJRenRCUVVOc1JTeFpRVUZKTEdOQlFXTXNSMEZCUnp0QlFVTnVRaXhyUWtGQlVTeExRVUZMTEVWQlFVTXNUVUZCVFN4clFrRkJhMElzZDBKQlFYZENMRU5CUVVNN1FVRkJRU3hSUVVOcVJUdEJRVU5CTEZsQlFVa3NZMEZCWXl4SFFVRkhPMEZCUTI1Q0xHdENRVUZSTEV0QlFVc3NSVUZCUXl4TlFVRk5MR3RDUVVGclFpeDNRa0ZCZDBJc1EwRkJRenRCUVVGQkxGRkJRMnBGTzBGQlEwRXNXVUZCU1N4alFVRmpMRWRCUVVjN1FVRkRia0lzYTBKQlFWRXNTMEZCU3l4RlFVRkRMRTFCUVUwc1dVRkJXU3hWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEZOQlFWRXNRMEZCUXp0QlFVRkJMRkZCUXk5RU8wRkJRMEVzWlVGQlR6dEJRVUZCTEZWQlEwd3NUVUZCVFR0QlFVRkJMRlZCUTA0c1lVRkJZVHRCUVVGQkxGbEJRMWdzVFVGQlRTeEhRVUZITEZWQlFWVXNTVUZCU1N4aFFVRmhMRWxCUVVrc2EwSkJRV3RDTEVsQlFVa3NlVUpCUVhsQ08wRkJRVUVzV1VGRGRrWXNiVUpCUVcxQ0xFOUJRVThzU1VGQlNTeERRVUZETEZGQlFWRXNWMEZCVnl4TlFVRk5PMEZCUVVFc1ZVRkRNVVE3UVVGQlFTeFZRVU5CTzBGQlFVRXNWVUZEUVN4WlFVRlpMRTlCUVU4c1JVRkJReXhUUVVGVExHVkJRV1VzUlVGQlF5eEhRVUZITEV0QlFVc3NTMEZCU3l4aFFVRmhMR0ZCUVdFc1JVRkJSU3hGUVVGRExFZEJRVWNzWjBKQlFXVTdRVUZCUVN4UlFVTXpSenRCUVVGQkxFMUJRMFk3UVVGRlJDeE5RVUZOTEdkQ1FVRm5RaXhEUVVGRExGTkJRWGxDTEdWQlFUaERPMEZCUlc1SExHTkJRVTBzWVVGQllUdEJRVU51UWl4UlFVRkJRU3hwUWtGQlpTeFJRVUZSTEUxQlFVMDdRVUZITjBJc1kwRkJUU3hWUVVGVkxFTkJRVU1zUTBGQlF6dEJRVU5zUWl4WlFVRkpMRkZCUVZFc1kwRkJZeXhIUVVGSE8wRkJRek5DTEd0Q1FVRlJMRXRCUVVzc1lVRkJZU3hKUVVGSkxFVkJRVVU3UVVGQlFTeFJRVU5zUXp0QlFVTkJMRmxCUVVrc1VVRkJVU3hqUVVGakxFZEJRVWM3UVVGRE0wSXNhMEpCUVZFc1MwRkJTeXhoUVVGaExFbEJRVWtzUlVGQlJUdEJRVUZCTEZGQlEyeERPMEZCUTBFc1dVRkJTU3hSUVVGUkxHTkJRV01zUjBGQlJ6dEJRVU16UWl4clFrRkJVU3hMUVVGTExFTkJRVU03UVVGQlFTeFJRVU5vUWp0QlFVTkJMR2RDUVVGUk8wRkJRVUVzVlVGRFNpd3JRa0ZCSzBJc1VVRkJVU3hSUVVGUkxGbEJRVmtzVVVGQlVTeGhRVUZoTEZWQlFWVTdRVUZCUVN4VlFVRkhMRVZCUVVNc1VVRkJUenRCUVVGQkxGRkJRVU03UVVGQlFTeE5RVU0xUnp0QlFVRkJPMEZCUVVFN096dEJRM0pOUVN4TlFXbENUVU1zYTBKQmEwSkJMRmRCWTBFc2FVTkJaVUVzYlVKQlkwRXNNa0pCYzBKQkxIZENRVzFHVHl4UFFWbEJPMEZCYmsxaU8wRkJRVUU3UVVGQlFUdEJRVWRCTzBGQlJVRTdRVUZEUVR0QlFVZEJPMEZCVVVFc1RVRkJUVUVzYlVKQlFXbENMRU5CUVVNc1VVRkJLMElzWlVGQmMwTTdRVUZETTBZc1dVRkJTU3hEUVVGRExGVkJRVlVzVDBGQlR5eFRRVUZUTEVkQlFVYzdRVUZEYUVNc1owSkJRVTBzU1VGQlNTeE5RVUZOTEdkQ1FVRm5RanRCUVVGQkxGRkJRMnhETzBGQlEwRXNXVUZCU1N4WFFVRlhMRXRCUVVzc1YwRkJWeXhIUVVGSE8wRkJRMmhETEdOQlFVa3NWMEZCVnl4TFFVRkxMRmRCUVZjc1YwRkJWeXhQUVVGUExGVkJRVlVzVjBGQlZ5eExRVUZMTEZkQlFWY3NWMEZCVnl4TFFVRkxMRkZCUVZFN1FVRkROVWNzYTBKQlFVMHNTVUZCU1N4TlFVRk5MR2xFUVVGcFJEdEJRVUZCTEZWQlEyNUZPMEZCUVVFc1VVRkRSaXhYUVVGWExGZEJRVmNzVDBGQlR5eFhRVUZYTEZkQlFWY3NTMEZCU3l4UlFVRlJPMEZCUXpsRUxHZENRVUZOTEVsQlFVa3NUVUZCVFN3eVEwRkJNa003UVVGQlFTeFJRVU0zUkR0QlFVTkJMR1ZCUVU4c1RVRkJUU3hEUVVGRExFVkJRVVVzVVVGQlVTeERRVUZETEVkQlFVY3NVVUZCVVR0QlFVTnNReXhqUVVGSkxFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVVXNPRUpCUVN0Q0xFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVVXNORUpCUVRaQ08wRkJRemxHTEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3hUUVVGVExFZEJRVWNzY1VOQlFYRkRPMEZCUVVFc1ZVRkRia1U3UVVGQlFTeFJRVU5HTEVOQlFVTTdRVUZCUVN4TlFVTklPMEZCUlVFc1RVRkJUU3haUVVGWkxFTkJRVU1zVVVGQkswSXNVVUZCTUVJN1FVRkRNVVVzWTBGQlRTeFJRVUZyUWl4RFFVRkRPMEZCUTNwQ0xGbEJRVWtzVDBGQlR5eFRRVUZUTEV0QlFVczdRVUZEZGtJc1kwRkJTU3hQUVVGUExFZEJRVWNzUlVGQlJTdzBRa0ZCTmtJN1FVRkRNME1zYlVKQlFVOHNSMEZCUnl4RlFVRkZMR2xDUVVGcFFpeEZRVUZGTEZGQlFWRXNUMEZCU3l4TlFVRk5MRXRCUVVzc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVUZCTEZWQlEyNUZMRmRCUVZjc1QwRkJUeXhIUVVGSExFVkJRVVVzTkVKQlFUWkNPMEZCUTJ4RUxHMUNRVUZQTEVkQlFVY3NSVUZCUlN4alFVRmpMRVZCUVVVc1VVRkJVU3hQUVVGTExFMUJRVTBzUzBGQlN5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUVVFc1ZVRkRhRVVzVDBGQlR6dEJRVU5NTEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3hUUVVGVExFZEJRVWNzY1VOQlFYRkRPMEZCUVVFc1ZVRkRia1U3UVVGQlFTeFJRVU5HTzBGQlEwRXNaVUZCVHp0QlFVRkJMRTFCUTFRN1FVRkZRU3hOUVVGTkxHdERRVU5HTEVOQlFVTXNVVUZCSzBJc1pVRkJhVVE3UVVGREwwVXNXVUZCU1N4UFFVRlBMRk5CUVZNc1IwRkJSenRCUVVOeVFpeG5Ra0ZCVFN4VFFVRnRRaXhWUVVGVkxGRkJRVkVzUTBGQlF6dEJRVU0xUXl4blFrRkJUU3hQUVVGcFFpeFZRVUZWTEZGQlFWRXNRMEZCUXp0QlFVTXhReXhqUVVGSkxFOUJRV2xDTEZWQlFWVXNVVUZCVVN4RFFVRkRPMEZCUTNoRExHTkJRVWtzUzBGQlN5eFhRVUZYTEVkQlFVYzdRVUZEY2tJc2JVSkJRVThzUTBGQlF5eEhRVUZITEUxQlFVMHNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhOUVVGTkxFVkJRVVVzUzBGQlN5eERRVUZETzBGQlFVRXNWVUZEYUVRN1FVRkRRU3hwUWtGQlR5dzBRa0ZCTkVJc1JVRkJReXhSUVVGUkxFMUJRVTBzUzBGQlNTeERRVUZETzBGQlFVRXNVVUZEZWtRc1QwRkJUenRCUVVOTUxHbENRVUZQTzBGQlFVRXNVVUZEVkR0QlFVRkJMRTFCUTBZN1FVRkZTaXhOUVVGTkxHOUNRVU5HTEVOQlFVTXNUMEZCWlN4UFFVRmxMRmxCUVN0Q0xFMUJRWGxDTEZWQlEzcEZPMEZCUTFJc1dVRkJTU3hYUVVGWE8wRkJRMllzV1VGQlNTeFJRVUZSTEVkQlFVYzdRVUZEWWl4elFrRkJXU3hYUVVGWExFdEJRVXNzUzBGQlN5eERRVUZETzBGQlFVRXNVVUZEY0VNN1FVRkRRU3haUVVGSkxFMUJRVTBzUzBGQlN5eEpRVUZKTEVkQlFVYzdRVUZEY0VJc2FVSkJRVThzUzBGQlN5eEpRVUZKTEVkQlFVY3NTMEZCU3l4SlFVRkpMRlZCUVZVc1YwRkJWeXhMUVVGTExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVRkJMRkZCUTNCRkxFOUJRVTg3UVVGRFRDeHBRa0ZCVHl4TFFVRkxMRWxCUVVrc1IwRkJSeXhMUVVGTExFbEJRVWtzVlVGQlZTeFhRVUZYTEV0QlFVc3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVGQkxGRkJRMmhGTzBGQlFVRXNUVUZEUmp0QlFVVlNMRTFCUVUwc05FSkJRMFlzUTBGQlF5eFBRVUZ6UWl4UlFVRjFRaXhsUVVNeFF5dzBRMEZCTkVNc1QwRkJUeXhMUVVGTExFOUJRVThzVVVGQlVTeE5RVUZOTEV0QlFVc3NUMEZCVHp0QlFVRkJMQ3RDUVVOc1JTeE5RVUZOTEV0QlFVc3NUMEZCVHp0QlFVRkJPMEZCUVVFc2VVSkJSWGhDTEZkQlFWY3NUVUZCVFR0QlFVRkJMR3REUVVOU0xHRkJRV0VzZDBKQlFYZENMRXRCUVVzc1YwRkJWeXhOUVVGTkxFTkJRVU03UVVGQlFTdzBRa0ZEYkVVc1lVRkJZU3hyUWtGQmEwSXNTMEZCU3l4WFFVRlhMRTFCUVUwc1EwRkJRenRCUVVGQkxEUkNRVU4wUkN4aFFVRmhMR3RDUVVGclFpeExRVUZMTEZkQlFWY3NUVUZCVFN4RFFVRkRPMEZCUVVFc05rSkJRM0pFTEdGQlFXRXNiVUpCUVcxQ0xFdEJRVXNzVjBGQlZ5eE5RVUZOTEVOQlFVTTdRVUZCUVN4cFEwRkRia1FzVDBGQlR5eFhRVUZYTEd0Q1FVRnJRaXhIUVVGSExFTkJRVU03UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRU3hqUVU4elJDeE5RVUZOTEZkQlFWY3NhVUpCUVdsQ0xFdEJRVXNzWVVGQllTeERRVUZETzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUzI1RkxFMUJRVTBzZVVKQlFYbENMRU5CUVVNc1VVRkJLMElzWlVGQk5rTTdRVUZETVVjc1kwRkJUU3hoUVVGaExFOUJRVThzUTBGQlF5eEZRVUZGTzBGQlF6ZENMR05CUVUwc1dVRkJXU3hWUVVGVkxFdEJRVXNzVlVGQlZUdEJRVU16UXl4alFVRk5MRTlCUVZFc1YwRkJWeXhMUVVGTExGTkJRVk1zU1VGQlN5eFZRVUZWTEdOQlFXTXNWMEZCVnl4TlFVRk5MRmRCUVZjc1RVRkJUU3hKUVVNeFJDeERRVUZETEVkQlFVY3NUVUZCVFN4WFFVRlhMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU03UVVGREwwVXNXVUZCU1N4UlFVRlJMRlZCUVZVc1VVRkJVU3hEUVVGRE8wRkJReTlDTEdOQlFVMHNVVUZCVVN4RFFVRkRMRk5CUVZNc1UwRkJVeXhOUVVGTkxFMUJRVTA3UVVGRGJrSXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxHdENRVUZyUWp0QlFVRkJMRkZCUTNCRExFVkJRVVU3UVVGRE1VSXNXVUZCU1N4TlFVRk5MRmRCUVZjc1IwRkJSenRCUVVOMFFpeHJRa0ZCVVN4TlFVRk5MRXRCUVVzc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF6dEJRVUZCTEZGQlEyNURPMEZCUTBFc1kwRkJUU3hUUVVGVExGZEJRVmNzVDBGQlR5eEpRVUZKTEVOQlFVTXNUMEZCVHl4TlFVRk5MR3RDUVVGclFpeFBRVUZQTEVkQlFVY3NXVUZCV1N4TlFVRk5MRXRCUVVzc1EwRkJRenRCUVVWMlJ5eGpRVUZOTEU5QlFVOHNWMEZCVnl4TFFVRkxMRWxCUVVrc1EwRkJReXhMUVVGTExFMUJRVTBzYTBKQlFXdENMRXRCUVVzc1IwRkJSeXhaUVVGWkxFMUJRVTBzUzBGQlN5eERRVUZETzBGQlJTOUdMRmxCUVVrc1MwRkJTeXhYUVVGWExFOUJRVThzVlVGQlZTeExRVUZMTEZkQlFWY3NTMEZCU3l4UlFVRlJPMEZCUTJoRkxHZENRVUZOTEVsQlFVa3NUVUZCVFN3NFJFRkJPRVE3UVVGQlFTeFJRVU5vUmp0QlFVVkJMRmxCUVVrc1MwRkJTeXhYUVVGWExGZEJRVmNzVVVGQlVUdEJRVU55UXl4dFFrRkJVeXhKUVVGSkxFZEJRVWNzU1VGQlNTeFhRVUZYTEZGQlFWRXNSVUZCUlN4SFFVRkhPMEZCUXpGRExHZENRVUZKTEVOQlFVTXNTMEZCU3l4VFFVRlRMRU5CUVVNc1IwRkJSenRCUVVOeVFpeHhRa0ZCVHl4UFFVRlBMRWRCUVVjc1IwRkJSeXhEUVVGRE8wRkJRM0pDTEcxQ1FVRkxMRTlCUVU4c1IwRkJSeXhIUVVGSExGZEJRVmNzUTBGQlF5eERRVUZETzBGQlF5OUNMRzlDUVVGTkxFOUJRVThzUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZCUVN4WlFVTjBRanRCUVVGQkxGVkJRMFk3UVVGQlFTeFJRVU5HTzBGQlEwRXNZMEZCVFN4UlFVRlJMRTFCUVUwc1NVRkJTU3hWUVVGUkxFdEJRVXNzUzBGQlN5eEpRVUZKTEVOQlFVTTdRVUZGTDBNc1kwRkJUU3hSUVVGUkxFTkJRVU1zVFVGQlRTeEhRVUZITEZWQlFWVTdRVUZEYUVNc1kwRkJTU3hQUVVGUExFZEJRVWM3UVVGRFdpeHJRa0ZCVFN4WlFVRlpMRXRCUVVzc1EwRkJReXhKUVVGSkxFOUJRVThzUTBGQlF5eExRVUZMTzBGQlEzcERMR3RDUVVGTkxGTkJRVk1zVDBGQlR5eERRVUZETzBGQlEzWkNMR3RDUVVGTkxGZEJRVmNzVTBGQlV5eFhRVUZYTEUxQlFVMHNRMEZCUXp0QlFVTTFReXh0UWtGQlR5eERRVUZETEVsQlFVazdRVUZEV2l4cFFrRkJTeXhEUVVGRExFbEJRVWs3UVVGRFZpeHJRa0ZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVGQkxGVkJRMlE3UVVGQlFTeFJRVU5HTEVOQlFVTTdRVUZGUkN4alFVRk5MR05CUVdNc1YwRkJWeXhOUVVGTkxFTkJRVU03UVVGRGRFTXNZVUZCU3l4UlFVRlJMRU5CUVVNc1RVRkJUU3hOUVVGTk8wRkJRM2hDTEhOQ1FVRlpMRWxCUVVrc1NVRkJTU3hMUVVGTExFMUJRVTBzUzBGQlN5eEpRVUZKTEVsQlFVa3NUMEZCVHl4SlFVRkpMRXRCUVVzc1RVRkJUU3hKUVVGSkxFTkJRVU03UVVGQlFTeFJRVU42UlN4RFFVRkRPMEZCUTBRc1kwRkJUU3h0UWtGQkswSXNSVUZCUXl4TlFVRk5MR0ZCUVdFc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeFRRVUZSTzBGQlJYSkdMR05CUVUwc1UwRkJVeXhsUVVGbExGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVlN4WlFVRlpMRTFCUVUwN1FVRkRPVVVzWTBGQlRTeFJRVUZSTEdOQlFXTXNVMEZCVXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEV0QlFVc3NUVUZCVFR0QlFVTTVSU3hqUVVGTkxHRkJRV0VzVlVGQlZTeExRVUZMTEZkQlFWYzdRVUZETjBNc1kwRkJUU3hYUVVFNFFqdEJRVUZCTEZWQlEyeERMRVZCUVVNc1RVRkJUU3hqUVVGakxFMUJRVTBzVFVGQlN6dEJRVUZCTEZWQlFVY3NSVUZCUXl4TlFVRk5MRlZCUVZVc1RVRkJUU3hQUVVGUExGRkJRVkVzVDBGQlR5eFBRVUZOTzBGQlFVRXNWVUZEZEVZc1JVRkJReXhOUVVGTkxGTkJRVk1zVFVGQlRTeFBRVUZQTEZGQlFWRXNUVUZCVFN4UFFVRk5PMEZCUVVFc1ZVRkJSeXhGUVVGRExFMUJRVTBzVTBGQlV5eE5RVUZOTEU5QlFVOHNVVUZCVVN4TlFVRk5MRTlCUVUwN1FVRkJRU3hSUVVOMlJ6dEJRVVZCTEdOQlFVMHNhMEpCUVc5RE8wRkJRVUVzVlVGRGVFTXNSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeFhRVUZWTzBGQlFVRXNWVUZCUnl4RlFVRkRMSFZDUVVGMVFpeE5RVUZOTEU5QlFVMDdRVUZCUVN4VlFVTXZSU3hGUVVGRExIRkNRVUZ6UWl4TlFVRk5MRTFCUVVzN1FVRkJRU3hWUVVGSExFVkJRVU1zZFVKQlFYVkNMRTFCUVUwc1RVRkJTenRCUVVGQkxGVkJRM2hGTEVkQlFVY3NNa0pCUVRKQ0xFOUJRVThzUTBGQlF5eEZRVUZGTEUxQlFVMHNWMEZCVnp0QlFVRkJMRkZCUXpORU8wRkJSVUVzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQkswSTdRVUZCUVN4UlFVTnNSQ3hoUVVGaExHbENRVUZwUWl4UlFVRlJMRVZCUVVVc2FVSkJRV2xDTEU5QlFVOHNUVUZCVFN4RFFVRkRPMEZCUVVFc1ZVRkRja1VzTUVKQlFUQkNMRTlCUVU4c1VVRkJVU3hWUVVGVkxFTkJRVU03UVVGQlFTeFZRVU53UkN4aFFVRmhMRlZCUVZVc1EwRkJRenRCUVVGQkxGbEJRM1JDTEdGQlFXRXNjME5CUVhORExIRkNRVUZ4UWl4RFFVRkRPMEZCUVVFc2FVTkJRM0JFTEU5QlFVOHNaMEpCUVdkQ0xGbEJRVmtzUTBGQlF6dEJRVUZCTzBGQlFVRXNXVUZGZWtRc1QwRkJUeXhaUVVGWkxHTkJRV01zVFVGQlRTeGhRVUZoTEdWQlFXVXNRMEZCUXl4RFFVRkRPMEZCUVVFN1FVRkZMMFVzWlVGQlR6dEJRVUZCTEZWQlEwd3NUVUZCVFR0QlFVRkJMRlZCUTA0c1lVRkJZU3hGUVVGRExFMUJRVTBzUjBGQlJ5eE5RVUZOTEUxQlFVMHNTVUZCU1N4UFFVRlBMRTFCUVUwc1NVRkJTU3hOUVVGTkxFMUJRVTBzU1VGQlNTeHRRa0ZCYlVJc1EwRkJReXhOUVVGTkxFVkJRVU03UVVGQlFTeFZRVU51Unp0QlFVRkJMRlZCUTBFc1dVRkJXU3hQUVVGUE8wRkJRVUVzV1VGRGFrSXNVMEZCVXl4RFFVRkRMR2RDUVVGblFqdEJRVUZCTEZsQlF6RkNMR1ZCUVdVc1JVRkJReXhIUVVGSExFdEJRVXM3UVVGQlFTeGpRVUZMTEZsQlFWazdRVUZCUVR0QlFVRkJMRmxCUVhWQ0xFVkJRVU03UVVGQlFTeFpRVU5xUlR0QlFVRkJMRlZCUTBZN1FVRkJRU3hSUVVOR08wRkJRVUVzVFVGRFJqdEJRVVZQTEUxQlFVMHNVVUZCVVN4RFFVRkRMRk5CUVhsQ0xHVkJRWE5ETzBGQlEyNUdMRkZCUVVGQkxHbENRVUZsTEZGQlFWRXNVVUZCVVN4VlFVRlZPMEZCUTNwRExHTkJRVTBzYjBKQlFXOUNMR2REUVVGblF5eFJRVUZSTEZGQlFWRXNWVUZCVlR0QlFVTndSaXhuUWtGQlVTeFJRVUZSTEhWQ1FVRjFRaXhSUVVGUkxGRkJRVkVzYVVKQlFXbENMRWRCUVVjc1JVRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZCUVN4TlFVOHhSanRCUVVWUExFMUJRVTBzZFVKQlFYVkNMRU5CUVVNc1pVRkJlVVE3UVVGRE5VWXNZMEZCVFN4VFFVRlRMRmRCUVZjN1FVRkRNVUlzWTBGQlRTeFBRVUZQTEZkQlFWYzdRVUZEZUVJc1kwRkJUU3hQUVVGUExGZEJRVmM3UVVGRGVFSXNaVUZCVHl3MFFrRkJORUlzUlVGQlF5eFJRVUZSTEUxQlFVMHNTMEZCU1N4RFFVRkRPMEZCUVVFc1RVRkRla1E3UVVGQlFUdEJRVUZCT3pzN1FVTjRUVUVzVFVGbFRVTXNhMEpCVlVFc01FSkJkMGhQTEZOQlMwRTdRVUYwU21JN1FVRkJRVHRCUVVGQk8wRkJUMEU3UVVGRlFUdEJRVU5CTzBGQlIwRTdRVUZGUVN4TlFVRk5RU3h0UWtGQmFVSXNRMEZCUXl4WFFVRjNRenRCUVVNNVJDeFpRVUZKTEVOQlFVTXNWVUZCVlN4UFFVRlBMRmRCUVZjc1IwRkJSenRCUVVOc1F5eG5Ra0ZCVFN4SlFVRkpMRTFCUVUwc09FSkJRVGhDTzBGQlFVRXNVVUZEYUVRN1FVRkJRU3hOUVVOR08wRkJUVUVzVFVGQlRTd3lRa0ZCTWtJc1EwRkJReXhQUVVGdFFpeGxRVUVyUXp0QlFVTnNSeXhqUVVGTkxGRkJRVkVzVFVGQlRUdEJRVU53UWl4alFVRk5MR0ZCUVdFc1ZVRkJWU3hMUVVGTExFdEJRVXM3UVVGRGRrTXNZMEZCVFN4TFFVRkxPMEZCUTFnc1dVRkJTU3hQUVVGUExGZEJRVmM3UVVGRGRFSXNXVUZCU1N4UFFVRlBMRWRCUVVjN1FVRkRXaXhwUWtGQlR5eE5RVUZOTEZOQlFWTTdRVUZCUVN4UlFVTjRRanRCUVVOQkxGbEJRVWtzVDBGQlR5eE5RVUZOTEZOQlFWTXNSMEZCUnp0QlFVTXpRaXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNNRU5CUVRCRE8wRkJRVUVzVVVGRE5VUTdRVUZGUVN4alFVRk5MRTlCUVU4c1RVRkJUU3hKUVVGSk8wRkJRM1pDTEdOQlFVMHNUMEZCVHl4aFFVRmhPMEZCUXpGQ0xHTkJRVTBzWVVGQllTeHBRa0ZCYVVJc1NVRkJTVHRCUVVONFF5eGpRVUZOTEdGQlFXRXNUMEZCVHp0QlFVVXhRaXhqUVVGTkxGbEJRVmtzUTBGQlF5eE5RVUZqUXl4blFrRkJkVUk3UVVGRGRFUXNZMEZCU1VFc1owSkJRV1VzUjBGQlJ6dEJRVU53UWl4dFFrRkJUeXhYUVVGWExFbEJRVWtzVDBGQlR5eEpRVUZKTEZsQlFWa3NTVUZCU1N4UFFVRlBMRWxCUVVrN1FVRkJRU3hWUVVNNVJDeFhRVUZYUVN4blFrRkJaU3hIUVVGSE8wRkJRek5DTEcxQ1FVRlBMRTlCUVU4c1NVRkJTU3hQUVVGUExFbEJRVWs3UVVGQlFTeFZRVU12UWl4WFFVRlhRU3huUWtGQlpTeEhRVUZITzBGQlF6TkNMRzFDUVVGUExGZEJRVmNzU1VGQlNTeFBRVUZQTEVsQlFVa3NVVUZCVVN4SlFVRkpPMEZCUVVFc1ZVRkRMME03UVVGRlFTeHBRa0ZCVHp0QlFVRkJMRkZCUTFRN1FVRkRRU3hqUVVGTkxFbEJRVWtzWTBGQll5eExRVUZMTEUxQlFVMHNWVUZCVlN4TlFVRk5MRTFCUVUwc1ZVRkJWVHRCUVVOdVJTeGpRVUZOTEZOQlFWTXNaVUZCWlN4VlFVRlZMRTFCUVUwc1ZVRkJWU3hOUVVGTkxFMUJRVTBzVlVGQlZUdEJRVU01UlN4alFVRk5MRmxCUVZrc1JVRkJSU3hMUVVGTE8wRkJSWHBDTEdOQlFVMHNaMEpCUVdkQ0xEUkNRVUUwUWl4TlFVRk5MRkZCUVZFc1RVRkJUU3hSUVVOc1JTeHRRa0ZCYlVJc1UwRkJVeXh6UWtGRE5VSXNiVUpCUVcxQ0xGTkJRVk03UVVGRGFFTXNZMEZCVFN4clFrRkJhMElzUTBGQlF5eHBRa0ZCSzBJN1FVRkJRU3h6UTBGRGNFSXNVMEZCVXp0QlFVRkJMSE5EUVVOVUxGTkJRVk03UVVGQlFTdzBRMEZEU0N4VFFVRlRMRXRCUVVzc1JVRkJSVHRCUVVGQk8wRkJRVUVzTkVSQlJVRXNVMEZCVXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUVzWjBWQlMwd3NVMEZCVXp0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxGRkJTV3BGTEdGQlFXRXNaMEpCUVdkQ0xHTkJRV01zUzBGQlN5eEZRVUZGTEdsQ1FVRnBRaXhIUVVGSExFMUJRVTBzUTBGQlF6dEJRVUZCTEZGQlF6ZEZMR0ZCUVdFc1ZVRkJWU3hEUVVGRE8wRkJRVUU3UVVGQlFUdEJRVUZCTEhGQ1FVZFlMRVZCUVVVN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRXNWVUZOWWl4aFFVRmhPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFc01rSkJiVUpKTEZOQlFWTXNTVUZCU1N4VlFVRlZMRzFDUVVGdFFpeFZRVUZWTEVOQlFVTTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQkxEQkNRVXQwUkN4VFFVRlRPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTERKQ1FXVlNMRk5CUVZNc1NVRkJTU3hWUVVGVkxHMUNRVUZ0UWl4VlFVRlZMRU5CUVVNN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRlZPVVVzWlVGQlR6dEJRVUZCTEZWQlEwd3NUVUZCVFR0QlFVRkJMRlZCUTA0c1lVRkJZU3hGUVVGRExFMUJRVTBzUjBGQlJ5eFZRVUZWTEVsQlFVa3NiVUpCUVcxQ0xFTkJRVU1zVFVGQlRTeEZRVUZETzBGQlFVRXNWVUZEYUVVc1dVRkJXU3hQUVVGUE8wRkJRVUVzV1VGRGFrSXNVMEZCVXl4RFFVRkRMRVZCUVVNc1RVRkJUU3hQUVVGUExGVkJRVlVzVFVGQlRTeFRRVUZSTEVOQlFVTTdRVUZCUVN4WlFVTnFSQ3hsUVVGbExFVkJRVU1zUjBGQlJ5eExRVUZKTzBGQlFVRXNXVUZEZGtJc2FVSkJRV2xDTEVOQlFVTXNSVUZCUXl4eFFrRkJjMElzVFVGQlRTeFhRVUZWTEVOQlFVTTdRVUZCUVN4VlFVTTFSRHRCUVVGQkxGVkJRMEU3UVVGQlFTeFJRVU5HTzBGQlFVRXNUVUZEUmp0QlFVVlBMRTFCUVUwc1ZVRkJWU3hEUVVGRExGTkJRWGxDTEdWQlFYZERPMEZCUTNaR0xGRkJRVUZFTEdsQ1FVRmxMRkZCUVZFc1RVRkJUVHRCUVVNM1FpeG5Ra0ZCVVN4UlFVRlJMSGxDUVVGNVFpeFJRVUZSTEU5QlFVOHNRMEZCUXl4SFFVRkhMRlZCUVZVc1EwRkJRenRCUVVGQkxFMUJRM3BGTzBGQlJVOHNUVUZCVFN4NVFrRkJlVUlzUTBGQlF5eGxRVU51UXl3MFFrRkJORUlzUlVGQlF5eE5RVUZOTEZkQlFWY3NTMEZCWXl4RFFVRkRPMEZCUVVFN1FVRkJRVHM3TzBGRGRrcHFSU3hOUVdsQ1RVVXNhMEpCVFVFc2FVTkJWMEVzTUVKQlUwRXNjVUpCY1VKQkxIZENRWFZFVHl4UFFVOUJPMEZCT1VoaU8wRkJRVUU3UVVGQlFUdEJRVWRCTzBGQlJVRTdRVUZEUVR0QlFVZEJPMEZCVVVFc1RVRkJUVUVzYlVKQlFXbENMRU5CUVVNc1YwRkJkME03UVVGRE9VUXNXVUZCU1N4RFFVRkRMRlZCUVZVc1QwRkJUeXhUUVVGVExFZEJRVWM3UVVGRGFFTXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxHZENRVUZuUWp0QlFVRkJMRkZCUTJ4RE8wRkJRVUVzVFVGRFJqdEJRVVZCTEUxQlFVMHNhME5CUTBZc1EwRkJReXhSUVVFclFpeGxRVUZwUkR0QlFVTXZSU3hqUVVGTkxHRkJRWFZDTEVOQlFVTTdRVUZET1VJc1dVRkJTU3hoUVVGeFFpeFhRVUZYTzBGQlEzQkRMRmxCUVVrc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NSMEZCUnp0QlFVTjZRaXhwUWtGQlR5eERRVUZETEVWQlFVVXNhVUpCUVdsQ0xFVkJRVVVzVVVGQlVTeFBRVUZMTEZkQlFWY3NTMEZCU3l4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM0JGTEhWQ1FVRmhMRmRCUVZjN1FVRkJRU3hSUVVNeFFqdEJRVU5CTEdWQlFVOHNORUpCUVRSQ0xFVkJRVU1zV1VGQldTeE5RVUZOTEZkQlFWY3NUVUZCVFN4WFFVRlZMRU5CUVVNN1FVRkJRU3hOUVVOd1JqdEJRVVZLTEUxQlFVMHNNa0pCUVRKQ0xFTkJRVU1zYjBKQlFXOURPMEZCUVVFN1FVRkJRU3huUTBGRmRFTXNaVUZCWlR0QlFVRkJMR3RDUVVNM1FpeGhRVUZoTEN0Q1FVRXJRaXhMUVVGTExHVkJRV1VzUTBGQlF6dEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMR0ZCU1hSRkxHVkJRV1U3UVVGQlFUdEJRVVUxUWl4TlFVRk5MSE5DUVVGelFpeERRVUZETEZsQlFYTkRPMEZCUTJwRkxHTkJRVTBzYTBKQlFXdENMRkZCUVZFN1FVRkRhRU1zWTBGQlRTeFpRVUZ6UWl4RFFVRkRPMEZCUXpkQ0xHbENRVUZUTEVsQlFVa3NSMEZCUnl4SlFVRkpMR2xDUVVGcFFpeEZRVUZGTEVkQlFVYzdRVUZEZUVNc1owSkJRVTBzWjBKQlFXZENMRkZCUVZFc1EwRkJReXhGUVVGRkxHRkJRV0VzVjBGQlZ5eHRRa0ZCYlVJN1FVRkROVVVzWTBGQlNTeHZRa0ZCYjBJc1IwRkJSenRCUVVONlFpeHpRa0ZCVlN4TFFVRkxMR0ZCUVdFN1FVRkJRU3hWUVVNNVFpeFhRVUZYTEUxQlFVMHNSMEZCUnp0QlFVTnNRaXh6UWtGQlZTeExRVUZMTEhkQ1FVRjNRaXhEUVVGRExGRkJRVkVzWVVGQllTeEpRVUZKTzBGQlFVRXNWVUZEYmtVc1YwRkJWeXhOUVVGTkxHdENRVUZyUWl4SFFVRkhPMEZCUTNCRExITkNRVUZWTEV0QlFVc3NWVUZCVlN4aFFVRmhMRWxCUVVrN1FVRkJRU3hWUVVNMVF5eFBRVUZQTzBGQlEwd3NjMEpCUVZVc1MwRkJTeXcyUWtGQk5rSXNRMEZCUXl4UFFVRlBMR0ZCUVdFc1NVRkJTVHRCUVVGQkxGVkJRM1pGTzBGQlFVRXNVVUZEUmp0QlFVTkJMR1ZCUVU4N1FVRkJRU3gzUkVGREswTXNVVUZCVVN4RFFVRkRMRVZCUVVVc1MwRkJTeXhQUVVGUE8wRkJRVUVzVlVGRGNrVXNWVUZCVlN4TFFVRkxMRWxCUVVrc1EwRkJRenRCUVVGQk8wRkJRVUVzVFVGRk9VSTdRVUZGUVN4TlFVRk5MSGxDUVVGNVFpeERRVUZETEZGQlFTdENMR1ZCUVRaRE8wRkJRekZITEdOQlFVMHNZVUZCWVN4UFFVRlBMRU5CUVVNc1JVRkJSVHRCUVVNM1FpeGpRVUZOTEZsQlFWa3NWVUZCVlN4TFFVRkxMRlZCUVZVN1FVRkRNME1zWTBGQlRTeFhRVUZYTEU5QlFVOHNRMEZCUXl4RlFVRkZPMEZCUXpOQ0xHTkJRVTBzVDBGQlR5eFZRVUZWTEdOQlFXTXNWMEZCVnl4TlFVRk5MRmRCUVZjc1RVRkJUVHRCUVVOMlJTeGpRVUZOTEZWQlFWVXNTVUZCU1N4TlFVRnhRaXhYUVVGWExGVkJRVlU3UVVGRE9VUXNZMEZCVFN4UlFVRlJMR05CUVdNc1UwRkJVeXhWUVVGVkxGZEJRVmNzVFVGQlRUdEJRVU5vUlN4alFVRk5MR3RDUVVGclFpeEpRVUZKTEUxQlFXTXNWMEZCVnl4VlFVRlZPMEZCUXk5RUxHTkJRVTBzYjBKQlFXdERMRU5CUVVNN1FVRkRla01zWTBGQlRTeGxRVUV5UWl4RFFVRkRPMEZCUTJ4RExGbEJRVWtzWTBGQll6dEJRVU5zUWl4alFVRk5MR3RDUVVGdlF5eERRVUZETEVWQlFVTXNkVUpCUVhWQ0xFMUJRVTBzVlVGQlV5eERRVUZETzBGQlEyNUdMR2xDUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEZkQlFWY3NXVUZCV1N4TFFVRkxPMEZCUXpsRExIbENRVUZsTEZkQlFWY3NWMEZCVnl4RFFVRkRPMEZCUTNSRExEQkNRVUZuUWl4RFFVRkRMRWxCUVVrN1FVRkRja0lzWjBKQlFVMHNZMEZCWXl4WFFVRlhMRTFCUVUwN1FVRkRja01zYzBKQlFWa3NWMEZCVnl4SlFVRkpMRWxCUVVrc1YwRkJWeXhYUVVGWExFTkJRVU03UVVGRGRFUXNkVUpCUVdFc1MwRkJTeXhYUVVGWE8wRkJRemRDTEd0Q1FVRlJMRU5CUVVNc1NVRkJTU3hsUVVGbExGTkJRVk1zUTBGQlF5eEpRVUZKTEZWQlFWVXNXVUZCV1N4TlFVRk5PMEZCUTNSRkxEUkNRVUZyUWl4TFFVRkxMRVZCUVVNc1RVRkJUU3hoUVVGaExFTkJRVU1zUjBGQlJ5eFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRk5CUVZFc1EwRkJRenRCUVVGQkxGRkJRemxGTzBGQlEwRXNkMEpCUVdkQ08wRkJRVUVzVlVGRFdpeEZRVUZETEhWQ1FVRjFRaXhOUVVGTkxHZENRVUZsTzBGQlFVRXNWVUZCUnl4SFFVRkhMREpDUVVFeVFpeFpRVUZaTEVkQlFVY3NXVUZCV1R0QlFVRkJMRkZCUVVNN1FVRkRPVWNzWTBGQlRTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQkswSTdRVUZCUVN4SlFVVndSQ3hoUVVGaExHZENRVUZuUWl4alFVRmpMRXRCUVVzc1JVRkRNME1zWjBKQlFXZENMSE5DUVVGelFpeFBRVUZQTEdkQ1FVRm5RaXhOUVVGTkxFVkJRMjVGTEdsQ1FVRnBRaXhQUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETzBGQlFVRXNTVUZETVVNc2VVSkJRWGxDTEdkQ1FVRm5RaXhOUVVGTkxFTkJRVU03UVVGQlFTeEpRVU5vUkN4dlFrRkJiMElzVDBGQlR5eERRVUZETzBGQlFVRTdRVUZCUVN4SlFVVTFRaXhoUVVGaExGVkJRVlVzUTBGQlF6dEJRVUZCTEUxQlEzUkNMR0ZCUVdFc2MwTkJRWE5ETEhGQ1FVRnhRaXhEUVVGRE8wRkJRVUU3UVVGQlFTeHZRa0ZGTTBRc1RVRkJUU3huUWtGQlowSXNXVUZCV1N4RFFVRkRPMEZCUVVFc2EwSkJRM0pETEUxQlFVMHNWMEZCVnl4WFFVRlhMRWxCUVVrc1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFTeHBRa0ZIYkVNc1lVRkJZU3dyUWtGQkswSXNjMEpCUVhOQ0xHZENRVUZuUWl4TlFVRk5MRU5CUVVNN1FVRkJRU3hSUVVOc1J5eE5RVUZOTEZkQlFWY3NWMEZCVnl4TlFVRk5MRTlCUVU4c1EwRkJRenRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVWxvUkN4bFFVRlBPMEZCUVVFc1ZVRkRUQ3hOUVVGTk8wRkJRVUVzVlVGRFRpeGhRVUZoTEVWQlFVTXNUVUZCVFN4WFFVRlhMRlZCUVZVc2JVSkJRVzFDTEVOQlFVTXNUVUZCVFN4RlFVRkRPMEZCUVVFc1ZVRkRjRVU3UVVGQlFTeFZRVU5CTEZsQlFWa3NUMEZCVHp0QlFVRkJMRmxCUTJwQ0xGTkJRVk03UVVGQlFTeFpRVU5VTEdWQlFXVXNSVUZCUXl4SFFVRkhMRXRCUVVzN1FVRkJRU3hqUVVGTExGbEJRVms3UVVGQlFUdEJRVUZCTEZsQlFYVkNMRVZCUVVNN1FVRkJRU3haUVVOcVJUdEJRVUZCTEZWQlEwWTdRVUZCUVN4UlFVTkdPMEZCUVVFc1RVRkRSanRCUVVWUExFMUJRVTBzVVVGQlVTeERRVUZETEZOQlFYbENMR1ZCUVhORE8wRkJRMjVHTEZGQlFVRkJMR2xDUVVGbExGRkJRVkVzVFVGQlRUdEJRVU0zUWl4alFVRk5MRzlDUVVOR0xGRkJRVkVzVDBGQlR5eFhRVUZYTEVsQlFVa3NZVUZCWVN4blEwRkJaME1zVVVGQlVTeFJRVUZSTEZWQlFWVTdRVUZEZWtjc1owSkJRVkVzVVVGQlVTeDFRa0ZCZFVJc1VVRkJVU3hSUVVGUkxHbENRVUZwUWl4SFFVRkhMRVZCUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETzBGQlFVRXNUVUZETVVZN1FVRkZUeXhOUVVGTkxIVkNRVUYxUWl4RFFVRkRMR1ZCUVhsRU8wRkJRelZHTEdOQlFVMHNUMEZCVHl4WFFVRlhPMEZCUTNoQ0xHTkJRVTBzWVVGQmRVSXNWMEZCVnp0QlFVTjRReXhqUVVGTkxHRkJRV0VzVjBGQlZ5eGhRVUYxUWl4SlFVRkpMRmRCUVZjc1UwRkJVeXhYUVVGWE8wRkJRM2hHTEZsQlFVa3NaVUZCWlN4WFFVRlhMRkZCUVZFN1FVRkRjRU1zWjBKQlFVMHNTVUZCU1N4TlFVRk5MQ3REUVVFclF6dEJRVUZCTEZGQlEycEZPMEZCUTBFc1pVRkJUeXcwUWtGQk5FSXNSVUZCUXl4TlFVRk5MRmxCUVZrc1YwRkJWU3hEUVVGRE8wRkJRVUVzVFVGRGJrVTdRVUZCUVR0QlFVRkJPenM3UVVOMFNVRXNUVUZWVFN4WlFVbEJReXhyUWtGNVFrRkRMR2xDUVZWUExIVkNRWFZEUVR0QlFYaEdZanRCUVVGQk8wRkJRVUU3UVVGSFFUdEJRVVZCTzBGQlIwRTdRVUZGUVN4TlFVRk5MR0ZCUVdFc1EwRkJReXh6UWtGRGFFSXNUVUZCVFN4TFFVRkxMR3RDUVVGclFpeHBRa0ZCYVVJc1IwRkJSeXhOUVVGTk8wRkJSek5FTEUxQlFVMUVMRzFDUVVGcFFpeERRVUZETEZkQlFYZERPMEZCUXpsRUxGbEJRVWtzUTBGQlF5eFZRVUZWTEU5QlFVOHNWMEZCVnl4SFFVRkhPMEZCUTJ4RExHZENRVUZOTEVsQlFVa3NUVUZCVFN4NVFrRkJlVUk3UVVGQlFTeFJRVU16UXp0QlFVVkJMRmxCUVVrc1QwRkJUeXhEUVVGRExFVkJRVVVzT0VKQlFTdENMRTlCUVU4c1EwRkJReXhGUVVGRkxEaENRVU51UkN4UFFVRlBMRU5CUVVNc1JVRkJSU3c0UWtGQk9FSTdRVUZETVVNc1owSkJRVTBzU1VGQlNTeE5RVUZOTEhWRVFVRjFSRHRCUVVGQkxGRkJRM3BGTzBGQlJVRXNXVUZCU1N4UFFVRlBMRU5CUVVNc1JVRkJSU3cwUWtGQk5rSTdRVUZEZWtNc1owSkJRVTBzU1VGQlNTeE5RVUZOTEcxRVFVRnRSRHRCUVVGQkxGRkJRM0pGTzBGQlJVRXNXVUZCU1N4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExGZEJRVmNzUjBGQlJ6dEJRVU12UWl4blFrRkJUU3hKUVVGSkxFMUJRVTBzYjBOQlFXOURPMEZCUVVFc1VVRkRkRVE3UVVGRlFTeGpRVUZOTEZWQlFUWkNMRmRCUVZjc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGRmRrUXNXVUZCU1N4UlFVRlJMRmRCUVZjc1QwRkJUeXhEUVVGRExFVkJRVVVzUzBGQlN5eFJRVUZSTzBGQlF6VkRMR2RDUVVGTkxFbEJRVWtzVFVGQlRTeDFSa0ZCZFVZN1FVRkJRU3hSUVVONlJ6dEJRVUZCTEUxQlEwWTdRVUZGUVN4TlFVRk5ReXhyUWtGQmFVSXNRMEZCUXl4WlFVRXJRaXhaUVVGclJEdEJRVU4yUnl4alFVRk5MR05CUVhkQ0xFTkJRVU03UVVGRkwwSXNhVUpCUVZNc1NVRkJTU3hIUVVGSExFbEJRVWtzVjBGQlZ5eFJRVUZSTEVWQlFVVXNSMEZCUnp0QlFVTXhReXh6UWtGQldTeExRVUZMTEZkQlFWY3NRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRVUVzVVVGRE4wTTdRVUZGUVN4bFFVRlBPMEZCUVVFc1RVRkRWRHRCUVVWUExFMUJRVTBzZDBKQlFYZENMRU5CUVVNc1YwRkJLME03UVVGRGJrWXNZMEZCVFN4aFFVRmhMRTlCUVU4c1EwRkJReXhGUVVGRk8wRkJRemRDTEdOQlFVMHNWVUZCTmtJc1YwRkJWeXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU4yUkN4alFVRk5MR05CUVdOQkxHZENRVUZsTEZsQlFWa3NUMEZCVHp0QlFVTjBSQ3hqUVVGTkxHRkJRV0VzVlVGQlZTeExRVUZMTEZkQlFWYzdRVUZGTjBNc1kwRkJUU3hYUVVGWExFOUJRVThzUTBGQlF5eEZRVUZGTzBGQlF6TkNMR05CUVUwc1VVRkJVU3hqUVVGakxGTkJRVk1zVlVGQlZTeFhRVUZYTEUxQlFVMDdRVUZEYUVVc1kwRkJUU3hUUVVGVExHVkJRV1VzVlVGQlZTeFZRVUZWTEZsQlFWa3NUVUZCVFR0QlFVVndSU3hqUVVGTkxHdENRVUZyUWl4RFFVRkRMR2xDUVVFclFqdEJRVUZCTERKQ1FVTXZRaXhOUVVGTkxGRkJRVkVzUjBGQlJ5eFZRVUZWTEVOQlFVTTdRVUZCUVN4UlFVTXZReXhoUVVGaExHZENRVUZuUWl4bFFVRmxMRXRCUVVzc1JVRkJSU3hwUWtGQmFVSXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkJRU3hSUVVOc1JpeGhRVUZoTEZWQlFWVXNRMEZCUXp0QlFVRkJMRkZCUTNoQ0xHRkJRV0VzYzBOQlFYTkRMSE5DUVVGelFpeERRVUZETzBGQlFVRXNOa0pCUTNKRUxFOUJRVThzWjBKQlFXZENMRmxCUVZrc1EwRkJRenRCUVVGQkxESkNRVU4wUXl4TlFVRk5MRXRCUVVzc1QwRkJUenRCUVVGQkxEUkNRVU5xUWl4WFFVRlhMRTFCUVUwN1FVRkJRU3cwUWtGRGFrSXNUVUZCVFN4WFFVRlhMSGRDUVVGM1FpeEhRVUZITEVOQlFVTTdRVUZCUVN4blEwRkRla01zVDBGQlR5eFhRVUZYTEd0Q1FVRnJRaXhIUVVGSExFTkJRVU03UVVGQlFUdEJRVUZCTEZWQlJUbEVMRTFCUVUwc1YwRkJWeXhwUWtGQmFVSXNTMEZCU3l4cFFrRkJhVUlzUTBGQlF6dEJRVUZCTzBGQlFVRXNVVUZGTTBRc1QwRkJUeXhaUVVGWkxHTkJRV01zVFVGQlRTeGhRVUZoTEdWQlFXVXNRMEZCUXl4RFFVRkRPMEZCUVVFN1FVRkhNMFVzWlVGQlR6dEJRVUZCTEZWQlEwd3NUVUZCVFR0QlFVRkJMRlZCUTA0c1lVRkJZU3hGUVVGRExFMUJRVTBzUjBGQlJ5eFBRVUZQTEVsQlFVa3NiVUpCUVcxQ0xFTkJRVU1zVFVGQlRTeEZRVUZETzBGQlFVRXNWVUZETjBRc1dVRkJXU3hQUVVGUE8wRkJRVUVzV1VGRGFrSXNVMEZCVXl4RFFVRkRMRVZCUVVNc1RVRkJUU3hoUVVGaExGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNVMEZCVVN4RFFVRkRPMEZCUVVFc1dVRkRNMFFzWlVGQlpTeEZRVUZETEVkQlFVY3NTMEZCU3p0QlFVRkJMR05CUVVzc1lVRkJZVHRCUVVGQk8wRkJRVUVzV1VGQmRVSXNSVUZCUXp0QlFVRkJMRmxCUTJ4RkxHbENRVU5KTEVOQlFVTXNSVUZCUXl4MVFrRkJkVUlzVFVGQlRTeFhRVUZWTEVkQlFVY3NSMEZCUnl3eVFrRkJNa0lzVDBGQlR5eERRVUZETEVWQlFVVXNUVUZCVFN4WFFVRlhMRU5CUVVNN1FVRkJRU3hWUVVNMVJ6dEJRVUZCTEZWQlEwRTdRVUZCUVN4UlFVTkdPMEZCUVVFc1RVRkRSanRCUVVWUExFMUJRVTBzVDBGQlR5eERRVUZETEZsQlFXdERPMEZCUTNKRUxGRkJRVUZFTEdsQ1FVRmxMRkZCUVZFc1RVRkJUVHRCUVVNM1FpeG5Ra0ZCVVN4UlFVRlJMSE5DUVVGelFpeFJRVUZSTEUxQlFVMHNSMEZCUnl4RlFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF6dEJRVUZCTEUxQlEzUkZPMEZCUVVFN1FVRkJRVHM3TzBGRE0wWkJMRTFCVlUwc05FSkJORVJCTERCQ1FXOURUenRCUVRGSFlqdEJRVUZCTzBGQlFVRTdRVUZIUVR0QlFVVkJPMEZCUjBFN1FVRkZRU3hOUVVGTkxEWkNRVU5HTEVOQlFVTXNZMEZCTkVJc1VVRkJLMElzV1VGQkswSXNZVUZETVVZc1pVRkJkVUk3UVVGRGRFSXNZMEZCVFN4VFFVRlRMR1ZCUVdVc1pVRkJaU3haUVVGWkxGZEJRVmNzVVVGQlVTeERRVUZETzBGQlF6ZEZMR05CUVUwc1NVRkJTU3hqUVVGakxGVkJRVlVzVDBGQlR5eERRVUZETEVWQlFVVXNWVUZCVlN4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExGRkJRVkVzUTBGQlF6dEJRVU01UlN4alFVRk5MRWxCUVVrc1kwRkJZeXhWUVVGVkxFOUJRVThzUTBGQlF5eEZRVUZGTEZWQlFWVXNUMEZCVHl4RFFVRkRMRVZCUVVVc1MwRkJTeXhSUVVGUkxFTkJRVU03UVVGRE9VVXNZMEZCVFN4SlFVRkpMR05CUVdNc1ZVRkJWU3hQUVVGUExFTkJRVU1zUlVGQlJTeFZRVUZWTEU5QlFVOHNRMEZCUXl4RlFVRkZMRXRCUVVzc1VVRkJVU3hEUVVGRE8wRkJSVGxGTEZsQlFVazdRVUZEU2l4alFVRk5MR0ZCUVdFc1EwRkJRMFVzU1VGQlYwTXNTVUZCVjBNc1QwRkJZeXhWUVVGVlJDeEZRVUZETEV0QlFVdEVMRVZCUVVNc1MwRkJTMFVzUlVGQlF6dEJRVU12UlN4WlFVRkpMRU5CUVVNc1lVRkJZVHRCUVVOb1FpeDFRa0ZCWVN4UFFVRlBPMEZCUVVFc1dVRkRhRUk3UVVGQlFTeFpRVU5CTEZkQlFWY3NSVUZCUlN4WlFVRlpMRmxCUVZrc1IwRkJSeXhGUVVGRkxGbEJRVmtzV1VGQldTeEhRVUZITEVWQlFVVXNXVUZCV1N4WlFVRlpMRU5CUVVNN1FVRkJRU3hWUVVGRE8wRkJRVUVzVVVGRGRrY3NUMEZCVHp0QlFVTk1MR2RDUVVGTkxHMUNRVUZ0UWl4RFFVRkRMRkZCUVdkQ0xFZEJRVmNzVjBGQlZ5eFBRVUZQTzBGQlEzSkZMR3RDUVVGTkxHTkJRV01zYVVKQlFXbENMRU5CUVVNc1owSkJRV2RDTEVOQlFVTTdRVUZEZGtRc2EwSkJRVTBzWTBGQll5eHBRa0ZCYVVJc1EwRkJReXhuUWtGQlowSXNRMEZCUXp0QlFVVjJSQ3hyUWtGQlRTeGpRVUZqTEhOQ1FVRnpRaXhEUVVGRExEWkNRVUUyUWl4RFFVRkRPMEZCUTNwRkxHMUNRVUZQTzBGQlFVRXNaME5CUTJVc1EwRkJReXhOUVVGTkxFOUJRVThzWjBKQlFXZENMSEZDUVVGeFFpeERRVUZETEVkQlFVY3NRMEZCUXp0QlFVRkJMREJDUVVNNVJDeERRVUZETEUxQlFVMHNSVUZCUlN3eVFrRkJNa0lzYVVKQlFXbENMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU03UVVGQlFTd3dRa0ZEYWtVc1EwRkJReXhOUVVGTkxFVkJRVVVzTWtKQlFUSkNMR2xDUVVGcFFpeERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRPMEZCUVVFc01FSkJRMnBGTEVOQlFVTXNUVUZCVFN4RlFVRkZMREpDUVVFeVFpeHBRa0ZCYVVJc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF6dEJRVUZCTEhsQ1FVTnNSU3hEUVVGRExHTkJRV01zUTBGQlF6dEJRVUZCTEhsQ1FVTm9RaXhEUVVGRExHTkJRV01zUTBGQlF6dEJRVUZCTEhsQ1FVTm9RaXhEUVVGRExHTkJRV01zUTBGQlF6dEJRVUZCTERaQ1FVTmFMRU5CUVVNc1kwRkJZeXhEUVVGRE8wRkJRVUVzTmtKQlEyaENMRU5CUVVNc1kwRkJZeXhEUVVGRE8wRkJRVUVzTmtKQlEyaENMRU5CUVVNc1kwRkJZeXhEUVVGRE8wRkJRVUVzWTBGREwwSXNUVUZCVFN4SlFVRkpMRU5CUVVNc1QwRkJUeXhSUVVGUkxFbEJRVWtzVjBGQlZ5eGhRVUZoTEdGQlFXRXNWMEZCVnl4RFFVRkRPMEZCUVVFN1FVRkJRU3hWUVVWeVJqdEJRVU5CTEdOQlFVa3NOa0pCUVRoQ08wRkJRMmhETEhsQ1FVRmhPMEZCUVVFN1FVRkJRU3hqUVVWVUxHbENRVUZwUWl4UlFVRlJMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRVUVzWTBGRGJFTXNhVUpCUVdsQ0xGRkJRVkVzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZCUVN4alFVTnNReXhwUWtGQmFVSXNVVUZCVVN4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVGQkxHTkJRMnhETEdsQ1FVRnBRaXhSUVVGUkxFZEJRVWNzUzBGQlN5eERRVUZETzBGQlFVRTdRVUZCUVN4VlFVVjRReXhQUVVGUE8wRkJRMHdzZVVKQlFXRTdRVUZCUVN4alFVTlVMR2xDUVVGcFFpd3lRa0ZCTWtJc1EwRkJReXhEUVVGRE8wRkJRVUVzWTBGRE9VTXNhVUpCUVdsQ0xESkNRVUV5UWl4RFFVRkRMRU5CUVVNN1FVRkJRU3hqUVVNNVF5eHBRa0ZCYVVJc01rSkJRVEpDTEVOQlFVTXNRMEZCUXp0QlFVRkJMR05CUXpsRExHbENRVUZwUWl3eVFrRkJNa0lzUTBGQlF5eERRVUZETzBGQlFVRTdRVUZCUVN4VlFVVndSRHRCUVVGQkxGRkJRMFk3UVVGRlFTeGxRVUZQTzBGQlFVRXNWVUZEU0N4aFFVRmhMR2RDUVVGblFpeFpRVUZaTEV0QlFVc3NSVUZCUlN4cFFrRkJhVUlzUjBGQlJ5eEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUVVFc1ZVRkRha1lzWVVGQllTeFZRVUZWTEVOQlFVTTdRVUZCUVN4VlFVTjRRaXhoUVVGaExITkRRVUZ6UXl4dFFrRkJiVUlzUTBGQlF6dEJRVUZCTEZWQlEzWkZMRlZCUVZVN1FVRkJRVHRCUVVGQkxFMUJSV2hDTzBGQlJVb3NUVUZCVFN3eVFrRkJNa0lzUTBGQlF5eFhRVUVyUXp0QlFVTXZSU3hqUVVGTkxGRkJRVkVzVDBGQlR5eERRVUZETEVWQlFVVTdRVUZEZUVJc1kwRkJUU3hSUVVGUkxFOUJRVThzUTBGQlF5eEZRVUZGTzBGQlEzaENMR05CUVUwc1VVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJUdEJRVU40UWl4alFVRk5MR2xDUVVGcFFpeFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVVnFReXhqUVVGTkxHTkJRV01zUlVGQlJTeFZRVUZWTEZOQlFWTXNUMEZCVHl4TFFVRkxMRXRCUVVzc1ZVRkJWU3hUUVVGVExFOUJRVThzUzBGQlN6dEJRVU42Uml4WlFVRkpMR05CUVdNN1FVRkRiRUlzV1VGQlNTeGhRVUZoTEZWQlFWVXNTMEZCU3l4TFFVRkxPMEZCUjNKRExGbEJRVWtzWVVGQllUdEJRVU5tTEdkQ1FVRk5MR3RDUVVGclFpeGpRVUZqTEZWQlFWVXNZMEZCWXl4VlFVRlZMRTlCUVU4c1QwRkJUeXhMUVVGTExFZEJRVWtzVDBGQlR5eExRVUZMTzBGQlF6TkhMR05CUVVrc1EwRkJReXhwUWtGQmFVSTdRVUZEY0VJc2EwSkJRVTBzU1VGQlNTeE5RVUZOTERaRFFVRTRRenRCUVVGQkxGVkJRMmhGTzBGQlEwRXNkMEpCUVdNN1FVRkRaQ3gxUWtGQllTeFZRVUZWTEV0QlFVc3NWMEZCVnp0QlFVRkJMRkZCUTNwRE8wRkJSVUVzWTBGQlRTeFZRVUZWTEV0QlFVc3NTMEZCU3l4aFFVRmhMRU5CUVVNN1FVRkZlRU1zWlVGQlR6dEJRVUZCTEZWQlEwd3NUVUZCVFR0QlFVRkJMRlZCUTA0c1lVRkJZU3hGUVVGRExHMUNRVUZ0UWl4RFFVRkRMRkZCUVZFc1VVRkJVU3hOUVVGTkxFVkJRVU03UVVGQlFTeFZRVU42UkN4cFFrRkJhVUlzUTBGQlF5eHBRa0ZEWkN3eVFrRkJNa0lzWTBGQll5eFJRVUZSTEdGQlFXRXNZVUZCWVN4alFVRmpPMEZCUVVFc1ZVRkROMFlzV1VGQldTeFBRVUZQTzBGQlFVRXNXVUZEYWtJc1UwRkJVeXhEUVVGRExFVkJRVU1zVFVGQlRTeGhRVUZoTEZWQlFWVXNaVUZCWXl4RFFVRkRPMEZCUVVFc1dVRkRka1FzWlVGQlpTeEZRVUZETEVkQlFVY3NTMEZCU3p0QlFVRkJMR05CUVVzc1lVRkJZU3hMUVVFd1FqdEJRVUZCTzBGQlFVRXNXVUZCWjBJc1JVRkJRenRCUVVGQkxGbEJRM0pHTEdsQ1FVTkpMRU5CUVVNc1JVRkJReXgxUWtGQmRVSXNUVUZCVFN4UlFVRlBMRWRCUVVjc1IwRkJSeXd5UWtGQk1rSXNUMEZCVHl4UFFVRlBMRTlCUVU4c1YwRkJWeXhEUVVGRE8wRkJRVUVzVlVGRE9VYzdRVUZCUVN4UlFVTkdPMEZCUVVFc1RVRkRSanRCUVVWUExFMUJRVTBzVVVGQlVTeERRVUZETEZsQlFXdERPMEZCUTNSRUxHZENRVUZSTEZGQlFWRXNlVUpCUVhsQ0xGRkJRVkVzVFVGQlRTeERRVUZETzBGQlFVRXNUVUZETVVRN1FVRkJRVHRCUVVGQk96czdRVU0xUjBFc1RVRTJRMkU3UVVFM1EySTdRVUZCUVR0QlFVRkJPMEZCUjBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCVDA4c1RVRkJUU3d3UWtGQkswUXNiMEpCUVVrc1NVRkJTVHRCUVVGQkxGRkJRMnhHTEVOQlFVTXNUMEZCVHl4RFFVRlZMRWRCUVVjc1EwRkJRenRCUVVGQkxGRkJRM1JDTEVOQlFVTXNVVUZCVVN4RFFVRlZMRWxCUVVrc1EwRkJRenRCUVVGQkxGRkJRM2hDTEVOQlFVTXNVMEZCVXl4RFFVRlZMRXRCUVVzc1EwRkJRenRCUVVGQkxGRkJRekZDTEVOQlFVTXNUMEZCVHl4RFFVRlhMRWRCUVVjc1EwRkJRenRCUVVGQkxGRkJRM1pDTEVOQlFVTXNWVUZCVlN4RFFVRkRMRkZCUVZFc2QwSkJRWGRDTEVOQlFVTTdRVUZCUVN4UlFVTTNReXhEUVVGRExGVkJRVlVzUTBGQlF5eFJRVUZSTEhkQ1FVRjNRaXhEUVVGRE8wRkJRVUVzVVVGRE4wTXNRMEZCUXl4UlFVRlJMRU5CUVZVc1NVRkJTU3hEUVVGRE8wRkJRVUVzVVVGRGVFSXNRMEZCUXl4VFFVRlRMRU5CUVZVc1MwRkJTeXhEUVVGRE8wRkJRVUVzVVVGRE1VSXNRMEZCUXl4UlFVRlJMRU5CUVZVc1NVRkJTU3hEUVVGRE8wRkJRVUVzVVVGRGVFSXNRMEZCUXl4VFFVRlRMRU5CUVZVc1MwRkJTeXhEUVVGRE8wRkJRVUVzVVVGRE1VSXNRMEZCUXl4aFFVRmhMRU5CUVVNc1UwRkJVeXhEUVVGRE8wRkJRVUU3UVVGQlFTeFJRVVY2UWl4RFFVRkRMR1ZCUVdVc1EwRkJUU3hoUVVGclFpd3dRa0ZCTUVJc1EwRkJRenRCUVVGQkxGRkJRMjVGTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zVTBGQlV5eERRVUZETzBGQlFVRXNVVUZEYkVNc1EwRkJReXhYUVVGWExFTkJRVU1zVDBGQlR5eERRVUZETzBGQlFVRXNVVUZEY2tJc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4aFFVRmhMRU5CUVVNN1FVRkJRU3hSUVVOcVF5eERRVUZETEZGQlFWRXNRMEZCVlN4TlFVRmxMRzFDUVVGdFFpeERRVUZETzBGQlFVRXNVVUZEZEVRc1EwRkJReXhSUVVGUkxFTkJRVlVzU1VGQlNTeERRVUZETzBGQlFVRXNVVUZEZUVJc1EwRkJReXhSUVVGUkxFTkJRVlVzU1VGQlNTeERRVUZETzBGQlFVRXNVVUZEZUVJc1EwRkJReXhWUVVGVkxFTkJRVU1zVVVGQlVTeHhRa0ZCY1VJc1EwRkJRenRCUVVGQkxGRkJRekZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc2JVSkJRVzFDTEVOQlFVTTdRVUZCUVN4UlFVTndReXhEUVVGRExHbENRVUZwUWl4RFFVRkRMR1ZCUVdVc05FSkJRVFJDTEVOQlFVTTdRVUZCUVN4UlFVTXZSQ3hEUVVGRExFOUJRVThzUTBGQlZTeEhRVUZITEVOQlFVTTdRVUZCUVN4UlFVTjBRaXhEUVVGRExGRkJRVkVzUTBGQlZTeEpRVUZKTEVOQlFVTTdRVUZCUVN4UlFVTjRRaXhEUVVGRExGVkJRVlVzUTBGQlF5eFJRVUZSTEhGQ1FVRnhRaXhEUVVGRE8wRkJRVUVzVVVGRE1VTXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eGpRVUZqTERKQ1FVRXlRaXhEUVVGRE8wRkJRVUVzVVVGRE5VUXNRMEZCUXl4UFFVRlBMRU5CUVZjc1IwRkJSeXhEUVVGRE8wRkJRVUVzVVVGRGRrSXNRMEZCUXl4VlFVRlZMRU5CUVVNc1VVRkJVU3h4UWtGQmNVSXNRMEZCUXp0QlFVRkJMRkZCUXpGRExFTkJRVU1zVDBGQlR5eERRVUZWTEV0QlFXTXNiMEpCUVc5Q0xFTkJRVU03UVVGQlFTeFJRVU55UkN4RFFVRkRMRk5CUVZNc1EwRkJWeXhMUVVGTExFTkJRVU03UVVGQlFTeFJRVU16UWl4RFFVRkRMRTlCUVU4c1EwRkJWU3hIUVVGSExFTkJRVU03UVVGQlFTeFJRVU4wUWl4RFFVRkRMRTlCUVU4c1EwRkJWU3hIUVVGSExFTkJRVU03UVVGQlFTeFJRVU4wUWl4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGQlFTeFJRVU51UWl4RFFVRkRMRmxCUVZrc1EwRkJRME1zVTBGQlVTeERRVUZETzBGQlFVRXNVVUZEZGtJc1EwRkJReXhUUVVGVExFTkJRVlVzUzBGQlN5eERRVUZETzBGQlFVRXNVVUZETVVJc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeHRRa0ZCYlVJc1EwRkJRenRCUVVGQkxGRkJRM3BETEVOQlFVTXNWVUZCVlN4RFFVRkRMRkZCUVZFc2NVSkJRWEZDTEVOQlFVTTdRVUZCUVN4UlFVTXhReXhEUVVGRExHdENRVUZyUWl4RFFVRkRMR2RDUVVGblFpdzJRa0ZCTmtJc1EwRkJRenRCUVVGQkxGRkJRMnhGTEVOQlFVTXNVVUZCVVN4RFFVRlZMRWxCUVVrc1EwRkJRenRCUVVGQkxGRkJRM2hDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc2JVSkJRVzFDTEVOQlFVTTdRVUZCUVN4UlFVTndReXhEUVVGRExIRkNRVUZ4UWl4RFFVRk5MRzFDUVVGM1FpeG5RMEZCWjBNc1EwRkJRenRCUVVGQkxGRkJRM0pHTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVTBzWlVGQmIwSXNORUpCUVRSQ0xFTkJRVU03UVVGQlFTeFJRVU42UlN4RFFVRkRMRmRCUVZjc1EwRkJWeXhQUVVGUExFTkJRVU03UVVGQlFTeFJRVU12UWl4RFFVRkRMR3RDUVVGclFpeERRVUZYTEdOQlFXTXNRMEZCUXp0QlFVRkJMRkZCUXpkRExFTkJRVU1zWlVGQlpTeERRVUZWTEdGQlFYTkNMREJDUVVFd1FpeERRVUZETzBGQlFVRXNVVUZETTBVc1EwRkJReXg1UWtGQmVVSXNRMEZCUXl4WlFVRlpMRU5CUVVNN1FVRkJRU3hSUVVONFF5eERRVUZETEhOQ1FVRnpRaXhEUVVGRExGTkJRVk1zUTBGQlF6dEJRVUZCTEZGQlEyeERMRU5CUVVNc1lVRkJZU3hEUVVGVkxGZEJRVzlDTEc5Q1FVRnZRaXhEUVVGRE8wRkJRVUVzVVVGRGFrVXNRMEZCUXl4UlFVRlJMRU5CUVZjc1NVRkJTU3hEUVVGRE8wRkJRVUVzVVVGRGVrSXNRMEZCUXl4bFFVRmxMRU5CUVZjc1YwRkJWeXhEUVVGRE8wRkJRVUVzVVVGRGRrTXNRMEZCUXl4UFFVRlBMRU5CUVZVc1IwRkJSeXhEUVVGRE8wRkJRVUVzVVVGRGRFSXNRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJRVUVzVVVGRGJrSXNRMEZCUXl4bFFVRmxMRU5CUVVNc1lVRkJZU3d3UWtGQk1FSXNRMEZCUXp0QlFVRkJPMEZCUVVFc1VVRkZla1FzUTBGQlF5eFhRVUZYTEVOQlFVMHNVMEZCWXl4elFrRkJjMElzUTBGQlF6dEJRVUZCTEZGQlEzWkVMRU5CUVVNc1QwRkJUeXhEUVVGWExFZEJRVWNzUTBGQlF6dEJRVUZCTEZGQlEzWkNMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNiMEpCUVc5Q0xHbERRVUZwUXl4RFFVRkRPMEZCUVVFc1VVRkRPVVVzUTBGQlF5eFBRVUZQTEVOQlFWVXNSMEZCUnl4RFFVRkRPMEZCUVVFc1VVRkRkRUlzUTBGQlF5eFBRVUZQTEVOQlFWVXNSMEZCUnl4RFFVRkRPMEZCUVVFc1VVRkRkRUlzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRPMEZCUVVFc1VVRkRZaXhEUVVGRExFOUJRVThzUTBGQlZ5eEhRVUZITEVOQlFVTTdRVUZCUVN4UlFVTjJRaXhEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEVOQlFVTTdRVUZCUVN4UlFVTnFRaXhEUVVGRExHTkJRV01zUTBGQlZTeFZRVUZWTEVOQlFVTTdRVUZCUVN4UlFVTndReXhEUVVGRExHRkJRV0VzUTBGQlF5eFRRVUZUTEVOQlFVTTdRVUZCUVN4UlFVTjZRaXhEUVVGRExHTkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTTdRVUZCUVN4UlFVTXpRaXhEUVVGRExHRkJRV0VzUTBGQlF5eFRRVUZUTEVOQlFVTTdRVUZCUVN4UlFVTjZRaXhEUVVGRExHRkJRV0VzUTBGQlF5eFRRVUZUTEVOQlFVTTdRVUZCUVN4UlFVTjZRaXhEUVVGRExHTkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTTdRVUZCUVN4UlFVTXpRaXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTTdRVUZCUVN4UlFVTjJRaXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTTdRVUZCUVN4UlFVTjJRaXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRmxCUVZrc1EwRkJRenRCUVVGQkxGRkJReTlDTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zWlVGQlpTeERRVUZETzBGQlFVRXNVVUZEY2tNc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4bFFVRmxMRU5CUVVNN1FVRkJRU3hSUVVOeVF5eERRVUZETEZGQlFWRXNRMEZCVlN4SlFVRkpMRU5CUVVNN1FVRkJRU3hSUVVONFFpeERRVUZETEZWQlFWVXNRMEZCUXl4UlFVRlJMSEZDUVVGeFFpeERRVUZETzBGQlFVRXNVVUZETVVNc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4bFFVRmxMRU5CUVVNN1FVRkJRU3hSUVVOeVF5eERRVUZETEZkQlFWY3NRMEZCVlN4UFFVRlBMRU5CUVVNN1FVRkJRU3hSUVVNNVFpeERRVUZETEU5QlFVOHNRMEZCVlN4SFFVRkhMRU5CUVVNN1FVRkJRU3hSUVVOMFFpeERRVUZETEZGQlFWRXNRMEZCVlN4SlFVRkpMRU5CUVVNN1FVRkJRU3hSUVVONFFpeERRVUZETEZOQlFWTXNRMEZCUXl4UFFVRlBMRzlDUVVGdlFpeERRVUZETzBGQlFVRXNVVUZEZGtNc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4aFFVRmhMRU5CUVVNN1FVRkJRU3hSUVVNeFF5eERRVUZETEZOQlFWTXNRMEZCUXl4UFFVRlBMRzlDUVVGdlFpeERRVUZETzBGQlFVRXNVVUZEZGtNc1EwRkJReXhSUVVGUkxFTkJRVlVzU1VGQlNTeERRVUZETzBGQlFVRXNVVUZEZUVJc1EwRkJReXhYUVVGWExFTkJRVU1zVTBGQlV5eHpRa0ZCYzBJc1EwRkJRenRCUVVGQkxGRkJRemRETEVOQlFVTXNUMEZCVHl4RFFVRlhMRWRCUVVjc1EwRkJRenRCUVVGQkxGRkJRM1pDTEVOQlFVTXNUMEZCVHl4RFFVRlZMRWRCUVVjc1EwRkJRenRCUVVGQkxGRkJRM1JDTEVOQlFVTXNVVUZCVVN4RFFVRlZMRWxCUVVrc1EwRkJRenRCUVVGQkxGRkJRM2hDTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVlVzYVVKQlFUQkNMRzlDUVVGdlFpeERRVUZETzBGQlFVRXNVVUZETjBVc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETzBGQlFVRXNVVUZEWml4RFFVRkRMR0ZCUVdFc1EwRkJReXhYUVVGWExIZENRVUYzUWl4RFFVRkRPMEZCUVVFc1VVRkRia1FzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUVVFc1RVRkRia0lzUTBGQlF6dEJRVUZCTzBGQlFVRTdPenRCUTNwSlJDeE5RVzlDWVR0QlFYQkNZanRCUVVGQk8wRkJRVUU3UVVGSFFUdEJRVWRCTzBGQlJVRTdRVUZaVHl4TlFVRk5MR2xDUVVGT0xFMUJRWEZDTzBGQlFVRXNVVUZKTVVJc1dVRkJiMElzVTBGQmQwSTdRVUZCZUVJN1FVRkRiRUlzWlVGQlN5eFBRVUZQTEc5Q1FVRkpMRWxCUVVrN1FVRkRjRUlzWlVGQlN5eHJRa0ZCYTBJN1FVRkJRU3hSUVVONlFqdEJRVUZCTEZGQlEwRXNXVUZCV1N4TFFVRnJRenRCUVVNMVF5eHBRa0ZCVHl4TFFVRkxMRXRCUVVzc1NVRkJTU3hIUVVGSE8wRkJRVUVzVVVGRE1VSTdRVUZCUVN4UlFVTkJMRmxCUVZrc1MwRkJZeXhWUVVFd1FqdEJRVU5zUkN4bFFVRkxMRXRCUVVzc1NVRkJTU3hMUVVGTExGRkJRVkU3UVVGQlFTeFJRVU0zUWp0QlFVRkJMRkZCUTBFc1NVRkJTU3hsUVVGNVFpeFJRVUZ0UWl4VFFVRnZRaXhsUVVOb1JTeHpRa0ZCTUVRN1FVRkROVVFzTWtKQlFXbENMR05CUVdNc1dVRkJXU3hKUVVGSk8wRkJReTlETEdkQ1FVRk5MRk5CUVZNc1MwRkJTeXhSUVVGUk8wRkJRelZDTEdkQ1FVRk5MSEZDUVVGeFFpeExRVUZMTEZGQlFWRXNjMEpCUVhOQ08wRkJRemxFTEdWQlFVc3NVVUZCVVN4bFFVRmxMRXRCUVVzc1VVRkJVU3gzUWtGQmQwSXNRMEZCUXp0QlFVTnNSU3huUWtGQlRTeFZRVUZWTEVOQlFVTTdRVUZEYWtJc2NVSkJRVmNzVTBGQlV5eFJRVUZSTzBGQlF6RkNMRzlDUVVGUkxFdEJRVXNzUlVGQlF5eFRRVUZUTEZGQlFWRXNVVUZCVVN4VlFVRlZMRVZCUVVNc1VVRkJVU3hOUVVGTkxFOUJRVTBzUlVGQlF5eERRVUZETzBGQlFVRXNWVUZETVVVN1FVRkRRU3h4UWtGQlZ5eFZRVUZWTEZOQlFWTTdRVUZETlVJc2IwSkJRVkVzUzBGQlN5eEZRVUZETEZOQlFWTXNVVUZCVVN4UlFVRlJMRlZCUVZVc1JVRkJReXhSUVVGUkxFOUJRVThzVDBGQlRTeEZRVUZETEVOQlFVTTdRVUZCUVN4VlFVTXpSVHRCUVVOQkxHTkJRVWtzYzBKQlFYTkNPMEZCUTNoQ0xHOUNRVUZSTEV0QlFVc3NSVUZCUXl4VFFVRlRMRkZCUVZFc1VVRkJVU3hWUVVGVkxIRkNRVUZ2UWl4RFFVRkRPMEZCUVVFc1ZVRkRlRVU3UVVGRFFTeG5Ra0ZCVFN4WlFVRlpMRTlCUVU4N1FVRkJRU3haUVVOeVFpeEZRVUZETEZGQlFWRXNZMEZCWXl4blFrRkJaMElzYlVKQlFXMUNMRU5CUVVNc1IwRkJSeXhUUVVGVExFOUJRVThzWTBGQll5eFpRVUZaTEV0QlFVazdRVUZCUVN4VlFVRkRPMEZCUldwSUxHTkJRVWtzUzBGQlN5eFJRVUZSTEd0Q1FVRnJRaXhoUVVGaE8wRkJRemxETEd0Q1FVRk5MR05CUVdNN1FVRkJRU3hqUVVOc1FpeFZRVUZWTEV0QlFVc3NVVUZCVVR0QlFVRkJMR05CUTNaQ0xHbENRVUZwUWl4alFVRmpPMEZCUVVFc1kwRkRMMEk3UVVGQlFTeGpRVU5CTzBGQlFVRXNXVUZEUmp0QlFVTkJMR3RDUVVGTkxIRkNRVUZ4UWl4TFFVRkxMRkZCUVZFc2IwSkJRVzlDTEVsQlFVa3NTMEZCU3l4UlFVRlJMR2RDUVVGcFFqdEJRVU01Uml3clFrRkJiMElzUzBGQlN5eFhRVUZYTzBGQlFVRXNWVUZEZEVNN1FVRkZRU3cyUWtGQmJVSXNXVUZCV1N4alFVRmpMR1ZCUVdVN1FVRkROVVFzTmtKQlFXMUNMR0ZCUVdFc1IwRkJSeXhUUVVGVE8wRkJRelZETERaQ1FVRnRRaXh0UWtGQmJVSXNSMEZCUnl4aFFVRmhPMEZCUTNSRUxHVkJRVXNzVVVGQlVTeGxRVUZsTEV0QlFVc3NVVUZCVVN4M1FrRkJkMElzU1VGQlNTeERRVUZETzBGQlEzUkZMR1ZCUVVzc1VVRkJVVHRCUVVWaUxHTkJRVWtzUzBGQlN5eFJRVUZSTEhsQ1FVRjVRaXhMUVVGTExGRkJRVkVzY1VKQlEyNUVMRXRCUVVzc1VVRkJVU3hqUVVGakxHRkJRV0U3UVVGRE1VTXNhVUpCUVVzc1VVRkJVU3hsUVVGbE8wRkJRVUVzVlVGRE9VSTdRVUZEUVN4alFVRkpMRXRCUVVzc1VVRkJVU3g1UWtGQmVVSXNTMEZCU3l4UlFVRlJMRzFDUVVGdFFqdEJRVU40UlN4cFFrRkJTeXhSUVVGUkxFMUJRVTA3UVVGQlFTeFZRVU55UWp0QlFVTkJMSGxDUVVGbExHTkJRV01zV1VGQldTeEpRVUZKTzBGQlFVRXNVVUZETDBNN1FVRkJRU3hSUVVOQkxGVkJRV2RDTzBGQlFVRXNVVUZGYUVJN1FVRkJRU3hSUVVOQkxFMUJRVTBzWVVGQk1FSXNOa0pCUVdsRk8wRkJReTlHTERKQ1FVRnBRaXhaUVVGWkxFbEJRVWs3UVVGRGFrTXNaMEpCUVUwc1UwRkJVeXhMUVVGTExGRkJRVkU3UVVGRE5VSXNaMEpCUVUwc1lVRkJkVUlzUTBGQlF6dEJRVU01UWl4alFVRkpMRTlCUVU4c1UwRkJVeXhKUVVGSkxGbEJRVmtzUjBGQlJ6dEJRVU55UXl4MVFrRkJWeXhMUVVGTExHRkJRV0U3UVVGQlFTeFZRVU12UWp0QlFVTkJMR2RDUVVGTkxHVkJRV1VzYlVKQlFXMUNMRFpDUVVFMlFpeExRVUZMTEZGQlFWRXNUMEZCVHl4TlFVRk5PMEZCUXk5R0xHZENRVUZOTEZkQlFWY3NXVUZCV1N4blFrRkJaMElzV1VGQldUdEJRVU42UkN4blFrRkJUU3hQUVVGUExFZEJRVWNzVjBGQlZ5eExRVUZMTEVsQlFVa3NRMEZCUXp0QlFVRkJMRVZCUVVzc1lVRkJZU3g1UWtGQmVVSTdRVUZCUVN4RlFVRkxMRkZCUVZFN1FVRkROMFlzWjBKQlFVMHNaVUZCWlN4UFFVRlBMRzFDUVVGdFFpeEZRVUZETEUxQlFVMHNUMEZCVHl4WlFVRlpMRXRCUVVrc1EwRkJRenRCUVVNNVJTeHZRa0ZCVlN4WFFVRlhMRTFCUVUwc1dVRkJXU3haUVVGWkxFbEJRVWtzYVVKQlFXbENMRWxCUVVrc1JVRkJSVHRCUVVVNVJTeG5Ra0ZCVFN4clFrRkJhMElzVDBGQlR6dEJRVUZCTEZsQlF6TkNMRVZCUVVNc1UwRkJVeXhGUVVGRExGRkJRVkVzWTBGQll5eFpRVUZaTEU5QlFVMHNSMEZCUnl4UlFVRlJMRkZCUVZFc1QwRkJUeXhaUVVGWkxFdEJRVWs3UVVGQlFTeFZRVUZETzBGQlJXeEhMSGxDUVVGbExGbEJRVmtzU1VGQlNUdEJRVU12UWl4cFFrRkJUeXhGUVVGRExHRkJRV0VzYVVKQlFXbENMSE5DUVVGelFpeGhRVUZoTEdOQlFXRTdRVUZCUVN4UlFVTjRSanRCUVVGQkxGRkJSVUVzTWtKQlFUSkNMR1ZCUTBVN1FVRkRNMElzWjBKQlFVMHNTVUZCU1N4UFFVRlBMR3RDUVVGclFpeFhRVUZYTEdkQ1FVRm5RaXhqUVVGak8wRkJRelZGTEdkQ1FVRk5MRWxCUVVrc1QwRkJUeXhyUWtGQmEwSXNWMEZCVnl4SlFVRkxMR05CUVdNc1MwRkJTenRCUVVOMFJTeG5Ra0ZCVFN4SlFVRkpMRTlCUVU4c2EwSkJRV3RDTEZkQlFWY3NTVUZCU3l4alFVRmpMRXRCUVVzN1FVRkRkRVVzWjBKQlFVMHNiMEpCUVc5Q0xFdEJRVXNzVVVGQlVTeFBRVUZQTEU5QlFVODdRVUZEY2tRc1kwRkJTU3hMUVVGTExIRkNRVUZ4UWl4TFFVRkxMSEZDUVVGeFFpeExRVUZMTEcxQ1FVRnRRanRCUVVNNVJTeHRRa0ZCVHl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRE8wRkJRVUVzVlVGRGFrSTdRVUZEUVN4blFrRkJUU3hQUVVGUExFbEJRVWtzU1VGQlNUdEJRVU55UWl4alFVRkpMR3RDUVVGclFpeExRVUZMTEV0QlFVc3NTMEZCU3l4TFFVRkxMRWxCUVVrc1EwRkJRenRCUVVNdlF5eGpRVUZKTEd0Q1FVRnJRaXh0UWtGQmJVSTdRVUZEZGtNc09FSkJRV3RDTEV0QlFVc3NTMEZCU3l4TFFVRkxMRXRCUVVzc1NVRkJTU3hEUVVGRE8wRkJRek5ETEdkQ1FVRkpMR3RDUVVGclFpeHRRa0ZCYlVJN1FVRkRka01zYjBKQlFVMHNTVUZCU1N4TlFVRk5MRFpEUVVFMlF6dEJRVUZCTEZsQlF5OUVPMEZCUTBFc2JVSkJRVThzUTBGQlF5eHBRa0ZCYVVJc2FVSkJRV2xDTEdWQlFXVTdRVUZCUVN4VlFVTXpSQ3hQUVVGUE8wRkJRMHdzYlVKQlFVOHNRMEZCUXl4cFFrRkJhVUlzYVVKQlFXbENMRU5CUVVNN1FVRkJRU3hWUVVNM1F6dEJRVUZCTEZGQlEwWTdRVUZCUVN4TlFVTkdPMEZCUVVFN1FVRkJRVHM3TzBGRE0waEJMRTFCYlVOTkxIZERRVFJEUVN4NVFrRnBRa0VzYVVKQmQwSlBPMEZCZUVoaU8wRkJRVUU3UVVGQlFUdEJRVWRCTzBGQlJVRTdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJkMEpCTEUxQlFVMHNlVU5CUTBZc1EwRkJReXhqUVVGeFF5eHpRa0ZCTWtVN1FVRkRMMGNzV1VGQlNTeHJRa0ZCYTBJc1YwRkJWeXhoUVVGaExGRkJRVkU3UVVGRGNFUXNaMEpCUVUwc1NVRkJTU3hOUVVGTkxEUkNRVUUwUWl4clFrRkJhMElzVFVGQlRTeDNRMEZEYUVVc1lVRkJZU3hOUVVGTkxFZEJRVWM3UVVGQlFTeFJRVU0xUWp0QlFVVkJMR05CUVUwc1lVRkJkVUlzUTBGQlF6dEJRVU01UWl4cFFrRkJVeXhKUVVGSkxFZEJRVWNzU1VGQlNTeGhRVUZoTEZGQlFWRXNSVUZCUlN4SFFVRkhPMEZCUXpWRExHZENRVUZOTEU5QlFVOHNZVUZCWVN4RFFVRkRMRVZCUVVVN1FVRkROMElzYTBKQlFWRXNhMEpCUVd0Q0xFTkJRVU1zUjBGQlJ6dEJRVUZCTEZsQlF6VkNMRXRCUVVzc1VVRkJVVHRCUVVOWUxIbENRVUZYTEV0QlFVc3NSVUZCUlR0QlFVTnNRanRCUVVGQkxGbEJRMFk3UVVGQlFTeFpRVU5CTEV0QlFVc3NVVUZCVVR0QlFVTllMSGxDUVVGWExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVWQlFVVTdRVUZEZWtJN1FVRkJRU3haUVVOR08wRkJRVUVzV1VGRFFTeExRVUZMTEZGQlFWRTdRVUZEV0N4dlFrRkJUU3hQUVVGUExHRkJRV0VzUTBGQlF5eEZRVUZGTEV0QlFVczdRVUZEYkVNc2VVSkJRVmNzUzBGQlN5eEhRVUZITEVsQlFVa3NTVUZCU1N4SlFVRkpMRVZCUVVVN1FVRkRha003UVVGQlFTeFpRVU5HTzBGQlFVRXNXVUZEUVN4TFFVRkxMRkZCUVZFN1FVRkRXQ3h2UWtGQlRTeFBRVUZQTEdGQlFXRXNRMEZCUXl4RlFVRkZMRXRCUVVzc1MwRkJTeXhIUVVGSE8wRkJRekZETEhsQ1FVRlhMRXRCUVVzc1IwRkJSeXhKUVVGSkxFbEJRVWtzU1VGQlNTeEZRVUZGTzBGQlEycERPMEZCUVVFc1dVRkRSanRCUVVGQkxGbEJRMEU3UVVGRFJTeHZRa0ZCVFN4SlFVRkpMRTFCUVUwc2FVTkJRV2xETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU1zUlVGQlJUdEJRVUZCTEZWQlF6TkZPMEZCUVVFc1VVRkRSanRCUVVWQkxHVkJRVThzVjBGQlZ5eExRVUZMTEVkQlFVYzdRVUZCUVN4TlFVTTFRanRCUVZOS0xFMUJRVTBzTUVKQlEwWXNRMEZCUXl4aFFVRXdRaXhqUVVGeFF5eDVRa0ZCTUVNN1FVRkhlRWNzV1VGQlNTeE5RVUZOTEZsQlFWazdRVUZEZEVJc1dVRkJTU3haUVVGWkxHRkJRV0VzVFVGQlRUdEJRVU5xUXl4cFFrRkJUeXhOUVVGTkxGbEJRVmtzV1VGQldTeFBRVUZQTzBGQlFVRXNVVUZET1VNN1FVRkRRU3hsUVVGUExFMUJRVTBzZFVKQlExUXNTVUZEVHp0QlFVRkJMRlZCUTBrN1FVRkJRU3hWUVVOQkxGbEJRVmtzWVVGQllTeHhRa0ZEY2tJc1NVRkJTU3hOUVVGM1F5eGhRVUZoTEUxQlFVMHNSVUZCUlN4TFFVRkxMRTFCUVUwN1FVRkJRU3hSUVVGRExFTkJRVU03UVVGRGFrY3NaVUZCVHp0QlFVRkJMRTFCUTFRN1FVRkZTaXhOUVVGTkxHdENRVUZPTEUxQlFUWkRPMEZCUVVFc1VVRkpNME1zV1VGQldTeGhRVUUyUWp0QlFVTjJReXhqUVVGSkxHRkJRV0U3UVVGRFppeHBRa0ZCU3l4bFFVRmxMRmxCUVZrN1FVRkRhRU1zYVVKQlFVc3NVMEZCVXl4WlFVRlpPMEZCUVVFc1ZVRkROVUk3UVVGQlFTeFJRVU5HTzBGQlFVRXNVVUZGUVN4bFFVRmxMR05CUVhkRE8wRkJRM0pFTEdsQ1FVRlBMRXRCUVVzc2FVSkJRV2xDTzBGQlFVRXNVVUZETDBJN1FVRkJRU3hSUVVWQkxGTkJRVk1zVVVGQk5FSTdRVUZEYmtNc2FVSkJRVThzUzBGQlN5eFhRVUZYTzBGQlFVRXNVVUZEZWtJN1FVRkJRU3hOUVVOR08wRkJUVThzVFVGQlRTeG5Ra0ZCVGl4TlFVRnZRanRCUVVGQkxGRkJRWEJDTzBGQmEwSk1PMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeHJRMEZCWjBNN1FVRlBhRU03UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMR2xEUVVFclFqdEJRV2RETDBJc1pVRkJVU3hwUWtGQmVVTTdRVUZEYWtRc1pVRkJVU3h4UWtGQmFVUTdRVUZEZWtRc2JVTkJRVzlDTzBGQlEzQkNMSFZEUVVGM1FqdEJRVWQ0UWp0QlFVRkJMR1ZCUVZFc2FVSkJRWE5ETEVOQlFVTTdRVUZGTDBNN1FVRkJRU3hsUVVGUkxHbENRVUZ6UkN4dlFrRkJTU3hKUVVGSk8wRkJUM1JGTEN0Q1FVRTRRanRCUVVrNVFqdEJRVUZCTzBGQlFVRTdRVUZCUVN4eFEwRkJhMFFzYjBKQlFVa3NTVUZCU1R0QlFVc3hSRHRCUVVGQk8wRkJRVUU3UVVGQlFTeGxRVUZSTEhsQ1FVRXlSQ3h2UWtGQlNTeEpRVUZKTzBGQlN6TkZPMEZCUVVFN1FVRkJRVHRCUVVGQkxEUkRRVUUwUlN4dlFrRkJTU3hKUVVGSk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVN4UlFUZERjRVlzU1VGQlNTd3dRa0ZCYjBRN1FVRkRkRVFzWTBGQlNTeExRVUZMTEc5Q1FVRnZRaXhOUVVGTk8wRkJRMnBETEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3g1UlVGQmVVVTdRVUZCUVN4VlFVTXpSanRCUVVWQkxHTkJRVWtzVDBGQlR5eExRVUZMTEdsQ1FVRnBRaXhKUVVGSkxFdEJRVXNzWlVGQlpUdEJRVU42UkN4alFVRkpMRU5CUVVNc1RVRkJUVHRCUVVOVUxHMUNRVUZQTEVOQlFVTTdRVUZEVWl4cFFrRkJTeXhwUWtGQmFVSXNTVUZCU1N4TFFVRkxMR2xDUVVGcFFpeEpRVUZKTzBGQlFVRXNWVUZEZEVRN1FVRkZRU3hwUWtGQlR6dEJRVUZCTEZGQlExUTdRVUZCUVN4UlFXMURRU3hOUVVGTkxGZEJRVmRETEUxQlFWVXNVMEZCYjBNN1FVRkROMFFzWlVGQlN5eE5RVUZOUVR0QlFVTllMR2RDUVVGTkxHMUNRVUZ4UXl4RFFVRkRPMEZCUXpWRExHZENRVUZOTEcxQ1FVRjNRenRCUVVGQkxGbEJRelZETEdkQ1FVRm5RanRCUVVGQkxHTkJRMlFzWjBOQlFXZERMRkZCUVZFc1QwRkJUenRCUVVGQkxHTkJReTlETEd0RFFVRnJReXhSUVVGUkxFOUJRVTg3UVVGQlFTeGpRVU5xUkN3MlFrRkJOa0lzVVVGQlVTeFBRVUZQTzBGQlFVRXNZMEZETlVNc1pVRkJaU3hSUVVGUkxFOUJRVTg3UVVGQlFTeGpRVU01UWl4dFEwRkJiVU1zVVVGQlVTeFBRVUZQTzBGQlFVRXNZMEZEYkVRc01FSkJRVEJDTEZGQlFWRXNUMEZCVHp0QlFVRkJMR05CUTNwRExEQkNRVUV3UWl4UlFVRlJMRTlCUVU4N1FVRkJRU3hqUVVONlF5d3dRa0ZCTUVJc1VVRkJVU3hQUVVGUE8wRkJRVUVzV1VGRE0wTTdRVUZCUVN4WlFVTkJPMEZCUVVFc1ZVRkRSanRCUVVWQkxHTkJRVWtzVVVGQlVTeFRRVUZUTEVsQlFVa3NjVVJCUVhGRUxFZEJRVWM3UVVGREwwVXNOa0pCUVdsQ0xFdEJRVXNzY1VSQlFYVkZPMEZCUVVFc1ZVRkRMMFlzVjBGQlZ5eFJRVUZSTEZOQlFWTXNTVUZCU1N4cFFrRkJhVUlzUjBGQlJ6dEJRVU5zUkN3MlFrRkJhVUlzUzBGQlN5eHBRa0ZCYVVJN1FVRkJRU3hWUVVONlF6dEJRVU5CTEdOQlFVa3NVVUZCVVN4VFFVRlRMRWxCUVVrc1dVRkJXU3hIUVVGSE8wRkJRM1JETERaQ1FVRnBRaXhMUVVGTExGbEJRVms3UVVGQlFTeFZRVU53UXp0QlFVVkJMR1ZCUVVzc1UwRkJVeXhOUVVGTkxGRkJRVkVzWTBGQll5eG5Ra0ZCWjBJN1FVRkRNVVFzWlVGQlN5eGpRVUZqTEVsQlFVa3NaMEpCUVdkQ0xFMUJRVTBzVVVGQlVTeHRRa0ZCYlVJc1EwRkJRenRCUVVONlJTeGxRVUZMTEdsQ1FVRnBRaXh4UWtGQmNVSXNTVUZCU1R0QlFVTXZReXhsUVVGTExHbENRVUZwUWl4SlFVRkpMR1ZCUVdVc1NVRkJTVHRCUVVNM1F5eGxRVUZMTEZWQlFWVXNiMEpCUVVrc1NVRkJTVHRCUVVOMlFpeGxRVUZMTEhWQ1FVRjFRaXh2UWtGQlNTeEpRVUZKTzBGQlEzQkRMR1ZCUVVzc2JVSkJRVzFDTEc5Q1FVRkpMRWxCUVVrN1FVRkhhRU1zTUVKQlFXZENRU3hMUVVGSkxGVkJRVmNzUTBGQlF5eERRVUZEUVN4TFFVRkpMRXRCUVVzN1FVRkpNVU1zWlVGQlN5eFBRVUZQTEc5Q1FVRnZRaXhSUVVGTk8wRkJRM0JETEdkQ1FVRkpMRWRCUVVjc2FVSkJRV2xDTEc5Q1FVRnZRanRCUVVVeFF5eHpRa0ZCVVN4TlFVRk5MRzFFUVVGdFJDeEhRVUZITEUxQlFVMHNUMEZCVHl4RlFVRkZPMEZCUVVFc1dVRkRja1k3UVVGQlFTeFZRVU5HTzBGQlJVRXNhVUpCUVU4N1FVRkJRU3haUVVOSUxFdEJRVXNzU1VGQlNUdEJRVUZCTEZsQlFWRTdRVUZCUVN4WlFVRlZMRVZCUVVNc1QwRkJUeXhMUVVGTExGRkJRVkVzVlVGQlZTeFBRVUZQTEZsQlFWa3NUVUZCVFN4alFVRmpMRTFCUVVzN1FVRkJRU3hWUVVGRE8wRkJRek5ITEdsQ1FVRlBPMEZCUVVFc1dVRkRTQ3hMUVVGTExFbEJRVWs3UVVGQlFTeFpRVUZSTzBGQlFVRXNXVUZCVnl4RlFVRkRMRTlCUVU4c1UwRkJVeXhWUVVGVkxFOUJRVThzV1VGQldTeE5RVUZOTEdOQlFXTXNUVUZCU3p0QlFVRkJMRlZCUVVNN1FVRkhlRWNzWlVGQlN5eGhRVUZoTzBGQlFVRXNVVUZEY0VJN1FVRkJRU3hSUVVWQkxGVkJRV2RDTzBGQlEyUXNZMEZCU1N4UFFVRlBMRXRCUVVzc1lVRkJZU3hoUVVGaE8wRkJRM2hETEdsQ1FVRkxMRk5CUVZNc1VVRkJVVHRCUVVGQkxGVkJRM2hDTzBGQlEwRXNaVUZCU3l4bFFVRmxMRkZCUVZFN1FVRkJRU3hSUVVNNVFqdEJRVUZCTEZGQlJVRXNiMEpCUVhWRE8wRkJRM0pETEdOQlFVa3NRMEZCUXl4TFFVRkxMR2RDUVVGblFqdEJRVU40UWl4cFFrRkJTeXhwUWtGQmFVSXNTMEZCU3l4UFFVRlBMSEZDUVVGeFFqdEJRVUZCTEZWQlEzcEVPMEZCUTBFc2FVSkJRVThzUzBGQlN6dEJRVUZCTEZGQlEyUTdRVUZCUVN4UlFVVkJMSGRDUVVFclF6dEJRVU0zUXl4alFVRkpMRU5CUVVNc1MwRkJTeXh2UWtGQmIwSTdRVUZETlVJc2EwSkJRVTBzYVVKQlFXbENMRXRCUVVzc2EwSkJRV3RDTzBGQlF6bERMR3RDUVVGTkxIZENRVUZyUkN4RFFVRkRPMEZCUlhwRUxHZENRVUZKTEV0QlFVc3NZMEZCWXl4aFFVRmhPMEZCUTJ4RExHOURRVUZ6UWl4clFrRkJhMEk3UVVGQlFTeG5Ra0ZEZEVNc1ZVRkJWU3hMUVVGTE8wRkJRVUVzWjBKQlEyWXNNa0pCUVRKQ0xFdEJRVXNzZDBKQlFYZENPMEZCUVVFc1owSkJRM2hFTEhGQ1FVRnhRaXhMUVVGTExIZENRVUYzUWl4SlFVRkpPMEZCUVVFc1kwRkRlRVE3UVVGQlFTeFpRVU5HTzBGQlJVRXNhVUpCUVVzc2NVSkJRWEZDTEdWQlFXVXNhVUpCUVdsQ0xIRkNRVUZ4UWp0QlFVRkJMRlZCUTJwR08wRkJRMEVzYVVKQlFVOHNTMEZCU3p0QlFVRkJMRkZCUTJRN1FVRkJRU3hSUVVWQkxHbENRVUYxUWp0QlFVTnlRaXhqUVVGSkxFdEJRVXNzYjBKQlFXOUNPMEZCUXpOQ0xHbENRVUZMTEcxQ1FVRnRRaXhKUVVGSk8wRkJRelZDTEdsQ1FVRkxMSEZDUVVGeFFqdEJRVUZCTEZWQlF6VkNPMEZCUVVFc1VVRkRSanRCUVVGQkxGRkJSVUVzVVVGQll6dEJRVU5hTEdOQlFVa3NRMEZCUXl4TFFVRkxMR2RDUVVGblFqdEJRVU40UWp0QlFVRkJMRlZCUTBZN1FVRkZRU3d5UWtGQmFVSTdRVUZGYWtJc1pVRkJTeXhsUVVGbE8wRkJRM0JDTEdOQlFVazdRVUZEU2l4alFVRkpMRXRCUVVzc1kwRkJZeXhSUVVGUk8wRkJRemRDTEdsQ1FVRkxMR1ZCUVdVN1FVRkJRU3hqUVVOb1FpeExRVUZMTzBGQlFVRXNZMEZCVnp0QlFVRkJMR05CUVVjc1MwRkJTeXgzUWtGQmQwSTdRVUZCUVN4alFVRkhMRXRCUVVzN1FVRkJRU3hqUVVGeFFqdEJRVUZCTEZsQlFVTTdRVUZGYkVZc09FSkJRV3RDTEV0QlFVc3NUMEZCVHp0QlFVRkJPMEZCUVVFc1kwRkZNVUlzUlVGQlF5eE5RVUZOTEV0QlFVc3NkMEpCUVhkQ0xFbEJRVWtzUjBGQlJ5eFBRVUZQTEdWQlFXVXNWMEZCVnl4bFFVRmxMRk5CUVZFN1FVRkJRU3haUVVGRE8wRkJSWGhITEdsQ1FVRkxMR1ZCUVdVc1NVRkJTU3hwUWtGQmFVSXNTMEZCU3l4alFVRmpPMEZCUXpWRUxHbENRVUZMTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1pDTEdsQ1FVRkxMR1ZCUVdVN1FVRkJRU3hqUVVOb1FpeExRVUZMTzBGQlFVRXNZMEZCY1VJN1FVRkJRU3hqUVVGSE8wRkJRVUVzWTBGQmFVSTdRVUZCUVN4alFVRkhMRXRCUVVzc2QwSkJRWGRDTEVsQlFVazdRVUZCUVN4WlFVRkRPMEZCUVVFc1ZVRkRla1k3UVVGRlFTeGxRVUZMTEU5QlFVOHNUVUZCVFN4UFFVRlBMRU5CUVVNc1MwRkJTeXhsUVVGbExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEzWkVMR1ZCUVVzc1pVRkJaU3h6UWtGQmMwSTdRVUZETVVNc1pVRkJTeXhwUWtGQmFVSTdRVUZEZEVJc1pVRkJTeXgzUWtGQmQwSTdRVUZGTjBJc1kwRkJTU3hMUVVGTExHTkJRV01zVVVGQlVUdEJRVU0zUWl4cFFrRkJTeXhuUWtGQmFVSXNVMEZCVXl4WFFVRlhMRWxCUVVrc1JVRkJSU3hMUVVGTExFMUJRVTA3UVVGRGVrUXNiMEpCUVUwc1lVRkJZU3hKUVVGSkxHVkJRV1VzWjBKQlFXZENMR1ZCUVdVc1EwRkJRenRCUVVOMFJTeHZRa0ZCVFN4cFFrRkJhVUlzUzBGQlN5eGxRVUZsTEVsQlFVa3NaVUZCWlR0QlFVTTVSQ3gxUWtGQlV5eEpRVUZKTEVkQlFVY3NTVUZCU1N4WFFVRlhMRk5CUVZNc1IwRkJSeXhMUVVGTE8wRkJRemxETEhOQ1FVRk5MRzlDUVVGdlFpeGxRVUZsTEVOQlFVTTdRVUZETVVNc2MwSkJRVTBzVjBGQlZ5eHJRa0ZCYTBJN1FVRkRia01zYzBKQlFVMHNZVUZCWVN4TFFVRkxMRkZCUVZFc1NVRkJTU3hSUVVGUk8wRkJRelZETEhOQ1FVRk5MR0ZCUVdFc1YwRkJWenRCUVVNNVFpeHpRa0ZCVFN4aFFVRmhMRmRCUVZjN1FVRkRPVUlzYzBKQlFVMHNZMEZCWXl4clFrRkJhMEk3UVVGRGRFTXNjMEpCUVUwc2JVSkJRVzFDTEd0Q1FVRnJRanRCUVVNelF5eHpRa0ZCVFN4dlFrRkJiMElzYTBKQlFXdENPMEZCUXpWRExITkNRVUZOTEdWQlFXVXNWMEZCVnl4SlFVRkpMRU5CUVVNN1FVRkRja01zYzBKQlFVMHNZVUZCWVN4WFFVRlhMRWxCUVVrc1NVRkJTU3hEUVVGRE8wRkJSWFpETEc5Q1FVRkpMRTlCUVU4c1MwRkJTeXhyUWtGQmEwSXNZVUZCWVR0QlFVTTNReXgxUWtGQlN5eG5Ra0ZCWjBJN1FVRkJRU3huUWtGRGRrSTdRVUZGUVN4elFrRkJUU3haUVVGWkxFOUJRVThzWlVGQlpTeExRVUZMTEdGQlFXRTdRVUZETVVRc2MwSkJRVTBzVlVGQlZTeFBRVUZQTEdGQlFXRXNTMEZCU3l4aFFVRmhPMEZCUlhSRUxHOUNRVUZKTEVOQlFVTXNUMEZCVHl4alFVRmpMRk5CUVZNc1MwRkJTeXhEUVVGRExFOUJRVThzWTBGQll5eFBRVUZQTEVkQlFVYzdRVUZEZEVVc2QwSkJRVTBzU1VGQlNTeFhRVUZYTERKQ1FVRXlRanRCUVVGQkxHZENRVU5zUkR0QlFVVkJMRzlDUVVGSkxFdEJRVXNzU1VGQlNTeFBRVUZQTEZkQlFWY3NVVUZCVVR0QlFVTnlReXgxUWtGQlN5eEpRVUZKTEU5QlFVOHNWVUZCVlN4UFFVRlBPMEZCUVVFc2IwSkJReTlDTEZOQlFWTTdRVUZCUVN4dlFrRkRWQ3huUWtGQlowSXNhVUpCUVdsQ08wRkJRVUVzYzBKQlF6ZENMRmxCUVZVc1JVRkJReXhOUVVGTkxFMUJRVTBzVFVGQlRTeFZRVUZWTERKQ1FVRXlRaXhOUVVGTkxGRkJRVkVzUlVGQlF6dEJRVUZCTEc5Q1FVRkZPMEZCUVVFc2IwSkJRM1pHTEdsQ1FVRnBRaXhyUWtGQmEwSTdRVUZCUVN4elFrRkRMMElzV1VGQlZTeEZRVUZETEUxQlFVMHNUVUZCVFN4TlFVRk5MRlZCUVZVc01rSkJRVEpDTEUxQlFVMHNVVUZCVVN4RlFVRkRPMEZCUVVFc2IwSkJRVVU3UVVGQlFTeHZRa0ZEZGtZN1FVRkJRU3h2UWtGRFFUdEJRVUZCTEc5Q1FVTkJPMEZCUVVFc2IwSkJRMEU3UVVGQlFTeHZRa0ZEUVR0QlFVRkJMRzlDUVVOQk8wRkJRVUVzYTBKQlEwWXNRMEZCUXp0QlFVRkJMR2RDUVVOSUxFOUJRVTg3UVVGRlRDeHpRa0ZCU1N4alFVRmpPMEZCUTJ4Q0xHMURRVUZwUWl4UlFVRlJMRU5CUVVNc1QwRkJUME1zVDBGQlRUdEJRVU55UXl4dFEwRkJaU3hUUVVGVFFTeEZRVUZETEU5QlFVOHNUVUZCVFN4SlFVRkpMRTlCUVU4c01rSkJRVEpDTEUxQlFVMHNVVUZCVVN4RFFVRkRPMEZCUVVFc2EwSkJRemRHTEVOQlFVTTdRVUZEUkN4elFrRkJTU3hsUVVGbE8wRkJRMjVDTEc5RFFVRnJRaXhSUVVGUkxFTkJRVU1zVDBGQlQwRXNUMEZCVFR0QlFVTjBReXh2UTBGQlowSXNWVUZCVlVFc1JVRkJReXhQUVVGUExFMUJRVTBzU1VGQlNTeFBRVUZQTERKQ1FVRXlRaXhOUVVGTkxGRkJRVkVzUTBGQlF6dEJRVUZCTEd0Q1FVTXZSaXhEUVVGRE8wRkJSVVFzTUVKQlFWRXNTVUZCU1N4MVFrRkJkVUlzVVVGQlVTeEpRVUZKTEZWQlFWVXNTVUZCU1N4VlFVRlZMRWxCUVVrc1YwRkJWeXhMUVVGTExGZEJRVmNzUjBGRGJFY3NXVUZCV1N4dFFrRkJiVUlzVlVGQlZTeFRRVUZUTEV0QlFVczdRVUZCUVN4blFrRkROMFE3UVVGRFFTeHpRa0ZCVFN4UFFVRlBMRWRCUVVjc1YwRkJWeXhMUVVGTExGbEJRVmtzUzBGQlN5eFZRVUZWTEVWQlFVVTdRVUZCUVN4alFVTXZSRHRCUVVOQkxEaENRVUZuUWl4TlFVRk5PMEZCUTNSQ0xHMUNRVUZMTEdWQlFXVXNUMEZCVHl4bFFVRmxPMEZCUVVFc1dVRkROVU1zUTBGQlF6dEJRVUZCTEZWQlEwZzdRVUZEUVN4NVFrRkJaVHRCUVVGQkxGRkJRMnBDTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFUdEJRVUZCTzBGQlFVRTdRVUZCUVR0QlFVRkJMRkZCWVVFc1NVRkJTU3hUUVVGelFpeHJRa0ZCZVVNc1pVRkRMMFFzYjBKQlEwRXNNRUpCUTBFc1lVRkJiVU03UVVGRGNrTXNNa0pCUVdsQ0xGRkJRVkVzU1VGQlNUdEJRVVUzUWl4blFrRkJUU3hoUVVGM1FpeERRVUZETzBGQlF5OUNMRzFDUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEdsQ1FVRnBRaXhSUVVGUkxFVkJRVVVzUjBGQlJ6dEJRVU5vUkN4clFrRkJUU3hQUVVGUExHbENRVUZwUWl4RFFVRkRMRVZCUVVVN1FVRkZha01zWjBKQlFVa3NVMEZCVXl4SFFVRkhPMEZCUTJRN1FVRkJRU3haUVVOR08wRkJRMEVzYTBKQlFVMHNWVUZCVlN4TFFVRkxMR1ZCUVdVc1NVRkJTU3hKUVVGSk8wRkJRelZETEdkQ1FVRkpMRU5CUVVNc1UwRkJVenRCUVVOYUxHOUNRVUZOTEVsQlFVa3NUVUZCVFN3d1FrRkJNRUlzU1VGQlNTeEZRVUZGTzBGQlFVRXNXVUZEYkVRN1FVRkRRU3gxUWtGQlZ5eExRVUZMTEU5QlFVODdRVUZCUVN4VlFVTjZRanRCUVVWQkxHZENRVUZOTEVWQlFVTXNVMEZCVXl4bFFVRmxMR2RDUVVGbExFbEJRVWtzVVVGQlVTeFhRVUZYTEdkQ1FVRm5RanRCUVVkeVJpeG5Ra0ZCVFN4NVFrRkJlVUlzWTBGQll5eFhRVUZYTEVsQlFVa3NVVUZCVVN4SlFVRkpMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU1zU1VGQlNUdEJRVU4yUml4alFVRkpMSFZDUVVGMVFpeFhRVUZYTEZGQlFWRXNVVUZCVVR0QlFVTndSQ3hyUWtGQlRTeEpRVUZKTEUxQlFVMHNaVUZCWlN4MVFrRkJkVUlzVFVGQlRTeHhRa0ZCY1VJc1VVRkJVU3hOUVVGTkxFZEJRVWM3UVVGQlFTeFZRVU53Unp0QlFVZEJMR2RDUVVGTkxHOUNRVUZyUXl4RFFVRkRPMEZCUTNwRExHZENRVUZOTEdOQlFYbENMRU5CUVVNN1FVRkRhRU1zYlVKQlFWTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1VVRkJVU3hSUVVGUkxFVkJRVVVzUjBGQlJ6dEJRVWwyUXl4blFrRkJTU3hEUVVGRExFOUJRVThzVlVGQlZTeDFRa0ZCZFVJc1EwRkJReXhEUVVGRExFdEJRVXNzZFVKQlFYVkNMRU5CUVVNc1NVRkJTU3hOUVVNMVJTeDFRa0ZCZFVJc1EwRkJReXhMUVVGTExHRkJRV0U3UVVGRE5VTXNiMEpCUVUwc1NVRkJTU3hOUVVGTkxIbENRVUY1UWl4MVFrRkJkVUlzUTBGQlF5eERRVUZETEVWQlFVVTdRVUZCUVN4WlFVTjBSVHRCUVVOQkxHZENRVUZKTEhWQ1FVRjFRaXhEUVVGRExFMUJRVTBzU1VGQlNUdEJRVU53UXp0QlFVRkJMRmxCUTBZN1FVRkRRU3hyUWtGQlRTeGpRVUZqTEhWQ1FVRjFRaXhEUVVGRExFMUJRVTA3UVVGRGJFUXNhMEpCUVUwc1pVRkJaU3gxUWtGQmRVSXNRMEZCUXl4TlFVRk5PMEZCUTI1RUxHdENRVUZOTEdGQlFXTXNaVUZCWlN4bFFVTXZRaXg1UWtGQmVVSXNVVUZCVVN4RFFVRkRMRVZCUVVVc1ZVRkJWU3hSUVVGUkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVsQlF6ZEVMRzFDUVVGdFFpeDFRa0ZCZFVJc1EwRkJReXhIUVVGSExGRkJRVkVzUTBGQlF5eEZRVUZGTEZWQlFWVXNVVUZCVVN4RFFVRkRMRVZCUVVVc1NVRkJTVHRCUVVOMFJpdzRRa0ZCYTBJc1MwRkJTeXhWUVVGVk8wRkJSV3BETEdkQ1FVRkpMRmRCUVZjc1UwRkJVeXhIUVVGSE8wRkJRM3BDTzBGQlFVRXNXVUZEUmp0QlFVTkJMR3RDUVVGTkxGVkJRVlVzUzBGQlN5eGxRVUZsTEVsQlFVa3NWMEZCVnl4SlFVRkpPMEZCUTNaRUxHZENRVUZKTEVOQlFVTXNVMEZCVXp0QlFVTmFMRzlDUVVGTkxFbEJRVWtzVFVGQlRTd3lRa0ZCTWtJc1YwRkJWeXhKUVVGSkxFVkJRVVU3UVVGQlFTeFpRVU01UkR0QlFVTkJMR2RDUVVGSkxHRkJRV0U3UVVGRFppeHRRa0ZCU3l4alFVRmpMRXRCUVVzc1QwRkJUenRCUVVGQkxGbEJRMnBETzBGQlEwRXNaMEpCUVVrc1kwRkJZenRCUVVOb1FpeHJRa0ZCU1N4cFFrRkJhVUlzUzBGQlN5eHhRa0ZCY1VJc1NVRkJTU3hMUVVGTExHVkJRV2RDTzBGQlEzaEZMR3RDUVVGSkxFTkJRVU1zWjBKQlFXZENPMEZCUTI1Q0xHbERRVUZwUWl4RFFVRkRPMEZCUTJ4Q0xIRkNRVUZMTEhGQ1FVRnhRaXhKUVVGSkxFdEJRVXNzYVVKQlFXdENMR05CUVdNN1FVRkJRU3hqUVVOeVJUdEJRVU5CTERaQ1FVRmxMRXRCUVVzc1QwRkJUenRCUVVGQkxGbEJRemRDTzBGQlEwRXNkMEpCUVZrc1MwRkJTeXhQUVVGUE8wRkJRVUVzVlVGRE1VSTdRVUZKUVN4alFVRkpMRmRCUVZjc1YwRkJWeXhwUWtGQmFVSXNWVUZCVlN4WlFVRlpMRmRCUVZjc2EwSkJRV3RDTEZGQlFWRTdRVUZGY0Vjc1owSkJRVWtzV1VGQldTeFhRVUZYTEVkQlFVYzdRVUZETlVJc05rSkJRV1VzVVVGQlVTeEpRVUZKTzBGQlF6TkNMSEZDUVVGUE8wRkJRVUVzV1VGRFZEdEJRVXRCTEd0Q1FVRk5MRWxCUVVrN1FVRkJRU3hqUVVOT0xGZEJRVmNzVVVGQlVTeEpRVUZKTzBGQlFVRXNXVUZCTkVVN1FVRkJRU3hWUVVONlJ6dEJRVXRCTEdOQlFVazdRVUZEU2l4alFVRkpMR2xDUVVGcFFqdEJRVU51UWl4blFrRkJTU3huUWtGQlowSTdRVUZEY0VJc2EwSkJRVTBzVlVGQmIwSXNRMEZCUXp0QlFVVXpRaXcwUWtGQlowSXNVVUZCVVN4UFFVRkxPMEZCUXpOQ0xHOUNRVUZOTEU5QlFVOHNUMEZCVHl4RlFVRkZMRk5CUVZNc1YwRkJWeXhEUVVGRExFVkJRVVVzU1VGQlNTeEpRVUZKTEVWQlFVVTdRVUZEZGtRc2EwSkJRVWtzUzBGQlN5eFhRVUZYTEVkQlFVYzdRVUZEY2tJN1FVRkJRU3hqUVVOR08wRkJSVUVzYjBKQlFVMHNaMEpCUVdkQ0xFVkJRVVVzTkVKQlFUUkNMRWxCUVVrN1FVRkRlRVFzYTBKQlFVazdRVUZEU2l4clFrRkJTVHRCUVVOS0xHdENRVUZKTEVWQlFVVXNNa0pCUVRKQ08wRkJReTlDTEdkRFFVRm5RaXhMUVVGTExGTkJRVk1zU1VGQlNTeExRVUZOTEV0QlFVc3NVMEZCVXl4SlFVRkpMRWxCUVVrc1MwRkJTeXhUUVVGVE8wRkJRelZGTEdsRFFVRnBRaXhMUVVGTExGTkJRVk1zU1VGQlNTeExRVUZMTEdkQ1FVRm5RaXhMUVVGTE8wRkJRVUVzWTBGREwwUXNUMEZCVHp0QlFVTk1MR2REUVVGblFpeExRVUZMTEZWQlFWVXNTVUZCU1N4TFFVRkxMRk5CUVZNc1owSkJRV2RDTzBGQlEycEZMR2xEUVVGcFFqdEJRVUZCTEdOQlEyNUNPMEZCUTBFc09FSkJRV2RDTEV0QlFVc3NTMEZCU3l4blFrRkJaMElzWVVGQllTeEpRVUZKTzBGQlF6TkVMSE5DUVVGUkxFdEJRVXNzWVVGQllUdEJRVTB4UWl4dlFrRkJUU3h4UWtGQmNVSXNSVUZCUlN3MFFrRkJORUlzU1VGQlNUdEJRVU0zUkN3clFrRkJhVUlzUzBGQlN5eFRRVUZUTEVsQlFVa3NTMEZCU3l4TFFVRkxMRXRCUVVzc1UwRkJVeXhyUWtGQmEwSXNTVUZCU1N4cFFrRkRPVU1zUzBGQlN5eFRRVUZUTzBGQlFVRXNXVUZEYmtRc1EwRkJRenRCUVVsRUxHdENRVUZOTEhOQ1FVRnpRanRCUVVNMVFpdzBRa0ZCWjBJc1MwRkJTeXhMUVVGTExHZENRVUZuUWl4dFFrRkJiVUlzU1VGQlNUdEJRVU5xUlN4clFrRkJUU3hqUVVGakxFbEJRVWtzV1VGQldTeGhRVUZoTzBGQlEycEVMRFJDUVVGblFpeFJRVUZSTEVOQlFVTXNSMEZCUnl4TlFVRk5PMEZCUTJoRExHOUNRVUZOTEZOQlFWTXNVVUZCVVN4RFFVRkRPMEZCUTNoQ0xHOUNRVUZOTEU5QlFVOHNUMEZCVHl4RlFVRkZMRk5CUVZNc1YwRkJWeXhEUVVGRExFVkJRVVVzU1VGQlNTeEpRVUZKTEVWQlFVVTdRVUZEZGtRc2EwSkJRVWtzUlVGQlJTeDNRa0ZCZVVJN1FVRkROMElzYjBKQlFVa3NWMEZCVnl4aFFVRmhMRkZCUVZFc1MwRkJTeXhOUVVGTkxFVkJRVVVzU1VGQlNTeEpRVUZKTzBGQlFVRXNZMEZETTBRc1YwRkJWeXhGUVVGRkxEQkNRVUV3UWp0QlFVTnlReXh2UWtGQlNTeFpRVUZaTEdGQlFXRXNVVUZCVVN4TFFVRkxMRTFCUVUwc1JVRkJSU3hKUVVGSkxFbEJRVWs3UVVGQlFTeGpRVU0xUkN4WFFVRlhMRVZCUVVVc01rSkJRVEpDTzBGQlJYUkRMRzlDUVVGSkxGbEJRVmtzWVVGQllTeFJRVUZSTEV0QlFVc3NUVUZCVFN4RlFVRkZMRWxCUVVrc1NVRkJTVHRCUVVGQkxHTkJRelZFTEZkQlFWY3NSVUZCUlN4M1FrRkJlVUk3UVVGRGNFTXNiMEpCUVVrc1lVRkJZU3hoUVVGaExGRkJRVkVzUzBGQlN5eE5RVUZOTEVWQlFVVXNTVUZCU1N4SlFVRkpPMEZCUVVFc1kwRkROMFFzVDBGQlR6dEJRVU5NTEhOQ1FVRk5MRWxCUVVrc1RVRkJUU3cyUWtGQk5rSXNNa0pCUVRKQ0xFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVTdRVUZCUVN4alFVTnVSanRCUVVGQkxGbEJRMFlzUTBGQlF6dEJRVVZFTEd0Q1FVRk5PMEZCUVVFN1FVRkJRU3hqUVVWR0xFdEJRVXNzWlVGQlpTeFBRVUZQTEdWQlFXVXNaVUZCWlN4WFFVRlhMR1ZCUVdVc1QwRkJUenRCUVVGQk8wRkJRemxHTEdsQ1FVRkxMRTlCUVU4c1RVRkJUU3haUVVGWkxHdENRVUZyUWl4UlFVRlJMRWRCUVVjc1lVRkJZU3hIUVVGSExHRkJRV0U3UVVGRGVFWXNhVUpCUVVzc1pVRkJaU3hSUVVGUkxHdENRVUZyUWl4RlFVRkZPMEZCUTJoRUxHMURRVUYxUWl4RlFVRkRMRkZCUVZFc1IwRkJSeXhOUVVGTkxHVkJRV1VzVVVGQlVTeHJRa0ZCYTBJc1QwRkJUVHRCUVVGQkxGVkJRekZHTzBGQlJVRXNaMEpCUVUwc01FSkJRVEJDTEV0QlFVc3NaVUZCWlN3eVFrRkJNa0lzWVVGQllUdEJRVU0xUml4blFrRkJUU3gxUWtGQmRVSXNkMEpCUVhkQ0xFTkJRVU1zVFVGQlRTeExRVUZMTEhkQ1FVRjNRaXhEUVVGRExFMUJRVTA3UVVGRmFFY3NaMEpCUVUwc1RVRkJUU3gzUWtGQmQwSXNVMEZCVXl4clFrRkJhMElzYjBKQlFXOUNPMEZCUTI1R0xHTkJRVWtzVjBGQlZ5eExRVUZMTEdWQlFXVXNXVUZCV1N4SFFVRkhPMEZCUTJ4RUxHTkJRVWtzUTBGQlF5eFZRVUZWTzBGQlEySXNkVUpCUVZjc1MwRkJTeXhsUVVGbExFMUJRVTBzVTBGQlV5eDFRa0ZCZFVJN1FVRkRja1VzYVVKQlFVc3NaVUZCWlN4WlFVRlpMRXRCUVVzc1VVRkJVVHRCUVVNM1F5eHpRa0ZCVlN4UlFVRlJMRTFCUVUwc2JVSkJRVzFDTEVkQlFVY3NhMEpCUVd0Q0xGRkJRVkVzU1VGQlNTeEZRVUZGTzBGQlFVRXNWVUZEYUVZN1FVRkhRU3hqUVVGSkxHMUNRVUZ0UWl4VFFVRlRMSE5DUVVGelFqdEJRVU53UkN4blFrRkJTU3huUWtGQlowSXNWMEZCVnl4VFFVRlRMSEZDUVVGeFFpeFJRVUZSTzBGQlEyNUZMRzlDUVVGTkxFbEJRVWtzVFVGQlRTdzBRMEZCTkVNc1UwRkJVeXh4UWtGQmNVSXNUVUZCVFN4VFFVTTFSaXhuUWtGQlowSXNUVUZCVFN4blFrRkJaMElzVTBGQlV5eFpRVUZaTEVsQlFVa3NTVUZCU1R0QlFVRkJMRmxCUTNwRk8wRkJRMEVzY1VKQlFWTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1owSkJRV2RDTEZGQlFWRXNTMEZCU3p0QlFVTXZReXh2UWtGQlRTeFZRVUZWTEdkQ1FVRm5RaXhEUVVGRE8wRkJRMnBETEc5Q1FVRk5MR0ZCUVdFc1VVRkJVVHRCUVVNelFpeHZRa0ZCVFN4bFFVRmxMRTlCUVU4c1VVRkJVU3hUUVVGVExGZEJRVmNzU1VGQlNTeFJRVUZSTEV0QlFVczdRVUZEZWtVc2IwSkJRVTBzUTBGQlF5eE5RVUZOTEUxQlFVMHNTVUZCU1N4VFFVRlRMSEZDUVVGeFFpeERRVUZETzBGQlEzUkVMR3RDUVVGSkxHVkJRV1VzVVVGQlVTeHBRa0ZCYVVJc1VVRkJVVHRCUVVOc1JDeHpRa0ZCVFN4SlFVRkpMRTFCUVUwc2IwSkJRVzlDTEVOQlFVTXNNRUpCUVRCQ0xFbEJRVWtzWTBGQll5eE5RVUZOTEdOQlEyNUdMRlZCUVZVc1kwRkJZeXhaUVVGWkxHZENRVUZuUWl4VFFVRlRMRmxCUVZrc1NVRkJTU3hKUVVGSk8wRkJRVUVzWTBGRGRrWTdRVUZCUVN4WlFVTkdPMEZCUVVFc1ZVRkRSanRCUVVWQk8wRkJRVUVzV1VGRFNUdEJRVUZCTEZsQlEwRXNUVUZCVFN4NVFrRkJlVUlzVVVGQlVTeEpRVUZKTEZWQlFWVXNSMEZCUnl4VlFVRlZMSGRDUVVGM1FpeERRVUZETEVOQlFVTXNTVUZEZUVZc2QwSkJRWGRDTEVOQlFVTXNRMEZCUXl4SlFVRkpMSGRDUVVGM1FpeERRVUZETEVOQlFVTTdRVUZCUVN4VlFVRkZPMEZCUld4RkxHTkJRVWtzUzBGQlN5eGpRVUZqTEZWQlFWVXNTMEZCU3l4clFrRkJhMElzWVVGQllUdEJRVU51UlN4clFrRkJUU3h2UWtGQmRVTTdRVUZCUVN4alFVTXpReXhWUVVGVkxFdEJRVXM3UVVGQlFTeGpRVU5tTEdGQlFXRXNVMEZCVXl4WlFVRlpPMEZCUVVFc1kwRkRiRU03UVVGQlFTeGpRVU5CTzBGQlFVRXNXVUZEUmp0QlFVTkJMR2xDUVVGTExHVkJRV1VzUzBGQlN5eHBRa0ZCYVVJN1FVRkZNVU1zWjBKQlFVa3NTMEZCU3l4clFrRkJhMElzWVVGQllUdEJRVU4wUXl4dlFrRkJUU3gzUWtGQmQwSXNTMEZCU3l4MVFrRkJkVUlzU1VGQlNTeExRVUZMTEdkQ1FVRnBRanRCUVVOd1JpeHZRMEZCZFVJc1MwRkJTeXhwUWtGQmFVSTdRVUZCUVN4WlFVTXZRenRCUVVGQkxGVkJRMFk3UVVGRlFTeGxRVUZMTEdWQlFXVXNTVUZCU1N4VlFVRlZMRmxCUVZrc1lVRkJZU3g1UWtGQmVVSXNiMEpCUVc5Q08wRkJSWGhITEhsQ1FVRmxMRkZCUVZFc1NVRkJTVHRCUVVNelFpeHBRa0ZCVHp0QlFVRkJMRkZCUTFRN1FVRkJRU3hSUVVWQkxFOUJRVThzVjBGQmJVSXNUVUZCZDBJN1FVRkRhRVFzWlVGQlN5eGxRVUZsTEU5QlFVOHNWMEZCVnl4SlFVRkpPMEZCUVVFc1VVRkROVU03UVVGQlFTeFJRVVZCTEU5QlFVOHNTMEZCWVN4TFFVRnRRanRCUVVOeVF5eGxRVUZMTEdWQlFXVXNUMEZCVHl4TFFVRkxMRWRCUVVjN1FVRkJRU3hSUVVOeVF6dEJRVUZCTEZGQlJVRXNUVUZCVFN4VFFVRlRMRmRCUVcxQ0xHbENRVUZyUkR0QlFVZHNSaXhuUWtGQlRTeExRVUZMTEdWQlFXVXNVMEZCVXl4WFFVRlhMR1ZCUVdVN1FVRkJRU3hSUVVNdlJEdEJRVUZCTEZGQlJVRXNUVUZCVFN4TlFVRnpRanRCUVVNeFFpeHBRa0ZCVHl4TFFVRkxMR1ZCUVdVc1QwRkJUeXhKUVVGSkxFVkJRVVU3UVVGQlFTeFJRVU14UXp0QlFVRkJMRkZCUlVFc1MwRkJTeXhMUVVGeFFqdEJRVU40UWl4cFFrRkJUeXhMUVVGTExHVkJRV1VzVVVGQlVTeEhRVUZITzBGQlFVRXNVVUZEZUVNN1FVRkJRU3hSUVVWQkxHRkJRV0VzV1VGQmIwSXNWVUZCYTBJc1YwRkJiMElzV1VGQk1FSTdRVUZETDBZc1owSkJRVTBzUzBGQlN5eDNRa0ZCZDBJc1NVRkJTU3hWUVVGVk8wRkJRMnBFTEdOQlFVa3NRMEZCUXl4SlFVRkpPMEZCUTFBc2EwSkJRVTBzU1VGQlNTeE5RVUZOTERKQ1FVRXlRaXhWUVVGVkxFVkJRVVU3UVVGQlFTeFZRVU42UkR0QlFVVkJMR2RDUVVGTkxHRkJRWGxDTzBGQlFVRXNXVUZETjBJN1FVRkJRU3haUVVOQk8wRkJRVUVzV1VGRFFTeGhRVUZoTEVkQlFVY3NRMEZCUXp0QlFVRkJMRmxCUTJwQ0xGbEJRVmtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4VFFVRlRPMEZCUVVFc1ZVRkRMMEk3UVVGRFFTeGxRVUZMTEZGQlFWRXNTVUZCU1N4VlFVRlZMRlZCUVZVN1FVRkJRU3hSUVVOMlF6dEJRVUZCTEZGQlJVRXNZMEZCWXl4VlFVRjNRanRCUVVOd1F5eG5Ra0ZCVFN4cFFrRkJhVUlzUzBGQlN5eHhRa0ZCY1VJc1NVRkJTU3hSUVVGUk8wRkJRemRFTEdOQlFVa3NaMEpCUVdkQ08wRkJRMnhDTEhWQ1FVRlhMRkZCUVZFc1owSkJRV2RDTzBGQlEycERMRzFDUVVGTExHVkJRV1VzVVVGQlVTeExRVUZMTEVWQlFVVTdRVUZCUVN4WlFVTnlRenRCUVVOQkxHbENRVUZMTEhGQ1FVRnhRaXhQUVVGUExGRkJRVkU3UVVGQlFTeFZRVU16UXp0QlFVVkJMR1ZCUVVzc2FVSkJRV2xDTEU5QlFVOHNVVUZCVVR0QlFVTnlReXhsUVVGTExGRkJRVkVzVDBGQlR5eFJRVUZSTzBGQlFVRXNVVUZET1VJN1FVRkJRU3hSUVVWQkxHTkJRV01zVlVGQmEwSXNVMEZCZVVJc1VVRkJOa003UVVGRGNFY3NaMEpCUVUwc1UwRkJVeXhMUVVGTExGRkJRVkVzU1VGQlNTeFJRVUZSTzBGQlEzaERMR05CUVVrc1EwRkJReXhSUVVGUk8wRkJRMWdzYTBKQlFVMHNTVUZCU1N4TlFVRk5MSFZDUVVGMVFpeFJRVUZSTEVWQlFVVTdRVUZCUVN4VlFVTnVSRHRCUVVOQkxHZENRVUZOTEdGQlFXRXNUMEZCVHp0QlFVTXhRaXhuUWtGQlRTeGhRVUZoTEU5QlFVODdRVUZETVVJc1owSkJRVTBzWTBGQll5eFBRVUZQTzBGQlF6TkNMR2RDUVVGTkxHRkJRV0VzVDBGQlR6dEJRVU14UWl4alFVRkpMRXRCUVVzc2IwSkJRVzlDTEUxQlFVMDdRVUZEYWtNc2EwSkJRVTBzU1VGQlNTeE5RVUZOTEZsQlFWa3NWVUZCVlN4TFFVRkxMRlZCUVZVc01rTkJRVEpETzBGQlFVRXNWVUZEYkVjN1FVRkRRU3hsUVVGTExHdENRVUZyUWp0QlFVZDJRaXhqUVVGSkxGZEJRVmNzUTBGQlF5eEhRVUZITzBGQlEycENMSFZDUVVGWExFTkJRVU1zU1VGQlNTeFhRVUZYTEVOQlFVTXNSVUZCUlN4WFFVRlhMRU5CUVVNc1EwRkJRenRCUVVNelF5eDFRa0ZCVnl4RFFVRkRMRWxCUVVrN1FVRkJRU3hWUVVOc1FqdEJRVVZCTEc5Q1FVRlZMRkZCUVZFc1RVRkJUU3hyUTBGQmEwTXNWVUZCVlN4TFFVRkxMRlZCUVZVc1RVRkJUVHRCUVVWNlJpeG5Ra0ZCVFN4blFrRkJaMElzUzBGQlN5eEpRVUZKTzBGQlJTOUNMR1ZCUVVzc1owSkJRV2RDTEVOQlFVTTdRVUZEZEVJc1kwRkJTVHRCUVVOR0xHZENRVUZKTEdWQlFXVTdRVUZEYWtJc2JVSkJRVXNzVDBGQlR5eGxRVUZsTEZsQlFWazdRVUZCUVN4WlFVTjZRenRCUVVWQkxIZENRVUZaTEZOQlFWTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1FVRkRiRU1zYlVKQlFVODdRVUZCUVN4VlFVTlVMRk5CUVZNc1IwRkJSenRCUVVOV0xHMUNRVUZQTEV0QlFVc3NVVUZCVVN4UlFVRlJMSEZDUVVGeFFpeFZRVUZWTEV0QlFVc3NWVUZCVlN4aFFVRmhMRU5CUVVNc1JVRkJSU3hEUVVGRE8wRkJRek5HTEcxQ1FVRlBPMEZCUVVFc1ZVRkRWQ3hWUVVGRk8wRkJRMEVzWjBKQlFVa3NaVUZCWlR0QlFVTnFRaXh4UWtGQlR5eExRVUZMTEV0QlFVc3NUMEZCVHl4alFVRmpMRVZCUVVVN1FVRkJRU3huUWtGRGNFTXNVMEZCVHl4TlFVRk5MSEZEUVVGeFF5eFZRVUZWTEV0QlFVc3NWVUZCVlN4TlFVRk5MRWxCUVVrc1QwRkJUeXhMUVVGTE8wRkJRVUVzWTBGQlNTeERRVUZETzBGQlFVRXNXVUZETlVjN1FVRkZRU3gxUWtGQlZ5eFJRVUZSTEV0QlFVc3NaVUZCWlR0QlFVTnlReXh0UWtGQlN5eGxRVUZsTEZGQlFWRXNTMEZCU3l4RlFVRkZPMEZCUVVFc1dVRkRja003UVVGRFFTeHBRa0ZCU3l4blFrRkJaMElzUTBGQlF6dEJRVU4wUWl4cFFrRkJTeXhyUWtGQmEwSTdRVUZCUVN4VlFVTjZRanRCUVVGQkxGRkJRMFk3UVVGQlFUdEJRVUZCTEZGQlIwRXNaVUZCWlN4WFFVRnRRaXhQUVVGbExGRkJRVzFDTEUxQlFYTkNPMEZCUTNoR0xHTkJRVWtzTkVKQlFUUkNMRXRCUVVzc01rSkJRVEpDTEVsQlFVa3NVMEZCVXp0QlFVTTNSU3hqUVVGSkxFTkJRVU1zTWtKQlFUSkNPMEZCUXpsQ0xIZERRVUUwUWl4dlFrRkJTU3hKUVVGSk8wRkJRM0JETEdsQ1FVRkxMREpDUVVFeVFpeEpRVUZKTEZkQlFWY3NlVUpCUVhsQ08wRkJRVUVzVlVGRE1VVTdRVUZGUVN4blFrRkJUU3hwUWtGQmFVSXNNRUpCUVRCQ0xFbEJRVWtzUzBGQlN6dEJRVU14UkN4blFrRkJUU3hMUVVGTExFdEJRVXNzWlVGQlpTeDFRa0ZCZFVJc1VVRkJVU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1FVRkRka1lzYjBOQlFUQkNMRWxCUVVrc1QwRkJUeXhEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETzBGQlEycEVMR2xDUVVGUE8wRkJRVUVzVVVGRFZEdEJRVUZCTEZGQlEwRXNhMEpCUVd0Q0xGZEJRWGxDTzBGQlEzcERMR2RDUVVGTkxEUkNRVUUwUWl4TFFVRkxMREpDUVVFeVFpeEpRVUZKTEZOQlFWTTdRVUZETDBVc1kwRkJTU3d5UWtGQk1rSTdRVUZETjBJc2MwTkJRVEJDTEZGQlFWRXNaMEpCUVdNc1MwRkJTeXhsUVVGbExIbENRVUY1UWl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRek5ITEdsQ1FVRkxMREpDUVVFeVFpeFBRVUZQTEZOQlFWTTdRVUZCUVN4VlFVTnNSRHRCUVVGQkxGRkJRMFk3UVVGQlFTeFJRVU5CTEZWQlFWVXNWMEZCT0VJN1FVRkRkRU1zWjBKQlFVMHNWVUZCVlN4TFFVRkxMR1ZCUVdVc1NVRkJTU3hUUVVGVE8wRkJRMnBFTEdOQlFVa3NRMEZCUXl4VFFVRlRPMEZCUTFvc2EwSkJRVTBzU1VGQlNTeE5RVUZOTERKQ1FVRXlRaXhUUVVGVExFVkJRVVU3UVVGQlFTeFZRVU40UkR0QlFVTkJMR2xDUVVGUExGRkJRVkU3UVVGQlFTeFJRVU5xUWp0QlFVRkJMRkZCUTBFc2FVSkJRV2xDTEZkQlFYTkNMRTFCUVdNc1RVRkRiRUk3UVVGRGFrTXNhVUpCUVU4c1dVRkJXVHRCUVVOcVFpeHJRa0ZCVFN4UFFVRlBMRTFCUVUwc1owSkJRV2RDTEUxQlFVMHNWMEZCVnl4SlFVRkpPMEZCUTNoRUxHMUNRVUZQTEZkQlFWY3NTMEZCU3l4UlFVRlJMRWxCUVVrN1FVRkJRU3hWUVVOeVF6dEJRVUZCTEZGQlEwWTdRVUZCUVR0QlFVRkJMRkZCUlVFc1pVRkJaU3hQUVVGeFFqdEJRVU5zUXl4alFVRkpMRXRCUVVzc1kwRkJZeXhwUWtGQmFVSTdRVUZEZEVNN1FVRkJRU3hWUVVOR08wRkJSMEVzVlVGQlF5eExRVUZMTEcxQ1FVRXlRaXhsUVVGbExFdEJRVXNzVlVGQlZTeExRVUZMTzBGQlFVRXNVVUZEZEVVN1FVRkJRU3hSUVVOQkxHVkJRWEZDTzBGQlEyNUNMR1ZCUVVzc1dVRkJXVHRCUVVOcVFpeGpRVUZKTEV0QlFVc3NTVUZCU1N4UFFVRlBMRmRCUVZjc1UwRkJVeXhqUVVOdVF5eFBRVUZQTEV0QlFVc3NTVUZCU1N4VlFVRlZMR05CUVdNc1MwRkJTeXhKUVVGSkxFdEJRVXNzVVVGQlVTeExRVUZMTEVsQlFVa3NVVUZCVVR0QlFVTnNSaXhuUWtGQlNTeExRVUZMTEU5QlFVOHNVMEZCVXl4SlFVRkpMSEZFUVVGeFJDeEhRVUZITzBGQlEyNUdMRzFDUVVGTExGbEJRVms3UVVGQlFTeFpRVU51UWl4WFFVRlhMRXRCUVVzc1QwRkJUeXhUUVVGVExFbEJRVWtzYVVKQlFXbENMRWRCUVVjN1FVRkRkRVFzYlVKQlFVc3NXVUZCV1R0QlFVRkJMRmxCUTI1Q08wRkJSVUVzWjBKQlFVa3NTMEZCU3l4alFVRmpMRlZCUVZVc1QwRkJUeXhMUVVGTExHRkJRV0VzWVVGQllUdEJRVU55UlN4dFFrRkJTeXhYUVVGWExFdEJRVXNzVDBGQlR5eGxRVUZsTzBGQlFVRXNaMEpCUTNwRExFMUJRVTA3UVVGQlFTeG5Ra0ZEVGl4UFFVRlBMRXRCUVVzc2IwSkJRVzlDTzBGQlFVRXNZMEZEYkVNc1EwRkJRenRCUVVORUxHMUNRVUZMTEhGQ1FVRnhRaXhMUVVGTExFOUJRVTg3UVVGQlFUdEJRVUZCTEdkQ1FVVnNReXhGUVVGRExFMUJRVTBzUzBGQlN5eHZRa0ZCYjBJc1NVRkJTU3hIUVVGSExFOUJRVThzWlVGQlpTeFhRVUZYTEdWQlFXVXNZMEZCWVR0QlFVRkJMR05CUVVNN1FVRkJRU3haUVVNelJ6dEJRVUZCTEZWQlEwWTdRVUZCUVN4UlFVTkdPMEZCUVVFc1VVRkZRU3hsUVVGeFFqdEJRVU51UWl4dlFrRkJWU3hSUVVGUkxHTkJRV003UVVGRGFFTXNZMEZCU1N4RFFVRkRMRXRCUVVzc2IwSkJRVzlDTEVsQlFVa3NTMEZCU3l4blFrRkJhVUlzUjBGQlJ6dEJRVU42UkN4cFFrRkJTeXh2UWtGQmIwSXNTVUZCU1N4TFFVRkxMR3RDUVVGdFFpeERRVUZETEVOQlFVTTdRVUZCUVN4VlFVTjZSRHRCUVVOQkxHTkJRVWtzUTBGQlF5eExRVUZMTEhWQ1FVRjFRaXhKUVVGSkxFdEJRVXNzWjBKQlFXbENMRWRCUVVjN1FVRkROVVFzYVVKQlFVc3NkVUpCUVhWQ0xFbEJRVWtzUzBGQlN5eHJRa0ZCYlVJc1EwRkJReXhEUVVGRE8wRkJRVUVzVlVGRE5VUTdRVUZGUVN4bFFVRkxMRTFCUVUwN1FVRkRXQ3hsUVVGTExHZENRVUZuUWp0QlFVRkJMRkZCUTNaQ08wRkJRVUVzVVVGRFFTeGhRVUZ0UWp0QlFVTnFRaXh2UWtGQlZTeFJRVUZSTEZsQlFWazdRVUZGT1VJc1pVRkJTeXhOUVVGTk8wRkJRMWdzWlVGQlN5eG5Ra0ZCWjBJN1FVRkJRU3hSUVVOMlFqdEJRVUZCTEZGQlEwRXNVMEZCWlR0QlFVTmlMRzlDUVVGVkxGRkJRVkVzVVVGQlVUdEJRVU14UWl4bFFVRkxMR2RDUVVGblFqdEJRVU55UWl4blFrRkJUU3h4UWtGQmNVSXNTMEZCU3l4dlFrRkJiMElzU1VGQlNTeExRVUZMTEdkQ1FVRnBRanRCUVVNNVJTeG5Ra0ZCVFN4M1FrRkJkMElzUzBGQlN5eDFRa0ZCZFVJc1NVRkJTU3hMUVVGTExHZENRVUZwUWp0QlFVTndSaXhuUWtGQlRTeFRRVUZUTEcxQ1FVRnZRanRCUVVOdVF5eGxRVUZMTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1pDTEcxQ1FVRlRMRWxCUVVrc1IwRkJSeXhKUVVGSkxGRkJRVkVzUzBGQlN6dEJRVU12UWl4clFrRkJUU3h4UWtGQmNVSXNTMEZCU3l4elFrRkJjMEk3UVVGRGRFUXNhMEpCUVUwc1ZVRkJWU3h0UWtGQmIwSXNRMEZCUXp0QlFVTnlReXhwUWtGQlN5eGxRVUZsTEV0QlFVc3NkMEpCUVhkQ0xFTkJRVU03UVVGRGJFUXNLMEpCUVcxQ0xGbEJRVmtzVVVGQlVTeGxRVUZsTzBGQlEzUkVMQ3RDUVVGdFFpeGhRVUZoTEVkQlFVY3NVVUZCVVN4VFFVRlRPMEZCUTNCRUxDdENRVUZ0UWl4dFFrRkJiVUlzUjBGQlJ5eFJRVUZSTEdGQlFXRTdRVUZET1VRc2FVSkJRVXNzWlVGQlpTeExRVUZMTEhkQ1FVRjNRaXhKUVVGSkxFTkJRVU03UVVGRGRFUXNhVUpCUVVzN1FVRkRUQ3huUWtGQlNTeExRVUZMTEdOQlFXTXNVVUZCVVR0QlFVTTNRaXh0UWtGQlN5eGxRVUZsTEV0QlFVc3NjMEpCUVhWQ0xFTkJRVU1zUTBGQlF6dEJRVUZCTEZsQlEzQkVPMEZCUTBFc1owSkJRVWtzUzBGQlN5eDVRa0ZCZVVJc1MwRkJTeXh4UWtGQmNVSXNTMEZCU3l4alFVRmpMR0ZCUVdFN1FVRkRNVVlzYlVKQlFVc3NaVUZCWlR0QlFVRkJMRmxCUTNSQ08wRkJRMEVzWjBKQlFVa3NTMEZCU3l4NVFrRkJlVUlzUzBGQlN5eHRRa0ZCYlVJN1FVRkRlRVFzYlVKQlFVc3NUVUZCVFR0QlFVRkJMRmxCUTJJN1FVRkJRU3hWUVVOR08wRkJSVUVzWlVGQlN5eE5RVUZOTzBGQlExZ3NaVUZCU3l4blFrRkJaMEk3UVVGQlFTeFJRVU4yUWp0QlFVRkJMRkZCUlVFc2FVSkJRV2xDTEZkQlFYbENPMEZCUTNoRExHVkJRVXNzYTBKQlFXdENMRk5CUVZNN1FVRkRhRU1zWTBGQlNTeExRVUZMTEc5Q1FVRnZRaXhKUVVGSkxGTkJRVk1zUjBGQlJ6dEJRVU16UXl4cFFrRkJTeXh2UWtGQmIwSXNUMEZCVHl4VFFVRlRPMEZCUVVFc1ZVRkRNME03UVVGRFFTeGpRVUZKTEV0QlFVc3NkVUpCUVhWQ0xFbEJRVWtzVTBGQlV5eEhRVUZITzBGQlF6bERMR2xDUVVGTExIVkNRVUYxUWl4UFFVRlBMRk5CUVZNN1FVRkJRU3hWUVVNNVF6dEJRVU5CTEdWQlFVc3NaVUZCWlN4cFFrRkJhVUlzVTBGQlV6dEJRVUZCTEZGQlEyaEVPMEZCUVVFc1VVRkZRU3hYUVVGWExGZEJRWGxDTzBGQlEyeERMR1ZCUVVzc2JVSkJRVzFDTzBGQlEzaENMR1ZCUVVzc1lVRkJZVHRCUVVGQkxGRkJRM0JDTzBGQlFVRXNUVUZEUmp0QlFVRkJPMEZCUVVFN096dEJRM2d3UWtFN1FVRkJRVHRCUVVGQk8wRkJRVUU3UVVGQlFTeE5RV2RDVFN4blFrRjFRMEVzYjBKQmIwaFBPMEZCTTB0aU8wRkJRVUU3UVVGQlFUdEJRVTFCTzBGQlJVRTdRVUZEUVR0QlFVVkJPMEZCUzBFc1RVRkJUU3hwUWtGQlRpeE5RVUZOTEdkQ1FVRnhRenRCUVVGQkxGRkJRM3BETEZsQlExa3NVVUZCZFVNc1ZVRkJhME1zVFVGRGFrVXNUVUZCZVVJN1FVRkVha003UVVGQmRVTTdRVUZCYTBNN1FVRkRha1U3UVVGQlFTeFJRVUV3UWp0QlFVRkJMRkZCUlRsRExHdENRVUZuUXp0QlFVTTVRaXhqUVVGSkxFdEJRVXNzTkVKQlFUWkNPMEZCUTNCRExHdENRVUZOTEVsQlFVa3NUVUZCVFN4dFFrRkJiVUk3UVVGQlFTeFZRVU55UXp0QlFVTkJMR2RDUVVGTkxHVkJRV1VzVlVGQlZTeExRVUZMTEV0QlFVc3NTVUZCU1R0QlFVTTNReXhwUWtGQlR5eHBRa0ZCYVVJc1NVRkJTU3hKUVVGSkxHRkJRV0VzU1VGRGFrSXNTVUZCU1N4aFFVRmhMRXRCUVVzc1QwRkJUeXhOUVVGTkxGRkJRVkVzUzBGQlN5eE5RVUZOTEZsQlFWazdRVUZCUVN4UlFVTm9SenRCUVVGQkxGRkJSVUVzYlVKQlFXdERPMEZCUTJoRExHTkJRVWtzUzBGQlN5dzBRa0ZCTmtJN1FVRkRjRU1zYTBKQlFVMHNTVUZCU1N4TlFVRk5MRzFDUVVGdFFqdEJRVUZCTEZWQlEzSkRPMEZCUTBFc1owSkJRVTBzWlVGQlpTeFZRVUZWTEV0QlFVc3NTMEZCU3l4SlFVRkpPMEZCUXpkRExHbENRVUZQTEdsQ1FVRnBRaXhKUVVGSkxFbEJRVWtzWTBGQll5eEpRVU5zUWl4SlFVRkpMR05CUVdNc1MwRkJTeXhQUVVGUExFMUJRVTBzVVVGQlVTeExRVUZMTEUxQlFVMHNXVUZCV1R0QlFVRkJMRkZCUTJwSE8wRkJRVUVzVVVGRlFTeG5Ra0ZCTkVJN1FVRkRNVUlzWTBGQlNTeExRVUZMTERSQ1FVRTJRanRCUVVOd1F5eHJRa0ZCVFN4SlFVRkpMRTFCUVUwc2JVSkJRVzFDTzBGQlFVRXNWVUZEY2tNN1FVRkRRU3huUWtGQlRTeGxRVUZsTEZWQlFWVXNTMEZCU3l4TFFVRkxMRWxCUVVrN1FVRkROME1zYVVKQlFVOHNhVUpCUVdsQ0xFbEJRVWtzU1VGQlNTeFhRVUZYTEVsQlFVa3NTVUZCU1N4WFFVRlhMRXRCUVVzc1QwRkJUeXhOUVVGTkxGRkJRVkVzUzBGQlN5eE5RVUZOTEZsQlFWazdRVUZCUVN4UlFVTnFTRHRCUVVGQkxGRkJSVUVzVVVGQlVTeFRRVUYzUXp0QlFVTTVReXhqUVVGSkxGVkJRVlVzUzBGQlN5eFBRVUZQTEUxQlFVMHNWVUZCVlN4TFFVRkxMRXRCUVVzc1NVRkJTU3hIUVVGSE8wRkJRM3BFTEd0Q1FVRk5MRWxCUVVrc1RVRkJUU3h0UWtGQmJVSTdRVUZCUVN4VlFVTnlRenRCUVVOQkxHbENRVUZQTEVsQlFVa3NaMEpCUVdVc1MwRkJTeXhSUVVGUkxFdEJRVXNzVlVGQlZTeExRVUZMTEUxQlFVMHNUMEZCVHp0QlFVRkJMRkZCUXpGRk8wRkJRVUVzVFVGRFJqdEJRVVZCTEUxQlFVMHNjVUpCUVU0c1RVRkJiVVE3UVVGQlFTeFJRV0ZxUkN4WlFVRnZRaXhSUVVFclFpeFRRVUYzUWl4dFFrRkJNa0k3UVVGQmJFWTdRVUZCSzBJN1FVRkdia1FzWlVGQlVTeHRRa0ZCYlVJN1FVRkRNMElzWlVGQlVTeHBRa0ZCYVVJN1FVRkZka0lzWlVGQlN5eGpRVUZqTEZGQlFWRTdRVUZETTBJc1owSkJRVTBzVlVGQlZTeFBRVUZQTzBGQlIzWkNMR05CUVVrc1dVRkJZU3h6UWtGQmMwSTdRVUZEZGtNc1pVRkJTeXhyUWtGQmEwSXNVVUZCVVN4WFFVRlhPMEZCUXpGRExHZENRVUZOTEdGQlFXRXNVVUZCVVN4WFFVRlhPMEZCUTNSRExHVkJRVXNzWTBGQll5eFJRVUZSTEZkQlFWYzdRVUZEZEVNc1pVRkJTeXh0UWtGQmJVSXNVVUZCVVN4WFFVRlhPMEZCUXpORExHVkJRVXNzYVVKQlFXbENMRkZCUVZFc1YwRkJWenRCUVVWNlF5eG5Ra0ZCVFN4VFFVRjFRaXhEUVVGRE8wRkJRemxDTEcxQ1FVRlRMRWxCUVVrc1IwRkJSeXhKUVVGSkxGbEJRVmtzUzBGQlN6dEJRVU51UXl4clFrRkJUU3hYUVVGWExGRkJRVkVzVjBGQlZ6dEJRVU53UXl4clFrRkJUU3hQUVVGUExGRkJRVkVzVjBGQlZ6dEJRVU5vUXl4clFrRkJUU3hOUVVGTkxGRkJRVkVzVjBGQlZ6dEJRVU12UWl4clFrRkJUU3hQUVVGcFFpeERRVUZETzBGQlEzaENMSEZDUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEV0QlFVc3NTMEZCU3p0QlFVTTFRaXh0UWtGQlN5eExRVUZMTEZGQlFWRXNWMEZCVnl4RFFVRkRPMEZCUVVFc1dVRkRhRU03UVVGRFFTeHRRa0ZCVHl4TFFVRkxMRWxCUVVrc1pVRkJaU3hSUVVGUkxGVkJRVlVzVFVGQlRTeEpRVUZKTEVOQlFVTTdRVUZCUVN4VlFVTTVSRHRCUVVOQkxHVkJRVXNzVTBGQlV6dEJRVUZCTEZGQlEyaENPMEZCUVVFc1VVRm9RMEVzU1VGQlNTeHRRa0ZCTmtNN1FVRkRMME1zYVVKQlFVOHNTMEZCU3l4UlFVRlJPMEZCUVVFc1VVRkRkRUk3UVVGQlFTeFJRVU5CTEVsQlFVa3NiVUpCUVN0Q08wRkJRMnBETEdsQ1FVRlBMRXRCUVVzc1QwRkJUeXhQUVVGUExGTkJRVk1zUzBGQlN5eHJRa0ZCYTBJc1MwRkJTeXh0UWtGQmJVSXNTMEZCU3l4alFVRmpPMEZCUVVFc1VVRkRka2M3UVVGQlFTeFJRVFpDUVN3NFFrRkJkMFE3UVVGRGRFUXNhVUpCUVU4N1FVRkJRU3haUVVOTUxFdEJRVXNzVVVGQlVTeFBRVUZQTEU5QlFVODdRVUZCUVN4WlFVRXdRaXhMUVVGTExGRkJRVkVzVDBGQlR5eFBRVUZQTzBGQlFVRXNXVUZEYUVZc1MwRkJTeXhSUVVGUkxFOUJRVThzVDBGQlR6dEJRVUZCTEZWQlF6ZENPMEZCUVVFc1VVRkRSanRCUVVGQkxGRkJSVUVzYjBOQlFUUkRPMEZCUXpGRExHbENRVUZQTEV0QlFVc3NVVUZCVVN4UFFVRlBMRTlCUVU4N1FVRkJRU3hSUVVOd1F6dEJRVUZCTEZGQlJVRXNVVUZCVVN4VFFVRnpRaXh6UWtGQmVVVTdRVUZGY2tjc1owSkJRVTBzWlVGRFJpeHpRa0ZCYzBJc1VVRkJVU3hKUVVGSkxFOUJRVXNzVDBGQlR5eE5RVUZOTEZkQlFWY3NTMEZCU3l4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUzBGQlN6dEJRVVV2Uml4blFrRkJUU3huUWtGQlowSXNjMEpCUVhOQ0xGZEJRVmNzUTBGQlF6dEJRVU40UkN4blFrRkJUU3h4UWtGQmNVSXNRMEZCUXl4UFFVRmxMRlZCUVd0Q0xGTkJRM3BFTEVsQlFVa3NaVUZCWlN4TFFVRkxMRkZCUVZFc1ZVRkJWU3hMUVVGTExFOUJRVThzVDBGQlR5eEpRVUZKTEVkQlFVY3NTVUZCU1R0QlFVTTFSU3huUWtGQlRTeDNRa0ZCZDBJc1EwRkJReXhWUVVGclFpeFRRVUYzUXp0QlFVTjJSaXhyUWtGQlRTeGpRVUZqTEhGQ1FVRnhRaXhSUVVGUk8wRkJRMnBFTEdkQ1FVRkpMRU5CUVVNc1lVRkJZVHRCUVVOb1FpeHZRa0ZCVFN4SlFVRkpMRTFCUVUwc01FSkJRVEJDTEZGQlFWRXNSVUZCUlR0QlFVRkJMRmxCUTNSRU8wRkJRMEVzYTBKQlFVMHNZVUZCWVN4alFVRmpMRlZCUVZVc1MwRkJTeXhKUVVGSk8wRkJRM0JFTEd0Q1FVRk5MRmxCUVZrc1lVRkJZU3hKUVVGSkxFdEJRVXNzVVVGQlVTeGxRVUZsTEU5QlFVOHNWVUZCVlN4RlFVRkZMRXRCUVVzN1FVRkRka1lzYlVKQlFVOHNTVUZCU1N4bFFVRmxMRXRCUVVzc1VVRkJVU3hWUVVGVkxGZEJRVmNzU1VGQlNUdEJRVUZCTEZWQlEyeEZPMEZCUTBFc2FVSkJRVThzUzBGQlN5eFJRVUZSTzBGQlFVRXNXVUZEYUVJN1FVRkJRU3haUVVGVE8wRkJRVUVzV1VGQll6dEJRVUZCTEZsQlFXVTdRVUZCUVN4WlFVRnZRanRCUVVGQkxGbEJRWFZDTEV0QlFVczdRVUZCUVN4VlFVRlhPMEZCUVVFc1VVRkRka2M3UVVGQlFTeFJRVVZCTEU5QlFVOHNUMEZCWlN4TlFVRnBRenRCUVVOeVJDeG5Ra0ZCVFN4UlFVRlJMRXRCUVVzc1QwRkJUeXhWUVVGVk8wRkJRM0JETEdOQlFVazdRVUZEUml4clFrRkJUU3hQUVVGUExFdEJRVXNzVDBGQlR6dEJRVUZCTEdWQlFWa3NTVUZCU1N4TFFVRkxMRlZCUVZVN1FVRkJRVHRCUVVGQkxGbEJRWE5DTzBGQlF6bEZMR2RDUVVGSkxGTkJRVk1zVVVGQlVUdEJRVU55UWl4cFFrRkJTeXhQUVVGUExGRkJRVkVzVVVGQlVTeEpRVUZKTEV0QlFVczdRVUZEY2tNc2NVSkJRVk1zU1VGQlNTeEhRVUZITEVsQlFVa3NTMEZCU3l4UlFVRlJMRXRCUVVzN1FVRkRjRU1zYlVKQlFVc3NUMEZCVHl4UlFVRlJMRkZCUVZFc1NVRkJTU3hMUVVGTExFTkJRVU03UVVGQlFTeFpRVU40UXp0QlFVTkJMRzFDUVVGUExFdEJRVXNzVDBGQlR5eFpRVUZoTEV0QlFVc3NhVUpCUVdsQ0xFOUJRVThzU1VGQlNUdEJRVUZCTEZWQlEyNUZMRk5CUVZNc1IwRkJSenRCUVVOV0xHdENRVUZOTEVsQlFVazdRVUZCUVN4alFVTk9MSE5EUVVGelF5eExRVUZMTEdkQ1FVRm5RaXhKUVVGSkxEaEhRVVZ5UkN4RFFVRkRPMEZCUVVFc1dVRkJSVHRCUVVGQkxGVkJRMjVDTEZWQlFVVTdRVUZEUVN4cFFrRkJTeXhQUVVGUExHRkJRV0VzUzBGQlN6dEJRVUZCTEZWQlEyaERPMEZCUVVFc1VVRkRSanRCUVVGQkxFMUJRMFk3UVVFd1FrOHNUVUZCVFN4UFFVTlVMRTlCUVUwc1RVRkJkMElzVVVGQmRVSkRMRTFCUVZVc1pVRkJNa003UVVGRE5VY3NZMEZCVFN4WFFVRlhMRTlCUVU4N1FVRkRlRUlzV1VGQlNTeERRVUZETEZWQlFWVTdRVUZEWWl4blFrRkJUU3hKUVVGSkxFMUJRVTBzYlVaQlFXMUdPMEZCUVVFc1VVRkRja2M3UVVGRlFTeFpRVUZKTEZOQlFWTXNWVUZCVlR0QlFVTnlRaXhuUWtGQlRTeFZRVUZWTEVsQlFVa3NZMEZCWXp0QlFVTnNReXhuUWtGQlRTeFJRVUZSTEZkQlFWZEJMRTFCUVVzc1ZVRkJWenRCUVVWNlF5eHRRa0ZCVXl4VlFVRlZPMEZCUVVFN1FVRkJRU3haUVVWcVFqdEJRVUZCTzBGQlFVRXNXVUZIUVN4RFFVRkRMRk5CUVdsQ0xGRkJRVkVzVFVGQlRTeEpRVUZKTzBGQlFVRTdRVUZCUVN4WlFVZHdReXhEUVVGRExGRkJRV2RDTEZGQlFWRXNTMEZCU3l4SFFVRkhPMEZCUVVFN1FVRkJRU3haUVVkcVF5eERRVUZETEV0QlFXRXNTMEZCWVN4TlFVRmpMR05CUVdNc1ZVRkJWVHRCUVVNdlJDeHJRa0ZCU1N4aFFVRmhPMEZCUTJZc01FSkJRVlVzVjBGQlZ5eE5RVUZOTEd0RFFVRnJReXhIUVVGSExGTkJRVk1zUjBGQlJ5eFZRVUZWTEVsQlFVa3NSVUZCUlR0QlFVTTFSaXgzUWtGQlVTeFBRVUZQTEV0QlFVc3NSMEZCUnp0QlFVRkJMR05CUTNwQ0xFOUJRVTg3UVVGRFRDd3dRa0ZCVlN4WFFVRlhMRTFCUVUwc2VVTkJRWGxETEVkQlFVY3NaVUZCWlN4SFFVRkhMRlZCUVZVc1NVRkJTU3hGUVVGRk8wRkJRM3BITEhOQ1FVRk5MRTlCUVU4c1QwRkJUeXhQUVVGUExGTkJRVk1zVVVGQlVTeEpRVUZKTEZGQlFWRXNTMEZCU3l4SlFVRkpPMEZCUTJwRkxIZENRVUZSTEU5QlFVOHNTMEZCU3l4SlFVRkpPMEZCUVVFc1kwRkRNVUk3UVVGQlFTeFpRVU5HTzBGQlFVRTdRVUZCUVN4WlFVZEJMRTlCUVUwc1YwRkJiVUlzV1VGQmIwSXNVMEZEZUVJN1FVRkRaanRCUVVGQkxHZENRVU5KTzBGQlFVRXNaMEpCUTBFc1RVRkJUU3gzUTBGQmQwTXNVMEZCVXl4blFrRkJaMElzVlVGQlZTeFZRVUZWTEVsQlFVazdRVUZCUVN4alFVRkZPMEZCUlhKSExHOUNRVUZOTEZGQlFWRTdRVUZCUVN4blFrRkRWanRCUVVGQkxHZENRVUZYTEUxQlFVMHNUMEZCVHl4UFFVRlBMRk5CUVZNc1pVRkJaU3hKUVVGSkxHVkJRV1VzUzBGQlN5eEpRVUZKTzBGQlFVRXNZMEZCUXp0QlFVRkJMRmxCUXpGR08wRkJRVUU3UVVGQlFTeFpRVWRLTEVOQlFVTXNXVUZCYjBJc1ZVRkJhMElzWTBGQmRVSXNVVUZCVVR0QlFVRkJMR05CUTJ4Rk8wRkJRVUVzWTBGQldUdEJRVUZCTEdOQlFWVTdRVUZCUVN4alFVRlhMRTlCUVU4c1lVRkJZU3hQUVVGUExHbENRVUZyUWl4UlFVRlJMRU5CUVVNN1FVRkJRU3haUVVGRE8wRkJRVUU3UVVGQlFTeFpRVWMxUml4RFFVRkRMRmRCUVcxQ0xGRkJRVkVzWTBGQll5eE5RVUZOTzBGQlFVRTdRVUZCUVN4WlFVZG9SQ3hEUVVGRExGRkJRV2RDTEcxQ1FVRXlRaXhsUVVGMVFpeFhRVUYzUXp0QlFVTjZSenRCUVVGQkxHZENRVU5KTzBGQlFVRXNaMEpCUTBFc1RVRkJUU3h0UTBGQmJVTXNZVUZCWVN4WlFVRlpMRTFCUVUwc2RVSkJRM0JGTEdsQ1FVRnBRanRCUVVGQkxHTkJRVVU3UVVGRE0wSXNiMEpCUVUwc1ZVRkJWU3hKUVVGSkxHMUNRVUZ0UWl4UlFVRlJMRk5CUVZNc2FVSkJRV2xDTzBGQlEzcEZMSEZDUVVGUExGRkJRVkVzWTBGQll5eFJRVUZSTEZOQlFWTXNUVUZCVFR0QlFVRkJMRmxCUTNSRU8wRkJRVUU3UVVGQlFTeFpRVVZCTEUxQlFVMHNVVUZCVVN4aFFVRmhPMEZCUVVFN1FVRkJRU3haUVVVelFpeE5RVUZOTEZGQlFWRXNWMEZCVnp0QlFVRkJPMEZCUVVFc1dVRkZla0lzVFVGQlRTeFJRVUZSTEU5QlFVODdRVUZCUVN4VlFVTjJRaXhEUVVGRE8wRkJRVUVzVVVGRFNDeFBRVUZQTzBGQlEwd3NiVUpCUVZNc1QwRkJUenRCUVVGQkxGRkJRMnhDTzBGQlFVRXNUVUZEUmp0QlFVRkJPMEZCUVVFN096dEJRMnBRVHl4TlFVRk5MRTlCUVU4N096dEJRMVZ3UWl4TlFVRkpPMEZCUlVvc1RVRkJTU3hQUVVFNFFqdEJRVU5vUXl4eFFrRkJhVUk3UVVGQlFTeEZRVU51UWl4UFFVRlBPMEZCUTB3c2NVSkJRMGtzVVVGQk5FSXNUMEZCYlVNN1FVRkJRU3hGUVVOeVJUdEJRVVZCTEUxQlFVMHNlVUpCUVdsRkxFOUJRMnhGTEZGQlFUUkNMRTlCUTBFc2QwTkJRemRDTzBGQlIwb3NUVUZCU1R0QlFVTktMRTFCUVVrc1kwRkJZenRCUVVOc1FpeE5RVUZKTEdWQlFXVTdRVUZEYmtJc1RVRkJTU3hWUVVGVk8wRkJSV1FzVFVGQlRTeDVRa0ZCZVVJc1EwRkJReXhsUVVGblF6dEJRVVU1UkN4UlFVRkpMR1ZCUVdVc1IwRkJSenRCUVVOd1FpeGhRVUZQTzBGQlFVRXNTVUZEVkR0QlFVZEJMRkZCUVVrc1QwRkJUeXh6UWtGQmMwSXNZVUZCWVR0QlFVTTFReXhWUVVGSkxFOUJRVThzVTBGQlV5eGxRVUZsTEVOQlFVTXNTMEZCU3l4eFFrRkJjVUk3UVVGRk5VUXNaMEpCUVZFN1FVRkJRU3hWUVVOS0xHMURRVUZ0UXl4aFFVTnVRenRCUVVGQkxGRkJRMnRGTzBGQlFVRXNUVUZEZUVVN1FVRkRRU3hoUVVGUE8wRkJRVUVzU1VGRFZEdEJRVWRCTEZGQlFVa3NUMEZCVHl4WlFVRlpMR1ZCUVdVc1VVRkJVU3haUVVGWkxGRkJRVkVzVTBGQlV5eE5RVUZOTzBGQlJTOUZMR05CUVZFN1FVRkJRU3hSUVVOS0xHMURRVUZ0UXl4aFFVTnVRenRCUVVGQkxFMUJRelJGTzBGQlFVRXNTVUZEYkVZN1FVRkZRU3hSUVVGSk8wRkJSMFlzVlVGQlNTeFBRVUZQTEcxQ1FVRnRRaXhoUVVGaE8wRkJRM3BETEZsQlFVa3NaVUZCWlN4RlFVRkZMRTFCUVUwc1dVRkJXU3hKUVVGSkxHdENRVUZyUWl4RFFVRkRMRU5CUVVNN1FVRkJRU3hOUVVOcVJUdEJRVWxCTEdGQlFVOHNXVUZCV1N4VFFVRlRMRWxCUVVrc1YwRkJWenRCUVVGQkxGRkJRM3BETzBGQlFVRXNVVUZCUnp0QlFVRkJMRkZCUVVrN1FVRkJRU3hSUVVGTE8wRkJRVUVzVVVGQlN6dEJRVUZCTEZGQlFVYzdRVUZCUVN4UlFVRkpPMEZCUVVFc1VVRkJTVHRCUVVGQkxGRkJRVWM3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZCUnp0QlFVRkJMRkZCUVVrN1FVRkJRU3hSUVVGSk8wRkJRVUVzVVVGQlN6dEJRVUZCTEZGQlFVazdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWs3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZEYmtVN1FVRkJRU3hSUVVGSE8wRkJRVUVzVVVGQlNUdEJRVUZCTEZGQlFVczdRVUZCUVN4UlFVRkxPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWs3UVVGQlFTeFJRVUZKTzBGQlFVRXNVVUZCUnp0QlFVRkJMRkZCUVVjN1FVRkJRU3hSUVVGSE8wRkJRVUVzVVVGQlNUdEJRVUZCTEZGQlFVazdRVUZCUVN4UlFVRkxPMEZCUVVFc1VVRkJTVHRCUVVGQkxGRkJRVWM3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZCU1R0QlFVRkJMRTFCUTJ4RkxFTkJRVU1zUTBGQlF6dEJRVUZCTEVsQlEwb3NVMEZCVXl4SFFVRkhPMEZCUTFZc1lVRkJUenRCUVVGQkxFbEJRMVE3UVVGQlFTeEZRVU5HTzBGQlJVRXNUVUZCVFN4clFrRkJhMElzVFVGQlpUdEJRVU55UXl4UlFVRkpPMEZCWlVZc1lVRkJUeXhaUVVGWkxGTkJRVk1zU1VGQlNTeFhRVUZYTzBGQlFVRXNVVUZEZWtNN1FVRkJRU3hSUVVGTE8wRkJRVUVzVVVGQlNUdEJRVUZCTEZGQlFVczdRVUZCUVN4UlFVRkxPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWM3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZCUnp0QlFVRkJMRkZCUVVjN1FVRkJRU3hSUVVGSE8wRkJRVUVzVVVGQlJ6dEJRVUZCTEZGQlFVazdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWM3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZCUnp0QlFVRkJMRkZCUVVjN1FVRkJRU3hSUVVGSk8wRkJRVUVzVVVGQlNUdEJRVUZCTEZGQlFVczdRVUZCUVN4UlFVRkxPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWs3UVVGQlFTeFJRVU4yUmp0QlFVRkJMRkZCUVVzN1FVRkJRU3hSUVVGSk8wRkJRVUVzVVVGQlN6dEJRVUZCTEZGQlFVczdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWM3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZCUnp0QlFVRkJMRkZCUVVjN1FVRkJRU3hSUVVGSE8wRkJRVUVzVVVGQlNUdEJRVUZCTEZGQlFVYzdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVWM3UVVGQlFTeFJRVUZITzBGQlFVRXNVVUZCUnp0QlFVRkJMRkZCUVVrN1FVRkJRU3hSUVVGSk8wRkJRVUVzVVVGQlN6dEJRVUZCTEZGQlFVczdRVUZCUVN4UlFVRkhPMEZCUVVFc1VVRkJTVHRCUVVGQkxFMUJRM3BHTEVOQlFVTXNRMEZCUXp0QlFVRkJMRWxCUTBvc1UwRkJVeXhIUVVGSE8wRkJRMVlzWVVGQlR6dEJRVUZCTEVsQlExUTdRVUZCUVN4RlFVTkdPMEZCUlVFc1RVRkJUU3hyUWtGQmEwSXNRMEZCUXl4VFFVRnJRaXhsUVVGM1FqdEJRVU5xUlN4UlFVRkpMRk5CUVZNN1FVRkRXQ3hWUVVGSkxFOUJRVGhDTzBGQlEyaERMR1ZCUVU4N1FVRkJRU3hOUVVOVU8wRkJRMEVzWVVGQlR5eGhRVUZoTEdkRFFVRm5RenRCUVVGQkxFbEJRM1JFTEU5QlFVODdRVUZEVEN4aFFVRlBMR0ZCUVdFc01rSkJRVEpDTzBGQlFVRXNTVUZEYWtRN1FVRkJRU3hGUVVOR08wRkJSVThzVFVGQlRTeDNRa0ZCZDBJc1QwRkJUU3hWUVVFclF6dEJRVU40Uml4UlFVRkpMR0ZCUVdFN1FVRkRaaXhoUVVGUExGRkJRVkVzVVVGQlVUdEJRVUZCTEVsQlEzcENPMEZCUTBFc1VVRkJTU3hqUVVGak8wRkJRMmhDTEZsQlFVMHNTVUZCU1N4TlFVRk5MSFZFUVVGNVJEdEJRVUZCTEVsQlF6TkZPMEZCUTBFc1VVRkJTU3hUUVVGVE8wRkJRMWdzV1VGQlRTeEpRVUZKTEUxQlFVMHNiMFJCUVhORU8wRkJRVUVzU1VGRGVFVTdRVUZGUVN4dFFrRkJaVHRCUVVkbUxGVkJRVTBzVlVGQlZTeE5RVUZOTzBGQlEzUkNMRlZCUVUwc1lVRkJZU3hOUVVGTk8wRkJRM3BDTEZWQlFVMHNUMEZCVHl4TlFVRk5PMEZCUlc1Q0xGVkJRVTBzWVVGQllTeDFRa0ZCZFVJc1ZVRkJWVHRCUVVOd1JDeFZRVUZOTEZWQlFWVXNVVUZCVVN4blFrRkJaMEk3UVVGRmVFTXNWVUZCVFN4WlFVRlpMRTFCUVUwN1FVRkRlRUlzVlVGQlRTeHhRa0ZCY1VJc1QwRkJUeXhqUVVGakxGZEJRVmNzV1VGQldUdEJRVU4yUlN4VlFVRk5MR1ZCUVdVc1owSkJRV2RDTEZOQlFWTXNWVUZCVlR0QlFVTjRSQ3hWUVVGTkxHMUNRVUZ0UWl4UFFVRlBMR05CUVdNc1YwRkJWeXhWUVVGVkxGbEJRVmtzU1VGQlNUdEJRVVZ1Uml4UlFVRkpMRmxCUVZrN1FVRkZhRUlzVlVGQlRTeFJRVUU0UWl4RFFVRkRPMEZCUjNKRExGRkJRVWtzVlVGQlZTeEhRVUZITzBGQlEyWXNXVUZCVFN4TFFVRkxMRWxCUVVrc1VVRkJVU3hEUVVGRExGbEJRVms3UVVGRGJFTXNiVUpCUVZjc1RVRkJUVHRCUVVObUxITkNRVUZaTzBGQlExb3NhMEpCUVZFN1FVRkJRU3hSUVVOV0xFZEJRVWNzVDBGQlR6dEJRVUZCTEUxQlExb3NRMEZCUXl4RFFVRkRPMEZCUVVFc1NVRkRTanRCUVVkQkxGVkJRVTBzUzBGQlN5eEpRVUZKTEZGQlFWRXNRMEZCUXl4VFFVRlRMRmRCUVZjN1FVRkRNVU1zV1VGQlRTeFZRVUZWTEdGQlFXRXNlVUpCUVhsQ08wRkJRM1JFTEZsQlFVMHNVMEZCYVVNN1FVRkJRU3hSUVVOeVF5eFpRVUZaTEVOQlFVTXNWVUZCYTBJc2IwSkJRVFJDTzBGQlEzcEVMR05CUVhWRExHTkJRV01zVTBGQlV5eFRRVUZUTEZsQlFWa3NTMEZETDBVc1QwRkJUeXhUUVVGVExHRkJRV0U3UVVGREwwSXNiVUpCUVU4c1NVRkJTU3huUWtGQlowSXNTVUZCU1R0QlFVRkJMR05CUXpOQ08wRkJRVUU3UVVGQlFUdEJRVUZCTEdkQ1FVZEZPMEZCUVVFc1kwRkRSanRCUVVGQkxHTkJRMEVzUlVGQlF5eE5RVUZOTEd0Q1FVRnBRanRCUVVGQkxGbEJRVU1zUTBGQlF6dEJRVUZCTEZWQlEyaERPMEZCUlVFc1kwRkJTU3hUUVVGVExGTkJRVk1zVDBGQlR5eEhRVUZITzBGQlF6bENMR2RDUVVGSkxHdENRVUZyUWp0QlFVTndRaXh4UWtGQlR6dEJRVUZCTEZsQlExUTdRVUZGUVN4clFrRkJUU3hUUVVGVExITkNRVUZ6UWp0QlFVVnlReXhuUWtGQlNTeE5RVUUwUWp0QlFVTTVRaXhyUWtGQlNTeHBRa0ZCYVVJc2MwSkJRWE5DTzBGQlEzcERMSFZDUVVGUExGTkJRVk03UVVGQlFTeGpRVU5zUWl4WFFVRlhMR2xDUVVGcFFpd3JRa0ZCSzBJN1FVRkRla1FzZFVKQlFVOHNVMEZCVXp0QlFVRkJMR05CUTJ4Q08wRkJRVUVzV1VGRFJqdEJRVVZCTEcxQ1FVRlBMRk5CUVZNN1FVRkJRU3hWUVVOc1FqdEJRVVZCTEdsQ1FVRlBMR3RDUVVGclFqdEJRVUZCTEZGQlF6TkNPMEZCUVVFc1RVRkRSanRCUVVWQkxGVkJRWFZETEZsQlFWazdRVUZEYWtRc1pVRkJUeXhoUVVGaE8wRkJRM0JDTEZsQlFVa3NUMEZCVHl4VFFVRlRMR0ZCUVdFN1FVRkRMMElzYVVKQlFVOHNjMEpCUVRKQ0xFdEJRVXNzVjBGQlZ5eHpRa0ZCYzBJN1FVRkJRU3hSUVVNeFJTeFBRVUZQTzBGQlEwd3NaMEpCUVUwc2JVSkJRVzFDTEhWQ1FVRjFRaXhSUVVGUkxGTkJRVk1zUTBGQlF6dEJRVU5zUlN4cFFrRkJUeXh6UWtGQmMwSXNTVUZCU1N4TFFVRkxMRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NSVUZCUXl4TlFVRk5MR3RDUVVGcFFpeERRVUZETzBGQlFVRXNVVUZEY2tZN1FVRkJRU3hOUVVOR08wRkJSVUVzWTBGQlVTeE5RVUZOTEVWQlFVVTdRVUZCUVR0QlFVRkJMRkZCUlZvc1dVRkJWVHRCUVVOU0xIbENRVUZsTzBGQlEyWXNkMEpCUVdNN1FVRkRaQ3hwUWtGQlR6dEJRVU5RTEd0Q1FVRlJPMEZCUVVFc1VVRkRWanRCUVVGQk8wRkJRVUVzVVVGRlFTeERRVUZETEZOQlFWTTdRVUZEVWl4NVFrRkJaVHRCUVVObUxHOUNRVUZWTzBGQlExWXNhVUpCUVU4c1NVRkJTVHRCUVVGQkxGRkJRMkk3UVVGQlFTeE5RVUZETzBGQlFVRXNTVUZEVUN4RFFVRkRMRU5CUVVNN1FVRkZSaXhWUVVGTkxGRkJRVkVzUzBGQlN5eExRVUZMTzBGQlJYaENMRkZCUVVrc1YwRkJWenRCUVVOaUxGbEJRVTBzU1VGQlNTeE5RVUZOTERKRVFVRXlSQ3hQUVVGUExFbEJRVWs3UVVGQlFTeEpRVU40Ump0QlFVRkJMRVZCUTBZN1FVRkZUeXhOUVVGTkxHTkJRV01zVFVGQmNVSTdRVUZET1VNc1VVRkJTU3hsUVVGbExFMUJRVTA3UVVGRGRrSXNZVUZCVHp0QlFVRkJMRWxCUTFRN1FVRkZRU3hWUVVGTkxFbEJRVWtzVFVGQlRTeHhRMEZCY1VNN1FVRkJRU3hGUVVOMlJEczdPMEZETDA1UExFMUJRVTBzYTBKQlFXdENMRU5CUVVNc1RVRkJZeXhYUVVFMlFqdEJRVU42UlN4VlFVRk5ReXhSUVVGUExGbEJRVms3UVVGRmVrSXNWVUZCVFN4aFFVRmhRU3hOUVVGTExHZENRVUZuUWl4SlFVRkpMRWxCUVVrN1FVRkRhRVFzVlVGQlRTeGhRVUZoUVN4TlFVRkxMRkZCUVZFc1ZVRkJWVHRCUVVNeFF5eEpRVUZCUVN4TlFVRkxMR0ZCUVdFc1RVRkJUU3haUVVGWkxGVkJRVlU3UVVGRE9VTXNWMEZCVHl4TFFVRkxMRlZCUVZVN1FVRkZkRUlzVjBGQlR6dEJRVUZCTEVWQlExUTdRVUZOVHl4TlFVRk5MSE5DUVVOVUxFTkJRVU1zVTBGQmEwTXNVVUZCWjBJc1RVRkRiRVFzV1VGQmRVTTdRVUZEZEVNc1VVRkJTU3hQUVVGUExGZEJRVmNzV1VGQldTeFpRVUZaTEUxQlFVMDdRVUZEYkVRc1ZVRkJTU3hMUVVGTExFbEJRVWtzVDBGQlR5eEhRVUZITzBGQlEzSkNMR05CUVUwc1NVRkJTU3hOUVVGTkxDdENRVUVyUWp0QlFVRkJMRTFCUTJwRUxFOUJRVTg3UVVGRFRDeGhRVUZMTEVsQlFVa3NUMEZCVHp0QlFVRkJMRTFCUTJ4Q08wRkJRVUVzU1VGRFJqdEJRVVZCTEZkQlFVOHNVVUZCVVN4UFFVRlBMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU1zUzBGQlN5eExRVUZMTEUxQlFVMDdRVUZEYUVRc1dVRkJUU3hQUVVGUkxGTkJRVlVzVTBGQlV5eE5RVUZOTzBGQlEzWkRMRlZCUVVrc1QwRkJUeXhWUVVGVkxGVkJRVlU3UVVGRE4wSXNORUpCUVc5Q0xFOUJRV3RETEU5QlFVOHNTMEZCU3l4TlFVRk5MRTlCUVU4N1FVRkJRU3hOUVVOcVJpeFhRVUZYTEU5QlFVOHNWVUZCVlN4WlFVRlpMRTlCUVU4c1ZVRkJWU3hWUVVGVk8wRkJRMnBGTEdkQ1FVRlJMRTFCUVUwc1RVRkJUU3hUUVVGVExFTkJRVU03UVVGQlFTeE5RVU5vUXl4WFFVRlhMRTlCUVU4c1ZVRkJWU3hYUVVGWE8wRkJRM0pETEdkQ1FVRlJMRTFCUVU4c1VVRkJVeXhOUVVGTkxFZEJRVWM3UVVGQlFTeE5RVU51UXl4UFFVRlBPMEZCUTB3c1kwRkJUU3hKUVVGSkxFMUJRVTBzYlVOQlFXMURMRTlCUVU4c1MwRkJTeXhGUVVGRk8wRkJRVUVzVFVGRGJrVTdRVUZCUVN4SlFVTkdMRU5CUVVNN1FVRkJRU3hGUVVOSU8wRkJUVWNzVFVGQlRTeHBRa0ZCYVVJc1EwRkJReXhaUVVFd1FqdEJRVU4yUkN4VlFVRk5RU3hSUVVGUExGbEJRVms3UVVGRmVrSXNWVUZCVFN4UlFVRlJRU3hOUVVGTExGVkJRVlU3UVVGRE4wSXNVVUZCU1R0QlFVTkdMRmxCUVUwc1pVRkJaVUVzVFVGQlN5eFhRVUZYTEVOQlFVTTdRVUZEZEVNc1RVRkJRVUVzVFVGQlN5eHBRa0ZCYVVJc1kwRkJZeXhsUVVGbExFTkJRVU03UVVGRGNFUXNXVUZCVFN4WlFVRlpRU3hOUVVGTExFOUJRVThzWlVGQlpTeERRVUZETzBGQlF6bERMRmxCUVUwc2MwSkJRWE5DUVN4TlFVRkxMRkZCUVZFc1pVRkJaU3hKUVVGSkxFTkJRVU03UVVGRE4wUXNXVUZCVFN4bFFVRmxMSE5DUVVGelFrRXNUVUZCU3l4aFFVRmhMRzFDUVVGdFFpeEpRVUZKTzBGQlEzQkdMRmxCUVUwc1NVRkJTU3hOUVVGTkxFZEJRVWNzVDBGQlR5eG5Ra0ZCWjBJc1UwRkJVeXh2UWtGQmIwSXNXVUZCV1N4RlFVRkZPMEZCUVVFc1NVRkRka1lzVlVGQlJUdEJRVU5CTEUxQlFVRkJMRTFCUVVzc1lVRkJZU3hMUVVGTE8wRkJRVUVzU1VGRGVrSTdRVUZCUVN4RlFVTkdPenM3UVVOMlJFOHNUVUZCVFN4blFrRkJaMElzUTBGQlF5eFpRVUUyUkR0QlFVTjZSaXhWUVVGTlF5eFJRVUZQTEZsQlFWazdRVUZEZWtJc1VVRkJTU3h0UWtGQmJVSTdRVUZEZGtJc1ZVRkJUU3hUUVVGdFFpeERRVUZETzBGQlJURkNMRlZCUVUwc1lVRkJNRU1zVjBGQlZ5eERRVUZETzBGQlJUVkVMRkZCUVVrN1FVRkRSaXhWUVVGSkxGTkJRVk1zY1VKQlFYRkNMRkZCUVZjN1FVRkRNME1zYlVKQlFWY3NiVUpCUVcxQ08wRkJRVUVzVFVGRGFFTXNWMEZEU1N4UFFVRlBMRkZCUVZFc2NVSkJRWEZDTEZsQlFWa3NRMEZCUXl4UFFVRlBMRlZCUVZVc1VVRkJVU3huUWtGQlowSXNTMEZETVVZc1VVRkJVU3h0UWtGQmJVSXNTMEZCU3l4UlFVRlJMRzFDUVVGdFFpeEhRVUZITzBGQlEyaEZMR05CUVUwc1NVRkJTU3hOUVVGTkxIRkRRVUZ4UXl4UlFVRlJMR2RDUVVGblFpeEZRVUZGTzBGQlFVRXNUVUZEYWtZN1FVRkZRU3hWUVVGSkxGTkJRVk1zYzBKQlFYTkNMRkZCUVZjN1FVRkROVU1zYlVKQlFWY3NiMEpCUVc5Q08wRkJRVUVzVFVGRGFrTXNWMEZCVnl4UFFVRlBMRkZCUVZFc2MwSkJRWE5DTEZsQlFWa3NRMEZCUXl4UFFVRlBMRlZCUVZVc1VVRkJVU3hwUWtGQmFVSXNSMEZCUnp0QlFVTjRSeXhqUVVGTkxFbEJRVWtzVFVGQlRTeHhRMEZCY1VNc1VVRkJVU3hwUWtGQmFVSXNSVUZCUlR0QlFVRkJMRTFCUTJ4R08wRkJSVUVzVlVGQlNTeFRRVUZUTEdOQlFXTXNVVUZCVnp0QlFVTndReXh0UWtGQlZ5eFpRVUZaTzBGQlFVRXNUVUZEZWtJN1FVRkZRU3hWUVVGSkxHZENRVUZuUWp0QlFVTndRaXhWUVVGSkxGTkJRVk1zVVVGQlVTeFJRVUZYTzBGQlF6bENMSGRDUVVGblFpeG5Ra0ZCWjBJc1VVRkJVU3hMUVVGTExFMUJRVTA3UVVGQlFTeE5RVU55UkR0QlFVVkJMSGxDUVVGdFFrRXNUVUZCU3p0QlFVRkJMRkZCUTNCQ0xGZEJRVmM3UVVGQlFTeFJRVUZ0UWl4WFFVRlhPMEZCUVVFc1VVRkJiMElzUTBGQlF5eERRVUZETEZkQlFWYzdRVUZCUVN4UlFVRlpPMEZCUVVFc1RVRkJZVHRCUVVOMlJ5eFZRVUZKTEhGQ1FVRnhRaXhIUVVGSE8wRkJRekZDTEhWQ1FVRmxMREpDUVVFMFFqdEJRVUZCTEUxQlF6ZERPMEZCUlVFc1ZVRkJTU3hUUVVGVExGVkJRVlVzVVVGQlZ6dEJRVU5vUXl3MFFrRkJiMElzVVVGQlVTeFBRVUZQTEVsQlFVa3NiMEpCUVVrc1VVRkJhVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NWVUZCVlR0QlFVTTNSaXhuUWtGQlRTeG5Ra0ZCWjBJc1owSkJRV2RDTEV0QlFVc3NUVUZCVFR0QlFVTnFSQ3huUWtGQlRTeHJRa0ZCYTBJc1owSkJRV2RDTEU5QlFVOHNUVUZCVFR0QlFVVnlSQ3hqUVVGSlFTeE5RVUZMTEhOQ1FVRnpRaXhyUWtGQmEwSXNaVUZCWlN4bFFVRmxMRTFCUVUwc1IwRkJSenRCUVVOMFJpd3lRa0ZCWlN4cFEwRkJhVU1zUjBGQlJ5eE5RVUZOTEV0QlFVc3NSMEZCUnp0QlFVRkJMRlZCUTI1Rk8wRkJRVUVzVVVGRFJpeERRVUZETzBGQlFVRXNUVUZEU0R0QlFVVkJMR0ZCUVU4c1EwRkJReXhyUWtGQmEwSXNUVUZCVFR0QlFVRkJMRWxCUTJ4RExGTkJRVk1zUjBGQlJ6dEJRVU5XTEZWQlFVa3NjVUpCUVhGQ0xFZEJRVWM3UVVGRE1VSXNVVUZCUVVFc1RVRkJTeXh6UWtGQmMwSXNaMEpCUVdkQ08wRkJRVUVzVFVGRE4wTTdRVUZEUVN4aFFVRlBMRkZCUVZFc1YwRkJVMEVzVFVGQlN5eE5RVUZOTEV0QlFVc3NRMEZCUXp0QlFVTjZReXhaUVVGTk8wRkJRVUVzU1VGRFVqdEJRVUZCTEVWQlEwWTdPenRCUTNoRVFTeE5RVUZOTERKQ1FVRXlRaXhEUVVGRExESkNRVUZ0UkR0QlFVTnVSaXhaUVVGUkxIZENRVUYzUWp0QlFVRkJMRTFCUXpsQ0xFdEJRVXM3UVVGRFNDeGxRVUZQTzBGQlFVRXNUVUZEVkN4TFFVRkxPMEZCUTBnc1pVRkJUenRCUVVGQkxFMUJRMVFzUzBGQlN6dEJRVU5JTEdWQlFVODdRVUZCUVN4TlFVTlVMRXRCUVVzN1FVRkRTQ3hsUVVGUE8wRkJRVUVzVFVGRFZEdEJRVU5GTEdOQlFVMHNTVUZCU1N4TlFVRk5MSGxEUVVGNVF5eHpRa0ZCYzBJc1JVRkJSVHRCUVVGQkxFbEJRM0pHTzBGQlFVRXNSVUZEUmp0QlFVVkJMRTFCUVUwc2JVSkJRVzFDTEVOQlFVTXNhMEpCUVcxRU8wRkJRek5GTEZsQlFWRXNaVUZCWlR0QlFVRkJMRTFCUTNKQ0xFdEJRVXM3UVVGRFNDeGxRVUZQTzBGQlFVRXNUVUZEVkN4TFFVRkxPMEZCUTBnc1pVRkJUenRCUVVGQkxFMUJRMVE3UVVGRFJTeGpRVUZOTEVsQlFVa3NUVUZCVFN3clFrRkJLMElzWVVGQllTeEZRVUZGTzBGQlFVRXNTVUZEYkVVN1FVRkJRU3hGUVVOR08wRkJSVUVzVFVGQlRTeDFRa0ZCZFVJc1EwRkJReXhaUVVGdFJEdEJRVU12UlN4UlFVRkpMRU5CUVVNc1VVRkJVU3hQUVVGUE8wRkJRMnhDTEdOQlFWRXNVVUZCVVN4RFFVRkRPMEZCUVVFc1NVRkRia0k3UVVGRFFTeFJRVUZKTEVOQlFVTXNVVUZCVVN4TlFVRk5MRk5CUVZNN1FVRkRNVUlzWTBGQlVTeE5RVUZOTEZWQlFWVXNRMEZCUXp0QlFVRkJMRWxCUXpOQ08wRkJRMEVzVlVGQlRTeFZRVUZWTEZGQlFWRXNUVUZCVFR0QlFVTTVRaXhSUVVGSkxFTkJRVU1zVVVGQlVTdzRRa0ZCT0VJN1FVRkZla01zWTBGQlVTd3JRa0ZCSzBJN1FVRkJRU3hKUVVONlF6dEJRVWRCTEZGQlFVa3NVVUZCVVN4elFrRkRVaXhSUVVGUkxHMUNRVUZ0UWl4TFFVRkxMRk5CUVU4c1QwRkJUeXhQUVVGUExGZEJRVmNzUzBGQlN5eEhRVUZITEZWQlFWVXNVVUZCVVN4SFFVRkhPMEZCUXk5R0xHTkJRVkVzYlVKQlFXMUNPMEZCUVVFc1NVRkROMEk3UVVGQlFTeEZRVU5HTzBGQlJVRXNUVUZCVFN4M1FrRkRSaXhEUVVGRExITkNRVUU0UWl4dlFrRkRPVUlzVjBGQk1rSTdRVUZETVVJc1pVRkJWeXhOUVVGTkxHOUNRVUZ2UWp0QlFVTnVReXhWUVVGSkxGTkJRVk1zVDBGQlR5eFBRVUZQTEZkQlFWY3NTMEZCU3l4SFFVRkhPMEZCUnpsRExHTkJRVkVzVVVGQlVUdEJRVUZCTEZGQlEyUXNTMEZCU3p0QlFVTklMRzFDUVVGVE8wRkJRMVFzWTBGQlNTeFBRVUZQTEU5QlFVOHNWVUZCVlR0QlFVTXhRaXhyUWtGQlRTeGxRVUZsTzBGQlEzSkNMR2RDUVVGSkxHTkJRV01zV1VGQldUdEJRVU0xUWl4dlFrRkJUU3huUWtGQlowSXNaMEpCUVdkQ0xHTkJRV01zVFVGQlRUdEJRVU14UkN4dlFrRkJUU3hyUWtGQmEwSXNaMEpCUVdkQ0xHRkJRV0VzV1VGQldTeE5RVUZOTzBGQlEzWkZMR3RDUVVGSkxGbEJRVmtzUlVGQlJTd3dRa0ZCTUVJc2MwSkJRWE5DTEdWQlFXVXNaVUZCWlN4TlFVTTFSaXhIUVVGSE8wRkJRMHdzSzBKQlFXVXNiMFJCUVc5RUxHRkJRV0VzVlVGQlZTeEhRVUZITzBGQlFVRXNZMEZETDBZN1FVRkJRU3haUVVOR08wRkJRMEVzWjBKQlFVa3NZMEZCWXl4WlFVRlpPMEZCUXpWQ0xHdENRVUZKTEdGQlFXRXNZVUZCWVR0QlFVVTVRaXhyUWtGQlNTeFBRVUZQTEdOQlFXTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1ZVRkJWU3hWUVVGVkxFdEJRVXNzWVVGQllTeEhRVUZITzBGQlEzQkdMRFpDUVVGaE8wRkJRVUVzWTBGRFpqdEJRVU5CTEc5Q1FVRk5MR2RDUVVGblFpeG5Ra0ZCWjBJc1kwRkJZeXhOUVVGTk8wRkJRekZFTEc5Q1FVRk5MR3RDUVVGclFpeG5Ra0ZCWjBJc1YwRkJWeXhUUVVGVExFZEJRVWNzVFVGQlRUdEJRVU55UlN4clFrRkJTU3haUVVGWkxFVkJRVVVzTUVKQlFUQkNMSE5DUVVGelFpeGxRVUZsTEdWQlFXVXNUVUZETlVZc1IwRkJSenRCUVVOTUxDdENRVUZsTEc5RVFVRnZSQ3hoUVVGaExGVkJRVlVzUjBGQlJ6dEJRVUZCTEdOQlF5OUdPMEZCUVVFc1dVRkRSanRCUVVOQkxHZENRVUZKTEdOQlFXTXNhVUpCUVdsQ08wRkJRMnBETEc5Q1FVRk5MR2RDUVVGblFpeG5Ra0ZCWjBJc2JVSkJRVzFDTEUxQlFVMDdRVUZETDBRc2IwSkJRVTBzYTBKQlFXdENMR2RDUVVGblFpeGhRVUZoTEdsQ1FVRnBRaXhOUVVGTk8wRkJRelZGTEd0Q1FVRkpMRmxCUVZrc1JVRkJSU3d3UWtGQk1FSXNjMEpCUVhOQ0xHVkJRV1VzWlVGQlpTeE5RVU0xUml4SFFVRkhPMEZCUTB3N1FVRkJRU3hyUWtGRFNTeDVSRUZCZVVRc1lVRkJZU3hsUVVGbE8wRkJRVUVzWjBKQlFVYzdRVUZCUVN4alFVTTVSanRCUVVGQkxGbEJRMFk3UVVGQlFTeFZRVU5HTzBGQlEwRTdRVUZCUVN4UlFVTkdMRXRCUVVzN1FVRkRTQ3h0UWtGQlV6dEJRVU5VTEdOQlFVa3NUMEZCVHl4UFFVRlBMRlZCUVZVN1FVRkRNVUlzYTBKQlFVMHNaMEpCUVdkQ08wRkJRM1JDTEdkQ1FVRkpMR1ZCUVdVc2FVSkJRV2xDTzBGQlEyeERMR3RDUVVGSkxHTkJRV01zYjBKQlFXOUNMRlZCUVZVc1kwRkJZeXh2UWtGQmIwSXNVVUZCVVR0QlFVTjRSaXh6UWtGQlRTeEpRVUZKTEUxQlFVMHNiMFJCUVc5RUxHTkJRV01zWlVGQlpTeEZRVUZGTzBGQlFVRXNZMEZEY2tjN1FVRkRRU3h2UWtGQlRTeG5Ra0ZCWjBJc1owSkJRV2RDTEcxQ1FVRnRRaXhOUVVGTk8wRkJReTlFTEc5Q1FVRk5MR3RDUVVGclFpeG5Ra0ZCWjBJc1kwRkJZeXhwUWtGQmFVSXNUVUZCVFR0QlFVTTNSU3hyUWtGQlNTeFpRVUZaTEVWQlFVVXNNRUpCUVRCQ0xITkNRVUZ6UWl4bFFVRmxMR1ZCUVdVc1RVRkROVVlzUjBGQlJ6dEJRVU5NTzBGQlFVRXNhMEpCUTBrc2VVUkJRWGxFTEdOQlFXTXNaVUZCWlR0QlFVRkJMR2RDUVVGSE8wRkJRVUVzWTBGREwwWTdRVUZCUVN4WlFVTkdPMEZCUVVFc1ZVRkRSanRCUVVOQk8wRkJRVUVzVVVGRFJpeExRVUZMTzBGQlFVRXNVVUZEVEN4TFFVRkxPMEZCUTBnN1FVRkJRU3hSUVVOR08wRkJRMFVzWjBKQlFVMHNTVUZCU1N4TlFVRk5MSEZEUVVGeFF5eE5RVUZOTEVWQlFVVTdRVUZCUVN4TlFVTnFSVHRCUVVWQkxGbEJRVTBzYlVKQlFXMUNMR2RDUVVGblFpeFJRVUZSTEUxQlFVMDdRVUZEZGtRc1ZVRkJTU3haUVVGWkxFVkJRVVVzTkVKQlFUUkNMSE5DUVVGelFpeG5Ra0ZCWjBJc1RVRkJUU3hIUVVGSE8wRkJRek5HTEhWQ1FVRmxMRzlEUVVGdlF5eE5RVUZOTEVkQlFVYzdRVUZCUVN4TlFVTTVSRHRCUVVGQkxFbEJRMFk3UVVGQlFTeEZRVU5HTzBGQlJVY3NUVUZCVFN4dlFrRkJiMElzUTBGQlF5eFpRVUZyUlR0QlFVTnNSeXhWUVVGTlF5eFJRVUZQTEZsQlFWazdRVUZEZWtJc1VVRkJTU3gxUWtGQmRVSTdRVUZETTBJc1ZVRkJUU3hUUVVGdFFpeERRVUZETzBGQlJURkNMRlZCUVUwc2FVSkJRV3RFTEZkQlFWY3NRMEZCUXp0QlFVTndSU3g1UWtGQmNVSXNZMEZCWXp0QlFVVnVReXhSUVVGSk8wRkJRMFlzV1VGQlRTeDVRa0ZCZVVJc2VVSkJRWGxDTEdWQlFXVXNNRUpCUVRCQ0xFdEJRVXM3UVVGRGRFY3NXVUZCVFN4blFrRkJaMElzYVVKQlFXbENMR1ZCUVdVc2FVSkJRV2xDTEZsQlFWazdRVUZEYmtZc1dVRkJUU3hyUWtGRFJpeFBRVUZQTEdWQlFXVXNWVUZCVlN4WFFVRlhMR2RDUVVGblFpeGxRVUZsTEU5QlFVOHNUVUZCVFN4SlFVRkpPMEZCUlM5R0xGbEJRVTBzYlVKQlFXMUNMR1ZCUVdVc2IwSkJRVzlDTzBGQlF6VkVMRlZCUVVrc1EwRkJReXhQUVVGUExGVkJRVlVzWjBKQlFXZENMRXRCUVVzc2JVSkJRVzFDTEV0QlFVc3NiVUpCUVcxQ0xFZEJRVWM3UVVGRGRrWXNZMEZCVFN4SlFVRkpMRTFCUVUwc2NVTkJRWEZETEdkQ1FVRm5RaXhGUVVGRk8wRkJRVUVzVFVGRGVrVTdRVUZGUVN4WlFVRk5MRzlDUVVGdlFpeGxRVUZsTEhGQ1FVRnhRanRCUVVNNVJDeFZRVUZKTEVOQlFVTXNUMEZCVHl4VlFVRlZMR2xDUVVGcFFpeExRVUZMTEc5Q1FVRnZRaXhMUVVGTExHOUNRVUZ2UWl4SFFVRkhPMEZCUXpGR0xHTkJRVTBzU1VGQlNTeE5RVUZOTEhGRFFVRnhReXhwUWtGQmFVSXNSVUZCUlR0QlFVRkJMRTFCUXpGRk8wRkJSVUVzV1VGQlRTd3JRa0ZCSzBJc1QwRkJUeXhsUVVGbExESkNRVUV5UWl4WFFVTnNSaXhuUWtGQlowSXNaVUZCWlN4M1FrRkJkMElzVFVGQlRTeEpRVU0zUkR0QlFVVktMRFpDUVVGMVFrRXNUVUZCU3p0QlFVRkJMRkZCUTNoQ08wRkJRVUVzVVVGQmQwSXNRMEZCUXl4RFFVRkRMR1ZCUVdVN1FVRkJRU3hSUVVGdFFpeERRVUZETEVOQlFVTXNaVUZCWlR0QlFVRkJMRkZCUVd0Q08wRkJRVUVzVVVGREwwWXNRMEZCUXl4RFFVRkRMR1ZCUVdVN1FVRkJRU3hSUVVGcFFqdEJRVUZCTEZGQlFVYzdRVUZCUVN4UlFVRnBRanRCUVVGQkxGRkJRV3RDTzBGQlFVRXNVVUZEZUVVN1FVRkJRU3hOUVVFMFFqdEJRVU5vUXl4VlFVRkpMSGxDUVVGNVFpeEhRVUZITzBGQlF6bENMSFZDUVVGbExDdENRVUZuUXp0QlFVRkJMRTFCUTJwRU8wRkJSVUVzVlVGQlNTeGxRVUZsTEc5Q1FVRnZRanRCUVVOeVF5dzRRa0ZCYzBJc2MwSkJRWE5DTEdWQlFXVXNiMEpCUVc5Q0xFMUJRVTA3UVVGQlFTeE5RVU4yUmp0QlFVVkJMRlZCUVVrc1pVRkJaU3gxUWtGQmRVSXNVVUZCVnp0QlFVTnVSQ3haUVVGSkxFOUJRVThzWlVGQlpTeDFRa0ZCZFVJc1YwRkJWenRCUVVNeFJDeG5Ra0ZCVFN4SlFVRkpMRTFCUVUwc0swTkJRU3RETEdWQlFXVXNhMEpCUVd0Q0xFVkJRVVU3UVVGQlFTeFJRVU53Unp0QlFVTkJMR05CUVUwc1owSkJRV2RDTEdkQ1FVRm5RaXh6UWtGQmMwSXNUVUZCVFR0QlFVTnNSU3hqUVVGTkxHdENRVUZyUWl4blFrRkJaMElzWlVGQlpTeHRRa0ZCYlVJc1UwRkJVeXhIUVVGSExFMUJRVTA3UVVGRE5VWXNXVUZCU1VFc1RVRkJTeXd3UWtGQk1FSXNjMEpCUVhOQ0xHVkJRV1VzWlVGQlpTeE5RVUZOTEVkQlFVYzdRVUZET1VZN1FVRkJRU3haUVVOSkxEUkVRVUUwUkN4bFFVRmxMR3RDUVVGclFqdEJRVUZCTEZWQlFVYzdRVUZCUVN4UlFVTjBSenRCUVVGQkxFMUJRMFk3UVVGRlFTeFZRVUZKTEdWQlFXVXNkMEpCUVhkQ08wRkJRM3BETEcxQ1FVRlhMRU5CUVVNc1RVRkJUU3hMUVVGTExFdEJRVXNzVDBGQlR5eFJRVUZSTEdWQlFXVXNjMEpCUVhOQ0xFZEJRVWM3UVVGRGFrWXNZMEZCU1N4UFFVRlBMRk5CUVZNc1ZVRkJWVHRCUVVNMVFpeHJRa0ZCVFN4SlFVRkpMRTFCUVUwc2EwUkJRV3RFTEVsQlFVa3NSVUZCUlR0QlFVRkJMRlZCUXpGRk8wRkJRMEVzWTBGQlNTeFBRVUZQTEZWQlFWVXNXVUZCV1N4RFFVRkRMRTlCUVU4c1ZVRkJWU3hMUVVGTExFdEJRVXNzVVVGQlVTeEhRVUZITzBGQlEzUkZMR3RDUVVGTkxFbEJRVWtzVFVGQlRTeHBSVUZCYVVVc1MwRkJTeXhGUVVGRk8wRkJRVUVzVlVGRE1VWTdRVUZEUVN4blFrRkJUU3hoUVVGaExHZENRVUZuUWl4TlFVRk5MRTFCUVUwN1FVRkRMME1zWTBGQlNVRXNUVUZCU3l3MlFrRkJOa0lzYzBKQlFYTkNMRmxCUVZrc1MwRkJTeXhOUVVGTkxFZEJRVWM3UVVGRGNFWXNNa0pCUVdVc2QwTkJRWGRETEVsQlFVa3NUVUZCVFN4TFFVRkxMRWRCUVVjN1FVRkJRU3hWUVVNelJUdEJRVUZCTEZGQlEwWTdRVUZCUVN4TlFVTkdPMEZCUlVFc1ZVRkJTU3hsUVVGbExGVkJRVlVzVVVGQlZ6dEJRVU4wUXl3MFFrRkJiMElzWlVGQlpTeFBRVUZQTEVsQlFVa3NiMEpCUVVrc1VVRkJhVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NWVUZCVlR0QlFVTndSeXhuUWtGQlRTeG5Ra0ZCWjBJc1owSkJRV2RDTEV0QlFVc3NUVUZCVFR0QlFVTnFSQ3huUWtGQlRTeHJRa0ZCYTBJc1owSkJRV2RDTEU5QlFVOHNUVUZCVFR0QlFVVnlSQ3hqUVVGSlFTeE5RVUZMTERCQ1FVRXdRaXh6UWtGQmMwSXNaVUZCWlN4bFFVRmxMRTFCUVUwc1IwRkJSenRCUVVNNVJpd3lRa0ZCWlN4eFEwRkJjVU1zUjBGQlJ5eE5RVUZOTEV0QlFVc3NSMEZCUnp0QlFVRkJMRlZCUTNaRk8wRkJRVUVzVVVGRFJpeERRVUZETzBGQlFVRXNUVUZEU0R0QlFVVkJMR0ZCUVU4c1EwRkJReXh6UWtGQmMwSXNUVUZCVFR0QlFVRkJMRWxCUTNSRExGTkJRVk1zUjBGQlJ6dEJRVU5XTEZWQlFVa3NlVUpCUVhsQ0xFZEJRVWM3UVVGRE9VSXNVVUZCUVVFc1RVRkJTeXd3UWtGQk1FSXNiMEpCUVc5Q08wRkJRVUVzVFVGRGNrUTdRVUZEUVN4aFFVRlBMRkZCUVZFc1YwRkJVMEVzVFVGQlN5eE5RVUZOTEV0QlFVc3NRMEZCUXp0QlFVTjZReXhaUVVGTk8wRkJRVUVzU1VGRFVqdEJRVUZCTEVWQlEwWTdPenRCUTJoT1FUczdPMEZEVEVFN096dEJRMGhQTEUxQlFVMURMRmxCUVZjN096dEJSRmxxUWl4TlFVRk5MRmRCUVZjc1QwRkJUU3hUUVVGelJUdEJRVU5zUnl4UlFVRkpMRTlCUVU4c1UwRkJVeXhWUVVGVk8wRkJRelZDTEZWQlFVa3NUMEZCVHl4WlFVRlpMR1ZCUVdVc1VVRkJVU3haUVVGWkxGRkJRVkVzVTBGQlV5eE5RVUZOTzBGQlJTOUZMRmxCUVVrN1FVRkRSaXhwUWtGQlR5eEpRVUZKTEZkQlFWY3NUVUZCVFVNc1ZVRkJVeXhKUVVGSkxFTkJRVU03UVVGQlFTeFJRVU0xUXl4VFFVRlRMRWRCUVVjN1FVRkRWaXhqUVVGSkxFVkJRVVVzVTBGQlV5eDVRa0ZCZVVJN1FVRkZkRU1zYTBKQlFVMHNVMEZCV1N4cFFrRkJhVUlzU1VGQlNUdEJRVU4yUXl4clFrRkJUU3hUUVVGMVFpeERRVUZETzBGQlF6bENMRFpDUVVGcFFpeFRRVUZUTEZGQlFWRTdRVUZEYUVNc2NVSkJRVThzUzBGQlN5eExRVUZMTzBGQlFVRXNXVUZEYmtJN1FVRkRRU3h0UWtGQlR5eEpRVUZKTEZkQlFWY3NUMEZCVHl4UFFVRlBMRTFCUVUwc1EwRkJRenRCUVVGQkxGVkJRemRETzBGQlEwRXNaMEpCUVUwN1FVRkJRU3hSUVVOU08wRkJRVUVzVFVGRFJpeFBRVUZQTzBGQlJVd3NZMEZCVFN4WFFVRlhMRTFCUVUwc1RVRkJUU3hKUVVGSk8wRkJRMnBETEZsQlFVa3NRMEZCUXl4VFFVRlRMRWxCUVVrN1FVRkRhRUlzWjBKQlFVMHNTVUZCU1N4TlFVRk5MSE5EUVVGelF5eEpRVUZKTEVWQlFVVTdRVUZCUVN4UlFVTTVSRHRCUVVOQkxHTkJRVTBzYzBKQlFYTkNMRk5CUVZNc1VVRkJVU3hKUVVGSkxHZENRVUZuUWp0QlFVTnFSU3hqUVVGTkxGZEJRVmNzYzBKQlFYTkNMRk5CUVZNc2NVSkJRWEZDTEVWQlFVVXNTVUZCU1R0QlFVTXpSU3haUVVGSkxGZEJRVmNzV1VGQmMwSTdRVUZIYmtNc2FVSkJRVThzU1VGQlNTeFhRVUZYTEUxQlFVMHNVMEZCVXl4WlFVRlpMRU5CUVVNN1FVRkJRU3hSUVVOd1JDeFBRVUZQTzBGQlJVd3NZMEZCU1N4RFFVRkRMRk5CUVZNc1RVRkJUVHRCUVVOc1FpeHJRa0ZCVFN4SlFVRkpMRTFCUVUwc2MwTkJRWE5ETEVsQlFVa3NjVUpCUVhGQ08wRkJRVUVzVlVGRGFrWTdRVUZEUVN4blFrRkJUU3hUUVVGVExGTkJRVk1zUzBGQlN5eFZRVUZWTzBGQlJYWkRMR05CUVVrN1FVRkRTaXhqUVVGSk8wRkJSVVlzY1VKQlFWTXNTVUZCU1N4WlFVRlpMRkZCUVZFN1FVRkJRU3hWUVVOdVF5eFRRVUZUTEVkQlFVYzdRVUZEVml4blFrRkJTU3hoUVVGaExGbEJRVms3UVVGRk0wSXNiMEpCUVUwc1VVRkJVU3hMUVVGTExFdEJRVXNzVjBGQlZ5eExRVUZMTzBGQlEzaERMSFZDUVVGVExFbEJRVWtzV1VGQldTeFBRVUZQTEVWQlFVTXNVMEZCVXl4UFFVRlBMRk5CUVZNc1RVRkJTeXhEUVVGRExFVkJRVVU3UVVGQlFTeFpRVU53UlN4UFFVRlBPMEZCUTB3c2IwSkJRVTA3UVVGQlFTeFpRVU5TTzBGQlFVRXNWVUZEUmp0QlFVVkJMR05CUVVrc1UwRkJVenRCUVVWaUxHbENRVUZQTEUxQlFVMDdRVUZEV0N4clFrRkJUU3hGUVVGRExFMUJRVTBzVFVGQlN5eEpRVUZKTEUxQlFVMHNUMEZCVHl4TFFVRkxPMEZCUTNoRExHZENRVUZKTEUxQlFVMDdRVUZEVWp0QlFVRkJMRmxCUTBZN1FVRkRRU3hyUWtGQlRTeFpRVUZaTEUxQlFVMDdRVUZEZUVJc2EwSkJRVTBzVVVGQlVTeEpRVUZKTEZkQlFWY3NVVUZCVVN4UlFVRlJMRk5CUVZNN1FVRkRkRVFzYTBKQlFVMHNTVUZCU1N4TFFVRkxPMEZCUTJZc2MwSkJRVlU3UVVGQlFTeFZRVU5hTzBGQlEwRXNhVUpCUVU4c1NVRkJTU3hYUVVGWExGRkJRVkVzUjBGQlJ5eFJRVUZSTzBGQlFVRXNVVUZETTBNN1FVRkJRU3hOUVVOR08wRkJRVUVzU1VGRlJpeFhRVUZYTEdkQ1FVRm5RaXhOUVVGTk8wRkJReTlDTEdGQlFVOHNTVUZCU1N4WFFVRlhMRTFCUVUwc1MwRkJTeXhaUVVGWkxFTkJRVU03UVVGQlFTeEpRVU5vUkN4WFFVRlhMR2RDUVVGblFpeFpRVUZaTzBGQlEzSkRMR0ZCUVU4N1FVRkJRU3hKUVVOVUxFOUJRVTg3UVVGRFRDeGhRVUZQTEVsQlFVa3NWMEZCVnl4SlFVRkpPMEZCUVVFc1NVRkROVUk3UVVGQlFTeEZRVU5HT3pzN1FVUjJRa0VzVFVGQlRTeFZRVUZWTEVOQlFVTXNXVUZCYjBJc2FVSkJRU3RDTzBGQlEyeEZMRlZCUVUwc1dVRkJXU3haUVVGWkxFVkJRVVVzVTBGQlV5eFpRVUZaTEZsQlFWazdRVUZEYWtVc1VVRkJTU3hqUVVGakxFZEJRVWM3UVVGRGJrSXNjVUpCUVdVc0swSkJRV2RETzBGQlFVRXNTVUZEYWtRN1FVRkJRU3hGUVVOR08wRkJUVThzVFVGQlRTeGpRVUZqTEU5QlFVMURMRk5CUVRSQ08wRkJSVE5FTEZsQlFWRkJMRXRCUVVrc1MwRkJTeXhaUVVGaExIRkNRVUZ4UWtFc1MwRkJTU3hSUVVGUkxFTkJRVU03UVVGQlFTeEZRVU5zUlR0QlFWRlBMRTFCUVUwc1UwRkJVeXhQUVVGTlFTeE5RVUZWTEZkQlFXdERPMEZCUTNSRkxGRkJRVWtzVFVGQk5FSTdRVUZGT1VJc1dVRkJUU3hYUVVGWExEQkRRVUYxUWp0QlFVVjRReXhWUVVGSkxGZEJRVmNzVlVGQlZUdEJRVVYyUWl4WlFVRkpMRTlCUVU4c1kwRkJZeXhsUVVGbExFTkJRVU1zVlVGQlZTeExRVUZMTzBGQlEzUkVMR2RDUVVGTkxFbEJRVWtzVFVGQlRTeG5SRUZCWjBRN1FVRkJRU3hSUVVOc1JUdEJRVVZCTEZsQlFVa3NWVUZCVlVFc1MwRkJTU3hQUVVGUE8wRkJRM3BDTEZsQlFVa3NRMEZCUXl4VFFVRlRPMEZCUlZvc1owSkJRVTBzYTBKQlFXdENRU3hMUVVGSkxFOUJRVTg3UVVGRGJrTXNZMEZCU1N4dlFrRkJiMElzVlVGQllTeHZRa0ZCYjBJc1pVRkRja1FzYjBKQlFXOUNMRzlDUVVGdlFqdEJRVU14UXl4clFrRkJUU3hKUVVGSkxFMUJRVTBzY1VOQlFYRkRMR1ZCUVdVc1IwRkJSenRCUVVGQkxGVkJRM3BGTzBGQlEwRXNaMEpCUVUwc2RVSkJRWFZDUVN4TFFVRkpMRTlCUVU4N1FVRkRlRU1zWTBGQlNTeDVRa0ZCZVVJc1ZVRkJZU3hQUVVGUExIbENRVUY1UWl4WFFVRlhPMEZCUTI1R0xHdENRVUZOTEVsQlFVa3NUVUZCVFN3d1EwRkJNRU1zYjBKQlFXOUNMRWRCUVVjN1FVRkJRU3hWUVVOdVJqdEJRVU5CTEc5Q1FVRlZMRTFCUVUwc1ZVRkJWU3hKUVVGSkxHVkJRV1VzUlVGQlF5eHBRa0ZCYVVJc2NVSkJRVzlDTEVOQlFVTTdRVUZEY0VZc1kwRkJTU3hEUVVGRExGTkJRVk03UVVGRFdpeHJRa0ZCVFN4SlFVRkpPMEZCUVVFc1kwRkRUanRCUVVGQkxGbEJReXRGTzBGQlFVRXNWVUZEY2tZN1FVRkJRU3hSUVVOR0xFOUJRVTg3UVVGRlRDeGpRVUZKTEU5QlFVOHNVVUZCVVN4WFFVRlhMRmxCUVZrc1QwRkJUeXhSUVVGUkxHRkJRV0VzV1VGRGJFVXNUMEZCVHl4UlFVRlJMR3RDUVVGclFpeFpRVUZaTzBGQlF5OURMR3RDUVVGTkxFbEJRVWtzVFVGQlRTeHJSa0ZCYTBZN1FVRkJRU3hWUVVOd1J6dEJRVUZCTEZGQlEwWTdRVUZGUVN4WlFVRkpMRU5CUVVOQkxFdEJRVWtzUzBGQlN5eE5RVUZOTzBGQlEyeENMR2RDUVVGTkxFbEJRVWs3UVVGQlFTeFpRVU5PTzBGQlFVRXNWVUZCY1VjN1FVRkJRU3hSUVVNelJ6dEJRVVZCTEdOQlFVMHNVMEZCVXl4VlFVRlZMRmxCUVZrc1IwRkJSMEVzVFVGQlN5eFBRVUZQTzBGQlFVRXNUVUZEZEVRN1FVRkRRU3hWUVVGSkxGZEJRVmNzVTBGQlV6dEJRVVYwUWl4WlFVRkpMRTlCUVU4c1kwRkJZeXhsUVVGbExFTkJRVVVzVlVGQmRVTXNTVUZCU1R0QlFVTnVSaXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNLME5CUVN0RE8wRkJRVUVzVVVGRGFrVTdRVUZGUVN4alFVRk5MRk5CUVZNc1UwRkJVeXhaUVVGWkxFZEJRVWRCTEVsQlFVYzdRVUZCUVN4TlFVTTFRenRCUVVGQkxFbEJRMFk3UVVGQlFTeEZRVU5HTzBGQmIwTkJMRTFCUVUwc2FVSkJRV2xDTEc5Q1FVRkpMRWxCUVRaQ08wRkJUM2hFTEUxQlFVMHNOa0pCUVRaQ0xFTkJRVU1zYTBKQlFUUkRPMEZCUXpsRkxGVkJRVTFETEZGQlFVOHNXVUZCV1R0QlFVTjZRaXhWUVVGTkxGRkJRVkZCTEUxQlFVc3NWVUZCVlR0QlFVTTNRaXhSUVVGSk8wRkJRMFlzV1VGQlRTeGhRVUZoUVN4TlFVRkxMRmRCUVZjc1EwRkJRenRCUVVOd1F5eFpRVUZOTEZsQlFWbEJMRTFCUVVzc2QwSkJRWGRDTEdWQlFXVXNXVUZCV1N4aFFVRmhMRU5CUVVNN1FVRkRlRVlzVlVGQlNTeGpRVUZqTEVkQlFVYzdRVUZEYmtJc2RVSkJRV1VzZFVOQlFYZERPMEZCUVVFc1RVRkRla1E3UVVGRFFTeGhRVUZQTEVOQlFVTkJMRTFCUVVzc1QwRkJUeXhoUVVGaExFTkJRVU1zUjBGQlIwRXNUVUZCU3l4UFFVRlBMR0ZCUVdFc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGQlFTeEpRVU4wUlN4VlFVRkZPMEZCUTBFc1RVRkJRVUVzVFVGQlN5eGhRVUZoTEV0QlFVczdRVUZCUVN4SlFVTjZRanRCUVVGQkxFVkJRMFk3UVVGUlR5eE5RVUZOTEhsQ1FVRjVRaXhEUVVGRExGVkJRWGRETzBGQlF6ZEZMRlZCUVUxQkxGRkJRVThzV1VGQldUdEJRVU42UWl4VlFVRk5MR3RDUVVGclFrRXNUVUZCU3l4UlFVRlJMRTFCUVUwc1ZVRkJWVHRCUVVOeVJDeFJRVUZKTEc5Q1FVRnZRaXhIUVVGSE8wRkJRM3BDTEZsQlFVMHNTVUZCU1N4TlFVRk5MQ3RFUVVFclJDeE5RVUZOTEZWQlFWVXNSMEZCUnp0QlFVRkJMRWxCUTNCSE8wRkJRMEVzU1VGQlFVRXNUVUZCU3l4UFFVRlBMRWxCUVVrc1QwRkJUeXhsUVVGbE8wRkJRM1JETEZkQlFVOHNRMEZCUXl4cFFrRkJhVUlzVFVGQlRTeFZRVUZWTzBGQlFVRXNSVUZETTBNN1FVRlZUeXhOUVVGTkxHZENRVUZuUWl4UFFVTjZRaXhYUVVOQkxGbEJRVzlHTzBGQlEzUkdMRkZCUVVrc2FVSkJRWGxDTzBGQlF6ZENMRlZCUVUxQkxGRkJRVThzV1VGQldUdEJRVVY2UWl4UlFVRkpMRTFCUVUwc1VVRkJVU3hUUVVGVExFZEJRVWM3UVVGRk5VSXNUMEZCUXl4cFFrRkJhVUlzWlVGQlpTeEpRVUZKTzBGQlFVRXNTVUZEZGtNc1YwRkJWeXhWUVVGVkxGZEJRVmRCTEUxQlFVc3NUMEZCVHl4UlFVRlJPMEZCUld4RUxFOUJRVU1zYVVKQlFXbENMR1ZCUVdVc1NVRkJTU3hEUVVGRExGVkJRVlVzV1VGQldTeFZRVUZWTEZWQlFWVTdRVUZCUVN4SlFVTnNSaXhQUVVGUE8wRkJSVXdzVDBGQlF5eHBRa0ZCYVVJc1pVRkJaU3hKUVVGSkxIVkNRVUYxUWl4VFFVRlRPMEZCUVVFc1NVRkRka1U3UVVGRlFTeFJRVUZKTEdkQ1FVRm5RanRCUVVOd1FpeFJRVUZKTEhWQ1FVRjFRanRCUVVNelFpeFJRVUZKTEd0Q1FVRnJRanRCUVVOMFFpeFJRVUZKTEZOQlFXMUNMRU5CUVVNN1FVRkRlRUlzVlVGQlRTeDNRa0ZCZDBJc1EwRkJRenRCUVVNdlFpeFZRVUZOTEhsQ1FVRjVRaXhEUVVGRE8wRkJSV2hETEZGQlFVazdRVUZEUml4UFFVRkRMSE5DUVVGelFpeE5RVUZOTEVsQlFVa3NhMEpCUVd0Q0xFOUJRVTg3UVVGRk1VUXNWVUZCU1N4VFFVRlRMR2RDUVVGblFrRXNUVUZCU3l4dFFrRkJiVUk3UVVGRGJrUXNZMEZCVFN4clFrRkJhMElzUTBGQlF6dEJRVU42UWl4dFFrRkJWeXhSUVVGUkxGRkJRVkVzWTBGQll6dEJRVU4yUXl4blFrRkJUU3hQUVVGUExFOUJRVThzVTBGQlV5eFhRVUZYTEU5QlFVOHNTMEZCU3p0QlFVTndSQ3d3UWtGQlowSXNTMEZCU3l4VFFVRlRMRTlCUVU4c1UwRkJVeXhYUVVGWExFOUJRVThzUzBGQlN5eEpRVUZKTEVWQlFVVXNTMEZCU3l4VlFVRlJPMEZCUTNSR0xGbEJRVUZCTEUxQlFVc3NhMEpCUVcxQ0xFMUJRVTBzU1VGQlNUdEJRVUZCTEZWQlEzQkRMRU5CUVVNc1EwRkJRenRCUVVGQkxGRkJRMG83UVVGSFFTeGpRVUZOTEZGQlFWRXNTVUZCU1N4bFFVRmxPMEZCUVVFc1RVRkRia003UVVGRlFTeHpRa0ZCWjBJc1RVRkJUVUVzVFVGQlN5eHJRa0ZCYTBJc2FVSkJRV2xDTEdsQ1FVRnBRaXh2UWtGQmIwSTdRVUZEYmtjc1ZVRkJTU3hyUWtGQmEwSXNSMEZCUnp0QlFVTjJRaXgxUWtGQlpTeDVRa0ZCTUVJN1FVRkJRU3hOUVVNelF6dEJRVVZCTEZsQlFVMHNRMEZCUXl4WlFVRlpMRmRCUVZjc1NVRkJTU3d5UWtGQk1rSXNZVUZCWVR0QlFVVXhSU3haUVVGTkxIRkNRVUZ4UWl4RFFVRkRMRU5CUVVNc1UwRkJVenRCUVVWMFF5eFpRVUZOTEdGQlFXRXNRMEZCUXp0QlFVTndRaXhaUVVGTkxHTkJRV01zUTBGQlF6dEJRVU55UWl4WlFVRk5MREpDUVVGM1JTeERRVUZETzBGQlF5OUZMR1ZCUVZNc1NVRkJTU3hIUVVGSExFbEJRVWtzV1VGQldTeExRVUZMTzBGQlEyNURMR05CUVUwc1QwRkJUMEVzVFVGQlN5eHBRa0ZCYVVJc1pVRkJaU3hEUVVGRE8wRkJRMjVFTEZsQlFVa3NVMEZCVXl4SFFVRkhPMEZCUTJRc2VVSkJRV1VzTUVKQlFUSkNPMEZCUVVFc1VVRkROVU03UVVGRFFTdzRRa0ZCYzBJc1MwRkJTeXhKUVVGSk8wRkJReTlDTEcxQ1FVRlhMRXRCUVV0QkxFMUJRVXNzWVVGQllTeEpRVUZKTEVOQlFVTTdRVUZCUVN4TlFVTjZRenRCUVVOQkxHVkJRVk1zU1VGQlNTeEhRVUZITEVsQlFVa3NZVUZCWVN4TFFVRkxPMEZCUTNCRExHTkJRVTBzVDBGQlQwRXNUVUZCU3l4clFrRkJhMElzWlVGQlpTeERRVUZETzBGQlEzQkVMRmxCUVVrc1UwRkJVeXhIUVVGSE8wRkJRMlFzZVVKQlFXVXNNa0pCUVRSQ08wRkJRVUVzVVVGRE4wTTdRVUZEUVN3clFrRkJkVUlzUzBGQlN5eEpRVUZKTzBGQlEyaERMR05CUVUwc1lVRkJZVUVzVFVGQlN5eGhRVUZoTEVsQlFVazdRVUZEZWtNc2IwSkJRVmtzUzBGQlN5eFZRVUZWTzBGQlJUTkNMRmxCUVVrc1RVRkJORUk3UVVGRE9VSXNZMEZCU1N4elFrRkJjMElzVTBGQlV5dzBRa0ZCTkVJc1VVRkJWenRCUVVONFJTeHhRMEZCZVVJc1MwRkJTeXhaUVVGWk8wRkJRekZETzBGQlFVRXNWVUZEUmp0QlFVTkJMR2RDUVVGTkxGZEJRVmNzVDBGQlR5eFRRVUZUTERSQ1FVRTBRaXhYUVVONlJDeFJRVUZSTERCQ1FVTlNMRk5CUVZNc01FSkJRVEJDTEZWQlFWVXNTMEZCU3p0QlFVTjBSQ3hqUVVGSkxHRkJRV0VzVTBGQlV5eGhRVUZoTEdkQ1FVRm5RaXhoUVVGaExHTkJRV003UVVGRGFFWXNhMEpCUVUwc1NVRkJTU3hOUVVGTkxEUkRRVUUwUXl4UlFVRlJMRWRCUVVjN1FVRkJRU3hWUVVONlJUdEJRVU5CTEdOQlFVa3NjMEpCUVhOQ0xHRkJRV0VzWTBGQll6dEJRVU51UkN4clFrRkJUU3hKUVVGSkxFMUJRVTBzTkVOQlExb3NVVUZCVVN3MFJVRkJORVU3UVVGQlFTeFZRVU14Ump0QlFVTkJMRzFEUVVGNVFpeExRVUZMTEZGQlFWRTdRVUZCUVN4UlFVTjRRenRCUVVGQkxFMUJRMFk3UVVGSFFTeFZRVUZKTEdWQlFXOURPMEZCUTNoRExGVkJRV3RETEhsQ1FVRjVRaXhMUVVGTExFOUJRVXNzVFVGQlRTeFpRVUZaTEVkQlFVYzdRVUZEZUVZc01FSkJRV3RDUVN4TlFVRkxMR3RDUVVGclFpeGhRVUZoTzBGQlEzUkVMRmxCUVVrc2IwSkJRVzlDTEVkQlFVYzdRVUZEZWtJc2VVSkJRV1VzTUVKQlFUSkNPMEZCUVVFc1VVRkROVU03UVVGRlFTeDFRa0ZCWlR0QlFVRkJMRlZCUTJJc1VVRkJVVHRCUVVGQkxGVkJRMUk3UVVGQlFTeFZRVU5CTEdsRFFVRnBReXg1UWtGQmVVSXNTVUZCU1N4UFFVRkxMSGxDUVVGNVFpeERRVUZETEVOQlFVTTdRVUZCUVN4UlFVTm9SenRCUVVGQkxFMUJRMFk3UVVGRlFTeHhRa0ZCWlR0QlFVRkJMRkZCUTFnN1FVRkJRU3hSUVVOQkxFTkJRVU1zWlVGQlpTeDFRa0ZCZFVJc2QwSkJRWGRDTEdOQlFXTXNiMEpCUVc5Q0xFdEJRVXM3UVVGQlFTeE5RVUZETzBGQlF6TkhMR0ZCUVU4c1EwRkJReXhsUVVGbExGbEJRVmtzVjBGQlZ6dEJRVUZCTEVsQlEyaEVMRk5CUVZNc1IwRkJSenRCUVVOV0xEUkNRVUZ6UWl4UlFVRlJMRk5CUVU5QkxFMUJRVXNzVTBGQlV5eEhRVUZITEVOQlFVTTdRVUZEZGtRc05rSkJRWFZDTEZGQlFWRXNVMEZCVDBFc1RVRkJTeXhUUVVGVExFZEJRVWNzUTBGQlF6dEJRVVY0UkN4VlFVRkpMRzlDUVVGdlFpeEhRVUZITzBGQlEzcENMRkZCUVVGQkxFMUJRVXNzYlVKQlFXMUNMR1ZCUVdVN1FVRkJRU3hOUVVONlF6dEJRVVZCTEZWQlFVa3NhMEpCUVd0Q0xFZEJRVWM3UVVGRGRrSXNVVUZCUVVFc1RVRkJTeXh0UWtGQmJVSXNZVUZCWVR0QlFVRkJMRTFCUTNaRE8wRkJRMEVzV1VGQlRUdEJRVUZCTEVsQlExSXNWVUZCUlR0QlFVTkJMRTFCUVVGQkxFMUJRVXNzVFVGQlRTeGxRVUZsTzBGQlF6RkNMRlZCUVVrc2VVSkJRWGxDTEVkQlFVYzdRVUZET1VJc1VVRkJRVUVzVFVGQlN5d3dRa0ZCTUVJc2IwSkJRVzlDTzBGQlFVRXNUVUZEY2tRN1FVRkRRU3hoUVVGUExGRkJRVkVzVjBGQlUwRXNUVUZCU3l4TlFVRk5MRXRCUVVzc1EwRkJRenRCUVVkNlF5eE5RVUZCUVN4TlFVRkxMSE5DUVVGelFqdEJRVUZCTEVsQlF6ZENPMEZCUVVFc1JVRkRSanRCUVVWUExFMUJRVTBzYVVKQlFXbENMRU5CUVVNc1kwRkJORUk3UVVGRGVrUXNWVUZCVFVFc1VVRkJUeXhaUVVGWk8wRkJRM3BDTEZWQlFVMHNWVUZCVlN4bFFVRmxMRWxCUVVrc1UwRkJVenRCUVVNMVF5eFJRVUZKTEVOQlFVTXNVMEZCVXp0QlFVTmFMRmxCUVUwc1NVRkJTU3hOUVVGTkxDdERRVUVyUXl4VFFVRlRMRVZCUVVVN1FVRkJRU3hKUVVNMVJUdEJRVU5CTEZWQlFVMHNRMEZCUXl4bFFVRmxMSFZDUVVGMVFpeDNRa0ZCZDBJc1owSkJRV2RDTEd0Q1FVRnJRaXhKUVVGSk8wRkJSVE5ITEZGQlFVa3NaMEpCUVdkQ08wRkJRMnhDTEZWQlFVa3NiMEpCUVc5Q08wRkJRM1JDTEZGQlFVRkJMRTFCUVVzc2MwSkJRWE5DTEdWQlFXVXNUVUZCVFR0QlFVRkJMRTFCUTJ4RU8wRkJRMEVzVFVGQlFVRXNUVUZCU3l4dFFrRkJiVUlzWlVGQlpTeE5RVUZOTzBGQlFVRXNTVUZETDBNN1FVRkZRU3hKUVVGQlFTeE5RVUZMTEhWQ1FVRjFRaXhUUVVGVE8wRkJSWEpETERCQ1FVRnpRaXhSUVVGUkxGTkJRVTlCTEUxQlFVc3NVMEZCVXl4SFFVRkhMRU5CUVVNN1FVRkRka1FzTWtKQlFYVkNMRkZCUVZFc1UwRkJUMEVzVFVGQlN5eFRRVUZUTEVkQlFVY3NRMEZCUXp0QlFVTjRSQ3hKUVVGQlFTeE5RVUZMTEcxQ1FVRnRRaXhoUVVGaE8wRkJRM0pETEcxQ1FVRmxMRTlCUVU4c1UwRkJVenRCUVVGQkxFVkJRMnBETzBGQlJVOHNUVUZCVFN3eVFrRkRWQ3hEUVVGRExGRkJRVFpDTEdWQlFYbENMRkZCUVd0Q0xGZEJRVzFDTEU5QlF6TkdMSEZDUVVGeFFpeFZRVUZuUWp0QlFVTndReXhSUVVGSkxFTkJRVU1zVVVGQlVUdEJRVU5ZTEc5Q1FVRmpMRXRCUVVzc1EwRkJRenRCUVVOd1FqdEJRVUZCTEVsQlEwWTdRVUZGUVN4VlFVRk5RU3hSUVVGUExGbEJRVms3UVVGRmVrSXNWVUZCVFN4WFFVRlhMRTlCUVU4c1EwRkJRenRCUVVONlFpeFZRVUZOTEU5QlFVOHNUMEZCVHl4RFFVRkRPMEZCUTNKQ0xGVkJRVTBzVjBGQlZ5eFBRVUZQTEVOQlFVTTdRVUZGZWtJc1VVRkJTVHRCUVVOS0xGRkJRVWs3UVVGRlNpeFJRVUZKTEdGQlFXRXNXVUZCV1N4aFFVRmhMR05CUVdNN1FVRkRkRVFzV1VGQlRTeEpRVUZKTEUxQlFVMHNkME5CUVhkRE8wRkJRVUVzU1VGRE1VUTdRVUZGUVN4UlFVRkpMSE5DUVVGelFpeGhRVUZoTEdOQlFXTTdRVUZEYmtRc1dVRkJUU3hKUVVGSk8wRkJRVUVzVVVGRFRpd3lSRUZCTWtRc1MwRkJTenRCUVVGQkxFMUJRVzFETzBGQlFVRXNTVUZEZWtjN1FVRkZRU3hSUVVGSkxHRkJRV0VzWTBGQll6dEJRVU0zUWl4WlFVRk5MRmxCUVZrc1QwRkJUeXhEUVVGRExFVkJRVVU3UVVGRE5VSXNXVUZCVFN4eFFrRkJjVUlzY1VKQlFYRkNMREpDUVVFeVFpeFJRVUZSTEVOQlFVTTdRVUZEY0VZc2RVSkJRV2xDTEV0QlFVc3NUMEZCVHl4RFFVRkRMRWRCUVVjc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEpRVUZKTzBGQlJXNUVMRmxCUVUwc2FVSkJRV2xDUVN4TlFVRkxPMEZCUXpWQ0xGVkJRVWtzUTBGQlF5eG5Ra0ZCWjBJN1FVRkRia0lzWTBGQlRTeEpRVUZKTEUxQlFVMHNjVVZCUVhGRk8wRkJRVUVzVFVGRGRrWTdRVUZEUVN4blFrRkJWU3hsUVVGbExGZEJRVmNzVDBGQlR5eFhRVUZYTEdOQlFXTTdRVUZCUVN4SlFVTjBSU3hQUVVGUE8wRkJRMHdzV1VGQlRTeFBRVUZQTEU5QlFVOHNRMEZCUXp0QlFVVnlRaXhWUVVGSkxFMUJRVTBzVVVGQlVTeEpRVUZKTEVkQlFVYzdRVUZGZGtJc2VVSkJRV2xDTEVsQlFVa3NTMEZCU3p0QlFVTXhRaXhyUWtGQlZVRXNUVUZCU3l4UlFVRlJMR05CUVdNN1FVRkRja01zWlVGQlR5eExRVUZMTEU5QlFVODdRVUZEYmtJc1dVRkJTU3haUVVGWkxGVkJRVlU3UVVGRE1VSXNhVUpCUVZNc1NVRkJTU3hIUVVGSExFbEJRVWtzUzBGQlN5eFJRVUZSTEV0QlFVczdRVUZEY0VNc1kwRkJTU3hQUVVGUExFdEJRVXNzUTBGQlF5eE5RVUZOTEZWQlFWVTdRVUZETDBJc2EwSkJRVTBzU1VGQlNTeFZRVUZWTEhkQ1FVRjNRaXhEUVVGRExHdENRVUZyUWp0QlFVRkJMRlZCUTJwRk8wRkJRMEVzVlVGQlFVRXNUVUZCU3l4UlFVRlJMRmRCUVZjc1NVRkJTU3huUWtGQlowSXNTMEZCU3l4RFFVRkRMRWRCUVVjc1RVRkJUVHRCUVVGQkxGRkJRemRFTzBGQlFVRXNUVUZEUml4UFFVRlBPMEZCUTB3c2VVSkJRV2xDTEV0QlFVczdRVUZEZEVJc2EwSkJRVlZCTEUxQlFVc3NVVUZCVVN4alFVRmpPMEZCUTNKRExHVkJRVThzUzBGQlN5eFBRVUZQTzBGQlEyNUNMRkZCUVVGQkxFMUJRVXNzVDBGQlR5eEpRVUZKTEVsQlFVa3NWMEZCVnl4TFFVRkxMRkZCUVZFc1MwRkJTeXhaUVVGWkxHTkJRV01zUjBGQlJ5eFBRVUZQTzBGQlFVRXNUVUZEZGtZN1FVRkJRU3hKUVVOR08wRkJSVUVzVlVGQlRTeFJRVUZSUVN4TlFVRkxMRlZCUVZVN1FVRkROMElzVlVGQlRTeGhRVUZoUVN4TlFVRkxMRmRCUVZjc1NVRkJTU3hMUVVGTExFMUJRVTA3UVVGRGJFUXNVVUZCU1R0QlFVTkdMRlZCUVVrc1YwRkJWeXhoUVVGaE8wRkJRelZDTEZkQlFVc3NVVUZCVVN4UFFVRkxRU3hOUVVGTExFOUJRVThzVlVGQlZTeEpRVUZKTEVOQlFVTTdRVUZETjBNc1dVRkJUVU1zVlVGQlUwUXNUVUZCU3p0QlFVRkJMRkZCUTJoQ0xESkNRVUV5UWl4UlFVRlJPMEZCUVVFc1VVRkJSenRCUVVGQkxGRkJRVk03UVVGQlFTeFJRVUZuUWp0QlFVRkJMRkZCUVZrc1MwRkJTenRCUVVGQkxGRkJRMmhHTEhsQ1FVRjVRaXhSUVVGUk8wRkJRVUVzVFVGQlF6dEJRVU4wUXl4VlFVRkpReXhaUVVGWExFZEJRVWM3UVVGRGFFSXNkVUpCUVdVc2FVUkJRV2xFTEZOQlFWTXNWMEZCVnl4TFFVRkxMRWRCUVVjN1FVRkJRU3hOUVVNNVJqdEJRVU5CTEc5Q1FVRmpMRXRCUVV0QkxFOUJRVTA3UVVGQlFTeEpRVU16UWl4VlFVRkZPMEZCUTBFc1RVRkJRVVFzVFVGQlN5eGhRVUZoTEV0QlFVczdRVUZCUVN4SlFVTjZRanRCUVVGQkxFVkJRMFk3UVVGTFJ5eE5RVUZOTEUxQlFVMHNUMEZEWml4WFFVRnRRaXhqUVVGM1FpeGpRVUZuUXl4bFFVTXpSU3hsUVVFeVF5eFpRVUZ2UlR0QlFVTnFTQ3hWUVVGTlFTeFJRVUZQTEZsQlFWazdRVUZEZWtJc1ZVRkJUU3hWUVVGVkxHVkJRV1VzU1VGQlNTeFRRVUZUTzBGQlF6VkRMRkZCUVVrc1EwRkJReXhUUVVGVE8wRkJRMW9zV1VGQlRTeEpRVUZKTEUxQlFVMHNOa05CUVRaRExGTkJRVk1zUlVGQlJUdEJRVUZCTEVsQlF6RkZPMEZCUTBFc1ZVRkJUU3huUWtGQlowSXNVVUZCVVN4RFFVRkRPMEZCUXk5Q0xGVkJRVTBzZDBKQlFYZENMRkZCUVZFc1EwRkJRenRCUVVOMlF5eFZRVUZOTEhsQ1FVRjVRaXhSUVVGUkxFTkJRVU03UVVGRGVFTXNWVUZCVFN4cFFrRkJhVUlzVVVGQlVTeERRVUZETzBGQlEyaERMRlZCUVUwc2NVSkJRWEZDTEZGQlFWRXNRMEZCUXp0QlFVTndReXhWUVVGTkxHMUNRVUZ0UWl4UlFVRlJMRU5CUVVNN1FVRkZiRU1zVlVGQlRTeGhRVUZoTEdGQlFXRTdRVUZEYUVNc1ZVRkJUU3hqUVVGakxHTkJRV003UVVGRmJFTXNVVUZCU1N4dFFrRkJiVUk3UVVGRGRrSXNVVUZCU1N4dFFrRkJOa0lzUTBGQlF6dEJRVVZzUXl4VlFVRk5MSEZDUVVFclFpeERRVUZETzBGQlEzUkRMRlZCUVUwc2MwSkJRV2RETEVOQlFVTTdRVUZEZGtNc1ZVRkJUU3h2UWtGQk9FSXNRMEZCUXp0QlFVVnlReXhWUVVGTkxHbENRVUZwUWtFc1RVRkJTeXhWUVVGVk8wRkJRM1JETEZWQlFVMHNiMEpCUVc5Q1FTeE5RVUZMTEZkQlFWY3NZVUZCWVN4RFFVRkRPMEZCUTNoRUxGVkJRVTBzYlVKQlFXMUNRU3hOUVVGTExGZEJRVmNzWVVGQllTeERRVUZETzBGQlEzWkVMRlZCUVUwc2NVSkJRWEZDUVN4TlFVRkxMRmRCUVZjc1kwRkJZeXhEUVVGRE8wRkJRekZFTEZWQlFVMHNiMEpCUVc5Q1FTeE5RVUZMTEZkQlFWY3NZMEZCWXl4RFFVRkRPMEZCUlhwRUxGRkJRVWs3UVVGRFJpeFBRVUZETEd0Q1FVRnJRaXhuUWtGQlowSXNTVUZCU1N4alFVRmpMRTlCUVU4N1FVRkhOVVFzWlVGQlV5eEpRVUZKTEVkQlFVY3NTVUZCU1N4WlFVRlpMRXRCUVVzN1FVRkRia003UVVGQlFTeFZRVU5KTEdGQlFXRXNRMEZCUXp0QlFVRkJMRlZCUVVjN1FVRkJRU3hWUVVGdlFqdEJRVUZCTEZWQlFXMUNPMEZCUVVFc1ZVRkJWeXhoUVVGaExFTkJRVU03UVVGQlFTeFZRVUZITzBGQlFVRXNVVUZCYTBJN1FVRkJRU3hOUVVNMVJ6dEJRVWRCTEdWQlFWTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1lVRkJZU3hMUVVGTE8wRkJRM0JETzBGQlFVRXNWVUZEU1N4alFVRmpMRU5CUVVNN1FVRkJRU3hWUVVGSE8wRkJRVUVzVlVGQmNVSTdRVUZCUVN4VlFVRnRRanRCUVVGQkxGVkJRVmNzWVVGQllTeGpRVUZqTEVOQlFVTTdRVUZCUVN4VlFVTnFSenRCUVVGQkxGRkJRV3RDTzBGQlFVRXNUVUZEZUVJN1FVRkZRU3hWUVVGSkxHMUNRVUZ0UWl4dlFrRkJiMEk3UVVGRE0wTXNWVUZCU1N4clFrRkJhMElzYlVKQlFXMUNPMEZCUTNwRExGVkJRVWtzYjBKQlFXOUNMSEZDUVVGeFFqdEJRVU0zUXl4VlFVRkpMRzFDUVVGdFFpeHZRa0ZCYjBJN1FVRkRNME1zWlVGQlV5eEpRVUZKTEVkQlFVY3NTVUZCU1N4WlFVRlpMRXRCUVVzN1FVRkRia01zVVVGQlFVRXNUVUZCU3l4UlFVRlJMR3RDUVVGclFpeEpRVUZKTEcxQ1FVRnRRaXhEUVVGRE8wRkJRM1pFTEZGQlFVRkJMRTFCUVVzc1VVRkJVU3hwUWtGQmFVSXNTVUZCU1N4elFrRkJjMElzWVVGQllTeERRVUZETEVOQlFVTTdRVUZCUVN4TlFVTjZSVHRCUVVOQkxHVkJRVk1zU1VGQlNTeEhRVUZITEVsQlFVa3NZVUZCWVN4TFFVRkxPMEZCUTNCRExGRkJRVUZCTEUxQlFVc3NVVUZCVVN4dFFrRkJiVUlzU1VGQlNTeHZRa0ZCYjBJc1EwRkJRenRCUVVONlJDeFJRVUZCUVN4TlFVRkxMRkZCUVZFc2EwSkJRV3RDTEVsQlFVa3NkVUpCUVhWQ0xHTkJRV01zUTBGQlF5eERRVUZETzBGQlFVRXNUVUZETlVVN1FVRkZRU3hWUVVGclF5eHJRa0ZCYTBJc1EwRkJReXhyUWtGQmEwSTdRVUZEY2tVc1kwRkJUU3hGUVVGRExGRkJRVkVzTUVKQlFUQkNMR2REUVVFclFpeEpRVUZKTzBGQlJUVkZMRmxCUVVrc2MwSkJRWE5DTEZkQlFWY3NXVUZCV1R0QlFVTXZReXhuUWtGQlRTeEpRVUZKTEUxQlFVMHNNa0pCUTFvc1ZVRkJWU3cwUkVGQk5FUXNjMEpCUVhOQ0xFMUJRVTBzU1VGQlNUdEJRVUZCTEZGQlF6VkhPMEZCUjBFc2FVSkJRVk1zU1VGQlNTeEhRVUZITEVsQlFVa3NXVUZCV1N4TFFVRkxPMEZCUTI1RExHZENRVUZOTEZGQlFWRXNZVUZCWVN4RFFVRkRPMEZCUXpWQ0xHZENRVUZOUlN4aFFVRlpMRTFCUVUxR0xFMUJRVXNzWTBGQll5eFJRVUZSTEhOQ1FVRnpRaXhMUVVGTExFZEJRVWNzYlVKQlFXMUNMRU5CUVVNc1EwRkJRenRCUVVOMFJ5eGpRVUZKUlN4bFFVRmpMRWRCUVVjN1FVRkRia0lzTWtKQlFXVXNiMEpCUVc5Q0xFTkJRVU1zYVVKQlFXbENMRk5CUVZNc1IwRkJSenRCUVVGQkxGVkJRMjVGTzBGQlFVRXNVVUZEUmp0QlFVZEJMR2xDUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEdGQlFXRXNTMEZCU3p0QlFVTndReXhuUWtGQlRTeFJRVUZSTEdOQlFXTXNRMEZCUXp0QlFVTTNRaXhuUWtGQlRTeFhRVUZYTEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkZja01zWTBGQlNTeFZRVUZWTzBGQlJWb3NhMEpCUVUxQkxHRkJRVmxHTEUxQlFVc3NaVUZCWlN4UlFVRlJMSFZDUVVGMVFpeExRVUZMTEVkQlFVY3NiMEpCUVc5Q0xFTkJRVU1zUjBGQlJ5eERRVUZETzBGQlEzUkhMR2RDUVVGSlJTeGxRVUZqTEVkQlFVYzdRVUZEYmtJc05rSkJRV1VzYlVOQlFXMURMRU5CUVVNc2FVSkJRV2xDTEZOQlFWTXNSMEZCUnp0QlFVRkJMRmxCUTJ4R08wRkJRVUVzVlVGRFJpeFBRVUZQTzBGQlJVd3NhMEpCUVUxQkxHRkJRMFpHTEUxQlFVc3NaVUZCWlN4UlFVRlJMSFZDUVVGMVFpeExRVUZMTEVkQlFVY3NSMEZCUnl4blEwRkJaME1zUzBGQlN5eERRVUZETzBGQlEzaEhMR2RDUVVGSlJTeGxRVUZqTEVkQlFVYzdRVUZEYmtJc05rSkJRV1VzY1VKQlFYRkNMRU5CUVVNc1VVRkJVU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRMR2RDUVVGblFpeFRRVUZUTEVkQlFVYzdRVUZCUVN4WlFVTjBSenRCUVVGQkxGVkJRMFk3UVVGQlFTeFJRVU5HTzBGQlEwRXNkVUpCUVdVN1FVRkJRU3hWUVVOWU8wRkJRVUVzVlVGRFFTeERRVUZETEdWQlFXVXNkVUpCUVhWQ0xIZENRVUYzUWl4blFrRkJaMElzYjBKQlFXOUNMRWxCUVVrN1FVRkJRU3hSUVVGRE8wRkJRVUVzVFVGRE9VYzdRVUZGUVN4TlFVRkJSaXhOUVVGTExHbENRVUZwUWl4aFFVRmhPMEZCUTI1RExGVkJRVWs3UVVGRFNpeFZRVUZyUXl4blFrRkJaMEk3UVVGRGFFUXNiMEpCUVZrc1RVRkJUVUVzVFVGQlN6dEJRVUZCTEZWQlEyNUNPMEZCUVVFc1ZVRkJaU3hsUVVGbE8wRkJRVUVzVlVGQlVUdEJRVUZCTEZWQlFXRTdRVUZCUVN4VlFVRnZRanRCUVVGQkxGRkJRV2RDTzBGQlFVRXNUVUZETjBZc1QwRkJUenRCUVVOTUxHOUNRVUZaTEUxQlFVMUJMRTFCUVVzN1FVRkJRU3hWUVVOdVFqdEJRVUZCTEZWQlFXVTdRVUZCUVN4VlFVRnJRanRCUVVGQkxGVkJRVzFDTzBGQlFVRXNWVUZCV1R0QlFVRkJMRlZCUVcxQ08wRkJRVUVzVlVGRGJrWTdRVUZCUVN4VlFVRnZRanRCUVVGQkxGRkJRV2RDTzBGQlFVRXNUVUZETVVNN1FVRkZRU3hWUVVGSkxHTkJRV01zUjBGQlJ6dEJRVU51UWl4MVFrRkJaU3d3UWtGQk1FSTdRVUZCUVN4TlFVTXpRenRCUVVWQkxGbEJRVTBzVTBGQk1rSXNRMEZCUXp0QlFVVnNReXhsUVVGVExFbEJRVWtzUjBGQlJ5eEpRVUZKTEdGQlFXRXNTMEZCU3p0QlFVTndReXhqUVVGTkxGTkJRVk5CTEUxQlFVc3NVVUZCVVN4eFFrRkJjVUlzU1VGQlNTeERRVUZETzBGQlEzUkVMRmxCUVVrc1YwRkJWeXh2UWtGQmIwSXNRMEZCUXl4SFFVRkhPMEZCUlhKRExHbENRVUZQTEV0QlFVc3NZMEZCWXl4RFFVRkRMRU5CUVVVN1FVRkROMEk3UVVGQlFTeFJRVU5HTzBGQlJVRXNZMEZCVFN3eVFrRkJNa0pCTEUxQlFVc3NWVUZCVlR0QlFVVm9SQ3hqUVVGTkxHMUNRVUZ0UWtFc1RVRkJTeXhYUVVGWExFbEJRVWtzUTBGQlF6dEJRVVU1UXl4WlFVRkpMRzFDUVVGdFFqdEJRVU4yUWl4WlFVRkpMRTFCUVRaQ0xHRkJRV0U3UVVGRE9VTXNXVUZCU1R0QlFVTkdMR2RDUVVGTlJTeGhRVUZaUml4TlFVRkxPMEZCUVVFc1dVRkRia0k3UVVGQlFTeFpRVUZSTzBGQlFVRXNXVUZCYTBJc2JVSkJRVzFDTzBGQlFVRXNXVUZCUnl4dFFrRkJiVUk3UVVGQlFTeFpRVUZITEcxQ1FVRnRRanRCUVVGQkxGVkJRVVU3UVVGREwwWXNZMEZCU1VVc1pVRkJZeXhIUVVGSE8wRkJRMjVDTERKQ1FVRmxMRFJEUVVFMFF5eERRVUZETEVkQlFVYzdRVUZCUVN4VlFVTnFSVHRCUVVOQkxHTkJRVWtzYTBKQlFXdENMRzFDUVVGdFFqdEJRVU42UXl4blFrRkJUU3hYUVVGWFJpeE5RVUZMTEZGQlFWRXNhVUpCUVdsQ08wRkJReTlETEhWQ1FVRmhRU3hOUVVGTExGRkJRVkVzYVVKQlFXbENPMEZCUXpORExHZENRVUZOTEdGQlFXRkJMRTFCUVVzc1VVRkJVU3hwUWtGQmFVSTdRVUZEYWtRc1owSkJRVTBzWVVGQllVRXNUVUZCU3l4UlFVRlJMR2xDUVVGcFFqdEJRVU5xUkN4blFrRkJUU3hQUVVGUExFTkJRVU03UVVGRFpDeHRRa0ZCVTBjc1MwRkJTU3hIUVVGSFFTeExRVUZKTEZsQlFWbEJMRTFCUVVzN1FVRkRia01zYVVKQlFVc3NTMEZCUzBnc1RVRkJTeXhSUVVGUkxHRkJRV0VzU1VGQlNVY3NSVUZCUXl4RFFVRkRPMEZCUVVFc1ZVRkROVU03UVVGRFFTeFZRVUZCU0N4TlFVRkxMRk5CUVZNc1ZVRkJWVHRCUVVWNFFpeG5Ra0ZCVFN4UFFVRlBMRXRCUVVzc1QwRkJUeXhEUVVGRExFZEJRVWNzVFVGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXp0QlFVTXpReXhwUWtGQlR5d3lRa0ZCTWtJc1VVRkJVVHRCUVVVeFF5eG5Ra0ZCVFN4dlFrRkJiMElzWjBKQlFXZENMSGxDUVVGNVFpeGpRVUZqTEVOQlFVTXNRMEZCUXp0QlFVVnVSaXhqUVVGSkxGTkJRVk1zVlVGQlZUdEJRVU55UWl4blFrRkJTU3h6UWtGQmMwSXNZMEZCWXp0QlFVTjBReXh2UWtGQlRTeEpRVUZKTEUxQlFVMHNkME5CUVhkRE8wRkJRVUVzV1VGRE1VUTdRVUZEUVN4clFrRkJUU3hoUVVGMVFpeERRVUZETzBGQlF6bENMR2RDUVVGSkxGbEJRVmtzWVVGQllUdEJRVU0zUWl4eFFrRkJVMGNzUzBGQlNTeEhRVUZIUVN4TFFVRkpMRTFCUVUxQkxFMUJRVXM3UVVGRE4wSXNiMEpCUVUwc1UwRkJVMGdzVFVGQlN5eFJRVUZSTEZkQlFWYzdRVUZEZGtNc2IwSkJRVTBzYVVKQlFXbENSeXhQUVVGTkxFOUJRVThzU1VGQlNTeFRRVUZaU0N4TlFVRkxMRkZCUVZFc1UwRkJVeXhKUVVGSk8wRkJRemxGTEhsQ1FVRlhMRXRCUVV0QkxFMUJRVXNzWVVGQllTeFJRVUZSTEdOQlFXTXNRMEZCUXp0QlFVRkJMRmxCUXpORU8wRkJRMEVzYlVKQlFVOHNTMEZCU3l4RFFVRkRMRTFCUVUwc1RVRkJUU3haUVVGWkxFdEJRVXNzUTBGQlF6dEJRVUZCTEZWQlF6ZERMRTlCUVU4N1FVRkhUQ3huUWtGQlNTeHpRa0ZCYzBJc1owSkJRV2RDTEU5QlFVOHNSMEZCUnp0QlFVTnNSQ3h2UWtGQlRTeFpRVUZaUVN4TlFVRkxPMEZCUTNaQ0xHdENRVUZKTEVOQlFVTXNWMEZCVnp0QlFVTmtMSE5DUVVGTkxFbEJRVWtzVFVGQlRTeDFSVUZCZFVVN1FVRkJRU3hqUVVONlJqdEJRVU5CTEc5Q1FVRk5MRmxCUVZrc1ZVRkJWU3hWUVVGVk8wRkJRM1JETEc5Q1FVRk5MR05CUVdNc2NVSkJRWEZDTEZGQlFWRTdRVUZEYWtRc2EwSkJRVWtzWjBKQlFXZENMRlZCUVdFc1EwRkJReXg1UWtGQmVVSXNTVUZCU1N4SFFVRkhPMEZCUTJoRkxITkNRVUZOTEVsQlFVa3NUVUZCVFN3d1FrRkJNRUlzU1VGQlNTeEZRVUZGTzBGQlFVRXNZMEZEYkVRN1FVRkhRU3hwUTBGQmJVSTdRVUZGYmtJc2NVSkJRVThzUzBGQlN6dEJRVUZCTEdkQ1FVTldPMEZCUVVFc1owSkJRVTA3UVVGQlFTeG5Ra0ZCVFR0QlFVRkJMR3RDUVVOV08wRkJRVUVzYTBKQlEwRXNWVUZCVlVFc1RVRkJTeXh4UWtGQmMwSXNWMEZCVnl4UFFVRlBMR0ZCUVdFc1NVRkJTVHRCUVVGQkxHdENRVU40UlN4VFFVRlRMRTFCUVUwN1FVRkRZaXh2UWtGQlFVRXNUVUZCU3l4clFrRkJhMElzVFVGQlRUdEJRVUZCTEd0Q1FVTXZRanRCUVVGQkxHZENRVU5HTzBGQlFVRXNaMEpCUTBFN1FVRkJRU3hqUVVOR0xFTkJRVU03UVVGQlFTeFpRVU5JTEU5QlFVODdRVUZEVEN4dlFrRkJUU3gzUWtGQmQwSXNhME5CUVd0RExFbEJRVWs3UVVGRGNFVXNiMEpCUVUwc1QwRkJUeXhKUVVGSkxITkNRVUZ6UWl4SlFVRkpPMEZCUXpORExHdENRVUZKTEZkQlFWY3NTMEZCU3l4UlFVRlJMRXRCUVVzc1dVRkJXU3hMUVVGTExGVkJRVlVzUlVGRGRrUXNTVUZCU1VFc1RVRkJTeXhQUVVGUExGTkJRVk1zV1VGQldTeGhRVUZoTEV0QlFVc3NWVUZCVlN4RFFVRkRPMEZCUTNaRkxIRkNRVUZQTEV0QlFVc3NRMEZCUXl4TlFVRk5MRTFCUVUwc1RVRkJUU3hMUVVGTExFTkJRVU03UVVGQlFTeFpRVU4yUXp0QlFVRkJMRlZCUTBZN1FVRkJRU3hSUVVOR0xGVkJRVVU3UVVGRFFTeFZRVUZCUVN4TlFVRkxMR0ZCUVdFc2QwSkJRWGRDTzBGQlF6RkRMR05CUVVrc1UwRkJVeXhaUVVGWkxGbEJRVms3UVVGRGJrTXNXVUZCUVVFc1RVRkJTeXhOUVVGTkxGVkJRVlU3UVVGQlFTeFZRVU4yUWp0QlFVTkJMR05CUVVrc1EwRkJReXhyUWtGQmEwSTdRVUZEY2tJc1dVRkJRVUVzVFVGQlN5eHJRa0ZCYTBJc1RVRkJUVHRCUVVGQkxGVkJReTlDTzBGQlFVRXNVVUZEUmp0QlFVRkJMRTFCUTBZN1FVRkZRU3hWUVVGSkxHdENRVUZyUWl4RFFVRkRMRzlDUVVGdlFqdEJRVU42UXl4UlFVRkJRU3hOUVVGTExITkNRVUZ6UWl4bFFVRmxMRTFCUVUwN1FVRkRhRVFzZFVKQlFXVTdRVUZCUVN4VlFVTllPMEZCUVVFc1ZVRkRRU3hEUVVGRExHVkJRV1VzZFVKQlFYVkNMSGRDUVVGM1FpeG5Ra0ZCWjBJc2IwSkJRVzlDTEV0QlFVczdRVUZCUVN4UlFVRkRPMEZCUVVFc1RVRkRMMGM3UVVGRFFTeGhRVUZQTzBGQlFVRXNTVUZEVkN4VlFVRkZPMEZCUTBFc1RVRkJRVUVzVFVGQlN5eGhRVUZoTEdOQlFXTTdRVUZGYUVNc2VVSkJRVzFDTEZGQlFWRXNUMEZCUzBFc1RVRkJTeXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRPMEZCUTNwRUxEQkNRVUZ2UWl4UlFVRlJMRTlCUVV0QkxFMUJRVXNzYTBKQlFXdENMRU5CUVVNc1EwRkJRenRCUVVNeFJDeDNRa0ZCYTBJc1VVRkJVU3hQUVVGTFFTeE5RVUZMTEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUlRWRExGVkJRVWtzY1VKQlFYRkNMRWRCUVVjN1FVRkRNVUlzVVVGQlFVRXNUVUZCU3l4elFrRkJjMElzWjBKQlFXZENPMEZCUVVFc1RVRkROME03UVVGRFFTeDFRa0ZCYVVJc1VVRkJVU3hQUVVGTFFTeE5RVUZMTEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUVVFc1NVRkROME03UVVGQlFTeEZRVU5HTzBGQlMwOHNUVUZCVFN4bFFVRmxMRU5CUVVNc1kwRkJORUk3UVVGRGRrUXNWVUZCVFVFc1VVRkJUeXhaUVVGWk8wRkJRM3BDTEZWQlFVMHNWVUZCVlN4bFFVRmxMRWxCUVVrc1UwRkJVenRCUVVNMVF5eFJRVUZKTEVOQlFVTXNVMEZCVXp0QlFVTmFMRmxCUVUwc1NVRkJTU3hOUVVGTkxHOUNRVUZ2UWp0QlFVRkJMRWxCUTNSRE8wRkJRMEVzVlVGQlRTeG5Ra0ZCWjBJc1VVRkJVU3hEUVVGRE8wRkJSeTlDTEZWQlFVMHNhMEpCUVd0Q1FTeE5RVUZMTEdsQ1FVRnBRaXhoUVVGaE8wRkJRek5FTEZGQlFVa3NiMEpCUVc5Q0xFZEJRVWM3UVVGRGVrSXNjVUpCUVdVc2FVTkJRV3RETzBGQlFVRXNTVUZEYmtRN1FVRkRRU3hKUVVGQlFTeE5RVUZMTEZOQlFWTXNaVUZCWlR0QlFVRkJMRVZCUXk5Q08wRkJSVThzVFVGQlRTdzJRa0ZCTmtJc1EwRkJReXhaUVVGelJUdEJRVU12Unl4VlFVRk5MRlZCUVRaQ0xFTkJRVU03UVVGRGNFTXNaVUZCVnl4VlFVRlZMRk5CUVZNN1FVRkROVUlzV1VGQlRTeFBRVUZQTEU5QlFVOHNRMEZCUXp0QlFVTnlRaXhWUVVGSkxFTkJRVU1zVFVGQlRTeFJRVUZSTEVsQlFVa3NTMEZCU3l4WlFVRlpMRTFCUVUwN1FVRkROVU1zWjBKQlFWRXNTMEZCU3l4TFFVRkxMRTFCUVUwN1FVRkJRU3hOUVVNeFFqdEJRVUZCTEVsQlEwWTdRVUZEUVN4WFFVRlBPMEZCUVVFc1JVRkRWRHM3TzBGSGJIRkNRU3hQUVVGTExGbEJRVmtzUTBGQlF5eFBRVUV5UXp0QlFVTXpSQ3hWUVVGTkxFVkJRVU1zVFVGQlRTeEpRVUZMTEZGQlFVOHNTVUZCU1N4SFFVRkhPMEZCUTJoRExGRkJRVWs3UVVGRFJpeGpRVUZSTEUxQlFVMDdRVUZCUVN4UlFVTmFMRXRCUVVzN1FVRkRTQ3huUTBGQmMwSXNVVUZCVXl4SlFVRkpMRVZCUXpsQ08wRkJRVUVzV1VGRFJ5eE5RVUZOTzBGQlEwb3NNRUpCUVZrc1QwRkJVU3hGUVVGRk8wRkJRVUVzWjBKQlEyeENMRTFCUVUwN1FVRkRTaXc0UWtGQldTeEZRVUZETEV0QlFVa3NRMEZCUXp0QlFVRkJMR2RDUVVOd1FqdEJRVUZCTEdkQ1FVTkJMRk5CUVU4N1FVRkRUQ3c0UWtGQldTeEZRVUZETEUxQlFVMHNTVUZCUnl4RFFVRkRPMEZCUVVFc1owSkJRM3BDTzBGQlFVRXNZMEZCUXp0QlFVRkJMRmxCUTFBN1FVRkJRU3haUVVOQkxGTkJRVTg3UVVGRFRDd3dRa0ZCV1N4RlFVRkRMRTFCUVUwc1NVRkJSeXhEUVVGRE8wRkJRVUVzV1VGRGVrSTdRVUZCUVN4VlFVRkRPMEZCUTFRN1FVRkJRU3hSUVVOR0xFdEJRVXNzVjBGQlZ6dEJRVU5rTEdkQ1FVRk5MRVZCUVVNc1VVRkJVU3hMUVVGQlNTeExRVUZITEVsQlFVazdRVUZEZEVJc2FVSkJRVTlCTEUxQlFVc3NUVUZCVFN4RlFVTmlPMEZCUVVFc1dVRkRSeXhOUVVGTk8wRkJRMG9zTUVKQlFWa3NSVUZCUXl4TFFVRkpMRU5CUVVNN1FVRkJRU3haUVVOd1FqdEJRVUZCTEZsQlEwRXNVMEZCVHp0QlFVTk1MREJDUVVGWkxFVkJRVU1zVFVGQlRTeEpRVUZITEVOQlFVTTdRVUZCUVN4WlFVTjZRanRCUVVGQkxGVkJRVU03UVVGRFZEdEJRVUZCTEZGQlEwWTdRVUZCUVN4UlFVTkJMRXRCUVVzc1lVRkJZVHRCUVVOb1FpeG5Ra0ZCVFN4RlFVRkRMRTlCUVUwc1NVRkJTVHRCUVVOcVFpeG5Ra0ZCVFN4aFFVRmhMSFZDUVVGMVFpeE5RVUZOTzBGQlEyaEVMSE5DUVVGWkxFVkJRVU1zVFVGQlRTeExRVUZMTEZkQlFWVXNRMEZCYlVJN1FVRkRja1E3UVVGQlFTeFJRVU5HTzBGQlFVRXNVVUZEUVN4TFFVRkxMRlZCUVZVN1FVRkRZaXhuUWtGQlRTeEZRVUZETEU5QlFVOHNVVUZCVHl4SlFVRkpPMEZCUTNwQ0xIZENRVUZqTEU5QlFVOHNUMEZCVHl4RlFVTjJRanRCUVVGQkxGbEJRMGNzY1VKQlFXMUNPMEZCUTJwQ0xEQkNRVUZaTEVWQlFVTXNUVUZCVFN4TFFVRkxMR2RDUVVGbExFTkJRVzFDTzBGQlFVRXNXVUZETlVRN1FVRkJRU3haUVVOQkxGTkJRVTg3UVVGRFRDd3dRa0ZCV1N4RlFVRkRMRTFCUVUwc1NVRkJSeXhEUVVGRE8wRkJRVUVzV1VGRGVrSTdRVUZCUVN4VlFVRkRPMEZCUTFRN1FVRkJRU3hSUVVOR08wRkJRVUVzVVVGRFFTeExRVUZMTzBGQlEwZ3NlVUpCUVdVc1QwRkJVVHRCUVVOMlFpeHpRa0ZCV1N4RlFVRkRMRXRCUVVrc1EwRkJRenRCUVVOc1FqdEJRVUZCTEZGQlEwWXNTMEZCU3l4UFFVRlBPMEZCUTFZc1owSkJRVTBzUlVGQlF5eFhRVUZYTEdOQlFXTXNVVUZCVVN4bFFVRmxMRkZCUVU4c1NVRkJTVHRCUVVOc1JTeGpRVUZKTEZkQlFWY3NZMEZCWXl4UlFVRlJMR1ZCUVdVc1NVRkJTU3hOUVVGTkxHTkJRV01zVFVGQlRTeEZRVUZGTEV0QlFVc3NTVUZCU1N4SFFVRkhMRTlCUVU4c1JVRkRiRWM3UVVGQlFTeFpRVU5ITEdGQlFWYzdRVUZEVkN4clFrRkJTU3hSUVVGUkxFdEJRVXNzVDBGQlN5eEZRVUZGTEVOQlFVTXNUVUZCVFN4TFFVRkxMRWRCUVVjN1FVRkRja01zTkVKQlFWa3NSVUZCUXl4TlFVRk5MRXRCUVVzc2EwUkJRV2xFTEVOQlFVTTdRVUZCUVN4alFVTTFSU3hQUVVGUE8wRkJRMHc3UVVGQlFTeHJRa0ZEU1N4RlFVRkRMRTFCUVUwc1MwRkJTeXhSUVVGUE8wRkJRVUVzYTBKQlEyNUNMREpDUVVFeVFpeERRVUZETEVkQlFVY3NVVUZCVVN4SFFVRkhMRTlCUVU4c1EwRkJhVU03UVVGQlFTeG5Ra0ZCUXp0QlFVRkJMR05CUTNwR08wRkJRVUVzV1VGRFJqdEJRVUZCTEZsQlEwRXNVMEZCVHp0QlFVTk1MREJDUVVGWkxFVkJRVU1zVFVGQlRTeEpRVUZITEVOQlFVTTdRVUZCUVN4WlFVTjZRanRCUVVGQkxGVkJRVU03UVVGRFZEdEJRVUZCTEZGQlEwWTdRVUZCUVN4UlFVTkJMRXRCUVVzN1FVRkRTQ3gxUWtGQllTeFBRVUZSTzBGQlEzSkNMSE5DUVVGWkxFVkJRVU1zUzBGQlNTeERRVUZETzBGQlEyeENPMEZCUVVFc1VVRkRSanRCUVVGQkxFMUJRMFk3UVVGQlFTeEpRVU5HTEZOQlFWTXNTMEZCU3p0QlFVTmFMR3RDUVVGWkxFVkJRVU1zVFVGQlRTeEpRVUZITEVOQlFXMUNPMEZCUVVFc1NVRkRNME03UVVGQlFTeEZRVU5HT3lJc0NpQWdJbTVoYldWeklqb2dXeUpxYjJsdUlpd2dJbVZ1ZGlJc0lDSndZV1FpTENBaWFXNXBkQ0lzSUNKdlptWnpaWFJ6SWl3Z0ltbHVaR2xqWlhNaUxDQWlhVzF3YkNJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSnlaV1IxWTJWUGNITWlMQ0FpZG1Gc2FXUmhkR1ZKYm5CMWRITWlMQ0FpZG1Gc2FXUmhkR1ZKYm5CMWRITWlMQ0FpYVNJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSmxibllpTENBaWRtRnNhV1JoZEdWSmJuQjFkSE1pTENBaWRtRnNhV1JoZEdWSmJuQjFkSE1pTENBaVlTSXNJQ0ppSWl3Z0luUnlZVzV6Y0c5elpTSXNJQ0p2ZFhSd2RYUldZWEpwWVdKc1pTSXNJQ0pwYm01bGNrVnNaVzFsYm5SVGFYcGxJaXdnSW5aaGJHbGtZWFJsU1c1d2RYUnpJaXdnSW5aaGJHbGtZWFJsU1c1d2RYUnpJaXdnSW05MWRIQjFkRk5vWVhCbElpd2dJblJ5WVc1emNHOXpaV1JYWldsbmFIUWlMQ0FpWTI5dWRrbHVjSFYwY3lJc0lDSnBibTVsY2tWc1pXMWxiblJUYVhwbElpd2dJblpoYkdsa1lYUmxTVzV3ZFhSeklpd2dJblpoYkdsa1lYUmxTVzV3ZFhSeklpd2dJbkJsY20xR2RXNWpkR2x2YmtKdlpIa2lMQ0FpYzNsdFltOXNJaXdnSW5KbFpIVmpaVTl3Y3lJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSmpZV3hqZFd4aGRHVlBkWFJ3ZFhSVGFHRndaU0lzSUNKbVlYTjBSMlZzZFNJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSmtZWFJoVkhsd1pTSXNJQ0oyWVd4cFpHRjBaVWx1Y0hWMGN5SXNJQ0ozWldsbmFIUlVjbUZ1YzNCdmMyVkJkSFJ5YVdKMWRHVWlMQ0FpZG1Gc2FXUmhkR1ZKYm5CMWRITWlMQ0FpZG1Gc2FXUmhkR1ZKYm5CMWRITWlMQ0FpWlc1Mklpd2dJbVZ1ZGlJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSjJZV3hwWkdGMFpVbHVjSFYwY3lJc0lDSmpiMjF3YjI1bGJuUnpJaXdnSW5aaGJHbGtZWFJsU1c1d2RYUnpJaXdnSW5aaGJHbGtZWFJsU1c1d2RYUnpJaXdnSW1kbGRFOTFkSEIxZEZOb1lYQmxJaXdnSW1FaUxDQWlZaUlzSUNKaklpd2dJbVpoYzNSSFpXeDFJaXdnSW1WdWRpSXNJQ0pwSWl3Z0ltVnVkaUlzSUNKM1lYTnRJaXdnSW5kaGMyMGlMQ0FpZDJGemJTSXNJQ0p5WldGa1JtbHNaU0lzSUNKeVpXRmtSbWxzWlNJc0lDSmxibllpTENBaWQyRnpiU0lzSUNKMFpXNXpiM0lpTENBaVpYSnliM0pEYjJSbElpd2dJbWtpTENBaVpXNTJJbDBLZlFvPVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2VudiwgSW5mZXJlbmNlU2Vzc2lvbn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcblxuaW1wb3J0IHtPcnRXYXNtTWVzc2FnZSwgU2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXIsIFNlcmlhbGl6YWJsZVNlc3Npb25NZXRhZGF0YSwgU2VyaWFsaXphYmxlVGVuc29yTWV0YWRhdGEsIFRlbnNvck1ldGFkYXRhfSBmcm9tICcuL3Byb3h5LW1lc3NhZ2VzJztcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSAnLi93YXNtLWNvcmUtaW1wbCc7XG5pbXBvcnQge2luaXRpYWxpemVXZWJBc3NlbWJseX0gZnJvbSAnLi93YXNtLWZhY3RvcnknO1xuXG5jb25zdCBpc1Byb3h5ID0gKCk6IGJvb2xlYW4gPT4gISFlbnYud2FzbS5wcm94eSAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xubGV0IHByb3h5V29ya2VyOiBXb3JrZXJ8dW5kZWZpbmVkO1xubGV0IGluaXRpYWxpemluZyA9IGZhbHNlO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5sZXQgYWJvcnRlZCA9IGZhbHNlO1xuXG50eXBlIFByb21pc2VDYWxsYmFja3M8VCA9IHZvaWQ+ID0gW3Jlc29sdmU6IChyZXN1bHQ6IFQpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbjogdW5rbm93bikgPT4gdm9pZF07XG5sZXQgaW5pdFdhc21DYWxsYmFja3M6IFByb21pc2VDYWxsYmFja3M7XG5jb25zdCBxdWV1ZWRDYWxsYmFja3M6IE1hcDxPcnRXYXNtTWVzc2FnZVsndHlwZSddLCBBcnJheTxQcm9taXNlQ2FsbGJhY2tzPHVua25vd24+Pj4gPSBuZXcgTWFwKCk7XG5cbmNvbnN0IGVucXVldWVDYWxsYmFja3MgPSAodHlwZTogT3J0V2FzbU1lc3NhZ2VbJ3R5cGUnXSwgY2FsbGJhY2tzOiBQcm9taXNlQ2FsbGJhY2tzPHVua25vd24+KTogdm9pZCA9PiB7XG4gIGNvbnN0IHF1ZXVlID0gcXVldWVkQ2FsbGJhY2tzLmdldCh0eXBlKTtcbiAgaWYgKHF1ZXVlKSB7XG4gICAgcXVldWUucHVzaChjYWxsYmFja3MpO1xuICB9IGVsc2Uge1xuICAgIHF1ZXVlZENhbGxiYWNrcy5zZXQodHlwZSwgW2NhbGxiYWNrc10pO1xuICB9XG59O1xuXG5jb25zdCBlbnN1cmVXb3JrZXIgPSAoKTogdm9pZCA9PiB7XG4gIGlmIChpbml0aWFsaXppbmcgfHwgIWluaXRpYWxpemVkIHx8IGFib3J0ZWQgfHwgIXByb3h5V29ya2VyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd3b3JrZXIgbm90IHJlYWR5Jyk7XG4gIH1cbn07XG5cbmNvbnN0IG9uUHJveHlXb3JrZXJNZXNzYWdlID0gKGV2OiBNZXNzYWdlRXZlbnQ8T3J0V2FzbU1lc3NhZ2U+KTogdm9pZCA9PiB7XG4gIHN3aXRjaCAoZXYuZGF0YS50eXBlKSB7XG4gICAgY2FzZSAnaW5pdC13YXNtJzpcbiAgICAgIGluaXRpYWxpemluZyA9IGZhbHNlO1xuICAgICAgaWYgKGV2LmRhdGEuZXJyKSB7XG4gICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICBpbml0V2FzbUNhbGxiYWNrc1sxXShldi5kYXRhLmVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIGluaXRXYXNtQ2FsbGJhY2tzWzBdKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbml0LWVwJzpcbiAgICBjYXNlICdjb3B5LWZyb20nOlxuICAgIGNhc2UgJ2NyZWF0ZSc6XG4gICAgY2FzZSAncmVsZWFzZSc6XG4gICAgY2FzZSAncnVuJzpcbiAgICBjYXNlICdlbmQtcHJvZmlsaW5nJzoge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gcXVldWVkQ2FsbGJhY2tzLmdldChldi5kYXRhLnR5cGUpITtcbiAgICAgIGlmIChldi5kYXRhLmVycikge1xuICAgICAgICBjYWxsYmFja3Muc2hpZnQoKSFbMV0oZXYuZGF0YS5lcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkhWzBdKGV2LmRhdGEub3V0ISk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgfVxufTtcblxuY29uc3Qgc2NyaXB0U3JjID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IChkb2N1bWVudD8uY3VycmVudFNjcmlwdCBhcyBIVE1MU2NyaXB0RWxlbWVudCk/LnNyYyA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVXZWJBc3NlbWJseUFuZE9ydFJ1bnRpbWUgPSBhc3luYygpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbml0aWFsaXppbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ211bHRpcGxlIGNhbGxzIHRvIFxcJ2luaXRXYXNtKClcXCcgZGV0ZWN0ZWQuJyk7XG4gIH1cbiAgaWYgKGFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByZXZpb3VzIGNhbGwgdG8gXFwnaW5pdFdhc20oKVxcJyBmYWlsZWQuJyk7XG4gIH1cblxuICBpbml0aWFsaXppbmcgPSB0cnVlO1xuXG4gIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU01fUFJPWFkgJiYgaXNQcm94eSgpKSB7XG4gICAgLy8gb3ZlcndyaXRlIHdhc20gZmlsZXBhdGhzXG4gICAgaWYgKGVudi53YXNtLndhc21QYXRocyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoc2NyaXB0U3JjICYmIHNjcmlwdFNyYy5pbmRleE9mKCdibG9iOicpICE9PSAwKSB7XG4gICAgICAgIGVudi53YXNtLndhc21QYXRocyA9IHNjcmlwdFNyYy5zdWJzdHIoMCwgKyhzY3JpcHRTcmMpLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcHJveHlXb3JrZXI/LnRlcm1pbmF0ZSgpO1xuXG4gICAgICBjb25zdCB3b3JrZXJVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIC8vIFRoaXMgcmVxdWlyZSgpIGZ1bmN0aW9uIGlzIGhhbmRsZWQgYnkgZXNidWlsZCBwbHVnaW4gdG8gbG9hZCBmaWxlIGNvbnRlbnQgYXMgc3RyaW5nLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgICAgIHJlcXVpcmUoJy4vcHJveHktd29ya2VyL21haW4nKVxuICAgICAgICAgIF0sXG4gICAgICAgICAge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSkpO1xuICAgICAgcHJveHlXb3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybCwge25hbWU6ICdvcnQtd2FzbS1wcm94eS13b3JrZXInfSk7XG4gICAgICBwcm94eVdvcmtlci5vbmVycm9yID0gKGV2OiBFcnJvckV2ZW50KSA9PiByZWplY3QoZXYpO1xuICAgICAgcHJveHlXb3JrZXIub25tZXNzYWdlID0gb25Qcm94eVdvcmtlck1lc3NhZ2U7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHdvcmtlclVybCk7XG4gICAgICBpbml0V2FzbUNhbGxiYWNrcyA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgY29uc3QgbWVzc2FnZTogT3J0V2FzbU1lc3NhZ2UgPSB7dHlwZTogJ2luaXQtd2FzbScsIGluIDogZW52fTtcbiAgICAgIHByb3h5V29ya2VyLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGluaXRpYWxpemVXZWJBc3NlbWJseShlbnYud2FzbSk7XG4gICAgICBhd2FpdCBjb3JlLmluaXRSdW50aW1lKGVudik7XG4gICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsaXplT3J0RXAgPSBhc3luYyhlcE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XQVNNX1BST1hZICYmIGlzUHJveHkoKSkge1xuICAgIGVuc3VyZVdvcmtlcigpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBlbnF1ZXVlQ2FsbGJhY2tzKCdpbml0LWVwJywgW3Jlc29sdmUsIHJlamVjdF0pO1xuICAgICAgY29uc3QgbWVzc2FnZTogT3J0V2FzbU1lc3NhZ2UgPSB7dHlwZTogJ2luaXQtZXAnLCBpbiA6IHtlcE5hbWUsIGVudn19O1xuICAgICAgcHJveHlXb3JrZXIhLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGNvcmUuaW5pdEVwKGVudiwgZXBOYW1lKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIgPSBhc3luYyhidWZmZXI6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyPiA9PiB7XG4gIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU01fUFJPWFkgJiYgaXNQcm94eSgpKSB7XG4gICAgZW5zdXJlV29ya2VyKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFNlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBlbnF1ZXVlQ2FsbGJhY2tzKCdjb3B5LWZyb20nLCBbcmVzb2x2ZSwgcmVqZWN0XSk7XG4gICAgICBjb25zdCBtZXNzYWdlOiBPcnRXYXNtTWVzc2FnZSA9IHt0eXBlOiAnY29weS1mcm9tJywgaW4gOiB7YnVmZmVyfX07XG4gICAgICBwcm94eVdvcmtlciEucG9zdE1lc3NhZ2UobWVzc2FnZSwgW2J1ZmZlci5idWZmZXJdKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29yZS5jb3B5RnJvbUV4dGVybmFsQnVmZmVyKGJ1ZmZlcik7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTZXNzaW9uID1cbiAgICBhc3luYyhtb2RlbDogU2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXJ8VWludDhBcnJheSwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgICBQcm9taXNlPFNlcmlhbGl6YWJsZVNlc3Npb25NZXRhZGF0YT4gPT4ge1xuICAgICAgICAgIGlmICghQlVJTERfREVGUy5ESVNBQkxFX1dBU01fUFJPWFkgJiYgaXNQcm94eSgpKSB7XG4gICAgICAgICAgICAvLyBjaGVjayB1bnN1cHBvcnRlZCBvcHRpb25zXG4gICAgICAgICAgICBpZiAob3B0aW9ucz8ucHJlZmVycmVkT3V0cHV0TG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXNzaW9uIG9wdGlvbiBcInByZWZlcnJlZE91dHB1dExvY2F0aW9uXCIgaXMgbm90IHN1cHBvcnRlZCBmb3IgcHJveHkuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnN1cmVXb3JrZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxTZXJpYWxpemFibGVTZXNzaW9uTWV0YWRhdGE+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgZW5xdWV1ZUNhbGxiYWNrcygnY3JlYXRlJywgW3Jlc29sdmUsIHJlamVjdF0pO1xuICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlOiBPcnRXYXNtTWVzc2FnZSA9IHt0eXBlOiAnY3JlYXRlJywgaW4gOiB7bW9kZWwsIG9wdGlvbnM6IHsuLi5vcHRpb25zfX19O1xuICAgICAgICAgICAgICBjb25zdCB0cmFuc2ZlcmFibGU6IFRyYW5zZmVyYWJsZVtdID0gW107XG4gICAgICAgICAgICAgIGlmIChtb2RlbCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGUucHVzaChtb2RlbC5idWZmZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByb3h5V29ya2VyIS5wb3N0TWVzc2FnZShtZXNzYWdlLCB0cmFuc2ZlcmFibGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLmNyZWF0ZVNlc3Npb24obW9kZWwsIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuZXhwb3J0IGNvbnN0IHJlbGVhc2VTZXNzaW9uID0gYXN5bmMoc2Vzc2lvbklkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0FTTV9QUk9YWSAmJiBpc1Byb3h5KCkpIHtcbiAgICBlbnN1cmVXb3JrZXIoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZW5xdWV1ZUNhbGxiYWNrcygncmVsZWFzZScsIFtyZXNvbHZlLCByZWplY3RdKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IE9ydFdhc21NZXNzYWdlID0ge3R5cGU6ICdyZWxlYXNlJywgaW4gOiBzZXNzaW9uSWR9O1xuICAgICAgcHJveHlXb3JrZXIhLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvcmUucmVsZWFzZVNlc3Npb24oc2Vzc2lvbklkKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJ1biA9IGFzeW5jKFxuICAgIHNlc3Npb25JZDogbnVtYmVyLCBpbnB1dEluZGljZXM6IG51bWJlcltdLCBpbnB1dHM6IFRlbnNvck1ldGFkYXRhW10sIG91dHB1dEluZGljZXM6IG51bWJlcltdLFxuICAgIG91dHB1dHM6IEFycmF5PFRlbnNvck1ldGFkYXRhfG51bGw+LCBvcHRpb25zOiBJbmZlcmVuY2VTZXNzaW9uLlJ1bk9wdGlvbnMpOiBQcm9taXNlPFRlbnNvck1ldGFkYXRhW10+ID0+IHtcbiAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0FTTV9QUk9YWSAmJiBpc1Byb3h5KCkpIHtcbiAgICAvLyBjaGVjayBpbnB1dHMgbG9jYXRpb25cbiAgICBpZiAoaW5wdXRzLnNvbWUodCA9PiB0WzNdICE9PSAnY3B1JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgdGVuc29yIG9uIEdQVSBpcyBub3Qgc3VwcG9ydGVkIGZvciBwcm94eS4nKTtcbiAgICB9XG4gICAgLy8gY2hlY2sgb3V0cHV0cyBsb2NhdGlvblxuICAgIGlmIChvdXRwdXRzLnNvbWUodCA9PiB0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcmUtYWxsb2NhdGVkIG91dHB1dCB0ZW5zb3IgaXMgbm90IHN1cHBvcnRlZCBmb3IgcHJveHkuJyk7XG4gICAgfVxuICAgIGVuc3VyZVdvcmtlcigpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxTZXJpYWxpemFibGVUZW5zb3JNZXRhZGF0YVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBlbnF1ZXVlQ2FsbGJhY2tzKCdydW4nLCBbcmVzb2x2ZSwgcmVqZWN0XSk7XG4gICAgICBjb25zdCBzZXJpYWxpemFibGVJbnB1dHMgPSBpbnB1dHMgYXMgU2VyaWFsaXphYmxlVGVuc29yTWV0YWRhdGFbXTsgIC8vIGV2ZXJ5IGlucHV0IGlzIG9uIENQVS5cbiAgICAgIGNvbnN0IG1lc3NhZ2U6IE9ydFdhc21NZXNzYWdlID1cbiAgICAgICAgICB7dHlwZTogJ3J1bicsIGluIDoge3Nlc3Npb25JZCwgaW5wdXRJbmRpY2VzLCBpbnB1dHM6IHNlcmlhbGl6YWJsZUlucHV0cywgb3V0cHV0SW5kaWNlcywgb3B0aW9uc319O1xuICAgICAgcHJveHlXb3JrZXIhLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIGNvcmUuZXh0cmFjdFRyYW5zZmVyYWJsZUJ1ZmZlcnMoc2VyaWFsaXphYmxlSW5wdXRzKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvcmUucnVuKHNlc3Npb25JZCwgaW5wdXRJbmRpY2VzLCBpbnB1dHMsIG91dHB1dEluZGljZXMsIG91dHB1dHMsIG9wdGlvbnMpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZW5kUHJvZmlsaW5nID0gYXN5bmMoc2Vzc2lvbklkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0FTTV9QUk9YWSAmJiBpc1Byb3h5KCkpIHtcbiAgICBlbnN1cmVXb3JrZXIoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZW5xdWV1ZUNhbGxiYWNrcygnZW5kLXByb2ZpbGluZycsIFtyZXNvbHZlLCByZWplY3RdKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IE9ydFdhc21NZXNzYWdlID0ge3R5cGU6ICdlbmQtcHJvZmlsaW5nJywgaW4gOiBzZXNzaW9uSWR9O1xuICAgICAgcHJveHlXb3JrZXIhLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvcmUuZW5kUHJvZmlsaW5nKHNlc3Npb25JZCk7XG4gIH1cbn07XG4iLCAiLy8gQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG5cbmltcG9ydCB7SW5mZXJlbmNlU2Vzc2lvbiwgSW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXIsIFNlc3Npb25IYW5kbGVyLCBUZW5zb3IsIFRSQUNFX0ZVTkNfQkVHSU4sIFRSQUNFX0ZVTkNfRU5EfSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge1NlcmlhbGl6YWJsZUludGVybmFsQnVmZmVyLCBUZW5zb3JNZXRhZGF0YX0gZnJvbSAnLi9wcm94eS1tZXNzYWdlcyc7XG5pbXBvcnQge2NvcHlGcm9tRXh0ZXJuYWxCdWZmZXIsIGNyZWF0ZVNlc3Npb24sIGVuZFByb2ZpbGluZywgcmVsZWFzZVNlc3Npb24sIHJ1bn0gZnJvbSAnLi9wcm94eS13cmFwcGVyJztcbmltcG9ydCB7aXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlfSBmcm9tICcuL3dhc20tY29tbW9uJztcbmltcG9ydCB7bG9hZEZpbGV9IGZyb20gJy4vd2FzbS11dGlscy1sb2FkLWZpbGUnO1xuXG5leHBvcnQgY29uc3QgZW5jb2RlVGVuc29yTWV0YWRhdGEgPSAodGVuc29yOiBUZW5zb3IsIGdldE5hbWU6ICgpID0+IHN0cmluZyk6IFRlbnNvck1ldGFkYXRhID0+IHtcbiAgc3dpdGNoICh0ZW5zb3IubG9jYXRpb24pIHtcbiAgICBjYXNlICdjcHUnOlxuICAgICAgcmV0dXJuIFt0ZW5zb3IudHlwZSwgdGVuc29yLmRpbXMsIHRlbnNvci5kYXRhLCAnY3B1J107XG4gICAgY2FzZSAnZ3B1LWJ1ZmZlcic6XG4gICAgICByZXR1cm4gW3RlbnNvci50eXBlLCB0ZW5zb3IuZGltcywge2dwdUJ1ZmZlcjogdGVuc29yLmdwdUJ1ZmZlcn0sICdncHUtYnVmZmVyJ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkYXRhIGxvY2F0aW9uOiAke3RlbnNvci5sb2NhdGlvbn0gZm9yICR7Z2V0TmFtZSgpfWApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb2RlVGVuc29yTWV0YWRhdGEgPSAodGVuc29yOiBUZW5zb3JNZXRhZGF0YSk6IFRlbnNvciA9PiB7XG4gIHN3aXRjaCAodGVuc29yWzNdKSB7XG4gICAgY2FzZSAnY3B1JzpcbiAgICAgIHJldHVybiBuZXcgVGVuc29yKHRlbnNvclswXSwgdGVuc29yWzJdLCB0ZW5zb3JbMV0pO1xuICAgIGNhc2UgJ2dwdS1idWZmZXInOiB7XG4gICAgICBjb25zdCBkYXRhVHlwZSA9IHRlbnNvclswXTtcbiAgICAgIGlmICghaXNHcHVCdWZmZXJTdXBwb3J0ZWRUeXBlKGRhdGFUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBzdXBwb3J0ZWQgZGF0YSB0eXBlOiAke2RhdGFUeXBlfSBmb3IgZGVzZXJpYWxpemluZyBHUFUgdGVuc29yYCk7XG4gICAgICB9XG4gICAgICBjb25zdCB7Z3B1QnVmZmVyLCBkb3dubG9hZCwgZGlzcG9zZX0gPSB0ZW5zb3JbMl07XG4gICAgICByZXR1cm4gVGVuc29yLmZyb21HcHVCdWZmZXIoZ3B1QnVmZmVyLCB7ZGF0YVR5cGUsIGRpbXM6IHRlbnNvclsxXSwgZG93bmxvYWQsIGRpc3Bvc2V9KTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkYXRhIGxvY2F0aW9uOiAke3RlbnNvclszXX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIE9ubnhydW50aW1lV2ViQXNzZW1ibHlTZXNzaW9uSGFuZGxlciBpbXBsZW1lbnRzIEluZmVyZW5jZVNlc3Npb25IYW5kbGVyIHtcbiAgcHJpdmF0ZSBzZXNzaW9uSWQ6IG51bWJlcjtcblxuICBpbnB1dE5hbWVzOiBzdHJpbmdbXTtcbiAgb3V0cHV0TmFtZXM6IHN0cmluZ1tdO1xuXG4gIGFzeW5jIGZldGNoTW9kZWxBbmRDb3B5VG9XYXNtTWVtb3J5KHBhdGg6IHN0cmluZyk6IFByb21pc2U8U2VyaWFsaXphYmxlSW50ZXJuYWxCdWZmZXI+IHtcbiAgICAvLyBmZXRjaCBtb2RlbCBmcm9tIHVybCBhbmQgbW92ZSB0byB3YXNtIGhlYXAuXG4gICAgcmV0dXJuIGNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIoYXdhaXQgbG9hZEZpbGUocGF0aCkpO1xuICB9XG5cbiAgYXN5bmMgbG9hZE1vZGVsKHBhdGhPckJ1ZmZlcjogc3RyaW5nfFVpbnQ4QXJyYXksIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgVFJBQ0VfRlVOQ19CRUdJTigpO1xuICAgIGxldCBtb2RlbDogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlU2Vzc2lvbj5bMF07XG5cbiAgICBpZiAodHlwZW9mIHBhdGhPckJ1ZmZlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpIHtcbiAgICAgICAgLy8gbm9kZVxuICAgICAgICBtb2RlbCA9IGF3YWl0IGxvYWRGaWxlKHBhdGhPckJ1ZmZlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBicm93c2VyXG4gICAgICAgIC8vIGZldGNoIG1vZGVsIGFuZCBjb3B5IHRvIHdhc20gaGVhcC5cbiAgICAgICAgbW9kZWwgPSBhd2FpdCB0aGlzLmZldGNoTW9kZWxBbmRDb3B5VG9XYXNtTWVtb3J5KHBhdGhPckJ1ZmZlcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsID0gcGF0aE9yQnVmZmVyO1xuICAgIH1cblxuICAgIFt0aGlzLnNlc3Npb25JZCwgdGhpcy5pbnB1dE5hbWVzLCB0aGlzLm91dHB1dE5hbWVzXSA9IGF3YWl0IGNyZWF0ZVNlc3Npb24obW9kZWwsIG9wdGlvbnMpO1xuICAgIFRSQUNFX0ZVTkNfRU5EKCk7XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiByZWxlYXNlU2Vzc2lvbih0aGlzLnNlc3Npb25JZCk7XG4gIH1cblxuICBhc3luYyBydW4oZmVlZHM6IFNlc3Npb25IYW5kbGVyLkZlZWRzVHlwZSwgZmV0Y2hlczogU2Vzc2lvbkhhbmRsZXIuRmV0Y2hlc1R5cGUsIG9wdGlvbnM6IEluZmVyZW5jZVNlc3Npb24uUnVuT3B0aW9ucyk6XG4gICAgICBQcm9taXNlPFNlc3Npb25IYW5kbGVyLlJldHVyblR5cGU+IHtcbiAgICBUUkFDRV9GVU5DX0JFR0lOKCk7XG4gICAgY29uc3QgaW5wdXRBcnJheTogVGVuc29yW10gPSBbXTtcbiAgICBjb25zdCBpbnB1dEluZGljZXM6IG51bWJlcltdID0gW107XG4gICAgT2JqZWN0LmVudHJpZXMoZmVlZHMpLmZvckVhY2goa3ZwID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBrdnBbMF07XG4gICAgICBjb25zdCB0ZW5zb3IgPSBrdnBbMV07XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5wdXROYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaW5wdXQgJyR7bmFtZX0nYCk7XG4gICAgICB9XG4gICAgICBpbnB1dEFycmF5LnB1c2godGVuc29yKTtcbiAgICAgIGlucHV0SW5kaWNlcy5wdXNoKGluZGV4KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dEFycmF5OiBBcnJheTxUZW5zb3J8bnVsbD4gPSBbXTtcbiAgICBjb25zdCBvdXRwdXRJbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKGZldGNoZXMpLmZvckVhY2goa3ZwID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBrdnBbMF07XG4gICAgICBjb25zdCB0ZW5zb3IgPSBrdnBbMV07XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMub3V0cHV0TmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG91dHB1dCAnJHtuYW1lfSdgKTtcbiAgICAgIH1cbiAgICAgIG91dHB1dEFycmF5LnB1c2godGVuc29yKTtcbiAgICAgIG91dHB1dEluZGljZXMucHVzaChpbmRleCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dHMgPVxuICAgICAgICBpbnB1dEFycmF5Lm1hcCgodCwgaSkgPT4gZW5jb2RlVGVuc29yTWV0YWRhdGEodCwgKCkgPT4gYGlucHV0IFwiJHt0aGlzLmlucHV0TmFtZXNbaW5wdXRJbmRpY2VzW2ldXX1cImApKTtcbiAgICBjb25zdCBvdXRwdXRzID0gb3V0cHV0QXJyYXkubWFwKFxuICAgICAgICAodCwgaSkgPT4gdCA/IGVuY29kZVRlbnNvck1ldGFkYXRhKHQsICgpID0+IGBvdXRwdXQgXCIke3RoaXMub3V0cHV0TmFtZXNbb3V0cHV0SW5kaWNlc1tpXV19XCJgKSA6IG51bGwpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJ1bih0aGlzLnNlc3Npb25JZCwgaW5wdXRJbmRpY2VzLCBpbnB1dHMsIG91dHB1dEluZGljZXMsIG91dHB1dHMsIG9wdGlvbnMpO1xuXG4gICAgY29uc3QgcmVzdWx0TWFwOiBTZXNzaW9uSGFuZGxlci5SZXR1cm5UeXBlID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRNYXBbdGhpcy5vdXRwdXROYW1lc1tvdXRwdXRJbmRpY2VzW2ldXV0gPSBvdXRwdXRBcnJheVtpXSA/PyBkZWNvZGVUZW5zb3JNZXRhZGF0YShyZXN1bHRzW2ldKTtcbiAgICB9XG4gICAgVFJBQ0VfRlVOQ19FTkQoKTtcbiAgICByZXR1cm4gcmVzdWx0TWFwO1xuICB9XG5cbiAgc3RhcnRQcm9maWxpbmcoKTogdm9pZCB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IHByb2ZpbGluZ1xuICB9XG5cbiAgZW5kUHJvZmlsaW5nKCk6IHZvaWQge1xuICAgIHZvaWQgZW5kUHJvZmlsaW5nKHRoaXMuc2Vzc2lvbklkKTtcbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge2NwdXN9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtCYWNrZW5kLCBlbnYsIEluZmVyZW5jZVNlc3Npb24sIEluZmVyZW5jZVNlc3Npb25IYW5kbGVyfSBmcm9tICdvbm54cnVudGltZS1jb21tb24nO1xuXG5pbXBvcnQge2luaXRpYWxpemVPcnRFcCwgaW5pdGlhbGl6ZVdlYkFzc2VtYmx5QW5kT3J0UnVudGltZX0gZnJvbSAnLi93YXNtL3Byb3h5LXdyYXBwZXInO1xuaW1wb3J0IHtPbm54cnVudGltZVdlYkFzc2VtYmx5U2Vzc2lvbkhhbmRsZXJ9IGZyb20gJy4vd2FzbS9zZXNzaW9uLWhhbmRsZXItaW5mZXJlbmNlJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFsbCBmbGFncyBmb3IgV2ViQXNzZW1ibHkuXG4gKlxuICogVGhvc2UgZmxhZ3MgYXJlIGFjY2Vzc2libGUgZnJvbSBgb3J0LmVudi53YXNtYC4gVXNlcnMgYXJlIGFsbG93IHRvIHNldCB0aG9zZSBmbGFncyBiZWZvcmUgdGhlIGZpcnN0IGluZmVyZW5jZSBzZXNzaW9uXG4gKiBiZWluZyBjcmVhdGVkLCB0byBvdmVycmlkZSBkZWZhdWx0IHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZUZsYWdzID0gKCk6IHZvaWQgPT4ge1xuICBpZiAodHlwZW9mIGVudi53YXNtLmluaXRUaW1lb3V0ICE9PSAnbnVtYmVyJyB8fCBlbnYud2FzbS5pbml0VGltZW91dCA8IDApIHtcbiAgICBlbnYud2FzbS5pbml0VGltZW91dCA9IDA7XG4gIH1cblxuICBpZiAodHlwZW9mIGVudi53YXNtLnNpbWQgIT09ICdib29sZWFuJykge1xuICAgIGVudi53YXNtLnNpbWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlbnYud2FzbS5wcm94eSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgZW52Lndhc20ucHJveHkgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZW52Lndhc20udHJhY2UgIT09ICdib29sZWFuJykge1xuICAgIGVudi53YXNtLnRyYWNlID0gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGVudi53YXNtLm51bVRocmVhZHMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGVudi53YXNtLm51bVRocmVhZHMpIHx8IGVudi53YXNtLm51bVRocmVhZHMgPD0gMCkge1xuICAgIC8vIFdlYjogd2hlbiBjcm9zc09yaWdpbklzb2xhdGVkIGlzIGZhbHNlLCBTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYXZhaWxhYmxlIHNvIFdlYkFzc2VtYmx5IHRocmVhZHMgd2lsbCBub3Qgd29yay5cbiAgICAvLyBOb2RlLmpzOiBvbm54cnVudGltZS13ZWIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS10aHJlYWRzIGluIE5vZGUuanMuXG4gICAgaWYgKCh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgIXNlbGYuY3Jvc3NPcmlnaW5Jc29sYXRlZCkgfHxcbiAgICAgICAgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSkpIHtcbiAgICAgIGVudi53YXNtLm51bVRocmVhZHMgPSAxO1xuICAgIH1cbiAgICBjb25zdCBudW1DcHVMb2dpY2FsQ29yZXMgPSB0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJyA/IGNwdXMoKS5sZW5ndGggOiBuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTtcbiAgICBlbnYud2FzbS5udW1UaHJlYWRzID0gTWF0aC5taW4oNCwgTWF0aC5jZWlsKChudW1DcHVMb2dpY2FsQ29yZXMgfHwgMSkgLyAyKSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjbGFzcyBPbm54cnVudGltZVdlYkFzc2VtYmx5QmFja2VuZCBpbXBsZW1lbnRzIEJhY2tlbmQge1xuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgV2ViQXNzZW1ibHkgYmFja2VuZC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGVhY2ggYmFja2VuZCBuYW1lLiBJdCB3aWxsIGJlIGNhbGxlZCB0aGUgZmlyc3QgdGltZSB3aGVuXG4gICAqIGBvcnQuSW5mZXJlbmNlU2Vzc2lvbi5jcmVhdGUoKWAgaXMgY2FsbGVkIHdpdGggYSByZWdpc3RlcmVkIGJhY2tlbmQgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIGJhY2tlbmROYW1lIC0gdGhlIHJlZ2lzdGVyZWQgYmFja2VuZCBuYW1lLlxuICAgKi9cbiAgYXN5bmMgaW5pdChiYWNrZW5kTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gcG9wdWxhdGUgd2FzbSBmbGFnc1xuICAgIGluaXRpYWxpemVGbGFncygpO1xuXG4gICAgLy8gaW5pdCB3YXNtXG4gICAgYXdhaXQgaW5pdGlhbGl6ZVdlYkFzc2VtYmx5QW5kT3J0UnVudGltZSgpO1xuXG4gICAgLy8gcGVyZm9ybWUgRVAgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb25cbiAgICBhd2FpdCBpbml0aWFsaXplT3J0RXAoYmFja2VuZE5hbWUpO1xuICB9XG4gIGNyZWF0ZUluZmVyZW5jZVNlc3Npb25IYW5kbGVyKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcj47XG4gIGNyZWF0ZUluZmVyZW5jZVNlc3Npb25IYW5kbGVyKGJ1ZmZlcjogVWludDhBcnJheSwgb3B0aW9ucz86IEluZmVyZW5jZVNlc3Npb24uU2Vzc2lvbk9wdGlvbnMpOlxuICAgICAgUHJvbWlzZTxJbmZlcmVuY2VTZXNzaW9uSGFuZGxlcj47XG4gIGFzeW5jIGNyZWF0ZUluZmVyZW5jZVNlc3Npb25IYW5kbGVyKHBhdGhPckJ1ZmZlcjogc3RyaW5nfFVpbnQ4QXJyYXksIG9wdGlvbnM/OiBJbmZlcmVuY2VTZXNzaW9uLlNlc3Npb25PcHRpb25zKTpcbiAgICAgIFByb21pc2U8SW5mZXJlbmNlU2Vzc2lvbkhhbmRsZXI+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IE9ubnhydW50aW1lV2ViQXNzZW1ibHlTZXNzaW9uSGFuZGxlcigpO1xuICAgIGF3YWl0IGhhbmRsZXIubG9hZE1vZGVsKHBhdGhPckJ1ZmZlciwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShoYW5kbGVyKTtcbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQge09ubnhydW50aW1lV2ViQXNzZW1ibHlCYWNrZW5kfSBmcm9tICcuL2JhY2tlbmQtd2FzbSc7XG5leHBvcnQgY29uc3Qgd2FzbUJhY2tlbmQgPSBuZXcgT25ueHJ1bnRpbWVXZWJBc3NlbWJseUJhY2tlbmQoKTtcbiIsICIvLyBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuLy8gV2UgdXNlIFwicmVxdWlyZVwiIGluc3RlYWQgb2YgXCJpbXBvcnRcIiBoZXJlIGJlY2F1c2UgaW1wb3J0IHN0YXRlbWVudCBtdXN0IGJlIHB1dCBpbiB0b3AgbGV2ZWwuIE91ciBjdXJyZW50IGNvZGUgZG9lc1xuLy8gbm90IGFsbG93IGJ1bmRsZXIgdG8gdHJlZS1zaGFraW5nIGNvZGUgYXMgZXhwZWN0ZWQgYmVjYXVzZSBzb21lIGNvZGVzIGFyZSB0cmVhdGVkIGFzIGhhdmluZyBzaWRlIGVmZmVjdHMuXG4vLyBTbyB3ZSBpbXBvcnQgY29kZSBpbnNpZGUgdGhlIGlmLWNsYXVzZSB0byBhbGxvdyBidW5kbGVyIHJlbW92ZSB0aGUgY29kZSBzYWZlbHkuXG5cbmV4cG9ydCAqIGZyb20gJ29ubnhydW50aW1lLWNvbW1vbic7XG5pbXBvcnQgKiBhcyBvcnQgZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcbmV4cG9ydCBkZWZhdWx0IG9ydDtcblxuaW1wb3J0IHtyZWdpc3RlckJhY2tlbmQsIGVudn0gZnJvbSAnb25ueHJ1bnRpbWUtY29tbW9uJztcbmltcG9ydCB7dmVyc2lvbn0gZnJvbSAnLi92ZXJzaW9uJztcblxuaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0VCR0wpIHtcbiAgY29uc3Qgb25ueGpzQmFja2VuZCA9IHJlcXVpcmUoJy4vYmFja2VuZC1vbm54anMnKS5vbm54anNCYWNrZW5kO1xuICByZWdpc3RlckJhY2tlbmQoJ3dlYmdsJywgb25ueGpzQmFja2VuZCwgLTEwKTtcbn1cblxuaWYgKCFCVUlMRF9ERUZTLkRJU0FCTEVfV0FTTSkge1xuICBjb25zdCB3YXNtQmFja2VuZCA9IEJVSUxEX0RFRlMuRElTQUJMRV9UUkFJTklORyA/IHJlcXVpcmUoJy4vYmFja2VuZC13YXNtLWluZmVyZW5jZScpLndhc21CYWNrZW5kIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2JhY2tlbmQtd2FzbS10cmFpbmluZycpLndhc21CYWNrZW5kO1xuICBpZiAoIUJVSUxEX0RFRlMuRElTQUJMRV9XRUJHUFUpIHtcbiAgICByZWdpc3RlckJhY2tlbmQoJ3dlYmdwdScsIHdhc21CYWNrZW5kLCA1KTtcbiAgICByZWdpc3RlckJhY2tlbmQoJ3dlYm5uJywgd2FzbUJhY2tlbmQsIDUpO1xuICB9XG4gIHJlZ2lzdGVyQmFja2VuZCgnY3B1Jywgd2FzbUJhY2tlbmQsIDEwKTtcbiAgcmVnaXN0ZXJCYWNrZW5kKCd3YXNtJywgd2FzbUJhY2tlbmQsIDEwKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGVudi52ZXJzaW9ucywgJ3dlYicsIHt2YWx1ZTogdmVyc2lvbiwgZW51bWVyYWJsZTogdHJ1ZX0pO1xuIiwgIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG4vLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IC9qcy9zY3JpcHRzL3VwZGF0ZS12ZXJzaW9uLnRzXG4vLyBEbyBub3QgbW9kaWZ5IGZpbGUgY29udGVudCBtYW51YWxseS5cblxu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QUFFLFNBQVEsT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsT0FBRztBQUFDLGNBQUUsR0FBRyxTQUFRLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsT0FBRztBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsT0FBRztBQUFDLGNBQUUsR0FBRyxjQUFhLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsT0FDM2Y7QUFBQyxjQUFFLEdBQUcsV0FBVSxHQUFFLE1BQU07QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLENBQUMsR0FBRSxHQUFFLE1BQUk7QUFBQyxjQUFFLEdBQUcsZUFBYyxHQUFFLEVBQUMsT0FBTSxHQUFFLE1BQUssRUFBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFNBQVEsR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFNBQVEsR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFNBQVEsR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQ3RmLFNBQVEsT0FBRztBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsRUFBQyxLQUFJLEdBQUUsS0FBSSxFQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLE9BQUc7QUFBQyxjQUFFLEdBQUcsUUFBTyxHQUFFLE1BQU07QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLENBQUMsR0FBRSxNQUFJO0FBQUMsY0FBRSxHQUFHLE9BQU0sR0FBRSxFQUFDLE9BQU0sRUFBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxDQUFDLEdBQUUsTUFBSTtBQUFDLGNBQUUsR0FBRyxhQUFZLEdBQUUsRUFBQyxPQUFNLEVBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsQ0FBQyxHQUFFLE1BQUk7QUFBQyxjQUFFLEdBQUcsbUJBQWtCLEdBQUUsRUFBQyxPQUFNLEVBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsQ0FBQyxHQUFFLE1BQUk7QUFBQyxjQUFFLEdBQUcsUUFBTyxHQUFFLEVBQUMsSUFBRyxFQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLE9BQUc7QUFBQyxjQUFFLEdBQUcsT0FBTSxHQUFFLE1BQU07QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLE9BQUc7QUFBQyxjQUFFLEdBQUcsT0FBTSxHQUFFLE1BQU07QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLE9BQUc7QUFBQyxjQUFFLEdBQUcsT0FBTSxHQUFFLE1BQU07QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLE9BQUc7QUFBQyxjQUFFLEdBQUcsT0FBTSxHQUFFLE1BQU07QUFBQSxVQUFDO0FBQUEsVUFDcmYsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLE9BQU0sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFNBQVEsR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLFdBQVUsR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxPQUFHO0FBQUMsY0FBRSxHQUFHLGtCQUFpQixHQUFFLE1BQU07QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLE9BQUc7QUFBQyxjQUFFLEdBQUcsUUFBTyxHQUFFLE1BQU07QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLE9BQUc7QUFBQyxjQUFFLEdBQUcsZUFBYyxHQUFFLE1BQU07QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxNQUFJO0FBQUMsY0FBRSxHQUFHLGNBQWEsR0FBRSxFQUFDLFVBQVMsQ0FBQyxDQUFDLEdBQUUsbUJBQWtCLENBQUMsQ0FBQyxHQUFFLE1BQUssSUFBRSxNQUFNLEtBQUssRUFBRSxTQUFTLE1BQUksR0FBRSxNQUFJLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsTUFBSTtBQUFDLGNBQUUsR0FBRyxhQUFZLEdBQUUsRUFBQyxVQUFTLENBQUMsQ0FBQyxHQUFFLG1CQUFrQixDQUFDLENBQUMsR0FBRSxNQUFLLElBQUUsTUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFJLEdBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE1BQ3BmO0FBQUMsY0FBRSxHQUFHLGFBQVksR0FBRSxFQUFDLFVBQVMsQ0FBQyxDQUFDLEdBQUUsbUJBQWtCLENBQUMsQ0FBQyxHQUFFLE1BQUssSUFBRSxNQUFNLEtBQUssRUFBRSxTQUFTLE1BQUksR0FBRSxNQUFJLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsTUFBSTtBQUFDLGNBQUUsR0FBRyxjQUFhLEdBQUUsRUFBQyxVQUFTLENBQUMsQ0FBQyxHQUFFLG1CQUFrQixDQUFDLENBQUMsR0FBRSxNQUFLLElBQUUsTUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFJLEdBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQyxjQUFFLEdBQUcsYUFBWSxHQUFFLEVBQUMsVUFBUyxDQUFDLENBQUMsR0FBRSxtQkFBa0IsQ0FBQyxDQUFDLEdBQUUsTUFBSyxJQUFFLE1BQU0sS0FBSyxFQUFFLFNBQVMsTUFBSSxHQUFFLE1BQUksQ0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxNQUFJO0FBQUMsY0FBRSxHQUFHLFlBQVcsR0FBRSxFQUFDLFVBQVMsQ0FBQyxDQUFDLEdBQUUsbUJBQWtCLENBQUMsQ0FBQyxHQUFFLE1BQUssSUFBRSxNQUFNLEtBQUssRUFBRSxTQUFTLE1BQUksR0FBRSxNQUFJLENBQUMsQ0FBQyxJQUFFLENBQUMsRUFBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsU0FBUSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsTUFDcGY7QUFBQyxjQUFFLEdBQUcsWUFBVyxHQUFFLEVBQUMsVUFBUyxDQUFDLENBQUMsR0FBRSxtQkFBa0IsQ0FBQyxDQUFDLEdBQUUsTUFBSyxJQUFFLE1BQU0sS0FBSyxFQUFFLFNBQVMsTUFBSSxHQUFFLE1BQUksQ0FBQyxDQUFDLElBQUUsQ0FBQyxFQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxTQUFRLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxNQUFJO0FBQUMsY0FBRSxHQUFHLGdCQUFlLEdBQUUsRUFBQyxVQUFTLENBQUMsQ0FBQyxHQUFFLG1CQUFrQixDQUFDLENBQUMsR0FBRSxNQUFLLElBQUUsTUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFJLEdBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQyxjQUFFLEdBQUcsbUJBQWtCLEdBQUUsRUFBQyxVQUFTLENBQUMsQ0FBQyxHQUFFLG1CQUFrQixDQUFDLENBQUMsR0FBRSxNQUFLLElBQUUsTUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFJLEdBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLFNBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQyxjQUFFLEdBQUcsbUJBQWtCLEdBQUUsRUFBQyxVQUFTLENBQUMsQ0FBQyxHQUFF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LFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFlBQUssT0FBTTtBQUFBLFVBQUk7QUFBRSxtQkFBUSxLQUFLO0FBQUUsZ0JBQUUsRUFBRSxRQUFRLElBQUksT0FBTyxHQUFFLEdBQUcsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFFLGNBQUksSUFBRSwyREFBMkQsTUFBTSxHQUFHLEdBQUUsSUFBRSx3RkFBd0YsTUFBTSxHQUFHO0FBQUUsY0FBRSxFQUFDLE1BQUssT0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsR0FBRSxDQUFDLEdBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUUsTUFBSyxPQUN6ZixFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsR0FBRSxDQUFDLEdBQUUsTUFBSyxPQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUUsTUFBSyxPQUFHLEdBQUcsRUFBRSxLQUFHLFFBQU0sTUFBSSxHQUFFLENBQUMsR0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQyxHQUFFLE1BQUssT0FBRyxFQUFFLEVBQUUsSUFBRyxHQUFFLEdBQUcsR0FBRSxNQUFLLE9BQUcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFFLE1BQUssR0FBRSxNQUFLLE9BQUcsRUFBRSxFQUFFLElBQUcsQ0FBQyxHQUFFLE1BQUssT0FBRztBQUFDLGdCQUFFLEVBQUU7QUFBRyxpQkFBRyxJQUFFLElBQUUsS0FBRyxLQUFHLE1BQUksS0FBRztBQUFJLG1CQUFPLEVBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxHQUFFLE1BQUssT0FBRztBQUFDLHFCQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsS0FBRyxFQUFFLEtBQUcsR0FBRSxNQUFJLEVBQUUsRUFB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Q0FBQztBQUFFLFVBQUUsc0JBQW9CLE1BQUksRUFBRSxTQUFPLElBQUUsSUFBRSxHQUFHO0FBQzljLFlBQUksS0FBRztBQUFBLFVBQUMsSUFBRyxTQUFTLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQU8sR0FBRyxZQUFTO0FBQUMsb0JBQU0sRUFBRSxHQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsWUFBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxTQUFTLEdBQUU7QUFBQyxnQkFBRSxJQUFJLEdBQUcsTUFBSSxDQUFDO0FBQUUsaUJBQUcsRUFBRSxFQUFFLEtBQUcsT0FBSyxDQUFDLE1BQUksRUFBRSxFQUFFLEtBQUcsT0FBSyxDQUFDLElBQUUsR0FBRTtBQUFNLGNBQUUsRUFBRSxLQUFHLE9BQUssQ0FBQyxJQUFFO0FBQUUsZUFBRyxLQUFLLENBQUM7QUFBRSxlQUFHLEVBQUUsRUFBRTtBQUFFLGdCQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUcsTUFBSSxNQUFJLENBQUMsQ0FBQztBQUFFLGtCQUFFLEVBQUUsRUFBRSxPQUFLLE1BQUksQ0FBQztBQUFBLGlCQUFNO0FBQUMsa0JBQUksSUFBRSxFQUFFLEVBQUUsS0FBRyxPQUFLLE1BQUksQ0FBQztBQUFFLGtCQUFFLE1BQUksSUFBRSxJQUFFLEVBQUU7QUFBQSxZQUFFO0FBQUMsbUJBQU87QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFLE1BQUk7QUFBQyxjQUFFLEdBQUUsQ0FBQztBQUFFLGdCQUFJLElBQUUsR0FBRyxJQUFJO0FBQUUsZUFBRyxFQUFFLEVBQUU7QUFBRSxnQkFBRTtBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsV0FBVTtBQUFDLG1CQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsR0FBRSxTQUFTLEdBQUU7QUFBQyxtQkFBTyxHQUFHLENBQUMsTUFBSSxDQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFLFNBQVMsR0FBRSxHQUFFO0FBQUMsbUJBQU8sR0FBRyxDQUFDLE1BQUksR0FBRSxNQUFJLENBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFPLEdBQUcsQ0FBQyxNQUFJLEdBQUUsTUFBSSxHQUFFLE1BQUksQ0FBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxNQUFJO0FBQUMsZ0JBQUksSUFBRSxHQUFHLElBQUk7QUFBRSxpQkFBRyxHQUFHLHVCQUF1QjtBQUM3Z0IsZ0JBQUksSUFBRSxFQUFFO0FBQUcsaUJBQUcsRUFBRSxFQUFFLEtBQUcsT0FBSyxDQUFDLE1BQUksR0FBRyxLQUFLLENBQUMsR0FBRSxFQUFFLEVBQUUsS0FBRyxPQUFLLENBQUMsSUFBRSxHQUFFLEVBQUUsRUFBRSxLQUFHLE9BQUssQ0FBQyxJQUFFLEdBQUU7QUFBTSxnQkFBRTtBQUFFLGtCQUFNO0FBQUEsVUFBRTtBQUFBLFVBQUUsR0FBRSxTQUFTLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQUs7QUFBRSxnQkFBSSxJQUFFLElBQUksR0FBRyxDQUFDO0FBQUUsY0FBRSxFQUFFLEtBQUcsT0FBSyxNQUFJLENBQUMsSUFBRTtBQUFFLGNBQUUsRUFBRSxLQUFHLE1BQUksTUFBSSxDQUFDLElBQUUsTUFBSTtBQUFFLGNBQUUsRUFBRSxLQUFHLE1BQUksTUFBSSxDQUFDLElBQUUsTUFBSTtBQUFFLGdCQUFFO0FBQUU7QUFBSyxrQkFBTTtBQUFBLFVBQUU7QUFBQSxVQUFFLElBQUcsTUFBSTtBQUFBLFVBQUcsR0FBRSxTQUFTLEdBQUU7QUFBQyxrQkFBSSxNQUFJO0FBQUUsa0JBQU07QUFBQSxVQUFFO0FBQUEsVUFBRSxJQUFHLFdBQVU7QUFBQyxtQkFBTztBQUFBLFVBQUM7QUFBQSxVQUFFLElBQUcsV0FBVTtBQUFBLFVBQUM7QUFBQSxVQUFFLElBQUcsV0FBVTtBQUFBLFVBQUM7QUFBQSxVQUFFLElBQUcsV0FBVTtBQUFBLFVBQUM7QUFBQSxVQUFFLElBQUcsV0FBVTtBQUFDLG1CQUFPO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxXQUFVO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQ3pmLEdBQUUsR0FBRTtBQUFDLGdCQUFFLEVBQUUsTUFBSSxDQUFDO0FBQUUsY0FBRSxNQUFJLEdBQUUsRUFBQyxNQUFLLEdBQUUsY0FBYSxPQUFHLEdBQUUsWUFBVyxTQUFTLEdBQUUsR0FBRTtBQUFDLGtCQUFHLFlBQVUsT0FBTyxLQUFHLFlBQVUsT0FBTztBQUFFLHNCQUFNLFNBQU8sSUFBRSxJQUFFLFVBQVEsSUFBRSxPQUFPLEdBQUUsSUFBRSxhQUFXLEtBQUcsWUFBVSxLQUFHLGVBQWEsSUFBRSxFQUFFLFNBQVMsSUFBRSxLQUFHLElBQUcsSUFBSSxVQUFVLG1CQUFtQixDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7QUFBRSwwQkFBVSxPQUFPLE1BQUksSUFBRSxPQUFPLENBQUM7QUFBRyxxQkFBTztBQUFBLFlBQUMsR0FBRSxnQkFBZSxHQUFFLHNCQUFxQixHQUFHLEdBQUUsTUFBSSxHQUFFLE1BQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxHQUFFLElBQUcsS0FBSSxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxnQkFBRSxFQUFFLE1BQUksQ0FBQztBQUFFLGNBQUUsTUFBSSxHQUFFLEVBQUMsTUFBSyxHQUFFLGNBQWEsU0FBUyxHQUFFO0FBQUMscUJBQU0sQ0FBQyxDQUFDO0FBQUEsWUFBQyxHQUFFLFlBQVcsU0FBUyxHQUNuZixHQUFFO0FBQUMscUJBQU8sSUFBRSxJQUFFO0FBQUEsWUFBQyxHQUFFLGdCQUFlLEdBQUUsc0JBQXFCLFNBQVMsR0FBRTtBQUFDLHFCQUFPLEtBQUssYUFBYSxFQUFFLE1BQUksQ0FBQyxDQUFDO0FBQUEsWUFBQyxHQUFFLElBQUcsS0FBSSxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUU7QUFBQyxtQkFBTyxFQUFFLE1BQUksR0FBRSxFQUFFO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUUsR0FBRSxHQUFFO0FBQUMsZ0JBQUUsRUFBRSxNQUFJLENBQUM7QUFBRSxjQUFFLE1BQUksR0FBRSxFQUFDLE1BQUssR0FBRSxjQUFhLE9BQUcsR0FBRSxZQUFXLENBQUMsR0FBRSxNQUFJLEdBQUUsZ0JBQWUsR0FBRSxzQkFBcUIsR0FBRyxHQUFFLE1BQUksQ0FBQyxHQUFFLElBQUcsS0FBSSxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxnQkFBRSxFQUFFLE1BQUksQ0FBQztBQUFFLG1CQUFLLE1BQUksSUFBRTtBQUFZLGdCQUFFLE9BQUc7QUFBRSxnQkFBRyxNQUFJLEdBQUU7QUFBQyxrQkFBSSxJQUFFLEtBQUcsSUFBRTtBQUFFLGtCQUFFLE9BQUcsS0FBRyxNQUFJO0FBQUEsWUFBQztBQUFDLGdCQUFJLElBQUUsRUFBRSxTQUFTLFVBQVUsSUFBRSxTQUFTLEdBQUUsR0FBRTtBQUFDLHFCQUFPLE1BQUk7QUFBQSxZQUFDLElBQUUsU0FBUyxHQUFFLEdBQUU7QUFBQyxxQkFBTztBQUFBLFlBQUM7QUFBRSxjQUFFLEdBQUU7QUFBQSxjQUFDLE1BQUs7QUFBQSxjQUNwZixjQUFhO0FBQUEsY0FBRSxZQUFXO0FBQUEsY0FBRSxnQkFBZTtBQUFBLGNBQUUsc0JBQXFCLEdBQUcsR0FBRSxHQUFFLE1BQUksQ0FBQztBQUFBLGNBQUUsSUFBRztBQUFBLFlBQUksQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLHFCQUFTLEVBQUUsR0FBRTtBQUFDLHFCQUFPLElBQUksRUFBRSxFQUFFLFFBQU8sRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsRUFBRSxNQUFJLE1BQUksQ0FBQyxDQUFDO0FBQUEsWUFBQztBQUFDLGdCQUFJLElBQUUsQ0FBQyxXQUFVLFlBQVcsWUFBVyxhQUFZLFlBQVcsYUFBWSxjQUFhLGNBQWEsZUFBYyxjQUFjLEVBQUUsQ0FBQztBQUFFLGdCQUFFLEVBQUUsTUFBSSxDQUFDO0FBQUUsY0FBRSxNQUFJLEdBQUUsRUFBQyxNQUFLLEdBQUUsY0FBYSxHQUFFLGdCQUFlLEdBQUUsc0JBQXFCLEVBQUMsR0FBRSxFQUFDLElBQUcsS0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUUsR0FBRTtBQUFDLGdCQUFFLEVBQUUsTUFBSSxDQUFDO0FBQUUsZ0JBQUksSUFBRSxrQkFBZ0I7QUFBRSxjQUFFLE1BQUksR0FBRSxFQUFDLE1BQUssR0FBRSxjQUFhLFNBQVMsR0FBRTtBQUFDLGtCQUFJLElBQUUsRUFBRSxNQUNyZixNQUFJLENBQUMsR0FBRSxJQUFFLElBQUU7QUFBRSxrQkFBRztBQUFFLHlCQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsS0FBRyxHQUFFLEVBQUUsR0FBRTtBQUFDLHNCQUFJLElBQUUsSUFBRTtBQUFFLHNCQUFHLEtBQUcsS0FBRyxLQUFHLEVBQUUsTUFBSSxDQUFDLEdBQUU7QUFBQyx3QkFBRSxFQUFFLEdBQUUsSUFBRSxDQUFDO0FBQUUsd0JBQUcsV0FBUztBQUFFLDBCQUFJLElBQUU7QUFBQTtBQUFPLDJCQUFHLE9BQU8sYUFBYSxDQUFDLEdBQUUsS0FBRztBQUFFLHdCQUFFLElBQUU7QUFBQSxrQkFBQztBQUFBLGdCQUFDO0FBQUEsbUJBQUs7QUFBQyxvQkFBRSxNQUFNLENBQUM7QUFBRSxxQkFBSSxJQUFFLEdBQUUsSUFBRSxHQUFFLEVBQUU7QUFBRSxvQkFBRSxDQUFDLElBQUUsT0FBTyxhQUFhLEVBQUUsSUFBRSxNQUFJLENBQUMsQ0FBQztBQUFFLG9CQUFFLEVBQUUsS0FBSyxFQUFFO0FBQUEsY0FBQztBQUFDLGdCQUFFLENBQUM7QUFBRSxxQkFBTztBQUFBLFlBQUMsR0FBRSxZQUFXLFNBQVMsR0FBRSxHQUFFO0FBQUMsMkJBQWEsZ0JBQWMsSUFBRSxJQUFJLFdBQVcsQ0FBQztBQUFHLGtCQUFJLElBQUUsWUFBVSxPQUFPO0FBQUUsa0JBQUcsRUFBRSxLQUFHLGFBQWEsY0FBWSxhQUFhLHFCQUFtQixhQUFhO0FBQVcsc0JBQU0sSUFBSSxFQUFFLHVDQUF1QztBQUFFLGtCQUFJLElBQUUsS0FBRyxJQUFFLEdBQUcsQ0FBQyxJQUN4ZixFQUFFO0FBQU8sa0JBQUksSUFBRSxHQUFHLElBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxJQUFFO0FBQUUsZ0JBQUUsTUFBSSxNQUFJLENBQUMsSUFBRTtBQUFFLGtCQUFHLEtBQUc7QUFBRSxrQkFBRSxHQUFFLEdBQUUsR0FBRSxJQUFFLENBQUM7QUFBQSx1QkFBVTtBQUFFLHFCQUFJLElBQUUsR0FBRSxJQUFFLEdBQUUsRUFBRSxHQUFFO0FBQUMsc0JBQUksSUFBRSxFQUFFLFdBQVcsQ0FBQztBQUFFLHNCQUFHLE1BQUk7QUFBRSwwQkFBTSxFQUFFLENBQUMsR0FBRSxJQUFJLEVBQUUsd0RBQXdEO0FBQUUsb0JBQUUsSUFBRSxNQUFJLENBQUMsSUFBRTtBQUFBLGdCQUFDO0FBQUE7QUFBTSxxQkFBSSxJQUFFLEdBQUUsSUFBRSxHQUFFLEVBQUU7QUFBRSxvQkFBRSxJQUFFLE1BQUksQ0FBQyxJQUFFLEVBQUUsQ0FBQztBQUFFLHVCQUFPLEtBQUcsRUFBRSxLQUFLLEdBQUUsQ0FBQztBQUFFLHFCQUFPO0FBQUEsWUFBQyxHQUFFLGdCQUFlLEdBQUUsc0JBQXFCLElBQUcsR0FBRyxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFBLFlBQUMsRUFBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQUs7QUFBRSxtQkFBSztBQUFFLGdCQUFFLEVBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksR0FBRTtBQUFDLGtCQUFJLElBQUU7QUFBRyxrQkFBSSxJQUFFO0FBQUcsa0JBQUksSUFBRTtBQUFHLGtCQUFJLElBQUUsT0FBRyxHQUFHLE1BQUksTUFBSSxDQUFDO0FBQUEsWUFBQztBQUFNLG9CQUFJLE1BQUksSUFBRSxJQUFHLElBQUUsSUFBRyxJQUFFLElBQUcsSUFBRSxPQUFHLEVBQUUsTUFBSSxNQUFJLENBQUM7QUFBRyxjQUFFLE1BQUksR0FBRTtBQUFBLGNBQUMsTUFBSztBQUFBLGNBQ25mLGNBQWEsT0FBRztBQUFDLHlCQUFRLElBQUUsRUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLEdBQUUsSUFBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLEtBQUcsR0FBRSxFQUFFLEdBQUU7QUFBQyxzQkFBSSxJQUFFLElBQUUsSUFBRSxJQUFFO0FBQUUsc0JBQUcsS0FBRyxLQUFHLEtBQUcsRUFBRSxDQUFDO0FBQUUsd0JBQUUsRUFBRSxHQUFFLElBQUUsQ0FBQyxHQUFFLFdBQVMsSUFBRSxJQUFFLEtBQUcsS0FBRyxPQUFPLGFBQWEsQ0FBQyxHQUFFLEtBQUcsSUFBRyxJQUFFLElBQUU7QUFBQSxnQkFBQztBQUFDLGtCQUFFLENBQUM7QUFBRSx1QkFBTztBQUFBLGNBQUM7QUFBQSxjQUFFLFlBQVcsQ0FBQyxHQUFFLE1BQUk7QUFBQyxvQkFBRyxZQUFVLE9BQU87QUFBRSx3QkFBTSxJQUFJLEVBQUUsNkNBQTZDLENBQUMsRUFBRTtBQUFFLG9CQUFJLElBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxHQUFHLElBQUUsSUFBRSxDQUFDO0FBQUUsa0JBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxJQUFFO0FBQUUsa0JBQUUsR0FBRSxJQUFFLEdBQUUsSUFBRSxDQUFDO0FBQUUseUJBQU8sS0FBRyxFQUFFLEtBQUssR0FBRSxDQUFDO0FBQUUsdUJBQU87QUFBQSxjQUFDO0FBQUEsY0FBRSxnQkFBZTtBQUFBLGNBQUUsc0JBQXFCO0FBQUEsY0FBRyxHQUFHLEdBQUU7QUFBQyxrQkFBRSxDQUFDO0FBQUEsY0FBQztBQUFBLFlBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLElBQUcsU0FBUyxHQUFFLEdBQUU7QUFBQyxnQkFBRSxFQUFFLE1BQUksQ0FBQztBQUFFLGNBQUUsTUFBSSxHQUFFLEVBQUMsSUFBRyxNQUFHLE1BQUssR0FBRSxnQkFBZSxHQUFFLGNBQWEsTUFDamY7QUFBQSxZQUFDLEdBQUUsWUFBVyxNQUFJO0FBQUEsWUFBQyxFQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHLE1BQUk7QUFBQSxVQUFFLElBQUcsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxnQkFBRSxFQUFFLE1BQUksQ0FBQztBQUFFLGdCQUFFLEdBQUcsR0FBRSxXQUFXO0FBQUUsbUJBQU8sR0FBRyxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLElBQUcsU0FBUyxHQUFFO0FBQUMsbUJBQUs7QUFBRSxtQkFBTyxHQUFHLE1BQUk7QUFBQyxrQkFBRSxFQUFFLENBQUM7QUFBRSxxQkFBTyxFQUFFLEtBQUssQ0FBQztBQUFBLFlBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLElBQUcsU0FBUyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQUs7QUFBRSxtQkFBSztBQUFFLGdCQUFFLEdBQUcsTUFBSSxDQUFDO0FBQUUsZ0JBQUUsRUFBRSxNQUFJLENBQUM7QUFBRSxtQkFBTyxFQUFFLE1BQUssR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHLFNBQVMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQUs7QUFBRSxtQkFBSztBQUFFLG1CQUFLO0FBQUUsZ0JBQUUsR0FBRyxNQUFJLENBQUM7QUFBRSxnQkFBRSxFQUFFLE1BQUksQ0FBQztBQUFFLGdCQUFFLEdBQUcsQ0FBQztBQUFFLG1CQUFPLEVBQUUsR0FBRSxFQUFFLENBQUMsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHO0FBQUEsVUFBRyxJQUFHLFNBQVMsR0FBRSxHQUFFO0FBQUMsbUJBQUs7QUFBRSxnQkFBRSxFQUFFLE1BQUksQ0FBQztBQUFFLGdCQUFFLEVBQUUsQ0FBQztBQUFFLG1CQUFPLEtBQUc7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHLFNBQVMsR0FBRTtBQUFDLG1CQUFLO0FBQUUsZ0JBQUcsTUFBSTtBQUFFLHFCQUFPLEVBQUUsR0FBRyxDQUFDO0FBQUUsZ0JBQUUsR0FBRyxDQUFDO0FBQUUsbUJBQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQ3RmLEdBQUUsR0FBRTtBQUFDLGdCQUFFLEdBQUcsR0FBRSxNQUFJLENBQUM7QUFBRSxnQkFBSSxJQUFFLEVBQUUsTUFBTTtBQUFFO0FBQUksZ0JBQUksSUFBRSx5REFBd0QsSUFBRSxHQUFFLElBQUUsQ0FBQztBQUFFLGtCQUFJLEtBQUcsRUFBRSxLQUFLLEtBQUs7QUFBRSxxQkFBUSxJQUFFLENBQUMsU0FBUyxHQUFFLElBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBRSxHQUFFLElBQUUsR0FBRSxFQUFFO0FBQUUsZ0JBQUUsS0FBSyxRQUFNLENBQUMsR0FBRSxFQUFFLEtBQUssWUFBVSxDQUFDLEdBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUUsS0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLDZCQUE2QixJQUFFLE1BQUksSUFBRSxFQUFFO0FBQUEsR0FBTyxLQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQWUsaUJBQUcsY0FBYyxNQUFJLElBQUUsYUFBVyxXQUFXLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQztBQUFBO0FBQU8sY0FBRSxPQUFLLEVBQUUsS0FBSyxtQkFBbUIsR0FBRSxFQUFFLEtBQUssRUFBRSxHQUFFLEtBQUc7QUFBOEQsY0FBRSxLQUFLLElBQ3pmLE1BQU07QUFBRSxnQkFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUM7QUFBRSxnQkFBRSxpQkFBaUIsRUFBRSxJQUFJLE9BQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUk7QUFBSSxtQkFBTyxHQUFHLEdBQUcsR0FBRSxDQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHLFNBQVMsR0FBRSxHQUFFO0FBQUMsbUJBQUs7QUFBRSxnQkFBRSxFQUFFLE1BQUksQ0FBQztBQUFFLGdCQUFFLEVBQUUsQ0FBQztBQUFFLG1CQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHLFNBQVMsR0FBRTtBQUFDLG1CQUFLO0FBQUUsZ0JBQUUsTUFBSSxFQUFFLElBQUUsQ0FBQyxLQUFHO0FBQUEsVUFBRTtBQUFBLFVBQUUsSUFBRyxXQUFVO0FBQUMsbUJBQU8sRUFBRSxDQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHLFNBQVMsR0FBRTtBQUFDLGdCQUFFLEVBQUUsTUFBSSxDQUFDO0FBQUUscUJBQVEsSUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFFLElBQUUsR0FBRSxJQUFFLEVBQUUsUUFBTztBQUFJLGdCQUFFLENBQUMsSUFBRSxFQUFFLENBQUM7QUFBRSxtQkFBTyxFQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFLFNBQVMsR0FBRTtBQUFDLG1CQUFPLEVBQUUsR0FBRyxNQUFJLENBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLElBQUcsV0FBVTtBQUFDLG1CQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUU7QUFBQyxtQkFBSztBQUFFLHFCQUFRLElBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRSxVQUFRO0FBQUMsa0JBQUksSUFBRSxFQUFFLElBQUk7QUFBRSxnQkFBRSxJQUFJLEVBQUUsQ0FBQztBQUFBLFlBQUM7QUFBQyxlQUFHLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHLFNBQVMsR0FBRSxHQUFFLEdBQUU7QUFBQyxtQkFBSztBQUFFLG1CQUFLO0FBQ3BmLGdCQUFFLEVBQUUsTUFBSSxDQUFDO0FBQUUsZ0JBQUUsRUFBRSxDQUFDO0FBQUUsZ0JBQUUsRUFBRSxDQUFDO0FBQUUsY0FBRSxDQUFDLElBQUU7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHLFNBQVMsR0FBRSxHQUFFO0FBQUMsbUJBQUs7QUFBRSxnQkFBRSxHQUFHLE1BQUksR0FBRSxtQkFBbUI7QUFBRSxnQkFBRSxFQUFFLHFCQUFxQixDQUFDO0FBQUUsbUJBQU8sRUFBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUUsR0FBRTtBQUFDLGdCQUFFLG9CQUFrQixLQUFHLG1CQUFpQixJQUFFLE1BQUksT0FBTyxDQUFDO0FBQUUsbUJBQUs7QUFBRSxnQkFBRSxJQUFJLEtBQUssTUFBSSxDQUFDO0FBQUUsY0FBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsY0FBYztBQUFFLGNBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsY0FBYztBQUFFLGNBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsWUFBWTtBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsWUFBWTtBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsZUFBZSxJQUFFO0FBQUssY0FBRSxJQUFFLE9BQUssTUFBSSxDQUFDLElBQUUsRUFBRSxVQUFVO0FBQUUsY0FBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEtBQUcsRUFBRSxRQUFRLElBQUUsS0FBSztBQUFBLGNBQUksRUFBRSxlQUFlO0FBQUEsY0FDL2Y7QUFBQSxjQUFFO0FBQUEsY0FBRTtBQUFBLGNBQUU7QUFBQSxjQUFFO0FBQUEsY0FBRTtBQUFBLFlBQUMsS0FBRyxRQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUUsR0FBRTtBQUFDLGdCQUFFLG9CQUFrQixLQUFHLG1CQUFpQixJQUFFLE1BQUksT0FBTyxDQUFDO0FBQUUsbUJBQUs7QUFBRSxnQkFBRSxJQUFJLEtBQUssTUFBSSxDQUFDO0FBQUUsY0FBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGNBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGNBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsU0FBUztBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsUUFBUTtBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsU0FBUztBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsWUFBWSxJQUFFO0FBQUssY0FBRSxJQUFFLE9BQUssTUFBSSxDQUFDLElBQUUsRUFBRSxPQUFPO0FBQUUsY0FBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEtBQUcsRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFFLEtBQUcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFFLEVBQUUsUUFBUSxJQUFFLElBQUU7QUFBRSxjQUFFLElBQUUsT0FBSyxNQUFJLENBQUMsSUFBRSxFQUFFLEtBQUcsRUFBRSxrQkFBa0I7QUFBRyxnQkFBSSxJQUFHLElBQUksS0FBSyxFQUFFLFlBQVksR0FBRSxHQUFFLENBQUMsRUFBRyxrQkFBa0IsR0FDcmYsSUFBRyxJQUFJLEtBQUssRUFBRSxZQUFZLEdBQUUsR0FBRSxDQUFDLEVBQUcsa0JBQWtCO0FBQUUsY0FBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEtBQUcsS0FBRyxLQUFHLEVBQUUsa0JBQWtCLEtBQUcsS0FBSyxJQUFJLEdBQUUsQ0FBQyxLQUFHO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUU7QUFBQyxtQkFBSztBQUFFLGdCQUFJLElBQUUsSUFBSSxLQUFLLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLE1BQUssRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEdBQUUsRUFBRSxJQUFFLE9BQUssTUFBSSxDQUFDLEdBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsRUFBRSxNQUFJLE1BQUksQ0FBQyxHQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxHQUFFLElBQUUsRUFBRSxrQkFBa0IsR0FBRSxJQUFHLElBQUksS0FBSyxFQUFFLFlBQVksR0FBRSxHQUFFLENBQUMsRUFBRyxrQkFBa0IsR0FBRSxJQUFHLElBQUksS0FBSyxFQUFFLFlBQVksR0FBRSxHQUFFLENBQUMsRUFBRyxrQkFBa0IsR0FBRSxJQUFFLEtBQUssSUFBSSxHQUFFLENBQUM7QUFBRSxnQkFBRSxJQUFFLEVBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLE9BQU8sS0FBRyxLQUFHLEtBQUcsQ0FBQyxJQUFFLElBQUUsTUFBSSxLQUFHLE9BQUssSUFBRSxLQUFLLElBQUksR0FBRSxDQUFDLEdBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxJQUM3ZixRQUFNLElBQUUsSUFBRSxJQUFFLEtBQUcsRUFBRTtBQUFHLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsT0FBTztBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxLQUFHLEVBQUUsRUFBRSxZQUFZLENBQUMsSUFBRSxLQUFHLElBQUksRUFBRSxTQUFTLENBQUMsSUFBRSxFQUFFLFFBQVEsSUFBRSxJQUFFO0FBQUUsY0FBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGNBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGNBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsU0FBUztBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsUUFBUTtBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsU0FBUztBQUFFLGNBQUUsSUFBRSxPQUFLLE1BQUksQ0FBQyxJQUFFLEVBQUUsUUFBUTtBQUFFLGdCQUFFLEVBQUUsUUFBUTtBQUFFLG1CQUFPLE9BQU8sTUFBTSxDQUFDLElBQUUsS0FBRyxJQUFFLEdBQUc7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHLFdBQVU7QUFBQyxtQkFBTTtBQUFBLFVBQUc7QUFBQSxVQUFFLElBQUcsV0FBVTtBQUFBLFVBQUM7QUFBQSxVQUFFLElBQUcsU0FBUyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQUs7QUFBRSxtQkFBSztBQUFFLGdCQUFJLEtBQUcsb0JBQUksUUFBTSxZQUFZLEdBQUUsSUFBRSxJQUFJLEtBQUssR0FBRSxHQUFFLENBQUMsR0FBRSxJQUFFLElBQUksS0FBSyxHQUFFLEdBQUUsQ0FBQztBQUFFLGdCQUFFLEVBQUUsa0JBQWtCO0FBQ3hmLGdCQUFJLElBQUUsRUFBRSxrQkFBa0I7QUFBRSxjQUFFLE1BQUksTUFBSSxNQUFJLENBQUMsSUFBRSxLQUFHLEtBQUssSUFBSSxHQUFFLENBQUM7QUFBRSxjQUFFLE1BQUksTUFBSSxNQUFJLENBQUMsSUFBRSxPQUFPLEtBQUcsQ0FBQztBQUFFLGdCQUFFLE9BQUcsRUFBRSxtQkFBbUIsUUFBTyxFQUFDLFFBQU8sT0FBRyxjQUFhLFFBQU8sQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFBRSxnQkFBRSxFQUFFLENBQUM7QUFBRSxnQkFBRSxFQUFFLENBQUM7QUFBRSxnQkFBRSxLQUFHLEVBQUUsR0FBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsRUFBRSxNQUFJLEVBQUUsR0FBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsRUFBRTtBQUFBLFVBQUU7QUFBQSxVQUFFLElBQUcsTUFBSTtBQUFDLGVBQUcsRUFBRTtBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFLO0FBQUUsZ0JBQUUsR0FBRyxNQUFJLEdBQUUsTUFBSSxDQUFDO0FBQUUsbUJBQU8sR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQUs7QUFBRSxnQkFBRSxHQUFHLE1BQUksR0FBRSxNQUFJLENBQUM7QUFBRSxtQkFBTyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHLE1BQUksS0FBSyxJQUFJO0FBQUEsVUFBRSxJQUFHLFdBQVU7QUFBQyxtQkFBTztBQUFBLFVBQVU7QUFBQSxVQUFFLElBQUcsTUFBSSxZQUFZLElBQUk7QUFBQSxVQUFFLElBQUcsU0FBUyxHQUFFO0FBQUMsbUJBQUs7QUFBRSxnQkFBSSxJQUFFLEVBQUU7QUFBTyxnQkFBRyxhQUN2ZjtBQUFFLHFCQUFNO0FBQUcscUJBQVEsSUFBRSxHQUFFLEtBQUcsR0FBRSxLQUFHLEdBQUU7QUFBQyxrQkFBSSxJQUFFLEtBQUcsSUFBRSxNQUFHO0FBQUcsa0JBQUUsS0FBSyxJQUFJLEdBQUUsSUFBRSxTQUFTO0FBQUUsa0JBQUksSUFBRTtBQUFLLGtCQUFFLEtBQUssSUFBSSxHQUFFLENBQUM7QUFBRSxpQkFBRTtBQUFDLHFCQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUUsWUFBVyxLQUFHLFFBQU0sSUFBRSxTQUFPLEtBQUssSUFBRSxHQUFHLE9BQU8sYUFBVyxTQUFPO0FBQU0sb0JBQUc7QUFBQyxxQkFBRyxLQUFLLENBQUM7QUFBRSxxQkFBRztBQUFFLHNCQUFJLElBQUU7QUFBRSx3QkFBTTtBQUFBLGdCQUFDLFNBQU8sR0FBRTtBQUFBLGdCQUFDO0FBQUMsb0JBQUU7QUFBQSxjQUFNO0FBQUMsa0JBQUc7QUFBRSx1QkFBTTtBQUFBLFlBQUU7QUFBQyxtQkFBTTtBQUFBLFVBQUU7QUFBQSxVQUFFLElBQUcsU0FBUyxHQUFFLEdBQUU7QUFBQyxtQkFBSztBQUFFLG1CQUFLO0FBQUUsZ0JBQUksSUFBRTtBQUFFLGVBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxNQUFJO0FBQUMsa0JBQUksSUFBRSxJQUFFO0FBQUUsa0JBQUUsRUFBRSxJQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRTtBQUFFLG1CQUFJLElBQUUsR0FBRSxJQUFFLEVBQUUsUUFBTyxFQUFFO0FBQUUsa0JBQUUsUUFBTSxDQUFDLElBQUUsRUFBRSxXQUFXLENBQUM7QUFBRSxnQkFBRSxNQUFJLENBQUMsSUFBRTtBQUFFLG1CQUFHLEVBQUUsU0FBTztBQUFBLFlBQUMsQ0FBQztBQUFFLG1CQUFPO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUUsR0FBRTtBQUFDLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxnQkFBSSxJQUFFLEdBQUc7QUFBRSxjQUFFLE1BQUksTUFDbGYsQ0FBQyxJQUFFLEVBQUU7QUFBTyxnQkFBSSxJQUFFO0FBQUUsY0FBRSxRQUFRLE9BQUcsS0FBRyxFQUFFLFNBQU8sQ0FBQztBQUFFLGNBQUUsTUFBSSxNQUFJLENBQUMsSUFBRTtBQUFFLG1CQUFPO0FBQUEsVUFBQztBQUFBLFVBQUUsSUFBRyxNQUFJO0FBQUEsVUFBRyxJQUFHLFdBQVU7QUFBQyxtQkFBTztBQUFBLFVBQUU7QUFBQSxVQUFFLElBQUcsV0FBVTtBQUFDLG1CQUFPO0FBQUEsVUFBRTtBQUFBLFVBQUUsSUFBRyxTQUFTLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxtQkFBSztBQUFFLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxxQkFBUSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUUsR0FBRSxLQUFJO0FBQUMsa0JBQUksSUFBRSxFQUFFLE1BQUksTUFBSSxDQUFDLEdBQUUsSUFBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUM7QUFBRSxtQkFBRztBQUFFLHVCQUFRLElBQUUsR0FBRSxJQUFFLEdBQUUsS0FBSTtBQUFDLG9CQUFJLElBQUUsRUFBRSxJQUFFLE1BQUksQ0FBQyxHQUFFLElBQUUsR0FBRyxDQUFDO0FBQUUsc0JBQUksS0FBRyxPQUFLLE1BQUksTUFBSSxJQUFFLEtBQUcsR0FBRyxHQUFHLEdBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxTQUFPLEtBQUcsRUFBRSxLQUFLLENBQUM7QUFBQSxjQUFDO0FBQUMsbUJBQUc7QUFBQSxZQUFDO0FBQUMsY0FBRSxNQUFJLE1BQUksQ0FBQyxJQUFFO0FBQUUsbUJBQU87QUFBQSxVQUFDO0FBQUEsVUFBRSxJQUFHO0FBQUEsVUFBRyxJQUFHO0FBQUEsVUFBRyxJQUFHO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxJQUFHO0FBQUEsVUFBRyxJQUFHO0FBQUEsVUFBRyxJQUFHO0FBQUEsVUFBRyxJQUFHO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxJQUFHO0FBQUEsVUFBRyxJQUFHO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxJQUFHO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxJQUFHO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFDbmYsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsR0FBRTtBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQUcsSUFBRztBQUFBLFVBQ2xmLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLEdBQUU7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLElBQUc7QUFBQSxVQUFHLEdBQUUsU0FBUyxHQUFFO0FBQUMsbUJBQU8sTUFBSTtBQUFB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SUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsYUFBVyxFQUFFLGFBQVcsQ0FBQyxHQUFFLE9BQUssYUFBVyxFQUFFLGFBQVcsRUFBRSxJQUFJLEdBQUUsQ0FBQyxHQUFFLFlBQVUsRUFBRSxZQUFVLFFBQUksWUFBVSxFQUFFLFlBQVUsRUFBRSxJQUFJLENBQUMsR0FBRSxLQUFHLEVBQUUsaUJBQWUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsaUJBQWUsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGVBQWEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxlQUFhLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGdCQUFjLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxnQkFBYyxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGVBQWEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxlQUFhLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGlCQUMzZSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxpQkFBZSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsZ0JBQWMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGdCQUFjLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsa0JBQWdCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsa0JBQWdCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGdCQUFjLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxnQkFBYyxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHVCQUFxQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx1QkFBcUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLG9CQUFrQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxvQkFBa0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGNBQVksQ0FBQyxHQUFFLEdBQUUsT0FDbmYsS0FBRyxFQUFFLGNBQVksRUFBRSxJQUFJLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGNBQVksQ0FBQyxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsY0FBWSxFQUFFLElBQUksR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsY0FBWSxDQUFDLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxjQUFZLEVBQUUsSUFBSSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxjQUFZLENBQUMsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGNBQVksRUFBRSxJQUFJLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLFlBQVUsUUFBSSxLQUFHLEVBQUUsWUFBVSxFQUFFLElBQUksQ0FBQyxHQUFFLEtBQUcsRUFBRSxvQkFBa0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsb0JBQWtCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxrQkFBZ0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxrQkFBZ0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsYUFBVyxDQUFDLEdBQUUsT0FBSyxLQUFHLEVBQUUsYUFBVyxFQUFFLElBQUksR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGVBQWEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQ3BmLEVBQUUsZUFBYSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSx1QkFBcUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsdUJBQXFCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxxQkFBbUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxxQkFBbUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsYUFBVyxDQUFDLEdBQUUsT0FBSyxLQUFHLEVBQUUsYUFBVyxFQUFFLElBQUksR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGlCQUFlLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGlCQUFlLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxZQUFVLFFBQUksS0FBRyxFQUFFLFlBQVUsRUFBRSxJQUFJLENBQUMsR0FBRSxLQUFHLEVB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LEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxpQkFBZSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxpQkFBZSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsb0JBQWtCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLG9CQUFrQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsZ0JBQWMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGdCQUN6ZSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHlCQUF1QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUseUJBQXVCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsYUFBVyxDQUFDLEdBQUUsT0FBSyxLQUFHLEVBQUUsYUFBVyxFQUFFLElBQUksR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGNBQVksQ0FBQyxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsY0FBWSxFQUFFLElBQUksR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUscUJBQW1CLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUscUJBQW1CLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGdCQUFjLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxnQkFBYyxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGtCQUFnQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGtCQUFnQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxtQkFDdGYsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLG1CQUFpQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGdCQUFjLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxnQkFBYyxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHlCQUF1QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUseUJBQXVCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsc0JBQW9CLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxzQkFBb0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSw0QkFBMEIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLDRCQUEwQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQ3JmLEtBQUcsRUFBRSx3QkFBc0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx3QkFBc0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsK0JBQTZCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSwrQkFBNkIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxxQkFBbUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxxQkFBbUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsa0JBQWdCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsa0JBQWdCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHNCQUFvQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQ3BmLE9BQUssS0FBRyxFQUFFLHNCQUFvQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGlCQUFlLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGlCQUFlLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxrQkFBZ0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxrQkFBZ0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsaUJBQWUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsaUJBQWUsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHlCQUF1QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUseUJBQXVCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsNkJBQTJCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLDZCQUMxZSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsNEJBQTBCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSw0QkFBMEIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSwyQkFBeUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSwyQkFBeUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsMEJBQXdCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLDBCQUF3QixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsZ0NBQThCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQ3BmLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxnQ0FBOEIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLDhCQUE0QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLDhCQUE0QixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSw2QkFBMkIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsNkJBQTJCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxnQ0FBOEIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsZ0NBQ2pmLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSx3QkFBc0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx3QkFBc0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdB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LEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLG9CQUFrQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxvQkFBa0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLG9CQUFrQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxvQkFDaGYsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHFCQUFtQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHFCQUFtQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxpQkFBZSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxpQkFBZSxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsdUJBQXFCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHVCQUFxQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsbUJBQWlCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxtQkFBaUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSx5QkFBdUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHlCQUF1QixFQUFFO0FBQUEsVUFBSTtBQUFBLFVBQUU7QUFBQSxVQUFFO0FBQUEsVUFBRTtBQUFBLFVBQUU7QUFBQSxVQUNuZjtBQUFBLFVBQUU7QUFBQSxVQUFFO0FBQUEsVUFBRTtBQUFBLFVBQUU7QUFBQSxVQUFFO0FBQUEsVUFBRTtBQUFBLFVBQUU7QUFBQSxVQUFFO0FBQUEsUUFBQyxHQUFFLEtBQUcsRUFBRSwwQkFBd0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsMEJBQXdCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxjQUFZLENBQUMsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGNBQVksRUFBRSxJQUFJLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGVBQWEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxlQUFhLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGVBQWEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxlQUFhLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGVBQWEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxlQUFhLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHFCQUFtQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHFCQUFtQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxxQ0FDbGYsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsSUFBRyxJQUFHLFFBQU0sS0FBRyxFQUFFLHFDQUFtQyxFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLElBQUcsSUFBRyxFQUFFLEdBQUUsS0FBRyxFQUFFLGlCQUFlLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGlCQUFlLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSx3QkFBc0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSx3QkFBc0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsd0JBQXNCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsd0JBQXNCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGdDQUMzZCxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxnQ0FBOEIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHdCQUFzQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHdCQUFzQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSx5QkFBdUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLHlCQUF1QixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLDhCQUE0QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLDhCQUE0QixFQUFFO0FBQUEsVUFBSTtBQUFBLFVBQUU7QUFBQSxVQUFFO0FBQUEsVUFBRTtBQUFBLFVBQUU7QUFBQSxVQUFFO0FBQUEsVUFBRTtBQUFBLFVBQUU7QUFBQSxVQUFFO0FBQUEsVUFDcGY7QUFBQSxVQUFFO0FBQUEsVUFBRTtBQUFBLFVBQUU7QUFBQSxVQUFFO0FBQUEsVUFBRTtBQUFBLFVBQUU7QUFBQSxVQUFFO0FBQUEsVUFBRTtBQUFBLFVBQUU7QUFBQSxRQUFDLEdBQUUsS0FBRyxFQUFFLCtCQUE2QixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsK0JBQTZCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsMkJBQXlCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsMkJBQXlCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLDRCQUEwQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsNEJBQTBCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsbUJBQWlCLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQ2xmLEVBQUUsbUJBQWlCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsaUJBQWUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsaUJBQWUsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLHNCQUFvQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsc0JBQW9CLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsc0JBQW9CLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxzQkFBb0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSwrQkFBNkIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLCtCQUE2QixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGdCQUMzZSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsZ0JBQWMsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxxQkFBbUIsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxxQkFBbUIsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUs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QUUsT0FBSyxLQUFHLEVBQUUsd0JBQXNCLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxFQUFFLGtCQUFnQixDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGtCQUFnQixFQUFFLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxrQkFBZ0IsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxPQUFLLEtBQUcsRUFBRSxrQkFBZ0IsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsY0FDN2UsQ0FBQyxHQUFFLEdBQUUsT0FBSyxLQUFHLEVBQUUsY0FBWSxFQUFFLElBQUksR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsZUFBYSxDQUFDLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGVBQWEsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsZUFBYSxDQUFDLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGVBQWEsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsZUFBYSxDQUFDLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGVBQWEsRUFBRSxJQUFJLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsZ0JBQWMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGdCQUFjLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFHLEVBQUUsZ0JBQWMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLE9BQUssS0FBRyxFQUFFLGdCQUFjLEVBQUUsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLENB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QSxRQUFDO0FBQzljLGlCQUFTLEdBQUcsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLHNCQUFVLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUs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QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFDM1ksaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFDN2MsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQzdkLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBRSxtQkFBTztBQUFBLFVBQUU7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQ2xkLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxH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RSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUNyYSxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFFLG1CQUFPO0FBQUEsVUFBRTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUN2YixpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUMzWixpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUN4YyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQzdlLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUN0ZCxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFDdlosaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNB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QUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFDM2QsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFFLG1CQUFPO0FBQUEsVUFBRTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFDM2EsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUN6YyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQ25hLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUN0YSxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFB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QUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFDOVYsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQ3ZaLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQ3ZiLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUN0VixpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFDbGUsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBRSxtQkFBTztBQUFBLFVBQUU7QUFBQSxRQUFDO0FBQ25hLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsZUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQzdaLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLGVBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFDcFosaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQ25kLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FB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O0FBQUEsVUFBQztBQUFBLFFBQUM7QUFDcGQsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFO0FBQUUsY0FBRztBQUFDLG1CQUFPLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDLFNBQU8sR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFFLGdCQUFHLE1BQUksSUFBRTtBQUFFLG9CQUFNO0FBQUUsY0FBRSxHQUFFLENBQUM7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxlQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFDbGQsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsU0FBTyxHQUFFO0FBQUMsY0FBRSxDQUFDO0FBQUUsZ0JBQUcsTUFBSSxJQUFFO0FBQUUsb0JBQU07QUFBRSxjQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUM7QUFBQSxRQUFDO0FBQUMsaUJBQVMsR0FBRyxHQUFFO0FBQUMsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFHO0FBQUMsbUJBQU8sR0FBRyxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUUsbUJBQU87QUFBQSxVQUFFO0FBQUEsUUFBQztBQUFDLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRTtBQUFFLGNBQUc7QUFBQyxtQkFBTyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQyxTQUFPLEdBQUU7QUFBQyxjQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFJLElBQUU7QUFBRSxvQkFBTTtBQUFFLGNBQUUsR0FBRSxDQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUyxHQUFHLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMs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QUFDLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxTQUFRLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxjQUFhLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxXQUFVLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUU7QUFBQSxjQUFHO0FBQUEsY0FDeGY7QUFBQSxjQUFFO0FBQUEsWUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxTQUFRLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxTQUFRLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxTQUFRLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sT0FBRztBQUFDLGNBQUUsR0FBRyxPQUFNLEdBQUUsTUFBTTtBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sQ0FBQyxHQUFFLEdBQUUsTUFBSTtBQUFDLGNBQUUsR0FBRyxXQUFVLEdBQUUsRUFBQyxLQUFJLEdBQUUsS0FBSSxFQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxRQUFPLE9BQUc7QUFBQyxjQUFFLEdBQUcsUUFBTyxHQUFFLE1BQU07QUFBQSxVQUFDO0FBQUEsVUFBRSxRQUFPLENBQUMsR0FBRSxNQUFJO0FBQUMsY0FBRSxHQUFHLE9BQU0sR0FBRSxFQUFDLE9BQU0sRUFBQyxDQUFDO0FBQUEsVUFBQztBQUFBLFVBQUUsUUFBTyxPQUFHO0FBQUMsY0FBRSxHQUFHLFFBQU8sR0FBRSxNQUFNO0FBQUEsVUFBQztBQUFBLFVBQUUsUUFBTyxDQUFDLEdBQUUsTUFBSTtBQUFDLGNBQUUsR0FBRyxhQUFZLEdBQUUsRUFBQyxPQUFNLEVBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8s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VUFBUyxHQUFFLFdBQVUsQ0FBQyxHQUFFLENBQUMsR0FBRSxPQUFNLEdBQUUsY0FBYSxDQUFDLEdBQUUsQ0FBQyxHQUFFLE1BQUssQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsU0FBUSxDQUFDLEdBQUUsQ0FBQyxHQUFFLFlBQVcsTUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQUksQ0FBQyxFQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxRQUFPLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsTUFBSTtBQUFDLGNBQUUsR0FBRyxRQUFPLEdBQUUsRUFBQyxRQUFPLElBQUUsU0FBTyxRQUFPLFVBQVMsR0FBRSxXQUFVLENBQUMsQ0FBQyxHQUFFLE9BQU0sR0FBRSxjQUFhLENBQUMsQ0FBQyxHQUFFLE1BQUssQ0FBQyxHQUFFLENBQUMsR0FBRSxTQUFRLENBQUMsQ0FBQyxHQUFFLFlBQVcsTUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQUksQ0FBQyxFQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxRQUFPLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQyxjQUFFLEdBQUcsUUFBTyxHQUFFLEVBQUMsUUFBTyxJQUFFLFNBQU8sUUFBTyxVQUFTLEdBQUUsV0FBVSxDQUFDLEdBQUUsQ0FBQyxHQUFFLE9BQU0sR0FBRSxjQUFhO0FBQUEsY0FBQztBQUFBLGNBQ3BmO0FBQUEsWUFBQyxHQUFFLE1BQUssQ0FBQyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsU0FBUSxDQUFDLEdBQUUsQ0FBQyxHQUFFLFlBQVcsTUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQUksQ0FBQyxFQUFDLENBQUM7QUFBQSxVQUFDO0FBQUEsVUFBRSxRQUFPLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxNQUFJO0FBQUMsY0FBRSxHQUFHLGlCQUFnQixHQUFFLEVBQUMsUUFBTyxJQUFFLFNBQU8sUUFBTyxTQUFRLEdBQUUsV0FBVSxDQUFDLENBQUMsR0FBRSxPQUFNLEdBQUUsY0FBYSxDQUFDLENBQUMsR0FBRSxNQUFLLENBQUMsR0FBRSxDQUFDLEdBQUUsU0FBUSxDQUFDLENBQUMsR0FBRSxVQUFTLE1BQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFJLENBQUMsR0FBRSxlQUFjLElBQUUsTUFBTSxLQUFLLEVBQUUsRUFBRSxTQUFTLE1BQUksR0FBRSxJQUFFLE1BQUksQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFFLGFBQVksSUFBRSxNQUFNLEtBQUssRUFBRSxFQUFFLFNBQVMsTUFBSSxHQUFFLElBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxDQUFDLEVBQUMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLFFBQU8sQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxNQUFJO0FBQUMsY0FBRSxHQUFHLGlCQUFnQixHQUFFLEVBQUMsUUFBTyxJQUFFLFNBQU8sUUFBTyxTQUFRLEdBQUUsV0FBVSxNQUFNLEtBQUssRUFBRSxFQUFFLFNBQVMsTUFBSSxHQUFFLElBQ3BmLE1BQUksQ0FBQyxDQUFDLEdBQUUsT0FBTSxHQUFFLGFBQVksTUFBTSxLQUFLLEVBQUUsRUFBRSxTQUFTLE1BQUksR0FBRSxJQUFFLE1BQUksQ0FBQyxDQUFDLEdBQUUsTUFBSyxNQUFNLEtBQUssRUFBRSxFQUFFLFNBQVMsTUFBSSxHQUFFLElBQUUsTUFBSSxDQUFDLENBQUMsR0FBRSxTQUFRLE1BQU0sS0FBSyxFQUFFLEVBQUUsU0FBUyxNQUFJLEdBQUUsSUFBRSxNQUFJLENBQUMsQ0FBQyxHQUFFLFVBQVMsTUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQUksQ0FBQyxHQUFFLGVBQWMsSUFBRSxJQUFFLE1BQU0sS0FBSyxFQUFFLEVBQUUsU0FBUyxNQUFJ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LEdBQUU7QUFBQyxpQkFBTyxJQUFFLEVBQUUsSUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsSUFBRTtBQUFBLFFBQUU7QUFDL2MsaUJBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxpQkFBTyxJQUFFLEVBQUUsSUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxJQUFFO0FBQUEsUUFBRTtBQUFDLFlBQUksS0FBRyxDQUFDLE1BQUssQ0FBQyxHQUFFLENBQUMsQ0FBQztBQUFFLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUc7QUFBRSxtQkFBTyxFQUFFLElBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUUsaUJBQUs7QUFBRSxpQkFBSztBQUFFLGlCQUFLO0FBQUUsbUJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLEdBQUUsS0FBSTtBQUFDLGdCQUFJLElBQUUsRUFBRSxFQUFFLEtBQUcsTUFBSSxDQUFDLEdBQUUsSUFBRSxFQUFFLEVBQUUsSUFBRSxLQUFHLE1BQUksQ0FBQztBQUFFLGlCQUFHO0FBQUUscUJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxLQUFJO0FBQUMsa0JBQUksSUFBRSxFQUFFLEVBQUUsSUFBRSxNQUFJLENBQUMsR0FBRSxJQUFFLEdBQUcsQ0FBQztBQUFFLG9CQUFJLEtBQUcsT0FBSyxNQUFJLE1BQUksSUFBRSxLQUFHLEdBQUcsR0FBRyxHQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUUsU0FBTyxLQUFHLEVBQUUsS0FBSyxDQUFDO0FBQUEsWUFBQztBQUFDLGlCQUFHO0FBQUEsVUFBQztBQUFDLFlBQUUsRUFBRSxLQUFHLE1BQUksQ0FBQyxJQUFFO0FBQUUsaUJBQU87QUFBQSxRQUFDO0FBQUMsWUFBSSxLQUFHLENBQUMsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLEVBQUUsR0FBRSxLQUFHLENBQUMsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLEVBQUU7QUFBRSxpQkFBUyxHQUFHLEdBQUU7QUFBQyxjQUFJLElBQUUsTUFBTSxHQUFHLENBQUMsSUFBRSxDQUFDO0FBQUUsYUFBRyxHQUFFLEdBQUUsR0FBRSxFQUFFLE1BQU07QUFBRSxpQkFBTztBQUFBLFFBQUM7QUFDamYsWUFBSSxLQUFHLENBQUMsR0FBRSxNQUFJO0FBQUMsWUFBRSxFQUFFLElBQUksR0FBRSxNQUFJLENBQUM7QUFBQSxRQUFDO0FBQy9CLGlCQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLG1CQUFTLEVBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQyxpQkFBSSxJQUFFLFlBQVUsT0FBTyxJQUFFLEVBQUUsU0FBUyxJQUFFLEtBQUcsSUFBRyxFQUFFLFNBQU87QUFBRyxrQkFBRSxFQUFFLENBQUMsSUFBRTtBQUFFLG1CQUFPO0FBQUEsVUFBQztBQUFDLG1CQUFTLEVBQUUsR0FBRSxHQUFFO0FBQUMsbUJBQU8sRUFBRSxHQUFFLEdBQUUsR0FBRztBQUFBLFVBQUM7QUFBQyxtQkFBUyxFQUFFLEdBQUUsR0FBRTtBQUFDLHFCQUFTLEVBQUUsSUFBRztBQUFDLHFCQUFPLElBQUUsS0FBRyxLQUFHLElBQUUsS0FBRyxJQUFFO0FBQUEsWUFBQztBQUFDLGdCQUFJO0FBQUUsbUJBQUssSUFBRSxFQUFFLEVBQUUsWUFBWSxJQUFFLEVBQUUsWUFBWSxDQUFDLE1BQUksT0FBSyxJQUFFLEVBQUUsRUFBRSxTQUFTLElBQUUsRUFBRSxTQUFTLENBQUMsT0FBSyxJQUFFLEVBQUUsRUFBRSxRQUFRLElBQUUsRUFBRSxRQUFRLENBQUM7QUFBRyxtQkFBTztBQUFBLFVBQUM7QUFBQyxtQkFBUyxFQUFFLEdBQUU7QUFBQyxvQkFBTyxFQUFFLE9BQU8sR0FBRTtBQUFBLGNBQUMsS0FBSztBQUFFLHVCQUFPLElBQUksS0FBSyxFQUFFLFlBQVksSUFBRSxHQUFFLElBQUcsRUFBRTtBQUFBLGNBQUUsS0FBSztBQUFFLHVCQUFPO0FBQUEsY0FBRSxLQUFLO0FBQUUsdUJBQU8sSUFBSSxLQUFLLEVBQUUsWUFBWSxHQUFFLEdBQUUsQ0FBQztBQUFBLGNBQUUsS0FBSztBQUFFLHVCQUFPLElBQUk7QUFBQSxrQkFBSyxFQUFFLFlBQVk7QUFBQSxrQkFDNWY7QUFBQSxrQkFBRTtBQUFBLGdCQUFDO0FBQUEsY0FBRSxLQUFLO0FBQUUsdUJBQU8sSUFBSSxLQUFLLEVBQUUsWUFBWSxHQUFFLEdBQUUsQ0FBQztBQUFBLGNBQUUsS0FBSztBQUFFLHVCQUFPLElBQUksS0FBSyxFQUFFLFlBQVksSUFBRSxHQUFFLElBQUcsRUFBRTtBQUFBLGNBQUUsS0FBSztBQUFFLHVCQUFPLElBQUksS0FBSyxFQUFFLFlBQVksSUFBRSxHQUFFLElBQUcsRUFBRTtBQUFBLFlBQUM7QUFBQSxVQUFDO0FBQUMsbUJBQVMsRUFBRSxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFO0FBQUcsaUJBQUksSUFBRSxJQUFJLEtBQU0sSUFBSSxLQUFLLEVBQUUsS0FBRyxNQUFLLEdBQUUsQ0FBQyxFQUFHLFFBQVEsQ0FBQyxHQUFFLElBQUUsS0FBRztBQUFDLGtCQUFJLElBQUUsRUFBRSxTQUFTLEdBQUUsS0FBRyxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUUsS0FBRyxJQUFJLENBQUM7QUFBRSxrQkFBRyxJQUFFLElBQUUsRUFBRSxRQUFRO0FBQUUscUJBQUcsSUFBRSxFQUFFLFFBQVEsSUFBRSxHQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUUsS0FBRyxJQUFFLEVBQUUsU0FBUyxJQUFFLENBQUMsS0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFFLEVBQUUsWUFBWSxFQUFFLFlBQVksSUFBRSxDQUFDO0FBQUEsbUJBQU87QUFBQyxrQkFBRSxRQUFRLEVBQUUsUUFBUSxJQUFFLENBQUM7QUFBRTtBQUFBLGNBQUs7QUFBQSxZQUFDO0FBQUMsZ0JBQUUsSUFBSSxLQUFLLEVBQUUsWUFBWSxJQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUUsZ0JBQUUsRUFBRSxJQUFJO0FBQUEsY0FBSyxFQUFFLFlBQVk7QUFBQSxj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QUFHLEdBQUUsU0FBUyxHQUFFLEdBQUU7QUFBQyxtQkFBSztBQUFFLGlCQUFHLE1BQUksSUFBRSxXQUFXLE1BQUksR0FBRyxDQUFDLElBQUUsSUFBRSxZQUFZO0FBQUEsY0FBQyxjQUFhO0FBQUEsY0FDNWYsS0FBSTtBQUFBLFlBQWMsQ0FBQyxLQUFHLElBQUUsRUFBRSxHQUFHLENBQUMsTUFBSSxFQUFFLFlBQVksRUFBQyxLQUFJLGVBQWMsQ0FBQztBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsV0FBVTtBQUFDLG1CQUFNO0FBQUEsVUFBRTtBQUFBLFVBQUUsR0FBRTtBQUFBLFVBQUcsR0FBRSxTQUFTLEdBQUU7QUFBQyxpQkFBRyxFQUFFLEdBQUcsTUFBSSxDQUFDLEVBQUUsSUFBSTtBQUFBLFVBQUM7QUFBQSxVQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDLGdCQUFFLElBQUUsWUFBVSxJQUFFLFVBQVEsQ0FBQyxDQUFDLEtBQUcsTUFBSSxLQUFHLGFBQVcsSUFBRTtBQUFJLG1CQUFLO0FBQUUsZ0JBQUUsSUFBSSxLQUFLLE1BQUksQ0FBQztBQUFFLGNBQUUsRUFBRSxLQUFHLE1BQUksQ0FBQyxJQUFFLEVBQUUsY0FBYztBQUFFLGNBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxjQUFjO0FBQUUsY0FBRSxFQUFFLElBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLFlBQVk7QUFBRSxjQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGNBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxZQUFZO0FBQUUsY0FBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLGVBQWUsSUFBRTtBQUFLLGNBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxVQUFVO0FBQUUsaUJBQUcsRUFBRSxRQUFRLElBQUUsS0FBSztBQUFBLGNBQUksRUFBRSxlQUFlO0FBQUEsY0FDM2Y7QUFBQSxj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LElBQUUsS0FBRyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUUsRUFBRSxRQUFRLElBQUUsSUFBRTtBQUFFLGNBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUU7QUFBRSxjQUFFLEVBQUUsS0FBRyxNQUFJLENBQUMsSUFBRSxFQUFFLFdBQVc7QUFBRSxjQUFFLEVBQUUsSUFBRSxLQUFHLE1BQUksQ0FBQyxJQUFFLEVBQUUsV0FBVztBQUFFLGNBQUUsRUFBRSxJQUFFLEtBQUcsTUFBSSxDQUFDLElBQUUsRUFBRSxTQUFTO0FBQUUsY0FBRSxFQUFFLElBQUUsTUFBSSxNQUFJLENBQUMsSUFBRSxFQUFFLFFBQVE7QUFBRSxjQUFFLEVBQUUsSUFBRSxNQUFJLE1BQUksQ0FBQyxJQUFFLEVBQUUsU0FBUztBQUFFLGNBQUUsRUFBRSxJQUFFLE1BQUksTUFBSSxDQUFDLElBQUUsRUFBRSxRQUFRO0FBQUUsZ0JBQUUsRUFBRSxRQUFRLElBQUU7QUFBSSxtQkFBTyxJQUFJLElBQUUsR0FBRSxLQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBRSxJQUFFLElBQUUsQ0FBQyxLQUFLLE1BQU0sSUFBRSxVQUFVLE1BQUksSUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFJLE1BQUksVUFBVSxNQUFJLElBQUUsRUFBRSxHQUFFLE1BQUk7QUFBQSxVQUFDO0FBQUEsVUFBRSxHQUFFO0FBQUEsVUFBRyxHQUFFO0FBQUEsVUFDcGYsR0FBRSxTQUFTLEdBQUUsR0FBRSxHQUFFO0FBQUMscUJBQVMsRUFBRSxHQUFFO0FBQUMsc0JBQU8sSUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixLQUFHLEVBQUUsQ0FBQyxJQUFFO0FBQUEsWUFBSztBQUFDLG1CQUFLO0FBQUUsbUJBQUs7QUFBRSxtQkFBSztBQUFFLGdCQUFJLEtBQUcsb0JBQUksUUFBTSxZQUFZLEdBQUUsSUFBRSxJQUFJLEtBQUssR0FBRSxHQUFFLENBQUMsR0FBRSxJQUFFLElBQUksS0FBSyxHQUFFLEdB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QUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFDbkU7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFFBQ2xFLENBQUMsQ0FBQztBQUFBLE1BQ0osU0FBUyxHQUFHO0FBQ1YsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsSUFBTSxrQkFBa0IsTUFBZTtBQUNyQyxVQUFJO0FBZUYsZUFBTyxZQUFZLFNBQVMsSUFBSSxXQUFXO0FBQUEsVUFDekM7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUN2RjtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUc7QUFBQSxVQUFHO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEs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U0FBU0EsY0FBYSxDQUFDO0FBQUEsRUFDekM7QUFDQSxrQkFBZ0IsT0FBT0EsY0FBYSxFQUFFO0FBQ3RDLGtCQUFnQixRQUFRQSxjQUFhLEVBQUU7QUFDekM7QUFFQSxPQUFPLGVBQWVDLEtBQUksVUFBVSxPQUFPLEVBQUMsT0FBT0MsVUFBUyxZQUFZLEtBQUksQ0FBQzsiLAogICJuYW1lcyI6IFsiaSIsICJlbnYiLCAiVGVuc29yIiwgIlRlbnNvciIsICJJbmZlcmVuY2VTZXNzaW9uIiwgIlRlbnNvciIsICJUcmFpbmluZ1Nlc3Npb24iLCAiSW5mZXJlbmNlU2Vzc2lvbiIsICJUZW5zb3IiLCAiVHJhaW5pbmdTZXNzaW9uIiwgImVudiIsICJqb2luIiwgImNwdXMiLCAid2FzbSIsICJ3YXNtIiwgIndhc20iLCAicmVhZEZpbGUiLCAicmVhZEZpbGUiLCAicGFkIiwgImluaXQiLCAib2Zmc2V0cyIsICJpbmRpY2VzIiwgImltcGwiLCAidmFsaWRhdGVJbnB1dHMiLCAicmVkdWNlT3BzIiwgInZhbGlkYXRlSW5wdXRzIiwgInZhbGlkYXRlSW5wdXRzIiwgImkiLCAidmFsaWRhdGVJbnB1dHMiLCAiZW52IiwgInZhbGlkYXRlSW5wdXRzIiwgInZhbGlkYXRlSW5wdXRzIiwgImEiLCAiYiIsICJ0cmFuc3Bvc2UiLCAib3V0cHV0VmFyaWFibGUiLCAiaW5uZXJFbGVtZW50U2l6ZSIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJvdXRwdXRTaGFwZSIsICJ0cmFuc3Bvc2VkV2VpZ2h0IiwgImNvbnZJbnB1dHMiLCAiaW5uZXJFbGVtZW50U2l6ZSIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJwZXJtRnVuY3Rpb25Cb2R5IiwgInN5bWJvbCIsICJyZWR1Y2VPcHMiLCAidmFsaWRhdGVJbnB1dHMiLCAiY2FsY3VsYXRlT3V0cHV0U2hhcGUiLCAiZmFzdEdlbHUiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAiZGF0YVR5cGUiLCAidmFsaWRhdGVJbnB1dHMiLCAid2VpZ2h0VHJhbnNwb3NlQXR0cmlidXRlIiwgInZhbGlkYXRlSW5wdXRzIiwgInZhbGlkYXRlSW5wdXRzIiwgImVudiIsICJlbnYiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAidmFsaWRhdGVJbnB1dHMiLCAiY29tcG9uZW50cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJ2YWxpZGF0ZUlucHV0cyIsICJnZXRPdXRwdXRTaGFwZSIsICJhIiwgImIiLCAiYyIsICJmYXN0R2VsdSIsICJlbnYiLCAiaSIsICJlbnYiLCAiZW52IiwgIndhc20iLCAidGVuc29yIiwgImVycm9yQ29kZSIsICJpIiwgImluaXRpYWxpemluZyIsICJpbml0aWFsaXplZCIsICJhYm9ydGVkIiwgImNvcHlGcm9tRXh0ZXJuYWxCdWZmZXIiLCAiY3JlYXRlU2Vzc2lvbiIsICJyZWxlYXNlU2Vzc2lvbiIsICJydW4iLCAiZW5kUHJvZmlsaW5nIiwgImVudiIsICJUZW5zb3IiLCAiY29weUZyb21FeHRlcm5hbEJ1ZmZlciIsICJjcmVhdGVTZXNzaW9uIiwgInJlbGVhc2VTZXNzaW9uIiwgInJ1biIsICJlbmRQcm9maWxpbmciLCAiZW52IiwgInZlcnNpb24iLCAid2FzbUJhY2tlbmQiLCAiZW52IiwgInZlcnNpb24iXQp9Cg==